PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+CjxodG1sPjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KCgo8dGl0bGU+QysrIFN0YW5kYXJkIExpYnJhcnkgRGVmZWN0IFJlcG9ydCBMaXN0PC90aXRsZT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KcCB7dGV4dC1hbGlnbjpqdXN0aWZ5fQpsaSB7dGV4dC1hbGlnbjpqdXN0aWZ5fQppbnMge2JhY2tncm91bmQtY29sb3I6I0EwRkZBMH0KZGVsIHtiYWNrZ3JvdW5kLWNvbG9yOiNGRkEwQTB9Cjwvc3R5bGU+CjwvaGVhZD48Ym9keT4KPHRhYmxlPgo8dGJvZHk+PHRyPgo8dGQgYWxpZ249ImxlZnQiPkRvYy4gbm8uPC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij5OMjcyOD0wOC0wMjM4PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImxlZnQiPkRhdGU6PC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij4yMDA4LTA4LTI0PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImxlZnQiPlByb2plY3Q6PC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij5Qcm9ncmFtbWluZyBMYW5ndWFnZSBDKys8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBhbGlnbj0ibGVmdCI+UmVwbHkgdG86PC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij5Ib3dhcmQgSGlubmFudCAmbHQ7PGEgaHJlZj0ibWFpbHRvOmhvd2FyZC5oaW5uYW50QGdtYWlsLmNvbSI+aG93YXJkLmhpbm5hbnRAZ21haWwuY29tPC9hPiZndDs8L3RkPgo8L3RyPgo8L3Rib2R5PjwvdGFibGU+CjxoMT5DKysgU3RhbmRhcmQgTGlicmFyeSBEZWZlY3QgUmVwb3J0IExpc3QgKFJldmlzaW9uIFI1OSk8L2gxPgoKICA8cD5SZWZlcmVuY2UgSVNPL0lFQyBJUyAxNDg4MjoxOTk4KEUpPC9wPgogIDxwPkFsc28gc2VlOjwvcD4KICAgIDx1bD4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXRvYy5odG1sIj5UYWJsZSBvZiBDb250ZW50czwvYT4gZm9yIGFsbCBsaWJyYXJ5IGlzc3Vlcy48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCI+SW5kZXggYnkgU2VjdGlvbjwvYT4gZm9yIGFsbCBsaWJyYXJ5IGlzc3Vlcy48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwiPkluZGV4IGJ5IFN0YXR1czwvYT4gZm9yIGFsbCBsaWJyYXJ5IGlzc3Vlcy48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwiPkxpYnJhcnkgQWN0aXZlIElzc3VlcyBMaXN0PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCI+TGlicmFyeSBDbG9zZWQgSXNzdWVzIExpc3Q8L2E+PC9saT4KICAgIDwvdWw+CiAgPHA+VGhpcyBkb2N1bWVudCBjb250YWlucyBvbmx5IGxpYnJhcnkgaXNzdWVzIHdoaWNoIGhhdmUgYmVlbiBjbG9zZWQKICBieSB0aGUgTGlicmFyeSBXb3JraW5nIEdyb3VwIChMV0cpIGFmdGVyIGJlaW5nIGZvdW5kIHRvIGJlIGRlZmVjdHMKICBpbiB0aGUgc3RhbmRhcmQuICBUaGF0IGlzLCBpc3N1ZXMgd2hpY2ggaGF2ZSBhIHN0YXR1cyBvZiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+LAogIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4sIG9yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1JSIj5SUjwvYT4uIFNlZSB0aGUKICA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCI+TGlicmFyeSBDbG9zZWQgSXNzdWVzIExpc3Q8L2E+IGZvciBpc3N1ZXMgY2xvc2VkIGFzIG5vbi1kZWZlY3RzLiAgU2VlIHRoZQogIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIj5MaWJyYXJ5IEFjdGl2ZSBJc3N1ZXMgTGlzdDwvYT4gZm9yIGFjdGl2ZSBpc3N1ZXMgYW5kIG1vcmUgaW5mb3JtYXRpb24uICBUaGUKICBpbnRyb2R1Y3RvcnkgbWF0ZXJpYWwgaW4gdGhhdCBkb2N1bWVudCBhbHNvIGFwcGxpZXMgdG8gdGhpcwogIGRvY3VtZW50LjwvcD4KCjxoMj5SZXZpc2lvbiBIaXN0b3J5PC9oMj4KPHVsPgo8bGk+UjU5OiAKMjAwOC0wOC0yMiBwcmUtU2FuIEZyYW5jaXNjbyBtYWlsaW5nLgo8dWw+CjxsaT48Yj5TdW1tYXJ5OjwvYj48dWw+CjxsaT4xOTIgb3BlbiBpc3N1ZXMsIHVwIGJ5IDkuPC9saT4KPGxpPjY4NiBjbG9zZWQgaXNzdWVzLCB1cCBieSAwLjwvbGk+CjxsaT44NzggaXNzdWVzIHRvdGFsLCB1cCBieSA5LjwvbGk+CjwvdWw+PC9saT4KPGxpPjxiPkRldGFpbHM6PC9iPjx1bD4KPGxpPkFkZGVkIHRoZSBmb2xsb3dpbmcgTmV3IGlzc3VlczogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODcwIj44NzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NzEiPjg3MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg3MiI+ODcyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODczIj44NzM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NzQiPjg3NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg3NSI+ODc1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODc2Ij44NzY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NzciPjg3NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg3OCI+ODc4PC9hPi48L2xpPgo8L3VsPjwvbGk+CjwvdWw+CjwvbGk+CjxsaT5SNTg6IAoyMDA4LTA3LTI4IG1pZC10ZXJtIG1haWxpbmcuCjx1bD4KPGxpPjxiPlN1bW1hcnk6PC9iPjx1bD4KPGxpPjE4MyBvcGVuIGlzc3VlcywgdXAgYnkgMTIuPC9saT4KPGxpPjY4NiBjbG9zZWQgaXNzdWVzLCBkb3duIGJ5IDQuPC9saT4KPGxpPjg2OSBpc3N1ZXMgdG90YWwsIHVwIGJ5IDguPC9saT4KPC91bD48L2xpPgo8bGk+PGI+RGV0YWlsczo8L2I+PHVsPgo8bGk+QWRkZWQgdGhlIGZvbGxvd2luZyBOZXcgaXNzdWVzOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NjIiPjg2MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg2MyI+ODYzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODY0Ij44NjQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NjUiPjg2NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg2NiI+ODY2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODY3Ij44Njc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NjgiPjg2ODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg2OSI+ODY5PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIFBlbmRpbmcgTkFEIEVkaXRvcmlhbCB0byBOQUQgRWRpdG9yaWFsOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzOTMiPjM5MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU1NyI+NTU3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTkyIj41OTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3NTQiPjc1NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzc1NyI+NzU3PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIFBlbmRpbmcgV1AgdG8gT3BlbjogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjQ0Ij42NDQ8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gV1AgdG8gUmVhZHk6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzM4NyI+Mzg3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjI5Ij42Mjk8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gUGVuZGluZyBOQUQgRWRpdG9yaWFsIHRvIFJldmlldzogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzA5Ij43MDk8L2E+LjwvbGk+CjwvdWw+PC9saT4KPC91bD4KPC9saT4KPGxpPlI1NzogCjIwMDgtMDYtMjcgcG9zdC1Tb3BoaWEgQW50aXBvbGlzIG1haWxpbmcuCjx1bD4KPGxpPjxiPlN1bW1hcnk6PC9iPjx1bD4KPGxpPjE3MSBvcGVuIGlzc3VlcywgZG93biBieSAyMC48L2xpPgo8bGk+NjkwIGNsb3NlZCBpc3N1ZXMsIHVwIGJ5IDQzLjwvbGk+CjxsaT44NjEgaXNzdWVzIHRvdGFsLCB1cCBieSAyMy48L2xpPgo8L3VsPjwvbGk+CjxsaT48Yj5EZXRhaWxzOjwvYj48dWw+CjxsaT5BZGRlZCB0aGUgZm9sbG93aW5nIE5BRCBpc3N1ZXM6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzg0MCI+ODQwPC9hPi48L2xpPgo8bGk+QWRkZWQgdGhlIGZvbGxvd2luZyBOZXcgaXNzdWVzOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NDEiPjg0MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg0MyI+ODQzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODQ1Ij44NDU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NDYiPjg0NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg0NyI+ODQ3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODQ5Ij44NDk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NTMiPjg1MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg1NCI+ODU0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODU1Ij44NTU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NTYiPjg1NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg1NyI+ODU3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODU4Ij44NTg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NTkiPjg1OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg2MCI+ODYwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODYxIj44NjE8L2E+LjwvbGk+CjxsaT5BZGRlZCB0aGUgZm9sbG93aW5nIE9wZW4gaXNzdWVzOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MzkiPjgzOTwvYT4uPC9saT4KPGxpPkFkZGVkIHRoZSBmb2xsb3dpbmcgUmVhZHkgaXNzdWVzOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NDIiPjg0MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg0NCI+ODQ0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODQ4Ij44NDg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NTAiPjg1MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg1MiI+ODUyPC9hPi48L2xpPgo8bGk+QWRkZWQgdGhlIGZvbGxvd2luZyBSZXZpZXcgaXNzdWVzOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4NTEiPjg1MTwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOZXcgdG8gTkFEOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM4MjYiPjgyNjwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBPcGVuIHRvIE5BRDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTcwIj41NzA8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gTmV3IHRvIE5BRCBFZGl0b3JpYWw6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzc4NiI+Nzg2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjODMxIj44MzE8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gT3BlbiB0byBOQUQgRWRpdG9yaWFsOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3NTYiPjc1NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzc2NyI+NzY3PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE5ldyB0byBPcGVuOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MjMiPjcyMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzcyNiI+NzI2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzk0Ij43OTQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MTUiPjgxNTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgyNSI+ODI1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODMwIj44MzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MzMiPjgzMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgzNCI+ODM0PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIFJlYWR5IHRvIE9wZW46IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQ3MSI+NDcxPC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIFJldmlldyB0byBPcGVuOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MzkiPjUzOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzcxMSI+NzExPC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE5ldyB0byBSZWFkeTogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzEzIj43MTM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MTQiPjcxNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc2OSI+NzY5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzcyIj43NzI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3NzkiPjc3OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc4NyI+Nzg3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODA1Ij44MDU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MDYiPjgwNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgwNyI+ODA3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODA4Ij44MDg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MDkiPjgwOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgxMyI+ODEzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODI0Ij44MjQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MjkiPjgyOTwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBPcGVuIHRvIFJlYWR5OiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMxODAiPjE4MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzM5NiI+Mzk2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTIyIj41MjI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MjAiPjcyMDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc2MiI+NzYyPC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIFJldmlldyB0byBSZWFkeTogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjkxIj42OTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MjgiPjcyODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc3MSI+NzcxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzc2Ij43NzY8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gTmV3IHRvIFJldmlldzogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjkyIj42OTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2OTgiPjY5ODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc1MiI+NzUyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODA0Ij44MDQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MjMiPjgyMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgyOCI+ODI4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODMyIj44MzI8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gT3BlbiB0byBSZXZpZXc6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzIzIj4yMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzY3NSI+Njc1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzM0Ij43MzQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MDMiPjgwMzwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBSZWFkeSB0byBSZXZpZXc6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc1OCI+NzU4PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIFJlYWR5IHRvIFdQOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMzODciPjM4NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MTgiPjUxODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NTAiPjU1MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NzQiPjU3NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1OTUiPjU5NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1OTYiPjU5NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MTIiPjYxMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MTgiPjYxODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzYyOSI+NjI5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYzOCI+NjM4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY3MiI+NjcyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY3MyI+NjczPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY4NSI+Njg1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzcxMCI+NzEwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzcxNSI+NzE1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzcyMiI+NzIyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc0MCI+NzQwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc0MyI+NzQzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc0NCI+NzQ0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc0NiI+NzQ2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc0OSI+NzQ5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc1NSI+NzU1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc1OSI+NzU5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc2MSI+NzYxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc2NiI+NzY2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc2OCI+NzY4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc3MCI+NzcwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc3NSI+Nzc1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc3NyI+Nzc3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc3OCI+Nzc4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc4MSI+NzgxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc4MiI+NzgyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc4MyI+NzgzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc4OSI+Nzg5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc5MiI+NzkyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc5OCI+Nzk4PC9hPi48L2xpPgo8L3VsPjwvbGk+CjwvdWw+CjwvbGk+CjxsaT5SNTY6IAoyMDA4LTA1LTE2IHByZS1Tb3BoaWEgQW50aXBvbGlzIG1haWxpbmcuCjx1bD4KPGxpPjxiPlN1bW1hcnk6PC9iPjx1bD4KPGxpPjE5MSBvcGVuIGlzc3VlcywgdXAgYnkgMjQuPC9saT4KPGxpPjY0NyBjbG9zZWQgaXNzdWVzLCB1cCBieSAxLjwvbGk+CjxsaT44MzggaXNzdWVzIHRvdGFsLCB1cCBieSAyNS48L2xpPgo8L3VsPjwvbGk+CjxsaT48Yj5EZXRhaWxzOjwvYj48dWw+CjxsaT5BZGRlZCB0aGUgZm9sbG93aW5nIE5ldyBpc3N1ZXM6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgxNCI+ODE0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODE1Ij44MTU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MTYiPjgxNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgxNyI+ODE3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODE4Ij44MTg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MTkiPjgxOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgyMCI+ODIwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODIxIj44MjE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MjIiPjgyMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgyMyI+ODIzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODI0Ij44MjQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MjUiPjgyNTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzgyNiI+ODI2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODI3Ij44Mjc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MjgiPjgyODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgyOSI+ODI5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODMwIj44MzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM4MzEiPjgzMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgzMiI+ODMyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODMzIj44MzM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MzQiPjgzNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgzNSI+ODM1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODM2Ij44MzY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MzciPjgzNzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgzOCI+ODM4PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE5ldyB0byBOQUQ6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzgwMiI+ODAyPC9hPi48L2xpPgo8L3VsPjwvbGk+CjwvdWw+CjwvbGk+CjxsaT5SNTU6IAoyMDA4LTAzLTE0IHBvc3QtQmVsbGV2dWUgbWFpbGluZy4KPHVsPgo8bGk+PGI+U3VtbWFyeTo8L2I+PHVsPgo8bGk+MTY3IG9wZW4gaXNzdWVzLCBkb3duIGJ5IDM5LjwvbGk+CjxsaT42NDYgY2xvc2VkIGlzc3VlcywgdXAgYnkgNjUuPC9saT4KPGxpPjgxMyBpc3N1ZXMgdG90YWwsIHVwIGJ5IDI2LjwvbGk+CjwvdWw+PC9saT4KPGxpPjxiPkRldGFpbHM6PC9iPjx1bD4KPGxpPkFkZGVkIHRoZSBmb2xsb3dpbmcgRHVwIGlzc3VlczogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzk1Ij43OTU8L2E+LjwvbGk+CjxsaT5BZGRlZCB0aGUgZm9sbG93aW5nIE5BRCBpc3N1ZXM6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzc5MCI+NzkwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzkxIj43OTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3OTYiPjc5NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzc5NyI+Nzk3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzk5Ij43OTk8L2E+LjwvbGk+CjxsaT5BZGRlZCB0aGUgZm9sbG93aW5nIE5ldyBpc3N1ZXM6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc4OCI+Nzg4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzk0Ij43OTQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM4MDIiPjgwMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgwNCI+ODA0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODA1Ij44MDU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MDYiPjgwNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgwNyI+ODA3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODA4Ij44MDg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MDkiPjgwOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgxMCI+ODEwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODExIj44MTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MTIiPjgxMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgxMyI+ODEzPC9hPi48L2xpPgo8bGk+QWRkZWQgdGhlIGZvbGxvd2luZyBPcGVuIGlzc3VlczogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzkzIj43OTM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MDAiPjgwMDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzgwMSI+ODAxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjODAzIj44MDM8L2E+LjwvbGk+CjxsaT5BZGRlZCB0aGUgZm9sbG93aW5nIFJlYWR5IGlzc3VlczogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc4OSI+Nzg5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc5MiI+NzkyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc5OCI+Nzk4PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE5BRCBGdXR1cmUgdG8gRHVwOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxMTYiPjExNjwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOQUQgRnV0dXJlIHRvIE5BRDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTg4Ij4xODg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzMjMiPjMyMzwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOZXcgdG8gTkFEOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3MjkiPjcyOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzczMCI+NzMwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzMxIj43MzE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3MzMiPjczMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzczNSI+NzM1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzM2Ij43MzY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3MzciPjczNzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzczOSI+NzM5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzQxIj43NDE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3NDUiPjc0NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzc0OCI+NzQ4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzYzIj43NjM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3NjQiPjc2NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzc3MyI+NzczPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzg0Ij43ODQ8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gT3BlbiB0byBOQUQ6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM4OCI+Mzg4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDYyIj40NjI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NzkiPjU3OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzYyNyI+NjI3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjUzIj42NTM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2ODYiPjY4NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzcwNyI+NzA3PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE5BRCBGdXR1cmUgdG8gTkFEIEVkaXRvcmlhbDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTQwIj4xNDA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzOTAiPjM5MDwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBPcGVuIHRvIE5BRCBFZGl0b3JpYWw6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUyOSI+NTI5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjI2Ij42MjY8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gUmV2aWV3IHRvIE5BRCBFZGl0b3JpYWw6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY0NSI+NjQ1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjg0Ij42ODQ8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gTkFEIEZ1dHVyZSB0byBPcGVuOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMxMjgiPjEyODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzE4MCI+MTgwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMTkwIj4xOTA8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gTmV3IHRvIE9wZW46IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzYxNyI+NjE3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzE4Ij43MTg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MTkiPjcxOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzcyMCI+NzIwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzI0Ij43MjQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MzIiPjczMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzczNCI+NzM0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzQyIj43NDI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3NDciPjc0NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc1MCI+NzUwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzUzIj43NTM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3NTYiPjc1NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc2MCI+NzYwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzYyIj43NjI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3NjciPjc2NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc3NCI+Nzc0PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIFJlYWR5IHRvIE9wZW46IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzY3NSI+Njc1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjc2Ij42NzY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2ODgiPjY4ODwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOZXcgdG8gUGVuZGluZyBOQUQgRWRpdG9yaWFsOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MDkiPjcwOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzcxNyI+NzE3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzI1Ij43MjU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3MzgiPjczODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzc1NCI+NzU0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzU3Ij43NTc8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gT3BlbiB0byBQZW5kaW5nIE5BRCBFZGl0b3JpYWw6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQyNCI+NDI0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTU3Ij41NTc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2MjUiPjYyNTwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOZXcgdG8gUmVhZHk6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3MTAiPjcxMDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3MTUiPjcxNTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3MjIiPjcyMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3NDAiPjc0MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3NDMiPjc0MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3NDQiPjc0NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3NDYiPjc0NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3NDkiPjc0OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3NTUiPjc1NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc1OCI+NzU4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc1OSI+NzU5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc2MSI+NzYxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc2NiI+NzY2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc2OCI+NzY4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc3MCI+NzcwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc3NSI+Nzc1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc3NyI+Nzc3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc3OCI+Nzc4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc4MSI+NzgxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc4MiI+NzgyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc4MyI+NzgzPC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE9wZW4gdG8gUmVhZHk6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzM4NyI+Mzg3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNDcxIj40NzE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTUwIj41NTA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjEyIj42MTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2MjkiPjYyOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NzMiPjY3MzwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBSZXZpZXcgdG8gUmVhZHk6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MTgiPjUxODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NzQiPjU3NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1OTYiPjU5NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MTgiPjYxODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MzgiPjYzODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NzIiPjY3MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2ODUiPjY4NTwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOZXcgdG8gUmV2aWV3OiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MTEiPjcxMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzcyOCI+NzI4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzcxIj43NzE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3NzYiPjc3NjwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBPcGVuIHRvIFJldmlldzogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTM5Ij41Mzk8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gUmVhZHkgdG8gV1A6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NjEiPjU2MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NjIiPjU2MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NjMiPjU2MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NjciPjU2NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1ODEiPjU4MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MjAiPjYyMDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MjEiPjYyMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MjIiPjYyMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MjMiPjYyMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MjQiPjYyNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NjEiPjY2MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NjQiPjY2NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NjUiPjY2NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NjYiPjY2NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NzQiPjY3NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NzkiPjY3OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2ODAiPjY4MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2ODciPjY4NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2ODkiPjY4OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2OTMiPjY5MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2OTQiPjY5NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2OTUiPjY5NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3MDAiPjcwMDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3MDMiPjcwMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3MDUiPjcwNTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3MDYiPjcwNjwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBUZW50YXRpdmVseSBSZWFkeSB0byBXUDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUyNyI+NTI3PC9hPi48L2xpPgo8L3VsPjwvbGk+CjwvdWw+CjwvbGk+CjxsaT5SNTQ6IAoyMDA4LTAyLTAxIHByZS1CZWxsZXZ1ZSBtYWlsaW5nLgo8dWw+CjxsaT48Yj5TdW1tYXJ5OjwvYj48dWw+CjxsaT4yMDYgb3BlbiBpc3N1ZXMsIHVwIGJ5IDIzLjwvbGk+CjxsaT41ODEgY2xvc2VkIGlzc3VlcywgdXAgYnkgMC48L2xpPgo8bGk+Nzg3IGlzc3VlcyB0b3RhbCwgdXAgYnkgMjMuPC9saT4KPC91bD48L2xpPgo8bGk+PGI+RGV0YWlsczo8L2I+PHVsPgo8bGk+QWRkZWQgdGhlIGZvbGxvd2luZyBOZXcgaXNzdWVzOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3NjUiPjc2NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3NjYiPjc2NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzc2NyI+NzY3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc2OCI+NzY4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzY5Ij43Njk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNzcwIj43NzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3NzEiPjc3MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc3MiI+NzcyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzczIj43NzM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3NzQiPjc3NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3NzUiPjc3NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc3NiI+Nzc2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc3NyI+Nzc3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc3OCI+Nzc4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzc5Ij43Nzk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3ODAiPjc4MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3ODEiPjc4MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3ODIiPjc4MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3ODMiPjc4MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzc4NCI+Nzg0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzg1Ij43ODU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3ODYiPjc4NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc4NyI+Nzg3PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE5BRCBGdXR1cmUgdG8gRHVwOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxMDUiPjEwNTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM0OCI+MzQ4PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE5BRCBGdXR1cmUgdG8gTkFEIEVkaXRvcmlhbDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzUzIj4zNTM8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gTmV3IHRvIE5BRCBFZGl0b3JpYWw6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY5NyI+Njk3PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE5BRCBGdXR1cmUgdG8gT3BlbjogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzg4Ij4zODg8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gT3BlbiB0byBUZW50YXRpdmVseSBSZWFkeTogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUyNyI+NTI3PC9hPi48L2xpPgo8L3VsPjwvbGk+CjwvdWw+CjwvbGk+CjxsaT5SNTM6IAoyMDA3LTEyLTA5IG1pZC10ZXJtIG1haWxpbmcuCjx1bD4KPGxpPjxiPlN1bW1hcnk6PC9iPjx1bD4KPGxpPjE4MyBvcGVuIGlzc3VlcywgdXAgYnkgMTEuPC9saT4KPGxpPjU4MSBjbG9zZWQgaXNzdWVzLCBkb3duIGJ5IDEuPC9saT4KPGxpPjc2NCBpc3N1ZXMgdG90YWwsIHVwIGJ5IDEwLjwvbGk+CjwvdWw+PC9saT4KPGxpPjxiPkRldGFpbHM6PC9iPjx1bD4KPGxpPkFkZGVkIHRoZSBmb2xsb3dpbmcgTmV3IGlzc3VlczogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc1NSI+NzU1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzU2Ij43NTY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3NTciPjc1NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc1OCI+NzU4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc1OSI+NzU5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzYwIj43NjA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNzYxIj43NjE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3NjIiPjc2MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzc2MyI+NzYzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzY0Ij43NjQ8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gTkFEIHRvIE9wZW46IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQ2MyI+NDYzPC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIFBlbmRpbmcgV1AgdG8gV1A6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MDciPjYwNzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MDgiPjYwODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NTQiPjY1NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NTUiPjY1NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NzciPjY3NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2ODIiPjY4MjwvYT4uPC9saT4KPC91bD48L2xpPgo8L3VsPgo8L2xpPgo8bGk+UjUyOiAKMjAwNy0xMC0xOSBwb3N0LUtvbmEgbWFpbGluZy4KPHVsPgo8bGk+PGI+U3VtbWFyeTo8L2I+PHVsPgo8bGk+MTcyIG9wZW4gaXNzdWVzLCB1cCBieSA0LjwvbGk+CjxsaT41ODIgY2xvc2VkIGlzc3VlcywgdXAgYnkgMjcuPC9saT4KPGxpPjc1NCBpc3N1ZXMgdG90YWwsIHVwIGJ5IDMxLjwvbGk+CjwvdWw+PC9saT4KPGxpPjxiPkRldGFpbHM6PC9iPjx1bD4KPGxpPkFkZGVkIHRoZSBmb2xsb3dpbmcgTmV3IGlzc3VlczogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzI0Ij43MjQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3MjUiPjcyNTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzcyNiI+NzI2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzI3Ij43Mjc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MjgiPjcyODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzcyOSI+NzI5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzMwIj43MzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3MzEiPjczMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzczMiI+NzMyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzMzIj43MzM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MzQiPjczNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzczNSI+NzM1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzM2Ij43MzY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3MzciPjczNzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzczOCI+NzM4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzM5Ij43Mzk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNzQwIj43NDA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3NDEiPjc0MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc0MiI+NzQyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc0MyI+NzQzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc0NCI+NzQ0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzQ1Ij43NDU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNzQ2Ij43NDY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3NDciPjc0NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzc0OCI+NzQ4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc0OSI+NzQ5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzUwIj43NTA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3NTEiPjc1MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc1MiI+NzUyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzUzIj43NTM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3NTQiPjc1NDwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOQUQgRnV0dXJlIHRvIER1cDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzciPjc3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzUwIj4zNTA8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gTmV3IHRvIE5BRDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjM5Ij42Mzk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2NTciPjY1NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY2MyI+NjYzPC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE9wZW4gdG8gTkFEOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NDgiPjU0ODwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOZXcgdG8gT3BlbjogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTQ2Ij41NDY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTUwIj41NTA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1NjQiPjU2NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU2NSI+NTY1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTczIj41NzM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1ODUiPjU4NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU4OCI+NTg4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjI3Ij42Mjc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2MjkiPjYyOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzYzMCI+NjMwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjMyIj42MzI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2MzUiPjYzNTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY1MyI+NjUzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjU5Ij42NTk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2NjciPjY2NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzY2OCI+NjY4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjY5Ij42Njk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2NzAiPjY3MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzY3MSI+NjcxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY3MyI+NjczPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjg2Ij42ODY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MDQiPjcwNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzcwNyI+NzA3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzA4Ij43MDg8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gTmV3IHRvIFBlbmRpbmcgTkFEIEVkaXRvcmlhbDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzkzIj4zOTM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1OTIiPjU5MjwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOZXcgdG8gUGVuZGluZyBXUDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwNyI+NjA3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwOCI+NjA4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY1NCI+NjU0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY1NSI+NjU1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY3NyI+Njc3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY4MiI+NjgyPC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE5ldyB0byBSZWFkeTogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU2MSI+NTYxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU2MiI+NTYyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU2MyI+NTYzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU2NyI+NTY3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU4MSI+NTgxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU5NSI+NTk1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYyMCI+NjIwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYyMSI+NjIxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYyMiI+NjIyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYyMyI+NjIzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYyNCI+NjI0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY2MSI+NjYxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY2NCI+NjY0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY2NSI+NjY1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY2NiI+NjY2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY3NCI+Njc0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjc1Ij42NzU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2NzYiPjY3NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NzkiPjY3OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2ODciPjY4NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzY4OCI+Njg4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY4OSI+Njg5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY5MyI+NjkzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY5NCI+Njk0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY5NSI+Njk1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzcwMCI+NzAwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzcwMyI+NzAzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzcwNSI+NzA1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzcwNiI+NzA2PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE9wZW4gdG8gUmVhZHk6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2ODAiPjY4MDwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOZXcgdG8gUmV2aWV3OiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTc0Ij41NzQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTk2Ij41OTY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjE4Ij42MTg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjM4Ij42Mzg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2NDUiPjY0NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NzIiPjY3MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY4NCI+Njg0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY4NSI+Njg1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjkxIj42OTE8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gTmV3IHRvIFdQOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTUyIj41NTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjM0Ij42MzQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjUwIj42NTA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjUxIj42NTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjUyIj42NTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjc4Ij42Nzg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjgxIj42ODE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjk5Ij42OTk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNzEyIj43MTI8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gT3BlbiB0byBXUDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1OCI+MjU4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQwMSI+NDAxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUyNCI+NTI0PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIFJlYWR5IHRvIFdQOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDg4Ij40ODg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTc3Ij41Nzc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjYwIj42NjA8L2E+LjwvbGk+CjwvdWw+PC9saT4KPC91bD4KPC9saT4KPGxpPlI1MTogCjIwMDctMDktMDkgcHJlLUtvbmEgbWFpbGluZy4KPHVsPgo8bGk+PGI+U3VtbWFyeTo8L2I+PHVsPgo8bGk+MTY4IG9wZW4gaXNzdWVzLCB1cCBieSAxNS48L2xpPgo8bGk+NTU1IGNsb3NlZCBpc3N1ZXMsIHVwIGJ5IDAuPC9saT4KPGxpPjcyMyBpc3N1ZXMgdG90YWwsIHVwIGJ5IDE1LjwvbGk+CjwvdWw+PC9saT4KPGxpPjxiPkRldGFpbHM6PC9iPjx1bD4KPGxpPkFkZGVkIHRoZSBmb2xsb3dpbmcgTmV3IGlzc3VlczogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzA5Ij43MDk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNzEwIj43MTA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MTEiPjcxMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3MTIiPjcxMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzcxMyI+NzEzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzE0Ij43MTQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNzE1Ij43MTU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MTYiPjcxNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzcxNyI+NzE3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzE4Ij43MTg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MTkiPjcxOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzcyMCI+NzIwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzIxIj43MjE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNzIyIj43MjI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MjMiPjcyMzwvYT4uPC9saT4KPC91bD48L2xpPgo8L3VsPgo8L2xpPgo8bGk+UjUwOiAKMjAwNy0wOC0wNSBwb3N0LVRvcm9udG8gbWFpbGluZy4KPHVsPgo8bGk+PGI+U3VtbWFyeTo8L2I+PHVsPgo8bGk+MTUzIG9wZW4gaXNzdWVzLCBkb3duIGJ5IDUuPC9saT4KPGxpPjU1NSBjbG9zZWQgaXNzdWVzLCB1cCBieSAxNy48L2xpPgo8bGk+NzA4IGlzc3VlcyB0b3RhbCwgdXAgYnkgMTIuPC9saT4KPC91bD48L2xpPgo8bGk+PGI+RGV0YWlsczo8L2I+PHVsPgo8bGk+QWRkZWQgdGhlIGZvbGxvd2luZyBOZXcgaXNzdWVzOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2OTciPjY5NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzY5OCI+Njk4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY5OSI+Njk5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzcwMCI+NzAwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNzAxIj43MDE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MDIiPjcwMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3MDMiPjcwMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzcwNCI+NzA0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzcwNSI+NzA1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzcwNiI+NzA2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzA3Ij43MDc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM3MDgiPjcwODwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOZXcgdG8gTkFEOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1ODMiPjU4MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU4NCI+NTg0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjYyIj42NjI8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gT3BlbiB0byBOQUQ6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUyOCI+NTI4PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE5ldyB0byBOQUQgRWRpdG9yaWFsOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2MzciPjYzNzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY0NyI+NjQ3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjU4Ij42NTg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2OTAiPjY5MDwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBPcGVuIHRvIE5BRCBFZGl0b3JpYWw6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUyNSI+NTI1PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIFBlbmRpbmcgTkFEIEVkaXRvcmlhbCB0byBOQUQgRWRpdG9yaWFsOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NTMiPjU1MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU3MSI+NTcxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTkxIj41OTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2MzMiPjYzMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzYzNiI+NjM2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjQxIj42NDE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2NDIiPjY0MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY0OCI+NjQ4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjQ5Ij42NDk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2NTYiPjY1NjwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOZXcgdG8gT3BlbjogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTc5Ij41Nzk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2MzEiPjYzMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2ODAiPjY4MDwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBQZW5kaW5nIFdQIHRvIE9wZW46IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNTgiPjI1ODwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBSZWFkeSB0byBQZW5kaW5nIFdQOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2NDQiPjY0NDwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOZXcgdG8gUmVhZHk6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NzciPjU3NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NjAiPjY2MDwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBPcGVuIHRvIFJlYWR5OiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDg4Ij40ODg8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gT3BlbiB0byBSZXZpZXc6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MTgiPjUxODwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBSZWFkeSB0byBUUkRlYzogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwNCI+NjA0PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIERSIHRvIFdQOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDUzIj40NTM8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gUmVhZHkgdG8gV1A6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MzEiPjUzMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NTEiPjU1MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NjYiPjU2NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MjgiPjYyODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NDAiPjY0MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NDMiPjY0MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NDYiPjY0NjwvYT4uPC9saT4KPC91bD48L2xpPgo8L3VsPgo8L2xpPgo8bGk+UjQ5OiAKMjAwNy0wNi0yMyBwcmUtVG9yb250byBtYWlsaW5nLgo8dWw+CjxsaT48Yj5TdW1tYXJ5OjwvYj48dWw+CjxsaT4xNTggb3BlbiBpc3N1ZXMsIHVwIGJ5IDEzLjwvbGk+CjxsaT41MzggY2xvc2VkIGlzc3VlcywgdXAgYnkgNy48L2xpPgo8bGk+Njk2IGlzc3VlcyB0b3RhbCwgdXAgYnkgMjAuPC9saT4KPC91bD48L2xpPgo8bGk+PGI+RGV0YWlsczo8L2I+PHVsPgo8bGk+QWRkZWQgdGhlIGZvbGxvd2luZyBOZXcgaXNzdWVzOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjc3Ij42Nzc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjc4Ij42Nzg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjc5Ij42Nzk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjgwIj42ODA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjgxIj42ODE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjgyIj42ODI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2ODQiPjY4NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2ODUiPjY4NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY4NiI+Njg2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY4NyI+Njg3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjg4Ij42ODg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjg5Ij42ODk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2OTAiPjY5MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzY5MSI+NjkxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjkyIj42OTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjkzIj42OTM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjk0Ij42OTQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjk1Ij42OTU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2OTYiPjY5NjwvYT4uPC9saT4KPGxpPkFkZGVkIHRoZSBmb2xsb3dpbmcgUGVuZGluZyBOQUQgRWRpdG9yaWFsIGlzc3VlczogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjgzIj42ODM8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gTmV3IHRvIE5BRCBFZGl0b3JpYWw6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU4NyI+NTg3PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIE9wZW4gdG8gTkFEIEVkaXRvcmlhbDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTkwIj41OTA8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gTmV3IHRvIFBlbmRpbmcgTkFEIEVkaXRvcmlhbDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjM2Ij42MzY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2NDIiPjY0MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY0OCI+NjQ4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjQ5Ij42NDk8L2E+LjwvbGk+CjwvdWw+PC9saT4KPC91bD4KPC9saT4KPGxpPlI0ODogCjIwMDctMDUtMDYgcG9zdC1PeGZvcmQgbWFpbGluZy4KPHVsPgo8bGk+PGI+U3VtbWFyeTo8L2I+PHVsPgo8bGk+MTQ1IG9wZW4gaXNzdWVzLCBkb3duIGJ5IDMzLjwvbGk+CjxsaT41MzEgY2xvc2VkIGlzc3VlcywgdXAgYnkgNTMuPC9saT4KPGxpPjY3NiBpc3N1ZXMgdG90YWwsIHVwIGJ5IDIwLjwvbGk+CjwvdWw+PC9saT4KPGxpPjxiPkRldGFpbHM6PC9iPjx1bD4KPGxpPkFkZGVkIHRoZSBmb2xsb3dpbmcgTmV3IGlzc3VlczogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjU3Ij42NTc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2NTgiPjY1ODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzY1OSI+NjU5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY2MCI+NjYwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY2MSI+NjYxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjYyIj42NjI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2NjMiPjY2MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NjQiPjY2NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NjUiPjY2NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NjYiPjY2NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzY2NyI+NjY3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjY4Ij42Njg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2NjkiPjY2OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzY3MCI+NjcwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjcxIj42NzE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjcyIj42NzI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjczIj42NzM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjc0Ij42NzQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2NzUiPjY3NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzY3NiI+Njc2PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIFRlbnRhdGl2ZWx5IFJlYWR5IHRvIER1cDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDc5Ij40Nzk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MzYiPjUzNjwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBUZW50YXRpdmVseSBSZWFkeSB0byBOQUQ6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM4NSI+Mzg1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNDYzIj40NjM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0NjYiPjQ2NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQ3MCI+NDcwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTE1Ij41MTU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MjYiPjUyNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU0NyI+NTQ3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTYwIj41NjA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NzIiPjU3MjwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOQUQgdG8gTkFEIEVkaXRvcmlhbDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzUxIj4zNTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzNTciPjM1NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM2OCI+MzY4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDk5Ij40OTk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MDQiPjUwNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxMiI+NTEyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTEzIj41MTM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTQiPjUxNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxNiI+NTE2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTQ0Ij41NDQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NDkiPjU0OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU1NSI+NTU1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTU4Ij41NTg8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gVGVudGF0aXZlbHkgUmVhZHkgdG8gTkFEIEVkaXRvcmlhbDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDgyIj40ODI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2MTUiPjYxNTwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOQURfRnV0dXJlIHRvIE5BRCBGdXR1cmU6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzc3Ij43NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzEwNSI+MTA1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTExIj4xMTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxMTYiPjExNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzEyOCI+MTI4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTM4Ij4xMzg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxNDAiPjE0MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzE0OSI+MTQ5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMTgwIj4xODA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxODgiPjE4ODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzE5MCI+MTkwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjE5Ij4yMTk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzMjMiPjMyMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM0OCI+MzQ4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzUwIj4zNTA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzNTMiPjM1MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM4OCI+Mzg4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzkwIj4zOTA8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gVGVudGF0aXZlbHkgUmVhZHkgdG8gT3BlbjogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNDcxIj40NzE8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gTmV3IHRvIFBlbmRpbmcgTkFEIEVkaXRvcmlhbDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjMzIj42MzM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2NDEiPjY0MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY1NiI+NjU2PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIFRlbnRhdGl2ZWx5IFJlYWR5IHRvIFBlbmRpbmcgTkFEIEVkaXRvcmlhbDogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTMyIj41MzI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NTMiPjU1MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU3MSI+NTcxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTkxIj41OTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1OTQiPjU5NDwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBUZW50YXRpdmVseSBSZWFkeSB0byBQZW5kaW5nIFdQOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjU4Ij4yNTg8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gTmV3IHRvIFJlYWR5OiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTY2Ij41NjY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjI4Ij42Mjg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjQwIj42NDA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjQzIj42NDM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2NDQiPjY0NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NDYiPjY0NjwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBSZXZpZXcgdG8gUmVhZHk6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MzEiPjUzMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NTEiPjU1MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MDQiPjYwNDwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBSZWFkeSB0byBUUkRlYzogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU5OCI+NTk4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU5OSI+NTk5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwMCI+NjAwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwMSI+NjAxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwMiI+NjAyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwMyI+NjAzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwNSI+NjA1PC9hPi48L2xpPgo8bGk+Q2hhbmdlZCB0aGUgZm9sbG93aW5nIGlzc3VlcyBmcm9tIFJlYWR5IHRvIFdQOiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTQzIj41NDM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTQ1Ij41NDU8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gVGVudGF0aXZlbHkgUmVhZHkgdG8gV1A6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMDEiPjIwMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMDYiPjIwNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMzMiPjIzMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNTQiPjI1NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0MTYiPjQxNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0MjIiPjQyMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0NTYiPjQ1NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MzQiPjUzNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NDIiPjU0MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NTkiPjU1OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NzUiPjU3NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NzYiPjU3NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NzgiPjU3ODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1ODYiPjU4NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1ODkiPjU4OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1OTMiPjU5MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MDkiPjYwOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MTAiPjYxMDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MTEiPjYxMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MTMiPjYxMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MTYiPjYxNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MTkiPjYxOTwvYT4uPC9saT4KPC91bD48L2xpPgo8L3VsPgo8L2xpPgo8bGk+UjQ3OiAKMjAwNy0wMy0wOSBwcmUtT3hmb3JkIG1haWxpbmcuCjx1bD4KPGxpPjxiPlN1bW1hcnk6PC9iPjx1bD4KPGxpPjE3OCBvcGVuIGlzc3VlcywgdXAgYnkgMzcuPC9saT4KPGxpPjQ3OCBjbG9zZWQgaXNzdWVzLCB1cCBieSAwLjwvbGk+CjxsaT42NTYgaXNzdWVzIHRvdGFsLCB1cCBieSAzNy48L2xpPgo8L3VsPjwvbGk+CjxsaT48Yj5EZXRhaWxzOjwvYj48dWw+CjxsaT5BZGRlZCB0aGUgZm9sbG93aW5nIE5ldyBpc3N1ZXM6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MjAiPjYyMDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MjEiPjYyMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MjIiPjYyMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MjMiPjYyMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MjQiPjYyNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzYyNyI+NjI3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYyOCI+NjI4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjI5Ij42Mjk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2MzAiPjYzMDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzYzMSI+NjMxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNjMyIj42MzI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2MzMiPjYzMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MzQiPjYzNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzYzNSI+NjM1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjM2Ij42MzY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2MzciPjYzNzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MzgiPjYzODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzYzOSI+NjM5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY0MCI+NjQwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjQxIj42NDE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2NDIiPjY0MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NDMiPjY0MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzY0NCI+NjQ0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjQ1Ij42NDU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjQ2Ij42NDY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2NDciPjY0NzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY0OCI+NjQ4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjQ5Ij42NDk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjUwIj42NTA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjUxIj42NTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjUyIj42NTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2NTMiPjY1MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NTQiPjY1NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NTUiPjY1NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY1NiI+NjU2PC9hPi48L2xpPgo8bGk+QWRkZWQgdGhlIGZvbGxvd2luZyBPcGVuIGlzc3VlczogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjI1Ij42MjU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM2MjYiPjYyNjwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOZXcgdG8gT3BlbjogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTcwIj41NzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1ODAiPjU4MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU4MiI+NTgyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTkwIj41OTA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjEyIj42MTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2MTQiPjYxNDwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBOZXcgdG8gVGVudGF0aXZlbHkgUmVhZHk6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU0NyI+NTQ3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTUzIj41NTM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NjAiPjU2MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU3MSI+NTcxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTcyIj41NzI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTc1Ij41NzU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTc2Ij41NzY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTc4Ij41Nzg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTg2Ij41ODY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTg5Ij41ODk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1OTEiPjU5MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1OTMiPjU5MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU5NCI+NTk0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwOSI+NjA5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYxMCI+NjEwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYxMSI+NjExPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYxMyI+NjEzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNjE1Ij42MTU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjE2Ij42MTY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjE5Ij42MTk8L2E+LjwvbGk+CjxsaT5DaGFuZ2VkIHRoZSBmb2xsb3dpbmcgaXNzdWVzIGZyb20gT3BlbiB0byBUZW50YXRpdmVseSBSZWFkeTogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIwMSI+MjAxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIwNiI+MjA2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIzMyI+MjMzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1NCI+MjU0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1OCI+MjU4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzg1Ij4zODU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDE2Ij40MTY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDIyIj40MjI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDU2Ij40NTY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0NjMiPjQ2MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQ2NiI+NDY2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDcwIj40NzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0NzEiPjQ3MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQ3OSI+NDc5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDgyIj40ODI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTUiPjUxNTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUyNiI+NTI2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTMyIj41MzI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MzYiPjUzNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NDIiPjU0MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NTkiPjU1OTwvYT4uPC9saT4KPGxpPkNoYW5nZWQgdGhlIGZvbGxvd2luZyBpc3N1ZXMgZnJvbSBSZXZpZXcgdG8gVGVudGF0aXZlbHkgUmVhZHk6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MzQiPjUzNDwvYT4uPC9saT4KPC91bD48L2xpPgo8L3VsPgo8L2xpPgo8bGk+UjQ2OiAKMjAwNy0wMS0xMiBtaWQtdGVybSBtYWlsaW5nLgo8dWw+CjxsaT48Yj5TdW1tYXJ5OjwvYj48dWw+CjxsaT4xNDEgb3BlbiBpc3N1ZXMsIHVwIGJ5IDExLjwvbGk+CjxsaT40NzggY2xvc2VkIGlzc3VlcywgZG93biBieSAxLjwvbGk+CjxsaT42MTkgaXNzdWVzIHRvdGFsLCB1cCBieSAxMC48L2xpPgo8L3VsPjwvbGk+CjxsaT48Yj5EZXRhaWxzOjwvYj48dWw+CjxsaT5BZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MTAiPjYxMDwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYxOSI+NjE5PC9hPi48L2xpPgo8L3VsPjwvbGk+CjwvdWw+CjwvbGk+CjxsaT5SNDU6IAoyMDA2LTExLTAzIHBvc3QtUG9ydGxhbmQgbWFpbGluZy4KPHVsPgo8bGk+PGI+U3VtbWFyeTo8L2I+PHVsPgo8bGk+MTMwIG9wZW4gaXNzdWVzLCB1cCBieSAwLjwvbGk+CjxsaT40NzkgY2xvc2VkIGlzc3VlcywgdXAgYnkgMTcuPC9saT4KPGxpPjYwOSBpc3N1ZXMgdG90YWwsIHVwIGJ5IDE3LjwvbGk+CjwvdWw+PC9saT4KPGxpPjxiPkRldGFpbHM6PC9iPjx1bD4KPGxpPk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTIwIj41MjA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTIxIj41MjE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTMwIj41MzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM1Ij41MzU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM3Ij41Mzc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM4Ij41Mzg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTQwIj41NDA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTQxIj41NDE8L2E+IHRvIFdQLjwvbGk+CjxsaT5Nb3ZlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTA0Ij41MDQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTIiPjUxMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxNiI+NTE2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTQ0Ij41NDQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NDkiPjU0OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU1NCI+NTU0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTU1Ij41NTU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NTgiPjU1ODwvYT4gdG8gTkFELjwvbGk+CjxsaT5Nb3ZlZCBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NjkiPjU2OTwvYT4gdG8gRHVwLjwvbGk+CjxsaT5Nb3ZlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUxOCI+NTE4PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTIzIj41MjM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTI0Ij41MjQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTQyIj41NDI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1NTYiPjU1NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU1NyI+NTU3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU1OSI+NTU5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTk3Ij41OTc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM2MDYiPjYwNjwvYT4gdG8gT3Blbi48L2xpPgo8bGk+TW92ZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NDMiPjU0MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NDUiPjU0NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzU0OSI+NTQ5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTQ5Ij41NDk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTk4Ij41OTg8L2E+IC0gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwMyI+NjAzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwNSI+NjA1PC9hPiB0byBSZWFkeS48L2xpPgo8bGk+TW92ZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1MzEiPjUzMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NTEiPjU1MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MDQiPjYwNDwvYT4gdG8gUmV2aWV3LjwvbGk+CjxsaT5BZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1OTMiPjU5MzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwOSI+NjA5PC9hPi48L2xpPgo8L3VsPjwvbGk+CjwvdWw+CjwvbGk+CjxsaT5SNDQ6IAoyMDA2LTA5LTA4IHByZS1Qb3J0bGFuZCBtYWlsaW5nLgo8dWw+CjxsaT48Yj5TdW1tYXJ5OjwvYj48dWw+CjxsaT4xMzAgb3BlbiBpc3N1ZXMsIHVwIGJ5IDYuPC9saT4KPGxpPjQ2MiBjbG9zZWQgaXNzdWVzLCBkb3duIGJ5IDEuPC9saT4KPGxpPjU5MiBpc3N1ZXMgdG90YWwsIHVwIGJ5IDUuPC9saT4KPC91bD48L2xpPgo8bGk+PGI+RGV0YWlsczo8L2I+PHVsPgo8bGk+QWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1ODMiPjU4MzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTkyIj41OTI8L2E+LjwvbGk+CjwvdWw+PC9saT4KPC91bD4KPC9saT4KPGxpPlI0MzogCjIwMDYtMDYtMjMgbWlkLXRlcm0gbWFpbGluZy4KPHVsPgo8bGk+PGI+U3VtbWFyeTo8L2I+PHVsPgo8bGk+MTI0IG9wZW4gaXNzdWVzLCB1cCBieSAxNC48L2xpPgo8bGk+NDYzIGNsb3NlZCBpc3N1ZXMsIGRvd24gYnkgMS48L2xpPgo8bGk+NTg3IGlzc3VlcyB0b3RhbCwgdXAgYnkgMTMuPC9saT4KPC91bD48L2xpPgo8bGk+PGI+RGV0YWlsczo8L2I+PHVsPgo8bGk+QWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTc1Ij41NzU8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzU4MiI+NTgyPC9hPi48L2xpPgo8bGk+UmVvcGVuZWQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjU1Ij4yNTU8L2E+LjwvbGk+CjxsaT5Nb3ZlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzUyMCI+NTIwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU0MSI+NTQxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTQ0Ij41NDQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NjkiPjU2OTwvYT4gdG8gVGVudGF0aXZlbHkgUmVhZHkuPC9saT4KPC91bD48L2xpPgo8L3VsPgo8L2xpPgo8bGk+UjQyOiAKMjAwNi0wNC0yMSBwb3N0LUJlcmxpbiBtYWlsaW5nLgo8dWw+CjxsaT48Yj5TdW1tYXJ5OjwvYj48dWw+CjxsaT4xMTAgb3BlbiBpc3N1ZXMsIGRvd24gYnkgMTYuPC9saT4KPGxpPjQ2NCBjbG9zZWQgaXNzdWVzLCB1cCBieSAyNC48L2xpPgo8bGk+NTc0IGlzc3VlcyB0b3RhbCwgdXAgYnkgOC48L2xpPgo8L3VsPjwvbGk+CjxsaT48Yj5EZXRhaWxzOjwvYj48dWw+CjxsaT5BZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NjciPjU2NzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTcyIj41NzI8L2E+LjwvbGk+CjxsaT5Nb3ZlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDk5Ij40OTk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MDEiPjUwMTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUwNiI+NTA2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTA5Ij41MDk8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxMSI+NTExPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTEzIj41MTM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTQiPjUxNDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxNyI+NTE3PC9hPiB0byBOQUQuPC9saT4KPGxpPk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MDIiPjUwMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUwMyI+NTAzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTE1Ij41MTU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTYiPjUxNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUyMiI+NTIyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTI1Ij41MjU8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUyOSI+NTI5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTMyIj41MzI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MzYiPjUzNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUzOSI+NTM5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTQ4Ij41NDg8L2E+IHRvIE9wZW4uPC9saT4KPGxpPk1vdmVkIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUwNCI+NTA0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTEyIj41MTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTIxIj41MjE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTMwIj41MzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTMxIj41MzE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM1Ij41MzU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM3Ij41Mzc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM4Ij41Mzg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTQwIj41NDA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1NDkiPjU0OTwvYT4gdG8gUmVhZHkuPC9saT4KPGxpPk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjQ3Ij4yNDc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjk0Ij4yOTQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzYyIj4zNjI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzY5Ij4zNjk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzcxIj4zNzE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzc2Ij4zNzY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzg0Ij4zODQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDc1Ij40NzU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDc4Ij40Nzg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDk1Ij40OTU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDk3Ij40OTc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTA1Ij41MDU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTA3Ij41MDc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTA4Ij41MDg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTE5Ij41MTk8L2E+IHRvIFdQLjwvbGk+CjxsaT5Nb3ZlZCBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM0Ij41MzQ8L2E+IHRvIFJldmlldy48L2xpPgo8L3VsPjwvbGk+CjwvdWw+CjwvbGk+CjxsaT5SNDE6IAoyMDA2LTAyLTI0IHByZS1CZXJsaW4gbWFpbGluZy4KPHVsPgo8bGk+PGI+U3VtbWFyeTo8L2I+PHVsPgo8bGk+MTI2IG9wZW4gaXNzdWVzLCB1cCBieSAzMS48L2xpPgo8bGk+NDQwIGNsb3NlZCBpc3N1ZXMsIHVwIGJ5IDAuPC9saT4KPGxpPjU2NiBpc3N1ZXMgdG90YWwsIHVwIGJ5IDMxLjwvbGk+CjwvdWw+PC9saT4KPGxpPjxiPkRldGFpbHM6PC9iPjx1bD4KPGxpPkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTM2Ij41MzY8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NjYiPjU2NjwvYT4uPC9saT4KPGxpPk1vdmVkIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzM0MiI+MzQyPC9hPiBmcm9tIFJlYWR5IHRvIE9wZW4uPC9saT4KPGxpPlJlb3BlbmVkIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzMwOSI+MzA5PC9hPi48L2xpPgo8L3VsPjwvbGk+CjwvdWw+CjwvbGk+CjxsaT5SNDA6IAoyMDA1LTEyLTE2IG1pZC10ZXJtIG1haWxpbmcuCjx1bD4KPGxpPjxiPlN1bW1hcnk6PC9iPjx1bD4KPGxpPjk1IG9wZW4gaXNzdWVzLjwvbGk+CjxsaT40NDAgY2xvc2VkIGlzc3Vlcy48L2xpPgo8bGk+NTM1IGlzc3VlcyB0b3RhbC48L2xpPgo8L3VsPjwvbGk+CjxsaT48Yj5EZXRhaWxzOjwvYj48dWw+CjxsaT5BZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUyOSI+NTI5PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTM1Ij41MzU8L2E+LjwvbGk+CjwvdWw+PC9saT4KPC91bD4KPC9saT4KPGxpPlIzOTogCjIwMDUtMTAtMTQgcG9zdC1Nb250IFRyZW1ibGFudCBtYWlsaW5nLgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUyNiI+NTI2PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MjgiPjUyODwvYT4uCk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjgwIj4yODA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDYxIj40NjE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDY0Ij40NjQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDY1Ij40NjU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDY3Ij40Njc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDY4Ij40Njg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDc0Ij40NzQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDk2Ij40OTY8L2E+IGZyb20gUmVhZHkgdG8gV1AgYXMgcGVyIHRoZSB2b3RlIGZyb20gTW9udCBUcmVtYmxhbnQuCk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjQ3Ij4yNDc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjk0Ij4yOTQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMzNDIiPjM0MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzNjIiPjM2MjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzNjkiPjM2OTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzNzEiPjM3MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzNzYiPjM3NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzODQiPjM4NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0NzUiPjQ3NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0NzgiPjQ3ODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0OTUiPjQ5NTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0OTciPjQ5NzwvYT4gZnJvbSBSZXZpZXcgdG8gUmVhZHkuCk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0OTgiPjQ5ODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUwNCI+NTA0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTA2Ij41MDY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MDkiPjUwOTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxMCI+NTEwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTExIj41MTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MTIiPjUxMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzUxMyI+NTEzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTE0Ij41MTQ8L2E+IGZyb20gTmV3IHRvIE9wZW4uCk1vdmVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTA1Ij41MDU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTA3Ij41MDc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTA4Ij41MDg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTE5Ij41MTk8L2E+IGZyb20gTmV3IHRvIFJlYWR5LgpNb3ZlZCBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MDAiPjUwMDwvYT4gZnJvbSBOZXcgdG8gTkFELgpNb3ZlZCBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTE4Ij41MTg8L2E+IGZyb20gTmV3IHRvIFJldmlldy4KPC9saT4KPGxpPlIzODogCjIwMDUtMDctMDMgcHJlLU1vbnQgVHJlbWJsYW50IG1haWxpbmcuCk1lcmdlZCBvcGVuIFRSMSBpc3N1ZXMgaW4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTA0Ij41MDQ8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUyMiI+NTIyPC9hPi4KQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM1MjMiPjUyMzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTIzIj41MjM8L2E+CjwvbGk+CjxsaT5SMzc6IAoyMDA1LTA2IG1pZC10ZXJtIG1haWxpbmcuCkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNDk4Ij40OTg8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzUwMyI+NTAzPC9hPi4KPC9saT4KPGxpPlIzNjogCjIwMDUtMDQgcG9zdC1MaWxsZWhhbW1lciBtYWlsaW5nLiBBbGwgaXNzdWVzIGluICJyZWFkeSIgc3RhdHVzIGV4Y2VwdApmb3IgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNDU0Ij40NTQ8L2E+IHdlcmUgbW92ZWQgdG8gIkRSIiBzdGF0dXMsIGFuZCBhbGwgaXNzdWVzCnByZXZpb3VzbHkgaW4gIkRSIiBzdGF0dXMgd2VyZSBtb3ZlZCB0byAiV1AiLgo8L2xpPgo8bGk+UjM1OiAKMjAwNS0wMyBwcmUtTGlsbGVoYW1tZXIgbWFpbGluZy4KPC9saT4KPGxpPlIzNDogCjIwMDUtMDEgbWlkLXRlcm0gbWFpbGluZy4gIEFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ4OCI+NDg4PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0OTQiPjQ5NDwvYT4uCjwvbGk+CjxsaT5SMzM6IAoyMDA0LTExIHBvc3QtUmVkbW9uZCBtYWlsaW5nLiBSZWZsZWN0cyBhY3Rpb25zIHRha2VuIGluIFJlZG1vbmQuCjwvbGk+CjxsaT5SMzI6IAoyMDA0LTA5IHByZS1SZWRtb25kIG1haWxpbmc6IHJlZmxlY3RzIG5ldyBwcm9wb3NlZCByZXNvbHV0aW9ucyBhbmQKbmV3IGlzc3VlcyByZWNlaXZlZCBhZnRlciB0aGUgMjAwNC0wNyBtYWlsaW5nLiAgQWRkZWQKbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0NzkiPjQ3OTwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDgxIj40ODE8L2E+Lgo8L2xpPgo8bGk+UjMxOiAKMjAwNC0wNyBtaWQtdGVybSBtYWlsaW5nOiByZWZsZWN0cyBuZXcgcHJvcG9zZWQgcmVzb2x1dGlvbnMgYW5kCm5ldyBpc3N1ZXMgcmVjZWl2ZWQgYWZ0ZXIgdGhlIHBvc3QtU3lkbmV5IG1haWxpbmcuICBBZGRlZApuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQ2MyI+NDYzPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDc4Ij40Nzg8L2E+Lgo8L2xpPgo8bGk+UjMwOiAKUG9zdC1TeWRuZXkgbWFpbGluZzogcmVmbGVjdHMgZGVjaXNpb25zIG1hZGUgYXQgdGhlIFN5ZG5leSBtZWV0aW5nLgpWb3RlZCBhbGwgIlJlYWR5IiBpc3N1ZXMgZnJvbSBSMjkgaW50byB0aGUgd29ya2luZyBwYXBlci4KQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDYwIj40NjA8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQ2MiI+NDYyPC9hPi4KPC9saT4KPGxpPlIyOTogClByZS1TeWRuZXkgbWFpbGluZy4gIEFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQ0MSI+NDQxPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDU3Ij40NTc8L2E+Lgo8L2xpPgo8bGk+UjI4OiAKUG9zdC1Lb25hIG1haWxpbmc6IHJlZmxlY3RzIGRlY2lzaW9ucyBtYWRlIGF0IHRoZSBLb25hIG1lZXRpbmcuCkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQzMiI+NDMyPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0NDAiPjQ0MDwvYT4uCjwvbGk+CjxsaT5SMjc6IApQcmUtS29uYSBtYWlsaW5nLiAgQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDA0Ij40MDQ8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQzMSI+NDMxPC9hPi4KPC9saT4KPGxpPlIyNjogClBvc3QtT3hmb3JkIG1haWxpbmc6IHJlZmxlY3RzIGRlY2lzaW9ucyBtYWRlIGF0IHRoZSBPeGZvcmQgbWVldGluZy4KQWxsIGlzc3VlcyBpbiBSZWFkeSBzdGF0dXMgd2VyZSB2b3RlZCBpbnRvIERSIHN0YXR1cy4gIEFsbCBpc3N1ZXMgaW4KRFIgc3RhdHVzIHdlcmUgdm90ZWQgaW50byBXUCBzdGF0dXMuCjwvbGk+CjxsaT5SMjU6IApQcmUtT3hmb3JkIG1haWxpbmcuICBBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM5MCI+MzkwPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDAyIj40MDI8L2E+Lgo8L2xpPgo8bGk+UjI0OiAKUG9zdC1TYW50YSBDcnV6IG1haWxpbmc6IHJlZmxlY3RzIGRlY2lzaW9ucyBtYWRlIGF0IHRoZSBTYW50YSBDcnV6Cm1lZXRpbmcuICBBbGwgUmVhZHkgaXNzdWVzIGZyb20gUjIzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUzIj4yNTM8L2E+LCB3aGljaCBoYXMgYmVlbiBnaXZlbiBhIG5ldyBwcm9wb3NlZCByZXNvbHV0aW9uLCB3ZXJlCm1vdmVkIHRvIERSIHN0YXR1cy4gIEFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM4MyI+MzgzPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzg5Ij4zODk8L2E+LiAgKElzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMzODciPjM4NzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM4OSI+Mzg5PC9hPiB3ZXJlIGRpc2N1c3NlZAphdCB0aGUgbWVldGluZy4pICBNYWRlIHByb2dyZXNzIG9uIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI1Ij4yMjU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI2Ij4yMjY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI5Ij4yMjk8L2E+OiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI1Ij4yMjU8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI5Ij4yMjk8L2E+IGhhdmUgYmVlbiBtb3ZlZCB0byBSZWFkeSBzdGF0dXMsIGFuZCB0aGUgb25seSByZW1haW5pbmcKY29uY2VybnMgd2l0aCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI2Ij4yMjY8L2E+IGludm9sdmUgd29yZGluZy4KPC9saT4KPGxpPlIyMzogClByZS1TYW50YSBDcnV6IG1haWxpbmcuICBBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM2NyI+MzY3PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMzODIiPjM4MjwvYT4uCk1vdmVkIGlzc3VlcyBpbiB0aGUgVEMgdG8gVEMgc3RhdHVzLgo8L2xpPgo8bGk+UjIyOiAKUG9zdC1DdXJh52FvIG1haWxpbmcuICBBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzNjIiPjM2MjwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzY2Ij4zNjY8L2E+Lgo8L2xpPgo8bGk+UjIxOiAKUHJlLUN1cmHnYW8gbWFpbGluZy4gIEFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzUxIj4zNTE8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM2MSI+MzYxPC9hPi4KPC9saT4KPGxpPlIyMDogClBvc3QtUmVkbW9uZCBtYWlsaW5nOyByZWZsZWN0cyBhY3Rpb25zIHRha2VuIGluIFJlZG1vbmQuICBBZGRlZApuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMzYiPjMzNjwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzUwIj4zNTA8L2E+LCBvZiB3aGljaCBpc3N1ZXMgCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzNDciPjM0NzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzUwIj4zNTA8L2E+IHdlcmUgYWRkZWQgc2luY2UgUmVkbW9uZCwgaGVuY2UKbm90IGRpc2N1c3NlZCBhdCB0aGUgbWVldGluZy4gIAoKQWxsIFJlYWR5IGlzc3VlcyB3ZXJlIG1vdmVkIHRvIERSIHN0YXR1cywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGlzc3Vlcwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjg0Ij4yODQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjQxIj4yNDE8L2E+LCBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjY3Ij4yNjc8L2E+LgoKTm90ZXdvcnRoeSBpc3N1ZXMgZGlzY3Vzc2VkIGF0IFJlZG1vbmQgaW5jbHVkZSAKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEyMCI+MTIwPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjAyIj4yMDI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI2Ij4yMjY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjMzIj4yMzM8L2E+LCAKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3MCI+MjcwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1MyI+MjUzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1NCI+MjU0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzIzIj4zMjM8L2E+Lgo8L2xpPgo8bGk+UjE5OiAKUHJlLVJlZG1vbmQgbWFpbGluZy4gIEFkZGVkIG5ldyBpc3N1ZXMgCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzMyMyI+MzIzPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzM1Ij4zMzU8L2E+Lgo8L2xpPgo8bGk+UjE4OiAKUG9zdC1Db3BlbmhhZ2VuIG1haWxpbmc7IHJlZmxlY3RzIGFjdGlvbnMgdGFrZW4gaW4gQ29wZW5oYWdlbi4KQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzEyIj4zMTI8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMTciPjMxNzwvYT4sIGFuZCBkaXNjdXNzZWQKbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjcxIj4yNzE8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzMxNCI+MzE0PC9hPi4KCkNoYW5nZWQgc3RhdHVzIG9mIGlzc3Vlcwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTAzIj4xMDM8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMTgiPjExODwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzNiI+MTM2PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTUzIj4xNTM8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNjUiPjE2NTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE3MSI+MTcxPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTgzIj4xODM8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxODQiPjE4NDwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4NSI+MTg1PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTg2Ij4xODY8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMTQiPjIxNDwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyMSI+MjIxPC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjM0Ij4yMzQ8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMzciPjIzNzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI0MyI+MjQzPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjQ4Ij4yNDg8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNTEiPjI1MTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1MiI+MjUyPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjU2Ij4yNTY8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjAiPjI2MDwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2MSI+MjYxPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjYyIj4yNjI8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjMiPjI2MzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2NSI+MjY1PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjY4Ij4yNjg8L2E+CnRvIERSLgoKQ2hhbmdlZCBzdGF0dXMgb2YgaXNzdWVzCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0OSI+NDk8L2E+ICA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTA5Ij4xMDk8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMTciPjExNzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4MiI+MTgyPC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI4Ij4yMjg8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMzAiPjIzMDwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIzMiI+MjMyPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjM1Ij4yMzU8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMzgiPjIzODwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI0MSI+MjQxPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjQyIj4yNDI8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNTAiPjI1MDwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1OSI+MjU5PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjY0Ij4yNjQ8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjYiPjI2NjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjY3Ij4yNjc8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNzEiPjI3MTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3MiI+MjcyPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjczIj4yNzM8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNzUiPjI3NTwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI4MSI+MjgxPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjg0Ij4yODQ8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyODUiPjI4NTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI4NiI+Mjg2PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjg4Ij4yODg8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyOTIiPjI5MjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI5NSI+Mjk1PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjk3Ij4yOTc8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyOTgiPjI5ODwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMwMSI+MzAxPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzAzIj4zMDM8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMDYiPjMwNjwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMwNyI+MzA3PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzA4Ij4zMDg8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMTIiPjMxMjwvYT4KdG8gUmVhZHkuCgpDbG9zZWQgaXNzdWVzIAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxMTEiPjExMTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjc3Ij4yNzc8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzI3OSI+Mjc5PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyODciPjI4NzwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjg5Ij4yODk8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzI5MyI+MjkzPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzMDIiPjMwMjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzEzIj4zMTM8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzMxNCI+MzE0PC9hPgphcyBOQUQuCgo8L2xpPgo8bGk+UjE3OiAKUHJlLUNvcGVuaGFnZW4gbWFpbGluZy4gIENvbnZlcnRlZCBpc3N1ZXMgbGlzdCB0byBYTUwuICBBZGRlZCBwcm9wb3NlZApyZXNvbHV0aW9ucyBmb3IgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0OSI+NDk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNzYiPjc2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzkxIj45MTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMzUiPjIzNTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNTAiPjI1MDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzI2NyI+MjY3PC9hPi4KQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjc4Ij4yNzg8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMTEiPjMxMTwvYT4uCjwvbGk+CjxsaT5SMTY6ICAKcG9zdC1Ub3JvbnRvIG1haWxpbmc7IHJlZmxlY3RzIGFjdGlvbnMgdGFrZW4gaW4gVG9yb250by4gQWRkZWQgbmV3Cmlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjY1Ij4yNjU8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzI3NyI+Mjc3PC9hPi4gIENoYW5nZWQgc3RhdHVzIG9mIGlzc3Vlcwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMyI+MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM4Ij44PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzkiPjk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTkiPjE5PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2Ij4yNjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMSI+MzE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjEiPjYxPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYzIj42MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM4NiI+ODY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTA4Ij4xMDg8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTEyIj4xMTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTE0Ij4xMTQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTE1Ij4xMTU8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTIyIj4xMjI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTI3Ij4xMjc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTI5Ij4xMjk8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTM0Ij4xMzQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTM3Ij4xMzc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTQyIj4xNDI8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTQ0Ij4xNDQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTQ2Ij4xNDY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTQ3Ij4xNDc8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTU5Ij4xNTk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTY0Ij4xNjQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTcwIj4xNzA8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTgxIj4xODE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTk5Ij4xOTk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjA4Ij4yMDg8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjA5Ij4yMDk8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjEwIj4yMTA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjExIj4yMTE8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjEyIj4yMTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjE3Ij4yMTc8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjIwIj4yMjA8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjIyIj4yMjI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjIzIj4yMjM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI0Ij4yMjQ8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI3Ij4yMjc8L2E+IHRvICJEUiIuICBSZW9wZW5lZCBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMyMyI+MjM8L2E+LiBSZW9wZW5lZAppc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTg3Ij4xODc8L2E+LiBDaGFuZ2VkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyIj4yPC9hPiBhbmQKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNCI+NDwvYT4gdG8gTkFELiBGaXhlZCBhIHR5cG8gaW4gaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE3Ij4xNzwvYT4uIEZpeGVkCmlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3MCI+NzA8L2E+OiBzaWduYXR1cmUgc2hvdWxkIGJlIGNoYW5nZWQgYm90aCBwbGFjZXMgaXQKYXBwZWFycy4gRml4ZWQgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE2MCI+MTYwPC9hPjogcHJldmlvdXMgdmVyc2lvbiBkaWRuJ3QgZml4CnRoZSBidWcgaW4gZW5vdWdoIHBsYWNlcy4KPC9saT4KPGxpPlIxNTogCnByZS1Ub3JvbnRvIG1haWxpbmcuIEFkZGVkIGlzc3Vlcwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjMzIj4yMzM8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjQiPjI2NDwvYT4uIFNvbWUgc21hbGwgSFRNTCBmb3JtYXR0aW5nCmNoYW5nZXMgc28gdGhhdCB3ZSBwYXNzIFdlYmxpbnQgdGVzdHMuCjwvbGk+CjxsaT5SMTQ6IApwb3N0LVRva3lvIElJIG1haWxpbmc7IHJlZmxlY3RzIGNvbW1pdHRlZSBhY3Rpb25zIHRha2VuIGluClRva3lvLiBBZGRlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOCI+MjI4PC9hPiB0byA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjMyIj4yMzI8L2E+LiAoMDAtMDAxOVIxL04xMjQyKQo8L2xpPgo8bGk+UjEzOiAKcHJlLVRva3lvIElJIHVwZGF0ZWQ6IEFkZGVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjEyIj4yMTI8L2E+IHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjciPjIyNzwvYT4uCjwvbGk+CjxsaT5SMTI6IApwcmUtVG9reW8gSUkgbWFpbGluZzogQWRkZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxOTkiPjE5OTwvYT4gdG8KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIxMSI+MjExPC9hPi4gQWRkZWQgImFuZCBwYXJhZ3JhcGggNSIgdG8gdGhlIHByb3Bvc2VkIHJlc29sdXRpb24Kb2YgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI5Ij4yOTwvYT4uICBBZGQgZnVydGhlciByYXRpb25hbGUgdG8gaXNzdWUKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTc4Ij4xNzg8L2E+Lgo8L2xpPgo8bGk+UjExOiAKcG9zdC1Lb25hIG1haWxpbmc6IFVwZGF0ZWQgdG8gcmVmbGVjdCBMV0cgYW5kIGZ1bGwgY29tbWl0dGVlIGFjdGlvbnMKaW4gS29uYSAoOTktMDA0OC9OMTIyNCkuIE5vdGUgY2hhbmdlZCByZXNvbHV0aW9uIG9mIGlzc3Vlcwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0Ij40PC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM4Ij4zODwvYT4uIEFkZGVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxOTYiPjE5NjwvYT4KdG8gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE5OCI+MTk4PC9hPi4gQ2xvc2VkIGlzc3VlcyBsaXN0IHNwbGl0IGludG8gImRlZmVjdHMiIGFuZAoiY2xvc2VkIiBkb2N1bWVudHMuICBDaGFuZ2VkIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG9mIGlzc3VlCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQiPjQ8L2E+IHRvIE5BRCwgYW5kIGNoYW5nZWQgdGhlIHdvcmRpbmcgb2YgcHJvcG9zZWQgcmVzb2x1dGlvbgpvZiBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzgiPjM4PC9hPi4KPC9saT4KPGxpPlIxMDogCnByZS1Lb25hIHVwZGF0ZWQuICBBZGRlZCBwcm9wb3NlZCByZXNvbHV0aW9ucyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjODMiPjgzPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzg2Ij44NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM5MSI+OTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjOTIiPjkyPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwOSI+MTA5PC9hPi4gQWRkZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzE5MCI+MTkwPC9hPiB0bwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTk1Ij4xOTU8L2E+LiAoOTktMDAzMy9EMTIwOSwgMTQgT2N0IDk5KQo8L2xpPgo8bGk+Ujk6IApwcmUtS29uYSBtYWlsaW5nLiAgQWRkZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzE0MCI+MTQwPC9hPiB0bwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTg5Ij4xODk8L2E+LiBJc3N1ZXMgbGlzdCBzcGxpdCBpbnRvIHNlcGFyYXRlICJhY3RpdmUiIGFuZAoiY2xvc2VkIiBkb2N1bWVudHMuICg5OS0wMDMwL04xMjA2LCAyNSBBdWcgOTkpCjwvbGk+CjxsaT5SODogCnBvc3QtRHVibGluIG1haWxpbmcuIFVwZGF0ZWQgdG8gcmVmbGVjdCBMV0cgYW5kIGZ1bGwgY29tbWl0dGVlIGFjdGlvbnMKaW4gRHVibGluLiAoOTktMDAxNi9OMTE5MywgMjEgQXByIDk5KQo8L2xpPgo8bGk+Ujc6IApwcmUtRHVibGluIHVwZGF0ZWQ6IEFkZGVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTMwIj4xMzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxMzEiPjEzMTwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzIiPjEzMjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzMiPjEzMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzQiPjEzNDwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzEzNSI+MTM1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzNiI+MTM2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzNyI+MTM3PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTM4Ij4xMzg8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTM5Ij4xMzk8L2E+ICgzMSBNYXIgOTkpCjwvbGk+CjxsaT5SNjogCnByZS1EdWJsaW4gbWFpbGluZy4gQWRkZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMjciPjEyNzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzEyOCI+MTI4PC9hPiwKYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMjkiPjEyOTwvYT4uICAoOTktMDAwNy9OMTE5NCwgMjIgRmViIDk5KQo8L2xpPgo8bGk+UjU6IAp1cGRhdGUgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMDMiPjEwMzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMTIiPjExMjwvYT47IGFkZGVkIGlzc3Vlcwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTE0Ij4xMTQ8L2E+IHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMjYiPjEyNjwvYT4uIEZvcm1hdCByZXZpc2lvbnMgdG8gcHJlcGFyZQpmb3IgbWFraW5nIGxpc3QgcHVibGljLiAoMzAgRGVjIDk4KQo8L2xpPgo8bGk+UjQ6IApwb3N0LVNhbnRhIENydXogSUkgdXBkYXRlZDogSXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMTAiPjExMDwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzExMSI+MTExPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExMiI+MTEyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTEzIj4xMTM8L2E+IGFkZGVkLCBzZXZlcmFsCmlzc3VlcyBjb3JyZWN0ZWQuICgyMiBPY3QgOTgpCjwvbGk+CjxsaT5SMzogCnBvc3QtU2FudGEgQ3J1eiBJSTogSXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzk0Ij45NDwvYT4gdG8gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwOSI+MTA5PC9hPgphZGRlZCwgbWFueSBpc3N1ZXMgdXBkYXRlZCB0byByZWZsZWN0IExXRyBjb25zZW5zdXMgKDEyIE9jdCA5OCkKPC9saT4KPGxpPlIyOiAKcHJlLVNhbnRhIENydXogSUk6IElzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3MyI+NzM8L2E+IHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzkzIj45MzwvYT4gYWRkZWQsCmlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNyI+MTc8L2E+IHVwZGF0ZWQuICgyOSBTZXAgOTgpCjwvbGk+CjxsaT5SMTogCkNvcnJlY3Rpb24gdG8gaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzU1Ij41NTwvYT4gcmVzb2x1dGlvbiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYwIj42MDwvYT4gY29kZQpmb3JtYXQsIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NCI+NjQ8L2E+IHRpdGxlLiAoMTcgU2VwIDk4KQo8L2xpPgo8L3VsPgoKPGgyPkRlZmVjdCBSZXBvcnRzPC9oMj4KPGhyPgo8aDM+PGEgbmFtZT0iMSI+PC9hPjEuIEMgbGlicmFyeSBsaW5rYWdlIGVkaXRpbmcgb3ZlcnNpZ2h0PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE3LjQuMi4yIFt1c2luZy5saW5rYWdlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBCZW1hbiBEYXdlcyA8Yj5EYXRlOjwvYj4gMTk5Ny0xMS0xNjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgY2hhbmdlIHNwZWNpZmllZCBpbiB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBiZWxvdyBkaWQgbm90IG1ha2UKaXQgaW50byB0aGUgU3RhbmRhcmQuIFRoaXMgY2hhbmdlIHdhcyBhY2NlcHRlZCBpbiBwcmluY2lwbGUgYXQgdGhlCkxvbmRvbiBtZWV0aW5nLCBhbmQgdGhlIGV4YWN0IHdvcmRpbmcgYmVsb3cgd2FzIGFjY2VwdGVkIGF0IHRoZQpNb3JyaXN0b3duIG1lZXRpbmcuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDE3LjQuMi4yIFt1c2luZy5saW5rYWdlXSBwYXJhZ3JhcGggMgpmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgYSBuYW1lIGZyb20gdGhlIFN0YW5kYXJkIEMgbGlicmFyeQogIGRlY2xhcmVkIHdpdGggZXh0ZXJuYWwgbGlua2FnZSBoYXMgZWl0aGVyIGV4dGVybiAiQyIgb3IKICBleHRlcm4gIkMrKyIgbGlua2FnZS48L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPldoZXRoZXIgYSBuYW1lIGZyb20gdGhlIFN0YW5kYXJkIEMgbGlicmFyeSBkZWNsYXJlZCB3aXRoIGV4dGVybmFsCiAgbGlua2FnZSBoYXMgZXh0ZXJuICJDIiBvciBleHRlcm4gIkMrKyIgbGlua2FnZQogIGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW4gaW1wbGVtZW50YXRpb24KICB1c2UgZXh0ZXJuICJDKysiIGxpbmthZ2UgZm9yIHRoaXMgcHVycG9zZS48L3A+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzIj48L2E+My4gQXRleGl0IHJlZ2lzdHJhdGlvbiBkdXJpbmcgYXRleGl0KCkgY2FsbCBpcyBub3QgZGVzY3JpYmVkPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE4LjQgW3N1cHBvcnQuc3RhcnQudGVybV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gU3RldmUgQ2xhbWFnZSA8Yj5EYXRlOjwvYj4gMTk5Ny0xMi0xMjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5XZSBhcHBlYXIgbm90IHRvIGhhdmUgY292ZXJlZCBhbGwgdGhlIHBvc3NpYmlsaXRpZXMgb2YKIGV4aXQgcHJvY2Vzc2luZyB3aXRoIHJlc3BlY3QgdG8KYXRleGl0IHJlZ2lzdHJhdGlvbi4gPGJyPgo8YnI+CkV4YW1wbGUgMTogKEMgYW5kIEMrKyk8L3A+Cgo8cHJlPiAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiAgICB2b2lkIGYxKCkgeyB9CiAgICB2b2lkIGYyKCkgeyBhdGV4aXQoZjEpOyB9CiAgICAKICAgIGludCBtYWluKCkKICAgIHsKICAgICAgICBhdGV4aXQoZjIpOyAvLyB0aGUgb25seSB1c2Ugb2YgZjIKICAgICAgICByZXR1cm4gMDsgLy8gZm9yIEMgY29tcGF0aWJpbGl0eQogICAgfTwvcHJlPgoKPHA+QXQgcHJvZ3JhbSBleGl0LCBmMiBnZXRzIGNhbGxlZCBkdWUgdG8gaXRzIHJlZ2lzdHJhdGlvbiBpbgptYWluLiBSdW5uaW5nIGYyIGNhdXNlcyBmMSB0byBiZSBuZXdseSByZWdpc3RlcmVkIGR1cmluZyB0aGUgZXhpdApwcm9jZXNzaW5nLiBJcyB0aGlzIGEgdmFsaWQgcHJvZ3JhbT8gSWYgc28sIHdoYXQgYXJlIGl0cwpzZW1hbnRpY3M/PC9wPgoKPHA+CkludGVyZXN0aW5nbHksIG5laXRoZXIgdGhlIEMgc3RhbmRhcmQsIG5vciB0aGUgQysrIGRyYWZ0IHN0YW5kYXJkIG5vcgp0aGUgZm9ydGhjb21pbmcgQzlYIENvbW1pdHRlZSBEcmFmdCBzYXlzIGRpcmVjdGx5IHdoZXRoZXIgeW91IGNhbgpyZWdpc3RlciBhIGZ1bmN0aW9uIHdpdGggYXRleGl0IGR1cmluZyBleGl0IHByb2Nlc3NpbmcuPC9wPgoKPHA+CkFsbCAzIHN0YW5kYXJkcyBzYXkgdGhhdCBmdW5jdGlvbnMgYXJlIHJ1biBpbiByZXZlcnNlIG9yZGVyIG9mIHRoZWlyCnJlZ2lzdHJhdGlvbi4gU2luY2UgZjEgaXMgcmVnaXN0ZXJlZCBsYXN0LCBpdCBvdWdodCB0byBiZSBydW4gZmlyc3QsCmJ1dCBieSB0aGUgdGltZSBpdCBpcyByZWdpc3RlcmVkLCBpdCBpcyB0b28gbGF0ZSB0byBiZSBmaXJzdC48L3A+Cgo8cD5JZiB0aGUgcHJvZ3JhbSBpcyB2YWxpZCwgdGhlIHN0YW5kYXJkcyBhcmUgc2VsZi1jb250cmFkaWN0b3J5IGFib3V0Cml0cyBzZW1hbnRpY3MuPC9wPgoKPHA+RXhhbXBsZSAyOiAoQysrIG9ubHkpPC9wPgoKPHByZT4gICAgCiAgICB2b2lkIEYoKSB7IHN0YXRpYyBUIHQ7IH0gLy8gdHlwZSBUIGhhcyBhIGRlc3RydWN0b3IKCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICAgYXRleGl0KEYpOyAvLyB0aGUgb25seSB1c2Ugb2YgRgogICAgfQo8L3ByZT4KCjxwPkZ1bmN0aW9uIEYgcmVnaXN0ZXJlZCB3aXRoIGF0ZXhpdCBoYXMgYSBsb2NhbCBzdGF0aWMgdmFyaWFibGUgdCwKYW5kIEYgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSBkdXJpbmcgZXhpdCBwcm9jZXNzaW5nLiBBIGxvY2FsCnN0YXRpYyBvYmplY3QgaXMgaW5pdGlhbGl6ZWQgdGhlIGZpcnN0IHRpbWUgY29udHJvbCBmbG93IHBhc3Nlcwp0aHJvdWdoIGl0cyBkZWZpbml0aW9uLCBhbmQgYWxsIHN0YXRpYyBvYmplY3RzIGFyZSBkZXN0cm95ZWQgZHVyaW5nCmV4aXQgcHJvY2Vzc2luZy4gSXMgdGhlIGNvZGUgdmFsaWQ/IElmIHNvLCB3aGF0IGFyZSBpdHMgc2VtYW50aWNzPzwvcD4KCjxwPgpTZWN0aW9uIDE4LjMgIlN0YXJ0IGFuZCB0ZXJtaW5hdGlvbiIgc2F5cyB0aGF0IGlmIGEgZnVuY3Rpb24KRiBpcyByZWdpc3RlcmVkIHdpdGggYXRleGl0IGJlZm9yZSBhIHN0YXRpYyBvYmplY3QgdCBpcyBpbml0aWFsaXplZCwgRgp3aWxsIG5vdCBiZSBjYWxsZWQgdW50aWwgYWZ0ZXIgdCdzIGRlc3RydWN0b3IgY29tcGxldGVzLjwvcD4KCjxwPgpJbiBleGFtcGxlIDIsIGZ1bmN0aW9uIEYgaXMgcmVnaXN0ZXJlZCB3aXRoIGF0ZXhpdCBiZWZvcmUgaXRzIGxvY2FsCnN0YXRpYyBvYmplY3QgTyBjb3VsZCBwb3NzaWJseSBiZSBpbml0aWFsaXplZC4gT24gdGhhdCBiYXNpcywgaXQgbXVzdApub3QgYmUgY2FsbGVkIGJ5IGV4aXQgcHJvY2Vzc2luZyB1bnRpbCBhZnRlciBPJ3MgZGVzdHJ1Y3Rvcgpjb21wbGV0ZXMuIEJ1dCB0aGUgZGVzdHJ1Y3RvciBjYW5ub3QgYmUgcnVuIHVudGlsIGFmdGVyIEYgaXMgY2FsbGVkLApzaW5jZSBvdGhlcndpc2UgdGhlIG9iamVjdCBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQgaW4gdGhlIGZpcnN0CnBsYWNlLjwvcD4KCjxwPklmIHRoZSBwcm9ncmFtIGlzIHZhbGlkLCB0aGUgc3RhbmRhcmQgaXMgc2VsZi1jb250cmFkaWN0b3J5IGFib3V0Cml0cyBzZW1hbnRpY3MuPC9wPgoKPHA+SSBwbGFuIHRvIHN1Ym1pdCBFeGFtcGxlIDEgYXMgYSBwdWJsaWMgY29tbWVudCBvbiB0aGUgQzlYIENELCB3aXRoCmEgcmVjb21tZW5kYXRpb24gdGhhdCB0aGUgcmVzdWx0cyBiZSB1bmRlZmluZWQuIChBbHRlcm5hdGl2ZTogbWFrZSBpdAp1bnNwZWNpZmllZC4gSSBkb24ndCB0aGluayBpdCBpcyB3b3J0aHdoaWxlIHRvIHNwZWNpZnkgdGhlIGNhc2Ugd2hlcmUKZjEgaXRzZWxmIHJlZ2lzdGVycyBhZGRpdGlvbmFsIGZ1bmN0aW9ucywgZWFjaCBvZiB3aGljaCByZWdpc3RlcnMKc3RpbGwgbW9yZSBmdW5jdGlvbnMuKTwvcD4KCjxwPkkgdGhpbmsgd2Ugc2hvdWxkIHJlc29sdmUgdGhlIHNpdHVhdGlvbiBpbiB0aGUgd2hhdGV2ZXIgd2F5IHRoZSBDCmNvbW1pdHRlZSBkZWNpZGVzLiA8L3A+Cgo8cD5Gb3IgRXhhbXBsZSAyLCBJIHJlY29tbWVuZCB3ZSBkZWNsYXJlIHRoZSByZXN1bHRzIHVuZGVmaW5lZC48L3A+Cgo8cD48aT5bU2VlIHJlZmxlY3RvciBtZXNzYWdlIGxpYi02NTAwIGZvciBmdXJ0aGVyIGRpc2N1c3Npb24uXTwvaT48L3A+CgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSBzZWN0aW9uIDE4LjMvOCBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+PHA+CiAgRmlyc3QsIG9iamVjdHMgd2l0aCBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBhcmUgZGVzdHJveWVkIGFuZAogIGZ1bmN0aW9ucyByZWdpc3RlcmVkIGJ5IGNhbGxpbmcgYXRleGl0IGFyZSBjYWxsZWQuIE9iamVjdHMgd2l0aAogIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIGFyZSBkZXN0cm95ZWQgaW4gdGhlIHJldmVyc2Ugb3JkZXIgb2YgdGhlCiAgY29tcGxldGlvbiBvZiB0aGVpciBjb25zdHJ1Y3Rvci4gIChBdXRvbWF0aWMgb2JqZWN0cyBhcmUgbm90CiAgZGVzdHJveWVkIGFzIGEgcmVzdWx0IG9mIGNhbGxpbmcgZXhpdCgpLikgRnVuY3Rpb25zIHJlZ2lzdGVyZWQgd2l0aAogIGF0ZXhpdCBhcmUgY2FsbGVkIGluIHRoZSByZXZlcnNlIG9yZGVyIG9mIHRoZWlyIHJlZ2lzdHJhdGlvbi4gIEEKICBmdW5jdGlvbiByZWdpc3RlcmVkIHdpdGggYXRleGl0IGJlZm9yZSBhbiBvYmplY3Qgb2JqMSBvZiBzdGF0aWMKICBzdG9yYWdlIGR1cmF0aW9uIGlzIGluaXRpYWxpemVkIHdpbGwgbm90IGJlIGNhbGxlZCB1bnRpbCBvYmoxJ3MKICBkZXN0cnVjdGlvbiBoYXMgY29tcGxldGVkLiBBIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgd2l0aCBhdGV4aXQgYWZ0ZXIKICBhbiBvYmplY3Qgb2JqMiBvZiBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBpcyBpbml0aWFsaXplZCB3aWxsIGJlCiAgY2FsbGVkIGJlZm9yZSBvYmoyJ3MgZGVzdHJ1Y3Rpb24gc3RhcnRzLgo8L3A+PC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPjxwPgogIEZpcnN0LCBvYmplY3RzIHdpdGggc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24gYXJlIGRlc3Ryb3llZCBhbmQKICBmdW5jdGlvbnMgcmVnaXN0ZXJlZCBieSBjYWxsaW5nIGF0ZXhpdCBhcmUgY2FsbGVkLiBOb24tbG9jYWwgb2JqZWN0cwogIHdpdGggc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24gYXJlIGRlc3Ryb3llZCBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZgogIHRoZSBjb21wbGV0aW9uIG9mIHRoZWlyIGNvbnN0cnVjdG9yLiAoQXV0b21hdGljIG9iamVjdHMgYXJlIG5vdAogIGRlc3Ryb3llZCBhcyBhIHJlc3VsdCBvZiBjYWxsaW5nIGV4aXQoKS4pIEZ1bmN0aW9ucyByZWdpc3RlcmVkIHdpdGgKICBhdGV4aXQgYXJlIGNhbGxlZCBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZiB0aGVpciByZWdpc3RyYXRpb24sIGV4Y2VwdAogIHRoYXQgYSBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYW55IHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBmdW5jdGlvbnMKICB0aGF0IGhhZCBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IHRoZSB0aW1lIGl0IHdhcyByZWdpc3RlcmVkLiBBCiAgZnVuY3Rpb24gcmVnaXN0ZXJlZCB3aXRoIGF0ZXhpdCBiZWZvcmUgYSBub24tbG9jYWwgb2JqZWN0IG9iajEgb2YKICBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBpcyBpbml0aWFsaXplZCB3aWxsIG5vdCBiZSBjYWxsZWQgdW50aWwKICBvYmoxJ3MgZGVzdHJ1Y3Rpb24gaGFzIGNvbXBsZXRlZC4gQSBmdW5jdGlvbiByZWdpc3RlcmVkIHdpdGggYXRleGl0CiAgYWZ0ZXIgYSBub24tbG9jYWwgb2JqZWN0IG9iajIgb2Ygc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24gaXMKICBpbml0aWFsaXplZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgb2JqMidzIGRlc3RydWN0aW9uIHN0YXJ0cy4gQSBsb2NhbAogIHN0YXRpYyBvYmplY3Qgb2JqMyBpcyBkZXN0cm95ZWQgYXQgdGhlIHNhbWUgdGltZSBpdCB3b3VsZCBiZSBpZiBhCiAgZnVuY3Rpb24gY2FsbGluZyB0aGUgb2JqMyBkZXN0cnVjdG9yIHdlcmUgcmVnaXN0ZXJlZCB3aXRoIGF0ZXhpdCBhdAogIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBvYmozIGNvbnN0cnVjdG9yLgo8L3A+PC9ibG9ja3F1b3RlPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5TZWUgOTktMDAzOS9OMTIxNSwgT2N0b2JlciAyMiwgMTk5OSwgYnkgU3RlcGhlbiBELiBDbGFtYWdlIGZvciB0aGUgYW5hbHlzaXMKc3VwcG9ydGluZyB0byB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbi48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNSI+PC9hPjUuIFN0cmluZzo6Y29tcGFyZSBzcGVjaWZpY2F0aW9uIHF1ZXN0aW9uYWJsZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMS4zLjYuOCBbc3RyaW5nOjpzd2FwXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBKYWNrIFJlZXZlcyA8Yj5EYXRlOjwvYj4gMTk5Ny0xMi0xMTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjc3RyaW5nOjpzd2FwIj5pc3N1ZXM8L2E+IGluIFtzdHJpbmc6OnN3YXBdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RHVwbGljYXRlIG9mOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjODciPjg3PC9hPjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5BdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGJhc2ljX3N0cmluZyBjbGFzcyBkZWZpbml0aW9uIGlzIHRoZSBzaWduYXR1cmU6IGludApjb21wYXJlKHNpemVfdHlwZSBwb3MxLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbjIgPSBucG9zKSBjb25zdDsgSW4gdGhlCmZvbGxvd2luZyB0ZXh0IHRoaXMgaXMgZGVmaW5lZCBhczogcmV0dXJucwpiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoKnRoaXMscG9zMSxuMSkuY29tcGFyZSgKYmFzaWNfc3RyaW5nJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KHMsbjIpOyA8L3A+Cgo8cD5TaW5jZSB0aGUgY29uc3RydWN0b3IgYmFzaWNfc3RyaW5nKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgY29uc3QgQWxsb2NhdG9yJmFtcDsgYQo9IEFsbG9jYXRvcigpKSBjbGVhcmx5IHJlcXVpcmVzIHRoYXQgcyAhPSBOVUxMIGFuZCBuICZsdDsgbnBvcyBhbmQgZnVydGhlciBzdGF0ZXMgdGhhdCBpdAp0aHJvd3MgbGVuZ3RoX2Vycm9yIGlmIG4gPT0gbnBvcywgaXQgYXBwZWFycyB0aGUgY29tcGFyZSgpIHNpZ25hdHVyZSBhYm92ZSBzaG91bGQgYWx3YXlzCnRocm93IGxlbmd0aCBlcnJvciBpZiBpbnZva2VkIGxpa2Ugc286IHN0ci5jb21wYXJlKDEsIHN0ci5zaXplKCktMSwgcyk7IHdoZXJlICdzJyBpcyBzb21lCm51bGwgdGVybWluYXRlZCBjaGFyYWN0ZXIgYXJyYXkuIDwvcD4KCjxwPlRoaXMgYXBwZWFycyB0byBiZSBhIHR5cG8gc2luY2UgdGhlIG9idmlvdXMgaW50ZW50IGlzIHRvIGFsbG93IGVpdGhlciB0aGUgY2FsbCBhYm92ZSBvcgpzb21ldGhpbmcgbGlrZTogc3RyLmNvbXBhcmUoMSwgc3RyLnNpemUoKS0xLCBzLCBzdHJsZW4ocyktMSk7IDwvcD4KCjxwPlRoaXMgd291bGQgaW1wbHkgdGhhdCB3aGF0IHdhcyByZWFsbHkgaW50ZW5kZWQgd2FzIHR3byBzaWduYXR1cmVzIGludCBjb21wYXJlKHNpemVfdHlwZQpwb3MxLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzKSBjb25zdCBpbnQgY29tcGFyZShzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLCBjb25zdApjaGFyVCogcywgc2l6ZV90eXBlIG4yKSBjb25zdDsgZWFjaCBkZWZpbmVkIGluIHRlcm1zIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbnN0cnVjdG9yLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIHRoZSBjb21wYXJlIHNpZ25hdHVyZSBpbiAyMS4zIFtiYXNpYy5zdHJpbmddCihhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGJhc2ljX3N0cmluZyBzeW5vcHNpcykgd2hpY2ggcmVhZHM6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PHR0PmludCBjb21wYXJlKHNpemVfdHlwZSBwb3MxLCBzaXplX3R5cGUgbjEsPGJyPgogICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjb25zdCBjaGFyVCogcywKICBzaXplX3R5cGUgbjIgPSBucG9zKSBjb25zdDs8L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+d2l0aDo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+aW50IGNvbXBhcmUoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSw8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbnN0IGNoYXJUKiBzKSBjb25zdDs8YnI+CiAgaW50IGNvbXBhcmUoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSw8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbnN0IGNoYXJUKiBzLAogIHNpemVfdHlwZSBuMikgY29uc3Q7PC90dD48L3A+CjwvYmxvY2txdW90ZT4KCjxwPlJlcGxhY2UgdGhlIHBvcnRpb24gb2YgMjEuMy42LjggW3N0cmluZzo6c3dhcF0KcGFyYWdyYXBocyA1IGFuZCA2IHdoaWNoIHJlYWQ6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PHR0PmludCBjb21wYXJlKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSw8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNoYXJUICogcywgc2l6ZV90eXBlIG4yCiAgPSBucG9zKSBjb25zdDs8YnI+CiAgPC90dD5SZXR1cm5zOjx0dD48YnI+CiAgYmFzaWNfc3RyaW5nJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KCp0aGlzLCBwb3MsIG4xKS5jb21wYXJlKDxicj4KICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoIHMsIG4yKSk8L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+d2l0aDo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+aW50IGNvbXBhcmUoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLDxicj4KICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY29uc3QgY2hhclQgKiBzKSBjb25zdDs8YnI+CiAgPC90dD5SZXR1cm5zOjx0dD48YnI+CiAgYmFzaWNfc3RyaW5nJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KCp0aGlzLCBwb3MsIG4xKS5jb21wYXJlKDxicj4KICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoIHMgKSk8YnI+CiAgPGJyPgogIGludCBjb21wYXJlKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSw8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbnN0IGNoYXJUICogcywKICBzaXplX3R5cGUgbjIpIGNvbnN0Ozxicj4KICA8L3R0PlJldHVybnM6PHR0Pjxicj4KICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoKnRoaXMsIHBvcywgbjEpLmNvbXBhcmUoPGJyPgogICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogIGJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyggcywgbjIpKTwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5FZGl0b3JzIHBsZWFzZSBub3RlIHRoYXQgaW4gYWRkaXRpb24gdG8gc3BsaXR0aW5nIHRoZSBzaWduYXR1cmUsIHRoZSB0aGlyZCBhcmd1bWVudApiZWNvbWVzIGNvbnN0LCBtYXRjaGluZyB0aGUgZXhpc3Rpbmcgc3lub3BzaXMuPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5XaGlsZSB0aGUgTFdHIGRpc2xpa2VzIGFkZGluZyBzaWduYXR1cmVzLCB0aGlzIGlzIGEgY2xlYXIgZGVmZWN0IGluCnRoZSBTdGFuZGFyZCB3aGljaCBtdXN0IGJlIGZpeGVkLiZuYnNwOyBUaGUgc2FtZSBwcm9ibGVtIHdhcyBhbHNvCmlkZW50aWZpZWQgaW4gaXNzdWVzIDcgKGl0ZW0gNSkgYW5kIDg3LjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3Ij48L2E+Ny4gU3RyaW5nIGNsYXVzZSBtaW5vciBwcm9ibGVtczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMSBbc3RyaW5nc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAxOTk3LTEyLTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmdzIj5pc3N1ZXM8L2E+IGluIFtzdHJpbmdzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+KDEpIEluIDIxLjMuNi40IFtzdHJpbmc6Omluc2VydF0sIHRoZSBkZXNjcmlwdGlvbiBvZiB0ZW1wbGF0ZQombHQ7Y2xhc3MgSW5wdXRJdGVyYXRvciZndDsgaW5zZXJ0KGl0ZXJhdG9yLCBJbnB1dEl0ZXJhdG9yLApJbnB1dEl0ZXJhdG9yKSBtYWtlcyBubyBzZW5zZS4gSXQgcmVmZXJzIHRvIGEgbWVtYmVyIGZ1bmN0aW9uIHRoYXQKZG9lc24ndCBleGlzdC4gSXQgYWxzbyB0YWxrcyBhYm91dCB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgdm9pZApmdW5jdGlvbi4gPC9wPgoKPHA+KDIpIFNldmVyYWwgdmVyc2lvbnMgb2YgYmFzaWNfc3RyaW5nOjpyZXBsYWNlIGRvbid0IGFwcGVhciBpbiB0aGUKY2xhc3Mgc3lub3BzaXMuIDwvcD4KCjxwPigzKSBiYXNpY19zdHJpbmc6OnB1c2hfYmFjayBhcHBlYXJzIGluIHRoZSBzeW5vcHNpcywgYnV0IGlzIG5ldmVyCmRlc2NyaWJlZCBlbHNld2hlcmUuICBJbiB0aGUgc3lub3BzaXMgaXRzIGFyZ3VtZW50IGlzIGNvbnN0IGNoYXJULAp3aGljaCBkb2Vzbid0IG1ha2VzIG11Y2ggc2Vuc2U7IGl0IHNob3VsZCBwcm9iYWJseSBiZSBjaGFyVCwgb3IKcG9zc2libGUgY29uc3QgY2hhclQmYW1wOy4gPC9wPgoKPHA+KDQpIGJhc2ljX3N0cmluZzo6cG9wX2JhY2sgaXMgbWlzc2luZy4gPC9wPgoKPHA+KDUpIGludCBjb21wYXJlKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY2hhclQqIHMsIHNpemVfdHlwZSBuMgo9IG5wb3MpIG1ha2Ugbm8gc2Vuc2UuIEZpcnN0LCBpdCdzIGNvbnN0IGNoYXJUKiBpbiB0aGUgc3lub3BzaXMgYW5kCmNoYXJUKiBpbiB0aGUgZGVzY3JpcHRpb24uIFNlY29uZCwgZ2l2ZW4gd2hhdCBpdCBzYXlzIGluIFJFVFVSTlMsCmxlYXZpbmcgb3V0IHRoZSBmaW5hbCBhcmd1bWVudCB3aWxsIGFsd2F5cyByZXN1bHQgaW4gYW4gZXhjZXB0aW9uCmdldHRpbmcgdGhyb3duLiBUaGlzIGlzIHBhcmFncmFwaHMgNSBhbmQgNiBvZiAKMjEuMy42LjggW3N0cmluZzo6c3dhcF08L3A+Cgo8cD4oNikgSW4gdGFibGUgMzcsIGluIHNlY3Rpb24gMjEuMS4xIFtjaGFyLnRyYWl0cy5yZXF1aXJlXSwKdGhlcmUncyBhIG5vdGUgZm9yIFg6Om1vdmUocywgcCwgbikuIEl0IHNheXMgIkNvcGllcyBjb3JyZWN0bHkKZXZlbiB3aGVyZSBwIGlzIGluIFtzLCBzK24pIi4gVGhpcyBpcyBjb3JyZWN0IGFzIGZhciBhcyBpdCBnb2VzLApidXQgaXQgZG9lc24ndCBnbyBmYXIgZW5vdWdoOyBpdCBzaG91bGQgYWxzbyBndWFyYW50ZWUgdGhhdCB0aGUgY29weQppcyBjb3JyZWN0IGV2ZW4gd2hlcmUgcyBpbiBpbiBbcCwgcCtuKS4gVGhlc2UgYXJlIHR3byBvcnRob2dvbmFsCmd1YXJhbnRlZXMsIGFuZCBuZWl0aGVyIG9uZSBmb2xsb3dzIGZyb20gdGhlIG90aGVyLiBCb3RoIGd1YXJhbnRlZXMKYXJlIG5lY2Vzc2FyeSBpZiBYOjptb3ZlIGlzIHN1cHBvc2VkIHRvIGhhdmUgdGhlIHNhbWUgc29ydCBvZgpzZW1hbnRpY3MgYXMgbWVtbW92ZSAod2hpY2ggd2FzIGNsZWFybHkgdGhlIGludGVudCksIGFuZCBib3RoCmd1YXJhbnRlZXMgYXJlIG5lY2Vzc2FyeSBpZiBYOjptb3ZlIGlzIGFjdHVhbGx5IHN1cHBvc2VkIHRvIGJlCnVzZWZ1bC4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SVRFTSAxOiBJbiAyMS4zLjUuNCBbbGliLnN0cmluZzo6aW5zZXJ0XSwgY2hhbmdlIHBhcmFncmFwaCAxNiB0byA8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IEVGRkVDVFM6IEVxdWl2YWxlbnQgdG8gaW5zZXJ0KHAgLSBiZWdpbigpLCBiYXNpY19zdHJpbmcoZmlyc3QsIGxhc3QpKS48YnI+Cjxicj4KSVRFTSAyOiZuYnNwOyBOb3QgYSBkZWZlY3Q7IHRoZSBTdGFuZGFyZCBpcyBjbGVhci4uIFRoZXJlIGFyZSB0ZW4gdmVyc2lvbnMgb2YgcmVwbGFjZSgpIGluCnRoZSBzeW5vcHNpcywgYW5kIHRlbiB2ZXJzaW9ucyBpbiAyMS4zLjUuNiBbbGliLnN0cmluZzo6cmVwbGFjZV0uPGJyPgo8YnI+CklURU0gMzogQ2hhbmdlIHRoZSBkZWNsYXJhdGlvbiBvZiBwdXNoX2JhY2sgaW4gdGhlIHN0cmluZyBzeW5vcHNpcyAoMjEuMywKW2xpYi5iYXNpYy5zdHJpbmddKSBmcm9tOjwvcD4KCjxwPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB2b2lkIHB1c2hfYmFjayhjb25zdCBjaGFyVCk8YnI+Cjxicj4KdG88YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHZvaWQgcHVzaF9iYWNrKGNoYXJUKTxicj4KPGJyPgpBZGQgdGhlIGZvbGxvd2luZyB0ZXh0IGltbWVkaWF0ZWx5IGFmdGVyIDIxLjMuNS4yIFtsaWIuc3RyaW5nOjphcHBlbmRdLCBwYXJhZ3JhcGggMTAuPGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB2b2lkIGJhc2ljX3N0cmluZzo6cHVzaF9iYWNrKGNoYXJUIGMpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IEVGRkVDVFM6IEVxdWl2YWxlbnQgdG8gYXBwZW5kKHN0YXRpY19jYXN0Jmx0O3NpemVfdHlwZSZndDsoMSksIGMpOzxicj4KPGJyPgpJVEVNIDQ6IE5vdCBhIGRlZmVjdC4gVGhlIG9taXNzaW9uIGFwcGVhcnMgdG8gaGF2ZSBiZWVuIGRlbGliZXJhdGUuPGJyPgo8YnI+CklURU0gNTogRHVwbGljYXRlOyBzZWUgaXNzdWUgNSAoYW5kIDg3KS48YnI+Cjxicj4KSVRFTSA2OiBJbiB0YWJsZSAzNywgUmVwbGFjZTo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7ICJDb3BpZXMgY29ycmVjdGx5IGV2ZW4gd2hlcmUgcCBpcyBpbiBbcywgcytuKS4iPGJyPgo8YnI+CndpdGg6PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAiQ29waWVzIGNvcnJlY3RseSBldmVuIHdoZXJlIHRoZSByYW5nZXMgW3AsIHArbikgYW5kIFtzLApzK24pIG92ZXJsYXAuIjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI4Ij48L2E+OC4gTG9jYWxlOjpnbG9iYWwgbGFja3MgZ3VhcmFudGVlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjEuMS41IFtsb2NhbGUuc3RhdGljc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAxOTk3LTEyLTI0PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkl0IGFwcGVhcnMgdGhlcmUncyBhbiBpbXBvcnRhbnQgZ3VhcmFudGVlIG1pc3NpbmcgZnJvbSBjbGF1c2UKMjIuIFdlJ3JlIHRvbGQgdGhhdCBpbnZva2luZyBsb2NhbGU6Omdsb2JhbChMKSBzZXRzIHRoZSBDIGxvY2FsZSBpZiBMCmhhcyBhIG5hbWUuIEhvd2V2ZXIsIHdlJ3JlIG5vdCB0b2xkIHdoZXRoZXIgb3Igbm90IGludm9raW5nCnNldGxvY2FsZShzKSBzZXRzIHRoZSBnbG9iYWwgQysrIGxvY2FsZS4gPC9wPgoKPHA+VGhlIGludGVudCwgSSB0aGluaywgaXMgdGhhdCBpdCBzaG91bGQgbm90LCBidXQgSSBjYW4ndCBmaW5kIGFueQpzdWNoIHdvcmRzIGFueXdoZXJlLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgYSBzZW50ZW5jZSBhdCB0aGUgZW5kIG9mIDIyLjEuMS41IFtsb2NhbGUuc3RhdGljc10sCnBhcmFncmFwaCAyOiZuYnNwOyA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5ObyBsaWJyYXJ5IGZ1bmN0aW9uIG90aGVyIHRoYW4gPHR0PmxvY2FsZTo6Z2xvYmFsKCk8L3R0PiBzaGFsbCBhZmZlY3QgCiAgdGhlIHZhbHVlIHJldHVybmVkIGJ5IDx0dD5sb2NhbGUoKTwvdHQ+LiA8L3A+Cgo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iOSI+PC9hPjkuIE9wZXJhdG9yIG5ldygwKSBjYWxscyBzaG91bGQgbm90IHlpZWxkIHRoZSBzYW1lIHBvaW50ZXI8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTguNS4xIFtuZXcuZGVsZXRlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBTdGV2ZSBDbGFtYWdlIDxiPkRhdGU6PC9iPiAxOTk4LTAxLTA0PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlNjb3R0IE1leWVycywgaW4gYSBjb21wLnN0ZC5jKysgcG9zdGluZzogSSBqdXN0IG5vdGljZWQgdGhhdApzZWN0aW9uIDMuNy4zLjEgb2YgQ0QyIHNlZW1zIHRvIGFsbG93IGZvciB0aGUgcG9zc2liaWxpdHkgdGhhdCBhbGwKY2FsbHMgdG8gb3BlcmF0b3IgbmV3KDApIHlpZWxkIHRoZSBzYW1lIHBvaW50ZXIsIGFuIGltcGxlbWVudGF0aW9uCnRlY2huaXF1ZSBzcGVjaWZpY2FsbHkgcHJvaGliaXRlZCBieSBBUk0gNS4zLjMuV2FzIHRoaXMgcHJvaGliaXRpb24KcmVhbGx5IGxpZnRlZD8gRG9lcyB0aGUgRkRJUyBhZ3JlZSB3aXRoIENEMiBpbiB0aGUgcmVnYXJkPyBbSXNzdWVzCmxpc3QgbWFpbnRhaW5lcidzIG5vdGU6IHRoZSBJUyBpcyB0aGUgc2FtZS5dPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSBsYXN0IHBhcmFncmFwaCBvZiAzLjcuMyBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+QW55IGFsbG9jYXRpb24gYW5kL29yIGRlYWxsb2NhdGlvbiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBhIEMrKyBwcm9ncmFtIHNoYWxsCiAgY29uZm9ybSB0byB0aGUgc2VtYW50aWNzIHNwZWNpZmllZCBpbiAzLjcuMy4xIGFuZCAzLjcuMy4yLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkFueSBhbGxvY2F0aW9uIGFuZC9vciBkZWFsbG9jYXRpb24gZnVuY3Rpb25zIGRlZmluZWQgaW4gYSBDKysgcHJvZ3JhbSwKICBpbmNsdWRpbmcgdGhlIGRlZmF1bHQgdmVyc2lvbnMgaW4gdGhlIGxpYnJhcnksIHNoYWxsIGNvbmZvcm0gdG8gdGhlIHNlbWFudGljcwogIHNwZWNpZmllZCBpbiAzLjcuMy4xIGFuZCAzLjcuMy4yLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5DaGFuZ2UgMy43LjMuMS8yLCBuZXh0LXRvLWxhc3Qgc2VudGVuY2UsIGZyb20gOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+SWYgdGhlIHNpemUgb2YgdGhlIHNwYWNlIHJlcXVlc3RlZCBpcyB6ZXJvLCB0aGUgdmFsdWUgcmV0dXJuZWQgc2hhbGwgbm90IGJlCiAgYSBudWxsIHBvaW50ZXIgdmFsdWUgKDQuMTApLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkV2ZW4gaWYgdGhlIHNpemUgb2YgdGhlIHNwYWNlIHJlcXVlc3RlZCBpcyB6ZXJvLCB0aGUgcmVxdWVzdCBjYW4gZmFpbC4gSWYKICB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhlIHZhbHVlIHJldHVybmVkIHNoYWxsIGJlIGEgbm9uLW51bGwgcG9pbnRlciB2YWx1ZQogICg0LjEwKSBwMCBkaWZmZXJlbnQgZnJvbSBhbnkgcHJldmlvdXNseSByZXR1cm5lZCB2YWx1ZSBwMSwgdW5sZXNzIHRoYXQgdmFsdWUKICBwMSB3YXMgc2luY2UgcGFzc2VkIHRvIGFuIG9wZXJhdG9yIGRlbGV0ZS48L3A+CjwvYmxvY2txdW90ZT4KPHA+NS4zLjQvNyBjdXJyZW50bHkgcmVhZHM6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5XaGVuIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpbiBhIGRpcmVjdC1uZXctZGVjbGFyYXRvciBpcyB6ZXJvLCB0aGUKICBhbGxvY2F0aW9uIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBhbGxvY2F0ZSBhbiBhcnJheSB3aXRoIG5vIGVsZW1lbnRzLiBUaGUKICBwb2ludGVyIHJldHVybmVkIGJ5IHRoZSBuZXctZXhwcmVzc2lvbiBpcyBub24tbnVsbC4gW05vdGU6IElmIHRoZSBsaWJyYXJ5CiAgYWxsb2NhdGlvbiBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBwb2ludGVyIHJldHVybmVkIGlzIGRpc3RpbmN0IGZyb20gdGhlCiAgcG9pbnRlciB0byBhbnkgb3RoZXIgb2JqZWN0Ll08L3A+CjwvYmxvY2txdW90ZT4KPHA+UmV0YWluIHRoZSBmaXJzdCBzZW50ZW5jZSwgYW5kIGRlbGV0ZSB0aGUgcmVtYWluZGVyLjwvcD4KPHA+MTguNS4xIGN1cnJlbnRseSBoYXMgbm8gdGV4dC4gQWRkIHRoZSBmb2xsb3dpbmc6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5FeGNlcHQgd2hlcmUgb3RoZXJ3aXNlIHNwZWNpZmllZCwgdGhlIHByb3Zpc2lvbnMgb2YgMy43LjMgYXBwbHkgdG8gdGhlCiAgbGlicmFyeSB2ZXJzaW9ucyBvZiBvcGVyYXRvciBuZXcgYW5kIG9wZXJhdG9yIGRlbGV0ZS48L3A+CjwvYmxvY2txdW90ZT4KPHA+VG8gMTguNS4xLjMsIGFkZCB0aGUgZm9sbG93aW5nIHRleHQ6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5UaGUgcHJvdmlzaW9ucyBvZiAzLjcuMyBkbyBub3QgYXBwbHkgdG8gdGhlc2UgcmVzZXJ2ZWQgcGxhY2VtZW50IGZvcm1zIG9mCiAgb3BlcmF0b3IgbmV3IGFuZCBvcGVyYXRvciBkZWxldGUuPC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlNlZSA5OS0wMDQwL04xMjE2LCBPY3RvYmVyIDIyLCAxOTk5LCBieSBTdGVwaGVuIEQuIENsYW1hZ2UgZm9yIHRoZSBhbmFseXNpcwpzdXBwb3J0aW5nIHRvIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxMSI+PC9hPjExLiBCaXRzZXQgbWlub3IgcHJvYmxlbXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMy41IFt0ZW1wbGF0ZS5iaXRzZXRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMTk5OC0wMS0yMjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjdGVtcGxhdGUuYml0c2V0Ij5pc3N1ZXM8L2E+IGluIFt0ZW1wbGF0ZS5iaXRzZXRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4oMSkgYml0c2V0Jmx0OyZndDs6Om9wZXJhdG9yW10gaXMgbWVudGlvbmVkIGluIHRoZSBjbGFzcyBzeW5vcHNpcyAoMjMuMy41KSwgYnV0IGl0IGlzCm5vdCBkb2N1bWVudGVkIGluIDIzLjMuNS4yLiA8L3A+Cgo8cD4oMikgVGhlIGNsYXNzIHN5bm9wc2lzIG9ubHkgZ2l2ZXMgYSBzaW5nbGUgc2lnbmF0dXJlIGZvciBiaXRzZXQmbHQ7Jmd0Ozo6b3BlcmF0b3JbXSwKcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90IHBvcykuIFRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UuIEl0IG91Z2h0IHRvIGJlIG92ZXJsb2FkZWQKb24gY29uc3QuIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdCBwb3MpOyBib29sIG9wZXJhdG9yW10oc2l6ZV90IHBvcykgY29uc3QuIDwvcD4KCjxwPigzKSBCaXRzZXQncyBzdHJlYW0gaW5wdXQgZnVuY3Rpb24gKDIzLjMuNS4zKSBvdWdodCB0byBza2lwIGFsbCB3aGl0ZXNwYWNlIGJlZm9yZQp0cnlpbmcgdG8gZXh0cmFjdCAwcyBhbmQgMXMuIFRoZSBzdGFuZGFyZCBkb2Vzbid0IGV4cGxpY2l0bHkgc2F5IHRoYXQsIHRob3VnaC4gVGhpcyBzaG91bGQKZ28gaW4gdGhlIEVmZmVjdHMgY2xhdXNlLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPklURU1TIDEgQU5EIDI6PGJyPgo8YnI+CkluIHRoZSBiaXRzZXQgc3lub3BzaXMgKDIzLjMuNSBbdGVtcGxhdGUuYml0c2V0XSksIApyZXBsYWNlIHRoZSBtZW1iZXIgZnVuY3Rpb24gPGJyPgo8YnI+Cjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90IHBvcyk7PGJyPgo8L3R0Pjxicj4Kd2l0aCB0aGUgdHdvIG1lbWJlciBmdW5jdGlvbnM8YnI+Cjxicj4KPHR0PiZuYnNwOyZuYnNwOyZuYnNwOyBib29sIG9wZXJhdG9yW10oc2l6ZV90IHBvcykgY29uc3Q7IDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdCBwb3MpOyA8YnI+CjwvdHQ+PGJyPgpBZGQgdGhlIGZvbGxvd2luZyB0ZXh0IGF0IHRoZSBlbmQgb2YgMjMuMy41LjIgW2JpdHNldC5tZW1iZXJzXSwgCmltbWVkaWF0ZWx5IGFmdGVyIHBhcmFncmFwaCA0NTo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+Ym9vbCBvcGVyYXRvcltdKHNpemVfdCBwb3MpIGNvbnN0OzwvdHQ+PGJyPgogIFJlcXVpcmVzOiBwb3MgaXMgdmFsaWQ8YnI+CiAgVGhyb3dzOiBub3RoaW5nPGJyPgogIFJldHVybnM6IDx0dD50ZXN0KHBvcyk8L3R0Pjxicj4KICA8YnI+CiAgPHR0PmJpdHNldCZsdDtOJmd0Ozo6cmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90IHBvcyk7PC90dD4gPGJyPgogIFJlcXVpcmVzOiBwb3MgaXMgdmFsaWQ8YnI+CiAgVGhyb3dzOiBub3RoaW5nPGJyPgogIFJldHVybnM6IEFuIG9iamVjdCBvZiB0eXBlIDx0dD5iaXRzZXQmbHQ7TiZndDs6OnJlZmVyZW5jZTwvdHQ+IHN1Y2ggdGhhdCA8dHQ+KCp0aGlzKVtwb3NdCiAgPT0gdGhpcy0mZ3Q7dGVzdChwb3MpPC90dD4sIGFuZCBzdWNoIHRoYXQgPHR0PigqdGhpcylbcG9zXSA9IHZhbDwvdHQ+IGlzIGVxdWl2YWxlbnQgdG8gPHR0PnRoaXMtJmd0O3NldChwb3MsCiAgdmFsKTs8L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGJlbGlldmVzIEl0ZW0gMyBpcyBub3QgYSBkZWZlY3QuICJGb3JtYXR0ZWQKaW5wdXQiIGltcGxpZXMgdGhlIGRlc2lyZWQgc2VtYW50aWNzLiBTZWUgMjcuNi4xLjIgW2lzdHJlYW0uZm9ybWF0dGVkXS4KPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjEzIj48L2E+MTMuIEVvcyByZWZ1c2VzIHRvIGRpZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjEuMi4zIFtpc3RyZWFtOjpleHRyYWN0b3JzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBXaWxsaWFtIE0uIE1pbGxlciA8Yj5EYXRlOjwvYj4gMTk5OC0wMy0wMzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaXN0cmVhbTo6ZXh0cmFjdG9ycyI+aXNzdWVzPC9hPiBpbiBbaXN0cmVhbTo6ZXh0cmFjdG9yc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkluIDI3LjYuMS4yLjMsIHRoZXJlIGlzIGEgcmVmZXJlbmNlIHRvICJlb3MiLCB3aGljaCBpcwp0aGUgb25seSBvbmUgaW4gdGhlIHdob2xlIGRyYWZ0IChhdCBsZWFzdCB1c2luZyBBY3JvYmF0IHNlYXJjaCksIHNvCml0J3MgdW5kZWZpbmVkLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy42LjEuMi4zIFtpc3RyZWFtOjpleHRyYWN0b3JzXSwgcmVwbGFjZSAiZW9zIiB3aXRoCiJjaGFyVCgpIjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNCI+PC9hPjE0LiBMb2NhbGU6OmNvbWJpbmUgc2hvdWxkIGJlIGNvbnN0PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjEuMS4zIFtsb2NhbGUubWVtYmVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTmF0aGFuIE15ZXJzIDxiPkRhdGU6PC9iPiAxOTk4LTA4LTA2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsb2NhbGUubWVtYmVycyI+aXNzdWVzPC9hPiBpbiBbbG9jYWxlLm1lbWJlcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5sb2NhbGU6OmNvbWJpbmUgaXMgdGhlIG9ubHkgbWVtYmVyIGZ1bmN0aW9uIG9mIGxvY2FsZSAob3RoZXIgdGhhbiBjb25zdHJ1Y3RvcnMgYW5kCmRlc3RydWN0b3IpIHRoYXQgaXMgbm90IGNvbnN0LiBUaGVyZSBpcyBubyByZWFzb24gZm9yIGl0IG5vdCB0byBiZSBjb25zdCwgYW5kIGdvb2QgcmVhc29ucwp3aHkgaXQgc2hvdWxkIGhhdmUgYmVlbiBjb25zdC4gRnVydGhlcm1vcmUsIGxlYXZpbmcgaXQgbm9uLWNvbnN0IGNvbmZsaWN0cyB3aXRoIDIyLjEuMQpwYXJhZ3JhcGggNjogIkFuIGluc3RhbmNlIG9mIGEgbG9jYWxlIGlzIGltbXV0YWJsZS4iIDwvcD4KCjxwPkhpc3Rvcnk6IHRoaXMgbWVtYmVyIGZ1bmN0aW9uIG9yaWdpbmFsbHkgd2FzIGEgY29uc3RydWN0b3IuIGl0IGhhcHBlbmVkIHRoYXQgdGhlCmludGVyZmFjZSBpdCBzcGVjaWZpZWQgaGFkIG5vIGNvcnJlc3BvbmRpbmcgbGFuZ3VhZ2Ugc3ludGF4LCBzbyBpdCB3YXMgY2hhbmdlZCB0byBhIG1lbWJlcgpmdW5jdGlvbi4gQXMgY29uc3RydWN0b3JzIGFyZSBuZXZlciBjb25zdCwgdGhlcmUgd2FzIG5vICJjb25zdCIgaW4gdGhlIGludGVyZmFjZQp3aGljaCB3YXMgdHJhbnNmb3JtZWQgaW50byBtZW1iZXIgImNvbWJpbmUiLiBJdCBzaG91bGQgaGF2ZSBiZWVuIGFkZGVkIGF0IHRoYXQKdGltZSwgYnV0IHRoZSBvbWlzc2lvbiB3YXMgbm90IG5vdGljZWQuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjEuMSBbbG9jYWxlXSBhbmQgYWxzbyBpbiAyMi4xLjEuMyBbbG9jYWxlLm1lbWJlcnNdLCBhZGQgCiJjb25zdCIgdG8gdGhlIGRlY2xhcmF0aW9uIG9mIG1lbWJlciBjb21iaW5lOiA8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIEZhY2V0Jmd0OyBsb2NhbGUgY29tYmluZShjb25zdCBsb2NhbGUmYW1wOyBvdGhlcikgY29uc3Q7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTUiPjwvYT4xNS4gTG9jYWxlOjpuYW1lIHJlcXVpcmVtZW50IGluY29uc2lzdGVudDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4xLjEuMyBbbG9jYWxlLm1lbWJlcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5hdGhhbiBNeWVycyA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0wNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlLm1lbWJlcnMiPmlzc3VlczwvYT4gaW4gW2xvY2FsZS5tZW1iZXJzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+bG9jYWxlOjpuYW1lKCkgaXMgZGVzY3JpYmVkIGFzIHJldHVybmluZyBhIHN0cmluZyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gYSBsb2NhbGUKY29uc3RydWN0b3IsIGJ1dCB0aGVyZSBpcyBubyBtYXRjaGluZyBjb25zdHJ1Y3Rvci4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMS4xLjMgW2xvY2FsZS5tZW1iZXJzXSwgcGFyYWdyYXBoIDUsIHJlcGxhY2UKIjx0dD5sb2NhbGUobmFtZSgpKTwvdHQ+IiB3aXRoCiI8dHQ+bG9jYWxlKG5hbWUoKS5jX3N0cigpKTwvdHQ+Ii4KPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE2Ij48L2E+MTYuIEJhZCBjdHlwZV9ieW5hbWUmbHQ7Y2hhciZndDsgZGVjbDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjEuNCBbbG9jYWxlLmNvZGVjdnRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5hdGhhbiBNeWVycyA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0wNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlLmNvZGVjdnQiPmlzc3VlczwvYT4gaW4gW2xvY2FsZS5jb2RlY3Z0XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIG5ldyB2aXJ0dWFsIG1lbWJlcnMgY3R5cGVfYnluYW1lJmx0O2NoYXImZ3Q7Ojpkb193aWRlbiBhbmQgZG9fbmFycm93IGRpZCBub3QgZ2V0CmVkaXRlZCBpbiBwcm9wZXJseS4gSW5zdGVhZCwgdGhlIG1lbWJlciBkb193aWRlbiBhcHBlYXJzIGZvdXIgdGltZXMsIHdpdGggd3JvbmcgYXJndW1lbnQKbGlzdHMuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlRoZSBjb3JyZWN0IGRlY2xhcmF0aW9ucyBmb3IgdGhlIG92ZXJsb2FkZWQgbWVtYmVycwo8dHQ+ZG9fbmFycm93PC90dD4gYW5kIDx0dD5kb193aWRlbjwvdHQ+IHNob3VsZCBiZSBjb3BpZWQgCmZyb20gMjIuMi4xLjMgW2ZhY2V0LmN0eXBlLnNwZWNpYWxdLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNyI+PC9hPjE3LiBCYWQgYm9vbCBwYXJzaW5nPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMi4xLjIgW2ZhY2V0Lm51bS5nZXQudmlydHVhbHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5hdGhhbiBNeWVycyA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0wNjwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI2ZhY2V0Lm51bS5nZXQudmlydHVhbHMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtmYWNldC5udW0uZ2V0LnZpcnR1YWxzXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2ZhY2V0Lm51bS5nZXQudmlydHVhbHMiPmlzc3VlczwvYT4gaW4gW2ZhY2V0Lm51bS5nZXQudmlydHVhbHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBwcm9jZXNzIG9mIHBhcnNpbmcgYSB0ZXh0IGJvb2xlYW4gdmFsdWUgZnJvbSB0aGUgaW5wdXQKc3RyZWFtLiBJdCBkb2VzIG5vdCBzYXkgaXQgcmVjb2duaXplcyBlaXRoZXIgb2YgdGhlIHNlcXVlbmNlcyAidHJ1ZSIgb3IKImZhbHNlIiBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBib29sIHZhbHVlOyBpbnN0ZWFkLCBpdCBzYXlzIGl0IHJlY29nbml6ZXMKb25seSBvbmUgb2YgdGhvc2Ugc2VxdWVuY2VzLCBhbmQgY2hvb3NlcyB3aGljaCBhY2NvcmRpbmcgdG8gdGhlIHJlY2VpdmVkIHZhbHVlIG9mIGEKcmVmZXJlbmNlIGFyZ3VtZW50IGludGVuZGVkIGZvciByZXR1cm5pbmcgdGhlIHJlc3VsdCwgYW5kIHJlcG9ydHMgYW4gZXJyb3IgaWYgdGhlIG90aGVyCnNlcXVlbmNlIGlzIGZvdW5kLiAoISkgRnVydGhlcm1vcmUsIGl0IGNsYWltcyB0byBnZXQgdGhlIG5hbWVzIGZyb20gdGhlIGN0eXBlJmx0OyZndDsKZmFjZXQgcmF0aGVyIHRoYW4gdGhlIG51bXB1bmN0Jmx0OyZndDsgZmFjZXQsIGFuZCBpdCBleGFtaW5lcyB0aGUgImJvb2xhbHBoYSIKZmxhZyB3cm9uZ2x5OyBpdCBkb2Vzbid0IGRlZmluZSB0aGUgdmFsdWUgImxvYyI7IGFuZCBmaW5hbGx5LCBpdCBjb21wdXRlcwp3cm9uZ2x5IHdoZXRoZXIgdG8gdXNlIG51bWVyaWMgb3IgImFscGhhIiBwYXJzaW5nLjxicj4KPGJyPgpJIGJlbGlldmUgdGhlIGNvcnJlY3QgYWxnb3JpdGhtIGlzICJhcyBpZiI6IDwvcD4KCjxwcmU+ICAvLyBpbiwgZXJyLCB2YWwsIGFuZCBzdHIgYXJlIGFyZ3VtZW50cy4KICBlcnIgPSAwOwogIGNvbnN0IG51bXB1bmN0Jmx0O2NoYXJUJmd0OyZhbXA7IG5wID0gdXNlX2ZhY2V0Jmx0O251bXB1bmN0Jmx0O2NoYXJUJmd0OyAmZ3Q7KHN0ci5nZXRsb2MoKSk7CiAgY29uc3Qgc3RyaW5nX3R5cGUgdCA9IG5wLnRydWVuYW1lKCksIGYgPSBucC5mYWxzZW5hbWUoKTsKICBib29sIHRtID0gdHJ1ZSwgZm0gPSB0cnVlOwogIHNpemVfdCBwb3MgPSAwOwogIHdoaWxlICh0bSAmYW1wOyZhbXA7IHBvcyAmbHQ7IHQuc2l6ZSgpIHx8IGZtICZhbXA7JmFtcDsgcG9zICZsdDsgZi5zaXplKCkpIHsKICAgIGlmIChpbiA9PSBlbmQpIHsgZXJyID0gc3RyLmVvZmJpdDsgfQogICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CiAgICBpZiAodG0gJmFtcDsmYW1wOyBwb3MgJmx0OyB0LnNpemUoKSkgewogICAgICBpZiAoIWVyciAmYW1wOyZhbXA7IHRbcG9zXSA9PSAqaW4pIG1hdGNoZWQgPSB0cnVlOwogICAgICBlbHNlIHRtID0gZmFsc2U7CiAgICB9CiAgICBpZiAoZm0gJmFtcDsmYW1wOyBwb3MgJmx0OyBmLnNpemUoKSkgewogICAgICBpZiAoIWVyciAmYW1wOyZhbXA7IGZbcG9zXSA9PSAqaW4pIG1hdGNoZWQgPSB0cnVlOwogICAgICBlbHNlIGZtID0gZmFsc2U7CiAgICB9CiAgICBpZiAobWF0Y2hlZCkgeyArK2luOyArK3BvczsgfQogICAgaWYgKHBvcyAmZ3Q7IHQuc2l6ZSgpKSB0bSA9IGZhbHNlOwogICAgaWYgKHBvcyAmZ3Q7IGYuc2l6ZSgpKSBmbSA9IGZhbHNlOwogIH0KICBpZiAodG0gPT0gZm0gfHwgcG9zID09IDApIHsgZXJyIHw9IHN0ci5mYWlsYml0OyB9CiAgZWxzZSAgICAgICAgICAgICAgICAgICAgICB7IHZhbCA9IHRtOyB9CiAgcmV0dXJuIGluOzwvcHJlPgoKPHA+Tm90aWNlIHRoaXMgd29ya3MgcmVhc29uYWJseSB3aGVuIHRoZSBjYW5kaWRhdGUgc3RyaW5ncyBhcmUgYm90aCBlbXB0eSwgb3IgZXF1YWwsIG9yCndoZW4gb25lIGlzIGEgc3Vic3RyaW5nIG9mIHRoZSBvdGhlci4gVGhlIHByb3Bvc2VkIHRleHQgYmVsb3cgY2FwdHVyZXMgdGhlIGxvZ2ljIG9mIHRoZQpjb2RlIGFib3ZlLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuMi4xLjIgW2ZhY2V0Lm51bS5nZXQudmlydHVhbHNdLCBpbiB0aGUgZmlyc3QgbGluZSBvZiBwYXJhZ3JhcGggMTQsCmNoYW5nZSAiJmFtcDsmYW1wOyIgdG8gIiZhbXA7Ii48L3A+Cgo8cD5UaGVuLCByZXBsYWNlIHBhcmFncmFwaHMgMTUgYW5kIDE2IGFzIGZvbGxvd3M6PC9wPgoKPGJsb2NrcXVvdGU+CgogIDxwPk90aGVyd2lzZSB0YXJnZXQgc2VxdWVuY2VzIGFyZSBkZXRlcm1pbmVkICJhcyBpZiIgYnkKICBjYWxsaW5nIHRoZSBtZW1iZXJzIDx0dD5mYWxzZW5hbWUoKTwvdHQ+IGFuZAogIDx0dD50cnVlbmFtZSgpPC90dD4gb2YgdGhlIGZhY2V0IG9idGFpbmVkIGJ5CiAgPHR0PnVzZV9mYWNldCZsdDtudW1wdW5jdCZsdDtjaGFyVCZndDsmbmJzcDsmZ3Q7KHN0ci5nZXRsb2MoKSk8L3R0Pi4gIAogIFN1Y2Nlc3NpdmUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgPHR0PltpbixlbmQpPC90dD4gKHNlZQogIFtsaWIuc2VxdWVuY2UucmVxbXRzXSkgYXJlIG9idGFpbmVkIGFuZCBtYXRjaGVkIGFnYWluc3QKICBjb3JyZXNwb25kaW5nIHBvc2l0aW9ucyBpbiB0aGUgdGFyZ2V0IHNlcXVlbmNlcyBvbmx5IGFzIG5lY2Vzc2FyeSB0bwogIGlkZW50aWZ5IGEgdW5pcXVlIG1hdGNoLiBUaGUgaW5wdXQgaXRlcmF0b3IgPHR0PmluPC90dD4gaXMKICBjb21wYXJlZCB0byA8dHQ+ZW5kPC90dD4gb25seSB3aGVuIG5lY2Vzc2FyeSB0byBvYnRhaW4gYQogIGNoYXJhY3Rlci4gSWYgYW5kIG9ubHkgaWYgYSB0YXJnZXQgc2VxdWVuY2UgaXMgdW5pcXVlbHkgbWF0Y2hlZCwKICA8dHQ+dmFsPC90dD4gaXMgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlLjwvcD4KCjwvYmxvY2txdW90ZT4KCjxibG9ja3F1b3RlPgogIDxwPlRoZSA8dHQ+aW48L3R0PiBpdGVyYXRvciBpcyBhbHdheXMgbGVmdCBwb2ludGluZyBvbmUgcG9zaXRpb24gYmV5b25kIHRoZSBsYXN0IGNoYXJhY3RlcgogIHN1Y2Nlc3NmdWxseSBtYXRjaGVkLiBJZiA8dHQ+dmFsPC90dD4gaXMgc2V0LCB0aGVuIGVyciBpcyBzZXQgdG8gPHR0PnN0ci5nb29kYml0PC90dD47IG9yIHRvCiAgPHR0PnN0ci5lb2ZiaXQ8L3R0PiBpZiwgd2hlbiBzZWVraW5nIGFub3RoZXIgY2hhcmFjdGVyIHRvIG1hdGNoLCBpdCBpcyBmb3VuZCB0aGF0CiAgPHR0Pihpbj09ZW5kKTwvdHQ+LiBJZiA8dHQ+dmFsPC90dD4gaXMgbm90IHNldCwgdGhlbiA8aT5lcnI8L2k+IGlzIHNldCB0byA8dHQ+c3RyLmZhaWxiaXQ8L3R0Pjsgb3IgdG8KICA8dHQ+KHN0ci5mYWlsYml0fHN0ci5lb2ZiaXQpPC90dD5pZgogIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlIHdhcyB0aGF0IDx0dD4oaW49PWVuZCk8L3R0Pi4gW0V4YW1wbGU6IGZvciB0YXJnZXRzCiAgPHR0PnRydWU8L3R0PjoiYSIgYW5kIDx0dD5mYWxzZTwvdHQ+OiJhYmIiLCB0aGUgaW5wdXQgc2VxdWVuY2UgImEiIHlpZWxkcwogIDx0dD52YWw9PXRydWU8L3R0PiBhbmQgPHR0PmVycj09c3RyLmVvZmJpdDwvdHQ+OyB0aGUgaW5wdXQgc2VxdWVuY2UgImFiYyIgeWllbGRzCiAgPHR0PmVycj1zdHIuZmFpbGJpdDwvdHQ+LCB3aXRoIDx0dD5pbjwvdHQ+IGVuZGluZyBhdCB0aGUgJ2MnIGVsZW1lbnQuIEZvciB0YXJnZXRzCiAgPHR0PnRydWU8L3R0PjoiMSIKICBhbmQgPHR0PmZhbHNlPC90dD46IjAiLCB0aGUgaW5wdXQgc2VxdWVuY2UgIjEiIHlpZWxkcyA8dHQ+dmFsPT10cnVlPC90dD4KICBhbmQgPHR0PmVycj1zdHIuZ29vZGJpdDwvdHQ+LiBGb3IgZW1wdHkgdGFyZ2V0cyAoIiIpLCBhbnkgaW5wdXQgc2VxdWVuY2UgeWllbGRzCiAgPHR0PmVycj09c3RyLmZhaWxiaXQ8L3R0Pi4gLS1lbmQgZXhhbXBsZV08L3A+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxOCI+PC9hPjE4LiBHZXQoLi4uYm9vbCZhbXA7KSBvbWl0dGVkPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMi4xLjEgW2ZhY2V0Lm51bS5nZXQubWVtYmVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTmF0aGFuIE15ZXJzIDxiPkRhdGU6PC9iPiAxOTk4LTA4LTA2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmYWNldC5udW0uZ2V0Lm1lbWJlcnMiPmlzc3VlczwvYT4gaW4gW2ZhY2V0Lm51bS5nZXQubWVtYmVyc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkluIHRoZSBsaXN0IG9mIG51bV9nZXQmbHQ7Jmd0OyBub24tdmlydHVhbCBtZW1iZXJzIG9uIHBhZ2UgMjItMjMsIHRoZSBtZW1iZXIKdGhhdCBwYXJzZXMgYm9vbCB2YWx1ZXMgd2FzIG9taXR0ZWQgZnJvbSB0aGUgbGlzdCBvZiBkZWZpbml0aW9ucyBvZiBub24tdmlydHVhbAptZW1iZXJzLCB0aG91Z2ggaXQgaXMgbGlzdGVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFuZCB0aGUgY29ycmVzcG9uZGluZwp2aXJ0dWFsIGlzIGxpc3RlZCBldmVyeXdoZXJlIGFwcHJvcHJpYXRlLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgYXQgdGhlIGJlZ2lubmluZyBvZiAyMi4yLjIuMS4xIFtmYWNldC5udW0uZ2V0Lm1lbWJlcnNdCmFub3RoZXIgZ2V0IG1lbWJlciBmb3IgYm9vbCZhbXA7LCBjb3BpZWQgZnJvbSB0aGUgZW50cnkgaW4gCjIyLjIuMi4xIFtsb2NhbGUubnVtLmdldF0uPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE5Ij48L2E+MTkuICJOb2NvbnYiIGRlZmluaXRpb24gdG9vIHZhZ3VlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMS40IFtsb2NhbGUuY29kZWN2dF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTmF0aGFuIE15ZXJzIDxiPkRhdGU6PC9iPiAxOTk4LTA4LTA2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsb2NhbGUuY29kZWN2dCI+aXNzdWVzPC9hPiBpbiBbbG9jYWxlLmNvZGVjdnRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RHVwbGljYXRlIG9mOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTAiPjEwPC9hPjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSW4gdGhlIGRlZmluaXRpb25zIG9mIGNvZGVjdnQmbHQ7Jmd0Ozo6ZG9fb3V0IGFuZCBkb19pbiwgdGhleSBhcmUKc3BlY2lmaWVkIHRvIHJldHVybiBub2NvbnYgaWYgIm5vIGNvbnZlcnNpb24gaXMKbmVlZGVkIi4gVGhpcyBkZWZpbml0aW9uIGlzIHRvbyB2YWd1ZSwgYW5kIGRvZXMgbm90IHNheQpub3JtYXRpdmVseSB3aGF0IGlzIGRvbmUgd2l0aCB0aGUgYnVmZmVycy4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgZW50cnkgZm9yIG5vY29udiBpbiB0aGUgdGFibGUgdW5kZXIgcGFyYWdyYXBoIDQgaW4gc2VjdGlvbiAKMjIuMi4xLjQuMiBbbG9jYWxlLmNvZGVjdnQudmlydHVhbHNdIHRvIHJlYWQ6CjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+PHR0Pm5vY29udjwvdHQ+OiA8dHQ+aW50ZXJuVDwvdHQ+IGFuZCA8dHQ+ZXh0ZXJuVDwvdHQ+IGFyZSB0aGUgc2FtZSB0eXBlLAogIGFuZCBpbnB1dCBzZXF1ZW5jZSBpcyBpZGVudGljYWwgdG8gY29udmVydGVkIHNlcXVlbmNlLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5DaGFuZ2UgdGhlIE5vdGUgaW4gcGFyYWdyYXBoIDIgdG8gbm9ybWF0aXZlIHRleHQgYXMgZm9sbG93czo8L3A+CjxibG9ja3F1b3RlPgogIDxwPklmIHJldHVybnMgPHR0Pm5vY29udjwvdHQ+LCA8dHQ+aW50ZXJuVDwvdHQ+IGFuZCA8dHQ+ZXh0ZXJuVDwvdHQ+IGFyZSB0aGUKICBzYW1lIHR5cGUgYW5kIHRoZSBjb252ZXJ0ZWQgc2VxdWVuY2UgaXMgaWRlbnRpY2FsIHRvIHRoZSBpbnB1dCBzZXF1ZW5jZSA8dHQ+W2Zyb20sZnJvbV9uZXh0KTwvdHQ+LgogIDx0dD50b19uZXh0PC90dD4gaXMgc2V0IGVxdWFsIHRvIDx0dD50bzwvdHQ+LCB0aGUgdmFsdWUgb2YgPHR0PnN0YXRlPC90dD4gaXMKICB1bmNoYW5nZWQsIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byB0aGUgdmFsdWVzIGluIDx0dD5bdG8sIHRvX2xpbWl0KTwvdHQ+LjwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIwIj48L2E+MjAuIFRob3VzYW5kc19zZXAgcmV0dXJucyB3cm9uZyB0eXBlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMy4xLjIgW2ZhY2V0Lm51bXB1bmN0LnZpcnR1YWxzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOYXRoYW4gTXllcnMgPGI+RGF0ZTo8L2I+IDE5OTgtMDgtMDY8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIHN5bm9wc2lzIGZvciBudW1wdW5jdCZsdDsmZ3Q7Ojpkb190aG91c2FuZHNfc2VwLCBhbmQgdGhlCmRlZmluaXRpb24gb2YgbnVtcHVuY3QmbHQ7Jmd0Ozo6dGhvdXNhbmRzX3NlcCB3aGljaCBjYWxscyBpdCwgc3BlY2lmeQp0aGF0IGl0IHJldHVybnMgYSB2YWx1ZSBvZiB0eXBlIGNoYXJfdHlwZS4gSGVyZSBpdCBpcyBlcnJvbmVvdXNseQpkZXNjcmliZWQgYXMgcmV0dXJuaW5nIGEgInN0cmluZ190eXBlIi4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMi4zLjEuMiBbZmFjZXQubnVtcHVuY3QudmlydHVhbHNdLCBhYm92ZSBwYXJhZ3JhcGggMiwgY2hhbmdlIAoic3RyaW5nX3R5cGUiIHRvICJjaGFyX3R5cGUiLiA8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjEiPjwvYT4yMS4gQ29kZWN2dF9ieW5hbWUmbHQ7Jmd0OyBpbnN0YW50aWF0aW9uczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4xLjEuMS4xIFtsb2NhbGUuY2F0ZWdvcnldIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5hdGhhbiBNeWVycyA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0wNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlLmNhdGVnb3J5Ij5pc3N1ZXM8L2E+IGluIFtsb2NhbGUuY2F0ZWdvcnldLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5JbiB0aGUgc2Vjb25kIHRhYmxlIGluIHRoZSBzZWN0aW9uLCBjYXB0aW9uZWQgIlJlcXVpcmVkCmluc3RhbnRpYXRpb25zIiwgdGhlIGluc3RhbnRpYXRpb25zIGZvciBjb2RlY3Z0X2J5bmFtZSZsdDsmZ3Q7CmhhdmUgYmVlbiBvbWl0dGVkLiBUaGVzZSBhcmUgbmVjZXNzYXJ5IHRvIGFsbG93IHVzZXJzIHRvIGNvbnN0cnVjdCBhCmxvY2FsZSBieSBuYW1lIGZyb20gZmFjZXRzLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgaW4gMjIuMS4xLjEuMSBbbG9jYWxlLmNhdGVnb3J5XSB0byB0aGUgdGFibGUgY2FwdGlvbmVkCiJSZXF1aXJlZCBpbnN0YW50aWF0aW9ucyIsIGluIHRoZSBjYXRlZ29yeSAiY3R5cGUiCnRoZSBsaW5lcyA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPmNvZGVjdnRfYnluYW1lJmx0O2NoYXIsY2hhcixtYnN0YXRlX3QmZ3Q7LApjb2RlY3Z0X2J5bmFtZSZsdDt3Y2hhcl90LGNoYXIsbWJzdGF0ZV90Jmd0OyA8L3ByZT4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIyIj48L2E+MjIuIE1lbWJlciBvcGVuIHZzLiBmbGFnczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy44LjEuOSBbaWZzdHJlYW0ubWVtYmVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTmF0aGFuIE15ZXJzIDxiPkRhdGU6PC9iPiAxOTk4LTA4LTA2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpZnN0cmVhbS5tZW1iZXJzIj5pc3N1ZXM8L2E+IGluIFtpZnN0cmVhbS5tZW1iZXJzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIGRlc2NyaXB0aW9uIG9mIGJhc2ljX2lzdHJlYW0mbHQ7Jmd0Ozo6b3BlbiBsZWF2ZXMgdW5hbnN3ZXJlZCBxdWVzdGlvbnMgYWJvdXQgaG93IGl0CnJlc3BvbmRzIHRvIG9yIGNoYW5nZXMgZmxhZ3MgaW4gdGhlIGVycm9yIHN0YXR1cyBmb3IgdGhlIHN0cmVhbS4gQSBzdHJpY3QgcmVhZGluZwppbmRpY2F0ZXMgdGhhdCBpdCBpZ25vcmVzIHRoZSBiaXRzIGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlbSwgd2hpY2ggY29uZnVzZXMgdXNlcnMgd2hvIGRvCm5vdCBleHBlY3QgZW9mYml0IGFuZCBmYWlsYml0IHRvIHJlbWFpbiBzZXQgYWZ0ZXIgYSBzdWNjZXNzZnVsIG9wZW4uIFRoZXJlIGFyZSB0aHJlZQpyZWFzb25hYmxlIHJlc29sdXRpb25zOiAxKSBzdGF0dXMgcXVvIDIpIGZhaWwgaWYgZmFpbCgpLCBpZ25vcmUgZW9mYml0IDMpIGNsZWFyIGZhaWxiaXQKYW5kIGVvZmJpdCBvbiBjYWxsIHRvIG9wZW4oKS4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjcuOC4xLjkgW2lmc3RyZWFtLm1lbWJlcnNdIHBhcmFncmFwaCAzLCA8aT5hbmQ8L2k+IGluIDI3LjguMS4xMyBbb2ZzdHJlYW0ubWVtYmVyc10gcGFyYWdyYXBoIDMsIHVuZGVyIG9wZW4oKSBlZmZlY3RzLCBhZGQgYSBmb290bm90ZToKPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+QSBzdWNjZXNzZnVsIG9wZW4gZG9lcyBub3QgY2hhbmdlIHRoZSBlcnJvciBzdGF0ZS48L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhpcyBtYXkgc2VlbSBzdXJwcmlzaW5nIHRvIHNvbWUgdXNlcnMsIGJ1dCBpdCdzIGp1c3QgYW4gaW5zdGFuY2UKb2YgYSBnZW5lcmFsIHJ1bGU6IGVycm9yIGZsYWdzIGFyZSBuZXZlciBjbGVhcmVkIGJ5IHRoZQppbXBsZW1lbnRhdGlvbi4gVGhlIG9ubHkgd2F5IGVycm9yIGZsYWdzIGFyZSBhcmUgZXZlciBjbGVhcmVkIGlzIGlmCnRoZSB1c2VyIGV4cGxpY2l0bHkgY2xlYXJzIHRoZW0gYnkgaGFuZC48L3A+Cgo8cD5UaGUgTFdHIGJlbGlldmVkIHRoYXQgcHJlc2VydmluZyB0aGlzIGdlbmVyYWwgcnVsZSB3YXMKaW1wb3J0YW50IGVub3VnaCBzbyB0aGF0IGFuIGV4Y2VwdGlvbiBzaG91bGRuJ3QgYmUgbWFkZSBqdXN0IGZvciB0aGlzCm9uZSBjYXNlLiAgVGhlIHJlc29sdXRpb24gb2YgdGhpcyBpc3N1ZSBjbGFyaWZpZXMgd2hhdCB0aGUgTFdHCmJlbGlldmVzIHRvIGhhdmUgYmVlbiB0aGUgb3JpZ2luYWwgaW50ZW50LjwvcD4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjQiPjwvYT4yNC4gImRvX2NvbnZlcnQiIGRvZXNuJ3QgZXhpc3Q8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMi4xLjQgW2xvY2FsZS5jb2RlY3Z0XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOYXRoYW4gTXllcnMgPGI+RGF0ZTo8L2I+IDE5OTgtMDgtMDY8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xvY2FsZS5jb2RlY3Z0Ij5pc3N1ZXM8L2E+IGluIFtsb2NhbGUuY29kZWN2dF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EdXBsaWNhdGUgb2Y6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3MiI+NzI8L2E+PC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBkZXNjcmlwdGlvbiBvZiBjb2RlY3Z0Jmx0OyZndDs6OmRvX291dCBhbmQgZG9faW4gbWVudGlvbnMgYQpzeW1ib2wgImRvX2NvbnZlcnQiIHdoaWNoIGlzIG5vdCBkZWZpbmVkIGluIHRoZQpzdGFuZGFyZC4gVGhpcyBpcyBhIGxlZnRvdmVyIGZyb20gYW4gZWRpdCwgYW5kIHNob3VsZCBiZSAiZG9faW4KYW5kIGRvX291dCIuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuMS40IFtsb2NhbGUuY29kZWN2dF0sIHBhcmFncmFwaCAzLCBjaGFuZ2UKImRvX2NvbnZlcnQiIHRvICJkb19pbiBvciBkb19vdXQiLiBBbHNvLCBpbiAyMi4yLjEuNC4yIFtsb2NhbGUuY29kZWN2dC52aXJ0dWFsc10sIGNoYW5nZSAiZG9fY29udmVydCgpIiB0byAiZG9faW4Kb3IgZG9fb3V0Ii4gPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI1Ij48L2E+MjUuIFN0cmluZyBvcGVyYXRvciZsdDsmbHQ7IHVzZXMgd2lkdGgoKSB2YWx1ZSB3cm9uZzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMS4zLjguOSBbc3RyaW5nLmlvXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOYXRoYW4gTXllcnMgPGI+RGF0ZTo8L2I+IDE5OTgtMDgtMDY8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3N0cmluZy5pbyI+aXNzdWVzPC9hPiBpbiBbc3RyaW5nLmlvXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkR1cGxpY2F0ZSBvZjo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzY3Ij42NzwvYT48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SW4gdGhlIGRlc2NyaXB0aW9uIG9mIG9wZXJhdG9yJmx0OyZsdDsgYXBwbGllZCB0byBzdHJpbmdzLCB0aGUgc3RhbmRhcmQgc2F5cyB0aGF0IHVzZXMKdGhlIHNtYWxsZXIgb2Ygb3Mud2lkdGgoKSBhbmQgc3RyLnNpemUoKSwgdG8gcGFkICJhcyBkZXNjcmliZWQgaW4gc3RhZ2UgMyIKZWxzZXdoZXJlOyBidXQgdGhpcyBpcyBpbmNvbnNpc3RlbnQsIGFzIHRoaXMgYWxsb3dzIG5vIHBvc3NpYmlsaXR5IG9mIHNwYWNlIGZvciBwYWRkaW5nLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjEuMy44LjkgW3N0cmluZy5pb10gIHBhcmFncmFwaCA0IGZyb206PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyAiLi4uIHdoZXJlIDx0dD5uPC90dD4gaXMgdGhlIHNtYWxsZXIgb2YgPHR0Pm9zLndpZHRoKCk8L3R0PiBhbmQgPHR0PnN0ci5zaXplKCk8L3R0PjsKLi4uIjxicj4KPGJyPgp0bzogPGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyAiLi4uIHdoZXJlIDx0dD5uPC90dD4gaXMgdGhlIGxhcmdlciBvZiA8dHQ+b3Mud2lkdGgoKTwvdHQ+IGFuZCA8dHQ+c3RyLnNpemUoKTwvdHQ+OwouLi4iPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI2Ij48L2E+MjYuIEJhZCBzZW50cnkgZXhhbXBsZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjEuMS4zIFtpc3RyZWFtOjpzZW50cnldIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5hdGhhbiBNeWVycyA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0wNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaXN0cmVhbTo6c2VudHJ5Ij5pc3N1ZXM8L2E+IGluIFtpc3RyZWFtOjpzZW50cnldLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5JbiBwYXJhZ3JhcGggNiwgdGhlIGNvZGUgaW4gdGhlIGV4YW1wbGU6IDwvcD4KCjxwcmU+ICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyA9IGNoYXJfdHJhaXRzJmx0O2NoYXJUJmd0OyAmZ3Q7CiAgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7OjpzZW50cnkoCiAgICAgICAgICAgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgaXMsIGJvb2wgbm9za2lwd3MgPSBmYWxzZSkgewogICAgICAuLi4KICAgICAgaW50X3R5cGUgYzsKICAgICAgdHlwZWRlZiBjdHlwZSZsdDtjaGFyVCZndDsgY3R5cGVfdHlwZTsKICAgICAgY29uc3QgY3R5cGVfdHlwZSZhbXA7IGN0eXBlID0gdXNlX2ZhY2V0Jmx0O2N0eXBlX3R5cGUmZ3Q7KGlzLmdldGxvYygpKTsKICAgICAgd2hpbGUgKChjID0gaXMucmRidWYoKS0mZ3Q7c25leHRjKCkpICE9IHRyYWl0czo6ZW9mKCkpIHsKICAgICAgICBpZiAoY3R5cGUuaXMoY3R5cGUuc3BhY2UsYyk9PTApIHsKICAgICAgICAgIGlzLnJkYnVmKCktJmd0O3NwdXRiYWNrYyAoYyk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgLi4uCiAgIH08L3ByZT4KCjxwPmZhaWxzIHRvIGRlbW9uc3RyYXRlIGNvcnJlY3QgdXNlIG9mIHRoZSBmYWNpbGl0aWVzIGRlc2NyaWJlZC4gSW4KcGFydGljdWxhciwgaXQgZmFpbHMgdG8gdXNlIHRyYWl0cyBvcGVyYXRvcnMsIGFuZCBzcGVjaWZpZXMgaW5jb3JyZWN0CnNlbWFudGljcy4gKEUuZy4gaXQgc3BlY2lmaWVzIHNraXBwaW5nIG92ZXIgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUKc2VxdWVuY2Ugd2l0aG91dCBleGFtaW5pbmcgaXQuKSA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZW1vdmUgdGhlIGV4YW1wbGUgYWJvdmUgZnJvbSAyNy42LjEuMS4zIFtpc3RyZWFtOjpzZW50cnldCnBhcmFncmFwaCA2LjwvcD4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIG9yaWdpbmFsbHkgcHJvcG9zZWQgcmVwbGFjZW1lbnQgY29kZSBmb3IgdGhlIGV4YW1wbGUgd2FzIG5vdApjb3JyZWN0LiBUaGUgTFdHIHRyaWVkIGluIEtvbmEgYW5kIGFnYWluIGluIFRva3lvIHRvIGNvcnJlY3QgaXQKd2l0aG91dCBzdWNjZXNzLiBJbiBUb2t5bywgYW4gaW1wbGVtZW50b3IgcmVwb3J0ZWQgdGhhdCBhY3R1YWwgd29ya2luZwpjb2RlIHJhbiBvdmVyIG9uZSBwYWdlIGluIGxlbmd0aCBhbmQgd2FzIHF1aXRlIGNvbXBsaWNhdGVkLiBUaGUgTFdHCmRlY2lkZWQgdGhhdCBpdCB3b3VsZCBiZSBjb3VudGVyLXByb2R1Y3RpdmUgdG8gaW5jbHVkZSBzdWNoIGEgbGVuZ3RoeQpleGFtcGxlLCB3aGljaCBtaWdodCB3ZWxsIHN0aWxsIGNvbnRhaW4gZXJyb3JzLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyNyI+PC9hPjI3LiBTdHJpbmc6OmVyYXNlKHJhbmdlKSB5aWVsZHMgd3JvbmcgaXRlcmF0b3I8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjEuMy42LjUgW3N0cmluZzo6ZXJhc2VdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5hdGhhbiBNeWVycyA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0wNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjc3RyaW5nOjplcmFzZSI+aXNzdWVzPC9hPiBpbiBbc3RyaW5nOjplcmFzZV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBzdHJpbmc6OmVyYXNlKGl0ZXJhdG9yIGZpcnN0LCBpdGVyYXRvciBsYXN0KSBpcyBzcGVjaWZpZWQgdG8gcmV0dXJuIGFuIGVsZW1lbnQgb25lCnBsYWNlIGJleW9uZCB0aGUgbmV4dCBlbGVtZW50IGFmdGVyIHRoZSBsYXN0IG9uZSBlcmFzZWQuIEUuZy4gZm9yIHRoZSBzdHJpbmcKImFiY2RlIiwgZXJhc2luZyB0aGUgcmFuZ2UgWydiJy4uJ2QnKSB3b3VsZCB5aWVsZCBhbiBpdGVyYXRvciBmb3IgZWxlbWVudCAnZScsCndoaWxlICdkJyBoYXMgbm90IGJlZW4gZXJhc2VkLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMS4zLjYuNSBbc3RyaW5nOjplcmFzZV0sIHBhcmFncmFwaCAxMCwgY2hhbmdlOiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5SZXR1cm5zOiBhbiBpdGVyYXRvciB3aGljaCBwb2ludHMgdG8gdGhlIGVsZW1lbnQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIF9sYXN0XyBwcmlvciB0bwogIHRoZSBlbGVtZW50IGJlaW5nIGVyYXNlZC4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50byByZWFkIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPlJldHVybnM6IGFuIGl0ZXJhdG9yIHdoaWNoIHBvaW50cyB0byB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IF9sYXN0XyBwcmlvciB0byB0aGUKICBvdGhlciBlbGVtZW50cyBiZWluZyBlcmFzZWQuIDwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI4Ij48L2E+MjguIEN0eXBlJmx0O2NoYXImZ3Q7aXMgYW1iaWd1b3VzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMS4zLjIgW2ZhY2V0LmN0eXBlLmNoYXIubWVtYmVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTmF0aGFuIE15ZXJzIDxiPkRhdGU6PC9iPiAxOTk4LTA4LTA2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmYWNldC5jdHlwZS5jaGFyLm1lbWJlcnMiPmlzc3VlczwvYT4gaW4gW2ZhY2V0LmN0eXBlLmNoYXIubWVtYmVyc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EdXBsaWNhdGUgb2Y6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyMzYiPjIzNjwvYT48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB2ZWN0b3IgZm9ybSBvZiBjdHlwZSZsdDtjaGFyJmd0Ozo6aXMgY2FuIGJlIGludGVycHJldGVkIHRvIG1lYW4Kc29tZXRoaW5nIHZlcnkgZGlmZmVyZW50IGZyb20gd2hhdCB3YXMgaW50ZW5kZWQuIFBhcmFncmFwaCA0IHNheXMgPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+RWZmZWN0czogVGhlIHNlY29uZCBmb3JtLCBmb3IgYWxsICpwIGluIHRoZSByYW5nZSBbbG93LCBoaWdoKSwgYXNzaWducyB2ZWNbcC1sb3ddIHRvCiAgdGFibGUoKVsodW5zaWduZWQgY2hhcikqcF0uIDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+VGhpcyBpcyBpbnRlbmRlZCB0byBjb3B5IHRoZSB2YWx1ZSBpbmRleGVkIGZyb20gdGFibGUoKVtdIGludG8gdGhlIHBsYWNlIGlkZW50aWZpZWQgaW4KdmVjW10uIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyMi4yLjEuMy4yIFtmYWNldC5jdHlwZS5jaGFyLm1lbWJlcnNdLCBwYXJhZ3JhcGggNCwgdG8gcmVhZCA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5FZmZlY3RzOiBUaGUgc2Vjb25kIGZvcm0sIGZvciBhbGwgKnAgaW4gdGhlIHJhbmdlIFtsb3csIGhpZ2gpLCBhc3NpZ25zIGludG8gdmVjW3AtbG93XQogIHRoZSB2YWx1ZSB0YWJsZSgpWyh1bnNpZ25lZCBjaGFyKSpwXS4gPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjkiPjwvYT4yOS4gSW9zX2Jhc2U6OmluaXQgZG9lc24ndCBleGlzdDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy4zLjEgW25hcnJvdy5zdHJlYW0ub2JqZWN0c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTmF0aGFuIE15ZXJzIDxiPkRhdGU6PC9iPiAxOTk4LTA4LTA2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNuYXJyb3cuc3RyZWFtLm9iamVjdHMiPmlzc3VlczwvYT4gaW4gW25hcnJvdy5zdHJlYW0ub2JqZWN0c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlNlY3Rpb25zIDI3LjMuMSBbbmFycm93LnN0cmVhbS5vYmplY3RzXSBhbmQgMjcuMy4yIFt3aWRlLnN0cmVhbS5vYmplY3RzXSBtZW50aW9uCmEgZnVuY3Rpb24gaW9zX2Jhc2U6OmluaXQsIHdoaWNoIGlzIG5vdCBkZWZpbmVkLiBQcm9iYWJseSB0aGV5IG1lYW4KYmFzaWNfaW9zJmx0OyZndDs6OmluaXQsIGRlZmluZWQgaW4gMjcuNC40LjEgW2Jhc2ljLmlvcy5jb25zXSwKcGFyYWdyYXBoIDMuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPltSMTI6IG1vZGlmaWVkIHRvIGluY2x1ZGUgcGFyYWdyYXBoIDUuXTwvcD4KCjxwPkluIDI3LjMuMSBbbmFycm93LnN0cmVhbS5vYmplY3RzXSBwYXJhZ3JhcGggMiBhbmQgNSwgY2hhbmdlIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPmlvc19iYXNlOjppbml0IDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+dG8gPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+YmFzaWNfaW9zJmx0O2NoYXImZ3Q7Ojppbml0IDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+QWxzbywgbWFrZSBhIHNpbWlsYXIgY2hhbmdlIGluIDI3LjMuMiBbd2lkZS5zdHJlYW0ub2JqZWN0c10gZXhjZXB0IGl0CnNob3VsZCByZWFkIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPmJhc2ljX2lvcyZsdDt3Y2hhcl90Jmd0Ozo6aW5pdCA8L3A+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzMCI+PC9hPjMwLiBXcm9uZyBoZWFkZXIgZm9yIExDXyo8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMS4xLjEuMSBbbG9jYWxlLmNhdGVnb3J5XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOYXRoYW4gTXllcnMgPGI+RGF0ZTo8L2I+IDE5OTgtMDgtMDY8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xvY2FsZS5jYXRlZ29yeSI+aXNzdWVzPC9hPiBpbiBbbG9jYWxlLmNhdGVnb3J5XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+UGFyYWdyYXBoIDIgaW1wbGllcyB0aGF0IHRoZSBDIG1hY3JvcyBMQ19DVFlQRSBldGMuIGFyZSBkZWZpbmVkIGluICZsdDtjY3R5cGUmZ3Q7LAp3aGVyZSB0aGV5IGFyZSBpbiBmYWN0IGRlZmluZWQgZWxzZXdoZXJlIHRvIGFwcGVhciBpbiAmbHQ7Y2xvY2FsZSZndDsuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjEuMS4xLjEgW2xvY2FsZS5jYXRlZ29yeV0sIHBhcmFncmFwaCAyLCBjaGFuZ2UKIiZsdDtjY3R5cGUmZ3Q7IiB0byByZWFkICImbHQ7Y2xvY2FsZSZndDsiLiA8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzEiPjwvYT4zMS4gSW1tdXRhYmxlIGxvY2FsZSB2YWx1ZXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMS4xIFtsb2NhbGVdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5hdGhhbiBNeWVycyA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0wNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlIj5pc3N1ZXM8L2E+IGluIFtsb2NhbGVdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RHVwbGljYXRlIG9mOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzc4Ij4zNzg8L2E+PC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlBhcmFncmFwaCA2LCBzYXlzICJBbiBpbnN0YW5jZSBvZiA8dHQ+bG9jYWxlPC90dD4gaXMKPGk+aW1tdXRhYmxlPC9pPjsgb25jZSBhIGZhY2V0IHJlZmVyZW5jZSBpcyBvYnRhaW5lZCBmcm9tIGl0LAouLi4iLiBUaGlzIGhhcyBjYXVzZWQgc29tZSBjb25mdXNpb24sIGJlY2F1c2UgbG9jYWxlIHZhcmlhYmxlcwphcmUgbWFuaWZlc3RseSBhc3NpZ25hYmxlLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4xLjEgW2xvY2FsZV0gcmVwbGFjZSBwYXJhZ3JhcGggNjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkFuIGluc3RhbmNlIG9mIDx0dD5sb2NhbGU8L3R0PiBpcyBpbW11dGFibGU7IG9uY2UgYSBmYWNldAogIHJlZmVyZW5jZSBpcyBvYnRhaW5lZCBmcm9tIGl0LCB0aGF0IHJlZmVyZW5jZSByZW1haW5zIHVzYWJsZSBhcyBsb25nCiAgYXMgdGhlIGxvY2FsZSB2YWx1ZSBpdHNlbGYgZXhpc3RzLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+d2l0aDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPk9uY2UgYSBmYWNldCByZWZlcmVuY2UgaXMgb2J0YWluZWQgZnJvbSBhIGxvY2FsZSBvYmplY3QgYnkKICBjYWxsaW5nIHVzZV9mYWNldCZsdDsmZ3Q7LCB0aGF0IHJlZmVyZW5jZSByZW1haW5zIHVzYWJsZSwgYW5kIHRoZQogIHJlc3VsdHMgZnJvbSBtZW1iZXIgZnVuY3Rpb25zIG9mIGl0IG1heSBiZSBjYWNoZWQgYW5kIHJlLXVzZWQsIGFzCiAgbG9uZyBhcyBzb21lIGxvY2FsZSBvYmplY3QgcmVmZXJzIHRvIHRoYXQgZmFjZXQuPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzIiPjwvYT4zMi4gUGJhY2tmYWlsIGRlc2NyaXB0aW9uIGluY29uc2lzdGVudDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy41LjIuNC40IFtzdHJlYW1idWYudmlydC5wYmFja10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTmF0aGFuIE15ZXJzIDxiPkRhdGU6PC9iPiAxOTk4LTA4LTA2PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcmVxdWlyZWQgc3RhdGUgYmVmb3JlIGNhbGxpbmcgdmlydHVhbCBtZW1iZXIKYmFzaWNfc3RyZWFtYnVmJmx0OyZndDs6OnBiYWNrZmFpbCByZXF1aXJlbWVudHMgaXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIGNvbmRpdGlvbnMKZGVzY3JpYmVkIGluIDI3LjUuMi4yLjQgW2xpYi5zdHJlYW1idWYucHViLnBiYWNrXSB3aGVyZSBtZW1iZXIgc3B1dGJhY2tjIGNhbGxzIGl0LgpTcGVjaWZpY2FsbHksIHRoZSBsYXR0ZXIgc2F5cyBpdCBjYWxscyBwYmFja2ZhaWwgaWY6IDwvcD4KCjxwPiZuYnNwOyZuYnNwOyZuYnNwOyB0cmFpdHM6OmVxKGMsZ3B0cigpWy0xXSkgaXMgZmFsc2UgPC9wPgoKPHA+d2hlcmUgcGJhY2tmYWlsIGNsYWltcyB0byByZXF1aXJlOiA8L3A+Cgo8cD4mbmJzcDsmbmJzcDsmbmJzcDsgdHJhaXRzOjplcSgqZ3B0cigpLHRyYWl0czo6dG9fY2hhcl90eXBlKGMpKSByZXR1cm5zIGZhbHNlIDwvcD4KCjxwPkl0IGFwcGVhcnMgdGhhdCB0aGUgcGJhY2tmYWlsIGRlc2NyaXB0aW9uIGlzIHdyb25nLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy41LjIuNC40IFtzdHJlYW1idWYudmlydC5wYmFja10sIHBhcmFncmFwaCAxLCBjaGFuZ2U6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+Ijx0dD50cmFpdHM6OmVxKCpncHRyKCksdHJhaXRzOjp0b19jaGFyX3R5cGUoIGMpKTwvdHQ+IjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+dG8gPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+Ijx0dD50cmFpdHM6OmVxKHRyYWl0czo6dG9fY2hhcl90eXBlKGMpLGdwdHIoKVstMV0pPC90dD4iCiAgPC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPk5vdGUgZGVsaWJlcmF0ZSByZW9yZGVyaW5nIG9mIGFyZ3VtZW50cyBmb3IgY2xhcml0eSBpbiBhZGRpdGlvbiB0byB0aGUgY29ycmVjdGlvbiBvZgp0aGUgYXJndW1lbnQgdmFsdWUuPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjMzIj48L2E+MzMuIENvZGVjdnQmbHQ7Jmd0OyBtZW50aW9ucyBmcm9tX3R5cGU8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMi4xLjQgW2xvY2FsZS5jb2RlY3Z0XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOYXRoYW4gTXllcnMgPGI+RGF0ZTo8L2I+IDE5OTgtMDgtMDY8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xvY2FsZS5jb2RlY3Z0Ij5pc3N1ZXM8L2E+IGluIFtsb2NhbGUuY29kZWN2dF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EdXBsaWNhdGUgb2Y6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0MyI+NDM8L2E+PC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkluIHRoZSB0YWJsZSBkZWZpbmluZyB0aGUgcmVzdWx0cyBmcm9tIGRvX291dCBhbmQgZG9faW4sIHRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUKcmVzdWx0IDxpPmVycm9yPC9pPiBzYXlzIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPmVuY291bnRlcmVkIGEgZnJvbV90eXBlIGNoYXJhY3RlciBpdCBjb3VsZCBub3QgY29udmVydCA8L3A+CjwvYmxvY2txdW90ZT4KCjxwPmJ1dCBmcm9tX3R5cGUgaXMgbm90IGRlZmluZWQuIFRoaXMgY2xlYXJseSBpcyBpbnRlbmRlZCB0byBiZSBhbiBleHRlcm5UIGZvciBkb19pbiwgb3IKYW4gaW50ZXJuVCBmb3IgZG9fb3V0LiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4yLjEuNC4yIFtsb2NhbGUuY29kZWN2dC52aXJ0dWFsc10gcGFyYWdyYXBoIDQsIHJlcGxhY2UgdGhlIGRlZmluaXRpb24KaW4gdGhlIHRhYmxlIGZvciB0aGUgY2FzZSBvZiBfZXJyb3JfIHdpdGggPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+ZW5jb3VudGVyZWQgYSBjaGFyYWN0ZXIgaW4gPHR0Pltmcm9tLGZyb21fZW5kKTwvdHQ+IHRoYXQgaXQgY291bGQgbm90IGNvbnZlcnQuIDwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM0Ij48L2E+MzQuIFRydWUvZmFsc2VuYW1lKCkgbm90IGluIGN0eXBlJmx0OyZndDs8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMi4yLjIuMiBbZmFjZXQubnVtLnB1dC52aXJ0dWFsc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTmF0aGFuIE15ZXJzIDxiPkRhdGU6PC9iPiAxOTk4LTA4LTA2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmYWNldC5udW0ucHV0LnZpcnR1YWxzIj5pc3N1ZXM8L2E+IGluIFtmYWNldC5udW0ucHV0LnZpcnR1YWxzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SW4gcGFyYWdyYXBoIDE5LCBFZmZlY3RzOiwgbWVtYmVycyB0cnVlbmFtZSgpIGFuZCBmYWxzZW5hbWUgYXJlIHVzZWQgZnJvbSBmYWNldApjdHlwZSZsdDtjaGFyVCZndDssIGJ1dCBpdCBoYXMgbm8gc3VjaCBtZW1iZXJzLiBOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIGEgcHJvYmxlbSBpbgoyMi4yLjIuMS4yLCBhZGRyZXNzZWQgaW4gKDQpLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4yLjIuMi4yIFtmYWNldC5udW0ucHV0LnZpcnR1YWxzXSwgcGFyYWdyYXBoIDE5LCBpbiB0aGUgRWZmZWN0czoKY2xhdXNlIGZvciBtZW1iZXIgcHV0KC4uLi4sIGJvb2wpLCByZXBsYWNlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUKc3RyaW5nX3R5cGUgdmFsdWUgcyBhcyBmb2xsb3dzOiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPmNvbnN0IG51bXB1bmN0JmFtcDsgbnAgPSB1c2VfZmFjZXQmbHQ7bnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7ICZndDsobG9jKTsKc3RyaW5nX3R5cGUgcyA9IHZhbCA/IG5wLnRydWVuYW1lKCkgOiBucC5mYWxzZW5hbWUoKTsgPC9wcmU+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzNSI+PC9hPjM1LiBObyBtYW5pcHVsYXRvciB1bml0YnVmIGluIHN5bm9wc2lzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjQgW2lvc3RyZWFtcy5iYXNlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOYXRoYW4gTXllcnMgPGI+RGF0ZTo8L2I+IDE5OTgtMDgtMDY8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SW4gMjcuNC41LjEgW2ZtdGZsYWdzLm1hbmlwXSwgd2UgaGF2ZSBhIGRlZmluaXRpb24gZm9yIGEgbWFuaXB1bGF0b3IKbmFtZWQgInVuaXRidWYiLiBVbmxpa2Ugb3RoZXIgbWFuaXB1bGF0b3JzLCBpdCdzIG5vdCBsaXN0ZWQKaW4gc3lub3BzaXMuIFNpbWlsYXJseSBmb3IgIm5vdW5pdGJ1ZiIuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCB0byB0aGUgc3lub3BzaXMgZm9yICZsdDtpb3MmZ3Q7IGluIDI3LjQgW2lvc3RyZWFtcy5iYXNlXSwgYWZ0ZXIKdGhlIGVudHJ5IGZvciAibm91cHBlcmNhc2UiLCB0aGUgcHJvdG90eXBlczogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5pb3NfYmFzZSZhbXA7IHVuaXRidWYoaW9zX2Jhc2UmYW1wOyBzdHIpOwppb3NfYmFzZSZhbXA7IG5vdW5pdGJ1Zihpb3NfYmFzZSZhbXA7IHN0cik7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzYiPjwvYT4zNi4gSXdvcmQgJmFtcDsgcHdvcmQgc3RvcmFnZSBsaWZldGltZSBvbWl0dGVkPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjQuMi41IFtpb3MuYmFzZS5zdG9yYWdlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOYXRoYW4gTXllcnMgPGI+RGF0ZTo8L2I+IDE5OTgtMDgtMDY8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lvcy5iYXNlLnN0b3JhZ2UiPmlzc3VlczwvYT4gaW4gW2lvcy5iYXNlLnN0b3JhZ2VdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5JbiB0aGUgZGVmaW5pdGlvbnMgZm9yIGlvc19iYXNlOjppd29yZCBhbmQgcHdvcmQsIHRoZSBsaWZldGltZSBvZiB0aGUgc3RvcmFnZSBpcwpzcGVjaWZpZWQgYmFkbHksIHNvIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gd2hpY2ggb25seSBrZWVwcyB0aGUgbGFzdCB2YWx1ZSBzdG9yZWQgYXBwZWFycwp0byBjb25mb3JtLiBJbiBwYXJ0aWN1bGFyLCBpdCBzYXlzOiA8L3A+Cgo8cD5UaGUgcmVmZXJlbmNlIHJldHVybmVkIG1heSBiZWNvbWUgaW52YWxpZCBhZnRlciBhbm90aGVyIGNhbGwgdG8gdGhlIG9iamVjdCdzIGl3b3JkCm1lbWJlciB3aXRoIGEgZGlmZmVyZW50IGluZGV4IC4uLiA8L3A+Cgo8cD5UaGlzIGlzIG5vdCBpZGxlIHNwZWN1bGF0aW9uOyBhdCBsZWFzdCBvbmUgaW1wbGVtZW50YXRpb24gd2FzIGRvbmUgdGhpcyB3YXkuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBpbiAyNy40LjIuNSBbaW9zLmJhc2Uuc3RvcmFnZV0sIGluIGJvdGggcGFyYWdyYXBoIDIgYW5kIGFsc28gaW4KcGFyYWdyYXBoIDQsIHJlcGxhY2UgdGhlIHNlbnRlbmNlOiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5UaGUgcmVmZXJlbmNlIHJldHVybmVkIG1heSBiZWNvbWUgaW52YWxpZCBhZnRlciBhbm90aGVyIGNhbGwgdG8gdGhlIG9iamVjdCdzIGl3b3JkCiAgW3B3b3JkXSBtZW1iZXIgd2l0aCBhIGRpZmZlcmVudCBpbmRleCwgYWZ0ZXIgYSBjYWxsIHRvIGl0cyBjb3B5Zm10IG1lbWJlciwgb3Igd2hlbiB0aGUKICBvYmplY3QgaXMgZGVzdHJveWVkLiA8L3A+CjwvYmxvY2txdW90ZT4KCjxwPndpdGg6IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPlRoZSByZWZlcmVuY2UgcmV0dXJuZWQgaXMgaW52YWxpZCBhZnRlciBhbnkgb3RoZXIgb3BlcmF0aW9ucyBvbiB0aGUgb2JqZWN0LiBIb3dldmVyLAogIHRoZSB2YWx1ZSBvZiB0aGUgc3RvcmFnZSByZWZlcnJlZCB0byBpcyByZXRhaW5lZCwgc28gdGhhdCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIGNvcHlmbXQsCiAgY2FsbGluZyBpd29yZCBbcHdvcmRdIHdpdGggdGhlIHNhbWUgaW5kZXggeWllbGRzIGFub3RoZXIgcmVmZXJlbmNlIHRvIHRoZSBzYW1lIHZhbHVlLiA8L3A+CjwvYmxvY2txdW90ZT4KCjxwPnN1YnN0aXR1dGluZyAiaXdvcmQiIG9yICJwd29yZCIgYXMgYXBwcm9wcmlhdGUuIDwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzNyI+PC9hPjM3LiBMZWZ0b3ZlciAiZ2xvYmFsIiByZWZlcmVuY2U8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMS4xIFtsb2NhbGVdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5hdGhhbiBNeWVycyA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0wNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlIj5pc3N1ZXM8L2E+IGluIFtsb2NhbGVdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5JbiB0aGUgb3ZlcnZpZXcgb2YgbG9jYWxlIHNlbWFudGljcywgcGFyYWdyYXBoIDQsIGlzIHRoZSBzZW50ZW5jZSA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5JZiBGYWNldCBpcyBub3QgcHJlc2VudCBpbiBhIGxvY2FsZSAob3IsIGZhaWxpbmcgdGhhdCwgaW4gdGhlIGdsb2JhbCBsb2NhbGUpLCBpdCB0aHJvd3MKICB0aGUgc3RhbmRhcmQgZXhjZXB0aW9uIGJhZF9jYXN0LiA8L3A+CjwvYmxvY2txdW90ZT4KCjxwPlRoaXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZGVmaW5pdGlvbiBvZiB1c2VfZmFjZXQmbHQ7Jmd0OywgYW5kIHJlcHJlc2VudHMgc2VtYW50aWNzCmZyb20gYW4gb2xkIGRyYWZ0LiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4xLjEgW2xvY2FsZV0sIHBhcmFncmFwaCA0LCBkZWxldGUgdGhlIHBhcmVudGhlc2l6ZWQKZXhwcmVzc2lvbiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD4ob3IsIGZhaWxpbmcgdGhhdCwgaW4gdGhlIGdsb2JhbCBsb2NhbGUpIDwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM4Ij48L2E+MzguIEZhY2V0IGRlZmluaXRpb24gaW5jb21wbGV0ZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4xLjIgW2xvY2FsZS5nbG9iYWwudGVtcGxhdGVzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOYXRoYW4gTXllcnMgPGI+RGF0ZTo8L2I+IDE5OTgtMDgtMDY8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SXQgaGFzIGJlZW4gbm90aWNlZCBieSBFc2EgUHVsa2tpbmVuIHRoYXQgdGhlIGRlZmluaXRpb24gb2YKImZhY2V0IiBpcyBpbmNvbXBsZXRlLiBJbiBwYXJ0aWN1bGFyLCBhIGNsYXNzIGRlcml2ZWQgZnJvbQphbm90aGVyIGZhY2V0LCBidXQgd2hpY2ggZG9lcyBub3QgZGVmaW5lIGEgbWVtYmVyIDxpPmlkPC9pPiwgY2Fubm90CnNhZmVseSBzZXJ2ZSBhcyB0aGUgYXJndW1lbnQgPGk+RjwvaT4gdG8gdXNlX2ZhY2V0Jmx0O0YmZ3Q7KGxvYyksCmJlY2F1c2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYSByZWZlcmVuY2UgdG8gdGhlIGZhY2V0IGluc3RhbmNlCnN0b3JlZCBpbiA8aT5sb2M8L2k+IGlzIHNhZmVseSBjb252ZXJ0aWJsZSB0byA8aT5GPC9pPi4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gdGhlIGRlZmluaXRpb24gb2Ygc3RkOjp1c2VfZmFjZXQmbHQ7Jmd0OygpLCByZXBsYWNlIHRoZSB0ZXh0IGluIHBhcmFncmFwaCAxIHdoaWNoCnJlYWRzOiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5HZXQgYSByZWZlcmVuY2UgdG8gYSBmYWNldCBvZiBhIGxvY2FsZS4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD53aXRoOiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5SZXF1aXJlczogPHR0PkZhY2V0PC90dD4gaXMgYSBmYWNldCBjbGFzcyB3aG9zZSBkZWZpbml0aW9uCiAgY29udGFpbnMgdGhlIHB1YmxpYyBzdGF0aWMgbWVtYmVyIDx0dD5pZDwvdHQ+IGFzIGRlZmluZWQgaW4gMjIuMS4xLjEuMiBbbG9jYWxlLmZhY2V0XS4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bCktvbmE6IHN0cmlrZSBhcyBvdmVyc3BlY2lmaWNhdGlvbiB0aGUgdGV4dCAiKG5vdCBpbmhlcml0cykiCmZyb20gdGhlIG9yaWdpbmFsIHJlc29sdXRpb24sIHdoaWNoIHJlYWQgIi4uLiB3aG9zZSBkZWZpbml0aW9uCmNvbnRhaW5zIChub3QgaW5oZXJpdHMpIHRoZSBwdWJsaWMgc3RhdGljIG1lbWJlcgo8dHQ+aWQ8L3R0Pi4uLiIKXTwvaT48L3A+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzOSI+PC9hPjM5LiBpc3RyZWFtYnVmX2l0ZXJhdG9yJmx0OyZndDs6Om9wZXJhdG9yKysoaW50KSBkZWZpbml0aW9uIGdhcmJsZWQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjQuNS4zLjQgW2lzdHJlYW1idWYuaXRlcmF0b3I6Om9wKytdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5hdGhhbiBNeWVycyA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0wNjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5Gb2xsb3dpbmcgdGhlIGRlZmluaXRpb24gb2YgaXN0cmVhbWJ1Zl9pdGVyYXRvciZsdDsmZ3Q7OjpvcGVyYXRvcisrKGludCkgaW4gcGFyYWdyYXBoCjMsIHRoZSBzdGFuZGFyZCBjb250YWlucyB0aHJlZSBsaW5lcyBvZiBnYXJiYWdlIHRleHQgbGVmdCBvdmVyIGZyb20gYSBwcmV2aW91cyBlZGl0LiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPmlzdHJlYW1idWZfaXRlcmF0b3ImbHQ7Y2hhclQsdHJhaXRzJmd0OyB0bXAgPSAqdGhpczsKc2J1Zl8tJmd0O3NidW1wYygpOwpyZXR1cm4odG1wKTsgPC9wcmU+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI0LjUuMy40IFtpc3RyZWFtYnVmLml0ZXJhdG9yOjpvcCsrXSwgZGVsZXRlIHRoZSB0aHJlZSBsaW5lcyBvZiBjb2RlIGF0IHRoZQplbmQgb2YgcGFyYWdyYXBoIDMuIDwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0MCI+PC9hPjQwLiBNZWFuaW5nbGVzcyBub3JtYXRpdmUgcGFyYWdyYXBoIGluIGV4YW1wbGVzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuOCBbZmFjZXRzLmV4YW1wbGVzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOYXRoYW4gTXllcnMgPGI+RGF0ZTo8L2I+IDE5OTgtMDgtMDY8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2ZhY2V0cy5leGFtcGxlcyI+aXNzdWVzPC9hPiBpbiBbZmFjZXRzLmV4YW1wbGVzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+UGFyYWdyYXBoIDMgb2YgdGhlIGxvY2FsZSBleGFtcGxlcyBpcyBhIGRlc2NyaXB0aW9uIG9mIHBhcnQgb2YgYW4KaW1wbGVtZW50YXRpb24gdGVjaG5pcXVlIHRoYXQgaGFzIGxvc3QgaXRzIHJlZmVyZW50LCBhbmQgZG9lc24ndCBtZWFuCmFueXRoaW5nLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5EZWxldGUgMjIuMi44IFtmYWNldHMuZXhhbXBsZXNdIHBhcmFncmFwaCAzIHdoaWNoIGJlZ2lucyAiVGhpcwppbml0aWFsaXphdGlvbi9pZGVudGlmaWNhdGlvbiBzeXN0ZW0gZGVwZW5kcy4uLiIsIG9yIChhdCB0aGUKZWRpdG9yJ3Mgb3B0aW9uKSByZXBsYWNlIGl0IHdpdGggYSBwbGFjZS1ob2xkZXIgdG8ga2VlcCB0aGUgcGFyYWdyYXBoCm51bWJlcmluZyB0aGUgc2FtZS4gPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQxIj48L2E+NDEuIElvc19iYXNlIG5lZWRzIGNsZWFyKCksIGV4Y2VwdGlvbnMoKTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy40LjIgW2lvcy5iYXNlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOYXRoYW4gTXllcnMgPGI+RGF0ZTo8L2I+IDE5OTgtMDgtMDY8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lvcy5iYXNlIj5pc3N1ZXM8L2E+IGluIFtpb3MuYmFzZV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EdXBsaWNhdGUgb2Y6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxNTciPjE1NzwvYT48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIGRlc2NyaXB0aW9uIG9mIGlvc19iYXNlOjppd29yZCgpIGFuZCBwd29yZCgpIGluIDI3LjQuMi40IFtpb3MubWVtYmVycy5zdGF0aWNdLCBzYXkgdGhhdCBpZiB0aGV5IGZhaWwsIHRoZXkgInNldCBiYWRiaXQsCndoaWNoIG1heSB0aHJvdyBhbiBleGNlcHRpb24iLiBIb3dldmVyLCBpb3NfYmFzZSBvZmZlcnMgbm8KaW50ZXJmYWNlIHRvIHNldCBvciB0byB0ZXN0IGJhZGJpdDsgdGhvc2UgaW50ZXJmYWNlcyBhcmUgZGVmaW5lZCBpbgpiYXNpY19pb3MmbHQ7Jmd0Oy4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSBkZXNjcmlwdGlvbiBpbiAyNy40LjIuNSBbaW9zLmJhc2Uuc3RvcmFnZV0gaW4KcGFyYWdyYXBoIDIsIGFuZCBhbHNvIGluIHBhcmFncmFwaCA0LCBhcyBmb2xsb3dzLiBSZXBsYWNlPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+SWYgdGhlIGZ1bmN0aW9uIGZhaWxzIGl0IHNldHMgYmFkYml0LCB3aGljaCBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+d2l0aDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPklmIHRoZSBmdW5jdGlvbiBmYWlscywgYW5kIDx0dD4qdGhpczwvdHQ+IGlzIGEgYmFzZSBzdWItb2JqZWN0IG9mCiAgYSA8dHQ+YmFzaWNfaW9zJmx0OyZndDs8L3R0PiBvYmplY3Qgb3Igc3ViLW9iamVjdCwgdGhlIGVmZmVjdCBpcwogIGVxdWl2YWxlbnQgdG8gY2FsbGluZyA8dHQ+YmFzaWNfaW9zJmx0OyZndDs6OnNldHN0YXRlKGJhZGJpdCk8L3R0PgogIG9uIHRoZSBkZXJpdmVkIG9iamVjdCAod2hpY2ggbWF5IHRocm93IDx0dD5mYWlsdXJlPC90dD4pLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IExXRyByZXZpZXdlZCB3b3JkaW5nOyBzZXRzdGF0ZShmYWlsYml0KSBjaGFuZ2VkIHRvCnNldHN0YXRlKGJhZGJpdCkuXTwvaT48L3A+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0MiI+PC9hPjQyLiBTdHJpbmcgY3RvcnMgc3BlY2lmeSB3cm9uZyBkZWZhdWx0IGFsbG9jYXRvcjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMS4zIFtiYXNpYy5zdHJpbmddIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5hdGhhbiBNeWVycyA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0wNjwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI2Jhc2ljLnN0cmluZyI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW2Jhc2ljLnN0cmluZ10uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNiYXNpYy5zdHJpbmciPmlzc3VlczwvYT4gaW4gW2Jhc2ljLnN0cmluZ10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBiYXNpY19zdHJpbmcmbHQ7Jmd0OyBjb3B5IGNvbnN0cnVjdG9yOiA8L3A+Cgo8cHJlPmJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmYW1wOyBzdHIsIHNpemVfdHlwZSBwb3MgPSAwLAogICAgICAgICAgICAgc2l6ZV90eXBlIG4gPSBucG9zLCBjb25zdCBBbGxvY2F0b3ImYW1wOyBhID0gQWxsb2NhdG9yKCkpOyA8L3ByZT4KCjxwPnNwZWNpZmllcyBhbiBBbGxvY2F0b3IgYXJndW1lbnQgZGVmYXVsdCB2YWx1ZSB0aGF0IGlzCmNvdW50ZXItaW50dWl0aXZlLiBUaGUgbmF0dXJhbCBjaG9pY2UgZm9yIGEgdGhlIGFsbG9jYXRvciB0byBjb3B5IGZyb20KaXMgc3RyLmdldF9hbGxvY2F0b3IoKS4gVGhvdWdoIHRoaXMgY2Fubm90IGJlIGV4cHJlc3NlZCBpbgpkZWZhdWx0LWFyZ3VtZW50IG5vdGF0aW9uLCBvdmVybG9hZGluZyBzdWZmaWNlcy4gPC9wPgoKPHA+QWx0ZXJuYXRpdmVseSwgdGhlIG90aGVyIGNvbnRhaW5lcnMgaW4gQ2xhdXNlIDIzIChkZXF1ZSwgbGlzdCwKdmVjdG9yKSBkbyBub3QgaGF2ZSB0aGlzIGZvcm0gb2YgY29uc3RydWN0b3IsIHNvIGl0IGlzIGluY29uc2lzdGVudCwKYW5kIGFuIGV2aWRlbnQgc291cmNlIG9mIGNvbmZ1c2lvbiwgZm9yIGJhc2ljX3N0cmluZyZsdDsmZ3Q7IHRvIGhhdmUKaXQsIHNvIGl0IG1pZ2h0IGJldHRlciBiZSByZW1vdmVkLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4gSW4gMjEuMyBbYmFzaWMuc3RyaW5nXSwgcmVwbGFjZSB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIGNvcHkKY29uc3RydWN0b3IgYXMgZm9sbG93czogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5iYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJmFtcDsgc3RyKTsKYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyZhbXA7IHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4gPSBucG9zLAogICAgICAgICAgICAgY29uc3QgQWxsb2NhdG9yJmFtcDsgYSA9IEFsbG9jYXRvcigpKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+SW4gMjEuMy4xIFtzdHJpbmcucmVxdWlyZV0sIHJlcGxhY2UgdGhlIGNvcHkgY29uc3RydWN0b3IgZGVjbGFyYXRpb24KYXMgYWJvdmUuIEFkZCB0byBwYXJhZ3JhcGggNSwgRWZmZWN0czo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5JbiB0aGUgZmlyc3QgZm9ybSwgdGhlIEFsbG9jYXRvciB2YWx1ZSB1c2VkIGlzIGNvcGllZCBmcm9tCiAgPHR0PnN0ci5nZXRfYWxsb2NhdG9yKCk8L3R0Pi48L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBiZWxpZXZlcyB0aGUgY29uc3RydWN0b3IgaXMgYWN0dWFsbHkgYnJva2VuLCByYXRoZXIgdGhhbgpqdXN0IGFuIHVuZm9ydHVuYXRlIGRlc2lnbiBjaG9pY2UuPC9wPgoKPHA+VGhlIExXRyBjb25zaWRlcmVkIHR3byBvdGhlciBwb3NzaWJsZSByZXNvbHV0aW9uczo8L3A+Cgo8cD5BLiBJbiAyMS4zIFtiYXNpYy5zdHJpbmddLCByZXBsYWNlIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgY29weQpjb25zdHJ1Y3RvciBhcyBmb2xsb3dzOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+YmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyZhbXA7IHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCiAgICAgICAgICAgICBzaXplX3R5cGUgbiA9IG5wb3MpOwpiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJmFtcDsgc3RyLCBzaXplX3R5cGUgcG9zLAogICAgICAgICAgICAgc2l6ZV90eXBlIG4sIGNvbnN0IEFsbG9jYXRvciZhbXA7IGEpOyA8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+SW4gMjEuMy4xIFtzdHJpbmcucmVxdWlyZV0sIHJlcGxhY2UgdGhlIGNvcHkgY29uc3RydWN0b3IgZGVjbGFyYXRpb24KYXMgYWJvdmUuIEFkZCB0byBwYXJhZ3JhcGggNSwgRWZmZWN0czogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+V2hlbiBubyA8dHQ+QWxsb2NhdG9yPC90dD4gYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBzdHJpbmcgaXMgY29uc3RydWN0ZWQgdXNpbmcgdGhlCiAgdmFsdWUgPHR0PnN0ci5nZXRfYWxsb2NhdG9yKCk8L3R0Pi4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5CLiBJbiAyMS4zIFtiYXNpYy5zdHJpbmddLCBhbmQgYWxzbyBpbiAyMS4zLjEgW3N0cmluZy5yZXF1aXJlXSwgcmVwbGFjZQp0aGUgZGVjbGFyYXRpb24gb2YgdGhlIGNvcHkgY29uc3RydWN0b3IgYXMgZm9sbG93czogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5iYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJmFtcDsgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKICAgICAgICAgICAgIHNpemVfdHlwZSBuID0gbnBvcyk7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5UaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiByZWZsZWN0cyB0aGUgb3JpZ2luYWwgaW50ZW50IG9mIHRoZSBMV0cuIEl0CndhcyBhbHNvIG5vdGVkIGJ5IFBldGUgQmVja2VyIHRoYXQgdGhpcyBmaXggIndpbGwgY2F1c2UKYSBzbWFsbCBhbW91bnQgb2YgZXhpc3RpbmcgY29kZSB0byBub3cgd29yayBjb3JyZWN0bHkuIjwvcD4KCjxwPjxpPlsKS29uYTogaXNzdWUgZWRpdGluZyBzbmFmdSBmaXhlZCAtIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG5vdyBjb3JyZWN0bHkKcmVmbGVjdHMgdGhlIExXRyBjb25zZW5zdXMuCl08L2k+PC9wPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0NCI+PC9hPjQ0LiBJb3N0cmVhbXMgdXNlIG9wZXJhdG9yPT0gb24gaW50X3R5cGUgdmFsdWVzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3IFtpbnB1dC5vdXRwdXRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5hdGhhbiBNeWVycyA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0wNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaW5wdXQub3V0cHV0Ij5pc3N1ZXM8L2E+IGluIFtpbnB1dC5vdXRwdXRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5NYW55IG9mIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3IgaW9zdHJlYW1zIHNwZWNpZnkgdGhhdCBjaGFyYWN0ZXIKdmFsdWVzIG9yIHRoZWlyIGludF90eXBlIGVxdWl2YWxlbnRzIGFyZSBjb21wYXJlZCB1c2luZyBvcGVyYXRvcnMgPT0Kb3IgIT0sIHRob3VnaCBpbiBvdGhlciBwbGFjZXMgdHJhaXRzOjplcSgpIG9yIHRyYWl0czo6ZXFfaW50X3R5cGUgaXMKc3BlY2lmaWVkIHRvIGJlIHVzZWQgdGhyb3VnaG91dC4gVGhpcyBpcyBhbiBpbmNvbnNpc3RlbmN5OyB3ZSBzaG91bGQKY2hhbmdlIHVzZXMgb2YgPT0gYW5kICE9IHRvIHVzZSB0aGUgdHJhaXRzIG1lbWJlcnMgaW5zdGVhZC4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPjxpPltQcmUtS29uYTogRGlldG1hciBzdXBwbGllZCB3b3JkaW5nXTwvaT48L3A+CgoKPHA+TGlzdCBvZiBjaGFuZ2VzIHRvIGNsYXVzZSAyNzo8L3A+CjxvbD4KPGxpPgogICBJbiBsaWIuYmFzaWMuaW9zLm1lbWJlcnMgcGFyYWdyYXBoIDEzIChwb3N0Y29uZGl0aW9uIGNsYXVzZSBmb3IKICAgJ2ZpbGwoY1QpJykgY2hhbmdlCgo8YmxvY2txdW90ZT48cHJlPiAgICAgZmlsbGNoID09IGZpbGwoKQo8L3ByZT48L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+PHByZT4gICAgIHRyYWl0czo6ZXEoZmlsbGNoLCBmaWxsKCkpCjwvcHJlPjwvYmxvY2txdW90ZT4KCgo8L2xpPgo8bGk+CiAgIEluIGxpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIHBhcmFncmFwaCA3IChlZmZlY3RzIGNsYXVzZSBmb3IKICAgJ2dldChjVCxzdHJlYW1zaXplLGNUKScpLCB0aGlyZCBidWxsZXQsIGNoYW5nZQoKPGJsb2NrcXVvdGU+PHByZT4gICAgIGMgPT0gZGVsaW0gZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBjaGFyYWN0ZXIgYwo8L3ByZT48L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+PHByZT4gICAgIHRyYWl0czo6ZXEoYywgZGVsaW0pIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgY2hhcmFjdGVyIGMKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPC9saT4KPGxpPgogICBJbiBsaWIuaXN0cmVhbS51bmZvcm1hdHRlZCBwYXJhZ3JhcGggMTIgKGVmZmVjdHMgY2xhdXNlIGZvcgogICAnZ2V0KGJhc2ljX3N0cmVhbWJ1ZiZsdDtjVCxUciZndDsmYW1wOyxjVCknKSwgdGhpcmQgYnVsbGV0LCBjaGFuZ2UKCjxibG9ja3F1b3RlPjxwcmU+ICAgICBjID09IGRlbGltIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgY2hhcmFjdGVyIGMKPC9wcmU+PC9ibG9ja3F1b3RlPgoKICAgdG8KCjxibG9ja3F1b3RlPjxwcmU+ICAgICB0cmFpdHM6OmVxKGMsIGRlbGltKSBmb3IgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0IGNoYXJhY3RlciBjCjwvcHJlPjwvYmxvY2txdW90ZT4KCjwvbGk+CjxsaT4KICAgSW4gbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQgcGFyYWdyYXBoIDE3IChlZmZlY3RzIGNsYXVzZSBmb3IKICAgJ2dldGxpbmUoY1Qsc3RyZWFtc2l6ZSxjVCknKSwgc2Vjb25kIGJ1bGxldCwgY2hhbmdlCgo8YmxvY2txdW90ZT48cHJlPiAgICAgYyA9PSBkZWxpbSBmb3IgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0IGNoYXJhY3RlciBjCjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgIHRvCgo8YmxvY2txdW90ZT48cHJlPiAgICAgdHJhaXRzOjplcShjLCBkZWxpbSkgZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBjaGFyYWN0ZXIgYwogIDwvcHJlPjwvYmxvY2txdW90ZT4KCjwvbGk+CjxsaT4KICAgSW4gbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQgcGFyYWdyYXBoIDI0IChlZmZlY3RzIGNsYXVzZSBmb3IKICAgJ2lnbm9yZShpbnQsaW50X3R5cGUpJyksIHNlY29uZCBidWxsZXQsIGNoYW5nZQoKPGJsb2NrcXVvdGU+PHByZT4gICAgIGMgPT0gZGVsaW0gZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBjaGFyYWN0ZXIgYwo8L3ByZT48L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+PHByZT4gICAgIHRyYWl0czo6ZXFfaW50X3R5cGUoYywgZGVsaW0pIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQKICAgICBjaGFyYWN0ZXIgYwo8L3ByZT48L2Jsb2NrcXVvdGU+CiAgCjwvbGk+CjxsaT4KICAgSW4gbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQgcGFyYWdyYXBoIDI1IChub3RlcyBjbGF1c2UgZm9yCiAgICdpZ25vcmUoaW50LGludF90eXBlKScpLCBzZWNvbmQgYnVsbGV0LCBjaGFuZ2UKCjxibG9ja3F1b3RlPjxwcmU+ICAgICBUaGUgbGFzdCBjb25kaXRpb24gd2lsbCBuZXZlciBvY2N1ciBpZiBkZWxpbSA9PSB0cmFpdHM6OmVvZigpCjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgIHRvCgo8YmxvY2txdW90ZT48cHJlPiAgICAgVGhlIGxhc3QgY29uZGl0aW9uIHdpbGwgbmV2ZXIgb2NjdXIgaWYKICAgICB0cmFpdHM6OmVxX2ludF90eXBlKGRlbGltLCB0cmFpdHM6OmVvZigpKS4KPC9wcmU+PC9ibG9ja3F1b3RlPgoKPC9saT4KPGxpPgogICBJbiBsaWIuaXN0cmVhbS5zZW50cnkgcGFyYWdyYXBoIDYgKGV4YW1wbGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZQogICBzZW50cnkgY29uc3RydWN0b3IpIGNoYW5nZQoKPGJsb2NrcXVvdGU+PHByZT4gICAgIHdoaWxlICgoYyA9IGlzLnJkYnVmKCktJmd0O3NuZXh0YygpKSAhPSB0cmFpdHM6OmVvZigpKSB7CjwvcHJlPjwvYmxvY2txdW90ZT4KCiAgIHRvCgo8YmxvY2txdW90ZT48cHJlPiAgICAgd2hpbGUgKCF0cmFpdHM6OmVxX2ludF90eXBlKGMgPSBpcy5yZGJ1ZigpLSZndDtzbmV4dGMoKSwgdHJhaXRzOjplb2YoKSkpIHsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPC9saT4KPC9vbD4KCjxwPkxpc3Qgb2YgY2hhbmdlcyB0byBDaGFwdGVyIDIxOjwvcD4KCjxvbD4KPGxpPgogICBJbiBsaWIuc3RyaW5nOjpmaW5kIHBhcmFncmFwaCAxIChlZmZlY3RzIGNsYXVzZSBmb3IgZmluZCgpKSwKICAgc2Vjb25kIGJ1bGxldCwgY2hhbmdlCgo8YmxvY2txdW90ZT48cHJlPiAgICAgYXQoeHBvcytJKSA9PSBzdHIuYXQoSSkgZm9yIGFsbCBlbGVtZW50cyAuLi4KPC9wcmU+PC9ibG9ja3F1b3RlPgoKICAgdG8KCjxibG9ja3F1b3RlPjxwcmU+ICAgICB0cmFpdHM6OmVxKGF0KHhwb3MrSSksIHN0ci5hdChJKSkgZm9yIGFsbCBlbGVtZW50cyAuLi4KPC9wcmU+PC9ibG9ja3F1b3RlPgoKPC9saT4KPGxpPgogICBJbiBsaWIuc3RyaW5nOjpyZmluZCBwYXJhZ3JhcGggMSAoZWZmZWN0cyBjbGF1c2UgZm9yIHJmaW5kKCkpLAogICBzZWNvbmQgYnVsbGV0LCBjaGFuZ2UKCjxibG9ja3F1b3RlPjxwcmU+ICAgICBhdCh4cG9zK0kpID09IHN0ci5hdChJKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L3ByZT48L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+PHByZT4gICAgIHRyYWl0czo6ZXEoYXQoeHBvcytJKSwgc3RyLmF0KEkpKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8L2xpPgo8bGk+CiAgIEluIGxpYi5zdHJpbmc6OmZpbmQuZmlyc3Qub2YgcGFyYWdyYXBoIDEgKGVmZmVjdHMgY2xhdXNlIGZvcgogICBmaW5kX2ZpcnN0X29mKCkpLCBzZWNvbmQgYnVsbGV0LCBjaGFuZ2UKCjxibG9ja3F1b3RlPjxwcmU+ICAgICBhdCh4cG9zK0kpID09IHN0ci5hdChJKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L3ByZT48L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+PHByZT4gICAgIHRyYWl0czo6ZXEoYXQoeHBvcytJKSwgc3RyLmF0KEkpKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8L2xpPgo8bGk+CiAgIEluIGxpYi5zdHJpbmc6OmZpbmQubGFzdC5vZiBwYXJhZ3JhcGggMSAoZWZmZWN0cyBjbGF1c2UgZm9yCiAgIGZpbmRfbGFzdF9vZigpKSwgc2Vjb25kIGJ1bGxldCwgY2hhbmdlCgo8YmxvY2txdW90ZT48cHJlPiAgICAgYXQoeHBvcytJKSA9PSBzdHIuYXQoSSkgZm9yIGFsbCBlbGVtZW50cyAuLi4KPC9wcmU+PC9ibG9ja3F1b3RlPgoKICAgdG8KCjxibG9ja3F1b3RlPjxwcmU+ICAgICB0cmFpdHM6OmVxKGF0KHhwb3MrSSksIHN0ci5hdChJKSkgZm9yIGFsbCBlbGVtZW50cyAuLi4KPC9wcmU+PC9ibG9ja3F1b3RlPgoKPC9saT4KPGxpPgogICBJbiBsaWIuc3RyaW5nOjpmaW5kLmZpcnN0Lm5vdC5vZiBwYXJhZ3JhcGggMSAoZWZmZWN0cyBjbGF1c2UgZm9yCiAgIGZpbmRfZmlyc3Rfbm90X29mKCkpLCBzZWNvbmQgYnVsbGV0LCBjaGFuZ2UKCjxibG9ja3F1b3RlPjxwcmU+ICAgICBhdCh4cG9zK0kpID09IHN0ci5hdChJKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L3ByZT48L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+PHByZT4gICAgIHRyYWl0czo6ZXEoYXQoeHBvcytJKSwgc3RyLmF0KEkpKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L3ByZT48L2Jsb2NrcXVvdGU+CjwvbGk+Cgo8bGk+CiAgIEluIGxpYi5zdHJpbmc6OmZpbmQubGFzdC5ub3Qub2YgcGFyYWdyYXBoIDEgKGVmZmVjdHMgY2xhdXNlIGZvcgogICBmaW5kX2xhc3Rfbm90X29mKCkpLCBzZWNvbmQgYnVsbGV0LCBjaGFuZ2UKCjxibG9ja3F1b3RlPjxwcmU+ICAgICBhdCh4cG9zK0kpID09IHN0ci5hdChJKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L3ByZT48L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+PHByZT4gICAgIHRyYWl0czo6ZXEoYXQoeHBvcytJKSwgc3RyLmF0KEkpKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L3ByZT48L2Jsb2NrcXVvdGU+CjwvbGk+Cgo8bGk+CiAgIEluIGxpYi5zdHJpbmcuaW9zIHBhcmFncmFwaCA1IChlZmZlY3RzIGNsYXVzZSBmb3IgZ2V0bGluZSgpKSwKICAgc2Vjb25kIGJ1bGxldCwgY2hhbmdlCgo8YmxvY2txdW90ZT48cHJlPiAgICAgYyA9PSBkZWxpbSBmb3IgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0IGNoYXJhY3RlciBjIAo8L3ByZT48L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+PHByZT4gICAgIHRyYWl0czo6ZXEoYywgZGVsaW0pIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgY2hhcmFjdGVyIGMgCjwvcHJlPjwvYmxvY2txdW90ZT4KPC9saT4KCjwvb2w+Cgo8cD5Ob3Rlczo8L3A+Cjx1bD4KPGxpPgogIEZpeGluZyB0aGlzIGlzc3VlIGhpZ2hsaWdodHMgYW5vdGhlciBzbG9wcHluZXNzIGluCiAgbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQgcGFyYWdyYXBoIDI0OiB0aGlzIGNsYXVzZSBtZW50aW9ucyBhICJjaGFyYWN0ZXIiCiAgd2hpY2ggaXMgdGhlbiBjb21wYXJlZCB0byBhbiAnaW50X3R5cGUnIChzZWUgaXRlbSA1LiBpbiB0aGUgbGlzdAogIGJlbG93KS4gSXQgaXMgbm90IGNsZWFyIHdoZXRoZXIgdGhpcyByZXF1aXJlcyBleHBsaWNpdCB3b3JkcyBhbmQKICBpZiBzbyB3aGF0IHRoZXNlIHdvcmRzIGFyZSBzdXBwb3NlZCB0byBiZS4gQSBzaW1pbGFyIGlzc3VlIGV4aXN0cywKICBCVFcsIGZvciBvcGVyYXRvciooKSBvZiBpc3RyZWFtYnVmX2l0ZXJhdG9yIHdoaWNoIHJldHVybnMgdGhlIHJlc3VsdAogIG9mIHNnZXRjKCkgYXMgYSBjaGFyYWN0ZXIgdHlwZSAoc2VlIGxpYi5pc3RyZWFtYnVmLml0ZXJhdG9yOjpvcCoKICBwYXJhZ3JhcGggMSksIGFuZCBmb3Igb3BlcmF0b3IrKygpIG9mIGlzdHJlYW1idWZfaXRlcmF0b3Igd2hpY2gKICBwYXNzZXMgdGhlIHJlc3VsdCBvZiBzYnVtcGMoKSB0byBhIGNvbnN0cnVjdG9yIHRha2luZyBhIGNoYXJfdHlwZQogIChzZWUgbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6Om9wZXJhdG9yKysgcGFyYWdyYXBoIDMpLiBTaW1pbGFyaWx5LCB0aGUKICBhc3NpZ25tZW50IG9wZXJhdG9yIG9zdHJlYW1idWZfaXRlcmF0b3IgcGFzc2VzIGEgY2hhcl90eXBlIHRvIGEgZnVuY3Rpb24KICB0YWtpbmcgYW4gaW50X3R5cGUgKHNlZSBsaWIub3N0cmVhbWJ1Zi5pdGVyLm9wcyBwYXJhZ3JhcGggMSkuCjwvbGk+CjxsaT4KICBJdCBpcyBpbmNvbnNpc3RlbnQgdG8gdXNlIGNvbXBhcmlzb25zIHVzaW5nIHRoZSB0cmFpdHMgZnVuY3Rpb25zIGluCiAgQ2hhcHRlciAyNyB3aGlsZSBub3QgdXNpbmcgdGhlbSBpbiBDaGFwdGVyIDIxLCBlc3BlY2lhbGx5IGFzIHNvbWUKICBvZiB0aGUgaW5jb25zaXN0ZW50IHVzZXMgYWN0dWFsbHkgaW52b2x2ZSBzdHJlYW1zIChlZy4gZ2V0bGluZSgpIG9uCiAgc3RyZWFtcykuIFRvIGF2b2lkIGxlYXZpbmcgdGhpcyBpc3N1ZSBvcGVuIHN0aWxsIGxvbmdlciBkdWUgdG8gdGhpcwogIGluY29uc2lzdGVuY3kgKGl0IGlzIG9wZW4gc2luY2UgMTk5OCksIGEgbGlzdCBvZiBjaGFuZ2VzIHRvIENoYXB0ZXIKICAyMSBpcyBiZWxvdy4KPC9saT4KPGxpPgogIEluIENoYXB0ZXIgMjQgdGhlcmUgYXJlIHNldmVyYWwgcGxhY2VzIHdpdGggc3RhdGVtZW50cyBsaWtlICJ0aGUgZW5kCiAgb2Ygc3RyZWFtIGlzIHJlYWNoZWQgKHN0cmVhbWJ1Zl90eXBlOjpzZ2V0YygpIHJldHVybnMgdHJhaXRzOjplb2YoKSkiCiAgKGxpYi5pc3RyZWFtYnVmLml0ZXJhdG9yIHBhcmFncmFwaCAxLCBsaWIub3N0cmVhbWJ1Zi5pdGVyLm9wcwogIHBhcmFncmFwaCA1KS4gSXQgaXMgdW5jbGVhciB3aGV0aGVyIHRoZXNlIHNob3VsZCBiZSBjbGFyaWZpZWQgdG8gdXNlCiAgdHJhaXRzOjplcV9pbnRfdHlwZSgpIGZvciBkZXRlY3RpbmcgdHJhaXRzOjplb2YoKS4KPC9saT4KPC91bD4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDYiPjwvYT40Ni4gTWlub3IgQW5uZXggRCBlcnJvcnM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gRC43IFtkZXByLnN0ci5zdHJzdHJlYW1zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBCcmVuZGFuIEtlaG9lIDxiPkRhdGU6PC9iPiAxOTk4LTA2LTAxPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+PHA+U2VlIGxpYi02NTIyIGFuZCBlZGl0LTgxNC48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSBELjcuMSBbZGVwci5zdHJzdHJlYW1idWZdIChzaW5jZSBzdHJlYW1idWYgaXMgYSB0eXBlZGVmIG9mCmJhc2ljX3N0cmVhbWJ1ZiZsdDtjaGFyJmd0OykgZnJvbTo8L3A+Cgo8cHJlPiAgICAgICAgIHZpcnR1YWwgc3RyZWFtYnVmJmx0O2NoYXImZ3Q7KiBzZXRidWYoY2hhciogcywgc3RyZWFtc2l6ZSBuKTs8L3ByZT4KCjxwPnRvOjwvcD4KCjxwcmU+ICAgICAgICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBzLCBzdHJlYW1zaXplIG4pOzwvcHJlPgoKPHA+SW4gRC43LjQgW2RlcHIuc3Ryc3RyZWFtXSBpbnNlcnQgdGhlIHNlbWljb2xvbiBub3cgbWlzc2luZyBhZnRlcgppbnRfdHlwZTo8L3A+Cgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICBjbGFzcyBzdHJzdHJlYW0KICAgICAgICAgOiBwdWJsaWMgYmFzaWNfaW9zdHJlYW0mbHQ7Y2hhciZndDsgewogICAgICAgcHVibGljOgogICAgICAgICAvLyBUeXBlcwogICAgICAgICB0eXBlZGVmIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZTsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjaGFyX3RyYWl0cyZsdDtjaGFyJmd0Ozo6aW50X3R5cGUgaW50X3R5cGUKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjaGFyX3RyYWl0cyZsdDtjaGFyJmd0Ozo6cG9zX3R5cGUgcG9zX3R5cGU7PC9wcmU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDciPjwvYT40Ny4gSW1idWUoKSBhbmQgZ2V0bG9jKCkgUmV0dXJucyBjbGF1c2VzIHN3YXBwZWQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNC4yLjMgW2lvcy5iYXNlLmxvY2FsZXNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMTk5OC0wNi0yMTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaW9zLmJhc2UubG9jYWxlcyI+aXNzdWVzPC9hPiBpbiBbaW9zLmJhc2UubG9jYWxlc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlNlY3Rpb24gMjcuNC4yLjMgc3BlY2lmaWVzIGhvdyBpbWJ1ZSgpIGFuZCBnZXRsb2MoKSB3b3JrLiBUaGF0CnNlY3Rpb24gaGFzIHR3byBSRVRVUk5TIGNsYXVzZXMsIGFuZCB0aGV5IG1ha2Ugbm8gc2Vuc2UgYXMKc3RhdGVkLiBUaGV5IG1ha2UgcGVyZmVjdCBzZW5zZSwgdGhvdWdoLCBpZiB5b3Ugc3dhcCB0aGVtLiBBbSBJCmNvcnJlY3QgaW4gdGhpbmtpbmcgdGhhdCBwYXJhZ3JhcGhzIDIgYW5kIDQganVzdCBnb3QgbWl4ZWQgdXAgYnkKYWNjaWRlbnQ/PC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjcuNC4yLjMgW2lvcy5iYXNlLmxvY2FsZXNdIHN3YXAgcGFyYWdyYXBocyAyIGFuZCA0LjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0OCI+PC9hPjQ4LiBVc2Ugb2Ygbm9uLWV4aXN0ZW50IGV4Y2VwdGlvbiBjb25zdHJ1Y3RvcjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy40LjIuMS4xIFtpb3M6OmZhaWx1cmVdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMTk5OC0wNi0yMTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaW9zOjpmYWlsdXJlIj5pc3N1ZXM8L2E+IGluIFtpb3M6OmZhaWx1cmVdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4yNy40LjIuMS4xLCBwYXJhZ3JhcGggMiwgc2F5cyB0aGF0IGNsYXNzIGZhaWx1cmUgaW5pdGlhbGl6ZXMgdGhlCmJhc2UgY2xhc3MsIGV4Y2VwdGlvbiwgd2l0aCBleGNlcHRpb24obXNnKS4gQ2xhc3MgZXhjZXB0aW9uIChzZWUKMTguNi4xKSBoYXMgbm8gc3VjaCBjb25zdHJ1Y3Rvci48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIDI3LjQuMi4xLjEgW2lvczo6ZmFpbHVyZV0sIHBhcmFncmFwaCAyLCB3aXRoPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+RUZGRUNUUzogQ29uc3RydWN0cyBhbiBvYmplY3Qgb2YgY2xhc3MgPHR0PmZhaWx1cmU8L3R0Pi48L3A+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0OSI+PC9hPjQ5LiBVbmRlcnNwZWNpZmljYXRpb24gb2YgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy40LjIuNCBbaW9zLm1lbWJlcnMuc3RhdGljXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXR0IEF1c3Rlcm4gPGI+RGF0ZTo8L2I+IDE5OTgtMDYtMjE8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VHdvIHByb2JsZW1zPC9wPgoKPHA+KDEpIDI3LjQuMi40IGRvZXNuJ3Qgc2F5IHdoYXQgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmKQpyZXR1cm5zLiBEb2VzIGl0IHJldHVybiBmLCBvciBkb2VzIGl0IHJldHVybiB0aGUgcHJldmlvdXMKc3luY2hyb25pemF0aW9uIHN0YXRlPyBNeSBndWVzcyBpcyB0aGUgbGF0dGVyLCBidXQgdGhlIHN0YW5kYXJkCmRvZXNuJ3Qgc2F5IHNvLjwvcD4KCjxwPigyKSAyNy40LjIuNCBkb2Vzbid0IHNheSB3aGF0IGl0IG1lYW5zIGZvciBzdHJlYW1zIHRvIGJlCnN5bmNocm9uaXplZCB3aXRoIHN0ZGlvLiAgQWdhaW4sIG9mIGNvdXJzZSwgSSBjYW4gbWFrZSBzb21lCmd1ZXNzZXMuIChBbmQgSSdtIHVuaGFwcHkgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvZiB0aG9zZQpndWVzc2VzLCBidXQgdGhhdCdzIGFub3RoZXIgbWF0dGVyLik8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIGZvbGxvd2luZyBzZW50ZW5jZSBpbiAyNy40LjIuNCBbaW9zLm1lbWJlcnMuc3RhdGljXQpyZXR1cm5zIGNsYXVzZSBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjx0dD50cnVlPC90dD4gaWYgdGhlIHN0YW5kYXJkIGlvc3RyZWFtIG9iamVjdHMgKDI3LjMpIGFyZQogIHN5bmNocm9uaXplZCBhbmQgb3RoZXJ3aXNlIHJldHVybnMgPHR0PmZhbHNlPC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+dHJ1ZTwvdHQ+IGlmIHRoZSBwcmV2aW91cyBzdGF0ZSBvZiB0aGUgc3RhbmRhcmQgaW9zdHJlYW0KICBvYmplY3RzICgyNy4zKSB3YXMgc3luY2hyb25pemVkIGFuZCBvdGhlcndpc2UgcmV0dXJucwogIDx0dD5mYWxzZTwvdHQ+LjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+QWRkIHRoZSBmb2xsb3dpbmcgaW1tZWRpYXRlbHkgYWZ0ZXIgMjcuNC4yLjQgW2lvcy5tZW1iZXJzLnN0YXRpY10sCnBhcmFncmFwaCAyOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5XaGVuIGEgc3RhbmRhcmQgaW9zdHJlYW0gb2JqZWN0IHN0ciBpcyA8aT5zeW5jaHJvbml6ZWQ8L2k+IHdpdGggYQpzdGFuZGFyZCBzdGRpbyBzdHJlYW0gZiwgdGhlIGVmZmVjdCBvZiBpbnNlcnRpbmcgYSBjaGFyYWN0ZXIgYyBieTwvcD4KPHByZT4gIGZwdXRjKGYsIGMpOwo8L3ByZT4KCjxwPmlzIHRoZSBzYW1lIGFzIHRoZSBlZmZlY3Qgb2Y8L3A+CjxwcmU+ICBzdHIucmRidWYoKS0mZ3Q7c3B1dGMoYyk7CjwvcHJlPgoKPHA+Zm9yIGFueSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzOyB0aGUgZWZmZWN0IG9mIGV4dHJhY3RpbmcgYQpjaGFyYWN0ZXIgYyBieTwvcD4KPHByZT4gIGMgPSBmZ2V0YyhmKTsKPC9wcmU+Cgo8cD5pcyB0aGUgc2FtZSBhcyB0aGUgZWZmZWN0IG9mOjwvcD4KPHByZT4gIGMgPSBzdHIucmRidWYoKS0mZ3Q7c2J1bXBjKGMpOwo8L3ByZT4KCjxwPmZvciBhbnkgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnM7IGFuZCB0aGUgZWZmZWN0IG9mIHB1c2hpbmcKYmFjayBhIGNoYXJhY3RlciBjIGJ5PC9wPgo8cHJlPiAgdW5nZXRjKGMsIGYpOwo8L3ByZT4KCjxwPmlzIHRoZSBzYW1lIGFzIHRoZSBlZmZlY3Qgb2Y8L3A+CjxwcmU+ICBzdHIucmRidWYoKS0mZ3Q7c3B1dGJhY2tjKGMpOwo8L3ByZT4KCjxwPmZvciBhbnkgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycy4gIFs8aT5Gb290bm90ZTwvaT46IFRoaXMgaW1wbGllcwp0aGF0IG9wZXJhdGlvbnMgb24gYSBzdGFuZGFyZCBpb3N0cmVhbSBvYmplY3QgY2FuIGJlIG1peGVkIGFyYml0cmFyaWx5CndpdGggb3BlcmF0aW9ucyBvbiB0aGUgY29ycmVzcG9uZGluZyBzdGRpbyBzdHJlYW0uICBJbiBwcmFjdGljYWwKdGVybXMsIHN5bmNocm9uaXphdGlvbiB1c3VhbGx5IG1lYW5zIHRoYXQgYSBzdGFuZGFyZCBpb3N0cmVhbSBvYmplY3QKYW5kIGEgc3RhbmRhcmQgc3RkaW8gb2JqZWN0IHNoYXJlIGEgYnVmZmVyLiA8aT4tLUVuZCBGb290bm90ZTwvaT5dPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bcHJlLUNvcGVuaGFnZW46IFBKUCBhbmQgTWF0dCBjb250cmlidXRlZCB0aGUgZGVmaW5pdGlvbgpvZiAic3luY2hyb25pemF0aW9uIl08L2k+PC9wPgoKCjxwPjxpPltwb3N0LUNvcGVuaGFnZW46IHByb3Bvc2VkIHJlc29sdXRpb24gd2FzIHJldmlzZWQgc2xpZ2h0bHk6CnRleHQgd2FzIGFkZGVkIGluIHRoZSBub24tbm9ybWF0aXZlIGZvb3Rub3RlIHRvIHNheSB0aGF0IG9wZXJhdGlvbnMKb24gdGhlIHR3byBzdHJlYW1zIGNhbiBiZSBtaXhlZCBhcmJpdHJhcmlseS5dPC9pPjwvcD4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTAiPjwvYT41MC4gQ29weSBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvciBvZiBpb3NfYmFzZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy40LjIgW2lvcy5iYXNlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXR0IEF1c3Rlcm4gPGI+RGF0ZTo8L2I+IDE5OTgtMDYtMjE8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lvcy5iYXNlIj5pc3N1ZXM8L2E+IGluIFtpb3MuYmFzZV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkFzIHdyaXR0ZW4sIGlvc19iYXNlIGhhcyBhIGNvcHkgY29uc3RydWN0b3IgYW5kIGFuIGFzc2lnbm1lbnQKb3BlcmF0b3IuIChOb3RoaW5nIGluIHRoZSBzdGFuZGFyZCBzYXlzIGl0IGRvZXNuJ3QgaGF2ZSBvbmUsIGFuZCBhbGwKY2xhc3NlcyBoYXZlIGNvcHkgY29uc3RydWN0b3JzIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9ycyB1bmxlc3MgeW91CnRha2Ugc3BlY2lmaWMgc3RlcHMgdG8gYXZvaWQgdGhlbS4pIEhvd2V2ZXIsIG5vdGhpbmcgaW4gMjcuNC4yIHNheXMKd2hhdCB0aGUgY29weSBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvciBkby4gPC9wPgoKPHA+TXkgZ3Vlc3MgaXMgdGhhdCB0aGlzIHdhcyBhbiBvdmVyc2lnaHQsIHRoYXQgaW9zX2Jhc2UgaXMsIGxpa2UKYmFzaWNfaW9zLCBub3Qgc3VwcG9zZWQgdG8gaGF2ZSBhIGNvcHkgY29uc3RydWN0b3Igb3IgYW4gYXNzaWdubWVudApvcGVyYXRvci48L3A+Cgo8cD4KSmVycnkgU2Nod2FyeiBjb21tZW50czogWWVzLCBpdHMgYW4gb3ZlcnNpZ2h0LCBidXQgaW4gdGhlIG9wcG9zaXRlCnNlbnNlIHRvIHdoYXQgeW91J3JlIHN1Z2dlc3RpbmcuIEF0IG9uZSBwb2ludCB0aGVyZSB3YXMgYSBkZWZpbml0ZQppbnRlbnRpb24gdGhhdCB5b3UgY291bGQgY29weSBpb3NfYmFzZS4gSXQncyBhbiBlYXN5IHdheSB0byBzYXZlIHRoZQplbnRpcmUgc3RhdGUgb2YgYSBzdHJlYW0gZm9yIGZ1dHVyZSB1c2UuIEFzIHlvdSBub3RlLCB0byBjYXJyeSBvdXQKdGhhdCBpbnRlbnRpb24gd291bGQgaGF2ZSByZXF1aXJlZCBhIGV4cGxpY2l0IGRlc2NyaXB0aW9uIG9mIHRoZQpzZW1hbnRpY3MgKGUuZy4gd2hhdCBoYXBwZW5zIHRvIHRoZSBpYXJyYXkgYW5kIHBhcnJheSBzdHVmZikuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjQuMiBbaW9zLmJhc2VdLCBjbGFzcyBpb3NfYmFzZSwgc3BlY2lmeSB0aGUgY29weQpjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9IG1lbWJlcnMgYXMgYmVpbmcgcHJpdmF0ZS48L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYmVsaWV2ZXMgdGhlIGRpZmZpY3VsdHkgb2Ygc3BlY2lmeWluZyBjb3JyZWN0IHNlbWFudGljcwpvdXR3ZWlnaHMgYW55IGJlbmVmaXQgb2YgYWxsb3dpbmcgaW9zX2Jhc2Ugb2JqZWN0cyB0byBiZSBjb3B5YWJsZS48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTEiPjwvYT41MS4gUmVxdWlyZW1lbnQgdG8gbm90IGludmFsaWRhdGUgaXRlcmF0b3JzIG1pc3Npbmc8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMSBbY29udGFpbmVyLnJlcXVpcmVtZW50c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGF2aWQgVmFuZGV2b29yZGUgPGI+RGF0ZTo8L2I+IDE5OTgtMDYtMjM8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNjb250YWluZXIucmVxdWlyZW1lbnRzIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbY29udGFpbmVyLnJlcXVpcmVtZW50c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNjb250YWluZXIucmVxdWlyZW1lbnRzIj5pc3N1ZXM8L2E+IGluIFtjb250YWluZXIucmVxdWlyZW1lbnRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIHN0ZDo6c29ydCBhbGdvcml0aG0gY2FuIGluIGdlbmVyYWwgb25seSBzb3J0IGEgZ2l2ZW4gc2VxdWVuY2UKYnkgbW92aW5nIGFyb3VuZCB2YWx1ZXMuIFRoZSBsaXN0Jmx0OyZndDs6OnNvcnQoKSBtZW1iZXIgb24gdGhlIG90aGVyCmhhbmQgY291bGQgbW92ZSBhcm91bmQgdmFsdWVzIG9yIGp1c3QgdXBkYXRlIGludGVybmFsIHBvaW50ZXJzLiBFaXRoZXIKbWV0aG9kIGNhbiBsZWF2ZSBpdGVyYXRvcnMgaW50byB0aGUgbGlzdCZsdDsmZ3Q7IGRlcmVmZXJlbmNhYmxlLCBidXQKdGhleSB3b3VsZCBwb2ludCB0byBkaWZmZXJlbnQgdGhpbmdzLiA8L3A+Cgo8cD5Eb2VzIHRoZSBGRElTIG1hbmRhdGUgYW55d2hlcmUgd2hpY2ggbWV0aG9kIHNob3VsZCBiZSB1c2VkIGZvcgpsaXN0Jmx0OyZndDs6OnNvcnQoKT88L3A+Cgo8cD5NYXR0IEF1c3Rlcm4gY29tbWVudHM6PC9wPgoKPHA+SSB0aGluayB5b3UndmUgZm91bmQgYW4gb21pc3Npb24gaW4gdGhlIHN0YW5kYXJkLiA8L3A+Cgo8cD5UaGUgbGlicmFyeSB3b3JraW5nIGdyb3VwIGRpc2N1c3NlZCB0aGlzIHBvaW50LCBhbmQgdGhlcmUgd2FzCnN1cHBvc2VkIHRvIGJlIGEgZ2VuZXJhbCByZXF1aXJlbWVudCBzYXlpbmcgdGhhdCBsaXN0LCBzZXQsIG1hcCwKbXVsdGlzZXQsIGFuZCBtdWx0aW1hcCBtYXkgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzLCBvciBjaGFuZ2UgdGhlCnZhbHVlcyB0aGF0IGl0ZXJhdG9ycyBwb2ludCB0bywgZXhjZXB0IHdoZW4gYW4gb3BlcmF0aW9uIGRvZXMgaXQKZXhwbGljaXRseS4gU28sIGZvciBleGFtcGxlLCBpbnNlcnQoKSBkb2Vzbid0IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycwphbmQgZXJhc2UoKSBhbmQgcmVtb3ZlKCkgb25seSBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUKZWxlbWVudHMgdGhhdCBhcmUgYmVpbmcgZXJhc2VkLiA8L3A+Cgo8cD5JIGxvb2tlZCBmb3IgdGhhdCBnZW5lcmFsIHJlcXVpcmVtZW50IGluIHRoZSBGRElTLCBhbmQsIHdoaWxlIEkKZm91bmQgYSBsaW1pdGVkIGZvcm0gb2YgaXQgZm9yIHRoZSBzb3J0ZWQgYXNzb2NpYXRpdmUgY29udGFpbmVycywgSQpkaWRuJ3QgZmluZCBpdCBmb3IgbGlzdC4gSXQgbG9va3MgbGlrZSBpdCBqdXN0IGdvdCBvbWl0dGVkLiA8L3A+Cgo8cD5UaGUgaW50ZW50aW9uLCB0aG91Z2gsIGlzIHRoYXQgbGlzdCZsdDsmZ3Q7Ojpzb3J0IGRvZXMgbm90CmludmFsaWRhdGUgYW55IGl0ZXJhdG9ycyBhbmQgZG9lcyBub3QgY2hhbmdlIHRoZSB2YWx1ZXMgdGhhdCBhbnkKaXRlcmF0b3IgcG9pbnRzIHRvLiBUaGVyZSB3b3VsZCBiZSBubyByZWFzb24gdG8gaGF2ZSB0aGUgbWVtYmVyCmZ1bmN0aW9uIG90aGVyd2lzZS48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgYSBuZXcgcGFyYWdyYXBoIGF0IHRoZSBlbmQgb2YgMjMuMTo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5Vbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCAoZWl0aGVyIGV4cGxpY2l0bHkgb3IgYnkgZGVmaW5pbmcgYSBmdW5jdGlvbiBpbiB0ZXJtcyBvZgogIG90aGVyIGZ1bmN0aW9ucyksIGludm9raW5nIGEgY29udGFpbmVyIG1lbWJlciBmdW5jdGlvbiBvciBwYXNzaW5nIGEgY29udGFpbmVyIGFzIGFuCiAgYXJndW1lbnQgdG8gYSBsaWJyYXJ5IGZ1bmN0aW9uIHNoYWxsIG5vdCBpbnZhbGlkYXRlIGl0ZXJhdG9ycyB0bywgb3IgY2hhbmdlIHRoZSB2YWx1ZXMgb2YsCiAgb2JqZWN0cyB3aXRoaW4gdGhhdCBjb250YWluZXIuIDwvcD4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIHdhcyBVUyBpc3N1ZSBDRDItMjMtMDExOyBpdCB3YXMgYWNjZXB0ZWQgaW4gTG9uZG9uIGJ1dCB0aGUKY2hhbmdlIHdhcyBub3QgbWFkZSBkdWUgdG8gYW4gZWRpdGluZyBvdmVyc2lnaHQuIFRoZSB3b3JkaW5nIGluIHRoZQpwcm9wb3NlZCByZXNvbHV0aW9uIGJlbG93IGlzIHNvbWV3aGF0IHVwZGF0ZWQgZnJvbSBDRDItMjMtMDExLApwYXJ0aWN1bGFybHkgdGhlIGFkZGl0aW9uIG9mIHRoZSBwaHJhc2UgIm9yIGNoYW5nZSB0aGUgdmFsdWVzCm9mIjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI1MiI+PC9hPjUyLiBTbWFsbCBJL08gcHJvYmxlbXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNC4zLjIgW2Zwb3Mub3BlcmF0aW9uc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAxOTk4LTA2LTIzPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkZpcnN0LCAyNy40LjQuMSBbYmFzaWMuaW9zLmNvbnNdLCB0YWJsZSA4OS4gVGhpcyBpcyBwcmV0dHkgb2J2aW91czoKaXQgc2hvdWxkIGJlIHRpdGxlZCAiYmFzaWNfaW9zJmx0OyZndDsoKSBlZmZlY3RzIiwgbm90CiJpb3NfYmFzZSgpIGVmZmVjdHMiLiA8L3A+Cgo8cD5bVGhlIHNlY29uZCBpdGVtIGlzIGEgZHVwbGljYXRlOyBzZWUgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNiI+NjwvYT4gZm9yCnJlc29sdXRpb24uXTwvcD4KCjxwPlNlY29uZCwgMjcuNC4zLjIgW2Zwb3Mub3BlcmF0aW9uc10gdGFibGUgODggLiBUaGVyZSBhcmUgYSBjb3VwbGUKZGlmZmVyZW50IHRoaW5ncyB3cm9uZyB3aXRoIGl0LCBzb21lIG9mIHdoaWNoIEkndmUgYWxyZWFkeSBkaXNjdXNzZWQKd2l0aCBKZXJyeSwgYnV0IHRoZSBtb3N0IG9idmlvdXMgbWVjaGFuaWNhbCBzb3J0IG9mIGVycm9yIGlzIHRoYXQgaXQKdXNlcyBleHByZXNzaW9ucyBsaWtlIFAoaSkgYW5kIHAoaSksIHdpdGhvdXQgZXZlciBkZWZpbmluZyB3aGF0IHNvcnQKb2YgdGhpbmcgImkiIGlzLgo8L3A+Cgo8cD4oVGhlIG90aGVyIHByb2JsZW0gaXMgdGhhdCBpdCByZXF1aXJlcyBzdXBwb3J0IGZvciBzdHJlYW1wb3MKYXJpdGhtZXRpYy4gVGhpcyBpcyBpbXBvc3NpYmxlIG9uIHNvbWUgc3lzdGVtcywgaS5lLiBvbmVzIHdoZXJlIGZpbGUKcG9zaXRpb24gaXMgYSBjb21wbGljYXRlZCBzdHJ1Y3R1cmUgcmF0aGVyIHRoYW4ganVzdCBhIG51bWJlci4gSmVycnkKdGVsbHMgbWUgdGhhdCB0aGUgaW50ZW50aW9uIHdhcyB0byByZXF1aXJlIHN5bnRhY3RpYyBzdXBwb3J0IGZvcgpzdHJlYW1wb3MgYXJpdGhtZXRpYywgYnV0IHRoYXQgaXQgd2Fzbid0IGFjdHVhbGx5IHN1cHBvc2VkIHRvIGRvCmFueXRoaW5nIG1lYW5pbmdmdWwgZXhjZXB0IG9uIHBsYXRmb3JtcywgbGlrZSBVbml4LCB3aGVyZSBnZW51aW5lCmFyaXRobWV0aWMgaXMgcG9zc2libGUuKSA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjcuNC40LjEgW2Jhc2ljLmlvcy5jb25zXSB0YWJsZSA4OSB0aXRsZSBmcm9tCiJpb3NfYmFzZSgpIGVmZmVjdHMiIHRvICJiYXNpY19pb3MmbHQ7Jmd0OygpCmVmZmVjdHMiLiA8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTMiPjwvYT41My4gQmFzaWNfaW9zIGRlc3RydWN0b3IgdW5zcGVjaWZpZWQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNC40LjEgW2Jhc2ljLmlvcy5jb25zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXR0IEF1c3Rlcm4gPGI+RGF0ZTo8L2I+IDE5OTgtMDYtMjM8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2Jhc2ljLmlvcy5jb25zIj5pc3N1ZXM8L2E+IGluIFtiYXNpYy5pb3MuY29uc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZXJlJ3Mgbm90aGluZyBpbiAyNy40LjQgc2F5aW5nIHdoYXQgYmFzaWNfaW9zJ3MgZGVzdHJ1Y3RvciBkb2VzLgpUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYmFzaWNfaW9zOjp+YmFzaWNfaW9zKCkgZGVzdHJveXMKcmRidWYoKS48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgYWZ0ZXIgMjcuNC40LjEgW2Jhc2ljLmlvcy5jb25zXSBwYXJhZ3JhcGggMjo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+dmlydHVhbCB+YmFzaWNfaW9zKCk7PC90dD48L3A+CiAgPHA+PGI+Tm90ZXM8L2I+OiBUaGUgZGVzdHJ1Y3RvciBkb2VzIG5vdCBkZXN0cm95IDx0dD5yZGJ1ZigpPC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+IAo8cD5UaGUgTFdHIHJldmlld2VkIHRoZSBhZGRpdGlvbmFsIHF1ZXN0aW9uIG9mIHdoZXRoZXIgb3Igbm90Cjx0dD5yZGJ1ZigwKTwvdHQ+IG1heSBzZXQgPHR0PmJhZGJpdDwvdHQ+LiAgVGhlIGFuc3dlciBpcwpjbGVhcmx5IHllczsgaXQgbWF5IGJlIHNldCB2aWEgPHR0PmNsZWFyKCk8L3R0Pi4gIFNlZSAyNy40LjQuMiBbYmFzaWMuaW9zLm1lbWJlcnNdLCBwYXJhZ3JhcGggNi4gIFRoaXMgaXNzdWUgd2FzIHJldmlld2VkIGF0IGxlbmd0aApieSB0aGUgTFdHLCB3aGljaCByZW1vdmVkIGZyb20gdGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gYQpmb290bm90ZSB3aGljaCBpbmNvcnJlY3RseSBzYWlkICI8dHQ+cmRidWYoMCk8L3R0PiBkb2VzIG5vdCBzZXQKPHR0PmJhZGJpdDwvdHQ+Ii48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTQiPjwvYT41NC4gQmFzaWNfc3RyZWFtYnVmJ3MgZGVzdHJ1Y3RvcjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy41LjIuMSBbc3RyZWFtYnVmLmNvbnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMTk5OC0wNi0yNTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjc3RyZWFtYnVmLmNvbnMiPmlzc3VlczwvYT4gaW4gW3N0cmVhbWJ1Zi5jb25zXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIGNsYXNzIHN5bm9wc2lzIGZvciBiYXNpY19zdHJlYW1idWYgc2hvd3MgYSAodmlydHVhbCkKZGVzdHJ1Y3RvciwgYnV0IHRoZSBzdGFuZGFyZCBkb2Vzbid0IHNheSB3aGF0IHRoYXQgZGVzdHJ1Y3RvciBkb2VzLiBNeQphc3N1bXB0aW9uIGlzIHRoYXQgaXQgZG9lcyBub3RoaW5nLCBidXQgdGhlIHN0YW5kYXJkIHNob3VsZCBzYXkgc28KZXhwbGljaXRseS4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIGFmdGVyIDI3LjUuMi4xIFtzdHJlYW1idWYuY29uc10gcGFyYWdyYXBoIDI6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PHR0PnZpcnR1YWwmbmJzcDsgfmJhc2ljX3N0cmVhbWJ1ZigpOzwvdHQ+PC9wPgogIDxwPjxiPkVmZmVjdHM8L2I+OiBOb25lLjwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU1Ij48L2E+NTUuIEludmFsaWQgc3RyZWFtIHBvc2l0aW9uIGlzIHVuZGVmaW5lZDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNyBbaW5wdXQub3V0cHV0XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXR0IEF1c3Rlcm4gPGI+RGF0ZTo8L2I+IDE5OTgtMDYtMjY8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lucHV0Lm91dHB1dCI+aXNzdWVzPC9hPiBpbiBbaW5wdXQub3V0cHV0XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+U2V2ZXJhbCBtZW1iZXIgZnVuY3Rpb25zIGluIGNsYXVzZSAyNyBhcmUgZGVmaW5lZCBpbiBjZXJ0YWluCmNpcmN1bXN0YW5jZXMgdG8gcmV0dXJuIGFuICJpbnZhbGlkIHN0cmVhbSBwb3NpdGlvbiIsIGEgdGVybQp0aGF0IGlzIGRlZmluZWQgbm93aGVyZSBpbiB0aGUgc3RhbmRhcmQuIFR3byBwbGFjZXMgKDI3LjUuMi40LjIsCnBhcmFncmFwaCA0LCBhbmQgMjcuOC4xLjQsIHBhcmFncmFwaCAxNSkgY29udGFpbiBhIGNyb3NzLXJlZmVyZW5jZSB0bwphIGRlZmluaXRpb24gaW4gX2xpYi5pb3N0cmVhbXMuZGVmaW5pdGlvbnNfLCBhIG5vbmV4aXN0ZW50CnNlY3Rpb24uIDwvcD4KCjxwPkkgc3VzcGVjdCB0aGF0IHRoZSBpbnZhbGlkIHN0cmVhbSBwb3NpdGlvbiBpcyBqdXN0IHN1cHBvc2VkIHRvIGJlCnBvc190eXBlKC0xKS4gIFByb2JhYmx5IGJlc3QgdG8gc2F5IGV4cGxpY2l0bHkgaW4gKGZvciBleGFtcGxlKQoyNy41LjIuNC4yIHRoYXQgdGhlIHJldHVybiB2YWx1ZSBpcyBwb3NfdHlwZSgtMSksIHJhdGhlciB0aGFuIHRvIHVzZQp0aGUgdGVybSAiaW52YWxpZCBzdHJlYW0gcG9zaXRpb24iLCBkZWZpbmUgdGhhdCB0ZXJtCnNvbWV3aGVyZSwgYW5kIHRoZW4gcHV0IGluIGEgY3Jvc3MtcmVmZXJlbmNlLiA8L3A+Cgo8cD5UaGUgcGhyYXNlICJpbnZhbGlkIHN0cmVhbSBwb3NpdGlvbiIgYXBwZWFycyB0ZW4gdGltZXMgaW4KdGhlIEMrKyBTdGFuZGFyZC4gIEluIHNldmVuIHBsYWNlcyBpdCByZWZlcnMgdG8gYSByZXR1cm4gdmFsdWUsIGFuZCBpdApzaG91bGQgYmUgY2hhbmdlZC4gSW4gdGhyZWUgcGxhY2VzIGl0IHJlZmVycyB0byBhbiBhcmd1bWVudCwgYW5kIGl0CnNob3VsZCBub3QgYmUgY2hhbmdlZC4gSGVyZSBhcmUgdGhlIHRocmVlIHBsYWNlcyB3aGVyZSAiaW52YWxpZApzdHJlYW0gcG9zaXRpb24iIHNob3VsZCBub3QgYmUgY2hhbmdlZDo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD4yNy43LjEuNCBbc3RyaW5nYnVmLnZpcnR1YWxzXSwgcGFyYWdyYXBoIDE0PGJyPgogIDI3LjguMS41IFtmaWxlYnVmLnZpcnR1YWxzXSwgcGFyYWdyYXBoIDE0PGJyPgogIEQuNy4xLjMgW2RlcHIuc3Ryc3RyZWFtYnVmLnZpcnR1YWxzXSwgcGFyYWdyYXBoIDE3CiAgPC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy41LjIuNC4yIFtzdHJlYW1idWYudmlydC5idWZmZXJdLCBwYXJhZ3JhcGggNCwgY2hhbmdlICJSZXR1cm5zIGFuCm9iamVjdCBvZiBjbGFzcyBwb3NfdHlwZSB0aGF0IHN0b3JlcyBhbiBpbnZhbGlkIHN0cmVhbSBwb3NpdGlvbgooX2xpYi5pb3N0cmVhbXMuZGVmaW5pdGlvbnNfKSIgdG8gIlJldHVybnMKPHR0PnBvc190eXBlKG9mZl90eXBlKC0xKSk8L3R0PiIuCjwvcD4KCjxwPkluIDI3LjUuMi40LjIgW3N0cmVhbWJ1Zi52aXJ0LmJ1ZmZlcl0sIHBhcmFncmFwaCA2LCBjaGFuZ2UgIlJldHVybnMKYW4gb2JqZWN0IG9mIGNsYXNzIHBvc190eXBlIHRoYXQgc3RvcmVzIGFuIGludmFsaWQgc3RyZWFtCnBvc2l0aW9uIiB0byAiUmV0dXJucyA8dHQ+cG9zX3R5cGUob2ZmX3R5cGUoLTEpKTwvdHQ+Ii48L3A+Cgo8cD5JbiAyNy43LjEuNCBbc3RyaW5nYnVmLnZpcnR1YWxzXSwgcGFyYWdyYXBoIDEzLCBjaGFuZ2UgInRoZSBvYmplY3QKc3RvcmVzIGFuIGludmFsaWQgc3RyZWFtIHBvc2l0aW9uIiB0byAidGhlIHJldHVybiB2YWx1ZSBpcwo8dHQ+cG9zX3R5cGUob2ZmX3R5cGUoLTEpKTwvdHQ+Ii4gPC9wPgoKPHA+SW4gMjcuOC4xLjUgW2ZpbGVidWYudmlydHVhbHNdLCBwYXJhZ3JhcGggMTMsIGNoYW5nZSAicmV0dXJucyBhbgppbnZhbGlkIHN0cmVhbSBwb3NpdGlvbiAoMjcuNC4zKSIgdG8gInJldHVybnMKPHR0PnBvc190eXBlKG9mZl90eXBlKC0xKSk8L3R0PiIgPC9wPgoKPHA+SW4gMjcuOC4xLjUgW2ZpbGVidWYudmlydHVhbHNdLCBwYXJhZ3JhcGggMTUsIGNoYW5nZSAiT3RoZXJ3aXNlCnJldHVybnMgYW4gaW52YWxpZCBzdHJlYW0gcG9zaXRpb24gKF9saWIuaW9zdHJlYW1zLmRlZmluaXRpb25zXykiCnRvICJPdGhlcndpc2UgcmV0dXJucyA8dHQ+cG9zX3R5cGUob2ZmX3R5cGUoLTEpKTwvdHQ+Igo8L3A+Cgo8cD5JbiBELjcuMS4zIFtkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFsc10sIHBhcmFncmFwaCAxNSwgY2hhbmdlICJ0aGUgb2JqZWN0CnN0b3JlcyBhbiBpbnZhbGlkIHN0cmVhbSBwb3NpdGlvbiIgdG8gInRoZSByZXR1cm4gdmFsdWUgaXMKPHR0PnBvc190eXBlKG9mZl90eXBlKC0xKSk8L3R0PiIgPC9wPgoKPHA+SW4gRC43LjEuMyBbZGVwci5zdHJzdHJlYW1idWYudmlydHVhbHNdLCBwYXJhZ3JhcGggMTgsIGNoYW5nZSAidGhlIG9iamVjdApzdG9yZXMgYW4gaW52YWxpZCBzdHJlYW0gcG9zaXRpb24iIHRvICJ0aGUgcmV0dXJuIHZhbHVlIGlzCjx0dD5wb3NfdHlwZShvZmZfdHlwZSgtMSkpPC90dD4iPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU2Ij48L2E+NTYuIFNob3dtYW55YydzIHJldHVybiB0eXBlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjUuMiBbc3RyZWFtYnVmXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXR0IEF1c3Rlcm4gPGI+RGF0ZTo8L2I+IDE5OTgtMDYtMjk8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3N0cmVhbWJ1ZiI+aXNzdWVzPC9hPiBpbiBbc3RyZWFtYnVmXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIGNsYXNzIHN1bW1hcnkgZm9yIGJhc2ljX3N0cmVhbWJ1ZiZsdDsmZ3Q7LCBpbiAyNy41LjIsIHNheXMgdGhhdApzaG93bWFueWMgaGFzIHJldHVybiB0eXBlIGludC4gSG93ZXZlciwgMjcuNS4yLjQuMyBzYXlzIHRoYXQgaXRzCnJldHVybiB0eXBlIGlzIHN0cmVhbXNpemUuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSA8dHQ+c2hvd21hbnljPC90dD4ncyByZXR1cm4gdHlwZSBpbiB0aGUKMjcuNS4yIFtzdHJlYW1idWZdIGNsYXNzIHN1bW1hcnkgdG8gPHR0PnN0cmVhbXNpemU8L3R0Pi48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTciPjwvYT41Ny4gTWlzdGFrZSBpbiBjaGFyX3RyYWl0czwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMS4xLjMuNCBbY2hhci50cmFpdHMuc3BlY2lhbGl6YXRpb25zLndjaGFyLnRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMTk5OC0wNy0wMTwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4yMS4xLjMuMiwgcGFyYWdyYXBoIDMsIHNheXMgIlRoZSB0eXBlcyBzdHJlYW1wb3MgYW5kCndzdHJlYW1wb3MgbWF5IGJlIGRpZmZlcmVudCBpZiB0aGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgbm8gc2hpZnQKZW5jb2RpbmcgaW4gbmFycm93LW9yaWVudGVkIGlvc3RyZWFtcyBidXQgc3VwcG9ydHMgb25lIG9yIG1vcmUgc2hpZnQKZW5jb2RpbmdzIGluIHdpZGUtb3JpZW50ZWQgc3RyZWFtcyIuIDwvcD4KCjxwPlRoYXQncyB3cm9uZzogdGhlIHR3byBhcmUgdGhlIHNhbWUgdHlwZS4gVGhlICZsdDtpb3Nmd2QmZ3Q7IHN1bW1hcnkKaW4gMjcuMiBzYXlzIHRoYXQgc3RyZWFtcG9zIGFuZCB3c3RyZWFtcG9zIGFyZSwgcmVzcGVjdGl2ZWx5LCBzeW5vbnltcwpmb3IgZnBvcyZsdDtjaGFyX3RyYWl0cyZsdDtjaGFyJmd0Ozo6c3RhdGVfdHlwZSZndDsgYW5kCmZwb3MmbHQ7Y2hhcl90cmFpdHMmbHQ7d2NoYXJfdCZndDs6OnN0YXRlX3R5cGUmZ3Q7LCBhbmQsIGZsaXBwaW5nIGJhY2sKdG8gY2xhdXNlIDIxLCB3ZSBzZWUgaW4gMjEuMS4zLjEgYW5kIDIxLjEuMy4yIHRoYXQKY2hhcl90cmFpdHMmbHQ7Y2hhciZndDs6OnN0YXRlX3R5cGUgYW5kCmNoYXJfdHJhaXRzJmx0O3djaGFyX3QmZ3Q7OjpzdGF0ZV90eXBlIG11c3QgYm90aCBiZSBtYnN0YXRlX3QuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlbW92ZSB0aGUgc2VudGVuY2UgaW4gMjEuMS4zLjQgW2NoYXIudHJhaXRzLnNwZWNpYWxpemF0aW9ucy53Y2hhci50XSBwYXJhZ3JhcGggMyB3aGljaApiZWdpbnMgIlRoZSB0eXBlcyBzdHJlYW1wb3MgYW5kIHdzdHJlYW1wb3MgbWF5IGJlCmRpZmZlcmVudC4uLiIgLiA8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTkiPjwvYT41OS4gQW1iaWd1aXR5IGluIHNwZWNpZmljYXRpb24gb2YgZ2J1bXA8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNS4yLjMuMiBbc3RyZWFtYnVmLmdldC5hcmVhXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXR0IEF1c3Rlcm4gPGI+RGF0ZTo8L2I+IDE5OTgtMDctMjg8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+MjcuNS4yLjMuMSBzYXlzIHRoYXQgYmFzaWNfc3RyZWFtYnVmOjpnYnVtcCgpICJBZHZhbmNlcyB0aGUKbmV4dCBwb2ludGVyIGZvciB0aGUgaW5wdXQgc2VxdWVuY2UgYnkgbi4iIDwvcD4KCjxwPlRoZSBzdHJhaWdodGZvcndhcmQgaW50ZXJwcmV0YXRpb24gaXMgdGhhdCBpdCBpcyBqdXN0IGdwdHIoKSArPQpuLiBBbiBhbHRlcm5hdGl2ZSBpbnRlcnByZXRhdGlvbiwgdGhvdWdoLCBpcyB0aGF0IGl0IGJlaGF2ZXMgYXMgaWYgaXQKY2FsbHMgc2J1bXBjIG4gdGltZXMuIChUaGUgaXNzdWUsIG9mIGNvdXJzZSwgaXMgd2hldGhlciBpdCBtaWdodCBldmVyCmNhbGwgdW5kZXJmbG93LikgVGhlcmUgaXMgYSBzaW1pbGFyIGFtYmlndWl0eSBpbiB0aGUgY2FzZSBvZgpwYnVtcC4gPC9wPgoKPHA+KFRoZSAiY2xhc3NpYyIgQVQmYW1wO1QgaW1wbGVtZW50YXRpb24gdXNlZCB0aGUKZm9ybWVyIGludGVycHJldGF0aW9uLik8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjcuNS4yLjMuMiBbc3RyZWFtYnVmLmdldC5hcmVhXSBwYXJhZ3JhcGggNCBnYnVtcCBlZmZlY3RzIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+RWZmZWN0czogQWR2YW5jZXMgdGhlIG5leHQgcG9pbnRlciBmb3IgdGhlIGlucHV0IHNlcXVlbmNlIGJ5IG4uPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5FZmZlY3RzOiBBZGRzIDx0dD5uPC90dD4gdG8gdGhlIG5leHQgcG9pbnRlciBmb3IgdGhlIGlucHV0IHNlcXVlbmNlLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+TWFrZSB0aGUgc2FtZSBjaGFuZ2UgdG8gMjcuNS4yLjMuMyBbc3RyZWFtYnVmLnB1dC5hcmVhXSBwYXJhZ3JhcGggNCBwYnVtcAplZmZlY3RzLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2MCI+PC9hPjYwLiBXaGF0IGlzIGEgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uPzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjEuMi4xIFtpc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0wMzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaXN0cmVhbS5mb3JtYXR0ZWQucmVxbXRzIj5pc3N1ZXM8L2E+IGluIFtpc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RHVwbGljYXRlIG9mOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTYyIj4xNjI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxNjMiPjE2MzwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzE2NiI+MTY2PC9hPjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5QYXJhZ3JhcGggMSBvZiAyNy42LjEuMi4xIGNvbnRhaW5zIGdlbmVyYWwgcmVxdWlyZW1lbnRzIGZvciBhbGwKZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucy4gU29tZSBvZiB0aGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gc2VjdGlvbgoyNy42LjEuMiBleHBsaWNpdGx5IHNheSB0aGF0IHRob3NlIHJlcXVpcmVtZW50cyBhcHBseSAoIkJlaGF2ZXMKbGlrZSBhIGZvcm1hdHRlZCBpbnB1dCBtZW1iZXIgKGFzIGRlc2NyaWJlZCBpbiAyNy42LjEuMi4xKSIpLCBidXQKb3RoZXJzIGRvbid0LiBUaGUgcXVlc3Rpb246IGlzIDI3LjYuMS4yLjEgc3VwcG9zZWQgdG8gYXBwbHkgdG8KZXZlcnl0aGluZyBpbiAyNy42LjEuMiwgb3Igb25seSB0byB0aG9zZSBtZW1iZXIgZnVuY3Rpb25zIHRoYXQKZXhwbGljaXRseSBzYXkgImJlaGF2ZXMgbGlrZSBhIGZvcm1hdHRlZCBpbnB1dCBtZW1iZXIiPyBPcgp0byBwdXQgaXQgZGlmZmVyZW50bHk6IGFyZSB3ZSB0byBhc3N1bWUgdGhhdCBldmVyeXRoaW5nIHRoYXQgYXBwZWFycwppbiBhIHNlY3Rpb24gY2FsbGVkICJGb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb25zIiByZWFsbHkgaXMgYQpmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24/IEkgYXNzdW1lIHRoYXQgMjcuNi4xLjIuMSBpcyBpbnRlbmRlZCB0bwphcHBseSB0byB0aGUgYXJpdGhtZXRpYyBleHRyYWN0b3JzICgyNy42LjEuMi4yKSwgYnV0IEkgYXNzdW1lIHRoYXQgaXQKaXMgbm90IGludGVuZGVkIHRvIGFwcGx5IHRvIGV4dHJhY3RvcnMgbGlrZSA8L3A+Cgo8cHJlPiAgICBiYXNpY19pc3RyZWFtJmFtcDsgb3BlcmF0b3ImZ3Q7Jmd0OyhiYXNpY19pc3RyZWFtJmFtcDsgKCpwZikoYmFzaWNfaXN0cmVhbSZhbXA7KSk7PC9wcmU+Cgo8cD5hbmQgPC9wPgoKPHByZT4gICAgYmFzaWNfaXN0cmVhbSZhbXA7IG9wZXJhdG9yJmd0OyZndDsoYmFzaWNfc3RyZWFtbWJ1ZiopOzwvcHJlPgoKPHA+VGhlcmUgaXMgYSBzaW1pbGFyIGFtYmlndWl0eSBmb3IgdW5mb3JtYXR0ZWQgaW5wdXQsIGZvcm1hdHRlZCBvdXRwdXQsIGFuZCB1bmZvcm1hdHRlZApvdXRwdXQuIDwvcD4KCjxwPkNvbW1lbnRzIGZyb20gSnVkeSBXYXJkOiBJdCBzZWVtcyBsaWtlIHRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlCmJhc2ljX2lzdHJlYW0gYW5kIGJhc2ljX29zdHJlYW0gb3BlcmF0b3IgJmx0OyZsdDsoKSdzIHRoYXQgYXJlIHVzZWQKZm9yIHRoZSBtYW5pcHVsYXRvcnMgYW5kIHN0cmVhbWJ1ZiogYXJlIGluIHRoZSB3cm9uZyBzZWN0aW9uIGFuZApzaG91bGQgaGF2ZSB0aGVpciBvd24gc2VwYXJhdGUgc2VjdGlvbiBvciBiZSBtb2RpZmllZCB0byBtYWtlIGl0IGNsZWFyCnRoYXQgdGhlICJDb21tb24gcmVxdWlyZW1lbnRzIiBsaXN0ZWQgaW4gc2VjdGlvbiAyNy42LjEuMi4xCihmb3IgYmFzaWNfaXN0cmVhbSkgYW5kIHNlY3Rpb24gMjcuNi4yLjUuMSAoZm9yIGJhc2ljX29zdHJlYW0pIGRvIG5vdAphcHBseSB0byB0aGVtLiA8L3A+Cgo8cD5BZGRpdGlvbmFsIGNvbW1lbnRzIGZyb20gRGlldG1hciBL/GhsOiBJdCBhcHBlYXJzIHRvIGJlIHNvbWV3aGF0Cm5vbnNlbnNpY2FsIHRvIGNvbnNpZGVyIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiAyNy42LjEuMi4zCltpc3RyZWFtOjpleHRyYWN0b3JzXSBwYXJhZ3JhcGhzIDEgdG8gNSB0byBiZSAiRm9ybWF0dGVkIGlucHV0CmZ1bmN0aW9uIiBidXQgc2luY2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGEgc2VjdGlvbgpsYWJlbGVkICJGb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb25zIiBpdCBpcyB1bmNsZWFyIHRvIG1lCndoZXRoZXIgdGhlc2Ugb3BlcmF0b3JzIGFyZSBjb25zaWRlcmVkIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbnMgd2hpY2gKaGF2ZSB0byBjb25mb3JtIHRvIHRoZSAiY29tbW9uIHJlcXVpcmVtZW50cyIgZnJvbSAyNy42LjEuMi4xCltpc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHNdOiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBhbGwgbWFuaXB1bGF0b3JzLCBub3QKanVzdCA8dHQ+d3M8L3R0Piwgd291bGQgc2tpcCB3aGl0ZXNwYWNlIHVubGVzcyA8dHQ+bm9za2lwd3M8L3R0PiBpcwpzZXQgKC4uLiBidXQgc2V0dGluZyA8dHQ+bm9za2lwd3M8L3R0PiB1c2luZyB0aGUgbWFuaXB1bGF0b3Igc3ludGF4CndvdWxkIGFsc28gc2tpcCB3aGl0ZXNwYWNlIDotKTwvcD4gPHA+SXQgaXMgbm90IGNsZWFyIHdoaWNoIGZ1bmN0aW9ucwphcmUgdG8gYmUgY29uc2lkZXJlZCB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbnMuIEFzIHdyaXR0ZW4sIGl0IHNlZW1zCnRoYXQgYWxsIGZ1bmN0aW9ucyBpbiAyNy42LjEuMyBbaXN0cmVhbS51bmZvcm1hdHRlZF0gYXJlIHVuZm9ybWF0dGVkIGlucHV0CmZ1bmN0aW9ucy4gSG93ZXZlciwgaXQgZG9lcyBub3QgcmVhbGx5IG1ha2UgbXVjaCBzZW5zZSB0byBjb25zdHJ1Y3QgYQpzZW50cnkgb2JqZWN0IGZvciA8dHQ+Z2NvdW50KCk8L3R0PiwgPHR0PnN5bmMoKTwvdHQ+LCAuLi4gQWxzbyBpdCBpcwp1bmNsZWFyIHdoYXQgaGFwcGVucyB0byB0aGUgPHR0Pmdjb3VudCgpPC90dD4gaWYKZWcuIDx0dD5nY291bnQoKTwvdHQ+LCA8dHQ+cHV0YmFjaygpPC90dD4sIDx0dD51bmdldCgpPC90dD4sIG9yCjx0dD5zeW5jKCk8L3R0PiBpcyBjYWxsZWQ6IFRoZXNlIGZ1bmN0aW9ucyBkb24ndCBleHRyYWN0IGNoYXJhY3RlcnMsCnNvbWUgb2YgdGhlbSBldmVuICJ1bmV4dHJhY3QiIGEgY2hhcmFjdGVyLiBTaG91bGQgdGhpcyBzdGlsbApiZSByZWZsZWN0ZWQgaW4gPHR0Pmdjb3VudCgpPC90dD4/IE9mIGNvdXJzZSwgaXQgY291bGQgYmUgcmVhZCBhcyBpZgphZnRlciBhIGNhbGwgdG8gPHR0Pmdjb3VudCgpPC90dD4gPHR0Pmdjb3VudCgpPC90dD4gcmV0dXJuIDx0dD4wPC90dD4KKHRoZSBsYXN0IHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uLCA8dHQ+Z2NvdW50KCk8L3R0PiwgZGlkbid0CmV4dHJhY3QgYW55IGNoYXJhY3RlcikgYW5kIGFmdGVyIGEgY2FsbCB0byA8dHQ+cHV0YmFjaygpPC90dD4KPHR0Pmdjb3VudCgpPC90dD4gcmV0dXJucyA8dHQ+LTE8L3R0PiAodGhlIGxhc3QgdW5mb3JtYXR0ZWQgaW5wdXQKZnVuY3Rpb24gPHR0PnB1dGJhY2soKTwvdHQ+IGRpZCAiZXh0cmFjdCIgYmFjayBpbnRvIHRoZQpzdHJlYW0pLiBDb3JyZXNwb25kaW5nbHkgZm9yIDx0dD51bmdldCgpPC90dD4uIElzIHRoaXMgd2hhdCBpcwppbnRlbmRlZD8gIElmIHNvLCB0aGlzIHNob3VsZCBiZSBjbGFyaWZpZWQuIE90aGVyd2lzZSwgYSBjb3JyZXNwb25kaW5nCmNsYXJpZmljYXRpb24gc2hvdWxkIGJlIHVzZWQuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDI3LjYuMS4yLjIgW2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5hcml0aG1ldGljXSwgcGFyYWdyYXBoIDEuCkNoYW5nZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWNvbmQgc2VudGVuY2UgZnJvbSAiVGhlIGNvbnZlcnNpb24Kb2NjdXJzIiB0byAiVGhlc2UgZXh0cmFjdG9ycyBiZWhhdmUgYXMgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucyAoYXMKZGVzY3JpYmVkIGluIDI3LjYuMS4yLjEpLiAgQWZ0ZXIgYSBzZW50cnkgb2JqZWN0IGlzIGNvbnN0cnVjdGVkLAp0aGUgY29udmVyc2lvbiBvY2N1cnMiCjwvcD4KCjxwPgpJbiAyNy42LjEuMi4zLCBbbGliLmlzdHJlYW06OmV4dHJhY3RvcnNdLCBiZWZvcmUgcGFyYWdyYXBoIDEuCkFkZCBhbiBlZmZlY3RzIGNsYXVzZS4gICJFZmZlY3RzOiBOb25lLiAgVGhpcyBleHRyYWN0b3IgZG9lcwpub3QgYmVoYXZlIGFzIGEgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4KMjcuNi4xLjIuMSkuCjwvcD4KCjxwPgpJbiAyNy42LjEuMi4zLCBbbGliLmlzdHJlYW06OmV4dHJhY3RvcnNdLCBwYXJhZ3JhcGggMi4gIENoYW5nZSB0aGUKZWZmZWN0cyBjbGF1c2UgdG8gIkVmZmVjdHM6IENhbGxzIHBmKCp0aGlzKS4gIFRoaXMgZXh0cmFjdG9yIGRvZXMgbm90CmJlaGF2ZSBhcyBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMS4yLjEpLgo8L3A+Cgo8cD4KSW4gMjcuNi4xLjIuMywgW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXSwgcGFyYWdyYXBoIDQuICBDaGFuZ2UgdGhlCmVmZmVjdHMgY2xhdXNlIHRvICJFZmZlY3RzOiBDYWxscyBwZigqdGhpcykuICBUaGlzIGV4dHJhY3RvciBkb2VzIG5vdApiZWhhdmUgYXMgYSBmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjEuMi4xKS4KPC9wPgoKPHA+CkluIDI3LjYuMS4yLjMsIFtsaWIuaXN0cmVhbTo6ZXh0cmFjdG9yc10sIHBhcmFncmFwaCAxMi4gIENoYW5nZSB0aGUKZmlyc3QgdHdvIHNlbnRlbmNlcyBmcm9tICJJZiBzYiBpcyBudWxsLCBjYWxscyBzZXRzdGF0ZShmYWlsYml0KSwKd2hpY2ggbWF5IHRocm93IGlvc19iYXNlOjpmYWlsdXJlICgyNy40LjQuMykuICBFeHRyYWN0cyBjaGFyYWN0ZXJzCmZyb20gKnRoaXMuLi4iIHRvICJCZWhhdmVzIGFzIGEgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQKaW4gMjcuNi4xLjIuMSkuICBJZiBzYiBpcyBudWxsLCBjYWxscyBzZXRzdGF0ZShmYWlsYml0KSwgd2hpY2ggbWF5CnRocm93IGlvc19iYXNlOjpmYWlsdXJlICgyNy40LjQuMykuICBBZnRlciBhIHNlbnRyeSBvYmplY3QgaXMKY29uc3RydWN0ZWQsIGV4dHJhY3RzIGNoYXJhY3RlcnMgZnJvbSAqdGhpcy4uLiIuCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgYmVmb3JlIHBhcmFncmFwaCAyLiAgQWRkIGFuCmVmZmVjdHMgY2xhdXNlLiAgIkVmZmVjdHM6IG5vbmUuIFRoaXMgbWVtYmVyIGZ1bmN0aW9uIGRvZXMgbm90IGJlaGF2ZQphcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSkuIgo8L3A+Cgo8cD4KSW4gMjcuNi4xLjMsIFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCAzLiAgQ2hhbmdlIHRoZQpiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IHNlbnRlbmNlIG9mIHRoZSBlZmZlY3RzIGNsYXVzZSBmcm9tICJFeHRyYWN0cyBhCmNoYXJhY3RlciIgdG8gIkJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZAppbiAyNy42LjEuMywgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgZXh0cmFjdHMgYQpjaGFyYWN0ZXIiCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDUuICBDaGFuZ2UgdGhlCmJlZ2lubmluZyBvZiB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgdGhlIGVmZmVjdHMgY2xhdXNlIGZyb20gIkV4dHJhY3RzIGEKY2hhcmFjdGVyIiB0byAiQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkCmluIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSkuICBBZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBleHRyYWN0cyBhCmNoYXJhY3RlciIKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggNy4gIENoYW5nZSB0aGUKYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiB0aGUgZWZmZWN0cyBjbGF1c2UgZnJvbSAiRXh0cmFjdHMKY2hhcmFjdGVycyIgdG8gIkJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZAppbiAyNy42LjEuMywgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgZXh0cmFjdHMKY2hhcmFjdGVycyIKPC9wPgoKPHA+CltObyBjaGFuZ2UgbmVlZGVkIGluIHBhcmFncmFwaCAxMCwgYmVjYXVzZSBpdCByZWZlcnMgdG8gcGFyYWdyYXBoIDcuXQo8L3A+Cgo8cD4KSW4gMjcuNi4xLjMsIFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCAxMi4gIENoYW5nZSB0aGUKYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiB0aGUgZWZmZWN0cyBjbGF1c2UgZnJvbSAiRXh0cmFjdHMKY2hhcmFjdGVycyIgdG8gIkJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZAppbiAyNy42LjEuMywgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgZXh0cmFjdHMKY2hhcmFjdGVycyIKPC9wPgoKPHA+CltObyBjaGFuZ2UgbmVlZGVkIGluIHBhcmFncmFwaCAxNS5dCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDE3LiAgQ2hhbmdlIHRoZQpiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IHNlbnRlbmNlIG9mIHRoZSBlZmZlY3RzIGNsYXVzZSBmcm9tICJFeHRyYWN0cwpjaGFyYWN0ZXJzIiB0byAiQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkCmluIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSkuICBBZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBleHRyYWN0cwpjaGFyYWN0ZXJzIgo8L3A+Cgo8cD4KW05vIGNoYW5nZSBuZWVkZWQgaW4gcGFyYWdyYXBoIDIzLl0KPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggMjQuICBDaGFuZ2UgdGhlCmJlZ2lubmluZyBvZiB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgdGhlIGVmZmVjdHMgY2xhdXNlIGZyb20gIkV4dHJhY3RzCmNoYXJhY3RlcnMiIHRvICJCZWhhdmVzIGFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQKaW4gMjcuNi4xLjMsIHBhcmFncmFwaCAxKS4gIEFmdGVyIGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QsIGV4dHJhY3RzCmNoYXJhY3RlcnMiCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgYmVmb3JlIHBhcmFncmFwaCAyNy4gIEFkZCBhbgpFZmZlY3RzIGNsYXVzZTogIkVmZmVjdHM6IEJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzCmRlc2NyaWJlZCBpbiAyNy42LjEuMywgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5Cm9iamVjdCwgcmVhZHMgYnV0IGRvZXMgbm90IGV4dHJhY3QgdGhlIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyLiIKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggMjguICBDaGFuZ2UgdGhlCmZpcnN0IHNlbnRlbmNlIG9mIHRoZSBFZmZlY3RzIGNsYXVzZSBmcm9tICJJZiAhZ29vZCgpIGNhbGxzIiB0bwpCZWhhdmVzIGFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4xLjMsCnBhcmFncmFwaCAxKS4gIEFmdGVyIGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QsIGlmICFnb29kKCkgY2FsbHMiCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDMwLiAgQ2hhbmdlIHRoZQpmaXJzdCBzZW50ZW5jZSBvZiB0aGUgRWZmZWN0cyBjbGF1c2UgZnJvbSAiSWYgIWdvb2QoKSBjYWxscyIgdG8KIkJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjEuMywKcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgIWdvb2QoKSBjYWxscyIKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggMzIuICBDaGFuZ2UgdGhlCmZpcnN0IHNlbnRlbmNlIG9mIHRoZSBFZmZlY3RzIGNsYXVzZSBmcm9tICJJZiAhZ29vZCgpIGNhbGxzLi4uIiB0bwoiQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMS4zLApwYXJhZ3JhcGggMSkuICBBZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBpZiAhZ29vZCgpCmNhbGxzLi4uIiAgQWRkIGEgbmV3IHNlbnRlbmNlIHRvIHRoZSBlbmQgb2YgdGhlIEVmZmVjdHMgY2xhdXNlOgoiW05vdGU6IHRoaXMgZnVuY3Rpb24gZXh0cmFjdHMgbm8gY2hhcmFjdGVycywgc28gdGhlIHZhbHVlIHJldHVybmVkCmJ5IHRoZSBuZXh0IGNhbGwgdG8gZ2NvdW50KCkgaXMgMC5dIgo8L3A+Cgo8cD4KSW4gMjcuNi4xLjMsIFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCAzNC4gIENoYW5nZSB0aGUKZmlyc3Qgc2VudGVuY2Ugb2YgdGhlIEVmZmVjdHMgY2xhdXNlIGZyb20gIklmICFnb29kKCkgY2FsbHMiIHRvCiJCZWhhdmVzIGFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4xLjMsCnBhcmFncmFwaCAxKS4gIEFmdGVyIGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QsIGlmICFnb29kKCkgY2FsbHMiLgpBZGQgYSBuZXcgc2VudGVuY2UgdG8gdGhlIGVuZCBvZiB0aGUgRWZmZWN0cyBjbGF1c2U6ICJbTm90ZTogdGhpcwpmdW5jdGlvbiBleHRyYWN0cyBubyBjaGFyYWN0ZXJzLCBzbyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIG5leHQKY2FsbCB0byBnY291bnQoKSBpcyAwLl0iCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDM2LiAgQ2hhbmdlIHRoZQpmaXJzdCBzZW50ZW5jZSBvZiB0aGUgRWZmZWN0cyBjbGF1c2UgZnJvbSAiSWYgIXJkYnVmKCkgaXMiIHRvICJCZWhhdmVzCmFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4xLjMsIHBhcmFncmFwaAoxKSwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgY291bnQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4dHJhY3RlZAphbmQgZG9lcyBub3QgYWZmZWN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBzdWJzZXF1ZW50IGNhbGxzIHRvCmdjb3VudCgpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgcmRidWYoKSBpcyIKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBiZWZvcmUgcGFyYWdyYXBoIDM3LiAgQWRkIGFuCkVmZmVjdHMgY2xhdXNlOiAiRWZmZWN0czogQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMKZGVzY3JpYmVkIGluIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSksIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IGNvdW50IHRoZQpudW1iZXIgb2YgY2hhcmFjdGVycyBleHRyYWN0ZWQgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgdmFsdWUgcmV0dXJuZWQKYnkgc3Vic2VxdWVudCBjYWxscyB0byBnY291bnQoKS4iICBDaGFuZ2UgdGhlIGZpcnN0IHNlbnRlbmNlIG9mCnBhcmFncmFwaCAzNyBmcm9tICJpZiBmYWlsKCkiIHRvICJhZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LAppZiBmYWlsKCkiLgo8L3A+Cgo8cD4KSW4gMjcuNi4xLjMsIFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCAzOC4gIENoYW5nZSB0aGUKZmlyc3Qgc2VudGVuY2Ugb2YgdGhlIEVmZmVjdHMgY2xhdXNlIGZyb20gIklmIGZhaWwoKSIgdG8gIkJlaGF2ZXMKYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjEuMywgcGFyYWdyYXBoCjEpLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBjb3VudCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXh0cmFjdGVkCmFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHN1YnNlcXVlbnQgY2FsbHMgdG8KZ2NvdW50KCkuICBBZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBpZiBmYWlsKCkKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggNDAuICBDaGFuZ2UgdGhlCmZpcnN0IHNlbnRlbmNlIG9mIHRoZSBFZmZlY3RzIGNsYXVzZSBmcm9tICJJZiBmYWlsKCkiIHRvICJCZWhhdmVzCmFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4xLjMsIHBhcmFncmFwaAoxKSwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgY291bnQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4dHJhY3RlZAphbmQgZG9lcyBub3QgYWZmZWN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBzdWJzZXF1ZW50IGNhbGxzIHRvCmdjb3VudCgpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgZmFpbCgpCjwvcD4KCjxwPgpJbiAyNy42LjIuNS4yIFtsaWIub3N0cmVhbS5pbnNlcnRlcnMuYXJpdGhtZXRpY10sIHBhcmFncmFwaCAxLiAgQ2hhbmdlCnRoZSBiZWdpbm5pbmcgb2YgdGhlIHRoaXJkIHNlbnRlbmNlIGZyb20gIlRoZSBmb3JtYXR0aW5nIGNvbnZlcnNpb24iCnRvICJUaGVzZSBleHRyYWN0b3JzIGJlaGF2ZSBhcyBmb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9ucyAoYXMKZGVzY3JpYmVkIGluIDI3LjYuMi41LjEpLiAgQWZ0ZXIgdGhlIHNlbnRyeSBvYmplY3QgaXMgY29uc3RydWN0ZWQsIHRoZQpjb252ZXJzaW9uIG9jY3VycyIuCjwvcD4KCjxwPgpJbiAyNy42LjIuNS4zIFtsaWIub3N0cmVhbS5pbnNlcnRlcnNdLCBiZWZvcmUgcGFyYWdyYXBoIDEuICBBZGQgYW4KZWZmZWN0cyBjbGF1c2U6ICJFZmZlY3RzOiBOb25lLiBEb2VzIG5vdCBiZWhhdmUgYXMgYSBmb3JtYXR0ZWQgb3V0cHV0CmZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4yLjUuMSkuIi4KPC9wPgoKPHA+CkluIDI3LjYuMi41LjMgW2xpYi5vc3RyZWFtLmluc2VydGVyc10sIHBhcmFncmFwaCAyLiAgQ2hhbmdlIHRoZQplZmZlY3RzIGNsYXVzZSB0byAiRWZmZWN0czogY2FsbHMgcGYoKnRoaXMpLiAgVGhpcyBleHRyYWN0b3IgZG9lcyBub3QKYmVoYXZlIGFzIGEgZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMi41LjEpLiIuCjwvcD4KCjxwPgpJbiAyNy42LjIuNS4zIFtsaWIub3N0cmVhbS5pbnNlcnRlcnNdLCBwYXJhZ3JhcGggNC4gIENoYW5nZSB0aGUKZWZmZWN0cyBjbGF1c2UgdG8gIkVmZmVjdHM6IGNhbGxzIHBmKCp0aGlzKS4gIFRoaXMgZXh0cmFjdG9yIGRvZXMgbm90CmJlaGF2ZSBhcyBhIGZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjIuNS4xKS4iLgo8L3A+Cgo8cD4KSW4gMjcuNi4yLjUuMyBbbGliLm9zdHJlYW0uaW5zZXJ0ZXJzXSwgcGFyYWdyYXBoIDYuICBDaGFuZ2UgdGhlIGZpcnN0CnNlbnRlbmNlIGZyb20gIklmIHNiIiB0byAiQmVoYXZlcyBhcyBhIGZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb24gKGFzCmRlc2NyaWJlZCBpbiAyNy42LjIuNS4xKS4gIEFmdGVyIHRoZSBzZW50cnkgb2JqZWN0IGlzIGNvbnN0cnVjdGVkLCBpZgpzYiIuCjwvcD4KCjxwPgpJbiAyNy42LjIuNiBbbGliLm9zdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggMi4gIENoYW5nZSB0aGUgZmlyc3QKc2VudGVuY2UgZnJvbSAiSW5zZXJ0cyB0aGUgY2hhcmFjdGVyIiB0byAiQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZApvdXRwdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjIuNiwgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIKY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaW5zZXJ0cyB0aGUgY2hhcmFjdGVyIi4KPC9wPgoKPHA+CkluIDI3LjYuMi42IFtsaWIub3N0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCA1LiAgQ2hhbmdlIHRoZSBmaXJzdApzZW50ZW5jZSBmcm9tICJPYnRhaW5zIGNoYXJhY3RlcnMiIHRvICJCZWhhdmVzIGFzIGFuIHVuZm9ybWF0dGVkCm91dHB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMi42LCBwYXJhZ3JhcGggMSkuICBBZnRlcgpjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBvYnRhaW5zIGNoYXJhY3RlcnMiLgo8L3A+Cgo8cD4KSW4gMjcuNi4yLjYgW2xpYi5vc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDcuICBBZGQgYSBuZXcKc2VudGVuY2UgYXQgdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoOiAiRG9lcyBub3QgYmVoYXZlIGFzIGFuCnVuZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMi42LCBwYXJhZ3JhcGggMSkuIgo8L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlNlZSBKMTYvOTktMDA0Mz09V0cyMS9OMTIxOSwgUHJvcG9zZWQgUmVzb2x1dGlvbiB0byBMaWJyYXJ5IElzc3VlIDYwLApieSBKdWR5IFdhcmQgYW5kIE1hdHQgQXVzdGVybi4gIFRoaXMgcHJvcG9zZWQgcmVzb2x1dGlvbiBpcyBzZWN0aW9uClZJIG9mIHRoYXQgcGFwZXIuPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjYxIj48L2E+NjEuIEFtYmlndWl0eSBpbiBpb3N0cmVhbXMgZXhjZXB0aW9uIHBvbGljeTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjEuMyBbaXN0cmVhbS51bmZvcm1hdHRlZF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAxOTk4LTA4LTA2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpc3RyZWFtLnVuZm9ybWF0dGVkIj5pc3N1ZXM8L2E+IGluIFtpc3RyZWFtLnVuZm9ybWF0dGVkXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIGludHJvZHVjdGlvbiB0byB0aGUgc2VjdGlvbiBvbiB1bmZvcm1hdHRlZCBpbnB1dCAoMjcuNi4xLjMpCnNheXMgdGhhdCBldmVyeSB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiBjYXRjaGVzIGFsbCBleGNlcHRpb25zIHRoYXQKd2VyZSB0aHJvd24gZHVyaW5nIGlucHV0LCBzZXRzIGJhZGJpdCwgYW5kIHRoZW4gY29uZGl0aW9uYWxseSByZXRocm93cwp0aGUgZXhjZXB0aW9uLiBUaGF0IHNlZW1zIGNsZWFyIGVub3VnaC4gU2V2ZXJhbCBvZiB0aGUgc3BlY2lmaWMKZnVuY3Rpb25zLCBob3dldmVyLCBzdWNoIGFzIGdldCgpIGFuZCByZWFkKCksIGFyZSBkb2N1bWVudGVkIGluIHNvbWUKY2lyY3Vtc3RhbmNlcyBhcyBzZXR0aW5nIGVvZmJpdCBhbmQvb3IgZmFpbGJpdC4gKFRoZSBzdGFuZGFyZCBub3RlcywKY29ycmVjdGx5LCB0aGF0IHNldHRpbmcgZW9mYml0IG9yIGZhaWxiaXQgY2FuIHNvbWV0aW1lcyByZXN1bHQgaW4gYW4KZXhjZXB0aW9uIGJlaW5nIHRocm93bi4pIFRoZSBxdWVzdGlvbjogaWYgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucwp0aHJvd3MgYW4gZXhjZXB0aW9uIHRyaWdnZXJlZCBieSBzZXR0aW5nIGZhaWxiaXQsIGlzIHRoaXMgYW4gZXhjZXB0aW9uCiJ0aHJvd24gZHVyaW5nIGlucHV0IiBhbmQgaGVuY2UgY292ZXJlZCBieSAyNy42LjEuMywgb3IgZG9lcwoyNy42LjEuMyBvbmx5IHJlZmVyIHRvIGEgbGltaXRlZCBjbGFzcyBvZiBleGNlcHRpb25zPyBKdXN0IHRvIG1ha2UKdGhpcyBjb25jcmV0ZSwgc3VwcG9zZSB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIHNuaXBwZXQuIDwvcD4KCjxwcmU+ICAKICBjaGFyIGJ1ZmZlcltOXTsKICBpc3RyZWFtIGlzOwogIC4uLgogIGlzLmV4Y2VwdGlvbnMoaXN0cmVhbTo6ZmFpbGJpdCk7IC8vIFRocm93IG9uIGZhaWxiaXQgYnV0IG5vdCBvbiBiYWRiaXQuCiAgaXMucmVhZChidWZmZXIsIE4pOzwvcHJlPgoKPHA+Tm93IHN1cHBvc2Ugd2UgcmVhY2ggRU9GIGJlZm9yZSB3ZSd2ZSByZWFkIE4gY2hhcmFjdGVycy4gV2hhdAppb3N0YXRlIGJpdHMgY2FuIHdlIGV4cGVjdCB0byBiZSBzZXQsIGFuZCB3aGF0IGV4Y2VwdGlvbiAoaWYgYW55KSB3aWxsCmJlIHRocm93bj8gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSwgYWZ0ZXIgdGhlIHNlbnRlbmNlIHRoYXQgYmVnaW5zCiJJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duLi4uIiwgYWRkIHRoZSBmb2xsb3dpbmcKcGFyZW50aGV0aWNhbCBjb21tZW50OiAiKEV4Y2VwdGlvbnMgdGhyb3duIGZyb20gCjx0dD5iYXNpY19pb3MmbHQ7Jmd0Ozo6Y2xlYXIoKTwvdHQ+IGFyZSBub3QgY2F1Z2h0IG9yIHJldGhyb3duLikiCjwvcD4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBsb29rZWQgdG8gdHdvIGFsdGVybmF0aXZlIHdvcmRpbmdzLCBhbmQgY2hvb3NlIHRoZSBwcm9wb3NlZApyZXNvbHV0aW9uIGFzIGJldHRlciBzdGFuZGFyZGVzZS48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjIiPjwvYT42Mi4gPHR0PlN5bmM8L3R0PidzIHJldHVybiB2YWx1ZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjEuMyBbaXN0cmVhbS51bmZvcm1hdHRlZF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAxOTk4LTA4LTA2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpc3RyZWFtLnVuZm9ybWF0dGVkIj5pc3N1ZXM8L2E+IGluIFtpc3RyZWFtLnVuZm9ybWF0dGVkXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIEVmZmVjdHMgY2xhdXNlIGZvciBzeW5jKCkgKDI3LjYuMS4zLCBwYXJhZ3JhcGggMzYpIHNheXMgdGhhdCBpdAoiY2FsbHMgcmRidWYoKS0mZ3Q7cHVic3luYygpIGFuZCwgaWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIC0xCi4uLiByZXR1cm5zIHRyYWl0czo6ZW9mKCkuIiA8L3A+Cgo8cD5UaGF0IGxvb2tzIHN1c3BpY2lvdXMsIGJlY2F1c2UgdHJhaXRzOjplb2YoKSBpcyBvZiB0eXBlCnRyYWl0czo6aW50X3R5cGUgd2hpbGUgdGhlIHJldHVybiB0eXBlIG9mIHN5bmMoKSBpcyBpbnQuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjYuMS4zIFtpc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDM2LCBjaGFuZ2UgInJldHVybnMKPHR0PnRyYWl0czo6ZW9mKCk8L3R0PiIgdG8gInJldHVybnMgPHR0Pi0xPC90dD4iLgo8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjMiPjwvYT42My4gRXhjZXB0aW9uLWhhbmRsaW5nIHBvbGljeSBmb3IgdW5mb3JtYXR0ZWQgb3V0cHV0PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjYuMi43IFtvc3RyZWFtLnVuZm9ybWF0dGVkXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXR0IEF1c3Rlcm4gPGI+RGF0ZTo8L2I+IDE5OTgtMDgtMTE8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI29zdHJlYW0udW5mb3JtYXR0ZWQiPmlzc3VlczwvYT4gaW4gW29zdHJlYW0udW5mb3JtYXR0ZWRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5DbGF1c2UgMjcgZGV0YWlscyBhbiBleGNlcHRpb24taGFuZGxpbmcgcG9saWN5IGZvciBmb3JtYXR0ZWQgaW5wdXQsCnVuZm9ybWF0dGVkIGlucHV0LCBhbmQgZm9ybWF0dGVkIG91dHB1dC4gSXQgc2F5cyBub3RoaW5nIGZvcgp1bmZvcm1hdHRlZCBvdXRwdXQgKDI3LjYuMi42KS4gMjcuNi4yLjYgc2hvdWxkIGVpdGhlciBpbmNsdWRlIHRoZSBzYW1lCmtpbmQgb2YgZXhjZXB0aW9uLWhhbmRsaW5nIHBvbGljeSBhcyBpbiB0aGUgb3RoZXIgdGhyZWUgcGxhY2VzLCBvcgplbHNlIGl0IHNob3VsZCBoYXZlIGEgZm9vdG5vdGUgc2F5aW5nIHRoYXQgdGhlIG9taXNzaW9uIGlzCmRlbGliZXJhdGUuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiAyNy42LjIuNiwgcGFyYWdyYXBoIDEsIHJlcGxhY2UgdGhlIGxhc3Qgc2VudGVuY2UgKCJJbiBhbnkKY2FzZSwgdGhlIHVuZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbiBlbmRzIGJ5IGRlc3Ryb3lpbmcgdGhlIHNlbnRyeQpvYmplY3QsIHRoZW4gcmV0dXJuaW5nIHRoZSB2YWx1ZSBzcGVjaWZpZWQgZm9yIHRoZSBmb3JtYXR0ZWQgb3V0cHV0CmZ1bmN0aW9uLiIpIHdpdGggdGhlIGZvbGxvd2luZyB0ZXh0Ogo8L3A+CjxibG9ja3F1b3RlPjxwPgpJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGR1cmluZyBvdXRwdXQsIHRoZW4gPHR0Pmlvczo6YmFkYml0PC90dD4gaXMKdHVybmVkIG9uIFtGb290bm90ZTogd2l0aG91dCBjYXVzaW5nIGFuIDx0dD5pb3M6OmZhaWx1cmU8L3R0PiB0byBiZQp0aHJvd24uXSBpbiA8dHQ+KnRoaXM8L3R0PidzIGVycm9yIHN0YXRlLiBJZiA8dHQ+KGV4Y2VwdGlvbnMoKSAmYW1wOwpiYWRiaXQpICE9IDA8L3R0PiB0aGVuIHRoZSBleGNlcHRpb24gaXMgcmV0aHJvd24uICBJbiBhbnkgY2FzZSwgdGhlCnVuZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbiBlbmRzIGJ5IGRlc3Ryb3lpbmcgdGhlIHNlbnRyeSBvYmplY3QsCnRoZW4sIGlmIG5vIGV4Y2VwdGlvbiB3YXMgdGhyb3duLCByZXR1cm5pbmcgdGhlIHZhbHVlIHNwZWNpZmllZCBmb3IKdGhlIGZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb24uCjwvcD48L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUaGlzIGV4Y2VwdGlvbi1oYW5kbGluZyBwb2xpY3kgaXMgY29uc2lzdGVudCB3aXRoIHRoYXQgb2YgZm9ybWF0dGVkCmlucHV0LCB1bmZvcm1hdHRlZCBpbnB1dCwgYW5kIGZvcm1hdHRlZCBvdXRwdXQuCjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2NCI+PC9hPjY0LiBFeGNlcHRpb24gaGFuZGxpbmcgaW4gPHR0PmJhc2ljX2lzdHJlYW06Om9wZXJhdG9yJmd0OyZndDsoYmFzaWNfc3RyZWFtYnVmKik8L3R0PjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjEuMi4zIFtpc3RyZWFtOjpleHRyYWN0b3JzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXR0IEF1c3Rlcm4gPGI+RGF0ZTo8L2I+IDE5OTgtMDgtMTE8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lzdHJlYW06OmV4dHJhY3RvcnMiPmlzc3VlczwvYT4gaW4gW2lzdHJlYW06OmV4dHJhY3RvcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4yNy42LjEuMi4zLCBwYXJhZ3JhcGggMTMsIGlzIGFtYmlndW91cy4gSXQgY2FuIGJlIGludGVycHJldGVkIHR3bwpkaWZmZXJlbnQgd2F5cywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHNlY29uZCBzZW50ZW5jZSBpcyByZWFkIGFzIGFuCmVsYWJvcmF0aW9uIG9mIHRoZSBmaXJzdC4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSAyNy42LjEuMi4zIFtpc3RyZWFtOjpleHRyYWN0b3JzXSwgcGFyYWdyYXBoIDEzLCB3aGljaCBiZWdpbnMKIklmIHRoZSBmdW5jdGlvbiBpbnNlcnRzIG5vIGNoYXJhY3RlcnMgLi4uIiB3aXRoOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPklmIHRoZSBmdW5jdGlvbiBpbnNlcnRzIG5vIGNoYXJhY3RlcnMsIGl0IGNhbGxzCiAgPHR0PnNldHN0YXRlKGZhaWxiaXQpPC90dD4sIHdoaWNoIG1heSB0aHJvdwogIDx0dD5pb3NfYmFzZTo6ZmFpbHVyZTwvdHQ+ICgyNy40LjQuMykuIElmIGl0IGluc2VydGVkIG5vIGNoYXJhY3RlcnMKICBiZWNhdXNlIGl0IGNhdWdodCBhbiBleGNlcHRpb24gdGhyb3duIHdoaWxlIGV4dHJhY3RpbmcgY2hhcmFjdGVycwogIGZyb20gPHR0PnNiPC90dD4gYW5kIDx0dD5mYWlsYml0PC90dD4gaXMgb24gaW4gPHR0PmV4Y2VwdGlvbnMoKTwvdHQ+CiAgKDI3LjQuNC4zKSwgdGhlbiB0aGUgY2F1Z2h0IGV4Y2VwdGlvbiBpcyByZXRocm93bi4gPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjYiPjwvYT42Ni4gU3Ryc3RyZWFtYnVmOjpzZXRidWY8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gRC43LjEuMyBbZGVwci5zdHJzdHJlYW1idWYudmlydHVhbHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0xODwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjZGVwci5zdHJzdHJlYW1idWYudmlydHVhbHMiPmlzc3VlczwvYT4gaW4gW2RlcHIuc3Ryc3RyZWFtYnVmLnZpcnR1YWxzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+RC43LjEuMywgcGFyYWdyYXBoIDE5LCBzYXlzIHRoYXQgc3Ryc3RyZWFtYnVmOjpzZXRidWYKIlBlcmZvcm1zIGFuIG9wZXJhdGlvbiB0aGF0IGlzIGRlZmluZWQgc2VwYXJhdGVseSBmb3IgZWFjaCBjbGFzcwpkZXJpdmVkIGZyb20gc3Ryc3RyZWFtYnVmIi4gVGhpcyBpcyBvYnZpb3VzbHkgYW4gaW5jb3JyZWN0CmN1dC1hbmQtcGFzdGUgZnJvbSBiYXNpY19zdHJlYW1idWYuIFRoZXJlIGFyZSBubyBjbGFzc2VzIGRlcml2ZWQgZnJvbQpzdHJzdHJlYW1idWYuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkQuNy4xLjMgW2RlcHIuc3Ryc3RyZWFtYnVmLnZpcnR1YWxzXSwgcGFyYWdyYXBoIDE5LCByZXBsYWNlIHRoZSBzZXRidWYgZWZmZWN0cwpjbGF1c2Ugd2hpY2ggY3VycmVudGx5IHNheXMgIlBlcmZvcm1zIGFuIG9wZXJhdGlvbiB0aGF0IGlzCmRlZmluZWQgc2VwYXJhdGVseSBmb3IgZWFjaCBjbGFzcyBkZXJpdmVkIGZyb20gc3Ryc3RyZWFtYnVmIgp3aXRoOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjxiPkVmZmVjdHM8L2I+OiBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLCBleGNlcHQgdGhhdAogIDx0dD5zZXRidWYoMCwwKTwvdHQ+IGhhcyBubyBlZmZlY3QuPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjgiPjwvYT42OC4gRXh0cmFjdG9ycyBmb3IgY2hhciogc2hvdWxkIHN0b3JlIG51bGwgYXQgZW5kPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjYuMS4yLjMgW2lzdHJlYW06OmV4dHJhY3RvcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEFuZ2VsaWthIExhbmdlciA8Yj5EYXRlOjwvYj4gMTk5OC0wNy0xNDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaXN0cmVhbTo6ZXh0cmFjdG9ycyI+aXNzdWVzPC9hPiBpbiBbaXN0cmVhbTo6ZXh0cmFjdG9yc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkV4dHJhY3RvcnMgZm9yIGNoYXIqICgyNy42LjEuMi4zKSBkbyBub3Qgc3RvcmUgYSBudWxsIGNoYXJhY3RlcgphZnRlciB0aGUgZXh0cmFjdGVkIGNoYXJhY3RlciBzZXF1ZW5jZSB3aGVyZWFzIHRoZSB1bmZvcm1hdHRlZApmdW5jdGlvbnMgbGlrZSBnZXQoKSBkby4gV2h5IGlzIHRoaXM/PC9wPgoKPHA+Q29tbWVudCBmcm9tIEplcnJ5IFNjaHdhcno6IFRoZXJlIGlzIGFwcGFyZW50bHkgYW4gZWRpdGluZwpnbGl0Y2guIFlvdSdsbCBub3RpY2UgdGhhdCB0aGUgbGFzdCBpdGVtIG9mIHRoZSBsaXN0IG9mIHdoYXQgc3RvcHMKZXh0cmFjdGlvbiBkb2Vzbid0IG1ha2UgYW55IHNlbnNlLiBJdCB3YXMgc3VwcG9zZWQgdG8gYmUgdGhlIGxpbmUgdGhhdApzYWlkIGEgbnVsbCBpcyBzdG9yZWQuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+MjcuNi4xLjIuMyBbaXN0cmVhbTo6ZXh0cmFjdG9yc10sIHBhcmFncmFwaCA3LCBjaGFuZ2UgdGhlIGxhc3QgbGlzdAppdGVtIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgQSBudWxsIGJ5dGUgKDx0dD5jaGFyVCgpPC90dD4pIGluIHRoZSBuZXh0IHBvc2l0aW9uLCB3aGljaCBtYXkgYmUKICB0aGUgZmlyc3QgcG9zaXRpb24gaWYgbm8gY2hhcmFjdGVycyB3ZXJlIGV4dHJhY3RlZC4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPnRvIGJlY29tZSBhIG5ldyBwYXJhZ3JhcGggd2hpY2ggcmVhZHM6PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgT3BlcmF0b3ImZ3Q7Jmd0OyB0aGVuIHN0b3JlcyBhIG51bGwgYnl0ZSAoPHR0PmNoYXJUKCk8L3R0PikgaW4gdGhlCiAgbmV4dCBwb3NpdGlvbiwgd2hpY2ggbWF5IGJlIHRoZSBmaXJzdCBwb3NpdGlvbiBpZiBubyBjaGFyYWN0ZXJzIHdlcmUKICBleHRyYWN0ZWQuCjwvcD48L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjkiPjwvYT42OS4gTXVzdCBlbGVtZW50cyBvZiBhIHZlY3RvciBiZSBjb250aWd1b3VzPzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4yLjYgW3ZlY3Rvcl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQW5kcmV3IEtvZW5pZyA8Yj5EYXRlOjwvYj4gMTk5OC0wNy0yOTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjdmVjdG9yIj5pc3N1ZXM8L2E+IGluIFt2ZWN0b3JdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgaXNzdWUgaXMgdGhpczogTXVzdCB0aGUgZWxlbWVudHMgb2YgYSB2ZWN0b3IgYmUgaW4gY29udGlndW91cyBtZW1vcnk/PC9wPgoKPHA+KFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBlbnRpcmVseSBzZXBhcmF0ZSBmcm9tIHRoZSBxdWVzdGlvbiBvZgp3aGV0aGVyIGEgdmVjdG9yIGl0ZXJhdG9yIGlzIHJlcXVpcmVkIHRvIGJlIGEgcG9pbnRlcjsgdGhlIGFuc3dlciB0bwp0aGF0IHF1ZXN0aW9uIGlzIGNsZWFybHkgIm5vLCIgYXMgaXQgd291bGQgcnVsZSBvdXQKZGVidWdnaW5nIGltcGxlbWVudGF0aW9ucyk8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgdGhlIGZvbGxvd2luZyB0ZXh0IHRvIHRoZSBlbmQgb2YgMjMuMi42IFt2ZWN0b3JdLApwYXJhZ3JhcGggMS4gPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+VGhlIGVsZW1lbnRzIG9mIGEgdmVjdG9yIGFyZSBzdG9yZWQgY29udGlndW91c2x5LCBtZWFuaW5nIHRoYXQgaWYKICB2IGlzIGEgPHR0PnZlY3RvciZsdDtULCBBbGxvY2F0b3ImZ3Q7PC90dD4gd2hlcmUgVCBpcyBzb21lIHR5cGUKICBvdGhlciB0aGFuIDx0dD5ib29sPC90dD4sIHRoZW4gaXQgb2JleXMgdGhlIGlkZW50aXR5IDx0dD4mYW1wO3Zbbl0KICA9PSAmYW1wO3ZbMF0gKyBuPC90dD4gZm9yIGFsbCA8dHQ+MCAmbHQ7PSBuICZsdDsgdi5zaXplKCk8L3R0Pi48L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBmZWVscyB0aGF0IGFzIGEgcHJhY3RpY2FsIG1hdHRlciB0aGUgYW5zd2VyIGlzIGNsZWFybHkKInllcyIuICBUaGVyZSB3YXMgY29uc2lkZXJhYmxlIGRpc2N1c3Npb24gYXMgdG8gdGhlIGJlc3Qgd2F5CnRvIGV4cHJlc3MgdGhlIGNvbmNlcHQgb2YgImNvbnRpZ3VvdXMiLCB3aGljaCBpcyBub3QKZGlyZWN0bHkgZGVmaW5lZCBpbiB0aGUgc3RhbmRhcmQuICBEaXNjdXNzaW9uIGluY2x1ZGVkOjwvcD4KCjx1bD4KICA8bGk+QW4gb3BlcmF0aW9uYWwgZGVmaW5pdGlvbiBzaW1pbGFyIHRvIHRoZSBhYm92ZSBwcm9wb3NlZCByZXNvbHV0aW9uIGlzIAogICAgYWxyZWFkeSB1c2VkIGZvciB2YWxhcnJheSAoMjYuNS4yLjMgW3ZhbGFycmF5LmFjY2Vzc10pLjwvbGk+CiAgPGxpPlRoZXJlIGlzIG5vIG5lZWQgdG8gZXhwbGljaXRseSBjb25zaWRlciBhIHVzZXItZGVmaW5lZCBvcGVyYXRvciZhbXA7IAogICAgYmVjYXVzZSBlbGVtZW50cyBtdXN0IGJlIGNvcHljb25zdHJ1Y3RpYmxlICgyMy4xIFtjb250YWluZXIucmVxdWlyZW1lbnRzXSBwYXJhIDMpIAogICAgYW5kIGNvcHljb25zdHJ1Y3RpYmxlICgyMC4xLjEgW3V0aWxpdHkuYXJnLnJlcXVpcmVtZW50c10pIHNwZWNpZmllcwogICAgcmVxdWlyZW1lbnRzIGZvciBvcGVyYXRvciZhbXA7LjwvbGk+CiAgPGxpPlRoZXJlIGlzIG5vIGlzc3VlIG9mIG9uZS1wYXN0LXRoZS1lbmQgYmVjYXVzZSBvZiBsYW5ndWFnZSBydWxlcy48L2xpPgo8L3VsPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjcwIj48L2E+NzAuIFVuY2F1Z2h0X2V4Y2VwdGlvbigpIG1pc3NpbmcgdGhyb3coKSBzcGVjaWZpY2F0aW9uPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE4LjcgW3N1cHBvcnQuZXhjZXB0aW9uXSwgMTguNy40IFt1bmNhdWdodF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gU3RldmUgQ2xhbWFnZSA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0wMzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjc3VwcG9ydC5leGNlcHRpb24iPmlzc3VlczwvYT4gaW4gW3N1cHBvcnQuZXhjZXB0aW9uXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SW4gYXJ0aWNsZSAzRTA0QHByYXRpcXVlLmZyLCBWYWxlbnRpbiBCb25uYXJkIHdyaXRlczogPC9wPgoKPHA+dW5jYXVnaHRfZXhjZXB0aW9uKCkgZG9lc24ndCBoYXZlIGEgdGhyb3cgc3BlY2lmaWNhdGlvbi48L3A+Cgo8cD5JdCBpcyBpbnRlbnRpb25hbCA/IERvZXMgaXQgbWVhbnMgdGhhdCBvbmUgc2hvdWxkIGJlIHByZXBhcmVkIHRvCmhhbmRsZSBleGNlcHRpb25zIHRocm93biBmcm9tIHVuY2F1Z2h0X2V4Y2VwdGlvbigpID88L3A+Cgo8cD51bmNhdWdodF9leGNlcHRpb24oKSBpcyBjYWxsZWQgaW4gZXhjZXB0aW9uIGhhbmRsaW5nIGNvbnRleHRzIHdoZXJlCmV4Y2VwdGlvbiBzYWZldHkgaXMgdmVyeSBpbXBvcnRhbnQuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMTUuNS4zIFtleGNlcHQudW5jYXVnaHRdLCBwYXJhZ3JhcGggMSwgMTguNyBbc3VwcG9ydC5leGNlcHRpb25dLAphbmQgMTguNy40IFt1bmNhdWdodF0sIGFkZCAidGhyb3coKSIgdG8gdW5jYXVnaHRfZXhjZXB0aW9uKCkuPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNzEiPjwvYT43MS4gRG9fZ2V0X21vbnRobmFtZSBzeW5vcHNpcyBtaXNzaW5nIGFyZ3VtZW50PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuNS4xIFtsb2NhbGUudGltZS5nZXRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5hdGhhbiBNeWVycyA8Yj5EYXRlOjwvYj4gMTk5OC0wOC0xMzwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgbG9jYWxlIGZhY2V0IG1lbWJlciA8dHQ+dGltZV9nZXQmbHQ7Jmd0Ozo6ZG9fZ2V0X21vbnRobmFtZTwvdHQ+CmlzIGRlc2NyaWJlZCBpbiAyMi4yLjUuMS4yIFtsb2NhbGUudGltZS5nZXQudmlydHVhbHNdIHdpdGggZml2ZSBhcmd1bWVudHMsCmNvbnNpc3RlbnQgd2l0aCBkb19nZXRfd2Vla2RheSBhbmQgd2l0aCBpdHMgc3BlY2lmaWVkIHVzZSBieSBtZW1iZXIKZ2V0X21vbnRobmFtZS4gSG93ZXZlciwgaW4gdGhlIHN5bm9wc2lzLCBpdCBpcyBzcGVjaWZpZWQgaW5zdGVhZCB3aXRoCmZvdXIgYXJndW1lbnRzLiBUaGUgbWlzc2luZyBhcmd1bWVudCBpcyB0aGUgImVuZCIgaXRlcmF0b3IKdmFsdWUuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMi41LjEgW2xvY2FsZS50aW1lLmdldF0sIGFkZCBhbiAiZW5kIiBhcmd1bWVudCB0bwp0aGUgZGVjbGFyYXRpb24gb2YgbWVtYmVyIGRvX21vbnRobmFtZSBhcyBmb2xsb3dzOjwvcD4KCjxwcmU+ICB2aXJ0dWFsIGl0ZXJfdHlwZSBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBzLCBpdGVyX3R5cGUgZW5kLCBpb3NfYmFzZSZhbXA7LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmYW1wOyBlcnIsIHRtKiB0KSBjb25zdDs8L3ByZT4KCgoKCjxocj4KPGgzPjxhIG5hbWU9Ijc0Ij48L2E+NzQuIEdhcmJsZWQgdGV4dCBmb3IgPHR0PmNvZGVjdnQ6OmRvX21heF9sZW5ndGg8L3R0PjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjEuNCBbbG9jYWxlLmNvZGVjdnRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMTk5OC0wOS0wODwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlLmNvZGVjdnQiPmlzc3VlczwvYT4gaW4gW2xvY2FsZS5jb2RlY3Z0XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIHRleHQgb2YgPHR0PmNvZGVjdnQ6OmRvX21heF9sZW5ndGg8L3R0PidzICJSZXR1cm5zIgpjbGF1c2UgKDIyLjIuMS41LjIsIHBhcmFncmFwaCAxMSkgaXMgZ2FyYmxlZC4gSXQgaGFzIHVuYmFsYW5jZWQKcGFyZW50aGVzZXMgYW5kIGEgc3B1cmlvdXMgPGI+bjwvYj4uPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSAyMi4yLjEuNC4yIFtsb2NhbGUuY29kZWN2dC52aXJ0dWFsc10gcGFyYWdyYXBoIDExIHdpdGggdGhlCmZvbGxvd2luZzo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICA8Yj5SZXR1cm5zPC9iPjogVGhlIG1heGltdW0gdmFsdWUgdGhhdAogIDx0dD5kb19sZW5ndGgoc3RhdGUsIGZyb20sIGZyb21fZW5kLCAxKTwvdHQ+IGNhbiByZXR1cm4gZm9yIGFueQogIHZhbGlkIHJhbmdlIDx0dD5bZnJvbSwgZnJvbV9lbmQpPC90dD4gYW5kIDx0dD5zdGF0ZVQ8L3R0PiB2YWx1ZQogIDx0dD5zdGF0ZTwvdHQ+LiBUaGUgc3BlY2lhbGl6YXRpb24gPHR0PmNvZGVjdnQmbHQ7Y2hhciwgY2hhciwKICBtYnN0YXRlX3QmZ3Q7Ojpkb19tYXhfbGVuZ3RoKCk8L3R0PiByZXR1cm5zIDEuCjwvcD48L2Jsb2NrcXVvdGU+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3NSI+PC9hPjc1LiBDb250cmFkaWN0aW9uIGluIDx0dD5jb2RlY3Z0OjpsZW5ndGg8L3R0PidzIGFyZ3VtZW50IHR5cGVzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMS40IFtsb2NhbGUuY29kZWN2dF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gIE1hdHQKQXVzdGVybiA8Yj5EYXRlOjwvYj4gMTk5OC0wOS0xODwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlLmNvZGVjdnQiPmlzc3VlczwvYT4gaW4gW2xvY2FsZS5jb2RlY3Z0XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIGNsYXNzIHN5bm9wc2VzIGZvciBjbGFzc2VzIDx0dD5jb2RlY3Z0Jmx0OyZndDs8L3R0PiAoMjIuMi4xLjUpCmFuZCA8dHQ+Y29kZWN2dF9ieW5hbWUmbHQ7Jmd0OzwvdHQ+ICgyMi4yLjEuNikgc2F5IHRoYXQgdGhlIGZpcnN0CnBhcmFtZXRlciBvZiB0aGUgbWVtYmVyIGZ1bmN0aW9ucyA8dHQ+bGVuZ3RoPC90dD4gYW5kCjx0dD5kb19sZW5ndGg8L3R0PiBpcyBvZiB0eXBlIDx0dD5jb25zdCBzdGF0ZVQmYW1wOzwvdHQ+LiBUaGUgbWVtYmVyCmZ1bmN0aW9uIGRlc2NyaXB0aW9ucywgaG93ZXZlciAoMjIuMi4xLjUuMSwgcGFyYWdyYXBoIDY7IDIyLjIuMS41LjIsCnBhcmFncmFwaCA5KSBzYXkgdGhhdCB0aGUgdHlwZSBpcyA8dHQ+c3RhdGVUJmFtcDs8L3R0Pi4gIEVpdGhlciB0aGUKc3lub3BzaXMgb3IgdGhlIHN1bW1hcnkgbXVzdCBiZSBjaGFuZ2VkLiA8L3A+Cgo8cD5JZiAoYXMgSSBiZWxpZXZlKSB0aGUgbWVtYmVyIGZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBhcmUgY29ycmVjdCwKdGhlbiB3ZSBtdXN0IGFsc28gYWRkIHRleHQgc2F5aW5nIGhvdyA8dHQ+ZG9fbGVuZ3RoPC90dD4gY2hhbmdlcyBpdHMKPHR0PnN0YXRlVDwvdHQ+IGFyZ3VtZW50LiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4yLjEuNCBbbG9jYWxlLmNvZGVjdnRdLCBhbmQgYWxzbyBpbiAyMi4yLjEuNSBbbG9jYWxlLmNvZGVjdnQuYnluYW1lXSwKY2hhbmdlIHRoZSA8dHQ+c3RhdGVUPC90dD4gYXJndW1lbnQgdHlwZSBvbiBib3RoIG1lbWJlcgo8dHQ+bGVuZ3RoKCk8L3R0PiBhbmQgbWVtYmVyIDx0dD5kb19sZW5ndGgoKTwvdHQ+IGZyb20gPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PHR0PmNvbnN0IHN0YXRlVCZhbXA7PC90dD48L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PHR0PnN0YXRlVCZhbXA7PC90dD48L3A+CjwvYmxvY2txdW90ZT4KCjxwPkluIDIyLjIuMS40LjIgW2xvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzXSwgYWRkIHRvIHRoZSBkZWZpbml0aW9uIGZvciBtZW1iZXIKPHR0PmRvX2xlbmd0aDwvdHQ+IGEgcGFyYWdyYXBoOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IFRoZSBlZmZlY3Qgb24gdGhlIDx0dD5zdGF0ZTwvdHQ+IGFyZ3VtZW50IGlzIGBgYXMgaWYnJwogIGl0IGNhbGxlZCA8dHQ+ZG9faW4oc3RhdGUsIGZyb20sIGZyb21fZW5kLCBmcm9tLCB0bywgdG8rbWF4LAogIHRvKTwvdHQ+IGZvciA8dHQ+dG88L3R0PiBwb2ludGluZyB0byBhIGJ1ZmZlciBvZiBhdCBsZWFzdAogIDx0dD5tYXg8L3R0PiBlbGVtZW50cy48L3A+CjwvYmxvY2txdW90ZT4KCgoKCjxocj4KPGgzPjxhIG5hbWU9Ijc2Ij48L2E+NzYuIENhbiBhIDx0dD5jb2RlY3Z0PC90dD4gZmFjZXQgYWx3YXlzIGNvbnZlcnQgb25lIGludGVybmFsIGNoYXJhY3RlciBhdCBhIHRpbWU/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMS40IFtsb2NhbGUuY29kZWN2dF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAxOTk4LTA5LTI1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsb2NhbGUuY29kZWN2dCI+aXNzdWVzPC9hPiBpbiBbbG9jYWxlLmNvZGVjdnRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGlzIGlzc3VlIGNvbmNlcm5zIHRoZSByZXF1aXJlbWVudHMgb24gY2xhc3NlcyBkZXJpdmVkIGZyb20KPHR0PmNvZGVjdnQ8L3R0PiwgaW5jbHVkaW5nIHVzZXItZGVmaW5lZCBjbGFzc2VzLiBXaGF0IGFyZSB0aGUKcmVzdHJpY3Rpb25zIG9uIHRoZSBjb252ZXJzaW9uIGZyb20gZXh0ZXJuYWwgY2hhcmFjdGVycwooZS5nLiA8dHQ+Y2hhcjwvdHQ+KSB0byBpbnRlcm5hbCBjaGFyYWN0ZXJzIChlLmcuIDx0dD53Y2hhcl90PC90dD4pPwpPciwgYWx0ZXJuYXRpdmVseSwgd2hhdCBhc3N1bXB0aW9ucyBhYm91dCA8dHQ+Y29kZWN2dDwvdHQ+IGZhY2V0cyBjYW4KdGhlIEkvTyBsaWJyYXJ5IG1ha2U/IDwvcD4KCjxwPlRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0J3MgcG9zc2libGUgdG8gY29udmVydCBmcm9tIGludGVybmFsCmNoYXJhY3RlcnMgdG8gZXh0ZXJuYWwgY2hhcmFjdGVycyBvbmUgaW50ZXJuYWwgY2hhcmFjdGVyIGF0IGEgdGltZSwKYW5kIHdoZXRoZXIsIGdpdmVuIGEgdmFsaWQgc2VxdWVuY2Ugb2YgZXh0ZXJuYWwgY2hhcmFjdGVycywgaXQncwpwb3NzaWJsZSB0byBwaWNrIG9mZiBpbnRlcm5hbCBjaGFyYWN0ZXJzIG9uZSBhdCBhIHRpbWUuIE9yLCB0byBwdXQgaXQKZGlmZmVyZW50bHk6IGdpdmVuIGEgc2VxdWVuY2Ugb2YgZXh0ZXJuYWwgY2hhcmFjdGVycyBhbmQgdGhlCmNvcnJlc3BvbmRpbmcgc2VxdWVuY2Ugb2YgaW50ZXJuYWwgY2hhcmFjdGVycywgZG9lcyBhIHBvc2l0aW9uIGluIHRoZQppbnRlcm5hbCBzZXF1ZW5jZSBjb3JyZXNwb25kIHRvIHNvbWUgcG9zaXRpb24gaW4gdGhlIGV4dGVybmFsCnNlcXVlbmNlPyA8L3A+Cgo8cD5UbyBtYWtlIHRoaXMgY29uY3JldGUsIHN1cHBvc2UgdGhhdCA8dHQ+W2ZpcnN0LCBsYXN0KTwvdHQ+IGlzIGEKc2VxdWVuY2Ugb2YgPGk+TTwvaT4gZXh0ZXJuYWwgY2hhcmFjdGVycyBhbmQgdGhhdCA8dHQ+W2lmaXJzdCwKaWxhc3QpPC90dD4gaXMgdGhlIGNvcnJlc3BvbmRpbmcgc2VxdWVuY2Ugb2YgPGk+TjwvaT4gaW50ZXJuYWwKY2hhcmFjdGVycywgd2hlcmUgPGk+TiAmZ3Q7IDE8L2k+LiBUaGF0IGlzLCA8dHQ+bXlfZW5jb2RpbmcuaW4oKTwvdHQ+LAphcHBsaWVkIHRvIDx0dD5bZmlyc3QsIGxhc3QpPC90dD4sIHlpZWxkcyA8dHQ+W2lmaXJzdCwKaWxhc3QpPC90dD4uIE5vdyB0aGUgcXVlc3Rpb246IGRvZXMgdGhlcmUgbmVjZXNzYXJpbHkgZXhpc3QgYQpzdWJzZXF1ZW5jZSBvZiBleHRlcm5hbCBjaGFyYWN0ZXJzLCA8dHQ+W2ZpcnN0LCBsYXN0XzEpPC90dD4sIHN1Y2gKdGhhdCB0aGUgY29ycmVzcG9uZGluZyBzZXF1ZW5jZSBvZiBpbnRlcm5hbCBjaGFyYWN0ZXJzIGlzIHRoZSBzaW5nbGUKY2hhcmFjdGVyIDx0dD4qaWZpcnN0PC90dD4/CjwvcD4KCjxwPihXaGF0IGEgIm5vIiBhbnN3ZXIgd291bGQgbWVhbiBpcyB0aGF0Cjx0dD5teV9lbmNvZGluZzwvdHQ+IHRyYW5zbGF0ZXMgc2VxdWVuY2VzIG9ubHkgYXMgYmxvY2tzLiBUaGVyZSdzIGEKc2VxdWVuY2Ugb2YgPGk+TTwvaT4gZXh0ZXJuYWwgY2hhcmFjdGVycyB0aGF0IG1hcHMgdG8gYSBzZXF1ZW5jZSBvZgo8aT5OPC9pPiBpbnRlcm5hbCBjaGFyYWN0ZXJzLCBidXQgdGhhdCBleHRlcm5hbCBzZXF1ZW5jZSBoYXMgbm8Kc3Vic2VxdWVuY2UgdGhhdCBtYXBzIHRvIDxpPk4tMTwvaT4gaW50ZXJuYWwgY2hhcmFjdGVycy4pIDwvcD4KCjxwPlNvbWUgb2YgdGhlIHdvcmRpbmcgaW4gdGhlIHN0YW5kYXJkLCBzdWNoIGFzIHRoZSBkZXNjcmlwdGlvbiBvZgo8dHQ+Y29kZWN2dDo6ZG9fbWF4X2xlbmd0aDwvdHQ+ICgyMi4yLjEuNC4yIFtsb2NhbGUuY29kZWN2dC52aXJ0dWFsc10sCnBhcmFncmFwaCAxMSkgYW5kIDx0dD5iYXNpY19maWxlYnVmOjp1bmRlcmZsb3c8L3R0PiAoMjcuOC4xLjUgW2ZpbGVidWYudmlydHVhbHNdLCBwYXJhZ3JhcGggMykgc3VnZ2VzdHMgdGhhdCBpdCBtdXN0IGFsd2F5cyBiZQpwb3NzaWJsZSB0byBwaWNrIG9mZiBpbnRlcm5hbCBjaGFyYWN0ZXJzIG9uZSBhdCBhIHRpbWUgZnJvbSBhIHNlcXVlbmNlCm9mIGV4dGVybmFsIGNoYXJhY3RlcnMuIEhvd2V2ZXIsIHRoaXMgaXMgbmV2ZXIgZXhwbGljaXRseSBzdGF0ZWQgb25lCndheSBvciB0aGUgb3RoZXIuIDwvcD4KCjxwPlRoaXMgaXNzdWUgc2VlbXMgKGFuZCBpcykgcXVpdGUgdGVjaG5pY2FsLCBidXQgaXQgaXMgaW1wb3J0YW50IGlmCndlIGV4cGVjdCB1c2VycyB0byBwcm92aWRlIHRoZWlyIG93biBlbmNvZGluZyBmYWNldHMuIFRoaXMgaXMgYW4gYXJlYQp3aGVyZSB0aGUgc3RhbmRhcmQgbGlicmFyeSBjYWxscyB1c2VyLXN1cHBsaWVkIGNvZGUsIHNvIGEgd2VsbC1kZWZpbmVkCnNldCBvZiByZXF1aXJlbWVudHMgZm9yIHRoZSB1c2VyLXN1cHBsaWVkIGNvZGUgaXMgY3J1Y2lhbC4gVXNlcnMgbXVzdApiZSBhd2FyZSBvZiB0aGUgYXNzdW1wdGlvbnMgdGhhdCB0aGUgbGlicmFyeSBtYWtlcy4gVGhpcyBpc3N1ZSBhZmZlY3RzCnBvc2l0aW9uaW5nIG9wZXJhdGlvbnMgb24gPHR0PmJhc2ljX2ZpbGVidWY8L3R0PiwgdW5idWZmZXJlZCBpbnB1dCwKYW5kIHNldmVyYWwgb2YgPHR0PmNvZGVjdnQ8L3R0PidzIG1lbWJlciBmdW5jdGlvbnMuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCB0aGUgZm9sbG93aW5nIHRleHQgYXMgYSBuZXcgcGFyYWdyYXBoLCBmb2xsb3dpbmcgMjIuMi4xLjQuMiBbbG9jYWxlLmNvZGVjdnQudmlydHVhbHNdIHBhcmFncmFwaCAyOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5BIDx0dD5jb2RlY3Z0PC90dD4gZmFjZXQgdGhhdCBpcyB1c2VkIGJ5IDx0dD5iYXNpY19maWxlYnVmPC90dD4KKDI3LjggW2ZpbGUuc3RyZWFtc10pIG11c3QgaGF2ZSB0aGUgcHJvcGVydHkgdGhhdCBpZjwvcD4KPHByZT4gICAgZG9fb3V0KHN0YXRlLCBmcm9tLCBmcm9tX2VuZCwgZnJvbV9uZXh0LCB0bywgdG9fbGltLCB0b19uZXh0KQo8L3ByZT4KPHA+d291bGQgcmV0dXJuIDx0dD5vazwvdHQ+LCB3aGVyZSA8dHQ+ZnJvbSAhPSBmcm9tX2VuZDwvdHQ+LCB0aGVuIDwvcD4KPHByZT4gICAgZG9fb3V0KHN0YXRlLCBmcm9tLCBmcm9tICsgMSwgZnJvbV9uZXh0LCB0bywgdG9fZW5kLCB0b19uZXh0KQo8L3ByZT4KPHA+bXVzdCBhbHNvIHJldHVybiA8dHQ+b2s8L3R0PiwgYW5kIHRoYXQgaWY8L3A+CjxwcmU+ICAgIGRvX2luKHN0YXRlLCBmcm9tLCBmcm9tX2VuZCwgZnJvbV9uZXh0LCB0bywgdG9fbGltLCB0b19uZXh0KQo8L3ByZT4KPHA+d291bGQgcmV0dXJuIDx0dD5vazwvdHQ+LCB3aGVyZSA8dHQ+dG8gIT0gdG9fbGltPC90dD4sIHRoZW48L3A+CjxwcmU+ICAgIGRvX2luKHN0YXRlLCBmcm9tLCBmcm9tX2VuZCwgZnJvbV9uZXh0LCB0bywgdG8gKyAxLCB0b19uZXh0KQo8L3ByZT4KPHA+bXVzdCBhbHNvIHJldHVybiA8dHQ+b2s8L3R0Pi4gIFs8aT5Gb290bm90ZTo8L2k+IEluZm9ybWFsbHksIHRoaXMKbWVhbnMgdGhhdCA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+IGFzc3VtZXMgdGhhdCB0aGUgbWFwcGluZyBmcm9tCmludGVybmFsIHRvIGV4dGVybmFsIGNoYXJhY3RlcnMgaXMgMSB0byBOOiBhIDx0dD5jb2RlY3Z0PC90dD4gdGhhdCBpcwp1c2VkIGJ5IDx0dD5iYXNpY19maWxlYnVmPC90dD4gbXVzdCBiZSBhYmxlIHRvIHRyYW5zbGF0ZSBjaGFyYWN0ZXJzCm9uZSBpbnRlcm5hbCBjaGFyYWN0ZXIgYXQgYSB0aW1lLiAgPGk+LS1FbmQgRm9vdG5vdGU8L2k+XTwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1JlZG1vbmQ6IE1pbm9yIGNoYW5nZSBpbiBwcm9wb3NlZCByZXNvbHV0aW9uLiAgT3JpZ2luYWwKcHJvcG9zZWQgcmVzb2x1dGlvbiB0YWxrZWQgYWJvdXQgInN1Y2Nlc3MiLCB3aXRoIGEgcGFyZW50aGV0aWNhbApjb21tZW50IHRoYXQgc3VjY2VzcyBtZWFudCByZXR1cm5pbmcgPHR0Pm9rPC90dD4uICBOZXcgd29yZGluZwpyZW1vdmVzIGFsbCB0YWxrIGFib3V0ICJzdWNjZXNzIiwgYW5kIGp1c3QgdGFsa3MgYWJvdXQgdGhlCnJldHVybiB2YWx1ZS5dPC9pPjwvcD4KCgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgoKICA8cD5UaGUgcHJvcG9zZWQgcmVzb2x1aW9uIHNheXMgdGhhdCBjb252ZXJzaW9ucyBjYW4gYmUgcGVyZm9ybWVkIG9uZQogIGludGVybmFsIGNoYXJhY3RlciBhdCBhIHRpbWUuICBUaGlzIHJ1bGVzIG91dCBzb21lIGVuY29kaW5ncyB0aGF0CiAgd291bGQgb3RoZXJ3aXNlIGJlIGxlZ2FsLiAgVGhlIGFsdGVybmF0aXZlIGFuc3dlciB3b3VsZCBtZWFuIHRoZXJlCiAgd291bGQgYmUgc29tZSBpbnRlcm5hbCBwb3NpdGlvbnMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkKICBleHRlcm5hbCBmaWxlIHBvc2l0aW9uLjwvcD4KICA8cD4KICBBbiBleGFtcGxlIG9mIGFuIGVuY29kaW5nIHRoYXQgdGhpcyBydWxlcyBvdXQgaXMgb25lIHdoZXJlIHRoZQogIDx0dD5pbnRlcm5UPC90dD4gYW5kIDx0dD5leHRlcm5UPC90dD4gYXJlIG9mIHRoZSBzYW1lIHR5cGUsIGFuZAogIHdoZXJlIHRoZSBpbnRlcm5hbCBzZXF1ZW5jZSA8dHQ+YzEgYzI8L3R0PiBjb3JyZXNwb25kcyB0byB0aGUKICBleHRlcm5hbCBzZXF1ZW5jZSA8dHQ+YzIgYzE8L3R0Pi4KICA8L3A+CiAgPHA+SXQgd2FzIGdlbmVyYWxseSBhZ3JlZWQgdGhhdCA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+IHJlbGllcwogIG9uIHRoaXMgcHJvcGVydHk6IGl0IHdhcyBkZXNpZ25lZCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0CiAgdGhlIGV4dGVybmFsLXRvLWludGVybmFsIG1hcHBpbmcgaXMgTi10by0xLCBhbmQgaXQgaXMgbm90IGNsZWFyCiAgdGhhdCA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+IGlzIGltcGxlbWVudGFibGUgd2l0aG91dCB0aGF0IAogIHJlc3RyaWN0aW9uLgogIDwvcD4KICA8cD4KICBUaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBpcyBleHByZXNzZWQgYXMgYSByZXN0cmljdGlvbiBvbgogIDx0dD5jb2RlY3Z0PC90dD4gd2hlbiB1c2VkIGJ5IDx0dD5iYXNpY19maWxlYnVmPC90dD4sIHJhdGhlcgogIHRoYW4gYSBibGFua2V0IHJlc3RyaWN0aW9uIG9uIGFsbCA8dHQ+Y29kZWN2dDwvdHQ+IGZhY2V0cywKICBiZWNhdXNlIDx0dD5iYXNpY19maWxlYnVmPC90dD4gaXMgdGhlIG9ubHkgb3RoZXIgcGFydCBvZiB0aGUgCiAgbGlicmFyeSB0aGF0IHVzZXMgPHR0PmNvZGVjdnQ8L3R0Pi4gIElmIGEgdXNlciB3YW50cyB0byBkZWZpbmUKICBhIDx0dD5jb2RlY3Z0PC90dD4gZmFjZXQgdGhhdCBpbXBsZW1lbnRzIGEgbW9yZSBnZW5lcmFsIE4tdG8tTQogIG1hcHBpbmcsIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBwcm9oaWJpdCBpdCwgc28gbG9uZyBhcyB0aGUgdXNlcgogIGRvZXMgbm90IGV4cGVjdCA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+IHRvIGJlIGFibGUgdG8gdXNlIGl0LgogIDwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3OCI+PC9hPjc4LiBUeXBvOiBldmVudF9jYWxsX2JhY2s8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNC4yIFtpb3MuYmFzZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTmljbyBKb3N1dHRpcyA8Yj5EYXRlOjwvYj4gMTk5OC0wOS0yOTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaW9zLmJhc2UiPmlzc3VlczwvYT4gaW4gW2lvcy5iYXNlXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+dHlwbzogZXZlbnRfY2FsbF9iYWNrIHNob3VsZCBiZSBldmVudF9jYWxsYmFjayAmbmJzcDsgPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gdGhlIDI3LjQuMiBbaW9zLmJhc2VdIHN5bm9wc2lzIGNoYW5nZQoiZXZlbnRfY2FsbF9iYWNrIiB0byAiZXZlbnRfY2FsbGJhY2siLiA8L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3OSI+PC9hPjc5LiBJbmNvbnNpc3RlbnQgZGVjbGFyYXRpb24gb2YgcG9sYXIoKTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNi4zLjEgW2NvbXBsZXguc3lub3BzaXNdLCAyNi4zLjcgW2NvbXBsZXgudmFsdWUub3BzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOaWNvIEpvc3V0dGlzIDxiPkRhdGU6PC9iPiAxOTk4LTA5LTI5PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNjb21wbGV4LnN5bm9wc2lzIj5pc3N1ZXM8L2E+IGluIFtjb21wbGV4LnN5bm9wc2lzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SW4gMjYuMy4xIFtjb21wbGV4LnN5bm9wc2lzXSBwb2xhciBpcyBkZWNsYXJlZCBhcyBmb2xsb3dzOjwvcD4KPHByZT4gICB0ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBjb21wbGV4Jmx0O1QmZ3Q7IHBvbGFyKGNvbnN0IFQmYW1wOywgY29uc3QgVCZhbXA7KTsgPC9wcmU+Cgo8cD5JbiAyNi4zLjcgW2NvbXBsZXgudmFsdWUub3BzXSBpdCBpcyBkZWNsYXJlZCBhcyBmb2xsb3dzOjwvcD4KPHByZT4gICB0ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBjb21wbGV4Jmx0O1QmZ3Q7IHBvbGFyKGNvbnN0IFQmYW1wOyByaG8sIGNvbnN0IFQmYW1wOyB0aGV0YSA9IDApOyA8L3ByZT4KCjxwPlRodXMgd2hldGhlciB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBvcHRpb25hbCBpcyBub3QgY2xlYXIuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI2LjMuMSBbY29tcGxleC5zeW5vcHNpc10gY2hhbmdlOjwvcD4KPHByZT4gICB0ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBjb21wbGV4Jmx0O1QmZ3Q7IHBvbGFyKGNvbnN0IFQmYW1wOywgY29uc3QgVCZhbXA7KTs8L3ByZT4KCjxwPnRvOjwvcD4KPHByZT4gICB0ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBjb21wbGV4Jmx0O1QmZ3Q7IHBvbGFyKGNvbnN0IFQmYW1wOyByaG8sIGNvbnN0IFQmYW1wOyB0aGV0YSA9IDApOyA8L3ByZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI4MCI+PC9hPjgwLiBHbG9iYWwgT3BlcmF0b3JzIG9mIGNvbXBsZXggZGVjbGFyZWQgdHdpY2U8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuMy4xIFtjb21wbGV4LnN5bm9wc2lzXSwgMjYuMy4yIFtjb21wbGV4XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOaWNvIEpvc3V0dGlzIDxiPkRhdGU6PC9iPiAxOTk4LTA5LTI5PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNjb21wbGV4LnN5bm9wc2lzIj5pc3N1ZXM8L2E+IGluIFtjb21wbGV4LnN5bm9wc2lzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+Qm90aCAyNi4yLjEgYW5kIDI2LjIuMiBjb250YWluIGRlY2xhcmF0aW9ucyBvZiBnbG9iYWwgb3BlcmF0b3JzIGZvcgpjbGFzcyBjb21wbGV4LiBUaGlzIHJlZHVuZGFuY3kgc2hvdWxkIGJlIHJlbW92ZWQuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVkdWNlIHJlZHVuZGFuY3kgYWNjb3JkaW5nIHRvIHRoZSBnZW5lcmFsIHN0eWxlIG9mIHRoZSBzdGFuZGFyZC4gPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iODMiPjwvYT44My4gU3RyaW5nOjpucG9zIHZzLiBzdHJpbmc6Om1heF9zaXplKCk8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjEuMyBbYmFzaWMuc3RyaW5nXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOaWNvIEpvc3V0dGlzIDxiPkRhdGU6PC9iPiAxOTk4LTA5LTI5PC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjYmFzaWMuc3RyaW5nIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbYmFzaWMuc3RyaW5nXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2Jhc2ljLnN0cmluZyI+aXNzdWVzPC9hPiBpbiBbYmFzaWMuc3RyaW5nXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkR1cGxpY2F0ZSBvZjo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzg5Ij44OTwvYT48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+TWFueSBzdHJpbmcgbWVtYmVyIGZ1bmN0aW9ucyB0aHJvdyBpZiBzaXplIGlzIGdldHRpbmcgb3IgZXhjZWVkaW5nCm5wb3MuIEhvd2V2ZXIsIEkgd29uZGVyIHdoeSB0aGV5IGRvbid0IHRocm93IGlmIHNpemUgaXMgZ2V0dGluZyBvcgpleGNlZWRpbmcgbWF4X3NpemUoKSBpbnN0ZWFkIG9mIG5wb3MuICBNYXkgYmUgbnBvcyBpcyBrbm93biBhdCBjb21waWxlCnRpbWUsIHdoaWxlIG1heF9zaXplKCkgaXMga25vd24gYXQgcnVudGltZS4gSG93ZXZlciwgd2hhdCBoYXBwZW5zIGlmCnNpemUgZXhjZWVkcyBtYXhfc2l6ZSgpIGJ1dCBub3QgbnBvcywgdGhlbj8gSXQgc2VlbXMgdGhlIHN0YW5kYXJkCmxhY2tzIHNvbWUgY2xhcmlmaWNhdGlvbnMgaGVyZS48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZnRlciAyMS4zIFtiYXNpYy5zdHJpbmddIHBhcmFncmFwaCA0ICgiVGhlIGZ1bmN0aW9ucwpkZXNjcmliZWQgaW4gdGhpcyBjbGF1c2UuLi4iKSBhZGQgYSBuZXcgcGFyYWdyYXBoOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkZvciBhbnkgc3RyaW5nIG9wZXJhdGlvbiwgaWYgYXMgYSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbiwgPHR0PiBzaXplKCk8L3R0PiB3b3VsZCBleGNlZWQKICA8dHQ+IG1heF9zaXplKCk8L3R0PiB0aGVuCiAgdGhlIG9wZXJhdGlvbiB0aHJvd3MgPHR0Pmxlbmd0aF9lcnJvcjwvdHQ+LjwvcD4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGJlbGlldmVzIGxlbmd0aF9lcnJvciBpcyB0aGUgY29ycmVjdCBleGNlcHRpb24gdG8gdGhyb3cuPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iODYiPjwvYT44Ni4gU3RyaW5nIGNvbnN0cnVjdG9ycyBkb24ndCBkZXNjcmliZSBleGNlcHRpb25zPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIxLjMuMSBbc3RyaW5nLnJlcXVpcmVdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5pY28gSm9zdXR0aXMgPGI+RGF0ZTo8L2I+IDE5OTgtMDktMjk8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3N0cmluZy5yZXF1aXJlIj5pc3N1ZXM8L2E+IGluIFtzdHJpbmcucmVxdWlyZV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBjb25zdHJ1Y3RvciBmcm9tIGEgcmFuZ2U6PC9wPgoKPHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OyAKICAgICAgICAgYmFzaWNfc3RyaW5nKElucHV0SXRlcmF0b3IgYmVnaW4sIElucHV0SXRlcmF0b3IgZW5kLCAKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFsbG9jYXRvciZhbXA7IGEgPSBBbGxvY2F0b3IoKSk7PC9wcmU+Cgo8cD5sYWNrcyBhIHRocm93cyBjbGF1c2UuIEhvd2V2ZXIsIEkgd291bGQgZXhwZWN0IHRoYXQgaXQgdGhyb3dzCmFjY29yZGluZyB0byB0aGUgb3RoZXIgY29uc3RydWN0b3JzIGlmIHRoZSBudW1iZXJzIG9mIGNoYXJhY3RlcnMgaW4KdGhlIHJhbmdlIGVxdWFscyBucG9zIChvciBleGNlZWRzIG1heF9zaXplKCksIHNlZSBhYm92ZSkuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIxLjMuMSBbc3RyaW5nLnJlcXVpcmVdLCBTdHJpa2UgdGhyb3dzIHBhcmFncmFwaHMgZm9yCmNvbnN0cnVjdG9ycyB3aGljaCBzYXkgIlRocm93czogbGVuZ3RoX2Vycm9yIGlmIG4gPT0KbnBvcy4iPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaHJvd3MgY2xhdXNlcyBmb3IgbGVuZ3RoX2Vycm9yIGlmIG4gPT0gbnBvcyBhcmUgbm8gbG9uZ2VyIG5lZWRlZApiZWNhdXNlIHRoZXkgYXJlIHN1YnN1bWVkIGJ5IHRoZSBnZW5lcmFsIHdvcmRpbmcgYWRkZWQgYnkgdGhlCnJlc29sdXRpb24gZm9yIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM4MyI+ODM8L2E+LjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjkwIj48L2E+OTAuIEluY29ycmVjdCBkZXNjcmlwdGlvbiBvZiBvcGVyYXRvciAmZ3Q7Jmd0OyBmb3Igc3RyaW5nczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMS4zLjguOSBbc3RyaW5nLmlvXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOaWNvIEpvc3V0dGlzIDxiPkRhdGU6PC9iPiAxOTk4LTA5LTI5PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmcuaW8iPmlzc3VlczwvYT4gaW4gW3N0cmluZy5pb10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBlZmZlY3Qgb2Ygb3BlcmF0b3IgJmd0OyZndDsgZm9yIHN0cmluZ3MgY29udGFpbiB0aGUgZm9sbG93aW5nIGl0ZW06PC9wPgoKPHA+Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5pc3NwYWNlKGMsZ2V0bG9jKCkpPC90dD4gaXMgdHJ1ZSBmb3IgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0CmNoYXJhY3RlciBjLjwvcD4KCjxwPkhlcmUgPHR0PmdldGxvYygpPC90dD4gaGFzIHRvIGJlIHJlcGxhY2VkIGJ5IDx0dD5pcy5nZXRsb2MoKTwvdHQ+LiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMS4zLjguOSBbc3RyaW5nLmlvXSBwYXJhZ3JhcGggMSBFZmZlY3RzIGNsYXVzZSByZXBsYWNlOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjx0dD5pc3NwYWNlKGMsZ2V0bG9jKCkpPC90dD4gaXMgdHJ1ZSBmb3IgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0IGNoYXJhY3RlciBjLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+d2l0aDo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+aXNzcGFjZShjLGlzLmdldGxvYygpKTwvdHQ+IGlzIHRydWUgZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBjaGFyYWN0ZXIgYy48L3A+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI5MSI+PC9hPjkxLiBEZXNjcmlwdGlvbiBvZiBvcGVyYXRvciZndDsmZ3Q7IGFuZCBnZXRsaW5lKCkgZm9yIHN0cmluZyZsdDsmZ3Q7IG1pZ2h0IGNhdXNlIGVuZGxlc3MgbG9vcDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMS4zLjguOSBbc3RyaW5nLmlvXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOaWNvIEpvc3V0dGlzIDxiPkRhdGU6PC9iPiAxOTk4LTA5LTI5PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmcuaW8iPmlzc3VlczwvYT4gaW4gW3N0cmluZy5pb10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPk9wZXJhdG9yICZndDsmZ3Q7IGFuZCBnZXRsaW5lKCkgZm9yIHN0cmluZ3MgcmVhZCB1bnRpbCBlb2YoKQppbiB0aGUgaW5wdXQgc3RyZWFtIGlzIHRydWUuIEhvd2V2ZXIsIHRoaXMgbWlnaHQgbmV2ZXIgaGFwcGVuLCBpZiB0aGUKc3RyZWFtIGNhbid0IHJlYWQgYW55bW9yZSB3aXRob3V0IHJlYWNoaW5nIEVPRi4gU28gc2hvdWxkbid0IGl0IGJlCmNoYW5nZWQgaW50byB0aGF0IGl0IHJlYWRzIHVudGlsICFnb29kKCkgPyA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMS4zLjguOSBbc3RyaW5nLmlvXSwgcGFyYWdyYXBoIDEsIHJlcGxhY2U6PC9wPgo8YmxvY2txdW90ZT48cD4KRWZmZWN0czogQmVnaW5zIGJ5IGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QgayBhcyBpZiBrIHdlcmUKY29uc3RydWN0ZWQgYnkgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7OjpzZW50cnkgayggaXMpLiBJZgpib29sKCBrKSBpcyB0cnVlLCBpdCBjYWxscyBzdHIuZXJhc2UoKSBhbmQgdGhlbiBleHRyYWN0cyBjaGFyYWN0ZXJzCmZyb20gaXMgYW5kIGFwcGVuZHMgdGhlbSB0byBzdHIgYXMgaWYgYnkgY2FsbGluZyBzdHIuYXBwZW5kKDEsIGMpLiBJZgppcy53aWR0aCgpIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB0aGUgbWF4aW11bSBudW1iZXIgbiBvZiBjaGFyYWN0ZXJzCmFwcGVuZGVkIGlzIGlzLndpZHRoKCk7IG90aGVyd2lzZSBuIGlzIHN0ci5tYXhfc2l6ZSgpLiBDaGFyYWN0ZXJzIGFyZQpleHRyYWN0ZWQgYW5kIGFwcGVuZGVkIHVudGlsIGFueSBvZiB0aGUgZm9sbG93aW5nIG9jY3VyczoKPC9wPjwvYmxvY2txdW90ZT4KPHA+d2l0aDo8L3A+CjxibG9ja3F1b3RlPjxwPgpFZmZlY3RzOiBCZWhhdmVzIGFzIGEgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uICgyNy42LjEuMi4xCltpc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHNdKS4gQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgdGhlCnNlbnRyeSBjb252ZXJ0cyB0byB0cnVlLCBjYWxscyBzdHIuZXJhc2UoKSBhbmQgdGhlbiBleHRyYWN0cwpjaGFyYWN0ZXJzIGZyb20gaXMgYW5kIGFwcGVuZHMgdGhlbSB0byBzdHIgYXMgaWYgYnkgY2FsbGluZwpzdHIuYXBwZW5kKDEsYykuIElmIGlzLndpZHRoKCkgaXMgZ3JlYXRlciB0aGFuIHplcm8sIHRoZSBtYXhpbXVtCm51bWJlciBuIG9mIGNoYXJhY3RlcnMgYXBwZW5kZWQgaXMgaXMud2lkdGgoKTsgb3RoZXJ3aXNlIG4gaXMKc3RyLm1heF9zaXplKCkuIENoYXJhY3RlcnMgYXJlIGV4dHJhY3RlZCBhbmQgYXBwZW5kZWQgdW50aWwgYW55IG9mIHRoZQpmb2xsb3dpbmcgb2NjdXJzOgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+SW4gMjEuMy44LjkgW3N0cmluZy5pb10sIHBhcmFncmFwaCA2LCByZXBsYWNlPC9wPgo8YmxvY2txdW90ZT48cD4KRWZmZWN0czogQmVnaW5zIGJ5IGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QgayBhcyBpZiBieSB0eXBlbmFtZQpiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDs6OnNlbnRyeSBrKCBpcywgdHJ1ZSkuIElmIGJvb2woIGspIGlzIHRydWUsCml0IGNhbGxzIHN0ci5lcmFzZSgpIGFuZCB0aGVuIGV4dHJhY3RzIGNoYXJhY3RlcnMgZnJvbSBpcyBhbmQgYXBwZW5kcwp0aGVtIHRvIHN0ciBhcyBpZiBieSBjYWxsaW5nIHN0ci5hcHBlbmQoMSwgYykgdW50aWwgYW55IG9mIHRoZQpmb2xsb3dpbmcgb2NjdXJzOgo8L3A+PC9ibG9ja3F1b3RlPgo8cD53aXRoOjwvcD4KPGJsb2NrcXVvdGU+PHA+RWZmZWN0czogQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbgooMjcuNi4xLjMgW2lzdHJlYW0udW5mb3JtYXR0ZWRdKSwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgYWZmZWN0IHRoZQp2YWx1ZSByZXR1cm5lZApieSBzdWJzZXF1ZW50IGNhbGxzIHRvIGJhc2ljX2lzdHJlYW0mbHQ7Jmd0Ozo6Z2NvdW50KCkuIEFmdGVyCmNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QsIGlmIHRoZSBzZW50cnkgY29udmVydHMgdG8gdHJ1ZSwgY2FsbHMKc3RyLmVyYXNlKCkgYW5kIHRoZW4gZXh0cmFjdHMgY2hhcmFjdGVycyBmcm9tIGlzIGFuZCBhcHBlbmRzIHRoZW0gdG8Kc3RyIGFzIGlmIGJ5IGNhbGxpbmcgc3RyLmFwcGVuZCgxLGMpIHVudGlsIGFueSBvZiB0aGUgZm9sbG93aW5nCm9jY3VyczoKPC9wPjwvYmxvY2txdW90ZT4KCjxwPjxpPltSZWRtb25kOiBNYWRlIGNoYW5nZXMgaW4gcHJvcG9zZWQgcmVzb2x1dGlvbi4gIDx0dD5vcGVyYXRvciZndDsmZ3Q7PC90dD4Kc2hvdWxkIGJlIGEgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uLCBub3QgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24uCjx0dD5nZXRsaW5lPC90dD4gc2hvdWxkIG5vdCBiZSByZXF1aXJlZCB0byBzZXQgPHR0Pmdjb3VudDwvdHQ+LCBzaW5jZQp0aGVyZSBpcyBubyBtZWNoYW5pc20gZm9yIDx0dD5nY291bnQ8L3R0PiB0byBiZSBzZXQgZXhjZXB0IGJ5IG9uZSBvZgo8dHQ+YmFzaWNfaXN0cmVhbTwvdHQ+J3MgbWVtYmVyIGZ1bmN0aW9ucy5dPC9pPjwvcD4KCgo8cD48aT5bQ3VyYedhbzogTmljbyBhZ3JlZXMgd2l0aCBwcm9wb3NlZCByZXNvbHV0aW9uLl08L2k+PC9wPgoKCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSByZWFsIGlzc3VlIGhlcmUgaXMgd2hldGhlciBvciBub3QgdGhlc2Ugc3RyaW5nIGlucHV0IGZ1bmN0aW9ucwpnZXQgdGhlaXIgY2hhcmFjdGVycyBmcm9tIGEgc3RyZWFtYnVmLCByYXRoZXIgdGhhbiBieSBjYWxsaW5nIGFuCmlzdHJlYW0ncyBtZW1iZXIgZnVuY3Rpb25zLCBhIHN0cmVhbWJ1ZiBzaWduYWxzIGZhaWx1cmUgZWl0aGVyIGJ5CnJldHVybmluZyBlb2Ygb3IgYnkgdGhyb3dpbmcgYW4gZXhjZXB0aW9uOyB0aGVyZSBhcmUgbm8gb3RoZXIKcG9zc2liaWxpdGllcy4gIFRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG1ha2VzIGl0IGNsZWFyIHRoYXQgdGhlc2UgdHdvCmZ1bmN0aW9ucyBkbyBnZXQgY2hhcmFjdGVycyBmcm9tIGEgc3RyZWFtYnVmLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI5MiI+PC9hPjkyLiBJbmNvbXBsZXRlIEFsZ29yaXRobSBSZXF1aXJlbWVudHM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjUgW2FsZ29yaXRobXNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE5pY28gSm9zdXR0aXMgPGI+RGF0ZTo8L2I+IDE5OTgtMDktMjk8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2FsZ29yaXRobXMiPmlzc3VlczwvYT4gaW4gW2FsZ29yaXRobXNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgc3RhbmRhcmQgZG9lcyBub3Qgc3RhdGUsIGhvdyBvZnRlbiBhIGZ1bmN0aW9uIG9iamVjdCBpcyBjb3BpZWQsCmNhbGxlZCwgb3IgdGhlIG9yZGVyIG9mIGNhbGxzIGluc2lkZSBhbiBhbGdvcml0aG0uIFRoaXMgbWF5IGxlYWQgdG8Kc3VycHJpc2luZy9idWdneSBiZWhhdmlvci4gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOiA8L3A+Cgo8cHJlPmNsYXNzIE50aCB7ICAgIC8vIGZ1bmN0aW9uIG9iamVjdCB0aGF0IHJldHVybnMgdHJ1ZSBmb3IgdGhlIG50aCBlbGVtZW50IAogIHByaXZhdGU6IAogICAgaW50IG50aDsgICAgIC8vIGVsZW1lbnQgdG8gcmV0dXJuIHRydWUgZm9yIAogICAgaW50IGNvdW50OyAgIC8vIGVsZW1lbnQgY291bnRlciAKICBwdWJsaWM6IAogICAgTnRoIChpbnQgbikgOiBudGgobiksIGNvdW50KDApIHsgCiAgICB9IAogICAgYm9vbCBvcGVyYXRvcigpIChpbnQpIHsgCiAgICAgICAgcmV0dXJuICsrY291bnQgPT0gbnRoOyAKICAgIH0gCn07IAouLi4uIAovLyByZW1vdmUgdGhpcmQgZWxlbWVudCAKICAgIGxpc3QmbHQ7aW50Jmd0Ozo6aXRlcmF0b3IgcG9zOyAKICAgIHBvcyA9IHJlbW92ZV9pZihjb2xsLmJlZ2luKCksY29sbC5lbmQoKSwgIC8vIHJhbmdlIAogICAgICAgICAgICAgICAgICAgIE50aCgzKSksICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGNyaXRlcmlvbiAKICAgIGNvbGwuZXJhc2UocG9zLGNvbGwuZW5kKCkpOyA8L3ByZT4KCjxwPlRoaXMgY2FsbCwgaW4gZmFjdCByZW1vdmVzIHRoZSAzcmQgPGI+QU5EIHRoZSA2dGg8L2I+IGVsZW1lbnQuIFRoaXMKaGFwcGVucyBiZWNhdXNlIHRoZSB1c3VhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYWxnb3JpdGhtIGNvcGllcyB0aGUKZnVuY3Rpb24gb2JqZWN0IGludGVybmFsbHk6IDwvcD4KCjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIEZvcndJdGVyLCBjbGFzcyBQcmVkaWNhdGUmZ3Q7IApGb3J3SXRlciBzdGQ6OnJlbW92ZV9pZihGb3J3SXRlciBiZWcsIEZvcndJdGVyIGVuZCwgUHJlZGljYXRlIG9wKSAKeyAKICAgIGJlZyA9IGZpbmRfaWYoYmVnLCBlbmQsIG9wKTsgCiAgICBpZiAoYmVnID09IGVuZCkgeyAKICAgICAgICByZXR1cm4gYmVnOyAKICAgIH0gCiAgICBlbHNlIHsgCiAgICAgICAgRm9yd0l0ZXIgbmV4dCA9IGJlZzsgCiAgICAgICAgcmV0dXJuIHJlbW92ZV9jb3B5X2lmKCsrbmV4dCwgZW5kLCBiZWcsIG9wKTsgCiAgICB9IAp9IDwvcHJlPgoKPHA+VGhlIGFsZ29yaXRobSB1c2VzIGZpbmRfaWYoKSB0byBmaW5kIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgc2hvdWxkCmJlIHJlbW92ZWQuIEhvd2V2ZXIsIGl0IHRoZW4gdXNlcyBhIGNvcHkgb2YgdGhlIHBhc3NlZCBmdW5jdGlvbiBvYmplY3QKdG8gcHJvY2VzcyB0aGUgcmVzdWx0aW5nIGVsZW1lbnRzIChpZiBhbnkpLiBIZXJlLCBOdGggaXMgdXNlZCBhZ2FpbgphbmQgcmVtb3ZlcyBhbHNvIHRoZSBzaXh0aCBlbGVtZW50LiBUaGlzIGJlaGF2aW9yIGNvbXByb21pc2VzIHRoZQphZHZhbnRhZ2Ugb2YgZnVuY3Rpb24gb2JqZWN0cyBiZWluZyBhYmxlIHRvIGhhdmUgYSBzdGF0ZS4gV2l0aG91dCBhbnkKY29zdCBpdCBjb3VsZCBiZSBhdm9pZGVkIChqdXN0IGltcGxlbWVudCBpdCBkaXJlY3RseSBpbnN0ZWFkIG9mCmNhbGxpbmcgZmluZF9pZigpKS4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkFkZCBhIG5ldyBwYXJhZ3JhcGggZm9sbG93aW5nIDI1IFthbGdvcml0aG1zXSBwYXJhZ3JhcGggODo8L3A+CjxibG9ja3F1b3RlPjxwPgpbTm90ZTogVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIGFsZ29yaXRobXMgdGhhdCB0YWtlIGZ1bmN0aW9uCm9iamVjdHMgYXMgYXJndW1lbnRzIGFyZSBwZXJtaXR0ZWQgdG8gY29weSB0aG9zZSBmdW5jdGlvbiBvYmplY3RzCmZyZWVseS4gIFByb2dyYW1tZXJzIGZvciB3aG9tIG9iamVjdCBpZGVudGl0eSBpcyBpbXBvcnRhbnQgc2hvdWxkCmNvbnNpZGVyIHVzaW5nIGEgd3JhcHBlciBjbGFzcyB0aGF0IHBvaW50cyB0byBhIG5vbmNvcGllZAppbXBsZW1lbnRhdGlvbiBvYmplY3QsIG9yIHNvbWUgZXF1aXZhbGVudCBzb2x1dGlvbi5dCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD48aT5bRHVibGluOiBQZXRlIEJlY2tlciBmZWx0IHRoYXQgdGhpcyBtYXkgbm90IGJlIGEgZGVmZWN0LApidXQgcmF0aGVyIHNvbWV0aGluZyB0aGF0IHByb2dyYW1tZXJzIG5lZWQgdG8gYmUgZWR1Y2F0ZWQgYWJvdXQuClRoZXJlIHdhcyBkaXNjdXNzaW9uIG9mIGFkZGluZyB3b3JkaW5nIHRvIHRoZSBlZmZlY3QgdGhhdCB0aGUgbnVtYmVyCmFuZCBvcmRlciBvZiBjYWxscyB0byBmdW5jdGlvbiBvYmplY3RzLCBpbmNsdWRpbmcgcHJlZGljYXRlcywgbm90CmFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5dPC9pPjwvcD4KCgo8cD48aT5bUHJlLUtvbmE6IE5pY28gY29tbWVudHM6IEl0IHNlZW1zIHRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgZG9uJ3QKaGF2ZSBhIGNsZWFyIHN0YXRlbWVudCBvZiAicHJlZGljYXRlIiBpbiB0aGUKc3RhbmRhcmQuIFBlb3BsZSBpbmNsdWRpbmcgbWUgc2VlbWVkIHRvIHRoaW5rICJhIGZ1bmN0aW9uCnJldHVybmluZyBhIEJvb2xlYW4gdmFsdWUgYW5kIGJlaW5nIGFibGUgdG8gYmUgY2FsbGVkIGJ5IGFuIFNUTAphbGdvcml0aG0gb3IgYmUgdXNlZCBhcyBzb3J0aW5nIGNyaXRlcmlvbiBvciAuLi4gaXMgYQpwcmVkaWNhdGUiLiBCdXQgYSBwcmVkaWNhdGUgaGFzIG1vcmUgcmVxdWlyZW1lbnRzOiBJdCBzaG91bGQKbmV2ZXIgY2hhbmdlIGl0cyBiZWhhdmlvciBkdWUgdG8gYSBjYWxsIG9yIGJlaW5nIGNvcGllZC4gSU1ITyB3ZSBoYXZlCnRvIHN0YXRlIHRoaXMgaW4gdGhlIHN0YW5kYXJkLiBJZiB5b3UgbGlrZSwgc2VlIHNlY3Rpb24gOC4xLjQgb2YgbXkKbGlicmFyeSBib29rIGZvciBhIGRldGFpbGVkIGRpc2N1c3Npb24uXTwvaT48L3A+CgoKPHA+PGk+W0tvbmE6IE5pY28gd2lsbCBwcm92aWRlIHdvcmRpbmcgdG8gdGhlIGVmZmVjdCB0aGF0ICJ1bmxlc3MKb3RoZXJ3aXNlIHNwZWNpZmllZCwgdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgYW5kIGNhbGxzIHRvIGZ1bmN0aW9uCm9iamVjdHMgYnkgYWxnb3JpdGhtcyBpcyB1bnNwZWNpZmllZCIuJm5ic3A7IENvbnNpZGVyIHBsYWNpbmcgaW4KMjUgW2FsZ29yaXRobXNdIGFmdGVyIHBhcmFncmFwaCA5Ll08L2k+PC9wPgoKCjxwPjxpPltTYW50YSBDcnV6OiBUaGUgc3RhbmRhcmQgZG9lc24ndCBjdXJyZW50bHkgZ3VhcmFudGVlIHRoYXQKICBmdW5jdGlvbnMgb2JqZWN0IHdvbid0IGJlIGNvcGllZCwgYW5kIHdoYXQgaXNuJ3QgZm9yYmlkZGVuIGlzCiAgYWxsb3dlZC4gIEl0IGlzIGJlbGlldmVkIChlc3BlY2lhbGx5IHNpbmNlIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlcmUKICB3cml0dGVuIGluIGNvbmNlcnQgd2l0aCB0aGUgc3RhbmRhcmQgZG8gbWFrZSBjb3BpZXMgb2YgZnVuY3Rpb24KICBvYmplY3RzKSB0aGF0IHRoaXMgd2FzIGludGVudGlvbmFsLiAgVGh1cywgbm8gbm9ybWF0aXZlIGNoYW5nZSBpcwogIG5lZWRlZC4gIFdoYXQgd2Ugc2hvdWxkIHB1dCBpbiBpcyBhIG5vbi1ub3JtYXRpdmUgbm90ZSBzdWdnZXN0aW5nIHRvCiAgcHJvZ3JhbW1lcnMgdGhhdCBpZiB0aGV5IHdhbnQgdG8gZ3VhcmFudGVlIHRoZSBsYWNrIG9mIGNvcHlpbmcgdGhleQogIHNob3VsZCB1c2Ugc29tZXRoaW5nIGxpa2UgdGhlIDx0dD5yZWY8L3R0PiB3cmFwcGVyLl08L2k+PC9wPgoKCjxwPjxpPltPeGZvcmQ6IE1hdHQgcHJvdmlkZWQgd29yZGluZy5dPC9pPjwvcD4KCgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI5OCI+PC9hPjk4LiBJbnB1dCBpdGVyYXRvciByZXF1aXJlbWVudHMgYXJlIGJhZGx5IHdyaXR0ZW48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjQuMS4xIFtpbnB1dC5pdGVyYXRvcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEFGTk9SIDxiPkRhdGU6PC9iPiAxOTk4LTEwLTA3PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpbnB1dC5pdGVyYXRvcnMiPmlzc3VlczwvYT4gaW4gW2lucHV0Lml0ZXJhdG9yc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRhYmxlIDcyIGluIDI0LjEuMSBbaW5wdXQuaXRlcmF0b3JzXSBzcGVjaWZpZXMgc2VtYW50aWNzIGZvcgo8dHQ+KnIrKzwvdHQ+IG9mOjwvcD4KCjxwPiZuYnNwOyZuYnNwOyA8dHQ+eyBUIHRtcCA9ICpyOyArK3I7IHJldHVybiB0bXA7IH08L3R0PjwvcD4KCjxwPlRoZXJlIGFyZSB0d28gcHJvYmxlbXMgd2l0aCB0aGlzLiAgRmlyc3QsIHRoZSByZXR1cm4gdHlwZSBpcwpzcGVjaWZpZWQgdG8gYmUgIlQiLCBhcyBvcHBvc2VkIHRvIHNvbWV0aGluZyBsaWtlICJjb252ZXJ0aWJsZSB0byBUIi4KVGhpcyBpcyB0b28gc3BlY2lmaWM6IHdlIHdhbnQgdG8gYWxsb3cgKnIrKyB0byByZXR1cm4gYW4gbHZhbHVlLjwvcD4KCjxwPlNlY29uZCwgd3JpdGluZyB0aGUgc2VtYW50aWNzIGluIHRlcm1zIG9mIGNvZGUgbWlzbGVhZGluZ2x5CnN1Z2dlc3RzIHRoYXQgdGhlIGVmZmVjdHMgKnIrKyBzaG91bGQgcHJlY2lzZWx5IHJlcGxpY2F0ZSB0aGUgYmVoYXZpb3IKb2YgdGhpcyBjb2RlLCBpbmNsdWRpbmcgc2lkZSBlZmZlY3RzLiAgKERvZXMgdGhpcyBtZWFuIHRoYXQgKnIrKwpzaG91bGQgaW52b2tlIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGV4YWN0bHkgYXMgbWFueSB0aW1lcyBhcyB0aGUgc2FtcGxlCmNvZGUgYWJvdmUgd291bGQ/KSBTZWUgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMzNCI+MzM0PC9hPiBmb3IgYSBzaW1pbGFyCnByb2JsZW0uPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIFRhYmxlIDcyIGluIDI0LjEuMSBbaW5wdXQuaXRlcmF0b3JzXSwgY2hhbmdlIHRoZSByZXR1cm4gdHlwZQpmb3IgPHR0PipyKys8L3R0PiBmcm9tIDx0dD5UPC90dD4gdG8gImNvbnZlcnRpYmxlIHRvIFQiLjwvcD4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhpcyBpc3N1ZSBoYXMgdHdvIHBhcnRzOiB0aGUgcmV0dXJuIHR5cGUsIGFuZCB0aGUgbnVtYmVyIG9mIHRpbWVzCiAgdGhlIGNvcHkgY29uc3RydWN0b3IgaXMgaW52b2tlZC48L3A+Cgo8cD5UaGUgTFdHIGJlbGlldmVzIHRoZSB0aGUgZmlyc3QgcGFydCBpcyBhIHJlYWwgaXNzdWUuICBJdCdzCiAgaW5hcHByb3ByaWF0ZSBmb3IgdGhlIHJldHVybiB0eXBlIHRvIGJlIHNwZWNpZmllZCBzbyBtdWNoIG1vcmUKICBwcmVjaXNlbHkgZm9yICpyKysgdGhhbiBpdCBpcyBmb3IgKnIuICBJbiBwYXJ0aWN1bGFyLCBpZiByIGlzIG9mCiAgKHNheSkgdHlwZSA8dHQ+aW50KjwvdHQ+LCB0aGVuICpyKysgaXNuJ3QgPHR0PmludDwvdHQ+LAogIGJ1dCA8dHQ+aW50JmFtcDs8L3R0Pi48L3A+Cgo8cD5UaGUgTFdHIGRvZXMgbm90IGJlbGlldmUgdGhhdCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjb3B5CiAgY29uc3RydWN0b3IgaXMgaW52b2tlZCBpcyBhIHJlYWwgaXNzdWUuICBUaGlzIGNhbiB2YXJ5IGluIGFueSBjYXNlLAogIGJlY2F1c2Ugb2YgbGFuZ3VhZ2UgcnVsZXMgb24gY29weSBjb25zdHJ1Y3RvciBlbGlzaW9uLiAgVGhhdCdzIHRvbwogIG11Y2ggdG8gcmVhZCBpbnRvIHRoZXNlIHNlbWFudGljcyBjbGF1c2VzLjwvcD4KCjxwPkFkZGl0aW9uYWxseSwgYXMgRGF2ZSBBYnJhaGFtcyBwb2ludGVkIG91dCAoYysrc3RkLWxpYi0xMzcwMyk6IHNpbmNlIAogICB3ZSdyZSB0b2xkICgyNC4xLzMpIHRoYXQgZm9yd2FyZCBpdGVyYXRvcnMgc2F0aXNmeSBhbGwgdGhlIHJlcXVpcmVtZW50cwogICBvZiBpbnB1dCBpdGVyYXRvcnMsIHdlIGNhbid0IGltcG9zZSBhbnkgcmVxdWlyZW1lbnRzIGluIHRoZSBJbnB1dAogICBJdGVyYXRvciByZXF1aXJlbWVudHMgdGFibGUgdGhhdCBmb3J3YXJkIGl0ZXJhdG9ycyBkb24ndCBzYXRpc2Z5LjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxMDMiPjwvYT4xMDMuIHNldDo6aXRlcmF0b3IgaXMgcmVxdWlyZWQgdG8gYmUgbW9kaWZpYWJsZSwgYnV0IHRoaXMgYWxsb3dzIG1vZGlmaWNhdGlvbiBvZiBrZXlzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjEuNCBbYXNzb2NpYXRpdmUucmVxbXRzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBBRk5PUiA8Yj5EYXRlOjwvYj4gMTk5OC0xMC0wNzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYXNzb2NpYXRpdmUucmVxbXRzIj5pc3N1ZXM8L2E+IGluIFthc3NvY2lhdGl2ZS5yZXFtdHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5TZXQ6Oml0ZXJhdG9yIGlzIGRlc2NyaWJlZCBhcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHdpdGggYQpyZWZlcmVuY2UgdG8gdGhlIGNvbnRhaW5lciByZXF1aXJlbWVudDsgdGhlIGNvbnRhaW5lciByZXF1aXJlbWVudCBzYXlzCnRoYXQgY29uc3RfaXRlcmF0b3IgaXMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gY29uc3QgVCBhbmQgaXRlcmF0b3IgYW4KaXRlcmF0b3IgcG9pbnRpbmcgdG8gVC48L3A+Cgo8cD4yMy4xLjIgcGFyYWdyYXBoIDIgaW1wbGllcyB0aGF0IHRoZSBrZXlzIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgdG8KYnJlYWsgdGhlIG9yZGVyaW5nIG9mIGVsZW1lbnRzLiBCdXQgdGhhdCBpcyBub3QgY2xlYXJseQpzcGVjaWZpZWQuIEVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCB0aGUgY3VycmVudCBzdGFuZGFyZCByZXF1aXJlcwp0aGF0IGl0ZXJhdG9yIGZvciBhc3NvY2lhdGl2ZSBjb250YWluZXJzIGJlIGRpZmZlcmVudCBmcm9tCmNvbnN0X2l0ZXJhdG9yLiBTZXQsIGZvciBleGFtcGxlLCBoYXMgdGhlIGZvbGxvd2luZzogPC9wPgoKPHA+PHR0PnR5cGVkZWYgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBpdGVyYXRvcjs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvLyBTZWUgX2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzXzwvdHQ+PC9wPgoKPHA+MjMuMSBbY29udGFpbmVyLnJlcXVpcmVtZW50c10gYWN0dWFsbHkgcmVxdWlyZXMgdGhhdCBpdGVyYXRvciB0eXBlIHBvaW50aW5nCnRvIFQgKHRhYmxlIDY1KS4gRGlzYWxsb3dpbmcgdXNlciBtb2RpZmljYXRpb24gb2Yga2V5cyBieSBjaGFuZ2luZyB0aGUKc3RhbmRhcmQgdG8gcmVxdWlyZSBhbiBpdGVyYXRvciBmb3IgYXNzb2NpYXRpdmUgY29udGFpbmVyIHRvIGJlIHRoZQpzYW1lIGFzIGNvbnN0X2l0ZXJhdG9yIHdvdWxkIGJlIG92ZXJraWxsIHNpbmNlIHRoYXQgd2lsbCB1bm5lY2Vzc2FyaWx5CnNpZ25pZmljYW50bHkgcmVzdHJpY3QgdGhlIHVzYWdlIG9mIGFzc29jaWF0aXZlIGNvbnRhaW5lci4gQSBjbGFzcyB0bwpiZSB1c2VkIGFzIGVsZW1lbnRzIG9mIHNldCwgZm9yIGV4YW1wbGUsIGNhbiBubyBsb25nZXIgYmUgbW9kaWZpZWQKZWFzaWx5IHdpdGhvdXQgZWl0aGVyIHJlZGVzaWduaW5nIHRoZSBjbGFzcyAodXNpbmcgbXV0YWJsZSBvbiBmaWVsZHMKdGhhdCBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0aCBvcmRlcmluZyksIG9yIHVzaW5nIGNvbnN0X2Nhc3QsIHdoaWNoCmRlZmVhdHMgcmVxdWlyaW5nIGl0ZXJhdG9yIHRvIGJlIGNvbnN0X2l0ZXJhdG9yLiBUaGUgcHJvcG9zZWQgc29sdXRpb24KZ29lcyBpbiBsaW5lIHdpdGggdHJ1c3RpbmcgdXNlciBrbm93cyB3aGF0IGhlIGlzIGRvaW5nLiA8L3A+Cgo8cD48Yj5PdGhlciBPcHRpb25zIEV2YWx1YXRlZDo8L2I+IDwvcD4KCjxwPk9wdGlvbiBBLiZuYnNwOyZuYnNwOyBJbiAyMy4xLjQgW2Fzc29jaWF0aXZlLnJlcW10c10sIHBhcmFncmFwaCAyLCBhZnRlcgpmaXJzdCBzZW50ZW5jZSwgYW5kIGJlZm9yZSAiSW4gYWRkaXRpb24sLi4uIiwgYWRkIG9uZSBsaW5lOgo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5Nb2RpZmljYXRpb24gb2Yga2V5cyBzaGFsbCBub3QgY2hhbmdlIHRoZWlyIHN0cmljdCB3ZWFrIG9yZGVyaW5nLiA8L3A+CjwvYmxvY2txdW90ZT4KCjxwPk9wdGlvbiBCLiZuYnNwO0FkZCB0aHJlZSBuZXcgc2VudGVuY2VzIHRvIDIzLjEuNCBbYXNzb2NpYXRpdmUucmVxbXRzXTo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5BdCB0aGUgZW5kIG9mIHBhcmFncmFwaCA1OiAiS2V5cyBpbiBhbiBhc3NvY2lhdGl2ZSBjb250YWluZXIKICBhcmUgaW1tdXRhYmxlLiIgQXQgdGhlIGVuZCBvZiBwYXJhZ3JhcGggNjogIkZvcgogIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMgd2hlcmUgdGhlIHZhbHVlIHR5cGUgaXMgdGhlIHNhbWUgYXMgdGhlIGtleQogIHR5cGUsIGJvdGggPHR0Pml0ZXJhdG9yPC90dD4gYW5kIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+IGFyZQogIGNvbnN0YW50IGl0ZXJhdG9ycy4gSXQgaXMgdW5zcGVjaWZpZWQgd2hldGhlciBvciBub3QKICA8dHQ+aXRlcmF0b3I8L3R0PiBhbmQgPHR0PmNvbnN0X2l0ZXJhdG9yPC90dD4gYXJlIHRoZSBzYW1lCiAgdHlwZS4iPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5PcHRpb24gQy4mbmJzcDtUbyAyMy4xLjQgW2Fzc29jaWF0aXZlLnJlcW10c10sIHBhcmFncmFwaCAzLCB3aGljaApjdXJyZW50bHkgcmVhZHM6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+VGhlIHBocmFzZSBgYGVxdWl2YWxlbmNlIG9mIGtleXMnJyBtZWFucyB0aGUgZXF1aXZhbGVuY2UgcmVsYXRpb24gaW1wb3NlZCBieSB0aGUKICBjb21wYXJpc29uIGFuZCBub3QgdGhlIG9wZXJhdG9yPT0gb24ga2V5cy4gVGhhdCBpcywgdHdvIGtleXMgazEgYW5kIGsyIGluIHRoZSBzYW1lCiAgY29udGFpbmVyIGFyZSBjb25zaWRlcmVkIHRvIGJlIGVxdWl2YWxlbnQgaWYgZm9yIHRoZSBjb21wYXJpc29uIG9iamVjdCBjb21wLCBjb21wKGsxLCBrMikKICA9PSBmYWxzZSAmYW1wOyZhbXA7IGNvbXAoazIsIGsxKSA9PSBmYWxzZS48L3A+CjwvYmxvY2txdW90ZT4KCjxwPiZuYnNwOyBhZGQgdGhlIGZvbGxvd2luZzo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5Gb3IgYW55IHR3byBrZXlzIGsxIGFuZCBrMiBpbiB0aGUgc2FtZSBjb250YWluZXIsIGNvbXAoazEsIGsyKSBzaGFsbCByZXR1cm4gdGhlIHNhbWUKICB2YWx1ZSB3aGVuZXZlciBpdCBpcyBldmFsdWF0ZWQuIFtOb3RlOiBJZiBrMiBpcyByZW1vdmVkIGZyb20gdGhlIGNvbnRhaW5lciBhbmQgbGF0ZXIKICByZWluc2VydGVkLCBjb21wKGsxLCBrMikgbXVzdCBzdGlsbCByZXR1cm4gYSBjb25zaXN0ZW50IHZhbHVlIGJ1dCB0aGlzIHZhbHVlIG1heSBiZQogIGRpZmZlcmVudCB0aGFuIGl0IHdhcyB0aGUgZmlyc3QgdGltZSBrMSBhbmQgazIgd2VyZSBpbiB0aGUgc2FtZSBjb250YWluZXIuIFRoaXMgaXMKICBpbnRlbmRlZCB0byBhbGxvdyB1c2FnZSBsaWtlIGEgc3RyaW5nIGtleSB0aGF0IGNvbnRhaW5zIGEgZmlsZW5hbWUsIHdoZXJlIGNvbXAgY29tcGFyZXMKICBmaWxlIGNvbnRlbnRzOyBpZiBrMiBpcyByZW1vdmVkLCB0aGUgZmlsZSBpcyBjaGFuZ2VkLCBhbmQgdGhlIHNhbWUgazIgKGZpbGVuYW1lKSBpcwogIHJlaW5zZXJ0ZWQsIGNvbXAoazEsIGsyKSBtdXN0IGFnYWluIHJldHVybiBhIGNvbnNpc3RlbnQgdmFsdWUgYnV0IHRoaXMgdmFsdWUgbWF5IGJlCiAgZGlmZmVyZW50IHRoYW4gaXQgd2FzIHRoZSBwcmV2aW91cyB0aW1lIGsyIHdhcyBpbiB0aGUgY29udGFpbmVyLl08L3A+CjwvYmxvY2txdW90ZT4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgdGhlIGZvbGxvd2luZyB0byAyMy4xLjQgW2Fzc29jaWF0aXZlLnJlcW10c10gYXQKdGhlIGluZGljYXRlZCBsb2NhdGlvbjo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5BdCB0aGUgZW5kIG9mIHBhcmFncmFwaCAzOiAiRm9yIGFueSB0d28ga2V5cyBrMSBhbmQgazIgaW4gdGhlIHNhbWUgY29udGFpbmVyLAogIGNhbGxpbmcgY29tcChrMSwgazIpIHNoYWxsIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUKICB2YWx1ZS4iPC9wPgogIDxwPkF0IHRoZSBlbmQgb2YgcGFyYWdyYXBoIDU6ICJLZXlzIGluIGFuIGFzc29jaWF0aXZlIGNvbnRhaW5lciBhcmUgaW1tdXRhYmxlLiI8L3A+CiAgPHA+QXQgdGhlIGVuZCBvZiBwYXJhZ3JhcGggNjogIkZvciBhc3NvY2lhdGl2ZSBjb250YWluZXJzIHdoZXJlIHRoZSB2YWx1ZSB0eXBlIGlzIHRoZQogIHNhbWUgYXMgdGhlIGtleSB0eXBlLCBib3RoIDx0dD5pdGVyYXRvcjwvdHQ+IGFuZCA8dHQ+Y29uc3RfaXRlcmF0b3I8L3R0PiBhcmUgY29uc3RhbnQKICBpdGVyYXRvcnMuIEl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgb3Igbm90IDx0dD5pdGVyYXRvcjwvdHQ+IGFuZCA8dHQ+Y29uc3RfaXRlcmF0b3I8L3R0PgogIGFyZSB0aGUgc2FtZSB0eXBlLiI8L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+U2V2ZXJhbCBhcmd1bWVudHMgd2VyZSBhZHZhbmNlZCBmb3IgYW5kIGFnYWluc3QgYWxsb3dpbmcgc2V0IGVsZW1lbnRzIHRvIGJlCm11dGFibGUgYXMgbG9uZyBhcyB0aGUgb3JkZXJpbmcgd2FzIG5vdCBlZmZlY3RlZC4gVGhlIGFyZ3VtZW50IHdoaWNoIHN3YXllZCB0aGUKTFdHIHdhcyBvbmUgb2Ygc2FmZXR5OyBpZiBlbGVtZW50cyB3ZXJlIG11dGFibGUsIHRoZXJlIHdvdWxkIGJlIG5vIGNvbXBpbGUtdGltZQp3YXkgdG8gZGV0ZWN0IG9mIGEgc2ltcGxlIHVzZXIgb3ZlcnNpZ2h0IHdoaWNoIGNhdXNlZCBvcmRlcmluZyB0byBiZQptb2RpZmllZC4gIFRoZXJlIHdhcyBhIHJlcG9ydCB0aGF0IHRoaXMgaGFkIGFjdHVhbGx5IGhhcHBlbmVkIGluIHByYWN0aWNlLAphbmQgaGFkIGJlZW4gcGFpbmZ1bCB0byBkaWFnbm9zZS4gIElmIHVzZXJzIG5lZWQgdG8gbW9kaWZ5IGVsZW1lbnRzLAppdCBpcyBwb3NzaWJsZSB0byB1c2UgbXV0YWJsZSBtZW1iZXJzIG9yIGNvbnN0X2Nhc3QuPC9wPgoKPHA+U2ltcGx5IHJlcXVpcmluZyB0aGF0IGtleXMgYmUgaW1tdXRhYmxlIGlzIG5vdCBzdWZmaWNpZW50LCBiZWNhdXNlIHRoZSBjb21wYXJpc29uCm9iamVjdCBtYXkgaW5kaXJlY3RseSAodmlhIHBvaW50ZXJzKSBvcGVyYXRlIG9uIHZhbHVlcyBvdXRzaWRlIG9mIHRoZSBrZXlzLjwvcD4KCjxwPgpUaGUgdHlwZXMgPHR0Pml0ZXJhdG9yPC90dD4gYW5kIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+IGFyZSBwZXJtaXR0ZWQKdG8gYmUgZGlmZmVyZW50IHR5cGVzIHRvIGFsbG93IGZvciBwb3RlbnRpYWwgZnV0dXJlIHdvcmsgaW4gd2hpY2ggc29tZQptZW1iZXIgZnVuY3Rpb25zIG1pZ2h0IGJlIG92ZXJsb2FkZWQgYmV0d2VlbiB0aGUgdHdvIHR5cGVzLiAgTm8gc3VjaAptZW1iZXIgZnVuY3Rpb25zIGV4aXN0IG5vdywgYW5kIHRoZSBMV0cgYmVsaWV2ZXMgdGhhdCB1c2VyIGZ1bmN0aW9uYWxpdHkKd2lsbCBub3QgYmUgaW1wYWlyZWQgYnkgcGVybWl0dGluZyB0aGUgdHdvIHR5cGVzIHRvIGJlIHRoZSBzYW1lLiAgQQpmdW5jdGlvbiB0aGF0IG9wZXJhdGVzIG9uIGJvdGggaXRlcmF0b3IgdHlwZXMgY2FuIGJlIGRlZmluZWQgZm9yIAo8dHQ+Y29uc3RfaXRlcmF0b3I8L3R0PiBhbG9uZSwgYW5kIGNhbiByZWx5IG9uIHRoZSBhdXRvbWF0aWMKY29udmVyc2lvbiBmcm9tIDx0dD5pdGVyYXRvcjwvdHQ+IHRvIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+Lgo8L3A+Cgo8cD48aT5bVG9reW86IFRoZSBMV0cgY3JhZnRlZCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBhbmQgcmF0aW9uYWxlLl08L2k+PC9wPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxMDYiPjwvYT4xMDYuIE51bWVyaWMgbGlicmFyeSBwcml2YXRlIG1lbWJlcnMgYXJlIGltcGxlbWVudGF0aW9uIGRlZmluZWQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuNS41IFt0ZW1wbGF0ZS5zbGljZS5hcnJheV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQUZOT1IgPGI+RGF0ZTo8L2I+IDE5OTgtMTAtMDc8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3RlbXBsYXRlLnNsaWNlLmFycmF5Ij5pc3N1ZXM8L2E+IGluIFt0ZW1wbGF0ZS5zbGljZS5hcnJheV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgaW4gdGhlIHdob2xlIHN0YW5kYXJkIHdoZXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBoYXMgdG8gZG9jdW1lbnQKc29tZXRoaW5nIHByaXZhdGUuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlbW92ZSB0aGUgY29tbWVudCB3aGljaCBzYXlzICIvLyByZW1haW5kZXIgaW1wbGVtZW50YXRpb24gZGVmaW5lZCIgZnJvbToKPC9wPgoKPHVsPgogIDxsaT4yNi41LjUgW3RlbXBsYXRlLnNsaWNlLmFycmF5XTwvbGk+CiAgPGxpPjI2LjUuNyBbdGVtcGxhdGUuZ3NsaWNlLmFycmF5XTwvbGk+CiAgPGxpPjI2LjUuOCBbdGVtcGxhdGUubWFzay5hcnJheV08L2xpPgogIDxsaT4yNi41LjkgW3RlbXBsYXRlLmluZGlyZWN0LmFycmF5XTwvbGk+CjwvdWw+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTA4Ij48L2E+MTA4LiBMaWZldGltZSBvZiBleGNlcHRpb246OndoYXQoKSByZXR1cm4gdW5zcGVjaWZpZWQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTguNi4xIFt0eXBlLmluZm9dIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEFGTk9SIDxiPkRhdGU6PC9iPiAxOTk4LTEwLTA3PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCN0eXBlLmluZm8iPmlzc3VlczwvYT4gaW4gW3R5cGUuaW5mb10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkluIDE4LjYuMSwgcGFyYWdyYXBocyA4LTksIHRoZSBsaWZldGltZSBvZiB0aGUgcmV0dXJuIHZhbHVlIG9mCmV4Y2VwdGlvbjo6d2hhdCgpIGlzIGxlZnQgdW5zcGVjaWZpZWQuIFRoaXMgaXNzdWUgaGFzIGltcGxpY2F0aW9ucwp3aXRoIGV4Y2VwdGlvbiBzYWZldHkgb2YgZXhjZXB0aW9uIGhhbmRsaW5nOiBzb21lIGV4Y2VwdGlvbnMgc2hvdWxkCm5vdCB0aHJvdyBiYWRfYWxsb2MuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRvIDE4LjYuMSBbdHlwZS5pbmZvXSBwYXJhZ3JhcGggOSAoZXhjZXB0aW9uOjp3aGF0IG5vdGVzCmNsYXVzZSkgdGhlIHNlbnRlbmNlOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPlRoZSByZXR1cm4gdmFsdWUgcmVtYWlucyB2YWxpZCB1bnRpbCB0aGUgZXhjZXB0aW9uIG9iamVjdCBmcm9tIHdoaWNoIGl0IGlzIG9idGFpbmVkIGlzCiAgZGVzdHJveWVkIG9yIGEgbm9uLWNvbnN0IG1lbWJlciBmdW5jdGlvbiBvZiB0aGUgZXhjZXB0aW9uIG9iamVjdCBpcyBjYWxsZWQuPC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPklmIGFuIGV4Y2VwdGlvbiBvYmplY3QgaGFzIG5vbi1jb25zdCBtZW1iZXJzLCB0aGV5IG1heSBiZSB1c2VkCnRvIHNldCBpbnRlcm5hbCBzdGF0ZSB0aGF0IHNob3VsZCBhZmZlY3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcKcmV0dXJuZWQgYnkgPHR0PndoYXQoKTwvdHQ+Lgo8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTA5Ij48L2E+MTA5LiBNaXNzaW5nIGJpbmRlcnMgZm9yIG5vbi1jb25zdCBzZXF1ZW5jZSBlbGVtZW50czwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiBELjggW2RlcHIubGliLmJpbmRlcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEJqYXJuZSBTdHJvdXN0cnVwIDxiPkRhdGU6PC9iPiAxOTk4LTEwLTA3PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNkZXByLmxpYi5iaW5kZXJzIj5pc3N1ZXM8L2E+IGluIFtkZXByLmxpYi5iaW5kZXJzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KCjxwPlRoZXJlIGFyZSBubyB2ZXJzaW9ucyBvZiBiaW5kZXJzIHRoYXQgYXBwbHkgdG8gbm9uLWNvbnN0IGVsZW1lbnRzCm9mIGEgc2VxdWVuY2UuIFRoaXMgbWFrZXMgZXhhbXBsZXMgbGlrZSBmb3JfZWFjaCgpIHVzaW5nIGJpbmQybmQoKSBvbgpwYWdlIDUyMSBvZiAiVGhlIEMrKyBQcm9ncmFtbWluZyBMYW5ndWFnZSAoM3JkKSIKbm9uLWNvbmZvcm1pbmcuIFN1aXRhYmxlIHZlcnNpb25zIG9mIHRoZSBiaW5kZXJzIG5lZWQgdG8gYmUgYWRkZWQuPC9wPgoKPHA+RnVydGhlciBkaXNjdXNzaW9uIGZyb20gTmljbzo8L3A+Cgo8cD5XaGF0IGlzIHByb2JhYmx5IG1lYW50IGhlcmUgaXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOjwvcD4KCjxwcmU+Y2xhc3MgRWxlbSB7IAogIHB1YmxpYzogCiAgICB2b2lkIHByaW50IChpbnQgaSkgY29uc3QgeyB9IAogICAgdm9pZCBtb2RpZnkgKGludCBpKSB7IH0gCn07IDwvcHJlPgo8cHJlPmludCBtYWluKCkgCnsgCiAgICB2ZWN0b3ImbHQ7RWxlbSZndDsgY29sbCgyKTsgCiAgICBmb3JfZWFjaCAoY29sbC5iZWdpbigpLCBjb2xsLmVuZCgpLCBiaW5kMm5kKG1lbV9mdW5fcmVmKCZhbXA7RWxlbTo6cHJpbnQpLDQyKSk7ICAgIC8vIE9LIAogICAgZm9yX2VhY2ggKGNvbGwuYmVnaW4oKSwgY29sbC5lbmQoKSwgYmluZDJuZChtZW1fZnVuX3JlZigmYW1wO0VsZW06Om1vZGlmeSksNDIpKTsgICAvLyBFUlJPUiAKfTwvcHJlPgoKPHA+VGhlIGVycm9yIHJlc3VsdHMgZnJvbSB0aGUgZmFjdCB0aGF0IGJpbmQybmQoKSBwYXNzZXMgaXRzIGZpcnN0CmFyZ3VtZW50ICh0aGUgYXJndW1lbnQgb2YgdGhlIHNlcXVlbmNlKSBhcyBjb25zdGFudCByZWZlcmVuY2UuIFNlZSB0aGUKZm9sbG93aW5nIHR5cGljYWwgaW1wbGVtZW50YXRpb246PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgT3BlcmF0aW9uJmd0OyAKY2xhc3MgYmluZGVyMm5kIAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uJmx0O3R5cGVuYW1lIE9wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgT3BlcmF0aW9uOjpyZXN1bHRfdHlwZSZndDsgeyAKcHJvdGVjdGVkOiAKICBPcGVyYXRpb24gb3A7IAogIHR5cGVuYW1lIE9wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7IApwdWJsaWM6IAogIGJpbmRlcjJuZChjb25zdCBPcGVyYXRpb24mYW1wOyBvLCAKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSZhbXA7IHYpIAogICAgICA6IG9wKG8pLCB2YWx1ZSh2KSB7fSA8L3ByZT4KICA8cHJlPiB0eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlIAogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJmFtcDsgeCkgY29uc3QgeyAKICAgIHJldHVybiBvcCh4LCB2YWx1ZSk7IAogIH0gCn07PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPlRoZSBzb2x1dGlvbiBpcyB0byBvdmVybG9hZCBvcGVyYXRvciAoKSBvZiBiaW5kMm5kIGZvciBub24tY29uc3RhbnQgYXJndW1lbnRzOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIE9wZXJhdGlvbiZndDsgCmNsYXNzIGJpbmRlcjJuZCAKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbiZsdDt0eXBlbmFtZSBPcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIE9wZXJhdGlvbjo6cmVzdWx0X3R5cGUmZ3Q7IHsgCnByb3RlY3RlZDogCiAgT3BlcmF0aW9uIG9wOyAKICB0eXBlbmFtZSBPcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOyAKcHVibGljOiAKICBiaW5kZXIybmQoY29uc3QgT3BlcmF0aW9uJmFtcDsgbywgCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIE9wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmYW1wOyB2KSAKICAgICAgOiBvcChvKSwgdmFsdWUodikge30gPC9wcmU+CiAgPHByZT4gdHlwZW5hbWUgT3BlcmF0aW9uOjpyZXN1bHRfdHlwZSAKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIE9wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSZhbXA7IHgpIGNvbnN0IHsgCiAgICByZXR1cm4gb3AoeCwgdmFsdWUpOyAKICB9IAogIHR5cGVuYW1lIE9wZXJhdGlvbjo6cmVzdWx0X3R5cGUgCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBPcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmYW1wOyB4KSBjb25zdCB7IAogICAgcmV0dXJuIG9wKHgsIHZhbHVlKTsgCiAgfSAKfTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPjxiPkhvd2FyZCBiZWxpZXZlcyB0aGVyZSBpcyBhIGZsYXc8L2I+IGluIHRoaXMgcmVzb2x1dGlvbi4KU2VlIGMrK3N0ZC1saWItOTEyNy4gIFdlIG1heSBuZWVkIHRvIHJlb3BlbiB0aGlzIGlzc3VlLjwvcD4KCjxwPkluIEQuOCBbZGVwci5saWIuYmluZGVyc10gaW4gdGhlIGRlY2xhcmF0aW9uIG9mIGJpbmRlcjFzdCBhZnRlcjo8L3A+CjxibG9ja3F1b3RlPgogIDxwPjx0dD50eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlPGJyPgogICZuYnNwO29wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSZhbXA7IHgpIGNvbnN0OzwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+CjxwPmluc2VydDo8L3A+CjxibG9ja3F1b3RlPgogIDxwPjx0dD50eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlPGJyPgogICZuYnNwO29wZXJhdG9yKCkodHlwZW5hbWUgT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSZhbXA7IHgpIGNvbnN0OzwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+CjxwPkluIEQuOCBbZGVwci5saWIuYmluZGVyc10gaW4gdGhlIGRlY2xhcmF0aW9uIG9mIGJpbmRlcjJuZCBhZnRlcjo8L3A+CjxibG9ja3F1b3RlPgogIDxwPjx0dD50eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlPGJyPgogICZuYnNwO29wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJmFtcDsgeCkgY29uc3Q7PC90dD48L3A+CjwvYmxvY2txdW90ZT4KPHA+aW5zZXJ0OjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+PHR0PnR5cGVuYW1lIE9wZXJhdGlvbjo6cmVzdWx0X3R5cGU8YnI+CiAgJm5ic3A7b3BlcmF0b3IoKSh0eXBlbmFtZSBPcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmYW1wOyB4KSBjb25zdDs8L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IFRoZSBMV0cgZGlzY3Vzc2VkIHRoaXMgYXQgc29tZSBsZW5ndGguSXQgd2FzIGFncmVlZCB0aGF0CnRoaXMgaXMgYSBtaXN0YWtlIGluIHRoZSBkZXNpZ24sIGJ1dCB0aGVyZSB3YXMgbm8gY29uc2Vuc3VzIG9uIHdoZXRoZXIKaXQgd2FzIGEgZGVmZWN0IGluIHRoZSBTdGFuZGFyZC4gIFN0cmF3IHZvdGU6IE5BRCAtIDUuICBBY2NlcHQKcHJvcG9zZWQgcmVzb2x1dGlvbiAtIDMuICBMZWF2ZSBvcGVuIC0gNi5dPC9pPjwvcD4KCgo8cD48aT5bQ29wZW5oYWdlbjogSXQgd2FzIGdlbmVyYWxseSBhZ3JlZWQgdGhhdCB0aGlzIHdhcyBhIGRlZmVjdC4KU3RyYXAgcG9sbDogTkFEIC0gMC4gIEFjY2VwdCBwcm9wb3NlZCByZXNvbHV0aW9uIC0gMTAuIApMZWF2ZSBvcGVuIC0gMS5dPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjExMCI+PC9hPjExMC4gaXN0cmVhbWJ1Zl9pdGVyYXRvcjo6ZXF1YWwgbm90IGNvbnN0PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI0LjUuMyBbaXN0cmVhbWJ1Zi5pdGVyYXRvcl0sIDI0LjUuMy41IFtpc3RyZWFtYnVmLml0ZXJhdG9yOjplcXVhbF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTmF0aGFuIE15ZXJzIDxiPkRhdGU6PC9iPiAxOTk4LTEwLTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpc3RyZWFtYnVmLml0ZXJhdG9yIj5pc3N1ZXM8L2E+IGluIFtpc3RyZWFtYnVmLml0ZXJhdG9yXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+TWVtYmVyIGlzdHJlYW1idWZfaXRlcmF0b3ImbHQ7Jmd0Ozo6ZXF1YWwgaXMgbm90IGRlY2xhcmVkCiJjb25zdCIsIHlldCAyNC41LjMuNiBbaXN0cmVhbWJ1Zi5pdGVyYXRvcjo6b3A9PV0gc2F5cyB0aGF0IG9wZXJhdG9yPT0sCndoaWNoIGlzIGNvbnN0LCBjYWxscyBpdC4gVGhpcyBpcyBjb250cmFkaWN0b3J5LiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNC41LjMgW2lzdHJlYW1idWYuaXRlcmF0b3JdIGFuZCBhbHNvIGluIDI0LjUuMy41IFtpc3RyZWFtYnVmLml0ZXJhdG9yOjplcXVhbF0sCnJlcGxhY2U6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5ib29sIGVxdWFsKGlzdHJlYW1idWZfaXRlcmF0b3ImYW1wOyBiKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+d2l0aDo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPmJvb2wgZXF1YWwoY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvciZhbXA7IGIpIGNvbnN0OzwvcHJlPgo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTEyIj48L2E+MTEyLiBNaW5vciB0eXBvIGluIDx0dD5vc3RyZWFtYnVmX2l0ZXJhdG9yPC90dD4gY29uc3RydWN0b3I8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjQuNS40LjEgW29zdHJlYW1idWYuaXRlci5jb25zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXR0IEF1c3Rlcm4gPGI+RGF0ZTo8L2I+IDE5OTgtMTAtMjA8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIDxiPnJlcXVpcmVzPC9iPiBjbGF1c2UgZm9yIDx0dD5vc3RyZWFtYnVmX2l0ZXJhdG9yPC90dD4ncwpjb25zdHJ1Y3RvciBmcm9tIGFuIDx0dD5vc3RyZWFtX3R5cGU8L3R0PiAoMjQuNS40LjEsIHBhcmFncmFwaCAxKQpyZWFkcyAiPGk+czwvaT4gaXMgbm90IG51bGwiLiBIb3dldmVyLCA8aT5zPC9pPiBpcyBhCnJlZmVyZW5jZSwgYW5kIHJlZmVyZW5jZXMgY2FuJ3QgYmUgbnVsbC4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjQuNS40LjEgW29zdHJlYW1idWYuaXRlci5jb25zXTo8L3A+Cgo8cD5Nb3ZlIHRoZSBjdXJyZW50IHBhcmFncmFwaCAxLCB3aGljaCByZWFkcyAiUmVxdWlyZXM6IHMgaXMgbm90Cm51bGwuIiwgZnJvbSB0aGUgZmlyc3QgY29uc3RydWN0b3IgdG8gdGhlIHNlY29uZCBjb25zdHJ1Y3Rvci48L3A+Cgo8cD5JbnNlcnQgYSBuZXcgcGFyYWdyYXBoIDEgUmVxdWlyZXMgY2xhdXNlIGZvciB0aGUgZmlyc3QgY29uc3RydWN0b3IKcmVhZGluZzo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48Yj5SZXF1aXJlczwvYj46IDx0dD5zLnJkYnVmKCk8L3R0PiBpcyBub3QgbnVsbC48L3A+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxMTQiPjwvYT4xMTQuIFBsYWNlbWVudCBmb3JtcyBleGFtcGxlIGluIGVycm9yIHR3aWNlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE4LjUuMS4zIFtuZXcuZGVsZXRlLnBsYWNlbWVudF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gU3RldmUgQ2xhbWFnZSA8Yj5EYXRlOjwvYj4gMTk5OC0xMC0yODwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbmV3LmRlbGV0ZS5wbGFjZW1lbnQiPmlzc3VlczwvYT4gaW4gW25ldy5kZWxldGUucGxhY2VtZW50XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkR1cGxpY2F0ZSBvZjo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzE5NiI+MTk2PC9hPjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5TZWN0aW9uIDE4LjUuMS4zIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTogPC9wPgoKPHByZT5bRXhhbXBsZTogVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBjb25zdHJ1Y3RpbmcgYW4gb2JqZWN0IGF0IGEga25vd24gYWRkcmVzczoKICAgICAgICBjaGFyIHBsYWNlW3NpemVvZihTb21ldGhpbmcpXTsKICAgICAgICBTb21ldGhpbmcqIHAgPSBuZXcgKHBsYWNlKSBTb21ldGhpbmcoKTsKIC1lbmQgZXhhbXBsZV08L3ByZT4KCjxwPkZpcnN0IGNvZGUgbGluZTogInBsYWNlIiBuZWVkIG5vdCBoYXZlIGFueSBzcGVjaWFsIGFsaWdubWVudCwgYW5kIHRoZQpmb2xsb3dpbmcgY29uc3RydWN0b3IgY291bGQgZmFpbCBkdWUgdG8gbWlzYWxpZ25lZCBkYXRhLjwvcD4KCjxwPlNlY29uZCBjb2RlIGxpbmU6IEFyZW4ndCB0aGUgcGFyZW5zIG9uIFNvbWV0aGluZygpIGluY29ycmVjdD8mbmJzcDsgW0R1YmxpbjogdGhlIExXRwpiZWxpZXZlcyB0aGUgKCkgYXJlIGNvcnJlY3QuXTwvcD4KCjxwPkV4YW1wbGVzIGFyZSBub3Qgbm9ybWF0aXZlLCBidXQgbmV2ZXJ0aGVsZXNzIHNob3VsZCBub3Qgc2hvdyBjb2RlIHRoYXQgaXMgaW52YWxpZCBvcgpsaWtlbHkgdG8gZmFpbC48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIHRoZSBmaXJzdCBsaW5lIG9mIGNvZGUgaW4gdGhlIGV4YW1wbGUgaW4gCjE4LjUuMS4zIFtuZXcuZGVsZXRlLnBsYWNlbWVudF0gd2l0aDoKPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT52b2lkKiBwbGFjZSA9IG9wZXJhdG9yIG5ldyhzaXplb2YoU29tZXRoaW5nKSk7PC9wcmU+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxMTUiPjwvYT4xMTUuIFR5cG8gaW4gc3Ryc3RyZWFtIGNvbnN0cnVjdG9yczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiBELjcuNC4xIFtkZXByLnN0cnN0cmVhbS5jb25zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBTdGV2ZSBDbGFtYWdlIDxiPkRhdGU6PC9iPiAxOTk4LTExLTAyPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkQuNy40LjEgc3Ryc3RyZWFtIGNvbnN0cnVjdG9ycyBwYXJhZ3JhcGggMiBzYXlzOiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5FZmZlY3RzOiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBjbGFzcyBzdHJzdHJlYW0sIGluaXRpYWxpemluZyB0aGUgYmFzZSBjbGFzcyB3aXRoCiAgaW9zdHJlYW0oJmFtcDsgc2IpIGFuZCBpbml0aWFsaXppbmcgc2Igd2l0aCBvbmUgb2YgdGhlIHR3byBjb25zdHJ1Y3RvcnM6IDwvcD4KICA8cD4tIElmIG1vZGUmYW1wO2FwcD09MCwgdGhlbiBzIHNoYWxsIGRlc2lnbmF0ZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheSBvZiBuCiAgZWxlbWVudHMuIFRoZSBjb25zdHJ1Y3RvciBpcyBzdHJzdHJlYW1idWYocywgbiwgcykuIDwvcD4KICA8cD4tIElmIG1vZGUmYW1wO2FwcD09MCwgdGhlbiBzIHNoYWxsIGRlc2lnbmF0ZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheSBvZiBuCiAgZWxlbWVudHMgdGhhdCBjb250YWlucyBhbiBOVEJTIHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgZGVzaWduYXRlZCBieSBzLiBUaGUgY29uc3RydWN0b3IgaXMKICBzdHJzdHJlYW1idWYocywgbiwgcytzdGQ6OnN0cmxlbihzKSkuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5Ob3RpY2UgdGhlIHNlY29uZCBjb25kaXRpb24gaXMgdGhlIHNhbWUgYXMgdGhlIGZpcnN0LiBJIHRoaW5rIHRoZSBzZWNvbmQgY29uZGl0aW9uCnNob3VsZCBiZSAiSWYgbW9kZSZhbXA7YXBwPT1hcHAiLCBvciAibW9kZSZhbXA7YXBwIT0wIiwgbWVhbmluZyB0aGF0CnRoZSBhcHBlbmQgYml0IGlzIHNldC48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiBELjcuMy4xIFtkZXByLm9zdHJzdHJlYW0uY29uc10gcGFyYWdyYXBoIDIgYW5kIEQuNy40LjEgW2RlcHIuc3Ryc3RyZWFtLmNvbnNdCnBhcmFncmFwaCAyLCBjaGFuZ2UgdGhlIGZpcnN0IGNvbmRpdGlvbiB0byA8dHQ+KG1vZGUmYW1wO2FwcCk9PTA8L3R0PgphbmQgdGhlIHNlY29uZCBjb25kaXRpb24gdG8gPHR0Pihtb2RlJmFtcDthcHApIT0wPC90dD4uPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjExNyI+PC9hPjExNy4gPHR0PmJhc2ljX29zdHJlYW08L3R0PiB1c2VzIG5vbmV4aXN0ZW50IDx0dD5udW1fcHV0PC90dD4gbWVtYmVyIGZ1bmN0aW9uczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjIuNi4yIFtvc3RyZWFtLmluc2VydGVycy5hcml0aG1ldGljXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXR0IEF1c3Rlcm4gPGI+RGF0ZTo8L2I+IDE5OTgtMTEtMjA8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI29zdHJlYW0uaW5zZXJ0ZXJzLmFyaXRobWV0aWMiPmlzc3VlczwvYT4gaW4gW29zdHJlYW0uaW5zZXJ0ZXJzLmFyaXRobWV0aWNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgPGI+ZWZmZWN0czwvYj4gY2xhdXNlIGZvciBudW1lcmljIGluc2VydGVycyBzYXlzIHRoYXQKaW5zZXJ0aW9uIG9mIGEgdmFsdWUgPHR0Png8L3R0Piwgd2hvc2UgdHlwZSBpcyBlaXRoZXIgPHR0PmJvb2w8L3R0PiwKPHR0PnNob3J0PC90dD4sIDx0dD51bnNpZ25lZCBzaG9ydDwvdHQ+LCA8dHQ+aW50PC90dD4sIDx0dD51bnNpZ25lZAppbnQ8L3R0PiwgPHR0Pmxvbmc8L3R0PiwgPHR0PnVuc2lnbmVkIGxvbmc8L3R0PiwgPHR0PmZsb2F0PC90dD4sCjx0dD5kb3VibGU8L3R0PiwgPHR0PmxvbmcgZG91YmxlPC90dD4sIG9yIDx0dD5jb25zdCB2b2lkKjwvdHQ+LCBpcwpkZWxlZ2F0ZWQgdG8gPHR0Pm51bV9wdXQ8L3R0PiwgYW5kIHRoYXQgaW5zZXJ0aW9uIGlzIHBlcmZvcm1lZCBhcyBpZgp0aHJvdWdoIHRoZSBmb2xsb3dpbmcgY29kZSBmcmFnbWVudDogPC9wPgoKPHByZT5ib29sIGZhaWxlZCA9IHVzZV9mYWNldCZsdDsKICAgbnVtX3B1dCZsdDtjaGFyVCxvc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgJmd0OyAKICAgJmd0OyhnZXRsb2MoKSkucHV0KCp0aGlzLCAqdGhpcywgZmlsbCgpLCB2YWwpLiBmYWlsZWQoKTs8L3ByZT4KCjxwPlRoaXMgZG9lc24ndCB3b3JrLCBiZWNhdXNlIDx0dD5udW1fcHV0Jmx0OyZndDs8L3R0Pjo6cHV0IGlzIG9ubHkKb3ZlcmxvYWRlZCBmb3IgdGhlIHR5cGVzIDx0dD5ib29sPC90dD4sIDx0dD5sb25nPC90dD4sIDx0dD51bnNpZ25lZApsb25nPC90dD4sIDx0dD5kb3VibGU8L3R0PiwgPHR0PmxvbmcgZG91YmxlPC90dD4sIGFuZCA8dHQ+Y29uc3QKdm9pZCo8L3R0Pi4gVGhhdCBpcywgdGhlIGNvZGUgZnJhZ21lbnQgaW4gdGhlIHN0YW5kYXJkIGlzIGluY29ycmVjdAooaXQgaXMgZGlhZ25vc2VkIGFzIGFtYmlndW91cyBhdCBjb21waWxlIHRpbWUpIGZvciB0aGUgdHlwZXMKPHR0PnNob3J0PC90dD4sIDx0dD51bnNpZ25lZCBzaG9ydDwvdHQ+LCA8dHQ+aW50PC90dD4sIDx0dD51bnNpZ25lZAppbnQ8L3R0PiwgYW5kIDx0dD5mbG9hdDwvdHQ+LiA8L3A+Cgo8cD5XZSBtdXN0IGVpdGhlciBhZGQgbmV3IG1lbWJlciBmdW5jdGlvbnMgdG8gPHR0Pm51bV9wdXQ8L3R0Piwgb3IKZWxzZSBjaGFuZ2UgdGhlIGRlc2NyaXB0aW9uIGluIDx0dD5vc3RyZWFtPC90dD4gc28gdGhhdCBpdCBvbmx5IGNhbGxzCmZ1bmN0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSB0aGVyZS4gSSBwcmVmZXIgdGhlIGxhdHRlci4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSAyNy42LjIuNS4yLCBwYXJhZ3JhcGggMSB3aXRoIHRoZSBmb2xsb3dpbmc6IDwvcD4KCjxibG9ja3F1b3RlPgo8cD4KVGhlIGNsYXNzZXMgbnVtX2dldCZsdDsmZ3Q7IGFuZCBudW1fcHV0Jmx0OyZndDsgaGFuZGxlIGxvY2FsZS1kZXBlbmRlbnQgbnVtZXJpYwpmb3JtYXR0aW5nIGFuZCBwYXJzaW5nLiAgVGhlc2UgaW5zZXJ0ZXIgZnVuY3Rpb25zIHVzZSB0aGUgaW1idWVkCmxvY2FsZSB2YWx1ZSB0byBwZXJmb3JtIG51bWVyaWMgZm9ybWF0dGluZy4gIFdoZW4gdmFsIGlzIG9mIHR5cGUgYm9vbCwKbG9uZywgdW5zaWduZWQgbG9uZywgZG91YmxlLCBsb25nIGRvdWJsZSwgb3IgY29uc3Qgdm9pZCosIHRoZQpmb3JtYXR0aW5nIGNvbnZlcnNpb24gb2NjdXJzIGFzIGlmIGl0IHBlcmZvcm1lZCB0aGUgZm9sbG93aW5nIGNvZGUKZnJhZ21lbnQ6CjwvcD4KCjxwcmU+Ym9vbCBmYWlsZWQgPSB1c2VfZmFjZXQmbHQ7CiAgIG51bV9wdXQmbHQ7Y2hhclQsb3N0cmVhbWJ1Zl9pdGVyYXRvciZsdDtjaGFyVCx0cmFpdHMmZ3Q7ICZndDsKICAgJmd0OyhnZXRsb2MoKSkucHV0KCp0aGlzLCAqdGhpcywgZmlsbCgpLCB2YWwpLiBmYWlsZWQoKTsKPC9wcmU+Cgo8cD4KV2hlbiB2YWwgaXMgb2YgdHlwZSBzaG9ydCB0aGUgZm9ybWF0dGluZyBjb252ZXJzaW9uIG9jY3VycyBhcyBpZiBpdApwZXJmb3JtZWQgdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50Ogo8L3A+Cgo8cHJlPmlvc19iYXNlOjpmbXRmbGFncyBiYXNlZmxhZ3MgPSBpb3NfYmFzZTo6ZmxhZ3MoKSAmYW1wOyBpb3NfYmFzZTo6YmFzZWZpZWxkOwpib29sIGZhaWxlZCA9IHVzZV9mYWNldCZsdDsKICAgbnVtX3B1dCZsdDtjaGFyVCxvc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgJmd0OwogICAmZ3Q7KGdldGxvYygpKS5wdXQoKnRoaXMsICp0aGlzLCBmaWxsKCksCiAgICAgIGJhc2VmbGFncyA9PSBpb3NfYmFzZTo6b2N0IHx8IGJhc2VmbGFncyA9PSBpb3NfYmFzZTo6aGV4CiAgICAgICAgID8gc3RhdGljX2Nhc3QmbHQ7bG9uZyZndDsoc3RhdGljX2Nhc3QmbHQ7dW5zaWduZWQgc2hvcnQmZ3Q7KHZhbCkpCiAgICAgICAgIDogc3RhdGljX2Nhc3QmbHQ7bG9uZyZndDsodmFsKSkuIGZhaWxlZCgpOwo8L3ByZT4KCjxwPgpXaGVuIHZhbCBpcyBvZiB0eXBlIGludCB0aGUgZm9ybWF0dGluZyBjb252ZXJzaW9uIG9jY3VycyBhcyBpZiBpdCBwZXJmb3JtZWQKdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50Ogo8L3A+Cgo8cHJlPmlvc19iYXNlOjpmbXRmbGFncyBiYXNlZmxhZ3MgPSBpb3NfYmFzZTo6ZmxhZ3MoKSAmYW1wOyBpb3NfYmFzZTo6YmFzZWZpZWxkOwpib29sIGZhaWxlZCA9IHVzZV9mYWNldCZsdDsKICAgbnVtX3B1dCZsdDtjaGFyVCxvc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgJmd0OwogICAmZ3Q7KGdldGxvYygpKS5wdXQoKnRoaXMsICp0aGlzLCBmaWxsKCksCiAgICAgIGJhc2VmbGFncyA9PSBpb3NfYmFzZTo6b2N0IHx8IGJhc2VmbGFncyA9PSBpb3NfYmFzZTo6aGV4CiAgICAgICAgID8gc3RhdGljX2Nhc3QmbHQ7bG9uZyZndDsoc3RhdGljX2Nhc3QmbHQ7dW5zaWduZWQgaW50Jmd0Oyh2YWwpKQogICAgICAgICA6IHN0YXRpY19jYXN0Jmx0O2xvbmcmZ3Q7KHZhbCkpLiBmYWlsZWQoKTsKPC9wcmU+Cgo8cD4KV2hlbiB2YWwgaXMgb2YgdHlwZSB1bnNpZ25lZCBzaG9ydCBvciB1bnNpZ25lZCBpbnQgdGhlIGZvcm1hdHRpbmcgY29udmVyc2lvbgpvY2N1cnMgYXMgaWYgaXQgcGVyZm9ybWVkIHRoZSBmb2xsb3dpbmcgY29kZSBmcmFnbWVudDoKPC9wPgoKPHByZT5ib29sIGZhaWxlZCA9IHVzZV9mYWNldCZsdDsKICAgbnVtX3B1dCZsdDtjaGFyVCxvc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgJmd0OwogICAmZ3Q7KGdldGxvYygpKS5wdXQoKnRoaXMsICp0aGlzLCBmaWxsKCksIHN0YXRpY19jYXN0Jmx0O3Vuc2lnbmVkIGxvbmcmZ3Q7KHZhbCkpLgpmYWlsZWQoKTsKPC9wcmU+Cgo8cD4KV2hlbiB2YWwgaXMgb2YgdHlwZSBmbG9hdCB0aGUgZm9ybWF0dGluZyBjb252ZXJzaW9uIG9jY3VycyBhcyBpZiBpdApwZXJmb3JtZWQgdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50Ogo8L3A+Cgo8cHJlPmJvb2wgZmFpbGVkID0gdXNlX2ZhY2V0Jmx0OwogICBudW1fcHV0Jmx0O2NoYXJULG9zdHJlYW1idWZfaXRlcmF0b3ImbHQ7Y2hhclQsdHJhaXRzJmd0OyAmZ3Q7CiAgICZndDsoZ2V0bG9jKCkpLnB1dCgqdGhpcywgKnRoaXMsIGZpbGwoKSwgc3RhdGljX2Nhc3QmbHQ7ZG91YmxlJmd0Oyh2YWwpKS4KZmFpbGVkKCk7CjwvcHJlPgoKPC9ibG9ja3F1b3RlPgoKPHA+PGk+W3Bvc3QtVG9yb250bzogVGhpcyBkaWZmZXJzIGZyb20gdGhlIHByZXZpb3VzIHByb3Bvc2VkCnJlc29sdXRpb247IFBKUCBwcm92aWRlZCB0aGUgbmV3IHdvcmRpbmcuICBUaGUgZGlmZmVyZW5jZXMgYXJlIGluCnNpZ25lZCBzaG9ydCBhbmQgaW50IG91dHB1dC5dPC9pPjwvcD4KCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBvcmlnaW5hbCBwcm9wb3NlZCByZXNvbHV0aW9uIHdhcyB0byBjYXN0IGludCBhbmQgc2hvcnQgdG8gbG9uZywKdW5zaWduZWQgaW50IGFuZCB1bnNpZ25lZCBzaG9ydCB0byB1bnNpZ25lZCBsb25nLCBhbmQgZmxvYXQgdG8gZG91YmxlLAp0aHVzIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIHVzZSBub25leGlzdGVudCBudW1fcHV0Jmx0OyZndDsKbWVtYmVyIGZ1bmN0aW9ucy4gIFRoZSBjdXJyZW50IHByb3Bvc2VkIHJlc29sdXRpb24gaXMgbW9yZQpjb21wbGljYXRlZCwgYnV0IGdpdmVzIG1vcmUgZXhwZWN0ZWQgcmVzdWx0cyBmb3IgaGV4IGFuZCBvY3RhbCBvdXRwdXQKb2Ygc2lnbmVkIHNob3J0IGFuZCBzaWduZWQgaW50LiAgKE9uIGEgc3lzdGVtIHdpdGggMTYtYml0IHNob3J0LCBmb3IKZXhhbXBsZSwgcHJpbnRpbmcgc2hvcnQoLTEpIGluIGhleCBmb3JtYXQgc2hvdWxkIHlpZWxkIDB4ZmZmZi4pPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjExOCI+PC9hPjExOC4gPHR0PmJhc2ljX2lzdHJlYW08L3R0PiB1c2VzIG5vbmV4aXN0ZW50IDx0dD5udW1fZ2V0PC90dD4gbWVtYmVyIGZ1bmN0aW9uczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjEuMi4yIFtpc3RyZWFtLmZvcm1hdHRlZC5hcml0aG1ldGljXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXR0IEF1c3Rlcm4gPGI+RGF0ZTo8L2I+IDE5OTgtMTEtMjA8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lzdHJlYW0uZm9ybWF0dGVkLmFyaXRobWV0aWMiPmlzc3VlczwvYT4gaW4gW2lzdHJlYW0uZm9ybWF0dGVkLmFyaXRobWV0aWNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5Gb3JtYXR0ZWQgaW5wdXQgaXMgZGVmaW5lZCBmb3IgdGhlIHR5cGVzIDx0dD5zaG9ydDwvdHQ+LCA8dHQ+dW5zaWduZWQgc2hvcnQ8L3R0PiwgPHR0PmludDwvdHQ+LAo8dHQ+dW5zaWduZWQgaW50PC90dD4sIDx0dD5sb25nPC90dD4sIDx0dD51bnNpZ25lZCBsb25nPC90dD4sIDx0dD5mbG9hdDwvdHQ+LCA8dHQ+ZG91YmxlPC90dD4sCjx0dD5sb25nIGRvdWJsZTwvdHQ+LCA8dHQ+Ym9vbDwvdHQ+LCBhbmQgPHR0PnZvaWQqPC90dD4uIEFjY29yZGluZyB0byBzZWN0aW9uIDI3LjYuMS4yLjIsCmZvcm1hdHRlZCBpbnB1dCBvZiBhIHZhbHVlIDx0dD54PC90dD4gaXMgZG9uZSBhcyBpZiBieSB0aGUgZm9sbG93aW5nIGNvZGUgZnJhZ21lbnQ6IDwvcD4KCjxwcmU+dHlwZWRlZiBudW1fZ2V0Jmx0OyBjaGFyVCxpc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgJmd0OyBudW1nZXQ7IAppb3N0YXRlIGVyciA9IDA7IAp1c2VfZmFjZXQmbHQ7IG51bWdldCAmZ3Q7KGxvYykuZ2V0KCp0aGlzLCAwLCAqdGhpcywgZXJyLCB2YWwpOyAKc2V0c3RhdGUoZXJyKTs8L3ByZT4KCjxwPkFjY29yZGluZyB0byBzZWN0aW9uIDIyLjIuMi4xLjEgW2ZhY2V0Lm51bS5nZXQubWVtYmVyc10sIGhvd2V2ZXIsCjx0dD5udW1fZ2V0Jmx0OyZndDs6OmdldCgpPC90dD4gaXMgb25seSBvdmVybG9hZGVkIGZvciB0aGUgdHlwZXMKPHR0PmJvb2w8L3R0PiwgPHR0Pmxvbmc8L3R0PiwgPHR0PnVuc2lnbmVkIHNob3J0PC90dD4sIDx0dD51bnNpZ25lZAppbnQ8L3R0PiwgPHR0PnVuc2lnbmVkIGxvbmc8L3R0PiwgPHR0PnVuc2lnbmVkIGxvbmc8L3R0PiwKPHR0PmZsb2F0PC90dD4sIDx0dD5kb3VibGU8L3R0PiwgPHR0PmxvbmcgZG91YmxlPC90dD4sIGFuZAo8dHQ+dm9pZCo8L3R0Pi4gQ29tcGFyaW5nIHRoZSBsaXN0cyBmcm9tIHRoZSB0d28gc2VjdGlvbnMsIHdlIGZpbmQKdGhhdCAyNy42LjEuMi4yIGlzIHVzaW5nIGEgbm9uZXhpc3RlbnQgZnVuY3Rpb24gZm9yIHR5cGVzCjx0dD5zaG9ydDwvdHQ+IGFuZCA8dHQ+aW50PC90dD4uIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjYuMS4yLjIgW2lzdHJlYW0uZm9ybWF0dGVkLmFyaXRobWV0aWNdIEFyaXRobWV0aWMgRXh0cmFjdG9ycywgcmVtb3ZlIHRoZQp0d28gbGluZXMgKDFzdCBhbmQgM3JkKSB3aGljaCByZWFkOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT5vcGVyYXRvciZndDsmZ3Q7KHNob3J0JmFtcDsgdmFsKTsKLi4uCm9wZXJhdG9yJmd0OyZndDsoaW50JmFtcDsgdmFsKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+QW5kIGFkZCB0aGUgZm9sbG93aW5nIGF0IHRoZSBlbmQgb2YgdGhhdCBzZWN0aW9uICgyNy42LjEuMi4yKSA6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5vcGVyYXRvciZndDsmZ3Q7KHNob3J0JmFtcDsgdmFsKTs8L3ByZT4KICA8cD5UaGUgY29udmVyc2lvbiBvY2N1cnMgYXMgaWYgcGVyZm9ybWVkIGJ5IHRoZSBmb2xsb3dpbmcgY29kZSBmcmFnbWVudCAodXNpbmcKICB0aGUgc2FtZSBub3RhdGlvbiBhcyBmb3IgdGhlIHByZWNlZGluZyBjb2RlIGZyYWdtZW50KTo8L3A+CiAgPHByZT4gIHR5cGVkZWYgbnVtX2dldCZsdDsgY2hhclQsaXN0cmVhbWJ1Zl9pdGVyYXRvciZsdDtjaGFyVCx0cmFpdHMmZ3Q7ICZndDsgbnVtZ2V0OwogIGlvc3RhdGUgZXJyID0gMDsKICBsb25nIGx2YWw7CiAgdXNlX2ZhY2V0Jmx0OyBudW1nZXQgJmd0Oyhsb2MpLmdldCgqdGhpcywgMCwgKnRoaXMsIGVyciwgbHZhbCk7CiAgICAgICAgaWYgKGVyciA9PSAwCiAgICAgICAgICAgICAgICAmYW1wOyZhbXA7IChsdmFsICZsdDsgbnVtZXJpY19saW1pdHMmbHQ7c2hvcnQmZ3Q7OjptaW4oKSB8fCBudW1lcmljX2xpbWl0cyZsdDtzaG9ydCZndDs6Om1heCgpICZsdDsgbHZhbCkpCiAgICAgICAgICAgICAgICBlcnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsKICBzZXRzdGF0ZShlcnIpOzwvcHJlPgogIDxwcmU+b3BlcmF0b3ImZ3Q7Jmd0OyhpbnQmYW1wOyB2YWwpOzwvcHJlPgogIDxwPlRoZSBjb252ZXJzaW9uIG9jY3VycyBhcyBpZiBwZXJmb3JtZWQgYnkgdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50ICh1c2luZwogIHRoZSBzYW1lIG5vdGF0aW9uIGFzIGZvciB0aGUgcHJlY2VkaW5nIGNvZGUgZnJhZ21lbnQpOjwvcD4KICA8cHJlPiAgdHlwZWRlZiBudW1fZ2V0Jmx0OyBjaGFyVCxpc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgJmd0OyBudW1nZXQ7CiAgaW9zdGF0ZSBlcnIgPSAwOwogIGxvbmcgbHZhbDsKICB1c2VfZmFjZXQmbHQ7IG51bWdldCAmZ3Q7KGxvYykuZ2V0KCp0aGlzLCAwLCAqdGhpcywgZXJyLCBsdmFsKTsKICAgICAgICBpZiAoZXJyID09IDAKICAgICAgICAgICAgICAgICZhbXA7JmFtcDsgKGx2YWwgJmx0OyBudW1lcmljX2xpbWl0cyZsdDtpbnQmZ3Q7OjptaW4oKSB8fCBudW1lcmljX2xpbWl0cyZsdDtpbnQmZ3Q7OjptYXgoKSAmbHQ7IGx2YWwpKQogICAgICAgICAgICAgICAgZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgc2V0c3RhdGUoZXJyKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1Bvc3QtVG9reW86IFBKUCBwcm92aWRlZCB0aGUgYWJvdmUgd29yZGluZy5dPC9pPjwvcD4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTE5Ij48L2E+MTE5LiBTaG91bGQgdmlydHVhbCBmdW5jdGlvbnMgYmUgYWxsb3dlZCB0byBzdHJlbmd0aGVuIHRoZSBleGNlcHRpb24gc3BlY2lmaWNhdGlvbj88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTcuNC40LjkgW3Jlcy5vbi5leGNlcHRpb24uaGFuZGxpbmddIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEp1ZHkgV2FyZCA8Yj5EYXRlOjwvYj4gMTk5OC0xMi0xNTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjcmVzLm9uLmV4Y2VwdGlvbi5oYW5kbGluZyI+aXNzdWVzPC9hPiBpbiBbcmVzLm9uLmV4Y2VwdGlvbi5oYW5kbGluZ10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlNlY3Rpb24gMTcuNC40LjkgW3Jlcy5vbi5leGNlcHRpb24uaGFuZGxpbmddIHN0YXRlczogPC9wPgoKPHA+IkFuIGltcGxlbWVudGF0aW9uIG1heSBzdHJlbmd0aGVuIHRoZSBleGNlcHRpb24tc3BlY2lmaWNhdGlvbgpmb3IgYSBmdW5jdGlvbiBieSByZW1vdmluZyBsaXN0ZWQgZXhjZXB0aW9ucy4iIDwvcD4KCjxwPlRoZSBwcm9ibGVtIGlzIHRoYXQgaWYgYW4gaW1wbGVtZW50YXRpb24gaXMgYWxsb3dlZCB0byBkbyB0aGlzIGZvcgp2aXJ0dWFsIGZ1bmN0aW9ucywgdGhlbiBhIGxpYnJhcnkgdXNlciBjYW5ub3Qgd3JpdGUgYSBjbGFzcyB0aGF0CnBvcnRhYmx5IGRlcml2ZXMgZnJvbSB0aGF0IGNsYXNzLiA8L3A+Cgo8cD5Gb3IgZXhhbXBsZSwgdGhpcyB3b3VsZCBub3QgY29tcGlsZSBpZiBpb3NfYmFzZTo6ZmFpbHVyZTo6fmZhaWx1cmUKaGFkIGFuIGVtcHR5IGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uOiA8L3A+Cgo8cHJlPiNpbmNsdWRlICZsdDtpb3MmZ3Q7CiNpbmNsdWRlICZsdDtzdHJpbmcmZ3Q7CgpjbGFzcyBEIDogcHVibGljIHN0ZDo6aW9zX2Jhc2U6OmZhaWx1cmUgewpwdWJsaWM6CiAgICAgICAgRChjb25zdCBzdGQ6OnN0cmluZyZhbXA7KTsKICAgICAgICB+RCgpOyAvLyBlcnJvciAtIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIAogICAgICAgICAgICAgIC8vIG92ZXJyaWRkZW4gdmlydHVhbCBmdW5jdGlvbiBpb3NfYmFzZTo6ZmFpbHVyZTo6fmZhaWx1cmUoKQp9OzwvcHJlPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIFNlY3Rpb24gMTcuNC40LjkgW3Jlcy5vbi5leGNlcHRpb24uaGFuZGxpbmddIGZyb206PC9wPgoKPHA+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICJtYXkgc3RyZW5ndGhlbiB0aGUKZXhjZXB0aW9uLXNwZWNpZmljYXRpb24gZm9yIGEgZnVuY3Rpb24iPC9wPgoKPHA+dG86PC9wPgoKPHA+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICJtYXkgc3RyZW5ndGhlbiB0aGUKZXhjZXB0aW9uLXNwZWNpZmljYXRpb24gZm9yIGEgbm9uLXZpcnR1YWwgZnVuY3Rpb24iLiA8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTIwIj48L2E+MTIwLiBDYW4gYW4gaW1wbGVtZW50b3IgYWRkIHNwZWNpYWxpemF0aW9ucz88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTcuNC4zLjIgW3Jlc2VydmVkLm5hbWVzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBKdWR5IFdhcmQgPGI+RGF0ZTo8L2I+IDE5OTgtMTItMTU8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3Jlc2VydmVkLm5hbWVzIj5pc3N1ZXM8L2E+IGluIFtyZXNlcnZlZC5uYW1lc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+Cgo8cD5UaGUgb3JpZ2luYWwgaXNzdWUgYXNrZWQgd2hldGhlciBhIGxpYnJhcnkgaW1wbGVtZW50b3IgY291bGQKc3BlY2lhbGl6ZSBzdGFuZGFyZCBsaWJyYXJ5IHRlbXBsYXRlcyBmb3IgYnVpbHQtaW4gdHlwZXMuICAoVGhpcyB3YXMKYW4gaXNzdWUgYmVjYXVzZSB1c2VycyBhcmUgcGVybWl0dGVkIHRvIGV4cGxpY2l0bHkgaW5zdGFudGlhdGUKc3RhbmRhcmQgbGlicmFyeSB0ZW1wbGF0ZXMuKTwvcD4KCjxwPlNwZWNpYWxpemF0aW9ucyBhcmUgbm8gbG9uZ2VyIGEgcHJvYmxlbSwgYmVjYXVzZSBvZiB0aGUgcmVzb2x1dGlvbgp0byBjb3JlIGlzc3VlIDI1OS4gIFVuZGVyIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uLCBpdCB3aWxsIGJlIGxlZ2FsCmZvciBhIHRyYW5zbGF0aW9uIHVuaXQgdG8gY29udGFpbiBib3RoIGEgc3BlY2lhbGl6YXRpb24gYW5kIGFuCmV4cGxpY2l0IGluc3RhbnRpYXRpb24gb2YgdGhlIHNhbWUgdGVtcGxhdGUsIHByb3ZpZGVkIHRoYXQgdGhlCnNwZWNpYWxpemF0aW9uIGNvbWVzIGZpcnN0LiAgSW4gc3VjaCBhIGNhc2UsIHRoZSBleHBsaWNpdAppbnN0YW50aWF0aW9uIHdpbGwgYmUgaWdub3JlZC4gIEZ1cnRoZXIgZGlzY3Vzc2lvbiBvZiBsaWJyYXJ5IGlzc3VlCjEyMCBhc3N1bWVzIHRoYXQgdGhlIGNvcmUgMjU5IHJlc29sdXRpb24gd2lsbCBiZSBhZG9wdGVkLjwvcD4KCjxwPkhvd2V2ZXIsIGFzIG5vdGVkIGluIGxpYi03MDQ3LCBvbmUgcGllY2Ugb2YgdGhpcyBpc3N1ZSBzdGlsbApyZW1haW5zOiB3aGF0IGhhcHBlbnMgaWYgYSBzdGFuZGFyZCBsaWJyYXJ5IGltcGxlbWVudG9yIGV4cGxpY2l0bHkKaW5zdGFudGlhdGVzIGEgc3RhbmRhcmQgbGlicmFyeSB0ZW1wbGF0ZXM/ICBJdCdzIGlsbGVnYWwgZm9yIGEgcHJvZ3JhbQp0byBjb250YWluIHR3byBkaWZmZXJlbnQgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgb2YgdGhlIHNhbWUgdGVtcGxhdGUKZm9yIHRoZSBzYW1lIHR5cGUgaW4gdHdvIGRpZmZlcmVudCB0cmFuc2xhdGlvbiB1bml0cyAoT0RSIHZpb2xhdGlvbiksCmFuZCB0aGUgY29yZSB3b3JraW5nIGdyb3VwIGRvZXNuJ3QgYmVsaWV2ZSBpdCBpcyBwcmFjdGljYWwgdG8gcmVsYXgKdGhhdCByZXN0cmljdGlvbi48L3A+Cgo8cD5UaGUgaXNzdWUsIHRoZW4sIGlzOiBhcmUgdXNlcnMgYWxsb3dlZCB0byBleHBsaWNpdGx5IGluc3RhbnRpYXRlCnN0YW5kYXJkIGxpYnJhcnkgdGVtcGxhdGVzIGZvciBub24tdXNlciBkZWZpbmVkIHR5cGVzPyAgVGhlIHN0YXR1cyBxdW8KYW5zd2VyIGlzICd5ZXMnLiAgQ2hhbmdpbmcgaXQgdG8gJ25vJyB3b3VsZCBnaXZlIGxpYnJhcnkgaW1wbGVtZW50b3JzCm1vcmUgZnJlZWRvbS48L3A+Cgo8cD5UaGlzIGlzIGFuIGlzc3VlIGJlY2F1c2UsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBsaWJyYXJ5CmltcGxlbWVudG9ycyBvZnRlbiBuZWVkIHRvIGV4cGxpY2l0bHkgaW5zdGFudGlhdGUgc3RhbmRhcmQgbGlicmFyeQp0ZW1wbGF0ZXMuICAoZm9yIGV4YW1wbGUsIHN0ZDo6YmFzaWNfc3RyaW5nJmx0O2NoYXImZ3Q7KSAgRG9lcyBnaXZpbmcKdXNlcnMgZnJlZWRvbSB0byBleHBsaWNpdGx5IGluc3RhbnRpYXRlIHN0YW5kYXJkIGxpYnJhcnkgdGVtcGxhdGVzIGZvcgpub24tdXNlciBkZWZpbmVkIHR5cGVzIG1ha2UgaXQgaW1wb3NzaWJsZSBvciBwYWluZnVsbHkgZGlmZmljdWx0IGZvcgpsaWJyYXJ5IGltcGxlbWVudG9ycyB0byBkbyB0aGlzPzwvcD4KCjxwPkpvaG4gU3BpY2VyIHN1Z2dlc3RzLCBpbiBsaWItODk1NywgdGhhdCBsaWJyYXJ5IGltcGxlbWVudG9ycyBoYXZlIGEKbWVjaGFuaXNtIHRoZXkgY2FuIHVzZSBmb3IgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgdGhhdCBkb2Vzbid0CnByZXZlbnQgdXNlcnMgZnJvbSBwZXJmb3JtaW5nIHRoZWlyIG93biBleHBsaWNpdCBpbnN0YW50aWF0aW9uczogcHV0CmVhY2ggZXhwbGljaXQgaW5zdGFudGlhdGlvbiBpbiBpdHMgb3duIG9iamVjdCBmaWxlLiAgKERpZmZlcmVudApzb2x1dGlvbnMgbWlnaHQgYmUgbmVjZXNzYXJ5IGZvciBVbml4IERTT3Mgb3IgTVMtV2luZG93cyBETExzLikgIE9uCnNvbWUgcGxhdGZvcm1zLCBsaWJyYXJ5IGltcGxlbWVudG9ycyBtaWdodCBub3QgbmVlZCB0byBkbyBhbnl0aGluZwpzcGVjaWFsOiB0aGUgInVuZGVmaW5lZCBiZWhhdmlvciIgdGhhdCByZXN1bHRzIGZyb20gaGF2aW5nIHR3bwpkaWZmZXJlbnQgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgbWlnaHQgYmUgaGFybWxlc3MuPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CiAgPHA+QXBwZW5kIHRvIDE3LjQuMy4yIFtyZXNlcnZlZC5uYW1lc10gcGFyYWdyYXBoIDE6IDwvcD4KICA8YmxvY2txdW90ZT48cD4KICAgIEEgcHJvZ3JhbSBtYXkgZXhwbGljaXRseSBpbnN0YW50aWF0ZSBhbnkgdGVtcGxhdGVzIGluIHRoZSBzdGFuZGFyZAogICAgbGlicmFyeSBvbmx5IGlmIHRoZSBkZWNsYXJhdGlvbiBkZXBlbmRzIG9uIHRoZSBuYW1lIG9mIGEgdXNlci1kZWZpbmVkCiAgICB0eXBlIG9mIGV4dGVybmFsIGxpbmthZ2UgYW5kIHRoZSBpbnN0YW50aWF0aW9uIG1lZXRzIHRoZSBzdGFuZGFyZCBsaWJyYXJ5CiAgICByZXF1aXJlbWVudHMgZm9yIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZS4KICA8L3A+PC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IGNoYW5nZWQgdGhlIHdvcmRpbmcgZnJvbSAiYSB1c2VyLWRlZmluZWQgbmFtZSIgdG8gInRoZSBuYW1lIG9mCiAgYSB1c2VyLWRlZmluZWQgdHlwZSJdPC9pPjwvcD4KCgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGNvbnNpZGVyZWQgYW5vdGhlciBwb3NzaWJsZSByZXNvbHV0aW9uOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+SW4gbGlnaHQgb2YgdGhlIHJlc29sdXRpb24gdG8gY29yZSBpc3N1ZSAyNTksIG5vIG5vcm1hdGl2ZSBjaGFuZ2VzCiAgaW4gdGhlIGxpYnJhcnkgY2xhdXNlcyBhcmUgbmVjZXNzYXJ5LiAgQWRkIHRoZSBmb2xsb3dpbmcgbm9uLW5vcm1hdGl2ZQogIG5vdGUgdG8gdGhlIGVuZCBvZiAxNy40LjMuMiBbcmVzZXJ2ZWQubmFtZXNdIHBhcmFncmFwaCAxOjwvcD4KICA8YmxvY2txdW90ZT48cD4KICAgIFs8aT5Ob3RlOjwvaT4gQSBwcm9ncmFtIG1heSBleHBsaWNpdGx5IGluc3RhbnRpYXRlIHN0YW5kYXJkIGxpYnJhcnkKICAgIHRlbXBsYXRlcywgZXZlbiB3aGVuIGFuIGV4cGxpY2l0IGluc3RhbnRpYXRpb24gZG9lcyBub3QgZGVwZW5kIG9uCiAgICBhIHVzZXItZGVmaW5lZCBuYW1lLiA8aT4tLWVuZCBub3RlPC9pPl0KICA8L3A+PC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5UaGUgTFdHIHJlamVjdGVkIHRoaXMgYmVjYXVzZSBpdCB3YXMgYmVsaWV2ZWQgdGhhdCBpdCB3b3VsZCBtYWtlCiAgaXQgdW5uZWNlc3NhcmlseSBkaWZmaWN1bHQgZm9yIGxpYnJhcnkgaW1wbGVtZW50b3JzIHRvIHdyaXRlCiAgaGlnaC1xdWFsaXR5IGltcGxlbWVudGF0aW9ucy4gIEEgcHJvZ3JhbSBtYXkgbm90IGluY2x1ZGUgYW4KICBleHBsaWNpdCBpbnN0YW50aWF0aW9uIG9mIHRoZSBzYW1lIHRlbXBsYXRlLCBmb3IgdGhlIHNhbWUgdGVtcGxhdGUKICBhcmd1bWVudHMsIGluIHR3byBkaWZmZXJlbnQgdHJhbnNsYXRpb24gdW5pdHMuICBJZiB1c2VycyBhcmUKICBhbGxvd2VkIHRvIHByb3ZpZGUgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgb2YgU3RhbmRhcmQgTGlicmFyeQogIHRlbXBsYXRlcyBmb3IgYnVpbHQtaW4gdHlwZXMsIHRoZW4gbGlicmFyeSBpbXBsZW1lbnRvcnMgYXJlbid0LAogIGF0IGxlYXN0IG5vdCB3aXRob3V0IG5vbnBvcnRhYmxlIHRyaWNrcy48L3A+Cgo8cD5UaGUgbW9zdCBzZXJpb3VzIHByb2JsZW0gaXMgYSBjbGFzcyB0ZW1wbGF0ZSB0aGF0IGhhcyB3cml0ZWFibGUKICBzdGF0aWMgbWVtYmVyIHZhcmlhYmxlcy4gIFVuZm9ydHVuYXRlbHksIHN1Y2ggY2xhc3MgdGVtcGxhdGVzIGFyZQogIGltcG9ydGFudCBhbmQsIGluIGV4aXN0aW5nIFN0YW5kYXJkIExpYnJhcnkgaW1wbGVtZW50YXRpb25zLCBhcmUKICBvZnRlbiBleHBsaWNpdGx5IHNwZWNpYWxpemVkIGJ5IGxpYnJhcnkgaW1wbGVtZW50b3JzOiBsb2NhbGUgZmFjZXRzLAogIHdoaWNoIGhhdmUgYSB3cml0ZWFibGUgc3RhdGljIG1lbWJlciB2YXJpYWJsZSA8dHQ+aWQ8L3R0Pi4gIElmIGEKICB1c2VyJ3MgZXhwbGljaXQgaW5zdGFudGlhdGlvbiBjb2xsaWRlZCB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbnMKICBleHBsaWNpdCBpbnN0YW50aWF0aW9uLCBpb3N0cmVhbSBpbml0aWFsaXphdGlvbiBjb3VsZCBjYXVzZSBsb2NhbGVzCiAgdG8gYmUgY29uc3RydWN0ZWQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLjwvcD4KCjxwPk9uZSBwcm9wb3NlZCBpbXBsZW1lbnRhdGlvbiB0ZWNobmlxdWUgd2FzIGZvciBTdGFuZGFyZCBMaWJyYXJ5CiAgaW1wbGVtZW50b3JzIHRvIHByb3ZpZGUgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgaW4gc2VwYXJhdGUgb2JqZWN0CiAgZmlsZXMsIHNvIHRoYXQgdGhleSB3b3VsZCBub3QgYmUgcGlja2VkIHVwIGJ5IHRoZSBsaW5rZXIgd2hlbiB0aGUKICB1c2VyIGFsc28gcHJvdmlkZXMgYW4gZXhwbGljaXQgaW5zdGFudGlhdGlvbi4gIEhvd2V2ZXIsIHRoaXMKICB0ZWNobmlxdWUgb25seSBhcHBsaWVzIGZvciBTdGFuZGFyZCBMaWJyYXJ5IGltcGxlbWVudGF0aW9ucyB0aGF0CiAgYXJlIHBhY2thZ2VkIGFzIHN0YXRpYyBhcmNoaXZlcy4gIE1vc3QgU3RhbmRhcmQgTGlicmFyeQogIGltcGxlbWVudGF0aW9ucyBub3dhZGF5cyBhcmUgcGFja2FnZWQgYXMgZHluYW1pYyBsaWJyYXJpZXMsIHNvIHRoaXMKICB0ZWNobmlxdWUgd291bGQgbm90IGFwcGx5LjwvcD4KCjxwPlRoZSBDb21taXR0ZWUgaXMgbm93IGNvbnNpZGVyaW5nIHN0YW5kYXJkaXphdGlvbiBvZiBkeW5hbWljCiAgbGlua2luZy4gIElmIHRoZXJlIGFyZSBzdWNoIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZSwgaXQgbWF5IGJlCiAgYXBwcm9wcmlhdGUgdG8gcmV2aXNpdCB0aGlzIGlzc3VlIGxhdGVyLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxMjIiPjwvYT4xMjIuIHN0cmVhbWJ1Zi93c3RyZWFtYnVmIGRlc2NyaXB0aW9uIHNob3VsZCBub3Qgc2F5IHRoZXkgYXJlIHNwZWNpYWxpemF0aW9uczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy41LjIgW3N0cmVhbWJ1Zl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSnVkeSBXYXJkIDxiPkRhdGU6PC9iPiAxOTk4LTEyLTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJlYW1idWYiPmlzc3VlczwvYT4gaW4gW3N0cmVhbWJ1Zl0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlNlY3Rpb24gMjcuNS4yIGRlc2NyaWJlcyB0aGUgc3RyZWFtYnVmIGNsYXNzZXMgdGhpcyB3YXk6IDwvcD4KCjxibG9ja3F1b3RlPgoKPHA+VGhlIGNsYXNzIHN0cmVhbWJ1ZiBpcyBhIHNwZWNpYWxpemF0aW9uIG9mIHRoZSB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWYKc3BlY2lhbGl6ZWQgZm9yIHRoZSB0eXBlIGNoYXIuIDwvcD4KCjxwPlRoZSBjbGFzcyB3c3RyZWFtYnVmIGlzIGEgc3BlY2lhbGl6YXRpb24gb2YgdGhlIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZgpzcGVjaWFsaXplZCBmb3IgdGhlIHR5cGUgd2NoYXJfdC4gPC9wPgoKPC9ibG9ja3F1b3RlPgoKPHA+VGhpcyBpbXBsaWVzIHRoYXQgdGhlc2UgY2xhc3NlcyBtdXN0IGJlIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucywgbm90IHR5cGVkZWZzLiA8L3A+Cgo8cD5JdCBkb2Vzbid0IHNlZW0gdGhpcyB3YXMgaW50ZW5kZWQsIHNpbmNlIFNlY3Rpb24gMjcuNSBoYXMgdGhlbSBkZWNsYXJlZCBhcyB0eXBlZGVmcy4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVtb3ZlIDI3LjUuMiBbc3RyZWFtYnVmXSBwYXJhZ3JhcGhzIDIgYW5kIDMgKHRoZSBhYm92ZSB0d28Kc2VudGVuY2VzKS4gPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgPHR0PnN0cmVhbWJ1ZjwvdHQ+ICBzeW5vcHNpcyBhbHJlYWR5IGhhcyBhIGRlY2xhcmF0aW9uIGZvciB0aGUKdHlwZWRlZnMgYW5kIHRoYXQgaXMgc3VmZmljaWVudC4gPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjEyMyI+PC9hPjEyMy4gU2hvdWxkIHZhbGFycmF5IGhlbHBlciBhcnJheXMgZmlsbCBmdW5jdGlvbnMgYmUgY29uc3Q/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI2LjUuNS4zIFtzbGljZS5hcnIuZmlsbF0sIDI2LjUuNy4zIFtnc2xpY2UuYXJyYXkuZmlsbF0sIDI2LjUuOC4zIFttYXNrLmFycmF5LmZpbGxdLCAyNi41LjkuMyBbaW5kaXJlY3QuYXJyYXkuZmlsbF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSnVkeSBXYXJkIDxiPkRhdGU6PC9iPiAxOTk4LTEyLTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPk9uZSBvZiB0aGUgb3BlcmF0b3I9IGluIHRoZSB2YWxhcnJheSBoZWxwZXIgYXJyYXlzIGlzIGNvbnN0IGFuZCBvbmUKaXMgbm90LiBGb3IgZXhhbXBsZSwgbG9vayBhdCBzbGljZV9hcnJheS4gVGhpcyBvcGVyYXRvcj0gaW4gU2VjdGlvbgoyNi41LjUuMSBbc2xpY2UuYXJyLmFzc2lnbl0gaXMgY29uc3Q6IDwvcD4KCjxwPiZuYnNwOyZuYnNwOyZuYnNwOyA8dHQ+dm9pZCBvcGVyYXRvcj0oY29uc3QgdmFsYXJyYXkmbHQ7VCZndDsmYW1wOykgY29uc3Q7PC90dD4gPC9wPgoKPHA+YnV0IHRoaXMgb25lIGluIFNlY3Rpb24gMjYuNS41LjMgW3NsaWNlLmFyci5maWxsXSBpcyBub3Q6IDwvcD4KCjxwPiZuYnNwOyZuYnNwOyZuYnNwOyA8dHQ+dm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsgPC90dD48L3A+Cgo8cD5UaGUgZGVzY3JpcHRpb24gb2YgdGhlIHNlbWFudGljcyBmb3IgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpcyBzaW1pbGFyLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+MjYuNS41IFt0ZW1wbGF0ZS5zbGljZS5hcnJheV0gVGVtcGxhdGUgY2xhc3Mgc2xpY2VfYXJyYXk8L3A+CjxibG9ja3F1b3RlPgoKICAgPHA+SW4gdGhlIGNsYXNzIHRlbXBsYXRlIGRlZmluaXRpb24gZm9yIHNsaWNlX2FycmF5LCByZXBsYWNlIHRoZSBtZW1iZXIKICAgZnVuY3Rpb24gZGVjbGFyYXRpb248L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOyk7CiAgICA8L3ByZT4KICAgPHA+d2l0aDwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KSBjb25zdDsKICAgIDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4yNi41LjUuMyBbc2xpY2UuYXJyLmZpbGxdIHNsaWNlX2FycmF5IGZpbGwgZnVuY3Rpb248L3A+CjxibG9ja3F1b3RlPgoKICAgPHA+Q2hhbmdlIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbjwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsKICAgIDwvcHJlPgogICA8cD50bzwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KSBjb25zdDsKICAgIDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4yNi41LjcgW3RlbXBsYXRlLmdzbGljZS5hcnJheV0gVGVtcGxhdGUgY2xhc3MgZ3NsaWNlX2FycmF5PC9wPgo8YmxvY2txdW90ZT4KCiAgIDxwPkluIHRoZSBjbGFzcyB0ZW1wbGF0ZSBkZWZpbml0aW9uIGZvciBnc2xpY2VfYXJyYXksIHJlcGxhY2UgdGhlIG1lbWJlcgogICBmdW5jdGlvbiBkZWNsYXJhdGlvbjwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsKICAgIDwvcHJlPgogICA8cD53aXRoPC9wPgogICAgPHByZT4gICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUJmFtcDspIGNvbnN0OwogICAgPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjI2LjUuNy4zIFtnc2xpY2UuYXJyYXkuZmlsbF0gZ3NsaWNlX2FycmF5IGZpbGwgZnVuY3Rpb248L3A+CjxibG9ja3F1b3RlPgoKICAgPHA+Q2hhbmdlIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbjwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsKICAgIDwvcHJlPgogICA8cD50bzwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KSBjb25zdDsKICAgIDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4yNi41LjggW3RlbXBsYXRlLm1hc2suYXJyYXldIFRlbXBsYXRlIGNsYXNzIG1hc2tfYXJyYXk8L3A+CjxibG9ja3F1b3RlPgoKICAgPHA+SW4gdGhlIGNsYXNzIHRlbXBsYXRlIGRlZmluaXRpb24gZm9yIG1hc2tfYXJyYXksIHJlcGxhY2UgdGhlIG1lbWJlcgogICBmdW5jdGlvbiBkZWNsYXJhdGlvbjwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsKICAgIDwvcHJlPgogICA8cD53aXRoPC9wPgogICAgPHByZT4gICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUJmFtcDspIGNvbnN0OwogICAgPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjI2LjUuOC4zIFttYXNrLmFycmF5LmZpbGxdIG1hc2tfYXJyYXkgZmlsbCBmdW5jdGlvbjwvcD4KPGJsb2NrcXVvdGU+CgogICA8cD5DaGFuZ2UgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uPC9wPgogICAgPHByZT4gICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUJmFtcDspOwogICAgPC9wcmU+CiAgIDxwPnRvPC9wPgogICAgPHByZT4gICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUJmFtcDspIGNvbnN0OwogICAgPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjI2LjUuOSBbdGVtcGxhdGUuaW5kaXJlY3QuYXJyYXldIFRlbXBsYXRlIGNsYXNzIGluZGlyZWN0X2FycmF5PC9wPgo8YmxvY2txdW90ZT4KCiAgIDxwPkluIHRoZSBjbGFzcyB0ZW1wbGF0ZSBkZWZpbml0aW9uIGZvciBpbmRpcmVjdF9hcnJheSwgcmVwbGFjZSB0aGUgbWVtYmVyCiAgIGZ1bmN0aW9uIGRlY2xhcmF0aW9uPC9wPgogICAgPHByZT4gICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUJmFtcDspOwogICAgPC9wcmU+CiAgIDxwPndpdGg8L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOykgY29uc3Q7CiAgICA8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+MjYuNS45LjMgW2luZGlyZWN0LmFycmF5LmZpbGxdIGluZGlyZWN0X2FycmF5IGZpbGwgZnVuY3Rpb248L3A+CjxibG9ja3F1b3RlPgoKICAgPHA+Q2hhbmdlIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbjwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsKICAgIDwvcHJlPgogICA8cD50bzwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KSBjb25zdDsKICAgIDwvcHJlPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGk+W1JlZG1vbmQ6IFJvYmVydCBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgoKCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZXJlJ3Mgbm8gZ29vZCByZWFzb24gZm9yIG9uZSB2ZXJzaW9uIG9mIG9wZXJhdG9yPSBiZWluZyBjb25zdCBhbmQKYW5vdGhlciBvbmUgbm90LiAgQmVjYXVzZSBvZiBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUzIj4yNTM8L2E+LCB0aGlzIG5vdwptYXR0ZXJzOiB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdyBjYWxsYWJsZSBpbiBtb3JlIGNpcmN1bXN0YW5jZXMuICBJbgptYW55IGV4aXN0aW5nIGltcGxlbWVudGF0aW9ucywgYm90aCB2ZXJzaW9ucyBhcmUgYWxyZWFkeSBjb25zdC48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTI0Ij48L2E+MTI0LiBjdHlwZV9ieW5hbWUmbHQ7Y2hhclQmZ3Q7Ojpkb19zY2FuX2lzICZhbXA7IGRvX3NjYW5fbm90IHJldHVybiB0eXBlIHNob3VsZCBiZSBjb25zdCBjaGFyVCo8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMi4xLjIgW2xvY2FsZS5jdHlwZS5ieW5hbWVdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEp1ZHkgV2FyZCA8Yj5EYXRlOjwvYj4gMTk5OC0xMi0xNTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlLmN0eXBlLmJ5bmFtZSI+aXNzdWVzPC9hPiBpbiBbbG9jYWxlLmN0eXBlLmJ5bmFtZV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkluIFNlY3Rpb24gMjIuMi4xLjIgW2xvY2FsZS5jdHlwZS5ieW5hbWVdCmN0eXBlX2J5bmFtZSZsdDtjaGFyVCZndDs6OmRvX3NjYW5faXMoKSBhbmQgZG9fc2Nhbl9ub3QoKSBhcmUgZGVjbGFyZWQKdG8gcmV0dXJuIGEgY29uc3QgY2hhciogbm90IGEgY29uc3QgY2hhclQqLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgU2VjdGlvbiAyMi4yLjEuMiBbbG9jYWxlLmN0eXBlLmJ5bmFtZV0gPHR0PmRvX3NjYW5faXMoKTwvdHQ+IGFuZAo8dHQ+ZG9fc2Nhbl9ub3QoKTwvdHQ+IHRvIHJldHVybiBhIDx0dD4gY29uc3QKY2hhclQqPC90dD4uIDwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxMjUiPjwvYT4xMjUuIHZhbGFycmF5Jmx0O1QmZ3Q7OjpvcGVyYXRvciEoKSByZXR1cm4gdHlwZSBpcyBpbmNvbnNpc3RlbnQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuNS4yIFt0ZW1wbGF0ZS52YWxhcnJheV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSnVkeSBXYXJkIDxiPkRhdGU6PC9iPiAxOTk4LTEyLTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCN0ZW1wbGF0ZS52YWxhcnJheSI+aXNzdWVzPC9hPiBpbiBbdGVtcGxhdGUudmFsYXJyYXldLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5JbiBTZWN0aW9uIDI2LjUuMiBbdGVtcGxhdGUudmFsYXJyYXldIHZhbGFycmF5Jmx0O1QmZ3Q7OjpvcGVyYXRvciEoKQppcwpkZWNsYXJlZCB0byByZXR1cm4gYSB2YWxhcnJheSZsdDtUJmd0OywgYnV0IGluIFNlY3Rpb24gMjYuNS4yLjUKW3ZhbGFycmF5LnVuYXJ5XSBpdCBpcyBkZWNsYXJlZCB0byByZXR1cm4gYSB2YWxhcnJheSZsdDtib29sJmd0Oy4gVGhlCmxhdHRlciBhcHBlYXJzIHRvIGJlIGNvcnJlY3QuIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSBpbiBTZWN0aW9uIDI2LjUuMiBbdGVtcGxhdGUudmFsYXJyYXldIHRoZSBkZWNsYXJhdGlvbiBvZgo8dHQ+b3BlcmF0b3IhKCk8L3R0PiBzbyB0aGF0IHRoZSByZXR1cm4gdHlwZSBpcwo8dHQ+dmFsYXJyYXkmbHQ7Ym9vbCZndDs8L3R0Pi4gPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTI2Ij48L2E+MTI2LiB0eXBvcyBpbiBFZmZlY3RzIGNsYXVzZSBvZiBjdHlwZTo6ZG9fbmFycm93KCk8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMi4xLjEuMiBbbG9jYWxlLmN0eXBlLnZpcnR1YWxzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBKdWR5IFdhcmQgPGI+RGF0ZTo8L2I+IDE5OTgtMTItMTU8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xvY2FsZS5jdHlwZS52aXJ0dWFscyI+aXNzdWVzPC9hPiBpbiBbbG9jYWxlLmN0eXBlLnZpcnR1YWxzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD48cD5UeXBvcyBpbiAyMi4yLjEuMS4yIG5lZWQgdG8gYmUgZml4ZWQuPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiBTZWN0aW9uIDIyLjIuMS4xLjIgW2xvY2FsZS5jdHlwZS52aXJ0dWFsc10gY2hhbmdlOiA8L3A+Cgo8cHJlPiAgIGRvX3dpZGVuKGRvX25hcnJvdyhjKSwwKSA9PSBjPC9wcmU+Cgo8cD50bzo8L3A+Cgo8cHJlPiAgIGRvX3dpZGVuKGRvX25hcnJvdyhjLDApKSA9PSBjPC9wcmU+Cgo8cD5hbmQgY2hhbmdlOjwvcD4KCjxwcmU+ICAgKGlzKE0sYykgfHwgIWN0Yy5pcyhNLCBkb19uYXJyb3coYyksZGZhdWx0KSApPC9wcmU+Cgo8cD50bzo8L3A+Cgo8cHJlPiAgIChpcyhNLGMpIHx8ICFjdGMuaXMoTSwgZG9fbmFycm93KGMsZGZhdWx0KSkgKTwvcHJlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjEyNyI+PC9hPjEyNy4gYXV0b19wdHImbHQ7Jmd0OyBjb252ZXJzaW9uIGlzc3VlczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiBELjkuMSBbYXV0by5wdHJdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEdyZWcgQ29sdmluIDxiPkRhdGU6PC9iPiAxOTk5LTAyLTE3PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNhdXRvLnB0ciI+aXNzdWVzPC9hPiBpbiBbYXV0by5wdHJdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGVyZSBhcmUgdHdvIHByb2JsZW1zIHdpdGggdGhlIGN1cnJlbnQgPHR0PmF1dG9fcHRyPC90dD4gd29yZGluZwppbiB0aGUgc3RhbmRhcmQ6IDwvcD4KCjxwPkZpcnN0LCB0aGUgPHR0PmF1dG9fcHRyX3JlZjwvdHQ+IGRlZmluaXRpb24gY2Fubm90IGJlIG5lc3RlZApiZWNhdXNlIDx0dD5hdXRvX3B0ciZsdDtEZXJpdmVkJmd0Ozo6YXV0b19wdHJfcmVmPC90dD4gaXMgdW5yZWxhdGVkIHRvCjx0dD5hdXRvX3B0ciZsdDtCYXNlJmd0Ozo6YXV0b19wdHJfcmVmPC90dD4uICA8aT5BbHNvIHN1Ym1pdHRlZCBieQpOYXRoYW4gTXllcnMsIHdpdGggdGhlIHNhbWUgcHJvcG9zZWQgcmVzb2x1dGlvbi48L2k+PC9wPgoKPHA+U2Vjb25kLCB0aGVyZSBpcyBubyA8dHQ+YXV0b19wdHI8L3R0PiBhc3NpZ25tZW50IG9wZXJhdG9yIHRha2luZyBhbgo8dHQ+YXV0b19wdHJfcmVmPC90dD4gYXJndW1lbnQuIDwvcD4KCjxwPkkgaGF2ZSBkaXNjdXNzZWQgdGhlc2UgcHJvYmxlbXMgd2l0aCBteSBwcm9wb3NhbCBjb2F1dGhvciwgQmlsbApHaWJib25zLCBhbmQgd2l0aCBzb21lIGNvbXBpbGVyIGFuZCBsaWJyYXJ5IGltcGxlbWVudG9ycywgYW5kIHdlCmJlbGlldmUgdGhhdCB0aGVzZSBwcm9ibGVtcyBhcmUgbm90IGRlc2lyZWQgb3IgZGVzaXJhYmxlIGltcGxpY2F0aW9ucwpvZiB0aGUgc3RhbmRhcmQuIDwvcD4KCjxwPjI1IEF1ZyAxOTk5OiBUaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBub3cgcmVmbGVjdHMgY2hhbmdlcyBzdWdnZXN0ZWQKYnkgRGF2ZSBBYnJhaGFtcywgd2l0aCBHcmVnIENvbHZpbidzIGNvbmN1cnJlbmNlOyAxKSBjaGFuZ2VkCiJhc3NpZ25tZW50IG9wZXJhdG9yIiB0byAicHVibGljIGFzc2lnbm1lbnQKb3BlcmF0b3IiLCAyKSBjaGFuZ2VkIGVmZmVjdHMgdG8gc3BlY2lmeSB1c2Ugb2YgcmVsZWFzZSgpLCAzKQptYWRlIHRoZSBjb252ZXJzaW9uIHRvIGF1dG9fcHRyX3JlZiBjb25zdC4gPC9wPgoKPHA+MiBGZWIgMjAwMDogTGlzYSBMaXBwaW5jb3R0IGNvbW1lbnRzOiBbVGhlIHJlc29sdXRpb24gb2ZdIHRoaXMgaXNzdWUKc3RhdGVzIHRoYXQgdGhlIGNvbnZlcnNpb24gZnJvbSBhdXRvX3B0ciB0byBhdXRvX3B0cl9yZWYgc2hvdWxkCmJlIGNvbnN0LiAgVGhpcyBpcyBub3QgYWNjZXB0YWJsZSwgYmVjYXVzZSBpdCB3b3VsZCBhbGxvdwppbml0aWFsaXphdGlvbiBhbmQgYXNzaWdubWVudCBmcm9tIF9hbnlfIGNvbnN0IGF1dG9fcHRyISAgSXQgYWxzbwppbnRyb2R1Y2VzIGFuIGltcGxlbWVudGF0aW9uIGRpZmZpY3VsdHkgaW4gd3JpdGluZyB0aGlzIGNvbnZlcnNpb24KZnVuY3Rpb24gLS0gbmFtZWx5LCBzb21ld2hlcmUgYWxvbmcgdGhlIGxpbmUsIGEgY29uc3RfY2FzdCB3aWxsIGJlCm5lY2Vzc2FyeSB0byByZW1vdmUgdGhhdCBjb25zdCBzbyB0aGF0IHJlbGVhc2UoKSBtYXkgYmUgY2FsbGVkLiAgVGhpcwptYXkgcmVzdWx0IGluIHVuZGVmaW5lZCBiZWhhdmlvciBbNy4xLjUuMS80XS4gVGhlIGNvbnZlcnNpb24Kb3BlcmF0b3IgZG9lcyBub3QgaGF2ZSB0byBiZSBjb25zdCwgYmVjYXVzZSBhIG5vbi1jb25zdCBpbXBsaWNpdApvYmplY3QgcGFyYW1ldGVyIG1heSBiZSBib3VuZCB0byBhbiBydmFsdWUgWzEzLjMuMy4xLjQvM10KWzEzLjMuMS81XS4gPC9wPgoKICA8cD5Ub2t5bzogVGhlIExXRyByZW1vdmVkIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbjo8L3A+CgogIDxwPkluIDIwLjUuNCBbbWV0YS51bmFyeV0sIHBhcmFncmFwaCAyLCBhbmQgMjAuNS40LjMgW21ldGEudW5hcnkucHJvcF0sIAogIHBhcmFncmFwaCAyLCBtYWtlIHRoZSBjb252ZXJzaW9uIHRvIGF1dG9fcHRyX3JlZiBjb25zdDo8L3A+CiAgPGJsb2NrcXVvdGU+CiAgICA8cHJlPnRlbXBsYXRlJmx0O2NsYXNzIFkmZ3Q7IG9wZXJhdG9yIGF1dG9fcHRyX3JlZiZsdDtZJmd0OygpIGNvbnN0IHRocm93KCk7PC9wcmU+CiAgPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjAuNS40IFttZXRhLnVuYXJ5XSwgcGFyYWdyYXBoIDIsIG1vdmUKdGhlIDx0dD5hdXRvX3B0cl9yZWY8L3R0PiBkZWZpbml0aW9uIHRvIG5hbWVzcGFjZSBzY29wZS48L3A+Cgo8cD5JbiAyMC41LjQgW21ldGEudW5hcnldLCBwYXJhZ3JhcGggMiwgYWRkCmEgcHVibGljIGFzc2lnbm1lbnQgb3BlcmF0b3IgdG8gdGhlIDx0dD5hdXRvX3B0cjwvdHQ+IGRlZmluaXRpb246IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+YXV0b19wdHImYW1wOyBvcGVyYXRvcj0oYXV0b19wdHJfcmVmJmx0O1gmZ3Q7IHIpIHRocm93KCk7PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPkFsc28gYWRkIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yIHRvIDIwLjUuNC4zIFttZXRhLnVuYXJ5LnByb3BdOiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPmF1dG9fcHRyJmFtcDsgb3BlcmF0b3I9KGF1dG9fcHRyX3JlZiZsdDtYJmd0OyByKSB0aHJvdygpPC9wcmU+CgogIDxwPjxiPkVmZmVjdHM6PC9iPiBDYWxscyA8dHQ+cmVzZXQocC5yZWxlYXNlKCkpPC90dD4gZm9yIHRoZSA8dHQ+YXV0b19wdHIKICBwPC90dD4gdGhhdCA8dHQ+cjwvdHQ+IGhvbGRzIGEgcmVmZXJlbmNlIHRvLjxicj4KICA8Yj5SZXR1cm5zOiA8L2I+PHR0Pip0aGlzPC90dD4uPC9wPgoKPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjEyOSI+PC9hPjEyOS4gTmVlZCBlcnJvciBpbmRpY2F0aW9uIGZyb20gc2Vla3AoKSBhbmQgc2Vla2coKTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjEuMyBbaXN0cmVhbS51bmZvcm1hdHRlZF0sIDI3LjYuMi41IFtvc3RyZWFtLnNlZWtzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBBbmdlbGlrYSBMYW5nZXIgPGI+RGF0ZTo8L2I+IDE5OTktMDItMjI8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lzdHJlYW0udW5mb3JtYXR0ZWQiPmlzc3VlczwvYT4gaW4gW2lzdHJlYW0udW5mb3JtYXR0ZWRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5DdXJyZW50bHksIHRoZSBzdGFuZGFyZCBkb2VzIG5vdCBzcGVjaWZ5IGhvdyBzZWVrZygpIGFuZCBzZWVrcCgpCmluZGljYXRlIGZhaWx1cmUuIFRoZXkgYXJlIG5vdCByZXF1aXJlZCB0byBzZXQgZmFpbGJpdCwgYW5kIHRoZXkgY2FuJ3QKcmV0dXJuIGFuIGVycm9yIGluZGljYXRpb24gYmVjYXVzZSB0aGV5IG11c3QgcmV0dXJuICp0aGlzLCBpLmUuIHRoZQpzdHJlYW0uIEhlbmNlLCBpdCBpcyB1bmRlZmluZWQgd2hhdCBoYXBwZW5zIGlmIHRoZXkgZmFpbC4gQW5kIHRoZXkKPGk+Y2FuPC9pPiBmYWlsLCBmb3IgaW5zdGFuY2UsIHdoZW4gYSBmaWxlIHN0cmVhbSBpcyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUKdW5kZXJseWluZyBmaWxlIChpc19vcGVuKCk9PWZhbHNlKSBvciB3aGVuIGEgd2lkZSBjaGFyYWN0ZXIgZmlsZQpzdHJlYW0gbXVzdCBwZXJmb3JtIGEgc3RhdGUtZGVwZW5kZW50IGNvZGUgY29udmVyc2lvbiwgZXRjLiA8L3A+Cgo8cD5UaGUgc3RyZWFtIGZ1bmN0aW9ucyBzZWVrZygpIGFuZCBzZWVrcCgpIHNob3VsZCBzZXQgZmFpbGJpdCBpbiB0aGUKc3RyZWFtIHN0YXRlIGluIGNhc2Ugb2YgZmFpbHVyZS48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgdG8gdGhlIEVmZmVjdHM6IGNsYXVzZSBvZiZuYnNwOyBzZWVrZygpIGluIAoyNy42LjEuMyBbaXN0cmVhbS51bmZvcm1hdHRlZF0gYW5kIHRvIHRoZSBFZmZlY3RzOiBjbGF1c2Ugb2Ygc2Vla3AoKSBpbgoyNy42LjIuNSBbb3N0cmVhbS5zZWVrc106IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkluIGNhc2Ugb2YgZmFpbHVyZSwgdGhlIGZ1bmN0aW9uIGNhbGxzIDx0dD5zZXRzdGF0ZShmYWlsYml0KTwvdHQ+ICh3aGljaCBtYXkgdGhyb3cgPHR0Pmlvc19iYXNlOjpmYWlsdXJlPC90dD4pLgogIDwvcD4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5TZXR0aW5nIGZhaWxiaXQgaXMgdGhlIHVzdWFsIGVycm9yIHJlcG9ydGluZyBtZWNoYW5pc20gZm9yIHN0cmVhbXM8L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxMzAiPjwvYT4xMzAuIFJldHVybiB0eXBlIG9mIGNvbnRhaW5lcjo6ZXJhc2UoaXRlcmF0b3IpIGRpZmZlcnMgZm9yIGFzc29jaWF0aXZlIGNvbnRhaW5lcnM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMS40IFthc3NvY2lhdGl2ZS5yZXFtdHNdLCAyMy4xLjMgW3NlcXVlbmNlLnJlcW10c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQW5kcmV3IEtvZW5pZyA8Yj5EYXRlOjwvYj4gMTk5OS0wMy0wMjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYXNzb2NpYXRpdmUucmVxbXRzIj5pc3N1ZXM8L2E+IGluIFthc3NvY2lhdGl2ZS5yZXFtdHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI0RSIj5EUjwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RHVwbGljYXRlIG9mOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDUxIj40NTE8L2E+PC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRhYmxlIDY3ICgyMy4xLjEpIHNheXMgdGhhdCBjb250YWluZXI6OmVyYXNlKGl0ZXJhdG9yKSByZXR1cm5zIGFuCml0ZXJhdG9yLiBUYWJsZSA2OSAoMjMuMS4yKSBzYXlzIHRoYXQgaW4gYWRkaXRpb24gdG8gdGhpcyByZXF1aXJlbWVudCwKYXNzb2NpYXRpdmUgY29udGFpbmVycyBhbHNvIHNheSB0aGF0IGNvbnRhaW5lcjo6ZXJhc2UoaXRlcmF0b3IpCnJldHVybnMgdm9pZC4gIFRoYXQncyBub3QgYW4gYWRkaXRpb247IGl0J3MgYSBjaGFuZ2UgdG8gdGhlCnJlcXVpcmVtZW50cywgd2hpY2ggaGFzIHRoZSBlZmZlY3Qgb2YgbWFraW5nIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMKZmFpbCB0byBtZWV0IHRoZSByZXF1aXJlbWVudHMgZm9yIGNvbnRhaW5lcnMuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPgpJbiAyMy4xLjQgW2Fzc29jaWF0aXZlLnJlcW10c10sIGluIFRhYmxlIDY5IEFzc29jaWF0aXZlIGNvbnRhaW5lcgpyZXF1aXJlbWVudHMsIGNoYW5nZSB0aGUgcmV0dXJuIHR5cGUgb2YgPHR0PmEuZXJhc2UocSk8L3R0PiBmcm9tCjx0dD52b2lkPC90dD4gdG8gPHR0Pml0ZXJhdG9yPC90dD4uICBDaGFuZ2UgdGhlCmFzc2VydGlvbi9ub3QvcHJlL3Bvc3QtY29uZGl0aW9uIGZyb20gImVyYXNlcyB0aGUgZWxlbWVudCBwb2ludGVkIHRvCmJ5IDx0dD5xPC90dD4iIHRvICJlcmFzZXMgdGhlIGVsZW1lbnQgcG9pbnRlZCB0byBieSA8dHQ+cTwvdHQ+LgpSZXR1cm5zIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IGltbWVkaWF0ZWx5IGZvbGxvd2luZyBxCnByaW9yIHRvIHRoZSBlbGVtZW50IGJlaW5nIGVyYXNlZC4gSWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cywgYS5lbmQoKQppcyByZXR1cm5lZC4iCjwvcD4KCjxwPgpJbiAyMy4xLjQgW2Fzc29jaWF0aXZlLnJlcW10c10sIGluIFRhYmxlIDY5IEFzc29jaWF0aXZlIGNvbnRhaW5lcgpyZXF1aXJlbWVudHMsIGNoYW5nZSB0aGUgcmV0dXJuIHR5cGUgb2YgPHR0PmEuZXJhc2UocTEsIHEyKTwvdHQ+CmZyb20gPHR0PnZvaWQ8L3R0PiB0byA8dHQ+aXRlcmF0b3I8L3R0Pi4gIENoYW5nZSB0aGUKYXNzZXJ0aW9uL25vdC9wcmUvcG9zdC1jb25kaXRpb24gZnJvbSAiZXJhc2VzIHRoZSBlbGVtZW50cyBpbiB0aGUKcmFuZ2UgPHR0PltxMSwgcTIpPC90dD4iIHRvICJlcmFzZXMgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZSA8dHQ+W3ExLApxMik8L3R0Pi4gIFJldHVybnMgcTIuIgo8L3A+Cgo8cD4KSW4gMjMuMy4xIFttYXBdLCBpbiB0aGUgPHR0Pm1hcDwvdHQ+IGNsYXNzIHN5bm9wc2lzOyBhbmQgCmluIDIzLjMuMiBbbXVsdGltYXBdLCBpbiB0aGUgPHR0Pm11bHRpbWFwPC90dD4gY2xhc3Mgc3lub3BzaXM7IGFuZAppbiAyMy4zLjMgW3NldF0sIGluIHRoZSA8dHQ+c2V0PC90dD4gY2xhc3Mgc3lub3BzaXM7IGFuZAppbiAyMy4zLjQgW211bHRpc2V0XSwgaW4gdGhlIDx0dD5tdWx0aXNldDwvdHQ+IGNsYXNzIHN5bm9wc2lzOgpjaGFuZ2UgdGhlIHNpZ25hdHVyZSBvZiB0aGUgZmlyc3QgPHR0PmVyYXNlPC90dD4gb3ZlcmxvYWQgdG8KPC9wPgo8cHJlPiAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIHBvc2l0aW9uKTsKPC9wcmU+CjxwPmFuZCBjaGFuZ2UgdGhlIHNpZ25hdHVyZSBvZiB0aGUgdGhpcmQgPHR0PmVyYXNlPC90dD4gb3ZlcmxvYWQgdG88L3A+CjxwcmU+ICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBmaXJzdCwgaXRlcmF0b3IgbGFzdCk7IAo8L3ByZT4KCgo8cD48aT5bUHJlLUtvbmE6IHJlb3BlbmVkIGF0IHRoZSByZXF1ZXN0IG9mIEhvd2FyZCBIaW5uYW50XTwvaT48L3A+CgoKPHA+PGk+W1Bvc3QtS29uYTogdGhlIExXRyBhZ3JlZXMgdGhlIHJldHVybiB0eXBlIHNob3VsZCBiZQo8dHQ+aXRlcmF0b3I8L3R0Piwgbm90IDx0dD52b2lkPC90dD4uICAoQWxleCBTdGVwYW5vdiBhZ3JlZXMgdG9vLikKTWF0dCBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgoKCjxwPjxpPlsKIFN5ZG5leTogdGhlIHByb3Bvc2VkIHdvcmRpbmcgd2VudCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLCBidXQgaXQKIHdhc24ndCBnb29kIGVub3VnaC4gV2Ugd2FudCB0byByZXR1cm4gYW4gaXRlcmF0b3IgZnJvbSB0aGUgcmFuZ2UgZm9ybQogb2YgZXJhc2UgYXMgd2VsbCBhcyB0aGUgc2luZ2xlLWl0ZXJhdG9yIGZvcm0uIEFsc28sIHRoZSB3b3JkaW5nIGlzCiBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSB0aGUgd29yZGluZyB3ZSBoYXZlIGZvciBzZXF1ZW5jZXM7IHRoZXJlJ3Mgbm8KIGdvb2QgcmVhc29uIGZvciBoYXZpbmcgYSBkaWZmZXJlbmNlLiAgTWF0dCBwcm92aWRlZCBuZXcgd29yZGluZywKKHJlZmxlY3RlZCBhYm92ZSkgd2hpY2ggd2Ugd2lsbCByZXZpZXcgYXQgdGhlIG5leHQgbWVldGluZy4KXTwvaT48L3A+CgoKPHA+PGk+WwpSZWRtb25kOiAgZm9ybWFsbHkgdm90ZWQgaW50byBXUC4KXTwvaT48L3A+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxMzIiPjwvYT4xMzIuIGxpc3Q6OnJlc2l6ZSBkZXNjcmlwdGlvbiB1c2VzIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjIuNC4yIFtsaXN0LmNhcGFjaXR5XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBIb3dhcmQgSGlubmFudCA8Yj5EYXRlOjwvYj4gMTk5OS0wMy0wNjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgZGVzY3JpcHRpb24gcmVhZHM6PC9wPgoKPHA+LTEtIEVmZmVjdHM6PC9wPgoKPHByZT4gICAgICAgICBpZiAoc3ogJmd0OyBzaXplKCkpCiAgICAgICAgICAgaW5zZXJ0KGVuZCgpLCBzei1zaXplKCksIGMpOwogICAgICAgICBlbHNlIGlmIChzeiAmbHQ7IHNpemUoKSkKICAgICAgICAgICBlcmFzZShiZWdpbigpK3N6LCBlbmQoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGRvIG5vdGhpbmc8L3ByZT4KCjxwPk9idmlvdXNseSBsaXN0OjpyZXNpemUgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgaW4gdGVybXMgb2YgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDIzLjIuNC4yIFtsaXN0LmNhcGFjaXR5XSBwYXJhZ3JhcGggMSB0bzo8L3A+Cgo8cD5FZmZlY3RzOjwvcD4KCjxwcmU+ICAgICAgICAgaWYgKHN6ICZndDsgc2l6ZSgpKQogICAgICAgICAgIGluc2VydChlbmQoKSwgc3otc2l6ZSgpLCBjKTsKICAgICAgICAgZWxzZSBpZiAoc3ogJmx0OyBzaXplKCkpCiAgICAgICAgIHsKICAgICAgICAgICBpdGVyYXRvciBpID0gYmVnaW4oKTsKICAgICAgICAgICBhZHZhbmNlKGksIHN6KTsKICAgICAgICAgICBlcmFzZShpLCBlbmQoKSk7CiAgICAgICAgIH08L3ByZT4KCjxwPjxpPltEdWJsaW46IFRoZSBMV0cgYXNrZWQgSG93YXJkIHRvIGRpc2N1c3MgZXhjZXB0aW9uIHNhZmV0eSBvZmZsaW5lCndpdGggRGF2aWQgQWJyYWhhbXMuIFRoZXkgaGFkIGEgZGlzY3Vzc2lvbiBhbmQgYmVsaWV2ZSB0aGVyZSBpcwpubyBpc3N1ZSBvZiBleGNlcHRpb24gc2FmZXR5IHdpdGggdGhlIHByb3Bvc2VkIHJlc29sdXRpb24uXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjEzMyI+PC9hPjEzMy4gbWFwIG1pc3NpbmcgZ2V0X2FsbG9jYXRvcigpPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjMuMSBbbWFwXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBIb3dhcmQgSGlubmFudCA8Yj5EYXRlOjwvYj4gMTk5OS0wMy0wNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbWFwIj5pc3N1ZXM8L2E+IGluIFttYXBdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPjxwPlRoZSB0aXRsZSBzYXlzIGl0IGFsbC48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluc2VydCBpbiAyMy4zLjEgW21hcF0sIHBhcmFncmFwaCAyLAphZnRlciBvcGVyYXRvcj0gaW4gdGhlIG1hcCBkZWNsYXJhdGlvbjo8L3A+Cgo8cHJlPiAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Q7PC9wcmU+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxMzQiPjwvYT4xMzQuIHZlY3RvciBjb25zdHJ1Y3RvcnMgb3ZlciBzcGVjaWZpZWQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMi42LjEgW3ZlY3Rvci5jb25zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBIb3dhcmQgSGlubmFudCA8Yj5EYXRlOjwvYj4gMTk5OS0wMy0wNjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgY29tcGxleGl0eSBkZXNjcmlwdGlvbiBzYXlzOiAiSXQgZG9lcyBhdCBtb3N0IDJOIGNhbGxzIHRvIHRoZSBjb3B5IGNvbnN0cnVjdG9yCm9mIFQgYW5kIGxvZ04gcmVhbGxvY2F0aW9ucyBpZiB0aGV5IGFyZSBqdXN0IGlucHV0IGl0ZXJhdG9ycyAuLi4iLjwvcD4KCjxwPlRoaXMgYXBwZWFycyB0byBiZSBvdmVybHkgcmVzdHJpY3RpdmUsIGRpY3RhdGluZyB0aGUgcHJlY2lzZSBtZW1vcnkvcGVyZm9ybWFuY2UKdHJhZGVvZmYgZm9yIHRoZSBpbXBsZW1lbnRvci48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjMuMi42LjEgW3ZlY3Rvci5jb25zXSwgcGFyYWdyYXBoIDEgdG86PC9wPgoKPHA+LTEtIENvbXBsZXhpdHk6IFRoZSBjb25zdHJ1Y3RvciB0ZW1wbGF0ZSAmbHQ7Y2xhc3MKSW5wdXRJdGVyYXRvciZndDsgdmVjdG9yKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkKbWFrZXMgb25seSBOIGNhbGxzIHRvIHRoZSBjb3B5IGNvbnN0cnVjdG9yIG9mIFQgKHdoZXJlIE4gaXMgdGhlCmRpc3RhbmNlIGJldHdlZW4gZmlyc3QgYW5kIGxhc3QpIGFuZCBubyByZWFsbG9jYXRpb25zIGlmIGl0ZXJhdG9ycwpmaXJzdCBhbmQgbGFzdCBhcmUgb2YgZm9yd2FyZCwgYmlkaXJlY3Rpb25hbCwgb3IgcmFuZG9tIGFjY2VzcwpjYXRlZ29yaWVzLiBJdCBtYWtlcyBvcmRlciBOIGNhbGxzIHRvIHRoZSBjb3B5IGNvbnN0cnVjdG9yIG9mIFQgYW5kCm9yZGVyIGxvZ04gcmVhbGxvY2F0aW9ucyBpZiB0aGV5IGFyZSBqdXN0IGlucHV0IGl0ZXJhdG9ycy4KPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4iYXQgbW9zdCAyTiBjYWxscyIgaXMgY29ycmVjdCBvbmx5IGlmIHRoZSBncm93dGggZmFjdG9yCmlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyLgo8L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxMzYiPjwvYT4xMzYuIHNlZWtwLCBzZWVrZyBzZXR0aW5nIHdyb25nIHN0cmVhbXM/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjYuMS4zIFtpc3RyZWFtLnVuZm9ybWF0dGVkXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBIb3dhcmQgSGlubmFudCA8Yj5EYXRlOjwvYj4gMTk5OS0wMy0wNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaXN0cmVhbS51bmZvcm1hdHRlZCI+aXNzdWVzPC9hPiBpbiBbaXN0cmVhbS51bmZvcm1hdHRlZF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkkgbWF5IGJlIG1pc3VuZGVyc3RhbmRpbmcgdGhlIGludGVudCwgYnV0IHNob3VsZCBub3Qgc2Vla2cgc2V0IG9ubHkKdGhlIGlucHV0IHN0cmVhbSBhbmQgc2Vla3Agc2V0IG9ubHkgdGhlIG91dHB1dCBzdHJlYW0/IFRoZSBkZXNjcmlwdGlvbgpzZWVtcyB0byBzYXkgdGhhdCBlYWNoIHNob3VsZCBzZXQgYm90aCBpbnB1dCBhbmQgb3V0cHV0IHN0cmVhbXMuIElmCnRoYXQncyByZWFsbHkgdGhlIGludGVudCwgSSB3aXRoZHJhdyB0aGlzIHByb3Bvc2FsLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIHNlY3Rpb24gMjcuNi4xLjMgY2hhbmdlOjwvcD4KCjxwcmU+YmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgc2Vla2cocG9zX3R5cGUgcG9zKTsKRWZmZWN0czogSWYgZmFpbCgpICE9IHRydWUsIGV4ZWN1dGVzIHJkYnVmKCktJmd0O3B1YnNlZWtwb3MocG9zKS4gPC9wcmU+Cgo8cD5Ubzo8L3A+Cgo8cHJlPmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IHNlZWtnKHBvc190eXBlIHBvcyk7CkVmZmVjdHM6IElmIGZhaWwoKSAhPSB0cnVlLCBleGVjdXRlcyByZGJ1ZigpLSZndDtwdWJzZWVrcG9zKHBvcywgaW9zX2Jhc2U6OmluKS4gPC9wcmU+Cgo8cD5JbiBzZWN0aW9uIDI3LjYuMS4zIGNoYW5nZTo8L3A+Cgo8cHJlPmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IHNlZWtnKG9mZl90eXBlJmFtcDsgb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBkaXIpOwpFZmZlY3RzOiBJZiBmYWlsKCkgIT0gdHJ1ZSwgZXhlY3V0ZXMgcmRidWYoKS0mZ3Q7cHVic2Vla29mZihvZmYsIGRpcikuIDwvcHJlPgoKPHA+VG86PC9wPgoKPHByZT5iYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBzZWVrZyhvZmZfdHlwZSZhbXA7IG9mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgZGlyKTsKRWZmZWN0czogSWYgZmFpbCgpICE9IHRydWUsIGV4ZWN1dGVzIHJkYnVmKCktJmd0O3B1YnNlZWtvZmYob2ZmLCBkaXIsIGlvc19iYXNlOjppbikuIDwvcHJlPgoKPHA+SW4gc2VjdGlvbiAyNy42LjIuNCwgcGFyYWdyYXBoIDIgY2hhbmdlOjwvcD4KCjxwcmU+LTItIEVmZmVjdHM6IElmIGZhaWwoKSAhPSB0cnVlLCBleGVjdXRlcyByZGJ1ZigpLSZndDtwdWJzZWVrcG9zKHBvcykuIDwvcHJlPgoKPHA+VG86PC9wPgoKPHByZT4tMi0gRWZmZWN0czogSWYgZmFpbCgpICE9IHRydWUsIGV4ZWN1dGVzIHJkYnVmKCktJmd0O3B1YnNlZWtwb3MocG9zLCBpb3NfYmFzZTo6b3V0KS4gPC9wcmU+Cgo8cD5JbiBzZWN0aW9uIDI3LjYuMi40LCBwYXJhZ3JhcGggNCBjaGFuZ2U6PC9wPgoKPHByZT4tNC0gRWZmZWN0czogSWYgZmFpbCgpICE9IHRydWUsIGV4ZWN1dGVzIHJkYnVmKCktJmd0O3B1YnNlZWtvZmYob2ZmLCBkaXIpLiA8L3ByZT4KCjxwPlRvOjwvcD4KCjxwcmU+LTQtIEVmZmVjdHM6IElmIGZhaWwoKSAhPSB0cnVlLCBleGVjdXRlcyByZGJ1ZigpLSZndDtwdWJzZWVrb2ZmKG9mZiwgZGlyLCBpb3NfYmFzZTo6b3V0KS4gPC9wcmU+Cgo8cD48aT5bRHVibGluOiBEaWV0bWFyIEv8aGwgdGhpbmtzIHRoaXMgaXMgcHJvYmFibHkgY29ycmVjdCwgYnV0IHdvdWxkCmxpa2UgdGhlIG9waW5pb24gb2YgbW9yZSBpb3N0cmVhbSBleHBlcnRzIGJlZm9yZSB0YWtpbmcgYWN0aW9uLl08L2k+PC9wPgoKCjxwPjxpPltUb2t5bzogUmV2aWV3ZWQgYnkgdGhlIExXRy4gUEpQIG5vdGVkIHRoYXQgYWx0aG91Z2ggaGlzIGRvY3MgYXJlCmluY29ycmVjdCwgaGlzIGltcGxlbWVudGF0aW9uIGFscmVhZHkgaW1wbGVtZW50cyB0aGUgUHJvcG9zZWQKUmVzb2x1dGlvbi5dPC9pPjwvcD4KCgo8cD48aT5bUG9zdC1Ub2t5bzogTWF0dCBBdXN0ZXJuIGNvbW1lbnRzOjxicj4KSXMgaXQgYSBwcm9ibGVtIHdpdGggYmFzaWNfaXN0cmVhbSBhbmQgYmFzaWNfb3N0cmVhbSwgb3IgaXMgaXQgYSBwcm9ibGVtCndpdGggYmFzaWNfc3RyaW5nYnVmPwpXZSBjb3VsZCByZXNvbHZlIHRoZSBpc3N1ZSBlaXRoZXIgYnkgY2hhbmdpbmcgYmFzaWNfaXN0cmVhbSBhbmQKYmFzaWNfb3N0cmVhbSwgb3IgYnkgY2hhbmdpbmcgYmFzaWNfc3RyaW5nYnVmLiBJIHByZWZlciB0aGUgbGF0dGVyCmNoYW5nZSAob3IgbWF5YmUgYm90aCBjaGFuZ2VzKTogSSBkb24ndCBzZWUgYW55IHJlYXNvbiBmb3IgdGhlIHN0YW5kYXJkIHRvCnJlcXVpcmUgdGhhdCBzdGQ6OnN0cmluZ2J1ZiBzKHN0ZDo6c3RyaW5nKCJmb28iKSwgc3RkOjppb3NfYmFzZTo6aW4pOwpzLnB1YnNlZWtvZmYoMCwgc3RkOjppb3NfYmFzZTo6YmVnKTsgbXVzdCBmYWlsLjxicj4KVGhpcyByZXF1aXJlbWVudCBpcyBhIGJpdCB3ZWlyZC4gVGhlcmUncyBubyBzaW1pbGFyIHJlcXVpcmVtZW50CmZvciBiYXNpY19zdHJlYW1idWYmbHQ7Jmd0Ozo6c2Vla3Bvcywgb3IgZm9yIGJhc2ljX2ZpbGVidWYmbHQ7Jmd0Ozo6c2Vla29mZiBvcgpiYXNpY19maWxlYnVmJmx0OyZndDs6OnNlZWtwb3MuXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjEzNyI+PC9hPjEzNy4gRG8gdXNlX2ZhY2V0IGFuZCBoYXNfZmFjZXQgbG9vayBpbiB0aGUgZ2xvYmFsIGxvY2FsZT88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMS4xIFtsb2NhbGVdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEFuZ2VsaWthIExhbmdlciA8Yj5EYXRlOjwvYj4gMTk5OS0wMy0xNzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlIj5pc3N1ZXM8L2E+IGluIFtsb2NhbGVdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5TZWN0aW9uIDIyLjEuMSBbbG9jYWxlXSBzYXlzOjwvcD4KCjxwPi00LSBJbiB0aGUgY2FsbCB0byB1c2VfZmFjZXQmbHQ7RmFjZXQmZ3Q7KGxvYyksIHRoZSB0eXBlIGFyZ3VtZW50CmNob29zZXMgYSBmYWNldCwgbWFraW5nIGF2YWlsYWJsZSBhbGwgbWVtYmVycyBvZiB0aGUgbmFtZWQgdHlwZS4gSWYKRmFjZXQgaXMgbm90IHByZXNlbnQgaW4gYSBsb2NhbGUgKG9yLCBmYWlsaW5nIHRoYXQsIGluIHRoZSBnbG9iYWwKbG9jYWxlKSwgaXQgdGhyb3dzIHRoZSBzdGFuZGFyZCBleGNlcHRpb24gYmFkX2Nhc3QuIEEgQysrIHByb2dyYW0gY2FuCmNoZWNrIGlmIGEgbG9jYWxlIGltcGxlbWVudHMgYSBwYXJ0aWN1bGFyIGZhY2V0IHdpdGggdGhlIHRlbXBsYXRlCmZ1bmN0aW9uIGhhc19mYWNldCZsdDtGYWNldCZndDsoKS4gPC9wPgoKPHA+VGhpcyBjb250cmFkaWN0cyB0aGUgc3BlY2lmaWNhdGlvbiBnaXZlbiBpbiBzZWN0aW9uIAoyMi4xLjIgW2xvY2FsZS5nbG9iYWwudGVtcGxhdGVzXToKPGJyPjxicj4KdGVtcGxhdGUgJmx0O2NsYXNzJm5ic3A7IEZhY2V0Jmd0OyBjb25zdCZuYnNwOyBGYWNldCZhbXA7IHVzZV9mYWNldChjb25zdApsb2NhbGUmYW1wOyZuYnNwOyBsb2MpOyA8YnI+Cjxicj4KLTEtIEdldCBhIHJlZmVyZW5jZSB0byBhIGZhY2V0IG9mIGEgbG9jYWxlLiA8YnI+Ci0yLSBSZXR1cm5zOiBhIHJlZmVyZW5jZSB0byB0aGUgY29ycmVzcG9uZGluZyBmYWNldCBvZiBsb2MsIGlmIHByZXNlbnQuIDxicj4KLTMtIFRocm93czogYmFkX2Nhc3QgaWYgaGFzX2ZhY2V0Jmx0O0ZhY2V0Jmd0Oyhsb2MpIGlzIGZhbHNlLiA8YnI+Ci00LSBOb3RlczogVGhlIHJlZmVyZW5jZSByZXR1cm5lZCByZW1haW5zIHZhbGlkIGF0IGxlYXN0IGFzIGxvbmcgYXMgYW55IGNvcHkgb2YgbG9jIGV4aXN0cwo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZW1vdmUgdGhlIHBocmFzZSAiKG9yLCBmYWlsaW5nIHRoYXQsIGluIHRoZSBnbG9iYWwgbG9jYWxlKSIKZnJvbSBzZWN0aW9uIDIyLjEuMS4gPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5OZWVkZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIHdheSBsb2NhbGVzIGFyZSBoYW5kbGVkIGVsc2V3aGVyZQppbiB0aGUgc3RhbmRhcmQuPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTM5Ij48L2E+MTM5LiBPcHRpb25hbCBzZXF1ZW5jZSBvcGVyYXRpb24gdGFibGUgZGVzY3JpcHRpb24gdW5jbGVhcjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4xLjMgW3NlcXVlbmNlLnJlcW10c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQW5kcmV3IEtvZW5pZyA8Yj5EYXRlOjwvYj4gMTk5OS0wMy0zMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjc2VxdWVuY2UucmVxbXRzIj5pc3N1ZXM8L2E+IGluIFtzZXF1ZW5jZS5yZXFtdHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgc2VudGVuY2UgaW50cm9kdWNpbmcgdGhlIE9wdGlvbmFsIHNlcXVlbmNlIG9wZXJhdGlvbiB0YWJsZQooMjMuMS4xIHBhcmFncmFwaCAxMikgaGFzIHR3byBwcm9ibGVtczo8L3A+Cgo8cD5BLiBJdCBzYXlzIGBgVGhlIG9wZXJhdGlvbnMgaW4gdGFibGUgNjggYXJlIHByb3ZpZGVkIG9ubHkgZm9yIHRoZSBjb250YWluZXJzIGZvciB3aGljaAp0aGV5IHRha2UgY29uc3RhbnQgdGltZS4nJzxicj4KPGJyPgpUaGF0IGNvdWxkIGJlIGludGVycHJldGVkIGluIHR3byB3YXlzLCBvbmUgb2YgdGhlbSBiZWluZyBgYEV2ZW4gdGhvdWdoIHRhYmxlIDY4IHNob3dzCnBhcnRpY3VsYXIgb3BlcmF0aW9ucyBhcyBiZWluZyBwcm92aWRlZCwgaW1wbGVtZW50YXRpb25zIGFyZSBmcmVlIHRvIG9taXQgdGhlbSBpZiB0aGV5CmNhbm5vdCBpbXBsZW1lbnQgdGhlbSBpbiBjb25zdGFudCB0aW1lLicnPGJyPgo8YnI+CkIuIFRoYXQgcGFyYWdyYXBoIHNheXMgbm90aGluZyBhYm91dCBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZSwgYW5kIGl0IHNob3VsZC4mbmJzcDs8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIHRoZSB3b3JkaW5nIGluIDIzLjEuMSBwYXJhZ3JhcGggMTImbmJzcDsgd2hpY2ggYmVnaW5zIGBgVGhlIG9wZXJhdGlvbnMgaW4gdGFibGUgNjggYXJlIHByb3ZpZGVkIG9ubHkuLi4iCndpdGg6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+VGFibGUgNjggbGlzdHMgc2VxdWVuY2Ugb3BlcmF0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3Igc29tZSB0eXBlcyBvZiBzZXF1ZW50aWFsCiAgY29udGFpbmVycyBidXQgbm90IG90aGVycy4gQW4gaW1wbGVtZW50YXRpb24gc2hhbGwgcHJvdmlkZSB0aGVzZSBvcGVyYXRpb25zIGZvciBhbGwKICBjb250YWluZXIgdHlwZXMgc2hvd24gaW4gdGhlIGBgY29udGFpbmVyJycgY29sdW1uLCBhbmQgc2hhbGwgaW1wbGVtZW50IHRoZW0gc28gYXMgdG8gdGFrZQogIGFtb3J0aXplZCBjb25zdGFudCB0aW1lLjwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTQxIj48L2E+MTQxLiBiYXNpY19zdHJpbmc6OmZpbmRfbGFzdF9vZiwgZmluZF9sYXN0X25vdF9vZiBzYXkgcG9zIGluc3RlYWQgb2YgeHBvczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMS4zLjYuNCBbc3RyaW5nOjppbnNlcnRdLCAyMS4zLjYuNiBbc3RyaW5nOjpyZXBsYWNlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBBcmNoIFJvYmlzb24gPGI+RGF0ZTo8L2I+IDE5OTktMDQtMjg8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3N0cmluZzo6aW5zZXJ0Ij5pc3N1ZXM8L2E+IGluIFtzdHJpbmc6Omluc2VydF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlNlY3Rpb25zIDIxLjMuNi40IHBhcmFncmFwaCAxIGFuZCAyMS4zLjYuNiBwYXJhZ3JhcGggMSBzdXJlbHkgaGF2ZSBtaXNwcmludHMgd2hlcmUgdGhleQpzYXk6PGJyPgo8YnI+CiYjODIxMjsgPHR0Pnhwb3MgJmx0Oz0gcG9zPC90dD4gYW5kIDx0dD5wb3MgJmx0OyBzaXplKCk7PC90dD48L3A+Cgo8cD5TdXJlbHkgdGhlIGRvY3VtZW50IG1lYW50IHRvIHNheSBgYDx0dD54cG9zICZsdDsgc2l6ZSgpPC90dD4nJyBpbiBib3RoIHBsYWNlcy48L3A+Cgo8cD48aT5bSnVkeSBXYXJkIGFsc28gc2VudCBpbiB0aGlzIGlzc3VlIGZvciAyMS4zLjYuNCB3aXRoIHRoZSBzYW1lCnByb3Bvc2VkIHJlc29sdXRpb24uXTwvaT48L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIFNlY3Rpb25zIDIxLjMuNi40IHBhcmFncmFwaCAxIGFuZCAyMS4zLjYuNiBwYXJhZ3JhcGggMSwgdGhlIGxpbmUgd2hpY2ggc2F5czo8YnI+Cjxicj4KJiM4MjEyOyA8dHQ+eHBvcyAmbHQ7PSBwb3M8L3R0PiBhbmQgPHR0PnBvcyAmbHQ7IHNpemUoKTs8YnI+Cjxicj4KPC90dD50bzo8YnI+Cjx0dD48YnI+CjwvdHQ+JiM4MjEyOyA8dHQ+eHBvcyAmbHQ7PSBwb3M8L3R0PiBhbmQgPHR0Pnhwb3MgJmx0OyBzaXplKCk7PC90dD48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNDIiPjwvYT4xNDIuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlIGNvbXBsZXhpdHkgd3Jvbmc8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjUuMy44IFthbGcubGV4LmNvbXBhcmlzb25dIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEhvd2FyZCBIaW5uYW50IDxiPkRhdGU6PC9iPiAxOTk5LTA2LTIwPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBsZXhpY29ncmFwaGljYWxfY29tcGFyZSBjb21wbGV4aXR5IGlzIHNwZWNpZmllZCBhczo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICJBdCBtb3N0IG1pbigobGFzdDEgLSBmaXJzdDEpLCAobGFzdDIgLSBmaXJzdDIpKQphcHBsaWNhdGlvbnMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29tcGFyaXNvbi4iPGJyPgo8YnI+ClRoZSBiZXN0IEkgY2FuIGRvIGlzIHR3aWNlIHRoYXQgZXhwZW5zaXZlLjwvcD4KCjxwPk5pY29sYWkgSm9zdXR0aXMgY29tbWVudHMgaW4gbGliLTY4NjI6IFlvdSBtZWFuLCB0byBjaGVjayBmb3IKZXF1YWxpdHkgeW91IGhhdmUgdG8gY2hlY2sgYm90aCAmbHQ7IGFuZCAmZ3Q7PyBZZXMsIElNTyB5b3UgYXJlCnJpZ2h0ISAoYW5kIE1hdHQgc3RhdGVzIHRoaXMgY29tcGxleGl0eSBpbiBoaXMgYm9vayk8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI1LjMuOCBbYWxnLmxleC5jb21wYXJpc29uXSBjb21wbGV4aXR5IHRvOjwvcD4KICAgIDxibG9ja3F1b3RlPjxwPgogICAgQXQgbW9zdCA8dHQ+MiptaW4oKGxhc3QxIC0gZmlyc3QxKSwgKGxhc3QyIC0gZmlyc3QyKSk8L3R0PgogICAgYXBwbGljYXRpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBhcmlzb24uCiAgICA8L3A+PC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIHRoZSBleGFtcGxlIGF0IHRoZSBlbmQgb2YgcGFyYWdyYXBoIDMgdG8gcmVhZDo8L3A+CiAgICA8YmxvY2txdW90ZT48cD4KICAgIFtFeGFtcGxlOjxicj4KICAgIDxicj4KICAgICZuYnNwOyZuYnNwOyZuYnNwOyBmb3IgKCA7IGZpcnN0MSAhPSBsYXN0MSAmYW1wOyZhbXA7IGZpcnN0MiAhPSBsYXN0MiA7CiAgICArK2ZpcnN0MSwgKytmaXJzdDIpIHs8YnI+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaWYgKCpmaXJzdDEgJmx0OyAqZmlyc3QyKSByZXR1cm4gdHJ1ZTs8YnI+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaWYgKCpmaXJzdDIgJmx0OyAqZmlyc3QxKSByZXR1cm4gZmFsc2U7PGJyPgogICAgJm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIGZpcnN0MSA9PSBsYXN0MSAmYW1wOyZhbXA7IGZpcnN0MiAhPSBsYXN0Mjs8YnI+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDs8YnI+CiAgICAtLWVuZCBleGFtcGxlXQogICAgPC9wPjwvYmxvY2txdW90ZT4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE0NCI+PC9hPjE0NC4gRGVxdWUgY29uc3RydWN0b3IgY29tcGxleGl0eSB3cm9uZyA8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMi4yLjEgW2RlcXVlLmNvbnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEhlcmIgU3V0dGVyIDxiPkRhdGU6PC9iPiAxOTk5LTA1LTA5PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNkZXF1ZS5jb25zIj5pc3N1ZXM8L2E+IGluIFtkZXF1ZS5jb25zXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SW4gMjMuMi4yLjEgW2RlcXVlLmNvbnNdIHBhcmFncmFwaCA2LCB0aGUgZGVxdWUgY3RvciB0aGF0IHRha2VzIGFuIGl0ZXJhdG9yIHJhbmdlIGFwcGVhcnMKdG8gaGF2ZSBjb21wbGV4aXR5IHJlcXVpcmVtZW50cyB3aGljaCBhcmUgaW5jb3JyZWN0LCBhbmQgd2hpY2ggY29udHJhZGljdCB0aGUKY29tcGxleGl0eSByZXF1aXJlbWVudHMgZm9yIGluc2VydCgpLiBJIHN1c3BlY3QgdGhhdCB0aGUgdGV4dCBpbiBxdWVzdGlvbiwKYmVsb3csIHdhcyB0YWtlbiBmcm9tIHZlY3Rvcjo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkNvbXBsZXhpdHk6IElmIHRoZSBpdGVyYXRvcnMgZmlyc3QgYW5kIGxhc3QgYXJlIGZvcndhcmQgaXRlcmF0b3JzLAogIGJpZGlyZWN0aW9uYWwgaXRlcmF0b3JzLCBvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycyB0aGUgY29uc3RydWN0b3IgbWFrZXMgb25seQogIE4gY2FsbHMgdG8gdGhlIGNvcHkgY29uc3RydWN0b3IsIGFuZCBwZXJmb3JtcyBubyByZWFsbG9jYXRpb25zLCB3aGVyZSBOIGlzCiAgbGFzdCAtIGZpcnN0LjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5UaGUgd29yZCAicmVhbGxvY2F0aW9ucyIgZG9lcyBub3QgcmVhbGx5IGFwcGx5IHRvIGRlcXVlLiBGdXJ0aGVyLAphbGwgb2YgdGhlIGZvbGxvd2luZyBhcHBlYXJzIHRvIGJlIHNwdXJpb3VzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+SXQgbWFrZXMgYXQgbW9zdCAyTiBjYWxscyB0byB0aGUgY29weSBjb25zdHJ1Y3RvciBvZiBUIGFuZCBsb2cgTgogIHJlYWxsb2NhdGlvbnMgaWYgdGhleSBhcmUgaW5wdXQgaXRlcmF0b3JzLjEpPC9wPgogIDxwPjEpIFRoZSBjb21wbGV4aXR5IGlzIGdyZWF0ZXIgaW4gdGhlIGNhc2Ugb2YgaW5wdXQgaXRlcmF0b3JzIGJlY2F1c2UgZWFjaAogIGVsZW1lbnQgbXVzdCBiZSBhZGRlZCBpbmRpdmlkdWFsbHk6IGl0IGlzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSBkaXN0YW5jZQogIGJldHdlZW4gZmlyc3QgYWJkIGxhc3QgYmVmb3JlIGRvaW5nIHRoZSBjb3B5aW5nLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5UaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIHZlY3RvciwgYnV0IG5vdCBmb3IgZGVxdWUuIFdoeSBzaG91bGQgZGVxdWUgZ2FpbgphbiBlZmZpY2llbmN5IGFkdmFudGFnZSBmcm9tIGtub3dpbmcgaW4gYWR2YW5jZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvCmluc2VydD88L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMy4yLjIuMSBbZGVxdWUuY29uc10gcGFyYWdyYXBoIDYsIHJlcGxhY2UgdGhlIENvbXBsZXhpdHkgZGVzY3JpcHRpb24sIGluY2x1ZGluZyB0aGUKZm9vdG5vdGUsIHdpdGggdGhlIGZvbGxvd2luZyB0ZXh0ICh3aGljaCBhbHNvIGNvcnJlY3RzIHRoZSAiYWJkIgp0eXBvKTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkNvbXBsZXhpdHk6IE1ha2VzIGxhc3QgLSBmaXJzdCBjYWxscyB0byB0aGUgY29weSBjb25zdHJ1Y3RvciBvZiBULjwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTQ2Ij48L2E+MTQ2LiBjb21wbGV4Jmx0O1QmZ3Q7IEluc2VydGVyIGFuZCBFeHRyYWN0b3IgbmVlZCBzZW50cmllczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNi4zLjYgW2NvbXBsZXgub3BzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBBbmdlbGlrYSBMYW5nZXIgPGI+RGF0ZTo8L2I+IDE5OTktMDUtMTI8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2NvbXBsZXgub3BzIj5pc3N1ZXM8L2E+IGluIFtjb21wbGV4Lm9wc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBleHRyYWN0b3IgZm9yIGNvbXBsZXggbnVtYmVycyBpcyBzcGVjaWZpZWQgYXM6Jm5ic3A7PC9wPgoKPGJsb2NrcXVvdGU+Cgo8cD4gICAgIHRlbXBsYXRlJmx0O2NsYXNzIFQsIGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMmZ3Q7Jm5ic3A7PGJyPgogICAgIGJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsIHRyYWl0cyZndDsmYW1wOyZuYnNwOzxicj4KICAgICBvcGVyYXRvciZndDsmZ3Q7KGJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsIHRyYWl0cyZndDsmYW1wOyAgaXMsIGNvbXBsZXgmbHQ7VCZndDsmYW1wOyAgeCk7PGJyPgombmJzcDs8YnI+CkVmZmVjdHM6IEV4dHJhY3RzIGEgY29tcGxleCBudW1iZXIgeCBvZiB0aGUgZm9ybTogdSwgKHUpLCBvciAodSx2KSwKd2hlcmUgdSBpcyB0aGUgcmVhbCBwYXJ0IGFuZCB2IGlzIHRoZSBpbWFnaW5hcnkgcGFydAoobGliLmlzdHJlYW0uZm9ybWF0dGVkKS4mbmJzcDs8YnI+ClJlcXVpcmVzOiBUaGUgaW5wdXQgdmFsdWVzIGJlIGNvbnZlcnRpYmxlIHRvIFQuIElmIGJhZCBpbnB1dCBpcwplbmNvdW50ZXJlZCwgY2FsbHMgaXMuc2V0c3RhdGUoaW9zOjpmYWlsYml0KSAod2hpY2ggbWF5IHRocm93Cmlvczo6ZmFpbHVyZSAobGliLmlvc3RhdGUuZmxhZ3MpLiZuYnNwOzxicj4KUmV0dXJuczogaXMgLjwvcD4KCjwvYmxvY2txdW90ZT4KPHA+SXMgaXQgaW50ZW5kZWQgdGhhdCB0aGUgZXh0cmFjdG9yIGZvciBjb21wbGV4IG51bWJlcnMgZG9lcyBub3Qgc2tpcAp3aGl0ZXNwYWNlLCB1bmxpa2UgYWxsIG90aGVyIGV4dHJhY3RvcnMgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgZG8/ClNob3VsZG4ndCBhIHNlbnRyeSBiZSB1c2VkPyZuYnNwOzxicj4KPGJyPgpUaGUgaW5zZXJ0ZXIgZm9yIGNvbXBsZXggbnVtYmVycyBpcyBzcGVjaWZpZWQgYXM6PC9wPgoKPGJsb2NrcXVvdGU+Cgo8cD4gICAgIHRlbXBsYXRlJmx0O2NsYXNzIFQsIGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMmZ3Q7Jm5ic3A7PGJyPgogICAgIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsIHRyYWl0cyZndDsmYW1wOyZuYnNwOzxicj4KICAgICBvcGVyYXRvciZsdDsmbHQ7KGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsIHRyYWl0cyZndDsmYW1wOyAgbywgY29uc3QgY29tcGxleCZsdDtUJmd0OyZhbXA7ICB4KTs8YnI+Cjxicj4KRWZmZWN0czogaW5zZXJ0cyB0aGUgY29tcGxleCBudW1iZXIgeCBvbnRvIHRoZSBzdHJlYW0gbyBhcyBpZiBpdCB3ZXJlIGltcGxlbWVudGVkIGFzIGZvbGxvd3M6PGJyPgo8YnI+CiAgICAgdGVtcGxhdGUmbHQ7Y2xhc3MgVCwgY2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyZndDsmbmJzcDs8YnI+CiAgICAgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCwgdHJhaXRzJmd0OyZhbXA7Jm5ic3A7PGJyPgogICAgIG9wZXJhdG9yJmx0OyZsdDsoYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCwgdHJhaXRzJmd0OyZhbXA7IG8sIGNvbnN0IGNvbXBsZXgmbHQ7VCZndDsmYW1wOyB4KSZuYnNwOzxicj4KICAgICB7Jm5ic3A7PGJyPgogICAgICAgICAgICAgYmFzaWNfb3N0cmluZ3N0cmVhbSZsdDtjaGFyVCwgdHJhaXRzJmd0OyBzOyZuYnNwOzxicj4KICAgICAgICAgICAgIHMuZmxhZ3Moby5mbGFncygpKTsmbmJzcDs8YnI+CiAgICAgICAgICAgICBzLmltYnVlKG8uZ2V0bG9jKCkpOyZuYnNwOzxicj4KICAgICAgICAgICAgIHMucHJlY2lzaW9uKG8ucHJlY2lzaW9uKCkpOyZuYnNwOzxicj4KICAgICAgICAgICAgIHMgJmx0OyZsdDsgJygnICZsdDsmbHQ7IHgucmVhbCgpICZsdDsmbHQ7ICIsIiAmbHQ7Jmx0OyB4LmltYWcoKSAmbHQ7Jmx0OyAnKSc7Jm5ic3A7PGJyPgogICAgICAgICAgICAgcmV0dXJuIG8gJmx0OyZsdDsgcy5zdHIoKTsmbmJzcDs8YnI+CiAgICAgfTwvcD4KCjwvYmxvY2txdW90ZT4KCjxwPklzIGl0IGludGVuZGVkIHRoYXQgdGhlIGluc2VydGVyIGZvciBjb21wbGV4IG51bWJlcnMgaWdub3JlcyB0aGUKZmllbGQgd2lkdGggYW5kIGRvZXMgbm90IGRvIGFueSBwYWRkaW5nPyBJZiwgd2l0aCB0aGUgc3VnZ2VzdGVkCmltcGxlbWVudGF0aW9uIGFib3ZlLCB0aGUgZmllbGQgd2lkdGggd2VyZSBzZXQgaW4gdGhlIHN0cmVhbSB0aGVuIHRoZQpvcGVuaW5nIHBhcmVudGhlc2VzIHdvdWxkIGJlIGFkanVzdGVkLCBidXQgdGhlIHJlc3Qgbm90LCBiZWNhdXNlIHRoZQpmaWVsZCB3aWR0aCBpcyByZXNldCB0byB6ZXJvIGFmdGVyIGVhY2ggaW5zZXJ0aW9uLjwvcD4KCjxwPkkgdGhpbmsgdGhhdCBib3RoIG9wZXJhdGlvbnMgc2hvdWxkIHVzZSBzZW50cmllcywgZm9yIHNha2Ugb2YKY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgaW5zZXJ0ZXJzIGFuZCBleHRyYWN0b3JzIGluIHRoZQpsaWJyYXJ5LiBSZWdhcmRpbmcgdGhlIGlzc3VlIG9mIHBhZGRpbmcgaW4gdGhlIGluc2VydGVyLCBJIGRvbid0IGtub3cKd2hhdCB0aGUgaW50ZW50IHdhcy4mbmJzcDs8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZnRlciAyNi4zLjYgW2NvbXBsZXgub3BzXSBwYXJhZ3JhcGggMTQgKG9wZXJhdG9yJmd0OyZndDspLCBhZGQgYQpOb3RlcyBjbGF1c2U6PC9wPgoKPGJsb2NrcXVvdGU+Cgo8cD5Ob3RlczogVGhpcyBleHRyYWN0aW9uIGlzIHBlcmZvcm1lZCBhcyBhIHNlcmllcyBvZiBzaW1wbGVyCmV4dHJhY3Rpb25zLiBUaGVyZWZvcmUsIHRoZSBza2lwcGluZyBvZiB3aGl0ZXNwYWNlIGlzIHNwZWNpZmllZCB0byBiZSB0aGUKc2FtZSBmb3IgZWFjaCBvZiB0aGUgc2ltcGxlciBleHRyYWN0aW9ucy48L3A+Cgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkZvciBleHRyYWN0b3JzLCB0aGUgbm90ZSBpcyBhZGRlZCB0byBtYWtlIGl0IGNsZWFyIHRoYXQgc2tpcHBpbmcgd2hpdGVzcGFjZQpmb2xsb3dzIGFuICJhbGwtb3Itbm9uZSIgcnVsZS48L3A+Cgo8cD5Gb3IgaW5zZXJ0ZXJzLCB0aGUgTFdHIGJlbGlldmVzIHRoZXJlIGlzIG5vIGRlZmVjdDsgdGhlIHN0YW5kYXJkIGlzIGNvcnJlY3QKYXMgd3JpdHRlbi48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNDciPjwvYT4xNDcuIExpYnJhcnkgSW50cm8gcmVmZXJzIHRvIGdsb2JhbCBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgZ2xvYmFsPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE3LjQuNC4zIFtnbG9iYWwuZnVuY3Rpb25zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBMb2lzIEdvbGR0aHdhaXRlIDxiPkRhdGU6PC9iPiAxOTk5LTA2LTA0PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNnbG9iYWwuZnVuY3Rpb25zIj5pc3N1ZXM8L2E+IGluIFtnbG9iYWwuZnVuY3Rpb25zXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIGxpYnJhcnkgaGFkIG1hbnkgZ2xvYmFsIGZ1bmN0aW9ucyB1bnRpbCAxNy40LjEuMSBbbGliLmNvbnRlbnRzXQpwYXJhZ3JhcGggMiB3YXMgYWRkZWQ6IDwvcD4KCjxibG9ja3F1b3RlPgoKPHA+QWxsIGxpYnJhcnkgZW50aXRpZXMgZXhjZXB0IG1hY3Jvcywgb3BlcmF0b3IgbmV3IGFuZCBvcGVyYXRvcgpkZWxldGUgYXJlIGRlZmluZWQgd2l0aGluIHRoZSBuYW1lc3BhY2Ugc3RkIG9yIG5hbWVzcGFjZXMgbmVzdGVkCndpdGhpbiBuYW1lc3BhY2Ugc3RkLiA8L3A+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD5JdCBhcHBlYXJzICJnbG9iYWwgZnVuY3Rpb24iIHdhcyBuZXZlciB1cGRhdGVkIGluIHRoZSBmb2xsb3dpbmc6IDwvcD4KCjxibG9ja3F1b3RlPgoKPHA+MTcuNC40LjMgLSBHbG9iYWwgZnVuY3Rpb25zIFtsaWIuZ2xvYmFsLmZ1bmN0aW9uc108YnI+Cjxicj4KLTEtIEl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgYW55IGdsb2JhbCBmdW5jdGlvbnMgaW4gdGhlIEMrKyBTdGFuZGFyZApMaWJyYXJ5IGFyZSBkZWZpbmVkIGFzIGlubGluZSAoZGNsLmZjdC5zcGVjKS48YnI+Cjxicj4KLTItIEEgY2FsbCB0byBhIGdsb2JhbCBmdW5jdGlvbiBzaWduYXR1cmUgZGVzY3JpYmVkIGluIENsYXVzZXMKbGliLmxhbmd1YWdlLnN1cHBvcnQgdGhyb3VnaCBsaWIuaW5wdXQub3V0cHV0IGJlaGF2ZXMgdGhlIHNhbWUgYXMgaWYKdGhlIGltcGxlbWVudGF0aW9uIGRlY2xhcmVzIG5vIGFkZGl0aW9uYWwgZ2xvYmFsIGZ1bmN0aW9uCnNpZ25hdHVyZXMuKjxicj4KPGJyPgogICAgW0Zvb3Rub3RlOiBBIHZhbGlkIEMrKyBwcm9ncmFtIGFsd2F5cyBjYWxscyB0aGUgZXhwZWN0ZWQgbGlicmFyeQogICAgZ2xvYmFsIGZ1bmN0aW9uLiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgYWxzbyBkZWZpbmUgYWRkaXRpb25hbAogICAgZ2xvYmFsIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG90aGVyd2lzZSBub3QgYmUgY2FsbGVkIGJ5IGEgdmFsaWQgQysrCiAgICBwcm9ncmFtLiAtLS0gZW5kIGZvb3Rub3RlXTxicj4KPGJyPgotMy0gQSBnbG9iYWwgZnVuY3Rpb24gY2Fubm90IGJlIGRlY2xhcmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBhcwp0YWtpbmcgYWRkaXRpb25hbCBkZWZhdWx0IGFyZ3VtZW50cy4mbmJzcDs8YnI+Cjxicj4KMTcuNC40LjQgLSBNZW1iZXIgZnVuY3Rpb25zIFtsaWIubWVtYmVyLmZ1bmN0aW9uc108YnI+Cjxicj4KLTItIEFuIGltcGxlbWVudGF0aW9uIGNhbiBkZWNsYXJlIGFkZGl0aW9uYWwgbm9uLXZpcnR1YWwgbWVtYmVyCmZ1bmN0aW9uIHNpZ25hdHVyZXMgd2l0aGluIGEgY2xhc3M6IDwvcD4KCiAgPGJsb2NrcXVvdGU+Cgo8cD4tLSBieSBhZGRpbmcgYXJndW1lbnRzIHdpdGggZGVmYXVsdCB2YWx1ZXMgdG8gYSBtZW1iZXIgZnVuY3Rpb24Kc2lnbmF0dXJlOyBUaGUgc2FtZSBsYXRpdHVkZSBkb2VzIG5vdCBleHRlbmQgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mCnZpcnR1YWwgb3IgZ2xvYmFsIGZ1bmN0aW9ucywgaG93ZXZlci4gPC9wPgoKICA8L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPiAgICAgQ2hhbmdlICJnbG9iYWwiIHRvICJnbG9iYWwgb3Igbm9uLW1lbWJlciIgaW46PC9wPgo8YmxvY2txdW90ZT4KICA8cD4xNy40LjQuMyBbbGliLmdsb2JhbC5mdW5jdGlvbnNdIHNlY3Rpb24gdGl0bGUsPGJyPgogIDE3LjQuNC4zIFtsaWIuZ2xvYmFsLmZ1bmN0aW9uc10gcGFyYSAxLDxicj4KICAxNy40LjQuMyBbbGliLmdsb2JhbC5mdW5jdGlvbnNdIHBhcmEgMiBpbiAyIHBsYWNlcyBwbHVzIDIgCiAgICAgICAgICAgcGxhY2VzIGluIHRoZSBmb290bm90ZSw8YnI+CiAgMTcuNC40LjMgW2xpYi5nbG9iYWwuZnVuY3Rpb25zXSBwYXJhIDMsPGJyPgogIDE3LjQuNC40IFtsaWIubWVtYmVyLmZ1bmN0aW9uc10gcGFyYSAyPC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpCZWNhdXNlIG9wZXJhdG9yIG5ldyBhbmQgZGVsZXRlIGFyZSBnbG9iYWwsIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uCndhcyBjaGFuZ2VkIGZyb20gIm5vbi1tZW1iZXIiIHRvICJnbG9iYWwgb3Igbm9uLW1lbWJlci4KPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTQ4Ij48L2E+MTQ4LiBGdW5jdGlvbnMgaW4gdGhlIGV4YW1wbGUgZmFjZXQgQm9vbE5hbWVzIHNob3VsZCBiZSBjb25zdDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjggW2ZhY2V0cy5leGFtcGxlc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSmVyZW15IFNpZWsgPGI+RGF0ZTo8L2I+IDE5OTktMDYtMDM8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2ZhY2V0cy5leGFtcGxlcyI+aXNzdWVzPC9hPiBpbiBbZmFjZXRzLmV4YW1wbGVzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SW4gMjIuMi44IFtmYWNldHMuZXhhbXBsZXNdIHBhcmFncmFwaCAxMywgdGhlIGRvX3RydWVuYW1lKCkgYW5kCmRvX2ZhbHNlbmFtZSgpIGZ1bmN0aW9ucyBpbiB0aGUgZXhhbXBsZSBmYWNldCBCb29sTmFtZXMgc2hvdWxkIGJlCmNvbnN0LiBUaGUgZnVuY3Rpb25zIHRoZXkgYXJlIG92ZXJyaWRpbmcgaW4KbnVtcHVuY3RfYnluYW1lJmx0O2NoYXImZ3Q7IGFyZSBjb25zdC4gPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMi44IFtmYWNldHMuZXhhbXBsZXNdIHBhcmFncmFwaCAxMywgaW5zZXJ0ICJjb25zdCIgaW4KdHdvIHBsYWNlczo8L3A+CjxibG9ja3F1b3RlPgogIDxwPjx0dD5zdHJpbmcgZG9fdHJ1ZW5hbWUoKSBjb25zdCB7IHJldHVybiAiT3VpIE91aSEiOyB9PGJyPgogIHN0cmluZyBkb19mYWxzZW5hbWUoKSBjb25zdCB7IHJldHVybiAiTWFpcyBOb24hIjsgfTwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNTAiPjwvYT4xNTAuIEZpbmRfZmlyc3Rfb2Ygc2F5cyBpbnRlZ2VyIGluc3RlYWQgb2YgaXRlcmF0b3IgPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI1LjEuNyBbYWxnLmZpbmQuZmlyc3Qub2ZdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgTWNDbHVyZSA8Yj5EYXRlOjwvYj4gMTk5OS0wNi0zMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxnLmZpbmQuZmlyc3Qub2YiPmlzc3VlczwvYT4gaW4gW2FsZy5maW5kLmZpcnN0Lm9mXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNS4xLjcgW2FsZy5maW5kLmZpcnN0Lm9mXSBwYXJhZ3JhcGggMiBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5SZXR1cm5zOiBUaGUgZmlyc3QgaXRlcmF0b3IgaSBpbiB0aGUgcmFuZ2UgW2ZpcnN0MSwgbGFzdDEpIHN1Y2gKdGhhdCBmb3Igc29tZSBpbnRlZ2VyIGogaW4gdGhlIHJhbmdlIFtmaXJzdDIsIGxhc3QyKSAuLi48L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5SZXR1cm5zOiBUaGUgZmlyc3QgaXRlcmF0b3IgaSBpbiB0aGUgcmFuZ2UgW2ZpcnN0MSwgbGFzdDEpIHN1Y2gKdGhhdCBmb3Igc29tZSBpdGVyYXRvciBqIGluIHRoZSByYW5nZSBbZmlyc3QyLCBsYXN0MikgLi4uPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNTEiPjwvYT4xNTEuIENhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4xLjMgW3NlcXVlbmNlLnJlcW10c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRWQgQnJleSA8Yj5EYXRlOjwvYj4gMTk5OS0wNi0yMTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjc2VxdWVuY2UucmVxbXRzIj5pc3N1ZXM8L2E+IGluIFtzZXF1ZW5jZS5yZXFtdHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5Gb3IgYm90aCBzZXF1ZW5jZXMgYW5kIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMsIGEuY2xlYXIoKSBoYXMgdGhlCnNlbWFudGljcyBvZiBlcmFzZShhLmJlZ2luKCksYS5lbmQoKSksIHdoaWNoIGlzIHVuZGVmaW5lZCBmb3IgYW4gZW1wdHkKY29udGFpbmVyIHNpbmNlIGVyYXNlKHExLHEyKSByZXF1aXJlcyB0aGF0IHExIGJlIGRlcmVmZXJlbmNlYWJsZQooMjMuMS4xLDMgYW5kIDIzLjEuMiw3KS4gIFdoZW4gdGhlIGNvbnRhaW5lciBpcyBlbXB0eSwgYS5iZWdpbigpIGlzCm5vdCBkZXJlZmVyZW5jZWFibGUuPGJyPgo8YnI+ClRoZSByZXF1aXJlbWVudCB0aGF0IHExIGJlIHVuY29uZGl0aW9uYWxseSBkZXJlZmVyZW5jZWFibGUgY2F1c2VzIG1hbnkKb3BlcmF0aW9ucyB0byBiZSBpbnR1aXRpdmVseSB1bmRlZmluZWQsIG9mIHdoaWNoIGNsZWFyaW5nIGFuIGVtcHR5CmNvbnRhaW5lciBpcyBwcm9iYWJseSB0aGUgbW9zdCBkaXJlLjxicj4KPGJyPgpTaW5jZSBxMSBhbmQgcTIgYXJlIG9ubHkgcmVmZXJlbmNlZCBpbiB0aGUgcmFuZ2UgW3ExLCBxMiksIGFuZCBbcTEsCnEyKSBpcyByZXF1aXJlZCB0byBiZSBhIHZhbGlkIHJhbmdlLCBzdGF0aW5nIHRoYXQgcTEgYW5kIHEyIG11c3QgYmUKaXRlcmF0b3JzIG9yIGNlcnRhaW4ga2luZHMgb2YgaXRlcmF0b3JzIGlzIHVubmVjZXNzYXJ5Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMy4xLjEsIHBhcmFncmFwaCAzLCBjaGFuZ2U6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5wIGFuZCBxMiBkZW5vdGUgdmFsaWQgaXRlcmF0b3JzIHRvIGEsIHEgYW5kIHExIGRlbm90ZSB2YWxpZCBkZXJlZmVyZW5jZWFibGUgaXRlcmF0b3JzIHRvIGEsIFtxMSwgcTIpIGRlbm90ZXMgYSB2YWxpZCByYW5nZTwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPnAgZGVub3RlcyBhIHZhbGlkIGl0ZXJhdG9yIHRvIGEsIHEgZGVub3RlcyBhIHZhbGlkIGRlcmVmZXJlbmNlYWJsZSBpdGVyYXRvciB0byBhLCBbcTEsIHEyKSBkZW5vdGVzIGEgdmFsaWQgcmFuZ2UKICBpbiBhPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPkluIDIzLjEuMiwgcGFyYWdyYXBoIDcsIGNoYW5nZTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPnAgYW5kIHEyIGFyZSB2YWxpZCBpdGVyYXRvcnMgdG8gYSwgcSBhbmQgcTEgYXJlIHZhbGlkIGRlcmVmZXJlbmNlYWJsZQogIGl0ZXJhdG9ycyB0byBhLCBbcTEsIHEyKSBpcyBhIHZhbGlkIHJhbmdlPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvPC9wPgo8YmxvY2txdW90ZT4KICA8cD5wIGlzIGEgdmFsaWQgaXRlcmF0b3IgdG8gYSwgcSBpcyBhIHZhbGlkIGRlcmVmZXJlbmNlYWJsZSBpdGVyYXRvciB0byBhLCBbcTEsIHEyKSBpcyBhIHZhbGlkIHJhbmdlCiAgaW50byBhPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNTIiPjwvYT4xNTIuIFR5cG8gaW4gPHR0PnNjYW5faXMoKTwvdHQ+IHNlbWFudGljczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjEuMS4yIFtsb2NhbGUuY3R5cGUudmlydHVhbHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERpZXRtYXIgS/xobCA8Yj5EYXRlOjwvYj4gMTk5OS0wNy0yMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlLmN0eXBlLnZpcnR1YWxzIj5pc3N1ZXM8L2E+IGluIFtsb2NhbGUuY3R5cGUudmlydHVhbHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgc2VtYW50aWNzIG9mIDx0dD5zY2FuX2lzKCk8L3R0PiAocGFyYWdyYXBocyA0IGFuZCA2KSBpcyBub3QgZXhhY3RseSBkZXNjcmliZWQKYmVjYXVzZSB0aGVyZSBpcyBubyBmdW5jdGlvbiA8dHQ+aXMoKTwvdHQ+IHdoaWNoIG9ubHkgdGFrZXMgYSBjaGFyYWN0ZXIgYXMKYXJndW1lbnQuIEFsc28sIGluIHRoZSBlZmZlY3RzIGNsYXVzZSAocGFyYWdyYXBoIDMpLCB0aGUgc2VtYW50aWMgaXMgYWxzbyBrZXB0CnZhZ3VlLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuMS4xLjIgW2xvY2FsZS5jdHlwZS52aXJ0dWFsc10gcGFyYWdyYXBocyA0IGFuZCA2LCBjaGFuZ2UgdGhlIHJldHVybnMKY2xhdXNlIGZyb206PC9wPgo8YmxvY2txdW90ZT4KICA8cD4iLi4uIHN1Y2ggdGhhdCA8dHQ+aXMoKnApPC90dD4Kd291bGQuLi4iPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOiZuYnNwOyAiLi4uIHN1Y2ggdGhhdCA8dHQ+aXMobSwgKnApPC90dD4KIHdvdWxkLi4uLiI8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTUzIj48L2E+MTUzLiBUeXBvIGluIDx0dD5uYXJyb3coKTwvdHQ+IHNlbWFudGljczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjEuMy4yIFtmYWNldC5jdHlwZS5jaGFyLm1lbWJlcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERpZXRtYXIgS/xobCA8Yj5EYXRlOjwvYj4gMTk5OS0wNy0yMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjZmFjZXQuY3R5cGUuY2hhci5tZW1iZXJzIj5pc3N1ZXM8L2E+IGluIFtmYWNldC5jdHlwZS5jaGFyLm1lbWJlcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RHVwbGljYXRlIG9mOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjA3Ij4yMDc8L2E+PC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYXJyYXkgdmVyc2lvbiBvZiA8dHQ+bmFycm93KCk8L3R0PiAoaW4KcGFyYWdyYXBoIDExKSBpcyBmbGF3ZWQ6IFRoZXJlIGlzIG5vIG1lbWJlciA8dHQ+ZG9fbmFycm93KCk8L3R0PiB3aGljaAp0YWtlcyBvbmx5IHRocmVlIGFyZ3VtZW50cyBiZWNhdXNlIGluIGFkZGl0aW9uIHRvIHRoZSByYW5nZSBhIGRlZmF1bHQKY2hhcmFjdGVyIGlzIG5lZWRlZC48L3A+Cgo8cD5BZGRpdGlvbmFsbHksIGZvciBib3RoIDx0dD53aWRlbjwvdHQ+IGFuZCA8dHQ+bmFycm93PC90dD4gd2UgaGF2ZQp0d28gc2lnbmF0dXJlcyBmb2xsb3dlZCBieSBhIDxiPlJldHVybnM8L2I+IGNsYXVzZSB0aGF0IG9ubHkgYWRkcmVzc2VzCm9uZSBvZiB0aGVtLjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIHJldHVybnMgY2xhdXNlIGluIDIyLjIuMS4zLjIgW2ZhY2V0LmN0eXBlLmNoYXIubWVtYmVyc10KcGFyYWdyYXBoIDEwIGZyb206PC9wPgo8cD4mbmJzcDsmbmJzcDsmbmJzcDsgUmV0dXJuczogZG9fd2lkZW4obG93LCBoaWdoLCB0bykuPC9wPgoKPHA+dG86PC9wPgo8cD4mbmJzcDsmbmJzcDsmbmJzcDsgUmV0dXJuczogZG9fd2lkZW4oYykgb3IgZG9fd2lkZW4obG93LCBoaWdoLCB0byksIApyZXNwZWN0aXZlbHkuPC9wPgoKPHA+Q2hhbmdlIDIyLjIuMS4zLjIgW2ZhY2V0LmN0eXBlLmNoYXIubWVtYmVyc10gcGFyYWdyYXBoIDEwIGFuZCAxMSBmcm9tOjwvcD4KPHByZT4gICAgICAgIGNoYXIgICAgICAgIG5hcnJvdyhjaGFyIGMsIGNoYXIgLypkZmF1bHQqLykgY29uc3Q7CiAgICAgICAgY29uc3QgY2hhciogbmFycm93KGNvbnN0IGNoYXIqIGxvdywgY29uc3QgY2hhciogaGlnaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAvKmRmYXVsdCovLCBjaGFyKiB0bykgY29uc3Q7PC9wcmU+CjxwcmU+ICAgICAgICBSZXR1cm5zOiBkb19uYXJyb3cobG93LCBoaWdoLCB0bykuPC9wcmU+CjxwPnRvOjwvcD4KPHByZT4gICAgICAgIGNoYXIgICAgICAgIG5hcnJvdyhjaGFyIGMsIGNoYXIgZGZhdWx0KSBjb25zdDsKICAgICAgICBjb25zdCBjaGFyKiBuYXJyb3coY29uc3QgY2hhciogbG93LCBjb25zdCBjaGFyKiBoaWdoLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGRmYXVsdCwgY2hhciogdG8pIGNvbnN0OzwvcHJlPgo8cHJlPiAgICAgICAgUmV0dXJuczogZG9fbmFycm93KGMsIGRmYXVsdCkgb3IKICAgICAgICAgICAgICAgICBkb19uYXJyb3cobG93LCBoaWdoLCBkZmF1bHQsIHRvKSwgcmVzcGVjdGl2ZWx5LjwvcHJlPgoKPHA+PGk+W0tvbmE6IDEpIHRoZSBwcm9ibGVtIG9jY3VycyBpbiBhZGRpdGlvbmFsIHBsYWNlcywgMikgYSB1c2VyCmRlZmluZWQgdmVyc2lvbiBjb3VsZCBiZSBkaWZmZXJlbnQuXTwvaT48L3A+CgoKPHA+PGk+W1Bvc3QtVG9reW86IERpZXRtYXIgcHJvdmlkZWQgdGhlIGFib3ZlIHdvcmRpbmcgYXQgdGhlIHJlcXVlc3Qgb2YKdGhlIExXRy4gSGUgY291bGQgZmluZCBubyBvdGhlciBwbGFjZXMgdGhlIHByb2JsZW0gb2NjdXJyZWQuIEhlCmFza3MgZm9yIGNsYXJpZmljYXRpb24gb2YgdGhlIEtvbmEgImEgdXNlciBkZWZpbmVkCnZlcnNpb24uLi4iIGNvbW1lbnQgYWJvdmUuICBQZXJoYXBzIGl0IHdhcyBhIGNpcmN1aXRvdXMgd2F5IG9mCnNheWluZyAiZGZhdWx0IiBuZWVkZWQgdG8gYmUgdW5jb21tZW50ZWQ/XTwvaT48L3A+CgoKPHA+PGk+W1Bvc3QtVG9yb250bzogdGhlIGlzc3VlcyBsaXN0IG1haW50YWluZXIgaGFzIG1lcmdlZCBpbiB0aGUKcHJvcG9zZWQgcmVzb2x1dGlvbiBmcm9tIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzIwNyI+MjA3PC9hPiwgd2hpY2ggYWRkcmVzc2VzIHRoZQpzYW1lIHBhcmFncmFwaHMuXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE1NCI+PC9hPjE1NC4gTWlzc2luZyA8dHQ+ZG91YmxlPC90dD4gc3BlY2lmaWVyIGZvciA8dHQ+ZG9fZ2V0KCk8L3R0PjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjIuMS4yIFtmYWNldC5udW0uZ2V0LnZpcnR1YWxzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEaWV0bWFyIEv8aGwgPGI+RGF0ZTo8L2I+IDE5OTktMDctMjA8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNmYWNldC5udW0uZ2V0LnZpcnR1YWxzIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbZmFjZXQubnVtLmdldC52aXJ0dWFsc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmYWNldC5udW0uZ2V0LnZpcnR1YWxzIj5pc3N1ZXM8L2E+IGluIFtmYWNldC5udW0uZ2V0LnZpcnR1YWxzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIHRhYmxlIGluIHBhcmFncmFwaCA3IGZvciB0aGUgbGVuZ3RoIG1vZGlmaWVyIGRvZXMgbm90IGxpc3QgdGhlIGxlbmd0aAptb2RpZmllciA8dHQ+bDwvdHQ+IHRvIGJlIGFwcGxpZWQgaWYgdGhlIHR5cGUgaXMgPHR0PmRvdWJsZTwvdHQ+LiBUaHVzLCB0aGUKc3RhbmRhcmQgYXNrcyB0aGUgaW1wbGVtZW50YXRpb24gdG8gZG8gdW5kZWZpbmVkIHRoaW5ncyB3aGVuIHVzaW5nIDx0dD5zY2FuZigpPC90dD4KKHRoZSBtaXNzaW5nIGxlbmd0aCBtb2RpZmllciBmb3IgPHR0PnNjYW5mKCk8L3R0PiB3aGVuIHNjYW5uaW5nIDx0dD5kb3VibGU8L3R0PnMKaXMgYWN0dWFsbHkgYSBwcm9ibGVtIEkgZm91bmQgcXVpdGUgb2Z0ZW4gaW4gcHJvZHVjdGlvbiBjb2RlLCB0b28pLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuMi4xLjIgW2ZhY2V0Lm51bS5nZXQudmlydHVhbHNdLCBwYXJhZ3JhcGggNywgYWRkIGEgcm93IGluIHRoZSBMZW5ndGgKTW9kaWZpZXIgdGFibGUgdG8gc2F5IHRoYXQgZm9yIDx0dD5kb3VibGU8L3R0PiBhIGxlbmd0aCBtb2RpZmllcgo8dHQ+bDwvdHQ+IGlzIHRvIGJlIHVzZWQuPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgc3RhbmRhcmQgbWFrZXMgYW4gZW1iYXJyYXNzaW5nIGJlZ2lubmVyJ3MgbWlzdGFrZS48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNTUiPjwvYT4xNTUuIFR5cG8gaW4gbmFtaW5nIHRoZSBjbGFzcyBkZWZpbmluZyB0aGUgY2xhc3MgPHR0PkluaXQ8L3R0PjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy4zIFtpb3N0cmVhbS5vYmplY3RzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEaWV0bWFyIEv8aGwgPGI+RGF0ZTo8L2I+IDE5OTktMDctMjA8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lvc3RyZWFtLm9iamVjdHMiPmlzc3VlczwvYT4gaW4gW2lvc3RyZWFtLm9iamVjdHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGVyZSBhcmUgY29uZmxpY3Rpbmcgc3RhdGVtZW50cyBhYm91dCB3aGVyZSB0aGUgY2xhc3MKPHR0PkluaXQ8L3R0PiBpcyBkZWZpbmVkLiBBY2NvcmRpbmcgdG8gMjcuMyBbaW9zdHJlYW0ub2JqZWN0c10gcGFyYWdyYXBoIDIKaXQgaXMgZGVmaW5lZCBhcyA8dHQ+YmFzaWNfaW9zOjpJbml0PC90dD4sIGFjY29yZGluZyB0byAyNy40LjIgW2lvcy5iYXNlXSBpdCBpcyBkZWZpbmVkIGFzIDx0dD5pb3NfYmFzZTo6SW5pdDwvdHQ+LjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNy4zIFtpb3N0cmVhbS5vYmplY3RzXSBwYXJhZ3JhcGggMiBmcm9tCiI8dHQ+YmFzaWNfaW9zOjpJbml0IjwvdHQ+IHRvCiI8dHQ+aW9zX2Jhc2U6OkluaXQiPC90dD4uPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5BbHRob3VnaCBub3Qgc3RyaWN0bHkgd3JvbmcsIHRoZSBzdGFuZGFyZCB3YXMgbWlzbGVhZGluZyBlbm91Z2ggdG8gd2FycmFudAp0aGUgY2hhbmdlLjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE1NiI+PC9hPjE1Ni4gVHlwbyBpbiA8dHQ+aW1idWUoKTwvdHQ+IGRlc2NyaXB0aW9uPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjQuMi4zIFtpb3MuYmFzZS5sb2NhbGVzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEaWV0bWFyIEv8aGwgPGI+RGF0ZTo8L2I+IDE5OTktMDctMjA8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lvcy5iYXNlLmxvY2FsZXMiPmlzc3VlczwvYT4gaW4gW2lvcy5iYXNlLmxvY2FsZXNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGVyZSBpcyBhIHNtYWxsIGRpc2NyZXBhbmN5IGJldHdlZW4gdGhlIGRlY2xhcmF0aW9ucyBvZgo8dHQ+aW1idWUoKTwvdHQ+OiBpbiAyNy40LjIgW2lvcy5iYXNlXSB0aGUgYXJndW1lbnQgaXMgcGFzc2VkIGFzCjx0dD5sb2NhbGUgY29uc3QmYW1wOzwvdHQ+IChjb3JyZWN0KSwgaW4gMjcuNC4yLjMgW2lvcy5iYXNlLmxvY2FsZXNdIGl0CmlzIHBhc3NlZCBhcyA8dHQ+bG9jYWxlIGNvbnN0PC90dD4gKHdyb25nKS48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy40LjIuMyBbaW9zLmJhc2UubG9jYWxlc10gY2hhbmdlIHRoZSA8dHQ+aW1idWU8L3R0PiBhcmd1bWVudApmcm9tICI8dHQ+bG9jYWxlIGNvbnN0IiB0byAibG9jYWxlCmNvbnN0JmFtcDsiLjwvdHQ+PC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTU4Ij48L2E+MTU4LiBVbmRlcnNwZWNpZmllZCBzZW1hbnRpY3MgZm9yIDx0dD5zZXRidWYoKTwvdHQ+PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjUuMi40LjIgW3N0cmVhbWJ1Zi52aXJ0LmJ1ZmZlcl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGlldG1hciBL/GhsIDxiPkRhdGU6PC9iPiAxOTk5LTA3LTIwPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJlYW1idWYudmlydC5idWZmZXIiPmlzc3VlczwvYT4gaW4gW3N0cmVhbWJ1Zi52aXJ0LmJ1ZmZlcl0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIDx0dD5zZXRidWYoKTwvdHQ+IGlzIGRlc2NyaWJlZCBvbmx5IGZvciB0aGUKc2l0dWF0aW9uIHRoYXQgPHR0PmdwdHIoKSAhPSAwICZhbXA7JmFtcDsgZ3B0cigpICE9IGVncHRyKCk8L3R0PjoKbmFtZWx5IHRvIGRvIG5vdGhpbmcuICBXaGF0IGhhcyB0byBiZSBkb25lIGluIG90aGVyIHNpdHVhdGlvbnMmbmJzcDsKaXMgbm90IGRlc2NyaWJlZCBhbHRob3VnaCB0aGVyZSBpcyBhY3R1YWxseSBvbmx5IG9uZSByZWFzb25hYmxlCmFwcHJvYWNoLCBuYW1lbHkgdG8gZG8gbm90aGluZywgdG9vLjwvcD4gCgo8cD5TaW5jZSBjaGFuZ2luZyB0aGUgYnVmZmVyIHdvdWxkIGFsbW9zdCBjZXJ0YWlubHkgbWVzcyB1cCBtb3N0CmJ1ZmZlciBtYW5hZ2VtZW50IG9mIGRlcml2ZWQgY2xhc3NlcyB1bmxlc3MgdGhlc2UgY2xhc3NlcyBkbyBpdAp0aGVtc2VsdmVzLCB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiA8dHQ+c2V0YnVmKCk8L3R0PiBzaG91bGQgYWx3YXlzIGJlCnRvIGRvIG5vdGhpbmcuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI3LjUuMi40LjIgW3N0cmVhbWJ1Zi52aXJ0LmJ1ZmZlcl0sIHBhcmFncmFwaCAzLCBEZWZhdWx0IGJlaGF2aW9yLAp0bzogIkRlZmF1bHQgYmVoYXZpb3I6IERvZXMgbm90aGluZy4gUmV0dXJucyB0aGlzLiI8L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNTkiPjwvYT4xNTkuIFN0cmFuZ2UgdXNlIG9mIDx0dD51bmRlcmZsb3coKTwvdHQ+PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjUuMi40LjMgW3N0cmVhbWJ1Zi52aXJ0LmdldF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGlldG1hciBL/GhsIDxiPkRhdGU6PC9iPiAxOTk5LTA3LTIwPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVhbmluZyBvZiB0aGUgcmVzdWx0IG9mCjx0dD5zaG93bWFueWMoKTwvdHQ+IHNlZW1zIHRvIGJlIHJhdGhlciBzdHJhbmdlOiBJdCB1c2VzIGNhbGxzIHRvCjx0dD51bmRlcmZsb3coKTwvdHQ+LiBVc2luZyA8dHQ+dW5kZXJmbG93KCk8L3R0PiBpcyBzdHJhbmdlIGJlY2F1c2UKdGhpcyBmdW5jdGlvbiBvbmx5IHJlYWRzIHRoZSBjdXJyZW50IGNoYXJhY3RlciBidXQgZG9lcyBub3QgZXh0cmFjdAppdCwgPHR0PnVmbG93KCk8L3R0PiB3b3VsZCBleHRyYWN0IHRoZSBjdXJyZW50IGNoYXJhY3Rlci4gVGhpcyBzaG91bGQKYmUgZml4ZWQgdG8gdXNlIDx0dD5zYnVtcGMoKTwvdHQ+IGluc3RlYWQuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI3LjUuMi40LjMgW3N0cmVhbWJ1Zi52aXJ0LmdldF0gcGFyYWdyYXBoIDEsCjx0dD5zaG93bWFueWMoKTwvdHQ+cmV0dXJucyBjbGF1c2UsIGJ5IHJlcGxhY2luZyB0aGUgd29yZAoic3VwcGxpZWQiIHdpdGggdGhlIHdvcmRzICJleHRyYWN0ZWQgZnJvbSB0aGUKc3RyZWFtIi48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNjAiPjwvYT4xNjAuIFR5cG86IFVzZSBvZiBub24tZXhpc3RpbmcgZnVuY3Rpb24gPHR0PmV4Y2VwdGlvbigpPC90dD48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNi4xLjEgW2lzdHJlYW1dIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERpZXRtYXIgS/xobCA8Yj5EYXRlOjwvYj4gMTk5OS0wNy0yMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaXN0cmVhbSI+aXNzdWVzPC9hPiBpbiBbaXN0cmVhbV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBwYXJhZ3JhcGggNCByZWZlcnMgdG8gdGhlIGZ1bmN0aW9uIDx0dD5leGNlcHRpb24oKTwvdHQ+IHdoaWNoCmlzIG5vdCBkZWZpbmVkLiBQcm9iYWJseSwgdGhlIHJlZmVycmVkIGZ1bmN0aW9uIGlzCjx0dD5iYXNpY19pb3MmbHQ7Jmd0Ozo6ZXhjZXB0aW9ucygpPC90dD4uPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjcuNi4xLjEgW2lzdHJlYW1dLCAyNy42LjEuMyBbaXN0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCAxLAoyNy42LjIuMSBbb3N0cmVhbV0sIHBhcmFncmFwaCAzLCBhbmQgMjcuNi4yLjYuMSBbb3N0cmVhbS5mb3JtYXR0ZWQucmVxbXRzXSwKcGFyYWdyYXBoIDEsIGNoYW5nZSAiPHR0PmV4Y2VwdGlvbigpIiB0bwoiZXhjZXB0aW9ucygpIjwvdHQ+LjwvcD4KCjxwPjxpPltOb3RlIHRvIEVkaXRvcjogImV4Y2VwdGlvbnMiIHdpdGggYW4gInMiCmlzIHRoZSBjb3JyZWN0IHNwZWxsaW5nLl08L2k+PC9wPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNjEiPjwvYT4xNjEuIFR5cG86IDx0dD5pc3RyZWFtX2l0ZXJhdG9yPC90dD4gdnMuIDx0dD5pc3RyZWFtYnVmX2l0ZXJhdG9yPC90dD48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNi4xLjIuMiBbaXN0cmVhbS5mb3JtYXR0ZWQuYXJpdGhtZXRpY10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGlldG1hciBL/GhsIDxiPkRhdGU6PC9iPiAxOTk5LTA3LTIwPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpc3RyZWFtLmZvcm1hdHRlZC5hcml0aG1ldGljIj5pc3N1ZXM8L2E+IGluIFtpc3RyZWFtLmZvcm1hdHRlZC5hcml0aG1ldGljXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIG5vdGUgaW4gdGhlIHNlY29uZCBwYXJhZ3JhcGggcHJldGVuZHMgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQKaXMgYW4gb2JqZWN0IG9mIHR5cGUgPHR0PmlzdHJlYW1faXRlcmF0b3I8L3R0Pi4gVGhpcyBpcyB3cm9uZzogSXQgaXMKYW4gb2JqZWN0IG9mIHR5cGUgPHR0PmlzdHJlYW1idWZfaXRlcmF0b3I8L3R0Pi48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjcuNi4xLjIuMiBbaXN0cmVhbS5mb3JtYXR0ZWQuYXJpdGhtZXRpY10gZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlRoZSBmaXJzdCBhcmd1bWVudCBwcm92aWRlcyBhbiBvYmplY3Qgb2YgdGhlIGlzdHJlYW1faXRlcmF0b3IgY2xhc3MuLi48L3A+CjwvYmxvY2txdW90ZT4KPHA+dG88L3A+CjxibG9ja3F1b3RlPgogIDxwPlRoZSBmaXJzdCBhcmd1bWVudCBwcm92aWRlcyBhbiBvYmplY3Qgb2YgdGhlIGlzdHJlYW1idWZfaXRlcmF0b3IgY2xhc3MuLi48L3A+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNjQiPjwvYT4xNjQuIGRvX3B1dCgpIGhhcyBhcHBhcmVudGx5IHVudXNlZCBmaWxsIGFyZ3VtZW50PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuNS4zLjIgW2xvY2FsZS50aW1lLnB1dC52aXJ0dWFsc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQW5nZWxpa2EgTGFuZ2VyIDxiPkRhdGU6PC9iPiAxOTk5LTA3LTIzPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkluIDIyLjIuNS4zLjIgW2xvY2FsZS50aW1lLnB1dC52aXJ0dWFsc10gdGhlIGRvX3B1dCgpIGZ1bmN0aW9uIGlzIHNwZWNpZmllZAphcyB0YWtpbmcgYSBmaWxsIGNoYXJhY3RlciBhcyBhbiBhcmd1bWVudCwgYnV0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUKZnVuY3Rpb24gZG9lcyBub3Qgc2F5IHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyB1c2VkIGF0IGFsbCBhbmQsIGlmIHNvLAppbiB3aGljaCB3YXkuIFRoZSBzYW1lIGhvbGRzIGZvciBhbnkgZm9ybWF0IGNvbnRyb2wgcGFyYW1ldGVycyB0aGF0CmFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGlvc19iYXNlJmFtcDsgYXJndW1lbnQsIHN1Y2ggYXMgdGhlCmFkanVzdG1lbnQgb3IgdGhlIGZpZWxkIHdpZHRoLiBJcyBzdHJmdGltZSgpIHN1cHBvc2VkIHRvIHVzZSB0aGUgZmlsbApjaGFyYWN0ZXIgaW4gYW55IHdheT8gSW4gYW55IGNhc2UsIHRoZSBzcGVjaWZpY2F0aW9uIG9mCnRpbWVfcHV0LmRvX3B1dCgpIGxvb2tzIGluY29uc2lzdGVudCB0byBtZS48YnI+IDxicj4gSXMgdGhlCnNpZ25hdHVyZSBvZiBkb19wdXQoKSB3cm9uZywgb3IgaXMgdGhlIGVmZmVjdHMgY2xhdXNlIGluY29tcGxldGU/PC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRoZSBmb2xsb3dpbmcgbm90ZSBhZnRlciAyMi4yLjUuMy4yIFtsb2NhbGUudGltZS5wdXQudmlydHVhbHNdCnBhcmFncmFwaCAyOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+ICBbTm90ZTogdGhlIDx0dD5maWxsPC90dD4gYXJndW1lbnQgbWF5IGJlIHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uLWRlZmluZWQgIGZvcm1hdHMsIG9yIGJ5IGRlcml2YXRpb25zLiAgQSBzcGFjZSBjaGFyYWN0ZXIgaXMgYSByZWFzb25hYmxlIGRlZmF1bHQKICBmb3IgdGhpcyBhcmd1bWVudC4gLS1lbmQgTm90ZV08L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBmZWx0IHRoYXQgd2hpbGUgdGhlIG5vcm1hdGl2ZSB0ZXh0IHdhcyBjb3JyZWN0LAp1c2VycyBuZWVkIHNvbWUgZ3VpZGFuY2Ugb24gd2hhdCB0byBwYXNzIGZvciB0aGUgPHR0PmZpbGw8L3R0Pgphcmd1bWVudCBzaW5jZSB0aGUgc3RhbmRhcmQgZG9lc24ndCBzYXkgaG93IGl0J3MgdXNlZC48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNjUiPjwvYT4xNjUuIDx0dD54c3B1dG4oKTwvdHQ+LCA8dHQ+cHVic3luYygpPC90dD4gbmV2ZXIgY2FsbGVkIGJ5IDx0dD5iYXNpY19vc3RyZWFtPC90dD4gbWVtYmVycz88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNi4yLjEgW29zdHJlYW1dIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERpZXRtYXIgS/xobCA8Yj5EYXRlOjwvYj4gMTk5OS0wNy0yMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjb3N0cmVhbSI+aXNzdWVzPC9hPiBpbiBbb3N0cmVhbV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlBhcmFncmFwaCAyIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgbm9uZSBvZiB0aGUgPHR0PmJhc2ljX29zdHJlYW08L3R0PgpmdW5jdGlvbnMgZmFsbGluZyBpbnRvIG9uZSBvZiB0aGUgZ3JvdXBzICJmb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9ucyIKYW5kICJ1bmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zIiBjYWxscyBhbnkgc3RyZWFtIGJ1ZmZlciBmdW5jdGlvbgp3aGljaCBtaWdodCBjYWxsIGEgdmlydHVhbCBmdW5jdGlvbiBvdGhlciB0aGFuIDx0dD5vdmVyZmxvdygpPC90dD4uIEJhc2ljYWxseQp0aGlzIGlzIGZpbmUgYnV0IHRoaXMgaW1wbGllcyB0aGF0IDx0dD5zcHV0bigpPC90dD4gKHRoaXMgZnVuY3Rpb24gd291bGQgY2FsbAp0aGUgdmlydHVhbCBmdW5jdGlvbiA8dHQ+eHNwdXRuKCk8L3R0PikgaXMgbmV2ZXIgY2FsbGVkIGJ5IGFueSBvZiB0aGUgc3RhbmRhcmQKb3V0cHV0IGZ1bmN0aW9ucy4gSXMgdGhpcyByZWFsbHkgaW50ZW5kZWQ/IEF0IG1pbmltdW0gaXQgd291bGQgYmUgY29udmVuaWVudCB0bwpjYWxsIDx0dD54c3B1dG4oKTwvdHQ+IGZvciBzdHJpbmdzLi4uIEFsc28sIHRoZSBzdGF0ZW1lbnQgdGhhdCA8dHQ+b3ZlcmZsb3coKTwvdHQ+CmlzIHRoZSBvbmx5IHZpcnR1YWwgbWVtYmVyIG9mIDx0dD5iYXNpY19zdHJlYW1idWY8L3R0PiBjYWxsZWQgaXMgaW4gY29uZmxpY3QKd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiA8dHQ+Zmx1c2goKTwvdHQ+IHdoaWNoIGNhbGxzIDx0dD5yZGJ1ZigpLSZndDtwdWJzeW5jKCk8L3R0PgphbmQgdGhlcmVieSB0aGUgdmlydHVhbCBmdW5jdGlvbiA8dHQ+c3luYygpPC90dD4gKDx0dD5mbHVzaCgpPC90dD4gaXMgbGlzdGVkCnVuZGVyICJ1bmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zIikuPC9wPgo8cD5JbiBhZGRpdGlvbiwgSSBndWVzcyB0aGF0IHRoZSBzZW50ZW5jZSBzdGFydGluZyB3aXRoICJUaGV5IG1heSB1c2Ugb3RoZXIKcHVibGljIG1lbWJlcnMgb2YgPHR0PmJhc2ljX29zdHJlYW08L3R0PiAuLi4iIHByb2JhYmx5IHdhcyBpbnRlbmRlZCB0bwpzdGFydCB3aXRoICJUaGV5IG1heSB1c2Ugb3RoZXIgcHVibGljIG1lbWJlcnMgb2YgPHR0PmJhc2ljX3N0cmVhbXVmPC90dD4uLi4iCmFsdGhvdWdoIHRoZSBwcm9ibGVtIHdpdGggdGhlIHZpcnR1YWwgbWVtYmVycyBleGlzdHMgaW4gYm90aCBjYXNlcy48L3A+CjxwPkkgc2VlIHR3byBvYnZpb3VzIHJlc29sdXRpb25zOjwvcD4KPG9sPgogIDxsaT5zdGF0ZSBpbiBhIGZvb3Rub3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IDx0dD54c3B1dG4oKTwvdHQ+IHdpbGwgbmV2ZXIgYmUKICAgIGNhbGxlZCBieSBhbnkgb3N0cmVhbSBtZW1iZXIgYW5kIHRoYXQgdGhpcyBpcyBpbnRlbmRlZC48L2xpPgogIDxsaT5yZWxheCB0aGUgcmVzdHJpY3Rpb24gYW5kIGFsbG93IGNhbGxpbmcgPHR0Pm92ZXJmbG93KCk8L3R0PiBhbmQgPHR0PnhzcHV0bigpPC90dD4uCiAgICBPZiBjb3Vyc2UsIHRoZSBwcm9ibGVtIHdpdGggPHR0PmZsdXNoKCk8L3R0PiBoYXMgdG8gYmUgcmVzb2x2ZWQgaW4gc29tZSB3YXkuPC9saT4KPC9vbD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgbGFzdCBzZW50ZW5jZSBvZiAyNy42LjIuMSAobGliLm9zdHJlYW0pIHBhcmFncmFwaCAyIGZyb206PC9wPgo8YmxvY2txdW90ZT4KICA8cD5UaGV5IG1heSB1c2Ugb3RoZXIgcHVibGljIG1lbWJlcnMgb2YgYmFzaWNfb3N0cmVhbSBleGNlcHQgdGhhdCB0aGV5IGRvIG5vdAogIGludm9rZSBhbnkgdmlydHVhbCBtZW1iZXJzIG9mIHJkYnVmKCkgZXhjZXB0IG92ZXJmbG93KCkuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+VGhleSBtYXkgdXNlIG90aGVyIHB1YmxpYyBtZW1iZXJzIG9mIGJhc2ljX29zdHJlYW0gZXhjZXB0IHRoYXQgdGhleSBzaGFsbAogIG5vdCBpbnZva2UgYW55IHZpcnR1YWwgbWVtYmVycyBvZiByZGJ1ZigpIGV4Y2VwdCBvdmVyZmxvdygpLCB4c3B1dG4oKSwgYW5kCiAgc3luYygpLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IHRoZSBMV0cgYmVsaWV2ZXMgdGhpcyBpcyBhIHByb2JsZW0uIFdpc2ggdG8gYXNrIEplcnJ5IG9yClBKUCB3aHkgdGhlIHN0YW5kYXJkIGlzIHdyaXR0ZW4gdGhpcyB3YXkuXTwvaT48L3A+CgoKPHA+PGk+W1Bvc3QtVG9reW86IERpZXRtYXIgc3VwcGxpZWQgd29yZGluZyBhdCB0aGUgcmVxdWVzdCBvZiB0aGUKTFdHLiBIZSBjb21tZW50czogVGhlIHJ1bGVzIGNhbiBiZSBtYWRlIGEgbGl0dGxlIGJpdCBtb3JlIHNwZWNpZmljIGlmCm5lY2Vzc2FyeSBiZSBleHBsaWNpdGx5IHNwZWxsaW5nIG91dCB3aGF0IHZpcnR1YWxzIGFyZSBhbGxvd2VkIHRvIGJlCmNhbGxlZCBmcm9tIHdoYXQgZnVuY3Rpb25zIGFuZCBlZyB0byBzdGF0ZSBzcGVjaWZpY2FsbHkgdGhhdCBmbHVzaCgpCmlzIGFsbG93ZWQgdG8gY2FsbCBzeW5jKCkgd2hpbGUgb3RoZXIgZnVuY3Rpb25zIGFyZSBub3QuXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE2NyI+PC9hPjE2Ny4gSW1wcm9wZXIgdXNlIG9mIDx0dD50cmFpdHNfdHlwZTo6bGVuZ3RoKCk8L3R0PjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjIuNi40IFtvc3RyZWFtLmluc2VydGVycy5jaGFyYWN0ZXJdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERpZXRtYXIgS/xobCA8Yj5EYXRlOjwvYj4gMTk5OS0wNy0yMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjb3N0cmVhbS5pbnNlcnRlcnMuY2hhcmFjdGVyIj5pc3N1ZXM8L2E+IGluIFtvc3RyZWFtLmluc2VydGVycy5jaGFyYWN0ZXJdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5QYXJhZ3JhcGggNCBzdGF0ZXMgdGhhdCB0aGUgbGVuZ3RoIGlzIGRldGVybWluZWQgdXNpbmcKPHR0PnRyYWl0czo6bGVuZ3RoKHMpPC90dD4uICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGZ1bmN0aW9uIGlzIG5vdApkZWZpbmVkIGZvciBleGFtcGxlIGlmIHRoZSBjaGFyYWN0ZXIgdHlwZSBpcyA8dHQ+d2NoYXJfdDwvdHQ+IGFuZCB0aGUKdHlwZSBvZiA8dHQ+czwvdHQ+IGlzIDx0dD5jaGFyIGNvbnN0KjwvdHQ+LiBTaW1pbGFyIHByb2JsZW1zIGV4aXN0IGlmCnRoZSBjaGFyYWN0ZXIgdHlwZSBpcyA8dHQ+Y2hhcjwvdHQ+IGFuZCB0aGUgdHlwZSBvZiA8dHQ+czwvdHQ+IGlzCmVpdGhlciA8dHQ+c2lnbmVkIGNoYXIgY29uc3QqPC90dD4gb3IgPHR0PnVuc2lnbmVkIGNoYXIKY29uc3QqPC90dD4uPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI3LjYuMi42LjQgW29zdHJlYW0uaW5zZXJ0ZXJzLmNoYXJhY3Rlcl0gcGFyYWdyYXBoIDQgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IEJlaGF2ZXMgbGlrZSBhbiBmb3JtYXR0ZWQgaW5zZXJ0ZXIgKGFzIGRlc2NyaWJlZCBpbgogIGxpYi5vc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHMpIG9mIG91dC4gQWZ0ZXIgYSBzZW50cnkgb2JqZWN0IGlzCiAgY29uc3RydWN0ZWQgaXQgaW5zZXJ0cyBjaGFyYWN0ZXJzLiBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgc3RhcnRpbmcKICBhdCBzIHRvIGJlIGluc2VydGVkIGlzIHRyYWl0czo6bGVuZ3RoKHMpLiBQYWRkaW5nIGlzIGRldGVybWluZWQgYXMKICBkZXNjcmliZWQgaW4gbGliLmZhY2V0Lm51bS5wdXQudmlydHVhbHMuIFRoZSB0cmFpdHM6Omxlbmd0aChzKQogIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgcyBhcmUgd2lkZW5lZCB1c2luZyBvdXQud2lkZW4KICAobGliLmJhc2ljLmlvcy5tZW1iZXJzKS4gVGhlIHdpZGVuZWQgY2hhcmFjdGVycyBhbmQgYW55IHJlcXVpcmVkCiAgcGFkZGluZyBhcmUgaW5zZXJ0ZWQgaW50byBvdXQuIENhbGxzIHdpZHRoKDApLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IEJlaGF2ZXMgbGlrZSBhIGZvcm1hdHRlZCBpbnNlcnRlciAoYXMgZGVzY3JpYmVkIGluCiAgbGliLm9zdHJlYW0uZm9ybWF0dGVkLnJlcW10cykgb2Ygb3V0LiBBZnRlciBhIHNlbnRyeSBvYmplY3QgaXMKICBjb25zdHJ1Y3RlZCBpdCBpbnNlcnRzIDxpPm48L2k+IGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgPGk+czwvaT4sCiAgd2hlcmUgPGk+bjwvaT4gaXMgdGhlIG51bWJlciB0aGF0IHdvdWxkIGJlIGNvbXB1dGVkIGFzIGlmIGJ5OjwvcD4KICA8dWw+CiAgPGxpPnRyYWl0czo6bGVuZ3RoKHMpIGZvciB0aGUgb3ZlcmxvYWQgd2hlcmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG9mCiAgICB0eXBlIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsIHRyYWl0cyZndDsmYW1wOyBhbmQgdGhlIHNlY29uZCBpcwogICAgb2YgdHlwZSBjb25zdCBjaGFyVCosIGFuZCBhbHNvIGZvciB0aGUgb3ZlcmxvYWQgd2hlcmUgdGhlIGZpcnN0CiAgICBhcmd1bWVudCBpcyBvZiB0eXBlIGJhc2ljX29zdHJlYW0mbHQ7Y2hhciwgdHJhaXRzJmd0OyZhbXA7IGFuZAogICAgdGhlIHNlY29uZCBpcyBvZiB0eXBlIGNvbnN0IGNoYXIqLjwvbGk+CiAgPGxpPnN0ZDo6Y2hhcl90cmFpdHMmbHQ7Y2hhciZndDs6Omxlbmd0aChzKSAKICAgIGZvciB0aGUgb3ZlcmxvYWQgd2hlcmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG9mIHR5cGUgCiAgICBiYXNpY19vc3RyZWFtJmx0O2NoYXJULCB0cmFpdHMmZ3Q7JmFtcDsgYW5kIHRoZSBzZWNvbmQgaXMgb2YgdHlwZQogICAgY29uc3QgY2hhciouPC9saT4KICA8bGk+dHJhaXRzOjpsZW5ndGgocmVpbnRlcnByZXRfY2FzdCZsdDtjb25zdCBjaGFyKiZndDsocykpIAogICAgZm9yIHRoZSBvdGhlciB0d28gb3ZlcmxvYWRzLjwvbGk+CiAgPC91bD4KICA8cD5QYWRkaW5nIGlzIGRldGVybWluZWQgYXMgZGVzY3JpYmVkIGluCiAgbGliLmZhY2V0Lm51bS5wdXQudmlydHVhbHMuIFRoZSA8aT5uPC9pPiBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0CiAgPGk+czwvaT4gYXJlIHdpZGVuZWQgdXNpbmcgb3V0LndpZGVuIChsaWIuYmFzaWMuaW9zLm1lbWJlcnMpLiAgVGhlCiAgd2lkZW5lZCBjaGFyYWN0ZXJzIGFuZCBhbnkgcmVxdWlyZWQgcGFkZGluZyBhcmUgaW5zZXJ0ZWQgaW50bwogIG91dC4gQ2FsbHMgd2lkdGgoMCkuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bU2FudGEgQ3J1ejogTWF0dCBzdXBwbGllZCBuZXcgd29yZGluZ108L2k+PC9wPgoKCjxwPjxpPltLb25hOiBjaGFuZ2VkICJ3aGVyZSA8aT5uPC9pPiBpcyIgdG8gIiB3aGVyZSA8aT5uPC9pPiBpcyB0aGUKICBudW1iZXIgdGhhdCB3b3VsZCBiZSBjb21wdXRlZCBhcyBpZiBieSJdPC9pPjwvcD4KIAoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+V2UgaGF2ZSBmaXZlIHNlcGFyYXRlIGNhc2VzLiAgSW4gdHdvIG9mIHRoZW0gd2UgY2FuIHVzZSB0aGUKdXNlci1zdXBwbGllZCB0cmFpdHMgY2xhc3Mgd2l0aG91dCBhbnkgZnVzcy4gIEluIHRoZSBvdGhlciB0aHJlZSB3ZQp0cnkgdG8gdXNlIHNvbWV0aGluZyBhcyBjbG9zZSB0byB0aGF0IHVzZXItc3VwcGxpZWQgY2xhc3MgYXMgcG9zc2libGUuCkluIHR3byBjYXNlcyB3ZSd2ZSBnb3QgYSB0cmFpdHMgY2xhc3MgdGhhdCdzIGFwcHJvcHJpYXRlIGZvcgpjaGFyIGFuZCB3aGF0IHdlJ3ZlIGdvdCBpcyBhIGNvbnN0IHNpZ25lZCBjaGFyKiBvciBhIGNvbnN0CnVuc2lnbmVkIGNoYXIqOyB0aGF0J3MgY2xvc2UgZW5vdWdoIHNvIHdlIGNhbiBqdXN0IHVzZSBhIHJlaW50ZXJwcmV0CmNhc3QsIGFuZCBjb250aW51ZSB0byB1c2UgdGhlIHVzZXItc3VwcGxpZWQgdHJhaXRzIGNsYXNzLiAgRmluYWxseSwKdGhlcmUncyBvbmUgY2FzZSB3aGVyZSB3ZSBqdXN0IGhhdmUgdG8gZ2l2ZSB1cDogd2hlcmUgd2UndmUgZ290IGEKdHJhaXRzIGNsYXNzIGZvciBzb21lIGFyYml0cmFyeSBjaGFyVCB0eXBlLCBhbmQgd2Ugc29tZWhvdyBoYXZlIHRvCmRlYWwgd2l0aCBhIGNvbnN0IGNoYXIqLiAgVGhlcmUncyBub3RoaW5nIGJldHRlciB0byBkbyBidXQgZmFsbCBiYWNrCnRvIGNoYXJfdHJhaXRzJmx0O2NoYXImZ3Q7PC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE2OCI+PC9hPjE2OC4gVHlwbzogZm9ybWF0dGVkIHZzLiB1bmZvcm1hdHRlZDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjIuNyBbb3N0cmVhbS51bmZvcm1hdHRlZF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGlldG1hciBL/GhsIDxiPkRhdGU6PC9iPiAxOTk5LTA3LTIwPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNvc3RyZWFtLnVuZm9ybWF0dGVkIj5pc3N1ZXM8L2E+IGluIFtvc3RyZWFtLnVuZm9ybWF0dGVkXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIGZpcnN0IHBhcmFncmFwaCBiZWdpbnMgd2l0aCBhIGRlc2NyaXB0aW9ucyB3aGF0IGhhcyB0byBiZSBkb25lCmluIDxpPmZvcm1hdHRlZDwvaT4gb3V0cHV0IGZ1bmN0aW9ucy4gUHJvYmFibHkgdGhpcyBpcyBhIHR5cG8gYW5kIHRoZQpwYXJhZ3JhcGggcmVhbGx5IHdhbnQgdG8gZGVzY3JpYmUgdW5mb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9ucy4uLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjYuMi43IFtvc3RyZWFtLnVuZm9ybWF0dGVkXSBwYXJhZ3JhcGggMSwgdGhlIGZpcnN0IGFuZCBsYXN0CnNlbnRlbmNlcywgY2hhbmdlIHRoZSB3b3JkICJmb3JtYXR0ZWQiIHRvCiJ1bmZvcm1hdHRlZCI6PC9wPgo8YmxvY2txdW90ZT4KICA8cD4iRWFjaCA8Yj51bmZvcm1hdHRlZCA8L2I+IG91dHB1dCBmdW5jdGlvbiBiZWdpbnMgLi4uIjxicj4KICAiLi4uIHZhbHVlIHNwZWNpZmllZCBmb3IgdGhlIDxiPnVuZm9ybWF0dGVkIDwvYj4gIG91dHB1dCAKICBmdW5jdGlvbi4iPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNjkiPjwvYT4xNjkuIEJhZCBlZmZpY2llbmN5IG9mIDx0dD5vdmVyZmxvdygpPC90dD4gbWFuZGF0ZWQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNy4xLjQgW3N0cmluZ2J1Zi52aXJ0dWFsc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGlldG1hciBL/GhsIDxiPkRhdGU6PC9iPiAxOTk5LTA3LTIwPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmdidWYudmlydHVhbHMiPmlzc3VlczwvYT4gaW4gW3N0cmluZ2J1Zi52aXJ0dWFsc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlBhcmFncmFwaCA4LCBOb3Rlcywgb2YgdGhpcyBzZWN0aW9uIHNlZW1zIHRvIG1hbmRhdGUgYW4gZXh0cmVtZWx5CmluZWZmaWNpZW50IHdheSBvZiBidWZmZXIgaGFuZGxpbmcgZm9yIDx0dD5iYXNpY19zdHJpbmdidWY8L3R0PiwKZXNwZWNpYWxseSBpbiB2aWV3IG9mIHRoZSByZXN0cmljdGlvbiB0aGF0IDx0dD5iYXNpY19vc3RyZWFtPC90dD4KbWVtYmVyIGZ1bmN0aW9ucyBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIDx0dD54c3B1dG4oKTwvdHQ+IChzZWUgMjcuNi4yLjEgW29zdHJlYW1dKTogRm9yIGVhY2ggY2hhcmFjdGVyIHRvIGJlIGluc2VydGVkLCBhIG5ldyBidWZmZXIKaXMgdG8gYmUgY3JlYXRlZC48L3A+IAo8cD5PZiBjb3Vyc2UsIHRoZSByZXNvbHV0aW9uIGJlbG93IHJlcXVpcmVzIHNvbWUgaGFuZGxpbmcgb2YKc2ltdWx0YW5lb3VzIGlucHV0IGFuZCBvdXRwdXQgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHVwZGF0ZQo8dHQ+ZWdwdHIoKTwvdHQ+IHdoZW5ldmVyIDx0dD5lcHB0cigpPC90dD4gaXMgY2hhbmdlZC4gQSBwb3NzaWJsZQpzb2x1dGlvbiBpcyB0byBoYW5kbGUgdGhpcyBpbiA8dHQ+dW5kZXJmbG93KCk8L3R0Pi48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy43LjEuNCBbc3RyaW5nYnVmLnZpcnR1YWxzXSBwYXJhZ3JhcGggOCwgTm90ZXMsIGluc2VydCB0aGUgd29yZHMKImF0IGxlYXN0IiBhcyBpbiB0aGUgZm9sbG93aW5nOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+VG8gbWFrZSBhIHdyaXRlIHBvc2l0aW9uIGF2YWlsYWJsZSwgdGhlIGZ1bmN0aW9uIHJlYWxsb2NhdGVzIChvciBpbml0aWFsbHkKICBhbGxvY2F0ZXMpIGFuIGFycmF5IG9iamVjdCB3aXRoIGEgc3VmZmljaWVudCBudW1iZXIgb2YgZWxlbWVudHMgdG8gaG9sZCB0aGUKICBjdXJyZW50IGFycmF5IG9iamVjdCAoaWYgYW55KSwgcGx1cyA8Yj5hdCBsZWFzdDwvYj4gb25lIGFkZGl0aW9uYWwgd3JpdGUKICBwb3NpdGlvbi48L3A+CjwvYmxvY2txdW90ZT4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE3MCI+PC9hPjE3MC4gSW5jb25zaXN0ZW50IGRlZmluaXRpb24gb2YgPHR0PnRyYWl0c190eXBlPC90dD48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNy40IFtzdHJpbmdzdHJlYW1dIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERpZXRtYXIgS/xobCA8Yj5EYXRlOjwvYj4gMTk5OS0wNy0yMDwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgY2xhc3NlcyA8dHQ+YmFzaWNfc3RyaW5nc3RyZWFtPC90dD4gKDI3LjcuNCBbc3RyaW5nc3RyZWFtXSksCjx0dD5iYXNpY19pc3RyaW5nc3RyZWFtPC90dD4gKDI3LjcuMiBbaXN0cmluZ3N0cmVhbV0pLCBhbmQKPHR0PmJhc2ljX29zdHJpbmdzdHJlYW08L3R0PiAoMjcuNy4zIFtvc3RyaW5nc3RyZWFtXSkgYXJlIGluY29uc2lzdGVudAppbiB0aGVpciBkZWZpbml0aW9uIG9mIHRoZSB0eXBlIDx0dD50cmFpdHNfdHlwZTwvdHQ+OiBGb3IKPHR0PmlzdHJpbmdzdHJlYW08L3R0PiwgdGhpcyB0eXBlIGlzIGRlZmluZWQsIGZvciB0aGUgb3RoZXIgdHdvIGl0IGlzCm5vdC4gVGhpcyBzaG91bGQgYmUgY29uc2lzdGVudC48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+IDxwPlRvIHRoZSBkZWNsYXJhdGlvbnMgb2YKPHR0PmJhc2ljX29zdHJpbmdzdHJlYW08L3R0PiAoMjcuNy4zIFtvc3RyaW5nc3RyZWFtXSkgYW5kCjx0dD5iYXNpY19zdHJpbmdzdHJlYW08L3R0PiAoMjcuNy40IFtzdHJpbmdzdHJlYW1dKSBhZGQ6PC9wPgo8YmxvY2txdW90ZT4KPHByZT50eXBlZGVmIHRyYWl0cyB0cmFpdHNfdHlwZTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTcxIj48L2E+MTcxLiBTdHJhbmdlIDx0dD5zZWVrcG9zKCk8L3R0PiBzZW1hbnRpY3MgZHVlIHRvIGpvaW50IHBvc2l0aW9uPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjguMS41IFtmaWxlYnVmLnZpcnR1YWxzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEaWV0bWFyIEv8aGwgPGI+RGF0ZTo8L2I+IDE5OTktMDctMjA8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2ZpbGVidWYudmlydHVhbHMiPmlzc3VlczwvYT4gaW4gW2ZpbGVidWYudmlydHVhbHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5PdmVycmlkZGVuIHZpcnR1YWwgZnVuY3Rpb25zLCBzZWVrcG9zKCk8L3A+IDxwPkluIDI3LjguMS4xIFtmaWxlYnVmXSBwYXJhZ3JhcGggMywgaXQgaXMgc3RhdGVkIHRoYXQgYSBqb2ludCBpbnB1dCBhbmQKb3V0cHV0IHBvc2l0aW9uIGlzIG1haW50YWluZWQgYnkgPHR0PmJhc2ljX2ZpbGVidWY8L3R0Pi4gU3RpbGwsIHRoZQpkZXNjcmlwdGlvbiBvZiA8dHQ+c2Vla3BvcygpPC90dD4gc2VlbXMgdG8gdGFsayBhYm91dCBkaWZmZXJlbnQgZmlsZQpwb3NpdGlvbnMuIEluIHBhcnRpY3VsYXIsIGl0IGlzIHVuY2xlYXIgKGF0IGxlYXN0IHRvIG1lKSB3aGF0IGlzCnN1cHBvc2VkIHRvIGhhcHBlbiB0byB0aGUgb3V0cHV0IGJ1ZmZlciAoaWYgdGhlcmUgaXMgb25lKSBpZiBvbmx5IHRoZQppbnB1dCBwb3NpdGlvbiBpcyBjaGFuZ2VkLiBUaGUgc3RhbmRhcmQgc2VlbXMgdG8gbWFuZGF0ZSB0aGF0IHRoZQpvdXRwdXQgYnVmZmVyIGlzIGtlcHQgYW5kIHByb2Nlc3NlZCBhcyBpZiB0aGVyZSB3YXMgbm8gcG9zaXRpb25pbmcgb2YKdGhlIG91dHB1dCBwb3NpdGlvbiAoYnkgY2hhbmdpbmcgdGhlIGlucHV0IHBvc2l0aW9uKS4gT2YgY291cnNlLCB0aGlzCmNhbiBiZSBleGFjdGx5IHdoYXQgeW91IHdhbnQgaWYgdGhlIGZsYWcgPHR0Pmlvc19iYXNlOjphdGU8L3R0PiBpcwpzZXQuIEhvd2V2ZXIsIEkgdGhpbmssIHRoZSBzdGFuZGFyZCBzaG91bGQgc2F5IHNvbWV0aGluZyBsaWtlCnRoaXM6PC9wPgo8dWw+CiAgPGxpPklmIDx0dD4od2hpY2ggJmFtcDsgbW9kZSkgPT0gMDwvdHQ+IG5laXRoZXIgcmVhZCBub3Igd3JpdGUgcG9zaXRpb24gaXMKICAgIGNoYW5nZWQgYW5kIHRoZSBjYWxsIGZhaWxzLiBPdGhlcndpc2UsIHRoZSBqb2ludCByZWFkIGFuZCB3cml0ZSBwb3NpdGlvbiBpcwogICAgYWx0ZXJlZCB0byBjb3JyZXNwb25kIHRvIDx0dD5zcDwvdHQ+LjwvbGk+CiAgPGxpPklmIHRoZXJlIGlzIGFuIG91dHB1dCBidWZmZXIsIHRoZSBvdXRwdXQgc2VxdWVuY2VzIGlzIHVwZGF0ZWQgYW5kIGFueQogICAgdW5zaGlmdCBzZXF1ZW5jZSBpcyB3cml0dGVuIGJlZm9yZSB0aGUgcG9zaXRpb24gaXMgYWx0ZXJlZC48L2xpPgogIDxsaT5JZiB0aGVyZSBpcyBhbiBpbnB1dCBidWZmZXIsIHRoZSBpbnB1dCBzZXF1ZW5jZSBpcyB1cGRhdGVkIGFmdGVyIHRoZQogICAgcG9zaXRpb24gaXMgYWx0ZXJlZC48L2xpPgo8L3VsPgo8cD5QbHVzIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZywgdGhhdCBpcy4uLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgdW5udW1iZXJlZCBwYXJhZ3JhcGggaW4gMjcuOC4xLjQgKGxpYi5maWxlYnVmLnZpcnR1YWxzKSBiZWZvcmUKcGFyYWdyYXBoIDE0IGZyb206PC9wPgo8YmxvY2txdW90ZT4KICA8cD5wb3NfdHlwZSBzZWVrcG9zKHBvc190eXBlIHNwLCBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfAogIGlvc19iYXNlOjpvdXQpOzwvcD4KICA8cD5BbHRlcnMgdGhlIGZpbGUgcG9zaXRpb24sIGlmIHBvc3NpYmxlLCB0byBjb3JyZXNwb25kIHRvIHRoZSBwb3NpdGlvbiBzdG9yZWQKICBpbiBzcCAoYXMgZGVzY3JpYmVkIGJlbG93KS48L3A+CiAgPHA+LSBpZiAod2hpY2gmYW1wO2lvc19iYXNlOjppbikhPTAsIHNldCB0aGUgZmlsZSBwb3NpdGlvbiB0byBzcCwgdGhlbiB1cGRhdGUKICB0aGUgaW5wdXQgc2VxdWVuY2U8L3A+CiAgPHA+LSBpZiAod2hpY2gmYW1wO2lvc19iYXNlOjpvdXQpIT0wLCB0aGVuIHVwZGF0ZSB0aGUgb3V0cHV0IHNlcXVlbmNlLCB3cml0ZQogIGFueSB1bnNoaWZ0IHNlcXVlbmNlLCBhbmQgc2V0IHRoZSBmaWxlIHBvc2l0aW9uIHRvIHNwLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPnBvc190eXBlIHNlZWtwb3MocG9zX3R5cGUgc3AsIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8CiAgaW9zX2Jhc2U6Om91dCk7PC9wPgogIDxwPkFsdGVycyB0aGUgZmlsZSBwb3NpdGlvbiwgaWYgcG9zc2libGUsIHRvIGNvcnJlc3BvbmQgdG8gdGhlIHBvc2l0aW9uIHN0b3JlZAogIGluIHNwIChhcyBkZXNjcmliZWQgYmVsb3cpLiBBbHRlcmluZyB0aGUgZmlsZSBwb3NpdGlvbiBwZXJmb3JtcyBhcyBmb2xsb3dzOjwvcD4KICA8cD4xLiBpZiAob20gJmFtcDsgaW9zX2Jhc2U6Om91dCkhPTAsIHRoZW4gdXBkYXRlIHRoZSBvdXRwdXQgc2VxdWVuY2UgYW5kCiAgd3JpdGUgYW55IHVuc2hpZnQgc2VxdWVuY2U7PC9wPgogIDxwPjIuIHNldCB0aGUgZmlsZSBwb3NpdGlvbiB0byBzcDs8L3A+CiAgPHA+My4gaWYgKG9tICZhbXA7IGlvc19iYXNlOjppbikhPTAsIHRoZW4gdXBkYXRlIHRoZSBpbnB1dCBzZXF1ZW5jZTs8L3A+CiAgPHA+d2hlcmUgb20gaXMgdGhlIG9wZW4gbW9kZSBwYXNzZWQgdG8gdGhlIGxhc3QgY2FsbCB0byBvcGVuKCkuIFRoZSBvcGVyYXRpb24KICBmYWlscyBpZiBpc19vcGVuKCkgcmV0dXJucyBmYWxzZS48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltLb25hOiBEaWV0bWFyIGlzIHdvcmtpbmcgb24gYSBwcm9wb3NlZCByZXNvbHV0aW9uLl08L2k+PC9wPgoKPHA+PGk+W1Bvc3QtVG9reW86IERpZXRtYXIgc3VwcGxpZWQgdGhlIGFib3ZlIHdvcmRpbmcuXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE3MiI+PC9hPjE3Mi4gSW5jb25zaXN0ZW50IHR5cGVzIGZvciA8dHQ+YmFzaWNfaXN0cmVhbTo6aWdub3JlKCk8L3R0PjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjEuMyBbaXN0cmVhbS51bmZvcm1hdHRlZF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gR3JlZyBDb21lYXUsIERpZXRtYXIgS/xobCA8Yj5EYXRlOjwvYj4gMTk5OS0wNy0yMzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaXN0cmVhbS51bmZvcm1hdHRlZCI+aXNzdWVzPC9hPiBpbiBbaXN0cmVhbS51bmZvcm1hdHRlZF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkluIDI3LjYuMS4xIFtpc3RyZWFtXSB0aGUgZnVuY3Rpb24KPHR0Pmlnbm9yZSgpPC90dD4gZ2V0cyBhbiBvYmplY3Qgb2YgdHlwZSA8dHQ+c3RyZWFtc2l6ZTwvdHQ+IGFzIGZpcnN0CmFyZ3VtZW50LiBIb3dldmVyLCBpbiAyNy42LjEuMyBbaXN0cmVhbS51bmZvcm1hdHRlZF0KcGFyYWdyYXBoIDIzIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBvZiB0eXBlIDx0dD5pbnQuPC90dD48L3A+Cgo8cD5BcyBmYXIgYXMgSSBjYW4gc2VlIHRoaXMgaXMgbm90IHJlYWxseSBhIGNvbnRyYWRpY3Rpb24gYmVjYXVzZQpldmVyeXRoaW5nIGlzIGNvbnNpc3RlbnQgaWYgPHR0PnN0cmVhbXNpemU8L3R0PiBpcyB0eXBlZGVmIHRvIGJlCjx0dD5pbnQ8L3R0Pi4gSG93ZXZlciwgdGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IG5vdCB3aGF0IHdhcwppbnRlbmRlZC4gVGhlIHNhbWUgdGhpbmcgaGFwcGVuZWQgdG8gPHR0PmJhc2ljX2ZpbGVidWY6OnNldGJ1ZigpPC90dD4sCmFzIGRlc2NyaWJlZCBpbiBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTczIj4xNzM8L2E+LjwvcD4KCjxwPkRhcmluIEFkbGVyIGFsc28Kc3VibWl0dGVkIHRoaXMgaXNzdWUsIGNvbW1lbnRpbmc6IEVpdGhlciAyNy42LjEuMSBzaG91bGQgYmUgbW9kaWZpZWQKdG8gc2hvdyBhIGZpcnN0IHBhcmFtZXRlciBvZiB0eXBlIGludCwgb3IgMjcuNi4xLjMgc2hvdWxkIGJlIG1vZGlmaWVkCnRvIHNob3cgYSBmaXJzdCBwYXJhbWV0ZXIgb2YgdHlwZSBzdHJlYW1zaXplIGFuZCB1c2UKbnVtZXJpY19saW1pdHMmbHQ7c3RyZWFtc2l6ZSZndDs6Om1heC48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy42LjEuMyBbaXN0cmVhbS51bmZvcm1hdHRlZF0gcGFyYWdyYXBoIDIzIGFuZCAyNCwgY2hhbmdlIGJvdGggdXNlcwpvZiA8dHQ+aW50PC90dD4gaW4gdGhlIGRlc2NyaXB0aW9uIG9mIDx0dD5pZ25vcmUoKTwvdHQ+IHRvCjx0dD5zdHJlYW1zaXplPC90dD4uPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTczIj48L2E+MTczLiBJbmNvbnNpc3RlbnQgdHlwZXMgZm9yIDx0dD5iYXNpY19maWxlYnVmOjpzZXRidWYoKTwvdHQ+PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjguMS41IFtmaWxlYnVmLnZpcnR1YWxzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBHcmVnIENvbWVhdSwgRGlldG1hciBL/GhsIDxiPkRhdGU6PC9iPiAxOTk5LTA3LTIzPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmaWxlYnVmLnZpcnR1YWxzIj5pc3N1ZXM8L2E+IGluIFtmaWxlYnVmLnZpcnR1YWxzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KCjxwPgpJbiAyNy44LjEuMSBbZmlsZWJ1Zl0gdGhlIGZ1bmN0aW9uIDx0dD5zZXRidWYoKTwvdHQ+IGdldHMgYW4Kb2JqZWN0IG9mIHR5cGUgPHR0PnN0cmVhbXNpemU8L3R0PiBhcyBzZWNvbmQgYXJndW1lbnQuIEhvd2V2ZXIsIGluCjI3LjguMS41IFtmaWxlYnVmLnZpcnR1YWxzXSBwYXJhZ3JhcGggOSB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG9mIHR5cGUKPHR0PmludDwvdHQ+Lgo8L3A+Cgo8cD4KQXMgZmFyIGFzIEkgY2FuIHNlZSB0aGlzIGlzIG5vdCByZWFsbHkgYSBjb250cmFkaWN0aW9uIGJlY2F1c2UKZXZlcnl0aGluZyBpcyBjb25zaXN0ZW50IGlmIDx0dD5zdHJlYW1zaXplPC90dD4gaXMgdHlwZWRlZiB0byBiZQo8dHQ+aW50PC90dD4uIEhvd2V2ZXIsIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBub3Qgd2hhdCB3YXMKaW50ZW5kZWQuIFRoZSBzYW1lIHRoaW5nIGhhcHBlbmVkIHRvIDx0dD5iYXNpY19pc3RyZWFtOjppZ25vcmUoKTwvdHQ+LAphcyBkZXNjcmliZWQgaW4gaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE3MiI+MTcyPC9hPi4KPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjguMS41IFtmaWxlYnVmLnZpcnR1YWxzXSBwYXJhZ3JhcGggOSwgY2hhbmdlIGFsbCB1c2VzIG9mCjx0dD5pbnQ8L3R0PiBpbiB0aGUgZGVzY3JpcHRpb24gb2YgPHR0PnNldGJ1ZigpPC90dD4gdG8KPHR0PnN0cmVhbXNpemU8L3R0Pi48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNzQiPjwvYT4xNzQuIFR5cG86IDx0dD5PRkZfVDwvdHQ+IHZzLiA8dHQ+UE9TX1Q8L3R0PjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiBELjYgW2RlcHIuaW9zLm1lbWJlcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERpZXRtYXIgS/xobCA8Yj5EYXRlOjwvYj4gMTk5OS0wNy0yMzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjZGVwci5pb3MubWVtYmVycyI+aXNzdWVzPC9hPiBpbiBbZGVwci5pb3MubWVtYmVyc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkFjY29yZGluZyB0byBwYXJhZ3JhcGggMSBvZiB0aGlzIHNlY3Rpb24sIDx0dD5zdHJlYW1wb3M8L3R0PiBpcyB0aGUKdHlwZSA8dHQ+T0ZGX1Q8L3R0PiwgdGhlIHNhbWUgdHlwZSBhcyA8dHQ+c3RyZWFtb2ZmPC90dD4uIEhvd2V2ZXIsIGluCnBhcmFncmFwaCA2IHRoZSA8dHQ+c3RyZWFtcG9zPC90dD4gZ2V0cyB0aGUgdHlwZSA8dHQ+UE9TX1Q8L3R0PjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSBELjYgW2RlcHIuaW9zLm1lbWJlcnNdIHBhcmFncmFwaCAxIGZyb20gIjx0dD50eXBlZGVmCk9GRl9UIHN0cmVhbXBvczs8L3R0PiIgdG8gIjx0dD50eXBlZGVmIFBPU19UCnN0cmVhbXBvczs8L3R0PiI8L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxNzUiPjwvYT4xNzUuIEFtYmlndWl0eSBmb3IgPHR0PmJhc2ljX3N0cmVhbWJ1Zjo6cHVic2Vla3BvcygpPC90dD4gYW5kIGEgZmV3IG90aGVyIGZ1bmN0aW9ucy48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gRC42IFtkZXByLmlvcy5tZW1iZXJzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEaWV0bWFyIEv8aGwgPGI+RGF0ZTo8L2I+IDE5OTktMDctMjM8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2RlcHIuaW9zLm1lbWJlcnMiPmlzc3VlczwvYT4gaW4gW2RlcHIuaW9zLm1lbWJlcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5BY2NvcmRpbmcgdG8gcGFyYWdyYXBoIDggb2YgdGhpcyBzZWN0aW9uLCB0aGUgbWV0aG9kcwo8dHQ+YmFzaWNfc3RyZWFtYnVmOjpwdWJzZWVrcG9zKCk8L3R0PiwKPHR0PmJhc2ljX2lmc3RyZWFtOjpvcGVuKCk8L3R0PiwgYW5kIDx0dD5iYXNpY19vZnN0cmVhbTo6b3BlbjwvdHQ+CiJtYXkiIGJlIG92ZXJsb2FkZWQgYnkgYSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gdGFraW5nIHRoZQp0eXBlIDx0dD5pb3NfYmFzZTo6b3Blbl9tb2RlPC90dD4gYXMgbGFzdCBhcmd1bWVudCBhcmd1bWVudCBpbnN0ZWFkIG9mCjx0dD5pb3NfYmFzZTo6b3Blbm1vZGU8L3R0PiAoPHR0Pmlvc19iYXNlOjpvcGVuX21vZGU8L3R0PiBpcyBkZWZpbmVkCmluIHRoaXMgc2VjdGlvbiB0byBiZSBhbiBhbGlhcyBmb3Igb25lIG9mIHRoZSBpbnRlZ3JhbCB0eXBlcykuIFRoZQpjbGF1c2Ugc3BlY2lmaWVzLCB0aGF0IHRoZSBsYXN0IGFyZ3VtZW50IGhhcyBhIGRlZmF1bHQgYXJndW1lbnQgaW4KdGhyZWUgY2FzZXMuICBIb3dldmVyLCB0aGlzIGdlbmVyYXRlcyBhbiBhbWJpZ3VpdHkgd2l0aCB0aGUgb3ZlcmxvYWRlZAp2ZXJzaW9uIGJlY2F1c2Ugbm93IHRoZSBhcmd1bWVudHMgYXJlIGFic29sdXRlbHkgaWRlbnRpY2FsIGlmIHRoZSBsYXN0CmFyZ3VtZW50IGlzIG5vdCBzcGVjaWZpZWQuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gRC42IFtkZXByLmlvcy5tZW1iZXJzXSBwYXJhZ3JhcGggOCwgcmVtb3ZlIHRoZSBkZWZhdWx0IGFyZ3VtZW50cyBmb3IKPHR0PmJhc2ljX3N0cmVhbWJ1Zjo6cHVic2Vla3BvcygpPC90dD4sCjx0dD5iYXNpY19pZnN0cmVhbTo6b3BlbigpPC90dD4sIGFuZAo8dHQ+YmFzaWNfb2ZzdHJlYW06Om9wZW4oKS48L3R0PjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE3NiI+PC9hPjE3Ni4gPHR0PmV4Y2VwdGlvbnMoKTwvdHQ+IGluIDx0dD5pb3NfYmFzZTwvdHQ+Li4uPzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiBELjYgW2RlcHIuaW9zLm1lbWJlcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERpZXRtYXIgS/xobCA8Yj5EYXRlOjwvYj4gMTk5OS0wNy0yMzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjZGVwci5pb3MubWVtYmVycyI+aXNzdWVzPC9hPiBpbiBbZGVwci5pb3MubWVtYmVyc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSAib3ZlcmxvYWQiIGZvciB0aGUgZnVuY3Rpb24gPHR0PmV4Y2VwdGlvbnMoKTwvdHQ+IGluCnBhcmFncmFwaCA4IGdpdmVzIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlcmUgaXMgYW5vdGhlciBmdW5jdGlvbiBvZgp0aGlzIGZ1bmN0aW9uIGRlZmluZWQgaW4gY2xhc3MgPHR0Pmlvc19iYXNlPC90dD4uIEhvd2V2ZXIsIHRoaXMgaXMgbm90CnRoZSBjYXNlLiBUaHVzLCBpdCBpcyBoYXJkIHRvIHRlbGwgaG93IHRoZSBzZW1hbnRpY3MgKHBhcmFncmFwaCA5KSBjYW4KYmUgaW1wbGVtZW50ZWQ6ICJDYWxsIHRoZSBjb3JyZXNwb25kaW5nIG1lbWJlciBmdW5jdGlvbiBzcGVjaWZpZWQKaW4gY2xhdXNlIDI3IFtpbnB1dC5vdXRwdXRdLiI8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiBELjYgW2RlcHIuaW9zLm1lbWJlcnNdIHBhcmFncmFwaCA4LCBtb3ZlIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUKZnVuY3Rpb24gPHR0PmV4Y2VwdGlvbnMoKTwvdHQ+aW50byBjbGFzcyA8dHQ+YmFzaWNfaW9zPC90dD4uPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTc5Ij48L2E+MTc5LiBDb21wYXJpc29uIG9mIGNvbnN0X2l0ZXJhdG9ycyB0byBpdGVyYXRvcnMgZG9lc24ndCB3b3JrPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjEgW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEp1ZHkgV2FyZCA8Yj5EYXRlOjwvYj4gMTk5OC0wNy0wMjwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI2NvbnRhaW5lci5yZXF1aXJlbWVudHMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtjb250YWluZXIucmVxdWlyZW1lbnRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2NvbnRhaW5lci5yZXF1aXJlbWVudHMiPmlzc3VlczwvYT4gaW4gW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5DdXJyZW50bHkgdGhlIGZvbGxvd2luZyB3aWxsIG5vdCBjb21waWxlIG9uIHR3byB3ZWxsLWtub3duIHN0YW5kYXJkCmxpYnJhcnkgaW1wbGVtZW50YXRpb25zOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+I2luY2x1ZGUgJmx0O3NldCZndDsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgZihjb25zdCBzZXQmbHQ7aW50Jmd0OyAmYW1wO3MpCnsKICBzZXQmbHQ7aW50Jmd0Ozo6aXRlcmF0b3IgaTsKICBpZiAoaT09cy5lbmQoKSk7IC8vIHMuZW5kKCkgcmV0dXJucyBhIGNvbnN0X2l0ZXJhdG9yCn08L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+ClRoZSByZWFzb24gdGhpcyBkb2Vzbid0IGNvbXBpbGUgaXMgYmVjYXVzZSBvcGVyYXRvcj09IHdhcyBpbXBsZW1lbnRlZAphcyBhIG1lbWJlciBmdW5jdGlvbiBvZiB0aGUgbmVzdGVkIGNsYXNzZXMgc2V0Oml0ZXJhdG9yIGFuZApzZXQ6OmNvbnN0X2l0ZXJhdG9yLCBhbmQgdGhlcmUgaXMgbm8gY29udmVyc2lvbiBmcm9tIGNvbnN0X2l0ZXJhdG9yIHRvCml0ZXJhdG9yLiBTdXJwcmlzaW5nbHksIChzLmVuZCgpID09IGkpIGRvZXMgd29yaywgdGhvdWdoLCBiZWNhdXNlIG9mCnRoZSBjb252ZXJzaW9uIGZyb20gaXRlcmF0b3IgdG8gY29uc3RfaXRlcmF0b3IuCjwvcD4KCjxwPgpJIGRvbid0IHNlZSBhIHJlcXVpcmVtZW50IGFueXdoZXJlIGluIHRoZSBzdGFuZGFyZCB0aGF0IHRoaXMgbXVzdAp3b3JrLiBTaG91bGQgdGhlcmUgYmUgb25lPyAgSWYgc28sIEkgdGhpbmsgdGhlIHJlcXVpcmVtZW50IHdvdWxkIG5lZWQKdG8gYmUgYWRkZWQgdG8gdGhlIHRhYmxlcyBpbiBzZWN0aW9uIDI0LjEuMS4gSSdtIG5vdCBzdXJlIGFib3V0IHRoZQp3b3JkaW5nLiAgSWYgdGhpcyByZXF1aXJlbWVudCBleGlzdGVkIGluIHRoZSBzdGFuZGFyZCwgSSB3b3VsZCB0aGluawp0aGF0IGltcGxlbWVudG9ycyB3b3VsZCBoYXZlIHRvIG1ha2UgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzCm5vbi1tZW1iZXIgZnVuY3Rpb25zLjwvcD4KCjxwPlRoaXMgaXNzdWVzIHdhcyBhbHNvIHJhaXNlZCBvbiBjb21wLnN0ZC5jKysgYnkgRGFyaW4KQWRsZXIuJm5ic3A7IFRoZSBleGFtcGxlIGdpdmVuIHdhczo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPmJvb2wgY2hlY2tfZXF1YWwoc3RkOjpkZXF1ZSZsdDtpbnQmZ3Q7OjppdGVyYXRvciBpLApzdGQ6OmRlcXVlJmx0O2ludCZndDs6OmNvbnN0X2l0ZXJhdG9yIGNpKQp7CnJldHVybiBpID09IGNpOwp9PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPkNvbW1lbnQgZnJvbSBKb2huIFBvdHRlcjo8L3A+CjxibG9ja3F1b3RlPgogICAgPHA+CiAgICBJbiBjYXNlIG5vYm9keSBoYXMgbm90aWNlZCwgYWNjZXB0aW5nIGl0IHdpbGwgYnJlYWsgcmV2ZXJzZV9pdGVyYXRvci4KICAgIDwvcD4KCiAgICA8cD4KICAgIFRoZSBmaXggaXMgdG8gbWFrZSB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMgdGVtcGxhdGVkIG9uIHR3byB0eXBlcy4KICAgIDwvcD4KCiAgICA8cHJlPiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgSXRlcmF0b3IxLCBjbGFzcyBJdGVyYXRvcjImZ3Q7CiAgICBib29sIG9wZXJhdG9yPT0gKHJldmVyc2VfaXRlcmF0b3ImbHQ7SXRlcmF0b3IxJmd0OyBjb25zdCZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgIHJldmVyc2VfaXRlcmF0b3ImbHQ7SXRlcmF0b3IyJmd0OyBjb25zdCZhbXA7IHkpOwogICAgPC9wcmU+CgogICAgPHA+CiAgICBPYnZpb3VzbHk6ICByZXR1cm4geC5iYXNlKCkgPT0geS5iYXNlKCk7CiAgICA8L3A+CgogICAgPHA+CiAgICBDdXJyZW50bHksIG5vIHJldmVyc2VfaXRlcmF0b3IgdG8gY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb21wYXJlcyBhcmUKICAgIHZhbGlkLgogICAgPC9wPgoKICAgIDxwPgogICAgQlRXLCBJIHRoaW5rIHRoZSBpc3N1ZSBpcyBpbiBzdXBwb3J0IG9mIGJhZCBjb2RlLiAgQ29tcGFyZXMgc2hvdWxkIGJlCiAgICBiZXR3ZWVuIHR3byBpdGVyYXRvcnMgb2YgdGhlIHNhbWUgdHlwZS4gIEFsbCBzdGQ6OmFsZ29yaXRobXMgcmVxdWlyZQogICAgdGhlIGJlZ2luIGFuZCBlbmQgaXRlcmF0b3JzIHRvIGJlIG9mIHRoZSBzYW1lIHR5cGUuIAogICAgPC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbnNlcnQgdGhpcyBwYXJhZ3JhcGggYWZ0ZXIgMjMuMSBbY29udGFpbmVyLnJlcXVpcmVtZW50c10gcGFyYWdyYXBoIDc6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5JbiB0aGUgZXhwcmVzc2lvbnM8L3A+CiAgPHByZT4gICAgaSA9PSBqCiAgICBpICE9IGoKICAgIGkgJmx0OyBqCiAgICBpICZsdDs9IGoKICAgIGkgJmd0Oz0gagogICAgaSAmZ3Q7IGoKICAgIGkgLSBqCiAgPC9wcmU+CiAgPHA+V2hlcmUgaSBhbmQgaiBkZW5vdGUgb2JqZWN0cyBvZiBhIGNvbnRhaW5lcidzIGl0ZXJhdG9yIHR5cGUsCiAgZWl0aGVyIG9yIGJvdGggbWF5IGJlIHJlcGxhY2VkIGJ5IGFuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyJ3MKICBjb25zdF9pdGVyYXRvciB0eXBlIHJlZmVycmluZyB0byB0aGUgc2FtZSBlbGVtZW50IHdpdGggbm8KICBjaGFuZ2UgaW4gc2VtYW50aWNzLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W3Bvc3QtVG9yb250bzogSnVkeSBzdXBwbGllZCBhIHByb3Bvc2VkIHJlc29sdXRpb24gc2F5aW5nIHRoYXQKPHR0Pml0ZXJhdG9yPC90dD4gYW5kIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+IGNvdWxkIGJlIGZyZWVseSBtaXhlZCBpbgppdGVyYXRvciBjb21wYXJpc29uIGFuZCBkaWZmZXJlbmNlIG9wZXJhdGlvbnMuXTwvaT48L3A+CgoKPHA+PGk+W1JlZG1vbmQ6IERhdmUgYW5kIEhvd2FyZCBzdXBwbGllZCBhIG5ldyBwcm9wb3NlZCByZXNvbHV0aW9uIHdoaWNoCmV4cGxpY2l0bHkgbGlzdGVkIGV4cHJlc3Npb25zOyB0aGVyZSB3YXMgY29uY2VybiB0aGF0IHRoZSBwcmV2aW91cwpwcm9wb3NlZCByZXNvbHV0aW9uIHdhcyB0b28gaW5mb3JtYWwuXTwvaT48L3A+CgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KVGhlIExXRyBiZWxpZXZlcyBpdCBpcyBjbGVhciB0aGF0IHRoZSBhYm92ZSB3b3JkaW5nIGFwcGxpZXMgb25seSB0bwp0aGUgbmVzdGVkIHR5cGVzIDx0dD5YOjppdGVyYXRvcjwvdHQ+IGFuZCA8dHQ+WDo6Y29uc3RfaXRlcmF0b3I8L3R0PiwKd2hlcmUgPHR0Plg8L3R0PiBpcyBhIGNvbnRhaW5lci4gIFRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IHRoYXQKPHR0Plg6OnJldmVyc2VfaXRlcmF0b3I8L3R0PiBhbmQgPHR0Plg6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3I8L3R0PgpjYW4gYmUgbWl4ZWQuICBJZiBtaXhpbmcgdGhlbSBpcyBjb25zaWRlcmVkIGltcG9ydGFudCwgdGhhdCdzIGEKc2VwYXJhdGUgaXNzdWUuICAoSXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI4MCI+MjgwPC9hPi4pCjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE4MSI+PC9hPjE4MS4gbWFrZV9wYWlyKCkgdW5pbnRlbmRlZCBiZWhhdmlvcjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMC4yLjMgW3BhaXJzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBBbmRyZXcgS29lbmlnIDxiPkRhdGU6PC9iPiAxOTk5LTA4LTAzPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNwYWlycyI+aXNzdWVzPC9hPiBpbiBbcGFpcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgY2xhaW0gaGFzIHN1cmZhY2VkIGluIFVzZW5ldCB0aGF0IGV4cHJlc3Npb25zIHN1Y2ggYXM8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5tYWtlX3BhaXIoImFiYyIsIDMpPC90dD48YnI+Cjxicj4KYXJlIGlsbGVnYWwsIG5vdHdpdGhzdGFuZGluZyB0aGVpciB1c2UgaW4gZXhhbXBsZXMsIGJlY2F1c2UgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiB0cmllcyB0byBiaW5kIHRoZSBmaXJzdCB0ZW1wbGF0ZQpwYXJhbWV0ZXIgdG8gPHR0PiBjb25zdCBjaGFyICgmYW1wOylbNF08L3R0Piwgd2hpY2ggdHlwZSBpcyB1bmNvcHlhYmxlLjxicj4KPGJyPgpJIGRvdWJ0IGFueW9uZSBpbnRlbmRlZCB0aGF0IGJlaGF2aW9yLi4uCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIwLjIgW3V0aWxpdHldLCBwYXJhZ3JhcGggMSBjaGFuZ2UgdGhlIGZvbGxvd2luZwpkZWNsYXJhdGlvbiBvZiBtYWtlX3BhaXIoKTo8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIFQxLCBjbGFzcyBUMiZndDsgcGFpciZsdDtUMSxUMiZndDsgbWFrZV9wYWlyKGNvbnN0IFQxJmFtcDssIGNvbnN0IFQyJmFtcDspOzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVDEsIGNsYXNzIFQyJmd0OyBwYWlyJmx0O1QxLFQyJmd0OyBtYWtlX3BhaXIoVDEsIFQyKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD4gIEluIDIwLjIuMyBbcGFpcnNdIHBhcmFncmFwaCA3IGFuZCB0aGUgbGluZSBiZWZvcmUsIGNoYW5nZTo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBUMSwgY2xhc3MgVDImZ3Q7CnBhaXImbHQ7VDEsIFQyJmd0OyBtYWtlX3BhaXIoY29uc3QgVDEmYW1wOyB4LCBjb25zdCBUMiZhbXA7IHkpOzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIFQxLCBjbGFzcyBUMiZndDsKcGFpciZsdDtUMSwgVDImZ3Q7IG1ha2VfcGFpcihUMSB4LCBUMiB5KTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5hbmQgYWRkIHRoZSBmb2xsb3dpbmcgZm9vdG5vdGUgdG8gdGhlIGVmZmVjdHMgY2xhdXNlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+IEFjY29yZGluZyB0byAxMi44IFtjbGFzcy5jb3B5XSwgYW4gaW1wbGVtZW50YXRpb24gaXMgcGVybWl0dGVkCiAgdG8gbm90IHBlcmZvcm0gYSBjb3B5IG9mIGFuIGFyZ3VtZW50LCB0aHVzIGF2b2lkaW5nIHVubmVjZXNzYXJ5CiAgY29waWVzLjwvcD4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5Ud28gcG90ZW50aWFsIGZpeGVzIHdlcmUgc3VnZ2VzdGVkIGJ5IE1hdHQgQXVzdGVybiBhbmQgRGlldG1hcgpL/GhsLCByZXNwZWN0aXZlbHksIDEpIG92ZXJsb2FkaW5nIHdpdGggYXJyYXkgYXJndW1lbnRzLCBhbmQgMikgdXNlIG9mCmEgcmVmZXJlbmNlX3RyYWl0cyBjbGFzcyB3aXRoIGEgc3BlY2lhbGl6YXRpb24gZm9yIGFycmF5cy4gIEFuZHkKS29lbmlnIHN1Z2dlc3RlZCBjaGFuZ2luZyB0byBwYXNzIGJ5IHZhbHVlLiBJbiBkaXNjdXNzaW9uLCBpdCBhcHBlYXJlZAp0aGF0IHRoaXMgd2FzIGEgbXVjaCBzbWFsbGVyIGNoYW5nZSB0byB0aGUgc3RhbmRhcmQgdGhhdCB0aGUgb3RoZXIgdHdvCnN1Z2dlc3Rpb25zLCBhbmQgYW55IGVmZmljaWVuY3kgY29uY2VybnMgd2VyZSBtb3JlIHRoYW4gb2Zmc2V0IGJ5IHRoZQphZHZhbnRhZ2VzIG9mIHRoZSBzb2x1dGlvbi4gVHdvIGltcGxlbWVudG9ycyByZXBvcnRlZCB0aGF0IHRoZQpwcm9wb3NlZCByZXNvbHV0aW9uIHBhc3NlZCB0aGVpciB0ZXN0IHN1aXRlcy48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxODIiPjwvYT4xODIuIEFtYmlndW91cyByZWZlcmVuY2VzIHRvIHNpemVfdDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAxNyBbbGlicmFyeV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQWwgU3RldmVucyA8Yj5EYXRlOjwvYj4gMTk5OS0wOC0xNTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbGlicmFyeSI+aXNzdWVzPC9hPiBpbiBbbGlicmFyeV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPk1hbnkgcmVmZXJlbmNlcyB0byA8dHQ+IHNpemVfdDwvdHQ+IHRocm91Z2hvdXQgdGhlIGRvY3VtZW50Cm9taXQgdGhlIDx0dD4gc3RkOjo8L3R0PiBuYW1lc3BhY2UgcXVhbGlmaWNhdGlvbi48L3A+IDxwPkZvcgpleGFtcGxlLCAxNy40LjMuNSBbcmVwbGFjZW1lbnQuZnVuY3Rpb25zXSBwYXJhZ3JhcGggMjo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPiBvcGVyYXRvciBuZXcoc2l6ZV90KQogb3BlcmF0b3IgbmV3KHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmYW1wOykKIG9wZXJhdG9yIG5ld1tdKHNpemVfdCkKIG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmYW1wOyk8L3ByZT4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ICAgSW4gMTcuNC4zLjUgW3JlcGxhY2VtZW50LmZ1bmN0aW9uc10gcGFyYWdyYXBoIDI6IHJlcGxhY2U6PC9wPgo8YmxvY2txdW90ZT4KPHA+PHR0PiAgICAgLSBvcGVyYXRvciBuZXcoc2l6ZV90KTxicj4KICAgICAtIG9wZXJhdG9yIG5ldyhzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspPGJyPgogICAgIC0gb3BlcmF0b3IgbmV3W10oc2l6ZV90KTxicj4KICAgICAtIG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmYW1wOyk8L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgo8cD4gICAgYnk6PC9wPgo8YmxvY2txdW90ZT4KPHByZT4tIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkKLSBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspCi0gb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpCi0gb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspPC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+SW4gW2xpYi5hbGxvY2F0b3IucmVxdWlyZW1lbnRzXSAyMC4xLjUsIHBhcmFncmFwaCA0OiByZXBsYWNlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+VGhlIHR5cGVkZWYgbWVtYmVycyBwb2ludGVyLCBjb25zdF9wb2ludGVyLCBzaXplX3R5cGUsIGFuZCBkaWZmZXJlbmNlX3R5cGUKICBhcmUgcmVxdWlyZWQgdG8gYmUgVCosIFQgY29uc3QqLCBzaXplX3QsIGFuZCBwdHJkaWZmX3QsIHJlc3BlY3RpdmVseS48L3A+CjwvYmxvY2txdW90ZT4KPHA+Jm5ic3A7Ynk6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5UaGUgdHlwZWRlZiBtZW1iZXJzIHBvaW50ZXIsIGNvbnN0X3BvaW50ZXIsIHNpemVfdHlwZSwgYW5kIGRpZmZlcmVuY2VfdHlwZQogIGFyZSByZXF1aXJlZCB0byBiZSBUKiwgVCBjb25zdCosIHN0ZDo6c2l6ZV90LCBhbmQgc3RkOjpwdHJkaWZmX3QsCiAgcmVzcGVjdGl2ZWx5LjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5JbiBbbGliLmFsbG9jYXRvci5tZW1iZXJzXSAyMC40LjEuMSwgcGFyYWdyYXBocyAzIGFuZCA2OiByZXBsYWNlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+MyBOb3RlczogVXNlcyA6Om9wZXJhdG9yIG5ldyhzaXplX3QpICgxOC40LjEpLjwvcD4KICA8cD42IE5vdGU6IHRoZSBzdG9yYWdlIGlzIG9idGFpbmVkIGJ5IGNhbGxpbmcgOjpvcGVyYXRvciBuZXcoc2l6ZV90KSwgYnV0IGl0CiAgaXMgdW5zcGVjaWZpZWQgd2hlbiBvciBob3cgb2Z0ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZSB1c2Ugb2YgaGludCBpcwogIHVuc3BlY2lmaWVkLCBidXQgaW50ZW5kZWQgYXMgYW4gYWlkIHRvIGxvY2FsaXR5IGlmIGFuIGltcGxlbWVudGF0aW9uIHNvCiAgZGVzaXJlcy48L3A+CjwvYmxvY2txdW90ZT4KPHA+Ynk6PC9wPgo8YmxvY2txdW90ZT4KICA8cD4zIE5vdGVzOiBVc2VzIDo6b3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSAoMTguNC4xKS48L3A+CiAgPHA+NiBOb3RlOiB0aGUgc3RvcmFnZSBpcyBvYnRhaW5lZCBieSBjYWxsaW5nIDo6b3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSwgYnV0CiAgaXQgaXMgdW5zcGVjaWZpZWQgd2hlbiBvciBob3cgb2Z0ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZSB1c2Ugb2YgaGludAogIGlzIHVuc3BlY2lmaWVkLCBidXQgaW50ZW5kZWQgYXMgYW4gYWlkIHRvIGxvY2FsaXR5IGlmIGFuIGltcGxlbWVudGF0aW9uIHNvCiAgZGVzaXJlcy48L3A+CjwvYmxvY2txdW90ZT4KPHA+SW4gW2xpYi5jaGFyLnRyYWl0cy5yZXF1aXJlXSAyMS4xLjEsIHBhcmFncmFwaCAxOiByZXBsYWNlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+SW4gVGFibGUgMzcsIFggZGVub3RlcyBhIFRyYWl0cyBjbGFzcyBkZWZpbmluZyB0eXBlcyBhbmQgZnVuY3Rpb25zIGZvciB0aGUKICBjaGFyYWN0ZXIgY29udGFpbmVyIHR5cGUgQ2hhclQ7IGMgYW5kIGQgZGVub3RlIHZhbHVlcyBvZiB0eXBlIENoYXJUOyBwIGFuZCBxCiAgZGVub3RlIHZhbHVlcyBvZiB0eXBlIGNvbnN0IENoYXJUKjsgcyBkZW5vdGVzIGEgdmFsdWUgb2YgdHlwZSBDaGFyVCo7IG4sIGkgYW5kCiAgaiBkZW5vdGUgdmFsdWVzIG9mIHR5cGUgc2l6ZV90OyBlIGFuZCBmIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBYOjppbnRfdHlwZTsgcG9zCiAgZGVub3RlcyBhIHZhbHVlIG9mIHR5cGUgWDo6cG9zX3R5cGU7IGFuZCBzdGF0ZSBkZW5vdGVzIGEgdmFsdWUgb2YgdHlwZSBYOjpzdGF0ZV90eXBlLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5ieTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkluIFRhYmxlIDM3LCBYIGRlbm90ZXMgYSBUcmFpdHMgY2xhc3MgZGVmaW5pbmcgdHlwZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlCiAgY2hhcmFjdGVyIGNvbnRhaW5lciB0eXBlIENoYXJUOyBjIGFuZCBkIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBDaGFyVDsgcCBhbmQgcQogIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBjb25zdCBDaGFyVCo7IHMgZGVub3RlcyBhIHZhbHVlIG9mIHR5cGUgQ2hhclQqOyBuLCBpIGFuZAogIGogZGVub3RlIHZhbHVlcyBvZiB0eXBlIHN0ZDo6c2l6ZV90OyBlIGFuZCBmIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBYOjppbnRfdHlwZTsKICBwb3MgZGVub3RlcyBhIHZhbHVlIG9mIHR5cGUgWDo6cG9zX3R5cGU7IGFuZCBzdGF0ZSBkZW5vdGVzIGEgdmFsdWUgb2YgdHlwZSBYOjpzdGF0ZV90eXBlLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5JbiBbbGliLmNoYXIudHJhaXRzLnJlcXVpcmVdIDIxLjEuMSwgdGFibGUgMzc6IHJlcGxhY2UgdGhlIHJldHVybiB0eXBlIG9mClg6Omxlbmd0aChwKTogInNpemVfdCIgYnkgInN0ZDo6c2l6ZV90Ii48L3A+CjxwPiAgIEluIFtsaWIuc3RkLml0ZXJhdG9yLnRhZ3NdIDI0LjMuMywgcGFyYWdyYXBoIDI6ICAgIHJlcGxhY2U6PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOzxicj4KICAgIGJ5Ojxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOzwvcD4KPHA+IEluIFtsaWIubG9jYWxlLmN0eXBlXSAyMi4yLjEuMSBwdXQgbmFtZXNwYWNlIHN0ZCB7IC4uLn0gYXJvdW5kIHRoZQpkZWNsYXJhdGlvbiBvZiB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7IGNsYXNzIGN0eXBlLjxicj4KPGJyPgogICBJbiBbbGliLml0ZXJhdG9yLnRyYWl0c10gMjQuMy4xLCBwYXJhZ3JhcGggMiAgICBwdXQgbmFtZXNwYWNlIHN0ZCB7IC4uLn0gYXJvdW5kIHRoZSBkZWNsYXJhdGlvbiBvZjo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHRlbXBsYXRlJmx0O2NsYXNzIEl0ZXJhdG9yJmd0OyBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgdGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyZsdDtUKiZndDs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB0ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzJmx0O2NvbnN0IFQqJmd0OzwvcD4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBiZWxpZXZlcyBjb3JyZWN0aW5nIG5hbWVzIGxpa2UgPHR0PnNpemVfdDwvdHQ+IGFuZAo8dHQ+cHRyZGlmZl90PC90dD4gdG8gPHR0PnN0ZDo6c2l6ZV90PC90dD4gYW5kIDx0dD5zdGQ6OnB0cmRpZmZfdDwvdHQ+CnRvIGJlIGVzc2VudGlhbGx5IGVkaXRvcmlhbC4gIFRoZXJlIHRoZXJlIGNhbid0IGJlIGFub3RoZXIgc2l6ZV90IG9yCnB0cmRpZmZfdCBtZWFudCBhbnl3YXkgYmVjYXVzZSwgYWNjb3JkaW5nIHRvIDE3LjQuMy4yLjQgW2V4dGVybi50eXBlc10sPC9wPgoKPGJsb2NrcXVvdGU+PHA+CkZvciBlYWNoIHR5cGUgVCBmcm9tIHRoZSBTdGFuZGFyZCBDIGxpYnJhcnksIHRoZSB0eXBlcyA6OlQgYW5kIHN0ZDo6VAphcmUgcmVzZXJ2ZWQgdG8gdGhlIGltcGxlbWVudGF0aW9uIGFuZCwgd2hlbiBkZWZpbmVkLCA6OlQgc2hhbGwgYmUKaWRlbnRpY2FsIHRvIHN0ZDo6VC4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPlRoZSBpc3N1ZSBpcyB0cmVhdGVkIGFzIGEgRGVmZWN0IFJlcG9ydCB0byBtYWtlIGV4cGxpY2l0IHRoZSBQcm9qZWN0CkVkaXRvcidzIGF1dGhvcml0eSB0byBtYWtlIHRoaXMgY2hhbmdlLjwvcD4KCjxwPjxpPltQb3N0LVRva3lvOiBOaWNvIEpvc3V0dGlzIHByb3ZpZGVkIHRoZSBhYm92ZSB3b3JkaW5nIGF0IHRoZQpyZXF1ZXN0IG9mIHRoZSBMV0cuXTwvaT48L3A+CgoKPHA+PGk+W1Rvcm9udG86IFRoaXMgaXMgdGFuZ2VudGlhbGx5IHJlbGF0ZWQgdG8gaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOSI+MjI5PC9hPiwgYnV0IG9ubHkgdGFuZ2VudGlhbGx5OiB0aGUgaW50ZW50IG9mIHRoaXMgaXNzdWUgaXMgdG8KYWRkcmVzcyB1c2Ugb2YgdGhlIG5hbWUgPHR0PnNpemVfdDwvdHQ+IGluIGNvbnRleHRzIG91dHNpZGUgb2YKbmFtZXNwYWNlIHN0ZCwgc3VjaCBhcyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgPHR0Pjo6b3BlcmF0b3IgbmV3PC90dD4uClRoZSBwcm9wb3NlZCBjaGFuZ2VzIHNob3VsZCBiZSByZXZpZXdlZCB0byBtYWtlIHN1cmUgdGhleSBhcmUKY29ycmVjdC5dPC9pPjwvcD4KCgo8cD48aT5bcHJlLUNvcGVuaGFnZW46IE5pY28gaGFzIHJldmlld2VkIHRoZSBjaGFuZ2VzIGFuZCBiZWxpZXZlcwp0aGVtIHRvIGJlIGNvcnJlY3QuXTwvaT48L3A+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxODMiPjwvYT4xODMuIEkvTyBzdHJlYW0gbWFuaXB1bGF0b3JzIGRvbid0IHdvcmsgZm9yIHdpZGUgY2hhcmFjdGVyIHN0cmVhbXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNi4zIFtzdGQubWFuaXBdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEFuZHkgU2F3eWVyIDxiPkRhdGU6PC9iPiAxOTk5LTA3LTA3PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdGQubWFuaXAiPmlzc3VlczwvYT4gaW4gW3N0ZC5tYW5pcF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPjI3LjYuMyBbc3RkLm1hbmlwXSBwYXJhZ3JhcGggMyBzYXlzIChjbGF1c2UgbnVtYmVyaW5nIGFkZGVkIGZvcgpleHBvc2l0aW9uKTo8L3A+CjxibG9ja3F1b3RlPgo8cD5SZXR1cm5zOiBBbiBvYmplY3QgcyBvZiB1bnNwZWNpZmllZCB0eXBlIHN1Y2ggdGhhdCBpZiBbMV0gb3V0IGlzIGFuIChpbnN0YW5jZQpvZikgYmFzaWNfb3N0cmVhbSB0aGVuIHRoZSBleHByZXNzaW9uIG91dCZsdDsmbHQ7cyBiZWhhdmVzIGFzIGlmIGYocykgd2VyZQpjYWxsZWQsIGFuZCBpZiBbMl0gaW4gaXMgYW4gKGluc3RhbmNlIG9mKSBiYXNpY19pc3RyZWFtIHRoZW4gdGhlIGV4cHJlc3Npb24KaW4mZ3Q7Jmd0O3MgYmVoYXZlcyBhcyBpZiBmKHMpIHdlcmUgY2FsbGVkLiBXaGVyZSBmIGNhbiBiZSBkZWZpbmVkIGFzOiBpb3NfYmFzZSZhbXA7CmYoaW9zX2Jhc2UmYW1wOyBzdHIsIGlvc19iYXNlOjpmbXRmbGFncyBtYXNrKSB7IC8vIHJlc2V0IHNwZWNpZmllZCBmbGFncwpzdHIuc2V0Zihpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIG1hc2spOyByZXR1cm4gc3RyOyB9IFszXSBUaGUgZXhwcmVzc2lvbgpvdXQmbHQ7Jmx0O3MgaGFzIHR5cGUgb3N0cmVhbSZhbXA7IGFuZCB2YWx1ZSBvdXQuIFs0XSBUaGUgZXhwcmVzc2lvbiBpbiZndDsmZ3Q7cwpoYXMgdHlwZSBpc3RyZWFtJmFtcDsgYW5kIHZhbHVlIGluLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5HaXZlbiB0aGUgZGVmaW5pdGlvbnMgWzFdIGFuZCBbMl0gZm9yIG91dCBhbmQgaW4sIHN1cmVseSBbM10gc2hvdWxkIHJlYWQ6CiJUaGUgZXhwcmVzc2lvbiBvdXQgJmx0OyZsdDsgcyBoYXMgdHlwZSBiYXNpY19vc3RyZWFtJmFtcDsgLi4uIiBhbmQKWzRdIHNob3VsZCByZWFkOiAiVGhlIGV4cHJlc3Npb24gaW4gJmd0OyZndDsgcyBoYXMgdHlwZSBiYXNpY19pc3RyZWFtJmFtcDsKLi4uIjwvcD4KPHA+SWYgdGhlIHdvcmRpbmcgaW4gdGhlIHN0YW5kYXJkIGlzIGNvcnJlY3QsIEkgY2FuIHNlZSBubyB3YXkgb2YgaW1wbGVtZW50aW5nCmFueSBvZiB0aGUgbWFuaXB1bGF0b3JzIHNvIHRoYXQgdGhleSB3aWxsIHdvcmsgd2l0aCB3aWRlIGNoYXJhY3RlciBzdHJlYW1zLjwvcD4KPHA+ZS5nLiB3Y291dCAmbHQ7Jmx0OyBzZXRiYXNlKCAxNiApOzwvcD4KPHA+TXVzdCBoYXZlIHZhbHVlICd3Y291dCcgKHdoaWNoIG1ha2VzIHNlbnNlKSBhbmQgdHlwZSAnb3N0cmVhbSZhbXA7JyAod2hpY2gKZG9lc24ndCkuPC9wPgo8cD5UaGUgc2FtZSAiY3V0J24ncGFzdGUiIHR5cGUgYWxzbyBzZWVtcyB0byBvY2N1ciBpbiBQYXJhcyA0LDUsNyBhbmQKOC4gSW4gYWRkaXRpb24sIFBhcmEgNiBbc2V0ZmlsbF0gaGFzIGEgc2ltaWxhciBlcnJvciwgYnV0IHJlbGF0ZXMgb25seSB0bwpvc3RyZWFtcy48L3A+CjxwPkknZCBiZSBoYXBwaWVyIGlmIHRoZXJlIHdhcyBhIGJldHRlciB3YXkgb2Ygc2F5aW5nIHRoaXMsIHRvIG1ha2UgaXQgY2xlYXIKdGhhdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMgInRoZSBzYW1lIHNwZWNpYWxpemF0aW9uIG9mCmJhc2ljX29zdHJlYW0gYXMgb3V0IiZhbXA7PC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSBzZWN0aW9uIDI3LjYuMyBbc3RkLm1hbmlwXSBleGNlcHQgcGFyYWdyYXBoIDEgd2l0aCB0aGUKZm9sbG93aW5nOjwvcD4KPGJsb2NrcXVvdGU+CjxwPjItIFRoZSB0eXBlIGRlc2lnbmF0ZWQgc21hbmlwIGluIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbgpkZXNjcmlwdGlvbnMgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWVkIGFuZCBtYXkgYmUgZGlmZmVyZW50IGZvciBlYWNoCmZ1bmN0aW9uLjxicj4KPGJyPgo8dHQ+c21hbmlwIHJlc2V0aW9zZmxhZ3MoaW9zX2Jhc2U6OmZtdGZsYWdzIG1hc2spOzwvdHQ+PGJyPgo8YnI+Ci0zLSBSZXR1cm5zOiBBbiBvYmplY3QgcyBvZiB1bnNwZWNpZmllZCB0eXBlIHN1Y2ggdGhhdCBpZiBvdXQgaXMgYW4KaW5zdGFuY2Ugb2YgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7IHRoZW4gdGhlIGV4cHJlc3Npb24Kb3V0Jmx0OyZsdDtzIGJlaGF2ZXMKYXMgaWYgZihzLCBtYXNrKSB3ZXJlIGNhbGxlZCwgb3IgaWYgaW4gaXMgYW4gaW5zdGFuY2Ugb2YKYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7IHRoZW4gdGhlIGV4cHJlc3Npb24gaW4mZ3Q7Jmd0O3MKYmVoYXZlcyBhcyBpZgpmKHMsIG1hc2spIHdlcmUgY2FsbGVkLiBUaGUgZnVuY3Rpb24gZiBjYW4gYmUgZGVmaW5lZCBhczoqPGJyPgo8YnI+CltGb290bm90ZTogVGhlIGV4cHJlc3Npb24gY2luICZndDsmZ3Q7IHJlc2V0aW9zZmxhZ3MoaW9zX2Jhc2U6OnNraXB3cykKY2xlYXJzIGlvc19iYXNlOjpza2lwd3MgaW4gdGhlIGZvcm1hdCBmbGFncyBzdG9yZWQgaW4gdGhlCmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyBvYmplY3QgY2luICh0aGUgc2FtZSBhcyBjaW4gJmd0OyZndDsKbm9za2lwd3MpLCBhbmQgdGhlIGV4cHJlc3Npb24gY291dCAmbHQ7Jmx0OwpyZXNldGlvc2ZsYWdzKGlvc19iYXNlOjpzaG93YmFzZSkgY2xlYXJzCmlvc19iYXNlOjpzaG93YmFzZSBpbiB0aGUgZm9ybWF0IGZsYWdzIHN0b3JlZCBpbiB0aGUKYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7IG9iamVjdCBjb3V0ICh0aGUgc2FtZSBhcyBjb3V0CiZsdDsmbHQ7Cm5vc2hvd2Jhc2UpLiAtLS0gZW5kIGZvb3Rub3RlXTxicj4KPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPHR0Pmlvc19iYXNlJmFtcDsgZihpb3NfYmFzZSZhbXA7IHN0ciwgaW9zX2Jhc2U6OmZtdGZsYWdzIG1hc2spPGJyPgombmJzcDsmbmJzcDsgezxicj4KJm5ic3A7Jm5ic3A7IC8vICByZXNldCBzcGVjaWZpZWQgZmxhZ3M8YnI+CiZuYnNwOyZuYnNwOyBzdHIuc2V0Zihpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIG1hc2spOzxicj4KJm5ic3A7Jm5ic3A7IHJldHVybiBzdHI7PGJyPgombmJzcDsmbmJzcDsgfTxicj4KPC90dD48YnI+ClRoZSBleHByZXNzaW9uIG91dCZsdDsmbHQ7cyBoYXMgdHlwZSBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgb3V0LgpUaGUgZXhwcmVzc2lvbiBpbiZndDsmZ3Q7cyBoYXMgdHlwZSBiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgaW4uPGJyPgo8YnI+CiZuYnNwOzx0dD5zbWFuaXAgc2V0aW9zZmxhZ3MoaW9zX2Jhc2U6OmZtdGZsYWdzIG1hc2spOzwvdHQ+PGJyPgo8YnI+Ci00LSBSZXR1cm5zOiBBbiBvYmplY3QgcyBvZiB1bnNwZWNpZmllZCB0eXBlIHN1Y2ggdGhhdCBpZiBvdXQgaXMgYW4KaW5zdGFuY2Ugb2YgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7IHRoZW4gdGhlIGV4cHJlc3Npb24Kb3V0Jmx0OyZsdDtzIGJlaGF2ZXMKYXMgaWYgZihzLCBtYXNrKSB3ZXJlIGNhbGxlZCwgb3IgaWYgaW4gaXMgYW4gaW5zdGFuY2Ugb2YKYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7IHRoZW4gdGhlIGV4cHJlc3Npb24gaW4mZ3Q7Jmd0O3MKYmVoYXZlcyBhcyBpZiBmKHMsCm1hc2spIHdlcmUgY2FsbGVkLiBUaGUgZnVuY3Rpb24gZiBjYW4gYmUgZGVmaW5lZCBhczo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5pb3NfYmFzZSZhbXA7IGYoaW9zX2Jhc2UmYW1wOyBzdHIsIGlvc19iYXNlOjpmbXRmbGFncyBtYXNrKTxicj4KJm5ic3A7Jm5ic3A7IHs8YnI+CiZuYnNwOyZuYnNwOyAvLyAgc2V0IHNwZWNpZmllZCBmbGFnczxicj4KJm5ic3A7Jm5ic3A7IHN0ci5zZXRmKG1hc2spOzxicj4KJm5ic3A7Jm5ic3A7IHJldHVybiBzdHI7PGJyPgombmJzcDsmbmJzcDsgfTxicj4KPC90dD48YnI+ClRoZSBleHByZXNzaW9uIG91dCZsdDsmbHQ7cyBoYXMgdHlwZSBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgb3V0LgpUaGUgZXhwcmVzc2lvbiBpbiZndDsmZ3Q7cyBoYXMgdHlwZSBiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgaW4uPGJyPgo8YnI+Cjx0dD5zbWFuaXAgc2V0YmFzZShpbnQgYmFzZSk7PC90dD48YnI+Cjxicj4KLTUtIFJldHVybnM6IEFuIG9iamVjdCBzIG9mIHVuc3BlY2lmaWVkIHR5cGUgc3VjaCB0aGF0IGlmIG91dCBpcyBhbgppbnN0YW5jZSBvZiBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsgdGhlbiB0aGUgZXhwcmVzc2lvbgpvdXQmbHQ7Jmx0O3MgYmVoYXZlcwphcyBpZiBmKHMsIGJhc2UpIHdlcmUgY2FsbGVkLCBvciBpZiBpbiBpcyBhbiBpbnN0YW5jZSBvZgpiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsgdGhlbiB0aGUgZXhwcmVzc2lvbiBpbiZndDsmZ3Q7cwpiZWhhdmVzIGFzIGlmIGYocywKYmFzZSkgd2VyZSBjYWxsZWQuIFRoZSBmdW5jdGlvbiBmIGNhbiBiZSBkZWZpbmVkIGFzOjxicj4KPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPHR0Pmlvc19iYXNlJmFtcDsgZihpb3NfYmFzZSZhbXA7IHN0ciwgaW50IGJhc2UpPGJyPgombmJzcDsmbmJzcDsgezxicj4KJm5ic3A7Jm5ic3A7IC8vICBzZXQgIGJhc2VmaWVsZDxicj4KJm5ic3A7Jm5ic3A7IHN0ci5zZXRmKGJhc2UgPT0gIDggPyBpb3NfYmFzZTo6b2N0IDo8YnI+CiZuYnNwOyZuYnNwOyBiYXNlID09IDEwID8gaW9zX2Jhc2U6OmRlYyA6PGJyPgombmJzcDsmbmJzcDsgYmFzZSA9PSAxNiA/IGlvc19iYXNlOjpoZXggOjxicj4KJm5ic3A7Jm5ic3A7IGlvc19iYXNlOjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7PGJyPgombmJzcDsmbmJzcDsgcmV0dXJuIHN0cjs8YnI+CiZuYnNwOyZuYnNwOyB9PGJyPgo8L3R0Pjxicj4KVGhlIGV4cHJlc3Npb24gb3V0Jmx0OyZsdDtzIGhhcyB0eXBlIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IGFuZCB2YWx1ZSBvdXQuClRoZSBleHByZXNzaW9uIGluJmd0OyZndDtzIGhhcyB0eXBlIGJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IGFuZCB2YWx1ZSBpbi48YnI+Cjxicj4KPHR0PnNtYW5pcCBzZXRmaWxsKGNoYXJfdHlwZSBjKTs8YnI+CjwvdHQ+PGJyPgotNi0gUmV0dXJuczogQW4gb2JqZWN0IHMgb2YgdW5zcGVjaWZpZWQgdHlwZSBzdWNoIHRoYXQgaWYgb3V0IGlzIChvciBpcwpkZXJpdmVkIGZyb20pIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyBhbmQgYyBoYXMgdHlwZSBjaGFyVAp0aGVuIHRoZQpleHByZXNzaW9uIG91dCZsdDsmbHQ7cyBiZWhhdmVzIGFzIGlmIGYocywgYykgd2VyZSBjYWxsZWQuIFRoZSBmdW5jdGlvbgpmIGNhbiBiZQpkZWZpbmVkIGFzOjxicj4KPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPHR0PnRlbXBsYXRlJmx0O2NsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMmZ3Q7PGJyPgombmJzcDsmbmJzcDsgYmFzaWNfaW9zJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBmKGJhc2ljX2lvcyZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgc3RyLCBjaGFyVCBjKTxicj4KJm5ic3A7Jm5ic3A7IHs8YnI+CiZuYnNwOyZuYnNwOyAvLyAgc2V0IGZpbGwgY2hhcmFjdGVyPGJyPgombmJzcDsmbmJzcDsgc3RyLmZpbGwoYyk7PGJyPgombmJzcDsmbmJzcDsgcmV0dXJuIHN0cjs8YnI+CiZuYnNwOyZuYnNwOyB9PGJyPgo8L3R0Pjxicj4KVGhlIGV4cHJlc3Npb24gb3V0Jmx0OyZsdDtzIGhhcyB0eXBlIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IGFuZCB2YWx1ZSBvdXQuPGJyPgo8YnI+Cjx0dD5zbWFuaXAgc2V0cHJlY2lzaW9uKGludCBuKTs8L3R0Pjxicj4KPGJyPgotNy0gUmV0dXJuczogQW4gb2JqZWN0IHMgb2YgdW5zcGVjaWZpZWQgdHlwZSBzdWNoIHRoYXQgaWYgb3V0IGlzIGFuCmluc3RhbmNlIG9mIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyB0aGVuIHRoZSBleHByZXNzaW9uCm91dCZsdDsmbHQ7cyBiZWhhdmVzCmFzIGlmIGYocywgbikgd2VyZSBjYWxsZWQsIG9yIGlmIGluIGlzIGFuIGluc3RhbmNlIG9mCmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyB0aGVuIHRoZSBleHByZXNzaW9uIGluJmd0OyZndDtzCmJlaGF2ZXMgYXMgaWYgZihzLCBuKQp3ZXJlIGNhbGxlZC4gVGhlIGZ1bmN0aW9uIGYgY2FuIGJlIGRlZmluZWQgYXM6PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8dHQ+aW9zX2Jhc2UmYW1wOyBmKGlvc19iYXNlJmFtcDsgc3RyLCBpbnQgbik8YnI+CiZuYnNwOyZuYnNwOyB7PGJyPgombmJzcDsmbmJzcDsgLy8gIHNldCBwcmVjaXNpb248YnI+CiZuYnNwOyZuYnNwOyBzdHIucHJlY2lzaW9uKG4pOzxicj4KJm5ic3A7Jm5ic3A7IHJldHVybiBzdHI7PGJyPgombmJzcDsmbmJzcDsgfTxicj4KPC90dD48YnI+ClRoZSBleHByZXNzaW9uIG91dCZsdDsmbHQ7cyBoYXMgdHlwZSBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgb3V0LgpUaGUgZXhwcmVzc2lvbiBpbiZndDsmZ3Q7cyBoYXMgdHlwZSBiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgaW48YnI+Ci48YnI+Cjx0dD5zbWFuaXAgc2V0dyhpbnQgbik7PGJyPgo8L3R0Pjxicj4KLTgtIFJldHVybnM6IEFuIG9iamVjdCBzIG9mIHVuc3BlY2lmaWVkIHR5cGUgc3VjaCB0aGF0IGlmIG91dCBpcyBhbgppbnN0YW5jZSBvZiBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsgdGhlbiB0aGUgZXhwcmVzc2lvbgpvdXQmbHQ7Jmx0O3MgYmVoYXZlcwphcyBpZiBmKHMsIG4pIHdlcmUgY2FsbGVkLCBvciBpZiBpbiBpcyBhbiBpbnN0YW5jZSBvZgpiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsgdGhlbiB0aGUgZXhwcmVzc2lvbiBpbiZndDsmZ3Q7cwpiZWhhdmVzIGFzIGlmIGYocywgbikKd2VyZSBjYWxsZWQuIFRoZSBmdW5jdGlvbiBmIGNhbiBiZSBkZWZpbmVkIGFzOjxicj4KPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPHR0Pmlvc19iYXNlJmFtcDsgZihpb3NfYmFzZSZhbXA7IHN0ciwgaW50IG4pPGJyPgombmJzcDsmbmJzcDsgezxicj4KJm5ic3A7Jm5ic3A7IC8vICBzZXQgd2lkdGg8YnI+CiZuYnNwOyZuYnNwOyBzdHIud2lkdGgobik7PGJyPgombmJzcDsmbmJzcDsgcmV0dXJuIHN0cjs8YnI+CiZuYnNwOyZuYnNwOyB9PGJyPgo8L3R0Pjxicj4KVGhlIGV4cHJlc3Npb24gb3V0Jmx0OyZsdDtzIGhhcyB0eXBlCmJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IGFuZCB2YWx1ZSBvdXQuICBUaGUgZXhwcmVzc2lvbgppbiZndDsmZ3Q7cyBoYXMgdHlwZSBiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUKaW4uCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IEFuZHkgU2F3eWVyIGFuZCBCZW1hbiBEYXdlcyB3aWxsIHdvcmsgdG8gaW1wcm92ZSB0aGUgd29yZGluZyBvZgp0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbi5dPC9pPjwvcD4KCgo8cD48aT5bVG9reW8gLSBUaGUgTFdHIG5vdGVkIHRoYXQgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjE2Ij4yMTY8L2E+IGludm9sdmVzCnRoZSBzYW1lIHBhcmFncmFwaHMuXTwvaT48L3A+CgoKPHA+PGk+W1Bvc3QtVG9reW86IFRoZSBpc3N1ZXMgbGlzdCBtYWludGFpbmVyIGNvbWJpbmVkIHRoZSBwcm9wb3NlZApyZXNvbHV0aW9uIG9mIHRoaXMgaXNzdWUgd2l0aCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBmb3IgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjE2Ij4yMTY8L2E+IGFzIHRoZXkgYm90aCBpbnZvbHZlZCB0aGUgc2FtZSBwYXJhZ3JhcGhzLCBhbmQgd2VyZSBzbwppbnRlcnR3aW5lZCB0aGF0IGRlYWxpbmcgd2l0aCB0aGVtIHNlcGFyYXRlbHkgYXBwZWFyIGZyYXVnaHQgd2l0aAplcnJvci4gIFRoZSBmdWxsIHRleHQgd2FzIHN1cHBsaWVkIGJ5IEJpbGwgUGxhdWdlcjsgaXQgd2FzIGNyb3NzCmNoZWNrZWQgYWdhaW5zdCBjaGFuZ2VzIHN1cHBsaWVkIGJ5IEFuZHkgU2F3eWVyLiBJdCBzaG91bGQgYmUgZnVydGhlcgpjaGVja2VkIGJ5IHRoZSBMV0cuXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE4NCI+PC9hPjE4NC4gbnVtZXJpY19saW1pdHMmbHQ7Ym9vbCZndDsgd29yZGluZyBwcm9ibGVtczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAxOC4yLjEuNSBbbnVtZXJpYy5zcGVjaWFsXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBHYWJyaWVsIERvcyBSZWlzIDxiPkRhdGU6PC9iPiAxOTk5LTA3LTIxPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNudW1lcmljLnNwZWNpYWwiPmlzc3VlczwvYT4gaW4gW251bWVyaWMuc3BlY2lhbF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPmJvb2xzIGFyZSBkZWZpbmVkIGJ5IHRoZSBzdGFuZGFyZCB0byBiZSBvZiBpbnRlZ2VyIHR5cGVzLCBhcyBwZXIKMy45LjEgW2Jhc2ljLmZ1bmRhbWVudGFsXSBwYXJhZ3JhcGggNy4gIEhvd2V2ZXIgImludGVnZXIgdHlwZXMiCnNlZW1zIHRvIGhhdmUgYSBzcGVjaWFsIG1lYW5pbmcgZm9yIHRoZSBhdXRob3Igb2YgMTguMi4gVGhlIG5ldCBlZmZlY3QKaXMgYW4gdW5jbGVhciBhbmQgY29uZnVzaW5nIHNwZWNpZmljYXRpb24gZm9yCm51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7IGFzIGV2aWRlbmNlZCBiZWxvdy48L3A+Cgo8cD4xOC4yLjEuMi83IHNheXMgbnVtZXJpY19saW1pdHMmbHQ7Jmd0Ozo6ZGlnaXRzIGlzLCBmb3IgYnVpbHQtaW4gaW50ZWdlcgp0eXBlcywgdGhlIG51bWJlciBvZiBub24tc2lnbiBiaXRzIGluIHRoZSByZXByZXNlbnRhdGlvbi48L3A+Cgo8cD40LjUvNCBzdGF0ZXMgdGhhdCBhIGJvb2wgcHJvbW90ZXMgdG8gaW50IDsgd2hlcmVhcyA0LjEyLzEgc2F5cyBhbnkgbm9uIHplcm8KYXJpdGhtZXRpY2FsIHZhbHVlIGNvbnZlcnRzIHRvIHRydWUuPC9wPgoKPHA+SSBkb24ndCB0aGluayBpdCBtYWtlcyBzZW5zZSBhdCBhbGwgdG8gcmVxdWlyZQpudW1lcmljX2xpbWl0cyZsdDtib29sJmd0Ozo6ZGlnaXRzIGFuZCBudW1lcmljX2xpbWl0cyZsdDtib29sJmd0Ozo6ZGlnaXRzMTAgdG8KYmUgbWVhbmluZ2Z1bC48L3A+Cgo8cD5UaGUgc3RhbmRhcmQgZGVmaW5lcyB3aGF0IGNvbnN0aXR1dGVzIGEgc2lnbmVkIChyZXNwLiB1bnNpZ25lZCkgaW50ZWdlcgp0eXBlcy4gSXQgZG9lc24ndCBjYXRlZ29yaXplIGJvb2wgYXMgYmVpbmcgc2lnbmVkIG9yIHVuc2lnbmVkLiBBbmQgdGhlIHNldCBvZgp2YWx1ZXMgb2YgYm9vbCB0eXBlIGhhcyBvbmx5IHR3byBlbGVtZW50cy48L3A+Cgo8cD5JIGRvbid0IHRoaW5rIGl0IG1ha2VzIHNlbnNlIHRvIHJlcXVpcmUgbnVtZXJpY19saW1pdHMmbHQ7Ym9vbCZndDs6OmlzX3NpZ25lZAp0byBiZSBtZWFuaW5nZnVsLjwvcD4KCjxwPjE4LjIuMS4yLzE4IGZvciBudW1lcmljX2xpbWl0cyZsdDtpbnRlZ2VyX3R5cGUmZ3Q7OjpyYWRpeCZuYnNwOyBzYXlzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+Rm9yIGludGVnZXIgdHlwZXMsIHNwZWNpZmllcyB0aGUgYmFzZSBvZiB0aGUgcmVwcmVzZW50YXRpb24uMTg2KTwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+VGhpcyBkaXNwb3NpdGlvbiBpcyBhdCBiZXN0IG1pc2xlYWRpbmcgYW5kIGNvbmZ1c2luZyBmb3IgdGhlIHN0YW5kYXJkCnJlcXVpcmVzIGEgInB1cmUgYmluYXJ5IG51bWVyYXRpb24gc3lzdGVtIiBmb3IgaW50ZWdlciB0eXBlcyBhcyBwZXIKMy45LjEvNzwvcD4KCjxwPlRoZSBmb290bm90ZSAxODYpIHNheXM6ICJEaXN0aW5ndWlzaGVzIHR5cGVzIHdpdGggYmFzZSBvdGhlciB0aGFuIDIgKGUuZwpCQ0QpLiImbmJzcDsgVGhpcyBhbHNvIGVycm9uZW91cyBhcyB0aGUgc3RhbmRhcmQgbmV2ZXIgZGVmaW5lcyBhbnkgaW50ZWdlcgp0eXBlcyB3aXRoIGJhc2UgcmVwcmVzZW50YXRpb24gb3RoZXIgdGhhbiAyLjwvcD4KCjxwPkZ1cnRoZXJtb3JlLCBudW1lcmljX2xpbWl0cyZsdDtib29sJmd0Ozo6aXNfbW9kdWxvIGFuZApudW1lcmljX2xpbWl0cyZsdDtib29sJmd0Ozo6aXNfc2lnbmVkIGhhdmUgc2ltaWxhciBwcm9ibGVtcy48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BcHBlbmQgdG8gdGhlIGVuZCBvZiAxOC4yLjEuNSBbbnVtZXJpYy5zcGVjaWFsXTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlRoZSBzcGVjaWFsaXphdGlvbiBmb3IgYm9vbCBzaGFsbCBiZSBwcm92aWRlZCBhcyBmb2xsb3dzOjwvcD4KICA8cHJlPiAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIHRlbXBsYXRlJmx0OyZndDsgY2xhc3MgbnVtZXJpY19saW1pdHMmbHQ7Ym9vbCZndDsgewogICAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CiAgICAgICAgIHN0YXRpYyBib29sIG1pbigpIHRocm93KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgc3RhdGljIGJvb2wgbWF4KCkgdGhyb3coKSB7IHJldHVybiB0cnVlOyB9CgogICAgICAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMgPSAxOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMxMCA9IDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50ICByYWRpeCA9IDI7CiAgICAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpIHsgcmV0dXJuIDA7IH0KICAgICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJyb3IoKSB0aHJvdygpIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgIG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgIG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCAgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCAgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CiAgICAgICAgIHN0YXRpYyBib29sIGluZmluaXR5KCkgdGhyb3coKSB7IHJldHVybiAwOyB9CiAgICAgICAgIHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRocm93KCkgeyByZXR1cm4gMDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVybiAwOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICAgICB9OwogICAgIH08L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1Rva3lvOiZuYnNwOyBUaGUgTFdHIGRlc2lyZXMgd29yZGluZyB0aGF0IHNwZWNpZmllcyBleGFjdCB2YWx1ZXMKcmF0aGVyIHRoYW4gbW9yZSBnZW5lcmFsIHdvcmRpbmcgaW4gdGhlIG9yaWdpbmFsIHByb3Bvc2VkCnJlc29sdXRpb24uXTwvaT48L3A+CgoKPHA+PGk+W1Bvc3QtVG9reW86Jm5ic3A7IEF0IHRoZSByZXF1ZXN0IG9mIHRoZSBMV0cgaW4gVG9reW8sIE5pY28KSm9zdXR0aXMgcHJvdmlkZWQgdGhlIGFib3ZlIHdvcmRpbmcuXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE4NSI+PC9hPjE4NS4gUXVlc3Rpb25hYmxlIHVzZSBvZiB0ZXJtICJpbmxpbmUiPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjYgW2Z1bmN0aW9uLm9iamVjdHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFVLIFBhbmVsIDxiPkRhdGU6PC9iPiAxOTk5LTA3LTI2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmdW5jdGlvbi5vYmplY3RzIj5pc3N1ZXM8L2E+IGluIFtmdW5jdGlvbi5vYmplY3RzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+UGFyYWdyYXBoIDQgb2YgMjAuNiBbZnVuY3Rpb24ub2JqZWN0c10gc2F5czo8L3A+CjxibG9ja3F1b3RlPgogIDxwPiZuYnNwO1tFeGFtcGxlOiBUbyBuZWdhdGUgZXZlcnkgZWxlbWVudCBvZiBhOiB0cmFuc2Zvcm0oYS5iZWdpbigpLCBhLmVuZCgpLAogIGEuYmVnaW4oKSwgbmVnYXRlJmx0O2RvdWJsZSZndDsoKSk7IFRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucyB3aWxsIGlubGluZQogIHRoZSBhZGRpdGlvbiBhbmQgdGhlIG5lZ2F0aW9uLiBlbmQgZXhhbXBsZV08L3A+CjwvYmxvY2txdW90ZT4KPHA+KE5vdGU6IFRoZSAiYWRkaXRpb24iIHJlZmVycmVkIHRvIGluIHRoZSBhYm92ZSBpcyBpbiBwYXJhIDMpIHdlIGNhbgpmaW5kIG5vIG90aGVyIHdvcmRpbmcsIGV4Y2VwdCB0aGlzIChub24tbm9ybWF0aXZlKSBleGFtcGxlIHdoaWNoIHN1Z2dlc3RzIHRoYXQKYW55ICJpbmxpbmluZyIgd2lsbCB0YWtlIHBsYWNlIGluIHRoaXMgY2FzZS48L3A+CjxwPkluZGVlZCBib3RoOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+MTcuNC40LjMgR2xvYmFsIEZ1bmN0aW9ucyBbbGliLmdsb2JhbC5mdW5jdGlvbnNdIDEgSXQgaXMKICB1bnNwZWNpZmllZCB3aGV0aGVyIGFueSBnbG9iYWwgZnVuY3Rpb25zIGluIHRoZSBDKysgU3RhbmRhcmQgTGlicmFyeQogIGFyZSBkZWZpbmVkIGFzIGlubGluZSAoNy4xLjIpLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5hbmQ8L3A+CjxibG9ja3F1b3RlPgogIDxwPjE3LjQuNC40IE1lbWJlciBGdW5jdGlvbnMgW2xpYi5tZW1iZXIuZnVuY3Rpb25zXSAxIEl0IGlzCiAgdW5zcGVjaWZpZWQgd2hldGhlciBhbnkgbWVtYmVyIGZ1bmN0aW9ucyBpbiB0aGUgQysrIFN0YW5kYXJkIExpYnJhcnkKICBhcmUgZGVmaW5lZCBhcyBpbmxpbmUgKDcuMS4yKS48L3A+CjwvYmxvY2txdW90ZT4KPHA+dGFrZSBjYXJlIHRvIHN0YXRlIHRoYXQgdGhpcyBtYXkgaW5kZWVkIE5PVCBiZSB0aGUgY2FzZS48L3A+CjxwPlRodXMgdGhlIGV4YW1wbGUgIm1hbmRhdGVzIiBiZWhhdmlvciB0aGF0IGlzIGV4cGxpY2l0bHkKbm90IHJlcXVpcmVkIGVsc2V3aGVyZS48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMC42IFtmdW5jdGlvbi5vYmplY3RzXSBwYXJhZ3JhcGggMSwgcmVtb3ZlIHRoZSBzZW50ZW5jZTo8L3A+CjxibG9ja3F1b3RlPgo8cD5UaGV5IGFyZSBpbXBvcnRhbnQgZm9yIHRoZSBlZmZlY3RpdmUgdXNlIG9mIHRoZSBsaWJyYXJ5LjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5SZW1vdmUgMjAuNiBbZnVuY3Rpb24ub2JqZWN0c10gcGFyYWdyYXBoIDIsIHdoaWNoIHJlYWRzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+IFVzaW5nIGZ1bmN0aW9uIG9iamVjdHMgdG9nZXRoZXIgd2l0aCBmdW5jdGlvbiB0ZW1wbGF0ZXMKICBpbmNyZWFzZXMgdGhlIGV4cHJlc3NpdmUgcG93ZXIgb2YgdGhlIGxpYnJhcnkgYXMgd2VsbCBhcyBtYWtpbmcgdGhlCiAgcmVzdWx0aW5nIGNvZGUgbXVjaCBtb3JlIGVmZmljaWVudC48L3A+CjwvYmxvY2txdW90ZT4KPHA+SW4gMjAuNiBbZnVuY3Rpb24ub2JqZWN0c10gcGFyYWdyYXBoIDQsIHJlbW92ZSB0aGUgc2VudGVuY2U6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5UaGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMgd2lsbCBpbmxpbmUgdGhlIGFkZGl0aW9uIGFuZCB0aGUKICBuZWdhdGlvbi48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltLb25hOiBUaGUgTFdHIGFncmVlZCB0aGVyZSB3YXMgYSBkZWZlY3QuXTwvaT48L3A+Cgo8cD48aT5bVG9reW86IFRoZSBMV0cgY3JhZnRlZCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbi5dPC9pPjwvcD4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTg2Ij48L2E+MTg2LiBiaXRzZXQ6OnNldCgpIHNlY29uZCBwYXJhbWV0ZXIgc2hvdWxkIGJlIGJvb2w8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMy41LjIgW2JpdHNldC5tZW1iZXJzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEYXJpbiBBZGxlciA8Yj5EYXRlOjwvYj4gMTk5OS0wOC0xMzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYml0c2V0Lm1lbWJlcnMiPmlzc3VlczwvYT4gaW4gW2JpdHNldC5tZW1iZXJzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SW4gc2VjdGlvbiAyMy4zLjUuMiBbYml0c2V0Lm1lbWJlcnNdLCBwYXJhZ3JhcGggMTMgZGVmaW5lcyB0aGUKYml0c2V0OjpzZXQgb3BlcmF0aW9uIHRvIHRha2UgYSBzZWNvbmQgcGFyYW1ldGVyIG9mIHR5cGUgaW50LiBUaGUKZnVuY3Rpb24gdGVzdHMgd2hldGhlciB0aGlzIHZhbHVlIGlzIG5vbi16ZXJvIHRvIGRldGVybWluZSB3aGV0aGVyIHRvCnNldCB0aGUgYml0IHRvIHRydWUgb3IgZmFsc2UuIFRoZSB0eXBlIG9mIHRoaXMgc2Vjb25kIHBhcmFtZXRlciBzaG91bGQKYmUgYm9vbC4gRm9yIG9uZSB0aGluZywgdGhlIGludGVudCBpcyB0byBzcGVjaWZ5IGEgQm9vbGVhbiB2YWx1ZS4gRm9yCmFub3RoZXIsIHRoZSByZXN1bHQgdHlwZSBmcm9tIHRlc3QoKSBpcyBib29sLiBJbiBhZGRpdGlvbiwgaXQncwpwb3NzaWJsZSB0byBzbGljZSBhbiBpbnRlZ2VyIHRoYXQncyBsYXJnZXIgdGhhbiBhbiBpbnQuIFRoaXMgY2FuJ3QKaGFwcGVuIHdpdGggYm9vbCwgc2luY2UgY29udmVyc2lvbiB0byBib29sIGhhcyB0aGUgc2VtYW50aWMgb2YKdHJhbnNsYXRpbmcgMCB0byBmYWxzZSBhbmQgYW55IG5vbi16ZXJvIHZhbHVlIHRvIHRydWUuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjMuMy41IFt0ZW1wbGF0ZS5iaXRzZXRdIFBhcmEgMSBSZXBsYWNlOjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+Yml0c2V0Jmx0O04mZ3Q7JmFtcDsgc2V0KHNpemVfdCBwb3MsIGludCB2YWwgPSB0cnVlICk7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPldpdGg6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPmJpdHNldCZsdDtOJmd0OyZhbXA7IHNldChzaXplX3QgcG9zLCBib29sIHZhbCA9IHRydWUgKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5JbiAyMy4zLjUuMiBbYml0c2V0Lm1lbWJlcnNdIFBhcmEgMTIoLjUpIFJlcGxhY2U6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPmJpdHNldCZsdDtOJmd0OyZhbXA7IHNldChzaXplX3QgcG9zLCBpbnQgdmFsID0gMSApOzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPldpdGg6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPmJpdHNldCZsdDtOJmd0OyZhbXA7IHNldChzaXplX3QgcG9zLCBib29sIHZhbCA9IHRydWUgKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IFRoZSBMV0cgYWdyZWVzIHdpdGggdGhlIGRlc2NyaXB0aW9uLiZuYnNwOyBBbmR5IFNhd3llciB3aWxsIHdvcmsKb24gYmV0dGVyIFAvUiB3b3JkaW5nLl08L2k+PC9wPgoKPHA+PGk+W1Bvc3QtVG9reW86IEFuZHkgcHJvdmlkZWQgdGhlIGFib3ZlIHdvcmRpbmcuXTwvaT48L3A+CgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD48dHQ+Ym9vbDwvdHQ+IGlzIGEgYmV0dGVyIGNob2ljZS4gIEl0IGlzIGJlbGlldmVkIHRoYXQgYmluYXJ5CmNvbXBhdGliaWxpdHkgaXMgbm90IGFuIGlzc3VlLCBiZWNhdXNlIHRoaXMgbWVtYmVyIGZ1bmN0aW9uIGlzCnVzdWFsbHkgaW1wbGVtZW50ZWQgYXMgPHR0PmlubGluZTwvdHQ+LCBhbmQgYmVjYXVzZSBpdCBpcyBhbHJlYWR5CnRoZSBjYXNlIHRoYXQgdXNlcnMgY2Fubm90IHJlbHkgb24gdGhlIHR5cGUgb2YgYSBwb2ludGVyIHRvIGEKbm9udmlydHVhbCBtZW1iZXIgb2YgYSBzdGFuZGFyZCBsaWJyYXJ5IGNsYXNzLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxODciPjwvYT4xODcuIGl0ZXJfc3dhcCB1bmRlcnNwZWNpZmllZDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNS4yLjMgW2FsZy5zd2FwXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBBbmRyZXcgS29lbmlnIDxiPkRhdGU6PC9iPiAxOTk5LTA4LTE0PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNhbGcuc3dhcCI+aXNzdWVzPC9hPiBpbiBbYWxnLnN3YXBdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgZGVzY3JpcHRpb24gb2YgaXRlcl9zd2FwIGluIDI1LjIuMiBwYXJhZ3JhcGggNyxzYXlzIHRoYXQgaXQKYGBleGNoYW5nZXMgdGhlIHZhbHVlcycnIG9mIHRoZSBvYmplY3RzIHRvIHdoaWNoIHR3byBpdGVyYXRvcnMKcmVmZXIuPGJyPiA8YnI+IFdoYXQgaXQgZG9lc24ndCBzYXkgaXMgd2hldGhlciBpdCBkb2VzIHNvIHVzaW5nIHN3YXAKb3IgdXNpbmcgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IgYW5kIGNvcHkgY29uc3RydWN0b3IuPGJyPiA8YnI+IFRoaXMKcXVlc3Rpb24gaXMgYW4gaW1wb3J0YW50IG9uZSB0byBhbnN3ZXIsIGJlY2F1c2Ugc3dhcCBpcyBzcGVjaWFsaXplZCB0bwp3b3JrIGVmZmljaWVudGx5IGZvciBzdGFuZGFyZCBjb250YWluZXJzLjxicj4gRm9yIGV4YW1wbGU6PC9wPgo8YmxvY2txdW90ZT4KPHByZT52ZWN0b3ImbHQ7aW50Jmd0OyB2MSwgdjI7Cml0ZXJfc3dhcCgmYW1wO3YxLCAmYW1wO3YyKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5JcyB0aGlzIGNhbGwgdG8gaXRlcl9zd2FwIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBzd2FwKHYxLCB2Mik/Jm5ic3A7Ck9yIGlzIGl0IGVxdWl2YWxlbnQgdG88L3A+CjxibG9ja3F1b3RlPgo8cHJlPnsKdmVjdG9yJmx0O2ludCZndDsgdGVtcCA9IHYxOwp2MSA9IHYyOwp2MiA9IHRlbXA7Cn08L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5UaGUgZmlyc3QgYWx0ZXJuYXRpdmUgaXMgTygxKTsgdGhlIHNlY29uZCBpcyBPKG4pLjwvcD4KPHA+QSBMV0cgbWVtYmVyLCBEYXZlIEFicmFoYW1zLCBjb21tZW50czo8L3A+CjxibG9ja3F1b3RlPgo8cD5Ob3QgYW4gb2JqZWN0aW9uIG5lY2Vzc2FyaWx5LCBidXQgSSB3YW50IHRvIHBvaW50IG91dCB0aGUgY29zdCBvZgp0aGF0IHJlcXVpcmVtZW50OjwvcD4KICA8YmxvY2txdW90ZT4KPHA+PHR0Pml0ZXJfc3dhcChsaXN0Jmx0O1QmZ3Q7OjppdGVyYXRvciwgbGlzdCZsdDtUJmd0Ozo6aXRlcmF0b3IpPC90dD48L3A+CiAgPC9ibG9ja3F1b3RlPgo8cD5jYW4gY3VycmVudGx5IGJlIHNwZWNpYWxpemVkIHRvIGJlIG1vcmUgZWZmaWNpZW50IHRoYW4KaXRlcl9zd2FwKFQqLFQqKSBmb3IgbWFueSBUIChieSB1c2luZyBzcGxpY2luZykuIFlvdXIgcHJvcG9zYWwgd291bGQKbWFrZSB0aGF0IG9wdGltaXphdGlvbiBpbGxlZ2FsLiZuYnNwOzwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IFRoZSBMV0cgbm90ZXMgdGhlIG9yaWdpbmFsIG5lZWQgZm9yIGl0ZXJfc3dhcCB3YXMgcHJveHkgaXRlcmF0b3JzCndoaWNoIGFyZSBubyBsb25nZXIgcGVybWl0dGVkLl08L2k+PC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgZWZmZWN0IGNsYXVzZSBvZiBpdGVyX3N3YXAgaW4gMjUuMi4yIHBhcmFncmFwaCA3IGZyb206PC9wPgo8YmxvY2txdW90ZT4KPHA+RXhjaGFuZ2VzIHRoZSB2YWx1ZXMgcG9pbnRlZCB0byBieSB0aGUgdHdvIGl0ZXJhdG9ycyBhIGFuZCBiLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzwvcD4KPGJsb2NrcXVvdGU+CjxwPjx0dD5zd2FwKCphLCAqYik8L3R0Pi48L3A+CjwvYmxvY2txdW90ZT4KCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkl0J3MgdXNlZnVsIHRvIHNheSBqdXN0IHdoYXQgPHR0Pml0ZXJfc3dhcDwvdHQ+IGRvZXMuICBUaGVyZSBtYXkgYmUKICBzb21lIGl0ZXJhdG9ycyBmb3Igd2hpY2ggd2Ugd2FudCB0byBzcGVjaWFsaXplIDx0dD5pdGVyX3N3YXA8L3R0PiwKICBidXQgdGhlIGZ1bGx5IGdlbmVyYWwgdmVyc2lvbiBzaG91bGQgaGF2ZSBhIGdlbmVyYWwgc3BlY2lmaWNhdGlvbi48L3A+Cgo8cD5Ob3RlIHRoYXQgaW4gdGhlIHNwZWNpZmljIGNhc2Ugb2YgPHR0Pmxpc3QmbHQ7VCZndDs6Oml0ZXJhdG9yPC90dD4sCml0ZXJfc3dhcCBzaG91bGQgbm90IGJlIHNwZWNpYWxpemVkIGFzIHN1Z2dlc3RlZCBhYm92ZS4gIFRoYXQgd291bGQgZG8KbXVjaCBtb3JlIHRoYW4gZXhjaGFuZ2luZyB0aGUgdHdvIGl0ZXJhdG9ycycgdmFsdWVzOiBpdCB3b3VsZCBjaGFuZ2UKcHJlZGVjZXNzb3Ivc3VjY2Vzc29yIHJlbGF0aW9uc2hpcHMsIHBvc3NpYmx5IG1vdmluZyB0aGUgaXRlcmF0b3IgZnJvbQpvbmUgbGlzdCB0byBhbm90aGVyLiAgVGhhdCB3b3VsZCBzdXJlbHkgYmUgaW5hcHByb3ByaWF0ZS48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMTg5Ij48L2E+MTg5LiBzZXRwcmVjaXNpb24oKSBub3Qgc3BlY2lmaWVkIGNvcnJlY3RseTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy40LjIuMiBbZm10ZmxhZ3Muc3RhdGVdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEFuZHJldyBLb2VuaWcgPGI+RGF0ZTo8L2I+IDE5OTktMDgtMjU8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2ZtdGZsYWdzLnN0YXRlIj5pc3N1ZXM8L2E+IGluIFtmbXRmbGFncy5zdGF0ZV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPjI3LjQuMi4yIHBhcmFncmFwaCA5IGNsYWltcyB0aGF0IHNldHByZWNpc2lvbigpIHNldHMgdGhlIHByZWNpc2lvbiwKYW5kIGluY2x1ZGVzIGEgcGFyZW50aGV0aWNhbCBub3RlIHNheWluZyB0aGF0IGl0IGlzIHRoZSBudW1iZXIgb2YKZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50Ljxicj4KPGJyPgpUaGlzIGNsYWltIGlzIG5vdCBzdHJpY3RseSBjb3JyZWN0LiAgRm9yIGV4YW1wbGUsIGluIHRoZSBkZWZhdWx0CmZsb2F0aW5nLXBvaW50IG91dHB1dCBmb3JtYXQsIHNldHByZWNpc2lvbiBzZXRzIHRoZSBudW1iZXIgb2YKc2lnbmlmaWNhbnQgZGlnaXRzIHByaW50ZWQsIG5vdCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbApwb2ludC48YnI+Cjxicj4KSSB3b3VsZCBsaWtlIHRoZSBjb21taXR0ZWUgdG8gbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBjYXJlZnVsbHkgYW5kCmNvcnJlY3QgdGhlIHN0YXRlbWVudCBpbiAyNy40LjIuMjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlbW92ZSBmcm9tIDI3LjQuMi4yIFtmbXRmbGFncy5zdGF0ZV0sIHBhcmFncmFwaCA5LCB0aGUgdGV4dAoiKG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQpIi48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxOTMiPjwvYT4xOTMuIEhlYXAgb3BlcmF0aW9ucyBkZXNjcmlwdGlvbiBpbmNvcnJlY3Q8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjUuMy42IFthbGcuaGVhcC5vcGVyYXRpb25zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJrdXMgTWF1aGFydCA8Yj5EYXRlOjwvYj4gMTk5OS0wOS0yNDwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RHVwbGljYXRlIG9mOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjE2Ij4yMTY8L2E+PC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPjI1LjMuNiBbbGliLmFsZy5oZWFwLm9wZXJhdGlvbnNdIHN0YXRlcyB0d28ga2V5IHByb3BlcnRpZXMgb2YgYSBoZWFwIFthLGIpLCB0aGUgZmlyc3Qgb2YgdGhlbQppczxicj4KPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgYCIoMSkgKmEgaXMgdGhlIGxhcmdlc3QgZWxlbWVudCI8YnI+Cjxicj4KSSB0aGluayB0aGlzIGlzIGluY29ycmVjdCBhbmQgc2hvdWxkIGJlIGNoYW5nZWQgdG8gdGhlIHdvcmRpbmcgaW4gdGhlIHByb3Bvc2VkCnJlc29sdXRpb24uPC9wPgo8cD5BY3R1YWxseSB0aGVyZSBhcmUgdHdvIGluZGVwZW5kZW50IGNoYW5nZXM6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5BLSJwYXJ0IG9mIGxhcmdlc3QgZXF1aXZhbGVuY2UgY2xhc3MiIGluc3RlYWQgb2YgImxhcmdlc3QiLCBjYXVzZSAyNS4zCiAgW2xpYi5hbGcuc29ydGluZ10gYXNzZXJ0cyAic3RyaWN0IHdlYWsgb3JkZXJpbmciIGZvciBhbGwgaXRzIHN1YiBjbGF1c2VzLjwvcD4KICA8cD5CLVRha2UKJ2FuIG9sZGVzdCcgZnJvbSB0aGF0IGVxdWl2YWxlbmNlIGNsYXNzLCBvdGhlcndpc2UgdGhlIGhlYXAgZnVuY3Rpb25zCmNvdWxkIG5vdCBiZSB1c2VkIGZvciBhIHByaW9yaXR5IHF1ZXVlIGFzIGV4cGxhaW5lZCBpbiAyMy4yLjMuMi4yCltsaWIucHJpcXVldWUubWVtYmVyc10gKHdoZXJlIEkgYXNzdW1lIHRoYXQgYSAicHJpb3JpdHkgcXVldWUiIHJlc3BlY3RzCnByaW9yaXR5IEFORCB0aW1lKS48L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNS4zLjYgW2FsZy5oZWFwLm9wZXJhdGlvbnNdIHByb3BlcnR5ICgxKSBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+KDEpICphIGlzIHRoZSBsYXJnZXN0IGVsZW1lbnQ8L3A+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KICA8cD4oMSkgVGhlcmUgaXMgbm8gZWxlbWVudCBncmVhdGVyIHRoYW4gPHR0PiphPC90dD48L3A+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxOTUiPjwvYT4xOTUuIFNob3VsZCA8dHQ+YmFzaWNfaXN0cmVhbTo6c2VudHJ5PC90dD4ncyBjb25zdHJ1Y3RvciBldmVyIHNldCBlb2ZiaXQ/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjYuMS4xLjMgW2lzdHJlYW06OnNlbnRyeV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAxOTk5LTEwLTEzPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpc3RyZWFtOjpzZW50cnkiPmlzc3VlczwvYT4gaW4gW2lzdHJlYW06OnNlbnRyeV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlN1cHBvc2UgdGhhdCA8dHQ+aXMuZmxhZ3MoKSAmYW1wOyBpb3NfYmFzZTo6c2tpcHdzPC90dD4gaXMgbm9uemVyby4KV2hhdCBzaG91bGQgPHR0PmJhc2ljX2lzdHJlYW0mbHQ7Jmd0Ozo6c2VudHJ5PC90dD4ncyBjb25zdHJ1Y3RvciBkbyBpZiBpdApyZWFjaGVzIGVvZiB3aGlsZSBza2lwcGluZyB3aGl0ZXNwYWNlPyAgMjcuNi4xLjEuMi81IHN1Z2dlc3RzIGl0CnNob3VsZCBzZXQgZmFpbGJpdC4gU2hvdWxkIGl0IHNldCBlb2ZiaXQgYXMgd2VsbD8gIFRoZSBzdGFuZGFyZApkb2Vzbid0IHNlZW0gdG8gYW5zd2VyIHRoYXQgcXVlc3Rpb24uPC9wPgoKPHA+T24gdGhlIG9uZSBoYW5kLCBub3RoaW5nIGluIDI3LjYuMS4xLjMgW2lzdHJlYW06OnNlbnRyeV0gc2F5cyB0aGF0Cjx0dD5iYXNpY19pc3RyZWFtJmx0OyZndDs6OnNlbnRyeTwvdHQ+IHNob3VsZCBldmVyIHNldCBlb2ZiaXQuICBPbiB0aGUKb3RoZXIgaGFuZCwgMjcuNi4xLjEgW2lzdHJlYW1dIHBhcmFncmFwaCA0IHNheXMgdGhhdCBpZgpleHRyYWN0aW9uIGZyb20gYSA8dHQ+c3RyZWFtYnVmPC90dD4gInJldHVybnMKPHR0PnRyYWl0czo6ZW9mKCk8L3R0PiwgdGhlbiB0aGUgaW5wdXQgZnVuY3Rpb24sIGV4Y2VwdCBhcyBleHBsaWNpdGx5Cm5vdGVkIG90aGVyd2lzZSwgY29tcGxldGVzIGl0cyBhY3Rpb25zIGFuZCBkb2VzCjx0dD5zZXRzdGF0ZShlb2ZiaXQpIjwvdHQ+LiAgU28gdGhlIHF1ZXN0aW9uIGNvbWVzIGRvd24gdG8Kd2hldGhlciA8dHQ+YmFzaWNfaXN0cmVhbSZsdDsmZ3Q7OjpzZW50cnk8L3R0PidzIGNvbnN0cnVjdG9yIGlzIGFuCmlucHV0IGZ1bmN0aW9uLjwvcD4KCjxwPkNvbW1lbnRzIGZyb20gSmVycnkgU2Nod2Fyejo8L3A+CjxibG9ja3F1b3RlPgo8cD5JdCB3YXMgYWx3YXlzIG15IGludGVudGlvbiB0aGF0IGVvZmJpdCBzaG91bGQgYmUgc2V0IGFueSB0aW1lIHRoYXQgYQp2aXJ0dWFsIHJldHVybmVkIHNvbWV0aGluZyB0byBpbmRpY2F0ZSBlb2YsIG5vIG1hdHRlciB3aGF0IHJlYXNvbgppb3N0cmVhbSBjb2RlIGhhZCBmb3IgY2FsbGluZyB0aGUgdmlydHVhbC48L3A+CjxwPgpUaGUgbW90aXZhdGlvbiBmb3IgdGhpcyBpcyB0aGF0IEkgZGlkIG5vdCB3YW50IHRvIHJlcXVpcmUgc3RyZWFtYnVmcwp0byBiZWhhdmUgY29uc2lzdGVudGx5IGlmIHRoZWlyIHZpcnR1YWxzIGFyZSBjYWxsZWQgYWZ0ZXIgdGhleSBoYXZlCnNpZ25hbGVkIGVvZi48L3A+CjxwPgpUaGUgY2xhc3NpYyBjYXNlIGlzIGEgc3RyZWFtYnVmIHJlYWRpbmcgZnJvbSBhIFVOSVggZmlsZS4gIEVPRiBpc24ndApyZWFsbHkgYSBzdGF0ZSBmb3IgVU5JWCBmaWxlIGRlc2NyaXB0b3JzLiAgVGhlIGNvbnZlbnRpb24gaXMgdGhhdCBhCnJlYWQgb24gVU5JWCByZXR1cm5zIDAgYnl0ZXMgdG8gaW5kaWNhdGUgIkVPRiIsIGJ1dCB0aGUgZmlsZQpkZXNjcmlwdG9yIGlzbid0IHNodXQgZG93biBpbiBhbnkgd2F5IGFuZCBmdXR1cmUgcmVhZHMgZG8gbm90Cm5lY2Vzc2FyaWx5IGFsc28gcmV0dXJuIDAgYnl0ZXMuICBJbiBwYXJ0aWN1bGFyLCB5b3UgY2FuIHJlYWQgZnJvbQp0dHkncyBvbiBVTklYIGV2ZW4gYWZ0ZXIgdGhleSBoYXZlIHNpZ25hbGVkICJFT0YiLiAgKEl0Cmlzbid0IGFsd2F5cyB1bmRlcnN0b29kIHRoYXQgYSBeRCBvbiBVTklYIGlzIG5vdCBhbiBFT0YgaW5kaWNhdG9yLCBidXQKYW4gRU9MIGluZGljYXRvci4gIEJ5IHR5cGluZyBhICJsaW5lIiBjb25zaXN0aW5nIHNvbGVseSBvZgpeRCB5b3UgY2F1c2UgYSByZWFkIHRvIHJldHVybiAwIGJ5dGVzLCBhbmQgYnkgY29udmVudGlvbiB0aGlzIGlzCmludGVycHJldGVkIGFzIGVuZCBvZiBmaWxlLik8L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBhIHNlbnRlbmNlIHRvIHRoZSBlbmQgb2YgMjcuNi4xLjEuMiBwYXJhZ3JhcGggMjo8L3A+CjxibG9ja3F1b3RlPgo8cD5JZiA8dHQ+aXMucmRidWYoKS0mZ3Q7c2J1bXBjKCk8L3R0PiBvciA8dHQ+aXMucmRidWYoKS0mZ3Q7c2dldGMoKTwvdHQ+CnJldHVybnMgPHR0PnRyYWl0czo6ZW9mKCk8L3R0PiwgdGhlIGZ1bmN0aW9uIGNhbGxzCjx0dD5zZXRzdGF0ZShmYWlsYml0IHwgZW9mYml0KTwvdHQ+ICh3aGljaCBtYXkgdGhyb3cKPHR0Pmlvc19iYXNlOjpmYWlsdXJlPC90dD4pLgo8L3A+CjwvYmxvY2txdW90ZT4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjE5OCI+PC9hPjE5OC4gVmFsaWRpdHkgb2YgcG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMgdW5zcGVjaWZpZWQgYWZ0ZXIgaXRlcmF0b3IgZGVzdHJ1Y3Rpb248L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjQuMSBbaXRlcmF0b3IucmVxdWlyZW1lbnRzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBCZW1hbiBEYXdlcyA8Yj5EYXRlOjwvYj4gMTk5OS0xMS0wMzwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI2l0ZXJhdG9yLnJlcXVpcmVtZW50cyI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW2l0ZXJhdG9yLnJlcXVpcmVtZW50c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpdGVyYXRvci5yZXF1aXJlbWVudHMiPmlzc3VlczwvYT4gaW4gW2l0ZXJhdG9yLnJlcXVpcmVtZW50c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJcyBhIHBvaW50ZXIgb3IgcmVmZXJlbmNlIG9idGFpbmVkIGZyb20gYW4gaXRlcmF0b3Igc3RpbGwgdmFsaWQgYWZ0ZXIKZGVzdHJ1Y3Rpb24gb2YgdGhlIGl0ZXJhdG9yPwo8L3A+CjxwPgpJcyBhIHBvaW50ZXIgb3IgcmVmZXJlbmNlIG9idGFpbmVkIGZyb20gYW4gaXRlcmF0b3Igc3RpbGwgdmFsaWQgYWZ0ZXIgdGhlIHZhbHVlCm9mIHRoZSBpdGVyYXRvciBjaGFuZ2VzPwo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPiNpbmNsdWRlICZsdDtpb3N0cmVhbSZndDsKI2luY2x1ZGUgJmx0O3ZlY3RvciZndDsKI2luY2x1ZGUgJmx0O2l0ZXJhdG9yJmd0OwoKaW50IG1haW4oKQp7CiAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yJmx0O2ludCZndDsgdmVjX3Q7CiAgICB2ZWNfdCB2OwogICAgdi5wdXNoX2JhY2soIDEgKTsKCiAgICAvLyBJcyBhIHBvaW50ZXIgb3IgcmVmZXJlbmNlIG9idGFpbmVkIGZyb20gYW4gaXRlcmF0b3Igc3RpbGwKICAgIC8vIHZhbGlkIGFmdGVyIGRlc3RydWN0aW9uIG9mIHRoZSBpdGVyYXRvcj8KICAgIGludCAqIHAgPSAmYW1wOyp2LmJlZ2luKCk7CiAgICBzdGQ6OmNvdXQgJmx0OyZsdDsgKnAgJmx0OyZsdDsgJ1xuJzsgIC8vIE9LPwoKICAgIC8vIElzIGEgcG9pbnRlciBvciByZWZlcmVuY2Ugb2J0YWluZWQgZnJvbSBhbiBpdGVyYXRvciBzdGlsbAogICAgLy8gdmFsaWQgYWZ0ZXIgdGhlIHZhbHVlIG9mIHRoZSBpdGVyYXRvciBjaGFuZ2VzPwogICAgdmVjX3Q6Oml0ZXJhdG9yIGl0ZXIoIHYuYmVnaW4oKSApOwogICAgcCA9ICZhbXA7Kml0ZXIrKzsKICAgIHN0ZDo6Y291dCAmbHQ7Jmx0OyAqcCAmbHQ7Jmx0OyAnXG4nOyAgLy8gT0s/CgogICAgcmV0dXJuIDA7Cn0KPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPlRoZSBzdGFuZGFyZCBkb2Vzbid0IGFwcGVhciB0byBkaXJlY3RseSBhZGRyZXNzIHRoZXNlCnF1ZXN0aW9ucy4gVGhlIHN0YW5kYXJkIG5lZWRzIHRvIGJlIGNsYXJpZmllZC4gQXQgbGVhc3QgdHdvIHJlYWwtd29ybGQKY2FzZXMgaGF2ZSBiZWVuIHJlcG9ydGVkIHdoZXJlIGxpYnJhcnkgaW1wbGVtZW50b3JzIHdhc3RlZApjb25zaWRlcmFibGUgZWZmb3J0IGJlY2F1c2Ugb2YgdGhlIGxhY2sgb2YgY2xhcml0eSBpbiB0aGUKc3RhbmRhcmQuIFRoZSBxdWVzdGlvbiBpcyBpbXBvcnRhbnQgYmVjYXVzZSByZXF1aXJpbmcgcG9pbnRlcnMgYW5kCnJlZmVyZW5jZXMgdG8gcmVtYWluIHZhbGlkIGhhcyB0aGUgZWZmZWN0IGZvciBwcmFjdGljYWwgcHVycG9zZXMgb2YKcHJvaGliaXRpbmcgaXRlcmF0b3JzIGZyb20gcG9pbnRpbmcgdG8gY2FjaGVkIHJhdGhlciB0aGFuIGFjdHVhbAplbGVtZW50cyBvZiBjb250YWluZXJzLjwvcD4KCjxwPlRoZSBzdGFuZGFyZCBpdHNlbGYgYXNzdW1lcyB0aGF0IHBvaW50ZXJzIGFuZCByZWZlcmVuY2VzIG9idGFpbmVkCmZyb20gYW4gaXRlcmF0b3IgYXJlIHN0aWxsIHZhbGlkIGFmdGVyIGl0ZXJhdG9yIGRlc3RydWN0aW9uIG9yCmNoYW5nZS4gVGhlIGRlZmluaXRpb24gb2YgcmV2ZXJzZV9pdGVyYXRvcjo6b3BlcmF0b3IqKCksIDI0LjQuMS4zLjMgW3JldmVyc2UuaXRlci5jb252XSwgd2hpY2ggcmV0dXJucyBhIHJlZmVyZW5jZSwgZGVmaW5lcwplZmZlY3RzOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+SXRlcmF0b3IgdG1wID0gY3VycmVudDsKcmV0dXJuICotLXRtcDs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5UaGUgZGVmaW5pdGlvbiBvZiByZXZlcnNlX2l0ZXJhdG9yOjpvcGVyYXRvci0mZ3Q7KCksIDI0LjQuMS4zLjQKW3JldmVyc2UuaXRlci5vcC5zdGFyXSwgd2hpY2ggcmV0dXJucyBhIHBvaW50ZXIsIGRlZmluZXMgZWZmZWN0czo8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+cmV0dXJuICZhbXA7KG9wZXJhdG9yKigpKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+QmVjYXVzZSB0aGUgc3RhbmRhcmQgaXRzZWxmIGFzc3VtZXMgcG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMgcmVtYWluCnZhbGlkIGFmdGVyIGl0ZXJhdG9yIGRlc3RydWN0aW9uIG9yIGNoYW5nZSwgdGhlIHN0YW5kYXJkIHNob3VsZCBzYXkgc28KZXhwbGljaXRseS4gVGhpcyB3aWxsIGFsc28gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgdXNlciBjb2RlIGJyZWFraW5nCnVuZXhwZWN0ZWRseSB3aGVuIHBvcnRpbmcgdG8gYSBkaWZmZXJlbnQgc3RhbmRhcmQgbGlicmFyeQppbXBsZW1lbnRhdGlvbi48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgYSBuZXcgcGFyYWdyYXBoIHRvIDI0LjEgW2l0ZXJhdG9yLnJlcXVpcmVtZW50c106PC9wPgo8YmxvY2txdW90ZT48cD4KRGVzdHJ1Y3Rpb24gb2YgYW4gaXRlcmF0b3IgbWF5IGludmFsaWRhdGUgcG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMKcHJldmlvdXNseSBvYnRhaW5lZCBmcm9tIHRoYXQgaXRlcmF0b3IuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD5SZXBsYWNlIHBhcmFncmFwaCAxIG9mIDI0LjQuMS4zLjMgW3JldmVyc2UuaXRlci5jb252XSB3aXRoOjwvcD4KCjxibG9ja3F1b3RlPgo8cD48Yj5FZmZlY3RzOjwvYj48L3A+CjxwcmU+ICB0aGlzLSZndDt0bXAgPSBjdXJyZW50OwogIC0tdGhpcy0mZ3Q7dG1wOwogIHJldHVybiAqdGhpcy0mZ3Q7dG1wOwo8L3ByZT4KCjxwPgpbPGk+Tm90ZTo8L2k+IFRoaXMgb3BlcmF0aW9uIG11c3QgdXNlIGFuIGF1eGlsaWFyeSBtZW1iZXIgdmFyaWFibGUsCnJhdGhlciB0aGFuIGEgdGVtcG9yYXJ5IHZhcmlhYmxlLCB0byBhdm9pZCByZXR1cm5pbmcgYSByZWZlcmVuY2UgdGhhdApwZXJzaXN0cyBiZXlvbmQgdGhlIGxpZmV0aW1lIG9mIGl0cyBhc3NvY2lhdGVkIGl0ZXJhdG9yLiAgKFNlZQoyNC4xIFtpdGVyYXRvci5yZXF1aXJlbWVudHNdLikgIFRoZSBuYW1lIG9mIHRoaXMgbWVtYmVyIHZhcmlhYmxlIGlzIHNob3duIGZvcgpleHBvc2l0aW9uIG9ubHkuICA8aT4tLWVuZCBub3RlPC9pPl0KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bUG9zdC1Ub2t5bzogVGhlIGlzc3VlIGhhcyBiZWVuIHJlZm9ybXVsYXRlZCBwdXJlbHkKaW4gdGVybXMgb2YgaXRlcmF0b3JzLl08L2k+PC9wPgoKCjxwPjxpPltQcmUtVG9yb250bzogU3RldmUgQ2xlYXJ5IHBvaW50ZWQgb3V0IHRoZSBuby1pbnZhbGlkYXRpb24KYXNzdW1wdGlvbiBieSByZXZlcnNlX2l0ZXJhdG9yLiBUaGUgaXNzdWUgYW5kIHByb3Bvc2VkIHJlc29sdXRpb24gd2FzCnJlZm9ybXVsYXRlZCB5ZXQgYWdhaW4gdG8gcmVmbGVjdCB0aGlzIHJlYWxpdHkuXTwvaT48L3A+CgoKPHA+PGk+W0NvcGVuaGFnZW46IFN0ZXZlIENsZWFyeSBwb2ludGVkIG91dCB0aGF0IHJldmVyc2VfaXRlcmF0b3IKYXNzdW1lcyBpdHMgdW5kZXJseWluZyBpdGVyYXRvciBoYXMgcGVyc2lzdGVudCBwb2ludGVycyBhbmQKcmVmZXJlbmNlcy4gIEFuZHkgS29lbmlnIHBvaW50ZWQgb3V0IHRoYXQgaXQgaXMgcG9zc2libGUgdG8gcmV3cml0ZQpyZXZlcnNlX2l0ZXJhdG9yIHNvIHRoYXQgaXQgbm8gbG9uZ2VyIG1ha2VzIHN1Y2ggYW4gYXNzdXBtcHRpb24uCkhvd2V2ZXIsIHRoaXMgaXNzdWUgaXMgcmVsYXRlZCB0byBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMyOTkiPjI5OTwvYT4uICBJZiB3ZQpkZWNpZGUgaXQgaXMgaW50ZW50aW9uYWwgdGhhdCA8dHQ+cFtuXTwvdHQ+IG1heSByZXR1cm4gYnkgdmFsdWUKaW5zdGVhZCBvZiByZWZlcmVuY2Ugd2hlbiA8dHQ+cDwvdHQ+IGlzIGEgUmFuZG9tIEFjY2VzcyBJdGVyYXRvciwKb3RoZXIgY2hhbmdlcyBpbiByZXZlcnNlX2l0ZXJhdG9yIHdpbGwgYmUgbmVjZXNzYXJ5Ll08L2k+PC9wPgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhpcyBpc3N1ZSBoYXMgYmVlbiBkaXNjdXNzZWQgZXh0ZW5zaXZlbHkuICBOb3RlIHRoYXQgaXQgaXMKPGk+bm90PC9pPiBhbiBpc3N1ZSBhYm91dCB0aGUgYmVoYXZpb3Igb2YgcHJlZGVmaW5lZCBpdGVyYXRvcnMuICBJdCBpcwphc2tpbmcgd2hldGhlciBvciBub3QgdXNlci1kZWZpbmVkIGl0ZXJhdG9ycyBhcmUgcGVybWl0dGVkIHRvIGhhdmUKdHJhbnNpZW50IHBvaW50ZXJzIGFuZCByZWZlcmVuY2VzLiAgU2V2ZXJhbCBwZW9wbGUgcHJlc2VudGVkIGV4YW1wbGVzCm9mIHVzZWZ1bCB1c2VyLWRlZmluZWQgaXRlcmF0b3JzIHRoYXQgaGF2ZSBzdWNoIGEgcHJvcGVydHk7IGV4YW1wbGVzCmluY2x1ZGUgYSBCLXRyZWUgaXRlcmF0b3IsIGFuZCBhbiAiaW90YSBpdGVyYXRvciIgdGhhdCBkb2Vzbid0IHBvaW50CnRvIG1lbW9yeS4gIExpYnJhcnkgaW1wbGVtZW50b3JzIGFscmVhZHkgc2VlbSB0byBiZSBhYmxlIHRvIGNvcGUgd2l0aApzdWNoIGl0ZXJhdG9yczogdGhleSB0YWtlIHBhaW5zIHRvIGF2b2lkIGZvcm1pbmcgcmVmZXJlbmNlcyB0byBtZW1vcnkKdGhhdCBnZXRzIGl0ZXJhdGVkIHBhc3QuICBUaGUgb25seSBwbGFjZSB3aGVyZSB0aGlzIGlzIGEgcHJvYmxlbSBpcwo8dHQ+cmV2ZXJzZV9pdGVyYXRvcjwvdHQ+LCBzbyB0aGlzIGlzc3VlIGNoYW5nZXMKPHR0PnJldmVyc2VfaXRlcmF0b3I8L3R0PiB0byBtYWtlIGl0IHdvcmsuPC9wPgoKPHA+VGhpcyByZXNvbHV0aW9uIGRvZXMgbm90IHdlYWtlbiBhbnkgZ3VhcmFudGVlcyBwcm92aWRlZCBieQpwcmVkZWZpbmVkIGl0ZXJhdG9ycyBsaWtlIDx0dD5saXN0Jmx0O2ludCZndDs6Oml0ZXJhdG9yPC90dD4uCkNsYXVzZSAyMyBzaG91bGQgYmUgcmV2aWV3ZWQgdG8gbWFrZSBzdXJlIHRoYXQgZ3VhcmFudGVlcyBmb3IKcHJlZGVmaW5lZCBpdGVyYXRvcnMgYXJlIGFzIHN0cm9uZyBhcyB1c2VycyBleHBlY3QuPC9wPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIxOTkiPjwvYT4xOTkuIFdoYXQgZG9lcyA8dHQ+YWxsb2NhdGUoMCk8L3R0PiByZXR1cm4/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjEuMiBbYWxsb2NhdG9yLnJlcXVpcmVtZW50c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAxOTk5LTExLTE5PC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjYWxsb2NhdG9yLnJlcXVpcmVtZW50cyI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW2FsbG9jYXRvci5yZXF1aXJlbWVudHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxsb2NhdG9yLnJlcXVpcmVtZW50cyI+aXNzdWVzPC9hPiBpbiBbYWxsb2NhdG9yLnJlcXVpcmVtZW50c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpTdXBwb3NlIHRoYXQgPHR0PkE8L3R0PiBpcyBhIGNsYXNzIHRoYXQgY29uZm9ybXMgdG8gdGhlCkFsbG9jYXRvciByZXF1aXJlbWVudHMgb2YgVGFibGUgMzIsIGFuZCA8dHQ+YTwvdHQ+IGlzIGFuCm9iamVjdCBvZiBjbGFzcyA8dHQ+QTwvdHQ+ICBXaGF0IHNob3VsZCBiZSB0aGUgcmV0dXJuCnZhbHVlIG9mIDx0dD5hLmFsbG9jYXRlKDApPC90dD4/ICBUaHJlZSByZWFzb25hYmxlCnBvc3NpYmlsaXRpZXM6IGZvcmJpZCB0aGUgYXJndW1lbnQgPHR0PjA8L3R0PiwgcmV0dXJuCmEgbnVsbCBwb2ludGVyLCBvciByZXF1aXJlIHRoYXQgdGhlIHJldHVybiB2YWx1ZSBiZSBhCnVuaXF1ZSBub24tbnVsbCBwb2ludGVyLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIGEgbm90ZSB0byB0aGUgPHR0PmFsbG9jYXRlPC90dD4gcm93IG9mIFRhYmxlIDMyOgoiWzxpPk5vdGU6PC9pPiBJZiA8dHQ+biA9PSAwPC90dD4sIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5zcGVjaWZpZWQuIDxpPi0tZW5kIG5vdGU8L2k+XSI8L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkEga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBpc3N1ZSBpcyB0aGF0IHRoZSB1bHRpbWF0ZSB1c2Ugb2YKYWxsb2NhdGUoKSBpcyB0byBjb25zdHJ1Y3QgYW4gaXRlcmF0b3IsIGFuZCB0aGF0IGl0ZXJhdG9yIGZvciB6ZXJvCmxlbmd0aCBzZXF1ZW5jZXMgbXVzdCBiZSB0aGUgY29udGFpbmVyJ3MgcGFzdC10aGUtZW5kCnJlcHJlc2VudGF0aW9uLiAgU2luY2UgdGhpcyBhbHJlYWR5IGltcGxpZXMgc3BlY2lhbCBjYXNlIGNvZGUsIGl0CndvdWxkIGJlIG92ZXItc3BlY2lmaWNhdGlvbiB0byBtYW5kYXRlIHRoZSByZXR1cm4gdmFsdWUuCjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIwMCI+PC9hPjIwMC4gRm9yd2FyZCBpdGVyYXRvciByZXF1aXJlbWVudHMgZG9uJ3QgYWxsb3cgY29uc3RhbnQgaXRlcmF0b3JzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI0LjEuMyBbZm9yd2FyZC5pdGVyYXRvcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMTk5OS0xMS0xOTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjZm9yd2FyZC5pdGVyYXRvcnMiPmlzc3VlczwvYT4gaW4gW2ZvcndhcmQuaXRlcmF0b3JzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkluIHRhYmxlIDc0LCB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24gPHR0PiphPC90dD4gaXMgZ2l2ZW4KYXMgPHR0PlQmYW1wOzwvdHQ+LCB3aGVyZSA8dHQ+VDwvdHQ+IGlzIHRoZSBpdGVyYXRvcidzIHZhbHVlIHR5cGUuCkZvciBjb25zdGFudCBpdGVyYXRvcnMsIGhvd2V2ZXIsIHRoaXMgaXMgd3JvbmcuICAoIlZhbHVlIHR5cGUiCmlzIG5ldmVyIGRlZmluZWQgdmVyeSBwcmVjaXNlbHksIGJ1dCBpdCBpcyBjbGVhciB0aGF0IHRoZSB2YWx1ZSB0eXBlCm9mLCBzYXksIDx0dD5zdGQ6Omxpc3QmbHQ7aW50Jmd0Ozo6Y29uc3RfaXRlcmF0b3I8L3R0PiBpcyBzdXBwb3NlZCB0byBiZQo8dHQ+aW50PC90dD4sIG5vdCA8dHQ+Y29uc3QgaW50PC90dD4uKQo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gdGFibGUgNzQsIGluIHRoZSA8dHQ+KmE8L3R0PiBhbmQgPHR0PipyKys8L3R0PiByb3dzLCBjaGFuZ2UgdGhlCnJldHVybiB0eXBlIGZyb20gIjx0dD5UJmFtcDs8L3R0PiIgdG8gIjx0dD5UJmFtcDs8L3R0PgppZiA8dHQ+WDwvdHQ+IGlzIG11dGFibGUsIG90aGVyd2lzZSA8dHQ+Y29uc3QgVCZhbXA7PC90dD4iLgpJbiB0aGUgPHR0PmEtJmd0O208L3R0PiByb3csIGNoYW5nZSB0aGUgcmV0dXJuIHR5cGUgZnJvbQoiPHR0PlUmYW1wOzwvdHQ+IiB0byAiPHR0PlUmYW1wOzwvdHQ+IGlmIDx0dD5YPC90dD4gaXMgbXV0YWJsZSwKb3RoZXJ3aXNlIDx0dD5jb25zdCBVJmFtcDs8L3R0PiIuCjwvcD4KCjxwPjxpPltUb2t5bzogVGhlIExXRyBiZWxpZXZlcyB0aGlzIGlzIHRoZSB0aXAgb2YgYSBsYXJnZXIgaWNlYmVyZzsKdGhlcmUgYXJlIG11bHRpcGxlIGNvbnN0IHByb2JsZW1zIHdpdGggdGhlIFNUTCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5CmFuZCB0aGF0IHRoZXNlIHNob3VsZCBiZSBhZGRyZXNzZWQgYXMgYSBzaW5nbGUgcGFja2FnZS4mbmJzcDsgTm90ZQp0aGF0IGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzE4MCI+MTgwPC9hPiBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkIE5BRCBGdXR1cmUgZm9yCnRoYXQgdmVyeSByZWFzb24uXTwvaT48L3A+CgoKPHA+PGk+W1JlZG1vbmQ6IHRoZSBMV0cgdGhpbmtzIHRoaXMgaXMgc2VwYXJhYmxlIGZyb20gb3RoZXIgY29uc3RuZXNzCmlzc3Vlcy4gIFRoaXMgaXNzdWUgaXMganVzdCBjbGVhbnVwOyBpdCBjbGFyaWZpZXMgbGFuZ3VhZ2UgdGhhdCB3YXMKd3JpdHRlbiBiZWZvcmUgd2UgaGFkIGl0ZXJhdG9yX3RyYWl0cy4gIFByb3Bvc2VkIHJlc29sdXRpb24gd2FzCm1vZGlmaWVkOiB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvbmx5IGRpc2N1c3NlZCAqYS4gIEl0IHdhcyBwb2ludGVkIG91dAp0aGF0IHdlIGFsc28gbmVlZCB0byB3b3JyeSBhYm91dCAqcisrIGFuZCBhLSZndDttLl08L2k+PC9wPgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjAxIj48L2E+MjAxLiBOdW1lcmljIGxpbWl0cyB0ZXJtaW5vbG9neSB3cm9uZzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAxOC4yLjEgW2xpbWl0c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gU3RlcGhlbiBDbGVhcnkgPGI+RGF0ZTo8L2I+IDE5OTktMTItMjE8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xpbWl0cyI+aXNzdWVzPC9hPiBpbiBbbGltaXRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkluIHNvbWUgcGxhY2VzIGluIHRoaXMgc2VjdGlvbiwgdGhlIHRlcm1zICJmdW5kYW1lbnRhbCB0eXBlcyIgYW5kCiJzY2FsYXIgdHlwZXMiIGFyZSB1c2VkIHdoZW4gdGhlIHRlcm0gImFyaXRobWV0aWMgdHlwZXMiIGlzIGludGVuZGVkLgpUaGUgY3VycmVudCB1c2FnZSBpcyBpbmNvcnJlY3QgYmVjYXVzZSB2b2lkIGlzIGEgZnVuZGFtZW50YWwgdHlwZSBhbmQKcG9pbnRlcnMgYXJlIHNjYWxhciB0eXBlcywgbmVpdGhlciBvZiB3aGljaCBzaG91bGQgaGF2ZQpzcGVjaWFsaXphdGlvbnMgb2YgbnVtZXJpY19saW1pdHMuCjwvcD4KPHA+PGk+W0xpbGxlaGFtbWVyOiBpdCByZW1haW5zIHRydWUgdGhhdCBudW1lcmljX2xpbWl0cyBpcyB1c2luZwogIGltcHJlY2lzZSBsYW5ndWFnZS4gSG93ZXZlciwgbm9uZSBvZiB0aGUgcHJvcG9zYWxzIGZvciBjaGFuZ2VkCiAgd29yZGluZyBhcmUgY2xlYXJlci4gIEEgcmVkZXNpZ24gb2YgbnVtZXJpY19saW1pdHMgaXMgbmVlZGVkLCBidXQgdGhpcwogIGlzIG1vcmUgYSB0YXNrIHRoYW4gYW4gb3BlbiBpc3N1ZS5dPC9pPjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+CkNoYW5nZSAxOC4yIFtzdXBwb3J0LmxpbWl0c10gdG86CjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTEtIFRoZSBoZWFkZXJzIDx0dD4mbHQ7bGltaXRzJmd0OzwvdHQ+LCA8dHQ+Jmx0O2NsaW1pdHMmZ3Q7PC90dD4sCjx0dD4mbHQ7Y2Zsb2F0Jmd0OzwvdHQ+LCBhbmQgPHR0PiZsdDtjaW50dHlwZXMmZ3Q7PC90dD4gc3VwcGx5CmNoYXJhY3RlcmlzdGljcyBvZiBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgPGRlbD5mdW5kYW1lbnRhbDwvZGVsPgo8aW5zPmFyaXRobWV0aWM8L2lucz4gdHlwZXMgKDMuOS4xKS4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDE4LjIuMSBbbGltaXRzXSB0bzoKPC9wPgoKPGJsb2NrcXVvdGU+CjxwPgotMS0gVGhlIDx0dD5udW1lcmljX2xpbWl0czwvdHQ+IGNvbXBvbmVudCBwcm92aWRlcyBhIEMrKyBwcm9ncmFtIHdpdGgKaW5mb3JtYXRpb24gYWJvdXQgdmFyaW91cyBwcm9wZXJ0aWVzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbidzCnJlcHJlc2VudGF0aW9uIG9mIHRoZSA8ZGVsPmZ1bmRhbWVudGFsPC9kZWw+IDxpbnM+YXJpdGhtZXRpYzwvaW5zPgp0eXBlcy4KPC9wPgo8cD4KLTItIFNwZWNpYWxpemF0aW9ucyBzaGFsbCBiZSBwcm92aWRlZCBmb3IgZWFjaCA8ZGVsPmZ1bmRhbWVudGFsPC9kZWw+CjxpbnM+YXJpdGhtZXRpYzwvaW5zPiB0eXBlLCBib3RoIGZsb2F0aW5nIHBvaW50IGFuZCBpbnRlZ2VyLCBpbmNsdWRpbmcKPHR0PmJvb2w8L3R0Pi4gVGhlIG1lbWJlciA8dHQ+aXNfc3BlY2lhbGl6ZWQ8L3R0PiBzaGFsbCBiZSA8dHQ+dHJ1ZTwvdHQ+CmZvciBhbGwgc3VjaCBzcGVjaWFsaXphdGlvbnMgb2YgPHR0Pm51bWVyaWNfbGltaXRzPC90dD4uCjwvcD4KPHA+Ci00LSBOb24tPGRlbD5mdW5kYW1lbnRhbDwvZGVsPjxpbnM+YXJpdGhtZXRpYzwvaW5zPiBzdGFuZGFyZCB0eXBlcywgc3VjaAphcyA8dHQ+Y29tcGxleCZsdDtUJmd0OzwvdHQ+ICgyNi4zLjIpLCBzaGFsbCBub3QgaGF2ZSBzcGVjaWFsaXphdGlvbnMuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAxOC4yLjEuMSBbbnVtZXJpYy5saW1pdHNdIHRvOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CjxkZWw+LTEtIFRoZSBtZW1iZXIgPHR0PmlzX3NwZWNpYWxpemVkPC90dD4gbWFrZXMgaXQgcG9zc2libGUgdG8gZGlzdGluZ3Vpc2gKYmV0d2VlbiBmdW5kYW1lbnRhbCB0eXBlcywgd2hpY2ggaGF2ZSBzcGVjaWFsaXphdGlvbnMsIGFuZCBub24tc2NhbGFyIHR5cGVzLAp3aGljaCBkbyBub3QuPC9kZWw+CjwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyMDIiPjwvYT4yMDIuIHVuaXF1ZSgpIGVmZmVjdHMgdW5jbGVhciB3aGVuIHByZWRpY2F0ZSBub3QgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb248L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjUuMi45IFthbGcudW5pcXVlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBBbmRyZXcgS29lbmlnIDxiPkRhdGU6PC9iPiAyMDAwLTAxLTEzPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNhbGcudW5pcXVlIj5pc3N1ZXM8L2E+IGluIFthbGcudW5pcXVlXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CldoYXQgc2hvdWxkIHVuaXF1ZSgpIGRvIGlmIHlvdSBnaXZlIGl0IGEgcHJlZGljYXRlIHRoYXQgaXMgbm90IGFuCmVxdWl2YWxlbmNlIHJlbGF0aW9uPyAgVGhlcmUgYXJlIGF0IGxlYXN0IHR3byBwbGF1c2libGUgYW5zd2VyczoKPC9wPgoKPGJsb2NrcXVvdGU+Cgo8cD4KICAgMS4gWW91IGNhbid0LCBiZWNhdXNlIDI1LjIuOCBzYXlzIHRoYXQgaXQgaXQgImVsaW1pbmF0ZXMgYWxsIGJ1dAogICB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGV2ZXJ5IGNvbnNlY3V0aXZlIGdyb3VwIG9mIGVxdWFsCiAgIGVsZW1lbnRzLi4uIiBhbmQgaXQgd291bGRuJ3QgbWFrZSBzZW5zZSB0byBpbnRlcnByZXQgImVxdWFsIiBhcwogICBtZWFuaW5nIGFueXRoaW5nIGJ1dCBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIFtJdCBhbHNvIGRvZXNuJ3QKICAgbWFrZSBzZW5zZSB0byBpbnRlcnByZXQgImVxdWFsIiBhcyBtZWFuaW5nID09LCBiZWNhdXNlIHRoZW4gdGhlcmUKICAgd291bGQgbmV2ZXIgYmUgYW55IHNlbnNlIGluIGdpdmluZyBhIHByZWRpY2F0ZSBhcyBhbiBhcmd1bWVudCBhdAogICBhbGwuXQo8L3A+Cgo8cD4KICAgMi4gVGhlIHdvcmQgImVxdWFsIiBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgdG8gbWVhbiB3aGF0ZXZlciB0aGUKICAgcHJlZGljYXRlIHNheXMsIGV2ZW4gaWYgaXQgaXMgbm90IGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uCiAgIChhbmQgaW4gcGFydGljdWxhciwgZXZlbiBpZiBpdCBpcyBub3QgdHJhbnNpdGl2ZSkuCjwvcD4KCjwvYmxvY2txdW90ZT4KCjxwPgpUaGUgZXhhbXBsZSB0aGF0IHJhaXNlZCB0aGlzIHF1ZXN0aW9uIGlzIGZyb20gVXNlbmV0Ogo8L3A+Cgo8YmxvY2txdW90ZT4KCjxwcmU+aW50IGZbXSA9IHsgMSwgMywgNywgMSwgMiB9OwppbnQqIHogPSB1bmlxdWUoZiwgZis1LCBncmVhdGVyJmx0O2ludCZndDsoKSk7PC9wcmU+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD4KSWYgb25lIGJsaW5kbHkgYXBwbGllcyB0aGUgZGVmaW5pdGlvbiB1c2luZyB0aGUgcHJlZGljYXRlCmdyZWF0ZXImbHQ7aW50Jmd0OywgYW5kIGlnbm9yZSB0aGUgd29yZCAiZXF1YWwiLCB5b3UgZ2V0Ogo8L3A+Cgo8YmxvY2txdW90ZT4KCjxwPgogICAgRWxpbWluYXRlcyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IGZyb20gZXZlcnkgY29uc2VjdXRpdmUgZ3JvdXAgICAgCiAgICBvZiBlbGVtZW50cyByZWZlcnJlZCB0byBieSB0aGUgaXRlcmF0b3IgaSBpbiB0aGUgcmFuZ2UgW2ZpcnN0LCBsYXN0KSAgICAKICAgIGZvciB3aGljaCAqaSAmZ3Q7ICooaSAtIDEpLgo8L3A+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhlIGZpcnN0IHN1cnByaXNlIGlzIHRoZSBvcmRlciBvZiB0aGUgY29tcGFyaXNvbi4gIElmIHdlIHdhbnRlZCB0bwphbGxvdyBmb3IgdGhlIHByZWRpY2F0ZSBub3QgYmVpbmcgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb24sIHRoZW4gd2UKc2hvdWxkIHN1cmVseSBjb21wYXJlIGVsZW1lbnRzIHRoZSBvdGhlciB3YXk6IHByZWQoKihpIC0gMSksICppKS4gIElmCndlIGRvIHRoYXQsIHRoZW4gdGhlIGRlc2NyaXB0aW9uIHdvdWxkIHNlZW0gdG8gc2F5OiAiQnJlYWsgdGhlCnNlcXVlbmNlIGludG8gc3Vic2VxdWVuY2VzIHdob3NlIGVsZW1lbnRzIGFyZSBpbiBzdHJpY3RseSBpbmNyZWFzaW5nCm9yZGVyLCBhbmQga2VlcCBvbmx5IHRoZSBmaXJzdCBlbGVtZW50IG9mIGVhY2ggc3Vic2VxdWVuY2UiLiAgU28gdGhlCnJlc3VsdCB3b3VsZCBiZSAxLCAxLCAyLiAgSWYgd2UgdGFrZSB0aGUgZGVzY3JpcHRpb24gYXQgaXRzIHdvcmQsIGl0CndvdWxkIHNlZW0gdG8gY2FsbCBmb3Igc3RyaWN0bHkgREVjcmVhc2luZyBvcmRlciwgaW4gd2hpY2ggY2FzZSB0aGUKcmVzdWx0IHNob3VsZCBiZSAxLCAzLCA3LCAyLjxicj4KPGJyPgpJbiBmYWN0LCB0aGUgU0dJIGltcGxlbWVudGF0aW9uIG9mIHVuaXF1ZSgpIGRvZXMgbmVpdGhlcjogSXQgeWllbGRzIDEsCjMsIDcuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNS4yLjkgW2FsZy51bmlxdWVdIHBhcmFncmFwaCAxIHRvOjwvcD4KPGJsb2NrcXVvdGU+PHA+CkZvciBhIG5vbmVtcHR5IHJhbmdlLCBlbGltaW5hdGVzIGFsbCBidXQgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBldmVyeQpjb25zZWN1dGl2ZSBncm91cCBvZiBlcXVpdmFsZW50IGVsZW1lbnRzIHJlZmVycmVkIHRvIGJ5IHRoZSBpdGVyYXRvcgo8dHQ+aTwvdHQ+IGluIHRoZSByYW5nZSBbZmlyc3QrMSwgbGFzdCkgZm9yIHdoaWNoIHRoZSBmb2xsb3dpbmcKY29uZGl0aW9ucyBob2xkOiA8dHQ+KihpLTEpID09ICppPC90dD4gb3IgPHR0PnByZWQoKihpLTEpLCAqaSkgIT0KZmFsc2U8L3R0Pi4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpBbHNvIGluc2VydCBhIG5ldyBwYXJhZ3JhcGgsIHBhcmFncmFwaCAyYSwgdGhhdCByZWFkczogIlJlcXVpcmVzOiBUaGUKY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IGJlIGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uLiIKPC9wPgoKPHA+PGk+W1JlZG1vbmQ6IGRpc2N1c3NlZCBhcmd1bWVudHMgZm9yIGFuZCBhZ2FpbnN0IHJlcXVpcmluZyB0aGUKY29tcGFyaXNvbiBmdW5jdGlvbiB0byBiZSBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIFN0cmF3IHBvbGw6CjE0LTItNS4gIEZpcnN0IG51bWJlciBpcyB0byByZXF1aXJlIHRoYXQgaXQgYmUgYW4gZXF1aXZhbGVuY2UKcmVsYXRpb24sIHNlY29uZCBudW1iZXIgaXMgdG8gZXhwbGljaXRseSBub3QgcmVxdWlyZSB0aGF0IGl0IGJlIGFuCmVxdWl2YWxlbmNlIHJlbGF0aW9uLCB0aGlyZCBudW1iZXIgaXMgcGVvcGxlIHdobyBiZWxpZXZlIHRoZXkgbmVlZAptb3JlIHRpbWUgdG8gY29uc2lkZXIgdGhlIGlzc3VlLiAgQSBzZXBhcmF0ZSBpc3N1ZTogQW5keSBTYXd5ZXIKcG9pbnRlZCBvdXQgdGhhdCAiaS0xIiBpcyBpbmNvcnJlY3QsIHNpbmNlICJpIiBjYW4gcmVmZXIgdG8gdGhlIGZpcnN0Cml0ZXJhdG9yIGluIHRoZSByYW5nZS4gIE1hdHQgcHJvdmlkZWQgd29yZGluZyB0byBhZGRyZXNzIHRoaXMKcHJvYmxlbS5dPC9pPjwvcD4KCgo8cD48aT5bQ3VyYedhbzogVGhlIExXRyBjaGFuZ2VkICIuLi4gdGhlIHJhbmdlIChmaXJzdCwKbGFzdCkuLi4iIHRvICIuLi4gIHRoZSByYW5nZSBbZmlyc3QrMSwgbGFzdCkuLi4iIGZvcgpjbGFyaXR5LiBUaGV5IGNvbnNpZGVyZWQgdGhpcyBjaGFuZ2UgY2xvc2UgZW5vdWdoIHRvIGVkaXRvcmlhbCB0byBub3QKcmVxdWlyZSBhbm90aGVyIHJvdW5kIG9mIHJldmlldy5dPC9pPjwvcD4KCgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGFsc28gY29uc2lkZXJlZCBhbiBhbHRlcm5hdGl2ZSByZXNvbHV0aW9uOiBjaGFuZ2UgCjI1LjIuOSBbYWxnLnVuaXF1ZV0gcGFyYWdyYXBoIDEgdG86PC9wPgoKPGJsb2NrcXVvdGU+PHA+CkZvciBhIG5vbmVtcHR5IHJhbmdlLCBlbGltaW5hdGVzIGFsbCBidXQgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBldmVyeQpjb25zZWN1dGl2ZSBncm91cCBvZiBlbGVtZW50cyByZWZlcnJlZCB0byBieSB0aGUgaXRlcmF0b3IKPHR0Pmk8L3R0PiBpbiB0aGUgcmFuZ2UgKGZpcnN0LCBsYXN0KSBmb3Igd2hpY2ggdGhlIGZvbGxvd2luZwpjb25kaXRpb25zIGhvbGQ6IDx0dD4qKGktMSkgPT0gKmk8L3R0PiBvciA8dHQ+cHJlZCgqKGktMSksICppKSAhPQpmYWxzZTwvdHQ+Lgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+CkFsc28gaW5zZXJ0IGEgbmV3IHBhcmFncmFwaCwgcGFyYWdyYXBoIDFhLCB0aGF0IHJlYWRzOiAiTm90ZXM6IFRoZQpjb21wYXJpc29uIGZ1bmN0aW9uIG5lZWQgbm90IGJlIGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uLiIKPC9wPgoKCjxwPkluZm9ybWFsbHk6IHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGltcG9zZXMgYW4gZXhwbGljaXQgcmVxdWlyZW1lbnQKdGhhdCB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbiBiZSBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIFRoZQphbHRlcm5hdGl2ZSByZXNvbHV0aW9uIGRvZXMgbm90LCBhbmQgaXQgZ2l2ZXMgZW5vdWdoIGluZm9ybWF0aW9uIHNvCnRoYXQgdGhlIGJlaGF2aW9yIG9mIHVuaXF1ZSgpIGZvciBhIG5vbi1lcXVpdmFsZW5jZSByZWxhdGlvbiBpcwpzcGVjaWZpZWQuICBCb3RoIHJlc29sdXRpb25zIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGJlaGF2aW9yIG9mCmV4aXN0aW5nIGltcGxlbWVudGF0aW9ucy48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjA2Ij48L2E+MjA2LiBvcGVyYXRvciBuZXcoc2l6ZV90LCBub3Rocm93KSBtYXkgYmVjb21lIHVubGlua2VkIHRvIG9yZGluYXJ5IG9wZXJhdG9yIG5ldyBpZiBvcmRpbmFyeSB2ZXJzaW9uIHJlcGxhY2VkPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE4LjUuMS4xIFtuZXcuZGVsZXRlLnNpbmdsZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSG93YXJkIEhpbm5hbnQgPGI+RGF0ZTo8L2I+IDE5OTktMDgtMjk8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI25ldy5kZWxldGUuc2luZ2xlIj5pc3N1ZXM8L2E+IGluIFtuZXcuZGVsZXRlLnNpbmdsZV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkFzIHNwZWNpZmllZCwgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBub3Rocm93IHZlcnNpb24gb2Ygb3BlcmF0b3IKbmV3IGRvZXMgbm90IG5lY2Vzc2FyaWx5IGNhbGwgdGhlIG9yZGluYXJ5IG9wZXJhdG9yIG5ldywgYnV0IG1heQppbnN0ZWFkIHNpbXBseSBjYWxsIHRoZSBzYW1lIHVuZGVybHlpbmcgYWxsb2NhdG9yIGFuZCByZXR1cm4gYSBudWxsCnBvaW50ZXIgaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBleGNlcHRpb24gaW4gY2FzZSBvZiBmYWlsdXJlLjwvcD4KCjxwPlN1Y2ggYW4gaW1wbGVtZW50YXRpb24gYnJlYWtzIGNvZGUgdGhhdCByZXBsYWNlcyB0aGUgb3JkaW5hcnkKdmVyc2lvbiBvZiBuZXcsIGJ1dCBub3QgdGhlIG5vdGhyb3cgdmVyc2lvbi4gSWYgdGhlIG9yZGluYXJ5IHZlcnNpb24Kb2YgbmV3L2RlbGV0ZSBpcyByZXBsYWNlZCwgYW5kIGlmIHRoZSByZXBsYWNlZCBkZWxldGUgaXMgbm90CmNvbXBhdGlibGUgd2l0aCBwb2ludGVycyByZXR1cm5lZCBmcm9tIHRoZSBsaWJyYXJ5IHZlcnNpb25zIG9mIG5ldywKdGhlbiB3aGVuIHRoZSByZXBsYWNlZCBkZWxldGUgcmVjZWl2ZXMgYSBwb2ludGVyIGFsbG9jYXRlZCBieSB0aGUKbGlicmFyeSBuZXcobm90aHJvdyksIGNyYXNoIGZvbGxvd3MuPC9wPgoKPHA+VGhlIGZpeCBhcHBlYXJzIHRvIGJlIHRoYXQgdGhlIGxpYiB2ZXJzaW9uIG9mIG5ldyhub3Rocm93KSBtdXN0CmNhbGwgdGhlIG9yZGluYXJ5IG5ldy4gVGh1cyB3aGVuIHRoZSBvcmRpbmFyeSBuZXcgZ2V0cyByZXBsYWNlZCwgdGhlCmxpYiB2ZXJzaW9uIHdpbGwgY2FsbCB0aGUgcmVwbGFjZWQgb3JkaW5hcnkgbmV3IGFuZCB0aGluZ3Mgd2lsbApjb250aW51ZSB0byB3b3JrLjwvcD4KCjxwPkFuIGFsdGVybmF0aXZlIHdvdWxkIGJlIHRvIGhhdmUgdGhlIG9yZGluYXJ5IG5ldyBjYWxsCm5ldyhub3Rocm93KS4gVGhpcyBzZWVtcyBzdWItb3B0aW1hbCB0byBtZSBhcyB0aGUgb3JkaW5hcnkgdmVyc2lvbiBvZgpuZXcgaXMgdGhlIHZlcnNpb24gbW9zdCBjb21tb25seSByZXBsYWNlZCBpbiBwcmFjdGljZS4gU28gb25lIHdvdWxkCnN0aWxsIG5lZWQgdG8gcmVwbGFjZSBib3RoIG9yZGluYXJ5IGFuZCBub3Rocm93IHZlcnNpb25zIGlmIG9uZSB3YW50ZWQKdG8gcmVwbGFjZSB0aGUgb3JkaW5hcnkgdmVyc2lvbi48L3A+Cgo8cD5Bbm90aGVyIGFsdGVybmF0aXZlIGlzIHRvIHB1dCBpbiBjbGVhciB0ZXh0IHRoYXQgaWYgb25lIHZlcnNpb24gaXMKcmVwbGFjZWQsIHRoZW4gdGhlIG90aGVyIG11c3QgYWxzbyBiZSByZXBsYWNlZCB0byBtYWludGFpbgpjb21wYXRpYmlsaXR5LiBUaGVuIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGJlbG93IHdvdWxkIGp1c3QgYmUgYQpxdWFsaXR5IG9mIGltcGxlbWVudGF0aW9uIGlzc3VlLiBUaGVyZSBpcyBhbHJlYWR5IHN1Y2ggdGV4dCBpbgpwYXJhZ3JhcGggNyAodW5kZXIgdGhlIG5ldyhub3Rocm93KSB2ZXJzaW9uKS4gQnV0IHRoaXMgbnVhbmNlIGlzCmVhc2lseSBtaXNzZWQgaWYgb25lIHJlYWRzIG9ubHkgdGhlIHBhcmFncmFwaHMgcmVsYXRpbmcgdG8gdGhlCm9yZGluYXJ5IG5ldy48L3A+Cgo8cD4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNy9uMjE1OC5odG1sIj5OMjE1ODwvYT4KaGFzIGJlZW4gd3JpdHRlbiBleHBsYWluaW5nIHRoZSByYXRpb25hbGUgZm9yIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGJlbG93Lgo8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAxOC41LjEuMSBbbmV3LmRlbGV0ZS5zaW5nbGVdOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT52b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QgPGk+c2l6ZTwvaT4sIGNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspIHRocm93KCk7CjwvcHJlPgo8YmxvY2txdW90ZT4KPHA+Ci01LSA8aT5FZmZlY3RzOjwvaT4gU2FtZSBhcyBhYm92ZSwgZXhjZXB0IHRoYXQgaXQgaXMgY2FsbGVkIGJ5IGEgcGxhY2VtZW50CnZlcnNpb24gb2YgYSA8aT5uZXctZXhwcmVzc2lvbjwvaT4gd2hlbiBhIEMrKyBwcm9ncmFtIHByZWZlcnMgYSBudWxsIHBvaW50ZXIgcmVzdWx0IGFzCmFuIGVycm9yIGluZGljYXRpb24sIGluc3RlYWQgb2YgYSA8dHQ+YmFkX2FsbG9jPC90dD4gZXhjZXB0aW9uLgo8L3A+Cgo8cD4KLTYtIDxpPlJlcGxhY2VhYmxlOjwvaT4gYSBDKysgcHJvZ3JhbSBtYXkgZGVmaW5lIGEgZnVuY3Rpb24gd2l0aCB0aGlzIGZ1bmN0aW9uCnNpZ25hdHVyZSB0aGF0IGRpc3BsYWNlcyB0aGUgZGVmYXVsdCB2ZXJzaW9uIGRlZmluZWQgYnkgdGhlIEMrKyBTdGFuZGFyZApsaWJyYXJ5Lgo8L3A+Cgo8cD4KLTctIDxpPlJlcXVpcmVkIGJlaGF2aW9yOjwvaT4gUmV0dXJuIGEgbm9uLW51bGwgcG9pbnRlciB0byBzdWl0YWJseSBhbGlnbmVkCnN0b3JhZ2UgKDMuNy40KSwgb3IgZWxzZSByZXR1cm4gYSBudWxsIHBvaW50ZXIuIFRoaXMgbm90aHJvdyB2ZXJzaW9uIG9mIG9wZXJhdG9yCm5ldyByZXR1cm5zIGEgcG9pbnRlciBvYnRhaW5lZCBhcyBpZiBhY3F1aXJlZCBmcm9tIHRoZSA8aW5zPihwb3NzaWJseQpyZXBsYWNlZCk8L2lucz4gb3JkaW5hcnkgdmVyc2lvbi4gVGhpcyByZXF1aXJlbWVudCBpcyBiaW5kaW5nIG9uIGEgcmVwbGFjZW1lbnQKdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uLgo8L3A+Cgo8cD4KLTgtIDxpPkRlZmF1bHQgYmVoYXZpb3I6PC9pPgo8L3A+Cjx1bD4KPGxpPjxpbnM+CkNhbGxzIDx0dD5vcGVyYXRvciBuZXcoPGk+c2l6ZTwvaT4pPC90dD4uCjwvaW5zPjwvbGk+CjxsaT48aW5zPgpJZiB0aGUgY2FsbCB0byA8dHQ+b3BlcmF0b3IgbmV3KDxpPnNpemU8L2k+KTwvdHQ+IHJldHVybnMgbm9ybWFsbHksIHJldHVybnMKdGhlIHJlc3VsdCBvZiB0aGF0IGNhbGwsIGVsc2UKPC9pbnM+PC9saT4KPGxpPjxpbnM+CmlmIHRoZSBjYWxsIHRvIDx0dD5vcGVyYXRvciBuZXcoPGk+c2l6ZTwvaT4pPC90dD4gdGhyb3dzIGFuIGV4Y2VwdGlvbiwgcmV0dXJucwphIG51bGwgcG9pbnRlci4KPC9pbnM+PC9saT4KPGxpPjxkZWw+CkV4ZWN1dGVzIGEgbG9vcDogV2l0aGluIHRoZSBsb29wLCB0aGUgZnVuY3Rpb24gZmlyc3QgYXR0ZW1wdHMgdG8gYWxsb2NhdGUgdGhlCnJlcXVlc3RlZCBzdG9yYWdlLiBXaGV0aGVyIHRoZSBhdHRlbXB0IGludm9sdmVzIGEgY2FsbCB0byB0aGUgU3RhbmRhcmQgQyBsaWJyYXJ5CmZ1bmN0aW9uIDx0dD5tYWxsb2M8L3R0PiBpcyB1bnNwZWNpZmllZC4KPC9kZWw+PC9saT4KPGxpPjxkZWw+ClJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgc3RvcmFnZSBpZiB0aGUgYXR0ZW1wdCBpcyBzdWNjZXNzZnVsLgpPdGhlcndpc2UsIGlmIHRoZSBsYXN0IGFyZ3VtZW50IHRvIDx0dD5zZXRfbmV3X2hhbmRsZXIoKTwvdHQ+IHdhcyBhIG51bGwKcG9pbnRlciwgcmV0dXJuIGEgbnVsbCBwb2ludGVyLgo8L2RlbD48L2xpPgo8bGk+PGRlbD4KT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gY2FsbHMgdGhlIGN1cnJlbnQgPGk+bmV3X2hhbmRsZXI8L2k+ICgxOC41LjIuMikuIElmIHRoZQpjYWxsZWQgZnVuY3Rpb24gcmV0dXJucywgdGhlIGxvb3AgcmVwZWF0cy4KPC9kZWw+PC9saT4KPGxpPjxkZWw+ClRoZSBsb29wIHRlcm1pbmF0ZXMgd2hlbiBhbiBhdHRlbXB0IHRvIGFsbG9jYXRlIHRoZSByZXF1ZXN0ZWQgc3RvcmFnZSBpcwpzdWNjZXNzZnVsIG9yIHdoZW4gYSBjYWxsZWQgPGk+bmV3X2hhbmRsZXI8L2k+IGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybi4gSWYgdGhlCmNhbGxlZCA8aT5uZXdfaGFuZGxlcjwvaT4gZnVuY3Rpb24gdGVybWluYXRlcyBieSB0aHJvd2luZyBhIDx0dD5iYWRfYWxsb2MKZXhjZXB0aW9uPC90dD4sIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbnVsbCBwb2ludGVyLgo8L2RlbD48L2xpPgo8L3VsPgo8cD4KLTktIFs8aT5FeGFtcGxlOjwvaT4KPC9wPgo8YmxvY2txdW90ZT48cHJlPlQqIHAxID0gbmV3IFQ7ICAgICAgICAgICAgICAgICA8aT4vLyB0aHJvd3MgYmFkX2FsbG9jIGlmIGl0IGZhaWxzPC9pPgpUKiBwMiA9IG5ldyhub3Rocm93KSBUOyAgICAgICAgPGk+Ly8gcmV0dXJucyAwIGlmIGl0IGZhaWxzPC9pPgo8L3ByZT48L2Jsb2NrcXVvdGU+CjxwPgotLTxpPmVuZCBleGFtcGxlPC9pPl0KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cHJlPnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIDxpPnB0cjwvaT4pIHRocm93KCk7CjxkZWw+dm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCogPGk+cHRyPC9pPiwgY29uc3Qgc3RkOjpub3Rocm93X3QmYW1wOykgdGhyb3coKTs8L2RlbD4KPC9wcmU+Cgo8YmxvY2txdW90ZT4KPHA+Ci0xMC0gPGk+RWZmZWN0czo8L2k+IFRoZSA8aT5kZWFsbG9jYXRpb24gZnVuY3Rpb248L2k+ICgzLjcuNC4yKSBjYWxsZWQgYnkgYQo8aT5kZWxldGUtZXhwcmVzc2lvbjwvaT4gdG8gcmVuZGVyIHRoZSB2YWx1ZSBvZiA8dHQ+PGk+cHRyPC9pPjwvdHQ+IGludmFsaWQuCjwvcD4KPHA+Ci0xMS0gPGk+UmVwbGFjZWFibGU6PC9pPiBhIEMrKyBwcm9ncmFtIG1heSBkZWZpbmUgYSBmdW5jdGlvbiB3aXRoIHRoaXMgZnVuY3Rpb24Kc2lnbmF0dXJlIHRoYXQgZGlzcGxhY2VzIHRoZSBkZWZhdWx0IHZlcnNpb24gZGVmaW5lZCBieSB0aGUgQysrIFN0YW5kYXJkCmxpYnJhcnkuCjwvcD4KPHA+Ci0xMi0gPGk+UmVxdWlyZXM6PC9pPiB0aGUgdmFsdWUgb2YgPHR0PjxpPnB0cjwvaT48L3R0PiBpcyBudWxsIG9yIHRoZSB2YWx1ZQpyZXR1cm5lZCBieSBhbiBlYXJsaWVyIGNhbGwgdG8gdGhlIDxkZWw+ZGVmYXVsdDwvZGVsPiA8aW5zPihwb3NzaWJseQpyZXBsYWNlZCk8L2lucz4gPHR0Pm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCk8L3R0PiBvciA8dHQ+b3BlcmF0b3IKbmV3KHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCZhbXA7KTwvdHQ+Lgo8L3A+CjxwPgotMTMtIDxpPkRlZmF1bHQgYmVoYXZpb3I6PC9pPgo8L3A+Cjx1bD4KPGxpPgpGb3IgYSBudWxsIHZhbHVlIG9mIDx0dD48aT5wdHI8L2k+PC90dD4sIGRvIG5vdGhpbmcuCjwvbGk+CjxsaT4KQW55IG90aGVyIHZhbHVlIG9mIDx0dD48aT5wdHI8L2k+PC90dD4gc2hhbGwgYmUgYSB2YWx1ZSByZXR1cm5lZCBlYXJsaWVyIGJ5IGEKY2FsbCB0byB0aGUgZGVmYXVsdCA8dHQ+b3BlcmF0b3IgbmV3PC90dD4sIHdoaWNoIHdhcyBub3QgaW52YWxpZGF0ZWQgYnkgYW4KaW50ZXJ2ZW5pbmcgY2FsbCB0byA8dHQ+b3BlcmF0b3IgZGVsZXRlKHZvaWQqKTwvdHQ+ICgxNy40LjMuNykuIEZvciBzdWNoIGEKbm9uLW51bGwgdmFsdWUgb2YgPHR0PjxpPnB0cjwvaT48L3R0PiwgcmVjbGFpbXMgc3RvcmFnZSBhbGxvY2F0ZWQgYnkgdGhlIGVhcmxpZXIKY2FsbCB0byB0aGUgZGVmYXVsdCA8dHQ+b3BlcmF0b3IgbmV3PC90dD4uCjwvbGk+CjwvdWw+CjxwPgotMTQtIDxpPlJlbWFya3M6PC9pPiAgSXQgaXMgdW5zcGVjaWZpZWQgdW5kZXIgd2hhdCBjb25kaXRpb25zIHBhcnQgb3IgYWxsIG9mCnN1Y2ggcmVjbGFpbWVkIHN0b3JhZ2UgaXMgYWxsb2NhdGVkIGJ5IGEgc3Vic2VxdWVudCBjYWxsIHRvIDx0dD5vcGVyYXRvcgpuZXc8L3R0PiBvciBhbnkgb2YgPHR0PmNhbGxvYzwvdHQ+LCA8dHQ+bWFsbG9jPC90dD4sIG9yIDx0dD5yZWFsbG9jPC90dD4sCmRlY2xhcmVkIGluIDx0dD4mbHQ7Y3N0ZGxpYiZndDs8L3R0Pi4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cHJlPjxpbnM+dm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCogPGk+cHRyPC9pPiwgY29uc3Qgc3RkOjpub3Rocm93X3QmYW1wOykgdGhyb3coKTs8L2lucz4KPC9wcmU+Cgo8YmxvY2txdW90ZT4KPHA+PGlucz4KLTE1LSA8aT5FZmZlY3RzOjwvaT4gU2FtZSBhcyBhYm92ZSwgZXhjZXB0IHRoYXQgaXQgaXMgY2FsbGVkIGJ5IHRoZQppbXBsZW1lbnRhdGlvbiB3aGVuIGFuIGV4Y2VwdGlvbiBwcm9wYWdhdGVzIGZyb20gYSBub3Rocm93IHBsYWNlbWVudCB2ZXJzaW9uCm9mIHRoZSA8aT5uZXctZXhwcmVzc2lvbjwvaT4gKGkuZS4gd2hlbiB0aGUgY29uc3RydWN0b3IgdGhyb3dzIGFuIGV4Y2VwdGlvbikuCjwvaW5zPjwvcD4KPHA+PGlucz4KLTE2LSA8aT5SZXBsYWNlYWJsZTo8L2k+IGEgQysrIHByb2dyYW0gbWF5IGRlZmluZSBhIGZ1bmN0aW9uIHdpdGggdGhpcyBmdW5jdGlvbgpzaWduYXR1cmUgdGhhdCBkaXNwbGFjZXMgdGhlIGRlZmF1bHQgdmVyc2lvbiBkZWZpbmVkIGJ5IHRoZSBDKysgU3RhbmRhcmQKbGlicmFyeS4KPC9pbnM+PC9wPgo8cD48aW5zPgotMTctIDxpPlJlcXVpcmVzOjwvaT4gdGhlIHZhbHVlIG9mIDx0dD48aT5wdHI8L2k+PC90dD4gaXMgbnVsbCBvciB0aGUKdmFsdWUgcmV0dXJuZWQgYnkgYW4gZWFybGllciBjYWxsIHRvIHRoZSAocG9zc2libHkgcmVwbGFjZWQpIDx0dD5vcGVyYXRvcgpuZXcoc3RkOjpzaXplX3QpPC90dD4gb3IgPHR0Pm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3QKc3RkOjpub3Rocm93X3QmYW1wOyk8L3R0Pi4gPC9pbnM+PC9wPgo8cD48aW5zPgotMTgtIDxpPkRlZmF1bHQgYmVoYXZpb3I6PC9pPiBDYWxscyA8dHQ+b3BlcmF0b3IgZGVsZXRlKDxpPnB0cjwvaT4pPC90dD4uCjwvaW5zPjwvcD4KPC9ibG9ja3F1b3RlPgoKPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAxOC41LjEuMiBbbmV3LmRlbGV0ZS5hcnJheV0KPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+dm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QgPGk+c2l6ZTwvaT4sIGNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspIHRocm93KCk7CjwvcHJlPgoKPGJsb2NrcXVvdGU+CjxwPgotNS0gPGk+RWZmZWN0czo8L2k+IFNhbWUgYXMgYWJvdmUsIGV4Y2VwdCB0aGF0IGl0IGlzIGNhbGxlZCBieSBhIHBsYWNlbWVudAp2ZXJzaW9uIG9mIGEgPGk+bmV3LWV4cHJlc3Npb248L2k+IHdoZW4gYSBDKysgcHJvZ3JhbSBwcmVmZXJzIGEgbnVsbCBwb2ludGVyIHJlc3VsdCBhcwphbiBlcnJvciBpbmRpY2F0aW9uLCBpbnN0ZWFkIG9mIGEgPHR0PmJhZF9hbGxvYzwvdHQ+IGV4Y2VwdGlvbi4KPC9wPgoKPHA+Ci02LSA8aT5SZXBsYWNlYWJsZTo8L2k+ICBhIEMrKyBwcm9ncmFtIGNhbiBkZWZpbmUgYSBmdW5jdGlvbiB3aXRoIHRoaXMgZnVuY3Rpb24Kc2lnbmF0dXJlIHRoYXQgZGlzcGxhY2VzIHRoZSBkZWZhdWx0IHZlcnNpb24gZGVmaW5lZCBieSB0aGUgQysrIFN0YW5kYXJkCmxpYnJhcnkuCjwvcD4KCjxwPgotNy0gPGk+UmVxdWlyZWQgYmVoYXZpb3I6PC9pPiA8ZGVsPlNhbWUgYXMgZm9yIG9wZXJhdG9yIDx0dD5uZXcoc3RkOjpzaXplX3QsCmNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspPC90dD4uIFRoaXMgbm90aHJvdyB2ZXJzaW9uIG9mIG9wZXJhdG9yIDx0dD5uZXdbXTwvdHQ+CnJldHVybnMgYSBwb2ludGVyIG9idGFpbmVkIGFzIGlmIGFjcXVpcmVkIGZyb20gdGhlIG9yZGluYXJ5IHZlcnNpb24uPC9kZWw+CjxpbnM+UmV0dXJuIGEgbm9uLW51bGwgcG9pbnRlciB0byBzdWl0YWJseSBhbGlnbmVkIHN0b3JhZ2UgKDMuNy40KSwgb3IgZWxzZQpyZXR1cm4gYSBudWxsIHBvaW50ZXIuIFRoaXMgbm90aHJvdyB2ZXJzaW9uIG9mIG9wZXJhdG9yIG5ldyByZXR1cm5zIGEgcG9pbnRlcgpvYnRhaW5lZCBhcyBpZiBhY3F1aXJlZCBmcm9tIHRoZSAocG9zc2libHkgcmVwbGFjZWQpIDx0dD5vcGVyYXRvcgpuZXdbXShzdGQ6OnNpemVfdCA8aT5zaXplPC9pPik8L3R0Pi4gVGhpcyByZXF1aXJlbWVudCBpcyBiaW5kaW5nIG9uIGEKcmVwbGFjZW1lbnQgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uLjwvaW5zPgo8L3A+Cgo8cD4KLTgtIDxpPkRlZmF1bHQgYmVoYXZpb3I6PC9pPiA8ZGVsPlJldHVybnMgPHR0Pm9wZXJhdG9yIG5ldyg8aT5zaXplPC9pPiwKbm90aHJvdyk8L3R0Pi48L2RlbD4KPC9wPgoKPHVsPgo8bGk+PGlucz4KQ2FsbHMgPHR0Pm9wZXJhdG9yIG5ld1tdKDxpPnNpemU8L2k+KTwvdHQ+Lgo8L2lucz48L2xpPgo8bGk+PGlucz4KSWYgdGhlIGNhbGwgdG8gPHR0Pm9wZXJhdG9yIG5ld1tdKDxpPnNpemU8L2k+KTwvdHQ+IHJldHVybnMgbm9ybWFsbHksIHJldHVybnMKdGhlIHJlc3VsdCBvZiB0aGF0IGNhbGwsIGVsc2UKPC9pbnM+PC9saT4KPGxpPjxpbnM+CmlmIHRoZSBjYWxsIHRvIDx0dD5vcGVyYXRvciBuZXdbXSg8aT5zaXplPC9pPik8L3R0PiB0aHJvd3MgYW4gZXhjZXB0aW9uLCByZXR1cm5zCmEgbnVsbCBwb2ludGVyLgo8L2lucz48L2xpPgo8L3VsPgo8L2Jsb2NrcXVvdGU+Cgo8cHJlPnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogPGk+cHRyPC9pPikgdGhyb3coKTsgCnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogPGk+cHRyPC9pPiwgY29uc3Qgc3RkOjpub3Rocm93X3QmYW1wOykgdGhyb3coKTsKPC9wcmU+Cgo8YmxvY2txdW90ZT4KPHA+Ci05LSA8aT5FZmZlY3RzOjwvaT4gVGhlIDxpPmRlYWxsb2NhdGlvbiBmdW5jdGlvbjwvaT4gKDMuNy40LjIpIGNhbGxlZCBieSB0aGUKYXJyYXkgZm9ybSBvZiBhIDxpPmRlbGV0ZS1leHByZXNzaW9uPC9pPiB0byByZW5kZXIgdGhlIHZhbHVlIG9mCjx0dD48aT5wdHI8L2k+PC90dD4gaW52YWxpZC4KPC9wPgoKPHA+Ci0xMC0gPGk+UmVwbGFjZWFibGU6PC9pPiBhIEMrKyBwcm9ncmFtIGNhbiBkZWZpbmUgYSBmdW5jdGlvbiB3aXRoIHRoaXMgZnVuY3Rpb24Kc2lnbmF0dXJlIHRoYXQgZGlzcGxhY2VzIHRoZSBkZWZhdWx0IHZlcnNpb24gZGVmaW5lZCBieSB0aGUgQysrIFN0YW5kYXJkCmxpYnJhcnkuCjwvcD4KCjxwPgotMTEtIDxpPlJlcXVpcmVzOjwvaT4gdGhlIHZhbHVlIG9mCjx0dD48aT5wdHI8L2k+PC90dD4gaXMgbnVsbCBvciB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgYW4gZWFybGllciBjYWxsIHRvCjx0dD5vcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCk8L3R0PiBvciA8dHQ+b3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0CnN0ZDo6bm90aHJvd190JmFtcDspPC90dD4uCjwvcD4KCjxwPgotMTItIDxpPkRlZmF1bHQgYmVoYXZpb3I6PC9pPiBDYWxscyA8dHQ+b3BlcmF0b3IgZGVsZXRlKDxpPnB0cjwvaT4pPC90dD4gb3IKPHR0Pm9wZXJhdG9yIGRlbGV0ZTxpbnM+W108L2lucz4oPGk+cHRyPC9pPjxkZWw+LCBzdGQ6Om5vdGhyb3c8L2RlbD4pPC90dD4gcmVzcGVjdGl2ZWx5Lgo8L3A+CjwvYmxvY2txdW90ZT4KCjwvYmxvY2txdW90ZT4KCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlllcywgdGhleSBtYXkgYmVjb21lIHVubGlua2VkLCBhbmQgdGhhdCBpcyBieSBkZXNpZ24uIElmIGEgdXNlcgpyZXBsYWNlcyBvbmUsIHRoZSB1c2VyIHNob3VsZCBhbHNvIHJlcGxhY2UgdGhlIG90aGVyLjwvcD4KCjxwPjxpPlsKUmVvcGVuZWQgZHVlIHRvIGEgZ2NjIGNvbnZlcnNhdGlvbiBiZXR3ZWVuIEhvd2FyZCwgTWFydGluIGFuZCBHYWJ5LiAgRm9yd2FyZGluZwpvciBub3QgaXMgdmlzaWJsZSBiZWhhdmlvciB0byB0aGUgY2xpZW50IGFuZCBpdCB3b3VsZCBiZSB1c2VmdWwgZm9yIHRoZSBjbGllbnQKdG8ga25vdyB3aGljaCBiZWhhdmlvciBpdCBjb3VsZCBkZXBlbmQgb24uCl08L2k+PC9wPgoKCjxwPjxpPlsKQmF0YXZpYTogUm9iZXJ0IHZvaWNlZCBzZXJpb3VzIHJlc2VydmF0aW9ucyBhYm91dCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IKaGlzIGN1c3RvbWVycy4KXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIwOCI+PC9hPjIwOC4gVW5uZWNlc3NhcnkgcmVzdHJpY3Rpb24gb24gcGFzdC10aGUtZW5kIGl0ZXJhdG9yczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNC4xIFtpdGVyYXRvci5yZXF1aXJlbWVudHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFN0ZXBoZW4gQ2xlYXJ5IDxiPkRhdGU6PC9iPiAyMDAwLTAyLTAyPC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjaXRlcmF0b3IucmVxdWlyZW1lbnRzIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbaXRlcmF0b3IucmVxdWlyZW1lbnRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2l0ZXJhdG9yLnJlcXVpcmVtZW50cyI+aXNzdWVzPC9hPiBpbiBbaXRlcmF0b3IucmVxdWlyZW1lbnRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SW4gMjQuMSBwYXJhZ3JhcGggNSwgaXQgaXMgc3RhdGVkICIuIC4gLiBEZXJlZmVyZW5jZWFibGUgYW5kCnBhc3QtdGhlLWVuZCB2YWx1ZXMgYXJlIGFsd2F5cyBub24tc2luZ3VsYXIuIjwvcD4KPHA+VGhpcyBwbGFjZXMgYW4gdW5uZWNlc3NhcnkgcmVzdHJpY3Rpb24gb24gcGFzdC10aGUtZW5kIGl0ZXJhdG9ycyBmb3IKY29udGFpbmVycyB3aXRoIGZvcndhcmQgaXRlcmF0b3JzIChmb3IgZXhhbXBsZSwgYSBzaW5nbHktbGlua2VkIGxpc3QpLiBJZiB0aGUKcGFzdC10aGUtZW5kIHZhbHVlIG9uIHN1Y2ggYSBjb250YWluZXIgd2FzIGEgd2VsbC1rbm93biBzaW5ndWxhciB2YWx1ZSwgaXQgd291bGQKc3RpbGwgc2F0aXNmeSBhbGwgZm9yd2FyZCBpdGVyYXRvciByZXF1aXJlbWVudHMuPC9wPgo8cD5SZW1vdmluZyB0aGlzIHJlc3RyaWN0aW9uIHdvdWxkIGFsbG93LCBmb3IgZXhhbXBsZSwgYSBzaW5nbHktbGlua2VkIGxpc3QKd2l0aG91dCBhICJmb290ZXIiIG5vZGUuPC9wPgo8cD5UaGlzIHdvdWxkIGhhdmUgYW4gaW1wYWN0IG9uIGV4aXN0aW5nIGNvZGUgdGhhdCBleHBlY3RzIHBhc3QtdGhlLWVuZAppdGVyYXRvcnMgb2J0YWluZWQgZnJvbSBkaWZmZXJlbnQgKGdlbmVyaWMpIGNvbnRhaW5lcnMgYmVpbmcgbm90IGVxdWFsLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNC4xIFtpdGVyYXRvci5yZXF1aXJlbWVudHNdIHBhcmFncmFwaCA1LCB0aGUgbGFzdCBzZW50ZW5jZSwgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgo8cD5EZXJlZmVyZW5jZWFibGUgYW5kIHBhc3QtdGhlLWVuZCB2YWx1ZXMgYXJlIGFsd2F5cyBub24tc2luZ3VsYXIuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CjxwPkRlcmVmZXJlbmNlYWJsZSB2YWx1ZXMgYXJlIGFsd2F5cyBub24tc2luZ3VsYXIuJm5ic3A7PC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkZvciBzb21lIGtpbmRzIG9mIGNvbnRhaW5lcnMsIGluY2x1ZGluZyBzaW5nbHkgbGlua2VkIGxpc3RzIGFuZAp6ZXJvLWxlbmd0aCB2ZWN0b3JzLCBudWxsIHBvaW50ZXJzIGFyZSBwZXJmZWN0bHkgcmVhc29uYWJsZSBwYXN0LXRoZS1lbmQKaXRlcmF0b3JzLiAgTnVsbCBwb2ludGVycyBhcmUgc2luZ3VsYXIuCjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIwOSI+PC9hPjIwOS4gYmFzaWNfc3RyaW5nIGRlY2xhcmF0aW9ucyBpbmNvbnNpc3RlbnQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjEuMyBbYmFzaWMuc3RyaW5nXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBJZ29yIFN0YXVkZXIgPGI+RGF0ZTo8L2I+IDIwMDAtMDItMTE8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNiYXNpYy5zdHJpbmciPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtiYXNpYy5zdHJpbmddLjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYmFzaWMuc3RyaW5nIj5pc3N1ZXM8L2E+IGluIFtiYXNpYy5zdHJpbmddLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5JbiBTZWN0aW9uIDIxLjMgW2Jhc2ljLnN0cmluZ10gdGhlIGJhc2ljX3N0cmluZyBtZW1iZXIgZnVuY3Rpb24KZGVjbGFyYXRpb25zIHVzZSBhIGNvbnNpc3RlbnQgc3R5bGUgZXhjZXB0IGZvciB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczo8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+dm9pZCBwdXNoX2JhY2soY29uc3QgY2hhclQpOwpiYXNpY19zdHJpbmcmYW1wOyBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJmFtcDspOwp2b2lkIHN3YXAoYmFzaWNfc3RyaW5nJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7JmFtcDspOzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPi0gcHVzaF9iYWNrLCBhc3NpZ24sIHN3YXA6IG1pc3NpbmcgYXJndW1lbnQgbmFtZSZuYnNwOzxicj4KLSBwdXNoX2JhY2s6IHVzZSBvZiBjb25zdCB3aXRoIGNoYXJUIChpLmUuIFBPRCB0eXBlIHBhc3NlZCBieSB2YWx1ZQpub3QgYnkgcmVmZXJlbmNlIC0gc2hvdWxkIGJlIGNoYXJUIG9yIGNvbnN0IGNoYXJUJmFtcDsgKTxicj4KLSBzd2FwOiByZWR1bmRhbnQgdXNlIG9mIHRlbXBsYXRlIHBhcmFtZXRlcnMgaW4gYXJndW1lbnQKYmFzaWNfc3RyaW5nJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7JmFtcDs8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiBTZWN0aW9uIDIxLjMgW2Jhc2ljLnN0cmluZ10gY2hhbmdlIHRoZSBiYXNpY19zdHJpbmcgbWVtYmVyCmZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBwdXNoX2JhY2ssIGFzc2lnbiwgYW5kIHN3YXAgdG86PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnZvaWQgcHVzaF9iYWNrKGNoYXJUIGMpOyAKCmJhc2ljX3N0cmluZyZhbXA7IGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmYW1wOyBzdHIpOwp2b2lkIHN3YXAoYmFzaWNfc3RyaW5nJmFtcDsgc3RyKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5BbHRob3VnaCB0aGUgc3RhbmRhcmQgaXMgaW4gZ2VuZXJhbCBub3QgY29uc2lzdGVudCBpbiBkZWNsYXJhdGlvbgpzdHlsZSwgdGhlIGJhc2ljX3N0cmluZyBkZWNsYXJhdGlvbnMgYXJlIGNvbnNpc3RlbnQgb3RoZXIgdGhhbiB0aGUKYWJvdmUuICBUaGUgTFdHIGZlbHQgdGhhdCB0aGlzIHdhcyBzdWZmaWNpZW50IHJlYXNvbiB0byBtZXJpdCB0aGUKY2hhbmdlLgo8L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyMTAiPjwvYT4yMTAuIGRpc3RhbmNlIGZpcnN0IGFuZCBsYXN0IGNvbmZ1c2VkPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI1IFthbGdvcml0aG1zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBMaXNhIExpcHBpbmNvdHQgPGI+RGF0ZTo8L2I+IDIwMDAtMDItMTU8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2FsZ29yaXRobXMiPmlzc3VlczwvYT4gaW4gW2FsZ29yaXRobXNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RDIj5UQzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5JbiBwYXJhZ3JhcGggOSBvZiBzZWN0aW9uIDI1IFthbGdvcml0aG1zXSwgaXQgaXMgd3JpdHRlbjo8L3A+CjxibG9ja3F1b3RlPgogIDxwPiAgICAgIEluIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYWxnb3JpdGhtcyBvcGVyYXRvcnMgKyBhbmQgLSBhcmUgdXNlZAogICAgICAgICAgIGZvciBzb21lIG9mIHRoZSBpdGVyYXRvciBjYXRlZ29yaWVzIGZvciB3aGljaCB0aGV5IGRvIG5vdCBoYXZlIHRvCiAgICAgICAgICAgYmUgZGVmaW5lZC4gSW4gdGhlc2UgY2FzZXMgdGhlIHNlbWFudGljcyBvZiBbLi4uXSBhLWIgaXMgdGhlIHNhbWUKICAgICAgICAgICBhcyBvZjxicj4KICA8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5yZXR1cm4gZGlzdGFuY2UoYSwgYik7PC90dD48L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPk9uIHRoZSBsYXN0IGxpbmUgb2YgcGFyYWdyYXBoIDkgb2Ygc2VjdGlvbiAyNSBbYWxnb3JpdGhtc10gY2hhbmdlCjx0dD4iYS1iIjwvdHQ+IHRvIDx0dD4iYi1hIi48L3R0PjwvcD4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlcmUgYXJlIHR3byB3YXlzIHRvIGZpeCB0aGUgZGVmZWN0OyBjaGFuZ2UgdGhlIGRlc2NyaXB0aW9uIHRvIGItYQpvciBjaGFuZ2UgdGhlIHJldHVybiB0byBkaXN0YW5jZShiLGEpLiAgVGhlIExXRyBwcmVmZXJyZWQgdGhlCmZvcm1lciBmb3IgY29uc2lzdGVuY3kuPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjExIj48L2E+MjExLiBvcGVyYXRvciZndDsmZ3Q7KGlzdHJlYW0mYW1wOywgc3RyaW5nJmFtcDspIGRvZXNuJ3Qgc2V0IGZhaWxiaXQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjEuMy44LjkgW3N0cmluZy5pb10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gU2NvdHQgU255ZGVyIDxiPkRhdGU6PC9iPiAyMDAwLTAyLTA0PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmcuaW8iPmlzc3VlczwvYT4gaW4gW3N0cmluZy5pb10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RyZWFtIGV4dHJhY3Rpb24gb3BlcmF0b3IgZm9yIHN0ZDo6c3RyaW5nIChzZWN0aW9uCjIxLjMuNy45IFtsaWIuc3RyaW5nLmlvXSkgZG9lcyBub3QgY29udGFpbiBhIHJlcXVpcmVtZW50IHRoYXQgZmFpbGJpdCBiZSBzZXQgaW4KdGhlIGNhc2UgdGhhdCB0aGUgb3BlcmF0b3IgZmFpbHMgdG8gZXh0cmFjdCBhbnkgY2hhcmFjdGVycyBmcm9tIHRoZSBpbnB1dApzdHJlYW0uPC9wPgo8cD5UaGlzIGltcGxpZXMgdGhhdCB0aGUgdHlwaWNhbCBjb25zdHJ1Y3Rpb248L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+c3RkOjppc3RyZWFtIGlzOwpzdGQ6OnN0cmluZyBzdHI7Ci4uLgp3aGlsZSAoaXMgJmd0OyZndDsgc3RyKSAuLi4gOzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPih3aGljaCB0ZXN0cyBmYWlsYml0KSBpcyBub3QgcmVxdWlyZWQgdG8gdGVybWluYXRlIGF0IEVPRi48L3A+CjxwPkZ1cnRoZXJtb3JlLCB0aGlzIGlzIGluY29uc2lzdGVudCB3aXRoIG90aGVyIGV4dHJhY3Rpb24gb3BlcmF0b3JzLAp3aGljaCBkbyBpbmNsdWRlIHRoaXMgcmVxdWlyZW1lbnQuIChTZWUgc2VjdGlvbnMgMjcuNi4xLjIgW2lzdHJlYW0uZm9ybWF0dGVkXSBhbmQgMjcuNi4xLjMgW2lzdHJlYW0udW5mb3JtYXR0ZWRdKSwgd2hlcmUgdGhpcwpyZXF1aXJlbWVudCBpcyBwcmVzZW50LCBlaXRoZXIgZXhwbGljaXRseSBvciBpbXBsaWNpdGx5LCBmb3IgdGhlCmV4dHJhY3Rpb24gb3BlcmF0b3JzLiBJdCBpcyBhbHNvIHByZXNlbnQgZXhwbGljaXRseSBpbiB0aGUgZGVzY3JpcHRpb24Kb2YgZ2V0bGluZSAoaXN0cmVhbSZhbXA7LCBzdHJpbmcmYW1wOywgY2hhclQpIGluIHNlY3Rpb24gMjEuMy44LjkgW3N0cmluZy5pb10gcGFyYWdyYXBoIDguKTwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluc2VydCBuZXcgcGFyYWdyYXBoIGFmdGVyIHBhcmFncmFwaCAyIGluIHNlY3Rpb24gMjEuMy44LjkgW3N0cmluZy5pb106PC9wPgo8YmxvY2txdW90ZT4KCjxwPklmIHRoZSBmdW5jdGlvbiBleHRyYWN0cyBubyBjaGFyYWN0ZXJzLCBpdCBjYWxscwppcy5zZXRzdGF0ZShpb3M6OmZhaWxiaXQpIHdoaWNoIG1heSB0aHJvdyBpb3NfYmFzZTo6ZmFpbHVyZQooMjcuNC40LjMpLjwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjEyIj48L2E+MjEyLiBFbXB0eSByYW5nZSBiZWhhdmlvciB1bmNsZWFyIGZvciBzZXZlcmFsIGFsZ29yaXRobXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjUuMy43IFthbGcubWluLm1heF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTmljbyBKb3N1dHRpcyA8Yj5EYXRlOjwvYj4gMjAwMC0wMi0yNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxnLm1pbi5tYXgiPmlzc3VlczwvYT4gaW4gW2FsZy5taW4ubWF4XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIHN0YW5kYXJkIGRvZXNuJ3Qgc3BlY2lmeSB3aGF0IG1pbl9lbGVtZW50KCkgYW5kIG1heF9lbGVtZW50KCkgc2hhbGwKcmV0dXJuIGlmIHRoZSByYW5nZSBpcyBlbXB0eSAoZmlyc3QgZXF1YWxzIGxhc3QpLiBUaGUgdXN1YWwgaW1wbGVtZW50YXRpb25zCnJldHVybiBsYXN0LiBUaGlzIHByb2JsZW0gc2VlbXMgYWxzbyBhcHBseSB0byBwYXJ0aXRpb24oKSwgc3RhYmxlX3BhcnRpdGlvbigpLApuZXh0X3Blcm11dGF0aW9uKCksIGFuZCBwcmV2X3Blcm11dGF0aW9uKCkuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjUuMy43IFthbGcubWluLm1heF0gLSBNaW5pbXVtIGFuZCBtYXhpbXVtLCBwYXJhZ3JhcGhzIDcgYW5kCjksIGFwcGVuZDogUmV0dXJucyBsYXN0IGlmIGZpcnN0PT1sYXN0LjwvcD4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBsb29rZWQgaW4gc29tZSBkZXRhaWwgYXQgYWxsIG9mIHRoZSBhYm92ZSBtZW50aW9uZWQKYWxnb3JpdGhtcywgYnV0IGJlbGlldmVzIHRoYXQgZXhjZXB0IGZvciBtaW5fZWxlbWVudCgpIGFuZAptYXhfZWxlbWVudCgpIGl0IGlzIGFscmVhZHkgY2xlYXIgdGhhdCBsYXN0IGlzIHJldHVybmVkIGlmIGZpcnN0ID09Cmxhc3QuPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjE0Ij48L2E+MjE0LiBzZXQ6OmZpbmQoKSBtaXNzaW5nIGNvbnN0IG92ZXJsb2FkPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjMuMyBbc2V0XSwgMjMuMy40IFttdWx0aXNldF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSnVkeSBXYXJkIDxiPkRhdGU6PC9iPiAyMDAwLTAyLTI4PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzZXQiPmlzc3VlczwvYT4gaW4gW3NldF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EdXBsaWNhdGUgb2Y6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0NTAiPjQ1MDwvYT48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBhc3NvY2lhdGl2ZSBjb250YWluZXIgcmVxdWlyZW1lbnRzIGluClRhYmxlIDY5IHN0YXRlIHRoYXQgdGhlIGZpbmQgbWVtYmVyIGZ1bmN0aW9uIHNob3VsZCAicmV0dXJuCml0ZXJhdG9yOyBjb25zdF9pdGVyYXRvciBmb3IgY29uc3RhbnQgYSIuIFRoZSBtYXAgYW5kIG11bHRpbWFwCmNvbnRhaW5lciBkZXNjcmlwdGlvbnMgaGF2ZSB0d28gb3ZlcmxvYWRlZCB2ZXJzaW9ucyBvZiBmaW5kLCBidXQgc2V0CmFuZCBtdWx0aXNldCBkbyBub3QsIGFsbCB0aGV5IGhhdmUgaXM6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPml0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUgJmFtcDsgeCkgY29uc3Q7PC9wcmU+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgcHJvdG90eXBlcyBmb3IgZmluZCgpLCBsb3dlcl9ib3VuZCgpLCB1cHBlcl9ib3VuZCgpLCBhbmQKZXF1YWxfcmFuZ2UoKSBpbiBzZWN0aW9uIDIzLjMuMyBbc2V0XSBhbmQgc2VjdGlvbiAyMy4zLjQgW211bHRpc2V0XSB0byBlYWNoIGhhdmUgdHdvIG92ZXJsb2Fkczo8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+aXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSAmYW1wOyB4KTsKY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSAmYW1wOyB4KSBjb25zdDs8L3ByZT4KICA8cHJlPml0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlICZhbXA7IHgpOwpjb25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSAmYW1wOyB4KSBjb25zdDs8L3ByZT4KICA8cHJlPml0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlICZhbXA7IHgpOwpjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSAmYW1wOyB4KSBjb25zdDs8L3ByZT4KICA8cHJlPnBhaXImbHQ7aXRlcmF0b3IsIGl0ZXJhdG9yJmd0OyBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSAmYW1wOyB4KTsKcGFpciZsdDtjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3ImZ3Q7IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlICZhbXA7IHgpIGNvbnN0OzwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bVG9reW86IEF0IHRoZSByZXF1ZXN0IG9mIHRoZSBMV0csIEp1ZHkgV2FyZCBwcm92aWRlZCB3b3JkaW5nCmV4dGVuZGluZyB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiB0byBsb3dlcl9ib3VuZCwgdXBwZXJfYm91bmQsIGFuZAplcXVhbF9yYW5nZS5dPC9pPjwvcD4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjE3Ij48L2E+MjE3LiBGYWNldHMgZXhhbXBsZSAoQ2xhc3NpZnlpbmcgSmFwYW5lc2UgY2hhcmFjdGVycykgY29udGFpbnMgZXJyb3JzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuOCBbZmFjZXRzLmV4YW1wbGVzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDAtMDItMjk8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2ZhY2V0cy5leGFtcGxlcyI+aXNzdWVzPC9hPiBpbiBbZmFjZXRzLmV4YW1wbGVzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIGV4YW1wbGUgaW4gMjIuMi44LCBwYXJhZ3JhcGggMTEgY29udGFpbnMgdGhlIGZvbGxvd2luZyBlcnJvcnM6PC9wPgo8cD4xKSBUaGUgbWVtYmVyIGZ1bmN0aW9uIGBNeTo6SkN0eXBlOjppc19rYW5qaSgpJyBpcyBub24tY29uc3Q7IHRoZSBmdW5jdGlvbgptdXN0IGJlIGNvbnN0IGluIG9yZGVyIGZvciBpdCB0byBiZSBjYWxsYWJsZSBvbiBhIGNvbnN0IG9iamVjdCAoYSByZWZlcmVuY2UgdG8Kd2hpY2ggd2hpY2ggaXMgd2hhdCBzdGQ6OnVzZV9mYWNldCZsdDsmZ3Q7KCkgcmV0dXJucykuPC9wPgo8cD4yKSBJbiBmaWxlIGZpbHQuQywgdGhlIGRlZmluaXRpb24gb2YgYEpDdHlwZTo6aWQnIG11c3QgYmUgcXVhbGlmaWVkIHdpdGggdGhlCm5hbWUgb2YgdGhlIG5hbWVzcGFjZSBgTXknLjwvcD4KPHA+MykgSW4gdGhlIGRlZmluaXRpb24gb2YgYGxvYycgYW5kIHN1YnNlcXVlbnRseSBpbiB0aGUgY2FsbCB0byB1c2VfZmFjZXQmbHQ7Jmd0OygpCmluIG1haW4oKSwgdGhlIG5hbWUgb2YgdGhlIGZhY2V0IGlzIG1pc3NwZWxsZWQ6IGl0IHNob3VsZCByZWFkIGBNeTo6SkN0eXBlJwpyYXRoZXIgdGhhbiBgTXk6OkpDVHlwZScuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSB0aGUgIkNsYXNzaWZ5aW5nIEphcGFuZXNlIGNoYXJhY3RlcnMiIGV4YW1wbGUgaW4gMjIuMi44LApwYXJhZ3JhcGggMTEgd2l0aCB0aGUgZm9sbG93aW5nOjwvcD4KPHByZT4jaW5jbHVkZSAmbHQ7bG9jYWxlJmd0OzwvcHJlPgo8cHJlPm5hbWVzcGFjZSBNeSB7CiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgY2xhc3MgSkN0eXBlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQgewogICAgcHVibGljOgogICAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOyAgICAgLy8gIHJlcXVpcmVkIGZvciB1c2UgYXMgYSBuZXcgbG9jYWxlIGZhY2V0CiAgICAgICAgYm9vbCBpc19rYW5qaSAod2NoYXJfdCBjKSBjb25zdDsKICAgICAgICBKQ3R5cGUoKSB7fQogICAgcHJvdGVjdGVkOgogICAgICAgIH5KQ3R5cGUoKSB7fQogICAgfTsKfTwvcHJlPgo8cHJlPi8vICBmaWxlOiAgZmlsdC5DCiNpbmNsdWRlICZsdDtpb3N0cmVhbSZndDsKI2luY2x1ZGUgJmx0O2xvY2FsZSZndDsKI2luY2x1ZGUgImpjdHlwZSIgICAgICAgICAgICAgICAgIC8vICBhYm92ZQpzdGQ6OmxvY2FsZTo6aWQgTXk6OkpDdHlwZTo6aWQ7ICAgLy8gIHRoZSBzdGF0aWMgIEpDdHlwZSAgbWVtYmVyCmRlY2xhcmVkIGFib3ZlLjwvcHJlPgo8cHJlPmludCBtYWluKCkKewogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAgIHR5cGVkZWYgY3R5cGUmbHQ7d2NoYXJfdCZndDsgd2N0eXBlOwogICAgbG9jYWxlIGxvYyhsb2NhbGUoIiIpLCAgICAgICAgICAgICAgLy8gIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxvY2FsZS4uLgogICAgICAgICAgICAgICBuZXcgTXk6OkpDdHlwZSk7ICAgICAgICAgLy8gIGFuZCBhIG5ldyBmZWF0dXJlIC4uLgogICAgd2NoYXJfdCBjID0gdXNlX2ZhY2V0Jmx0O3djdHlwZSZndDsobG9jKS53aWRlbignIScpOwogICAgaWYgKCF1c2VfZmFjZXQmbHQ7TXk6OkpDdHlwZSZndDsobG9jKS5pc19rYW5qaShjKSkKICAgICAgICBjb3V0ICZsdDsmbHQ7ICJubyBpdCBpc24ndCEiICZsdDsmbHQ7IGVuZGw7CiAgICByZXR1cm4gMDsKfTwvcHJlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjIwIj48L2E+MjIwLiB+aW9zX2Jhc2UoKSB1c2FnZSB2YWxpZD88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNC4yLjcgW2lvcy5iYXNlLmNvbnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEpvbmF0aGFuIFNjaGlsbGluZywgSG93YXJkIEhpbm5hbnQgPGI+RGF0ZTo8L2I+IDIwMDAtMDMtMTM8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIHByZS1jb25kaXRpb25zIGZvciB0aGUgaW9zX2Jhc2UgZGVzdHJ1Y3RvciBhcmUgZGVzY3JpYmVkIGluIDI3LjQuMi43CnBhcmFncmFwaCAyOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+RWZmZWN0czogRGVzdHJveXMgYW4gb2JqZWN0IG9mIGNsYXNzIGlvc19iYXNlLiBDYWxscyBlYWNoIHJlZ2lzdGVyZWQKICBjYWxsYmFjayBwYWlyIChmbixpbmRleCkgKDI3LjQuMi42KSBhcyAoKmZuKShlcmFzZV9ldmVudCwqdGhpcyxpbmRleCkgYXQgc3VjaAogIHRpbWUgdGhhdCBhbnkgaW9zX2Jhc2UgbWVtYmVyIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIHdpdGhpbiBmbiBoYXMgd2VsbCBkZWZpbmVkCiAgcmVzdWx0cy48L3A+CjwvYmxvY2txdW90ZT4KPHA+QnV0IHdoYXQgaXMgbm90IGNsZWFyIGlzOiBJZiBubyBjYWxsYmFjayBmdW5jdGlvbnMgd2VyZSBldmVyIHJlZ2lzdGVyZWQsIGRvZXMKaXQgbWF0dGVyIHdoZXRoZXIgdGhlIGlvc19iYXNlIG1lbWJlcnMgd2VyZSBldmVyIGluaXRpYWxpemVkPzwvcD4KPHA+Rm9yIGluc3RhbmNlLCBkb2VzIHRoaXMgcHJvZ3JhbSBoYXZlIGRlZmluZWQgYmVoYXZpb3I6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPiNpbmNsdWRlICZsdDtpb3MmZ3Q7PC9wcmU+CiAgPHByZT5jbGFzcyBEIDogcHVibGljIHN0ZDo6aW9zX2Jhc2UgeyB9OzwvcHJlPgogIDxwcmU+aW50IG1haW4oKSB7IEQgZDsgfTwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPkl0IHNlZW1zIHRoYXQgcmVnaXN0cmF0aW9uIG9mIGEgY2FsbGJhY2sgZnVuY3Rpb24gd291bGQgc3VyZWx5IGFmZmVjdCB0aGUKc3RhdGUgb2YgYW4gaW9zX2Jhc2UuIFRoYXQgaXMsIHdoZW4geW91IHJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBhbgppb3NfYmFzZSwgdGhlIGlvc19iYXNlIG11c3QgcmVjb3JkIHRoYXQgZmFjdCBzb21laG93LjwvcD4KPHA+QnV0IGlmIGFmdGVyIGNvbnN0cnVjdGlvbiB0aGUgaW9zX2Jhc2UgaXMgaW4gYW4gaW5kZXRlcm1pbmF0ZSBzdGF0ZSwgYW5kIHRoYXQKc3RhdGUgaXMgbm90IG1hZGUgZGV0ZXJtaW5hdGUgYmVmb3JlIHRoZSBkZXN0cnVjdG9yIGlzIGNhbGxlZCwgdGhlbiBob3cgd291bGQKdGhlIGRlc3RydWN0b3Iga25vdyBpZiBhbnkgY2FsbGJhY2tzIGhhZCBpbmRlZWQgYmVlbiByZWdpc3RlcmVkPyBBbmQgaWYgdGhlCm51bWJlciBvZiBjYWxsYmFja3MgdGhhdCBoYWQgYmVlbiByZWdpc3RlcmVkIGlzIGluZGV0ZXJtaW5hdGUsIHRoZW4gaXMgbm90IHRoZQpiZWhhdmlvciBvZiB0aGUgZGVzdHJ1Y3RvciB1bmRlZmluZWQ/PC9wPgo8cD5CeSBjb21wYXJpc29uLCB0aGUgYmFzaWNfaW9zIGNsYXNzIGRlc2NyaXB0aW9uIGluIDI3LjQuNC4xIHBhcmFncmFwaCAyIG1ha2VzCml0IGV4cGxpY2l0IHRoYXQgZGVzdHJ1Y3Rpb24gYmVmb3JlIGluaXRpYWxpemF0aW9uIHJlc3VsdHMgaW4gdW5kZWZpbmVkCmJlaGF2aW9yLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPk1vZGlmeSAyNy40LjIuNyBwYXJhZ3JhcGggMSBmcm9tPC9wPgo8YmxvY2txdW90ZT4KICA8cD5FZmZlY3RzOiBFYWNoIGlvc19iYXNlIG1lbWJlciBoYXMgYW4gaW5kZXRlcm1pbmF0ZSB2YWx1ZSBhZnRlcgogIGNvbnN0cnVjdGlvbi48L3A+CjwvYmxvY2txdW90ZT4KPHA+dG88L3A+CjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IEVhY2ggaW9zX2Jhc2UgbWVtYmVyIGhhcyBhbiBpbmRldGVybWluYXRlCnZhbHVlIGFmdGVyIGNvbnN0cnVjdGlvbi4gVGhlc2UgbWVtYmVycyBtdXN0IGJlIGluaXRpYWxpemVkIGJ5IGNhbGxpbmcKYmFzaWNfaW9zOjppbml0LiBJZiBhbiBpb3NfYmFzZSBvYmplY3QgaXMgZGVzdHJveWVkIGJlZm9yZSB0aGVzZQppbml0aWFsaXphdGlvbnMgaGF2ZSB0YWtlbiBwbGFjZSwgdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC48L3A+CjwvYmxvY2txdW90ZT4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIyMSI+PC9hPjIyMS4gbnVtX2dldCZsdDsmZ3Q7Ojpkb19nZXQgc3RhZ2UgMiBwcm9jZXNzaW5nIGJyb2tlbjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjIuMS4yIFtmYWNldC5udW0uZ2V0LnZpcnR1YWxzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXR0IEF1c3Rlcm4gPGI+RGF0ZTo8L2I+IDIwMDAtMDMtMTQ8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNmYWNldC5udW0uZ2V0LnZpcnR1YWxzIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbZmFjZXQubnVtLmdldC52aXJ0dWFsc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmYWNldC5udW0uZ2V0LnZpcnR1YWxzIj5pc3N1ZXM8L2E+IGluIFtmYWNldC5udW0uZ2V0LnZpcnR1YWxzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+U3RhZ2UgMiBwcm9jZXNzaW5nIG9mIG51bWVyaWMgY29udmVyc2lvbiBpcyBicm9rZW4uPC9wPgoKPHA+VGFibGUgNTUgaW4gMjIuMi4yLjEuMiBzYXlzIHRoYXQgd2hlbiBiYXNlZmllbGQgaXMgMCB0aGUgaW50ZWdyYWwKY29udmVyc2lvbiBzcGVjaWZpZXIgaXMgJWkuIEEgJWkgc3BlY2lmaWVyIGRldGVybWluZXMgYSBudW1iZXIncyBiYXNlCmJ5IGl0cyBwcmVmaXggKDAgZm9yIG9jdGFsLCAweCBmb3IgaGV4KSwgc28gdGhlIGludGVudGlvbiBpcyBjbGVhcmx5CnRoYXQgYSAweCBwcmVmaXggaXMgYWxsb3dlZC4gIFBhcmFncmFwaCA4IGluIHRoZSBzYW1lIHNlY3Rpb24sCmhvd2V2ZXIsIGRlc2NyaWJlcyB2ZXJ5IHByZWNpc2VseSBob3cgY2hhcmFjdGVycyBhcmUgcHJvY2Vzc2VkLiAoSXQKbXVzdCBiZSBkb25lICJhcyBpZiIgYnkgYSBzcGVjaWZpZWQgY29kZSBmcmFnbWVudC4pIFRoYXQKZGVzY3JpcHRpb24gZG9lcyBub3QgYWxsb3cgYSAweCBwcmVmaXggdG8gYmUgcmVjb2duaXplZC48L3A+Cgo8cD5WZXJ5IHJvdWdobHksIHN0YWdlIDIgcHJvY2Vzc2luZyByZWFkcyBhIGNoYXJfdHlwZSBjdC4gSXQgY29udmVydHMKY3QgdG8gYSBjaGFyLCBub3QgYnkgdXNpbmcgbmFycm93IGJ1dCBieSBsb29raW5nIGl0IHVwIGluIGEKdHJhbnNsYXRpb24gdGFibGUgdGhhdCB3YXMgY3JlYXRlZCBieSB3aWRlbmluZyB0aGUgc3RyaW5nIGxpdGVyYWwKIjAxMjM0NTY3ODlhYmNkZWZBQkNERUYrLSIuIFRoZSBjaGFyYWN0ZXIgIngiIGlzCm5vdCBmb3VuZCBpbiB0aGF0IHRhYmxlLCBzbyBpdCBjYW4ndCBiZSByZWNvZ25pemVkIGJ5IHN0YWdlIDIKcHJvY2Vzc2luZy48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4yLjIuMS4yIHBhcmFncmFwaCA4LCByZXBsYWNlIHRoZSBsaW5lOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT5zdGF0aWMgY29uc3QgY2hhciBzcmNbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmQUJDREVGKy0iOzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPndpdGggdGhlIGxpbmU6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnN0YXRpYyBjb25zdCBjaGFyIHNyY1tdID0gIjAxMjM0NTY3ODlhYmNkZWZ4QUJDREVGWCstIjs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5JZiB3ZSdyZSB1c2luZyB0aGUgdGVjaG5pcXVlIG9mIHdpZGVuaW5nIGEgc3RyaW5nIGxpdGVyYWwsIHRoZQpzdHJpbmcgbGl0ZXJhbCBtdXN0IGNvbnRhaW4gZXZlcnkgY2hhcmFjdGVyIHdlIHdpc2ggdG8gcmVjb2duaXplLgpUaGlzIHRlY2huaXF1ZSBoYXMgdGhlIGNvbnNlcXVlbmNlIHRoYXQgYWx0ZXJuYXRlIHJlcHJlc2VudGF0aW9ucwpvZiBkaWdpdHMgd2lsbCBub3QgYmUgcmVjb2duaXplZC4gIFRoaXMgZGVzaWduIGRlY2lzaW9uIHdhcyBtYWRlCmRlbGliZXJhdGVseSwgd2l0aCBmdWxsIGtub3dsZWRnZSBvZiB0aGF0IGxpbWl0YXRpb24uPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIyMiI+PC9hPjIyMi4gQXJlIHRocm93IGNsYXVzZXMgbmVjZXNzYXJ5IGlmIGEgdGhyb3cgaXMgYWxyZWFkeSBpbXBsaWVkIGJ5IHRoZSBlZmZlY3RzIGNsYXVzZT88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTcuMy4xLjMgW3N0cnVjdHVyZS5zcGVjaWZpY2F0aW9uc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSnVkeSBXYXJkIDxiPkRhdGU6PC9iPiAyMDAwLTAzLTE3PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJ1Y3R1cmUuc3BlY2lmaWNhdGlvbnMiPmlzc3VlczwvYT4gaW4gW3N0cnVjdHVyZS5zcGVjaWZpY2F0aW9uc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlNlY3Rpb24gMjEuMy42LjggZGVzY3JpYmVzIHRoZSBiYXNpY19zdHJpbmc6OmNvbXBhcmUgZnVuY3Rpb24gdGhpcyB3YXk6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPjIxLjMuNi44IC0gYmFzaWNfc3RyaW5nOjpjb21wYXJlIFtsaWIuc3RyaW5nOjpjb21wYXJlXQoKaW50IGNvbXBhcmUoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwKICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyZhbXA7ICBzdHIgLAogICAgICAgICAgICAgICAgc2l6ZV90eXBlICBwb3MyICwgc2l6ZV90eXBlICBuMiApIGNvbnN0OwoKLTQtIFJldHVybnM6IAoKICAgIGJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OygqdGhpcyxwb3MxLG4xKS5jb21wYXJlKAogICAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyhzdHIscG9zMixuMikpIC48L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5hbmQgdGhlIGNvbnN0cnVjdG9yIHRoYXQncyBpbXBsaWNpdGx5IGNhbGxlZCBieSB0aGUgYWJvdmUgaXMKZGVmaW5lZCB0byB0aHJvdyBhbiBvdXQtb2YtcmFuZ2UgZXhjZXB0aW9uIGlmIHBvcyAmZ3Q7IHN0ci5zaXplKCkuIFNlZQpzZWN0aW9uIDIxLjMuMSBbc3RyaW5nLnJlcXVpcmVdIHBhcmFncmFwaCA0LjwvcD4KCjxwPk9uIHRoZSBvdGhlciBoYW5kLCB0aGUgY29tcGFyZSBmdW5jdGlvbiBkZXNjcmlwdGlvbnMgdGhlbXNlbHZlcyBkb24ndCBoYXZlCiJUaHJvd3M6ICIgY2xhdXNlcyBhbmQgYWNjb3JkaW5nIHRvIDE3LjMuMS4zLCBwYXJhZ3JhcGggMywgZWxlbWVudHMKdGhhdCBkbyBub3QgYXBwbHkgdG8gYSBmdW5jdGlvbiBhcmUgb21pdHRlZC48L3A+CjxwPlNvIGl0IHNlZW1zIHRoZXJlIGlzIGFuIGluY29uc2lzdGVuY3kgaW4gdGhlIHN0YW5kYXJkIC0tIGFyZSB0aGUKIkVmZmVjdHMiIGNsYXVzZXMgY29ycmVjdCwgb3IgYXJlIHRoZSAiVGhyb3dzIiBjbGF1c2VzCm1pc3Npbmc/PC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMTcuMy4xLjMgW3N0cnVjdHVyZS5zcGVjaWZpY2F0aW9uc10gcGFyYWdyYXBoIDMsIHRoZSBmb290bm90ZSAxNDggYXR0YWNoZWQgdG8KdGhlIHNlbnRlbmNlICJEZXNjcmlwdGlvbnMgb2YgZnVuY3Rpb24gc2VtYW50aWNzIGNvbnRhaW4gdGhlCmZvbGxvd2luZyBlbGVtZW50cyAoYXMgYXBwcm9wcmlhdGUpOiIsIGluc2VydCB0aGUgd29yZAoiZnVydGhlciIgc28gdGhhdCB0aGUgZm9vdCBub3RlIHJlYWRzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+VG8gc2F2ZSBzcGFjZSwgaXRlbXMgdGhhdCBkbyBub3QgYXBwbHkgdG8gYSBmdW5jdGlvbiBhcmUKICBvbWl0dGVkLiBGb3IgZXhhbXBsZSwgaWYgYSBmdW5jdGlvbiBkb2VzIG5vdCBzcGVjaWZ5IGFueSBmdXJ0aGVyCiAgcHJlY29uZGl0aW9ucywgdGhlcmUgd2lsbCBiZSBubyAiUmVxdWlyZXMiIHBhcmFncmFwaC48L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIHN0YW5kYXJkIGlzIHNvbWV3aGF0IGluY29uc2lzdGVudCwgYnV0IGEgZmFpbHVyZSB0byBub3RlIGEKdGhyb3cgY29uZGl0aW9uIGluIGEgdGhyb3dzIGNsYXVzZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIG5vdCB0bwp0aHJvdy4gIFRoZSBpbmNvbnNpc3RlbnQgd29yZGluZyBpcyBpbiBhIGZvb3Rub3RlLCBhbmQgdGh1cwpub24tbm9ybWF0aXZlLiBUaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBmcm9tIHRoZSBMV0cgY2xhcmlmaWVzIHRoZQpmb290bm90ZS48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyMjMiPjwvYT4yMjMuIHJldmVyc2UgYWxnb3JpdGhtIHNob3VsZCB1c2UgaXRlcl9zd2FwIHJhdGhlciB0aGFuIHN3YXA8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjUuMi4xMCBbYWxnLnJldmVyc2VdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERhdmUgQWJyYWhhbXMgPGI+RGF0ZTo8L2I+IDIwMDAtMDMtMjE8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUQyI+VEM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+U2hvdWxkbid0IHRoZSBlZmZlY3RzIHNheSAiYXBwbGllcyBpdGVyX3N3YXAgdG8gYWxsIHBhaXJzLi4uIj88L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNS4yLjEwIFthbGcucmV2ZXJzZV0sIHJlcGxhY2U6PC9wPgogIDxibG9ja3F1b3RlPjxwPgogIEVmZmVjdHM6IEZvciBlYWNoIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGkgJmx0Oz0gKGxhc3QgLSBmaXJzdCkvMiwgCiAgYXBwbGllcyBzd2FwIHRvIGFsbCBwYWlycyBvZiBpdGVyYXRvcnMgZmlyc3QgKyBpLCAobGFzdCAtIGkpIC0gMS4KICA8L3A+PC9ibG9ja3F1b3RlPgo8cD53aXRoOjwvcD4KICA8YmxvY2txdW90ZT48cD4KICBFZmZlY3RzOiBGb3IgZWFjaCBub24tbmVnYXRpdmUgaW50ZWdlciBpICZsdDs9IChsYXN0IC0gZmlyc3QpLzIsIAogIGFwcGxpZXMgaXRlcl9zd2FwIHRvIGFsbCBwYWlycyBvZiBpdGVyYXRvcnMgZmlyc3QgKyBpLCAobGFzdCAtIGkpIC0gMS4KICA8L3A+PC9ibG9ja3F1b3RlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjI0Ij48L2E+MjI0LiBjbGVhcigpIGNvbXBsZXhpdHkgZm9yIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMgcmVmZXJzIHRvIHVuZGVmaW5lZCBOPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjEuNCBbYXNzb2NpYXRpdmUucmVxbXRzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBFZCBCcmV5IDxiPkRhdGU6PC9iPiAyMDAwLTAzLTIzPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNhc3NvY2lhdGl2ZS5yZXFtdHMiPmlzc3VlczwvYT4gaW4gW2Fzc29jaWF0aXZlLnJlcW10c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkluIHRoZSBhc3NvY2lhdGl2ZSBjb250YWluZXIgcmVxdWlyZW1lbnRzIHRhYmxlIGluIDIzLjEuMiBwYXJhZ3JhcGggNywKYS5jbGVhcigpIGhhcyBjb21wbGV4aXR5ICJsb2coc2l6ZSgpKSArIE4iLiBIb3dldmVyLCB0aGUgbWVhbmluZyBvZiBOCmlzIG5vdCBkZWZpbmVkLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIHRoZSBhc3NvY2lhdGl2ZSBjb250YWluZXIgcmVxdWlyZW1lbnRzIHRhYmxlIGluIDIzLjEuMiBwYXJhZ3JhcGgKNywgdGhlIGNvbXBsZXhpdHkgb2YgYS5jbGVhcigpLCBjaGFuZ2UgImxvZyhzaXplKCkpICsgTiIgdG8KImxpbmVhciBpbiA8dHQ+c2l6ZSgpPC90dD4iLjwvcD4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SXQncyB0aGUgImxvZyhzaXplKCkpIiwgbm90IHRoZSAiTiIsIHRoYXQgaXMgaW4KZXJyb3I6IHRoZXJlJ3Mgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIDxpPk8oTik8L2k+IGFuZCA8aT5PKE4gKwpsb2coTikpPC9pPi4gIFRoZSB0ZXh0IGluIHRoZSBzdGFuZGFyZCBpcyBwcm9iYWJseSBhbiBpbmNvcnJlY3QKY3V0LWFuZC1wYXN0ZSBmcm9tIHRoZSByYW5nZSB2ZXJzaW9uIG9mIDx0dD5lcmFzZTwvdHQ+LjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIyNSI+PC9hPjIyNS4gc3RkOjogYWxnb3JpdGhtcyB1c2Ugb2Ygb3RoZXIgdW5xdWFsaWZpZWQgYWxnb3JpdGhtczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAxNy40LjQuMyBbZ2xvYmFsLmZ1bmN0aW9uc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGF2ZSBBYnJhaGFtcyA8Yj5EYXRlOjwvYj4gMjAwMC0wNC0wMTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjZ2xvYmFsLmZ1bmN0aW9ucyI+aXNzdWVzPC9hPiBpbiBbZ2xvYmFsLmZ1bmN0aW9uc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkFyZSBhbGdvcml0aG1zIGluIHN0ZDo6IGFsbG93ZWQgdG8gdXNlIG90aGVyIGFsZ29yaXRobXMgd2l0aG91dCBxdWFsaWZpY2F0aW9uLCBzbyBmdW5jdGlvbnMgaW4KdXNlciBuYW1lc3BhY2VzIG1pZ2h0IGJlIGZvdW5kIHRocm91Z2ggS29lbmlnIGxvb2t1cD88L3A+CjxwPkZvciBleGFtcGxlLCBhIHBvcHVsYXIgc3RhbmRhcmQgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBpbmNsdWRlcyB0aGlzCmltcGxlbWVudGF0aW9uIG9mIHN0ZDo6dW5pcXVlOjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+bmFtZXNwYWNlIHN0ZCB7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgX0ZvcndhcmRJdGVyJmd0OwogICAgX0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewogICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIH0KICAgIH08L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5JbWFnaW5lIHR3byB1c2VycyBvbiBvcHBvc2l0ZSBzaWRlcyBvZiB0b3duLCBlYWNoIHVzaW5nIHVuaXF1ZSBvbiBoaXMgb3duCnNlcXVlbmNlcyBib3VuZGVkIGJ5IG15X2l0ZXJhdG9ycyAuIFVzZXIxIGxvb2tzIGF0IGhpcyBzdGFuZGFyZCBsaWJyYXJ5CmltcGxlbWVudGF0aW9uIGFuZCBzYXlzLCAiSSBrbm93IGhvdyB0byBpbXBsZW1lbnQgYSBtb3JlIGVmZmljaWVudAp1bmlxdWVfY29weSBmb3IgbXlfaXRlcmF0b3JzIiwgYW5kIHdyaXRlczo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPm5hbWVzcGFjZSB1c2VyMSB7CiAgICBjbGFzcyBteV9pdGVyYXRvcjsKICAgIC8vIGZhc3RlciB2ZXJzaW9uIGZvciBteV9pdGVyYXRvcgogICAgbXlfaXRlcmF0b3IgdW5pcXVlX2NvcHkobXlfaXRlcmF0b3IsIG15X2l0ZXJhdG9yLCBteV9pdGVyYXRvcik7CiAgICB9PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+dXNlcjE6OnVuaXF1ZV9jb3B5KCkgaXMgc2VsZWN0ZWQgYnkgS29lbmlnIGxvb2t1cCwgYXMgaGUgaW50ZW5kZWQuPC9wPgo8cD5Vc2VyMiBoYXMgb3RoZXIgbmVlZHMsIGFuZCB3cml0ZXM6PC9wPgo8YmxvY2txdW90ZT4KPHByZT5uYW1lc3BhY2UgdXNlcjIgewogICAgY2xhc3MgbXlfaXRlcmF0b3I7CiAgICAvLyBSZXR1cm5zIHRydWUgaWZmICpjIGlzIGEgdW5pcXVlIGNvcHkgb2YgKmEgYW5kICpiLgogICAgYm9vbCB1bmlxdWVfY29weShteV9pdGVyYXRvciBhLCBteV9pdGVyYXRvciBiLCBteV9pdGVyYXRvciBjKTsKICAgIH08L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5Vc2VyMiBpcyBzaG9ja2VkIHRvIGZpbmQgbGF0ZXIgdGhhdCBoaXMgZnVsbHktcXVhbGlmaWVkIHVzZSBvZgpzdGQ6OnVuaXF1ZSh1c2VyMjo6bXlfaXRlcmF0b3IsIHVzZXIyOjpteV9pdGVyYXRvciwgdXNlcjI6Om15X2l0ZXJhdG9yKSBmYWlscyB0bwpjb21waWxlIChpZiBoZSdzIGx1Y2t5KS4gTG9va2luZyBpbiB0aGUgc3RhbmRhcmQsIGhlIHNlZXMgdGhlIGZvbGxvd2luZyBFZmZlY3RzCmNsYXVzZSBmb3IgdW5pcXVlKCk6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5FZmZlY3RzOiBFbGltaW5hdGVzIGFsbCBidXQgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBldmVyeSBjb25zZWN1dGl2ZSBncm91cAogIG9mIGVxdWFsIGVsZW1lbnRzIHJlZmVycmVkIHRvIGJ5IHRoZSBpdGVyYXRvciBpIGluIHRoZSByYW5nZSBbZmlyc3QsIGxhc3QpIGZvcgogIHdoaWNoIHRoZSBmb2xsb3dpbmcgY29ycmVzcG9uZGluZyBjb25kaXRpb25zIGhvbGQ6ICppID09ICooaSAtIDEpIG9yIHByZWQoKmksCiAgKihpIC0gMSkpICE9IGZhbHNlPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPlRoZSBzdGFuZGFyZCBnaXZlcyB1c2VyMiBhYnNvbHV0ZWx5IG5vIHJlYXNvbiB0byB0aGluayBoZSBjYW4gaW50ZXJmZXJlIHdpdGgKc3RkOjp1bmlxdWUgYnkgZGVmaW5pbmcgbmFtZXMgaW4gbmFtZXNwYWNlIHVzZXIyLiBIaXMgc3RhbmRhcmQgbGlicmFyeSBoYXMgYmVlbgpidWlsdCB3aXRoIHRoZSB0ZW1wbGF0ZSBleHBvcnQgZmVhdHVyZSwgc28gaGUgaXMgdW5hYmxlIHRvIGluc3BlY3QgdGhlCmltcGxlbWVudGF0aW9uLiBVc2VyMSBldmVudHVhbGx5IGNvbXBpbGVzIGhpcyBjb2RlIHdpdGggYW5vdGhlciBjb21waWxlciwgYW5kCmhpcyB2ZXJzaW9uIG9mIHVuaXF1ZV9jb3B5IHNpbGVudGx5IHN0b3BzIGJlaW5nIGNhbGxlZC4gRXZlbnR1YWxseSwgaGUgcmVhbGl6ZXMKdGhhdCBoZSB3YXMgZGVwZW5kaW5nIG9uIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBoaXMgbGlicmFyeSBhbmQgaGFkIG5vCnJpZ2h0IHRvIGV4cGVjdCBoaXMgdW5pcXVlX2NvcHkoKSB0byBiZSBjYWxsZWQgcG9ydGFibHkuPC9wPgo8cD5PbiB0aGUgZmFjZSBvZiBpdCwgYW5kIGdpdmVuIGFib3ZlIHNjZW5hcmlvLCBpdCBtYXkgc2VlbSBvYnZpb3VzIHRoYXQgdGhlCmltcGxlbWVudGF0aW9uIG9mIHVuaXF1ZSgpIHNob3duIGlzIG5vbi1jb25mb3JtaW5nIGJlY2F1c2UgaXQgdXNlcyB1bmlxdWVfY29weSgpCnJhdGhlciB0aGFuIDo6c3RkOjp1bmlxdWVfY29weSgpLiBNb3N0IHN0YW5kYXJkIGxpYnJhcnkgaW1wbGVtZW50YXRpb25zLApob3dldmVyLCBzZWVtIHRvIGRpc2FncmVlIHdpdGggdGhpcyBub3Rpb24uPC9wPgo8cD4gPGk+W1Rva3lvOiZuYnNwOyBTdGV2ZSBBZGFtY3p5ayBmcm9tCnRoZSBjb3JlIHdvcmtpbmcgZ3JvdXAgaW5kaWNhdGVzIHRoYXQgInN0ZDo6IiBpcyBzdWZmaWNpZW50OyZuYnNwOwpsZWFkaW5nICI6OiIgcXVhbGlmaWNhdGlvbiBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSBhbnkgbmFtZXNwYWNlCnF1YWxpZmljYXRpb24gaXMgc3VmZmljaWVudCB0byBzdXBwcmVzcyBLb2VuaWcgbG9va3VwLl08L2k+PC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIGEgcGFyYWdyYXBoIGFuZCBhIG5vdGUgYXQgdGhlIGVuZCBvZiAKMTcuNC40LjMgW2dsb2JhbC5mdW5jdGlvbnNdOjwvcD4KPGJsb2NrcXVvdGU+Cgo8cD5Vbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgbm8gZ2xvYmFsIG9yIG5vbi1tZW1iZXIgZnVuY3Rpb24gaW4gdGhlCnN0YW5kYXJkIGxpYnJhcnkgc2hhbGwgdXNlIGEgZnVuY3Rpb24gZnJvbSBhbm90aGVyIG5hbWVzcGFjZSB3aGljaCBpcwpmb3VuZCB0aHJvdWdoIDxpPmFyZ3VtZW50LWRlcGVuZGVudCBuYW1lIGxvb2t1cDwvaT4gKDMuNC4yIFtiYXNpYy5sb29rdXAuYXJnZGVwXSkuPC9wPgoKPHA+W05vdGU6IHRoZSBwaHJhc2UgInVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIiBpcyBpbnRlbmRlZCB0bwphbGxvdyBLb2VuaWcgbG9va3VwIGluIGNhc2VzIGxpa2UgdGhhdCBvZiBvc3RyZWFtX2l0ZXJhdG9yczo8YnI+Cgo8YnI+CiAgRWZmZWN0czo8L3A+CiAgPGJsb2NrcXVvdGU+CjxwPipvdXRfc3RyZWFtICZsdDsmbHQ7IHZhbHVlOzxicj4KICAgICAgaWYoZGVsaW0gIT0gMCkgKm91dF9zdHJlYW0gJmx0OyZsdDsgZGVsaW07PGJyPgogICAgICByZXR1cm4gKCp0aGlzKTs8L3A+CiAgICA8cD4tLWVuZCBub3RlXTwvcD4KICA8L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltUb2t5bzogVGhlIExXRyBhZ3JlZXMgdGhhdCB0aGlzIGlzIGEgZGVmZWN0IGluIHRoZSBzdGFuZGFyZCwgYnV0CmlzIGFzIHlldCB1bnN1cmUgaWYgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgdGhlIGJlc3QKc29sdXRpb24uIEZ1cnRoZXJtb3JlLCB0aGUgTFdHIGJlbGlldmVzIHRoYXQgdGhlIHNhbWUgcHJvYmxlbSBvZgp1bnF1YWxpZmllZCBsaWJyYXJ5IG5hbWVzIGFwcGxpZXMgdG8gd29yZGluZyBpbiB0aGUgc3RhbmRhcmQgaXRzZWxmLAphbmQgaGFzIG9wZW5lZCBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI5Ij4yMjk8L2E+IGFjY29yZGluZ2x5LiBBbnkgcmVzb2x1dGlvbiBvZgppc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI1Ij4yMjU8L2E+IHNob3VsZCBiZSBjb29yZGluYXRlZCB3aXRoIHRoZSByZXNvbHV0aW9uIG9mCmlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjkiPjIyOTwvYT4uXTwvaT48L3A+CgoKPHA+PGk+W1Rvcm9udG86IFRoZSBMV0cgaXMgbm90IHN1cmUgaWYgdGhpcyBpcyBhIGRlZmVjdCBpbiB0aGUKc3RhbmRhcmQuICBNb3N0IExXRyBtZW1iZXJzIGJlbGlldmUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBvZgo8dHQ+c3RkOjp1bmlxdWU8L3R0PiBsaWtlIHRoZSBvbmUgcXVvdGVkIGluIHRoaXMgaXNzdWUgaXMgYWxyZWFkeQppbGxlZ2FsLCBzaW5jZSwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCBpdHMgc2VtYW50aWNzIGFyZSBub3QKdGhvc2Ugc3BlY2lmaWVkIGluIHRoZSBzdGFuZGFyZC4gIFRoZSBzdGFuZGFyZCdzIGRlc2NyaXB0aW9uIG9mCjx0dD51bmlxdWU8L3R0PiBkb2VzIG5vdCBzYXkgdGhhdCBvdmVybG9hZGluZyA8dHQ+YWRqYWNlbnRfZmluZDwvdHQ+CnNob3VsZCBoYXZlIGFueSBlZmZlY3QuXTwvaT48L3A+CgoKPHA+PGk+W0N1cmHnYW86IEFuIExXRy1zdWJncm91cCBzcGVudCBhbiBhZnRlcm5vb24gd29ya2luZyBvbiBpc3N1ZXMKMjI1LCAyMjYsIGFuZCAyMjkuICBUaGVpciBjb25jbHVzaW9uIHdhcyB0aGF0IHRoZSBpc3N1ZXMgc2hvdWxkIGJlCnNlcGFyYXRlZCBpbnRvIGFuIExXRyBwb3J0aW9uIChIb3dhcmQncyBwYXBlciwgTjEzODc9MDItMDA0NSksIGFuZCBhCkVXRyBwb3J0aW9uIChEYXZlIHdpbGwgd3JpdGUgYSBwcm9wb3NhbCkuIFRoZSBMV0cgYW5kIEVXRyBoYWQKKHNlcGFyYXRlKSBkaXNjdXNzaW9ucyBvZiB0aGlzIHBsYW4gdGhlIG5leHQgZGF5LiAgVGhlIHByb3Bvc2VkCnJlc29sdXRpb24gZm9yIHRoaXMgaXNzdWUgaXMgaW4gYWNjb3JkYW5jZSB3aXRoIEhvd2FyZCdzIHBhcGVyLl08L2k+PC9wPgoKCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkl0IGNvdWxkIGJlIGFyZ3VlZCB0aGF0IHRoaXMgcHJvcG9zZWQgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LAogIHRoYXQgdGhlIFN0YW5kYXJkIGRvZXNuJ3QgZ3JhbnQgaW1wbGVtZW50b3JzIGxpY2Vuc2UgdG8gd3JpdGUgYQogIHN0YW5kYXJkIGZ1bmN0aW9uIHRoYXQgYmVoYXZlcyBkaWZmZXJlbnRseSB0aGFuIHNwZWNpZmllZCBpbiB0aGUKICBTdGFuZGFyZCBqdXN0IGJlY2F1c2Ugb2YgYW4gdW5yZWxhdGVkIHVzZXItZGVmaW5lZCBuYW1lIGluIHNvbWUKICBvdGhlciBuYW1lc3BhY2UuICBIb3dldmVyLCB0aGlzIGlzIGF0IHdvcnN0IGEgY2xhcmlmaWNhdGlvbi4gIEl0IGlzCiAgc3VyZWx5IHJpZ2h0IHRoYXQgYWxnb3JpdGhzbSBzaG91bGRuJ3QgcGljayB1cCByYW5kb20gbmFtZXMsIHRoYXQKICB1c2VyLWRlZmluZWQgbmFtZXMgc2hvdWxkIGhhdmUgbm8gZWZmZWN0IHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLgogIElzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjYiPjIyNjwvYT4gZGVhbHMgd2l0aCB0aGUgcXVlc3Rpb24gb2Ygd2hlbiBpdCBpcwogIGFwcHJvcHJpYXRlIGZvciB0aGUgc3RhbmRhcmQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IG90aGVyd2lzZS48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjI2Ij48L2E+MjI2LiBVc2VyIHN1cHBsaWVkIHNwZWNpYWxpemF0aW9ucyBvciBvdmVybG9hZHMgb2YgbmFtZXNwYWNlIHN0ZCBmdW5jdGlvbiB0ZW1wbGF0ZXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTcuNC4zLjIgW3Jlc2VydmVkLm5hbWVzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEYXZlIEFicmFoYW1zIDxiPkRhdGU6PC9iPiAyMDAwLTA0LTAxPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNyZXNlcnZlZC5uYW1lcyI+aXNzdWVzPC9hPiBpbiBbcmVzZXJ2ZWQubmFtZXNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgaXNzdWVzIGFyZTombmJzcDs8L3A+CjxwPjEuIEhvdyBjYW4gYSAzcmQgcGFydHkgbGlicmFyeSBpbXBsZW1lbnRvciAobGliMSkgd3JpdGUgYSB2ZXJzaW9uIG9mIGEgc3RhbmRhcmQKYWxnb3JpdGhtIHdoaWNoIGlzIHNwZWNpYWxpemVkIHRvIHdvcmsgd2l0aCBoaXMgb3duIGNsYXNzIHRlbXBsYXRlPyZuYnNwOzwvcD4KPHA+Mi4gSG93IGNhbiBhbm90aGVyIGxpYnJhcnkgaW1wbGVtZW50b3IgKGxpYjIpIHdyaXRlIGEgZ2VuZXJpYyBhbGdvcml0aG0gd2hpY2ggCndpbGwgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHNwZWNpYWxpemVkIGFsZ29yaXRobSBpbiBsaWIxPzwvcD4KPHA+VGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBvbmx5IHZpYWJsZSBhbnN3ZXIgdW5kZXIgY3VycmVudCBsYW5ndWFnZSBydWxlczo8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+bmFtZXNwYWNlIGxpYjEKewogICAgLy8gYXJiaXRyYXJ5LXByZWNpc2lvbiBudW1iZXJzIHVzaW5nIFQgYXMgYSBiYXNpYyB1bml0CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgIGNsYXNzIGJpZ19udW0geyAvLy4uLgogICAgfTsKICAgIDwvcHJlPgogIDxwcmU+ICAgIC8vIGRlZmluaW5nIHRoaXMgaW4gbmFtZXNwYWNlIHN0ZCBpcyBpbGxlZ2FsIChpdCB3b3VsZCBiZSBhbgogICAgLy8gb3ZlcmxvYWQpLCBzbyB3ZSBob3BlIHVzZXJzIHdpbGwgcmVseSBvbiBLb2VuaWcgbG9va3VwCiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgIHZvaWQgc3dhcChiaWdfaW50Jmx0O1QmZ3Q7JmFtcDssIGJpZ19pbnQmbHQ7VCZndDsmYW1wOyk7Cn08L3ByZT4KICA8cHJlPiNpbmNsdWRlICZsdDthbGdvcml0aG0mZ3Q7Cm5hbWVzcGFjZSBsaWIyCnsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OwogICAgdm9pZCBnZW5lcmljX3NvcnQoVCogc3RhcnQsIFQqIGVuZCkKICAgIHsKICAgICAgICAgICAgLi4uCiAgICAgICAgLy8gdXNpbmctZGVjbGFyYXRpb24gcmVxdWlyZWQgc28gd2UgY2FuIHdvcmsgb24gYnVpbHQtaW4gdHlwZXMKICAgICAgICB1c2luZyBzdGQ6OnN3YXA7CiAgICAgICAgLy8gdXNlIEtvZW5pZyBsb29rdXAgdG8gZmluZCBzcGVjaWFsaXplZCBhbGdvcml0aG0gaWYgYXZhaWxhYmxlCiAgICAgICAgc3dhcCgqeCwgKnkpOwogICAgfQp9PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+VGhpcyBhbnN3ZXIgaGFzIHNvbWUgZHJhd2JhY2tzLiBGaXJzdCBvZiBhbGwsIGl0IG1ha2VzIHdyaXRpbmcgbGliMiBkaWZmaWN1bHQKYW5kIHNvbWV3aGF0IHNsaXBwZXJ5LiBUaGUgaW1wbGVtZW50b3IgbmVlZHMgdG8gcmVtZW1iZXIgdG8gd3JpdGUgdGhlCnVzaW5nLWRlY2xhcmF0aW9uLCBvciBnZW5lcmljX3NvcnQgd2lsbCBmYWlsIHRvIGNvbXBpbGUgd2hlbiBUIGlzIGEgYnVpbHQtaW4KdHlwZS4gVGhlIHNlY29uZCBkcmF3YmFjayBpcyB0aGF0IHRoZSB1c2Ugb2YgdGhpcyBzdHlsZSBpbiBsaWIyIGVmZmVjdGl2ZWx5CiJyZXNlcnZlcyIgbmFtZXMgaW4gYW55IG5hbWVzcGFjZSB3aGljaCBkZWZpbmVzIHR5cGVzIHdoaWNoIG1heQpldmVudHVhbGx5IGJlIHVzZWQgd2l0aCBsaWIyLiBUaGlzIG1heSBzZWVtIGlubm9jdW91cyBhdCBmaXJzdCB3aGVuIGFwcGxpZWQgdG8KbmFtZXMgbGlrZSBzd2FwLCBidXQgY29uc2lkZXIgbW9yZSBhbWJpZ3VvdXMgbmFtZXMgbGlrZSB1bmlxdWVfY29weSgpIGluc3RlYWQuCkl0IGlzIGVhc3kgdG8gaW1hZ2luZSB0aGUgdXNlciB3YW50aW5nIHRvIGRlZmluZSB0aGVzZSBuYW1lcyBkaWZmZXJlbnRseSBpbiBoaXMKb3duIG5hbWVzcGFjZS4gQSBkZWZpbml0aW9uIHdpdGggc2VtYW50aWNzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBzdGFuZGFyZApsaWJyYXJ5IGNvdWxkIGNhdXNlIHNlcmlvdXMgcHJvYmxlbXMgKHNlZSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI1Ij4yMjU8L2E+KS48L3A+CjxwPldoeSwgeW91IG1heSBhc2ssIGNhbid0IHdlIGp1c3QgcGFydGlhbGx5IHNwZWNpYWxpemUgc3RkOjpzd2FwKCk/IEl0J3MKYmVjYXVzZSB0aGUgbGFuZ3VhZ2UgZG9lc24ndCBhbGxvdyBmb3IgcGFydGlhbCBzcGVjaWFsaXphdGlvbiBvZiBmdW5jdGlvbgp0ZW1wbGF0ZXMuIElmIHlvdSB3cml0ZTo8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+bmFtZXNwYWNlIHN0ZAp7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgIHZvaWQgc3dhcChsaWIxOjpiaWdfaW50Jmx0O1QmZ3Q7JmFtcDssIGxpYjE6OmJpZ19pbnQmbHQ7VCZndDsmYW1wOyk7Cn08L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5Zb3UgaGF2ZSBqdXN0IG92ZXJsb2FkZWQgc3RkOjpzd2FwLCB3aGljaCBpcyBpbGxlZ2FsIHVuZGVyIHRoZSBjdXJyZW50Cmxhbmd1YWdlIHJ1bGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGZvbGxvd2luZyBmdWxsIHNwZWNpYWxpemF0aW9uIGlzIGxlZ2FsOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT5uYW1lc3BhY2Ugc3RkCnsKICAgIHRlbXBsYXRlICZsdDsmZ3Q7CiAgICB2b2lkIHN3YXAobGliMTo6b3RoZXJfdHlwZSZhbXA7LCBsaWIxOjpvdGhlcl90eXBlJmFtcDspOwp9PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPlRoaXMgaXNzdWUgcmVmbGVjdHMgY29uY2VybnMgcmFpc2VkIGJ5IHRoZSAiTmFtZXNwYWNlIGlzc3VlCndpdGggc3BlY2lhbGl6ZWQgc3dhcCIgdGhyZWFkIG9uIGNvbXAubGFuZy5jKysubW9kZXJhdGVkLiBBCnNpbWlsYXIgc2V0IG9mIGNvbmNlcm5zIHdhcyBlYXJsaWVyIHJhaXNlZCBvbiB0aGUgYm9vc3Qub3JnIG1haWxpbmcKbGlzdCBhbmQgdGhlIEFDQ1UtZ2VuZXJhbCBtYWlsaW5nIGxpc3QuICBBbHNvIHNlZSBsaWJyYXJ5IHJlZmxlY3RvcgptZXNzYWdlIGMrK3N0ZC1saWItNzM1NC48L3A+Cgo8cD4KSi4gQy4gdmFuIFdpbmtlbCBwb2ludHMgb3V0IChpbiBjKytzdGQtbGliLTk1NjUpIGFub3RoZXIgdW5leHBlY3RlZApmYWN0OiBpdCdzIGltcG9zc2libGUgdG8gb3V0cHV0IGEgY29udGFpbmVyIG9mIHN0ZDo6cGFpcidzIHVzaW5nIGNvcHkKYW5kIGFuIG9zdHJlYW1faXRlcmF0b3IsIGFzIGxvbmcgYXMgYm90aCBwYWlyLW1lbWJlcnMgYXJlIGJ1aWx0LWluIG9yCnN0ZDo6IHR5cGVzLiAgVGhhdCdzIGJlY2F1c2UgYSB1c2VyLWRlZmluZWQgb3BlcmF0b3ImbHQ7Jmx0OyBmb3IgKGZvcgpleGFtcGxlKSBzdGQ6OnBhaXImbHQ7Y29uc3Qgc3RkOjpzdHJpbmcsIGludCZndDsgd2lsbCBub3QgYmUgZm91bmQ6Cmxvb2t1cCBmb3Igb3BlcmF0b3ImbHQ7Jmx0OyB3aWxsIGJlIHBlcmZvcm1lZCBvbmx5IGluIG5hbWVzcGFjZSBzdGQuCk9waW5pb25zIGRpZmZlcmVkIG9uIHdoZXRoZXIgb3Igbm90IHRoaXMgd2FzIGEgZGVmZWN0LCBhbmQsIGlmIHNvLAp3aGV0aGVyIHRoZSBkZWZlY3QgaXMgdGhhdCBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCB1c2VyLWRlZmluZWQKZnVuY3Rpb25hbGl0eSBhbmQgc3RkLCBvciB3aGV0aGVyIGl0J3MgdGhhdCB0aGUgc3RhbmRhcmQgbGlicmFyeSBkb2VzCm5vdCBwcm92aWRlIGFuIG9wZXJhdG9yJmx0OyZsdDsgZm9yIHN0ZDo6cGFpciZsdDsmZ3Q7Lgo8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkFkb3B0IHRoZSB3b3JkaW5nIHByb3Bvc2VkIGluIEhvd2FyZCBIaW5uYW50J3MgcGFwZXIKICBOMTUyMz0wMy0wMTA2LCAiUHJvcG9zZWQgUmVzb2x1dGlvbiBUbyBMV0cgaXNzdWVzIDIyNSwgMjI2LCAyMjkiLjwvcD4KCgo8cD48aT5bVG9reW86IFN1bW1hcnksICJUaGVyZSBpcyBubyBjb25mb3JtaW5nIHdheSB0byBleHRlbmQKc3RkOjpzd2FwIGZvciB1c2VyIGRlZmluZWQgdGVtcGxhdGVzLiImbmJzcDsgVGhlIExXRyBhZ3JlZXMgdGhhdAp0aGVyZSBpcyBhIHByb2JsZW0uICBXb3VsZCBsaWtlIG1vcmUgaW5mb3JtYXRpb24gYmVmb3JlCnByb2NlZWRpbmcuIFRoaXMgbWF5IGJlIGEgY29yZSBpc3N1ZS4gIENvcmUgaXNzdWUgMjI5IGhhcyBiZWVuIG9wZW5lZAp0byBkaXNjdXNzIHRoZSBjb3JlIGFzcGVjdHMgb2YgdGhpcyBwcm9ibGVtLiBJdCB3YXMgYWxzbyBub3RlZCB0aGF0CnN1Ym1pc3Npb25zIHJlZ2FyZGluZyB0aGlzIGlzc3VlIGhhdmUgYmVlbiByZWNlaXZlZCBmcm9tIHNldmVyYWwKc291cmNlcywgYnV0IHRvbyBsYXRlIHRvIGJlIGludGVncmF0ZWQgaW50byB0aGUgaXNzdWVzIGxpc3QuCl08L2k+PC9wPgoKCjxwPjxpPltQb3N0LVRva3lvOiBBIHBhcGVyIHdpdGggc2V2ZXJhbCBwcm9wb3NlZCByZXNvbHV0aW9ucywKSjE2LzAwLTAwMjk9PVdHMjEvTjEyNTIsICJTaGFkZXMgb2YgbmFtZXNwYWNlIHN0ZCBmdW5jdGlvbnMKIiBieSBBbGFuIEdyaWZmaXRocywgaXMgaW4gdGhlIFBvc3QtVG9reW8gbWFpbGluZy4gSXQKc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBwYXJ0IG9mIHRoaXMgaXNzdWUuXTwvaT48L3A+CgoKPHA+PGk+W1Rvcm9udG86IERhdmUgQWJyYWhhbXMgYW5kIFBldGVyIERpbW92IGhhdmUgcHJvcG9zZWQgYQpyZXNvbHV0aW9uIHRoYXQgaW52b2x2ZXMgY29yZSBjaGFuZ2VzOiBpdCB3b3VsZCBhZGQgcGFydGlhbApzcGVjaWFsaXphdGlvbiBvZiBmdW5jdGlvbiB0ZW1wbGF0ZS4gIFRoZSBDb3JlIFdvcmtpbmcgR3JvdXAgaXMKcmVsdWN0YW50IHRvIGFkZCBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcy4gIEl0IGlzCnZpZXdlZCBhcyBhIGxhcmdlIGNoYW5nZSwgQ1dHIGJlbGlldmVzIHRoYXQgcHJvcG9zYWwgcHJlc2VudGVkIGxlYXZlcwpzb21lIHN5bnRhY3RpYyBpc3N1ZXMgdW5hbnN3ZXJlZDsgaWYgdGhlIENXRyBkb2VzIGFkZCBwYXJ0aWFsCnNwZWNpYWxpemF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcywgaXQgd2lzaGVzIHRvIGRldmVsb3AgaXRzIG93bgpwcm9wb3NhbC4gIFRoZSBMV0cgY29udGludWVzIHRvIGJlbGlldmUgdGhhdCB0aGVyZSBpcyBhIHNlcmlvdXMKcHJvYmxlbTogdGhlcmUgaXMgbm8gZ29vZCB3YXkgZm9yIHVzZXJzIHRvIGZvcmNlIHRoZSBsaWJyYXJ5IHRvIHVzZQp1c2VyIHNwZWNpYWxpemF0aW9ucyBvZiBnZW5lcmljIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zLCBhbmQgaW4KY2VydGFpbiBjYXNlcyAoZS5nLiB0cmFuc2NlbmRlbnRhbCBmdW5jdGlvbnMgY2FsbGVkIGJ5Cjx0dD52YWxhcnJheTwvdHQ+IGFuZCA8dHQ+Y29tcGxleDwvdHQ+KSB0aGlzIGlzIGltcG9ydGFudC4gIEtvZW5pZwpsb29rdXAgaXNuJ3QgYWRlcXVhdGUsIHNpbmNlIG5hbWVzIHdpdGhpbiB0aGUgbGlicmFyeSBtdXN0IGJlCnF1YWxpZmllZCB3aXRoIDx0dD5zdGQ8L3R0PiAoc2VlIGlzc3VlIDIyNSksIHNwZWNpYWxpemF0aW9uIGRvZXNuJ3QKd29yayAod2UgZG9uJ3QgaGF2ZSBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcyksIGFuZAp1c2VycyBhcmVuJ3QgcGVybWl0dGVkIHRvIGFkZCBvdmVybG9hZHMgd2l0aGluIG5hbWVzcGFjZSBzdGQuCl08L2k+PC9wPgoKCjxwPjxpPltDb3BlbmhhZ2VuOiBEaXNjdXNzZWQgYXQgbGVuZ3RoLCB3aXRoIG5vIGNvbnNlbnN1cy4gIFJlbGV2YW50CnBhcGVycyBpbiB0aGUgcHJlLUNvcGVuaGFnZW4gbWFpbGluZzogTjEyODksIE4xMjk1LCBOMTI5Ni4gIERpc2N1c3Npb24KZm9jdXNlZCBvbiBmb3VyIG9wdGlvbnMuICgxKSBSZWxheCByZXN0cmljdGlvbnMgb24gb3ZlcmxvYWRzIHdpdGhpbgpuYW1lc3BhY2Ugc3RkLiAoMikgTWFuZGF0ZSB0aGF0IHRoZSBzdGFuZGFyZCBsaWJyYXJ5IHVzZSB1bnF1YWxpZmllZApjYWxscyBmb3IgPHR0PnN3YXA8L3R0PiBhbmQgcG9zc2libHkgb3RoZXIgZnVuY3Rpb25zLiAgKDMpIEludHJvZHVjZQpoZWxwZXIgY2xhc3MgdGVtcGxhdGVzIGZvciA8dHQ+c3dhcDwvdHQ+IGFuZCBwb3NzaWJseSBvdGhlciBmdW5jdGlvbnMuCig0KSBJbnRyb2R1Y2UgcGFydGlhbCBzcGVjaWFsaXphdGlvbiBvZiBmdW5jdGlvbiB0ZW1wbGF0ZXMuICBFdmVyeQpvcHRpb24gaGFkIGJvdGggc3VwcG9ydCBhbmQgb3Bwb3NpdGlvbi4gIFN0cmF3IHBvbGwgKGZpcnN0IG51bWJlciBpcwpzdXBwb3J0LCBzZWNvbmQgaXMgc3Ryb25nbHkgb3Bwb3NlZCk6ICgxKSA2LCA0OyAoMikgNiwgNzsgKDMpIDMsIDg7Cig0KSA0LCA0Ll08L2k+PC9wPgoKCjxwPjxpPltSZWRtb25kOiBEaXNjdXNzZWQsIGFnYWluIG5vIGNvbnNlbnN1cy4gIEhlcmIgcHJlc2VudGVkIGFuCmFyZ3VtZW50IHRoYXQgYSB1c2VyIHdobyBpcyBkZWZpbmluZyBhIHR5cGUgPHR0PlQ8L3R0PiB3aXRoIGFuCmFzc29jaWF0ZWQgPHR0PnN3YXA8L3R0PiBzaG91bGQgbm90IGJlIGV4cGVjdGVkIHRvIHB1dCB0aGF0Cjx0dD5zd2FwPC90dD4gaW4gbmFtZXNwYWNlIHN0ZCwgZWl0aGVyIGJ5IG92ZXJsb2FkaW5nIG9yIGJ5IHBhcnRpYWwKc3BlY2lhbGl6YXRpb24uICBUaGUgYXJndW1lbnQgaXMgdGhhdCA8dHQ+c3dhcDwvdHQ+IGlzIHBhcnQgb2YKPHR0PlQ8L3R0PidzIGludGVyZmFjZSwgYW5kIHRodXMgc2hvdWxkIHRvIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhcwo8dHQ+VDwvdHQ+IGFuZCBvbmx5IGluIHRoYXQgbmFtZXNwYWNlLiAgSWYgd2UgYWNjZXB0IHRoaXMgYXJndW1lbnQsCnRoZSBjb25zZXF1ZW5jZSBpcyB0aGF0IHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zIHNob3VsZCB1c2UKdW5xdWFsaWZpZWQgY2FsbCBvZiA8dHQ+c3dhcDwvdHQ+LiAgKEFuZCB3aGljaCBvdGhlciBmdW5jdGlvbnM/IEFueT8pCkEgc21hbGwgZ3JvdXAgKE5hdGhhbiwgSG93YXJkLCBKZXJlbXksIERhdmUsIE1hdHQsIFdhbHRlciwgTWFyYykgd2lsbAp0cnkgdG8gcHV0IHRvZ2V0aGVyIGEgcHJvcG9zYWwgYmVmb3JlIHRoZSBuZXh0IG1lZXRpbmcuXTwvaT48L3A+CgoKPHA+PGk+W0N1cmHnYW86IEFuIExXRy1zdWJncm91cCBzcGVudCBhbiBhZnRlcm5vb24gd29ya2luZyBvbiBpc3N1ZXMKMjI1LCAyMjYsIGFuZCAyMjkuICBUaGVpciBjb25jbHVzaW9uIHdhcyB0aGF0IHRoZSBpc3N1ZXMgc2hvdWxkIGJlCnNlcGFyYXRlZCBpbnRvIGFuIExXRyBwb3J0aW9uIChIb3dhcmQncyBwYXBlciwgTjEzODc9MDItMDA0NSksIGFuZCBhCkVXRyBwb3J0aW9uIChEYXZlIHdpbGwgd3JpdGUgYSBwcm9wb3NhbCkuIFRoZSBMV0cgYW5kIEVXRyBoYWQKKHNlcGFyYXRlKSBkaXNjdXNzaW9ucyBvZiB0aGlzIHBsYW4gdGhlIG5leHQgZGF5LiAgVGhlIHByb3Bvc2VkCnJlc29sdXRpb24gaXMgdGhlIG9uZSBwcm9wb3NlZCBieSBIb3dhcmQuXTwvaT48L3A+CgoKPHA+PGk+W1NhbnRhIENydXo6IHRoZSBMV0cgYWdyZWVkIHdpdGggdGhlIGdlbmVyYWwgZGlyZWN0aW9uIG9mCiAgSG93YXJkJ3MgcGFwZXIsIE4xMzg3LiAgKFJvdWdobHk6IEtvZW5pZyBsb29rdXAgaXMgZGlzYWJsZWQgdW5sZXNzCiAgd2Ugc2F5IG90aGVyd2lzZTsgdGhpcyBpc3N1ZSBpcyBhYm91dCB3aGVuIHdlIGRvIHNheSBvdGhlcndpc2UuKQogIEhvd2V2ZXIsIHRoZXJlIHdlcmUgY29uY2VybnMgYWJvdXQgd29yZGluZy4gIEhvd2FyZCB3aWxsIHByb3ZpZGUgbmV3CiAgd29yZGluZy4gIEJpbGwgYW5kIEplcmVteSB3aWxsIHJldmlldyBpdC5dPC9pPjwvcD4KCgo8cD48aT5bS29uYTogSG93YXJkIHByb3Bvc2VkIHRoZSBuZXcgd29yZGluZy4gIFRoZSBMV0cgYWNjZXB0ZWQgaGlzCiAgcHJvcG9zZWQgcmVzb2x1dGlvbi5dPC9pPjwvcD4KCgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5JbmZvcm1hbGx5OiBpbnRyb2R1Y2UgYSBTd2FwcGFibGUgY29uY2VwdCwgYW5kIHNwZWNpZnkgdGhhdCB0aGUKICB2YWx1ZSB0eXBlcyBvZiB0aGUgaXRlcmF0b3JzIHBhc3NlZCB0byBjZXJ0YWluIHN0YW5kYXJkIGFsZ29yaXRobXMKICAoc3VjaCBhcyBpdGVyX3N3YXAsIHN3YXBfcmFuZ2VzLCByZXZlcnNlLCByb3RhdGUsIGFuZCBzb3J0KSBjb25mb3JtCiAgdG8gdGhhdCBjb25jZXB0LiAgVGhlIFN3YXBwYWJsZSBjb25jZXB0IHdpbGwgbWFrZSBpdCBjbGVhciB0aGF0CiAgdGhlc2UgYWxnb3JpdGhtcyB1c2UgdW5xdWFsaWZpZWQgbG9va3VwIGZvciB0aGUgY2FsbHMKICB0byA8dHQ+c3dhcDwvdHQ+LiAgQWxzbywgaW4gMjYuNS4zLjMgW3ZhbGFycmF5LnRyYW5zY2VuZF0gcGFyYWdyYXBoIDEsCiAgc3RhdGUgdGhhdCB0aGUgdmFsYXJyYXkgdHJhbnNjZW5kZW50YWxzIHVzZSB1bnF1YWxpZmllZCBsb29rdXAuPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIyNyI+PC9hPjIyNy4gc3RkOjpzd2FwKCkgc2hvdWxkIHJlcXVpcmUgQ29weUNvbnN0cnVjdGlibGUgb3IgRGVmYXVsdENvbnN0cnVjdGlibGUgYXJndW1lbnRzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI1LjIuMyBbYWxnLnN3YXBdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERhdmUgQWJyYWhhbXMgPGI+RGF0ZTo8L2I+IDIwMDAtMDQtMDk8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2FsZy5zd2FwIj5pc3N1ZXM8L2E+IGluIFthbGcuc3dhcF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVEMiPlRDPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPjI1LjIuMiByZWFkczo8L3A+CjxibG9ja3F1b3RlPgogIDxwPjx0dD4gIHRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IHZvaWQgc3dhcChUJmFtcDsgYSwgVCZhbXA7IGIpOzwvdHQ+PGJyPgogIDxicj4KICBSZXF1aXJlczogICAgVHlwZSBUIGlzIEFzc2lnbmFibGUgKF9saWIuY29udGFpbmVyLnJlcXVpcmVtZW50c18pLjxicj4KICBFZmZlY3RzOiAgICBFeGNoYW5nZXMgdmFsdWVzIHN0b3JlZCBpbiB0d28gbG9jYXRpb25zLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5UaGUgb25seSByZWFzb25hYmxlKiogZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBzd2FwIHJlcXVpcmVzIGNvbnN0cnVjdGlvbiBvZiBhIAogICBuZXcgdGVtcG9yYXJ5IGNvcHkgb2Ygb25lIG9mIGl0cyBhcmd1bWVudHM6PC9wPgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyB2b2lkIHN3YXAoVCZhbXA7IGEsIFQmYW1wOyBiKTsKICB7CiAgICAgIFQgdG1wKGEpOwogICAgICBhID0gYjsKICAgICAgYiA9IHRtcDsKICB9PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+QnV0IGEgdHlwZSB3aGljaCBpcyBvbmx5IEFzc2lnbmFibGUgY2Fubm90IGJlIHN3YXBwZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi48L3A+CjxwPioqWWVzLCB0aGVyZSdzIGFsc28gYW4gdW5yZWFzb25hYmxlIGltcGxlbWVudGF0aW9uIHdoaWNoIHdvdWxkIHJlcXVpcmUgVCB0byBiZSAKICAgRGVmYXVsdENvbnN0cnVjdGlibGUgaW5zdGVhZCBvZiBDb3B5Q29uc3RydWN0aWJsZS4gSSBkb24ndCB0aGluayB0aGlzIGlzIHdvcnRoeSAKICAgb2YgY29uc2lkZXJhdGlvbjo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IHZvaWQgc3dhcChUJmFtcDsgYSwgVCZhbXA7IGIpOwp7CiAgICBUIHRtcDsKICAgIHRtcCA9IGE7CiAgICBhID0gYjsKICAgIGIgPSB0bXA7Cn08L3ByZT4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI1LjIuMiBwYXJhZ3JhcGggMSBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+CjxwPiAgUmVxdWlyZXM6IFR5cGUgVCBpcyBBc3NpZ25hYmxlICgyMy4xKS48L3A+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KPHA+ICBSZXF1aXJlczogVHlwZSBUIGlzIENvcHlDb25zdHJ1Y3RpYmxlICgyMC4xLjMpIGFuZCBBc3NpZ25hYmxlICgyMy4xKTwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIyOCI+PC9hPjIyOC4gSW5jb3JyZWN0IHNwZWNpZmljYXRpb24gb2YgIi4uLl9ieW5hbWUiIGZhY2V0czwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yIFtsb2NhbGUuY2F0ZWdvcmllc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGlldG1hciBL/GhsIDxiPkRhdGU6PC9iPiAyMDAwLTA0LTIwPC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjbG9jYWxlLmNhdGVnb3JpZXMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtsb2NhbGUuY2F0ZWdvcmllc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsb2NhbGUuY2F0ZWdvcmllcyI+aXNzdWVzPC9hPiBpbiBbbG9jYWxlLmNhdGVnb3JpZXNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgc2VjdGlvbnMgMjIuMi4xLjIgW2xvY2FsZS5jdHlwZS5ieW5hbWVdLCAyMi4yLjEuNQpbbG9jYWxlLmNvZGVjdnQuYnluYW1lXSwKc3JlZiByZWY9IjIyLjIuMS42IiwgMjIuMi4zLjIgW2xvY2FsZS5udW1wdW5jdC5ieW5hbWVdLCAyMi4yLjQuMgpbbG9jYWxlLmNvbGxhdGUuYnluYW1lXSwgMjIuMi41LjQgW2xvY2FsZS50aW1lLnB1dC5ieW5hbWVdLCAyMi4yLjYuNApbbG9jYWxlLm1vbmV5cHVuY3QuYnluYW1lXSwgYW5kIDIyLjIuNy4yIFtsb2NhbGUubWVzc2FnZXMuYnluYW1lXQpvdmVyc3BlY2lmeSB0aGUKZGVmaW5pdGlvbnMgb2YgdGhlICIuLi5fYnluYW1lIiBjbGFzc2VzIGJ5IGxpc3RpbmcgYSBidW5jaApvZiB2aXJ0dWFsIGZ1bmN0aW9ucy4gQXQgdGhlIHNhbWUgdGltZSwgbm8gc2VtYW50aWNzIG9mIHRoZXNlCmZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gUmVhbCBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IGRlZmluZSB0aGVzZQpmdW5jdGlvbnMgYmVjYXVzZSB0aGUgZnVuY3Rpb25hbCBwYXJ0IG9mIHRoZSBmYWNldHMgaXMgYWN0dWFsbHkKaW1wbGVtZW50ZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYmFzZSBjbGFzc2VzIGFuZCB0aGUgY29uc3RydWN0b3Igb2YKdGhlICIuLi5fYnluYW1lIiB2ZXJzaW9uIGp1c3QgcHJvdmlkZXMgc3VpdGFibGUgZGF0ZSB1c2VkIGJ5CnRoZXNlIGltcGxlbWVudGF0aW9ucy4gRm9yIGV4YW1wbGUsIHRoZSAnbnVtcHVuY3QnIG1ldGhvZHMganVzdCByZXR1cm4KdmFsdWVzIGZyb20gYSBzdHJ1Y3QuIFRoZSBiYXNlIGNsYXNzIHVzZXMgYSBzdGF0aWNhbGx5IGluaXRpYWxpemVkCnN0cnVjdCB3aGlsZSB0aGUgZGVyaXZlZCB2ZXJzaW9uIHJlYWRzIHRoZSBjb250ZW50cyBvZiB0aGlzIHN0cnVjdApmcm9tIGEgdGFibGUuIEhvd2V2ZXIsIG5vIHZpcnR1YWwgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbgonbnVtcHVuY3RfYnluYW1lJy48L3A+Cgo8cD5Gb3IgbW9zdCBjbGFzc2VzIHRoaXMgZG9lcyBub3QgaW1wb3NlIGEgcHJvYmxlbSBidXQgc3BlY2lmaWNhbGx5CmZvciAnY3R5cGUnIGl0IGRvZXM6IFRoZSBzcGVjaWFsaXphdGlvbiBmb3IgJ2N0eXBlX2J5bmFtZSZsdDtjaGFyJmd0OycKaXMgcmVxdWlyZWQgYmVjYXVzZSBvdGhlcndpc2UgdGhlIHNlbWFudGljcyB3b3VsZCBjaGFuZ2UgZHVlIHRvIHRoZQp2aXJ0dWFsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBnZW5lcmFsIHZlcnNpb24gZm9yICdjdHlwZV9ieW5hbWUnOgpJbiAnY3R5cGUmbHQ7Y2hhciZndDsnIHRoZSBtZXRob2QgJ2RvX2lzKCknIGlzIG5vdCB2aXJ0dWFsIGJ1dCBpdCBpcwptYWRlIHZpcnR1YWwgaW4gYm90aCAnY3R5cGUmbHQ7Y1QmZ3Q7JyBhbmQgJ2N0eXBlX2J5bmFtZSZsdDtjVCZndDsnLgpUaHVzLCBhIGNsYXNzIGRlcml2ZWQgZnJvbSAnY3R5cGVfYnluYW1lJmx0O2NoYXImZ3Q7JyBjYW4gdGVsbCB3aGV0aGVyCnRoaXMgY2xhc3MgaXMgc3BlY2lhbGl6ZWQgb3Igbm90IHVuZGVyIHRoZSBjdXJyZW50IHNwZWNpZmljYXRpb246CldpdGhvdXQgdGhlIHNwZWNpYWxpemF0aW9uLCAnZG9faXMoKScgaXMgdmlydHVhbCB3aGlsZSB3aXRoCnNwZWNpYWxpemF0aW9uIGl0IGlzIG5vdCB2aXJ0dWFsLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPiZuYnNwOyBDaGFuZ2Ugc2VjdGlvbiAyMi4yLjEuMiAobGliLmxvY2FsZS5jdHlwZS5ieW5hbWUpIHRvIGJlY29tZTo8L3A+CjxwcmU+ICAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBjaGFyVCZndDsKICAgICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlwZSZsdDtjaGFyVCZndDsgewogICAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIGN0eXBlJmx0O2NoYXJUJmd0Ozo6bWFzayBtYXNrOwogICAgICAgICBleHBsaWNpdCBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzID0gMCk7CiAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfmN0eXBlX2J5bmFtZSgpOyAgICAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9PC9wcmU+CjxwPiZuYnNwOyBDaGFuZ2Ugc2VjdGlvbiAyMi4yLjEuNiAobGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZSkgdG8gYmVjb21lOjwvcD4KPHByZT4gICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBpbnRlcm5ULCBjbGFzcyBleHRlcm5ULCBjbGFzcyBzdGF0ZVQmZ3Q7CiAgICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lIDogcHVibGljIGNvZGVjdnQmbHQ7aW50ZXJuVCwgZXh0ZXJuVCwgc3RhdGVUJmd0OyB7CiAgICAgIHB1YmxpYzoKICAgICAgIGV4cGxpY2l0IGNvZGVjdnRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyA9IDApOwogICAgICBwcm90ZWN0ZWQ6CiAgICAgIH5jb2RlY3Z0X2J5bmFtZSgpOyAgICAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9CjwvcHJlPgo8cD4mbmJzcDsgQ2hhbmdlIHNlY3Rpb24gMjIuMi4zLjIgKGxpYi5sb2NhbGUubnVtcHVuY3QuYnluYW1lKSB0byBiZWNvbWU6PC9wPgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7CiAgICAgICBjbGFzcyBudW1wdW5jdF9ieW5hbWUgOiBwdWJsaWMgbnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7IHsKICAgICAvLyAgdGhpcyBjbGFzcyBpcyBzcGVjaWFsaXplZCBmb3IgIGNoYXIgIGFuZCAgd2NoYXJfdC4KICAgICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBjaGFyVCAgICAgICAgICAgICAgICBjaGFyX3R5cGU7CiAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nJmx0O2NoYXJUJmd0OyAgc3RyaW5nX3R5cGU7CiAgICAgICAgIGV4cGxpY2l0IG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMgPSAwKTsKICAgICAgIHByb3RlY3RlZDoKICAgICAgICB+bnVtcHVuY3RfYnluYW1lKCk7ICAgICAgICAgIC8vICB2aXJ0dWFsCiAgICAgICB9OwogICAgIH08L3ByZT4KPHA+Jm5ic3A7IENoYW5nZSBzZWN0aW9uIDIyLjIuNC4yIChsaWIubG9jYWxlLmNvbGxhdGUuYnluYW1lKSB0byBiZWNvbWU6PC9wPgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7CiAgICAgICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRlJmx0O2NoYXJUJmd0OyB7CiAgICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nJmx0O2NoYXJUJmd0OyBzdHJpbmdfdHlwZTsKICAgICAgICAgZXhwbGljaXQgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzID0gMCk7CiAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfmNvbGxhdGVfYnluYW1lKCk7ICAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9PC9wcmU+CjxwPiZuYnNwOyBDaGFuZ2Ugc2VjdGlvbiAyMi4yLjUuMiAobGliLmxvY2FsZS50aW1lLmdldC5ieW5hbWUpIHRvIGJlY29tZTo8L3A+CjxwcmU+ICAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBjaGFyVCwgY2xhc3MgSW5wdXRJdGVyYXRvciA9IGlzdHJlYW1idWZfaXRlcmF0b3ImbHQ7Y2hhclQmZ3Q7ICZndDsKICAgICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX2dldCZsdDtjaGFyVCwgSW5wdXRJdGVyYXRvciZndDsgewogICAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIHRpbWVfYmFzZTo6ZGF0ZW9yZGVyIGRhdGVvcmRlcjsKICAgICAgICAgdHlwZWRlZiBJbnB1dEl0ZXJhdG9yICAgICAgICBpdGVyX3R5cGU8L3ByZT4KPHByZT4gICAgICAgICBleHBsaWNpdCB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzID0gMCk7CiAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfnRpbWVfZ2V0X2J5bmFtZSgpOyAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9PC9wcmU+CjxwPiZuYnNwOyBDaGFuZ2Ugc2VjdGlvbiAyMi4yLjUuNCAobGliLmxvY2FsZS50aW1lLnB1dC5ieW5hbWUpIHRvIGJlY29tZTo8L3A+CjxwcmU+ICAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBjaGFyVCwgY2xhc3MgT3V0cHV0SXRlcmF0b3IgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJUJmd0OyAmZ3Q7CiAgICAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9wdXQmbHQ7Y2hhclQsIE91dHB1dEl0ZXJhdG9yJmd0OwogICAgICAgewogICAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIGNoYXJUICAgICAgICAgIGNoYXJfdHlwZTsKICAgICAgICAgdHlwZWRlZiBPdXRwdXRJdGVyYXRvciBpdGVyX3R5cGU7PC9wcmU+CjxwcmU+ICAgICAgICAgZXhwbGljaXQgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyA9IDApOwogICAgICAgcHJvdGVjdGVkOgogICAgICAgIH50aW1lX3B1dF9ieW5hbWUoKTsgICAgICAgICAgLy8gIHZpcnR1YWwKICAgICAgIH07CiAgICAgfSI8L3ByZT4KPHA+Jm5ic3A7IENoYW5nZSBzZWN0aW9uIDIyLjIuNi40IChsaWIubG9jYWxlLm1vbmV5cHVuY3QuYnluYW1lKSB0byBiZWNvbWU6PC9wPgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQsIGJvb2wgSW50bCA9IGZhbHNlJmd0OwogICAgICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdCZsdDtjaGFyVCwgSW50bCZndDsgewogICAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhdHRlcm4gcGF0dGVybjsKICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmcmbHQ7Y2hhclQmZ3Q7IHN0cmluZ190eXBlOzwvcHJlPgo8cHJlPiAgICAgICAgIGV4cGxpY2l0IG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyA9IDApOwogICAgICAgcHJvdGVjdGVkOgogICAgICAgIH5tb25leXB1bmN0X2J5bmFtZSgpOyAgICAgICAgLy8gIHZpcnR1YWwKICAgICAgIH07CiAgICAgfTwvcHJlPgo8cD4mbmJzcDsgQ2hhbmdlIHNlY3Rpb24gMjIuMi43LjIgKGxpYi5sb2NhbGUubWVzc2FnZXMuYnluYW1lKSB0byBiZWNvbWU6PC9wPgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7CiAgICAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXMmbHQ7Y2hhclQmZ3Q7IHsKICAgICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBtZXNzYWdlc19iYXNlOjpjYXRhbG9nIGNhdGFsb2c7CiAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nJmx0O2NoYXJUJmd0OyAgICBzdHJpbmdfdHlwZTs8L3ByZT4KPHByZT4gICAgICAgICBleHBsaWNpdCBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzID0gMCk7CiAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfm1lc3NhZ2VzX2J5bmFtZSgpOyAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9PC9wcmU+CjxwPlJlbW92ZSBzZWN0aW9uIDIyLjIuMS40IFtsb2NhbGUuY29kZWN2dF0gY29tcGxldGVseSAoYmVjYXVzZSBpbgp0aGlzIGNhc2Ugb25seSB0aG9zZSBtZW1iZXJzIGFyZSBkZWZpbmVkIHRvIGJlIHZpcnR1YWwgd2hpY2ggYXJlCmRlZmluZWQgdG8gYmUgdmlydHVhbCBpbiAnY3R5cGUmbHQ7Y1QmZ3Q7Jy4pPC9wPgoKPHA+PGk+W1Bvc3QtVG9reW86IERpZXRtYXIgS/xobCBzdWJtaXR0ZWQgdGhpcyBpc3N1ZSBhdCB0aGUgcmVxdWVzdCBvZgp0aGUgTFdHIHRvIHNvbHZlIHRoZSB1bmRlcmx5aW5nIHByb2JsZW1zIHJhaXNlZCBieSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxMzgiPjEzODwvYT4uXTwvaT48L3A+CgoKPHA+PGk+W0NvcGVuaGFnZW46IHByb3Bvc2VkIHJlc29sdXRpb24gd2FzIHJldmlzZWQgc2xpZ2h0bHksIHRvIHJlbW92ZQp0aHJlZSBsYXN0IHZpcnR1YWwgZnVuY3Rpb25zIGZyb20gPHR0Pm1lc3NhZ2VzX2J5bmFtZTwvdHQ+Ll08L2k+PC9wPgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjI5Ij48L2E+MjI5LiBVbnF1YWxpZmllZCByZWZlcmVuY2VzIG9mIG90aGVyIGxpYnJhcnkgZW50aXRpZXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTcuNC4xLjEgW2NvbnRlbnRzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBTdGV2ZSBDbGFtYWdlIDxiPkRhdGU6PC9iPiAyMDAwLTA0LTE5PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRocm91Z2hvdXQgdGhlIGxpYnJhcnkgY2hhcHRlcnMsIHRoZSBkZXNjcmlwdGlvbnMgb2YgbGlicmFyeSBlbnRpdGllcyByZWZlcgp0byBvdGhlciBsaWJyYXJ5IGVudGl0aWVzIHdpdGhvdXQgbmVjZXNzYXJpbHkgcXVhbGlmeWluZyB0aGUgbmFtZXMuPC9wPgoKPHA+Rm9yIGV4YW1wbGUsIHNlY3Rpb24gMjUuMi4yICJTd2FwIiBkZXNjcmliZXMgdGhlIGVmZmVjdCBvZgpzd2FwX3JhbmdlcyBpbiB0ZXJtcyBvZiB0aGUgdW5xdWFsaWZpZWQgbmFtZSAic3dhcCIuIFRoaXMgc2VjdGlvbgpjb3VsZCByZWFzb25hYmx5IGJlIGludGVycHJldGVkIHRvIG1lYW4gdGhhdCB0aGUgbGlicmFyeSBtdXN0IGJlIGltcGxlbWVudGVkIHNvCmFzIHRvIGRvIGEgbG9va3VwIG9mIHRoZSB1bnF1YWxpZmllZCBuYW1lICJzd2FwIiwgYWxsb3dpbmcgdXNlcnMgdG8Kb3ZlcnJpZGUgYW55IDo6c3RkOjpzd2FwIGZ1bmN0aW9uIHdoZW4gS29lbmlnIGxvb2t1cCBhcHBsaWVzLjwvcD4KCjxwPkFsdGhvdWdoIGl0IHdvdWxkIGhhdmUgYmVlbiBiZXN0IHRvIHVzZSBleHBsaWNpdCBxdWFsaWZpY2F0aW9uIHdpdGgKIjo6c3RkOjoiIHRocm91Z2hvdXQsIHRvbyBtYW55IGxpbmVzIGluIHRoZSBzdGFuZGFyZCB3b3VsZCBoYXZlIHRvIGJlCmFkanVzdGVkIHRvIG1ha2UgdGhhdCBjaGFuZ2UgaW4gYSBUZWNobmljYWwgQ29ycmlnZW5kdW0uPC9wPgoKPHA+SXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4MiI+MTgyPC9hPiwgd2hpY2ggYWRkcmVzc2VzIHF1YWxpZmljYXRpb24gb2YKPHR0PnNpemVfdDwvdHQ+LCBpcyBhIHNwZWNpYWwgY2FzZSBvZiB0aGlzLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5UbyBzZWN0aW9uIDE3LjQuMS4xICJMaWJyYXJ5IGNvbnRlbnRzIiBBZGQgdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGg6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5XaGVuZXZlciBhIG5hbWUgeCBkZWZpbmVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGlzIG1lbnRpb25lZCwgdGhlIG5hbWUgeAogIGlzIGFzc3VtZWQgdG8gYmUgZnVsbHkgcXVhbGlmaWVkIGFzIDo6c3RkOjp4LCB1bmxlc3MgZXhwbGljaXRseSBkZXNjcmliZWQKICBvdGhlcndpc2UuIEZvciBleGFtcGxlLCBpZiB0aGUgRWZmZWN0cyBzZWN0aW9uIGZvciBsaWJyYXJ5IGZ1bmN0aW9uIEYgaXMKICBkZXNjcmliZWQgYXMgY2FsbGluZyBsaWJyYXJ5IGZ1bmN0aW9uIEcsIHRoZSBmdW5jdGlvbiA6OnN0ZDo6RyBpcyBtZWFudC48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltQb3N0LVRva3lvOiBTdGV2ZSBDbGFtYWdlIHN1Ym1pdHRlZCB0aGlzIGlzc3VlIGF0IHRoZSByZXF1ZXN0IG9mCnRoZSBMV0cgdG8gc29sdmUgYSBwcm9ibGVtIGluIHRoZSBzdGFuZGFyZCBpdHNlbGYgc2ltaWxhciB0byB0aGUKcHJvYmxlbSB3aXRoaW4gaW1wbGVtZW50YXRpb25zIG9mIGxpYnJhcnkgaWRlbnRpZmllZCBieSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI1Ij4yMjU8L2E+LiAgQW55IHJlc29sdXRpb24gb2YgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNSI+MjI1PC9hPiBzaG91bGQgYmUKY29vcmRpbmF0ZWQgd2l0aCB0aGUgcmVzb2x1dGlvbiBvZiB0aGlzIGlzc3VlLl08L2k+PC9wPgoKCjxwPjxpPltwb3N0LVRvcm9udG86IEhvd2FyZCBpcyB1bmRlY2lkZWQgYWJvdXQgd2hldGhlciBpdCBpcwphcHByb3ByaWF0ZSBmb3IgYWxsIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb24gbmFtZXMgcmVmZXJyZWQgdG8gaW4Kb3RoZXIgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMgdG8gYmUgZXhwbGljaXRseSBxdWFsaWZpZWQgYnkKPHR0PnN0ZDwvdHQ+OiBpdCBpcyBjb21tb24gYWR2aWNlIHRoYXQgdXNlcnMgc2hvdWxkIGRlZmluZSBnbG9iYWwKZnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiB0aGVpciBjbGFzcyBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXMgdGhlIApjbGFzcywgYW5kIHRoaXMgcmVxdWlyZXMgYXJndW1lbnQtZGVwZW5kZW50IGxvb2t1cCBpZiB0aG9zZSBmdW5jdGlvbnMKYXJlIGludGVuZGVkIHRvIGJlIGNhbGxlZCBieSBsaWJyYXJ5IGNvZGUuICBTZXZlcmFsIExXRyBtZW1iZXJzIGFyZQpjb25jZXJuZWQgdGhhdCB2YWxhcnJheSBhcHBlYXJzIHRvIHJlcXVpcmUgYXJndW1lbnQtZGVwZW5kZW50IGxvb2t1cCwKYnV0IHRoYXQgdGhlIHdvcmRpbmcgbWF5IG5vdCBiZSBjbGVhciBlbm91Z2ggdG8gZmFsbCB1bmRlcgoidW5sZXNzIGV4cGxpY2l0bHkgZGVzY3JpYmVkIG90aGVyd2lzZSIuXTwvaT48L3A+CgoKPHA+PGk+W0N1cmHnYW86IEFuIExXRy1zdWJncm91cCBzcGVudCBhbiBhZnRlcm5vb24gd29ya2luZyBvbiBpc3N1ZXMKMjI1LCAyMjYsIGFuZCAyMjkuICBUaGVpciBjb25jbHVzaW9uIHdhcyB0aGF0IHRoZSBpc3N1ZXMgc2hvdWxkIGJlCnNlcGFyYXRlZCBpbnRvIGFuIExXRyBwb3J0aW9uIChIb3dhcmQncyBwYXBlciwgTjEzODc9MDItMDA0NSksIGFuZCBhCkVXRyBwb3J0aW9uIChEYXZlIHdpbGwgd3JpdGUgYSBwcm9wb3NhbCkuIFRoZSBMV0cgYW5kIEVXRyBoYWQKKHNlcGFyYXRlKSBkaXNjdXNzaW9ucyBvZiB0aGlzIHBsYW4gdGhlIG5leHQgZGF5LiAgVGhpcyBwYXBlciByZXNvbHZlcwppc3N1ZXMgMjI1IGFuZCAyMjYuICBJbiBsaWdodCBvZiB0aGF0IHJlc29sdXRpb24sIHRoZSBwcm9wb3NlZApyZXNvbHV0aW9uIGZvciB0aGUgY3VycmVudCBpc3N1ZSBtYWtlcyBzZW5zZS5dPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIzMCI+PC9hPjIzMC4gQXNzaWduYWJsZSBzcGVjaWZpZWQgd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcgQ29weUNvbnN0cnVjdGlibGU8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTcgW2xpYnJhcnldIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEJlbWFuIERhd2VzIDxiPkRhdGU6PC9iPiAyMDAwLTA0LTI2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsaWJyYXJ5Ij5pc3N1ZXM8L2E+IGluIFtsaWJyYXJ5XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNyI+MjI3PC9hPiBpZGVudGlmaWVkIGFuIGluc3RhbmNlIChzdGQ6OnN3YXApIHdoZXJlCkFzc2lnbmFibGUgd2FzIHNwZWNpZmllZCB3aXRob3V0IGFsc28gc3BlY2lmeWluZwpDb3B5Q29uc3RydWN0aWJsZS4gVGhlIExXRyBhc2tlZCB0aGF0IHRoZSBzdGFuZGFyZCBiZSBzZWFyY2hlZCB0bwpkZXRlcm1pbmUgaWYgdGhlIHNhbWUgZGVmZWN0IGV4aXN0ZWQgZWxzZXdoZXJlLjwvcD4KCjxwPlRoZXJlIGFyZSBhIG51bWJlciBvZiBwbGFjZXMgKHNlZSBwcm9wb3NlZCByZXNvbHV0aW9uIGJlbG93KSB3aGVyZQpBc3NpZ25hYmxlIGlzIHNwZWNpZmllZCB3aXRob3V0IGFsc28gc3BlY2lmeWluZwpDb3B5Q29uc3RydWN0aWJsZS4gVGhlcmUgYXJlIGFsc28gc2V2ZXJhbCBjYXNlcyB3aGVyZSBib3RoIGFyZQpzcGVjaWZpZWQuIEZvciBleGFtcGxlLCAyNi40LjEgW3JhbmQucmVxXS48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAgMjMuMSBbY29udGFpbmVyLnJlcXVpcmVtZW50c10gdGFibGUgNjUgZm9yIHZhbHVlX3R5cGU6CmNoYW5nZSAiVCBpcyBBc3NpZ25hYmxlIiB0byAiVCBpcyBDb3B5Q29uc3RydWN0aWJsZSBhbmQKQXNzaWduYWJsZSIKPC9wPgoKPHA+SW4gMjMuMS40IFthc3NvY2lhdGl2ZS5yZXFtdHNdIHRhYmxlIDY5IFg6OmtleV90eXBlOyBjaGFuZ2UKIktleSBpcyBBc3NpZ25hYmxlIiB0byAiS2V5IGlzCkNvcHlDb25zdHJ1Y3RpYmxlIGFuZCBBc3NpZ25hYmxlIjxicj4KPC9wPgoKPHA+SW4gMjQuMS4yIFtvdXRwdXQuaXRlcmF0b3JzXSBwYXJhZ3JhcGggMSwgY2hhbmdlOgo8L3A+CjxibG9ja3F1b3RlPgo8cD4gQSBjbGFzcyBvciBhIGJ1aWx0LWluIHR5cGUgWCBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50cyBvZiBhbgpvdXRwdXQgaXRlcmF0b3IgaWYgWCBpcyBhbiBBc3NpZ25hYmxlIHR5cGUgKDIzLjEpIGFuZCBhbHNvIHRoZQpmb2xsb3dpbmcgZXhwcmVzc2lvbnMgYXJlIHZhbGlkLCBhcyBzaG93biBpbiBUYWJsZSA3MzoKPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOgo8L3A+CjxibG9ja3F1b3RlPgo8cD4gQSBjbGFzcyBvciBhIGJ1aWx0LWluIHR5cGUgWCBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50cyBvZiBhbgpvdXRwdXQgaXRlcmF0b3IgaWYgWCBpcyBhIENvcHlDb25zdHJ1Y3RpYmxlICgyMC4xLjMpIGFuZCBBc3NpZ25hYmxlCnR5cGUgKDIzLjEpIGFuZCBhbHNvIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnMgYXJlIHZhbGlkLCBhcyBzaG93biBpbgpUYWJsZSA3MzoKPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bUG9zdC1Ub2t5bzogQmVtYW4gRGF3ZXMgc3VibWl0dGVkIHRoaXMgaXNzdWUgYXQgdGhlIHJlcXVlc3Qgb2YKdGhlIExXRy4gIEhlIGFza3MgdGhhdCB0aGUgMjUuMi41IFthbGcucmVwbGFjZV0gYW5kIDI1LjIuNiBbYWxnLmZpbGxdIGNoYW5nZXMgYmUgc3R1ZGllZCBjYXJlZnVsbHksIGFzIGl0IGlzIG5vdCBjbGVhciB0aGF0CkNvcHlDb25zdHJ1Y3RpYmxlIGlzIHJlYWxseSBhIHJlcXVpcmVtZW50IGFuZCBtYXkgYmUKb3ZlcnNwZWNpZmljYXRpb24uXTwvaT48L3A+CgoKPHA+PGk+W1BvcnRpb25zIG9mIHRoZSByZXNvbHV0aW9uIGZvciBpc3N1ZSAyMzAgaGF2ZSBiZWVuIHN1cGVyY2VkZWQgYnkKdGhlIHJlc29sdXRpb24gb2YgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3NiI+Mjc2PC9hPi5dPC9pPjwvcD4KCgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgb3JpZ2luYWwgcHJvcG9zZWQgcmVzb2x1dGlvbiBhbHNvIGluY2x1ZGVkIGNoYW5nZXMgdG8gaW5wdXQKaXRlcmF0b3IsIGZpbGwsIGFuZCByZXBsYWNlLiAgVGhlIExXRyBiZWxpZXZlcyB0aGF0IHRob3NlIGNoYW5nZXMgYXJlCm5vdCBuZWNlc3NhcnkuICBUaGUgTFdHIGNvbnNpZGVyZWQgc29tZSBibGFua2V0IHN0YXRlbWVudCwgd2hlcmUgYW4KQXNzaWduYWJsZSB0eXBlIHdhcyBhbHNvIHJlcXVpcmVkIHRvIGJlIENvcHkgQ29uc3RydWN0aWJsZSwgYnV0CmRlY2lkZWQgYWdhaW5zdCB0aGlzIGJlY2F1c2UgZmlsbCBhbmQgcmVwbGFjZSByZWFsbHkgZG9uJ3QgcmVxdWlyZSB0aGUKQ29weSBDb25zdHJ1Y3RpYmxlIHByb3BlcnR5LjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIzMSI+PC9hPjIzMS4gUHJlY2lzaW9uIGluIGlvc3RyZWFtPzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjIuMi4yIFtmYWNldC5udW0ucHV0LnZpcnR1YWxzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBKYW1lcyBLYW56ZSwgU3RlcGhlbiBDbGFtYWdlIDxiPkRhdGU6PC9iPiAyMDAwLTA0LTI1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmYWNldC5udW0ucHV0LnZpcnR1YWxzIj5pc3N1ZXM8L2E+IGluIFtmYWNldC5udW0ucHV0LnZpcnR1YWxzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+V2hhdCBpcyB0aGUgZm9sbG93aW5nIHByb2dyYW0gc3VwcG9zZWQgdG8gb3V0cHV0PzwvcD4KPHByZT4jaW5jbHVkZSAmbHQ7aW9zdHJlYW0mZ3Q7CgogICAgaW50CiAgICBtYWluKCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQuc2V0Ziggc3RkOjppb3M6OnNjaWVudGlmaWMgLCBzdGQ6Omlvczo6ZmxvYXRmaWVsZCApIDsKICAgICAgICBzdGQ6OmNvdXQucHJlY2lzaW9uKCAwICkgOwogICAgICAgIHN0ZDo6Y291dCAmbHQ7Jmx0OyAxLjAwICZsdDsmbHQ7ICdcbicgOwogICAgICAgIHJldHVybiAwIDsKICAgIH08L3ByZT4KPHA+RnJvbSBteSBDIGV4cGVyaWVuY2UsIEkgd291bGQgZXhwZWN0ICIxZSswMCI7IHRoaXMgaXMgd2hhdCAKPHR0PnByaW50ZigiJS4wZSIgLCAxLjAwICk7PC90dD4gZG9lcy4gRysrIG91dHB1dHMgCiIxLjAwMDAwMGUrMDAiLjwvcD4KCjxwPlRoZSBvbmx5IGluZGljYXRpb24gSSBjYW4gZmluZCBpbiB0aGUgc3RhbmRhcmQgaXMgMjIuMi4yLjIuMi8xMSwKd2hlcmUgaXQgc2F5cyAiRm9yIGNvbnZlcnNpb24gZnJvbSBhIGZsb2F0aW5nLXBvaW50IHR5cGUsIGlmCihmbGFncyAmYW1wOyBmaXhlZCkgIT0gMCBvciBpZiBzdHIucHJlY2lzaW9uKCkgJmd0OyAwLCB0aGVuCnN0ci5wcmVjaXNpb24oKSBpcyBzcGVjaWZpZWQgaW4gdGhlIGNvbnZlcnNpb24gc3BlY2lmaWNhdGlvbi4iClRoaXMgaXMgYW4gb2J2aW91cyBlcnJvciwgaG93ZXZlciwgZml4ZWQgaXMgbm90IGEgbWFzayBmb3IgYSBmaWVsZCwKYnV0IGEgdmFsdWUgdGhhdCBhIG11bHRpLWJpdCBmaWVsZCBtYXkgdGFrZSAtLSB0aGUgcmVzdWx0cyBvZiBhbmQnaW5nCmZtdGZsYWdzIHdpdGggaW9zOjpmaXhlZCBhcmUgbm90IGRlZmluZWQsIGF0IGxlYXN0IG5vdCBpZgppb3M6OnNjaWVudGlmaWMgaGFzIGJlZW4gc2V0LiBHKysncyBiZWhhdmlvciBjb3JyZXNwb25kcyB0byB3aGF0IG1pZ2h0CmhhcHBlbiBpZiB5b3UgZG8gdXNlIChmbGFncyAmYW1wOyBmaXhlZCkgIT0gMCB3aXRoIGEgdHlwaWNhbAppbXBsZW1lbnRhdGlvbiAoZmxvYXRmaWVsZCA9PSAzICZsdDsmbHQ7IHNvbWV0aGluZywgZml4ZWQgPT0gMQombHQ7Jmx0OyBzb21ldGhpbmcsIGFuZCBzY2llbnRpZmljID09IDIgJmx0OyZsdDsgc29tZXRoaW5nKS48L3A+Cgo8cD5QcmVzdW1hYmx5LCB0aGUgaW50ZW50IGlzIGVpdGhlciAoZmxhZ3MgJmFtcDsgZmxvYXRmaWVsZCkgIT0gMCwgb3IKKGZsYWdzICZhbXA7IGZsb2F0ZmllbGQpID09IGZpeGVkOyB0aGUgZmlyc3QgZ2l2ZXMgc29tZXRoaW5nIG1vcmUgb3IKbGVzcyBsaWtlIHRoZSBlZmZlY3Qgb2YgcHJlY2lzaW9uIGluIGEgcHJpbnRmIGZsb2F0aW5nIHBvaW50CmNvbnZlcnNpb24uIE9ubHkgbW9yZSBvciBsZXNzLCBvZiBjb3Vyc2UuIEluIG9yZGVyIHRvIGltcGxlbWVudCBwcmludGYKZm9ybWF0dGluZyBjb3JyZWN0bHksIHlvdSBtdXN0IGtub3cgd2hldGhlciB0aGUgcHJlY2lzaW9uIHdhcwpleHBsaWNpdGx5IHNldCBvciBub3QuIFNheSBieSBpbml0aWFsaXppbmcgaXQgdG8gLTEsIGluc3RlYWQgb2YgNiwgYW5kCnN0YXRpbmcgdGhhdCBmb3IgZmxvYXRpbmcgcG9pbnQgY29udmVyc2lvbnMsIGlmIHByZWNpc2lvbiAmbHQ7IC0xLCA2CndpbGwgYmUgdXNlZCwgZm9yIGZpeGVkIHBvaW50LCBpZiBwcmVjaXNpb24gJmx0OyAtMSwgMSB3aWxsIGJlIHVzZWQsCmV0Yy4gUGx1cywgb2YgY291cnNlLCBpZiBwcmVjaXNpb24gPT0gMCBhbmQgZmxhZ3MgJmFtcDsgZmxvYXRmaWVsZCA9PQowLCAxIHNob3VsZCBiZSA9IHVzZWQuIEJ1dCBpdCBwcm9iYWJseSBpc24ndCBuZWNlc3NhcnkgdG8gZW11bGF0ZSBhbGwKb2YgdGhlIGFub21hbGllcyBvZiBwcmludGY6LSkuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlcGxhY2UgMjIuMi4yLjIuMiBbZmFjZXQubnVtLnB1dC52aXJ0dWFsc10sIHBhcmFncmFwaCAxMSwgd2l0aCB0aGUgZm9sbG93aW5nIApzZW50ZW5jZToKPC9wPgo8YmxvY2txdW90ZT48cD4KRm9yIGNvbnZlcnNpb24gZnJvbSBhIGZsb2F0aW5nLXBvaW50IHR5cGUsCjx0dD48aT5zdHI8L2k+LnByZWNpc2lvbigpPC90dD4gaXMgc3BlY2lmaWVkIGluIHRoZSBjb252ZXJzaW9uCnNwZWNpZmljYXRpb24uCjwvcD48L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBmbG9hdGZpZWxkIGRldGVybWluZXMgd2hldGhlciBudW1iZXJzIGFyZSBmb3JtYXR0ZWQgYXMgaWYKd2l0aCAlZiwgJWUsIG9yICVnLiAgSWYgdGhlIDx0dD5maXhlZDwvdHQ+IGJpdCBpcyBzZXQsIGl0J3MgJWYsCmlmIDx0dD5zY2llbnRpZmljPC90dD4gaXQncyAlZSwgYW5kIGlmIGJvdGggYml0cyBhcmUgc2V0LCBvciAKbmVpdGhlciwgaXQncyAlZy48L3A+CjxwPlR1cm5pbmcgdG8gdGhlIEMgc3RhbmRhcmQsIGEgcHJlY2lzaW9uIG9mIDAgaXMgbWVhbmluZ2Z1bApmb3IgJWYgYW5kICVlLiAgRm9yICVnLCBwcmVjaXNpb24gMCBpcyB0YWtlbiB0byBiZSB0aGUgc2FtZSBhcyAKcHJlY2lzaW9uIDEuPC9wPgo8cD5UaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBoYXMgdGhlIGVmZmVjdCB0aGF0IGlmIG5laXRoZXIKPHR0PmZpeGVkPC90dD4gbm9yIDx0dD5zY2llbnRpZmljPC90dD4gaXMgc2V0IHdlJ2xsIGJlCnNwZWNpZnlpbmcgYSBwcmVjaXNpb24gb2YgMCwgd2hpY2ggd2lsbCBiZSBpbnRlcm5hbGx5CnR1cm5lZCBpbnRvIDEuICBUaGVyZSdzIG5vIG5lZWQgdG8gY2FsbCBpdCBvdXQgYXMgYSBzcGVjaWFsCmNhc2UuPC9wPgo8cD5UaGUgb3V0cHV0IG9mIHRoZSBhYm92ZSBwcm9ncmFtIHdpbGwgYmUgIjFlKzAwIi48L3A+Cgo8cD48aT5bUG9zdC1DdXJh52FvOiBIb3dhcmQgcHJvdmlkZWQgaW1wcm92ZWQgd29yZGluZyBjb3ZlcmluZyB0aGUgY2FzZQp3aGVyZSBwcmVjaXNpb24gaXMgMCBhbmQgbW9kZSBpcyAlZy5dPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIzMiI+PC9hPjIzMi4gImRlcGVuZHMiIHBvb3JseSBkZWZpbmVkIGluIDE3LjQuMy4xPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE3LjQuMy4yIFtyZXNlcnZlZC5uYW1lc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gUGV0ZXIgRGltb3YgPGI+RGF0ZTo8L2I+IDIwMDAtMDQtMTg8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3Jlc2VydmVkLm5hbWVzIj5pc3N1ZXM8L2E+IGluIFtyZXNlcnZlZC5uYW1lc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPjE3LjQuMy4xLzEgdXNlcyB0aGUgdGVybSAiZGVwZW5kcyIgdG8gbGltaXQgdGhlIHNldCBvZiBhbGxvd2VkCnNwZWNpYWxpemF0aW9ucyBvZiBzdGFuZGFyZCB0ZW1wbGF0ZXMgdG8gdGhvc2UgdGhhdCAiZGVwZW5kIG9uIGEKdXNlci1kZWZpbmVkIG5hbWUgb2YgZXh0ZXJuYWwgbGlua2FnZS4iPC9wPgo8cD5UaGlzIHRlcm0sIGhvd2V2ZXIsIGlzIG5vdCBhZGVxdWF0ZWx5IGRlZmluZWQsIG1ha2luZyBpdCBwb3NzaWJsZSB0bwpjb25zdHJ1Y3QgYSBzcGVjaWFsaXphdGlvbiB0aGF0IGlzLCBJIGJlbGlldmUsIHRlY2huaWNhbGx5IGxlZ2FsIGFjY29yZGluZyB0bwoxNy40LjMuMS8xLCBidXQgdGhhdCBzcGVjaWFsaXplcyBhIHN0YW5kYXJkIHRlbXBsYXRlIGZvciBhIGJ1aWx0LWluIHR5cGUgc3VjaCBhcwonaW50Jy48L3A+CjxwPlRoZSBmb2xsb3dpbmcgY29kZSBkZW1vbnN0cmF0ZXMgdGhlIHByb2JsZW06PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPiNpbmNsdWRlICZsdDthbGdvcml0aG0mZ3Q7PC9wcmU+CiAgPHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBzdHJ1Y3QgWAp7CiB0eXBlZGVmIFQgdHlwZTsKfTs8L3ByZT4KICA8cHJlPm5hbWVzcGFjZSBzdGQKewogdGVtcGxhdGUmbHQ7Jmd0OyB2b2lkIHN3YXAoOjpYJmx0O2ludCZndDs6OnR5cGUmYW1wOyBpLCA6OlgmbHQ7aW50Jmd0Ozo6dHlwZSZhbXA7IGopOwp9PC9wcmU+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAidXNlci1kZWZpbmVkIG5hbWUiIHRvICJ1c2VyLWRlZmluZWQKdHlwZSIuPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIHRlcm1pbm9sb2d5IGlzIHVzZWQgaW4gc2VjdGlvbiAyLjUuMiBhbmQgNC4xLjEgb2YgPGk+VGhlIEMrKwpQcm9ncmFtbWluZyBMYW5ndWFnZTwvaT4uICBJdCBkaXNhbGxvd3MgdGhlIGV4YW1wbGUgaW4gdGhlIGlzc3VlLApzaW5jZSB0aGUgdW5kZXJseWluZyB0eXBlIGl0c2VsZiBpcyBub3QgdXNlci1kZWZpbmVkLiAgVGhlIG9ubHkKcG9zc2libGUgcHJvYmxlbSBJIGNhbiBzZWUgaXMgZm9yIG5vbi10eXBlIHRlbXBsYXRlcywgYnV0IHRoZXJlJ3Mgbm8KcG9zc2libGUgd2F5IGZvciBhIHVzZXIgdG8gY29tZSB1cCB3aXRoIGEgc3BlY2lhbGl6YXRpb24gZm9yIGJpdHNldCwKZm9yIGV4YW1wbGUsIHRoYXQgbWlnaHQgbm90IGhhdmUgYWxyZWFkeSBiZWVuIHNwZWNpYWxpemVkIGJ5IHRoZQppbXBsZW1lbnRvcj88L3A+Cgo8cD48aT5bVG9yb250bzogdGhpcyBtYXkgYmUgcmVsYXRlZCB0byBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTIwIj4xMjA8L2E+Ll08L2k+PC9wPgoKCjxwPjxpPltwb3N0LVRvcm9udG86IEp1ZHkgcHJvdmlkZWQgdGhlIGFib3ZlIHByb3Bvc2VkIHJlc29sdXRpb24gYW5kCnJhdGlvbmFsZS5dPC9pPjwvcD4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjMzIj48L2E+MjMzLiBJbnNlcnRpb24gaGludHMgaW4gYXNzb2NpYXRpdmUgY29udGFpbmVyczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4xLjQgW2Fzc29jaWF0aXZlLnJlcW10c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQW5kcmV3IEtvZW5pZyA8Yj5EYXRlOjwvYj4gMjAwMC0wNC0zMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYXNzb2NpYXRpdmUucmVxbXRzIj5pc3N1ZXM8L2E+IGluIFthc3NvY2lhdGl2ZS5yZXFtdHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RHVwbGljYXRlIG9mOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTkyIj4xOTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyNDYiPjI0NjwvYT48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CklmIDx0dD5tbTwvdHQ+IGlzIGEgbXVsdGltYXAgYW5kIDx0dD5wPC90dD4gaXMgYW4gaXRlcmF0b3IKaW50byB0aGUgbXVsdGltYXAsIHRoZW4gPHR0Pm1tLmluc2VydChwLCB4KTwvdHQ+IGluc2VydHMKPHR0Png8L3R0PiBpbnRvIDx0dD5tbTwvdHQ+IHdpdGggPHR0PnA8L3R0PiBhcyBhIGhpbnQgYXMKdG8gd2hlcmUgaXQgc2hvdWxkIGdvLiAgVGFibGUgNjkgY2xhaW1zIHRoYXQgdGhlIGV4ZWN1dGlvbiB0aW1lIGlzCmFtb3J0aXplZCBjb25zdGFudCBpZiB0aGUgaW5zZXJ0IHdpbmRzIHVwIHRha2luZyBwbGFjZSBhZGphY2VudCB0bwo8dHQ+cDwvdHQ+LCBidXQgZG9lcyBub3Qgc2F5IHdoZW4sIGlmIGV2ZXIsIHRoaXMgaXMgZ3VhcmFudGVlZCB0bwpoYXBwZW4uICBBbGwgaXQgc2F5cyBpdCB0aGF0IDx0dD5wPC90dD4gaXMgYSBoaW50IGFzIHRvIHdoZXJlIHRvCmluc2VydC4KPC9wPgo8cD4KVGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlcmUgaXMgYW55IGd1YXJhbnRlZSBhYm91dCB0aGUgcmVsYXRpb25zaGlwCmJldHdlZW4gPHR0PnA8L3R0PiBhbmQgdGhlIGluc2VydGlvbiBwb2ludCwgYW5kLCBpZiBzbywgd2hhdCBpdAppcy4KPC9wPgo8cD4KSSBiZWxpZXZlIHRoZSBwcmVzZW50IHN0YXRlIGlzIHRoYXQgdGhlcmUgaXMgbm8gZ3VhcmFudGVlOiBUaGUgdXNlcgpjYW4gc3VwcGx5IDx0dD5wPC90dD4sIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gaXMgYWxsb3dlZCB0bwpkaXNyZWdhcmQgaXQgZW50aXJlbHkuCjwvcD4KCjxwPjxiPkFkZGl0aW9uYWwgY29tbWVudHMgZnJvbSBOYXRoYW46PC9iPjxicj4KClRoZSB2b3RlIFtpbiBSZWRtb25kXSB3YXMgb24gd2hldGhlciB0byBlbGFib3JhdGVseSBzcGVjaWZ5IHRoZSB1c2Ugb2YKdGhlIGhpbnQsIG9yIHRvIHJlcXVpcmUgYmVoYXZpb3Igb25seSBpZiB0aGUgdmFsdWUgY291bGQgYmUgaW5zZXJ0ZWQKYWRqYWNlbnQgdG8gdGhlIGhpbnQuICBJIHdvdWxkIGxpa2UgdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZSBhIGNoYW5jZSB0bwp2b3RlIGZvciBhIGRldGVybWluaXN0aWMgdHJlYXRtZW50OiAiYmVmb3JlLCBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlCmFmdGVyLCBvdGhlcndpc2UgYW55d2hlcmUgYXBwcm9wcmlhdGUiLCBhcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUKcHJvcG9zZWQgImJlZm9yZSBvciBhZnRlciwgaWYgcG9zc2libGUsIG90aGVyd2lzZSBbLi4uXSIuCjwvcD4KCjxwPjxpPltUb3JvbnRvOiB0aGVyZSB3YXMgZ2VuZXJhbCBhZ3JlZW1lbnQgdGhhdCB0aGlzIGlzIGEgcmVhbCBkZWZlY3Q6CndoZW4gaW5zZXJ0aW5nIGFuIGVsZW1lbnQgeCBpbnRvIGEgbXVsdGlzZXQgdGhhdCBhbHJlYWR5IGNvbnRhaW5zCnNldmVyYWwgY29waWVzIG9mIHgsIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IHdoZXRoZXIgdGhlIGhpbnQgd2lsbCBiZQp1c2VkLiAgVGhlIHByb3Bvc2VkIHJlc29sdXRpb24gd2FzIHRoYXQgdGhlIG5ldyBlbGVtZW50IHNob3VsZCBhbHdheXMKYmUgaW5zZXJ0ZWQgYXMgY2xvc2UgdG8gdGhlIGhpbnQgYXMgcG9zc2libGUuICBTbywgZm9yIGV4YW1wbGUsIGlmCnRoZXJlIGlzIGEgc3Vic2VxdWVuY2Ugb2YgZXF1aXZhbGVudCB2YWx1ZXMsIHRoZW4gcHJvdmlkaW5nIGEuYmVnaW4oKQphcyB0aGUgaGludCBtZWFucyB0aGF0IHRoZSBuZXcgZWxlbWVudCBzaG91bGQgYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZQpzdWJzZXF1ZW5jZSBldmVuIGlmIGEuYmVnaW4oKSBpcyBmYXIgYXdheS4gIEpDIHZhbiBXaW5rZWwgc3VwcGxpZWQKcHJlY2lzZSB3b3JkaW5nIGZvciB0aGlzIHByb3Bvc2VkIHJlc29sdXRpb24sIGFuZCBhbHNvIGZvciBhbgphbHRlcm5hdGl2ZSByZXNvbHV0aW9uIGluIHdoaWNoIGhpbnRzIGFyZSBvbmx5IHVzZWQgd2hlbiB0aGV5IGFyZQphZGphY2VudCB0byB0aGUgaW5zZXJ0aW9uIHBvaW50Ll08L2k+PC9wPgoKCjxwPjxpPltDb3BlbmhhZ2VuOiB0aGUgTFdHIGFncmVlZCB0byB0aGUgb3JpZ2luYWwgcHJvcG9zZWQgcmVzb2x1dGlvbiwKaW4gd2hpY2ggYW4gaW5zZXJ0aW9uIGhpbnQgd291bGQgYmUgdXNlZCBldmVuIHdoZW4gaXQgaXMgZmFyIGZyb20gdGhlCmluc2VydGlvbiBwb2ludC4gIFRoaXMgd2FzIGNvbnRpbmdlbnQgb24gc2VlaW5nIGEgZXhhbXBsZQppbXBsZW1lbnRhdGlvbiBzaG93aW5nIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gaW1wbGVtZW50IHRoaXMKcmVxdWlyZW1lbnQgd2l0aG91dCBsb3NzIG9mIGVmZmljaWVuY3kuICBKb2huIFBvdHRlciBwcm92aWRlZCBzdWNoIGEKZXhhbXBsZSBpbXBsZW1lbnRhdGlvbi5dPC9pPjwvcD4KCgo8cD48aT5bUmVkbW9uZDogVGhlIExXRyB3YXMgcmVsdWN0YW50IHRvIGFkb3B0IHRoZSBwcm9wb3NhbCB0aGF0CmVtZXJnZWQgZnJvbSBDb3BlbmhhZ2VuOiBpdCBzZWVtZWQgZXhjZXNzaXZlbHkgY29tcGxpY2F0ZWQsIGFuZCB3ZW50CmJleW9uZCBmaXhpbmcgdGhlIGRlZmVjdCB0aGF0IHdlIGlkZW50aWZpZWQgaW4gVG9yb250by4gIFBKUCBwcm92aWRlZAp0aGUgbmV3IHdvcmRpbmcgZGVzY3JpYmVkIGluIHRoaXMgaXNzdWUuICBOYXRoYW4gYWdyZWVzIHRoYXQgd2UKc2hvdWxkbid0IGFkb3B0IHRoZSBtb3JlIGRldGFpbGVkIHNlbWFudGljcywgYW5kIG5vdGVzOiAid2Uga25vdyB0aGF0CnlvdSBjYW4gZG8gaXQgZWZmaWNpZW50bHkgZW5vdWdoIHdpdGggYSByZWQtYmxhY2sgdHJlZSwgYnV0IHRoZXJlIGFyZQpvdGhlciAocGVyaGFwcyBiZXR0ZXIpIGJhbGFuY2VkIHRyZWUgdGVjaG5pcXVlcyB0aGF0IG1pZ2h0IGRpZmZlcgplbm91Z2ggdG8gbWFrZSB0aGUgZGV0YWlsZWQgc2VtYW50aWNzIGhhcmQgdG8gc2F0aXNmeS4iXTwvaT48L3A+CgoKPHA+PGk+W0N1cmHnYW86IE5hdGhhbiBzaG91bGQgZ2l2ZSB1cyB0aGUgYWx0ZXJuYXRpdmUgd29yZGluZyBoZQpzdWdnZXN0cyBzbyB0aGUgTFdHIGNhbiBkZWNpZGUgYmV0d2VlbiB0aGUgdHdvIG9wdGlvbnMuXTwvaT48L3A+CgoKPHA+PGk+W0xpbGxlaGFtbWVyOiBUaGUgTFdHIHByZXZpb3VzbHkgcmVqZWN0ZWQgdGhlIG1vcmUgZGV0YWlsZWQKICBzZW1hbnRpY3MsIGJlY2F1c2UgaXQgc2VlbWVkIG1vcmUgbG9pa2UgYSBuZXcgZmVhdHVyZSB0aGFuIGxpa2UKICBkZWZlY3QgZml4aW5nLiAgV2UncmUgbm93IG1vcmUgc3ltcGF0aGV0aWMgdG8gaXQsIGJ1dCB3ZSAoZXNwZWNpYWxseQogIEJpbGwpIGFyZSBzdGlsbCB3b3JyaWVkIGFib3V0IHBlcmZvcm1hbmNlLiAgTjE3ODAgZGVzY3JpYmVzIGEgbmFpdmUKICBhbGdvcml0aG0sIGJ1dCBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIHRoZXJlIGlzIGEgbm9uLW5haXZlCiAgaW1wbGVtZW50YXRpb24uIElzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGlzIGFzIGVmZmljZW50bHkgYXMKICB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGluc2VydD9dPC9pPjwvcD4KCgo8cD48aT5bUG9zdCBMaWxsZWhhbW1lcjoKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTc4MC5odG1sIj5OMTc4MDwvYT4KdXBkYXRlZCBpbiBwb3N0IG1lZXRpbmcgbWFpbGluZyB3aXRoCmZlZWRiYWNrIGZyb20gTGlsbGVoYW1tZXIgd2l0aCBtb3JlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBwZXJmb3JtYW5jZS4KXTwvaT48L3A+CgoKPHA+PGk+WwpCYXRhdmlhOgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA1L24xNzgwLmh0bWwiPjE3ODA8L2E+CmFjY2VwdGVkIHdpdGggbWlub3Igd29yZGluZyBjaGFuZ2VzIGluIHRoZSBwcm9wb3NlZCB3b3JkaW5nIChyZWZsZWN0ZWQgaW4gdGhlCnByb3Bvc2VkIHJlc29sdXRpb24gYmVsb3cpLiAgQ29uY2VybnMgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBhbGdvcml0aG0Kd2VyZSBzYXRpc2ZhY3RvcmlseSBtZXQgYnkKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTc4MC5odG1sIj4xNzgwPC9hPi4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM3MSI+MzcxPC9hPiBhbHJlYWR5IGhhbmRsZXMgdGhlIHN0YWJpbGl0eSBvZiBlcXVhbCByYW5nZXMKYW5kIHNvIHRoYXQgcGFydCBvZiB0aGUgcmVzb2x1dGlvbiBmcm9tCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDUvbjE3ODAuaHRtbCI+MTc4MDwvYT4KaXMgbm8gbG9uZ2VyIG5lZWRlZCAob3IgcmVmbGVjdGVkIGluIHRoZSBwcm9wb3NlZCB3b3JkaW5nIGJlbG93KS4KXTwvaT48L3A+CgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD4KQ2hhbmdlIHRoZSBpbmRpY2F0ZWQgcm93cyBvZiB0aGUgIkFzc29jaWF0aXZlIGNvbnRhaW5lciByZXF1aXJlbWVudHMiIFRhYmxlIGluCjIzLjEuNCBbYXNzb2NpYXRpdmUucmVxbXRzXSB0bzoKPC9wPgoKPHA+PC9wPjxjZW50ZXI+Cjx0YWJsZSBib3JkZXI9IjEiPgo8Y2FwdGlvbj5Bc3NvY2lhdGl2ZSBjb250YWluZXIgcmVxdWlyZW1lbnRzPC9jYXB0aW9uPgo8dGJvZHk+PHRyPjx0aD5leHByZXNzaW9uPC90aD4gPHRoPnJldHVybiB0eXBlPC90aD4KPHRoPmFzc2VydGlvbi9ub3RlPGJyPnByZS9wb3N0LWNvbmRpdGlvbjwvdGg+Cjx0aD5jb21wbGV4aXR5PC90aD48L3RyPgo8dHI+PHRkPjx0dD5hX2VxLmluc2VydCh0KTwvdHQ+PC90ZD4KPHRkPjx0dD5pdGVyYXRvcjwvdHQ+PC90ZD4KPHRkPgppbnNlcnRzIDx0dD50PC90dD4gYW5kIHJldHVybnMgdGhlIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBuZXdseSBpbnNlcnRlZAplbGVtZW50LiA8aW5zPklmIGEgcmFuZ2UgY29udGFpbmluZyBlbGVtZW50cyBlcXVpdmFsZW50IHRvIDx0dD50PC90dD4gZXhpc3RzIGluCjx0dD5hX2VxPC90dD4sIDx0dD50PC90dD4gaXMgaW5zZXJ0ZWQgYXQgdGhlIGVuZCBvZiB0aGF0IHJhbmdlLjwvaW5zPgo8L3RkPgo8dGQ+CmxvZ2FyaXRobWljCjwvdGQ+PC90cj4KPHRyPjx0ZD48dHQ+YS5pbnNlcnQocCx0KTwvdHQ+PC90ZD4KPHRkPjx0dD5pdGVyYXRvcjwvdHQ+PC90ZD4KPHRkPgppbnNlcnRzIDx0dD50PC90dD4gaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgbm8gZWxlbWVudCB3aXRoIGtleSBlcXVpdmFsZW50IHRvIHRoZQprZXkgb2YgPHR0PnQ8L3R0PiBpbiBjb250YWluZXJzIHdpdGggdW5pcXVlIGtleXM7IGFsd2F5cyBpbnNlcnRzIDx0dD50PC90dD4gaW4gY29udGFpbmVycwp3aXRoIGVxdWl2YWxlbnQga2V5cy4gYWx3YXlzIHJldHVybnMgdGhlIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IHdpdGgga2V5CmVxdWl2YWxlbnQgdG8gdGhlIGtleSBvZiA8dHQ+dDwvdHQ+LiA8ZGVsPml0ZXJhdG9yIDx0dD5wPC90dD4gaXMgYSBoaW50IHBvaW50aW5nIHRvIHdoZXJlCnRoZSBpbnNlcnQgc2hvdWxkIHN0YXJ0IHRvIHNlYXJjaC48L2RlbD4gPGlucz48dHQ+dDwvdHQ+IGlzIGluc2VydGVkIGFzIGNsb3NlIGFzIHBvc3NpYmxlCnRvIHRoZSBwb3NpdGlvbiBqdXN0IHByaW9yIHRvIDx0dD5wPC90dD4uPC9pbnM+CjwvdGQ+Cjx0ZD4KbG9nYXJpdGhtaWMgaW4gZ2VuZXJhbCwgYnV0IGFtb3J0aXplZCBjb25zdGFudCBpZiA8dHQ+dDwvdHQ+IGlzIGluc2VydGVkIHJpZ2h0IDxkZWw+YWZ0ZXI8L2RlbD4KIDxpbnM+YmVmb3JlPC9pbnM+IDx0dD5wPC90dD4uCjwvdGQ+PC90cj4KPC90Ym9keT48L3RhYmxlPgo8L2NlbnRlcj4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjM0Ij48L2E+MjM0LiBUeXBvcyBpbiBhbGxvY2F0b3IgZGVmaW5pdGlvbjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMC43LjUuMSBbYWxsb2NhdG9yLm1lbWJlcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERpZXRtYXIgS/xobCA8Yj5EYXRlOjwvYj4gMjAwMC0wNC0yNDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxsb2NhdG9yLm1lbWJlcnMiPmlzc3VlczwvYT4gaW4gW2FsbG9jYXRvci5tZW1iZXJzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SW4gcGFyYWdyYXBocyAxMiBhbmQgMTMgdGhlIGVmZmVjdHMgb2YgPHR0PmNvbnN0cnVjdCgpPC90dD4gYW5kCjx0dD5kZXN0cnVjdCgpPC90dD4gYXJlIGRlc2NyaWJlZCBhcyByZXR1cm5zIGJ1dCB0aGUgZnVuY3Rpb25zIGFjdHVhbGx5CnJldHVybiA8dHQ+dm9pZDwvdHQ+LjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlN1YnN0aXR1dGUgIlJldHVybnMiIGJ5ICJFZmZlY3QiLjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIzNSI+PC9hPjIzNS4gTm8gc3BlY2lmaWNhdGlvbiBvZiBkZWZhdWx0IGN0b3IgZm9yIHJldmVyc2VfaXRlcmF0b3I8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjQuNC4xLjEgW3JldmVyc2UuaXRlcmF0b3JdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERpZXRtYXIgS/xobCA8Yj5EYXRlOjwvYj4gMjAwMC0wNC0yNDwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgZGVjbGFyYXRpb24gb2YgPHR0PnJldmVyc2VfaXRlcmF0b3I8L3R0PiBsaXN0cyBhIGRlZmF1bHQKY29uc3RydWN0b3IuICBIb3dldmVyLCBubyBzcGVjaWZpY2F0aW9uIGlzIGdpdmVuIHdoYXQgdGhpcyBjb25zdHJ1Y3RvcgpzaG91bGQgZG8uPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KICA8cD5JbiBzZWN0aW9uIDI0LjQuMS4zLjEgW3JldmVyc2UuaXRlci5jb25zXSBhZGQgdGhlIGZvbGxvd2luZwogIHBhcmFncmFwaDo8L3A+CiAgICAgIDxibG9ja3F1b3RlPgogICAgICA8cD48dHQ+cmV2ZXJzZV9pdGVyYXRvcigpPC90dD48L3A+CgogICAgICA8cD5EZWZhdWx0IGluaXRpYWxpemVzIDx0dD5jdXJyZW50PC90dD4uIEl0ZXJhdG9yIG9wZXJhdGlvbnMKICAgICAgYXBwbGllZCB0byB0aGUgcmVzdWx0aW5nIGl0ZXJhdG9yIGhhdmUgZGVmaW5lZCBiZWhhdmlvciBpZiBhbmQKICAgICAgb25seSBpZiB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIG9uIGEgZGVmYXVsdAogICAgICBjb25zdHJ1Y3RlZCBpdGVyYXRvciBvZiB0eXBlIDx0dD5JdGVyYXRvcjwvdHQ+LjwvcD4KICAgICAgPC9ibG9ja3F1b3RlPgogIDxwPjxpPltwcmUtQ29wZW5oYWdlbjogRGlldG1hciBwcm92aWRlIHdvcmRpbmcgZm9yIHByb3Bvc2VkCiAgcmVzb2x1dGlvbi5dPC9pPjwvcD4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjM3Ij48L2E+MjM3LiBVbmRlZmluZWQgZXhwcmVzc2lvbiBpbiBjb21wbGV4aXR5IHNwZWNpZmljYXRpb248L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMi4yLjEgW2RlcXVlLmNvbnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERpZXRtYXIgS/xobCA8Yj5EYXRlOjwvYj4gMjAwMC0wNC0yNDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjZGVxdWUuY29ucyI+aXNzdWVzPC9hPiBpbiBbZGVxdWUuY29uc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBjb21wbGV4aXR5IHNwZWNpZmljYXRpb24gaW4gcGFyYWdyYXBoIDYgc2F5cyB0aGF0IHRoZSBjb21wbGV4aXR5CmlzIGxpbmVhciBpbiA8dHQ+Zmlyc3QgLSBsYXN0PC90dD4uIEV2ZW4gaWYgPHR0Pm9wZXJhdG9yLSgpPC90dD4gaXMKZGVmaW5lZCBvbiBpdGVyYXRvcnMgdGhpcyB0ZXJtIGlzIGluIGdlbmVyYWwgdW5kZWZpbmVkIGJlY2F1c2UgaXQKd291bGQgaGF2ZSB0byBiZSA8dHQ+bGFzdCAtIGZpcnN0PC90dD4uPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KICA8cD5DaGFuZ2UgcGFyYWdyYXBoIDYgZnJvbTwvcD4KICAgICA8YmxvY2txdW90ZT48cD5MaW5lYXIgaW4gPGk+Zmlyc3QgLSBsYXN0PC9pPi48L3A+PC9ibG9ja3F1b3RlPgogIDxwPnRvIGJlY29tZTwvcD4KICAgICA8YmxvY2txdW90ZT48cD5MaW5lYXIgaW4gPGk+ZGlzdGFuY2UoZmlyc3QsIGxhc3QpPC9pPi48L3A+PC9ibG9ja3F1b3RlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjM4Ij48L2E+MjM4LiBDb250cmFkaWN0b3J5IHJlc3VsdHMgb2Ygc3RyaW5nYnVmIGluaXRpYWxpemF0aW9uLjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy43LjEuMSBbc3RyaW5nYnVmLmNvbnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERpZXRtYXIgS/xobCA8Yj5EYXRlOjwvYj4gMjAwMC0wNS0xMTwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5JbiAyNy43LjEuMSBwYXJhZ3JhcGggNCB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nIHRoZSBjb25zdHJ1Y3RvciBvZgonYmFzaWNfc3RyaW5nYnVmJyBhcmUgc2FpZCB0byBiZSA8dHQ+c3RyKCkgPT0gc3RyPC90dD4uIFRoaXMgaXMgZmluZQp0aGF0IGZhciBidXQgY29uc2lkZXIgdGhpcyBjb2RlOjwvcD4KCjxwcmU+ICBzdGQ6OmJhc2ljX3N0cmluZ2J1ZiZsdDtjaGFyJmd0OyBzYnVmKCJoZWxsbywgd29ybGQiLCBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSgwKSk7CiAgc3RkOjpjb3V0ICZsdDsmbHQ7ICInIiAmbHQ7Jmx0OyBzYnVmLnN0cigpICZsdDsmbHQ7ICInXG4iOwo8L3ByZT4KCjxwPlBhcmFncmFwaCAzIG9mIDI3LjcuMS4xIGJhc2ljYWxseSBzYXlzIHRoYXQgaW4gdGhpcyBjYXNlIG5laXRoZXIKdGhlIG91dHB1dCBzZXF1ZW5jZSBub3IgdGhlIGlucHV0IHNlcXVlbmNlIGlzIGluaXRpYWxpemVkIGFuZApwYXJhZ3JhcGggMiBvZiAyNy43LjEuMiBiYXNpY2FsbHkgc2F5cyB0aGF0IDx0dD5zdHIoKTwvdHQ+IGVpdGhlcgpyZXR1cm5zIHRoZSBpbnB1dCBvciB0aGUgb3V0cHV0IHNlcXVlbmNlLiBOb25lIG9mIHRoZW0gaXMgaW5pdGlhbGl6ZWQsCmllLiBib3RoIGFyZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSB0aGUgcmV0dXJuIGZyb20gPHR0PnN0cigpPC90dD4gaXMKZGVmaW5lZCB0byBiZSA8dHQ+YmFzaWNfc3RyaW5nJmx0O2NUJmd0OygpPC90dD4uPC9wPgoKPHA+SG93ZXZlciwgcHJvYmFibHkgb25seSB0ZXN0IGNhc2VzIGluIHNvbWUgdGVzdHN1aXRlcyB3aWxsIGRldGVjdCB0aGlzCiJwcm9ibGVtIi4uLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlbW92ZSAyNy43LjEuMSBwYXJhZ3JhcGggNC48L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPldlIGNvdWxkIGZpeCAyNy43LjEuMSBwYXJhZ3JhcGggNCwgYnV0IHRoZXJlIHdvdWxkIGJlIG5vIHBvaW50LiAgSWYKd2UgZml4ZWQgaXQsIGl0IHdvdWxkIHNheSBqdXN0IHRoZSBzYW1lIHRoaW5nIGFzIHRleHQgdGhhdCdzIGFscmVhZHkKaW4gdGhlIHN0YW5kYXJkLjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjIzOSI+PC9hPjIzOS4gQ29tcGxleGl0eSBvZiB1bmlxdWUoKSBhbmQvb3IgdW5pcXVlX2NvcHkgaW5jb3JyZWN0PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI1LjIuOSBbYWxnLnVuaXF1ZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQW5nZWxpa2EgTGFuZ2VyIDxiPkRhdGU6PC9iPiAyMDAwLTA1LTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNhbGcudW5pcXVlIj5pc3N1ZXM8L2E+IGluIFthbGcudW5pcXVlXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIGNvbXBsZXhpdHkgb2YgdW5pcXVlIGFuZCB1bmlxdWVfY29weSBhcmUgaW5jb25zaXN0ZW50IHdpdGggZWFjaApvdGhlciBhbmQgaW5jb25zaXN0ZW50IHdpdGggdGhlIGltcGxlbWVudGF0aW9ucy4mbmJzcDsgVGhlIHN0YW5kYXJkCnNwZWNpZmllczo8L3A+Cgo8cD5mb3IgdW5pcXVlKCk6PC9wPgoKPGJsb2NrcXVvdGU+PHA+LTMtIENvbXBsZXhpdHk6IElmIHRoZSByYW5nZSAobGFzdCAtIGZpcnN0KSBpcyBub3QgZW1wdHksIGV4YWN0bHkKKGxhc3QgLSBmaXJzdCkgLSAxIGFwcGxpY2F0aW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZyBwcmVkaWNhdGUsIG90aGVyd2lzZQpubyBhcHBsaWNhdGlvbnMgb2YgdGhlIHByZWRpY2F0ZS48L3A+PC9ibG9ja3F1b3RlPgoKPHA+Zm9yIHVuaXF1ZV9jb3B5KCk6PC9wPgoKPGJsb2NrcXVvdGU+PHA+LTctIENvbXBsZXhpdHk6IEV4YWN0bHkgbGFzdCAtIGZpcnN0IGFwcGxpY2F0aW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZwpwcmVkaWNhdGUuPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpUaGUgaW1wbGVtZW50YXRpb25zIGRvIGl0IHRoZSBvdGhlciB3YXkgcm91bmQ6IHVuaXF1ZSgpIGFwcGxpZXMgdGhlCnByZWRpY2F0ZSBsYXN0LWZpcnN0IHRpbWVzIGFuZCB1bmlxdWVfY29weSgpIGFwcGxpZXMgaXQgbGFzdC1maXJzdC0xCnRpbWVzLjwvcD4KCjxwPkFzIGJvdGggYWxnb3JpdGhtcyB1c2UgdGhlIHByZWRpY2F0ZSBmb3IgcGFpci13aXNlIGNvbXBhcmlzb24gb2YKc2VxdWVuY2UgZWxlbWVudHMgSSBkb24ndCBzZWUgYSBqdXN0aWZpY2F0aW9uIGZvciB1bmlxdWVfY29weSgpCmFwcGx5aW5nIHRoZSBwcmVkaWNhdGUgbGFzdC1maXJzdCB0aW1lcywgZXNwZWNpYWxseSBzaW5jZSBpdCBpcyBub3QKc3BlY2lmaWVkIHRvIHdoaWNoIHBhaXIgaW4gdGhlIHNlcXVlbmNlIHRoZSBwcmVkaWNhdGUgaXMgYXBwbGllZAp0d2ljZS48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgYm90aCBjb21wbGV4aXR5IHNlY3Rpb25zIGluIDI1LjIuOSBbYWxnLnVuaXF1ZV0gdG86PC9wPgoKPGJsb2NrcXVvdGU+PHA+Q29tcGxleGl0eTogRm9yIG5vbmVtcHR5IHJhbmdlcywgZXhhY3RseSBsYXN0IC0gZmlyc3QgLSAxCmFwcGxpY2F0aW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZyBwcmVkaWNhdGUuPC9wPjwvYmxvY2txdW90ZT4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjQwIj48L2E+MjQwLiBDb21wbGV4aXR5IG9mIGFkamFjZW50X2ZpbmQoKSBpcyBtZWFuaW5nbGVzczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNS4xLjggW2FsZy5hZGphY2VudC5maW5kXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBBbmdlbGlrYSBMYW5nZXIgPGI+RGF0ZTo8L2I+IDIwMDAtMDUtMTU8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIGNvbXBsZXhpdHkgc2VjdGlvbiBvZiBhZGphY2VudF9maW5kIGlzIGRlZmVjdGl2ZTo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgRm9yd2FyZEl0ZXJhdG9yJmd0OwpGb3J3YXJkSXRlcmF0b3IgYWRqYWNlbnRfZmluZChGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJdGVyYXRvciBsYXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpbmFyeVByZWRpY2F0ZSBwcmVkKTsKPC9wcmU+Cgo8cD4tMS0gUmV0dXJuczogVGhlIGZpcnN0IGl0ZXJhdG9yIGkgc3VjaCB0aGF0IGJvdGggaSBhbmQgaSArIDEgYXJlIGluCnRoZSByYW5nZSBbZmlyc3QsIGxhc3QpIGZvciB3aGljaCB0aGUgZm9sbG93aW5nIGNvcnJlc3BvbmRpbmcKY29uZGl0aW9ucyBob2xkOiAqaSA9PSAqKGkgKyAxKSwgcHJlZCgqaSwgKihpICsgMSkpICE9IGZhbHNlLiBSZXR1cm5zCmxhc3QgaWYgbm8gc3VjaCBpdGVyYXRvciBpcyBmb3VuZC48L3A+Cgo8cD4tMi0gQ29tcGxleGl0eTogRXhhY3RseSBmaW5kKGZpcnN0LCBsYXN0LCB2YWx1ZSkgLSBmaXJzdCBhcHBsaWNhdGlvbnMKb2YgdGhlIGNvcnJlc3BvbmRpbmcgcHJlZGljYXRlLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPkluIHRoZSBDb21wbGV4aXR5IHNlY3Rpb24sIGl0IGlzIG5vdCBkZWZpbmVkIHdoYXQgInZhbHVlIgppcyBzdXBwb3NlZCB0byBtZWFuLiBNeSBiZXN0IGd1ZXNzIGlzIHRoYXQgInZhbHVlIiBtZWFucyBhbgpvYmplY3QgZm9yIHdoaWNoIG9uZSBvZiB0aGUgY29uZGl0aW9ucyBwcmVkKCppLHZhbHVlKSBvcgpwcmVkKHZhbHVlLCppKSBpcyB0cnVlLCB3aGVyZSBpIGlzIHRoZSBpdGVyYXRvciBkZWZpbmVkIGluIHRoZSBSZXR1cm5zCnNlY3Rpb24uIEhvd2V2ZXIsIHRoZSB2YWx1ZSB0eXBlIG9mIHRoZSBpbnB1dCBzZXF1ZW5jZSBuZWVkIG5vdCBiZQplcXVhbGl0eS1jb21wYXJhYmxlIGFuZCBmb3IgdGhpcyByZWFzb24gdGhlIHRlcm0gZmluZChmaXJzdCwgbGFzdCwKdmFsdWUpIC0gZmlyc3QgaXMgbWVhbmluZ2xlc3MuPC9wPgoKPHA+QSB0ZXJtIHN1Y2ggYXMgZmluZF9pZihmaXJzdCwgbGFzdCwgYmluZDJuZChwcmVkLCppKSkgLSBmaXJzdCBvcgpmaW5kX2lmKGZpcnN0LCBsYXN0LCBiaW5kMXN0KHByZWQsKmkpKSAtIGZpcnN0IG1pZ2h0IGNvbWUgY2xvc2VyIHRvCnRoZSBpbnRlbmRlZCBzcGVjaWZpY2F0aW9uLiAgQmluZGVycyBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGZ1bmN0aW9uCm9iamVjdHMgdGhhdCBoYXZlIHRoZSBmdW5jdGlvbiBjYWxsIG9wZXJhdG9yIGRlY2xhcmVkIGNvbnN0LCB3aGljaCBpcwpub3QgcmVxdWlyZWQgb2YgcHJlZGljYXRlcyBiZWNhdXNlIHRoZXkgY2FuIGhhdmUgbm9uLWNvbnN0IGRhdGEKbWVtYmVycy4gRm9yIHRoaXMgcmVhc29uLCBhIHNwZWNpZmljYXRpb24gdXNpbmcgYSBiaW5kZXIgY291bGQgb25seSBiZQphbiAiYXMtaWYiIHNwZWNpZmljYXRpb24uPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSBjb21wbGV4aXR5IHNlY3Rpb24gaW4gMjUuMS44IFthbGcuYWRqYWNlbnQuZmluZF0gdG86PC9wPgo8YmxvY2txdW90ZT48cD4KRm9yIGEgbm9uZW1wdHkgcmFuZ2UsIGV4YWN0bHkgPHR0Pm1pbigoPGk+aTwvaT4gLSA8aT5maXJzdDwvaT4pICsgMSwKKDxpPmxhc3Q8L2k+IC0gPGk+Zmlyc3Q8L2k+KSAtIDEpPC90dD4gYXBwbGljYXRpb25zIG9mIHRoZQpjb3JyZXNwb25kaW5nIHByZWRpY2F0ZSwgd2hlcmUgPGk+aTwvaT4gaXMgPHR0PmFkamFjZW50X2ZpbmQ8L3R0PidzCnJldHVybiB2YWx1ZS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPjxpPltDb3BlbmhhZ2VuOiB0aGUgb3JpZ2luYWwgcmVzb2x1dGlvbiBzcGVjaWZpZWQgYW4gdXBwZXIKYm91bmQuICBUaGUgTFdHIHByZWZlcnJlZCBhbiBleGFjdCBjb3VudC5dPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI0MSI+PC9hPjI0MS4gRG9lcyB1bmlxdWVfY29weSgpIHJlcXVpcmUgQ29weUNvbnN0cnVjdGlibGUgYW5kIEFzc2lnbmFibGU/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI1LjIuOSBbYWxnLnVuaXF1ZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQW5nZWxpa2EgTGFuZ2VyIDxiPkRhdGU6PC9iPiAyMDAwLTA1LTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNhbGcudW5pcXVlIj5pc3N1ZXM8L2E+IGluIFthbGcudW5pcXVlXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KCjxwPlNvbWUgcG9wdWxhciBpbXBsZW1lbnRhdGlvbnMgb2YgdW5pcXVlX2NvcHkoKSBjcmVhdGUgdGVtcG9yYXJ5CmNvcGllcyBvZiB2YWx1ZXMgaW4gdGhlIGlucHV0IHNlcXVlbmNlLCBhdCBsZWFzdCBpZiB0aGUgaW5wdXQgaXRlcmF0b3IKaXMgYSBwb2ludGVyLiAgU3VjaCBhbiBpbXBsZW1lbnRhdGlvbiBpcyBidWlsdCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0CnRoZSB2YWx1ZSB0eXBlIGlzIENvcHlDb25zdHJ1Y3RpYmxlIGFuZCBBc3NpZ25hYmxlLjwvcD4KCjxwPkl0IGlzIGNvbW1vbiBwcmFjdGljZSBpbiB0aGUgc3RhbmRhcmQgdGhhdCBhbGdvcml0aG1zIGV4cGxpY2l0bHkKc3BlY2lmeSBhbnkgYWRkaXRpb25hbCByZXF1aXJlbWVudHMgdGhhdCB0aGV5IGltcG9zZSBvbiBhbnkgb2YgdGhlCnR5cGVzIHVzZWQgYnkgdGhlIGFsZ29yaXRobS4gQW4gZXhhbXBsZSBvZiBhbiBhbGdvcml0aG0gdGhhdCBjcmVhdGVzCnRlbXBvcmFyeSBjb3BpZXMgYW5kIGNvcnJlY3RseSBzcGVjaWZpZXMgdGhlIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzCmlzIGFjY3VtdWxhdGUoKSwgMjYuNC4xIFtyYW5kLnJlcV0uPC9wPgoKPHA+U2luY2UgdGhlIHNwZWNpZmljYXRpb25zIG9mIHVuaXF1ZSgpIGFuZCB1bmlxdWVfY29weSgpIGRvIG5vdApyZXF1aXJlIENvcHlDb25zdHJ1Y3RpYmxlIGFuZCBBc3NpZ25hYmxlIG9mIHRoZSBJbnB1dEl0ZXJhdG9yJ3MgdmFsdWUKdHlwZSB0aGUgYWJvdmUgbWVudGlvbmVkIGltcGxlbWVudGF0aW9ucyBhcmUgbm90IHN0YW5kYXJkLWNvbXBsaWFudC4gSQpjYW5ub3QganVkZ2Ugd2hldGhlciB0aGlzIGlzIGEgZGVmZWN0IGluIHRoZSBzdGFuZGFyZCBvciBhIGRlZmVjdCBpbgp0aGUgaW1wbGVtZW50YXRpb25zLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI1LjIuOCBjaGFuZ2U6PC9wPgoKPGJsb2NrcXVvdGU+PHA+Ci00LSBSZXF1aXJlczogVGhlIHJhbmdlcyBbZmlyc3QsIGxhc3QpIGFuZCBbcmVzdWx0LCByZXN1bHQrKGxhc3QtZmlyc3QpKQpzaGFsbCBub3Qgb3ZlcmxhcC4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPi00LSBSZXF1aXJlczogVGhlIHJhbmdlcyBbZmlyc3QsIGxhc3QpIGFuZCBbcmVzdWx0LAogIHJlc3VsdCsobGFzdC1maXJzdCkpIHNoYWxsIG5vdCBvdmVybGFwLiBUaGUgZXhwcmVzc2lvbiAqcmVzdWx0ID0KICAqZmlyc3QgbXVzdCBiZSB2YWxpZC4gSWYgbmVpdGhlciBJbnB1dEl0ZXJhdG9yIG5vciBPdXRwdXRJdGVyYXRvcgogIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgb2YgZm9yd2FyZCBpdGVyYXRvciB0aGVuIHRoZSB2YWx1ZSB0eXBlIG9mCiAgSW5wdXRJdGVyYXRvciBtdXN0IGJlIGNvcHkgY29uc3RydWN0aWJsZS4gT3RoZXJ3aXNlIGNvcHkKICBjb25zdHJ1Y3RpYmxlIGlzIG5vdCByZXF1aXJlZC4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bUmVkbW9uZDogdGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gZGlkbid0IGltcG9zZSBhbgpleHBsaWNpdCByZXF1aXJlbWVudCB0aGF0IHRoZSBpdGVyYXRvcidzIHZhbHVlIHR5cGUgbXVzdCBiZSBjb3B5CmNvbnN0cnVjdGlibGUsIG9uIHRoZSBncm91bmRzIHRoYXQgYW4gaW5wdXQgaXRlcmF0b3IncyB2YWx1ZSB0eXBlIG11c3QKYWx3YXlzIGJlIGNvcHkgY29uc3RydWN0aWJsZS4gIE5vdCBldmVyeW9uZSBpbiB0aGUgTFdHIHRob3VnaHQgdGhhdAp0aGlzIHJlcXVpcmVtZW50IHdhcyBjbGVhciBmcm9tIHRhYmxlIDcyLiAgSXQgaGFzIGJlZW4gc3VnZ2VzdGVkIHRoYXQKaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gaW1wbGVtZW50IDx0dD51bmlxdWVfY29weTwvdHQ+IHdpdGhvdXQKcmVxdWlyaW5nIGFzc2lnbmFiaWxpdHksIGFsdGhvdWdoIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIGRvIGltcG9zZQp0aGF0IHJlcXVpcmVtZW50LiAgSG93YXJkIHByb3ZpZGVkIG5ldyB3b3JkaW5nLl08L2k+PC9wPgoKCjxwPjxpPlsKQ3VyYedhbzogVGhlIExXRyBjaGFuZ2VkIHRoZSBQUiBlZGl0b3JpYWxseSB0byBzcGVjaWZ5CiJuZWl0aGVyLi4ubm9yLi4ubWVldC4uLiIgYXMgY2xlYXJlciB0aGFuCiJib3RoLi4uYW5kLi4uZG8gbm90IG1lZXQuLi4iLiBDaGFuZ2UgYmVsaWV2ZWQgdG8gYmUgc28KbWlub3IgYXMgbm90IHRvIHJlcXVpcmUgcmUtcmV2aWV3LgpdPC9pPjwvcD4KCgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyNDIiPjwvYT4yNDIuIFNpZGUgZWZmZWN0cyBvZiBmdW5jdGlvbiBvYmplY3RzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI1LjIuNCBbYWxnLnRyYW5zZm9ybV0sIDI2LjQgW3JhbmRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEFuZ2VsaWthIExhbmdlciA8Yj5EYXRlOjwvYj4gMjAwMC0wNS0xNTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxnLnRyYW5zZm9ybSI+aXNzdWVzPC9hPiBpbiBbYWxnLnRyYW5zZm9ybV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBhbGdvcml0aG1zIHRyYW5zZm9ybSgpLCBhY2N1bXVsYXRlKCksIGlubmVyX3Byb2R1Y3QoKSwKcGFydGlhbF9zdW0oKSwgYW5kIGFkamFjZW50X2RpZmZlcmVuY2UoKSByZXF1aXJlIHRoYXQgdGhlIGZ1bmN0aW9uCm9iamVjdCBzdXBwbGllZCB0byB0aGVtIHNoYWxsIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdHMuPC9wPgoKPHA+VGhlIHN0YW5kYXJkIGRlZmluZXMgYSBzaWRlIGVmZmVjdCBpbiAxLjkgW2ludHJvLmV4ZWN1dGlvbl0gYXM6PC9wPgo8YmxvY2txdW90ZT48cD4tNy0gQWNjZXNzaW5nIGFuIG9iamVjdCBkZXNpZ25hdGVkIGJ5IGEgdm9sYXRpbGUgbHZhbHVlIChiYXNpYy5sdmFsKSwKbW9kaWZ5aW5nIGFuIG9iamVjdCwgY2FsbGluZyBhIGxpYnJhcnkgSS9PIGZ1bmN0aW9uLCBvciBjYWxsaW5nIGEgZnVuY3Rpb24KdGhhdCBkb2VzIGFueSBvZiB0aG9zZSBvcGVyYXRpb25zIGFyZSBhbGwgc2lkZSBlZmZlY3RzLCB3aGljaCBhcmUgY2hhbmdlcwppbiB0aGUgc3RhdGUgb2YgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC48L3A+PC9ibG9ja3F1b3RlPgoKPHA+QXMgYSBjb25zZXF1ZW5jZSwgdGhlIGZ1bmN0aW9uIGNhbGwgb3BlcmF0b3Igb2YgYSBmdW5jdGlvbiBvYmplY3Qgc3VwcGxpZWQKdG8gYW55IG9mIHRoZSBhbGdvcml0aG1zIGxpc3RlZCBhYm92ZSBjYW5ub3QgbW9kaWZ5IGRhdGEgbWVtYmVycywgY2Fubm90Cmludm9rZSBhbnkgZnVuY3Rpb24gdGhhdCBoYXMgYSBzaWRlIGVmZmVjdCwgYW5kIGNhbm5vdCBldmVuIGNyZWF0ZSBhbmQKbW9kaWZ5IHRlbXBvcmFyeSBvYmplY3RzLiZuYnNwOyBJdCBpcyBkaWZmaWN1bHQgdG8gaW1hZ2luZSBhIGZ1bmN0aW9uIG9iamVjdAp0aGF0IGlzIHN0aWxsIHVzZWZ1bCB1bmRlciB0aGVzZSBzZXZlcmUgbGltaXRhdGlvbnMuIEZvciBpbnN0YW5jZSwgYW55Cm5vbi10cml2aWFsIHRyYW5zZm9ybWF0b3Igc3VwcGxpZWQgdG8gdHJhbnNmb3JtKCkgbWlnaHQgaW52b2x2ZSBjcmVhdGlvbgphbmQgbW9kaWZpY2F0aW9uIG9mIHRlbXBvcmFyaWVzLCB3aGljaCBpcyBwcm9oaWJpdGVkIGFjY29yZGluZyB0byB0aGUgY3VycmVudAp3b3JkaW5nIG9mIHRoZSBzdGFuZGFyZC48L3A+Cgo8cD5PbiB0aGUgb3RoZXIgaGFuZCwgcG9wdWxhciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UgYWxnb3JpdGhtcyBleGhpYml0CnVuaWZvcm0gYW5kIHByZWRpY3RhYmxlIGJlaGF2aW9yIHdoZW4gaW52b2tlZCB3aXRoIGEgc2lkZS1lZmZlY3QtcHJvZHVjaW5nCmZ1bmN0aW9uIG9iamVjdHMuIEl0IGxvb2tzIGxpa2UgdGhlIHN0cm9uZyByZXF1aXJlbWVudCBpcyBub3QgbmVlZGVkIGZvcgplZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgYWxnb3JpdGhtcy48L3A+Cgo8cD5UaGUgcmVxdWlyZW1lbnQgb2YmbmJzcDsgc2lkZS1lZmZlY3QtZnJlZSBmdW5jdGlvbiBvYmplY3RzIGNvdWxkIGJlCnJlcGxhY2VkIGJ5IGEgbW9yZSByZWxheGVkIGJhc2ljIHJlcXVpcmVtZW50ICh3aGljaCB3b3VsZCBob2xkIGZvciBhbGwKZnVuY3Rpb24gb2JqZWN0cyBzdXBwbGllZCB0byBhbnkgYWxnb3JpdGhtIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KTo8L3A+CjxibG9ja3F1b3RlPjxwPkEgZnVuY3Rpb24gb2JqZWN0cyBzdXBwbGllZCB0byBhbiBhbGdvcml0aG0gc2hhbGwgbm90IGludmFsaWRhdGUKYW55IGl0ZXJhdG9yIG9yIHNlcXVlbmNlIHRoYXQgaXMgdXNlZCBieSB0aGUgYWxnb3JpdGhtLiBJbnZhbGlkYXRpb24gb2YKdGhlIHNlcXVlbmNlIGluY2x1ZGVzIGRlc3RydWN0aW9uIG9mIHRoZSBzb3J0aW5nIG9yZGVyIGlmIHRoZSBhbGdvcml0aG0KcmVsaWVzIG9uIHRoZSBzb3J0aW5nIG9yZGVyIChzZWUgc2VjdGlvbiAyNS4zIC0gU29ydGluZyBhbmQgcmVsYXRlZCBvcGVyYXRpb25zCltsaWIuYWxnLnNvcnRpbmddKS48L3A+PC9ibG9ja3F1b3RlPgoKPHA+SSBjYW4ndCBqdWRnZSB3aGV0aGVyIGl0IGlzIGludGVuZGVkIHRoYXQgdGhlIGZ1bmN0aW9uIG9iamVjdHMgc3VwcGxpZWQKdG8gdHJhbnNmb3JtKCksIGFjY3VtdWxhdGUoKSwgaW5uZXJfcHJvZHVjdCgpLCBwYXJ0aWFsX3N1bSgpLCBvciBhZGphY2VudF9kaWZmZXJlbmNlKCkKc2hhbGwgbm90IG1vZGlmeSBzZXF1ZW5jZSBlbGVtZW50cyB0aHJvdWdoIGRlcmVmZXJlbmNlZCBpdGVyYXRvcnMuPC9wPgoKPHA+SXQgaXMgZGViYXRhYmxlIHdoZXRoZXIgdGhpcyBpc3N1ZSBpcyBhIGRlZmVjdCBvciBhIGNoYW5nZSByZXF1ZXN0LgpTaW5jZSB0aGUgY29uc2VxdWVuY2VzIGZvciB1c2VyLXN1cHBsaWVkIGZ1bmN0aW9uIG9iamVjdHMgYXJlIGRyYXN0aWMgYW5kCmxpbWl0IHRoZSB1c2VmdWxuZXNzIG9mIHRoZSBhbGdvcml0aG1zIHNpZ25pZmljYW50bHkgSSB3b3VsZCBjb25zaWRlciBpdAphIGRlZmVjdC48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+PGk+VGhpbmdzIHRvIG5vdGljZSBhYm91dCB0aGVzZSBjaGFuZ2VzOjwvaT48L3A+Cgo8b2w+CjxsaT4gPGk+VGhlIGZ1bGx5LWNsb3NlZCAoIltdIiBhcyBvcHBvc2VkIHRvIGhhbGYtY2xvc2VkICJbKSIgcmFuZ2VzCiAgICAgYXJlIGludGVudGlvbmFsLiB3ZSB3YW50IHRvIHByZXZlbnQgc2lkZS1lZmZlY3RzIGZyb20KICAgICBpbnZhbGlkYXRpbmcgdGhlIGVuZCBpdGVyYXRvcnMuPC9pPjwvbGk+Cgo8bGk+IDxpPlRoYXQgaGFzIHRoZSB1bmludGVudGlvbmFsIHNpZGUtZWZmZWN0IG9mIHByb2hpYml0aW5nCiAgICAgbW9kaWZpY2F0aW9uIG9mIHRoZSBlbmQgZWxlbWVudCBhcyBhIHNpZGUtZWZmZWN0LiBUaGlzIGNvdWxkCiAgICAgY29uY2VpdmFibHkgYmUgc2lnbmlmaWNhbnQgaW4gc29tZSBjYXNlcy48L2k+PC9saT4KCjxsaT4gPGk+VGhlIHdvcmRpbmcgYWxzbyBwcmV2ZW50cyBzaWRlLWVmZmVjdHMgZnJvbSBtb2RpZnlpbmcgZWxlbWVudHMKICAgICBvZiB0aGUgb3V0cHV0IHNlcXVlbmNlLiBJIGNhbid0IGltYWdpbmUgd2h5IGFueW9uZSB3b3VsZCB3YW50CiAgICAgdG8gZG8gdGhpcywgYnV0IGl0IGlzIGFyZ3VhYmx5IGEgcmVzdHJpY3Rpb24gdGhhdCBpbXBsZW1lbnRvcnMKICAgICBkb24ndCBuZWVkIHRvIHBsYWNlIG9uIHVzZXJzLjwvaT48L2xpPgoKPGxpPiA8aT5MaWZ0aW5nIHRoZSByZXN0cmljdGlvbnMgaW1wb3NlZCBpbiAjMiBhbmQgIzMgYWJvdmUgaXMgcG9zc2libGUKICAgICBhbmQgc2ltcGxlLCBidXQgd291bGQgcmVxdWlyZSBtb3JlIHZlcmJpYWdlLjwvaT48L2xpPgo8L29sPgoKPHA+Q2hhbmdlIDI1LjIuMy8yIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgIC0yLSBSZXF1aXJlczogb3AgYW5kIGJpbmFyeV9vcCBzaGFsbCBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3RzLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgLTItIFJlcXVpcmVzOiBpbiB0aGUgcmFuZ2VzIFtmaXJzdDEsIGxhc3QxXSwgW2ZpcnN0MiwgZmlyc3QyICsKICAobGFzdDEgLSBmaXJzdDEpXSBhbmQgW3Jlc3VsdCwgcmVzdWx0ICsgKGxhc3QxLSBmaXJzdDEpXSwgb3AgYW5kCiAgYmluYXJ5X29wIHNoYWxsIG5laXRoZXIgbW9kaWZ5IGVsZW1lbnRzIG5vciBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBvcgogIHN1YnJhbmdlcy4KICBbRm9vdG5vdGU6IFRoZSB1c2Ugb2YgZnVsbHkgY2xvc2VkIHJhbmdlcyBpcyBpbnRlbnRpb25hbCAtLWVuZCBmb290bm90ZV0KPC9wPjwvYmxvY2txdW90ZT4KCgo8cD5DaGFuZ2UgMjUuMi4zLzIgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAgLTItIFJlcXVpcmVzOiBvcCBhbmQgYmluYXJ5X29wIHNoYWxsIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdHMuIAo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgLTItIFJlcXVpcmVzOiBvcCBhbmQgYmluYXJ5X29wIHNoYWxsIG5vdCBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBvcgogICBzdWJyYW5nZXMsIG9yIG1vZGlmeSBlbGVtZW50cyBpbiB0aGUgcmFuZ2VzIFtmaXJzdDEsIGxhc3QxXSwKICAgW2ZpcnN0MiwgZmlyc3QyICsgKGxhc3QxIC0gZmlyc3QxKV0sIGFuZCBbcmVzdWx0LCByZXN1bHQgKyAobGFzdDEKICAgLSBmaXJzdDEpXS4KICBbRm9vdG5vdGU6IFRoZSB1c2Ugb2YgZnVsbHkgY2xvc2VkIHJhbmdlcyBpcyBpbnRlbnRpb25hbCAtLWVuZCBmb290bm90ZV0KPC9wPjwvYmxvY2txdW90ZT4KCgo8cD5DaGFuZ2UgMjYuNC4xLzIgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAtMi0gUmVxdWlyZXM6IFQgbXVzdCBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgQ29weUNvbnN0cnVjdGlibGUKICAgKGxpYi5jb3B5Y29uc3RydWN0aWJsZSkgYW5kIEFzc2lnbmFibGUgKGxpYi5jb250YWluZXIucmVxdWlyZW1lbnRzKQogICB0eXBlcy4gYmluYXJ5X29wIHNoYWxsIG5vdCBjYXVzZSBzaWRlIGVmZmVjdHMuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAtMi0gUmVxdWlyZXM6IFQgbXVzdCBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgQ29weUNvbnN0cnVjdGlibGUKICAgKGxpYi5jb3B5Y29uc3RydWN0aWJsZSkgYW5kIEFzc2lnbmFibGUKICAgKGxpYi5jb250YWluZXIucmVxdWlyZW1lbnRzKSB0eXBlcy4gSW4gdGhlIHJhbmdlIFtmaXJzdCwgbGFzdF0sCiAgIGJpbmFyeV9vcCBzaGFsbCBuZWl0aGVyIG1vZGlmeSBlbGVtZW50cyBub3IgaW52YWxpZGF0ZSBpdGVyYXRvcnMKICAgb3Igc3VicmFuZ2VzLgogIFtGb290bm90ZTogVGhlIHVzZSBvZiBhIGZ1bGx5IGNsb3NlZCByYW5nZSBpcyBpbnRlbnRpb25hbCAtLWVuZCBmb290bm90ZV0KPC9wPjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNi40LjIvMiBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPjxwPgogIC0yLSBSZXF1aXJlczogVCBtdXN0IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiBDb3B5Q29uc3RydWN0aWJsZQogICAobGliLmNvcHljb25zdHJ1Y3RpYmxlKSBhbmQgQXNzaWduYWJsZSAobGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMpCiAgIHR5cGVzLiBiaW5hcnlfb3AxIGFuZCBiaW5hcnlfb3AyIHNoYWxsIG5vdCBjYXVzZSBzaWRlIGVmZmVjdHMuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAtMi0gUmVxdWlyZXM6IFQgbXVzdCBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgQ29weUNvbnN0cnVjdGlibGUKICAgKGxpYi5jb3B5Y29uc3RydWN0aWJsZSkgYW5kIEFzc2lnbmFibGUgKGxpYi5jb250YWluZXIucmVxdWlyZW1lbnRzKQogICB0eXBlcy4gSW4gdGhlIHJhbmdlcyBbZmlyc3QsIGxhc3RdIGFuZCBbZmlyc3QyLCBmaXJzdDIgKyAobGFzdCAtCiAgIGZpcnN0KV0sIGJpbmFyeV9vcDEgYW5kIGJpbmFyeV9vcDIgc2hhbGwgbmVpdGhlciBtb2RpZnkgZWxlbWVudHMKICAgbm9yIGludmFsaWRhdGUgaXRlcmF0b3JzIG9yIHN1YnJhbmdlcy4KICBbRm9vdG5vdGU6IFRoZSB1c2Ugb2YgZnVsbHkgY2xvc2VkIHJhbmdlcyBpcyBpbnRlbnRpb25hbCAtLWVuZCBmb290bm90ZV0KPC9wPjwvYmxvY2txdW90ZT4KCgo8cD5DaGFuZ2UgMjYuNC4zLzQgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAtNC0gUmVxdWlyZXM6IGJpbmFyeV9vcCBpcyBleHBlY3RlZCBub3QgdG8gaGF2ZSBhbnkgc2lkZSBlZmZlY3RzLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgLTQtIFJlcXVpcmVzOiBJbiB0aGUgcmFuZ2VzIFtmaXJzdCwgbGFzdF0gYW5kIFtyZXN1bHQsIHJlc3VsdCArCiAgIChsYXN0IC0gZmlyc3QpXSwgYmluYXJ5X29wIHNoYWxsIG5laXRoZXIgbW9kaWZ5IGVsZW1lbnRzIG5vcgogICBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBvciBzdWJyYW5nZXMuCiAgW0Zvb3Rub3RlOiBUaGUgdXNlIG9mIGZ1bGx5IGNsb3NlZCByYW5nZXMgaXMgaW50ZW50aW9uYWwgLS1lbmQgZm9vdG5vdGVdCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD5DaGFuZ2UgMjYuNC40LzIgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAtMi0gUmVxdWlyZXM6IGJpbmFyeV9vcCBzaGFsbCBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3RzLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgLTItIFJlcXVpcmVzOiBJbiB0aGUgcmFuZ2VzIFtmaXJzdCwgbGFzdF0gYW5kIFtyZXN1bHQsIHJlc3VsdCArCiAgIChsYXN0IC0gZmlyc3QpXSwgYmluYXJ5X29wIHNoYWxsIG5laXRoZXIgbW9kaWZ5IGVsZW1lbnRzIG5vcgogICBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBvciBzdWJyYW5nZXMuCiAgW0Zvb3Rub3RlOiBUaGUgdXNlIG9mIGZ1bGx5IGNsb3NlZCByYW5nZXMgaXMgaW50ZW50aW9uYWwgLS1lbmQgZm9vdG5vdGVdCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD48aT5bVG9yb250bzogRGF2ZSBBYnJhaGFtcyBzdXBwbGllZCB3b3JkaW5nLl08L2k+PC9wPgoKCjxwPjxpPltDb3BlbmhhZ2VuOiBQcm9wb3NlZCByZXNvbHV0aW9uIHdhcyBtb2RpZmllZCBzbGlnaHRseS4gTWF0dAphZGRlZCBmb290bm90ZXMgcG9pbnRpbmcgb3V0IHRoYXQgdGhlIHVzZSBvZiBjbG9zZWQgcmFuZ2VzIHdhcwppbnRlbnRpb25hbC5dPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI0MyI+PC9hPjI0My4gPHR0PmdldDwvdHQ+IGFuZCA8dHQ+Z2V0bGluZTwvdHQ+IHdoZW4gc2VudHJ5IHJlcG9ydHMgZmFpbHVyZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjEuMyBbaXN0cmVhbS51bmZvcm1hdHRlZF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAwLTA1LTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpc3RyZWFtLnVuZm9ybWF0dGVkIj5pc3N1ZXM8L2E+IGluIFtpc3RyZWFtLnVuZm9ybWF0dGVkXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+YmFzaWNfaXN0cmVhbSZsdDsmZ3Q7OjpnZXQoKSwgYW5kIGJhc2ljX2lzdHJlYW0mbHQ7Jmd0Ozo6Z2V0bGluZSgpLAphcmUgdW5jbGVhciB3aXRoIHJlc3BlY3QgdG8gdGhlIGJlaGF2aW9yIGFuZCBzaWRlLWVmZmVjdHMgb2YgdGhlIG5hbWVkCmZ1bmN0aW9ucyBpbiBjYXNlIG9mIGFuIGVycm9yLjwvcD4KCjxwPjI3LjYuMS4zLCBwMSBzdGF0ZXMgdGhhdCAiLi4uIElmIHRoZSBzZW50cnkgb2JqZWN0IHJldHVybnMKdHJ1ZSwgd2hlbiBjb252ZXJ0ZWQgdG8gYSB2YWx1ZSBvZiB0eXBlIGJvb2wsIHRoZSBmdW5jdGlvbiBlbmRlYXZvcnMKdG8gb2J0YWluIHRoZSByZXF1ZXN0ZWQgaW5wdXQuLi4iIEl0IGlzIG5vdCBjbGVhciBmcm9tIHRoaXMgKG9yCnRoZSByZXN0IG9mIHRoZSBwYXJhZ3JhcGgpIHdoYXQgcHJlY2lzZWx5IHRoZSBiZWhhdmlvciBzaG91bGQgYmUgd2hlbgp0aGUgc2VudHJ5IGN0b3IgZXhpdHMgYnkgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIG9yIHdoZW4gdGhlIHNlbnRyeQpvYmplY3QgcmV0dXJucyBmYWxzZS4gIEluIHBhcnRpY3VsYXIsIHdoYXQgaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCmV4dHJhY3RlZCB0aGF0IGdjb3VudCgpIHJldHVybnMgc3VwcG9zZWQgdG8gYmU/PC9wPgoKPHA+MjcuNi4xLjMgcDggYW5kIHAxOSBzYXkgYWJvdXQgdGhlIGVmZmVjdHMgb2YgZ2V0KCkgYW5kIGdldGxpbmUoKToKIi4uLiAgSW4gYW55IGNhc2UsIGl0IHRoZW4gc3RvcmVzIGEgbnVsbCBjaGFyYWN0ZXIgKHVzaW5nCmNoYXJUKCkpIGludG8gdGhlIG5leHQgc3VjY2Vzc2l2ZSBsb2NhdGlvbiBvZiB0aGUgYXJyYXkuIiBJcyBub3QKY2xlYXIgd2hldGhlciB0aGlzIHNlbnRlbmNlIGFwcGxpZXMgaWYgZWl0aGVyIG9mIHRoZSBjb25kaXRpb25zIGFib3ZlCmhvbGRzIChpLmUuLCB3aGVuIHNlbnRyeSBmYWlscykuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRvIDI3LjYuMS4zLCBwMSBhZnRlciB0aGUgc2VudGVuY2U8L3A+Cgo8YmxvY2txdW90ZT48cD4KIi4uLiBJZiB0aGUgc2VudHJ5IG9iamVjdCByZXR1cm5zIHRydWUsIHdoZW4gY29udmVydGVkIHRvIGEgdmFsdWUgb2YKdHlwZSBib29sLCB0aGUgZnVuY3Rpb24gZW5kZWF2b3JzIHRvIG9idGFpbiB0aGUgcmVxdWVzdGVkIGlucHV0LiIKPC9wPjwvYmxvY2txdW90ZT4KCjxwPnRoZSBmb2xsb3dpbmc8L3A+CgoKPGJsb2NrcXVvdGU+PHA+CiJPdGhlcndpc2UsIGlmIHRoZSBzZW50cnkgY29uc3RydWN0b3IgZXhpdHMgYnkgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIG9yCmlmIHRoZSBzZW50cnkgb2JqZWN0IHJldHVybnMgZmFsc2UsIHdoZW4gY29udmVydGVkIHRvIGEgdmFsdWUgb2YgdHlwZQpib29sLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB3aXRob3V0IGF0dGVtcHRpbmcgdG8gb2J0YWluIGFueSBpbnB1dC4gSW4KZWl0aGVyIGNhc2UgdGhlIG51bWJlciBvZiBleHRyYWN0ZWQgY2hhcmFjdGVycyBpcyBzZXQgdG8gMDsgdW5mb3JtYXR0ZWQKaW5wdXQgZnVuY3Rpb25zIHRha2luZyBhIGNoYXJhY3RlciBhcnJheSBvZiBub24temVybyBzaXplIGFzIGFuIGFyZ3VtZW50CnNoYWxsIGFsc28gc3RvcmUgYSBudWxsIGNoYXJhY3RlciAodXNpbmcgY2hhclQoKSkgaW4gdGhlIGZpcnN0IGxvY2F0aW9uCm9mIHRoZSBhcnJheS4iCjwvcD48L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkFsdGhvdWdoIHRoZSBnZW5lcmFsIHBoaWxvc29waHkgb2YgdGhlIGlucHV0IGZ1bmN0aW9ucyBpcyB0aGF0IHRoZQphcmd1bWVudCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIHVwb24gZmFpbHVyZSwgPHR0PmdldGxpbmU8L3R0PgpoaXN0b3JpY2FsbHkgYWRkZWQgYSB0ZXJtaW5hdGluZyBudWxsIHVuY29uZGl0aW9uYWxseS4gIE1vc3QKaW1wbGVtZW50YXRpb25zIHN0aWxsIGRvIHRoYXQuICBFYXJsaWVyIHZlcnNpb25zIG9mIHRoZSBkcmFmdCBzdGFuZGFyZApoYWQgbGFuZ3VhZ2UgdGhhdCBtYWRlIHRoaXMgYW4gdW5hbWJpZ3VvdXMgcmVxdWlyZW1lbnQ7IHRob3NlIHdvcmRzCndlcmUgbW92ZWQgdG8gYSBwbGFjZSB3aGVyZSB0aGVpciBjb250ZXh0IG1hZGUgdGhlbSBsZXNzIGNsZWFyLiAgU2VlCkplcnJ5IFNjaHdhcnoncyBtZXNzYWdlIGMrK3N0ZC1saWItNzYxOC48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyNDciPjwvYT4yNDcuIDx0dD52ZWN0b3I8L3R0PiwgPHR0PmRlcXVlOjppbnNlcnQ8L3R0PiBjb21wbGV4aXR5PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjIuNi40IFt2ZWN0b3IubW9kaWZpZXJzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBMaXNhIExpcHBpbmNvdHQgPGI+RGF0ZTo8L2I+IDIwMDAtMDYtMDY8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3ZlY3Rvci5tb2RpZmllcnMiPmlzc3VlczwvYT4gaW4gW3ZlY3Rvci5tb2RpZmllcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5QYXJhZ3JhcGggMiBvZiAyMy4yLjYuNCBbdmVjdG9yLm1vZGlmaWVyc10gZGVzY3JpYmVzIHRoZSBjb21wbGV4aXR5Cm9mIDx0dD52ZWN0b3I6Omluc2VydDwvdHQ+OjwvcD4KCiAgIDxibG9ja3F1b3RlPjxwPgogICBDb21wbGV4aXR5OiBJZiBmaXJzdCBhbmQgbGFzdCBhcmUgZm9yd2FyZCBpdGVyYXRvcnMsIGJpZGlyZWN0aW9uYWwKICAgaXRlcmF0b3JzLCBvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycywgdGhlIGNvbXBsZXhpdHkgaXMgbGluZWFyIGluCiAgIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHJhbmdlIFtmaXJzdCwgbGFzdCkgcGx1cyB0aGUgZGlzdGFuY2UKICAgdG8gdGhlIGVuZCBvZiB0aGUgdmVjdG9yLiBJZiB0aGV5IGFyZSBpbnB1dCBpdGVyYXRvcnMsIHRoZSBjb21wbGV4aXR5CiAgIGlzIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSByYW5nZSBbZmlyc3QsIGxhc3QpCiAgIHRpbWVzIHRoZSBkaXN0YW5jZSB0byB0aGUgZW5kIG9mIHRoZSB2ZWN0b3IuCiAgIDwvcD48L2Jsb2NrcXVvdGU+Cgo8cD5GaXJzdCwgdGhpcyBmYWlscyB0byBhZGRyZXNzIHRoZSBub24taXRlcmF0b3IgZm9ybXMgb2YKPHR0Pmluc2VydDwvdHQ+LjwvcD4KCjxwPlNlY29uZCwgdGhlIGNvbXBsZXhpdHkgZm9yIGlucHV0IGl0ZXJhdG9ycyBtaXNzZXMgYW4gZWRnZSBjYXNlIC0tCml0IHJlcXVpcmVzIHRoYXQgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBlbGVtZW50cyBjYW4gYmUgYWRkZWQgYXQKdGhlIGVuZCBvZiBhIDx0dD52ZWN0b3I8L3R0PiBpbiBjb25zdGFudCB0aW1lLjwvcD4KCjxwPkkgbG9va2VkIHRvIHNlZSBpZiA8dHQ+ZGVxdWU8L3R0PiBoYWQgYSBzaW1pbGFyIHByb2JsZW0sIGFuZCB3YXMKc3VycHJpc2VkIHRvIGZpbmQgdGhhdCA8dHQ+ZGVxdWU8L3R0PiBwbGFjZXMgbm8gcmVxdWlyZW1lbnQgb24gdGhlCmNvbXBsZXhpdHkgb2YgaW5zZXJ0aW5nIG11bHRpcGxlIGVsZW1lbnRzICgyMy4yLjIuMyBbZGVxdWUubW9kaWZpZXJzXSwKcGFyYWdyYXBoIDMpOjwvcD4KCiAgIDxibG9ja3F1b3RlPjxwPgogICBDb21wbGV4aXR5OiBJbiB0aGUgd29yc3QgY2FzZSwgaW5zZXJ0aW5nIGEgc2luZ2xlIGVsZW1lbnQgaW50byBhCiAgIGRlcXVlIHRha2VzIHRpbWUgbGluZWFyIGluIHRoZSBtaW5pbXVtIG9mIHRoZSBkaXN0YW5jZSBmcm9tIHRoZQogICBpbnNlcnRpb24gcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGVxdWUgYW5kIHRoZSBkaXN0YW5jZQogICBmcm9tIHRoZSBpbnNlcnRpb24gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZGVxdWUuIEluc2VydGluZyBhCiAgIHNpbmdsZSBlbGVtZW50IGVpdGhlciBhdCB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBhIGRlcXVlIGFsd2F5cwogICB0YWtlcyBjb25zdGFudCB0aW1lIGFuZCBjYXVzZXMgYSBzaW5nbGUgY2FsbCB0byB0aGUgY29weSBjb25zdHJ1Y3RvcgogICBvZiBULgogICA8L3A+PC9ibG9ja3F1b3RlPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkNoYW5nZSBQYXJhZ3JhcGggMiBvZiAyMy4yLjYuNCBbdmVjdG9yLm1vZGlmaWVyc10gdG88L3A+CiAgIDxibG9ja3F1b3RlPjxwPgogICBDb21wbGV4aXR5OiBUaGUgY29tcGxleGl0eSBpcyBsaW5lYXIgaW4gdGhlIG51bWJlciBvZiBlbGVtZW50cyAKICAgaW5zZXJ0ZWQgcGx1cyB0aGUgZGlzdGFuY2UgdG8gdGhlIGVuZCBvZiB0aGUgdmVjdG9yLgogICA8L3A+PC9ibG9ja3F1b3RlPgoKICAgPHA+PGk+W0ZvciBpbnB1dCBpdGVyYXRvcnMsIG9uZSBtYXkgYWNoaWV2ZSB0aGlzIGNvbXBsZXhpdHkgYnkgZmlyc3QKICAgaW5zZXJ0aW5nIGF0IHRoZSBlbmQgb2YgdGhlIDx0dD52ZWN0b3I8L3R0PiwgYW5kIHRoZW4gdXNpbmcKICAgPHR0PnJvdGF0ZTwvdHQ+Ll08L2k+PC9wPgoKCjxwPkNoYW5nZSAyMy4yLjIuMyBbZGVxdWUubW9kaWZpZXJzXSwgcGFyYWdyYXBoIDMsIHRvOjwvcD4KCiAgIDxibG9ja3F1b3RlPjxwPgogICBDb21wbGV4aXR5OiBUaGUgY29tcGxleGl0eSBpcyBsaW5lYXIgaW4gdGhlIG51bWJlciBvZiBlbGVtZW50cyAKICAgaW5zZXJ0ZWQgcGx1cyB0aGUgc2hvcnRlciBvZiB0aGUgZGlzdGFuY2VzIHRvIHRoZSBiZWdpbm5pbmcgYW5kCiAgIGVuZCBvZiB0aGUgZGVxdWUuICBJbnNlcnRpbmcgYSBzaW5nbGUgZWxlbWVudCBhdCBlaXRoZXIgdGhlCiAgIGJlZ2lubmluZyBvciB0aGUgZW5kIG9mIGEgZGVxdWUgY2F1c2VzIGEgc2luZ2xlIGNhbGwgdG8gdGhlIGNvcHkKICAgY29uc3RydWN0b3Igb2YgVC4KICAgPC9wPjwvYmxvY2txdW90ZT4KCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgaXMgYSByZWFsIGRlZmVjdCwgYW5kIHByb3Bvc2VkIHJlc29sdXRpb24gZml4ZXMgaXQ6IHNvbWUKICBjb21wbGV4aXRpZXMgYXJlbid0IHNwZWNpZmllZCB0aGF0IHNob3VsZCBiZS4gIFRoaXMgcHJvcG9zZWQKICByZXNvbHV0aW9uIGRvZXMgY29uc3RyYWluIGRlcXVlIGltcGxlbWVudGF0aW9ucyAoaXQgcnVsZXMgb3V0IHRoZQogIG1vc3QgbmFpdmUgcG9zc2libGUgaW1wbGVtZW50YXRpb25zKSwgYnV0IHRoZSBMV0cgZG9lc24ndCBzZWUgYQogIHJlYXNvbiB0byBwZXJtaXQgdGhhdCBpbXBsZW1lbnRhdGlvbi48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjQ4Ij48L2E+MjQ4LiB0aW1lX2dldCBmYWlscyB0byBzZXQgZW9mYml0PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuNSBbY2F0ZWdvcnkudGltZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAwLTA2LTIyPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IHRoYXQgYW55IG9mIHRpbWVfZ2V0IG1lbWJlciBmdW5jdGlvbnMgc2V0Cmlvczo6ZW9mYml0IHdoZW4gdGhleSByZWFjaCB0aGUgZW5kIGl0ZXJhdG9yIHdoaWxlIHBhcnNpbmcgdGhlaXIgaW5wdXQuClNpbmNlIG1lbWJlcnMgb2YgYm90aCB0aGUgbnVtX2dldCBhbmQgbW9uZXlfZ2V0IGZhY2V0cyBhcmUgcmVxdWlyZWQgdG8KZG8gc28gKDIyLjIuMi4xLjIsIGFuZCAyMi4yLjYuMS4yLCByZXNwZWN0aXZlbHkpLCB0aW1lX2dldCBtZW1iZXJzCnNob3VsZCBmb2xsb3cgdGhlIHNhbWUgcmVxdWlyZW1lbnQgZm9yIGNvbnNpc3RlbmN5LjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBwYXJhZ3JhcGggMiB0byBzZWN0aW9uIDIyLjIuNS4xIHdpdGggdGhlIGZvbGxvd2luZyB0ZXh0OjwvcD4KCjxibG9ja3F1b3RlPjxwPgpJZiB0aGUgZW5kIGl0ZXJhdG9yIGlzIHJlYWNoZWQgZHVyaW5nIHBhcnNpbmcgYnkgYW55IG9mIHRoZSBnZXQoKQptZW1iZXIgZnVuY3Rpb25zLCB0aGUgbWVtYmVyIHNldHMgaW9zX2Jhc2U6OmVvZmJpdCBpbiBlcnIuCjwvcD48L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlR3byBhbHRlcm5hdGl2ZSByZXNvbHV0aW9ucyB3ZXJlIHByb3Bvc2VkLiAgVGhlIExXRyBjaG9zZSB0aGlzIG9uZQpiZWNhdXNlIGl0IHdhcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgd2F5IGVvZiBpcyBkZXNjcmliZWQgZm9yIG90aGVyCmlucHV0IGZhY2V0cy48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyNTAiPjwvYT4yNTAuIHNwbGljaW5nIGludmFsaWRhdGVzIGl0ZXJhdG9yczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4yLjQuNCBbbGlzdC5vcHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEJyaWFuIFBhcmtlciAgPGI+RGF0ZTo8L2I+IDIwMDAtMDctMTQ8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xpc3Qub3BzIj5pc3N1ZXM8L2E+IGluIFtsaXN0Lm9wc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpTZWN0aW9uIDIzLjIuNC40IFtsaXN0Lm9wc10gc3RhdGVzIHRoYXQKPC9wPgo8cHJlPiAgdm9pZCBzcGxpY2UoaXRlcmF0b3IgcG9zaXRpb24sIGxpc3QmbHQ7VCwgQWxsb2NhdG9yJmd0OyZhbXA7IHgpOwo8L3ByZT4KPHA+CjxpPmludmFsaWRhdGVzPC9pPiBhbGwgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzIHRvIGxpc3QgPHR0Png8L3R0Pi4KPC9wPgoKPHA+ClRoaXMgaXMgdW5uZWNlc3NhcnkgYW5kIGRlZmVhdHMgYW4gaW1wb3J0YW50IGZlYXR1cmUgb2Ygc3BsaWNlLiBJbgpmYWN0LCB0aGUgU0dJIFNUTCBndWFyYW50ZWVzIHRoYXQgaXRlcmF0b3JzIHRvIDx0dD54PC90dD4gcmVtYWluIHZhbGlkCmFmdGVyIDx0dD5zcGxpY2U8L3R0Pi4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkFkZCBhIGZvb3Rub3RlIHRvIDIzLjIuNC40IFtsaXN0Lm9wc10sIHBhcmFncmFwaCAxOjwvcD4KPGJsb2NrcXVvdGU+PHA+Cls8aT5Gb290bm90ZTo8L2k+IEFzIHNwZWNpZmllZCBpbiAgW2RlZmF1bHQuY29uLnJlcV0sIHBhcmFncmFwaHMKNC01LCB0aGUgc2VtYW50aWNzIGRlc2NyaWJlZCBpbiB0aGlzIGNsYXVzZSBhcHBsaWVzIG9ubHkgdG8gdGhlIGNhc2UKd2hlcmUgYWxsb2NhdG9ycyBjb21wYXJlIGVxdWFsLiAgLS1lbmQgZm9vdG5vdGVdCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD5JbiAyMy4yLjQuNCBbbGlzdC5vcHNdLCByZXBsYWNlIHBhcmFncmFwaCA0IHdpdGg6PC9wPgo8YmxvY2txdW90ZT48cD4KRWZmZWN0czogSW5zZXJ0cyB0aGUgY29udGVudHMgb2YgeCBiZWZvcmUgcG9zaXRpb24gYW5kIHggYmVjb21lcyAKZW1wdHkuICBQb2ludGVycyBhbmQgcmVmZXJlbmNlcyB0byB0aGUgbW92ZWQgZWxlbWVudHMgb2YgeCBub3cgcmVmZXIgdG8gCnRob3NlIHNhbWUgZWxlbWVudHMgYnV0IGFzIG1lbWJlcnMgb2YgKnRoaXMuICBJdGVyYXRvcnMgcmVmZXJyaW5nIHRvIHRoZSAKbW92ZWQgZWxlbWVudHMgd2lsbCBjb250aW51ZSB0byByZWZlciB0byB0aGVpciBlbGVtZW50cywgYnV0IHRoZXkgbm93IApiZWhhdmUgYXMgaXRlcmF0b3JzIGludG8gKnRoaXMsIG5vdCBpbnRvIHguCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD5JbiAyMy4yLjQuNCBbbGlzdC5vcHNdLCByZXBsYWNlIHBhcmFncmFwaCA3IHdpdGg6PC9wPgo8YmxvY2txdW90ZT48cD4KRWZmZWN0czogSW5zZXJ0cyBhbiBlbGVtZW50IHBvaW50ZWQgdG8gYnkgaSBmcm9tIGxpc3QgeCBiZWZvcmUgCnBvc2l0aW9uIGFuZCByZW1vdmVzIHRoZSBlbGVtZW50IGZyb20geC4gVGhlIHJlc3VsdCBpcyB1bmNoYW5nZWQgaWYgCnBvc2l0aW9uID09IGkgb3IgcG9zaXRpb24gPT0gKytpLiAgUG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMgdG8gKmkgY29udGludWUgCnRvIHJlZmVyIHRvIHRoaXMgc2FtZSBlbGVtZW50IGJ1dCBhcyBhIG1lbWJlciBvZiAqdGhpcy4gIEl0ZXJhdG9ycyB0byAqaSAKKGluY2x1ZGluZyBpIGl0c2VsZikgY29udGludWUgdG8gcmVmZXIgdG8gdGhlIHNhbWUgZWxlbWVudCwgYnV0IG5vdyAKYmVoYXZlIGFzIGl0ZXJhdG9ycyBpbnRvICp0aGlzLCBub3QgaW50byB4Lgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+SW4gMjMuMi40LjQgW2xpc3Qub3BzXSwgcmVwbGFjZSBwYXJhZ3JhcGggMTIgd2l0aDo8L3A+CjxibG9ja3F1b3RlPjxwPgpSZXF1aXJlczogW2ZpcnN0LCBsYXN0KSBpcyBhIHZhbGlkIHJhbmdlIGluIHguIFRoZSByZXN1bHQgaXMgCnVuZGVmaW5lZCBpZiBwb3NpdGlvbiBpcyBhbiBpdGVyYXRvciBpbiB0aGUgcmFuZ2UgW2ZpcnN0LCBsYXN0KS4gIApQb2ludGVycyBhbmQgcmVmZXJlbmNlcyB0byB0aGUgbW92ZWQgZWxlbWVudHMgb2YgeCBub3cgcmVmZXIgdG8gdGhvc2UgCnNhbWUgZWxlbWVudHMgYnV0IGFzIG1lbWJlcnMgb2YgKnRoaXMuICBJdGVyYXRvcnMgcmVmZXJyaW5nIHRvIHRoZSBtb3ZlZCAKZWxlbWVudHMgd2lsbCBjb250aW51ZSB0byByZWZlciB0byB0aGVpciBlbGVtZW50cywgYnV0IHRoZXkgbm93IGJlaGF2ZSBhcyAKaXRlcmF0b3JzIGludG8gKnRoaXMsIG5vdCBpbnRvIHguCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD48aT5bcHJlLUNvcGVuaGFnZW46IEhvd2FyZCBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gc2FpZCB0aGF0IGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcwp3b3VsZCByZW1haW4gInZhbGlkIi4gIFRoZSBuZXcgcHJvcG9zZWQgcmVzb2x1dGlvbiBjbGFyaWZpZXMgd2hhdCB0aGF0Cm1lYW5zLiAgTm90ZSB0aGF0IHRoaXMgb25seSBhcHBsaWVzIHRvIHRoZSBjYXNlIG9mIGVxdWFsIGFsbG9jYXRvcnMuCkZyb20gIFtkZWZhdWx0LmNvbi5yZXFdIHBhcmFncmFwaCA0LCB0aGUgYmVoYXZpb3Igb2YgbGlzdCB3aGVuCmFsbG9jYXRvcnMgY29tcGFyZSBub25lcXVhbCBpcyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGUgc3RhbmRhcmQuPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjUxIj48L2E+MjUxLiBiYXNpY19zdHJpbmdidWYgbWlzc2luZyBhbGxvY2F0b3JfdHlwZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy43LjEgW3N0cmluZ2J1Zl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAwLTA3LTI4PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBzeW5vcHNpcyBmb3IgdGhlIHRlbXBsYXRlIGNsYXNzIDx0dD5iYXNpY19zdHJpbmdidWY8L3R0Pgpkb2Vzbid0IGxpc3QgYSB0eXBlZGVmIGZvciB0aGUgdGVtcGxhdGUgcGFyYW1ldGVyCjx0dD5BbGxvY2F0b3I8L3R0Pi4gVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZgp0aGUgYWxsb2NhdG9yIGF0IGNvbXBpbGUgdGltZS4gSXQncyBhbHNvIGluY29uc2lzdGVudCB3aXRoIGFsbCBvdGhlcgp0ZW1wbGF0ZSBjbGFzc2VzIGluIHRoZSBsaWJyYXJ5IHRoYXQgZG8gcHJvdmlkZSBhIHR5cGVkZWYgZm9yIHRoZQo8dHQ+QWxsb2NhdG9yPC90dD4gcGFyYW1ldGVyLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCB0byB0aGUgc3lub3BzZXMgb2YgdGhlIGNsYXNzIHRlbXBsYXRlcyBiYXNpY19zdHJpbmdidWYgKDI3LjcuMSksCmJhc2ljX2lzdHJpbmdzdHJlYW0gKDI3LjcuMiksIGJhc2ljX29zdHJpbmdzdHJlYW0gKDI3LjcuMyksIGFuZCAKYmFzaWNfc3RyaW5nc3RyZWFtICgyNy43LjQpIHRoZSB0eXBlZGVmOjwvcD4KPHByZT4gIHR5cGVkZWYgQWxsb2NhdG9yIGFsbG9jYXRvcl90eXBlOwo8L3ByZT4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI1MiI+PC9hPjI1Mi4gbWlzc2luZyBjYXN0cy9DLXN0eWxlIGNhc3RzIHVzZWQgaW4gaW9zdHJlYW1zPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjcgW3N0cmluZy5zdHJlYW1zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDAtMDctMjg8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3N0cmluZy5zdHJlYW1zIj5pc3N1ZXM8L2E+IGluIFtzdHJpbmcuc3RyZWFtc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPjI3LjcuMi4yLCBwMSB1c2VzIGEgQy1zdHlsZSBjYXN0IHJhdGhlciB0aGFuIHRoZSBtb3JlIGFwcHJvcHJpYXRlCmNvbnN0X2Nhc3QmbHQ7Jmd0OyBpbiB0aGUgUmV0dXJucyBjbGF1c2UgZm9yIGJhc2ljX2lzdHJpbmdzdHJlYW0mbHQ7Jmd0Ozo6cmRidWYoKS4KVGhlIHNhbWUgQy1zdHlsZSBjYXN0IGlzIGJlaW5nIHVzZWQgaW4gMjcuNy4zLjIsIHAxLCBELjcuMi4yLCBwMSwgYW5kCkQuNy4zLjIsIHAxLCBhbmQgcGVyaGFwcyBlbHNld2hlcmUuIDI3LjcuNiwgcDEgYW5kIEQuNy4yLjIsIHAxIGFyZSBtaXNzaW5nCnRoZSBjYXN0IGFsdG9nZXRoZXIuPC9wPgoKPHA+Qy1zdHlsZSBjYXN0cyBoYXZlIG5vdCBiZWVuIGRlcHJlY2F0ZWQsIHNvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoaXMKaXNzdWUgaXMgc3R5bGlzdGljIHJhdGhlciB0aGFuIGEgbWF0dGVyIG9mIGNvcnJlY3RuZXNzLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjcuMi4yLCBwMSByZXBsYWNlIDwvcD4KPHByZT4gIC0xLSBSZXR1cm5zOiAoYmFzaWNfc3RyaW5nYnVmJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KikmYW1wO3NiLjwvcHJlPgoKPHA+d2l0aDwvcD4KPHByZT4gIC0xLSBSZXR1cm5zOiBjb25zdF9jYXN0Jmx0O2Jhc2ljX3N0cmluZ2J1ZiZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyomZ3Q7KCZhbXA7c2IpLjwvcHJlPgoKCjxwPkluIDI3LjcuMy4yLCBwMSByZXBsYWNlPC9wPgo8cHJlPiAgLTEtIFJldHVybnM6IChiYXNpY19zdHJpbmdidWYmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsqKSZhbXA7c2IuPC9wcmU+Cgo8cD53aXRoPC9wPgo8cHJlPiAgLTEtIFJldHVybnM6IGNvbnN0X2Nhc3QmbHQ7YmFzaWNfc3RyaW5nYnVmJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KiZndDsoJmFtcDtzYikuPC9wcmU+Cgo8cD5JbiAyNy43LjYsIHAxLCByZXBsYWNlPC9wPgo8cHJlPiAgLTEtIFJldHVybnM6ICZhbXA7c2I8L3ByZT4KCjxwPndpdGg8L3A+CjxwcmU+ICAtMS0gUmV0dXJuczogY29uc3RfY2FzdCZsdDtiYXNpY19zdHJpbmdidWYmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsqJmd0OygmYW1wO3NiKS48L3ByZT4KCjxwPkluIEQuNy4yLjIsIHAxIHJlcGxhY2U8L3A+CjxwcmU+ICAtMi0gUmV0dXJuczogJmFtcDtzYi4gPC9wcmU+Cgo8cD53aXRoPC9wPgo8cHJlPiAgLTItIFJldHVybnM6IGNvbnN0X2Nhc3QmbHQ7c3Ryc3RyZWFtYnVmKiZndDsoJmFtcDtzYikuPC9wcmU+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyNTMiPjwvYT4yNTMuIHZhbGFycmF5IGhlbHBlciBmdW5jdGlvbnMgYXJlIGFsbW9zdCBlbnRpcmVseSB1c2VsZXNzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI2LjUuMi4xIFt2YWxhcnJheS5jb25zXSwgMjYuNS4yLjIgW3ZhbGFycmF5LmFzc2lnbl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gUm9iZXJ0IEtsYXJlciA8Yj5EYXRlOjwvYj4gMjAwMC0wNy0zMTwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI3ZhbGFycmF5LmNvbnMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFt2YWxhcnJheS5jb25zXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3ZhbGFycmF5LmNvbnMiPmlzc3VlczwvYT4gaW4gW3ZhbGFycmF5LmNvbnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGlzIGRpc2N1c3Npb24gaXMgYWRhcHRlZCBmcm9tIG1lc3NhZ2UgYysrc3RkLWxpYi03MDU2IHBvc3RlZApOb3ZlbWJlciAxMSwgMTk5OS4gIEkgZG9uJ3QgdGhpbmsgdGhhdCBhbnlvbmUgY2FuIHJlYXNvbmFibHkgY2xhaW0KdGhhdCB0aGUgcHJvYmxlbSBkZXNjcmliZWQgYmVsb3cgaXMgTkFELjwvcD4KCjxwPlRoZXNlIHZhbGFycmF5IGNvbnN0cnVjdG9ycyBjYW4gbmV2ZXIgYmUgY2FsbGVkOjwvcD4KCjxwcmU+ICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICAgICAgIHZhbGFycmF5Jmx0O1QmZ3Q7Ojp2YWxhcnJheShjb25zdCBzbGljZV9hcnJheSZsdDtUJmd0OyAmYW1wOyk7CiAgIHRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OwogICAgICAgICB2YWxhcnJheSZsdDtUJmd0Ozo6dmFsYXJyYXkoY29uc3QgZ3NsaWNlX2FycmF5Jmx0O1QmZ3Q7ICZhbXA7KTsKICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICAgICAgIHZhbGFycmF5Jmx0O1QmZ3Q7Ojp2YWxhcnJheShjb25zdCBtYXNrX2FycmF5Jmx0O1QmZ3Q7ICZhbXA7KTsKICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICAgICAgIHZhbGFycmF5Jmx0O1QmZ3Q7Ojp2YWxhcnJheShjb25zdCBpbmRpcmVjdF9hcnJheSZsdDtUJmd0OyAmYW1wOyk7CjwvcHJlPgoKPHA+U2ltaWxhcmx5LCB0aGVzZSB2YWxhcnJheSBhc3NpZ25tZW50IG9wZXJhdG9ycyBjYW5ub3QgYmUKY2FsbGVkOjwvcD4KCjxwcmU+ICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgICB2YWxhcnJheSZsdDtUJmd0OyB2YWxhcnJheSZsdDtUJmd0Ozo6b3BlcmF0b3I9KGNvbnN0IHNsaWNlX2FycmF5Jmx0O1QmZ3Q7ICZhbXA7KTsKICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgICB2YWxhcnJheSZsdDtUJmd0OyB2YWxhcnJheSZsdDtUJmd0Ozo6b3BlcmF0b3I9KGNvbnN0IGdzbGljZV9hcnJheSZsdDtUJmd0OyAmYW1wOyk7CiAgICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICAgdmFsYXJyYXkmbHQ7VCZndDsgdmFsYXJyYXkmbHQ7VCZndDs6Om9wZXJhdG9yPShjb25zdCBtYXNrX2FycmF5Jmx0O1QmZ3Q7ICZhbXA7KTsKICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgICB2YWxhcnJheSZsdDtUJmd0OyB2YWxhcnJheSZsdDtUJmd0Ozo6b3BlcmF0b3I9KGNvbnN0IGluZGlyZWN0X2FycmF5Jmx0O1QmZ3Q7ICZhbXA7KTsKPC9wcmU+Cgo8cD5QbGVhc2UgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOjwvcD4KCjxwcmU+ICAgI2luY2x1ZGUgJmx0O3ZhbGFycmF5Jmd0OwogICB1c2luZyBuYW1lc3BhY2Ugc3RkOwoKICAgaW50IG1haW4oKQogICB7CiAgICAgICB2YWxhcnJheSZsdDtkb3VibGUmZ3Q7IHZhMSgxMik7CiAgICAgICB2YWxhcnJheSZsdDtkb3VibGUmZ3Q7IHZhMih2YTFbc2xpY2UoMSw0LDMpXSk7IC8vIGxpbmUgMQogICB9CjwvcHJlPgoKCjxwPlNpbmNlIHRoZSB2YWxhcnJheSB2YTEgaXMgbm9uLWNvbnN0LCB0aGUgcmVzdWx0IG9mIHRoZSBzdWItZXhwcmVzc2lvbgp2YTFbc2xpY2UoMSw0LDMpXSBhdCBsaW5lIDEgaXMgYW4gcnZhbHVlIG9mIHR5cGUgY29uc3QKc3RkOjpzbGljZV9hcnJheSZsdDtkb3VibGUmZ3Q7LiAgVGhpcyBzbGljZV9hcnJheSBydmFsdWUgaXMgdGhlbiB1c2VkIHRvCmNvbnN0cnVjdCB2YTIuICBUaGUgY29uc3RydWN0b3IgdGhhdCBpcyB1c2VkIHRvIGNvbnN0cnVjdCB2YTIgaXMKZGVjbGFyZWQgbGlrZSB0aGlzOjwvcD4KCjxwcmU+ICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgICB2YWxhcnJheSZsdDtUJmd0Ozo6dmFsYXJyYXkoY29uc3Qgc2xpY2VfYXJyYXkmbHQ7VCZndDsgJmFtcDspOwo8L3ByZT4KCjxwPk5vdGljZSB0aGUgY29uc3RydWN0b3IncyBjb25zdCByZWZlcmVuY2UgcGFyYW1ldGVyLiAgV2hlbiB0aGUKY29uc3RydWN0b3IgaXMgY2FsbGVkLCBhIHNsaWNlX2FycmF5IG11c3QgYmUgYm91bmQgdG8gdGhpcyByZWZlcmVuY2UuClRoZSBydWxlcyBmb3IgYmluZGluZyBhbiBydmFsdWUgdG8gYSBjb25zdCByZWZlcmVuY2UgYXJlIGluIDguNS4zLApwYXJhZ3JhcGggNSAoc2VlIGFsc28gMTMuMy4zLjEuNCkuICBTcGVjaWZpY2FsbHksIHBhcmFncmFwaCA1CmluZGljYXRlcyB0aGF0IGEgc2Vjb25kIHNsaWNlX2FycmF5IHJ2YWx1ZSBpcyBjb25zdHJ1Y3RlZCAoaW4gdGhpcwpjYXNlIGNvcHktY29uc3RydWN0ZWQpIGZyb20gdGhlIGZpcnN0IG9uZTsgaXQgaXMgdGhpcyBzZWNvbmQgcnZhbHVlCnRoYXQgaXMgYm91bmQgdG8gdGhlIHJlZmVyZW5jZSBwYXJhbWV0ZXIuICBQYXJhZ3JhcGggNSBhbHNvIHJlcXVpcmVzCnRoYXQgdGhlIGNvbnN0cnVjdG9yIHRoYXQgaXMgdXNlZCBmb3IgdGhpcyBwdXJwb3NlIGJlIGNhbGxhYmxlLApyZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHNlY29uZCBydmFsdWUgaXMgZWxpZGVkLiAgVGhlCmNvcHktY29uc3RydWN0b3IgaW4gdGhpcyBjYXNlIGlzIG5vdCBjYWxsYWJsZSwgaG93ZXZlciwgYmVjYXVzZSBpdCBpcwpwcml2YXRlLiAgVGhlcmVmb3JlLCB0aGUgY29tcGlsZXIgc2hvdWxkIHJlcG9ydCBhbiBlcnJvci48L3A+Cgo8cD5TaW5jZSBzbGljZV9hcnJheXMgYXJlIGFsd2F5cyBydmFsdWVzLCB0aGUgdmFsYXJyYXkgY29uc3RydWN0b3IgdGhhdCBoYXMgYQpwYXJhbWV0ZXIgb2YgdHlwZSBjb25zdCBzbGljZV9hcnJheSZsdDtUJmd0OyAmYW1wOyBjYW4gbmV2ZXIgYmUgY2FsbGVkLiAgVGhlCnNhbWUgcmVhc29uaW5nIGFwcGxpZXMgdG8gdGhlIHRocmVlIG90aGVyIGNvbnN0cnVjdG9ycyBhbmQgdGhlIGZvdXIKYXNzaWdubWVudCBvcGVyYXRvcnMgdGhhdCBhcmUgbGlzdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBwb3N0LgpGdXJ0aGVybW9yZSwgc2luY2UgdGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBiZSBjYWxsZWQsIHRoZSB2YWxhcnJheSBoZWxwZXIKY2xhc3NlcyBhcmUgYWxtb3N0IGVudGlyZWx5IHVzZWxlc3MuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+c2xpY2VfYXJyYXk6PC9wPgo8dWw+CjxsaT4gTWFrZSB0aGUgY29weSBjb25zdHJ1Y3RvciBhbmQgY29weS1hc3NpZ25tZW50IG9wZXJhdG9yIGRlY2xhcmF0aW9ucwogICAgIHB1YmxpYyBpbiB0aGUgc2xpY2VfYXJyYXkgY2xhc3MgdGVtcGxhdGUgZGVmaW5pdGlvbiBpbiAyNi41LjUgW3RlbXBsYXRlLnNsaWNlLmFycmF5XSA8L2xpPgo8bGk+IHJlbW92ZSBwYXJhZ3JhcGggMyBvZiAyNi41LjUgW3RlbXBsYXRlLnNsaWNlLmFycmF5XTwvbGk+CjxsaT4gcmVtb3ZlIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uIGZyb20gIFtjb25zLnNsaWNlLmFycl08L2xpPgo8bGk+IGNoYW5nZSBwYXJhZ3JhcGggMSBvZiAgW2NvbnMuc2xpY2UuYXJyXSB0byByZWFkICJUaGlzIGNvbnN0cnVjdG9yIGlzIGRlY2xhcmVkCiAgICB0byBiZSBwcml2YXRlLiAgVGhpcyBjb25zdHJ1Y3RvciBuZWVkIG5vdCBiZSBkZWZpbmVkLiI8L2xpPgo8bGk+IHJlbW92ZSB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgcGFyYWdyYXBoIDEgb2YgMjYuNS41LjEgW3NsaWNlLmFyci5hc3NpZ25dPC9saT4KPGxpPiBDaGFuZ2UgdGhlIGZpcnN0IHRocmVlIHdvcmRzIG9mIHRoZSBzZWNvbmQgc2VudGVuY2Ugb2YgcGFyYWdyYXBoIDEgb2YKICAgIDI2LjUuNS4xIFtzbGljZS5hcnIuYXNzaWduXSB0byAiVGhlc2UgYXNzaWdubWVudCBvcGVyYXRvcnMgaGF2ZSI8L2xpPgo8L3VsPgoKPHA+Z3NsaWNlX2FycmF5OjwvcD4KPHVsPgo8bGk+IE1ha2UgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIGNvcHktYXNzaWdubWVudCBvcGVyYXRvciBkZWNsYXJhdGlvbnMKICAgIHB1YmxpYyBpbiB0aGUgZ3NsaWNlX2FycmF5IGNsYXNzIHRlbXBsYXRlIGRlZmluaXRpb24gaW4gMjYuNS43IFt0ZW1wbGF0ZS5nc2xpY2UuYXJyYXldIDwvbGk+CjxsaT4gcmVtb3ZlIHRoZSBub3RlIGluIHBhcmFncmFwaCAzIG9mIDI2LjUuNyBbdGVtcGxhdGUuZ3NsaWNlLmFycmF5XTwvbGk+CjxsaT4gcmVtb3ZlIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uIGZyb20gIFtnc2xpY2UuYXJyYXkuY29uc108L2xpPgo8bGk+IGNoYW5nZSBwYXJhZ3JhcGggMSBvZiAgW2dzbGljZS5hcnJheS5jb25zXSB0byByZWFkICJUaGlzIGNvbnN0cnVjdG9yIGlzIGRlY2xhcmVkCiAgICB0byBiZSBwcml2YXRlLiAgVGhpcyBjb25zdHJ1Y3RvciBuZWVkIG5vdCBiZSBkZWZpbmVkLiI8L2xpPgo8bGk+IHJlbW92ZSB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgcGFyYWdyYXBoIDEgb2YgMjYuNS43LjEgW2dzbGljZS5hcnJheS5hc3NpZ25dPC9saT4KPGxpPiBDaGFuZ2UgdGhlIGZpcnN0IHRocmVlIHdvcmRzIG9mIHRoZSBzZWNvbmQgc2VudGVuY2Ugb2YgcGFyYWdyYXBoIDEgb2YKICAgIDI2LjUuNy4xIFtnc2xpY2UuYXJyYXkuYXNzaWduXSB0byAiVGhlc2UgYXNzaWdubWVudCBvcGVyYXRvcnMgaGF2ZSI8L2xpPgo8L3VsPgoKPHA+bWFza19hcnJheTo8L3A+Cjx1bD4KPGxpPiBNYWtlIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBjb3B5LWFzc2lnbm1lbnQgb3BlcmF0b3IgZGVjbGFyYXRpb25zCiAgICBwdWJsaWMgaW4gdGhlIG1hc2tfYXJyYXkgY2xhc3MgdGVtcGxhdGUgZGVmaW5pdGlvbiBpbiAyNi41LjggW3RlbXBsYXRlLm1hc2suYXJyYXldIDwvbGk+CjxsaT4gcmVtb3ZlIHRoZSBub3RlIGluIHBhcmFncmFwaCAyIG9mIDI2LjUuOCBbdGVtcGxhdGUubWFzay5hcnJheV08L2xpPgo8bGk+IHJlbW92ZSB0aGUgY29weSBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbiBmcm9tICBbbWFzay5hcnJheS5jb25zXTwvbGk+CjxsaT4gY2hhbmdlIHBhcmFncmFwaCAxIG9mICBbbWFzay5hcnJheS5jb25zXSB0byByZWFkICJUaGlzIGNvbnN0cnVjdG9yIGlzIGRlY2xhcmVkCiAgICB0byBiZSBwcml2YXRlLiAgVGhpcyBjb25zdHJ1Y3RvciBuZWVkIG5vdCBiZSBkZWZpbmVkLiI8L2xpPgo8bGk+IHJlbW92ZSB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgcGFyYWdyYXBoIDEgb2YgMjYuNS44LjEgW21hc2suYXJyYXkuYXNzaWduXTwvbGk+CjxsaT4gQ2hhbmdlIHRoZSBmaXJzdCB0aHJlZSB3b3JkcyBvZiB0aGUgc2Vjb25kIHNlbnRlbmNlIG9mIHBhcmFncmFwaCAxIG9mCiAgICAyNi41LjguMSBbbWFzay5hcnJheS5hc3NpZ25dIHRvICJUaGVzZSBhc3NpZ25tZW50IG9wZXJhdG9ycyBoYXZlIjwvbGk+CjwvdWw+Cgo8cD5pbmRpcmVjdF9hcnJheTo8L3A+Cjx1bD4KPGxpPk1ha2UgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIGNvcHktYXNzaWdubWVudCBvcGVyYXRvciBkZWNsYXJhdGlvbnMKICAgIHB1YmxpYyBpbiB0aGUgaW5kaXJlY3RfYXJyYXkgY2xhc3MgZGVmaW5pdGlvbiBpbiAyNi41LjkgW3RlbXBsYXRlLmluZGlyZWN0LmFycmF5XTwvbGk+CjxsaT4gcmVtb3ZlIHRoZSBub3RlIGluIHBhcmFncmFwaCAyIG9mIDI2LjUuOSBbdGVtcGxhdGUuaW5kaXJlY3QuYXJyYXldPC9saT4KPGxpPiByZW1vdmUgdGhlIGNvcHkgY29uc3RydWN0b3IgZGVjbGFyYXRpb24gZnJvbSAgW2luZGlyZWN0LmFycmF5LmNvbnNdPC9saT4KPGxpPiBjaGFuZ2UgdGhlIGRlc2NyaXB0aXZlIHRleHQgaW4gIFtpbmRpcmVjdC5hcnJheS5jb25zXSB0byByZWFkICJUaGlzIGNvbnN0cnVjdG9yIGlzCiAgICBkZWNsYXJlZCB0byBiZSBwcml2YXRlLiAgVGhpcyBjb25zdHJ1Y3RvciBuZWVkIG5vdCBiZSBkZWZpbmVkLiI8L2xpPgo8bGk+IHJlbW92ZSB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgcGFyYWdyYXBoIDEgb2YgMjYuNS45LjEgW2luZGlyZWN0LmFycmF5LmFzc2lnbl08L2xpPgo8bGk+IENoYW5nZSB0aGUgZmlyc3QgdGhyZWUgd29yZHMgb2YgdGhlIHNlY29uZCBzZW50ZW5jZSBvZiBwYXJhZ3JhcGggMSBvZgogICAgMjYuNS45LjEgW2luZGlyZWN0LmFycmF5LmFzc2lnbl0gdG8gIlRoZXNlIGFzc2lnbm1lbnQgb3BlcmF0b3JzIGhhdmUiPC9saT4KPC91bD4KPHA+PGk+W1Byb3Bvc2VkIHJlc29sdXRpb24gd2FzIG1vZGlmaWVkIGluIFNhbnRhIENydXo6IGV4cGxpY2l0bHkgbWFrZQpjb3B5IGNvbnN0cnVjdG9yIGFuZCBjb3B5IGFzc2lnbm1lbnQgb3BlcmF0b3JzIHB1YmxpYywgaW5zdGVhZCBvZgpyZW1vdmluZyB0aGVtLl08L2k+PC9wPgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+S2VlcGluZyB0aGUgdmFsYXJyYXkgY29uc3RydWN0b3JzIHByaXZhdGUgaXMgdW50ZW5hYmxlLiAgTWVyZWx5Cm1ha2luZyB2YWxhcnJheSBhIGZyaWVuZCBvZiB0aGUgaGVscGVyIGNsYXNzZXMgaXNuJ3QgZ29vZCBlbm91Z2gsCmJlY2F1c2UgYWNjZXNzIHRvIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGlzIGNoZWNrZWQgaW4gdGhlIHVzZXIncwplbnZpcm9ubWVudC48L3A+Cgo8cD5NYWtpbmcgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IgcHVibGljIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgdG8Kc29sdmUgdGhpcyBwcm9ibGVtLiAgQSBtYWpvcml0eSBvZiB0aGUgTFdHIDxpPihzdHJhdyBwb2xsOiAxMy00KTwvaT4KYmVsaWV2ZWQgd2Ugc2hvdWxkIG1ha2UgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3JzIHB1YmxpYywgaW4gYWRkaXRpb24KdG8gdGhlIGNvcHkgY29uc3RydWN0b3JzLCBmb3IgcmVhc29ucyBvZiBzeW1tZXRyeSBhbmQgdXNlcgpleHBlY3RhdGlvbi48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjU0Ij48L2E+MjU0LiBFeGNlcHRpb24gdHlwZXMgaW4gY2xhdXNlIDE5IGFyZSBjb25zdHJ1Y3RlZCBmcm9tIDx0dD5zdGQ6OnN0cmluZzwvdHQ+PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE5LjEgW3N0ZC5leGNlcHRpb25zXSwgMjcuNC4yLjEuMSBbaW9zOjpmYWlsdXJlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEYXZlIEFicmFoYW1zIDxiPkRhdGU6PC9iPiAyMDAwLTA4LTAxPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpNYW55IG9mIHRoZSBzdGFuZGFyZCBleGNlcHRpb24gdHlwZXMgd2hpY2ggaW1wbGVtZW50YXRpb25zIGFyZQpyZXF1aXJlZCB0byB0aHJvdyBhcmUgY29uc3RydWN0ZWQgd2l0aCBhIGNvbnN0IHN0ZDo6c3RyaW5nJmFtcDsKcGFyYW1ldGVyLiBGb3IgZXhhbXBsZToKPC9wPgoKPHByZT4gICAgIDE5LjEuNSAgQ2xhc3Mgb3V0X29mX3JhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICBbbGliLm91dC5vZi5yYW5nZV0KICAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIGNsYXNzIG91dF9vZl9yYW5nZSA6IHB1YmxpYyBsb2dpY19lcnJvciB7CiAgICAgICBwdWJsaWM6CiAgICAgICAgIGV4cGxpY2l0IG91dF9vZl9yYW5nZShjb25zdCBzdHJpbmcmYW1wOyB3aGF0X2FyZyk7CiAgICAgICB9OwogICAgIH0KCiAgIDEgVGhlIGNsYXNzIG91dF9vZl9yYW5nZSBkZWZpbmVzIHRoZSB0eXBlIG9mIG9iamVjdHMgIHRocm93biAgYXMgIGV4Y2VwLQogICAgIHRpb25zIHRvIHJlcG9ydCBhbiBhcmd1bWVudCB2YWx1ZSBub3QgaW4gaXRzIGV4cGVjdGVkIHJhbmdlLgoKICAgICBvdXRfb2ZfcmFuZ2UoY29uc3Qgc3RyaW5nJmFtcDsgd2hhdF9hcmcpOwoKICAgICBFZmZlY3RzOgogICAgICAgQ29uc3RydWN0cyBhbiBvYmplY3Qgb2YgY2xhc3Mgb3V0X29mX3JhbmdlLgogICAgIFBvc3Rjb25kaXRpb246CiAgICAgICBzdHJjbXAod2hhdCgpLCB3aGF0X2FyZy5jX3N0cigpKSA9PSAwLgo8L3ByZT4KCjxwPgpUaGVyZSBhcmUgYXQgbGVhc3QgdHdvIHByb2JsZW1zIHdpdGggdGhpczoKPC9wPgo8b2w+CjxsaT5BIHByb2dyYW0gd2hpY2ggaXMgbG93IG9uIG1lbW9yeSBtYXkgZW5kIHVwIHRocm93aW5nCnN0ZDo6YmFkX2FsbG9jIGluc3RlYWQgb2Ygb3V0X29mX3JhbmdlIGJlY2F1c2UgbWVtb3J5IHJ1bnMgb3V0IHdoaWxlCmNvbnN0cnVjdGluZyB0aGUgZXhjZXB0aW9uIG9iamVjdC48L2xpPgo8bGk+QW4gb2J2aW91cyBpbXBsZW1lbnRhdGlvbiB3aGljaCBzdG9yZXMgYSBzdGQ6OnN0cmluZyBkYXRhIG1lbWJlcgptYXkgZW5kIHVwIGludm9raW5nIHRlcm1pbmF0ZSgpIGR1cmluZyBleGNlcHRpb24gdW53aW5kaW5nIGJlY2F1c2UgdGhlCmV4Y2VwdGlvbiBvYmplY3QgYWxsb2NhdGVzIG1lbW9yeSAob3IgcmF0aGVyIGZhaWxzIHRvKSBhcyBpdCBpcyBiZWluZwpjb3BpZWQuPC9saT4KPC9vbD4KCjxwPgpUaGVyZSBtYXkgYmUgbm8gY3VyZSBmb3IgKDEpIG90aGVyIHRoYW4gY2hhbmdpbmcgdGhlIGludGVyZmFjZSB0bwpvdXRfb2ZfcmFuZ2UsIHRob3VnaCBvbmUgY291bGQgcmVhc29uYWJseSBhcmd1ZSB0aGF0ICgxKSBpcyBub3QgYQpkZWZlY3QuIFBlcnNvbmFsbHkgSSBkb24ndCBjYXJlIHRoYXQgbXVjaCBpZiBvdXQtb2YtbWVtb3J5IGlzIHJlcG9ydGVkCndoZW4gSSBvbmx5IGhhdmUgMjAgYnl0ZXMgbGVmdCwgaW4gdGhlIGNhc2Ugd2hlbiBvdXRfb2ZfcmFuZ2Ugd291bGQKaGF2ZSBiZWVuIHJlcG9ydGVkLiBQZW9wbGUgd2hvIHVzZSBleGNlcHRpb24tc3BlY2lmaWNhdGlvbnMgbWlnaHQgY2FyZQphIGxvdCwgdGhvdWdoLgo8L3A+Cgo8cD4KVGhlcmUgaXMgYSBjdXJlIGZvciAoMiksIGJ1dCBpdCBpc24ndCBjb21wbGV0ZWx5IG9idmlvdXMuIEkgdGhpbmsgYQpub3RlIGZvciBpbXBsZW1lbnRvcnMgc2hvdWxkIGJlIG1hZGUgaW4gdGhlIHN0YW5kYXJkLiBBdm9pZGluZwpwb3NzaWJsZSB0ZXJtaW5hdGlvbiBpbiB0aGlzIGNhc2Ugc2hvdWxkbid0IGJlIGxlZnQgdXAgdG8gY2hhbmNlLiAgVGhlCmN1cmUgaXMgdG8gdXNlIGEgcmVmZXJlbmNlLWNvdW50ZWQgInN0cmluZyIgaW1wbGVtZW50YXRpb24KaW4gdGhlIGV4Y2VwdGlvbiBvYmplY3QuIEkgYW0gbm90IG5lY2Vzc2FyaWx5IHJlZmVycmluZyB0byBhCnN0ZDo6c3RyaW5nIGhlcmU7IGFueSBzaW1wbGUgcmVmZXJlbmNlLWNvdW50aW5nIHNjaGVtZSBmb3IgYSBOVEJTCndvdWxkIGRvLgo8L3A+Cgo8cD48Yj5GdXJ0aGVyIGRpc2N1c3Npb24sIGluIGVtYWlsOjwvYj48L3A+Cgo8cD4KLi4uSSdtIG5vdCBzbyBjb25jZXJuZWQgYWJvdXQgKDEpLiBBZnRlciBhbGwsIGEgbGlicmFyeSBpbXBsZW1lbnRhdGlvbgpjYW4gYWRkIGNvbnN0IGNoYXIqIGNvbnN0cnVjdG9ycyBhcyBhbiBleHRlbnNpb24sIGFuZCB1c2VycyBkb24ndAo8aT5uZWVkPC9pPiB0byBhdmFpbCB0aGVtc2VsdmVzIG9mIHRoZSBzdGFuZGFyZCBleGNlcHRpb25zLCB0aG91Z2ggdGhpcyBpcwphIGxhbWUgcG9zaXRpb24gdG8gYmUgZm9yY2VkIGludG8uICBGV0lXLCBzdGQ6OmV4Y2VwdGlvbiBhbmQKc3RkOjpiYWRfYWxsb2MgZG9uJ3QgcmVxdWlyZSBhIHRlbXBvcmFyeSBiYXNpY19zdHJpbmcuCjwvcD4KCjxwPgouLi5JIGRvbid0IHRoaW5rIHRoZSBmaXhlZC1zaXplIGJ1ZmZlciBpcyBhIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtLApzdHJpY3RseSBzcGVha2luZywgYmVjYXVzZSB5b3UgY2FuJ3Qgc2F0aXNmeSB0aGUgcG9zdGNvbmRpdGlvbgo8YnI+CiAgICA8dHQ+Jm5ic3A7Jm5ic3A7c3RyY21wKHdoYXQoKSwgd2hhdF9hcmcuY19zdHIoKSkgPT0gMDwvdHQ+Cjxicj4KRm9yIGFsbCB2YWx1ZXMgb2Ygd2hhdF9hcmcgKGkuZS4gdmVyeSBsb25nIHZhbHVlcykuIFRoYXQgbWVhbnMgdGhhdAp0aGUgb25seSB0cnVseSBjb25mb3JtaW5nIHNvbHV0aW9uIHJlcXVpcmVzIGEgZHluYW1pYyBhbGxvY2F0aW9uLgo8L3A+Cgo8cD48Yj5GdXJ0aGVyIGRpc2N1c3Npb24sIGZyb20gUmVkbW9uZDo8L2I+PC9wPgoKPHA+VGhlIG1vc3QgaW1wb3J0YW50IHByb2dyZXNzIHdlIG1hZGUgYXQgdGhlIFJlZG1vbmQgbWVldGluZyB3YXMKcmVhbGl6aW5nIHRoYXQgdGhlcmUgYXJlIHR3byBzZXBhcmFibGUgaXNzdWVzIGhlcmU6IHRoZSBjb25zdApzdHJpbmcmYW1wOyBjb25zdHJ1Y3RvciwgYW5kIHRoZSBjb3B5IGNvbnN0cnVjdG9yLiAgSWYgYSB1c2VyIHdyaXRlcwpzb21ldGhpbmcgbGlrZSA8dHQ+dGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UoImZvbyIpPC90dD4sIHRoZSBjb25zdApzdHJpbmcmYW1wOyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIGJlZm9yZSBhbnl0aGluZyBnZXRzIHRocm93bi4gIFRoZQpjb3B5IGNvbnN0cnVjdG9yIGlzIHBvdGVudGlhbGx5IGludm9rZWQgZHVyaW5nIHN0YWNrIHVud2luZGluZy48L3A+Cgo8cD5UaGUgY29weSBjb25zdHJ1Y3RvciBpcyBhIG1vcmUgc2VyaW91cyBwcm9ibGVtLCBiZWN1YXNlIGZhaWx1cmUKZHVyaW5nIHN0YWNrIHVud2luZGluZyBpbnZva2VzIDx0dD50ZXJtaW5hdGU8L3R0Pi4gIFRoZSBjb3B5CmNvbnN0cnVjdG9yIG11c3QgYmUgbm90aHJvdy4gPGk+Q3VyYedhbzogSG93YXJkIHRoaW5rcyB0aGlzCnJlcXVpcmVtZW50IG1heSBhbHJlYWR5IGJlIHByZXNlbnQuPC9pPjwvcD4KCjxwPlRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtIGlzIHRoYXQgaXQncyBkaWZmaWN1bHQgdG8gZ2V0IHRoZSBub3Rocm93CnJlcXVpcmVtZW50IHRvIHdvcmsgd2VsbCB3aXRoIHRoZSByZXF1aXJlbWVudCB0aGF0IHRoZSBleGNlcHRpb24Kb2JqZWN0cyBzdG9yZSBhIHN0cmluZyBvZiB1bmJvdW5kZWQgc2l6ZSwgcGFydGljdWxhcmx5IGlmIHlvdSBhbHNvIHRyeQp0byBtYWtlIHRoZSBjb25zdCBzdHJpbmcmYW1wOyBjb25zdHJ1Y3RvciBub3Rocm93LiAgT3B0aW9ucyBkaXNjdXNzZWQKaW5jbHVkZTo8L3A+Cgo8dWw+CjxsaT5MaW1pdCB0aGUgc2l6ZSBvZiBhIHN0cmluZyB0aGF0IGV4Y2VwdGlvbiBvYmplY3RzIGFyZSByZXF1aXJlZCB0bwp0aHJvdzogY2hhbmdlIHRoZSBwb3N0Y29uZGl0aW9ucyBvZiAxOS4xLjIgW2RvbWFpbi5lcnJvcl0gcGFyYWdyYXBoIDMKYW5kIDE5LjEuNiBbcnVudGltZS5lcnJvcl0gcGFyYWdyYXBoIDMgdG8gc29tZXRoaW5nIGxpa2UgdGhpczoKInN0cm5jbXAod2hhdCgpLCB3aGF0X2FyZy5fc3RyKCksIE4pID09IDAsIHdoZXJlIE4gaXMgYW4KaW1wbGVtZW50YXRpb24gZGVmaW5lZCBjb25zdGFudCBubyBzbWFsbGVyIHRoYW4gMjU2Ii48L2xpPgo8bGk+QWxsb3cgdGhlIGNvbnN0IHN0cmluZyZhbXA7IGNvbnN0cnVjdG9yIHRvIHRocm93LCBidXQgbm90IHRoZQpjb3B5IGNvbnN0cnVjdG9yLiAgSXQncyB0aGUgaW1wbGVtZW50b3IncyByZXNwb25zaWJpbGl0eSB0byBnZXQgaXQKcmlnaHQuICAoQW4gaW1wbGVtZW50b3IgbWlnaHQgdXNlIGEgc2ltcGxlIHJlZmNvdW50IGNsYXNzLik8L2xpPgo8bGk+Q29tcHJvbWlzZSBiZXR3ZWVuIHRoZSB0d286IGFuIGltcGxlbWVudGF0aW9uIGlzIG5vdCBhbGxvd2VkIHRvCnRocm93IGlmIHRoZSBzdHJpbmcncyBsZW5ndGggaXMgbGVzcyB0aGFuIHNvbWUgTiwgYnV0LCBpZiBpdCBkb2Vzbid0CnRocm93LCB0aGUgc3RyaW5nIG11c3QgY29tcGFyZSBlcXVhbCB0byB0aGUgYXJndW1lbnQuPC9saT4KPGxpPkFkZCBhIG5ldyBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIGEgY29uc3QgY2hhcio8L2xpPgo8L3VsPgoKPHA+KE5vdCBhbGwgb2YgdGhlc2Ugb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLik8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPgpDaGFuZ2UgMTkuMS4xIFtsb2dpYy5lcnJvcl0KPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+bmFtZXNwYWNlIHN0ZCB7CiAgY2xhc3MgbG9naWNfZXJyb3IgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCBsb2dpY19lcnJvcihjb25zdCBzdHJpbmcmYW1wOyA8aT53aGF0X2FyZzwvaT4pOwogICAgPGlucz5leHBsaWNpdCBsb2dpY19lcnJvcihjb25zdCBjaGFyKiA8aT53aGF0X2FyZzwvaT4pOzwvaW5zPgogIH07Cn0KPC9wcmU+CjxwPi4uLjwvcD4KPHA+CjxpbnM+PHR0PmxvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIDxpPndoYXRfYXJnPC9pPik7PC90dD48L2lucz4KPC9wPgo8YmxvY2txdW90ZT4KPHA+PGlucz4KLTQtIDxpPkVmZmVjdHM6PC9pPiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBjbGFzcyA8dHQ+bG9naWNfZXJyb3I8L3R0Pi4KPC9pbnM+PC9wPgo8cD48aW5zPgotNS0gPGk+UG9zdGNvbmRpdGlvbjo8L2k+IDx0dD5zdHJjbXAod2hhdCgpLCA8aT53aGF0X2FyZzwvaT4pID09IDA8L3R0Pi4KPC9pbnM+PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDE5LjEuMiBbZG9tYWluLmVycm9yXQo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT5uYW1lc3BhY2Ugc3RkIHsKICBjbGFzcyBkb21haW5fZXJyb3IgOiBwdWJsaWMgbG9naWNfZXJyb3IgewogIHB1YmxpYzoKICAgIGV4cGxpY2l0IGRvbWFpbl9lcnJvcihjb25zdCBzdHJpbmcmYW1wOyA8aT53aGF0X2FyZzwvaT4pOwogICAgPGlucz5leHBsaWNpdCBkb21haW5fZXJyb3IoY29uc3QgY2hhciogPGk+d2hhdF9hcmc8L2k+KTs8L2lucz4KICB9Owp9CjwvcHJlPgo8cD4uLi48L3A+CjxwPgo8aW5zPjx0dD5kb21haW5fZXJyb3IoY29uc3QgY2hhciogPGk+d2hhdF9hcmc8L2k+KTs8L3R0PjwvaW5zPgo8L3A+CjxibG9ja3F1b3RlPgo8cD48aW5zPgotNC0gPGk+RWZmZWN0czo8L2k+IENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIDx0dD5kb21haW5fZXJyb3I8L3R0Pi4KPC9pbnM+PC9wPgo8cD48aW5zPgotNS0gPGk+UG9zdGNvbmRpdGlvbjo8L2k+IDx0dD5zdHJjbXAod2hhdCgpLCA8aT53aGF0X2FyZzwvaT4pID09IDA8L3R0Pi4KPC9pbnM+PC9wPgoKPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDE5LjEuMyBbaW52YWxpZC5hcmd1bWVudF0KPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+bmFtZXNwYWNlIHN0ZCB7CiAgY2xhc3MgaW52YWxpZF9hcmd1bWVudCA6IHB1YmxpYyBsb2dpY19lcnJvciB7CiAgcHVibGljOgogICAgZXhwbGljaXQgaW52YWxpZF9hcmd1bWVudChjb25zdCBzdHJpbmcmYW1wOyA8aT53aGF0X2FyZzwvaT4pOwogICAgPGlucz5leHBsaWNpdCBpbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIDxpPndoYXRfYXJnPC9pPik7PC9pbnM+CiAgfTsKfQo8L3ByZT4KPHA+Li4uPC9wPgo8cD4KPGlucz48dHQ+aW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiA8aT53aGF0X2FyZzwvaT4pOzwvdHQ+PC9pbnM+CjwvcD4KPGJsb2NrcXVvdGU+CjxwPjxpbnM+Ci00LSA8aT5FZmZlY3RzOjwvaT4gQ29uc3RydWN0cyBhbiBvYmplY3Qgb2YgY2xhc3MgPHR0PmludmFsaWRfYXJndW1lbnQ8L3R0Pi4KPC9pbnM+PC9wPgo8cD48aW5zPgotNS0gPGk+UG9zdGNvbmRpdGlvbjo8L2k+IDx0dD5zdHJjbXAod2hhdCgpLCA8aT53aGF0X2FyZzwvaT4pID09IDA8L3R0Pi4KPC9pbnM+PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDE5LjEuNCBbbGVuZ3RoLmVycm9yXQo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT5uYW1lc3BhY2Ugc3RkIHsKICBjbGFzcyBsZW5ndGhfZXJyb3IgOiBwdWJsaWMgbG9naWNfZXJyb3IgewogIHB1YmxpYzoKICAgIGV4cGxpY2l0IGxlbmd0aF9lcnJvcihjb25zdCBzdHJpbmcmYW1wOyA8aT53aGF0X2FyZzwvaT4pOwogICAgPGlucz5leHBsaWNpdCBsZW5ndGhfZXJyb3IoY29uc3QgY2hhciogPGk+d2hhdF9hcmc8L2k+KTs8L2lucz4KICB9Owp9CjwvcHJlPgo8cD4uLi48L3A+CjxwPgo8aW5zPjx0dD5sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogPGk+d2hhdF9hcmc8L2k+KTs8L3R0PjwvaW5zPgo8L3A+CjxibG9ja3F1b3RlPgo8cD48aW5zPgotNC0gPGk+RWZmZWN0czo8L2k+IENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIDx0dD5sZW5ndGhfZXJyb3I8L3R0Pi4KPC9pbnM+PC9wPgo8cD48aW5zPgotNS0gPGk+UG9zdGNvbmRpdGlvbjo8L2k+IDx0dD5zdHJjbXAod2hhdCgpLCA8aT53aGF0X2FyZzwvaT4pID09IDA8L3R0Pi4KPC9pbnM+PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDE5LjEuNSBbb3V0Lm9mLnJhbmdlXQo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT5uYW1lc3BhY2Ugc3RkIHsKICBjbGFzcyBvdXRfb2ZfcmFuZ2UgOiBwdWJsaWMgbG9naWNfZXJyb3IgewogIHB1YmxpYzoKICAgIGV4cGxpY2l0IG91dF9vZl9yYW5nZShjb25zdCBzdHJpbmcmYW1wOyA8aT53aGF0X2FyZzwvaT4pOwogICAgPGlucz5leHBsaWNpdCBvdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogPGk+d2hhdF9hcmc8L2k+KTs8L2lucz4KICB9Owp9CjwvcHJlPgo8cD4uLi48L3A+CjxwPgo8aW5zPjx0dD5vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogPGk+d2hhdF9hcmc8L2k+KTs8L3R0PjwvaW5zPgo8L3A+CjxibG9ja3F1b3RlPgo8cD48aW5zPgotNC0gPGk+RWZmZWN0czo8L2k+IENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIDx0dD5vdXRfb2ZfcmFuZ2U8L3R0Pi4KPC9pbnM+PC9wPgo8cD48aW5zPgotNS0gPGk+UG9zdGNvbmRpdGlvbjo8L2k+IDx0dD5zdHJjbXAod2hhdCgpLCA8aT53aGF0X2FyZzwvaT4pID09IDA8L3R0Pi4KPC9pbnM+PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDE5LjEuNiBbcnVudGltZS5lcnJvcl0KPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+bmFtZXNwYWNlIHN0ZCB7CiAgY2xhc3MgcnVudGltZV9lcnJvciA6IHB1YmxpYyBleGNlcHRpb24gewogIHB1YmxpYzoKICAgIGV4cGxpY2l0IHJ1bnRpbWVfZXJyb3IoY29uc3Qgc3RyaW5nJmFtcDsgPGk+d2hhdF9hcmc8L2k+KTsKICAgIDxpbnM+ZXhwbGljaXQgcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiA8aT53aGF0X2FyZzwvaT4pOzwvaW5zPgogIH07Cn0KPC9wcmU+CjxwPi4uLjwvcD4KPHA+CjxpbnM+PHR0PnJ1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogPGk+d2hhdF9hcmc8L2k+KTs8L3R0PjwvaW5zPgo8L3A+CjxibG9ja3F1b3RlPgo8cD48aW5zPgotNC0gPGk+RWZmZWN0czo8L2k+IENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIDx0dD5ydW50aW1lX2Vycm9yPC90dD4uCjwvaW5zPjwvcD4KPHA+PGlucz4KLTUtIDxpPlBvc3Rjb25kaXRpb246PC9pPiA8dHQ+c3RyY21wKHdoYXQoKSwgPGk+d2hhdF9hcmc8L2k+KSA9PSAwPC90dD4uCjwvaW5zPjwvcD4KPC9ibG9ja3F1b3RlPgoKPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAxOS4xLjcgW3JhbmdlLmVycm9yXQo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT5uYW1lc3BhY2Ugc3RkIHsKICBjbGFzcyByYW5nZV9lcnJvciA6IHB1YmxpYyBydW50aW1lX2Vycm9yIHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCByYW5nZV9lcnJvcihjb25zdCBzdHJpbmcmYW1wOyA8aT53aGF0X2FyZzwvaT4pOwogICAgPGlucz5leHBsaWNpdCByYW5nZV9lcnJvcihjb25zdCBjaGFyKiA8aT53aGF0X2FyZzwvaT4pOzwvaW5zPgogIH07Cn0KPC9wcmU+CjxwPi4uLjwvcD4KPHA+CjxpbnM+PHR0PnJhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIDxpPndoYXRfYXJnPC9pPik7PC90dD48L2lucz4KPC9wPgo8YmxvY2txdW90ZT4KPHA+PGlucz4KLTQtIDxpPkVmZmVjdHM6PC9pPiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBjbGFzcyA8dHQ+cmFuZ2VfZXJyb3I8L3R0Pi4KPC9pbnM+PC9wPgo8cD48aW5zPgotNS0gPGk+UG9zdGNvbmRpdGlvbjo8L2k+IDx0dD5zdHJjbXAod2hhdCgpLCA8aT53aGF0X2FyZzwvaT4pID09IDA8L3R0Pi4KPC9pbnM+PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDE5LjEuOCBbb3ZlcmZsb3cuZXJyb3JdCjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPm5hbWVzcGFjZSBzdGQgewogIGNsYXNzIG92ZXJmbG93X2Vycm9yIDogcHVibGljIHJ1bnRpbWVfZXJyb3IgewogIHB1YmxpYzoKICAgIGV4cGxpY2l0IG92ZXJmbG93X2Vycm9yKGNvbnN0IHN0cmluZyZhbXA7IDxpPndoYXRfYXJnPC9pPik7CiAgICA8aW5zPmV4cGxpY2l0IG92ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIDxpPndoYXRfYXJnPC9pPik7PC9pbnM+CiAgfTsKfQo8L3ByZT4KPHA+Li4uPC9wPgo8cD4KPGlucz48dHQ+b3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogPGk+d2hhdF9hcmc8L2k+KTs8L3R0PjwvaW5zPgo8L3A+CjxibG9ja3F1b3RlPgo8cD48aW5zPgotNC0gPGk+RWZmZWN0czo8L2k+IENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIDx0dD5vdmVyZmxvd19lcnJvcjwvdHQ+Lgo8L2lucz48L3A+CjxwPjxpbnM+Ci01LSA8aT5Qb3N0Y29uZGl0aW9uOjwvaT4gPHR0PnN0cmNtcCh3aGF0KCksIDxpPndoYXRfYXJnPC9pPikgPT0gMDwvdHQ+Lgo8L2lucz48L3A+CjwvYmxvY2txdW90ZT4KCjwvYmxvY2txdW90ZT4KCjxwPgpDaGFuZ2UgMTkuMS45IFt1bmRlcmZsb3cuZXJyb3JdCjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPm5hbWVzcGFjZSBzdGQgewogIGNsYXNzIHVuZGVyZmxvd19lcnJvciA6IHB1YmxpYyBydW50aW1lX2Vycm9yIHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCB1bmRlcmZsb3dfZXJyb3IoY29uc3Qgc3RyaW5nJmFtcDsgPGk+d2hhdF9hcmc8L2k+KTsKICAgIDxpbnM+ZXhwbGljaXQgdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIDxpPndoYXRfYXJnPC9pPik7PC9pbnM+CiAgfTsKfQo8L3ByZT4KPHA+Li4uPC9wPgo8cD4KPGlucz48dHQ+dW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIDxpPndoYXRfYXJnPC9pPik7PC90dD48L2lucz4KPC9wPgo8YmxvY2txdW90ZT4KPHA+PGlucz4KLTQtIDxpPkVmZmVjdHM6PC9pPiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBjbGFzcyA8dHQ+dW5kZXJmbG93X2Vycm9yPC90dD4uCjwvaW5zPjwvcD4KPHA+PGlucz4KLTUtIDxpPlBvc3Rjb25kaXRpb246PC9pPiA8dHQ+c3RyY21wKHdoYXQoKSwgPGk+d2hhdF9hcmc8L2k+KSA9PSAwPC90dD4uCjwvaW5zPjwvcD4KPC9ibG9ja3F1b3RlPgoKPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAyNy40LjIuMS4xIFtpb3M6OmZhaWx1cmVdCjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPm5hbWVzcGFjZSBzdGQgewogIGNsYXNzIGlvc19iYXNlOjpmYWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbiB7CiAgcHVibGljOgogICAgZXhwbGljaXQgZmFpbHVyZShjb25zdCBzdHJpbmcmYW1wOyA8aT5tc2c8L2k+KTsKICAgIDxpbnM+ZXhwbGljaXQgZmFpbHVyZShjb25zdCBjaGFyKiA8aT5tc2c8L2k+KTs8L2lucz4KICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7Cn07Cn0KPC9wcmU+CjxwPi4uLjwvcD4KPHA+CjxpbnM+PHR0PmZhaWx1cmUoY29uc3QgY2hhciogPGk+bXNnPC9pPik7PC90dD48L2lucz4KPC9wPgo8YmxvY2txdW90ZT4KPHA+PGlucz4KLTQtIDxpPkVmZmVjdHM6PC9pPiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBjbGFzcyA8dHQ+ZmFpbHVyZTwvdHQ+Lgo8L2lucz48L3A+CjxwPjxpbnM+Ci01LSA8aT5Qb3N0Y29uZGl0aW9uOjwvaT4gPHR0PnN0cmNtcCh3aGF0KCksIDxpPm1zZzwvaT4pID09IDA8L3R0Pi4KPC9pbnM+PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8L2Jsb2NrcXVvdGU+CgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgoKPHA+VGhyb3dpbmcgYSBiYWRfYWxsb2Mgd2hpbGUgdHJ5aW5nIHRvIGNvbnN0cnVjdCBhIG1lc3NhZ2UgZm9yIGFub3RoZXIKZXhjZXB0aW9uLWRlcml2ZWQgY2xhc3MgaXMgbm90IG5lY2Vzc2FyaWx5IGEgYmFkIHRoaW5nLiAgQW5kIHRoZQpiYWRfYWxsb2MgY29uc3RydWN0b3IgYWxyZWFkeSBoYXMgYSBubyB0aHJvdyBzcGVjIG9uIGl0ICgxOC40LjIuMSkuPC9wPgoKPHA+PGI+RnV0dXJlOjwvYj48L3A+Cgo8cD5BbGwgaW52b2x2ZWQgd291bGQgbGlrZSB0byBzZWUgY29uc3QgY2hhciogY29uc3RydWN0b3JzIGFkZGVkLCBidXQKdGhpcyBzaG91bGQgcHJvYmFibHkgYmUgZG9uZSBmb3IgQysrMFggYXMgb3Bwb3NlZCB0byBhIERSLjwvcD4KCjxwPkkgYmVsaWV2ZSB0aGUgbm8gdGhyb3cgc3BlY3MgY3VycmVudGx5IGRlY29yYXRpbmcgdGhlc2UgZnVuY3Rpb25zCmNvdWxkIGJlIGltcHJvdmVkIGJ5IHNvbWUga2luZCBvZiBzdGF0aWMgbm8gdGhyb3cgc3BlYyBjaGVja2luZwptZWNoYW5pc20gKGluIGEgZnV0dXJlIEMrKyBsYW5ndWFnZSkuICBBcyB0aGV5IHN0YW5kLCB0aGUgY29weQpjb25zdHJ1Y3RvcnMgbWlnaHQgZmFpbCB2aWEgYSBjYWxsIHRvIHVuZXhwZWN0ZWQuICBJIHRoaW5rIHdoYXQgaXMKaW50ZW5kZWQgaGVyZSBpcyB0aGF0IHRoZSBjb3B5IGNvbnN0cnVjdG9ycyBjYW4ndCBmYWlsLjwvcD4KCjxwPjxpPltQcmUtU3lkbmV5OiByZW9wZW5lZCBhdCB0aGUgcmVxdWVzdCBvZiBIb3dhcmQgSGlubmFudC4KICBQb3N0LVJlZG1vbmQ6IEphbWVzIEthbnplIG5vdGljZWQgdGhhdCB0aGUgY29weSBjb25zdHJ1Y3RvcnMgb2YKICBleGNlcHRpb24tZGVyaXZlZCBjbGFzc2VzIGRvIG5vdCBoYXZlIG5vdGhyb3cgY2xhdXNlcy4gIFRob3NlCiAgY2xhc3NlcyBoYXZlIG5vIGNvcHkgY29uc3RydWN0b3JzIGRlY2xhcmVkLCBtZWFuaW5nIHRoZQogIGNvbXBpbGVyLWdlbmVyYXRlZCBpbXBsaWNpdCBjb3B5IGNvbnN0cnVjdG9ycyBhcmUgdXNlZCwgYW5kIHRob3NlCiAgY29tcGlsZXItZ2VuZXJhdGVkIGNvbnN0cnVjdG9ycyBtaWdodCBpbiBwcmluY2lwbGUgdGhyb3cgYW55dGhpbmcuXTwvaT48L3A+CgoKPHA+PGk+WwpCYXRhdmlhOiAgTWVyZ2VkIGNvcHkgY29uc3RydWN0b3IgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3Igc3BlYyBpbnRvIDx0dD5leGNlcHRpb248L3R0PgphbmQgYWRkZWQgPHR0Pmlvczo6ZmFpbHVyZTwvdHQ+IGludG8gdGhlIHByb3Bvc2VkIHJlc29sdXRpb24uCl08L2k+PC9wPgoKCjxwPjxpPlsKT3hmb3JkOiAgVGhlIHByb3Bvc2VkIHJlc29sdXRpb24gc2ltcGx5IGFkZHJlc3NlcyB0aGUgaXNzdWUgb2YgY29uc3RydWN0aW5nCnRoZSBleGNlcHRpb24gb2JqZWN0cyB3aXRoIDx0dD5jb25zdCBjaGFyKjwvdHQ+IGFuZCBzdHJpbmcgbGl0ZXJhbHMgd2l0aG91dAp0aGUgbmVlZCB0byBleHBsaWNpdCBpbmNsdWRlIG9yIGNvbnN0cnVjdCBhIDx0dD5zdGQ6OnN0cmluZzwvdHQ+LgpdPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI1NiI+PC9hPjI1Ni4gdHlwbyBpbiAyNy40LjQuMiwgcDE3OiBjb3B5X2V2ZW50IGRvZXMgbm90IGV4aXN0PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjQuNC4yIFtiYXNpYy5pb3MubWVtYmVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAwLTA4LTIxPC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjYmFzaWMuaW9zLm1lbWJlcnMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtiYXNpYy5pb3MubWVtYmVyc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNiYXNpYy5pb3MubWVtYmVycyI+aXNzdWVzPC9hPiBpbiBbYmFzaWMuaW9zLm1lbWJlcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KMjcuNC40LjIsIHAxNyBzYXlzCjwvcD4KCjxibG9ja3F1b3RlPjxwPgotMTctIEJlZm9yZSBjb3B5aW5nIGFueSBwYXJ0cyBvZiByaHMsIGNhbGxzIGVhY2ggcmVnaXN0ZXJlZCBjYWxsYmFjawpwYWlyIChmbixpbmRleCkgYXMgKCpmbikoZXJhc2VfZXZlbnQsKnRoaXMsaW5kZXgpLiBBZnRlciBhbGwgcGFydHMgYnV0CmV4Y2VwdGlvbnMoKSBoYXZlIGJlZW4gcmVwbGFjZWQsIGNhbGxzIGVhY2ggY2FsbGJhY2sgcGFpciB0aGF0IHdhcwpjb3BpZWQgZnJvbSByaHMgYXMgKCpmbikoY29weV9ldmVudCwqdGhpcyxpbmRleCkuIAo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBuYW1lIGNvcHlfZXZlbnQgaXNuJ3QgZGVmaW5lZCBhbnl3aGVyZS4gVGhlIGludGVuZGVkIG5hbWUgd2FzCmNvcHlmbXRfZXZlbnQuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlcGxhY2UgY29weV9ldmVudCB3aXRoIGNvcHlmbXRfZXZlbnQgaW4gdGhlIG5hbWVkIHBhcmFncmFwaC48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyNTgiPjwvYT4yNTguIE1pc3NpbmcgYWxsb2NhdG9yIHJlcXVpcmVtZW50PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjEuMiBbYWxsb2NhdG9yLnJlcXVpcmVtZW50c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAyMDAwLTA4LTIyPC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjYWxsb2NhdG9yLnJlcXVpcmVtZW50cyI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW2FsbG9jYXRvci5yZXF1aXJlbWVudHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxsb2NhdG9yLnJlcXVpcmVtZW50cyI+aXNzdWVzPC9hPiBpbiBbYWxsb2NhdG9yLnJlcXVpcmVtZW50c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpGcm9tIGxpYi03NzUyOgo8L3A+Cgo8cD4KSSd2ZSBiZWVuIGFzc3VtaW5nIChhbmQgcHJvYmFibHkgZXZlcnlvbmUgZWxzZSBoYXMgYmVlbiBhc3N1bWluZykgdGhhdAphbGxvY2F0b3IgaW5zdGFuY2VzIGhhdmUgYSBwYXJ0aWN1bGFyIHByb3BlcnR5LCBhbmQgSSBkb24ndCB0aGluayB0aGF0CnByb3BlcnR5IGNhbiBiZSBkZWR1Y2VkIGZyb20gYW55dGhpbmcgaW4gVGFibGUgMzIuCjwvcD4KCjxwPgpJIHRoaW5rIHdlIGhhdmUgdG8gYXNzdW1lIHRoYXQgYWxsb2NhdG9yIHR5cGUgY29udmVyc2lvbiBpcyBhCmhvbW9tb3JwaGlzbS4gIFRoYXQgaXMsIGlmIHgxIGFuZCB4MiBhcmUgb2YgdHlwZSBYLCB3aGVyZQpYOjp2YWx1ZV90eXBlIGlzIFQsIGFuZCBpZiB0eXBlIFkgaXMgWDo6dGVtcGxhdGUKcmViaW5kJmx0O1UmZ3Q7OjpvdGhlciwgdGhlbiBZKHgxKSA9PSBZKHgyKSBpZiBhbmQgb25seSBpZiB4MSA9PSB4Mi4KPC9wPgoKPHA+CkZ1cnRoZXIgZGlzY3Vzc2lvbjogSG93YXJkIEhpbm5hbnQgd3JpdGVzLCBpbiBsaWItNzc1NzoKPC9wPgoKPHA+CkkgdGhpbmsgSSBjYW4gcHJvdmUgdGhhdCB0aGlzIGlzIG5vdCBwcm92YWJsZSBieSBUYWJsZSAzMi4gIEFuZCBJIGFncmVlIAppdCBuZWVkcyB0byBiZSB0cnVlIGV4Y2VwdCBmb3IgdGhlICJhbmQgb25seSBpZiIuICBJZiB4MSAhPSB4MiwgSSBzZWUgbm8gCnJlYXNvbiB3aHkgaXQgY2FuJ3QgYmUgdHJ1ZSB0aGF0IFkoeDEpID09IFkoeDIpLiAgQWRtaXR0ZWRseSBJIGNhbid0IAp0aGluayBvZiBhIHByYWN0aWNhbCBpbnN0YW5jZSB3aGVyZSB0aGlzIHdvdWxkIGhhcHBlbiwgb3IgYmUgdmFsdWFibGUuICAKQnV0IEkgYWxzbyBkb24ndCBzZWUgYSBuZWVkIHRvIGFkZCB0aGF0IGV4dHJhIHJlc3RyaWN0aW9uLiAgSSB0aGluayB3ZSAKb25seSBuZWVkOgo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAgICBpZiAoeDEgPT0geDIpIHRoZW4gWSh4MSkgPT0gWSh4MikKPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpJZiB3ZSBkZWNpZGUgdGhhdCA9PSBvbiBhbGxvY2F0b3JzIGlzIHRyYW5zaXRpdmUsIHRoZW4gSSB0aGluayBJIGNhbiAKcHJvdmUgdGhlIGFib3ZlLiAgQnV0IEkgZG9uJ3QgdGhpbmsgPT0gaXMgbmVjZXNzYXJpbHkgdHJhbnNpdGl2ZSBvbiAKYWxsb2NhdG9ycy4gIFRoYXQgaXM6CjwvcD4KCjxwPgpHaXZlbiB4MSA9PSB4MiAgYW5kIHgyID09IHgzLCB0aGlzIGRvZXMgbm90IG1lYW4geDEgPT0geDMuCjwvcD4KCjxwPkV4YW1wbGU6PC9wPgoKPGJsb2NrcXVvdGU+CjxwPgp4MSBjYW4gZGVhbGxvY2F0ZSBwb2ludGVycyBmcm9tOiAgeDEsIHgyLCB4MyAgICA8YnI+CngyIGNhbiBkZWFsbG9jYXRlIHBvaW50ZXJzIGZyb206ICB4MSwgeDIsIHg0ICAgIDxicj4KeDMgY2FuIGRlYWxsb2NhdGUgcG9pbnRlcnMgZnJvbTogIHgxLCB4MyAgICAgICAgPGJyPgp4NCBjYW4gZGVhbGxvY2F0ZSBwb2ludGVycyBmcm9tOiAgeDIsIHg0IAo8L3A+Cgo8cD4KeDEgPT0geDIsIGFuZCB4MiA9PSB4NCwgYnV0IHgxICE9IHg0CjwvcD4KPC9ibG9ja3F1b3RlPgo8cD48aT5bVG9yb250bzogTFdHIG1lbWJlcnMgb2ZmZXJlZCBtdWx0aXBsZSBvcGluaW9ucy4gIE9uZQpvcGluaW9uIGlzIHRoYXQgaXQgc2hvdWxkIG5vdCBiZSByZXF1aXJlZCB0aGF0IDx0dD54MSA9PSB4MjwvdHQ+CmltcGxpZXMgPHR0PlkoeDEpID09IFkoeDIpPC90dD4sIGFuZCB0aGF0IGl0IHNob3VsZCBub3QgZXZlbiBiZQpyZXF1aXJlZCB0aGF0IDx0dD5YKHgxKSA9PSB4MTwvdHQ+LiAgQW5vdGhlciBvcGluaW9uIGlzIHRoYXQgCnRoZSBzZWNvbmQgbGluZSBmcm9tIHRoZSBib3R0b20gaW4gdGFibGUgMzIgYWxyZWFkeSBpbXBsaWVzIHRoZQpkZXNpcmVkIHByb3BlcnR5LiAgVGhpcyBpc3N1ZSBzaG91bGQgYmUgY29uc2lkZXJlZCBpbiBsaWdodCBvZgpvdGhlciBpc3N1ZXMgcmVsYXRlZCB0byBhbGxvY2F0b3IgaW5zdGFuY2VzLl08L2k+PC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpBY2NlcHQgcHJvcG9zZWQgd29yZGluZyBmcm9tCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjI0MzYucGRmIj5OMjQzNjwvYT4gcGFydCAzLgo8L3A+CgoKPHA+PGk+W0xpbGxlaGFtbWVyOiBTYW1lIGNvbmNsdXNpb24gYXMgYmVmb3JlOiB0aGlzIHNob3VsZCBiZQogIGNvbnNpZGVyZWQgYXMgcGFydCBvZiBhbiBhbGxvY2F0b3IgcmVkZXNpZ24sIG5vdCBzb2x2ZWQgb24gaXRzIG93bi5dPC9pPjwvcD4KCgo8cD48aT5bCkJhdGF2aWE6ICBBbiBhbGxvY2F0b3IgcmVkZXNpZ24gaXMgbm90IGZvcnRoY29taW5nIGFuZCB0aHVzIHdlIGZpeGVkIHRoaXMgb25lIGlzc3VlLgpdPC9pPjwvcD4KCgo8cD48aT5bClRvcm9udG86ICBSZW9wZW5lZCBhdCB0aGUgcmVxdWVzdCBvZiB0aGUgcHJvamVjdCBlZGl0b3IgKFBldGUpIGJlY2F1c2UgdGhlIHByb3Bvc2VkCndvcmRpbmcgZGlkIG5vdCBmaXQgd2l0aGluIHRoZSBpbmRpY2F0ZWQgdGFibGUuICBUaGUgaW50ZW50IG9mIHRoZSByZXNvbHV0aW9uIHJlbWFpbnMKdW5jaGFuZ2VkLiAgUGFibG8gdG8gd29yayB3aXRoIFBldGUgb24gaW1wcm92ZWQgd29yZGluZy4KXTwvaT48L3A+CgoKPHA+PGk+WwpLb25hICgyMDA3KTogVGhlIExXRyBhZG9wdGVkIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG9mIE4yMzg3IGZvciB0aGlzIGlzc3VlIHdoaWNoCndhcyBzdWJzZXF1ZW50bHkgc3BsaXQgb3V0IGludG8gYSBzZXBhcmF0ZSBwYXBlciBOMjQzNiBmb3IgdGhlIHB1cnBvc2VzIG9mIHZvdGluZy4KVGhlIHJlc29sdXRpb24gaW4gTjI0MzYgYWRkcmVzc2VzIHRoaXMgaXNzdWUuICBUaGUgTFdHIHZvdGVkIHRvIGFjY2VsZXJhdGUgdGhpcwppc3N1ZSB0byBSZWFkeSBzdGF0dXMgdG8gYmUgdm90ZWQgaW50byB0aGUgV1AgYXQgS29uYS4KXTwvaT48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjU5Ij48L2E+MjU5LiA8dHQ+YmFzaWNfc3RyaW5nOjpvcGVyYXRvcltdPC90dD4gYW5kIGNvbnN0IGNvcnJlY3RuZXNzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIxLjMuNCBbc3RyaW5nLmNhcGFjaXR5XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBDaHJpcyBOZXd0b24gIDxiPkRhdGU6PC9iPiAyMDAwLTA4LTI3PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmcuY2FwYWNpdHkiPmlzc3VlczwvYT4gaW4gW3N0cmluZy5jYXBhY2l0eV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgo8aT5QYXJhcGhyYXNlZCBmcm9tIGEgbWVzc2FnZSB0aGF0IENocmlzIE5ld3RvbiBwb3N0ZWQgdG8gY29tcC5zdGQuYysrOjwvaT4KPC9wPgoKPHA+ClRoZSBzdGFuZGFyZCdzIGRlc2NyaXB0aW9uIG9mIDx0dD5iYXNpY19zdHJpbmcmbHQ7Jmd0Ozo6b3BlcmF0b3JbXTwvdHQ+CnNlZW1zIHRvIHZpb2xhdGUgY29uc3QgY29ycmVjdG5lc3MuCjwvcD4KCjxwPgpUaGUgc3RhbmRhcmQgKDIxLjMuNC8xKSBzYXlzIHRoYXQgIklmIDx0dD5wb3MgJmx0OyBzaXplKCk8L3R0PiwKcmV0dXJucyA8dHQ+ZGF0YSgpW3Bvc108L3R0Pi4iIFRoZSB0eXBlcyBkb24ndCB3b3JrLiAgVGhlCnJldHVybiB2YWx1ZSBvZiA8dHQ+ZGF0YSgpPC90dD4gaXMgPHR0PmNvbnN0IGNoYXJUKjwvdHQ+LCBidXQKPHR0Pm9wZXJhdG9yW108L3R0PiBoYXMgYSBub24tY29uc3QgdmVyc2lvbiB3aG9zZSByZXR1cm4gdHlwZSBpcyA8dHQ+cmVmZXJlbmNlPC90dD4uCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiBzZWN0aW9uIDIxLjMuNCwgcGFyYWdyYXBoIDEsIGNoYW5nZQoiPHR0PmRhdGEoKVs8aT5wb3M8L2k+XTwvdHQ+IiB0byAiPHR0PiooYmVnaW4oKSArCjxpPnBvczwvaT4pPC90dD4iLgo8L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyNjAiPjwvYT4yNjAuIEluY29uc2lzdGVudCByZXR1cm4gdHlwZSBvZiA8dHQ+aXN0cmVhbV9pdGVyYXRvcjo6b3BlcmF0b3IrKyhpbnQpPC90dD48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjQuNS4xLjIgW2lzdHJlYW0uaXRlcmF0b3Iub3BzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDAtMDgtMjc8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lzdHJlYW0uaXRlcmF0b3Iub3BzIj5pc3N1ZXM8L2E+IGluIFtpc3RyZWFtLml0ZXJhdG9yLm9wc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBzeW5vcHNpcyBvZiBpc3RyZWFtX2l0ZXJhdG9yOjpvcGVyYXRvcisrKGludCkgaW4gMjQuNS4xIHNob3dzCml0IGFzIHJldHVybmluZyB0aGUgaXRlcmF0b3IgYnkgdmFsdWUuIDI0LjUuMS4yLCBwNSBzaG93cyB0aGUgc2FtZQpvcGVyYXRvciBhcyByZXR1cm5pbmcgdGhlIGl0ZXJhdG9yIGJ5IHJlZmVyZW5jZS4gVGhhdCdzIGluY29ycmVjdApnaXZlbiB0aGUgRWZmZWN0cyBjbGF1c2UgYmVsb3cgKHNpbmNlIGEgdGVtcG9yYXJ5IGlzIHJldHVybmVkKS4gVGhlCmAmYW1wOycgaXMgcHJvYmFibHkganVzdCBhIHR5cG8uPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSBkZWNsYXJhdGlvbiBpbiAyNC41LjEuMiwgcDUgZnJvbTwvcD4KIDxwcmU+IGlzdHJlYW1faXRlcmF0b3ImbHQ7VCxjaGFyVCx0cmFpdHMsRGlzdGFuY2UmZ3Q7JmFtcDsgb3BlcmF0b3IrKyhpbnQpOwogPC9wcmU+CjxwPnRvPC9wPgogPHByZT4gaXN0cmVhbV9pdGVyYXRvciZsdDtULGNoYXJULHRyYWl0cyxEaXN0YW5jZSZndDsgb3BlcmF0b3IrKyhpbnQpOwogPC9wcmU+CjxwPih0aGF0IGlzLCByZW1vdmUgdGhlIGAmYW1wOycpLjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI2MSI+PC9hPjI2MS4gTWlzc2luZyBkZXNjcmlwdGlvbiBvZiA8dHQ+aXN0cmVhbV9pdGVyYXRvcjo6b3BlcmF0b3IhPTwvdHQ+PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI0LjUuMS4yIFtpc3RyZWFtLml0ZXJhdG9yLm9wc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAwLTA4LTI3PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpc3RyZWFtLml0ZXJhdG9yLm9wcyI+aXNzdWVzPC9hPiBpbiBbaXN0cmVhbS5pdGVyYXRvci5vcHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KMjQuNS4xLCBwMyBsaXN0cyB0aGUgc3lub3BzaXMgZm9yCjwvcD4KCjxwcmU+ICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIERpc3RhbmNlJmd0OwogICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJmx0O1QsY2hhclQsdHJhaXRzLERpc3RhbmNlJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImbHQ7VCxjaGFyVCx0cmFpdHMsRGlzdGFuY2UmZ3Q7JmFtcDsgeSk7CjwvcHJlPgoKPHA+CmJ1dCB0aGVyZSBpcyBubyBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBvcGVyYXRvciBkb2VzIChpLmUuLCBubyBFZmZlY3RzCm9yIFJldHVybnMgY2xhdXNlKSBpbiAyNC41LjEuMi4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkZCBwYXJhZ3JhcGggNyB0byB0aGUgZW5kIG9mIHNlY3Rpb24gMjQuNS4xLjIgd2l0aCB0aGUgZm9sbG93aW5nIHRleHQ6CjwvcD4KCjxwcmU+ICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIERpc3RhbmNlJmd0OwogICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJmx0O1QsY2hhclQsdHJhaXRzLERpc3RhbmNlJmd0OyZhbXA7IHgsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImbHQ7VCxjaGFyVCx0cmFpdHMsRGlzdGFuY2UmZ3Q7JmFtcDsgeSk7CjwvcHJlPgoKPHA+LTctIFJldHVybnM6ICEoeCA9PSB5KS48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyNjIiPjwvYT4yNjIuIEJpdG1hc2sgb3BlcmF0b3IgfiBzcGVjaWZpZWQgaW5jb3JyZWN0bHk8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTcuMy4yLjEuMiBbYml0bWFzay50eXBlc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQmVtYW4gRGF3ZXMgPGI+RGF0ZTo8L2I+IDIwMDAtMDktMDM8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSB+IG9wZXJhdGlvbiBzaG91bGQgYmUgYXBwbGllZCBhZnRlciB0aGUgY2FzdCB0byBpbnRfdHlwZS4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAxNy4zLjIuMS4yIFtsaWIuYml0bWFzay50eXBlc10gb3BlcmF0b3J+IGZyb206CjwvcD4KCjxwcmU+ICAgYml0bWFzayBvcGVyYXRvcn4gKCBiaXRtYXNrIFggKQogICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0Jmx0OyBiaXRtYXNrJmd0OyhzdGF0aWNfY2FzdCZsdDtpbnRfdHlwZSZndDsofiBYKSk7IH0KPC9wcmU+Cgo8cD4KdG86CjwvcD4KCjxwcmU+ICAgYml0bWFzayBvcGVyYXRvcn4gKCBiaXRtYXNrIFggKQogICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0Jmx0OyBiaXRtYXNrJmd0Oyh+c3RhdGljX2Nhc3QmbHQ7aW50X3R5cGUmZ3Q7KFgpKTsgfQo8L3ByZT4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI2MyI+PC9hPjI2My4gU2V2ZXJlIHJlc3RyaWN0aW9uIG9uIDx0dD5iYXNpY19zdHJpbmc8L3R0PiByZWZlcmVuY2UgY291bnRpbmc8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjEuMyBbYmFzaWMuc3RyaW5nXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBLZXZsaW4gSGVubmV5IDxiPkRhdGU6PC9iPiAyMDAwLTA5LTA0PC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjYmFzaWMuc3RyaW5nIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbYmFzaWMuc3RyaW5nXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2Jhc2ljLnN0cmluZyI+aXNzdWVzPC9hPiBpbiBbYmFzaWMuc3RyaW5nXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBub3RlIGluIHBhcmFncmFwaCA2IHN1Z2dlc3RzIHRoYXQgdGhlIGludmFsaWRhdGlvbiBydWxlcyBmb3IKcmVmZXJlbmNlcywgcG9pbnRlcnMsIGFuZCBpdGVyYXRvcnMgaW4gcGFyYWdyYXBoIDUgcGVybWl0IGEgcmVmZXJlbmNlLQpjb3VudGVkIGltcGxlbWVudGF0aW9uIChhY3R1YWxseSwgYWNjb3JkaW5nIHRvIHBhcmFncmFwaCA2LCB0aGV5IHBlcm1pdAphICJyZWZlcmVuY2UgY291bnRlZCBpbXBsZW1lbnRhdGlvbiIsIGJ1dCB0aGlzIGlzIGEgbWlub3IgZWRpdG9yaWFsIGZpeCkuCjwvcD4KCjxwPgpIb3dldmVyLCB0aGUgbGFzdCBzdWItYnVsbGV0IGlzIHNvIHdvcmRlZCBhcyB0byBtYWtlIGEgcmVmZXJlbmNlLWNvdW50ZWQKaW1wbGVtZW50YXRpb24gdW52aWFibGUuIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBub25lIG9mIHRoZQpjb25kaXRpb25zIGZvciBpdGVyYXRvciBpbnZhbGlkYXRpb24gYXJlIHNhdGlzZmllZDoKPC9wPgoKPHByZT4gICAgLy8gZmlyc3QgZXhhbXBsZTogIioqKioqKioqKioqKioqKioqKioiIHNob3VsZCBiZSBwcmludGVkIHR3aWNlCiAgICBzdHJpbmcgb3JpZ2luYWwgPSAic29tZSBhcmJpdHJhcnkgdGV4dCIsIGNvcHkgPSBvcmlnaW5hbDsKICAgIGNvbnN0IHN0cmluZyAmYW1wOyBhbGlhcyA9IG9yaWdpbmFsOwoKICAgIHN0cmluZzo6Y29uc3RfaXRlcmF0b3IgaSA9IGFsaWFzLmJlZ2luKCksIGUgPSBhbGlhcy5lbmQoKTsKICAgIGZvcihzdHJpbmc6Oml0ZXJhdG9yIGogPSBvcmlnaW5hbC5iZWdpbigpOyBqICE9IG9yaWdpbmFsLmVuZCgpOyArK2opCiAgICAgICAgKmogPSAnKic7CiAgICB3aGlsZShpICE9IGUpCiAgICAgICAgY291dCAmbHQ7Jmx0OyAqaSsrOwogICAgY291dCAmbHQ7Jmx0OyBlbmRsOwogICAgY291dCAmbHQ7Jmx0OyBvcmlnaW5hbCAmbHQ7Jmx0OyBlbmRsOwo8L3ByZT4KCjxwPgpTaW1pbGFybHksIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKPC9wPgoKPHByZT4gICAgLy8gc2Vjb25kIGV4YW1wbGU6ICJzb21lIGFyYml0cmFyeSB0ZXh0IiBzaG91bGQgYmUgcHJpbnRlZCBvdXQKICAgIHN0cmluZyBvcmlnaW5hbCA9ICJzb21lIGFyYml0cmFyeSB0ZXh0IiwgY29weSA9IG9yaWdpbmFsOwogICAgY29uc3Qgc3RyaW5nICZhbXA7IGFsaWFzID0gb3JpZ2luYWw7CgogICAgc3RyaW5nOjpjb25zdF9pdGVyYXRvciBpID0gYWxpYXMuYmVnaW4oKTsKICAgIG9yaWdpbmFsLmJlZ2luKCk7CiAgICB3aGlsZShpICE9IGFsaWFzLmVuZCgpKQogICAgICAgIGNvdXQgJmx0OyZsdDsgKmkrKzsKPC9wcmU+Cgo8cD4KSSBoYXZlIHRlc3RlZCB0aGlzIG9uIHRocmVlIHN0cmluZyBpbXBsZW1lbnRhdGlvbnMsIHR3byBvZiB3aGljaCB3ZXJlCnJlZmVyZW5jZSBjb3VudGVkLiBUaGUgcmVmZXJlbmNlLWNvdW50ZWQgaW1wbGVtZW50YXRpb25zIGdhdmUKInN1cnByaXNpbmcgYmVoYXZpb3IiIGJlY2F1c2UgdGhleSBpbnZhbGlkYXRlZCBpdGVyYXRvcnMgb24KdGhlIGZpcnN0IGNhbGwgdG8gbm9uLWNvbnN0IGJlZ2luIHNpbmNlIGNvbnN0cnVjdGlvbi4gVGhlIGN1cnJlbnQKd29yZGluZyBkb2VzIG5vdCBwZXJtaXQgc3VjaCBpbnZhbGlkYXRpb24gYmVjYXVzZSBpdCBkb2VzIG5vdCB0YWtlCmludG8gYWNjb3VudCB0aGUgZmlyc3QgY2FsbCBzaW5jZSBjb25zdHJ1Y3Rpb24sIG9ubHkgdGhlIGZpcnN0IGNhbGwKc2luY2UgdmFyaW91cyBtZW1iZXIgYW5kIG5vbi1tZW1iZXIgZnVuY3Rpb24gY2FsbHMuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgdGhlIGZvbGxvd2luZyBzZW50ZW5jZSBpbiAyMS4zIHBhcmFncmFwaCA1IGZyb20KPC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgICBTdWJzZXF1ZW50IHRvIGFueSBvZiB0aGUgYWJvdmUgdXNlcyBleGNlcHQgdGhlIGZvcm1zIG9mIGluc2VydCgpIGFuZAogICAgZXJhc2UoKSB3aGljaCByZXR1cm4gaXRlcmF0b3JzLCB0aGUgZmlyc3QgY2FsbCB0byBub24tY29uc3QgbWVtYmVyCiAgICBmdW5jdGlvbnMgb3BlcmF0b3JbXSgpLCBhdCgpLCBiZWdpbigpLCByYmVnaW4oKSwgZW5kKCksIG9yIHJlbmQoKS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgICBGb2xsb3dpbmcgY29uc3RydWN0aW9uIG9yIGFueSBvZiB0aGUgYWJvdmUgdXNlcywgZXhjZXB0IHRoZSBmb3JtcyBvZgogICAgaW5zZXJ0KCkgYW5kIGVyYXNlKCkgdGhhdCByZXR1cm4gaXRlcmF0b3JzLCB0aGUgZmlyc3QgY2FsbCB0byBub24tCiAgICBjb25zdCBtZW1iZXIgZnVuY3Rpb25zIG9wZXJhdG9yW10oKSwgYXQoKSwgYmVnaW4oKSwgcmJlZ2luKCksIGVuZCgpLAogICAgb3IgcmVuZCgpLgo8L3A+PC9ibG9ja3F1b3RlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjY0Ij48L2E+MjY0LiBBc3NvY2lhdGl2ZSBjb250YWluZXIgPHR0Pmluc2VydChpLCBqKTwvdHQ+IGNvbXBsZXhpdHkgcmVxdWlyZW1lbnRzIGFyZSBub3QgZmVhc2libGUuPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjEuNCBbYXNzb2NpYXRpdmUucmVxbXRzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBKb2huIFBvdHRlciA8Yj5EYXRlOjwvYj4gMjAwMC0wOS0wNzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYXNzb2NpYXRpdmUucmVxbXRzIj5pc3N1ZXM8L2E+IGluIFthc3NvY2lhdGl2ZS5yZXFtdHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RHVwbGljYXRlIG9mOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTAyIj4xMDI8L2E+PC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpUYWJsZSA2OSByZXF1aXJlcyBsaW5lYXIgdGltZSBpZiBbaSwgaikgaXMgc29ydGVkLiAgU29ydGVkIGlzIG5lY2Vzc2FyeSBidXQgbm90IHN1ZmZpY2llbnQuCkNvbnNpZGVyIGluc2VydGluZyBhIHNvcnRlZCByYW5nZSBvZiBldmVuIGludGVnZXJzIGludG8gYSBzZXQmbHQ7aW50Jmd0OyBjb250YWluaW5nIHRoZSBvZGQKaW50ZWdlcnMgaW4gdGhlIHNhbWUgcmFuZ2UuCjwvcD4KCjxwPjxpPlJlbGF0ZWQgaXNzdWU6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzEwMiI+MTAyPC9hPjwvaT48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gVGFibGUgNjksIGluIHNlY3Rpb24gMjMuMS4yLCBjaGFuZ2UgdGhlIGNvbXBsZXhpdHkgY2xhdXNlIGZvcgppbnNlcnRpb24gb2YgYSByYW5nZSBmcm9tICJOIGxvZyhzaXplKCkgKyBOKSAoTiBpcyB0aGUgZGlzdGFuY2UKZnJvbSBpIHRvIGopIGluIGdlbmVyYWw7IGxpbmVhciBpZiBbaSwgaikgaXMgc29ydGVkIGFjY29yZGluZyB0bwp2YWx1ZV9jb21wKCkiIHRvICJOIGxvZyhzaXplKCkgKyBOKSwgd2hlcmUgTiBpcyB0aGUgZGlzdGFuY2UKZnJvbSBpIHRvIGoiLgo8L3A+Cgo8cD48aT5bQ29wZW5oYWdlbjogTWlub3IgZml4IGluIHByb3Bvc2VkIHJlc29sdXRpb246IGZpeGVkIHVuYmFsYW5jZWQKcGFyZW5zIGluIHRoZSByZXZpc2VkIHdvcmRpbmcuXTwvaT48L3A+CgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClRlc3RpbmcgZm9yIHZhbGlkIGluc2VydGlvbnMgY291bGQgYmUgbGVzcyBlZmZpY2llbnQgdGhhbiBzaW1wbHkKaW5zZXJ0aW5nIHRoZSBlbGVtZW50cyB3aGVuIHRoZSByYW5nZSBpcyBub3QgYm90aCBzb3J0ZWQgYW5kIGJldHdlZW4KdHdvIGFkamFjZW50IGV4aXN0aW5nIGVsZW1lbnRzOyB0aGlzIGNvdWxkIGJlIGEgUU9JIGlzc3VlLgo8L3A+Cgo8cD4gClRoZSBMV0cgY29uc2lkZXJlZCB0d28gb3RoZXIgb3B0aW9uczogKGEpIHNwZWNpZnlpbmcgdGhhdCB0aGUKY29tcGxleGl0eSB3YXMgbGluZWFyIGlmIFtpLCBqKSBpcyBzb3J0ZWQgYWNjb3JkaW5nIHRvIHZhbHVlX2NvbXAoKQphbmQgYmV0d2VlbiB0d28gYWRqYWNlbnQgZXhpc3RpbmcgZWxlbWVudHM7IG9yIChiKSBjaGFuZ2luZyB0bwpLbG9nKHNpemUoKSArIE4pICsgKE4gLSBLKSAoTiBpcyB0aGUgZGlzdGFuY2UgZnJvbSBpIHRvIGogYW5kIEsgaXMgdGhlCm51bWJlciBvZiBlbGVtZW50cyB3aGljaCBkbyBub3QgaW5zZXJ0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBwcmV2aW91cwplbGVtZW50IGZyb20gW2ksIGopIGluY2x1ZGluZyB0aGUgZmlyc3QpLiAgVGhlIExXRyBmZWx0IHRoYXQsIHNpbmNlCndlIGNhbid0IGd1YXJhbnRlZSBsaW5lYXIgdGltZSBjb21wbGV4aXR5IHdoZW5ldmVyIHRoZSByYW5nZSB0byBiZQppbnNlcnRlZCBpcyBzb3J0ZWQsIGl0J3MgbW9yZSB0cm91YmxlIHRoYW4gaXQncyB3b3J0aCB0byBzYXkgdGhhdCBpdCdzCmxpbmVhciBpbiBzb21lIHNwZWNpYWwgY2FzZXMuCjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI2NSI+PC9hPjI2NS4gc3RkOjpwYWlyOjpwYWlyKCkgZWZmZWN0cyBvdmVybHkgcmVzdHJpY3RpdmU8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAuMi4zIFtwYWlyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAwLTA5LTExPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNwYWlycyI+aXNzdWVzPC9hPiBpbiBbcGFpcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSSBkb24ndCBzZWUgYW55IHJlcXVpcmVtZW50cyBvbiB0aGUgdHlwZXMgb2YgdGhlIGVsZW1lbnRzIG9mIHRoZQpzdGQ6OnBhaXIgY29udGFpbmVyIGluIDIwLjIuMi4gRnJvbSB0aGUgZGVzY3JpcHRpb25zIG9mIHRoZSBtZW1iZXIKZnVuY3Rpb25zIGl0IGFwcGVhcnMgdGhhdCB0aGV5IG11c3QgYXQgbGVhc3Qgc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIG9mCjIwLjEuMyBbbGliLmNvcHljb25zdHJ1Y3RpYmxlXSBhbmQgMjAuMS40IFtsaWIuZGVmYXVsdC5jb24ucmVxXSwgYW5kIGluCnRoZSBjYXNlIG9mIHRoZSBbaW5dZXF1YWxpdHkgb3BlcmF0b3JzIGFsc28gdGhlIHJlcXVpcmVtZW50cyBvZiAyMC4xLjEKW2xpYi5lcXVhbGl0eWNvbXBhcmFibGVdIGFuZCAyMC4xLjIgW2xpYi5sZXNzdGhhbmNvbXBhcmFibGVdLgo8L3A+Cgo8cD4KSSBiZWxpZXZlIHRoYXQgdGhlIHRoZSBDb3B5Q29uc3RydWN0aWJsZSByZXF1aXJlbWVudCBpcyB1bm5lY2Vzc2FyeSBpbgp0aGUgY2FzZSBvZiAyMC4yLjIsIHAyLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIEVmZmVjdHMgY2xhdXNlIGluIDIwLjIuMiwgcDIgZnJvbTwvcD4KCjxibG9ja3F1b3RlPjxwPgotMi0gPGI+RWZmZWN0czwvYj46IEluaXRpYWxpemVzIGl0cyBtZW1iZXJzIGFzIGlmIGltcGxlbWVudGVkOiA8dHQ+IHBhaXIoKSA6CmZpcnN0KFQxKCkpLCBzZWNvbmQoVDIoKSkge30gPC90dD4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+PHA+Ci0yLSA8Yj5FZmZlY3RzPC9iPjogSW5pdGlhbGl6ZXMgaXRzIG1lbWJlcnMgYXMgaWYgaW1wbGVtZW50ZWQ6IDx0dD4gcGFpcigpIDoKZmlyc3QoKSwgc2Vjb25kKCkge30gPC90dD4KPC9wPjwvYmxvY2txdW90ZT4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIGV4aXN0aW5nIHNwZWNpZmljYXRpb24gb2YgcGFpcidzIGNvbnN0cnVjdG9yIGFwcGVhcnMgdG8gYmUgYQpoaXN0b3JpY2FsIGFydGlmYWN0OiB0aGVyZSB3YXMgY29uY2VybiB0aGF0IHBhaXIncyBtZW1iZXJzIGJlIHByb3Blcmx5Cnplcm8taW5pdGlhbGl6ZWQgd2hlbiB0aGV5IGFyZSBidWlsdC1pbiB0eXBlcy4gIEF0IG9uZSB0aW1lIHRoZXJlIHdhcwp1bmNlcnRhaW50eSBhYm91dCB3aGV0aGVyIHRoZXkgd291bGQgYmUgemVyby1pbml0aWFsaXplZCBpZiB0aGUKZGVmYXVsdCBjb25zdHJ1Y3RvciB3YXMgd3JpdHRlbiB0aGUgb2J2aW91cyB3YXkuICBUaGlzIGhhcyBiZWVuCmNsYXJpZmllZCBieSBjb3JlIGlzc3VlIDE3OCwgYW5kIHRoZXJlIGlzIG5vIGxvbmdlciBhbnkgZG91YnQgdGhhdAp0aGUgc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uIGlzIGNvcnJlY3QuPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjY2Ij48L2E+MjY2LiBiYWRfZXhjZXB0aW9uOjp+YmFkX2V4Y2VwdGlvbigpIG1pc3NpbmcgRWZmZWN0cyBjbGF1c2U8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTguNy4yLjEgW2JhZC5leGNlcHRpb25dIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwMC0wOS0yNDwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIHN5bm9wc2lzIGZvciBzdGQ6OmJhZF9leGNlcHRpb24gbGlzdHMgdGhlIGZ1bmN0aW9uIH5iYWRfZXhjZXB0aW9uKCkKYnV0IHRoZXJlIGlzIG5vIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgKHRoZSBFZmZlY3RzCmNsYXVzZSBpcyBtaXNzaW5nKS4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlbW92ZSB0aGUgZGVzdHJ1Y3RvciBmcm9tIHRoZSBjbGFzcyBzeW5vcHNlcyBvZiAKPHR0PmJhZF9hbGxvYzwvdHQ+ICgxOC41LjIuMSBbYmFkLmFsbG9jXSksCjx0dD5iYWRfY2FzdDwvdHQ+ICgxOC42LjIgW2JhZC5jYXN0XSksCjx0dD5iYWRfdHlwZWlkPC90dD4gKDE4LjYuMyBbYmFkLnR5cGVpZF0pLAphbmQgPHR0PmJhZF9leGNlcHRpb248L3R0PiAoMTguNy4yLjEgW2JhZC5leGNlcHRpb25dKS4KPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KVGhpcyBpcyBhIGdlbmVyYWwgcHJvYmxlbSB3aXRoIHRoZSBleGNlcHRpb24gY2xhc3NlcyBpbiBjbGF1c2UgMTguIApUaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBpcyB0byByZW1vdmUgdGhlIGRlc3RydWN0b3JzIGZyb20gdGhlIGNsYXNzCnN5bm9wc2VzLCByYXRoZXIgdGhhbiB0byBkb2N1bWVudCB0aGUgZGVzdHJ1Y3RvcnMnIGJlaGF2aW9yLCBiZWNhdXNlCnJlbW92aW5nIHRoZW0gaXMgbW9yZSBjb25zaXN0ZW50IHdpdGggaG93IGV4Y2VwdGlvbiBjbGFzc2VzIGFyZQpkZXNjcmliZWQgaW4gY2xhdXNlIDE5Lgo8L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyNjgiPjwvYT4yNjguIFR5cG8gaW4gbG9jYWxlIHN5bm9wc2lzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjEuMSBbbG9jYWxlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDAtMTAtMDU8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xvY2FsZSI+aXNzdWVzPC9hPiBpbiBbbG9jYWxlXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIHN5bm9wc2lzIG9mIHRoZSBjbGFzcyBzdGQ6OmxvY2FsZSBpbiAyMi4xLjEgY29udGFpbnMgdHdvIHR5cG9zOgp0aGUgc2VtaWNvbG9ucyBhZnRlciB0aGUgZGVjbGFyYXRpb25zIG9mIHRoZSBkZWZhdWx0IGN0b3IKbG9jYWxlOjpsb2NhbGUoKSBhbmQgdGhlIGNvcHkgY3RvciBsb2NhbGU6OmxvY2FsZShjb25zdCBsb2NhbGUmYW1wOykKYXJlIG1pc3NpbmcuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRoZSBtaXNzaW5nIHNlbWljb2xvbnMsIGkuZS4sIGNoYW5nZTwvcD4KCjxwcmU+ICAgIC8vICBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgogICAgICAgIGxvY2FsZSgpIHRocm93KCkKICAgICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJmFtcDsgb3RoZXIpIHRocm93KCkKPC9wcmU+Cgo8cD5pbiB0aGUgc3lub3BzaXMgaW4gMjIuMS4xIHRvPC9wPgoKPHByZT4gICAgLy8gIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CiAgICAgICAgbG9jYWxlKCkgdGhyb3coKTsKICAgICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJmFtcDsgb3RoZXIpIHRocm93KCk7CjwvcHJlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjcwIj48L2E+MjcwLiBCaW5hcnkgc2VhcmNoIHJlcXVpcmVtZW50cyBvdmVybHkgc3RyaWN0PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI1LjMuMyBbYWxnLmJpbmFyeS5zZWFyY2hdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMjAwMC0xMC0xODwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxnLmJpbmFyeS5zZWFyY2giPmlzc3VlczwvYT4gaW4gW2FsZy5iaW5hcnkuc2VhcmNoXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkR1cGxpY2F0ZSBvZjo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQ3MiI+NDcyPC9hPjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KRWFjaCBvZiB0aGUgZm91ciBiaW5hcnkgc2VhcmNoIGFsZ29yaXRobXMgKGxvd2VyX2JvdW5kLCB1cHBlcl9ib3VuZCwKZXF1YWxfcmFuZ2UsIGJpbmFyeV9zZWFyY2gpIGhhcyBhIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gcGFzcyBhCmNvbXBhcmlzb24gZnVuY3Rpb24gb2JqZWN0LiAgQWNjb3JkaW5nIHRvIDI1LjMsIHBhcmFncmFwaCAyLCB0aGF0CmNvbXBhcmlzb24gZnVuY3Rpb24gb2JqZWN0IGhhcyB0byBiZSBhIHN0cmljdCB3ZWFrIG9yZGVyaW5nLgo8L3A+Cgo8cD4KVGhpcyByZXF1aXJlbWVudCBpcyBzbGlnaHRseSB0b28gc3RyaWN0LiAgU3VwcG9zZSB3ZSBhcmUgc2VhcmNoaW5nCnRocm91Z2ggYSBzZXF1ZW5jZSBjb250YWluaW5nIG9iamVjdHMgb2YgdHlwZSBYLCB3aGVyZSBYIGlzIHNvbWUKbGFyZ2UgcmVjb3JkIHdpdGggYW4gaW50ZWdlciBrZXkuICBXZSBtaWdodCByZWFzb25hYmx5IHdhbnQgdG8gbG9vawp1cCBhIHJlY29yZCBieSBrZXksIGluIHdoaWNoIGNhc2Ugd2Ugd291bGQgd2FudCB0byB3cml0ZSBzb21ldGhpbmcKbGlrZSB0aGlzOgo8L3A+CjxwcmU+ICAgIHN0cnVjdCBrZXlfY29tcCB7CiAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBYJmFtcDsgeCwgaW50IG4pIGNvbnN0IHsKICAgICAgICByZXR1cm4geC5rZXkoKSAmbHQ7IG47CiAgICAgIH0KICAgIH0KCiAgICBzdGQ6Omxvd2VyX2JvdW5kKGZpcnN0LCBsYXN0LCA0Nywga2V5X2NvbXAoKSk7CjwvcHJlPgoKPHA+CmtleV9jb21wIGlzIG5vdCBhIHN0cmljdCB3ZWFrIG9yZGVyaW5nLCBidXQgdGhlcmUgaXMgbm8gcmVhc29uIHRvCnByb2hpYml0IGl0cyB1c2UgaW4gbG93ZXJfYm91bmQuCjwvcD4KCjxwPgpUaGVyZSdzIG5vIGRpZmZpY3VsdHkgaW4gaW1wbGVtZW50aW5nIGxvd2VyX2JvdW5kIHNvIHRoYXQgaXQgYWxsb3dzCnRoZSB1c2Ugb2Ygc29tZXRoaW5nIGxpa2Uga2V5X2NvbXAuICAoSXQgd2lsbCBwcm9iYWJseSB3b3JrIHVubGVzcyBhbgppbXBsZW1lbnRvciB0YWtlcyBzcGVjaWFsIHBhaW5zIHRvIGZvcmJpZCBpdC4pICBXaGF0J3MgZGlmZmljdWx0IGlzCmZvcm11bGF0aW5nIGxhbmd1YWdlIGluIHRoZSBzdGFuZGFyZCB0byBzcGVjaWZ5IHdoYXQga2luZCBvZgpjb21wYXJpc29uIGZ1bmN0aW9uIGlzIGFjY2VwdGFibGUuICBXZSBuZWVkIGEgbm90aW9uIHRoYXQncyBzbGlnaHRseQptb3JlIGdlbmVyYWwgdGhhbiB0aGF0IG9mIGEgc3RyaWN0IHdlYWsgb3JkZXJpbmcsIG9uZSB0aGF0IGNhbiBlbmNvbXBhc3MKYSBjb21wYXJpc29uIGZ1bmN0aW9uIHRoYXQgaW52b2x2ZXMgZGlmZmVyZW50IHR5cGVzLiAgRXhwcmVzc2luZyB0aGF0Cm5vdGlvbiBtYXkgYmUgY29tcGxpY2F0ZWQuCjwvcD4KCjxwPjxpPkFkZGl0aW9uYWwgcXVlc3Rpb25zIHJhaXNlZCBhdCB0aGUgVG9yb250byBtZWV0aW5nOjwvaT48L3A+Cjx1bD4KPGxpPiBEbyB3ZSByZWFsbHkgd2FudCB0byBzcGVjaWZ5IHdoYXQgb3JkZXJpbmcgdGhlIGltcGxlbWVudG9yIG11c3QKICAgICB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbiBvYmplY3Q/ICBUaGUgc3RhbmRhcmQgZ2l2ZXMgCiAgICAgc3BlY2lmaWMgZXhwcmVzc2lvbnMgd2hlbiBkZXNjcmliaW5nIHRoZXNlIGFsZ29yaXRobXMsIGJ1dCBpdCBhbHNvCiAgICAgc2F5cyB0aGF0IG90aGVyIGV4cHJlc3Npb25zICh3aXRoIGRpZmZlcmVudCBhcmd1bWVudCBvcmRlcikgYXJlCiAgICAgZXF1aXZhbGVudC48L2xpPgo8bGk+IElmIHdlIGFyZSBzcGVjaWZ5aW5nIG9yZGVyaW5nLCBub3RlIHRoYXQgdGhlIHN0YW5kYXJkIHVzZXMgYm90aAogICAgIG9yZGVyaW5ncyB3aGVuIGRlc2NyaWJpbmcgPHR0PmVxdWFsX3JhbmdlPC90dD4uPC9saT4KPGxpPiBBcmUgd2UgdGFsa2luZyBhYm91dCByZXF1aXJpbmcgdGhlc2UgYWxnb3JpdGhtcyB0byB3b3JrIHByb3Blcmx5CiAgICAgd2hlbiBwYXNzZWQgYSBiaW5hcnkgZnVuY3Rpb24gb2JqZWN0IHdob3NlIHR3byBhcmd1bWVudCB0eXBlcwogICAgIGFyZSBub3QgdGhlIHNhbWUsIG9yIGFyZSB3ZSB0YWxraW5nIGFib3V0IHJlcXVpcmVtZW50cyB3aGVuCiAgICAgdGhleSBhcmUgcGFzc2VkIGEgYmluYXJ5IGZ1bmN0aW9uIG9iamVjdCB3aXRoIHNldmVyYWwgb3ZlcmxvYWRlZAogICAgIHZlcnNpb25zIG9mIDx0dD5vcGVyYXRvcigpPC90dD4/PC9saT4KPGxpPiBUaGUgZGVmaW5pdGlvbiBvZiBhIHN0cmljdCB3ZWFrIG9yZGVyaW5nIGRvZXMgbm90IGFwcGVhciB0byBnaXZlCiAgICAgYW55IGd1aWRhbmNlIG9uIGlzc3VlcyBvZiBvdmVybG9hZGluZzsgaXQgb25seSBkaXNjdXNzZXMgZXhwcmVzc2lvbnMsCiAgICAgYW5kIGFsbCBvZiB0aGUgdmFsdWVzIGluIHRoZXNlIGV4cHJlc3Npb25zIGFyZSBvZiB0aGUgc2FtZSB0eXBlLgogICAgIFNvbWUgY2xhcmlmaWNhdGlvbiB3b3VsZCBzZWVtIHRvIGJlIGluIG9yZGVyLjwvbGk+CjwvdWw+Cgo8cD48aT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gZnJvbSBDb3BlbmhhZ2VuOjwvaT48L3A+Cjx1bD4KPGxpPkl0IHdhcyBnZW5lcmFsbHkgYWdyZWVkIHRoYXQgdGhlcmUgaXMgYSByZWFsIGRlZmVjdCBoZXJlOiBpZgp0aGUgcHJlZGljYXRlIGlzIG1lcmVseSByZXF1aXJlZCB0byBiZSBhIFN0cmljdCBXZWFrIE9yZGVyaW5nLCB0aGVuCml0J3MgcG9zc2libGUgdG8gcGFzcyBpbiBhIGZ1bmN0aW9uIG9iamVjdCB3aXRoIGFuIG92ZXJsb2FkZWQKb3BlcmF0b3IoKSwgd2hlcmUgdGhlIHZlcnNpb24gdGhhdCdzIGFjdHVhbGx5IGNhbGxlZCBkb2VzIHNvbWV0aGluZwpjb21wbGV0ZWx5IGluYXBwcm9wcmlhdGUuICAoU3VjaCBhcyByZXR1cm5pbmcgYSByYW5kb20gdmFsdWUuKTwvbGk+Cgo8bGk+QW4gYWx0ZXJuYXRpdmUgZm9ybXVsYXRpb24gd2FzIHByZXNlbnRlZCBpbiBhIHBhcGVyIGRpc3RyaWJ1dGVkIGJ5CkRhdmlkIEFicmFoYW1zIGF0IHRoZSBtZWV0aW5nLCAiQmluYXJ5IFNlYXJjaCB3aXRoIEhldGVyb2dlbmVvdXMKQ29tcGFyaXNvbiIsIEoxNi0wMS8wMDI3ID0gV0cyMSBOMTMxMzogSW5zdGVhZCBvZiB2aWV3aW5nIHRoZQpwcmVkaWNhdGUgYXMgYSBTdHJpY3QgV2VhayBPcmRlcmluZyBhY3Rpbmcgb24gYSBzb3J0ZWQgc2VxdWVuY2UsIHZpZXcKdGhlIHByZWRpY2F0ZS92YWx1ZSBwYWlyIGFzIHNvbWV0aGluZyB0aGF0IHBhcnRpdGlvbnMgYSBzZXF1ZW5jZS4KVGhpcyBpcyBhbG1vc3QgZXF1aXZhbGVudCB0byBzYXlpbmcgdGhhdCB3ZSBzaG91bGQgdmlldyBiaW5hcnkgc2VhcmNoCmFzIGlmIHdlIGFyZSBnaXZlbiBhIHVuYXJ5IHByZWRpY2F0ZSBhbmQgYSBzZXF1ZW5jZSwgc3VjaCB0aGF0IGYoKnApCmlzIHRydWUgZm9yIGFsbCBwIGJlbG93IGEgc3BlY2lmaWMgcG9pbnQgYW5kIGZhbHNlIGZvciBhbGwgcCBhYm92ZSBpdC4KVGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgYmFzZWQgb24gdGhhdCBhbHRlcm5hdGl2ZSBmb3JtdWxhdGlvbi48L2xpPgo8L3VsPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkNoYW5nZSAyNS4zIFtsaWIuYWxnLnNvcnRpbmddIHBhcmFncmFwaCAzIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgMyBGb3IgYWxsIGFsZ29yaXRobXMgdGhhdCB0YWtlIENvbXBhcmUsIHRoZXJlIGlzIGEgdmVyc2lvbiB0aGF0IHVzZXMKICBvcGVyYXRvciZsdDsgaW5zdGVhZC4gVGhhdCBpcywgY29tcCgqaSwgKmopICE9IGZhbHNlIGRlZmF1bHRzIHRvICppICZsdDsKICAqaiAhPSBmYWxzZS4gRm9yIHRoZSBhbGdvcml0aG1zIHRvIHdvcmsgY29ycmVjdGx5LCBjb21wIGhhcyB0bwogIGluZHVjZSBhIHN0cmljdCB3ZWFrIG9yZGVyaW5nIG9uIHRoZSB2YWx1ZXMuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAzIEZvciBhbGwgYWxnb3JpdGhtcyB0aGF0IHRha2UgQ29tcGFyZSwgdGhlcmUgaXMgYSB2ZXJzaW9uIHRoYXQgdXNlcwogIG9wZXJhdG9yJmx0OyBpbnN0ZWFkLiBUaGF0IGlzLCBjb21wKCppLCAqaikgIT0gZmFsc2UgZGVmYXVsdHMgdG8gKmkKICAmbHQ7ICpqICE9IGZhbHNlLiBGb3IgYWxnb3JpdGhtcyBvdGhlciB0aGFuIHRob3NlIGRlc2NyaWJlZCBpbgogIGxpYi5hbGcuYmluYXJ5LnNlYXJjaCAoMjUuMy4zKSB0byB3b3JrIGNvcnJlY3RseSwgY29tcCBoYXMgdG8gaW5kdWNlCiAgYSBzdHJpY3Qgd2VhayBvcmRlcmluZyBvbiB0aGUgdmFsdWVzLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+QWRkIHRoZSBmb2xsb3dpbmcgcGFyYWdyYXBoIGFmdGVyIDI1LjMgW2xpYi5hbGcuc29ydGluZ10gcGFyYWdyYXBoIDU6PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgLTYtIEEgc2VxdWVuY2UgW3N0YXJ0LCBmaW5pc2gpIGlzIHBhcnRpdGlvbmVkIHdpdGggcmVzcGVjdCB0byBhbgogIGV4cHJlc3Npb24gZihlKSBpZiB0aGVyZSBleGlzdHMgYW4gaW50ZWdlciBuIHN1Y2ggdGhhdAogIGZvciBhbGwgMCAmbHQ7PSBpICZsdDsgZGlzdGFuY2Uoc3RhcnQsIGZpbmlzaCksIGYoKihiZWdpbitpKSkgaXMgdHJ1ZSBpZgogIGFuZCBvbmx5IGlmIGkgJmx0OyBuLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIDI1LjMuMyBbbGliLmFsZy5iaW5hcnkuc2VhcmNoXSBwYXJhZ3JhcGggMSBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPjxwPgogIC0xLSBBbGwgb2YgdGhlIGFsZ29yaXRobXMgaW4gdGhpcyBzZWN0aW9uIGFyZSB2ZXJzaW9ucyBvZiBiaW5hcnkKICAgc2VhcmNoIGFuZCBhc3N1bWUgdGhhdCB0aGUgc2VxdWVuY2UgYmVpbmcgc2VhcmNoZWQgaXMgaW4gb3JkZXIKICAgYWNjb3JkaW5nIHRvIHRoZSBpbXBsaWVkIG9yIGV4cGxpY2l0IGNvbXBhcmlzb24gZnVuY3Rpb24uIFRoZXkgd29yawogICBvbiBub24tcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mCiAgIGNvbXBhcmlzb25zLCB3aGljaCB3aWxsIGJlIGxvZ2FyaXRobWljIGZvciBhbGwgdHlwZXMgb2YKICAgaXRlcmF0b3JzLiBUaGV5IGFyZSBlc3BlY2lhbGx5IGFwcHJvcHJpYXRlIGZvciByYW5kb20gYWNjZXNzCiAgIGl0ZXJhdG9ycywgYmVjYXVzZSB0aGVzZSBhbGdvcml0aG1zIGRvIGEgbG9nYXJpdGhtaWMgbnVtYmVyIG9mCiAgIHN0ZXBzIHRocm91Z2ggdGhlIGRhdGEgc3RydWN0dXJlLiBGb3Igbm9uLXJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCiAgIHRoZXkgZXhlY3V0ZSBhIGxpbmVhciBudW1iZXIgb2Ygc3RlcHMuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAgLTEtIEFsbCBvZiB0aGUgYWxnb3JpdGhtcyBpbiB0aGlzIHNlY3Rpb24gYXJlIHZlcnNpb25zIG9mIGJpbmFyeQogICAgc2VhcmNoIGFuZCBhc3N1bWUgdGhhdCB0aGUgc2VxdWVuY2UgYmVpbmcgc2VhcmNoZWQgaXMgcGFydGl0aW9uZWQKICAgIHdpdGggcmVzcGVjdCB0byBhbiBleHByZXNzaW9uIGZvcm1lZCBieSBiaW5kaW5nIHRoZSBzZWFyY2gga2V5IHRvCiAgICBhbiBhcmd1bWVudCBvZiB0aGUgaW1wbGllZCBvciBleHBsaWNpdCBjb21wYXJpc29uIGZ1bmN0aW9uLiBUaGV5CiAgICB3b3JrIG9uIG5vbi1yYW5kb20gYWNjZXNzIGl0ZXJhdG9ycyBtaW5pbWl6aW5nIHRoZSBudW1iZXIgb2YKICAgIGNvbXBhcmlzb25zLCB3aGljaCB3aWxsIGJlIGxvZ2FyaXRobWljIGZvciBhbGwgdHlwZXMgb2YKICAgIGl0ZXJhdG9ycy4gVGhleSBhcmUgZXNwZWNpYWxseSBhcHByb3ByaWF0ZSBmb3IgcmFuZG9tIGFjY2VzcwogICAgaXRlcmF0b3JzLCBiZWNhdXNlIHRoZXNlIGFsZ29yaXRobXMgZG8gYSBsb2dhcml0aG1pYyBudW1iZXIgb2YKICAgIHN0ZXBzIHRocm91Z2ggdGhlIGRhdGEgc3RydWN0dXJlLiBGb3Igbm9uLXJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCiAgICB0aGV5IGV4ZWN1dGUgYSBsaW5lYXIgbnVtYmVyIG9mIHN0ZXBzLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIDI1LjMuMy4xIFtsaWIubG93ZXIuYm91bmRdIHBhcmFncmFwaCAxIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgIC0xLSBSZXF1aXJlczogVHlwZSBUIGlzIExlc3NUaGFuQ29tcGFyYWJsZQogICAgKGxpYi5sZXNzdGhhbmNvbXBhcmFibGUpLiAKPC9wPjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPjxwPgogICAtMS0gUmVxdWlyZXM6IFRoZSBlbGVtZW50cyBlIG9mIFtmaXJzdCwgbGFzdCkgYXJlIHBhcnRpdGlvbmVkIHdpdGgKICAgcmVzcGVjdCB0byB0aGUgZXhwcmVzc2lvbiBlICZsdDsgdmFsdWUgb3IgY29tcChlLCB2YWx1ZSkKPC9wPjwvYmxvY2txdW90ZT4KCgo8cD5SZW1vdmUgMjUuMy4zLjEgW2xpYi5sb3dlci5ib3VuZF0gcGFyYWdyYXBoIDI6PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgIC0yLSBFZmZlY3RzOiBGaW5kcyB0aGUgZmlyc3QgcG9zaXRpb24gaW50byB3aGljaCB2YWx1ZSBjYW4gYmUKICAgIGluc2VydGVkIHdpdGhvdXQgdmlvbGF0aW5nIHRoZSBvcmRlcmluZy4gCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD5DaGFuZ2UgMjUuMy4zLjIgW2xpYi51cHBlci5ib3VuZF0gcGFyYWdyYXBoIDEgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAtMS0gUmVxdWlyZXM6IFR5cGUgVCBpcyBMZXNzVGhhbkNvbXBhcmFibGUgKGxpYi5sZXNzdGhhbmNvbXBhcmFibGUpLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgIC0xLSBSZXF1aXJlczogVGhlIGVsZW1lbnRzIGUgb2YgW2ZpcnN0LCBsYXN0KSBhcmUgcGFydGl0aW9uZWQgd2l0aAogICByZXNwZWN0IHRvIHRoZSBleHByZXNzaW9uICEodmFsdWUgJmx0OyBlKSBvciAhY29tcCh2YWx1ZSwgZSkKPC9wPjwvYmxvY2txdW90ZT4KCjxwPlJlbW92ZSAyNS4zLjMuMiBbbGliLnVwcGVyLmJvdW5kXSBwYXJhZ3JhcGggMjo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAgLTItIEVmZmVjdHM6IEZpbmRzIHRoZSBmdXJ0aGVybW9zdCBwb3NpdGlvbiBpbnRvIHdoaWNoIHZhbHVlIGNhbiBiZQogICAgaW5zZXJ0ZWQgd2l0aG91dCB2aW9sYXRpbmcgdGhlIG9yZGVyaW5nLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIDI1LjMuMy4zIFtsaWIuZXF1YWwucmFuZ2VdIHBhcmFncmFwaCAxIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgIC0xLSBSZXF1aXJlczogVHlwZSBUIGlzIExlc3NUaGFuQ29tcGFyYWJsZQogICAgKGxpYi5sZXNzdGhhbmNvbXBhcmFibGUpLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgIC0xLSBSZXF1aXJlczogVGhlIGVsZW1lbnRzIGUgb2YgW2ZpcnN0LCBsYXN0KSBhcmUgcGFydGl0aW9uZWQgd2l0aAogICByZXNwZWN0IHRvIHRoZSBleHByZXNzaW9ucyBlICZsdDsgdmFsdWUgYW5kICEodmFsdWUgJmx0OyBlKSBvcgogICBjb21wKGUsIHZhbHVlKSBhbmQgIWNvbXAodmFsdWUsIGUpLiAgQWxzbywgZm9yIGFsbCBlbGVtZW50cyBlIG9mCiAgIFtmaXJzdCwgbGFzdCksIGUgJmx0OyB2YWx1ZSBpbXBsaWVzICEodmFsdWUgJmx0OyBlKSBvciBjb21wKGUsCiAgIHZhbHVlKSBpbXBsaWVzICFjb21wKHZhbHVlLCBlKQo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIDI1LjMuMy4zIFtsaWIuZXF1YWwucmFuZ2VdIHBhcmFncmFwaCAyIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgIC0yLSBFZmZlY3RzOiBGaW5kcyB0aGUgbGFyZ2VzdCBzdWJyYW5nZSBbaSwgaikgc3VjaCB0aGF0IHRoZSB2YWx1ZQogICAgY2FuIGJlIGluc2VydGVkIGF0IGFueSBpdGVyYXRvciBrIGluIGl0IHdpdGhvdXQgdmlvbGF0aW5nIHRoZQogICAgb3JkZXJpbmcuIGsgc2F0aXNmaWVzIHRoZSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbnM6ICEoKmsgJmx0OyB2YWx1ZSkKICAgICZhbXA7JmFtcDsgISh2YWx1ZSAmbHQ7ICprKSBvciBjb21wKCprLCB2YWx1ZSkgPT0gZmFsc2UgJmFtcDsmYW1wOyBjb21wKHZhbHVlLCAqaykgPT0KICAgIGZhbHNlLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPHByZT4gICAtMi0gUmV0dXJuczogCiAgICAgICAgIG1ha2VfcGFpcihsb3dlcl9ib3VuZChmaXJzdCwgbGFzdCwgdmFsdWUpLAogICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQoZmlyc3QsIGxhc3QsIHZhbHVlKSkKICAgICAgIG9yCiAgICAgICAgIG1ha2VfcGFpcihsb3dlcl9ib3VuZChmaXJzdCwgbGFzdCwgdmFsdWUsIGNvbXApLAogICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQoZmlyc3QsIGxhc3QsIHZhbHVlLCBjb21wKSkKPC9wcmU+Cgo8cD5DaGFuZ2UgMjUuMy4zLjMgW2xpYi5iaW5hcnkuc2VhcmNoXSBwYXJhZ3JhcGggMSBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPjxwPgogICAtMS0gUmVxdWlyZXM6IFR5cGUgVCBpcyBMZXNzVGhhbkNvbXBhcmFibGUKICAgIChsaWIubGVzc3RoYW5jb21wYXJhYmxlKS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPjxwPgogICAtMS0gUmVxdWlyZXM6IFRoZSBlbGVtZW50cyBlIG9mIFtmaXJzdCwgbGFzdCkgYXJlIHBhcnRpdGlvbmVkIHdpdGgKICAgcmVzcGVjdCB0byB0aGUgZXhwcmVzc2lvbnMgZSAmbHQ7IHZhbHVlIGFuZCAhKHZhbHVlICZsdDsgZSkgb3IgY29tcChlLAogICB2YWx1ZSkgYW5kICFjb21wKHZhbHVlLCBlKS4gQWxzbywgZm9yIGFsbCBlbGVtZW50cyBlIG9mIFtmaXJzdCwKICAgbGFzdCksIGUgJmx0OyB2YWx1ZSBpbXBsaWVzICEodmFsdWUgJmx0OyBlKSBvciBjb21wKGUsIHZhbHVlKSBpbXBsaWVzCiAgICFjb21wKHZhbHVlLCBlKQo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+PGk+W0NvcGVuaGFnZW46IERhdmUgQWJyYWhhbXMgcHJvdmlkZWQgdGhpcyB3b3JkaW5nXTwvaT48L3A+CgoKPHA+PGk+W1JlZG1vbmQ6IE1pbm9yIGNoYW5nZXMgaW4gd29yZGluZy4gIChSZW1vdmVkICJub24tbmVnYXRpdmUiLCBhbmQKY2hhbmdlZCB0aGUgIm90aGVyIHRoYW4gdGhvc2UgZGVzY3JpYmVkIGluIiB3b3JkaW5nLikgQWxzbywgdGhlIExXRwpkZWNpZGVkIHRvIGFjY2VwdCB0aGUgIm9wdGlvbmFsIiBwYXJ0Ll08L2k+PC9wPgoKCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIHJlaW50ZXJwcmV0cyBiaW5hcnkgc2VhcmNoLiBJbnN0ZWFkIG9mCnRoaW5raW5nIGFib3V0IHNlYXJjaGluZyBmb3IgYSB2YWx1ZSBpbiBhIHNvcnRlZCByYW5nZSwgd2UgdmlldyB0aGF0CmFzIGFuIGltcG9ydGFudCBzcGVjaWFsIGNhc2Ugb2YgYSBtb3JlIGdlbmVyYWwgYWxnb3JpdGhtOiBzZWFyY2hpbmcKZm9yIHRoZSBwYXJ0aXRpb24gcG9pbnQgaW4gYSBwYXJ0aXRpb25lZCByYW5nZS48L3A+Cgo8cD5XZSBhbHNvIGFkZCBhIGd1YXJhbnRlZSB0aGF0IHRoZSBvbGQgd29yZGluZyBkaWQgbm90OiB3ZSBlbnN1cmUKdGhhdCB0aGUgdXBwZXIgYm91bmQgaXMgbm8gZWFybGllciB0aGFuIHRoZSBsb3dlciBib3VuZCwgdGhhdAp0aGUgcGFpciByZXR1cm5lZCBieSBlcXVhbF9yYW5nZSBpcyBhIHZhbGlkIHJhbmdlLCBhbmQgdGhhdCB0aGUgZmlyc3QKcGFydCBvZiB0aGF0IHBhaXIgaXMgdGhlIGxvd2VyIGJvdW5kLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyNzEiPjwvYT4yNzEuIGJhc2ljX2lvc3RyZWFtIG1pc3NpbmcgdHlwZWRlZnM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNi4xLjUgW2lvc3RyZWFtY2xhc3NdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwMC0xMS0wMjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KQ2xhc3MgdGVtcGxhdGUgYmFzaWNfaW9zdHJlYW0gaGFzIG5vIHR5cGVkZWZzLiAgVGhlIHR5cGVkZWZzIGl0CmluaGVyaXRzIGZyb20gaXRzIGJhc2UgY2xhc3NlcyBjYW4ndCBiZSB1c2VkLCBzaW5jZSAoZm9yIGV4YW1wbGUpCmJhc2ljX2lvc3RyZWFtJmx0O1QmZ3Q7Ojp0cmFpdHNfdHlwZSBpcyBhbWJpZ3VvdXMuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyB0byBiYXNpY19pb3N0cmVhbSdzIGNsYXNzIHN5bm9wc2lzIGluIAoyNy42LjEuNSBbaW9zdHJlYW1jbGFzc10sIGltbWVkaWF0ZWx5IGFmdGVyIDx0dD5wdWJsaWM8L3R0Pjo8L3A+Cgo8cHJlPiAgLy8gdHlwZXM6CiAgdHlwZWRlZiBjaGFyVCAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICB0eXBlZGVmIHRyYWl0cyAgICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU7CjwvcHJlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjcyIj48L2E+MjcyLiBNaXNzaW5nIHBhcmVudGhlc2VzIGFyb3VuZCBzdWJleHByZXNzaW9uPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjQuNC4zIFtpb3N0YXRlLmZsYWdzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDAtMTEtMDI8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lvc3RhdGUuZmxhZ3MiPmlzc3VlczwvYT4gaW4gW2lvc3RhdGUuZmxhZ3NdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RHVwbGljYXRlIG9mOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNTY5Ij41Njk8L2E+PC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgoyNy40LjQuMywgcDQgc2F5cyBhYm91dCB0aGUgcG9zdGNvbmRpdGlvbiBvZiB0aGUgZnVuY3Rpb246IElmCnJkYnVmKCkhPTAgdGhlbiBzdGF0ZSA9PSByZHN0YXRlKCk7IG90aGVyd2lzZQpyZHN0YXRlKCk9PXN0YXRlfGlvc19iYXNlOjpiYWRiaXQuCjwvcD4KCjxwPgpUaGUgZXhwcmVzc2lvbiBvbiB0aGUgcmlnaHQtaGFuZC1zaWRlIG9mIHRoZSBvcGVyYXRvcj09KCkgbmVlZHMgdG8gYmUKcGFyZW50aGVzaXplZCBpbiBvcmRlciBmb3IgdGhlIHdob2xlIGV4cHJlc3Npb24gdG8gZXZlciBldmFsdWF0ZSB0bwphbnl0aGluZyBidXQgbm9uLXplcm8uCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpBZGQgcGFyZW50aGVzZXMgbGlrZSBzbzogcmRzdGF0ZSgpPT0oc3RhdGV8aW9zX2Jhc2U6OmJhZGJpdCkuCjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI3MyI+PC9hPjI3My4gTWlzc2luZyBpb3NfYmFzZSBxdWFsaWZpY2F0aW9uIG9uIG1lbWJlcnMgb2YgYSBkZXBlbmRlbnQgY2xhc3M8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcgW2lucHV0Lm91dHB1dF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAwLTExLTAyPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpbnB1dC5vdXRwdXQiPmlzc3VlczwvYT4gaW4gW2lucHV0Lm91dHB1dF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPjI3LjUuMi40LjIsIHA0LCBhbmQgMjcuOC4xLjYsIHAyLCAyNy44LjEuNywgcDMsIDI3LjguMS45LCBwMiwKMjcuOC4xLjEwLCBwMyByZWZlciB0byBpbiBhbmQvb3Igb3V0IHcvbyBpb3NfYmFzZTo6IHF1YWxpZmljYXRpb24uClRoYXQncyBpbmNvcnJlY3Qgc2luY2UgdGhlIG5hbWVzIGFyZSBtZW1iZXJzIG9mIGEgZGVwZW5kZW50IGJhc2UKY2xhc3MgKDE0LjYuMiBbdGVtcC5kZXBdKSBhbmQgdGh1cyBub3QgdmlzaWJsZS48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5RdWFsaWZ5IHRoZSBuYW1lcyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBvZiB3aGljaCB0aGV5IGFyZQptZW1iZXJzLCBpLmUuLCBpb3NfYmFzZS48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyNzQiPjwvYT4yNzQuIGEgbWlzc2luZy9pbXBvc3NpYmxlIGFsbG9jYXRvciByZXF1aXJlbWVudDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMC4xLjIgW2FsbG9jYXRvci5yZXF1aXJlbWVudHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwMC0xMS0wMjwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI2FsbG9jYXRvci5yZXF1aXJlbWVudHMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFthbGxvY2F0b3IucmVxdWlyZW1lbnRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2FsbG9jYXRvci5yZXF1aXJlbWVudHMiPmlzc3VlczwvYT4gaW4gW2FsbG9jYXRvci5yZXF1aXJlbWVudHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSSBzZWUgdGhhdCB0YWJsZSAzMSBpbiAyMC4xLjUsIHAzIGFsbG93cyBUIGluIHN0ZDo6YWxsb2NhdG9yJmx0O1QmZ3Q7IHRvIGJlIG9mCmFueSB0eXBlLiBCdXQgdGhlIHN5bm9wc2lzIGluIDIwLjQuMSBjYWxscyBmb3IgYWxsb2NhdG9yJmx0OyZndDs6OmFkZHJlc3MoKSB0bwpiZSBvdmVybG9hZGVkIG9uIHJlZmVyZW5jZSBhbmQgY29uc3RfcmVmZXJlbmNlLCB3aGljaCBpcyBpbGwtZm9ybWVkIGZvcgphbGwgVCA9IGNvbnN0IFUuIEluIG90aGVyIHdvcmRzLCB0aGlzIHdvbid0IHdvcms6CjwvcD4KCjxwPgp0ZW1wbGF0ZSBjbGFzcyBzdGQ6OmFsbG9jYXRvciZsdDtjb25zdCBpbnQmZ3Q7Owo8L3A+Cgo8cD4KVGhlIG9idmlvdXMgc29sdXRpb24gaXMgdG8gZGlzYWxsb3cgc3BlY2lhbGl6YXRpb25zIG9mIGFsbG9jYXRvcnMgb24KY29uc3QgdHlwZXMuIEhvd2V2ZXIsIHdoaWxlIGNvbnRhaW5lcnMnIGVsZW1lbnRzIGFyZSByZXF1aXJlZCB0byBiZQphc3NpZ25hYmxlICh3aGljaCBydWxlcyBvdXQgc3BlY2lhbGl6YXRpb25zIG9uIGNvbnN0IFQncyksIEkgdGhpbmsgdGhhdAphbGxvY2F0b3JzIG1pZ2h0IHBlcmhhcHMgYmUgcG90ZW50aWFsbHkgdXNlZnVsIGZvciBjb25zdCB2YWx1ZXMgaW4gb3RoZXIKY29udGV4dHMuIFNvIGlmIGFsbG9jYXRvcnMgYXJlIHRvIGFsbG93IGNvbnN0IHR5cGVzIGEgcGFydGlhbApzcGVjaWFsaXphdGlvbiBvZiBzdGQ6OmFsbG9jYXRvciZsdDtjb25zdCBUJmd0OyB3b3VsZCBwcm9iYWJseSBoYXZlIHRvIGJlCnByb3ZpZGVkLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIHRleHQgaW4gcm93IDEsIGNvbHVtbiAyIG9mIHRhYmxlIDMyIGluIDIwLjEuNSwgcDMgZnJvbTwvcD4KCiAgICA8YmxvY2txdW90ZT48cD4KICAgIGFueSB0eXBlCiAgICA8L3A+PC9ibG9ja3F1b3RlPgoKPHA+dG88L3A+CiAgICA8YmxvY2txdW90ZT48cD4KICAgIGFueSBub24tY29uc3QsIG5vbi1yZWZlcmVuY2UgdHlwZQogICAgPC9wPjwvYmxvY2txdW90ZT4KCjxwPjxpPltSZWRtb25kOiBwcmV2aW91cyBwcm9wb3NlZCByZXNvbHV0aW9uIHdhcyAiYW55IG5vbi1jb25zdCwKbm9uLXZvbGF0aWxlLCBub24tcmVmZXJlbmNlIHR5cGUiLiAgR290IHJpZCBvZiB0aGUgIm5vbi12b2xhdGlsZSIuXTwvaT48L3A+CgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClR3byByZXNvbHV0aW9ucyB3ZXJlIG9yaWdpbmFsbHkgcHJvcG9zZWQ6IG9uZSB0aGF0IHBhcnRpYWxseQpzcGVjaWFsaXplZCBzdGQ6OmFsbG9jYXRvciBmb3IgY29uc3QgdHlwZXMsIGFuZCBvbmUgdGhhdCBzYWlkIGFuCmFsbG9jYXRvcidzIHZhbHVlIHR5cGUgbWF5IG5vdCBiZSBjb25zdC4gIFRoZSBMV0cgY2hvc2UgdGhlIHNlY29uZC4KVGhlIGZpcnN0IHdvdWxkbid0IGJlIGFwcHJvcHJpYXRlLCBiZWNhdXNlIGFsbG9jYXRvcnMgYXJlIGludGVuZGVkIGZvcgp1c2UgYnkgY29udGFpbmVycywgYW5kIGNvbnN0IHZhbHVlIHR5cGVzIGRvbid0IHdvcmsgaW4gY29udGFpbmVycy4KRW5jb3VyYWdpbmcgdGhlIHVzZSBvZiBhbGxvY2F0b3JzIHdpdGggY29uc3QgdmFsdWUgdHlwZXMgd291bGQgb25seQpsZWFkIHRvIHVuc2FmZSBjb2RlLgo8L3A+CjxwPgpUaGUgb3JpZ2luYWwgdGV4dCBmb3IgcHJvcG9zZWQgcmVzb2x1dGlvbiAyIHdhcyBtb2RpZmllZCBzbyB0aGF0IGl0CmFsc28gZm9yYmlkcyB2b2xhdGlsZSB0eXBlcyBhbmQgcmVmZXJlbmNlIHR5cGVzLgo8L3A+Cgo8cD48aT5bQ3VyYedhbzogTFdHIGRvdWJsZSBjaGVja2VkIGFuZCBiZWxpZXZlcyB2b2xhdGlsZSBpcyBjb3JyZWN0bHkKZXhjbHVkZWQgZnJvbSB0aGUgUFIuXTwvaT48L3A+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyNzUiPjwvYT4yNzUuIFdyb25nIHR5cGUgaW4gbnVtX2dldDo6Z2V0KCkgb3ZlcmxvYWRzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMi4xLjEgW2ZhY2V0Lm51bS5nZXQubWVtYmVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAyMDAwLTExLTAyPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmYWNldC5udW0uZ2V0Lm1lbWJlcnMiPmlzc3VlczwvYT4gaW4gW2ZhY2V0Lm51bS5nZXQubWVtYmVyc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJbiAyMi4yLjIuMS4xLCB3ZSBoYXZlIGEgbGlzdCBvZiBvdmVybG9hZHMgZm9yIG51bV9nZXQmbHQ7Jmd0Ozo6Z2V0KCkuClRoZXJlIGFyZSBlaWdodCBvdmVybG9hZHMsIGFsbCBvZiB3aGljaCBhcmUgaWRlbnRpY2FsIGV4Y2VwdCBmb3IgdGhlCmxhc3QgcGFyYW1ldGVyLiAgVGhlIG92ZXJsb2FkcyBhcmU6IAo8L3A+Cjx1bD4KPGxpPiBsb25nJmFtcDsgPC9saT4KPGxpPiB1bnNpZ25lZCBzaG9ydCZhbXA7IDwvbGk+CjxsaT4gdW5zaWduZWQgaW50JmFtcDsgPC9saT4KPGxpPiB1bnNpZ25lZCBsb25nJmFtcDsgPC9saT4KPGxpPiBzaG9ydCZhbXA7IDwvbGk+CjxsaT4gZG91YmxlJmFtcDsgPC9saT4KPGxpPiBsb25nIGRvdWJsZSZhbXA7IDwvbGk+CjxsaT4gdm9pZComYW1wOyA8L2xpPgo8L3VsPgoKPHA+ClRoZXJlIGlzIGEgc2ltaWxhciBsaXN0LCBpbiAyMi4yLjIuMS4yLCBvZiBvdmVybG9hZHMgZm9yCm51bV9nZXQmbHQ7Jmd0Ozo6ZG9fZ2V0KCkuICBJbiB0aGlzIGxpc3QsIHRoZSBsYXN0IHBhcmFtZXRlciBoYXMKdGhlIHR5cGVzOiAKPC9wPgo8dWw+CjxsaT4gbG9uZyZhbXA7IDwvbGk+CjxsaT4gdW5zaWduZWQgc2hvcnQmYW1wOyA8L2xpPgo8bGk+IHVuc2lnbmVkIGludCZhbXA7IDwvbGk+CjxsaT4gdW5zaWduZWQgbG9uZyZhbXA7IDwvbGk+CjxsaT4gZmxvYXQmYW1wOyA8L2xpPgo8bGk+IGRvdWJsZSZhbXA7IDwvbGk+CjxsaT4gbG9uZyBkb3VibGUmYW1wOyA8L2xpPgo8bGk+IHZvaWQqJmFtcDsgPC9saT4KPC91bD4KCjxwPgpUaGVzZSB0d28gbGlzdHMgYXJlIG5vdCBpZGVudGljYWwuICBUaGV5IHNob3VsZCBiZSwgc2luY2UKPHR0PmdldDwvdHQ+IGlzIHN1cHBvc2VkIHRvIGNhbGwgPHR0PmRvX2dldDwvdHQ+IHdpdGggZXhhY3RseQp0aGUgYXJndW1lbnRzIGl0IHdhcyBnaXZlbi4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMi4yLjEuMSBbZmFjZXQubnVtLmdldC5tZW1iZXJzXSwgY2hhbmdlPC9wPgo8cHJlPiAgaXRlcl90eXBlIGdldChpdGVyX3R5cGUgaW4sIGl0ZXJfdHlwZSBlbmQsIGlvc19iYXNlJmFtcDsgc3RyLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmYW1wOyBlcnIsIHNob3J0JmFtcDsgdmFsKSBjb25zdDsKPC9wcmU+CjxwPnRvPC9wPgo8cHJlPiAgaXRlcl90eXBlIGdldChpdGVyX3R5cGUgaW4sIGl0ZXJfdHlwZSBlbmQsIGlvc19iYXNlJmFtcDsgc3RyLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmYW1wOyBlcnIsIGZsb2F0JmFtcDsgdmFsKSBjb25zdDsKPC9wcmU+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyNzYiPjwvYT4yNzYuIEFzc2lnbmFibGUgcmVxdWlyZW1lbnQgZm9yIGNvbnRhaW5lciB2YWx1ZSB0eXBlIG92ZXJseSBzdHJpY3Q8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMSBbY29udGFpbmVyLnJlcXVpcmVtZW50c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gUGV0ZXIgRGltb3YgPGI+RGF0ZTo8L2I+IDIwMDAtMTEtMDc8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNjb250YWluZXIucmVxdWlyZW1lbnRzIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbY29udGFpbmVyLnJlcXVpcmVtZW50c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNjb250YWluZXIucmVxdWlyZW1lbnRzIj5pc3N1ZXM8L2E+IGluIFtjb250YWluZXIucmVxdWlyZW1lbnRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CjIzLjEvMyBzdGF0ZXMgdGhhdCB0aGUgb2JqZWN0cyBzdG9yZWQgaW4gYSBjb250YWluZXIgbXVzdCBiZQpBc3NpZ25hYmxlLiAgMjMuMy4xIFttYXBdLCBwYXJhZ3JhcGggMiwKc3RhdGVzIHRoYXQgbWFwIHNhdGlzZmllcyBhbGwgcmVxdWlyZW1lbnRzIGZvciBhIGNvbnRhaW5lciwgd2hpbGUgaW4KdGhlIHNhbWUgdGltZSBkZWZpbmluZyB2YWx1ZV90eXBlIGFzIHBhaXImbHQ7Y29uc3QgS2V5LCBUJmd0OyAtIGEgdHlwZQp0aGF0IGlzIG5vdCBBc3NpZ25hYmxlLgo8L3A+Cgo8cD4KSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlcmUgZXhpc3RzIGEgdmFsaWQgYW5kIG5vbi1jb250cmFkaWN0b3J5CmludGVycHJldGF0aW9uIG9mIHRoZSBjdXJyZW50IHRleHQuIFRoZSB3b3JkaW5nIGluIDIzLjEvMyBhdm9pZHMgCm1lbnRpb25pbmcgdmFsdWVfdHlwZSwgcmVmZXJyaW5nIGluc3RlYWQgdG8gIm9iamVjdHMgc3RvcmVkIGluIGEKY29udGFpbmVyLiIgT25lIG1pZ2h0IGFyZ3VlIHRoYXQgbWFwIGRvZXMgbm90IHN0b3JlIG9iamVjdHMgb2YKdHlwZSBtYXA6OnZhbHVlX3R5cGUsIGJ1dCBvZiBtYXA6Om1hcHBlZF90eXBlIGluc3RlYWQsIGFuZCB0aGF0IHRoZQpBc3NpZ25hYmxlIHJlcXVpcmVtZW50IGFwcGxpZXMgdG8gbWFwOjptYXBwZWRfdHlwZSwgbm90Cm1hcDo6dmFsdWVfdHlwZS4KPC9wPgoKPHA+Ckhvd2V2ZXIsIHRoaXMgbWFrZXMgbWFwIGEgc3BlY2lhbCBjYXNlIChvdGhlciBjb250YWluZXJzIHN0b3JlIG9iamVjdHMgb2YKdHlwZSB2YWx1ZV90eXBlKSBhbmQgdGhlIEFzc2lnbmFibGUgcmVxdWlyZW1lbnQgaXMgbmVlZGxlc3NseSByZXN0cmljdGl2ZSBpbgpnZW5lcmFsLgo8L3A+Cgo8cD4KRm9yIGV4YW1wbGUsIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG9mIGFjdGl2ZSBsaWJyYXJ5IGlzc3VlIAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTAzIj4xMDM8L2E+IGlzIHRvIG1ha2Ugc2V0OjppdGVyYXRvciBhIGNvbnN0YW50IGl0ZXJhdG9yOyB0aGlzCm1lYW5zIHRoYXQgbm8gc2V0IG9wZXJhdGlvbnMgY2FuIGV4cGxvaXQgdGhlIGZhY3QgdGhhdCB0aGUgc3RvcmVkCm9iamVjdHMgYXJlIEFzc2lnbmFibGUuCjwvcD4KCjxwPgpUaGlzIGlzIHJlbGF0ZWQgdG8sIGJ1dCBzbGlnaHRseSBicm9hZGVyIHRoYW4sIGNsb3NlZCBpc3N1ZQo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxNDAiPjE0MDwvYT4uCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjIzLjEvMzogU3RyaWtlIHRoZSB0cmFpbGluZyBwYXJ0IG9mIHRoZSBzZW50ZW5jZTo8L3A+CiAgICA8YmxvY2txdW90ZT48cD4KICAgICwgYW5kIHRoZSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyBvZiBBc3NpZ25hYmxlIHR5cGVzIGZyb20gMjMuMS8zCiAgICA8L3A+PC9ibG9ja3F1b3RlPgo8cD5zbyB0aGF0IGl0IHJlYWRzOjwvcD4KICAgIDxibG9ja3F1b3RlPjxwPgogICAgLTMtIFRoZSB0eXBlIG9mIG9iamVjdHMgc3RvcmVkIGluIHRoZXNlIGNvbXBvbmVudHMgbXVzdCBtZWV0IHRoZSAKICAgIHJlcXVpcmVtZW50cyBvZiBDb3B5Q29uc3RydWN0aWJsZSB0eXBlcyAobGliLmNvcHljb25zdHJ1Y3RpYmxlKS4KICAgIDwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4yMy4xLzQ6IE1vZGlmeSB0byBtYWtlIGNsZWFyIHRoYXQgdGhpcyByZXF1aXJlbWVudCBpcyBub3QgZm9yIGFsbCAKY29udGFpbmVycy4gIENoYW5nZSB0bzo8L3A+Cgo8YmxvY2txdW90ZT48cD4KLTQtIFRhYmxlIDY0IGRlZmluZXMgdGhlIEFzc2lnbmFibGUgcmVxdWlyZW1lbnQuICBTb21lIGNvbnRhaW5lcnMgCnJlcXVpcmUgdGhpcyBwcm9wZXJ0eSBvZiB0aGUgdHlwZXMgdG8gYmUgc3RvcmVkIGluIHRoZSBjb250YWluZXIuICBUIGlzIAp0aGUgdHlwZSB1c2VkIHRvIGluc3RhbnRpYXRlIHRoZSBjb250YWluZXIuIHQgaXMgYSB2YWx1ZSBvZiBULCBhbmQgdSBpcyAKYSB2YWx1ZSBvZiAocG9zc2libHkgY29uc3QpIFQuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4yMy4xLCBUYWJsZSA2NTogaW4gdGhlIGZpcnN0IHJvdywgY2hhbmdlICJUIGlzIEFzc2lnbmFibGUiIHRvICJUIGlzCkNvcHlDb25zdHJ1Y3RpYmxlIi48L3A+Cgo8cD4yMy4yLjEvMjogQWRkIHNlbnRlbmNlIGZvciBBc3NpZ25hYmxlIHJlcXVpcmVtZW50LiAgQ2hhbmdlIHRvOjwvcD4KCjxibG9ja3F1b3RlPjxwPgotMi0gQSBkZXF1ZSBzYXRpc2ZpZXMgYWxsIG9mIHRoZSByZXF1aXJlbWVudHMgb2YgYSBjb250YWluZXIgYW5kIG9mIGEgCnJldmVyc2libGUgY29udGFpbmVyIChnaXZlbiBpbiB0YWJsZXMgaW4gbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMpIGFuZCAKb2YgYSBzZXF1ZW5jZSwgaW5jbHVkaW5nIHRoZSBvcHRpb25hbCBzZXF1ZW5jZSByZXF1aXJlbWVudHMgCihsaWIuc2VxdWVuY2UucmVxbXRzKS4gIEluIGFkZGl0aW9uIHRvIHRoZSByZXF1aXJlbWVudHMgb24gdGhlIHN0b3JlZCAKb2JqZWN0IGRlc2NyaWJlZCBpbiAyMy4xW2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzXSwgdGhlIHN0b3JlZCBvYmplY3QgCm11c3QgYWxzbyBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgQXNzaWduYWJsZS4gIERlc2NyaXB0aW9ucyBhcmUgCnByb3ZpZGVkIGhlcmUgb25seSBmb3Igb3BlcmF0aW9ucyBvbiBkZXF1ZSB0aGF0IGFyZSBub3QgZGVzY3JpYmVkIGluIG9uZSAKb2YgdGhlc2UgdGFibGVzIG9yIGZvciBvcGVyYXRpb25zIHdoZXJlIHRoZXJlIGlzIGFkZGl0aW9uYWwgc2VtYW50aWMgCmluZm9ybWF0aW9uLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+MjMuMi4yLzI6ICBBZGQgQXNzaWduYWJsZSByZXF1aXJlbWVudCB0byBzcGVjaWZpYyBtZXRob2RzIG9mIGxpc3QuICAKQ2hhbmdlIHRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4tMi0gQSBsaXN0IHNhdGlzZmllcyBhbGwgb2YgdGhlIHJlcXVpcmVtZW50cyBvZiBhIGNvbnRhaW5lciBhbmQgb2YgYSAKcmV2ZXJzaWJsZSBjb250YWluZXIgKGdpdmVuIGluIHR3byB0YWJsZXMgaW4gbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMpIAphbmQgb2YgYSBzZXF1ZW5jZSwgaW5jbHVkaW5nIG1vc3Qgb2YgdGhlIHRoZSBvcHRpb25hbCBzZXF1ZW5jZSAKcmVxdWlyZW1lbnRzIChsaWIuc2VxdWVuY2UucmVxbXRzKS4gVGhlIGV4Y2VwdGlvbnMgYXJlIHRoZSBvcGVyYXRvcltdIAphbmQgYXQgbWVtYmVyIGZ1bmN0aW9ucywgd2hpY2ggYXJlIG5vdCBwcm92aWRlZC4gCgpbRm9vdG5vdGU6IFRoZXNlIG1lbWJlciBmdW5jdGlvbnMgYXJlIG9ubHkgcHJvdmlkZWQgYnkgY29udGFpbmVycyB3aG9zZSAKaXRlcmF0b3JzIGFyZSByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycy4gLS0tIGVuZCBmb29ub3RlXQo8L3A+Cgo8cD5saXN0IGRvZXMgbm90IHJlcXVpcmUgdGhlIHN0b3JlZCB0eXBlIFQgdG8gYmUgQXNzaWduYWJsZSB1bmxlc3MgdGhlIApmb2xsb3dpbmcgbWV0aG9kcyBhcmUgaW5zdGFudGlhdGVkOgoKW0Zvb3Rub3RlOiBJbXBsZW1lbnRvcnMgYXJlIHBlcm1pdHRlZCBidXQgbm90IHJlcXVpcmVkIHRvIHRha2UgYWR2YW50YWdlIApvZiBUJ3MgQXNzaWduYWJsZSBwcm9wZXJ0aWVzIGZvciB0aGVzZSBtZXRob2RzLiAtLSBlbmQgZm9vbm90ZV0KPC9wPgo8cHJlPiAgICAgbGlzdCZsdDtULEFsbG9jYXRvciZndDsmYW1wOyBvcGVyYXRvcj0oY29uc3QgbGlzdCZsdDtULEFsbG9jYXRvciZndDsmYW1wOyAgeCApOwogICAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogICAgICAgdm9pZCBhc3NpZ24oSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KTsKICAgICB2b2lkIGFzc2lnbihzaXplX3R5cGUgbiwgY29uc3QgVCZhbXA7IHQpOwo8L3ByZT4KCgo8cD5EZXNjcmlwdGlvbnMgYXJlIHByb3ZpZGVkIGhlcmUgb25seSBmb3Igb3BlcmF0aW9ucyBvbiBsaXN0IHRoYXQgYXJlIG5vdCAKZGVzY3JpYmVkIGluIG9uZSBvZiB0aGVzZSB0YWJsZXMgb3IgZm9yIG9wZXJhdGlvbnMgd2hlcmUgdGhlcmUgaXMgCmFkZGl0aW9uYWwgc2VtYW50aWMgaW5mb3JtYXRpb24uPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4yMy4yLjQvMjogICBBZGQgc2VudGVuY2UgZm9yIEFzc2lnbmFibGUgcmVxdWlyZW1lbnQuICBDaGFuZ2UgdG86PC9wPgoKPGJsb2NrcXVvdGU+PHA+Ci0yLSBBIHZlY3RvciBzYXRpc2ZpZXMgYWxsIG9mIHRoZSByZXF1aXJlbWVudHMgb2YgYSBjb250YWluZXIgYW5kIG9mIGEgCnJldmVyc2libGUgY29udGFpbmVyIChnaXZlbiBpbiB0d28gdGFibGVzIGluIGxpYi5jb250YWluZXIucmVxdWlyZW1lbnRzKSAKYW5kIG9mIGEgc2VxdWVuY2UsIGluY2x1ZGluZyBtb3N0IG9mIHRoZSBvcHRpb25hbCBzZXF1ZW5jZSByZXF1aXJlbWVudHMgCihsaWIuc2VxdWVuY2UucmVxbXRzKS4gVGhlIGV4Y2VwdGlvbnMgYXJlIHRoZSBwdXNoX2Zyb250IGFuZCBwb3BfZnJvbnQgCm1lbWJlciBmdW5jdGlvbnMsIHdoaWNoIGFyZSBub3QgcHJvdmlkZWQuICBJbiBhZGRpdGlvbiB0byB0aGUgCnJlcXVpcmVtZW50cyBvbiB0aGUgc3RvcmVkIG9iamVjdCBkZXNjcmliZWQgaW4gCjIzLjFbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdLCB0aGUgc3RvcmVkIG9iamVjdCBtdXN0IGFsc28gbWVldCB0aGUgCnJlcXVpcmVtZW50cyBvZiBBc3NpZ25hYmxlLiAgRGVzY3JpcHRpb25zIGFyZSBwcm92aWRlZCBoZXJlIG9ubHkgZm9yIApvcGVyYXRpb25zIG9uIHZlY3RvciB0aGF0IGFyZSBub3QgZGVzY3JpYmVkIGluIG9uZSBvZiB0aGVzZSB0YWJsZXMgb3IgCmZvciBvcGVyYXRpb25zIHdoZXJlIHRoZXJlIGlzIGFkZGl0aW9uYWwgc2VtYW50aWMgaW5mb3JtYXRpb24uCjwvcD48L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPmxpc3QsIHNldCwgbXVsdGlzZXQsIG1hcCwgbXVsdGltYXAgYXJlIGFibGUgdG8gc3RvcmUgbm9uLUFzc2lnbmFibGVzLgpIb3dldmVyLCB0aGVyZSBpcyBzb21lIGNvbmNlcm4gYWJvdXQgPHR0Pmxpc3QmbHQ7VCZndDs8L3R0PjoKYWx0aG91Z2ggaW4gZ2VuZXJhbCB0aGVyZSdzIG5vIHJlYXNvbiBmb3IgVCB0byBiZSBBc3NpZ25hYmxlLCBzb21lCmltcGxlbWVudGF0aW9ucyBvZiB0aGUgbWVtYmVyIGZ1bmN0aW9ucyA8dHQ+b3BlcmF0b3I9PC90dD4gYW5kCjx0dD5hc3NpZ248L3R0PiBkbyByZWx5IG9uIHRoYXQgcmVxdWlyZW1lbnQuICBUaGUgTFdHIGRvZXMgbm90IHdhbnQKdG8gZm9yYmlkIHN1Y2ggaW1wbGVtZW50YXRpb25zLjwvcD4KCjxwPk5vdGUgdGhhdCB0aGUgdHlwZSBzdG9yZWQgaW4gYSBzdGFuZGFyZCBjb250YWluZXIgbXVzdCBzdGlsbCBzYXRpc2Z5CnRoZSByZXF1aXJlbWVudHMgb2YgdGhlIGNvbnRhaW5lcidzIGFsbG9jYXRvcjsgdGhpcyBydWxlcyBvdXQsIGZvcgpleGFtcGxlLCBzdWNoIHR5cGVzIGFzICJjb25zdCBpbnQiLiAgU2VlIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNzQiPjI3NDwvYT4KZm9yIG1vcmUgZGV0YWlscy4KPC9wPgoKPHA+SW4gcHJpbmNpcGxlIHdlIGNvdWxkIGFsc28gcmVsYXggdGhlICJBc3NpZ25hYmxlIiByZXF1aXJlbWVudCBmb3IKaW5kaXZpZHVhbCA8dHQ+dmVjdG9yPC90dD4gbWVtYmVyIGZ1bmN0aW9ucywgc3VjaCBhcwo8dHQ+cHVzaF9iYWNrPC90dD4uICBIb3dldmVyLCB0aGUgTFdHIGRpZCBub3Qgc2VlIGdyZWF0IHZhbHVlIGluIHN1Y2gKc2VsZWN0aXZlIHJlbGF4YXRpb24uICBEb2luZyBzbyB3b3VsZCByZW1vdmUgaW1wbGVtZW50b3JzJyBmcmVlZG9tIHRvCmltcGxlbWVudCA8dHQ+dmVjdG9yOjpwdXNoX2JhY2s8L3R0PiBpbiB0ZXJtcyBvZgo8dHQ+dmVjdG9yOjppbnNlcnQ8L3R0Pi48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjc4Ij48L2E+Mjc4LiBXaGF0IGRvZXMgaXRlcmF0b3IgdmFsaWRpdHkgbWVhbj88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMi40LjQgW2xpc3Qub3BzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBQLkouIFBsYXVnZXIgPGI+RGF0ZTo8L2I+IDIwMDAtMTEtMjc8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xpc3Qub3BzIj5pc3N1ZXM8L2E+IGluIFtsaXN0Lm9wc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpTZWN0aW9uIDIzLjIuNC40IFtsaXN0Lm9wc10gc3RhdGVzIHRoYXQKPC9wPgo8cHJlPiAgdm9pZCBzcGxpY2UoaXRlcmF0b3IgcG9zaXRpb24sIGxpc3QmbHQ7VCwgQWxsb2NhdG9yJmd0OyZhbXA7IHgpOwo8L3ByZT4KPHA+CjxpPmludmFsaWRhdGVzPC9pPiBhbGwgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzIHRvIGxpc3QgPHR0Png8L3R0Pi4KPC9wPgoKPHA+CkJ1dCB3aGF0IGRvZXMgdGhlIEMrKyBTdGFuZGFyZCBtZWFuIGJ5ICJpbnZhbGlkYXRlIj8gIFlvdQpjYW4gc3RpbGwgZGVyZWZlcmVuY2UgdGhlIGl0ZXJhdG9yIHRvIGEgc3BsaWNlZCBsaXN0IGVsZW1lbnQsIGJ1dAp5b3UnZCBiZXR0ZXIgbm90IHVzZSBpdCB0byBkZWxpbWl0IGEgcmFuZ2Ugd2l0aGluIHRoZSBvcmlnaW5hbApsaXN0LiBGb3IgdGhlIGxhdHRlciBvcGVyYXRpb24sIGl0IGhhcyBkZWZpbml0ZWx5IGxvc3Qgc29tZSBvZiBpdHMKdmFsaWRpdHkuCjwvcD4KCjxwPgpJZiB3ZSBhY2NlcHQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gdG8gaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1MCI+MjUwPC9hPiwKdGhlbiB3ZSdkIGJldHRlciBjbGFyaWZ5IHRoYXQgYSAidmFsaWQiIGl0ZXJhdG9yIG5lZWQgbm8KbG9uZ2VyIGRlc2lnbmF0ZSBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2FtZSBjb250YWluZXIgYXMgaXQgb25jZSBkaWQuCldlIHRoZW4gaGF2ZSB0byBjbGFyaWZ5IHdoYXQgd2UgbWVhbiBieSBpbnZhbGlkYXRpbmcgYSBwYXN0LXRoZS1lbmQKaXRlcmF0b3IsIGFzIHdoZW4gYSB2ZWN0b3Igb3Igc3RyaW5nIGdyb3dzIGJ5IHJlYWxsb2NhdGlvbi4gQ2xlYXJseSwKc3VjaCBhbiBpdGVyYXRvciBoYXMgYSBkaWZmZXJlbnQga2luZCBvZiB2YWxpZGl0eS4gUGVyaGFwcyB3ZSBzaG91bGQKaW50cm9kdWNlIHNlcGFyYXRlIHRlcm1zIGZvciB0aGUgdHdvIGtpbmRzIG9mICJ2YWxpZGl0eS4iCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCB0aGUgZm9sbG93aW5nIHRleHQgdG8gdGhlIGVuZCBvZiBzZWN0aW9uIDI0LjEgW2l0ZXJhdG9yLnJlcXVpcmVtZW50c10sCmFmdGVyIHBhcmFncmFwaCA1OjwvcD4KPGJsb2NrcXVvdGU+PHA+CkFuIDxpPmludmFsaWQ8L2k+IGl0ZXJhdG9yIGlzIGFuIGl0ZXJhdG9yIHRoYXQgbWF5IGJlCnNpbmd1bGFyLiBbRm9vdG5vdGU6IFRoaXMgZGVmaW5pdGlvbiBhcHBsaWVzIHRvIHBvaW50ZXJzLCBzaW5jZQpwb2ludGVycyBhcmUgaXRlcmF0b3JzLiBUaGUgZWZmZWN0IG9mIGRlcmVmZXJlbmNpbmcgYW4gaXRlcmF0b3IgdGhhdApoYXMgYmVlbiBpbnZhbGlkYXRlZCBpcyB1bmRlZmluZWQuXQo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+PGk+W3Bvc3QtQ29wZW5oYWdlbjogTWF0dCBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgoKCjxwPjxpPltSZWRtb25kOiBHZW5lcmFsIGFncmVlbWVudCB3aXRoIHRoZSBpbnRlbnQsIHNvbWUgb2JqZWN0aW9ucyB0bwp0aGUgd29yZGluZy4gIERhdmUgcHJvdmlkZWQgbmV3IHdvcmRpbmcuXTwvaT48L3A+CgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIHJlc29sdXRpb24gc2ltcGx5IGRlZmluZXMgYSB0ZXJtIHRoYXQgdGhlIFN0YW5kYXJkIHVzZXMgYnV0CiAgbmV2ZXIgZGVmaW5lcywgImludmFsaWQiLCBpbiB0ZXJtcyBvZiBhIHRlcm0gdGhhdCBpcyBkZWZpbmVkLAogICJzaW5ndWxhciIuPC9wPgoKPHA+V2h5IGRvIHdlIHNheSAibWF5IGJlIHNpbmd1bGFyIiwgaW5zdGVhZCBvZiAiaXMgc2luZ3VsYXIiPyAgVGhhdCdzCiAgYmVjdWFzZSBhIHZhbGlkIGl0ZXJhdG9yIGlzIG9uZSB0aGF0IGlzIGtub3duIHRvIGJlIG5vbnNpbmd1bGFyLgogIEludmFsaWRhdGluZyBhbiBpdGVyYXRvciBtZWFucyBjaGFuZ2luZyBpdCBpbiBzdWNoIGEgd2F5IHRoYXQgaXQncwogIG5vIGxvbmdlciBrbm93biB0byBiZSBub25zaW5ndWxhci4gIEFuIGV4YW1wbGU6IGluc2VydGluZyBhbgogIGVsZW1lbnQgaW50byB0aGUgbWlkZGxlIG9mIGEgdmVjdG9yIGlzIGNvcnJlY3RseSBzYWlkIHRvIGludmFsaWRhdGUKICBhbGwgaXRlcmF0b3JzIHBvaW50aW5nIGludG8gdGhlIHZlY3Rvci4gIFRoYXQgZG9lc24ndCBuZWNlc3NhcmlseQogIG1lYW4gdGhleSBhbGwgYmVjb21lIHNpbmd1bGFyLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyODAiPjwvYT4yODAuIENvbXBhcmlzb24gb2YgcmV2ZXJzZV9pdGVyYXRvciB0byBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI0LjQuMSBbcmV2ZXJzZS5pdGVyYXRvcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFN0ZXZlIENsZWFyeSA8Yj5EYXRlOjwvYj4gMjAwMC0xMS0yNzwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhpcyBjYW1lIGZyb20gYW4gZW1haWwgZnJvbSBTdGV2ZSBDbGVhcnkgdG8gRmVyZ3VzIGluIHJlZmVyZW5jZSB0bwppc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTc5Ij4xNzk8L2E+LiBUaGUgbGlicmFyeSB3b3JraW5nIGdyb3VwIGJyaWVmbHkgZGlzY3Vzc2VkCnRoaXMgaW4gVG9yb250byBhbmQgYmVsaWV2ZWQgaXQgc2hvdWxkIGJlIGEgc2VwYXJhdGUgaXNzdWUuICBUaGVyZSB3YXMKYWxzbyBzb21lIHJlc2VydmF0aW9ucyBhYm91dCB3aGV0aGVyIHRoaXMgd2FzIGEgd29ydGh3aGlsZSBwcm9ibGVtIHRvCmZpeC4KPC9wPgoKPHA+ClN0ZXZlIHNhaWQ6ICJGaXhpbmcgcmV2ZXJzZV9pdGVyYXRvci4gc3RkOjpyZXZlcnNlX2l0ZXJhdG9yIGNhbgooYW5kIHNob3VsZCkgYmUgY2hhbmdlZCB0byBwcmVzZXJ2ZSB0aGVzZSBhZGRpdGlvbmFsCnJlcXVpcmVtZW50cy4iIEhlIGFsc28gc2FpZCBpbiBlbWFpbCB0aGF0IGl0IGNhbiBiZSBkb25lIHdpdGhvdXQKYnJlYWtpbmcgdXNlcidzIGNvZGU6ICJJZiB5b3UgdGFrZSBhIGxvb2sgYXQgbXkgc3VnZ2VzdGVkCnNvbHV0aW9uLCByZXZlcnNlX2l0ZXJhdG9yIGRvZXNuJ3QgaGF2ZSB0byB0YWtlIHR3byBwYXJhbWV0ZXJzOyB0aGVyZQppcyBubyBkYW5nZXIgb2YgYnJlYWtpbmcgZXhpc3RpbmcgY29kZSwgZXhjZXB0IHNvbWVvbmUgdGFraW5nIHRoZQphZGRyZXNzIG9mIG9uZSBvZiB0aGUgcmV2ZXJzZV9pdGVyYXRvciBnbG9iYWwgb3BlcmF0b3IgZnVuY3Rpb25zLCBhbmQKSSBoYXZlIHRvIGRvdWJ0IGlmIGFueW9uZSBoYXMgZXZlciBkb25lIHRoYXQuIC4gLiAgPGk+QnV0PC9pPiwganVzdCBpbgpjYXNlIHRoZXkgaGF2ZSwgeW91IGNhbiBsZWF2ZSB0aGUgb2xkIGdsb2JhbCBmdW5jdGlvbnMgaW4gYXMgd2VsbCAtLQp0aGV5IHdvbid0IGludGVyZmVyZSB3aXRoIHRoZSB0d28tdGVtcGxhdGUtYXJndW1lbnQgZnVuY3Rpb25zLiAgV2l0aAp0aGF0LCBJIGRvbid0IHNlZSBob3cgPGk+YW55PC9pPiB1c2VyIGNvZGUgY291bGQgYnJlYWsuIgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KPGI+U2VjdGlvbjo8L2I+IDI0LjQuMS4xIFtyZXZlcnNlLml0ZXJhdG9yXQphZGQvY2hhbmdlIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb25zOjwvcD4KPHByZT4gIEEpIEFkZCBhIHRlbXBsYXRlZCBhc3NpZ25tZW50IG9wZXJhdG9yLCBhZnRlciB0aGUgc2FtZSBtYW5uZXIKICAgICAgICBhcyB0aGUgdGVtcGxhdGVkIGNvcHkgY29uc3RydWN0b3IsIGkuZS46CgogIHRlbXBsYXRlICZsdDsgY2xhc3MgVSAmZ3Q7CiAgcmV2ZXJzZV9pdGVyYXRvciAmbHQ7IEl0ZXJhdG9yICZndDsmYW1wOyBvcGVyYXRvcj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvciZsdDsgVSAmZ3Q7JmFtcDsgdSk7CgogIEIpIE1ha2UgYWxsIGdsb2JhbCBmdW5jdGlvbnMgKGV4Y2VwdCB0aGUgb3BlcmF0b3IrKSBoYXZlCiAgdHdvIHRlbXBsYXRlIHBhcmFtZXRlcnMgaW5zdGVhZCBvZiBvbmUsIHRoYXQgaXMsIGZvcgogIG9wZXJhdG9yID09LCAhPSwgJmx0OywgJmd0OywgJmx0Oz0sICZndDs9LCAtIHJlcGxhY2U6CgogICAgICAgdGVtcGxhdGUgJmx0OyBjbGFzcyBJdGVyYXRvciAmZ3Q7CiAgICAgICB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yJmx0OyBJdGVyYXRvciAmZ3Q7OjpkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKAogICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImbHQ7IEl0ZXJhdG9yICZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImbHQ7IEl0ZXJhdG9yICZndDsmYW1wOyB5KTsKCiAgd2l0aDoKCiAgICAgIHRlbXBsYXRlICZsdDsgY2xhc3MgSXRlcmF0b3IxLCBjbGFzcyBJdGVyYXRvcjIgJmd0OwogICAgICB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yICZsdDsgSXRlcmF0b3IxICZndDs6OmRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oCiAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvciAmbHQ7IEl0ZXJhdG9yMSAmZ3Q7ICZhbXA7IHgsCiAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvciAmbHQ7IEl0ZXJhdG9yMiAmZ3Q7ICZhbXA7IHkpOwo8L3ByZT4KPHA+CkFsc28gbWFrZSB0aGUgYWRkaXRpb24vY2hhbmdlcyBmb3IgdGhlc2Ugc2lnbmF0dXJlcyBpbiAKMjQuNC4xLjMgW3JldmVyc2UuaXRlci5vcHNdLgo8L3A+Cgo8cD48aT5bCkNvcGVuaGFnZW46IFRoZSBMV0cgaXMgY29uY2VybmVkIHRoYXQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gCmludHJvZHVjZXMgbmV3IG92ZXJsb2Fkcy4gIEV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBpbnRyb2R1Y2luZwpvdmVybG9hZHMgaXMgYWx3YXlzIHJpc2t5LCBhbmQgdGhhdCBpdCB3b3VsZCBiZSBpbmFwcHJvcHJpYXRlIHRvCm1ha2UgdGhpcyBjaGFuZ2Ugd2l0aG91dCBpbXBsZW1lbnRhdGlvbiBleHBlcmllbmNlLiAgSXQgbWF5IGJlCmRlc2lyYWJsZSB0byBwcm92aWRlIHRoaXMgZmVhdHVyZSBpbiBhIGRpZmZlcmVudCB3YXkuCl08L2k+PC9wPgoKCjxwPjxpPlsKTGlsbGVoYW1tZXI6IFdlIG5vdyBoYXZlIGltcGxlbWVudGF0aW9uIGV4cGVyaWVuY2UsIGFuZCBhZ3JlZSB0aGF0CnRoaXMgc29sdXRpb24gaXMgc2FmZSBhbmQgY29ycmVjdC4KXTwvaT48L3A+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyODEiPjwvYT4yODEuIHN0ZDo6bWluKCkgYW5kIG1heCgpIHJlcXVpcmVtZW50cyBvdmVybHkgcmVzdHJpY3RpdmU8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjUuMy43IFthbGcubWluLm1heF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAwLTEyLTAyPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNhbGcubWluLm1heCI+aXNzdWVzPC9hPiBpbiBbYWxnLm1pbi5tYXhdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RHVwbGljYXRlIG9mOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDg2Ij40ODY8L2E+PC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSByZXF1aXJlbWVudHMgaW4gMjUuMy43LCBwMSBhbmQgNCBjYWxsIGZvciBUIHRvIHNhdGlzZnkgdGhlCnJlcXVpcmVtZW50cyBvZiA8dHQ+TGVzc1RoYW5Db21wYXJhYmxlPC90dD4gKCBbbGVzc3RoYW5jb21wYXJhYmxlXSkKYW5kIDx0dD5Db3B5Q29uc3RydWN0aWJsZTwvdHQ+ICgyMC4xLjEgW3V0aWxpdHkuYXJnLnJlcXVpcmVtZW50c10pLgpTaW5jZSB0aGUgZnVuY3Rpb25zIHRha2UgYW5kIHJldHVybiB0aGVpciBhcmd1bWVudHMgYW5kIHJlc3VsdCBieQpjb25zdCByZWZlcmVuY2UsIEkgYmVsaWV2ZSB0aGUgPHR0PkNvcHlDb25zdHJ1Y3RpYmxlPC90dD4gcmVxdWlyZW1lbnQKaXMgdW5uZWNlc3NhcnkuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlbW92ZSB0aGUgPHR0PkNvcHlDb25zdHJ1Y3RpYmxlPC90dD4gcmVxdWlyZW1lbnQuIFNwZWNpZmljYWxseSwgcmVwbGFjZQoyNS4zLjcsIHAxIHdpdGg8L3A+CjxwPjxiPi0xLSBSZXF1aXJlczo8L2I+IFR5cGUgVCBpcyA8dHQ+TGVzc1RoYW5Db21wYXJhYmxlPC90dD4gCiggW2xlc3N0aGFuY29tcGFyYWJsZV0pLgo8L3A+CjxwPmFuZCByZXBsYWNlIDI1LjMuNywgcDQgd2l0aDwvcD4KPHA+PGI+LTQtIFJlcXVpcmVzOjwvYj4gVHlwZSBUIGlzIDx0dD5MZXNzVGhhbkNvbXBhcmFibGU8L3R0PiAKKCBbbGVzc3RoYW5jb21wYXJhYmxlXSkuCjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI4MiI+PC9hPjI4Mi4gV2hhdCB0eXBlcyBkb2VzIG51bXB1bmN0IGdyb3VwaW5nIHJlZmVyIHRvPzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjIuMi4yIFtmYWNldC5udW0ucHV0LnZpcnR1YWxzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBIb3dhcmQgSGlubmFudCA8Yj5EYXRlOjwvYj4gMjAwMC0xMi0wNTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjZmFjZXQubnVtLnB1dC52aXJ0dWFscyI+aXNzdWVzPC9hPiBpbiBbZmFjZXQubnVtLnB1dC52aXJ0dWFsc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpQYXJhZ3JhcGggMTYgbWlzdGFrZW5seSBzaW5nbGVzIG91dCBpbnRlZ3JhbCB0eXBlcyBmb3IgaW5zZXJ0aW5nIAp0aG91c2FuZHNfc2VwKCkgY2hhcmFjdGVycy4gIFRoaXMgY29uZmxpY3RzIHdpdGggdGhlIHN5bnRheCBmb3IgZmxvYXRpbmcgCnBvaW50IG51bWJlcnMgZGVzY3JpYmVkIHVuZGVyIDIyLjIuMy4xLzIuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSBwYXJhZ3JhcGggMTYgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT48cD4KRm9yIGludGVncmFsIHR5cGVzLCBwdW5jdC50aG91c2FuZHNfc2VwKCkgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgaW50byAKdGhlIHNlcXVlbmNlIGFzIGRldGVybWluZWQgYnkgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHB1bmN0LmRvX2dyb3VwaW5nKCkgCnVzaW5nIHRoZSBtZXRob2QgZGVzY3JpYmVkIGluIDIyLjIuMy4xLjIgW2ZhY2V0Lm51bXB1bmN0LnZpcnR1YWxzXS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPlRvOjwvcD4KCjxibG9ja3F1b3RlPjxwPgpGb3IgYXJpdGhtZXRpYyB0eXBlcywgcHVuY3QudGhvdXNhbmRzX3NlcCgpIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIGludG8gCnRoZSBzZXF1ZW5jZSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBwdW5jdC5kb19ncm91cGluZygpIAp1c2luZyB0aGUgbWV0aG9kIGRlc2NyaWJlZCBpbiAyMi4yLjMuMS4yIFtmYWNldC5udW1wdW5jdC52aXJ0dWFsc10uCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD48aT5bCkNvcGVuaGFnZW46IE9waW5pb25zIHdlcmUgZGl2aWRlZCBhYm91dCB3aGV0aGVyIHRoaXMgaXMgYWN0dWFsbHkgYW4KaW5jb25zaXN0ZW5jeSwgYnV0IGF0IGJlc3QgaXQgc2VlbXMgdG8gaGF2ZSBiZWVuIHVuaW50ZW50aW9uYWwuICBUaGlzCmlzIG9ubHkgYW4gaXNzdWUgZm9yIGZsb2F0aW5nLXBvaW50IG91dHB1dDogVGhlIHN0YW5kYXJkIGlzCnVuYW1iaWd1b3VzIHRoYXQgaW1wbGVtZW50YXRpb25zIG11c3QgcGFyc2UgdGhvdXNhbmRzX3NlcCBjaGFyYWN0ZXJzCndoZW4gcGVyZm9ybWluZyBmbG9hdGluZy1wb2ludC4gIFRoZSBzdGFuZGFyZCBpcyBhbHNvIHVuYW1iaWd1b3VzIHRoYXQKdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseSB0byB0aGUgIkMiIGxvY2FsZS4KXTwvaT48L3A+CgoKPHA+PGk+WwpBIHN1cnZleSBvZiBleGlzdGluZyBwcmFjdGljZSBpcyBuZWVkZWQ7IGl0IGlzIGJlbGlldmVkIHRoYXQgc29tZQppbXBsZW1lbnRhdGlvbnMgZG8gaW5zZXJ0IHRob3VzYW5kc19zZXAgY2hhcmFjdGVycyBmb3IgZmxvYXRpbmctcG9pbnQKb3V0cHV0IGFuZCBvdGhlcnMgZmFpbCB0byBpbnNlcnQgdGhvdXNhbmRzX3NlcCBjaGFyYWN0ZXJzIGZvciAKZmxvYXRpbmctcG9pbnQgaW5wdXQgZXZlbiB0aG91Z2ggdGhpcyBpcyB1bmFtYmlndW91c2x5IHJlcXVpcmVkIGJ5IHRoZQpzdGFuZGFyZC4KXTwvaT48L3A+CgoKPHA+PGk+W1Bvc3QtQ3VyYedhbzogdGhlIGFib3ZlIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgdGhlIGNvbnNlbnN1cyBvZgpIb3dhcmQsIEJpbGwsIFBldGUsIEJlbmphbWluLCBOYXRoYW4sIERpZXRtYXIsIEJvcmlzLCBhbmQgTWFydGluLl08L2k+PC9wPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyODMiPjwvYT4yODMuIHN0ZDo6cmVwbGFjZSgpIHJlcXVpcmVtZW50IGluY29ycmVjdC9pbnN1ZmZpY2llbnQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjUuMi41IFthbGcucmVwbGFjZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAwLTEyLTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNhbGcucmVwbGFjZSI+aXNzdWVzPC9hPiBpbiBbYWxnLnJlcGxhY2VdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RHVwbGljYXRlIG9mOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDgzIj40ODM8L2E+PC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgoocmV2aXNpb24gb2YgdGhlIGZ1cnRoZXIgZGlzY3Vzc2lvbikKVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHByb2JsZW1zIHdpdGggdGhlIHJlcXVpcmVzIGNsYXVzZXMgZm9yIHRoZQphbGdvcml0aG1zIGluIDI1LjEgYW5kIDI1LjIuIFRoZSByZXF1aXJlcyBjbGF1c2Ugb2YgZWFjaCBhbGdvcml0aG0Kc2hvdWxkIGRlc2NyaWJlIHRoZSBuZWNlc3NhcnkgYW5kIHN1ZmZpY2llbnQgcmVxdWlyZW1lbnRzIG9uIHRoZSBpbnB1dHMKdG8gdGhlIGFsZ29yaXRobSBzdWNoIHRoYXQgdGhlIGFsZ29yaXRobSBjb21waWxlcyBhbmQgcnVucyBwcm9wZXJseS4KTWFueSBvZiB0aGUgcmVxdWlyZXMgY2xhdXNlcyBmYWlsIHRvIGRvIHRoaXMuIEhlcmUgaXMgYSBzdW1tYXJ5IG9mIHRoZSBraW5kcwpvZiBtaXN0YWtlczoKPC9wPgoKPG9sPgo8bGk+ClVzZSBvZiBFcXVhbGl0eUNvbXBhcmFibGUsIHdoaWNoIG9ubHkgcHV0cyByZXF1aXJlbWVudHMgb24gYSBzaW5nbGUKdHlwZSwgd2hlbiBpbiBmYWN0IGFuIGVxdWFsaXR5IG9wZXJhdG9yIGlzIHJlcXVpcmVkIGJldHdlZW4gdHdvCmRpZmZlcmVudCB0eXBlcywgdHlwaWNhbGx5IGVpdGhlciBUIGFuZCB0aGUgaXRlcmF0b3IncyB2YWx1ZSB0eXBlCm9yIGJldHdlZW4gdGhlIHZhbHVlIHR5cGVzIG9mIHR3byBkaWZmZXJlbnQgaXRlcmF0b3JzLgo8L2xpPgo8bGk+ClVzZSBvZiBBc3NpZ25hYmxlIGZvciBUIHdoZW4gaW4gZmFjdCB3aGF0IHdhcyBuZWVkZWQgaXMgQXNzaWduYWJsZQpmb3IgdGhlIHZhbHVlX3R5cGUgb2YgdGhlIGl0ZXJhdG9yLCBhbmQgY29udmVydGFiaWxpdHkgZnJvbSBUIHRvIHRoZQp2YWx1ZV90eXBlIG9mIHRoZSBpdGVyYXRvci4gT3IgZm9yIG91dHB1dCBpdGVyYXRvcnMsIHRoZSByZXF1aXJlbWVudApzaG91bGQgYmUgdGhhdCBUIGlzIHdyaXRhYmxlIHRvIHRoZSBpdGVyYXRvciAob3V0cHV0IGl0ZXJhdG9ycyBkbwpub3QgaGF2ZSB2YWx1ZSB0eXBlcykuCjwvbGk+Cjwvb2w+Cgo8cD4KSGVyZSBpcyB0aGUgbGlzdCBvZiBhbGdvcml0aG1zIHRoYXQgY29udGFpbiBtaXN0YWtlczoKPC9wPgoKPHVsPgo8bGk+MjUuMS4yIHN0ZDo6ZmluZDwvbGk+CjxsaT4yNS4xLjYgc3RkOjpjb3VudDwvbGk+CjxsaT4yNS4xLjggc3RkOjplcXVhbDwvbGk+CjxsaT4yNS4xLjkgc3RkOjpzZWFyY2gsIHN0ZDo6c2VhcmNoX248L2xpPgo8bGk+MjUuMi40IHN0ZDo6cmVwbGFjZSwgc3RkOjpyZXBsYWNlX2NvcHk8L2xpPgo8bGk+MjUuMi41IHN0ZDo6ZmlsbDwvbGk+CjxsaT4yNS4yLjcgc3RkOjpyZW1vdmUsIHN0ZDo6cmVtb3ZlX2NvcHk8L2xpPgo8L3VsPgoKPHA+CkFsc28sIGluIHRoZSByZXF1aXJlbWVudHMgZm9yIEVxdWFsaXR5Q29tcGFyYWJsZSwgdGhlIHJlcXVpcmVtZW50IHRoYXQKdGhlIG9wZXJhdG9yIGJlIGRlZmluZWQgZm9yIGNvbnN0IG9iamVjdHMgaXMgbGFja2luZy4KPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD4yMC4xLjEgQ2hhbmdlIHAxIGZyb208L3A+Cgo8cD5JbiBUYWJsZSAyOCwgPHR0PlQ8L3R0PiBpcyBhIHR5cGUgdG8gYmUgc3VwcGxpZWQgYnkgYSBDKysgcHJvZ3JhbQppbnN0YW50aWF0aW5nIGEgdGVtcGxhdGUsIDx0dD5hPC90dD4sIDx0dD5iPC90dD4sIGFuZCA8dHQ+YzwvdHQ+IGFyZQp2YWx1ZXMgb2YgdHlwZSA8dHQ+VDwvdHQ+Lgo8L3A+Cgo8cD50bzwvcD4KCjxwPgpJbiBUYWJsZSAyOCwgPHR0PlQ8L3R0PiBpcyBhIHR5cGUgdG8gYmUgc3VwcGxpZWQgYnkgYSBDKysgcHJvZ3JhbQppbnN0YW50aWF0aW5nIGEgdGVtcGxhdGUsIDx0dD5hPC90dD4sIDx0dD5iPC90dD4sIGFuZCA8dHQ+YzwvdHQ+IGFyZQp2YWx1ZXMgb2YgdHlwZSA8dHQ+Y29uc3QgVDwvdHQ+Lgo8L3A+Cgo8cD4yNSBCZXR3ZWVuIHA4IGFuZCBwOTwvcD4KCjxwPkFkZCB0aGUgZm9sbG93aW5nIHNlbnRlbmNlOjwvcD4KCjxwPldoZW4gdGhlIGRlc2NyaXB0aW9uIG9mIGFuIGFsZ29yaXRobSBnaXZlcyBhbiBleHByZXNzaW9uIHN1Y2ggYXMKPHR0PipmaXJzdCA9PSB2YWx1ZTwvdHQ+IGZvciBhIGNvbmRpdGlvbiwgaXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUgZXhwcmVzc2lvbgpldmFsdWF0ZSB0byBlaXRoZXIgdHJ1ZSBvciBmYWxzZSBpbiBib29sZWFuIGNvbnRleHRzLjwvcD4KCjxwPjI1LjEuMiBDaGFuZ2UgcDEgYnkgZGVsZXRpbmcgdGhlIHJlcXVpcmVzIGNsYXVzZS48L3A+Cgo8cD4yNS4xLjYgQ2hhbmdlIHAxIGJ5IGRlbGV0aW5nIHRoZSByZXF1aXJlcyBjbGF1c2UuPC9wPgoKPHA+MjUuMS45PC9wPgoKPHA+Q2hhbmdlIHA0IGZyb208L3A+Cgo8cD4tNC0gUmVxdWlyZXM6IFR5cGUgPHR0PlQ8L3R0PiBpcyA8dHQ+RXF1YWxpdHlDb21wYXJhYmxlPC90dD4KKDIwLjEuMSksIHR5cGUgU2l6ZSBpcyBjb252ZXJ0aWJsZSB0byBpbnRlZ3JhbCB0eXBlICg0LjcuMTIuMykuCjwvcD4KCjxwPnRvPC9wPgoKPHA+LTQtIFJlcXVpcmVzOiBUaGUgdHlwZSA8dHQ+U2l6ZTwvdHQ+IGlzIGNvbnZlcnRpYmxlIHRvIGludGVncmFsCnR5cGUgKDQuNy4xMi4zKS48L3A+Cgo8cD4yNS4yLjQgQ2hhbmdlIHAxIGZyb208L3A+Cgo8cD4tMS0gUmVxdWlyZXM6IFR5cGUgPHR0PlQ8L3R0PiBpcyA8dHQ+QXNzaWduYWJsZTwvdHQ+ICgyMy4xICkgKGFuZCwgZm9yIDx0dD5yZXBsYWNlKCk8L3R0PiwgPHR0PkVxdWFsaXR5Q29tcGFyYWJsZTwvdHQ+ICgyMC4xLjEgKSkuPC9wPgoKPHA+dG88L3A+Cgo8cD4tMS0gUmVxdWlyZXM6IFRoZSBleHByZXNzaW9uIDx0dD4qZmlyc3QgPSBuZXdfdmFsdWU8L3R0PiBtdXN0IGJlIHZhbGlkLjwvcD4KCjxwPmFuZCBjaGFuZ2UgcDQgZnJvbTwvcD4KCjxwPi00LSBSZXF1aXJlczogVHlwZSA8dHQ+VDwvdHQ+IGlzIDx0dD5Bc3NpZ25hYmxlPC90dD4gKDIzLjEpIChhbmQsCmZvciA8dHQ+cmVwbGFjZV9jb3B5KCk8L3R0PiwgPHR0PkVxdWFsaXR5Q29tcGFyYWJsZTwvdHQ+CigyMC4xLjEpKS4gVGhlIHJhbmdlcyA8dHQ+W2ZpcnN0LCBsYXN0KTwvdHQ+IGFuZCA8dHQ+W3Jlc3VsdCwgcmVzdWx0ICsKKGxhc3QgLSBmaXJzdCkpPC90dD4gc2hhbGwgbm90IG92ZXJsYXAuPC9wPgoKPHA+dG88L3A+Cgo8cD4tNC0gUmVxdWlyZXM6IFRoZSByZXN1bHRzIG9mIHRoZSBleHByZXNzaW9ucyA8dHQ+KmZpcnN0PC90dD4gYW5kCjx0dD5uZXdfdmFsdWU8L3R0PiBtdXN0IGJlIHdyaXRhYmxlIHRvIHRoZSByZXN1bHQgb3V0cHV0IGl0ZXJhdG9yLiBUaGUKcmFuZ2VzIDx0dD5bZmlyc3QsIGxhc3QpPC90dD4gYW5kIDx0dD5bcmVzdWx0LCByZXN1bHQgKyAobGFzdCAtCmZpcnN0KSk8L3R0PiBzaGFsbCBub3Qgb3ZlcmxhcC48L3A+CgoKPHA+MjUuMi41IENoYW5nZSBwMSBmcm9tPC9wPgoKPHA+LTEtIFJlcXVpcmVzOiBUeXBlIDx0dD5UPC90dD4gaXMgPHR0PkFzc2lnbmFibGU8L3R0PiAoMjMuMSkuIFRoZQp0eXBlIDx0dD5TaXplPC90dD4gaXMgY29udmVydGlibGUgdG8gYW4gaW50ZWdyYWwgdHlwZSAoNC43LjEyLjMpLjwvcD4KCjxwPnRvPC9wPgoKPHA+LTEtIFJlcXVpcmVzOiBUaGUgZXhwcmVzc2lvbiA8dHQ+dmFsdWU8L3R0PiBtdXN0IGJlIGlzIHdyaXRhYmxlIHRvCnRoZSBvdXRwdXQgaXRlcmF0b3IuIFRoZSB0eXBlIDx0dD5TaXplPC90dD4gaXMgY29udmVydGlibGUgdG8gYW4KaW50ZWdyYWwgdHlwZSAoNC43LjEyLjMpLjwvcD4KCjxwPjI1LjIuNyBDaGFuZ2UgcDEgZnJvbTwvcD4KCjxwPi0xLSBSZXF1aXJlczogVHlwZSA8dHQ+VDwvdHQ+IGlzIDx0dD5FcXVhbGl0eUNvbXBhcmFibGU8L3R0PiAoMjAuMS4xKS48L3A+Cgo8cD50bzwvcD4KCjxwPgotMS0gUmVxdWlyZXM6IFRoZSB2YWx1ZSB0eXBlIG9mIHRoZSBpdGVyYXRvciBtdXN0IGJlCjx0dD5Bc3NpZ25hYmxlPC90dD4gKDIzLjEpLgo8L3A+CgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KVGhlIGdlbmVyYWwgaWRlYSBvZiB0aGUgcHJvcG9zZWQgc29sdXRpb24gaXMgdG8gcmVtb3ZlIHRoZSBmYXVsdHkKcmVxdWlyZXMgY2xhdXNlcyBhbmQgbGV0IHRoZSByZXR1cm5zIGFuZCBlZmZlY3RzIGNsYXVzZXMgc3BlYWsgZm9yCnRoZW1zZWx2ZXMuIFRoYXQgaXMsIHRoZSByZXR1cm5zIGNsYXVzZXMgY29udGFpbiBleHByZXNzaW9ucyB0aGF0IG11c3QKYmUgdmFsaWQsIGFuZCB0aGVyZWZvcmUgYWxyZWFkeSBpbXBseSB0aGUgY29ycmVjdCByZXF1aXJlbWVudHMuIEluCmFkZGl0aW9uLCBhIHNlbnRlbmNlIGlzIGFkZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgY2hhcHRlciAyNSBzYXlpbmcKdGhhdCBleHByZXNzaW9ucyBnaXZlbiBhcyBjb25kaXRpb25zIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBvciBmYWxzZSBpbgphIGJvb2xlYW4gY29udGV4dC4gQW4gYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8gc2F5IHRoYXQgdGhlIHR5cGUgb2YKdGhlc2UgY29uZGl0aW9uIGV4cHJlc3Npb25zIG11c3QgYmUgbGl0ZXJhbGx5IGJvb2wsIGJ1dCB0aGF0IHdvdWxkIGJlCmltcG9zaW5nIGEgZ3JlYXRlciByZXN0cmljdGlvbiB0aGF0IHdoYXQgdGhlIHN0YW5kYXJkIGN1cnJlbnRseSBzYXlzCih3aGljaCBpcyBjb252ZXJ0aWJsZSB0byBib29sKS4KPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI4NCI+PC9hPjI4NC4gdW5wb3J0YWJsZSBleGFtcGxlIGluIDIwLjMuNywgcDY8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAuNi43IFtjb21wYXJpc29uc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAwLTEyLTI2PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBleGFtcGxlIGluIDIwLjYuNyBbY29tcGFyaXNvbnNdLCBwNiBzaG93cyBob3cgdG8gdXNlIHRoZSBDCmxpYnJhcnkgZnVuY3Rpb24gPHR0PnN0cmNtcCgpPC90dD4gd2l0aCB0aGUgZnVuY3Rpb24gcG9pbnRlciBhZGFwdGVyCjx0dD5wdHJfZnVuKCk8L3R0Pi4gQnV0IHNpbmNlIGl0J3MgdW5zcGVjaWZpZWQgd2hldGhlciB0aGUgQyBsaWJyYXJ5CmZ1bmN0aW9ucyBoYXZlIDx0dD5leHRlcm4gIkMiPC90dD4gb3IgPHR0PmV4dGVybgoiQysrIjwvdHQ+IGxpbmthZ2UgWzE3LjQuMi4yIFt1c2luZy5saW5rYWdlXV0sIGFuZCBzaW5jZQpmdW5jdGlvbiBwb2ludGVycyB3aXRoIGRpZmZlcmVudCB0aGUgbGFuZ3VhZ2UgbGlua2FnZSBzcGVjaWZpY2F0aW9ucwooNy41IFtkY2wubGlua10pIGFyZSBpbmNvbXBhdGlibGUsIHdoZXRoZXIgdGhpcyBleGFtcGxlIGlzCndlbGwtZm9ybWVkIGlzIHVuc3BlY2lmaWVkLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjAuNi43IFtjb21wYXJpc29uc10gcGFyYWdyYXBoIDYgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPls8aT5FeGFtcGxlOjwvaT48L3A+CiAgPHByZT4gICAgcmVwbGFjZV9pZih2LmJlZ2luKCksIHYuZW5kKCksIG5vdDEoYmluZDJuZChwdHJfZnVuKHN0cmNtcCksICJDIikpLCAiQysrIik7CiAgPC9wcmU+CiAgPHA+cmVwbGFjZXMgZWFjaCA8dHQ+QzwvdHQ+IHdpdGggPHR0PkMrKzwvdHQ+IGluIHNlcXVlbmNlIDx0dD52PC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KICA8cD5bPGk+RXhhbXBsZTo8L2k+PC9wPgogIDxwcmU+ICAgIGludCBjb21wYXJlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAgICByZXBsYWNlX2lmKHYuYmVnaW4oKSwgdi5lbmQoKSwKICAgICAgICAgICAgICAgbm90MShiaW5kMm5kKHB0cl9mdW4oY29tcGFyZSksICJhYmMiKSksICJkZWYiKTsKICA8L3ByZT4KICA8cD5yZXBsYWNlcyBlYWNoIDx0dD5hYmM8L3R0PiB3aXRoIDx0dD5kZWY8L3R0PiBpbiBzZXF1ZW5jZSA8dHQ+djwvdHQ+LjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+QWxzbywgcmVtb3ZlIGZvb3Rub3RlIDIxNSBpbiB0aGF0IHNhbWUgcGFyYWdyYXBoLjwvcD4KCjxwPjxpPltDb3BlbmhhZ2VuOiBNaW5vciBjaGFuZ2UgaW4gdGhlIHByb3Bvc2VkIHJlc29sdXRpb24uICBTaW5jZSB0aGlzCmlzc3VlIGRlYWxzIGluIHBhcnQgd2l0aCBDIGFuZCBDKysgbGlua2FnZSwgaXQgd2FzIGJlbGlldmVkIHRvIGJlIHRvbwpjb25mdXNpbmcgZm9yIHRoZSBzdHJpbmdzIGluIHRoZSBleGFtcGxlIHRvIGJlICJDIiBhbmQgIkMrKyIuCl08L2k+PC9wPgoKCjxwPjxpPltSZWRtb25kOiBNb3JlIG1pbm9yIGNoYW5nZXMuICBHb3QgcmlkIG9mIHRoZSBmb290bm90ZSAod2hpY2gKc2VlbXMgdG8gbWFrZSBhIHN3ZWVwaW5nIG5vcm1hdGl2ZSByZXF1aXJlbWVudCwgZXZlbiB0aG91Z2ggZm9vdG5vdGVzCmFyZW4ndCBub3JtYXRpdmUpLCBhbmQgY2hhbmdlZCB0aGUgc2VudGVuY2UgYWZ0ZXIgdGhlIGZvb3Rub3RlIHNvIHRoYXQKaXQgY29ycmVzcG9uZHMgdG8gdGhlIG5ldyBjb2RlIGZyYWdtZW50Ll08L2k+PC9wPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyODUiPjwvYT4yODUuIG1pbm9yIGVkaXRvcmlhbCBlcnJvcnMgaW4gZnN0cmVhbSBjdG9yczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy44LjEuNyBbaWZzdHJlYW0uY29uc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAwLTEyLTMxPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPjI3LjguMS43IFtpZnN0cmVhbS5jb25zXSwgcDIsIDI3LjguMS4xMSBbb2ZzdHJlYW0uY29uc10sIHAyLCBhbmQKMjcuOC4xLjE1IFtmc3RyZWFtLmNvbnNdLCBwMiBzYXkgYWJvdXQgdGhlIGVmZmVjdHMgb2YgZWFjaCBjb25zdHJ1Y3RvcjoKPC9wPgoKPHA+Li4uIElmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBhIG51bGwgcG9pbnRlciwgY2FsbHMKPHR0PnNldHN0YXRlKGZhaWxiaXQpPC90dD4gKHdoaWNoIG1heSB0aHJvdyA8dHQ+aW9zX2Jhc2U6OmZhaWx1cmU8L3R0PikuCjwvcD4KCjxwPlRoZSBwYXJlbnRoZXRpY2FsIG5vdGUgZG9lc24ndCBhcHBseSBzaW5jZSB0aGUgY3RvcnMgY2Fubm90IHRocm93IGFuCmV4Y2VwdGlvbiBkdWUgdG8gdGhlIHJlcXVpcmVtZW50IGluIDI3LjQuNC4xIFtiYXNpYy5pb3MuY29uc10sIHAzIAp0aGF0IDx0dD5leGNlcHRpb25zKCk8L3R0PiBiZSBpbml0aWFsaXplZCB0byA8dHQ+aW9zX2Jhc2U6Omdvb2RiaXQ8L3R0Pi4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClN0cmlrZSB0aGUgcGFyZW50aGV0aWNhbCBub3RlIGZyb20gdGhlIEVmZmVjdHMgY2xhdXNlIGluIGVhY2ggb2YgdGhlCnBhcmFncmFwaHMgbWVudGlvbmVkIGFib3ZlLgo8L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyODYiPjwvYT4yODYuICZsdDtjc3RkbGliJmd0OyByZXF1aXJlbWVudHMgbWlzc2luZyBzaXplX3QgdHlwZWRlZjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNS40IFthbGcuYy5saWJyYXJ5XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBKdWR5IFdhcmQgPGI+RGF0ZTo8L2I+IDIwMDAtMTItMzA8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2FsZy5jLmxpYnJhcnkiPmlzc3VlczwvYT4gaW4gW2FsZy5jLmxpYnJhcnldLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlICZsdDtjc3RkbGliJmd0OyBoZWFkZXIgZmlsZSBjb250YWlucyBwcm90b3R5cGVzIGZvciBic2VhcmNoIGFuZApxc29ydCAoQysrIFN0YW5kYXJkIHNlY3Rpb24gMjUuNCBwYXJhZ3JhcGhzIDMgYW5kIDQpIGFuZCBvdGhlcgpwcm90b3R5cGVzIChDKysgU3RhbmRhcmQgc2VjdGlvbiAyMS40IHBhcmFncmFwaCAxIHRhYmxlIDQ5KSB0aGF0CnJlcXVpcmUgdGhlIHR5cGVkZWYgc2l6ZV90LiBZZXQgc2l6ZV90IGlzIG5vdCBsaXN0ZWQgaW4gdGhlCiZsdDtjc3RkbGliJmd0OyBzeW5vcHNpcyB0YWJsZSA3OCBpbiBzZWN0aW9uIDI1LjQuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpBZGQgdGhlIHR5cGUgc2l6ZV90IHRvIFRhYmxlIDc4IChzZWN0aW9uIDI1LjQpIGFuZCBhZGQKdGhlIHR5cGUgc2l6ZV90ICZsdDtjc3RkbGliJmd0OyB0byBUYWJsZSA5NyAoc2VjdGlvbiBDLjIpLgo8L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlNpbmNlIHNpemVfdCBpcyBpbiAmbHQ7c3RkbGliLmgmZ3Q7LCBpdCBtdXN0IGFsc28gYmUgaW4gJmx0O2NzdGRsaWImZ3Q7LjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyODgiPjwvYT4yODguICZsdDtjZXJybm8mZ3Q7IHJlcXVpcmVtZW50cyBtaXNzaW5nIG1hY3JvIEVJTFNFUTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAxOS4zIFtlcnJub10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSnVkeSBXYXJkIDxiPkRhdGU6PC9iPiAyMDAwLTEyLTMwPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJU08vSUVDIDk4OTk6MTk5MC9BbWVuZG1lbnQxOjE5OTQgU2VjdGlvbiA0LjMgU3RhdGVzOiAiVGhlIGxpc3QKb2YgbWFjcm9zIGRlZmluZWQgaW4gJmx0O2Vycm5vLmgmZ3Q7IGlzIGFkanVzdGVkIHRvIGluY2x1ZGUgYSBuZXcKbWFjcm8sIEVJTFNFUSIKPC9wPgoKPHA+CklTTy9JRUMgMTQ4ODI6MTk5OChFKSBzZWN0aW9uIDE5LjMgZG9lcyBub3QgcmVmZXIKdG8gdGhlIGFib3ZlIGFtZW5kbWVudC4KPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpVcGRhdGUgVGFibGUgMjYgKHNlY3Rpb24gMTkuMykgIkhlYWRlciAgJmx0O2NlcnJubyZndDsgc3lub3BzaXMiCmFuZCBUYWJsZSA5NSAoc2VjdGlvbiBDLjIpICJTdGFuZGFyZCBNYWNyb3MiIHRvIGluY2x1ZGUgRUlMU0VRLgo8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjkxIj48L2E+MjkxLiBVbmRlcnNwZWNpZmljYXRpb24gb2Ygc2V0IGFsZ29yaXRobXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjUuMy41IFthbGcuc2V0Lm9wZXJhdGlvbnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMjAwMS0wMS0wMzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxnLnNldC5vcGVyYXRpb25zIj5pc3N1ZXM8L2E+IGluIFthbGcuc2V0Lm9wZXJhdGlvbnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIHN0YW5kYXJkIGxpYnJhcnkgY29udGFpbnMgZm91ciBhbGdvcml0aG1zIHRoYXQgY29tcHV0ZSBzZXQKb3BlcmF0aW9ucyBvbiBzb3J0ZWQgcmFuZ2VzOiA8dHQ+c2V0X3VuaW9uPC90dD4sIDx0dD5zZXRfaW50ZXJzZWN0aW9uPC90dD4sCjx0dD5zZXRfZGlmZmVyZW5jZTwvdHQ+LCBhbmQgPHR0PnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZTwvdHQ+LiAgRWFjaApvZiB0aGVzZSBhbGdvcml0aG1zIHRha2VzIHR3byBzb3J0ZWQgcmFuZ2VzIGFzIGlucHV0cywgYW5kIHdyaXRlcyB0aGUKb3V0cHV0IG9mIHRoZSBhcHByb3ByaWF0ZSBzZXQgb3BlcmF0aW9uIHRvIGFuIG91dHB1dCByYW5nZS4gIFRoZSBlbGVtZW50cwppbiB0aGUgb3V0cHV0IHJhbmdlIGFyZSBzb3J0ZWQuCjwvcD4KCjxwPgpUaGUgb3JkaW5hcnkgbWF0aGVtYXRpY2FsIGRlZmluaXRpb25zIGFyZSBnZW5lcmFsaXplZCBzbyB0aGF0IHRoZXkKYXBwbHkgdG8gcmFuZ2VzIGNvbnRhaW5pbmcgbXVsdGlwbGUgY29waWVzIG9mIGEgZ2l2ZW4gZWxlbWVudC4gIFR3bwplbGVtZW50cyBhcmUgY29uc2lkZXJlZCB0byBiZSAidGhlIHNhbWUiIGlmLCBhY2NvcmRpbmcgdG8gYW4Kb3JkZXJpbmcgcmVsYXRpb24gcHJvdmlkZWQgYnkgdGhlIHVzZXIsIG5laXRoZXIgb25lIGlzIGxlc3MgdGhhbiB0aGUKb3RoZXIuICBTbywgZm9yIGV4YW1wbGUsIGlmIG9uZSBpbnB1dCByYW5nZSBjb250YWlucyBmaXZlIGNvcGllcyBvZiBhbgplbGVtZW50IGFuZCBhbm90aGVyIGNvbnRhaW5zIHRocmVlLCB0aGUgb3V0cHV0IHJhbmdlIG9mIDx0dD5zZXRfdW5pb248L3R0Pgp3aWxsIGNvbnRhaW4gZml2ZSBjb3BpZXMsIHRoZSBvdXRwdXQgcmFuZ2Ugb2YKPHR0PnNldF9pbnRlcnNlY3Rpb248L3R0PiB3aWxsIGNvbnRhaW4gdGhyZWUsIHRoZSBvdXRwdXQgcmFuZ2Ugb2YKPHR0PnNldF9kaWZmZXJlbmNlPC90dD4gd2lsbCBjb250YWluIHR3bywgYW5kIHRoZSBvdXRwdXQgcmFuZ2Ugb2YKPHR0PnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZTwvdHQ+IHdpbGwgY29udGFpbiB0d28uCjwvcD4KCjxwPgpCZWNhdXNlIHR3byBlbGVtZW50cyBjYW4gYmUgInRoZSBzYW1lIiBmb3IgdGhlIHB1cnBvc2VzCm9mIHRoZXNlIHNldCBhbGdvcml0aG1zLCB3aXRob3V0IGJlaW5nIGlkZW50aWNhbCBpbiBvdGhlciByZXNwZWN0cwooY29uc2lkZXIsIGZvciBleGFtcGxlLCBzdHJpbmdzIHVuZGVyIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbiksCnRoaXMgcmFpc2VzIGEgbnVtYmVyIG9mIHVuYW5zd2VyZWQgcXVlc3Rpb25zOgo8L3A+Cgo8dWw+CjxsaT5JZiB3ZSdyZSBjb3B5aW5nIGFuIGVsZW1lbnQgdGhhdCdzIHByZXNlbnQgaW4gYm90aCBvZiB0aGUKaW5wdXQgcmFuZ2VzLCB3aGljaCBvbmUgZG8gd2UgY29weSBpdCBmcm9tPzwvbGk+CjxsaT5JZiB0aGVyZSBhcmUgPGk+bjwvaT4gY29waWVzIG9mIGFuIGVsZW1lbnQgaW4gdGhlIHJlbGV2YW50CmlucHV0IHJhbmdlLCBhbmQgdGhlIG91dHB1dCByYW5nZSB3aWxsIGNvbnRhaW4gZmV3ZXIgY29waWVzIChzYXkKPGk+bTwvaT4pIHdoaWNoIG9uZXMgZG8gd2UgY2hvb3NlPyAgVGhlIGZpcnN0IDxpPm08L2k+LCBvciB0aGUgbGFzdAo8aT5tPC9pPiwgb3Igc29tZXRoaW5nIGVsc2U/PC9saT4KPGxpPkFyZSB0aGVzZSBvcGVyYXRpb25zIHN0YWJsZT8gIFRoYXQgaXMsIGRvZXMgYSBydW4gb2YgZXF1aXZhbGVudAplbGVtZW50cyBhcHBlYXIgaW4gdGhlIG91dHB1dCByYW5nZSBpbiB0aGUgc2FtZSBvcmRlciBhcyBhcyBpdAphcHBlYXJlZCBpbiB0aGUgaW5wdXQgcmFuZ2Uocyk/PC9saT4KPC91bD4KCjxwPgpUaGUgc3RhbmRhcmQgc2hvdWxkIGVpdGhlciBhbnN3ZXIgdGhlc2UgcXVlc3Rpb25zLCBvciBleHBsaWNpdGx5CnNheSB0aGF0IHRoZSBhbnN3ZXJzIGFyZSB1bnNwZWNpZmllZC4gIEkgcHJlZmVyIHRoZSBmb3JtZXIgb3B0aW9uLApzaW5jZSwgYXMgZmFyIGFzIEkga25vdywgYWxsIGV4aXN0aW5nIGltcGxlbWVudGF0aW9ucyBiZWhhdmUgdGhlCnNhbWUgd2F5Lgo8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSBlbmQgb2YgMjUuMy41LjIgW3NldC51bmlvbl0gcGFyYWdyYXBoIDU6PC9wPgo8YmxvY2txdW90ZT48cD4KSWYgW2ZpcnN0MSwgbGFzdDEpIGNvbnRhaW5zIDxpPm08L2k+IGVsZW1lbnRzIHRoYXQgYXJlIGVxdWl2YWxlbnQgdG8KZWFjaCBvdGhlciBhbmQgW2ZpcnN0MiwgbGFzdDIpIGNvbnRhaW5zIDxpPm48L2k+IGVsZW1lbnRzIHRoYXQgYXJlCmVxdWl2YWxlbnQgdG8gdGhlbSwgdGhlbiBtYXgoPGk+bTwvaT4sIDxpPm48L2k+KSBvZiB0aGVzZSBlbGVtZW50cwp3aWxsIGJlIGNvcGllZCB0byB0aGUgb3V0cHV0IHJhbmdlOiBhbGwgPGk+bTwvaT4gb2YgdGhlc2UgZWxlbWVudHMKZnJvbSBbZmlyc3QxLCBsYXN0MSksIGFuZCB0aGUgbGFzdCBtYXgoPGk+bi1tPC9pPiwgMCkgb2YgdGhlbSBmcm9tCltmaXJzdDIsIGxhc3QyKSwgaW4gdGhhdCBvcmRlci4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPkFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSBlbmQgb2YgMjUuMy41LjMgW3NldC5pbnRlcnNlY3Rpb25dIHBhcmFncmFwaCA1OjwvcD4KPGJsb2NrcXVvdGU+PHA+CklmIFtmaXJzdDEsIGxhc3QxKSBjb250YWlucyA8aT5tPC9pPiBlbGVtZW50cyB0aGF0IGFyZSBlcXVpdmFsZW50IHRvIGVhY2gKb3RoZXIgYW5kIFtmaXJzdDIsIGxhc3QyKSBjb250YWlucyA8aT5uPC9pPiBlbGVtZW50cyB0aGF0IGFyZQplcXVpdmFsZW50IHRvIHRoZW0sIHRoZSBmaXJzdCBtaW4oPGk+bTwvaT4sIDxpPm48L2k+KSBvZiB0aG9zZSAKZWxlbWVudHMgZnJvbSBbZmlyc3QxLCBsYXN0MSkgYXJlIGNvcGllZCB0byB0aGUgb3V0cHV0IHJhbmdlLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+QWRkIGEgbmV3IHBhcmFncmFwaCwgPGI+Tm90ZXM8L2I+LCBhZnRlciAyNS4zLjUuNCBbc2V0LmRpZmZlcmVuY2VdCnBhcmFncmFwaCA0OjwvcD4KPGJsb2NrcXVvdGU+PHA+CklmIFtmaXJzdDEsIGxhc3QxKSBjb250YWlucyA8aT5tPC9pPiBlbGVtZW50cyB0aGF0IGFyZSBlcXVpdmFsZW50IHRvIGVhY2gKb3RoZXIgYW5kIFtmaXJzdDIsIGxhc3QyKSBjb250YWlucyA8aT5uPC9pPiBlbGVtZW50cyB0aGF0IGFyZQplcXVpdmFsZW50IHRvIHRoZW0sIHRoZSBsYXN0IG1heCg8aT5tLW48L2k+LCAwKSBlbGVtZW50cyBmcm9tIApbZmlyc3QxLCBsYXN0MSkgYXJlIGNvcGllZCB0byB0aGUgb3V0cHV0IHJhbmdlLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+QWRkIGEgbmV3IHBhcmFncmFwaCwgPGI+Tm90ZXM8L2I+LCBhZnRlciAyNS4zLjUuNSBbc2V0LnN5bW1ldHJpYy5kaWZmZXJlbmNlXQpwYXJhZ3JhcGggNDo8L3A+CjxibG9ja3F1b3RlPjxwPgpJZiBbZmlyc3QxLCBsYXN0MSkgY29udGFpbnMgPGk+bTwvaT4gZWxlbWVudHMgdGhhdCBhcmUgZXF1aXZhbGVudCB0bwplYWNoIG90aGVyIGFuZCBbZmlyc3QyLCBsYXN0MikgY29udGFpbnMgPGk+bjwvaT4gZWxlbWVudHMgdGhhdCBhcmUKZXF1aXZhbGVudCB0byB0aGVtLCB0aGVuIHw8aT5tIC0gbjwvaT58IG9mIHRob3NlIGVsZW1lbnRzIHdpbGwgYmUKY29waWVkIHRvIHRoZSBvdXRwdXQgcmFuZ2U6IHRoZSBsYXN0IDxpPm0gLSBuPC9pPiBvZiB0aGVzZSBlbGVtZW50cwpmcm9tIFtmaXJzdDEsIGxhc3QxKSBpZiA8aT5tPC9pPiAmZ3Q7IDxpPm48L2k+LCBhbmQgdGhlIGxhc3QgPGk+biAtCm08L2k+IG9mIHRoZXNlIGVsZW1lbnRzIGZyb20gW2ZpcnN0MiwgbGFzdDIpIGlmIDxpPm08L2k+ICZsdDsgPGk+bjwvaT4uCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD48aT5bU2FudGEgQ3J1ejogaXQncyBiZWxpZXZlZCB0aGF0IHRoaXMgbGFuZ3VhZ2UgaXMgY2xlYXJlciB0aGFuCiAgd2hhdCdzIGluIHRoZSBTdGFuZGFyZC4gIEhvd2V2ZXIsIGl0J3MgYWxzbyBiZWxpZXZlZCB0aGF0IHRoZQogIFN0YW5kYXJkIG1heSBhbHJlYWR5IG1ha2UgdGhlc2UgZ3VhcmFudGVlcyAoYWx0aG91Z2ggbm90IHF1aXRlIGluCiAgdGhlc2Ugd29yZHMpLiAgQmlsbCBhbmQgSG93YXJkIHdpbGwgY2hlY2sgYW5kIHNlZSB3aGV0aGVyIHRoZXkgdGhpbmsKICB0aGF0IHNvbWUgb3IgYWxsIG9mIHRoZXNlIGNoYW5nZXMgbWF5IGJlIHJlZHVuZGFudC4gIElmIHNvLCB3ZSBtYXkKICBjbG9zZSB0aGlzIGlzc3VlIGFzIE5BRC5dPC9pPjwvcD4KCgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5Gb3Igc2ltcGxlIGNhc2VzLCB0aGVzZSBkZXNjcmlwdGlvbnMgYXJlIGVxdWl2YWxlbnQgdG8gd2hhdCdzCiAgYWxyZWFkeSBpbiB0aGUgU3RhbmRhcmQuICBGb3IgbW9yZSBjb21wbGljYXRlZCBjYXNlcywgdGhleSBkZXNjcmliZQogIHRoZSBiZWhhdmlvciBvZiBleGlzdGluZyBpbXBsZW1lbnRhdGlvbnMuPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI5MiI+PC9hPjI5Mi4gZWZmZWN0cyBvZiBhLmNvcHlmbXQgKGEpPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjQuNC4yIFtiYXNpYy5pb3MubWVtYmVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAxLTAxLTA1PC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjYmFzaWMuaW9zLm1lbWJlcnMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtiYXNpYy5pb3MubWVtYmVyc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNiYXNpYy5pb3MubWVtYmVycyI+aXNzdWVzPC9hPiBpbiBbYmFzaWMuaW9zLm1lbWJlcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgRWZmZWN0cyBjbGF1c2Ugb2YgdGhlIG1lbWJlciBmdW5jdGlvbiA8dHQ+Y29weWZtdCgpPC90dD4gaW4KMjcuNC40LjIsIHAxNSBkb2Vzbid0IGNvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIHRoZSBsZWZ0LWhhbmQgc2lkZQphcmd1bWVudCBpcyBpZGVudGljYWwgdG8gdGhlIGFyZ3VtZW50IG9uIHRoZSByaWdodC1oYW5kIHNpZGUsIHRoYXQgaXMKPHR0Pih0aGlzID09ICZhbXA7cmhzKTwvdHQ+LiAgSWYgdGhlIHR3byBhcmd1bWVudHMgYXJlIGlkZW50aWNhbCB0aGVyZQppcyBubyBuZWVkIHRvIGNvcHkgYW55IG9mIHRoZSBkYXRhIG1lbWJlcnMgb3IgY2FsbCBhbnkgY2FsbGJhY2tzCnJlZ2lzdGVyZWQgd2l0aCA8dHQ+cmVnaXN0ZXJfY2FsbGJhY2soKTwvdHQ+LiAgQWxzbywgYXMgSG93YXJkIEhpbm5hbnQKcG9pbnRzIG91dCBpbiBtZXNzYWdlIGMrK3N0ZC1saWItODE0OSBpdCBhcHBlYXJzIHRvIGJlIGluY29ycmVjdCB0bwphbGxvdyB0aGUgb2JqZWN0IHRvIGZpcmUgPHR0PmVyYXNlX2V2ZW50PC90dD4gZm9sbG93ZWQgYnkKPHR0PmNvcHlmbXRfZXZlbnQ8L3R0PiBzaW5jZSB0aGUgY2FsbGJhY2sgaGFuZGxpbmcgdGhlIGxhdHRlciBldmVudAptYXkgaW5hZHZlcnRlbnRseSBhdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgZnJlZWQgYnkgdGhlIGZvcm1lci4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSBFZmZlY3RzIGNsYXVzZSBpbiAyNy40LjQuMiwgcDE1IGZyb208L3A+Cgo8YmxvY2txdW90ZT48cD4KPGI+LTE1LSBFZmZlY3RzOjwvYj5Bc3NpZ25zIHRvIHRoZSBtZW1iZXIgb2JqZWN0cyBvZiA8dHQ+KnRoaXM8L3R0Pgp0aGUgY29ycmVzcG9uZGluZyBtZW1iZXIgb2JqZWN0cyBvZiA8dHQ+cmhzPC90dD4sIGV4Y2VwdCB0aGF0Li4uCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD50bzwvcD4KCjxibG9ja3F1b3RlPjxwPgo8Yj4tMTUtIEVmZmVjdHM6PC9iPklmIDx0dD4odGhpcyA9PSAmYW1wO3Jocyk8L3R0PiBkb2VzIG5vdGhpbmcuIE90aGVyd2lzZQphc3NpZ25zIHRvIHRoZSBtZW1iZXIgb2JqZWN0cyBvZiA8dHQ+KnRoaXM8L3R0PiB0aGUgY29ycmVzcG9uZGluZyBtZW1iZXIKb2JqZWN0cyBvZiA8dHQ+cmhzPC90dD4sIGV4Y2VwdCB0aGF0Li4uCjwvcD48L2Jsb2NrcXVvdGU+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIyOTQiPjwvYT4yOTQuIFVzZXIgZGVmaW5lZCBtYWNyb3MgYW5kIHN0YW5kYXJkIGhlYWRlcnM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTcuNC4zLjIuMSBbbWFjcm8ubmFtZXNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEphbWVzIEthbnplIDxiPkRhdGU6PC9iPiAyMDAxLTAxLTExPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlBhcmFncmFwaCAyIG9mIDE3LjQuMy4yLjEgW21hY3JvLm5hbWVzXSByZWFkczogIkEKdHJhbnNsYXRpb24gdW5pdCB0aGF0IGluY2x1ZGVzIGEgaGVhZGVyIHNoYWxsIG5vdCBjb250YWluIGFueSBtYWNyb3MKdGhhdCBkZWZpbmUgbmFtZXMgZGVjbGFyZWQgaW4gdGhhdCBoZWFkZXIuIiBBcyBJIHJlYWQgdGhpcywgaXQKd291bGQgbWVhbiB0aGF0IHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBpcyBsZWdhbDo8L3A+Cgo8cHJlPiAgI2RlZmluZSBucG9zIDMuMTQKICAjaW5jbHVkZSAmbHQ7c3N0cmVhbSZndDsKPC9wcmU+Cgo8cD5zaW5jZSBucG9zIGlzIG5vdCBkZWZpbmVkIGluICZsdDtzc3RyZWFtJmd0Oy4gIEl0IGlzLCBob3dldmVyLCBkZWZpbmVkCmluICZsdDtzdHJpbmcmZ3Q7LCBhbmQgaXQgaXMgaGFyZCB0byBpbWFnaW5lIGFuIGltcGxlbWVudGF0aW9uIGluCndoaWNoICZsdDtzc3RyZWFtJmd0OyBkaWRuJ3QgaW5jbHVkZSAmbHQ7c3RyaW5nJmd0Oy48L3A+Cgo8cD5JIHRoaW5rIHRoYXQgdGhpcyBwaHJhc2Ugd2FzIHByb2JhYmx5IGZvcm11bGF0ZWQgYmVmb3JlIGl0IHdhcwpkZWNpZGVkIHRoYXQgYSBzdGFuZGFyZCBoZWFkZXIgbWF5IGZyZWVseSBpbmNsdWRlIG90aGVyIHN0YW5kYXJkCmhlYWRlcnMuICBUaGUgcGhyYXNlIHdvdWxkIGJlIHBlcmZlY3RseSBhcHByb3ByaWF0ZSBmb3IgQywgZm9yCmV4YW1wbGUuICBJbiBsaWdodCBvZiAxNy40LjQuMSBbcmVzLm9uLmhlYWRlcnNdIHBhcmFncmFwaCAxLCBob3dldmVyLAppdCBpc24ndCBzdHJpbmdlbnQgZW5vdWdoLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkZvciAxNy40LjMuMi4xIFttYWNyby5uYW1lc10sIHJlcGxhY2UgdGhlIGN1cnJlbnQgd29yZGluZywgd2hpY2ggcmVhZHM6PC9wPgo8YmxvY2txdW90ZT4KICAgICA8cD5FYWNoIG5hbWUgZGVmaW5lZCBhcyBhIG1hY3JvIGluIGEgaGVhZGVyIGlzIHJlc2VydmVkIHRvIHRoZQogICAgIGltcGxlbWVudGF0aW9uIGZvciBhbnkgdXNlIGlmIHRoZSB0cmFuc2xhdGlvbiB1bml0IGluY2x1ZGVzCiAgICAgdGhlIGhlYWRlci4xNjgpPC9wPgoKICAgICA8cD5BIHRyYW5zbGF0aW9uIHVuaXQgdGhhdCBpbmNsdWRlcyBhIGhlYWRlciBzaGFsbCBub3QgY29udGFpbiBhbnkKICAgICBtYWNyb3MgdGhhdCBkZWZpbmUgbmFtZXMgZGVjbGFyZWQgb3IgZGVmaW5lZCBpbiB0aGF0IGhlYWRlci4gTm9yIHNoYWxsCiAgICAgc3VjaCBhIHRyYW5zbGF0aW9uIHVuaXQgZGVmaW5lIG1hY3JvcyBmb3IgbmFtZXMgbGV4aWNhbGx5CiAgICAgaWRlbnRpY2FsIHRvIGtleXdvcmRzLjwvcD4KCiAgICAgPHA+MTY4KSBJdCBpcyBub3QgcGVybWlzc2libGUgdG8gcmVtb3ZlIGEgbGlicmFyeSBtYWNybyBkZWZpbml0aW9uIGJ5CiAgICAgdXNpbmcgdGhlICN1bmRlZiBkaXJlY3RpdmUuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD53aXRoIHRoZSB3b3JkaW5nOjwvcD4KCjxibG9ja3F1b3RlPgogICAgIDxwPkEgdHJhbnNsYXRpb24gdW5pdCB0aGF0IGluY2x1ZGVzIGEgc3RhbmRhcmQgbGlicmFyeSBoZWFkZXIgc2hhbGwgbm90CiAgICAgI2RlZmluZSBvciAjdW5kZWYgbmFtZXMgZGVjbGFyZWQgaW4gYW55IHN0YW5kYXJkIGxpYnJhcnkgaGVhZGVyLjwvcD4KCiAgICAgPHA+QSB0cmFuc2xhdGlvbiB1bml0IHNoYWxsIG5vdCAjZGVmaW5lIG9yICN1bmRlZiBuYW1lcyBsZXhpY2FsbHkKICAgICBpZGVudGljYWwgdG8ga2V5d29yZHMuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bTGlsbGVoYW1tZXI6IEJlbWFuIHByb3ZpZGVkIG5ldyB3b3JkaW5nXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI5NSI+PC9hPjI5NS4gSXMgYWJzIGRlZmluZWQgaW4gJmx0O2NtYXRoJmd0Oz88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuNyBbYy5tYXRoXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBKZW5zIE1hdXJlciA8Yj5EYXRlOjwvYj4gMjAwMS0wMS0xMjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYy5tYXRoIj5pc3N1ZXM8L2E+IGluIFtjLm1hdGhdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGFibGUgODAgbGlzdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSAmbHQ7Y21hdGgmZ3Q7IGhlYWRlci4gIEl0IGRvZXMgbm90Cmxpc3QgPHR0PmFicygpPC90dD4uICBIb3dldmVyLCAyNi41LCBwYXJhZ3JhcGggNiwgd2hpY2ggbGlzdHMgYWRkZWQgCnNpZ25hdHVyZXMgcHJlc2VudCBpbiAmbHQ7Y21hdGgmZ3Q7LCBkb2VzIHNheSB0aGF0IHNldmVyYWwgb3ZlcmxvYWRzCm9mIDx0dD5hYnMoKTwvdHQ+IHNob3VsZCBiZSBkZWZpbmVkIGluICZsdDtjbWF0aCZndDsuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpBZGQgPHR0PmFiczwvdHQ+IHRvIFRhYmxlIDgwLiAgQWxzbywgcmVtb3ZlIHRoZSBwYXJlbnRoZXRpY2FsIGxpc3QKb2YgZnVuY3Rpb25zICIoYWJzKCksIGRpdigpLCByYW5kKCksIHNyYW5kKCkpIiBmcm9tIDI2LjUgW251bWFycmF5XSwKcGFyYWdyYXBoIDEuCjwvcD4KCjxwPjxpPltDb3BlbmhhZ2VuOiBNb2RpZmllZCBwcm9wb3NlZCByZXNvbHV0aW9uIHNvIHRoYXQgaXQgYWxzbyBnZXRzCnJpZCBvZiB0aGF0IHZlc3RpZ2lhbCBsaXN0IG9mIGZ1bmN0aW9ucyBpbiBwYXJhZ3JhcGggMS5dPC9pPjwvcD4KCgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5BbGwgdGhpcyBEUiBkb2VzIGlzIGZpeCBhIHR5cG87IGl0J3MgdW5jb250cm92ZXJzaWFsLiAgQSAKc2VwYXJhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSdyZSBkb2luZyB0aGUgcmlnaHQgdGhpbmcgaW4gCnB1dHRpbmcgc29tZSBvdmVybG9hZHMgaW4gJmx0O2NtYXRoJmd0OyB0aGF0IHdlIGFyZW4ndCBhbHNvIApwdXR0aW5nIGluICZsdDtjc3RkbGliJmd0Oy4gIFRoYXQncyBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzMjMiPjMyMzwvYT4uPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjI5NyI+PC9hPjI5Ny4gY29uc3RfbWVtX2Z1bl90Jmx0OyZndDs6OmFyZ3VtZW50X3R5cGUgc2hvdWxkIGJlIGNvbnN0IFQqPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjYuOCBbbG9naWNhbC5vcGVyYXRpb25zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDEtMDEtMDY8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIGNsYXNzIHRlbXBsYXRlcyA8dHQ+Y29uc3RfbWVtX2Z1bl90PC90dD4gaW4gMjAuNS44LCBwOCBhbmQKPHR0PmNvbnN0X21lbV9mdW4xX3Q8L3R0PgppbiAyMC41LjgsIHA5IGRlcml2ZSBmcm9tIDx0dD51bmFyeV9mdW5jdGlvbiZsdDtUKiwgUyZndDs8L3R0PiwgYW5kCjx0dD5iaW5hcnlfZnVuY3Rpb24mbHQ7VCosCkEsIFMmZ3Q7PC90dD4sIHJlc3BlY3RpdmVseS4gQ29uc2VxdWVudGx5LCB0aGVpciA8dHQ+YXJndW1lbnRfdHlwZTwvdHQ+LCBhbmQKPHR0PmZpcnN0X2FyZ3VtZW50X3R5cGU8L3R0PgptZW1iZXJzLCByZXNwZWN0aXZlbHksIGFyZSBib3RoIGRlZmluZWQgdG8gYmUgPHR0PlQqPC90dD4gKG5vbi1jb25zdCkuCkhvd2V2ZXIsIHRoZWlyIGZ1bmN0aW9uIGNhbGwgbWVtYmVyIG9wZXJhdG9yIHRha2VzIGEgPHR0PmNvbnN0IFQqPC90dD4KYXJndW1lbnQuIEl0IGlzIG15IG9waW5pb24gdGhhdCA8dHQ+YXJndW1lbnRfdHlwZTwvdHQ+IHNob3VsZCBiZSA8dHQ+Y29uc3QKVCo8L3R0PiBpbnN0ZWFkLCBzbyB0aGF0IG9uZSBjYW4gZWFzaWx5IHJlZmVyIHRvIGl0IGluIGdlbmVyaWMgY29kZS4gVGhlCmV4YW1wbGUgYmVsb3cgZGVyaXZlZCBmcm9tIGV4aXN0aW5nIGNvZGUgZmFpbHMgdG8gY29tcGlsZSBkdWUgdG8gdGhlCmRpc2NyZXBhbmN5Ogo8L3A+Cgo8cD48dHQ+dGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7PC90dD4KPGJyPjx0dD52b2lkIGZvbyAodHlwZW5hbWUgVDo6YXJndW1lbnRfdHlwZSBhcmcpJm5ic3A7Jm5ic3A7IC8vICMxPC90dD4KPGJyPjx0dD57PC90dD4KPGJyPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsgdHlwZW5hbWUgVDo6cmVzdWx0X3R5cGUgKFQ6OipwZikgKHR5cGVuYW1lClQ6OmFyZ3VtZW50X3R5cGUpCmNvbnN0ID0mbmJzcDsmbmJzcDsgLy8gIzI8L3R0Pgo8YnI+PHR0PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmYW1wO1Q6Om9wZXJhdG9yKCk7PC90dD4KPGJyPjx0dD59PC90dD4KPC9wPgoKPHA+PHR0PnN0cnVjdCBYIHsgLyogLi4uICovIH07PC90dD48L3A+Cgo8cD48dHQ+aW50IG1haW4gKCk8L3R0Pgo8YnI+PHR0Pns8L3R0Pgo8YnI+PHR0PiZuYnNwOyZuYnNwOyZuYnNwOyBjb25zdCBYIHg7PC90dD4KPGJyPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsgZm9vJmx0O3N0ZDo6Y29uc3RfbWVtX2Z1bl90Jmx0O3ZvaWQsIFgmZ3Q7CiZndDsoJmFtcDt4KTsmbmJzcDsmbmJzcDsKLy8gIzM8L3R0Pgo8YnI+PHR0Pn08L3R0Pgo8L3A+Cgo8cD4jMSA8dHQ+Zm9vKCk8L3R0PiB0YWtlcyBhIHBsYWluIHVucXVhbGlmaWVkIDx0dD5YKjwvdHQ+IGFzIGFuIGFyZ3VtZW50Cjxicj4jMiB0aGUgdHlwZSBvZiB0aGUgcG9pbnRlciBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgdHlwZSBvZiB0aGUgbWVtYmVyCmZ1bmN0aW9uCjxicj4jMyB0aGUgYWRkcmVzcyBvZiBhIGNvbnN0YW50IGJlaW5nIHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRha2luZyBhIG5vbi1jb25zdAo8dHQ+WCo8L3R0Pgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIHRoZSB0b3AgcG9ydGlvbiBvZiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY2xhc3MgdGVtcGxhdGUKY29uc3RfbWVtX2Z1bl90IGluIDIwLjUuOCwgcDgKPC9wPgo8cD48dHQ+dGVtcGxhdGUgJmx0O2NsYXNzIFMsIGNsYXNzIFQmZ3Q7IGNsYXNzIGNvbnN0X21lbV9mdW5fdDwvdHQ+Cjxicj48dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDogcHVibGljCnVuYXJ5X2Z1bmN0aW9uJmx0O1QqLCBTJmd0OyB7PC90dD4KPC9wPgo8cD53aXRoPC9wPgo8cD48dHQ+dGVtcGxhdGUgJmx0O2NsYXNzIFMsIGNsYXNzIFQmZ3Q7IGNsYXNzIGNvbnN0X21lbV9mdW5fdDwvdHQ+Cjxicj48dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDogcHVibGljCnVuYXJ5X2Z1bmN0aW9uJmx0OzxiPmNvbnN0PC9iPiBUKiwgUyZndDsgezwvdHQ+CjwvcD4KPHA+QWxzbyByZXBsYWNlIHRoZSB0b3AgcG9ydGlvbiBvZiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY2xhc3MgdGVtcGxhdGUKY29uc3RfbWVtX2Z1bjFfdCBpbiAyMC41LjgsIHA5PC9wPgo8cD48dHQ+dGVtcGxhdGUgJmx0O2NsYXNzIFMsIGNsYXNzIFQsIGNsYXNzIEEmZ3Q7IGNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8L3R0Pgo8YnI+PHR0PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA6IHB1YmxpYwpiaW5hcnlfZnVuY3Rpb24mbHQ7VCosIEEsIFMmZ3Q7IHs8L3R0Pgo8L3A+CjxwPndpdGg8L3A+CjxwPjx0dD50ZW1wbGF0ZSAmbHQ7Y2xhc3MgUywgY2xhc3MgVCwgY2xhc3MgQSZndDsgY2xhc3MgY29uc3RfbWVtX2Z1bjFfdDwvdHQ+Cjxicj48dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDogcHVibGljCmJpbmFyeV9mdW5jdGlvbiZsdDs8Yj5jb25zdDwvYj4gVCosIEEsIFMmZ3Q7IHs8L3R0Pgo8L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgaXMgc2ltcGx5IGEgY29udHJhZGljdGlvbjogdGhlIDx0dD5hcmd1bWVudF90eXBlPC90dD4gdHlwZWRlZiwKYW5kIHRoZSBhcmd1bWVudCB0eXBlIGl0c2VsZiwgYXJlIG5vdCB0aGUgc2FtZS48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMjk4Ij48L2E+Mjk4LiA6Om9wZXJhdG9yIGRlbGV0ZVtdIHJlcXVpcmVtZW50IGluY29ycmVjdC9pbnN1ZmZpY2llbnQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTguNS4xLjIgW25ldy5kZWxldGUuYXJyYXldIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEpvaG4gQS4gUGVkcmV0dGkgPGI+RGF0ZTo8L2I+IDIwMDEtMDEtMTA8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIDx0dD5vcGVyYXRvciBkZWxldGVbXTwvdHQ+IGRlc2NyaWJlZCBpbiAxOC41LjEuMiwgcDEyIC0KbmFtZWx5IHRoYXQgZm9yIG5vbi1udWxsIHZhbHVlIG9mIDxpPnB0cjwvaT4sIHRoZSBvcGVyYXRvciByZWNsYWltcyBzdG9yYWdlCmFsbG9jYXRlZCBieSB0aGUgZWFybGllciBjYWxsIHRvIHRoZSBkZWZhdWx0IDx0dD5vcGVyYXRvciBuZXdbXTwvdHQ+IC0gaXMgbm90CmNvcnJlY3QgaW4gYWxsIGNhc2VzLiBTaW5jZSB0aGUgc3BlY2lmaWVkIDx0dD5vcGVyYXRvciBuZXdbXTwvdHQ+IGRlZmF1bHQKYmVoYXZpb3IgaXMgdG8gY2FsbCA8dHQ+b3BlcmF0b3IgbmV3PC90dD4gKDE4LjUuMS4yLCBwNCwgcDgpLCB3aGljaCBjYW4gYmUKcmVwbGFjZWQsIGFsb25nIHdpdGggPHR0Pm9wZXJhdG9yIGRlbGV0ZTwvdHQ+LCBieSB0aGUgdXNlciwgdG8gaW1wbGVtZW50IHRoZWlyCm93biBtZW1vcnkgbWFuYWdlbWVudCwgdGhlIHNwZWNpZmllZCBkZWZhdWx0IGJlaGF2aW9yIG9mPHR0PiBvcGVyYXRvcgpkZWxldGVbXTwvdHQ+IG11c3QgYmUgdG8gY2FsbCA8dHQ+b3BlcmF0b3IgZGVsZXRlPC90dD4uCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAxOC41LjEuMiwgcDEyIGZyb208L3A+CjxibG9ja3F1b3RlPjxwPgo8Yj4tMTItPC9iPiA8Yj5EZWZhdWx0IGJlaGF2aW9yOjwvYj48L3A+Cjx1bD4KPGxpPgpGb3IgYSBudWxsIHZhbHVlIG9mIDxpPjx0dD5wdHI8L3R0PjwvaT4gLCBkb2VzIG5vdGhpbmcuCjwvbGk+CjxsaT4KQW55IG90aGVyIHZhbHVlIG9mIDxpPjx0dD5wdHI8L3R0PjwvaT4gc2hhbGwgYmUgYSB2YWx1ZSByZXR1cm5lZAplYXJsaWVyIGJ5IGEgY2FsbCB0byB0aGUgZGVmYXVsdCA8dHQ+b3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpPC90dD4uCltGb290bm90ZTogVGhlIHZhbHVlIG11c3Qgbm90IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCBieSBhbiBpbnRlcnZlbmluZwpjYWxsIHRvIDx0dD5vcGVyYXRvciBkZWxldGVbXSh2b2lkKik8L3R0PiAoMTcuNC4zLjggW3Jlcy5vbi5hcmd1bWVudHNdKS4KLS0tIGVuZCBmb290bm90ZV0KRm9yIHN1Y2ggYSBub24tbnVsbCB2YWx1ZSBvZiA8aT48dHQ+cHRyPC90dD48L2k+ICwgcmVjbGFpbXMgc3RvcmFnZQphbGxvY2F0ZWQgYnkgdGhlIGVhcmxpZXIgY2FsbCB0byB0aGUgZGVmYXVsdCA8dHQ+b3BlcmF0b3IgbmV3W108L3R0Pi4KPC9saT4KPC91bD4KPC9ibG9ja3F1b3RlPgoKPHA+dG88L3A+Cgo8YmxvY2txdW90ZT48cD4KPGI+LTEyLTwvYj4gPGI+RGVmYXVsdCBiZWhhdmlvcjogPC9iPkNhbGxzIDx0dD5vcGVyYXRvcgpkZWxldGUoPC90dD48aT5wdHI8L2k+KQpvciA8dHQ+b3BlcmF0b3IgZGVsZXRlKDxpPnB0cjwvaT4sIHN0ZDo6bm90aHJvdyk8L3R0PiByZXNwZWN0aXZlbHkuCjwvcD48L2Jsb2NrcXVvdGU+CjxwPmFuZCBleHB1bmdlIHBhcmFncmFwaCAxMy48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzMDAiPjwvYT4zMDAuIGxpc3Q6Om1lcmdlKCkgc3BlY2lmaWNhdGlvbiBpbmNvbXBsZXRlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjIuNC40IFtsaXN0Lm9wc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSm9obiBQZWRyZXR0aSA8Yj5EYXRlOjwvYj4gMjAwMS0wMS0yMzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbGlzdC5vcHMiPmlzc3VlczwvYT4gaW4gW2xpc3Qub3BzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSAiRWZmZWN0cyIgY2xhdXNlIGZvciBsaXN0OjptZXJnZSgpICgyMy4yLjQuNCBbbGlzdC5vcHNdLCBwMjMpCmFwcGVhcnMgdG8gYmUgaW5jb21wbGV0ZTogaXQgZG9lc24ndCBjb3ZlciB0aGUgY2FzZSB3aGVyZSB0aGUgYXJndW1lbnQKbGlzdCBpcyBpZGVudGljYWwgdG8gKnRoaXMgKGkuZS4sIHRoaXMgPT0gJmFtcDt4KS4gVGhlIHJlcXVpcmVtZW50IGluIHRoZQpub3RlIGluIHAyNCAoYmVsb3cpIGlzIHRoYXQgeCBiZSBlbXB0eSBhZnRlciB0aGUgbWVyZ2Ugd2hpY2ggaXMgc3VyZWx5CnVuaW50ZW5kZWQgaW4gdGhpcyBjYXNlLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMy4yLjQuNCBbbGlzdC5vcHNdLCByZXBsYWNlIHBhcmFncmFwcyAyMy0yNSB3aXRoOjwvcD4KPGJsb2NrcXVvdGU+CjxwPgoyMyBFZmZlY3RzOiBpZiAoJmFtcDt4ID09IHRoaXMpIGRvZXMgbm90aGluZzsgb3RoZXJ3aXNlLCBtZXJnZXMgdGhlIHR3bwpzb3J0ZWQgcmFuZ2VzIFtiZWdpbigpLCBlbmQoKSkgYW5kIFt4LmJlZ2luKCksIHguZW5kKCkpLiAgVGhlIHJlc3VsdAppcyBhIHJhbmdlIGluIHdoaWNoIHRoZSBlbGVtZW50cyB3aWxsIGJlIHNvcnRlZCBpbiBub24tZGVjcmVhc2luZwpvcmRlciBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyaW5nIGRlZmluZWQgYnkgY29tcDsgdGhhdCBpcywgZm9yIGV2ZXJ5Cml0ZXJhdG9yIGkgaW4gdGhlIHJhbmdlIG90aGVyIHRoYW4gdGhlIGZpcnN0LCB0aGUgY29uZGl0aW9uIGNvbXAoKmksCiooaSAtIDEpKSB3aWxsIGJlIGZhbHNlLgo8L3A+Cgo8cD4KMjQgTm90ZXM6IFN0YWJsZTogaWYgKCZhbXA7eCAhPSB0aGlzKSwgdGhlbiBmb3IgZXF1aXZhbGVudCBlbGVtZW50cyBpbiB0aGUKdHdvIG9yaWdpbmFsIHJhbmdlcywgdGhlIGVsZW1lbnRzIGZyb20gdGhlIG9yaWdpbmFsIHJhbmdlIFtiZWdpbigpLAplbmQoKSkgYWx3YXlzIHByZWNlZGUgdGhlIGVsZW1lbnRzIGZyb20gdGhlIG9yaWdpbmFsIHJhbmdlIFt4LmJlZ2luKCksCnguZW5kKCkpLiAgSWYgKCZhbXA7eCAhPSB0aGlzKSB0aGUgcmFuZ2UgW3guYmVnaW4oKSwgeC5lbmQoKSkgaXMgZW1wdHkKYWZ0ZXIgdGhlIG1lcmdlLgo8L3A+Cgo8cD4KMjUgQ29tcGxleGl0eTogQXQgbW9zdCBzaXplKCkgKyB4LnNpemUoKSAtIDEgYXBwbGljYXRpb25zIG9mIGNvbXAgaWYKKCZhbXA7eCAhICA9IHRoaXMpOyBvdGhlcndpc2UsIG5vIGFwcGxpY2F0aW9ucyBvZiBjb21wIGFyZSBwZXJmb3JtZWQuICBJZgphbiBleGNlcHRpb24gaXMgdGhyb3duIG90aGVyIHRoYW4gYnkgYSBjb21wYXJpc29uIHRoZXJlIGFyZSBubwplZmZlY3RzLgo8L3A+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bQ29wZW5oYWdlbjogVGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gZGlkIG5vdCBmaXggYWxsIG9mCnRoZSBwcm9ibGVtcyBpbiAyMy4yLjQuNCBbbGlzdC5vcHNdLCBwMjItMjUuICBUaHJlZSBkaWZmZXJlbnQKcGFyYWdyYXBocyAoMjMsIDI0LCAyNSkgZGVzY3JpYmUgdGhlIGVmZmVjdHMgb2YgPHR0Pm1lcmdlPC90dD4uCkNoYW5naW5nIHAyMywgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3RoZXIgdHdvLCBhcHBlYXJzIHRvIGludHJvZHVjZQpjb250cmFkaWN0aW9ucy4gIEFkZGl0aW9uYWxseSwgIm1lcmdlcyB0aGUgYXJndW1lbnQgbGlzdCBpbnRvIHRoZQpsaXN0IiBpcyBleGNlc3NpdmVseSB2YWd1ZS5dPC9pPjwvcD4KCgo8cD48aT5bUG9zdC1DdXJh52FvOiBSb2JlcnQgS2xhcmVyIHByb3ZpZGVkIG5ldyB3b3JkaW5nLl08L2k+PC9wPgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzAxIj48L2E+MzAxLiBiYXNpY19zdHJpbmcgdGVtcGxhdGUgY3RvciBlZmZlY3RzIGNsYXVzZSBvbWl0cyBhbGxvY2F0b3IgYXJndW1lbnQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjEuMy4xIFtzdHJpbmcucmVxdWlyZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAxLTAxLTI3PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmcucmVxdWlyZSI+aXNzdWVzPC9hPiBpbiBbc3RyaW5nLnJlcXVpcmVdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGVmZmVjdHMgY2xhdXNlIGZvciB0aGUgYmFzaWNfc3RyaW5nIHRlbXBsYXRlIGN0b3IgaW4gMjEuMy4xLCBwMTUKbGVhdmVzIG91dCB0aGUgdGhpcmQgYXJndW1lbnQgb2YgdHlwZSBBbGxvY2F0b3IuIEkgYmVsaWV2ZSB0aGlzIHRvIGJlCmEgbWlzdGFrZS4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZTwvcD4KCjxibG9ja3F1b3RlPgogICAgPHA+PGI+LTE1LSBFZmZlY3RzOjwvYj4gSWYgPGk+PHR0PklucHV0SXRlcmF0b3I8L3R0PjwvaT4gaXMgYW4gaW50ZWdyYWwKICAgIHR5cGUsIGVxdWl2YWxlbnQgdG88L3A+CgogICAgPGJsb2NrcXVvdGU+PHA+PHR0PmJhc2ljX3N0cmluZyhzdGF0aWNfY2FzdCZsdDtzaXplX3R5cGUmZ3Q7KGJlZ2luKSwKICAgIHN0YXRpY19jYXN0Jmx0O3ZhbHVlX3R5cGUmZ3Q7KGVuZCkpPC90dD48L3A+PC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD53aXRoPC9wPgoKPGJsb2NrcXVvdGU+CiAgICA8cD48Yj4tMTUtIEVmZmVjdHM6PC9iPiBJZiA8aT48dHQ+SW5wdXRJdGVyYXRvcjwvdHQ+PC9pPiBpcyBhbiBpbnRlZ3JhbAogICAgdHlwZSwgZXF1aXZhbGVudCB0bzwvcD4KCiAgICA8YmxvY2txdW90ZT48cD48dHQ+YmFzaWNfc3RyaW5nKHN0YXRpY19jYXN0Jmx0O3NpemVfdHlwZSZndDsoYmVnaW4pLAogICAgc3RhdGljX2Nhc3QmbHQ7dmFsdWVfdHlwZSZndDsoZW5kKSwgPGI+YTwvYj4pPC90dD48L3A+PC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzMDMiPjwvYT4zMDMuIEJpdHNldCBpbnB1dCBvcGVyYXRvciB1bmRlcnNwZWNpZmllZDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4zLjUuMyBbYml0c2V0Lm9wZXJhdG9yc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAyMDAxLTAyLTA1PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJbiAyMy4zLjUuMywgd2UgYXJlIHRvbGQgdGhhdCA8dHQ+Yml0c2V0PC90dD4ncyBpbnB1dCBvcGVyYXRvcgoiRXh0cmFjdHMgdXAgdG8gPGk+TjwvaT4gKHNpbmdsZS1ieXRlKSBjaGFyYWN0ZXJzIGZyb20KPGk+aXM8L2k+LiIsIHdoZXJlIDxpPmlzPC9pPiBpcyBhIHN0cmVhbSBvZiB0eXBlCjx0dD5iYXNpY19pc3RyZWFtJmx0O2NoYXJULCB0cmFpdHMmZ3Q7PC90dD4uCjwvcD4KCjxwPgpUaGUgc3RhbmRhcmQgZG9lcyBub3Qgc2F5IHdoYXQgaXQgbWVhbnMgdG8gZXh0cmFjdCBzaW5nbGUgYnl0ZQpjaGFyYWN0ZXJzIGZyb20gYSBzdHJlYW0gd2hvc2UgY2hhcmFjdGVyIHR5cGUsIDx0dD5jaGFyVDwvdHQ+LCBpcyBpbgpnZW5lcmFsIG5vdCBhIHNpbmdsZS1ieXRlIGNoYXJhY3RlciB0eXBlLiAgRXhpc3RpbmcgaW1wbGVtZW50YXRpb25zCmRpZmZlci4KPC9wPgoKPHA+CkEgcmVhc29uYWJsZSBzb2x1dGlvbiB3aWxsIHByb2JhYmx5IGludm9sdmUgPHR0PndpZGVuKCk8L3R0PiBhbmQvb3IKPHR0Pm5hcnJvdygpPC90dD4sIHNpbmNlIHRoZXkgYXJlIHRoZSBzdXBwbGllZCBtZWNoYW5pc20gZm9yCmNvbnZlcnRpbmcgYSBzaW5nbGUgY2hhcmFjdGVyIGJldHdlZW4gPHR0PmNoYXI8L3R0PiBhbmQgCmFyYml0cmFyeSA8dHQ+Y2hhclQ8L3R0Pi4KPC9wPgoKPHA+TmFycm93aW5nIHRoZSBpbnB1dCBjaGFyYWN0ZXJzIGlzIG5vdCB0aGUgc2FtZSBhcyB3aWRlbmluZyB0aGUKbGl0ZXJhbHMgPHR0PicwJzwvdHQ+IGFuZCA8dHQ+JzEnPC90dD4sIGJlY2F1c2UgdGhlcmUgbWF5IGJlIHNvbWUKbG9jYWxlcyBpbiB3aGljaCBtb3JlIHRoYW4gb25lIHdpZGUgY2hhcmFjdGVyIG1hcHMgdG8gdGhlIG5hcnJvdwpjaGFyYWN0ZXIgPHR0PicwJzwvdHQ+LiAgTmFycm93aW5nIG1lYW5zIHRoYXQgYWx0ZXJuYXRlCnJlcHJlc2VudGF0aW9ucyBtYXkgYmUgdXNlZCBmb3IgYml0c2V0IGlucHV0LCB3aWRlbmluZyBtZWFucyB0aGF0CnRoZXkgbWF5IG5vdCBiZS48L3A+Cgo8cD5Ob3RlIHRoYXQgZm9yIG51bWVyaWMgaW5wdXQsIDx0dD5udW1fZ2V0Jmx0OyZndDs8L3R0PgooMjIuMi4yLjEuMi84KSBjb21wYXJlcyBpbnB1dCBjaGFyYWN0ZXJzIHRvIHdpZGVuZWQgdmVyc2lvbiBvZiBuYXJyb3cKY2hhcmFjdGVyIGxpdGVyYWxzLjwvcD4KCjxwPkZyb20gUGV0ZSBCZWNrZXIsIGluIGMrK3N0ZC1saWItODIyNDo8L3A+CjxibG9ja3F1b3RlPgo8cD4KRGlmZmVyZW50IHdyaXRpbmcgc3lzdGVtcyBjYW4gaGF2ZSBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zIGZvciB0aGUKZGlnaXRzIHRoYXQgcmVwcmVzZW50IDAgYW5kIDEuIEZvciBleGFtcGxlLCBpbiB0aGUgVW5pY29kZSByZXByZXNlbnRhdGlvbgpvZiB0aGUgRGV2YW5hZ2FyaSBzY3JpcHQgKHVzZWQgaW4gbWFueSBvZiB0aGUgSW5kaWMgbGFuZ3VhZ2VzKSB0aGUgZGlnaXQgMAppcyAweDA5NjYsIGFuZCB0aGUgZGlnaXQgMSBpcyAweDA5NjcuIENhbGxpbmcgbmFycm93IHdvdWxkIHRyYW5zbGF0ZSB0aG9zZQppbnRvICcwJyBhbmQgJzEnLiBCdXQgVW5pY29kZSBhbHNvIHByb3ZpZGVzIHRoZSBBU0NJSSB2YWx1ZXMgMHgwMDMwIGFuZAoweDAwMzEgZm9yIGZvciB0aGUgTGF0aW4gcmVwcmVzZW50YXRpb25zIG9mICcwJyBhbmQgJzEnLCBhcyB3ZWxsIGFzIGNvZGUKcG9pbnRzIGZvciB0aGUgc2FtZSBudW1lcmljIHZhbHVlcyBpbiBzZXZlcmFsIG90aGVyIHNjcmlwdHMgKFRhbWlsIGhhcyBubwpjaGFyYWN0ZXIgZm9yIDAsIGJ1dCBkb2VzIGhhdmUgdGhlIGRpZ2l0cyAxLTkpLCBhbmQgYW55IG9mIHRoZXNlIHZhbHVlcwp3b3VsZCBhbHNvIGJlIG5hcnJvd2VkIHRvICcwJyBhbmQgJzEnLgo8L3A+Cgo8cD4uLi48L3A+Cgo8cD4KSXQncyBmYWlybHkgY29tbW9uIHRvIGludGVybWl4IGJvdGggbmF0aXZlIGFuZCBMYXRpbgpyZXByZXNlbnRhdGlvbnMgb2YgbnVtYmVycyBpbiBhIGRvY3VtZW50LiBTbyBJIHRoaW5rIHRoZSBydWxlIGhhcyB0byBiZQp0aGF0IGlmIGEgd2lkZSBjaGFyYWN0ZXIgcmVwcmVzZW50cyBhIGRpZ2l0IHdob3NlIHZhbHVlIGlzIDAgdGhlbiB0aGUgYml0CnNob3VsZCBiZSBjbGVhcmVkOyBpZiBpdCByZXByZXNlbnRzIGEgZGlnaXQgd2hvc2UgdmFsdWUgaXMgMSB0aGVuIHRoZSBiaXQKc2hvdWxkIGJlIHNldDsgb3RoZXJ3aXNlIHRocm93IGFuIGV4Y2VwdGlvbi4gU28gaW4gYSBEZXZhbmFnYXJpIGxvY2FsZSwKYm90aCAweDA5NjYgYW5kIDB4MDAzMCB3b3VsZCBjbGVhciB0aGUgYml0LCBhbmQgYm90aCAweDA5NjcgYW5kIDB4MDAzMQp3b3VsZCBzZXQgaXQuIFdpZGVuIGNhbid0IGRvIHRoYXQuIEl0IHdvdWxkIHBpY2sgb25lIG9mIHRob3NlIHR3byB2YWx1ZXMsCmFuZCBleGNsdWRlIHRoZSBvdGhlciBvbmUuCjwvcD4KCjwvYmxvY2txdW90ZT4KCjxwPkZyb20gSmVucyBNYXVyZXIsIGluIGMrK3N0ZC1saWItODIzMzo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CldoYXRldmVyIHdlIGRlY2lkZSwgSSB3b3VsZCBmaW5kIGl0IG1vc3Qgc3VycHJpc2luZyBpZgpiaXRzZXQgY29udmVyc2lvbiB3b3JrZWQgZGlmZmVyZW50bHkgZnJvbSBpbnQgY29udmVyc2lvbgp3aXRoIHJlZ2FyZCB0byBhbHRlcm5hdGUgbG9jYWwgcmVwcmVzZW50YXRpb25zIG9mCm51bWJlcnMuCjwvcD4KCjxwPlRodXMsIEkgdGhpbmsgdGhlIG9wdGlvbnMgYXJlOjwvcD4KPHVsPgogPGxpPiBIYXZlIGEgbmV3IGRlZmVjdCBpc3N1ZSBmb3IgMjIuMi4yLjEuMi84IHNvIHRoYXQgaXQgd2lsbApyZXF1aXJlIHRoZSB1c2Ugb2YgbmFycm93KCkuPC9saT4KCiA8bGk+IEhhdmUgYSBkZWZlY3QgaXNzdWUgZm9yIGJpdHNldCgpIHdoaWNoIGRlc2NyaWJlcyBjbGVhcmx5CnRoYXQgd2lkZW4oKSBpcyB0byBiZSB1c2VkLjwvbGk+CjwvdWw+CjwvYmxvY2txdW90ZT4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKICAgIDxwPlJlcGxhY2UgdGhlIGZpcnN0IHR3byBzZW50ZW5jZXMgb2YgcGFyYWdyYXBoIDUgd2l0aDo8L3A+CgogICAgPGJsb2NrcXVvdGU+PHA+CiAgICBFeHRyYWN0cyB1cCB0byA8aT5OPC9pPiBjaGFyYWN0ZXJzIGZyb20gPGk+aXM8L2k+LiBTdG9yZXMgdGhlc2UKICAgIGNoYXJhY3RlcnMgaW4gYSB0ZW1wb3Jhcnkgb2JqZWN0IDxpPnN0cjwvaT4gb2YgdHlwZQogICAgPHR0PmJhc2ljX3N0cmluZyZsdDtjaGFyVCwgdHJhaXRzJmd0OzwvdHQ+LCB0aGVuIGV2YWx1YXRlcyB0aGUKICAgIGV4cHJlc3Npb24gPHR0PjxpPng8L2k+ID0gYml0c2V0Jmx0O04mZ3Q7KDxpPnN0cjwvaT4pPC90dD4uCiAgICA8L3A+PC9ibG9ja3F1b3RlPgoKICAgIDxwPlJlcGxhY2UgdGhlIHRoaXJkIGJ1bGxldCBpdGVtIGluIHBhcmFncmFwaCA1IHdpdGg6PC9wPgogICAgPHVsPjxsaT4KICAgIHRoZSBuZXh0IGlucHV0IGNoYXJhY3RlciBpcyBuZWl0aGVyIDx0dD48aT5pczwvaT4ud2lkZW4oMCk8L3R0PgogICAgbm9yIDx0dD48aT5pczwvaT4ud2lkZW4oMSk8L3R0PiAoaW4gd2hpY2ggY2FzZSB0aGUgaW5wdXQgY2hhcmFjdGVyCiAgICBpcyBub3QgZXh0cmFjdGVkKS4KICAgIDwvbGk+PC91bD4KCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPklucHV0IGZvciA8dHQ+Yml0c2V0PC90dD4gc2hvdWxkIHdvcmsgdGhlIHNhbWUgd2F5IGFzIG51bWVyaWMKaW5wdXQuICBVc2luZyA8dHQ+d2lkZW48L3R0PiBkb2VzIG1lYW4gdGhhdCBhbHRlcm5hdGl2ZSBkaWdpdApyZXByZXNlbnRhdGlvbnMgd2lsbCBub3QgYmUgcmVjb2duaXplZCwgYnV0IHRoaXMgd2FzIGEga25vd24gCmNvbnNlcXVlbmNlIG9mIHRoZSBkZXNpZ24gY2hvaWNlLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzMDUiPjwvYT4zMDUuIERlZmF1bHQgYmVoYXZpb3Igb2YgY29kZWN2dCZsdDt3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3QmZ3Q7OjpsZW5ndGgoKTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjEuNSBbbG9jYWxlLmNvZGVjdnQuYnluYW1lXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBIb3dhcmQgSGlubmFudCA8Yj5EYXRlOjwvYj4gMjAwMS0wMS0yNDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlLmNvZGVjdnQuYnluYW1lIj5pc3N1ZXM8L2E+IGluIFtsb2NhbGUuY29kZWN2dC5ieW5hbWVdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4yMi4yLjEuNS8zIGludHJvZHVjZXMgY29kZWN2dCBpbiBwYXJ0IHdpdGg6PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgY29kZWN2dCZsdDt3Y2hhcl90LGNoYXIsbWJzdGF0ZV90Jmd0OyBjb252ZXJ0cyBiZXR3ZWVuIHRoZSBuYXRpdmUKICBjaGFyYWN0ZXIgc2V0cyBmb3IgdGlueSBhbmQgd2lkZSBjaGFyYWN0ZXJzLiBJbnN0YW50aWF0aW9ucyBvbgogIG1ic3RhdGVfdCBwZXJmb3JtIGNvbnZlcnNpb24gYmV0d2VlbiBlbmNvZGluZ3Mga25vd24gdG8gdGhlIGxpYnJhcnkKICBpbXBsZW1lbnRvci4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPkJ1dCAyMi4yLjEuNS4yLzEwIGRlc2NyaWJlcyBkb19sZW5ndGggaW4gcGFydCB3aXRoOjwvcD4KCjxibG9ja3F1b3RlPjxwPgogIC4uLiBjb2RlY3Z0Jmx0O3djaGFyX3QsIGNoYXIsIG1ic3RhdGVfdCZndDsgLi4uIHJldHVybihzKSB0aGUgbGVzc2VyIG9mIG1heCBhbmQgCiAgKGZyb21fZW5kLWZyb20pLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBzZW1hbnRpY3Mgb2YgZG9faW4gYW5kIGRvX2xlbmd0aCBhcmUgbGlua2VkLiAgV2hhdCBvbmUgZG9lcyBtdXN0CmJlIGNvbnNpc3RlbnQgd2l0aCB3aGF0IHRoZSBvdGhlciBkb2VzLiAgMjIuMi4xLjUvMyBsZWFkcyBtZSB0bwpiZWxpZXZlIHRoYXQgdGhlIHZlbmRvciBpcyBhbGxvd2VkIHRvIGNob29zZSB0aGUgYWxnb3JpdGhtIHRoYXQKY29kZWN2dCZsdDt3Y2hhcl90LGNoYXIsbWJzdGF0ZV90Jmd0Ozo6ZG9faW4gcGVyZm9ybXMgc28gdGhhdCBpdCBtYWtlcwpoaXMgY3VzdG9tZXJzIGhhcHB5IG9uIGEgZ2l2ZW4gcGxhdGZvcm0uICBCdXQgMjIuMi4xLjUuMi8xMCBleHBsaWNpdGx5CnNheXMgd2hhdCBjb2RlY3Z0Jmx0O3djaGFyX3QsY2hhcixtYnN0YXRlX3QmZ3Q7Ojpkb19sZW5ndGggbXVzdApyZXR1cm4uICBBbmQgdGh1cyBpbmRpcmVjdGx5IHNwZWNpZmllcyB0aGUgYWxnb3JpdGhtIHRoYXQKY29kZWN2dCZsdDt3Y2hhcl90LGNoYXIsbWJzdGF0ZV90Jmd0Ozo6ZG9faW4gbXVzdCBwZXJmb3JtLiAgSSBiZWxpZXZlCnRoYXQgdGhpcyBpcyBub3Qgd2hhdCB3YXMgaW50ZW5kZWQgYW5kIGlzIGEgZGVmZWN0Lgo8L3A+Cgo8cD5EaXNjdXNzaW9uIGZyb20gdGhlIC1saWIgcmVmbGVjdG9yOgoKPGJyPlRoaXMgcHJvcG9zYWwgd291bGQgaGF2ZSB0aGUgZWZmZWN0IG9mIG1ha2luZyB0aGUgc2VtYW50aWNzIG9mCmFsbCBvZiB0aGUgdmlydHVhbCBmdW5jdGlvbnMgaW4gPHR0PmNvZGVjdnQmbHQ7d2NoYXJfdCwgY2hhciwKbWJzdGF0ZV90Jmd0OzwvdHQ+IGltcGxlbWVudGF0aW9uIHNwZWNpZmllZC4gIElzIHRoYXQgd2hhdCB3ZSB3YW50LCBvcgpkbyB3ZSB3YW50IHRvIG1hbmRhdGUgc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHRoZSBiYXNlIGNsYXNzIHZpcnR1YWxzCmFuZCBsZWF2ZSB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWVkIGJlaGF2aW9yIGZvciB0aGUgY29kZWN2dF9ieW5hbWUKZGVyaXZlZCBjbGFzcz8gIFRoZSB0cmFkZW9mZiBpcyB0aGF0IGZvcm1lciBhbGxvd3MgaW1wbGVtZW50b3JzIHRvCndyaXRlIGEgYmFzZSBjbGFzcyB0aGF0IGFjdHVhbGx5IGRvZXMgc29tZXRoaW5nIHVzZWZ1bCwgd2hpbGUgdGhlCmxhdHRlciBnaXZlcyB1c2VycyBhIHdheSB0byBnZXQga25vd24gYW5kIHNwZWNpZmllZC0tLWFsYmVpdAp1c2VsZXNzLS0tYmVoYXZpb3IsIGFuZCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHdheSB0aGUgc3RhbmRhcmQKaGFuZGxlcyBvdGhlciBmYWNldHMuICBJdCBpcyBub3QgY2xlYXIgd2hhdCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uCndhcy48L3A+Cgo8cD4KTmF0aGFuIGhhcyBzdWdnZXN0IGEgY29tcHJvbWlzZTogYSBjaGFyYWN0ZXIgdGhhdCBpcyBhIHdpZGVuZWQgdmVyc2lvbgpvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgYmFzaWMgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQgbXVzdCBiZQpjb252ZXJ0ZWQgdG8gYSBvbmUtYnl0ZSBzZXF1ZW5jZSwgYnV0IHRoZXJlIGlzIG5vIHN1Y2ggcmVxdWlyZW1lbnQKZm9yIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIGJhc2ljIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIDIyLjIuMS41LjIvNSBmcm9tOgo8L3A+CjxwPgpUaGUgaW5zdGFudGlhdGlvbnMgcmVxdWlyZWQgaW4gVGFibGUgNTEgKGxpYi5sb2NhbGUuY2F0ZWdvcnkpLCBuYW1lbHkKY29kZWN2dCZsdDt3Y2hhcl90LGNoYXIsbWJzdGF0ZV90Jmd0OyBhbmQKY29kZWN2dCZsdDtjaGFyLGNoYXIsbWJzdGF0ZV90Jmd0Oywgc3RvcmUgbm8gY2hhcmFjdGVycy4gU3RvcmVzIG5vIG1vcmUKdGhhbiAodG9fbGltaXQtdG8pIGRlc3RpbmF0aW9uIGVsZW1lbnRzLiBJdCBhbHdheXMgbGVhdmVzIHRoZSB0b19uZXh0CnBvaW50ZXIgcG9pbnRpbmcgb25lIGJleW9uZCB0aGUgbGFzdCBlbGVtZW50IHN1Y2Nlc3NmdWxseSBzdG9yZWQuCjwvcD4KPHA+CnRvOgo8L3A+CjxwPgpTdG9yZXMgbm8gbW9yZSB0aGFuICh0b19saW1pdC10bykgZGVzdGluYXRpb24gZWxlbWVudHMsIGFuZCBsZWF2ZXMgdGhlCnRvX25leHQgcG9pbnRlciBwb2ludGluZyBvbmUgYmV5b25kIHRoZSBsYXN0IGVsZW1lbnQgc3VjY2Vzc2Z1bGx5CnN0b3JlZC4gIGNvZGVjdnQmbHQ7Y2hhcixjaGFyLG1ic3RhdGVfdCZndDsgc3RvcmVzIG5vIGNoYXJhY3RlcnMuCjwvcD4KCjxwPkNoYW5nZSAyMi4yLjEuNS4yLzEwIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+PHA+Ci0xMC0gUmV0dXJuczogKGZyb21fbmV4dC1mcm9tKSB3aGVyZSBmcm9tX25leHQgaXMgdGhlIGxhcmdlc3QgdmFsdWUgaW4KdGhlIHJhbmdlIFtmcm9tLGZyb21fZW5kXSBzdWNoIHRoYXQgdGhlIHNlcXVlbmNlIG9mIHZhbHVlcyBpbiB0aGUKcmFuZ2UgW2Zyb20sZnJvbV9uZXh0KSByZXByZXNlbnRzIG1heCBvciBmZXdlciB2YWxpZCBjb21wbGV0ZQpjaGFyYWN0ZXJzIG9mIHR5cGUgaW50ZXJuVC4gVGhlIGluc3RhbnRpYXRpb25zIHJlcXVpcmVkIGluIFRhYmxlIDUxCigyMS4xLjEuMS4xKSwgbmFtZWx5IGNvZGVjdnQmbHQ7d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Jmd0OyBhbmQKY29kZWN2dCZsdDtjaGFyLCBjaGFyLCBtYnN0YXRlX3QmZ3Q7LCByZXR1cm4gdGhlIGxlc3NlciBvZiBtYXggYW5kCihmcm9tX2VuZC1mcm9tKS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPjxwPgotMTAtIFJldHVybnM6IChmcm9tX25leHQtZnJvbSkgd2hlcmUgZnJvbV9uZXh0IGlzIHRoZSBsYXJnZXN0IHZhbHVlIGluIAp0aGUgcmFuZ2UgW2Zyb20sZnJvbV9lbmRdIHN1Y2ggdGhhdCB0aGUgc2VxdWVuY2Ugb2YgdmFsdWVzIGluIHRoZSByYW5nZSAKW2Zyb20sZnJvbV9uZXh0KSByZXByZXNlbnRzIG1heCBvciBmZXdlciB2YWxpZCBjb21wbGV0ZSBjaGFyYWN0ZXJzIG9mIAp0eXBlIGludGVyblQuIFRoZSBpbnN0YW50aWF0aW9uIGNvZGVjdnQmbHQ7Y2hhciwgY2hhciwgbWJzdGF0ZV90Jmd0OyByZXR1cm5zIAp0aGUgbGVzc2VyIG9mIG1heCBhbmQgKGZyb21fZW5kLWZyb20pLiAKPC9wPjwvYmxvY2txdW90ZT4KCjxwPjxpPltSZWRtb25kOiBOYXRoYW4gc3VnZ2VzdGVkIGFuIGFsdGVybmF0aXZlIHJlc29sdXRpb246IHNhbWUgYXMKYWJvdmUsIGJ1dCByZXF1aXJlIHRoYXQsIGluIHRoZSBkZWZhdWx0IGVuY29kaW5nLCBhIGNoYXJhY3RlciBmcm9tIHRoZQpiYXNpYyBleGVjdXRpb24gY2hhcmFjdGVyIHNldCB3b3VsZCBtYXAgdG8gYSBzaW5nbGUgZXh0ZXJuYWwKY2hhcmFjdGVyLiAgVGhlIHN0cmF3IHBvbGwgd2FzIDgtMSBpbiBmYXZvciBvZiB0aGUgcHJvcG9zZWQKcmVzb2x1dGlvbi5dPC9pPjwvcD4KCgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgZGVmYXVsdCBlbmNvZGluZyBzaG91bGQgYmUgd2hhdGV2ZXIgdXNlcnMgb2YgYSBnaXZlbiBwbGF0Zm9ybQp3b3VsZCBleHBlY3QgdG8gYmUgdGhlIG1vc3QgbmF0dXJhbC4gIFRoaXMgdmFyaWVzIGZyb20gcGxhdGZvcm0gdG8KcGxhdGZvcm0uICBJbiBtYW55IGNhc2VzIHRoZXJlIGlzIGEgcHJlZXhpc3RpbmcgQyBsaWJyYXJ5LCBhbmQgdXNlcnMKd291bGQgZXhwZWN0IHRoZSBkZWZhdWx0IGVuY29kaW5nIHRvIGJlIHdoYXRldmVyIEMgdXNlcyBpbiB0aGUgZGVmYXVsdAoiQyIgbG9jYWxlLiAgV2UgY291bGQgaW1wb3NlIGEgZ3VhcmFudGVlIGxpa2UgdGhlIG9uZSBOYXRoYW4gc3VnZ2VzdGVkCihhIGNoYXJhY3RlciBmcm9tIHRoZSBiYXNpYyBleGVjdXRpb24gY2hhcmFjdGVyIHNldCBtdXN0IG1hcCB0byBhCnNpbmdsZSBleHRlcm5hbCBjaGFyYWN0ZXIpLCBidXQgdGhpcyB3b3VsZCBydWxlIG91dCBpbXBvcnRhbnQKZW5jb2RpbmdzIHRoYXQgYXJlIGluIGNvbW1vbiB1c2U6IGl0IHdvdWxkIHJ1bGUgb3V0IEpJUywgZm9yCmV4YW1wbGUsIGFuZCBpdCB3b3VsZCBydWxlIG91dCBhIGZpeGVkLXdpZHRoIGVuY29kaW5nIG9mIFVDUy00LjwvcD4KCjxwPjxpPltDdXJh52FvOiBmaXhlZCByYXRpb25hbGUgdHlwbyBhdCB0aGUgcmVxdWVzdCBvZiBJY2hpcm8gS29zaGlkYTsKInNoaWZ0LUpJUyIgY2hhbmdlZCB0byAiSklTIi5dPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjMwNiI+PC9hPjMwNi4gb2Zmc2V0b2YgbWFjcm8gYW5kIG5vbi1QT0QgdHlwZXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTguMSBbc3VwcG9ydC50eXBlc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gU3RldmUgQ2xhbWFnZSA8Yj5EYXRlOjwvYj4gMjAwMS0wMi0yMTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjc3VwcG9ydC50eXBlcyI+aXNzdWVzPC9hPiBpbiBbc3VwcG9ydC50eXBlc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+IAo8cD5TcGxpY2VkIHRvZ2V0aGVyIGZyb20gcmVmbGVjdG9yIG1lc3NhZ2VzIGMrK3N0ZC1saWItODI5NCBhbmQgLTgyOTU6PC9wPgoKPHA+MTguMSwgcGFyYWdyYXBoIDUsIHJlYWRzOiAiVGhlIG1hY3JvIDx0dD5vZmZzZXRvZjwvdHQ+CmFjY2VwdHMgYSByZXN0cmljdGVkIHNldCBvZiA8aT50eXBlPC9pPiBhcmd1bWVudHMgaW4gdGhpcwpJbnRlcm5hdGlvbmFsIFN0YW5kYXJkLiA8aT50eXBlPC9pPiBzaGFsbCBiZSBhIFBPRCBzdHJ1Y3R1cmUgb3IgYSBQT0QKdW5pb24gKGNsYXVzZSA5KS4gVGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgb2Zmc2V0b2YgbWFjcm8gdG8gYSBmaWVsZAp0aGF0IGlzIGEgc3RhdGljIGRhdGEgbWVtYmVyIG9yIGEgZnVuY3Rpb24gbWVtYmVyIGlzCnVuZGVmaW5lZC4iPC9wPgoKPHA+Rm9yIHRoZSBQT0QgcmVxdWlyZW1lbnQsIGl0IGRvZXNuJ3Qgc2F5ICJubyBkaWFnbm9zdGljCnJlcXVpcmVkIiBvciAidW5kZWZpbmVkIGJlaGF2aW9yIi4gSSByZWFkIDEuNCBbaW50cm8uY29tcGxpYW5jZV0sIHBhcmFncmFwaCAxLCB0byBtZWFuIHRoYXQgYSBkaWFnbm9zdGljIGlzIHJlcXVpcmVkLgpJdCdzIG5vdCBjbGVhciB3aGV0aGVyIHRoaXMgcmVxdWlyZW1lbnQgd2FzIGludGVuZGVkLiAgV2hpbGUgaXQncwpwb3NzaWJsZSB0byBwcm92aWRlIHN1Y2ggYSBkaWFnbm9zdGljLCB0aGUgZXh0cmEgY29tcGxpY2F0aW9uIGRvZXNuJ3QKc2VlbSB0byBhZGQgYW55IHZhbHVlLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMTguMSwgcGFyYWdyYXBoIDUsIHRvICJJZiA8aT50eXBlPC9pPiBpcyBub3QgYSBQT0QKc3RydWN0dXJlIG9yIGEgUE9EIHVuaW9uIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuIjwvcD4KCjxwPjxpPltDb3BlbmhhZ2VuOiBzdHJhdyBwb2xsIHdhcyA3LTQgaW4gZmF2b3IuICBJdCB3YXMgZ2VuZXJhbGx5CmFncmVlZCB0aGF0IHJlcXVpcmluZyBhIGRpYWdub3N0aWMgd2FzIGluYWR2ZXJ0ZW50LCBidXQgc29tZSBMV0cKbWVtYmVycyB0aG91Z2h0IHRoYXQgZGlhZ25vc3RpY3Mgc2hvdWxkIGJlIHJlcXVpcmVkIHdoZW5ldmVyCnBvc3NpYmxlLl08L2k+PC9wPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzMDciPjwvYT4zMDcuIExhY2sgb2YgcmVmZXJlbmNlIHR5cGVkZWZzIGluIGNvbnRhaW5lciBhZGFwdG9yczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4yLjQgW2xpc3RdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEhvd2FyZCBIaW5uYW50IDxiPkRhdGU6PC9iPiAyMDAxLTAzLTEzPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+Cgo8cD5Gcm9tIHJlZmxlY3RvciBtZXNzYWdlIGMrK3N0ZC1saWItODMzMC4gIFNlZSBhbHNvIGxpYi04MzE3LjwvcD4KCjxwPgpUaGUgc3RhbmRhcmQgaXMgY3VycmVudGx5IGluY29uc2lzdGVudCBpbiAyMy4yLjQuMiBbbGlzdC5jYXBhY2l0eV0KcGFyYWdyYXBoIDEgYW5kIDIzLjIuNC4zIFtsaXN0Lm1vZGlmaWVyc10gcGFyYWdyYXBoIDEuCjIzLjIuMy4zLzEsIGZvciBleGFtcGxlLCBzYXlzOgo8L3A+Cgo8YmxvY2txdW90ZT48cD4KLTEtIEFueSBzZXF1ZW5jZSBzdXBwb3J0aW5nIG9wZXJhdGlvbnMgYmFjaygpLCBwdXNoX2JhY2soKSBhbmQgcG9wX2JhY2soKSAKY2FuIGJlIHVzZWQgdG8gaW5zdGFudGlhdGUgc3RhY2suIEluIHBhcnRpY3VsYXIsIHZlY3RvciAobGliLnZlY3RvciksIGxpc3QgCihsaWIubGlzdCkgYW5kIGRlcXVlIChsaWIuZGVxdWUpIGNhbiBiZSB1c2VkLiAKPC9wPjwvYmxvY2txdW90ZT4KCjxwPkJ1dCB0aGlzIGlzIGZhbHNlOiB2ZWN0b3ImbHQ7Ym9vbCZndDsgY2FuIG5vdCBiZSB1c2VkLCBiZWNhdXNlIHRoZQpjb250YWluZXIgYWRhcHRvcnMgcmV0dXJuIGEgVCZhbXA7IHJhdGhlciB0aGFuIHVzaW5nIHRoZSB1bmRlcmx5aW5nCmNvbnRhaW5lcidzIHJlZmVyZW5jZSB0eXBlLjwvcD4KCjxwPlRoaXMgaXMgYSBjb250cmFkaWN0aW9uIHRoYXQgY2FuIGJlIGZpeGVkIGJ5OjwvcD4KCjxvbD4KPGxpPk1vZGlmeWluZyB0aGVzZSBwYXJhZ3JhcGhzIHRvIHNheSB0aGF0IHZlY3RvciZsdDtib29sJmd0OwogICAgaXMgYW4gZXhjZXB0aW9uLjwvbGk+CjxsaT5SZW1vdmluZyB0aGUgdmVjdG9yJmx0O2Jvb2wmZ3Q7IHNwZWNpYWxpemF0aW9uLjwvbGk+CjxsaT5DaGFuZ2luZyB0aGUgcmV0dXJuIHR5cGVzIG9mIHN0YWNrIGFuZCBwcmlvcml0eV9xdWV1ZSB0byB1c2UgCiAgICByZWZlcmVuY2UgdHlwZWRlZidzLjwvbGk+Cjwvb2w+Cgo8cD4KSSBwcm9wb3NlIDMuICBUaGlzIGRvZXMgbm90IHByZWNsdWRlIG9wdGlvbiAyIGlmIHdlIGNob29zZSB0byBkbyBpdApsYXRlciAoc2VlIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzk2Ij45NjwvYT4pOyB0aGUgaXNzdWVzIGFyZSBpbmRlcGVuZGVudC4gIE9wdGlvbgozIG9mZmVycyBhIHNtYWxsIHN0ZXAgdG93YXJkcyBzdXBwb3J0IGZvciBwcm94aWVkIGNvbnRhaW5lcnMuICBUaGlzCnNtYWxsIHN0ZXAgZml4ZXMgYSBjdXJyZW50IGNvbnRyYWRpY3Rpb24sIGlzIGVhc3kgZm9yIHZlbmRvcnMgdG8KaW1wbGVtZW50LCBpcyBhbHJlYWR5IGltcGxlbWVudGVkIGluIGF0IGxlYXN0IG9uZSBwb3B1bGFyIGxpYiwgYW5kCmRvZXMgbm90IGJyZWFrIGFueSBjb2RlLgo8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+U3VtbWFyeTogQWRkIHJlZmVyZW5jZSBhbmQgY29uc3RfcmVmZXJlbmNlIHR5cGVkZWZzIHRvIHF1ZXVlLApwcmlvcml0eV9xdWV1ZSBhbmQgc3RhY2suICBDaGFuZ2UgcmV0dXJuIHR5cGVzIG9mICJ2YWx1ZV90eXBlJmFtcDsiIHRvCiJyZWZlcmVuY2UiLiAgQ2hhbmdlIHJldHVybiB0eXBlcyBvZiAiY29uc3QgdmFsdWVfdHlwZSZhbXA7IiB0bwoiY29uc3RfcmVmZXJlbmNlIi4gIERldGFpbHM6PC9wPgoKPHA+Q2hhbmdlIDIzLjIuMy4xLzEgZnJvbTo8L3A+Cgo8cHJlPiAgbmFtZXNwYWNlIHN0ZCB7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyID0gZGVxdWUmbHQ7VCZndDsgJmd0OwogICAgY2xhc3MgcXVldWUgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmICAgICAgICAgIENvbnRhaW5lciAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogICAgcHJvdGVjdGVkOgogICAgICBDb250YWluZXIgYzsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0IHF1ZXVlKGNvbnN0IENvbnRhaW5lciZhbXA7ID0gQ29udGFpbmVyKCkpOwoKICAgICAgYm9vbCAgICAgIGVtcHR5KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYy5lbXB0eSgpOyB9CiAgICAgIHNpemVfdHlwZSBzaXplKCkgIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGMuc2l6ZSgpOyB9CiAgICAgIHZhbHVlX3R5cGUmYW1wOyAgICAgICBmcm9udCgpICAgICAgICAgICB7IHJldHVybiBjLmZyb250KCk7IH0KICAgICAgY29uc3QgdmFsdWVfdHlwZSZhbXA7IGZyb250KCkgY29uc3QgICAgIHsgcmV0dXJuIGMuZnJvbnQoKTsgfQogICAgICB2YWx1ZV90eXBlJmFtcDsgICAgICAgYmFjaygpICAgICAgICAgICAgeyByZXR1cm4gYy5iYWNrKCk7IH0KICAgICAgY29uc3QgdmFsdWVfdHlwZSZhbXA7IGJhY2soKSBjb25zdCAgICAgIHsgcmV0dXJuIGMuYmFjaygpOyB9CiAgICAgIHZvaWQgcHVzaChjb25zdCB2YWx1ZV90eXBlJmFtcDsgeCkgICAgICB7IGMucHVzaF9iYWNrKHgpOyB9CiAgICAgIHZvaWQgcG9wKCkgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYy5wb3BfZnJvbnQoKTsgfQogICAgfTsKPC9wcmU+Cgo8cD50bzo8L3A+Cgo8cHJlPiAgbmFtZXNwYWNlIHN0ZCB7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyID0gZGVxdWUmbHQ7VCZndDsgJmd0OwogICAgY2xhc3MgcXVldWUgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpyZWZlcmVuY2UgICAgICAgICAgICAgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUgICAgICAgICAgICB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6c2l6ZV90eXBlICAgICAgICAgICAgIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiAgICAgICAgICBDb250YWluZXIgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfdHlwZTsKICAgIHByb3RlY3RlZDoKICAgICAgQ29udGFpbmVyIGM7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBxdWV1ZShjb25zdCBDb250YWluZXImYW1wOyA9IENvbnRhaW5lcigpKTsKCiAgICAgIGJvb2wgICAgICBlbXB0eSgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGMuZW1wdHkoKTsgfQogICAgICBzaXplX3R5cGUgc2l6ZSgpICBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBjLnNpemUoKTsgfQogICAgICByZWZlcmVuY2UgICAgICAgICBmcm9udCgpICAgICAgICAgICB7IHJldHVybiBjLmZyb250KCk7IH0KICAgICAgY29uc3RfcmVmZXJlbmNlICAgZnJvbnQoKSBjb25zdCAgICAgeyByZXR1cm4gYy5mcm9udCgpOyB9CiAgICAgIHJlZmVyZW5jZSAgICAgICAgIGJhY2soKSAgICAgICAgICAgIHsgcmV0dXJuIGMuYmFjaygpOyB9CiAgICAgIGNvbnN0X3JlZmVyZW5jZSAgIGJhY2soKSBjb25zdCAgICAgIHsgcmV0dXJuIGMuYmFjaygpOyB9CiAgICAgIHZvaWQgcHVzaChjb25zdCB2YWx1ZV90eXBlJmFtcDsgeCkgICAgICB7IGMucHVzaF9iYWNrKHgpOyB9CiAgICAgIHZvaWQgcG9wKCkgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYy5wb3BfZnJvbnQoKTsgfQogICAgfTsKPC9wcmU+Cgo8cD5DaGFuZ2UgMjMuMi4zLjIvMSBmcm9tOjwvcD4KCjxwcmU+ICBuYW1lc3BhY2Ugc3RkIHsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXIgPSB2ZWN0b3ImbHQ7VCZndDssCiAgICAgICAgICAgICAgY2xhc3MgQ29tcGFyZSA9IGxlc3MmbHQ7dHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlJmd0OyAmZ3Q7CiAgICBjbGFzcyBwcmlvcml0eV9xdWV1ZSB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlICAgICAgICAgICAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnNpemVfdHlwZSAgICAgICAgICAgICBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgICAgICAgICAgQ29udGFpbmVyICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIENvbnRhaW5lciBjOwogICAgICBDb21wYXJlIGNvbXA7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBwcmlvcml0eV9xdWV1ZShjb25zdCBDb21wYXJlJmFtcDsgeCA9IENvbXBhcmUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyJmFtcDsgPSBDb250YWluZXIoKSk7CiAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogICAgICAgIHByaW9yaXR5X3F1ZXVlKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wYXJlJmFtcDsgeCA9IENvbXBhcmUoKSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXImYW1wOyA9IENvbnRhaW5lcigpKTsKCiAgICAgIGJvb2wgICAgICBlbXB0eSgpIGNvbnN0ICAgICAgIHsgcmV0dXJuIGMuZW1wdHkoKTsgfQogICAgICBzaXplX3R5cGUgc2l6ZSgpICBjb25zdCAgICAgICB7IHJldHVybiBjLnNpemUoKTsgfQogICAgICBjb25zdCB2YWx1ZV90eXBlJmFtcDsgdG9wKCkgY29uc3QgeyByZXR1cm4gYy5mcm9udCgpOyB9CiAgICAgIHZvaWQgcHVzaChjb25zdCB2YWx1ZV90eXBlJmFtcDsgeCk7CiAgICAgIHZvaWQgcG9wKCk7CiAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIG5vIGVxdWFsaXR5IGlzIHByb3ZpZGVkCiAgfQo8L3ByZT4KCjxwPnRvOjwvcD4KCjxwcmU+ICBuYW1lc3BhY2Ugc3RkIHsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXIgPSB2ZWN0b3ImbHQ7VCZndDssCiAgICAgICAgICAgICAgY2xhc3MgQ29tcGFyZSA9IGxlc3MmbHQ7dHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlJmd0OyAmZ3Q7CiAgICBjbGFzcyBwcmlvcml0eV9xdWV1ZSB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlICAgICAgICAgICAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnJlZmVyZW5jZSAgICAgICAgICAgICByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgICAgICAgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6c2l6ZV90eXBlICAgICAgICAgICAgIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiAgICAgICAgICBDb250YWluZXIgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfdHlwZTsKICAgIHByb3RlY3RlZDoKICAgICAgQ29udGFpbmVyIGM7CiAgICAgIENvbXBhcmUgY29tcDsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0IHByaW9yaXR5X3F1ZXVlKGNvbnN0IENvbXBhcmUmYW1wOyB4ID0gQ29tcGFyZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXImYW1wOyA9IENvbnRhaW5lcigpKTsKICAgICAgdGVtcGxhdGUgJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7CiAgICAgICAgcHJpb3JpdHlfcXVldWUoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBhcmUmYW1wOyB4ID0gQ29tcGFyZSgpLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciZhbXA7ID0gQ29udGFpbmVyKCkpOwoKICAgICAgYm9vbCAgICAgIGVtcHR5KCkgY29uc3QgICAgICAgeyByZXR1cm4gYy5lbXB0eSgpOyB9CiAgICAgIHNpemVfdHlwZSBzaXplKCkgIGNvbnN0ICAgICAgIHsgcmV0dXJuIGMuc2l6ZSgpOyB9CiAgICAgIGNvbnN0X3JlZmVyZW5jZSAgIHRvcCgpIGNvbnN0IHsgcmV0dXJuIGMuZnJvbnQoKTsgfQogICAgICB2b2lkIHB1c2goY29uc3QgdmFsdWVfdHlwZSZhbXA7IHgpOwogICAgICB2b2lkIHBvcCgpOwogICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBubyBlcXVhbGl0eSBpcyBwcm92aWRlZAogIH0KPC9wcmU+Cgo8cD5BbmQgY2hhbmdlIDIzLjIuMy4zLzEgZnJvbTo8L3A+Cgo8cHJlPiAgbmFtZXNwYWNlIHN0ZCB7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyID0gZGVxdWUmbHQ7VCZndDsgJmd0OwogICAgY2xhc3Mgc3RhY2sgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmICAgICAgICAgIENvbnRhaW5lciAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogICAgcHJvdGVjdGVkOgogICAgICBDb250YWluZXIgYzsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0IHN0YWNrKGNvbnN0IENvbnRhaW5lciZhbXA7ID0gQ29udGFpbmVyKCkpOwoKICAgICAgYm9vbCAgICAgIGVtcHR5KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYy5lbXB0eSgpOyB9CiAgICAgIHNpemVfdHlwZSBzaXplKCkgIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGMuc2l6ZSgpOyB9CiAgICAgIHZhbHVlX3R5cGUmYW1wOyAgICAgICB0b3AoKSAgICAgICAgICAgICB7IHJldHVybiBjLmJhY2soKTsgfQogICAgICBjb25zdCB2YWx1ZV90eXBlJmFtcDsgdG9wKCkgY29uc3QgICAgICAgeyByZXR1cm4gYy5iYWNrKCk7IH0KICAgICAgdm9pZCBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmYW1wOyB4KSAgICAgIHsgYy5wdXNoX2JhY2soeCk7IH0KICAgICAgdm9pZCBwb3AoKSAgICAgICAgICAgICAgICAgICAgICAgICAgeyBjLnBvcF9iYWNrKCk7IH0KICAgIH07CgogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciZndDsKICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHkpOwogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciZndDsKICAgICAgYm9vbCBvcGVyYXRvciZsdDsgKGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHkpOwogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciZndDsKICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHkpOwogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciZndDsKICAgICAgYm9vbCBvcGVyYXRvciZndDsgKGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHkpOwogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciZndDsKICAgICAgYm9vbCBvcGVyYXRvciZndDs9KGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHkpOwogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciZndDsKICAgICAgYm9vbCBvcGVyYXRvciZsdDs9KGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHkpOwogIH0KPC9wcmU+Cgo8cD50bzo8L3A+Cgo8cHJlPiAgbmFtZXNwYWNlIHN0ZCB7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyID0gZGVxdWUmbHQ7VCZndDsgJmd0OwogICAgY2xhc3Mgc3RhY2sgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpyZWZlcmVuY2UgICAgICAgICAgICAgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnNpemVfdHlwZSAgICAgICAgICAgICBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgICAgICAgICAgQ29udGFpbmVyICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIENvbnRhaW5lciBjOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQgc3RhY2soY29uc3QgQ29udGFpbmVyJmFtcDsgPSBDb250YWluZXIoKSk7CgogICAgICBib29sICAgICAgZW1wdHkoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBjLmVtcHR5KCk7IH0KICAgICAgc2l6ZV90eXBlIHNpemUoKSAgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYy5zaXplKCk7IH0KICAgICAgcmVmZXJlbmNlICAgICAgICAgdG9wKCkgICAgICAgICAgICAgeyByZXR1cm4gYy5iYWNrKCk7IH0KICAgICAgY29uc3RfcmVmZXJlbmNlICAgdG9wKCkgY29uc3QgICAgICAgeyByZXR1cm4gYy5iYWNrKCk7IH0KICAgICAgdm9pZCBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmYW1wOyB4KSAgICAgIHsgYy5wdXNoX2JhY2soeCk7IH0KICAgICAgdm9pZCBwb3AoKSAgICAgICAgICAgICAgICAgICAgICAgICAgeyBjLnBvcF9iYWNrKCk7IH0KICAgIH07CgogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciZndDsKICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHkpOwogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciZndDsKICAgICAgYm9vbCBvcGVyYXRvciZsdDsgKGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHkpOwogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciZndDsKICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHkpOwogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciZndDsKICAgICAgYm9vbCBvcGVyYXRvciZndDsgKGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHkpOwogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciZndDsKICAgICAgYm9vbCBvcGVyYXRvciZndDs9KGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHkpOwogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciZndDsKICAgICAgYm9vbCBvcGVyYXRvciZsdDs9KGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2smbHQ7VCwgQ29udGFpbmVyJmd0OyZhbXA7IHkpOwogIH0KPC9wcmU+Cgo8cD48aT5bQ29wZW5oYWdlbjogVGhpcyBjaGFuZ2Ugd2FzIGRpc2N1c3NlZCBiZWZvcmUgdGhlIElTIHdhcyByZWxlYXNlZAphbmQgaXQgd2FzIGRlbGliZXJhdGVseSBub3QgYWRvcHRlZC4gIE5ldmVydGhlbGVzcywgdGhlIExXRyBiZWxpZXZlcwooc3RyYXcgcG9sbDogMTAtMikgdGhhdCBpdCBpcyBhIGdlbnVpbmUgZGVmZWN0Ll08L2k+PC9wPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzMDgiPjwvYT4zMDguIFRhYmxlIDgyIG1lbnRpb25zIHVucmVsYXRlZCBoZWFkZXJzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3IFtpbnB1dC5vdXRwdXRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwMS0wMy0xNTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaW5wdXQub3V0cHV0Ij5pc3N1ZXM8L2E+IGluIFtpbnB1dC5vdXRwdXRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGFibGUgODIgaW4gc2VjdGlvbiAyNyBtZW50aW9ucyB0aGUgaGVhZGVyICZsdDtjc3RkbGliJmd0OyBmb3IgU3RyaW5nCnN0cmVhbXMgKDI3LjcgW3N0cmluZy5zdHJlYW1zXSkgYW5kIHRoZSBoZWFkZXJzICZsdDtjc3RkaW8mZ3Q7IGFuZAombHQ7Y3djaGFyJmd0OyBmb3IgRmlsZSBzdHJlYW1zICgyNy44IFtmaWxlLnN0cmVhbXNdKS4gSXQncyBub3QgY2xlYXIKd2h5IHRoZXNlIGhlYWRlcnMgYXJlIG1lbnRpb25lZCBpbiB0aGlzIGNvbnRleHQgc2luY2UgdGhleSBkbyBub3QKZGVmaW5lIGFueSBvZiB0aGUgbGlicmFyeSBlbnRpdGllcyBkZXNjcmliZWQgYnkgdGhlCnN1YmNsYXVzZXMuIEFjY29yZGluZyB0byAxNy40LjEuMSBbY29udGVudHNdLCBvbmx5IHN1Y2ggaGVhZGVycwphcmUgdG8gYmUgbGlzdGVkIGluIHRoZSBzdW1tYXJ5Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZW1vdmUgJmx0O2NzdGRsaWImZ3Q7IGFuZCAmbHQ7Y3djaGFyJmd0OyBmcm9tClRhYmxlIDgyLjwvcD4KCjxwPjxpPltDb3BlbmhhZ2VuOiBjaGFuZ2VkIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIHNsaWdodGx5LiAgVGhlCm9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gYWxzbyBzYWlkIHRvIHJlbW92ZSAmbHQ7Y3N0ZGlvJmd0OyBmcm9tClRhYmxlIDgyLiAgSG93ZXZlciwgJmx0O2NzdGRpbyZndDsgaXMgbWVudGlvbmVkIHNldmVyYWwgdGltZXMgd2l0aGluCnNlY3Rpb24gMjcuOCBbZmlsZS5zdHJlYW1zXSwgaW5jbHVkaW5nIDI3LjguMiBbYy5maWxlc10uXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjMxMCI+PC9hPjMxMC4gSXMgZXJybm8gYSBtYWNybz88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTcuNC4xLjIgW2hlYWRlcnNdLCAxOS4zIFtlcnJub10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gU3RldmUgQ2xhbWFnZSA8Yj5EYXRlOjwvYj4gMjAwMS0wMy0yMTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaGVhZGVycyI+aXNzdWVzPC9hPiBpbiBbaGVhZGVyc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CiAgPHA+CiAgRXhhY3RseSBob3cgc2hvdWxkIGVycm5vIGJlIGRlY2xhcmVkIGluIGEgY29uZm9ybWluZyBDKysgaGVhZGVyPwogIDwvcD4KCiAgPHA+CiAgVGhlIEMgc3RhbmRhcmQgc2F5cyBpbiA3LjEuNCB0aGF0IGl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgZXJybm8gaXMgYQogIG1hY3JvIG9yIGFuIGlkZW50aWZpZXIgd2l0aCBleHRlcm5hbCBsaW5rYWdlLiAgSW4gc29tZSBpbXBsZW1lbnRhdGlvbnMKICBpdCBjYW4gYmUgZWl0aGVyLCBkZXBlbmRpbmcgb24gY29tcGlsZS10aW1lIG9wdGlvbnMuICAoRS5nLiwgb24KICBTb2xhcmlzIGluIG11bHRpLXRocmVhZGluZyBtb2RlLCBlcnJubyBpcyBhIG1hY3JvIHRoYXQgZXhwYW5kcyB0byBhCiAgZnVuY3Rpb24gY2FsbCwgYnV0IGlzIGFuIGV4dGVybiBpbnQgb3RoZXJ3aXNlLiAgIlVuc3BlY2lmaWVkIiBhbGxvd3MKICBzdWNoIHZhcmlhYmlsaXR5LikKICA8L3A+CgogIDxwPlRoZSBDKysgc3RhbmRhcmQ6PC9wPgogIDx1bD4KICA8bGk+MTcuNC4xLjIgc2F5cyBpbiBhIG5vdGUgdGhhdCBlcnJubyBtdXN0IGJlIG1hY3JvIGluIEMuIChmYWxzZSk8L2xpPgogIDxsaT4xNy40LjMuMS4zIGZvb3Rub3RlIDE2NiBzYXlzIGVycm5vIGlzIHJlc2VydmVkIGFzIGFuIGV4dGVybmFsIAogICAgICBuYW1lICh0cnVlKSwgYW5kIGltcGxpZXMgdGhhdCBpdCBpcyBhbiBpZGVudGlmaWVyLjwvbGk+CiAgPGxpPjE5LjMgc2ltcGx5IGxpc3RzIGVycm5vIGFzIGEgbWFjcm8gKGJ5IHdoYXQgcmVhc29uaW5nPykgYW5kIGdvZXMKICAgICAgb24gdG8gc2F5IHRoYXQgdGhlIGNvbnRlbnRzIG9mIG9mIEMrKyAmbHQ7ZXJybm8uaCZndDsgYXJlIHRoZQogICAgICBzYW1lIGFzIGluIEMsIGJlZ2dpbmcgdGhlIHF1ZXN0aW9uLjwvbGk+CiAgPGxpPkMuMiwgdGFibGUgOTUgbGlzdHMgZXJybm8gYXMgYSBtYWNybywgd2l0aG91dCBjb21tZW50LjwvbGk+CiAgPC91bD4KCiAgPHA+SSBmaW5kIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gZXJybm8uPC9wPgoKICA8cD5XZSBzaG91bGQgZWl0aGVyIGV4cGxpY2l0bHkgc2F5IHRoYXQgZXJybm8gbXVzdCBiZSBhIG1hY3JvLCBldmVuCiAgdGhvdWdoIGl0IG5lZWQgbm90IGJlIGEgbWFjcm8gaW4gQywgb3IgZWxzZSBleHBsaWNpdGx5IGxlYXZlIGl0CiAgdW5zcGVjaWZpZWQuICBXZSBhbHNvIG5lZWQgdG8gc2F5IHNvbWV0aGluZyBhYm91dCBuYW1lc3BhY2Ugc3RkLiAKICBBIHVzZXIgd2hvIGluY2x1ZGVzICZsdDtjZXJybm8mZ3Q7IG5lZWRzIHRvIGtub3cgd2hldGhlciB0byB3cml0ZQogIDx0dD5lcnJubzwvdHQ+LCBvciA8dHQ+OjplcnJubzwvdHQ+LCBvciA8dHQ+c3RkOjplcnJubzwvdHQ+LCBvcgogIGVsc2UgJmx0O2NlcnJubyZndDsgaXMgdXNlbGVzcy48L3A+CgogIDxwPlR3byBhY2NlcHRhYmxlIGZpeGVzOjwvcD4KICA8dWw+CiAgICA8bGk+PHA+ZXJybm8gbXVzdCBiZSBhIG1hY3JvLiBUaGlzIGlzIHRyaXZpYWxseSBzYXRpc2ZpZWQgYnkgYWRkaW5nPGJyPgogICAgICAgICZuYnNwOyZuYnNwOyNkZWZpbmUgZXJybm8gKDo6c3RkOjplcnJubyk8YnI+CiAgICAgICAgdG8gdGhlIGhlYWRlcnMgaWYgZXJybm8gaXMgbm90IGFscmVhZHkgYSBtYWNyby4gWW91IHRoZW4gYWx3YXlzCiAgICAgICAgd3JpdGUgZXJybm8gd2l0aG91dCBhbnkgc2NvcGUgcXVhbGlmaWNhdGlvbiwgYW5kIGl0IGFsd2F5cyBleHBhbmRzCiAgICAgICAgdG8gYSBjb3JyZWN0IHJlZmVyZW5jZS4gU2luY2UgaXQgaXMgYWx3YXlzIGEgbWFjcm8sIHlvdSBrbm93IHRvCiAgICAgICAgYXZvaWQgdXNpbmcgZXJybm8gYXMgYSBsb2NhbCBpZGVudGlmZXIuPC9wPjwvbGk+CiAgICA8bGk+PHA+ZXJybm8gaXMgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuIFRoaXMgZml4IGlzIGluZmVyaW9yLCBiZWNhdXNlCiAgICAgICAgOjplcnJubyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSB3ZWxsLWZvcm1lZC48L3A+PC9saT4KICA8L3VsPgoKICA8cD48aT5bCiAgICBUaGlzIGlzc3VlIHdhcyBmaXJzdCByYWlzZWQgaW4gMTk5OSwgYnV0IGl0IHNsaXBwZWQgdGhyb3VnaCAKICAgIHRoZSBjcmFja3MuCiAgXTwvaT48L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KICA8cD5DaGFuZ2UgdGhlIE5vdGUgaW4gc2VjdGlvbiAxNy40LjEuMnA1IGZyb208L3A+CgogICAgPGJsb2NrcXVvdGU+PHA+CiAgICBOb3RlOiB0aGUgbmFtZXMgZGVmaW5lZCBhcyBtYWNyb3MgaW4gQyBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CiAgICBhc3NlcnQsIGVycm5vLCBvZmZzZXRvZiwgc2V0am1wLCB2YV9hcmcsIHZhX2VuZCwgYW5kIHZhX3N0YXJ0LgogICAgPC9wPjwvYmxvY2txdW90ZT4KCiAgPHA+dG88L3A+CgogICAgPGJsb2NrcXVvdGU+PHA+CiAgICBOb3RlOiB0aGUgbmFtZXMgZGVmaW5lZCBhcyBtYWNyb3MgaW4gQyBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CiAgICBhc3NlcnQsIG9mZnNldG9mLCBzZXRqbXAsIHZhX2FyZywgdmFfZW5kLCBhbmQgdmFfc3RhcnQuCiAgICA8L3A+PC9ibG9ja3F1b3RlPgoKICA8cD5JbiBzZWN0aW9uIDE5LjMsIGNoYW5nZSBwYXJhZ3JhcGggMiBmcm9tPC9wPgoKICAgIDxibG9ja3F1b3RlPjxwPgogICAgVGhlIGNvbnRlbnRzIGFyZSB0aGUgc2FtZSBhcyB0aGUgU3RhbmRhcmQgQyBsaWJyYXJ5IGhlYWRlcgogICAgJmx0O2Vycm5vLmgmZ3Q7LgogICAgPC9wPjwvYmxvY2txdW90ZT4KCiAgPHA+dG88L3A+CgogICAgPGJsb2NrcXVvdGU+PHA+CiAgICBUaGUgY29udGVudHMgYXJlIHRoZSBzYW1lIGFzIHRoZSBTdGFuZGFyZCBDIGxpYnJhcnkgaGVhZGVyIAogICAgJmx0O2Vycm5vLmgmZ3Q7LCBleGNlcHQgdGhhdCBlcnJubyBzaGFsbCBiZSBkZWZpbmVkIGFzIGEgbWFjcm8uCiAgICA8L3A+PC9ibG9ja3F1b3RlPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5DKysgbXVzdCBub3QgbGVhdmUgaXQgdXAgdG8gdGhlIGltcGxlbWVudGF0aW9uIHRvIGRlY2lkZSB3aGV0aGVyIG9yCm5vdCBhIG5hbWUgaXMgYSBtYWNybzsgaXQgbXVzdCBleHBsaWNpdGx5IHNwZWNpZnkgZXhhY3RseSB3aGljaCBuYW1lcwphcmUgcmVxdWlyZWQgdG8gYmUgbWFjcm9zLiAgVGhlIG9ubHkgb25lIHRoYXQgcmVhbGx5IHdvcmtzIGlzIGZvciBpdAp0byBiZSBhIG1hY3JvLjwvcD4KCjxwPjxpPltDdXJh52FvOiBhZGRpdGlvbmFsIHJhdGlvbmFsZSBhZGRlZC5dPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjMxMSI+PC9hPjMxMS4gSW5jb3JyZWN0IHdvcmRpbmcgaW4gYmFzaWNfb3N0cmVhbSBjbGFzcyBzeW5vcHNpczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjIuMSBbb3N0cmVhbV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQW5keSBTYXd5ZXIgPGI+RGF0ZTo8L2I+IDIwMDEtMDMtMjE8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI29zdHJlYW0iPmlzc3VlczwvYT4gaW4gW29zdHJlYW1dLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgoKPHA+SW4gMjcuNi4yLjEgW29zdHJlYW1dLCB0aGUgc3lub3BzaXMgb2YgY2xhc3MgYmFzaWNfb3N0cmVhbSBzYXlzOjwvcD4KCjxwcmU+ICAvLyBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uc3MKICB0ZW1wbGF0ZSZsdDtjbGFzcyB0cmFpdHMmZ3Q7CiAgICBiYXNpY19vc3RyZWFtJmx0O2NoYXIsdHJhaXRzJmd0OyZhbXA7IG9wZXJhdG9yJmx0OyZsdDsoIGJhc2ljX29zdHJlYW0mbHQ7Y2hhcix0cmFpdHMmZ3Q7JmFtcDssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqICk7CjwvcHJlPgoKPHA+UHJvYmxlbXM6PC9wPgo8dWw+CjxsaT5Ub28gbWFueSAncydzIGF0IHRoZSBlbmQgb2YgInNwZWNpYWxpemF0aW9uc3MiIDwvbGk+CjxsaT5UaGlzIGlzIGFuIG92ZXJsb2FkLCBub3QgYSBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uPC9saT4KPC91bD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiB0aGUgc3lub3BzaXMgaW4gMjcuNi4yLjEgW29zdHJlYW1dLCByZW1vdmUgdGhlIAo8aT4vLyBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uc3M8L2k+IGNvbW1lbnQuICBBbHNvIHJlbW92ZSB0aGUgc2FtZSAKY29tbWVudCAoY29ycmVjdGx5IHNwZWxsZWQsIGJ1dCBzdGlsbCBpbmNvcnJlY3QpIGZyb20gdGhlIHN5bm9wc2lzIGluIAoyNy42LjIuNi40IFtvc3RyZWFtLmluc2VydGVycy5jaGFyYWN0ZXJdLgo8L3A+Cgo8cD48aT5bClByZS1SZWRtb25kOiBhZGRlZCAyNy42LjIuNi40IFtvc3RyZWFtLmluc2VydGVycy5jaGFyYWN0ZXJdIGJlY2F1c2Ugb2YgTWFydGluJ3MKY29tbWVudCBpbiBjKytzdGQtbGliLTg5MzkuCl08L2k+PC9wPgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzEyIj48L2E+MzEyLiBUYWJsZSAyNyBpcyBtaXNzaW5nIGhlYWRlcnM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAgW3V0aWxpdGllc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAxLTAzLTI5PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRhYmxlIDI3IGluIHNlY3Rpb24gMjAgbGlzdHMgdGhlIGhlYWRlciAmbHQ7bWVtb3J5Jmd0OyAob25seSkgZm9yCk1lbW9yeSAobGliLm1lbW9yeSkgYnV0IG5lZ2xlY3RzIHRvIG1lbnRpb24gdGhlIGhlYWRlcnMKJmx0O2NzdGRsaWImZ3Q7IGFuZCAmbHQ7Y3N0cmluZyZndDsgdGhhdCBhcmUgZGlzY3Vzc2VkIGluIDIwLjUuNSBbbWV0YS5yZWxdLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCAmbHQ7Y3N0ZGxpYiZndDsgYW5kICZsdDtjc3RyaW5nJmd0OyB0byBUYWJsZSAyNywgaW4gdGhlIHNhbWUgcm93CmFzICZsdDttZW1vcnkmZ3Q7LjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzMTUiPjwvYT4zMTUuIEJhZCAicmFuZ2UiIGluIGxpc3Q6OnVuaXF1ZSBjb21wbGV4aXR5PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjIuNC40IFtsaXN0Lm9wc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQW5keSBTYXd5ZXIgPGI+RGF0ZTo8L2I+IDIwMDEtMDUtMDE8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xpc3Qub3BzIj5pc3N1ZXM8L2E+IGluIFtsaXN0Lm9wc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgoyMy4yLjQuNCBbbGlzdC5vcHNdLCBQYXJhIDIxIGRlc2NyaWJlcyB0aGUgY29tcGxleGl0eSBvZgpsaXN0Ojp1bmlxdWUgYXM6ICJJZiB0aGUgcmFuZ2UgKGxhc3QgLSBmaXJzdCkgaXMgbm90IGVtcHR5LCBleGFjdGx5CihsYXN0IC0gZmlyc3QpIC0xIGFwcGxpY2F0aW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZyBwcmVkaWNhdGUsCm90aGVyd2lzZSBubyBhcHBsaWNhdGlvbnMgb2YgdGhlIHByZWRpY2F0ZSkiLgo8L3A+Cgo8cD4KIihsYXN0IC0gZmlyc3QpIiBpcyBub3QgYSByYW5nZS4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgInJhbmdlIiBmcm9tIChsYXN0IC0gZmlyc3QpIHRvIFtmaXJzdCwgbGFzdCkuCjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjMxNiI+PC9hPjMxNi4gVmFndWUgdGV4dCBpbiBUYWJsZSA2OTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4xLjQgW2Fzc29jaWF0aXZlLnJlcW10c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAxLTA1LTA0PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNhc3NvY2lhdGl2ZS5yZXFtdHMiPmlzc3VlczwvYT4gaW4gW2Fzc29jaWF0aXZlLnJlcW10c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRhYmxlIDY5IHNheXMgdGhpcyBhYm91dCBhX3VuaXEuaW5zZXJ0KHQpOjwvcD4KCjxibG9ja3F1b3RlPjxwPgppbnNlcnRzIHQgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgbm8gZWxlbWVudCBpbiB0aGUgY29udGFpbmVyIHdpdGgga2V5CmVxdWl2YWxlbnQgdG8gdGhlIGtleSBvZiB0LiBUaGUgYm9vbCBjb21wb25lbnQgb2YgdGhlIHJldHVybmVkIHBhaXIgCmluZGljYXRlcyB3aGV0aGVyIHRoZSBpbnNlcnRpb24gdGFrZXMgcGxhY2UgYW5kIHRoZSBpdGVyYXRvciBjb21wb25lbnQgb2YgdGhlCnBhaXIgcG9pbnRzIHRvIHRoZSBlbGVtZW50IHdpdGgga2V5IGVxdWl2YWxlbnQgdG8gdGhlIGtleSBvZiB0Lgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+VGhlIGRlc2NyaXB0aW9uIHNob3VsZCBiZSBtb3JlIHNwZWNpZmljIGFib3V0IGV4YWN0bHkgaG93IHRoZSBib29sIGNvbXBvbmVudAppbmRpY2F0ZXMgd2hldGhlciB0aGUgaW5zZXJ0aW9uIHRha2VzIHBsYWNlLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgdGV4dCBpbiBxdWVzdGlvbiB0bzwvcD4KCjxibG9ja3F1b3RlPjxwPgouLi5UaGUgYm9vbCBjb21wb25lbnQgb2YgdGhlIHJldHVybmVkIHBhaXIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgaW5zZXJ0aW9uCnRha2VzIHBsYWNlLi4uCjwvcD48L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzE3Ij48L2E+MzE3LiBJbnN0YW50aWF0aW9uIHZzLiBzcGVjaWFsaXphdGlvbiBvZiBmYWNldHM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIgW2xvY2FsaXphdGlvbl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAxLTA1LTA0PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsb2NhbGl6YXRpb24iPmlzc3VlczwvYT4gaW4gW2xvY2FsaXphdGlvbl0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpUaGUgbG9jYWxpemF0aW9uIHNlY3Rpb24gb2YgdGhlIHN0YW5kYXJkIHJlZmVycyB0byBzcGVjaWFsaXphdGlvbnMgb2YKdGhlIGZhY2V0IHRlbXBsYXRlcyBhcyBpbnN0YW50aWF0aW9ucyBldmVuIHRob3VnaCB0aGUgcmVxdWlyZWQgZmFjZXRzCmFyZSB0eXBpY2FsbHkgc3BlY2lhbGl6ZWQgcmF0aGVyIHRoYW4gZXhwbGljaXRseSAob3IgaW1wbGljaXRseSkKaW5zdGFudGlhdGVkLiBJbiB0aGUgY2FzZSBvZiBjdHlwZSZsdDtjaGFyJmd0OyBhbmQKY3R5cGVfYnluYW1lJmx0O2NoYXImZ3Q7IChhbmQgdGhlIHdjaGFyX3QgdmVyc2lvbnMpLCB0aGVzZSBmYWNldHMgYXJlCmFjdHVhbGx5IHJlcXVpcmVkIHRvIGJlIHNwZWNpYWxpemVkLiBUaGUgdGVybWlub2xvZ3kgc2hvdWxkIGJlCmNvcnJlY3RlZCB0byBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIHN0YW5kYXJkIGRvZXNuJ3QgbWFuZGF0ZSBleHBsaWNpdAppbnN0YW50aWF0aW9uICh0aGUgdGVybSBzcGVjaWFsaXphdGlvbiBlbmNvbXBhc3NlcyBib3RoIGV4cGxpY2l0Cmluc3RhbnRpYXRpb25zIGFuZCBzcGVjaWFsaXphdGlvbnMpLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGhzLCByZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgd29yZAppbnN0YW50aWF0aW9uIG9yIGluc3RhbnRpYXRpb25zIHdpdGggc3BlY2lhbGl6YXRpb24gb3Igc3BlY2lhbGl6YXRpb25zLApyZXNwZWN0aXZlbHk6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgoyMi4xLjEuMS4xLCBwNCwgVGFibGUgNTIsIDIyLjIuMS4xLCBwMiwgMjIuMi4xLjUsIHAzLCAyMi4yLjEuNS4xLCBwNSwKMjIuMi4xLjUuMiwgcDEwLCAyMi4yLjIsIHAyLCAyMi4yLjMuMSwgcDEsIDIyLjIuMy4xLjIsIHAxLCBwMiBhbmQgcDMsIAoyMi4yLjQuMSwgcDEsIDIyLjIuNC4xLjIsIHAxLCAyMiwyLDUsIHAxLCAyMiwyLDYsIHAyLCAyMi4yLjYuMy4yLCBwNywgYW5kCkZvb3Rub3RlIDI0Mi4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPkFuZCBjaGFuZ2UgdGhlIHRleHQgaW4gMjIuMS4xLjEuMSwgcDQgZnJvbTwvcD4KCjxibG9ja3F1b3RlPjxwPgogICAgQW4gaW1wbGVtZW50YXRpb24gaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aG9zZSBpbnN0YW50aWF0aW9ucwogICAgZm9yIGZhY2V0IHRlbXBsYXRlcyBpZGVudGlmaWVkIGFzIG1lbWJlcnMgb2YgYSBjYXRlZ29yeSwgYW5kCiAgICBmb3IgdGhvc2Ugc2hvd24gaW4gVGFibGUgNTI6CjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD50bzwvcD4KCjxibG9ja3F1b3RlPjxwPgogICAgQW4gaW1wbGVtZW50YXRpb24gaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aG9zZSBzcGVjaWFsaXphdGlvbnMuLi4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPjxpPltOYXRoYW4gd2lsbCByZXZpZXcgdGhlc2UgY2hhbmdlcywgYW5kIHdpbGwgbG9vayBmb3IgcGxhY2VzIHdoZXJlCmV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGlzIG5lY2Vzc2FyeS5dPC9pPjwvcD4KCgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIGlzIGEgc2ltcGxlIG1hdHRlciBvZiBvdXRkYXRlZCBsYW5ndWFnZS4gIFRoZSBsYW5ndWFnZSB0bwpkZXNjcmliZSB0ZW1wbGF0ZXMgd2FzIGNsYXJpZmllZCBkdXJpbmcgdGhlIHN0YW5kYXJkaXphdGlvbiBwcm9jZXNzLApidXQgdGhlIHdvcmRpbmcgaW4gY2xhdXNlIDIyIHdhcyBuZXZlciB1cGRhdGVkIHRvIHJlZmxlY3QgdGhhdApjaGFuZ2UuPC9wPgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzE4Ij48L2E+MzE4LiBNaXNsZWFkaW5nIGNvbW1lbnQgaW4gZGVmaW5pdGlvbiBvZiBudW1wdW5jdF9ieW5hbWU8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMi4zLjIgW2xvY2FsZS5udW1wdW5jdC5ieW5hbWVdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwMS0wNS0xMjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgZGVmaW5pdGlvbiBvZiB0aGUgbnVtcHVuY3RfYnluYW1lIHRlbXBsYXRlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcKY29tbWVudDo8L3A+Cgo8cHJlPiAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7CiAgICAgICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1bmN0Jmx0O2NoYXJUJmd0OyB7CiAgICAvLyB0aGlzIGNsYXNzIGlzIHNwZWNpYWxpemVkIGZvciBjaGFyIGFuZCB3Y2hhcl90LgogICAgICAgIC4uLgo8L3ByZT4KCjxwPlRoZXJlIGlzIG5vIGRvY3VtZW50YXRpb24gb2YgdGhlIHNwZWNpYWxpemF0aW9ucyBhbmQgaXQgc2VlbXMKY29uY2VpdmFibGUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiB3aWxsIG5vdCBleHBsaWNpdGx5IHNwZWNpYWxpemUgdGhlCnRlbXBsYXRlIGF0IGFsbCwgYnV0IHNpbXBseSBwcm92aWRlIHRoZSBwcmltYXJ5IHRlbXBsYXRlLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlbW92ZSB0aGUgY29tbWVudCBmcm9tIHRoZSB0ZXh0IGluIDIyLjIuMy4yIGFuZCBmcm9tIHRoZSBwcm9wb3NlZApyZXNvbHV0aW9uIG9mIGxpYnJhcnkgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOCI+MjI4PC9hPi48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzMTkiPjwvYT4zMTkuIFN0b3JhZ2UgYWxsb2NhdGlvbiB3b3JkaW5nIGNvbmZ1c2VzICJSZXF1aXJlZCBiZWhhdmlvciIsICJSZXF1aXJlcyI8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTguNS4xLjEgW25ldy5kZWxldGUuc2luZ2xlXSwgMTguNS4xLjIgW25ldy5kZWxldGUuYXJyYXldIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEJlbWFuIERhd2VzIDxiPkRhdGU6PC9iPiAyMDAxLTA1LTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNuZXcuZGVsZXRlLnNpbmdsZSI+aXNzdWVzPC9hPiBpbiBbbmV3LmRlbGV0ZS5zaW5nbGVdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5UaGUgc3RhbmRhcmQgc3BlY2lmaWVzIDE3LjMuMS4zIFtzdHJ1Y3R1cmUuc3BlY2lmaWNhdGlvbnNdIHRoYXQgIlJlcXVpcmVkCmJlaGF2aW9yIiBlbGVtZW50cyBkZXNjcmliZSAidGhlIHNlbWFudGljcyBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24KcHJvdmlkZWQgYnkgZWl0aGVyIHRoZSBpbXBsZW1lbnRhdGlvbiBvciBhIEMrKyBwcm9ncmFtLiI8L3A+Cgo8cD5UaGUgc3RhbmRhcmQgc3BlY2lmaWVzIDE3LjMuMS4zIFtzdHJ1Y3R1cmUuc3BlY2lmaWNhdGlvbnNdIHRoYXQgIlJlcXVpcmVzIgplbGVtZW50cyBkZXNjcmliZSAidGhlIHByZWNvbmRpdGlvbnMgZm9yIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiI8L3A+Cgo8cD5JbiB0aGUgc2VjdGlvbnMgbm90ZWQgYmVsb3csIHRoZSBjdXJyZW50IHdvcmRpbmcgc3BlY2lmaWVzCiJSZXF1aXJlZCBCZWhhdmlvciIgZm9yIHdoYXQgYXJlIGFjdHVhbGx5IHByZWNvbmRpdGlvbnMsIGFuZCB0aHVzCnNob3VsZCBiZSBzcGVjaWZpZWQgYXMgIlJlcXVpcmVzIi48L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkluIDE4LjUuMS4xIFtuZXcuZGVsZXRlLnNpbmdsZV0gUGFyYSAxMiBDaGFuZ2U6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5SZXF1aXJlZCBiZWhhdmlvcjogYWNjZXB0IGEgdmFsdWUgb2YgcHRyIHRoYXQgaXMgbnVsbCBvciB0aGF0IHdhcwogIHJldHVybmVkIGJ5IGFuIGVhcmxpZXIgY2FsbCAuLi48L3A+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KICA8cD5SZXF1aXJlczogdGhlIHZhbHVlIG9mIHB0ciBpcyBudWxsIG9yIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBhbgogIGVhcmxpZXIgY2FsbCAuLi48L3A+CjwvYmxvY2txdW90ZT4KCjxwPkluIDE4LjUuMS4yIFtuZXcuZGVsZXRlLmFycmF5XSBQYXJhIDExIENoYW5nZTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlJlcXVpcmVkIGJlaGF2aW9yOiBhY2NlcHQgYSB2YWx1ZSBvZiBwdHIgdGhhdCBpcyBudWxsIG9yIHRoYXQgd2FzCiAgcmV0dXJuZWQgYnkgYW4gZWFybGllciBjYWxsIC4uLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlJlcXVpcmVzOiB0aGUgdmFsdWUgb2YgcHRyIGlzIG51bGwgb3IgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGFuCiAgZWFybGllciBjYWxsIC4uLjwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjMyMCI+PC9hPjMyMC4gbGlzdDo6YXNzaWduIG92ZXJzcGVjaWZpZWQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMi40LjEgW2xpc3QuY29uc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSG93YXJkIEhpbm5hbnQgPGI+RGF0ZTo8L2I+IDIwMDEtMDUtMTc8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xpc3QuY29ucyI+aXNzdWVzPC9hPiBpbiBbbGlzdC5jb25zXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClNlY3Rpb24gMjMuMi40LjEgW2xpc3QuY29uc10sIHBhcmFncmFwaHMgNi04IHNwZWNpZnkgdGhhdCBsaXN0IGFzc2lnbiAoYm90aCBmb3JtcykgaGF2ZQp0aGUgImVmZmVjdHMiIG9mIGEgY2FsbCB0byBlcmFzZSBmb2xsb3dlZCBieSBhIGNhbGwgdG8gaW5zZXJ0Lgo8L3A+Cgo8cD4KSSB3b3VsZCBsaWtlIHRvIGRvY3VtZW50IHRoYXQgaW1wbGVtZW50ZXJzIGhhdmUgdGhlIGZyZWVkb20gdG8gaW1wbGVtZW50IAphc3NpZ24gYnkgb3RoZXIgbWV0aG9kcywgYXMgbG9uZyBhcyB0aGUgZW5kIHJlc3VsdCBpcyB0aGUgc2FtZSBhbmQgdGhlIApleGNlcHRpb24gZ3VhcmFudGVlIGlzIGFzIGdvb2Qgb3IgYmV0dGVyIHRoYW4gdGhlIGJhc2ljIGd1YXJhbnRlZS4KPC9wPgoKPHA+ClRoZSBtb3RpdmF0aW9uIGZvciB0aGlzIGlzIHRvIHVzZSBUJ3MgYXNzaWdubWVudCBvcGVyYXRvciB0byByZWN5Y2xlCmV4aXN0aW5nIG5vZGVzIGluIHRoZSBsaXN0IGluc3RlYWQgb2YgZXJhc2luZyB0aGVtIGFuZCByZWFsbG9jYXRpbmcKdGhlbSB3aXRoIG5ldyB2YWx1ZXMuICBJdCBpcyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0LCB3aXRoIGNhcmVmdWwKY29kaW5nLCBtb3N0IGNvbW1vbiBjYXNlcyBvZiBhc3NpZ24gKGV2ZXJ5dGhpbmcgYnV0IGFzc2lnbm1lbnQgd2l0aAp0cnVlIGlucHV0IGl0ZXJhdG9ycykgY2FuIGVsZXZhdGUgdGhlIGV4Y2VwdGlvbiBzYWZldHkgdG8gc3Ryb25nIGlmClQncyBhc3NpZ25tZW50IGhhcyBhIG5vdGhyb3cgZ3VhcmFudGVlICh3aXRoIG5vIGV4dHJhIG1lbW9yeSBjb3N0KS4KTWV0cm93ZXJrcyBkb2VzIHRoaXMuICBIb3dldmVyIEkgZG8gbm90IHByb3Bvc2UgdGhhdCB0aGlzIHN1YnRsZXR5IGJlCnN0YW5kYXJkaXplZC4gIEl0IGlzIGEgUW9JIGlzc3VlLiAgPC9wPgoKPHA+RXhpc3RpbmcgcHJhY3Rpc2U6Ck1ldHJvd2Vya3MgYW5kIFNHSSByZWN5Y2xlIG5vZGVzLCBEaW5rdW13YXJlIGFuZCBSb2d1ZSBXYXZlIGRvbid0Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjMuMi40LjEgW2xpc3QuY29uc10vNyBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5FZmZlY3RzOjwvcD4KCjxwcmU+ICAgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOwogICBpbnNlcnQoYmVnaW4oKSwgZmlyc3QsIGxhc3QpOwo8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CjxwPkVmZmVjdHM6IFJlcGxhY2VzIHRoZSBjb250ZW50cyBvZiB0aGUgbGlzdCB3aXRoIHRoZSByYW5nZSBbZmlyc3QsIGxhc3QpLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+SW4gMjMuMS4zIFtzZXF1ZW5jZS5yZXFtdHNdLCBpbiBUYWJsZSA2NyAoc2VxdWVuY2UgcmVxdWlyZW1lbnRzKSwgCmFkZCB0d28gbmV3IHJvd3M6PC9wPgo8cHJlPiAgICAgIGEuYXNzaWduKGksaikgICAgIHZvaWQgICAgICBwcmU6IGksaiBhcmUgbm90IGl0ZXJhdG9ycyBpbnRvIGEuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlcyBlbGVtZW50cyBpbiBhIHdpdGggYSBjb3B5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBbaSwgaikuCgogICAgICBhLmFzc2lnbihuLHQpICAgICB2b2lkICAgICAgcHJlOiB0IGlzIG5vdCBhIHJlZmVyZW5jZSBpbnRvIGEuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlcyBlbGVtZW50cyBpbiBhIHdpdGggbiBjb3BpZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHQuCjwvcHJlPgoKPHA+Q2hhbmdlIDIzLjIuNC4xIFtsaXN0LmNvbnNdLzggZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+RWZmZWN0czo8L3A+CjxwcmU+ICAgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOwogICBpbnNlcnQoYmVnaW4oKSwgbiwgdCk7CjwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5FZmZlY3RzOiBSZXBsYWNlcyB0aGUgY29udGVudHMgb2YgdGhlIGxpc3Qgd2l0aCBuIGNvcGllcyBvZiB0LjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1JlZG1vbmQ6IFByb3Bvc2VkIHJlc29sdXRpb24gd2FzIGNoYW5nZWQgc2xpZ2h0bHkuICBQcmV2aW91cwp2ZXJzaW9uIG1hZGUgZXhwbGljaXQgc3RhdGVtZW50IGFib3V0IGV4Y2VwdGlvbiBzYWZldHksIHdoaWNoIHdhc24ndApjb25zaXN0ZW50IHdpdGggdGhlIHdheSBleGNlcHRpb24gc2FmZXR5IGlzIGV4cHJlc3NlZCBlbHNld2hlcmUuCkFsc28sIHRoZSBjaGFuZ2UgaW4gdGhlIHNlcXVlbmNlIHJlcXVpcmVtZW50cyBpcyBuZXcuICBXaXRob3V0IHRoYXQKY2hhbmdlLCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiB3b3VsZCBoYXZlIHJlcXVpcmVkIHRoYXQgYXNzaWdubWVudCBvZgphIHN1YnJhbmdlIHdvdWxkIGhhdmUgdG8gd29yay4gIFRoYXQgdG9vIHdvdWxkIGhhdmUgYmVlbgpvdmVyc3BlY2lmaWNhdGlvbjsgaXQgd291bGQgZWZmZWN0aXZlbHkgbWFuZGF0ZSB0aGF0IGFzc2lnbm1lbnQgdXNlIGEKdGVtcG9yYXJ5LiAgSG93YXJkIHByb3ZpZGVkIHdvcmRpbmcuCl08L2k+PC9wPgoKCjxwPjxpPltDdXJh52FvOiBNYWRlIGVkaXRvcmlhbCBpbXByb3ZlbWVudCBpbiB3b3JkaW5nOyBjaGFuZ2VkCiJSZXBsYWNlcyBlbGVtZW50cyBpbiBhIHdpdGggY29waWVzIG9mIGVsZW1lbnRzIGluIFtpLCBqKS4iCndpdGggIlJlcGxhY2VzIHRoZSBlbGVtZW50cyBvZiBhIHdpdGggYSBjb3B5IG9mIFtpLCBqKS4iCkNoYW5nZXMgbm90IGRlZW1lZCBzZXJpb3VzIGVub3VnaCB0byByZXF1cmUgcmVyZXZpZXcuXTwvaT48L3A+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzMjEiPjwvYT4zMjEuIFR5cG8gaW4gbnVtX2dldDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjIuMS4yIFtmYWNldC5udW0uZ2V0LnZpcnR1YWxzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBLZXZpbiBEamFuZyA8Yj5EYXRlOjwvYj4gMjAwMS0wNS0xNzwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI2ZhY2V0Lm51bS5nZXQudmlydHVhbHMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtmYWNldC5udW0uZ2V0LnZpcnR1YWxzXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2ZhY2V0Lm51bS5nZXQudmlydHVhbHMiPmlzc3VlczwvYT4gaW4gW2ZhY2V0Lm51bS5nZXQudmlydHVhbHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KU2VjdGlvbiAyMi4yLjIuMS4yIGF0IHA3IHN0YXRlcyB0aGF0ICJBIGxlbmd0aCBzcGVjaWZpZXIgaXMgYWRkZWQgdG8KdGhlIGNvbnZlcnNpb24gZnVuY3Rpb24sIGlmIG5lZWRlZCwgYXMgaW5kaWNhdGVkIGluIFRhYmxlIDU2LiIKSG93ZXZlciwgVGFibGUgNTYgdXNlcyB0aGUgdGVybSAibGVuZ3RoIG1vZGlmaWVyIiwgbm90ICJsZW5ndGgKc3BlY2lmaWVyIi4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDIyLjIuMi4xLjIgYXQgcDcsIGNoYW5nZSB0aGUgdGV4dCAiQSBsZW5ndGggc3BlY2lmaWVyIGlzIGFkZGVkIC4uLiIKdG8gYmUgIkEgbGVuZ3RoIG1vZGlmaWVyIGlzIGFkZGVkIC4uLiIKPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5DIHVzZXMgdGhlIHRlcm0gImxlbmd0aCBtb2RpZmllciIuICBXZSBzaG91bGQgYmUgY29uc2lzdGVudC48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjMyMiI+PC9hPjMyMi4gaXRlcmF0b3IgYW5kIGNvbnN0X2l0ZXJhdG9yIHNob3VsZCBoYXZlIHRoZSBzYW1lIHZhbHVlIHR5cGU8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMSBbY29udGFpbmVyLnJlcXVpcmVtZW50c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAyMDAxLTA1LTE3PC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjY29udGFpbmVyLnJlcXVpcmVtZW50cyI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjY29udGFpbmVyLnJlcXVpcmVtZW50cyI+aXNzdWVzPC9hPiBpbiBbY29udGFpbmVyLnJlcXVpcmVtZW50c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJdCdzIHdpZGVseSBhc3N1bWVkIHRoYXQsIGlmIFggaXMgYSBjb250YWluZXIsCml0ZXJhdG9yX3RyYWl0cyZsdDtYOjppdGVyYXRvciZndDs6OnZhbHVlX3R5cGUgYW5kCml0ZXJhdG9yX3RyYWl0cyZsdDtYOjpjb25zdF9pdGVyYXRvciZndDs6OnZhbHVlX3R5cGUgc2hvdWxkIGJvdGggYmUKWDo6dmFsdWVfdHlwZS4gIEhvd2V2ZXIsIHRoaXMgaXMgbm93aGVyZSBzdGF0ZWQuICBUaGUgbGFuZ3VhZ2UgaW4KVGFibGUgNjUgaXMgbm90IHByZWNpc2UgYWJvdXQgdGhlIGl0ZXJhdG9ycycgdmFsdWUgdHlwZXMgKGl0IHByZWRhdGVzCml0ZXJhdG9yX3RyYWl0cyksIGFuZCBjb3VsZCBldmVuIGJlIGludGVycHJldGVkIGFzIHNheWluZyB0aGF0Cml0ZXJhdG9yX3RyYWl0cyZsdDtYOjpjb25zdF9pdGVyYXRvciZndDs6OnZhbHVlX3R5cGUgc2hvdWxkIGJlICJjb25zdApYOjp2YWx1ZV90eXBlIi4KPC9wPgoKPHA+UmVsYXRlZCBpc3N1ZTogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjc5Ij4yNzk8L2E+LjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIFRhYmxlIDY1ICgiQ29udGFpbmVyIFJlcXVpcmVtZW50cyIpLCBjaGFuZ2UgdGhlIHJldHVybiB0eXBlIGZvcgpYOjppdGVyYXRvciB0byAiaXRlcmF0b3IgdHlwZSB3aG9zZSB2YWx1ZSB0eXBlIGlzIFQiLiAgQ2hhbmdlIHRoZQpyZXR1cm4gdHlwZSBmb3IgWDo6Y29uc3RfaXRlcmF0b3IgdG8gImNvbnN0YW50IGl0ZXJhdG9yIHR5cGUgd2hvc2UKdmFsdWUgdHlwZSBpcyBUIi48L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUaGlzIGJlbG9uZ3MgYXMgYSBjb250YWluZXIgcmVxdWlyZW1lbnQsIHJhdGhlciB0aGFuIGFuIGl0ZXJhdG9yCnJlcXVpcmVtZW50LCBiZWNhdXNlIHRoZSB3aG9sZSBub3Rpb24gb2YgaXRlcmF0b3IvY29uc3RfaXRlcmF0b3IKcGFpcnMgaXMgc3BlY2lmaWMgdG8gY29udGFpbmVycycgaXRlcmF0b3IuCjwvcD4KPHA+Ckl0IGlzIGV4aXN0aW5nIHByYWN0aWNlIHRoYXQgKGZvciBleGFtcGxlKSAKaXRlcmF0b3JfdHJhaXRzJmx0O2xpc3QmbHQ7aW50Jmd0Ozo6Y29uc3RfaXRlcmF0b3ImZ3Q7Ojp2YWx1ZV90eXBlCmlzICJpbnQiLCByYXRoZXIgdGhhbiAiY29uc3QgaW50Ii4gIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoCnRoZSB3YXkgdGhhdCBjb25zdCBwb2ludGVycyBhcmUgaGFuZGxlZDogdGhlIHN0YW5kYXJkIGFscmVhZHkgCnJlcXVpcmVzIHRoYXQgaXRlcmF0b3JfdHJhaXRzJmx0O2NvbnN0IGludComZ3Q7Ojp2YWx1ZV90eXBlIGlzIGludC4KPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjMyNCI+PC9hPjMyNC4gRG8gb3V0cHV0IGl0ZXJhdG9ycyBoYXZlIHZhbHVlIHR5cGVzPzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNC4xLjIgW291dHB1dC5pdGVyYXRvcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERhdmUgQWJyYWhhbXMgPGI+RGF0ZTo8L2I+IDIwMDEtMDYtMDc8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI291dHB1dC5pdGVyYXRvcnMiPmlzc3VlczwvYT4gaW4gW291dHB1dC5pdGVyYXRvcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgoKPHA+VGFibGUgNzMgc3VnZ2VzdHMgdGhhdCBvdXRwdXQgaXRlcmF0b3JzIGhhdmUgdmFsdWUgdHlwZXMuICBJdCAKcmVxdWlyZXMgdGhlIGV4cHJlc3Npb24gIiphID0gdCIuICBBZGRpdGlvbmFsbHksIGFsdGhvdWdoIFRhYmxlIDczCm5ldmVyIGxpc3RzICJhID0gdCIgb3IgIlgoYSkgPSB0IiBpbiB0aGUgImV4cHJlc3Npb25zIiBjb2x1bW4sIGl0CmNvbnRhaW5zIGEgbm90ZSBzYXlpbmcgdGhhdCAiYSA9IHQiIGFuZCAiWChhKSA9IHQiIGhhdmUgZXF1aXZhbGVudAooYnV0IG5vd2hlcmUgc3BlY2lmaWVkISkgc2VtYW50aWNzLjwvcD4KCjxwPkFjY29yZGluZyB0byAyNC4xLzksIHQgaXMgc3VwcG9zZWQgdG8gYmUgImEgdmFsdWUgb2YgdmFsdWUgdHlwZQpUIjo8L3A+CgogICAgPGJsb2NrcXVvdGU+PHA+CiAgICBJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLCBhIGFuZCBiIGRlbm90ZSB2YWx1ZXMgb2YgWCwgbiBkZW5vdGVzIGEKICAgIHZhbHVlIG9mIHRoZSBkaWZmZXJlbmNlIHR5cGUgRGlzdGFuY2UsIHUsIHRtcCwgYW5kIG0gZGVub3RlCiAgICBpZGVudGlmaWVycywgciBkZW5vdGVzIGEgdmFsdWUgb2YgWCZhbXA7LCB0IGRlbm90ZXMgYSB2YWx1ZSBvZgogICAgdmFsdWUgdHlwZSBULgogICAgPC9wPjwvYmxvY2txdW90ZT4KCjxwPlR3byBvdGhlciBwYXJ0cyBvZiB0aGUgc3RhbmRhcmQgdGhhdCBhcmUgcmVsZXZhbnQgdG8gd2hldGhlcgpvdXRwdXQgaXRlcmF0b3JzIGhhdmUgdmFsdWUgdHlwZXM6PC9wPgoKPHVsPgogICAgPGxpPjI0LjEvMSBzYXlzICJBbGwgaXRlcmF0b3JzIGkgc3VwcG9ydCB0aGUgZXhwcmVzc2lvbiAqaSwKICAgIHJlc3VsdGluZyBpbiBhIHZhbHVlIG9mIHNvbWUgY2xhc3MsIGVudW1lcmF0aW9uLCBvciBidWlsdC1pbiB0eXBlCiAgICBULCBjYWxsZWQgdGhlIHZhbHVlIHR5cGUgb2YgdGhlIGl0ZXJhdG9yIi48L2xpPgoKICAgIDxsaT4KICAgIDI0LjMuMS8xLCB3aGljaCBzYXlzICJJbiB0aGUgY2FzZSBvZiBhbiBvdXRwdXQgaXRlcmF0b3IsIHRoZSB0eXBlcwogICAgaXRlcmF0b3JfdHJhaXRzJmx0O0l0ZXJhdG9yJmd0Ozo6ZGlmZmVyZW5jZV90eXBlCiAgICBpdGVyYXRvcl90cmFpdHMmbHQ7SXRlcmF0b3ImZ3Q7Ojp2YWx1ZV90eXBlIGFyZSBib3RoIGRlZmluZWQgYXMgdm9pZC4iCiAgICA8L2xpPgo8L3VsPgoKPHA+VGhlIGZpcnN0IG9mIHRoZXNlIHBhc3NhZ2VzIHN1Z2dlc3RzIHRoYXQgIippIiBpcyBzdXBwb3NlZCB0bwpyZXR1cm4gYSB1c2VmdWwgdmFsdWUsIHdoaWNoIGNvbnRyYWRpY3RzIHRoZSBub3RlIGluIDI0LjEuMi8yIHNheWluZwp0aGF0IHRoZSBvbmx5IHZhbGlkIHVzZSBvZiAiKmkiIGZvciBvdXRwdXQgaXRlcmF0b3JzIGlzIGluIGFuCmV4cHJlc3Npb24gb2YgdGhlIGZvcm0gIippID0gdCIuICBUaGUgc2Vjb25kIG9mIHRoZXNlIHBhc3NhZ2VzIGFwcGVhcnMKdG8gY29udHJhZGljdCBUYWJsZSA3MywgYmVjYXVzZSBpdCBzdWdnZXN0cyB0aGF0ICIqaSIncyByZXR1cm4gdmFsdWUKc2hvdWxkIGJlIHZvaWQuICBUaGUgc2Vjb25kIHBhc3NhZ2UgaXMgYWxzbyBicm9rZW4gaW4gdGhlIGNhc2Ugb2YgYSBhbgppdGVyYXRvciB0eXBlLCBsaWtlIG5vbi1jb25zdCBwb2ludGVycywgdGhhdCBzYXRpc2ZpZXMgYm90aCB0aGUgb3V0cHV0Cml0ZXJhdG9yIHJlcXVpcmVtZW50cyBhbmQgdGhlIGZvcndhcmQgaXRlcmF0b3IgcmVxdWlyZW1lbnRzLjwvcD4KCjxwPldoYXQgc2hvdWxkIHRoZSBzdGFuZGFyZCBzYXkgYWJvdXQgPHR0PippPC90dD4ncyByZXR1cm4gdmFsdWUgd2hlbgppIGlzIGFuIG91dHB1dCBpdGVyYXRvciwgYW5kIHdoYXQgc2hvdWxkIGl0IHNheSBhYm91dCB0aGF0IHQgaXMgaW4gdGhlCmV4cHJlc3Npb24gIippID0gdCI/ICBGaW5hbGx5LCBzaG91bGQgdGhlIHN0YW5kYXJkIHNheSBhbnl0aGluZyBhYm91dApvdXRwdXQgaXRlcmF0b3JzJyBwb2ludGVyIGFuZCByZWZlcmVuY2UgdHlwZXM/PC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjI0LjEgcDEsIGNoYW5nZTwvcD4KCjxibG9ja3F1b3RlPgo8cD5BbGwgaXRlcmF0b3JzIDx0dD5pPC90dD4gc3VwcG9ydCB0aGUgZXhwcmVzc2lvbiA8dHQ+Kmk8L3R0PiwgcmVzdWx0aW5nCmluIGEgdmFsdWUgb2Ygc29tZSBjbGFzcywgZW51bWVyYXRpb24sIG9yIGJ1aWx0LWluIHR5cGUgPHR0PlQ8L3R0PiwKY2FsbGVkIHRoZSB2YWx1ZSB0eXBlIG9mIHRoZSBpdGVyYXRvci48L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CjxwPkFsbCBpbnB1dCBpdGVyYXRvcnMgPHR0Pmk8L3R0PiBzdXBwb3J0IHRoZSBleHByZXNzaW9uIDx0dD4qaTwvdHQ+LApyZXN1bHRpbmcgaW4gYSB2YWx1ZSBvZiBzb21lIGNsYXNzLCBlbnVtZXJhdGlvbiwgb3IgYnVpbHQtaW4gdHlwZQo8dHQ+VDwvdHQ+LCBjYWxsZWQgdGhlIHZhbHVlIHR5cGUgb2YgdGhlIGl0ZXJhdG9yLiBBbGwgb3V0cHV0Cml0ZXJhdG9ycyBzdXBwb3J0IHRoZSBleHByZXNzaW9uIDx0dD4qaSA9IG88L3R0PiB3aGVyZSA8dHQ+bzwvdHQ+IGlzIGEKdmFsdWUgb2Ygc29tZSB0eXBlIHRoYXQgaXMgaW4gdGhlIHNldCBvZiB0eXBlcyB0aGF0IGFyZSA8aT53cml0YWJsZTwvaT4gdG8KdGhlIHBhcnRpY3VsYXIgaXRlcmF0b3IgdHlwZSBvZiA8dHQ+aTwvdHQ+Lgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPjI0LjEgcDksIGFkZDwvcD4KCjxibG9ja3F1b3RlPgo8cD48dHQ+bzwvdHQ+IGRlbm90ZXMgYSB2YWx1ZSBvZiBzb21lIHR5cGUgdGhhdCBpcyB3cml0YWJsZSB0byB0aGUKb3V0cHV0IGl0ZXJhdG9yLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPlRhYmxlIDczLCBjaGFuZ2U8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT4qYSA9IHQKPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+KnIgPSBvCjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5hbmQgY2hhbmdlPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+KnIrKyA9IHQKPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+KnIrKyA9IG8KPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltwb3N0LVJlZG1vbmQ6IEplcmVteSBwcm92aWRlZCB3b3JkaW5nXTwvaT48L3A+CgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBjb25zaWRlcmVkIHR3byBvcHRpb25zOiBjaGFuZ2UgYWxsIG9mIHRoZSBsYW5ndWFnZSB0aGF0CnNlZW1zIHRvIGltcGx5IHRoYXQgb3V0cHV0IGl0ZXJhdG9ycyBoYXZlIHZhbHVlIHR5cGVzLCB0aHVzIG1ha2luZyBpdApjbGVhciB0aGF0IG91dHB1dCBpdGVyYXRvcnMgaGF2ZSBubyB2YWx1ZSB0eXBlcywgb3IgZWxzZSBkZWZpbmUgdmFsdWUKdHlwZXMgZm9yIG91dHB1dCBpdGVyYXRvciBjb25zaXN0ZW50bHkuICBUaGUgTFdHIGNob3NlIHRoZSBmb3JtZXIKb3B0aW9uLCBiZWNhdXNlIGl0IHNlZW1zIGNsZWFyIHRoYXQgb3V0cHV0IGl0ZXJhdG9ycyB3ZXJlIG5ldmVyCmludGVuZGVkIHRvIGhhdmUgdmFsdWUgdHlwZXMuICBUaGlzIHdhcyBhIGRlbGliZXJhdGUgZGVzaWduIGRlY2lzaW9uLAphbmQgYW55IGxhbmd1YWdlIHN1Z2dlc3Rpbmcgb3RoZXJ3aXNlIGlzIHNpbXBseSBhIG1pc3Rha2UuPC9wPgoKPHA+QSBmdXR1cmUgcmV2aXNpb24gb2YgdGhlIHN0YW5kYXJkIG1heSB3aXNoIHRvIHJldmlzaXQgdGhpcyBkZXNpZ24KZGVjaXNpb24uPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjMyNSI+PC9hPjMyNS4gTWlzbGVhZGluZyB0ZXh0IGluIG1vbmV5cHVuY3QmbHQ7Jmd0Ozo6ZG9fZ3JvdXBpbmc8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMi42LjMuMiBbbG9jYWxlLm1vbmV5cHVuY3QudmlydHVhbHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwMS0wNy0wMjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlLm1vbmV5cHVuY3QudmlydHVhbHMiPmlzc3VlczwvYT4gaW4gW2xvY2FsZS5tb25leXB1bmN0LnZpcnR1YWxzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIFJldHVybnMgY2xhdXNlIGluIDIyLjIuNi4zLjIsIHAzIHNheXMgYWJvdXQKbW9uZXlwdW5jdCZsdDtjaGFyVCZndDs6OmRvX2dyb3VwaW5nKCkKPC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgICBSZXR1cm5zOiBBIHBhdHRlcm4gZGVmaW5lZCBpZGVudGljYWxseSBhcyB0aGUgcmVzdWx0IG9mCiAgICBudW1wdW5jdCZsdDtjaGFyVCZndDs6OmRvX2dyb3VwaW5nKCkuMjQxKQo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+Rm9vdG5vdGUgMjQxIHRoZW4gcmVhZHM8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAgIFRoaXMgaXMgbW9zdCBjb21tb25seSB0aGUgdmFsdWUgIlwwMDMiIChub3QgIjMiKS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpUaGUgcmV0dXJucyBjbGF1c2Ugc2VlbXMgdG8gaW1wbHkgdGhhdCB0aGUgdHdvIG1lbWJlciBmdW5jdGlvbnMgbXVzdApyZXR1cm4gYW4gaWRlbnRpY2FsIHZhbHVlIHdoaWNoIGluIHJlYWxpdHkgbWF5IG9yIG1heSBub3QgYmUgdHJ1ZSwKc2luY2UgdGhlIGZhY2V0cyBhcmUgdXN1YWxseSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBzdHJ1Y3Qgc3RkOjpsY29udgphbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZ3JvdXBpbmcgYW5kIG1vbl9ncm91cGluZywgcmVzcGVjdGl2ZWx5LgpUaGUgZm9vdG5vdGUgYWxzbyBpbXBsaWVzIHRoYXQgdGhlIG1lbWJlciBmdW5jdGlvbiBvZiB0aGUgbW9uZXlwdW5jdApmYWNldCAocmF0aGVyIHRoYW4gdGhlIG92ZXJyaWRkZW4gdmlydHVhbCBmdW5jdGlvbnMgaW4gbW9uZXlwdW5jdF9ieW5hbWUpCm1vc3QgY29tbW9ubHkgcmV0dXJuICJcMDAzIiwgd2hpY2ggY29udHJhZGljdHMgdGhlIEMgc3RhbmRhcmQgd2hpY2gKc3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiAiIiBmb3IgdGhlIChtb3N0IGNvbW1vbikgQyBsb2NhbGUuCjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIHRoZSB0ZXh0IGluIFJldHVybnMgY2xhdXNlIGluIDIyLjIuNi4zLjIsIHAzIHdpdGggdGhlIGZvbGxvd2luZzo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAgIFJldHVybnM6IEEgcGF0dGVybiBkZWZpbmVkIGlkZW50aWNhbGx5IGFzLCBidXQgbm90IG5lY2Vzc2FyaWx5CiAgICBlcXVhbCB0bywgdGhlIHJlc3VsdCBvZiBudW1wdW5jdCZsdDtjaGFyVCZndDs6OmRvX2dyb3VwaW5nKCkuMjQxKQo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+YW5kIHJlcGxhY2UgdGhlIHRleHQgaW4gRm9vdG5vdGUgMjQxIHdpdGggdGhlIGZvbGxvd2luZzo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAgIFRvIHNwZWNpZnkgZ3JvdXBpbmcgYnkgM3MgdGhlIHZhbHVlIGlzICJcMDAzIiwgbm90ICIzIi4KPC9wPjwvYmxvY2txdW90ZT4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtIGlzIHRoYXQgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBsb2NhbGUgZmFjZXQKdmlydHVhbHMgc2VydmVzIHR3byBwdXJwb3NlczogZGVzY3JpYmluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIGJhc2UKY2xhc3MsIGFuZCBkZXNjcmliaW5nIHRoZSBtZWFuaW5nIG9mIGFuZCBjb25zdHJhaW50cyBvbiB0aGUgYmVoYXZpb3IKaW4gYXJiaXRyYXJ5IGRlcml2ZWQgY2xhc3Nlcy4gIFRoZSBuZXcgd29yZGluZyBtYWtlcyB0aGF0IHNlcGFyYXRpb24gYQpsaXR0bGUgYml0IGNsZWFyZXIuICBUaGUgZm9vdG5vdGUgKHdoaWNoIGlzIG5vbm5vcm1hdGl2ZSkgaXMgbm90CnN1cHBvc2VkIHRvIHNheSB3aGF0IHRoZSBncm91cGluZyBpcyBpbiB0aGUgIkMiIGxvY2FsZSBvciBpbiBhbnkgb3RoZXIKbG9jYWxlLiBJdCBpcyBqdXN0IGEgcmVtaW5kZXIgdGhhdCB0aGUgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyBzbWFsbAppbnRlZ2Vycywgbm90IEFTQ0lJIGNoYXJhY3RlcnMuCjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjMyNyI+PC9hPjMyNy4gVHlwbyBpbiB0aW1lX2dldCBmYWNldCBpbiB0YWJsZSA1MjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4xLjEuMS4xIFtsb2NhbGUuY2F0ZWdvcnldIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFRpa2kgV2FuIDxiPkRhdGU6PC9iPiAyMDAxLTA3LTA2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsb2NhbGUuY2F0ZWdvcnkiPmlzc3VlczwvYT4gaW4gW2xvY2FsZS5jYXRlZ29yeV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EdXBsaWNhdGUgb2Y6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0NDciPjQ0NzwvYT48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIDx0dD53Y2hhcl90PC90dD4gdmVyc2lvbnMgb2YgPHR0PnRpbWVfZ2V0PC90dD4gYW5kCjx0dD50aW1lX2dldF9ieW5hbWU8L3R0PiBhcmUgbGlzdGVkIGluY29ycmVjdGx5IGluIHRhYmxlIDUyLApyZXF1aXJlZCBpbnN0YW50aWF0aW9ucy4gIEluIGJvdGggY2FzZXMgdGhlIHNlY29uZCB0ZW1wbGF0ZQpwYXJhbWV0ZXIgaXMgZ2l2ZW4gYXMgT3V0cHV0SXRlcmF0b3IuICBJdCBzaG91bGQgaW5zdGVhZCBiZQpJbnB1dEl0ZXJhdG9yLCBzaW5jZSB0aGVzZSBhcmUgaW5wdXQgZmFjZXRzLjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiB0YWJsZSA1MiwgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsIGluIAoyMi4xLjEuMS4xIFtsb2NhbGUuY2F0ZWdvcnldLCBjaGFuZ2U8L3A+CjxwcmU+ICAgIHRpbWVfZ2V0Jmx0O3djaGFyX3QsIE91dHB1dEl0ZXJhdG9yJmd0OwogICAgdGltZV9nZXRfYnluYW1lJmx0O3djaGFyX3QsIE91dHB1dEl0ZXJhdG9yJmd0Owo8L3ByZT4KPHA+dG88L3A+CjxwcmU+ICAgIHRpbWVfZ2V0Jmx0O3djaGFyX3QsIElucHV0SXRlcmF0b3ImZ3Q7CiAgICB0aW1lX2dldF9ieW5hbWUmbHQ7d2NoYXJfdCwgSW5wdXRJdGVyYXRvciZndDsKPC9wcmU+Cgo8cD48aT5bUmVkbW9uZDogVmVyeSBtaW5vciBjaGFuZ2UgaW4gcHJvcG9zZWQgcmVzb2x1dGlvbi4gIE9yaWdpbmFsIGhhZAphIHR5cG8sIHdjaGFydCBpbnN0ZWFkIG9mIHdjaGFyX3QuXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjMyOCI+PC9hPjMyOC4gQmFkIHNwcmludGYgZm9ybWF0IG1vZGlmaWVyIGluIG1vbmV5X3B1dCZsdDsmZ3Q7Ojpkb19wdXQoKTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjYuMi4yIFtsb2NhbGUubW9uZXkucHV0LnZpcnR1YWxzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDEtMDctMDc8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+VGhlIHNwcmludGYgZm9ybWF0IHN0cmluZyAsICIlLjAxZiIgKHRoYXQncyB0aGUgZGlnaXQgb25lKSwgaW4gdGhlCmRlc2NyaXB0aW9uIG9mIHRoZSBkb19wdXQoKSBtZW1iZXIgZnVuY3Rpb25zIG9mIHRoZSBtb25leV9wdXQgZmFjZXQgaW4KMjIuMi42LjIuMiwgcDEgaXMgaW5jb3JyZWN0LiBGaXJzdCwgdGhlIGYgZm9ybWF0IHNwZWNpZmllciBpcyB3cm9uZwpmb3IgdmFsdWVzIG9mIHR5cGUgbG9uZyBkb3VibGUsIGFuZCBzZWNvbmQsIHRoZSBwcmVjaXNpb24gb2YgMDEKZG9lc24ndCBzZWVtIHRvIG1ha2Ugc2Vuc2UuIFdoYXQgd2FzIG1vc3QgbGlrZWx5IGludGVuZGVkIHdhcwoiJS4wTGYiLiwgdGhhdCBpcyBhIHByZWNpc2lvbiBvZiB6ZXJvIGZvbGxvd2VkIGJ5IHRoZSBMIGxlbmd0aAptb2RpZmllci48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIGZvcm1hdCBzdHJpbmcgdG8gIiUuMExmIi48L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+PHA+Rml4ZXMgYW4gb2J2aW91cyB0eXBvPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzI5Ij48L2E+MzI5LiB2ZWN0b3IgY2FwYWNpdHksIHJlc2VydmUgYW5kIHJlYWxsb2NhdGlvbjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4yLjYuMiBbdmVjdG9yLmNhcGFjaXR5XSwgMjMuMi42LjQgW3ZlY3Rvci5tb2RpZmllcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEFudGhvbnkgV2lsbGlhbXMgPGI+RGF0ZTo8L2I+IDIwMDEtMDctMTM8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3ZlY3Rvci5jYXBhY2l0eSI+aXNzdWVzPC9hPiBpbiBbdmVjdG9yLmNhcGFjaXR5XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZXJlIGlzIGFuIGFwcGFyZW50IGNvbnRyYWRpY3Rpb24gYWJvdXQgd2hpY2ggY2lyY3Vtc3RhbmNlcyBjYW4gY2F1c2UKYSByZWFsbG9jYXRpb24gb2YgYSB2ZWN0b3IgaW4gU2VjdGlvbiAyMy4yLjYuMiBbdmVjdG9yLmNhcGFjaXR5XSBhbmQKc2VjdGlvbiAyMy4yLjYuNCBbdmVjdG9yLm1vZGlmaWVyc10uCjwvcD4KCjxwPjIzLjIuNi4yIFt2ZWN0b3IuY2FwYWNpdHldLHA1IHNheXM6PC9wPgo8YmxvY2txdW90ZT48cD4KTm90ZXM6IFJlYWxsb2NhdGlvbiBpbnZhbGlkYXRlcyBhbGwgdGhlIHJlZmVyZW5jZXMsIHBvaW50ZXJzLCBhbmQgaXRlcmF0b3JzCnJlZmVycmluZyB0byB0aGUgZWxlbWVudHMgaW4gdGhlIHNlcXVlbmNlLiBJdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8KcmVhbGxvY2F0aW9uIHRha2VzIHBsYWNlIGR1cmluZyBpbnNlcnRpb25zIHRoYXQgaGFwcGVuIGFmdGVyIGEgY2FsbCB0bwpyZXNlcnZlKCkgdW50aWwgdGhlIHRpbWUgd2hlbiBhbiBpbnNlcnRpb24gd291bGQgbWFrZSB0aGUgc2l6ZSBvZiB0aGUgdmVjdG9yCmdyZWF0ZXIgdGhhbiB0aGUgc2l6ZSBzcGVjaWZpZWQgaW4gdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8gcmVzZXJ2ZSgpLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+V2hpY2ggaW1wbGllcyBpZiBJIGRvPC9wPgoKPHByZT4gIHN0ZDo6dmVjdG9yJmx0O2ludCZndDsgdmVjOwogIHZlYy5yZXNlcnZlKDIzKTsKICB2ZWMucmVzZXJ2ZSgwKTsKICB2ZWMuaW5zZXJ0KHZlYy5lbmQoKSwxKTsKPC9wcmU+Cgo8cD50aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiBtYXkgcmVhbGxvY2F0ZSB0aGUgdmVjdG9yIGZvciB0aGUgaW5zZXJ0LAphcyB0aGUgc2l6ZSBzcGVjaWZpZWQgaW4gdGhlIHByZXZpb3VzIGNhbGwgdG8gcmVzZXJ2ZSB3YXMgemVyby48L3A+Cgo8cD5Ib3dldmVyLCB0aGUgcHJldmlvdXMgcGFyYWdyYXBocyAoMjMuMi42LjIgW3ZlY3Rvci5jYXBhY2l0eV0sIHAxLTIpIHN0YXRlOjwvcD4KPGJsb2NrcXVvdGU+CjxwPgooY2FwYWNpdHkpIFJldHVybnM6IFRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMgdGhlIHZlY3RvcgpjYW4gaG9sZCB3aXRob3V0IHJlcXVpcmluZyByZWFsbG9jYXRpb24KPC9wPgo8cD4KLi4uQWZ0ZXIgcmVzZXJ2ZSgpLCBjYXBhY2l0eSgpIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlCmFyZ3VtZW50IG9mIHJlc2VydmUgaWYgcmVhbGxvY2F0aW9uIGhhcHBlbnM7IGFuZCBlcXVhbCB0byB0aGUgcHJldmlvdXMgdmFsdWUKb2YgY2FwYWNpdHkoKSBvdGhlcndpc2UuLi4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhpcyBpbXBsaWVzIHRoYXQgdmVjLmNhcGFjaXR5KCkgaXMgc3RpbGwgMjMsIGFuZCBzbyB0aGUgaW5zZXJ0KCkKc2hvdWxkIG5vdCByZXF1aXJlIGEgcmVhbGxvY2F0aW9uLCBhcyB2ZWMuc2l6ZSgpIGlzIDAuIFRoaXMgaXMgYmFja2VkCnVwIGJ5IDIzLjIuNi40IFt2ZWN0b3IubW9kaWZpZXJzXSwgcDE6CjwvcD4KPGJsb2NrcXVvdGU+PHA+CihpbnNlcnQpIE5vdGVzOiBDYXVzZXMgcmVhbGxvY2F0aW9uIGlmIHRoZSBuZXcgc2l6ZSBpcyBncmVhdGVyIHRoYW4gdGhlIG9sZApjYXBhY2l0eS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpUaG91Z2ggdGhpcyBkb2Vzbid0IHJ1bGUgb3V0IHJlYWxsb2NhdGlvbiBpZiB0aGUgbmV3IHNpemUgaXMgbGVzcwp0aGFuIHRoZSBvbGQgY2FwYWNpdHksIEkgdGhpbmsgdGhlIGludGVudCBpcyBjbGVhci4KPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgd29yZGluZyBvZiAyMy4yLjYuMiBbdmVjdG9yLmNhcGFjaXR5XSBwYXJhZ3JhcGggNSB0bzo8L3A+Cgo8YmxvY2txdW90ZT48cD4KTm90ZXM6IFJlYWxsb2NhdGlvbiBpbnZhbGlkYXRlcyBhbGwgdGhlIHJlZmVyZW5jZXMsIHBvaW50ZXJzLCBhbmQKaXRlcmF0b3JzIHJlZmVycmluZyB0byB0aGUgZWxlbWVudHMgaW4gdGhlIHNlcXVlbmNlLiBJdCBpcyBndWFyYW50ZWVkCnRoYXQgbm8gcmVhbGxvY2F0aW9uIHRha2VzIHBsYWNlIGR1cmluZyBpbnNlcnRpb25zIHRoYXQgaGFwcGVuIGFmdGVyIGEKY2FsbCB0byByZXNlcnZlKCkgdW50aWwgdGhlIHRpbWUgd2hlbiBhbiBpbnNlcnRpb24gd291bGQgbWFrZSB0aGUgc2l6ZQpvZiB0aGUgdmVjdG9yIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgY2FwYWNpdHkoKS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPjxpPltSZWRtb25kOiBvcmlnaW5hbCBwcm9wb3NlZCByZXNvbHV0aW9uIHdhcyBtb2RpZmllZCBzbGlnaHRseS4gIEluCnRoZSBvcmlnaW5hbCwgdGhlIGd1YXJhbnRlZSB3YXMgdGhhdCB0aGVyZSB3b3VsZCBiZSBubyByZWFsbG9jYXRpb24KdW50aWwgdGhlIHNpemUgd291bGQgYmUgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBjYXBhY2l0eSgpIGFmdGVyIHRoZQptb3N0IHJlY2VudCBjYWxsIHRvIHJlc2VydmUoKS4gIFRoZSBMV0cgZGlkIG5vdCBiZWxpZXZlIHRoYXQgdGhlCiJhZnRlciB0aGUgbW9zdCByZWNlbnQgY2FsbCB0byByZXNlcnZlKCkiIGFkZGVkIGFueSB1c2VmdWwKaW5mb3JtYXRpb24uXTwvaT48L3A+CgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlcmUgd2FzIGdlbmVyYWwgYWdyZWVtZW50IHRoYXQsIHdoZW4gcmVzZXJ2ZSgpIGlzIGNhbGxlZCB0d2ljZSBpbgpzdWNjZXNzaW9uIGFuZCB0aGUgYXJndW1lbnQgdG8gdGhlIHNlY29uZCBpbnZvY2F0aW9uIGlzIHNtYWxsZXIgdGhhbgp0aGUgYXJndW1lbnQgdG8gdGhlIGZpcnN0LCB0aGUgaW50ZW50IHdhcyBmb3IgdGhlIHNlY29uZCBpbnZvY2F0aW9uIHRvCmhhdmUgbm8gZWZmZWN0LiAgV29yZGluZyBpbXBseWluZyB0aGF0IHN1Y2ggY2FzZXMgaGF2ZSBhbiBlZmZlY3Qgb24KcmVhbGxvY2F0aW9uIGd1YXJhbnRlZXMgd2FzIGluYWR2ZXJ0YW50LjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzMzEiPjwvYT4zMzEuIGJhZCBkZWNsYXJhdGlvbiBvZiBkZXN0cnVjdG9yIGZvciBpb3NfYmFzZTo6ZmFpbHVyZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy40LjIuMS4xIFtpb3M6OmZhaWx1cmVdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFByZW1BbmFuZCBNLiBSYW8gPGI+RGF0ZTo8L2I+IDIwMDEtMDgtMjM8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lvczo6ZmFpbHVyZSI+aXNzdWVzPC9hPiBpbiBbaW9zOjpmYWlsdXJlXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CldpdGggdGhlIGNoYW5nZSBpbiAxNy40LjQuOSBbcmVzLm9uLmV4Y2VwdGlvbi5oYW5kbGluZ10gdG8gc3RhdGUKICAgIkFuIGltcGxlbWVudGF0aW9uIG1heSBzdHJlbmd0aGVuIHRoZSBleGNlcHRpb24tc3BlY2lmaWNhdGlvbiBmb3IgYSAKICAgIG5vbi12aXJ0dWFsIGZ1bmN0aW9uIGJ5IHJlbW92aW5nIGxpc3RlZCBleGNlcHRpb25zLiIKKGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMTkiPjExOTwvYT4pCmFuZCB0aGUgZm9sbG93aW5nIGRlY2xhcmF0aW9uIG9mIH5mYWlsdXJlKCkgaW4gaW9zX2Jhc2U6OmZhaWx1cmUKPC9wPgo8cHJlPiAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIGNsYXNzIGlvc19iYXNlOjpmYWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbiB7CiAgICAgICBwdWJsaWM6CiAgICAgICAgICAgLi4uCiAgICAgICAgICAgdmlydHVhbCB+ZmFpbHVyZSgpOwogICAgICAgICAgIC4uLgogICAgICAgfTsKICAgICB9CjwvcHJlPgo8cD50aGUgY2xhc3MgZmFpbHVyZSBjYW5ub3QgYmUgaW1wbGVtZW50ZWQgc2luY2UgaW4gMTguNi4xIFt0eXBlLmluZm9dIHRoZSBkZXN0cnVjdG9yIG9mIGNsYXNzIGV4Y2VwdGlvbiBoYXMgYW4gZW1wdHkKZXhjZXB0aW9uIHNwZWNpZmljYXRpb246PC9wPgo8cHJlPiAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIGNsYXNzIGV4Y2VwdGlvbiB7CiAgICAgICBwdWJsaWM6CiAgICAgICAgIC4uLgogICAgICAgICB2aXJ0dWFsIH5leGNlcHRpb24oKSB0aHJvdygpOwogICAgICAgICAuLi4KICAgICAgIH07CiAgICAgfQo8L3ByZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlbW92ZSB0aGUgZGVjbGFyYXRpb24gb2YgfmZhaWx1cmUoKS48L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgd2F5IHRoYXQgZGVzdHJ1Y3RvcnMKb2Ygb3RoZXIgY2xhc3NlcyBkZXJpdmVkIGZyb20gPHR0PmV4Y2VwdGlvbjwvdHQ+IGFyZSBoYW5kbGVkLjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjMzMyI+PC9hPjMzMy4gZG9lcyBlbmRsIGltcGx5IHN5bmNocm9uaXphdGlvbiB3aXRoIHRoZSBkZXZpY2U/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjYuMi44IFtvc3RyZWFtLm1hbmlwXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBQcmVtQW5hbmQgTS4gUmFvIDxiPkRhdGU6PC9iPiAyMDAxLTA4LTI3PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkEgZm9vdG5vdGUgaW4gMjcuNi4yLjggW29zdHJlYW0ubWFuaXBdIHN0YXRlczo8L3A+CjxibG9ja3F1b3RlPjxwPgogICAgW0Zvb3Rub3RlOiBUaGUgZWZmZWN0IG9mIGV4ZWN1dGluZyBjb3V0ICZsdDsmbHQ7IGVuZGwgaXMgdG8gaW5zZXJ0IGEgCiAgICAgbmV3bGluZSBjaGFyYWN0ZXIgaW4gdGhlIG91dHB1dCBzZXF1ZW5jZSBjb250cm9sbGVkIGJ5IGNvdXQsIHRoZW4gCiAgICAgc3luY2hyb25pemUgaXQgd2l0aCBhbnkgZXh0ZXJuYWwgZmlsZSB3aXRoIHdoaWNoIGl0IG1pZ2h0IGJlIAogICAgIGFzc29jaWF0ZWQuIC0tLSBlbmQgZm9vbm90ZV0KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpEb2VzIHRoZSB0ZXJtICJmaWxlIiBoZXJlIHJlZmVyIHRvIHRoZSBleHRlcm5hbCBkZXZpY2U/ClRoaXMgbGVhZHMgdG8gc29tZSBpbXBsZW1lbnRhdGlvbiBhbWJpZ3VpdHkgb24gc3lzdGVtcyB3aXRoIGZ1bGx5IApidWZmZXJlZCBmaWxlcyB3aGVyZSBhIG5ld2xpbmUgZG9lcyBub3QgY2F1c2UgYSBmbHVzaCB0byB0aGUgZGV2aWNlLgo8L3A+Cgo8cD4KQ2hvb3NpbmcgdG8gc3luYyB3aXRoIHRoZSBkZXZpY2UgbGVhZHMgdG8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UKcGVuYWx0aWVzIGZvciBlYWNoIGNhbGwgdG8gZW5kbCwgd2hpbGUgbm90IHN5bmMtaW5nIGxlYWRzIHRvCmVycm9ycyB1bmRlciBzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCjwvcD4KCjxwPgpJIGNvdWxkIG5vdCBmaW5kIGFueSBvdGhlciBzdGF0ZW1lbnQgdGhhdCBleHBsaWNpdGx5IGRlZmluZWQKdGhlIGJlaGF2aW9yIG9uZSB3YXkgb3IgdGhlIG90aGVyLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZW1vdmUgZm9vdG5vdGUgMzAwIGZyb20gc2VjdGlvbiAyNy42LjIuOCBbb3N0cmVhbS5tYW5pcF0uPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5XZSBhbHJlYWR5IGhhdmUgbm9ybWF0aXZlIHRleHQgc2F5aW5nIHdoYXQgPHR0PmVuZGw8L3R0PiBkb2VzOiBpdAppbnNlcnRzIGEgbmV3bGluZSBjaGFyYWN0ZXIgYW5kIGNhbGxzIDx0dD5mbHVzaDwvdHQ+LiAgVGhpcyBmb290bm90ZQppcyBhdCBiZXN0IHJlZHVuZGFudCwgYXQgd29yc3QgKGFzIHRoaXMgaXNzdWUgc2F5cykgbWlzbGVhZGluZywKYmVjYXVzZSBpdCBhcHBlYXJzIHRvIG1ha2UgcHJvbWlzZXMgYWJvdXQgd2hhdCA8dHQ+Zmx1c2g8L3R0Pgpkb2VzLjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjMzNCI+PC9hPjMzNC4gbWFwOjpvcGVyYXRvcltdIHNwZWNpZmljYXRpb24gZm9yY2VzIGluZWZmaWNpZW50IGltcGxlbWVudGF0aW9uPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjMuMS4yIFttYXAuYWNjZXNzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBBbmRyZWEgR3JpZmZpbmkgPGI+RGF0ZTo8L2I+IDIwMDEtMDktMDI8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI21hcC5hY2Nlc3MiPmlzc3VlczwvYT4gaW4gW21hcC5hY2Nlc3NdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGN1cnJlbnQgc3RhbmRhcmQgZGVzY3JpYmVzIG1hcDo6b3BlcmF0b3JbXSB1c2luZyBhCmNvZGUgZXhhbXBsZS4gVGhhdCBjb2RlIGV4YW1wbGUgaXMgaG93ZXZlciBxdWl0ZQppbmVmZmljaWVudCBiZWNhdXNlIGl0IHJlcXVpcmVzIHNldmVyYWwgdXNlbGVzcyBjb3BpZXMKb2YgYm90aCB0aGUgcGFzc2VkIGtleV90eXBlIHZhbHVlIGFuZCBvZiBkZWZhdWx0CmNvbnN0cnVjdGVkIG1hcHBlZF90eXBlIGluc3RhbmNlcy4KTXkgb3BpbmlvbiBpcyB0aGF0IHdhcyBub3QgbWVhbnQgYnkgdGhlIGNvbWl0ZWUgdG8KcmVxdWlyZSBhbGwgdGhvc2UgdGVtcG9yYXJ5IGNvcGllcy4gCjwvcD4KCjxwPkN1cnJlbnRseSBtYXA6Om9wZXJhdG9yW10gYmVoYXZpb3VyIGlzIHNwZWNpZmllZCBhczogPC9wPgo8cHJlPiAgUmV0dXJuczoKICAgICgqKChpbnNlcnQobWFrZV9wYWlyKHgsIFQoKSkpKS5maXJzdCkpLnNlY29uZC4KPC9wcmU+CiAgCjxwPgpUaGlzIHNwZWNpZmljYXRpb24gaG93ZXZlciB1c2VzIG1ha2VfcGFpciB0aGF0IGlzIGEKdGVtcGxhdGUgZnVuY3Rpb24gb2Ygd2hpY2ggcGFyYW1ldGVycyBpbiB0aGlzIGNhc2UKd2lsbCBiZSBkZWR1Y2VkIGJlaW5nIG9mIHR5cGUgY29uc3Qga2V5X3R5cGUmYW1wOyBhbmQKY29uc3QgVCZhbXA7LiBUaGlzIHdpbGwgY3JlYXRlIGEgcGFpciZsdDtrZXlfdHlwZSxUJmd0OyB0aGF0Cmlzbid0IHRoZSBjb3JyZWN0IHR5cGUgZXhwZWN0ZWQgYnkgbWFwOjppbnNlcnQgc28KYW5vdGhlciBjb3B5IHdpbGwgYmUgcmVxdWlyZWQgdXNpbmcgdGhlIHRlbXBsYXRlCmNvbnZlcnNpb24gY29uc3RydWN0b3IgYXZhaWxhYmxlIGluIHBhaXIgdG8gYnVpbGQKdGhlIHJlcXVpcmVkIHBhaXImbHQ7Y29uc3Qga2V5X3R5cGUsVCZndDsgaW5zdGFuY2UuCjwvcD4KCjxwPklmIHdlIGNvbnNpZGVyIGNhbGxpbmcgb2Yga2V5X3R5cGUgY29weSBjb25zdHJ1Y3RvcgphbmQgbWFwcGVkX3R5cGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBhbmQgY29weQpjb25zdHJ1Y3RvciBhcyBvYnNlcnZhYmxlIGJlaGF2aW91ciAoYXMgSSB0aGluayB3ZQpzaG91bGQpIHRoZW4gdGhlIHN0YW5kYXJkIGlzIGluIHRoaXMgcGxhY2UgcmVxdWlyaW5nCnR3byBjb3BpZXMgb2YgYSBrZXlfdHlwZSBlbGVtZW50IHBsdXMgYSBkZWZhdWx0CmNvbnN0cnVjdGlvbiBhbmQgdHdvIGNvcHkgY29uc3RydWN0aW9uIG9mIGEgbWFwcGVkX3R5cGUKKHN1cHBvc2luZyB0aGUgYWRkcmVzc2VkIGVsZW1lbnQgaXMgYWxyZWFkeSBwcmVzZW50CmluIHRoZSBtYXA7IG90aGVyd2lzZSBhdCBsZWFzdCBhbm90aGVyIGNvcHkKY29uc3RydWN0aW9uIGZvciBlYWNoIHR5cGUpLiAKPC9wPgoKPHA+QSBzaW1wbGUgKGhhbGYpIHNvbHV0aW9uIHdvdWxkIGJlIHJlcGxhY2luZyB0aGUgZGVzY3JpcHRpb24gd2l0aDo8L3A+CjxwcmU+ICBSZXR1cm5zOgogICAgKCooKGluc2VydCh2YWx1ZV90eXBlKHgsIFQoKSkpKS5maXJzdCkpLnNlY29uZC4KPC9wcmU+Cgo8cD5UaGlzIHdpbGwgcmVtb3ZlIHRoZSB3cm9uZyB0eXBlZCBwYWlyIGNvbnN0cnVjdGlvbiB0aGF0CnJlcXVpcmVzIG9uZSBleHRyYSBjb3B5IG9mIGJvdGgga2V5IGFuZCB2YWx1ZS48L3A+Cgo8cD5Ib3dldmVyIHN0aWxsIHRoZSB1c2luZyBvZiBtYXA6Omluc2VydCByZXF1aXJlcyB0ZW1wb3JhcnkKb2JqZWN0cyB3aGlsZSB0aGUgb3BlcmF0aW9uLCBmcm9tIGEgbG9naWNhbCBwb2ludCBvZiB2aWV3LApkb2Vzbid0IHJlcXVpcmUgYW55LiA8L3A+Cgo8cD5JIHRoaW5rIHRoYXQgYSBiZXR0ZXIgc29sdXRpb24gd291bGQgYmUgbGVhdmluZyBmcmVlIGFuCmltcGxlbWVudGVyIHRvIHVzZSBhIGRpZmZlcmVudCBhcHByb2FjaCB0aGFuIG1hcDo6aW5zZXJ0CnRoYXQsIGJlY2F1c2Ugb2YgaXRzIGludGVyZmFjZSwgZm9yY2VzIGRlZmF1bHQgY29uc3RydWN0ZWQKdGVtcG9yYXJpZXMgYW5kIGNvcGllcyBpbiB0aGlzIGNhc2UuClRoZSBiZXN0IHNvbHV0aW9uIGluIG15IG9waW5pb24gd291bGQgYmUganVzdCByZXF1aXJpbmcKbWFwOjpvcGVyYXRvcltdIHRvIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgbWFwcGVkX3R5cGUKcGFydCBvZiB0aGUgY29udGFpbmVkIGVsZW1lbnQgY3JlYXRpbmcgYSBkZWZhdWx0IGVsZW1lbnQKd2l0aCB0aGUgc3BlY2lmaWVkIGtleSBpZiBubyBzdWNoIGFuIGVsZW1lbnQgaXMgYWxyZWFkeQpwcmVzZW50IGluIHRoZSBjb250YWluZXIuIEFsc28gYSBsb2dhcml0aG1pYyBjb21wbGV4aXR5CnJlcXVpcmVtZW50IHNob3VsZCBiZSBzcGVjaWZpZWQgZm9yIHRoZSBvcGVyYXRpb24uCjwvcD4KCjxwPgpUaGlzIHdvdWxkIGFsbG93IGxpYnJhcnkgaW1wbGVtZW50ZXJzIHRvIHdyaXRlIGFsdGVybmF0aXZlCmltcGxlbWVudGF0aW9ucyBub3QgdXNpbmcgbWFwOjppbnNlcnQgYW5kIHJlYWNoaW5nIG9wdGltYWwKcGVyZm9ybWFuY2UgaW4gYm90aCBjYXNlcyBvZiB0aGUgYWRkcmVzc2VkIGVsZW1lbnQgYmVpbmcKcHJlc2VudCBvciBhYnNlbnQgZnJvbSB0aGUgbWFwIChubyB0ZW1wb3JhcmllcyBhdCBhbGwgYW5kCmp1c3QgdGhlIGNyZWF0aW9uIG9mIGEgbmV3IHBhaXIgaW5zaWRlIHRoZSBjb250YWluZXIgaWYKdGhlIGVsZW1lbnQgaXNuJ3QgcHJlc2VudCkuClNvbWUgaW1wbGVtZW50ZXIgaGFzIGFscmVhZHkgdGFrZW4gdGhpcyBvcHRpb24gYnV0IEkgdGhpbmsKdGhhdCB0aGUgY3VycmVudCB3b3JkaW5nIG9mIHRoZSBzdGFuZGFyZCBydWxlcyB0aGF0IGFzCm5vbi1jb25mb3JtaW5nLiAKPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD4KUmVwbGFjZSAyMy4zLjEuMiBbbWFwLmFjY2Vzc10gcGFyYWdyYXBoIDEgd2l0aAo8L3A+CjxibG9ja3F1b3RlPgo8cD4KLTEtIEVmZmVjdHM6ICBJZiB0aGVyZSBpcyBubyBrZXkgZXF1aXZhbGVudCB0byB4IGluIHRoZSBtYXAsIGluc2VydHMgCnZhbHVlX3R5cGUoeCwgVCgpKSBpbnRvIHRoZSBtYXAuCjwvcD4KPHA+Ci0yLSBSZXR1cm5zOiBBIHJlZmVyZW5jZSB0byB0aGUgbWFwcGVkX3R5cGUgY29ycmVzcG9uZGluZyB0byB4IGluICp0aGlzLgo8L3A+CjxwPgotMy0gQ29tcGxleGl0eTogbG9nYXJpdGhtaWMuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1RoaXMgaXMgdGhlIHNlY29uZCBvcHRpb24gbWVudGlvbmVkIGFib3ZlLiAgSG93YXJkIHByb3ZpZGVkCndvcmRpbmcuICBXZSBtYXkgYWxzbyB3aXNoIHRvIGhhdmUgYSBibGFua2V0IHN0YXRlbWVudCBzb21ld2hlcmUgaW4KY2xhdXNlIDE3IHNheWluZyB0aGF0IHdlIGRvIG5vdCBpbnRlbmQgdGhlIHNlbWFudGljcyBvZiBzYW1wbGUgY29kZQpmcmFnbWVudHMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgc3BlY2lmaW5nIGV4YWN0bHkgaG93IG1hbnkgY29waWVzIGFyZQptYWRlLiAgU2VlIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM5OCI+OTg8L2E+IGZvciBhIHNpbWlsYXIgcHJvYmxlbS5dPC9pPjwvcD4KCgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KVGhpcyBpcyB0aGUgc2Vjb25kIHNvbHV0aW9uIGRlc2NyaWJlZCBhYm92ZTsgYXMgbm90ZWQsIGl0IGlzCmNvbnNpc3RlbnQgd2l0aCBleGlzdGluZyBwcmFjdGljZS4KPC9wPgoKPHA+Tm90ZSB0aGF0IHdlIG5vdyBuZWVkIHRvIHNwZWNpZnkgdGhlIGNvbXBsZXhpdHkgZXhwbGljaXRseSwgYmVjYXVzZQp3ZSBhcmUgbm8gbG9uZ2VyIGRlZmluaW5nIDx0dD5vcGVyYXRvcltdPC90dD4gaW4gdGVybXMgb2YKPHR0Pmluc2VydDwvdHQ+LjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzMzUiPjwvYT4zMzUuIG1pbm9yIGlzc3VlIHdpdGggY2hhcl90cmFpdHMsIHRhYmxlIDM3PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIxLjEuMSBbY2hhci50cmFpdHMucmVxdWlyZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQW5keSBTYXd5ZXIgPGI+RGF0ZTo8L2I+IDIwMDEtMDktMDY8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRhYmxlIDM3LCBpbiAyMS4xLjEgW2NoYXIudHJhaXRzLnJlcXVpcmVdLCBkZXNjaWJlcyBjaGFyX3RyYWl0czo6YXNzaWduCmFzOgo8L3A+CjxwcmU+ICBYOjphc3NpZ24oYyxkKSAgIGFzc2lnbnMgYyA9IGQuCjwvcHJlPgoKPHA+QW5kIHBhcmEgMSBzYXlzOjwvcD4KCjxibG9ja3F1b3RlPjxwPgogWy4uLl0gYyBhbmQgZCBkZW5vdGUgdmFsdWVzIG9mIHR5cGUgQ2hhclQgWy4uLl0KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpOYXR1cmFsbHksIGlmIGMgYW5kIGQgYXJlIDxpPnZhbHVlczwvaT4sIHRoZW4gdGhlIGFzc2lnbm1lbnQgaXMKKGVmZmVjdGl2ZWx5KSBtZWFuaW5nbGVzcy4gSXQncyBjbGVhcmx5IGludGVuZGVkIHRoYXQgKGluIHRoZSBjYXNlIG9mCmFzc2lnbiwgYXQgbGVhc3QpLCAnYycgaXMgaW50ZW5kZWQgdG8gYmUgYSByZWZlcmVuY2UgdHlwZS4KPC9wPgoKPHA+SSBkaWQgYSBxdWljayBzdXJ2ZXkgb2YgdGhlIGZvdXIgaW1wbGVtZW50YXRpb25zIEkgaGFwcGVuZWQgdG8gaGF2ZQpseWluZyBhcm91bmQsIGFuZCBzdXJlIGVub3VnaCB0aGV5IGFsbCBoYXZlIHNpZ25hdHVyZXM6PC9wPgo8cHJlPiAgICBhc3NpZ24oIGNoYXJUJmFtcDssIGNvbnN0IGNoYXJUJmFtcDsgKTsKPC9wcmU+Cgo8cD4ob3IgdGhlIGVxdWl2YWxlbnQpLiBJdCdzIGFsc28gZGVzY3JpYmVkIHRoaXMgd2F5IGluIE5pY28ncyBib29rLgooTm90IHRvIG1lbnRpb24gdGhlIHN5bm9wc2VzIG9mIGNoYXJfdHJhaXRzJmx0O2NoYXImZ3Q7IGluIDIxLjEuMy4xCmFuZCBjaGFyX3RyYWl0cyZsdDt3Y2hhcl90Jmd0OyBpbiAyMS4xLjMuMi4uLikKPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRoZSBmb2xsb3dpbmcgdG8gMjEuMS4xIHBhcmEgMTo8L3A+CjxibG9ja3F1b3RlPjxwPgogciBkZW5vdGVzIGFuIGx2YWx1ZSBvZiBDaGFyVAo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+YW5kIGNoYW5nZSB0aGUgZGVzY3JpcHRpb24gb2YgYXNzaWduIGluIHRoZSB0YWJsZSB0bzo8L3A+CjxwcmU+ICBYOjphc3NpZ24ocixkKSAgIGFzc2lnbnMgciA9IGQKPC9wcmU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzM2Ij48L2E+MzM2LiBDbGF1c2UgMTcgbGFjayBvZiByZWZlcmVuY2VzIHRvIGRlcHJlY2F0ZWQgaGVhZGVyczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAxNyBbbGlicmFyeV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGV0bGVmIFZvbGxtYW5uIDxiPkRhdGU6PC9iPiAyMDAxLTA5LTA1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsaWJyYXJ5Ij5pc3N1ZXM8L2E+IGluIFtsaWJyYXJ5XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+RnJvbSBjKytzdGQtZWRpdC04NzM6PC9wPgoKPHA+MTcuNC4xLjIgW2hlYWRlcnNdLCBUYWJsZSAxMS4gIEluIHRoaXMgdGFibGUsIHRoZSBoZWFkZXIKJmx0O3N0cnN0cmVhbSZndDsgaXMgbWlzc2luZy48L3A+Cgo8cD5UaGlzIHNob3dzIGEgZ2VuZXJhbCBwcm9ibGVtOiBUaGUgd2hvbGUgY2xhdXNlIDE3IHJlZmVycyBxdWl0ZQpvZnRlbiB0byBjbGF1c2VzIDE4IHRocm91Z2ggMjcsIGJ1dCBELjcgaXMgYWxzbyBhIHBhcnQgb2YgdGhlIHN0YW5kYXJkCmxpYnJhcnkgKHRob3VnaCBhIGRlcHJlY2F0ZWQgb25lKS48L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPlRvIDE3LjQuMS4yIFtoZWFkZXJzXSBUYWJsZSAxMSwgQysrIExpYnJhcnkgSGVhZGVycywgYWRkCiImbHQ7c3Ryc3RyZWFtJmd0OyIuPC9wPgoKPHA+SW4gdGhlIGZvbGxvd2luZyBwbGFjZXMsIGNoYW5nZSAiY2xhdXNlcyAxNyB0aHJvdWdoIDI3IiB0byAiY2xhdXNlcwoxNyB0aHJvdWdoIDI3IGFuZCBBbm5leCBEIjo8L3A+Cgo8dWw+CjxsaT4xLjIgW2ludHJvLnJlZnNdIE5vcm1hdGl2ZSByZWZlcmVuY2VzLzEvZm9vdG5vdGUgMTwvbGk+CjxsaT4xLjMgW2ludHJvLmRlZnNdIERlZmluaXRpb25zLzE8L2xpPgo8bGk+NyBbZGNsLmRjbF0gTGlicmFyeSBpbnRyb2R1Y3Rpb24vOTwvbGk+CjxsaT4xNy4zIFtkZXNjcmlwdGlvbl0gTWV0aG9kIG9mIGRlc2NyaXB0aW9uIChJbmZvcm1hdGl2ZSkvMTwvbGk+CjxsaT4xNy4zLjIuMS4zIFtjaGFyYWN0ZXIuc2VxXSBDaGFyYWN0ZXIgc2VxdWVuY2VzLzEvYnVsbGV0IDI8L2xpPgo8bGk+MTcuMy4yLjIgW2Z1bmN0aW9ucy53aXRoaW4uY2xhc3Nlc10gRnVuY3Rpb25zIHdpdGhpbiBjbGFzc2VzLzE8L2xpPgo8bGk+MTcuMy4yLjMgW29iamVjdHMud2l0aGluLmNsYXNzZXNdIFByaXZhdGUgbWVtYmVycy8xLygyIHBsYWNlcyk8L2xpPgo8bGk+MTcuNCBbcmVxdWlyZW1lbnRzXSBMaWJyYXJ5LXdpZGUgcmVxdWlyZW1lbnRzLzE8L2xpPgo8bGk+MTcuNC4xLjIgW2hlYWRlcnNdIEhlYWRlcnMvNDwvbGk+CjxsaT4xNy40LjMuNSBbcmVwbGFjZW1lbnQuZnVuY3Rpb25zXSBSZXBsYWNlbWVudCBmdW5jdGlvbnMvMTwvbGk+CjxsaT4xNy40LjQuMyBbZ2xvYmFsLmZ1bmN0aW9uc10gR2xvYmFsIG9yIG5vbi1tZW1iZXIgZnVuY3Rpb25zLzI8L2xpPgo8bGk+MTcuNC40LjcgW3Byb3RlY3Rpb24ud2l0aGluLmNsYXNzZXNdIFByb3RlY3Rpb24gd2l0aGluIGNsYXNzZXMvMTwvbGk+CjwvdWw+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzMzciPjwvYT4zMzcuIHJlcGxhY2VfY29weV9pZidzIHRlbXBsYXRlIHBhcmFtZXRlciBzaG91bGQgYmUgSW5wdXRJdGVyYXRvcjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNS4yLjUgW2FsZy5yZXBsYWNlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEZXRsZWYgVm9sbG1hbm4gPGI+RGF0ZTo8L2I+IDIwMDEtMDktMDc8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2FsZy5yZXBsYWNlIj5pc3N1ZXM8L2E+IGluIFthbGcucmVwbGFjZV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkZyb20gYysrc3RkLWVkaXQtODc2OjwvcD4KCjxwPgpJbiBzZWN0aW9uIDI1LjIuNSBbYWxnLnJlcGxhY2VdIGJlZm9yZSBwNDogVGhlIG5hbWUgb2YgdGhlIGZpcnN0CnBhcmFtZXRlciBvZiB0ZW1wbGF0ZSByZXBsYWNlX2NvcHlfaWYgc2hvdWxkIGJlICJJbnB1dEl0ZXJhdG9yIgppbnN0ZWFkIG9mICJJdGVyYXRvciIuICBBY2NvcmRpbmcgdG8gMTcuMy4yLjEgW3R5cGUuZGVzY3JpcHRpb25zXSBwMSB0aGUKcGFyYW1ldGVyIG5hbWUgY29udmV5cyByZWFsIG5vcm1hdGl2ZSBtZWFuaW5nLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgPHR0Pkl0ZXJhdG9yPC90dD4gdG8gPHR0PklucHV0SXRlcmF0b3I8L3R0Pi48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzM4Ij48L2E+MzM4LiAgaXMgd2hpdGVzcGFjZSBhbGxvd2VkIGJldHdlZW4gYC0nIGFuZCBhIGRpZ2l0PzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yIFtsb2NhbGUuY2F0ZWdvcmllc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAxLTA5LTE3PC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjbG9jYWxlLmNhdGVnb3JpZXMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtsb2NhbGUuY2F0ZWdvcmllc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsb2NhbGUuY2F0ZWdvcmllcyI+aXNzdWVzPC9hPiBpbiBbbG9jYWxlLmNhdGVnb3JpZXNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KRnJvbSBTdGFnZSAyIHByb2Nlc3NpbmcgaW4gMjIuMi4yLjEuMiBbZmFjZXQubnVtLmdldC52aXJ0dWFsc10sIHA4IGFuZCA5ICh0aGUKb3JpZ2luYWwgdGV4dCBvciB0aGUgdGV4dCBjb3JyZWN0ZWQgYnkgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gb2YKaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyMSI+MjIxPC9hPikgaXQgc2VlbXMgY2xlYXIgdGhhdCBubyB3aGl0ZXNwYWNlIGlzIGFsbG93ZWQKd2l0aGluIGEgbnVtYmVyLCBidXQgMjIuMi4zLjEgW2xvY2FsZS5udW1wdW5jdF0sIHAyLCB3aGljaCBnaXZlcyB0aGUKZm9ybWF0IGZvciBpbnRlZ2VyIGFuZCBmbG9hdGluZyBwb2ludCB2YWx1ZXMsIHNheXMgdGhhdCB3aGl0ZXNwYWNlIGlzCm9wdGlvbmFsIGJldHdlZW4gYSBwbHVzbWludXMgYW5kIGEgc2lnbi4KPC9wPgoKPHA+ClRoZSB0ZXh0IG5lZWRzIHRvIGJlIGNsYXJpZmllZCB0byBlaXRoZXIgY29uc2lzdGVudGx5IGFsbG93IG9yCmRpc2FsbG93IHdoaXRlc3BhY2UgYmV0d2VlbiBhIHBsdXNtaW51cyBhbmQgYSBzaWduLiBJdCBtaWdodCBiZQp3b3J0aHdoaWxlIHRvIGNvbnNpZGVyIHRoZSBmYWN0IHRoYXQgdGhlIEMgbGlicmFyeSBzdGRpbyBmYWNpbGl0eSBkb2VzCm5vdCBwZXJtaXQgd2hpdGVzcGFjZSBlbWJlZGRlZCBpbiBudW1iZXJzIGFuZCBuZWl0aGVyIGRvZXMgdGhlIEMgb3IKQysrIGNvcmUgbGFuZ3VhZ2UgKHRoZSBzeW50YXggb2YgaW50ZWdlci1saXRlcmFscyBpcyBnaXZlbiBpbiAyLjEzLjEKW2xleC5pY29uXSwgdGhhdCBvZiBmbG9hdGluZy1wb2ludC1saXRlcmFscyBpbiAyLjEzLjMgW2xleC5mY29uXSBvZiB0aGUKQysrIHN0YW5kYXJkKS4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSBmaXJzdCBwYXJ0IG9mIDIyLjIuMy4xIFtsb2NhbGUubnVtcHVuY3RdIHBhcmFncmFwaCAyIGZyb206PC9wPgo8YmxvY2txdW90ZT4KPHA+ClRoZSBzeW50YXggZm9yIG51bWJlciBmb3JtYXRzIGlzIGFzIGZvbGxvd3MsIHdoZXJlIDx0dD5kaWdpdDwvdHQ+CnJlcHJlc2VudHMgdGhlIHJhZGl4IHNldCBzcGVjaWZpZWQgYnkgdGhlIDx0dD5mbXRmbGFnczwvdHQ+IGFyZ3VtZW50CnZhbHVlLCA8dHQ+d2hpdGVzcGFjZTwvdHQ+IGlzIGFzIGRldGVybWluZWQgYnkgdGhlIGZhY2V0Cjx0dD5jdHlwZSZsdDtjaGFyVCZndDs8L3R0PiAoMjIuMi4xLjEpLCBhbmQgPHR0PnRob3VzYW5kcy1zZXA8L3R0PiBhbmQKPHR0PmRlY2ltYWwtcG9pbnQ8L3R0PiBhcmUgdGhlIHJlc3VsdHMgb2YgY29ycmVzcG9uZGluZwo8dHQ+bnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7PC90dD4gbWVtYmVycy4gIEludGVnZXIgdmFsdWVzIGhhdmUgdGhlCmZvcm1hdDoKPC9wPgo8cHJlPiAgaW50ZWdlciAgIDo6PSBbc2lnbl0gdW5pdHMKICBzaWduICAgICAgOjo9IHBsdXNtaW51cyBbd2hpdGVzcGFjZV0KICBwbHVzbWludXMgOjo9ICcrJyB8ICctJwogIHVuaXRzICAgICA6Oj0gZGlnaXRzIFt0aG91c2FuZHMtc2VwIHVuaXRzXQogIGRpZ2l0cyAgICA6Oj0gZGlnaXQgW2RpZ2l0c10KPC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KPHA+ClRoZSBzeW50YXggZm9yIG51bWJlciBmb3JtYXRzIGlzIGFzIGZvbGxvd3MsIHdoZXJlIDx0dD5kaWdpdDwvdHQ+CnJlcHJlc2VudHMgdGhlIHJhZGl4IHNldCBzcGVjaWZpZWQgYnkgdGhlIDx0dD5mbXRmbGFnczwvdHQ+IGFyZ3VtZW50CnZhbHVlLCBhbmQgPHR0PnRob3VzYW5kcy1zZXA8L3R0PiBhbmQgPHR0PmRlY2ltYWwtcG9pbnQ8L3R0PiBhcmUgdGhlCnJlc3VsdHMgb2YgY29ycmVzcG9uZGluZyA8dHQ+bnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7PC90dD4gbWVtYmVycy4KSW50ZWdlciB2YWx1ZXMgaGF2ZSB0aGUgZm9ybWF0Ogo8L3A+CjxwcmU+ICBpbnRlZ2VyICAgOjo9IFtzaWduXSB1bml0cwogIHNpZ24gICAgICA6Oj0gcGx1c21pbnVzCiAgcGx1c21pbnVzIDo6PSAnKycgfCAnLScKICB1bml0cyAgICAgOjo9IGRpZ2l0cyBbdGhvdXNhbmRzLXNlcCB1bml0c10KICBkaWdpdHMgICAgOjo9IGRpZ2l0IFtkaWdpdHNdCjwvcHJlPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgdGhlIGZvcm1hdCBkZXNjcmliZWQgaW4gMjIuMi4zLjEgW2xvY2FsZS5udW1wdW5jdF0gcGFyYWdyYXBoIDIgaGFzIGFueSBub3JtYXRpdmUgd2VpZ2h0OiBub3RoaW5nIGluIHRoZQpzdGFuZGFyZCBzYXlzIGhvdywgb3Igd2hldGhlciwgaXQncyB1c2VkLiAgSG93ZXZlciwgdGhlcmUncyBubyByZWFzb24KZm9yIGl0IHRvIGRpZmZlciBncmF0dWl0b3VzbHkgZnJvbSB0aGUgdmVyeSBzcGVjaWZpYyBkZXNjcmlwdGlvbiBvZgpudW1lcmljIHByb2Nlc3NpbmcgaW4gMjIuMi4yLjEuMiBbZmFjZXQubnVtLmdldC52aXJ0dWFsc10uICBUaGUgcHJvcG9zZWQKcmVzb2x1dGlvbiByZW1vdmVzIGFsbCBtZW50aW9uIG9mICJ3aGl0ZXNwYWNlIiBmcm9tIHRoYXQgZm9ybWF0LjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzMzkiPjwvYT4zMzkuIGRlZmluaXRpb24gb2YgYml0bWFzayB0eXBlIHJlc3RyaWN0ZWQgdG8gY2xhdXNlIDI3PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMSBbY2F0ZWdvcnkuY3R5cGVdLCAxNy4zLjIuMS4yIFtiaXRtYXNrLnR5cGVzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDEtMDktMTc8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2NhdGVnb3J5LmN0eXBlIj5pc3N1ZXM8L2E+IGluIFtjYXRlZ29yeS5jdHlwZV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPlRoZSBjdHlwZV9jYXRlZ29yeTo6bWFzayB0eXBlIGlzIGRlY2xhcmVkIHRvIGJlIGFuIGVudW0gaW4gMjIuMi4xCltjYXRlZ29yeS5jdHlwZV0gd2l0aCBwMSB0aGVuIHN0YXRpbmcgdGhhdCBpdCBpcyBhIGJpdG1hc2sgdHlwZSwgbW9zdApsaWtlbHkgcmVmZXJyaW5nIHRvIHRoZSBkZWZpbml0aW9uIG9mIGJpdG1hc2sgdHlwZSBpbiAxNy4zLjIuMS4yCltiaXRtYXNrLnR5cGVzXSwgcDEuIEhvd2V2ZXIsIHRoZSBzYWlkIGRlZmluaXRpb24gb25seSBhcHBsaWVzIHRvCmNsYXVzZSAyNywgbWFraW5nIHRoZSByZWZlcmVuY2UgaW4gMjIuMi4xIHNvbWV3aGF0IGR1YmlvdXMuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNsYXJpZnkgMTcuMy4yLjEuMiwgcDEgYnkgY2hhbmdpbmcgdGhlIGN1cnJlbnQgdGV4dCBmcm9tPC9wPgogICAgPGJsb2NrcXVvdGU+PHA+CiAgICBTZXZlcmFsIHR5cGVzIGRlZmluZWQgaW4gY2xhdXNlIDI3IGFyZSBiaXRtYXNrIHR5cGVzLiBFYWNoIGJpdG1hc2sgdHlwZQogICAgY2FuIGJlIGltcGxlbWVudGVkIGFzIGFuIGVudW1lcmF0ZWQgdHlwZSB0aGF0IG92ZXJsb2FkcyBjZXJ0YWluIG9wZXJhdG9ycywKICAgIGFzIGFuIGludGVnZXIgdHlwZSwgb3IgYXMgYSBiaXRzZXQgKDIzLjMuNSBbdGVtcGxhdGUuYml0c2V0XSkuCiAgICA8L3A+PC9ibG9ja3F1b3RlPgo8cD50byByZWFkPC9wPgogICAgPGJsb2NrcXVvdGU+PHA+CiAgICBTZXZlcmFsIHR5cGVzIGRlZmluZWQgaW4gY2xhdXNlcyBsaWIubGFuZ3VhZ2Uuc3VwcG9ydCB0aHJvdWdoIAogICAgbGliLmlucHV0Lm91dHB1dCBhbmQgQW5uZXggRCBhcmUgYml0bWFzayB0eXBlcy4gRWFjaCBiaXRtYXNrIHR5cGUgY2FuCiAgICBiZSBpbXBsZW1lbnRlZCBhcyBhbiBlbnVtZXJhdGVkIHR5cGUgdGhhdCBvdmVybG9hZHMgY2VydGFpbiBvcGVyYXRvcnMsCiAgICBhcyBhbiBpbnRlZ2VyICB0eXBlLCBvciBhcyBhIGJpdHNldCAobGliLnRlbXBsYXRlLmJpdHNldCkuCiAgICA8L3A+PC9ibG9ja3F1b3RlPgoKPHA+CkFkZGl0aW9uYWxseSwgY2hhbmdlIHRoZSBkZWZpbml0aW9uIGluIDIyLjIuMSB0byBhZG9wdCB0aGUgc2FtZQpjb252ZW50aW9uIGFzIGluIGNsYXVzZSAyNyBieSByZXBsYWNpbmcgdGhlIGV4aXN0aW5nIHRleHQgd2l0aCB0aGUKZm9sbG93aW5nIChub3RlLCBpbiBwYXJ0aWNsdWFyLCB0aGUgY3Jvc3MtcmVmZXJlbmNlIHRvIDE3LjMuMi4xLjIgaW4KMjIuMi4xLCBwMSk6CjwvcD4KCjxibG9ja3F1b3RlPgo8cD4yMi4yLjEgVGhlIGN0eXBlIGNhdGVnb3J5IFtsaWIuY2F0ZWdvcnkuY3R5cGVdPC9wPgo8cHJlPm5hbWVzcGFjZSBzdGQgewogICAgY2xhc3MgY3R5cGVfYmFzZSB7CiAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRlZiA8Yj48aT5UPC9pPjwvYj4gbWFzazsKCiAgICAgICAgLy8gbnVtZXJpYyB2YWx1ZXMgYXJlIGZvciBleHBvc2l0aW9uIG9ubHkuCiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgc3BhY2UgPSAxICZsdDsmbHQ7IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSAxICZsdDsmbHQ7IDE7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwgPSAxICZsdDsmbHQ7IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIgPSAxICZsdDsmbHQ7IDM7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSAxICZsdDsmbHQ7IDQ7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSAxICZsdDsmbHQ7IDU7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgPSAxICZsdDsmbHQ7IDY7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSAxICZsdDsmbHQ7IDc7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gMSAmbHQ7Jmx0OyA4OwogICAgICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gYWxwaGEgfCBkaWdpdDsKICAgICAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IGFsbnVtIHwgcHVuY3Q7CiAgICB9Owp9CjwvcHJlPgoKPHA+VGhlIHR5cGUgPHR0Pm1hc2s8L3R0PiBpcyBhIGJpdG1hc2sgdHlwZSAoMTcuMy4yLjEuMiBbYml0bWFzay50eXBlc10pLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0N1cmHnYW86IFRoZSBMV0cgbm90ZXMgdGhhdCBUIGFib3ZlIHNob3VsZCBiZSBib2xkLWl0YWxpY3MgdG8gYmUKY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzdGFuZGFyZC5dPC9pPjwvcD4KCgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzQwIj48L2E+MzQwLiBpbnRlcnByZXRhdGlvbiBvZiA8dHQ+aGFzX2ZhY2V0Jmx0O0ZhY2V0Jmd0Oyhsb2MpPC90dD48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMS4xLjEuMSBbbG9jYWxlLmNhdGVnb3J5XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDEtMDktMTg8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xvY2FsZS5jYXRlZ29yeSI+aXNzdWVzPC9hPiBpbiBbbG9jYWxlLmNhdGVnb3J5XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+Ckl0J3MgdW5jbGVhciB3aGV0aGVyIDIyLjEuMS4xLjEsIHAzIHNheXMgdGhhdAo8dHQ+aGFzX2ZhY2V0Jmx0O0ZhY2V0Jmd0Oyhsb2MpPC90dD4gcmV0dXJucyB0cnVlIGZvciBhbnkgPHR0PkZhY2V0PC90dD4KZnJvbSBUYWJsZSA1MSBvciB3aGV0aGVyIGl0IGluY2x1ZGVzIFRhYmxlIDUyIGFzIHdlbGw6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgpGb3IgYW55IGxvY2FsZSA8dHQ+bG9jPC90dD4gZWl0aGVyIGNvbnN0cnVjdGVkLCBvciByZXR1cm5lZCBieQpsb2NhbGU6OmNsYXNzaWMoKSwgYW5kIGFueSBmYWNldCA8dHQ+RmFjZXQ8L3R0PiB0aGF0IGlzIGEgbWVtYmVyIG9mIGEKc3RhbmRhcmQgY2F0ZWdvcnksIDx0dD5oYXNfZmFjZXQmbHQ7RmFjZXQmZ3Q7KGxvYyk8L3R0PiBpcyB0cnVlLiBFYWNoCmxvY2FsZSBtZW1iZXIgZnVuY3Rpb24gd2hpY2ggdGFrZXMgYSA8dHQ+bG9jYWxlOjpjYXRlZ29yeTwvdHQ+CmFyZ3VtZW50IG9wZXJhdGVzIG9uIHRoZSBjb3JyZXNwb25kaW5nIHNldCBvZiBmYWNldHMuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4KSXQgc2VlbXMgdGhhdCBpdCBjb21lcyBkb3duIHRvIHdoaWNoIGZhY2V0cyBhcmUgY29uc2lkZXJlZCB0byBiZSBtZW1iZXJzIG9mIGEKc3RhbmRhcmQgY2F0ZWdvcnkuIEludHVpdGl2ZWx5LCBJIHdvdWxkIGNsYXNzaWZ5IGFsbCB0aGUgZmFjZXRzIGluIFRhYmxlIDUyIGFzCm1lbWJlcnMgb2YgdGhlaXIgcmVzcGVjdGl2ZSBzdGFuZGFyZCBjYXRlZ29yaWVzLCBidXQgdGhlcmUgYXJlIGFuIHVuYm91bmRlZCBzZXQKb2YgdGhlbS4uLgo8L3A+Cgo8cD4KVGhlIHBhcmFncmFwaCBpbXBsaWVzIHRoYXQsIGZvciBpbnN0YW5jZSwgPHR0Pmhhc19mYWNldCZsdDtudW1fcHV0Jmx0O0MsCk91dHB1dEl0ZXJhdG9yJmd0OyAmZ3Q7KGxvYyk8L3R0PiBtdXN0IGFsd2F5cyByZXR1cm4gdHJ1ZS4gSSBkb24ndCB0aGluayB0aGF0J3MKcG9zc2libGUuIElmIGl0IHdlcmUsIHRoZW4gPHR0PnVzZV9mYWNldCZsdDtudW1fcHV0Jmx0O0MsIE91dHB1dEl0ZXJhdG9yJmd0OwomZ3Q7KGxvYyk8L3R0PiB3b3VsZCBoYXZlIHRvIHJldHVybiBhIHJlZmVyZW5jZSB0byBhIGRpc3RpbmN0IG9iamVjdCBmb3IgZWFjaAp2YWxpZCBzcGVjaWFsaXphdGlvbiBvZiA8dHQ+bnVtX3B1dCZsdDtDLCBPdXRwdXRJdGVyYXRvcnkmZ3Q7PC90dD4sIHdoaWNoIGlzCmNsZWFybHkgaW1wb3NzaWJsZS4KPC9wPgoKPHA+Ck9uIHRoZSBvdGhlciBoYW5kLCBpZiBub25lIG9mIHRoZSBmYWNldHMgaW4gVGFibGUgNTIgaXMgYSBtZW1iZXIgb2YgYSBzdGFuZGFyZApjYXRlZ29yeSB0aGVuIG5vbmUgb2YgdGhlIGxvY2FsZSBtZW1iZXIgZnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiBlbnRpcmUKY2F0ZWdvcmllcyBvZiBmYWNldHMgd2lsbCB3b3JrIHByb3Blcmx5Lgo8L3A+Cgo8cD4KSXQgc2VlbXMgdGhhdCB3aGF0IHAzIHNob3VsZCBtZW50aW9uIHRoYXQgaXQncyByZXF1aXJlZCAocGVybWl0dGVkPykKdG8gaG9sZCBvbmx5IGZvciBzcGVjaWFsaXphdGlvbnMgb2YgPHR0PkZhY2V0PC90dD4gZnJvbSBUYWJsZSA1MiBvbgo8dHQ+QzwvdHQ+IGZyb20gdGhlIHNldCB7IDx0dD5jaGFyPC90dD4sIDx0dD53Y2hhcl90PC90dD4gfSwgYW5kCjx0dD5JbnB1dEl0ZXJhdG9yPC90dD4gYW5kIDx0dD5PdXRwdXRJdGVyYXRvcjwvdHQ+IGZyb20gdGhlIHNldCBvZgp7CntpLG99PHR0PnN0cmVhbWJ1Zl9pdGVyYXRvcjwvdHQ+Jmx0O3s8dHQ+Y2hhcjwvdHQ+LDx0dD53Y2hhcl90PC90dD59PHR0PiZndDs8L3R0Pgp9Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4xLjEuMS4xIFtsb2NhbGUuY2F0ZWdvcnldLCBwYXJhZ3JhcGggMywgY2hhbmdlCiJ0aGF0IGlzIGEgbWVtYmVyIG9mIGEgc3RhbmRhcmQgY2F0ZWdvcnkiIHRvICJzaG93biBpbiBUYWJsZSA1MSIuPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgZmFjZXRzIGluIFRhYmxlIDUyIGFyZSBhbiB1bmJvdW5kZWQgc2V0LiAgTG9jYWxlcyBzaG91bGQgbm90IGJlCnJlcXVpcmVkIHRvIGNvbnRhaW4gYW4gaW5maW5pdGUgbnVtYmVyIG9mIGZhY2V0cy48L3A+IAoKPHA+SXQncyBub3QgbmVjZXNzYXJ5IHRvIHRhbGsgYWJvdXQgd2hpY2ggdmFsdWVzIG9mIElucHV0SXRlcmF0b3IgYW5kCk91dHB1dEl0ZXJhdG9yIG11c3QgYmUgc3VwcG9ydGVkLiAgVGFibGUgNTEgYWxyZWFkeSBjb250YWlucyBhCmNvbXBsZXRlIGxpc3Qgb2YgdGhlIG9uZXMgd2UgbmVlZC48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM0MSI+PC9hPjM0MS4gVmVjdG9yIHJlYWxsb2NhdGlvbiBhbmQgc3dhcDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4yLjYuMiBbdmVjdG9yLmNhcGFjaXR5XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBBbnRob255IFdpbGxpYW1zIDxiPkRhdGU6PC9iPiAyMDAxLTA5LTI3PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCN2ZWN0b3IuY2FwYWNpdHkiPmlzc3VlczwvYT4gaW4gW3ZlY3Rvci5jYXBhY2l0eV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkl0IGlzIGEgY29tbW9uIGlkaW9tIHRvIHJlZHVjZSB0aGUgY2FwYWNpdHkgb2YgYSB2ZWN0b3IgYnkgc3dhcHBpbmcgaXQgd2l0aAphbiBlbXB0eSBvbmU6PC9wPgo8cHJlPiAgc3RkOjp2ZWN0b3ImbHQ7U29tZVR5cGUmZ3Q7IHZlYzsKICAvLyBmaWxsIHZlYyB3aXRoIGRhdGEKICBzdGQ6OnZlY3RvciZsdDtTb21lVHlwZSZndDsoKS5zd2FwKHZlYyk7CiAgLy8gdmVjIGlzIG5vdyBlbXB0eSwgd2l0aCBtaW5pbWFsIGNhcGFjaXR5CjwvcHJlPgoKPHA+SG93ZXZlciwgdGhlIHdvcmRpbmcgb2YgMjMuMi42LjIgW3ZlY3Rvci5jYXBhY2l0eV1wYXJhZ3JhcGggNSBwcmV2ZW50cwp0aGUgY2FwYWNpdHkgb2YgYSB2ZWN0b3IgYmVpbmcgcmVkdWNlZCwgZm9sbG93aW5nIGEgY2FsbCB0bwpyZXNlcnZlKCkuIFRoaXMgaW52YWxpZGF0ZXMgdGhlIGlkaW9tLCBhcyBzd2FwKCkgaXMgdGh1cyBwcmV2ZW50ZWQKZnJvbSByZWR1Y2luZyB0aGUgY2FwYWNpdHkuIFRoZSBwcm9wb3NlZCB3b3JkaW5nIGZvciBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzI5Ij4zMjk8L2E+IGRvZXMgbm90IGFmZmVjdCB0aGlzLiAgQ29uc2VxdWVudGx5LCB0aGUgZXhhbXBsZSBhYm92ZQpyZXF1aXJlcyB0aGUgdGVtcG9yYXJ5IHRvIGJlIGV4cGFuZGVkIHRvIGNhdGVyIGZvciB0aGUgY29udGVudHMgb2YKdmVjLCBhbmQgdGhlIGNvbnRlbnRzIGJlIGNvcGllZCBhY3Jvc3MuIFRoaXMgaXMgYSBsaW5lYXItdGltZQpvcGVyYXRpb24uPC9wPgoKPHA+SG93ZXZlciwgdGhlIGNvbnRhaW5lciByZXF1aXJlbWVudHMgc3RhdGUgdGhhdCBzd2FwIG11c3QgaGF2ZSBjb25zdGFudApjb21wbGV4aXR5ICgyMy4xIFtjb250YWluZXIucmVxdWlyZW1lbnRzXSBub3RlIHRvIHRhYmxlIDY1KS48L3A+Cgo8cD5UaGlzIGlzIGFuIGltcG9ydGFudCBpc3N1ZSwgYXMgcmVhbGxvY2F0aW9uIGFmZmVjdHMgdGhlIHZhbGlkaXR5IG9mCnJlZmVyZW5jZXMgYW5kIGl0ZXJhdG9ycy48L3A+Cgo8cD5JZiB0aGUgd29yZGluZyBvZiAyMy4yLjQuMnA1IGlzIHRha2VuIHRvIGJlIHRoZSBkZXNpcmVkIGludGVudCwgdGhlbgpyZWZlcmVuY2VzIGFuZCBpdGVyYXRvcnMgcmVtYWluIHZhbGlkIGFmdGVyIGEgY2FsbCB0byBzd2FwLCBpZiB0aGV5IHJlZmVyIHRvCmFuIGVsZW1lbnQgYmVmb3JlIHRoZSBuZXcgZW5kKCkgb2YgdGhlIHZlY3RvciBpbnRvIHdoaWNoIHRoZXkgb3JpZ2luYWxseQpwb2ludGVkLCBpbiB3aGljaCBjYXNlIHRoZXkgcmVmZXIgdG8gdGhlIGVsZW1lbnQgYXQgdGhlIHNhbWUgaW5kZXggcG9zaXRpb24uCkl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyB0aGF0IHJlZmVycmVkIHRvIGFuIGVsZW1lbnQgd2hvc2UgaW5kZXggcG9zaXRpb24Kd2FzIGJleW9uZCB0aGUgbmV3IGVuZCBvZiB0aGUgdmVjdG9yIGFyZSBpbnZhbGlkYXRlZC48L3A+Cgo8cD5JZiB0aGUgbm90ZSB0byB0YWJsZSA2NSBpcyB0YWtlbiBhcyB0aGUgZGVzaXJlZCBpbnRlbnQsIHRoZW4gdGhlcmUgYXJlIHR3bwpwb3NzaWJpbGl0aWVzIHdpdGggcmVnYXJkIHRvIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlczo8L3A+Cgo8b2w+CjxsaT5BbGwgSXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzIGludG8gYm90aCB2ZWN0b3JzIGFyZSBpbnZhbGlkYXRlZC48L2xpPgo8bGk+SXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzIGludG8gZWl0aGVyIHZlY3RvciByZW1haW4gdmFsaWQsIGFuZCByZW1haW4KcG9pbnRpbmcgdG8gdGhlIHNhbWUgZWxlbWVudC4gQ29uc2VxdWVudGx5IGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyB0aGF0CnJlZmVycmVkIHRvIG9uZSB2ZWN0b3Igbm93IHJlZmVyIHRvIHRoZSBvdGhlciwgYW5kIHZpY2UtdmVyc2EuPC9saT4KPC9vbD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBhIG5ldyBwYXJhZ3JhcGggYWZ0ZXIgMjMuMi42LjIgW3ZlY3Rvci5jYXBhY2l0eV0gcGFyYWdyYXBoIDU6PC9wPgo8YmxvY2txdW90ZT4KPHByZT4gIHZvaWQgc3dhcCh2ZWN0b3ImbHQ7VCxBbGxvY2F0b3ImZ3Q7JmFtcDsgeCk7CjwvcHJlPgo8cD48Yj5FZmZlY3RzOjwvYj4gRXhjaGFuZ2VzIHRoZSBjb250ZW50cyBhbmQgY2FwYWNpdHkoKSBvZiA8dHQ+KnRoaXM8L3R0Pgp3aXRoIHRoYXQgb2YgPHR0Png8L3R0Pi48L3A+CjxwPjxiPkNvbXBsZXhpdHk6PC9iPiBDb25zdGFudCB0aW1lLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1RoaXMgc29sdmVzIHRoZSBwcm9ibGVtIHJlcG9ydGVkIGZvciB0aGlzIGlzc3VlLiAgV2UgbWF5IGFsc28KaGF2ZSBhIHByb2JsZW0gd2l0aCBhIGNpcmN1bGFyIGRlZmluaXRpb24gb2Ygc3dhcCgpIGZvciBvdGhlcgpjb250YWluZXJzLl08L2k+PC9wPgoKCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpzd2FwIHNob3VsZCBiZSBjb25zdGFudCB0aW1lLiAgVGhlIGNsZWFyIGludGVudCBpcyB0aGF0IGl0IHNob3VsZCBqdXN0CmRvIHBvaW50ZXIgdHdpZGRsaW5nLCBhbmQgdGhhdCBpdCBzaG91bGQgZXhjaGFuZ2UgYWxsIHByb3BlcnRpZXMgb2YKdGhlIHR3byB2ZWN0b3JzLCBpbmNsdWRpbmcgdGhlaXIgcmVhbGxvY2F0aW9uIGd1YXJhbnRlZXMuCjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzNDUiPjwvYT4zNDUuIHR5cGUgdG0gaW4gJmx0O2N3Y2hhciZndDs8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjEuNSBbYy5zdHJpbmdzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBDbGFyayBOZWxzb24gPGI+RGF0ZTo8L2I+IDIwMDEtMTAtMTk8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2Muc3RyaW5ncyI+aXNzdWVzPC9hPiBpbiBbYy5zdHJpbmdzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+Qzk5LCBhbmQgcHJlc3VtYWJseSBhbWVuZG1lbnQgMSB0byBDOTAsIHNwZWNpZnkgdGhhdCAmbHQ7d2NoYXIuaCZndDsKZGVjbGFyZXMgc3RydWN0IHRtIGFzIGFuIGluY29tcGxldGUgdHlwZS4gSG93ZXZlciwgdGFibGUgNDggaW4gMjEuNQpbYy5zdHJpbmdzXSBkb2VzIG5vdCBtZW50aW9uIHRoZSB0eXBlIHRtIGFzIGJlaW5nIGRlY2xhcmVkIGluCiZsdDtjd2NoYXImZ3Q7LiBJcyB0aGlzIG9taXNzaW9uIGludGVudGlvbmFsIG9yIGFjY2lkZW50YWw/CjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIHNlY3Rpb24gMjEuNSBbYy5zdHJpbmdzXSwgYWRkICJ0bSIgdG8gdGFibGUgNDguPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM0NiI+PC9hPjM0Ni4gU29tZSBpdGVyYXRvciBtZW1iZXIgZnVuY3Rpb25zIHNob3VsZCBiZSBjb25zdDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNC4xIFtpdGVyYXRvci5yZXF1aXJlbWVudHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEplcmVteSBTaWVrIDxiPkRhdGU6PC9iPiAyMDAxLTEwLTIwPC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjaXRlcmF0b3IucmVxdWlyZW1lbnRzIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbaXRlcmF0b3IucmVxdWlyZW1lbnRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2l0ZXJhdG9yLnJlcXVpcmVtZW50cyI+aXNzdWVzPC9hPiBpbiBbaXRlcmF0b3IucmVxdWlyZW1lbnRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SXRlcmF0b3IgbWVtYmVyIGZ1bmN0aW9ucyBhbmQgb3BlcmF0b3JzIHRoYXQgZG8gbm90IGNoYW5nZSB0aGUgc3RhdGUKb2YgdGhlIGl0ZXJhdG9yIHNob3VsZCBiZSBkZWZpbmVkIGFzIGNvbnN0IG1lbWJlciBmdW5jdGlvbnMgb3IgYXMKZnVuY3Rpb25zIHRoYXQgdGFrZSBpdGVyYXRvcnMgZWl0aGVyIGJ5IGNvbnN0IHJlZmVyZW5jZSBvciBieQp2YWx1ZS4gVGhlIHN0YW5kYXJkIGRvZXMgbm90IGV4cGxpY2l0bHkgc3RhdGUgd2hpY2ggZnVuY3Rpb25zIHNob3VsZApiZSBjb25zdC4gIFNpbmNlIHRoaXMgYSBmYWlybHkgY29tbW9uIG1pc3Rha2UsIHRoZSBmb2xsb3dpbmcgY2hhbmdlcwphcmUgc3VnZ2VzdGVkIHRvIG1ha2UgdGhpcyBleHBsaWNpdC48L3A+Cgo8cD5UaGUgdGFibGVzIGFsbW9zdCBpbmRpY2F0ZSBjb25zdG5lc3MgcHJvcGVybHkgdGhyb3VnaCBuYW1pbmc6IHIKZm9yIG5vbi1jb25zdCBhbmQgYSxiIGZvciBjb25zdCBpdGVyYXRvcnMuIFRoZSBmb2xsb3dpbmcgY2hhbmdlcwptYWtlIHRoaXMgbW9yZSBleHBsaWNpdCBhbmQgYWxzbyBmaXggYSBjb3VwbGUgcHJvYmxlbXMuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjQuMSBbaXRlcmF0b3IucmVxdWlyZW1lbnRzXSBDaGFuZ2UgdGhlIGZpcnN0IHNlY3Rpb24gb2YgcDkgZnJvbQoiSW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucywgYSBhbmQgYiBkZW5vdGUgdmFsdWVzIG9mIFguLi4iIHRvCiJJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLCBhIGFuZCBiIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBjb25zdCBYLi4uIi48L3A+Cgo8cD5JbiBUYWJsZSA3MywgY2hhbmdlPC9wPgo8cHJlPiAgICBhLSZndDttICAgVSZhbXA7ICAgICAgICAgLi4uCjwvcHJlPgoKPHA+dG88L3A+Cgo8cHJlPiAgICBhLSZndDttICAgY29uc3QgVSZhbXA7ICAgLi4uCiAgICByLSZndDttICAgVSZhbXA7ICAgICAgICAgLi4uCjwvcHJlPgoKPHA+SW4gVGFibGUgNzMgZXhwcmVzc2lvbiBjb2x1bW4sIGNoYW5nZTwvcD4KCjxwcmU+ICAgICphID0gdAo8L3ByZT4KCjxwPnRvPC9wPgoKPHByZT4gICAgKnIgPSB0CjwvcHJlPgoKPHA+PGk+W1JlZG1vbmQ6IFRoZSBjb250YWluZXIgcmVxdWlyZW1lbnRzIHNob3VsZCBiZSByZXZpZXdlZCB0byBzZWUgaWYKdGhlIHNhbWUgcHJvYmxlbSBhcHBlYXJzIHRoZXJlLl08L2k+PC9wPgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzQ3Ij48L2E+MzQ3LiBsb2NhbGU6OmNhdGVnb3J5IGFuZCBiaXRtYXNrIHJlcXVpcmVtZW50czwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4xLjEuMS4xIFtsb2NhbGUuY2F0ZWdvcnldIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFAuSi4gUGxhdWdlciwgTmF0aGFuIE15ZXJzIDxiPkRhdGU6PC9iPiAyMDAxLTEwLTIzPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsb2NhbGUuY2F0ZWdvcnkiPmlzc3VlczwvYT4gaW4gW2xvY2FsZS5jYXRlZ29yeV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJbiAyMi4xLjEuMS4xIFtsb2NhbGUuY2F0ZWdvcnldIHBhcmFncmFwaCAxLCB0aGUgY2F0ZWdvcnkgbWVtYmVycwphcmUgZGVzY3JpYmVkIGFzIGJpdG1hc2sgZWxlbWVudHMuICBJbiBmYWN0LCB0aGUgYml0bWFzayByZXF1aXJlbWVudHMKaW4gMTcuMy4yLjEuMiBbYml0bWFzay50eXBlc10gZG9uJ3Qgc2VlbSBxdWl0ZSByaWdodDogPHR0Pm5vbmU8L3R0PgphbmQgPHR0PmFsbDwvdHQ+IGFyZSBiaXRtYXNrIGNvbnN0YW50cywgbm90IGJpdG1hc2sgZWxlbWVudHMuPC9wPgoKPHA+SW4gcGFydGljdWxhciwgdGhlIHJlcXVpcmVtZW50cyBmb3IgPHR0Pm5vbmU8L3R0PiBpbnRlcmFjdCBwb29ybHkKd2l0aCB0aGUgcmVxdWlyZW1lbnQgdGhhdCB0aGUgTENfKiBjb25zdGFudHMgZnJvbSB0aGUgQyBsaWJyYXJ5IG11c3QKYmUgcmVjb2duaXphYmxlIGFzIEMrKyBsb2NhbGUgY2F0ZWdvcnkgY29uc3RhbnRzLiAgTENfKiB2YWx1ZXMgc2hvdWxkCm5vdCBiZSBtaXhlZCB3aXRoIHRoZXNlIHZhbHVlcyB0byBtYWtlIGNhdGVnb3J5IHZhbHVlcy48L3A+Cgo8cD5XZSBoYXZlIHR3byBvcHRpb25zIGZvciB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbi4gIEluZm9ybWFsbHk6Cm9wdGlvbiAxIHJlbW92ZXMgdGhlIHJlcXVpcmVtZW50IHRoYXQgTENfKiB2YWx1ZXMgYmUgcmVjb2duaXplZCBhcwpjYXRlZ29yeSBhcmd1bWVudHMuICBPcHRpb24gMiBjaGFuZ2VzIHRoZSBjYXRlZ29yeSB0eXBlIHNvIHRoYXQgdGhpcwpyZXF1aXJlbWVudCBpcyBpbXBsZW1lbnRhYmxlLCBieSBhbGxvd2luZyA8dHQ+bm9uZTwvdHQ+IHRvIGJlIHNvbWUKdmFsdWUgc3VjaCBhcyAweDEwMDAgaW5zdGVhZCBvZiAwLjwvcD4KCjxwPk5hdGhhbiB3cml0ZXM6ICJJIGJlbGlldmUgbXkgcHJvcG9zZWQgcmVzb2x1dGlvbiBbT3B0aW9uIDJdIG1lcmVseQpyZS1leHByZXNzZXMgdGhlIHN0YXR1cyBxdW8gbW9yZSBjbGVhcmx5LCB3aXRob3V0IGludHJvZHVjaW5nIGFueQpjaGFuZ2VzIGJleW9uZCByZXNvbHZpbmcgdGhlIERSLjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIHRoZSBmaXJzdCB0d28gcGFyYWdyYXBocyBvZiAyMi4xLjEuMSBbbG9jYWxlLnR5cGVzXSB3aXRoOjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+ICAgIHR5cGVkZWYgaW50IGNhdGVnb3J5Owo8L3ByZT4KCjxwPlZhbGlkIGNhdGVnb3J5IHZhbHVlcyBpbmNsdWRlIHRoZSA8dHQ+bG9jYWxlPC90dD4gbWVtYmVyIGJpdG1hc2sKZWxlbWVudHMgPHR0PmNvbGxhdGU8L3R0PiwgPHR0PmN0eXBlPC90dD4sIDx0dD5tb25ldGFyeTwvdHQ+LAo8dHQ+bnVtZXJpYzwvdHQ+LCA8dHQ+dGltZTwvdHQ+LCBhbmQgPHR0Pm1lc3NhZ2VzPC90dD4sIGVhY2ggb2Ygd2hpY2gKcmVwcmVzZW50cyBhIHNpbmdsZSBsb2NhbGUgY2F0ZWdvcnkuIEluIGFkZGl0aW9uLCA8dHQ+bG9jYWxlPC90dD4gbWVtYmVyCmJpdG1hc2sgY29uc3RhbnQgPHR0Pm5vbmU8L3R0PiBpcyBkZWZpbmVkIGFzIHplcm8gYW5kIHJlcHJlc2VudHMgbm8KY2F0ZWdvcnkuIEFuZCBsb2NhbGUgbWVtYmVyIGJpdG1hc2sgY29uc3RhbnQgPHR0PmFsbDwvdHQ+IGlzIGRlZmluZWQgc3VjaCB0aGF0CnRoZSBleHByZXNzaW9uPC9wPgo8cHJlPiAgICAoY29sbGF0ZSB8IGN0eXBlIHwgbW9uZXRhcnkgfCBudW1lcmljIHwgdGltZSB8IG1lc3NhZ2VzIHwgYWxsKSA9PSBhbGwKPC9wcmU+CjxwPgppcyA8dHQ+dHJ1ZTwvdHQ+LCBhbmQgcmVwcmVzZW50cyB0aGUgdW5pb24gb2YgYWxsIGNhdGVnb3JpZXMuICBGdXJ0aGVyCnRoZSBleHByZXNzaW9uIDx0dD4oWCB8IFkpPC90dD4sIHdoZXJlIDx0dD5YPC90dD4gYW5kIDx0dD5ZPC90dD4gZWFjaApyZXByZXNlbnQgYSBzaW5nbGUgY2F0ZWdvcnksIHJlcHJlc2VudHMgdGhlIHVuaW9uIG9mIHRoZSB0d28KY2F0ZWdvcmllcy4KPC9wPgoKPHA+Cjx0dD5sb2NhbGU8L3R0PiBtZW1iZXIgZnVuY3Rpb25zIGV4cGVjdGluZyBhIDx0dD5jYXRlZ29yeTwvdHQ+CmFyZ3VtZW50IHJlcXVpcmUgb25lIG9mIHRoZSA8dHQ+Y2F0ZWdvcnk8L3R0PiB2YWx1ZXMgZGVmaW5lZCBhYm92ZSwgb3IKdGhlIHVuaW9uIG9mIHR3byBvciBtb3JlIHN1Y2ggdmFsdWVzLiBTdWNoIGEgPHR0PmNhdGVnb3J5PC90dD4KYXJndW1lbnQgaWRlbnRpZmllcyBhIHNldCBvZiBsb2NhbGUgY2F0ZWdvcmllcy4gRWFjaCBsb2NhbGUgY2F0ZWdvcnksCmluIHR1cm4sIGlkZW50aWZpZXMgYSBzZXQgb2YgbG9jYWxlIGZhY2V0cywgaW5jbHVkaW5nIGF0IGxlYXN0IHRob3NlCnNob3duIGluIFRhYmxlIDUxOgo8L3A+CjwvYmxvY2txdW90ZT4KPHA+PGk+W0N1cmHnYW86IG5lZWQgaW5wdXQgZnJvbSBsb2NhbGUgZXhwZXJ0cy5dPC9pPjwvcD4KCgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgoKPHA+VGhlIExXRyBjb25zaWRlcmVkLCBhbmQgcmVqZWN0ZWQsIGFuIGFsdGVybmF0ZSBwcm9wb3NhbCAoZGVzY3JpYmVkCiAgYXMgIk9wdGlvbiAyIiBpbiB0aGUgZGlzY3Vzc2lvbikuICBUaGUgbWFpbiByZWFzb24gZm9yIHJlamVjdGluZyBpdAogIHdhcyB0aGF0IGxpYnJhcnkgaW1wbGVtZW50b3JzIHdlcmUgY29uY2VyZW5lZCBhYm91dCBpbXBsZW1lbnRhdGlvbgogIGRpZmZpY3VsdCwgZ2l2ZW4gdGhhdCBnZXR0aW5nIGEgQysrIGxpYnJhcnkgdG8gd29yayBzbW9vdGhseSB3aXRoIGEKICBzZXBhcmF0ZWx5IHdyaXR0ZW4gQyBsaWJyYXJ5IGlzIGFscmVhZHkgYSBkZWxpY2F0ZSBidXNpbmVzcy4gIFNvbWUKICBsaWJyYXJ5IGltcGxlbWVudGVycyB3ZXJlIGFsc28gY29uY2VybmVkIGFib3V0IHRoZSBpc3N1ZSBvZiBhZGRpbmcKICBleHRyYSBsb2NhbGUgY2F0ZWdvcmllcy48L3A+Cgo8YmxvY2txdW90ZT4KPHA+PGI+T3B0aW9uIDI6PC9iPiA8YnI+ClJlcGxhY2UgdGhlIGZpcnN0IHBhcmFncmFwaCBvZiAyMi4xLjEuMSBbbG9jYWxlLnR5cGVzXSB3aXRoOjwvcD4KPGJsb2NrcXVvdGU+CjxwPgpWYWxpZCBjYXRlZ29yeSB2YWx1ZXMgaW5jbHVkZSB0aGUgZW51bWVyYXRlZCB2YWx1ZXMuICBJbiBhZGRpdGlvbiwgdGhlCnJlc3VsdCBvZiBhcHBseWluZyBjb21tdXRhdGl2ZSBvcGVyYXRvcnMgfCBhbmQgJmFtcDsgdG8gYW55IHR3byB2YWxpZCAKdmFsdWVzIGlzIHZhbGlkLCBhbmQgcmVzdWx0cyBpbiB0aGUgc2V0d2lzZSB1bmlvbiBhbmQgaW50ZXJzZWN0aW9uLCAKcmVzcGVjdGl2ZWx5LCBvZiB0aGUgYXJndW1lbnQgY2F0ZWdvcmllcy4gIFRoZSB2YWx1ZXMgPHR0PmFsbDwvdHQ+IGFuZCAKPHR0Pm5vbmU8L3R0PiBhcmUgZGVmaW5lZCBzdWNoIHRoYXQgZm9yIGFueSB2YWxpZCB2YWx1ZSA8dHQ+Y2F0PC90dD4sIHRoZQpleHByZXNzaW9ucyA8dHQ+KGNhdCB8IGFsbCA9PSBhbGwpPC90dD4sIDx0dD4oY2F0ICZhbXA7IGFsbCA9PSBjYXQpPC90dD4sCjx0dD4oY2F0IHwgbm9uZSA9PSBjYXQpPC90dD4gYW5kIDx0dD4oY2F0ICZhbXA7IG5vbmUgPT0gbm9uZSk8L3R0PiBhcmUgCnRydWUuICBGb3Igbm9uLWVxdWFsIHZhbHVlcyA8dHQ+Y2F0MTwvdHQ+IGFuZCA8dHQ+Y2F0MjwvdHQ+IG9mIHRoZQpyZW1haW5pbmcgZW51bWVyYXRlZCB2YWx1ZXMsIDx0dD4oY2F0MSAmYW1wOyBjYXQyID09IG5vbmUpPC90dD4gaXMgdHJ1ZS4KRm9yIGFueSB2YWxpZCBjYXRlZ29yaWVzIDx0dD5jYXQxPC90dD4gYW5kIDx0dD5jYXQyPC90dD4sIHRoZSByZXN1bHQKb2YgPHR0PihjYXQxICZhbXA7IH5jYXQyKTwvdHQ+IGlzIHZhbGlkLCBhbmQgZXF1YWxzIHRoZSBzZXR3aXNlIHVuaW9uIG9mIAp0aG9zZSBjYXRlZ29yaWVzIGZvdW5kIGluIDx0dD5jYXQxPC90dD4gYnV0IG5vdCBmb3VuZCBpbiA8dHQ+Y2F0MjwvdHQ+LgpbRm9vdG5vdGU6IGl0IGlzIG5vdCByZXF1aXJlZCB0aGF0IDx0dD5hbGw8L3R0PiBlcXVhbCB0aGUgc2V0d2lzZSB1bmlvbgpvZiB0aGUgb3RoZXIgZW51bWVyYXRlZCB2YWx1ZXM7IGltcGxlbWVudGF0aW9ucyBtYXkgYWRkIGV4dHJhIGNhdGVnb3JpZXMuXQo8L3A+CjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM0OSI+PC9hPjM0OS4gTWlub3IgdHlwb2dyYXBoaWNhbCBlcnJvciBpbiBvc3RyZWFtX2l0ZXJhdG9yPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI0LjUuMiBbb3N0cmVhbS5pdGVyYXRvcl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQW5keSBTYXd5ZXIgPGI+RGF0ZTo8L2I+IDIwMDEtMTAtMjQ8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+MjQuNS4yIFtsaWIub3N0cmVhbS5pdGVyYXRvcl0gc3RhdGVzOjwvcD4KPHByZT4gICAgWy4uLl0KCiAgICBwcml2YXRlOgogICAgLy8gYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7KiBvdXRfc3RyZWFtOyBleHBvc2l0aW9uIG9ubHkKICAgIC8vIGNvbnN0IGNoYXIqIGRlbGltOyBleHBvc2l0aW9uIG9ubHkKPC9wcmU+Cgo8cD5XaGlsc3QgaXQncyBjbGVhcmx5IG1hcmtlZCAiZXhwb3NpdGlvbiBvbmx5IiwgSSBzdXNwZWN0ICdkZWxpbScKc2hvdWxkIGJlIG9mIHR5cGUgJ2NvbnN0IGNoYXJUKicuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDI0LjUuMiBbb3N0cmVhbS5pdGVyYXRvcl0sIHJlcGxhY2UgPHR0PmNvbnN0IGNoYXIqIGRlbGltPC90dD4gd2l0aAo8dHQ+Y29uc3QgY2hhclQqIGRlbGltPC90dD4uCjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzNTIiPjwvYT4zNTIuIG1pc3NpbmcgZnBvcyByZXF1aXJlbWVudHM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjEuMS4yIFtjaGFyLnRyYWl0cy50eXBlZGVmc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAxLTEyLTAyPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgo8aT4oMSk8L2k+ClRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgb24gdGhlIDx0dD5zdGF0ZVQ8L3R0PiB0ZW1wbGF0ZSBwYXJhbWV0ZXIgb2YKPHR0PmZwb3M8L3R0PiBsaXN0ZWQgaW4gMjcuNC4zLiBUaGUgaW50ZXJmYWNlIGFwcGVhcnMgdG8gcmVxdWlyZSB0aGF0CnRoZSB0eXBlIGJlIGF0IGxlYXN0IEFzc2lnbmFibGUgYW5kIENvcHlDb25zdHJ1Y3RpYmxlICgyNy40LjMuMSwgcDEpLAphbmQgSSB0aGluayBhbHNvIERlZmF1bHRDb25zdHJ1Y3RpYmxlICh0byBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbnMgaW4KVGFibGUgODgpLgo8L3A+CjxwPgoyMS4xLjIsIHAzLCBob3dldmVyLCBvbmx5IHJlcXVpcmVzIHRoYXQKPHR0PmNoYXJfdHJhaXRzJmx0O2NoYXJUJmd0Ozo6c3RhdGVfdHlwZTwvdHQ+IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZgpDb3B5Q29uc3RydWN0aWJsZSB0eXBlcy4KPC9wPgo8cD4KPGk+KDIpPC9pPgpBZGRpdGlvbmFsbHksIHRoZSA8dHQ+c3RhdGVUPC90dD4gdGVtcGxhdGUgYXJndW1lbnQgaGFzIG5vCmNvcnJlc3BvbmRpbmcgdHlwZWRlZiBpbiBmcG9zIHdoaWNoIG1pZ2h0IG1ha2UgaXQgZGlmZmljdWx0IHRvIHVzZSBpbgpnZW5lcmljIGNvZGUuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpNb2RpZnkgMjEuMS4yLCBwNCBmcm9tCjwvcD4KPHA+CiAgICBSZXF1aXJlczogPHR0PnN0YXRlX3R5cGU8L3R0PiBzaGFsbCBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YKICAgICAgICAgICAgICBDb3B5Q29uc3RydWN0aWJsZSB0eXBlcyAoMjAuMS4zKS4KPC9wPgo8cD4KICAgIFJlcXVpcmVzOiBzdGF0ZV90eXBlIHNoYWxsIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiBBc3NpZ25hYmxlCiAgICAgICAgICAgICAgKDIzLjEsIHA0KSwgQ29weUNvbnN0cnVjdGlibGUgKDIwLjEuMyksIGFuZAogICAgICAgICAgICAgIERlZmF1bHRDb25zdHJ1Y3RpYmxlICAoMjAuMS40KSB0eXBlcy4KPC9wPgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBmZWVscyB0aGlzIGlzIHR3byBpc3N1ZXMsIGFzIGluZGljYXRlZCBhYm92ZS4gVGhlIGZpcnN0IGlzCmEgZGVmZWN0LS0tc3RkOjpiYXNpY19mc3RyZWFtIGlzIHVuaW1wbGVtZW50YWJsZSB3aXRob3V0IHRoZXNlCmFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzLS0tYW5kIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGZpeGVzIGl0LiAgVGhlCnNlY29uZCBpcyBxdWVzdGlvbmFibGU7IHdobyB3b3VsZCB1c2UgdGhhdCB0eXBlZGVmPyAgVGhlIGNsYXNzCnRlbXBsYXRlIGZwb3MgaXMgdXNlZCBvbmx5IGluIGEgdmVyeSBmZXcgcGxhY2VzLCBhbGwgb2Ygd2hpY2gga25vdyB0aGUKc3RhdGUgdHlwZSBhbHJlYWR5LiAgVW5sZXNzIG1vdGl2YXRpb24gaXMgcHJvdmlkZWQsIHRoZSBzZWNvbmQgc2hvdWxkCmJlIGNvbnNpZGVyZWQgTkFELjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzNTQiPjwvYT4zNTQuIEFzc29jaWF0aXZlIGNvbnRhaW5lciBsb3dlci91cHBlciBib3VuZCByZXF1aXJlbWVudHM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMS40IFthc3NvY2lhdGl2ZS5yZXFtdHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEhhbnMgQWJlcmcgPGI+RGF0ZTo8L2I+IDIwMDEtMTItMTc8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2Fzc29jaWF0aXZlLnJlcW10cyI+aXNzdWVzPC9hPiBpbiBbYXNzb2NpYXRpdmUucmVxbXRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkRpc2N1c3Npb25zIGluIHRoZSB0aHJlYWQgIkFzc29jaWF0aXZlIGNvbnRhaW5lciBsb3dlci91cHBlciBib3VuZApyZXF1aXJlbWVudHMiIG9uIGNvbXAuc3RkLmMrKyBzdWdnZXN0cyB0aGF0IHRoZXJlIGlzIGEgZGVmZWN0IGluIHRoZQpDKysgc3RhbmRhcmQsIFRhYmxlIDY5IG9mIHNlY3Rpb24gMjMuMS4yLCAiQXNzb2NpYXRpdmUgY29udGFpbmVycyIsCltsaWIuYXNzb2NpYXRpdmUucmVxbXRzXS4gIEl0IGN1cnJlbnRseSBzYXlzOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KYS5maW5kKGspOiByZXR1cm5zIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIGFuIGVsZW1lbnQgd2l0aCB0aGUga2V5IGVxdWl2YWxlbnQgdG8Kaywgb3IgYS5lbmQoKSBpZiBzdWNoIGFuIGVsZW1lbnQgaXMgbm90IGZvdW5kLgo8L3A+Cgo8cD4KYS5sb3dlcl9ib3VuZChrKTogcmV0dXJucyBhbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCB3aXRoCmtleSBub3QgbGVzcyB0aGFuIGsuCjwvcD4KCjxwPgphLnVwcGVyX2JvdW5kKGspOiByZXR1cm5zIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IHdpdGgKa2V5IGdyZWF0ZXIgdGhhbiBrLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPgpXZSBoYXZlICJvciBhLmVuZCgpIGlmIHN1Y2ggYW4gZWxlbWVudCBpcyBub3QgZm91bmQiIGZvcgo8dHQ+ZmluZDwvdHQ+LCBidXQgbm90IGZvciA8dHQ+dXBwZXJfYm91bmQ8L3R0PiBvcgo8dHQ+bG93ZXJfYm91bmQ8L3R0Pi4gIEFzIHRoZSB0ZXh0IHN0YW5kcywgb25lIHdvdWxkIGJlIGZvcmNlZCB0bwppbnNlcnQgYSBuZXcgZWxlbWVudCBpbnRvIHRoZSBjb250YWluZXIgYW5kIHJldHVybiBhbiBpdGVyYXRvciB0byB0aGF0CmluIGNhc2UgdGhlIHNvdWdodCBpdGVyYXRvciBkb2VzIG5vdCBleGlzdCwgd2hpY2ggZG9lcyBub3Qgc2VlbSB0byBiZQp0aGUgaW50ZW50aW9uIChhbmQgbm90IHBvc3NpYmxlIHdpdGggdGhlICJjb25zdCIgdmVyc2lvbnMpLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+Q2hhbmdlIFRhYmxlIDY5IG9mIHNlY3Rpb24gMjMuMS40IFthc3NvY2lhdGl2ZS5yZXFtdHNdIGluZGljYXRlZCBlbnRyaWVzCnRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KYS5sb3dlcl9ib3VuZChrKTogcmV0dXJucyBhbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCB3aXRoCmtleSBub3QgbGVzcyB0aGFuIGssIG9yIGEuZW5kKCkgaWYgc3VjaCBhbiBlbGVtZW50IGlzIG5vdCBmb3VuZC4KPC9wPgoKPHA+CmEudXBwZXJfYm91bmQoayk6IHJldHVybnMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgd2l0aAprZXkgZ3JlYXRlciB0aGFuIGssIG9yIGEuZW5kKCkgaWYgc3VjaCBhbiBlbGVtZW50IGlzIG5vdCBmb3VuZC4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bQ3VyYedhbzogTFdHIHJldmlld2VkIFBSLl08L2k+PC9wPgoKCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM1NSI+PC9hPjM1NS4gT3BlcmF0aW9uYWwgc2VtYW50aWNzIGZvciBhLmJhY2soKTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4xLjMgW3NlcXVlbmNlLnJlcW10c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gWWFyb3NsYXYgTWlyb25vdiA8Yj5EYXRlOjwvYj4gMjAwMi0wMS0yMzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjc2VxdWVuY2UucmVxbXRzIj5pc3N1ZXM8L2E+IGluIFtzZXF1ZW5jZS5yZXFtdHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgoKPHA+VGFibGUgNjggIk9wdGlvbmFsIFNlcXVlbmNlIE9wZXJhdGlvbnMiIGluIDIzLjEuMS8xMgpzcGVjaWZpZXMgb3BlcmF0aW9uYWwgc2VtYW50aWNzIGZvciAiYS5iYWNrKCkiIGFzCiIqLS1hLmVuZCgpIiwgd2hpY2ggbWF5IGJlIGlsbC1mb3JtZWQgPGk+W2JlY2F1c2UgY2FsbGluZwpvcGVyYXRvci0tIG9uIGEgdGVtcG9yYXJ5ICh0aGUgcmV0dXJuKSBvZiBhIGJ1aWx0LWluIHR5cGUgaXMKaWxsLWZvcm1lZF08L2k+LCBwcm92aWRlZCBhLmVuZCgpIHJldHVybnMgYSBzaW1wbGUgcG9pbnRlciBydmFsdWUKKHRoaXMgaXMgYWxtb3N0IGFsd2F5cyB0aGUgY2FzZSBmb3Igc3RkOjp2ZWN0b3I6OmVuZCgpLCBmb3IKZXhhbXBsZSkuIFRodXMsIHRoZSBzcGVjaWZpY2F0aW9uIGlzIG5vdCBvbmx5IGluY29ycmVjdCwgaXQKZGVtb25zdHJhdGVzIGEgZGFuZ2Vyb3VzIGNvbnN0cnVjdDogIi0tYS5lbmQoKSIgbWF5CnN1Y2Nlc3NmdWxseSBjb21waWxlIGFuZCBydW4gYXMgaW50ZW5kZWQsIGJ1dCBhZnRlciBjaGFuZ2luZyB0aGUgdHlwZQpvZiB0aGUgY29udGFpbmVyIG9yIHRoZSBtb2RlIG9mIGNvbXBpbGF0aW9uIGl0IG1heSBwcm9kdWNlCmNvbXBpbGUtdGltZSBlcnJvci4gPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgc3BlY2lmaWNhdGlvbiBpbiB0YWJsZSA2OCAiT3B0aW9uYWwgU2VxdWVuY2UKT3BlcmF0aW9ucyIgaW4gMjMuMS4xLzEyIGZvciAiYS5iYWNrKCkiIGZyb208L3A+CgoKPGJsb2NrcXVvdGU+PHByZT4qLS1hLmVuZCgpCjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+PHByZT4gIHsgaXRlcmF0b3IgdG1wID0gYS5lbmQoKTsgLS10bXA7IHJldHVybiAqdG1wOyB9CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPmFuZCB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgImEucG9wX2JhY2soKSIgZnJvbTwvcD4KCjxibG9ja3F1b3RlPjxwcmU+YS5lcmFzZSgtLWEuZW5kKCkpCjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+PHByZT4gIHsgaXRlcmF0b3IgdG1wID0gYS5lbmQoKTsgLS10bXA7IGEuZXJhc2UodG1wKTsgfQo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD48aT5bQ3VyYedhbzogTFdHIGNoYW5nZWQgUFIgZnJvbSAieyBYOjppdGVyYXRvciB0bXAgPQphLmVuZCgpOyByZXR1cm4gKi0tdG1wOyB9IiB0byAiKmEucmJlZ2luKCkiLCBhbmQgZnJvbQoieyBYOjppdGVyYXRvciB0bXAgPSBhLmVuZCgpOyBhLmVyYXNlKC0tdG1wKTsgfSIgdG8KImEuZXJhc2UocmJlZ2luKCkpIi5dPC9pPjwvcD4KCgo8cD48aT5bVGhlcmUgaXMgYSBzZWNvbmQgcG9zc2libGUgZGVmZWN0OyB0YWJsZSA2OCAiT3B0aW9uYWwKU2VxdWVuY2UgT3BlcmF0aW9ucyIgaW4gdGhlICJPcGVyYXRpb25hbCBTZW1hbnRpY3MiCmNvbHVtbiB1c2VzIG9wZXJhdGlvbnMgcHJlc2VudCBvbmx5IGluIHRoZSAiUmV2ZXJzaWJsZQpDb250YWluZXIiIHJlcXVpcmVtZW50cywgeWV0IHRoZXJlIGlzIG5vIHN0YXRlZCBkZXBlbmRlbmN5CmJldHdlZW4gdGhlc2Ugc2VwYXJhdGUgcmVxdWlyZW1lbnRzIHRhYmxlcy4gQXNrIGluIFNhbnRhIENydXogaWYgdGhlCkxXRyB3b3VsZCBsaWtlIGEgbmV3IGlzc3VlIG9wZW5lZC5dPC9pPjwvcD4KCgo8cD48aT5bU2FudGEgQ3J1ejogdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgZXZlbiB3b3JzZSB0aGFuIHdoYXQncyBpbgogIHRoZSBjdXJyZW50IHN0YW5kYXJkOiBlcmFzZSBpcyB1bmRlZmluZWQgZm9yIHJldmVyc2UgaXRlcmF0b3IuICBJZgogIHdlJ3JlIGdvaW5nIHRvIG1ha2UgdGhlIGNoYW5nZSwgd2UgbmVlZCB0byBkZWZpbmUgYSB0ZW1wb3JhcnkgYW5kCiAgdXNlIG9wZXJhdG9yLS0uICBBZGRpdGlvbmFsbHksIHdlIGRvbid0IGtub3cgaG93IHByZXZhbGVudCB0aGlzIGlzOgogIGRvIHdlIG5lZWQgdG8gbWFrZSB0aGlzIGNoYW5nZSBpbiBtb3JlIHRoYW4gb25lIHBsYWNlPyAgTWFydGluIGhhcwogIHZvbHVudGVlcmVkIHRvIHJldmlldyB0aGUgc3RhbmRhcmQgYW5kIHNlZSBpZiB0aGlzIHByb2JsZW0gb2NjdXJzCiAgZWxzZXdoZXJlLl08L2k+PC9wPgoKCjxwPjxpPltPeGZvcmQ6IE1hdHQgcHJvdmlkZWQgbmV3IHdvcmRpbmcgdG8gYWRkcmVzcyB0aGUgY29uY2VybnMgcmFpc2VkCiAgaW4gU2FudGEgQ3J1ei4gIEl0IGRvZXMgbm90IGFwcGVhciB0aGF0IHRoaXMgcHJvYmxlbSBhcHBlYXJzCiAgYW55d2hlcmUgZWxzZSBpbiBjbGF1c2VzIDIzIG9yIDI0Ll08L2k+PC9wPgoKCjxwPjxpPltLb25hOiBJbiBkZWZpbml0aW9uIG9mIG9wZXJhdGlvbmFsIHNlbWFudGljcyBvZiBiYWNrKCksIGNoYW5nZQoiKnRtcCIgdG8gInJldHVybiAqdG1wOyJdPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM1OCI+PC9hPjM1OC4gaW50ZXJwcmV0aW5nIDx0dD50aG91c2FuZHNfc2VwPC90dD4gYWZ0ZXIgYSA8dHQ+ZGVjaW1hbF9wb2ludDwvdHQ+PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMi4xLjIgW2ZhY2V0Lm51bS5nZXQudmlydHVhbHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwMi0wMy0xMjwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI2ZhY2V0Lm51bS5nZXQudmlydHVhbHMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtmYWNldC5udW0uZ2V0LnZpcnR1YWxzXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2ZhY2V0Lm51bS5nZXQudmlydHVhbHMiPmlzc3VlczwvYT4gaW4gW2ZhY2V0Lm51bS5nZXQudmlydHVhbHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSSBkb24ndCB0aGluayA8dHQ+dGhvdXNhbmRzX3NlcDwvdHQ+IGlzIGJlaW5nIHRyZWF0ZWQgY29ycmVjdGx5IGFmdGVyCmRlY2ltYWxfcG9pbnQgaGFzIGJlZW4gc2Vlbi4gU2luY2UgZ3JvdXBpbmcgYXBwbGllcyBvbmx5IHRvIHRoZQppbnRlZ3JhbCBwYXJ0IG9mIHRoZSBudW1iZXIsIHRoZSBmaXJzdCBzdWNoIG9jY3VycmVuY2Ugc2hvdWxkLCBJTU8sCnRlcm1pbmF0ZSBTdGFnZSAyLiAoSWYgaXQgZG9lcyBub3QgdGVybWluYXRlIGl0LCB0aGVuIDIyLjIuMi4xLjIsIHAxMgphbmQgMjIuMi4zLjEuMiwgcDMgbmVlZCB0byBleHBsYWluIGhvdyA8dHQ+dGhvdXNhbmRzX3NlcDwvdHQ+IGlzIHRvIGJlCmludGVycHJldGVkIGluIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgYSBudW1iZXIuKQo8L3A+Cgo8cD4KVGhlIGVhc2llc3QgY2hhbmdlIEkgY2FuIHRoaW5rIG9mIHRoYXQgcmVzb2x2ZXMgdGhpcyBpc3N1ZSB3b3VsZCBiZQpzb21ldGhpbmcgbGlrZSBiZWxvdy4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgMjIuMi4yLjEuMiwgcDkgZnJvbQo8L3A+Cgo8YmxvY2txdW90ZT48cD4KICAgIElmIGRpc2NhcmQgaXMgdHJ1ZSB0aGVuIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGlzCiAgICByZW1lbWJlcmVkLCBidXQgdGhlIGNoYXJhY3RlciBpcyBvdGhlcndpc2UgaWdub3JlZC4gSWYgaXQgaXMgbm90CiAgICBkaXNjYXJkZWQsIHRoZW4gYSBjaGVjayBpcyBtYWRlIHRvIGRldGVybWluZSBpZiBjIGlzIGFsbG93ZWQgYXMKICAgIHRoZSBuZXh0IGNoYXJhY3RlciBvZiBhbiBpbnB1dCBmaWVsZCBvZiB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIKICAgIHJldHVybmVkIGJ5IHN0YWdlIDEuIElmIHNvIGl0IGlzIGFjY3VtdWxhdGVkLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+dG88L3A+Cgo8YmxvY2txdW90ZT48cD4KICAgIElmIDx0dD5kaXNjYXJkPC90dD4gaXMgdHJ1ZSwgdGhlbiBpZiA8dHQ+Jy4nPC90dD4gaGFzIG5vdCB5ZXQgYmVlbgogICAgYWNjdW11bGF0ZWQsIHRoZW4gdGhlIHBvc2l0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgaXMgcmVtZW1iZXJlZCwgYnV0CiAgICB0aGUgY2hhcmFjdGVyIGlzIG90aGVyd2lzZSBpZ25vcmVkLiBPdGhlcndpc2UsIGlmIDx0dD4nLic8L3R0PiBoYXMKICAgIGFscmVhZHkgYmVlbiBhY2N1bXVsYXRlZCwgdGhlIGNoYXJhY3RlciBpcyBkaXNjYXJkZWQgYW5kIFN0YWdlIDIKICAgICB0ZXJtaW5hdGVzLiAuLi4KPC9wPjwvYmxvY2txdW90ZT4KCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPldlIGJlbGlldmUgdGhpcyByZWZsZWN0cyB0aGUgaW50ZW50IG9mIHRoZSBTdGFuZGFyZC4gIFRob3VzYW5kcyBzZXAKICBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGFyZSBub3QgdXNlZnVsIGluIGFueSBsb2NhbGUuCiAgU29tZSBmb3JtYXR0aW5nIGNvbnZlbnRpb25zIGRvIGdyb3VwIGRpZ2l0cyB0aGF0IGZvbGxvdyB0aGUgZGVjaW1hbAogIHBvaW50LCBidXQgdGhleSB1c3VhbGx5IGludHJvZHVjZSBhIGRpZmZlcmVudCBncm91cGluZyBjaGFyYWN0ZXIKICBpbnN0ZWFkIG9mIHJldXNpbmcgdGhlIHRob3VzYW5kIHNlcCBjaGFyYWN0ZXIuICBJZiB3ZSB3YW50IHRvIGFkZAogIHN1cHBvcnQgZm9yIHN1Y2ggY29udmVudGlvbnMsIHdlIG5lZWQgdG8gZG8gc28gZXhwbGljaXRseS48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM1OSI+PC9hPjM1OS4gbnVtX3B1dCZsdDsmZ3Q7Ojpkb19wdXQgKC4uLiwgYm9vbCkgdW5kb2N1bWVudGVkPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMi4yLjEgW2ZhY2V0Lm51bS5wdXQubWVtYmVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAyLTAzLTEyPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPjIyLjIuMi4yLjEsIHAxOjwvcD4KCiAgICA8cHJlPiAgICBpdGVyX3R5cGUgcHV0IChpdGVyX3R5cGUgb3V0LCBpb3NfYmFzZSZhbXA7IHN0ciwgY2hhcl90eXBlIGZpbGwsCiAgICAgICAgICAgICAgICAgICBib29sIHZhbCkgY29uc3Q7CiAgICAuLi4KCiAgICAxICAgUmV0dXJuczogZG9fcHV0IChvdXQsIHN0ciwgZmlsbCwgdmFsKS4KICAgIDwvcHJlPgoKPHA+QUZBSUNTLCB0aGUgYmVoYXZpb3Igb2YgZG9fcHV0ICguLi4sIGJvb2wpIGlzIG5vdCBkb2N1bWVudGVkIGFueXdoZXJlLApob3dldmVyLCAyMi4yLjIuMi4yLCBwMjM6PC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+aXRlcl90eXBlIHB1dCAoaXRlcl90eXBlIG91dCwgaW9zX2Jhc2UmYW1wOyBzdHIsIGNoYXJfdHlwZSBmaWxsLAogICAgICAgICAgICAgICBib29sIHZhbCkgY29uc3Q7CjwvcHJlPgoKCiAgICAgICAgPHA+RWZmZWN0czogSWYgKHN0ci5mbGFncygpICZhbXA7IGlvc19iYXNlOjpib29sYWxwaGEpID09IDAgdGhlbiBkbwogICAgICAgICAgICAgb3V0ID0gZG9fcHV0KG91dCwgc3RyLCBmaWxsLCAoaW50KXZhbCkKICAgICAgICAgICBPdGhlcndpc2UgZG88L3A+CjxwcmU+ICAgICAgICAgICAgIHN0cmluZ190eXBlIHMgPQogICAgICAgICAgICAgICAgIHZhbCA/IHVzZV9mYWNldCZsdDtjdHlwZSZsdDtjaGFyVCZndDsgJmd0Oyhsb2MpLnRydWVuYW1lKCkKICAgICAgICAgICAgICAgICAgICAgOiB1c2VfZmFjZXQmbHQ7Y3R5cGUmbHQ7Y2hhclQmZ3Q7ICZndDsobG9jKS5mYWxzZW5hbWUoKTsKPC9wcmU+CiAgICAgICAgICAgPHA+YW5kIHRoZW4gaW5zZXJ0IHRoZSBjaGFyYWN0ZXJzIG9mIHMgaW50byBvdXQuIDxpPm91dDwvaT4uPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhpcyBtZWFucyB0aGF0IHRoZSBib29sIG92ZXJsb2FkIG9mIDx0dD5kb19wdXQoKTwvdHQ+IHdpbGwgbmV2ZXIgYmUgY2FsbGVkLAp3aGljaCBjb250cmFkaWN0cyB0aGUgZmlyc3QgcGFyYWdyYXBoLiBQZXJoYXBzIHRoZSBkZWNsYXJhdGlvbgpzaG91bGQgcmVhZCA8dHQ+ZG9fcHV0KCk8L3R0PiwgYW5kIG5vdCA8dHQ+cHV0KCk8L3R0Pj8KPC9wPgoKPHA+Ck5vdGUgYWxzbyB0aGF0IHRoZXJlIGlzIG5vIDxiPlJldHVybnM8L2I+IGNsYXVzZSBmb3IgdGhpcyBmdW5jdGlvbiwgd2hpY2gKc2hvdWxkIHByb2JhYmx5IGJlIGNvcnJlY3RlZCwganVzdCBhcyBzaG91bGQgdGhlIHNlY29uZCBvY2N1cnJlbmNlCm9mIDxpPiJvdXQuIjwvaT4gaW4gdGhlIHRleHQuCjwvcD4KCjxwPgpJIHRoaW5rIHRoZSBsZWFzdCBpbnZhc2l2ZSBjaGFuZ2UgdG8gZml4IGl0IHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlCnRoZSBmb2xsb3dpbmc6CjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuMi4yLjIgW2ZhY2V0Lm51bS5wdXQudmlydHVhbHNdLCBqdXN0IGFib3ZlIHBhcmFncmFwaCAxLCByZW1vdmUKICB0aGUgPHR0PmJvb2w8L3R0PiBvdmVybG9hZC48L3A+Cgo8cD4KSW4gMjIuMi4yLjIuMiBbZmFjZXQubnVtLnB1dC52aXJ0dWFsc10sIHAyMywgbWFrZSB0aGUgZm9sbG93aW5nIGNoYW5nZXMKPC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgICAgUmVwbGFjZSA8dHQ+cHV0KCk8L3R0PiB3aXRoIDx0dD5kb19wdXQoKTwvdHQ+IGluIHRoZSBkZWNsYXJhdGlvbgogICAgIG9mIHRoZSBtZW1iZXIgZnVuY3Rpb24uCjwvcD48L2Jsb2NrcXVvdGU+Cgo8YmxvY2txdW90ZT48cD4KICAgIENoYW5nZSB0aGUgPGI+RWZmZWN0czwvYj4gY2xhdXNlIHRvIGEgPGI+UmV0dXJuczwvYj4gY2xhdXNlICh0bwogICAgYXZvaWQgdGhlIHJlcXVpcmVtZW50IHRvIGNhbGwgPHR0PmRvX3B1dCguLi4sIGludCk8L3R0PiBmcm9tIDx0dD4KICAgIGRvX3B1dCAoLi4uLCBib29sKSk8L3R0PgogICAgbGlrZSBzbzoKPC9wPjwvYmxvY2txdW90ZT4KCjxibG9ja3F1b3RlPjxwPgogICAgMjMgICA8Yj5SZXR1cm5zPC9iPjogSWYgPHR0PihzdHIuZmxhZ3MoKSAmYW1wOwogICAgICAgICBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwPC90dD4gdGhlbgogICAgICAgICA8dHQ+ZG9fcHV0IChvdXQsIHN0ciwgZmlsbCwgKGxvbmcpdmFsKTwvdHQ+CiAgICAgICAgIE90aGVyd2lzZSB0aGUgZnVuY3Rpb24gb2J0YWlucyBhIHN0cmluZyA8dHQ+czwvdHQ+IGFzIGlmIGJ5PC9wPgo8cHJlPiAgICAgICAgICAgICBzdHJpbmdfdHlwZSBzID0KICAgICAgICAgICAgICAgIHZhbCA/IHVzZV9mYWNldCZsdDtjdHlwZSZsdDtjaGFyVCZndDsgJmd0Oyhsb2MpLnRydWVuYW1lKCkKICAgICAgICAgICAgICAgICAgICA6IHVzZV9mYWNldCZsdDtjdHlwZSZsdDtjaGFyVCZndDsgJmd0Oyhsb2MpLmZhbHNlbmFtZSgpOwo8L3ByZT4KICAgICAgICAgPHA+YW5kIHRoZW4gaW5zZXJ0cyBlYWNoIGNoYXJhY3RlciA8dHQ+YzwvdHQ+IG9mIHMgaW50byBvdXQgdmlhCiAgICAgICAgICAgPHR0PipvdXQrKyA9IGM8L3R0PgogICAgICAgICBhbmQgcmV0dXJucyA8dHQ+b3V0PC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPjxwPgpUaGlzIGZpeGVzIGEgY291cGxlIG9mIG9idmlvdXMgdHlwb3MsIGFuZCBhbHNvIGZpeGVzIHdoYXQgYXBwZWFycyB0bwpiZSBhIHJlcXVpcmVtZW50IG9mIGdyYXR1aXRvdXMgaW5lZmZpY2llbmN5Lgo8L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzNjAiPjwvYT4zNjAuIGxvY2FsZSBtYW5kYXRlcyBpbmVmZmljaWVudCBpbXBsZW1lbnRhdGlvbjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4xLjEgW2xvY2FsZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAyLTAzLTEyPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsb2NhbGUiPmlzc3VlczwvYT4gaW4gW2xvY2FsZV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgoyMi4xLjEsIHA3IChjb3BpZWQgYmVsb3cpIGFsbG93cyBpb3N0cmVhbSBmb3JtYXR0ZXJzIGFuZCBleHRyYWN0b3JzCnRvIG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHZhbHVlcyByZXR1cm5lZCBmcm9tIGZhY2V0IG1lbWJlcnMuCkhvd2V2ZXIsIHN1Y2ggYXNzdW1wdGlvbnMgYXJlIGFwcGFyZW50bHkgbm90IGd1YXJhbnRlZWQgdG8gaG9sZAppbiBvdGhlciBjYXNlcyAoZS5nLiwgd2hlbiB0aGUgZmFjZXQgbWVtYmVycyBhcmUgYmVpbmcgY2FsbGVkIGRpcmVjdGx5CnJhdGhlciB0aGFuIGFzIGEgcmVzdWx0IG9mIGlvc3RyZWFtIGNhbGxzLCBvciBiZXR3ZWVuIHN1Y2Nlc3NpdmUKY2FsbHMgdG8gdGhlIHNhbWUgaW9zdHJlYW0gZnVuY3Rpb25zIHdpdGggbm8gaW50ZXJldmVuaW5nIGNhbGxzIHRvCjx0dD5pbWJ1ZSgpPC90dD4sIG9yIGV2ZW4gd2hlbiB0aGUgZmFjZXQgbWVtYmVyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkCmZyb20gb3RoZXIgbWVtYmVyIGZ1bmN0aW9ucyBvZiBvdGhlciBmYWNldHMpLiBUaGlzIHJlc3RyaWN0aW9uCnByZXZlbnRzIGxvY2FsZSBmcm9tIGJlaW5nIGltcGxlbWVudGVkIGVmZmljaWVudGx5Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIGZpcnN0IHNlbnRlbmNlIGluIDIyLjEuMSwgcDcgZnJvbTwvcD4KPGJsb2NrcXVvdGU+PHA+CiAgICBJbiBzdWNjZXNzaXZlIGNhbGxzIHRvIGEgbG9jYWxlIGZhY2V0IG1lbWJlciBmdW5jdGlvbiBkdXJpbmcKICAgIGEgY2FsbCB0byBhbiBpb3N0cmVhbSBpbnNlcnRlciBvciBleHRyYWN0b3Igb3IgYSBzdHJlYW1idWYgbWVtYmVyCiAgICBmdW5jdGlvbiwgdGhlIHJldHVybmVkIHJlc3VsdCBzaGFsbCBiZSBpZGVudGljYWwuIFtOb3RlOiBUaGlzCiAgICBpbXBsaWVzIHRoYXQgc3VjaCByZXN1bHRzIG1heSBzYWZlbHkgYmUgcmV1c2VkIHdpdGhvdXQgY2FsbGluZwogICAgdGhlIGxvY2FsZSBmYWNldCBtZW1iZXIgZnVuY3Rpb24gYWdhaW4sIGFuZCB0aGF0IG1lbWJlciBmdW5jdGlvbnMKICAgIG9mIGlvc3RyZWFtIGNsYXNzZXMgY2Fubm90IHNhZmVseSBjYWxsIDx0dD5pbWJ1ZSgpPC90dD4KICAgIHRoZW1zZWx2ZXMsIGV4Y2VwdCBhcyBzcGVjaWZpZWQgZWxzZXdoZXJlLiAtLWVuZCBub3RlXQo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+dG88L3A+Cgo8YmxvY2txdW90ZT48cD4KICAgIEluIHN1Y2Nlc3NpdmUgY2FsbHMgdG8gYSBsb2NhbGUgZmFjZXQgbWVtYmVyIGZ1bmN0aW9uIG9uIGEgZmFjZXQKICAgIG9iamVjdCBpbnN0YWxsZWQgaW4gdGhlIHNhbWUgbG9jYWxlLCB0aGUgcmV0dXJuZWQgcmVzdWx0IHNoYWxsIGJlCiAgICBpZGVudGljYWwuIC4uLgo8L3A+PC9ibG9ja3F1b3RlPgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhpcyBjaGFuZ2UgaXMgcmVhc29uYWJsZSBiZWN1YXNlIGl0IGNsYXJpZmllcyB0aGUgaW50ZW50IG9mIHRoaXMKICBwYXJ0IG9mIHRoZSBzdGFuZGFyZC48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzYyIj48L2E+MzYyLiBiaW5kMXN0L2JpbmQybmQgdHlwZSBzYWZldHk8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gRC44IFtkZXByLmxpYi5iaW5kZXJzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBBbmRyZXcgRGVta2luIDxiPkRhdGU6PC9iPiAyMDAyLTA0LTI2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNkZXByLmxpYi5iaW5kZXJzIj5pc3N1ZXM8L2E+IGluIFtkZXByLmxpYi5iaW5kZXJzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBkZWZpbml0aW9uIG9mIGJpbmQxc3QoKSAoRC44IFtkZXByLmxpYi5iaW5kZXJzXSkgY2FuIHJlc3VsdCBpbgp0aGUgY29uc3RydWN0aW9uIG9mIGFuIHVuc2FmZSBiaW5kaW5nIGJldHdlZW4gaW5jb21wYXRpYmxlIHBvaW50ZXIKdHlwZXMuIEZvciBleGFtcGxlLCBnaXZlbiBhIGZ1bmN0aW9uIHdob3NlIGZpcnN0IHBhcmFtZXRlciB0eXBlIGlzCidwb2ludGVyIHRvIFQnLCBpdCdzIHBvc3NpYmxlIHdpdGhvdXQgZXJyb3IgdG8gYmluZCBhbiBhcmd1bWVudCBvZgp0eXBlICdwb2ludGVyIHRvIFUnIHdoZW4gVSBkb2VzIG5vdCBkZXJpdmUgZnJvbSBUOgo8L3A+CjxwcmU+ICAgZm9vKFQqLCBpbnQpOwoKICAgc3RydWN0IFQge307CiAgIHN0cnVjdCBVIHt9OwoKICAgVSB1OwoKICAgaW50KiBwOwogICBpbnQqIHE7CgogICBmb3JfZWFjaChwLCBxLCBiaW5kMXN0KHB0cl9mdW4oZm9vKSwgJmFtcDt1KSk7ICAgIC8vIHVuc2FmZSBiaW5kaW5nCjwvcHJlPgoKPHA+ClRoZSBkZWZpbml0aW9uIG9mIGJpbmQxc3QoKSBpbmNsdWRlcyBhIGZ1bmN0aW9uYWwtc3R5bGUgY29udmVyc2lvbiB0bwptYXAgaXRzIGFyZ3VtZW50IHRvIHRoZSBleHBlY3RlZCBhcmd1bWVudCB0eXBlIG9mIHRoZSBib3VuZCBmdW5jdGlvbgooc2VlIGJlbG93KToKPC9wPgo8cHJlPiAgdHlwZW5hbWUgT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlKHgpCjwvcHJlPgoKPHA+QSBmdW5jdGlvbmFsLXN0eWxlIGNvbnZlcnNpb24gKEQuOCBbZGVwci5saWIuYmluZGVyc10pIGlzIGRlZmluZWQgdG8KYmUKc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG8gYW4gZXhwbGljaXQgY2FzdCBleHByZXNzaW9uIChELjgKW2RlcHIubGliLmJpbmRlcnNdKSwgd2hpY2ggbWF5IChhY2NvcmRpbmcgdG8gNS40LCBwYXJhZ3JhcGggNSkgYmUKaW50ZXJwcmV0ZWQKYXMgYSByZWludGVycHJldF9jYXN0LCB0aHVzIG1hc2tpbmcgdGhlIGVycm9yLgo8L3A+Cgo8cD5UaGUgcHJvYmxlbSBhbmQgcHJvcG9zZWQgY2hhbmdlIGFsc28gYXBwbHkgdG8gRC44IFtkZXByLmxpYi5iaW5kZXJzXS48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgdGhpcyBzZW50ZW5jZSB0byB0aGUgZW5kIG9mIEQuOCBbZGVwci5saWIuYmluZGVyc10vMToKICAiQmluZGVycyA8dHQ+YmluZDFzdDwvdHQ+IGFuZCA8dHQ+YmluZDJuZDwvdHQ+IGFyZSBkZXByZWNhdGVkIGluCiAgZmF2b3Igb2YgPHR0PnN0ZDo6dHIxOjpiaW5kPC90dD4uIjwvcD4KCjxwPihOb3RlcyB0byBlZGl0b3I6ICgxKSB3aGVuIGFuZCBpZiB0cjE6OmJpbmQgaXMgaW5jb3Jwb3JhdGVkIGludG8KICB0aGUgc3RhbmRhcmQsICJzdGQ6OnRyMTo6YmluZCIgc2hvdWxkIGJlIGNoYW5nZWQgdG8gInN0ZDo6YmluZCIuICgyKQogIDIwLjUuNiBzaG91bGQgcHJvYmFibHkgYmUgbW92ZWQgdG8gQW5uZXggRC48L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZXJlIGlzIG5vIHBvaW50IGluIGZpeGluZyBiaW5kMXN0IGFuZCBiaW5kMm5kLiAgdHIxOjpiaW5kIGlzIGEKICBzdXBlcmlvciBzb2x1dGlvbi4gIEl0IHNvbHZlcyB0aGlzIHByb2JsZW0gYW5kIG90aGVycy48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzYzIj48L2E+MzYzLiBNaXNzaW5nIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uIGluIDI3LjQuMi4xLjE8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNC4yLjEuMSBbaW9zOjpmYWlsdXJlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBXYWx0ZXIgQnJvd24gYW5kIE1hcmMgUGF0ZXJubyA8Yj5EYXRlOjwvYj4gMjAwMi0wNS0yMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaW9zOjpmYWlsdXJlIj5pc3N1ZXM8L2E+IGluIFtpb3M6OmZhaWx1cmVdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGRlc3RydWN0b3Igb2YgaW9zX2Jhc2U6OmZhaWx1cmUgc2hvdWxkIGhhdmUgYW4gZW1wdHkgdGhyb3cKc3BlY2lmaWNhdGlvbiwgYmVjYXVzZSB0aGUgZGVzdHJ1Y3RvciBvZiBpdHMgYmFzZSBjbGFzcywgZXhjZXB0aW9uLCBpcwpkZWNsYXJlZCBpbiB0aGlzIHdheS4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSBkZXN0cnVjdG9yIHRvPC9wPgo8cHJlPiAgdmlydHVhbCB+ZmFpbHVyZSgpIHRocm93KCk7CjwvcHJlPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5GaXhlcyBhbiBvYnZpb3VzIGdsaXRjaC4gIFRoaXMgaXMgYWxtb3N0IGVkaXRvcmlhbC48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzY0Ij48L2E+MzY0LiBJbmNvbnNpc3RlbnQgd29yZGluZyBpbiAyNy41LjIuNC4yPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjUuMi40LjIgW3N0cmVhbWJ1Zi52aXJ0LmJ1ZmZlcl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gV2FsdGVyIEJyb3duLCBNYXJjIFBhdGVybm8gPGI+RGF0ZTo8L2I+IDIwMDItMDUtMTA8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3N0cmVhbWJ1Zi52aXJ0LmJ1ZmZlciI+aXNzdWVzPC9hPiBpbiBbc3RyZWFtYnVmLnZpcnQuYnVmZmVyXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CjI3LjUuMi40LjIgW3N0cmVhbWJ1Zi52aXJ0LmJ1ZmZlcl0gcGFyYWdyYXBoIDEgaXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIEVmZmVjdHMKY2xhdXNlIGZvciBzZWVrb2ZmLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KTWFrZSB0aGlzIHBhcmFncmFwaCwgdGhlIEVmZmVjdHMgY2xhdXNlIGZvciBzZXRidWYsIGNvbnNpc3RlbnQgaW4gd29yZGluZwp3aXRoIHRoZSBFZmZlY3RzIGNsYXVzZSBmb3Igc2Vla29mZiBpbiBwYXJhZ3JhcGggMyBieSBhbWVuZGluZyBwYXJhZ3JhcGggMQp0byBpbmRpY2F0ZSB0aGUgcHVycG9zZSBvZiBzZXRidWY6CjwvcD4KCjxwPk9yaWdpbmFsIHRleHQ6PC9wPgoKPGJsb2NrcXVvdGU+PHA+CjEgRWZmZWN0czogUGVyZm9ybXMgYW4gb3BlcmF0aW9uIHRoYXQgaXMgZGVmaW5lZCBzZXBhcmF0ZWx5IGZvciBlYWNoCmNsYXNzIGRlcml2ZWQgZnJvbSBiYXNpY19zdHJlYW1idWYgaW4gdGhpcyBjbGF1c2UgKDI3LjcuMS4zLCAyNy44LjEuNCkuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD5Qcm9wb3NlZCB0ZXh0OjwvcD4KCjxibG9ja3F1b3RlPjxwPgoxIEVmZmVjdHM6IEluZmx1ZW5jZXMgc3RyZWFtIGJ1ZmZlcmluZyBpbiBhIHdheSB0aGF0IGlzIGRlZmluZWQgc2VwYXJhdGVseQpmb3IgZWFjaCBjbGFzcyBkZXJpdmVkIGZyb20gYmFzaWNfc3RyZWFtYnVmIGluIHRoaXMgY2xhdXNlCigyNy43LjEuMywgMjcuOC4xLjQpLgo8L3A+PC9ibG9ja3F1b3RlPgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBkb2Vzbid0IGJlbGlldmUgdGhlcmUgaXMgYW55IG5vcm1hdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4KICB0aGUgZXhpc3Rpbmcgd29yZGluZyBhbmQgd2hhdCdzIGluIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uLCBidXQgdGhlCiAgY2hhbmdlIG1heSBtYWtlIHRoZSBpbnRlbnQgY2xlYXJlci48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzY1Ij48L2E+MzY1LiBMYWNrIG9mIGNvbnN0LXF1YWxpZmljYXRpb24gaW4gY2xhdXNlIDI3PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3IFtpbnB1dC5vdXRwdXRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFdhbHRlciBCcm93biwgTWFyYyBQYXRlcm5vIDxiPkRhdGU6PC9iPiAyMDAyLTA1LTEwPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpbnB1dC5vdXRwdXQiPmlzc3VlczwvYT4gaW4gW2lucHV0Lm91dHB1dF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpTb21lIHN0cmVhbSBhbmQgc3RyZWFtYnVmIG1lbWJlciBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIG5vbi1jb25zdCwKZXZlbiB0aG91Z2h0IHRoZXkgYXBwZWFyIG9ubHkgdG8gcmVwb3J0IGluZm9ybWF0aW9uIHJhdGhlciB0aGFuIHRvCmNoYW5nZSBhbiBvYmplY3QncyBsb2dpY2FsIHN0YXRlLiAgVGhleSBzaG91bGQgYmUgZGVjbGFyZWQgY29uc3QuICBTZWUKZG9jdW1lbnQgTjEzNjAgZm9yIGRldGFpbHMgYW5kIHJhdGlvbmFsZS4KPC9wPgoKPHA+VGhlIGxpc3Qgb2YgbWVtYmVyIGZ1bmN0aW9ucyB1bmRlciBkaXNjdXNzaW9uOiA8dHQ+aW5fYXZhaWw8L3R0PiwKPHR0PnNob3dtYW55YzwvdHQ+LCA8dHQ+dGVsbGc8L3R0PiwgPHR0PnRlbGxwPC90dD4sIDx0dD5pc19vcGVuPC90dD4uPC9wPgoKPHA+UmVsYXRlZCBpc3N1ZTogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzMiPjczPC9hPjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy44LjEuNSwgMjcuOC4xLjcsIDI3LjguMS44LCAyNy44LjEuMTAsIDI3LjguMS4xMSwgYW5kIDI3LjguMS4xMzwvcD4KPHA+UmVwbGFjZTwvcD4KPHByZT4gIGJvb2wgaXNfb3BlbigpOwo8L3ByZT4KPHA+d2l0aDwvcD4KPHByZT4gIGJvb2wgaXNfb3BlbigpIGNvbnN0Owo8L3ByZT4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+T2YgdGhlIGNoYW5nZXMgcHJvcG9zZWQgaW4gTjEzNjAsIHRoZSBvbmx5IG9uZSB0aGF0IGlzIHNhZmUgaXMKY2hhbmdpbmcgdGhlIGZpbGVzdHJlYW1zJyBpc19vcGVuIHRvIGNvbnN0LiAgVGhlIExXRyBiZWxpZXZlZCB0aGF0CnRoaXMgd2FzIE5BRCB0aGUgZmlyc3QgdGltZSBpdCBjb25zaWRlcmVkIHRoaXMgaXNzdWUgKGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzczIj43MzwvYT4pLCBidXQgbm93IHRoaW5rcyBvdGhlcndpc2UuICBUaGUgY29ycmVzcG9uZGluZyBzdHJlYW1idWYKbWVtYmVyIGZ1bmN0aW9uLCBhZnRlciBhbGwsaXMgYWxyZWFkeSBjb25zdC48L3A+Cgo8cD5UaGUgb3RoZXIgcHJvcG9zZWQgY2hhbmdlcyBhcmUgbGVzcyBzYWZlLCBiZWNhdXNlIHNvbWUgc3RyZWFtYnVmCmZ1bmN0aW9ucyB0aGF0IGFwcGVhciBtZXJlbHkgdG8gcmVwb3J0IGEgdmFsdWUgZG8gYWN0dWFsbHkgcGVyZm9ybQptdXRhdGluZyBvcGVyYXRpb25zLiAgSXQncyBub3QgZXZlbiBjbGVhciB0aGF0IHRoZXkgc2hvdWxkIGJlCmNvbnNpZGVyZWQgImxvZ2ljYWxseSBjb25zdCIsIGJlY2F1c2Ugc3RyZWFtYnVmIGhhcyB0d28gaW50ZXJmYWNlcywgYQpwdWJsaWMgb25lIGFuZCBhIHByb3RlY3RlZCBvbmUuICBUaGVzZSBmdW5jdGlvbnMgbWF5LCBhbmQgb2Z0ZW4gZG8sCmNoYW5nZSB0aGUgc3RhdGUgYXMgZXhwb3NlZCBieSB0aGUgcHJvdGVjdGVkIGludGVyZmFjZSwgZXZlbiBpZiB0aGUKc3RhdGUgZXhwb3NlZCBieSB0aGUgcHVibGljIGludGVyZmFjZSBpcyB1bmNoYW5nZWQuPC9wPgoKPHA+Tm90ZSB0aGF0IGltcGxlbWVudGVycyBjYW4gbWFrZSB0aGlzIGNoYW5nZSBpbiBhIGJpbmFyeSBjb21wYXRpYmxlCndheSBieSBwcm92aWRpbmcgYm90aCBvdmVybG9hZHM7IHRoaXMgd291bGQgYmUgYSBjb25mb3JtaW5nIGV4dGVuc2lvbi48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM2OSI+PC9hPjM2OS4gaW8gc3RyZWFtIG9iamVjdHMgYW5kIHN0YXRpYyBjdG9yczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy4zIFtpb3N0cmVhbS5vYmplY3RzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBSdXNsYW4gQWJkaWtlZXYgPGI+RGF0ZTo8L2I+IDIwMDItMDctMDg8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lvc3RyZWFtLm9iamVjdHMiPmlzc3VlczwvYT4gaW4gW2lvc3RyZWFtLm9iamVjdHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSXMgaXQgc2FmZSB0byB1c2Ugc3RhbmRhcmQgaW9zdHJlYW0gb2JqZWN0cyBmcm9tIGNvbnN0cnVjdG9ycyBvZgpzdGF0aWMgb2JqZWN0cz8gIEFyZSBzdGFuZGFyZCBpb3N0cmVhbSBvYmplY3RzIGNvbnN0cnVjdGVkIGFuZCBhcmUKdGhlaXIgYXNzb2NpYXRpb25zIGVzdGFibGlzaGVkIGF0IHRoYXQgdGltZT8KPC9wPgoKPHA+U3VycGlzaW5nbHkgZW5vdWdoLCBTdGFuZGFyZCBkb2VzIE5PVCByZXF1aXJlIHRoYXQuPC9wPgoKPHA+CjI3LjMvMiBbbGliLmlvc3RyZWFtLm9iamVjdHNdIGd1YXJhbnRlZXMgdGhhdCBzdGFuZGFyZCBpb3N0cmVhbQpvYmplY3RzIGFyZSBjb25zdHJ1Y3RlZCBhbmQgdGhlaXIgYXNzb2NpYXRpb25zIGFyZSBlc3RhYmxpc2hlZCBiZWZvcmUKdGhlIGJvZHkgb2YgbWFpbigpIGJlZ2lucyBleGVjdXRpb24uICBJdCBhbHNvIHJlZmVycyB0byBpb3NfYmFzZTo6SW5pdApjbGFzcyBhcyB0aGUgcGFuYWNlYSBmb3IgY29uc3RydWN0b3JzIG9mIHN0YXRpYyBvYmplY3RzLgo8L3A+Cgo8cD4KSG93ZXZlciwgdGhlcmUncyBub3RoaW5nIGluIDI3LjMgW2xpYi5pb3N0cmVhbS5vYmplY3RzXSwKaW4gMjcuNC4yIFtsaWIuaW9zLmJhc2VdLCBhbmQgaW4gMjcuNC4yLjEuNiBbbGliLmlvczo6SW5pdF0sCnRoYXQgd291bGQgcmVxdWlyZSBpbXBsZW1lbnRhdGlvbnMgdG8gYWxsb3cgYWNjZXNzIHRvIHN0YW5kYXJkCmlvc3RyZWFtIG9iamVjdHMgZnJvbSBjb25zdHJ1Y3RvcnMgb2Ygc3RhdGljIG9iamVjdHMuCjwvcD4KCjxwPkRldGFpbHM6PC9wPgoKPHA+Q29yZSB0ZXh0IHJlZmVycyB0byBzb21lIG1hZ2ljIG9iamVjdCBpb3NfYmFzZTo6SW5pdCwgd2hpY2ggd2lsbApiZSBkaXNjdXNzZWQgYmVsb3c6PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgICAiVGhlIFtzdGFuZGFyZCBpb3N0cmVhbV0gb2JqZWN0cyBhcmUgY29uc3RydWN0ZWQsIGFuZCB0aGVpcgogICAgYXNzb2NpYXRpb25zIGFyZSBlc3RhYmxpc2hlZCBhdCBzb21lIHRpbWUgcHJpb3IgdG8gb3IgZHVyaW5nCiAgICBmaXJzdCB0aW1lIGFuIG9iamVjdCBvZiBjbGFzcyBiYXNpY19pb3MmbHQ7Y2hhclQsdHJhaXRzJmd0Ozo6SW5pdAogICAgaXMgY29uc3RydWN0ZWQsIGFuZCBpbiBhbnkgY2FzZSBiZWZvcmUgdGhlIGJvZHkgb2YgbWFpbgogICAgYmVnaW5zIGV4ZWN1dGlvbi4iICgyNy4zLzIgW2xpYi5pb3N0cmVhbS5vYmplY3RzXSkKPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpUaGUgZmlyc3QgPGk+bm9uLW5vcm1hdGl2ZTwvaT4gZm9vdG5vdGUgZW5jb3VyYWdlcyBpbXBsZW1lbnRhdGlvbnMKdG8gaW5pdGlhbGl6ZSBzdGFuZGFyZCBpb3N0cmVhbSBvYmplY3RzIGVhcmxpZXIgdGhhbiByZXF1aXJlZC4KPC9wPgoKPHA+SG93ZXZlciwgdGhlIHNlY29uZCA8aT5ub24tbm9ybWF0aXZlPC9pPiBmb290bm90ZSBtYWtlcyBhbiBleHBsaWNpdAphbmQgdW5zdXBwb3J0ZWQgY2xhaW06PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgIkNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgZm9yIHN0YXRpYyBvYmplY3RzIGNhbiBhY2Nlc3MgdGhlc2UKICBbc3RhbmRhcmQgaW9zdHJlYW1dIG9iamVjdHMgdG8gcmVhZCBpbnB1dCBmcm9tIHN0ZGluIG9yIHdyaXRlIG91dHB1dAogIHRvIHN0ZG91dCBvciBzdGRlcnIuIiAoMjcuMy8yIGZvb3Rub3RlIDI2NSBbbGliLmlvc3RyZWFtLm9iamVjdHNdKQo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBvbmx5IGJpdCBvZiBtYWdpYyBpcyByZWxhdGVkIHRvIHRoYXQgaW9zX2Jhc2U6OkluaXQgY2xhc3MuICBBRkFJSywKdGhlIHJhdGlvbmFsZSBiZWhpbmQgaW9zX2Jhc2U6OkluaXQgd2FzIHRvIGJyaW5nIGFuIGluc3RhbmNlIG9mIHRoaXMKY2xhc3MgdG8gZWFjaCB0cmFuc2xhdGlvbiB1bml0IHdoaWNoICNpbmNsdWRlZCAmbHQ7aW9zdHJlYW0mZ3Q7IG9yCnJlbGF0ZWQgaGVhZGVyLiAgU3VjaCBhbiBpbmNsdXNpb24gd291bGQgc3VwcG9ydCB0aGUgY2xhaW0gb2YgZm9vdG5vdGUKcXVvdGVkIGFib3ZlLCBiZWNhdXNlIGluIG9yZGVyIHRvIHVzZSBzb21lIHN0YW5kYXJkIGlvc3RyZWFtIG9iamVjdCBpdAppcyBuZWNlc3NhcnkgdG8gI2luY2x1ZGUgJmx0O2lvc3RyZWFtJmd0Oy4KPC9wPgoKPHA+Ckhvd2V2ZXIsIHdoaWxlIFN0YW5kYXJkIGV4cGxpY2l0bHkgZGVzY3JpYmVzIGlvc19iYXNlOjpJbml0IGFzCmFuIGFwcHJvcHJpYXRlIGNsYXNzIGZvciBkb2luZyB0aGUgdHJpY2ssIEkgZmFpbGVkIHRvIGZvdW5kIGEKbWVudGlvbiBvZiBhbiBfaW5zdGFuY2VfIG9mIGlvc19iYXNlOjpJbml0IGluIFN0YW5kYXJkLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+QWRkIHRvIDI3LjMgW2lvc3RyZWFtLm9iamVjdHNdLCBwMiwgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBsYXN0IHNlbnRlbmNlCm9mIHRoZSBwYXJhZ3JhcGgsIHRoZSBmb2xsb3dpbmcgdHdvIHNlbnRlbmNlczo8L3A+Cgo8YmxvY2txdW90ZT48cD4KSWYgYSB0cmFuc2xhdGlvbiB1bml0IGluY2x1ZGVzICZsdDtpb3N0cmVhbSZndDssIG9yIGV4cGxpY2l0bHkKY29uc3RydWN0cyBhbiBpb3NfYmFzZTo6SW5pdCBvYmplY3QsIHRoZXNlIHN0cmVhbSBvYmplY3RzIHNoYWxsCmJlIGNvbnN0cnVjdGVkIGJlZm9yZSBkeW5hbWljIGluaXRpYWxpemF0aW9uIG9mIG5vbi1sb2NhbApvYmplY3RzIGRlZmluZWQgbGF0ZXIgaW4gdGhhdCB0cmFuc2xhdGlvbiB1bml0LCBhbmQgdGhlc2Ugc3RyZWFtCm9iamVjdHMgc2hhbGwgYmUgZGVzdHJveWVkIGFmdGVyIHRoZSBkZXN0cnVjdGlvbiBvZiBkeW5hbWljYWxseQppbml0aWFsaXplZCBub24tbG9jYWwgb2JqZWN0cyBkZWZpbmVkIGxhdGVyIGluIHRoYXQgdHJhbnNsYXRpb24gdW5pdC4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPjxpPltMaWxsZWhhbW1lcjogTWF0dCBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgoKPHA+PGk+W01vbnQgVHJlbWJsYW50OiBNYXR0IHByb3ZpZGVkIHJldmlzZWQgd29yZGluZy5dPC9pPjwvcD4KCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUaGUgb3JpZ2luYWwgcHJvcG9zZWQgcmVzb2x1dGlvbiB1bmNvbmRpdGlvbmFsbHkgcmVxdWlyZWQKaW1wbGVtZW50YXRpb25zIHRvIGRlZmluZSBhbiBpb3NfYmFzZTo6SW5pdCBvYmplY3Qgb2Ygc29tZQppbXBsZW1lbnRhdGlvbi1kZWZpbmVkIG5hbWUgaW4gdGhlIGhlYWRlciAmbHQ7aW9zdHJlYW0mZ3Q7LiBUaGF0J3MgYW4Kb3ZlcnNwZWNpZmljYXRpb24uIEZpcnN0LCBkZWZpbmluZyB0aGUgb2JqZWN0IG1heSBiZSB1bm5lY2Vzc2FyeQphbmQgZXZlbiBkZXRyaW1lbnRhbCB0byBwZXJmb3JtYW5jZSBpZiBhbiBpbXBsZW1lbnRhdGlvbiBjYW4KZ3VhcmFudGVlIHRoYXQgdGhlIDggc3RhbmRhcmQgaW9zdHJlYW0gb2JqZWN0cyB3aWxsIGJlIGluaXRpYWxpemVkCmJlZm9yZSBhbnkgb3RoZXIgdXNlci1kZWZpbmVkIG9iamVjdCBpbiBhIHByb2dyYW0uIFNlY29uZCwgdGhlcmUKaXMgbm8gbmVlZCB0byByZXF1aXJlIGltcGxlbWVudGF0aW9ucyB0byBkb2N1bWVudCB0aGUgbmFtZSBvZiB0aGUKb2JqZWN0LjwvcD4KCjxwPgpUaGUgbmV3IHByb3Bvc2VkIHJlc29sdXRpb24gZ2l2ZXMgdXNlcnMgZ3VpZGFuY2Ugb24gd2hhdCB0aGV5IG5lZWQgdG8KZG8gdG8gZW5zdXJlIHRoYXQgc3RyZWFtIG9iamVjdHMgYXJlIGNvbnN0cnVjdGVkIGR1cmluZyBzdGFydHVwLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzNzAiPjwvYT4zNzAuIE1pbm9yIGVycm9yIGluIGJhc2ljX2lzdHJlYW06OmdldDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjEuMyBbaXN0cmVhbS51bmZvcm1hdHRlZF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gUmF5IExpc2NobmVyIDxiPkRhdGU6PC9iPiAyMDAyLTA3LTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpc3RyZWFtLnVuZm9ybWF0dGVkIj5pc3N1ZXM8L2E+IGluIFtpc3RyZWFtLnVuZm9ybWF0dGVkXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+RGVmZWN0IHJlcG9ydCBmb3IgZGVzY3JpcHRpb24gb2YgYmFzaWNfaXN0cmVhbTo6Z2V0IChzZWN0aW9uCjI3LjYuMS4zIFtpc3RyZWFtLnVuZm9ybWF0dGVkXSksIHBhcmFncmFwaCAxNS4gVGhlIGRlc2NyaXB0aW9uIGZvciB0aGUKZ2V0IGZ1bmN0aW9uCndpdGggdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6PC9wPgoKPHByZT4gIGJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IGdldChiYXNpY19zdHJlYW1idWYmbHQ7Y2hhcl90eXBlLHRyYWl0cyZndDsmYW1wOwogIHNiKTsKPC9wcmU+Cgo8cD5pcyBpbmNvcnJlY3QuIEl0IHJlYWRzPC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgRWZmZWN0czogQ2FsbHMgZ2V0KHMsbix3aWRlbignXG4nKSkKPC9wPjwvYmxvY2txdW90ZT4KCjxwPndoaWNoIEkgYmVsaWV2ZSBzaG91bGQgYmU6PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgRWZmZWN0czogQ2FsbHMgZ2V0KHNiLHdpZGVuKCdcbicpKQo8L3A+PC9ibG9ja3F1b3RlPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSA8Yj5FZmZlY3RzPC9iPiBwYXJhZ3JhcGggdG86PC9wPgo8YmxvY2txdW90ZT48cD4KICBFZmZlY3RzOiBDYWxscyBnZXQoc2IsdGhpcy0mZ3Q7d2lkZW4oJ1xuJykpCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD48aT5bUHJlLU94Zm9yZDogTWlub3IgY29ycmVjdGlvbiBmcm9tIEhvd2FyZDogcmVwbGFjZWQgJ3dpZGVuJyAKICAgICAgd2l0aCAndGhpcy0mZ3Q7d2lkZW4nLl08L2k+PC9wPgoKCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+PHA+Rml4ZXMgYW4gb2J2aW91cyB0eXBvLjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM3MSI+PC9hPjM3MS4gU3RhYmlsaXR5IG9mIG11bHRpc2V0IGFuZCBtdWx0aW1hcCBtZW1iZXIgZnVuY3Rpb25zPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjEgW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEZyYW5rIENvbXBhZ25lciA8Yj5EYXRlOjwvYj4gMjAwMi0wNy0yMDwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI2NvbnRhaW5lci5yZXF1aXJlbWVudHMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtjb250YWluZXIucmVxdWlyZW1lbnRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2NvbnRhaW5lci5yZXF1aXJlbWVudHMiPmlzc3VlczwvYT4gaW4gW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIHJlcXVpcmVtZW50cyBmb3IgbXVsdGlzZXQgYW5kIG11bHRpbWFwIGNvbnRhaW5lcnMgKDIzLjEKW2xpYi5jb250YWluZXJzLnJlcXVpcmVtZW50c10sIDIzLjEuMiBbbGliLmFzc29jaWF0aXZlLnJlcW1udHNdLAoyMy4zLjIgW2xpYi5tdWx0aW1hcF0gYW5kIDIzLjMuNCBbbGliLm11bHRpc2V0XSkgbWFrZSBubyBtZW50aW9uIG9mCnRoZSBzdGFiaWxpdHkgb2YgdGhlIHJlcXVpcmVkIChtdXRhdGluZykgbWVtYmVyIGZ1bmN0aW9ucy4gSXQgYXBwZWFycwp0aGUgc3RhbmRhcmQgYWxsb3dzIHRoZXNlIGZ1bmN0aW9ucyB0byByZW9yZGVyIGVxdWl2YWxlbnQgZWxlbWVudHMgb2YKdGhlIGNvbnRhaW5lciBhdCB3aWxsLCB5ZXQgdGhlIHBlcnZhc2l2ZSByZWQtYmxhY2sgdHJlZSBpbXBsZW1lbnRhdGlvbgphcHBlYXJzIHRvIHByb3ZpZGUgc3RhYmxlIGJlaGF2aW91ci4KPC9wPgoKPHA+VGhpcyBpcyBvZiBtb3N0IGNvbmNlcm4gd2hlbiBjb25zaWRlcmluZyB0aGUgYmVoYXZpb3VyIG9mIGVyYXNlKCkuCkEgc3RhYmlsaXR5IHJlcXVpcmVtZW50IHdvdWxkIGd1YXJhbnRlZSB0aGUgY29ycmVjdCB3b3JraW5nIG9mIHRoZQpmb2xsb3dpbmcgJ2lkaW9tJyB0aGF0IHJlbW92ZXMgZWxlbWVudHMgYmFzZWQgb24gYSBjZXJ0YWluIHByZWRpY2F0ZQpmdW5jdGlvbi4KPC9wPgoKPHByZT4gIG11bHRpbWFwJmx0O2ludCwgaW50Jmd0OyBtOwogIG11bHRpbWFwJmx0O2ludCwgaW50Jmd0Ozo6aXRlcmF0b3IgaSA9IG0uYmVnaW4oKTsKICB3aGlsZSAoaSAhPSBtLmVuZCgpKSB7CiAgICAgIGlmIChwcmVkKGkpKQogICAgICAgICAgbS5lcmFzZSAoaSsrKTsKICAgICAgZWxzZQogICAgICAgICAgKytpOwogIH0KPC9wcmU+Cgo8cD4KQWx0aG91Z2ggY2xhdXNlIDIzLjEuMi84IGd1YXJhbnRlZXMgdGhhdCBpIHJlbWFpbnMgYSB2YWxpZCBpdGVyYXRvcgp0aHJvdWdvdXQgdGhpcyBsb29wLCBhYnNlbmNlIG9mIHRoZSBzdGFiaWxpdHkgcmVxdWlyZW1lbnQgY291bGQKcG90ZW50aWFsbHkgcmVzdWx0IGluIGVsZW1lbnRzIGJlaW5nIHNraXBwZWQuIFRoaXMgd291bGQgbWFrZQp0aGlzIGNvZGUgaW5jb3JyZWN0LCBhbmQsIGZ1cnRoZXJtb3JlLCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIHdheQpvZiBlcmFzaW5nIHRoZXNlIGVsZW1lbnRzIHdpdGhvdXQgaXRlcmF0aW5nIGZpcnN0IG92ZXIgdGhlIGVudGlyZQpjb250YWluZXIsIGFuZCBzZWNvbmQgb3ZlciB0aGUgZWxlbWVudHMgdG8gYmUgZXJhc2VkLiBUaGlzIHdvdWxkCmJlIHVuZm9ydHVuYXRlLCBhbmQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBib3RoIHBlcmZvcm1hbmNlIGFuZApjb2RlIHNpbXBsaWNpdHkuCjwvcD4KCjxwPgpJZiB0aGUgc3RhYmlsaXR5IHJlcXVpcmVtZW50IGlzIGludGVuZGVkLCBpdCBzaG91bGQgYmUgbWFkZSBleHBsaWNpdAoocHJvYmFibHkgdGhyb3VnaCBhbiBleHRyYSBwYXJhZ3JhcGggaW4gY2xhdXNlIDIzLjEuMikuCjwvcD4KPHA+CklmIGl0IHR1cm5zIG91dCBzdGFiaWxpdHkgY2Fubm90IGJlIGd1YXJhbnRlZWQsIGknZCBhcmd1ZSB0aGF0IGEKcmVtYXJrIG9yIGZvb3Rub3RlIGlzIGNhbGxlZCBmb3IgKGFsc28gc29tZXdoZXJlIGluIGNsYXVzZSAyMy4xLjIpIHRvCndhcm4gYWdhaW5zdCByZWx5aW5nIG9uIHN0YWJsZSBiZWhhdmlvdXIgKGFzIGRlbW9uc3RyYXRlZCBieSB0aGUgY29kZQphYm92ZSkuICBJZiBtb3N0IGltcGxlbWVudGF0aW9ucyB3aWxsIGRpc3BsYXkgc3RhYmxlIGJlaGF2aW91ciwgYW55CnByb2JsZW1zIGVtZXJnaW5nIG9uIGFuIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgc3RhYmxlIGJlaGF2aW91ciB3aWxsCmJlIGhhcmQgdG8gdHJhY2sgZG93biBieSB1c2Vycy4gVGhpcyB3b3VsZCBhbHNvIG1ha2UgdGhlIG5lZWQgZm9yIGFuCmVyYXNlX2lmKCkgbWVtYmVyIGZ1bmN0aW9uIHRoYXQgbXVjaCBncmVhdGVyLgo8L3A+Cgo8cD5UaGlzIGlzc3VlIGlzIHNvbWV3aGF0IHJlbGF0ZWQgdG8gTFdHIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzAiPjEzMDwvYT4uPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgZW5kIG9mIDIzLjEuNCBbYXNzb2NpYXRpdmUucmVxbXRzXSBwYXJhZ3JhcGggNDogCiJGb3IgPHR0Pm11bHRpc2V0PC90dD4gYW5kIDx0dD5tdWx0aW1hcDwvdHQ+LCA8dHQ+aW5zZXJ0PC90dD5hbmQgPHR0PmVyYXNlPC90dD4KICBhcmUgPGk+c3RhYmxlPC9pPjogdGhleSBwcmVzZXJ2ZSB0aGUgcmVsYXRpdmUgb3JkZXJpbmcgb2YgZXF1aXZhbGVudAogIGVsZW1lbnRzLjwvcD4gCgo8cD48aT5bTGlsbGVoYW1tZXI6IE1hdHQgcHJvdmlkZWQgd29yZGluZ108L2k+PC9wPgoKPHA+PGk+W0pvZSBHb3R0bWFuIHBvaW50cyBvdXQgdGhhdCB0aGUgcHJvdmlkZWQgd29yZGluZyBkb2VzIG5vdCBhZGRyZXNzCm11bHRpbWFwIGFuZCBtdWx0aXNldC4gIE4xNzgwIGFsc28gYWRkcmVzc2VzIHRoaXMgaXNzdWUgYW5kIHN1Z2dlc3RzCndvcmRpbmcuXTwvaT48L3A+CgoKPHA+PGk+W01vbnQgVHJlbWJsYW50OiBDaGFuZ2VkIHNldCBhbmQgbWFwIHRvIG11bHRpc2V0IGFuZCBtdWx0aW1hcC5dPC9pPjwvcD4KCgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGFncmVlcyB0aGF0IHRoaXMgZ3VhcmFudGVlIGlzIG5lY2Vzc2FyeSBmb3IgY29tbW9uIHVzZXIKICBpZGlvbXMgdG8gd29yaywgYW5kIHRoYXQgYWxsIGV4aXN0aW5nIGltcGxlbWVudGF0aW9ucyBwcm92aWRlIHRoaXMKICBwcm9wZXJ0eS4gIE5vdGUgdGhhdCB0aGlzIHJlc29sdXRpb24gZ3VhcmFudGVlcyBzdGFiaWxpdHkgZm9yCiAgbXVsdGltYXAgYW5kIG11bHRpc2V0LCBub3QgZm9yIGFsbCBhc3NvY2lhdGl2ZSBjb250YWluZXJzIGluCiAgZ2VuZXJhbC48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM3MyI+PC9hPjM3My4gQXJlIGJhc2ljX2lzdHJlYW0gYW5kIGJhc2ljX29zdHJlYW0gdG8gdXNlIChleGNlcHRpb25zKCkmYW1wO2JhZGJpdCkgIT0gMCA/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjYuMS4yLjEgW2lzdHJlYW0uZm9ybWF0dGVkLnJlcW10c10sIDI3LjYuMi42LjEgW29zdHJlYW0uZm9ybWF0dGVkLnJlcW10c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gS2VpdGggQmFrZXIgPGI+RGF0ZTo8L2I+IDIwMDItMDctMjM8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lzdHJlYW0uZm9ybWF0dGVkLnJlcW10cyI+aXNzdWVzPC9hPiBpbiBbaXN0cmVhbS5mb3JtYXR0ZWQucmVxbXRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KCjxwPgpJbiAyNy42LjEuMi4xIFtpc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHNdIGFuZCAyNy42LjIuNi4xIFtvc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHNdCihleGNlcHRpb24oKSZhbXA7YmFkYml0KSAhPSAwIGlzIHVzZWQgaW4gdGVzdGluZyBmb3IgcmV0aHJvdywgeWV0CmV4Y2VwdGlvbigpIGlzIHRoZSBjb25zdHJ1Y3RvciB0byBjbGFzcyBzdGQ6OmV4Y2VwdGlvbiBpbiAxOC42LjEgW3R5cGUuaW5mb10gdGhhdCBoYXMgbm8gcmV0dXJuIHR5cGUuIFNob3VsZCBtZW1iZXIgZnVuY3Rpb24KZXhjZXB0aW9ucygpIGZvdW5kIGluIDI3LjQuNCBbaW9zXSBiZSB1c2VkIGluc3RlYWQ/CjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjcuNi4xLjIuMSBbaXN0cmVhbS5mb3JtYXR0ZWQucmVxbXRzXSBhbmQgMjcuNi4yLjYuMSBbb3N0cmVhbS5mb3JtYXR0ZWQucmVxbXRzXSwgY2hhbmdlCiIoZXhjZXB0aW9uKCkmYW1wO2JhZGJpdCkgIT0gMCIgdG8gIihleGNlcHRpb25zKCkmYW1wO2JhZGJpdCkgIT0gMCIuCjwvcD4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+Rml4ZXMgYW4gb2J2aW91cyB0eXBvLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzNzUiPjwvYT4zNzUuIGJhc2ljX2lvcyBzaG91bGQgYmUgaW9zX2Jhc2UgaW4gMjcuNy4xLjM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNy4xLjQgW3N0cmluZ2J1Zi52aXJ0dWFsc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gUmF5IExpc2NobmVyIDxiPkRhdGU6PC9iPiAyMDAyLTA4LTE0PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmdidWYudmlydHVhbHMiPmlzc3VlczwvYT4gaW4gW3N0cmluZ2J1Zi52aXJ0dWFsc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJbiBTZWN0aW9uIDI3LjcuMS40IFtzdHJpbmdidWYudmlydHVhbHNdOiBUYWJsZSA5MCwgVGFibGUgOTEsIGFuZCBwYXJhZ3JhcGgKMTQgYWxsIGNvbnRhaW4gcmVmZXJlbmNlcyB0byAiYmFzaWNfaW9zOjoiIHdoaWNoIHNob3VsZCBiZQoiaW9zX2Jhc2U6OiIuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgYWxsIHJlZmVyZW5jZXMgdG8gImJhc2ljX2lvcyIgaW4gVGFibGUgOTAsIFRhYmxlIDkxLCBhbmQKcGFyYWdyYXBoIDE0IHRvICJpb3NfYmFzZSIuCjwvcD4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD48cD5GaXhlcyBhbiBvYnZpb3VzIHR5cG8uPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzc2Ij48L2E+Mzc2LiBiYXNpY19zdHJlYW1idWYgc2VtYW50aWNzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjcuMS40IFtzdHJpbmdidWYudmlydHVhbHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFJheSBMaXNjaG5lciA8Yj5EYXRlOjwvYj4gMjAwMi0wOC0xNDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjc3RyaW5nYnVmLnZpcnR1YWxzIj5pc3N1ZXM8L2E+IGluIFtzdHJpbmdidWYudmlydHVhbHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSW4gU2VjdGlvbiAyNy43LjEuNCBbc3RyaW5nYnVmLnZpcnR1YWxzXSwgVGFibGUgOTAsIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0CnRoZSBmb3VyIGNvbmRpdGlvbnMgc2hvdWxkIGJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgYnV0IHRoZXkgYXJlIG5vdC4KVGhlIGZpcnN0IHR3byBjYXNlcywgYXMgd3JpdHRlbiwgYXJlIHN1YmNhc2VzIG9mIHRoZSB0aGlyZC48L3A+Cgo8cD4KQXMgd3JpdHRlbiwgaXQgaXMgdW5jbGVhciB3aGF0IHNob3VsZCBiZSB0aGUgcmVzdWx0IGlmIGNhc2VzIDEgYW5kIDIKYXJlIGJvdGggdHJ1ZSwgYnV0IGNhc2UgMyBpcyBmYWxzZS4KPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5SZXdyaXRlIHRoZXNlIGNvbmRpdGlvbnMgYXM6PC9wPgo8YmxvY2txdW90ZT4KPHA+CiAgKHdoaWNoICZhbXA7IChpb3NfYmFzZTo6aW58aW9zX2Jhc2U6Om91dCkpID09IGlvc19iYXNlOjppbgo8L3A+Cgo8cD4KICAod2hpY2ggJmFtcDsgKGlvc19iYXNlOjppbnxpb3NfYmFzZTo6b3V0KSkgPT0gaW9zX2Jhc2U6Om91dAo8L3A+Cgo8cD4KICAod2hpY2ggJmFtcDsgKGlvc19iYXNlOjppbnxpb3NfYmFzZTo6b3V0KSkgPT0gCihpb3NfYmFzZTo6aW58aW9zX2Jhc2U6Om91dCkKICAgYW5kIHdheSA9PSBlaXRoZXIgaW9zX2Jhc2U6OmJlZyBvciBpb3NfYmFzZTo6ZW5kCjwvcD4KCjxwPk90aGVyd2lzZTwvcD4KPC9ibG9ja3F1b3RlPgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SXQncyBjbGVhciB3aGF0IHdlIHdhbnRlZCB0byBzYXksIHdlIGp1c3QgZmFpbGVkIHRvIHNheSBpdC4gIFRoaXMKICBmaXhlcyBpdC48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzc5Ij48L2E+Mzc5LiBub25zZW5zaWNhbCBjdHlwZTo6ZG9fd2lkZW4oKSByZXF1aXJlbWVudDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjEuMS4yIFtsb2NhbGUuY3R5cGUudmlydHVhbHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwMi0wOS0wNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlLmN0eXBlLnZpcnR1YWxzIj5pc3N1ZXM8L2E+IGluIFtsb2NhbGUuY3R5cGUudmlydHVhbHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGxhc3Qgc2VudGVuY2UgaW4gMjIuMi4xLjEuMiwgcDExIGJlbG93IGRvZXNuJ3Qgc2VlbSB0byBtYWtlIHNlbnNlLgo8L3A+CjxwcmU+ICBjaGFyVCBkb193aWRlbiAoY2hhciBjKSBjb25zdDsKCiAgLTExLSBFZmZlY3RzOiBBcHBsaWVzIHRoZSBzaW1wbGVzdCByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uIGZyb20KICAgICAgIGEgY2hhciB2YWx1ZSBvciBzZXF1ZW5jZSBvZiBjaGFyIHZhbHVlcyB0byB0aGUgY29ycmVzcG9uZGluZwogICAgICAgY2hhclQgdmFsdWUgb3IgdmFsdWVzLiBUaGUgb25seSBjaGFyYWN0ZXJzIGZvciB3aGljaCB1bmlxdWUKICAgICAgIHRyYW5zZm9ybWF0aW9ucyBhcmUgcmVxdWlyZWQgYXJlIHRob3NlIGluIHRoZSBiYXNpYyBzb3VyY2UKICAgICAgIGNoYXJhY3RlciBzZXQgKDIuMikuIEZvciBhbnkgbmFtZWQgY3R5cGUgY2F0ZWdvcnkgd2l0aCBhCiAgICAgICBjdHlwZSZsdDtjaGFyVCZndDsgZmFjZXQgY3R3IGFuZCB2YWxpZCBjdHlwZV9iYXNlOjptYXNrIHZhbHVlCiAgICAgICBNIChpcyhNLCBjKSB8fCAhY3R3LmlzKE0sIGRvX3dpZGVuKGMpKSkgaXMgdHJ1ZS4KPC9wcmU+CjxwPgpTaG91bGRuJ3QgdGhlIGxhc3Qgc2VudGVuY2UgaW5zdGVhZCByZWFkCjwvcD4KPHByZT4gICAgICAgRm9yIGFueSBuYW1lZCBjdHlwZSBjYXRlZ29yeSB3aXRoIGEgY3R5cGUmbHQ7Y2hhciZndDsgZmFjZXQgY3RjCiAgICAgICBhbmQgdmFsaWQgY3R5cGVfYmFzZTo6bWFzayB2YWx1ZSBNCiAgICAgICAoY3RjLmlzKE0sIGMpIHx8ICFpcyhNLCBkb193aWRlbihjKSkpIGlzIHRydWUuCjwvcHJlPgo8cD4KSS5lLiwgaWYgdGhlIG5hcnJvdyBjaGFyYWN0ZXIgYyBpcyBub3QgYSBtZW1iZXIgb2YgYSBjbGFzcyBvZgpjaGFyYWN0ZXJzIHRoZW4gbmVpdGhlciBpcyB0aGUgd2lkZW5lZCBmb3JtIG9mIGMuIChUbyBwYXJhcGhyYXNlCmZvb3Rub3RlIDIyNC4pCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpSZXBsYWNlIHRoZSBsYXN0IHNlbnRlbmNlIG9mIDIyLjIuMS4xLjIgW2xvY2FsZS5jdHlwZS52aXJ0dWFsc10sIHAxMSB3aXRoIHRoZQpmb2xsb3dpbmcgdGV4dDoKPC9wPgo8cHJlPiAgICAgICBGb3IgYW55IG5hbWVkIGN0eXBlIGNhdGVnb3J5IHdpdGggYSBjdHlwZSZsdDtjaGFyJmd0OyBmYWNldCBjdGMKICAgICAgIGFuZCB2YWxpZCBjdHlwZV9iYXNlOjptYXNrIHZhbHVlIE0sCiAgICAgICAoY3RjLmlzKE0sIGMpIHx8ICFpcyhNLCBkb193aWRlbihjKSkpIGlzIHRydWUuCjwvcHJlPgoKPHA+PGk+W0tvbmE6IE1pbm9yIGVkaXQuIEFkZGVkIGEgY29tbWEgYWZ0ZXIgdGhlIDxpPk08L2k+IGZvciBjbGFyaXR5Ll08L2k+PC9wPgoKCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYmVsaWV2ZXMgdGhpcyBpcyBqdXN0IGEgdHlwbywgYW5kIHRoYXQgdGhpcyBpcyB0aGUgY29ycmVjdCBmaXguPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM4MCI+PC9hPjM4MC4gdHlwb3MgaW4gY29kZWN2dCB0YWJsZXMgNTMgYW5kIDU0PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMS41IFtsb2NhbGUuY29kZWN2dC5ieW5hbWVdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwMi0wOS0wNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlLmNvZGVjdnQuYnluYW1lIj5pc3N1ZXM8L2E+IGluIFtsb2NhbGUuY29kZWN2dC5ieW5hbWVdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGFibGVzIDUzIGFuZCA1NCBpbiAyMi4yLjEuNSBbbG9jYWxlLmNvZGVjdnQuYnluYW1lXSBhcmUgYm90aCB0aXRsZWQgImNvbnZlcnQKcmVzdWx0IHZhbHVlcywiIHdoZW4gc3VyZWx5ICJkb19pbi9kb19vdXQgcmVzdWx0IHZhbHVlcyIgbXVzdCBoYXZlCmJlZW4gaW50ZW5kZWQgZm9yIFRhYmxlIDUzIGFuZCAiZG9fdW5zaGlmdCByZXN1bHQgdmFsdWVzIiBmb3IgVGFibGUKNTQuCjwvcD4KPHA+ClRhYmxlIDU0LCByb3cgMyBzYXlzIHRoYXQgdGhlIG1lYW5pbmcgb2YgcGFydGlhbCBpcyAibW9yZSBjaGFyYWN0ZXJzCm5lZWRlZCB0byBiZSBzdXBwbGllZCB0byBjb21wbGV0ZSB0ZXJtaW5hdGlvbi4iIFRoZSBmdW5jdGlvbiBpcyBub3QKc3VwcGxpZWQgYW55IGNoYXJhY3RlcnMsIGl0IGlzIGdpdmVuIGEgYnVmZmVyIHdoaWNoIGl0IGZpbGxzIHdpdGgKY2hhcmFjdGVycyBvciwgbW9yZSBwcmVjaXNlbHksIGRlc3RpbmF0aW9uIGVsZW1lbnRzIChpLmUuLCBhbiBlc2NhcGUKc2VxdWVuY2UpLiBTbyBwYXJ0aWFsIG1lYW5zIHRoYXQgc3BhY2UgZm9yIG1vcmUgdGhhbiAodG9fbGltaXQgLSB0bykKZGVzdGluYXRpb24gZWxlbWVudHMgd2FzIG5lZWRlZCB0byB0ZXJtaW5hdGUgYSBzZXF1ZW5jZSBnaXZlbiB0aGUKdmFsdWUgb2Ygc3RhdGUuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgdGhlIHRpdGxlIG9mIFRhYmxlIDUzIHRvICJkb19pbi9kb19vdXQgcmVzdWx0IHZhbHVlcyIgYW5kCnRoZSB0aXRsZSBvZiBUYWJsZSA1NCB0byAiZG9fdW5zaGlmdCByZXN1bHQgdmFsdWVzLiIKPC9wPgo8cD4KQ2hhbmdlIHRoZSB0ZXh0IGluIFRhYmxlIDU0LCByb3cgMyAodGhlIDxiPnBhcnRpYWw8L2I+IHJvdyksIHVuZGVyIHRoZQpoZWFkaW5nIE1lYW5pbmcsIHRvICJzcGFjZSBmb3IgbW9yZSB0aGFuICh0b19saW1pdCAtIHRvKSBkZXN0aW5hdGlvbgplbGVtZW50cyB3YXMgbmVlZGVkIHRvIHRlcm1pbmF0ZSBhIHNlcXVlbmNlIGdpdmVuIHRoZSB2YWx1ZSBvZiBzdGF0ZS4iCjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM4MSI+PC9hPjM4MS4gZGV0ZWN0aW9uIG9mIGludmFsaWQgbWJzdGF0ZV90IGluIGNvZGVjdnQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMi4xLjUgW2xvY2FsZS5jb2RlY3Z0LmJ5bmFtZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAyLTA5LTA2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsb2NhbGUuY29kZWN2dC5ieW5hbWUiPmlzc3VlczwvYT4gaW4gW2xvY2FsZS5jb2RlY3Z0LmJ5bmFtZV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpBbGwgYnV0IG9uZSBjb2RlY3Z0IG1lbWJlciBmdW5jdGlvbnMgdGhhdCB0YWtlIGEgc3RhdGVfdHlwZSBhcmd1bWVudApsaXN0IGFzIG9uZSBvZiB0aGVpciBwcmVjb25kaXRpb25zIHRoYXQgdGhlIHN0YXRlX3R5cGUgYXJndW1lbnQgaGF2ZQphIHZhbGlkIHZhbHVlLiBIb3dldmVyLCBhY2NvcmRpbmcgdG8gMjIuMi4xLjUuMiwgcDYsCmNvZGVjdnQ6OmRvX3Vuc2hpZnQoKSBpcyB0aGUgb25seSBjb2RlY3Z0IG1lbWJlciB0aGF0IGlzIHN1cHBvc2VkIHRvCnJldHVybiBlcnJvciBpZiB0aGUgc3RhdGVfdHlwZSBvYmplY3QgaXMgaW52YWxpZC4KPC9wPgoKPHA+Ckl0IHNlZW1zIHRvIG1lIHRoYXQgdGhlIHRyZWF0bWVudCBvZiBzdGF0ZV90eXBlIGJ5IGFsbCBjb2RlY3Z0IG1lbWJlcgpmdW5jdGlvbnMgc2hvdWxkIGJlIHRoZSBzYW1lIGFuZCB0aGUgY3VycmVudCByZXF1aXJlbWVudHMgc2hvdWxkIGJlCmNoYW5nZWQuIFNpbmNlIHRoZSBkZXRlY3Rpb24gb2YgaW52YWxpZCBzdGF0ZV90eXBlIHZhbHVlcyBtYXkgYmUKZGlmZmljdWx0IGluIGdlbmVyYWwgb3IgY29tcHV0YXRpb25hbGx5IGV4cGVuc2l2ZSBpbiBzb21lIHNwZWNpZmljCmNhc2VzLCBJIHByb3Bvc2UgdGhlIGZvbGxvd2luZzoKPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkZCBhIG5ldyBwYXJhZ3JhcGggYmVmb3JlIDIyLjIuMS41LjIsIHA1LCBhbmQgYWZ0ZXIgdGhlIGZ1bmN0aW9uCmRlY2xhcmF0aW9uIGJlbG93CjwvcD4KPHByZT4gICAgcmVzdWx0IGRvX3Vuc2hpZnQoc3RhdGVUJmFtcDsgc3RhdGUsCiAgICBleHRlcm5UKiB0bywgZXh0ZXJuVCogdG9fbGltaXQsIGV4dGVyblQqJmFtcDsgdG9fbmV4dCkgY29uc3Q7CjwvcHJlPgo8cD4KYXMgZm9sbG93czoKPC9wPgo8cHJlPiAgICBSZXF1aXJlczogKHRvICZsdDs9IHRvX2VuZCkgd2VsbCBkZWZpbmVkIGFuZCB0cnVlOyBzdGF0ZSBpbml0aWFsaXplZCwKICAgIGlmIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBzZXF1ZW5jZSwgb3IgZWxzZSBlcXVhbCB0byB0aGUgcmVzdWx0IG9mCiAgICBjb252ZXJ0aW5nIHRoZSBwcmVjZWRpbmcgY2hhcmFjdGVycyBpbiB0aGUgc2VxdWVuY2UuCjwvcHJlPgo8cD4KYW5kIGNoYW5nZSB0aGUgdGV4dCBpbiBUYWJsZSA1NCwgcm93IDQsIHRoZSA8Yj5lcnJvcjwvYj4gcm93LCB1bmRlcgp0aGUgaGVhZGluZyBNZWFuaW5nLCBmcm9tCjwvcD4KPHByZT4gICAgc3RhdGUgaGFzIGludmFsaWQgdmFsdWUKPC9wcmU+CjxwPgp0bwo8L3A+CjxwcmU+ICAgIGFuIHVuc3BlY2lmaWVkIGVycm9yIGhhcyBvY2N1cnJlZAo8L3ByZT4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIGludGVudCBpcyB0aGF0IGltcGxlbWVudGF0aW9ucyBzaG91bGQgbm90IGJlIHJlcXVpcmVkIHRvIGRldGVjdAppbnZhbGlkIHN0YXRlIHZhbHVlczsgc3VjaCBhIHJlcXVpcmVtZW50IGFwcGVhcnMgbm93aGVyZSBlbHNlLiAgQW4KaW52YWxpZCBzdGF0ZSB2YWx1ZSBpcyBhIHByZWNvbmRpdGlvbiB2aW9sYXRpb24sIDxpPmkuZS48L2k+IHVuZGVmaW5lZApiZWhhdmlvci4gIEltcGxlbWVudGF0aW9ucyB0aGF0IGRvIGNob29zZSB0byBkZXRlY3QgaW52YWxpZCBzdGF0ZQp2YWx1ZXMsIG9yIHRoYXQgY2hvb3NlIHRvIGRldGVjdCBhbnkgb3RoZXIga2luZCBvZiBlcnJvciwgbWF5IHJldHVybgo8Yj5lcnJvcjwvYj4gYXMgYW4gaW5kaWNhdGlvbi48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzgzIj48L2E+MzgzLiBCaWRpcmVjdGlvbmFsIGl0ZXJhdG9yIGFzc2VydGlvbiB0eXBvPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI0LjEuNCBbYmlkaXJlY3Rpb25hbC5pdGVyYXRvcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IHlzYXBpciAoc3VibWl0dGVkIHZpYSBjb21wLnN0ZC5jKyspIDxiPkRhdGU6PC9iPiAyMDAyLTEwLTE3PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNiaWRpcmVjdGlvbmFsLml0ZXJhdG9ycyI+aXNzdWVzPC9hPiBpbiBbYmlkaXJlY3Rpb25hbC5pdGVyYXRvcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KRm9sbG93aW5nIGEgZGlzY3Vzc2lvbiBvbiB0aGUgYm9vc3QgbGlzdCByZWdhcmRpbmcgZW5kIGl0ZXJhdG9ycyBhbmQKdGhlIHBvc3NpYmlsaXR5IG9mIHBlcmZvcm1pbmcgb3BlcmF0b3ItLSgpIG9uIHRoZW0sIGl0IHNlZW1zIHRvIG1lCnRoYXQgdGhlcmUgaXMgYSB0eXBvIGluIHRoZSBzdGFuZGFyZC4gIFRoaXMgdHlwbyBoYXMgbm90aGluZyB0byBkbwp3aXRoIHRoYXQgZGlzY3Vzc2lvbi4KPC9wPgoKPHA+CkkgaGF2ZSBjaGVja2VkIHRoaXMgbmV3c2dyb3VwLCBhcyB3ZWxsIGFzIGF0dGVtcHRlZCBhIHNlYXJjaCBvZiB0aGUKQWN0aXZlL0RlZmVjdC9DbG9zZWQgSXNzdWVzIExpc3Qgb24gdGhlIHNpdGUgZm9yIHRoZSB3b3JkcyAicyBpcwpkZXJlZmVyIiBzbyBJIGJlbGlldmUgdGhpcyBoYXMgbm90IGJlZW4gcHJvcG9zZWQgYmVmb3JlLiAgRnVydGhlcm1vcmUsCnRoZSAiTGlzdHMgYnkgSW5kZXgiIG1lbnRpb25zIG9ubHkgRFIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjk5Ij4yOTk8L2E+IG9uIHNlY3Rpb24KMjQuMS40LCBhbmQgRFIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjk5Ij4yOTk8L2E+IGlzIG5vdCByZWxhdGVkIHRvIHRoaXMgaXNzdWUuCjwvcD4KCjxwPgpUaGUgc3RhbmRhcmQgbWFrZXMgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gb24gYmlkaXJlY3Rpb25hbCBpdGVyYXRvcnMsCmluIHNlY3Rpb24gMjQuMS40IFtsaWIuYmlkaXJlY3Rpb25hbC5pdGVyYXRvcnNdLCBUYWJsZSA3NToKPC9wPgoKPHByZT4gICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uYWwgIGFzc2VydGlvbi9ub3RlCmV4cHJlc3Npb24gIHJldHVybiB0eXBlICAgc2VtYW50aWNzICAgIHByZS9wb3N0LWNvbmRpdGlvbgoKLS1yICAgICAgICAgIFgmYW1wOyAgICAgICAgICAgICAgICAgICAgICAgIHByZTogdGhlcmUgZXhpc3RzIHMgc3VjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHIgPT0gKytzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0OiBzIGlzIGRlcmVmZXJlbmNlYWJsZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0oKytyKSA9PSByLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXIgPT0gLS1zIGltcGxpZXMgciA9PSBzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYW1wO3IgPT0gJmFtcDstLXIuCjwvcHJlPgoKPHA+CihTZWUgPGEgaHJlZj0iaHR0cDovL2FzcG4uYWN0aXZlc3RhdGUuY29tL0FTUE4vTWFpbC9NZXNzYWdlL2Jvb3N0LzEzOTU3NjMiPmh0dHA6Ly9hc3BuLmFjdGl2ZXN0YXRlLmNvbS9BU1BOL01haWwvTWVzc2FnZS9ib29zdC8xMzk1NzYzPC9hPi4pCjwvcD4KCjxwPgpJbiBwYXJ0aWN1bGFyLCAicyBpcyBkZXJlZmVyZW5jZWFibGUiIHNlZW1zIHRvIGJlIGluIGVycm9yLiAgSXQgc2VlbXMKdGhhdCB0aGUgaW50ZW50aW9uIHdhcyB0byBzYXkgInIgaXMgZGVyZWZlcmVuY2VhYmxlIi4KPC9wPgoKPHA+CklmIGl0IHdlcmUgdG8gc2F5ICJyIGlzIGRlcmVmZXJlbmNlYWJsZSIgaXQgd291bGQKbWFrZSBwZXJmZWN0IHNlbnNlLiAgU2luY2UgcyBtdXN0IGJlIGRlcmVmZXJlbmNlYWJsZSBwcmlvciB0bwpvcGVyYXRvcisrLCB0aGVuIHRoZSBuYXR1cmFsIHJlc3VsdCBvZiBvcGVyYXRvci0tICh0byB1bmRvIG9wZXJhdG9yKyspCndvdWxkIGJlIHRvIG1ha2UgciBkZXJlZmVyZW5jZWFibGUuICBGdXJ0aGVybW9yZSwgd2l0aG91dCBvdGhlcgphc3NlcnRpb25zLCBhbmQgYmFzaW5nIG9ubHkgb24gcHJlY29uZGl0aW9uIGFuZCBwb3N0Y29uZGl0aW9ucywgd2UKY291bGQgbm90IG90aGVyd2lzZSBrbm93IHRoaXMuICBTbyBpdCBpcyBhbHNvIGludGVyZXN0aW5nIGluZm9ybWF0aW9uLgo8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgZ3VhcmFudGVlIHRvICJwb3N0Y29uZGl0aW9uOiByIGlzIGRlcmVmZXJlbmNlYWJsZS4iCjwvcD4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD48cD5GaXhlcyBhbiBvYnZpb3VzIHR5cG88L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzODQiPjwvYT4zODQuIGVxdWFsX3JhbmdlIGhhcyB1bmltcGxlbWVudGFibGUgcnVudGltZSBjb21wbGV4aXR5PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI1LjMuMy4zIFtlcXVhbC5yYW5nZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSGFucyBCb3MgPGI+RGF0ZTo8L2I+IDIwMDItMTAtMTg8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2VxdWFsLnJhbmdlIj5pc3N1ZXM8L2E+IGluIFtlcXVhbC5yYW5nZV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpTZWN0aW9uIDI1LjMuMy4zIFtlcXVhbC5yYW5nZV0Kc3RhdGVzIHRoYXQgYXQgbW9zdCAyICogbG9nKGxhc3QgLSBmaXJzdCkgKyAxCmNvbXBhcmlzb25zIGFyZSBhbGxvd2VkIGZvciBlcXVhbF9yYW5nZS4KPC9wPgoKPHA+SXQgaXMgbm90IHBvc3NpYmxlIHRvIGltcGxlbWVudCBlcXVhbF9yYW5nZSB3aXRoIHRoZXNlIGNvbnN0cmFpbnRzLjwvcD4KCjxwPkluIGEgcmFuZ2Ugb2Ygb25lIGVsZW1lbnQgYXMgaW46PC9wPgo8cHJlPiAgICBpbnQgeCA9IDE7CiAgICBlcXVhbF9yYW5nZSgmYW1wO3gsICZhbXA7eCArIDEsIDEpCjwvcHJlPgoKPHA+aXQgaXMgZWFzeSB0byBzZWUgdGhhdCBhdCBsZWFzdCAyIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBhcmUgbmVlZGVkLjwvcD4KCjxwPkZvciB0aGlzIGNhc2UgYXQgbW9zdCAyICogbG9nKDEpICsgMSA9IDEgY29tcGFyaXNvbiBpcyBhbGxvd2VkLjwvcD4KCjxwPkkgaGF2ZSBjaGVja2VkIGEgZmV3IGxpYnJhcmllcyBhbmQgdGhleSBhbGwgdXNlIHRoZSBzYW1lIChub25jb25mb3JtaW5nKQphbGdvcml0aG0gZm9yIGVxdWFsX3JhbmdlIHRoYXQgaGFzIGEgY29tcGxleGl0eSBvZjwvcD4KPHByZT4gICAgIDIqIGxvZyhkaXN0YW5jZShmaXJzdCwgbGFzdCkpICsgMi4KPC9wcmU+CjxwPkkgZ3Vlc3MgdGhpcyBpcyB0aGUgYWxnb3JpdGhtIHRoYXQgdGhlIHN0YW5kYXJkIGFzc3VtZXMgZm9yIGVxdWFsX3JhbmdlLjwvcD4KCjxwPgpJdCBpcyBlYXN5IHRvIHNlZSB0aGF0IDIgKiBsb2coZGlzdGFuY2UpICsgMiBjb21wYXJpc29ucyBhcmUgZW5vdWdoCnNpbmNlIGVxdWFsIHJhbmdlIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRoIGxvd2VyX2JvdW5kIGFuZCB1cHBlcl9ib3VuZAooYm90aCBsb2coZGlzdGFuY2UpICsgMSkuCjwvcD4KCjxwPgpJIHRoaW5rIGl0IGlzIGJldHRlciB0byByZXF1aXJlIHNvbWV0aGluZyBsaWtlIDJsb2coZGlzdGFuY2UpICsgTygxKSAgKG9yCmV2ZW4gbG9nYXJpdGhtaWMgYXMgbXVsdGlzZXQ6OmVxdWFsX3JhbmdlKS4KVGhlbiBhbiBpbXBsZW1lbnRhdGlvbiBoYXMgbW9yZSByb29tIHRvIG9wdGltaXplIGZvciBjZXJ0YWluIGNhc2VzIChlLmcuCmhhdmUgbG9nKGRpc3RhbmNlKSBjaGFyYWN0ZXJpc3RpY3Mgd2hlbiBhdCBtb3N0IG1hdGNoIGlzIGZvdW5kIGluIHRoZSByYW5nZQpidXQgMmxvZyhkaXN0YW5jZSkgKyA0IGZvciB0aGUgd29yc3QgY2FzZSkuCjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNS4zLjMuMSBbbG93ZXIuYm91bmRdLzQsIGNoYW5nZSA8dHQ+bG9nKGxhc3QgLSBmaXJzdCkgKyAxPC90dD4KdG8gPHR0PmxvZzxzdWI+Mjwvc3ViPihsYXN0IC0gZmlyc3QpICsgPGk+TzwvaT4oMSk8L3R0Pi48L3A+Cgo8cD5JbiAyNS4zLjMuMiBbdXBwZXIuYm91bmRdLzQsIGNoYW5nZSA8dHQ+bG9nKGxhc3QgLSBmaXJzdCkgKyAxPC90dD4KdG8gPHR0PmxvZzxzdWI+Mjwvc3ViPihsYXN0IC0gZmlyc3QpICsgPGk+TzwvaT4oMSk8L3R0Pi48L3A+Cgo8cD5JbiAyNS4zLjMuMyBbZXF1YWwucmFuZ2VdLzQsIGNoYW5nZSA8dHQ+Mipsb2cobGFzdCAtIGZpcnN0KSArIDE8L3R0Pgp0byA8dHQ+Mipsb2c8c3ViPjI8L3N1Yj4obGFzdCAtIGZpcnN0KSArIDxpPk88L2k+KDEpPC90dD4uPC9wPgoKPHA+PGk+W01hdHQgcHJvdmlkZWQgd29yZGluZ108L2k+PC9wPgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBjb25zaWRlcmVkIGp1c3Qgc2F5aW5nIDxpPk88L2k+KGxvZyBuKSBmb3IgYWxsIHRocmVlLCBidXQKICBkZWNpZGVkIHRoYXQgdGhyZXcgYXdheSB0b28gbXVjaCB2YWx1YWJsZSBpbmZvcm1hdGlvbi4gIFRoZSBmYWN0CiAgdGhhdCBsb3dlcl9ib3VuZCBpcyB0d2ljZSBhcyBmYXN0IGFzIGVxdWFsX3JhbmdlIGlzIGltcG9ydGFudC4KICBIb3dldmVyLCBpdCdzIGJldHRlciB0byBhbGxvdyBhbiBhcmJpdHJhcnkgYWRkaXRpdmUgY29uc3RhbnQgdGhhbiB0bwogIHNwZWNpZnkgYW4gZXhhY3QgY291bnQuICBBbiBleGFjdCBjb3VudCB3b3VsZCBoYXZlIHRvCiAgaW52b2x2ZSA8dHQ+Zmxvb3I8L3R0PiBvciA8dHQ+Y2VpbDwvdHQ+LiAgSXQgd291bGQgYmUgdG9vIGVhc3kgdG8KICBnZXQgdGhpcyB3cm9uZywgYW5kIGRvbid0IHByb3ZpZGUgYW55IHN1YnN0YW50aWFsIHZhbHVlIGZvciB1c2Vycy48L3A+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSIzODYiPjwvYT4zODYuIFJldmVyc2UgaXRlcmF0b3IncyBvcGVyYXRvcltdIGhhcyBpbXBvc3NpYmxlIHJldHVybiB0eXBlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI0LjQuMS4zLjExIFtyZXZlcnNlLml0ZXIub3AtPV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAyMDAyLTEwLTIzPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjRFIiPkRSPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkluIDI0LjQuMS4zLjExIFtyZXZlcnNlLml0ZXIub3AtPV0sIDx0dD5yZXZlcnNlX2l0ZXJhdG9yJmx0OyZndDs6Om9wZXJhdG9yW108L3R0PiAKaXMgc3BlY2lmaWVkIGFzIGhhdmluZyBhIHJldHVybiB0eXBlIG9mIDx0dD5yZXZlcnNlX2l0ZXJhdG9yOjpyZWZlcmVuY2U8L3R0PiwKd2hpY2ggaXMgdGhlIHNhbWUgYXMgPHR0Pml0ZXJhdG9yX3RyYWl0cyZsdDtJdGVyYXRvciZndDs6OnJlZmVyZW5jZTwvdHQ+LgooV2hlcmUgPHR0Pkl0ZXJhdG9yPC90dD4gaXMgdGhlIHVuZGVybHlpbmcgaXRlcmF0b3IgdHlwZS4pPC9wPgoKPHA+VGhlIHRyb3VibGUgaXMgdGhhdCA8dHQ+SXRlcmF0b3I8L3R0PidzIG93biBvcGVyYXRvcltdIGRvZXNuJ3QKICBuZWNlc3NhcmlseSBoYXZlIGEgcmV0dXJuIHR5cGUKICBvZiA8dHQ+aXRlcmF0b3JfdHJhaXRzJmx0O0l0ZXJhdG9yJmd0Ozo6cmVmZXJlbmNlPC90dD4uICAgSXRzCiAgcmV0dXJuIHR5cGUgaXMgbWVyZWx5IHJlcXVpcmVkIHRvIGJlIGNvbnZlcnRpYmxlCiAgdG8gPHR0Pkl0ZXJhdG9yPC90dD4ncyB2YWx1ZSB0eXBlLiAgVGhlIHJldHVybiB0eXBlIHNwZWNpZmllZCBmb3IKICByZXZlcnNlX2l0ZXJhdG9yJ3Mgb3BlcmF0b3JbXSB3b3VsZCB0aHVzIGFwcGVhciB0byBiZSBpbXBvc3NpYmxlLjwvcD4KCjxwPldpdGggdGhlIHJlc29sdXRpb24gb2YgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjk5Ij4yOTk8L2E+LCB0aGUgdHlwZSBvZgogIDx0dD5hW25dPC90dD4gd2lsbCBjb250aW51ZSB0byBiZSByZXF1aXJlZCAoZm9yIHJhbmRvbSBhY2Nlc3MKICBpdGVyYXRvcnMpIHRvIGJlIGNvbnZlcnRpYmxlIHRvIHRoZSB2YWx1ZSB0eXBlLCBhbmQgYWxzbyA8dHQ+YVtuXSA9CiAgdDwvdHQ+IHdpbGwgYmUgYSB2YWxpZCBleHByZXNzaW9uLiAgSW1wbGVtZW50YXRpb25zIG9mCiAgPHR0PnJldmVyc2VfaXRlcmF0b3I8L3R0PiB3aWxsIGxpa2VseSBuZWVkIHRvIHJldHVybiBhIHByb3h5IGZyb20KICA8dHQ+b3BlcmF0b3JbXTwvdHQ+IHRvIG1lZXQgdGhlc2UgcmVxdWlyZW1lbnRzLiBBcyBtZW50aW9uZWQgaW4gdGhlCiAgY29tbWVudCBmcm9tIERhdmUgQWJyYWhhbXMsIHRoZSBzaW1wbGVzdCB3YXkgdG8gc3BlY2lmeSB0aGF0CiAgPHR0PnJldmVyc2VfaXRlcmF0b3I8L3R0PiBtZWV0IHRoaXMgcmVxdWlyZW1lbnQgdG8ganVzdCBtYW5kYXRlCiAgaXQgYW5kIGxlYXZlIHRoZSByZXR1cm4gdHlwZSBvZiA8dHQ+b3BlcmF0b3JbXTwvdHQ+IHVuc3BlY2lmaWVkLjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+SW4gMjQuNC4xLjIgW3JldmVyc2UuaXRlci5yZXF1aXJlbWVudHNdIGNoYW5nZTo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT5yZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgbikgY29uc3Q7CjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT48Yj48aT51bnNwZWNpZmllZDwvaT48L2I+IG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIG4pIGNvbnN0OyAvLyBzZWUgMjQuMS41IFtyYW5kb20uYWNjZXNzLml0ZXJhdG9yc10KPC9wcmU+CjwvYmxvY2txdW90ZT4KCgoKCjxwPjxpPlsKQ29tbWVudHMgZnJvbSBEYXZlIEFicmFoYW1zOiBJTU8gd2Ugc2hvdWxkIHJlc29sdmUgMzg2IGJ5IGp1c3Qgc2F5aW5nCiAgICB0aGF0IHRoZSByZXR1cm4gdHlwZSBvZiByZXZlcnNlX2l0ZXJhdG9yJ3Mgb3BlcmF0b3JbXSBpcwogICAgdW5zcGVjaWZpZWQsIGFsbG93aW5nIHRoZSByYW5kb20gYWNjZXNzIGl0ZXJhdG9yIHJlcXVpcmVtZW50cyB0bwogICAgaW1wb3NlIGFuIGFwcHJvcHJpYXRlIHJldHVybiB0eXBlLiAgSWYgd2UgYWNjZXB0IDI5OSdzIHByb3Bvc2VkCiAgICByZXNvbHV0aW9uIChhbmQgSSB0aGluayB3ZSBzaG91bGQpLCB0aGUgcmV0dXJuIHR5cGUgd2lsbCBiZQogICAgcmVhZGFibGUgYW5kIHdyaXRhYmxlLCB3aGljaCBpcyBhYm91dCBhcyBnb29kIGFzIHdlIGNhbiBkby4KXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjM4OSI+PC9hPjM4OS4gQ29uc3Qgb3ZlcmxvYWQgb2YgdmFsYXJyYXk6Om9wZXJhdG9yW10gcmV0dXJucyBieSB2YWx1ZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNi41LjIuMyBbdmFsYXJyYXkuYWNjZXNzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBHYWJyaWVsIERvcyBSZWlzIDxiPkRhdGU6PC9iPiAyMDAyLTExLTA4PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCN2YWxhcnJheS5hY2Nlc3MiPmlzc3VlczwvYT4gaW4gW3ZhbGFycmF5LmFjY2Vzc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EdXBsaWNhdGUgb2Y6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM3NyI+Nzc8L2E+PC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbTo8L3A+CjxwcmU+ICAgICNpbmNsdWRlICZsdDtpb3N0cmVhbSZndDsKICAgICNpbmNsdWRlICZsdDtvc3RyZWFtJmd0OwogICAgI2luY2x1ZGUgJmx0O3ZlY3RvciZndDsKICAgICNpbmNsdWRlICZsdDt2YWxhcnJheSZndDsKICAgICNpbmNsdWRlICZsdDthbGdvcml0aG0mZ3Q7CiAgICAjaW5jbHVkZSAmbHQ7aXRlcmF0b3ImZ3Q7CiAgICB0ZW1wbGF0ZSZsdDt0eXBlbmFtZSBBcnJheSZndDsKICAgIHZvaWQgcHJpbnQoY29uc3QgQXJyYXkmYW1wOyBhKQogICAgewogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQXJyYXk6OnZhbHVlX3R5cGUgVDsKICAgIGNvcHkoJmFtcDthWzBdLCAmYW1wO2FbMF0gKyBhLnNpemUoKSwKICAgIG9zdHJlYW1faXRlcmF0b3ImbHQ7VCZndDsoc3RkOjpjb3V0LCAiICIpKTsKICAgIH0KICAgIHRlbXBsYXRlJmx0O3R5cGVuYW1lIFQsIHVuc2lnbmVkIE4mZ3Q7CiAgICB1bnNpZ25lZCBzaXplKFQoJmFtcDspW05dKSB7IHJldHVybiBOOyB9CiAgICBpbnQgbWFpbigpCiAgICB7CiAgICBkb3VibGUgYXJyYXlbXSA9IHsgMC44OSwgOS4zLCA3LCA2LjIzIH07CiAgICBzdGQ6OnZlY3RvciZsdDtkb3VibGUmZ3Q7IHYoYXJyYXksIGFycmF5ICsgc2l6ZShhcnJheSkpOwogICAgc3RkOjp2YWxhcnJheSZsdDtkb3VibGUmZ3Q7IHcoYXJyYXksIHNpemUoYXJyYXkpKTsKICAgIHByaW50KHYpOyAvLyAjMQogICAgc3RkOjpjb3V0ICZsdDsmbHQ7IHN0ZDo6ZW5kbDsKICAgIHByaW50KHcpOyAvLyAjMgogICAgc3RkOjpjb3V0ICZsdDsmbHQ7IHN0ZDo6ZW5kbDsKICAgIH0KPC9wcmU+Cgo8cD5XaGlsZSB0aGUgY2FsbCBudW1iZXJlZCAjMSBzdWNjZWVkcywgdGhlIGNhbGwgbnVtYmVyZWQgIzIgZmFpbHMKYmVjYXVzZSB0aGUgY29uc3QgdmVyc2lvbiBvZiB0aGUgbWVtYmVyIGZ1bmN0aW9uCnZhbGFycmF5Jmx0O1QmZ3Q7OjpvcGVyYXRvcltdKHNpemVfdCkgcmV0dXJucyBhIHZhbHVlIGluc3RlYWQgb2YgYQpjb25zdC1yZWZlcmVuY2UuIFRoYXQgc2VlbXMgdG8gYmUgc28gZm9yIG5vIGFwcGFyZW50IHJlYXNvbiwgbm8KYmVuZWZpdC4gTm90IG9ubHkgZG9lcyB0aGF0IGRlZmVhdHMgdXNlcnMnIGV4cGVjdGF0aW9uIGJ1dCBpdCBhbHNvCmRvZXMgaGluZGVyIGV4aXN0aW5nIHNvZnR3YXJlICh3cml0dGVuIGVpdGhlciBpbiBDIG9yIEZvcnRyYW4pCmludGVncmF0aW9uIHdpdGhpbiBwcm9ncmFtcyB3cml0dGVuIGluIEMrKy4gIFRoZXJlIGlzIG5vIHJlYXNvbiB3aHkKc3Vic2NyaXB0aW5nIGFuIGV4cHJlc3Npb24gb2YgdHlwZSB2YWxhcnJheSZsdDtUJmd0OyB0aGF0IGlzIGNvbnN0LXF1YWxpZmllZApzaG91bGQgbm90IHJldHVybiBhIGNvbnN0IFQmYW1wOy48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiB0aGUgY2xhc3Mgc3lub3BzaXMgaW4gMjYuNS4yIFt0ZW1wbGF0ZS52YWxhcnJheV0sIGFuZCBpbgoyNi41LjIuMyBbdmFsYXJyYXkuYWNjZXNzXSBqdXN0IGFib3ZlIHBhcmFncmFwaCAxLCBjaGFuZ2U8L3A+CjxwcmU+ICBUIG9wZXJhdG9yW10oc2l6ZV90IGNvbnN0KTsKPC9wcmU+CjxwPnRvPC9wPgo8cHJlPiAgY29uc3QgVCZhbXA7IG9wZXJhdG9yW10oc2l6ZV90IGNvbnN0KTsKPC9wcmU+Cgo8cD48aT5bS29uYTogZml4ZWQgYSBtaW5vciB0eXBvOiBwdXQgc2VtaWNvbG9uIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUKICB3ZWhyZSBpdCBiZWxvbmdzLl08L2k+PC9wPgoKCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlJldHVybiBieSB2YWx1ZSBzZWVtcyB0byBzZXJ2ZSBubyBwdXJwb3NlLiAgVmFsYXJheSB3YXMgZXhwbGljaXRseQpkZXNpZ25lZCB0byBoYXZlIGEgc3BlY2lmaWVkIGxheW91dCBzbyB0aGF0IGl0IGNvdWxkIGVhc2lseSBiZQppbnRlZ3JhdGVkIHdpdGggbGlicmFyaWVzIGluIG90aGVyIGxhbmd1YWdlcywgYW5kIHJldHVybiBieSB2YWx1ZQpkZWZlYXRzIHRoYXQgcHVycG9zZS4gIEl0IGlzIGJlbGlldmVkIHRoYXQgdGhpcyBjaGFuZ2Ugd2lsbCBoYXZlIG5vCmltcGFjdCBvbiBhbGxvd2FibGUgb3B0aW1pemF0aW9ucy48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzkxIj48L2E+MzkxLiBub24tbWVtYmVyIGZ1bmN0aW9ucyBzcGVjaWZpZWQgYXMgY29uc3Q8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjIuMS4zLjIgW2NvbnZlcnNpb25zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBKYW1lcyBLYW56ZSA8Yj5EYXRlOjwvYj4gMjAwMi0xMi0xMDwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIHNwZWNpZmljYXRpb25zIG9mIHRvdXBwZXIgYW5kIHRvbG93ZXIgYm90aCBzcGVjaWZ5IHRoZSBmdW5jdGlvbnMgYXMKY29uc3QsIGFsdGhvdWdodCB0aGV5IGFyZSBub3QgbWVtYmVyIGZ1bmN0aW9ucywgYW5kIGFyZSBub3Qgc3BlY2lmaWVkIGFzCmNvbnN0IGluIHRoZSBoZWFkZXIgZmlsZSBzeW5vcHNpcyBpbiBzZWN0aW9uIDIyLjEgW2xvY2FsZXNdLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4xLjMuMiBbY29udmVyc2lvbnNdLCByZW1vdmUgPHR0PmNvbnN0PC90dD4gZnJvbSB0aGUgZnVuY3Rpb24KICBkZWNsYXJhdGlvbnMgb2Ygc3RkOjp0b3VwcGVyIGFuZCBzdGQ6OnRvbG93ZXI8L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+PHA+Rml4ZXMgYW4gb2J2aW91cyB0eXBvPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iMzk1Ij48L2E+Mzk1LiBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIGRlZmluaXRpb25zIG9mIHJhbmQoKSBhbmQgcmFuZG9tX3NodWZmbGUoKTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNi43IFtjLm1hdGhdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEphbWVzIEthbnplIDxiPkRhdGU6PC9iPiAyMDAzLTAxLTAzPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNjLm1hdGgiPmlzc3VlczwvYT4gaW4gW2MubWF0aF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJbiAyNi43IFtjLm1hdGhdLCB0aGUgQysrIHN0YW5kYXJkIHJlZmVycyB0byB0aGUgQyBzdGFuZGFyZCBmb3IgdGhlCmRlZmluaXRpb24gb2YgcmFuZCgpOyBpbiB0aGUgQyBzdGFuZGFyZCwgaXQgaXMgd3JpdHRlbiB0aGF0ICJUaGUKaW1wbGVtZW50YXRpb24gc2hhbGwgYmVoYXZlIGFzIGlmIG5vIGxpYnJhcnkgZnVuY3Rpb24gY2FsbHMgdGhlIHJhbmQKZnVuY3Rpb24uIgo8L3A+Cgo8cD4KSW4gMjUuMi4xMiBbYWxnLnJhbmRvbS5zaHVmZmxlXSwgdGhlcmUgaXMgbm8gc3BlY2lmaWNhdGlvbiBhcyB0bwpob3cgdGhlIHR3byBwYXJhbWV0ZXIgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gZ2VuZXJhdGVzIGl0cyByYW5kb20KdmFsdWUuICBJIGJlbGlldmUgdGhhdCBhbGwgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgaW4gZmFjdCBjYWxsIHJhbmQoKQooaW4gY29udHJhZGljdGlvbiB3aXRoIHRoZSByZXF1aXJlbWVudCBhdm92ZSk7IGlmIGFuIGltcGxlbWVudGF0aW9uIGRvZXMKbm90IGNhbGwgcmFuZCgpLCB0aGVyZSBpcyB0aGUgcXVlc3Rpb24gb2YgaG93IHdoYXRldmVyIHJhbmRvbSBnZW5lcmF0b3IKaXQgZG9lcyB1c2UgaXMgc2VlZGVkLiAgU29tZXRoaW5nIGlzIG1pc3NpbmcuCjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gW2xpYi5jLm1hdGhdLCBhZGQgYSBwYXJhZ3JhcGggc3BlY2lmeWluZyB0aGF0IHRoZSBDIGRlZmluaXRpb24gb2YKcmFuZCBzaGFsIGJlIG1vZGlmaWVkIHRvIHNheSB0aGF0ICJVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgdGhlCmltcGxlbWVudGF0aW9uIHNoYWxsIGJlaGF2ZSBhcyBpZiBubyBsaWJyYXJ5IGZ1bmN0aW9uIGNhbGxzIHRoZSByYW5kCmZ1bmN0aW9uLiIKPC9wPgoKPHA+CkluIFtsaWIuYWxnLnJhbmRvbS5zaHVmZmxlXSwgYWRkIGEgc2VudGVuY2UgdG8gdGhlIGVmZmVjdCB0aGF0ICJJbgp0aGUgdHdvIGFyZ3VtZW50IGZvcm0gb2YgdGhlIGZ1bmN0aW9uLCB0aGUgdW5kZXJseWluZyBzb3VyY2Ugb2YKcmFuZG9tIG51bWJlcnMgaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4gW05vdGU6IGluIHBhcnRpY3VsYXIsIGFuCmltcGxlbWVudGF0aW9uIGlzIHBlcm1pdHRlZCB0byB1c2UgPHR0PnJhbmQ8L3R0Pi5dCjwvcD4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gcHJvcG9zZWQgcmVxdWlyaW5nIHRoZQogIHR3by1hcmd1bWVudCBmcm9tIG9mIDx0dD5yYW5kb21fc2h1ZmZsZTwvdHQ+IHRvCiAgdXNlIDx0dD5yYW5kPC90dD4uIFdlIGRvbid0IHdhbnQgdG8gZG8gdGhhdCwgYmVjYXVzZSBzb21lIGV4aXN0aW5nCiAgaW1wbGVtZW50YXRpb25zIGFscmVhZHkgdXNlIHNvbWV0aGluZyBlbHNlOiBnY2MKICB1c2VzIDx0dD5scmFuZDQ4PC90dD4sIGZvciBleGFtcGxlLiAgVXNpbmcgPHR0PnJhbmQ8L3R0PiBwcmVzZW50cyBhCiAgcHJvYmxlbSBpZiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzZXF1ZW5jZSBpcyBncmVhdGVyIHRoYW4KICBSQU5EX01BWC48L3A+IAoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQwMCI+PC9hPjQwMC4gcmVkdW5kYW50IHR5cGUgY2FzdCBpbiBsaWIuYWxsb2NhdG9yLm1lbWJlcnM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAuNy41LjEgW2FsbG9jYXRvci5tZW1iZXJzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJrdXMgTWF1aGFydCA8Yj5EYXRlOjwvYj4gMjAwMy0wMi0yNzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxsb2NhdG9yLm1lbWJlcnMiPmlzc3VlczwvYT4gaW4gW2FsbG9jYXRvci5tZW1iZXJzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CjIwLjcuNS4xIFthbGxvY2F0b3IubWVtYmVyc10gYWxsb2NhdG9yIG1lbWJlcnMsIGNvbnRhaW5zCnRoZSBmb2xsb3dpbmcgMyBsaW5lczoKPC9wPgoKPHByZT4gIDEyIFJldHVybnM6IG5ldygodm9pZCAqKSBwKSBUKCB2YWwpCiAgICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgcCk7CiAgMTMgUmV0dXJuczogKChUKikgcCktJmd0O35UKCkKPC9wcmU+Cgo8cD4KVGhlIHR5cGUgY2FzdCAiKFQqKSBwIiBpbiB0aGUgbGFzdCBsaW5lIGlzIHJlZHVuZGFudCBjYXVzZQp3ZSBrbm93IHRoYXQgc3RkOjphbGxvY2F0b3ImbHQ7VCZndDs6OnBvaW50ZXIgaXMgYSB0eXBlZGVmIGZvciBUKi4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlcGxhY2UgIigoVCopIHApIiB3aXRoICJwIi4KPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPjxwPkp1c3QgYSB0eXBvLCB0aGlzIGlzIHJlYWxseSBlZGl0b3JpYWwuPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDAxIj48L2E+NDAxLiAgaW5jb3JyZWN0IHR5cGUgY2FzdHMgaW4gdGFibGUgMzIgaW4gbGliLmFsbG9jYXRvci5yZXF1aXJlbWVudHM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAuMS4yIFthbGxvY2F0b3IucmVxdWlyZW1lbnRzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJrdXMgTWF1aGFydCA8Yj5EYXRlOjwvYj4gMjAwMy0wMi0yNzwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI2FsbG9jYXRvci5yZXF1aXJlbWVudHMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFthbGxvY2F0b3IucmVxdWlyZW1lbnRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2FsbG9jYXRvci5yZXF1aXJlbWVudHMiPmlzc3VlczwvYT4gaW4gW2FsbG9jYXRvci5yZXF1aXJlbWVudHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSSB0aGluayB0aGF0IGluIHBhcjIgb2YgIFtkZWZhdWx0LmNvbi5yZXFdIHRoZSBsYXN0IHR3bwpsaW5lcyBvZiB0YWJsZSAzMiBjb250YWluIHR3byBpbmNvcnJlY3QgdHlwZSBjYXN0cy4gVGhlIGxpbmVzIGFyZSAuLi4KPC9wPgoKPHByZT4gIGEuY29uc3RydWN0KHAsdCkgICBFZmZlY3Q6IG5ldygodm9pZCopcCkgVCh0KQogIGEuZGVzdHJveShwKSAgICAgICBFZmZlY3Q6ICgoVCopcCk/LSZndDt+VCgpCjwvcHJlPgoKPHA+Ci4uLi4gd2l0aCB0aGUgcHJlcmVxdWlzaXRzIGNvbWluZyBmcm9tIHRoZSBwcmVjZWRpbmcgdHdvIHBhcmFncmFwaHMsIGVzcGVjaWFsbHkKZnJvbSB0YWJsZSAzMToKPC9wPgoKPHByZT4gIGFsbG9jJmx0O1QmZ3Q7ICAgICAgICAgICAgIGEgICAgIDsvLyBhbiBhbGxvY2F0b3IgZm9yIFQKICBhbGxvYyZsdDtUJmd0Ozo6cG9pbnRlciAgICBwICAgICA7Ly8gcmFuZG9tIGFjY2VzcyBpdGVyYXRvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAobWF5IGJlIGRpZmZlcmVudCBmcm9tIFQqKQogIGFsbG9jJmx0O1QmZ3Q7OjpyZWZlcmVuY2UgIHIgPSAqcDsvLyBUJmFtcDsKICBUIGNvbnN0JmFtcDsgICAgICAgICAgICAgdCAgICAgOwo8L3ByZT4KCjxwPgpGb3IgdGhhdCB0d28gdHlwZSBjYXN0cyAoIih2b2lkKilwIiBhbmQgIihUKilwIikgdG8gYmUgd2VsbC1mb3JtZWQKdGhpcyB3b3VsZCByZXF1aXJlIHRoZW4gY29udmVyc2lvbnMgdG8gVCogYW5kIHZvaWQqIGZvciBhbGwKYWxsb2MmbHQ7VCZndDs6OnBvaW50ZXIsIHNvIGl0IHdvdWxkIGltcGxpY2l0ZWx5IGludHJvZHVjZSBleHRyYQpyZXF1aXJlbWVudHMgZm9yIGFsbG9jJmx0O1QmZ3Q7Ojpwb2ludGVyLCBhZGRpdGlvbmFsbHkgdG8gdGhlIG9ubHkKY3VycmVudCByZXF1aXJlbWVudCAoYmVpbmcgYSByYW5kb20gYWNjZXNzIGl0ZXJhdG9yKS4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPgpBY2NlcHQgcHJvcG9zZWQgd29yZGluZyBmcm9tCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjI0MzYucGRmIj5OMjQzNjwvYT4gcGFydCAxLgo8L3A+Cgo8cD4KTm90ZTogQWN0dWFsbHkgSSB3b3VsZCBwcmVmZXIgdG8gcmVwbGFjZSAiKChUKilwKT8tJmd0O2R0b3JfbmFtZSIgd2l0aAoicD8tJmd0O2R0b3JfbmFtZSIsIGJ1dCBBRkFJQ1MgdGhpcyBpcyBub3QgcG9zc2libGUgY2F1c2Ugb2YgYW4gb21pc3Npb24KaW4gMTMuNS42IFtvdmVyLnJlZl0gKGZvciB3aGljaCBJIGhhdmUgZmlsZWQgYW5vdGhlciBEUiBvbiAyOS4xMS4yMDAyKS4KPC9wPgoKPHA+PGk+W0tvbmE6IFRoZSBMV0cgdGhpbmtzIHRoaXMgaXMgc29tZXdoZXJlIG9uIHRoZSBib3JkZXIgYmV0d2VlbgogIE9wZW4gYW5kIE5BRC4gIFRoZSBpbnRlbmQgaXMgY2xlYXI6IDx0dD5jb25zdHJ1Y3Q8L3R0PiBjb25zdHJ1Y3RzIGFuCiAgb2JqZWN0IGF0IHRoZSBsb2NhdGlvbiA8aT5wPC9pPi4gIEl0J3MgcmVhZGluZyB0b28gbXVjaCBpbnRvIHRoZQogIGRlc2NyaXB0aW9uIHRvIHRoaW5rIHRoYXQgbGl0ZXJhbGx5IGNhbGxpbmcgPHR0Pm5ldzwvdHQ+IGlzCiAgcmVxdWlyZWQuICBUd2Vha2luZyB0aGlzIGRlc2NyaXB0aW9uIGlzIGxvdyBwcmlvcml0eSB1bnRpbCB3ZSBjYW4gZG8KICBhIHRob3JvdWdoIHJldmlldyBvZiBhbGxvY2F0b3JzLCBhbmQsIGluIHBhcnRpY3VsYXIsIGFsbG9jYXRvcnMgd2l0aAogIG5vbi1kZWZhdWx0IHBvaW50ZXIgdHlwZXMuXTwvaT48L3A+CgoKPHA+PGk+WwpCYXRhdmlhOiAgUHJvcG9zZWQgcmVzb2x1dGlvbiBjaGFuZ2VkIHRvIGxlc3MgY29kZSBhbmQgbW9yZSBkZXNjcmlwdGlvbi4KXTwvaT48L3A+CgoKPHA+PGk+Wwpwb3N0IE94Zm9yZDogIFRoaXMgd291bGQgYmUgcmVuZGVyZWQgTkFEIEVkaXRvcmlhbCBieSBhY2NlcHRhbmNlIG9mCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjIyNTcuaHRtbCI+TjIyNTc8L2E+LgpdPC9pPjwvcD4KCgo8cD48aT5bCktvbmEgKDIwMDcpOiBUaGUgTFdHIGFkb3B0ZWQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gb2YgTjIzODcgZm9yIHRoaXMgaXNzdWUgd2hpY2gKd2FzIHN1YnNlcXVlbnRseSBzcGxpdCBvdXQgaW50byBhIHNlcGFyYXRlIHBhcGVyIE4yNDM2IGZvciB0aGUgcHVycG9zZXMgb2Ygdm90aW5nLgpUaGUgcmVzb2x1dGlvbiBpbiBOMjQzNiBhZGRyZXNzZXMgdGhpcyBpc3N1ZS4gIFRoZSBMV0cgdm90ZWQgdG8gYWNjZWxlcmF0ZSB0aGlzCmlzc3VlIHRvIFJlYWR5IHN0YXR1cyB0byBiZSB2b3RlZCBpbnRvIHRoZSBXUCBhdCBLb25hLgpdPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQwMiI+PC9hPjQwMi4gd3JvbmcgbmV3IGV4cHJlc3Npb24gaW4gW3NvbWVfXWFsbG9jYXRvcjo6Y29uc3RydWN0PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjEuMiBbYWxsb2NhdG9yLnJlcXVpcmVtZW50c10sIDIwLjcuNS4xIFthbGxvY2F0b3IubWVtYmVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFya3VzIE1hdWhhcnQgPGI+RGF0ZTo8L2I+IDIwMDMtMDItMjc8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNhbGxvY2F0b3IucmVxdWlyZW1lbnRzIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbYWxsb2NhdG9yLnJlcXVpcmVtZW50c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNhbGxvY2F0b3IucmVxdWlyZW1lbnRzIj5pc3N1ZXM8L2E+IGluIFthbGxvY2F0b3IucmVxdWlyZW1lbnRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoaXMgYXBwbGllcyB0byB0aGUgbmV3IGV4cHJlc3Npb24gdGhhdCBpcyBjb250YWluZWQgaW4gYm90aCBwYXIxMiBvZgoyMC43LjUuMSBbYWxsb2NhdG9yLm1lbWJlcnNdIGFuZCBpbiBwYXIyICh0YWJsZSAzMikgb2YgIFtkZWZhdWx0LmNvbi5yZXFdLgpJIHRoaW5rIHRoaXMgbmV3IGV4cHJlc3Npb24gaXMgd3JvbmcsIGludm9sdmluZyB1bmludGVuZGVkIHNpZGUKZWZmZWN0cy4KPC9wPgoKCjxwPjIwLjcuNS4xIFthbGxvY2F0b3IubWVtYmVyc10gIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgMyBsaW5lczo8L3A+Cgo8cHJlPiAgMTEgUmV0dXJuczogdGhlIGxhcmdlc3QgdmFsdWUgTiBmb3Igd2hpY2ggdGhlIGNhbGwgYWxsb2NhdGUoTiwwKSBtaWdodCBzdWNjZWVkLgogICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgcCwgY29uc3RfcmVmZXJlbmNlIHZhbCk7CiAgMTIgUmV0dXJuczogbmV3KCh2b2lkICopIHApIFQoIHZhbCkKPC9wcmU+CgoKPHA+IFtkZWZhdWx0LmNvbi5yZXFdIGluIHRhYmxlIDMyIGhhcyB0aGUgZm9sbG93aW5nIGxpbmU6PC9wPgo8cHJlPiAgYS5jb25zdHJ1Y3QocCx0KSAgIEVmZmVjdDogbmV3KCh2b2lkKilwKSBUKHQpCjwvcHJlPgoKPHA+Ci4uLi4gd2l0aCB0aGUgcHJlcmVxdWlzaXRzIGNvbWluZyBmcm9tIHRoZSBwcmVjZWRpbmcgdHdvIHBhcmFncmFwaHMsCmVzcGVjaWFsbHkgZnJvbSB0YWJsZSAzMToKPC9wPgoKPHByZT4gIGFsbG9jJmx0O1QmZ3Q7ICAgICAgICAgICAgIGEgICAgIDsvLyBhbiBhbGxvY2F0b3IgZm9yIFQKICBhbGxvYyZsdDtUJmd0Ozo6cG9pbnRlciAgICBwICAgICA7Ly8gcmFuZG9tIGFjY2VzcyBpdGVyYXRvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAobWF5IGJlIGRpZmZlcmVudCBmcm9tIFQqKQogIGFsbG9jJmx0O1QmZ3Q7OjpyZWZlcmVuY2UgIHIgPSAqcDsvLyBUJmFtcDsKICBUIGNvbnN0JmFtcDsgICAgICAgICAgICAgdCAgICAgOwo8L3ByZT4KCjxwPgpDYXVzZSBvZiB1c2luZyAibmV3IiBidXQgbm90ICI6Om5ldyIsIGFueSBleGlzdGluZyAiVDo6b3BlcmF0b3IgbmV3IgpmdW5jdGlvbiB3aWxsIGhpZGUgdGhlIGdsb2JhbCBwbGFjZW1lbnQgbmV3IGZ1bmN0aW9uLiBXaGVuIHRoZXJlIGlzIG5vCiJUOjpvcGVyYXRvciBuZXciIHdpdGggYWRlcXVhdGUgc2lnbmF0dXJlLApldmVyeV9hbGxvYyZsdDtUJmd0Ozo6Y29uc3RydWN0KC4uKSBpcyBpbGwtZm9ybWVkLCBhbmQgbW9zdApzdGQ6OmNvbnRhaW5lciZsdDtULGV2ZXJ5X2FsbG9jJmx0O1QmZ3Q7Jmd0OyB1c2UgaXQ7IGEgd29ya2Fyb3VuZAp3b3VsZCBiZSBhZGRpbmcgcGxhY2VtZW50IG5ldyBhbmQgZGVsZXRlIGZ1bmN0aW9ucyB3aXRoIGFkZXF1YXRlCnNpZ25hdHVyZSBhbmQgc2VtYW50aWMgdG8gY2xhc3MgVCwgYnV0IGNsYXNzIFQgbWlnaHQgY29tZSBmcm9tIGFub3RoZXIKcGFydHkuIE1heWJlIGV2ZW4gd29yc2UgaXMgdGhlIGNhc2Ugd2hlbiBUIGhhcyBwbGFjZW1lbnQgbmV3IGFuZApkZWxldGUgZnVuY3Rpb25zIHdpdGggYWRlcXVhdGUgc2lnbmF0dXJlIGJ1dCB3aXRoICJ1bmtub3duIiBzZW1hbnRpYzoKSSBkb250IGxpa2UgdG8gc3BlY3VsYXRlIGFib3V0IGl0LCBidXQgd2hvZXZlciBpbXBsZW1lbnRzCmFueV9jb250YWluZXImbHQ7VCxhbnlfYWxsb2MmZ3Q7IGFuZCB3YW50cyB0byB1c2UgY29uc3RydWN0KC4uKQpwcm9iYWJseSBtdXN0IHRoaW5rIGFib3V0IGl0Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KUmVwbGFjZSAibmV3IiB3aXRoICI6Om5ldyIgaW4gYm90aCBjYXNlcy4KPC9wPgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDAzIj48L2E+NDAzLiBiYXNpY19zdHJpbmc6OnN3YXAgc2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb25zPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIxLjMuNi44IFtzdHJpbmc6OnN3YXBdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEJlbWFuIERhd2VzIDxiPkRhdGU6PC9iPiAyMDAzLTAzLTI1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmc6OnN3YXAiPmlzc3VlczwvYT4gaW4gW3N0cmluZzo6c3dhcF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+Cgo8cD4Kc3RkOjpiYXNpY19zdHJpbmcsIDIxLjMgW2Jhc2ljLnN0cmluZ10gcGFyYWdyYXBoIDIgc2F5cyB0aGF0CmJhc2ljX3N0cmluZyAiY29uZm9ybXMgdG8gdGhlIHJlcXVpcmVtZW50cyBvZiBhIFNlcXVlbmNlLCBhcyBzcGVjaWZpZWQKaW4gKDIzLjEuMSkuIiBUaGUgc2VxdWVuY2UgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBpbiAoMjMuMS4xKSB0byBub3QKaW5jbHVkZSBhbnkgcHJvaGliaXRpb24gb24gc3dhcCBtZW1iZXJzIHRocm93aW5nIGV4Y2VwdGlvbnMuCjwvcD4KCjxwPgpTZWN0aW9uIDIzLjEgW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdIHBhcmFncmFwaCAxMCBkb2VzIGxpbWl0IGNvbmRpdGlvbnMgdW5kZXIKd2hpY2ggZXhjZXB0aW9ucyBtYXkgYmUgdGhyb3duLCBidXQgYXBwbGllcyBvbmx5IHRvICJhbGwgY29udGFpbmVyCnR5cGVzIGRlZmluZWQgaW4gdGhpcyBjbGF1c2UiIGFuZCBzbyBleGNsdWRlcyBiYXNpY19zdHJpbmc6OnN3YXAKYmVjYXVzZSBpdCBpcyBkZWZpbmVkIGVsc2V3aGVyZS4KPC9wPgoKPHA+CkVyaWMgTmllYmxlciBwb2ludHMgb3V0IHRoYXQgMjEuMyBbYmFzaWMuc3RyaW5nXSBwYXJhZ3JhcGggNSBleHBsaWNpdGx5CnBlcm1pdHMgYmFzaWNfc3RyaW5nOjpzd2FwIHRvIGludmFsaWRhdGVzIGl0ZXJhdG9ycywgd2hpY2ggaXMKZGlzYWxsb3dlZCBieSAyMy4xIFtjb250YWluZXIucmVxdWlyZW1lbnRzXSBwYXJhZ3JhcGggMTAuIFRodXMgdGhlIHN0YW5kYXJkIHdvdWxkCmJlIGNvbnRyYWRpY3RvcnkgaWYgaXQgd2VyZSByZWFkIG9yIGV4dGVuZGVkIHRvIHJlYWQgYXMgaGF2aW5nCmJhc2ljX3N0cmluZyBtZWV0IDIzLjEgW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdIHBhcmFncmFwaCAxMCByZXF1aXJlbWVudHMuCjwvcD4KCjxwPgpZZXQgc2V2ZXJhbCBMV0cgbWVtYmVycyBoYXZlIGV4cHJlc3NlZCB0aGUgYmVsaWVmIHRoYXQgdGhlIG9yaWdpbmFsCmludGVudCB3YXMgdGhhdCBiYXNpY19zdHJpbmc6OnN3YXAgc2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb25zIGFzCnNwZWNpZmllZCBieSAyMy4xIFtjb250YWluZXIucmVxdWlyZW1lbnRzXSBwYXJhZ3JhcGggMTAsIGFuZCB0aGF0IHRoZSBzdGFuZGFyZCBpcwp1bmNsZWFyIG9uIHRoaXMgaXNzdWUuIFRoZSBjb21wbGV4aXR5IG9mIGJhc2ljX3N0cmluZzo6c3dhcCBpcwpzcGVjaWZpZWQgYXMgImNvbnN0YW50IHRpbWUiLCBpbmRpY2F0aW5nIHRoZSBpbnRlbnQgd2FzIHRvIGF2b2lkCmNvcHlpbmcgKHdoaWNoIGNvdWxkIGNhdXNlIGEgYmFkX2FsbG9jIG9yIG90aGVyIGV4Y2VwdGlvbikuIEFuCmltcG9ydGFudCB1c2Ugb2Ygc3dhcCBpcyB0byBlbnN1cmUgdGhhdCBleGNlcHRpb25zIGFyZSBub3QgdGhyb3duIGluCmV4Y2VwdGlvbi1zYWZlIGNvZGUuCjwvcD4KCjxwPgpOb3RlOiBUaGVyZSByZW1haW5zIGxvbmcgc3RhbmRpbmcgY29uY2VybiBvdmVyIHdoZXRoZXIgb3Igbm90IGl0IGlzCnBvc3NpYmxlIHRvIHJlYXNvbmFibHkgbWVldCB0aGUgMjMuMSBbY29udGFpbmVyLnJlcXVpcmVtZW50c10gcGFyYWdyYXBoIDEwIHN3YXAKcmVxdWlyZW1lbnRzIHdoZW4gYWxsb2NhdG9ycyBhcmUgdW5lcXVhbC4gVGhlIHNwZWNpZmljYXRpb24gb2YKYmFzaWNfc3RyaW5nOjpzd2FwIGV4Y2VwdGlvbiByZXF1aXJlbWVudHMgaXMgaW4gbm8gd2F5IGludGVuZGVkIHRvCmFkZHJlc3MsIHByZWp1ZGljZSwgb3Igb3RoZXJ3aXNlIGltcGFjdCB0aGF0IGNvbmNlcm4uCjwvcD4KCgoKCgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDIxLjMuNi44IFtzdHJpbmc6OnN3YXBdLCBhZGQgYSB0aHJvd3MgY2xhdXNlOgo8L3A+Cgo8cD4KVGhyb3dzOiBTaGFsbCBub3QgdGhyb3cgZXhjZXB0aW9ucy4KPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQwNCI+PC9hPjQwNC4gTWF5IGEgcmVwbGFjZW1lbnQgYWxsb2NhdGlvbiBmdW5jdGlvbiBiZSBkZWNsYXJlZCBpbmxpbmU/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE3LjQuMy41IFtyZXBsYWNlbWVudC5mdW5jdGlvbnNdLCAxOC41LjEgW25ldy5kZWxldGVdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMjAwMy0wNC0yNDwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGVpZ2h0IGJhc2ljIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIChzaW5nbGUtb2JqZWN0CmFuZCBhcnJheSB2ZXJzaW9ucyBvZiA6Om9wZXJhdG9yIG5ldyBhbmQgOjpvcGVyYXRvciBkZWxldGUsIGluIHRoZQpvcmRpbmFyeSBhbmQgbm90aHJvdyBmb3JtcykgYXJlIHJlcGxhY2VhYmxlLiAgQSBDKysgcHJvZ3JhbSBtYXkKcHJvdmlkZSBhbiBhbHRlcm5hdGl2ZSBkZWZpbml0aW9uIGZvciBhbnkgb2YgdGhlbSwgd2hpY2ggd2lsbCBiZSB1c2VkCmluIHByZWZlcmVuY2UgdG8gdGhlIGltcGxlbWVudGF0aW9uJ3MgZGVmaW5pdGlvbi4gIAo8L3A+Cgo8cD4KVGhyZWUgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzdGFuZGFyZCBtZW50aW9uIHJlcXVpcmVtZW50cyBvbgpyZXBsYWNlbWVudCBmdW5jdGlvbnM6IDE3LjQuMy41IFtyZXBsYWNlbWVudC5mdW5jdGlvbnNdLCAxOC41LjEuMSBbbmV3LmRlbGV0ZS5zaW5nbGVdCmFuZCAxOC41LjEuMiBbbmV3LmRlbGV0ZS5hcnJheV0sIGFuZCAzLjcuMiBbYmFzaWMuc3RjLmF1dG9dLgo8L3A+Cgo8cD5Ob25lIG9mIHRoZXNlIHRocmVlIHBsYWNlcyBzYXkgd2hldGhlciBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uIG1heQogIGJlIGRlY2xhcmVkIGlubGluZS4gIDE4LjUuMS4xIFtuZXcuZGVsZXRlLnNpbmdsZV0gcGFyYWdyYXBoIDIgc3BlY2lmaWVzIGEKICBzaWduYXR1cmUgZm9yIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbiwgYnV0IHRoYXQncyBub3QgZW5vdWdoOgogIHRoZSA8dHQ+aW5saW5lPC90dD4gc3BlY2lmaWVyIGlzIG5vdCBwYXJ0IG9mIGEgZnVuY3Rpb24ncyBzaWduYXR1cmUuCiAgT25lIG1pZ2h0IGFsc28gcmVhc29uIGZyb20gNy4xLjIgW2RjbC5mY3Quc3BlY10gcGFyYWdyYXBoIDIsIHdoaWNoCiAgcmVxdWlyZXMgdGhhdCAiYW4gaW5saW5lIGZ1bmN0aW9uIHNoYWxsIGJlIGRlZmluZWQgaW4gZXZlcnkKICB0cmFuc2xhdGlvbiB1bml0IGluIHdoaWNoIGl0IGlzIHVzZWQsIiBidXQgdGhpcyBtYXkgbm90IGJlIHF1aXRlCiAgc3BlY2lmaWMgZW5vdWdoIGVpdGhlci4gIFdlIHNob3VsZCBlaXRoZXIgZXhwbGljaXRseSBhbGxvdyBvcgogIGV4cGxpY2l0bHkgZm9yYmlkIGlubGluZSByZXBsYWNlbWVudCBtZW1vcnkgYWxsb2NhdGlvbgogIGZ1bmN0aW9ucy48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIGEgbmV3IHNlbnRlbmNlIHRvIHRoZSBlbmQgb2YgMTcuNC4zLjUgW3JlcGxhY2VtZW50LmZ1bmN0aW9uc10gcGFyYWdyYXBoIDM6CiJUaGUgcHJvZ3JhbSdzIGRlZmluaXRpb25zIHNoYWxsIG5vdCBiZSBzcGVjaWZpZWQgYXMgPHR0PmlubGluZTwvdHQ+LgpObyBkaWFnbm9zdGljIGlzIHJlcXVpcmVkLiIKPC9wPgoKPHA+PGk+W0tvbmE6IGFkZGVkICJubyBkaWFnbm9zdGljIGlzIHJlcXVpcmVkIl08L2k+PC9wPgoKCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUaGUgZmFjdCB0aGF0IDx0dD5pbmxpbmU8L3R0PiBpc24ndCBtZW50aW9uZWQgYXBwZWFycyB0byBoYXZlIGJlZW4Kbm90aGluZyBtb3JlIHRoYW4gYW4gb3ZlcnNpZ2h0LiAgRXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIGRvIG5vdApwZXJtaXQgaW5saW5lIGZ1bmN0aW9ucyBhcyByZXBsYWNlbWVudCBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMuClByb3ZpZGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgd291bGQgYmUgZGlmZmljdWx0IGluIHNvbWUgY2FzZXMsIGFuZCBpcwpiZWxpZXZlZCB0byBiZSBvZiBsaW1pdGVkIHZhbHVlLgo8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDA1Ij48L2E+NDA1LiBxc29ydCBhbmQgUE9EPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI1LjQgW2FsZy5jLmxpYnJhcnldIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFJheSBMaXNjaG5lciA8Yj5EYXRlOjwvYj4gMjAwMy0wNC0wODwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxnLmMubGlicmFyeSI+aXNzdWVzPC9hPiBpbiBbYWxnLmMubGlicmFyeV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpTZWN0aW9uIDI1LjQgW2FsZy5jLmxpYnJhcnldIGRlc2NyaWJlcyBic2VhcmNoIGFuZCBxc29ydCwgZnJvbSB0aGUgQwpzdGFuZGFyZCBsaWJyYXJ5LiBQYXJhZ3JhcGggNCBkb2VzIG5vdCBsaXN0IGFueSByZXN0cmljdGlvbnMgb24gcXNvcnQsCmJ1dCBpdCBzaG91bGQgbGltaXQgdGhlIGJhc2UgcGFyYW1ldGVyIHRvIHBvaW50IHRvIFBPRC4gIFByZXN1bWFibHksCnFzb3J0IHNvcnRzIHRoZSBhcnJheSBieSBjb3B5aW5nIGJ5dGVzLCB3aGljaCByZXF1aXJlcyBQT0QuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiAyNS40IFthbGcuYy5saWJyYXJ5XSBwYXJhZ3JhcGggNCwganVzdCBhZnRlciB0aGUgZGVjbGFyYXRpb25zIGFuZApiZWZvcmUgdGhlIG5vbm5vcm1hdGl2ZSBub3RlLCBhZGQgdGhlc2Ugd29yZHM6ICJib3RoIG9mIHdoaWNoIGhhdmUgdGhlCnNhbWUgYmVoYXZpb3IgYXMgdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uLiAgVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZAp1bmxlc3MgdGhlIG9iamVjdHMgaW4gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgPGk+YmFzZTwvaT4gYXJlIG9mIFBPRAp0eXBlLiIKPC9wPgoKPHA+PGk+W1NvbWV0aGluZyBhbG9uZyB0aGVzZSBsaW5lcyBpcyBjbGVhcmx5IG5lY2Vzc2FyeS4gIE1hdHQKICBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0MDYiPjwvYT40MDYuIHZlY3Rvcjo6aW5zZXJ0KHMpIGV4Y2VwdGlvbiBzYWZldHk8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMi42LjQgW3ZlY3Rvci5tb2RpZmllcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERhdmUgQWJyYWhhbXMgPGI+RGF0ZTo8L2I+IDIwMDMtMDQtMjc8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3ZlY3Rvci5tb2RpZmllcnMiPmlzc3VlczwvYT4gaW4gW3ZlY3Rvci5tb2RpZmllcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI0RSIj5EUjwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlcmUgaXMgYSBwb3NzaWJsZSBkZWZlY3QgaW4gdGhlIHN0YW5kYXJkOiB0aGUgc3RhbmRhcmQgdGV4dCB3YXMKbmV2ZXIgaW50ZW5kZWQgdG8gcHJldmVudCBhcmJpdHJhcnkgRm9yd2FyZEl0ZXJhdG9ycywgd2hvc2Ugb3BlcmF0aW9ucwptYXkgdGhyb3cgZXhjZXB0aW9ucywgZnJvbSBiZWluZyBwYXNzZWQsIGFuZCBpdCBhbHNvIHdhc24ndCBpbnRlbmRlZAp0byByZXF1aXJlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBpbiB0aGUgY2FzZSB3aGVyZSBGb3J3YXJkSXRlcmF0b3JzIHdlcmUKcGFzc2VkIChhbmQgSSB0aGluayBtb3N0IGltcGxlbWVudGF0aW9ucyBkb24ndCB1c2Ugb25lKS4gIEFzIGlzLCB0aGUKc3RhbmRhcmQgYXBwZWFycyB0byBpbXBvc2UgcmVxdWlyZW1lbnRzIHRoYXQgYXJlbid0IG1ldCBieSBhbnkKZXhpc3RpbmcgaW1wbGVtZW50YXRpb24uCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlcGxhY2UgMjMuMi42LjQgW3ZlY3Rvci5tb2RpZmllcnNdIHBhcmFncmFwaCAxIHdpdGg6PC9wPgo8YmxvY2txdW90ZT48cD4KICAxLSBOb3RlczogQ2F1c2VzIHJlYWxsb2NhdGlvbiBpZiB0aGUgbmV3IHNpemUgaXMgZ3JlYXRlciB0aGFuIHRoZQogIG9sZCBjYXBhY2l0eS4gSWYgbm8gcmVhbGxvY2F0aW9uIGhhcHBlbnMsIGFsbCB0aGUgaXRlcmF0b3JzIGFuZAogIHJlZmVyZW5jZXMgYmVmb3JlIHRoZSBpbnNlcnRpb24gcG9pbnQgcmVtYWluIHZhbGlkLiBJZiBhbiBleGNlcHRpb24KICBpcyB0aHJvd24gb3RoZXIgdGhhbiBieSB0aGUgY29weSBjb25zdHJ1Y3RvciBvciBhc3NpZ25tZW50IG9wZXJhdG9yCiAgb2YgVCBvciBieSBhbnkgSW5wdXRJdGVyYXRvciBvcGVyYXRpb24gdGhlcmUgYXJlIG5vIGVmZmVjdHMuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD48aT5bV2UgcHJvYmFibHkgbmVlZCB0byBzYXkgc29tZXRoaW5nIHNpbWlsYXIgZm9yIGRlcXVlLl08L2k+PC9wPgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDA3Ij48L2E+NDA3LiBDYW4gc2luZ3VsYXIgaXRlcmF0b3JzIGJlIGRlc3Ryb3llZD88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjQuMSBbaXRlcmF0b3IucmVxdWlyZW1lbnRzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOYXRoYW4gTXllcnMgPGI+RGF0ZTo8L2I+IDIwMDMtMDYtMDM8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNpdGVyYXRvci5yZXF1aXJlbWVudHMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtpdGVyYXRvci5yZXF1aXJlbWVudHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaXRlcmF0b3IucmVxdWlyZW1lbnRzIj5pc3N1ZXM8L2E+IGluIFtpdGVyYXRvci5yZXF1aXJlbWVudHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KQ2xhdXNlIDI0LjEgW2l0ZXJhdG9yLnJlcXVpcmVtZW50c10sIHBhcmFncmFwaCA1LCBzYXlzIHRoYXQgdGhlIG9ubHkgZXhwcmVzc2lvbgp0aGF0IGlzIGRlZmluZWQgZm9yIGEgc2luZ3VsYXIgaXRlcmF0b3IgaXMgImFuIGFzc2lnbm1lbnQgb2YgYQpub24tc2luZ3VsYXIgdmFsdWUgdG8gYW4gaXRlcmF0b3IgdGhhdCBob2xkcyBhIHNpbmd1bGFyIHZhbHVlIi4gIFRoaXMgCm1lYW5zIHRoYXQgZGVzdHJveWluZyBhIHNpbmd1bGFyIGl0ZXJhdG9yIChlLmcuIGxldHRpbmcgYW4gYXV0b21hdGljCnZhcmlhYmxlIGdvIG91dCBvZiBzY29wZSkgaXMgdGVjaG5pY2FsbHkgdW5kZWZpbmVkIGJlaGF2aW9yLiAgVGhpcwpzZWVtcyBvdmVybHkgc3RyaWN0LCBhbmQgcHJvYmFibHkgdW5pbnRlbnRpb25hbC4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgc2VudGVuY2UgaW4gcXVlc3Rpb24gdG8gIi4uLiB0aGUgb25seSBleGNlcHRpb25zIGFyZQpkZXN0cm95aW5nIGFuIGl0ZXJhdG9yIHRoYXQgaG9sZHMgYSBzaW5ndWxhciB2YWx1ZSwgb3IgdGhlIGFzc2lnbm1lbnQKb2YgYSBub24tc2luZ3VsYXIgdmFsdWUgdG8gYW4gaXRlcmF0b3IgdGhhdCBob2xkcyBhIHNpbmd1bGFyIHZhbHVlLiIKPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQwOSI+PC9hPjQwOS4gQ2xvc2luZyBhbiBmc3RyZWFtIHNob3VsZCBjbGVhciBlcnJvciBzdGF0ZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy44LjEuOSBbaWZzdHJlYW0ubWVtYmVyc10sIDI3LjguMS4xMyBbb2ZzdHJlYW0ubWVtYmVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTmF0aGFuIE15ZXJzIDxiPkRhdGU6PC9iPiAyMDAzLTA2LTAzPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpZnN0cmVhbS5tZW1iZXJzIj5pc3N1ZXM8L2E+IGluIFtpZnN0cmVhbS5tZW1iZXJzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNEUiI+RFI8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkEgc3RyaWN0IHJlYWRpbmcgb2YgMjcuOC4xIFtmc3RyZWFtc10gc2hvd3MgdGhhdCBvcGVuaW5nIG9yCmNsb3NpbmcgYSBiYXNpY19baW9dZnN0cmVhbSBkb2VzIG5vdCBhZmZlY3QgdGhlIGVycm9yIGJpdHMuICBUaGlzCm1lYW5zLCBmb3IgZXhhbXBsZSwgdGhhdCBpZiB5b3UgcmVhZCB0aHJvdWdoIGEgZmlsZSB1cCB0byBFT0YsIGFuZAp0aGVuIGNsb3NlIHRoZSBzdHJlYW0gYW5kIHJlb3BlbiBpdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLAp0aGUgRU9GIGJpdCBpbiB0aGUgc3RyZWFtJ3MgZXJyb3Igc3RhdGUgaXMgc3RpbGwgc2V0LiAgVGhpcyBpcwpjb3VudGVyaW50dWl0aXZlLgo8L3A+CjxwPgpUaGUgTFdHIGNvbnNpZGVyZWQgdGhpcyBpc3N1ZSBvbmNlIGJlZm9yZSwgYXMgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyIj4yMjwvYT4sCmFuZCBwdXQgaW4gYSBmb290bm90ZSB0byBjbGFyaWZ5IHRoYXQgdGhlIHN0cmljdCByZWFkaW5nIHdhcyBpbmRlZWQKY29ycmVjdC4gIFdlIGRpZCB0aGF0IGJlY2F1c2Ugd2UgYmVsaWV2ZWQgdGhlIHN0YW5kYXJkIHdhcwp1bmFtYmlndW91cyBhbmQgY29uc2lzdGVudCwgYW5kIHRoYXQgd2Ugc2hvdWxkIG5vdCBtYWtlIGFyY2hpdGVjdHVyYWwKY2hhbmdlcyBpbiBhIFRDLiAgTm93IHRoYXQgd2UncmUgd29ya2luZyBvbiBhIG5ldyByZXZpc2lvbiBvZiB0aGUKbGFuZ3VhZ2UsIHRob3NlIGNvbnNpZGVyYXRpb25zIG5vIGxvbmdlciBhcHBseS4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkNoYW5nZSAyNy44LjEuOSBbaWZzdHJlYW0ubWVtYmVyc10sIHBhcmEuIDMgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT48cD4KQ2FsbHMgcmRidWYoKS0mZ3Q7b3BlbihzLG1vZGV8aW4pLiBJZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgYSBudWxsCnBvaW50ZXIsIGNhbGxzIHNldHN0YXRlKGZhaWxiaXQpICh3aGljaCBtYXkgdGhyb3cgaW9zX2Jhc2U6OmZhaWx1cmUKW0Zvb3Rub3RlOiAobGliLmlvc3RhdGUuZmxhZ3MpXS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPjxwPkNhbGxzIHJkYnVmKCktJmd0O29wZW4ocyxtb2RlfGluKS4gSWYgdGhhdCBmdW5jdGlvbgpyZXR1cm5zIGEgbnVsbCBwb2ludGVyLCBjYWxscyBzZXRzdGF0ZShmYWlsYml0KSAod2hpY2ggbWF5IHRocm93Cmlvc19iYXNlOjpmYWlsdXJlIFtGb290bm90ZTogKGxpYi5pb3N0YXRlLmZsYWdzKSksIGVsc2UgY2FsbHMgY2xlYXIoKS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNy44LjEuMTMgW29mc3RyZWFtLm1lbWJlcnNdLCBwYXJhLiAzIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+PHA+Q2FsbHMgcmRidWYoKS0mZ3Q7b3BlbihzLG1vZGV8b3V0KS4gSWYgdGhhdCBmdW5jdGlvbgpyZXR1cm5zIGEgbnVsbCBwb2ludGVyLCBjYWxscyBzZXRzdGF0ZShmYWlsYml0KSAod2hpY2ggbWF5IHRocm93Cmlvc19iYXNlOjpmYWlsdXJlIFtGb290bm90ZTogKGxpYi5pb3N0YXRlLmZsYWdzKSkuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT48cD5DYWxscyByZGJ1ZigpLSZndDtvcGVuKHMsbW9kZXxvdXQpLiBJZiB0aGF0IGZ1bmN0aW9uCnJldHVybnMgYSBudWxsIHBvaW50ZXIsIGNhbGxzIHNldHN0YXRlKGZhaWxiaXQpICh3aGljaCBtYXkgdGhyb3cKaW9zX2Jhc2U6OmZhaWx1cmUgW0Zvb3Rub3RlOiAobGliLmlvc3RhdGUuZmxhZ3MpKSwgZWxzZSBjYWxscyBjbGVhcigpLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIDI3LjguMS4xNyBbZnN0cmVhbS5tZW1iZXJzXSwgcGFyYS4gMyBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPjxwPkNhbGxzIHJkYnVmKCktJmd0O29wZW4ocyxtb2RlKSwgSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zCmEgbnVsbCBwb2ludGVyLCBjYWxscyBzZXRzdGF0ZShmYWlsYml0KSwgKHdoaWNoIG1heSB0aHJvdwppb3NfYmFzZTo6ZmFpbHVyZSkuIChsaWIuaW9zdGF0ZS5mbGFncykgKQo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+PHA+Q2FsbHMgcmRidWYoKS0mZ3Q7b3BlbihzLG1vZGUpLCBJZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMKYSBudWxsIHBvaW50ZXIsIGNhbGxzIHNldHN0YXRlKGZhaWxiaXQpLCAod2hpY2ggbWF5IHRocm93Cmlvc19iYXNlOjpmYWlsdXJlKS4gKGxpYi5pb3N0YXRlLmZsYWdzKSApLCBlbHNlIGNhbGxzIGNsZWFyKCkuCjwvcD48L2Jsb2NrcXVvdGU+CgoKCjxwPjxpPltLb25hOiB0aGUgTFdHIGFncmVlcyB0aGlzIGlzIGEgZ29vZCBpZGVhLiAgUG9zdC1Lb25hOiBCaWxsCnByb3ZpZGVkIHdvcmRpbmcuICBIZSBzdWdnZXN0cyBoYXZpbmcgb3Blbiwgbm90IGNsb3NlLCBjbGVhciB0aGUgZXJyb3IKZmxhZ3MuXTwvaT48L3A+CgoKPHA+PGk+W1Bvc3QtU3lkbmV5OiBIb3dhcmQgcHJvdmlkZWQgYSBuZXcgcHJvcG9zZWQgcmVzb2x1dGlvbi4gIFRoZQogIG9sZCBvbmUgZGlkbid0IG1ha2Ugc2Vuc2UgYmVjYXVzZSBpdCBwcm9wb3NlZCB0byBmaXggdGhpcyBhdCB0aGUKICBsZXZlbCBvZiBiYXNpY19maWxlYnVmLCB3aGljaCBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBzdHJlYW0ncwogIGVycm9yIHN0YXRlLiAgSG93YXJkJ3MgcHJvcG9zZWQgcmVzb2x1dGlvbiBmaXhlcyB0aGlzIGF0IHRoZSBsZXZlbAogIG9mIHRoZSB0aHJlZSBmc3RyZWFtIGNsYXNzIHRlbXBsYXRlIGluc3RlYWQuXTwvaT48L3A+CgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDEwIj48L2E+NDEwLiBNaXNzaW5nIHNlbWFudGljcyBmb3Igc3RhY2sgYW5kIHF1ZXVlIGNvbXBhcmlzb24gb3BlcmF0b3JzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjIuNC4xIFtsaXN0LmNvbnNdLCAyMy4yLjQuMyBbbGlzdC5tb2RpZmllcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEhhbnMgQm9zIDxiPkRhdGU6PC9iPiAyMDAzLTA2LTA3PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsaXN0LmNvbnMiPmlzc3VlczwvYT4gaW4gW2xpc3QuY29uc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpTZWN0aW9ucyAyMy4yLjQuMSBbbGlzdC5jb25zXSBhbmQgMjMuMi40LjMgW2xpc3QubW9kaWZpZXJzXSBsaXN0CmNvbXBhcmlzb24gb3BlcmF0b3JzICg9PSwgIT0sICZsdDssICZsdDs9LCAmZ3Q7LCA9Jmd0OykgZm9yIHF1ZXVlIGFuZApzdGFjay4gIE9ubHkgdGhlIHNlbWFudGljcyBmb3IgcXVldWU6Om9wZXJhdG9yPT0gKDIzLjIuNC4xIFtsaXN0LmNvbnNdIHBhcjIpIGFuZCBxdWV1ZTo6b3BlcmF0b3ImbHQ7ICgyMy4yLjQuMSBbbGlzdC5jb25zXQpwYXIzKSBhcmUgZGVmaW5lZC4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkFkZCB0aGUgZm9sbG93aW5nIG5ldyBwYXJhZ3JhcGhzIGFmdGVyIDIzLjIuNC4xIFtsaXN0LmNvbnNdCiAgcGFyYWdyYXBoIDM6PC9wPgoKPGJsb2NrcXVvdGU+Cgo8cHJlPiAgb3BlcmF0b3IhPQo8L3ByZT4KPHA+UmV0dXJuczogPHR0PnguYyAhPSB5LmM8L3R0PjwvcD4KCjxwcmU+ICBvcGVyYXRvciZndDsKPC9wcmU+CjxwPlJldHVybnM6IDx0dD54LmMgJmd0OyB5LmM8L3R0PjwvcD4KCjxwcmU+ICBvcGVyYXRvciZsdDs9CjwvcHJlPgo8cD5SZXR1cm5zOiA8dHQ+eC5jICZsdDs9IHkuYzwvdHQ+PC9wPgoKPHByZT4gIG9wZXJhdG9yJmd0Oz0KPC9wcmU+CjxwPlJldHVybnM6IDx0dD54LmMgJmd0Oz0geS5jPC90dD48L3A+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGhzIGF0IHRoZSBlbmQgb2YgMjMuMi40LjMgW2xpc3QubW9kaWZpZXJzXTo8L3A+Cgo8YmxvY2txdW90ZT4KCjxwcmU+ICBvcGVyYXRvcj09CjwvcHJlPgo8cD5SZXR1cm5zOiA8dHQ+eC5jID09IHkuYzwvdHQ+PC9wPgoKPHByZT4gIG9wZXJhdG9yJmx0Owo8L3ByZT4KPHA+UmV0dXJuczogPHR0PnguYyAmbHQ7IHkuYzwvdHQ+PC9wPgoKPHByZT4gIG9wZXJhdG9yIT0KPC9wcmU+CjxwPlJldHVybnM6IDx0dD54LmMgIT0geS5jPC90dD48L3A+Cgo8cHJlPiAgb3BlcmF0b3ImZ3Q7CjwvcHJlPgo8cD5SZXR1cm5zOiA8dHQ+eC5jICZndDsgeS5jPC90dD48L3A+Cgo8cHJlPiAgb3BlcmF0b3ImbHQ7PQo8L3ByZT4KPHA+UmV0dXJuczogPHR0PnguYyAmbHQ7PSB5LmM8L3R0PjwvcD4KCjxwcmU+ICBvcGVyYXRvciZndDs9CjwvcHJlPgo8cD5SZXR1cm5zOiA8dHQ+eC5jICZndDs9IHkuYzwvdHQ+PC9wPgoKPC9ibG9ja3F1b3RlPgoKCjxwPjxpPltLb25hOiBNYXR0IHByb3ZpZGVkIHdvcmRpbmcuXTwvaT48L3A+CgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlcmUgaXNuJ3QgYW55IHJlYWwgZG91YnQgYWJvdXQgd2hhdCB0aGVzZSBvcGVyYXRvcnMgYXJlCnN1cHBvc2VkIHRvIGRvLCBidXQgd2Ugb3VnaHQgdG8gc3BlbGwgaXQgb3V0LjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0MTEiPjwvYT40MTEuIFdyb25nIG5hbWVzIG9mIHNldCBtZW1iZXIgZnVuY3Rpb25zPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI1LjMuNSBbYWxnLnNldC5vcGVyYXRpb25zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEYW5pZWwgRnJleSA8Yj5EYXRlOjwvYj4gMjAwMy0wNy0wOTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxnLnNldC5vcGVyYXRpb25zIj5pc3N1ZXM8L2E+IGluIFthbGcuc2V0Lm9wZXJhdGlvbnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KMjUuMy41IFthbGcuc2V0Lm9wZXJhdGlvbnNdIHBhcmFncmFwaCAxIHJlYWRzOgoiVGhlIHNlbWFudGljcyBvZiB0aGUgc2V0IG9wZXJhdGlvbnMgYXJlIGdlbmVyYWxpemVkIHRvIG11bHRpc2V0cyBpbiBhIApzdGFuZGFyZCB3YXkgYnkgZGVmaW5pbmcgdW5pb24oKSB0byBjb250YWluIHRoZSBtYXhpbXVtIG51bWJlciBvZiAKb2NjdXJyZW5jZXMgb2YgZXZlcnkgZWxlbWVudCwgaW50ZXJzZWN0aW9uKCkgdG8gY29udGFpbiB0aGUgbWluaW11bSwgYW5kIApzbyBvbi4iCjwvcD4KCjxwPgpUaGlzIGlzIHdyb25nLiAgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9ucyBhcmUgc2V0X3VuaW9uKCkgYW5kCnNldF9pbnRlcnNlY3Rpb24oKSwgbm90IHVuaW9uKCkgYW5kIGludGVyc2VjdGlvbigpLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhhdCBzZW50ZW5jZSB0byB1c2UgdGhlIGNvcnJlY3QgbmFtZXMuPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQxMiI+PC9hPjQxMi4gVHlwbyBpbiAyNy40LjQuMzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy40LjQuMyBbaW9zdGF0ZS5mbGFnc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAzLTA3LTEwPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpb3N0YXRlLmZsYWdzIj5pc3N1ZXM8L2E+IGluIFtpb3N0YXRlLmZsYWdzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkR1cGxpY2F0ZSBvZjo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQyOSI+NDI5PC9hPjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIEVmZmVjdHMgY2xhdXNlIGluIDI3LjQuNC4zIFtpb3N0YXRlLmZsYWdzXSBwYXJhZ3JhcGggNSBzYXlzIHRoYXQgdGhlCmZ1bmN0aW9uIG9ubHkgdGhyb3dzIGlmIHRoZSByZXNwZWN0aXZlIGJpdHMgYXJlIGFscmVhZHkgc2V0IHByaW9yIHRvCnRoZSBmdW5jdGlvbiBjYWxsLiBUaGF0J3Mgb2J2aW91c2x5IG5vdCB0aGUgaW50ZW50LiBUaGUgdHlwbyBvdWdodCB0bwpiZSBjb3JyZWN0ZWQgYW5kIHRoZSB0ZXh0IHJld29yZGVkIGFzOiAiSWYgKDxpPnN0YXRlPC9pPiAmYW1wOwpleGNlcHRpb25zKCkpID09IDAsIHJldHVybnMuIC4uLiIKPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDI3LjQuNC4zIFtpb3N0YXRlLmZsYWdzXSBwYXJhZ3JhcGggNSwgcmVwbGFjZSAiSWYgKHJkc3RhdGUoKSAmYW1wOwpleGNlcHRpb25zKCkpID09IDAiIHdpdGggIklmICgoc3RhdGUgfCAocmRidWYoKSA/IGdvb2RiaXQgOiBiYWRiaXQpKQomYW1wOyBleGNlcHRpb25zKCkpID09IDAiLgo8L3A+Cgo8cD48aT5bS29uYTogdGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gd2Fzbid0IHF1aXRlIHJpZ2h0LiAgV2UKICByZWFsbHkgZG8gbWVhbiByZHN0YXRlKCk7IHRoZSBhbWJpZ3VpdHkgaXMgdGhhdCB0aGUgd29yZGluZyBpbiB0aGUKICBzdGFuZGFyZCBkb2Vzbid0IG1ha2UgaXQgY2xlYXIgd2hldGhlciB3ZSBtZWFuIHJkc3RhdGUoKSBiZWZvcmUKICBzZXR0aW5nIHRoZSBuZXcgc3RhdGUsIG9yIHJkc2F0ZSgpIGFmdGVyIHNldHRpbmcgaXQuICBXZSBpbnRlbmQgdGhlCiAgbGF0dGVyLCBvZiBjb3Vyc2UuIFBvc3QtS29uYTogTWFydGluIHByb3ZpZGVkIHdvcmRpbmcuXTwvaT48L3A+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0MTMiPjwvYT40MTMuIFByb3Bvc2VkIHJlc29sdXRpb24gdG8gTERSIzY0IHN0aWxsIHdyb25nPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjYuMS4yLjMgW2lzdHJlYW06OmV4dHJhY3RvcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEJvIFBlcnNzb24gPGI+RGF0ZTo8L2I+IDIwMDMtMDctMTM8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lzdHJlYW06OmV4dHJhY3RvcnMiPmlzc3VlczwvYT4gaW4gW2lzdHJlYW06OmV4dHJhY3RvcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI0RSIj5EUjwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIHNlY29uZCBzZW50ZW5jZSBvZiB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBzYXlzOgo8L3A+Cgo8cD4KIklmIGl0IGluc2VydGVkIG5vIGNoYXJhY3RlcnMgYmVjYXVzZSBpdCBjYXVnaHQgYW4gZXhjZXB0aW9uIHRocm93bgp3aGlsZSBleHRyYWN0aW5nIGNoYXJhY3RlcnMgZnJvbSBzYiBhbmQgLi4uIgo8L3A+Cgo8cD4KSG93ZXZlciwgd2UgYXJlIG5vdCBleHRyYWN0aW5nIGZyb20gc2IsIGJ1dCBleHRyYWN0aW5nIGZyb20gdGhlCmJhc2ljX2lzdHJlYW0gKCp0aGlzKSBhbmQgaW5zZXJ0aW5nIGludG8gc2IuIEkgY2FuJ3QgcmVhbGx5IHRlbGwgaWYKImV4dHJhY3RpbmciIG9yICJzYiIgaXMgYSB0eXBvLgo8L3A+Cgo8cD48aT5bClN5ZG5leTogRGVmaW5pdGVseSBhIHJlYWwgaXNzdWUuIFdlIGFyZSwgaW5kZWVkLCBleHRyYWN0aW5nIGNoYXJhY3RlcnMKZnJvbSBhbiBpc3RyZWFtIGFuZCBub3QgZnJvbSBzYi4gVGhlIHByb2JsZW0gd2FzIHRoZXJlIGluIHRoZSBGRElTIGFuZAp3YXNuJ3QgZml4ZWQgYnkgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY0Ij42NDwvYT4uIFByb2JhYmx5IHdoYXQgd2FzIGludGVuZGVkIHdhcwp0byBoYXZlICp0aGlzIGluc3RlYWQgb2Ygc2IuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGV4Y2VwdGlvbiBmbGFnCnN0YXRlIG9mIGEgYmFzaWNfaXN0cmVhbSBvYmplY3QsIGFuZCB0aGVyZSdzIG9ubHkgb25lIGJhc2ljX2lzdHJlYW0Kb2JqZWN0IGluIHRoaXMgZGlzY3Vzc2lvbiwgc28gdGhhdCB3b3VsZCBiZSBhIGNvbnNpc3RlbnQKaW50ZXJwcmV0YXRpb24uICAoQnV0IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bDogdGhlIGV4Y2VwdGlvbiBwb2xpY3kgb2YKdGhpcyBtZW1iZXIgZnVuY3Rpb24gbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggdGhhdCBvZiBvdGhlcgpleHRyYWN0b3JzLikgIFBKUCB3aWxsIHByb3ZpZGUgd29yZGluZy4KXTwvaT48L3A+CgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgc2VudGVuY2UgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT48cD4KSWYgaXQgaW5zZXJ0ZWQgbm8gY2hhcmFjdGVycyBiZWNhdXNlIGl0IGNhdWdodCBhbiBleGNlcHRpb24gdGhyb3duCndoaWxlIGV4dHJhY3RpbmcgY2hhcmFjdGVycyBmcm9tIHNiIGFuZCBmYWlsYml0IGlzIG9uIGluIGV4Y2VwdGlvbnMoKSwKdGhlbiB0aGUgY2F1Z2h0IGV4Y2VwdGlvbiBpcyByZXRocm93bi4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPjxwPgpJZiBpdCBpbnNlcnRlZCBubyBjaGFyYWN0ZXJzIGJlY2F1c2UgaXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiB0aHJvd24Kd2hpbGUgZXh0cmFjdGluZyBjaGFyYWN0ZXJzIGZyb20gKnRoaXMgYW5kIGZhaWxiaXQgaXMgb24gaW4gZXhjZXB0aW9ucygpLAp0aGVuIHRoZSBjYXVnaHQgZXhjZXB0aW9uIGlzIHJldGhyb3duLgo8L3A+PC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQxNCI+PC9hPjQxNC4gV2hpY2ggaXRlcmF0b3JzIGFyZSBpbnZhbGlkYXRlZCBieSB2LmVyYXNlKCk/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjIuNi40IFt2ZWN0b3IubW9kaWZpZXJzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXR0IEF1c3Rlcm4gPGI+RGF0ZTo8L2I+IDIwMDMtMDgtMTk8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3ZlY3Rvci5tb2RpZmllcnMiPmlzc3VlczwvYT4gaW4gW3ZlY3Rvci5tb2RpZmllcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50Ogo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPmludCBBWzhdID0geyAxLDMsNSw3LDksOCw0LDIgfTsKc3RkOjp2ZWN0b3ImbHQ7aW50Jmd0OyB2KEEsIEErOCk7CgpzdGQ6OnZlY3RvciZsdDtpbnQmZ3Q7OjppdGVyYXRvciBpMSA9IHYuYmVnaW4oKSArIDM7CnN0ZDo6dmVjdG9yJmx0O2ludCZndDs6Oml0ZXJhdG9yIGkyID0gdi5iZWdpbigpICsgNDsKdi5lcmFzZShpMSk7CjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KV2hpY2ggaXRlcmF0b3JzIGFyZSBpbnZhbGlkYXRlZCBieSA8dHQ+di5lcmFzZShpMSk8L3R0PjogaTEsIGkyLApib3RoLCBvciBuZWl0aGVyPwo8L3A+Cgo8cD4KT24gYWxsIGV4aXN0aW5nIGltcGxlbWVudGF0aW9ucyB0aGF0IEkga25vdyBvZiwgdGhlIHN0YXR1cyBvZiBpMSBhbmQKaTIgaXMgdGhlIHNhbWU6IGJvdGggb2YgdGhlbSB3aWxsIGJlIGl0ZXJhdG9ycyB0aGF0IHBvaW50IHRvIHNvbWUKZWxlbWVudHMgb2YgdGhlIHZlY3RvciAoYWxiZWl0IG5vdCB0aGUgc2FtZSBlbGVtZW50cyB0aGV5IGRpZApiZWZvcmUpLiAgWW91IHdvbid0IGdldCBhIGNyYXNoIGlmIHlvdSB1c2UgdGhlbS4gIERlcGVuZGluZyBvbiAKZXhhY3RseSB3aGF0IHlvdSBtZWFuIGJ5ICJpbnZhbGlkYXRlIiwgeW91IG1pZ2h0IHNheSB0aGF0IG5laXRoZXIgb25lCmhhcyBiZWVuIGludmFsaWRhdGVkIGJlY2F1c2UgdGhleSBzdGlsbCBwb2ludCB0byA8aT5zb21ldGhpbmc8L2k+LApvciB5b3UgbWlnaHQgc2F5IHRoYXQgYm90aCBoYXZlIGJlZW4gaW52YWxpZGF0ZWQgYmVjYXVzZSBpbiBib3RoCmNhc2VzIHRoZSBlbGVtZW50cyB0aGV5IHBvaW50IHRvIGhhdmUgYmVlbiBjaGFuZ2VkIG91dCBmcm9tIHVuZGVyIHRoZQppdGVyYXRvci4KPC9wPgoKPHA+ClRoZSBzdGFuZGFyZCBkb2Vzbid0IHNheSBlaXRoZXIgb2YgdGhvc2UgdGhpbmdzLiAgSXQgc2F5cyB0aGF0IGVyYXNlCmludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgImFmdGVyIHRoZSBwb2ludCBvZiB0aGUKZXJhc2UiLiAgVGhpcyBkb2Vzbid0IGluY2x1ZGUgaTEsIHNpbmNlIGl0J3MgYXQgdGhlIHBvaW50IG9mIHRoZQplcmFzZSBpbnN0ZWFkIG9mIGFmdGVyIGl0LiAgSSBjYW4ndCB0aGluayBvZiBhbnkgc2Vuc2libGUgZGVmaW5pdGlvbgpvZiBpbnZhbGlkYXRpb24gYnkgd2hpY2ggb25lIGNhbiBzYXkgdGhhdCBpMiBpcyBpbnZhbGlkYXRlZCBidXQgaTEKaXNuJ3QuCjwvcD4KCjxwPgooVGhpcyBpc3N1ZSBpcyBpbXBvcnRhbnQgaWYgeW91IHRyeSB0byByZWFzb24gYWJvdXQgaXRlcmF0b3IgdmFsaWRpdHkKYmFzZWQgb25seSBvbiB0aGUgZ3VhcmFudGVlcyBpbiB0aGUgc3RhbmRhcmQsIHJhdGhlciB0aGFuIHJlYXNvbmluZwpmcm9tIHR5cGljYWwgaW1wbGVtZW50YXRpb24gdGVjaG5pcXVlcy4gIFN0cmljdCBkZWJ1Z2dpbmcgbW9kZXMsCndoaWNoIHNvbWUgcHJvZ3JhbW1lcnMgZmluZCB1c2VmdWwsIGRvIG5vdCB1c2UgdHlwaWNhbCBpbXBsZW1lbnRhdGlvbgp0ZWNobmlxdWVzLikKPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDIzLjIuNi40IFt2ZWN0b3IubW9kaWZpZXJzXSBwYXJhZ3JhcGggMywgY2hhbmdlICJJbnZhbGlkYXRlcyBhbGwgdGhlCml0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyBhZnRlciB0aGUgcG9pbnQgb2YgdGhlIGVyYXNlIiB0bwoiSW52YWxpZGF0ZXMgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzIGF0IG9yIGFmdGVyIHRoZSBwb2ludCBvZiB0aGUKZXJhc2UiLiAKPC9wPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5JIGJlbGlldmUgdGhpcyB3YXMgZXNzZW50aWFsbHkgYSB0eXBvZ3JhcGhpY2FsIGVycm9yLCBhbmQgdGhhdCBpdAogIHdhcyB0YWtlbiBmb3IgZ3JhbnRlZCB0aGF0IGVyYXNpbmcgYW4gZWxlbWVudCBpbnZhbGlkYXRlcyBpdGVyYXRvcnMKICB0aGF0IHBvaW50IHRvIGl0LiAgVGhlIGVmZmVjdHMgY2xhdXNlIGluIHF1ZXN0aW9uIHRyZWF0cyBpdGVyYXRvcnMKICBhbmQgcmVmZXJlbmNlcyBpbiBwYXJhbGxlbCwgYW5kIGl0IHdvdWxkIHNlZW0gY291bnRlcmludHVpdGl2ZSB0bwogIHNheSB0aGF0IGEgcmVmZXJlbmNlIHRvIGFuIGVyYXNlZCB2YWx1ZSByZW1haW5zIHZhbGlkLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0MTUiPjwvYT40MTUuIGJlaGF2aW9yIG9mIHN0ZDo6d3M8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNi4xLjQgW2lzdHJlYW0ubWFuaXBdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwMy0wOS0xODwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KQWNjb3JkaW5nIHRvIDI3LjYuMS40LCB0aGUgd3MoKSBtYW5pcHVsYXRvciBpcyBub3QgcmVxdWlyZWQgdG8gY29uc3RydWN0CnRoZSBzZW50cnkgb2JqZWN0LiBUaGUgbWFuaXB1bGF0b3IgaXMgYWxzbyBub3QgYSBtZW1iZXIgZnVuY3Rpb24gc28gdGhlCnRleHQgaW4gMjcuNi4xLCBwMSB0aHJvdWdoIDQgdGhhdCBkZXNjcmliZXMgdGhlIGV4Y2VwdGlvbiBwb2xpY3kgZm9yCmlzdHJlYW0gbWVtYmVyIGZ1bmN0aW9ucyBkb2VzIG5vdCBhcHBseS4gVGhhdCBzZWVtcyBpbmNvbnNpc3RlbnQgd2l0aAp0aGUgcmVzdCBvZiBleHRyYWN0b3JzIGFuZCBhbGwgdGhlIG90aGVyIGlucHV0IGZ1bmN0aW9ucyAoaS5lLiwgd3Mgd2lsbApub3QgY2F1c2UgYSB0aWVkIHN0cmVhbSB0byBiZSBmbHVzaGVkIGJlZm9yZSBleHRyYWN0aW9uLCBpdCBkb2Vzbid0IGNoZWNrCnRoZSBzdHJlYW0ncyBleGNlcHRpb25zIG9yIGNhdGNoIGV4Y2VwdGlvbnMgdGhyb3duIGR1cmluZyBpbnB1dCwgYW5kIGl0CmRvZXNuJ3QgYWZmZWN0IHRoZSBzdHJlYW0ncyBnY291bnQpLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIHRvIDI3LjYuMS40IFtpc3RyZWFtLm1hbmlwXSwgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBmaXJzdCBzZW50ZW5jZQpvZiBwYXJhZ3JhcGggMSwgdGhlIGZvbGxvd2luZyB0ZXh0Ogo8L3A+CgogICAgPGJsb2NrcXVvdGU+PHA+CiAgICBCZWhhdmVzIGFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4KICAgIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSksIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IGNvdW50IHRoZSBudW1iZXIKICAgIG9mIGNoYXJhY3RlcnMgZXh0cmFjdGVkIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5CiAgICBzdWJzZXF1ZW50IGNhbGxzIHRvIGlzLmdjb3VudCgpLiBBZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkKICAgIG9iamVjdC4uLiAgCiAgICA8L3A+PC9ibG9ja3F1b3RlPgoKPHA+PGk+W1Bvc3QtS29uYTogTWFydGluIHByb3ZpZGVkIHdvcmRpbmddPC9pPjwvcD4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDE2Ij48L2E+NDE2LiBkZWZpbml0aW9ucyBvZiBYWFhfTUlOIGFuZCBYWFhfTUFYIG1hY3JvcyBpbiBjbGltaXRzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE4LjIuMiBbYy5saW1pdHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwMy0wOS0xODwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgogICAgICAgIDxwPgoKR2l2ZW4gdHdvIG92ZXJsb2FkcyBvZiB0aGUgZnVuY3Rpb24gZm9vKCksIG9uZSB0YWtpbmcgYW4gYXJndW1lbnQgb2YgdHlwZQppbnQgYW5kIHRoZSBvdGhlciB0YWtpbmcgYSBsb25nLCB3aGljaCBvbmUgd2lsbCB0aGUgY2FsbCBmb28oTE9OR19NQVgpCnJlc29sdmUgdG8/IFRoZSBleHBlY3RlZCBhbnN3ZXIgc2hvdWxkIGJlIGZvbyhsb25nKSwgYnV0IHdoZXRoZXIgdGhhdAppcyB0cnVlIGRlcGVuZHMgb24gdGhlICNkZWZpbnRpb24gb2YgdGhlIExPTkdfTUFYIG1hY3JvLCBzcGVjaWZpY2FsbHkKaXRzIHR5cGUuIFRoaXMgaXNzdWUgaXMgYWJvdXQgdGhlIGZhY3QgdGhhdCB0aGUgdHlwZSBvZiB0aGVzZSBtYWNyb3MKaXMgbm90IGFjdHVhbGx5IHJlcXVpcmVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSB0aGUgdHlwZSBlYWNoIHJlc3BlY3RpdmUKbGltaXQuCjxicj4KClNlY3Rpb24gMTguMi4yIG9mIHRoZSBDKysgU3RhbmRhcmQgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZXhhY3QgdHlwZXMgb2YKdGhlIFhYWF9NSU4gYW5kIFhYWF9NQVggbWFjcm9zICNkZWZpbmVkIGluIHRoZSAmbHQ7Y2xpbWl0cyZndDsgYW5kICZsdDtsaW1pdHMuaCZndDsKaGVhZGVycyBzdWNoIGFzIElOVF9NQVggYW5kIExPTkdfTUFYIGFuZCBpbnN0ZWFkIGRlZmVycyB0byB0aGUgQyBzdGFuZGFyZC4KPGJyPgoKU2VjdGlvbiA1LjIuNC4yLjEsIHAxIG9mIHRoZSBDIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0ICJUaGUgdmFsdWVzIFtvZgp0aGVzZSBjb25zdGFudHNdIHNoYWxsIGJlIHJlcGxhY2VkIGJ5IGNvbnN0YW50IGV4cHJlc3Npb25zIHN1aXRhYmxlIGZvciB1c2UKaW4gI2lmIHByZXByb2Nlc3NpbmcgZGlyZWN0aXZlcy4gTW9yZW92ZXIsIGV4Y2VwdCBmb3IgQ0hBUl9CSVQgYW5kIE1CX0xFTl9NQVgsCnRoZSBmb2xsb3dpbmcgc2hhbGwgYmUgcmVwbGFjZWQgYnkgZXhwcmVzc2lvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMKd291bGQgYW4gZXhwcmVzc2lvbiB0aGF0IGlzIGFuIG9iamVjdCBvZiB0aGUgY29ycmVzcG9uZGluZyB0eXBlIGNvbnZlcnRlZAphY2NvcmRpbmcgdG8gdGhlIGludGVnZXIgcHJvbW90aW9ucy4iCjxicj4KClRoZSAiY29ycmVzcG9uZGluZyB0eXBlIGNvbnZlcnRlZCBhY2NvcmRpbmcgdG8gdGhlIGludGVnZXIgcHJvbW90aW9ucyIgZm9yCkxPTkdfTUFYIGlzLCBhY2NvcmRpbmcgdG8gNi40LjQuMSwgcDUgb2YgdGhlIEMgc3RhbmRhcmQsIHRoZSB0eXBlIG9mIGxvbmcKY29udmVydGVkIHRvIHRoZSBmaXJzdCBvZiB0aGUgZm9sbG93aW5nIHNldCBvZiB0eXBlcyB0aGF0IGNhbiByZXByZXNlbnQgaXQ6CmludCwgbG9uZyBpbnQsIGxvbmcgbG9uZyBpbnQuIFNvIG9uIGFuIGltcGxlbWVudGF0aW9uIHdoZXJlIChzaXplb2YobG9uZykKPT0gc2l6ZW9mKGludCkpIHRoaXMgdHlwZSBpcyBhY3R1YWxseSBpbnQsIHdoaWxlIG9uIGFuIGltcGxlbWVudGF0aW9uIHdoZXJlCihzaXplb2YobG9uZykgJmd0OyBzaXplb2YoaW50KSkgaG9sZHMgdGhpcyB0eXBlIHdpbGwgYmUgbG9uZy4KPGJyPgoKVGhpcyBpcyBub3QgYW4gaXNzdWUgaW4gQyBzaW5jZSB0aGUgdHlwZSBvZiB0aGUgbWFjcm8gY2Fubm90IGJlIGRldGVjdGVkCmJ5IGFueSBjb25mb3JtaW5nIEMgcHJvZ3JhbSwgYnV0IGl0IHByZXNlbnRzIGEgcG9ydGFiaWxpdHkgcHJvYmxlbSBpbiBDKysKd2hlcmUgdGhlIGFjdHVhbCB0eXBlIGlzIGVhc2lseSBkZXRlY3RhYmxlIGJ5IG92ZXJsb2FkIHJlc29sdXRpb24uCgogICAgICAgIDwvcD4KPHA+PGk+W0tvbmE6IHRoZSBMV0cgZG9lcyBub3QgYmVsaWV2ZSB0aGlzIGlzIGEgZGVmZWN0LiAgVGhlIEMgbWFjcm8KICBkZWZpbml0aW9ucyBhcmUgd2hhdCB0aGV5IGFyZTsgd2UndmUgZ290IGEgYmV0dGVyCiAgbWVjaGFuaXNtLCA8dHQ+c3RkOjpudW1lcmljX2xpbWl0czwvdHQ+LCB0aGF0IGlzIHNwZWNpZmllZCBtb3JlCiAgcHJlY2lzZWx5IHRoYW4gdGhlIEMgbGltaXQgbWFjcm9zLiAgQXQgbW9zdCB3ZSBzaG91bGQgYWRkIGEKICBub25ub3JtYXRpdmUgbm90ZSByZWNvbW1lbmRpbmcgdGhhdCB1c2VycyB3aG8gY2FyZSBhYm91dCB0aGUgZXhhY3QKICB0eXBlcyBvZiBsaW1pdCBxdWFudGl0aWVzIHNob3VsZCB1c2UgJmx0O2xpbWl0cyZndDsgaW5zdGVhZCBvZgogICZsdDtjbGltaXRzJmd0Oy5dPC9pPjwvcD4KCgogICAgCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD4KQ2hhbmdlIDE4LjIuMiBbYy5saW1pdHNdLCBwYXJhZ3JhcGggMjoKPC9wPgoKPGJsb2NrcXVvdGU+PHA+Ci0yLSBUaGUgY29udGVudHMgYXJlIHRoZSBzYW1lIGFzIHRoZSBTdGFuZGFyZCBDIGxpYnJhcnkgaGVhZGVyIDx0dD4mbHQ7bGltaXRzLmgmZ3Q7PC90dD4uCjxpbnM+WzxpPk5vdGU6PC9pPiBUaGUgdHlwZXMgb2YgdGhlIG1hY3JvcyBpbiA8dHQ+Jmx0O2NsaW1pdHMmZ3Q7PC90dD4gYXJlIG5vdCBndWFyYW50ZWVkCnRvIG1hdGNoIHRoZSB0eXBlIHRvIHdoaWNoIHRoZXkgcmVmZXIuPGk+LS1lbmQgbm90ZTwvaT5dPC9pbnM+CjwvcD48L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDIwIj48L2E+NDIwLiBpcyBzdGQ6OkZJTEUgYSBjb21wbGV0ZSB0eXBlPzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy44LjEgW2ZzdHJlYW1zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDMtMDktMTg8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2ZzdHJlYW1zIj5pc3N1ZXM8L2E+IGluIFtmc3RyZWFtc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgo3LjE5LjEsIHAyLCBvZiBDOTkgcmVxdWlyZXMgdGhhdCB0aGUgRklMRSB0eXBlIG9ubHkgYmUgZGVjbGFyZWQgaW4KJmx0O3N0ZGlvLmgmZ3Q7LiAgTm9uZSBvZiB0aGUgKGltcGxlbWVudGF0aW9uLWRlZmluZWQpIG1lbWJlcnMgb2YgdGhlCnN0cnVjdCBpcyBtZW50aW9uZWQgYW55d2hlcmUgZm9yIG9idmlvdXMgcmVhc29ucy4KPC9wPgoKPHA+CkMrKyBzYXlzIGluIDI3LjguMSwgcDIgdGhhdCBGSUxFIGlzIGEgdHlwZSB0aGF0J3MgZGVmaW5lZCBpbiAmbHQ7Y3N0ZGlvJmd0Oy4gSXMKaXQgcmVhbGx5IHRoZSBpbnRlbnQgdGhhdCBGSUxFIGJlIGEgY29tcGxldGUgdHlwZSBvciBpcyBhbiBpbXBsZW1lbnRhdGlvbgphbGxvd2VkIHRvIGp1c3QgZGVjbGFyZSBpdCB3aXRob3V0IHByb3ZpZGluZyBhIGZ1bGwgZGVmaW5pdGlvbj8KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gdGhlIGZpcnN0IHNlbnRlbmNlIG9mIDI3LjguMSBbZnN0cmVhbXNdIHBhcmFncmFwaCAyLCBjaGFuZ2UKICAiZGVmaW5lZCIgdG8gImRlY2xhcmVkIi48L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPldlIGRvbid0IHdhbnQgdG8gaW1wb3NlIGFueSByZXN0cmljdGlvbnMgYmV5b25kIHdoYXQgdGhlIEMgc3RhbmRhcmQKICBhbHJlYWR5IHNheXMuIFdlIGRvbid0IHdhbnQgdG8gbWFrZSBhbnl0aGluZyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLAogIGJlY2F1c2UgdGhhdCBpbXBvc2VzIG5ldyByZXF1aXJlbWVudHMgaW4gaW1wbGVtZW50YXRpb25zLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0MjIiPjwvYT40MjIuIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBvZiBtZW1iZXIgZnVuY3Rpb25zIG9mIGNsYXNzIHRlbXBsYXRlczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAxNy40LjMuMiBbcmVzZXJ2ZWQubmFtZXNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwMy0wOS0xODwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjcmVzZXJ2ZWQubmFtZXMiPmlzc3VlczwvYT4gaW4gW3Jlc2VydmVkLm5hbWVzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+Ckl0IGhhcyBiZWVuIHN1Z2dlc3RlZCB0aGF0IDE3LjQuMy4xLCBwMSBtYXkgb3IgbWF5IG5vdCBhbGxvdyBwcm9ncmFtcyB0bwpleHBsaWNpdGx5IHNwZWNpYWxpemUgbWVtYmVycyBvZiBzdGFuZGFyZCB0ZW1wbGF0ZXMgb24gdXNlci1kZWZpbmVkIHR5cGVzLgpUaGUgYW5zd2VyIHRvIHRoZSBxdWVzdGlvbiBtaWdodCBoYXZlIGFuIGltcGFjdCB3aGVyZSBsaWJyYXJ5IHJlcXVpcmVtZW50cwphcmUgZ2l2ZW4gdXNpbmcgdGhlICJhcyBpZiIgcnVsZS4gSS5lLiwgaWYgcHJvZ3JhbXMgYXJlIGFsbG93ZWQgdG8gc3BlY2lhbGl6ZQptZW1iZXIgZnVuY3Rpb25zIHRoZXkgd2lsbCBiZSBhYmxlIHRvIGRldGVjdCBhbiBpbXBsZW1lbnRhdGlvbidzIHN0cmljdApjb25mb3JtYW5jZSB0byBFZmZlY3RzIGNsYXVzZXMgdGhhdCBkZXNjcmliZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uCmluIHRlcm1zIG9mIHRoZSBvdGhlciBtZW1iZXIgZnVuY3Rpb24gKHRoZSBvbmUgZXhwbGljaXRseSBzcGVjaWFsaXplZCBieQp0aGUgcHJvZ3JhbSkgYnkgcmVseWluZyBvbiB0aGUgImFzIGlmIiBydWxlLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+CiAgQWRkIHRoZSBmb2xsb3dpbmcgc2VudGVuY2UgdG8gMTcuNC4zLjIgW3Jlc2VydmVkLm5hbWVzXSwgcDE6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgpJdCBpcyB1bmRlZmluZWQgZm9yIGEgQysrIHByb2dyYW0gdG8gYWRkIGRlY2xhcmF0aW9ucyBvciBkZWZpbml0aW9ucyB0bwpuYW1lc3BhY2Ugc3RkIG9yIG5hbWVzcGFjZXMgd2l0aGluIG5hbWVzcGFjZSA8dHQ+c3RkPC90dD4gdW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQuIEEKcHJvZ3JhbSBtYXkgYWRkIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucyBmb3IgYW55IHN0YW5kYXJkIGxpYnJhcnkgdGVtcGxhdGUgdG8KbmFtZXNwYWNlIDx0dD5zdGQ8L3R0Pi4gU3VjaCBhIHNwZWNpYWxpemF0aW9uIChjb21wbGV0ZSBvciBwYXJ0aWFsKSBvZiBhIHN0YW5kYXJkIGxpYnJhcnkKdGVtcGxhdGUgcmVzdWx0cyBpbiB1bmRlZmluZWQgYmVoYXZpb3IgdW5sZXNzIHRoZSBkZWNsYXJhdGlvbiBkZXBlbmRzIG9uIGEKdXNlci1kZWZpbmVkIHR5cGUgb2YgZXh0ZXJuYWwgbGlua2FnZSBhbmQgdW5sZXNzIHRoZSBzcGVjaWFsaXphdGlvbiBtZWV0cyB0aGUKc3RhbmRhcmQgbGlicmFyeSByZXF1aXJlbWVudHMgZm9yIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZS48c3VwPjE2OCk8L3N1cD4KPGlucz5BIHByb2dyYW0gaGFzIHVuZGVmaW5lZCBiZWhhdmlvciBpZiBpdCBkZWNsYXJlczwvaW5zPgo8L3A+Cjx1bD4KPGxpPjxpbnM+YW4gZXhwbGljaXQgc3BlY2lhbGl6YXRpb24gb2YgYW55IG1lbWJlciBmdW5jdGlvbiBvZiBhIHN0YW5kYXJkCiAgICAgICAgICAgIGxpYnJhcnkgY2xhc3MgdGVtcGxhdGUsIG9yPC9pbnM+PC9saT4KPGxpPjxpbnM+YW4gZXhwbGljaXQgc3BlY2lhbGl6YXRpb24gb2YgYW55IG1lbWJlciBmdW5jdGlvbiB0ZW1wbGF0ZSBvZiBhCiAgICAgICAgICAgIHN0YW5kYXJkIGxpYnJhcnkgY2xhc3Mgb3IgY2xhc3MgdGVtcGxhdGUsIG9yPC9pbnM+PC9saT4KPGxpPjxpbnM+YW4gZXhwbGljaXQgb3IgcGFydGlhbCBzcGVjaWFsaXphdGlvbiBvZiBhbnkgbWVtYmVyIGNsYXNzCiAgICAgICAgICAgIHRlbXBsYXRlIG9mIGEgc3RhbmRhcmQgbGlicmFyeSBjbGFzcyBvciBjbGFzcyB0ZW1wbGF0ZS48L2lucz48L2xpPgo8L3VsPgo8cD4KQSBwcm9ncmFtIG1heSBleHBsaWNpdGx5IGluc3RhbnRpYXRlIGFueSB0ZW1wbGF0ZXMgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgb25seQppZiB0aGUgZGVjbGFyYXRpb24gZGVwZW5kcyBvbiB0aGUgbmFtZSBvZiBhIHVzZXItZGVmaW5lZCB0eXBlIG9mIGV4dGVybmFsCmxpbmthZ2UgYW5kIHRoZSBpbnN0YW50aWF0aW9uIG1lZXRzIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IHJlcXVpcmVtZW50cyBmb3IgdGhlCm9yaWdpbmFsIHRlbXBsYXRlLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IHN0cmF3IHBvbGwgd2FzIDYtMSB0aGF0IHVzZXIgcHJvZ3JhbXMgc2hvdWxkIG5vdCBiZQogIGFsbG93ZWQgdG8gc3BlY2lhbGl6ZSBpbmRpdmlkdWFsIG1lbWJlciBmdW5jdGlvbnMgb2Ygc3RhbmRhcmQKICBsaWJyYXJ5IGNsYXNzIHRlbXBsYXRlcywgYW5kIHRoYXQgZG9pbmcgc28gaW52b2tlcyB1bmRlZmluZWQKICBiZWhhdmlvci4gUG9zdC1Lb25hOiBNYXJ0aW4gcHJvdmlkZWQgd29yZGluZy5dPC9pPjwvcD4KCgo8cD48aT5bU3lkbmV5OiBUaGUgTFdHIGFncmVlcyB0aGF0IHRoZSBzdGFuZGFyZCBzaG91bGRuJ3QgcGVybWl0IHVzZXJzCnRvIHNwZWNpYWxpemUgaW5kaXZpZHVhbCBtZW1iZXIgZnVuY3Rpb25zIHVubGVzcyB0aGV5IHNwZWNpYWxpemUgdGhlCndob2xlIGNsYXNzLCBidXQgd2UncmUgbm90IHN1cmUgdGhlc2Ugd29yZHMgc2F5IHdoYXQgd2Ugd2FudCB0aGVtIHRvOwp0aGV5IGNvdWxkIGJlIHJlYWQgYXMgcHJvaGliaXRpbmcgdGhlIHNwZWNpYWxpemF0aW9uIG9mIGFueSBzdGFuZGFyZApsaWJyYXJ5IGNsYXNzIHRlbXBsYXRlcy4gV2UgbmVlZCB0byBjb25zdWx0IHdpdGggQ1dHIHRvIG1ha2Ugc3VyZSB3ZQp1c2UgdGhlIHJpZ2h0IHdvcmRpbmcuXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQyNSI+PC9hPjQyNS4gcmV0dXJuIHZhbHVlIG9mIHN0ZDo6Z2V0X3RlbXBvcmFyeV9idWZmZXI8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAuNy44IFt0ZW1wb3JhcnkuYnVmZmVyXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDMtMDktMTg8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBzdGFuZGFyZCBpcyBub3QgY2xlYXIgYWJvdXQgdGhlIHJlcXVpcmVtZW50cyBvbiB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbQphIGNhbGwgdG8gZ2V0X3RlbXBvcmFyeV9idWZmZXIoMCkuIEluIHBhcnRpY3VsYXIsIGl0IGZhaWxzIHRvIHNwZWNpZnkgd2hldGhlcgp0aGUgY2FsbCBzaG91bGQgcmV0dXJuIGEgZGlzdGluY3QgcG9pbnRlciBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkIChsaWtlCm9wZXJhdG9yIG5ldyksIG9yIHdoZXRoZXIgdGhlIHZhbHVlIGlzIHVuc3BlY2lmaWVkIChhcyBpZiByZXR1cm5lZCBieQptYWxsb2MpLiBUaGUgc3RhbmRhcmQgYWxzbyBmYWlscyB0byBtZW50aW9uIHdoYXQgdGhlIHJlcXVpcmVkIGJlaGF2aW9yCmlzIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGxlc3MgdGhhbiAwLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjAuNS4zIFttZXRhLmhlbHBdIHBhcmFncmFwaCAyIGZyb20gIi4uLm9yIGEgcGFpciBvZiAwCnZhbHVlcyBpZiBubyBzdG9yYWdlIGNhbiBiZSBvYnRhaW5lZCIgdG8gIi4uLm9yIGEgcGFpciBvZiAwIHZhbHVlcyBpZgpubyBzdG9yYWdlIGNhbiBiZSBvYnRhaW5lZCBvciBpZiA8aT5uPC9pPiAmbHQ7PSAwLiI8L3A+CjxwPjxpPltLb25hOiBNYXR0IHByb3ZpZGVkIHdvcmRpbmddPC9pPjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0MjYiPjwvYT40MjYuIHNlYXJjaF9uKCksIGZpbGxfbigpLCBhbmQgZ2VuZXJhdGVfbigpIHdpdGggbmVnYXRpdmUgbjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNS4xLjEyIFthbGcuc2VhcmNoXSwgMjUuMi42IFthbGcuZmlsbF0sIDI1LjIuNyBbYWxnLmdlbmVyYXRlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDMtMDktMTg8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2FsZy5zZWFyY2giPmlzc3VlczwvYT4gaW4gW2FsZy5zZWFyY2hdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGNvbXBsZXhpdHkgcmVxdWlyZW1lbnRzIGZvciB0aGVzZSBmdW5jdGlvbiB0ZW1wbGF0ZXMgYXJlIGluY29ycmVjdAoob3IgZG9uJ3QgZXZlbiBtYWtlIHNlbnNlKSBmb3IgbmVnYXRpdmUgbjo8L3A+Cgo8cD4yNS4xLjksIHA3IChzZWFyY2hfbik6Cjxicj4KQ29tcGxleGl0eTogQXQgbW9zdCAobGFzdDEgLSBmaXJzdDEpICogY291bnQgYXBwbGljYXRpb25zCm9mIHRoZSBjb3JyZXNwb25kaW5nIHByZWRpY2F0ZS48L3A+Cgo8cD4yNS4yLjUsIHAzIChmaWxsX24pOgo8YnI+CkNvbXBsZXhpdHk6IEV4YWN0bHkgbGFzdCAtIGZpcnN0IChvciBuKSBhc3NpZ25tZW50cy48L3A+Cgo8cD4yNS4yLjYsIHAzIChnZW5lcmF0ZV9uKToKPGJyPgpDb21wbGV4aXR5OiBFeGFjdGx5IGxhc3QgLSBmaXJzdCAob3IgbikgYXNzaWdubWVudHMuPC9wPgoKPHA+CkluIGFkZGl0aW9uLCB0aGUgUmVxdWlyZW1lbnRzIG9yIHRoZSBFZmZlY3RzIGNsYXVzZXMgZm9yIHRoZSBsYXR0ZXIgdHdvCnRlbXBsYXRlcyBkb24ndCBzYXkgYW55dGhpbmcgYWJvdXQgdGhlIGJlaGF2aW9yIHdoZW4gbiBpcyBuZWdhdGl2ZS4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI1LjEuOSwgcDcgdG88L3A+Cgo8YmxvY2txdW90ZT48cD4KQ29tcGxleGl0eTogQXQgbW9zdCAobGFzdDEgLSBmaXJzdDEpICogY291bnQgYXBwbGljYXRpb25zCm9mIHRoZSBjb3JyZXNwb25kaW5nIHByZWRpY2F0ZSBpZiBjb3VudCBpcyBwb3NpdGl2ZSwKb3IgMCBvdGhlcndpc2UuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD5DaGFuZ2UgMjUuMi41LCBwMiB0bzwvcD4KPGJsb2NrcXVvdGU+PHA+CkVmZmVjdHM6IEFzc2lnbnMgdmFsdWUgdGhyb3VnaCBhbGwgdGhlIGl0ZXJhdG9ycyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LApsYXN0KSwgb3IgW2ZpcnN0LCBmaXJzdCArIG4pIGlmIG4gaXMgcG9zaXRpdmUsIG5vbmUgb3RoZXJ3aXNlLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIDI1LjIuNSwgcDMgdG86PC9wPgo8YmxvY2txdW90ZT48cD4KQ29tcGxleGl0eTogRXhhY3RseSBsYXN0IC0gZmlyc3QgKG9yIG4gaWYgbiBpcyBwb3NpdGl2ZSwKb3IgMCBvdGhlcndpc2UpIGFzc2lnbm1lbnRzLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAyNS4yLjYsIHAxIAp0byAobm90aWNlIHRoZSBjb3JyZWN0aW9uIGZvciB0aGUgbWlzc3BlbGxlZCAidGhyb3VnaCIpOgo8L3A+CjxibG9ja3F1b3RlPjxwPgpFZmZlY3RzOiBJbnZva2VzIHRoZSBmdW5jdGlvbiBvYmplY3QgZ2VuYW5kIGFzc2lnbnMgdGhlIHJldHVybgp2YWx1ZSBvZiBnZW4gdGhyb3VnaCBhbGwgdGhlIGl0ZXJhdG9ycyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LCBsYXN0KSwKb3IgW2ZpcnN0LCBmaXJzdCArIG4pIGlmIG4gaXMgcG9zaXRpdmUsIG9yIFtmaXJzdCwgZmlyc3QpCm90aGVyd2lzZS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNS4yLjYsIHAzIHRvOjwvcD4KPGJsb2NrcXVvdGU+PHA+CkNvbXBsZXhpdHk6IEV4YWN0bHkgbGFzdCAtIGZpcnN0IChvciBuIGlmIG4gaXMgcG9zaXRpdmUsCm9yIDAgb3RoZXJ3aXNlKSBhc3NpZ25tZW50cy4KPC9wPjwvYmxvY2txdW90ZT4KCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SW5mb3JtYWxseSwgd2Ugd2FudCB0byBzYXkgdGhhdCB3aGVuZXZlciB3ZSBzZWUgYSBuZWdhdGl2ZSBudW1iZXIKICB3ZSB0cmVhdCBpdCB0aGUgc2FtZSBhcyBpZiBpdCB3ZXJlIHplcm8uICBXZSBiZWxpZXZlIHRoZSBhYm92ZQogIGNoYW5nZXMgZG8gdGhhdCAoYWx0aG91Z2ggdGhleSBtYXkgbm90IGJlIHRoZSBtaW5pbWFsIHdheSBvZiBzYXlpbmcKICBzbykuICBUaGUgTFdHIGNvbnNpZGVyZWQgYW5kIHJlamVjdGVkIHRoZSBhbHRlcm5hdGl2ZSBvZiBzYXlpbmcgdGhhdAogIG5lZ2F0aXZlIG51bWJlcnMgYXJlIHVuZGVmaW5lZCBiZWhhdmlvci48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDI4Ij48L2E+NDI4LiBzdHJpbmc6OmVyYXNlKGl0ZXJhdG9yKSB2YWxpZGl0eTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMS4zLjYuNSBbc3RyaW5nOjplcmFzZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAzLTA5LTE4PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmc6OmVyYXNlIj5pc3N1ZXM8L2E+IGluIFtzdHJpbmc6OmVyYXNlXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CjIzLjEuMSwgcDMgYWxvbmcgd2l0aCBUYWJsZSA2NyBzcGVjaWZ5IGFzIGEgcHJlcmVxdWlzaXRlIGZvciBhLmVyYXNlKHEpCnRoYXQgcSBtdXN0IGJlIGEgdmFsaWQgZGVyZWZlcmVuY2VhYmxlIGl0ZXJhdG9yIGludG8gdGhlIHNlcXVlbmNlIGEuCjwvcD4KCjxwPgpIb3dldmVyLCAyMS4zLjUuNSwgcDUgZGVzY3JpYmluZyBzdHJpbmc6OmVyYXNlKHApIG9ubHkgcmVxdWlyZXMgdGhhdApwIGJlIGEgdmFsaWQgaXRlcmF0b3IuCjwvcD4KCjxwPgpUaGlzIG1heSBiZSBpbnRlcmVwcmV0ZWQgYXMgYSByZWxheGF0aW9uIG9mIHRoZSBnZW5lcmFsIHJlcXVpcmVtZW50LAp3aGljaCBpcyBtb3N0IGxpa2VseSBub3QgdGhlIGludGVudC4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVtb3ZlIDIxLjMuNi41IFtzdHJpbmc6OmVyYXNlXSBwYXJhZ3JhcGggNS48L3A+CgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgY29uc2lkZXJlZCB0d28gb3B0aW9uczogY2hhbmdpbmcgdGhlIHN0cmluZyByZXF1aXJlbWVudHMgdG8KICBtYXRjaCB0aGUgZ2VuZXJhbCBjb250YWluZXIgcmVxdWlyZW1lbnRzLCBvciBqdXN0IHJlbW92aW5nIHRoZQogIGVycm9uZW91cyBzdHJpbmcgcmVxdWlyZW1lbnRzIGFsdG9nZXRoZXIuICBUaGUgTFdHIGNob3NlIHRoZSBsYXR0ZXIKICBvcHRpb24sIG9uIHRoZSBncm91bmRzIHRoYXQgZHVwbGljYXRpbmcgdGV4dCBhbHdheXMgcmlza3MgdGhlCiAgcG9zc2liaWxpdHkgdGhhdCBpdCBtaWdodCBiZSBkdXBsaWNhdGVkIGluY29ycmVjdGx5LjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0MzIiPjwvYT40MzIuIHN0cmluZ2J1Zjo6b3ZlcmZsb3coKSBtYWtlcyBvbmx5IG9uZSB3cml0ZSBwb3NpdGlvbiBhdmFpbGFibGU8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNy4xLjQgW3N0cmluZ2J1Zi52aXJ0dWFsc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQ2hyaXN0aWFuIFcgQnJvY2sgPGI+RGF0ZTo8L2I+IDIwMDMtMDktMjQ8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3N0cmluZ2J1Zi52aXJ0dWFscyI+aXNzdWVzPC9hPiBpbiBbc3RyaW5nYnVmLnZpcnR1YWxzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+MjcuNy4xLjMgcGFyIDggc2F5czo8L3A+CjxibG9ja3F1b3RlPjxwPgpOb3RlczogVGhlIGZ1bmN0aW9uIGNhbiBtYWtlIGEgd3JpdGUgcG9zaXRpb24gYXZhaWxhYmxlIG9ubHkgaWYKICAgICggbW9kZSAmYW1wOyBpb3NfYmFzZTo6b3V0KSAhPSAwLiBUbyBtYWtlIGEgd3JpdGUgcG9zaXRpb24KICAgIGF2YWlsYWJsZSwgdGhlIGZ1bmN0aW9uIHJlYWxsb2NhdGVzIChvciBpbml0aWFsbHkgYWxsb2NhdGVzKSBhbgogICAgYXJyYXkgb2JqZWN0IHdpdGggYSBzdWZmaWNpZW50IG51bWJlciBvZiBlbGVtZW50cyB0byBob2xkIHRoZQogICAgY3VycmVudCBhcnJheSBvYmplY3QgKGlmIGFueSksIHBsdXMgb25lIGFkZGl0aW9uYWwgd3JpdGUgcG9zaXRpb24uCiAgICBJZiAoIG1vZGUgJmFtcDsgaW9zX2Jhc2U6OmluKSAhPSAwLCB0aGUgZnVuY3Rpb24gYWx0ZXJzIHRoZSByZWFkIGVuZAogICAgcG9pbnRlciBlZ3B0cigpIHRvIHBvaW50IGp1c3QgcGFzdCB0aGUgbmV3IHdyaXRlIHBvc2l0aW9uIChhcwogICAgZG9lcyB0aGUgd3JpdGUgZW5kIHBvaW50ZXIgZXBwdHIoKSkuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4KVGhlIHNlbnRlbmNlcyAicGx1cyBvbmUgYWRkaXRpb25hbCB3cml0ZSBwb3NpdGlvbi4iIGFuZCBlc3BlY2lhbGx5CiAgICAiKGFzIGRvZXMgdGhlIHdyaXRlIGVuZCBwb2ludGVyIGVwcHRyKCkpIiBDT1VMRCBieSBpbnRlcnByZXRlZAogICAgKGFuZCBpcyBpbnRlcnByZXRlZCBieSBhdCBsZWFzdCBteSBsaWJyYXJ5IHZlbmRvcikgYXM6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgogICAgcG9zdC1jb25kaXRpb246IGVwcHRyKCkgPT0gcHB0cigpKzEKPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpUaGlzIFdPVUxEIGZvcmNlIHNwdXRjKCkgdG8gY2FsbCB0aGUgdmlydHVhbCBvdmVyZmxvdygpIGVhY2ggdGltZS4KPC9wPgoKPHA+VGhlIHByb3Bvc2VkIGNoYW5nZSBhbHNvIGFmZmVjdHMgRGVmZWN0IFJlcG9ydCAxNjkuPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjI3LjcuMS4xLzIgQ2hhbmdlOjwvcD4KCjxibG9ja3F1b3RlPjxwPgoyLSBOb3RlczogVGhlIGZ1bmN0aW9uIGFsbG9jYXRlcyBubyBhcnJheSBvYmplY3QuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4KdG86CjwvcD4KCjxibG9ja3F1b3RlPjxwPgoyLSBQb3N0Y29uZGl0aW9uOiBzdHIoKSA9PSAiIi4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgoyNy43LjEuMS8zIENoYW5nZToKPC9wPgoKPGJsb2NrcXVvdGU+CjxwPgotMy0gRWZmZWN0czogQ29uc3RydWN0cyBhbiBvYmplY3Qgb2YgY2xhc3MgYmFzaWNfc3RyaW5nYnVmLAppbml0aWFsaXppbmcgdGhlIGJhc2UgY2xhc3Mgd2l0aCBiYXNpY19zdHJlYW1idWYoKQoobGliLnN0cmVhbWJ1Zi5jb25zKSwgYW5kIGluaXRpYWxpemluZyBtb2RlIHdpdGggd2hpY2ggLiBUaGVuIGNvcGllcwp0aGUgY29udGVudCBvZiBzdHIgaW50byB0aGUgYmFzaWNfc3RyaW5nYnVmIHVuZGVybHlpbmcgY2hhcmFjdGVyCnNlcXVlbmNlIGFuZCBpbml0aWFsaXplcyB0aGUgaW5wdXQgYW5kIG91dHB1dCBzZXF1ZW5jZXMgYWNjb3JkaW5nIHRvCndoaWNoLiBJZiB3aGljaCAmYW1wOyBpb3NfYmFzZTo6b3V0IGlzIHRydWUsIGluaXRpYWxpemVzIHRoZSBvdXRwdXQKc2VxdWVuY2Ugd2l0aCB0aGUgdW5kZXJseWluZyBzZXF1ZW5jZS4gSWYgd2hpY2ggJmFtcDsgaW9zX2Jhc2U6OmluIGlzCnRydWUsIGluaXRpYWxpemVzIHRoZSBpbnB1dCBzZXF1ZW5jZSB3aXRoIHRoZSB1bmRlcmx5aW5nIHNlcXVlbmNlLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTMtIEVmZmVjdHM6IENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZiwKaW5pdGlhbGl6aW5nIHRoZSBiYXNlIGNsYXNzIHdpdGggYmFzaWNfc3RyZWFtYnVmKCkKKGxpYi5zdHJlYW1idWYuY29ucyksIGFuZCBpbml0aWFsaXppbmcgbW9kZSB3aXRoIHdoaWNoLiBUaGVuIGNvcGllcwp0aGUgY29udGVudCBvZiBzdHIgaW50byB0aGUgYmFzaWNfc3RyaW5nYnVmIHVuZGVybHlpbmcgY2hhcmFjdGVyCnNlcXVlbmNlLiBJZiB3aGljaCAmYW1wOyBpb3NfYmFzZTo6b3V0IGlzIHRydWUsIGluaXRpYWxpemVzIHRoZSBvdXRwdXQKc2VxdWVuY2Ugc3VjaCB0aGF0IHBiYXNlKCkgcG9pbnRzIHRvIHRoZSBmaXJzdCB1bmRlcmx5aW5nIGNoYXJhY3RlciwKZXBwdHIoKSBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QgdW5kZXJseWluZyBjaGFyYWN0ZXIsIGFuZCBpZiAod2hpY2ggJmFtcDsKaW9zX2Jhc2U6OmF0ZSkgaXMgdHJ1ZSwgcHB0cigpIGlzIHNldCBlcXVhbCB0bwplcHB0cigpIGVsc2UgcHB0cigpIGlzIHNldCBlcXVhbCB0byBwYmFzZSgpLiBJZiB3aGljaCAmYW1wOyBpb3NfYmFzZTo6aW4KaXMgdHJ1ZSwgaW5pdGlhbGl6ZXMgdGhlIGlucHV0IHNlcXVlbmNlIHN1Y2ggdGhhdCBlYmFjaygpIGFuZCBncHRyKCkKcG9pbnQgdG8gdGhlIGZpcnN0IHVuZGVybHlpbmcgY2hhcmFjdGVyIGFuZCBlZ3B0cigpIHBvaW50cyBvbmUgcGFzdAp0aGUgbGFzdCB1bmRlcmx5aW5nIGNoYXJhY3Rlci4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4yNy43LjEuMi8xIENoYW5nZTo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+Ci0xLSBSZXR1cm5zOiBBIGJhc2ljX3N0cmluZyBvYmplY3Qgd2hvc2UgY29udGVudCBpcyBlcXVhbCB0byB0aGUKYmFzaWNfc3RyaW5nYnVmIHVuZGVybHlpbmcgY2hhcmFjdGVyIHNlcXVlbmNlLiBJZiB0aGUgYnVmZmVyIGlzIG9ubHkKY3JlYXRlZCBpbiBpbnB1dCBtb2RlLCB0aGUgdW5kZXJseWluZyBjaGFyYWN0ZXIgc2VxdWVuY2UgaXMgZXF1YWwgdG8KdGhlIGlucHV0IHNlcXVlbmNlOyBvdGhlcndpc2UsIGl0IGlzIGVxdWFsIHRvIHRoZSBvdXRwdXQgc2VxdWVuY2UuIEluCmNhc2Ugb2YgYW4gZW1wdHkgdW5kZXJseWluZyBjaGFyYWN0ZXIgc2VxdWVuY2UsIHRoZSBmdW5jdGlvbiByZXR1cm5zCmJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OygpLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTEtIFJldHVybnM6IEEgYmFzaWNfc3RyaW5nIG9iamVjdCB3aG9zZSBjb250ZW50IGlzIGVxdWFsIHRvIHRoZQpiYXNpY19zdHJpbmdidWYgdW5kZXJseWluZyBjaGFyYWN0ZXIgc2VxdWVuY2UuIElmIHRoZSBiYXNpY19zdHJpbmdidWYKd2FzIGNyZWF0ZWQgb25seSBpbiBpbnB1dCBtb2RlLCB0aGUgcmVzdWx0YW50IGJhc2ljX3N0cmluZyBjb250YWlucwp0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIGluIHRoZSByYW5nZSBbZWJhY2soKSwgZWdwdHIoKSkuICBJZiB0aGUKYmFzaWNfc3RyaW5nYnVmIHdhcyBjcmVhdGVkIHdpdGggKHdoaWNoICZhbXA7IGlvc19iYXNlOjpvdXQpIGJlaW5nIHRydWUKdGhlbiB0aGUgcmVzdWx0YW50IGJhc2ljX3N0cmluZyBjb250YWlucyB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIGluIHRoZQpyYW5nZSBbcGJhc2UoKSwgaGlnaF9tYXJrKSB3aGVyZSBoaWdoX21hcmsgcmVwcmVzZW50cyB0aGUgcG9zaXRpb24gb25lCnBhc3QgdGhlIGhpZ2hlc3QgaW5pdGlhbGl6ZWQgY2hhcmFjdGVyIGluIHRoZSBidWZmZXIuICBDaGFyYWN0ZXJzIGNhbgpiZSBpbml0aWFsaXplZCBlaXRoZXIgdGhyb3VnaCB3cml0aW5nIHRvIHRoZSBzdHJlYW0sIG9yIGJ5CmNvbnN0cnVjdGluZyB0aGUgYmFzaWNfc3RyaW5nYnVmIHdpdGggYSBiYXNpY19zdHJpbmcsIG9yIGJ5IGNhbGxpbmcKdGhlIHN0cihiYXNpY19zdHJpbmcpIG1lbWJlciBmdW5jdGlvbi4gIEluIHRoZSBjYXNlIG9mIGNhbGxpbmcgdGhlCnN0cihiYXNpY19zdHJpbmcpIG1lbWJlciBmdW5jdGlvbiwgYWxsIGNoYXJhY3RlcnMgaW5pdGlhbGl6ZWQgcHJpb3IgdG8KdGhlIGNhbGwgYXJlIG5vdyBjb25zaWRlcmVkIHVuaW5pdGlhbGl6ZWQgKGV4Y2VwdCBmb3IgdGhvc2UKY2hhcmFjdGVycyByZS1pbml0aWFsaXplZCBieSB0aGUgbmV3IGJhc2ljX3N0cmluZykuICBPdGhlcndpc2UgdGhlCmJhc2ljX3N0cmluZ2J1ZiBoYXMgYmVlbiBjcmVhdGVkIGluIG5laXRoZXIgaW5wdXQgbm9yIG91dHB1dCBtb2RlIGFuZAphIHplcm8gbGVuZ3RoIGJhc2ljX3N0cmluZyBpcyByZXR1cm5lZC4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KMjcuNy4xLjIvMiBDaGFuZ2U6CjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTItIEVmZmVjdHM6IElmIHRoZSBiYXNpY19zdHJpbmdidWYncyB1bmRlcmx5aW5nIGNoYXJhY3RlciBzZXF1ZW5jZSBpcwpub3QgZW1wdHksIGRlYWxsb2NhdGVzIGl0LiBUaGVuIGNvcGllcyB0aGUgY29udGVudCBvZiBzIGludG8gdGhlCmJhc2ljX3N0cmluZ2J1ZiB1bmRlcmx5aW5nIGNoYXJhY3RlciBzZXF1ZW5jZSBhbmQgaW5pdGlhbGl6ZXMgdGhlCmlucHV0IGFuZCBvdXRwdXQgc2VxdWVuY2VzIGFjY29yZGluZyB0byB0aGUgbW9kZSBzdG9yZWQgd2hlbiBjcmVhdGluZwp0aGUgYmFzaWNfc3RyaW5nYnVmIG9iamVjdC4gSWYgKG1vZGUmYW1wO2lvc19iYXNlOjpvdXQpIGlzIHRydWUsIHRoZW4KaW5pdGlhbGl6ZXMgdGhlIG91dHB1dCBzZXF1ZW5jZSB3aXRoIHRoZSB1bmRlcmx5aW5nIHNlcXVlbmNlLiBJZgoobW9kZSZhbXA7aW9zX2Jhc2U6OmluKSBpcyB0cnVlLCB0aGVuIGluaXRpYWxpemVzIHRoZSBpbnB1dCBzZXF1ZW5jZSB3aXRoCnRoZSB1bmRlcmx5aW5nIHNlcXVlbmNlLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTItIEVmZmVjdHM6IENvcGllcyB0aGUgY29udGVudCBvZiBzIGludG8gdGhlIGJhc2ljX3N0cmluZ2J1Zgp1bmRlcmx5aW5nIGNoYXJhY3RlciBzZXF1ZW5jZS4gSWYgbW9kZSAmYW1wOyBpb3NfYmFzZTo6b3V0IGlzIHRydWUsCmluaXRpYWxpemVzIHRoZSBvdXRwdXQgc2VxdWVuY2Ugc3VjaCB0aGF0IHBiYXNlKCkgcG9pbnRzIHRvIHRoZSBmaXJzdAp1bmRlcmx5aW5nIGNoYXJhY3RlciwgZXBwdHIoKSBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QgdW5kZXJseWluZwpjaGFyYWN0ZXIsIGFuZCBpZiAobW9kZSAmYW1wOyBpb3NfYmFzZTo6YXRlKSBpcyB0cnVlLApwcHRyKCkgaXMgc2V0IGVxdWFsIHRvIGVwcHRyKCkgZWxzZSBwcHRyKCkgaXMgc2V0IGVxdWFsIHRvIHBiYXNlKCkuIElmCm1vZGUgJmFtcDsgaW9zX2Jhc2U6OmluIGlzIHRydWUsIGluaXRpYWxpemVzIHRoZSBpbnB1dCBzZXF1ZW5jZSBzdWNoIHRoYXQKZWJhY2soKSBhbmQgZ3B0cigpIHBvaW50IHRvIHRoZSBmaXJzdCB1bmRlcmx5aW5nIGNoYXJhY3RlciBhbmQgZWdwdHIoKQpwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QgdW5kZXJseWluZyBjaGFyYWN0ZXIuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+UmVtb3ZlIDI3LjIuMS4yLzMuICAoU2FtZSByYXRpb25hbGUgYXMgaXNzdWUgMjM4OiBpbmNvcnJlY3QgYW5kIHVubmVjZXNzYXJ5Lik8L3A+Cgo8cD4yNy43LjEuMy8xIENoYW5nZTo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CjEtIFJldHVybnM6IElmIHRoZSBpbnB1dCBzZXF1ZW5jZSBoYXMgYSByZWFkIHBvc2l0aW9uIGF2YWlsYWJsZSwKcmV0dXJucyB0cmFpdHM6OnRvX2ludF90eXBlKCpncHRyKCkpLiAgT3RoZXJ3aXNlLCByZXR1cm5zCnRyYWl0czo6ZW9mKCkuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CjxwPgoxLSBSZXR1cm5zOiBJZiB0aGUgaW5wdXQgc2VxdWVuY2UgaGFzIGEgcmVhZCBwb3NpdGlvbiBhdmFpbGFibGUsCnJldHVybnMgdHJhaXRzOjp0b19pbnRfdHlwZSgqZ3B0cigpKS4gIE90aGVyd2lzZSwgcmV0dXJucwp0cmFpdHM6OmVvZigpLiAgQW55IGNoYXJhY3RlciBpbiB0aGUgdW5kZXJseWluZyBidWZmZXIgd2hpY2ggaGFzIGJlZW4KaW5pdGlhbGl6ZWQgaXMgY29uc2lkZXJlZCB0byBiZSBwYXJ0IG9mIHRoZSBpbnB1dCBzZXF1ZW5jZS4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4yNy43LjEuMy85IENoYW5nZTo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+Ci05LSBOb3RlczogVGhlIGZ1bmN0aW9uIGNhbiBtYWtlIGEgd3JpdGUgcG9zaXRpb24gYXZhaWxhYmxlIG9ubHkgaWYgKAptb2RlICZhbXA7IGlvc19iYXNlOjpvdXQpICE9IDAuIFRvIG1ha2UgYSB3cml0ZSBwb3NpdGlvbiBhdmFpbGFibGUsIHRoZQpmdW5jdGlvbiByZWFsbG9jYXRlcyAob3IgaW5pdGlhbGx5IGFsbG9jYXRlcykgYW4gYXJyYXkgb2JqZWN0IHdpdGggYQpzdWZmaWNpZW50IG51bWJlciBvZiBlbGVtZW50cyB0byBob2xkIHRoZSBjdXJyZW50IGFycmF5IG9iamVjdCAoaWYKYW55KSwgcGx1cyBvbmUgYWRkaXRpb25hbCB3cml0ZSBwb3NpdGlvbi4gSWYgKCBtb2RlICZhbXA7IGlvc19iYXNlOjppbikgIT0KMCwgdGhlIGZ1bmN0aW9uIGFsdGVycyB0aGUgcmVhZCBlbmQgcG9pbnRlciBlZ3B0cigpIHRvIHBvaW50IGp1c3QgcGFzdAp0aGUgbmV3IHdyaXRlIHBvc2l0aW9uIChhcyBkb2VzIHRoZSB3cml0ZSBlbmQgcG9pbnRlciBlcHB0cigpKS4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+Ci05LSBUaGUgZnVuY3Rpb24gY2FuIG1ha2UgYSB3cml0ZSBwb3NpdGlvbiBhdmFpbGFibGUgb25seSBpZiAoIG1vZGUgJmFtcDsKaW9zX2Jhc2U6Om91dCkgIT0gMC4gVG8gbWFrZSBhIHdyaXRlIHBvc2l0aW9uIGF2YWlsYWJsZSwgdGhlIGZ1bmN0aW9uCnJlYWxsb2NhdGVzIChvciBpbml0aWFsbHkgYWxsb2NhdGVzKSBhbiBhcnJheSBvYmplY3Qgd2l0aCBhIHN1ZmZpY2llbnQKbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGhvbGQgdGhlIGN1cnJlbnQgYXJyYXkgb2JqZWN0IChpZiBhbnkpLCBwbHVzIG9uZQphZGRpdGlvbmFsIHdyaXRlIHBvc2l0aW9uLiBJZiAoIG1vZGUgJmFtcDsgaW9zX2Jhc2U6OmluKSAhPSAwLCB0aGUKZnVuY3Rpb24gYWx0ZXJzIHRoZSByZWFkIGVuZCBwb2ludGVyIGVncHRyKCkgdG8gcG9pbnQganVzdCBwYXN0IHRoZQpuZXcgd3JpdGUgcG9zaXRpb24uCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+MjcuNy4xLjMvMTIgQ2hhbmdlOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTEyLSBfIElmIChuZXdvZmYgKyBvZmYpICZsdDsgMCwgb3IgKHhlbmQgLSB4YmVnKSAmbHQ7IChuZXdvZmYgKyBvZmYpLCB0aGUKcG9zaXRpb25pbmcgb3BlcmF0aW9uIGZhaWxzLiBPdGhlcndpc2UsIHRoZSBmdW5jdGlvbiBhc3NpZ25zIHhiZWcgKwpuZXdvZmYgKyBvZmYgdG8gdGhlIG5leHQgcG9pbnRlciB4bmV4dCAuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CjxwPgotMTItIF8gSWYgKG5ld29mZiArIG9mZikgJmx0OyAwLCBvciBpZiAobmV3b2ZmICsgb2ZmKSByZWZlcnMgdG8gYW4KdW5pbml0aWFsaXplZCBjaGFyYWN0ZXIgKGFzIGRlZmluZWQgaW4gMjcuNy4xLjMgW3N0cmluZ2J1Zi5tZW1iZXJzXQpwYXJhZ3JhcGggMSksIHRoZSBwb3NpdGlvbmluZyBvcGVyYXRpb24gZmFpbHMuIE90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uCmFzc2lnbnMgeGJlZyArIG5ld29mZiArIG9mZiB0byB0aGUgbmV4dCBwb2ludGVyIHhuZXh0IC4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bcG9zdC1Lb25hOiBIb3dhcmQgcHJvdmlkZWQgd29yZGluZy4gIEF0IEtvbmEgdGhlIExXRyBhZ3JlZWQgdGhhdAogIHNvbWV0aGluZyBhbG9uZyB0aGVzZSBsaW5lcyB3YXMgYSBnb29kIGlkZWEsIGJ1dCB0aGUgb3JpZ2luYWwKICBwcm9wb3NlZCByZXNvbHV0aW9uIGRpZG4ndCBzYXkgZW5vdWdoIGFib3V0IHRoZSBlZmZlY3Qgb2YgdmFyaW91cwogIG1lbWJlciBmdW5jdGlvbnMgb24gdGhlIHVuZGVybHlpbmcgY2hhcmFjdGVyIHNlcXVlbmNlcy5dPC9pPjwvcD4KCgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgY3VycmVudCBiYXNpY19zdHJpbmdidWYgZGVzY3JpcHRpb24gaXMgb3Zlci1jb25zdHJhaW5lZCBpbiBzdWNoCmEgd2F5IGFzIHRvIHByb2hpYml0IHZlbmRvcnMgZnJvbSBtYWtpbmcgdGhpcyB0aGUgaGlnaC1wZXJmb3JtYW5jZQppbi1tZW1vcnkgc3RyZWFtIGl0IHdhcyBtZWFudCB0byBiZS4gIFRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtIGlzIHRoYXQKdGhlIHBvaW50ZXJzOiBlYmFjaygpLCBncHRyKCksIGVncHRyKCksIHBiYXNlKCksIHBwdHIoKSwgZXBwdHIoKSBhcmUKb2JzZXJ2YWJsZSBmcm9tIGEgZGVyaXZlZCBjbGllbnQsIGFuZCB0aGUgY3VycmVudCBkZXNjcmlwdGlvbgpyZXN0cmljdHMgdGhlIHJhbmdlIFtwYmFzZSgpLCBlcHB0cigpKSBmcm9tIGJlaW5nIGdyb3duIGdlb21ldHJpY2FsbHkuClRoaXMgY2hhbmdlIGFsbG93cywgYnV0IGRvZXMgbm90IHJlcXVpcmUsIGdlb21ldHJpYyBncm93dGggb2YgdGhpcwpyYW5nZS48L3A+Cgo8cD5CYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBpc3N1ZXM6IFRoZXNlIGNoYW5nZXMgd2lsbCBicmVhayBjb2RlIHRoYXQKZGVyaXZlcyBmcm9tIGJhc2ljX3N0cmluZ2J1Ziwgb2JzZXJ2ZXMgZXBwdHIoKSwgYW5kIGRlcGVuZHMgdXBvbgpbcGJhc2UoKSwgZXBwdHIoKSkgZ3Jvd2luZyBieSBvbmUgY2hhcmFjdGVyIG9uIGVhY2ggY2FsbCB0byBvdmVyZmxvdygpCihpLmUuIHRlc3Qgc3VpdGVzKS4gIE90aGVyd2lzZSB0aGVyZSBhcmUgbm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKaXNzdWVzLjwvcD4KCjxwPjI3LjcuMS4xLzI6IFRoZSBub24tbm9ybWF0aXZlIG5vdGUgaXMgbm9uLWJpbmRpbmcsIGFuZCBpZiBpdCB3ZXJlCmJpbmRpbmcsIHdvdWxkIGJlIG92ZXIgc3BlY2lmaWNhdGlvbi4gIFRoZSByZWNvbW1lbmRlZCBjaGFuZ2UgZm9jdXNlcwpvbiB0aGUgaW1wb3J0YW50IG9ic2VydmFibGUgZmFjdC48L3A+Cgo8cD4yNy43LjEuMS8zOiBUaGlzIGNoYW5nZSBkb2VzIHR3byB0aGluZ3M6IDEuICBJdCBkZXNjcmliZXMgZXhhY3RseQp3aGF0IG11c3QgaGFwcGVuIGluIHRlcm1zIG9mIHRoZSBzZXF1ZW5jZXMuICBUaGUgdGVybXMgImlucHV0CnNlcXVlbmNlIiBhbmQgIm91dHB1dCBzZXF1ZW5jZSIgYXJlIG5vdCB3ZWxsIGRlZmluZWQuICAyLiAgSXQKaW50cm9kdWNlcyBhIGNvbW1vbiBleHRlbnNpb246IG9wZW4gd2l0aCBhcHAgb3IgYXRlIG1vZGUuICBJIGNvbmN1cgp3aXRoIGlzc3VlIDIzOCB0aGF0IHBhcmFncmFwaCA0IGlzIGJvdGggd3JvbmcgYW5kIHVubmVjZXNzYXJ5LjwvcD4KCjxwPjI3LjcuMS4yLzE6IFRoaXMgY2hhbmdlIGlzIHRoZSBjcnV4IG9mIHRoZSBlZmZpY2llbmN5IGlzc3VlLiAgVGhlCnJlc3VsdGFudCBiYXNpY19zdHJpbmcgaXMgbm90IGRlcGVuZGVudCB1cG9uIGVwcHRyKCksIGFuZCB0aHVzCmltcGxlbWVudG9ycyBhcmUgZnJlZSB0byBncm93IHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBnZW9tZXRyaWNhbGx5CmR1cmluZyBvdmVyZmxvdygpICphbmQqIHBsYWNlIGVwcHRyKCkgYXQgdGhlIGVuZCBvZiB0aGF0IGJ1ZmZlci48L3A+Cgo8cD4yNy43LjEuMi8yOiAgTWFkZSBjb25zaXN0ZW50IHdpdGggdGhlIHByb3Bvc2VkIDI3LjcuMS4xLzMuPC9wPgoKPHA+MjcuNy4xLjMvMTogQ2xhcmlmaWVzIHRoYXQgY2hhcmFjdGVycyB3cml0dGVuIHRvIHRoZSBzdHJlYW0gYmV5b25kCnRoZSBpbml0aWFsbHkgc3BlY2lmaWVkIHN0cmluZyBhcmUgYXZhaWxhYmxlIGZvciByZWFkaW5nIGluIGFuIGkvbwpiYXNpY19zdHJlYW1idWYuPC9wPgoKPHA+MjcuNy4xLjMvOTogTWFkZSBub3JtYXRpdmUgYnkgcmVtb3ZpbmcgIk5vdGVzOiIsIGFuZCByZW1vdmVkIHRoZQp0cmFpbGluZyBwYXJlbnRoZXRpY2FsIGNvbW1lbnQgY29uY2VybmluZyBlcHB0cigpLjwvcD4KCjxwPjI3LjcuMS4zLzEyOiBSZXN0cmljdGluZyB0aGUgcG9zaXRpb25pbmcgdG8gW3hiZWcsIHhlbmQpIGlzIG5vCmxvbmdlciBhbGxvd2FibGUgc2luY2UgW3BiYXNlKCksIGVwcHRyKCkpIG1heSBub3cgY29udGFpbgp1bmluaXRpYWxpemVkIGNoYXJhY3RlcnMuICBQb3NpdGlvbmluZyBpcyBvbmx5IGFsbG93YWJsZSBvdmVyIHRoZQppbml0aWFsaXplZCByYW5nZS48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDM0Ij48L2E+NDM0LiBiaXRzZXQ6OnRvX3N0cmluZygpIGhhcmQgdG8gdXNlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjMuNS4yIFtiaXRzZXQubWVtYmVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAzLTEwLTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNiaXRzZXQubWVtYmVycyI+aXNzdWVzPC9hPiBpbiBbYml0c2V0Lm1lbWJlcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI0RSIj5EUjwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSXQgaGFzIGJlZW4gcG9pbnRlZCBvdXQgYSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgYml0c2V0IHRvX3N0cmluZygpIG1lbWJlcgpmdW5jdGlvbiB0ZW1wbGF0ZSBpcyB0ZWRpb3VzIHRvIHVzZSBzaW5jZSBjYWxsZXJzIG11c3QgZXhwbGljaXRseSBzcGVjaWZ5IHRoZQplbnRpcmUgdGVtcGxhdGUgYXJndW1lbnQgbGlzdCAoMyBhcmd1bWVudHMpLiBBdCBsZWFzdCB0d28gaW1wbGVtZW50YXRpb25zCnByb3ZpZGUgYSBudW1iZXIgb2Ygb3ZlcmxvYWRzIG9mIHRoaXMgdGVtcGxhdGUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gdXNlLgo8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gb3JkZXIgdG8gYWxsb3cgY2FsbGVycyB0byBzcGVjaWZ5IG5vIHRlbXBsYXRlIGFyZ3VtZW50cyBhdCBhbGwsIGp1c3QgdGhlCmZpcnN0IG9uZSAoY2hhclQpLCBvciB0aGUgZmlyc3QgMiAoY2hhclQgYW5kIHRyYWl0cyksIGluIGFkZGl0aW9uIHRvIGFsbAp0aHJlZSB0ZW1wbGF0ZSBhcmd1bWVudHMsIGFkZCB0aGUgZm9sbG93aW5nIHRocmVlIG92ZXJsb2FkcyB0byBib3RoIHRoZQppbnRlcmZhY2UgKGRlY2xhcmF0aW9ucyBvbmx5KSBvZiB0aGUgY2xhc3MgdGVtcGxhdGUgYml0c2V0IGFzIHdlbGwgYXMgdG8Kc2VjdGlvbiAyMy4zLjUuMiwgaW1tZWRpYXRlbHkgYWZ0ZXIgcDM0LCB0aGUgUmV0dXJucyBjbGF1c2Ugb2YgdGhlIGV4aXN0aW5nCnRvX3N0cmluZygpIG1lbWJlciBmdW5jdGlvbiB0ZW1wbGF0ZTo8L3A+Cgo8cHJlPiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyZndDsKICAgIGJhc2ljX3N0cmluZyZsdDtjaGFyVCwgdHJhaXRzLCBhbGxvY2F0b3ImbHQ7Y2hhclQmZ3Q7ICZndDsKICAgIHRvX3N0cmluZyAoKSBjb25zdDsKCiAgICAtMzQuMS0gUmV0dXJuczogdG9fc3RyaW5nJmx0O2NoYXJULCB0cmFpdHMsIGFsbG9jYXRvciZsdDtjaGFyVCZndDsgJmd0OygpLgoKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBjaGFyVCZndDsKICAgIGJhc2ljX3N0cmluZyZsdDtjaGFyVCwgY2hhcl90cmFpdHMmbHQ7Y2hhclQmZ3Q7LCBhbGxvY2F0b3ImbHQ7Y2hhclQmZ3Q7ICZndDsKICAgIHRvX3N0cmluZyAoKSBjb25zdDsKCiAgICAtMzQuMi0gUmV0dXJuczogdG9fc3RyaW5nJmx0O2NoYXJULCBjaGFyX3RyYWl0cyZsdDtjaGFyVCZndDssIGFsbG9jYXRvciZsdDtjaGFyVCZndDsgJmd0OygpLgoKICAgIGJhc2ljX3N0cmluZyZsdDtjaGFyLCBjaGFyX3RyYWl0cyZsdDtjaGFyJmd0OywgYWxsb2NhdG9yJmx0O2NoYXImZ3Q7ICZndDsKICAgIHRvX3N0cmluZyAoKSBjb25zdDsKCiAgICAtMzQuMy0gUmV0dXJuczogdG9fc3RyaW5nJmx0O2NoYXIsIGNoYXJfdHJhaXRzJmx0O2NoYXImZ3Q7LCBhbGxvY2F0b3ImbHQ7Y2hhciZndDsgJmd0OygpLgo8L3ByZT4KCjxwPjxpPltLb25hOiB0aGUgTFdHIGFncmVlcyB0aGF0IHRoaXMgaXMgYW4gaW1wcm92ZW1lbnQgb3ZlciB0aGUKICBzdGF0dXMgcXVvLiAgRGlldG1hciB0aG91Z2h0IGFib3V0IGFuIGFsdGVybmF0aXZlIHVzaW5nIGEgcHJveHkKICBvYmplY3QgYnV0IG5vdyBiZWxpZXZlcyB0aGF0IHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGFib3ZlIGlzIHRoZQogIHJpZ2h0IGNob2ljZS4KXTwvaT48L3A+CgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDM1Ij48L2E+NDM1LiBidWcgaW4gRFIgMjU8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjEuMy44LjkgW3N0cmluZy5pb10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAzLTEwLTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmcuaW8iPmlzc3VlczwvYT4gaW4gW3N0cmluZy5pb10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+Cgo8cD4KSXQgaGFzIGJlZW4gcG9pbnRlZCBvdXQgdGhhdCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBpbiBEUiAyNSBtYXkgbm90IGJlCnF1aXRlIHVwIHRvIHNudWZmOiA8YnI+Cmh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9saWJzdGRjKysvMjAwMy0wOS9tc2cwMDE0Ny5odG1sCmh0dHA6Ly9hbnViaXMuZGt1dWcuZGsvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1PGJyPgo8L3A+Cgo8cD4KSXQgbG9va3MgbGlrZSBQZXR1ciBpcyByaWdodC4gVGhlIGNvbXBsZXRlIGNvcnJlY3RlZCB0ZXh0IGlzIGNvcGllZCBiZWxvdy4KSSB0aGluayB3ZSBtYXkgaGF2ZSBoYXZlIGJlZW4gY29uZnVzZWQgYnkgdGhlIHJlZmVyZW5jZSB0byAyMi4yLjIuMi4yIGFuZAp0aGUgc3Vic2VxdWVudCBkZXNjcmlwdGlvbiBvZiBgbicgd2hpY2ggYWN0dWFsbHkgdGFsa3MgYWJvdXQgdGhlIHNlY29uZAphcmd1bWVudCB0byBzcHV0bigpLCBub3QgYWJvdXQgdGhlIG51bWJlciBvZiBmaWxsIGNoYXJhY3RlcnMgdG8gcGFkIHdpdGguCjwvcD4KCjxwPgpTbyB0aGUgcXVlc3Rpb24gaXM6IHdhcyB0aGUgb3JpZ2luYWwgdGV4dCBjb3JyZWN0PyBJZiB0aGUgaW50ZW50IHdhcyB0bwpmb2xsb3cgY2xhc3NpYyBpb3N0cmVhbXMgdGhlbiBpdCBtb3N0IGxpa2VseSB3YXNuJ3QsIHNpbmNlIHNldHRpbmcgd2lkdGgoKQp0byBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgdHJ1bmNhdGUgaXQgb24gb3V0cHV0LiBUaGlzCmlzIGFsc28gdGhlIGJlaGF2aW9yIG9mIG1vc3QgaW1wbGVtZW50YXRpb25zIChleGNlcHQgZm9yIFNHSSdzIHN0YW5kYXJkCmlvc3RyZWFtcyB3aGVyZSB0aGUgb3BlcmF0b3IgZG9lcyB0cnVuY2F0ZSkuCjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIHRleHQgaW4gMjEuMy43LjksIHA0IGZyb208L3A+CiAgICA8YmxvY2txdW90ZT48cD4KICAgIElmIGJvb2woaykgaXMgdHJ1ZSwgaW5zZXJ0cyBjaGFyYWN0ZXJzIGFzIGlmIGJ5IGNhbGxpbmcKICAgIG9zLnJkYnVmKCktJmd0O3NwdXRuKHN0ci5kYXRhKCksIG4pLCBwYWRkaW5nIGFzIGRlc2NyaWJlZCBpbiBzdGFnZSAzCiAgICBvZiBsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFscywgd2hlcmUgbiBpcyB0aGUgbGFyZ2VyIG9mIG9zLndpZHRoKCkKICAgIGFuZCBzdHIuc2l6ZSgpOyAKICAgIDwvcD48L2Jsb2NrcXVvdGU+CjxwPnRvPC9wPgogICAgPGJsb2NrcXVvdGU+PHA+CiAgICBJZiBib29sKGspIGlzIHRydWUsIGRldGVybWluZXMgcGFkZGluZyBhcyBkZXNjcmliZWQgaW4KICAgIGxpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzLCBhbmQgdGhlbiBpbnNlcnRzIHRoZSByZXN1bHRpbmcKICAgIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgPHR0PnNlcTwvdHQ+IGFzIGlmIGJ5IGNhbGxpbmcKICAgIDx0dD5vcy5yZGJ1ZigpLSZndDtzcHV0bihzZXEsIG4pPC90dD4sIHdoZXJlIDx0dD5uPC90dD4gaXMgdGhlIGxhcmdlciBvZgogICAgPHR0Pm9zLndpZHRoKCk8L3R0PiBhbmQgPHR0PnN0ci5zaXplKCk8L3R0PjsKICAgICA8L3A+PC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IGl0IGFwcGVhcnMgdGhhdCBuZWl0aGVyIHRoZSBvcmlnaW5hbCB3b3JkaW5nLCBEUjI1LCBub3IgdGhlCiAgcHJvcG9zZWQgcmVzb2x1dGlvbiwgaXMgcXVpdGUgd2hhdCB3ZSB3YW50LiAgV2Ugd2FudCB0byBzYXkgdGhhdAogIHRoZSBzdHJpbmcgd2lsbCBiZSBvdXRwdXQsIHBhZGRlZCB0byBvcy53aWR0aCgpIGlmIG5lY2Vzc2FyeS4gIFdlCiAgZG9uJ3Qgd2FudCB0byBkdXBsaWNhdGUgdGhlIHBhZGRpbmcgcnVsZXMgaW4gY2xhdXNlIDIyLCBiZWNhdXNlCiAgdGhleSdyZSBjb21wbGljYXRlZCwgYnV0IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBiZWNhdXNlIHRoZXkgd2VyZW4ndAogIHF1aXRlIHdyaXR0ZW4gd2l0aCBxdWl0ZSB0aGlzIGNhc2UgaW4gbWluZC4gIFdlIG5lZWQgdG8gc2F5IHdoYXQKICB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIGlzLCBhbmQgdGhlbiBkZWZlciB0byBjbGF1c2UgMjIuICBQb3N0LUtvbmE6CiAgQmVuamFtaW4gcHJvdmlkZWQgd29yZGluZy5dPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQzNiI+PC9hPjQzNi4gYXJlIGN2LXF1YWxpZmllZCBmYWNldCB0eXBlcyB2YWxpZCBmYWNldHM/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjEuMS4xLjIgW2xvY2FsZS5mYWNldF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDAzLTEwLTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJcyAiY29uc3Qgc3RkOjpjdHlwZSZsdDtjaGFyJmd0OyIgYSB2YWxpZCB0ZW1wbGF0ZSBhcmd1bWVudCB0byBoYXNfZmFjZXQsIHVzZV9mYWNldCwKYW5kIHRoZSBsb2NhbGUgdGVtcGxhdGUgY3Rvcj8gQW5kIGlmIHNvLCBkb2VzIGl0IGRlc2lnbmF0ZSB0aGUgc2FtZSBGYWNldCBhcwp0aGUgbm9uLWNvbnN0ICJzdGQ6OmN0eXBlJmx0O2NoYXImZ3Q7PyIgV2hhdCBhYm91dCAidm9sYXRpbGUgc3RkOjpjdHlwZSZsdDtjaGFyJmd0Oz8iCkRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgYmVoYXZlIGRpZmZlcmVudGx5OiBzb21lIGZhaWwgdG8gY29tcGlsZSwgb3RoZXJzCmFjY2VwdCBzdWNoIHR5cGVzIGJ1dCBiZWhhdmUgaW5jb25zaXN0ZW50bHkuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyMi4xLjEuMS4yLCBwMSB0byByZWFkOjwvcD4KCjxwPlRlbXBsYXRlIHBhcmFtZXRlcnMgaW4gdGhpcyBjbGF1c2Ugd2hpY2ggYXJlIHJlcXVpcmVkIHRvIGJlIGZhY2V0cwphcmUgdGhvc2UgbmFtZWQgRmFjZXQgaW4gZGVjbGFyYXRpb25zLiBBIHByb2dyYW0gdGhhdCBwYXNzZXMgYSB0eXBlCnRoYXQgaXMgbm90IGEgZmFjZXQsIG9yIGEgdHlwZSB0aGF0IHJlZmVycyB0byB2b2xhdGlsZS1xdWFsaWZpZWQKZmFjZXQsIGFzIGFuIChleHBsaWNpdCBvciBkZWR1Y2VkKSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdG8gYSBsb2NhbGUKZnVuY3Rpb24gZXhwZWN0aW5nIGEgZmFjZXQsIGlzIGlsbC1mb3JtZWQuICBBIGNvbnN0LXF1YWxpZmllZCBmYWNldCBpcwphIHZhbGlkIHRlbXBsYXRlIGFyZ3VtZW50IHRvIGFueSBsb2NhbGUgZnVuY3Rpb24gdGhhdCBleHBlY3RzIGEgRmFjZXQKdGVtcGxhdGUgcGFyYW1ldGVyLjwvcD4KCjxwPjxpPltLb25hOiBjaGFuZ2VkIHRoZSBsYXN0IHNlbnRlbmNlIGZyb20gYSBmb290bm90ZSB0byBub3JtYXRpdmUKdGV4dC5dPC9pPjwvcD4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDM4Ij48L2E+NDM4LiBBbWJpZ3VpdHkgaW4gdGhlICJkbyB0aGUgcmlnaHQgdGhpbmciIGNsYXVzZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4xLjMgW3NlcXVlbmNlLnJlcW10c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSG93YXJkIEhpbm5hbnQgPGI+RGF0ZTo8L2I+IDIwMDMtMTAtMjA8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3NlcXVlbmNlLnJlcW10cyI+aXNzdWVzPC9hPiBpbiBbc2VxdWVuY2UucmVxbXRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNEUiI+RFI8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KCjxwPlNlY3Rpb24gMjMuMS4zIFtzZXF1ZW5jZS5yZXFtdHNdLCBwYXJhZ3JhcGhzIDktMTEsIGZpeGVkIHVwIHRoZSBwcm9ibGVtCm5vdGljZWQgd2l0aCBzdGF0ZW1lbnRzIGxpa2U6PC9wPgo8cHJlPnZlY3RvciZsdDtpbnQmZ3Q7IHYoMTAsIDEpOwo8L3ByZT4KCjxwPlRoZSBpbnRlbnQgb2YgdGhlIGFib3ZlIHN0YXRlbWVudCB3YXMgdG8gY29uc3RydWN0IHdpdGg6PC9wPgo8cHJlPnZlY3RvcihzaXplX3R5cGUsIGNvbnN0IHZhbHVlX3R5cGUmYW1wOyk7CjwvcHJlPgoKPHA+YnV0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBmYWlsZWQgdG8gY29tcGlsZSBhcyB0aGV5IGJvdW5kIHRvOjwvcD4KPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgSW5wdXRJdGVyYXRvciZndDsKdmVjdG9yKElucHV0SXRlcmF0b3IgZiwgSW5wdXRJdGVyYXRvciBsKTsKPC9wcmU+CjxwPmluc3RlYWQuPC9wPgoKPHA+UGFyYWdyYXBocyA5LTExIHNheSB0aGF0IGlmIElucHV0SXRlcmF0b3IgaXMgYW4gaW50ZWdyYWwgdHlwZSwgdGhlbiB0aGUKbWVtYmVyIHRlbXBsYXRlIGNvbnN0cnVjdG9yIHdpbGwgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXM6PC9wPgo8cHJlPnZlY3RvciZsdDtzdGF0aWNfY2FzdCZsdDtzaXplX3R5cGUmZ3Q7KGYpLCBzdGF0aWNfY2FzdCZsdDt2YWx1ZV90eXBlJmd0OyhsKSk7CjwvcHJlPgo8cD4oYW5kIHNpbWlsYXJseSBmb3IgdGhlIG90aGVyIG1lbWJlciB0ZW1wbGF0ZSBmdW5jdGlvbnMgb2Ygc2VxdWVuY2VzKS48L3A+Cgo8cD5UaGVyZSBpcyBhbHNvIGEgbm90ZSB0aGF0IGRlc2NyaWJlcyBvbmUgaW1wbGVtZW50YXRpb24gdGVjaG5pcXVlOjwvcD4KPGJsb2NrcXVvdGU+PHA+CiAgIE9uZSB3YXkgdGhhdCBzZXF1ZW5jZSBpbXBsZW1lbnRvcnMgY2FuIHNhdGlzZnkgdGhpcyByZXF1aXJlbWVudCBpcyB0bwogICBzcGVjaWFsaXplIHRoZSBtZW1iZXIgdGVtcGxhdGUgZm9yIGV2ZXJ5IGludGVncmFsIHR5cGUuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD5UaGlzIG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2U6PC9wPgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKc3RydWN0IHZlY3Rvcgp7CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBzaXplX3R5cGU7CgogICAgIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUpIHt9CiAgICAgdmVjdG9yKHNpemVfdHlwZSwgY29uc3QgVCZhbXA7KSB7fQoKICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgSSZndDsKICAgICB2ZWN0b3IoSSwgSSk7CgogICAgIC8vIC4uLgp9OwoKdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CnRlbXBsYXRlICZsdDtjbGFzcyBJJmd0Owp2ZWN0b3ImbHQ7VCZndDs6OnZlY3RvcihJLCBJKSB7IC4uLiB9Cgp0ZW1wbGF0ZSAmbHQ7Jmd0Owp0ZW1wbGF0ZSAmbHQ7Jmd0Owp2ZWN0b3ImbHQ7aW50Jmd0Ozo6dmVjdG9yKGludCwgaW50KSB7IC4uLiB9Cgp0ZW1wbGF0ZSAmbHQ7Jmd0Owp0ZW1wbGF0ZSAmbHQ7Jmd0Owp2ZWN0b3ImbHQ7aW50Jmd0Ozo6dmVjdG9yKHVuc2lnbmVkLCB1bnNpZ25lZCkgeyAuLi4gfQoKLy8gIC4uLgo8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+TGFiZWwgdGhpcyBzb2x1dGlvbiAnQScuPC9wPgoKPHA+VGhlIHN0YW5kYXJkIGFsc28gc2F5czo8L3A+CjxibG9ja3F1b3RlPjxwPgogTGVzcyBjdW1iZXJzb21lIGltcGxlbWVudGF0aW9uIHRlY2huaXF1ZXMgYWxzbyBleGlzdC4KPC9wPjwvYmxvY2txdW90ZT4KPHA+CkEgcG9wdWxhciB0ZWNobmlxdWUgaXMgdG8gbm90IHNwZWNpYWxpemUgYXMgYWJvdmUsIGJ1dCBpbnN0ZWFkIGNhdGNoCmV2ZXJ5IGNhbGwgd2l0aCB0aGUgbWVtYmVyIHRlbXBsYXRlLCBkZXRlY3QgdGhlIHR5cGUgb2YgSW5wdXRJdGVyYXRvciwKYW5kIHRoZW4gcmVkaXJlY3QgdG8gdGhlIGNvcnJlY3QgbG9naWMuICBTb21ldGhpbmcgbGlrZToKPC9wPgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKdGVtcGxhdGUgJmx0O2NsYXNzIEkmZ3Q7CnZlY3RvciZsdDtUJmd0Ozo6dmVjdG9yKEkgZiwgSSBsKQp7CiAgICAgY2hvb3NlX2luaXQoZiwgbCwgaW50MnR5cGUmbHQ7aXNfaW50ZWdyYWwmbHQ7SSZndDs6OnZhbHVlJmd0OygpKTsKfQoKdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CnRlbXBsYXRlICZsdDtjbGFzcyBJJmd0Owp2ZWN0b3ImbHQ7VCZndDs6OmNob29zZV9pbml0KEkgZiwgSSBsLCBpbnQydHlwZSZsdDtmYWxzZSZndDspCnsKICAgIC8vIGNvbnN0cnVjdCB3aXRoIGl0ZXJhdG9ycwp9Cgp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKdGVtcGxhdGUgJmx0O2NsYXNzIEkmZ3Q7CnZlY3RvciZsdDtUJmd0Ozo6Y2hvb3NlX2luaXQoSSBmLCBJIGwsIGludDJ0eXBlJmx0O3RydWUmZ3Q7KQp7CiAgICBzaXplX3R5cGUgc3ogPSBzdGF0aWNfY2FzdCZsdDtzaXplX3R5cGUmZ3Q7KGYpOwogICAgdmFsdWVfdHlwZSB2ID0gc3RhdGljX2Nhc3QmbHQ7dmFsdWVfdHlwZSZndDsobCk7CiAgICAvLyBjb25zdHJ1Y3Qgd2l0aCBzeix2Cn0KPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPkxhYmVsIHRoaXMgc29sdXRpb24gJ0InLjwvcD4KCjxwPkJvdGggb2YgdGhlc2Ugc29sdXRpb25zIHNvbHZlIHRoZSBjYXNlIHRoZSBzdGFuZGFyZCBzcGVjaWZpY2FsbHkKbWVudGlvbnM6PC9wPgo8cHJlPnZlY3RvciZsdDtpbnQmZ3Q7IHYoMTAsIDEpOyAgLy8gb2ssIHZlY3RvciBzaXplIDEwLCBpbml0aWFsaXplZCB0byAxCjwvcHJlPgoKPHA+Ckhvd2V2ZXIsIChhbmQgaGVyZSBpcyB0aGUgcHJvYmxlbSksIHRoZSB0d28gc29sdXRpb25zIGhhdmUgZGlmZmVyZW50CmJlaGF2aW9yIGluIHNvbWUgY2FzZXMgd2hlcmUgdGhlIHZhbHVlX3R5cGUgb2YgdGhlIHNlcXVlbmNlIGlzIG5vdCBhbgppbnRlZ3JhbCB0eXBlLiAgRm9yIGV4YW1wbGUgY29uc2lkZXI6CjwvcD4KPGJsb2NrcXVvdGU+PHByZT4gICAgIHBhaXImbHQ7Y2hhciwgY2hhciZndDsgICAgICAgICAgICAgICAgICAgICBwKCdhJywgJ2InKTsKICAgICB2ZWN0b3ImbHQ7dmVjdG9yJmx0O3BhaXImbHQ7Y2hhciwgY2hhciZndDsgJmd0OyAmZ3Q7ICAgZCgnYScsICdiJyk7CjwvcHJlPjwvYmxvY2txdW90ZT4KPHA+ClRoZSBzZWNvbmQgbGluZSBvZiB0aGlzIHNuaXBwZXQgaXMgbGlrZWx5IGFuIGVycm9yLiAgU29sdXRpb24gQSBjYXRjaGVzCnRoZSBlcnJvciBhbmQgcmVmdXNlcyB0byBjb21waWxlLiAgVGhlIHJlYXNvbiBpcyB0aGF0IHRoZXJlIGlzIG5vCnNwZWNpYWxpemF0aW9uIG9mIHRoZSBtZW1iZXIgdGVtcGxhdGUgY29uc3RydWN0b3IgdGhhdCBsb29rcyBsaWtlOgo8L3A+CjxwcmU+dGVtcGxhdGUgJmx0OyZndDsKdGVtcGxhdGUgJmx0OyZndDsKdmVjdG9yJmx0O3ZlY3RvciZsdDtwYWlyJmx0O2NoYXIsIGNoYXImZ3Q7ICZndDsgJmd0Ozo6dmVjdG9yKGNoYXIsIGNoYXIpIHsgLi4uIH0KPC9wcmU+Cgo8cD4KU28gdGhlIGV4cHJlc3Npb24gYmluZHMgdG8gdGhlIHVuc3BlY2lhbGl6ZWQgbWVtYmVyIHRlbXBsYXRlCmNvbnN0cnVjdG9yLCBhbmQgdGhlbiBmYWlscyAoY29tcGlsZSB0aW1lKSBiZWNhdXNlIGNoYXIgaXMgbm90IGFuCklucHV0SXRlcmF0b3IuCjwvcD4KCjxwPgpTb2x1dGlvbiBCIGNvbXBpbGVzIHRoZSBhYm92ZSBleGFtcGxlIHRob3VnaC4gICdhJyBpcyBjYXN0ZWQgdG8gYW4KdW5zaWduZWQgaW50ZWdyYWwgdHlwZSBhbmQgdXNlZCB0byBzaXplIHRoZSBvdXRlciB2ZWN0b3IuICAnYicgaXMKc3RhdGljIGNhc3RlZCB0byB0aGUgaW5uZXIgdmVjdG9yIHVzaW5nIGl0J3MgZXhwbGljaXQgY29uc3RydWN0b3I6CjwvcD4KCjxwcmU+ZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBuKTsKPC9wcmU+Cgo8cD4KYW5kIHNvIHlvdSBlbmQgdXAgd2l0aCBhIHN0YXRpY19jYXN0Jmx0O3NpemVfdHlwZSZndDsoJ2EnKSBieQpzdGF0aWNfY2FzdCZsdDtzaXplX3R5cGUmZ3Q7KCdiJykgbWF0cml4Lgo8L3A+Cgo8cD4KSXQgaXMgY2VydGFpbmx5IHBvc3NpYmxlIHRoYXQgdGhpcyBpcyB3aGF0IHRoZSBjb2RlciBpbnRlbmRlZC4gIEJ1dCB0aGUKZXhwbGljaXQgcXVhbGlmaWVyIG9uIHRoZSBpbm5lciB2ZWN0b3IgaGFzIGJlZW4gdGh3YXJ0ZWQgYXQgYW55IHJhdGUuCjwvcD4KCjxwPgpUaGUgc3RhbmRhcmQgaXMgbm90IGNsZWFyIHdoZXRoZXIgdGhlIGV4cHJlc3Npb246CjwvcD4KCjxwcmU+ICAgICB2ZWN0b3ImbHQ7dmVjdG9yJmx0O3BhaXImbHQ7Y2hhciwgY2hhciZndDsgJmd0OyAmZ3Q7ICAgZCgnYScsICdiJyk7CjwvcHJlPgoKPHA+CihhbmQgc2ltaWxhciBleHByZXNzaW9ucykgYXJlOgo8L3A+Cgo8b2w+CjxsaT4gIHVuZGVmaW5lZCBiZWhhdmlvci48L2xpPgo8bGk+ICBpbGxlZ2FsIGFuZCBtdXN0IGJlIHJlamVjdGVkLjwvbGk+CjxsaT4gIGxlZ2FsIGFuZCBtdXN0IGJlIGFjY2VwdGVkLjwvbGk+Cjwvb2w+Cgo8cD5NeSBwcmVmZXJlbmNlIGlzIGxpc3RlZCBpbiB0aGUgb3JkZXIgcHJlc2VudGVkLjwvcD4KCjxwPlRoZXJlIGFyZSBzdGlsbCBvdGhlciB0ZWNobmlxdWVzIGZvciBpbXBsZW1lbnRpbmcgdGhlIHJlcXVpcmVtZW50cyBvZgpwYXJhZ3JhcGhzIDktMTEsIG5hbWVseSB0aGUgInJlc3RyaWN0ZWQgdGVtcGxhdGUgdGVjaG5pcXVlIiAoZS5nLgplbmFibGVfaWYpLiAgVGhpcyB0ZWNobmlxdWUgaXMgdGhlIG1vc3QgY29tcGFjdCBhbmQgZWFzeSB3YXkgb2YgY29kaW5nCnRoZSByZXF1aXJlbWVudHMsIGFuZCBoYXMgdGhlIGJlaGF2aW9yIG9mICMyIChyZWplY3RzIHRoZSBhYm92ZQpleHByZXNzaW9uKS4KPC9wPgoKPHA+CkNob29zaW5nIDEgd291bGQgYWxsb3cgYWxsIGltcGxlbWVudGF0aW9uIHRlY2huaXF1ZXMgSSdtIGF3YXJlIG9mLgpDaG9vc2luZyAyIHdvdWxkIGFsbG93IG9ubHkgc29sdXRpb24gJ0EnIGFuZCB0aGUgZW5hYmxlX2lmIHRlY2huaXF1ZS4KQ2hvb3NpbmcgMyB3b3VsZCBhbGxvdyBvbmx5IHNvbHV0aW9uICdCJy4KPC9wPgoKPHA+ClBvc3NpYmxlIHdvcmRpbmcgZm9yIGEgZnV0dXJlIHN0YW5kYXJkIGlmIHdlIHdhbnRlZCB0byBhY3RpdmVseSByZWplY3QKdGhlIGV4cHJlc3Npb24gYWJvdmUgd291bGQgYmUgdG8gY2hhbmdlICJzdGF0aWNfY2FzdCIgaW4gcGFyYWdyYXBocwo5LTExIHRvICJpbXBsaWNpdF9jYXN0IiB3aGVyZSB0aGF0IGlzIGRlZmluZWQgYnk6CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBVJmd0OwppbmxpbmUKVCBpbXBsaWNpdF9jYXN0KGNvbnN0IFUmYW1wOyB1KQp7CiAgICAgcmV0dXJuIHU7Cn0KPC9wcmU+CjwvYmxvY2txdW90ZT4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+UmVwbGFjZSAyMy4xLjMgW3NlcXVlbmNlLnJlcW10c10gcGFyYWdyYXBocyA5IC0gMTEgd2l0aDo8L3A+Cgo8cD5Gb3IgZXZlcnkgc2VxdWVuY2UgZGVmaW5lZCBpbiB0aGlzIGNsYXVzZSBhbmQgaW4gY2xhdXNlIGxpYi5zdHJpbmdzOjwvcD4KCjx1bD4KICA8bGk+CiAgICA8cD5JZiB0aGUgY29uc3RydWN0b3I8L3A+CiAgICAgICA8cHJlPiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgSW5wdXRJdGVyYXRvciZndDsKICAgICAgIFgoSW5wdXRJdGVyYXRvciBmLCBJbnB1dEl0ZXJhdG9yIGwsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJmFtcDsgYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgICA8L3ByZT4KICAgIDxwPmlzIGNhbGxlZCB3aXRoIGEgdHlwZSBJbnB1dEl0ZXJhdG9yIHRoYXQgZG9lcyBub3QgcXVhbGlmeSBhcwogICAgYW4gaW5wdXQgaXRlcmF0b3IsIHRoZW4gdGhlIGNvbnN0cnVjdG9yIHdpbGwgYmVoYXZlIGFzIGlmIHRoZQogICAgb3ZlcmxvYWRlZCBjb25zdHJ1Y3Rvcjo8L3A+CiAgICAgICA8cHJlPiAgICAgICBYKHNpemVfdHlwZSwgY29uc3QgdmFsdWVfdHlwZSZhbXA7ID0gdmFsdWVfdHlwZSgpLAogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSZhbXA7ID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgIDwvcHJlPgogICAgPHA+d2VyZSBjYWxsZWQgaW5zdGVhZCwgd2l0aCB0aGUgYXJndW1lbnRzIHN0YXRpY19jYXN0Jmx0O3NpemVfdHlwZSZndDsoZiksIGwgYW5kIGEsIHJlc3BlY3RpdmVseS48L3A+CiAgPC9saT4KCiAgPGxpPgogICAgPHA+SWYgdGhlIG1lbWJlciBmdW5jdGlvbnMgb2YgdGhlIGZvcm1zOjwvcD4KICAgICAgIDxwcmU+ICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OyAgICAgICAgICAvLyAgc3VjaCBhcyAgaW5zZXJ0KCkKICAgICAgIHJ0IGZ4MShpdGVyYXRvciBwLCBJbnB1dEl0ZXJhdG9yIGYsIElucHV0SXRlcmF0b3IgbCk7CgogICAgICAgdGVtcGxhdGUgJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7ICAgICAgICAgIC8vICBzdWNoIGFzICBhcHBlbmQoKSwgYXNzaWduKCkKICAgICAgIHJ0IGZ4MihJbnB1dEl0ZXJhdG9yIGYsIElucHV0SXRlcmF0b3IgbCk7CgogICAgICAgdGVtcGxhdGUgJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7ICAgICAgICAgIC8vICBzdWNoIGFzICByZXBsYWNlKCkKICAgICAgIHJ0IGZ4MyhpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIElucHV0SXRlcmF0b3IgZiwgSW5wdXRJdGVyYXRvciBsKTsKICAgICAgIDwvcHJlPgogICAgPHA+YXJlIGNhbGxlZCB3aXRoIGEgdHlwZSBJbnB1dEl0ZXJhdG9yIHRoYXQgZG9lcyBub3QgcXVhbGlmeSBhcwogICAgYW4gaW5wdXQgaXRlcmF0b3IsIHRoZW4gdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmVoYXZlIGFzIGlmIHRoZQogICAgb3ZlcmxvYWRlZCBtZW1iZXIgZnVuY3Rpb25zOjwvcD4KICAgICAgIDxwcmU+ICAgICAgIHJ0IGZ4MShpdGVyYXRvciwgc2l6ZV90eXBlLCBjb25zdCB2YWx1ZV90eXBlJmFtcDspOwoKICAgICAgIHJ0IGZ4MihzaXplX3R5cGUsIGNvbnN0IHZhbHVlX3R5cGUmYW1wOyk7CgogICAgICAgcnQgZngzKGl0ZXJhdG9yLCBpdGVyYXRvciwgc2l6ZV90eXBlLCBjb25zdCB2YWx1ZV90eXBlJmFtcDspOwogICAgICAgPC9wcmU+CiAgICA8cD53ZXJlIGNhbGxlZCBpbnN0ZWFkLCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cy48L3A+CiAgPC9saT4KPC91bD4KCjxwPkluIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGggdGhlIGFsdGVybmF0aXZlIGJpbmRpbmcgd2lsbCBmYWlsIGlmIGYgCmlzIG5vdCBpbXBsaWNpdGx5IGNvbnZlcnRpYmxlIHRvIFg6OnNpemVfdHlwZSBvciBpZiBsIGlzIG5vdCBpbXBsaWNpdGx5IApjb252ZXJ0aWJsZSB0byBYOjp2YWx1ZV90eXBlLjwvcD4KCjxwPgpUaGUgZXh0ZW50IHRvIHdoaWNoIGFuIGltcGxlbWVudGF0aW9uIGRldGVybWluZXMgdGhhdCBhIHR5cGUgY2Fubm90IGJlCmFuIGlucHV0IGl0ZXJhdG9yIGlzIHVuc3BlY2lmaWVkLCBleGNlcHQgdGhhdCBhcyBhIG1pbmltdW0gaW50ZWdyYWwKdHlwZXMgc2hhbGwgbm90IHF1YWxpZnkgYXMgaW5wdXQgaXRlcmF0b3JzLgo8L3A+CgoKCjxwPjxpPlsKS29uYTogYWdyZWVkIHRoYXQgdGhlIGN1cnJlbnQgc3RhbmRhcmQgcmVxdWlyZXMgPHR0PnYoJ2EnLCAnYicpPC90dD4KdG8gYmUgYWNjZXB0ZWQsIGFuZCBhbHNvIGFncmVlZCB0aGF0IHRoaXMgaXMgc3VycHJpc2luZyBiZWhhdmlvci4gIFRoZQpMV0cgY29uc2lkZXJlZCBzZXZlcmFsIG9wdGlvbnMsIGluY2x1ZGluZyBzb21ldGhpbmcgbGlrZQppbXBsaWNpdF9jYXN0LCB3aGljaCBkb2Vzbid0IGFwcGVhciB0byBiZSBxdWl0ZSB3aGF0IHdlIHdhbnQuICBXZQpjb25zaWRlcmVkIEhvd2FyZHMgdGhyZWUgb3B0aW9uczogYWxsb3cgYWNjZXB0YW5jZSBvciByZWplY3Rpb24sCnJlcXVpcmUgcmVqZWN0aW9uIGFzIGEgY29tcGlsZSB0aW1lIGVycm9yLCBhbmQgcmVxdWlyZSBhY2NlcHRhbmNlLiAgQnkKc3RyYXcgcG9sbCAoMS02LTEpLCB3ZSBjaG9zZSB0byByZXF1aXJlIGEgY29tcGlsZSB0aW1lIGVycm9yLgpQb3N0LUtvbmE6IEhvd2FyZCBwcm92aWRlZCB3b3JkaW5nLgpdPC9pPjwvcD4KCgo8cD48aT5bClN5ZG5leTogVGhlIExXRyBhZ3JlZWQgd2l0aCB0aGlzIGdlbmVyYWwgZGlyZWN0aW9uLCBidXQgdGhlcmUgd2FzIHNvbWUKZGlzY29tZm9ydCB3aXRoIHRoZSB3b3JkaW5nIGluIHRoZSBvcmlnaW5hbCBwcm9wb3NlZCByZXNvbHV0aW9uLgpIb3dhcmQgc3VibWl0dGVkIG5ldyB3b3JkaW5nLCBhbmQgd2Ugd2lsbCByZXZpZXcgdGhpcyBhZ2FpbiBpbgpSZWRtb25kLgpdPC9pPjwvcD4KCgo8cD48aT5bUmVkbW9uZDogb25lIHZlcnkgc21hbGwgY2hhbmdlIGluIHdvcmRpbmc6IHRoZSBmaXJzdCBhcmd1bWVudAogIGlzIGNhc3QgdG8gc2l6ZV90LiAgVGhpcyBmaXhlcyB0aGUgcHJvYmxlbSBvZiBzb21ldGhpbmcgbGlrZQogIDx0dD52ZWN0b3ImbHQ7dmVjdG9yJmx0O2ludCZndDsgJmd0Oyg1LCA1KTwvdHQ+LCB3aGVyZSBpbnQgaXMgbm90IAogIGltcGxpY2l0bHkgY29udmVydGlibGUgdG8gdGhlIHZhbHVlIHR5cGUuXTwvaT48L3A+CgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIHByb3Bvc2VkIHJlc29sdXRpb24gZml4ZXM6PC9wPgoKPHByZT4gIHZlY3RvciZsdDtpbnQmZ3Q7IHYoMTAsIDEpOwo8L3ByZT4KCjxwPgpzaW5jZSBhcyBpbnRlZ3JhbCB0eXBlcyAxMCBhbmQgMSBtdXN0IGJlIGRpc3F1YWxpZmllZCBhcyBpbnB1dAppdGVyYXRvcnMgYW5kIHRoZXJlZm9yZSB0aGUgKHNpemUsdmFsdWUpIGNvbnN0cnVjdG9yIGlzIGNhbGxlZCAoYXMKaWYpLjwvcD4KCjxwPlRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGJyZWFrczo8L3A+Cgo8cHJlPiAgdmVjdG9yJmx0O3ZlY3RvciZsdDtUJmd0OyAmZ3Q7IHYoMTAsIDEpOwo8L3ByZT4KCjxwPgpiZWNhdXNlIHRoZSBpbnRlZ3JhbCB0eXBlIDEgaXMgbm90ICppbXBsaWNpdGx5KiBjb252ZXJ0aWJsZSB0bwp2ZWN0b3ImbHQ7VCZndDsuICBUaGUgd29yZGluZyBhYm92ZSByZXF1aXJlcyBhIGRpYWdub3N0aWMuPC9wPgoKPHA+ClRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGxlYXZlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGZvbGxvd2luZyBjb2RlCnVuc3BlY2lmaWVkLgo8L3A+Cgo8cHJlPiAgc3RydWN0IEEKICB7CiAgICBvcGVyYXRvciBpbnQgKCkgY29uc3Qge3JldHVybiAxMDt9CiAgfTsKCiAgc3RydWN0IEIKICB7CiAgICBCKEEpIHt9CiAgfTsKCiAgdmVjdG9yJmx0O0ImZ3Q7IHYoQSgpLCBBKCkpOwo8L3ByZT4KCjxwPgpUaGUgaW1wbGVtZW50YXRpb24gbWF5IG9yIG1heSBub3QgZGV0ZWN0IHRoYXQgQSBpcyBub3QgYW4gaW5wdXQKaXRlcmF0b3IgYW5kIGVtcGxveWVlIHRoZSAoc2l6ZSx2YWx1ZSkgY29uc3RydWN0b3IuICBOb3RlIHRob3VnaCB0aGF0CmluIHRoZSBhYm92ZSBleGFtcGxlIGlmIHRoZSBCKEEpIGNvbnN0cnVjdG9yIGlzIHF1YWxpZmllZCBleHBsaWNpdCwKdGhlbiB0aGUgaW1wbGVtZW50YXRpb24gbXVzdCByZWplY3QgdGhlIGNvbnN0cnVjdG9yIGFzIEEgaXMgbm8gbG9uZ2VyCmltcGxpY2l0bHkgY29udmVydGlibGUgdG8gQi4KPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQ0MSI+PC9hPjQ0MS4gSXMgZnBvczo6c3RhdGUgY29uc3Q/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjQuMyBbZnBvc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gVmluY2VudCBMZWxvdXAgPGI+RGF0ZTo8L2I+IDIwMDMtMTEtMTc8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2Zwb3MiPmlzc3VlczwvYT4gaW4gW2Zwb3NdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSW4gc2VjdGlvbiAyNy40LjMuMSBbZnBvcy5tZW1iZXJzXSBmcG9zJmx0O3N0YXRlVCZndDs6OnN0YXRlKCkgaXMgZGVjbGFyZWQKbm9uIGNvbnN0LCBidXQgaW4gc2VjdGlvbiAyNy40LjMgW2Zwb3NdIGl0IGlzIGRlY2xhcmVkIGNvbnN0Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gc2VjdGlvbiAyNy40LjMuMSBbZnBvcy5tZW1iZXJzXSwgY2hhbmdlIHRoZSBkZWNsYXJhdGlvbiBvZiAKPHR0PmZwb3MmbHQ7c3RhdGVUJmd0Ozo6c3RhdGUoKTwvdHQ+IHRvIGNvbnN0Lgo8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDQyIj48L2E+NDQyLiBzZW50cnk6Om9wZXJhdG9yIGJvb2woKSBpbmNvbnNpc3RlbnQgc2lnbmF0dXJlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjYuMi40IFtvc3RyZWFtOjpzZW50cnldIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFZpbmNlbnQgTGVsb3VwIDxiPkRhdGU6PC9iPiAyMDAzLTExLTE4PC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjb3N0cmVhbTo6c2VudHJ5Ij5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbb3N0cmVhbTo6c2VudHJ5XS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI29zdHJlYW06OnNlbnRyeSI+aXNzdWVzPC9hPiBpbiBbb3N0cmVhbTo6c2VudHJ5XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkluIHNlY3Rpb24gMjcuNi4yLjQgW29zdHJlYW06OnNlbnRyeV0gcGFyYWdyYXBoIDQsIGluIGRlc2NyaXB0aW9uIHBhcnQKYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCwgdHJhaXRzJmd0Ozo6c2VudHJ5OjpvcGVyYXRvciBib29sKCkgaXMgZGVjbGFyZWQKYXMgbm9uIGNvbnN0LCBidXQgaW4gc2VjdGlvbiAyNy42LjIuMywgaW4gc3lub3BzaXMgaXQgaXMgZGVjbGFyZWQKY29uc3QuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiBzZWN0aW9uIDI3LjYuMi40IFtvc3RyZWFtOjpzZW50cnldIHBhcmFncmFwaCA0LCBjaGFuZ2UgdGhlIGRlY2xhcmF0aW9uCm9mIDx0dD5zZW50cnk6Om9wZXJhdG9yIGJvb2woKTwvdHQ+IHRvIGNvbnN0Lgo8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDQzIj48L2E+NDQzLiBmaWxlYnVmOjpjbG9zZSgpIGluY29uc2lzdGVudCB1c2Ugb2YgRU9GPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjguMS40IFtmaWxlYnVmLm1lbWJlcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFZpbmNlbnQgTGVsb3VwIDxiPkRhdGU6PC9iPiAyMDAzLTExLTIwPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmaWxlYnVmLm1lbWJlcnMiPmlzc3VlczwvYT4gaW4gW2ZpbGVidWYubWVtYmVyc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJbiBzZWN0aW9uIDI3LjguMS40IFtmaWxlYnVmLm1lbWJlcnNdIHBhcjYsIGluIGVmZmVjdHMgZGVzY3JpcHRpb24gb2YKYmFzaWNfZmlsZWJ1ZiZsdDtjaGFyVCwgdHJhaXRzJmd0Ozo6Y2xvc2UoKSwgb3ZlcmZsb3coRU9GKSBpcyB1c2VkIHR3aWNlOwpzaG91bGQgYmUgb3ZlcmZsb3codHJhaXRzOjplb2YoKSkuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2Ugb3ZlcmZsb3coRU9GKSB0byBvdmVyZmxvdyh0cmFpdHM6OmVvZigpKS4KPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQ0NCI+PC9hPjQ0NC4gQmFkIHVzZSBvZiBjYXN0cyBpbiBmc3RyZWFtPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjguMSBbZnN0cmVhbXNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFZpbmNlbnQgTGVsb3VwIDxiPkRhdGU6PC9iPiAyMDAzLTExLTIwPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmc3RyZWFtcyI+aXNzdWVzPC9hPiBpbiBbZnN0cmVhbXNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI0RSIj5EUjwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4yNy44LjEuOSBbaWZzdHJlYW0ubWVtYmVyc10gcDEsIDI3LjguMS4xMyBbb2ZzdHJlYW0ubWVtYmVyc10gcDEsCjI3LjguMS4xNyBbZnN0cmVhbS5tZW1iZXJzXSBwMSBzZWVtcyBoYXZlIHNhbWUgcHJvYmxlbSBhcyBleHBvc2VkIGluCkxXRyBpc3N1ZQo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUyIj4yNTI8L2E+Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+PGk+W1N5ZG5leTogR2VudWluZSBkZWZlY3QuIDI3LjguMS4xMyBuZWVkcyBhIGNhc3QgdG8gY2FzdCBhd2F5CiBjb25zdG5lc3MuIFRoZSBvdGhlciB0d28gcGxhY2VzIGFyZSBzdHlsaXN0aWM6IHdlIGNvdWxkIGNoYW5nZSB0aGUKIEMtc3R5bGUgY2FzdHMgdG8gY29uc3RfY2FzdC4gUG9zdC1TeWRuZXk6IEhvd2FyZCBwcm92aWRlZCB3b3JkaW5nLgpdPC9pPjwvcD4KCgo8cD5DaGFuZ2UgMjcuOC4xLjcvMSBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+PHA+CiAgUmV0dXJuczogKGJhc2ljX2ZpbGVidWYmbHQ7Y2hhclQsdHJhaXRzJmd0OyopJmFtcDtzYi4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+PHA+CiAgUmV0dXJuczogY29uc3RfY2FzdCZsdDtiYXNpY19maWxlYnVmJmx0O2NoYXJULHRyYWl0cyZndDsqJmd0OygmYW1wO3NiKS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNy44LjEuMTAvMSBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+PHA+CiAgUmV0dXJuczogKGJhc2ljX2ZpbGVidWYmbHQ7Y2hhclQsdHJhaXRzJmd0OyopJmFtcDtzYi4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+PHA+CiAgUmV0dXJuczogY29uc3RfY2FzdCZsdDtiYXNpY19maWxlYnVmJmx0O2NoYXJULHRyYWl0cyZndDsqJmd0OygmYW1wO3NiKS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNy44LjEuMTMvMSBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+PHA+CiAgUmV0dXJuczogJmFtcDtzYi4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+PHA+CiAgUmV0dXJuczogY29uc3RfY2FzdCZsdDtiYXNpY19maWxlYnVmJmx0O2NoYXJULHRyYWl0cyZndDsqJmd0OygmYW1wO3NiKS4KPC9wPjwvYmxvY2txdW90ZT4KCgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0NDUiPjwvYT40NDUuIGl0ZXJhdG9yX3RyYWl0czo6cmVmZXJlbmNlIHVuc3BlY2lmaWVkIGZvciBzb21lIGl0ZXJhdG9yIGNhdGVnb3JpZXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjQuMy4xIFtpdGVyYXRvci50cmFpdHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERhdmUgQWJyYWhhbXMgPGI+RGF0ZTo8L2I+IDIwMDMtMTItMDk8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNEUiI+RFI8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBzdGFuZGFyZCBwbGFjZXMgbm8gcmVzdHJpY3Rpb25zIGF0IGFsbCBvbiB0aGUgcmVmZXJlbmNlIHR5cGUKb2YgaW5wdXQsIG91dHB1dCwgb3IgZm9yd2FyZCBpdGVyYXRvcnMgKGZvciBmb3J3YXJkIGl0ZXJhdG9ycyBpdApvbmx5IHNwZWNpZmllcyB0aGF0ICp4IG11c3QgYmUgdmFsdWVfdHlwZSZhbXA7IGFuZCBkb2Vzbid0IG1lbnRpb24KdGhlIHJlZmVyZW5jZSB0eXBlKS4gIEJpZGlyZWN0aW9uYWwgaXRlcmF0b3JzJyByZWZlcmVuY2UgdHlwZSBpcwpyZXN0cmljdGVkIG9ubHkgYnkgaW1wbGljYXRpb24sIHNpbmNlIHRoZSBiYXNlIGl0ZXJhdG9yJ3MKcmVmZXJlbmNlIHR5cGUgaXMgdXNlZCBhcyB0aGUgcmV0dXJuIHR5cGUgb2YgcmV2ZXJzZV9pdGVyYXRvcidzCm9wZXJhdG9yKiwgd2hpY2ggbXVzdCBiZSBUJmFtcDsgaW4gb3JkZXIgdG8gYmUgYSBjb25mb3JtaW5nIGZvcndhcmQKaXRlcmF0b3IuCjwvcD4KCjxwPgpIZXJlJ3Mgd2hhdCBJIHRoaW5rIHdlIG91Z2h0IHRvIGJlIGFibGUgdG8gZXhwZWN0IGZyb20gYW4gaW5wdXQKb3IgZm9yd2FyZCBpdGVyYXRvcidzIHJlZmVyZW5jZSB0eXBlIFIsIHdoZXJlIGEgaXMgYW4gaXRlcmF0b3IKYW5kIFYgaXMgaXRzIHZhbHVlX3R5cGUKPC9wPgoKPHVsPgogIDxsaT4KICAgICAgKmEgaXMgY29udmVydGlibGUgdG8gUgogIDwvbGk+CgogIDxsaT4KICAgICAgUiBpcyBjb252ZXJ0aWJsZSB0byBWCiAgPC9saT4KCiAgPGxpPgogICAgICBzdGF0aWNfY2FzdCZsdDtWJmd0OyhzdGF0aWNfY2FzdCZsdDtSJmd0OygqYSkpIGlzIGVxdWl2YWxlbnQgdG8KICAgICAgc3RhdGljX2Nhc3QmbHQ7ViZndDsoKmEpIAogIDwvbGk+CjwvdWw+Cgo8cD5BIG11dGFibGUgZm9yd2FyZCBpdGVyYXRvciBvdWdodCB0byBzYXRpc2Z5LCBmb3IgeCBvZiB0eXBlIFY6PC9wPgogIDxwcmU+ICAgICAgeyBSIHIgPSAqYTsgciA9IHg7IH0gaXMgZXF1aXZhbGVudCB0byAqYSA9IHg7CiAgPC9wcmU+Cgo8cD4KSSB0aGluayB0aGVzZSByZXF1aXJlbWVudHMgY2FwdHVyZSBleGlzdGluZyBjb250YWluZXIgaXRlcmF0b3JzCihpbmNsdWRpbmcgdmVjdG9yJmx0O2Jvb2wmZ3Q7J3MpLCBidXQgcmVuZGVyIGlzdHJlYW1faXRlcmF0b3IgaW52YWxpZDsKaXRzIHJlZmVyZW5jZSB0eXBlIHdvdWxkIGhhdmUgdG8gYmUgY2hhbmdlZCB0byBhIGNvbnN0YW50CnJlZmVyZW5jZS4KPC9wPgoKCjxwPgooSmVyZW15IFNpZWspIER1cmluZyB0aGUgZGlzY3Vzc2lvbiBpbiBTeWRuZXksIGl0IHdhcyBmZWx0IHRoYXQgYQpzaW1wbGVyIGxvbmcgdGVybSBzb2x1dGlvbiBmb3IgdGhpcyB3YXMgbmVlZGVkLiBUaGUgc29sdXRpb24gcHJvcG9zZWQKd2FzIHRvIHJlcXVpcmUgPHR0PnJlZmVyZW5jZTwvdHQ+IHRvIGJlIHRoZSBzYW1lIHR5cGUgYXMgPHR0PiphPC90dD4KYW5kIDx0dD5wb2ludGVyPC90dD4gdG8gYmUgdGhlIHNhbWUgdHlwZSBhcyA8dHQ+YS0mZ3Q7PC90dD4uICBNb3N0Cml0ZXJhdG9ycyBpbiB0aGUgU3RhbmRhcmQgTGlicmFyeSBhbHJlYWR5IG1lZXQgdGhpcyByZXF1aXJlbWVudC4gU29tZQppdGVyYXRvcnMgYXJlIG91dHB1dCBpdGVyYXRvcnMsIGFuZCBkbyBub3QgbmVlZCB0byBtZWV0IHRoZQpyZXF1aXJlbWVudCwgYW5kIG90aGVycyBhcmUgb25seSBzcGVjaWZpZWQgdGhyb3VnaCB0aGUgZ2VuZXJhbAppdGVyYXRvciByZXF1aXJlbWVudHMgKHdoaWNoIHdpbGwgY2hhbmdlIHdpdGggdGhpcyByZXNvbHV0aW9uKS4gVGhlCnNvbGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhbiBleHBsaWNpdCBkZWZpbml0aW9uIG9mIHRoZSByZWZlcmVuY2UgdHlwZQp0aGF0IHdpbGwgbmVlZCB0byBjaGFuZ2UgaXMgPHR0PmlzdHJlYW1idWZfaXRlcmF0b3I8L3R0PiB3aGljaCByZXR1cm5zCjx0dD5jaGFyVDwvdHQ+IGZyb20gPHR0Pm9wZXJhdG9yKjwvdHQ+IGJ1dCBoYXMgYSByZWZlcmVuY2UgdHlwZSBvZgo8dHQ+Y2hhclQmYW1wOzwvdHQ+LiBXZSBwcm9wb3NlIGNoYW5naW5nIHRoZSByZWZlcmVuY2UgdHlwZSBvZgo8dHQ+aXN0cmVhbWJ1Zl9pdGVyYXRvcjwvdHQ+IHRvIDx0dD5jaGFyVDwvdHQ+Lgo8L3A+Cgo8cD5UaGUgb3RoZXIgb3B0aW9uIGZvciByZXNvbHZpbmcgdGhlIGlzc3VlIHdpdGggPHR0PnBvaW50ZXI8L3R0PiwKICBtZW50aW9uZWQgaW4gdGhlIG5vdGUgYmVsb3csIGlzIHRvIHJlbW92ZSA8dHQ+cG9pbnRlcjwvdHQ+CiAgYWx0b2dldGhlci4gSSBwcmVmZXIgcGxhY2luZyByZXF1aXJlbWVudHMgb24gPHR0PnBvaW50ZXI8L3R0PiB0bwogIHJlbW92aW5nIGl0IGZvciB0d28gcmVhc29ucy4gRmlyc3QsIDx0dD5wb2ludGVyPC90dD4gd2lsbCBiZWNvbWUKICB1c2VmdWwgZm9yIGltcGxlbWVudGluZyBpdGVyYXRvciBhZGFwdG9ycyBhbmQgaW4gcGFydGljdWxhciwKICA8dHQ+cmV2ZXJzZV9pdGVyYXRvcjwvdHQ+IHdpbGwgYmVjb21lIG1vcmUgd2VsbCBkZWZpbmVkLiBTZWNvbmQsCiAgcmVtb3ZpbmcgPHR0PnBvaW50ZXI8L3R0PiBpcyBhIHJhdGhlciBkcmFzdGljIGFuZCBwdWJsaWNseS12aXNpYmxlCiAgYWN0aW9uIHRvIHRha2UuPC9wPgoKPHA+VGhlIHByb3Bvc2VkIHJlc29sdXRpb24gdGVjaG5pY2FsbHkgZW5sYXJnZXMgdGhlIHJlcXVpcmVtZW50cyBmb3IKaXRlcmF0b3JzLCB3aGljaCBtZWFucyB0aGVyZSBhcmUgZXhpc3RpbmcgaXRlcmF0b3JzIChzdWNoIGFzCjx0dD5pc3RyZWFtYnVmX2l0ZXJhdG9yPC90dD4sIGFuZCBwb3RlbnRpYWxseSBzb21lIHByb2dyYW1tZXItZGVmaW5lZAppdGVyYXRvcnMpIHRoYXQgd2lsbCBubyBsb25nZXIgbWVldCB0aGUgcmVxdWlyZW1lbnRzLiBXaWxsIHRoaXMgYnJlYWsKZXhpc3RpbmcgY29kZT8gVGhlIHNjZW5hcmlvIGluIHdoaWNoIGl0IHdvdWxkIGlzIGlmIGFuIGFsZ29yaXRobQppbXBsZW1lbnRhdGlvbiAoc2F5IGluIHRoZSBTdGFuZGFyZCBMaWJyYXJ5KSBpcyBjaGFuZ2VkIHRvIHJlbHkgb24KPHR0Pml0ZXJhdG9yX3RyYWl0czo6cmVmZXJlbmNlPC90dD4sIGFuZCB0aGVuIGlzIHVzZWQgd2l0aCBvbmUgb2YgdGhlCml0ZXJhdG9ycyB0aGF0IGRvIG5vdCBoYXZlIGFuIGFwcHJvcHJpYXRlbHkgZGVmaW5lZAo8dHQ+aXRlcmF0b3JfdHJhaXRzOjpyZWZlcmVuY2U8L3R0Pi4KPC9wPgoKCjxwPlRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG1ha2VzIG9uZSBvdGhlciBzdWJ0bGUgY2hhbmdlLiBQcmV2aW91c2x5LAppdCB3YXMgcmVxdWlyZWQgdGhhdCBvdXRwdXQgaXRlcmF0b3JzIGhhdmUgYSA8dHQ+ZGlmZmVyZW5jZV90eXBlPC90dD4KYW5kIDx0dD52YWx1ZV90eXBlPC90dD4gb2YgPHR0PnZvaWQ8L3R0Piwgd2hpY2ggbWVhbnMgdGhhdCBhIGZvcndhcmQKaXRlcmF0b3IgY291bGQgbm90IGJlIGFuIG91dHB1dCBpdGVyYXRvci4gVGhpcyBpcyBjbGVhcmx5IGEgbWlzdGFrZSwKc28gSSd2ZSBjaGFuZ2VkIHRoZSB3b3JkaW5nIHRvIHNheSB0aGF0IHRob3NlIHR5cGVzIG1heSBiZQo8dHQ+dm9pZDwvdHQ+Lgo8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkluIDI0LjMuMSBbaXRlcmF0b3IudHJhaXRzXSwgYWZ0ZXI6PC9wPgoKPGJsb2NrcXVvdGU+PHA+CmJlIGRlZmluZWQgYXMgdGhlIGl0ZXJhdG9yJ3MgZGlmZmVyZW5jZSB0eXBlLCB2YWx1ZSB0eXBlIGFuZCBpdGVyYXRvcgpjYXRlZ29yeSwgcmVzcGVjdGl2ZWx5Lgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+YWRkPC9wPgoKPGJsb2NrcXVvdGU+PHA+CkluIGFkZGl0aW9uLCB0aGUgdHlwZXM8L3A+CjxwcmU+aXRlcmF0b3JfdHJhaXRzJmx0O0l0ZXJhdG9yJmd0Ozo6cmVmZXJlbmNlCml0ZXJhdG9yX3RyYWl0cyZsdDtJdGVyYXRvciZndDs6OnBvaW50ZXIKPC9wcmU+CjxwPm11c3QgYmUgZGVmaW5lZCBhcyB0aGUgaXRlcmF0b3IncyByZWZlcmVuY2UgYW5kIHBvaW50ZXIgdHlwZXMsIHRoYXQKaXMsIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHR5cGUgb2YgPHR0PiphPC90dD4gYW5kIDx0dD5hLSZndDs8L3R0PiwKcmVzcGVjdGl2ZWx5LjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+SW4gMjQuMy4xIFtpdGVyYXRvci50cmFpdHNdLCBjaGFuZ2U6PC9wPgoKPGJsb2NrcXVvdGU+PHA+CkluIHRoZSBjYXNlIG9mIGFuIG91dHB1dCBpdGVyYXRvciwgdGhlIHR5cGVzPC9wPgo8cHJlPml0ZXJhdG9yX3RyYWl0cyZsdDtJdGVyYXRvciZndDs6OmRpZmZlcmVuY2VfdHlwZQppdGVyYXRvcl90cmFpdHMmbHQ7SXRlcmF0b3ImZ3Q7Ojp2YWx1ZV90eXBlCjwvcHJlPgo8cD5hcmUgYm90aCBkZWZpbmVkIGFzIDx0dD52b2lkPC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPjxwPgpJbiB0aGUgY2FzZSBvZiBhbiBvdXRwdXQgaXRlcmF0b3IsIHRoZSB0eXBlczwvcD4KPHByZT5pdGVyYXRvcl90cmFpdHMmbHQ7SXRlcmF0b3ImZ3Q7OjpkaWZmZXJlbmNlX3R5cGUKaXRlcmF0b3JfdHJhaXRzJmx0O0l0ZXJhdG9yJmd0Ozo6dmFsdWVfdHlwZQppdGVyYXRvcl90cmFpdHMmbHQ7SXRlcmF0b3ImZ3Q7OjpyZWZlcmVuY2UKaXRlcmF0b3JfdHJhaXRzJmx0O0l0ZXJhdG9yJmd0Ozo6cG9pbnRlcgo8L3ByZT4KPHA+bWF5IGJlIGRlZmluZWQgYXMgPHR0PnZvaWQ8L3R0Pi48L3A+CjwvYmxvY2txdW90ZT4KCjxwPkluIDI0LjUuMyBbaXN0cmVhbWJ1Zi5pdGVyYXRvcl0sIGNoYW5nZTo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPnR5cGVuYW1lIHRyYWl0czo6b2ZmX3R5cGUsIGNoYXJUKiwgY2hhclQmYW1wOyZndDsKPC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KPHByZT50eXBlbmFtZSB0cmFpdHM6Om9mZl90eXBlLCBjaGFyVCosIGNoYXJUJmd0Owo8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+WwpSZWRtb25kOiB0aGVyZSB3YXMgY29uY2VybiBpbiBTeWRuZXkgdGhhdCB0aGlzIG1pZ2h0IG5vdCBiZSB0aGUgb25seSBwbGFjZQp3aGVyZSB0aGluZ3Mgd2VyZSB1bmRlcnNwZWNpZmllZCBhbmQgbmVlZGVkIHRvIGJlIGNoYW5nZWQuICBKZXJlbXkKcmV2aWV3ZWQgaXRlcmF0b3JzIGluIHRoZSBzdGFuZGFyZCBhbmQgY29uZmlybWVkIHRoYXQgbm90aGluZyBlbHNlCm5lZWRlZCB0byBiZSBjaGFuZ2VkLgpdPC9pPjwvcD4KCgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDQ4Ij48L2E+NDQ4LiBSYW5kb20gQWNjZXNzIEl0ZXJhdG9ycyBvdmVyIGFic3RyYWN0IGNsYXNzZXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjQuMS41IFtyYW5kb20uYWNjZXNzLml0ZXJhdG9yc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGF2ZSBBYnJhaGFtcyA8Yj5EYXRlOjwvYj4gMjAwNC0wMS0wNzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjcmFuZG9tLmFjY2Vzcy5pdGVyYXRvcnMiPmlzc3VlczwvYT4gaW4gW3JhbmRvbS5hY2Nlc3MuaXRlcmF0b3JzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRhYmxlIDc2LCB0aGUgcmFuZG9tIGFjY2VzcyBpdGVyYXRvciByZXF1aXJlbWVudCB0YWJsZSwgc2F5cyB0aGF0IHRoZQpyZXR1cm4gdHlwZSBvZiBhW25dIG11c3QgYmUgImNvbnZlcnRpYmxlIHRvIFQiLiAgV2hlbiBhbiBpdGVyYXRvcidzCnZhbHVlX3R5cGUgVCBpcyBhbiBhYnN0cmFjdCBjbGFzcywgbm90aGluZyBpcyBjb252ZXJ0aWJsZSB0byBULgpTdXJlbHkgdGhpcyBpc24ndCBhbiBpbnRlbmRlZCByZXN0cmljdGlvbj8KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgcmV0dXJuIHR5cGUgdG8gImNvbnZlcnRpYmxlIHRvIFQgY29uc3QmYW1wOyIuCjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0NDkiPjwvYT40NDkuIExpYnJhcnkgSXNzdWUgMzA2IEdvZXMgVG9vIEZhcjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAxOC4xIFtzdXBwb3J0LnR5cGVzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBQZXRlIEJlY2tlciA8Yj5EYXRlOjwvYj4gMjAwNC0wMS0xNTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjc3VwcG9ydC50eXBlcyI+aXNzdWVzPC9hPiBpbiBbc3VwcG9ydC50eXBlc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPk9yaWdpbmFsIHRleHQ6PC9wPgo8YmxvY2txdW90ZT48cD4KVGhlIG1hY3JvIG9mZnNldG9mIGFjY2VwdHMgYSByZXN0cmljdGVkIHNldCBvZiB0eXBlIGFyZ3VtZW50cyBpbiB0aGlzCkludGVybmF0aW9uYWwgU3RhbmRhcmQuIHR5cGUgc2hhbGwgYmUgYSBQT0Qgc3RydWN0dXJlIG9yIGEgUE9EIHVuaW9uCihjbGF1c2UgOSkuIFRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIG9mZnNldG9mIG1hY3JvIHRvIGEgZmllbGQgdGhhdAppcyBhIHN0YXRpYyBkYXRhIG1lbWJlciBvciBhIGZ1bmN0aW9uIG1lbWJlciBpcyB1bmRlZmluZWQuIgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+UmV2aXNlZCB0ZXh0OjwvcD4KPGJsb2NrcXVvdGU+PHA+CiJJZiB0eXBlIGlzIG5vdCBhIFBPRCBzdHJ1Y3R1cmUgb3IgYSBQT0QgdW5pb24gdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4iCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4KTG9va3MgdG8gbWUgbGlrZSB0aGUgcmV2aXNlZCB0ZXh0IHNob3VsZCBoYXZlIHJlcGxhY2VkIG9ubHkgdGhlIHNlY29uZApzZW50ZW5jZS4gSXQgZG9lc24ndCBtYWtlIHNlbnNlIHN0YW5kaW5nIGFsb25lLgo8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDE4LjEsIHBhcmFncmFwaCA1LCB0bzo8L3A+Cgo8YmxvY2txdW90ZT48cD4KVGhlIG1hY3JvIG9mZnNldG9mIGFjY2VwdHMgYSByZXN0cmljdGVkIHNldCBvZiB0eXBlIGFyZ3VtZW50cyBpbiB0aGlzCkludGVybmF0aW9uYWwgU3RhbmRhcmQuICBJZiB0eXBlIGlzIG5vdCBhIFBPRCBzdHJ1Y3R1cmUgb3IgYSBQT0QgdW5pb24KdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4gIFRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIG9mZnNldG9mIG1hY3JvCnRvIGEgZmllbGQgdGhhdCBpcyBhIHN0YXRpYyBkYXRhIG1lbWJlciBvciBhIGZ1bmN0aW9uIG1lbWJlciBpcwp1bmRlZmluZWQuIgo8L3A+PC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQ1MyI+PC9hPjQ1My4gYmFzaWNfc3RyaW5nYnVmOjpzZWVrb2ZmIG5lZWQgbm90IGFsd2F5cyBmYWlsIGZvciBhbiBlbXB0eSBzdHJlYW08L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNy4xLjQgW3N0cmluZ2J1Zi52aXJ0dWFsc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQmlsbCBQbGF1Z2VyIDxiPkRhdGU6PC9iPiAyMDA0LTAxLTMwPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmdidWYudmlydHVhbHMiPmlzc3VlczwvYT4gaW4gW3N0cmluZ2J1Zi52aXJ0dWFsc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwcmU+ICBwb3NfdHlwZSBiYXNpY19zdHJpbmdidWY6OnNlZWtvZmYob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUpOwo8L3ByZT4KPHA+CmlzIG9ibGlnZWQgdG8gZmFpbCBpZiBub3RoaW5nIGhhcyBiZWVuIGluc2VydGVkIGludG8gdGhlIHN0cmVhbS4gVGhpcwppcyB1bm5lY2Vzc2FyeSBhbmQgdW5kZXNpcmFibGUuIEl0IHNob3VsZCBiZSBwZXJtaXNzaWJsZSB0byBzZWVrIHRvCmFuIGVmZmVjdGl2ZSBvZmZzZXQgb2YgemVyby48L3A+Cgo8cD48aT5bCiBTeWRuZXk6IEFncmVlZCB0aGF0IHRoaXMgaXMgYW4gYW5ub3lpbmcgcHJvYmxlbTogc2Vla2luZyB0byB6ZXJvIHNob3VsZCBiZQogbGVnYWwuIEJpbGwgd2lsbCBwcm92aWRlIHdvcmRpbmcuCl08L2k+PC9wPgoKCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIHNlbnRlbmNlIGZyb206PC9wPgo8YmxvY2txdW90ZT48cD4KRm9yIGEgc2VxdWVuY2UgdG8gYmUgcG9zaXRpb25lZCwgaWYgaXRzIG5leHQgcG9pbnRlciAoZWl0aGVyCmdwdHIoKSBvciBwcHRyKCkpIGlzIGEgbnVsbCBwb2ludGVyLCB0aGUgcG9zaXRpb25pbmcgb3BlcmF0aW9uCmZhaWxzLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+PHA+CkZvciBhIHNlcXVlbmNlIHRvIGJlIHBvc2l0aW9uZWQsIGlmIGl0cyBuZXh0IHBvaW50ZXIgKGVpdGhlcgpncHRyKCkgb3IgcHB0cigpKSBpcyBhIG51bGwgcG9pbnRlciBhbmQgdGhlIG5ldyBvZmZzZXQgbmV3b2ZmCmlzIG5vbnplcm8sIHRoZSBwb3NpdGlvbmluZyBvcGVyYXRpb24gZmFpbHMuCjwvcD48L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDU1Ij48L2E+NDU1LiBjZXJyOjp0aWUoKSBhbmQgd2NlcnI6OnRpZSgpIGFyZSBvdmVyc3BlY2lmaWVkPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjMgW2lvc3RyZWFtLm9iamVjdHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEJpbGwgUGxhdWdlciA8Yj5EYXRlOjwvYj4gMjAwNC0wMS0zMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaW9zdHJlYW0ub2JqZWN0cyI+aXNzdWVzPC9hPiBpbiBbaW9zdHJlYW0ub2JqZWN0c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjRFIiPkRSPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpCb3RoIGNlcnI6OnRpZSgpIGFuZCB3Y2Vycjo6dGllKCkgYXJlIG9ibGlnZWQgdG8gYmUgbnVsbCBhdCBwcm9ncmFtCnN0YXJ0dXAuIFRoaXMgaXMgb3ZlcnNwZWNpZmljYXRpb24gYW5kIG92ZXJraWxsLiBJdCBpcyBib3RoIHRyYWRpdGlvbmFsCmFuZCB1c2VmdWwgdG8gdGllIGNlcnIgdG8gY291dCwgdG8gZW5zdXJlIHRoYXQgc3RhbmRhcmQgb3V0cHV0IGlzIGRyYWluZWQKd2hlbmV2ZXIgYW4gZXJyb3IgbWVzc2FnZSBpcyB3cml0dGVuLiBUaGlzIGJlaGF2aW9yIHNob3VsZCBhdCBsZWFzdCBiZQpwZXJtaXR0ZWQgaWYgbm90IHJlcXVpcmVkLiBTYW1lIGZvciB3Y2Vycjo6dGllKCkuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5BZGQgdG8gdGhlIGRlc2NyaXB0aW9uIG9mIGNlcnI6PC9wPgo8YmxvY2txdW90ZT48cD4KQWZ0ZXIgdGhlIG9iamVjdCBjZXJyIGlzIGluaXRpYWxpemVkLCBjZXJyLnRpZSgpIHJldHVybnMgJmFtcDtjb3V0LgpJdHMgc3RhdGUgaXMgb3RoZXJ3aXNlIHRoZSBzYW1lIGFzIHJlcXVpcmVkIGZvciBiYXNpY19pb3MmbHQ7Y2hhciZndDs6OmluaXQKKGxpYi5iYXNpYy5pb3MuY29ucykuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD5BZGQgdG8gdGhlIGRlc2NyaXB0aW9uIG9mIHdjZXJyOjwvcD4KCjxibG9ja3F1b3RlPjxwPgpBZnRlciB0aGUgb2JqZWN0IHdjZXJyIGlzIGluaXRpYWxpemVkLCB3Y2Vyci50aWUoKSByZXR1cm5zICZhbXA7d2NvdXQuCkl0cyBzdGF0ZSBpcyBvdGhlcndpc2UgdGhlIHNhbWUgYXMgcmVxdWlyZWQgZm9yIGJhc2ljX2lvcyZsdDt3Y2hhcl90Jmd0Ozo6aW5pdAoobGliLmJhc2ljLmlvcy5jb25zKS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPjxpPltTeWRuZXk6IHN0cmF3IHBvbGwgKDMtMSk6IHdlIHNob3VsZCA8aT5yZXF1aXJlPC9pPiwgbm90IGp1c3QKICBwZXJtaXQsIGNvdXQgYW5kIGNlcnIgdG8gYmUgdGllZCBvbiBzdGFydHVwLiAgUHJlLVJlZG1vbmQ6IEJpbGwgd2lsbAogIHByb3ZpZGUgd29yZGluZy5dPC9pPjwvcD4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDU2Ij48L2E+NDU2LiBUcmFkaXRpb25hbCBDIGhlYWRlciBmaWxlcyBhcmUgb3ZlcnNwZWNpZmllZDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAxNy40LjEuMiBbaGVhZGVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQmlsbCBQbGF1Z2VyIDxiPkRhdGU6PC9iPiAyMDA0LTAxLTMwPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNoZWFkZXJzIj5pc3N1ZXM8L2E+IGluIFtoZWFkZXJzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KCjxwPlRoZSBDKysgU3RhbmRhcmQgZWZmZWN0aXZlbHkgcmVxdWlyZXMgdGhhdCB0aGUgdHJhZGl0aW9uYWwgQyBoZWFkZXJzCihvZiB0aGUgZm9ybSAmbHQ7eHh4LmgmZ3Q7KSBiZSBkZWZpbmVkIGluIHRlcm1zIG9mIHRoZSBuZXdlciBDKysKaGVhZGVycyAob2YgdGhlIGZvcm0gJmx0O2N4eHgmZ3Q7KS4gQ2xhdXNlcyAxNy40LjEuMi80IGFuZCBELjUgY29tYmluZQp0byByZXF1aXJlIHRoYXQ6PC9wPgoKPHVsPgogPGxpPkluY2x1ZGluZyB0aGUgaGVhZGVyICZsdDtjeHh4Jmd0OyBkZWNsYXJlcyBhIEMgbmFtZSBpbiBuYW1lc3BhY2Ugc3RkLjwvbGk+CgogPGxpPiBJbmNsdWRpbmcgdGhlIGhlYWRlciAmbHQ7eHh4LmgmZ3Q7IGRlY2xhcmVzIGEgQyBuYW1lIGluIG5hbWVzcGFjZSBzdGQKICAgIChlZmZlY3RpdmVseSBieSBpbmNsdWRpbmcgJmx0O2N4eHgmZ3Q7KSwgdGhlbiBpbXBvcnRzIGl0IGludG8gdGhlIGdsb2JhbAogICAgbmFtZXNwYWNlIHdpdGggYW4gaW5kaXZpZHVhbCB1c2luZyBkZWNsYXJhdGlvbi48L2xpPgo8L3VsPgoKPHA+ClRoZSBydWxlcyB3ZXJlIGxlZnQgaW4gdGhpcyBmb3JtIGRlc3BpdGVkIHJlcGVhdGVkIGFuZCBoZWF0ZWQgb2JqZWN0aW9ucwpmcm9tIHNldmVyYWwgY29tcGlsZXIgdmVuZG9ycy4gVGhlIEMgaGVhZGVycyBhcmUgb2Z0ZW4gYmV5b25kIHRoZSBkaXJlY3QKY29udHJvbCBvZiBDKysgaW1wbGVtZW50b3JzLiBJbiBzb21lIG9yZ2FuaXphdGlvbnMsIGl0J3MgYWxsIHRoZXkgY2FuIGRvCnRvIGdldCBhIGZldyAjaWZkZWYgX19jcGx1c3BsdXMgdGVzdHMgYWRkZWQuIFRoaXJkLXBhcnR5IGxpYnJhcnkgdmVuZG9ycwpjYW4gcGVyaGFwcyB3cmFwIHRoZSBDIGhlYWRlcnMuIEJ1dCBuZWl0aGVyIG9mIHRoZXNlIGFwcHJvYWNoZXMgc3VwcG9ydHMKdGhlIGRyYXN0aWMgcmVzdHJ1Y3R1cmluZyByZXF1aXJlZCBieSB0aGUgQysrIFN0YW5kYXJkLiBBcyBhIHJlc3VsdCwgaXQgaXMKc3RpbGwgd2lkZXNwcmVhZCBwcmFjdGljZSB0byBpZ25vcmUgdGhpcyBjb25mb3JtYW5jZSByZXF1aXJlbWVudCwgbmVhcmx5CnNldmVuIHllYXJzIGFmdGVyIHRoZSBjb21taXR0ZWUgbGFzdCBkZWJhdGVkIHRoaXMgdG9waWMuIEluc3RlYWQsIHdoYXQgaXMKb2Z0ZW4gaW1wbGVtZW50ZWQgaXM6CjwvcD4KCjx1bD4KIDxsaT4gSW5jbHVkaW5nIHRoZSBoZWFkZXIgJmx0O3h4eC5oJmd0OyBkZWNsYXJlcyBhIEMgbmFtZSBpbiB0aGUKIGdsb2JhbCBuYW1lc3BhY2UuPC9saT4gCgogPGxpPiBJbmNsdWRpbmcgdGhlIGhlYWRlciAmbHQ7Y3h4eCZndDsgZGVjbGFyZXMgYSBDIG5hbWUgaW4gdGhlCiBnbG9iYWwgbmFtZXNwYWNlIChlZmZlY3RpdmVseSBieSBpbmNsdWRpbmcgJmx0O3h4eC5oJmd0OyksIHRoZW4KIGltcG9ydHMgaXQgaW50byBuYW1lc3BhY2Ugc3RkIHdpdGggYW4gaW5kaXZpZHVhbCB1c2luZyBkZWNsYXJhdGlvbi48L2xpPgo8L3VsPgoKPHA+ClRoZSBwcmFjdGljYWwgYmVuZWZpdCBmb3IgaW1wbGVtZW50b3JzIHdpdGggdGhlIHNlY29uZCBhcHByb2FjaCBpcyB0aGF0CnRoZXkgY2FuIHVzZSBleGlzdGluZyBDIGxpYnJhcnkgaGVhZGVycywgYXMgdGhleSBhcmUgcHJldHR5IG11Y2ggb2JsaWdlZAp0byBkby4gVGhlIHByYWN0aWNhbCBjb3N0IGZvciBwcm9ncmFtbWVycyBmYWNpbmcgYSBtaXggb2YgaW1wbGVtZW50YXRpb25zCmlzIHRoYXQgdGhleSBoYXZlIHRvIGFzc3VtZSB3ZWFrZXIgcnVsZXM6PC9wPgoKPHVsPgogIDxsaT4gSWYgeW91IHdhbnQgdG8gYXNzdXJlZGx5IGRlY2xhcmUgYSBDIG5hbWUgaW4gdGhlIGdsb2JhbAogIG5hbWVzcGFjZSwgaW5jbHVkZSAmbHQ7eHh4LmgmZ3Q7LiBZb3UgbWF5IG9yIG1heSBub3QgYWxzbyBnZXQgdGhlCiAgZGVjbGFyYXRpb24gaW4gbmFtZXNwYWNlIHN0ZC48L2xpPgoKICA8bGk+IElmIHlvdSB3YW50IHRvIGFzc3VyZWRseSBkZWNsYXJlIGEgQyBuYW1lIGluIG5hbWVzcGFjZSBzdGQsCiAgaW5jbHVkZSAmbHQ7Y3h4eCZndDsuIFlvdSBtYXkgb3IgbWF5IG5vdCBhbHNvIGdldCB0aGUgZGVjbGFyYXRpb24gaW4KICB0aGUgZ2xvYmFsIG5hbWVzcGFjZS48L2xpPgo8L3VsPgoKPHA+ClRoZXJlIGFsc28gZXhpc3RzIHRoZSA8aT5wb3NzaWJpbGl0eTwvaT4gb2Ygc3VidGxlIGRpZmZlcmVuY2VzIGR1ZSB0bwpLb2VuaWcgbG9va3VwLCBidXQgdGhlcmUgYXJlIHNvIGZldyBub24tYnVpbHRpbiB0eXBlcyBkZWZpbmVkIGluIHRoZSBDCmhlYWRlcnMgdGhhdCBJJ3ZlIHlldCB0byBzZWUgYW4gZXhhbXBsZSBvZiBhbnkgcmVhbCBwcm9ibGVtcyBpbiB0aGlzCmFyZWEuCjwvcD4KCjxwPgpJdCBpcyB3b3J0aCBvYnNlcnZpbmcgdGhhdCB0aGUgcmF0ZSBhdCB3aGljaCBwcm9ncmFtbWVycyBmYWxsIGFmb3VsIG9mCnRoZXNlIGRpZmZlcmVuY2VzIGhhcyByZW1haW5lZCBzbWFsbCwgYXQgbGVhc3QgYXMgbWVhc3VyZWQgYnkgbmV3c2dyb3VwCnBvc3RpbmdzIGFuZCBvdXIgb3duIGJ1ZyByZXBvcnRzLiAoQnkgYW4gb3ZlcndoZWxtaW5nIG1hcmdpbiwgdGhlCmNvbW1vbmVzdCBwcm9ibGVtIGlzIHN0aWxsIHRoYXQgcHJvZ3JhbW1lcnMgaW5jbHVkZSAmbHQ7c3RyaW5nJmd0OyBhbmQgY2FuJ3QKdW5kZXJzdGFuZCB3aHkgdGhlIHR5cGVuYW1lIHN0cmluZyBpc24ndCBkZWZpbmVkIC0tIHRoaXMgYSBkZWNhZGUgYWZ0ZXIKdGhlIGNvbW1pdHRlZSBpbnZlbnRlZCBuYW1lc3BhY2Ugc3RkLCBub21pbmFsbHkgZm9yIHRoZSBiZW5lZml0IG9mIGFsbApwcm9ncmFtbWVycy4pCjwvcD4KCjxwPgpXZSBzaG91bGQgYWNjZXB0IHRoZSBmYWN0IHRoYXQgd2UgbWFkZSBhIHNlcmlvdXMgbWlzdGFrZSBhbmQgcmVjdGlmeSBpdCwKaG93ZXZlciBiZWxhdGVkbHksIGJ5IGV4cGxpY2l0bHkgYWxsb3dpbmcgZWl0aGVyIG9mIHRoZSB0d28gc2NoZW1lcyBmb3IKZGVjbGFyaW5nIEMgbmFtZXMgaW4gaGVhZGVycy4KPC9wPgoKPHA+PGk+W1N5ZG5leTogVGhpcyBpc3N1ZSBoYXMgYmVlbiBkZWJhdGVkIG1hbnkgdGltZXMsIGFuZCB3aWxsCiAgY2VydGFpbmx5IGhhdmUgdG8gYmUgZGlzY3Vzc2VkIGluIGZ1bGwgY29tbWl0dGVlIGJlZm9yZSBhbnkgYWN0aW9uCiAgY2FuIGJlIHRha2VuLiAgSG93ZXZlciwgdGhlIHByZWxpbWluYXJ5IHNlbnRpbWVudCBvZiB0aGUgTFdHIHdhcyBpbgogIGZhdm9yIG9mIHRoZSBjaGFuZ2UuICAoNiB5ZXMsIDAgbm8sIDIgYWJzdGFpbikgUm9iZXJ0IEtsYXJlcgogIHN1Z2dlc3RzIHRoYXQgd2UgbWlnaHQgYWxzbyB3YW50IHRvIHVuZGVwcmVjYXRlIHRoZQogIEMtc3R5bGUgPHR0Pi5oPC90dD4gaGVhZGVycy5dPC9pPjwvcD4KCgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkZCB0byAxNy40LjEuMiBbaGVhZGVyc10sIHBhcmEuIDQ6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgpFeGNlcHQgYXMgbm90ZWQgaW4gY2xhdXNlcyAxOCB0aHJvdWdoIDI3IGFuZCBBbm5leCBELCB0aGUgY29udGVudHMgb2YgZWFjaApoZWFkZXIgPGk+Y25hbWU8L2k+IHNoYWxsIGJlIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyCjxpPm5hbWUuaDwvaT4sIGFzIHNwZWNpZmllZCBpbiBJU08vSUVDIDk4OTk6MTk5MCBQcm9ncmFtbWluZyBMYW5ndWFnZXMgQyAoQ2xhdXNlCjcpLCBvciBJU08vSUVDOjE5OTAgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2VzLUMgQU1FTkRNRU5UIDE6IEMgSW50ZWdyaXR5LCAoQ2xhdXNlCjcpLCBhcyBhcHByb3ByaWF0ZSwgYXMgaWYgYnkgaW5jbHVzaW9uLiBJbiB0aGUgQysrIFN0YW5kYXJkIExpYnJhcnksIGhvd2V2ZXIsCnRoZSBkZWNsYXJhdGlvbnMgPGRlbD5hbmQgZGVmaW5pdGlvbnM8L2RlbD4gKGV4Y2VwdCBmb3IgbmFtZXMgd2hpY2ggYXJlIGRlZmluZWQKYXMgbWFjcm9zIGluIEMpIGFyZSB3aXRoaW4gbmFtZXNwYWNlIHNjb3BlICgzLjMuNSkgb2YgdGhlIG5hbWVzcGFjZSBzdGQuIAo8aW5zPkl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgdGhlc2UgbmFtZXMgYXJlIGZpcnN0IGRlY2xhcmVkIHdpdGhpbiB0aGUgZ2xvYmFsCm5hbWVzcGFjZSBzY29wZSBhbmQgYXJlIHRoZW4gaW5qZWN0ZWQgaW50byBuYW1lc3BhY2Ugc3RkIGJ5IGV4cGxpY2l0CnVzaW5nLWRlY2xhcmF0aW9ucyAoNy4zLjMgW25hbWVzcGFjZS51ZGVjbF0pLjwvaW5zPgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSBELjUgW2RlcHIuYy5oZWFkZXJzXSwgcGFyYS4gMi0zOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+Ci0yLSBFdmVyeSBDIGhlYWRlciwgZWFjaCBvZiB3aGljaCBoYXMgYSBuYW1lIG9mIHRoZSBmb3JtIDxpPm5hbWUuaDwvaT4sIGJlaGF2ZXMKYXMgaWYgZWFjaCBuYW1lIHBsYWNlZCBpbiB0aGUgU3RhbmRhcmQgbGlicmFyeSBuYW1lc3BhY2UgYnkgdGhlIGNvcnJlc3BvbmRpbmcKPGk+Y25hbWU8L2k+IGhlYWRlciBpcyA8ZGVsPmFsc288L2RlbD4gcGxhY2VkIHdpdGhpbiB0aGUgPGlucz5nbG9iYWw8L2lucz4KbmFtZXNwYWNlIHNjb3BlPGlucz4uPC9pbnM+IDxkZWw+b2YgdGhlIG5hbWVzcGFjZSA8dHQ+c3RkPC90dD4gYW5kIGlzIGZvbGxvd2VkCmJ5IGFuIGV4cGxpY2l0IDxpPnVzaW5nLWRlY2xhcmF0aW9uPC9pPiAoNy4zLjMgW25hbWVzcGFjZS51ZGVjbF0pLjwvZGVsPgo8aW5zPkl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgdGhlc2UgbmFtZXMgYXJlIGZpcnN0IGRlY2xhcmVkIG9yIGRlZmluZWQgd2l0aGluCm5hbWVzcGFjZSBzY29wZSAoMy4zLjUgW2Jhc2ljLnNjb3BlLm5hbWVzcGFjZV0pIG9mIHRoZSBuYW1lc3BhY2UKPHR0PnN0ZDwvdHQ+IGFuZCBhcmUgdGhlbiBpbmplY3RlZCBpbnRvIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHNjb3BlIGJ5IGV4cGxpY2l0CnVzaW5nLWRlY2xhcmF0aW9ucyAoNy4zLjMgW25hbWVzcGFjZS51ZGVjbF0pLjwvaW5zPgo8L3A+CjxwPgotMy0gWzxpPkV4YW1wbGU6PC9pPiBUaGUgaGVhZGVyIDx0dD4mbHQ7Y3N0ZGxpYiZndDs8L3R0PiA8aW5zPmFzc3VyZWRseTwvaW5zPgpwcm92aWRlcyBpdHMgZGVjbGFyYXRpb25zIGFuZCBkZWZpbml0aW9ucyB3aXRoaW4gdGhlIG5hbWVzcGFjZSA8dHQ+c3RkPC90dD4uCjxpbnM+SXQgbWF5IGFsc28gcHJvdmlkZSB0aGVzZSBuYW1lcyB3aXRoaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuPC9pbnM+IFRoZQpoZWFkZXIgPHR0PiZsdDtzdGRsaWIuaCZndDs8L3R0PiA8ZGVsPm1ha2VzIHRoZXNlIGF2YWlsYWJsZSBhbHNvIGluPC9kZWw+CjxpbnM+YXNzdXJlZGx5IHByb3ZpZGVzIHRoZSBzYW1lIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMgd2l0aGluPC9pbnM+IHRoZQpnbG9iYWwgbmFtZXNwYWNlLCBtdWNoIGFzIGluIHRoZSBDIFN0YW5kYXJkLiA8aW5zPkl0IG1heSBhbHNvIHByb3ZpZGUgdGhlc2UKbmFtZXMgd2l0aGluIHRoZSBuYW1lc3BhY2UgPHR0PnN0ZDwvdHQ+LjwvaW5zPiA8aT4tLSBlbmQgZXhhbXBsZTwvaT5dCjwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQ1NyI+PC9hPjQ1Ny4gYml0c2V0IGNvbnN0cnVjdG9yOiBpbmNvcnJlY3QgbnVtYmVyIG9mIGluaXRpYWxpemVkIGJpdHM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMy41LjEgW2JpdHNldC5jb25zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEYWcgSGVucmlrc3NvbiA8Yj5EYXRlOjwvYj4gMjAwNC0wMS0zMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYml0c2V0LmNvbnMiPmlzc3VlczwvYT4gaW4gW2JpdHNldC5jb25zXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNEUiI+RFI8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBjb25zdHJ1Y3RvciBmcm9tIHVuc2lnbmVkIGxvbmcgc2F5cyBpdCBpbml0aWFsaXplcyAidGhlIGZpcnN0IE0KYml0IHBvc2l0aW9ucyB0byB0aGUgY29ycmVzcG9uZGluZyBiaXQgdmFsdWVzIGluIHZhbC4gTSBpcyB0aGUgc21hbGxlcgpvZiBOIGFuZCB0aGUgdmFsdWUgQ0hBUl9CSVQgKiBzaXplb2YodW5zaWduZWQgbG9uZykuIgo8L3A+Cgo8cD4KT2JqZWN0LXJlcHJlc2VudGF0aW9uIHZzLiB2YWx1ZS1yZXByZXNlbnRhdGlvbiBzdHJpa2VzIGFnYWluLiBDSEFSX0JJVCAqCnNpemVvZiAodW5zaWduZWQgbG9uZykgZG9lcyBub3QgZ2l2ZSB1cyB0aGUgbnVtYmVyIG9mIGJpdHMgYW4gdW5zaWduZWQgbG9uZwp1c2VzIHRvIGhvbGQgdGhlIHZhbHVlLiBUaHVzLCB0aGUgZmlyc3QgTSBiaXQgcG9zaXRpb24gYWJvdmUgaXMgbm90Cmd1YXJhbnRlZWQgdG8gaGF2ZSBhbnkgY29ycmVzcG9uZGluZyBiaXQgdmFsdWVzIGluIHZhbC4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjMuMy41LjEgW2JpdHNldC5jb25zXSBwYXJhZ3JhcGggMiwgY2hhbmdlICJNIGlzIHRoZSBzbWFsbGVyIG9mCiAgTiBhbmQgdGhlIHZhbHVlIENIQVJfQklUICogc2l6ZW9mICh1bnNpZ25lZCBsb25nKS4gKDI0OSkiIHRvCiAgIjx0dD5NPC90dD4gaXMgdGhlIHNtYWxsZXIgb2YgPHR0Pk48L3R0PiBhbmQgdGhlIG51bWJlciBvZiBiaXRzIGluCiAgdGhlIHZhbHVlIHJlcHJlc2VudGF0aW9uIChzZWN0aW9uIDMuOSBbYmFzaWMudHlwZXNdKSBvZiA8dHQ+dW5zaWduZWQKICBsb25nPC90dD4uIgo8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDYwIj48L2E+NDYwLiBEZWZhdWx0IG1vZGVzIG1pc3NpbmcgZnJvbSBiYXNpY19mc3RyZWFtIG1lbWJlciBzcGVjaWZpY2F0aW9uczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy44LjEgW2ZzdHJlYW1zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBCZW4gSHV0Y2hpbmdzIDxiPkRhdGU6PC9iPiAyMDA0LTA0LTAxPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmc3RyZWFtcyI+aXNzdWVzPC9hPiBpbiBbZnN0cmVhbXNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI0RSIj5EUjwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIHNlY29uZCBwYXJhbWV0ZXJzIG9mIHRoZSBub24tZGVmYXVsdCBjb25zdHJ1Y3RvciBhbmQgb2YgdGhlIG9wZW4KbWVtYmVyIGZ1bmN0aW9uIGZvciBiYXNpY19mc3RyZWFtLCBuYW1lZCAibW9kZSIsIGFyZSBvcHRpb25hbAphY2NvcmRpbmcgdG8gdGhlIGNsYXNzIGRlY2xhcmF0aW9uIGluIDI3LjguMS4xMSBbbGliLmZzdHJlYW1dLiAgVGhlCnNwZWNpZmljYXRpb25zIG9mIHRoZXNlIG1lbWJlcnMgaW4gMjcuOC4xLjEyIFtsaWIuZnN0cmVhbS5jb25zXSBhbmQKMjcuOC4xLjEzIGxpYi5mc3RyZWFtLm1lbWJlcnNdIGRpc2FncmVlIHdpdGggdGhpcywgdGhvdWdoIHRoZQpjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbiBoYXMgdGhlICJleHBsaWNpdCIgZnVuY3Rpb24tc3BlY2lmaWVyIGltcGx5aW5nCnRoYXQgaXQgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGFibGUgd2l0aCBvbmUgYXJndW1lbnQuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjguMS4xNSBbZnN0cmVhbS5jb25zXSwgY2hhbmdlPC9wPgo8cHJlPiAgZXhwbGljaXQgYmFzaWNfZnN0cmVhbShjb25zdCBjaGFyKiBzLCBpb3NfYmFzZTo6b3Blbm1vZGUgbW9kZSk7IAo8L3ByZT4KPHA+dG88L3A+CjxwcmU+ICBleHBsaWNpdCBiYXNpY19mc3RyZWFtKGNvbnN0IGNoYXIqIHMsCiAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgbW9kZSA9IGlvc19iYXNlOjppbnxpb3NfYmFzZTo6b3V0KTsKPC9wcmU+CjxwPkluIDI3LjguMS4xNyBbZnN0cmVhbS5tZW1iZXJzXSwgY2hhbmdlPC9wPgo8cHJlPiAgdm9pZCBvcGVuKGNvbnN0IGNoYXIqcywgaW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUpOyAKPC9wcmU+CjxwPnRvPC9wPgo8cHJlPiAgdm9pZCBvcGVuKGNvbnN0IGNoYXIqcywKICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIG1vZGUgPSBpb3NfYmFzZTo6aW58aW9zX2Jhc2U6Om91dCk7CjwvcHJlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQ2MSI+PC9hPjQ2MS4gdGltZV9nZXQgaGFyZCBvciBpbXBvc3NpYmxlIHRvIGltcGxlbWVudDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjUuMS4yIFtsb2NhbGUudGltZS5nZXQudmlydHVhbHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEJpbGwgUGxhdWdlciA8Yj5EYXRlOjwvYj4gMjAwNC0wMy0yMzwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGVtcGxhdGUgdGltZV9nZXQgY3VycmVudGx5IGNvbnRhaW5zIGRpZmZpY3VsdCwgaWYgbm90IGltcG9zc2libGUsCnJlcXVpcmVtZW50cyBmb3IgZG9fZGF0ZV9vcmRlciwgZG9fZ2V0X3RpbWUsIGFuZCBkb19nZXRfZGF0ZS4gQWxsIHJlcXVpcmUKdGhlIGltcGxlbWVudGF0aW9uIHRvIHNjYW4gYSBmaWVsZCBnZW5lcmF0ZWQgYnkgdGhlICV4IG9yICVYIGNvbnZlcnNpb24Kc3BlY2lmaWVyIGluIHN0cmZ0aW1lLiBZZXMsIGRvX2RhdGVfb3JkZXIgY2FuIGFsd2F5cyByZXR1cm4gbm9fb3JkZXIsIGJ1dAp0aGF0IGRvZXNuJ3QgaGVscCB0aGUgb3RoZXIgZnVuY3Rpb25zLiBUaGUgcHJvYmxlbSBpcyB0aGF0ICV4IGNhbiBiZQpuZWFybHkgYW55dGhpbmcsIGFuZCBpdCBjYW4gdmFyeSB3aWRlbHkgd2l0aCBsb2NhbGVzLiBJdCdzIGhvcnJpYmx5Cm9uZXJvdXMgdG8gaGF2ZSB0byBwYXJzZSAidGhpcmQgc3VuZGF5IGFmdGVyIE1pY2hhZWxtYXMgaW4gdGhlIHllYXIgb2YKb3VyIExvcmQgdHdvIHRob3VzYW5kIGFuZCB0aHJlZSwiIGJ1dCB0aGF0J3Mgd2hhdCB3ZSBjdXJyZW50bHkgYXNrIG9mCmRvX2dldF9kYXRlLiBNb3JlIHByYWN0aWNhbGx5LCBpdCBsZWFkcyBzb21lIHBlb3BsZSB0byB0aGluayB0aGF0IGlmCiV4IHByb2R1Y2VzIDEwLjIuMDQsIHdlIHNob3VsZCBrbm93IHRvIGxvb2sgZm9yIGRvdHMgYXMgc2VwYXJhdG9ycy4gU3RpbGwKbm90IGVhc3kuCjwvcD4KCjxwPgpOb3RlIHRoYXQgdGhpcyBpcyB0aGUgPGk+b3Bwb3NpdGU8L2k+IGVmZmVjdCBmcm9tIHRoZSBpbnRlbnQgc3RhdGVkIGluIHRoZQpmb290bm90ZSBlYXJsaWVyIGluIHRoaXMgc3ViY2xhdXNlOgo8L3A+Cgo8YmxvY2txdW90ZT48cD4KIkluIG90aGVyIHdvcmRzLCB1c2VyIGNvbmZpcm1hdGlvbiBpcyByZXF1aXJlZCBmb3IgcmVsaWFibGUgcGFyc2luZyBvZgp1c2VyLWVudGVyZWQgZGF0ZXMgYW5kIHRpbWVzLCBidXQgbWFjaGluZS1nZW5lcmF0ZWQgZm9ybWF0cyBjYW4gYmUKcGFyc2VkIHJlbGlhYmx5LiBUaGlzIGFsbG93cyBwYXJzZXJzIHRvIGJlIGFnZ3Jlc3NpdmUgYWJvdXQgaW50ZXJwcmV0aW5nCnVzZXIgdmFyaWF0aW9ucyBvbiBzdGFuZGFyZCBmb3JtYXRzLiIKPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpXZSBzaG91bGQgZ2l2ZSBib3RoIGltcGxlbWVudGVycyBhbmQgdXNlcnMgYW4gZWFzaWVyIGFuZCBtb3JlIHJlbGlhYmxlCmFsdGVybmF0aXZlOiBwcm92aWRlIGEgKHNob3J0KSBsaXN0IG9mIGFsdGVybmF0aXZlIGRlbGltaXRlcnMgYW5kIHNheQp3aGF0IHRoZSBkZWZhdWx0IGRhdGUgb3JkZXIgaXMgZm9yIG5vX29yZGVyLiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwKYW5kIG1heGltdW0gbGF0aXR1ZGUsIHdlIGNhbiBwZXJtaXQgYW4gaW1wbGVtZW50YXRpb24gdG8gcGFyc2Ugd2hhdGV2ZXIKJXggb3IgJVggZ2VuZXJhdGVzLCBidXQgd2Ugc2hvdWxkbid0IHJlcXVpcmUgaXQuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD48Yj5JbiB0aGUgZGVzY3JpcHRpb246PC9iPjwvcD4KPHByZT5pdGVyX3R5cGUgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIHMsIGl0ZXJfdHlwZSBlbmQsIGlvc19iYXNlJmFtcDsgc3RyLAogICAgICAgIGlvc19iYXNlOjppb3N0YXRlJmFtcDsgZXJyLCB0bSogdCkgY29uc3Q7CjwvcHJlPgoKPHA+CjIgRWZmZWN0czogUmVhZHMgY2hhcmFjdGVycyBzdGFydGluZyBhdCBzdW50aWwgaXQgaGFzIGV4dHJhY3RlZCB0aG9zZQpzdHJ1Y3QgdG0gbWVtYmVycywgYW5kIHJlbWFpbmluZyBmb3JtYXQgY2hhcmFjdGVycywgdXNlZCBieQp0aW1lX3B1dCZsdDsmZ3Q7OjpwdXQgdG8gcHJvZHVjZSB0aGUgZm9ybWF0IHNwZWNpZmllZCBieSAnWCcsIG9yIHVudGlsIGl0CmVuY291bnRlcnMgYW4gZXJyb3Igb3IgZW5kIG9mIHNlcXVlbmNlLgo8L3A+Cgo8cD48Yj5jaGFuZ2U6PC9iPiAnWCc8L3A+Cgo8cD48Yj50bzo8L2I+ICIlSDolTTolUyI8L3A+CgoKPHA+Q2hhbmdlPC9wPgo8cHJlPml0ZXJfdHlwZSBkb19nZXRfZGF0ZShpdGVyX3R5cGUgcywgaXRlcl90eXBlIGVuZCwgaW9zX2Jhc2UmYW1wOyBzdHIsCiAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmYW1wOyBlcnIsIHRtKiB0KSBjb25zdDsKCjQgRWZmZWN0czogUmVhZHMgY2hhcmFjdGVycyBzdGFydGluZyBhdCBzIHVudGlsIGl0IGhhcyBleHRyYWN0ZWQgdGhvc2UKc3RydWN0IHRtIG1lbWJlcnMsIGFuZCByZW1haW5pbmcgZm9ybWF0IGNoYXJhY3RlcnMsIHVzZWQgYnkKdGltZV9wdXQmbHQ7Jmd0Ozo6cHV0IHRvIHByb2R1Y2UgdGhlIGZvcm1hdCBzcGVjaWZpZWQgYnkgJ3gnLCBvciB1bnRpbCBpdAplbmNvdW50ZXJzIGFuIGVycm9yLgo8L3ByZT4KCjxwPnRvPC9wPgo8cHJlPml0ZXJfdHlwZSBkb19nZXRfZGF0ZShpdGVyX3R5cGUgcywgaXRlcl90eXBlIGVuZCwgaW9zX2Jhc2UmYW1wOyBzdHIsCiAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmYW1wOyBlcnIsIHRtKiB0KSBjb25zdDsKPC9wcmU+Cgo8cD4KNCBFZmZlY3RzOiBSZWFkcyBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0IHMgdW50aWwgaXQgaGFzIGV4dHJhY3RlZCB0aG9zZQpzdHJ1Y3QgdG0gbWVtYmVycywgYW5kIHJlbWFpbmluZyBmb3JtYXQgY2hhcmFjdGVycywgdXNlZCBieQp0aW1lX3B1dCZsdDsmZ3Q7OjpwdXQgdG8gcHJvZHVjZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtYXRzLCBvciB1bnRpbCBpdAplbmNvdW50ZXJzIGFuIGVycm9yLiBUaGUgZm9ybWF0IGRlcGVuZHMgb24gdGhlIHZhbHVlIHJldHVybmVkIGJ5CmRhdGVfb3JkZXIoKSBhcyBmb2xsb3dzOgo8L3A+Cgo8cHJlPiAgICAgICAgZGF0ZV9vcmRlcigpICBmb3JtYXQKCiAgICAgICAgbm9fb3JkZXIgICAgICAiJW0vJWQvJXkiCiAgICAgICAgZG15ICAgICAgICAgICAiJWQvJW0vJXkiCiAgICAgICAgbWR5ICAgICAgICAgICAiJW0vJWQvJXkiCiAgICAgICAgeW1kICAgICAgICAgICAiJXkvJW0vJWQiCiAgICAgICAgeWRtICAgICAgICAgICAiJXkvJWQvJW0iCjwvcHJlPgo8cD4KQW4gaW1wbGVtZW50YXRpb24gbWF5IGFsc28gYWNjZXB0IGFkZGl0aW9uYWwgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBmb3JtYXRzLgo8L3A+Cgo8cD48aT5bUmVkbW9uZDogYWdyZWVkIHRoYXQgdGhpcyBpcyBhIHJlYWwgcHJvYmxlbS4gIFRoZSBzb2x1dGlvbiBpcwogIHByb2JhYmx5IHRvIG1hdGNoIEM5OSdzIHBhcnNpbmcgcnVsZXMuICBCaWxsIHByb3ZpZGVkIHdvcmRpbmcuCl08L2k+PC9wPgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDY0Ij48L2E+NDY0LiBTdWdnZXN0aW9uIGZvciBuZXcgbWVtYmVyIGZ1bmN0aW9ucyBpbiBzdGFuZGFyZCBjb250YWluZXJzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjIuNiBbdmVjdG9yXSwgMjMuMy4xIFttYXBdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFRob3JzdGVuIE90dG9zZW4gPGI+RGF0ZTo8L2I+IDIwMDQtMDUtMTI8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3ZlY3RvciI+aXNzdWVzPC9hPiBpbiBbdmVjdG9yXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KCjxwPlRvIGFkZCBzbGlnaHRseSBtb3JlIGNvbnZlbmllbmNlIHRvIHZlY3RvciZsdDtUJmd0OyBhbmQgbWFwJmx0O0tleSxUJmd0OyB3ZSBzaG91bGQgY29uc2lkZXIgdG8gYWRkPC9wPgo8b2w+CjxsaT4gYWRkIHZlY3RvciZsdDtUJmd0Ozo6ZGF0YSgpIG1lbWJlciAoY29uc3QgYW5kIG5vbi1jb25zdCB2ZXJzaW9uKQpzZW1hbnRpY3M6IGlmKCBlbXB0eSgpICkgcmV0dXJuIDA7IGVsc2UgcmV0dXJuIGJ1ZmZlcl87PC9saT4KPGxpPiBhZGQgbWFwJmx0O0tleSxUJmd0Ozo6YXQoIGNvbnN0IEtleSZhbXA7IGsgKSBtZW1iZXIgKGNvbnN0IGFuZCBub24tY29uc3QgdmVyc2lvbikKPGk+c2VtYW50aWNzPC9pPjogaXRlcmF0b3IgaSA9IGZpbmQoIGsgKTsgaWYoIGkgIT0gZW5kKCkgKSByZXR1cm4gKmk7IGVsc2UgdGhyb3cgcmFuZ2VfZXJyb3IoKTs8L2xpPgo8L29sPgoKPHA+UmF0aW9uYWxlOjwvcD4KCjx1bD4KPGxpPlRvIG9idGFpbiBhIHBvaW50ZXIgdG8gdGhlIHZlY3RvcidzIGJ1ZmZlciwgb25lIG11c3QgdXNlIGVpdGhlcgpvcGVyYXRvcltdKCkgKHdoaWNoIGNhbiBnaXZlIHVuZGVmaW5lZCBiZWhhdmlvciBmb3IgZW1wdHkgdmVjdG9ycykgb3IKYXQoKSAod2hpY2ggd2lsbCB0aGVuIHRocm93IGlmIHRoZSB2ZWN0b3IgaXMgZW1wdHkpLiA8L2xpPgo8bGk+dHIxOjphcnJheSZsdDtULHN6Jmd0OyBhbHJlYWR5IGhhcyBhIGRhdGEoKSBtZW1iZXI8L2xpPgo8bGk+ZSBjYW5ub3QgdXNlIG9wZXJhdG9yW10oKSB3aGVuIFQgaXMgbm90IERlZmF1bHREb25zdHJ1Y3RpYmxlPC9saT4KPGxpPk5laXRoZXIgd2hlbiB0aGUgbWFwIGlzIGNvbnN0LjwvbGk+CjxsaT53aGVuIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGFkZCBhbiBlbGVtZW50IGFjY2lkZW50bHk8L2xpPgo8bGk+d2hlbiBpdCBzaG91bGQgYmUgY29uc2lkZXJlZCBhbiBlcnJvciBpZiBhIGtleSBpcyBub3QgaW4gdGhlIG1hcDwvbGk+CjwvdWw+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjMuMi42IFt2ZWN0b3JdLCBhZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgPHR0PnZlY3RvcjwvdHQ+CiAgc3lub3BzaXMgYWZ0ZXIgImVsZW1lbnQgYWNjZXNzIiBhbmQgYmVmb3JlICJtb2RpZmllcnMiOjwvcD4KPHByZT4gIC8vIDxpPltsaWIudmVjdG9yLmRhdGFdIGRhdGEgYWNjZXNzPC9pPgogIHBvaW50ZXIgICAgICAgZGF0YSgpOwogIGNvbnN0X3BvaW50ZXIgZGF0YSgpIGNvbnN0Owo8L3ByZT4KCjxwPkFkZCBhIG5ldyBzdWJzZWN0aW9uIG9mIDIzLjIuNiBbdmVjdG9yXTo8L3A+CjxibG9ja3F1b3RlPgo8cD4yMy4yLjQueCA8dHQ+dmVjdG9yPC90dD4gZGF0YSBhY2Nlc3M8L3A+CjxwcmU+ICAgcG9pbnRlciAgICAgICBkYXRhKCk7CiAgIGNvbnN0X3BvaW50ZXIgZGF0YSgpIGNvbnN0Owo8L3ByZT4KPHA+PGI+UmV0dXJuczo8L2I+IEEgcG9pbnRlciBzdWNoIHRoYXQgW2RhdGEoKSwgZGF0YSgpICsgc2l6ZSgpKSBpcyBhIHZhbGlkCiAgIHJhbmdlLiAgRm9yIGEgbm9uLWVtcHR5IHZlY3RvciwgZGF0YSgpID09ICZhbXA7ZnJvbnQoKS48L3A+CjxwPjxiPkNvbXBsZXhpdHk6PC9iPiBDb25zdGFudCB0aW1lLjwvcD4KPHA+PGI+VGhyb3dzOjwvYj4gTm90aGluZy48L3A+CjwvYmxvY2txdW90ZT4KCjxwPkluIDIzLjMuMSBbbWFwXSwgYWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIDx0dD5tYXA8L3R0PgpzeW5vcHNpcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGluZSBmb3Igb3BlcmF0b3JbXTo8L3A+CjxwcmU+ICBUJmFtcDsgICAgICAgYXQoY29uc3Qga2V5X3R5cGUmYW1wOyB4KTsKICBjb25zdCBUJmFtcDsgYXQoY29uc3Qga2V5X3R5cGUmYW1wOyB4KSBjb25zdDsKPC9wcmU+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyB0byAyMy4zLjEuMiBbbWFwLmFjY2Vzc106PC9wPgo8YmxvY2txdW90ZT4KPHByZT4gIFQmYW1wOyAgICAgICBhdChjb25zdCBrZXlfdHlwZSZhbXA7IHgpOwogIGNvbnN0IFQmYW1wOyBhdChjb25zdCBrZXlfdHlwZSZhbXA7IHgpIGNvbnN0Owo8L3ByZT4KCjxwPjxiPlJldHVybnM6PC9iPiBBIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCB3aG9zZSBrZXkgaXMgZXF1aXZhbGVudAogIHRvIHgsIGlmIHN1Y2ggYW4gZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBtYXAuPC9wPgo8cD48Yj5UaHJvd3M6PC9iPiA8dHQ+b3V0X29mX3JhbmdlPC90dD4gaWYgbm8gc3VjaCBlbGVtZW50IGlzIHByZXNlbnQuPC9wPgoKPC9ibG9ja3F1b3RlPgoKCgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+TmVpdGhlciBvZiB0aGVzZSBhZGRpdGlvbnMgcHJvdmlkZXMgYW55IG5ldyBmdW5jdGlvbmFsaXR5IGJ1dCB0aGUKICBMV0cgYWdyZWVkIHRoYXQgdGhleSBhcmUgY29udmVuaWVudCwgZXNwZWNpYWxseSBmb3Igbm92aWNlcy4gIFRoZQogIGV4Y2VwdGlvbiB0eXBlIGNob3NlbiBmb3IgPHR0PmF0PC90dD4sIDx0dD5zdGQ6Om91dF9vZl9yYW5nZTwvdHQ+LAogIHdhcyBjaG9zZW4gdG8gbWF0Y2ggPHR0PnZlY3Rvcjo6YXQ8L3R0Pi48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDY1Ij48L2E+NDY1LiBDb250ZW50cyBvZiAmbHQ7Y2lzbzY0NiZndDs8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTcuNC4xLjIgW2hlYWRlcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFN0ZXZlIENsYW1hZ2UgPGI+RGF0ZTo8L2I+IDIwMDQtMDYtMDM8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2hlYWRlcnMiPmlzc3VlczwvYT4gaW4gW2hlYWRlcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD5DIGhlYWRlciAmbHQ7aXNvNjQ2LmgmZ3Q7IGRlZmluZXMgbWFjcm9zIGZvciBzb21lIG9wZXJhdG9ycywgc3VjaCBhcwpub3RfZXEgZm9yICE9LjwvcD4KCjxwPlNlY3Rpb24gMTcuNC4xLjIgW2hlYWRlcnNdICJIZWFkZXJzIiBzYXlzIHRoYXQgZXhjZXB0IGFzIG5vdGVkIGluCmNsYXVzZXMgMTggdGhyb3VnaCAyNywgdGhlICZsdDtjbmFtZSZndDsgQysrIGhlYWRlciBjb250ZW50cyBhcmUgdGhlIHNhbWUKYXMgdGhlIEMgaGVhZGVyICZsdDtuYW1lLmgmZ3Q7LiBJbiBwYXJ0aWN1bGFyLCB0YWJsZSAxMiBsaXN0cwombHQ7Y2lzbzY0NiZndDsgYXMgYSBDKysgaGVhZGVyLjwvcD4KCjxwPkkgZG9uJ3QgZmluZCBhbnkgb3RoZXIgbWVudGlvbiBvZiAmbHQ7Y2lzbzY0NiZndDssIG9yIGFueSBtZW50aW9uIG9mCiZsdDtpc282NDYuaCZndDssIGluIGNsYXVzZXMgMTcgdGhvcm91Z2ggMjcuIFRoYXQgaW1wbGllcyB0aGF0IHRoZQpjb250ZW50cyBvZiAmbHQ7Y2lzbzY0NiZndDsgYXJlIHRoZSBzYW1lIGFzIEMgaGVhZGVyICZsdDtpc282NDYuaCZndDsuPC9wPgoKPHA+QW5uZXggQyAoaW5mb3JtYXRpdmUsIG5vdCBub3JtYXRpdmUpIGluIFtkaWZmLmhlYWRlci5pc282NDYuaF0gQy4yLjIuMgoiSGVhZGVyICZsdDtpc282NDYuaCZndDsiIHNheXMgdGhhdCB0aGUgYWx0ZXJuYXRpdmUgdG9rZW5zIGFyZSBub3QKZGVmaW5lZCBhcyBtYWNyb3MgaW4gJmx0O2Npc282NDYmZ3Q7LCBidXQgZG9lcyBub3QgbWVudGlvbiB0aGUgY29udGVudHMKb2YgJmx0O2lzbzY0Ni5oJmd0Oy48L3A+Cgo8cD5JIGRvbid0IGZpbmQgYW55IG5vcm1hdGl2ZSB0ZXh0IHRvIHN1cHBvcnQgQy4yLjIuMi48L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRvIHNlY3Rpb24gMTcuNC4xLjIgSGVhZGVycyBbbGliLmhlYWRlcnNdIGEgbmV3IHBhcmFncmFwaCBhZnRlcgogIHBhcmFncmFwaCA2ICh0aGUgb25lIGFib3V0IGZ1bmN0aW9ucyBtdXN0IGJlIGZ1bmN0aW9ucyk6PC9wPiAKCjxibG9ja3F1b3RlPgo8cD5JZGVudGlmaWVycyB0aGF0IGFyZSBrZXl3b3JkcyBvciBvcGVyYXRvcnMgaW4gQysrIHNoYWxsIG5vdCBiZSBkZWZpbmVkCmFzIG1hY3JvcyBpbiBDKysgc3RhbmRhcmQgbGlicmFyeSBoZWFkZXJzLiAKW0Zvb3Rub3RlOkluIHBhcnRpY3VsYXIsIGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgaGVhZGVyICZsdDtpc282NDYuaCZndDsKb3IgJmx0O2Npc282NDYmZ3Q7IGhhcyBubyBlZmZlY3QuIDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W3Bvc3QtUmVkbW9uZDogU3RldmUgcHJvdmlkZWQgd29yZGluZy5dPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQ2NyI+PC9hPjQ2Ny4gY2hhcl90cmFpdHM6Omx0KCksIGNvbXBhcmUoKSwgYW5kIG1lbWNtcCgpPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIxLjEuMy4xIFtjaGFyLnRyYWl0cy5zcGVjaWFsaXphdGlvbnMuY2hhcl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDA0LTA2LTI4PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+Cgo8cD4KVGFibGUgMzcgZGVzY3JpYmVzIHRoZSByZXF1aXJlbWVudHMgb24gVHJhaXRzOjpjb21wYXJlKCkgaW4gdGVybXMgb2YKdGhvc2Ugb24gVHJhaXRzOjpsdCgpLiAyMS4xLjMuMSwgcDYgcmVxdWlyZXMgY2hhcl90cmFpdHMmbHQ7Y2hhciZndDs6Omx0KCkKdG8geWllbGQgdGhlIHNhbWUgcmVzdWx0IGFzIG9wZXJhdG9yJmx0OyhjaGFyLCBjaGFyKS4KPC9wPgoKPHA+Ck1vc3QsIGlmIG5vdCBhbGwsIGltcGxlbWVudGF0aW9ucyBvZiBjaGFyX3RyYWl0cyZsdDtjaGFyJmd0Ozo6Y29tcGFyZSgpCmNhbGwgbWVtY21wKCkgZm9yIGVmZmljaWVuY3kuIEhvd2V2ZXIsIHRoZSBDIHN0YW5kYXJkIHJlcXVpcmVzIGJvdGgKbWVtY21wKCkgYW5kIHN0cmNtcCgpIHRvIGludGVycHJldCBjaGFyYWN0ZXJzIHVuZGVyIGNvbXBhcmlzb24gYXMKdW5zaWduZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNpZ25lZG5lc3Mgb2YgY2hhci4gQXMgYSByZXN1bHQsIGFsbAp0aGVzZSBjaGFyX3RyYWl0cyBpbXBsZW1lbnRhdGlvbnMgZmFpbCB0byBtZWV0IHRoZSByZXF1aXJlbWVudAppbXBvc2VkIGJ5IFRhYmxlIDM3IG9uIGNvbXBhcmUoKSB3aGVuIGNoYXIgaXMgc2lnbmVkLgo8L3A+CgoKPHA+UmVhZCBlbWFpbCB0aHJlYWQgc3RhcnRpbmcgd2l0aCBjKytzdGQtbGliLTEzNDk5IGZvciBtb3JlLiA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKCjxwPkNoYW5nZSAyMS4xLjMuMSwgcDYgZnJvbTwvcD4KPGJsb2NrcXVvdGU+PHA+CiAgICBUaGUgdHdvLWFyZ3VtZW50IG1lbWJlcnMgYXNzaWduLCBlcSwgYW5kIGx0IGFyZSBkZWZpbmVkIGlkZW50aWNhbGx5CiAgICB0byB0aGUgYnVpbHQtaW4gb3BlcmF0b3JzID0sID09LCBhbmQgJmx0OyByZXNwZWN0aXZlbHkuCjwvcD48L2Jsb2NrcXVvdGU+CjxwPnRvPC9wPgo8YmxvY2txdW90ZT48cD4KICBUaGUgdHdvLWFyZ3VtZW50IG1lbWJlciBhc3NpZ24gaXMgZGVmaW5lZCBpZGVudGljYWxseSB0bwogIHRoZSBidWlsdC1pbiBvcGVyYXRvciA9LiBUaGUgdHdvCiAgYXJndW1lbnQgbWVtYmVycyBlcSBhbmQgbHQgYXJlIGRlZmluZWQgaWRlbnRpY2FsbHkgdG8KICB0aGUgYnVpbHQtaW4gb3BlcmF0b3JzID09IGFuZCAmbHQ7IGZvciB0eXBlIHVuc2lnbmVkIGNoYXIuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD48aT5bUmVkbW9uZDogVGhlIExXRyBhZ3JlZWQgd2l0aCB0aGlzIGdlbmVyYWwgZGlyZWN0aW9uLCBidXQgd2UKICBhbHNvIG5lZWQgdG8gY2hhbmdlIDx0dD5lcTwvdHQ+IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGlzIGNoYW5nZS4KICBQb3N0LVJlZG1vbmQ6IE1hcnRpbiBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0NjgiPjwvYT40NjguIHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzIG9mIGlvc19iYXNlOjpvcGVyYXRvciB2b2lkKigpPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjQuNC4zIFtpb3N0YXRlLmZsYWdzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDQtMDYtMjg8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lvc3RhdGUuZmxhZ3MiPmlzc3VlczwvYT4gaW4gW2lvc3RhdGUuZmxhZ3NdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgoKPHA+VGhlIHByb2dyYW0gYmVsb3cgaXMgcmVxdWlyZWQgdG8gY29tcGlsZSBidXQgd2hlbiBydW4gaXQgdHlwaWNhbGx5CnByb2R1Y2VzIHVuZXhwZWN0ZWQgcmVzdWx0cyBkdWUgdG8gdGhlIHVzZXItZGVmaW5lZCBjb252ZXJzaW9uIGZyb20Kc3RkOjpjb3V0IG9yIGFueSBvYmplY3QgZGVyaXZlZCBmcm9tIGJhc2ljX2lvcyB0byB2b2lkKi4KPC9wPgoKPHByZT4gICAgI2luY2x1ZGUgJmx0O2Nhc3NlcnQmZ3Q7CiAgICAjaW5jbHVkZSAmbHQ7aW9zdHJlYW0mZ3Q7CgogICAgaW50IG1haW4gKCkKICAgIHsKICAgICAgICBhc3NlcnQgKHN0ZDo6Y2luLnRpZSAoKSA9PSBzdGQ6OmNvdXQpOwogICAgICAgIC8vIGNhbGxzIHN0ZDo6Y291dC5pb3M6Om9wZXJhdG9yIHZvaWQqKCkKICAgIH0KPC9wcmU+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+ClJlcGxhY2Ugc3RkOjpiYXNpY19pb3MmbHQ7Y2hhclQsIHRyYWl0cyZndDs6Om9wZXJhdG9yIHZvaWQqKCkgd2l0aCBhbm90aGVyCmNvbnZlcnNpb24gb3BlcmF0b3IgdG8gc29tZSB1bnNwZWNpZmllZCB0eXBlIHRoYXQgaXMgZ3VhcmFudGVlZCBub3QKdG8gYmUgY29udmVydGlibGUgdG8gYW55IG90aGVyIHR5cGUgZXhjZXB0IGZvciBib29sIChhIHBvaW50ZXItdG8tbWVtYmVyCm1pZ2h0IGJlIG9uZSBzdWNoIHN1aXRhYmxlIHR5cGUpLiBJbiBhZGRpdGlvbiwgbWFrZSBpdCBjbGVhciB0aGF0IHRoZQpwb2ludGVyIHR5cGUgbmVlZCBub3QgYmUgYSBwb2ludGVyIHRvIGEgY29tcGxldGUgdHlwZSBhbmQgd2hlbiBub24tbnVsbCwKdGhlIHZhbHVlIG5lZWQgbm90IGJlIHZhbGlkLgo8L3A+Cgo8cD5TcGVjaWZpY2FsbHksIGNoYW5nZSBpbiBbbGliLmlvc10gdGhlIHNpZ25hdHVyZSBvZjwvcD4KPHByZT4gICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdDsKPC9wcmU+CjxwPnRvPC9wPgo8cHJlPiAgICBvcGVyYXRvciB1bnNwZWNpZmllZC1ib29sLXR5cGUoKSBjb25zdDsKPC9wcmU+CjxwPmFuZCBjaGFuZ2UgW2xpYi5pb3N0YXRlLmZsYWdzXSwgcDEgZnJvbTwvcD4KPHByZT4gICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdDsKPC9wcmU+CjxwPnRvPC9wPgo8cHJlPm9wZXJhdG9yIHVuc3BlY2lmaWVkLWJvb2wtdHlwZSgpIGNvbnN0OwoKICAgICAtMS0gUmV0dXJuczogaWYgZmFpbCgpIHRoZW4gYSB2YWx1ZSB0aGF0IHdpbGwgZXZhbHVhdGUgZmFsc2UgaW4gYQogICAgICBib29sZWFuIGNvbnRleHQ7IG90aGVyd2lzZSBhIHZhbHVlIHRoYXQgd2lsbCBldmFsdWF0ZSB0cnVlIGluIGEKICAgICAgYm9vbGVhbiBjb250ZXh0LiBUaGUgdmFsdWUgdHlwZSByZXR1cm5lZCBzaGFsbCBub3QgYmUKICAgICAgY29udmVydGlibGUgdG8gaW50LgoKICAgICAtMi0gW05vdGU6IFRoaXMgY29udmVyc2lvbiBjYW4gYmUgdXNlZCBpbiBjb250ZXh0cyB3aGVyZSBhIGJvb2wKICAgICAgaXMgZXhwZWN0ZWQgKGUuZy4sIGFuIGlmIGNvbmRpdGlvbik7IGhvd2V2ZXIsIGltcGxpY2l0CiAgICAgIGNvbnZlcnNpb25zIChlLmcuLCB0byBpbnQpIHRoYXQgY2FuIG9jY3VyIHdpdGggYm9vbCBhcmUgbm90CiAgICAgIGFsbG93ZWQsIGVsaW1pbmF0aW5nIHNvbWUgc291cmNlcyBvZiB1c2VyIGVycm9yLiBPbmUgcG9zc2libGUKICAgICAgaW1wbGVtZW50YXRpb24gY2hvaWNlIGZvciB0aGlzIHR5cGUgaXMgcG9pbnRlci10by1tZW1iZXIuICAtIGVuZAogICAgICBub3RlXQo8L3ByZT4KCjxwPjxpPltSZWRtb25kOiA1LTQgc3RyYXcgcG9sbCBpbiBmYXZvciBvZiBkb2luZyB0aGlzLl08L2k+PC9wPgoKPHA+PGk+W0xpbGxlaGFtbWVyOiBEb3VnIHByb3ZpZGVkIHJldmlzZWQgd29yZGluZyBmb3IKICAidW5zcGVjaWZpZWQtYm9vbC10eXBlIi5dPC9pPjwvcD4KIAoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDY5Ij48L2E+NDY5LiB2ZWN0b3ImbHQ7Ym9vbCZndDsgaWxsLWZvcm1lZCByZWxhdGlvbmFsIG9wZXJhdG9yczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4yLjYgW3ZlY3Rvcl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDA0LTA2LTI4PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCN2ZWN0b3IiPmlzc3VlczwvYT4gaW4gW3ZlY3Rvcl0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjRFIiPkRSPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+Cgo8cD4KVGhlIG92ZXJsb2FkcyBvZiByZWxhdGlvbmFsIG9wZXJhdG9ycyBmb3IgdmVjdG9yJmx0O2Jvb2wmZ3Q7IHNwZWNpZmllZAppbiBbbGliLnZlY3Rvci5ib29sXSBhcmUgcmVkdW5kYW50ICh0aGV5IGFyZSBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsCnRvIHRob3NlIHByb3ZpZGVkIGZvciB0aGUgdmVjdG9yIHByaW1hcnkgdGVtcGxhdGUpIGFuZCBtYXkgZXZlbiBiZQpkaWFnbm9zZWQgYXMgaWxsLWZvcm1lZCAocmVmZXIgdG8gRGF2ZWVkIFZhbmRldm9vcmRlJ3MgZXhwbGFuYXRpb24KaW4gYysrc3RkLWxpYi0xMzY0NykuCjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KUmVtb3ZlIGFsbCBvdmVybG9hZHMgb2Ygb3ZlcmxvYWRzIG9mIHJlbGF0aW9uYWwgb3BlcmF0b3JzIGZvcgp2ZWN0b3ImbHQ7Ym9vbCZndDsgZnJvbSBbbGliLnZlY3Rvci5ib29sXS4KPC9wPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNDc0Ij48L2E+NDc0LiBjb25mdXNpbmcgRm9vdG5vdGUgMjk3PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjYuMi42LjQgW29zdHJlYW0uaW5zZXJ0ZXJzLmNoYXJhY3Rlcl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDA0LTA3LTAxPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNvc3RyZWFtLmluc2VydGVycy5jaGFyYWN0ZXIiPmlzc3VlczwvYT4gaW4gW29zdHJlYW0uaW5zZXJ0ZXJzLmNoYXJhY3Rlcl0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+Cgo8cD4KSSB0aGluayBGb290bm90ZSAyOTcgaXMgY29uZnVzZWQuIFRoZSBwYXJhZ3JhcGggaXQgYXBwbGllcyB0byBzZWVtcwpxdWl0ZSBjbGVhciBpbiB0aGF0IHdpZGVuKCkgaXMgb25seSBjYWxsZWQgaWYgdGhlIG9iamVjdCBpcyBub3QgYSBjaGFyCnN0cmVhbSAoaS5lLiwgbm90IGJhc2ljX29zdHJlYW0mbHQ7Y2hhciZndDspLCBzbyBpdCdzIGlycmVsZXZhbnQgd2hhdCB0aGUKdmFsdWUgb2Ygd2lkZW4oYykgaXMgb3RoZXJ3aXNlLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSSBwcm9wb3NlIHRvIHN0cmlrZSB0aGUgRm9vdG5vdGUuCjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQ3NSI+PC9hPjQ3NS4gTWF5IHRoZSBmdW5jdGlvbiBvYmplY3QgcGFzc2VkIHRvIGZvcl9lYWNoIG1vZGlmeSB0aGUgZWxlbWVudHMgb2YgdGhlIGl0ZXJhdGVkIHNlcXVlbmNlPzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNS4xLjQgW2FsZy5mb3JlYWNoXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBTdGVwaGFuIFQuIExhdmF2ZWosIEphYWtrbyBKYXJ2aSA8Yj5EYXRlOjwvYj4gMjAwNC0wNy0wOTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxnLmZvcmVhY2giPmlzc3VlczwvYT4gaW4gW2FsZy5mb3JlYWNoXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+Ckl0IGlzIG5vdCBjbGVhciB3aGV0aGVyIHRoZSBmdW5jdGlvbiBvYmplY3QgcGFzc2VkIHRvIGZvcl9lYWNoIGlzIGFsbG93ZWQgdG8KbW9kaWZ5IHRoZSBlbGVtZW50cyBvZiB0aGUgc2VxdWVuY2UgYmVpbmcgaXRlcmF0ZWQgb3Zlci4KPC9wPgoKPHA+CmZvcl9lYWNoIGlzIGNsYXNzaWZpZWQgd2l0aG91dCBleHBsYW5hdGlvbiBpbiBbbGliLmFsZy5ub25tb2RpZnlpbmddLCAiMjUuMQpOb24tbW9kaWZ5aW5nIHNlcXVlbmNlIG9wZXJhdGlvbnMiLiAnTm9uLW1vZGlmeWluZyBzZXF1ZW5jZSBvcGVyYXRpb24nIGlzCm5ldmVyIGRlZmluZWQuCjwvcD4KCjxwPgoyNSg1KSBzYXlzOiAiSWYgYW4gYWxnb3JpdGhtJ3MgRWZmZWN0cyBzZWN0aW9uIHNheXMgdGhhdCBhIHZhbHVlIHBvaW50ZWQgdG8KYnkgYW55IGl0ZXJhdG9yIHBhc3NlZCBhcyBhbiBhcmd1bWVudCBpcyBtb2RpZmllZCwgdGhlbiB0aGF0IGFsZ29yaXRobSBoYXMKYW4gYWRkaXRpb25hbCB0eXBlIHJlcXVpcmVtZW50OiBUaGUgdHlwZSBvZiB0aGF0IGFyZ3VtZW50IHNoYWxsIHNhdGlzZnkgdGhlCnJlcXVpcmVtZW50cyBvZiBhIG11dGFibGUgaXRlcmF0b3IgKDI0LjEpLiIKPC9wPgoKPHA+Zm9yX2VhY2gncyBFZmZlY3RzIHNlY3Rpb24gZG9lcyBub3QgbWVudGlvbiB3aGV0aGVyIGFyZ3VtZW50cyBjYW4gYmUKbW9kaWZpZWQ6PC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgIkVmZmVjdHM6IEFwcGxpZXMgZiB0byB0aGUgcmVzdWx0IG9mIGRlcmVmZXJlbmNpbmcgZXZlcnkgaXRlcmF0b3IgaW4gdGhlCiAgIHJhbmdlIFtmaXJzdCwgbGFzdCksIHN0YXJ0aW5nIGZyb20gZmlyc3QgYW5kIHByb2NlZWRpbmcgdG8gbGFzdCAtIDEuIgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+CkV2ZXJ5IG90aGVyIGFsZ29yaXRobSBpbiBbbGliLmFsZy5ub25tb2RpZnlpbmddIGlzICJyZWFsbHkiIG5vbi1tb2RpZnlpbmcgaW4KdGhlIHNlbnNlIHRoYXQgbmVpdGhlciB0aGUgYWxnb3JpdGhtcyB0aGVtc2VsdmVzIG5vciB0aGUgZnVuY3Rpb24gb2JqZWN0cwpwYXNzZWQgdG8gdGhlIGFsZ29yaXRobXMgbWF5IG1vZGlmeSB0aGUgc2VxdWVuY2VzIG9yIGVsZW1lbnRzIGluIGFueSB3YXkuClRoaXMgRFIgYWZmZWN0cyBvbmx5IGZvcl9lYWNoLgo8L3A+Cgo8cD4KV2Ugc3VzcGVjdCB0aGF0IGZvcl9lYWNoJ3MgY2xhc3NpZmljYXRpb24gaW4gIm5vbi1tb2RpZnlpbmcgc2VxdWVuY2UKb3BlcmF0aW9ucyIgbWVhbnMgdGhhdCB0aGUgYWxnb3JpdGhtIGl0c2VsZiBkb2VzIG5vdCBpbmhlcmVudGx5IG1vZGlmeSB0aGUKc2VxdWVuY2Ugb3IgdGhlIGVsZW1lbnRzIGluIHRoZSBzZXF1ZW5jZSwgYnV0IHRoYXQgdGhlIGZ1bmN0aW9uIG9iamVjdApwYXNzZWQgdG8gaXQgbWF5IG1vZGlmeSB0aGUgZWxlbWVudHMgaXQgb3BlcmF0ZXMgb24uIAo8L3A+Cgo8cD4KVGhlIG9yaWdpbmFsIFNUTCBkb2N1bWVudCBieSBTdGVwYW5vdiBhbmQgTGVlIGV4cGxpY2l0bHkgcHJvaGliaXRlZCB0aGUKZnVuY3Rpb24gb2JqZWN0IGZyb20gbW9kaWZ5aW5nIGl0cyBhcmd1bWVudC4KVGhlICJvYnZpb3VzIiBpbXBsZW1lbnRhdGlvbiBvZiBmb3JfZWFjaCBmb3VuZCBpbiBzZXZlcmFsIHN0YW5kYXJkIGxpYnJhcnkgCmltcGxlbWVudGF0aW9ucywgaG93ZXZlciwgZG9lcyBub3QgaW1wb3NlIHRoaXMgcmVzdHJpY3Rpb24uCkFzIGEgcmVzdWx0LCB3ZSBzdXNwZWN0IHRoYXQgdGhlIHVzZSBvZiBmb3JfZWFjaCB3aXRoIGZ1bmN0aW9uIG9iamVjdHMgdGhhdCBtb2RpZnkKdGhlaXIgYXJndW1lbnRzIGlzIHdpZGUtc3ByZWFkLiAKSWYgdGhlIHJlc3RyaWN0aW9uIHdhcyByZWluc3RhdGVkLCBhbGwgc3VjaCBjb2RlIHdvdWxkIGJlY29tZSBub24tY29uZm9ybWluZy4KRnVydGhlciwgbm9uZSBvZiB0aGUgb3RoZXIgYWxnb3JpdGhtcyBpbiB0aGUgU3RhbmRhcmQKY291bGQgc2VydmUgdGhlIHB1cnBvc2Ugb2YgZm9yX2VhY2ggKHRyYW5zZm9ybSBkb2VzIG5vdCBndWFyYW50ZWUgdGhlIG9yZGVyIGluCndoaWNoIGl0cyBmdW5jdGlvbiBvYmplY3QgaXMgY2FsbGVkKS4gCjwvcD4KCjxwPgpXZSBzdWdnZXN0IHRoYXQgdGhlIHN0YW5kYXJkIGJlIGNsYXJpZmllZCB0byBleHBsaWNpdGx5IGFsbG93IHRoZSBmdW5jdGlvbiBvYmplY3QgCnBhc3NlZCB0byBmb3JfZWFjaCBtb2RpZnkgaXRzIGFyZ3VtZW50LjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgYSBub25ub3JtYXRpdmUgbm90ZSB0byB0aGUgRWZmZWN0cyBpbiAyNS4xLjQgW2FsZy5mb3JlYWNoXTogSWYKdGhlIHR5cGUgb2YgJ2ZpcnN0JyBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIG11dGFibGUgaXRlcmF0b3IsCidmJyBtYXkgYXBwbHkgbm9uY29uc3RhbnQgZnVuY3Rpb25zIHRocm91Z2ggdGhlIGRlcmVmZXJlbmNlZCBpdGVyYXRvcnMKcGFzc2VkIHRvIGl0Lgo8L3A+CgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGJlbGlldmVzIHRoYXQgbm90aGluZyBpbiB0aGUgc3RhbmRhcmQgcHJvaGliaXRzIGZ1bmN0aW9uCiAgb2JqZWN0cyB0aGF0IG1vZGlmeSB0aGUgc2VxdWVuY2UgZWxlbWVudHMuIFRoZSBwcm9ibGVtIGlzIHRoYXQKICBmb3JfZWFjaCBpcyBpbiBhIHNlY2lvbiBlbnRpdGxlZCAibm9ubXV0YXRpbmcgYWxnb3JpdGhtcyIsIGFuZCB0aGUKICB0aXRsZSBtYXkgYmUgY29uZnVzaW5nLiAgQSBub25ub3JtYXRpdmUgbm90ZSBzaG91bGQgY2xhcmlmeSB0aGF0LjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0NzgiPjwvYT40NzguIFNob3VsZCBmb3J3YXJkIGl0ZXJhdG9yIHJlcXVpcmVtZW50cyB0YWJsZSBoYXZlIGEgbGluZSBmb3Igci0mZ3Q7bT88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjQuMS4zIFtmb3J3YXJkLml0ZXJhdG9yc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGF2ZSBBYnJhaGFtcyA8Yj5EYXRlOjwvYj4gMjAwNC0wNy0xMTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjZm9yd2FyZC5pdGVyYXRvcnMiPmlzc3VlczwvYT4gaW4gW2ZvcndhcmQuaXRlcmF0b3JzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkR1cGxpY2F0ZSBvZjo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQ3NyI+NDc3PC9hPjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIEZvcndhcmQgSXRlcmF0b3IgcmVxdWlyZW1lbnRzIHRhYmxlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmc6CjwvcD4KPHByZT4gZXhwcmVzc2lvbiAgcmV0dXJuIHR5cGUgICAgICAgICBvcGVyYXRpb25hbCAgcHJlY29uZGl0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY3MKICA9PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PQogIGEtJmd0O20gICAgICAgIFUmYW1wOyBpZiBYIGlzIG11dGFibGUsICgqYSkubSAgICAgICBwcmU6ICgqYSkubSBpcyB3ZWxsLWRlZmluZWQuCiAgICAgICAgICAgICAgb3RoZXJ3aXNlIGNvbnN0IFUmYW1wOwoKICByLSZndDttICAgICAgICBVJmFtcDsgICAgICAgICAgICAgICAgICAoKnIpLm0gICAgICAgcHJlOiAoKnIpLm0gaXMgd2VsbC1kZWZpbmVkLgo8L3ByZT4KCjxwPlRoZSBzZWNvbmQgbGluZSBtYXkgYmUgdW5uZWNlc3NhcnkuICBQYXJhZ3JhcGggMTEgb2YKICBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c10gc2F5czoKPC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgIEluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMsIGEgYW5kIGIgZGVub3RlIHZhbHVlcyBvZiB0eXBlIGNvbnN0IFgsIG4KICAgZGVub3RlcyBhIHZhbHVlIG9mIHRoZSBkaWZmZXJlbmNlIHR5cGUgRGlzdGFuY2UsIHUsIHRtcCwgYW5kIG0KICAgZGVub3RlIGlkZW50aWZpZXJzLCByIGRlbm90ZXMgYSB2YWx1ZSBvZiBYJmFtcDssIHQgZGVub3RlcyBhIHZhbHVlIG9mCiAgIHZhbHVlIHR5cGUgVCwgbyBkZW5vdGVzIGEgdmFsdWUgb2Ygc29tZSB0eXBlIHRoYXQgaXMgd3JpdGFibGUgdG8KICAgdGhlIG91dHB1dCBpdGVyYXRvci4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpCZWNhdXNlIG9wZXJhdG9ycyBjYW4gYmUgb3ZlcmxvYWRlZCBvbiBhbiBpdGVyYXRvcidzIGNvbnN0LW5lc3MsIHRoZQpjdXJyZW50IHJlcXVpcmVtZW50cyBhbGxvdyBpdGVyYXRvcnMgdG8gbWFrZSBtYW55IG9mIHRoZSBvcGVyYXRpb25zCnNwZWNpZmllZCB1c2luZyB0aGUgaWRlbnRpZmllcnMgYSBhbmQgYiBpbnZhbGlkIGZvciBub24tY29uc3QKaXRlcmF0b3JzLjwvcD4KCjxwPlJlbGF0ZWQgaXNzdWU6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQ3NyI+NDc3PC9hPjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5SZW1vdmUgdGhlICJyLSZndDttIiBsaW5lIGZyb20gdGhlIEZvcndhcmQgSXRlcmF0b3IgcmVxdWlyZW1lbnRzCnRhYmxlLiBDaGFuZ2U8L3A+CjxibG9ja3F1b3RlPjxwPgogICAgImNvbnN0IFgiCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4gdG8gPC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgICAiWCBvciBjb25zdCBYIiAKPC9wPjwvYmxvY2txdW90ZT4KCjxwPmluIHBhcmFncmFwaCAxMSBvZiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c10uPC9wPgoKCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUaGlzIGlzIGEgZGVmZWN0IGJlY2F1c2UgaXQgY29uc3RyYWlucyBhbiBsdmFsdWUgdG8gcmV0dXJuaW5nIGEgbW9kaWZpYWJsZSBsdmFsdWUuCjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0ODgiPjwvYT40ODguIHJvdGF0ZSB0aHJvd3MgYXdheSB1c2VmdWwgaW5mb3JtYXRpb248L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjUuMi4xMSBbYWxnLnJvdGF0ZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSG93YXJkIEhpbm5hbnQgPGI+RGF0ZTo8L2I+IDIwMDQtMTEtMjI8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CnJvdGF0ZSB0YWtlcyAzIGl0ZXJhdG9yczogIGZpcnN0LCBtaWRkbGUgYW5kIGxhc3Qgd2hpY2ggcG9pbnQgaW50byBhCnNlcXVlbmNlLCBhbmQgcmVhcnJhbmdlcyB0aGUgc2VxdWVuY2Ugc3VjaCB0aGF0IHRoZSBzdWJyYW5nZSBbbWlkZGxlLApsYXN0KSBpcyBub3cgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VxdWVuY2UgYW5kIHRoZSBzdWJyYW5nZSBbZmlyc3QsCm1pZGRsZSkgZm9sbG93cy4gIFRoZSByZXR1cm4gdHlwZSBpcyB2b2lkLiAKPC9wPgoKPHA+CkluIG1hbnkgdXNlIGNhc2VzIG9mIHJvdGF0ZSwgdGhlIGNsaWVudCBuZWVkcyB0byBrbm93IHdoZXJlIHRoZQpzdWJyYW5nZSBbZmlyc3QsIG1pZGRsZSkgc3RhcnRzIGFmdGVyIHRoZSByb3RhdGUgaXMgcGVyZm9ybWVkLiAgVGhpcwptaWdodCBsb29rIGxpa2U6IAo8L3A+CjxwcmU+ICByb3RhdGUoZmlyc3QsIG1pZGRsZSwgbGFzdCk7CiAgSXRlcmF0b3IgaSA9IGFkdmFuY2UoZmlyc3QsIGRpc3RhbmNlKG1pZGRsZSwgbGFzdCkpOwo8L3ByZT4KCjxwPgpVbmxlc3MgdGhlIGl0ZXJhdG9ycyBhcmUgcmFuZG9tIGFjY2VzcywgdGhlIGNvbXB1dGF0aW9uIHRvIGZpbmQgdGhlCnN0YXJ0IG9mIHRoZSBzdWJyYW5nZSBbZmlyc3QsIG1pZGRsZSkgaGFzIGxpbmVhciBjb21wbGV4aXR5LiAgSG93ZXZlciwKaXQgaXMgbm90IGRpZmZpY3VsdCBmb3Igcm90YXRlIHRvIHJldHVybiB0aGlzIGluZm9ybWF0aW9uIHdpdGgKbmVnbGlnaWJsZSBhZGRpdGlvbmFsIGNvbXB1dGF0aW9uIGV4cGVuc2UuICBTbyB0aGUgY2xpZW50IGNvdWxkIGNvZGU6IAo8L3A+CjxwcmU+ICBJdGVyYXRvciBpID0gcm90YXRlKGZpcnN0LCBtaWRkbGUsIGxhc3QpOwo8L3ByZT4KCjxwPgphbmQgdGhlIHJlc3VsdGluZyBwcm9ncmFtIGJlY29tZXMgc2lnbmlmaWNhbnRseSBtb3JlIGVmZmljaWVudC4KPC9wPgoKPHA+CldoaWxlIHRoZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBoaXQgd2l0aCB0aGlzIGNoYW5nZSBpcyBub3QgemVybywgaXQKaXMgdmVyeSBzbWFsbCAoc2ltaWxhciB0byB0aGF0IG9mIGx3ZyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTMwIj4xMzA8L2E+KSwgYW5kIHRoZXJlIGlzCmEgc2lnbmlmaWNhbnQgYmVuZWZpdCB0byB0aGUgY2hhbmdlLiAKPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI1IFthbGdvcml0aG1zXSBwMiwgY2hhbmdlOjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+ICB0ZW1wbGF0ZSZsdDtjbGFzcyBGb3J3YXJkSXRlcmF0b3ImZ3Q7CiAgICA8ZGVsPnZvaWQ8L2RlbD4gPGlucz5Gb3J3YXJkSXRlcmF0b3I8L2lucz4gcm90YXRlKEZvcndhcmRJdGVyYXRvciBmaXJzdCwgRm9yd2FyZEl0ZXJhdG9yIG1pZGRsZSwKICAgICAgICAgICAgICAgIEZvcndhcmRJdGVyYXRvciBsYXN0KTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+SW4gMjUuMi4xMSBbYWxnLnJvdGF0ZV0sIGNoYW5nZTo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPiAgdGVtcGxhdGUmbHQ7Y2xhc3MgRm9yd2FyZEl0ZXJhdG9yJmd0OwogICAgPGRlbD52b2lkPC9kZWw+IDxpbnM+Rm9yd2FyZEl0ZXJhdG9yPC9pbnM+IHJvdGF0ZShGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJdGVyYXRvciBtaWRkbGUsCiAgICAgICAgICAgICAgICBGb3J3YXJkSXRlcmF0b3IgbGFzdCk7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPkluIDI1LjIuMTEgW2FsZy5yb3RhdGVdIGluc2VydCBhIG5ldyBwYXJhZ3JhcGggYWZ0ZXIgcDE6PC9wPgoKPGJsb2NrcXVvdGU+CjxwPjxiPlJldHVybnM8L2I+OiA8dHQ+Zmlyc3QgKyAobGFzdCAtIG1pZGRsZSk8L3R0Pi48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPlsKVGhlIExXRyBhZ3JlZXMgd2l0aCB0aGlzIGlkZWEsIGJ1dCBoYXMgb25lIHF1aWJibGU6IHdlIHdhbnQgdG8gbWFrZQpzdXJlIG5vdCB0byBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGZ1bmN0aW9uICJhZHZhbmNlIiBpcwphY3R1YWxseSBjYWxsZWQsIGp1c3QgdGhhdCB0aGUgbnRoIGl0ZXJhdG9yIGlzIHJldHVybmVkLiAgKENhbGxpbmcKYWR2YW5jZSBpcyBvYnNlcnZhYmxlIGJlaGF2aW9yLCBzaW5jZSB1c2VycyBjYW4gc3BlY2lhbGl6ZSBpdCBmb3IKdGhlaXIgb3duIGl0ZXJhdG9ycy4pICBIb3dhcmQgd2lsbCBwcm92aWRlIHdvcmRpbmcuCl08L2k+PC9wPgoKCjxwPjxpPltIb3dhcmQgcHJvdmlkZWQgd29yZGluZyBmb3IgbWlkLW1lZXRpbmctbWFpbGluZyBKdW4uIDIwMDUuXTwvaT48L3A+CgoKPHA+PGk+WwpUb3JvbnRvOiBtb3ZlZCB0byBSZWFkeS4KXTwvaT48L3A+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0OTUiPjwvYT40OTUuIENsYXVzZSAyMiB0ZW1wbGF0ZSBwYXJhbWV0ZXIgcmVxdWlyZW1lbnRzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyIFtsb2NhbGl6YXRpb25dIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEJlbWFuIERhd2VzIDxiPkRhdGU6PC9iPiAyMDA1LTAxLTEwPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsb2NhbGl6YXRpb24iPmlzc3VlczwvYT4gaW4gW2xvY2FsaXphdGlvbl0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkl0IGFwcGVhcnMgdGhhdCB0aGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBmb3IgbWFueSBvZiB0aGUKdGVtcGxhdGUgcGFyYW1ldGVycyBpbiBjbGF1c2UgMjIuIEl0IGxvb2tzIGxpa2UgdGhpcyBpc3N1ZSBoYXMgbmV2ZXIKY29tZSB1cCwgZXhjZXB0IHBlcmhhcHMgZm9yIEZhY2V0LjwvcD4KCjxwPkNsYXVzZSAyMiBpc24ndCBldmVuIGxpc3RlZCBpbiAxNy4zLjIuMSBbbGliLnR5cGUuZGVzY3JpcHRpb25zXSwKZWl0aGVyLCB3aGljaCBpcyB0aGUgd29yZGluZyB0aGF0IGFsbG93cyByZXF1aXJlbWVudHMgb24gdGVtcGxhdGUKcGFyYW1ldGVycyB0byBiZSBpZGVudGlmaWVkIGJ5IG5hbWUuPC9wPgoKPHA+U28gb25lIGlzc3VlIGlzIHRoYXQgMTcuMy4yLjEgW2xpYi50eXBlLmRlc2NyaXB0aW9uc10gU2hvdWxkIGJlCmNoYW5nZWQgdG8gY292ZXIgY2xhdXNlIDIyLiBBIGJldHRlciBjaGFuZ2UsIHdoaWNoIHdpbGwgY292ZXIgdXMgaW4KdGhlIGZ1dHVyZSwgd291bGQgYmUgdG8gc2F5IHRoYXQgaXQgYXBwbGllcyB0byBhbGwgdGhlIGxpYnJhcnkKY2xhdXNlcy4gVGhlbiBpZiBhIHRlbXBsYXRlIGdldHMgYWRkZWQgdG8gYW55IGxpYnJhcnkgY2xhdXNlIHdlIGFyZQpjb3ZlcmVkLjwvcD4KCjxwPmNoYXJULCBJbnB1dEl0ZXJhdG9yLCBhbmQgb3RoZXIgbmFtZXMgd2l0aCByZXF1aXJlbWVudHMgZGVmaW5lZAplbHNld2hlcmUgYXJlIGZpbmUsIGFzc3VtaW5nIHRoZSAxNy4zLjIuMSBbbGliLnR5cGUuZGVzY3JpcHRpb25zXSBmaXguCkJ1dCB0aGVyZSBhcmUgYSBmZXcgdGVtcGxhdGUgYXJndW1lbnRzIG5hbWVzIHdoaWNoIEkgZG9uJ3QgdGhpbmsgaGF2ZQpyZXF1aXJlbWVudHMgZ2l2ZW4gZWxzZXdoZXJlOjwvcD4KCjx1bD4KPGxpPmludGVyblQgYW5kIGV4dGVyblQuICBUaGUgZml4IGlzIHRvIGFkZCB3b3JkaW5nIHNheWluZyB0aGF0IGludGVyblQKYW5kIGV4dGVyblQgbXVzdCBtZWV0IHRoZSBzYW1lIHJlcXVpcmVtZW50cyBhcyB0ZW1wbGF0ZSBhcmd1bWVudHMKbmFtZWQgY2hhclQuPC9saT4KCjxsaT5zdGF0ZVQuICBJJ20gbm90IHN1cmUgYWJvdXQgdGhpcyBvbmUuIFRoZXJlIGFscmVhZHkgaXMgc29tZSB3b3JkaW5nLApidXQgaXQgc2VlbXMgYSBiaXQgdmFndWUuPC9saT4KCjxsaT5JbnRsLiAgW2xpYi5sb2NhbGUubW9uZXlwdW5jdC5ieW5hbWVdIFRoZSBmaXggZm9yIHRoaXMgb25lIGlzIHRvCnJlbmFtZSAiSW50bCIgdG8gIkludGVybmF0aW9uYWwiLiBUaGUgbmFtZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSBvdGhlcgp0ZXh0IGlkZW50aWZpZXMgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGhlIG5hbWUgSW50ZXJuYXRpb25hbCBidXQgbm90CmZvciBJbnRsLjwvbGk+CjwvdWw+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAxNy4zLjIuMSBbdHlwZS5kZXNjcmlwdGlvbnNdLCBwYXJhZ3JhcGggMSwgZnJvbTo8L3A+CjxibG9ja3F1b3RlPjxwPgpUaGUgUmVxdWlyZW1lbnRzIHN1YmNsYXVzZXMgbWF5IGRlc2NyaWJlIG5hbWVzIHRoYXQgYXJlIHVzZWQgdG8Kc3BlY2lmeSBjb25zdHJhaW50cyBvbiB0ZW1wbGF0ZSBhcmd1bWVudHMuMTUzKSBUaGVzZSBuYW1lcyBhcmUgdXNlZCBpbgpjbGF1c2VzIDIwLCAyMywgMjUsIGFuZCAyNiB0byBkZXNjcmliZSB0aGUgdHlwZXMgdGhhdCBtYXkgYmUgc3VwcGxpZWQKYXMgYXJndW1lbnRzIGJ5IGEgQysrIHByb2dyYW0gd2hlbiBpbnN0YW50aWF0aW5nIHRlbXBsYXRlIGNvbXBvbmVudHMKZnJvbSB0aGUgbGlicmFyeS4gCjwvcD48L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+PHA+ClRoZSBSZXF1aXJlbWVudHMgc3ViY2xhdXNlcyBtYXkgZGVzY3JpYmUgbmFtZXMgdGhhdCBhcmUgdXNlZCB0bwpzcGVjaWZ5IGNvbnN0cmFpbnRzIG9uIHRlbXBsYXRlIGFyZ3VtZW50cy4xNTMpIFRoZXNlIG5hbWVzIGFyZSB1c2VkIGluCmxpYnJhcnkgY2xhdXNlcyB0byBkZXNjcmliZSB0aGUgdHlwZXMgdGhhdCBtYXkgYmUgc3VwcGxpZWQgYXMKYXJndW1lbnRzIGJ5IGEgQysrIHByb2dyYW0gd2hlbiBpbnN0YW50aWF0aW5nIHRlbXBsYXRlIGNvbXBvbmVudHMgZnJvbQp0aGUgbGlicmFyeS4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPkluIHRoZSBmcm9udCBtYXR0ZXIgb2YgY2xhc3MgMjIsIGxvY2FsZXMsIGFkZDo8L3A+CjxibG9ja3F1b3RlPjxwPgpUZW1wbGF0ZSBwYXJhbWV0ZXIgdHlwZXMgaW50ZXJuVCBhbmQgZXh0ZXJuVCBzaGFsbCBtZWV0IHRoZQpyZXF1aXJlbWVudHMgb2YgY2hhclQgKGRlc2NyaWJlZCBpbiAyMSBbc3RyaW5nc10pLgo8L3A+PC9ibG9ja3F1b3RlPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KIEFnYWluLCBhIGJsYW5rZXQgY2xhdXNlIGlzbid0IGJsYW5rZXQgZW5vdWdoLiBBbHNvLCB3ZSd2ZSBnb3QgYQogY291cGxlIG9mIG5hbWVzIHRoYXQgd2UgZG9uJ3QgaGF2ZSBibGFua2V0IHJlcXVpcmVtZW50IHN0YXRlbWVudHMKIGZvci4gVGhlIG9ubHkgaXNzdWUgaXMgd2hhdCB0byBkbyBhYm91dCBzdGF0ZVQuIFRoaXMgd29yZGluZyBpcwogdGhpbiwgYnV0IHByb2JhYmx5IGFkZXF1YXRlLjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI0OTYiPjwvYT40OTYuIElsbGVnYWwgdXNlIG9mICJUIiBpbiB2ZWN0b3ImbHQ7Ym9vbCZndDs8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMi42IFt2ZWN0b3JdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IHJpY2hhcmRAZXgtcGFycm90LmNvbSA8Yj5EYXRlOjwvYj4gMjAwNS0wMi0xMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjdmVjdG9yIj5pc3N1ZXM8L2E+IGluIFt2ZWN0b3JdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSW4gdGhlIHN5bm9wc2lzIG9mIHRoZSBzdGQ6OnZlY3RvciZsdDtib29sJmd0OyBzcGVjaWFsaXNhdGlvbiBpbiAyMy4yLjYgW3ZlY3Rvcl0sCnRoZSBub24tdGVtcGxhdGUgYXNzaWduKCkgZnVuY3Rpb24gaGFzIHRoZSBzaWduYXR1cmU8L3A+Cgo8cHJlPiAgdm9pZCBhc3NpZ24oIHNpemVfdHlwZSBuLCBjb25zdCBUJmFtcDsgdCApOwo8L3ByZT4KCjxwPlRoZSB0eXBlLCBULCBpcyBub3QgZGVmaW5lZCBpbiB0aGlzIGNvbnRleHQuPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSAiVCIgd2l0aCAidmFsdWVfdHlwZSIuPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjQ5NyI+PC9hPjQ5Ny4gbWVhbmluZyBvZiBudW1lcmljX2xpbWl0czo6dHJhcHMgZm9yIGZsb2F0aW5nIHBvaW50IHR5cGVzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE4LjIuMS4yIFtudW1lcmljLmxpbWl0cy5tZW1iZXJzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDUtMDMtMDI8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI251bWVyaWMubGltaXRzLm1lbWJlcnMiPmlzc3VlczwvYT4gaW4gW251bWVyaWMubGltaXRzLm1lbWJlcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgoKPHA+MTguMi4xLjIsIHA1OSBzYXlzIHRoaXMgbXVjaCBhYm91dCB0aGUgdHJhcHMgbWVtYmVyIG9mIG51bWVyaWNfbGltaXRzOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5zdGF0aWMgY29uc3QgYm9vbCB0cmFwczs8YnI+Ci01OS0gdHJ1ZSBpZiB0cmFwcGluZyBpcyBpbXBsZW1lbnRlZCBmb3IgdGhlIHR5cGUuMjA0KQo8YnI+CkZvb3Rub3RlIDIwNDogUmVxdWlyZWQgYnkgTElBLTEuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+SXQncyBub3QgY2xlYXIgd2hhdCBpcyBtZWFudCBieSAiaXMgaW1wbGVtZW50ZWQiIGhlcmUuPC9wPgoKPHA+CkluIHRoZSBjb250ZXh0IG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgaXQgc2VlbXMgcmVhc29uYWJsZSB0byBleHBlY3QKdG8gYmUgYWJsZSB0byB1c2UgdHJhcHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiAic2FmZWx5IiB1c2UKaW5maW5pdHkoKSwgcXVpZXRfTmFOKCksIGV0Yy4sIGluIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMsIHRoYXQgaXMKd2l0aG91dCBjYXVzaW5nIGEgdHJhcCAoaS5lLiwgb24gVU5JWCB3aXRob3V0IGhhdmluZyB0byB3b3JyeSBhYm91dApnZXR0aW5nIGEgc2lnbmFsKS4gV2hlbiB0cmFwcyBpcyB0cnVlLCBJIHdvdWxkIGV4cGVjdCBhbnkgb2YgdGhlCm9wZXJhdGlvbnMgaW4gc2VjdGlvbiA3IG9mIElFRUUgNzU0IHRvIGNhdXNlIGEgdHJhcCAoYW5kIG15IHByb2dyYW0KdG8gZ2V0IGEgU0lHRlBFKS4gU28sIGZvciBleGFtcGxlLCBvbiBBbHBoYSwgSSB3b3VsZCBleHBlY3QgdHJhcHMKdG8gYmUgdHJ1ZSBieSBkZWZhdWx0ICh1bmxlc3MgSSBjb21waWxlZCBteSBwcm9ncmFtIHdpdGggdGhlIC1pZWVlCm9wdGlvbiksIGZhbHNlIGJ5IGRlZmF1bHQgb24gbW9zdCBvdGhlciBwb3B1bGFyIGFyY2hpdGVjdHVyZXMsCmluY2x1ZGluZyBJQTY0LCBNSVBTLCBQQS1SSVNDLCBQUEMsIFNQQVJDLCBhbmQgeDg2IHdoaWNoIHJlcXVpcmUKdHJhcHMgdG8gYmUgZXhwbGljaXRseSBlbmFibGVkIGJ5IHRoZSBwcm9ncmFtLgo8L3A+Cgo8cD4KQW5vdGhlciBwb3NzaWJsZSBpbnRlcnByZXRhdGlvbiBvZiBwNTkgaXMgdGhhdCB0cmFwcyBzaG91bGQgYmUgdHJ1ZQpvbiBhbnkgaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB0cmFwcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleQphcmUgZW5hYmxlZCBieSBkZWZhdWx0IG9yIG5vdC4gSSBkb24ndCB0aGluayBzdWNoIGFuIGludGVycHJldGF0aW9uCm1ha2VzIHRoZSB0cmFwcyBtZW1iZXIgdmVyeSB1c2VmdWwsIGV2ZW4gdGhvdWdoIHRoYXQgaXMgaG93IHRyYXBzIGlzCmltcGxlbWVudGVkIG9uIHNldmVyYWwgcGxhdGZvcm1zLiBJdCBpcyBhbHNvIHRoZSBvbmx5IHdheSB0byBpbXBsZW1lbnQKdHJhcHMgb24gcGxhdGZvcm1zIHRoYXQgYWxsb3cgcHJvZ3JhbXMgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRyYXBwaW5nCmF0IHJ1bnRpbWUuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSBwNTkgdG8gcmVhZDo8L3A+CjxibG9ja3F1b3RlPjxwPlRydWUgaWYsIGF0IHByb2dyYW0gc3RhcnR1cCwgdGhlcmUgZXhpc3RzIGEgdmFsdWUgb2YgdGhlIHR5cGUgdGhhdAogIHdvdWxkIGNhdXNlIGFuIGFyaXRobWV0aWMgb3BlcmF0aW9uIHVzaW5nIHRoYXQgdmFsdWUgdG8gdHJhcC48L3A+PC9ibG9ja3F1b3RlPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KIFJlYWwgaXNzdWUsIHNpbmNlIHRyYXBwaW5nIGNhbiBiZSB0dXJuZWQgb24gYW5kIG9mZi4gVW5jbGVhciB3aGF0IGEKIHN0YXRpYyBxdWVyeSBjYW4gc2F5IGFib3V0IGEgZHluYW1pYyBpc3N1ZS4gVGhlIHJlYWwgYWR2aWNlIHdlIHNob3VsZAogZ2l2ZSB1c2VycyBpcyB0byB1c2UgY2ZlbnYgZm9yIHRoZXNlIHNvcnRzIG9mIHF1ZXJpZXMuIEJ1dCB0aGlzIG5ldwogcHJvcG9zZWQgcmVzb2x1dGlvbiBpcyBhdCBsZWFzdCBjb25zaXN0ZW50IGFuZCBzbGlnaHRseSBiZXR0ZXIgdGhhbgogbm90aGluZy48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTA1Ij48L2E+NTA1LiBSZXN1bHRfdHlwZSBpbiByYW5kb20gZGlzdHJpYnV0aW9uIHJlcXVpcmVtZW50czwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNi40LjEgW3JhbmQucmVxXSwgVFIxIDUuMS4xIFt0ci5yYW5kLnJlcV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gV2FsdGVyIEJyb3duIDxiPkRhdGU6PC9iPiAyMDA1LTA3LTAzPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNyYW5kLnJlcSI+aXNzdWVzPC9hPiBpbiBbcmFuZC5yZXFdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGFibGUgMTc6IFJhbmRvbSBkaXN0cmlidXRpb24gcmVxdWlyZW1lbnRzCjwvcD4KPHA+ClJvdyAxIHJlcXVpcmVzIHRoYXQgZWFjaCByYW5kb20gZGlzdHJpYnV0aW9uIHByb3ZpZGUgYSBuZXN0ZWQgdHlwZSAiaW5wdXRfdHlwZSI7CnRoaXMgdHlwZSBkZW5vdGVzIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZXMgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGNvbnN1bWVzLgo8L3A+CjxwPgpJbnNwZWN0aW9uIG9mIGFsbCBkaXN0cmlidXRpb25zIGluIFt0ci5yYW5kLmRpc3RdIHJldmVhbHMgdGhhdCBlYWNoIGRpc3RyaWJ1dGlvbgpwcm92aWRlcyBhIHNlY29uZCB0eXBlZGVmICgicmVzdWx0X3R5cGUiKSB0aGF0IGRlbm90ZXMgdGhlIHR5cGUgb2YgdGhlIHZhbHVlcyB0aGUKZGlzdHJpYnV0aW9uIHByb2R1Y2VzIHdoZW4gY2FsbGVkLiAgCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJdCBzZWVtcyB0byBtZSB0aGF0IHRoaXMgaXMgYWxzbyBhIHJlcXVpcmVtZW50CmZvciBhbGwgZGlzdHJpYnV0aW9ucyBhbmQgc2hvdWxkIHRoZXJlZm9yZSBiZSAgaW5kaWNhdGVkIGFzIHN1Y2ggdmlhIGEgbmV3IHNlY29uZApyb3cgdG8gdGhpcyB0YWJsZSAxNzoKPC9wPgo8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iNSI+Cjx0Ym9keT48dHI+PHRkPlg6OnJlc3VsdF90eXBlPC90ZD48dGQ+VDwvdGQ+PHRkPi0tLTwvdGQ+PHRkPmNvbXBpbGUtdGltZTwvdGQ+PC90cj4KPC90Ym9keT48L3RhYmxlPgoKPHA+PGk+WwpCZXJsaW46ICBWb3RlZCB0byBXUC4gIE4xOTMyIGFkb3B0cyB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbjogIHNlZSBUYWJsZSA1IHJvdyAxLgpdPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjUwNyI+PC9hPjUwNy4gTWlzc2luZyByZXF1aXJlbWVudCBmb3IgdmFyaWF0ZV9nZW5lcmF0b3I6Om9wZXJhdG9yKCk8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuNCBbcmFuZF0sIFRSMSA1LjEuMyBbdHIucmFuZC52YXJdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFdhbHRlciBCcm93biA8Yj5EYXRlOjwvYj4gMjAwNS0wNy0wMzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjcmFuZCI+aXNzdWVzPC9hPiBpbiBbcmFuZF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpQYXJhZ3JhcGggMTEgb2YgW3RyLnJhbmQudmFyXSBlcXVpcmVzIHRoYXQgdGhlIG1lbWJlciB0ZW1wbGF0ZQo8L3A+CjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKSAoVCB2YWx1ZSk7CjwvcHJlPjwvYmxvY2txdW90ZT4KPHA+CnJldHVybgo8L3A+CjxibG9ja3F1b3RlPjxwcmU+ZGlzdHJpYnV0aW9uKCkoZSwgdmFsdWUpCjwvcHJlPjwvYmxvY2txdW90ZT4KPHA+Ckhvd2V2ZXIsIG5vdCBhbGwgZGlzdHJpYnV0aW9ucyBoYXZlIGFuIG9wZXJhdG9yKCkgd2l0aCBhIGNvcnJlc3BvbmRpbmcgc2lnbmF0dXJlLgo8L3A+Cgo8cD48aT5bCkJlcmxpbjogIEFzIGEgd29ya2luZyBncm91cCB3ZSB2b3RlZCBpbiBmYXZvciBvZiBOMTkzMiB3aGljaCBtYWtlcyB0aGlzIG1vb3Q6CnZhcmlhdGVfZ2VuZXJhdG9yIGhhcyBiZWVuIGVsaW1pbmF0ZWQuICBUaGVuIGluIGZ1bGwgY29tbWl0dGVlIHdlIHZvdGVkIHRvIGdpdmUKdGhpcyBpc3N1ZSBXUCBzdGF0dXMgKG1pc3Rha2VubHkpLgpdPC9pPjwvcD4KCgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CldlIHRoZXJlZm9yZSAgcmVjb21tZW5kIHRoYXQgd2UgaW5zZXJ0IHRoZSBmb2xsb3dpbmcgcHJlY29uZGl0aW9uIGJlZm9yZSBwYXJhZ3JhcGggMTE6CjwvcD4KPGJsb2NrcXVvdGU+PHA+ClByZWNvbmRpdGlvbjogIDx0dD5kaXN0cmlidXRpb24oKS5vcGVyYXRvcigpKGUsdmFsdWUpPC90dD4gaXMgd2VsbC1mb3JtZWQuCjwvcD48L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTA4Ij48L2E+NTA4LiBCYWQgcGFyYW1ldGVycyBmb3IgcmFubHV4NjRfYmFzZV8wMTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNi40LjUgW3JhbmQucHJlZGVmXSwgVFIxIDUuMS41IFt0ci5yYW5kLnByZWRlZl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gV2FsdGVyIEJyb3duIDxiPkRhdGU6PC9iPiAyMDA1LTA3LTAzPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNyYW5kLnByZWRlZiI+aXNzdWVzPC9hPiBpbiBbcmFuZC5wcmVkZWZdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGZpZnRoIG9mIHRoZXNlIGVuZ2luZXMgd2l0aCBwcmVkZWZpbmVkIHBhcmFtZXRlcnMsIHJhbmx1eDY0X2Jhc2VfMDEsCmFwcGVhcnMgdG8gaGF2ZSBhbiB1bmludGVudGlvbmFsIGVycm9yIGZvciB3aGljaCB0aGVyZSBpcyBhIHNpbXBsZSBjb3JyZWN0aW9uLgpUaGUgdHdvIHByZS1kZWZpbmVkICBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxIGVuZ2luZXMgYXJlIGdpdmVuIGFzOiAKPC9wPgo8YmxvY2txdW90ZT48cHJlPnR5cGVkZWYgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSZsdDtmbG9hdCwgIDI0LCAxMCwgMjQmZ3Q7IHJhbmx1eF9iYXNlXzAxOwp0eXBlZGVmIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEmbHQ7ZG91YmxlLCA0OCwgMTAsIDI0Jmd0OyByYW5sdXg2NF9iYXNlXzAxOwo8L3ByZT48L2Jsb2NrcXVvdGU+CjxwPgpXZSBkZW1vbnN0cmF0ZSBiZWxvdyB0aGF0IHJhbmx1eDY0X2Jhc2VfMDEgZmFpbHMgdG8gbWVldCB0aGUgaW50ZW50IG9mIHRoZQpyYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gcHJvcG9zYWwsIGJ1dCB0aGF0IHRoZSBzaW1wbGUgY29ycmVjdGlvbiB0bwo8L3A+CjxibG9ja3F1b3RlPjxwcmU+dHlwZWRlZiBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxJmx0O2RvdWJsZSwgNDgsICA1LCAxMiZndDsgcmFubHV4NjRfYmFzZV8wMTsKPC9wcmU+PC9ibG9ja3F1b3RlPgo8cD4KZG9lcyBtZWV0IHRoZSBpbnRlbnQgb2YgZGVmaW5pbmcgd2VsbC1rbm93biBnb29kIHBhcmFtZXRlcml6YXRpb25zLgo8L3A+CjxwPgpUaGUgcmFubHV4NjRfYmFzZV8wMSBlbmdpbmUgYXMgcHJlc2VudGVkIGZhaWxzIHRvIG1lZXQgdGhlIGludGVudCBmb3IKcHJlZGVmaW5lZCBlbmdpbmVzLCBzdGF0ZWQgaW4gcHJvcG9zYWwgTjEzOTggKHNlY3Rpb24gRSk6CjwvcD4KPGJsb2NrcXVvdGU+PHA+CkluIG9yZGVyIHRvIG1ha2UgZ29vZCByYW5kb20gbnVtYmVycyBhdmFpbGFibGUgdG8gYSBsYXJnZSBudW1iZXIgb2YgbGlicmFyeQp1c2VycywgdGhpcyBwcm9wb3NhbCBub3Qgb25seSBkZWZpbmVzIGdlbmVyaWMgcmFuZG9tLW51bWJlciBlbmdpbmVzLCBidXQgYWxzbwpwcm92aWRlcyBhIG51bWJlciBvZiBwcmVkZWZpbmVkIHdlbGwta25vd24gZ29vZCBwYXJhbWV0ZXJpemF0aW9ucyBmb3IgdGhvc2UuCjwvcD48L2Jsb2NrcXVvdGU+CjxwPgpUaGUgcHJlZGVmaW5lZCByYW5sdXhfYmFzZV8wMSBlbmdpbmUgaGFzIGJlZW4gcHJvdmVuIFsxLDIsM10gdG8gaGF2ZSBhIHZlcnkKbG9uZyBwZXJpb2QgYW5kIHNvIG1lZXRzIHRoaXMgY3JpdGVyaW9uLiAgVGhpcyBwcm9wZXJ0eSBtYWtlcyBpdCBzdWl0YWJsZSBmb3IKdXNlIGluIHRoZSBleGNlbGxlbnQgZGlzY2FyZF9ibG9jayAgZW5naW5lcyBkZWZpbmVkIHN1YnNlcXVlbnRseS4gIFRoZSBwcm9vZgpvZiBsb25nIHBlcmlvZCByZWxpZXMgb24gdGhlIGZhY3QgKHByb3ZlbiBpbiBbMV0pIHRoYXQgMioqKHcqcikgLSAyKioodypzKQorIDEgaXMgcHJpbWUgKHcsIHIsIGFuZCBzIGFyZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIHRvIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEsCmFzIGRlZmluZWQgaW4gW3RyLnJhbmQuZW5nLnN1YjFdKS4KPC9wPgo8cD4KVGhlIHJhbmx1eDY0X2Jhc2VfMDEgZW5naW5lIGFzIHByZXNlbnRlZCBpbiBbdHIucmFuZC5wcmVkZWZdIHVzZXMgdz00OCwgcj0yNCwgcz0xMC4KRm9yIHRoZXNlIG51bWJlcnMsIHRoZSBjb21iaW5hdGlvbiAyKioodypyKS0yKioodypzKSsxIGlzIG5vbi1wcmltZSAodGhvdWdoCmV4cGxpY2l0IGZhY3Rvcml6YXRpb24gIHdvdWxkIGJlIGEgY2hhbGxlbmdlKS4gIEluIGNvbnNlcXVlbmNlLCB3aGlsZSBpdCBpcwpjZXJ0YWlubHkgcG9zc2libGUgZm9yIHNvbWUgc2VlZGluZyBzdGF0ZXMgdGhhdCB0aGlzIGVuZ2luZSB3b3VsZCBoYXZlIGEgdmVyeQpsb25nIHBlcmlvZCwgaXQgaXMgbm90IGF0IGFsbCAid2VsbC1rbm93biIgdGhhdCB0aGlzIGlzIHRoZSBjYXNlLiBUaGUgaW50ZW50CmluIHRoZSBOMTM5OCBwcm9wb3NhbCBpbnZvbHZlZCB0aGUgYmFzZSBvZiB0aGUgcmFubHV4NjQgZW5naW5lLCB3aGljaCBmaW5kcyBoZWF2eQp1c2UgaW4gdGhlIHBoeXNpY3MgY29tbXVuaXR5LiAgVGhpcyBpcyBpc29tb3JwaGljIHRvIHRoZSBwcmVkZWZpbmVkIHJhbmx1eF9iYXNlXzAxLApidXQgZXhwbG9pdHMgdGhlIGFiaWxpdHkgb2YgZG91YmxlIHZhcmlhYmxlcyB0byBob2xkIChhdCBsZWFzdCkgNDggYml0cyBvZiBtYW50aXNzYSwKdG8gZGVsaXZlciA0OCByYW5kb20gYml0cyBhdCBhIHRpbWUgcmF0aGVyIHRoYW4gMjQuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpUbyBhY2hpZXZlIHRoaXMgaW50ZW5kZWQgYmVoYXZpb3IsIHRoZSBjb3JyZWN0IHRlbXBsYXRlIHBhcmFtZXRlcml6dGlvbiAgd291bGQgYmU6CjwvcD4KPGJsb2NrcXVvdGU+PHByZT50eXBlZGVmIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEmbHQ7ZG91YmxlLCA0OCwgNSwgMTImZ3Q7IHJhbmx1eDY0X2Jhc2VfMDE7CjwvcHJlPjwvYmxvY2txdW90ZT4KPHA+ClRoZSBzZXF1ZW5jZSBvZiBtYW50aXNzYSBiaXRzIGRlbGl2ZXJlZCBieSB0aGlzIGlzIGlzb21vcnBoaWMgKHRyZWF0aW5nIGVhY2gKZG91YmxlIGFzIGhhdmluZyB0aGUgIGJpdHMgb2YgdHdvIGZsb2F0cykgdG8gdGhhdCBkZWxpdmVyZWQgYnkgcmFubHV4X2Jhc2VfMDEuCjwvcD4KPHA+CjxiPlJlZmVyZW5jZXM6PC9iPgo8L3A+CjxvbD4KPGxpPkYuIEphbWVzLCBDb21wdXQuIFBoeXMuIENvbW11bi4gNjAoMTk5MCkgMzI5PC9saT4KPGxpPkcuIE1hcnNhZ2xpYSBhbmQgQS4gWmFtYW4sIEFubi4gQXBwbC4gUHJvYiAxKDE5OTEpIDQ2MjwvbGk+CjxsaT5NLiBMdXNjaGVyLCBDb21wdXQuIFBoeXMuIENvbW11bi4gNzkoMTk5NCkgMTAwLTExMDwvbGk+Cjwvb2w+Cgo8cD48aT5bCkJlcmxpbjogVm90ZWQgdG8gV1AuICBOMTkzMiBhZG9wdHMgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaW4gMjYuMy41LApqdXN0IGFib3ZlIHBhcmFncmFwaCA1LgpdPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjUxOCI+PC9hPjUxOC4gQXJlIGluc2VydCBhbmQgZXJhc2Ugc3RhYmxlIGZvciB1bm9yZGVyZWRfbXVsdGlzZXQgYW5kIHVub3JkZXJlZF9tdWx0aW1hcD88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMS41IFt1bm9yZC5yZXFdLCBUUjEgNi4zLjEgW3RyLnVub3JkLnJlcV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAyMDA1LTA3LTAzPC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjdW5vcmQucmVxIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbdW5vcmQucmVxXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3Vub3JkLnJlcSI+aXNzdWVzPC9hPiBpbiBbdW5vcmQucmVxXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+Cklzc3VlIDM3MSBkZWFscyB3aXRoIHN0YWJpbGl0eSBvZiBtdWx0aXNldC9tdWx0aW1hcCB1bmRlciBpbnNlcnQgYW5kIGVyYXNlCihpLmUuIGRvIHRoZXkgcHJlc2VydmUgdGhlIHJlbGF0aXZlIG9yZGVyIGluIHJhbmdlcyBvZiBlcXVhbCBlbGVtZW50cykuClRoZSBzYW1lIGlzc3VlIGFwcGxpZXMgdG8gdW5vcmRlcmVkX211bHRpc2V0IGFuZCB1bm9yZGVyZWRfbXVsdGltYXAuCjwvcD4KPHA+PGk+WwpNb3ZlZCB0byBvcGVuIChmcm9tIHJldmlldyk6ICBUaGVyZSBpcyBubyByZXNvbHV0aW9uLgpdPC9pPjwvcD4KCgo8cD48aT5bClRvcm9udG86ICBXZSBoYXZlIGEgcmVzb2x1dGlvbiBub3cuICBNb3ZlZCB0byBSZXZpZXcuICBTb21lIGNvbmNlcm4gd2FzIG5vdGVkCmFzIHRvIHdoZXRoZXIgdGhpcyBjb25mbGljdGVkIHdpdGggZXhpc3RpbmcgcHJhY3RpY2Ugb3Igbm90LiAgQW4gYWRkaXRpb25hbApjb25jZXJuIHdhcyBpbiBzcGVjaWZ5aW5nIChwYXJ0aWFsKSBvcmRlcmluZyBmb3IgYW4gdW5vcmRlcmVkIGNvbnRhaW5lci4KXTwvaT48L3A+CgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpXb3JkaW5nIGZvciB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBpcyB0YWtlbiBmcm9tIHRoZSBlcXVpdmFsZW50IHRleHQgZm9yIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMuCjwvcD4KCjxwPgpDaGFuZ2UgMjMuMS41IFt1bm9yZC5yZXFdLCBVbm9yZGVyZWQgYXNzb2NpYXRpdmUgY29udGFpbmVycywgcGFyYWdyYXBoIDYgdG86CjwvcD4KCjxibG9ja3F1b3RlPjxwPgpBbiB1bm9yZGVyZWQgYXNzb2NpYXRpdmUgY29udGFpbmVyIHN1cHBvcnRzIDxpPnVuaXF1ZTwvaT4ga2V5cyBpZiBpdCBtYXkgCmNvbnRhaW4gYXQgbW9zdCBvbmUgZWxlbWVudCBmb3IgZWFjaCBrZXkuIE90aGVyd2lzZSwgaXQgc3VwcG9ydHMgPGk+ZXF1aXZhbGVudCAKa2V5czwvaT4uIDx0dD51bm9yZGVyZWRfc2V0PC90dD4gYW5kIDx0dD51bm9yZGVyZWRfbWFwPC90dD4gc3VwcG9ydCAKdW5pcXVlIGtleXMuIDx0dD51bm9yZGVyZWRfbXVsdGlzZXQ8L3R0PiBhbmQgPHR0PnVub3JkZXJlZF9tdWx0aW1hcDwvdHQ+IApzdXBwb3J0IGVxdWl2YWxlbnQga2V5cy4gSW4gY29udGFpbmVycyB0aGF0IHN1cHBvcnQgZXF1aXZhbGVudCBrZXlzLCBlbGVtZW50cyAKd2l0aCBlcXVpdmFsZW50IGtleXMgYXJlIGFkamFjZW50IHRvIGVhY2ggb3RoZXIuIDxpbnM+Rm9yCjx0dD51bm9yZGVyZWRfbXVsdGlzZXQ8L3R0PiAKYW5kIDx0dD51bm9yZGVyZWRfbXVsdGltYXA8L3R0Piw8dHQ+IGluc2VydDwvdHQ+IGFuZCA8dHQ+ZXJhc2U8L3R0PiAKcHJlc2VydmUgdGhlIHJlbGF0aXZlIG9yZGVyaW5nIG9mIGVxdWl2YWxlbnQgZWxlbWVudHMuPC9pbnM+CjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDIzLjEuNSBbdW5vcmQucmVxXSwgVW5vcmRlcmVkIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMsIHBhcmFncmFwaCA4IHRvOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+VGhlIGVsZW1lbnRzIG9mIGFuIHVub3JkZXJlZCBhc3NvY2lhdGl2ZSBjb250YWluZXIgYXJlIG9yZ2FuaXplZCBpbnRvIDxpPgpidWNrZXRzPC9pPi4gS2V5cyB3aXRoIHRoZSBzYW1lIGhhc2ggY29kZSBhcHBlYXIgaW4gdGhlIHNhbWUgYnVja2V0LiBUaGUgbnVtYmVyIApvZiBidWNrZXRzIGlzIGF1dG9tYXRpY2FsbHkgaW5jcmVhc2VkIGFzIGVsZW1lbnRzIGFyZSBhZGRlZCB0byBhbiB1bm9yZGVyZWQgCmFzc29jaWF0aXZlIGNvbnRhaW5lciwgc28gdGhhdCB0aGUgYXZlcmFnZSBudW1iZXIgb2YgZWxlbWVudHMgcGVyIGJ1Y2tldCBpcyBrZXB0IApiZWxvdyBhIGJvdW5kLiBSZWhhc2hpbmcgaW52YWxpZGF0ZXMgaXRlcmF0b3JzLCBjaGFuZ2VzIG9yZGVyaW5nIGJldHdlZW4gCmVsZW1lbnRzLCBhbmQgY2hhbmdlcyB3aGljaCBidWNrZXRzIGVsZW1lbnRzIGFwcGVhciBpbiwgYnV0IGRvZXMgbm90IGludmFsaWRhdGUgCnBvaW50ZXJzIG9yIHJlZmVyZW5jZXMgdG8gZWxlbWVudHMuIDxpbnM+Rm9yIDx0dD51bm9yZGVyZWRfbXVsdGlzZXQ8L3R0PiAKYW5kIDx0dD51bm9yZGVyZWRfbXVsdGltYXA8L3R0PiwgcmVoYXNoaW5nIApwcmVzZXJ2ZXMgdGhlIHJlbGF0aXZlIG9yZGVyaW5nIG9mIGVxdWl2YWxlbnQgZWxlbWVudHMuPC9pbnM+PC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjUxOSI+PC9hPjUxOS4gRGF0YSgpIHVuZG9jdW1lbnRlZDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4yLjEgW2FycmF5XSwgVFIxIDYuMi4yIFt0ci5hcnJheS5hcnJheV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gUGV0ZSBCZWNrZXIgPGI+RGF0ZTo8L2I+IDIwMDUtMDctMDM8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNhcnJheSI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW2FycmF5XS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2FycmF5Ij5pc3N1ZXM8L2E+IGluIFthcnJheV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgo8dHQ+YXJyYXkmbHQ7Jmd0Ozo6ZGF0YSgpPC90dD4gaXMgcHJlc2VudCBpbiB0aGUgY2xhc3Mgc3lub3BzaXMsIGJ1dCBub3QgZG9jdW1lbnRlZC4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkZCBhIG5ldyBzZWN0aW9uLCBhZnRlciA2LjIuMi4zOgo8L3A+CjxibG9ja3F1b3RlPjxwcmU+VCogICAgICAgZGF0YSgpCmNvbnN0IFQqIGRhdGEoKSBjb25zdDsKPC9wcmU+PC9ibG9ja3F1b3RlPgo8cD4KPGI+UmV0dXJuczo8L2I+IDx0dD5lbGVtczwvdHQ+Lgo8L3A+CjxwPgpDaGFuZ2UgNi4yLjIuNC8yIHRvOgo8L3A+CjxibG9ja3F1b3RlPjxwPgpJbiB0aGUgY2FzZSB3aGVyZSA8dHQ+TiA9PSAwPC90dD4sIDx0dD5iZWdpbigpID09IGVuZCgpPC90dD4uIFRoZSByZXR1cm4gdmFsdWUKb2YgPHR0PmRhdGEoKTwvdHQ+IGlzIHVuc3BlY2lmaWVkLgo8L3A+PC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjUyMCI+PC9hPjUyMC4gUmVzdWx0X29mIGFuZCBwb2ludGVycyB0byBkYXRhIG1lbWJlcnM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAuNi4xMS4xIFtmdW5jLmJpbmRdLCBUUjEgMy42IFt0ci5mdW5jLmJpbmRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFBldGUgQmVja2VyIDxiPkRhdGU6PC9iPiAyMDA1LTA3LTAzPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJbiB0aGUgb3JpZ2luYWwgcHJvcG9zYWwgZm9yIGJpbmRlcnMsIHRoZSByZXR1cm4gdHlwZSBvZiBiaW5kKCkgd2hlbgpjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gbWVtYmVyIGRhdGEgYXMgaXQncyBjYWxsYWJsZSBvYmplY3Qgd2FzCmRlZmluZWQgdG8gYmUgbWVtX2ZuKHB0cik7IHdoZW4gUGV0ZXIgRGltb3YgYW5kIEkgIHVuaWZpZWQgdGhlCmRlc2NyaXB0aW9ucyBvZiB0aGUgVFIxIGZ1bmN0aW9uIG9iamVjdHMgd2UgaG9pc3RlZCB0aGUgZGVzY3JpcHRpb25zCm9mIHJldHVybiB0eXBlcyBpbnRvIHRoZSBJTlZPS0UgcHNldWRvLWZ1bmN0aW9uIGFuZCBpbnRvIHJlc3VsdF9vZi4KVW5mb3J0dW5hdGVseSwgd2UgbGVmdCBwb2ludGVyIHRvIG1lbWJlciBkYXRhIG91dCBvZiByZXN1bHRfb2YsIHNvCmJpbmQgZG9lc24ndCBoYXZlIGFueSBzcGVjaWZpZWQgYmVoYXZpb3Igd2hlbiBjYWxsZWQgd2l0aCBhIHBvaW50ZXIKdG8gIG1lbWJlciBkYXRhLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD48aT5bClBldGUgYW5kIFBldGVyIHdpbGwgcHJvdmlkZSB3b3JkaW5nLgpdPC9pPjwvcD4KCgo8cD4KSW4gMjAuNS40IFtsaWIuZnVuYy5yZXRdIChbdHIuZnVuYy5yZXRdKSBwMyBhZGQgdGhlIGZvbGxvd2luZyBidWxsZXQgYWZ0ZXIgYnVsbGV0IDI6CjwvcD4KPG9sIHN0YXJ0PSIzIj4KPGxpPklmIDx0dD5GPC90dD4gaXMgYSBtZW1iZXIgZGF0YSBwb2ludGVyIHR5cGUgPHR0PlIgVDo6KjwvdHQ+LCA8dHQ+dHlwZTwvdHQ+CnNoYWxsIGJlIDx0dD48aT5jdjwvaT4gUiZhbXA7PC90dD4gd2hlbiA8dHQ+VDE8L3R0PiBpcyA8dHQ+PGk+Y3Y8L2k+IFUxJmFtcDs8L3R0PiwKPHR0PlI8L3R0PiBvdGhlcndpc2UuPC9saT4KPC9vbD4KCjxwPjxpPlsKUGV0ZXIgcHJvdmlkZWQgd29yZGluZy4KXTwvaT48L3A+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI1MjEiPjwvYT41MjEuIEdhcmJsZWQgcmVxdWlyZW1lbnRzIGZvciBhcmd1bWVudF90eXBlIGluIHJlZmVyZW5jZV93cmFwcGVyPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjYuNSBbcmVmd3JhcF0sIFRSMSAyLjEuMiBbdHIudXRpbC5yZWZ3cnAucmVmd3JwXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBQZXRlIEJlY2tlciA8Yj5EYXRlOjwvYj4gMjAwNS0wNy0wMzwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KMi4xLjIvMywgc2Vjb25kIGJ1bGxldCBpdGVtIGN1cnJlbnRseSBzYXlzIHRoYXQgcmVmZXJlbmNlX3dyYXBwZXImbHQ7VCZndDsgaXMKZGVyaXZlZCBmcm9tIHVuYXJ5X2Z1bmN0aW9uJmx0O1QsIFImZ3Q7IGlmIFQgaXM6CjwvcD4KPGJsb2NrcXVvdGU+PHA+CmEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSB3aXRoIGN2LXF1YWxpZmllciBjdiBhbmQgbm8gYXJndW1lbnRzOwp0aGUgdHlwZSBUMSBpcyBjdiBUKiBhbmQgUiBpcyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uOwo8L3A+PC9ibG9ja3F1b3RlPgo8cD4KVGhlIHR5cGUgb2YgVDEgY2FuJ3QgYmUgY3YgVCosICdjYXVzZSB0aGF0J3MgYSBwb2ludGVyIHRvIGEgcG9pbnRlciB0byBtZW1iZXIKZnVuY3Rpb24uIEl0IHNob3VsZCBiZSBhIHBvaW50ZXIgdG8gdGhlIGNsYXNzIHRoYXQgVCBpcyBhIHBvaW50ZXIgdG8gbWVtYmVyIG9mLgpMaWtlIHRoaXM6CjwvcD4KPGJsb2NrcXVvdGU+PHA+CmEgcG9pbnRlciB0byBhIG1lbWJlciBmdW5jdGlvbiBSIFQwOjpmKCkgY3YgKHdoZXJlIGN2IHJlcHJlc2VudHMgdGhlIG1lbWJlcgpmdW5jdGlvbidzIGN2LXF1YWxpZmllcnMpOyB0aGUgdHlwZSBUMSBpcyBjdiBUMCoKPC9wPjwvYmxvY2txdW90ZT4KPHA+ClNpbWlsYXJseSwgYnVsbGV0IGl0ZW0gMiBpbiAyLjEuMi80IHNob3VsZCBiZToKPC9wPgo8YmxvY2txdW90ZT48cD4KYSBwb2ludGVyIHRvIGEgbWVtYmVyIGZ1bmN0aW9uIFIgVDA6OmYoVDIpIGN2ICh3aGVyZSBjdiByZXByZXNlbnRzIHRoZSBtZW1iZXIKZnVuY3Rpb24ncyBjdi1xdWFsaWZpZXJzKTsgdGhlIHR5cGUgVDEgaXMgY3YgVDAqCjwvcD48L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+CkNoYW5nZSBidWxsZXQgaXRlbSAyIGluIDIuMS4yLzM6CjwvcD4KCjxibG9ja3F1b3RlPgo8dWw+CjxsaT4KYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiA8ZGVsPnR5cGUgd2l0aCBjdi1xdWFsaWZpZXIgPHR0PjxpPmN2PC9pPjwvdHQ+IGFuZCBubyBhcmd1bWVudHM7CnRoZSB0eXBlIDx0dD5UMTwvdHQ+IGlzIDx0dD48aT5jdjwvaT4gVCo8L3R0PiBhbmQgPHR0PlI8L3R0PiBpcyB0aGUgcmV0dXJuIAp0eXBlIG9mIHRoZSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbjwvZGVsPiA8aW5zPjx0dD5SIFQwOjpmKCkgPGk+Y3Y8L2k+PC90dD4KKHdoZXJlIDx0dD48aT5jdjwvaT48L3R0PiByZXByZXNlbnRzIHRoZSBtZW1iZXIgZnVuY3Rpb24ncyBjdi1xdWFsaWZpZXJzKTsKdGhlIHR5cGUgPHR0PlQxPC90dD4gaXMgPHR0PjxpPmN2PC9pPiBUMCo8L3R0PjwvaW5zPgo8L2xpPgo8L3VsPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIGJ1bGxldCBpdGVtIDIgaW4gMi4xLjIvNDoKPC9wPgoKPGJsb2NrcXVvdGU+Cjx1bD4KPGxpPgphIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIDxkZWw+d2l0aCBjdi1xdWFsaWZpZXIgPHR0PjxpPmN2PC9pPjwvdHQ+IGFuZCB0YWtpbmcgb25lIGFyZ3VtZW50Cm9mIHR5cGUgPHR0PlQyPC90dD47IHRoZSB0eXBlIDx0dD5UMTwvdHQ+IGlzIDx0dD48aT5jdjwvaT4gVCo8L3R0PiBhbmQgCjx0dD5SPC90dD4gaXMgdGhlIHJldHVybiB0eXBlIG9mIHRoZSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbjwvZGVsPgo8aW5zPjx0dD5SIFQwOjpmKFQyKSA8aT5jdjwvaT48L3R0PiAod2hlcmUgPHR0PjxpPmN2PC9pPjwvdHQ+IHJlcHJlc2VudHMgdGhlIG1lbWJlcgpmdW5jdGlvbidzIGN2LXF1YWxpZmllcnMpOyB0aGUgdHlwZSA8dHQ+VDE8L3R0PiBpcyA8dHQ+PGk+Y3Y8L2k+IFQwKjwvdHQ+PC9pbnM+CjwvbGk+CjwvdWw+CjwvYmxvY2txdW90ZT4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTI0Ij48L2E+NTI0LiByZWdleCBuYW1lZCBjaGFyYWN0ZXIgY2xhc3NlcyBhbmQgY2FzZS1pbnNlbnNpdGl2aXR5IGRvbid0IG1peDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyOCBbcmVdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEVyaWMgTmllYmxlciA8Yj5EYXRlOjwvYj4gMjAwNS0wNy0wMTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjcmUiPmlzc3VlczwvYT4gaW4gW3JlXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoaXMgZGVmZWN0IGlzIGFsc28gYmVpbmcgZGlzY3Vzc2VkIG9uIHRoZSBCb29zdCBkZXZlbG9wZXJzIGxpc3QuIFRoZSAKZnVsbCBkaXNjdXNzaW9uIGNhbiBiZSBmb3VuZCBoZXJlOgpodHRwOi8vbGlzdHMuYm9vc3Qub3JnL2Jvb3N0LzIwMDUvMDcvMjk1NDYucGhwCjwvcD4KPHA+Ci0tIEJlZ2luIG9yaWdpbmFsIG1lc3NhZ2UgLS0KPC9wPgo8cD4KQWxzbywgSSBtYXkgaGF2ZSBmb3VuZCBhbm90aGVyIGlzc3VlLCBjbG9zZWx5IHJlbGF0ZWQgdG8gdGhlIG9uZSB1bmRlcgpkaXNjdXNzaW9uLiBJdCByZWdhcmRzIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmcgb2YgbmFtZWQgY2hhcmFjdGVyCmNsYXNzZXMuIFRoZSByZWdleF90cmFpdHMmbHQ7Jmd0OyBwcm92aWRlcyB0d28gZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGgKbmFtZWQgY2hhciBjbGFzc2VzOiBsb29rdXBfY2xhc3NuYW1lIGFuZCBpc2N0eXBlLiBUbyBtYXRjaCBhIGNoYXIgY2xhc3MKc3VjaCBhcyBbWzphbHBoYTpdXSwgeW91IHBhc3MgImFscGhhIiB0byBsb29rdXBfY2xhc3NuYW1lIGFuZCBnZXQgYQpiaXRtYXNrLiBMYXRlciwgeW91IHBhc3MgYSBjaGFyIGFuZCB0aGUgYml0bWFzayB0byBpc2N0eXBlIGFuZCBnZXQgYQpib29sIHllcy9ubyBhbnN3ZXIuCjwvcD4KPHA+CkJ1dCBob3cgZG9lcyBjYXNlLWluc2Vuc2l0aXZpdHkgd29yayBpbiB0aGlzIHNjZW5hcmlvPyBTdXBwb3NlIHdlJ3JlCmRvaW5nIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBvbiBbWzpsb3dlcjpdXS4gSXQgc2hvdWxkIGJlaGF2ZSBhcyBpZiBpdAp3ZXJlIFtbOmxvd2VyOl1bOnVwcGVyOl1dLCByaWdodD8gQnV0IHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBlbm91Z2gKc21hcnRzIGluIHRoZSByZWdleF90cmFpdHMgaW50ZXJmYWNlIHRvIGRvIHRoaXMuCjwvcD4KPHA+CkltYWdpbmUgSSB3cml0ZSBhIHRyYWl0cyBjbGFzcyB3aGljaCByZWNvZ25pemVzIFtbOmZ1YmFyOl1dLCBhbmQgdGhlCiJmdWJhciIgY2hhciBjbGFzcyBoYXBwZW5zIHRvIGJlIGNhc2Utc2Vuc2l0aXZlLiBIb3cgaXMgdGhlIHJlZ2V4IGVuZ2luZQp0byBrbm93IHRoYXQ/IEFuZCBob3cgc2hvdWxkIGl0IGRvIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBvZiBhCmNoYXJhY3RlciBhZ2FpbnN0IHRoZSBbWzpmdWJhcjpdXSBjaGFyIGNsYXNzPyBKb2huLCBjYW4geW91IGNvbmZpcm0gdGhpcwppcyBhIGxlZ2l0aW1hdGUgcHJvYmxlbT8KPC9wPgo8cD4KSSBzZWUgdHdvIG9wdGlvbnM6CjwvcD4KPHA+CjEpIEFkZCBhIGJvb2wgaWNhc2UgcGFyYW1ldGVyIHRvIGxvb2t1cF9jbGFzc25hbWUuIFRoZW4sCmxvb2t1cF9jbGFzc25hbWUoICJ1cHBlciIsIHRydWUgKSB3aWxsIGtub3cgdG8gcmV0dXJuIGxvd2VyfHVwcGVyCmluc3RlYWQgb2YganVzdCB1cHBlci4KPC9wPgo8cD4KMikgQWRkIGEgaXNjdHlwZV9ub2Nhc2UgZnVuY3Rpb24KPC9wPgo8cD4KSSBwcmVmZXIgKDEpIGJlY2F1c2UgdGhlIGV4dHJhIGNvbXB1dGF0aW9uIGhhcHBlbnMgYXQgdGhlIHRpbWUgdGhlCnBhdHRlcm4gaXMgY29tcGlsZWQgcmF0aGVyIHRoYW4gd2hlbiBpdCBpcyBleGVjdXRlZC4KPC9wPgo8cD4KLS0gRW5kIG9yaWdpbmFsIG1lc3NhZ2UgLS0KPC9wPgoKPHA+CkZvciB3aGF0IGl0J3Mgd29ydGgsIEpvaG4gaGFzIGFsc28gZXhwcmVzc2VkIGhpcyBwcmVmZXJlbmNlIGZvciBvcHRpb24gCigxKSBhYm92ZS4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkb3B0IHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGluCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjI0MDkucGRmIj5OMjQwOTwvYT4uCjwvcD4KCgo8cD48aT5bCktvbmEgKDIwMDcpOiBUaGUgTFdHIGFkb3B0ZWQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gb2YgTjI0MDkgZm9yIHRoaXMgaXNzdWUuClRoZSBMV0cgdm90ZWQgdG8gYWNjZWxlcmF0ZSB0aGlzIGlzc3VlIHRvIFJlYWR5IHN0YXR1cyB0byBiZSB2b3RlZCBpbnRvIHRoZSBXUCBhdCBLb25hLgpdPC9pPjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI1MjciPjwvYT41MjcuIHRyMTo6YmluZCBoYXMgbG9zdCBpdHMgVGhyb3dzIGNsYXVzZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMC42LjExLjEuMyBbZnVuYy5iaW5kLmJpbmRdLCBUUjEgMy42LjMgW3RyLmZ1bmMuYmluZC5iaW5kXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBQZXRlciBEaW1vdiA8Yj5EYXRlOjwvYj4gMjAwNS0xMC0wMTwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI2Z1bmMuYmluZC5iaW5kIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbZnVuYy5iaW5kLmJpbmRdLjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjZnVuYy5iaW5kLmJpbmQiPmlzc3VlczwvYT4gaW4gW2Z1bmMuYmluZC5iaW5kXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBvcmlnaW5hbCBiaW5kIHByb3Bvc2FsIGdpdmVzIHRoZSBndWFyYW50ZWUgdGhhdCB0cjE6OmJpbmQoZiwgdDEsCi4uLiwgdE4pIGRvZXMgbm90IHRocm93IHdoZW4gdGhlIGNvcHkgY29uc3RydWN0b3JzIG9mIGYsIHQxLCAuLi4sIHROCmRvbid0Lgo8L3A+Cgo8cD4KVGhpcyBndWFyYW50ZWUgaXMgbm90IHByZXNlbnQgaW4gdGhlIGZpbmFsIHZlcnNpb24gb2YgVFIxLgo8L3A+Cgo8cD4KSSdtIHByZXR0eSBjZXJ0YWluIHRoYXQgd2UgbmV2ZXIgcmVtb3ZlZCBpdCBvbiBwdXJwb3NlLiBFZGl0b3JpYWwgb21pc3Npb24/IDotKQo8L3A+Cgo8cD48aT5bCkJlcmxpbjogbm90IHF1aXRlIGVkaXRvcmlhbCwgbmVlZHMgcHJvcG9zZWQgd29yZGluZy4KXTwvaT48L3A+Cgo8cD48aT5bCkJhdGF2aWE6ICBEb3VnIHRvIHRyYW5zbGF0ZSB3b3JkaW5nIHRvIHZhcmlhZGljIHRlbXBsYXRlcy4KXTwvaT48L3A+CgoKPHA+PGk+WwpUb3JvbnRvOiAgV2UgYWdyZWUgYnV0IGFyZW4ndCBxdWl0ZSBoYXBweSB3aXRoIHRoZSB3b3JkaW5nLiAgVGhlICJ0IidzIG5vCmxvbmdlciByZWZlciB0byBhbnl0aGluZy4gIEFsYW4gdG8gcHJvdmlkZSBpbXByb3ZlZCB3b3JkaW5nLgpdPC9pPjwvcD4KCgoKPHA+PGk+WwpQcmUtQmVsbGV2dWU6ICBBbGlzZGFpciBwcm92aWRlZCB3b3JkaW5nLgpdPC9pPjwvcD4KCgo8cD4KVFIxIHByb3Bvc2VkIHJlc29sdXRpb246CjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KSW4gVFIxIDMuNi4zIFt0ci5mdW5jLmJpbmQuYmluZF0sIGFkZCBhIG5ldyBwYXJhZ3JhcGggYWZ0ZXIgcDI6CjwvcD4KPGJsb2NrcXVvdGU+PHA+CjxpPlRocm93czo8L2k+IE5vdGhpbmcgdW5sZXNzIG9uZSBvZiB0aGUgY29weSBjb25zdHJ1Y3RvcnMgb2YgPHR0PmYsIHQxLCB0MiwgLi4uLCB0TjwvdHQ+CnRocm93cyBhbiBleGNlcHRpb24uCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4KQWRkIGEgbmV3IHBhcmFncmFwaCBhZnRlciBwNDoKPC9wPgo8YmxvY2txdW90ZT48cD4KPGk+VGhyb3dzOjwvaT4gbm90aGluZyB1bmxlc3Mgb25lIG9mIHRoZSBjb3B5IGNvbnN0cnVjdG9ycyBvZiA8dHQ+ZiwgdDEsIHQyLCAuLi4sIHROPC90dD4KdGhyb3dzIGFuIGV4Y2VwdGlvbi4KPC9wPjwvYmxvY2txdW90ZT4KCjwvYmxvY2txdW90ZT4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjAuNi4xMS4xLjMgW2Z1bmMuYmluZC5iaW5kXSwgYWRkIGEgbmV3IHBhcmFncmFwaCBhZnRlciBwMjoKPC9wPgoKPGJsb2NrcXVvdGU+CjxpPlRocm93czo8L2k+IE5vdGhpbmcgdW5sZXNzIHRoZSBjb3B5IGNvbnN0cnVjdG9yIG9mIDx0dD5GPC90dD4gb3Igb2Ygb25lIG9mIHRoZSB0eXBlcwppbiB0aGUgPHR0PkJvdW5kQXJncy4uLjwvdHQ+IHBhY2sgZXhwYW5zaW9uIHRocm93cyBhbiBleGNlcHRpb24uIAo8L2Jsb2NrcXVvdGU+Cgo8cD4KSW4gMjAuNi4xMS4xLjMgW2Z1bmMuYmluZC5iaW5kXSwgYWRkIGEgbmV3IHBhcmFncmFwaCBhZnRlciBwNDoKPC9wPgoKPGJsb2NrcXVvdGU+CjxpPlRocm93czo8L2k+IE5vdGhpbmcgdW5sZXNzIHRoZSBjb3B5IGNvbnN0cnVjdG9yIG9mIDx0dD5GPC90dD4gb3Igb2Ygb25lIG9mIHRoZSB0eXBlcwppbiB0aGUgPHR0PkJvdW5kQXJncy4uLjwvdHQ+IHBhY2sgZXhwYW5zaW9uIHRocm93cyBhbiBleGNlcHRpb24uIAo8L2Jsb2NrcXVvdGU+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjUzMCI+PC9hPjUzMC4gTXVzdCBlbGVtZW50cyBvZiBhIHN0cmluZyBiZSBjb250aWd1b3VzPzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMS4zIFtiYXNpYy5zdHJpbmddIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMjAwNS0xMS0xNTwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI2Jhc2ljLnN0cmluZyI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW2Jhc2ljLnN0cmluZ10uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNiYXNpYy5zdHJpbmciPmlzc3VlczwvYT4gaW4gW2Jhc2ljLnN0cmluZ10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPklzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2OSI+Njk8L2E+LCB3aGljaCB3YXMgaW5jb3Jwb3JhdGVkIGludG8gQysrMDMsIG1hbmRhdGVkCiAgIHRoYXQgdGhlIGVsZW1lbnRzIG9mIGEgdmVjdG9yIG11c3QgYmUgc3RvcmVkIGluIGNvbnRpZ3VvdXMgbWVtb3J5LgogICBTaG91bGQgdGhlIHNhbWUgYWxzbyBhcHBseSB0byA8dHQ+YmFzaWNfc3RyaW5nPC90dD4/PC9wPgoKPHA+V2UgYWxtb3N0IHJlcXVpcmUgY29udGlndWl0eSBhbHJlYWR5LiBDbGF1c2UgMjMuMy40IFttdWx0aXNldF0KICBkZWZpbmVzIDx0dD5vcGVyYXRvcltdPC90dD4gYXMgPHR0PmRhdGEoKVtwb3NdPC90dD4uIFdoYXQncyBtaXNzaW5nCiAgaXMgYSBzaW1pbGFyIGd1YXJhbnRlZSBpZiB3ZSBhY2Nlc3MgdGhlIHN0cmluZydzIGVsZW1lbnRzIHZpYSB0aGUKICBpdGVyYXRvciBpbnRlcmZhY2UuPC9wPgoKPHA+R2l2ZW4gdGhlIGV4aXN0ZW5jZSBvZiA8dHQ+ZGF0YSgpPC90dD4sIGFuZCB0aGUgZGVmaW5pdGlvbiBvZgogIDx0dD5vcGVyYXRvcltdPC90dD4gYW5kIDx0dD5hdDwvdHQ+IGluIHRlcm1zIG9mIDx0dD5kYXRhPC90dD4sCiAgSSBkb24ndCBiZWxpZXZlIGl0J3MgcG9zc2libGUgdG8gd3JpdGUgYSB1c2VmdWwgYW5kIHN0YW5kYXJkLQogIGNvbmZvcm1pbmcgPHR0PmJhc2ljX3N0cmluZzwvdHQ+IHRoYXQgaXNuJ3QgY29udGlndW91cy4gSSdtIG5vdAogIGF3YXJlIG9mIGFueSBub24tY29udGlndW91cyBpbXBsZW1lbnRhdGlvbi4gV2Ugc2hvdWxkIGp1c3QgcmVxdWlyZQogIGl0Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgdGhlIGZvbGxvd2luZyB0ZXh0IHRvIHRoZSBlbmQgb2YgMjEuMyBbYmFzaWMuc3RyaW5nXSwKcGFyYWdyYXBoIDIuIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPlRoZSBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nIGFyZSBzdG9yZWQgY29udGlndW91c2x5LCBtZWFuaW5nIHRoYXQgaWYKICA8dHQ+czwvdHQ+IGlzIGEgPHR0PmJhc2ljX3N0cmluZyZsdDtjaGFyVCwgQWxsb2NhdG9yJmd0OzwvdHQ+LCB0aGVuCiAgaXQgb2JleXMgdGhlIGlkZW50aXR5CiAgPHR0PiZhbXA7KihzLmJlZ2luKCkgKyBuKSA9PSAmYW1wOypzLmJlZ2luKCkgKyBuPC90dD4KICBmb3IgYWxsIDx0dD4wICZsdDs9IG4gJmx0OyBzLnNpemUoKTwvdHQ+LgogIDwvcD4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KTm90IHN0YW5kYXJkaXppbmcgdGhpcyBleGlzdGluZyBwcmFjdGljZSBkb2VzIG5vdCBnaXZlIGltcGxlbWVudG9ycyBtb3JlCmZyZWVkb20uICBXZSB0aG91Z2h0IGl0IG1pZ2h0IGEgZGVjYWRlIGFnby4gIEJ1dCB0aGUgdmVuZG9ycyBoYXZlIHNwb2tlbgpib3RoIHdpdGggdGhlaXIgaW1wbGVtZW50YXRpb25zLCBhbmQgd2l0aCB0aGVpciB2b2ljZSBhdCB0aGUgTFdHCm1lZXRpbmdzLiAgVGhlIGltcGxlbWVudGF0aW9ucyBhcmUgZ29pbmcgdG8gYmUgY29udGlndW91cyBubyBtYXR0ZXIgd2hhdAp0aGUgc3RhbmRhcmQgc2F5cy4gIFNvIHRoZSBzdGFuZGFyZCBtaWdodCBhcyB3ZWxsIGdpdmUgc3RyaW5nIGNsaWVudHMKbW9yZSBkZXNpZ24gY2hvaWNlcy4KPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjUzMSI+PC9hPjUzMS4gYXJyYXkgZm9ybXMgb2YgdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb25zPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjYuMS4zIFtpc3RyZWFtLnVuZm9ybWF0dGVkXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDUtMTEtMjM8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lzdHJlYW0udW5mb3JtYXR0ZWQiPmlzc3VlczwvYT4gaW4gW2lzdHJlYW0udW5mb3JtYXR0ZWRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGFycmF5IGZvcm1zIG9mIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucyBkb24ndCBzZWVtIHRvIGhhdmUgd2VsbC1kZWZpbmVkCnNlbWFudGljcyBmb3IgemVyby1lbGVtZW50IGFycmF5cyBpbiBhIGNvdXBsZSBvZiBjYXNlcy4gVGhlIGFmZmVjdGVkIG9uZXMKKDx0dD5pc3RyZWFtOjpnZXQoKTwvdHQ+IGFuZCA8dHQ+aXN0cmVhbTo6Z2V0bGluZSgpPC90dD4pIGFyZSBzdXBwb3NlZCB0bwp0ZXJtaW5hdGUgd2hlbiA8dHQ+KG4gLSAxKTwvdHQ+IGNoYXJhY3RlcnMgYXJlIHN0b3JlZCwgd2hpY2ggb2J2aW91c2x5IGNhbgpuZXZlciBiZSB0cnVlIHdoZW4gPHR0PihuID09IDApPC90dD4gaG9sZHMgdG8gc3RhcnQgd2l0aC4gU2VlCmMrK3N0ZC1saWItMTYwNzEuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJIHN1Z2dlc3QgY2hhbmdpbmcgMjcuNi4xLjMsIHA3ICg8dHQ+aXN0cmVhbTo6Z2V0KCk8L3R0PiksIGJ1bGxldCAxIHRvIHJlYWQ6CjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDx0dD4obiAmbHQ7IDEpPC90dD4gaXMgdHJ1ZSBvciA8dHQ+KG4gLSAxKTwvdHQ+IGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICAgICBhcmUgc3RvcmVkOwogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KPHA+CkNoYW5nZSAyNy42LjEuMywgcDk6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgpJZiB0aGUgZnVuY3Rpb24gc3RvcmVzIG5vIGNoYXJhY3RlcnMsIGl0IGNhbGxzIDx0dD5zZXRzdGF0ZShmYWlsYml0KTwvdHQ+ICh3aGljaAptYXkgdGhyb3cgPHR0Pmlvc19iYXNlOjpmYWlsdXJlPC90dD4gKDI3LjQuNC4zKSkuICBJbiBhbnkgY2FzZSwgPGlucz5pZiA8dHQ+KG4KJmd0OyAwKTwvdHQ+IGlzIHRydWU8L2lucz4gaXQgdGhlbiBzdG9yZXMgYSBudWxsIGNoYXJhY3RlciBpbnRvIHRoZSBuZXh0CnN1Y2Nlc3NpdmUgbG9jYXRpb24gb2YgdGhlIGFycmF5Lgo8L3A+PC9ibG9ja3F1b3RlPgoKICAgICAgICA8cD4KCmFuZCBzaW1pbGFybHkgcDE3ICg8dHQ+aXN0cmVhbTo6Z2V0bGluZSgpPC90dD4pLCBidWxsZXQgMyB0bzoKCiAgICAgICAgPC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgPHR0PihuICZsdDsgMSk8L3R0PiBpcyB0cnVlIG9yIDx0dD4obiAtIDEpPC90dD4gY2hhcmFjdGVycwogICAgICAgICAgICAgICAgICAgIGFyZSBzdG9yZWQgKGluIHdoaWNoIGNhc2UgdGhlIGZ1bmN0aW9uIGNhbGxzCiAgICAgICAgICAgICAgICAgICAgPHR0PnNldHN0YXRlKGZhaWxiaXQpPC90dD4pLgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgPHA+CgpJbiBhZGRpdGlvbiwgdG8gY2xhcmlmeSB0aGF0IDx0dD5pc3RyZWFtOjpnZXRsaW5lKCk8L3R0PiBtdXN0IG5vdCBzdG9yZSB0aGUKdGVybWluYXRpbmcgTlVMIGNoYXJhY3RlciB1bmxlc3MgdGhlIHRoZSBhcnJheSBoYXMgbm9uLXplcm8gc2l6ZSwgUm9iZXJ0CktsYXJlciBzdWdnZXN0cyBpbiBjKytzdGQtbGliLTE2MDgyIHRvIGNoYW5nZSAyNy42LjEuMywgcDIwIHRvIHJlYWQ6CgogICAgICAgIDwvcD4KICAgICAgICAgICAgPGJsb2NrcXVvdGU+PHA+CgpJbiBhbnkgY2FzZSwgcHJvdmlkZWQgPHR0PihuICZndDsgMCk8L3R0PiBpcyB0cnVlLCBpdCB0aGVuIHN0b3JlcyBhIG51bGwgY2hhcmFjdGVyCih1c2luZyBjaGFyVCgpKSBpbnRvIHRoZSBuZXh0IHN1Y2Nlc3NpdmUgbG9jYXRpb24gb2YgdGhlIGFycmF5LgoKICAgICAgICAgICAgPC9wPjwvYmxvY2txdW90ZT4KCjxwPjxpPlsKcG9zdC1SZWRtb25kOiAgUGV0ZSBub3RpY2VkIHRoYXQgdGhlIGN1cnJlbnQgcmVzb2x1dGlvbiBmb3IgPHR0PmdldDwvdHQ+IHJlcXVpcmVzCndyaXRpbmcgdG8gb3V0IG9mIGJvdW5kcyBtZW1vcnkgd2hlbiA8dHQ+biA9PSAwPC90dD4uICBNYXJ0aW4gcHJvdmlkZWQgZml4LgpdPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjUzMyI+PC9hPjUzMy4gdHlwbyBpbiAyLjIuMy4xMC8xPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjcuMTIuMi4xMSBbdXRpbC5zbWFydHB0ci5nZXRkZWxldGVyXSwgVFIxIDIuMi4zLjEwIFt0ci51dGlsLnNtYXJ0cHRyLmdldGRlbGV0ZXJdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFBhb2xvIENhcmxpbmkgPGI+RGF0ZTo8L2I+IDIwMDUtMTEtMDk8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3V0aWwuc21hcnRwdHIuZ2V0ZGVsZXRlciI+aXNzdWVzPC9hPiBpbiBbdXRpbC5zbWFydHB0ci5nZXRkZWxldGVyXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNEUiI+RFI8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkknbSBzZWVpbmcgc29tZXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIHR5cG8uIFRoZSBSZXR1cm4gb2YgPHR0PmdldF9kZWxldGVyPC90dD4Kc2F5czoKPC9wPgo8YmxvY2txdW90ZT48cD4KSWYgPHR0Pip0aGlzPC90dD4gPGk+b3duczwvaT4gYSBkZWxldGVyIDx0dD5kPC90dD4uLi4KPC9wPjwvYmxvY2txdW90ZT4KPHA+CmJ1dCA8dHQ+Z2V0X2RlbGV0ZXI8L3R0PiBpcyBhIGZyZWUgZnVuY3Rpb24hCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpUaGVyZWZvcmUsIEkgdGhpbmsgc2hvdWxkIGJlOgo8L3A+CjxibG9ja3F1b3RlPjxwPgpJZiA8dHQ+PGRlbD4qdGhpczwvZGVsPiA8aW5zPnA8L2lucz48L3R0PiA8aT5vd25zPC9pPiBhIGRlbGV0ZXIgPHR0PmQ8L3R0Pi4uLgo8L3A+PC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjUzNCI+PC9hPjUzNC4gTWlzc2luZyBiYXNpY19zdHJpbmcgbWVtYmVyczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMS4zIFtiYXNpYy5zdHJpbmddIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEFsaXNkYWlyIE1lcmVkaXRoIDxiPkRhdGU6PC9iPiAyMDA1LTExLTE2PC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjYmFzaWMuc3RyaW5nIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbYmFzaWMuc3RyaW5nXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2Jhc2ljLnN0cmluZyI+aXNzdWVzPC9hPiBpbiBbYmFzaWMuc3RyaW5nXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+Ck9LLCB3ZSBhbGwga25vdyBzdGQ6OmJhc2ljX3N0cmluZyBpcyBibG9hdGVkIGFuZCBhbHJlYWR5IGhhcyB3YXkgdG9vCm1hbnkgbWVtYmVycy4gIEhvd2V2ZXIsIEkgcHJvcG9zZSBpdCBpcyBtaXNzaW5nIDMgdXNlZnVsIG1lbWJlcnMgdGhhdAphcmUgb2Z0ZW4gZXhwZWN0ZWQgYnkgdXNlcnMgYmVsaWV2aW5nIGl0IGlzIGEgY2xvc2UgYXBwcm94aW1hdGlvbiBvZiB0aGUKY29udGFpbmVyIGNvbmNlcHQuICBBbGwgMyBhcmUgbGlzdGVkIGluIHRhYmxlIDcxIGFzICdvcHRpb25hbCcKPC9wPgoKPHA+CmkvICBwb3BfYmFjay4KPC9wPgoKPHA+ClRoaXMgaXMgdGhlIG9uZSBJIGZlZWwgbW9zdCBzdHJvbmdseSBhYm91dCwgYXMgSSBvbmx5IGp1c3QgZGlzY292ZXJlZCBpdAp3YXMgbWlzc2luZyBhcyB3ZSBhcmUgc3dpdGNoaW5nIHRvIGEgbW9yZSBjb25mb3JtaW5nIHN0YW5kYXJkIGxpYnJhcnkKJmx0O2cmZ3Q7CjwvcD4KCjxwPgpJIGZpbmQgaXQgcGFydGljdWxhcmx5IGluY29uc2lzdGVudCB0byBzdXBwb3J0IHB1c2hfYmFjaywgYnV0IG5vdApwb3BfYmFjay4KPC9wPgoKPHA+CmlpLyBiYWNrLgo8L3A+Cgo8cD4KVGhlcmUgYXJlIGNlcnRhaW5seSBjYXNlcyB3aGVyZSBJIHdhbnQgdG8gZXhhbWluZSB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YKYSBzdHJpbmcgYmVmb3JlIGRlY2lkaW5nIHRvIGFwcGVuZCwgb3IgdG8gdHJpbSB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcnMKZnJvbSBkaXJlY3RvcnkgbmFtZXMgZXRjLiAgKnJiZWdpbigpIHNvbWVob3cgZmVlbHMgaW5lbGVnYW50Lgo8L3A+Cgo8cD4KaWlpLyBmcm9udAo8L3A+Cgo8cD4KVGhpcyBvbmUgSSBkb24ndCBmZWVsIHN0cm9uZ2x5IGFib3V0LCBidXQgaWYgSSBjYW4gZ2V0IHRoZSBmaXJzdCB0d28sCnRoaXMgb25lIGZlZWxzIHRoYXQgaXQgc2hvdWxkIGJlIGFkZGVkIGFzIGEgJ21lIHRvbycgZm9yIGNvbnNpc3RlbmN5Lgo8L3A+Cgo8cD4KSSBiZWxpZXZlIHRoaXMgd291bGQgYmUgc2ltaWxhcmx5IHVzZWZ1bCB0byB0aGUgZGF0YSgpIG1lbWJlciByZWNlbnRseQphZGRlZCB0byB2ZWN0b3IsIG9yIGF0KCkgbWVtYmVyIGFkZGVkIHRvIHRoZSBtYXBzLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIHRoZSBmb2xsb3dpbmcgbWVtYmVycyB0byBkZWZpbml0aW9uIG9mIGNsYXNzIHRlbXBsYXRlIGJhc2ljX3N0cmluZywgMjEuM3A3CjwvcD4KPGJsb2NrcXVvdGU+PHByZT52b2lkIHBvcF9iYWNrICgpCgpjb25zdCBjaGFyVCAmYW1wOyBmcm9udCgpIGNvbnN0CmNoYXJUICZhbXA7IGZyb250KCkKCmNvbnN0IGNoYXJUICZhbXA7IGJhY2soKSBjb25zdApjaGFyVCAmYW1wOyBiYWNrKCkKPC9wcmU+PC9ibG9ja3F1b3RlPgo8cD4KQWRkIHRoZSBmb2xsb3dpbmcgcGFyYWdyYXBocyB0byBiYXNpY19zdHJpbmcgZGVzY3JpcHRpb24KPC9wPgoKPHA+CjIxLjMuNHA1CjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+Y29uc3QgY2hhclQgJmFtcDsgZnJvbnQoKSBjb25zdApjaGFyVCAmYW1wOyBmcm9udCgpCjwvcHJlPgo8cD4KPGk+UHJlY29uZGl0aW9uOjwvaT4gPHR0PiFlbXB0eSgpPC90dD4KPC9wPgo8cD4KPGk+RWZmZWN0czo8L2k+IEVxdWl2YWxlbnQgdG8gPHR0Pm9wZXJhdG9yW10oMCk8L3R0Pi4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KMjEuMy40cDYKPC9wPgo8YmxvY2txdW90ZT4KPHByZT5jb25zdCBjaGFyVCAmYW1wOyBiYWNrKCkgY29uc3QKY2hhclQgJmFtcDsgYmFjaygpCjwvcHJlPgo8cD4KPGk+UHJlY29uZGl0aW9uOjwvaT4gPHR0PiFlbXB0eSgpPC90dD4KPC9wPgo8cD4KPGk+RWZmZWN0czo8L2k+IEVxdWl2YWxlbnQgdG8gPHR0Pm9wZXJhdG9yW10oIHNpemUoKSAtIDEpPC90dD4uCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+CjIxLjMuNS41cDEwCjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+dm9pZCBwb3BfYmFjayAoKQo8L3ByZT4KPHA+CjxpPlByZWNvbmRpdGlvbjo8L2k+IDx0dD4hZW1wdHkoKTwvdHQ+CjwvcD4KPHA+CjxpPkVmZmVjdHM6PC9pPiBFcXVpdmFsZW50IHRvIDx0dD5lcmFzZSggc2l6ZSgpIC0gMSwgMSApPC90dD4uCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+ClVwZGF0ZSBUYWJsZSA3MTogKG9wdGlvbmFsIHNlcXVlbmNlIG9wZXJhdGlvbnMpCkFkZCBiYXNpY19zdHJpbmcgdG8gdGhlIGxpc3Qgb2YgY29udGFpbmVycyBmb3IgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zLgo8L3A+CjxibG9ja3F1b3RlPjxwcmU+YS5mcm9udCgpCmEuYmFjaygpCmEucHVzaF9iYWNrKCkKYS5wb3BfYmFjaygpCmFbbl0KPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+PGk+WwpCZXJsaW46IEhhcyBzdXBwb3J0LiAgQWxpc2RhaXIgcHJvdmlkZWQgd29yZGluZy4KXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjUzNSI+PC9hPjUzNS4gc3RkOjpzdHJpbmc6OnN3YXAgc3BlY2lmaWNhdGlvbiBwb29ybHkgd29yZGVkPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIxLjMuNi44IFtzdHJpbmc6OnN3YXBdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEJlbWFuIERhd2VzIDxiPkRhdGU6PC9iPiAyMDA1LTEyLTE0PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmc6OnN3YXAiPmlzc3VlczwvYT4gaW4gW3N0cmluZzo6c3dhcF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpzdGQ6OnN0cmluZzo6c3dhcCBjdXJyZW50bHkgc2F5cyBmb3IgZWZmZWN0cyBhbmQgcG9zdGNvbmRpdGlvbjoKPC9wPgoKPGJsb2NrcXVvdGU+CjxwPgo8aT5FZmZlY3RzOjwvaT4gU3dhcHMgdGhlIGNvbnRlbnRzIG9mIHRoZSB0d28gc3RyaW5ncy4KPC9wPgoKPHA+CjxpPlBvc3Rjb25kaXRpb246PC9pPiA8dHQ+KnRoaXM8L3R0PiBjb250YWlucyB0aGUgY2hhcmFjdGVycyB0aGF0IHdlcmUgaW4gPHR0PjxpPnM8L2k+PC90dD4sCjx0dD48aT5zPC9pPjwvdHQ+IGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBpbiA8dHQ+KnRoaXM8L3R0Pi4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KU3BlY2lmeWluZyBib3RoIEVmZmVjdHMgYW5kIFBvc3Rjb25kaXRpb24gc2VlbXMgcmVkdW5kYW50LCBhbmQgdGhlIHBvc3Rjb25kaXRpb24KbmVlZHMgdG8gYmUgbWFkZSBzdHJvbmdlci4gVXNlcnMgd291bGQgYmUgdW5oYXBweSBpZiB0aGUgY2hhcmFjdGVycyB3ZXJlIG5vdCBpbgp0aGUgc2FtZSBvcmRlciBhZnRlciB0aGUgc3dhcC4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPGJsb2NrcXVvdGU+CjxwPgo8ZGVsPjxpPkVmZmVjdHM6PC9pPiBTd2FwcyB0aGUgY29udGVudHMgb2YgdGhlIHR3byBzdHJpbmdzLjwvZGVsPgo8L3A+Cgo8cD4KPGk+UG9zdGNvbmRpdGlvbjo8L2k+IDx0dD4qdGhpczwvdHQ+IGNvbnRhaW5zIHRoZSA8aW5zPnNhbWUgc2VxdWVuY2Ugb2Y8L2lucz4KY2hhcmFjdGVycyB0aGF0IDxkZWw+d2VyZTwvZGVsPiA8aW5zPndhczwvaW5zPiBpbiA8dHQ+PGk+czwvaT48L3R0PiwKPHR0PjxpPnM8L2k+PC90dD4gY29udGFpbnMgdGhlIDxpbnM+c2FtZSBzZXF1ZW5jZSBvZjwvaW5zPiBjaGFyYWN0ZXJzIHRoYXQKPGRlbD53ZXJlPC9kZWw+IDxpbnM+d2FzPC9pbnM+IGluIDx0dD4qdGhpczwvdHQ+Lgo8L3A+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI1MzciPjwvYT41MzcuIFR5cG9zIGluIHRoZSBzaWduYXR1cmVzIGluIDI3LjYuMS4zLzQyLTQzIGFuZCAyNy42LjIuNDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjEuMyBbaXN0cmVhbS51bmZvcm1hdHRlZF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gUGFvbG8gQ2FybGluaSA8Yj5EYXRlOjwvYj4gMjAwNi0wMi0xMjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaXN0cmVhbS51bmZvcm1hdHRlZCI+aXNzdWVzPC9hPiBpbiBbaXN0cmVhbS51bmZvcm1hdHRlZF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJbiB0aGUgbW9zdCByZWNlbnQgd29ya2luZyBkcmFmdCwgSSdtIHN0aWxsIHNlZWluZzoKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT5zZWVrZyhvZmZfdHlwZSZhbXA7IG9mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgZGlyKQo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KYW5kCjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+c2Vla3AocG9zX3R5cGUmYW1wOyBwb3MpCgpzZWVrcChvZmZfdHlwZSZhbXA7IG9mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgZGlyKQo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KdGhhdCBpcywgYnkgcmVmZXJlbmNlIG9mZiBhbmQgcG9zIGFyZ3VtZW50cy4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFmdGVyIDI3LjYuMS4zcDQyIGNoYW5nZToKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT5iYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBzZWVrZyhvZmZfdHlwZTxkZWw+JmFtcDs8L2RlbD4gPGk+b2ZmPC9pPiwgaW9zX2Jhc2U6OnNlZWtkaXIgPGk+ZGlyPC9pPik7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpBZnRlciAyNy42LjIuNHAxIGNoYW5nZToKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT5iYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBzZWVrcChwb3NfdHlwZTxkZWw+JmFtcDs8L2RlbD4gPGk+cG9zPC9pPik7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpBZnRlciAyNy42LjIuNHAzIGNoYW5nZToKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT5iYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBzZWVrcChvZmZfdHlwZTxkZWw+JmFtcDs8L2RlbD4gPGk+b2ZmPC9pPiwgaW9zX2Jhc2U6OnNlZWtkaXIgPGk+ZGlyPC9pPik7CjwvcHJlPjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI1MzgiPjwvYT41MzguIDI0MSBhZ2FpbjogRG9lcyB1bmlxdWVfY29weSgpIHJlcXVpcmUgQ29weUNvbnN0cnVjdGlibGUgYW5kIEFzc2lnbmFibGU/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI1LjIuOSBbYWxnLnVuaXF1ZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSG93YXJkIEhpbm5hbnQgPGI+RGF0ZTo8L2I+IDIwMDYtMDItMDk8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2FsZy51bmlxdWUiPmlzc3VlczwvYT4gaW4gW2FsZy51bmlxdWVdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSSBiZWxpZXZlIEkgYm90Y2hlZCB0aGUgcmVzb2x1dGlvbiBvZgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjQxIj4KMjQxICJEb2VzIHVuaXF1ZV9jb3B5KCkgcmVxdWlyZSBDb3B5Q29uc3RydWN0aWJsZSBhbmQgQXNzaWduYWJsZT8iPC9hPiB3aGljaCBub3cKaGFzIFdQIHN0YXR1cy4KPC9wPgoKPHA+ClRoaXMgdGFsa3MgYWJvdXQgPHR0PnVuaXF1ZV9jb3B5PC90dD4gcmVxdWlyZW1lbnRzIGFuZCBjdXJyZW50bHkgcmVhZHM6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgotNS0gPGk+UmVxdWlyZXM6PC9pPiBUaGUgcmFuZ2VzIDx0dD5bPGk+Zmlyc3Q8L2k+LCA8aT5sYXN0PC9pPik8L3R0PiBhbmQKPHR0Pls8aT5yZXN1bHQ8L2k+LCA8aT5yZXN1bHQ8L2k+Kyg8aT5sYXN0PC9pPi08aT5maXJzdDwvaT4pKTwvdHQ+CnNoYWxsIG5vdCBvdmVybGFwLiBUaGUgZXhwcmVzc2lvbiA8dHQ+KjxpPnJlc3VsdDwvaT4gPSAqPGk+Zmlyc3Q8L2k+PC90dD4gc2hhbGwKYmUgdmFsaWQuIElmIG5laXRoZXIgPHR0PklucHV0SXRlcmF0b3I8L3R0PiBub3IgPHR0Pk91dHB1dEl0ZXJhdG9yPC90dD4gbWVldHMgdGhlCnJlcXVpcmVtZW50cyBvZiBmb3J3YXJkIGl0ZXJhdG9yIHRoZW4gdGhlIHZhbHVlIHR5cGUgb2YgPHR0PklucHV0SXRlcmF0b3I8L3R0PgptdXN0IGJlIENvcHlDb25zdHJ1Y3RpYmxlICgyMC4xLjMpLiBPdGhlcndpc2UgQ29weUNvbnN0cnVjdGlibGUgaXMgbm90IHJlcXVpcmVkLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBwcm9ibGVtICh3aGljaCBQYW9sbyBkaXNjb3ZlcmVkKSBpcyB0aGF0IHdoZW4gdGhlIGl0ZXJhdG9ycyBhcmUgYXQgdGhlaXIKbW9zdCByZXN0cmljdGl2ZSAoPHR0PklucHV0SXRlcmF0b3I8L3R0PiwgPHR0Pk91dHB1dEl0ZXJhdG9yPC90dD4pLCB0aGVuIHdlIHdhbnQKPHR0PklucHV0SXRlcmF0b3I6OnZhbHVlX3R5cGU8L3R0PiB0byBiZSBib3RoIDx0dD5Db3B5Q29uc3RydWN0aWJsZTwvdHQ+IGFuZAo8dHQ+Q29weUFzc2lnbmFibGU8L3R0PiAoZm9yIHRoZSBtb3N0IGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbikuICBIb3dldmVyIHRoaXMKcHJvcG9zZWQgcmVzb2x1dGlvbiBvbmx5IG1ha2VzIGl0IGNsZWFyIHRoYXQgaXQgaXMgPHR0PkNvcHlDb25zdHJ1Y3RpYmxlPC90dD4sCmFuZCB0aGF0IG9uZSBjYW4gYXNzaWduIGZyb20gPHR0Pio8aT5maXJzdDwvaT48L3R0PiB0byA8dHQ+KjxpPnJlc3VsdDwvaT48L3R0Pi4KVGhpcyBsYXR0ZXIgcmVxdWlyZW1lbnQgZG9lcyBub3QgbmVjZXNzYXJpbHkgaW1wbHkgdGhhdCB5b3UgY2FuOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPio8aT5maXJzdDwvaT4gPSAqPGk+Zmlyc3Q8L2k+Owo8L3ByZT48L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8YmxvY2txdW90ZT48cD4KLTUtIDxpPlJlcXVpcmVzOjwvaT4gVGhlIHJhbmdlcyA8dHQ+WzxpPmZpcnN0PC9pPiwgPGk+bGFzdDwvaT4pPC90dD4gYW5kCjx0dD5bPGk+cmVzdWx0PC9pPiwgPGk+cmVzdWx0PC9pPisoPGk+bGFzdDwvaT4tPGk+Zmlyc3Q8L2k+KSk8L3R0PgpzaGFsbCBub3Qgb3ZlcmxhcC4gVGhlIGV4cHJlc3Npb24gPHR0Pio8aT5yZXN1bHQ8L2k+ID0gKjxpPmZpcnN0PC9pPjwvdHQ+CnNoYWxsCmJlIHZhbGlkLiBJZiBuZWl0aGVyIDx0dD5JbnB1dEl0ZXJhdG9yPC90dD4gbm9yIDx0dD5PdXRwdXRJdGVyYXRvcjwvdHQ+IG1lZXRzIHRoZQpyZXF1aXJlbWVudHMgb2YgZm9yd2FyZCBpdGVyYXRvciB0aGVuIHRoZSA8ZGVsPnZhbHVlIHR5cGU8L2RlbD4gCjxpbnM+PHR0PnZhbHVlX3R5cGU8L3R0PjwvaW5zPiBvZiA8dHQ+SW5wdXRJdGVyYXRvcjwvdHQ+Cm11c3QgYmUgQ29weUNvbnN0cnVjdGlibGUgKDIwLjEuMykgPGlucz5hbmQgQXNzaWduYWJsZTwvaW5zPi4KT3RoZXJ3aXNlIENvcHlDb25zdHJ1Y3RpYmxlIGlzIG5vdCByZXF1aXJlZC4KPC9wPjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI1NDAiPjwvYT41NDAuIHNoYXJlZF9wdHImbHQ7dm9pZCZndDs6Om9wZXJhdG9yKigpPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjcuMTIuMi41IFt1dGlsLnNtYXJ0cHRyLnNoYXJlZC5vYnNdLCBUUjEgMi4yLjMuNSBbdHIudXRpbC5zbWFydHB0ci5zaGFyZWQub2JzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDUtMTAtMTU8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3V0aWwuc21hcnRwdHIuc2hhcmVkLm9icyI+aXNzdWVzPC9hPiBpbiBbdXRpbC5zbWFydHB0ci5zaGFyZWQub2JzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkknbSB0cnlpbmcgdG8gcmVjb25jaWxlIHRoZSBub3RlIGluIHRyLnV0aWwuc21hcnRwdHIuc2hhcmVkLm9icywgcDYKdGhhdCB0YWxrcyBhYm91dCB0aGUgb3BlcmF0b3IqKCkgbWVtYmVyIGZ1bmN0aW9uIG9mIHNoYXJlZF9wdHI6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgogIE5vdGVzOiBXaGVuIFQgaXMgdm9pZCwgYXR0ZW1wdGluZyB0byBpbnN0YW50aWF0ZSB0aGlzIG1lbWJlciBmdW5jdGlvbgogIHJlbmRlcnMgdGhlIHByb2dyYW0gaWxsLWZvcm1lZC4gW05vdGU6IEluc3RhbnRpYXRpbmcgc2hhcmVkX3B0ciZsdDt2b2lkJmd0OwogIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlc3VsdCBpbiBpbnN0YW50aWF0aW5nIHRoaXMgbWVtYmVyIGZ1bmN0aW9uLgogIC0tZW5kIG5vdGVdCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4Kd2l0aCB0aGUgcmVxdWlyZW1lbnQgaW4gdGVtcC5pbnN0LCBwMToKPC9wPgoKPGJsb2NrcXVvdGU+PHA+CiAgVGhlIGltcGxpY2l0IGluc3RhbnRpYXRpb24gb2YgYSBjbGFzcyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiBjYXVzZXMKICB0aGUgaW1wbGljaXQgaW5zdGFudGlhdGlvbiBvZiB0aGUgZGVjbGFyYXRpb25zLCBidXQgbm90IG9mIHRoZQogIGRlZmluaXRpb25zLi4uCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4KSSBhc3N1bWUgdGhhdCB3aGF0IHRoZSBub3RlIGlzIHJlYWxseSB0cnlpbmcgdG8gc2F5IGlzIHRoYXQKImluc3RhbnRpYXRpbmcgc2hhcmVkX3B0ciZsdDt2b2lkJmd0OyAqbXVzdCBub3QqIHJlc3VsdCBpbiBpbnN0YW50aWF0aW5nCnRoaXMgbWVtYmVyIGZ1bmN0aW9uLiIgVGhhdCBpcywgdGhhdCB0aGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlCmRlY2xhcmVkIGEgbWVtYmVyIG9mIHNoYXJlZF9wdHImbHQ7dm9pZCZndDsuIElzIG15IGludGVycHJldGF0aW9uCmNvcnJlY3Q/CjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgMi4yLjMuNXA2CjwvcD4KCjxibG9ja3F1b3RlPjxwPgotNi0gPGRlbD48aT5Ob3Rlczo8L2k+PC9kZWw+IFdoZW4gPHR0PlQ8L3R0PiBpcyA8dHQ+dm9pZDwvdHQ+LCA8ZGVsPmF0dGVtcHRpbmcgdG8gaW5zdGFudGlhdGUKdGhpcyBtZW1iZXIgZnVuY3Rpb24gcmVuZGVycyB0aGUgcHJvZ3JhbSBpbGwtZm9ybWVkLiBbPGk+Tm90ZTo8L2k+Ckluc3RhbnRpYXRpbmcgPHR0PnNoYXJlZF9wdHImbHQ7dm9pZCZndDs8L3R0PiBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXN1bHQgaW4KaW5zdGFudGlhdGluZyB0aGlzIG1lbWJlciBmdW5jdGlvbi4gPGk+LS1lbmQgbm90ZTwvaT5dPC9kZWw+IDxpbnM+aXQgaXMKdW5zcGVjaWZpZWQgd2hldGhlciB0aGlzIG1lbWJlciBmdW5jdGlvbiBpcyBkZWNsYXJlZCBvciBub3QsIGFuZCBpZiBzbywgd2hhdCBpdHMKcmV0dXJuIHR5cGUgaXMsIGV4Y2VwdCB0aGF0IHRoZSBkZWNsYXJhdGlvbiAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZQpkZWZpbml0aW9uKSBvZiB0aGUgZnVuY3Rpb24gc2hhbGwgYmUgd2VsbC1mb3JtZWQuPC9pbnM+CjwvcD48L2Jsb2NrcXVvdGU+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU0MSI+PC9hPjU0MS4gc2hhcmVkX3B0ciB0ZW1wbGF0ZSBhc3NpZ25tZW50IGFuZCB2b2lkPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjcuMTIuMiBbdXRpbC5zbWFydHB0ci5zaGFyZWRdLCBUUjEgMi4yLjMgW3RyLnV0aWwuc21hcnRwdHIuc2hhcmVkXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDUtMTAtMTY8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCN1dGlsLnNtYXJ0cHRyLnNoYXJlZCI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW3V0aWwuc21hcnRwdHIuc2hhcmVkXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3V0aWwuc21hcnRwdHIuc2hhcmVkIj5pc3N1ZXM8L2E+IGluIFt1dGlsLnNtYXJ0cHRyLnNoYXJlZF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJcyB0aGUgdm9pZCBzcGVjaWFsaXphdGlvbiBvZiB0aGUgdGVtcGxhdGUgYXNzaWdubWVudCBvcGVyYXRvciB0YWtpbmcKYSBzaGFyZWRfcHRyJmx0O3ZvaWQmZ3Q7IGFzIGFuIGFyZ3VtZW50IHN1cHBvc2VkIGJlIHdlbGwtZm9ybWVkPwo8L3A+CjxwPgpJLmUuLCBpcyB0aGlzIHNuaXBwZXQgd2VsbC1mb3JtZWQ6CjwvcD4KPGJsb2NrcXVvdGU+PHByZT5zaGFyZWRfcHRyJmx0O3ZvaWQmZ3Q7IHA7CnAub3BlcmF0b3I9Jmx0O3ZvaWQmZ3Q7KHApOwo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KR2NjIGNvbXBsYWlucyBhYm91dCBhdXRvX3B0ciZsdDt2b2lkJmd0Ozo6b3BlcmF0b3IqKCkgcmV0dXJuaW5nIGEgcmVmZXJlbmNlCnRvIHZvaWQuIEkgc3VzcGVjdCBpdCdzIGJlY2F1c2Ugc2hhcmVkX3B0ciBoYXMgdHdvIHRlbXBsYXRlIGFzc2lnbm1lbnQKb3BlcmF0b3JzLCBvbmUgb2Ygd2hpY2ggdGFrZXMgYXV0b19wdHIsIGFuZCB0aGUgYXV0b19wdHIgdGVtcGxhdGUgZ2V0cwppbXBsaWNpdGx5IGluc3RhbnRpYXRlZCBpbiB0aGUgcHJvY2VzcyBvZiBvdmVybG9hZCByZXNvbHV0aW9uLgo8L3A+Cgo8cD4KVGhlIG9ubHkgd2F5IEkgc2VlIGFyb3VuZCBpdCBpcyB0byBkbyB0aGUgc2FtZSB0cmljayB3aXRoIGF1dG9fcHRyJmx0O3ZvaWQmZ3Q7Cm9wZXJhdG9yKigpIGFzIHdpdGggdGhlIHNhbWUgb3BlcmF0b3IgaW4gc2hhcmVkX3B0ciZsdDt2b2lkJmd0Oy4KPC9wPgoKPHA+ClBTIFN0cmFuZ2VseSBlbm91Z2gsIHRoZSBFREcgZnJvbnQgZW5kIGRvZXNuJ3QgbWluZCB0aGUgY29kZSwgZXZlbgp0aG91Z2ggaW4gYSBzbWFsbCB0ZXN0IGNhc2UgKGJlbG93KSBJIGNhbiByZXByb2R1Y2UgdGhlIGVycm9yIHdpdGgKaXQgYXMgd2VsbC4KPC9wPgoKPGJsb2NrcXVvdGU+PHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKc3RydWN0IEEgeyBUJmFtcDsgb3BlcmF0b3IqKCkgeyByZXR1cm4gKihUKikwOyB9IH07Cgp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKc3RydWN0IEIgewogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEImYW1wOykgeyB9CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVSZndDsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBCJmx0O1UmZ3Q7JmFtcDspIHsgfQogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFUmZ3Q7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQSZsdDtVJmd0OyZhbXA7KSB7IH0KfTsKCmludCBtYWluICgpCnsKICAgIEImbHQ7dm9pZCZndDsgYjsKICAgIGIub3BlcmF0b3I9Jmx0O3ZvaWQmZ3Q7KGIpOwp9CjwvcHJlPjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiBbbGliLm1lbW9yeV0gY2hhbmdlOgo8L3A+CjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUmbHQ7Y2xhc3MgWCZndDsgY2xhc3MgYXV0b19wdHI7CjxpbnM+dGVtcGxhdGUmbHQ7Jmd0OyBjbGFzcyBhdXRvX3B0ciZsdDt2b2lkJmd0Ozs8L2lucz4KPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CkluIFtsaWIuYXV0by5wdHJdLzIgYWRkIHRoZSBmb2xsb3dpbmcgYmVmb3JlIHRoZSBsYXN0IGNsb3NpbmcgYnJhY2U6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUmbHQ7Jmd0OyBjbGFzcyBhdXRvX3B0ciZsdDt2b2lkJmd0Owp7CnB1YmxpYzoKICAgIHR5cGVkZWYgdm9pZCBlbGVtZW50X3R5cGU7Cn07CjwvcHJlPjwvYmxvY2txdW90ZT4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTQyIj48L2E+NTQyLiBzaGFyZWRfcHRyIG9ic2VydmVyczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMC43LjEyLjIuNSBbdXRpbC5zbWFydHB0ci5zaGFyZWQub2JzXSwgVFIxIDIuMi4zLjUgW3RyLnV0aWwuc21hcnRwdHIuc2hhcmVkLm9ic10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDA1LTEwLTE4PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCN1dGlsLnNtYXJ0cHRyLnNoYXJlZC5vYnMiPmlzc3VlczwvYT4gaW4gW3V0aWwuc21hcnRwdHIuc2hhcmVkLm9ic10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpQZXRlciBEaW1vdiB3cm90ZToKVG86IEMrKyBsaWJyYXJpZXMgbWFpbGluZyBsaXN0Ck1lc3NhZ2UgYysrc3RkLWxpYi0xNTYxNApbLi4uXQpUaGUgaW50ZW50IGlzIGZvciBib3RoIHVzZV9jb3VudCgpIGFuZCB1bmlxdWUoKSB0byB3b3JrIGluIGEgdGhyZWFkZWQgZW52aXJvbm1lbnQuClRoZXkgYXJlIGludHJpbnNpY2FsbHkgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zLCBidXQgdGhleSBuZXZlciByZXR1cm4gZ2FyYmFnZS4KPC9wPgoKPHA+ClRoaXMgaXMgYSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIHRoYXQgSSByZWFsbHkgd2lzaCB3ZXJlCmNhcHR1cmVkIGluIHRoZSB0ZXh0LiBIYXZpbmcgdGhpcyBpbiBhIG5vbi1ub3JtYXRpdmUgbm90ZSB3b3VsZApoYXZlIG1hZGUgZXZlcnl0aGluZyBjcnlzdGFsIGNsZWFyIHRvIG1lIGFuZCBwcm9iYWJseSBzdG9wcGVkCm1lIGZyb20gZXZlciBzdGFydGluZyB0aGlzIGRpc2N1c3Npb24gOikgSW5zdGVhZCwgdGhlIHNlbnRlbmNlCmluIHAxMiAidXNlIG9ubHkgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBwdXJwb3Nlcywgbm90IGZvcgpwcm9kdWN0aW9uIGNvZGUiIHZlcnkgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpbXBsZW1lbnRhdGlvbnMKY2FuIGFuZCBldmVuIGFyZSBlbmNvdXJhZ2VkIHRvIHJldHVybiBnYXJiYWdlICh3aGVuIHRocmVhZHMKYXJlIGludm9sdmVkKSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KPC9wPgo8cD4KSG93IGFib3V0IGFkZGluZyBhbiBpbmZvcm1hdGl2ZSBub3RlIGFsb25nIHRoZXNlIGxpbmVzOgo8L3A+CjxibG9ja3F1b3RlPjxwPgogIE5vdGU6IEltcGxlbWVudGF0aW9ucyBhcmUgZW5jb3VyYWdlZCB0byBwcm92aWRlIHdlbGwtZGVmaW5lZAogIGJlaGF2aW9yIGZvciB1c2VfY291bnQoKSBhbmQgdW5pcXVlKCkgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2YKICBtdWx0aXBsZSB0aHJlYWRzLgo8L3A+PC9ibG9ja3F1b3RlPgo8cD4KSSBkb24ndCBuZWNlc3NhcmlseSBpbnNpc3Qgb24gdGhlIGV4YWN0IHdvcmRpbmcsIGp1c3QgdGhhdCB3ZQpjYXB0dXJlIHRoZSBpbnRlbnQuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgMjAuNy4xMi4yLjUgW3V0aWwuc21hcnRwdHIuc2hhcmVkLm9ic10gcDEyOgo8L3A+CjxibG9ja3F1b3RlPjxwPgpbPGk+Tm90ZTo8L2k+IDx0dD51c2VfY291bnQoKTwvdHQ+IGlzIG5vdCBuZWNlc3NhcmlseSBlZmZpY2llbnQuIDxkZWw+VXNlIG9ubHkgZm9yCmRlYnVnZ2luZyBhbmQgdGVzdGluZyBwdXJwb3Nlcywgbm90IGZvciBwcm9kdWN0aW9uIGNvZGUuPC9kZWw+IC0tPGk+ZW5kIG5vdGU8L2k+XQo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAyMC43LjEyLjMuNSBbdXRpbC5zbWFydHB0ci53ZWFrLm9ic10gcDM6CjwvcD4KPGJsb2NrcXVvdGU+PHA+Cls8aT5Ob3RlOjwvaT4gPHR0PnVzZV9jb3VudCgpPC90dD4gaXMgbm90IG5lY2Vzc2FyaWx5IGVmZmljaWVudC4gPGRlbD5Vc2Ugb25seSBmb3IKZGVidWdnaW5nIGFuZCB0ZXN0aW5nIHB1cnBvc2VzLCBub3QgZm9yIHByb2R1Y3Rpb24gY29kZS48L2RlbD4gLS08aT5lbmQgbm90ZTwvaT5dCjwvcD48L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTQzIj48L2E+NTQzLiB2YWxhcnJheSBzbGljZSBkZWZhdWx0IGNvbnN0cnVjdG9yPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI2LjUuNCBbY2xhc3Muc2xpY2VdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEhvd2FyZCBIaW5uYW50IDxiPkRhdGU6PC9iPiAyMDA1LTExLTAzPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJZiBvbmUgZXhwbGljaXRseSBjb25zdHJ1Y3RzIGEgc2xpY2Ugb3IgZ2xpY2Ugd2l0aCB0aGUgZGVmYXVsdApjb25zdHJ1Y3RvciwgZG9lcyB0aGUgc3RhbmRhcmQgcmVxdWlyZSB0aGlzIHNsaWNlIHRvIGhhdmUgYW55IHVzYWJsZQpzdGF0ZT8gIEl0IHNheXMgImNyZWF0ZXMgYSBzbGljZSB3aGljaCBzcGVjaWZpZXMgbm8gZWxlbWVudHMiLCB3aGljaApjb3VsZCBiZSBpbnRlcnByZXRlZCB0d28gd2F5czoKPC9wPgo8b2w+CjxsaT5UaGVyZSBhcmUgbm8gZWxlbWVudHMgdG8gd2hpY2ggdGhlIHNsaWNlIHJlZmVycyAoaS5lLiB1bmRlZmluZWQpLjwvbGk+CjxsaT5UaGUgc2xpY2Ugc3BlY2lmaWVzIGFuIGFycmF5IHdpdGggbm8gZWxlbWVudHMgaW4gaXQgKGkuZS4gZGVmaW5lZCkuPC9saT4KPC9vbD4KPHA+CkhlcmUgaXMgYSBiaXQgb2YgY29kZSB0byBpbGx1c3RyYXRlOgo8L3A+CjxibG9ja3F1b3RlPjxwcmU+I2luY2x1ZGUgJmx0O2lvc3RyZWFtJmd0OwojaW5jbHVkZSAmbHQ7dmFsYXJyYXkmZ3Q7CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6dmFsYXJyYXkmbHQ7aW50Jmd0OyB2KDEwKTsKICAgIHN0ZDo6dmFsYXJyYXkmbHQ7aW50Jmd0OyB2MiA9IHZbc3RkOjpzbGljZSgpXTsKICAgIHN0ZDo6Y291dCAmbHQ7Jmx0OyAidltzbGljZSgpXS5zaXplKCkgPSAiICZsdDsmbHQ7IHYyLnNpemUoKSAmbHQ7Jmx0OyAnXG4nOwp9CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpJcyB0aGUgYmVoYXZpb3IgdW5kZWZpbmVkPyAgT3Igc2hvdWxkIHRoZSBvdXRwdXQgYmU6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dltzbGljZSgpXS5zaXplKCkgPSAwCjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpUaGVyZSBpcyBhIHNpbWlsYXIgcXVlc3Rpb24gYW5kIHdvcmRpbmcgZm9yIGdzbGljZSBhdCAyNi4zLjYuMXAxLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+PGk+W01hcnRpbiBzdWdnZXN0cyByZW1vdmluZyB0aGUgc2Vjb25kIHNlbnRlbmNlIGluIDI2LjUuNC4xIFtjb25zLnNsaWNlXSBhcyB3ZWxsLl08L2k+PC9wPgoKCjxwPgpDaGFuZ2UgMjYuNS40LjEgW2NvbnMuc2xpY2VdOgo8L3A+Cgo8YmxvY2txdW90ZT48cD4KMSAtIDxkZWw+VGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZm9yIDx0dD5zbGljZTwvdHQ+IGNyZWF0ZXMgYSA8dHQ+c2xpY2U8L3R0Pgp3aGljaCBzcGVjaWZpZXMgbm8gZWxlbWVudHMuPC9kZWw+IDxpbnM+VGhlIGRlZmF1bHQgY29uc3RydWN0b3IgaXMgZXF1aXZhbGVudCB0bwo8dHQ+c2xpY2UoMCwgMCwgMCk8L3R0Pi48L2lucz4gQSBkZWZhdWx0IGNvbnN0cnVjdG9yIGlzIHByb3ZpZGVkIG9ubHkgdG8gcGVybWl0CnRoZSBkZWNsYXJhdGlvbiBvZiBhcnJheXMgb2Ygc2xpY2VzLiBUaGUgY29uc3RydWN0b3Igd2l0aCBhcmd1bWVudHMgZm9yIGEgc2xpY2UKdGFrZXMgYSBzdGFydCwgbGVuZ3RoLCBhbmQgc3RyaWRlIHBhcmFtZXRlci4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpDaGFuZ2UgMjYuNS42LjEgW2dzbGljZS5jb25zXToKPC9wPgoKPGJsb2NrcXVvdGU+PHA+CjEgLSA8ZGVsPlRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSA8dHQ+Z3NsaWNlPC90dD4gd2hpY2ggc3BlY2lmaWVzIG5vCmVsZW1lbnRzLjwvZGVsPiA8aW5zPlRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGlzIGVxdWl2YWxlbnQgdG8gPHR0PmdzbGljZSgwLAp2YWxhcnJheSZsdDtzaXplX3QmZ3Q7KCksIHZhbGFycmF5Jmx0O3NpemVfdCZndDsoKSk8L3R0Pi48L2lucz4gVGhlIGNvbnN0cnVjdG9yCndpdGggYXJndW1lbnRzIGJ1aWxkcyBhIDx0dD5nc2xpY2U8L3R0PiBiYXNlZCBvbiBhIHNwZWNpZmljYXRpb24gb2Ygc3RhcnQsCmxlbmd0aHMsIGFuZCBzdHJpZGVzLCBhcyBleHBsYWluZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uCjwvcD48L2Jsb2NrcXVvdGU+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU0NSI+PC9hPjU0NS4gV2hlbiBpcyBhIGRlbGV0ZXIgZGVsZXRlZD88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAuNy4xMi4yLjExIFt1dGlsLnNtYXJ0cHRyLmdldGRlbGV0ZXJdLCBUUjEgMi4yLjMuMiBbdHIudXRpbC5zbWFydHB0ci5zaGFyZWQuZGVzdF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWF0dCBBdXN0ZXJuIDxiPkRhdGU6PC9iPiAyMDA2LTAxLTEwPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCN1dGlsLnNtYXJ0cHRyLmdldGRlbGV0ZXIiPmlzc3VlczwvYT4gaW4gW3V0aWwuc21hcnRwdHIuZ2V0ZGVsZXRlcl0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpUaGUgZGVzY3JpcHRpb24gb2YgfnNoYXJlZF9wdHIgZG9lc24ndCBzYXkgd2hlbiB0aGUgc2hhcmVkX3B0cidzIGRlbGV0ZXIsIGlmCmFueSwgaXMgZGVzdHJveWVkLiBJbiBwcmluY2lwbGUgdGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzOiBpdCBpcyBkZXN0cm95ZWQKdW5jb25kaXRpb25hbGx5IHdoZW5ldmVyIH5zaGFyZWRfcHRyIGlzIGV4ZWN1dGVkICh3aGljaCwgZnJvbSBhbiBpbXBsZW1lbnRhdGlvbgpzdGFuZHBvaW50LCBtZWFucyB0aGF0IHRoZSBkZWxldGVyIGlzIGNvcGllZCB3aGVuZXZlciB0aGUgc2hhcmVkX3B0ciBpcyBjb3BpZWQpLApvciBpdCBpcyBkZXN0cm95ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG93bmVkIHBvaW50ZXIgaXMgZGVzdHJveWVkICh3aGljaCwgZnJvbQphbiBpbXBsZW1lbnRhdGlvbiBzdGFuZHBvaW50LCBtZWFucyB0aGF0IHRoZSBkZWxldGVyIG9iamVjdCBpcyBzaGFyZWQgYmV0d2VlbgppbnN0YW5jZXMpLiBXZSBzaG91bGQgc2F5IHdoaWNoIGl0IGlzLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIGFmdGVyIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiAyMC43LjEyLjIuMTEgW3V0aWwuc21hcnRwdHIuZ2V0ZGVsZXRlcl0vMToKPC9wPgo8YmxvY2txdW90ZT4KPHA+ClRoZSByZXR1cm5lZCBwb2ludGVyIHJlbWFpbnMgdmFsaWQgYXMgbG9uZyBhcyB0aGVyZSBleGlzdHMgYSA8dHQ+c2hhcmVkX3B0cjwvdHQ+IGluc3RhbmNlCnRoYXQgb3ducyA8dHQ+PGk+ZDwvaT48L3R0Pi4KPC9wPgo8cD4KWzxpPk5vdGU6PC9pPiBpdCBpcyB1bnNwZWNpZmllZCB3aGV0aGVyIHRoZSBwb2ludGVyIHJlbWFpbnMgdmFsaWQgbG9uZ2VyIHRoYW4gdGhhdC4KVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGRlc3Ryb3kgdGhlIGRlbGV0ZXIgdW50aWwgYWxsCjx0dD53ZWFrX3B0cjwvdHQ+IGluc3RhbmNlcyBpbiB0aGUgb3duZXJzaGlwIGdyb3VwIGFyZSBkZXN0cm95ZWQuIDxpPi0tIGVuZCBub3RlPC9pPl0KPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTUwIj48L2E+NTUwLiBXaGF0IHNob3VsZCB0aGUgcmV0dXJuIHR5cGUgb2YgcG93KGZsb2F0LGludCkgYmU/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI2LjcgW2MubWF0aF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSG93YXJkIEhpbm5hbnQgPGI+RGF0ZTo8L2I+IDIwMDYtMDEtMTI8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2MubWF0aCI+aXNzdWVzPC9hPiBpbiBbYy5tYXRoXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkFzc3VtaW5nIHdlIGFkb3B0IHRoZQo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA1L24xODM2LnBkZiI+Qwpjb21wYXRpYmlsaXR5IHBhY2thZ2UgZnJvbSBDOTk8L2E+ICB3aGF0IHNob3VsZCBiZSB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlCmZvbGxvd2luZyBzaWduYXR1cmUgYmU6CjwvcD4KPGJsb2NrcXVvdGU+PHByZT4/ICBwb3coZmxvYXQsIGludCk7CjwvcHJlPjwvYmxvY2txdW90ZT4KPHA+CkMrKzAzIHNheXMgdGhhdCB0aGUgcmV0dXJuIHR5cGUgc2hvdWxkIGJlIDx0dD5mbG9hdDwvdHQ+LiAKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTgzNi5wZGYiPgpUUjE8L2E+IGFuZCBDOTAvOTkgc2F5IHRoZSByZXR1cm4gdHlwZSBzaG91bGQgYmUgPHR0PmRvdWJsZTwvdHQ+LiAgVGhpcyBjYW4gcHV0CmNsaWVudHMgaW50byBhIHNpdHVhdGlvbiB3aGVyZSBDKyswMyBwcm92aWRlcyBhbnN3ZXJzIHRoYXQgYXJlIG5vdCBhcyBoaWdoCnF1YWxpdHkgYXMgQzkwL0M5OS9UUjEuICBGb3IgZXhhbXBsZToKPC9wPgo8YmxvY2txdW90ZT48cHJlPiNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CgppbnQgbWFpbigpCnsKICAgIGZsb2F0IHggPSAyMDgwNzAzLjM3NUY7CiAgICBkb3VibGUgeSA9IHBvdyh4LCAyKTsKfQo8L3ByZT48L2Jsb2NrcXVvdGU+CjxwPgpBc3N1bWluZyBhbiBJRUVFIDMyIGJpdCBmbG9hdCBhbmQgSUVFRSA2NCBiaXQgZG91YmxlLCBDOTAvQzk5L1RSMSBhbGwgc3VnZ2VzdDoKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT55ID0gNDMyOTMyNjUzNDczNi4zOTA2MjUKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CndoaWNoIGlzIGV4YWN0bHkgcmlnaHQuICBXaGlsZSBDKys5OC9DKyswMyBkZW1hbmRzOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnkgPSA0MzI5MzI2NTEwMDgwLgo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4Kd2hpY2ggaXMgb25seSBhcHByb3hpbWF0ZWx5IHJpZ2h0Lgo8L3A+Cgo8cD4KSSByZWNvbW1lbmQgdGhhdCBDKyswWCBhZG9wdCB0aGUgbWl4ZWQgbW9kZSBhcml0aG1ldGljIGFscmVhZHkgYWRvcHRlZCBieQpGb3J0cmFuLCBDIGFuZCBUUjEgYW5kIG1ha2UgdGhlIHJldHVybiB0eXBlIG9mIDx0dD5wb3coZmxvYXQsaW50KTwvdHQ+IGJlCjx0dD5kb3VibGU8L3R0Pi4KPC9wPgoKPHA+PGk+WwpLb25hICgyMDA3KTogT3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoaXMgaXNzdWUgaW5jbHVkZQo8dHQ+bGRleHA8L3R0PiwgPHR0PnNjYWxibG48L3R0PiwgYW5kIDx0dD5zY2FsYm48L3R0Pi4gV2UgYWxzbyBiZWxpZXZlIHRoYXQgdGhlcmUgaXMgYSB0eXBvIGluCjI2LjcvMTA6IDx0dD5mbG9hdCBuZXh0dG93YXJkKGZsb2F0LCBsb25nIGRvdWJsZSk7PC90dD4gW3NpY10gc2hvdWxkIGJlIDx0dD5mbG9hdApuZXh0dG93YXJkKGZsb2F0LCBmbG9hdCk7PC90dD4gUHJvcG9zZWQgRGlzcG9zaXRpb246IFJldmlldyAodGhlIHByb3Bvc2VkCnJlc29sdXRpb24gYXBwZWFycyBhYm92ZSwgcmF0aGVyIHRoYW4gYmVsb3csIHRoZSBoZWFkaW5nICJQcm9wb3NlZApyZXNvbHV0aW9uIikKXTwvaT48L3A+CgoKPHA+PGk+Wwo8cD4KSG93YXJkLCBwb3N0IEtvbmE6CjwvcD4KPGJsb2NrcXVvdGU+CjxwPgpVbmZvcnR1bmF0ZWx5IEkgc3Ryb25nbHkgZGlzYWdyZWUgd2l0aCBhIHBhcnQgb2YgdGhlIHJlc29sdXRpb24KZnJvbSBLb25hLiAgSSBhbSBtb3ZpbmcgZnJvbSBOZXcgdG8gT3BlbiBpbnN0ZWFkIG9mIHRvIFJldmlldyBiZWNhdXNlIEkgZG8gbm90IGJlbGlldmUKd2UgaGF2ZSBjb25zZW5zdXMgb24gdGhlIGludGVudCBvZiB0aGUgcmVzb2x1dGlvbi4KPC9wPgo8cD4KVGhpcyBpc3N1ZSBkb2VzIG5vdCBpbmNsdWRlIDx0dD5sZGV4cDwvdHQ+LCA8dHQ+c2NhbGJsbjwvdHQ+LCBhbmQgPHR0PnNjYWxibjwvdHQ+IGJlY2F1c2UKdGhlIHNlY29uZCBpbnRlZ3JhbCBwYXJhbWV0ZXIgaW4gZWFjaCBvZiB0aGVzZSBzaWduYXR1cmVzIChmcm9tIEM5OSkgaXMgPGI+bm90PC9iPiBhCjxpPmdlbmVyaWMgcGFyYW1ldGVyPC9pPiBhY2NvcmRpbmcgdG8gQzk5IDcuMjJwMi4gIFRoZSBjb3JyZXNwb25kaW5nIEMrKyBvdmVybG9hZHMgYXJlCmludGVuZGVkIChhcyBmYXIgYXMgSSBrbm93KSB0byBjb3JyZXNwb25kIGRpcmVjdGx5IHRvIEM5OSdzIGRlZmluaXRpb24gb2YgPGk+Z2VuZXJpYyBwYXJhbWV0ZXI8L2k+Lgo8L3A+CjxwPgpGb3Igc2ltaWxhciByZWFzb25zLCBJIGRvIG5vdCBiZWxpZXZlIHRoYXQgdGhlIHNlY29uZCA8dHQ+bG9uZyBkb3VibGU8L3R0PiBwYXJhbWV0ZXIgb2YKPHR0Pm5leHR0b3dhcmQ8L3R0Piwgbm9yIHRoZSByZXR1cm4gdHlwZSBvZiB0aGlzIGZ1bmN0aW9uLCBpcyBpbiBlcnJvci4gIEkgYmVsaWV2ZSB0aGUKY29ycmVjdCBzaWduYXR1cmUgaXM6CjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+ZmxvYXQgbmV4dHRvd2FyZChmbG9hdCwgbG9uZyBkb3VibGUpOwo8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD4Kd2hpY2ggaXMgd2hhdCBib3RoIHRoZSBDKyswWCB3b3JraW5nIHBhcGVyIGFuZCBDOTkgc3RhdGUgKGFzIGZhciBhcyBJIGN1cnJlbnRseSB1bmRlcnN0YW5kKS4KPC9wPgo8cD4KVGhpcyBpcyByZWFsbHkgPGI+b25seTwvYj4gYWJvdXQgPHR0PnBvdyhmbG9hdCwgaW50KTwvdHQ+LiAgQW5kIHRoaXMgaXMgYmVjYXVzZSBDKys5OCB0b29rIG9uZQpyb3V0ZSAod2l0aCA8dHQ+cG93PC90dD4gb25seSkgYW5kIEM5OSB0b29rIGFub3RoZXIgKHdpdGggbWFueSBtYXRoIGZ1bmN0aW9ucyBpbiA8dHQ+Jmx0O3RnbWF0aC5oJmd0OzwvdHQ+LgpUaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBiYXNpY2FsbHkgc2F5czogQysrOTggZ290IGl0IHdyb25nIGFuZCBDOTkgZ290IGl0IHJpZ2h0OyBsZXQncyBnbyB3aXRoIEM5OS4KPC9wPgo8L2Jsb2NrcXVvdGU+Cl08L2k+PC9wPgoKCjxwPjxpPlsKQmVsbGV2dWU6Cl08L2k+PC9wPgoKCjxibG9ja3F1b3RlPgpUaGlzIHNpZ25hdHVyZSB3YXMgbm90IHBpY2tlZCB1cCBmcm9tIEM5OS4gSW5zdGVhZCwgaWYgb25lIHR5cGVzCnBvdygyLjBmLDIpLCB0aGUgcHJvbW90aW9uIHJ1bGVzIHdpbGwgaW52b2tlICJkb3VibGUgcG93KGRvdWJsZSwKZG91YmxlKSIsIHdoaWNoIGdlbmVyYWxseSBnaXZlcyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgaW50ZWdyYWwKZXhwb25lbnRzLCBwcmVzZXJ2aW5nIGZ1bGwgYWNjdXJhY3kgb2YgdGhlIHJlc3VsdC4gIE5ldyBwcm9wb3NlZAp3b3JkaW5nIHByb3ZpZGVkLgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIDI2LjcgW2MubWF0aF0gcDEwOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+ClRoZSBhZGRlZCBzaWduYXR1cmVzIGFyZToKPC9wPgo8YmxvY2txdW90ZT48cHJlPi4uLgo8ZGVsPmZsb2F0IHBvdyhmbG9hdCwgaW50KTs8L2RlbD4KLi4uCjxkZWw+ZG91YmxlIHBvdyhkb3VibGUsIGludCk7PC9kZWw+Ci4uLgo8ZGVsPmxvbmcgZG91YmxlIHBvdyhsb25nIGRvdWJsZSwgaW50KTs8L2RlbD4KPC9wcmU+PC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU1MSI+PC9hPjU1MS4gJmx0O2Njb21wbGV4Jmd0OzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNi4zLjExIFtjbXBseGhdLCBUUjEgOC4zIFt0ci5jOTkuY21wbHhoXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBIb3dhcmQgSGlubmFudCA8Yj5EYXRlOjwvYj4gMjAwNi0wMS0yMzwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KUHJldmlvdXNseSB4eHguaCB3YXMgcGFyc2FibGUgYnkgQysrLiAgQnV0IGluIHRoZSBjYXNlIG9mIEM5OSdzICZsdDtjb21wbGV4LmgmZ3Q7Cml0IGlzbid0LiAgT3RoZXJ3aXNlIHdlIGNvdWxkIG1vZGVsIGl0IGp1c3QgbGlrZSAmbHQ7c3RyaW5nLmgmZ3Q7LCAmbHQ7Y3N0cmluZyZndDssICZsdDtzdHJpbmcmZ3Q7Ogo8L3A+Cgo8dWw+CjxsaT4mbHQ7c3RyaW5nJmd0OyAgIDogQysrIEFQSSBpbiBuYW1lc3BhY2Ugc3RkPC9saT4KPGxpPiZsdDtjc3RyaW5nJmd0OyAgOiBDIEFQSSBpbiBuYW1lc3BhY2Ugc3RkPC9saT4KPGxpPiZsdDtzdHJpbmcuaCZndDsgOiBDIEFQSSBpbiBnbG9iYWwgbmFtZXNwYWNlPC9saT4KPC91bD4KCjxwPgpJbiB0aGUgY2FzZSBvZiBDJ3MgY29tcGxleCwgdGhlIEMgQVBJIHdvbid0IGNvbXBpbGUgaW4gQysrLiAgU28gd2UgaGF2ZToKPC9wPgoKPHVsPgo8bGk+Jmx0O2NvbXBsZXgmZ3Q7ICAgOiBDKysgQVBJIGluIG5hbWVzcGFjZSBzdGQ8L2xpPgo8bGk+Jmx0O2Njb21wbGV4Jmd0OyAgOiA/PC9saT4KPGxpPiZsdDtjb21wbGV4LmgmZ3Q7IDogPzwvbGk+CjwvdWw+Cgo8cD4KVGhlID8gY2FuJ3QgcmVmZXIgdG8gdGhlIEMgQVBJLiAgVFIxIGN1cnJlbnRseSBzYXlzOgo8L3A+Cgo8dWw+CjxsaT4mbHQ7Y29tcGxleCZndDsgICA6IEMrKyBBUEkgaW4gbmFtZXNwYWNlIHN0ZDwvbGk+CjxsaT4mbHQ7Y2NvbXBsZXgmZ3Q7ICA6IEMrKyBBUEkgaW4gbmFtZXNwYWNlIHN0ZDwvbGk+CjxsaT4mbHQ7Y29tcGxleC5oJmd0OyA6IEMrKyBBUEkgaW4gZ2xvYmFsIG5hbWVzcGFjZTwvbGk+CjwvdWw+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAyNi4zLjExIFtjbXBseGhdOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+ClRoZSBoZWFkZXIgYmVoYXZlcyBhcyBpZiBpdCBpbmNsdWRlcyB0aGUgaGVhZGVyCjx0dD4mbHQ7Y2NvbXBsZXgmZ3Q7PC90dD48aW5zPi48L2lucz48ZGVsPiwgYW5kIHByb3ZpZGVzIHN1ZmZpY2llbnQgdXNpbmcKZGVjbGFyYXRpb25zIHRvIGRlY2xhcmUgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UgYWxsIGZ1bmN0aW9uIGFuZCB0eXBlIG5hbWVzCmRlY2xhcmVkIG9yIGRlZmluZWQgaW4gdGhlIG5lYWRlciA8dHQ+Jmx0O2NvbXBsZXgmZ3Q7PC90dD4uPC9kZWw+CjxpbnM+WzxpPk5vdGU6PC9pPiA8dHQ+Jmx0O2NvbXBsZXguaCZndDs8L3R0PiBkb2VzIG5vdCBwcm9tb3RlIGFueSBpbnRlcmZhY2UKaW50byB0aGUgZ2xvYmFsIG5hbWVzcGFjZSBhcyB0aGVyZSBpcyBubyBDIGludGVyZmFjZSB0byBwcm9tb3RlLiA8aT4tLWVuZApub3RlPC9pPl08L2lucz4KPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU1MiI+PC9hPjU1Mi4gcmFuZG9tX3NodWZmbGUgYW5kIGl0cyBnZW5lcmF0b3I8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjUuMi4xMiBbYWxnLnJhbmRvbS5zaHVmZmxlXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDYtMDEtMjU8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+Ci4uLmlzIHNwZWNpZmllZCB0byBzaHVmZmxlIGl0cyByYW5nZSBieSBjYWxsaW5nIHN3YXAgYnV0IG5vdCBob3cKKG9yIGV2ZW4gdGhhdCkgaXQncyBzdXBwb3NlZCB0byB1c2UgdGhlIFJhbmRvbU51bWJlckdlbmVyYXRvcgphcmd1bWVudCBwYXNzZWQgdG8gaXQuCjwvcD4KPHA+ClNob3VsZG4ndCB3ZSByZXF1aXJlIHRoYXQgdGhlIGdlbmVyYXRvciBvYmplY3QgYWN0dWFsbHkgYmUgdXNlZApieSB0aGUgYWxnb3JpdGhtIHRvIG9idGFpbiBhIHNlcmllcyBvZiByYW5kb20gbnVtYmVycyBhbmQgc3BlY2lmeQpob3cgbWFueSB0aW1lcyBpdHMgb3BlcmF0b3IoKSBzaG91bGQgYmUgaW52b2tlZCBieSB0aGUgYWxnb3JpdGhtPwo8L3A+Cgo8cD4KU2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjIzOTEucGRmIj5OMjM5MTwvYT4gYW5kCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjI0MjMucGRmIj5OMjQyMzwvYT4KZm9yIHNvbWUgZnVydGhlciBkaXNjdXNzaW9uLgo8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkb3B0IHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGluCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjI0MjMucGRmIj5OMjQyMzwvYT4uCjwvcD4KCgo8cD48aT5bCktvbmEgKDIwMDcpOiBUaGUgTFdHIGFkb3B0ZWQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gb2YgTjI0MjMgZm9yIHRoaXMgaXNzdWUuClRoZSBMV0cgdm90ZWQgdG8gYWNjZWxlcmF0ZSB0aGlzIGlzc3VlIHRvIFJlYWR5IHN0YXR1cyB0byBiZSB2b3RlZCBpbnRvIHRoZSBXUCBhdCBLb25hLgpdPC9pPjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI1NTkiPjwvYT41NTkuIG51bWVyaWNfbGltaXRzJmx0O2NvbnN0IFQmZ3Q7PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE4LjIuMSBbbGltaXRzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDYtMDItMTk8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xpbWl0cyI+aXNzdWVzPC9hPiBpbiBbbGltaXRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KICAgICAgICA8cD4KCjE4LjIuMSBbbGltaXRzXSwgcDIgcmVxdWlyZXMgaW1wbGVtZW50YXRpb25zICB0byBwcm92aWRlIHNwZWNpYWxpemF0aW9ucyBvZiB0aGUKPGNvZGU+bnVtZXJpY19saW1pdHM8L2NvZGU+IHRlbXBsYXRlIGZvciAgZWFjaCBzY2FsYXIgdHlwZS4gV2hpbGUgdGhpcwpjb3VsZCBiZSBpbnRlcmVwcmV0ZWQgdG8gaW5jbHVkZSBjdi1xdWFsaWZpZWQgZm9ybXMgb2Ygc3VjaCB0eXBlcyBzdWNoCmFuICBpbnRlcmVwcmV0YXRpb24gICBpcyAgbm90ICByZWZsZWN0ZWQgICBpbiAgdGhlICBzeW5vcHNpcyAgIG9mICB0aGUKPGNvZGU+Jmx0O2xpbWl0cyZndDs8L2NvZGU+IGhlYWRlci4KCiAgICAgICAgPC9wPgogICAgICAgIDxwPgoKVGhlIGFic2VuY2UgIG9mIHNwZWNpYWxpemF0aW9ucyBvZiB0aGUgdGVtcGxhdGUgIG9uIGN2LXF1YWxpZmllZCBmb3JtcwpvZiAgZnVuZGFtZW50YWwgdHlwZXMgIG1ha2VzIDxjb2RlPm51bWVyaWNfbGltaXRzPC9jb2RlPiAgZGlmZmljdWx0IHRvCnVzZSBpbiBnZW5lcmljICBjb2RlIHdoZXJlIHRoZSBjb25zdG5lc3MgKG9yIHZvbGF0aWxpdHkpICBvZiBhIHR5cGUgaXMKbm90ICBhbHdheXMgIGltbWVkaWF0ZWx5ICBhcHBhcmVudC4gIEluICBzdWNoICBjb250ZXh0cywgIHRoZSAgcHJpbWFyeQp0ZW1wbGF0ZSAgZW5kcyAgIHVwICBiZWluZyAgIGluc3RhbnRpYXRlZCAgaW5zdGVhZCAgb2YgICB0aGUgIHByb3ZpZGVkCnNwZWNpYWxpemF0aW9uLCB0eXBpY2FsbHkgeWllbGRpbmcgdW5leHBlY3RlZCBiZWhhdmlvci4KCiAgICAgICAgPC9wPgogICAgICAgIDxwPgoKUmVxdWlyZSAgIHRoYXQgIHNwZWNpYWxpemF0aW9ucyAgIG9mICAgPGNvZGU+bnVtZXJpY19saW1pdHM8L2NvZGU+ICBvbgpjdi1xdWFsaWZpZWQgZnVuZGFtZW50YWwgdHlwZXMgaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgdGhvc2Ugb24gdGhlCnVucXVhbGlmZWQgZm9ybXMgb2YgdGhlIHNhbWUgdHlwZXMuCgogICAgICAgIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CiAgICAgICAgPHA+CgpBZGQgIHRvICB0aGUgICBzeW5vcHNpcyAgb2YgIHRoZSAgPGNvZGU+Jmx0O2xpbWl0cyZndDs8L2NvZGU+ICBoZWFkZXIsCmltbWVkaWF0ZWx5ICBiZWxvdyAgdGhlICBkZWNsYXJhdGlvbiAgb2YgIHRoZSAgcHJpbWFyeSAgdGVtcGxhdGUsICB0aGUKZm9sbG93aW5nOgo8L3A+Cgo8cHJlPgp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsgY2xhc3MgbnVtZXJpY19saW1pdHMmbHQ7Y29uc3QgVCZndDs7CnRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OyBjbGFzcyBudW1lcmljX2xpbWl0cyZsdDt2b2xhdGlsZSBUJmd0OzsKdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7IGNsYXNzIG51bWVyaWNfbGltaXRzJmx0O2NvbnN0IHZvbGF0aWxlIFQmZ3Q7OwoKPC9wcmU+CgogICAgICAgIDxwPgoKQWRkICBhIG5ldyBwYXJhZ3JhcGggIHRvIHRoZSAgZW5kIG9mICAxOC4yLjEuMSBbbnVtZXJpYy5saW1pdHNdLCB3aXRoICB0aGUgZm9sbG93aW5nCnRleHQ6CgogICAgICAgIDwvcD4KICAgICAgICA8cD4KCi1uZXctcGFyYS0gVGhlICB2YWx1ZSBvZiBlYWNoIG1lbWJlciAgb2YgYSA8Y29kZT5udW1lcmljX2xpbWl0czwvY29kZT4Kc3BlY2lhbGl6YXRpb24gb24gYSAgY3YtcXVhbGlmaWVkIFQgaXMgZXF1YWwgdG8gdGhlICB2YWx1ZSBvZiB0aGUgc2FtZQptZW1iZXIgb2YgPGNvZGU+bnVtZXJpY19saW1pdHMmbHQ7VCZndDs8L2NvZGU+LgoKICAgICAgICA8L3A+Cgo8cD48aT5bClBvcnRsYW5kOiBNYXJ0aW4gd2lsbCBjbGFyaWZ5IHRoYXQgdXNlci1kZWZpbmVkIHR5cGVzIGdldCBjdi1zcGVjaWFsaXphdGlvbnMKYXV0b21hdGljYWxseS4KXTwvaT48L3A+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI1NjEiPjwvYT41NjEuIGluc2VydGVyIG92ZXJseSBnZW5lcmljPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI0LjQuMi42LjUgW2luc2VydGVyXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBIb3dhcmQgSGlubmFudCA8Yj5EYXRlOjwvYj4gMjAwNi0wMi0yMTwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGRlY2xhcmF0aW9uIG9mIDx0dD5zdGQ6Omluc2VydGVyPC90dD4gaXM6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIENvbnRhaW5lciwgY2xhc3MgSXRlcmF0b3ImZ3Q7Cmluc2VydF9pdGVyYXRvciZsdDtDb250YWluZXImZ3Q7Cmluc2VydGVyKENvbnRhaW5lciZhbXA7IHgsIEl0ZXJhdG9yIGkpOwo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KVGhlIHRlbXBsYXRlIHBhcmFtZXRlciA8dHQ+SXRlcmF0b3I8L3R0PiBpbiB0aGlzIGZ1bmN0aW9uIGlzIGNvbXBsZXRlbHkgdW5yZWxhdGVkCnRvIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgPHR0PkNvbnRhaW5lcjwvdHQ+IHdoZW4gaXQgZG9lc24ndCBuZWVkIHRvIGJlLiAgVGhpcwpjYXVzZXMgdGhlIGNvZGUgdG8gYmUgb3Zlcmx5IGdlbmVyaWMuICBUaGF0IGlzLCBhbnkgdHlwZSBhdCBhbGwgY2FuIGJlIGRlZHVjZWQKYXMgPHR0Pkl0ZXJhdG9yPC90dD4sIHdoZXRoZXIgb3Igbm90IGl0IG1ha2VzIHNlbnNlLiAgTm93IHRoZSBzYW1lIGlzIHRydWUgb2YKPHR0PkNvbnRhaW5lcjwvdHQ+LiAgSG93ZXZlciwgZm9yIGV2ZXJ5IGZyZWUgKHVuY29uc3RyYWluZWQpIHRlbXBsYXRlIHBhcmFtZXRlcgpvbmUgaGFzIGluIGEgc2lnbmF0dXJlLCB0aGUgb3Bwb3J0dW5pdHkgZm9yIGEgbWlzdGFrZW4gYmluZGluZyBncm93cyBnZW9tZXRyaWNhbGx5Lgo8L3A+Cgo8cD4KSXQgd291bGQgYmUgbXVjaCBiZXR0ZXIgaWYgPHR0Pmluc2VydGVyPC90dD4gaGFkIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlIGluc3RlYWQ6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIENvbnRhaW5lciZndDsKaW5zZXJ0X2l0ZXJhdG9yJmx0O0NvbnRhaW5lciZndDsKaW5zZXJ0ZXIoQ29udGFpbmVyJmFtcDsgeCwgdHlwZW5hbWUgQ29udGFpbmVyOjppdGVyYXRvciBpKTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+Ck5vdyB0aGVyZSBpcyBvbmx5IG9uZSBmcmVlIHRlbXBsYXRlIHBhcmFtZXRlci4gIEFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvCjx0dD5pbnNlcnRlcjwvdHQ+IG11c3QgYmUgaW1wbGljaXRseSBjb252ZXJ0aWJsZSB0byB0aGUgY29udGFpbmVyJ3MgaXRlcmF0b3IsCmVsc2UgdGhlIGNhbGwgd2lsbCBub3QgYmUgYSB2aWFibGUgb3ZlcmxvYWQgKGFsbG93aW5nIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUKb3ZlcmxvYWQgc2V0IHRvIHRha2UgcHJlY2VkZW5jZSkuICBGdXJ0aGVybW9yZSwgdGhlIGZpcnN0IHBhcmFtZXRlciBtdXN0IGhhdmUgYQpuZXN0ZWQgdHlwZSBuYW1lZCA8dHQ+aXRlcmF0b3I8L3R0Piwgb3IgYWdhaW4gdGhlIGJpbmRpbmcgdG8gPHR0PnN0ZDo6aW5zZXJ0ZXI8L3R0PgppcyBub3QgdmlhYmxlLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSBjdXJyZW50IHNpdHVhdGlvbgp3aGVyZSBhbnkgdHlwZSBjYW4gYmluZCB0byA8dHQ+Q29udGFpbmVyPC90dD4gb3IgPHR0Pkl0ZXJhdG9yPC90dD4gYW5kIHRob3NlCnR5cGVzIG5lZWQgbm90IGJlIGFueXRoaW5nIGNsb3NlbHkgcmVsYXRlZCB0byBjb250YWluZXJzIG9yIGl0ZXJhdG9ycy4KPC9wPgoKPHA+ClRoaXMgY2FuIGFkdmVyc2VseSBpbXBhY3Qgd2VsbCB3cml0dGVuIGNvZGUuICBDb25zaWRlcjoKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT4jaW5jbHVkZSAmbHQ7aXRlcmF0b3ImZ3Q7CiNpbmNsdWRlICZsdDtzdHJpbmcmZ3Q7CgpuYW1lc3BhY2UgbXkKewoKdGVtcGxhdGUgJmx0O2NsYXNzIFN0cmluZyZndDsKc3RydWN0IG15X3R5cGUge307CgpzdHJ1Y3QgbXlfY29udGFpbmVyCnsKdGVtcGxhdGUgJmx0O2NsYXNzIFN0cmluZyZndDsKdm9pZCBwdXNoX2JhY2soY29uc3QgbXlfdHlwZSZsdDtTdHJpbmcmZ3Q7JmFtcDspOwp9OwoKdGVtcGxhdGUgJmx0O2NsYXNzIFN0cmluZyZndDsKdm9pZCBpbnNlcnRlcihjb25zdCBteV90eXBlJmx0O1N0cmluZyZndDsmYW1wOyBtLCBteV9jb250YWluZXImYW1wOyBjKSB7Yy5wdXNoX2JhY2sobSk7fQoKfSAgLy8gbXkKCmludCBtYWluKCkKewogICAgbXk6Om15X2NvbnRhaW5lciBjOwogICAgbXk6Om15X3R5cGUmbHQ7c3RkOjpzdHJpbmcmZ3Q7IG07CiAgICBpbnNlcnRlcihtLCBjKTsKfQo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KVG9kYXkgdGhpcyBjb2RlIGZhaWxzIGJlY2F1c2UgdGhlIGNhbGwgdG8gPHR0Pmluc2VydGVyPC90dD4gYmluZHMgdG8KPHR0PnN0ZDo6aW5zZXJ0ZXI8L3R0PiBpbnN0ZWFkIG9mIHRvIDx0dD5teTo6aW5zZXJ0ZXI8L3R0Pi4gIEhvd2V2ZXIgd2l0aCB0aGUKcHJvcG9zZWQgY2hhbmdlIDx0dD5zdGQ6Omluc2VydGVyPC90dD4gd2lsbCBubyBsb25nZXIgYmUgYSB2aWFibGUgZnVuY3Rpb24gd2hpY2gKbGVhdmVzIG9ubHkgPHR0Pm15OjppbnNlcnRlcjwvdHQ+IGluIHRoZSBvdmVybG9hZCByZXNvbHV0aW9uIHNldC4gIEV2ZXJ5dGhpbmcKd29ya3MgYXMgdGhlIGNsaWVudCBpbnRlbmRzLgo8L3A+Cgo8cD4KVG8gbWFrZSBtYXR0ZXJzIGEgbGl0dGxlIG1vcmUgaW5zaWRpb3VzLCB0aGUgYWJvdmUgZXhhbXBsZSB3b3JrcyB0b2RheSBpZiB5b3UKc2ltcGx5IGNoYW5nZSB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYW4gcnZhbHVlOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPiAgICBpbnNlcnRlcihteTo6bXlfdHlwZSgpLCBjKTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+Ckl0IHdpbGwgYWxzbyB3b3JrIGlmIGluc3RhbnRpYXRlZCB3aXRoIHNvbWUgc3RyaW5nIHR5cGUgb3RoZXIgdGhhbgo8dHQ+c3RkOjpzdHJpbmc8L3R0PiAob3IgYW55IG90aGVyIDx0dD5zdGQ8L3R0PiB0eXBlKS4gIEl0IHdpbGwgYWxzbyB3b3JrIGlmCjx0dD4mbHQ7aXRlcmF0b3ImZ3Q7PC90dD4gaGFwcGVucyB0byBub3QgZ2V0IGluY2x1ZGVkLgo8L3A+Cgo8cD4KQW5kIGl0IHdpbGwgZmFpbCBhZ2FpbiBmb3Igc3VjaCBpbm9jdW91cyByZWFvbnMgYXMgPHR0Pm15X3R5cGU8L3R0PiBvcgo8dHQ+bXlfY29udGFpbmVyPC90dD4gcHJpdmF0ZWx5IGRlcml2aW5nIGZyb20gYW55IDx0dD5zdGQ8L3R0PiB0eXBlLgo8L3A+Cgo8cD4KSXQgc2VlbXMgdW5mb3J0dW5hdGUgdGhhdCBzdWNoIHNpbXBsZSBjaGFuZ2VzIGluIHRoZSBjbGllbnQncyBjb2RlIGNhbiByZXN1bHQKaW4gc3VjaCByYWRpY2FsbHkgZGlmZmVyaW5nIGJlaGF2aW9yLgo8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAyNC4yOgo8L3A+Cgo8YmxvY2txdW90ZT48cD4KPGI+MjQuMiBIZWFkZXI8L2I+IDx0dD4mbHQ7aXRlcmF0b3ImZ3Q7PC90dD4gPGI+c3lub3BzaXM8L2I+CjwvcD4KPGJsb2NrcXVvdGU+PHByZT4uLi4KdGVtcGxhdGUgJmx0O2NsYXNzIENvbnRhaW5lcjxkZWw+LCBjbGFzcyBJdGVyYXRvcjwvZGVsPiZndDsKICAgaW5zZXJ0X2l0ZXJhdG9yJmx0O0NvbnRhaW5lciZndDsgaW5zZXJ0ZXIoQ29udGFpbmVyJmFtcDsgeCwgPGRlbD5JdGVyYXRvcjwvZGVsPiA8aW5zPnR5cGVuYW1lIENvbnRhaW5lcjo6aXRlcmF0b3I8L2lucz4gaSk7Ci4uLgo8L3ByZT48L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCjxwPgpDaGFuZ2UgMjQuNC4yLjU6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgo8Yj4yNC40LjIuNSBDbGFzcyB0ZW1wbGF0ZTwvYj4gPHR0Pmluc2VydF9pdGVyYXRvcjwvdHQ+PC9wPgo8YmxvY2txdW90ZT48cHJlPi4uLgp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgQ29udGFpbmVyPGRlbD4sIGNsYXNzIEl0ZXJhdG9yPC9kZWw+Jmd0OwogICBpbnNlcnRfaXRlcmF0b3ImbHQ7Q29udGFpbmVyJmd0OyBpbnNlcnRlcihDb250YWluZXImYW1wOyB4LCA8ZGVsPkl0ZXJhdG9yPC9kZWw+IDxpbnM+dHlwZW5hbWUgQ29udGFpbmVyOjppdGVyYXRvcjwvaW5zPiBpKTsKLi4uCjwvcHJlPjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAyNC40LjIuNi41Ogo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CjxiPjI0LjQuMi42LjU8L2I+IDx0dD5pbnNlcnRlcjwvdHQ+CjwvcD4KPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgQ29udGFpbmVyPGRlbD4sIGNsYXNzIEluc2VydGVyPC9kZWw+Jmd0OwogICBpbnNlcnRfaXRlcmF0b3ImbHQ7Q29udGFpbmVyJmd0OyBpbnNlcnRlcihDb250YWluZXImYW1wOyB4LCA8ZGVsPkluc2VydGVyPC9kZWw+IDxpbnM+dHlwZW5hbWUgQ29udGFpbmVyOjppdGVyYXRvcjwvaW5zPiBpKTsKPC9wcmU+CjxibG9ja3F1b3RlPjxwPgotMS0gPGk+UmV0dXJuczo8L2k+IDx0dD5pbnNlcnRfaXRlcmF0b3ImbHQ7Q29udGFpbmVyJmd0Oyh4LDxkZWw+dHlwZW5hbWUgQ29udGFpbmVyOjppdGVyYXRvcig8L2RlbD5pPGRlbD4pPC9kZWw+KTwvdHQ+Lgo8L3A+PC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+CgoKCjxwPjxpPlsKS29uYSAoMjAwNyk6IFRoaXMgaXNzdWUgd2lsbCBwcm9iYWJseSBiZSBhZGRyZXNzZWQgYXMgYSBwYXJ0IG9mIHRoZQpjb25jZXB0cyBvdmVyaGF1bCBvZiB0aGUgbGlicmFyeSBhbnl3YXksIGJ1dCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBpcwpjb3JyZWN0IGluIHRoZSBhYnNlbmNlIG9mIGNvbmNlcHRzLiBQcm9wb3NlZCBEaXNwb3NpdGlvbjogUmVhZHkKXTwvaT48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTYyIj48L2E+NTYyLiBzdHJpbmdidWYgY3RvciBpbmVmZmljaWVudDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy43IFtzdHJpbmcuc3RyZWFtc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDA2LTAyLTIzPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNzdHJpbmcuc3RyZWFtcyI+aXNzdWVzPC9hPiBpbiBbc3RyaW5nLnN0cmVhbXNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgogICAgICAgIDxwPgoKRm9yICBiZXR0ZXIgZWZmaWNpZW5jeSwgIHRoZSByZXF1aXJlbWVudCAgb24gdGhlICBzdHJpbmdidWYgIGN0b3IgdGhhdAp0YWtlcyAgYSAgc3RyaW5nICBhcmd1bWVudCAgc2hvdWxkICBiZSAgbG9vc2VuZWQgIHVwICB0byAgbGV0ICBpdCAgc2V0Cjxjb2RlPmVwcHRyKCk8L2NvZGU+ICBiZXlvbmQgIGp1c3QgICBvbmUgIHBhc3QgIHRoZSAgbGFzdCAgaW5pdGlhbGl6ZWQKY2hhcmFjdGVyICBqdXN0IGxpa2UgIDxjb2RlPm92ZXJmbG93KCk8L2NvZGU+IGhhcyAgYmVlbiBjaGFuZ2VkICB0byBiZQphbGxvd2VkICB0byAgZG8gICAoc2VlICBpc3N1ZSAgNDMyKS4gIFRoYXQgIHdheSAgIHRoZSAgZmlyc3QgIGNhbGwgIHRvCjxjb2RlPnNwdXRjKCk8L2NvZGU+IG9uICBhbiBvYmplY3Qgd29uJ3QgIG5lY2Vzc2FyaWx5IGNhdXNlIGEgIGNhbGwgdG8KPGNvZGU+b3ZlcmZsb3c8L2NvZGU+LiBUaGUgY29ycmVzcG9uZGluZyBjaGFuZ2UgIHNob3VsZCBiZSBtYWRlIHRvIHRoZQpzdHJpbmcgb3ZlcmxvYWQgb2YgdGhlIDxjb2RlPnN0cigpPC9jb2RlPiBtZW1iZXIgZnVuY3Rpb24uCgogICAgICAgIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CiAgICAgICAgPHA+CgpDaGFuZ2UgMjcuNy4xLjEsIHAzIG9mIHRoZSBXb3JraW5nIERyYWZ0LCBOMTgwNCwgYXMgZm9sbG93czoKCiAgICAgICAgPC9wPgoKPGJsb2NrcXVvdGU+PHByZT5leHBsaWNpdCBiYXNpY19zdHJpbmdidWYoY29uc3QgYmFzaWNfc3RyaW5nJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7JmFtcDsgPGk+czxkZWw+dHI8L2RlbD48L2k+LAogICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPGk+d2hpY2g8L2k+ID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7CjwvcHJlPgoKPHA+Ci0zLSA8aT5FZmZlY3RzOjwvaT4gIENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIDx0dD5iYXNpY19zdHJpbmdidWY8L3R0PiwKaW5pdGlhbGl6aW5nIHRoZSBiYXNlIGNsYXNzIHdpdGggPHR0PmJhc2ljX3N0cmVhbWJ1ZigpPC90dD4KKDI3LjUuMi4xKSwgYW5kIGluaXRpYWxpemluZyA8dHQ+PGk+bW9kZTwvaT48L3R0PiB3aXRoIDx0dD48aT53aGljaDwvaT48L3R0Pi4KVGhlbiA8aW5zPmNhbGxzIDx0dD5zdHIoPGk+czwvaT4pPC90dD4uPC9pbnM+IDxkZWw+Y29waWVzIHRoZSBjb250ZW50IG9mCjxpPnN0cjwvaT4gaW50byB0aGUgPHR0PmJhc2ljX3N0cmluZ2J1ZjwvdHQ+IHVuZGVybHlpbmcgY2hhcmFjdGVyCnNlcXVlbmNlLiBJZiA8dHQ+PGk+d2hpY2g8L2k+ICZhbXA7IGlvc19iYXNlOjpvdXQ8L3R0PiBpcyB0cnVlLCBpbml0aWFsaXplcyB0aGUKb3V0cHV0IHNlcXVlbmNlIHN1Y2ggdGhhdCA8dHQ+cGJhc2UoKTwvdHQ+IHBvaW50cyB0byB0aGUgZmlyc3QgdW5kZXJseWluZwpjaGFyYWN0ZXIsIDx0dD5lcHB0cigpPC90dD4gcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0IHVuZGVybHlpbmcgY2hhcmFjdGVyLCBhbmQKPHR0PnBwdHIoKTwvdHQ+IGlzIGVxdWFsIHRvIDx0dD5lcHB0cigpPC90dD4gaWYgPHR0PjxpPndoaWNoPC9pPiAmYW1wOyBpb3NfYmFzZTo6YXRlPC90dD4KaXMgdHJ1ZSwgb3RoZXJ3aXNlIDx0dD5wcHRyKCk8L3R0PiBpcyBlcXVhbCB0byA8dHQ+cGJhc2UoKTwvdHQ+LiBJZgo8dHQ+d2hpY2ggJmFtcDsgaW9zX2Jhc2U6OmluPC90dD4gaXMgdHJ1ZSwgaW5pdGlhbGl6ZXMgdGhlIGlucHV0IHNlcXVlbmNlIHN1Y2gKdGhhdCA8dHQ+ZWJhY2soKTwvdHQ+IGFuZCA8dHQ+Z3B0cigpPC90dD4gcG9pbnQgdG8gdGhlIGZpcnN0IHVuZGVybHlpbmcgCmNoYXJhY3RlciBhbmQgPHR0PmVncHRyKCk8L3R0PiBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QgdW5kZXJseWluZyBjaGFyYWN0ZXIuPC9kZWw+CjwvcD4KPC9ibG9ja3F1b3RlPgoKICAgICAgICA8cD4KCkNoYW5nZSB0aGUgRWZmZWN0cyBjbGF1c2Ugb2YgdGhlIDxjb2RlPnN0cigpPC9jb2RlPiBpbiAyNy43LjEuMiwgcDIgdG8KcmVhZDoKCiAgICAgICAgPC9wPgo8YmxvY2txdW90ZT4KPHA+Ci0yLSA8aT5FZmZlY3RzOjwvaT4gQ29waWVzIHRoZSBjb250ZW50PGlucz5zPC9pbnM+IG9mIDx0dD48aT5zPC9pPjwvdHQ+IGludG8gdGhlCjx0dD5iYXNpY19zdHJpbmdidWY8L3R0PiB1bmRlcmx5aW5nIGNoYXJhY3RlciBzZXF1ZW5jZSA8aW5zPmFuZAppbml0aWFsaXplcyB0aGUgaW5wdXQgYW5kIG91dHB1dCBzZXF1ZW5jZXMgYWNjb3JkaW5nIHRvIDx0dD48aT5tb2RlPC9pPjwvdHQ+PC9pbnM+Lgo8ZGVsPklmCjx0dD48aT5tb2RlPC9pPiAmYW1wOyBpb3NfYmFzZTo6b3V0PC90dD4gaXMgdHJ1ZSwgaW5pdGlhbGl6ZXMgdGhlIG91dHB1dApzZXF1ZW5jZSBzdWNoIHRoYXQgPHR0PnBiYXNlKCk8L3R0PiBwb2ludHMgdG8gdGhlIGZpcnN0IHVuZGVybHlpbmcgY2hhcmFjdGVyLCAKPHR0PmVwcHRyKCk8L3R0PiBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QgdW5kZXJseWluZyBjaGFyYWN0ZXIsIGFuZCA8dHQ+cHB0cigpPC90dD4KaXMgZXF1YWwgdG8gPHR0PmVwcHRyKCk8L3R0PiBpZiA8dHQ+PGk+bW9kZTwvaT4gJmFtcDsgaW9zX2Jhc2U6OmluPC90dD4KaXMgdHJ1ZSwgb3RoZXJ3aXNlIDx0dD5wcHRyKCk8L3R0PiBpcyBlcXVhbCB0byA8dHQ+cGJhc2UoKTwvdHQ+LiBJZgo8dHQ+bW9kZSAmYW1wOyBpb3NfYmFzZTo6aW48L3R0PiBpcyB0cnVlLCBpbml0aWFsaXplcyB0aGUgaW5wdXQgc2VxdWVuY2UgCnN1Y2ggdGhhdCA8dHQ+ZWJhY2soKTwvdHQ+IGFuZCA8dHQ+Z3B0cigpPC90dD4gcG9pbnQgdG8gdGhlIGZpcnN0IHVuZGVybHlpbmcKY2hhcmFjdGVyIGFuZCA8dHQ+ZWdwdHIoKTwvdHQ+IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdCB1bmRlcmx5aW5nIGNoYXJhY3Rlci48L2RlbD4KPC9wPgoKICAgICAgICA8cD4KCjxpbnM+LTMtIDxpPlBvc3Rjb25kaXRpb25zOjwvaT4gIElmICA8Y29kZT5tb2RlICAmYW1wOyBpb3NfYmFzZTo6b3V0PC9jb2RlPiAgaXMgIHRydWUsCjxjb2RlPnBiYXNlKCk8L2NvZGU+ICBwb2ludHMgIHRvIHRoZSAgZmlyc3QgIHVuZGVybHlpbmcgY2hhcmFjdGVyICBhbmQKPGNvZGU+KGVwcHRyKCkgJmd0Oz0gcGJhc2UoKSArIHMuc2l6ZSgpKTwvY29kZT4gaG9sZHM7IGluIGFkZGl0aW9uLCBpZgo8Y29kZT5tb2RlICZhbXA7IGlvc19iYXNlOjppbjwvY29kZT4gaXMgdHJ1ZSwgPGNvZGU+KHBwdHIoKSA9PSBwYmFzZSgpCisgcy5kYXRhKCkpPC9jb2RlPiAgaG9sZHMsIG90aGVyd2lzZSA8Y29kZT4ocHB0cigpICA9PSBwYmFzZSgpKTwvY29kZT4KaXMgICB0cnVlLiAgICBJZiAgPGNvZGU+bW9kZSAgICZhbXA7ICAgaW9zX2Jhc2U6OmluPC9jb2RlPiAgaXMgICB0cnVlLAo8Y29kZT5lYmFjaygpPC9jb2RlPiAgcG9pbnRzIHRvICB0aGUgZmlyc3QgIHVuZGVybHlpbmcgIGNoYXJhY3RlciwgYW5kCjxjb2RlPihncHRyKCkgID09ICBlYmFjaygpKTwvY29kZT4gIGFuZCAgPGNvZGU+KGVncHRyKCkgPT0gIGViYWNrKCkgICsKcy5zaXplKCkpPC9jb2RlPiBob2xkLjwvaW5zPgoKICAgICAgICA8L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48aT5bCktvbmEgKDIwMDcpIE1vdmVkIHRvIFJlYWR5LgpdPC9pPjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI1NjMiPjwvYT41NjMuIHN0cmluZ2J1ZiBzZWVraW5nIGZyb20gZW5kPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjcuMS40IFtzdHJpbmdidWYudmlydHVhbHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwNi0wMi0yMzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjc3RyaW5nYnVmLnZpcnR1YWxzIj5pc3N1ZXM8L2E+IGluIFtzdHJpbmdidWYudmlydHVhbHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KQWNjb3JkaW5nIHRvICBUYWJsZSA5MiAgKHVuY2hhbmdlZCBieSBpc3N1ZSAgNDMyKSwgd2hlbiAgPGNvZGU+KHdheSA9PQplbmQpPC9jb2RlPiB0aGUgIDxjb2RlPm5ld29mZjwvY29kZT4gdmFsdWUgaW4gb3V0IG1vZGUgIGlzIGNvbXB1dGVkIGFzCnRoZSBkaWZmZXJlbmNlIGJldHdlZW4gPGNvZGU+ZXBwdHIoKTwvY29kZT4gYW5kIDxjb2RlPnBiYXNlKCk8L2NvZGU+Lgo8L3A+CiAgICAgICAgPHA+CgpUaGlzIHZhbHVlICBpc24ndCBtZWFuaW5nZnVsIHVubGVzcyB0aGUgIHZhbHVlIG9mIDxjb2RlPmVwcHRyKCk8L2NvZGU+CmNhbiBiZSAgcHJlY2lzZWx5IGNvbnRyb2xsZWQgYnkgYSAgcHJvZ3JhbS4gIFRoYXQgdXNlZCAgdG8gYmUgcG9zc2libGUKdW50aWwgIHdlIGFjY2VwdGVkIHRoZSAgcmVzb2x1dGlvbiBvZiAgaXNzdWUgNDMyLCAgYnV0IHNpbmNlICB0aGVuIHRoZQpyZXF1aXJlbWVudHMgb24gPGNvZGU+b3ZlcmZsb3coKTwvY29kZT4gaGF2ZSAgYmVlbiByZWxheGVkIHRvIGFsbG93IGl0CnRvICBtYWtlICBtb3JlIHRoYW4gIDEgIHdyaXRlICBwb3NpdGlvbiAgYXZhaWxhYmxlIChpLmUuLCAgYnkgIHNldHRpbmcKPGNvZGU+ZXBwdHIoKTwvY29kZT4gICAgIHRvICAgICBzb21lICAgICB1bnNwZWNpZmllZCAgICB2YWx1ZSAgICAgcGFzdAo8Y29kZT5wcHRyKCk8L2NvZGU+KS4gICAgICBTbyAgICBhZnRlciAgICAgdGhlICAgIGZpcnN0ICAgICBjYWxsICAgIHRvCjxjb2RlPm92ZXJmbG93KCk8L2NvZGU+ICBwb3NpdGlvbmluZyB0aGUgIG91dHB1dCBzZXF1ZW5jZSAgcmVsYXRpdmUgdG8KZW5kIHdpbGwgaGF2ZSB1bnNwZWNpZmllZCByZXN1bHRzLgoKICAgICAgICA8L3A+CiAgICAgICAgPHA+CgpJbiAgYWRkaXRpb24sICBpbiA8Y29kZT5pbnxvdXQ8L2NvZGU+ICBtb2RlLCAgc2luY2UgPGNvZGU+KGVncHRyKCkgID09CmVwcHRyKCkpPC9jb2RlPiBuZWVkIG5vdCBob2xkLCB0aGVyZSBhcmUgdHdvIGRpZmZlcmVudCBwb3NzaWJsZSB2YWx1ZXMKZm9yICAgPGNvZGU+bmV3b2ZmPC9jb2RlPjogICAgPGNvZGU+ZXBwdHIoKSAgIC0gICBwYmFzZSgpPC9jb2RlPiAgIGFuZAo8Y29kZT5lZ3B0cigpIC0gZWJhY2soKTwvY29kZT4uCgogICAgICAgIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CiAgICAgICAgPHA+CgpDaGFuZ2UgdGhlIDxjb2RlPm5ld29mZjwvY29kZT4gIGNvbHVtbiBpbiB0aGUgbGFzdCByb3cgIG9mIFRhYmxlIDk0IHRvCnJlYWQ6CgogICAgICAgIDwvcD4KPGJsb2NrcXVvdGU+PHA+Cgp0aGUgPGRlbD5lbmQ8L2RlbD4gPGlucz5oaWdoIG1hcms8L2lucz4gcG9pbnRlciBtaW51cyB0aGUgYmVnaW5uaW5nIApwb2ludGVyICg8Y29kZT48ZGVsPnhlbmQ8L2RlbD4gPGlucz5oaWdoX21hcms8L2lucz4gLSB4YmVnPC9jb2RlPikuCgo8L3A+PC9ibG9ja3F1b3RlPgoKCjxwPjxpPlsKS29uYSAoMjAwNykgTW92ZWQgdG8gUmVhZHkuCl08L2k+PC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU2NiI+PC9hPjU2Ni4gYXJyYXkgZm9ybXMgb2YgdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gdW5kZWZpbmVkIGZvciB6ZXJvLWVsZW1lbnQgYXJyYXlzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjYuMS4zIFtpc3RyZWFtLnVuZm9ybWF0dGVkXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDYtMDItMjM8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2lzdHJlYW0udW5mb3JtYXR0ZWQiPmlzc3VlczwvYT4gaW4gW2lzdHJlYW0udW5mb3JtYXR0ZWRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgogICAgICAgIDxwPgoKVGhlIGFycmF5IGZvcm1zIG9mIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucyBkb24ndCBoYXZlIHdlbGwtZGVmaW5lZApzZW1hbnRpY3MgZm9yIHplcm8tZWxlbWVudCAgYXJyYXlzIGluIGEgY291cGxlIG9mICBjYXNlcy4gVGhlIGFmZmVjdGVkCm9uZXMgKDx0dD5pc3RyZWFtOjpnZXQoKTwvdHQ+IGFuZCAgPHR0PmdldGxpbmUoKTwvdHQ+KSBhcmUgc3VwcG9zZWQgdG8KdGVybWluYXRlIHdoZW4gPHR0PihuIC0gMSk8L3R0PiBjaGFyYWN0ZXJzIGFyZSBzdG9yZWQsIHdoaWNoIG9idmlvdXNseQpjYW4gbmV2ZXIgYmUgdHJ1ZSB3aGVuIDx0dD4obiA9PSAwKTwvdHQ+IHRvIHN0YXJ0IHdpdGguCgogICAgICAgIDwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CiAgICAgICAgPHA+CgpJICBwcm9wb3NlICB0aGUgZm9sbG93aW5nICBjaGFuZ2VzICAocmVmZXJlbmNlcyAgYXJlICByZWxhdGl2ZSB0byAgdGhlCldvcmtpbmcgRHJhZnQgKGRvY3VtZW50IE4xODA0KS4KCiAgICAgICAgPC9wPgogICAgICAgIDxwPgoKQ2hhbmdlIDI3LjYuMS4zLCBwOCAoPHR0PmlzdHJlYW06OmdldCgpPC90dD4pLCBidWxsZXQgMSBhcyBmb2xsb3dzOgoKICAgICAgICA8L3A+CiAgICAgICAgPGJsb2NrcXVvdGU+CiAgICAgICAgICAgIDxwPgoKPGlucz5pZiAgPHR0PihuICAmbHQ7IDEpPC90dD4gIGlzICB0cnVlICBvciAgPC9pbnM+IDx0dD4obiAgLSAgMSk8L3R0PgpjaGFyYWN0ZXJzIGFyZSBzdG9yZWQ7CgogICAgICAgICAgICA8L3A+CiAgICAgICAgPC9ibG9ja3F1b3RlPgogICAgICAgIDxwPgoKU2ltaWxhcmx5LCBjaGFuZ2UgIDI3LjYuMS4zLCBwMTggKDx0dD5pc3RyZWFtOjpnZXRsaW5lKCk8L3R0PiksIGJ1bGxldAozIGFzIGZvbGxvd3M6CgogICAgICAgIDwvcD4KICAgICAgICA8YmxvY2txdW90ZT4KICAgICAgICAgICAgPHA+Cgo8aW5zPjx0dD4obiAmbHQ7IDEpPC90dD4gaXMgIHRydWUgb3IgPC9pbnM+PHR0PihuIC0gMSk8L3R0PiBjaGFyYWN0ZXJzCmFyZSAgICAgc3RvcmVkICAgICAoaW4gICAgd2hpY2ggICAgIGNhc2UgICAgIHRoZSAgICBmdW5jdGlvbiAgICAgY2FsbHMKPHR0PnNldHN0YXRlKGZhaWxiaXQpPC90dD4pLgoKICAgICAgICAgICAgPC9wPgogICAgICAgIDwvYmxvY2txdW90ZT4KICAgICAgICA8cD4KCkZpbmFsbHksIGNoYW5nZSBwMjEgYXMgZm9sbG93czoKCiAgICAgICAgPC9wPgogICAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICA8cD4KCkluIGFueSAgY2FzZSwgPGlucz5wcm92aWRlZCAgPHR0PihuICZndDsgMCk8L3R0PiAgaXMgdHJ1ZSwgIDwvaW5zPml0IHRoZW4Kc3RvcmVzICBhIG51bGwgIGNoYXJhY3RlciAgKHVzaW5nIGNoYXJUKCkpICBpbnRvICB0aGUgbmV4dCAgc3VjY2Vzc2l2ZQpsb2NhdGlvbiBvZiB0aGUgYXJyYXkuCgogICAgICAgICAgICA8L3A+CiAgICAgICAgPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU2NyI+PC9hPjU2Ny4gc3RyZWFtYnVmIGluc2VydGVyIGFuZCBleHRyYWN0b3Igc2hvdWxkIGJlIHVuZm9ybWF0dGVkPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjYgW2lvc3RyZWFtLmZvcm1hdF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDA2LTAyLTI1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpb3N0cmVhbS5mb3JtYXQiPmlzc3VlczwvYT4gaW4gW2lvc3RyZWFtLmZvcm1hdF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CiAgICAgICAgPHA+CgpJc3N1ZSAgNjAgZXhwbGljaXRseSBtYWRlICB0aGUgZXh0cmFjdG9yICBhbmQgaW5zZXJ0ZXIgIG9wZXJhdG9ycyB0aGF0CnRha2UgYSAgPHR0PmJhc2ljX3N0cmVhbWJ1Zio8L3R0PiBhcmd1bWVudCBmb3JtYXR0ZWQgIGlucHV0IGFuZCBvdXRwdXQKZnVuY3Rpb25zLCAgcmVzcGVjdGl2ZWx5LiAgSSAgYmVsaWV2ZSB0aGF0J3MgIHdyb25nLCBjZXJ0YWlubHkgIGluIHRoZQpjYXNlIG9mICB0aGUgZXh0cmFjdG9yLCBzaW5jZSBmb3JtYXR0ZWQgZnVuY3Rpb25zICBiZWdpbiBieSBleHRyYWN0aW5nCmFuZCAgZGlzY2FyZGluZyAgd2hpdGVzcGFjZS4gIFRoZSAgZXh0cmFjdG9yICBzaG91bGQgIG5vdCBkaXNjYXJkICBhbnkKY2hhcmFjdGVycy4KCiAgICAgICAgPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KICAgICAgICA8cD4KCkkgcHJvcG9zZSB0byAgY2hhbmdlIGVhY2ggb3BlcmF0b3IgdG8gYmVoYXZlICBhcyB1bmZvcm1hdHRlZCBpbnB1dCBhbmQKb3V0cHV0IGZ1bmN0aW9uLCAgcmVzcGVjdGl2ZWx5LiBUaGUgY2hhbmdlcyBiZWxvdyBhcmUgIHJlbGF0aXZlIHRvIHRoZQp3b3JraW5nIGRyYWZ0IGRvY3VtZW50IG51bWJlciBOMTgwNC4KCiAgICAgICAgPC9wPgogICAgICAgIDxwPgoKU3BlY2lmaWNhbGx5LCBjaGFuZ2UgMjcuNi4xLjIuMywgcDE0IGFzIGZvbGxvd3M6CgogICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxibG9ja3F1b3RlPgogICAgICAgIDxwPgoKPGk+RWZmZWN0czwvaT46ICBCZWhhdmVzIGFzICBhPGlucz5uIHVuPC9pbnM+Zm9ybWF0dGVkICBpbnB1dCBmdW5jdGlvbgooYXMgICBkZXNjcmliZWQgICBpbiAgIDxkZWw+MjcuNi4xLjIuMTwvZGVsPjxpbnM+MjcuNi4xLjMsICAgcGFyYWdyYXBoCjE8L2lucz4pLgoKICAgICAgICA8L3A+CiAgICAgICAgICAgIDwvYmxvY2txdW90ZT4KICAgICAgICA8cD4KCkFuZCBjaGFuZ2UgMjcuNi4yLjUuMywgcDcgYXMgZm9sbG93czoKCiAgICAgICAgPC9wPgoKICAgICAgICAgICAgPGJsb2NrcXVvdGU+CiAgICAgICAgPHA+Cgo8aT5FZmZlY3RzPC9pPjogQmVoYXZlcyAgYXMgYTxpbnM+biB1bjwvaW5zPmZvcm1hdHRlZCAgb3V0cHV0IGZ1bmN0aW9uCihhcyAgIGRlc2NyaWJlZCAgIGluICAgPGRlbD4yNy42LjIuNS4xPC9kZWw+PGlucz4yNy42LjIuNiwgICBwYXJhZ3JhcGgKMTwvaW5zPikuCgogICAgICAgIDwvcD4KICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgoKCjxwPjxpPlsKS29uYSAoMjAwNyk6IFByb3Bvc2VkIERpc3Bvc2l0aW9uOiBSZWFkeQpdPC9pPjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI1NzQiPjwvYT41NzQuIERSIDM2OSBDb250cmFkaWN0cyBUZXh0PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjMgW2lvc3RyZWFtLm9iamVjdHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFBldGUgQmVja2VyIDxiPkRhdGU6PC9iPiAyMDA2LTA0LTE4PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNpb3N0cmVhbS5vYmplY3RzIj5pc3N1ZXM8L2E+IGluIFtpb3N0cmVhbS5vYmplY3RzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CmxpYi5pb3N0cmVhbS5vYmplY3RzIHJlcXVpcmVzIHRoYXQgdGhlIHN0YW5kYXJkIHN0cmVhbSBvYmplY3RzIGFyZSBuZXZlcgpkZXN0cm95ZWQsIGFuZCBpdCByZXF1aXJlcyB0aGF0IHRoZXkgYmUgZGVzdHJveWVkLgo8L3A+CjxwPgpEUiAzNjkgYWRkcyB3b3JkcyB0byBzYXkgdGhhdCB3ZSByZWFsbHkgbWVhbiBmb3IgaW9zX2Jhc2U6OkluaXQgb2JqZWN0cyB0byBmb3JjZQpjb25zdHJ1Y3Rpb24gb2Ygc3RhbmRhcmQgc3RyZWFtIG9iamVjdHMuIEl0IGVuZHMsIHRob3VnaCwgd2l0aCB0aGUgcGhyYXNlICJ0aGVzZQpzdHJlYW0gb2JqZWN0cyBzaGFsbCBiZSBkZXN0cm95ZWQgYWZ0ZXIgdGhlIGRlc3RydWN0aW9uIG9mIGR5bmFtaWNhbGx5IC4uLiIuCkhvd2V2ZXIsIHRoZSBydWxlIGZvciBkZXN0cnVjdGlvbiBpcyBzdGF0ZWQgaW4gdGhlIHN0YW5kYXJkOiAiVGhlIG9iamVjdHMgYXJlCm5vdCBkZXN0cm95ZWQgZHVyaW5nIHByb2dyYW0gZXhlY3V0aW9uLiIKPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAyNy4zIFtpb3N0cmVhbS5vYmplY3RzXS8xOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+Ci0yLSBUaGUgb2JqZWN0cyBhcmUgY29uc3RydWN0ZWQgYW5kIHRoZSBhc3NvY2lhdGlvbnMgYXJlIGVzdGFibGlzaGVkIGF0CnNvbWUgdGltZSBwcmlvciB0byBvciBkdXJpbmcgdGhlIGZpcnN0IHRpbWUgYW4gb2JqZWN0IG9mIGNsYXNzCjx0dD5pb3NfYmFzZTo6SW5pdDwvdHQ+IGlzIGNvbnN0cnVjdGVkLCBhbmQgaW4gYW55IGNhc2UgYmVmb3JlIHRoZSBib2R5IG9mIG1haW4KYmVnaW5zIGV4ZWN1dGlvbi48c3VwPjI5MCk8L3N1cD4gVGhlIG9iamVjdHMgYXJlIG5vdCBkZXN0cm95ZWQgZHVyaW5nIHByb2dyYW0KZXhlY3V0aW9uLjxzdXA+MjkxKTwvc3VwPiBJZiBhIHRyYW5zbGF0aW9uIHVuaXQgaW5jbHVkZXMgPHR0PiZsdDtpb3N0cmVhbSZhbXA7dDs8L3R0PiBvciBleHBsaWNpdGx5CmNvbnN0cnVjdHMgYW4gPHR0Pmlvc19iYXNlOjpJbml0PC90dD4gb2JqZWN0LCB0aGVzZSBzdHJlYW0gb2JqZWN0cyBzaGFsbCBiZQpjb25zdHJ1Y3RlZCBiZWZvcmUgZHluYW1pYyBpbml0aWFsaXphdGlvbiBvZiBub24tbG9jYWwgb2JqZWN0cyBkZWZpbmVkCmxhdGVyIGluIHRoYXQgdHJhbnNsYXRpb24gdW5pdDxkZWw+LCBhbmQgdGhlc2Ugc3RyZWFtIG9iamVjdHMgc2hhbGwgYmUKZGVzdHJveWVkIGFmdGVyIHRoZSBkZXN0cnVjdGlvbiBvZiBkeW5hbWljYWxseSBpbml0aWFsaXplZCBub24tbG9jYWwKb2JqZWN0cyBkZWZpbmVkIGxhdGVyIGluIHRoYXQgdHJhbnNsYXRpb24gdW5pdDwvZGVsPi4KPC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGk+WwpLb25hICgyMDA3KTogRnJvbSAyNy4zIFtpb3N0cmVhbS5vYmplY3RzXS8yLCBzdHJpa2UgdGhlIHdvcmRzICIuLi5hbmQgdGhlc2Ugc3RyZWFtIG9iamVjdHMKc2hhbGwgYmUgZGVzdHJveWVkIGFmdGVyIHRoZSBkZXN0cnVjdGlvbiBvZiBkeW5hbWljYWxseSBpbml0aWFsaXplZApub24tbG9jYWwgb2JqZWN0cyBkZWZpbmVkIGxhdGVyIGluIHRoYXQgdHJhbnNsYXRpb24gdW5pdC4iIFByb3Bvc2VkCkRpc3Bvc2l0aW9uOiBSZXZpZXcKXTwvaT48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTc1Ij48L2E+NTc1LiB0aGUgc3BlY2lmaWNhdGlvbiBvZiB+c2hhcmVkX3B0ciBpcyBNVC11bmZyaWVuZGx5LCBtYWtlcyBpbXBsZW1lbnRhdGlvbiBhc3N1bXB0aW9uczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMC43LjEyLjIuMiBbdXRpbC5zbWFydHB0ci5zaGFyZWQuZGVzdF0sIFRSMSAyLjIuMy4yIFt0ci51dGlsLnNtYXJ0cHRyLnNoYXJlZC5kZXN0XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBQZXRlciBEaW1vdiA8Yj5EYXRlOjwvYj4gMjAwNi0wNC0yMzwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KW3RyLnV0aWwuc21hcnRwdHIuc2hhcmVkLmRlc3RdIHNheXMgaW4gaXRzIHNlY29uZCBidWxsZXQ6CjwvcD4KCjxwPgoiSWYgKnRoaXMgc2hhcmVzIG93bmVyc2hpcCB3aXRoIGFub3RoZXIgc2hhcmVkX3B0ciBpbnN0YW5jZSAodXNlX2NvdW50KCkgJmd0OyAxKSwKZGVjcmVtZW50cyB0aGF0IGluc3RhbmNlJ3MgdXNlIGNvdW50LiIKPC9wPgoKPHA+ClRoZSBwcm9ibGVtIHdpdGggdGhpcyBmb3JtdWxhdGlvbiBpcyB0aGF0IGl0IHByZXN1cHBvc2VzIHRoZSBleGlzdGVuY2Ugb2YgYW4KInVzZSBjb3VudCIgdmFyaWFibGUgdGhhdCBjYW4gYmUgZGVjcmVtZW50ZWQgYW5kIHRoYXQgaXMgcGFydCBvZiB0aGUgc3RhdGUgb2YgYQpzaGFyZWRfcHRyIGluc3RhbmNlIChiZWNhdXNlIG9mIHRoZSAidGhhdCBpbnN0YW5jZSdzIHVzZSBjb3VudCIuKQo8L3A+Cgo8cD4KVGhpcyBpcyBjb250cmFyeSB0byB0aGUgc3Bpcml0IG9mIHRoZSByZXN0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIHRoYXQgY2FyZWZ1bGx5CmF2b2lkcyB0byByZXF1aXJlIGFuIHVzZSBjb3VudCB2YXJpYWJsZS4gSW5zdGVhZCwgdXNlX2NvdW50KCkgaXMgc3BlY2lmaWVkIHRvCnJldHVybiBhIHZhbHVlLCBhIG51bWJlciBvZiBpbnN0YW5jZXMuCjwvcD4KCjxwPgpJbiBtdWx0aXRocmVhZGVkIGNvZGUsIHRoZSB1c3VhbCBpbXBsaWNpdCBhc3N1bXB0aW9uIGlzIHRoYXQgYSBzaGFyZWQgdmFyaWFibGUKc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBieSBtb3JlIHRoYW4gb25lIHRocmVhZCB3aXRob3V0IGV4cGxpY2l0IHN5bmNocm9uaXphdGlvbiwKYW5kIGJ5IGludHJvZHVjaW5nIHRoZSBjb25jZXB0IG9mIGFuICJ1c2UgY291bnQiIHZhcmlhYmxlLCB0aGUgY3VycmVudCB3b3JkaW5nCmltcGxpZXMgdGhhdCB0d28gc2hhcmVkX3B0ciBpbnN0YW5jZXMgdGhhdCBzaGFyZSBvd25lcnNoaXAgY2Fubm90IGJlIGRlc3Ryb3llZApzaW11bHRhbmVvdXNseS4KPC9wPgoKPHA+CkluIGFkZGl0aW9uLCBpZiB3ZSBhbGxvdyB0aGUgaW50ZXJwcmV0YXRpb24gdGhhdCBhbiB1c2UgY291bnQgdmFyaWFibGUgaXMgcGFydApvZiBzaGFyZWRfcHRyJ3Mgc3RhdGUsIHRoaXMgd291bGQgbGVhZCB0byBvdGhlciB1bmRlc2lyYWJsZSBjb25zZXF1ZW5jZXMgV1JUCm11bHRpcGxlIHRocmVhZHMuIEZvciBleGFtcGxlLAo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnAxID0gcDI7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgp3b3VsZCBub3cgdmlzaWJseSBtb2RpZnkgdGhlIHN0YXRlIG9mIHAyLCBhICJ3cml0ZSIgb3BlcmF0aW9uLCByZXF1aXJpbmcgYSBsb2NrLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIHRoZSBmaXJzdCB0d28gYnVsbGV0cyBvZiBbbGliLnV0aWwuc21hcnRwdHIuc2hhcmVkLmRlc3RdLzEgdG86CjwvcD4KCjxibG9ja3F1b3RlPgo8dWw+CjxsaT5JZiA8dHQ+KnRoaXM8L3R0PiBpcyA8aT5lbXB0eTwvaT4gPGlucz5vciBzaGFyZXMgb3duZXJzaGlwIHdpdGggYW5vdGhlcgo8dHQ+c2hhcmVkX3B0cjwvdHQ+IGluc3RhbmNlICg8dHQ+dXNlX2NvdW50KCkgJmd0OyAxPC90dD4pPC9pbnM+LCB0aGVyZSBhcmUgbm8gc2lkZSBlZmZlY3RzLjwvbGk+CjxsaT48ZGVsPklmIDx0dD4qdGhpczwvdHQ+IDxpPnNoYXJlcyBvd25lcnNoaXA8L2k+IHdpdGggYW5vdGhlciA8dHQ+c2hhcmVkX3B0cjwvdHQ+IGluc3RhbmNlCig8dHQ+dXNlX2NvdW50KCkgJmd0OyAxPC90dD4pLCBkZWNyZW1lbnRzIHRoYXQgaW5zdGFuY2UncyB1c2UgY291bnQuPC9kZWw+PC9saT4KPC91bD4KPC9ibG9ja3F1b3RlPgoKPHA+CkFkZCB0aGUgZm9sbG93aW5nIHBhcmFncmFwaCBhZnRlciBbbGliLnV0aWwuc21hcnRwdHIuc2hhcmVkLmRlc3RdLzE6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgpbPGk+Tm90ZTo8L2k+IHNpbmNlIHRoZSBkZXN0cnVjdGlvbiBvZiA8dHQ+KnRoaXM8L3R0PiBkZWNyZWFzZXMgdGhlIG51bWJlciBvZiBpbnN0YW5jZXMgaW4KPHR0Pip0aGlzPC90dD4ncyBvd25lcnNoaXAgZ3JvdXAgYnkgb25lLCBhbGwgPHR0PnNoYXJlZF9wdHI8L3R0PiBpbnN0YW5jZXMgdGhhdCBzaGFyZSBvd25lcnNoaXAKd2l0aCA8dHQ+KnRoaXM8L3R0PiB3aWxsIHJlcG9ydCBhbiA8dHQ+dXNlX2NvdW50KCk8L3R0PiB0aGF0IGlzIG9uZSBsb3dlciB0aGFuIGl0cyBwcmV2aW91cyB2YWx1ZQphZnRlciA8dHQ+KnRoaXM8L3R0PiBpcyBkZXN0cm95ZWQuIDxpPi0tZW5kIG5vdGU8L2k+XQo8L3A+PC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU3NiI+PC9hPjU3Ni4gZmluZF9maXJzdF9vZiBpcyBvdmVyY29uc3RyYWluZWQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjUuMS43IFthbGcuZmluZC5maXJzdC5vZl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRG91ZyBHcmVnb3IgPGI+RGF0ZTo8L2I+IDIwMDYtMDQtMjU8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2FsZy5maW5kLmZpcnN0Lm9mIj5pc3N1ZXM8L2E+IGluIFthbGcuZmluZC5maXJzdC5vZl0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJbiAyNS4xLjQgRmluZCBGaXJzdCBbbGliLmFsZy5maW5kLmZpcnN0XSwgdGhlIHR3byBpdGVyYXRvciB0eXBlIHBhcmFtZXRlcnMgdG8KZmluZF9maXJzdF9vZiBhcmUgc3BlY2lmaWVkIHRvIHJlcXVpcmUgRm9yd2FyZCBJdGVyYXRvcnMsIGFzIGZvbGxvd3M6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUmbHQ7Y2xhc3MgRm9yd2FyZEl0ZXJhdG9yMSwgY2xhc3MgRm9yd2FyZEl0ZXJhdG9yMiZndDsKICBGb3J3YXJkSXRlcmF0b3IxCiAgZmluZF9maXJzdF9vZihGb3J3YXJkSXRlcmF0b3IxIGZpcnN0MSwgRm9yd2FyZEl0ZXJhdG9yMSBsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgRm9yd2FyZEl0ZXJhdG9yMiBmaXJzdDIsIEZvcndhcmRJdGVyYXRvcjIgbGFzdDIpOwp0ZW1wbGF0ZSZsdDtjbGFzcyBGb3J3YXJkSXRlcmF0b3IxLCBjbGFzcyBGb3J3YXJkSXRlcmF0b3IyLAogICAgICAgICAgICAgICAgICBjbGFzcyBCaW5hcnlQcmVkaWNhdGUmZ3Q7CkZvcndhcmRJdGVyYXRvcjEKICBmaW5kX2ZpcnN0X29mKEZvcndhcmRJdGVyYXRvcjEgZmlyc3QxLCBGb3J3YXJkSXRlcmF0b3IxIGxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgRm9yd2FyZEl0ZXJhdG9yMiBmaXJzdDIsIEZvcndhcmRJdGVyYXRvcjIgbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIEJpbmFyeVByZWRpY2F0ZSBwcmVkKTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+Ckhvd2V2ZXIsIEZvcndhcmRJdGVyYXRvcjEgbmVlZCBub3QgYWN0dWFsbHkgYmUgYSBGb3J3YXJkIEl0ZXJhdG9yOyBhbiBJbnB1dApJdGVyYXRvciBzdWZmaWNlcywgYmVjYXVzZSB3ZSBkbyBub3QgbmVlZCB0aGUgbXVsdGktcGFzcyBwcm9wZXJ0eSBvZiB0aGUgRm9yd2FyZApJdGVyYXRvciBvciBhIHRydWUgcmVmZXJlbmNlLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIHRoZSBkZWNsYXJhdGlvbnMgb2YgPHR0PmZpbmRfZmlyc3Rfb2Y8L3R0PiB0bzoKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT50ZW1wbGF0ZSZsdDtjbGFzcyA8ZGVsPkZvcndhcmRJdGVyYXRvcjE8L2RlbD48aW5zPklucHV0SXRlcmF0b3IxPC9pbnM+LCBjbGFzcyBGb3J3YXJkSXRlcmF0b3IyJmd0OwogIDxkZWw+Rm9yd2FyZEl0ZXJhdG9yMTwvZGVsPjxpbnM+SW5wdXRJdGVyYXRvcjE8L2lucz4KICBmaW5kX2ZpcnN0X29mKDxkZWw+Rm9yd2FyZEl0ZXJhdG9yMTwvZGVsPjxpbnM+SW5wdXRJdGVyYXRvcjE8L2lucz4gZmlyc3QxLCA8ZGVsPkZvcndhcmRJdGVyYXRvcjE8L2RlbD48aW5zPklucHV0SXRlcmF0b3IxPC9pbnM+IGxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBGb3J3YXJkSXRlcmF0b3IyIGZpcnN0MiwgRm9yd2FyZEl0ZXJhdG9yMiBsYXN0Mik7CnRlbXBsYXRlJmx0O2NsYXNzIDxkZWw+Rm9yd2FyZEl0ZXJhdG9yMTwvZGVsPjxpbnM+SW5wdXRJdGVyYXRvcjE8L2lucz4sIGNsYXNzIEZvcndhcmRJdGVyYXRvcjIsCiAgICAgICAgICAgICAgICAgIGNsYXNzIEJpbmFyeVByZWRpY2F0ZSZndDsKPGRlbD5Gb3J3YXJkSXRlcmF0b3IxPC9kZWw+PGlucz5JbnB1dEl0ZXJhdG9yMTwvaW5zPgogIGZpbmRfZmlyc3Rfb2YoPGRlbD5Gb3J3YXJkSXRlcmF0b3IxPC9kZWw+PGlucz5JbnB1dEl0ZXJhdG9yMTwvaW5zPiBmaXJzdDEsIDxkZWw+Rm9yd2FyZEl0ZXJhdG9yMTwvZGVsPjxpbnM+SW5wdXRJdGVyYXRvcjE8L2lucz4gbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBGb3J3YXJkSXRlcmF0b3IyIGZpcnN0MiwgRm9yd2FyZEl0ZXJhdG9yMiBsYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgQmluYXJ5UHJlZGljYXRlIHByZWQpOwo8L3ByZT48L2Jsb2NrcXVvdGU+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU3NyI+PC9hPjU3Ny4gdXBwZXJfYm91bmQoZmlyc3QsIGxhc3QsIC4uLikgY2Fubm90IHJldHVybiBsYXN0PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI1LjMuMy4yIFt1cHBlci5ib3VuZF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gU2V1bmdiZW9tIEtpbSA8Yj5EYXRlOjwvYj4gMjAwNi0wNS0wMzwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSVNPL0lFQyAxNDg4MjoyMDAzIHNheXM6CjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KMjUuMy4zLjIgdXBwZXJfYm91bmQKPC9wPgo8cD4KPGk+UmV0dXJuczo8L2k+IFRoZSBmdXJ0aGVybW9zdCBpdGVyYXRvciA8dHQ+aTwvdHQ+IGluIHRoZSByYW5nZQo8dHQ+WzxpPmZpcnN0PC9pPiwgPGk+bGFzdDwvaT4pPC90dD4gc3VjaCB0aGF0CmZvciBhbnkgaXRlcmF0b3IgPHR0Pmo8L3R0PiBpbiB0aGUgcmFuZ2UgPHR0Pls8aT5maXJzdDwvaT4sIGkpPC90dD4gdGhlIGZvbGxvd2luZyBjb3JyZXNwb25kaW5nCmNvbmRpdGlvbnMgaG9sZDogPHR0PiEodmFsdWUgJmx0OyAqaik8L3R0PiBvciA8dHQ+PGk+Y29tcDwvaT4oPGk+dmFsdWU8L2k+LCAqaikgPT0gZmFsc2U8L3R0Pi4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KRnJvbSB0aGUgZGVzY3JpcHRpb24gYWJvdmUsIHVwcGVyX2JvdW5kIGNhbm5vdCByZXR1cm4gbGFzdCwgc2luY2UgaXQncwpub3QgaW4gdGhlIGludGVydmFsIFtmaXJzdCwgbGFzdCkuIFRoaXMgc2VlbXMgdG8gYmUgYSB0eXBvLCBiZWNhdXNlIGlmCnZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBhbnkgb3RoZXIgdmFsdWVzIGluIHRoZSByYW5nZSwgb3IgaWYKdGhlIHJhbmdlIGlzIGVtcHR5LCByZXR1cm5pbmcgbGFzdCBzZWVtcyB0byBiZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyLgpUaGUgY29ycmVzcG9uZGluZyBpbnRlcnZhbCBmb3IgbG93ZXJfYm91bmQgaXMgYWxzbyBbZmlyc3QsIGxhc3RdLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIFtsaWIudXBwZXIuYm91bmRdOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CjxpPlJldHVybnM6PC9pPiBUaGUgZnVydGhlcm1vc3QgaXRlcmF0b3IgPHR0Pmk8L3R0PiBpbiB0aGUgcmFuZ2UKPHR0Pls8aT5maXJzdDwvaT4sIDxpPmxhc3Q8L2k+PGRlbD4pPC9kZWw+PGlucz5dPC9pbnM+PC90dD4gc3VjaCB0aGF0CmZvciBhbnkgaXRlcmF0b3IgPHR0Pmo8L3R0PiBpbiB0aGUgcmFuZ2UgPHR0Pls8aT5maXJzdDwvaT4sIGkpPC90dD4gdGhlIGZvbGxvd2luZyBjb3JyZXNwb25kaW5nCmNvbmRpdGlvbnMgaG9sZDogPHR0PiEodmFsdWUgJmx0OyAqaik8L3R0PiBvciA8dHQ+PGk+Y29tcDwvaT4oPGk+dmFsdWU8L2k+LCAqaikgPT0gZmFsc2U8L3R0Pi4KPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU3OCI+PC9hPjU3OC4gcHVycG9zZSBvZiBoaW50IHRvIGFsbG9jYXRvcjo6YWxsb2NhdGUoKTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMC43LjUuMSBbYWxsb2NhdG9yLm1lbWJlcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwNi0wNS0xNzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxsb2NhdG9yLm1lbWJlcnMiPmlzc3VlczwvYT4gaW4gW2FsbG9jYXRvci5tZW1iZXJzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KICAgICAgICA8cD4KClRoZSAgICAgZGVzY3JpcHRpb24gICAgb2YgICAgIHRoZSAgICAgYWxsb2NhdG9yICAgIG1lbWJlciAgICAgZnVuY3Rpb24KPGNvZGU+YWxsb2NhdGUoKTwvY29kZT4gIHJlcXVpcmVzICB0aGF0ICB0aGUgPGk+aGludDwvaT4gIGFyZ3VtZW50ICBiZQplaXRoZXIgMCBvciBhICB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGZyb20gPGNvZGU+YWxsb2NhdGUoKTwvY29kZT4uCkZvb3Rub3RlIDIyNyBmdXJ0aGVyIHN1Z2dlc3RzIHRoYXQgIGNvbnRhaW5lcnMgbWF5IHBhc3MgdGhlIGFkZHJlc3Mgb2YKYW4gYWRqYWNlbnQgZWxlbWVudCBhcyB0aGlzIGFyZ3VtZW50LgoKICAgICAgICA8L3A+CiAgICAgICAgPHA+CgpJICBiZWxpZXZlICB0aGF0ICBlaXRoZXIgIHRoZSAgZm9vdG5vdGUgIGlzICB3cm9uZyAgb3IgIHRoZSAgbm9ybWF0aXZlCnJlcXVpcmVtZW50IHRoYXQgIHRoZSBhcmd1bWVudCBiZSAgYSB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkICBmcm9tIGEKY2FsbCB0byAgPGNvZGU+YWxsb2NhdGUoKTwvY29kZT4gaXMgd3JvbmcuIFRoZSBsYXR0ZXIgIGlzIHN1cHBvcnRlZCBieQp0aGUgcmVzb2x1dGlvbiAgdG8gaXNzdWUgMjAtMDA0IHByb3Bvc2VkIGluICBjKytzdGQtbGliLTM3MzYgYnkgTmF0aGFuCk15ZXJzLiBJbiBhZGRpdGlvbiwgIHRoZSA8aT5oaW50PC9pPiBpcyBhbiBvcmRpbmFyeSAgdm9pZCogYW5kIG5vdCB0aGUKPGNvZGU+cG9pbnRlcjwvY29kZT4gIHR5cGUgcmV0dXJuZWQgIGJ5ICA8Y29kZT5hbGxvY2F0ZSgpPC9jb2RlPiwgd2l0aAp0aGUgIHR3byAgdHlwZXMgcG90ZW50aWFsbHkgIGJlaW5nICBpbmNvbXBhdGlibGUgIGFuZCB0aGUgIHJlcXVpcmVtZW50CmltcG9zc2libGUgdG8gc2F0aXNmeS4KCiAgICAgICAgPC9wPgogICAgICAgIDxwPgoKU2VlIGFsc28gYysrc3RkLWxpYi0xNDMyMyBmb3Igc29tZSAgbW9yZSBjb250ZXh0IG9uIHdoZXJlIHRoaXMgY2FtZSB1cAooYWdhaW4pLgoKICAgICAgICA8L3A+CiAgICAKCiAgICA8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CiAgICAgICAgPHA+CgpSZW1vdmUgIHRoZSByZXF1aXJlbWVudCAgaW4gIDIwLjYuMS4xLCBwNCAgdGhhdCAgdGhlIGhpbnQgIGJlIGEgIHZhbHVlCnByZXZpb3VzbHkgcmV0dXJuZWQgZnJvbSA8Y29kZT5hbGxvY2F0ZSgpPC9jb2RlPi4gU3BlY2lmaWNhbGx5LCBjaGFuZ2UKdGhlIHBhcmFncmFwaCBhcyBmb2xsb3dzOgoKICAgICAgICA8L3A+CjxwPgo8ZGVsPjxpPlJlcXVpcmVzPC9pPjogPGk+aGludDwvaT4gZWl0aGVyIDAgb3IgcHJldmlvdXNseSBvYnRhaW5lZCAgZnJvbSAgbWVtYmVyCjxjb2RlPmFsbG9jYXRlPC9jb2RlPiAgYW5kICBub3QgIHlldCBwYXNzZWQgIHRvIG1lbWJlciAgPGNvZGU+ZGVhbGxvY2F0ZTwvY29kZT4uClRoZSB2YWx1ZSBoaW50IG1heSBiZSB1c2VkIGJ5IGFuIGltcGxlbWVudGF0aW9uIHRvIGhlbHAgaW1wcm92ZSBwZXJmb3JtYW5jZQo8c3VwPjIyMyk8L3N1cD4uPC9kZWw+IDxpbnM+WzxpPk5vdGU6PC9pPiBUaGUgdmFsdWUgPGk+aGludDwvaT4gbWF5IGJlIHVzZWQgYnkgYW4KaW1wbGVtZW50YXRpb24gdG8gaGVscCBpbXByb3ZlIHBlcmZvcm1hbmNlLiAtLSA8aT5lbmQgbm90ZTwvaT5dPC9pbnM+CjwvcD4KPGJsb2NrcXVvdGU+PHA+CjxkZWw+W0Zvb3Rub3RlOiA8c3VwPjIyMyk8L3N1cD5JbiBhIGNvbnRhaW5lciBtZW1iZXIgZnVuY3Rpb24sIHRoZSBhZGRyZXNzIG9mIGFuCmFkamFjZW50IGVsZW1lbnQgaXMgb2Z0ZW4gYSBnb29kIGNob2ljZSB0byBwYXNzIGZvciB0aGlzIGFyZ3VtZW50LjwvZGVsPgo8L3A+PC9ibG9ja3F1b3RlPgogICAgCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU4MSI+PC9hPjU4MS4gPGNvZGU+Zmx1c2goKTwvY29kZT4gbm90IHVuZm9ybWF0dGVkIGZ1bmN0aW9uPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjYuMi43IFtvc3RyZWFtLnVuZm9ybWF0dGVkXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDYtMDYtMTQ8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI29zdHJlYW0udW5mb3JtYXR0ZWQiPmlzc3VlczwvYT4gaW4gW29zdHJlYW0udW5mb3JtYXR0ZWRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgogICAgICAgIDxwPgoKVGhlIHJlc29sdXRpb24gb2YgaXNzdWUgNjAgY2hhbmdlZCA8Y29kZT5iYXNpY19vc3RyZWFtOjpmbHVzaCgpPC9jb2RlPgpzbyBhcyBub3QgIHRvIHJlcXVpcmUgaXQgdG8gYmVoYXZlIGFzICBhbiB1bmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb24uClRoYXQgaGFzIGF0IGxlYXN0IHR3byBpbiBteSBvcGluaW9uIHByb2JsZW1hdGljIGNvbnNlcXVlbmNlczoKCiAgICAgICAgPC9wPgogICAgICAgIDxwPgoKRmlyc3QsIDxjb2RlPmZsdXNoKCk8L2NvZGU+ICBub3cgY2FsbHMgPGNvZGU+cmRidWYoKS0mZ3Q7cHVic3luYygpPC9jb2RlPgp1bmNvbmRpdGlvbmFsbHksIHdpdGhvdXQgIHJlZ2FyZCB0byB0aGUgIHN0YXRlIG9mIHRoZSBzdHJlYW0uICBJIGNhbid0CnRoaW5rIG9mIGFueSByZWFzb24gd2h5IDxjb2RlPmZsdXNoKCk8L2NvZGU+IHNob3VsZCBiZWhhdmUgZGlmZmVyZW50bHkKZnJvbSB0aGUgdmFzdCBtYWpvcml0eSBvZiBzdHJlYW0gZnVuY3Rpb25zIGluIHRoaXMgcmVzcGVjdC4KCiAgICAgICAgPC9wPgogICAgICAgIDxwPgoKU2Vjb25kLCA8Y29kZT5mbHVzaCgpPC9jb2RlPiBpcyBub3QgIHJlcXVpcmVkIHRvIGNhdGNoIGV4Y2VwdGlvbnMgZnJvbQo8Y29kZT5wdWJzeW5jKCk8L2NvZGU+IG9yIHNldCAgPGNvZGU+YmFkYml0PC9jb2RlPiBpbiByZXNwb25zZSB0byBzdWNoCmV2ZW50cy4gVGhhdCBkb2Vzbid0IHNlZW0gcmlnaHQgZWl0aGVyLCBhcyBtb3N0IG90aGVyIHN0cmVhbSBmdW5jdGlvbnMKZG8gc28uCgogICAgICAgIDwvcD4KICAgIAoKICAgIDxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KICAgICAgICA8cD4KCkkgIHByb3Bvc2UgIHRvIHJldmVydCAgdGhlICByZXNvbHV0aW9uIG9mICBpc3N1ZSAgNjAgIHdpdGggcmVzcGVjdCAgdG8KPGNvZGU+Zmx1c2goKTwvY29kZT4uIFNwZWNpZmljYWxseSwgIEkgcHJvcG9zZSB0byAgY2hhbmdlIDI3LjYuMi42LCBwNwphcyBmb2xsb3dzOgoKICAgICAgICA8L3A+Cgo8cD4KRWZmZWN0czogPGlucz5CZWhhdmVzIGFzIGFuICB1bmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZAppbiAyNy42LjIuNiwgcGFyYWdyYXBoIDEpLiA8L2lucz5JZiA8Y29kZT5yZGJ1ZigpPC9jb2RlPiBpcyBub3QgYSBudWxsCnBvaW50ZXIsICA8aW5zPmNvbnN0cnVjdHMgYSAgc2VudHJ5ICBvYmplY3QuICBJZiAgdGhpcyBvYmplY3QgIHJldHVybnMKPGNvZGU+dHJ1ZTwvY29kZT4gd2hlbiBjb252ZXJ0ZWQgdG8gYSAgdmFsdWUgb2YgdHlwZSBib29sIHRoZSBmdW5jdGlvbgo8L2lucz5jYWxscyA8Y29kZT5yZGJ1ZigpLSZndDtwdWJzeW5jKCk8L2NvZGU+LiAgSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zCi0xICAgIGNhbGxzICAgIDxjb2RlPnNldHN0YXRlKGJhZGJpdCk8L2NvZGU+ICAgICh3aGljaCAgICBtYXkgICAgdGhyb3cKPGNvZGU+aW9zX2Jhc2U6OmZhaWx1cmU8L2NvZGU+ICAoMjcuNC40LjMpKS4gICA8aW5zPk90aGVyd2lzZSwgaWYgIHRoZQpzZW50cnkgb2JqZWN0IHJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+LCBkb2VzIG5vdGhpbmcuPC9pbnM+PGRlbD5Eb2VzCm5vdCAgYmVoYXZlICBhcyAgYW4gIHVuZm9ybWF0dGVkICBvdXRwdXQgIGZ1bmN0aW9uICAoYXMgIGRlc2NyaWJlZCAgaW4KMjcuNi4yLjYsIHBhcmFncmFwaCAxKS48L2RlbD4KPC9wPgoKICAgIAoKPHA+PGk+WwpLb25hICgyMDA3KTogUHJvcG9zZWQgRGlzcG9zaXRpb246IFJlYWR5Cl08L2k+PC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU4NiI+PC9hPjU4Ni4gc3RyaW5nIGluc2VydGVyIG5vdCBhIGZvcm1hdHRlZCBmdW5jdGlvbjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMS4zLjguOSBbc3RyaW5nLmlvXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBNYXJ0aW4gU2Vib3IgPGI+RGF0ZTo8L2I+IDIwMDYtMDYtMjI8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3N0cmluZy5pbyI+aXNzdWVzPC9hPiBpbiBbc3RyaW5nLmlvXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KICAgICAgICA8cD4KClNlY3Rpb24gIGFuZCBwYXJhZ3JhcGggIG51bWJlcnMgIGluICB0aGlzIHBhcGVyICBhcmUgIHJlbGF0aXZlIHRvICB0aGUKd29ya2luZyBkcmFmdCBkb2N1bWVudCBudW1iZXIgTjIwMDkgZnJvbSA0LzIxLzIwMDYuCgogICAgICAgIDwvcD4KCiAgICAgICAgPHA+CgpUaGUgIDxjb2RlPmJhc2ljX3N0cmluZzwvY29kZT4gZXh0cmFjdG9yICBpbiAyMS4zLjcuOSwgIHAxICBpcyBjbGVhcmx5CnJlcXVpcmVkICB0byAgYmVoYXZlICBhcyAgYSAgIGZvcm1hdHRlZCAgaW5wdXQgIGZ1bmN0aW9uLCAgYXMgIGlzICB0aGUKPGNvZGU+c3RkOjpnZXRsaW5lKCk8L2NvZGU+IG92ZXJsb2FkIGZvciBzdHJpbmcgZGVzY3JpYmVkIGluIHA3LgoKICAgICAgICA8L3A+CiAgICAgICAgPHA+CgpIb3dldmVyLCB0aGUgPGNvZGU+YmFzaWNfc3RyaW5nPC9jb2RlPiBpbnNlcnRlciBkZXNjcmliZWQgaW4gcDUgb2YgdGhlCnNhbWUgc2VjdGlvbiBoYXMgbm8gc3VjaCByZXF1aXJlbWVudC4gVGhpcyBoYXMgaW1wbGljYXRpb25zIG9uIGhvdyB0aGUKb3BlcmF0b3IgIHJlc3BvbmRzICB0byAgZXhjZXB0aW9ucyB0aHJvd24gIGZyb20gIDxjb2RlPnhzcHV0bigpPC9jb2RlPgooZm9ybWF0dGVkICBvdXRwdXQgZnVuY3Rpb25zIGFyZSAgcmVxdWlyZWQgdG8gIHNldCA8Y29kZT5iYWRiaXQ8L2NvZGU+CmFuZCBzd2FsbG93ICB0aGUgZXhjZXB0aW9uIHVubGVzcyAgPGNvZGU+YmFkYml0PC9jb2RlPiBpcyBhbHNvICBzZXQgaW4KPGNvZGU+ZXhjZXB0aW9ucygpPC9jb2RlPjsgdGhlICBzdHJpbmcgaW5zZXJ0ZXIgZG9lc24ndCAgaGF2ZSBhbnkgc3VjaApyZXF1aXJlbWVudCkuCgogICAgICAgIDwvcD4KICAgICAgICA8cD4KCkkgZG9uJ3QgIHNlZSBhbnl0aGluZyBpbiB0aGUgIHNwZWMgZm9yIHRoZSBzdHJpbmcgIGluc2VydGVyIHRoYXQgd291bGQKanVzdGlmeSByZXF1aXJpbmcgIGl0IHRvIHRyZWF0ICBleGNlcHRpb25zIGRpZmZlcmVudGx5IGZyb20gIGFsbCBvdGhlcgpzaW1pbGFyIG9wZXJhdG9ycy4gKElmIGl0IGRpZCwgSSB0aGluayBpdCBzaG91bGQgYmUgbWFkZSB0aGlzIGV4cGxpY2l0CmJ5IHNheWluZyAgdGhhdCB0aGUgIG9wZXJhdG9yICJkb2VzIG5vdCAgYmVoYXZlIGFzIGEgIGZvcm1hdHRlZCBvdXRwdXQKZnVuY3Rpb24iIGFzIGhhcyBiZWVuIG1hZGUgY3VzdG9tYXJ5IGJ5IHRoZSBhZG9wdGlvbiBvZiB0aGUgcmVzb2x1dGlvbgpvZiBpc3N1ZSA2MCkuCgogICAgICAgIDwvcD4KICAgIAoKICAgIDxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KICAgICAgICA8cD4KCkkgcHJvcG9zZSB0byBjaGFuZ2UgdGhlIEVmZmVjdHMgY2xhdXNlIGluIDIxLjMuNy45LCBwNSwgYXMgZm9sbG93czoKCiAgICAgICAgPC9wPgogICAgICAgICAgICA8YmxvY2txdW90ZT4KICAgICAgICA8cD4KCjxpPkVmZmVjdHM8L2k+OiA8ZGVsPkJlZ2lucyBieSBjb25zdHJ1Y3RpbmcgYSAgc2VudHJ5IG9iamVjdCBrIGFzIGlmIGsKd2VyZSAgICBjb25zdHJ1Y3RlZCAgICBieSAgICB0eXBlbmFtZSAgICA8Y29kZT5iYXNpY19vc3RyZWFtJmx0O2NoYXJULAp0cmFpdHMmZ3Q7OjpzZW50cnkgICBrICAgKG9zKTwvY29kZT4uICAgIElmICA8Y29kZT5ib29sKGspPC9jb2RlPiAgIGlzCjxjb2RlPnRydWU8L2NvZGU+LCA8L2RlbD48aW5zPkJlaGF2ZXMgIGFzIGEgZm9ybWF0dGVkICBvdXRwdXQgZnVuY3Rpb24KKDI3LjYuMi41LjEpLiAgIEFmdGVyIGNvbnN0cnVjdGluZyAgYSAgPGNvZGU+c2VudHJ5PC9jb2RlPiBvYmplY3QsICBpZgp0aGlzICBvYmplY3QgcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiAgd2hlbiBjb252ZXJ0ZWQgIHRvIGEgIHZhbHVlIG9mCnR5cGUgICA8Y29kZT5ib29sPC9jb2RlPiwgICBkZXRlcm1pbmVzICAgcGFkZGluZyAgIGFzICAgZGVzY3JpYmVkICAgaW4KMjIuMi4yLjIuMjwvaW5zPiwgIHRoZW4gaW5zZXJ0cyB0aGUgIHJlc3VsdGluZyBzZXF1ZW5jZSAgb2YgY2hhcmFjdGVycwo8Y29kZT48aT5zZXE8L2k+PC9jb2RlPiBhcyBpZiBieSBjYWxsaW5nIDxjb2RlPm9zLnJkYnVmKCktJmd0O3NwdXRuKHNlcSAsCm4pPC9jb2RlPiwgICAgd2hlcmUgICA8Y29kZT48aT5uPC9pPjwvY29kZT4gICAgaXMgICB0aGUgICAgbGFyZ2VyICAgb2YKPGNvZGU+b3Mud2lkdGgoKTwvY29kZT4gICBhbmQgICA8Y29kZT5zdHIuc2l6ZSgpPC9jb2RlPjsgIHRoZW4gICBjYWxscwo8Y29kZT5vcy53aWR0aCgwKTwvY29kZT4uICA8ZGVsPklmICB0aGUgIGNhbGwgIHRvIHNwdXRuICBmYWlscywgIGNhbGxzCjxjb2RlPm9zLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTwvY29kZT4uPC9kZWw+CgogICAgICAgIDwvcD4KICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgogICAgICAgIDxwPgoKVGhpcyBwcm9wb3NlZCAgcmVzaWx1dGlvbiBhc3N1bWVzIHRoZSAgcmVzb2x1dGlvbiBvZiBpc3N1ZSAgMzk0IChpLmUuLAp0aGF0ICAgYWxsICAgZm9ybWF0dGVkICAgb3V0cHV0ICAgZnVuY3Rpb25zICBhcmUgICByZXF1aXJlZCAgIHRvICAgc2V0Cjxjb2RlPmlvc19iYXNlOjpiYWRiaXQ8L2NvZGU+ICBpbiByZXNwb25zZSAgdG8gYW55ICBraW5kICBvZiBzdHJlYW1idWYKZmFpbHVyZSksICAgYW5kICAgaW1wbGljaXRseSAgIGFzc3VtZXMgICB0aGF0ICBhICAgcmV0dXJuICAgdmFsdWUgICBvZgo8Y29kZT5zcHV0bihzZXEsICA8aT5uPC9pPik8L2NvZGU+ICBvdGhlciAgdGhhbiAgPGNvZGU+PGk+bjwvaT48L2NvZGU+CmluZGljYXRlcyBhIGZhaWx1cmUuCgogICAgICAgIDwvcD4KICAgIAoKCgo8aHI+CjxoMz48YSBuYW1lPSI1ODkiPjwvYT41ODkuIFJlcXVpcmVtZW50cyBvbiBpdGVyYXRvcnMgb2YgbWVtYmVyIHRlbXBsYXRlIGZ1bmN0aW9ucyBvZiBjb250YWluZXJzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjEgW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFBldGVyIERpbW92IDxiPkRhdGU6PC9iPiAyMDA2LTA4LTAyPC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjY29udGFpbmVyLnJlcXVpcmVtZW50cyI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjY29udGFpbmVyLnJlcXVpcmVtZW50cyI+aXNzdWVzPC9hPiBpbiBbY29udGFpbmVyLnJlcXVpcmVtZW50c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EdXBsaWNhdGUgb2Y6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM1MzYiPjUzNjwvYT48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gcmVxdWlyZW1lbnRzIG9uIHRoZSBJbnB1dEl0ZXJhdG9ycyB1c2VkIGluIHNlcXVlbmNlcyBpbiAyMy4xLjEgaW4KdGVybXMgb2YgdGhlaXIgdmFsdWVfdHlwZSwgYW5kIHRoZSByZXF1aXJlbWVudHMgaW4gMjMuMS4yIGFwcGVhciB0byBiZSBvdmVybHkgc3RyaWN0CihyZXF1aXJlcyBJbnB1dEl0ZXJhdG9yOjp2YWx1ZV90eXBlIGJlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGNvbnRhaW5lcidzIHZhbHVlX3R5cGUpLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIDIzLjEuMSBwMzoKPC9wPgoKPGJsb2NrcXVvdGU+PHA+CkluIFRhYmxlcyA4MiBhbmQgODMsIDx0dD5YPC90dD4gZGVub3RlcyBhIHNlcXVlbmNlIGNsYXNzLCA8dHQ+YTwvdHQ+IGRlbm90ZXMgYQp2YWx1ZSBvZiA8dHQ+WDwvdHQ+LCA8dHQ+aTwvdHQ+IGFuZCA8dHQ+ajwvdHQ+IGRlbm90ZSBpdGVyYXRvcnMgc2F0aXNmeWluZyBpbnB1dAppdGVyYXRvciByZXF1aXJlbWVudHMgPGlucz5hbmQgcmVmZXIgdG8gZWxlbWVudHMgPGlucz5pbXBsaWNpdGx5CmNvbnZlcnRpYmxlIHRvPC9pbnM+IDx0dD52YWx1ZV90eXBlPC90dD48L2lucz4sIDx0dD5baSwgaik8L3R0PiBkZW5vdGVzIGEgdmFsaWQKcmFuZ2UsIDx0dD5uPC90dD4gZGVub3RlcyBhIHZhbHVlIG9mIDx0dD5YOjpzaXplX3R5cGU8L3R0PiwgPHR0PnA8L3R0PiBkZW5vdGVzIGEKdmFsaWQgaXRlcmF0b3IgdG8gPHR0PmE8L3R0PiwgPHR0PnE8L3R0PiBkZW5vdGVzIGEgdmFsaWQgZGVyZWZlcmVuY2VhYmxlCml0ZXJhdG9yIHRvIDx0dD5hPC90dD4sIDx0dD5bcTEsIHEyKTwvdHQ+IGRlbm90ZXMgYSB2YWxpZCByYW5nZSBpbiA8dHQ+YTwvdHQ+LAphbmQgPHR0PnQ8L3R0PiBkZW5vdGVzIGEgdmFsdWUgb2YgPHR0Plg6OnZhbHVlX3R5cGU8L3R0Pi4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpDaGFuZ2UgMjMuMS4yIHA3Ogo8L3A+Cgo8YmxvY2txdW90ZT48cD4KSW4gVGFibGUgODQsIDx0dD5YPC90dD4gaXMgYW4gYXNzb2NpYXRpdmUgY29udGFpbmVyIGNsYXNzLCA8dHQ+YTwvdHQ+IGlzIGEgdmFsdWUKb2YgPHR0Plg8L3R0PiwgPHR0PmFfdW5pcTwvdHQ+IGlzIGEgdmFsdWUgb2YgPHR0Plg8L3R0PiB3aGVuIDx0dD5YPC90dD4gc3VwcG9ydHMKdW5pcXVlIGtleXMsIGFuZCA8dHQ+YV9lcTwvdHQ+IGlzIGEgdmFsdWUgb2YgPHR0Plg8L3R0PiB3aGVuIDx0dD5YPC90dD4gc3VwcG9ydHMKbXVsdGlwbGUga2V5cywgPHR0Pmk8L3R0PiBhbmQgPHR0Pmo8L3R0PiBzYXRpc2Z5IGlucHV0IGl0ZXJhdG9yIHJlcXVpcmVtZW50cyBhbmQKcmVmZXIgdG8gZWxlbWVudHMgPGRlbD5vZjwvZGVsPiA8aW5zPmltcGxpY2l0bHkgY29udmVydGlibGUgdG88L2lucz4KPHR0PnZhbHVlX3R5cGU8L3R0PiwgPHR0PltpLCBqKTwvdHQ+IGlzIGEgdmFsaWQgcmFuZ2UsIDx0dD5wPC90dD4gaXMgYSB2YWxpZAppdGVyYXRvciB0byA8dHQ+YTwvdHQ+LCA8dHQ+cTwvdHQ+IGlzIGEgdmFsaWQgZGVyZWZlcmVuY2VhYmxlIGl0ZXJhdG9yIHRvCjx0dD5hPC90dD4sIDx0dD5bcTEsIHEyKTwvdHQ+IGlzIGEgdmFsaWQgcmFuZ2UgaW4gPHR0PmE8L3R0PiwgPHR0PnQ8L3R0PiBpcyBhCnZhbHVlIG9mIDx0dD5YOjp2YWx1ZV90eXBlPC90dD4sIDx0dD5rPC90dD4gaXMgYSB2YWx1ZSBvZiA8dHQ+WDo6a2V5X3R5cGU8L3R0PgphbmQgPHR0PmM8L3R0PiBpcyBhIHZhbHVlIG9mIHR5cGUgPHR0Plg6OmtleV9jb21wYXJlPC90dD4uCjwvcD48L2Jsb2NrcXVvdGU+CgoKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KQ29uY2VwdHMgd2lsbCBwcm9iYWJseSBjb21lIGluIGFuZCByZXdyaXRlIHRoaXMgc2VjdGlvbiBhbnl3YXkuICBCdXQganVzdCBpbiBjYXNlIGl0IGlzCmVhc3kgdG8gZml4IHRoaXMgdXAgYXMgYSBzYWZldHkgbmV0IGFuZCBhcyBhIGNsZWFyIHN0YXRlbWVudCBvZiBpbnRlbnQuCjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI1OTMiPjwvYT41OTMuIF9fU1REQ19DT05TVEFOVF9NQUNST1M8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTguMyBbY3N0ZGludF0sIFRSMSA4LjIyIFt0ci5jOTkuY3N0ZGludF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gV2FsdGVyIEJyb3duIDxiPkRhdGU6PC9iPiAyMDA2LTA4LTI4PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNjc3RkaW50Ij5pc3N1ZXM8L2E+IGluIFtjc3RkaW50XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkNsYXVzZSAxOC4zIG9mIHRoZSBjdXJyZW50IFdvcmtpbmcgUGFwZXIgKE4yMDA5KSBkZWFscyB3aXRoIHRoZSBuZXcgQysrIGhlYWRlcnMKJmx0O2NzdGRpbnQmZ3Q7IGFuZCAmbHQ7c3RkaW50LmgmZ3Q7LiAgVGhlc2UgYXJlIG9mIGNvdXJzZSBiYXNlZCBvbiB0aGUgQzk5IGhlYWRlcgombHQ7c3RkaW50LmgmZ3Q7LCBhbmQgd2VyZSBwYXJ0IG9mIFRSMS4KPC9wPgoKPHA+ClBlciAxOC4zLjEvMSwgdGhlc2UgaGVhZGVycyBkZWZpbmUgYSBudW1iZXIgb2YgbWFjcm9zIGFuZCBmdW5jdGlvbiBtYWNyb3MuIApXaGlsZSB0aGUgV1AgZG9lcyBub3QgbWVudGlvbiBfX1NURENfQ09OU1RBTlRfTUFDUk9TIGluIHRoaXMgY29udGV4dCwgQzk5CmZvb3Rub3RlcyBkbyBtZW50aW9uIF9fU1REQ19DT05TVEFOVF9NQUNST1MuICBGdXJ0aGVyLCAxOC4zLjEvMiBzdGF0ZXMgdGhhdCAiVGhlCmhlYWRlciBkZWZpbmVzIGFsbCAuLi4gbWFjcm9zIHRoZSBzYW1lIGFzIEM5OSBzdWJjbGF1c2UgNy4xOC4iCjwvcD4KCjxwPgpUaGVyZWZvcmUsIGlmIEkgd2lzaCB0byBoYXZlIHRoZSBhYm92ZS1yZWZlcmVuY2VkIG1hY3JvcyBhbmQgZnVuY3Rpb24gbWFjcm9zCmRlZmluZWQsIG11c3QgSSAjZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MgYmVmb3JlIEkgI2luY2x1ZGUgJmx0O2NzdGRpbnQmZ3Q7LCBvcgpkb2VzIHRoZSBDKysgaGVhZGVyIGRlZmluZSB0aGVzZSBtYWNyb3MvZnVuY3Rpb24gbWFjcm9zIHVuY29uZGl0aW9uYWxseT8KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClRvIHB1dCB0aGlzIGlzc3VlIHRvIHJlc3QgZm9yIEMrKzBYLCBJIHByb3Bvc2UgdGhlIGZvbGxvd2luZyBhZGRpdGlvbiB0byAKMTguMy4xLzIgb2YgdGhlIFdvcmtpbmcgUGFwZXIgTjIwMDk6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgpbTm90ZTogVGhlIG1hY3JvcyBkZWZpbmVkIGJ5ICZsdDtjc3RkaW50Jmd0OyBhcmUgcHJvdmlkZWQgdW5jb25kaXRpb25hbGx5OiBpbgpwYXJ0aWN1bGFyLCB0aGUgc3ltYm9scyBfX1NURENfTElNSVRfTUFDUk9TIGFuZCBfX1NURENfQ09OU1RBTlRfTUFDUk9TCihtZW50aW9uZWQgaW4gQzk5IGZvb3Rub3RlcyAyMTksIDIyMCwgYW5kIDIyMikgcGxheSBubyByb2xlIGluIEMrKy4gLS1lbmQgbm90ZV0KPC9wPjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI1OTUiPjwvYT41OTUuIFRSMS9DKysweDogZmFicyhjb21wbGV4Jmx0O1QmZ3Q7KSByZWR1bmRhbnQgLyB3cm9uZ2x5IHNwZWNpZmllZDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNi4zLjcgW2NvbXBsZXgudmFsdWUub3BzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBTdGVmYW4gR3Jv32UgUGF3aWcgPGI+RGF0ZTo8L2I+IDIwMDYtMDktMjQ8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2NvbXBsZXgudmFsdWUub3BzIj5pc3N1ZXM8L2E+IGluIFtjb21wbGV4LnZhbHVlLm9wc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpUUjEgaW50cm9kdWNlZCwgaW4gdGhlIEMgY29tcGF0aWJpbGl0eSBjaGFwdGVyLCB0aGUgZnVuY3Rpb24KZmFicyhjb21wbGV4Jmx0O1QmZ3Q7KToKPC9wPgo8YmxvY2txdW90ZT48cHJlPi0tLS0tIFNOSVAgLS0tLS0KOC4xLjEgU3lub3BzaXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ci5jOTkuY21wbHguc3luXQoKICBuYW1lc3BhY2Ugc3RkIHsKICBuYW1lc3BhY2UgdHIxIHsKWy4uLl0KICB0ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBjb21wbGV4Jmx0O1QmZ3Q7IGZhYnMoY29uc3QgY29tcGxleCZsdDtUJmd0OyZhbXA7IHgpOwogIH0gLy8gbmFtZXNwYWNlIHRyMQogIH0gLy8gbmFtZXNwYWNlIHN0ZAoKWy4uLl0KCjguMS44IEZ1bmN0aW9uIGZhYnMgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ci5jOTkuY21wbHguZmFic10KCjEgRWZmZWN0czogQmVoYXZlcyB0aGUgc2FtZSBhcyBDOTkgZnVuY3Rpb24gY2FicywgZGVmaW5lZCBpbgogIHN1YmNsYXVzZSA3LjMuOC4xLgotLS0tLSBTTklQIC0tLS0tCjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpUaGUgY3VycmVudCBDKyswWCBkcmFmdCBkb2N1bWVudCAobjIwMDkucGRmKSBhZG9wdGVkIHRoaXMKZGVmaW5pdGlvbiBpbiBjaGFwdGVyIDI2LjMuMSAodW5kZXIgdGhlIGNvbW1lbnQgLy8gMjYuMy43IHZhbHVlcykKYW5kIDI2LjMuNy83Lgo8L3A+CjxwPgpCdXQgaW4gQzk5IChJU08vSUVDIDk4OTk6MTk5OSBhcyB3ZWxsIGFzIHRoZSA5ODk5OlRDMiBkcmFmdCBkb2N1bWVudApuMTEyNCksIHRoZSByZWZlcmVuY2VkIHN1YmNsYXVzZSByZWFkcwo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPi0tLS0tIFNOSVAgLS0tLS0KNy4zLjguMSBUaGUgY2FicyBmdW5jdGlvbnMKCiAgU3lub3BzaXMKCjEgI2luY2x1ZGUgJmx0O2NvbXBsZXguaCZndDsKICBkb3VibGUgY2Ficyhkb3VibGUgY29tcGxleCB6KTsKICBmbG9hdCBjYWJzZihmbG9hdCBjb21wbGV4IHopOwogIGxvbmcgZG91YmxlIGNhYnNsKGxvbmcgZG91YmxlIHopOwoKICBEZXNjcmlwdGlvbgoKMiBUaGUgY2FicyBmdW5jdGlvbnMgY29tcHV0ZSB0aGUgY29tcGxleCBhYnNvbHV0ZSB2YWx1ZSAoYWxzbyBjYWxsZWQKICBub3JtLCBtb2R1bHVzLCBvciBtYWduaXR1ZGUpIG9mIHouCgogIFJldHVybnMKCjMgVGhlIGNhYnMgZnVuY3Rpb25zIHJldHVybiB0aGUgY29tcGxleCBhYnNvbHV0ZSB2YWx1ZS4KLS0tLS0gU05JUCAtLS0tLQo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KTm90ZSB0aGF0IHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgY2FicyooKSBmdW5jdGlvbnMgaXMgbm90IGEgY29tcGxleAp0eXBlLiAgVGh1cywgdGhleSBhcmUgZXF1aXZhbGVudCB0byB0aGUgYWxyZWFkeSB3ZWxsIGVzdGFibGlzaGVkCiAgdGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgVCBhYnMoY29uc3QgY29tcGxleCZsdDtUJmd0OyZhbXA7IHgpOwooMjYuMi43LzIgaW4gSVNPL0lFQyAxNDg4MjoxOTk4LCAyNi4zLjcvMiBpbiB0aGUgY3VycmVudCBkcmFmdApkb2N1bWVudCBuMjAwOS5wZGYpLgo8L3A+CjxwPgpTbyBlaXRoZXIgdGhlIHJldHVybiB2YWx1ZSBvZiBmYWJzKCkgaXMgc3BlY2lmaWVkIHdyb25nbHksIG9yIGZhYnMoKQpkb2VzIG5vdCBiZWhhdmUgdGhlIHNhbWUgYXMgQzk5J3MgY2FicyooKS4KPC9wPgoKPGI+UG9zc2libGUgUmVzb2x1dGlvbnM8L2I+Cgo8cD4KVGhpcyBkZXBlbmRzIG9uIHRoZSBpbnRlbnRpb24gYmVoaW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgZmFicygpLgo8L3A+CjxwPgpJZiB0aGUgaW50ZW50aW9uIHdhcyB0byBwcm92aWRlIGEgL2NvbXBsZXgvIHZhbHVlZCBmdW5jdGlvbiB0aGF0CmNhbGN1bGF0ZXMgdGhlIG1hZ25pdHVkZSBvZiBpdHMgYXJndW1lbnQsIHRoaXMgc2hvdWxkIGJlCmV4cGxpY2l0bHkgc3BlY2lmaWVkLiAgSW4gVFIxLCB0aGUgY2F0ZWdvcml6YXRpb24gdW5kZXIgIkMKY29tcGF0aWJpbGl0eSIgaXMgZGVmaW5pdGVseSB3cm9uZywgc2luY2UgQzk5IGRvZXMgbm90IHByb3ZpZGUKc3VjaCBhIGNvbXBsZXggdmFsdWVkIGZ1bmN0aW9uLgo8L3A+CjxwPgpBbHNvLCBpdCByZW1haW5zIHF1ZXN0aW9uYWJsZSBpZiBzdWNoIGEgY29tcGxleCB2YWx1ZWQgZnVuY3Rpb24KaXMgcmVhbGx5IG5lZWRlZCwgc2luY2UgY29tcGxleCZsdDtUJmd0OyBzdXBwb3J0cyBjb25zdHJ1Y3Rpb24gYW5kCmFzc2lnbm1lbnQgZnJvbSByZWFsIHZhbHVlZCBhcmd1bWVudHMuICBUaGVyZSBpcyBubyBkaWZmZXJlbmNlCmluIG9ic2VydmFibGUgYmVoYXZpb3VyIGJldHdlZW4KPC9wPgo8YmxvY2txdW90ZT48cHJlPiAgY29tcGxleCZsdDtkb3VibGUmZ3Q7IHgsIHk7CiAgeSA9IGZhYnMoeCk7CiAgY29tcGxleCZsdDtkb3VibGUmZ3Q7IHooZmFicyh4KSk7CjwvcHJlPjwvYmxvY2txdW90ZT4KPHA+CmFuZAo8L3A+CjxibG9ja3F1b3RlPjxwcmU+ICBjb21wbGV4Jmx0O2RvdWJsZSZndDsgeCwgeTsKICB5ID0gYWJzKHgpOwogIGNvbXBsZXgmbHQ7ZG91YmxlJmd0OyB6KGFicyh4KSk7CjwvcHJlPjwvYmxvY2txdW90ZT4KPHA+CklmIG9uIHRoZSBvdGhlciBoYW5kIHRoZSBpbnRlbnRpb24gd2FzIHRvIHByb3ZpZGUgdGhlIGludGVuZGVkCmZ1bmN0aW9uYWxpdHkgb2YgQzk5LCBmYWJzKCkgc2hvdWxkIGJlIGVpdGhlciBkZWNsYXJlZCBkZXByZWNhdGVkCm9yIChmb3IgQysrMFgpIHJlbW92ZWQgZnJvbSB0aGUgc3RhbmRhcmQsIHNpbmNlIHRoZSBmdW5jdGlvbmFsaXR5CmlzIGFscmVhZHkgcHJvdmlkZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgb3ZlcmxvYWRzIG9mIGFicygpLgo8L3A+Cgo8cD48aT5bCkJlbGxldnVlOgpdPC9pPjwvcD4KCgo8YmxvY2txdW90ZT4KQmlsbCBiZWxpZXZlcyB0aGF0IGFicygpIGlzIGEgc3VpdGFibGUgb3ZlcmxvYWQuIFdlIHNob3VsZCByZW1vdmUgZmFicygpLgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+CkNoYW5nZSB0aGUgc3lub3BzaXMgaW4gMjYuMy4xIFtjb21wbGV4LnN5bm9wc2lzXToKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT48ZGVsPnRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IGNvbXBsZXgmbHQ7VCZndDsgZmFicyhjb25zdCBjb21wbGV4Jmx0O1QmZ3Q7JmFtcDspOzwvZGVsPgo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KUmVtb3ZlIDI2LjMuNyBbY29tcGxleC52YWx1ZS5vcHNdLCBwNzoKPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+PGRlbD50ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBjb21wbGV4Jmx0O1QmZ3Q7IGZhYnMoY29uc3QgY29tcGxleCZsdDtUJmd0OyZhbXA7IDxpPng8L2k+KTs8L2RlbD4KPC9wcmU+CjxibG9ja3F1b3RlPgo8cD4KPGRlbD4tNy0gPGk+RWZmZWN0czo8L2k+IEJlaGF2ZXMgdGhlIHNhbWUgYXMgQzk5IGZ1bmN0aW9uIDx0dD5jYWJzPC90dD4sIGRlZmluZWQgaW4gc3ViY2xhdXNlIDcuMy44LjEuPC9kZWw+CjwvcD4KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+CgoKCjxwPjxpPlsKS29uYSAoMjAwNyk6IENoYW5nZSB0aGUgcmV0dXJuIHR5cGUgb2YgPHR0PmZhYnMoY29tcGxleCk8L3R0PiB0byA8dHQ+VDwvdHQ+LiAKUHJvcG9zZWQgRGlzcG9zaXRpb246IFJlYWR5Cl08L2k+PC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjU5NiI+PC9hPjU5Ni4gMjcuOC4xLjMgVGFibGUgMTEyIG9taXRzICJhKyIgYW5kICJhK2IiIG1vZGVzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI3LjguMS40IFtmaWxlYnVmLm1lbWJlcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFRob21hcyBQbHVtIDxiPkRhdGU6PC9iPiAyMDA2LTA5LTI2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmaWxlYnVmLm1lbWJlcnMiPmlzc3VlczwvYT4gaW4gW2ZpbGVidWYubWVtYmVyc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJbiB0ZXN0aW5nIDI3LjguMS40IFtmaWxlYnVmLm1lbWJlcnNdLCBUYWJsZSAxMTIgKGluIHRoZSBsYXRlc3QgTjIwMDkgZHJhZnQpLCB3ZSBpbnZva2UgIAo8L3A+CjxibG9ja3F1b3RlPjxwcmU+ICAgb3N0ci5vcGVuKCJzb21lbmFtZSIsIGlvc19iYXNlOjpvdXQgfCBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6YXBwKQo8L3ByZT48L2Jsb2NrcXVvdGU+CjxwPgphbmQgd2UgZXhwZWN0IHRoZSBvcGVuIHRvIGZhaWwsIGJlY2F1c2Ugb3V0fGlufGFwcCBpcyBub3QgbGlzdGVkIGluClRhYmxlIDkyLCBhbmQganVzdCBiZWZvcmUgdGhlIHRhYmxlIHdlIHNlZSB2ZXJ5IHNwZWNpZmljIHdvcmRzOgo8L3A+CjxibG9ja3F1b3RlPjxwPgogIElmIG1vZGUgaXMgbm90IHNvbWUgY29tYmluYXRpb24gb2YgZmxhZ3Mgc2hvd24gaW4gdGhlIHRhYmxlIAogIHRoZW4gdGhlIG9wZW4gZmFpbHMuCjwvcD48L2Jsb2NrcXVvdGU+CjxwPgpCdXQgdGhlIGNvcnJlc3BvbmRpbmcgdGFibGUgaW4gdGhlIEMgc3RhbmRhcmQsIDcuMTkuNS4zLCBwcm92aWRlcyB0d28KbW9kZXMgImErIiBhbmQgImErYiIsIHRvIHdoaWNoIHRoZSBDKysgbW9kZXMgb3V0fGlufGFwcCBhbmQKb3V0fGlufGFwcHxiaW5hcnkgd291bGQgcHJlc3VtYWJseSBhcHBseS4KPC9wPgo8cD4KV2Ugd291bGQgbGlrZSB0byBhcmd1ZSB0aGF0IHRoZSBpbnRlbnQgb2YgVGFibGUgMTEyIHdhcyB0byBtYXRjaCB0aGUKc2VtYW50aWNzIG9mIDcuMTkuNS4zIGFuZCB0aGF0IHRoZSBvbWlzc2lvbiBvZiAiYSsiIGFuZCAiYStiIiB3YXMKdW5pbnRlbnRpb25hbC4gIChPdGhlcndpc2UgdGhlcmUgd291bGQgYmUgdmFsaWQgYW5kIHVzZWZ1bCBiZWhhdmlvcnMKYXZhaWxhYmxlIGluIEMgZmlsZSBJL08gd2hpY2ggYXJlIHVuYXZhaWxhYmxlIHVzaW5nIEMrKywgZm9yIG5vCnZhbGlkIGZ1bmN0aW9uYWwgcmVhc29uLikKPC9wPgo8cD4KV2UgZnVydGhlciByZXF1ZXN0IHRoYXQgdGhlIG1pc3NpbmcgbW9kZXMgYmUgZXhwbGljaXRseSByZXN0b3JlZCB0bwp0aGUgV1AsIGZvciBpbmNsdXNpb24gaW4gQysrMHguCjwvcD4KCjxwPjxpPlsKTWFydGluIGFkZHM6Cl08L2k+PC9wPgoKCjxwPgouLi5iZXNpZGVzICJhKyIgYW5kICJhK2IiIHRoZSBDKysgdGFibGUgaXMgYWxzbyBtaXNzaW5nIGEgcm93CmZvciBhIGxvbmUgYXBwIGJpdCB3aGljaCBpbiBhdCBsZWFzdCB0d28gY3VycmVudCBpbXBsZW1lbnRhdGlvbgphcyB3ZWxsIGFzIGluIENsYXNzaWMgSW9zdHJlYW1zIGNvcnJlc3BvbmRzIHRvIHRoZSBDIHN0ZGlvICJhIgptb2RlIGFuZCBoYXMgYmVlbiB0cmFkaXRpb25hbGx5IGRvY3VtZW50ZWQgYXMgaW1wbHlpbmcgaW9zOjpvdXQuCldoaWNoIG1lYW5zIHRoZSB0YWJsZSBzaG91bGQgYWxzbyBoYXZlIGEgcm93IGZvciBpbnxhcHAgbWVhbmluZwp0aGUgc2FtZSB0aGluZyBhcyAiYSsiIGFscmVhZHkgcHJvcG9zZWQgaW4gdGhlIGlzc3VlLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIHRvIHRoZSB0YWJsZSAiRmlsZSBvcGVuIG1vZGVzIiBpbiAyNy44LjEuNCBbZmlsZWJ1Zi5tZW1iZXJzXToKPC9wPgoKPGJsb2NrcXVvdGU+Cjx0YWJsZSBib3JkZXI9IjEiPgo8Y2FwdGlvbj4gRmlsZSBvcGVuIG1vZGVzPC9jYXB0aW9uPgo8dGJvZHk+PHRyPgo8dGggY29sc3Bhbj0iNSI+PHR0Pmlvc19iYXNlPC90dD4gRmxhZyBjb21iaW5hdGlvbjwvdGg+Cjx0aD48dHQ+c3RkaW88L3R0PiBlcXVpdmFsZW50PC90aD4KPC90cj4KPHRyPgo8dGg+PHR0PmJpbmFyeTwvdHQ+PC90aD48dGg+PHR0PmluPC90dD48L3RoPjx0aD48dHQ+b3V0PC90dD48L3RoPjx0aD48dHQ+dHJ1bmM8L3R0PjwvdGg+PHRoPjx0dD5hcHA8L3R0PjwvdGg+PHRoPjx0dD4mbmJzcDs8L3R0PjwvdGg+CjwvdHI+Cgo8dHI+Cjx0ZD4mbmJzcDs8L3RkPiA8dGQ+Jm5ic3A7PC90ZD4gPHRkPjx0dD4rPC90dD48L3RkPiA8dGQ+Jm5ic3A7PC90ZD4gPHRkPiZuYnNwOzwvdGQ+IDx0ZD48dHQ+InciPC90dD48L3RkPgo8L3RyPgo8dHI+Cjx0ZD4mbmJzcDs8L3RkPiA8dGQ+Jm5ic3A7PC90ZD4gPHRkPjx0dD4rPC90dD48L3RkPiA8dGQ+Jm5ic3A7PC90ZD4gPHRkPjx0dD4rPC90dD48L3RkPiA8dGQ+PHR0PiJhIjwvdHQ+PC90ZD4KPC90cj4KPHRyPgo8dGQ+Jm5ic3A7PC90ZD4gPHRkPiZuYnNwOzwvdGQ+IDx0ZD4mbmJzcDs8L3RkPiA8dGQ+Jm5ic3A7PC90ZD4gPHRkPjxpbnM+PHR0Pis8L3R0PjwvaW5zPjwvdGQ+IDx0ZD48aW5zPjx0dD4iYSI8L3R0PjwvaW5zPjwvdGQ+CjwvdHI+Cjx0cj4KPHRkPiZuYnNwOzwvdGQ+IDx0ZD4mbmJzcDs8L3RkPiA8dGQ+PHR0Pis8L3R0PjwvdGQ+IDx0ZD48dHQ+KzwvdHQ+PC90ZD4gPHRkPiZuYnNwOzwvdGQ+IDx0ZD48dHQ+InciPC90dD48L3RkPgo8L3RyPgo8dHI+Cjx0ZD4mbmJzcDs8L3RkPiA8dGQ+PHR0Pis8L3R0PjwvdGQ+IDx0ZD4mbmJzcDs8L3RkPiA8dGQ+Jm5ic3A7PC90ZD4gPHRkPiZuYnNwOzwvdGQ+IDx0ZD48dHQ+InIiPC90dD48L3RkPgo8L3RyPgo8dHI+Cjx0ZD4mbmJzcDs8L3RkPiA8dGQ+PHR0Pis8L3R0PjwvdGQ+IDx0ZD48dHQ+KzwvdHQ+PC90ZD4gPHRkPiZuYnNwOzwvdGQ+IDx0ZD4mbmJzcDs8L3RkPiA8dGQ+PHR0PiJyKyI8L3R0PjwvdGQ+CjwvdHI+Cjx0cj4KPHRkPiZuYnNwOzwvdGQ+IDx0ZD48dHQ+KzwvdHQ+PC90ZD4gPHRkPjx0dD4rPC90dD48L3RkPiA8dGQ+PHR0Pis8L3R0PjwvdGQ+IDx0ZD4mbmJzcDs8L3RkPiA8dGQ+PHR0PiJ3KyI8L3R0PjwvdGQ+CjwvdHI+Cjx0cj4KPHRkPiZuYnNwOzwvdGQ+IDx0ZD48aW5zPjx0dD4rPC90dD48L2lucz48L3RkPiA8dGQ+PGlucz48dHQ+KzwvdHQ+PC9pbnM+PC90ZD4gPHRkPiZuYnNwOzwvdGQ+IDx0ZD48aW5zPjx0dD4rPC90dD48L2lucz48L3RkPiA8dGQ+PGlucz48dHQ+ImErIjwvdHQ+PC9pbnM+PC90ZD4KPC90cj4KPHRyPgo8dGQ+Jm5ic3A7PC90ZD4gPHRkPjxpbnM+PHR0Pis8L3R0PjwvaW5zPjwvdGQ+IDx0ZD4mbmJzcDs8L3RkPiA8dGQ+Jm5ic3A7PC90ZD4gPHRkPjxpbnM+PHR0Pis8L3R0PjwvaW5zPjwvdGQ+IDx0ZD48aW5zPjx0dD4iYSsiPC90dD48L2lucz48L3RkPgo8L3RyPgoKPHRyPgo8dGQ+PHR0Pis8L3R0PjwvdGQ+IDx0ZD4mbmJzcDs8L3RkPiA8dGQ+PHR0Pis8L3R0PjwvdGQ+IDx0ZD4mbmJzcDs8L3RkPiA8dGQ+Jm5ic3A7PC90ZD4gPHRkPjx0dD4id2IiPC90dD48L3RkPgo8L3RyPgo8dHI+Cjx0ZD48dHQ+KzwvdHQ+PC90ZD4gPHRkPiZuYnNwOzwvdGQ+IDx0ZD48dHQ+KzwvdHQ+PC90ZD4gPHRkPiZuYnNwOzwvdGQ+IDx0ZD48dHQ+KzwvdHQ+PC90ZD4gPHRkPjx0dD4iYWIiPC90dD48L3RkPgo8L3RyPgo8dHI+Cjx0ZD48aW5zPjx0dD4rPC90dD48L2lucz48L3RkPiA8dGQ+Jm5ic3A7PC90ZD4gPHRkPiZuYnNwOzwvdGQ+IDx0ZD4mbmJzcDs8L3RkPiA8dGQ+PGlucz48dHQ+KzwvdHQ+PC9pbnM+PC90ZD4gPHRkPjxpbnM+PHR0PiJhYiI8L3R0PjwvaW5zPjwvdGQ+CjwvdHI+Cjx0cj4KPHRkPjx0dD4rPC90dD48L3RkPiA8dGQ+Jm5ic3A7PC90ZD4gPHRkPjx0dD4rPC90dD48L3RkPiA8dGQ+PHR0Pis8L3R0PjwvdGQ+IDx0ZD4mbmJzcDs8L3RkPiA8dGQ+PHR0PiJ3YiI8L3R0PjwvdGQ+CjwvdHI+Cjx0cj4KPHRkPjx0dD4rPC90dD48L3RkPiA8dGQ+PHR0Pis8L3R0PjwvdGQ+IDx0ZD4mbmJzcDs8L3RkPiA8dGQ+Jm5ic3A7PC90ZD4gPHRkPiZuYnNwOzwvdGQ+IDx0ZD48dHQ+InJiIjwvdHQ+PC90ZD4KPC90cj4KPHRyPgo8dGQ+PHR0Pis8L3R0PjwvdGQ+IDx0ZD48dHQ+KzwvdHQ+PC90ZD4gPHRkPjx0dD4rPC90dD48L3RkPiA8dGQ+Jm5ic3A7PC90ZD4gPHRkPiZuYnNwOzwvdGQ+IDx0ZD48dHQ+InIrYiI8L3R0PjwvdGQ+CjwvdHI+Cjx0cj4KPHRkPjx0dD4rPC90dD48L3RkPiA8dGQ+PHR0Pis8L3R0PjwvdGQ+IDx0ZD48dHQ+KzwvdHQ+PC90ZD4gPHRkPjx0dD4rPC90dD48L3RkPiA8dGQ+Jm5ic3A7PC90ZD4gPHRkPjx0dD4idytiIjwvdHQ+PC90ZD4KPC90cj48dHI+Cjx0ZD48aW5zPjx0dD4rPC90dD48L2lucz48L3RkPiA8dGQ+PGlucz48dHQ+KzwvdHQ+PC9pbnM+PC90ZD4gPHRkPjxpbnM+PHR0Pis8L3R0PjwvaW5zPjwvdGQ+IDx0ZD4mbmJzcDs8L3RkPiA8dGQ+PGlucz48dHQ+KzwvdHQ+PC9pbnM+PC90ZD4gPHRkPjxpbnM+PHR0PiJhK2IiPC90dD48L2lucz48L3RkPgo8L3RyPgo8dHI+Cjx0ZD48aW5zPjx0dD4rPC90dD48L2lucz48L3RkPiA8dGQ+PGlucz48dHQ+KzwvdHQ+PC9pbnM+PC90ZD4gPHRkPiZuYnNwOzwvdGQ+IDx0ZD4mbmJzcDs8L3RkPiA8dGQ+PGlucz48dHQ+KzwvdHQ+PC9pbnM+PC90ZD4gPHRkPjxpbnM+PHR0PiJhK2IiPC90dD48L2lucz48L3RkPgo8L3RyPgoKCjwvdGJvZHk+PC90YWJsZT4KPC9ibG9ja3F1b3RlPgoKCgo8cD48aT5bCktvbmEgKDIwMDcpIEFkZGVkIHByb3Bvc2VkIHdvcmRpbmcgYW5kIG1vdmVkIHRvIFJldmlldy4KXTwvaT48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTk4Ij48L2E+NTk4LiBEZWNpbWFsOiBDb252ZXJzaW9uIHRvIGludGVncmFsIHNob3VsZCB0cnVuY2F0ZSwgbm90IHJvdW5kLjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiBUUkRlY2ltYWwgMy4yIFt0cmRlYy50eXBlcy50eXBlc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVFJEZWMiPlRSRGVjPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGFuaWVsIEtydWdsZXIgPGI+RGF0ZTo8L2I+IDIwMDYtMDUtMjg8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCN0cmRlYy50eXBlcy50eXBlcyI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW3RyZGVjLnR5cGVzLnR5cGVzXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3RyZGVjLnR5cGVzLnR5cGVzIj5pc3N1ZXM8L2E+IGluIFt0cmRlYy50eXBlcy50eXBlc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVFJEZWMiPlRSRGVjPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+Cgo8cD4KSW4gYSBwcml2YXRlIGVtYWlsLCBEYW5pZWwgd3JpdGVzOgo8L3A+CjxibG9ja3F1b3RlPgo8cD4KSSB3b3VsZCBsaWtlIHRvIAphc2ssIHdoYXQgd2hlcmUgdGhlIHJlYXNvbiBmb3IgdGhlIGRlY2lzaW9uIHRvIApkZWZpbmUgdGhlIHNlbWFudGljcyBvZiB0aGUgaW50ZWdyYWwgY29udmVyc2lvbiBvZiB0aGUgZGVjaW1hbCB0eXBlcywgbmFtZWx5CjwvcD4KPHByZT4ib3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3Q7CgogICAgIFJldHVybnM6IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgCmNvbnZlcnNpb24gb2YgKnRoaXMgdG8gdGhlIHR5cGUgbG9uZyBsb25nLCBhcyBpZiAKcGVyZm9ybWVkIGJ5IHRoZSBleHByZXNzaW9uIGxscm91bmRkWFgoKnRoaXMpLiIKPC9wcmU+CjxwPgp3aGVyZSBYWCBzdGFuZHMgZm9yIGVpdGhlciAzMiwgNjQsIG9yIDEyOCwgCmNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlciBkZWNpbWFsIHR5cGUuIFRoZSAKZXhhY3QgbWVhbmluZyBvZiBsbHJvdW5kZFhYIGlzIG5vdCBnaXZlbiBpbiB0aGF0IApwYXBlciwgc28gSSBjb21wYXJlZCBpdCB0byB0aGUgY29ycmVzcG9uZGluZyAKZGVmaW5pdGlvbiBnaXZlbiBpbiBDOTksIDJuZCBlZGl0aW9uIChJU08gOTg5OSksIHdoaWNoIHNheXMgaW4gNy4xMi45LjcgcC4gMjoKPC9wPgo8cD4KIlRoZSBscm91bmQgYW5kIGxscm91bmQgZnVuY3Rpb25zIHJvdW5kIHRoZWlyIAphcmd1bWVudCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHZhbHVlLApyb3VuZGluZyBoYWxmd2F5IGNhc2VzIGF3YXkgZnJvbSB6ZXJvLCByZWdhcmRsZXNzIApvZiB0aGUgY3VycmVudCByb3VuZGluZyBkaXJlY3Rpb24uIFsuLl0iCjwvcD4KPHA+Ck5vdyBjb25zaWRlcmluZyB0aGUgZmFjdCB0aGF0IGludGVncmFsIGNvbnZlcnNpb24gCm9mIHRoZSB1c3VhbCBmbG9hdGluZy1wb2ludCB0eXBlcyAoIjQuOSAKRmxvYXRpbmctaW50ZWdyYWwgY29udmVyc2lvbnMiKSBoYXMgdHJ1bmNhdGlvbiAKc2VtYW50aWMgSSB3b25kZXIgd2h5IHRoaXMgY29udmVyc2lvbiBiZWhhdmlvdXIgCmhhcyBub3QgYmVlbiB0cmFuc2ZlcnJlZCBmb3IgdGhlIGRlY2ltYWwgdHlwZXMuIAo8L3A+CjwvYmxvY2txdW90ZT4KPHA+ClJvYmVydCBjb21tZW50czoKPC9wPgo8cD4KQWxzbywgdGhlcmUgaXMgYSBmdXJ0aGVyIGVycm9yIGluIHRoZSA8Yj5SZXR1cm5zOjwvYj4gY2xhdXNlIGZvciBjb252ZXJ0aW5nIDxjb2RlPmRlY2ltYWw6OmRlY2ltYWwxMjg8L2NvZGU+IHRvIDxjb2RlPmxvbmcgbG9uZzwvY29kZT4uICBJdCBjdXJyZW50bHkgY2FsbHMgPGNvZGU+bGxyb3VuZGQ2NDwvY29kZT4sIG5vdCA8Y29kZT5sbHJvdW5kZDEyODwvY29kZT4uCjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIHRoZSA8Yj5SZXR1cm5zOjwvYj4gY2xhdXNlIGluIDMuMi4yLjQgdG86CjwvcD4KPGJsb2NrcXVvdGU+PHA+CjxiPlJldHVybnM6PC9iPiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24gb2YgPGNvZGU+KnRoaXM8L2NvZGU+IHRvIHRoZSB0eXBlIDxjb2RlPmxvbmcgbG9uZzwvY29kZT4sIGFzIGlmIHBlcmZvcm1lZCBieSB0aGUgZXhwcmVzc2lvbiA8Y29kZT5sbHJvdW5kZDMyKCp0aGlzKTwvY29kZT4gPGlucz53aGlsZSB0aGUgZGVjaW1hbCByb3VuZGluZyBkaXJlY3Rpb24gbW9kZSBbMy41LjJdIDxjb2RlPkZFX0RFQ19UT1dBUkRfWkVSTzwvY29kZT4gaXMgaW4gZWZmZWN0PC9pbnM+Lgo8L3A+PC9ibG9ja3F1b3RlPgo8cD4KQ2hhbmdlIHRoZSA8Yj5SZXR1cm5zOjwvYj4gY2xhdXNlIGluIDMuMi4zLjQgdG86CjwvcD4KPGJsb2NrcXVvdGU+PHA+CjxiPlJldHVybnM6PC9iPiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24gb2YgPGNvZGU+KnRoaXM8L2NvZGU+IHRvIHRoZSB0eXBlIDxjb2RlPmxvbmcgbG9uZzwvY29kZT4sIGFzIGlmIHBlcmZvcm1lZCBieSB0aGUgZXhwcmVzc2lvbiA8Y29kZT5sbHJvdW5kZDY0KCp0aGlzKTwvY29kZT4gPGlucz53aGlsZSB0aGUgZGVjaW1hbCByb3VuZGluZyBkaXJlY3Rpb24gbW9kZSBbMy41LjJdIDxjb2RlPkZFX0RFQ19UT1dBUkRfWkVSTzwvY29kZT4gaXMgaW4gZWZmZWN0PC9pbnM+Lgo8L3A+PC9ibG9ja3F1b3RlPgo8cD4KQ2hhbmdlIHRoZSA8Yj5SZXR1cm5zOjwvYj4gY2xhdXNlIGluIDMuMi40LjQgdG86CjwvcD4KPGJsb2NrcXVvdGU+PHA+CjxiPlJldHVybnM6PC9iPiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24gb2YgPGNvZGU+KnRoaXM8L2NvZGU+IHRvIHRoZSB0eXBlIDxjb2RlPmxvbmcgbG9uZzwvY29kZT4sIGFzIGlmIHBlcmZvcm1lZCBieSB0aGUgZXhwcmVzc2lvbiA8ZGVsPjxjb2RlPmxscm91bmRkNjQoKnRoaXMpPC9jb2RlPjwvZGVsPiA8aW5zPjxjb2RlPmxscm91bmRkMTI4KCp0aGlzKTwvY29kZT4gd2hpbGUgdGhlIGRlY2ltYWwgcm91bmRpbmcgZGlyZWN0aW9uIG1vZGUgWzMuNS4yXSA8Y29kZT5GRV9ERUNfVE9XQVJEX1pFUk88L2NvZGU+IGlzIGluIGVmZmVjdDwvaW5zPi4KPC9wPjwvYmxvY2txdW90ZT4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNTk5Ij48L2E+NTk5LiBEZWNpbWFsOiBTYXkgIm9jdGV0cyIgaW5zdGVhZCBvZiAiYnl0ZXMuIjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiBUUkRlY2ltYWwgMy4xIFt0cmRlYy50eXBlcy5lbmNvZGluZ3NdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RSRGVjIj5UUkRlYzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERhbmllbCBLcnVnbGVyIDxiPkRhdGU6PC9iPiAyMDA2LTA1LTI4PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVFJEZWMiPlRSRGVjPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpEYW5pZWwgd3JpdGVzIGluIGEgcHJpdmF0ZSBlbWFpbDoKPC9wPgoKPGJsb2NrcXVvdGU+CjxwPgotIDMuMSAnRGVjaW1hbCB0eXBlIGVuY29kaW5ncycgc2F5cyBpbiBpdHMgbm90ZToKPC9wPgo8cHJlPiJ0aGlzIGltcGxpZXMgdGhhdCAKc2l6ZW9mKHN0ZDo6ZGVjaW1hbDo6ZGVjaW1hbDMyKSA9PSA0LCAKc2l6ZW9mKHN0ZDo6ZGVjaW1hbDo6ZGVjaW1hbDY0KSA9PSA4LCBhbmQgCnNpemVvZihzdGQ6OmRlY2ltYWw6OmRlY2ltYWwxMjgpID09IDE2LiIKPC9wcmU+CjxwPgpUaGlzIGlzIGEgd3JvbmcgYXNzZXJ0aW9uLCBiZWNhdXNlIHRoZSBkZWZpbml0aW9uIApvZiAnYnl0ZScgaW4gMS43ICdUaGUgQysgKyBtZW1vcnkgbW9kZWwnIG9mIElTTyAKMTQ4ODIgKDJuZCBlZGl0aW9uKSBkb2VzIG5vdCBzcGVjaWZ5IHRoYXQgYSBieXRlIAptdXN0IGJlIG5lY2Vzc2FyaWx5IDggYml0cyBsYXJnZSwgd2hpY2ggd291bGQgYmUgCm5lY2Vzc2FyeSB0byBjb21wYXJlIHdpdGggdGhlIHNwZWNpZmllZCBiaXQgc2l6ZXMgCm9mIHRoZSB0eXBlcyBkZWNpbWFsMzIsIGRlY2ltYWw2NCwgYW5kIGRlY2ltYWwxMjguCjwvcD4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAzLjEgYXMgZm9sbG93czoKPC9wPgo8YmxvY2txdW90ZT4KPHA+ClRoZSB0aHJlZSBkZWNpbWFsIGVuY29kaW5nIGZvcm1hdHMgZGVmaW5lZCBpbiBJRUVFLTc1NFIgY29ycmVzcG9uZCB0byB0aGUgdGhyZWUgZGVjaW1hbCBmbG9hdGluZyB0eXBlcyBhcyBmb2xsb3dzOgo8L3A+Cjx1bD4KPGxpPgpkZWNpbWFsMzIgaXMgYSA8ZW0+ZGVjaW1hbDMyPC9lbT4gbnVtYmVyLCB3aGljaCBpcyBlbmNvZGVkIGluIGZvdXIgY29uc2VjdXRpdmUgPGRlbD5ieXRlczwvZGVsPiA8aW5zPm9jdGV0czwvaW5zPiAoMzIgYml0cykKPC9saT4KPGxpPgpkZWNpbWFsNjQgaXMgYSA8ZW0+ZGVjaW1hbDY0PC9lbT4gbnVtYmVyLCB3aGljaCBpcyBlbmNvZGVkIGluIGVpZ2h0IGNvbnNlY3V0aXZlIDxkZWw+Ynl0ZXM8L2RlbD4gPGlucz5vY3RldHM8L2lucz4gKDY0IGJpdHMpCgo8L2xpPgo8bGk+CmRlY2ltYWwxMjggaXMgYSA8ZW0+ZGVjaW1hbDEyODwvZW0+IG51bWJlciwgd2hpY2ggaXMgZW5jb2RlZCBpbiAxNiBjb25zZWN1dGl2ZSA8ZGVsPmJ5dGVzPC9kZWw+IDxpbnM+b2N0ZXRzPC9pbnM+ICgxMjggYml0cykKPC9saT4KPC91bD4KPHA+CjxkZWw+WzxpPk5vdGU6PC9pPiB0aGlzIGltcGxpZXMgdGhhdCA8Y29kZT5zaXplb2Yoc3RkOjpkZWNpbWFsOjpkZWNpbWFsMzIpID09IDQ8L2NvZGU+LCA8Y29kZT5zaXplb2Yoc3RkOjpkZWNpbWFsOjpkZWNpbWFsNjQpID09IDg8L2NvZGU+LCBhbmQgPGNvZGU+c2l6ZW9mKHN0ZDo6ZGVjaW1hbDo6ZGVjaW1hbDEyOCkgPT0gMTY8L2NvZGU+LiAgPGk+LS1lbmQgbm90ZTwvaT5dPC9kZWw+CjwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjAwIj48L2E+NjAwLiBEZWNpbWFsOiBXcm9uZyBwYXJhbWV0ZXJzIGZvciB3Y3N0b2QqIGZ1bmN0aW9uczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiBUUkRlY2ltYWwgMy45IFt0cmRlYy50eXBlcy5jd2NoYXJdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RSRGVjIj5UUkRlYzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERhbmllbCBLcnVnbGVyIDxiPkRhdGU6PC9iPiAyMDA2LTA1LTI4PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVFJEZWMiPlRSRGVjPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpEYW5pZWwgd3JpdGVzOgo8L3A+CjxibG9ja3F1b3RlPjxwPgotIDMuOS4xICdBZGRpdGlvbnMgdG8gJmx0O2N3Y2hhciZndDsnIHByb3ZpZGVzIHdyb25nIApzaWduYXR1cmVzIHRvIHRoZSB3Y3N0b2QzMiwgd2NzdG9kNjQsIGFuZCAKd2NzdG9kMTI4IGZ1bmN0aW9ucyAoW3RoZSBwYXJhbWV0ZXJzIGhhdmUgdHlwZSBwb2ludGVyLXRvLV0gY2hhciBpbnN0ZWFkIG9mIHdjaGFyX3QpLgo8L3A+PC9ibG9ja3F1b3RlPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAiMy45LjEgQWRkaXRpb25zIHRvIDxjb2RlPiZsdDtjd2NoYXImZ3Q7PC9jb2RlPiBzeW5vcHNpcyIgdG86CjwvcD4KPHByZT4gICAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICBuYW1lc3BhY2UgZGVjaW1hbCB7CiAgICAgICAgIC8vIDMuOS4yIHdjc3RvZCBmdW5jdGlvbnM6CiAgICAgICAgIGRlY2ltYWwzMiAgd2NzdG9kMzIgIChjb25zdCA8ZGVsPmNoYXI8L2RlbD4gPGlucz53Y2hhcl90PC9pbnM+ICogbnB0ciwgPGRlbD5jaGFyPC9kZWw+IDxpbnM+d2NoYXJfdDwvaW5zPiAqKiBlbmRwdHIpOwogICAgICAgICBkZWNpbWFsNjQgIHdjc3RvZDY0ICAoY29uc3QgPGRlbD5jaGFyPC9kZWw+IDxpbnM+d2NoYXJfdDwvaW5zPiAqIG5wdHIsIDxkZWw+Y2hhcjwvZGVsPiA8aW5zPndjaGFyX3Q8L2lucz4gKiogZW5kcHRyKTsKICAgICAgICAgZGVjaW1hbDEyOCB3Y3N0b2QxMjggKGNvbnN0IDxkZWw+Y2hhcjwvZGVsPiA8aW5zPndjaGFyX3Q8L2lucz4gKiBucHRyLCA8ZGVsPmNoYXI8L2RlbD4gPGlucz53Y2hhcl90PC9pbnM+ICoqIGVuZHB0cik7CiAgICAgICB9CiAgICAgICB9CjwvcHJlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjAxIj48L2E+NjAxLiBEZWNpbWFsOiBudW1lcmljX2xpbWl0cyB0eXBvczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiBUUkRlY2ltYWwgMy4zIFt0cmRlYy50eXBlcy5saW1pdHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RSRGVjIj5UUkRlYzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERhbmllbCBLcnVnbGVyIDxiPkRhdGU6PC9iPiAyMDA2LTA1LTI4PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjVFJEZWMiPlRSRGVjPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpEYW5pZWwgd3JpdGVzIGluIGEgcHJpdmF0ZSBlbWFpbDoKPC9wPgoKPGJsb2NrcXVvdGU+CjxwPgotIDMuMyAnQWRkaXRpb25zIHRvIGhlYWRlciAmbHQ7bGltaXRzJmd0OycgY29udGFpbnMgdHdvIAplcnJvcnMgaW4gdGhlIHNwZWNpYWxpc2F0aW9uIG9mIG51bWVyaWNfbGltaXRzJmx0O2RlY2ltYWw6OmRlY2ltYWwxMjgmZ3Q7Ogo8L3A+CjxvbD4KPGxpPlRoZSBzdGF0aWMgbWVtYmVyIG1heCgpIHJldHVybnMgREVDMTI4X01JTiwgdGhpcyBzaG91bGQgYmUgREVDMTI4X01BWC48L2xpPgo8bGk+VGhlIHN0YXRpYyBtZW1iZXIgZGlnaXRzIGlzIGFzc2lnbmVkIHRvIDM4NCwKdGhpcyBzaG91bGQgYmUgMzQgKFByb2JhYmx5IG1peGVkIHVwIHdpdGggdGhlCm1heC4gZXhwb25lbnQgZm9yIGRlY2ltYWw6OmRlY2ltYWw2NCkuPC9saT4KPC9vbD4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluICIzLjMgQWRkaXRpb25zIHRvIGhlYWRlciA8Y29kZT4mbHQ7bGltaXRzJmd0OzwvY29kZT4iIGNoYW5nZSBudW1lcmljX2xpbWl0cyZsdDtkZWNpbWFsOjpkZWNpbWFsMTI4Jmd0OyBhcyBmb2xsb3dzOgo8L3A+CjxwcmU+ICAgICAgICB0ZW1wbGF0ZSZsdDsmZ3Q7IGNsYXNzIG51bWVyaWNfbGltaXRzJmx0O2RlY2ltYWw6OmRlY2ltYWwxMjgmZ3Q7IHsKICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICAgICAgc3RhdGljIGRlY2ltYWw6OmRlY2ltYWwxMjggbWluKCkgdGhyb3coKSB7IHJldHVybiBERUMxMjhfTUlOOyB9CiAgICAgICAgICAgIHN0YXRpYyBkZWNpbWFsOjpkZWNpbWFsMTI4IG1heCgpIHRocm93KCkgeyByZXR1cm4gPGRlbD5ERUMxMjhfTUlOOzwvZGVsPiA8aW5zPkRFQzEyOF9NQVg7PC9pbnM+IH0KCiAgICAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzICAgICAgID0gPGRlbD4zODQ8L2RlbD4gPGlucz4zNDwvaW5zPjsKICAgICAgICAgICAgLyogLi4uICovCjwvcHJlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjAyIj48L2E+NjAyLiBEZWNpbWFsOiAiZ2VuZXJpYyBmbG9hdGluZyB0eXBlIiBub3QgZGVmaW5lZC48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gVFJEZWNpbWFsIDMgW3RyZGVjLnR5cGVzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUUkRlYyI+VFJEZWM8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEYW5pZWwgS3J1Z2xlciA8Yj5EYXRlOjwvYj4gMjAwNi0wNS0yODwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjdHJkZWMudHlwZXMiPmlzc3VlczwvYT4gaW4gW3RyZGVjLnR5cGVzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUUkRlYyI+VFJEZWM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBkb2N1bWVudCB1c2VzIHRoZSB0ZXJtICJnZW5lcmljIGZsb2F0aW5nIHR5cGVzLCIgYnV0IGRlZmluZXMgaXQgbm93aGVyZS4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mICIzIERlY2ltYWwgZmxvYXRpbmctcG9pbnQgdHlwZXMiIGFzIGZvbGxvd3M6CjwvcD4KPGJsb2NrcXVvdGU+PHA+ClRoaXMgVGVjaG5pY2FsIFJlcG9ydCBpbnRyb2R1Y2VzIHRocmVlIGRlY2ltYWwgZmxvYXRpbmctcG9pbnQgdHlwZXMsIG5hbWVkCmRlY2ltYWwzMiwgZGVjaW1hbDY0LCBhbmQgZGVjaW1hbDEyOC4gVGhlIHNldCBvZiB2YWx1ZXMgb2YgdHlwZSBkZWNpbWFsMzIgaXMgYQpzdWJzZXQgb2YgdGhlIHNldCBvZiB2YWx1ZXMgb2YgdHlwZSBkZWNpbWFsNjQ7IHRoZSBzZXQgb2YgdmFsdWVzIG9mIHRoZSB0eXBlCmRlY2ltYWw2NCBpcyBhIHN1YnNldCBvZiB0aGUgc2V0IG9mIHZhbHVlcyBvZiB0aGUgdHlwZSBkZWNpbWFsMTI4LiBTdXBwb3J0IGZvcgpkZWNpbWFsMTI4IGlzIG9wdGlvbmFsLiAgPGlucz5UaGVzZSB0eXBlcyBzdXBwbGVtZW50IHRoZSBTdGFuZGFyZCBDKysgdHlwZXMKPGNvZGU+ZmxvYXQ8L2NvZGU+LCA8Y29kZT5kb3VibGU8L2NvZGU+LCBhbmQgPGNvZGU+bG9uZyBkb3VibGU8L2NvZGU+LCB3aGljaCBhcmUKY29sbGVjdGl2ZWx5IGRlc2NyaWJlZCBhcyB0aGUgPGk+YmFzaWMgZmxvYXRpbmcgdHlwZXM8L2k+PC9pbnM+Lgo8L3A+PC9ibG9ja3F1b3RlPgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjAzIj48L2E+NjAzLiBEZWNpbWFsOiBUcml2aWFsbHkgc2ltcGxpZnlpbmcgZGVjaW1hbCBjbGFzc2VzLjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiBUUkRlY2ltYWwgMyBbdHJkZWMudHlwZXNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RSRGVjIj5UUkRlYzwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwNi0wNS0yODwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjdHJkZWMudHlwZXMiPmlzc3VlczwvYT4gaW4gW3RyZGVjLnR5cGVzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNUUkRlYyI+VFJEZWM8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+SW4gYysrc3RkLWxpYi0xNzE5OCwgTWFydGluIHdyaXRlczo8L3A+Cgo8YmxvY2txdW90ZT48cD4KRWFjaCBvZiB0aGUgdGhyZWUgY2xhc3NlcyBwcm9wb3NlZCBpbiB0aGUgcGFwZXIgKGRlY2ltYWwzMiwgZGVjaW1hbDY0LAphbmQgZGVjaW1hbDEyOCkgZXhwbGljaXRseSBkZWNsYXJlcyBhbmQgc3BlY2lmaWVzIHRoZSBzZW1hbnRpY3Mgb2YgaXRzCmNvcHkgY29uc3RydWN0b3IsIGNvcHkgYXNzaWdubWVudCBvcGVyYXRvciwgYW5kIGRlc3RydWN0b3IuIFNpbmNlIHRoZQpzZW1hbnRpY3Mgb2YgYWxsIHRocmVlIGZ1bmN0aW9ucyBhcmUgaWRlbnRpY2FsIHRvIHRoZSB0cml2aWFsIHZlcnNpb25zCmltcGxpY2l0bHkgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciBpbiB0aGUgYWJzZW5jZSBvZiBhbnkgZGVjbGFyYXRpb25zCml0IGlzIHNhZmUgdG8gZHJvcCB0aGVtIGZyb20gdGhlIHNwZWMuIFRoaXMgY2hhbmdlIHdvdWxkIG1ha2UgdGhlCnByb3Bvc2VkIGNsYXNzZXMgY29uc2lzdGVudCB3aXRoIG90aGVyIHNpbWlsYXIgY2xhc3NlcyBhbHJlYWR5IGluIHRoZQpzdGFuZGFyZCAoZS5nLiwgc3RkOjpjb21wbGV4KS4KPC9wPjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgIjMuMi4yIENsYXNzIDxjb2RlPmRlY2ltYWwzMjwvY29kZT4iIGFzIGZvbGxvd3M6CjwvcD4KPHByZT4gICAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgbmFtZXNwYWNlIGRlY2ltYWwgewogICAgICAgIGNsYXNzIGRlY2ltYWwzMiB7CiAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8vIDMuMi4yLjEgY29uc3RydWN0L2NvcHkvZGVzdHJveToKICAgICAgICAgICAgZGVjaW1hbDMyKCk7CiAgICAgICAgICAgIDxkZWw+ZGVjaW1hbDMyKGNvbnN0IGRlY2ltYWwzMiAmYW1wOyBkMzIpOzwvZGVsPgogICAgICAgICAgICA8ZGVsPmRlY2ltYWwzMiAmYW1wOyBvcGVyYXRvcj0oY29uc3QgZGVjaW1hbDMyICZhbXA7IGQzMik7PC9kZWw+CiAgICAgICAgICAgIDxkZWw+fmRlY2ltYWwzMigpOzwvZGVsPgogICAgICAgICAgICAvKiAuLi4gKi8KPC9wcmU+CjxwPgpDaGFuZ2UgIjMuMi4yLjEgY29uc3RydWN0L2NvcHkvZGVzdHJveSIgYXMgZm9sbG93czoKPC9wPgo8cHJlPiAgICAgICAgZGVjaW1hbDMyKCk7CgogICAgRWZmZWN0czogQ29uc3RydWN0cyBhbiBvYmplY3Qgb2YgdHlwZSBkZWNpbWFsMzIgd2l0aCB0aGUgdmFsdWUgMDsKCiAgICAgICAgPGRlbD5kZWNpbWFsMzIoY29uc3QgZGVjaW1hbDMyICZhbXA7IGQzMik7PC9kZWw+CiAgICAgICAgPGRlbD5kZWNpbWFsMzIgJmFtcDsgb3BlcmF0b3I9KGNvbnN0IGRlY2ltYWwzMiAmYW1wOyBkMzIpOzwvZGVsPgoKICAgIDxkZWw+RWZmZWN0czogQ29waWVzIGFuIG9iamVjdCBvZiB0eXBlIGRlY2ltYWwzMi48L2RlbD4KCiAgICAgICAgPGRlbD5+ZGVjaW1hbDMyKCk7PC9kZWw+CgogICAgPGRlbD5FZmZlY3RzOiBEZXN0cm95cyBhbiBvYmplY3Qgb2YgdHlwZSBkZWNpbWFsMzIuPC9kZWw+Cgo8L3ByZT4KPHA+CkNoYW5nZSAiMy4yLjMgQ2xhc3MgPGNvZGU+ZGVjaW1hbDY0PC9jb2RlPiIgYXMgZm9sbG93czoKPC9wPgo8cHJlPiAgICAgIG5hbWVzcGFjZSBzdGQgewogICAgICBuYW1lc3BhY2UgZGVjaW1hbCB7CiAgICAgICAgY2xhc3MgZGVjaW1hbDY0IHsKICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgLy8gMy4yLjMuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgogICAgICAgICAgICBkZWNpbWFsNjQoKTsKICAgICAgICAgICAgPGRlbD5kZWNpbWFsNjQoY29uc3QgZGVjaW1hbDY0ICZhbXA7IGQ2NCk7PC9kZWw+CiAgICAgICAgICAgIDxkZWw+ZGVjaW1hbDY0ICZhbXA7IG9wZXJhdG9yPShjb25zdCBkZWNpbWFsNjQgJmFtcDsgZDY0KTs8L2RlbD4KICAgICAgICAgICAgPGRlbD5+ZGVjaW1hbDY0KCk7PC9kZWw+CiAgICAgICAgICAgIC8qIC4uLiAqLwo8L3ByZT4KPHA+CkNoYW5nZSAiMy4yLjMuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95IiBhcyBmb2xsb3dzOgo8L3A+CjxwcmU+ICAgICAgICBkZWNpbWFsNjQoKTsKCiAgICBFZmZlY3RzOiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiB0eXBlIGRlY2ltYWw2NCB3aXRoIHRoZSB2YWx1ZSAwOwoKICAgICAgICA8ZGVsPmRlY2ltYWw2NChjb25zdCBkZWNpbWFsNjQgJmFtcDsgZDY0KTs8L2RlbD4KICAgICAgICA8ZGVsPmRlY2ltYWw2NCAmYW1wOyBvcGVyYXRvcj0oY29uc3QgZGVjaW1hbDY0ICZhbXA7IGQ2NCk7PC9kZWw+CgogICAgPGRlbD5FZmZlY3RzOiBDb3BpZXMgYW4gb2JqZWN0IG9mIHR5cGUgZGVjaW1hbDY0LjwvZGVsPgoKICAgICAgICA8ZGVsPn5kZWNpbWFsNjQoKTs8L2RlbD4KCiAgICA8ZGVsPkVmZmVjdHM6IERlc3Ryb3lzIGFuIG9iamVjdCBvZiB0eXBlIGRlY2ltYWw2NC48L2RlbD4KCjwvcHJlPgo8cD4KQ2hhbmdlICIzLjIuNCBDbGFzcyA8Y29kZT5kZWNpbWFsMTI4PC9jb2RlPiIgYXMgZm9sbG93czoKPC9wPgo8cHJlPiAgICAgIG5hbWVzcGFjZSBzdGQgewogICAgICBuYW1lc3BhY2UgZGVjaW1hbCB7CiAgICAgICAgY2xhc3MgZGVjaW1hbDEyOCB7CiAgICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIC8vIDMuMi40LjEgY29uc3RydWN0L2NvcHkvZGVzdHJveToKICAgICAgICAgICAgZGVjaW1hbDEyOCgpOwogICAgICAgICAgICA8ZGVsPmRlY2ltYWwxMjgoY29uc3QgZGVjaW1hbDEyOCAmYW1wOyBkMTI4KTs8L2RlbD4KICAgICAgICAgICAgPGRlbD5kZWNpbWFsMTI4ICZhbXA7IG9wZXJhdG9yPShjb25zdCBkZWNpbWFsMTI4ICZhbXA7IGQxMjgpOzwvZGVsPgogICAgICAgICAgICA8ZGVsPn5kZWNpbWFsMTI4KCk7PC9kZWw+CiAgICAgICAgICAgIC8qIC4uLiAqLwo8L3ByZT4KPHA+CkNoYW5nZSAiMy4yLjQuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95IiBhcyBmb2xsb3dzOgo8L3A+CjxwcmU+ICAgICAgICBkZWNpbWFsMTI4KCk7CgogICAgRWZmZWN0czogQ29uc3RydWN0cyBhbiBvYmplY3Qgb2YgdHlwZSBkZWNpbWFsMTI4IHdpdGggdGhlIHZhbHVlIDA7CgogICAgICAgIDxkZWw+ZGVjaW1hbDEyOChjb25zdCBkZWNpbWFsMTI4ICZhbXA7IGQxMjgpOzwvZGVsPgogICAgICAgIDxkZWw+ZGVjaW1hbDEyOCAmYW1wOyBvcGVyYXRvcj0oY29uc3QgZGVjaW1hbDEyOCAmYW1wOyBkMTI4KTs8L2RlbD4KCiAgICA8ZGVsPkVmZmVjdHM6IENvcGllcyBhbiBvYmplY3Qgb2YgdHlwZSBkZWNpbWFsMTI4LjwvZGVsPgoKICAgICAgICA8ZGVsPn5kZWNpbWFsMTI4KCk7PC9kZWw+CgogICAgPGRlbD5FZmZlY3RzOiBEZXN0cm95cyBhbiBvYmplY3Qgb2YgdHlwZSBkZWNpbWFsMTI4LjwvZGVsPgoKPC9wcmU+CgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2MDQiPjwvYT42MDQuIERlY2ltYWw6IFN0b3JpbmcgYSByZWZlcmVuY2UgdG8gYSBmYWNldCB1bnNhZmUuPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IFRSRGVjaW1hbCAzIFt0cmRlYy50eXBlc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVFJEZWMiPlRSRGVjPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDA2LTA1LTI4PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCN0cmRlYy50eXBlcyI+aXNzdWVzPC9hPiBpbiBbdHJkZWMudHlwZXNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RSRGVjIj5UUkRlYzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSW4gYysrc3RkLWxpYi0xNzE5NywgTWFydGluIHdyaXRlczoKPC9wPgo8YmxvY2txdW90ZT48cD4KVGhlIGV4dGVuZGVkX251bV9nZXQgYW5kIGV4dGVuZGVkX251bV9wdXQgZmFjZXRzIGFyZSBkZXNpZ25lZAp0byBzdG9yZSBhIHJlZmVyZW5jZSB0byBhIG51bV9nZXQgb3IgbnVtX3B1dCBmYWNldCB3aGljaCB0aGUKZXh0ZW5kZWQgZmFjZXRzIGRlbGVnYXRlIHRoZSBwYXJzaW5nIGFuZCBmb3JtYXR0aW5nIG9mIHR5cGVzCm90aGVyIHRoYW4gZGVjaW1hbC4gT25lIGZvcm0gb2YgdGhlIGV4dGVuZGVkIGZhY2V0J3MgY3RvciAodGhlCmRlZmF1bHQgY3RvciBhbmQgdGhlIHNpemVfdCBvdmVybG9hZCkgb2J0YWlucyB0aGUgcmVmZXJlbmNlCmZyb20gdGhlIGdsb2JhbCBDKysgbG9jYWxlIHdoaWxlIHRoZSBvdGhlciBmb3JtIHRha2VzIHRoaXMKcmVmZXJlbmNlIGFzIGFuIGFyZ3VtZW50Lgo8L3A+PC9ibG9ja3F1b3RlPgo8YmxvY2txdW90ZT48cD4KVGhlIHByb2JsZW0gd2l0aCBzdG9yaW5nIGEgcmVmZXJlbmNlIHRvIGEgZmFjZXQgaW4gYW5vdGhlcgpvYmplY3QgKGFzIG9wcG9zZWQgdG8gc3RvcmluZyB0aGUgbG9jYWxlIG9iamVjdCBpbiB3aGljaCB0aGUKZmFjZXQgaXMgaW5zdGFsbGVkKSBpcyB0aGF0IGRvaW5nIHNvIGJ5cGFzc2VzIHRoZSByZWZlcmVuY2UKY291bnRpbmcgbWVjaGFuaXNtIGRlc2lnbmVkIHRvIHByZXZlbnQgYSBmYWNldCB0aGF0IGlzIHN0aWxsCmJlaW5nIHJlZmVyZW5jZWQgKGkuZS4sIG9uZSB0aGF0IGlzIHN0aWxsIGluc3RhbGxlZCBpbiBzb21lCmxvY2FsZSkgZnJvbSBiZWluZyBkZXN0cm95ZWQgd2hlbiBhbm90aGVyIGxvY2FsZSB0aGF0IGNvbnRhaW5zCml0IGlzIGRlc3Ryb3llZC4gU2VwYXJhdGluZyBhIGZhY2V0IHJlZmVyZW5jZSBmcm9tIHRoZSBsb2NhbGUKaXQgY29tZXMgZnJvbSB2YW4gbWFrZSBpdCBjdW1iZXJzb21lIChhbmQgaW4gc29tZSBjYXNlcyBtaWdodApldmVuIG1ha2UgaXQgaW1wb3NzaWJsZSkgZm9yIHByb2dyYW1zIHRvIHByZXZlbnQgaW52YWxpZGF0aW5nCnRoZSByZWZlcmVuY2UuIChUaGUgZGFuZ2VyIG9mIHRoaXMgZGVzaWduIGlzIGhpZ2hsaWdodGVkIGluCnRoZSBwYXBlci4pCjwvcD48L2Jsb2NrcXVvdGU+CjxibG9ja3F1b3RlPjxwPgpUaGlzIHByb2JsZW0gY291bGQgYmUgZWFzaWx5IGF2b2lkZWQgYnkgaGF2aW5nIHRoZSBleHRlbmRlZApmYWNldHMgc3RvcmUgYSBjb3B5IG9mIHRoZSBsb2NhbGUgZnJvbSB3aGljaCB0aGV5IHdvdWxkIGV4dHJhY3QKdGhlIGJhc2UgZmFjZXQgZWl0aGVyIGF0IGNvbnN0cnVjdGlvbiB0aW1lIG9yIHdoZW4gbmVlZGVkLiBUbwptYWtlIGl0IHBvc3NpYmxlLCB0aGUgZm9ybXMgb2YgY3RvcnMgb2YgdGhlIGV4dGVuZGVkIGZhY2V0cyB0aGF0CnRha2UgYSByZWZlcmVuY2UgdG8gdGhlIGJhc2UgZmFjZXQgd291bGQgbmVlZCB0byBiZSBjaGFuZ2VkIHRvCnRha2UgYSBsb2NhbGUgYXJndW1lbnQgaW5zdGVhZC4KPC9wPjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgoxLiBDaGFuZ2UgdGhlIDxjb2RlPmV4dGVuZGVkX251bV9nZXQ8L2NvZGU+IHN5bm9wc2lzIGluIDMuMTAuMiBhcyBmb2xsb3dzOgo8L3A+CjxwcmU+ICAgICAgICAgICAgZXh0ZW5kZWRfbnVtX2dldChjb25zdCA8ZGVsPnN0ZDo6bnVtX2dldCZsdDtjaGFyVCwgSW5wdXRJdGVyYXRvciZndDs8L2RlbD4gPGlucz5zdGQ6OmxvY2FsZTwvaW5zPiAmYW1wOyA8aT5iPC9pPiwgc2l6ZV90IDxpPnJlZnM8L2k+ID0gMCk7CgogICAgICAgICAgICAvKiAuLi4gKi8KCiAgICAgICAgICAgIDxkZWw+Ly8gPGk+Y29uc3Qgc3RkOjpudW1fZ2V0Jmx0O2NoYXJULCBJbnB1dEl0ZXJhdG9yJmd0OyAmYW1wOyA8Yj5iYXNlPC9iPjwvaT47ICAgICAgICA8aT48Yj5leHBvc2l0aW9uIG9ubHk8L2I+PC9pPjwvZGVsPgogICAgICAgICAgICA8aW5zPi8vIDxpPnN0ZDo6bG9jYWxlIDxiPmJhc2Vsb2M8L2I+PC9pPjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT48Yj5leHBvc2l0aW9uIG9ubHk8L2I+PC9pPjwvaW5zPgo8L3ByZT4KPHA+CjIuIENoYW5nZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGFib3ZlIGNvbnN0cnVjdG9yIGluIDMuMTAuMi4xOgo8L3A+CjxwcmU+ICAgICAgICAgICAgZXh0ZW5kZWRfbnVtX2dldChjb25zdCA8ZGVsPnN0ZDo6bnVtX2dldCZsdDtjaGFyVCwgSW5wdXRJdGVyYXRvciZndDs8L2RlbD4gPGlucz5zdGQ6OmxvY2FsZTwvaW5zPiAmYW1wOyA8aT5iPC9pPiwgc2l6ZV90IDxpPnJlZnM8L2k+ID0gMCk7Cgo8L3ByZT4KPGJsb2NrcXVvdGU+CjxwPgo8Yj5FZmZlY3RzOjwvYj4gQ29uc3RydWN0cyBhbiA8Y29kZT5leHRlbmRlZF9udW1fZ2V0PC9jb2RlPiBmYWNldCBhcyBpZiBieToKPC9wPgo8cHJlPiAgICAgICBleHRlbmRlZF9udW1fZ2V0KGNvbnN0IDxkZWw+c3RkOjpudW1fZ2V0Jmx0O2NoYXJULCBJbnB1dEl0ZXJhdG9yJmd0OzwvZGVsPiA8aW5zPnN0ZDo6bG9jYWxlPC9pbnM+ICZhbXA7IDxpPmI8L2k+LCBzaXplX3QgPGk+cmVmczwvaT4gPSAwKQogICAgICAgICAgICAgICAgOiBmYWNldCg8aT5yZWZzPC9pPiksIDxpPmJhc2U8aW5zPmxvYzwvaW5zPjwvaT4oPGk+YjwvaT4pCiAgICAgICAgICAgICAgICB7IC8qIC4uLiAqLyB9Cgo8L3ByZT4KPHA+CjxkZWw+PGI+Tm90ZXM6PC9iPiBDYXJlIG11c3QgYmUgdGFrZW4gYnkgdGhlIGltcGxlbWVudGF0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBsaWZldGltZSBvZiB0aGUgZmFjZXQgcmVmZXJlbmNlZCBieSA8aT5iYXNlPC9pPiBleGNlZWRzIHRoYXQgb2YgdGhlIHJlc3VsdGluZyA8Y29kZT5leHRlbmRlZF9udW1fZ2V0PC9jb2RlPiBmYWNldC48L2RlbD4KPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPgozLiBDaGFuZ2UgdGhlIDxiPlJldHVybnM6PC9iPiBjbGF1c2UgZm9yIDxjb2RlPmRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UgJmFtcDssIGlvc19iYXNlOjppb3N0YXRlICZhbXA7LCBib29sICZhbXA7KSBjb25zdDwvY29kZT4sIDxpPmV0IGFsPC9pPiB0bwo8L3A+CjxibG9ja3F1b3RlPjxwPgo8Yj5SZXR1cm5zOjwvYj4gPGNvZGU+PGRlbD48aT5iYXNlPC9pPjwvZGVsPiA8aW5zPnN0ZDo6dXNlX2ZhY2V0Jmx0O3N0ZDo6bnVtX2dldCZsdDtjaGFyVCwgSW5wdXRJdGVyYXRvciZndDsgJmd0Oyg8aT5iYXNlbG9jPC9pPik8L2lucz4uZ2V0KDxpPmluPC9pPiwgPGk+ZW5kPC9pPiwgPGk+c3RyPC9pPiwgPGk+ZXJyPC9pPiwgPGk+dmFsPC9pPik8L2NvZGU+LiAKPC9wPjwvYmxvY2txdW90ZT4KPHA+CjQuIENoYW5nZSB0aGUgPGNvZGU+ZXh0ZW5kZWRfbnVtX3B1dDwvY29kZT4gc3lub3BzaXMgaW4gMy4xMC4zIGFzIGZvbGxvd3M6CjwvcD4KPHByZT4gICAgICAgICAgICBleHRlbmRlZF9udW1fcHV0KGNvbnN0IDxkZWw+c3RkOjpudW1fcHV0Jmx0O2NoYXJULCBPdXRwdXRJdGVyYXRvciZndDs8L2RlbD4gPGlucz5zdGQ6OmxvY2FsZTwvaW5zPiAmYW1wOyA8aT5iPC9pPiwgc2l6ZV90IDxpPnJlZnM8L2k+ID0gMCk7CgogICAgICAgICAgICAvKiAuLi4gKi8KCiAgICAgICAgICAgIDxkZWw+Ly8gPGk+Y29uc3Qgc3RkOjpudW1fcHV0Jmx0O2NoYXJULCBPdXRwdXRJdGVyYXRvciZndDsgJmFtcDsgPGI+YmFzZTwvYj48L2k+OyAgICAgICA8aT48Yj5leHBvc2l0aW9uIG9ubHk8L2I+PC9pPjwvZGVsPgogICAgICAgICAgICA8aW5zPi8vIDxpPnN0ZDo6bG9jYWxlIDxiPmJhc2Vsb2M8L2I+PC9pPjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT48Yj5leHBvc2l0aW9uIG9ubHk8L2I+PC9pPjwvaW5zPgo8L3ByZT4KPHA+CjUuIENoYW5nZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGFib3ZlIGNvbnN0cnVjdG9yIGluIDMuMTAuMy4xOgo8L3A+CjxwcmU+ICAgICAgICAgICAgZXh0ZW5kZWRfbnVtX3B1dChjb25zdCA8ZGVsPnN0ZDo6bnVtX3B1dCZsdDtjaGFyVCwgT3V0cHV0SXRlcmF0b3ImZ3Q7PC9kZWw+IDxpbnM+c3RkOjpsb2NhbGU8L2lucz4gJmFtcDsgPGk+YjwvaT4sIHNpemVfdCA8aT5yZWZzPC9pPiA9IDApOwo8L3ByZT4KPGJsb2NrcXVvdGU+CjxwPgo8Yj5FZmZlY3RzOjwvYj4gQ29uc3RydWN0cyBhbiA8Y29kZT5leHRlbmRlZF9udW1fcHV0PC9jb2RlPiBmYWNldCBhcyBpZiBieToKPC9wPgo8cHJlPiAgICAgICBleHRlbmRlZF9udW1fcHV0KGNvbnN0IDxkZWw+c3RkOjpudW1fcHV0Jmx0O2NoYXJULCBPdXRwdXRJdGVyYXRvciZndDs8L2RlbD4gPGlucz5zdGQ6OmxvY2FsZTwvaW5zPiAmYW1wOyA8aT5iPC9pPiwgc2l6ZV90IDxpPnJlZnM8L2k+ID0gMCkKICAgICAgICAgICAgICAgIDogZmFjZXQoPGk+cmVmczwvaT4pLCA8aT5iYXNlPGlucz5sb2M8L2lucz48L2k+KDxpPmI8L2k+KQogICAgICAgICAgICAgICAgeyAvKiAuLi4gKi8gfQoKPC9wcmU+CjxwPgo8ZGVsPjxiPk5vdGVzOjwvYj4gQ2FyZSBtdXN0IGJlIHRha2VuIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbGlmZXRpbWUgb2YgdGhlIGZhY2V0IHJlZmVyZW5jZWQgYnkgPGk+YmFzZTwvaT4gZXhjZWVkcyB0aGF0IG9mIHRoZSByZXN1bHRpbmcgPGNvZGU+ZXh0ZW5kZWRfbnVtX3B1dDwvY29kZT4gZmFjZXQuPC9kZWw+CjwvcD4KPC9ibG9ja3F1b3RlPgo8cD4KNi4gQ2hhbmdlIHRoZSA8Yj5SZXR1cm5zOjwvYj4gY2xhdXNlIGZvciA8Y29kZT5kb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSAmYW1wOywgY2hhcl90eXBlLCBib29sICZhbXA7KSBjb25zdDwvY29kZT4sIDxpPmV0IGFsPC9pPiB0bwo8L3A+CjxibG9ja3F1b3RlPjxwPgo8Yj5SZXR1cm5zOjwvYj4gPGNvZGU+PGRlbD48aT5iYXNlPC9pPjwvZGVsPiA8aW5zPnN0ZDo6dXNlX2ZhY2V0Jmx0O3N0ZDo6bnVtX3B1dCZsdDtjaGFyVCwgT3V0cHV0SXRlcmF0b3ImZ3Q7ICZndDsoPGk+YmFzZWxvYzwvaT4pPC9pbnM+LnB1dCg8aT5zPC9pPiwgPGk+ZjwvaT4sIDxpPmZpbGw8L2k+LCA8aT52YWw8L2k+KTwvY29kZT4uIAo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+PGk+WwpSZWRtb25kOiAgV2Ugd291bGQgcHJlZmVyIHRvIHJlbmFtZSAiZXh0ZW5kZWQiIHRvICJkZWNpbWFsIi4KXTwvaT48L3A+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjYwNSI+PC9hPjYwNS4gRGVjaW1hbDogJmx0O2RlY2Zsb2F0LmgmZ3Q7IGRvZXNuJ3QgbGl2ZSBoZXJlIGFueW1vcmUuPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IFRSRGVjaW1hbCAzLjQgW3RyZGVjLnR5cGVzLmNkZWNmbG9hdF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVFJEZWMiPlRSRGVjPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gUm9iZXJ0IEtsYXJlciA8Yj5EYXRlOjwvYj4gMjAwNi0xMC0xNzwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1RSRGVjIj5UUkRlYzwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSW4gQmVybGluLCBXRzE0IGRlY2lkZWQgdG8gZHJvcCB0aGUgJmx0O2RlY2Zsb2F0LmgmZ3Q7IGhlYWRlci4gVGhlCmNvbnRlbnRzIG9mIHRoYXQgaGVhZGVyIGhhdmUgYmVlbiBtb3ZlZCBpbnRvICZsdDtmbG9hdC5oJmd0Oy4gRm9yIHRoZQpzYWtlIG9mIEMgY29tcGF0aWJpbGl0eSwgd2Ugc2hvdWxkIG1ha2UgY29ycmVzcG9uZGluZyBjaGFuZ2VzLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KMS4gQ2hhbmdlIHRoZSBoZWFkaW5nIG9mIHN1YmNsYXVzZSAzLjQsICJIZWFkZXJzIDxjb2RlPiZsdDtjZGVjZmxvYXQmZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+Jmx0O2RlY2Zsb2F0LmgmZ3Q7PC9jb2RlPiIgdG8gIkFkZGl0aW9ucyB0byBoZWFkZXJzIDxjb2RlPiZsdDtjZmxvYXQmZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+Jmx0O2Zsb2F0LmgmZ3Q7PC9jb2RlPi4iCjwvcD4KPHA+CjIuIENoYW5nZSB0aGUgdGV4dCBvZiBzdWJjbGF1c2UgMy40IGFzIGZvbGxvd3M6CjwvcD4KPGJsb2NrcXVvdGU+CjxwPgo8ZGVsPlRoZSBzdGFuZGFyZCBDKysgaGVhZGVycyA8Y29kZT4mbHQ7Y2Zsb2F0Jmd0OzwvY29kZT4gYW5kIDxjb2RlPiZsdDtmbG9hdC5oJmd0OzwvY29kZT4gZGVmaW5lIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgZmxvYXRpbmctcG9pbnQgdHlwZXMgPGNvZGU+ZmxvYXQ8L2NvZGU+LCA8Y29kZT5kb3VibGU8L2NvZGU+LCBhbmQgPGNvZGU+bG9uZyBkb3VibGU8L2NvZGU+LiAgVGhlaXIgY29udGVudHMgcmVtYWluIHVuY2hhbmdlZCBieSB0aGlzIFRlY2huaWNhbCBSZXBvcnQuPC9kZWw+CjwvcD4KPHA+CjxkZWw+SGVhZGVycyA8Y29kZT4mbHQ7Y2RlY2Zsb2F0Jmd0OzwvY29kZT4gYW5kIDxjb2RlPiZsdDtkZWNmbG9hdC5oJmd0OzwvY29kZT4gZGVmaW5lIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgZGVjaW1hbCBmbG9hdGluZy1wb2ludCB0eXBlcyA8Y29kZT5kZWNpbWFsMzI8L2NvZGU+LCA8Y29kZT5kZWNpbWFsNjQ8L2NvZGU+LCBhbmQgPGNvZGU+ZGVjaW1hbDEyODwvY29kZT4uICBBcyB3ZWxsLCA8Y29kZT4mbHQ7ZGVjZmxvYXQuaCZndDs8L2NvZGU+IGRlZmluZXMgdGhlIGNvbnZlbmllbmNlIHR5cGVkZWZzIDxjb2RlPl9EZWNpbWFsMzI8L2NvZGU+LCA8Y29kZT5fRGVjaW1hbDY0PC9jb2RlPiwgYW5kIDxjb2RlPl9EZWNpbWFsMTI4PC9jb2RlPiwgZm9yIGNvbXBhdGliaWx0eSB3aXRoIHRoZSBDIHByb2dyYW1taW5nIGxhbmd1YWdlLjwvZGVsPgo8L3A+CjxwPgo8aW5zPlRoZSBoZWFkZXIgPGNvZGU+Jmx0O2NmbG9hdCZndDs8L2NvZGU+IGlzIGRlc2NyaWJlZCBpbiBbdHIuYzk5LmNmbG9hdF0uICBUaGUgaGVhZGVyIDxjb2RlPiZsdDtmbG9hdC5oJmd0OzwvY29kZT4KaXMgZGVzY3JpYmVkIGluIFt0ci5jOTkuZmxvYXRoXS4gVGhlc2UgaGVhZGVycyBhcmUgZXh0ZW5kZWQgYnkgdGhpcwpUZWNobmljYWwgUmVwb3J0IHRvIGRlZmluZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGRlY2ltYWwKZmxvYXRpbmctcG9pbnQgdHlwZXMgPGNvZGU+ZGVjaW1hbDMyPC9jb2RlPiwgPGNvZGU+ZGVjaW1hbDY0PC9jb2RlPiwgYW5kIDxjb2RlPmRlY2ltYWwxMjg8L2NvZGU+LiAgQXMgd2VsbCwgPGNvZGU+Jmx0O2Zsb2F0LmgmZ3Q7PC9jb2RlPiBpcyBleHRlbmRlZCB0byBkZWZpbmUgdGhlIGNvbnZlbmllbmNlIHR5cGVkZWZzIDxjb2RlPl9EZWNpbWFsMzI8L2NvZGU+LCA8Y29kZT5fRGVjaW1hbDY0PC9jb2RlPiwgYW5kIDxjb2RlPl9EZWNpbWFsMTI4PC9jb2RlPiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBDIHByb2dyYW1taW5nIGxhbmd1YWdlLjwvaW5zPgo8L3A+CjwvYmxvY2txdW90ZT4KPHA+CjMuIENoYW5nZSB0aGUgaGVhZGluZyBvZiBzdWJjbGF1c2UgMy40LjEsICJIZWFkZXIgPGNvZGU+Jmx0O2NkZWNmbG9hdCZndDs8L2NvZGU+IHN5bm9wc2lzIiAgdG8gIkFkZGl0aW9ucyB0byBoZWFkZXIgPGNvZGU+Jmx0O2NmbG9hdCZndDs8L2NvZGU+IHN5bm9wc2lzLiIKPC9wPgo8cD4KNC4gQ2hhbmdlIHRoZSBoZWFkaW5nIG9mIHN1YmNsYXVzZSAzLjQuMiwgIkhlYWRlciA8Y29kZT4mbHQ7ZGVjZmxvYXQuaCZndDs8L2NvZGU+IHN5bm9wc2lzIiB0byAiQWRkaXRpb25zIHRvIGhlYWRlciA8Y29kZT4mbHQ7ZmxvYXQuaCZndDs8L2NvZGU+IHN5bm9wc2lzLiIKPC9wPgo8cD4KNS4gQ2hhbmdlIHRoZSBjb250ZW50cyBvZiAzLjQuMiBhcyBmb2xsb3dzOgo8L3A+CjxwcmU+ICAgICAgPGRlbD4jaW5jbHVkZSAmbHQ7Y2RlY2Zsb2F0Jmd0OzwvZGVsPgoKICAgICAgLy8gPGk+Qy1jb21wYXRpYmlsaXR5IGNvbnZlbmllbmNlIHR5cGVkZWZzOjwvaT4KCiAgICAgIHR5cGVkZWYgc3RkOjpkZWNpbWFsOjpkZWNpbWFsMzIgIF9EZWNpbWFsMzI7CiAgICAgIHR5cGVkZWYgc3RkOjpkZWNpbWFsOjpkZWNpbWFsNjQgIF9EZWNpbWFsNjQ7CiAgICAgIHR5cGVkZWYgc3RkOjpkZWNpbWFsOjpkZWNpbWFsMTI4IF9EZWNpbWFsMTI4Owo8L3ByZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2MDciPjwvYT42MDcuIENvbmNlcm4gYWJvdXQgc2hvcnQgc2VlZCB2ZWN0b3JzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI2LjQuNy4xIFtyYW5kLnV0aWwuc2VlZHNlcV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQ2hhcmxlcyBLYXJuZXkgPGI+RGF0ZTo8L2I+IDIwMDYtMTAtMjY8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNyYW5kLnV0aWwuc2VlZHNlcSI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW3JhbmQudXRpbC5zZWVkc2VxXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3JhbmQudXRpbC5zZWVkc2VxIj5pc3N1ZXM8L2E+IGluIFtyYW5kLnV0aWwuc2VlZHNlcV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpTaG9ydCBzZWVkIHZlY3RvcnMgb2YgMzItYml0IHF1YW50aXRpZXMgYWxsIHJlc3VsdCBpbiBkaWZmZXJlbnQgc3RhdGVzLiBIb3dldmVyCnRoaXMgaXMgbm90IHRydWUgb2Ygc2VlZCB2ZWN0b3JzIG9mIDE2LWJpdCAob3Igc21hbGxlcikgcXVhbnRpdGllcy4gIEZvciBleGFtcGxlCnRoZXNlIHR3byBzZWVkcwo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnVuc2lnbmVkIHNob3J0IHNlZWQgPSB7MSwgMiwgM307CnVuc2lnbmVkIHNob3J0IHNlZWQgPSB7MSwgMiwgMywgMH07CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpib3RoIHBhY2sgdG8KPC9wPgoKPGJsb2NrcXVvdGU+PHByZT51bnNpZ25lZCBzZWVkID0gezB4MjAwMDEsIDB4M307CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgp5aWVsZGluZyB0aGUgc2FtZSBzdGF0ZS4KPC9wPgoKPHA+ClNlZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA3L24yMzkxLnBkZiI+TjIzOTE8L2E+IGFuZAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA3L24yNDIzLnBkZiI+TjI0MjM8L2E+CmZvciBzb21lIGZ1cnRoZXIgZGlzY3Vzc2lvbi4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkb3B0IHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGluCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjI0MjMucGRmIj5OMjQyMzwvYT4uCjwvcD4KCgo8cD48aT5bCktvbmEgKDIwMDcpOiBUaGUgTFdHIGFkb3B0ZWQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gb2YgTjI0MjMgZm9yIHRoaXMgaXNzdWUuClRoZSBMV0cgdm90ZWQgdG8gYWNjZWxlcmF0ZSB0aGlzIGlzc3VlIHRvIFJlYWR5IHN0YXR1cyB0byBiZSB2b3RlZCBpbnRvIHRoZSBXUCBhdCBLb25hLgpdPC9pPjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2MDgiPjwvYT42MDguIFVuY2xlYXIgc2VlZF9zZXEgY29uc3RydWN0aW9uIGRldGFpbHM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuNC43LjEgW3JhbmQudXRpbC5zZWVkc2VxXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBDaGFybGVzIEthcm5leSA8Yj5EYXRlOjwvYj4gMjAwNi0xMC0yNjwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI3JhbmQudXRpbC5zZWVkc2VxIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbcmFuZC51dGlsLnNlZWRzZXFdLjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjcmFuZC51dGlsLnNlZWRzZXEiPmlzc3VlczwvYT4gaW4gW3JhbmQudXRpbC5zZWVkc2VxXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkluIDI2LjQuNy4xIFtyYW5kLnV0aWwuc2VlZHNlcV0gLzYsIHRoZSBvcmRlciBvZiBwYWNraW5nIHRoZSBpbnB1dHMgaW50byBiIGFuZCB0aGUKdHJlYXRtZW50IG9mIHNpZ25lZCBxdWFudGl0aWVzIGlzIHVuY2xlYXIuIEJldHRlciB0byBzcGVsbCBpdCBvdXQuCjwvcD4KCjxwPgpTZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNy9uMjM5MS5wZGYiPk4yMzkxPC9hPiBhbmQKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNy9uMjQyMy5wZGYiPk4yNDIzPC9hPgpmb3Igc29tZSBmdXJ0aGVyIGRpc2N1c3Npb24uCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpBZG9wdCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBpbgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA3L24yNDIzLnBkZiI+TjI0MjM8L2E+Lgo8L3A+CgoKPHA+PGk+WwpLb25hICgyMDA3KTogVGhlIExXRyBhZG9wdGVkIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG9mIE4yNDIzIGZvciB0aGlzIGlzc3VlLgpUaGUgTFdHIHZvdGVkIHRvIGFjY2VsZXJhdGUgdGhpcyBpc3N1ZSB0byBSZWFkeSBzdGF0dXMgdG8gYmUgdm90ZWQgaW50byB0aGUgV1AgYXQgS29uYS4KXTwvaT48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjA5Ij48L2E+NjA5LiBtaXNzaW5nIHN0YXRpYyBjb25zdDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNi40LjQuMiBbcmFuZC5hZGFwdC5pYml0c10sIFRSMSA1LjEgW3RyLnJhbmRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFdhbHRlciBFLiBCcm93biA8Yj5EYXRlOjwvYj4gMjAwNi0xMS0wMjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSW4gcHJlcGFyaW5nIE4yMTExLCBhbiBlcnJvciBvbiBteSBwYXJ0IHJlc3VsdGVkIGluIHRoZSBvbWlzc2lvbiBvZiB0aGUKZm9sbG93aW5nIGxpbmUgZnJvbSB0aGUgdGVtcGxhdGUgc3lub3BzaXMgaW4gdGhlIGNpdGVkIHNlY3Rpb246CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+c3RhdGljIGNvbnN0IHNpemVfdCB3b3JkX3NpemUgPSB3Owo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KKFRoaXMgc2FtZSBjb25zdGFudCBpcyBmb3VuZCwgZm9yIGV4YW1wbGUsIGluIDI2LjQuMy4zIFtyYW5kLmVuZy5zdWJdLikKPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkZCB0aGUgYWJvdmUgZGVjbGFyYXRpb24gYXMgdGhlIGZpcnN0IGxpbmUgYWZ0ZXIgdGhlIGNvbW1lbnQgaW4gW3JhbmQuYWRhcHQuaWJpdHNdIHA0Ogo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPi8vIGVuZ2luZSBjaGFyYWN0ZXJpc3RpY3MKPGlucz5zdGF0aWMgY29uc3Qgc2l6ZV90IHdvcmRfc2l6ZSA9IHc7PC9pbnM+CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgphbmQgYWNjZXB0IG15IGFwb2xvZ2llcyBmb3IgdGhlIG92ZXJzaWdodC4KPC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjYxMCI+PC9hPjYxMC4gU3VnZ2VzdGVkIG5vbi1ub3JtYXRpdmUgbm90ZSBmb3IgQysrMHg8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAuNi4xNS4yLjEgW2Z1bmMud3JhcC5mdW5jLmNvbl0sIFRSMSAzLjcuMi4xIFt0ci5mdW5jLndyYXAuZnVuYy5jb25dIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFNjb3R0IE1leWVycyA8Yj5EYXRlOjwvYj4gMjAwNi0xMS0wMjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KTXkgc3VnZ2VzdGlvbiBpcyB0aGF0IGltcGxlbWVudGVycyBvZiBib3RoIHRyMTo6ZnVuY3Rpb24gYW5kIGl0cyAKb2ZmaWNpYWwgQysrMHggc3VjY2Vzc29yIGJlIGV4cGxpY2l0bHkgZW5jb3VyYWdlZCAoYnV0IG5vdCByZXF1aXJlZCkgdG8gCm9wdGltaXplIGZvciB0aGUgY2FzZXMgbWVudGlvbmVkIGFib3ZlLCBpLmUuLCBmdW5jdGlvbiBwb2ludGVycyBhbmQgCnNtYWxsIGZ1bmN0aW9uIG9iamVjdHMuICBUaGV5IGNvdWxkIGRvIHRoaXMgYnkgdXNpbmcgYSBzbWFsbCBpbnRlcm5hbCAKYnVmZmVyIGFraW4gdG8gdGhlIGJ1ZmZlciB1c2VkIGJ5IGltcGxlbWVudGF0aW9ucyBvZiB0aGUgc21hbGwgc3RyaW5nIApvcHRpbWl6YXRpb24uICAoVGhhdCB3b3VsZCBtYWtlIHRoaXMgdGhlIHNtYWxsIGZ1bmN0b3Igb3B0aW1pemF0aW9uIC0tIApTRk8gOi19KSAgVGhlIGZvcm0gb2YgdGhpcyBlbmNvdXJhZ2VtZW50IGNvdWxkIGJlIGEgbm90ZSBpbiB0aGUgc3RhbmRhcmQgCmFraW4gdG8gZm9vdG5vdGUgMjE0IG9mIHRoZSBjdXJyZW50IHN0YW5kYXJkLgo8L3A+Cgo8cD4KRGF2ZSBBYnJhaGFtcyBub3RlczoKPC9wPgoKPHA+CiJzaGFsbCBub3QgdGhyb3cgZXhjZXB0aW9ucyIgc2hvdWxkIHJlYWxseSBiZSAibm90aGluZywiIGJvdGggdG8gYmUgbW9yZQpncmFtbWF0aWNhbCBhbmQgdG8gYmUgY29uc2lzdGVudCB3aXRoIGV4aXN0aW5nIHdvcmRpbmcgaW4gdGhlIHN0YW5kYXJkLgo8L3A+Cgo8cD4KRG91ZyBHcmVnb3IgY29tbWVudHM6IEkgdGhpbmsgdGhpcyBpcyBhIGdvb2QgaWRlYS4gQ3VycmVudGx5LCBpbXBsZW1lbnRhdGlvbnMgb2YKdHIxOjpmdW5jdGlvbiBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBub24tdGhyb3dpbmcgY29uc3RydWN0b3JzIGFuZCBhc3NpZ25tZW50Cm9wZXJhdG9ycyB3aGVuIHRoZSB0YXJnZXQgZnVuY3Rpb24gb2JqZWN0IGlzIGEgZnVuY3Rpb24gcG9pbnRlciBvciBhCnJlZmVyZW5jZV93cmFwcGVyLiBUaGUgY29tbW9uIGNhc2UsIGhvd2V2ZXIsIGlzIGZvciBhIHRyMTo6ZnVuY3Rpb24gdG8gc3RvcmUKZWl0aGVyIGFuIGVtcHR5IGZ1bmN0aW9uIG9iamVjdCBvciBhIG1lbWJlciBwb2ludGVyICsgYW4gb2JqZWN0IHBvaW50ZXIuCjwvcD4KPHA+ClRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgdXBjb21pbmcgQm9vc3QgMS4zNC4wIHVzZXMgdGhlCiJTRk8iLCBzbyB0aGF0IHRoZSBmdW5jdGlvbiBvYmplY3RzIGZvciB0eXBpY2FsIGJpbmQgZXhwcmVzc2lvbnMgbGlrZQo8L3A+CjxibG9ja3F1b3RlPjxwcmU+YmluZCgmYW1wO1g6OmYsIHRoaXMsIF8xLCBfMiwgXzMpCjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpkbyBub3QgcmVxdWlyZSBoZWFwIGFsbG9jYXRpb24gd2hlbiBzdG9yZWQgaW4gYSBib29zdDo6ZnVuY3Rpb24uIEkKYmVsaWV2ZSBEaW5rdW13YXJlJ3MgaW1wbGVtZW50YXRpb24gYWxzbyBwZXJmb3JtcyB0aGlzIG9wdGltaXphdGlvbi4KPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpSZXZpc2UgMjAuNS4xNC4yLjEgcDYgW2Z1bmMud3JhcC5mdW5jLmNvbl0gdG8gYWRkIGEgbm90ZSBhcyBmb2xsb3dzOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CjxpPlRocm93czo8L2k+IHNoYWxsIG5vdCB0aHJvdyBleGNlcHRpb25zIGlmIDx0dD5mPC90dD4ncyB0YXJnZXQgaXMgYSBmdW5jdGlvbgpwb2ludGVyIG9yIGEgZnVuY3Rpb24gb2JqZWN0IHBhc3NlZCB2aWEgPHR0PnJlZmVyZW5jZV93cmFwcGVyPC90dD4uIE90aGVyd2lzZSwKbWF5IHRocm93IDx0dD5iYWRfYWxsb2M8L3R0PiBvciBhbnkgZXhjZXB0aW9uIHRocm93biBieSB0aGUgY29weSBjb25zdHJ1Y3RvciBvZgp0aGUgc3RvcmVkIGZ1bmN0aW9uIG9iamVjdC4KPC9wPgo8cD4KPGlucz48aT5Ob3RlOjwvaT4gSW1wbGVtZW50YXRpb25zIGFyZSBlbmNvdXJhZ2VkIHRvIGF2b2lkIHRoZSB1c2Ugb2YgZHluYW1pY2FsbHkKYWxsb2NhdGVkIG1lbW9yeSBmb3IgInNtYWxsIiBmdW5jdGlvbiBvYmplY3RzLCBlLmcuLCB3aGVyZSA8dHQ+ZjwvdHQ+J3MgdGFyZ2V0CmlzIGFuIG9iamVjdCBob2xkaW5nIG9ubHkgYSBwb2ludGVyIG9yIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgYW5kIGEgbWVtYmVyCmZ1bmN0aW9uIHBvaW50ZXIgKGEgImJvdW5kIG1lbWJlciBmdW5jdGlvbiIpLjwvaW5zPgo8L3A+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2MTEiPjwvYT42MTEuIFN0YW5kYXJkIGxpYnJhcnkgdGVtcGxhdGVzIGFuZCBpbmNvbXBsZXRlIHR5cGVzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE3LjQuMy43IFtyZXMub24uZnVuY3Rpb25zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOaWNvbGEgTXVzYXR0aSA8Yj5EYXRlOjwvYj4gMjAwNi0xMS0xMzwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSW4gdGhlIGxhdGVzdCBhdmFpbGFibGUgZHJhZnQgc3RhbmRhcmQgCig8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA2L24yMTM0LnBkZiI+TjIxMzQ8L2E+KQqnIDE3LjQuMy42IFtyZXMub24uZnVuY3Rpb25zXSBzdGF0ZXM6CjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTEtIEluIGNlcnRhaW4gY2FzZXMgKHJlcGxhY2VtZW50IGZ1bmN0aW9ucywgaGFuZGxlciBmdW5jdGlvbnMsIG9wZXJhdGlvbnMgb24KdHlwZXMgdXNlZCB0byBpbnN0YW50aWF0ZSBzdGFuZGFyZCBsaWJyYXJ5IHRlbXBsYXRlIGNvbXBvbmVudHMpLCB0aGUgQysrClN0YW5kYXJkIExpYnJhcnkgZGVwZW5kcyBvbiBjb21wb25lbnRzIHN1cHBsaWVkIGJ5IGEgQysrIHByb2dyYW0uIElmIHRoZXNlCmNvbXBvbmVudHMgZG8gbm90IG1lZXQgdGhlaXIgcmVxdWlyZW1lbnRzLCB0aGUgU3RhbmRhcmQgcGxhY2VzIG5vIHJlcXVpcmVtZW50cwpvbiB0aGUgaW1wbGVtZW50YXRpb24uCjwvcD4KCjxwPgotMi0gSW4gcGFydGljdWxhciwgdGhlIGVmZmVjdHMgYXJlIHVuZGVmaW5lZCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOgo8L3A+CjxwPgpbLi4uXQo8L3A+Cjx1bD4KPGxpPmlmIGFuIGluY29tcGxldGUgdHlwZSAoMy45KSBpcyB1c2VkIGFzIGEgdGVtcGxhdGUgYXJndW1lbnQgd2hlbgppbnN0YW50aWF0aW5nIGEgdGVtcGxhdGUgY29tcG9uZW50LiA8L2xpPgo8L3VsPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhpcyBpcyBjb250cmFkaWN0ZWQgYnkgpyAyMC42LjYuMi8yIFt1dGlsLnNtYXJ0cHRyLnNoYXJlZF0gd2hpY2gKc3RhdGVzOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+ClsuLi5dCjwvcD4KCjxwPgpUaGUgdGVtcGxhdGUgcGFyYW1ldGVyIDx0dD5UPC90dD4gb2YgPHR0PnNoYXJlZF9wdHI8L3R0PiBtYXkgYmUgYW4gaW5jb21wbGV0ZSB0eXBlLgo8L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpNb2RpZnkgdGhlIGxhc3QgYnVsbGV0IG9mIKcgMTcuNC4zLjYvMiBbcmVzLm9uLmZ1bmN0aW9uc10gdG8gYWxsb3cgZm9yCmV4Y2VwdGlvbnM6CjwvcD4KCjxibG9ja3F1b3RlPgo8dWw+CjxsaT5pZiBhbiBpbmNvbXBsZXRlIHR5cGUgKDMuOSkgaXMgdXNlZCBhcyBhIHRlbXBsYXRlIGFyZ3VtZW50IHdoZW4KaW5zdGFudGlhdGluZyBhIHRlbXBsYXRlIGNvbXBvbmVudDxpbnM+LCB1bmxlc3Mgc3BlY2lmaWNhbGx5IGFsbG93ZWQgZm9yIHRoZQpjb21wb25lbnQ8L2lucz4uIDwvbGk+CjwvdWw+CjwvYmxvY2txdW90ZT4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjEyIj48L2E+NjEyLiBudW1lcmljX2xpbWl0czo6aXNfbW9kdWxvIGluc3VmZmljaWVudGx5IGRlZmluZWQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTguMi4xLjIgW251bWVyaWMubGltaXRzLm1lbWJlcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IENocmlzIEplZmZlcnNvbiA8Yj5EYXRlOjwvYj4gMjAwNi0xMS0xMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbnVtZXJpYy5saW1pdHMubWVtYmVycyI+aXNzdWVzPC9hPiBpbiBbbnVtZXJpYy5saW1pdHMubWVtYmVyc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgoxOC4yLjEuMiA1NSBzdGF0ZXMgdGhhdCAiQSB0eXBlIGlzIG1vZHVsbyBpZiBpdCBpcyBwb3NzaWJsZSB0byBhZGQgdHdvCnBvc2l0aXZlIG51bWJlcnMgdG9nZXRoZXIgYW5kIGhhdmUgYSByZXN1bHQgdGhhdCB3cmFwcyBhcm91bmQgdG8gYQp0aGlyZCBudW1iZXIgdGhhdCBpcyBsZXNzIi4KVGhpcyBzZWVtcyBpbnN1ZmZpY2llbnQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uczoKPC9wPgoKPG9sPgo8bGk+RG9lc24ndCBkZWZpbmUgd2hhdCB0aGF0IHZhbHVlIHJlY2VpdmVkIGlzLjwvbGk+CjxsaT5Eb2Vzbid0IHN0YXRlIHRoZSByZXN1bHQgaXMgcmVwZWF0YWJsZTwvbGk+CjxsaT4gRG9lc24ndCByZXF1aXJlIHRoYXQgZG9pbmcgYWRkaXRpb24sIHN1YnRyYWN0aW9uIGFuZCBvdGhlcgpvcGVyYXRpb25zIG9uIGFsbCB2YWx1ZXMgaXMgZGVmaW5lZCBiZWhhdmlvdXIuPC9saT4KPC9vbD4KCjxwPjxpPlsKQmF0YXZpYTogUmVsYXRlZCB0bwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA3L24yMTQ0LnBkZiI+TjIxNDQ8L2E+LgpQZXRlOiBpcyB0aGVyZSBhbiBJU08gZGVmaW5pdGlvbiBvZiBtb2R1bG8/ICBVbmRlcmZsb3cgb24gc2lnbmVkIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4KXTwvaT48L3A+CgoKPHA+PGk+WwpCZWxsZXZ1ZTogIGFjY2VwdCByZXNvbHV0aW9uLCBtb3ZlIHRvIHJlYWR5IHN0YXR1cy4KRG9lcyB0aGlzIG1hbmRhdGUgdGhhdCBpc19tb2R1bG8gYmUgdHJ1ZSBvbiBwbGF0Zm9ybXMgZm9yIHdoaWNoIGludApoYXBwZW5zIHRvIGIgbW9kdWxvPyBBOiB0aGUgc3RhbmRhcmQgYWxyZWFkeSBzZWVtcyB0byByZXF1aXJlIHRoYXQuCl08L2k+PC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpTdWdnZXN0IDE4LjIuMS4yIFtudW1lcmljLmxpbWl0cy5tZW1iZXJzXSwgcGFyYWdyYXBoIDU3IGlzIGFtZW5kZWQgdG86CjwvcD4KCjxibG9ja3F1b3RlPjxwPgpBIHR5cGUgaXMgbW9kdWxvIGlmPGlucz4sPC9pbnM+IDxkZWw+aXQgaXMgcG9zc2libGUgdG8gYWRkIHR3byBwb3NpdGl2ZSBudW1iZXJzCmFuZCBoYXZlIGEgcmVzdWx0IHRoYXQgd3JhcHMgYXJvdW5kIHRvIGEgdGhpcmQgbnVtYmVyIHRoYXQgaXMgbGVzcy48L2RlbD4KPGlucz5naXZlbiBhbnkgb3BlcmF0aW9uIGludm9sdmluZyArLC0gb3IgKiBvbiB2YWx1ZXMgb2YgdGhhdCB0eXBlIHdob3NlIHZhbHVlCndvdWxkIGZhbGwgb3V0c2lkZSB0aGUgcmFuZ2UgPHR0PlttaW4oKSwgbWF4KCldPC90dD4sIHRoZW4gdGhlIHZhbHVlIHJldHVybmVkCmRpZmZlcnMgZnJvbSB0aGUgdHJ1ZSB2YWx1ZSBieSBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIDx0dD4obWF4KCkgLSBtaW4oKSArCjEpPC90dD4uPC9pbnM+CjwvcD48L2Jsb2NrcXVvdGU+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjYxMyI+PC9hPjYxMy4gbWF4X2RpZ2l0czEwIG1pc3NpbmcgZnJvbSBudW1lcmljX2xpbWl0czwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAxOC4yLjEuNSBbbnVtZXJpYy5zcGVjaWFsXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBCbyBQZXJzc29uIDxiPkRhdGU6PC9iPiAyMDA2LTExLTIwPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNudW1lcmljLnNwZWNpYWwiPmlzc3VlczwvYT4gaW4gW251bWVyaWMuc3BlY2lhbF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpTZWN0aW9uIDE4LjIuMS41IFtudW1lcmljLnNwZWNpYWxdIHN0YXJ0cyBvdXQgYnkgc2F5aW5nIHRoYXQgIkFsbCBtZW1iZXJzIHNoYWxsIGJlIHByb3ZpZGVkIApmb3IgYWxsIHNwZWNpYWxpemF0aW9ucy4iCjwvcD4KPHA+ClRoZW4gaXQgZ29lcyBvbiB0byBzaG93IHNwZWNpYWxpemF0aW9ucyBmb3IgZmxvYXQgYW5kIGJvb2wsIHdoZXJlIG9uZSBtZW1iZXIgCmlzIG1pc3NpbmcgKG1heF9kaWdpdHMxMCkuCjwvcD4KCjxwPgpNYWFydGVuIEtyb25lbmJ1cmcgYWRkczoKPC9wPgoKPHA+CkkgYWdyZWUsIGp1c3QgYWRkaW5nIHRoZSBjb21tZW50IHRoYXQgdGhlIGV4YWN0IG51bWJlciBvZiBkZWNpbWFsIGRpZ2l0cwppcyBkaWdpdHMgKiBsbihyYWRpeCkgLyBsbigxMCksIHdoZXJlIHByb2JhYmx5IHRoaXMgcmVhbCBudW1iZXIgaXMKcm91bmRlZCBkb3dud2FyZCBmb3IgZGlnaXRzMTAsIGFuZCByb3VuZGVkIHVwd2FyZCBmb3IgbWF4X2RpZ2l0czEwCih3aGVuIHJhZGl4PTEwLCB0aGVuIGRpZ2l0czEwPW1heF9kaWdpdHMxMCkuCldoeSBub3QgYWRkIHRoaXMgZXhhY3QgZGVmaW5pdGlvbiBhbHNvIHRvIHRoZSBzdGFuZGFyZCwgc28gdGhlIHVzZXIKa25vd3Mgd2hhdCB0aGVzZSBudW1iZXJzIGV4YWN0bHkgbWVhbi4KPC9wPgoKPHA+Ckhvd2FyZCBhZGRzOgo8L3A+Cgo8cD4KRm9yIHJlZmVyZW5jZSwgaGVyZSBhcmUgdGhlIGNvcnJlY3QgZm9ybXVsYXMgZnJvbQo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9KVEMxL1NDMjIvV0cyMS9kb2NzL3BhcGVycy8yMDA1L24xODIyLnBkZiI+TjE4MjI8L2E+Ogo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPmRpZ2l0czEwID0gZmxvb3IoKGRpZ2l0cy0xKSAqIGxvZzEwKDIpKQptYXhfZGlnaXRzMTAgPSBjZWlsKCgxICsgZGlnaXRzKSAqIGxvZzEwKDIpKQo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KV2UgYXJlIGFsc28gbWlzc2luZyBhIHN0YXRlbWVudCByZWdhcmRpbmcgZm9yIHdoYXQgc3BlY2lhbGl6YXRpb25zIHRoaXMgbWVtYmVyIGhhcyBtZWFuaW5nLgo8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSBhbmQgYWRkIGFmdGVyIDE4LjIuMS4yIFtudW1lcmljLmxpbWl0cy5tZW1iZXJzXSwgcDExOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT5zdGF0aWMgY29uc3QgaW50IG1heF9kaWdpdHMxMDs8L3ByZT4KPGJsb2NrcXVvdGU+CjxwPgotMTEtIE51bWJlciBvZiBiYXNlIDEwIGRpZ2l0cyByZXF1aXJlZCB0byBlbnN1cmUgdGhhdCB2YWx1ZXMgd2hpY2gKZGlmZmVyIDxkZWw+Ynkgb25seSBvbmUgZXBzaWxvbjwvZGVsPiBhcmUgYWx3YXlzIGRpZmZlcmVudGlhdGVkLgo8L3A+CjxwPjxpbnM+Ci0xMi0gTWVhbmluZ2Z1bCBmb3IgYWxsIGZsb2F0aW5nIHBvaW50IHR5cGVzLgo8L2lucz48L3A+CjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAxOC4yLjEuNSBbbnVtZXJpYy5zcGVjaWFsXSwgcDI6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUmbHQ7Jmd0OyBjbGFzcyBudW1lcmljX2xpbWl0cyZsdDtmbG9hdCZndDsgeyAKcHVibGljOiAKICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7IAogIC4uLgogIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA2OwogIDxpbnM+c3RhdGljIGNvbnN0IGludCBtYXhfZGlnaXRzMTAgPSA5PC9pbnM+OwogIC4uLgo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDE4LjIuMS41IFtudW1lcmljLnNwZWNpYWxdLCBwMzoKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT50ZW1wbGF0ZSZsdDsmZ3Q7IGNsYXNzIG51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7IHsgCnB1YmxpYzogCiAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOyAKICAuLi4KICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMDsKICA8aW5zPnN0YXRpYyBjb25zdCBpbnQgbWF4X2RpZ2l0czEwID0gMDwvaW5zPjsKICAuLi4KPC9wcmU+PC9ibG9ja3F1b3RlPgoKCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjE2Ij48L2E+NjE2LiBtaXNzaW5nICd0eXBlbmFtZScgaW4gY3R5cGVfYnluYW1lPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMS4yIFtsb2NhbGUuY3R5cGUuYnluYW1lXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBCbyBQZXJzc29uIDxiPkRhdGU6PC9iPiAyMDA2LTEyLTE2PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNsb2NhbGUuY3R5cGUuYnluYW1lIj5pc3N1ZXM8L2E+IGluIFtsb2NhbGUuY3R5cGUuYnluYW1lXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClNlY3Rpb24gMjIuMi4xLjIgZGVmaW5lcyB0aGUgY3R5cGVfYnluYW1lIGNsYXNzIHRlbXBsYXRlLiBJdCBjb250YWlucyB0aGUgCmxpbmUKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT50eXBlZGVmIGN0eXBlJmx0O2NoYXJUJmd0Ozo6bWFzayAgIG1hc2s7CjwvcHJlPjwvYmxvY2txdW90ZT4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KYXMgdGhpcyBpcyBhIGRlcGVuZGVudCB0eXBlLCBpdCBzaG91bGQgb2J2aW91c2x5IGJlCjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dHlwZWRlZiA8aW5zPnR5cGVuYW1lPC9pbnM+IGN0eXBlJmx0O2NoYXJUJmd0Ozo6bWFzayAgIG1hc2s7CjwvcHJlPjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2MTgiPjwvYT42MTguIHZhbGFycmF5Ojpjc2hpZnQoKSBlZmZlY3RzIG9uIGVtcHR5IGFycmF5PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI2LjUuMi43IFt2YWxhcnJheS5tZW1iZXJzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBHYWJyaWVsIERvcyBSZWlzIDxiPkRhdGU6PC9iPiAyMDA3LTAxLTEwPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJIHdvdWxkIHJlc3BlY3RmdWxseSByZXF1ZXN0IGFuIGlzc3VlIGJlIG9wZW5lZCB3aXRoIHRoZSBpbnRlbnRpb24gdG8KY2xhcmlmeSB0aGUgd29yZGluZyBmb3IgPHR0PnNpemUoKSA9PSAwPC90dD4gZm9yIDx0dD5jc2hpZnQ8L3R0Pi4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAyNi41LjIuNyBbdmFsYXJyYXkubWVtYmVyc10sIHBhcmFncmFwaCAxMDoKPC9wPgoKPGJsb2NrcXVvdGU+Cgo8cHJlPnZhbGFycmF5Jmx0O1QmZ3Q7IGNzaGlmdChpbnQgPGk+bjwvaT4pIGNvbnN0Owo8L3ByZT4KCjxibG9ja3F1b3RlPgo8cD4KVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCBvZiBjbGFzcyA8dHQ+dmFsYXJyYXkmbHQ7VCZndDs8L3R0Piwgb2YKbGVuZ3RoIDx0dD5zaXplKCk8L3R0PiwgPGRlbD5lYWNoIG9mIHdob3NlIGVsZW1lbnRzIDx0dD5JPC90dD4gaXMKPHR0PigqdGhpcylbKEkgKyBuICkgJSBzaXplKCldPC90dD4uIFRodXMsIGlmIGVsZW1lbnQgemVybyBpcyB0YWtlbiBhcwp0aGUgbGVmdG1vc3QgZWxlbWVudCwgYSBwb3NpdGl2ZSB2YWx1ZSBvZiA8aT5uPC9pPiBzaGlmdHMgdGhlIGVsZW1lbnRzCmNpcmN1bGFybHkgbGVmdCA8aT5uPC9pPiBwbGFjZXMuPC9kZWw+IDxpbnM+dGhhdCBpcyBhIGNpcmN1bGFyIHNoaWZ0IG9mIDx0dD4qdGhpczwvdHQ+LiBJZgplbGVtZW50IHplcm8gaXMgdGFrZW4gYXMgdGhlIGxlZnRtb3N0IGVsZW1lbnQsIGEgbm9uLW5lZ2F0aXZlIHZhbHVlIG9mCjxpPm48L2k+IHNoaWZ0cyB0aGUgZWxlbWVudHMgY2lyY3VsYXJseSBsZWZ0IDxpPm48L2k+IHBsYWNlcyBhbmQgYQpuZWdhdGl2ZSB2YWx1ZSBvZiA8aT5uPC9pPiBzaGlmdHMgdGhlIGVsZW1lbnRzIGNpcmN1bGFybHkgcmlnaHQKLTxpPm48L2k+IHBsYWNlcy48L2lucz4KPC9wPgo8L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpXZSBkbyBub3QgYmVsaWV2ZSB0aGF0IHRoZXJlIGlzIGFueSByZWFsIGFtYmlndWl0eSBhYm91dCB3aGF0IGhhcHBlbnMKd2hlbiA8dHQ+c2l6ZSgpID09IDA8L3R0PiwgYnV0IHdlIGRvIGJlbGlldmUgdGhhdCBzcGVsbGluZyB0aGlzIG91dCBhcyBhIEMrKwpleHByZXNzaW9uIGNhdXNlcyBtb3JlIHRyb3VibGUgdGhhdCBpdCBzb2x2ZXMuIFRoZSBleHByZXNzaW9uIGlzCmNlcnRhaW5seSB3cm9uZyB3aGVuIDx0dD5uICZsdDsgMDwvdHQ+LCBzaW5jZSB0aGUgc2lnbiBvZiAlIHdpdGggbmVnYXRpdmUgYXJndW1lbnRzCmlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQuCjwvcD4KCgo8cD48aT5bCktvbmEgKDIwMDcpIENoYW5nZWQgcHJvcG9zZWQgd29yZGluZywgYWRkZWQgcmF0aW9uYWxlIGFuZCBzZXQgdG8gUmV2aWV3LgpdPC9pPjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2MTkiPjwvYT42MTkuIExvbmdqbXAgd29yZGluZyBwcm9ibGVtPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDE4LjkgW3N1cHBvcnQucnVudGltZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTGF3cmVuY2UgQ3Jvd2wgPGI+RGF0ZTo8L2I+IDIwMDctMDEtMTI8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSB3b3JkaW5nIGZvciA8dHQ+bG9uZ2ptcDwvdHQ+IGlzIGNvbmZ1c2luZy4KPC9wPgo8cD4KMTguOSBbc3VwcG9ydC5ydW50aW1lXSAtNC0gT3RoZXIgcnVudGltZSBzdXBwb3J0CjwvcD4KPGJsb2NrcXVvdGU+PHA+ClRoZSBmdW5jdGlvbiBzaWduYXR1cmUgPHR0PmxvbmdqbXAoam1wX2J1ZiBqYnVmLCBpbnQgdmFsKTwvdHQ+IGhhcyBtb3JlIHJlc3RyaWN0ZWQKYmVoYXZpb3IgaW4gdGhpcyBJbnRlcm5hdGlvbmFsIFN0YW5kYXJkLiAgSWYgYW55IGF1dG9tYXRpYyBvYmplY3RzIHdvdWxkCmJlIGRlc3Ryb3llZCBieSBhIHRocm93biBleGNlcHRpb24gdHJhbnNmZXJyaW5nIGNvbnRyb2wgdG8gYW5vdGhlcgooZGVzdGluYXRpb24pIHBvaW50IGluIHRoZSBwcm9ncmFtLCB0aGVuIGEgY2FsbCB0byA8dHQ+bG9uZ2ptcChqYnVmLCB2YWwpPC90dD4gdGhhdAp0aGUgdGhyb3cgcG9pbnQgdGhhdCB0cmFuc2ZlcnMgY29udHJvbCB0byB0aGUgc2FtZSAoZGVzdGluYXRpb24pIHBvaW50IGhhcwp1bmRlZmluZWQgYmVoYXZpb3IuCjwvcD48L2Jsb2NrcXVvdGU+CjxwPgpTb21lb25lIGF0IEdvb2dsZSB0aGlua3MgdGhhdCBzaG91bGQgc2F5ICJ0aGVuIGEgY2FsbCB0byA8dHQ+bG9uZ2ptcChqYnVmLCB2YWwpPC90dD4KKmF0KiB0aGUgdGhyb3cgcG9pbnQgdGhhdCB0cmFuc2ZlcnMgY29udHJvbCIuCjwvcD4KPHA+CkJpbGwgR2liYm9ucyB0aGlua3MgaXQgc2hvdWxkIHNheSBzb21ldGhpbmcgbGlrZSAiSWYgYW55IGF1dG9tYXRpYyBvYmplY3RzCndvdWxkIGJlIGRlc3Ryb3llZCBieSBhbiBleGNlcHRpb24gdGhyb3duIGF0IHRoZSBwb2ludCBvZiB0aGUgbG9uZ2ptcCBhbmQKY2F1Z2h0IG9ubHkgYXQgdGhlIHBvaW50IG9mIHRoZSBzZXRqbXAsIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQuIgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gZ2VuZXJhbCwgYWNjZXB0IEJpbGwgR2liYm9ucycgcmVjb21tZW5kYXRpb24sCmJ1dCBhZGQgImNhbGwiIHRvIGluZGljYXRlIHRoYXQgdGhlIHVuZGVmaW5lZCBiZWhhdmlvcgpjb21lcyBmcm9tIHRoZSBkeW5hbWljIGNhbGwsIG5vdCBmcm9tIGl0cyBwcmVzZW5jZSBpbiB0aGUgY29kZS4KSW4gMTguOSBbc3VwcG9ydC5ydW50aW1lXSBwYXJhZ3JhcGggNCwgY2hhbmdlCjwvcD4KCjxibG9ja3F1b3RlPjxwPgpUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIDx0dD5sb25nam1wKGptcF9idWYgamJ1ZiwgaW50IHZhbCk8L3R0PiBoYXMgbW9yZQpyZXN0cmljdGVkIGJlaGF2aW9yIGluIHRoaXMgSW50ZXJuYXRpb25hbCBTdGFuZGFyZC4gIDxkZWw+SWYgYW55IGF1dG9tYXRpYwpvYmplY3RzIHdvdWxkIGJlIGRlc3Ryb3llZCBieSBhIHRocm93biBleGNlcHRpb24gdHJhbnNmZXJyaW5nIGNvbnRyb2wgdG8gYW5vdGhlcgooZGVzdGluYXRpb24pIHBvaW50IGluIHRoZSBwcm9ncmFtLCB0aGVuIGEgY2FsbCB0byA8dHQ+bG9uZ2ptcChqYnVmLCB2YWwpPC90dD4KdGhhdCB0aGUgdGhyb3cgcG9pbnQgdGhhdCB0cmFuc2ZlcnMgY29udHJvbCB0byB0aGUgc2FtZSAoZGVzdGluYXRpb24pIHBvaW50IGhhcwp1bmRlZmluZWQgYmVoYXZpb3IuPC9kZWw+IDxpbnM+QSA8dHQ+c2V0am1wPC90dD4vPHR0PmxvbmdqbXA8L3R0PiBjYWxsIHBhaXIgaGFzCnVuZGVmaW5lZCBiZWhhdmlvciBpZiByZXBsYWNpbmcgdGhlIDx0dD5zZXRqbXA8L3R0PiBhbmQgPHR0PmxvbmdqbXA8L3R0PiBieQo8dHQ+Y2F0Y2g8L3R0PiBhbmQgPHR0PnRocm93PC90dD4gd291bGQgZGVzdHJveSBhbnkgYXV0b21hdGljIG9iamVjdHMuPC9pbnM+CjwvcD48L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjIwIj48L2E+NjIwLiB2YWxpZCB1c2VzIG9mIGVtcHR5IHZhbGFycmF5czwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNi41LjIuMSBbdmFsYXJyYXkuY29uc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDA3LTAxLTIwPC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjdmFsYXJyYXkuY29ucyI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW3ZhbGFycmF5LmNvbnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjdmFsYXJyYXkuY29ucyI+aXNzdWVzPC9hPiBpbiBbdmFsYXJyYXkuY29uc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CiAgICAgICAgPHA+CgpUaGUgPGk+RWZmZWN0czwvaT4gIGNsYXVzZSBmb3IgdGhlICBkZWZhdWx0IDxjb2RlPnZhbGFycmF5PC9jb2RlPiBjdG9yCnN1Z2dlc3RzICB0aGF0ICBpdCAgaXMgcG9zc2libGUgIHRvICBpbmNyZWFzZSAgdGhlICBzaXplIG9mICBhbiAgZW1wdHkKPGNvZGU+dmFsYXJyYXk8L2NvZGU+ICBvYmplY3QgICBieSAgY2FsbGluZyAgb3RoZXIgICBub24tY29uc3QgIG1lbWJlcgpmdW5jdGlvbnMgb2YgdGhlIGNsYXNzIGJlc2lkZXMgPGNvZGU+cmVzaXplKCk8L2NvZGU+LiBIb3dldmVyLCBzdWNoIGFuCmludGVycHJldGF0aW9uIHdvdWxkICBiZSBjb250cmFkaWN0ZWQgYnkgIHRoZSByZXF1aXJlbWVudCBvbiAgdGhlIGNvcHkKYXNzaWdubWVudCAgb3BlcmF0b3IgIChhbmQgIGFwcGFyZW50bHkgICBhbHNvICB0aGF0ICBvbiAgdGhlICBjb21wdXRlZAphc3NpZ25tZW50cykgIHRoYXQgdGhlICBhc3NpZ25lZCBhcnJheXMgIGJlICB0aGUgc2FtZSAgc2l6ZS4gIFNlZSAgdGhlCnJlZmxlY3RvciBkaXNjdXNzaW9uIHN0YXJ0aW5nIHdpdGggYysrc3RkLWxpYi0xNzg3MS4KCiAgICAgICAgPC9wPgogICAgICAgIDxwPgoKSW4gIGFkZGl0aW9uLCAgPGk+Rm9vdG5vdGU8L2k+IDI4MCAgdXNlcyAgc29tZSBxdWVzdGlvbmFibGUgIG5vcm1hdGl2ZQpsYW5ndWFnZS4KCiAgICAgICAgPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KICAgICAgICA8cD4KClJld29yZCB0aGUgPGk+RWZmZWN0czwvaT4gY2xhdXNlIGFuZCA8aT5Gb290bm90ZSAyODA8L2k+IGFzIGZvbGxvd3MgKDI2LjUuMi4xIFt2YWxhcnJheS5jb25zXSk6CgogICAgICAgIDwvcD4KICAgICAgICA8YmxvY2txdW90ZT4KICAgICAgICAgICAgPHA+Cgo8Y29kZT52YWxhcnJheSgpOzwvY29kZT4KCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHA+Cgo8aT5FZmZlY3RzPC9pPjogICAgICBDb25zdHJ1Y3RzICAgICAgYW4gICAgICBvYmplY3QgICAgICBvZiAgICAgIGNsYXNzCjxjb2RlPnZhbGFycmF5Jmx0O1QmZ3Q7PC9jb2RlPiw8c3VwPjI3OSk8L3N1cD4gICAgd2hpY2ggICAgaGFzICAgIHplcm8KbGVuZ3RoPGRlbD4gdW50aWwgaXQgaXMgcGFzc2VkIGludG8gYSBsaWJyYXJ5IGZ1bmN0aW9uIGFzIGEgbW9kaWZpYWJsZQpsdmFsdWUgb3IgdGhyb3VnaCBhIG5vbi1jb25zdGFudCB0aGlzIHBvaW50ZXI8L2RlbD4uPHN1cD4yODApPC9zdXA+CgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxwPgoKPGlucz48aT5Qb3N0Y29uZGl0aW9uPC9pPjogPGNvZGU+c2l6ZSgpID09IDA8L2NvZGU+LjwvaW5zPgoKICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8cD4KCjxpPkZvb3Rub3RlICAyODA8L2k+OiAgVGhpcyBkZWZhdWx0ICBjb25zdHJ1Y3RvciAgaXMgZXNzZW50aWFsLCAgc2luY2UKYXJyYXlzICBvZiAgPGNvZGU+dmFsYXJyYXk8L2NvZGU+ICA8ZGVsPmFyZSAgbGlrZWx5IHRvICBwcm92ZSAgdXNlZnVsLgpUaGVyZSAgc2hhbGwgYWxzbyAgYmUgIGEgd2F5ICB0byBjaGFuZ2UgIHRoZSAgc2l6ZSBvZiAgYW4gYXJyYXkgIGFmdGVyCmluaXRpYWxpemF0aW9uOyAgdGhpcyAgaXMgIHN1cHBsaWVkICBieSB0aGUgIHNlbWFudGljczwvZGVsPiAgPGlucz5tYXkgYmUKdXNlZnVsLiAgIFRoZSAgbGVuZ3RoICBvZiAgYW4gIGVtcHR5ICBhcnJheSAgY2FuICBiZSAgaW5jcmVhc2VkICBhZnRlcgppbml0aWFsaXphdGlvbiAgYnkgIG1lYW5zPC9pbnM+ICBvZiB0aGUgIDxjb2RlPnJlc2l6ZSgpPC9jb2RlPiAgbWVtYmVyCmZ1bmN0aW9uLgoKICAgICAgICAgICAgPC9wPgogICAgICAgIDwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2MjEiPjwvYT42MjEuIG5vbi1jb25zdCBjb3B5IGFzc2lnbm1lbnQgb3BlcmF0b3JzIG9mIGhlbHBlciBhcnJheXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuNSBbbnVtYXJyYXldIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwNy0wMS0yMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbnVtYXJyYXkiPmlzc3VlczwvYT4gaW4gW251bWFycmF5XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KICAgICAgICA8cD4KClRoZSBjb21wdXRlZCBhbmQgICJmaWxsIiBhc3NpZ25tZW50IG9wZXJhdG9ycyBvZiA8Y29kZT52YWxhcnJheTwvY29kZT4KaGVscGVyICAgICBhcnJheSAgICAgY2xhc3MgICAgdGVtcGxhdGVzICAgICAoPGNvZGU+c2xpY2VfYXJyYXk8L2NvZGU+LAo8Y29kZT5nc2xpY2VfYXJyYXk8L2NvZGU+LCAgICAgICAgIDxjb2RlPm1hc2tfYXJyYXk8L2NvZGU+LCAgICAgICAgYW5kCjxjb2RlPmluZGlyZWN0X2FycmF5PC9jb2RlPikgYXJlIGNvbnN0ICBtZW1iZXIgZnVuY3Rpb25zIG9mIGVhY2ggY2xhc3MKdGVtcGxhdGUgICAgICh0aGUgICAgIGxhdHRlciAgICBieSAgICAgdGhlICAgICByZXNvbHV0aW9uICAgIG9mICA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTIzIj4xMjM8L2E+CnNpbmNlICB0aGV5IGhhdmUgcmVmZXJlbmNlICBzZW1hbnRpY3MgYW5kIHRodXMgZG8gIG5vdCBhZmZlY3QKdGhlIHN0YXRlIG9mICB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZXkgYXJlICBjYWxsZWQuICBIb3dldmVyLCB0aGUgY29weQphc3NpZ25tZW50ICBvcGVyYXRvcnMgIG9mICB0aGVzZSAgY2xhc3MgIHRlbXBsYXRlcywgIHdoaWNoICBhbHNvICBoYXZlCnJlZmVyZW5jZSBzZW1hbnRpY3MsICBhcmUgbm9uLWNvbnN0LiAgIFRoZSBhYnNlbmNlIG9mICBjb25zdG5lc3Mgb3BlbnMKdGhlIGRvb3IgdG8gc3BlY3VsYXRpb24gYWJvdXQgd2hldGhlciB0aGV5IHJlYWxseSBhcmUgaW50ZW5kZWQgdG8gaGF2ZQpyZWZlcmVuY2Ugc2VtYW50aWNzIChleGlzdGluZyBpbXBsZW1lbnRhdGlvbnMgdmFyeSB3aWRlbHkpLgoKICAgICAgICA8L3A+Cgo8cD4KUHJlLUtvbmEsIE1hcnRpbiBhZGRzOgo8L3A+Cgo8cD4KSSByZWFsaXplZCB0aGF0IGFkZGluZyB0aGUgY29uc3QgcXVhbGlmaWVyIHRvIHRoZQpmdW5jdGlvbnMgYXMgSSBzdWdnZXN0ZWQgd291bGQgYnJlYWsgdGhlIGNvbnN0IGNvcnJlY3RuZXNzIG9mIHRoZQpjbGFzc2VzLiBBIGZldyBwb3NzaWJsZSBzb2x1dGlvbnMgY29tZSB0byBtaW5kOgo8L3A+Cgo8b2w+CjxsaT5BZGQgdGhlIGNvbnN0IHF1YWxpZmllciB0byB0aGUgcmV0dXJuIHR5cGVzIG9mIHRoZXNlIGZ1bmN0aW9ucy48L2xpPgo8bGk+Q2hhbmdlIHRoZSByZXR1cm4gdHlwZSBvZiBhbGwgdGhlIGZ1bmN0aW9ucyB0byB2b2lkIHRvIG1hdGNoCnRoZSBzaWduYXR1cmVzIG9mIGFsbCB0aGUgb3RoZXIgYXNzaWdubWVudCBvcGVyYXRvcnMgdGhlc2UgY2xhc3NlcwpkZWZpbmUuPC9saT4KPGxpPlByb2hpYml0IHRoZSBjb3B5IGFzc2lnbm1lbnQgb2YgdGhlc2UgY2xhc3NlcyBieSBkZWNsYXJpbmcgdGhlCmNvcHkgYXNzaWdubWVudCBvcGVyYXRvcnMgcHJpdmF0ZSAoYXMgaXMgZG9uZSBhbmQgZG9jdW1lbnRlZCBieQpzb21lIGltcGxlbWVudGF0aW9ucykuPC9saT4KPC9vbD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgogICAgICAgIDxwPgoKRGVjbGFyZSAgdGhlICBjb3B5ICBhc3NpZ25tZW50ICBvcGVyYXRvcnMgIG9mIGFsbCAgZm91ciAgaGVscGVyICBhcnJheQpjbGFzcyB0ZW1wbGF0ZXMgY29uc3QuCgogICAgICAgIDwvcD4KICAgICAgICA8cD4KClNwZWNpZmljYWxseSwgIG1ha2UgdGhlIGZvbGxvd2luZyBlZGl0czoKCiAgICAgICAgPC9wPgogICAgICAgIDxwPgoKQ2hhbmdlICAgICB0aGUgICAgc2lnbmF0dXJlICAgICBpbiAgICAgMjYuNS41IFt0ZW1wbGF0ZS5zbGljZS5hcnJheV0gICAgYW5kCjI2LjUuNS4xIFtzbGljZS5hcnIuYXNzaWduXSBhcyBmb2xsb3dzOgoKICAgICAgICA8L3A+CiAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KPGNvZGU+PGlucz5jb25zdDwvaW5zPiBzbGljZV9hcnJheSZhbXA7IG9wZXJhdG9yPSAoY29uc3Qgc2xpY2VfYXJyYXkmYW1wOyk8aW5zPiBjb25zdDwvaW5zPjs8L2NvZGU+CgogICAgICAgIDwvcHJlPjwvYmxvY2txdW90ZT4KICAgICAgICA8cD4KCkNoYW5nZSAgICAgdGhlICAgICBzaWduYXR1cmUgICAgIGluICAgIDI2LjUuNyBbdGVtcGxhdGUuZ3NsaWNlLmFycmF5XSAgICAgYW5kCjI2LjUuNy4xIFtnc2xpY2UuYXJyYXkuYXNzaWduXSBhcyBmb2xsb3dzOgoKICAgICAgICA8L3A+CiAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KPGNvZGU+PGlucz5jb25zdDwvaW5zPiBnc2xpY2VfYXJyYXkmYW1wOyBvcGVyYXRvcj0gKGNvbnN0IGdzbGljZV9hcnJheSZhbXA7KTxpbnM+IGNvbnN0PC9pbnM+OzwvY29kZT4KCiAgICAgICAgPC9wcmU+PC9ibG9ja3F1b3RlPgogICAgICAgIDxwPgoKQ2hhbmdlIHRoZSAgc2lnbmF0dXJlIGluIDI2LjUuOCBbdGVtcGxhdGUubWFzay5hcnJheV0gIGFuZCAyNi41LjguMSBbbWFzay5hcnJheS5hc3NpZ25dIGFzCmZvbGxvd3M6CgogICAgICAgIDwvcD4KICAgICAgICA8YmxvY2txdW90ZT48cHJlPgo8Y29kZT48aW5zPmNvbnN0PC9pbnM+IG1hc2tfYXJyYXkmYW1wOyBvcGVyYXRvcj0gKGNvbnN0IG1hc2tfYXJyYXkmYW1wOyk8aW5zPiBjb25zdDwvaW5zPjs8L2NvZGU+CgogICAgICAgIDwvcHJlPjwvYmxvY2txdW90ZT4KICAgICAgICA8cD4KCkNoYW5nZSAgICAgdGhlICAgICBzaWduYXR1cmUgICAgIGluICAgIDI2LjUuOSBbdGVtcGxhdGUuaW5kaXJlY3QuYXJyYXldIGFuZAoyNi41LjkuMSBbaW5kaXJlY3QuYXJyYXkuYXNzaWduXSBhcyBmb2xsb3dzOgoKICAgICAgICA8L3A+CiAgICAgICAgPGJsb2NrcXVvdGU+PHByZT4KPGNvZGU+PGlucz5jb25zdDwvaW5zPiBpbmRpcmVjdF9hcnJheSZhbXA7IG9wZXJhdG9yPSAoY29uc3QgaW5kaXJlY3RfYXJyYXkmYW1wOyk8aW5zPiBjb25zdDwvaW5zPjs8L2NvZGU+CgogICAgICAgIDwvcHJlPjwvYmxvY2txdW90ZT4KCgo8cD48aT5bCktvbmEgKDIwMDcpIEFkZGVkIGNvbnN0IHF1YWxpZmljYXRpb24gdG8gdGhlIHJldHVybiB0eXBlcyBhbmQgc2V0IHRvIFJlYWR5LgpdPC9pPjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2MjIiPjwvYT42MjIuIGJlaGF2aW9yIG9mIDxjb2RlPmZpbGVidWY8L2NvZGU+IGR0b3IgYW5kIDxjb2RlPmNsb3NlPC9jb2RlPiBvbiBlcnJvcjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy44LjEuMTcgW2ZzdHJlYW0ubWVtYmVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDA3LTAxLTIwPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CiAgICAgICAgPHA+Cgo8Y29kZT5iYXNpY19maWxlYnVmPC9jb2RlPiAgZHRvciBpcyAgc3BlY2lmaWVkIHRvICBoYXZlICB0aGUgZm9sbG93aW5nCnN0cmFpZ2h0Zm9yd2FyZCBlZmZlY3RzOgoKICAgICAgICA8L3A+CiAgICAgICAgPGJsb2NrcXVvdGU+PHA+Cgo8aT5FZmZlY3RzPC9pPjogICAgICAgRGVzdHJveXMgICAgICBhbiAgICAgIG9iamVjdCAgICAgICBvZiAgICAgIGNsYXNzCjxjb2RlPmJhc2ljX2ZpbGVidWY8L2NvZGU+LiBDYWxscyA8Y29kZT5jbG9zZSgpPC9jb2RlPi4KCiAgICAgICAgPC9wPjwvYmxvY2txdW90ZT4KICAgICAgICA8cD4KCjxjb2RlPmNsb3NlKCk8L2NvZGU+IGRvZXMgYSBsb3Qgb2YgcG90ZW50aWFsbHkgY29tcGxpY2F0ZWQgcHJvY2Vzc2luZywKaW5jbHVkaW5nIGNhbGxpbmcgPGNvZGU+b3ZlcmZsb3coKTwvY29kZT4gdG8gd3JpdGUgb3V0IHRoZSB0ZXJtaW5hdGlvbgpzZXF1ZW5jZSAgKHRvICAgYnJpbmcgIHRoZSAgb3V0cHV0ICBzZXF1ZW5jZSAgdG8gICBpdHMgIGluaXRpYWwgIHNoaWZ0CnN0YXRlKS4gU2luY2UgIGFueSBvZiB0aGUgIGZ1bmN0aW9ucyBjYWxsZWQgZHVyaW5nIHRoZSAgcHJvY2Vzc2luZyBjYW4KdGhyb3cgYW4gZXhjZXB0aW9uLCB3aGF0IHNob3VsZCB0aGUgIGVmZmVjdHMgb2YgYW4gZXhjZXB0aW9uIGJlIG9uIHRoZQpkdG9yPyBTaG91bGQgdGhlICBkdG9yIGNhdGNoIGFuZCBzd2FsbG93IGl0IG9yICBzaG91bGQgaXQgcHJvcGFnYXRlIGl0CnRvIHRoZSBjYWxsZXI/ICBUaGUgdGV4dCBkb2Vzbid0ICBzZWVtIHRvIHByb3ZpZGUgYW55IGd1aWRhbmNlIGluIHRoaXMKcmVnYXJkICBvdGhlciAgdGhhbiAgdGhlICBnZW5lcmFsICByZXN0cmljdGlvbiBvbiAgdGhyb3dpbmcgIChidXQgIG5vdApwcm9wYWdhdGluZykgIGV4Y2VwdGlvbnMgIGZyb20gICBkZXN0cnVjdG9ycyAgb2YgIGxpYnJhcnkgIGNsYXNzZXMgIGluCjE3LjQuNC45IFtyZXMub24uZXhjZXB0aW9uLmhhbmRsaW5nXS4KCiAgICAgICAgPC9wPgogICAgICAgIDxwPgoKRnVydGhlciwgIHRoZSBsYXN0IHRoaW5nICA8Y29kZT5jbG9zZSgpPC9jb2RlPiBpcyAgc3BlY2lmaWVkIHRvICBkbyBpcwpjYWxsIDxjb2RlPmZjbG9zZSgpPC9jb2RlPiB0byBjbG9zZSB0aGUgPGNvZGU+RklMRTwvY29kZT4gcG9pbnRlci4gVGhlCmxhc3Qgc2VudGVuY2Ugb2YgdGhlIDxpPkVmZmVjdHM8L2k+IGNsYXVzZSByZWFkczoKCiAgICAgICAgPC9wPgogICAgICAgIDxibG9ja3F1b3RlPjxwPgoKLi4uICAgSWYgICAgYW55ICAgb2YgICAgdGhlICAgY2FsbHMgICB0byAgICA8Y29kZT5vdmVyZmxvdzwvY29kZT4gICBvcgo8Y29kZT5zdGQ6OmZjbG9zZTwvY29kZT4gZmFpbHMgdGhlbiA8Y29kZT5jbG9zZTwvY29kZT4gZmFpbHMuCgogICAgICAgIDwvcD48L2Jsb2NrcXVvdGU+CiAgICAgICAgPHA+CgpUaGlzICBzdWdnZXN0cyB0aGF0ICA8Y29kZT5jbG9zZSgpPC9jb2RlPiAgbWlnaHQgYmUgIHJlcXVpcmVkIHRvICBjYWxsCjxjb2RlPmZjbG9zZSgpPC9jb2RlPiAgIGlmICBhbmQgIG9ubHkgICBpZiAgbm9uZSAgIG9mICB0aGUgICBjYWxscyAgdG8KPGNvZGU+b3ZlcmZsb3coKTwvY29kZT4gZmFpbHMsIGFuZCBhdm9pZCBjbG9zaW5nIHRoZSA8Y29kZT5GSUxFPC9jb2RlPgpvdGhlcndpc2UuIFRoaXMgIHdheSwgaWYgIDxjb2RlPm92ZXJmbG93KCk8L2NvZGU+IGZhaWxlZCB0byAgZmx1c2ggb3V0CnRoZSBkYXRhLCB0aGUgY2FsbGVyICB3b3VsZCBoYXZlICB0aGUgb3Bwb3J0dW5pdHkgdG8gIHRyeSB0byAgZmx1c2ggaXQKYWdhaW4gKHBlcmhhcHMgIGFmdGVyIHRyeWluZyAgdG8gZGVhbCB3aXRoICB3aGF0ZXZlciBwcm9ibGVtICBtYXkgaGF2ZQpjYXVzZWQgdGhlIGZhaWx1cmUpLCByYXRoZXIgdGhhbiBsb3NpbmcgaXQgb3V0cmlnaHQuCgogICAgICAgIDwvcD4KICAgICAgICA8cD4KCk9uIHRoZSBvdGhlciBoYW5kLCAgdGhlIGZ1bmN0aW9uJ3MgPGk+UG9zdGNvbmRpdGlvbjwvaT4gc3BlY2lmaWVzIHRoYXQKPGNvZGU+aXNfb3BlbigpID09ICBmYWxzZTwvY29kZT4sIHdoaWNoICBzdWdnZXN0cyB0aGF0IGl0ICBzaG91bGQgY2FsbAo8Y29kZT5mY2xvc2UoKTwvY29kZT4gICAgICAgdW5jb25kaXRpb25hbGx5LiAgICAgICBIb3dldmVyLCAgICAgIHNpbmNlCjxpPlBvc3Rjb25kaXRpb248L2k+IGNsYXVzZXMgIGFyZSBzcGVjaWZpZWQgZm9yIG1hbnkgIGZ1bmN0aW9ucyBpbiB0aGUKc3RhbmRhcmQsICBpbmNsdWRpbmcgY29uc3RydWN0b3JzICB3aGVyZSB0aGV5ICBvYnZpb3VzbHkgIGNhbm5vdCBhcHBseQphZnRlciBhbiAgZXhjZXB0aW9uLCBpdCdzIG5vdCBjbGVhciAgd2hldGhlciB0aGlzIDxpPlBvc3Rjb25kaXRpb248L2k+CmNsYXVzZSBpcyBpbnRlbmRlZCB0byBhcHBseSBldmVuIGFmdGVyIGFuIGV4Y2VwdGlvbi4KCiAgICAgICAgPC9wPgogICAgICAgIDxwPgoKSXQgIG1pZ2h0ICBiZSB3b3J0aCAgbm90aW5nICB0aGF0ICB0aGUgIHRyYWRpdGlvbmFsIGJlaGF2aW9yICAoQ2xhc3NpYwpJb3N0cmVhbXMgIDxjb2RlPmZzdHJlYW06OmNsb3NlKCk8L2NvZGU+IGFuZCAgQyA8Y29kZT5mY2xvc2UoKTwvY29kZT4pCmlzICB0byAgY2xvc2UgIHRoZSAgPGNvZGU+RklMRTwvY29kZT4gdW5jb25kaXRpb25hbGx5LCAgcmVnYXJkbGVzcyAgb2YKZXJyb3JzLgoKICAgICAgICA8L3A+Cgo8cD48aT5bClNlZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMzOTciPjM5NzwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQxOCI+NDE4PC9hPiBmb3IgcmVsYXRlZCBpc3N1ZXMuCl08L2k+PC9wPgoKCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgogICAgICAgIDxwPgoKQWZ0ZXIgZGlzY3Vzc2luZyB0aGlzICBvbiB0aGUgcmVmbGVjdG9yIChzZWUgdGhlICB0aHJlYWQgc3RhcnRpbmcgd2l0aApjKytzdGQtbGliLTE3NjUwKSB3ZSBwcm9wb3NlIHRoYXQgPGNvZGU+Y2xvc2UoKTwvY29kZT4gYmUgY2xhcmlmaWVkIHRvCm1hdGNoIHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvciwgdGhhdCBpcyB0byBjbG9zZSB0aGUgPGNvZGU+RklMRTwvY29kZT4KdW5jb25kaXRpb25hbGx5LCAgZXZlbiBhZnRlciAgZXJyb3JzIG9yICBleGNlcHRpb25zLiAgSW4gIGFkZGl0aW9uLCB3ZQpwcm9wb3NlIHRoZSBkdG9yIGRlc2NyaXB0aW9uIGJlIGFtZW5kZWQgc28gYXMgdG8gZXhwbGljaXRseSByZXF1aXJlIGl0CnRvIGNhdGNoIGFuZCBzd2FsbG93IGFueSBleGNlcHRpb25zIHRocm93biBieSA8Y29kZT5jbG9zZSgpPC9jb2RlPi4KCiAgICAgICAgPC9wPgogICAgICAgIDxwPgoKU3BlY2lmaWNhbGx5LCAgIHdlICAgcHJvcG9zZSAgIHRvICAgbWFrZSAgdGhlICAgZm9sbG93aW5nICAgZWRpdHMgICBpbgoyNy44LjEuNCBbZmlsZWJ1Zi5tZW1iZXJzXToKCiAgICAgICAgPC9wPgogICAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICA8cHJlPgo8Y29kZT5iYXNpY19maWxlYnVmJmx0O2NoYXJULHRyYWl0cyZndDsqIGNsb3NlKCk7PC9jb2RlPgoKICAgICAgICAgICAgPC9wcmU+CiAgICAgICAgICAgIDxwPgoKPGk+RWZmZWN0czwvaT46ICBJZiA8Y29kZT5pc19vcGVuKCkgID09IGZhbHNlPC9jb2RlPiwgIHJldHVybnMgIGEgbnVsbApwb2ludGVyLiAgICAgICAgSWYgICAgICBhICAgICAgIHB1dCAgICAgIGFyZWEgICAgICAgZXhpc3RzLCAgICAgIGNhbGxzCjxjb2RlPm92ZXJmbG93KHRyYWl0czo6ZW9mKCkpPC9jb2RlPiB0byBmbHVzaCAgY2hhcmFjdGVycy4gSWYgdGhlIGxhc3QKdmlydHVhbCAgIG1lbWJlciAgZnVuY3Rpb24gICBjYWxsZWQgIG9uICAgPGNvZGU+KnRoaXM8L2NvZGU+ICAoYmV0d2Vlbgo8Y29kZT51bmRlcmZsb3c8L2NvZGU+LCAgPGNvZGU+b3ZlcmZsb3c8L2NvZGU+LCAgPGNvZGU+c2Vla29mZjwvY29kZT4sCmFuZCAgIDxjb2RlPnNlZWtwb3M8L2NvZGU+KSAgd2FzICAgPGNvZGU+b3ZlcmZsb3c8L2NvZGU+ICAgdGhlbiAgY2FsbHMKPGNvZGU+YV9jb2RlY3Z0LnVuc2hpZnQ8L2NvZGU+IChwb3NzaWJseSBzZXZlcmFsIHRpbWVzKSB0byBkZXRlcm1pbmUgYQp0ZXJtaW5hdGlvbiAgIHNlcXVlbmNlLCAgICBpbnNlcnRzICAgdGhvc2UgICBjaGFyYWN0ZXJzICAgIGFuZCAgIGNhbGxzCjxjb2RlPm92ZXJmbG93KHRyYWl0czo6ZW9mKCkpPC9jb2RlPiAgYWdhaW4uICBGaW5hbGx5PGlucz4sIHJlZ2FyZGxlc3MKb2Ygd2hldGhlciAgYW55IG9mIHRoZSBwcmVjZWRpbmcgIGNhbGxzIGZhaWxzIG9yICB0aHJvd3MgYW4gZXhjZXB0aW9uLAp0aGUgIGZ1bmN0aW9uPC9pbnM+IDxkZWw+aXQ8L2RlbD4gIGNsb3NlcyAgIHRoZSAgZmlsZSAgICgiYXMgICBpZiIgIGJ5ICAgY2FsbGluZwo8Y29kZT5zdGQ6OmZjbG9zZShmaWxlKTwvY29kZT4pLjxzdXA+MzM0KTwvc3VwPiAgSWYgYW55ICBvZiAgdGhlIGNhbGxzCjxpbnM+bWFkZSAgICBieSAgIHRoZSAgICBmdW5jdGlvbjwvaW5zPjxkZWw+dG8gICA8Y29kZT5vdmVyZmxvdzwvY29kZT4Kb3I8L2RlbD48aW5zPiwgIGluY2x1ZGluZyAgPC9pbnM+PGNvZGU+c3RkOjpmY2xvc2U8L2NvZGU+PGlucz4sIDwvaW5zPgpmYWlscyB0aGVuIDxjb2RlPmNsb3NlPC9jb2RlPiBmYWlsczxpbnM+ICBieSByZXR1cm5pbmcgYSBudWxsIHBvaW50ZXIuCklmIG9uZSBvZiB0aGVzZSBjYWxscyB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGUgZXhjZXB0aW9uIGlzIGNhdWdodCBhbmQKcmV0aHJvd24gYWZ0ZXIgY2xvc2luZyB0aGUgZmlsZS48L2lucz4KCiAgICAgICAgICAgIDwvcD4KICAgICAgICA8L2Jsb2NrcXVvdGU+CiAgICAgICAgPHA+CgpBbmQgdG8gbWFrZSB0aGUgZm9sbG93aW5nIGVkaXRzIGluIDI3LjguMS4yIFtmaWxlYnVmLmNvbnNdLgoKICAgICAgICA8L3A+CiAgICAgICAgPGJsb2NrcXVvdGU+CiAgICAgICAgICAgIDxwcmU+Cjxjb2RlPnZpcnR1YWwgfmJhc2ljX2ZpbGVidWYoKTs8L2NvZGU+CgogICAgICAgICAgICA8L3ByZT4KICAgICAgICAgICAgPHA+Cgo8aT5FZmZlY3RzPC9pPjogICAgICAgRGVzdHJveXMgICAgICBhbiAgICAgIG9iamVjdCAgICAgICBvZiAgICAgIGNsYXNzCjxjb2RlPmJhc2ljX2ZpbGVidWYmbHQ7Y2hhclQsdHJhaXRzJmd0OzwvY29kZT4uICAgICAgICAgICAgICAgICAgIENhbGxzCjxjb2RlPmNsb3NlKCk8L2NvZGU+LiAgICA8aW5zPklmICBhbiAgIGV4Y2VwdGlvbiAgb2NjdXJzICAgZHVyaW5nICB0aGUKZGVzdHJ1Y3Rpb24gb2YgdGhlIG9iamVjdCwgaW5jbHVkaW5nIHRoZSBjYWxsIHRvIDxjb2RlPmNsb3NlKCk8L2NvZGU+LAp0aGUgICAgIGV4Y2VwdGlvbiAgICBpcyAgICAgY2F1Z2h0ICAgIGJ1dCAgICAgbm90ICAgICByZXRocm93biAgICAoc2VlCjE3LjQuNC45IFtyZXMub24uZXhjZXB0aW9uLmhhbmRsaW5nXSkuPC9pbnM+CgogICAgICAgICAgICA8L3A+CiAgICAgICAgPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjYyMyI+PC9hPjYyMy4gPGNvZGU+cHViaW1idWU8L2NvZGU+IGZvcmJpZGRlbiB0byBjYWxsIDxjb2RlPmltYnVlPC9jb2RlPjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy4xLjEgW2lvc3RyZWFtLmxpbWl0cy5pbWJ1ZV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDA3LTAxLTIwPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CiAgICAgICAgPHA+CgoyNy4xLjEgW2lvc3RyZWFtLmxpbWl0cy5pbWJ1ZV0gIHNwZWNpZmllcyAgdGhhdCAgIm5vICBmdW5jdGlvbiAgZGVzY3JpYmVkICBpbgpjbGF1c2UgMjcgZXhjZXB0ICBmb3IgPGNvZGU+aW9zX2Jhc2U6OmltYnVlPC9jb2RlPiBjYXVzZXMgYW55IGluc3RhbmNlCm9mICAgICAgICAgICAgICAgICAgIDxjb2RlPmJhc2ljX2lvczo6aW1idWU8L2NvZGU+ICAgICAgICAgICAgICAgICAgb3IKPGNvZGU+YmFzaWNfc3RyZWFtYnVmOjppbWJ1ZTwvY29kZT4gdG8gYmUgY2FsbGVkLiIKCiAgICAgICAgPC9wPgogICAgICAgIDxwPgoKVGhhdCAgICAgIGNvbnRyYWRpY3RzICAgICAgdGhlICAgICAgPGk+RWZmZWN0czwvaT4gICAgIGNsYXVzZSAgICAgIGZvcgo8Y29kZT5iYXNpY19zdHJlYW1idWY6OnB1YmltYnVlKCk8L2NvZGU+ICB3aGljaCByZXF1aXJlcyAgdGhlIGZ1bmN0aW9uCnRvIGRvIGp1c3QgdGhhdDogY2FsbCA8Y29kZT5iYXNpY19zdHJlYW1idWY6OmltYnVlKCk8L2NvZGU+LgoKICAgICAgICA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgogICAgICAgIDxwPgoKVG8gICAgZml4ICAgdGhpcywgICAgcmVwaHJhc2UgICAgdGhlICAgc2VudGVuY2UgICAgYWJvdmUgICB0byAgICBhbGxvdwo8Y29kZT5wdWJpbWJ1ZTwvY29kZT4gdG8gZG8gd2hhdCAgaXQgd2FzIGRlc2lnbmVkIHRvIGRvLiBTcGVjaWZpY2FsbHkuCmNoYW5nZSAyNy4xLjEgW2lvc3RyZWFtLmxpbWl0cy5pbWJ1ZV0sIHAxIHRvIHJlYWQ6CgogICAgICAgIDwvcD4KICAgICAgICA8YmxvY2txdW90ZT48cD4KCk5vICAgICBmdW5jdGlvbiAgICBkZXNjcmliZWQgICAgIGluICAgIGNsYXVzZSAgICAgMjcgICAgIGV4Y2VwdCAgICBmb3IKPGNvZGU+aW9zX2Jhc2U6OmltYnVlPC9jb2RlPiAgPGlucz5hbmQgPGNvZGU+YmFzaWNfZmlsZWJ1Zjo6cHViaW1idWU8L2NvZGU+PC9pbnM+CmNhdXNlcyAgICBhbnkgICAgaW5zdGFuY2UgICAgb2YgICAgPGNvZGU+YmFzaWNfaW9zOjppbWJ1ZTwvY29kZT4gICAgb3IKPGNvZGU+YmFzaWNfc3RyZWFtYnVmOjppbWJ1ZTwvY29kZT4gdG8gYmUgY2FsbGVkLiAuLi4KCiAgICAgICAgPC9wPjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2MjQiPjwvYT42MjQuIDxjb2RlPnZhbGFycmF5PC9jb2RlPiBhc3NpZ25tZW50IGFuZCBhcnJheXMgb2YgdW5lcXVhbCBsZW5ndGg8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuNS4yLjIgW3ZhbGFycmF5LmFzc2lnbl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDA3LTAxLTIwPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CiAgICAgICAgPHA+CgpUaGUgYmVoYXZpb3Igb2YgdGhlICA8Y29kZT52YWxhcnJheTwvY29kZT4gY29weSBhc3NpZ25tZW50IG9wZXJhdG9yIGlzCmRlZmluZWQgb25seSB3aGVuIGJvdGggc2lkZXMgaGF2ZSAgdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzIGFuZCB0aGUKc3BlYyBpcyBleHBsaWNpdCBhYm91dCBhc3NpZ25tZW50cyBvZiBhcnJheXMgb2YgdW5lcXVhbCBsZW5ndGhzIGhhdmluZwp1bmRlZmluZWQgYmVoYXZpb3IuCgogICAgICAgIDwvcD4KICAgICAgICA8cD4KCkhvd2V2ZXIsIHRoZSBnZW5lcmFsaXplZCAgc3Vic2NyaXB0aW5nIGFzc2lnbm1lbnQgb3BlcmF0b3JzIG92ZXJsb2FkZWQKb24gPGNvZGU+c2xpY2VfYXJyYXk8L2NvZGU+ICBldCBhbCAoMjYuNS4yLjIgW3ZhbGFycmF5LmFzc2lnbl0pICBkb24ndCBoYXZlIGFueQpzdWNoIHJlc3RyaWN0aW9uLCBsZWFkaW5nICB0aGUgcmVhZGVyIHRvIGJlbGlldmUgdGhhdCAgdGhlIGJlaGF2aW9yIG9mCnRoZXNlICBvdmVybG9hZHMgaXMgIHdlbGwgZGVmaW5lZCAgcmVnYXJkbGVzcyAgb2YgdGhlICBsZW5ndGhzIG9mICB0aGUKYXJndW1lbnRzLgoKICAgICAgICA8L3A+CiAgICAgICAgPHA+CgpGb3IgZXhhbXBsZSwgIGJhc2VkIG9uICB0aGUgcmVhZGluZyAgb2YgdGhlIHNwZWMgIHRoZSBiZWhhdmlvciAgb2YgdGhlCnNuaXBwZXQgYmVsb3cgY2FuIGJlIGV4cGVjdGVkIHRvIGJlIHdlbGwtZGVmaW5lZDoKCiAgICAgICAgPC9wPgogICAgICAgIDxwcmU+ICAgIGNvbnN0IHN0ZDo6c2xpY2UgZnJvbV8wX3RvXzMgKDAsIDMsIDEpOyAgIC8vIHJlZmVycyB0byBlbGVtZW50cyAwLCAxLCAyCiAgICBjb25zdCBzdGQ6OnZhbGFycmF5Jmx0O2ludCZndDsgYSAoMSwgMyk7ICAgICAgICAvLyBhID0geyAxLCAxLCAxIH0KICAgIHN0ZDo6dmFsYXJyYXkmbHQ7aW50Jmd0OyAgICAgICBiICgyLCA0KTsgICAgICAgIC8vIGIgPSB7IDIsIDIsIDIsIDIgfQoKICAgIGIgPSBhIFtmcm9tXzBfdG9fM107CiAgICAgICAgPC9wcmU+CiAgICAgICAgPHA+CgpJbiBwcmFjdGljZSwgPGNvZGU+YjwvY29kZT4gbWF5IGVuZCB1cCBiZWluZyA8Y29kZT57IDEsIDEsIDEgfTwvY29kZT4sCjxjb2RlPnsgIDEsICAxLCAxLCAgMiAgfTwvY29kZT4sICBvciAgYW55dGhpbmcgZWxzZSwgIGluZGljYXRpbmcgIHRoYXQKZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIHZhcnkuCgogICAgICAgIDwvcD4KCjxwPgpRdW90aW5nIGZyb20gU2VjdGlvbiAzLjQsIEFzc2lnbm1lbnQgb3BlcmF0b3JzLCBvZiBBbCBWZXJtZXVsZW4ncwpQcm9wb3NhbCBmb3IgU3RhbmRhcmQgQysrIEFycmF5IENsYXNzZXMgKHNlZSBjKytzdGQtbGliLTcwNDsKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMTk5My9OMDMwOC5hc2MiPk4wMzA4PC9hPik6CjwvcD4KPGJsb2NrcXVvdGU+PHA+CiAgLi4uaWYgdGhlIHNpemUgb2YgdGhlIGFycmF5IG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgdGhlIGVxdWFsCiAgc2lnbiBkaWZmZXJzIGZyb20gdGhlIHNpemUgb2YgdGhlIGFycmF5IG9uIHRoZSBsZWZ0LCBhIHJ1biB0aW1lCiAgZXJyb3Igb2NjdXJzLiBIb3cgdGhpcyBlcnJvciBpcyBoYW5kbGVkIGlzIGltcGxlbWVudGF0aW9uCiAgZGVwZW5kZW50OyBmb3IgY29tcGlsZXJzIHdoaWNoIHN1cHBvcnQgaXQsIHRocm93aW5nIGFuIGV4Y2VwdGlvbgogIHdvdWxkIGJlIHJlYXNvbmFibGUuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4KQW5kIHNlZSBtb3JlIGhpc3RvcnkgaW4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvSlRDMS9TQzIyL1dHMjEvZG9jcy9wYXBlcnMvMTk5My9OMDI4MC5wZGYiPk4wMjgwPC9hPi4KPC9wPgoKICAgICAgICA8cD4KCkl0IGhhcyAgYmVlbiBhcmd1ZWQgaW4gIGRpc2N1c3Npb25zIG9uIHRoZSBjb21taXR0ZWUncyAgcmVmbGVjdG9yIHRoYXQKdGhlIHNlbWFudGljcyBvZiBhbGwgPGNvZGU+dmFsYXJyYXk8L2NvZGU+IGFzc2lnbm1lbnQgb3BlcmF0b3JzIHNob3VsZApiZSBwZXJtaXR0ZWQgdG8gYmUgdW5kZWZpbmVkIHVubGVzcyAgdGhlICBsZW5ndGggIG9mIHRoZSBhcnJheXMgIGJlaW5nCmFzc2lnbmVkIGlzIHRoZSBzYW1lIGFzIHRoZSBsZW5ndGggb2YgdGhlIG9uZSBiZWluZyBhc3NpZ25lZCBmcm9tLiBTZWUKdGhlIHRocmVhZCBzdGFydGluZyBhdCBjKytzdGQtbGliLTE3Nzg2LgoKICAgICAgICA8L3A+CiAgICAgICAgPHA+CgpJbiBvcmRlciAgdG8gcmVmbGVjdCAgc3VjaCB2aWV3cywgdGhlICBzdGFuZGFyZCBtdXN0IHNwZWNpZnkgIHRoYXQgdGhlCnNpemUgb2YgdGhlICBhcnJheSByZWZlcnJlZCB0byBieSB0aGUgYXJndW1lbnQgIG9mIHRoZSBhc3NpZ25tZW50IG11c3QKbWF0Y2ggdGhlIHNpemUgb2YgdGhlIGFycmF5ICB1bmRlciBhc3NpZ25tZW50LCBmb3IgZXhhbXBsZSBieSBhZGRpbmcgYQo8aT5SZXF1aXJlczwvaT4gY2xhdXNlIHRvIDI2LjUuMi4yIFt2YWxhcnJheS5hc3NpZ25dIGFzIGZvbGxvd3M6CgogICAgICAgIDwvcD4KICAgICAgICA8YmxvY2txdW90ZT48cD4KCjxpPlJlcXVpcmVzPC9pPjogVGhlIGxlbmd0aCBvZiB0aGUgIGFycmF5IHRvIHdoaWNoIHRoZSBhcmd1bWVudCByZWZlcnMKZXF1YWxzIDxjb2RlPnNpemUoKTwvY29kZT4uCgogICAgICAgIDwvcD48L2Jsb2NrcXVvdGU+CgogICAgICAgIDxwPgoKTm90ZSB0aGF0IGl0J3MgIGZhciBmcm9tIGNsZWFyIHRoYXQgc3VjaCBsZWV3YXkgIGlzIG5lY2Vzc2FyeSBpbiBvcmRlcgp0byBpbXBsZW1lbnQgPGNvZGU+dmFsYXJyYXk8L2NvZGU+IGVmZmljaWVudGx5LgoKICAgICAgICA8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW5zZXJ0IG5ldyBwYXJhZ3JhcGggaW50byAyNi41LjIuMiBbdmFsYXJyYXkuYXNzaWduXToKPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+dmFsYXJyYXkmbHQ7VCZndDsmYW1wOyBvcGVyYXRvcj0oY29uc3Qgc2xpY2VfYXJyYXkmbHQ7VCZndDsmYW1wOyk7IAp2YWxhcnJheSZsdDtUJmd0OyZhbXA7IG9wZXJhdG9yPShjb25zdCBnc2xpY2VfYXJyYXkmbHQ7VCZndDsmYW1wOyk7IAp2YWxhcnJheSZsdDtUJmd0OyZhbXA7IG9wZXJhdG9yPShjb25zdCBtYXNrX2FycmF5Jmx0O1QmZ3Q7JmFtcDspOyAKdmFsYXJyYXkmbHQ7VCZndDsmYW1wOyBvcGVyYXRvcj0oY29uc3QgaW5kaXJlY3RfYXJyYXkmbHQ7VCZndDsmYW1wOyk7CjwvcHJlPgo8YmxvY2txdW90ZT4KPHA+PGlucz4KPGk+UmVxdWlyZXM8L2k+OiBUaGUgbGVuZ3RoIG9mIHRoZSAgYXJyYXkgdG8gd2hpY2ggdGhlIGFyZ3VtZW50IHJlZmVycwplcXVhbHMgPGNvZGU+c2l6ZSgpPC9jb2RlPi4KPC9pbnM+PC9wPgo8cD4KVGhlc2Ugb3BlcmF0b3JzIGFsbG93IHRoZSByZXN1bHRzIG9mIGEgZ2VuZXJhbGl6ZWQgc3Vic2NyaXB0aW5nIG9wZXJhdGlvbiB0byBiZSBhc3NpZ25lZCBkaXJlY3RseSB0byBhIDx0dD52YWxhcnJheTwvdHQ+Lgo8L3A+CjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjYyOCI+PC9hPjYyOC4gSW5jb25zaXN0ZW50IGRlZmluaXRpb24gb2YgYmFzaWNfcmVnZXggY29uc3RydWN0b3I8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjguOCBbcmUucmVnZXhdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEJvIFBlcnNzb24gPGI+RGF0ZTo8L2I+IDIwMDctMDEtMjM8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3JlLnJlZ2V4Ij5pc3N1ZXM8L2E+IGluIFtyZS5yZWdleF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpTZWN0aW9uIDI4LjggW3JlLnJlZ2V4XSBsaXN0cyBhIGNvbnN0cnVjdG9yCjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUmbHQ7Y2xhc3MgSW5wdXRJdGVyYXRvciZndDsKYmFzaWNfcmVnZXgoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGZsYWdfdHlwZSBmID0gcmVnZXhfY29uc3RhbnRzOjpFQ01BU2NyaXB0KTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+Ckhvd2V2ZXIsIGluIHNlY3Rpb24gMjguOC4yIFtyZS5yZWdleC5jb25zdHJ1Y3RdLCB0aGlzIGNvbnN0cnVjdG9yIHRha2VzIGEgCnBhaXIgb2YgPHR0PkZvcndhcmRJdGVyYXRvcjwvdHQ+Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIDI4LjguMiBbcmUucmVnZXguY29uc3RydWN0XToKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgPGRlbD5Gb3J3YXJkSXRlcmF0b3I8L2RlbD4gPGlucz5JbnB1dEl0ZXJhdG9yPC9pbnM+Jmd0OwogIGJhc2ljX3JlZ2V4KDxkZWw+Rm9yd2FyZEl0ZXJhdG9yPC9kZWw+IDxpbnM+SW5wdXRJdGVyYXRvcjwvaW5zPiBmaXJzdCwgPGRlbD5Gb3J3YXJkSXRlcmF0b3I8L2RlbD4gPGlucz5JbnB1dEl0ZXJhdG9yPC9pbnM+IGxhc3QsIAogICAgICAgICAgICAgIGZsYWdfdHlwZSBmID0gcmVnZXhfY29uc3RhbnRzOjpFQ01BU2NyaXB0KTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2MzQiPjwvYT42MzQuIDx0dD5hbGxvY2F0b3IuYWRkcmVzcygpPC90dD4gZG9lc24ndCB3b3JrIGZvciB0eXBlcyBvdmVybG9hZGluZyA8dHQ+b3BlcmF0b3ImYW1wOzwvdHQ+PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjcuNS4xIFthbGxvY2F0b3IubWVtYmVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSG93YXJkIEhpbm5hbnQgPGI+RGF0ZTo8L2I+IDIwMDctMDItMDc8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2FsbG9jYXRvci5tZW1iZXJzIj5pc3N1ZXM8L2E+IGluIFthbGxvY2F0b3IubWVtYmVyc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EdXBsaWNhdGUgb2Y6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzNTAiPjM1MDwvYT48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KCjxwPgoyMC43LjUuMSBbYWxsb2NhdG9yLm1lbWJlcnNdIHNheXM6CjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+cG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSA8aT54PC9pPikgY29uc3Q7PC9wcmU+CjxibG9ja3F1b3RlPgo8cD4KLTEtIDxpPlJldHVybnM6PC9pPiA8dHQ+JmFtcDs8aT54PC9pPjwvdHQ+Lgo8L3A+CjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKPHA+CjIwLjcuNS4xIFthbGxvY2F0b3IubWVtYmVyc10gZGVmaW5lcyA8dHQ+Q29weUNvbnN0cnVjdGlibGU8L3R0PiB3aGljaCBjdXJyZW50bHkgbm90Cm9ubHkgZGVmaW5lcyB0aGUgc2VtYW50aWNzIG9mIGNvcHkgY29uc3RydWN0aW9uLCBidXQgYWxzbyByZXN0cmljdHMgd2hhdCBhbiBvdmVybG9hZGVkCjx0dD5vcGVyYXRvciZhbXA7PC90dD4gbWF5IGRvLiAgSSBiZWxpZXZlIHByb3Bvc2FscyBhcmUgaW4gdGhlIHdvcmtzIChzdWNoIGFzIGNvbmNlcHRzCmFuZCBydmFsdWUgcmVmZXJlbmNlKSB0byBkZWNvdXBsZSB0aGVzZSB0d28gcmVxdWlyZW1lbnRzLiAgSW5kZWVkIGl0IGlzIG5vdCBldmlkZW50CnRoYXQgd2Ugc2hvdWxkIGRpc2FsbG93IG92ZXJsb2FkaW5nIDx0dD5vcGVyYXRvciZhbXA7PC90dD4gdG8gcmV0dXJuIHNvbWV0aGluZyBvdGhlcgp0aGFuIHRoZSBhZGRyZXNzIG9mIDx0dD4qdGhpczwvdHQ+Lgo8L3A+Cgo8cD4KQW4gZXhhbXBsZSBvZiB3aGVuIHlvdSB3YW50IHRvIG92ZXJsb2FkIDx0dD5vcGVyYXRvciZhbXA7PC90dD4gdG8gcmV0dXJuIHNvbWV0aGluZwpvdGhlciB0aGFuIHRoZSBvYmplY3QncyBhZGRyZXNzIGlzIHByb3h5IHJlZmVyZW5jZXMgc3VjaCBhcyA8dHQ+dmVjdG9yJmx0O2Jvb2wmZ3Q7PC90dD4KKG9yIGl0cyByZXBsYWNlbWVudCwgY3VycmVudGx5IGNvZGUtbmFtZWQgPHR0PmJpdF92ZWN0b3I8L3R0PikuICBUYWtpbmcgdGhlIGFkZHJlc3Mgb2YKc3VjaCBhIHByb3h5IHJlZmVyZW5jZSBzaG91bGQgbG9naWNhbGx5IHlpZWxkIGEgcHJveHkgcG9pbnRlciwgd2hpY2ggd2hlbiBkZXJlZmVyZW5jZWQsCnlpZWxkcyBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIHByb3h5IHJlZmVyZW5jZSBhZ2Fpbi4KPC9wPgoKPHA+Ck9uIHRoZSBvdGhlciBoYW5kLCBzb21lIGNvZGUgdHJ1bHkgbmVlZHMgdGhlIGFkZHJlc3Mgb2YgYW4gb2JqZWN0LCBhbmQgbm90IGEgcHJveHkKKHR5cGljYWxseSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGlkZW50aXR5IG9mIGFuIG9iamVjdCBjb21wYXJlZCB0byBhIHJlZmVyZW5jZSBvYmplY3QpLgo8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy8iPmJvb3N0PC9hPiBoYXMgbG9uZyByZWNvZ25pemVkIHRoaXMgZGlsZW1tYSBhbmQgc29sdmVkIGl0IHdpdGggCjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdXRpbGl0eS91dGlsaXR5Lmh0bSNhZGRyZXNzb2YiPjx0dD5ib29zdDo6YWRkcmVzc29mPC90dD48L2E+LgpJdCBhcHBlYXJzIHRvIG1lIHRoYXQgdGhpcyB3b3VsZCBiZSB1c2VmdWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIGRlZmF1bHQgYWxsb2NhdG9yLiAgQWRvcHRpbmcKdGhpcyBkZWZpbml0aW9uIGZvciA8dHQ+YWxsb2NhdG9yOjphZGRyZXNzPC90dD4gd291bGQgZnJlZSB0aGUgc3RhbmRhcmQgb2YgcmVxdWlyaW5nCmFueXRoaW5nIHNwZWNpYWwgZnJvbSB0eXBlcyB3aGljaCBvdmVybG9hZCA8dHQ+b3BlcmF0b3ImYW1wOzwvdHQ+LiAgSXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNTgwIj41ODA8L2E+CmlzIGV4cGVjdGVkIHRvIG1ha2UgdXNlIG9mIDx0dD5hbGxvY2F0b3I6OmFkZHJlc3M8L3R0PiBtYW5kYXRvcnkgZm9yIGNvbnRhaW5lcnMuCjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIDIwLjcuNS4xIFthbGxvY2F0b3IubWVtYmVyc106CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPnBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgPGk+eDwvaT4pIGNvbnN0OzwvcHJlPgo8YmxvY2txdW90ZT4KPHA+Ci0xLSA8aT5SZXR1cm5zOjwvaT4gPGRlbD48dHQ+JmFtcDs8aT54PC9pPjwvdHQ+LjwvZGVsPiA8aW5zPlRoZSBhY3R1YWwgYWRkcmVzcyBvZiBvYmplY3QgcmVmZXJlbmNlZCBieSA8aT54PC9pPiwKZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2YgYW4gb3ZlcmxvYWRlZCA8dHQ+b3BlcmF0b3ImYW1wOzwvdHQ+LjwvaW5zPgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwcmU+Y29uc3RfcG9pbnRlciBhZGRyZXNzKGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIDxpPng8L2k+KSBjb25zdDs8L3ByZT4KPGJsb2NrcXVvdGU+CjxwPgotMi0gPGk+UmV0dXJuczo8L2k+IDxkZWw+PHR0PiZhbXA7PGk+eDwvaT48L3R0Pi48L2RlbD4gPGlucz5UaGUgYWN0dWFsIGFkZHJlc3Mgb2Ygb2JqZWN0IHJlZmVyZW5jZWQgYnkgPGk+eDwvaT4sCmV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIGFuIG92ZXJsb2FkZWQgPHR0Pm9wZXJhdG9yJmFtcDs8L3R0Pi48L2lucz4KPC9wPgo8L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCjxwPjxpPlsKcG9zdCBPeGZvcmQ6ICBUaGlzIHdvdWxkIGJlIHJlbmRlcmVkIE5BRCBFZGl0b3JpYWwgYnkgYWNjZXB0YW5jZSBvZgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA3L24yMjU3Lmh0bWwiPk4yMjU3PC9hPi4KXTwvaT48L3A+CgoKPHA+PGk+WwpLb25hICgyMDA3KTogVGhlIExXRyBhZG9wdGVkIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG9mIE4yMzg3IGZvciB0aGlzIGlzc3VlIHdoaWNoCndhcyBzdWJzZXF1ZW50bHkgc3BsaXQgb3V0IGludG8gYSBzZXBhcmF0ZSBwYXBlciBOMjQzNiBmb3IgdGhlIHB1cnBvc2VzIG9mIHZvdGluZy4KVGhlIHJlc29sdXRpb24gaW4gTjI0MzYgYWRkcmVzc2VzIHRoaXMgaXNzdWUuICBUaGUgTFdHIHZvdGVkIHRvIGFjY2VsZXJhdGUgdGhpcwppc3N1ZSB0byBSZWFkeSBzdGF0dXMgdG8gYmUgdm90ZWQgaW50byB0aGUgV1AgYXQgS29uYS4KXTwvaT48L3A+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2MzgiPjwvYT42MzguIGRlcXVlIGVuZCBpbnZhbGlkYXRpb24gZHVyaW5nIGVyYXNlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjIuMi4zIFtkZXF1ZS5tb2RpZmllcnNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFN0ZXZlIExvQmFzc28gPGI+RGF0ZTo8L2I+IDIwMDctMDItMTc8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBzdGFuZGFyZCBzdGF0ZXMgYXQgMjMuMi4yLjMgW2RlcXVlLm1vZGlmaWVyc10vNDoKPC9wPgo8YmxvY2txdW90ZT48cHJlPmRlcXVlIGVyYXNlKC4uLikKPC9wcmU+CiA8cD4KPGk+RWZmZWN0czo8L2k+IC4uLiBBbiBlcmFzZSBhdCBlaXRoZXIgZW5kIG9mIHRoZSBkZXF1ZSBpbnZhbGlkYXRlcyBvbmx5CnRoZSBpdGVyYXRvcnMgYW5kIHRoZSByZWZlcmVuY2VzIHRvIHRoZSBlcmFzZWQgZWxlbWVudHMuCjwvcD4KPC9ibG9ja3F1b3RlPgo8cD4KVGhpcyBkb2VzIG5vdCBzdGF0ZSB0aGF0IGl0ZXJhdG9ycyB0byBlbmQgd2lsbCBiZSBpbnZhbGlkYXRlZC4KSXQgbmVlZHMgdG8gYmUgYW1lbmRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIGFjY291bnQgZm9yIGVuZCBpbnZhbGlkYXRpb24uCjwvcD4KPHA+ClNvbWV0aGluZyBsaWtlOgo8L3A+CjxibG9ja3F1b3RlPjxwPgpBbnkgdGltZSB0aGUgbGFzdCBlbGVtZW50IGlzIGVyYXNlZCwgaXRlcmF0b3JzIHRvIGVuZCBhcmUgaW52YWxpZGF0ZWQuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4KVGhpcyB3b3VsZCBoYW5kbGUgc2l0dWF0aW9ucyBsaWtlOgo8L3A+CjxibG9ja3F1b3RlPjxwcmU+ZXJhc2UoYmVnaW4oKSwgZW5kKCkpCmVyYXNlKGVuZCgpIC0gMSkKcG9wX2JhY2soKQpyZXNpemUobiwgLi4uKSB3aGVyZSBuICZsdDsgc2l6ZSgpCnBvcF9mcm9udCgpIHdpdGggc2l6ZSgpID09IDEKCjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPjxpPlsKUG9zdCBLb25hLCBTdGV2ZSBMb0Jhc3NvIG5vdGVzOgpdPC9pPjwvcD4KCgo8YmxvY2txdW90ZT4KTXkgb25seSBpc3N1ZSB3aXRoIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGlzIHRoYXQgaXQgbWlnaHQgbm90IGJlIGNsZWFyCnRoYXQgPHR0PnBvcF9mcm9udCgpPC90dD4gW3doZXJlIDx0dD5zaXplKCkgPT0gMTwvdHQ+XSBjYW4gaW52YWxpZGF0ZSBwYXN0LXRoZS1lbmQKaXRlcmF0b3JzLgo8L2Jsb2NrcXVvdGU+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAyMy4yLjIuMyBbZGVxdWUubW9kaWZpZXJzXSwgcDQ6CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPml0ZXJhdG9yIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIHBvc2l0aW9uKTsgCml0ZXJhdG9yIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIGZpcnN0LCBjb25zdF9pdGVyYXRvciBsYXN0KTsKPC9wcmU+Cgo8YmxvY2txdW90ZT4KPHA+Ci00LSA8aT5FZmZlY3RzOjwvaT4gQW4gZXJhc2UgaW4gdGhlIG1pZGRsZSBvZiB0aGUgPHR0PmRlcXVlPC90dD4KaW52YWxpZGF0ZXMgYWxsIHRoZSBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgdG8gZWxlbWVudHMgb2YgdGhlCjx0dD5kZXF1ZTwvdHQ+IDxpbnM+YW5kIHRoZSBwYXN0LXRoZS1lbmQgaXRlcmF0b3I8L2lucz4uIEFuIGVyYXNlIGF0CmVpdGhlciBlbmQgb2YgdGhlIDx0dD5kZXF1ZTwvdHQ+IGludmFsaWRhdGVzIG9ubHkgdGhlIGl0ZXJhdG9ycyBhbmQgdGhlCnJlZmVyZW5jZXMgdG8gdGhlIGVyYXNlZCBlbGVtZW50czxpbnM+LCBleGNlcHQgdGhhdCBlcmFzaW5nIGF0IHRoZSBlbmQKYWxzbyBpbnZhbGlkYXRlcyB0aGUgcGFzdC10aGUtZW5kIGl0ZXJhdG9yPC9pbnM+Lgo8L3A+CjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKCgo8cD48aT5bCktvbmEgKDIwMDcpOiBQcm9wb3NlZCB3b3JkaW5nIGFkZGVkIGFuZCBtb3ZlZCB0byBSZXZpZXcuCl08L2k+PC9wPgoKCjxwPjxpPlsKQmVsbGV2dWU6Cl08L2k+PC9wPgoKCjxibG9ja3F1b3RlPgpOb3RlIHRoYXQgdGhlcmUgaXMgZXhpc3RpbmcgY29kZSB0aGF0IHJlbGllcyBvbiBpdGVyYXRvcnMgbm90IGJlaW5nCmludmFsaWRhdGVkLCBidXQgdGhlcmUgYXJlIGFsc28gZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIHRoYXQgZG8KaW52YWxpZGF0ZSBpdGVyYXRvcnMuIFRodXMsIHN1Y2ggY29kZSBpcyBub3QgcG9ydGFibGUgaW4gYW55IGNhc2UuIFRoZXJlCmlzIGEgcG9wX2Zyb250KCkgbm90ZSwgd2hpY2ggc2hvdWxkIHBvc3NpYmx5IGJlIGEgc2VwYXJhdGUgaXNzdWUuIE1pa2UKU3BlcnR1cyB0byBldmFsdWF0ZSBhbmQsIGlmIG5lZWQgYmUsIGZpbGUgYW4gaXNzdWUuCjwvYmxvY2txdW90ZT4KCgoKCjxocj4KPGgzPjxhIG5hbWU9IjY0MCI+PC9hPjY0MC4gMjcuNi4yLjUuMiBkb2VzIG5vdCBoYW5kbGUgKHVuc2lnbmVkKSBsb25nIGxvbmc8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuNi4yLjYuMiBbb3N0cmVhbS5pbnNlcnRlcnMuYXJpdGhtZXRpY10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGFuaWVsIEty/GdsZXIgPGI+RGF0ZTo8L2I+IDIwMDctMDItMTc8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI29zdHJlYW0uaW5zZXJ0ZXJzLmFyaXRobWV0aWMiPmlzc3VlczwvYT4gaW4gW29zdHJlYW0uaW5zZXJ0ZXJzLmFyaXRobWV0aWNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGFyaXRobWV0aWMgaW5zZXJ0ZXJzIGFyZSBkZXNjcmliZWQgaW4gMjcuNi4yLjYuMiBbb3N0cmVhbS5pbnNlcnRlcnMuYXJpdGhtZXRpY10uCkFsdGhvdWdoIHRoZSBzZWN0aW9uIHN0YXJ0cyB3aXRoIGEgbGlzdGluZyBvZiB0aGUgaW5zZXJ0ZXJzIGluY2x1ZGluZwp0aGUgbmV3IG9uZXM6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+b3BlcmF0b3ImbHQ7Jmx0Oyhsb25nIGxvbmcgdmFsICk7Cm9wZXJhdG9yJmx0OyZsdDsodW5zaWduZWQgbG9uZyBsb25nIHZhbCApOwo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KdGhlIHRleHQgaW4gcGFyYWdyYXBoIDEsIHdoaWNoIGRlc2NyaWJlcyB0aGUgY29ycmVzcG9uZGluZyBlZmZlY3RzCm9mIHRoZSBpbnNlcnRlcnMsIGRlcGVuZGluZyBvbiB0aGUgYWN0dWFsIHR5cGUgb2YgdmFsLCBkb2VzIG5vdApoYW5kbGUgdGhlIHR5cGVzIDx0dD5sb25nIGxvbmc8L3R0PiBhbmQgPHR0PnVuc2lnbmVkIGxvbmcgbG9uZzwvdHQ+Lgo8L3A+Cgo8cD48aT5bCkFsaXNkYWlyOiBJbiBhZGRpdGlvbiB0byB0aGUgKHVuc2lnbmVkKSBsb25nIGxvbmcgcHJvYmxlbSwgdGhhdCB3aG9sZSBwYXJhZ3JhcGgKbWlzc2VzIGFueSByZWZlcmVuY2UgdG8gZXh0ZW5kZWQgaW50ZWdyYWwgdHlwZXMgc3VwcGxpZWQgYnkgdGhlCmltcGxlbWVudGF0aW9uIC0gb25lIG9mIHRoZSBhZGRpdGlvbnMgYnkgY29yZSBhIGNvdXBsZSBvZiB3b3JraW5nIHBhcGVycwpiYWNrLgpdPC9pPjwvcD4KCgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDI3LjYuMi42LjIgW29zdHJlYW0uaW5zZXJ0ZXJzLmFyaXRobWV0aWNdLzEgY2hhbmdlIHRoZSB0aGlyZCBzZW50ZW5jZQo8L3A+Cgo8YmxvY2txdW90ZT4KV2hlbiB2YWwgaXMgb2YgdHlwZSA8dHQ+Ym9vbDwvdHQ+LCA8dHQ+bG9uZzwvdHQ+LCA8dHQ+dW5zaWduZWQKbG9uZzwvdHQ+LCA8aW5zPmxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLDwvaW5zPiA8dHQ+ZG91YmxlPC90dD4sCjx0dD5sb25nIGRvdWJsZTwvdHQ+LCBvciA8dHQ+Y29uc3Qgdm9pZCo8L3R0PiwgdGhlIGZvcm1hdHRpbmcgY29udmVyc2lvbgpvY2N1cnMgYXMgaWYgaXQgcGVyZm9ybWVkIHRoZSBmb2xsb3dpbmcgY29kZSBmcmFnbWVudDoKPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjY0MyI+PC9hPjY0My4gSW1wb3NzaWJsZSAiYXMgaWYiIGNsYXVzZXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjcuOC4xLjEgW2ZpbGVidWZdLCAyMi4yLjIuMi4yIFtmYWNldC5udW0ucHV0LnZpcnR1YWxzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEYW5pZWwgS3L8Z2xlciA8Yj5EYXRlOjwvYj4gMjAwNy0wMi0yMDwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGN1cnJlbnQgc3RhbmRhcmQgMTQ4ODI6MjAwMyhFKSBhcyB3ZWxsIGFzIE4yMTM0IGhhdmUgdGhlCmZvbGxvd2luZwpkZWZlY3RzOgo8L3A+Cgo8cD4KMjcuOC4xLjEgW2ZpbGVidWZdLzUgc2F5czoKPC9wPgoKPGJsb2NrcXVvdGU+CjxwPgpJbiBvcmRlciB0byBzdXBwb3J0IGZpbGUgSS9PIGFuZCBtdWx0aWJ5dGUvd2lkZSBjaGFyYWN0ZXIgY29udmVyc2lvbiwgY29udmVyc2lvbnMgYXJlIHBlcmZvcm1lZCB1c2luZyBtZW1iZXJzIG9mIGEgCmZhY2V0LCByZWZlcnJlZCB0byBhcyA8dHQ+PGk+YV9jb2RlY3Z0PC9pPjwvdHQ+IGluIGZvbGxvd2luZyBzZWN0aW9ucywgb2J0YWluZWQgImFzIGlmIiBieQo8L3A+CjxibG9ja3F1b3RlPjxwcmU+Y29kZWN2dCZsdDtjaGFyVCxjaGFyLHR5cGVuYW1lIHRyYWl0czo6c3RhdGVfdHlwZSZndDsgPGk+YV9jb2RlY3Z0PC9pPiA9CiAgdXNlX2ZhY2V0Jmx0O2NvZGVjdnQmbHQ7Y2hhclQsY2hhcix0eXBlbmFtZSB0cmFpdHM6OnN0YXRlX3R5cGUmZ3Q7ICZndDsoZ2V0bG9jKCkpOwo8L3ByZT48L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCjxwPgo8dHQ+dXNlX2ZhY2V0PC90dD4gcmV0dXJucyBhIDx0dD5jb25zdCBmYWNldDwvdHQ+IHJlZmVyZW5jZSBhbmQgbm8gZmFjZXQgaXMKY29weWNvbnN0cnVjdGlibGUsIHNvIHRoZSBjb2RlY3Z0IGNvbnN0cnVjdGlvbiBzaG91bGQgZmFpbCB0byBjb21waWxlLgo8L3A+Cgo8cD4KQSBzaW1pbGFyIGlzc3VlIGFyaXNlcyBpbiAyMi4yLjIuMi4yIFtmYWNldC5udW0ucHV0LnZpcnR1YWxzXS8xNSBmb3IgPHR0Pm51bV9wdW5jdDwvdHQ+Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjcuOC4xLjEgW2ZpbGVidWZdLzUgY2hhbmdlIHRoZSAiYXMgaWYiIGNvZGUKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT48aW5zPmNvbnN0IDwvaW5zPmNvZGVjdnQmbHQ7Y2hhclQsY2hhcix0eXBlbmFtZSB0cmFpdHM6OnN0YXRlX3R5cGUmZ3Q7PGlucz4mYW1wOzwvaW5zPiA8aT5hX2NvZGVjdnQ8L2k+ID0KICB1c2VfZmFjZXQmbHQ7Y29kZWN2dCZsdDtjaGFyVCxjaGFyLHR5cGVuYW1lIHRyYWl0czo6c3RhdGVfdHlwZSZndDsgJmd0OyhnZXRsb2MoKSk7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpJbiAyMi4yLjIuMi4yIFtmYWNldC5udW0ucHV0LnZpcnR1YWxzXS8xNSAoVGhpcyBpcyBwYXJhIDUgaW4gTjIxMzQpIGNoYW5nZQo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CkEgbG9jYWwgdmFyaWFibGUgPHR0PjxpPnB1bmN0PC9pPjwvdHQ+IGlzIGluaXRpYWxpemVkIHZpYQo8L3A+CjxibG9ja3F1b3RlPjxwcmU+PGlucz5jb25zdCA8L2lucz5udW1wdW5jdCZsdDtjaGFyVCZndDs8aW5zPiZhbXA7PC9pbnM+IDxpPnB1bmN0PC9pPiA9IHVzZV9mYWNldCZsdDsgbnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7ICZndDsoPGk+c3RyPC9pPi5nZXRsb2MoKSApPGlucz47PC9pbnM+CjwvcHJlPjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKPHA+CihQbGVhc2Ugbm90ZSBhbHNvIHRoZSBhZGRpdGlvbmFsIHByb3ZpZGVkIHRyYWlsaW5nIHNlbWljb2xvbikKPC9wPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2NDYiPjwvYT42NDYuIGNvbnN0IGluY29ycmVjdCBtYXRjaF9yZXN1bHQgbWVtYmVyczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyOC4xMC40IFtyZS5yZXN1bHRzLmZvcm1dIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERhbmllbCBLcvxnbGVyIDxiPkRhdGU6PC9iPiAyMDA3LTAyLTI2PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgoyOC4xMC40IFtyZS5yZXN1bHRzLmZvcm1dIChyb290IGFuZCBwYXJhIDMpIGluIE4yMTM0IGRlZmluZXMgdGhlIHR3byBmdW5jdGlvbiB0ZW1wbGF0ZQptZW1iZXJzIGZvcm1hdCBhcyBub24tY29uc3QgZnVuY3Rpb25zLCBhbHRob3VnaCB0aGV5IGFyZSBkZWNsYXJlZAphcyBjb25zdCBpbiAyOC4xMCBbcmUucmVzdWx0c10vMy4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkZCB0aGUgbWlzc2luZyA8dHQ+Y29uc3Q8L3R0PiBzcGVjaWZpZXIgdG8gYm90aCA8dHQ+Zm9ybWF0PC90dD4gb3ZlcmxvYWRzIGRlc2NyaWJlZAppbiBzZWN0aW9uIDI4LjEwLjQgW3JlLnJlc3VsdHMuZm9ybV0uCjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2NTAiPjwvYT42NTAuIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yIGFuZCBjb25zdCBjb3JyZWN0bmVzczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyOC4xMi4yIFtyZS50b2tpdGVyXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEYW5pZWwgS3L8Z2xlciA8Yj5EYXRlOjwvYj4gMjAwNy0wMy0wNTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjcmUudG9raXRlciI+aXNzdWVzPC9hPiBpbiBbcmUudG9raXRlcl0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpCb3RoIHRoZSBjbGFzcyBkZWZpbml0aW9uIG9mIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yICgyOC4xMi4yCltyZS50b2tpdGVyXS82KSBhbmQgdGhlIGxhdHRlciBtZW1iZXIgc3BlY2lmaWNhdGlvbnMgKDI4LjEyLjIuMgpbcmUudG9raXRlci5jb21wXS8xKzIpIGRlY2xhcmUgYm90aCBjb21wYXJpc29uIG9wZXJhdG9ycyBhcwpub24tY29uc3QgZnVuY3Rpb25zLiBGdXJ0aGVyb24sIGJvdGggZGVyZWZlcmVuY2Ugb3BlcmF0b3JzIGFyZQp1bmV4cGVjdGVkbHkgYWxzbyBkZWNsYXJlZCBhcyBub24tY29uc3QgaW4gMjguMTIuMiBbcmUudG9raXRlcl0vNgphcyB3ZWxsIGFzIGluICgyOC4xMi4yLjMgW3JlLnRva2l0ZXIuZGVyZWZdLzErMikuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgoxKSBJbiAoMjguMTIuMiBbcmUudG9raXRlcl0vNikgY2hhbmdlIHRoZSBjdXJyZW50IGRlY2xhcmF0aW9ucwo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPmJvb2wgb3BlcmF0b3I9PShjb25zdCByZWdleF90b2tlbl9pdGVyYXRvciZhbXA7KSA8aW5zPmNvbnN0PC9pbnM+Owpib29sIG9wZXJhdG9yIT0oY29uc3QgcmVnZXhfdG9rZW5faXRlcmF0b3ImYW1wOykgPGlucz5jb25zdDwvaW5zPjsKY29uc3QgdmFsdWVfdHlwZSZhbXA7IG9wZXJhdG9yKigpIDxpbnM+Y29uc3Q8L2lucz47CmNvbnN0IHZhbHVlX3R5cGUqIG9wZXJhdG9yLSZndDsoKSA8aW5zPmNvbnN0PC9pbnM+Owo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KMikgSW4gMjguMTIuMi4yIFtyZS50b2tpdGVyLmNvbXBdIGNoYW5nZSB0aGUgZm9sbG93aW5nIGRlY2xhcmF0aW9ucwo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPmJvb2wgb3BlcmF0b3I9PShjb25zdCByZWdleF90b2tlbl9pdGVyYXRvciZhbXA7IHJpZ2h0KSA8aW5zPmNvbnN0PC9pbnM+Owpib29sIG9wZXJhdG9yIT0oY29uc3QgcmVnZXhfdG9rZW5faXRlcmF0b3ImYW1wOyByaWdodCkgPGlucz5jb25zdDwvaW5zPjsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CjMpIEluIDI4LjEyLjIuMyBbcmUudG9raXRlci5kZXJlZl0gY2hhbmdlIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb25zCjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+Y29uc3QgdmFsdWVfdHlwZSZhbXA7IG9wZXJhdG9yKigpIDxpbnM+Y29uc3Q8L2lucz47CmNvbnN0IHZhbHVlX3R5cGUqIG9wZXJhdG9yLSZndDsoKSA8aW5zPmNvbnN0PC9pbnM+Owo8L3ByZT48L2Jsb2NrcXVvdGU+CgoKPHA+PGk+WwpLb25hICgyMDA3KTogVGhlIExXRyBhZG9wdGVkIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG9mIE4yNDA5IGZvciB0aGlzIGlzc3VlICh3aGljaAppcyB0byBhZG9wdCB0aGUgcHJvcG9zZWQgd29yZGluZyBpbiB0aGlzIGlzc3VlKS4KVGhlIExXRyB2b3RlZCB0byBhY2NlbGVyYXRlIHRoaXMgaXNzdWUgdG8gUmVhZHkgc3RhdHVzIHRvIGJlIHZvdGVkIGludG8gdGhlIFdQIGF0IEtvbmEuCl08L2k+PC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjY1MSI+PC9hPjY1MS4gTWlzc2luZyBwcmVjb25kaXRpb25zIGZvciByZWdleF90b2tlbl9pdGVyYXRvciBjJ3RvcnM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjguMTIuMi4xIFtyZS50b2tpdGVyLmNuc3RyXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEYW5pZWwgS3L8Z2xlciA8Yj5EYXRlOjwvYj4gMjAwNy0wMy0wNTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjcmUudG9raXRlci5jbnN0ciI+aXNzdWVzPC9hPiBpbiBbcmUudG9raXRlci5jbnN0cl0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpUaGUgdGV4dCBwcm92aWRlZCBpbiAyOC4xMi4yLjEgW3JlLnRva2l0ZXIuY25zdHJdLzIrMyBkZXNjcmliZXMKdGhlIGVmZmVjdHMgb2YgdGhlIHRocmVlIG5vbi1kZWZhdWx0IGNvbnN0cnVjdG9ycyBvZiBjbGFzcwp0ZW1wbGF0ZSByZWdleF90b2tlbl9pdGVyYXRvciBidXQgaXMgZG9lcyBub3QgY2xhcmlmeSB3aGljaCB2YWx1ZXMKYXJlIGxlZ2FsIHZhbHVlcyBmb3Igc3VibWF0Y2gvc3VibWF0Y2hlcy4gVGhpcyBiZWNvbWVzCmFuIGlzc3VlLCBpZiBvbmUgdGFrZXMgMjguMTIuMiBbcmUudG9raXRlcl0vOSBpbnRvIGFjY291bnQsIHdoaWNoIGV4cGxhaW5zCnRoZSBub3Rpb24gb2YgYSAiY3VycmVudCBtYXRjaCIgYnkgc2F5aW5nOgo8L3A+Cgo8YmxvY2txdW90ZT48cD4KVGhlIDxpPmN1cnJlbnQgbWF0Y2g8L2k+IGlzIDx0dD4oKnBvc2l0aW9uKS5wcmVmaXgoKTwvdHQ+IGlmIDx0dD5zdWJzW05dCj09IC0xPC90dD4sIG9yIDx0dD4oKnBvc2l0aW9uKVtzdWJzW05dXTwvdHQ+IGZvciBhbnkgb3RoZXIgdmFsdWUgb2YKPHR0PnN1YnNbTl08L3R0Pi4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpJdCdzIG5vdCBjbGVhciB0byBtZSwgd2hldGhlciBvdGhlciBuZWdhdGl2ZSB2YWx1ZXMgZXhjZXB0IC0xCmFyZSBsZWdhbCBhcmd1bWVudHMgb3Igbm90IC0gaXQgc2VlbXMgdGhleSBhcmUgbm90Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIHRoZSBmb2xsb3dpbmcgcHJlY29uZGl0aW9uIHBhcmFncmFwaCBqdXN0IGJlZm9yZSB0aGUgY3VycmVudAoyOC4xMi4yLjEgW3JlLnRva2l0ZXIuY25zdHJdLzI6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgo8aT5SZXF1aXJlczo8L2k+IEVhY2ggb2YgdGhlIGluaXRpYWxpemF0aW9uIHZhbHVlcyBvZiA8dHQ+c3ViczwvdHQ+IG11c3QgYmUgPHR0PiZndDs9IC0xPC90dD4uCjwvcD48L2Jsb2NrcXVvdGU+CgoKPHA+PGk+WwpLb25hICgyMDA3KTogVGhlIExXRyBhZG9wdGVkIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG9mIE4yNDA5IGZvciB0aGlzIGlzc3VlICh3aGljaAppcyB0byBhZG9wdCB0aGUgcHJvcG9zZWQgd29yZGluZyBpbiB0aGlzIGlzc3VlKS4KVGhlIExXRyB2b3RlZCB0byBhY2NlbGVyYXRlIHRoaXMgaXNzdWUgdG8gUmVhZHkgc3RhdHVzIHRvIGJlIHZvdGVkIGludG8gdGhlIFdQIGF0IEtvbmEuCl08L2k+PC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjY1MiI+PC9hPjY1Mi4gcmVnZXhfaXRlcmF0b3IgYW5kIGNvbnN0IGNvcnJlY3RuZXNzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI4LjEyLjEgW3JlLnJlZ2l0ZXJdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERhbmllbCBLcvxnbGVyIDxiPkRhdGU6PC9iPiAyMDA3LTAzLTA1PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPkJvdGggdGhlIGNsYXNzIGRlZmluaXRpb24gb2YgcmVnZXhfaXRlcmF0b3IgKDI4LjEyLjEgW3JlLnJlZ2l0ZXJdLzEpCmFuZCB0aGUgbGF0dGVyIG1lbWJlciBzcGVjaWZpY2F0aW9uICgyOC4xMi4xLjIgW3JlLnJlZ2l0ZXIuY29tcF0vMSsyKQpkZWNsYXJlIGJvdGggY29tcGFyaXNvbiBvcGVyYXRvcnMgYXMKbm9uLWNvbnN0IGZ1bmN0aW9ucy4gRnVydGhlcm9uLCBib3RoIGRlcmVmZXJlbmNlIG9wZXJhdG9ycyBhcmUKdW5leHBlY3RlZGx5IGFsc28gZGVjbGFyZWQgYXMgbm9uLWNvbnN0IGluIDI4LjEyLjEgW3JlLnJlZ2l0ZXJdLzEKYXMgd2VsbCBhcyBpbiAoMjguMTIuMS4zIFtyZS5yZWdpdGVyLmRlcmVmXS8xKzIpLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KMSkgSW4gKDI4LjEyLjEgW3JlLnJlZ2l0ZXJdLzEpIGNoYW5nZSB0aGUgY3VycmVudCBkZWNsYXJhdGlvbnMKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT5ib29sIG9wZXJhdG9yPT0oY29uc3QgcmVnZXhfaXRlcmF0b3ImYW1wOykgPGlucz5jb25zdDwvaW5zPjsKYm9vbCBvcGVyYXRvciE9KGNvbnN0IHJlZ2V4X2l0ZXJhdG9yJmFtcDspIDxpbnM+Y29uc3Q8L2lucz47CmNvbnN0IHZhbHVlX3R5cGUmYW1wOyBvcGVyYXRvciooKSA8aW5zPmNvbnN0PC9pbnM+Owpjb25zdCB2YWx1ZV90eXBlKiBvcGVyYXRvci0mZ3Q7KCkgPGlucz5jb25zdDwvaW5zPjsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CjIpIEluIDI4LjEyLjEuMyBbcmUucmVnaXRlci5kZXJlZl0gY2hhbmdlIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb25zCjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+Y29uc3QgdmFsdWVfdHlwZSZhbXA7IG9wZXJhdG9yKigpIDxpbnM+Y29uc3Q8L2lucz47CmNvbnN0IHZhbHVlX3R5cGUqIG9wZXJhdG9yLSZndDsoKSA8aW5zPmNvbnN0PC9pbnM+Owo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KMykgSW4gMjguMTIuMS4yIFtyZS5yZWdpdGVyLmNvbXBdIGNoYW5nZSB0aGUgZm9sbG93aW5nIGRlY2xhcmF0aW9ucwo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPmJvb2wgb3BlcmF0b3I9PShjb25zdCByZWdleF9pdGVyYXRvciZhbXA7IHJpZ2h0KSA8aW5zPmNvbnN0PC9pbnM+Owpib29sIG9wZXJhdG9yIT0oY29uc3QgcmVnZXhfaXRlcmF0b3ImYW1wOyByaWdodCkgPGlucz5jb25zdDwvaW5zPjsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKCjxwPjxpPlsKS29uYSAoMjAwNyk6IFRoZSBMV0cgYWRvcHRlZCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBvZiBOMjQwOSBmb3IgdGhpcyBpc3N1ZSAod2hpY2gKaXMgdG8gYWRvcHQgdGhlIHByb3Bvc2VkIHdvcmRpbmcgaW4gdGhpcyBpc3N1ZSkuClRoZSBMV0cgdm90ZWQgdG8gYWNjZWxlcmF0ZSB0aGlzIGlzc3VlIHRvIFJlYWR5IHN0YXR1cyB0byBiZSB2b3RlZCBpbnRvIHRoZSBXUCBhdCBLb25hLgpdPC9pPjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2NTQiPjwvYT42NTQuIE1pc3NpbmcgSU8gcm91bmR0cmlwIGZvciByYW5kb20gbnVtYmVyIGVuZ2luZXM8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuNC4xLjMgW3JhbmQucmVxLmVuZ10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGFuaWVsIEty/GdsZXIgPGI+RGF0ZTo8L2I+IDIwMDctMDMtMDg8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3JhbmQucmVxLmVuZyI+aXNzdWVzPC9hPiBpbiBbcmFuZC5yZXEuZW5nXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRhYmxlIDk4IGFuZCBwYXJhIDUgaW4gMjYuNC4xLjMgW3JhbmQucmVxLmVuZ10gc3BlY2lmeQp0aGUgSU8gaW5zZXJ0aW9uIGFuZCBleHRyYWN0aW9uIHNlbWFudGljIG9mIHJhbmRvbQpudW1iZXIgZW5naW5lcy4gSXQgY2FuIGJlIHNob3duLCB2LmkuLCB0aGF0IHRoZSBzcGVjaWZpY2F0aW9uCm9mIHRoZSBleHRyYWN0b3IgY2Fubm90IGd1YXJhbnRlZSB0byBmdWxmaWxsIHRoZSByZXF1aXJlbWVudApmcm9tIHBhcmEgNToKPC9wPgoKPGJsb2NrcXVvdGU+PHA+CklmIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiB3cml0dGVuIHZpYSBvcyAmbHQ7Jmx0OyB4IHdhcwpzdWJzZXF1ZW50bHkgcmVhZCB2aWEgaXMgJmd0OyZndDsgdiwgdGhlbiB4ID09IHYgcHJvdmlkZWQgdGhhdAp0aGVyZSBoYXZlIGJlZW4gbm8gaW50ZXJ2ZW5pbmcgaW52b2NhdGlvbnMgb2YgeCBvciBvZiB2Lgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBwcm9ibGVtIGlzLCB0aGF0IHRoZSBleHRyYWN0aW9uIHByb2Nlc3MgZGVzY3JpYmVkIGluCnRhYmxlIDk4IG1pc3NlcyB0byBzcGVjaWZ5IHRoYXQgaXQgd2lsbCBpbml0aWFsbHkgc2V0IHRoZQppZi5mbXRmbGFncyB0byBpb3NfYmFzZTo6ZGVjLCBzZWUgdGFibGUgMTA0Ogo8L3A+Cgo8YmxvY2txdW90ZT48cD4KZGVjOiBjb252ZXJ0cyBpbnRlZ2VyIGlucHV0IG9yIGdlbmVyYXRlcyBpbnRlZ2VyIG91dHB1dAppbiBkZWNpbWFsIGJhc2UKPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpQcm9vZjogVGhlIGZvbGxvd2luZyBzbWFsbCBwcm9ncmFtIGRlbW9uc3RyYXRlcyB0aGUgdmlvbGF0aW9uCm9mIHJlcXVpcmVtZW50cyAoZXhjZXB0aW9uIHNhZmV0eSBub3QgZnVsZmlsbGVkKToKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT4jaW5jbHVkZSAmbHQ7Y2Fzc2VydCZndDsKI2luY2x1ZGUgJmx0O29zdHJlYW0mZ3Q7CiNpbmNsdWRlICZsdDtpb3N0cmVhbSZndDsKI2luY2x1ZGUgJmx0O2lvbWFuaXAmZ3Q7CiNpbmNsdWRlICZsdDtzc3RyZWFtJmd0OwoKY2xhc3MgUmFuTnVtRW5naW5lIHsKICBpbnQgc3RhdGU7CnB1YmxpYzoKICBSYW5OdW1FbmdpbmUoKSA6IHN0YXRlKDQyKSB7fQoKICBib29sIG9wZXJhdG9yPT0oUmFuTnVtRW5naW5lIG90aGVyKSBjb25zdCB7CgkgIHJldHVybiBzdGF0ZSA9PSBvdGhlci5zdGF0ZTsKICB9CgogIHRlbXBsYXRlICZsdDt0eXBlbmFtZSBDaCwgdHlwZW5hbWUgVHImZ3Q7CiAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbSZsdDtDaCwgVHImZ3Q7JmFtcDsgb3BlcmF0b3ImbHQ7Jmx0OyhzdGQ6OmJhc2ljX29zdHJlYW0mbHQ7Q2gsIFRyJmd0OyZhbXA7IG9zLCBSYW5OdW1FbmdpbmUgZW5naW5lKSB7CglDaCBvbGQgPSBvcy5maWxsKG9zLndpZGVuKCcgJykpOyAvLyBTZXRzIHNwYWNlIGNoYXJhY3RlcgoJc3RkOjppb3NfYmFzZTo6Zm10ZmxhZ3MgZiA9IG9zLmZsYWdzKCk7CglvcyAmbHQ7Jmx0OyBzdGQ6OmRlYyAmbHQ7Jmx0OyBzdGQ6OmxlZnQgJmx0OyZsdDsgZW5naW5lLnN0YXRlOyAvLyBBZGRzIGlvc19iYXNlOjpkZWN8aW9zX2Jhc2U6OmxlZnQKCW9zLmZpbGwob2xkKTsgLy8gVW5kbwoJb3MuZmxhZ3MoZik7CglyZXR1cm4gb3M7CiAgfQoKICB0ZW1wbGF0ZSAmbHQ7dHlwZW5hbWUgQ2gsIHR5cGVuYW1lIFRyJmd0OwogIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW0mbHQ7Q2gsIFRyJmd0OyZhbXA7IG9wZXJhdG9yJmd0OyZndDsoc3RkOjpiYXNpY19pc3RyZWFtJmx0O0NoLCBUciZndDsmYW1wOyBpcywgUmFuTnVtRW5naW5lJmFtcDsgZW5naW5lKSB7CiAgICAgICAvLyBVbmNvbW1lbnQgb25seSBmb3IgdGhlIGZpeC4KCgkvL3N0ZDo6aW9zX2Jhc2U6OmZtdGZsYWdzIGYgPSBpcy5mbGFncygpOwoJLy9pcyAmZ3Q7Jmd0OyBzdGQ6OmRlYzsKCWlzICZndDsmZ3Q7IGVuZ2luZS5zdGF0ZTsKCS8vaXMuZmxhZ3MoZik7CglyZXR1cm4gaXM7CiAgfQp9OwoKaW50IG1haW4oKSB7CglzdGQ6OnN0cmluZ3N0cmVhbSBzOwoJcyAmbHQ7Jmx0OyBzdGQ6OnNldGZpbGwoJyMnKTsgLy8gTm8gcHJvYmxlbQogICAgICAgIHMgJmx0OyZsdDsgc3RkOjpvY3Q7IC8vIFlpa2VzIQogICAgICAgIC8vIEhlcmUgc3RhcnRzIHBhcmEgNSByZXF1aXJlbWVudHM6CglSYW5OdW1FbmdpbmUgeDsKCXMgJmx0OyZsdDsgeDsKCVJhbk51bUVuZ2luZSB2OwoJcyAmZ3Q7Jmd0OyB2OwoJYXNzZXJ0KHggPT0gdik7IC8vIEZhaWxzOiA0MiA9PSAzNAp9CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpBIHNlY29uZCwgbWlub3IgaXNzdWUgc2VlbXMgdG8gYmUsIHRoYXQgdGhlIGluc2VydGlvbgpkZXNjcmlwdGlvbiBmcm9tIHRhYmxlIDk4IHVubmVjZXNzYXJpbHkgcmVxdWlyZXMgdGhlCmFkZGl0aW9uIG9mIGlvc19iYXNlOjpmaXhlZCAod2hpY2ggb25seSBpbmZsdWVuY2VzIGZsb2F0aW5nLXBvaW50Cm51bWJlcnMpLiBJdHMgbm90IGVudGlyZWx5IGNsZWFyIHRvIG1lIHdoZXRoZXIgdGhlIHByb3Bvc2VkCnN0YW5kYXJkIGRvZXMgcmVxdWlyZSB0aGF0IHRoZSBzdGF0ZSBvZiByYW5kb20gbnVtYmVyIGVuZ2luZXMKaXMgc3RvcmVkIGluIGludGVncmFsIHR5cGVzIG9yIG5vdCwgYnV0IEkgaGF2ZSB0aGUgaW1wcmVzc2lvbgp0aGF0IHRoaXMgaXMgdGhlIGluZGVudCwgc2VlIGUuZy4gcC4gMwo8L3A+Cgo8YmxvY2txdW90ZT48cD4KVGhlIHNwZWNpZmljYXRpb24gb2YgZWFjaCByYW5kb20gbnVtYmVyIGVuZ2luZSBkZWZpbmVzIHRoZQpzaXplIG9mIGl0cyBzdGF0ZSBpbiBtdWx0aXBsZXMgb2YgdGhlIHNpemUgb2YgaXRzIHJlc3VsdF90eXBlLgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+CklmIG90aGVyIHR5cGVzIHRoYW4gaW50ZWdyYWxzIGFyZSBzdXBwb3J0ZWQsIHRoZW4gSSB3b25kZXIgd2h5Cm5vIHJlcXVpcmVtZW50cyBhcmUgc3BlY2lmaWVkIGZvciB0aGUgcHJlY2lzaW9uIG9mIHRoZSBzdHJlYW0uCjwvcD4KCjxwPgpTZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNy9uMjM5MS5wZGYiPk4yMzkxPC9hPiBhbmQKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNy9uMjQyMy5wZGYiPk4yNDIzPC9hPgpmb3Igc29tZSBmdXJ0aGVyIGRpc2N1c3Npb24uCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpBZG9wdCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBpbgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA3L24yNDIzLnBkZiI+TjI0MjM8L2E+Lgo8L3A+CgoKPHA+PGk+WwpLb25hICgyMDA3KTogVGhlIExXRyBhZG9wdGVkIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG9mIE4yNDIzIGZvciB0aGlzIGlzc3VlLgpUaGUgTFdHIHZvdGVkIHRvIGFjY2VsZXJhdGUgdGhpcyBpc3N1ZSB0byBSZWFkeSBzdGF0dXMgdG8gYmUgdm90ZWQgaW50byB0aGUgV1AgYXQgS29uYS4KXTwvaT48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjU1Ij48L2E+NjU1LiBTaWduYXR1cmUgb2YgZ2VuZXJhdGVfY2Fub25pY2FsIG5vdCB1c2VmdWw8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuNC43LjIgW3JhbmQudXRpbC5jYW5vbmljYWxdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IERhbmllbCBLcvxnbGVyIDxiPkRhdGU6PC9iPiAyMDA3LTAzLTA4PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNyYW5kLnV0aWwuY2Fub25pY2FsIj5pc3N1ZXM8L2E+IGluIFtyYW5kLnV0aWwuY2Fub25pY2FsXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkluIDI2LjQuMiBbcmFuZC5zeW5vcHNpc10gd2UgaGF2ZSB0aGUgZGVjbGFyYXRpb24KPC9wPgoKPGJsb2NrcXVvdGU+PHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBSZWFsVHlwZSwgY2xhc3MgVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwKICBzaXplX3QgYml0cyZndDsKcmVzdWx0X3R5cGUgZ2VuZXJhdGVfY2Fub25pY2FsKFVuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImYW1wOyBnKTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CkJlc2lkZXMgdGhlICJyZXN1bHRfdHlwZSIgaXNzdWUgKGFscmVhZHkgcmVjb2duaXplZCBieSBCbyBQZXJzc29uCmF0IFN1biwgMTEgRmViIDIwMDcgMDU6MjY6NDcgR01UIGluIHRoaXMgZ3JvdXApIGl0J3MgY2xlYXIsIHRoYXQKdGhlIHRlbXBsYXRlIHBhcmFtZXRlciBvcmRlciBpcyBub3QgcmVhc29uYWJseSBjaG9vc2VuOiBPYnZpb3VzbHkKb25lIGFsd2F5cyBuZWVkcyB0byBzcGVjaWZ5IGFsbCB0aHJlZSBwYXJhbWV0ZXJzLCBhbHRob3VnaCB1c3VhbGx5Cm9ubHkgdHdvIGFyZSByZXF1aXJlZCwgbmFtZWx5IHRoZSByZXN1bHQgdHlwZSBSZWFsVHlwZSBhbmQgdGhlCndhbnRlZCBiaXRzLCBiZWNhdXNlIFVuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IgY2FuIHVzdWFsbHkKYmUgZGVkdWNlZC4KPC9wPgoKPHA+ClNlZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA3L24yMzkxLnBkZiI+TjIzOTE8L2E+IGFuZAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA3L24yNDIzLnBkZiI+TjI0MjM8L2E+CmZvciBzb21lIGZ1cnRoZXIgZGlzY3Vzc2lvbi4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkb3B0IHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGluCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjI0MjMucGRmIj5OMjQyMzwvYT4uCjwvcD4KCgo8cD48aT5bCktvbmEgKDIwMDcpOiBUaGUgTFdHIGFkb3B0ZWQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gb2YgTjI0MjMgZm9yIHRoaXMgaXNzdWUuClRoZSBMV0cgdm90ZWQgdG8gYWNjZWxlcmF0ZSB0aGlzIGlzc3VlIHRvIFJlYWR5IHN0YXR1cyB0byBiZSB2b3RlZCBpbnRvIHRoZSBXUCBhdCBLb25hLgpdPC9pPjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2NjAiPjwvYT42NjAuIE1pc3NpbmcgQml0d2lzZSBPcGVyYXRpb25zPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjYgW2Z1bmN0aW9uLm9iamVjdHNdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEJlbWFuIERhd2VzIDxiPkRhdGU6PC9iPiAyMDA3LTA0LTAyPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmdW5jdGlvbi5vYmplY3RzIj5pc3N1ZXM8L2E+IGluIFtmdW5jdGlvbi5vYmplY3RzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+U2VjdGlvbiAyMC42IFtmdW5jdGlvbi5vYmplY3RzXSBwcm92aWRlcyA8c3BhbiBpZD0ic3QiIG5hbWU9InN0IiBjbGFzcz0ic3QiPmZ1bmN0aW9uPC9zcGFuPgo8c3BhbiBpZD0ic3QiIG5hbWU9InN0IiBjbGFzcz0ic3QiPm9iamVjdHM8L3NwYW4+IGZvciBzb21lIHVuYXJ5IGFuZCBiaW5hcnkgCm9wZXJhdGlvbnMsIGJ1dCBvdGhlcnMgYXJlIG1pc3NpbmcuIEluIGEgTFdHIHJlZmxlY3RvciBkaXNjdXNzaW9uLCBiZWdpbm5pbmcgCndpdGggYysrc3RkLWxpYi0xODA3OCwgcHJvcyBhbmQgY29ucyBvZiBhZGRpbmcgc29tZSBvZiB0aGUgbWlzc2luZyBvcGVyYXRpb25zIAp3ZXJlIGRpc2N1c3NlZC4gQmphcm5lIFN0cm91c3RydXAgY29tbWVudGVkICJXaHkgc3RhbmRhcmRpemUgd2hhdCBpc24ndCB1c2VkPyAKWWVzLCBJIHNlZSB0aGUgY2hpY2tlbiBhbmQgZWdnIHByb2JsZW1zIGhlcmUsIGJ1dCBpdCB3b3VsZCBiZSBuaWNlIHRvIHNlZSBhIApjb3VwbGUgb2YgZ2VudWluZSB1c2VzIGJlZm9yZSBtYWtpbmcgYWRkaXRpb25zLiI8L3A+CjxwPkEgbnVtYmVyIG9mIGxpYnJhcmllcywgaW5jbHVkaW5nIFJvZ3VlIFdhdmUsIEdOVSwgQWRvYmUgQVNMLCBhbmQgQm9vc3QsIGhhdmUgCmFscmVhZHkgYWRkZWQgdGhlc2UgZnVuY3Rpb25zLCBlaXRoZXIgcHVibGljbHkgb3IgZm9yIGludGVybmFsIHVzZS4gRm9yIGV4YW1wbGUsIApEb3VnIEdyZWdvciBjb21tZW50ZWQ6ICJCb29zdCB3aWxsIGFsc28gYWRkIC4uLiAofCwgJmFtcDssIF4pIGluIDEuMzUuMCwgYmVjYXVzZSB3ZSAKbmVlZCB0aG9zZSA8c3BhbiBpZD0ic3QiIG5hbWU9InN0IiBjbGFzcz0ic3QiPmZ1bmN0aW9uPC9zcGFuPgo8c3BhbiBpZD0ic3QiIG5hbWU9InN0IiBjbGFzcz0ic3QiPm9iamVjdHM8L3NwYW4+IHRvIHJlcHJlc2VudCB2YXJpb3VzIHBhcmFsbGVsIApjb2xsZWN0aXZlIG9wZXJhdGlvbnMgKHJlZHVjdGlvbnMsIHByZWZpeCByZWR1Y3Rpb25zLCBldGMuKSBpbiB0aGUgbmV3IE1lc3NhZ2UgClBhc3NpbmcgSW50ZXJmYWNlIChNUEkpIGxpYnJhcnkuIjwvcD4KPHA+QmVjYXVzZSB0aGUgYml0d2lzZSBvcGVyYXRvcnMgaGF2ZSB0aGUgc3Ryb25nZXN0IHVzZSBjYXNlcywgdGhlIHByb3Bvc2VkIApyZXNvbHV0aW9uIGlzIGxpbWl0ZWQgdG8gdGhlbS48L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5UbyAyMC42IFtmdW5jdGlvbi5vYmplY3RzXSwgRnVuY3Rpb24gb2JqZWN0cywgcGFyYWdyYXBoIDIsIGFkZCB0byB0aGUgaGVhZGVyIAombHQ7ZnVuY3Rpb25hbCZndDsgc3lub3BzaXM6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OyBzdHJ1Y3QgYml0X2FuZDsKdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7IHN0cnVjdCBiaXRfb3I7CnRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OyBzdHJ1Y3QgYml0X3hvcjs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5BdCBhIGxvY2F0aW9uIGluIGNsYXVzZSAyMCB0byBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBQcm9qZWN0IEVkaXRvciwgYWRkOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+VGhlIGxpYnJhcnkgcHJvdmlkZXMgYmFzaWMgZnVuY3Rpb24gb2JqZWN0IGNsYXNzZXMgZm9yIGFsbCBvZiB0aGUgYml0d2lzZSAKICBvcGVyYXRvcnMgaW4gdGhlIGxhbmd1YWdlIChbZXhwci5iaXQuYW5kXSwgW2V4cHIub3JdLCBbZXhwLnhvcl0pLjwvcD4KICA8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OyBzdHJ1Y3QgYml0X2FuZCA6IGJpbmFyeV9mdW5jdGlvbiZsdDtULFQsVCZndDsgewogIFQgb3BlcmF0b3IoKShjb25zdCBUJmFtcDsgeCAsIGNvbnN0IFQmYW1wOyB5ICkgY29uc3Q7Cn07PC9wcmU+CiAgPGJsb2NrcXVvdGU+CiAgICA8cD48Y29kZT5vcGVyYXRvcigpPC9jb2RlPiByZXR1cm5zPGNvZGU+IHggJmFtcDsgeTwvY29kZT4gLjwvcD4KICA8L2Jsb2NrcXVvdGU+CiAgPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsgc3RydWN0IGJpdF9vciA6IGJpbmFyeV9mdW5jdGlvbiZsdDtULFQsVCZndDsgewogIFQgb3BlcmF0b3IoKShjb25zdCBUJmFtcDsgeCAsIGNvbnN0IFQmYW1wOyB5ICkgY29uc3Q7Cn07PC9wcmU+CiAgPGJsb2NrcXVvdGU+CiAgICA8cD48Y29kZT5vcGVyYXRvcigpPC9jb2RlPiByZXR1cm5zIDxjb2RlPnggfCB5PC9jb2RlPiAuPC9wPgogIDwvYmxvY2txdW90ZT4KICA8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OyBzdHJ1Y3QgYml0X3hvciA6IGJpbmFyeV9mdW5jdGlvbiZsdDtULFQsVCZndDsgewogIFQgb3BlcmF0b3IoKShjb25zdCBUJmFtcDsgeCAsIGNvbnN0IFQmYW1wOyB5ICkgY29uc3Q7Cn07PC9wcmU+CiAgPGJsb2NrcXVvdGU+CiAgICA8cD48Y29kZT5vcGVyYXRvcigpPC9jb2RlPiByZXR1cm5zIDxjb2RlPnggXiB5PC9jb2RlPiAuPC9wPgogIDwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjY2MSI+PC9hPjY2MS4gTmV3IDI3LjYuMS4yLjIgY2hhbmdlcyBtYWtlIHNwZWNpYWwgZXh0cmFjdGlvbnMgdXNlbGVzczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNy42LjEuMi4yIFtpc3RyZWFtLmZvcm1hdHRlZC5hcml0aG1ldGljXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEYW5pZWwgS3L8Z2xlciA8Yj5EYXRlOjwvYj4gMjAwNy0wNC0wMTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjaXN0cmVhbS5mb3JtYXR0ZWQuYXJpdGhtZXRpYyI+aXNzdWVzPC9hPiBpbiBbaXN0cmVhbS5mb3JtYXR0ZWQuYXJpdGhtZXRpY10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpUbyB0aGUgbW9yZSBkcmFzdGljIGNoYW5nZXMgb2YgMjcuNi4xLjIuMiBbaXN0cmVhbS5mb3JtYXR0ZWQuYXJpdGhtZXRpY10gaW4gdGhlIGN1cnJlbnQgZHJhZnQgTjIxMzQgYmVsb25nCnRoZSBleHBsaWNpdCBkZXNjcmlwdGlvbiBvZiB0aGUgZXh0cmFjdGlvbiBvZiB0aGUgdHlwZXMgc2hvcnQgYW5kIGludCBpbgp0ZXJtcyBvZiBhcy1pZiBjb2RlIGZyYWdtZW50cy4KPC9wPgoKPG9sPgo8bGk+ClRoZSBjb3JyZXNwb25kaW5nIGFzLWlmIGV4dHJhY3Rpb25zIGluIHBhcmFncmFwaCAyIGFuZCAzIHdpbGwgbmV2ZXIKcmVzdWx0IGluIGEgY2hhbmdlIG9mIHRoZSBvcGVyYXRvciZndDsmZ3Q7IGFyZ3VtZW50IHZhbCwgYmVjYXVzZSB0aGUKY29udGVudHMgb2YgdGhlIGxvY2FsIHZhcmlhYmxlIGx2YWwgaXMgaW4gbm8gY2FzZSB3cml0dGVuIGludG8gdmFsLgpGdXJ0aGVyb24gYm90aCBmcmFnbWVudHMgbmVlZCBhIGN1cnJlbnRseSBtaXNzaW5nIHBhcmVudGhlc2VzIGluIHRoZQpiZWdpbm5pbmcgb2YgdGhlIGlmLXN0YXRlbWVudCB0byBiZSB2YWxpZCBDKysuCjwvbGk+CjxsaT5JIHdvdWxkIGxpa2UgdG8gYXNrIHdoZXRoZXIgdGhlIG9taXNzaW9uIG9mIGEgc2ltaWxhciBleHBsaWNpdApleHRyYWN0aW9uIG9mIHVuc2lnbmVkIHNob3J0IGFuZCB1bnNpZ25lZCBpbnQgaW4gdGVybXMgb2YgbG9uZyAtCmNvbXBhcmVkIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgbmV3IGluc2VydGlvbnMsIGFzIGRlc2NyaWJlZCBpbgoyNy42LjIuNi4yIFtvc3RyZWFtLmluc2VydGVycy5hcml0aG1ldGljXSwgaXMgYSBkZWxpYmVyYXRlIGRlY2lzaW9uIG9yCmFuCm92ZXJzaWdodC4KPC9saT4KPC9vbD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxvbD4KPGxpPgo8cD4KSW4gMjcuNi4xLjIuMiBbaXN0cmVhbS5mb3JtYXR0ZWQuYXJpdGhtZXRpY10vMiBjaGFuZ2UgdGhlIGN1cnJlbnQgYXMtaWYgY29kZSBmcmFnbWVudAo8L3A+CjxibG9ja3F1b3RlPjxwcmU+dHlwZWRlZiBudW1fZ2V0Jmx0O2NoYXJULGlzdHJlYW1idWZfaXRlcmF0b3ImbHQ7Y2hhclQsdHJhaXRzJmd0OyAmZ3Q7IG51bWdldDsKaW9zdGF0ZSBlcnIgPSAwOwpsb25nIGx2YWw7CnVzZV9mYWNldCZsdDtudW1nZXQmZ3Q7KGxvYykuZ2V0KCp0aGlzLCAwLCAqdGhpcywgZXJyLCBsdmFsICk7CmlmIChlcnIgPT0gMCkgPGlucz57PC9pbnM+CiAgPGRlbD4mYW1wOyZhbXA7PC9kZWw+IDxpbnM+aWY8L2lucz4gKGx2YWwgJmx0OyBudW1lcmljX2xpbWl0cyZsdDtzaG9ydCZndDs6Om1pbigpIHx8IG51bWVyaWNfbGltaXRzJmx0O3Nob3J0Jmd0Ozo6bWF4KCkgJmx0OyBsdmFsKTxkZWw+KTwvZGVsPgogICAgICBlcnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsKICA8aW5zPmVsc2UKICAgIHZhbCA9IHN0YXRpY19jYXN0Jmx0O3Nob3J0Jmd0OyhsdmFsKTsKfTwvaW5zPgpzZXRzdGF0ZShlcnIpOwo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KU2ltaWxhcmlseSBpbiAyNy42LjEuMi4yIFtpc3RyZWFtLmZvcm1hdHRlZC5hcml0aG1ldGljXS8zIGNoYW5nZSB0aGUgY3VycmVudCBhcy1pZiBmcmFnbWVudAo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnR5cGVkZWYgbnVtX2dldCZsdDtjaGFyVCxpc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgJmd0OyBudW1nZXQ7Cmlvc3RhdGUgZXJyID0gMDsKbG9uZyBsdmFsOwp1c2VfZmFjZXQmbHQ7bnVtZ2V0Jmd0Oyhsb2MpLmdldCgqdGhpcywgMCwgKnRoaXMsIGVyciwgbHZhbCApOwppZiAoZXJyID09IDApIDxpbnM+ezwvaW5zPgogIDxkZWw+JmFtcDsmYW1wOzwvZGVsPiA8aW5zPmlmPC9pbnM+IChsdmFsICZsdDsgbnVtZXJpY19saW1pdHMmbHQ7aW50Jmd0Ozo6bWluKCkgfHwgbnVtZXJpY19saW1pdHMmbHQ7aW50Jmd0Ozo6bWF4KCkgJmx0OyBsdmFsKTxkZWw+KTwvZGVsPgogICAgICBlcnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsKICA8aW5zPmVsc2UKICAgIHZhbCA9IHN0YXRpY19jYXN0Jmx0O2ludCZndDsobHZhbCk7Cn08L2lucz4Kc2V0c3RhdGUoZXJyKTsKPC9wcmU+PC9ibG9ja3F1b3RlPgo8L2xpPgo8bGk+Ci0tLQo8L2xpPgo8L29sPgoKCjxwPjxpPlsKS29uYSAoMjAwNyk6IE5vdGUgdG8gdGhlIGVkaXRvcjogdGhlIG5hbWUgbHZhbCBpbiB0aGUgY2FsbCB0byA8dHQ+dXNlX2ZhY2V0PC90dD4KaXMgaW5jb3JyZWN0bHkgaXRhbGljaXplZCBpbiB0aGUgY29kZSBmcmFnbWVudHMgY29ycmVzcG9uZGluZyB0bwo8dHQ+b3BlcmF0b3ImZ3Q7Jmd0OyhzaG9ydCAmYW1wOyk8L3R0PiBhbmQgPHR0Pm9wZXJhdG9yICZndDsmZ3Q7KGludCAmYW1wOyk8L3R0Pi4gQWxzbywgdmFsIC0tIHdoaWNoIGFwcGVhcnMKdHdpY2Ugb24gdGhlIGxpbmUgd2l0aCB0aGUgPHR0PnN0YXRpY19jYXN0PC90dD4gaW4gdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gLS0Kc2hvdWxkIGJlIGl0YWxpY2l6ZWQuIEFsc28sIGluIHJlc3BvbnNlIHRvIHBhcnQgdHdvIG9mIHRoZSBpc3N1ZTogdGhpcwppcyBkZWxpYmVyYXRlLgpdPC9pPjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2NjQiPjwvYT42NjQuIDx0dD5kb191bnNoaWZ0PC90dD4gZm9yIDx0dD5jb2RlY3Z0Jmx0O2NoYXIsIGNoYXIsIG1ic3RhdGVfdCZndDs8L3R0PjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjEuNC4yIFtsb2NhbGUuY29kZWN2dC52aXJ0dWFsc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gVGhvbWFzIFBsdW0gPGI+RGF0ZTo8L2I+IDIwMDctMDQtMTY8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzIj5pc3N1ZXM8L2E+IGluIFtsb2NhbGUuY29kZWN2dC52aXJ0dWFsc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgoyMi4yLjEuNC4yIFtsb2NhbGUuY29kZWN2dC52aXJ0dWFsc10sIHBhcmEgNyBzYXlzIChyZWdhcmRpbmcgPHR0PmRvX3Vuc2hpZnQ8L3R0Pik6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgo8aT5FZmZlY3RzOjwvaT4gUGxhY2VzIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgdG8gdGhhdCBzaG91bGQgYmUgYXBwZW5kZWQgdG8KdGVybWluYXRlIGEgc2VxdWVuY2Ugd2hlbiB0aGUgY3VycmVudCA8dHQ+c3RhdGVUPC90dD4gaXMgZ2l2ZW4gYnkKPHR0PjxpPnN0YXRlPC9pPjwvdHQ+LjxzdXA+MjM3KTwvc3VwPiBTdG9yZXMgbm8gbW9yZSB0aGFuIDx0dD4oPGk+dG9fbGltaXQ8L2k+IC0KPGk+dG88L2k+KTwvdHQ+IGRlc3RpbmF0aW9uIGVsZW1lbnRzLCBhbmQgbGVhdmVzIHRoZSA8dHQ+PGk+dG9fbmV4dDwvaT48L3R0Pgpwb2ludGVyIHBvaW50aW5nIG9uZSBiZXlvbmQgdGhlIGxhc3QgZWxlbWVudCBzdWNjZXNzZnVsbHkgc3RvcmVkLgo8ZW0+PHR0PmNvZGVjdnQmbHQ7Y2hhciwgY2hhciwgbWJzdGF0ZV90Jmd0OzwvdHQ+IHN0b3JlcyBubyBjaGFyYWN0ZXJzLjwvZW0+CjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4KVGhlIGZvbGxvd2luZyBvYmplY3Rpb24gaGFzIGJlZW4gcmFpc2VkOgo8L3A+Cgo8YmxvY2txdW90ZT48cD4KU2luY2UgdGhlIEMrKyBTdGFuZGFyZCBwZXJtaXRzIGEgbm9udHJpdmlhbCBjb252ZXJzaW9uIGZvciB0aGUgcmVxdWlyZWQKaW5zdGFudGlhdGlvbnMgb2YgPHR0PmNvZGVjdnQ8L3R0PiwgaXQgaXMgb3Zlcmx5IHJlc3RyaWN0aXZlIHRvIHNheSB0aGF0Cjx0dD5kb191bnNoaWZ0PC90dD4gbXVzdCBzdG9yZSBubyBjaGFyYWN0ZXJzIGFuZCByZXR1cm4gPHR0Pm5vY29udjwvdHQ+Lgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+CltQbHVtIHJlZiBfMjIyMTUyWTUwXQo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIDIyLjIuMS40LjIgW2xvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzXSwgcDc6CjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KPGk+RWZmZWN0czo8L2k+IFBsYWNlcyBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0IDxpPnRvPC9pPiB0aGF0IHNob3VsZCBiZQphcHBlbmRlZCB0byB0ZXJtaW5hdGUgYSBzZXF1ZW5jZSB3aGVuIHRoZSBjdXJyZW50IDx0dD5zdGF0ZVQ8L3R0PiBpcwpnaXZlbiBieSBzdGF0ZS48c3VwPjIzNyk8L3N1cD4gU3RvcmVzIG5vIG1vcmUgdGhhbiAoPGk+dG9fbGltaXQgLXRvPC9pPikKZGVzdGluYXRpb24gZWxlbWVudHMsIGFuZCBsZWF2ZXMgdGhlIDxpPnRvX25leHQ8L2k+IHBvaW50ZXIgcG9pbnRpbmcgb25lCmJleW9uZCB0aGUgbGFzdCBlbGVtZW50IHN1Y2Nlc3NmdWxseSBzdG9yZWQuIDxkZWw+PHR0PmNvZGVjdnQmbHQ7Y2hhciwgY2hhciwKbWJzdGF0ZV90Jmd0OzwvdHQ+IHN0b3JlcyBubyBjaGFyYWN0ZXJzLjwvZGVsPgo8L3A+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2NjUiPjwvYT42NjUuIDx0dD5kb191bnNoaWZ0PC90dD4gcmV0dXJuIHZhbHVlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIyLjIuMS40LjIgW2xvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBUaG9tYXMgUGx1bSA8Yj5EYXRlOjwvYj4gMjAwNy0wNC0xNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbG9jYWxlLmNvZGVjdnQudmlydHVhbHMiPmlzc3VlczwvYT4gaW4gW2xvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CjIyLjIuMS40LjIgW2xvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzXSwgcGFyYSA4IHNheXM6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgo8dHQ+Y29kZWN2dCZsdDtjaGFyLGNoYXIsbWJzdGF0ZV90Jmd0OzwvdHQ+LCByZXR1cm5zIDx0dD5ub2NvbnY8L3R0Pi4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpUaGUgZm9sbG93aW5nIG9iamVjdGlvbiBoYXMgYmVlbiByYWlzZWQ6CjwvcD4KCjxibG9ja3F1b3RlPjxwPgpEZXNwaXRlIHdoYXQgdGhlIEMrKyBTdGFuZGFyZCAKc2F5cywgPHR0PnVuc2hpZnQ8L3R0PiBjYW4ndCBhbHdheXMgcmV0dXJuIDx0dD5ub2NvbnY8L3R0PiBmb3IgdGhlIGRlZmF1bHQgZmFjZXRzLCBzaW5jZSAKdGhleSBjYW4gYmUgbm9udHJpdmlhbC4gQXQgbGVhc3Qgb25lIGltcGxlbWVudGF0aW9uIGRvZXMgd2hhdGV2ZXIgdGhlIApDIGZ1bmN0aW9ucyBkby4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpbUGx1bSByZWYgXzIyMjE1Mlk2Ml0KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAyMi4yLjEuNC4yIFtsb2NhbGUuY29kZWN2dC52aXJ0dWFsc10sIHA4Ogo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+PGk+UmV0dXJuczo8L2k+IEFuIGVudW1lcmF0aW9uIHZhbHVlLCBhcyBzdW1tYXJpemVkIGluIFRhYmxlIDc2OjwvcD4KPHA+Li4uPC9wPgo8cD4KPGRlbD48dHQ+Y29kZWN2dCZsdDtjaGFyLGNoYXIsbWJzdGF0ZV90Jmd0OzwvdHQ+LCByZXR1cm5zIDx0dD5ub2NvbnY8L3R0Pi48L2RlbD4KPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjY2NiI+PC9hPjY2Ni4gPHR0Pm1vbmV5cHVuY3Q6OmRvX2N1cnJfc3ltYm9sKCk8L3R0PjwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjYuMy4yIFtsb2NhbGUubW9uZXlwdW5jdC52aXJ0dWFsc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gVGhvbWFzIFBsdW0gPGI+RGF0ZTo8L2I+IDIwMDctMDQtMTY8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2xvY2FsZS5tb25leXB1bmN0LnZpcnR1YWxzIj5pc3N1ZXM8L2E+IGluIFtsb2NhbGUubW9uZXlwdW5jdC52aXJ0dWFsc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgoyMi4yLjYuMy4yIFtsb2NhbGUubW9uZXlwdW5jdC52aXJ0dWFsc10sIHBhcmEgNCBmb290bm90ZSAyNTcgc2F5cwo8L3A+Cgo8YmxvY2txdW90ZT48cD4KPHN1cD4yNTcpPC9zdXA+IEZvciBpbnRlcm5hdGlvbmFsIApzcGVjaWFsaXphdGlvbnMgKHNlY29uZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgPHR0PnRydWU8L3R0PikgdGhpcyBpcyBhbHdheXMgZm91ciAKY2hhcmFjdGVycyBsb25nLCB1c3VhbGx5IHRocmVlIGxldHRlcnMgYW5kIGEgc3BhY2UuCjwvcD48L2Jsb2NrcXVvdGU+Cgo8cD4KVGhlIGZvbGxvd2luZyBvYmplY3Rpb24gaGFzIGJlZW4gcmFpc2VkOgo8L3A+Cgo8YmxvY2txdW90ZT48cD4KVGhlIGludGVybmF0aW9uYWwgY3VycmVuY3kgCnN5bWJvbCBpcyB3aGF0ZXZlciB0aGUgdW5kZXJseWluZyBsb2NhbGUgc2F5cyBpdCBpcywgbm90IG5lY2Vzc2FyaWx5IApmb3VyIGNoYXJhY3RlcnMgbG9uZy4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpbUGx1bSByZWYgXzIyMjYzMlk0MV0KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSBmb290bm90ZSAyNTMgaW4gMjIuMi42LjMuMiBbbG9jYWxlLm1vbmV5cHVuY3QudmlydHVhbHNdOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CjxzdXA+MjUzKTwvc3VwPiBGb3IgaW50ZXJuYXRpb25hbCBzcGVjaWFsaXphdGlvbnMgKHNlY29uZCB0ZW1wbGF0ZQpwYXJhbWV0ZXIgPHR0PnRydWU8L3R0PikgdGhpcyBpcyA8ZGVsPmFsd2F5czwvZGVsPiA8aW5zPnR5cGljYWxseTwvaW5zPgpmb3VyIGNoYXJhY3RlcnMgbG9uZywgdXN1YWxseSB0aHJlZSBsZXR0ZXJzIGFuZCBhIHNwYWNlLgo8L3A+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2NzIiPjwvYT42NzIuIFN3YXBwYWJsZSByZXF1aXJlbWVudHMgbmVlZCB1cGRhdGluZzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMC4xLjEgW3V0aWxpdHkuYXJnLnJlcXVpcmVtZW50c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSG93YXJkIEhpbm5hbnQgPGI+RGF0ZTo8L2I+IDIwMDctMDUtMDQ8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCN1dGlsaXR5LmFyZy5yZXF1aXJlbWVudHMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFt1dGlsaXR5LmFyZy5yZXF1aXJlbWVudHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjdXRpbGl0eS5hcmcucmVxdWlyZW1lbnRzIj5pc3N1ZXM8L2E+IGluIFt1dGlsaXR5LmFyZy5yZXF1aXJlbWVudHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGN1cnJlbnQgPHR0PlN3YXBwYWJsZTwvdHQ+IGlzOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHRhYmxlIGJvcmRlcj0iMSI+CjxjYXB0aW9uPlRhYmxlIDM3OiA8dHQ+U3dhcHBhYmxlPC90dD4gcmVxdWlyZW1lbnRzIDxiPltzd2FwcGFibGVdPC9iPjwvY2FwdGlvbj4KPHRib2R5Pjx0cj48dGg+ZXhwcmVzc2lvbjwvdGg+PHRoPnJldHVybiB0eXBlPC90aD48dGg+cG9zdC1jb25kaXRpb248L3RoPjwvdHI+Cjx0cj48dGQ+PHR0PnN3YXAocyx0KTwvdHQ+PC90ZD48dGQ+PHR0PnZvaWQ8L3R0PjwvdGQ+PHRkPjx0dD50PC90dD4gaGFzIHRoZSB2YWx1ZSBvcmlnaW5hbGx5IGhlbGQgYnkgPHR0PnU8L3R0PiwgYW5kIDx0dD51PC90dD4gaGFzIHRoZSB2YWx1ZSBvcmlnaW5hbGx5IApoZWxkIGJ5IDx0dD50PC90dD48L3RkPjwvdHI+Cjx0cj48dGQgY29sc3Bhbj0iMyI+CjxwPgpUaGUgU3dhcHBhYmxlIHJlcXVpcmVtZW50IGlzIG1ldCBieSBzYXRpc2Z5aW5nIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPC9wPgo8dWw+CjxsaT4KPHR0PlQ8L3R0PiBpcyBTd2FwcGFibGUgaWYgPHR0PlQ8L3R0PiBzYXRpc2ZpZXMgdGhlIDx0dD5Db3B5Q29uc3RydWN0aWJsZTwvdHQ+IHJlcXVpcmVtZW50cyAoVGFibGUgMzQpIAphbmQgdGhlIDx0dD5Db3B5QXNzaWduYWJsZTwvdHQ+IHJlcXVpcmVtZW50cyAoVGFibGUgMzYpOwo8L2xpPgo8bGk+Cjx0dD5UPC90dD4gaXMgU3dhcHBhYmxlIGlmIGEgbmFtZXNwYWNlIHNjb3BlIGZ1bmN0aW9uIG5hbWVkIDx0dD5zd2FwPC90dD4gZXhpc3RzIGluIHRoZSBzYW1lIApuYW1lc3BhY2UgYXMgdGhlIGRlZmluaXRpb24gb2YgPHR0PlQ8L3R0Piwgc3VjaCB0aGF0IHRoZSBleHByZXNzaW9uIDx0dD5zd2FwKHQsdSk8L3R0PiBpcyB2YWxpZCAKYW5kIGhhcyB0aGUgc2VtYW50aWNzIGRlc2NyaWJlZCBpbiB0aGlzIHRhYmxlLgo8L2xpPgo8L3VsPgo8L3RkPjwvdHI+CjwvdGJvZHk+PC90YWJsZT4KPC9ibG9ja3F1b3RlPgoKPHA+CldpdGggdGhlIHBhc3NhZ2Ugb2YgcnZhbHVlIHJlZmVyZW5jZSBpbnRvIHRoZSBsYW5ndWFnZSwgPHR0PlN3YXBwYWJsZTwvdHQ+IG5lZWRzIHRvIGJlIHVwZGF0ZWQgdG8KcmVxdWlyZSBvbmx5IDx0dD5Nb3ZlQ29uc3RydWN0aWJsZTwvdHQ+IGFuZCA8dHQ+TW92ZUFzc2lnbmFibGU8L3R0Pi4gIFRoaXMgaXMgYSBtaW5pbXVtLgo8L3A+Cgo8cD4KQWRkaXRpb25hbGx5IHdlIG1heSB3YW50IHRvIHN1cHBvcnQgcHJveHkgcmVmZXJlbmNlcyBzdWNoIHRoYXQgdGhlIGZvbGxvd2luZyBjb2RlIGlzIGFjY2VwdGFibGU6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+bmFtZXNwYWNlIE1pbmUgewoKdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CnN0cnVjdCBwcm94eSB7Li4ufTsKCnRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OwpzdHJ1Y3QgcHJveGllZF9pdGVyYXRvcgp7CiAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogICB0eXBlZGVmIHByb3h5Jmx0O1QmZ3Q7IHJlZmVyZW5jZTsKICAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0OwogICAuLi4KfTsKCnN0cnVjdCBBCnsKICAgLy8gaGVhdnkgdHlwZSwgaGFzIGFuIG9wdGltaXplZCBzd2FwLCBtYXliZSBpc24ndCBldmVuIGNvcHlhYmxlIG9yIG1vdmFibGUsIGp1c3Qgc3dhcHBhYmxlCiAgIHZvaWQgc3dhcChBJmFtcDspOwogICAuLi4KfTsKCnZvaWQgc3dhcChBJmFtcDssIEEmYW1wOyk7CnZvaWQgc3dhcChwcm94eSZsdDtBJmd0OywgQSZhbXA7KTsKdm9pZCBzd2FwKEEmYW1wOywgcHJveHkmbHQ7QSZndDspOwp2b2lkIHN3YXAocHJveHkmbHQ7QSZndDssIHByb3h5Jmx0O0EmZ3Q7KTsKCn0gIC8vIE1pbmUKCi4uLgoKTWluZTo6cHJveGllZF9pdGVyYXRvciZsdDtNaW5lOjpBJmd0OyBpKC4uLikKTWluZTo6QSBhOwpzd2FwKCppMSwgYSk7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpJLmUuIGhlcmUgaXMgYSBjYWxsIHRvIDx0dD5zd2FwPC90dD4gd2hpY2ggdGhlIHVzZXIgZW5hYmxlcyBzd2FwcGluZyBiZXR3ZWVuIGEgcHJveHkgdG8gYSBjbGFzcyBhbmQgdGhlIGNsYXNzCml0c2VsZi4gIFdlIGRvIG5vdCBuZWVkIHRvIGFueXRoaW5nIGluIHRlcm1zIG9mIGltcGxlbWVudGF0aW9uIGV4Y2VwdCBub3QgYmxvY2sgdGhlaXIgd2F5IHdpdGggb3Zlcmx5CmNvbnN0cmFpbmVkIGNvbmNlcHRzLiAgVGhhdCBpcywgdGhlIDx0dD5Td2FwcGFibGU8L3R0PiBjb25jZXB0IHNob3VsZCBiZSBleHBhbmRlZCB0byBhbGxvdyBzd2FwcGluZwpiZXR3ZWVuIHR3byBkaWZmZXJlbnQgdHlwZXMgZm9yIHRoZSBjYXNlIHRoYXQgb25lIGlzIGJpbmRpbmcgdG8gYSB1c2VyLWRlZmluZWQgPHR0PnN3YXA8L3R0Pi4KPC9wPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD4KQ2hhbmdlIDIwLjEuMSBbdXRpbGl0eS5hcmcucmVxdWlyZW1lbnRzXToKPC9wPgoKPGJsb2NrcXVvdGU+Cgo8cD4KLTEtIFRoZSB0ZW1wbGF0ZSBkZWZpbml0aW9ucyBpbiB0aGUgQysrIFN0YW5kYXJkIExpYnJhcnkgcmVmZXIgdG8gdmFyaW91cwpuYW1lZCByZXF1aXJlbWVudHMgd2hvc2UgZGV0YWlscyBhcmUgc2V0IG91dCBpbiB0YWJsZXMgMzEtMzguIEluIHRoZXNlCnRhYmxlcywgPHR0PlQ8L3R0PiBpcyBhIHR5cGUgdG8gYmUgc3VwcGxpZWQgYnkgYSBDKysgcHJvZ3JhbQppbnN0YW50aWF0aW5nIGEgdGVtcGxhdGU7IDx0dD5hPC90dD4sIDx0dD5iPC90dD4sIGFuZCA8dHQ+YzwvdHQ+IGFyZQp2YWx1ZXMgb2YgdHlwZSA8dHQ+Y29uc3QgVDwvdHQ+OyA8dHQ+czwvdHQ+IGFuZCA8dHQ+dDwvdHQ+IGFyZSBtb2RpZmlhYmxlCmx2YWx1ZXMgb2YgdHlwZSA8dHQ+VDwvdHQ+OyA8dHQ+dTwvdHQ+IGlzIGEgdmFsdWUgb2YgdHlwZSAocG9zc2libHkKPHR0PmNvbnN0PC90dD4pIDx0dD5UPC90dD47IGFuZCA8dHQ+cnY8L3R0PiBpcyBhIG5vbi08dHQ+Y29uc3Q8L3R0PgpydmFsdWUgb2YgdHlwZSA8dHQ+VDwvdHQ+Lgo8L3A+Cgo8dGFibGUgYm9yZGVyPSIxIj4KPGNhcHRpb24+VGFibGUgMzc6IDx0dD5Td2FwcGFibGU8L3R0PiByZXF1aXJlbWVudHMgPGI+W3N3YXBwYWJsZV08L2I+PC9jYXB0aW9uPgo8dGJvZHk+PHRyPjx0aD5leHByZXNzaW9uPC90aD48dGg+cmV0dXJuIHR5cGU8L3RoPjx0aD5wb3N0LWNvbmRpdGlvbjwvdGg+PC90cj4KPHRyPjx0ZD48dHQ+c3dhcChzLHQpPC90dD48L3RkPjx0ZD48dHQ+dm9pZDwvdHQ+PC90ZD4KPHRkPjx0dD50PC90dD4gaGFzIHRoZSB2YWx1ZSBvcmlnaW5hbGx5CmhlbGQgYnkgPHR0PnU8L3R0PiwgYW5kCjx0dD51PC90dD4gaGFzIHRoZSB2YWx1ZSBvcmlnaW5hbGx5IGhlbGQKYnkgPHR0PnQ8L3R0PjwvdGQ+PC90cj4KPHRyPjx0ZCBjb2xzcGFuPSIzIj4KPHA+ClRoZSA8dHQ+U3dhcHBhYmxlPC90dD4gcmVxdWlyZW1lbnQgaXMgbWV0IGJ5IHNhdGlzZnlpbmcgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo8L3A+Cjx1bD4KPGxpPgo8dHQ+VDwvdHQ+IGlzIDx0dD5Td2FwcGFibGU8L3R0PiBpZiA8dHQ+VDwvdHQ+IHNhdGlzZmllcyB0aGUKPGRlbD48dHQ+Q29weUNvbnN0cnVjdGlibGU8L3R0PjwvZGVsPiA8aW5zPk1vdmVDb25zdHJ1Y3RpYmxlPC9pbnM+CnJlcXVpcmVtZW50cyAoVGFibGUgPGRlbD4zNDwvZGVsPiA8aW5zPjMzPC9pbnM+KSBhbmQgdGhlIDxkZWw+PHR0PkNvcHlBc3NpZ25hYmxlPC90dD48L2RlbD4gPGlucz5Nb3ZlQXNzaWduYWJsZTwvaW5zPgpyZXF1aXJlbWVudHMgKFRhYmxlIDxkZWw+MzY8L2RlbD4gPGlucz4zNTwvaW5zPik7CjwvbGk+CjxsaT4KPHR0PlQ8L3R0PiBpcyA8dHQ+U3dhcHBhYmxlPC90dD4gaWYgYSBuYW1lc3BhY2Ugc2NvcGUgZnVuY3Rpb24gbmFtZWQKPHR0PnN3YXA8L3R0PiBleGlzdHMgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIGFzIHRoZSBkZWZpbml0aW9uIG9mCjx0dD5UPC90dD4sIHN1Y2ggdGhhdCB0aGUgZXhwcmVzc2lvbgo8dHQ+c3dhcCh0LHUpPC90dD4gaXMgdmFsaWQgYW5kIGhhcyB0aGUKc2VtYW50aWNzIGRlc2NyaWJlZCBpbiB0aGlzIHRhYmxlLgo8L2xpPgo8L3VsPgo8L3RkPjwvdHI+CjwvdGJvZHk+PC90YWJsZT4KPC9ibG9ja3F1b3RlPgoKCgo8cD48aT5bCktvbmEgKDIwMDcpOiBXZSBsaWtlIHRoZSBjaGFuZ2UgdG8gdGhlIDx0dD5Td2FwcGFibGU8L3R0PiByZXF1aXJlbWVudHMgdG8gdXNlCm1vdmUgc2VtYW50aWNzLiBUaGUgaXNzdWUgcmVsYXRpbmcgdG8gdGhlIHN1cHBvcnQgb2YgcHJveGllcyBpcwpzZXBhcmFibGUgZnJvbSB0aGUgb25lIHJlbGF0aW5nIHRvIG1vdmUgc2VtYW50aWNzLCBhbmQgaXQncyBiaWdnZXIgdGhhbgpqdXN0IHN3YXAuIFdlJ2QgbGlrZSB0byBhZGRyZXNzIG9ubHkgdGhlIG1vdmUgc2VtYW50aWNzIGNoYW5nZXMgdW5kZXIKdGhpcyBpc3N1ZSwgYW5kIG9wZW4gYSBzZXBhcmF0ZWQgaXNzdWUgKDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzc0MiI+NzQyPC9hPikgdG8gaGFuZGxlIHByb3hpZXMuIEFsc28sIHRoZXJlCm1heSBiZSBhIHRoaXJkIGlzc3VlLCBpbiB0aGF0IHRoZSBjdXJyZW50IGRlZmluaXRpb24gb2YgPHR0PlN3YXBwYWJsZTwvdHQ+IGRvZXMKbm90IHBlcm1pdCBydmFsdWVzIHRvIGJlIG9wZXJhbmRzIHRvIGEgc3dhcCBvcGVyYXRpb24sIGFuZCBIb3dhcmQncwpwcm9wb3NlZCByZXNvbHV0aW9uIHdvdWxkIGFsbG93IHRoZSByaWdodC1tb3N0IG9wZXJhbmQgdG8gYmUgYW4gcnZhbHVlLApidXQgaXQgd291bGQgbm90IGFsbG93IHRoZSBsZWZ0LW1vc3Qgb3BlcmFuZCB0byBiZSBhbiBydmFsdWUgKHNvbWUgc3dhcApmdW5jdGlvbnMgaW4gdGhlIGxpYnJhcnkgaGF2ZSBiZWVuIG92ZXJsb2FkZWQgdG8gcGVybWl0IGxlZnQgb3BlcmFuZHMgdG8Kc3dhcCB0byBiZSBydmFsdWVzKS4KXTwvaT48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjczIj48L2E+NjczLiA8dHQ+dW5pcXVlX3B0cjwvdHQ+IHVwZGF0ZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMC43LjExIFt1bmlxdWUucHRyXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBIb3dhcmQgSGlubmFudCA8Yj5EYXRlOjwvYj4gMjAwNy0wNS0wNDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjdW5pcXVlLnB0ciI+aXNzdWVzPC9hPiBpbiBbdW5pcXVlLnB0cl0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpTaW5jZSB0aGUgcHVibGljYXRpb24gb2YKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTg1Ni5odG1sIj5OMTg1NjwvYT4KdGhlcmUgaGF2ZSBiZWVuIGEgZmV3IHNtYWxsIGJ1dCBzaWduaWZpY2FudCBhZHZhbmNlcyB3aGljaCBzaG91bGQgYmUgaW5jbHVkZWQgaW50bwo8dHQ+dW5pcXVlX3B0cjwvdHQ+LiAgVGhlcmUgZXhpc3RzIGEKPGEgaHJlZj0iaHR0cDovL2hvbWUudHdjbnkucnIuY29tL2hpbm5hbnQvY3BwX2V4dGVuc2lvbnMvdW5pcXVlX3B0ci5odG1sIj5leGFtcGxlIGltcGxtZW5hdGlvbjwvYT4KZm9yIGFsbCBvZiB0aGVzZSBjaGFuZ2VzLgo8L3A+Cgo8dWw+Cgo8bGk+CjxwPgpFdmVuIHRob3VnaCA8dHQ+dW5pcXVlX3B0ciZsdDt2b2lkJmd0OzwvdHQ+IGlzIG5vdCBhIHZhbGlkIHVzZSBjYXNlICh1bmxpa2UgZm9yIDx0dD5zaGFyZWRfcHRyJmx0O3ZvaWQmZ3Q7PC90dD4pLAp1bmV4cGVjdGVkIGNhc2VzIHRvIGNyb3AgdXAgd2hpY2ggcmVxdWlyZSB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgaW50ZXJmYWNlIG9mIDx0dD51bmlxdWVfcHRyJmx0O3ZvaWQmZ3Q7PC90dD4KZXZlbiBpZiBpdCBpcyBuZXZlciB1c2VkLiAgRm9yIGV4YW1wbGUgc2VlCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM1NDEiPkxXRyA1NDE8L2E+IGZvciBob3cgdGhpcyBhY2NpZGVudGx5CmhhcHBlbmVkIHRvIDx0dD5hdXRvX3B0cjwvdHQ+LiAgSSBiZWxpZXZlIHRoZSBtb3N0IHJvYnVzdCB3YXkgdG8gcHJvdGVjdCA8dHQ+dW5pcXVlX3B0cjwvdHQ+IGFnYWluc3QgdGhpcwp0eXBlIG9mIGZhaWx1cmUgaXMgdG8gYXVnbWVudCB0aGUgcmV0dXJuIHR5cGUgb2YgPHR0PnVuaXF1ZV9wdHImbHQ7VCZndDs6b3BlcmF0b3IqKCk8L3R0PiB3aXRoCjx0dD5hZGRfbHZhbHVlX3JlZmVyZW5jZSZsdDtUJmd0Ozo6dHlwZTwvdHQ+LiAgVGhpcyBtZWFucyB0aGF0IGdpdmVuIGFuIGluc3RhbnRpYXRlZCA8dHQ+dW5pcXVlX3B0ciZsdDt2b2lkJmd0OzwvdHQ+CnRoZSBhY3Qgb2YgZGVyZWZlcmVuY2luZyBpdCB3aWxsIHNpbXBseSByZXR1cm4gPHR0PnZvaWQ8L3R0PiBpbnN0ZWFkIG9mIGNhdXNpbmcgYSBjb21waWxlIHRpbWUgZmFpbHVyZS4KVGhpcyBpcyBzaW1wbGVyIHRoYW4gY3JlYXRpbmcgYSA8dHQ+dW5pcXVlX3B0ciZsdDt2b2lkJmd0OzwvdHQ+IHNwZWNpYWxpemF0aW9uIHdoaWNoIGlzbid0IHJvYnVzdCBpbiB0aGUKZmFjZSBvZiA8dHQ+PGk+Y3YtPC9pPjwvdHQ+cXVhbGlmaWVkIDx0dD52b2lkPC90dD4gdHlwZXMuCjwvcD4KCjxwPgpUaGlzIHJlc29sdXRpb24gYWxzbyBzdXBwb3J0cyBpbnN0YW50aWF0aW9ucyBzdWNoIGFzIDx0dD51bmlxdWVfcHRyJmx0O3ZvaWQsIGZyZWVfZGVsZXRlciZndDs8L3R0Pgp3aGljaCBjb3VsZCBiZSB2ZXJ5IHVzZWZ1bCB0byB0aGUgY2xpZW50Lgo8L3A+Cgo8L2xpPgoKPGxpPgo8cD4KRWZmb3J0cyBoYXZlIGJlZW4gbWFkZSB0byBiZXR0ZXIgc3VwcG9ydCBjb250YWluZXJzIGFuZCBzbWFydCBwb2ludGVycyBpbiBzaGFyZWQKbWVtb3J5IGNvbnRleHRzLiAgT25lIG9mIHRoZSBrZXkgaHVyZGxlcyBpbiBzdWNoIHN1cHBvcnQgaXMgbm90IGFzc3VtaW5nIHRoYXQgYQpwb2ludGVyIHR5cGUgaXMgYWN0dWFsbHkgYSA8dHQ+VCo8L3R0Pi4gIFRoaXMgY2FuIGVhc2lseSBiZSBhY2NvbXBsaXNoZWQKZm9yIDx0dD51bmlxdWVfcHRyPC90dD4gYnkgaGF2aW5nIHRoZSBkZWxldGVyIGRlZmluZSB0aGUgcG9pbnRlciB0eXBlOgo8dHQ+RDo6cG9pbnRlcjwvdHQ+LiAgRnVydGhlcm1vcmUgdGhpcyB0eXBlIGNhbiBlYXNpbHkgYmUgZGVmYXVsdGVkIHRvCjx0dD5UKjwvdHQ+IHNob3VsZCB0aGUgZGVsZXRlciA8dHQ+RDwvdHQ+IGNob29zZSBub3QgdG8gZGVmaW5lIGEgcG9pbnRlcgp0eXBlIChleGFtcGxlIGltcGxlbWVudGF0aW9uCjxhIGhyZWY9Imh0dHA6Ly9ob21lLnR3Y255LnJyLmNvbS9oaW5uYW50L2NwcF9leHRlbnNpb25zL3VuaXF1ZV9wdHIuaHRtbCI+aGVyZTwvYT4pLgpUaGlzIGNoYW5nZSBoYXMgbm8gcnVuIHRpbWUgb3ZlcmhlYWQuICBJdCBoYXMgbm8gaW50ZXJmYWNlIG92ZXJoZWFkIG9uCmF1dGhvcnMgb2YgY3VzdG9tIGRlbHRlciB0eXBlcy4gIEl0IHNpbXBseSBhbGxvd3MgKGJ1dCBub3QgcmVxdWlyZXMpCmF1dGhvcnMgb2YgY3VzdG9tIGRlbGV0ZXIgdHlwZXMgdG8gZGVmaW5lIGEgc21hcnQgcG9pbnRlciBmb3IgdGhlCnN0b3JhZ2UgdHlwZSBvZiA8dHQ+dW5pcXVlX3B0cjwvdHQ+IGlmIHRoZXkgZmluZCBzdWNoIGZ1bmN0aW9uYWxpdHkKdXNlZnVsLiAgPHR0PnN0ZDo6ZGVmYXVsdF9kZWxldGU8L3R0PiBpcyBhbiBleGFtcGxlIG9mIGEgZGVsZXRlciB3aGljaApkZWZhdWx0cyA8dHQ+cG9pbnRlcjwvdHQ+IHRvIDx0dD5UKjwvdHQ+IGJ5IHNpbXBseSBpZ25vcmluZyB0aGlzIGlzc3VlCmFuZCBub3QgaW5jbHVkaW5nIGEgPHR0PnBvaW50ZXIgdHlwZWRlZjwvdHQ+Lgo8L3A+CjwvbGk+Cgo8bGk+CjxwPgpXaGVuIHRoZSBkZWxldGVyIHR5cGUgaXMgYSBmdW5jdGlvbiBwb2ludGVyIHRoZW4gaXQgaXMgdW5zYWZlIHRvIGNvbnN0cnVjdAphIDx0dD51bmlxdWVfcHRyPC90dD4gd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSBmdW5jdGlvbiBwb2ludGVyIGluIHRoZSBjb25zdHJ1Y3Rvci4KVGhpcyBjYXNlIGlzIGVhc3kgdG8gY2hlY2sgZm9yIHdpdGggYSA8dHQ+c3RhdGljX2Fzc2VydDwvdHQ+IGFzc3VyaW5nIHRoYXQgdGhlCmRlbGV0ZXIgaXMgbm90IGEgcG9pbnRlciB0eXBlIGluIHRob3NlIGNvbnN0cnVjdG9ycyB3aGljaCBkbyBub3QgYWNjZXB0IGRlbGV0ZXJzLgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnVuaXF1ZV9wdHImbHQ7QSwgdm9pZCgqKSh2b2lkKikmZ3Q7IHAobmV3IEEpOyAgLy8gZXJyb3IsIG5vIGZ1bmN0aW9uIGdpdmVuIHRvIGRlbGV0ZSB0aGUgcG9pbnRlciEKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPC9saT4KCjwvdWw+Cgo8cD48aT5bCktvbmEgKDIwMDcpOiBXZSBkb24ndCBsaWtlIHRoZSBzb2x1dGlvbiBnaXZlbiB0byB0aGUgZmlyc3QgYnVsbGV0IGluCmxpZ2h0IG9mIGNvbmNlcHRzLiBUaGUgc2Vjb25kIGJ1bGxldCBzb2x2ZXMgdGhlIHByb2JsZW0gb2Ygc3VwcG9ydGluZwpmYW5jeSBwb2ludGVycyBmb3Igb25lIGxpYnJhcnkgY29tcG9uZW50IG9ubHkuIFRoZSBmdWxsIExXRyBuZWVkcyB0bwpkZWNpZGUgd2hldGhlciB0byBzb2x2ZSB0aGUgcHJvYmxlbSBvZiBzdXBwb3J0aW5nIGZhbmN5IHBvaW50ZXJzCnBpZWNlbWVhbCwgb3Igd2hldGhlciBhIHBhcGVyIGFkZHJlc3NpbmcgdGhlIHdob2xlIGxpYnJhcnkgaXMgbmVlZGVkLiBXZQp0aGluayB0aGF0IHRoZSB0aGlyZCBidWxsZXQgaXMgY29ycmVjdC4KXTwvaT48L3A+CgoKPHA+PGk+WwpQb3N0IEtvbmE6IEhvd2FyZCBhZGRzIGV4YW1wbGUgdXNlciBjb2RlIHJlbGF0ZWQgdG8gdGhlIGZpcnN0IGJ1bGxldDoKXTwvaT48L3A+CgoKPGJsb2NrcXVvdGU+CjxwcmU+dm9pZCBsZWdhY3lfY29kZSh2b2lkKiwgc3RkOjpzaXplX3QpOwoKdm9pZCBmb28oc3RkOjpzaXplX3QgTikKewogICAgc3RkOjp1bmlxdWVfcHRyJmx0O3ZvaWQsIHZvaWQoKikodm9pZCopJmd0OyBwdHIoc3RkOjptYWxsb2MoTiksIHN0ZDo6ZnJlZSk7CiAgICBsZWdhY3lfY29kZShwdHIuZ2V0KCksIE4pOwp9ICAgLy8gdW5pcXVlX3B0ciB1c2VkIGZvciBleGNlcHRpb24gc2FmZXR5IHB1cnBvc2VzCjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KSS5lLiA8dHQ+dW5pcXVlX3B0ciZsdDt2b2lkJmd0OzwvdHQ+IDxpPmlzPC9pPiBhIHVzZWZ1bCB0b29sIHRoYXQgd2UgZG9uJ3Qgd2FudAp0byBkaXNhYmxlIHdpdGggY29uY2VwdHMuICBUaGUgb25seSBwYXJ0IG9mIDx0dD51bmlxdWVfcHRyJmx0O3ZvaWQmZ3Q7PC90dD4gd2UKd2FudCB0byBkaXNhYmxlICh3aXRoIGNvbmNlcHRzIG9yIGJ5IG90aGVyIG1lYW5zKSBhcmUgdGhlIHR3byBtZW1iZXIgZnVuY3Rpb25zOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPlQmYW1wOyBvcGVyYXRvciooKSBjb25zdDsKVCogb3BlcmF0b3ItJmd0OygpIGNvbnN0Owo8L3ByZT48L2Jsb2NrcXVvdGU+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPjxpPlsKSSBhbSBncmF0ZWZ1bCBmb3IgdGhlIGdlbmVyb3VzIGFpZCBvZiBQZXRlciBEaW1vdiBhbmQgSW9uIEdhenRh8WFnYSBpbiBoZWxwaW5nIGZvcm11bGF0ZSBhbmQgcmV2aWV3CnRoZSBwcm9wb3NlZCByZXNvbHV0aW9ucyBiZWxvdy4KXTwvaT48L3A+CgoKPHVsPgo8bGk+Cgo8cD4KQ2hhbmdlIDIwLjcuMTEuMiBbdW5pcXVlLnB0ci5zaW5nbGVdOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBEID0gZGVmYXVsdF9kZWxldGUmbHQ7VCZndDsmZ3Q7IGNsYXNzIHVuaXF1ZV9wdHIgewogICAuLi4KICAgPGRlbD5UJmFtcDs8L2RlbD4gPGlucz50eXBlbmFtZSBhZGRfbHZhbHVlX3JlZmVyZW5jZSZsdDtUJmd0Ozo6dHlwZTwvaW5zPiBvcGVyYXRvciooKSBjb25zdDsKICAgLi4uCn07CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpDaGFuZ2UgMjAuNy4xMS4yLjQgW3VuaXF1ZS5wdHIuc2luZ2xlLm9ic2VydmVyc106CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+PGRlbD5UJmFtcDs8L2RlbD4gPGlucz50eXBlbmFtZSBhZGRfbHZhbHVlX3JlZmVyZW5jZSZsdDtUJmd0Ozo6dHlwZTwvaW5zPiBvcGVyYXRvciooKSBjb25zdDsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPC9saT4KCjxsaT4KPHA+CkNoYW5nZSAyMC43LjExLjIgW3VuaXF1ZS5wdHIuc2luZ2xlXToKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgRCA9IGRlZmF1bHRfZGVsZXRlJmx0O1QmZ3Q7Jmd0OyBjbGFzcyB1bmlxdWVfcHRyIHsKcHVibGljOgogIDxpbnM+dHlwZWRlZiA8aT5pbXBsZW1lbnRhdGlvbiAoc2VlIGRlc2NyaXB0aW9uIGJlbG93KTwvaT4gcG9pbnRlcjs8L2lucz4KICAgLi4uCiAgIGV4cGxpY2l0IHVuaXF1ZV9wdHIoPGRlbD5UKjwvZGVsPiA8aW5zPnBvaW50ZXI8L2lucz4gcCk7CiAgIC4uLgogICB1bmlxdWVfcHRyKDxkZWw+VCo8L2RlbD4gPGlucz5wb2ludGVyPC9pbnM+IHAsIDxpPmltcGxlbWVudGF0aW9uIGRlZmluZWQgKHNlZSBkZXNjcmlwdGlvbiBiZWxvdyk8L2k+IGQpOwogICB1bmlxdWVfcHRyKDxkZWw+VCo8L2RlbD4gPGlucz5wb2ludGVyPC9pbnM+IHAsIDxpPmltcGxlbWVudGF0aW9uIGRlZmluZWQgKHNlZSBkZXNjcmlwdGlvbiBiZWxvdyk8L2k+IGQpOwogICAuLi4KICAgPGRlbD5UKjwvZGVsPiA8aW5zPnBvaW50ZXI8L2lucz4gb3BlcmF0b3ItJmd0OygpIGNvbnN0OwogICA8ZGVsPlQqPC9kZWw+IDxpbnM+cG9pbnRlcjwvaW5zPiBnZXQoKSBjb25zdDsKICAgLi4uCiAgIDxkZWw+VCo8L2RlbD4gPGlucz5wb2ludGVyPC9pbnM+IHJlbGVhc2UoKTsKICAgdm9pZCByZXNldCg8ZGVsPlQqPC9kZWw+IDxpbnM+cG9pbnRlcjwvaW5zPiBwID0gPGRlbD4wPC9kZWw+IDxpbnM+cG9pbnRlcigpPC9pbnM+KTsKfTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CjxpbnM+Ci0zLSBJZiB0aGUgdHlwZSA8dHQ+cmVtb3ZlX3JlZmVyZW5jZSZsdDtEJmd0Ozo6dHlwZTo6cG9pbnRlcjwvdHQ+CmV4aXN0cywgdGhlbiA8dHQ+dW5pcXVlX3B0ciZsdDtULCBEJmd0Ozo6cG9pbnRlcjwvdHQ+IGlzIGEgdHlwZWRlZiB0bwo8dHQ+cmVtb3ZlX3JlZmVyZW5jZSZsdDtEJmd0Ozo6dHlwZTo6cG9pbnRlcjwvdHQ+LiAgT3RoZXJ3aXNlCjx0dD51bmlxdWVfcHRyJmx0O1QsIEQmZ3Q7Ojpwb2ludGVyPC90dD4gaXMgYSB0eXBlZGVmIHRvIDx0dD5UKjwvdHQ+LgpUaGUgdHlwZSA8dHQ+dW5pcXVlX3B0ciZsdDtULCBEJmd0Ozo6cG9pbnRlcjwvdHQ+IHNoYWxsIGJlIDx0dD5Db3B5Q29uc3RydWN0aWJsZTwvdHQ+CmFuZCA8dHQ+Q29weUFzc2lnbmFibGU8L3R0Pi4KPC9pbnM+CjwvcD4KCjxwPgpDaGFuZ2UgMjAuNy4xMS4yLjEgW3VuaXF1ZS5wdHIuc2luZ2xlLmN0b3JdOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnVuaXF1ZV9wdHIoPGRlbD5UKjwvZGVsPiA8aW5zPnBvaW50ZXI8L2lucz4gcCk7Ci4uLgp1bmlxdWVfcHRyKDxkZWw+VCo8L2RlbD4gPGlucz5wb2ludGVyPC9pbnM+IHAsIDxpPmltcGxlbWVudGF0aW9uIGRlZmluZWQ8L2k+IGQpOyAKdW5pcXVlX3B0cig8ZGVsPlQqPC9kZWw+IDxpbnM+cG9pbnRlcjwvaW5zPiBwLCA8aT5pbXBsZW1lbnRhdGlvbiBkZWZpbmVkPC9pPiBkKTsgCi4uLgp1bmlxdWVfcHRyKDxkZWw+VCo8L2RlbD4gPGlucz5wb2ludGVyPC9pbnM+IHAsIGNvbnN0IEEmYW1wOyBkKTsKdW5pcXVlX3B0cig8ZGVsPlQqPC9kZWw+IDxpbnM+cG9pbnRlcjwvaW5zPiBwLCBBJmFtcDsmYW1wOyBkKTsKLi4uCnVuaXF1ZV9wdHIoPGRlbD5UKjwvZGVsPiA8aW5zPnBvaW50ZXI8L2lucz4gcCwgQSZhbXA7IGQpOyAKdW5pcXVlX3B0cig8ZGVsPlQqPC9kZWw+IDxpbnM+cG9pbnRlcjwvaW5zPiBwLCBBJmFtcDsmYW1wOyBkKTsKLi4uCnVuaXF1ZV9wdHIoPGRlbD5UKjwvZGVsPiA8aW5zPnBvaW50ZXI8L2lucz4gcCwgY29uc3QgQSZhbXA7IGQpOyAKdW5pcXVlX3B0cig8ZGVsPlQqPC9kZWw+IDxpbnM+cG9pbnRlcjwvaW5zPiBwLCBjb25zdCBBJmFtcDsmYW1wOyBkKTsKLi4uCjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgotMjMtIDxpPlJlcXVpcmVzOjwvaT4gSWYgPHR0PkQ8L3R0PiBpcyBub3QgYSByZWZlcmVuY2UgdHlwZSwKY29uc3RydWN0aW9uIG9mIHRoZSBkZWxldGVyIDx0dD5EPC90dD4gZnJvbSBhbiBydmFsdWUgb2YgdHlwZSA8dHQ+RTwvdHQ+CjxkZWw+bXVzdDwvZGVsPiA8aW5zPnNoYWxsPC9pbnM+IGJlIHdlbGwgZm9ybWVkIGFuZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLiBJZiA8dHQ+RDwvdHQ+IGlzIGEKcmVmZXJlbmNlIHR5cGUsIHRoZW4gPHR0PkU8L3R0PiA8ZGVsPm11c3Q8L2RlbD4gPGlucz5zaGFsbDwvaW5zPiBiZSB0aGUgc2FtZSB0eXBlIGFzIDx0dD5EPC90dD4KKGRpYWdub3N0aWMgcmVxdWlyZWQpLiA8ZGVsPjx0dD5VKjwvdHQ+PC9kZWw+IDxpbnM+PHR0PnVuaXF1ZV9wdHImbHQ7VSxFJmd0Ozo6cG9pbnRlcjwvdHQ+PC9pbnM+CjxkZWw+bXVzdDwvZGVsPiA8aW5zPnNoYWxsPC9pbnM+IGJlIGltcGxpY2l0bHkgY29udmVydGlibGUgdG8gPGRlbD48dHQ+VCo8L3R0PjwvZGVsPgo8aW5zPnBvaW50ZXI8L2lucz4uCjwvcD4KCjxwPgotMjUtIDxpPlBvc3Rjb25kaXRpb25zOjwvaT4gPHR0PmdldCgpID09IHZhbHVlIHUuZ2V0KCk8L3R0PiBoYWQgYmVmb3JlCnRoZSBjb25zdHJ1Y3Rpb24sIG1vZHVsbyBhbnkgcmVxdWlyZWQgb2Zmc2V0IGFkanVzdG1lbnRzIHJlc3VsdGluZyBmcm9tCnRoZSBjYXN0IGZyb20gPGRlbD48dHQ+VSo8L3R0PjwvZGVsPgo8aW5zPjx0dD51bmlxdWVfcHRyJmx0O1UsRSZndDs6OnBvaW50ZXI8L3R0PjwvaW5zPiB0byA8ZGVsPjx0dD5UKjwvdHQ+PC9kZWw+CjxpbnM+cG9pbnRlcjwvaW5zPi4gPHR0PmdldF9kZWxldGVyKCk8L3R0PiByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZQppbnRlcm5hbGx5IHN0b3JlZCBkZWxldGVyIHdoaWNoIHdhcyBjb25zdHJ1Y3RlZCBmcm9tCjx0dD51LmdldF9kZWxldGVyKCk8L3R0Pi4KPC9wPgoKPHA+CkNoYW5nZSAyMC43LjExLjIuMyBbdW5pcXVlLnB0ci5zaW5nbGUuYXNnbl06CjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTgtIDxpPlJlcXVpcmVzOjwvaT4gQXNzaWdubWVudCBvZiB0aGUgZGVsZXRlciA8dHQ+RDwvdHQ+IGZyb20gYW4gcnZhbHVlCjx0dD5EPC90dD4gPGRlbD5tdXN0PC9kZWw+IDxpbnM+c2hhbGw8L2lucz4gbm90IHRocm93IGFuIGV4Y2VwdGlvbi4gPGRlbD48dHQ+VSo8L3R0PjwvZGVsPgo8aW5zPjx0dD51bmlxdWVfcHRyJmx0O1UsRSZndDs6OnBvaW50ZXI8L3R0PjwvaW5zPiA8ZGVsPm11c3Q8L2RlbD4gPGlucz5zaGFsbDwvaW5zPiBiZSBpbXBsaWNpdGx5CmNvbnZlcnRpYmxlIHRvIDxkZWw+PHR0PlQqPC90dD48L2RlbD4gPGlucz5wb2ludGVyPC9pbnM+Lgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPgpDaGFuZ2UgMjAuNy4xMS4yLjQgW3VuaXF1ZS5wdHIuc2luZ2xlLm9ic2VydmVyc106CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPjxkZWw+VCo8L2RlbD4gPGlucz5wb2ludGVyPC9pbnM+IG9wZXJhdG9yLSZndDsoKSBjb25zdDs8L3ByZT4KLi4uCjxwcmU+PGRlbD5UKjwvZGVsPiA8aW5zPnBvaW50ZXI8L2lucz4gZ2V0KCkgY29uc3Q7PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPgpDaGFuZ2UgMjAuNy4xMS4yLjUgW3VuaXF1ZS5wdHIuc2luZ2xlLm1vZGlmaWVyc106CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPjxkZWw+VCo8L2RlbD4gPGlucz5wb2ludGVyPC9pbnM+IHJlbGVhc2UoKTs8L3ByZT4KLi4uCjxwcmU+dm9pZCByZXNldCg8ZGVsPlQqPC9kZWw+IDxpbnM+cG9pbnRlcjwvaW5zPiBwID0gPGRlbD4wPC9kZWw+IDxpbnM+cG9pbnRlcigpPC9pbnM+KTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAyMC43LjExLjMgW3VuaXF1ZS5wdHIucnVudGltZV06CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIEQmZ3Q7IGNsYXNzIHVuaXF1ZV9wdHImbHQ7VFtdLCBEJmd0OyB7CnB1YmxpYzoKICA8aW5zPnR5cGVkZWYgPGk+aW1wbGVtZW50YXRpb248L2k+IHBvaW50ZXI7PC9pbnM+CiAgIC4uLgogICBleHBsaWNpdCB1bmlxdWVfcHRyKDxkZWw+VCo8L2RlbD4gPGlucz5wb2ludGVyPC9pbnM+IHApOwogICAuLi4KICAgdW5pcXVlX3B0cig8ZGVsPlQqPC9kZWw+IDxpbnM+cG9pbnRlcjwvaW5zPiBwLCA8aT5pbXBsZW1lbnRhdGlvbiBkZWZpbmVkPC9pPiBkKTsKICAgdW5pcXVlX3B0cig8ZGVsPlQqPC9kZWw+IDxpbnM+cG9pbnRlcjwvaW5zPiBwLCA8aT5pbXBsZW1lbnRhdGlvbiBkZWZpbmVkPC9pPiBkKTsKICAgLi4uCiAgIDxkZWw+VCo8L2RlbD4gPGlucz5wb2ludGVyPC9pbnM+IGdldCgpIGNvbnN0OwogICAuLi4KICAgPGRlbD5UKjwvZGVsPiA8aW5zPnBvaW50ZXI8L2lucz4gcmVsZWFzZSgpOwogICB2b2lkIHJlc2V0KDxkZWw+VCo8L2RlbD4gPGlucz5wb2ludGVyPC9pbnM+IHAgPSA8ZGVsPjA8L2RlbD4gPGlucz5wb2ludGVyKCk8L2lucz4pOwp9Owo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDIwLjcuMTEuMy4xIFt1bmlxdWUucHRyLnJ1bnRpbWUuY3Rvcl06CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPnVuaXF1ZV9wdHIoPGRlbD5UKjwvZGVsPiA8aW5zPnBvaW50ZXI8L2lucz4gcCk7CnVuaXF1ZV9wdHIoPGRlbD5UKjwvZGVsPiA8aW5zPnBvaW50ZXI8L2lucz4gcCwgPGk+aW1wbGVtZW50YXRpb24gZGVmaW5lZDwvaT4gZCk7CnVuaXF1ZV9wdHIoPGRlbD5UKjwvZGVsPiA8aW5zPnBvaW50ZXI8L2lucz4gcCwgPGk+aW1wbGVtZW50YXRpb24gZGVmaW5lZDwvaT4gZCk7CjwvcHJlPgoKPHA+ClRoZXNlIGNvbnN0cnVjdG9ycyBiZWhhdmUgdGhlIHNhbWUgYXMgaW4gdGhlIHByaW1hcnkgdGVtcGxhdGUgZXhjZXB0CnRoYXQgdGhleSBkbyBub3QgYWNjZXB0IHBvaW50ZXIgdHlwZXMgd2hpY2ggYXJlIGNvbnZlcnRpYmxlIHRvCjxkZWw+PHR0PlQqPC90dD48L2RlbD4gPGlucz48dHQ+cG9pbnRlcjwvdHQ+PC9pbnM+LiBbPGk+Tm90ZTo8L2k+IE9uZQppbXBsZW1lbnRhdGlvbiB0ZWNobmlxdWUgaXMgdG8gY3JlYXRlIHByaXZhdGUgdGVtcGxhdGVkIG92ZXJsb2FkcyBvZgp0aGVzZSBtZW1iZXJzLiA8aT4tLSBlbmQgbm90ZTwvaT5dCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAyMC43LjExLjMuMyBbdW5pcXVlLnB0ci5ydW50aW1lLm1vZGlmaWVyc106CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPnZvaWQgcmVzZXQoPGRlbD5UKjwvZGVsPiA8aW5zPnBvaW50ZXI8L2lucz4gcCA9IDxkZWw+MDwvZGVsPiA8aW5zPnBvaW50ZXIoKTwvaW5zPik7CjwvcHJlPgoKPHA+Ci0xLSA8aT5SZXF1aXJlczo8L2k+IERvZXMgbm90IGFjY2VwdCBwb2ludGVyIHR5cGVzIHdoaWNoIGFyZSBjb252ZXJ0aWJsZQp0byA8ZGVsPjx0dD5UKjwvdHQ+PC9kZWw+IDxpbnM+PHR0PnBvaW50ZXI8L3R0PjwvaW5zPiAoZGlhZ25vc3RpYwpyZXF1aXJlZCkuIFs8aT5Ob3RlOjwvaT4gT25lIGltcGxlbWVudGF0aW9uIHRlY2huaXF1ZSBpcyB0byBjcmVhdGUgYSBwcml2YXRlCnRlbXBsYXRlZCBvdmVybG9hZC4gPGk+LS0gZW5kIG5vdGU8L2k+XQo8L3A+CjwvYmxvY2txdW90ZT4KCjwvbGk+Cgo8bGk+Cgo8cD4KQ2hhbmdlIDIwLjcuMTEuMi4xIFt1bmlxdWUucHRyLnNpbmdsZS5jdG9yXToKPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+dW5pcXVlX3B0cigpOzwvcHJlPgo8YmxvY2txdW90ZT4KPHA+CjxpPlJlcXVpcmVzOjwvaT4gPHR0PkQ8L3R0PiA8ZGVsPm11c3Q8L2RlbD4gPGlucz5zaGFsbDwvaW5zPiBiZSBkZWZhdWx0IGNvbnN0cnVjdGlibGUsIGFuZCB0aGF0CmNvbnN0cnVjdGlvbiA8ZGVsPm11c3Q8L2RlbD4gPGlucz5zaGFsbDwvaW5zPiBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLiA8dHQ+RDwvdHQ+IDxkZWw+bXVzdDwvZGVsPiA8aW5zPnNoYWxsPC9pbnM+IG5vdCBiZSBhCnJlZmVyZW5jZSB0eXBlIDxpbnM+b3IgcG9pbnRlciB0eXBlIChkaWFnbm9zdGljIHJlcXVpcmVkKTwvaW5zPi4KPC9wPgo8L2Jsb2NrcXVvdGU+CjxwcmU+dW5pcXVlX3B0cig8ZGVsPlQqPC9kZWw+IDxpbnM+cG9pbnRlcjwvaW5zPiBwKTs8L3ByZT4KPGJsb2NrcXVvdGU+CjxwPgo8aT5SZXF1aXJlczo8L2k+ICBUaGUgZXhwcmVzc2lvbiA8dHQ+RCgpKHApPC90dD4gPGRlbD5tdXN0PC9kZWw+IDxpbnM+c2hhbGw8L2lucz4gYmUgd2VsbCBmb3JtZWQuClRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIG9mIDx0dD5EPC90dD4gPGRlbD5tdXN0PC9kZWw+IDxpbnM+c2hhbGw8L2lucz4gbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KPHR0PkQ8L3R0PiA8ZGVsPm11c3Q8L2RlbD4gPGlucz5zaGFsbDwvaW5zPiBub3QgYmUgYSByZWZlcmVuY2UgdHlwZSA8aW5zPm9yIHBvaW50ZXIgdHlwZSAoZGlhZ25vc3RpYwpyZXF1aXJlZCk8L2lucz4uCjwvcD4KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8L2xpPgoKPC91bD4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjc0Ij48L2E+Njc0LiA8dHQ+c2hhcmVkX3B0cjwvdHQ+IGludGVyZmFjZSBjaGFuZ2VzIGZvciBjb25zaXN0ZW5jeSB3aXRoIE4xODU2PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjcuMTIuMiBbdXRpbC5zbWFydHB0ci5zaGFyZWRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFBldGVyIERpbW92IDxiPkRhdGU6PC9iPiAyMDA3LTA1LTA1PC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjdXRpbC5zbWFydHB0ci5zaGFyZWQiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFt1dGlsLnNtYXJ0cHRyLnNoYXJlZF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCN1dGlsLnNtYXJ0cHRyLnNoYXJlZCI+aXNzdWVzPC9hPiBpbiBbdXRpbC5zbWFydHB0ci5zaGFyZWRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTg1Ni5odG1sIj5OMTg1NjwvYT4gZG9lcyBub3QgcHJvcG9zZQphbnkgY2hhbmdlcyB0byA8dHQ+c2hhcmVkX3B0cjwvdHQ+LiBJdCBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIHVzZSBhIHJ2YWx1ZSByZWZlcmVuY2Ugd2hlcmUgYXBwcm9wcmlhdGUKYW5kIHRvIGludGVyb3BlcmF0ZSB3aXRoIDx0dD51bmlxdWVfcHRyPC90dD4gYXMgaXQgZG9lcyB3aXRoIDx0dD5hdXRvX3B0cjwvdHQ+Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+CkNoYW5nZSAyMC43LjEyLjIgW3V0aWwuc21hcnRwdHIuc2hhcmVkXSBhcyBmb2xsb3dzOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBZJmd0OyBleHBsaWNpdCBzaGFyZWRfcHRyKGF1dG9fcHRyJmx0O1kmZ3Q7PGRlbD4mYW1wOzwvZGVsPjxpbnM+JmFtcDsmYW1wOzwvaW5zPiByKTsKPGlucz50ZW1wbGF0ZSZsdDtjbGFzcyBZLCBjbGFzcyBEJmd0OyBleHBsaWNpdCBzaGFyZWRfcHRyKGNvbnN0IHVuaXF1ZV9wdHImbHQ7WSxEJmd0OyZhbXA7IHIpID0gZGVsZXRlOwp0ZW1wbGF0ZSZsdDtjbGFzcyBZLCBjbGFzcyBEJmd0OyBleHBsaWNpdCBzaGFyZWRfcHRyKHVuaXF1ZV9wdHImbHQ7WSxEJmd0OyZhbXA7JmFtcDsgcik7PC9pbnM+Ci4uLgp0ZW1wbGF0ZSZsdDtjbGFzcyBZJmd0OyBzaGFyZWRfcHRyJmFtcDsgb3BlcmF0b3I9KGF1dG9fcHRyJmx0O1kmZ3Q7PGRlbD4mYW1wOzwvZGVsPjxpbnM+JmFtcDsmYW1wOzwvaW5zPiByKTsKPGlucz50ZW1wbGF0ZSZsdDtjbGFzcyBZLCBjbGFzcyBEJmd0OyBzaGFyZWRfcHRyJmFtcDsgb3BlcmF0b3I9KGNvbnN0IHVuaXF1ZV9wdHImbHQ7WSxEJmd0OyZhbXA7IHIpID0gZGVsZXRlOwp0ZW1wbGF0ZSZsdDtjbGFzcyBZLCBjbGFzcyBEJmd0OyBzaGFyZWRfcHRyJmFtcDsgb3BlcmF0b3I9KHVuaXF1ZV9wdHImbHQ7WSxEJmd0OyZhbXA7JmFtcDsgcik7PC9pbnM+PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPgpDaGFuZ2UgMjAuNy4xMi4yLjEgW3V0aWwuc21hcnRwdHIuc2hhcmVkLmNvbnN0XSBhcyBmb2xsb3dzOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT48aW5zPnRlbXBsYXRlJmx0O2NsYXNzIFkmZ3Q7IHNoYXJlZF9wdHIoYXV0b19wdHImbHQ7WSZndDs8ZGVsPiZhbXA7PC9kZWw+PGlucz4mYW1wOyZhbXA7PC9pbnM+IHIpOzwvaW5zPjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KQWRkIHRvIDIwLjcuMTIuMi4xIFt1dGlsLnNtYXJ0cHRyLnNoYXJlZC5jb25zdF06CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPjxpbnM+dGVtcGxhdGUmbHQ7Y2xhc3MgWSwgY2xhc3MgRCZndDsgc2hhcmVkX3B0cih1bmlxdWVfcHRyJmx0O1ksIEQmZ3Q7JmFtcDsmYW1wOyByKTs8L2lucz48L3ByZT4KPGJsb2NrcXVvdGU+Cgo8cD48aW5zPgo8aT5FZmZlY3RzOjwvaT4gRXF1aXZhbGVudCB0byA8dHQ+c2hhcmVkX3B0ciggci5yZWxlYXNlKCksIHIuZ2V0X2RlbGV0ZXIoKSApPC90dD4gd2hlbiA8dHQ+RDwvdHQ+IGlzCiAgICAgICAgICBub3QgYSByZWZlcmVuY2UgdHlwZSwgPHR0PnNoYXJlZF9wdHIoIHIucmVsZWFzZSgpLCByZWYoIHIuZ2V0X2RlbGV0ZXIoKSApICk8L3R0PgogICAgICAgICAgb3RoZXJ3aXNlLgo8L2lucz48L3A+Cgo8cD48aW5zPgo8aT5FeGNlcHRpb24gc2FmZXR5OjwvaT4gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biwgdGhlIGNvbnN0cnVjdG9yIGhhcyBubyBlZmZlY3QuCjwvaW5zPjwvcD4KPC9ibG9ja3F1b3RlPgoKPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAyMC43LjEyLjIuMyBbdXRpbC5zbWFydHB0ci5zaGFyZWQuYXNzaWduXSBhcyBmb2xsb3dzOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBZJmd0OyBzaGFyZWRfcHRyJmFtcDsgb3BlcmF0b3I9KGF1dG9fcHRyJmx0O1kmZ3Q7PGRlbD4mYW1wOzwvZGVsPjxpbnM+JmFtcDsmYW1wOzwvaW5zPiByKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+CkFkZCB0byAyMC43LjEyLjIuMyBbdXRpbC5zbWFydHB0ci5zaGFyZWQuYXNzaWduXToKPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+PGlucz50ZW1wbGF0ZSZsdDtjbGFzcyBZLCBjbGFzcyBEJmd0OyBzaGFyZWRfcHRyJmFtcDsgb3BlcmF0b3I9KHVuaXF1ZV9wdHImbHQ7WSxEJmd0OyZhbXA7JmFtcDsgcik7PC9pbnM+PC9wcmU+Cgo8YmxvY2txdW90ZT4KPHA+PGlucz4KLTQtIDxpPkVmZmVjdHM6PC9pPiBFcXVpdmFsZW50IHRvIDx0dD5zaGFyZWRfcHRyKHN0ZDo6bW92ZShyKSkuc3dhcCgqdGhpcyk8L3R0Pi4KPC9pbnM+PC9wPgo8cD48aW5zPgotNS0gPGk+UmV0dXJuczo8L2k+IDx0dD4qdGhpczwvdHQ+Lgo8L2lucz48L3A+CjwvYmxvY2txdW90ZT4KCjwvYmxvY2txdW90ZT4KCgoKPHA+PGk+WwpLb25hICgyMDA3KTogV2UgbWF5IG5lZWQgdG8gb3BlbiBhbiBpc3N1ZSAoPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc0MyI+NzQzPC9hPikgdG8gZGVhbCB3aXRoIHRoZSBxdWVzdGlvbiBvZgp3aGV0aGVyIDx0dD5zaGFyZWRfcHRyPC90dD4gbmVlZHMgYW4gcnZhbHVlIDx0dD5zd2FwPC90dD4uCl08L2k+PC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjY3NyI+PC9hPjY3Ny4gV2Vha25lc3NlcyBpbiBzZWVkX3NlcTo6cmFuZG9taXplIFtyYW5kLnV0aWwuc2VlZHNlcV08L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuNC43LjEgW3JhbmQudXRpbC5zZWVkc2VxXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBDaGFybGVzIEthcm5leSA8Yj5EYXRlOjwvYj4gMjAwNy0wNS0xNTwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI3JhbmQudXRpbC5zZWVkc2VxIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbcmFuZC51dGlsLnNlZWRzZXFdLjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjcmFuZC51dGlsLnNlZWRzZXEiPmlzc3VlczwvYT4gaW4gW3JhbmQudXRpbC5zZWVkc2VxXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+Cjx0dD5zZWVkX3NlcTo6cmFuZG9taXplPC90dD4gcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIGluaXRpYWxpemluZyByYW5kb20gbnVtYmVyCmVuZ2luZXMgd2hpY2ggaWRlYWxseSB3b3VsZCB5aWVsZCAiZGlzdGFudCIgc3RhdGVzIHdoZW4gZ2l2ZW4gImNsb3NlIgpzZWVkcy4gIFRoZSBhbGdvcml0aG0gZm9yIDx0dD5zZWVkX3NlcTo6cmFuZG9taXplPC90dD4gZ2l2ZW4gaW4gdGhlIGN1cnJlbnQKV29ya2luZyBEcmFmdCBmb3IgQysrLAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA3L24yMjg0LnBkZiI+TjIyODQ8L2E+CigyMDA3LTA1LTA4KSwgaGFzIDMgd2Vha25lc3Nlcwo8L3A+Cgo8b2w+CjxsaT4KPHA+IENvbGxpc2lvbnMgaW4gc3RhdGUuICBCZWNhdXNlIG9mIHRoZSB3YXkgdGhlIHN0YXRlIGlzIGluaXRpYWxpemVkLAogICAgc2VlZHMgb2YgZGlmZmVyZW50IGxlbmd0aHMgbWF5IHJlc3VsdCBpbiB0aGUgc2FtZSBzdGF0ZS4gIFRoZQogICAgY3VycmVudCB2ZXJzaW9uIG9mIHNlZWRfc2VxIGhhcyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6PC9wPgo8dWw+CjxsaT4gIEZvciBhIGdpdmVuIDx0dD5zICZsdDs9IG48L3R0PiwgZWFjaCBvZiB0aGUgMl4oMzJzKSBzZWVkIHZlY3RvcnMgcmVzdWx0cyBpbiBhCiAgICAgIGRpc3RpbmN0IHN0YXRlLjwvbGk+CjwvdWw+CjxwPgogICAgVGhlIHByb3Bvc2VkIGFsZ29yaXRobSAoYmVsb3cpIGhhcyB0aGUgY29uc2lkZXJhYmx5IHN0cm9uZ2VyCiAgICBwcm9wZXJ0aWVzOjwvcD4KPHVsPgo8bGk+ICAgQWxsIG9mIHRoZSA8dHQ+KDJeKDMybiktMSkvKDJeMzItMSk8L3R0PiBzZWVkIHZlY3RvcnMgb2YgbGVuZ3RocyA8dHQ+cyAmbHQ7IG48L3R0PgogICAgICByZXN1bHQgaW4gZGlzdGluY3Qgc3RhdGVzLgo8L2xpPgo8bGk+ICBBbGwgb2YgdGhlIDx0dD4yXigzMm4pPC90dD4gc2VlZCB2ZWN0b3JzIG9mIGxlbmd0aCA8dHQ+cyA9PSBuPC90dD4gcmVzdWx0IGluCiAgICAgIGRpc3RpbmN0IHN0YXRlcy4KPC9saT4KPC91bD4KPC9saT4KPGxpPgo8cD4gUG9vciBtaXhpbmcgb2YgPHR0PnYnPC90dD5zIGVudHJvcHkgaW50byB0aGUgc3RhdGUuICBDb25zaWRlciA8dHQ+di5zaXplKCkgPT0gbjwvdHQ+CiAgICBhbmQgaG9sZCA8dHQ+dltuLzJdPC90dD4gdGhydSA8dHQ+dltuLTFdPC90dD4gZml4ZWQgd2hpbGUgdmFyeWluZyA8dHQ+dlswXTwvdHQ+IHRocnUgPHR0PnZbbi8yLTFdPC90dD4sCiAgICBhIHRvdGFsIG9mIDx0dD4yXigxNm4pPC90dD4gcG9zc2liaWxpdGllcy4gIEJlY2F1c2Ugb2YgdGhlIHNpbXBsZSByZWN1cnNpb24KICAgIHVzZWQgaW4gPHR0PnNlZWRfc2VxPC90dD4sIDx0dD5iZWdpbltuLzJdPC90dD4gdGhydSA8dHQ+YmVnaW5bbi0xXTwvdHQ+IGNhbiB0YWtlIG9uIG9ubHkgMl42NAogICAgcG9zc2libGUgc3RhdGVzLjwvcD4KCjxwPiBUaGUgcHJvcG9zZWQgYWxnb3JpdGhtIHVzZXMgYSBtb3JlIGNvbXBsZXggcmVjdXJzaW9uIHdoaWNoIHJlc3VsdHMKICAgIGluIG11Y2ggYmV0dGVyIG1peGluZy48L3A+CjwvbGk+CjxsaT4gPHR0PnNlZWRfc2VxOjpyYW5kb21pemU8L3R0PiBpcyB1bmRlZmluZWQgZm9yIDx0dD52LnNpemUoKSA9PSAwPC90dD4uICBUaGUgcHJvcG9zZWQKICAgIGFsZ29yaXRobSByZW1lZGllcyB0aGlzLgo8L2xpPgo8L29sPgo8cD4KVGhlIGN1cnJlbnQgYWxnb3JpdGhtIGZvciA8dHQ+c2VlZF9zZXE6OnJhbmRvbWl6ZTwvdHQ+IGlzIGFkYXB0ZWQgYnkgbWUgZnJvbSB0aGUKaW5pdGlhbGl6YXRpb24gcHJvY2VkdXJlIGZvciB0aGUgTWVyc2VubmUgVHdpc3RlciBieSBNYWtvdG8gTWF0c3Vtb3RvCmFuZCBUYWt1amkgTmlzaGltdXJhLiAgVGhlIHdlYWtuZXNzICgyKSBnaXZlbiBhYm92ZSB3YXMgY29tbXVuaWNhdGVkIHRvCm1lIGJ5IE1hdHN1bW90byBsYXN0IHllYXIuCjwvcD4KPHA+ClRoZSBwcm9wb3NlZCByZXBsYWNlbWVudCBmb3IgPHR0PnNlZWRfc2VxOjpyYW5kb21pemU8L3R0PiBpcyBkdWUgdG8gTXV0c3VvIFNhaXRvLAphIHN0dWRlbnQgb2YgTWF0c3Vtb3RvLCBhbmQgaXMgZ2l2ZW4gaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZQpTSU1ELW9yaWVudGVkIEZhc3QgTWVyc2VubmUgVHdpc3RlciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBTRk1ULgo8YSBocmVmPSJodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwLyU3RW0tbWF0L01UL1NGTVQvaW5kZXguaHRtbCI+aHR0cDovL3d3dy5tYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5qcC9+bS1tYXQvTVQvU0ZNVC9pbmRleC5odG1sPC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwLyU3RW0tbWF0L01UL1NGTVQvU0ZNVC1zcmMtMS4yLnRhci5neiI+aHR0cDovL3d3dy5tYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5qcC9+bS1tYXQvTVQvU0ZNVC9TRk1ULXNyYy0xLjIudGFyLmd6PC9hPgo8L3A+CjxwPgpTZWUKTXV0c3VvIFNhaXRvLApBbiBBcHBsaWNhdGlvbiBvZiBGaW5pdGUgRmllbGQ6IERlc2lnbiBhbmQgSW1wbGVtZW50YXRpb24gb2YgMTI4LWJpdApJbnN0cnVjdGlvbi1CYXNlZCBGYXN0IFBzZXVkb3JhbmRvbSBOdW1iZXIgR2VuZXJhdG9yLApNYXN0ZXIncyBUaGVzaXMsIERlcHQuIG9mIE1hdGguLCBIaXJvc2hpbWEgVW5pdmVyc2l0eSAoRmViLiAyMDA3KQo8YSBocmVmPSJodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwLyU3RW0tbWF0L01UL1NGTVQvTTA2MjgyMS5wZGYiPmh0dHA6Ly93d3cubWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0L01UL1NGTVQvTTA2MjgyMS5wZGY8L2E+CjwvcD4KPHA+Ck9uZSBjaGFuZ2UgaGFzIGJlZW4gbWFkZSBoZXJlLCBuYW1lbHkgdG8gdHJlYXQgdGhlIGNhc2Ugb2Ygc21hbGwgPHR0Pm48L3R0Pgooc2V0dGluZyA8dHQ+dCA9IChuLTEpLzI8L3R0PiBmb3IgPHR0Pm4gJmx0OyA3PC90dD4pLgo8L3A+CjxwPgpTaW5jZSA8dHQ+c2VlZF9zZXE8L3R0PiB3YXMgaW50cm9kdWNlZCByZWxhdGl2ZWx5IHJlY2VudGx5IHRoZXJlIGlzIGxpdHRsZSBjb3N0CmluIG1ha2luZyB0aGlzIGluY29tcGF0aWJsZSBpbXByb3ZlbWVudCB0byBpdC4KPC9wPgoKPHA+ClNlZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA3L24yMzkxLnBkZiI+TjIzOTE8L2E+IGFuZAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA3L24yNDIzLnBkZiI+TjI0MjM8L2E+CmZvciBzb21lIGZ1cnRoZXIgZGlzY3Vzc2lvbi4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkb3B0IHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGluCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjI0MjMucGRmIj5OMjQyMzwvYT4uCjwvcD4KCgo8cD48aT5bCktvbmEgKDIwMDcpOiBUaGUgTFdHIGFkb3B0ZWQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gb2YgTjI0MjMgZm9yIHRoaXMgaXNzdWUuClRoZSBMV0cgdm90ZWQgdG8gYWNjZWxlcmF0ZSB0aGlzIGlzc3VlIHRvIFJlYWR5IHN0YXR1cyB0byBiZSB2b3RlZCBpbnRvIHRoZSBXUCBhdCBLb25hLgpdPC9pPjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2NzgiPjwvYT42NzguIENoYW5nZXMgZm9yIFtyYW5kLnJlcS5lbmddPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI2LjQuMS4zIFtyYW5kLnJlcS5lbmddIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IENoYXJsZXMgS2FybmV5IDxiPkRhdGU6PC9iPiAyMDA3LTA1LTE1PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNyYW5kLnJlcS5lbmciPmlzc3VlczwvYT4gaW4gW3JhbmQucmVxLmVuZ10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpTZWN0aW9uIDI2LjQuMS4zIFtyYW5kLnJlcS5lbmddIFJhbmRvbSBudW1iZXIgZW5naW5lIHJlcXVpcmVtZW50czoKPC9wPgoKPHA+ClRoaXMgY2hhbmdlIGZvbGxvd3MgbmF0dXJhbGx5IGZyb20gdGhlIHByb3Bvc2VkIGNoYW5nZSB0bwo8dHQ+c2VlZF9zZXE6OnJhbmRvbWl6ZTwvdHQ+IGluIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2NzciPjY3NzwvYT4uCjwvcD4KCjxwPgpJbiB0YWJsZSAxMDQgdGhlIGRlc2NyaXB0aW9uIG9mIDx0dD5YKHEpPC90dD4gY29udGFpbnMgYSBzcGVjaWFsIHRyZWF0bWVudCBvZgp0aGUgY2FzZSA8dHQ+cS5zaXplKCkgPT0gMDwvdHQ+LiAgVGhpcyBpcyB1bmRlc2lyYWJsZSBmb3IgNCByZWFzb25zOgo8L3A+Cgo8b2w+CjxsaT5JdCByZXBsaWNhdGVzIHRoZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IDx0dD5YKCk8L3R0Pi48L2xpPgo8bGk+SXQgbGVhZHMgdG8gdGhlIHBvc3NpYmlsaXR5IG9mIGEgY29sbGlzaW9uIGluIHRoZSBzdGF0ZSBwcm92aWRlZAogICAgYnkgc29tZSBvdGhlciA8dHQ+WChxKTwvdHQ+IHdpdGggPHR0PnEuc2l6ZSgpICZndDsgMDwvdHQ+LjwvbGk+CjxsaT5JdCBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIDx0dD5YKHEpPC90dD4gaW4KcGFyYWdyYXBocyAyNi40LjMuMSBbcmFuZC5lbmcubGNvbmddIHA1LCAyNi40LjMuMiBbcmFuZC5lbmcubWVyc10gcDgsIGFuZCAyNi40LjMuMyBbcmFuZC5lbmcuc3ViXSBwMTAgd2hlcmUKdGhlcmUgaXMgbm8gc3BlY2lhbCB0cmVhdG1lbnQgb2YgPHR0PnEuc2l6ZSgpID09IDA8L3R0Pi48L2xpPgo8bGk+VGhlIHByb3Bvc2VkIHJlcGxhY2VtZW50IGZvciA8dHQ+c2VlZF9zZXE6OnJhbmRvbWl6ZTwvdHQ+IGdpdmVuIGFib3ZlCiAgICBhbGxvd3MgZm9yIHRoZSBjYXNlIDx0dD5xLnNpemUoKSA9PSAwPC90dD4uPC9saT4KPC9vbD4KCjxwPgpTZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNy9uMjM5MS5wZGYiPk4yMzkxPC9hPiBhbmQKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNy9uMjQyMy5wZGYiPk4yNDIzPC9hPgpmb3Igc29tZSBmdXJ0aGVyIGRpc2N1c3Npb24uCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpBZG9wdCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBpbgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA3L24yNDIzLnBkZiI+TjI0MjM8L2E+Lgo8L3A+CgoKPHA+PGk+WwpLb25hICgyMDA3KTogVGhlIExXRyBhZG9wdGVkIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG9mIE4yNDIzIGZvciB0aGlzIGlzc3VlLgpUaGUgTFdHIHZvdGVkIHRvIGFjY2VsZXJhdGUgdGhpcyBpc3N1ZSB0byBSZWFkeSBzdGF0dXMgdG8gYmUgdm90ZWQgaW50byB0aGUgV1AgYXQgS29uYS4KXTwvaT48L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjc5Ij48L2E+Njc5LiByZXNpemUgcGFyYW1ldGVyIGJ5IHZhbHVlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjIgW3NlcXVlbmNlc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSG93YXJkIEhpbm5hbnQgPGI+RGF0ZTo8L2I+IDIwMDctMDYtMTE8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBDKys5OCBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCBvbmUgbWVtYmVyIGZ1bmN0aW9uIGFsb25lIG9mIHRoZSBjb250YWluZXJzCnBhc3NlcyBpdHMgcGFyYW1ldGVyICg8dHQ+VDwvdHQ+KSBieSB2YWx1ZSBpbnN0ZWFkIG9mIGJ5IGNvbnN0IHJlZmVyZW5jZToKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT52b2lkIHJlc2l6ZShzaXplX3R5cGUgc3osIFQgYyA9IFQoKSk7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpUaGlzIGZhY3QgaGFzIGJlZW4gZGlzY3Vzc2VkIC8gZGViYXRlZCByZXBlYXRlZGx5IG92ZXIgdGhlIHllYXJzLCB0aGUgZmlyc3QgdGltZQpiZWluZyBldmVuIGJlZm9yZSBDKys5OCB3YXMgcmF0aWZpZWQuICBUaGUgcmF0aW9uYWxlIGZvciBwYXNzaW5nIHRoaXMgcGFyYW1ldGVyIGJ5CnZhbHVlIGhhcyBiZWVuOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+ClNvIHRoYXQgc2VsZiByZWZlcmVuY2luZyBzdGF0ZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvIHdvcmssIGZvciBleGFtcGxlOgo8L3A+CjxibG9ja3F1b3RlPjxwcmU+di5yZXNpemUodi5zaXplKCkgKyAxLCB2WzBdKTsKPC9wcmU+PC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KSG93ZXZlciB0aGlzIHJhdGlvbmFsZSBpcyBub3QgY29udmluY2luZyBhcyB0aGUgc2lnbmF0dXJlIGZvciA8dHQ+cHVzaF9iYWNrPC90dD4gaXM6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dm9pZCBwdXNoX2JhY2soY29uc3QgVCZhbXA7IHgpOwo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KQW5kIDx0dD5wdXNoX2JhY2s8L3R0PiBoYXMgc2ltaWxhciBzZW1hbnRpY3MgdG8gPHR0PnJlc2l6ZTwvdHQ+IChhcHBlbmQpLgpBbmQgPHR0PnB1c2hfYmFjazwvdHQ+IG11c3QgYWxzbyB3b3JrIGluIHRoZSBzZWxmIHJlZmVyZW5jaW5nIGNhc2U6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+di5wdXNoX2JhY2sodlswXSk7ICAvLyBtdXN0IHdvcmsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBwcm9ibGVtIHdpdGggcGFzc2luZyA8dHQ+VDwvdHQ+IGJ5IHZhbHVlIGlzIHRoYXQgaXQgY2FuIGJlIHNpZ25pZmljYW50bHkgbW9yZQpleHBlbnNpdmUgdGhhbiBwYXNzaW5nIGJ5IHJlZmVyZW5jZS4gIFRoZSBjb252ZXJzZSBpcyBhbHNvIHRydWUsIGhvd2V2ZXIgd2hlbiBpdCBpcwp0cnVlIGl0IGlzIHVzdWFsbHkgZmFyIGxlc3MgZHJhbWF0aWMgKGUuZy4gZm9yIHNjYWxhciB0eXBlcykuCjwvcD4KCjxwPgpFdmVuIHdpdGggbW92ZSBzZW1hbnRpY3MgYXZhaWxhYmxlLCBwYXNzaW5nIHRoaXMgcGFyYW1ldGVyIGJ5IHZhbHVlIGNhbiBiZSBleHBlbnNpdmUuCkNvbnNpZGVyIGZvciBleGFtcGxlIDx0dD52ZWN0b3ImbHQ7dmVjdG9yJmx0O2ludCZndDsmZ3Q7PC90dD46CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+c3RkOjp2ZWN0b3ImbHQ7aW50Jmd0OyB4KDEwMDApOwpzdGQ6OnZlY3RvciZsdDtzdGQ6OnZlY3RvciZsdDtpbnQmZ3Q7Jmd0OyB2OwouLi4Kdi5yZXNpemUodi5zaXplKCkrMSwgeCk7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpJbiB0aGUgcGFzcy1ieS12YWx1ZSBjYXNlLCA8dHQ+eDwvdHQ+IGlzIGNvcGllZCBvbmNlIHRvIHRoZSBwYXJhbWV0ZXIgb2YKPHR0PnJlc2l6ZTwvdHQ+LiAgQW5kIHRoZW4gaW50ZXJuYWxseSwgc2luY2UgdGhlIGNvZGUgY2FuIG5vdCBrbm93IGF0IGNvbXBpbGUKdGltZSBieSBob3cgbXVjaCA8dHQ+cmVzaXplPC90dD4gaXMgZ3Jvd2luZyB0aGUgPHR0PnZlY3RvcjwvdHQ+LCA8dHQ+eDwvdHQ+IGlzCnVzdWFsbHkgY29waWVkIChub3QgbW92ZWQpIGEgc2Vjb25kIHRpbWUgZnJvbSA8dHQ+cmVzaXplPC90dD4ncyBwYXJhbWV0ZXIgaW50byBpdHMgcHJvcGVyIHBsYWNlCndpdGhpbiB0aGUgPHR0PnZlY3RvcjwvdHQ+Lgo8L3A+Cgo8cD4KV2l0aCBwYXNzLWJ5LWNvbnN0LXJlZmVyZW5jZSwgdGhlIDx0dD54PC90dD4gaW4gdGhlIGFib3ZlIGV4YW1wbGUgbmVlZCBiZSBjb3BpZWQKb25seSBvbmNlLiAgSW4gdGhpcyBjYXNlLCA8dHQ+eDwvdHQ+IGhhcyBhbiBleHBlbnNpdmUgY29weSBjb25zdHJ1Y3RvciBhbmQgc28gYW55CmNvcGllcyB0aGF0IGNhbiBiZSBzYXZlZCByZXByZXNlbnRzIGEgc2lnbmlmaWNhbnQgc2F2aW5ncy4KPC9wPgoKPHA+CklmIHdlIGNhbiBiZSBlZmZpY2llbnQgZm9yIDx0dD5wdXNoX2JhY2s8L3R0Piwgd2Ugc2hvdWxkIGJlIGVmZmljaWVudCBmb3IgPHR0PnJlc2l6ZTwvdHQ+CmFzIHdlbGwuICBUaGUgcmVzaXplIHRha2luZyBhIHJlZmVyZW5jZSBwYXJhbWV0ZXIgaGFzIGJlZW4gY29kZWQgYW5kIHNoaXBwZWQgaW4gdGhlCkNvZGVXYXJyaW9yIGxpYnJhcnkgd2l0aCBubyByZXBvcnRzIG9mIHByb2JsZW1zIHdoaWNoIEkgYW0gYXdhcmUgb2YuCjwvcD4KCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIDIzLjIuMiBbZGVxdWVdLCBwMjoKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT5jbGFzcyBkZXF1ZSB7CiAgIC4uLgogICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgc3osIDxpbnM+Y29uc3QgPC9pbnM+VDxpbnM+JmFtcDs8L2lucz4gYyk7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpDaGFuZ2UgMjMuMi4yLjIgW2RlcXVlLmNhcGFjaXR5XSwgcDM6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dm9pZCByZXNpemUoc2l6ZV90eXBlIHN6LCA8aW5zPmNvbnN0IDwvaW5zPlQ8aW5zPiZhbXA7PC9pbnM+IGMpOwo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDIzLjIuNCBbbGlzdF0sIHAyOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPmNsYXNzIGxpc3QgewogICAuLi4KICAgdm9pZCByZXNpemUoc2l6ZV90eXBlIHN6LCA8aW5zPmNvbnN0IDwvaW5zPlQ8aW5zPiZhbXA7PC9pbnM+IGMpOwo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDIzLjIuNC4yIFtsaXN0LmNhcGFjaXR5XSwgcDM6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dm9pZCByZXNpemUoc2l6ZV90eXBlIHN6LCA8aW5zPmNvbnN0IDwvaW5zPlQ8aW5zPiZhbXA7PC9pbnM+IGMpOwo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDIzLjIuNiBbdmVjdG9yXSwgcDI6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+Y2xhc3MgdmVjdG9yIHsKICAgLi4uCiAgIHZvaWQgcmVzaXplKHNpemVfdHlwZSBzeiwgPGlucz5jb25zdCA8L2lucz5UPGlucz4mYW1wOzwvaW5zPiBjKTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAyMy4yLjYuMiBbdmVjdG9yLmNhcGFjaXR5XSwgcDExOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnZvaWQgcmVzaXplKHNpemVfdHlwZSBzeiwgPGlucz5jb25zdCA8L2lucz5UPGlucz4mYW1wOzwvaW5zPiBjKTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2ODAiPjwvYT42ODAuIG1vdmVfaXRlcmF0b3Igb3BlcmF0b3ItJmd0OyByZXR1cm48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjQuNC4zLjEgW21vdmUuaXRlcmF0b3JdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEhvd2FyZCBIaW5uYW50IDxiPkRhdGU6PC9iPiAyMDA3LTA2LTExPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgo8dHQ+bW92ZV9pdGVyYXRvcjwvdHQ+J3MgPHR0Pm9wZXJhdG9yLSZndDs8L3R0PiByZXR1cm4gdHlwZSA8dHQ+cG9pbnRlcjwvdHQ+CmRvZXMgbm90IGNvbnNpc3RlbnRseSBtYXRjaCB0aGUgdHlwZSB3aGljaCBpcyByZXR1cm5lZCBpbiB0aGUgZGVzY3JpcHRpb24KaW4gMjQuNC4zLjMuNSBbbW92ZS5pdGVyLm9wLnJlZl0uCjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIEl0ZXJhdG9yJmd0OwpjbGFzcyBtb3ZlX2l0ZXJhdG9yIHsKcHVibGljOgogICAgLi4uCiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0cyZsdDtJdGVyYXRvciZndDs6OnBvaW50ZXIgcG9pbnRlcjsKICAgIC4uLgogICAgcG9pbnRlciBvcGVyYXRvci0mZ3Q7KCkgY29uc3Qge3JldHVybiBjdXJyZW50O30KICAgIC4uLgpwcml2YXRlOiAKICAgIEl0ZXJhdG9yIGN1cnJlbnQ7IC8vIGV4cG9zaXRpb24gb25seQp9Owo8L3ByZT48L2Jsb2NrcXVvdGU+CgoKPHA+ClRoZXJlIGFyZSB0d28gcG9zc2libGUgZml4ZXMuCjwvcD4KCjxvbD4KPGxpPjx0dD5wb2ludGVyIG9wZXJhdG9yLSZndDsoKSBjb25zdCB7cmV0dXJuICZhbXA7KmN1cnJlbnQ7fTwvdHQ+PC9saT4KPGxpPjx0dD50eXBlZGVmIEl0ZXJhdG9yIHBvaW50ZXI7PC90dD48L2xpPgo8L29sPgoKPHA+ClRoZSBmaXJzdCBzb2x1dGlvbiBpcyB0aGUgb25lIGNob3NlbiBieSA8dHQ+cmV2ZXJzZV9pdGVyYXRvcjwvdHQ+LiAgQSBwb3RlbnRpYWwKZGlzYWR2YW50YWdlIG9mIHRoaXMgaXMgaXQgbWF5IG5vdCB3b3JrIHdlbGwgd2l0aCBpdGVyYXRvcnMgd2hpY2ggcmV0dXJuIGEKcHJveHkgb24gZGVyZWZlcmVuY2UgYW5kIHRoYXQgcHJveHkgaGFzIG92ZXJsb2FkZWQgPHR0Pm9wZXJhdG9yJmFtcDsoKTwvdHQ+LiAgUHJveHkKcmVmZXJlbmNlcyBvZnRlbiBuZWVkIHRvIG92ZXJsb2FhZCA8dHQ+b3BlcmF0b3ImYW1wOygpPC90dD4gdG8gcmV0dXJuIGEgcHJveHkKcG9pbnRlci4gIFRoYXQgcHJveHkgcG9pbnRlciBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgc2FtZSB0eXBlIGFzIHRoZSBpdGVyYXRvcidzCjx0dD5wb2ludGVyPC90dD4gdHlwZS4KPC9wPgoKPHA+CkJ5IHNpbXBseSByZXR1cm5pbmcgdGhlIDx0dD5JdGVyYXRvcjwvdHQ+IGFuZCB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQKdGhlIGxhbmd1YWdlIGZvcndhcmRzIGNhbGxzIHRvIDx0dD5vcGVyYXRvci0mZ3Q7PC90dD4gYXV0b21hdGljYWxseSB1bnRpbCBpdApmaW5kcyBhIG5vbi1jbGFzcyB0eXBlLCB0aGUgc2Vjb25kIHNvbHV0aW9uIGF2b2lkcyB0aGUgaXNzdWUgb2YgYW4gb3ZlcmxvYWRlZAo8dHQ+b3BlcmF0b3ImYW1wOygpPC90dD4gZW50aXJlbHkuCjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgc3lub3BzaXMgaW4gMjQuNC4zLjEgW21vdmUuaXRlcmF0b3JdOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnR5cGVkZWYgPGRlbD50eXBlbmFtZSBpdGVyYXRvcl90cmFpdHMmbHQ7PC9kZWw+SXRlcmF0b3I8ZGVsPiZndDs6OnBvaW50ZXI8L2RlbD4gcG9pbnRlcjsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2ODEiPjwvYT42ODEuIE9wZXJhdG9yIGZ1bmN0aW9ucyBpbXBvc3NpYmxlIHRvIGNvbXBhcmUgYXJlIGRlZmluZWQgaW4gW3JlLnN1Ym1hdGNoLm9wXTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyOC45LjIgW3JlLnN1Ym1hdGNoLm9wXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBOb3pvbXUgS2F0b28gPGI+RGF0ZTo8L2I+IDIwMDctMDUtMjc8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkluIDI4LjkuMiBbcmUuc3VibWF0Y2gub3BdIG9mIE4yMjg0LCAKb3BlcmF0b3IgZnVuY3Rpb25zIG51bWJlcmVkIDMxLTQyIHNlZW0gaW1wb3NzaWJsZSB0byBjb21wYXJlLiAmbmJzcDtFLmcuOiAKPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIEJpSXRlciZndDsKJm5ic3A7ICZuYnNwOyBib29sIG9wZXJhdG9yPT0odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzJmx0O0JpSXRlciZndDs6OnZhbHVlX3R5cGUgY29uc3QmYW1wOyBsaHMsCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBjb25zdCBzdWJfbWF0Y2gmbHQ7QmlJdGVyJmd0OyZhbXA7IHJocyk7CjwvcHJlPgo8YmxvY2txdW90ZT4KPHA+Ci0zMS0gPGk+UmV0dXJuczo8L2k+IDx0dD5saHMgPT0gcmhzLnN0cigpPC90dD4uCjwvcD4KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KV2hlbiA8dHQ+Y2hhcio8L3R0PiBpcyB1c2VkIGFzIDx0dD5CaUl0ZXI8L3R0PiwgPHR0Pml0ZXJhdG9yX3RyYWl0cyZsdDtCaUl0ZXImZ3Q7Ojp2YWx1ZV90eXBlPC90dD4gd291bGQgYmUgCjx0dD5jaGFyPC90dD4sIHNvIHRoYXQgPHR0PmxocyA9PSByaHMuc3RyKCk8L3R0PiBlbmRzIHVwIGNvbXBhcmluZyBhIDx0dD5jaGFyPC90dD4gdmFsdWUgYW5kIGFuIG9iamVjdCAKb2YgPHR0PnN0ZDo6YmFzaWNfc3RyaW5nJmx0O2NoYXImZ3Q7PC90dD4uICZuYnNwO0hvd2V2ZXIsIHRoZSBiZWhhdmlvdXIgb2YgY29tcGFyaXNvbiBiZXR3ZWVuIAp0aGVzZSB0d28gdHlwZXMgaXMgbm90IGRlZmluZWQgaW4gMjEuMy44IFtzdHJpbmcubm9ubWVtYmVyc10gb2YgTjIyODQuCiZuYnNwO1RoaXMgYXBwbGllcyB3aGVuIDx0dD53Y2hhcl90KjwvdHQ+IGlzIHVzZWQgYXMgPHR0PkJpSXRlcjwvdHQ+LiAKPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkb3B0IHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGluCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjI0MDkucGRmIj5OMjQwOTwvYT4uCjwvcD4KCgo8cD48aT5bCktvbmEgKDIwMDcpOiBUaGUgTFdHIGFkb3B0ZWQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gb2YgTjI0MDkgZm9yIHRoaXMgaXNzdWUuClRoZSBMV0cgdm90ZWQgdG8gYWNjZWxlcmF0ZSB0aGlzIGlzc3VlIHRvIFJlYWR5IHN0YXR1cyB0byBiZSB2b3RlZCBpbnRvIHRoZSBXUCBhdCBLb25hLgpdPC9pPjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2ODIiPjwvYT42ODIuIGJhc2ljX3JlZ2V4IGN0b3IgdGFrZXMgSW5wdXRJdGVyYXRvciBvciBGb3J3YXJkSXRlcmF0b3I/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI4LjguMiBbcmUucmVnZXguY29uc3RydWN0XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBFcmljIE5pZWJsZXIgPGI+RGF0ZTo8L2I+IDIwMDctMDYtMDM8L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+Ckxvb2tpbmcgYXQgTjIyODQsIDI4LjggW3JlLnJlZ2V4XSwgcDMgPHR0PmJhc2ljX3JlZ2V4PC90dD4gY2xhc3MgdGVtcGxhdGUgc3lub3BzaXMgc2hvd3MgdGhpcyAKY29uc3RydWN0b3I6IAo8L3A+CjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7CiZuYnNwOyAmbmJzcDsgJm5ic3A7YmFzaWNfcmVnZXgoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LCAKJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtmbGFnX3R5cGUgZiA9IHJlZ2V4X2NvbnN0YW50czo6RUNNQVNjcmlwdCk7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpJbiAyOC44LjIgW3JlLnJlZ2V4LmNvbnN0cnVjdF0sIHAxNSwgdGhlIGNvbnN0cnVjdG9yIGFwcGVhcnMgd2l0aCB0aGlzIHNpZ25hdHVyZTogCjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIEZvcndhcmRJdGVyYXRvciZndDsKJm5ic3A7ICZuYnNwOyAmbmJzcDtiYXNpY19yZWdleChGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJdGVyYXRvciBsYXN0LCAKJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtmbGFnX3R5cGUgZiA9IHJlZ2V4X2NvbnN0YW50czo6RUNNQVNjcmlwdCk7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgo8dHQ+Rm9yd2FyZEl0ZXJhdG9yPC90dD4gaXMgcHJvYmFibHkgY29ycmVjdCwgc28gdGhlIHN5bm9wc2lzIGlzIHdyb25nLgo8L3A+Cgo8cD48aT5bCkpvaG4gYWRkczoKXTwvaT48L3A+CgoKPGJsb2NrcXVvdGU+CjxwPgpJIHRoaW5rIGVpdGhlciBjb3VsZCBiZSBpbXBsZW1lbnRlZD8gJm5ic3A7QWx0aG91Z2ggYW4gaW5wdXQgaXRlcmF0b3Igd291bGQgCnByb2JhYmx5IHJlcXVpcmUgYW4gaW50ZXJuYWwgY29weSBvZiB0aGUgc3RyaW5nIGJlaW5nIG1hZGUuCjwvcD4KPHA+CkkgaGF2ZSBubyBzdHJvbmcgZmVlbGluZ3MgZWl0aGVyIHdheSwgYWx0aG91Z2ggSSB0aGluayBteSBvcmlnaW5hbCBpbnRlbnQgCndhcyA8dHQ+SW5wdXRJdGVyYXRvcjwvdHQ+LiAKPC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRvcHQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaW4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNy9uMjQwOS5wZGYiPk4yNDA5PC9hPi4KPC9wPgoKCjxwPjxpPlsKS29uYSAoMjAwNyk6IFRoZSBMV0cgYWRvcHRlZCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBvZiBOMjQwOSBmb3IgdGhpcyBpc3N1ZS4KVGhlIExXRyB2b3RlZCB0byBhY2NlbGVyYXRlIHRoaXMgaXNzdWUgdG8gUmVhZHkgc3RhdHVzIHRvIGJlIHZvdGVkIGludG8gdGhlIFdQIGF0IEtvbmEuCl08L2k+PC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjY4NSI+PC9hPjY4NS4gcmV2ZXJzZV9pdGVyYXRvci9tb3ZlX2l0ZXJhdG9yIGRpZmZlcmVuY2UgaGFzIGludmFsaWQgc2lnbmF0dXJlczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNC40LjEuMy4xOSBbcmV2ZXJzZS5pdGVyLm9wZGlmZl0sIDI0LjQuMy4zLjE0IFttb3ZlLml0ZXIubm9ubWVtYmVyXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBCbyBQZXJzc29uIDxiPkRhdGU6PC9iPiAyMDA3LTA2LTEwPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpJbiBDKyswMyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byA8dHQ+cmV2ZXJzZV9pdGVyYXRvcnM8L3R0Pgo8L3A+CjxibG9ja3F1b3RlPjxwcmU+cmkxIC0gcmkyCjwvcHJlPjwvYmxvY2txdW90ZT4KPHA+CmlzIHBvc3NpYmxlIHRvIGNvbXB1dGUgb25seSBpZiBib3RoIGl0ZXJhdG9ycyBoYXZlIHRoZSBzYW1lIGJhc2UgCml0ZXJhdG9yLiBUaGUgcmVzdWx0IHR5cGUgaXMgdGhlIDx0dD5kaWZmZXJlbmNlX3R5cGU8L3R0PiBvZiB0aGUgYmFzZSBpdGVyYXRvci4gCjwvcD4KPHA+CkluIHRoZSBjdXJyZW50IGRyYWZ0LCB0aGUgb3BlcmF0b3IgaXMgZGVmaW5lZCBhcyAyNC40LjEuMy4xOSBbcmV2ZXJzZS5pdGVyLm9wZGlmZl0gCjwvcD4KPGJsb2NrcXVvdGU+PHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBJdGVyYXRvcjEsIGNsYXNzIEl0ZXJhdG9yMiZndDsgCnR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3ImbHQ7SXRlcmF0b3ImZ3Q7OjpkaWZmZXJlbmNlX3R5cGUgCiAgIG9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yJmx0O0l0ZXJhdG9yMSZndDsmYW1wOyB4LCAKICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yJmx0O0l0ZXJhdG9yMiZndDsmYW1wOyB5KTsKPC9wcmU+PC9ibG9ja3F1b3RlPgo8cD4KVGhlIHJldHVybiB0eXBlIGlzIHRoZSBzYW1lIGFzIHRoZSBDKyswMyBvbmUsIGJhc2VkIG9uIHRoZSBubyBsb25nZXIgCnByZXNlbnQgPHR0Pkl0ZXJhdG9yPC90dD4gdGVtcGxhdGUgcGFyYW1ldGVyLiAKPC9wPgo8cD4KQmVzaWRlcyBiZWluZyBzbGlnaHRseSBpbnZhbGlkLCBzaG91bGQgdGhpcyBvcGVyYXRvciB3b3JrIG9ubHkgd2hlbiAKPHR0Pkl0ZXJhdG9yMTwvdHQ+IGFuZCA8dHQ+SXRlcmF0b3IyPC90dD4gaGFzIHRoZSBzYW1lIDx0dD5kaWZmZXJlbmNlX3R5cGU8L3R0Pj8gT3Igc2hvdWxkIHRoZSAKaW1wbGVtZW50YXRpb24gY2hvb3NlIG9uZSBvZiB0aGVtPyBXaGljaCBvbmU/IAo8L3A+CjxwPgpUaGUgc2FtZSBwcm9ibGVtIG5vdyBhbHNvIGFwcGVhcnMgaW4gPHR0Pm9wZXJhdG9yLSgpPC90dD4gZm9yIDx0dD5tb3ZlX2l0ZXJhdG9yPC90dD4KMjQuNC4zLjMuMTQgW21vdmUuaXRlci5ub25tZW1iZXJdLiAKPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgc3lub3BzaXMgaW4gMjQuNC4xLjEgW3JldmVyc2UuaXRlcmF0b3JdOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgSXRlcmF0b3IxLCBjbGFzcyBJdGVyYXRvcjImZ3Q7IAogIDxkZWw+dHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvciZsdDtJdGVyYXRvciZndDs6OmRpZmZlcmVuY2VfdHlwZTwvZGVsPiA8aW5zPmF1dG88L2lucz4gb3BlcmF0b3ItKCAKICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImbHQ7SXRlcmF0b3IxJmd0OyZhbXA7IHgsIAogICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvciZsdDtJdGVyYXRvcjImZ3Q7JmFtcDsgeSk8aW5zPiAtJmd0OyBkZWNsdHlwZSh5LmN1cnJlbnQgLSB4LmN1cnJlbnQpPC9pbnM+Owo8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAyNC40LjEuMy4xOSBbcmV2ZXJzZS5pdGVyLm9wZGlmZl06CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBJdGVyYXRvcjEsIGNsYXNzIEl0ZXJhdG9yMiZndDsgCiAgPGRlbD50eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yJmx0O0l0ZXJhdG9yJmd0Ozo6ZGlmZmVyZW5jZV90eXBlPC9kZWw+IDxpbnM+YXV0bzwvaW5zPiBvcGVyYXRvci0oIAogICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvciZsdDtJdGVyYXRvcjEmZ3Q7JmFtcDsgeCwgCiAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yJmx0O0l0ZXJhdG9yMiZndDsmYW1wOyB5KTxpbnM+IC0mZ3Q7IGRlY2x0eXBlKHkuY3VycmVudCAtIHguY3VycmVudCk8L2lucz47CjwvcHJlPgo8YmxvY2txdW90ZT4KPHA+CjxpPlJldHVybnM6PC9pPiA8dHQ+eS5jdXJyZW50IC0geC5jdXJyZW50PC90dD4uCjwvcD4KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+CgoKPHA+CkNoYW5nZSB0aGUgc3lub3BzaXMgaW4gMjQuNC4zLjEgW21vdmUuaXRlcmF0b3JdOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgSXRlcmF0b3IxLCBjbGFzcyBJdGVyYXRvcjImZ3Q7IAogIDxkZWw+dHlwZW5hbWUgbW92ZV9pdGVyYXRvciZsdDtJdGVyYXRvciZndDs6OmRpZmZlcmVuY2VfdHlwZTwvZGVsPiA8aW5zPmF1dG88L2lucz4gb3BlcmF0b3ItKCAKICAgIGNvbnN0IG1vdmVfaXRlcmF0b3ImbHQ7SXRlcmF0b3IxJmd0OyZhbXA7IHgsIAogICAgY29uc3QgbW92ZV9pdGVyYXRvciZsdDtJdGVyYXRvcjImZ3Q7JmFtcDsgeSk8aW5zPiAtJmd0OyBkZWNsdHlwZSh4LmJhc2UoKSAtIHkuYmFzZSgpKTwvaW5zPjsKPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPgpDaGFuZ2UgMjQuNC4zLjMuMTQgW21vdmUuaXRlci5ub25tZW1iZXJdOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgSXRlcmF0b3IxLCBjbGFzcyBJdGVyYXRvcjImZ3Q7IAogIDxkZWw+dHlwZW5hbWUgbW92ZV9pdGVyYXRvciZsdDtJdGVyYXRvciZndDs6OmRpZmZlcmVuY2VfdHlwZTwvZGVsPiA8aW5zPmF1dG88L2lucz4gb3BlcmF0b3ItKCAKICAgIGNvbnN0IG1vdmVfaXRlcmF0b3ImbHQ7SXRlcmF0b3IxJmd0OyZhbXA7IHgsIAogICAgY29uc3QgbW92ZV9pdGVyYXRvciZsdDtJdGVyYXRvcjImZ3Q7JmFtcDsgeSk8aW5zPiAtJmd0OyBkZWNsdHlwZSh4LmJhc2UoKSAtIHkuYmFzZSgpKTwvaW5zPjsKPC9wcmU+CjxibG9ja3F1b3RlPgo8cD4KPGk+UmV0dXJuczo8L2k+IDx0dD54LmJhc2UoKSAtIHkuYmFzZSgpPC90dD4uCjwvcD4KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bClByZSBCZWxsZXZ1ZTogIFRoaXMgaXNzdWUgbmVlZHMgdG8gd2FpdCB1bnRpbCB0aGUgPHR0PmF1dG8gLSZndDsgcmV0dXJuPC90dD4gbGFuZ3VhZ2UgZmVhdHVyZQpnb2VzIGluLgpdPC9pPjwvcD4KCgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjY4NyI+PC9hPjY4Ny4gc2hhcmVkX3B0ciBjb252ZXJzaW9uIGNvbnN0cnVjdG9yIG5vdCBjb25zdHJhaW5lZDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMC43LjEyLjIuMSBbdXRpbC5zbWFydHB0ci5zaGFyZWQuY29uc3RdLCAyMC43LjEyLjMuMSBbdXRpbC5zbWFydHB0ci53ZWFrLmNvbnN0XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBQZXRlciBEaW1vdiA8Yj5EYXRlOjwvYj4gMjAwNy0wNS0xMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjdXRpbC5zbWFydHB0ci5zaGFyZWQuY29uc3QiPmlzc3VlczwvYT4gaW4gW3V0aWwuc21hcnRwdHIuc2hhcmVkLmNvbnN0XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClNpbmNlIGFsbCBjb252ZXJzaW9ucyBmcm9tIDx0dD5zaGFyZWRfcHRyJmx0O1QmZ3Q7PC90dD4gdG8gPHR0PnNoYXJlZF9wdHImbHQ7VSZndDs8L3R0PiBoYXZlIHRoZSBzYW1lCnJhbmsgcmVnYXJkbGVzcyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gPHR0PlQ8L3R0PiBhbmQgPHR0PlU8L3R0PiwgcmVhc29uYWJsZSB1c2VyCmNvZGUgdGhhdCB3b3JrcyB3aXRoIHJhdyBwb2ludGVycyBmYWlscyB3aXRoIDx0dD5zaGFyZWRfcHRyPC90dD46CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dm9pZCBmKCBzaGFyZWRfcHRyJmx0O3ZvaWQmZ3Q7ICk7CnZvaWQgZiggc2hhcmVkX3B0ciZsdDtpbnQmZ3Q7ICk7CgppbnQgbWFpbigpCnsKJm5ic3A7Jm5ic3A7Ziggc2hhcmVkX3B0ciZsdDtkb3VibGUmZ3Q7KCkgKTsgLy8gYW1iaWd1b3VzCn0KPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+Ck5vdyB0aGF0IHdlIG9mZmljaWFsbHkgaGF2ZSA8dHQ+ZW5hYmxlX2lmPC90dD4sIHdlIGNhbiBjb25zdHJhaW4gdGhlIGNvbnN0cnVjdG9yCmFuZCB0aGUgY29ycmVzcG9uZGluZyBhc3NpZ25tZW50IG9wZXJhdG9yIHRvIG9ubHkgcGFydGljaXBhdGUgaW4gdGhlCm92ZXJsb2FkIHJlc29sdXRpb24gd2hlbiB0aGUgcG9pbnRlciB0eXBlcyBhcmUgY29tcGF0aWJsZS4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDIwLjcuMTIuMi4xIFt1dGlsLnNtYXJ0cHRyLnNoYXJlZC5jb25zdF0sIGNoYW5nZToKPC9wPgoKPGJsb2NrcXVvdGU+PHA+Ci0xNC0gPGk+UmVxdWlyZXM6PC9pPiA8ZGVsPkZvciB0aGUgc2Vjb25kIGNvbnN0cnVjdG9yPC9kZWw+IDxpbnM+VGhlCnNlY29uZCBjb25zdHJ1Y3RvciBzaGFsbCBub3QgcGFydGljaXBhdGUgaW4gdGhlIG92ZXJsb2FkIHJlc29sdXRpb24KdW5sZXNzPC9pbnM+IDx0dD5ZKjwvdHQ+IDxkZWw+c2hhbGwgYmU8L2RlbD4gPGlucz5pcyBpbXBsaWNpdGx5PC9pbnM+IGNvbnZlcnRpYmxlCnRvIDx0dD5UKjwvdHQ+Lgo8L3A+PC9ibG9ja3F1b3RlPgoKPHA+CkluIDIwLjcuMTIuMy4xIFt1dGlsLnNtYXJ0cHRyLndlYWsuY29uc3RdLCBjaGFuZ2U6CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPjxkZWw+dGVtcGxhdGUmbHQ7Y2xhc3MgWSZndDsgd2Vha19wdHIoc2hhcmVkX3B0ciZsdDtZJmd0OyBjb25zdCZhbXA7IHIpOzwvZGVsPgo8ZGVsPndlYWtfcHRyKHdlYWtfcHRyIGNvbnN0JmFtcDsgcik7PC9kZWw+CjxkZWw+dGVtcGxhdGUmbHQ7Y2xhc3MgWSZndDsgd2Vha19wdHIod2Vha19wdHImbHQ7WSZndDsgY29uc3QmYW1wOyByKTs8L2RlbD4KPGlucz53ZWFrX3B0cih3ZWFrX3B0ciBjb25zdCZhbXA7IHIpOzwvaW5zPgo8aW5zPnRlbXBsYXRlJmx0O2NsYXNzIFkmZ3Q7IHdlYWtfcHRyKHdlYWtfcHRyJmx0O1kmZ3Q7IGNvbnN0JmFtcDsgcik7PC9pbnM+CjxpbnM+dGVtcGxhdGUmbHQ7Y2xhc3MgWSZndDsgd2Vha19wdHIoc2hhcmVkX3B0ciZsdDtZJmd0OyBjb25zdCZhbXA7IHIpOzwvaW5zPgo8L3ByZT4KPGJsb2NrcXVvdGU+PHA+Ci00LSA8aT5SZXF1aXJlczo8L2k+IDxkZWw+Rm9yPC9kZWw+IDxkZWw+dDwvZGVsPjxpbnM+VDwvaW5zPmhlIHNlY29uZCBhbmQKdGhpcmQgY29uc3RydWN0b3JzPGRlbD4sPC9kZWw+IDxpbnM+c2hhbGwgbm90IHBhcnRpY2lwYXRlIGluIHRoZQpvdmVybG9hZCByZXNvbHV0aW9uIHVubGVzczwvaW5zPiA8dHQ+WSo8L3R0PiA8ZGVsPnNoYWxsIGJlPC9kZWw+CjxpbnM+aXMgaW1wbGljaXRseTwvaW5zPiBjb252ZXJ0aWJsZSB0byA8dHQ+VCo8L3R0Pi4KPC9wPjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI2ODkiPjwvYT42ODkuIHJlZmVyZW5jZV93cmFwcGVyIGNvbnN0cnVjdG9yIG92ZXJseSBjb25zdHJhaW5lZDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMC42LjUuMSBbcmVmd3JhcC5jb25zdF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gUGV0ZXIgRGltb3YgPGI+RGF0ZTo8L2I+IDIwMDctMDUtMTA8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3JlZndyYXAuY29uc3QiPmlzc3VlczwvYT4gaW4gW3JlZndyYXAuY29uc3RdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGNvbnN0cnVjdG9yIG9mIDx0dD5yZWZlcmVuY2Vfd3JhcHBlcjwvdHQ+IGlzIGN1cnJlbnRseSA8dHQ+ZXhwbGljaXQ8L3R0Pi4gVGhlIHByaW1hcnkKbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBpcyB0aGUgc2FmZXR5IHByb2JsZW0gd2l0aCByZXNwZWN0IHRvIHJ2YWx1ZXMsCndoaWNoIGlzIGFkZHJlc3NlZCBieSB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBvZiB0aGUgcHJldmlvdXMgaXNzdWUuClRoZXJlZm9yZSB3ZSBzaG91bGQgY29uc2lkZXIgcmVsYXhpbmcgdGhlIHJlcXVpcmVtZW50cyBvbiB0aGUKY29uc3RydWN0b3Igc2luY2UgcmVxdWVzdHMgZm9yIHRoZSBpbXBsaWNpdCBjb252ZXJzaW9uIGtlZXAgcmVzdXJmYWNpbmcuCjwvcD4KPHA+CkFsc28gcGxlYXNlIHNlZSB0aGUgdGhyZWFkIHN0YXJ0aW5nIGF0IGMrK3N0ZC1saWItMTczOTggZm9yIHNvbWUgZ29vZCBkaXNjdXNzaW9uIG9uIHRoaXMgc3ViamVjdC4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlbW92ZSB0aGUgPHR0PmV4cGxpY2l0PC90dD4gZnJvbSB0aGUgY29uc3RydWN0b3Igb2YgPHR0PnJlZmVyZW5jZV93cmFwcGVyPC90dD4uIElmIHRoZQpwcm9wb3NlZCByZXNvbHV0aW9uIG9mIHRoZSBwcmV2aW91cyBpc3N1ZSBpcyBhY2NlcHRlZCwgcmVtb3ZlIHRoZQo8dHQ+ZXhwbGljaXQ8L3R0PiBmcm9tIHRoZSA8dHQ+VCZhbXA7JmFtcDs8L3R0PiBjb25zdHJ1Y3RvciBhcyB3ZWxsIHRvIGtlZXAgdGhlbSBpbiBzeW5jLgo8L3A+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjkzIj48L2E+NjkzLiA8Y29kZT5zdGQ6OmJpdHNldDo6YWxsKCk8L2NvZGU+IG1pc3Npbmc8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMy41IFt0ZW1wbGF0ZS5iaXRzZXRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwNy0wNi0yMjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjdGVtcGxhdGUuYml0c2V0Ij5pc3N1ZXM8L2E+IGluIFt0ZW1wbGF0ZS5iaXRzZXRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlICA8Y29kZT5iaXRzZXQ8L2NvZGU+IGNsYXNzIHRlbXBsYXRlICBwcm92aWRlcyB0aGUgIG1lbWJlciBmdW5jdGlvbgo8Y29kZT5hbnkoKTwvY29kZT4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gIG9iamVjdCBvZiB0aGUgdHlwZSBoYXMgYW55CmJpdHMgIHNldCwgYW5kICB0aGUgbWVtYmVyICBmdW5jdGlvbiA8Y29kZT5ub25lKCk8L2NvZGU+ICB0byBkZXRlcm1pbmUKd2hldGhlciBhbGwgb2YgYW4gb2JqZWN0J3MgIGJpdHMgYXJlIGNsZWFyLiBIb3dldmVyLCB0aGUgdGVtcGxhdGUgZG9lcwpub3QgICBwcm92aWRlICBhICAgY29ycmVzcG9uZGluZyAgZnVuY3Rpb24gICB0byAgZGlzY292ZXIgICB3aGV0aGVyICBhCjxjb2RlPmJpdHNldDwvY29kZT4gIG9iamVjdCAgaGFzICBhbGwgIGl0cyAgYml0cyAgc2V0LiAgIFdoaWxlICBpdCAgaXMKcG9zc2libGUsICBldmVuIGVhc3ksICB0byAgb2J0YWluIHRoaXMgIGluZm9ybWF0aW9uICBieSBjb21wYXJpbmcgIHRoZQpyZXN1bHQgb2YgPGNvZGU+Y291bnQoKTwvY29kZT4gIHdpdGggdGhlIHJlc3VsdCBvZiA8Y29kZT5zaXplKCk8L2NvZGU+CmZvciAgZXF1YWxpdHkgIChpLmUuLCAgdmlhICA8Y29kZT5iLmNvdW50KCkgID09ICBiLnNpemUoKTwvY29kZT4pICB0aGUKb3BlcmF0aW9uICBpcyAgIGxlc3MgIGVmZmljaWVudCAgIHRoYW4gIGEgIG1lbWJlciAgIGZ1bmN0aW9uICBkZXNpZ25lZApzcGVjaWZpY2FsbHkgIGZvciB0aGF0IHB1cnBvc2UgIGNvdWxkIGJlLiAgICg8Y29kZT5jb3VudCgpPC9jb2RlPiBtdXN0CmNvdW50ICBhbGwgbm9uLXplcm8gYml0cyAgaW4gYSAgPGNvZGU+Yml0c2V0PC9jb2RlPiBhICB3b3JkIGF0ICBhIHRpbWUKd2hpbGUgPGNvZGU+YWxsKCk8L2NvZGU+IGNvdWxkIHN0b3AgY291bnRpbmcgYXMgc29vbiBhcyBpdCBlbmNvdW50ZXJlZAp0aGUgZmlyc3Qgd29yZCB3aXRoIGEgemVybyBiaXQpLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkICBhIGRlY2xhcmF0aW9uIG9mIHRoZSBuZXcgIG1lbWJlciBmdW5jdGlvbiA8Y29kZT5hbGwoKTwvY29kZT4gdG8gdGhlCmRlZmludGlvbiBvZiB0aGUgPGNvZGU+Yml0c2V0PC9jb2RlPiB0ZW1wbGF0ZSBpbiAyMy4zLjUgW3RlbXBsYXRlLmJpdHNldF0sIHAxLApyaWdodCBhYm92ZSB0aGUgZGVjbGFyYXRpb24gb2YgPGNvZGU+YW55KCk8L2NvZGU+IGFzIHNob3duIGJlbG93Ogo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPmJvb2wgb3BlcmF0b3IhPShjb25zdCBiaXRzZXQmbHQ7TiZndDsmYW1wOyByaHMpIGNvbnN0Owpib29sIHRlc3Qoc2l6ZV90IHBvcykgY29uc3Q7CjxpbnM+Ym9vbCBhbGwoKSBjb25zdDs8L2lucz4KYm9vbCBhbnkoKSBjb25zdDsKYm9vbCBub25lKCkgY29uc3Q7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpBZGQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbmV3IG1lbWJlciBmdW5jdGlvbiB0byB0aGUgZW5kIG9mIDIzLjMuNS4yIFtiaXRzZXQubWVtYmVyc10gd2l0aCB0aGUgZm9sbG93aW5nIHRleHQ6CjwvcD4KPGJsb2NrcXVvdGU+PHA+Cjxjb2RlPmJvb2wgYWxsKCkgY29uc3Q7PC9jb2RlPgo8L3A+CjxibG9ja3F1b3RlPgo8aT5SZXR1cm5zPC9pPjogPGNvZGU+Y291bnQoKSA9PSBzaXplKCk8L2NvZGU+Lgo8L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCjxwPgpJbiAgYWRkaXRpb24sICAgY2hhbmdlICB0aGUgIGRlc2NyaXB0aW9uICAgb2YgIDxjb2RlPmFueSgpPC9jb2RlPiAgYW5kCjxjb2RlPm5vbmUoKTwvY29kZT4gICBmb3IgIGNvbnNpc3RlbmN5ICAgd2l0aCAgIDxjb2RlPmFsbCgpPC9jb2RlPiAgYXMKZm9sbG93czoKPC9wPgo8YmxvY2txdW90ZT48cD4KPGNvZGU+Ym9vbCBhbnkoKSBjb25zdDs8L2NvZGU+CjwvcD4KPGJsb2NrcXVvdGU+CjxwPgo8aT5SZXR1cm5zPC9pPjogPGRlbD48Y29kZT50cnVlPC9jb2RlPiBpZiBhbnkgYml0IGluIDxjb2RlPip0aGlzPC9jb2RlPgppcyBvbmU8L2RlbD48aW5zPjxjb2RlPmNvdW50KCkgIT0gMDwvY29kZT48L2lucz4uCjwvcD4KPC9ibG9ja3F1b3RlPgo8cD4KPGNvZGU+Ym9vbCBub25lKCkgY29uc3Q7PC9jb2RlPgo8L3A+CjxibG9ja3F1b3RlPgo8cD4KPGk+UmV0dXJuczwvaT46IDxkZWw+PGNvZGU+dHJ1ZTwvY29kZT4gaWYgbm8gYml0IGluIDxjb2RlPip0aGlzPC9jb2RlPgppcyBvbmU8L2RlbD48aW5zPjxjb2RlPmNvdW50KCkgPT0gMDwvY29kZT48L2lucz4uCjwvcD4KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjk0Ij48L2E+Njk0LiA8Y29kZT5zdGQ6OmJpdHNldDwvY29kZT4gYW5kIDxjb2RlPmxvbmcgbG9uZzwvY29kZT48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMy41IFt0ZW1wbGF0ZS5iaXRzZXRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hcnRpbiBTZWJvciA8Yj5EYXRlOjwvYj4gMjAwNy0wNi0yMjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjdGVtcGxhdGUuYml0c2V0Ij5pc3N1ZXM8L2E+IGluIFt0ZW1wbGF0ZS5iaXRzZXRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KT2JqZWN0cyBvZiB0aGUgIDxjb2RlPmJpdHNldDwvY29kZT4gY2xhc3MgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIGNhbgpiZSBjb25zdHJ1Y3RlZCBmcm9tICBhbmQgZXhwbGljaXRseSBjb252ZXJ0ZWQgdG8gdmFsdWVzICBvZiB0aGUgd2lkZXN0CkMrKyBpbnRlZ2VyICB0eXBlLCA8Y29kZT51bnNpZ25lZCBsb25nPC9jb2RlPi4gICBXaXRoIHRoZSBpbnRyb2R1Y3Rpb24Kb2YgIDxjb2RlPmxvbmcgbG9uZzwvY29kZT4gaW50byAgdGhlIGxhbmd1YWdlICB0aGUgdGVtcGxhdGUgIHNob3VsZCBiZQplbmhhbmNlZCB0byBtYWtlIGl0IHBvc3NpYmxlICB0byBpbnRlcm9wZXJhdGUgd2l0aCB2YWx1ZXMgb2YgdGhpcyB0eXBlCmFzIHdlbGwsIG9yICBwZXJoYXBzIDxjb2RlPnVpbnRtYXhfdDwvY29kZT4uICBTZWUgYysrc3RkLWxpYi0xODI3NCBmb3IKYSBicmllZiBkaXNjdXNzaW9uIGluIHN1cHBvcnQgb2YgdGhpcyBjaGFuZ2UuCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpGb3Igc2ltcGxpY2l0eSwgIGluc3RlYWQgb2YgIGFkZGluZyBvdmVybG9hZHMgZm9yICA8Y29kZT51bnNpZ25lZCBsb25nCmxvbmc8L2NvZGU+IGFuZCBkZWFsaW5nIHdpdGggcG9zc2libGUgYW1iaWd1aXRpZXMgaW4gdGhlIHNwZWMsIHJlcGxhY2UKdGhlIDxjb2RlPmJpdHNldDwvY29kZT4gY3RvciAgdGhhdCB0YWtlcyBhbiA8Y29kZT51bnNpZ25lZCBsb25nPC9jb2RlPgphcmd1bWVudCAgd2l0aCAgb25lICB0YWtpbmcgIDxjb2RlPnVuc2lnbmVkIGxvbmcgIGxvbmc8L2NvZGU+ICBpbiAgdGhlCmRlZmluaXRpb24gIG9mIHRoZSAgdGVtcGxhdGUgYXMgIHNob3duIGJlbG93LiAgIChUaGUgIHN0YW5kYXJkIHBlcm1pdHMKaW1wbGVtZW50YXRpb25zICB0byBhZGQgIG92ZXJsb2FkcyBvbiAgb3RoZXIgaW50ZWdlciAgdHlwZXMgIG9yIGVtcGxveQp0ZW1wbGF0ZSB0cmlja3MgdG8gIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IHByb3ZpZGVkICB0aGV5IGRvbid0IGNhdXNlCmFtYmlndWl0aWVzIG9yIGNoYW5nZXMgaW4gYmVoYXZpb3IuKQo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPi8vIFtiaXRzZXQuY29uc10gY29uc3RydWN0b3JzOgpiaXRzZXQoKTsKYml0c2V0KHVuc2lnbmVkIDxpbnM+bG9uZzwvaW5zPiBsb25nIHZhbCk7CnRlbXBsYXRlJmx0O2NsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvciZndDsKZXhwbGljaXQgYml0c2V0KAogICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7JmFtcDsgc3RyLAogICAgICAgICAgICAgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7OjpzaXplX3R5cGUgcG9zID0gMCwKICAgICAgICAgICAgICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0Ozo6c2l6ZV90eXBlIG4gPQogICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0Ozo6bnBvcyk7CjwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPgpNYWtlIGEgY29ycmVzcG9uZGluZyBjaGFuZ2UgaW4gMjMuMy41LjEgW2JpdHNldC5jb25zXSwgcDI6CjwvcD4KPGJsb2NrcXVvdGU+CjxwPgo8Y29kZT5iaXRzZXQodW5zaWduZWQgPGlucz5sb25nPC9pbnM+IGxvbmcgdmFsKTs8L2NvZGU+CjwvcD4KPGJsb2NrcXVvdGU+CjxpPkVmZmVjdHM8L2k+OiAgQ29uc3RydWN0cyAgIGFuICBvYmplY3QgIG9mICAgY2xhc3MgIGJpdHNldCZsdDtOJmd0OywKaW5pdGlhbGl6aW5nICB0aGUgIGZpcnN0IDxjb2RlPjxpPk08L2k+PC9jb2RlPiAgYml0ICBwb3NpdGlvbnMgdG8gIHRoZQpjb3JyZXNwb25kaW5nICAgICAgYml0ICAgICB2YWx1ZXMgICAgICBpbiAgICAgPGNvZGU+PGk+dmFsPC9pPjwvY29kZT4uCjxjb2RlPjxpPk08L2k+PC9jb2RlPiBpcyB0aGUgIHNtYWxsZXIgb2YgPGNvZGU+PGk+TjwvaT48L2NvZGU+IGFuZCB0aGUKbnVtYmVyIG9mIGJpdHMgaW4gIHRoZSB2YWx1ZSByZXByZXNlbnRhdGlvbiAoc2VjdGlvbiBbYmFzaWMudHlwZXNdKSBvZgo8Y29kZT51bnNpZ25lZCAgPGlucz4gbG9uZzwvaW5zPiBsb25nPC9jb2RlPi4gICBJZiAgPGNvZGU+PGk+TTwvaT4gJmx0Owo8aT5OPC9pPjwvY29kZT4gIDxpbnM+aXMgIDxjb2RlPnRydWU8L2NvZGU+PC9pbnM+LCAgdGhlIHJlbWFpbmluZyAgYml0CnBvc2l0aW9ucyBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KQWRkaXRpb25hbGx5LCBpbnRyb2R1Y2UgYSBuZXcgbWVtYmVyIGZ1bmN0aW9uIDxjb2RlPnRvX3VsbG9uZygpPC9jb2RlPgp0byBtYWtlICBpdCBwb3NzaWJsZSB0byAgY29udmVydCA8Y29kZT5iaXRzZXQ8L2NvZGU+IHRvIHZhbHVlcyAgb2YgdGhlCm5ldyAgdHlwZS4gQWRkICB0aGUgZm9sbG93aW5nICBkZWNsYXJhdGlvbiAgdG8gdGhlICBkZWZpbml0aW9uIG9mICB0aGUKdGVtcGxhdGUsIGltbWVkaWF0ZSAgYWZ0ZXIgdGhlIGRlY2xhcmF0aW9uICBvZiA8Y29kZT50b191bG9uZygpPC9jb2RlPgppbiAyMy4zLjUgW3RlbXBsYXRlLmJpdHNldF0sIHAxLCBhcyBzaG93biBiZWxvdzoKPC9wPgo8YmxvY2txdW90ZT4KPHByZT4vLyBlbGVtZW50IGFjY2VzczoKYm9vbCBvcGVyYXRvcltdKHNpemVfdCBwb3MpIGNvbnN0OyAvLyBmb3IgYltpXTsKcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90IHBvcyk7IC8vIGZvciBiW2ldOwp1bnNpZ25lZCBsb25nIHRvX3Vsb25nKCkgY29uc3Q7CjxpbnM+dW5zaWduZWQgbG9uZyBsb25nIHRvX3VsbG9uZygpIGNvbnN0OzwvaW5zPgp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yJmd0OwpiYXNpY19zdHJpbmcmbHQ7Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yJmd0OyB0b19zdHJpbmcoKSBjb25zdDsKPC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+CkFuZCBhZGQgYSBkZXNjcmlwdGlvbiBvZiAgdGhlIG5ldyBtZW1iZXIgZnVuY3Rpb24gdG8gMjMuMy41LjIgW2JpdHNldC5tZW1iZXJzXSwKYmVsb3cgIHRoZSAgZGVzY3JpcHRpb24gb2YgIHRoZSAgZXhpc3RpbmcgPGNvZGU+dG9fdWxvbmcoKTwvY29kZT4gIChpZgpwb3NzaWJsZSksIHdpdGggdGhlIGZvbGxvd2luZyB0ZXh0Ogo8L3A+CjxibG9ja3F1b3RlPgo8cD4KPGNvZGU+dW5zaWduZWQgbG9uZyBsb25nIHRvX3VsbG9uZygpIGNvbnN0OzwvY29kZT4KPC9wPgo8YmxvY2txdW90ZT4KPGk+VGhyb3dzPC9pPjogIDxjb2RlPm92ZXJmbG93X2Vycm9yPC9jb2RlPiAgIGlmICB0aGUgIGludGVncmFsICB2YWx1ZQo8Y29kZT48aT54PC9pPjwvY29kZT4gY29ycmVzcG9uZGluZyB0byAgdGhlIGJpdHMgaW4gPGNvZGU+KnRoaXM8L2NvZGU+CmNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyB0eXBlIDxjb2RlPnVuc2lnbmVkIGxvbmcgbG9uZzwvY29kZT4uCjwvYmxvY2txdW90ZT4KPGJsb2NrcXVvdGU+CjxpPlJldHVybnM6PC9pPiA8Y29kZT48aT54PC9pPjwvY29kZT4uCjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjY5NSI+PC9hPjY5NS4gY3R5cGUmbHQ7Y2hhciZndDs6OmNsYXNzaWNfdGFibGUoKSBub3QgYWNjZXNzaWJsZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMi4yLjEuMyBbZmFjZXQuY3R5cGUuc3BlY2lhbF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFydGluIFNlYm9yIDxiPkRhdGU6PC9iPiAyMDA3LTA2LTIyPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpUaGUgICA8Y29kZT5jdHlwZSZsdDtjaGFyJmd0Ozo6Y2xhc3NpY190YWJsZSgpPC9jb2RlPiAgIHN0YXRpYyAgbWVtYmVyCmZ1bmN0aW9uICAgIHJldHVybnMgICAgYSAgICBwb2ludGVyICAgIHRvICAgYW4gICAgYXJyYXkgICAgb2YgICAgY29uc3QKPGNvZGU+Y3R5cGVfYmFzZTo6bWFzazwvY29kZT4gICAgb2JqZWN0cyAgICAoZW51bXMpICAgdGhhdCAgICBjb250YWlucwo8Y29kZT5jdHlwZSZsdDtjaGFyJmd0Ozo6dGFibGVfc2l6ZTwvY29kZT4gICAgZWxlbWVudHMuICAgIFRoZSAgIHRhYmxlCmRlc2NyaWJlcyB0aGUgcHJvcGVydGllcyBvZiB0aGUgY2hhcmFjdGVyIHNldCBpbiB0aGUgIkMiIGxvY2FsZSAoaS5lLiwKd2hldGhlciBhICBjaGFyYWN0ZXIgYXQgYW4gaW5kZXggIGdpdmVuIGJ5IGl0cyB2YWx1ZSAgaXMgYWxwaGEsIGRpZ2l0LApwdW5jdCwgICBldGMuKSwgICBhbmQgICBpcyAgICB0eXBpY2FsbHkgICB1c2VkICAgdG8gICBpbml0aWFsaXplICAgdGhlCjxjb2RlPmN0eXBlJmx0O2NoYXImZ3Q7PC9jb2RlPiAgZmFjZXQgaW4gdGhlICBjbGFzc2ljICJDIiAgbG9jYWxlICh0aGUKcHJvdGVjdGVkICAgICAgPGNvZGU+Y3R5cGUmbHQ7Y2hhciZndDs8L2NvZGU+ICAgICAgbWVtYmVyICAgICBmdW5jdGlvbgo8Y29kZT50YWJsZSgpPC9jb2RlPiAgICB0aGVuICAgIHJldHVybnMgICAgIHRoZSAgICBzYW1lICAgIHZhbHVlICAgIGFzCjxjb2RlPmNsYXNzaWNfdGFibGUoKTwvY29kZT4pLgo8L3A+CjxwPgpIb3dldmVyLCB3aGlsZSA8Y29kZT5jdHlwZSZsdDtjaGFyJmd0Ozo6dGFibGVfc2l6ZTwvY29kZT4gKHRoZSBzaXplIG9mCnRoZSAgIHRhYmxlKSAgICBpcyAgIGEgICBwdWJsaWMgICAgc3RhdGljICAgY29uc3QgICBtZW1iZXIgICAgb2YgICB0aGUKPGNvZGU+Y3R5cGUmbHQ7Y2hhciZndDs8L2NvZGU+ICAgICAgICAgICBzcGVjaWFsaXphdGlvbiwgICAgICAgICAgIHRoZQo8Y29kZT5jbGFzc2ljX3RhYmxlKCk8L2NvZGU+IHN0YXRpYyBtZW1iZXIgZnVuY3Rpb24gaXMgcHJvdGVjdGVkLiBUaGF0Cm1ha2VzIGdldHRpbmcgYXQgdGhlIGNsYXNzaWMgIGRhdGEgbGVzcyB0aGFuIGNvbnZlbmllbnQgKGkuZS4sIG9uZSBoYXMKdG8gY3JlYXRlICBhIHdob2xlIGRlcml2ZWQgY2xhc3MganVzdCAgdG8gZ2V0IGF0IHRoZSAgbWFza3MgYXJyYXkpLiBJdAptYWtlcyAgbGl0dGxlIHNlbnNlICB0byBleHBvc2UgIHRoZSBzaXplICBvZiB0aGUgIHRhYmxlIGluICB0aGUgcHVibGljCmludGVyZmFjZSB3aGlsZSBtYWtpbmcgdGhlIHRhYmxlIGl0c2VsZiBwcm90ZWN0ZWQsIGVzcGVjaWFsbHkgd2hlbiB0aGUKdGFibGUgaXMgYSBjb25zdGFudCBvYmplY3QuCjwvcD4KPHA+ClRoZSAgc2FtZSBhcmd1bWVudCAgY2FuIGJlICBtYWRlIGZvciAgdGhlIG5vbi1zdGF0aWMgIHByb3RlY3RlZCBtZW1iZXIKZnVuY3Rpb24gPGNvZGU+dGFibGUoKTwvY29kZT4uCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpNYWtlICAgICB0aGUgICAgPGNvZGU+Y3R5cGUmbHQ7Y2hhciZndDs6OmNsYXNzaWNfdGFibGUoKTwvY29kZT4gICAgYW5kCjxjb2RlPmN0eXBlJmx0O2NoYXImZ3Q7Ojp0YWJsZSgpPC9jb2RlPiAgbWVtYmVyICBmdW5jdGlvbnMgIHB1YmxpYyAgYnkKbW92aW5nIHRoZWlyIGRlY2xhcmF0aW9ucyBpbnRvIHRoZSBwdWJsaWMgc2VjdGlvbiBvZiB0aGUgZGVmaW5pdGlvbiBvZgpzcGVjaWFsaXphdGlvbiBpbiAyMi4yLjEuMyBbZmFjZXQuY3R5cGUuc3BlY2lhbF0gYXMgc2hvd24gYmVsb3c6CjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+ICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSBJTVBMRU1FTlRBVElPTl9ERUZJTkVEOwo8ZGVsPnByb3RlY3RlZDo8L2RlbD4KICBjb25zdCBtYXNrKiB0YWJsZSgpIGNvbnN0IHRocm93KCk7CiAgc3RhdGljIGNvbnN0IG1hc2sqIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpOwo8aW5zPnByb3RlY3RlZDo8L2lucz4KCn5jdHlwZSgpOyAvLyB2aXJ0dWFsCnZpcnR1YWwgY2hhciBkb190b3VwcGVyKGNoYXIgYykgY29uc3Q7CjwvcHJlPgo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNjk5Ij48L2E+Njk5LiBOMjExMSBjaGFuZ2VzIG1pbi9tYXg8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuNCBbcmFuZF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gUC5KLiBQbGF1Z2VyIDxiPkRhdGU6PC9iPiAyMDA3LTA3LTAxPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNyYW5kIj5pc3N1ZXM8L2E+IGluIFtyYW5kXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDYvbjIxMTEucGRmIj5OMjExMTwvYT4KY2hhbmdlcyA8dHQ+bWluL21heDwvdHQ+IGluIHNldmVyYWwgcGxhY2VzIGluIHJhbmRvbSBmcm9tIG1lbWJlcgpmdW5jdGlvbnMgdG8gc3RhdGljIGRhdGEgbWVtYmVycy4gSSBiZWxpZXZlIHRoaXMgaW50cm9kdWNlcwphIG5lZWRsZXNzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcHJvYmxlbSBiZXR3ZWVuIEMrKzBYIGFuZApUUjEuIEknZCBsaWtlIHVzIHRvIGZpbmQgbmV3IG5hbWVzIGZvciB0aGUgc3RhdGljIGRhdGEgbWVtYmVycywKb3IgcGVyaGFwcyBjaGFuZ2UgPHR0Pm1pbi9tYXg8L3R0PiB0byA8dHQ+Y29uc3RleHByPC90dD5zIGluIEMrKzBYLgo8L3A+Cgo8cD4KU2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjIzOTEucGRmIj5OMjM5MTwvYT4gYW5kCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjI0MjMucGRmIj5OMjQyMzwvYT4KZm9yIHNvbWUgZnVydGhlciBkaXNjdXNzaW9uLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRvcHQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaW4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNy9uMjQyMy5wZGYiPk4yNDIzPC9hPi4KPC9wPgoKCjxwPjxpPlsKS29uYSAoMjAwNyk6IFRoZSBMV0cgYWRvcHRlZCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBvZiBOMjQyMyBmb3IgdGhpcyBpc3N1ZS4KVGhlIExXRyB2b3RlZCB0byBhY2NlbGVyYXRlIHRoaXMgaXNzdWUgdG8gUmVhZHkgc3RhdHVzIHRvIGJlIHZvdGVkIGludG8gdGhlIFdQIGF0IEtvbmEuCl08L2k+PC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjcwMCI+PC9hPjcwMC4gTjE4NTYgZGVmaW5lcyBzdHJ1Y3QgPHR0PmlkZW50aXR5PC90dD48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAuMi4yIFtmb3J3YXJkXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBQLkouIFBsYXVnZXIgPGI+RGF0ZTo8L2I+IDIwMDctMDctMDE8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNmb3J3YXJkIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbZm9yd2FyZF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNmb3J3YXJkIj5pc3N1ZXM8L2E+IGluIFtmb3J3YXJkXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDUvbjE4NTYuaHRtbCI+TjE4NTY8L2E+CmRlZmluZXMgc3RydWN0IDx0dD5pZGVudGl0eTwvdHQ+IGluIDx0dD4mbHQ7dXRpbGl0eSZndDs8L3R0PiB3aGljaCBjbGFzaGVzIHdpdGgKdGhlIHRyYWRpdGlvbmFsIGRlZmluaXRpb24gb2Ygc3RydWN0IDx0dD5pZGVudGl0eTwvdHQ+IGluIDx0dD4mbHQ7ZnVuY3Rpb25hbCZndDs8L3R0Pgoobm90IHN0YW5kYXJkLCBidXQgYSBjb21tb24gZXh0ZW5zaW9uIGZyb20gb2xkIFNUTCkuIEJlIG5pY2UKaWYgd2UgY291bGQgYXZvaWQgdGhpcyBuYW1lIGNsYXNoIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIDIwLjIuMiBbZm9yd2FyZF06CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OyBzdHJ1Y3QgaWRlbnRpdHkKewogICAgdHlwZWRlZiBUIHR5cGU7CiAgICA8aW5zPmNvbnN0IFQmYW1wOyBvcGVyYXRvcigpKGNvbnN0IFQmYW1wOyB4KSBjb25zdDs8L2lucz4KfTsKPC9wcmU+CjxibG9ja3F1b3RlPgo8cHJlPjxpbnM+Y29uc3QgVCZhbXA7IG9wZXJhdG9yKCkoY29uc3QgVCZhbXA7IHgpIGNvbnN0OzwvaW5zPgo8L3ByZT4KPGJsb2NrcXVvdGU+CjxwPgo8aW5zPjxpPlJldHVybnM6PC9pPiA8dHQ+eDwvdHQ+LjwvaW5zPgo8L3A+CjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKPC9ibG9ja3F1b3RlPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3MDMiPjwvYT43MDMuIDx0dD5tYXA6OmF0KCk8L3R0PiBuZWVkIGEgY29tcGxleGl0eSBzcGVjaWZpY2F0aW9uPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjMuMS4yIFttYXAuYWNjZXNzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBKb2UgR290dG1hbiA8Yj5EYXRlOjwvYj4gMjAwNy0wNy0wMzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjbWFwLmFjY2VzcyI+aXNzdWVzPC9hPiBpbiBbbWFwLmFjY2Vzc10uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgo8dHQ+bWFwOjphdCgpPC90dD4gbmVlZCBhIGNvbXBsZXhpdHkgc3BlY2lmaWNhdGlvbi4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uIG9mIDx0dD5tYXA6OmF0KCk8L3R0PiwgMjMuMy4xLjIgW21hcC5hY2Nlc3NdOgo8L3A+CjxibG9ja3F1b3RlPgo8cD4KPGk+Q29tcGxleGl0eTo8L2k+IGxvZ2FyaXRobWljLgo8L3A+CjwvYmxvY2txdW90ZT4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3MDUiPjwvYT43MDUuIHR5cGUtdHJhaXQgPHR0PmRlY2F5PC90dD4gaW5jb21wbGV0ZWx5IHNwZWNpZmllZDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMC41LjcgW21ldGEudHJhbnMub3RoZXJdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFRob3JzdGVuIE90dG9zZW4gPGI+RGF0ZTo8L2I+IDIwMDctMDctMDg8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNtZXRhLnRyYW5zLm90aGVyIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbbWV0YS50cmFucy5vdGhlcl0uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNtZXRhLnRyYW5zLm90aGVyIj5pc3N1ZXM8L2E+IGluIFttZXRhLnRyYW5zLm90aGVyXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBjdXJyZW50IHdvcmtpbmcgZHJhZnQgaGFzIGEgdHlwZS10cmFpdCA8dHQ+ZGVjYXk8L3R0PiBpbiAyMC41LjcgW21ldGEudHJhbnMub3RoZXJdLgo8L3A+Cgo8cD4KSXRzIHVzZSBpcyB0byB0dXJuIEMrKzAzIHBhc3MtYnktdmFsdWUgcGFyYW1ldGVycyBpbnRvIGVmZmljaWVudCBDKysweApwYXNzLWJ5LXJ2YWx1ZS1yZWZlcmVuY2UgcGFyYW1ldGVycy4gSG93ZXZlciwgdGhlIGN1cnJlbnQgZGVmaW5pdGlvbgppbnRyb2R1Y2VzIGFuIGluY29tcGF0aWJsZSBjaGFuZ2Ugd2hlcmUgdGhlIGN2LXF1YWxpZmljYXRpb24gb2YgdGhlCnBhcmFtZXRlciB0eXBlIGlzIHJldGFpbmVkLiBUaGUgZGVkdWNlZCB0eXBlIHNob3VsZCBsb29zZSBzdWNoCmN2LXF1YWxpZmljYXRpb24sIGFzIHBhc3MtYnktdmFsdWUgZG9lcy4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDIwLjUuNyBbbWV0YS50cmFucy5vdGhlcl0gY2hhbmdlIHRoZSBsYXN0IHNlbnRlbmNlOgo8L3A+Cgo8YmxvY2txdW90ZT48cD4KT3RoZXJ3aXNlIHRoZSAgbWVtYmVyIHR5cGVkZWYgPHR0PnR5cGU8L3R0PiBlcXVhbHMgPHR0PjxpbnM+cmVtb3ZlX2N2Jmx0OzwvaW5zPlU8aW5zPiZndDs6OnR5cGU8L2lucz48L3R0Pi4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpJbiAyMC40LjEuMyBbdHVwbGUuY3JlYXRpb25dLzEgY2hhbmdlOgo8L3A+Cgo8YmxvY2txdW90ZT48cD4KPGRlbD53aGVyZSBlYWNoIDx0dD5WaTwvdHQ+IGluIDx0dD5WVHlwZXM8L3R0PiBpcyA8dHQ+WCZhbXA7PC90dD4gaWYsIGZvciB0aGUKY29ycmVzcG9uZGluZyB0eXBlIDx0dD5UaTwvdHQ+IGluIDx0dD5UeXBlczwvdHQ+LAo8dHQ+cmVtb3ZlX2N2Jmx0O3JlbW92ZV9yZWZlcmVuY2UmbHQ7VGkmZ3Q7Ojp0eXBlJmd0Ozo6dHlwZTwvdHQ+IGVxdWFscwo8dHQ+cmVmZXJlbmNlX3dyYXBwZXImbHQ7WCZndDs8L3R0Piwgb3RoZXJ3aXNlIDx0dD5WaTwvdHQ+IGlzCjx0dD5kZWNheSZsdDtUaSZndDs6OnR5cGU8L3R0Pi48L2RlbD4KPGlucz5MZXQgPHR0PlVpPC90dD4gYmUgPHR0PmRlY2F5Jmx0O1RpJmd0Ozo6dHlwZTwvdHQ+IGZvciBlYWNoCjx0dD5UaTwvdHQ+IGluIDx0dD5UeXBlczwvdHQ+LiBUaGVuIGVhY2ggPHR0PlZpPC90dD4gaW4gPHR0PlZUeXBlczwvdHQ+CmlzIDx0dD5YJmFtcDs8L3R0PiBpZiA8dHQ+VWk8L3R0PiBlcXVhbHMKPHR0PnJlZmVyZW5jZV93cmFwcGVyJmx0O1gmZ3Q7PC90dD4sIG90aGVyd2lzZSA8dHQ+Vmk8L3R0PiBpcwo8dHQ+VWk8L3R0Pi48L2lucz4KPC9wPjwvYmxvY2txdW90ZT4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNzA2Ij48L2E+NzA2LiA8dHQ+bWFrZV9wYWlyKCk8L3R0PiBzaG91bGQgYmVoYXZlIGFzIDx0dD5tYWtlX3R1cGxlKCk8L3R0PiB3cnQuIDx0dD5yZWZlcmVuY2Vfd3JhcHBlcigpPC90dD48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAuMi4zIFtwYWlyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gVGhvcnN0ZW4gT3R0b3NlbiA8Yj5EYXRlOjwvYj4gMjAwNy0wNy0wODwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjcGFpcnMiPmlzc3VlczwvYT4gaW4gW3BhaXJzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBjdXJyZW50IGRyYWZ0IGhhcyA8dHQ+bWFrZV9wYWlyKCk8L3R0PiBpbiAyMC4yLjMgW3BhaXJzXS8xNgphbmQgPHR0Pm1ha2VfdHVwbGUoKTwvdHQ+IGluIDIwLjQuMS4zIFt0dXBsZS5jcmVhdGlvbl0uCjx0dD5tYWtlX3R1cGxlKCk8L3R0PiBkZXRlY3RzIHRoZSBwcmVzZW5jZSBvZgo8dHQ+cmVmZXJlbmNlX3dyYXBwZXImbHQ7WCZndDs8L3R0PiBhcmd1bWVudHMgYW5kICJ1bndyYXBzIiB0aGUgcmVmZXJlbmNlIGluCnN1Y2ggY2FzZXMuIDx0dD5tYWtlX3BhaXIoKTwvdHQ+IHdvdWxkIE9UT0ggY3JlYXRlIGEKPHR0PnJlZmVyZW5jZV93cmFwcGVyJmx0O1gmZ3Q7PC90dD4gbWVtYmVyLiBJIHN1Z2dlc3QgdGhhdCB0aGUgdHdvCmZ1bmN0aW9ucyBhcmUgbWFkZSB0byBiZWhhdmUgc2ltaWxhciBpbiB0aGlzIHJlc3BlY3QgdG8gbWluaW1pemUKY29uZnVzaW9uLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjAuMiBbdXRpbGl0eV0gY2hhbmdlIHRoZSBzeW5vcHNpcyBmb3IgbWFrZV9wYWlyKCkgdG8gcmVhZAo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBUMSwgY2xhc3MgVDImZ3Q7CiAgcGFpciZsdDs8ZGVsPnR5cGVuYW1lIGRlY2F5Jmx0O1QxJmd0Ozo6dHlwZTwvZGVsPiA8aW5zPlYxPC9pbnM+LCA8ZGVsPnR5cGVuYW1lIGRlY2F5Jmx0O1QyJmd0Ozo6dHlwZTwvZGVsPiA8aW5zPlYyPC9pbnM+Jmd0OyBtYWtlX3BhaXIoVDEmYW1wOyZhbXA7LCBUMiZhbXA7JmFtcDspOwo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KSW4gMjAuMi4zIFtwYWlyc10vMTYgY2hhbmdlIHRoZSBkZWNsYXJhdGlvbiB0byBtYXRjaCB0aGUgYWJvdmUgc3lub3BzaXMuClRoZW4gY2hhbmdlIHRoZSAyMC4yLjMgW3BhaXJzXS8xNyB0bzoKPC9wPgoKPGJsb2NrcXVvdGU+CjxwPgo8aT5SZXR1cm5zOjwvaT4gPHR0PnBhaXImbHQ7PGRlbD50eXBlbmFtZSBkZWNheSZsdDtUMSZndDs6OnR5cGU8L2RlbD4gPGlucz5WMTwvaW5zPiw8ZGVsPnR5cGVuYW1lIGRlY2F5Jmx0O1QyJmd0Ozo6dHlwZTwvZGVsPiA8aW5zPlYyPC9pbnM+Jmd0Oyhmb3J3YXJkJmx0O1QxJmd0Oyh4KSxmb3J3YXJkJmx0O1QyJmd0Oyh5KSk8L3R0PiA8aW5zPndoZXJlIDx0dD5WMTwvdHQ+IGFuZAo8dHQ+VjI8L3R0PiBhcmUgZGV0ZXJtaW5lZCBhcyBmb2xsb3dzOiBMZXQgPHR0PlVpPC90dD4gYmUKPHR0PmRlY2F5Jmx0O1RpJmd0Ozo6dHlwZTwvdHQ+IGZvciBlYWNoIDx0dD5UaTwvdHQ+LiBUaGVuIGVhY2gKPHR0PlZpPC90dD4gaXMgPHR0PlgmYW1wOzwvdHQ+IGlmIDx0dD5VaTwvdHQ+IGVxdWFscwo8dHQ+cmVmZXJlbmNlX3dyYXBwZXImbHQ7WCZndDs8L3R0Piwgb3RoZXJ3aXNlIDx0dD5WaTwvdHQ+IGlzCjx0dD5VaTwvdHQ+LjwvaW5zPgo8L3A+CjwvYmxvY2txdW90ZT4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNzEwIj48L2E+NzEwLiBNaXNzaW5nIHBvc3Rjb25kaXRpb25zPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjcuMTIuMiBbdXRpbC5zbWFydHB0ci5zaGFyZWRdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFBldGVyIERpbW92IDxiPkRhdGU6PC9iPiAyMDA3LTA4LTI0PC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjdXRpbC5zbWFydHB0ci5zaGFyZWQiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFt1dGlsLnNtYXJ0cHRyLnNoYXJlZF0uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCN1dGlsLnNtYXJ0cHRyLnNoYXJlZCI+aXNzdWVzPC9hPiBpbiBbdXRpbC5zbWFydHB0ci5zaGFyZWRdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KQSBkaXNjdXNzaW9uIG9uCjxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb21wLnN0ZC5jKysvYnJvd3NlX2ZybS90aHJlYWQvOGU4OWRjZWIzNWNkNzk3MSI+Y29tcC5zdGQuYysrPC9hPgpoYXMgaWRlbnRpZmllZCBhIGNvbnRyYWRpY3Rpb24gaW4gdGhlIDx0dD5zaGFyZWRfcHRyPC90dD4gc3BlY2lmaWNhdGlvbi4KVGhlIDx0dD5zaGFyZWRfcHRyPC90dD4gbW92ZSBjb25zdHJ1Y3RvciBhbmQgdGhlIGNhc3QgZnVuY3Rpb25zIGFyZQptaXNzaW5nIHBvc3Rjb25kaXRpb25zIGZvciB0aGUgPHR0PmdldCgpPC90dD4gYWNjZXNzb3IuCjwvcD4KCjxwPjxpPlsKQmVsbGV2dWU6Cl08L2k+PC9wPgoKCjxibG9ja3F1b3RlPgo8cD4KTW92ZSB0byAicmVhZHkiLCBhZG9wdGluZyB0aGUgZmlyc3QgKFBldGVyJ3MpIHByb3Bvc2VkIHJlc29sdXRpb24uCjwvcD4KPHA+Ck5vdGUgdG8gdGhlIHByb2plY3QgZWRpdG9yOiB0aGVyZSBpcyBhbiBlZGl0b3JpYWwgaXNzdWUgaGVyZS4gVGhlCndvcmRpbmcgZm9yIHRoZSBwb3N0Y29uZGl0aW9ucyBvZiB0aGUgY2FzdHMgaXMgc2xpZ2h0bHkgYXdrd2FyZCwgYW5kIHRoZQplZGl0b3Igc2hvdWxkIGNvbnNpZGVyIHJld29yZGluZyAiSWYgdyBpcyB0aGUgcmV0dXJuIHZhbHVlLi4uIiwgZS4gZy4gYXMKIkZvciBhIHJldHVybiB2YWx1ZSB3Li4uIi4KPC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIHRvIDIwLjcuMTIuMi4xIFt1dGlsLnNtYXJ0cHRyLnNoYXJlZC5jb25zdF06CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPnNoYXJlZF9wdHIoc2hhcmVkX3B0ciZhbXA7JmFtcDsgcik7CnRlbXBsYXRlJmx0O2NsYXNzIFkmZ3Q7IHNoYXJlZF9wdHIoc2hhcmVkX3B0ciZsdDtZJmd0OyZhbXA7JmFtcDsgcik7CjwvcHJlPgo8YmxvY2txdW90ZT4KPHA+CjxpPlBvc3Rjb25kaXRpb25zOjwvaT4gIDx0dD4qdGhpczwvdHQ+IHNoYWxsIGNvbnRhaW4gdGhlIG9sZCB2YWx1ZSBvZiA8dHQ+cjwvdHQ+LiA8dHQ+cjwvdHQ+CnNoYWxsIGJlIGVtcHR5LiA8aW5zPjx0dD5yLmdldCgpID09IDA8L3R0Pi48L2lucz4KPC9wPgo8L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCjxwPgpBZGQgdG8gMjAuNy4xMi4yLjEwIFt1dGlsLnNtYXJ0cHRyLnNoYXJlZC5jYXN0XToKPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+dGVtcGxhdGUmbHQ7Y2xhc3MgVCwgY2xhc3MgVSZndDsgc2hhcmVkX3B0ciZsdDtUJmd0OyBzdGF0aWNfcG9pbnRlcl9jYXN0KHNoYXJlZF9wdHImbHQ7VSZndDsgY29uc3QmYW1wOyByKTsKPC9wcmU+CjxibG9ja3F1b3RlPgo8cD4KPGlucz48aT5Qb3N0Y29uZGl0aW9uczo8L2k+IElmIDx0dD53PC90dD4gaXMgdGhlIHJldHVybiB2YWx1ZSwKPHR0PncuZ2V0KCkgPT0gc3RhdGljX2Nhc3QmbHQ7VComZ3Q7KHIuZ2V0KCkpICZhbXA7JmFtcDsgdy51c2VfY291bnQoKSA9PSByLnVzZV9jb3VudCgpPC90dD4uPC9pbnM+CjwvcD4KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBULCBjbGFzcyBVJmd0OyBzaGFyZWRfcHRyJmx0O1QmZ3Q7IGR5bmFtaWNfcG9pbnRlcl9jYXN0KHNoYXJlZF9wdHImbHQ7VSZndDsgY29uc3QmYW1wOyByKTsKPC9wcmU+CjxibG9ja3F1b3RlPgo8cD4KPGlucz48aT5Qb3N0Y29uZGl0aW9uczo8L2k+IElmIDx0dD53PC90dD4gaXMgdGhlIHJldHVybiB2YWx1ZSwgPHR0PncuZ2V0KCkgPT0gZHluYW1pY19jYXN0Jmx0O1QqJmd0OyhyLmdldCgpKTwvdHQ+LjwvaW5zPgo8L3A+CjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKPGJsb2NrcXVvdGU+CjxwcmU+dGVtcGxhdGUmbHQ7Y2xhc3MgVCwgY2xhc3MgVSZndDsgc2hhcmVkX3B0ciZsdDtUJmd0OyBjb25zdF9wb2ludGVyX2Nhc3Qoc2hhcmVkX3B0ciZsdDtVJmd0OyBjb25zdCZhbXA7IHIpOwo8L3ByZT4KPGJsb2NrcXVvdGU+CjxwPgo8aW5zPjxpPlBvc3Rjb25kaXRpb25zOjwvaT4gSWYgPHR0Pnc8L3R0PiBpcyB0aGUgcmV0dXJuIHZhbHVlLAo8dHQ+dy5nZXQoKSA9PSBjb25zdF9jYXN0Jmx0O1QqJmd0OyhyLmdldCgpKSAmYW1wOyZhbXA7IHcudXNlX2NvdW50KCkgPT0gci51c2VfY291bnQoKTwvdHQ+LjwvaW5zPgo8L3A+CjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKPHA+CkFsYmVydG8gR2FuZXNoIEJhcmJhdGkgaGFzIHdyaXR0ZW4gYW4KPGEgaHJlZj0iaHR0cDovL2JhcmJhdGkubmV0L2MrKy9zaGFyZWRfcHRyLnBkZiI+YWx0ZXJuYXRpdmUgcHJvcG9zYWw8L2E+CndoZXJlIGhlIHN1Z2dlc3RzIChhbW9uZyBvdGhlciB0aGluZ3MpIHRoYXQgdGhlIGNhc3RzIGJlIHJlc3BlY2lmaWVkIGluIHRlcm1zIG9mCnRoZSBhbGlhc2luZyBjb25zdHJ1Y3RvciBhcyBmb2xsb3dzOgo8L3A+Cgo8cD4KQ2hhbmdlIDIwLjcuMTIuMi4xMCBbdXRpbC5zbWFydHB0ci5zaGFyZWQuY2FzdF06CjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTItIDxpPlJldHVybnM6PC9pPiA8ZGVsPklmIDx0dD5yPC90dD4gaXMgZW1wdHksIGFuIDx0dD5lbXB0eQpzaGFyZWRfcHRyJmx0O1QmZ3Q7OzwvdHQ+IG90aGVyd2lzZSwgYSA8dHQ+c2hhcmVkX3B0ciZsdDtUJmd0OzwvdHQ+Cm9iamVjdCB0aGF0IHN0b3JlcyA8dHQ+c3RhdGljX2Nhc3QmbHQ7VComZ3Q7KHIuZ2V0KCkpPC90dD4gYW5kIHNoYXJlcyBvd25lcnNoaXAgd2l0aAo8dHQ+cjwvdHQ+LjwvZGVsPiA8aW5zPjx0dD5zaGFyZWRfcHRyJmx0O1QmZ3Q7KHIsIHN0YXRpY19jYXN0Jmx0O1QqJmd0OyhyLmdldCgpKTwvdHQ+LjwvaW5zPgo8L3A+CjwvYmxvY2txdW90ZT4KCjxibG9ja3F1b3RlPgo8cD4KLTYtIDxpPlJldHVybnM6PC9pPgo8L3A+Cjx1bD4KPGxpPjxkZWw+V2hlbiA8dHQ+ZHluYW1pY19jYXN0Jmx0O1QqJmd0OyhyLmdldCgpKTwvdHQ+IHJldHVybnMgYSBub256ZXJvIHZhbHVlLAphIDx0dD5zaGFyZWRfcHRyJmx0O1QmZ3Q7PC90dD4gb2JqZWN0IHRoYXQgc3RvcmVzIGEgY29weSAKb2YgaXQgYW5kIDxpPnNoYXJlcyBvd25lcnNoaXA8L2k+IHdpdGggPHR0PnI8L3R0Pjs8L2RlbD48L2xpPgo8bGk+PGRlbD5PdGhlcndpc2UsIGFuIDxpPmVtcHR5PC9pPiA8dHQ+c2hhcmVkX3B0ciZsdDtUJmd0OzwvdHQ+IG9iamVjdC48L2RlbD48L2xpPgo8bGk+PGlucz5JZiA8dHQ+cCA9IGR5bmFtaWNfY2FzdCZsdDtUKiZndDsoci5nZXQoKSk8L3R0PiBpcyBhIG5vbi1udWxsIHBvaW50ZXIsIDx0dD5zaGFyZWRfcHRyJmx0O1QmZ3Q7KHIsIHApOzwvdHQ+PC9pbnM+PC9saT4KPGxpPjxpbnM+T3RoZXJ3aXNlLCA8dHQ+c2hhcmVkX3B0ciZsdDtUJmd0OygpPC90dD4uPC9pbnM+PC9saT4KPC91bD4KPC9ibG9ja3F1b3RlPgoKPGJsb2NrcXVvdGU+CjxwPgotMTAtIDxpPlJldHVybnM6PC9pPiA8ZGVsPklmIDx0dD5yPC90dD4gaXMgZW1wdHksIGFuIDx0dD5lbXB0eQpzaGFyZWRfcHRyJmx0O1QmZ3Q7OzwvdHQ+IG90aGVyd2lzZSwgYSA8dHQ+c2hhcmVkX3B0ciZsdDtUJmd0OzwvdHQ+Cm9iamVjdCB0aGF0IHN0b3JlcyA8dHQ+Y29uc3RfY2FzdCZsdDtUKiZndDsoci5nZXQoKSk8L3R0PiBhbmQgc2hhcmVzIG93bmVyc2hpcCB3aXRoCjx0dD5yPC90dD4uPC9kZWw+IDxpbnM+PHR0PnNoYXJlZF9wdHImbHQ7VCZndDsociwgY29uc3RfY2FzdCZsdDtUKiZndDsoci5nZXQoKSk8L3R0Pi48L2lucz4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhpcyB0YWtlcyBjYXJlIG9mIHRoZSBtaXNzaW5nIHBvc3Rjb25kaXRpb25zIGZvciB0aGUgY2FzdHMgYnkgYnJpbmdpbmcKaW4gdGhlIGFsaWFzaW5nIGNvbnN0cnVjdG9yIHBvc3Rjb25kaXRpb24gImJ5IHJlZmVyZW5jZSIuCjwvcD4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNzEyIj48L2E+NzEyLiA8dHQ+c2VlZF9zZXE6OnNpemU8L3R0PiBubyBsb25nZXIgdXNlZnVsPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI2LjQuNy4xIFtyYW5kLnV0aWwuc2VlZHNlcV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTWFyYyBQYXRlcm5vIDxiPkRhdGU6PC9iPiAyMDA3LTA4LTI1PC9wPgo8cD48Yj5WaWV3IG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC1vcGVuLmh0bWwjcmFuZC51dGlsLnNlZWRzZXEiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtyYW5kLnV0aWwuc2VlZHNlcV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNyYW5kLnV0aWwuc2VlZHNlcSI+aXNzdWVzPC9hPiBpbiBbcmFuZC51dGlsLnNlZWRzZXFdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KT25lIG9mIHRoZSBtb3RpdmF0aW9ucyBmb3IgaW5jb3Jwb3JhdGluZyA8dHQ+c2VlZF9zZXE6OnNpemUoKTwvdHQ+CndhcyB0byBzaW1wbGlmeSB0aGUgd29yZGluZwppbiBvdGhlciBwYXJ0cyBvZiAyNi40IFtyYW5kXS4KQXMgYSBzaWRlIGVmZmVjdCBvZiByZXNvbHZpbmcgcmVsYXRlZCBpc3N1ZXMsCmFsbCBzdWNoIHJlZmVyZW5jZXMKdG8gPHR0PnNlZWRfc2VxOjpzaXplKCk8L3R0PiB3aWxsIGhhdmUgYmVlbiBleGNpc2VkLgpNb3JlIGltcG9ydGFudGx5LAp0aGUgcHJlc2VudCBzcGVjaWZpY2F0aW9uIGlzIGNvbnRyYWRpY3RvcnksCmFzICJUaGUgbnVtYmVyIG9mIDMyLWJpdCB1bml0cyB0aGUgb2JqZWN0IGNhbiBkZWxpdmVyIgppcyBub3QgdGhlIHNhbWUgYXMgInRoZSByZXN1bHQgb2YgPHR0PnYuc2l6ZSgpPC90dD4uIgo8L3A+Cgo8cD4KU2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjIzOTEucGRmIj5OMjM5MTwvYT4gYW5kCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjI0MjMucGRmIj5OMjQyMzwvYT4KZm9yIHNvbWUgZnVydGhlciBkaXNjdXNzaW9uLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRvcHQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaW4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNy9uMjQyMy5wZGYiPk4yNDIzPC9hPi4KPC9wPgoKCjxwPjxpPlsKS29uYSAoMjAwNyk6IFRoZSBMV0cgYWRvcHRlZCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBvZiBOMjQyMyBmb3IgdGhpcyBpc3N1ZS4KVGhlIExXRyB2b3RlZCB0byBhY2NlbGVyYXRlIHRoaXMgaXNzdWUgdG8gUmVhZHkgc3RhdHVzIHRvIGJlIHZvdGVkIGludG8gdGhlIFdQIGF0IEtvbmEuCl08L2k+PC9wPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9IjcxNSI+PC9hPjcxNS4gPHR0Pm1pbm1heF9lbGVtZW50PC90dD4gY29tcGxleGl0eSBpcyB0b28gbGF4PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI1LjMuNyBbYWxnLm1pbi5tYXhdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IE1hdHQgQXVzdGVybiA8Yj5EYXRlOjwvYj4gMjAwNy0wOC0zMDwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYWxnLm1pbi5tYXgiPmlzc3VlczwvYT4gaW4gW2FsZy5taW4ubWF4XS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBjb21wbGV4aXR5IGZvciA8dHQ+bWlubWF4X2VsZW1lbnQ8L3R0PiAoMjUuMy43IFthbGcubWluLm1heF0gcGFyIDE2KSBzYXlzICJBdCBtb3N0IDx0dD5tYXgoMiAqCihsYXN0IC0gZmlyc3QgKSAtIDIsIDApPC90dD4gYXBwbGljYXRpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBhcmlzb25zIiwKaS5lLiB0aGUgd29yc3QgY2FzZSBjb21wbGV4aXR5IGlzIG5vIGJldHRlciB0aGFuIGNhbGxpbmcgPHR0Pm1pbl9lbGVtZW50PC90dD4gYW5kCjx0dD5tYXhfZWxlbWVudDwvdHQ+IHNlcGFyYXRlbHkuIFRoaXMgaXMgZ3JhdHVpdG91c2x5IGluZWZmaWNpZW50LiBUaGVyZSBpcyBhCndlbGwga25vd24gdGVjaG5pcXVlIHRoYXQgZG9lcyBiZXR0ZXI6IHNlZSBzZWN0aW9uIDkuMSBvZiBDTFJTCihJbnRyb2R1Y3Rpb24gdG8gQWxnb3JpdGhtcywgYnkgQ29ybWVuLCBMZWlzZXJzb24sIFJpdmVzdCwgYW5kIFN0ZWluKS4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAyNS4zLjcgW2FsZy5taW4ubWF4XSB0bzoKPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+dGVtcGxhdGUmbHQ7Y2xhc3MgRm9yd2FyZEl0ZXJhdG9yJmd0OyAKICBwYWlyJmx0O0ZvcndhcmRJdGVyYXRvciwgRm9yd2FyZEl0ZXJhdG9yJmd0OyAKICAgIG1pbm1heF9lbGVtZW50KEZvcndhcmRJdGVyYXRvciBmaXJzdCAsIEZvcndhcmRJdGVyYXRvciBsYXN0KTsgCnRlbXBsYXRlJmx0O2NsYXNzIEZvcndhcmRJdGVyYXRvciwgY2xhc3MgQ29tcGFyZSZndDsgCiAgcGFpciZsdDtGb3J3YXJkSXRlcmF0b3IsIEZvcndhcmRJdGVyYXRvciZndDsgCiAgICBtaW5tYXhfZWxlbWVudChGb3J3YXJkSXRlcmF0b3IgZmlyc3QgLCBGb3J3YXJkSXRlcmF0b3IgbGFzdCAsIENvbXBhcmUgY29tcCk7CjwvcHJlPgo8YmxvY2txdW90ZT4KPHA+CjxpPlJldHVybnM6PC9pPiA8dHQ+bWFrZV9wYWlyKG0sIE0pPC90dD4sIHdoZXJlIDx0dD5tPC90dD4gaXMKPGRlbD48dHQ+bWluX2VsZW1lbnQoZmlyc3QsIGxhc3QpPC90dD4gb3IgPHR0Pm1pbl9lbGVtZW50KGZpcnN0LCBsYXN0LApjb21wKTwvdHQ+PC9kZWw+IDxpbnM+dGhlIGZpcnN0IGl0ZXJhdG9yIGluIDx0dD5bZmlyc3QsCmxhc3QpPC90dD4gc3VjaCB0aGF0IG5vIGl0ZXJhdG9yIGluIHRoZSByYW5nZSByZWZlcnMgdG8gYSBzbWFsbGVyIGVsZW1lbnQsPC9pbnM+IGFuZAo8aW5zPndoZXJlPC9pbnM+IDx0dD5NPC90dD4gaXMgPGRlbD48dHQ+bWF4X2VsZW1lbnQoZmlyc3QsIGxhc3QpPC90dD4gb3IKPHR0Pm1heF9lbGVtZW50KGZpcnN0LCBsYXN0LCBjb21wKTwvdHQ+PC9kZWw+IDxpbnM+dGhlIGxhc3QgaXRlcmF0b3IKaW4gPHR0PltmaXJzdCwgbGFzdCk8L3R0PiBzdWNoIHRoYXQgbm8gaXRlcmF0b3IgaW4gdGhlIHJhbmdlIHJlZmVycyB0byBhIGxhcmdlciBlbGVtZW50PC9pbnM+Lgo8L3A+CjxwPgo8aT5Db21wbGV4aXR5OjwvaT4gQXQgbW9zdCA8ZGVsPjx0dD5tYXgoMiAqIChsYXN0IC0gZmlyc3QgKSAtIDIsIDApPC90dD48L2RlbD4KPGlucz48dHQ+bWF4KCYjODk3MDsoMy8yKSAoTi0xKSYjODk3MTssIDApPC90dD48L2lucz4gYXBwbGljYXRpb25zIG9mIHRoZQpjb3JyZXNwb25kaW5nIDxkZWw+Y29tcGFyaXNvbnM8L2RlbD4gPGlucz5wcmVkaWNhdGUsIHdoZXJlIDx0dD5OPC90dD4gaXMgPHR0PmRpc3RhbmNlKGZpcnN0LCBsYXN0KTwvdHQ+PC9pbnM+Lgo8L3A+CjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3MjIiPjwvYT43MjIuIE1pc3NpbmcgW2MubWF0aF0gZnVuY3Rpb25zIDx0dD5uYW5mPC90dD4gYW5kIDx0dD5uYW5sPC90dD48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuNyBbYy5tYXRoXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEYW5pZWwgS3L8Z2xlciA8Yj5EYXRlOjwvYj4gMjAwNy0wOC0yNzwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjYy5tYXRoIj5pc3N1ZXM8L2E+IGluIFtjLm1hdGhdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSW4gdGhlIGxpc3Rpbmcgb2YgMjYuNyBbYy5tYXRoXSwgdGFibGUgMTA4OiBIZWFkZXIgPHR0PiZsdDtjbWF0aCZndDs8L3R0PiBzeW5vcHNpcyBJIG1pc3MKdGhlIGZvbGxvd2luZyBDOTkgZnVuY3Rpb25zIChmcm9tIDcuMTIuMTEuMik6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+ZmxvYXQgbmFuZihjb25zdCBjaGFyICp0YWdwKTsKbG9uZyBkb3VibGUgbmFubChjb25zdCBjaGFyICp0YWdwKTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CihOb3RlOiBUaGVzZSBmdW5jdGlvbnMgY2Fubm90IGJlIG92ZXJsb2FkZWQgYW5kIHRoZXkgYXJlIGFsc28gbm90Cmxpc3RlZCBhbnl3aGVyZSBlbHNlKQo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjYuNyBbYy5tYXRoXSwgdGFibGUgMTA4LCBzZWN0aW9uICJGdW5jdGlvbnMiLCBhZGQgPHR0Pm5hbmY8L3R0PiBhbmQgPHR0Pm5hbmw8L3R0PgpqdXN0IGFmdGVyIHRoZSBleGlzdGluZyBlbnRyeSA8dHQ+bmFuPC90dD4uCjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3NDAiPjwvYT43NDAuIFBsZWFzZSByZW1vdmUgPHR0PipfcHRyJmx0O1RbTl0mZ3Q7PC90dD48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAuNy4xMS40IFt1bmlxdWUucHRyLmNvbXBpbGV0aW1lXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBIZXJiIFN1dHRlciA8Yj5EYXRlOjwvYj4gMjAwNy0xMC0wNDwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KUGxlYXNlIGRvbid0IHByb3ZpZGUgPHR0PipfcHRyJmx0O1RbTl0mZ3Q7PC90dD4uIEl0IGRvZXNuJ3QgZW5hYmxlIGFueSB1c2VmdWwKYm91bmRzLWNoZWNraW5nIChlLmcuLCB5b3UgY291bGQgaW1hZ2luZSB0aGF0IGRvaW5nIDx0dD5vcCsrPC90dD4gb24gYQo8dHQ+c2hhcmVkX3B0ciZsdDtUW05dJmd0OzwvdHQ+IHlpZWxkcyBhIDx0dD5zaGFyZWRfcHRyJmx0O1RbTi0xXSZndDs8L3R0PiwgYnV0IHRoYXQgcHJvbWlzaW5nIHBhdGgKaW1tZWRpYXRlbHkgZmFsdGVycyBvbiA8dHQ+b3AtLTwvdHQ+IHdoaWNoIGNhbid0IHJlbGlhYmx5IGRlcmVmZXJlbmNlIGJlY2F1c2Ugd2UKZG9uJ3Qga25vdyB0aGUgbG93ZXIgYm91bmQpLiBBbHNvLCBtb3N0IGJ1ZmZlcnMgeW91J2Qgd2FudCB0byBwb2ludCB0bwpkb24ndCBoYXZlIGEgY29tcGlsZS10aW1lIGtub3duIHNpemUuCjwvcD4KCjxwPgpUbyBlbmFibGUgYW55IGJvdW5kcy1jaGVja2luZyB3b3VsZCByZXF1aXJlIHJ1bi10aW1lIGluZm9ybWF0aW9uLCB3aXRoCnRoZSB1c3VhbCB0cmlwbGV0OiBiYXNlIChsb3dlciBib3VuZCksIGN1cnJlbnQgb2Zmc2V0LCBhbmQgbWF4IG9mZnNldAoodXBwZXIgIGJvdW5kKS4gQW5kIEkgY2FuIHN5bXBhdGhpemUgd2l0aCB0aGUgcG9pbnQgb2YgdmlldyB0aGF0IHlvdQp3b3VsZG4ndCB3YW50IHRvIHJlcXVpcmUgdGhpcyBvbiA8dHQ+Kl9wdHI8L3R0PiBpdHNlbGYuIEJ1dCBwbGVhc2UgbGV0J3Mgbm90CmZvbGxvdyB0aGUgPHR0PiZsdDtUW05dJmd0OzwvdHQ+IHBhdGgsIGVzcGVjaWFsbHkgbm90IHdpdGggYWRkaXRpb25hbCBmdW5jdGlvbnMgdG8KcXVlcnkgdGhlIGJvdW5kcyBldGMuLCBiZWNhdXNlIHRoaXMgc2V0cyB3cm9uZyB1c2VyIGV4cGVjdGF0aW9ucyBieQplbWJhcmtpbmcgb24gYSBwYXRoIHRoYXQgZG9lc24ndCBnbyBhbGwgdGhlIHdheSB0byBib3VuZHMgY2hlY2tpbmcgYXMgaXQKc2VlbXMgdG8gaW1wbHkuCjwvcD4KCjxwPgpJZiBib3VuZHMgY2hlY2tpbmcgaXMgZGVzaXJlZCwgY29uc2lkZXIgYSA8dHQ+Y2hlY2tlZF8qX3B0cjwvdHQ+IGluc3RlYWQgKGUuZy4sCjx0dD5jaGVja2VkX3NoYXJlZF9wdHI8L3R0PikuIEFuZCBtYWtlIHRoZSBpbnRlcmZhY2VzIG90aGVyd2lzZSBpZGVudGljYWwgc28gdGhhdAp1c2VyIGNvZGUgY291bGQgZWFzaWx5IDx0dD4jZGVmaW5lL3R5cGVkZWY8L3R0PiBiZXR3ZWVuIHByZXBlbmRpbmcgPHR0PmNoZWNrZWRfPC90dD4gb24KZGVidWcgYnVpbGRzIGFuZCBub3QgZG9pbmcgc28gb24gcmVsZWFzZSBidWlsZHMgKGZvciBleGFtcGxlKS4KPC9wPgoKPHA+Ck5vdGUgdGhhdCBzb21lIG1heSBvYmplY3QgdGhhdCA8dHQ+Y2hlY2tlZF8qX3B0cjwvdHQ+IG1heSBzZWVtIHRvIG1ha2UgdGhlIHNtYXJ0CnBvaW50ZXIgbW9yZSBsaWtlIDx0dD52ZWN0b3I8L3R0PiwgYW5kIHdlIGRvbid0IHdhbnQgdHdvIHdheXMgdG8gc3BlbGwgPHR0PnZlY3RvcjwvdHQ+LiBJCmRvbid0IGFncmVlLCBidXQgaWYgdGhhdCB3ZXJlIHRydWUgdGhhdCB3b3VsZCBiZSBhbm90aGVyIHJlYXNvbiB0bwpyZW1vdmUgPHR0PipfcHRyJmx0O1RbTl0mZ3Q7PC90dD4gd2hpY2ggZXF1YWxseSBtYWtlcyB0aGUgc21hcnQgcG9pbnRlciBtb3JlIGxpa2UKPHR0PnN0ZDo6YXJyYXkuPC90dD4gOi0pCjwvcD4KCjxwPjxpPlsKQmVsbGV2dWU6Cl08L2k+PC9wPgoKCjxibG9ja3F1b3RlPgo8cD5TdWdnZXN0aW9uIHRoYXQgZml4ZWQtc2l6ZSBhcnJheSBpbnN0YW50aWF0aW9ucyBhcmUgZ29pbmcgdG8gZmFpbCBhdApjb21waWxlIHRpbWUgYW55d2F5IChpZiB3ZSByZW1vdmUgc3BlY2lhbGl6YXRpb24pIGR1ZSB0byBwb2ludGVyIGRlY2F5LAphdCBsZWFzdCB0aGF0IGFwcGVhcnMgdG8gYmUgcmVzdWx0IGZyb20gYXZhaWxhYmxlIGNvbXBpbGVycy4KPC9wPgo8cD4KU28gY29uY2VybnMgYWJvdXQgYWJvdXQgcmVxdWlyaW5nIHN0YXRpY19hc3NlcnQgc2VlbSB1bmZvdW5kZWQuCjwvcD4KPHA+QWZ0ZXIgYSBsaXR0bGUgbW9yZSBleHBlcmltZW50YXRpb24gd2l0aCBjb21waWxlciwgaXQgYXBwZWFycyB0aGF0CmZpeGVkIHNpemUgYXJyYXlzIHdvdWxkIG9ubHkgd29yayBhdCBhbGwgaWYgd2Ugc3VwcGx5IHRoZXNlIGV4cGxpY2l0CnNwZWNpYWxpemF0aW9uLiBTbyByZW1vdmluZyB0aGVtIGFwcGVhcnMgbGVzcyBicmVha2luZyB0aGFuIG9yaWdpbmFsbHkKdGhvdWdodC4KPC9wPgo8cD4Kc3RyYXcgcG9sbCB1bmFuaW1vdXMgbW92ZSB0byBSZWFkeS4KPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgc3lub3BzaXMgdW5kZXIgMjAuNy4xMSBbdW5pcXVlLnB0cl0gcDI6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+Li4uCnRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IHN0cnVjdCBkZWZhdWx0X2RlbGV0ZTsgCnRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IHN0cnVjdCBkZWZhdWx0X2RlbGV0ZSZsdDtUW10mZ3Q7OyAKPGRlbD50ZW1wbGF0ZSZsdDtjbGFzcyBULCBzaXplX3QgTiZndDsgc3RydWN0IGRlZmF1bHRfZGVsZXRlJmx0O1RbTl0mZ3Q7OzwvZGVsPgoKdGVtcGxhdGUmbHQ7Y2xhc3MgVCwgY2xhc3MgRCA9IGRlZmF1bHRfZGVsZXRlJmx0O1QmZ3Q7Jmd0OyBjbGFzcyB1bmlxdWVfcHRyOyAKdGVtcGxhdGUmbHQ7Y2xhc3MgVCwgY2xhc3MgRCZndDsgY2xhc3MgdW5pcXVlX3B0ciZsdDtUW10sIEQmZ3Q7OyAKPGRlbD50ZW1wbGF0ZSZsdDtjbGFzcyBULCBjbGFzcyBELCBzaXplX3QgTiZndDsgY2xhc3MgdW5pcXVlX3B0ciZsdDtUW05dLCBEJmd0Ozs8L2RlbD4KLi4uCjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpSZW1vdmUgdGhlIGVudGlyZSBzZWN0aW9uIDIwLjcuMTEuMS4zIFt1bmlxdWUucHRyLmRsdHIuZGZsdDJdIDxiPjx0dD5kZWZhdWx0X2RlbGV0ZSZsdDtUW05dJmd0OzwvdHQ+PC9iPi4KPC9wPgoKPHA+ClJlbW92ZSB0aGUgZW50aXJlIHNlY3Rpb24gMjAuNy4xMS40IFt1bmlxdWUucHRyLmNvbXBpbGV0aW1lXSA8Yj48dHQ+dW5pcXVlX3B0cjwvdHQ+IGZvciBhcnJheSBvYmplY3RzIHdpdGggYSBjb21waWxlIHRpbWUgbGVuZ3RoPC9iPgphbmQgaXRzIHN1YnNlY3Rpb25zOiAyMC43LjExLjQuMSBbdW5pcXVlLnB0ci5jb21waWxldGltZS5kdG9yXSwgMjAuNy4xMS40LjIgW3VuaXF1ZS5wdHIuY29tcGlsZXRpbWUub2JzZXJ2ZXJzXSwKMjAuNy4xMS40LjMgW3VuaXF1ZS5wdHIuY29tcGlsZXRpbWUubW9kaWZpZXJzXS4KPC9wPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3NDMiPjwvYT43NDMuIHJ2YWx1ZSA8dHQ+c3dhcDwvdHQ+IGZvciA8dHQ+c2hhcmVkX3B0cjwvdHQ+PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjcuMTIuMi45IFt1dGlsLnNtYXJ0cHRyLnNoYXJlZC5zcGVjXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBIb3dhcmQgSGlubmFudCA8Yj5EYXRlOjwvYj4gMjAwNy0xMC0xMDwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KV2hlbiB0aGUgTFdHIGxvb2tlZCBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjc0Ij42NzQ8L2E+IGluIEtvbmEgdGhlIGZvbGxvd2luZyBub3RlIHdhcyBtYWRlOgo8L3A+Cgo8YmxvY2txdW90ZT48cD4KV2UgbWF5IG5lZWQgdG8gb3BlbiBhbiBpc3N1ZSB0byBkZWFsIHdpdGggdGhlIHF1ZXN0aW9uIG9mCndoZXRoZXIgPHR0PnNoYXJlZF9wdHI8L3R0PiBuZWVkcyBhbiBydmFsdWUgPHR0PnN3YXA8L3R0Pi4KPC9wPjwvYmxvY2txdW90ZT4KCjxwPgpUaGlzIGlzc3VlIHdhcyBvcGVuZWQgaW4gcmVzcG9uc2UgdG8gdGhhdCBub3RlLgo8L3A+Cgo8cD4KSSBiZWxpZXZlIGFsbG93aW5nIHJ2YWx1ZSA8dHQ+c2hhcmVkX3B0cjwvdHQ+cyB0byA8dHQ+c3dhcDwvdHQ+IGlzIGJvdGgKYXBwcm9wcmlhdGUsIGFuZCBjb25zaXN0ZW50IHdpdGggaG93IG90aGVyIGxpYnJhcnkgY29tcG9uZW50cyBhcmUgY3VycmVudGx5IHNwZWNpZmllZC4KPC9wPgoKPHA+PGk+WwpCZWxsZXZ1ZToKXTwvaT48L3A+CgoKPGJsb2NrcXVvdGU+CjxwPgpDb25jZXJuIHRoYXQgdGhlIHRocmVlIHNpZ25hdHVyZXMgZm9yIHN3YXAgaXMgbmVlZGxlc3NseSBjb21wbGljYXRlZCwKYnV0IHRoaXMgaXNzdWUgbWVyZWx5IGJyaW5ncyBzaGFyZWRfcHRyIGludG8gZXF1YWwgY29tcGxleGl0eSB3aXRoIHRoZQpyZXN0IG9mIHRoZSBsaWJyYXJ5LiBXaWxsIG9wZW4gYSBuZXcgaXNzdWUgZm9yIGNvbmNlcm4gYWJvdXQgdHJpcGxpY2F0ZQpzaWduYXR1cmVzLgo8L3A+CjxwPgpBZG9wdCBpc3N1ZSBhcyB3cml0dGVuLgo8L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgdGhlIHN5bm9wc2lzIGluIDIwLjcuMTIuMiBbdXRpbC5zbWFydHB0ci5zaGFyZWRdOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnZvaWQgc3dhcChzaGFyZWRfcHRyJmFtcDs8aW5zPiZhbXA7PC9pbnM+IHIpOwouLi4KdGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgdm9pZCBzd2FwKHNoYXJlZF9wdHImbHQ7VCZndDsmYW1wOyBhLCBzaGFyZWRfcHRyJmx0O1QmZ3Q7JmFtcDsgYik7CjxpbnM+dGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgdm9pZCBzd2FwKHNoYXJlZF9wdHImbHQ7VCZndDsmYW1wOyZhbXA7IGEsIHNoYXJlZF9wdHImbHQ7VCZndDsmYW1wOyBiKTsKdGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgdm9pZCBzd2FwKHNoYXJlZF9wdHImbHQ7VCZndDsmYW1wOyBhLCBzaGFyZWRfcHRyJmx0O1QmZ3Q7JmFtcDsmYW1wOyBiKTs8L2lucz4KPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAyMC43LjEyLjIuNCBbdXRpbC5zbWFydHB0ci5zaGFyZWQubW9kXToKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT52b2lkIHN3YXAoc2hhcmVkX3B0ciZhbXA7PGlucz4mYW1wOzwvaW5zPiByKTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAyMC43LjEyLjIuOSBbdXRpbC5zbWFydHB0ci5zaGFyZWQuc3BlY106CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgdm9pZCBzd2FwKHNoYXJlZF9wdHImbHQ7VCZndDsmYW1wOyBhLCBzaGFyZWRfcHRyJmx0O1QmZ3Q7JmFtcDsgYik7CjxpbnM+dGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgdm9pZCBzd2FwKHNoYXJlZF9wdHImbHQ7VCZndDsmYW1wOyZhbXA7IGEsIHNoYXJlZF9wdHImbHQ7VCZndDsmYW1wOyBiKTsKdGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgdm9pZCBzd2FwKHNoYXJlZF9wdHImbHQ7VCZndDsmYW1wOyBhLCBzaGFyZWRfcHRyJmx0O1QmZ3Q7JmFtcDsmYW1wOyBiKTs8L2lucz4KPC9wcmU+PC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9Ijc0NCI+PC9hPjc0NC4gV2hhdCBpcyB0aGUgbGlmZXRpbWUgb2YgYW4gZXhjZXB0aW9uIHBvaW50ZWQgdG8gYnkgYW4gZXhjZXB0aW9uX3B0cj88L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMTguNy41IFtwcm9wYWdhdGlvbl0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQWxpc2RhaXIgTWVyZWRpdGggPGI+RGF0ZTo8L2I+IDIwMDctMTAtMTA8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNwcm9wYWdhdGlvbiI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW3Byb3BhZ2F0aW9uXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3Byb3BhZ2F0aW9uIj5pc3N1ZXM8L2E+IGluIFtwcm9wYWdhdGlvbl0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpXaXRob3V0IHNvbWUgbGlmZXRpbWUgZ3VhcmFudGVlLCBpdCBpcyBoYXJkIHRvIGtub3cgaG93IHRoaXMgdHlwZSBjYW4gYmUKdXNlZC4gIFZlcnkgc3BlY2lmaWNhbGx5LCBJIGRvbid0IHNlZSBob3cgdGhlIGN1cnJlbnQgd29yZGluZyB3b3VsZApndWFyYW50ZWUgYW5kIGV4Y2VwdGlvbl9wdHIgY2F1Z2h0IGF0IHRoZSBlbmQgb2Ygb25lIHRocmVhZCBjb3VsZCBiZSBzYWZlbHkKc3RvcmVkIGFuZCByZXRocm93biBpbiBhbm90aGVyIHRocmVhZCAtIHRoZSBvcmlnaW5hbCBtb3RpdmF0aW9uIGZvciB0aGlzCkFQSS4KPC9wPgo8cD4KKFBldGVyIERpbW92IGFncmVlZCBpdCBzaG91bGQgYmUgY2xlYXJlciwgbWF5YmUgYSBub24tbm9ybWF0aXZlIG5vdGUgdG8KZXhwbGFpbj8pCjwvcD4KCjxwPjxpPlsKQmVsbGV2dWU6Cl08L2k+PC9wPgoKCjxibG9ja3F1b3RlPgo8cD4KQWdyZWUgdGhlIGlzc3VlIGlzIHJlYWwuCjwvcD4KPHA+CkludGVudCBpcyBsaWZldGltZSBpcyBzaW1pbGFyIHRvIGEgc2hhcmVkX3B0ciAoYW5kIHdlIG1pZ2h0IGV2ZW4gd2FudCB0bwpjb25zaWRlciBleHBsaWNpdGx5IHNheWluZyB0aGF0IGl0IGlzIGEgc2hhcmVkX3B0ciZsdDsgdW5zcGVjaWZpZWQgdHlwZSAmZ3Q7KS4KPC9wPgo8cD4KV2UgZXhwZWN0IHRoYXQgbW9zdCBpbXBsZW1lbnRhdGlvbnMgd2lsbCB1c2Ugc2hhcmVkX3B0ciwgYW5kIHRoZQpzdGFuZGFyZCBzaG91bGQgYmUgY2xlYXIgdGhhdCB0aGUgZXhjZXB0aW9uX3B0ciB0eXBlIGlzIGludGVuZGVkIHRvIGJlCnNvbWV0aGluZyB3aG9zZSBzZW1hbnRpY3MgYXJlIHNtYXJ0LXBvaW50ZXItbGlrZSBzbyB0aGF0IHRoZSB1c2VyIGRvZXMKbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgbGlmZXRpbWUgbWFuYWdlbWVudC4gV2Ugc3RpbGwgbmVlZCBzb21lb25lIHRvCmRyYXVnaHQgdGhvc2Ugd29yZHMgLSBzdWdnZXN0IGVtYWlsaW5nIFBldGVyIERpbW92Lgo8L3A+CjxwPgpNb3ZlIHRvIE9wZW4uCjwvcD4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAxOC43LjUgW3Byb3BhZ2F0aW9uXS83Ogo8L3A+Cgo8YmxvY2txdW90ZT4KLTctIFJldHVybnM6IEFuIDx0dD5leGNlcHRpb25fcHRyPC90dD4gb2JqZWN0IHRoYXQgcmVmZXJzIHRvIHRoZSBjdXJyZW50bHkKaGFuZGxlZCBleGNlcHRpb24gb3IgYSBjb3B5IG9mIHRoZSBjdXJyZW50bHkgaGFuZGxlZCBleGNlcHRpb24sIG9yIGEKbnVsbCA8dHQ+ZXhjZXB0aW9uX3B0cjwvdHQ+IG9iamVjdCBpZiBubyBleGNlcHRpb24gaXMgYmVpbmcgaGFuZGxlZC4KPGlucz5UaGUgcmVmZXJlbmNlZCBvYmplY3QgcmVtYWlucyB2YWxpZCBhdCBsZWFzdCBhcyBsb25nIGFzIHRoZXJlIGlzIGFuCjx0dD5leGNlcHRpb25fcHRyPC90dD4gdGhhdCByZWZlcnMgdG8gaXQuPC9pbnM+CklmIHRoZSBmdW5jdGlvbiBuZWVkcyB0byBhbGxvY2F0ZSBtZW1vcnkgYW5kIHRoZSBhdHRlbXB0CmZhaWxzLCBpdCByZXR1cm5zIGFuIDx0dD5leGNlcHRpb25fcHRyPC90dD4gb2JqZWN0IHRoYXQgcmVmZXJzIHRvIGFuIGluc3RhbmNlIG9mCjx0dD5iYWRfYWxsb2M8L3R0Pi4gSXQgaXMgdW5zcGVjaWZpZWQgd2hldGhlciB0aGUgcmV0dXJuIHZhbHVlcyBvZiB0d28gc3VjY2Vzc2l2ZQpjYWxscyB0byA8dHQ+Y3VycmVudF9leGNlcHRpb248L3R0PiByZWZlciB0byB0aGUgc2FtZSBleGNlcHRpb24gb2JqZWN0LiBbPGk+Tm90ZTo8L2k+CnRoYXQgaXMsIGl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgPHR0PmN1cnJlbnRfZXhjZXB0aW9uPC90dD4gY3JlYXRlcyBhIG5ldyBjb3B5CmVhY2ggdGltZSBpdCBpcyBjYWxsZWQuIDxpPi0tZW5kIG5vdGU8L2k+XQo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNzQ2Ij48L2E+NzQ2LiBjdXJyZW50X2V4Y2VwdGlvbiBtYXkgZmFpbCB3aXRoIGJhZF9hbGxvYzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAxOC43LjUgW3Byb3BhZ2F0aW9uXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBBbGlzZGFpciBNZXJlZGl0aCA8Yj5EYXRlOjwvYj4gMjAwNy0xMC0xMDwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI3Byb3BhZ2F0aW9uIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbcHJvcGFnYXRpb25dLjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjcHJvcGFnYXRpb24iPmlzc3VlczwvYT4gaW4gW3Byb3BhZ2F0aW9uXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkkgdW5kZXJzdGFuZCB0aGF0IHRoZSBhdHRlbXB0IHRvIGNvcHkgYW4gZXhjZXB0aW9uIG1heSBydW4gb3V0IG9mIG1lbW9yeSwKYnV0IEkgYmVsaWV2ZSB0aGlzIGlzIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHN0YW5kYXJkIHRoYXQgbWFuZGF0ZXMgZmFpbHVyZQp3aXRoIHNwZWNpZmljYWxseSA8dHQ+YmFkX2FsbG9jPC90dD4sIGFzIG9wcG9zZWQgdG8gYWxsb3dpbmcgYW4KaW1wbGVtZW50YXRpb24tZGVmaW5lZCB0eXBlIGRlcml2ZWQgZnJvbSA8dHQ+YmFkX2FsbG9jPC90dD4uICBGb3IgaW5zdGFuY2UsIHRoZSBDb3JlCmxhbmd1YWdlIGZvciBhIGZhaWxlZCBuZXcgZXhwcmVzc2lvbiBpczoKPC9wPgo8YmxvY2txdW90ZT4KPHA+CkFueSBvdGhlciBhbGxvY2F0aW9uIGZ1bmN0aW9uIHRoYXQgZmFpbHMgdG8gYWxsb2NhdGUgc3RvcmFnZSBzaGFsbCBpbmRpY2F0ZQpmYWlsdXJlIG9ubHkgYnkgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIG9mIGEgdHlwZSB0aGF0IHdvdWxkIG1hdGNoIGEgaGFuZGxlcgooMTUuMykgb2YgdHlwZSA8dHQ+c3RkOjpiYWRfYWxsb2M8L3R0PiAoMTguNS4yLjEpLgo8L3A+CjwvYmxvY2txdW90ZT4KPHA+CkkgdGhpbmsgd2Ugc2hvdWxkIGFsbG93IHNpbWlsYXIgZnJlZWRvbSBoZXJlIChvciBhZGQgYSBibGFua2V0CmNvbXBhdGlibGUtZXhjZXB0aW9uIGZyZWVkb20gcGFyYWdyYXBoIGluIDE3KQo8L3A+CjxwPgpJIHByZWZlciB0aGUgY2xhdXNlIDE3IGFwcHJvYWNoIG15c2VsZiwgYW5kIG1heWJlIGNsZWFuIHVwIGFueSBvdXRzdGFuZGluZwp3b3JkaW5nIHRoYXQgY291bGQgYWxzbyByZWx5IG9uIGl0Lgo8L3A+CjxwPgpBbHRob3VnaCBmaWxlZCBhZ2FpbnN0IGEgc3BlY2lmaWMgY2FzZSwgdGhpcyBpc3N1ZSBpcyBhIHByb2JsZW0gdGhyb3VnaG91dAp0aGUgbGlicmFyeS4gCjwvcD4KCjxwPjxpPlsKQmVsbGV2dWU6Cl08L2k+PC9wPgoKCjxibG9ja3F1b3RlPgo8cD4KSXMgaXNzdWUgYmlnZ2VyIHRoYW4gbGlicmFyeT8KPC9wPgo8cD4KTm8gLSBDb3JlIGFyZSBhbHJlYWR5IHZlcnkgY2xlYXIgYWJvdXQgdGhlaXIgd29yZGluZywgd2hpY2ggaXMgaW5zcGlyYXRpb24gZm9yIHRoZSBpc3N1ZS4KPC9wPgo8cD4KV2hpbGUgbm90IHNvbGQgb24gdGhlIG9yaWdpbmFsIDE4LjcuNSB1c2UgY2FzZSwgdGhlIGdlbmVyYWxpc2VkIDE3LjQuNC44IHdvcmRpbmcgaXMgdGhlIHJlYWwgaXNzdWUuCjwvcD4KPHA+CkFjY2VwdCB0aGUgYnJvYWQgdmlldyBhbmQgbW92ZSB0byByZWFkeQo8L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpBZGQgdGhlIGZvbGxvd2luZyBleGVtcHRpb24gY2xhdXNlIHRvIDE3LjQuNC45IFtyZXMub24uZXhjZXB0aW9uLmhhbmRsaW5nXToKPC9wPgoKPGJsb2NrcXVvdGU+CkEgZnVuY3Rpb24gbWF5IHRocm93IGEgdHlwZSBub3QgbGlzdGVkIGluIGl0cyA8aT5UaHJvd3M8L2k+IGNsYXVzZSBzbyBsb25nIGFzIGl0IGlzCmRlcml2ZWQgZnJvbSBhIGNsYXNzIG5hbWVkIGluIHRoZSA8aT5UaHJvd3M8L2k+IGNsYXVzZSwgYW5kIHdvdWxkIGJlIGNhdWdodCBieSBhbgpleGNlcHRpb24gaGFuZGxlciBmb3IgdGhlIGJhc2UgdHlwZS4KPC9ibG9ja3F1b3RlPgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9Ijc0OSI+PC9hPjc0OS4gQ3VycmVudGx5IDx0dD5oYXNfbm90aHJvd19jb3B5X2NvbnN0cnVjdG9yJmx0O1QmZ3Q7Ojp2YWx1ZTwvdHQ+IGlzIHRydWUgaWYgVCBoYXMgJ2EnIG5vdGhyb3cgY29weSBjb25zdHJ1Y3Rvci48L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAuNS40LjMgW21ldGEudW5hcnkucHJvcF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQWxpc2RhaXIgTWVyZWRpdGggPGI+RGF0ZTo8L2I+IDIwMDctMTAtMTA8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI21ldGEudW5hcnkucHJvcCI+aXNzdWVzPC9hPiBpbiBbbWV0YS51bmFyeS5wcm9wXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClVuZm9ydHVuYXRlbHkgYSBjbGFzcyBjYW4gaGF2ZSBtdWx0aXBsZSBjb3B5IGNvbnN0cnVjdG9ycywgYW5kIEkgYmVsaWV2ZSB0bwpiZSB1c2VmdWwgdGhpcyB0cmFpdCBzaG91bGQgb25seSByZXR1cm4gdHJ1ZSBpcyBBTEwgY29weSBjb25zdHJ1Y3RvcnMgYXJlCm5vLXRocm93Lgo8L3A+CjxwPgpGb3IgaW5zdGFuY2U6CjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+c3RydWN0IGF3a3dhcmQgewogYXdrd2FyZCggY29uc3QgYXdrd2FyZCAmYW1wOyApIHRocm93KCkge30KIGF3a3dhcmQoIGF3a3dhcmQgJmFtcDsgKSB7IHRocm93ICJvb3BzIjsgfSB9Owo8L3ByZT4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAyMC41LjQuMyBbbWV0YS51bmFyeS5wcm9wXToKPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjwvcHJlPgo8YmxvY2txdW90ZT4KPHR0PlQ8L3R0PiBpcyBhIHRyaXZpYWwgdHlwZSAoMy45KSBvciBhIHJlZmVyZW5jZSB0eXBlIG9yIGEgY2xhc3MgdHlwZSA8ZGVsPndpdGggYSB0cml2aWFsIGNvcHkgY29uc3RydWN0b3I8L2RlbD4KPGlucz53aGVyZSBhbGwgY29weSBjb25zdHJ1Y3RvcnMgYXJlIHRyaXZpYWw8L2lucz4gKDEyLjgpLgo8L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCjxibG9ja3F1b3RlPgo8cHJlPmhhc190cml2aWFsX2Fzc2lnbjwvcHJlPgo8YmxvY2txdW90ZT4KPHR0PlQ8L3R0PiBpcyBuZWl0aGVyIDx0dD5jb25zdDwvdHQ+IG5vciBhIHJlZmVyZW5jZSB0eXBlLCBhbmQgPHR0PlQ8L3R0PiBpcyBhIHRyaXZpYWwgdHlwZSAoMy45KQpvciBhIGNsYXNzIHR5cGUgPGRlbD53aXRoIGEgdHJpdmlhbCBjb3B5IGFzc2lnbm1lbnQgb3BlcmF0b3I8L2RlbD4gPGlucz53aGVyZSBhbGwgY29weSBhc3NpZ25tZW50IG9wZXJhdG9ycyBhcmUgdHJpdmlhbDwvaW5zPiAoMTIuOCkuCjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKPGJsb2NrcXVvdGU+CjxwcmU+aGFzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RvcjwvcHJlPgo8YmxvY2txdW90ZT4KPHR0Pmhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3ImbHQ7VCZndDs6OnZhbHVlPC90dD4gaXMgPHR0PnRydWU8L3R0PiBvciA8dHQ+VDwvdHQ+IGlzIGEgY2xhc3MgdHlwZSA8ZGVsPndpdGgKYTwvZGVsPiA8aW5zPndoZXJlIGFsbDwvaW5zPiBjb3B5IGNvbnN0cnVjdG9yPGlucz5zPC9pbnM+IDxkZWw+dGhhdCBpczwvZGVsPiA8aW5zPmFyZTwvaW5zPiAKa25vd24gbm90IHRvIHRocm93IGFueSBleGNlcHRpb25zIG9yIDx0dD5UPC90dD4gaXMgYW4KYXJyYXkgb2Ygc3VjaCBhIGNsYXNzIHR5cGUKPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8YmxvY2txdW90ZT4KPHByZT5oYXNfbm90aHJvd19hc3NpZ248L3ByZT4KPGJsb2NrcXVvdGU+Cjx0dD5UPC90dD4gaXMgbmVpdGhlciA8dHQ+Y29uc3Q8L3R0PiBub3IgYSByZWZlcmVuY2UgdHlwZSwgYW5kCjx0dD5oYXNfdHJpdmlhbF9hc3NpZ24mbHQ7VCZndDs6OnZhbHVlPC90dD4gaXMgPHR0PnRydWU8L3R0PiBvciA8dHQ+VDwvdHQ+IGlzIGEgY2xhc3MgdHlwZSA8ZGVsPndpdGggYTwvZGVsPgo8aW5zPndoZXJlIGFsbDwvaW5zPiBjb3B5CmFzc2lnbm1lbnQgb3BlcmF0b3I8aW5zPnM8L2lucz4gdGFrPGlucz5lPC9pbnM+PGRlbD5pbmc8L2RlbD4gYW4gbHZhbHVlIG9mIHR5cGUgPHR0PlQ8L3R0PiB0aGF0IGlzIGtub3duIG5vdCB0bwp0aHJvdyBhbnkgZXhjZXB0aW9ucyBvciA8dHQ+VDwvdHQ+IGlzIGFuIGFycmF5IG9mIHN1Y2ggYSBjbGFzcyB0eXBlLgo8L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNzU1Ij48L2E+NzU1LiA8dHQ+c3RkOjp2ZWN0b3I8L3R0PiBhbmQgPHR0PnN0ZDpzdHJpbmc8L3R0PiBsYWNrIGV4cGxpY2l0IHNocmluay10by1maXQgb3BlcmF0aW9uczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyMy4yLjYuMiBbdmVjdG9yLmNhcGFjaXR5XSwgMjEuMy40IFtzdHJpbmcuY2FwYWNpdHldIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEJlbWFuIERhd2VzIDxiPkRhdGU6PC9iPiAyMDA3LTEwLTMxPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCN2ZWN0b3IuY2FwYWNpdHkiPmlzc3VlczwvYT4gaW4gW3ZlY3Rvci5jYXBhY2l0eV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpBIDx0dD5zdGQ6OnZlY3RvcjwvdHQ+IGNhbiBiZSBzaHJ1bmstdG8tZml0IHZpYSB0aGUgc3dhcCBpZGlvbToKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT52ZWN0b3ImbHQ7aW50Jmd0OyB2OwouLi4Kdi5zd2FwKHZlY3RvciZsdDtpbnQmZ3Q7KHYpKTsgIC8vIHNocmluayB0byBmaXQKPC9wcmU+CjxibG9ja3F1b3RlPjxwPgpvcjoKPC9wPjwvYmxvY2txdW90ZT4KPHByZT52ZWN0b3ImbHQ7aW50Jmd0Oyh2KS5zd2FwKHYpOyAgLy8gc2hyaW5rIHRvIGZpdAo8L3ByZT4KPGJsb2NrcXVvdGU+PHA+Cm9yOgo8L3A+PC9ibG9ja3F1b3RlPgo8cHJlPnN3YXAodiwgdmVjdG9yJmx0O2ludCZndDsodikpOyAgLy8gc2hyaW5rIHRvIGZpdAo8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+CkEgbm9uLWJpbmRpbmcgcmVxdWVzdCBmb3Igc2hyaW5rLXRvLWZpdCBjYW4gYmUgbWFkZSB0byBhIDx0dD5zdGQ6OnN0cmluZzwvdHQ+IHZpYToKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT5zdHJpbmcgczsKLi4uCnMucmVzZXJ2ZSgwKTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+Ck5laXRoZXIgb2YgdGhlc2UgaXMgYXQgYWxsIG9idmlvdXMgdG8gYmVnaW5uZXJzLCBhbmQgZXZlbiBzb21lCmV4cGVyaWVuY2VkIEMrKyBwcm9ncmFtbWVycyBhcmUgbm90IGF3YXJlIHRoYXQgc2hyaW5rLXRvLWZpdCBpcwp0cml2aWFsbHkgYXZhaWxhYmxlLgo8L3A+CjxwPgpMYWNrIG9mIGV4cGxpY2l0IGZ1bmN0aW9ucyB0byBwZXJmb3JtIHRoZXNlIGNvbW1vbmx5IHJlcXVlc3RlZApvcGVyYXRpb25zIG1ha2VzIHZlY3RvciBhbmQgc3RyaW5nIGxlc3MgdXNhYmxlIGZvciBub24tZXhwZXJ0cy4gQmVjYXVzZQp0aGUgaWRpb21zIGFyZSBzb21ld2hhdCBvYnNjdXJlLCBjb2RlIHJlYWRhYmlsaXR5IGlzIGltcGFpcmVkLiBJdCBpcwphbHNvIHVuZm9ydHVuYXRlIHRoYXQgdHdvIHNpbWlsYXIgdmVjdG9yLWxpa2UgY29udGFpbmVycyB1c2UgZGlmZmVyZW50CnN5bnRheCBmb3IgdGhlIHNhbWUgb3BlcmF0aW9uLgo8L3A+CjxwPgpUaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBhZGRyZXNzZXMgdGhlc2UgY29uY2VybnMuIFRoZSBwcm9wb3NlZCBmdW5jdGlvbgp0YWtlcyBubyBhcmd1bWVudHMgdG8ga2VlcCB0aGUgc29sdXRpb24gc2ltcGxlIGFuZCBmb2N1c2VkLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KVG8gQ2xhc3MgdGVtcGxhdGUgYmFzaWNfc3RyaW5nIDIxLjMgW2Jhc2ljLnN0cmluZ10gc3lub3BzaXMsCkNsYXNzIHRlbXBsYXRlIHZlY3RvciAyMy4yLjYgW3ZlY3Rvcl0gc3lub3BzaXMsIGFuZCBDbGFzcwp2ZWN0b3ImbHQ7Ym9vbCZndDsgMjMuMi43IFt2ZWN0b3IuYm9vbF0gc3lub3BzaXMsIGFkZDoKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT4gICAgCnZvaWQgc2hyaW5rX3RvX2ZpdCgpOwo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KVG8gYmFzaWNfc3RyaW5nIGNhcGFjaXR5IDIxLjMuNCBbc3RyaW5nLmNhcGFjaXR5XSBhbmQgdmVjdG9yCmNhcGFjaXR5IDIzLjIuNi4yIFt2ZWN0b3IuY2FwYWNpdHldLCBhZGQ6CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPnZvaWQgc2hyaW5rX3RvX2ZpdCgpOwo8L3ByZT4KPGJsb2NrcXVvdGU+CjxpPlJlbWFya3M6PC9pPiA8dHQ+c2hyaW5rX3RvX2ZpdDwvdHQ+IGlzIGEgbm9uLWJpbmRpbmcgcmVxdWVzdCB0byByZWR1Y2UKPHR0PmNhcGFjaXR5KCk8L3R0PiB0byA8dHQ+c2l6ZSgpPC90dD4uIFs8aT5Ob3RlOjwvaT4gVGhlIHJlcXVlc3QgaXMgbm9uLWJpbmRpbmcgdG8KYWxsb3cgbGF0aXR1ZGUgZm9yIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIG9wdGltaXphdGlvbnMuCjxpPi0tIGVuZCBub3RlPC9pPl0KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzg1MCI+ODUwPC9hPiBoYXMgYmVlbiBhZGRlZCB0byBkZWFsIHdpdGggdGhpcyBpc3N1ZSB3aXRoIHJlc3BlY3QgdG8gPHR0PmRlcXVlPC90dD4uCl08L2k+PC9wPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3NTkiPjwvYT43NTkuIEEgcmVmZXJlbmNlIGlzIG5vdCBhbiBvYmplY3Q8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMSBbY29udGFpbmVyLnJlcXVpcmVtZW50c10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSmVucyBNYXVyZXIgPGI+RGF0ZTo8L2I+IDIwMDctMTEtMDY8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNjb250YWluZXIucmVxdWlyZW1lbnRzIj5hY3RpdmUgaXNzdWVzPC9hPiBpbiBbY29udGFpbmVyLnJlcXVpcmVtZW50c10uPC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNjb250YWluZXIucmVxdWlyZW1lbnRzIj5pc3N1ZXM8L2E+IGluIFtjb250YWluZXIucmVxdWlyZW1lbnRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CjIzLjEgW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdIHNheXM6CjwvcD4KCjxibG9ja3F1b3RlPgotMTItIE9iamVjdHMgcGFzc2VkIHRvIG1lbWJlciBmdW5jdGlvbnMgb2YgYSBjb250YWluZXIgYXMgcnZhbHVlIHJlZmVyZW5jZXMgc2hhbGwgbm90IGJlIGVsZW1lbnRzIG9mIHRoYXQgY29udGFpbmVyLiBObyAKZGlhZ25vc3RpYyByZXF1aXJlZC4KPC9ibG9ja3F1b3RlPgoKPHA+CkEgcmVmZXJlbmNlIGlzIG5vdCBhbiBvYmplY3QsIGJ1dCB0aGlzIHNlbnRlbmNlIGFwcGVhcnMgdG8gY2xhaW0gc28uCjwvcD4KCjxwPgpXaGF0IGlzIHByb2JhYmx5IG1lYW50IGhlcmU6CjwvcD4KPGJsb2NrcXVvdGU+CkFuIG9iamVjdCBib3VuZCB0byBhbiBydmFsdWUKcmVmZXJlbmNlIHBhcmFtZXRlciBvZiBhIG1lbWJlciBmdW5jdGlvbiBvZiBhIGNvbnRhaW5lciBzaGFsbCBub3QgYmUKYW4gZWxlbWVudCBvZiB0aGF0IGNvbnRhaW5lcjsgbm8gZGlhZ25vc3RpYyByZXF1aXJlZC4KPC9ibG9ja3F1b3RlPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgMjMuMSBbY29udGFpbmVyLnJlcXVpcmVtZW50c106CjwvcD4KCjxibG9ja3F1b3RlPgotMTItIDxkZWw+T2JqZWN0cyBwYXNzZWQgdG8gbWVtYmVyIGZ1bmN0aW9ucyBvZiBhIGNvbnRhaW5lciBhcyBydmFsdWUgcmVmZXJlbmNlcyBzaGFsbCBub3QgYmUgZWxlbWVudHM8L2RlbD4KPGlucz5BbiBvYmplY3QgYm91bmQgdG8gYW4gcnZhbHVlCnJlZmVyZW5jZSBwYXJhbWV0ZXIgb2YgYSBtZW1iZXIgZnVuY3Rpb24gb2YgYSBjb250YWluZXIgc2hhbGwgbm90IGJlCmFuIGVsZW1lbnQ8L2lucz4Kb2YgdGhhdCBjb250YWluZXI8ZGVsPi48L2RlbD48aW5zPjs8L2lucz4gPGRlbD5OPC9kZWw+PGlucz5uPC9pbnM+byAKZGlhZ25vc3RpYyByZXF1aXJlZC4KPC9ibG9ja3F1b3RlPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3NjEiPjwvYT43NjEuIDx0dD51bm9yZGVyZWRfbWFwPC90dD4gbmVlZHMgYW4gPHR0PmF0KCk8L3R0PiBtZW1iZXIgZnVuY3Rpb248L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuNC4xLjIgW3Vub3JkLm1hcC5lbGVtXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBKb2UgR290dG1hbiA8Yj5EYXRlOjwvYj4gMjAwNy0xMS0xNTwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIG5ldyBtZW1iZXIgZnVuY3Rpb24gPHR0PmF0KCk8L3R0PiB3YXMgcmVjZW50bHkgYWRkZWQgdG8gPHR0PnN0ZDo6bWFwKCk8L3R0Pi4gIEl0IGFjdHMgCmxpa2UgPHR0Pm9wZXJhdG9yW10oKTwvdHQ+LCBleGNlcHQgaXQgdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBpbnB1dCBrZXkgaXMgCm5vdCBmb3VuZC4gIEl0IGlzIHVzZWZ1bCB3aGVuIHRoZSA8dHQ+bWFwPC90dD4gaXMgPHR0PmNvbnN0PC90dD4sIHRoZSA8dHQ+dmFsdWVfdHlwZTwvdHQ+IG9mIHRoZSAKa2V5IGRvZXNuJ3QgaGF2ZSAgYSBkZWZhdWx0IGNvbnN0cnVjdG9yLCBpdCBpcyBhbiBlcnJvciBpZiB0aGUga2V5IGlzIApub3QgZm91bmQsIG9yIHRoZSB1c2VyIHdhbnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBhZGRpbmcgYW4gZWxlbWVudCB0byAKdGhlIG1hcC4gIEZvciBleGFjdGx5IHRoZXNlIHNhbWUgcmVhc29ucywgPHR0PmF0KCk8L3R0PiB3b3VsZCBiZSBlcXVhbGx5IHVzZWZ1bCAKaW4gPHR0PnN0ZDo6dW5vcmRlcmVkX21hcDwvdHQ+Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRvIHRoZSBkZWZpbml0aW9uIG9mIDx0dD51bm9yZGVyZWRfbWFwPC90dD4gdW5kZXIgImxvb2t1cCIgKDIzLjQuMSBbdW5vcmQubWFwXSk6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+bWFwcGVkX3R5cGUmYW1wOyBhdChjb25zdCBrZXlfdHlwZSZhbXA7IGspOwpjb25zdCBtYXBwZWRfdHlwZSAmYW1wO2F0KGNvbnN0IGtleV90eXBlICZhbXA7aykgY29uc3Q7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpBZGQgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyB0byAyMy40LjEuMiBbdW5vcmQubWFwLmVsZW1dOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT5tYXBwZWRfdHlwZSZhbXA7IGF0KGNvbnN0IGtleV90eXBlJmFtcDsgayk7CmNvbnN0IG1hcHBlZF90eXBlICZhbXA7YXQoY29uc3Qga2V5X3R5cGUgJmFtcDtrKSBjb25zdDsKPC9wcmU+CjxibG9ja3F1b3RlPgo8cD4KPGk+UmV0dXJuczo8L2k+IEEgcmVmZXJlbmNlIHRvIDx0dD54LnNlY29uZDwvdHQ+LCB3aGVyZSA8dHQ+eDwvdHQ+IGlzIHRoZSAodW5pcXVlKSBlbGVtZW50IAp3aG9zZSBrZXkgaXMgZXF1aXZhbGVudCB0byA8dHQ+azwvdHQ+Lgo8L3A+CjxwPgo8aT5UaHJvd3M6PC9pPiBBbiBleGNlcHRpb24gb2JqZWN0IG9mIHR5cGUgPHR0Pm91dF9vZl9yYW5nZTwvdHQ+IGlmIG5vIHN1Y2ggZWxlbWVudCAKaXMgcHJlc2VudC4KPC9wPgo8L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCjxwPjxpPlsKQmVsbGV2dWU6ICBFZGl0b3JpYWwgbm90ZTogdGhlICIodW5pcXVlKSIgZGlmZmVycyBmcm9tIG1hcC4KXTwvaT48L3A+CgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3NjYiPjwvYT43NjYuIEluY29uc2lzdGVudCBleGNlcHRpb24gZ3VhcmFudGVlcyBiZXR3ZWVuIG9yZGVyZWQgYW5kIHVub3JkZXJlZCBhc3NvY2lhdGl2ZSBjb250YWluZXJzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIzLjEgW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdLCAyMy4xLjUuMSBbdW5vcmQucmVxLmV4Y2VwdF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSW9uIEdhenRh8WFnYSA8Yj5EYXRlOjwvYj4gMjAwNy0xMi0yMjwvcD4KPHA+PGI+VmlldyBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXgtb3Blbi5odG1sI2NvbnRhaW5lci5yZXF1aXJlbWVudHMiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtjb250YWluZXIucmVxdWlyZW1lbnRzXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2NvbnRhaW5lci5yZXF1aXJlbWVudHMiPmlzc3VlczwvYT4gaW4gW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KMjMuMSBbY29udGFpbmVyLnJlcXVpcmVtZW50c11wMTAgc3RhdGVzOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+ClVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIChzZWUgMjMuMi4yLjMgYW5kIDIzLjIuNS40KSBhbGwgY29udGFpbmVyIHR5cGVzIGRlZmluZWQgaW4gdGhpcyBjbGF1c2UgbWVldCB0aGUgZm9sbG93aW5nCmFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzOgo8L3A+Cjx1bD4KCjxsaT5bLi4uXTwvbGk+Cgo8bGk+bm8gPHR0PmVyYXNlKCk8L3R0PiwgPHR0PnBvcF9iYWNrKCk8L3R0PiBvciA8dHQ+cG9wX2Zyb250KCk8L3R0PiBmdW5jdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uLjwvbGk+Cgo8L3VsPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KMjMuMi4yLjMgW2RlcXVlLm1vZGlmaWVyc10gYW5kIDIzLjIuNi40IFt2ZWN0b3IubW9kaWZpZXJzXSBvZmZlcgphZGRpdGlvbmFsIGd1YXJhbnRlZXMgZm9yIDx0dD5kZXF1ZTwvdHQ+Lzx0dD52ZWN0b3IgaW5zZXJ0KCk8L3R0PiBhbmQKPHR0PmVyYXNlKCk8L3R0PiBtZW1iZXJzLiBIb3dldmVyLCAyMy4xIFtjb250YWluZXIucmVxdWlyZW1lbnRzXXAxMApkb2VzIG5vdCBtZW50aW9uIDIzLjEuNS4xIFt1bm9yZC5yZXEuZXhjZXB0XSB0aGF0IHNwZWNpZmllcyBleGNlcHRpb24Kc2FmZXR5IGd1YXJhbnRlZXMKZm9yIHVub3JkZXJlZCBjb250YWluZXJzLiBJbiBhZGRpdGlvbiwgMjMuMS41LjEgW3Vub3JkLnJlcS5leGNlcHRdcDEKb2ZmZXJzIHRoZSBmb2xsb3dpbmcgZ3VhcmF0ZWUgZm9yCjx0dD5lcmFzZSgpPC90dD46CjwvcD4KCjxibG9ja3F1b3RlPgpObyA8dHQ+ZXJhc2UoKTwvdHQ+IGZ1bmN0aW9uIHRocm93cyBhbiBleGNlcHRpb24gdW5sZXNzIHRoYXQgZXhjZXB0aW9uCmlzIHRocm93biBieSB0aGUgY29udGFpbmVyJ3MgSGFzaCBvciBQcmVkIG9iamVjdCAoaWYgYW55KS4KPC9ibG9ja3F1b3RlPgoKPHA+ClN1bW1hcnk6CjwvcD4KCjxwPgpBY2NvcmRpbmcgdG8gMjMuMSBbY29udGFpbmVyLnJlcXVpcmVtZW50c11wMTAgbm8KPHR0PmVyYXNlKCk8L3R0PiBmdW5jdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIHVubGVzcyBvdGhlcndpc2UKc3BlY2lmaWVkLiBBbHRob3VnaCBkb2VzIG5vdCBleHBsaWNpdGx5IG1lbnRpb24gMjMuMS41LjEgW3Vub3JkLnJlcS5leGNlcHRdLCB0aGlzIHNlY3Rpb24gb2ZmZXJzIGFkZGl0aW9uYWwgZ3VhcmFudGVlcwpmb3IgdW5vcmRlcmVkIGNvbnRhaW5lcnMsIGFsbG93aW5nIDx0dD5lcmFzZSgpPC90dD4gdG8gdGhyb3cgaWYKcHJlZGljYXRlIG9yIGhhc2ggZnVuY3Rpb24gdGhyb3dzLgo8L3A+Cgo8cD4KSW4gY29udHJhc3QsIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMgaGF2ZSBubyBleGNlcHRpb24gc2FmZXR5IGd1YXJhbnRlZXMKc2VjdGlvbiBzbyBubyA8dHQ+ZXJhc2UoKTwvdHQ+IGZ1bmN0aW9uIHNob3VsZCB0aHJvdywgPGVtPmluY2x1ZGluZwo8dHQ+ZXJhc2Uoayk8L3R0PjwvZW0+IHRoYXQgbmVlZHMgdG8gdXNlIHRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gdG8KcGVyZm9ybSBpdHMgd29yay4gVGhpcyBtZWFucyB0aGF0IHRoZSBwcmVkaWNhdGUgb2YgYW4gYXNzb2NpYXRpdmUKY29udGFpbmVyIGlzIG5vdCBhbGxvd2VkIHRvIHRocm93Lgo8L3A+Cgo8cD4KU286CjwvcD4KCjxvbD4KPGxpPgo8dHQ+ZXJhc2Uoayk8L3R0PiBmb3IgYXNzb2NpYXRpdmUgY29udGFpbmVycyBpcyBub3QgYWxsb3dlZCB0byB0aHJvdy4gT24KdGhlIG90aGVyIGhhbmQsIDx0dD5lcmFzZShrKTwvdHQ+IGZvciB1bm9yZGVyZWQgYXNzb2NpYXRpdmUgY29udGFpbmVycwppcyBhbGxvd2VkIHRvIHRocm93Lgo8L2xpPgo8bGk+Cjx0dD5lcmFzZShxKTwvdHQ+IGZvciBhc3NvY2lhdGl2ZSBjb250YWluZXJzIGlzIG5vdCBhbGxvd2VkIHRvIHRocm93LiBPbgp0aGUgb3RoZXIgaGFuZCwgPHR0PmVyYXNlKHEpPC90dD4gZm9yIHVub3JkZXJlZCBhc3NvY2lhdGl2ZSBjb250YWluZXJzCmlzIGFsbG93ZWQgdG8gdGhyb3cgaWYgaXQgdXNlcyB0aGUgaGFzaCBvciBwcmVkaWNhdGUuCjwvbGk+CjxsaT4KVG8gZnVsZmlsbCAxKSwgcHJlZGljYXRlcyBvZiBhc3NvY2lhdGl2ZSBjb250YWluZXJzIGFyZSBub3QgYWxsb3dlZCB0byB0aHJvdy4KUHJlZGljYXRlcyBvZiB1bm9yZGVyZWQgYXNzb2NpYXRpdmUgY29udGFpbmVycyBhcmUgYWxsb3dlZCB0byB0aHJvdy4KPC9saT4KPGxpPgoyKSBicmVha3MgYSB3aWRlbHkgdXNlZCBwcm9ncmFtbWluZyBwYXR0ZXJuIChmbHl3ZWlnaHQgcGF0dGVybikgZm9yCnVub3JkZXJlZCBjb250YWluZXJzLCB3aGVyZSBvYmplY3RzIGFyZSByZWdpc3RlcmVkIGluIGEgZ2xvYmFsIG1hcCBpbgp0aGVpciBjb25zdHJ1Y3RvcnMgYW5kIHVucmVnaXN0ZXJlZCBpbiB0aGVpciBkZXN0cnVjdG9ycy4gSWYgPHR0PmVyYXNlKHEpPC90dD4gaXMKYWxsb3dlZCB0byB0aHJvdywgdGhlIGRlc3RydWN0b3Igb2YgdGhlIG9iamVjdCB3b3VsZCBuZWVkIHRvIHJldGhyb3cgdGhlCmV4Y2VwdGlvbiBvciBzd2FsbG93IGl0LCBsZWF2aW5nIHRoZSBvYmplY3QgcmVnaXN0ZXJlZC4KPC9saT4KPC9vbD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDcmVhdGUgYSBuZXcgc3ViLXNlY3Rpb24gb2YgMjMuMS40IFthc3NvY2lhdGl2ZS5yZXFtdHNdIChwZXJoYXBzIFthc3NvY2lhdGl2ZS5yZXEuZXhjZXB0XSkgdGl0bGVkICJFeGNlcHRpb24Kc2FmZXR5IGd1YXJhbnRlZXMiLgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CjEgRm9yIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMsIG5vIDx0dD5jbGVhcigpPC90dD4gZnVuY3Rpb24gdGhyb3dzIGFuIGV4Y2VwdGlvbi4KPHR0PmVyYXNlKGspPC90dD4gZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIHVubGVzcyB0aGF0IGV4Y2VwdGlvbiBpcyB0aHJvd24gYnkKdGhlIGNvbnRhaW5lcidzIFByZWQgb2JqZWN0IChpZiBhbnkpLgo8L3A+Cgo8cD4KMiBGb3IgYXNzb2NpYXRpdmUgY29udGFpbmVycywgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBieSBhbnkgb3BlcmF0aW9uCmZyb20gd2l0aGluIGFuIDx0dD5pbnNlcnQoKTwvdHQ+IGZ1bmN0aW9uIGluc2VydGluZyBhIHNpbmdsZSBlbGVtZW50LCB0aGUKPHR0Pmluc2VydCgpPC90dD4gZnVuY3Rpb24gaGFzIG5vIGVmZmVjdC4KPC9wPgoKPHA+CjMgRm9yIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMsIG5vIDx0dD5zd2FwPC90dD4gZnVuY3Rpb24gdGhyb3dzIGFuIGV4Y2VwdGlvbgp1bmxlc3MgdGhhdCBleGNlcHRpb24gaXMgdGhyb3duIGJ5IHRoZSBjb3B5IGNvbnN0cnVjdG9yIG9yIGNvcHkKYXNzaWdubWVudCBvcGVyYXRvciBvZiB0aGUgY29udGFpbmVyJ3MgUHJlZCBvYmplY3QgKGlmIGFueSkuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSAyMy4xLjUuMSBbdW5vcmQucmVxLmV4Y2VwdF1wMToKPC9wPgoKPGJsb2NrcXVvdGU+CkZvciB1bm9yZGVyZWQgYXNzb2NpYXRpdmUgY29udGFpbmVycywgbm8gPHR0PmNsZWFyKCk8L3R0PiBmdW5jdGlvbgp0aHJvd3MgYW4gZXhjZXB0aW9uLiA8ZGVsPk5vPC9kZWw+IDx0dD5lcmFzZSg8aW5zPms8L2lucz4pPC90dD4KPGRlbD5mdW5jdGlvbjwvZGVsPiA8aW5zPmRvZXMgbm90PC9pbnM+IHRocm93PGRlbD5zPC9kZWw+IGFuIGV4Y2VwdGlvbgp1bmxlc3MgdGhhdCBleGNlcHRpb24gaXMgdGhyb3duIGJ5IHRoZSBjb250YWluZXIncyBIYXNoIG9yIFByZWQgb2JqZWN0CihpZiBhbnkpLgo8L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDIzLjEgW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdcDEwIHRvIGFkZCByZWZlcmVuY2VzIHRvIG5ldyBzZWN0aW9uczoKPC9wPgoKPGJsb2NrcXVvdGU+ClVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIChzZWUgW2RlcXVlLm1vZGlmaWVyc108aW5zPiw8L2lucz4KPGRlbD5hbmQ8L2RlbD4gW3ZlY3Rvci5tb2RpZmllcnNdPGlucz4sIFthc3NvY2lhdGl2ZS5yZXEuZXhjZXB0XSwKW3Vub3JkLnJlcS5leGNlcHRdPC9pbnM+KSBhbGwgY29udGFpbmVyIHR5cGVzIGRlZmluZWQgaW4gdGhpcyBjbGF1c2UgbWVldAp0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzOgo8L2Jsb2NrcXVvdGU+Cgo8cD4KQ2hhbmdlIDIzLjEgW2NvbnRhaW5lci5yZXF1aXJlbWVudHNdcDEwIHJlZmVycmluZyB0byA8dHQ+c3dhcDwvdHQ+Ogo8L3A+Cgo8YmxvY2txdW90ZT4KPHVsPgo8bGk+Cm5vIDx0dD5zd2FwKCk8L3R0PiBmdW5jdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uPGRlbD4gdW5sZXNzIHRoYXQgZXhjZXB0aW9uIGlzIHRocm93bgpieSB0aGUgY29weSBjb25zdHJ1Y3RvciBvciBhc3NpZ25tZW50IG9wZXJhdG9yIG9mIHRoZSBjb250YWluZXIncwpDb21wYXJlIG9iamVjdCAoaWYgYW55OyBzZWUgW2Fzc29jaWF0aXZlLnJlcW10c10pPC9kZWw+Lgo8L2xpPgo8L3VsPgo8L2Jsb2NrcXVvdGU+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9Ijc2OCI+PC9hPjc2OC4gVHlwb3MgaW4gW2F0b21pY3NdPzwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyOS4zLjMgW2F0b21pY3MudHlwZXMuZ2VuZXJpY10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gQWxiZXJ0byBHYW5lc2ggQmFyYmF0aSA8Yj5EYXRlOjwvYj4gMjAwNy0xMi0yODwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KaW4gdGhlIGxhdGVzdCBwdWJsaWNseSBhdmFpbGFibGUgZHJhZnQsIHBhcGVyCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDcvbjI0NjEucGRmIj5OMjY0MTwvYT4sCmluIHNlY3Rpb24gMjkuMy4zIFthdG9taWNzLnR5cGVzLmdlbmVyaWNdLCB0aGUgZm9sbG93aW5nIHNwZWNpYWxpemF0aW9uIG9mIHRoZSB0ZW1wbGF0ZQo8dHQ+YXRvbWljJmx0OyZndDs8L3R0PiBpcyBwcm92aWRlZCBmb3IgcG9pbnRlcnM6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7IHN0cnVjdCBhdG9taWMmbHQ7VComZ3Q7IDogYXRvbWljX2FkZHJlc3MgeyAKICBUKiBmZXRjaF9hZGQocHRyZGlmZl90LCBtZW1vcnlfb3JkZXIgPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgdm9sYXRpbGU7IAogIFQqIGZldGNoX3N1YihwdHJkaWZmX3QsIG1lbW9yeV9vcmRlciA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSB2b2xhdGlsZTsgCgogIGF0b21pYygpID0gZGVmYXVsdDsgCiAgY29uc3RleHByIGV4cGxpY2l0IGF0b21pYyhUKTsgCiAgYXRvbWljKGNvbnN0IGF0b21pYyZhbXA7KSA9IGRlbGV0ZTsgCiAgYXRvbWljJmFtcDsgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyZhbXA7KSA9IGRlbGV0ZTsgCgogIFQqIG9wZXJhdG9yPShUKikgdm9sYXRpbGU7IAogIFQqIG9wZXJhdG9yKysoaW50KSB2b2xhdGlsZTsgCiAgVCogb3BlcmF0b3ItLShpbnQpIHZvbGF0aWxlOyAKICBUKiBvcGVyYXRvcisrKCkgdm9sYXRpbGU7IAogIFQqIG9wZXJhdG9yLS0oKSB2b2xhdGlsZTsgCiAgVCogb3BlcmF0b3IrPShwdHJkaWZmX3QpIHZvbGF0aWxlOwogIFQqIG9wZXJhdG9yLT0ocHRyZGlmZl90KSB2b2xhdGlsZTsgCn07CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpGaXJzdCBvZiBhbGwsIHRoZXJlIGlzIGEgdHlwbyBpbiB0aGUgbm9uLWRlZmF1bHQgY29uc3RydWN0b3Igd2hpY2gKc2hvdWxkIHRha2UgYSA8dHQ+VCo8L3R0PiByYXRoZXIgdGhhbiBhIDx0dD5UPC90dD4uCjwvcD4KCjxwPgpBcyB5b3UgY2FuIHNlZSwgdGhlIHNwZWNpYWxpemF0aW9uIHJlZGVmaW5lIGFuZCB0aGVyZWZvcmUgaGlkZSBhIGZldwptZXRob2RzIGZyb20gdGhlIGJhc2UgY2xhc3MgPHR0PmF0b21pY19hZGRyZXNzPC90dD4sIG5hbWVseSA8dHQ+ZmV0Y2hfYWRkPC90dD4sIDx0dD5mZXRjaF9zdWI8L3R0PiwKPHR0Pm9wZXJhdG9yPTwvdHQ+LCA8dHQ+b3BlcmF0b3IrPTwvdHQ+IGFuZCA8dHQ+b3BlcmF0b3ItPTwvdHQ+LiBUaGF0J3MgZ29vZCwgYnV0Li4uIHdoYXQgaGFwcGVuZWQKdG8gdGhlIG90aGVyIG1ldGhvZHMsIGluIHBhcnRpY3VsYXIgdGhlc2Ugb25lczoKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT52b2lkIHN0b3JlKFQqLCBtZW1vcnlfb3JkZXIgPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgdm9sYXRpbGU7ClQqIGxvYWQoIG1lbW9yeV9vcmRlciA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0ICkgdm9sYXRpbGU7ClQqIHN3YXAoIFQqLCBtZW1vcnlfb3JkZXIgPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCApIHZvbGF0aWxlOwpib29sIGNvbXBhcmVfc3dhcCggVComYW1wOywgVCosIG1lbW9yeV9vcmRlciwgbWVtb3J5X29yZGVyICkgdm9sYXRpbGU7CmJvb2wgY29tcGFyZV9zd2FwKCBUKiZhbXA7LCBUKiwgbWVtb3J5X29yZGVyID0gbWVtb3J5X29yZGVyX3NlcV9jc3QgKSB2b2xhdGlsZTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CkJ5IHJlYWRpbmcgcGFwZXIKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNy9uMjQyNy5odG1sIj5OMjQyNyAiQysrIEF0b21pYyBUeXBlcyBhbmQgT3BlcmF0aW9ucyI8L2E+LApJIHNlZSB0aGF0IHRoZQpkZWZpbml0aW9uIG9mIHRoZSBzcGVjaWFsaXphdGlvbiA8dHQ+YXRvbWljJmx0O1QqJmd0OzwvdHQ+IG1hdGNoZXMgdGhlIG9uZSBpbiB0aGUKZHJhZnQsIGJ1dCBpbiB0aGUgZXhhbXBsZSBpbXBsZW1lbnRhdGlvbiB0aGUgbWV0aG9kcyA8dHQ+bG9hZCgpPC90dD4sIDx0dD5zd2FwKCk8L3R0PgphbmQgPHR0PmNvbXBhcmVfc3dhcCgpPC90dD4gYXJlIGluZGVlZCBwcmVzZW50Lgo8L3A+Cgo8cD4KU3RyYW5nZWx5LCB0aGUgZXhhbXBsZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCByZWRlZmluZSB0aGUgbWV0aG9kCjx0dD5zdG9yZSgpPC90dD4uIEl0J3MgdHJ1ZSB0aGF0IGEgPHR0PlQqPC90dD4gaXMgYWx3YXlzIGNvbnZlcnRpYmxlIHRvIDx0dD52b2lkKjwvdHQ+LCBidXQgbm90CmhpZGluZyB0aGUgPHR0PnZvaWQqPC90dD4gc2lnbmF0dXJlIGZyb20gdGhlIGJhc2UgY2xhc3MgbWFrZXMgdGhlIGNsYXNzCmVycm9yLXByb25lIHRvIHNheSB0aGUgbGVhc3Q6IGl0IGxldHMgeW91IGFzc2lnbiBwb2ludGVycyBvZiBhbnkgdHlwZSB0bwphIDx0dD5UKjwvdHQ+LCB3aXRob3V0IGFueSBoaW50IGZyb20gdGhlIGNvbXBpbGVyLgo8L3A+Cgo8cD4KSXMgdGhlcmUgYSB0cnVlIGludGVudCB0byByZW1vdmUgdGhlbSBmcm9tIHRoZSBzcGVjaWFsaXphdGlvbiBvciBhcmUKdGhleSBqdXN0IG1pc3NpbmcgZnJvbSB0aGUgZGVmaW5pdGlvbiBiZWNhdXNlIG9mIGEgbWlzdGFrZT8KPC9wPgoKPHA+PGk+WwpCZWxsZXZ1ZToKXTwvaT48L3A+CgoKPGJsb2NrcXVvdGU+CjxwPgpUaGUgcHJvcG9zZWQgcmV2aXNpb25zIGFyZSBhY2NlcHRlZC4KPC9wPgo8cD4KRnVydGhlciBkaXNjdXNzaW9uOiB3aHkgaXMgdGhlIGN0b3IgbGFiZWxlZCAiY29uc3RleHByIj8gTGF3cmVuY2Ugc2FpZAp0aGlzIHBlcm1pdHMgdGhlIG9iamVjdCB0byBiZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkLCBhbmQgdGhhdCdzCmltcG9ydGFudCBiZWNhdXNlIG90aGVyd2lzZSB0aGVyZSB3b3VsZCBiZSBhIHJhY2UgY29uZGl0aW9uIG9uCmluaXRpYWxpemF0aW9uLgo8L3A+CjwvYmxvY2txdW90ZT4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgdGhlIHN5bm9wc2lzIGluIDI5LjMuMyBbYXRvbWljcy50eXBlcy5nZW5lcmljXToKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsgc3RydWN0IGF0b21pYyZsdDtUKiZndDsgOiBhdG9taWNfYWRkcmVzcyB7IAogIDxpbnM+dm9pZCBzdG9yZShUKiwgbWVtb3J5X29yZGVyID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlOzwvaW5zPgogIDxpbnM+VCogbG9hZCggbWVtb3J5X29yZGVyID0gbWVtb3J5X29yZGVyX3NlcV9jc3QgKSB2b2xhdGlsZTs8L2lucz4KICA8aW5zPlQqIHN3YXAoIFQqLCBtZW1vcnlfb3JkZXIgPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCApIHZvbGF0aWxlOzwvaW5zPgogIDxpbnM+Ym9vbCBjb21wYXJlX3N3YXAoIFQqJmFtcDssIFQqLCBtZW1vcnlfb3JkZXIsIG1lbW9yeV9vcmRlciApIHZvbGF0aWxlOzwvaW5zPgogIDxpbnM+Ym9vbCBjb21wYXJlX3N3YXAoIFQqJmFtcDssIFQqLCBtZW1vcnlfb3JkZXIgPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCApIHZvbGF0aWxlOzwvaW5zPgoKICBUKiBmZXRjaF9hZGQocHRyZGlmZl90LCBtZW1vcnlfb3JkZXIgPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgdm9sYXRpbGU7IAogIFQqIGZldGNoX3N1YihwdHJkaWZmX3QsIG1lbW9yeV9vcmRlciA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSB2b2xhdGlsZTsgCgogIGF0b21pYygpID0gZGVmYXVsdDsgCiAgY29uc3RleHByIGV4cGxpY2l0IGF0b21pYyhUPGlucz4qPC9pbnM+KTsgCiAgYXRvbWljKGNvbnN0IGF0b21pYyZhbXA7KSA9IGRlbGV0ZTsgCiAgYXRvbWljJmFtcDsgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyZhbXA7KSA9IGRlbGV0ZTsgCgogIFQqIG9wZXJhdG9yPShUKikgdm9sYXRpbGU7IAogIFQqIG9wZXJhdG9yKysoaW50KSB2b2xhdGlsZTsgCiAgVCogb3BlcmF0b3ItLShpbnQpIHZvbGF0aWxlOyAKICBUKiBvcGVyYXRvcisrKCkgdm9sYXRpbGU7IAogIFQqIG9wZXJhdG9yLS0oKSB2b2xhdGlsZTsgCiAgVCogb3BlcmF0b3IrPShwdHJkaWZmX3QpIHZvbGF0aWxlOwogIFQqIG9wZXJhdG9yLT0ocHRyZGlmZl90KSB2b2xhdGlsZTsgCn07CjwvcHJlPjwvYmxvY2txdW90ZT4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNzcwIj48L2E+NzcwLiBzdGQ6OmZ1bmN0aW9uIHNob3VsZCB1c2UgcnZhbHVlIHN3YXA8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjAuNi4xNSBbZnVuYy53cmFwXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEYW5pZWwgS3L8Z2xlciA8Yj5EYXRlOjwvYj4gMjAwOC0wMS0xMDwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KSXQgaXMgZXhwZWN0ZWQgdGhhdCB0eXBpY2FsIGltcGxlbWVudGF0aW9ucyBvZiA8dHQ+c3RkOjpmdW5jdGlvbjwvdHQ+IHdpbGwKdXNlIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb25zIGF0IGxlYXN0IHVuZGVyIGdpdmVuIGNvbmRpdGlvbnMsCnNvIGl0IHNlZW1zIGFwcHJvcHJpYXRlIHRvIGNoYW5nZSB0aGUgY3VycmVudCBsdmFsdWUgc3dhcHBhYmlsdHkgb2YKdGhpcyBjbGFzcyB0byBydmFsdWUgc3dhcHBhYmlsaXR5Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjAuNiBbZnVuY3Rpb24ub2JqZWN0c10sIGhlYWRlciA8dHQ+Jmx0O2Z1bmN0aW9uYWwmZ3Q7PC90dD4gc3lub3BzaXMsIGp1c3QgYmVsb3cgb2YKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBSLCBjbGFzcy4uLiBBcmdUeXBlcyZndDsKICB2b2lkIHN3YXAoZnVuY3Rpb24mbHQ7UihBcmdUeXBlcy4uLikmZ3Q7JmFtcDssIGZ1bmN0aW9uJmx0O1IoQXJnVHlwZXMuLi4pJmd0OyZhbXA7KTsKPGlucz50ZW1wbGF0ZSZsdDtjbGFzcyBSLCBjbGFzcy4uLiBBcmdUeXBlcyZndDsKICB2b2lkIHN3YXAoZnVuY3Rpb24mbHQ7UihBcmdUeXBlcy4uLikmZ3Q7JmFtcDsmYW1wOywgZnVuY3Rpb24mbHQ7UihBcmdUeXBlcy4uLikmZ3Q7JmFtcDspOwp0ZW1wbGF0ZSZsdDtjbGFzcyBSLCBjbGFzcy4uLiBBcmdUeXBlcyZndDsKICB2b2lkIHN3YXAoZnVuY3Rpb24mbHQ7UihBcmdUeXBlcy4uLikmZ3Q7JmFtcDssIGZ1bmN0aW9uJmx0O1IoQXJnVHlwZXMuLi4pJmd0OyZhbXA7JmFtcDspOzwvaW5zPgo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KSW4gMjAuNi4xNS4yIFtmdW5jLndyYXAuZnVuY10gY2xhc3MgPHR0PmZ1bmN0aW9uPC90dD4gZGVmaW5pdGlvbiwgY2hhbmdlCjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dm9pZCBzd2FwKGZ1bmN0aW9uJmFtcDs8aW5zPiZhbXA7PC9pbnM+KTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CkluIDIwLjYuMTUuMiBbZnVuYy53cmFwLmZ1bmNdLCBqdXN0IGJlbG93IG9mCjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIFIsIGNsYXNzLi4uIEFyZ1R5cGVzJmd0OwogIHZvaWQgc3dhcChmdW5jdGlvbiZsdDtSKEFyZ1R5cGVzLi4uKSZndDsmYW1wOywgZnVuY3Rpb24mbHQ7UihBcmdUeXBlcy4uLikmZ3Q7JmFtcDspOwo8aW5zPnRlbXBsYXRlICZsdDtjbGFzcyBSLCBjbGFzcy4uLiBBcmdUeXBlcyZndDsKICB2b2lkIHN3YXAoZnVuY3Rpb24mbHQ7UihBcmdUeXBlcy4uLikmZ3Q7JmFtcDsmYW1wOywgZnVuY3Rpb24mbHQ7UihBcmdUeXBlcy4uLikmZ3Q7JmFtcDspOwp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgUiwgY2xhc3MuLi4gQXJnVHlwZXMmZ3Q7CiAgdm9pZCBzd2FwKGZ1bmN0aW9uJmx0O1IoQXJnVHlwZXMuLi4pJmd0OyZhbXA7LCBmdW5jdGlvbiZsdDtSKEFyZ1R5cGVzLi4uKSZndDsmYW1wOyZhbXA7KTs8L2lucz4KPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CkluIDIwLjYuMTUuMi4yIFtmdW5jLndyYXAuZnVuYy5tb2RdIGNoYW5nZQo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnZvaWQgc3dhcChmdW5jdGlvbiZhbXA7PGlucz4mYW1wOzwvaW5zPiBvdGhlcik7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpJbiAyMC42LjE1LjIuNyBbZnVuYy53cmFwLmZ1bmMuYWxnXSBhZGQgdGhlIHR3byBvdmVybG9hZHMKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT48aW5zPnRlbXBsYXRlJmx0O2NsYXNzIFIsIGNsYXNzLi4uIEFyZ1R5cGVzJmd0OwogIHZvaWQgc3dhcChmdW5jdGlvbiZsdDtSKEFyZ1R5cGVzLi4uKSZndDsmYW1wOyZhbXA7IGYxLCBmdW5jdGlvbiZsdDtSKEFyZ1R5cGVzLi4uKSZndDsmYW1wOyBmMik7CnRlbXBsYXRlJmx0O2NsYXNzIFIsIGNsYXNzLi4uIEFyZ1R5cGVzJmd0OwogIHZvaWQgc3dhcChmdW5jdGlvbiZsdDtSKEFyZ1R5cGVzLi4uKSZndDsmYW1wOyBmMSwgZnVuY3Rpb24mbHQ7UihBcmdUeXBlcy4uLikmZ3Q7JmFtcDsmYW1wOyBmMik7PC9pbnM+CjwvcHJlPjwvYmxvY2txdW90ZT4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNzc1Ij48L2E+Nzc1LiBUdXBsZSBpbmRleGluZyBzaG91bGQgYmUgdW5zaWduZWQ/PC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDIwLjQuMS40IFt0dXBsZS5oZWxwZXJdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IEFsaXNkYWlyIE1lcmVkaXRoIDxiPkRhdGU6PC9iPiAyMDA4LTAxLTE2PC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpUaGUgdHVwbGUgZWxlbWVudCBhY2Nlc3MgQVBJIGlkZW50aWZpZXMgdGhlIGVsZW1lbnQgaW4gdGhlIHNlcXVlbmNlCnVzaW5nIHNpZ25lZCBpbnRlZ2VycywgYW5kIHRoZW4gZ29lcyBvbiB0byBlbmZvcmNlIHRoZSByZXF1aXJlbWVudCB0aGF0CkkgYmUgJmd0Oz0gMC4gIFRoZXJlIGlzIGEgbXVjaCBlYXNpZXIgd2F5IHRvIGRvIHRoaXMgLSBkZWNsYXJlIEkgYXMKPHR0PnVuc2lnbmVkPC90dD4uCjwvcD4KPHA+CkluIGZhY3QgdGhlIHByb3Bvc2FsIGlzIHRvIHVzZSA8Y29kZT5zdGQ6OnNpemVfdDwvY29kZT4sIG1hdGNoaW5nIHRoZSB0eXBlIHVzZWQgaW4gdGhlIDx0dD50dXBsZV9zaXplPC90dD4gQVBJLgo8L3A+CjxwPgpBIHNlY29uZCBzdWdnZXN0aW9uIGlzIHRoYXQgaXQgaXMgaGFyZCB0byBpbWFnaW5lIGFuIEFQSSB0aGF0IGRlZHVjZXMKYW5kIGluZGV4IGF0IGNvbXBpbGUgdGltZSBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0aHJvd2luZyBhbiBleGNlcHRpb24uCkFkZCBhIHNwZWNpZmljIDxlbT5UaHJvd3M6PC9lbT4gTm90aGluZyBwYXJhZ3JhcGggdG8gZWFjaCBlbGVtZW50CmFjY2VzcyBBUEkuCjwvcD4KPHA+CkluIGFkZGl0aW9uIHRvIDxjb2RlPnR1cGxlPC9jb2RlPiwgdXBkYXRlIHRoZSBBUEkgYXBwbGllcyB0bwo8Y29kZT5wYWlyPC9jb2RlPiBhbmQgPGNvZGU+YXJyYXk8L2NvZGU+LCBhbmQgc2hvdWxkIGJlIHVwZGF0ZWQKYWNjb3JkaW5nbHkuCjwvcD4KCjxwPgpBIHRoaXJkIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIHJldHVybiB0eXBlIG9mIHRoZSA8Y29kZT5nZXQ8L2NvZGU+CmZ1bmN0aW9ucyBmb3IgPGNvZGU+c3RkOjpwYWlyPC9jb2RlPiBpcyBwc2V1ZG8tY29kZSwgYnV0IGl0IGlzIG5vdApjbGVhcmx5IG1hcmtlZCBhcyBzdWNoLiAgVGhlcmUgaXMgYWN0dWFsbHkgbm8gbmVlZCBmb3IgcHNldWRvLWNvZGUgYXMKdGhlIHJldHVybiB0eXBlIGNhbiBiZSBzcGVjaWZpZWQgcHJlY2lzZWx5IHdpdGggYSBjYWxsIHRvCjxjb2RlPnR1cGxlX2VsZW1lbnQ8L2NvZGU+LiAgVGhpcyBpcyBhbHJlYWR5IGRvbmUgZm9yCjxjb2RlPnN0ZDo6dHVwbGU8L2NvZGU+LCBhbmQgPGNvZGU+c3RkOjphcnJheTwvY29kZT4gZG9lcyBub3QgaGF2ZSBhCnByb2JsZW0gYXMgYWxsIGVsZW1lbnRzIGFyZSBvZiB0eXBlIDxjb2RlPlQ8L2NvZGU+Lgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KVXBkYXRlIGhlYWRlciAmbHQ7dXRpbGl0eSZndDsgc3lub3BzaXMgaW4gMjAuMiBbdXRpbGl0eV0KPC9wPgo8cHJlPjxlbT4vLyAyMC4yLjMsIHR1cGxlLWxpa2UgYWNjZXNzIHRvIHBhaXI6PC9lbT4KdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7IGNsYXNzIHR1cGxlX3NpemU7CnRlbXBsYXRlICZsdDs8ZGVsPmludDwvZGVsPjxpbnM+c2l6ZV90PC9pbnM+IEksIGNsYXNzIFQmZ3Q7IGNsYXNzIHR1cGxlX2VsZW1lbnQ7Cgp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVDEsIGNsYXNzIFQyJmd0OyBzdHJ1Y3QgdHVwbGVfc2l6ZSZsdDtzdGQ6OnBhaXImbHQ7VDEsIFQyJmd0OyAmZ3Q7Owp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVDEsIGNsYXNzIFQyJmd0OyBzdHJ1Y3QgdHVwbGVfZWxlbWVudCZsdDswLCBzdGQ6OnBhaXImbHQ7VDEsIFQyJmd0OyAmZ3Q7Owp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVDEsIGNsYXNzIFQyJmd0OyBzdHJ1Y3QgdHVwbGVfZWxlbWVudCZsdDsxLCBzdGQ6OnBhaXImbHQ7VDEsIFQyJmd0OyAmZ3Q7OwoKdGVtcGxhdGUmbHQ7PGRlbD5pbnQ8L2RlbD48aW5zPnNpemVfdDwvaW5zPiBJLCBjbGFzcyBUMSwgY2xhc3MgVDImZ3Q7CiAgPGRlbD5QPC9kZWw+PGlucz50eXBlbmFtZSB0dXBsZV9lbGVtZW50Jmx0O0ksIHN0ZDo6cGFpciZsdDtUMSwgVDImZ3Q7ICZndDs6OnR5cGUgPC9pbnM+JmFtcDsgZ2V0KHN0ZDo6cGFpciZsdDtUMSwgVDImZ3Q7JmFtcDspOwp0ZW1wbGF0ZSZsdDs8ZGVsPmludDwvZGVsPjxpbnM+c2l6ZV90PC9pbnM+IEksIGNsYXNzIFQxLCBjbGFzcyBUMiZndDsKICBjb25zdCA8ZGVsPlA8L2RlbD48aW5zPnR5cGVuYW1lIHR1cGxlX2VsZW1lbnQmbHQ7SSwgc3RkOjpwYWlyJmx0O1QxLCBUMiZndDsgJmd0Ozo6dHlwZSA8L2lucz4mYW1wOyBnZXQoY29uc3Qgc3RkOjpwYWlyJmx0O1QxLCBUMiZndDsmYW1wOyk7CjwvcHJlPgo8cD4KVXBkYXRlIDxzdHJvbmc+MjAuMi4zIFtwYWlyc10gUGFpcnM8L3N0cm9uZz4KPC9wPgo8cHJlPnRlbXBsYXRlJmx0OzxkZWw+aW50PC9kZWw+PGlucz5zaXplX3Q8L2lucz4gSSwgY2xhc3MgVDEsIGNsYXNzIFQyJmd0OwogIDxkZWw+UDwvZGVsPjxpbnM+dHlwZW5hbWUgdHVwbGVfZWxlbWVudCZsdDtJLCBzdGQ6OnBhaXImbHQ7VDEsIFQyJmd0OyAmZ3Q7Ojp0eXBlIDwvaW5zPiZhbXA7IGdldChwYWlyJmx0O1QxLCBUMiZndDsmYW1wOyk7CnRlbXBsYXRlJmx0OzxkZWw+aW50PC9kZWw+PGlucz5zaXplX3Q8L2lucz4gSSwgY2xhc3MgVDEsIGNsYXNzIFQyJmd0OwogIGNvbnN0IDxkZWw+UDwvZGVsPjxpbnM+dHlwZW5hbWUgdHVwbGVfZWxlbWVudCZsdDtJLCBzdGQ6OnBhaXImbHQ7VDEsIFQyJmd0OyAmZ3Q7Ojp0eXBlIDwvaW5zPiZhbXA7IGdldChjb25zdCBwYWlyJmx0O1QxLCBUMiZndDsmYW1wOyk7CjwvcHJlPgo8cD4KPGRlbD4yNCA8ZW0+UmV0dXJuIHR5cGU6PC9lbT4gSWYgPGNvZGU+SSA9PSAwPC9jb2RlPiB0aGVuIDxjb2RlPlA8L2NvZGU+IGlzIDxjb2RlPlQxPC9jb2RlPiwgaWYgPGNvZGU+SSA9PSAxPC9jb2RlPiB0aGVuIDxjb2RlPlA8L2NvZGU+IGlzIDxjb2RlPlQyPC9jb2RlPiwgYW5kIG90aGVyd2lzZSB0aGUgcHJvZ3JhbSBpcyBpbGwtZm9ybWVkLjwvZGVsPgo8L3A+CjxwPgoyNSA8ZW0+UmV0dXJuczo8L2VtPiBJZiA8Y29kZT5JID09IDA8L2NvZGU+IHJldHVybnMgPGNvZGU+cC5maXJzdDwvY29kZT4sIDxkZWw+b3RoZXJ3aXNlPC9kZWw+IDxpbnM+aWYgPGNvZGU+SSA9PSAxPC9jb2RlPjwvaW5zPiByZXR1cm5zIDxjb2RlPnAuc2Vjb25kPC9jb2RlPjxpbnM+LCBhbmQgb3RoZXJ3aXNlIHRoZSBwcm9ncmFtIGlzIGlsbC1mb3JtZWQ8L2lucz4uCjwvcD4KPHA+CjxpbnM+PGVtPlRocm93czo8L2VtPiBOb3RoaW5nLjwvaW5zPgo8L3A+CgoKPHA+ClVwZGF0ZSBoZWFkZXIgJmx0O3R1cGxlJmd0OyBzeW5vcHNpcyBpbiAyMC40IFt0dXBsZV0gd2l0aCBhIEFQSXMgYXMgYmVsb3c6CjwvcD4KPHByZT50ZW1wbGF0ZSAmbHQ7PGRlbD5pbnQ8L2RlbD48aW5zPnNpemVfdDwvaW5zPiBJLCBjbGFzcyBUJmd0OyBjbGFzcyB0dXBsZV9lbGVtZW50OyA8ZW0+Ly8gdW5kZWZpbmVkPC9lbT4KdGVtcGxhdGUgJmx0OzxkZWw+aW50PC9kZWw+PGlucz5zaXplX3Q8L2lucz4gSSwgY2xhc3MuLi4gVHlwZXMmZ3Q7IGNsYXNzIHR1cGxlX2VsZW1lbnQmbHQ7SSwgdHVwbGUmbHQ7VHlwZXMuLi4mZ3Q7ICZndDs7Cgo8ZW0+Ly8gMjAuMy4xLjQsIGVsZW1lbnQgYWNjZXNzOjwvZW0+CnRlbXBsYXRlICZsdDs8ZGVsPmludDwvZGVsPjxpbnM+c2l6ZV90PC9pbnM+IEksIGNsYXNzLi4uIFR5cGVzJmd0OwogIHR5cGVuYW1lIHR1cGxlX2VsZW1lbnQmbHQ7SSwgdHVwbGUmbHQ7VHlwZXMuLi4mZ3Q7ICZndDs6OnR5cGUmYW1wOyBnZXQodHVwbGUmbHQ7VHlwZXMuLi4mZ3Q7JmFtcDspOwp0ZW1wbGF0ZSAmbHQ7PGRlbD5pbnQ8L2RlbD48aW5zPnNpemVfdDwvaW5zPiBJLCBjbGFzcyAuLi4gdHlwZXMmZ3Q7CiAgdHlwZW5hbWUgdHVwbGVfZWxlbWVudCZsdDtJLCB0dXBsZSZsdDtUeXBlcy4uLiZndDsgJmd0Ozo6dHlwZSBjb25zdCZhbXA7IGdldChjb25zdCB0dXBsZSZsdDtUeXBlcy4uLiZndDsmYW1wOyk7CjwvcHJlPgoKPHA+ClVwZGF0ZSA8c3Ryb25nPjIwLjQuMS40IFt0dXBsZS5oZWxwZXJdIFR1cGxlIGhlbHBlciBjbGFzc2VzPC9zdHJvbmc+CjwvcD4KPHByZT50ZW1wbGF0ZSAmbHQ7PGRlbD5pbnQ8L2RlbD48aW5zPnNpemVfdDwvaW5zPiBJLCBjbGFzcy4uLiBUeXBlcyZndDsKY2xhc3MgdHVwbGVfZWxlbWVudCZsdDtJLCB0dXBsZSZsdDtUeXBlcy4uLiZndDsgJmd0OyB7CnB1YmxpYzoKICB0eXBlZGVmIFRJIHR5cGU7Cn07PC9wcmU+CjxwPgoxIDxlbT5SZXF1aXJlczo8L2VtPiA8Y29kZT48ZGVsPjAgJmx0Oz0gSSBhbmQgPC9kZWw+SSAmbHQ7IHNpemVvZi4uLihUeXBlcyk8L2NvZGU+LiBUaGUgcHJvZ3JhbSBpcyBpbGwtZm9ybWVkIGlmIDxjb2RlPkk8L2NvZGU+IGlzIG91dCBvZiBib3VuZHMuCjwvcD4KPHA+CjIgPGVtPlR5cGU6PC9lbT4gPGNvZGU+VEk8L2NvZGU+IGlzIHRoZSB0eXBlIG9mIHRoZSA8Y29kZT5JPC9jb2RlPnRoIGVsZW1lbnQgb2YgPGNvZGU+VHlwZXM8L2NvZGU+LCB3aGVyZSBpbmRleGluZyBpcyB6ZXJvLWJhc2VkLgo8L3A+CjxwPgpVcGRhdGUgPHN0cm9uZz4yMC40LjEuNSBbdHVwbGUuZWxlbV0gRWxlbWVudCBhY2Nlc3M8L3N0cm9uZz4KPC9wPgo8cHJlPnRlbXBsYXRlICZsdDs8ZGVsPmludDwvZGVsPjxpbnM+c2l6ZV90PC9pbnM+IEksIGNsYXNzLi4uIHR5cGVzICZndDsKdHlwZW5hbWUgdHVwbGVfZWxlbWVudCZsdDtJLCB0dXBsZSZsdDtUeXBlcy4uLiZndDsgJmd0Ozo6dHlwZSZhbXA7IGdldCh0dXBsZSZsdDtUeXBlcy4uLiZndDsmYW1wOyB0KTsKPC9wcmU+CjEgPGVtPlJlcXVpcmVzOjwvZW0+IDxjb2RlPjxkZWw+MCAmbHQ7PSBJIGFuZCA8L2RlbD5JICZsdDsgc2l6ZW9mLi4uKFR5cGVzKTwvY29kZT4uIFRoZSBwcm9ncmFtIGlzIGlsbC1mb3JtZWQgaWYgPGNvZGU+STwvY29kZT4gaXMgb3V0IG9mIGJvdW5kcy4KPHA+CjIgPGVtPlJldHVybnM6PC9lbT4gQSByZWZlcmVuY2UgdG8gdGhlIDxjb2RlPkk8L2NvZGU+dGggZWxlbWVudCBvZiA8Y29kZT50PC9jb2RlPiwgd2hlcmUgaW5kZXhpbmcgaXMgemVyby1iYXNlZC4KPC9wPgo8aW5zPjxlbT5UaHJvd3M6PC9lbT4gTm90aGluZy48L2lucz4KPHByZT50ZW1wbGF0ZSAmbHQ7PGRlbD5pbnQ8L2RlbD48aW5zPnNpemVfdDwvaW5zPiBJLCBjbGFzcy4uLiB0eXBlcyZndDsKdHlwZW5hbWUgdHVwbGVfZWxlbWVudCZsdDtJLCB0dXBsZSZsdDtUeXBlcy4uLiZndDsgJmd0Ozo6dHlwZSBjb25zdCZhbXA7IGdldChjb25zdCB0dXBsZSZsdDtUeXBlcy4uLiZndDsmYW1wOyB0KTsKPC9wcmU+CjxwPgozIDxlbT5SZXF1aXJlczo8L2VtPiA8Y29kZT48ZGVsPjAgJmx0Oz0gSSBhbmQgPC9kZWw+SSAmbHQ7IHNpemVvZi4uLihUeXBlcyk8L2NvZGU+LiBUaGUgcHJvZ3JhbSBpcyBpbGwtZm9ybWVkIGlmIDxjb2RlPkk8L2NvZGU+IGlzIG91dCBvZiBib3VuZHMuCjwvcD4KPHA+CjQgPGVtPlJldHVybnM6PC9lbT4gQSBjb25zdCByZWZlcmVuY2UgdG8gdGhlIDxjb2RlPkk8L2NvZGU+dGggZWxlbWVudCBvZiA8Y29kZT50PC9jb2RlPiwgd2hlcmUgaW5kZXhpbmcgaXMgemVyby1iYXNlZC4KPC9wPgo8cD4KPGlucz48ZW0+VGhyb3dzOjwvZW0+IE5vdGhpbmcuPC9pbnM+CjwvcD4KCgo8cD4KVXBkYXRlIGhlYWRlciAmbHQ7YXJyYXkmZ3Q7IHN5bm9wc2lzIGluIDIwLjIgW3V0aWxpdHldCjwvcD4KPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsgY2xhc3MgdHVwbGVfc2l6ZTsgPGVtPi8vIGZvcndhcmQgZGVjbGFyYXRpb248L2VtPgp0ZW1wbGF0ZSAmbHQ7PGRlbD5pbnQ8L2RlbD48aW5zPnNpemVfdDwvaW5zPiBJLCBjbGFzcyBUJmd0OyBjbGFzcyB0dXBsZV9lbGVtZW50OyA8ZW0+Ly8gZm9yd2FyZCBkZWNsYXJhdGlvbjwvZW0+CnRlbXBsYXRlICZsdDtjbGFzcyBULCBzaXplX3QgTiZndDsKICBzdHJ1Y3QgdHVwbGVfc2l6ZSZsdDthcnJheSZsdDtULCBOJmd0OyAmZ3Q7Owp0ZW1wbGF0ZSAmbHQ7PGRlbD5pbnQ8L2RlbD48aW5zPnNpemVfdDwvaW5zPiBJLCBjbGFzcyBULCBzaXplX3QgTiZndDsKICBzdHJ1Y3QgdHVwbGVfZWxlbWVudCZsdDtJLCBhcnJheSZsdDtULCBOJmd0OyAmZ3Q7Owp0ZW1wbGF0ZSAmbHQ7PGRlbD5pbnQ8L2RlbD48aW5zPnNpemVfdDwvaW5zPiBJLCBjbGFzcyBULCBzaXplX3QgTiZndDsKICBUJmFtcDsgZ2V0KGFycmF5Jmx0O1QsIE4mZ3Q7JmFtcDspOwp0ZW1wbGF0ZSAmbHQ7PGRlbD5pbnQ8L2RlbD48aW5zPnNpemVfdDwvaW5zPiBJLCBjbGFzcyBULCBzaXplX3QgTiZndDsKICBjb25zdCBUJmFtcDsgZ2V0KGNvbnN0IGFycmF5Jmx0O1QsIE4mZ3Q7JmFtcDspOwo8L3ByZT4KCjxwPgpVcGRhdGUgPHN0cm9uZz4yMy4yLjEuNiBbYXJyYXkudHVwbGVdIFR1cGxlIGludGVyZmFjZSB0byBjbGFzcyB0ZW1wbGF0ZSBhcnJheTwvc3Ryb25nPgo8L3A+CjxwcmU+dHVwbGVfZWxlbWVudCZsdDs8aW5zPnNpemVfdCA8L2lucz5JLCBhcnJheSZsdDtULCBOJmd0OyAmZ3Q7Ojp0eXBlCjwvcHJlPgo8cD4KMyA8ZW0+UmVxdWlyZXM6PC9lbT4gPGNvZGU+PGRlbD4wICZsdDs9IDwvZGVsPkkgJmx0OyBOLjwvY29kZT4gVGhlIHByb2dyYW0gaXMgaWxsLWZvcm1lZCBpZiA8Y29kZT5JPC9jb2RlPiBpcyBvdXQgb2YgYm91bmRzLgo8L3A+CjxwPgo0IDxlbT5WYWx1ZTo8L2VtPiBUaGUgdHlwZSA8Y29kZT5UPC9jb2RlPi4KPC9wPgo8cHJlPnRlbXBsYXRlICZsdDs8ZGVsPmludDwvZGVsPjxpbnM+c2l6ZV90PC9pbnM+IEksIGNsYXNzIFQsIHNpemVfdCBOJmd0OyBUJmFtcDsgZ2V0KGFycmF5Jmx0O1QsIE4mZ3Q7JmFtcDsgYSk7CjwvcHJlPgo8cD4KNSA8ZW0+UmVxdWlyZXM6PC9lbT4gPGNvZGU+PGRlbD4wICZsdDs9IDwvZGVsPkkgJmx0OyBOPC9jb2RlPi4gVGhlIHByb2dyYW0gaXMgaWxsLWZvcm1lZCBpZiA8Y29kZT5JPC9jb2RlPiBpcyBvdXQgb2YgYm91bmRzLgo8L3A+CjxwPgo8ZW0+UmV0dXJuczo8L2VtPiBBIHJlZmVyZW5jZSB0byB0aGUgPGNvZGU+STwvY29kZT50aCBlbGVtZW50IG9mIDxjb2RlPmE8L2NvZGU+LCB3aGVyZSBpbmRleGluZyBpcyB6ZXJvLWJhc2VkLgo8L3A+CjxwPgo8aW5zPjxlbT5UaHJvd3M6PC9lbT4gTm90aGluZy48L2lucz4KPC9wPgo8cHJlPnRlbXBsYXRlICZsdDs8ZGVsPmludDwvZGVsPjxpbnM+c2l6ZV90PC9pbnM+IEksIGNsYXNzIFQsIHNpemVfdCBOJmd0OyBjb25zdCBUJmFtcDsgZ2V0KGNvbnN0IGFycmF5Jmx0O1QsIE4mZ3Q7JmFtcDsgYSk7CjwvcHJlPgo8cD4KNiA8ZW0+UmVxdWlyZXM6PC9lbT4gPGNvZGU+PGRlbD4wICZsdDs9IDwvZGVsPkkgJmx0OyBOPC9jb2RlPi4gVGhlIHByb2dyYW0gaXMgaWxsLWZvcm1lZCBpZiA8Y29kZT5JPC9jb2RlPiBpcyBvdXQgb2YgYm91bmRzLgo8L3A+CjxwPgo3IDxlbT5SZXR1cm5zOjwvZW0+IEEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSA8Y29kZT5JPC9jb2RlPnRoIGVsZW1lbnQgb2YgPGNvZGU+YTwvY29kZT4sIHdoZXJlIGluZGV4aW5nIGlzIHplcm8tYmFzZWQuCjwvcD4KPHA+CjxpbnM+PGVtPlRocm93czo8L2VtPiBOb3RoaW5nLjwvaW5zPgo8L3A+CgoKPHA+PGk+WwpCZWxsZXZ1ZTogTm90ZSBhbHNvIHRoYXQgdGhlIHBocmFzZSAiVGhlIHByb2dyYW0gaXMgaWxsLWZvcm1lZCBpZiBJIGlzCm91dCBvZiBib3VuZHMiIGluIHRoZSByZXF1aXJlcyBjbGF1c2VzIGFyZSBwcm9iYWJseSB1bm5lY2Vzc2FyeSwgYW5kCmNvdWxkIGJlIHJlbW92ZWQgYXQgdGhlIGVkaXRvcidzIGRpc2NyZXRpb24uIEFsc28gc3RkOjogcXVhbGlmaWNhdGlvbgpmb3IgcGFpciBpcyBhbHNvIHVubmVjZXNzYXJ5LgpdPC9pPjwvcD4KCgoKCjxocj4KPGgzPjxhIG5hbWU9Ijc3NyI+PC9hPjc3Ny4gQXRvbWljcyBMaWJyYXJ5IElzc3VlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI5LjQgW2F0b21pY3MudHlwZXMub3BlcmF0aW9uc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gTGF3cmVuY2UgQ3Jvd2wgPGI+RGF0ZTo8L2I+IDIwMDgtMDEtMjE8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2F0b21pY3MudHlwZXMub3BlcmF0aW9ucyI+aXNzdWVzPC9hPiBpbiBbYXRvbWljcy50eXBlcy5vcGVyYXRpb25zXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+ClRoZSBsb2FkIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBhcwo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPkMgYXRvbWljX2xvYWQodm9sYXRpbGUgQSogb2JqZWN0KTsKQyBhdG9taWNfbG9hZF9leHBsaWNpdCh2b2xhdGlsZSBBKiBvYmplY3QsIG1lbW9yeV9vcmRlcik7CkMgQTo6bG9hZChtZW1vcnlfb3JkZXIgb3JkZXIgPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgdm9sYXRpbGU7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgp3aGljaCBwcmV2ZW50cyB0aGVpciB1c2UgaW4gPHR0PmNvbnN0PC90dD4gY29udGV4dHMuCjwvcD4KCjxwPjxpPlsKcG9zdCBCZWxsZXZ1ZSBQZXRlciBhZGRzOgpdPC9pPjwvcD4KCgo8YmxvY2txdW90ZT4KPHA+Cklzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM3NzciPjc3NzwvYT4gc3VnZ2VzdHMgbWFraW5nIDx0dD5hdG9taWNfbG9hZDwvdHQ+IG9wZXJhdGUgb24gPHR0PmNvbnN0PC90dD4gb2JqZWN0cy4gVGhlcmUgaXMgYQpzdWJ0bGUgcG9pbnQgaGVyZS4gQXRvbWljIGxvYWRzIGRvIG5vdCBnZW5lcmFsbHkgd3JpdGUgdG8gdGhlIG9iamVjdCwgZXhjZXB0CnBvdGVudGlhbGx5IGZvciB0aGUgPHR0Pm1lbW9yeV9vcmRlcl9zZXFfY3N0PC90dD4gY29uc3RyYWludC4gRGVwZW5kaW5nIG9uIHRoZQphcmNoaXRlY3R1cmUsIGEgZHVtbXkgd3JpdGUgd2l0aCB0aGUgc2FtZSB2YWx1ZSBtYXkgYmUgcmVxdWlyZWQgdG8gYmUgaXNzdWVkCmJ5IHRoZSBhdG9taWMgbG9hZCB0byBtYWludGFpbiBzZXF1ZW50aWFsIGNvbnNpc3RlbmN5LiBUaGlzLCBpbiB0dXJuLCBtYXkKbWFrZSB0aGUgZm9sbG93aW5nIGNvZGU6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+Y29uc3QgYXRvbWljX2ludCB4e307CgppbnQgbWFpbigpCnsKICB4LmxvYWQoKTsKfQo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KZHVtcCBjb3JlIHVuZGVyIGEgc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uIHRoYXQgcHV0cyBjb25zdCBvYmplY3RzIGluCmEgcmVhZC1vbmx5IHNlY3Rpb24uCjwvcD4KPHA+ClRoZXJlIGFyZSB3YXlzIHRvIHNpZGVzdGVwIHRoZSBwcm9ibGVtLCBidXQgaXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4KPC9wPgo8cD4KVGhlIHRyYWRlb2ZmIGlzIGJldHdlZW4gbWFraW5nIHRoZSBkYXRhIG1lbWJlciBvZiB0aGUgYXRvbWljIHR5cGVzCm11dGFibGUgYW5kIHJlcXVpcmluZyB0aGUgdXNlciB0byBleHBsaWNpdGx5IG1hcmsgYXRvbWljIG1lbWJlcnMgYXMKbXV0YWJsZSwgYXMgaXMgYWxyZWFkeSB0aGUgY2FzZSB3aXRoIG11dGV4ZXMuCjwvcD4KPC9ibG9ja3F1b3RlPgoKCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpBZGQgdGhlIDx0dD5jb25zdDwvdHQ+IHF1YWxpZmllciB0byA8dHQ+Km9iamVjdDwvdHQ+IGFuZCA8dHQ+KnRoaXM8L3R0Pi4KPC9wPgoKPGJsb2NrcXVvdGU+PHByZT5DIGF0b21pY19sb2FkKDxpbnM+Y29uc3Q8L2lucz4gdm9sYXRpbGUgQSogb2JqZWN0KTsKQyBhdG9taWNfbG9hZF9leHBsaWNpdCg8aW5zPmNvbnN0PC9pbnM+IHZvbGF0aWxlIEEqIG9iamVjdCwgbWVtb3J5X29yZGVyKTsKQyBBOjpsb2FkKG1lbW9yeV9vcmRlciBvcmRlciA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSA8aW5zPmNvbnN0PC9pbnM+IHZvbGF0aWxlOwo8L3ByZT48L2Jsb2NrcXVvdGU+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9Ijc3OCI+PC9hPjc3OC4gc3RkOjpiaXRzZXQgZG9lcyBub3QgaGF2ZSBhbnkgY29uc3RydWN0b3IgdGFraW5nIGEgc3RyaW5nIGxpdGVyYWw8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjMuMy41LjEgW2JpdHNldC5jb25zXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBUaG9yc3RlbiBPdHRvc2VuIDxiPkRhdGU6PC9iPiAyMDA4LTAxLTI0PC9wPgo8cD48Yj5WaWV3IGFsbCBvdGhlcjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCNiaXRzZXQuY29ucyI+aXNzdWVzPC9hPiBpbiBbYml0c2V0LmNvbnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RHVwbGljYXRlIG9mOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTE2Ij4xMTY8L2E+PC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpBIHNtYWxsIGlzc3VlIHdpdGggPHR0PnN0ZDo6Yml0c2V0PC90dD46IGl0IGRvZXMgbm90IGhhdmUgYW55IGNvbnN0cnVjdG9yCnRha2luZyBhIHN0cmluZyBsaXRlcmFsLCB3aGljaCBpcyBjbHVtc3kgYW5kIGxvb2tzIGxpa2UgYW4gb3ZlcnNpZ3Qgd2hlbgp3ZSB0cmllZCB0byBlbmFibGUgdW5pZm9ybSB1c2Ugb2YgPHR0PnN0cmluZzwvdHQ+IGFuZCA8dHQ+Y29uc3QgY2hhcio8L3R0PiBpbiB0aGUgbGlicmFyeS4KPC9wPgoKPHA+ClN1Z2dlc3Rpb246IEFkZAo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPmV4cGxpY2l0IGJpdHNldCggY29uc3QgY2hhciogc3RyICk7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgp0byBzdGQ6OmJpdHNldC4KPC9wPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkZCB0byBzeW5vcHNpcyBpbiAyMy4zLjUgW3RlbXBsYXRlLmJpdHNldF0KPC9wPgoKPGJsb2NrcXVvdGU+PHByZT5leHBsaWNpdCBiaXRzZXQoIGNvbnN0IGNoYXIqIHN0ciApOwo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KQWRkIHRvIHN5bm9wc2lzIGluIDIzLjMuNS4xIFtiaXRzZXQuY29uc10KPC9wPgoKPGJsb2NrcXVvdGU+PHByZT5leHBsaWNpdCBiaXRzZXQoIGNvbnN0IGNoYXIqIHN0ciApOwo8L3ByZT4KPHA+CjxpPkVmZmVjdHM6PC9pPiBDb25zdHJ1Y3RzIGEgPHR0PmJpdHNldDwvdHQ+IGFzIGlmIDx0dD5iaXRzZXQoc3RyaW5nKHN0cikpPC90dD4uCjwvcD4KPC9ibG9ja3F1b3RlPgoKCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3ODEiPjwvYT43ODEuIDx0dD5zdGQ6OmNvbXBsZXg8L3R0PiBzaG91bGQgYWRkIG1pc3NpbmcgQzk5IGZ1bmN0aW9uczwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNi4zLjcgW2NvbXBsZXgudmFsdWUub3BzXSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBEYW5pZWwgS3L8Z2xlciA8Yj5EYXRlOjwvYj4gMjAwOC0wMS0yNjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjY29tcGxleC52YWx1ZS5vcHMiPmlzc3VlczwvYT4gaW4gW2NvbXBsZXgudmFsdWUub3BzXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+CkEgY29tcGFyaXNpb24gb2YgdGhlIE4yNDYxIGhlYWRlciA8dHQ+Jmx0O2NvbXBsZXgmZ3Q7PC90dD4gc3lub3BzaXMgKFtjb21wbGV4LnN5bm9wc2lzXSkKd2l0aCB0aGUgQzk5IHN0YW5kYXJkIChJU08gOTg5OSwgMm5kIGVkaXRpb24gYW5kIHRoZSB0d28gY29ycmlnZW5kYSkgc2hvdwpzb21lIGNvbXBsZXggZnVuY3Rpb25zIHRoYXQgYXJlIG1pc3NpbmcgaW4gQysrLiBUaGVzZSBhcmU6CjwvcD4KCjxvbD4KPGxpPgo3LjMuOS40OiAocmVxdWlyZWQgZWxlbWVudHMgb2YgdGhlIEM5OSBsaWJyYXJ5KTxicj4KVGhlIDx0dD5jcHJvajwvdHQ+IGZ1bmN0aW9ucwo8L2xpPgo8bGk+CjcuMjYuMTogKG9wdGlvbmFsIGVsZW1lbnRzIG9mIHRoZSBDOTkgbGlicmFyeSk8YnI+CjxwcmU+Y2VyZiAgICBjZXJmYyAgICBjZXhwMgpjZXhwbTEgIGNsb2cxMCAgIGNsb2cxcApjbG9nMiAgIGNsZ2FtbWEgIGN0Z2FtbWEKPC9wcmU+CjwvbGk+Cjwvb2w+Cgo8cD4KSSBwcm9wb3NlIHRoYXQgYXQgbGVhc3QgdGhlIHJlcXVpcmVkIDx0dD5jcHJvajwvdHQ+IG92ZXJsb2FkcyBhcmUgcHJvdmlkZWQgYXMgZXF1aXZhbGVudApDKysgZnVuY3Rpb25zLiBUaGlzIGFkZGl0aW9uIGlzIGVhc3kgdG8gZG8gaW4gb25lIHNlbnRlbmNlIChkZWxlZ2F0aW9uIHRvIEM5OQpmdW5jdGlvbikuCjwvcD4KCjxwPgpQbGVhc2Ugbm90ZSBhbHNvIHRoYXQgdGhlIGN1cnJlbnQgZW50cnkgPHR0PnBvbGFyPC90dD4KaW4gMjYuMy45IFtjbXBseC5vdmVyXS8xCnNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIG1lbnRpb25lZCBvdmVybG9hZCBsaXN0LiBJdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIHJlcXVpcmUgdGhhdCBhCmZ1bmN0aW9uIGFscmVhZHkgZXhwZWN0aW5nIDxlbT5zY2FsYXI8L2VtPiBhcmd1bWVudHMKc2hvdWxkIGNhc3QgdGhlc2UgYXJndW1lbnRzIGludG8gY29ycmVzcG9uZGluZwo8dHQ+Y29tcGxleCZsdDtUJmd0OzwvdHQ+IGFyZ3VtZW50cywgd2hpY2ggYXJlIG5vdCBhY2NlcHRlZCBieQp0aGlzIGZ1bmN0aW9uLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjYuMy4xIFtjb21wbGV4LnN5bm9wc2lzXSBhZGQganVzdCBiZXR3ZWVuIHRoZSBkZWNsYXJhdGlvbiBvZiA8dHQ+Y29uajwvdHQ+IGFuZCA8dHQ+ZmFiczwvdHQ+Ogo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IGNvbXBsZXgmbHQ7VCZndDsgY29uaihjb25zdCBjb21wbGV4Jmx0O1QmZ3Q7JmFtcDspOwo8aW5zPnRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IGNvbXBsZXgmbHQ7VCZndDsgcHJvaihjb25zdCBjb21wbGV4Jmx0O1QmZ3Q7JmFtcDspOzwvaW5zPgp0ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBjb21wbGV4Jmx0O1QmZ3Q7IGZhYnMoY29uc3QgY29tcGxleCZsdDtUJmd0OyZhbXA7KTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CkluIDI2LjMuNyBbY29tcGxleC52YWx1ZS5vcHNdIGp1c3QgYWZ0ZXIgcC42IChyZXR1cm4gY2xhdXNlIG9mIDx0dD5jb25qPC90dD4pIGFkZDoKPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+dGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgY29tcGxleCZsdDtUJmd0OyBwcm9qKGNvbnN0IGNvbXBsZXgmbHQ7VCZndDsmYW1wOyB4KTsKPC9wcmU+CjxibG9ja3F1b3RlPgoKPGk+RWZmZWN0czo8L2k+IEJlaGF2ZXMgdGhlIHNhbWUgYXMgQzk5IGZ1bmN0aW9uIDx0dD5jcHJvajwvdHQ+LCBkZWZpbmVkIGluCnN1YmNsYXVzZSA3LjMuOS40LiIKPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KSW4gMjYuMy45IFtjbXBseC5vdmVyXS8xLCBhZGQgb25lIGZ1cnRoZXIgZW50cnkgPHR0PnByb2o8L3R0PiB0bwp0aGUgb3ZlcmxvYWQgbGlzdC4KPC9wPgoKPGJsb2NrcXVvdGU+CjxwPgpUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIHRlbXBsYXRlcyBzaGFsbCBoYXZlIGFkZGl0aW9uYWwgb3ZlcmxvYWRzOgo8L3A+CjxibG9ja3F1b3RlPjxwcmU+YXJnICAgICAgICAgICBub3JtIApjb25qICAgICAgICAgIDxkZWw+cG9sYXI8L2RlbD4gPGlucz5wcm9qPC9pbnM+CmltYWcgICAgICAgICAgcmVhbAo8L3ByZT48L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNzgyIj48L2E+NzgyLiBFeHRlbmRlZCA8dHQ+c2VlZF9zZXE8L3R0PiBjb25zdHJ1Y3RvciBpcyB1c2VsZXNzPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IDI2LjQuNy4xIFtyYW5kLnV0aWwuc2VlZHNlcV0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGFuaWVsIEty/GdsZXIgPGI+RGF0ZTo8L2I+IDIwMDgtMDEtMjc8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNyYW5kLnV0aWwuc2VlZHNlcSI+YWN0aXZlIGlzc3VlczwvYT4gaW4gW3JhbmQudXRpbC5zZWVkc2VxXS48L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI3JhbmQudXRpbC5zZWVkc2VxIj5pc3N1ZXM8L2E+IGluIFtyYW5kLnV0aWwuc2VlZHNlcV0uPC9wPgo8cD48Yj5WaWV3IGFsbCBpc3N1ZXMgd2l0aDwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctc3RhdHVzLmh0bWwjV1AiPldQPC9hPiBzdGF0dXMuPC9wPgo8cD48Yj5EaXNjdXNzaW9uOjwvYj48L3A+CjxwPgpQYXJ0IG9mIHRoZSByZXNvbHV0aW9uIG9mIG4yNDIzLCBpc3N1ZSA4IHdhcyB0aGUgcHJvcG9zYWwgdG8KZXh0ZW5kIHRoZSA8dHQ+c2VlZF9zZXE8L3R0PiBjb25zdHJ1Y3RvciBhY2NlcHRpbmcgYW4gaW5wdXQgcmFuZ2UKYXMgZm9sbG93cyAod2hpY2ggaXMgbm93IHBhcnQgb2YgTjI0NjEpOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnRlbXBsYXRlJmx0O2NsYXNzIElucHV0SXRlcmF0b3IsCnNpemVfdCB1ID0gbnVtZXJpY19saW1pdHMmbHQ7aXRlcmF0b3JfdHJhaXRzJmx0O0lucHV0SXRlcmF0b3ImZ3Q7Ojp2YWx1ZV90eXBlJmd0Ozo6ZGlnaXRzJmd0OwpzZWVkX3NlcShJbnB1dEl0ZXJhdG9yIGJlZ2luLCBJbnB1dEl0ZXJhdG9yIGVuZCk7CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxwPgpGaXJzdCwgdGhlIGV4cHJlc3Npb24gPHR0Pml0ZXJhdG9yX3RyYWl0cyZsdDtJbnB1dEl0ZXJhdG9yJmd0Ozo6dmFsdWVfdHlwZTwvdHQ+CmlzIGludmFsaWQgZHVlIHRvIG1pc3NpbmcgPHR0PnR5cGVuYW1lPC90dD4ga2V5d29yZCwgd2hpY2ggaXMgZWFzeSB0bwpmaXguCjwvcD4KCjxwPgpTZWNvbmQgKGFuZCB3b3JzZSksIHdoaWxlIHRoZSBsYW5ndWFnZSBub3cgc3VwcG9ydHMgZGVmYXVsdAp0ZW1wbGF0ZSBhcmd1bWVudHMgb2YgZnVuY3Rpb24gdGVtcGxhdGVzLCB0aGlzIGN1c3RvbWl6YXRpb24KcG9pbnQgdmlhIHRoZSBzZWNvbmQgPHR0PnNpemVfdDwvdHQ+IHRlbXBsYXRlIHBhcmFtZXRlciBpcyBvZiBubyBhZHZhbnRhZ2UsCmJlY2F1c2UgPHR0PnU8L3R0PiBjYW4gbmV2ZXIgYmUgZGVkdWNlZCwgYW5kIHdvcnNlIC0gYmVjYXVzZSBpdCBpcyBhCmNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRlbXBsYXRlIC0gaXQgY2FuIGFsc28gbmV2ZXIgYmUgZXhwbGljaXRseQpwcm92aWRlZCAoMTQuOC4xIFt0ZW1wLmFyZy5leHBsaWNpdF0vNykuCjwvcD4KCjxwPgpUaGUgcXVlc3Rpb24gYXJpc2VzLCB3aGljaCBhZHZhbnRhZ2VzIHJlc3VsdCBmcm9tIGEgY29tcGlsZS10aW1lCmtub3dsZWRnZSBvZiA8dHQ+dTwvdHQ+IHZlcnN1cyBhIHJ1biB0aW1lIGtub3dsZWRnZT8gSWYgcnVuIHRpbWUga25vd2xlZGdlCnN1ZmZpY2VzLCB0aGlzIHBhcmFtZXRlciBzaG91bGQgYmUgcHJvdmlkZWQgYXMgbm9ybWFsIGZ1bmN0aW9uCmRlZmF1bHQgYXJndW1lbnQgW1Jlc29sdXRpb24gbWFya2VkIChBKV0sIGlmIGNvbXBpbGUtdGltZSBrbm93bGVkZ2UKaXMgaW1wb3J0YW50LCB0aGlzIGNvdWxkIGJlIGRvbmUgdmlhIGEgdGFnZ2luZyB0ZW1wbGF0ZSBvciBtb3JlCnVzZXItZnJpZW5kbHkgdmlhIGEgc3RhbmRhcmRpemVkIGhlbHBlciBnZW5lcmF0b3IgZnVuY3Rpb24KKDx0dD5tYWtlX3NlZWRfc2VxPC90dD4pLCB3aGljaCBhbGxvd3MgdGhpcyBbUmVzb2x1dGlvbiBtYXJrZWQgKEIpXS4KPC9wPgoKPHA+PGk+WwpCZWxsZXZ1ZToKXTwvaT48L3A+CgoKPGJsb2NrcXVvdGU+CjxwPgpGZXJtaWxhYiBkb2VzIG5vdCBoYXZlIGEgc3Ryb25nIG9waW5pb24uIFdvdWxkIHByZWZlciB0byBnbyB3aXRoCnNvbHV0aW9uIEEuIEJpbGwgYWdyZWVzIHRoYXQgc29sdXRpb24gQSBpcyBhIGxvdCBzaW1wbGVyIGFuZCBkb2VzIHRoZQpqb2IuCjwvcD4KPHA+ClByb3Bvc2VkIFJlc29sdXRpb246IEFjY2VwdCBTb2x1dGlvbiBBLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPgpJc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM4MDMiPjgwMzwvYT4gY2xhaW1zIHRvIG1ha2UgdGhpcyBpc3N1ZSBtb290Lgo8L3A+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPG9sIHR5cGU9IkEiPgo8bGk+CjxwPgpJbiAyNi40LjcuMSBbcmFuZC51dGlsLnNlZWRzZXFdLzIsIGNsYXNzIDx0dD5zZWVkX3NlcTwvdHQ+IHN5bm9wc2lzIHJlcGxhY2U6CjwvcD4KCjxibG9ja3F1b3RlPjxwcmU+Y2xhc3Mgc2VlZF9zZXEgCnsgCnB1YmxpYzoKICAgLi4uCiAgIHRlbXBsYXRlJmx0O2NsYXNzIElucHV0SXRlcmF0b3I8ZGVsPiwKICAgICAgc2l6ZV90IHUgPSBudW1lcmljX2xpbWl0cyZsdDtpdGVyYXRvcl90cmFpdHMmbHQ7SW5wdXRJdGVyYXRvciZndDs6OnZhbHVlX3R5cGUmZ3Q7OjpkaWdpdHM8L2RlbD4mZ3Q7CiAgICAgICAgICBzZWVkX3NlcShJbnB1dEl0ZXJhdG9yIGJlZ2luLCBJbnB1dEl0ZXJhdG9yIGVuZDxpbnM+LAogICAgICAgICAgc2l6ZV90IHUgPSBudW1lcmljX2xpbWl0cyZsdDt0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHMmbHQ7SW5wdXRJdGVyYXRvciZndDs6OnZhbHVlX3R5cGUmZ3Q7OjpkaWdpdHM8L2lucz4pOwogICAuLi4KfTsKPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CmFuZCBkbyBhIHNpbWlsYXIgcmVwbGFjZW1lbnQgaW4gdGhlIG1lbWJlciBkZXNjcmlwdGlvbiBiZXR3ZWVuCnAuMyBhbmQgcC40Lgo8L3A+CjwvbGk+Cgo8bGk+CjxwPgpJbiAyNi40LjcuMSBbcmFuZC51dGlsLnNlZWRzZXFdLzIsIGNsYXNzIDx0dD5zZWVkX3NlcTwvdHQ+IHN5bm9wc2lzIDxlbT5hbmQ8L2VtPiBpbiB0aGUKbWVtYmVyIGRlc2NyaXB0aW9uIGJldHdlZW4gcC4zIGFuZCBwLjQgcmVwbGFjZToKPC9wPgoKPGJsb2NrcXVvdGU+PHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yPGRlbD4sCiAgc2l6ZV90IHUgPSBudW1lcmljX2xpbWl0cyZsdDtpdGVyYXRvcl90cmFpdHMmbHQ7SW5wdXRJdGVyYXRvciZndDs6OnZhbHVlX3R5cGUmZ3Q7OjpkaWdpdHM8L2RlbD4mZ3Q7CgkgIHNlZWRfc2VxKElucHV0SXRlcmF0b3IgYmVnaW4sIElucHV0SXRlcmF0b3IgZW5kKTsKPGlucz50ZW1wbGF0ZSZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yLCBzaXplX3QgdSZndDsKc2VlZF9zZXEoSW5wdXRJdGVyYXRvciBiZWdpbiwgSW5wdXRJdGVyYXRvciBlbmQsIDxpPmltcGxlbWVudGF0aW9uLWRlZmluZWQ8L2k+IHMpOzwvaW5zPgo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KSW4gMjYuNC4yIFtyYW5kLnN5bm9wc2lzXSwgaGVhZGVyIDx0dD4mbHQ7cmFuZG9tJmd0OzwvdHQ+IHN5bm9wc2lzLCBpbW1lZGlhdGVseSBhZnRlciB0aGUKY2xhc3MgPHR0PnNlZWRfc2VxPC90dD4gZGVjbGFyYXRpb24gPGVtPmFuZDwvZW0+IGluIDI2LjQuNy4xIFtyYW5kLnV0aWwuc2VlZHNlcV0vMiwgaW1tZWRpYXRlbHkKYWZ0ZXIgdGhlIGNsYXNzIDx0dD5zZWVkX3NlcTwvdHQ+IGRlZmluaXRpb24gYWRkOgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPnRlbXBsYXRlJmx0O3NpemVfdCB1LCBjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogIHNlZWRfc2VxIG1ha2Vfc2VlZF9zZXEoSW5wdXRJdGVyYXRvciBiZWdpbiwgSW5wdXRJdGVyYXRvciBlbmQpOwo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KSW4gMjYuNC43LjEgW3JhbmQudXRpbC5zZWVkc2VxXSwganVzdCBiZWZvcmUgcC41IGluc2VydCB0d28gcGFyYWdyYXBoczoKPC9wPgoKPGJsb2NrcXVvdGU+CjxwPgpUaGUgZmlyc3QgY29uc3RydWN0b3IgYmVoYXZlcyBhcyBpZiBpdCB3b3VsZCBwcm92aWRlIGFuCmludGVncmFsIGNvbnN0YW50IGV4cHJlc3Npb24gPHR0PnU8L3R0PiBvZiB0eXBlIDx0dD5zaXplX3Q8L3R0PiBvZiB2YWx1ZQo8dHQ+bnVtZXJpY19saW1pdHMmbHQ7dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzJmx0O0lucHV0SXRlcmF0b3ImZ3Q7Ojp2YWx1ZV90eXBlJmd0Ozo6ZGlnaXRzPC90dD4uCjwvcD4KPHA+ClRoZSBzZWNvbmQgY29uc3RydWN0b3IgdXNlcyBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIG1lY2hhbmlzbQp0byBwcm92aWRlIGFuIGludGVncmFsIGNvbnN0YW50IGV4cHJlc3Npb24gPHR0PnU8L3R0PiBvZiB0eXBlIDx0dD5zaXplX3Q8L3R0PiBhbmQKaXMgY2FsbGVkIGJ5IHRoZSBmdW5jdGlvbiA8dHQ+bWFrZV9zZWVkX3NlcTwvdHQ+Lgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPgpJbiAyNi40LjcuMSBbcmFuZC51dGlsLnNlZWRzZXFdLCBqdXN0IGFmdGVyIHRoZSBsYXN0IHBhcmFncmFwaCBhZGQ6CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlJmx0O3NpemVfdCB1LCBjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogICBzZWVkX3NlcSBtYWtlX3NlZWRfc2VxKElucHV0SXRlcmF0b3IgYmVnaW4sIElucHV0SXRlcmF0b3IgZW5kKTsKPC9wcmU+CjxibG9ja3F1b3RlPgo8cD4Kd2hlcmUgPHR0PnU8L3R0PiBpcyB1c2VkIHRvIGNvbnN0cnVjdCBhbiBvYmplY3QgPHR0PnM8L3R0PiBvZiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHR5cGUuCjwvcD4KPHA+CjxpPlJldHVybnM6PC9pPiA8dHQ+c2VlZF9zZXEoYmVnaW4sIGVuZCwgcyk8L3R0PjsKPC9wPgo8L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCjwvbGk+Cjwvb2w+CgoKCgoKCjxocj4KPGgzPjxhIG5hbWU9Ijc4MyI+PC9hPjc4My4gPHR0PnRocmVhZDo6aWQ8L3R0PiByZXVzZTwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAzMC4yLjEuMSBbdGhyZWFkLnRocmVhZC5pZF0gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gSGFucyBCb2VobSA8Yj5EYXRlOjwvYj4gMjAwOC0wMi0wMTwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KVGhlIGN1cnJlbnQgd29ya2luZyBwYXBlciAKKDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDgvbjI0OTcuaHRtbCI+TjI0OTc8L2E+LAppbnRlZ3JhdGVkIGp1c3QgYmVmb3JlIEJlbGxldnVlKSBpcwpub3QgY29tcGxldGVseSBjbGVhciB3aGV0aGVyIGEgZ2l2ZW4gPHR0PnRocmVhZDo6aWQ8L3R0PiB2YWx1ZSBtYXkgYmUgcmV1c2VkIG9uY2UKYSB0aHJlYWQgaGFzIGV4aXRlZCBhbmQgaGFzIGJlZW4gam9pbmVkIG9yIGRldGFjaGVkLiAgUG9zaXggYWxsb3dzCnRocmVhZCBpZHMgKDx0dD5wdGhyZWFkX3Q8L3R0PiB2YWx1ZXMpIHRvIGJlIHJldXNlZCBpbiB0aGlzIGNhc2UuICBBbHRob3VnaCBpdCBpcwpub3QgY29tcGxldGVseSBjbGVhciB3aGV0aGVyIHRoaXMgb3JpZ2luYWxseSB3YXMgdGhlIHJpZ2h0IGRlY2lzaW9uLCBpdAppcyBjbGVhcmx5IHRoZSBlc3RhYmxpc2hlZCBwcmFjdGljZSwgYW5kIHdlIGJlbGlldmUgaXQgd2FzIGFsd2F5cyB0aGUKaW50ZW50IG9mIHRoZSBDKysgdGhyZWFkcyBBUEkgdG8gZm9sbG93IFBvc2l4IGFuZCBhbGxvdyB0aGlzLiAgSG93YXJkCkhpbm5hbnQncyBleGFtcGxlIGltcGxlbWVudGF0aW9uIGltcGxpY2l0bHkgcmVsaWVzIG9uIGFsbG93aW5nIHJldXNlCm9mIGlkcywgc2luY2UgaXQgdXNlcyBQb3NpeCB0aHJlYWQgaWRzIGRpcmVjdGx5Lgo8L3A+Cgo8cD4KSXQgaXMgaW1wb3J0YW50IHRvIGJlIGNsZWFyIG9uIHRoaXMgcG9pbnQsIHNpbmNlIGl0IHRoZSByZXVzZSBvZiB0aHJlYWQKaWRzIG9mdGVuIHJlcXVpcmVzIGV4dHJhIGNhcmUgaW4gY2xpZW50IGNvZGUsIHdoaWNoIHdvdWxkIG5vdCBiZQpuZWNlc3NhcnkgaWYgdGhyZWFkIGlkcyB3ZXJlIHVuaXF1ZSBhY3Jvc3MgYWxsIHRpbWUuICBGb3IgZXhhbXBsZSwgYQpoYXNoIHRhYmxlIGluZGV4ZWQgYnkgdGhyZWFkIGlkIG1heSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGFzc29jaWF0ZQpkYXRhIHZhbHVlcyBmcm9tIGFuIG9sZCB0aHJlYWQgd2l0aCBhIG5ldyBvbmUgdGhhdCBoYXBwZW5zIHRvIHJldXNlIHRoZQppZC4gIFNpbXBseSByZW1vdmluZyB0aGUgb2xkIGVudHJ5IGFmdGVyIGpvaW5pbmcgYSB0aHJlYWQgbWF5IG5vdCBiZQpzdWZmaWNpZW50LCBpZiBpdCBjcmVhdGVzIGEgdmlzaWJsZSB3aW5kb3cgYmV0d2VlbiB0aGUgam9pbiBhbmQgcmVtb3ZhbApkdXJpbmcgd2hpY2ggYSBuZXcgdGhyZWFkIHdpdGggdGhlIHNhbWUgaWQgY291bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kCmFkZGVkIHRvIHRoZSB0YWJsZS4KPC9wPgoKPHA+PGk+Wwpwb3N0IEJlbGxldnVlIFBldGVyIGFkZHM6Cl08L2k+PC9wPgoKCjxibG9ja3F1b3RlPgo8cD4KVGhlcmUgaXMgYSByZWFsIGlzc3VlIHdpdGggPHR0PnRocmVhZDo6aWQ8L3R0PiByZXVzZSwgYnV0IEkgdXJnZSB0aGUgTFdHIHRvCnJlY29uc2lkZXIgZml4aW5nIHRoaXMgYnkgZGlzYWxsb3dpbmcgcmV1c2UsIHJhdGhlciB0aGFuIGV4cGxpY2l0bHkgYWxsb3dpbmcKaXQuIERlYWxpbmcgd2l0aCB0aHJlYWQgaWQgcmV1c2UgaXMgYW4gaW5jcmVkaWJseSBwYWluZnVsIGV4ZXJjaXNlIHRoYXQKd291bGQganVzdCBmb3JjZSB0aGUgd29ybGQgdG8gcmVpbXBsZW1lbnQgYSBub24tY29uZmxpY3RpbmcgPHR0PnRocmVhZDo6aWQ8L3R0PiBvdmVyCmFuZCBvdmVyLgo8L3A+CjxwPgpJbiBhZGRpdGlvbiwgaXQgd291bGQgYmUgbmljZSBpZiBhIDx0dD50aHJlYWQ6OmlkPC90dD4gY291bGQgYmUgbWFuaXB1bGF0ZWQKYXRvbWljYWxseSBpbiBhIGxvY2stZnJlZSBtYW5uZXIsIGFzIG1vdGl2YXRlZCBieSB0aGUgcmVjdXJzaXZlIGxvY2sKZXhhbXBsZToKPC9wPgoKPHA+CjxhIGhyZWY9Imh0dHA6Ly93d3cuZGVjYWRlbnRwbGFjZS5vcmcudWsvcGlwZXJtYWlsL2NwcC10aHJlYWRzLzIwMDYtQXVndXN0LzAwMTA5MS5odG1sIj5odHRwOi8vd3d3LmRlY2FkZW50cGxhY2Uub3JnLnVrL3BpcGVybWFpbC9jcHAtdGhyZWFkcy8yMDA2LUF1Z3VzdC8wMDEwOTEuaHRtbDwvYT4KPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkZCBhIHNlbnRlbmNlIHRvIDMwLjIuMS4xIFt0aHJlYWQudGhyZWFkLmlkXS9wMToKPC9wPgoKPGJsb2NrcXVvdGU+CjxwPgpBbiBvYmplY3Qgb2YgdHlwZSA8Y29kZT50aHJlYWQ6OmlkPC9jb2RlPiBwcm92aWRlcwphIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBlYWNoIHRocmVhZCBvZiBleGVjdXRpb24KYW5kIGEgc2luZ2xlIGRpc3RpbmN0IHZhbHVlIGZvciBhbGwgdGhyZWFkIG9iamVjdHMKdGhhdCBkbyBub3QgcmVwcmVzZW50IGEgdGhyZWFkIG9mIGV4ZWN1dGlvbiAoW3RocmVhZC50aHJlYWRzLmNsYXNzXSkuCkVhY2ggdGhyZWFkIG9mIGV4ZWN1dGlvbiBoYXMgYSA8Y29kZT50aHJlYWQ6OmlkPC9jb2RlPgp0aGF0IGlzIG5vdCBlcXVhbCB0byB0aGUgPGNvZGU+dGhyZWFkOjppZDwvY29kZT4Kb2Ygb3RoZXIgdGhyZWFkcyBvZiBleGVjdXRpb24KYW5kIHRoYXQgaXMgbm90IGVxdWFsIHRvCnRoZSA8Y29kZT50aHJlYWQ6OmlkPC9jb2RlPiBvZiA8Y29kZT5zdGQ6OnRocmVhZDwvY29kZT4gb2JqZWN0cwp0aGF0IGRvIG5vdCByZXByZXNlbnQgdGhyZWFkcyBvZiBleGVjdXRpb24uCjxpbnM+VGhlIGxpYnJhcnkgbWF5IHJldXNlIHRoZSB2YWx1ZSBvZiBhIDxjb2RlPnRocmVhZDo6aWQ8L2NvZGU+IG9mIGEKdGVybWluYXRlZCB0aHJlYWQgdGhhdCBjYW4gbm8gbG9uZ2VyIGJlIGpvaW5lZC48L2lucz4KPC9wPgo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNzg5Ij48L2E+Nzg5LiA8dHQ+eG9yX2NvbWJpbmVfZW5naW5lKHJlc3VsdF90eXBlKTwvdHQ+IHNob3VsZCBiZSBleHBsaWNpdDwvaDM+CjxwPjxiPlNlY3Rpb246PC9iPiAyNi40LjQuNCBbcmFuZC5hZGFwdC54b3JdIDxiPlN0YXR1czo8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4KIDxiPlN1Ym1pdHRlcjo8L2I+IFAuSi4gUGxhdWdlciA8Yj5EYXRlOjwvYj4gMjAwOC0wMi0wOTwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjcmFuZC5hZGFwdC54b3IiPmlzc3VlczwvYT4gaW4gW3JhbmQuYWRhcHQueG9yXS48L3A+CjxwPjxiPlZpZXcgYWxsIGlzc3VlcyB3aXRoPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1zdGF0dXMuaHRtbCNXUCI+V1A8L2E+IHN0YXR1cy48L3A+CjxwPjxiPkRpc2N1c3Npb246PC9iPjwvcD4KPHA+Cjx0dD54b3JfY29tYmluZV9lbmdpbmUocmVzdWx0X3R5cGUpPC90dD4gc2hvdWxkIGJlIDx0dD5leHBsaWNpdDwvdHQ+LiAoT2J2aW91cyBvdmVyc2lnaHQuKQo8L3A+Cgo8cD48aT5bCkJlbGxldnVlOgpdPC9pPjwvcD4KCgo8YmxvY2txdW90ZT4KTm9uLWNvbnRyb3ZlcnNpYWwuIEJpbGwgaXMgcmlnaHQsIGJ1dCBGZXJtaWxhYiBiZWxpZXZlcyB0aGF0IHRoaXMgaXMKZWFzeSB0byB1c2UgYmFkbHkgYW5kIGhhcmQgdG8gdXNlIHJpZ2h0LCBhbmQgc28gaXQgc2hvdWxkIGJlIHJlbW92ZWQKZW50aXJlbHkuIEdvdCBpbnRvIFRSMSBieSB3ZWxsIGRlZmluZWQgcm91dGUsIGRvIHdlIGhhdmUgcGVybWlzc2lvbiB0bwpyZW1vdmUgc3R1ZmY/IFNob3VsZCBwcm9iYWJseSBjaGVjayB3aXRoIEplbnMsIGFzIGl0IGlzIGJlbGlldmVkIGhlIGlzCnRoZSBvcmlnaW5hdG9yLiBCcm9hZCBjb25zZW5zdXMgdGhhdCB0aGlzIGlzIG5vdCBhIHJvYnVzdCBlbmdpbmUKYWRhcHRlci4KPC9ibG9ja3F1b3RlPgoKCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlbW92ZSB4b3JfY29tYmluZV9lbmdpbmUgZnJvbSBzeW5vcHNpcyBvZiAyNi40LjIgW3JhbmQuc3lub3BzaXNdLgo8L3A+CjxwPgpSZW1vdmUgMjYuNC40LjQgW3JhbmQuYWRhcHQueG9yXSA8dHQ+eG9yX2NvbWJpbmVfZW5naW5lPC90dD4uCjwvcD4KCgoKCgo8aHI+CjxoMz48YSBuYW1lPSI3OTIiPjwvYT43OTIuIDx0dD5waWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPC90dD4gaXMgdW5kZWZpbmVkIGZvciBhIHJhbmdlIHdpdGgganVzdCBvbmUgZW5kcG9pbnQ8L2gzPgo8cD48Yj5TZWN0aW9uOjwvYj4gMjYuNC44LjUuMiBbcmFuZC5kaXN0LnNhbXAucGNvbnN0XSA8Yj5TdGF0dXM6PC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+CiA8Yj5TdWJtaXR0ZXI6PC9iPiBQLkouIFBsYXVnZXIgPGI+RGF0ZTo8L2I+IDIwMDgtMDItMDk8L3A+CjxwPjxiPlZpZXcgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4LW9wZW4uaHRtbCNyYW5kLmRpc3Quc2FtcC5wY29uc3QiPmFjdGl2ZSBpc3N1ZXM8L2E+IGluIFtyYW5kLmRpc3Quc2FtcC5wY29uc3RdLjwvcD4KPHA+PGI+VmlldyBhbGwgb3RoZXI8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWluZGV4Lmh0bWwjcmFuZC5kaXN0LnNhbXAucGNvbnN0Ij5pc3N1ZXM8L2E+IGluIFtyYW5kLmRpc3Quc2FtcC5wY29uc3RdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KPHR0PnBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb248L3R0PiBpcyB1bmRlZmluZWQgZm9yIGEgcmFuZ2Ugd2l0aCBqdXN0IG9uZQplbmRwb2ludC4gKFByb2JhYmx5IHNob3VsZCBiZSB0aGUgc2FtZSBhcyBhbiBlbXB0eSByYW5nZS4pCjwvcD4KCgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgMjYuNC44LjUuMiBbcmFuZC5kaXN0LnNhbXAucGNvbnN0XSBwYXJhZ3JhcGggM2I6CjwvcD4KCjxibG9ja3F1b3RlPgpiKSBJZiA8dHQ+Zmlyc3RCID09IGxhc3RCPC90dD4gPGlucz5vciB0aGUgc2VxdWVuY2UgPHR0Pnc8L3R0PiBoYXMgdGhlIGxlbmd0aCB6ZXJvPC9pbnM+LAo8L2Jsb2NrcXVvdGU+CgoKCgoKPGhyPgo8aDM+PGEgbmFtZT0iNzk4Ij48L2E+Nzk4LiBSZWZhY3RvcmluZyBvZiBiaW5kZXJzIGxlYWQgdG8gaW50ZXJmYWNlIGJyZWFrYWdlPC9oMz4KPHA+PGI+U2VjdGlvbjo8L2I+IEQuOCBbZGVwci5saWIuYmluZGVyc10gPGI+U3RhdHVzOjwvYj4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPgogPGI+U3VibWl0dGVyOjwvYj4gRGFuaWVsIEty/GdsZXIgPGI+RGF0ZTo8L2I+IDIwMDgtMDItMTQ8L3A+CjxwPjxiPlZpZXcgYWxsIG90aGVyPC9iPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1pbmRleC5odG1sI2RlcHIubGliLmJpbmRlcnMiPmlzc3VlczwvYT4gaW4gW2RlcHIubGliLmJpbmRlcnNdLjwvcD4KPHA+PGI+VmlldyBhbGwgaXNzdWVzIHdpdGg8L2I+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sI1dQIj5XUDwvYT4gc3RhdHVzLjwvcD4KPHA+PGI+RGlzY3Vzc2lvbjo8L2I+PC9wPgo8cD4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwOC9uMjUyMS5wZGYiPk4yNTIxPC9hPgphbmQgaXRzIGVhcmxpZXIgcHJlZGVjZXNzb3JzIGhhdmUgbW92ZWQgdGhlIG9sZCBiaW5kZXJzIGZyb20KW2xpYi5iaW5kZXJzXSB0byBELjggW2RlcHIubGliLmJpbmRlcnNdIHRoZXJlYnkgaW50cm9kdWNpbmcgc29tZSByZW5hbWluZwpvZiB0aGUgdGVtcGxhdGUgcGFyYW1ldGVyIG5hbWVzICg8dHQ+T3BlcmF0aW9uIC0mZ3Q7IEZuPC90dD4pLiBEdXJpbmcgdGhpcwpyZW5hbWluZyBwcm9jZXNzIHRoZSA8ZW0+cHJvdGVjdGVkPC9lbT4gZGF0YSBtZW1iZXIgPHR0Pm9wPC90dD4gd2FzIGFsc28gcmVuYW1lZCB0bwo8dHQ+Zm48L3R0Piwgd2hpY2ggc2VlbXMgYXMgYW4gdW5uZWNlc3NhcnkgaW50ZXJmYWNlIGJyZWFrYWdlIHRvIG1lIC0gZXZlbiBpZgp0aGlzIHVzZXIgYWNjZXNzIHBvaW50IGlzIHByb2JhYmx5IHJhcmVseSB1c2VkLgo8L3A+CgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIEQuOC4xIFtkZXByLmxpYi5iaW5kZXIuMXN0XToKPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+dGVtcGxhdGUgJmx0O2NsYXNzIEZuJmd0OyAKY2xhc3MgYmluZGVyMXN0IAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uJmx0O3R5cGVuYW1lIEZuOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgRm46OnJlc3VsdF90eXBlJmd0OyB7IApwcm90ZWN0ZWQ6IAogIEZuIDxkZWw+Zm48L2RlbD4gPGlucz5vcDwvaW5zPjsgCiAgdHlwZW5hbWUgRm46OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7IApwdWJsaWM6IAogIGJpbmRlcjFzdChjb25zdCBGbiZhbXA7IHgsIAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBGbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSZhbXA7IHkpOyAKICB0eXBlbmFtZSBGbjo6cmVzdWx0X3R5cGUgCiAgICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIEZuOjpzZWNvbmRfYXJndW1lbnRfdHlwZSZhbXA7IHgpIGNvbnN0OyAKICB0eXBlbmFtZSBGbjo6cmVzdWx0X3R5cGUgCiAgICBvcGVyYXRvcigpKHR5cGVuYW1lIEZuOjpzZWNvbmRfYXJndW1lbnRfdHlwZSZhbXA7IHgpIGNvbnN0OyAKfTsKPC9wcmU+Cgo8YmxvY2txdW90ZT4KPHA+Ci0xLSBUaGUgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgPGRlbD48dHQ+Zm48L3R0PjwvZGVsPiA8aW5zPjx0dD5vcDwvdHQ+PC9pbnM+IHdpdGggPHR0Png8L3R0PiBhbmQgPHR0PnZhbHVlPC90dD4gd2l0aCA8dHQ+eTwvdHQ+Lgo8L3A+CjxwPgotMi0gPHR0Pm9wZXJhdG9yKCk8L3R0PiByZXR1cm5zIDx0dD48ZGVsPmZuPC9kZWw+PGlucz5vcDwvaW5zPih2YWx1ZSx4KTwvdHQ+Lgo8L3A+CjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgoKPHA+CkNoYW5nZSBELjguMyBbZGVwci5saWIuYmluZGVyLjJuZF06CjwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBGbiZndDsgCmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uJmx0O3R5cGVuYW1lIEZuOjpmaXJzdF9hcmd1bWVudF90eXBlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBGbjo6cmVzdWx0X3R5cGUmZ3Q7IHsgCnByb3RlY3RlZDogCiAgRm4gPGRlbD5mbjwvZGVsPiA8aW5zPm9wPC9pbnM+OyAKICB0eXBlbmFtZSBGbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7IApwdWJsaWM6IAogIGJpbmRlcjJuZChjb25zdCBGbiZhbXA7IHgsIAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBGbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmYW1wOyB5KTsgCiAgdHlwZW5hbWUgRm46OnJlc3VsdF90eXBlIAogICAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBGbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSZhbXA7IHgpIGNvbnN0OyAKICB0eXBlbmFtZSBGbjo6cmVzdWx0X3R5cGUgCiAgICBvcGVyYXRvcigpKHR5cGVuYW1lIEZuOjpmaXJzdF9hcmd1bWVudF90eXBlJmFtcDsgeCkgY29uc3Q7IAp9Owo8L3ByZT4KCjxibG9ja3F1b3RlPgo8cD4KLTEtIFRoZSBjb25zdHJ1Y3RvciBpbml0aWFsaXplcyA8ZGVsPjx0dD5mbjwvdHQ+PC9kZWw+IDxpbnM+PHR0Pm9wPC90dD48L2lucz4gd2l0aCA8dHQ+eDwvdHQ+IGFuZCA8dHQ+dmFsdWU8L3R0PiB3aXRoIDx0dD55PC90dD4uCjwvcD4KPHA+Ci0yLSA8dHQ+b3BlcmF0b3IoKTwvdHQ+IHJldHVybnMgPHR0PjxkZWw+Zm48L2RlbD48aW5zPm9wPC9pbnM+KHZhbHVlLHgpPC90dD4uCjwvcD4KPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+CgoKCgoKCjwvYm9keT48L2h0bWw+