IyEvdXNyL2Jpbi9wZXJsIC13CiMKIyB1cGRhdGVfc2xpbV93bWxpc3QsIGJhc2VkIG9uOgojIHVwZGF0ZV93ZG1fd21saXN0LCAoYykgMTk5OCBNYXJjZWxvIE1hZ2FsbPNuIDxtbWFnYWxsb0BkZWJpYW4ub3JnPgojIHJld3JpdGVuIHRvIHVzZSB0aGUgeC13aW5kb3ctbWFuYWdlciBhbHRlcm5hdGl2ZQojIG1vZGlmaWVkIHRvIGFsc28gdXNlIHRoZSB4LXNlc3Npb24tbWFuYWdlciBhbHRlcm5hdGl2ZSBieSBBcnRodXIgS29ybgojIENvcHlyaWdodCAyMDAwIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CiMgTW9kaWZpZWQgdG8gdXNlIHRoZSBmcmVlZGVza3RvcC5vcmcgLmRlc2t0b3AgbGlrZSBrZG0gYW5kIGdkbQojCiMgVGhpcyBzY3JpcHQgd2lsbCByZWFkIHRoZSBsaXN0IG9mIGluc3RhbGxlZCB3aW5kb3cgbWFuYWdlcnMgZnJvbQojIHRoZSBmcmVlZGVza3RvcCAuZGVza3RvcCBmaWxlcyBpbiA8ZXRjPi9YMTEvc2Vzc2lvbnMvOjxldGM+L2RtL1Nlc3Npb25zLzoKIyA8c2hhcmU+L3hzZXNzaW9ucy8KIyBhbmQgdXBkYXRlIHRoZSBzZXNzaW9ucyBsaW5lIGluIC9ldGMvc2xpbS5jb25mLgojIEJFV0FSRTogSXQgZG9lc24ndCBhc2sgYW55IHF1ZXN0aW9ucyBhYm91dCB0aGlzLiBJdCBqdXN0IGRvZXMgaXQuIEl0CiMgdGFrZXMgYW4gb3B0aW9uYWwgbGlzdCBvZiB3aW5kb3cgbWFuYWdlcnMuCgp1c2Ugc3RyaWN0Owp1c2UgRmlsZTo6RGVza3RvcEVudHJ5OwoKbXkgJHdtX2xpc3Q9Jyc7Cm15ICVkZXNrdG9wX2ZpbGVzOwoKdW5sZXNzIChAQVJHVikgewogICAgI215IEB3bV9saXN0ID0gKCdkZWZhdWx0Jyk7CiAgICBteSBAd21fbGlzdDsKICAgIGZvcmVhY2ggbXkgJGRpciAoJy9ldGMvWDExL3Nlc3Npb25zLycsJy9ldGMvZG0vU2Vzc2lvbnMvJywnL3Vzci9zaGFyZS94c2Vzc2lvbnMvJykgewoJICAgIG5leHQgdW5sZXNzIChvcGVuZGlyIERJUiwgJGRpcik7CgkgICAgbXkgQGZpbGVzOwoJICAgIEBmaWxlcyA9IGdyZXAgeyAvXC5kZXNrdG9wJC8gJiYgLXIgIiRkaXIvJF8iIH0gcmVhZGRpcihESVIpOwoJICAgIGZvcmVhY2ggbXkgJGZpbGUgKEBmaWxlcykgewoJCSAgIHB1c2ggQHskZGVza3RvcF9maWxlc3skZmlsZX19LCAiJGRpci8kZmlsZSI7CgkgICAgfQogICAgfQogICAgREVTS1RPUDogZm9yZWFjaCBteSAkZGVza3RvcF9maWxlIChrZXlzKCVkZXNrdG9wX2ZpbGVzKSkgewoJICAgIGZvcmVhY2ggbXkgJGZpbGUgKEB7JGRlc2t0b3BfZmlsZXN7JGRlc2t0b3BfZmlsZX19KSB7CgkJICAgIG15ICRlbnRyeSA9IEZpbGU6OkRlc2t0b3BFbnRyeS0+bmV3X2Zyb21fZmlsZSgkZmlsZSk7CgkJICAgIG5leHQgREVTS1RPUCBpZiAoZGVmaW5lZCgkZW50cnktPmdldF92YWx1ZSgnSGlkZGVuJykpCgkJCWFuZCAkZW50cnktPmdldF92YWx1ZSgnSGlkZGVuJykgZXEgJ3RydWUnKTsKCQkgICAgaWYgKCRlbnRyeS0+Z2V0X3ZhbHVlKCdOYW1lJykgPX4gL15nbm9tZSQvaSkgewoJCQkgICAgcHVzaCAoQHdtX2xpc3QsICdnbm9tZScpOwoJCSAgICB9CgkJICAgIGVsc2lmICgkZW50cnktPmdldF92YWx1ZSgnTmFtZScpID1+IC9ea2RlJC9pKSB7CgkJCSAgICBwdXNoIChAd21fbGlzdCwgJ2tkZScpOwoJCSAgICB9CgkJICAgIGVsc2lmIChkZWZpbmVkKCRlbnRyeS0+Z2V0X3ZhbHVlKCdFeGVjJykpKSB7CgkJCSAgICBwdXNoIChAd21fbGlzdCwgJGVudHJ5LT5nZXRfdmFsdWUoJ0V4ZWMnKSk7CgkJICAgIH0KCQkgICAgZWxzZSB7ICMgbm90IGZvdW5kLCBnbyB0byBuZXh0IGZpbGUKCQkJICAgIG5leHQ7CgkJICAgIH0KCQkgICAgIyBmb3VuZCwgcHJvY2VlZCB0byBuZXh0IGRlc3RvcCBmaWxlCgkJICAgIG5leHQgREVTS1RPUDsKCSAgICB9CiAgICB9CiAgICR3bV9saXN0ID0gam9pbiAoJywnLCBzb3J0IEB3bV9saXN0KSAuICcsY3VzdG9tJzsKfSBlbHNlIHsKICAgICR3bV9saXN0ID0gam9pbiAoJywnLCBzb3J0IEBBUkdWKTsKfQoKb3BlbiAoU0xJTV9DT05GSUdfRklMRSwgJzwvZXRjL3NsaW0uY29uZicpCiAgICBvciBkaWUgIkNhbid0IG9wZW4gL2V0Yy9zbGltLmNvbmYgZm9yIHJlYWRpbmc6ICQhIjsKb3BlbiAoTkVXX1NMSU1fQ09ORklHX0ZJTEUsICc+L2V0Yy9zbGltLmNvbmYubmV3JykKICAgIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAvZXRjL3NsaW0uY29uZi5uZXcgZm9yIHdyaXRpbmc6ICQhIjsKCndoaWxlICg8U0xJTV9DT05GSUdfRklMRT4pIHsKICAgIHN8XihzZXNzaW9uc1xzKikuKnwkMSR3bV9saXN0fDsKICAgIHByaW50IE5FV19TTElNX0NPTkZJR19GSUxFOwp9CgpjbG9zZShTTElNX0NPTkZJR19GSUxFKTsKY2xvc2UoTkVXX1NMSU1fQ09ORklHX0ZJTEUpOwoKcmVuYW1lICcvZXRjL3NsaW0uY29uZi5uZXcnLCAnL2V0Yy9zbGltLmNvbmYnCiAgICBvciBkaWUgIkNhbid0IHJlbmFtZSAvZXRjL3NsaW0uY29uZi5uZXc6ICQhIjsKCmV4aXQgMDsK