LyoKICogIFBoaXNoaW5nIG1vZHVsZTogd2hpdGVsaXN0IGltcGxlbWVudGF0aW9uLgogKgogKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgVPZy9msgRWR2aW4gPGVkd2luQGNsYW1hdi5uZXQ+CiAqCiAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgCiAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKICogIE1BIDAyMTEwLTEzMDEsIFVTQS4KICoKICovCgoKI2lmbmRlZiBfUEhJU0hfV0hJVEVMSVNUX0gKI2RlZmluZSBfUEhJU0hfV0hJVEVMSVNUX0gKCiNpbmNsdWRlICJjbGFtYXYuaCIKCmludCBpbml0X3doaXRlbGlzdChzdHJ1Y3QgY2xfZW5naW5lKiBlbmdpbmUpOwp2b2lkIHdoaXRlbGlzdF9kb25lKHN0cnVjdCBjbF9lbmdpbmUqIGVuZ2luZSk7CnZvaWQgd2hpdGVsaXN0X2NsZWFudXAoY29uc3Qgc3RydWN0IGNsX2VuZ2luZSogZW5naW5lKTsKaW50IGlzX3doaXRlbGlzdF9vayhjb25zdCBzdHJ1Y3QgY2xfZW5naW5lKiBlbmdpbmUpOwppbnQgd2hpdGVsaXN0X21hdGNoKGNvbnN0IHN0cnVjdCBjbF9lbmdpbmUqIGVuZ2luZSwgY2hhciogcmVhbF91cmwsY29uc3QgY2hhciogZGlzcGxheV91cmwsaW50IGhvc3RPbmx5KTsKCiNlbmRpZgoK