LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqDQoqICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDEzIFpURSBDb3Jwb3JhdGlvbi4NCioNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiDEoyC/6SDD+yA6IENDDQoqIM7EILz+IMP7IDogQ2NfbWFpbi5oDQoqIM/gudjOxLz+IDogDQoqIMq1z9a5psTcIDogQVTD/MHutKbA7cSjv+m66qGiwODQzbao0uUNCiog1/cgICAg1d8gOiANCiogsOYgICAgsb4gOg0KKiDN6rPJyNXG2iA6DQoqIMbky/zLtcP3IDogDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqINDeuMS8x8K8IDogDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiog0N64xLHgusUgOiANCiog0N4guMQgyMsgOiANCiog0N64xMjVxtogOiANCiog0N64xMTayN0gOiANCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2lmbmRlZiBfQ0NfTUFJTl9IDQojZGVmaW5lIF9DQ19NQUlOX0gNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqICNpbmNsdWRlx/gNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2luY2x1ZGUgIm1lc3NhZ2UuaCINCiNpbmNsdWRlICJzb2Z0YXBfYXBpLmgiDQojaW5jbHVkZSAiY2NfcHJvYy5oIiANCiNpbmNsdWRlICJzbGljX3R5cGUuaCINCiNpbmNsdWRlICJzbGljX2luZi5oIiANCiNpbmNsdWRlIDx0aW1lLmg+DQojaW5jbHVkZSAibGlienRlX2xvZy5oIg0KI2lmbmRlZiBURVNUX0NDQVBQDQojaW5jbHVkZSAic3lzL2lwYy5oIg0KI2luY2x1ZGUgInNpZ25hbC5oIg0KI2VuZGlmDQojaWZkZWYgX09TX1RPUw0KI2luY2x1ZGUgIm9zYV9hcGkuaCINCiNpbmNsdWRlICJvc3NfYXBpLmgiDQojZW5kaWYNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiCzo8G/tqjS5cf4DQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgZW51bSANCnsNCiAgICBaQ0NBUFBfVElNRVJfSE9PS09GRl9ERVRFQ1QsICAgICAvKtWqu/q687XItP2yprrFtqjKscb3Ki8NCiAgICBaQ0NBUFBfVElNRVJfRFRNRl9ERVRFQ1QsICAgICAgLyqyprrFvOS49LaoyrHG9yovDQogICAgWkNDQVBQX1RJTUVSX0JVU1lUT05FX0RFVEVDVCwgLyrDptL0tqjKscb3Ki8NCiAgICBaQ0NBUFBfVElNRVJfVEtZVE9ORV9ERVRFQ1QsIC8qw6bS9LrztcTQpb3Q0vS2qMqxxvcqLw0KICAgIFpDQ0FQUF9USU1FUl9TU0RJQUxUT05FX0RFVEVDVCwgLyqyubPk0rXO8bLZ1/fKscrVtb1mbGFzaLrzxvSyprrF0vS2qMqxxvcqLw0KICAgIFpDQ0FQUF9USU1FUl9IT09LT0ZGX0lETEUsDQp9VF96Q2NfVGltZXJFdjsNCg0KdHlwZWRlZiBlbnVtIA0Kew0KICAgIFpDQ0FQUF9BVElORF9EU0NJLCAgICANCiAgICBaQ0NBUFBfQVRJTkRfWkNQSSwgICAgIA0KICAgIFpDQ0FQUF9BVElORF9JTVNQTFVTLA0KICAgIFpDQ0FQUF9BVElORF9NT0RFDQp9VF96Q2NfQXRJbmRFdjsNCg0KDQojZGVmaW5lIFpDQ0FQUF9USU1FUl9IT09LT0ZGX0lOVEVSVkFMICAxMDAwMA0KI2RlZmluZSBaQ0NBUFBfVElNRVJfRFRNRl9JTlRFUlZBTCA1MDAwDQojZGVmaW5lIFpDQ0FQUF9USU1FUl9CVVNZVE9ORV9JTlRFUlZBTCAgNzAwMA0KI2RlZmluZSBaQ0NBUFBfVElNRVJfVEtZVE9ORV9JTlRFUlZBTCAgNjAwMDANCg0KI2RlZmluZSBaQ0NBUFBfVElNRVJfSE9PS09GRl9JRExFX0lOVEVSVkFMICA1MDANCg0KLyoNCiAqIE51bWJlciBvZiBzbGF2ZXMgcGVyIG1hc3Rlci4NCiAqIFR3byBzbGF2ZXMgYXJlIHJlcXVpcmVkIGZvciAzLXBhcnR5IGNhbGxzLg0KICovDQojZGVmaW5lIFpDQ19TTEFWRVMgICAgICA4DQojZGVmaW5lIFpDQ19NQVhDSUQgICAgICA3DQojZGVmaW5lIFpDQ19NSU5DSUQgICAgICAxDQoNCiNkZWZpbmUgWkRJQUxfTlVNX01BWCAgICAgICAgICAgICAgICA0OA0KI2RlZmluZSBaQ0NfQVRfQ0hOTF9JRCAgICAgICAgICAgICAgICA3MA0KI2RlZmluZSBaQ0NfRkxBU0hfU0lHTiAgICAgICAgICAgICAgICAoJ0YnKQ0KI2RlZmluZSBaQ0NfVElNRU9VVF9TSUdOICAgICAgICAgICAgICAgICgnVCcpDQovKg0KICogRGVmaW5lIGhvdyBmb2N1cyBmbGFnIGluIG1hc3RlciBzdGF0ZSBtYWNoaW5lIGlzIGludGVycHJldGVkLg0KICogWFhYOiBFeHRlbmQgdGhpcyBmb3IgbW9yZSB0aGFuIDMtcGFydHkgY2FsbHMuDQogKi8NCiNkZWZpbmUgWkNDX0ZPQ1VTXzAgICAgICgxIDw8IDApDQojZGVmaW5lIFpDQ19GT0NVU18xICAgICAoMSA8PCAxKQ0KI2RlZmluZSBaQ0NfRk9DVVNfMiAgICAgKDEgPDwgMikNCiNkZWZpbmUgWkNDX0ZPQ1VTX1BTVE4gICgxIDw8IDMpDQojZGVmaW5lIFpDQ19GT0NVU19CT1RIICAoWkNDX0ZTTV9GT0NVU18wICsgWkNDX0ZTTV9GT0NVU18xKQ0KDQovKg0KICogVmFyaW91cyB0aW1lb3V0cy4NCiAqIFRoZXNlIHRpbWVvdXRzIGFyZSBpbiB1bml0cyBvZiBaQ0NfVElNRVJfRS4NCiAqLw0KI2RlZmluZSBaQ0NfQlNZVE1PICAgICAgKDcwMDApIC8qIFRpbWVvdXQgaW4gYnVzeSB0b25lIHN0YXRlICovDQojZGVmaW5lIFpDQ19US1lUTU8gICAgICAoNjAwMDApIC8qIFRpbWVvdXQgaW4gdHVya2V5IHRvbmUgc3RhdGUgKi8NCi8vI2RlZmluZSBaQ0NfRkJTWVRNTyAgICAgKDQwMDAwKSAvKiBUaW1lb3V0IGluIGZhc3QgYnVzeSB0b25lIHN0YXRlICovDQojZGVmaW5lIFpDQ19EQUNDTVRNTyAoNTAwMCkgIC8qIFRpbWVvdXQgKGludGVyZGlnaXQpIGluIGRhY2NtIHN0YXRlICovDQojZGVmaW5lIFpDQ19EVFRNTyAgICAgICAoMTAwMDApIC8qIFRpbWVvdXQgaW4gZGlhbHRvbmUgc3RhdGUgKi8NCiNkZWZpbmUgWkNDX1JTVFRNTyAgICAgICgxMCkgLyogVGltZW91dCBpbiBtYXN0ZXIgcmVzZXQgc3RhdGUgKi8NCiNkZWZpbmUgWkNDX1JFTFRNTyAgICAgICgxMCkgLyogVGltZW91dCBpbiBtYXN0ZXIgcmVsZWFzZSBzdGF0ZSAqLw0KI2RlZmluZSBaQ0NfUklOR1RNTyAgICAgKDEwKSAvKiBUaW1lb3V0IGluIG1hc3RlciByaW5naW5nIHN0YXRlICovDQojZGVmaW5lIFpDQ19TRUlaRVRNTyAgICAoMTApIC8qIFRpbWVvdXQgaW4gbWFzdGVyIHNlaXplIHN0YXRlICovDQojZGVmaW5lIFpDQ19SQlRNTyAgICAgICAoNDApIC8qIFRpbWVvdXQgaW4gcmluZ2JhY2sgc3RhdGUgKi8NCiNkZWZpbmUgWkNDX0RJQUxUTU8gICAgICgzMCkgLyogVGltZW91dCBpbiBkaWFsIHN0YXRlICovDQojZGVmaW5lIFpDQ19QU1ROU1dUTU8gICAoNSkgIC8qIFRpbWVvdXQgaW4gcHN0biBzd2l0Y2hpbmcgc3RhdGUgKi8NCiNkZWZpbmUgWkNDX0lOVEVSRElHSVRTSE9SVCAgICAoNSkgIC8qIFRpbWVvdXQgKGludGVyZGlnaXQgc2hvcnQpIGluIGRhY2NtIHN0YXRlKi8NCiNkZWZpbmUgWkNDX1dBSVRfUkVTT1VSQ0VUTU8gICAoOCkgIC8qIFRpbWVvdXQgaW4gd2FpdGluZyBmb3IgcmVzb3VyY2Ugc3RhdGUgKi8NCg0KLyogRGVmaW5lIGRpZ2l0cyBtYXRjaCByZXN1bHRzLiAqLw0KI2RlZmluZSBaQ0NfTk9fUkVTVUxUICAgICAgICgweDAwKSAgLyogbmVlZCBtb3JlIGRpZ2l0cyAqLw0KI2RlZmluZSBaQ0NfQ0FMTCAgICAgICAgICAgICAgICAoMHgwMSkgIC8qIGFsbCBkaWdpdHMgY29sbGVjdGVkICovDQojZGVmaW5lIFpDQ19CQU9DX1JFRyAgICAgICAoMHgxMCkgDQojZGVmaW5lIFpDQ19CQU9DX0RFUkVHICAgKDB4MTEpIA0KI2RlZmluZSBaQ0NfQk9JQ19SRUcgICAgICAgKDB4MTIpIA0KI2RlZmluZSBaQ0NfQk9JQ19ERVJFRyAgICgweDEzKSANCiNkZWZpbmUgWkNDX0NGVV9SRUcgICAgICAgICAgICgweDIwKSANCiNkZWZpbmUgWkNDX0NGVV9ERVJFRyAgICAgICAoMHgyMSkgDQojZGVmaW5lIFpDQ19DRk5SWV9SRUcgICAgICAgKDB4MjIpIA0KI2RlZmluZSBaQ0NfQ0ZOUllfREVSRUcgICAoMHgyMykgDQojZGVmaW5lIFpDQ19DRkJfUkVHICAgICAgICAgICAoMHgyNCkgDQojZGVmaW5lIFpDQ19DRkJfREVSRUcgICAgICAgKDB4MjUpIA0KI2RlZmluZSBaQ0NfRkxBU0hfMSAgICAgICAgKDB4MzApICAvKiBSZWxlYXNlIGFsbCBhY3RpdmUgY2FsbCBhbmQgYWNjZXB0IHRoZSBvdGhlcihoZWxkIG9yIHdhaXRpbmcpIGNhbGwgICovDQojZGVmaW5lIFpDQ19GTEFTSF8yICAgICAgICAoMHgzMSkgIC8qIFBsYWNlIGFsbCBhY3RpdmUgY2FsbCBvbiBob2xkIGFuZCBhY2NlcHQgdGhlIG90aGVyKGhlbGQgb3Igd2FpdGluZykgY2FsbCAqLw0KI2RlZmluZSBaQ0NfRkxBU0hfMyAgICAgICAgKDB4MzIpICAvKiBBZGRzIGEgaGVsZCBjYWxsIHRvIHRoZSBjb252ZXJzYXRpb24gKi8gDQojZGVmaW5lIFpDQ19GTEFTSF80ICAgICAgICAoMHgzMykgIC8qIGNhbGwgdHJhbnNmZXIgKi8gDQojZGVmaW5lIFpDQ19GTEFTSF8wICAgICAgICAoMHgzNCkgIC8qIHJlbGVhc2Ugd2FpdGluZyBjYWxsICovIA0KI2RlZmluZSBaQ0NfTE9DQUxfVEVTVF9DQUxMCQkoMHhGRi0xKQ0KI2RlZmluZSBaQ0NfTUFUQ0hFUlIgICAgICAgICAoMHhGRikgIC8qIHdyb25nIGlucHV0ICovDQoNCg0KLyogRGVmaW5lIG1hc3RlciBzdGF0ZSBtYWNoaW5lIHN0YXRlcy4gKi8NCnR5cGVkZWYgZW51bSB7DQogICAgWkNDX01fUkVMRUFTRV9TICAgID0gMCwNCiAgICBaQ0NfTV9SSU5HSU5HX1MgICAgPSAxLA0KICAgIFpDQ19NX1NFSVpFX1MgICAgICA9IDINCn0gVF96Q2NfTWFzdGVyU3RhdGU7DQoNCi8qIERlZmluZSBzbGF2ZSBzdGF0ZSBtYWNoaW5lIHN0YXRlcy7Ls9Dysru/ybX31fsgKi8NCnR5cGVkZWYgZW51bSB7DQogICAgWkNDX1NfSURMRV9TICAgICAgICA9IDAsDQogICAgWkNDX1NfRFRfUyAgICAgICAgICAgLA0KICAgIFpDQ19TX0RBQ0NNX1MgICAgLA0KICAgIFpDQ19TX0RJQUxJTkdfUyAgLA0KICAgIFpDQ19TX1JJTkdCQUNLX1MgICAsLy8g1ve90Ln9s8zW0LXE1fHB5cysDQogICAgWkNDX1NfQlNZVF9TICAgICAgICwNCiAgICBaQ0NfU19US1lUX1MgICAgICAgLA0KICAgIFpDQ19TX1NJTF9TICAgICAgICAsDQogICAgWkNDX1NfVEFMS0lOR19TICAgICwNCiAgICBaQ0NfU19UUllJTkdfUyAgICAgLA0KICAgIFpDQ19TX1dBSVRfUkVTT1VSQ0VfUyAsDQp9ICBUX3pDY19TbGF2ZVN0YXRlLCBUX3pDY19DYWxsU3RhdGU7DQoNCi8qIERlZmluZSBrbm93biB0b25lIHR5cGVzLiAqLw0KdHlwZWRlZiBlbnVtIHsNCiAgICBaQ0NfVE9ORV9PRkZfQSAgID0gMCwNCiAgICBaQ0NfVE9ORV9TSUxfQSAgID0gMSwNCiAgICBaQ0NfVE9ORV9SQl9BICAgID0gMiwNCiAgICBaQ0NfVE9ORV9CU1lfQSAgID0gMywNCiAgICAvL1pDQ19UT05FX0ZCU1lfQSAgPSA0LA0KICAgIFpDQ19UT05FX1RLWV9BICAgPSA1LA0KICAgIFpDQ19UT05FX0RJQUxfQSAgPSA2LA0KICAgIFpDQ19UT05FX0NJRENXX0EgPSA3LA0KfVRfekNjX1RvbmU7DQoNCg0KLyogRGVmaW5lIGtub3duIG1lc3NhZ2VzIHRvIFNJUC4gKi8NCnR5cGVkZWYgZW51bSB7DQogICAgWkNDX1NOT19NICAgICAgICAgID0gMCwNCiAgICBaQ0NfU0JVU1lfTSAgICAgICAgPSAxLCAgLyogV2hlbiB0aGlzIG5vZGUgaXMgYnVzeSAqLw0KICAgIFpDQ19TQU5TX00gICAgICAgICA9IDIsICAvKiBXaGVuIHRoaXMgbm9kZSBhbnN3ZXJlZCAqLw0KICAgIFpDQ19TSU5WX00gICAgICAgICA9IDMsICAvKiBXaGVuIHRvIGludml0ZSB0aGUgb3RoZXIgbm9kZSAqLw0KICAgIFpDQ19TUkVHX00gICAgICAgICA9IDQsICAvKiBXaGVuIHRvIHJlZ2lzdGVyICovDQogICAgWkNDX1NESVNDTl9NICAgICAgID0gNSwgIC8qIFdoZW4gdGhpcyBub2RlIGRpc2Nvbm5lY3RlZCAqLw0KICAgIFpDQ19TUklOR19NICAgICAgICA9IDYsICAvKiBXaGVuIHRoaXMgbm9kZSBzdGFydHMgcmluZ2luZyAqLw0KICAgIFpDQ19TUkJBTlNfTSAgICAgICA9IDcsICAvKiBXaGVuIHRoZSBvdGhlciBub2RlIGFuc3dlcmVkICovDQogICAgWkNDX1NIT0xEX00gICAgICAgID0gOCwgIC8qIFdoZW4gdGhlIG90aGVyIG5vZGUgaXMgcHV0IG9uIGhvbGQgKi8NCiAgICBaQ0NfU1JFSU5WX00gICAgICAgPSA5LCAgLyogV2hlbiB0aGUgb3RoZXIgbm9kZSBpcyBwdXQgb2ZmIGhvbGQgKi8NCiAgICBaQ0NfU01FRElBX00gICAgICAgPSAxMCwgLyogV2hlbiBhIG1lZGlhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgKi8NCiAgICBaQ0NfU0RJR0lUU19NICAgICAgPSAxOCwgLyogV2hlbiBhIGRpZ2l0cyB0aW1lb3V0IG9jY3VycyAqLw0KICAgIFpDQ19TRFRNRl9NICAgICAgICA9IDE5LCAvKiBXaGVuIGEgRFRNRiByZWxheSBvY2N1cnMgKi8NCiAgICBaQ0NfU1JJTkdfUlNSQ19SRUFEWV9NID0gMTE5LCAvKiBXaGVuIHRoaXMgbW9kZSBzdGFydCByaW5naW5nIGZvciByZXNvdXJjZSByZWFkeSAqLw0KfSBUX3pDY19TUmVzcDsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIMr9vt294bm5tqjS5cf4DQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnR5cGVkZWYgc3RydWN0DQp7DQogICAgVUlOVDggY3VyQ21kOw0KICAgIFVJTlQ4IGN1ckF0Q21kU3JjOw0KfVRfekNjX0N1ckF0Q21kSW5mbzsNCg0KDQovKiBTbGF2ZSBzdGF0ZSBtYWNoaW5lIG9iamVjdC4gKi8NCnR5cGVkZWYgc3RydWN0IHsNCiAgICBUX3pDY19TbGF2ZVN0YXRlICAgIHN0YXRlOyAgLyogVGhpcyBzbGF2ZSdzIHN0YXRlICovDQogICAgVF96Q2NfU2xhdmVTdGF0ZSAgICBvbGRfc3RhdGU7DQogICAgVF96Q2NfVG9uZSAgICAgICAgICAgIHRvbmU7ICAgLyogV2hhdCB0b25lIHRvIHBsYXkgKi8NCiAgICBUX3pDY19TUmVzcCAgICAgICAgICBzTXNnOyAgIC8qIEFjdGlvbiBmb3IgU0lQICovDQogICAgVUlOVDggICAgICAgICAgICAgICAgICAgIGhlbGRjYWxsOyAgIC8qIFdoZW4gMSwgdGhlIGNhbGwgaXMgaW4gaGVsZCBzdGF0ZSAqLw0KICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgY29uZmNhbGw7ICAgLyogV2hlbiAxLCB0aGUgY2FsbCBpcyBpbiBjb25mZXJlbmNlICovDQogICAgVUlOVDggICAgICAgICAgICAgICAgICAgIHdhaXREU0NJNjsgICAvKiBob29rb24sd2FpdCBEU0NJNiAqLw0KICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICBjaWQ7ICAgICAgLyogY2FsbCBpZCAqLyAgICANCiAgICBVSU5UMTYJCQkJaWRsZV9zZWNvbmQ7IC8qaWYgaG9va29mZiBidXQgbm8ga2V5IGlzIGRvd24sIHRoaXMgdmFyIHNob3cgdGhlIHRpbWUgZm9yIHdhaXRpbmcga2V5IHRvIGlucHV0ICovDQoJQ0hBUiAgICAgICAgICAgICAgICAgbnVtYmVyW1pESUFMX05VTV9NQVhdOw0KCVVJTlQ4CQkJCWlzX2NhbGxvdXQ7DQoJVUlOVDggICAgICAgICAgICAgICBpc19jaWRjdzsNCn0gVF96Q2NfU2xhdmVPYmo7DQoNCi8qIE1hc3RlciBzdGF0ZSBtYWNoaW5lIG9iamVjdC4gKi8NCnR5cGVkZWYgc3RydWN0IHsNCiAgICBUX3pDY19NYXN0ZXJTdGF0ZSBzdGF0ZTsgICAgICAgICAgICAgICAvKiBUaGlzIG1hc3RlcidzIHN0YXRlICovDQogICAgVF96Q2NfU2xhdmVPYmogICAgc2xhdmVPYmpbWkNDX1NMQVZFU107DQogICAgVVNIT1JUICAgICAgICBldnRbWkNDX1NMQVZFU107DQogICAvLyBVSU5UOCAgICAgICAgICAgICAgICBmb2N1czsgICAgICAgICAgICAgICAvKiBXaGljaCBzbGF2ZSBpbiBmb2N1cyAqLw0KICAgIFVJTlQ4ICAgICAgICAgICAgICAgIG1vZGU7ICAgICAgICAgICAgICAgLyogQ3VycmVudCBtb2RlICovDQogICAgVUlOVDggICAgICAgICAgICAgICAgY2h1cFNlbnQ7ICAgICAgICAgICAgICAgDQogICAgVUlOVDggICAgICAgICAgICAgICAgcmluZ0NpZDsgICAgICAgICAgICAgICAgLyogUmluZyB0aGUgcGhvbmUgKi8NCiAgICBVSU5UOCAgICAgICAgICAgICAgICByZXNvdXJjZVJlYWR5OyAgICAgICAgICAgICAgICAvKiBaQ1BJOiB4LDUgcmVjZWl2ZWQgKi8NCiAgICBVSU5UOCAgICAgICAgICAgICAgICBkQ291bnQ7ICAgICAgICAgICAgICAvKiBDb2xsZWN0ZWQgRFRNRiBkaWdpdHMgc3RyaW5nICovDQogICAgQ0hBUiAgICAgICAgICAgICAgICBkaWdpdHNbWkRJQUxfTlVNX01BWF07Ly8gZGlhbGxlZCAgbnVtYmVyDQogICAgQ0hBUiAgICAgICAgICAgICAgICAgbnVtYmVyW1pESUFMX05VTV9NQVhdOy8vIGNhbGxpbmcgbnVtYmVyDQogICAgVUlOVDggICAgICAgICAgICAgICAgY29uZk51bTsgICAgICAgICAgICAgLyogdG90YWwgY29uZmVyZW5jZSBudW1iZXIgKi8NCiAgICBFX0NDX0FQUF9BdFJlcUNtZElkICAgICAgICAgICAgICAgIGN1ckF0Q21kSWQ7DQogICAgVUlOVDggICAgICAgICAgICAgICAgaG9va29mZmZnOw0KICAgIFVJTlQ4ICAgICAgICAgICAgICAgIGFjdENhbGxOdW07ICAgICAgICAgICAgIC8qIHRvdGFsIGFjdGl2ZSBjYWxsIG51bWJlciAqLw0KICAgIFVJTlQ4ICAgICAgICAgICAgICAgIGxhc3RUb25lOyAgICAgIA0KICAgIFVJTlQ4ICAgICAgICAgICAgICAgIHdhaXRjaGxkcmVzdWx0Ow0KICAgIFRfekNjX01hc3RlclN0YXRlIG9sZF9zdGF0ZTsgDQp9IFRfekNjX01hc3Rlck9iaiwgVF96Q2NfQ2FsbERldGFpbDsNCg0KZXh0ZXJuIFRfekNjX0NhbGxEZXRhaWwgZ19DY19DYWxsRGV0YWlsOw0KDQpleHRlcm4gVF96Q2NfQ3VyQXRDbWRJbmZvICpnX0NjX0F0SW5kUnNwTXNnOw0KLy90eXBlZGVmICAgIFZPSUQgKCp6Q2NfU2xpY0V2RnVuYykoVUlOVDggUGFyYSk7DQpWT0lEIHpDY19TZW5kTXNnVG9TdWIoTVNHX0JVRiAqcE1zZyk7DQppbnQgekNjX3NsZWVwKGxvbmcgbXMpOyANClZPSUQgekNjX1NlbmRNc2dUb1JzcFN1YihNU0dfQlVGICpwTXNnKTsNCg0KI2VuZGlmDQoNCg==