PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPHRpdGxlPlVuYXJ5IGZ1bmN0aW9uIGJhc2VkIHRlc3QgY2FzZTwvdGl0bGU+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vc3R5bGUvc3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CjxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCI+CjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgdGl0bGU9IkJvb3N0IFRlc3QgTGlicmFyeSI+CjxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL3Rlc3Qtb3JnYW5pemF0aW9uLmh0bWwiIHRpdGxlPSJUZXN0IG9yZ2FuaXphdGlvbiBvciB0aGUgaG91c2UgdGhhdCBKYWNrIGJ1aWx0Ij4KPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJhdXRvLW51bGxhcnktdGVzdC1jYXNlLmh0bWwiIHRpdGxlPSJOdWxsYXJ5IGZ1bmN0aW9uIGJhc2VkIHRlc3QgY2FzZSB3aXRoIGF1dG9tYXRlZCByZWdpc3RyYXRpb24iPgo8bGluayByZWw9Im5leHQiIGhyZWY9InRlc3QtY2FzZS10ZW1wbGF0ZS5odG1sIiB0aXRsZT0iVGVzdCBjYXNlIHRlbXBsYXRlIj4KPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdDEuMiIgc3JjPSIuLi8uLi8uLi8uLi9qcy9ib29zdC10ZXN0LmpzIj48L3NjcmlwdD4KPC9oZWFkPgo8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgo8dGQgd2lkdGg9IjEwJSI+PGEgaHJlZj0iLi4vLi4vLi4vaW5kZXguaHRtbCI+PGltZyBhbHQ9IkhvbWUiIHdpZHRoPSIyMjkiIGhlaWdodD0iNjEiIGJvcmRlcj0iMCIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Rlc3QvZG9jYm9vay9pbWcvYm9vc3QudGVzdC5sb2dvLnBuZyI+PC9hPjwvdGQ+Cjx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiPiAmZ3Q7IDxhIGhyZWY9Ii4uLy4uLy4uL3V0Zi5odG1sIj5UaGUgVW5pdCBUZXN0IEZyYW1ld29yazwvYT4gJmd0OyA8YSBocmVmPSIuLi8uLi91c2VyLWd1aWRlLmh0bWwiPlVzZXIncyBndWlkZTwvYT48YSBocmVmPSIuLi8uLi90ZXN0aW5nLXRvb2xzLmh0bWwiPgogICAgICAmZ3Q7CiAgICAgIDwvYT48YSBocmVmPSIuLi90ZXN0LW9yZ2FuaXphdGlvbi5odG1sIj5UZXN0IG9yZ2FuaXphdGlvbjwvYT48YSBocmVmPSIuLi9maXh0dXJlLmh0bWwiPgogICAgICAmZ3Q7CiAgICAgIDwvYT48Yj5VbmFyeSBmdW5jdGlvbiBiYXNlZCB0ZXN0IGNhc2U8L2I+CjwvdGQ+Cjx0ZD48ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KPGEgaHJlZj0iYXV0by1udWxsYXJ5LXRlc3QtY2FzZS5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBocmVmPSJ0ZXN0LWNhc2UtdGVtcGxhdGUuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2RvYy9odG1sL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+CjwvZGl2PjwvdGQ+CjwvdHI+PC90YWJsZT4KPGhyPgo8ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNSBjbGFzcz0idGl0bGUiPgo8YSBuYW1lPSJ1dGYudXNlci1ndWlkZS50ZXN0LW9yZ2FuaXphdGlvbi51bmFyeS10ZXN0LWNhc2UiPjwvYT5VbmFyeSBmdW5jdGlvbiBiYXNlZCB0ZXN0IGNhc2U8L2g1PjwvZGl2PjwvZGl2PjwvZGl2Pgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgIFNvbWUgdGVzdHMgYXJlIHJlcXVpcmVkIHRvIGJlIHJlcGVhdGVkIGZvciBhIHNlcmllcyBvZiBkaWZmZXJlbnQgaW5wdXQgcGFyYW1ldGVycy4gT25lIHdheSB0byBhY2hpZXZlIHRoaXMgaXMKICAgbWFudWFsbHkgcmVnaXN0ZXIgYSB0ZXN0IGNhc2UgZm9yIGVhY2ggcGFyYW1ldGVyIGFzIGluIGV4YW1wbGUgYWJvdmUuIFlvdSBjYW4gYWxzbyBpbnZva2UgYSB0ZXN0IGZ1bmN0aW9uIHdpdGgKICAgYWxsIHBhcmFtZXRlcnMgbWFudWFsbHkgZnJvbSB3aXRoaW4geW91ciB0ZXN0IGNhc2UsIGxpa2UgdGhpczoKICA8L3A+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj52b2lkIHNpbmdsZV90ZXN0KCBpbnQgaSApCnsKICAgIEJPT1NUX0NIRUNLKCAvKiB0ZXN0IGFzc2VydGlvbiAqLyApOwp9Cgp2b2lkIGNvbWJpbmVkX3Rlc3QoKQp7CiAgICBpbnQgcGFyYW1zW10gPSB7IDEsIDIsIDMsIDQsIDUgfTsKCiAgICBzdGQ6OmZvcl9lYWNoKCBwYXJhbXMsIHBhcmFtcys1LCAmYW1wO3NpbmdsZV90ZXN0ICk7Cn0KPC9wcmU+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgVGhlIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5VVEY8L2Fjcm9ueW0+IHByZXNlbnRzIGEgYmV0dGVyIHNvbHV0aW9uIGZvciB0aGlzIHByb2JsZW06IHRoZSB1bmFyeSBmdW5jdGlvbiBiYXNlZCB0ZXN0IGNhc2UsIGFsc28gcmVmZXJyZWQgYXMKICAgcGFyYW1ldGVyaXplZCB0ZXN0IGNhc2UuIFRoZSB1bmFyeSB0ZXN0IGZ1bmN0aW9uIGNhbiBiZSBhIGZyZWUgZnVuY3Rpb24sIHVuYXJ5IGZ1bmN0b3IgKGZvciBleGFtcGxlIGNyZWF0ZWQKICAgd2l0aCBib29zdDo6YmluZCkgb3IgdW5hcnkgbWV0aG9kIG9mIGEgY2xhc3Mgd2l0aCBib3VuZCB0ZXN0IGNsYXNzIGluc3RhbmNlKS4gVGhlIHRlc3QgZnVuY3Rpb24gaXMgY29udmVydGVkCiAgIGludG8gdGVzdCBjYXNlIHVzaW5nIHRoZSBtYWNybyBCT09TVF9QQVJBTV9URVNUX0NBU0UuIFRoZSBtYWNybyBleHBlY3RzIGEgY29sbGVjdGlvbiBvZiBwYXJhbWV0ZXJzIChwYXNzZWQgYXMKICAgdHdvIGlucHV0IGl0ZXJhdG9ycykgYW5kIGFuIHVuYXJ5IHRlc3QgZnVuY3Rpb246CiAgPC9wPgo8cHJlIGNsYXNzPSJpbmxpbmUtc3lub3BzaXMiPgo8YSBuYW1lPSJCT09TVF9QQVJBTV9URVNUX0NBU0UiPjwvYT5CT09TVF9QQVJBTV9URVNUX0NBU0UoPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dGVzdF9mdW5jdGlvbjwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cGFyYW1zX2JlZ2luPC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5wYXJhbXNfZW5kPC9lbT48L3NwYW4+KTwvcHJlPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgIEJPT1NUX1BBUkFNX1RFU1RfQ0FTRSBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSB0ZXN0IGNhc2UgZ2VuZXJhdG9yLiBXaGVuIHBhc3NlZCB0byB0aGUgbWV0aG9kIHRlc3Rfc3VpdGU6OmFkZCwKICAgdGhlIGdlbmVyYXRvciBwcm9kdWNlcyBhIHNlcGFyYXRlIHN1YiB0ZXN0IGNhc2UgZm9yIGVhY2ggcGFyYW1ldGVyIGluIHRoZSBwYXJhbWV0ZXJzIGNvbGxlY3Rpb24gYW5kIHJlZ2lzdGVycwogICBpdCBpbW1lZGlhdGVseSBpbiBhIHRlc3Qgc3VpdGUuIEVhY2ggdGVzdCBjYXNlIGlzIGJhc2VkIG9uIGEgdGVzdCBmdW5jdGlvbiB3aXRoIHRoZSBwYXJhbWV0ZXIgYm91bmQgYnkgdmFsdWUsCiAgIGV2ZW4gaWYgdGhlIHRlc3QgZnVuY3Rpb24gZXhwZWN0cyBhIHBhcmFtZXRlciBieSByZWZlcmVuY2UuIFRoZSBmYWN0IHRoYXQgcGFyYW1ldGVyIHZhbHVlIGlzIHN0b3JlZCBhbG9uZyB3aXRoCiAgIGJvdW5kIHRlc3QgZnVuY3Rpb24gcmVsZWFzZXMgeW91IGZyb20gbmVjZXNzaXR5IHRvIG1hbmFnZSBwYXJhbWV0ZXJzIGxpZmV0aW1lLiBGb3IgZXhhbXBsZSwgdGhleSBjYW4gYmUgZGVmaW5lZAogICBpbiB0aGUgdGVzdCBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gc2NvcGUuCiAgPC9wPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgIEFsbCBzdWIgdGVzdCBjYXNlIG5hbWVzIGFyZSBkZWR1Y2VkIGZyb20gdGhlIG1hY3JvIGFyZ3VtZW50IHRlc3RfZnVuY3Rpb24uIElmIHlvdSBwcmVmZXIgdG8gYXNzaWduIGRpZmZlcmVudAogICBuYW1lcywgeW91IGhhdmUgdG8gdXNlIHRoZSB1bmRlcmx5aW5nIG1ha2VfdGVzdF9jYXNlIGludGVyZmFjZSBpbnN0ZWFkLiBCb3RoIHRlc3QgY2FzZXMgY3JlYXRpb24gYW5kCiAgIHJlZ2lzdHJhdGlvbiBhcmUgcGVyZm9ybWVkIGluIHRoZSB0ZXN0IG1vZHVsZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4KICA8L3A+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgVGhlIHBhcmFtZXRlcml6ZWQgdGVzdCBjYXNlIGZhY2lsaXR5IGlzIHByZWZlcmFibGUgdG8gdGhlIGFwcHJvYWNoIGluIHRoZSBleGFtcGxlIGFib3ZlLCBzaW5jZSBleGVjdXRpb24gb2YKICAgZWFjaCBzdWIgdGVzdCBjYXNlIGlzIGd1YXJkZWQgYW5kIGNvdW50ZWQgaW5kZXBlbmRlbnRseS4gSXQgcHJvZHVjZXMgYSBiZXR0ZXIgdGVzdCBsb2cvcmVzdWx0cyByZXBvcnQgKGluCiAgIGV4YW1wbGUgYWJvdmUgaW4gY2FzZSBvZiBmYWlsdXJlIHlvdSBjYW4ndCBzYXkgd2hpY2ggcGFyYW1ldGVyIGlzIGF0IGZhdWx0KSBhbmQgYWxsb3dzIHlvdSB0byB0ZXN0IGFnYWluc3QKICAgYWxsIHBhcmFtZXRlcnMgZXZlbiBpZiBvbmUgb2YgdGhlbSBjYXVzZXMgdGVybWluYXRpb24gYSBwYXJ0aWN1bGFyIHN1YiB0ZXN0IGNhc2UuCiAgPC9wPgo8cCBjbGFzcz0iZmlyc3QtbGluZS1pbmRlbnRlZCI+CiAgIEluIGNvbXBhcmlzb24gd2l0aCBhIG1hbnVhbCB0ZXN0IGNhc2UgcmVnaXN0cmF0aW9uIGZvciBlYWNoIHBhcmFtZXRlciBhcHByb2FjaCB0aGUgcGFyYW1ldGVyaXplZCB0ZXN0IGNhc2UKICAgZmFjaWxpdHkgaXMgbW9yZSBjb25jaXNlIGFuZCBlYXNpbHkgZXh0ZW5kaWJsZS4KICA8L3A+CjxwIGNsYXNzPSJmaXJzdC1saW5lLWluZGVudGVkIj4KICAgSW4gZm9sbG93aW5nIHNpbXBsZSBleGFtcGxlIHRoZSBzYW1lIHRlc3QsIGltcGxlbWVudGVkIGluIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZnJlZV90ZXN0X2Z1bmN0aW9uPC9jb2RlPiwgaXMKICAgcGVyZm9ybWVkIGZvciA1IGRpZmZlcmVudCBwYXJhbWV0ZXJzLiBUaGUgcGFyYW1ldGVycyBhcmUgZGVmaW5lZCBpbiB0aGUgdGVzdCBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24KICAgc2NvcGUuIFRoZSBtYXN0ZXIgdGVzdCBzdWl0ZSBjb250YWlucyA1IGluZGVwZW5kZW50IHRlc3QgY2FzZXMuCiAgPC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj4KPGEgbmFtZT0idXRmLnVzZXItZ3VpZGUudGVzdC1vcmdhbml6YXRpb24udW5hcnktdGVzdC1jYXNlLmV4YW1wbGUwNyI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaAxMS6gVW5hcnkgZnJlZSBmdW5jdGlvbiBiYXNlZCB0ZXN0IGNhc2U8L2I+PC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNpbmNsdWRlICZsdDtib29zdC90ZXN0L2luY2x1ZGVkL3VuaXRfdGVzdC5ocHAmZ3Q7CiNpbmNsdWRlICZsdDtib29zdC90ZXN0L3BhcmFtZXRlcml6ZWRfdGVzdC5ocHAmZ3Q7CnVzaW5nIG5hbWVzcGFjZSBib29zdDo6dW5pdF90ZXN0OwoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KCnZvaWQgZnJlZV90ZXN0X2Z1bmN0aW9uKCBpbnQgaSApCnsKICAgIEJPT1NUX0NIRUNLKCBpICZsdDsgNCAvKiB0ZXN0IGFzc2VydGlvbiAqLyApOwp9CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKdGVzdF9zdWl0ZSoKaW5pdF91bml0X3Rlc3Rfc3VpdGUoIGludCBhcmdjLCBjaGFyKiBhcmd2W10gKQp7CiAgICBpbnQgcGFyYW1zW10gPSB7IDEsIDIsIDMsIDQsIDUgfTsKCiAgICBmcmFtZXdvcms6Om1hc3Rlcl90ZXN0X3N1aXRlKCkuCiAgICAgICAgYWRkKCBCT09TVF9QQVJBTV9URVNUX0NBU0UoICZhbXA7ZnJlZV90ZXN0X2Z1bmN0aW9uLCBwYXJhbXMsIHBhcmFtcys1ICkgKTsKCiAgICByZXR1cm4gMDsKfQoKLy9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLy8KPC9wcmU+Cjx0YWJsZSBjbGFzcz0ic2ltcGxlbGlzdCIgYm9yZGVyPSIwIiBzdW1tYXJ5PSJTaW1wbGUgbGlzdCI+PHRyPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uL3NyYy9leGFtcGxlcy9leGFtcGxlMDcuY3BwIiB0YXJnZXQ9Il90b3AiPlNvdXJjZSBjb2RlPC9hPjwvY29kZT48L3RkPgo8dGQ+IHwgPC90ZD4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIjIiB0YXJnZXQ9Il90b3AiIGlkPSJpZDY1MDA2NyIgb25jbGljaz0idG9nZ2xlX2VsZW1lbnQoICdleGFtcGxlMDctb3V0cHV0JywgJ2lkNjUwMDY3JywgJ1Nob3cgb3V0cHV0JywgJ0hpZGUgb3V0cHV0JyApOyByZXR1cm4gZmFsc2U7Ij5TaG93IG91dHB1dDwvYT48L2NvZGU+PC90ZD4KPC90cj48L3RhYmxlPgo8cHJlIGNsYXNzPSJleGFtcGxlLW91dHB1dCIgaWQ9ImV4YW1wbGUwNy1vdXRwdXQiPiZndDsgZXhhbXBsZQpSdW5uaW5nIDUgdGVzdCBjYXNlcy4uLgp0ZXN0LmNwcCg5KTogZXJyb3IgaW4gImZyZWVfdGVzdF9mdW5jdGlvbiI6IGNoZWNrIGkgJmx0OyA0IGZhaWxlZAp0ZXN0LmNwcCg5KTogZXJyb3IgaW4gImZyZWVfdGVzdF9mdW5jdGlvbiI6IGNoZWNrIGkgJmx0OyA0IGZhaWxlZAoKKioqIDIgZmFpbHVyZXMgZGV0ZWN0ZWQgaW4gdGVzdCBzdWl0ZSAiTWFzdGVyIFRlc3QgU3VpdGUiCjwvcHJlPgo8L2Rpdj4KPC9kaXY+CjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+PHAgY2xhc3M9ImZpcnN0LWxpbmUtaW5kZW50ZWQiPgogICBOZXh0IGV4YW1wbGUgaXMgc2ltaWxhciwgYnV0IGluc3RlYWQgb2YgYSBmcmVlIGZ1bmN0aW9uIGl0IHVzZXMgYSBtZXRob2Qgb2YgYSBjbGFzcy4gRXZlbiB0aG91Z2ggcGFyYW1ldGVycyBhcmUKICAgcGFzc2VkIGludG8gdGVzdCBtZXRob2QgYnkgcmVmZXJlbmNlIHlvdSBjYW4gc3RpbGwgZGVmaW5lIHRoZW0gaW4gdGhlIHRlc3QgbW9kdWxlIGluaXRpYWxpemF0aW9uICBmdW5jdGlvbiBzY29wZS4KICAgVGhpcyBleGFtcGxlIGVtcGxveXMgdGhlIGFsdGVybmF0aXZlIHRlc3QgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHNwZWNpZmljYXRpb24uCiAgPC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj4KPGEgbmFtZT0idXRmLnVzZXItZ3VpZGUudGVzdC1vcmdhbml6YXRpb24udW5hcnktdGVzdC1jYXNlLmV4YW1wbGUwOCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZaAxMi6gVW5hcnkgY2xhc3MgbWV0aG9kIGJhc2VkIHRlc3QgY2FzZTwvYj48L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBCT09TVF9URVNUX0FMVEVSTkFUSVZFX0lOSVRfQVBJCiNpbmNsdWRlICZsdDtib29zdC90ZXN0L2luY2x1ZGVkL3VuaXRfdGVzdC5ocHAmZ3Q7CiNpbmNsdWRlICZsdDtib29zdC90ZXN0L2Zsb2F0aW5nX3BvaW50X2NvbXBhcmlzb24uaHBwJmd0OwojaW5jbHVkZSAmbHQ7Ym9vc3QvdGVzdC9wYXJhbWV0ZXJpemVkX3Rlc3QuaHBwJmd0OwojaW5jbHVkZSAmbHQ7Ym9vc3QvYmluZC5ocHAmZ3Q7CnVzaW5nIG5hbWVzcGFjZSBib29zdDo6dW5pdF90ZXN0Owp1c2luZyBuYW1lc3BhY2UgYm9vc3Q7CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKY2xhc3MgdGVzdF9jbGFzcyB7CnB1YmxpYzoKICAgIHZvaWQgdGVzdF9tZXRob2QoIGRvdWJsZSBjb25zdCZhbXA7IGQgKQogICAgewogICAgICAgIEJPT1NUX0NIRUNLX0NMT1NFKCBkICogMTAwLCAoZG91YmxlKShpbnQpKGQqMTAwKSwgMC4wMSApOwogICAgfQp9IHRlc3RlcjsKCi8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy8vCgpib29sIGluaXRfdW5pdF90ZXN0KCkKewogICAgZG91YmxlIHBhcmFtc1tdID0geyAxLiwgMS4xLCAxLjAxLCAxLjAwMSwgMS4wMDAxIH07CgogICAgY2FsbGJhY2sxJmx0O2RvdWJsZSZndDsgdG0gPSBiaW5kKCAmYW1wO3Rlc3RfY2xhc3M6OnRlc3RfbWV0aG9kLCAmYW1wO3Rlc3RlciwgXzEpOwoKICAgIGZyYW1ld29yazo6bWFzdGVyX3Rlc3Rfc3VpdGUoKS4KICAgICAgICBhZGQoIEJPT1NUX1BBUkFNX1RFU1RfQ0FTRSggdG0sIHBhcmFtcywgcGFyYW1zKzUgKSApOwoKICAgIHJldHVybiB0cnVlOwp9CgovL19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18vLwoKPC9wcmU+Cjx0YWJsZSBjbGFzcz0ic2ltcGxlbGlzdCIgYm9yZGVyPSIwIiBzdW1tYXJ5PSJTaW1wbGUgbGlzdCI+PHRyPgo8dGQ+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uL3NyYy9leGFtcGxlcy9leGFtcGxlMDguY3BwIiB0YXJnZXQ9Il90b3AiPlNvdXJjZSBjb2RlPC9hPjwvY29kZT48L3RkPgo8dGQ+IHwgPC90ZD4KPHRkPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj48YSBocmVmPSIjIiB0YXJnZXQ9Il90b3AiIGlkPSJpZDY1MDE2MiIgb25jbGljaz0idG9nZ2xlX2VsZW1lbnQoICdleGFtcGxlMDgtb3V0cHV0JywgJ2lkNjUwMTYyJywgJ1Nob3cgb3V0cHV0JywgJ0hpZGUgb3V0cHV0JyApOyByZXR1cm4gZmFsc2U7Ij5TaG93IG91dHB1dDwvYT48L2NvZGU+PC90ZD4KPC90cj48L3RhYmxlPgo8cHJlIGNsYXNzPSJleGFtcGxlLW91dHB1dCIgaWQ9ImV4YW1wbGUwOC1vdXRwdXQiPiZndDsgZXhhbXBsZQpSdW5uaW5nIDUgdGVzdCBjYXNlcy4uLgp0ZXN0LmNwcCgxNCk6IGVycm9yIGluICJ0bSI6IGRpZmZlcmVuY2UgYmV0d2VlbiBkICogMTAwezEwMC4xfSBhbmQgKGRvdWJsZSkoaW50KShkKjEwMCl7MTAwfSBleGNlZWRzIDAuMDElCnRlc3QuY3BwKDE0KTogZXJyb3IgaW4gInRtIjogZGlmZmVyZW5jZSBiZXR3ZWVuIGQgKiAxMDB7MTAwLjAxfSBhbmQgKGRvdWJsZSkoaW50KShkKjEwMCl7MTAwfSBleGNlZWRzIDAuMDElCgoqKiogMiBmYWlsdXJlcyBkZXRlY3RlZCBpbiB0ZXN0IHN1aXRlICJNYXN0ZXIgVGVzdCBTdWl0ZSIKPC9wcmU+CjwvZGl2Pgo8L2Rpdj4KPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KPC9kaXY+Cjx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KPHRkIGFsaWduPSJsZWZ0Ij48L3RkPgo8dGQgYWxpZ249InJpZ2h0Ij48ZGl2IGNsYXNzPSJjb3B5cmlnaHQtZm9vdGVyIj5Db3B5cmlnaHQgqSAyMDAxLTIwMDcgR2VubmFkaXkgUm96ZW50YWw8L2Rpdj48L3RkPgo8L3RyPjwvdGFibGU+Cjxocj4KPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+CjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iYXV0by1udWxsYXJ5LXRlc3QtY2FzZS5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL3Rlc3Qtb3JnYW5pemF0aW9uLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kb2MvaHRtbC9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi8uLi8uLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9InRlc3QtY2FzZS10ZW1wbGF0ZS5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZG9jL2h0bWwvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=