IyEvdXNyL2Jpbi9wZXJsCiMjIyBTaW11bGF0ZSBhbiBhcnJheSBqb2IgLS0gd29yayBob3JzZSBzY3JpcHQKIyMjICRJZDogYXJyYXlydW5fd29ya2VyLHYgMS4zMCAyMDExLzA0LzI3IDA4OjU4OjI1IHJvb3QgRXhwICQKCiMjIyBDb3B5cmlnaHQgMjAwOSwyMDEwLDIwMTEgQmr4cm4tSGVsZ2UgTWV2aWsgPGIuaC5tZXZpa0B1c2l0LnVpby5ubz4KIyMjCiMjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKIyMjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgojIyMKIyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyMjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBmb3IgbW9yZSBkZXRhaWxzLgojIyMKIyMjIEEgY29weSBvZiB0aGUgR1BMIHYuIDIgdGV4dCBpcyBhdmFpbGFibGUgaGVyZToKIyMjIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKCgojIyMgTm90ZTogVGhpcyBzY3JpcHQgaXMgbWVhbnQgdG8gYmUgcnVuIGJ5ICdhcnJheXJ1bic7IGRvIG5vdAojIyMgcnVuIHRoaXMgc2NyaXB0IGRpcmVjdGx5LgoKdXNlIHN0cmljdDsKdXNlIExpc3Q6OlV0aWwgcXcvbWluLzsKdXNlIFRpbWU6OkhpUmVzIHF3L3NsZWVwLzsKCiMjIERlYnVnOgp1c2Ugd2FybmluZ3M7CnVzZSBjb25zdGFudCBERUJVRyA9PiAxOwokfCA9IDEgaWYgREVCVUc7CgojIyBDb25maWd1cmF0aW9uOgpteSAkbWF4Sm9icyA9IDEwMDsJCSMgTWF4IHRvdGFsIG51bWJlciBvZiBqb2JzIGluIHF1ZXVlCm15ICRtYXhJZGxlSm9icyA9IDEwOwkJIyBNYXggbnVtYmVyIG9mIHBlbmRpbmcgam9icyBpbiBxdWV1ZQpteSAkbWF4QnVyc3QgPSAxMDsJCSMgTWF4IG51bWJlciBvZiBqb2JzIHRvIHN1Ym1pdCBhdCBhIHRpbWUKbXkgJHBvbGxTZWNvbmRzID0gMTgwOwkJIyBIb3cgbWFueSBzZWNvbmRzIHRvIHNsZWVwIGJldHdlZW4gZWFjaCBwb2xsCm15ICRtYXhGYWlscyA9IDMwMDsJCSMgTWF4IGVycm9ycyB0byBhY2NlcHQgd2hlbiBzdWJtaXR0aW5nIGEgam9iCm15ICRyZXRyeVNsZWVwID0gMzAwOwkJIyBTZWNvbmRzIHRvIHNsZWVwIGJldHdlZW4gZWFjaCByZXRyeQpteSAkZG91YmxlQ2hlY2tTbGVlcCA9IDMwOwkjIFNlY29uZHMgdG8gc2xlZXAgYmVmb3JlIGRvdWJsZSBjaGVja2luZwpteSAkbWF4UmVzdGFydHMgPSAxMDsJCSMgTWF4IG51bWJlciBvZiByZXN0YXJ0cyBhbGwgaW4gYWxsCm15ICRzYmF0Y2ggPSAiL3NpdGUvYmluL3NiYXRjaCI7IyBXaGljaCBzYmF0Y2ggY29tbWFuZCB0byB1c2UKCiMjIFBhcnNlIGNvbW1hbmQgbGluZQpteSAkcmVzdGFydCA9IDA7CmlmIChAQVJHViAmJiAkQVJHVlswXSBlcSAnLXInKSB7CiAgICAkcmVzdGFydCA9IDE7CiAgICBzaGlmdCBAQVJHVjsKfQpteSAkam9iU3BlYyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSAiVG9vIGZldyBhcmd1bWVudHNcbiI7Cm15IEBjb21tYW5kTGluZSA9IEBBUkdWIG9yIGRpZSAiVG9vIGZldyBhcmd1bWVudHNcbiI7Cm15IEBqb2JBcnJheTsKZm9yZWFjaCAoc3BsaXQgLywvLCAkam9iU3BlYykgewogICAgaWYgKC9eKFxkKykkLykgewoJcHVzaCBAam9iQXJyYXksICQxOwogICAgfSBlbHNpZiAoL14oXGQrKVstOl0oXGQrKSQvKSB7CglwdXNoIEBqb2JBcnJheSwgJDEgLi4gJDI7CiAgICB9IGVsc2lmICgvXihcZCspWy06XShcZCspOihcZCspJC8pIHsKCWZvciAobXkgJGkgPSAkMTsgJGkgPD0gJDI7ICRpICs9ICQzKSB7CgkgICAgcHVzaCBAam9iQXJyYXksICRpOwoJfQogICAgfSBlbHNlIHsKCWRpZSAiVW5rbm93biBUQVNLX0lEIHNwZWNpZmljYXRpb246ICckXydcbiI7CiAgICB9Cn0KZGllICJObyBUQVNLX0lEcyBzcGVjaWZpZWRcbiIgdW5sZXNzIChAam9iQXJyYXkpOwoKcHJpbnQgIlRBU0tfSURzIHRvIHN1Ym1pdDogIiwgam9pbigiLCIsIEBqb2JBcnJheSksICIKQ29tbWFuZCBsaW5lOiBAY29tbWFuZExpbmVcbiIgaWYgREVCVUc7CnByaW50ICJXaWxsIHJlc3RhcnQgZmFpbGVkIGpvYnNcbiIgaWYgREVCVUcgJiYgJHJlc3RhcnQ7CgojIyBTZXR1cApteSAkbWFpbmlkID0gJEVOVnsnU0xVUk1fSk9CX0lEJ30gfHwgJEVOVnsnU0xVUk1fSk9CSUQnfSB8fCAnbnVsbCc7Cm15ICRydW5pZHMgPSBbXTsJCSMgTGlzdCBvZiBJRHMgb2YgcnVubmluZyBqb2JzCm15ICRwZW5kaWRzID0gW107CQkjIExpc3Qgb2YgSURzIG9mIHBlbmRpbmcgam9icwpteSAkdGVzdGlkcyA9IFtdOwkJIyBMaXN0IG9mIElEcyB0byB0ZXN0Cm15ICV0YXNraWQ7CQkJIyBUQVNLX0lEIGZvciBhbGwgc3VibWl0dGVkIGpvYnMKbXkgQHJlc3RhcnRlZFRhc2tzOwkJIyBUQVNLX0lEIG9mIGFsbCByZXN0YXJ0ZWQgam9icwpteSBAdG1wID0gKGxvY2FsdGltZSgpKVs1LDQsM107Cm15ICRzdGFydHRpbWUgPSBzcHJpbnRmICIlZC0lMDJkLSUwMmQiLCAkdG1wWzBdICsgMTkwMCwgJHRtcFsxXSArIDEsICR0bXBbMl07CgpwcmludCAiTWFpbiBqb2IgaWQ6ICRtYWluaWRcblN0YXJ0IHRpbWU6ICRzdGFydHRpbWVcbiIgaWYgREVCVUc7CgojIyBUcmFwIHNpZ25hbHMgc3VjaCB0aGF0IGFueSBydW5uaW5nIHN1YiBqb2JzIGFyZSBjYW5jZWxsZWQgaWYgdGhlCiMjIG1haW4gam9iIGlzIGNhbmNlbGxlZCBvciB0aW1lcyBvdXQuCnN1YiBjbGVhbl91cCB7CiAgICBwcmludCAiQ2F1Z2h0IHNpZ25hbC4gIENsZWFuaW5nIHVwLi4uXG4iIGlmIERFQlVHOwogICAgIyMgQ2FuY2VsIGFueSBzdWJqb2JzOgogICAgaWYgKEB7JHJ1bmlkc30gfHwgQHskcGVuZGlkc30gfHwgQHskdGVzdGlkc30pIHsKCXByaW50ICJDYW5jZWxsaW5nIEB7JHJ1bmlkc30gQHskcGVuZGlkc30gQHskdGVzdGlkc31cbiIgaWYgREVCVUc7CglzeXN0ZW0oImVjaG8gc2NhbmNlbCBAeyRydW5pZHN9IEB7JHBlbmRpZHN9IEB7JHRlc3RpZHN9Iik7CglzeXN0ZW0oInNjYW5jZWwgQHskcnVuaWRzfSBAeyRwZW5kaWRzfSBAeyR0ZXN0aWRzfSIpOwoJcHJpbnQgIkNhbmNlbGxlZCBAeyRydW5pZHN9IEB7JHBlbmRpZHN9IEB7JHRlc3RpZHN9XG4iIGlmIERFQlVHOwogICAgfQogICAgZXhpdCAwOwp9CiRTSUd7J1RFUk0nfSA9ICdjbGVhbl91cCc7CSMgc2NhbmNlbC90aW1lb3V0CiRTSUd7J0lOVCd9ID0gJ2NsZWFuX3VwJzsJIyBeQyBpbiBpbnRlcmFjdGl2ZSB1c2UKCgojIyBTdWJtaXQgYSBqb2Igd2l0aCBmYWlsIHJlc2lsaWVuY2U6CnN1YiBzdWJtaXRfam9iIHsKICAgIG15ICRqb2JOYW1lID0gc2hpZnQ7CiAgICAobXkgJGNvbW1hbmRMaW5lID0gc2hpZnQpIHx8IGRpZSAiSm9iIHNjcmlwdCBub3Qgc3BlY2lmaWVkXG4iOwogICAgbXkgJGlkOwogICAgbXkgJG5GYWlscyA9IDA7CiAgICBteSAkc3VjY2VzcyA9IDA7CiAgICB1bnRpbCAoJHN1Y2Nlc3MpIHsKCW15ICRmYWlsID0gMDsKCSRpZCA9IGAkc2JhdGNoIC0tam9iLW5hbWU9JGpvYk5hbWUgJGNvbW1hbmRMaW5lIDI+JjFgOwoJaWYgKCQ/ID09IDApIHsKCSAgICBjaG9tcCgkaWQpOwoJICAgIHByaW50ICIgIFJlc3VsdCBmcm9tIHN1Ym1pdDogJGlkIiBpZiBERUJVRzsKCSAgICBpZiAoJGlkID1+IHMvLipTdWJtaXR0ZWQgYmF0Y2ggam9iIC8vKSB7CgkJJHN1Y2Nlc3MgPSAxOwoJICAgIH0KCX0gZWxzZSB7CgkgICAgd2FybiAiICBzYmF0Y2ggZmFpbGVkIHdpdGggZXJyb3IgY29kZSAnJD8nIChvdXRwdXQ6ICciLAoJICAgICAgICAkaWQgfHwgJycsICInKTogJCFcbiI7CgkgICAgJG5GYWlscysrOwoJfQoJdW50aWwgKCRzdWNjZXNzIHx8ICRmYWlsIHx8ICRuRmFpbHMgPiAkbWF4RmFpbHMpIHsKCSAgICAjIyBEb3VibGUgY2hlY2sgdGhhdCB0aGUgam9iIGRpZCBub3Qgc3RhcnQKCSAgICB3YXJuICIgIFByb2JsZW0gd2l0aCBzdWJtaXR0aW5nL2NoZWNraW5nIGpvYi4gIENoZWNraW5nIHdpdGggc3F1ZXVlIGluIGEgd2hpbGUuXG4iOwoJICAgIHNsZWVwICRkb3VibGVDaGVja1NsZWVwIC0gNSArIGludChyYW5kKDExKSk7CgkgICAgJGlkID0gYHNxdWV1ZSAtaCAtbyAnJWkgJWonIC11ICRFTlZ7VVNFUn1gOwoJICAgIGlmICgkPyA9PSAwKSB7CgkJY2hvbXAoJGlkKTsKCQlwcmludCAiICBSZXN1bHQgZnJvbSBzcXVldWU6ICRpZCIgaWYgREVCVUc7CgkJaWYgKCRpZCA9fiBzLyAkam9iTmFtZS8vKSB7CgkJICAgIHdhcm4gIkpvYiAnJGpvYk5hbWUnIHNlZW1zIHRvIGhhdmUgYmVlbiBzdGFydGVkIGFzIGpvYmlkICckaWQnLiAgVXNpbmcgdGhhdCBpZC5cbiI7CgkJICAgICRzdWNjZXNzID0gMTsKCQl9IGVsc2UgewoJCSAgICB3YXJuICJKb2IgJyRqb2JOYW1lJyBkaWQgbm90IHN0YXJ0LlxuIjsKCQkgICAgJGZhaWwgPSAxOwoJCX0KCSAgICB9IGVsc2UgewoJCSRuRmFpbHMrKzsKCSAgICB9Cgl9Cgl1bmxlc3MgKCRzdWNjZXNzKSB7CgkgICAgaWYgKCRuRmFpbHMgPD0gJG1heEZhaWxzKSB7CgkJd2FybiAiICBDb3VsZCBub3Qgc3VibWl0IGpvYi4gIFRyeWluZyBhZ2FpbiBpbiBhIHdoaWxlLlxuIjsKCQlzbGVlcCAkcmV0cnlTbGVlcCAtIDUgKyBpbnQocmFuZCgxMSkpOwoJICAgIH0gZWxzZSB7CgkJZGllICIgIENhbm5vdCBzdWJtaXQgam9iLiAgR2l2aW5nIHVwIGFmdGVyICRuRmFpbHMgZXJyb3JzLlxuIjsKCSAgICB9Cgl9CiAgICB9CiAgICBwcmludCAiID0+IGpvYiBJRCAkaWRcbiIgaWYgREVCVUc7CiAgICAkaWQ7Cn0KCgojIyBDaGVjayB0aGUgZ2l2ZW4gam9icywgYW5kIHJldHVybiBsaXN0cyBvZiB0aGUgb25lcyBzdGlsbCBydW5uaW5nL3dhaXRpbmc6CnN1YiBjaGVja19xdWV1ZSB7CiAgICBwcmludCBzY2FsYXIgbG9jYWx0aW1lLCAiOiBDaGVja2luZyBxdWV1ZS4uLlxuIiBpZiBERUJVRzsKICAgIG15ICRxdWV1ZWlkcyA9IGBzcXVldWUgLWggLW8gJyVpICV0JyAyPiYxYDsKICAgIGlmICgkPyAhPSAwKSB7CglwcmludCAic3F1ZXVlIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJyQ/Jyxcbm1lc3NhZ2U6ICRxdWV1ZWlkc1xuSSB3aWxsIGFzc3VtZSBhbGwgam9icyBhcmUgc3RpbGwgcnVubmluZy93YWl0aW5nXG4iOwoJcmV0dXJuOwogICAgfQogICAgbXkgJHRlc3RpZHMgPSBbIEB7JHJ1bmlkc30sIEB7JHBlbmRpZHN9IF07CiAgICBwcmludCAiTnVtYmVyIG9mIGpvYnMgdG8gY2hlY2s6ICIsIHNjYWxhciBAeyR0ZXN0aWRzfSwgIlxuIiBpZiBERUJVRzsKICAgIHNsZWVwIDEwICsgcmFuZDsJCSMgU2xlZXAgdG8gYWxsb3cgcmVxdWV1ZWQgam9icyB0byBnZXQgYmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gcXVldWUuCiAgICAkcnVuaWRzID0gW107CiAgICAkcGVuZGlkcyA9IFtdOwogICAgZm9yZWFjaCBteSAkaWQgKEB7JHRlc3RpZHN9KSB7CglpZiAoJHF1ZXVlaWRzID1+IC8kaWQgKFx3KykvKSB7CgkgICAgaWYgKCQxIGVxICJQRCIpIHsKCQlwcmludCAiIEpvYiAkaWQgaXMgc3RpbGwgd2FpdGluZ1xuIiBpZiBERUJVRzsKCQlwdXNoIEB7JHBlbmRpZHN9LCAkaWQ7CgkgICAgfSBlbHNlIHsKCQlwcmludCAiIEpvYiAkaWQgaXMgc3RpbGwgcnVubmluZ1xuIiBpZiBERUJVRzsKCQlwdXNoIEB7JHJ1bmlkc30sICRpZDsKCSAgICB9Cgl9IGVsc2UgewoJICAgIHByaW50ICIgSm9iICRpZCBoYXMgZmluaXNoZWQ6XG4iIGlmIERFQlVHOwoJICAgIG15IEBzYWNjdHJlcyA9IGBzYWNjdCAtbyBqb2JpZCxzdGFydCxlbmQsbWF4dm1zaXplLG1heHJzcyxzdGF0ZSxleGl0Y29kZSAtUyAkc3RhcnR0aW1lIC1qICRpZCAyPiYxYDsKCSAgICBpZiAoJD8gIT0gMCkgewoJCXByaW50ICIgIHNhY2N0IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJyQ/JyxcbiAgbWVzc2FnZTogIiwKCQkgIEBzYWNjdHJlcywgIiAgSSB3aWxsIGFzc3VtZSBqb2IgJGlkIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseVxuIjsKCSAgICB9IGVsc2UgewoJCXByaW50IGpvaW4oIiAgIiwgQHNhY2N0cmVzKTsKCQlpZiAoZ3JlcCAvXlsgXSokaWRbIF0rLipSVU5OSU5HLywgQHNhY2N0cmVzKSB7CgkJICAgIHByaW50ICIgIEpvYiBzZWVtcyB0byBiZSBzdGlsbCBydW5uaW5nLCBhZnRlciBhbGwuXG4iIGlmIERFQlVHOwoJCSAgICBwdXNoIEB7JHJ1bmlkc30sICRpZDsKCQl9IGVsc2lmICgkcmVzdGFydCAmJiAhZ3JlcCAvXlsgXSokaWRbIF0rLipDT01QTEVURURbIF0rMDowLywgQHNhY2N0cmVzKSB7CgkJICAgIHByaW50ICIgIEpvYiBmYWlsZWQuICI7CgkJICAgIGlmIChAcmVzdGFydGVkVGFza3MgPj0gJG1heFJlc3RhcnRzKSB7CgkJCXByaW50ICJUb28gbWFueSBqb2JzIGhhdmUgYmVlbiByZXN0YXJ0ZWQuICBXaWxsIG5vdCByZXN0YXJ0IFRBU0tfSUQgJHRhc2tpZHskaWR9XG4iOwoJCSAgICB9IGVsc2lmIChncmVwIC9eJHRhc2tpZHskaWR9JC8sIEByZXN0YXJ0ZWRUYXNrcykgewoJCQlwcmludCAiVEFTS19JRCAkdGFza2lkeyRpZH0gaGFzIGFscmVhZHkgYmVlbiByZXN0YXJ0ZWQgb25jZS4gIFdpbGwgbm90IHJlc3RhcnQgaXQgYWdhaW5cbiI7CgkJICAgIH0gZWxzZSB7CgkJCXByaW50ICJSZXN0YXJ0aW5nIFRBU0tfSUQgJHRhc2tpZHskaWR9XG4iOwoJCQkkRU5WeydUQVNLX0lEJ30gPSAkdGFza2lkeyRpZH07CgkJCW15ICRuZXdpZCA9IHN1Ym1pdF9qb2IgIiRtYWluaWQuJHRhc2tpZHskaWR9IiwgIkBjb21tYW5kTGluZSI7CgkJCXB1c2ggQHskcnVuaWRzfSwgJG5ld2lkOwoJCQkkdGFza2lkeyRuZXdpZH0gPSAkdGFza2lkeyRpZH07CgkJCXB1c2ggQHJlc3RhcnRlZFRhc2tzLCAkdGFza2lkeyRuZXdpZH07CgkJCXNsZWVwIDEuNSArIHJhbmQ7CSMgU2xlZXAgYmV0d2VlbiAxLjUgYW5kIDIuNSBzZWNzCgkJICAgIH0KCQl9CgkgICAgfQoJfQogICAgfQp9CgoKIyMgTWFrZSBzdXJlIHN1YiBqb2JzIGRvIG5vdCBpbmhlcml0IHRoZSBtYWluIGpvYiBUTVBESVIgb3Igam9ibmFtZToKZGVsZXRlICRFTlZ7J1RNUERJUid9OwpkZWxldGUgJEVOVnsnU0xVUk1fSk9CX05BTUUnfTsKCndoaWxlIChAam9iQXJyYXkpIHsKICAgICMjIFRoZXJlIGlzIG1vcmUgdG8gc3VibWl0CiAgICBwcmludCBzY2FsYXIgbG9jYWx0aW1lLCAiOiBTdWJtaXR0aW5nIGpvYnMuLi5cbiIgaWYgREVCVUc7CiAgICBwcmludCBzY2FsYXIgQGpvYkFycmF5LCAiIG1vcmUgam9iKHMpIHRvIHN1Ym1pdFxuIiBpZiBERUJVRzsKICAgICMjIFN1Ym1pdCBhcyBtYW55IGFzIHBvc3NpYmxlOgogICAgbXkgJG5Ub1N1Ym1pdCA9IG1pbihzY2FsYXIgQGpvYkFycmF5LAoJCQkkbWF4Sm9icyAtIEB7JHJ1bmlkc30gLSBAeyRwZW5kaWRzfSwKCQkJJG1heElkbGVKb2JzIC0gQHskcGVuZGlkc30sCgkJCSRtYXhCdXJzdCk7CiAgICBwcmludCBzY2FsYXIoQHskcnVuaWRzfSksICIgam9iKHMpIGFyZSBydW5uaW5nLCBhbmQgIiwKICAgICAgICBzY2FsYXIoQHskcGVuZGlkc30pLCAiIGFyZSB3YWl0aW5nXG4iIGlmIERFQlVHOwogICAgcHJpbnQgIlN1Ym1pdHRpbmcgJG5Ub1N1Ym1pdCBqb2Iocyk6XG4iIGlmIERFQlVHOwogICAgZm9yIChteSAkaSA9IDE7ICRpIDw9ICRuVG9TdWJtaXQ7ICRpKyspIHsKCW15ICRjdXJySm9iID0gc2hpZnQgQGpvYkFycmF5OwoJcHJpbnQgIiBUQVNLX0lEICRjdXJySm9iOlxuIiBpZiBERUJVRzsKCSMjIFNldCAkVEFTS19JRCBmb3IgdGhlIGpvYjoKCSRFTlZ7J1RBU0tfSUQnfSA9ICRjdXJySm9iOwoJbXkgJGlkID0gc3VibWl0X2pvYiAiJG1haW5pZC4kY3VyckpvYiIsICJAY29tbWFuZExpbmUiOwoJcHVzaCBAeyRwZW5kaWRzfSwgJGlkOwoJJHRhc2tpZHskaWR9ID0gJGN1cnJKb2I7CglzbGVlcCAxLjUgKyByYW5kOwkjIFNsZWVwIGJldHdlZW4gMS41IGFuZCAyLjUgc2VjcwogICAgfQogICAgIyMgV2FpdCBhIHdoaWxlOgogICAgcHJpbnQgIlNsZWVwaW5nLi4uXG4iIGlmIERFQlVHOwogICAgc2xlZXAgJHBvbGxTZWNvbmRzIC0gNSArIGludChyYW5kKDExKSk7CiAgICAjIyBGaW5kIHdoaWNoIGFyZSBzdGlsbCBydW5uaW5nIG9yIHdhaXRpbmc6CiAgICBjaGVja19xdWV1ZSgpOwp9CnByaW50ICJBbGwgam9icyBoYXZlIGJlZW4gc3VibWl0dGVkXG4iIGlmIERFQlVHOwoKd2hpbGUgKEB7JHJ1bmlkc30gfHwgQHskcGVuZGlkc30pIHsKICAgICMjIFNvbWUgam9icyBhcmUgc3RpbGwgcnVubmluZyBvciBwZW5kaW5nCiAgICBwcmludCBzY2FsYXIoQHskcnVuaWRzfSksICIgam9iKHMpIGFyZSBzdGlsbCBydW5uaW5nLCBhbmQgIiwKICAgICAgICBzY2FsYXIoQHskcGVuZGlkc30pLCAiIGFyZSB3YWl0aW5nXG4iIGlmIERFQlVHOwogICAgIyMgV2FpdCBhIHdoaWxlCiAgICBwcmludCAiU2xlZXBpbmcuLi5cbiIgaWYgREVCVUc7CiAgICBzbGVlcCAkcG9sbFNlY29uZHMgLSA1ICsgaW50KHJhbmQoMTEpKTsKICAgICMjIEZpbmQgd2hpY2ggYXJlIHN0aWxsIHJ1bm5pbmcgb3Igd2FpdGluZzoKICAgIGNoZWNrX3F1ZXVlKCk7Cn0KCnByaW50ICJEb25lLlxuIiBpZiBERUJVRzsK