IyEvYmluL2Jhc2gKCmV4cG9ydCBDSEVDS0VSSE9NRT1gcHdkYApleHBvcnQgQ09ERUZJTEVTPSIke0NIRUNLRVJIT01FfS9DT0RFRklMRVMiCmV4cG9ydCBIRUFERVJGSUxFUz0iJHtDSEVDS0VSSE9NRX0vSEVBREVSRklMRVMiCiNleHBvcnQgTFBDRklMRVM9IiR7SEVBREVSRklMRVN9ICR7Q09ERUZJTEVTfSIKZXhwb3J0IExQQ0ZJTEVTPSIke0NIRUNLRVJIT01FfS9MUENGSUxFUyIKZXhwb3J0IE1VRExJQj0iL2hvbWUvbXVkL211ZGxpYiIKZXhwb3J0IExPR1M9IiR7Q0hFQ0tFUkhPTUV9L2xvZ3MiCgpMRVZFTDE9ImNoYW5nZV9yZXF1aXJlZCIKTEVWRUwyPSJmb3JtYXR0aW5nIgpMRVZFTDU9InBsZWFzZV9jaGVjayIKTEVWRUwxMD0iY29zbWV0aWNzIgoKZWNobyAtbmUgIkxQQy1Tb3VyY2UgQ2hlY2tlciBWMC4zICgyMDA4LTAxLTA5KVxuXG4iCgp1c2FnZSgpIHsKICAgIGVjaG8gLW5lICJ1c2FnZTogLi9jaGVjayA8cmVnaW9uPiA8bG9nZmlsZT5cbiIKICAgIGV4aXQKfQoKIyBQYXJhbWV0ZXIgcHJ1ZWZlbiwgYW5zb25zdGVuIHVzYWdlIGF1c2dlYmVuCmlmIFsgLXogJHsxfSBdIHx8IFsgLXogJHsyfSBdCnRoZW4KCXVzYWdlCmZpCgojIGd1Y2tlbiBvYiBkYXMgTG9ndmVyemVpY2huaXMgZGEgaXN0LCB3ZW5uIG5laW4sIGRhbm4gYW5sZWdlbgppZiBbICEgLWQgJHtMT0dTfSBdCnRoZW4KCW1rZGlyIC1wICR7TE9HU30KZmkKCiMgcnVkaW1lbnRhZXJlciBjaGVjayBvYiBkaWUgTXVkbGliIGRhIGxpZWd0LCB3byAke01VRExJQn0gaGluemVpZ3QKaWYgWyAhIC1kICR7TVVETElCfSBdCnRoZW4KCWVjaG8gLW5lICJObyBtdWRsaWIgZm91bmQgaW4gJHtNVURMSUJ9XG4iCglleGl0CmZpCgojIGFsdGVuIEtyYW0gZW50c29yZ2VuCmlmIFsgLWYgJHtDT0RFRklMRVN9IF0KdGhlbgoJcm0gJHtDT0RFRklMRVN9CmZpCgppZiBbIC1mICR7SEVBREVSRklMRVN9IF0KdGhlbgoJcm0gJHtIRUFERVJGSUxFU30KZmkKCmlmIFsgLWYgJHtMUENGSUxFU30gXQp0aGVuCglybSAke0xQQ0ZJTEVTfQpmaQoKZWNobyAtbmUgIkNoZWNraW5nIHRoZSBNb3JnZW5HcmF1ZW4gTXVkbGliIGluICR7TVVETElCfVxuIgplY2hvIC1uZSAiQ2hlY2tpbmcgaW4gJHsxfSAoJHtNVURMSUJ9JHsxfSlcbiIKCmNkICR7TVVETElCfQoKIyBEYXRlaWxpc3RlIGVyc3RlbGxlbgplY2hvIC1uZSAiQ3JlYXRpbmcgZmlsZSBsaXN0Li4uXG4iCgpmaW5kIC4vJHsxfSAtdHlwZSBmIC1uYW1lICIqLmMiIC1wcmludCA+ICR7Q09ERUZJTEVTfQpmaW5kIC4vJHsxfSAtdHlwZSBmIC1uYW1lICIqLmgiIC1wcmludCA+ICR7SEVBREVSRklMRVN9CgojIGlyZ2VuZHdpZSB1bnNjaG9lbgpjYXQgJHtDT0RFRklMRVN9ICR7SEVBREVSRklMRVN9ID4gJHtMUENGSUxFU30KCiMgZWlnZW50bGljaCBoYWV0dGUgbWFuIGRhcyBhbGxlcyBpbiBlaW5lbSBhYmZhY2tlbG4ga29lbm5lbiwgYWJlciBkYW5uIGdhZWJlCiMgZXMga2VpbmUgVWViZXJzY2hyaWZ0ZW4gdWViZXIgZGVuIGVpbnplbG5lbiBQdW5rdGVuCgojIExFVkVMIDEgQ0hFQ0tTIChjaGFuZ2UgcmVxdWlyZWQpCgojIFVtbGF1dGUKZWNobyAtbmUgIlxuXG5QcnVlZmUgYXVmIFVtbGF1dGUuLi5cbiIgfCB0ZWUgLWEgJHtMT0dTfS8kezJ9LiR7TEVWRUwxfQp3aGlsZSByZWFkIGxpbmUKZG8KCWdyZXAgLUhuICdb/Pbk3NbE310nICRsaW5lIHwgY3V0IC1kIDogLWYgMS0yID4+ICR7TE9HU30vJHsyfS4ke0xFVkVMMX0KZG9uZSA8ICR7TFBDRklMRVN9CgojIGxhbWJkYSgpCmVjaG8gLW5lICJcblxuUHJ1ZWZlIGF1ZiBsYW1iZGEoKS4uLlxuIiB8IHRlZSAtYSAke0xPR1N9LyR7Mn0uJHtMRVZFTDF9CndoaWxlIHJlYWQgbGluZQpkbwoJZ3JlcCAtSG4gJ2xhbWJkYSgnICRsaW5lfCBjdXQgLWQgOiAtZiAxLTIgPj4gJHtMT0dTfS8kezJ9LiR7TEVWRUwxfQpkb25lIDwgJHtMUENGSUxFU30KCiMgUGZhZGUgaW4gL3BsYXllcnMvCmVjaG8gLW5lICJcblxuUHJ1ZWZlIGF1ZiBQZmFkZSBpbiAvcGxheWVycy8uLi5cbiIgfCB0ZWUgLWEgJHtMT0dTfS8kezJ9LiR7TEVWRUwxfSAKd2hpbGUgcmVhZCBsaW5lCmRvCglncmVwIC1IbiAnL3BsYXllcnMvJyAkbGluZXwgY3V0IC1kIDogLWYgMS0yID4+ICR7TE9HU30vJHsyfS4ke0xFVkVMMX0gCmRvbmUgPCAke0xQQ0ZJTEVTfQoKIyBmZWhsZW5kZSAjcHJhZ21hIHN0cm9uZ190eXBlcy9zdHJpY3RfdHlwZXMKZWNobyAtbmUgIlxuXG5GaWxlcyBvaG5lICNwcmFnbWEgc3Ryb25nX3R5cGVzIG9kZXIgc3RyaWN0X3R5cGVzLi4uXG4iIHwgdGVlIC1hICR7TE9HU30vJHsyfS4ke0xFVkVMMX0gCndoaWxlIHJlYWQgbGluZQpkbwoJZ3JlcCAtTCAnI3ByYWdtYS5cKHN0cm9uZ1x8c3RyaWN0XClfdHlwZXMnICRsaW5lIHwgc29ydCBcCgkJPj4gJHtMT0dTfS8kezJ9LiR7TEVWRUwxfSAKZG9uZSA8ICR7Q09ERUZJTEVTfQoKIyBkaXJla3RlIFZlcndlbmR1bmcgdm9uIGRvX2RhbWFnZSgpCmVjaG8gLW5lICJcblxuUHJ1ZWZlIGF1ZiBkaXJla3RlIFZlcndlbmR1bmcgdm9uIGRvX2RhbWFnZSgpLi4uXG4iIHxcCgkgICAgIHRlZSAtYSAke0xPR1N9LyR7Mn0uJHtMRVZFTDF9CndoaWxlIHJlYWQgbGluZQpkbwoJZ3JlcCAtSG4gJ2RvX2RhbWFnZSgnICRsaW5lIHwgY3V0IC1kIDogLWYgMS0yID4+ICR7TE9HU30vJHsyfS4ke0xFVkVMMX0KZG9uZSA8ICR7TFBDRklMRVN9CgojIFVuZXJ3dWVuc2NodGUgb2RlciBvYnNvbGV0ZSBsZnVucwplY2hvIC1uZSAiXG5cblBydWVmZSBhdWYgdW5lcnd1ZW5zY2h0ZSBvZGVyIG9ic29sZXRlIGxmdW5zLi4uXG4iIHxcCgl0ZWUgLWEgJHtMT0dTfS8kezJ9LiR7TEVWRUwxfQp3aGlsZSByZWFkIGxpbmUKZG8KCWdyZXAgLUhuIC1mICR7Q0hFQ0tFUkhPTUV9L2JhZF9sZnVuLmxpc3QgJGxpbmUgPj4gJHtMT0dTfS8kezJ9LiR7TEVWRUwxfQpkb25lIDwgJHtMUENGSUxFU30KCiMgVW5lcnd1ZW5zY2h0ZSBvZGVyIG9ic29sZXRlIGVmdW5zCmVjaG8gLW5lICJcblxuUHJ1ZWZlIGF1ZiB1bmVyd3VlbnNjaHRlIG9kZXIgb2Jzb2xldGUgZWZ1bnMuLi5cbiIgfFwKCXRlZSAtYSAke0xPR1N9LyR7Mn0uJHtMRVZFTDF9CndoaWxlIHJlYWQgbGluZQpkbwoJZ3JlcCAtSG4gLWYgJHtDSEVDS0VSSE9NRX0vYmFkX2VmdW4ubGlzdCAkbGluZSA+PiAke0xPR1N9LyR7Mn0uJHtMRVZFTDF9CmRvbmUgPCAke0xQQ0ZJTEVTfQoKIyBVbmVyd3VlbnNjaHRlIG9kZXIgb2Jzb2xldGUgUHJvcGVydGllcwplY2hvIC1uZSAiXG5cblBydWVmZSBhdWYgdW5lcnd1ZW5zY2h0ZSBvZGVyIG9ic29sZXRlIFByb3BlcnRpZXMuLi5cbiIgfFwKCXRlZSAtYSAke0xPR1N9LyR7Mn0uJHtMRVZFTDF9CndoaWxlIHJlYWQgbGluZQpkbwoJZ3JlcCAtSG4gLWYgJHtDSEVDS0VSSE9NRX0vYmFkX3Byb3AubGlzdCAkbGluZSA+PiAke0xPR1N9LyR7Mn0uJHtMRVZFTDF9CmRvbmUgPCAke0xQQ0ZJTEVTfQoKIyBVbmVyd3VlbnNjaHRlIEV2ZW50cwplY2hvIC1uZSAiXG5cblBydWVmZSBhdWYgdW5lcnd1ZW5zY2h0ZSBFdmVudG5hbWVuLi4uXG4iIHwgdGVlIC1hICR7TE9HU30vJHsyfS4ke0xFVkVMMX0Kd2hpbGUgcmVhZCBsaW5lCmRvCglncmVwIC1IbiAtZiAke0NIRUNLRVJIT01FfS9iYWRfZXZlbnRzLmxpc3QgJGxpbmUgPj4gJHtMT0dTfS8kezJ9LiR7TEVWRUwxfQpkb25lIDwgJHtMUENGSUxFU30KCiMgS2VpbmUgY2xvbmVzIHZvbiAvc3RkL3RoaW5nCmVjaG8gLW5lICJcblxuUHJ1ZWZlIGF1ZiBDbG9uZXMgdm9uIC9zdGQvdGhpbmcuLi5cbiIgfFwKCSAgICAgdGVlIC1hICR7TE9HU30vJHsyfS4ke0xFVkVMMX0Kd2hpbGUgcmVhZCBsaW5lCmRvCglncmVwIC1IbiAnY2xvbmVfb2JqZWN0KC4qL3N0ZC90aGluZy4qKScgJGxpbmUgfCBjdXQgLWQgOiAtZiAxLTIgXAoJICAgICA+PiAke0xPR1N9LyR7Mn0uJHtMRVZFTDF9CmRvbmUgPCAke0xQQ0ZJTEVTfQoKIyB1ZWJlcnNjaHJpZWJlbmVzIG1vdmUoKQplY2hvIC1uZSAiXG5cblBydWVmZSBhdWYgdWViZXJzY2hyaWViZW5lcyBtb3ZlKCkgKGRlcHJlY2F0ZWQpLi4uXG4iIHxcCgkgICAgdGVlIC1hICR7TE9HU30vJHsyfS4ke0xFVkVMMX0Kd2hpbGUgcmVhZCBsaW5lCmRvCglncmVwIC1IbiAnaW50Liptb3ZlKC4qbWl4ZWQuKmludC4qKScgJGxpbmUgfCBjdXQgLWQgOiAtZiAxLTIgXAoJICAgICA+PiAke0xPR1N9LyR7Mn0uJHtMRVZFTDF9CmRvbmUgPCAke0xQQ0ZJTEVTfQoKIyB3aXJkIGdlZXJidGVzIFByZXZlbnRNb3ZlIGdlcnVmZW4/CmVjaG8gLW5lICJcblxuVWViZXJzY2hyaWViZW5lcyBQcmV2ZW50TW92ZSgpIG9obmUgZ2VlcmJldGVzIHp1IHJ1ZmVuLi4uXG4iIHxcCgkgICAgIHRlZSAtYSAke0xPR1N9LyR7Mn0uJHtMRVZFTDF9CndoaWxlIHJlYWQgbGluZQpkbwoJZ3JlcCAnUHJldmVudCguKm9iamVjdC4qb2JqZWN0LippbnQpJyAkbGluZSA+ICR7Q0hFQ0tFUkhPTUV9L2NoZWNrLnRtcAoJZ3JlcCAtTCAnOjpQcmV2ZW50TW92ZSgnICRsaW5lID4gJHtDSEVDS0VSSE9NRX0vY2hlY2sudG1wMgpkb25lICA8ICR7TFBDRklMRVN9CiMgbnVyIFplaWxlbiBhdXNnZWJlbiwgZGllIG5pY2h0IGltIDIuIEZpbGUgdm9ya29tbWVuCmdyZXAgLXYgLWYgJHtDSEVDS0VSSE9NRX0vY2hlY2sudG1wMiAke0NIRUNLRVJIT01FfS9jaGVjay50bXAgfCBcCgl0ZWUgLWEgJHtMT0dTfS8kezJ9LiR7TEVWRUwxfQpybSAke0NIRUNLRVJIT01FfS9jaGVjay50bXAqCgplY2hvIC1uZSAiXG5cblVlYmVyc2NocmllYmVuZXMgTm90aWZ5TW92ZSgpIG9obmUgZ2VlcmJldGVzIHp1IHJ1ZmVuLi4uXG4iIHxcCgkgICAgIHRlZSAtYSAke0xPR1N9LyR7Mn0uJHtMRVZFTDF9CndoaWxlIHJlYWQgbGluZQpkbwoJZ3JlcCAnTm90Zml5TW92ZSguKm9iamVjdC4qb2JqZWN0LippbnQpJyAkbGluZSA+ICR7Q0hFQ0tFUkhPTUV9L2NoZWNrLnRtcAoJZ3JlcCAtTCAnOjpOb3RpZnlNb3ZlKCcgJGxpbmUgPiAke0NIRUNLRVJIT01FfS9jaGVjay50bXAyCmRvbmUgPCAke0xQQ0ZJTEVTfQpncmVwIC12IC1mICR7Q0hFQ0tFUkhPTUV9L2NoZWNrLnRtcDIgJHtDSEVDS0VSSE9NRX0vY2hlY2sudG1wIFwKCT4+ICR7TE9HU30vJHsyfS4ke0xFVkVMMX0Kcm0gJHtDSEVDS0VSSE9NRX0vY2hlY2sudG1wKgoKIyBjYWxsX290aGVyKHgsICI/Pz8iKSBpc3Qgb2Jzb2xldAplY2hvIC1uZSAiXG5cblBydWVmZSBhdWYgY2FsbF9vdGhlcih4LCAiPz8/IikgKG9ic29sZXQpLi4uXG4iIHxcCgl0ZWUgLWEgJHtMT0dTfS8kezJ9LiR7TEVWRUwxfQp3aGlsZSByZWFkIGxpbmUKZG8KCWdyZXAgLUhuICdjYWxsX290aGVyKC4qPz8/LiopJyAkbGluZSB8IGN1dCAtZCA6IC1mIDEtMiBcCgk+PiAke0xPR1N9LyR7Mn0uJHtMRVZFTDF9CmRvbmUgPCAke0xQQ0ZJTEVTfQoKIyBBbHRlIFN5bnRheCBkZXIgSW5saW5lLUNsb3N1cmVzCmVjaG8gLW5lICJcblxuUHJ1ZWZlIGF1ZiBvYnNvbGV0ZSBJbmxpbmUtQ2xvc3VyZXMgKCAoOiA6KSApLi4uXG4iIHwgXAoJICAgICB0ZWUgLWEgJHtMT0dTfS8kezJ9LiR7TEVWRUwxfQp3aGlsZSByZWFkIGxpbmUKZG8KCWdyZXAgLUhuICcoOiAnICRsaW5lIHwgY3V0IC1kIDogLWYgMS0yIFwKCQkJPj4gJHtMT0dTfS8kezJ9LiR7TEVWRUwxfQpkb25lIDwgJHtMUENGSUxFU30KCiMgTEVWRUwgMiBDSEVDS1MKIyBUYWJ1bGF0b3JlbgplY2hvIC1uZSAiXG5cblBydWVmZSBhdWYgVGFidWxhdG9yZW4uLi5cbiIgfCB0ZWUgLWEgJHtMT0dTfS8kezJ9LiR7TEVWRUwyfQp3aGlsZSByZWFkIGxpbmUKZG8KCWdyZXAgLUhuICQnXHQnICRsaW5lIHwgY3V0IC1kIDogLWYgMS0yID4+ICR7TE9HU30vJHsyfS4ke0xFVkVMMn0KZG9uZSA8ICR7TFBDRklMRVN9CgojIFplaWxlbiA+IDc4IFplaWNoZW4KZWNobyAtbmUgIlxuXG5QcnVlZmUgYXVmIFplaWxlbiA+IDc4IFplaWNoZW4uLi5cbiIgfCB0ZWUgLWEgJHtMT0dTfS8kezJ9LiR7TEVWRUwyfQp3aGlsZSByZWFkIGxpbmUKZG8KCWdyZXAgLUhuICcuXHs3OSxcfScgJGxpbmV8IGN1dCAtZCA6IC1mIDEtMiA+PiAke0xPR1N9LyR7Mn0uJHtMRVZFTDJ9CmRvbmUgPCAke0xQQ0ZJTEVTfQoKIyBMRVZFTCA1IENIRUNLUwojIEhlYWRlciBtaXQgI3ByYWdtYXMKZWNobyAtbmUgIlxuXG5IZWFkZXIgKCouaCkgbWl0ICNwcmFnbWFzLi4uXG4iIHwgdGVlIC1hICR7TE9HU30vJHsyfS4ke0xFVkVMNX0Kd2hpbGUgcmVhZCBsaW5lCmRvCglncmVwIC1sICcjcHJhZ21hJyAkbGluZSA+PiAke0xPR1N9LyR7Mn0uJHtMRVZFTDV9CmRvbmUgPCAke0hFQURFUkZJTEVTfQoKIyBlZnVucywgVmVyd2VuZHVuZyBiZWFjaHRlbgplY2hvIC1uZSAiXG5cblBydWVmZSBhdWYgZWZ1bnMsIGRlcmVuIFZlcndlbmR1bmcgYmVvYmFjaHRldCB3ZXJkZW4gc29sbHRlLi4uXG4iIHxcCgkgICAgdGVlIC1hICR7TE9HU30vJHsyfS4ke0xFVkVMNX0Kd2hpbGUgcmVhZCBsaW5lCmRvCglncmVwIC1IbiAtZiAke0NIRUNLRVJIT01FfS93YXJuX2VmdW4ubGlzdCAkbGluZSBcCgk+PiAke0xPR1N9LyR7Mn0uJHtMRVZFTDV9CmRvbmUgPCAke0xQQ0ZJTEVTfQoKIyBQcm9wZXJ0aWVzLCBWZXJ3ZW5kdW5nIGJlYWNodGVuCmVjaG8gLW5lICJcblxuUHJ1ZWZlIGF1ZiBQcm9wZXJ0aWVzLCBkZXJlbiBWZXJ3ZW5kdW5nIGJlb2JhY2h0ZXQgd2VyZGVuCnNvbGx0ZS4uLlxuIiB8IHRlZSAtYSAke0xPR1N9LyR7Mn0uJHtMRVZFTDV9CndoaWxlIHJlYWQgbGluZQpkbwoJZ3JlcCAtSG4gLWYgJHtDSEVDS0VSSE9NRX0vd2Fybl9wcm9wLmxpc3QgJGxpbmUgXAoJPj4gJHtMT0dTfS8kezJ9LiR7TEVWRUw1fQpkb25lIDwgJHtMUENGSUxFU30KCQojIFBydWVmdW5nIGF1ZiBzdGF0aWMgLT4gcHJvdGVjdGVkCmVjaG8gLW5lICJcblxuUHJ1ZWZlIGF1ZiAnc3RhdGljJyAoLT4gJ3Byb3RlY3RlZCcpLi4uXG4iIHxcCgkgICAgdGVlIC1hICR7TE9HU30vJHsyfS4ke0xFVkVMNX0Kd2hpbGUgcmVhZCBsaW5lCmRvCglncmVwIC1IbiAnc3RhdGljJyAkbGluZSA+PiAke0xPR1N9LyR7Mn0uJHtMRVZFTDV9CmRvbmUgPCAke0xQQ0ZJTEVTfQoKCiMgTEVWRUwgMTAgQ0hFQ0tTCiMgQWx0ZSBSZWNodHNjaHJlaWJ1bmcgcnVsZXMKZWNobyAtbmUgIlxuXG5LbGVpbmdlc2NocmllYmVuZXMgRHUvRGlyL0RpY2guLi5cbiIgfFwKCXRlZSAtYSAke0xPR1N9LyR7Mn0uJHtMRVZFTDEwfQp3aGlsZSByZWFkIGxpbmUKZG8KCWdyZXAgLUhuICcgXChkdVx8ZGljaFx8ZGlyXCkgJyAkbGluZSB8IGN1dCAtZCA6IC1mIDEtMiB8IHNvcnQgfCBcCgl1bmlxID4+ICR7TE9HU30vJHsyfS4ke0xFVkVMMTB9CmRvbmUgPCAke0xQQ0ZJTEVTfQoKIyBQZmFkbmFtZW4gYmVyZWluaWdlbgpzZWQgLWkgLWUgJ3MjLi8vIy8jZycgJHtMT0dTfS8kezJ9LioKCmVjaG8gLW5lICJcbkNoZWNrIGZpbmlzaGVkIVxuIgo=