IyAtKi1NYWtlZmlsZS0qLSB0byBidWlsZCBHTlUgbWFrZSBvbiBWTVMKIwojIENvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBNYWtlLgojCiMgR05VIE1ha2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKIyB2ZXJzaW9uLgojCiMgR05VIE1ha2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCiMgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKIyBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAojIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KCiMgVk1TIGV4dGVuc2lvbnMgZnJvbSBHTlUgTWFrZSAzLjYwIGltcG9ydGVkIGJ5CiMgIEtsYXVzIEvkbXBmIChra2FlbXBmQHJtaS5kZSkKIyBNb2RpZmllZCBmb3IgdmVyc2lvbiAzLjc4LjEgYnkgSGFydG11dC5CZWNrZXJAY29tcGFxLmNvbS4KIyBNb2RpZmllZCBmb3IgdmVyc2lvbiAzLjgwIGJ5IHppbnNlckBkZWN1cy5kZQojIE1vZGlmaWVkIGZvciB2ZXJzaW9uIDMuODEgYnkgSGFydG11dCBCZWNrZXIKCkNDID0gY2MKQ1AgPSBjb3B5CgolLm9iajogJS5jCgkkKENDKSAkKENGTEFHUykvb2JqPSRAICQ8CiMKIwlNYWtlZmlsZSBmb3IgR05VIE1ha2UKIwoKaWZlcSAoJChDQyksY2MpCkNGTEFHUyA9ICQoZGVmaW5lcykgL2luY2x1ZGU9KFtdLFsuZ2xvYl0pL3ByZWZpeD0oYWxsLGV4Y2VwdD0oZ2xvYixnbG9iZnJlZSkpL3N0YW5kYXJkPXJlbGF4ZWQvd2Fybj0oZGlzYWJsZT1xdWVzdGNvbXBhcmUpCmVsc2UKQ0ZMQUdTID0gJChkZWZpbmVzKSAvaW5jbHVkZT0oW10sWy5nbG9iXSkKZW5kaWYKI0xERkxBR1MgPSAvZGViCkxERkxBR1MgPQoKaWZlcSAoJChDQyksY2MpCmRlZmluZXMgPSAvZGVmaW5lPSgidW5saW5rPXJlbW92ZSIsIkhBVkVfQ09ORklHX0giLCJWTVMiLCJhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kX2Zvcl9maWxlPWFsbG9jX3Zhcl9leHBhbmRfZm9yX2ZpbGUiKQplbHNlCmlmZXEgKCQoQVJDSCksVkFYKQpkZWZpbmVzID0gL2RlZmluZT0oIkhBVkVfQ09ORklHX0giLCJHQ0NfSVNfTkFUSVZFIiwiVkFYIikKZWxzZQpkZWZpbmVzID0gL2RlZmluZT0oIkhBVkVfQ09ORklHX0giLCJHQ0NfSVNfTkFUSVZFIikKZW5kaWYKZW5kaWYKCkxPQURfQVZHID0gL2RlZmluZT0iTk9fTERBViIKCiMgSWYgeW91IGRvbid0IHdhbnQgYXJjaGl2ZSBzdXBwb3J0LCBjb21tZW50IHRoZXNlIG91dC4KQVJDSElWRVMgPSAsYXIub2JqLGFyc2Nhbi5vYmoKQVJDSElWRVNfU1JDID0gYXIuYyBhcnNjYW4uYwoKIyBJZiB5b3VyIHN5c3RlbSBuZWVkcyBleHRyYSBsaWJyYXJpZXMgbG9hZGVkIGluLCBkZWZpbmUgdGhlbSBoZXJlLgojIFN5c3RlbSBWIHByb2JhYmx5IG5lZWQgLWxQVyBmb3IgYWxsb2NhLgojIGlmIG9uIHZheCwgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZQojTE9BRExJQkVTID0gLGMub3B0L29wdAppZmVxICgkKENDKSxjYykKI0xPQURMSUJFUyA9LHN5cyQkbGlicmFyeTp2YXhjcnRsLm9sYi9saWIKQ1JUMCA9CmVsc2UKTE9BRExJQkVTID0sZ251X2NjX2xpYnJhcnk6bGliZ2NjLm9sYi9saWIKZW5kaWYKCiMgSWYgeW91ciBzeXN0ZW0gZG9lc24ndCBoYXZlIGFsbG9jYSwgb3IgdGhlIG9uZSBwcm92aWRlZCBpcyBiYWQsCiMgZ2V0IGl0IGZyb20gdGhlIEVtYWNzIGRpc3RyaWJ1dGlvbiBhbmQgZGVmaW5lIHRoZXNlLgojQUxMT0NBID0gLGFsbG9jYS5vYmoKI0FMTE9DQVNSQyA9IGFsbG9jYS5jCgojIElmIHRoZXJlIGFyZSByZW1vdGUgZXhlY3V0aW9uIGZhY2lsaXRpZXMgZGVmaW5lZCwKIyBlbmFibGUgdGhlbSB3aXRoIHN3aXRjaGVzIGhlcmUgKHNlZSByZW1vdGUtKi5jKS4KUkVNT1RFID0KCiMgQW55IGV4dHJhIG9iamVjdCBmaWxlcyB5b3VyIHN5c3RlbSBuZWVkcy4KZXh0cmFzID0gLHNpZ25hbWUub2JqLHJlbW90ZS1zdHViLm9iaix2bXNmdW5jdGlvbnMub2JqLHZtc2lmeS5vYmoKIyxkaXJlY3Rvcnkub2JqCiMgYXMgYW4gYWx0ZXJuYXRpdmU6Cmdsb2IgPSAsWy5nbG9iXWdsb2Iub2JqLFsuZ2xvYl1mbm1hdGNoLm9iagpnZXRvcHQgPSAsZ2V0b3B0Lm9iaixnZXRvcHQxLm9iagojIERpcmVjdG9yeSB0byBpbnN0YWxsICdtYWtlJyBpbi4KYmluZGlyID0gW10KIyBEaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgbWFuIHBhZ2UgaW4uCm1hbmRpciA9IFtdCiMgTnVtYmVyIHRvIHB1dCBvbiB0aGUgbWFuIHBhZ2UgZmlsZW5hbWUuCm1hbmV4dCA9IDEKCiNndWlsZSA9ICxndWlsZS5vYmoKCm9ianMgPSBjb21tYW5kcy5vYmosam9iLm9iaixkaXIub2JqLGZpbGUub2JqLG1pc2Mub2JqLGhhc2gub2JqLFwKICAgICAgIG1haW4ub2JqLHJlYWQub2JqLHJlbWFrZS5vYmoscnVsZS5vYmosaW1wbGljaXQub2JqLFwKICAgICAgIGRlZmF1bHQub2JqLHZhcmlhYmxlLm9iaixleHBhbmQub2JqLGZ1bmN0aW9uLm9iaixzdHJjYWNoZS5vYmosXAogICAgICAgdnBhdGgub2JqLHZlcnNpb24ub2JqXAogICAgICAgJChBUkNISVZFUykkKEFMTE9DQSkkKGV4dHJhcykkKGdldG9wdCkkKGdsb2IpJChndWlsZSkKCnNyY3MgPSBjb21tYW5kcy5jIGpvYi5jIGRpci5jIGZpbGUuYyBtaXNjLmMgZ3VpbGUuYyBoYXNoLmMgXAoJbWFpbi5jIHJlYWQuYyByZW1ha2UuYyBydWxlLmMgaW1wbGljaXQuYyBcCglkZWZhdWx0LmMgdmFyaWFibGUuYyBleHBhbmQuYyBmdW5jdGlvbi5jIHN0cmNhY2hlLmMgXAoJdnBhdGguYyB2ZXJzaW9uLmMgdm1zZnVuY3Rpb25zLmMgdm1zaWZ5LmMgJChBUkNISVZFU19TUkMpICQoQUxMT0NBU1JDKSBcCgljb21tYW5kcy5oIGRlcC5oIGZpbGVkZWYuaCBqb2IuaCBtYWtlLmggcnVsZS5oIHZhcmlhYmxlLmgKCgouUEhPTlk6IGFsbCBkb2MKYWxsOiBjb25maWcuaCBtYWtlLmV4ZQoKZG9jOiBtYWtlLmluZm8gbWFrZS5kdmkKCgptYWtlLmV4ZTogJChvYmpzKQoJJChMRCkkKExERkxBR1MpL2V4ZT0kQCAkXiQoTE9BRExJQkVTKSQoQ1JUMCkKCi5QSE9OWTogY2xlYW4gcmVhbGNsZWFuCmNsZWFuOgoJJCQgcHVyZ2UgWy4uLl0KCS0kKFJNKSBtYWtlLmV4ZTssKi5vYmo7CgktJChSTSkgWy5nbG9iXSoub2JqOwoKIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkZXBlbmRlbmNpZXMuCmNvbW1hbmRzLm9iajogY29tbWFuZHMuYyBtYWtlLmggZGVwLmggY29tbWFuZHMuaCBmaWxlZGVmLmggdmFyaWFibGUuaCBqb2IuaApqb2Iub2JqOiBqb2IuYyB2bXNqb2JzLmMgbWFrZS5oIGNvbW1hbmRzLmggam9iLmggZmlsZWRlZi5oIHZhcmlhYmxlLmgKZGlyLm9iajogZGlyLmMgbWFrZS5oCmZpbGUub2JqOiBmaWxlLmMgbWFrZS5oIGNvbW1hbmRzLmggZGVwLmggZmlsZWRlZi5oIHZhcmlhYmxlLmgKbWlzYy5vYmo6IG1pc2MuYyBtYWtlLmggZGVwLmgKaGFzaC5vYmo6IGhhc2guYyBtYWtlLmggaGFzaC5oCnN0cmNhY2hlLm9iajogc3RyY2FjaGUuYyBtYWtlLmggaGFzaC5oCm1haW4ub2JqOiBtYWluLmMgbWFrZS5oIGNvbW1hbmRzLmggZGVwLmggZmlsZWRlZi5oIHZhcmlhYmxlLmggam9iLmgKZ3VpbGUub2JqOiBndWlsZS5jIG1ha2UuaCBkZWJ1Zy5oIGRlcC5oIGdtay1kZWZhdWx0LmgKcmVhZC5vYmo6IHJlYWQuYyBtYWtlLmggY29tbWFuZHMuaCBkZXAuaCBmaWxlZGVmLmggdmFyaWFibGUuaApyZW1ha2Uub2JqOiByZW1ha2UuYyBtYWtlLmggY29tbWFuZHMuaCBqb2IuaCBkZXAuaCBmaWxlZGVmLmgKcnVsZS5vYmo6IHJ1bGUuYyBtYWtlLmggY29tbWFuZHMuaCBkZXAuaCBmaWxlZGVmLmggdmFyaWFibGUuaCBydWxlLmgKaW1wbGljaXQub2JqOiBpbXBsaWNpdC5jIG1ha2UuaCBydWxlLmggZGVwLmggZmlsZWRlZi5oCmRlZmF1bHQub2JqOiBkZWZhdWx0LmMgbWFrZS5oIHJ1bGUuaCBkZXAuaCBmaWxlZGVmLmggY29tbWFuZHMuaCB2YXJpYWJsZS5oCnZhcmlhYmxlLm9iajogdmFyaWFibGUuYyBtYWtlLmggY29tbWFuZHMuaCB2YXJpYWJsZS5oIGRlcC5oIGZpbGVkZWYuaApleHBhbmQub2JqOiBleHBhbmQuYyBtYWtlLmggY29tbWFuZHMuaCBmaWxlZGVmLmggdmFyaWFibGUuaApmdW5jdGlvbi5vYmo6IGZ1bmN0aW9uLmMgbWFrZS5oIHZhcmlhYmxlLmggZGVwLmggY29tbWFuZHMuaCBqb2IuaAp2cGF0aC5vYmo6IHZwYXRoLmMgbWFrZS5oIGZpbGVkZWYuaCB2YXJpYWJsZS5oCnZlcnNpb24ub2JqOiB2ZXJzaW9uLmMgY29uZmlnLmgKYXJzY2FuLm9iajogYXJzY2FuLmMKYXIub2JqOiBhci5jIG1ha2UuaCBmaWxlZGVmLmgKc2lnbmFtZS5vYmo6IHNpZ25hbWUuYwpyZW1vdGUtc3R1Yi5vYmo6IHJlbW90ZS1zdHViLmMKWy5nbG9iXWdsb2Iub2JqOiBbLmdsb2JdZ2xvYi5jClsuZ2xvYl1mbm1hdGNoLm9iajogWy5nbG9iXWZubWF0Y2guYwpnZXRvcHQub2JqOiBnZXRvcHQuYwpnZXRvcHQxLm9iajogZ2V0b3B0MS5jCnZtc2Z1bmN0aW9ucy5vYmo6IHZtc2Z1bmN0aW9ucy5jIG1ha2UuaCB2bXNkaXIuaAp2bXNpZnkub2JqOiB2bXNpZnkuYyBtYWtlLmgKCmNvbmZpZy5oOiBjb25maWcuaC12bXMKCSQoQ1ApICQ8ICRACg==