LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCIDxkYW5pZWxAb21pY3Jvbi5zZT4uCiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKLyogVGhpcyBmaWxlIGlzIGxhcmdlbHkgYmFzZWQgb24gY29kZSBvYnRuZWQgZnJvbSBBTUQuIEFNRCdzIG9yaWdpbmFsCiAqIGNvcHlyaWdodCBpcyBpbmNsdWRlZCBiZWxvdwogKi8KCi8qCiAqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKgogKiAgIENvcHlyaWdodCAxOTk5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KICoKICogIFRoaXMgc29mdHdhcmUgaXMgdGhlIHByb3BlcnR5IG9mIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYyAgKEFNRCkgIHdoaWNoCiAqICBzcGVjaWZpY2FsbHkgZ3JhbnRzIHRoZSB1c2VyIHRoZSByaWdodCB0byBtb2RpZnksIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGlzCiAqICBzb2Z0d2FyZSBwcm92aWRlZCB0aGlzIENPUFlSSUdIVCBOT1RJQ0UgaXMgbm90IHJlbW92ZWQgb3IgYWx0ZXJlZC4gIEFsbAogKiAgb3RoZXIgcmlnaHRzIGFyZSByZXNlcnZlZCBieSBBTUQuCiAqCiAqICBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWQogKiAgT0YgQU5ZIEtJTkQgSU5DTFVESU5HIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBOT05JTkZSSU5HRU1FTlQgT0YKICogIFRISVJELVBBUlRZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSwgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICogIElOIE5PIEVWRU5UIFNIQUxMIEFNRCBPUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgogKiAgKElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIFBST0ZJVFMsIEJVU0lORVNTCiAqICBJTlRFUlJVUFRJT04sIExPU1MgT0YgSU5GT1JNQUlUT04pIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZCiAqICBUTyBVU0UgVEhFIE1BVEVSSUFMUywgRVZFTiBJRiBBTUQgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICogIFNVQ0ggREFNQUdFUy4gIEJFQ0FVU0UgU09NRSBKVVJTSURJQ1RJT05TIFBST0hJQklUIFRIRSBFWENMVVNJT04gT1IKICogIExJTUlUQVRJT04gT0YgTElBQklMSVRZIEZPUiBDT05TRVFVRU5USUFMIE9SIElOQ0lERU5UQUwgREFNQUdFUywgVEhFIEFCT1ZFCiAqICBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgogKgogKiAgQU1EIGRvZXMgbm90IGFzc3VtZSBhbnkgcmVzcG9uc2liaWxpdHkgZm9yIGFueSBlcnJvcnMgdGhhdCBtYXkgYXBwZWFyIGluCiAqICB0aGUgTWF0ZXJpYWxzIG5vciBhbnkgcmVzcG9uc2liaWxpdHkgdG8gc3VwcG9ydCBvciB1cGRhdGUgdGhlIE1hdGVyaWFscy4KICogIEFNRCByZXRhaW5zIHRoZSByaWdodCB0byBtYWtlIGNoYW5nZXMgdG8gaXRzIHRlc3Qgc3BlY2lmaWNhdGlvbnMgYXQgYW55CiAqICB0aW1lLCB3aXRob3V0IG5vdGljZS4KICoKICogIFNvIHRoYXQgYWxsIG1heSBiZW5lZml0IGZyb20geW91ciBleHBlcmllbmNlLCBwbGVhc2UgcmVwb3J0ICBhbnkgIHByb2JsZW1zCiAqICBvciBzdWdnZXN0aW9ucyBhYm91dCB0aGlzIHNvZnR3YXJlIGJhY2sgdG8gQU1ELiAgUGxlYXNlIGluY2x1ZGUgeW91ciBuYW1lLAogKiAgY29tcGFueSwgIHRlbGVwaG9uZSBudW1iZXIsICBBTUQgcHJvZHVjdCByZXF1aXJpbmcgc3VwcG9ydCBhbmQgcXVlc3Rpb24gb3IKICogIHByb2JsZW0gZW5jb3VudGVyZWQuCiAqCiAqICBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICAgICAgICAgV29ybGR3aWRlIHN1cHBvcnQgYW5kIGNvbnRhY3QKICogIEVtYmVkZGVkIFByb2Nlc3NvciBEaXZpc2lvbiAgICAgICAgICAgIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBhdDoKICogIFN5c3RlbXMgRW5naW5lZXJpbmcgICAgICAgICAgICAgICAgICAgICAgIGVwZC5zdXBwb3J0QGFtZC5jb20KICogIDUyMDQgRS4gQmVuIFdoaXRlIEJsdmQuICAgICAgICAgICAgICAgICAgICAgICAgICAtb3ItCiAqICBBdXN0aW4sIFRYIDc4NzQxICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYW1kLmNvbS9odG1sL3N1cHBvcnQvdGVjaHN1cC5odG1sCiAqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCSBBVVRIT1IgICAgICA6IEJ1ZGR5IEZleSAtIE9yaWdpbmFsLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICBGVU5DVElPTkFMIERFU0NSSVBUSU9OOgogKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGF1dG9kZXRlY3QgdGhlIGdlb21ldHJ5IG9mIHRoZSBEUkFNLgogKgogKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGNvbHVtbiBiaXRzIGZvciB0aGUgRFJBTQogKiBkZXZpY2VzIGluIHRoaXMgZXh0ZXJuYWwgYmFuay4gVGhpcyByb3V0aW5lIGFzc3VtZXMgdGhhdCB0aGUgZXh0ZXJuYWwgYmFuawogKiBoYXMgYmVlbiBjb25maWd1cmVkIGZvciBhbiAxMS1iaXQgY29sdW1uIGFuZCBmb3IgNCBpbnRlcm5hbCBiYW5rcy4gVGhpcyBnaXZlcwogKiB1cyB0aGUgbWF4aW11bSBhZGRyZXNzIHJlYWNoIGluIG1lbW9yeS4gQnkgd3JpdGluZyBhIHRlc3QgdmFsdWUgdG8gdGhlIG1heAogKiBhZGRyZXNzIGFuZCBsb2NhdGluZyB3aGVyZSBpdCBhbGlhc2VzIHRvLCB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgdmFsaWQKICogY29sdW1uIGJpdHMuCiAqCiAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgaW50ZXJuYWwgYmFua3MgZWFjaCBEUkFNCiAqIGRldmljZSBoYXMuIFRoZSBleHRlcm5hbCBiYW5rICh1bmRlciB0ZXN0KSBpcyBjb25maWd1cmVkIGZvciBtYXhpbXVtIHJlYWNoCiAqIHdpdGggMTEtYml0IGNvbHVtbnMgYW5kIDQgaW50ZXJuYWwgYmFua3MuIFRoaXMgcm91dGluZSB3aWxsIHdyaXRlIHRvIGEgbWF4CiAqIGFkZHJlc3MgKEJBMSBhbmQgQkEwID0gMSkgYW5kIHRoZW4gcmVhZCBmcm9tIGFuIGFkZHJlc3Mgd2l0aCBCQTE9MCB0byBzZWUgaWYKICogdGhhdCBjb2x1bW4gaXMgYSAiZG9uJ3QgY2FyZSIuIElmIEJBMSBkb2VzIG5vdCBhZmZlY3Qgd3JpdGUvcmVhZCBvZiBkYXRhLAogKiB0aGVuIHRoaXMgZGV2aWNlIGhhcyBvbmx5IDIgaW50ZXJuYWwgYmFua3MuCiAqCiAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIHRoZSBlbmRpbmcgYWRkcmVzcyBmb3IgdGhpcyBleHRlcm5hbAogKiBiYW5rIG9mIFNEUkFNLiBXZSB3cml0ZSB0byBhIG1heCBhZGRyZXNzIHdpdGggYSBkYXRhIHZhbHVlIGFuZCB0aGVuIGRpc2FibGUKICogcm93IGFkZHJlc3MgYml0cyBsb29raW5nIGZvciAiZG9uJ3QgY2FyZSIgbG9jYXRpb25zLiBFYWNoICJkb24ndCBjYXJlIiBiaXQKICogcmVwcmVzZW50cyBhIGRpdmlkaW5nIG9mIHRoZSBtYXhpbXVtIGRlbnNpdHkgKDEyOE0pIGJ5IDIuIEJ5IGRpdmlkaW5nIHRoZQogKiBtYXhpbXVtIG9mIDMyIDRNIGNodW5rcyBpbiBhbiBleHRlcm5hbCBiYW5rIGRvd24gYnkgYWxsIHRoZSAiZG9uJ3QgY2FyZSIgYml0cwogKiBkZXRlcm1pbmVkIGR1cmluZyBzaXppbmcsIHdlIHNldCB0aGUgcHJvcGVyIGRlbnNpdHkuCiAqCiAqIFdBUk5JTkdTLgogKiBicCBtdXN0IGJlIHByZXNlcnZlZCBiZWNhdXNlIGl0IGlzIHVzZWQgZm9yIHJldHVybiBsaW5rYWdlLgogKgogKiBFWElUCiAqIG5vdGhpbmcgcmV0dXJuZWQgLSBidXQgdGhlIG1lbW9yeSBzdWJzeXN0ZW0gaXMgZW5hYmxlZAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCiNpbmNsdWRlIDxjb25maWcuaD4KI2lmZGVmIENPTkZJR19TQzUyMAoKLnNlY3Rpb24gLnRleHQKLmVxdSAgICAgICAgICAgIERSQ0NUTCwgICAgIDB4MGZmZmVmMDEwICAgLyogRFJBTSBjb250cm9sIHJlZ2lzdGVyICovCi5lcXUgICAgICAgICAgICBEUkNUTUNUTCwgICAweDBmZmZlZjAxMiAgIC8qIERSQU0gdGltaW5nIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLmVxdSAgICAgICAgICAgIERSQ0NGRywgICAgIDB4MGZmZmVmMDE0ICAgLyogRFJBTSBiYW5rIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KLmVxdSAgICAgICAgICAgIERSQ0JFTkRBRFIsIDB4MGZmZmVmMDE4ICAgLyogRFJBTSBiYW5rIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICovCi5lcXUgICAgICAgICAgICBFQ0NDVEwsICAgICAweDBmZmZlZjAyMCAgIC8qIERSQU0gRUNDIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLmVxdSAgICAgICAgICAgIEVDQ0lOVCwgICAgIDB4MGZmZmVmZDE4ICAgLyogRFJBTSBFQ0Mgbm1pLUlOVCBtYXBwaW5nICovCi5lcXUgICAgICAgICAgICBEQkNUTCwgICAgICAweDBmZmZlZjA0MCAgIC8qIERSQU0gYnVmZmVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KCi5lcXUgICAgICAgICAgICBDQUNIRUxJTkVTWiwgMHgwMDAwMDAxMCAgIC8qIHNpemUgb2Ygb3VyIGNhY2hlIGxpbmUgKHJlYWQgYnVmZmVyKSAqLwouZXF1ICAgICAgICAgICAgQ09MMTFfQURSLCAgMHgwZTAwMWUwMCAgICAvKiAxMSBjb2wgYWRkcnMgKi8KLmVxdSAgICAgICAgICAgIENPTDEwX0FEUiwgIDB4MGUwMDBlMDAgICAgLyogMTAgY29sIGFkZHJzICovCi5lcXUgICAgICAgICAgICBDT0wwOV9BRFIsICAweDBlMDAwNjAwICAgIC8qICA5IGNvbCBhZGRycyAqLwouZXF1ICAgICAgICAgICAgQ09MMDhfQURSLCAgMHgwZTAwMDIwMCAgICAvKiAgOCBjb2wgYWRkcnMgKi8KLmVxdSAgICAgICAgICAgIFJPVzE0X0FEUiwgIDB4MGYwMDAwMDAgICAgLyogMTQgcm93IGFkZHJzICovCi5lcXUgICAgICAgICAgICBST1cxM19BRFIsICAweDA3MDAwMDAwICAgIC8qIDEzIHJvdyBhZGRycyAqLwouZXF1ICAgICAgICAgICAgUk9XMTJfQURSLCAgMHgwMzAwMDAwMCAgICAvKiAxMiByb3cgYWRkcnMgKi8KLmVxdSAgICAgICAgICAgIFJPVzExX0FEUiwgIDB4MDEwMDAwMDAgICAgLyogMTEgcm93IGFkZHJzL2Fsc28gYmFuayBzd2l0Y2ggKi8KLmVxdSAgICAgICAgICAgIFJPVzEwX0FEUiwgIDB4MDAwMDAwMDAgICAgLyogMTAgcm93IGFkZHJzL2Fsc28gYmFuayBzd2l0Y2ggKi8KLmVxdSAgICAgICAgICAgIENPTDExX0RBVEEsIDB4MGIwYjBiMGIgICAgLyogMTEgY29sIGFkZHJzICovCi5lcXUgICAgICAgICAgICBDT0wxMF9EQVRBLCAweDBhMGEwYTBhICAgIC8qIDEwIGNvbCBkYXRhICovCi5lcXUgICAgICAgICAgICBDT0wwOV9EQVRBLCAweDA5MDkwOTA5ICAgIC8qICA5IGNvbCBkYXRhICovCi5lcXUgICAgICAgICAgICBDT0wwOF9EQVRBLCAweDA4MDgwODA4ICAgIC8qICA4IGNvbCBkYXRhICovCi5lcXUgICAgICAgICAgICBST1cxNF9EQVRBLCAweDNmM2YzZjNmICAgIC8qIDE0IHJvdyBkYXRhIChNQVNLKSAqLwouZXF1ICAgICAgICAgICAgUk9XMTNfREFUQSwgMHgxZjFmMWYxZiAgICAvKiAxMyByb3cgZGF0YSAoTUFTSykgKi8KLmVxdSAgICAgICAgICAgIFJPVzEyX0RBVEEsIDB4MGYwZjBmMGYgICAgLyogMTIgcm93IGRhdGEgKE1BU0spICovCi5lcXUgICAgICAgICAgICBST1cxMV9EQVRBLCAweDA3MDcwNzA3ICAgIC8qIDExIHJvdyBkYXRhL2Fsc28gYmFuayBzd2l0Y2ggKE1BU0spICovCi5lcXUgICAgICAgICAgICBST1cxMF9EQVRBLCAweGFhYWFhYWFhICAgIC8qIDEwIHJvdyBkYXRhL2Fsc28gYmFuayBzd2l0Y2ggKE1BU0spICovCgoKIC8qCiAgKiBpbml0aWFsaXplIGRyYW0gY29udHJvbGxlciByZWdpc3RlcnMKICAqLwouZ2xvYmwgbWVtX2luaXQKbWVtX2luaXQ6Cgl4b3J3ICAgICVheCwlYXgKCW1vdmwgICAgJERCQ1RMLCAlZWRpCgltb3ZiICAgICAlYWwsICglZWRpKSAgICAgICAgICAgICAvKiBkaXNhYmxlIHdyaXRlIGJ1ZmZlciAqLwoKCW1vdmwgICAgJEVDQ0NUTCwgJWVkaQoJbW92YiAgICAgJWFsLCAoJWVkaSkgICAgICAgICAgICAgLyogZGlzYWJsZSBFQ0MgKi8KCgltb3ZsICAgICREUkNUTUNUTCwgJWVkaQoJbW92YiAgICAkMHgxRSwlYWwgICAgICAgICAgICAgICAgLyogU2V0IFNEUkFNIHRpbWluZyBmb3Igc2xvd2VzdCAqLwoJbW92YiAgICAgJWFsLCAoJWVkaSkKCiAvKgogICogc2V0dXAgbG9vcCB0byBkbyA0IGV4dGVybmFsIGJhbmtzIHN0YXJ0aW5nIHdpdGggYmFuayAzCiAgKi8KCW1vdmwgICAgJDB4ZmYwMDAwMDAsJWVheCAgICAgICAgIC8qIGVuYWJsZSBsYXN0IGJhbmsgYW5kIHNldHVwICovCgltb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLwoJbW92bCAgICAgJWVheCwgKCVlZGkpCgoJbW92bCAgICAkRFJDQ0ZHLCAlZWRpICAgICAgICAgICAgLyogc2V0dXAgKi8KCW1vdncgICAgJDB4YmJiYiwlYXggICAgICAgICAgICAgIC8qIGRyYW0gY29uZmlnIHJlZ2lzdGVyIGZvciAgKi8KCW1vdncgICAgJWF4LCAoJWVkaSkKCiAvKgogICogaXNzdWUgYSBOT1AgdG8gYWxsIERSQU1zCiAgKi8KCW1vdmwgICAgJERSQ0NUTCwgJWVkaSAgICAgICAgICAgIC8qIHNldHVwIERSQU0gY29udHJvbCByZWdpc3RlciB3aXRoICovCgltb3ZiICAgICQweDEsJWFsICAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIHJlZnJlc2gsZGlzYWJsZSB3cml0ZSBidWZmZXIgKi8KCW1vdmIgICAgICVhbCwgKCVlZGkpCgltb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBqdXN0IGEgZHVtbXkgYWRkcmVzcyB0byB3cml0ZSBmb3IgKi8KCW1vdncgICAgICVheCwgKCVlc2kpCiAvKgogICogZGVsYXkgZm9yIDEwMCB1c2VjPyAyMDA/CiAgKiAqKioqKip0aGlzIGlzIGEgY2x1ZGdlIGZvciBub3cgKioqKioqKioqKioqKgogICovCgltb3Z3ICAgICQxMDAsJWN4CnNpemRlbGF5OgoJbG9vcCAgICBzaXpkZWxheSAgICAgICAgICAgICAgICAgLyogd2UgbmVlZCAxMDAgdXNlYyBoZXJlICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogLyoKICAqIGlzc3VlIGFsbCBiYW5rcyBwcmVjaGFyZ2UKICAqLwoJbW92YiAgICAkMHgyLCVhbCAgICAgICAgICAgICAgICAgLyogQWxsIGJhbmtzIHByZWNoYXJnZSAqLwoJbW92YiAgICAgJWFsLCAoJWVkaSkKCW1vdncgICAgICVheCwgKCVlc2kpCgogLyoKICAqIGlzc3VlIDIgYXV0byByZWZyZXNoZXMgdG8gYWxsIGJhbmtzCiAgKi8KCW1vdmIgICAgJDB4NCwlYWwgICAgICAgICAgICAgICAgIC8qIEF1dG8gcmVmcmVzaCBjbWQgKi8KCW1vdmIgICAgICVhbCwgKCVlZGkpCgltb3Z3ICAgICQyLCVjeApyZWZyZXNoMToKCW1vdncgICAgICVheCwgKCVlc2kpCglsb29wICAgIHJlZnJlc2gxCgogLyoKICAqIGlzc3VlIExPQUQgTU9ERSBSRUdJU1RFUiBjb21tYW5kCiAgKi8KCW1vdmIgICAgJDB4MywlYWwgICAgICAgICAgICAgICAgIC8qIExvYWQgbW9kZSByZWdpc3RlciBjbWQgKi8KCW1vdmIgICAgICVhbCwgKCVlZGkpCgltb3Z3ICAgICAlYXgsICglZXNpKQoKIC8qCiAgKiBpc3N1ZSA4IG1vcmUgYXV0byByZWZyZXNoZXMgdG8gYWxsIGJhbmtzCiAgKi8KCW1vdmIgICAgJDB4NCwlYWwgICAgICAgICAgICAgICAgIC8qIEF1dG8gcmVmcmVzaCBjbWQgKi8KCW1vdmIgICAgICVhbCwgKCVlZGkpCgltb3Z3ICAgICQ4LCVjeApyZWZyZXNoMjoKCW1vdncgICAgICVheCwgKCVlc2kpCglsb29wICAgIHJlZnJlc2gyCgogLyoKICAqIHNldCBjb250cm9sIHJlZ2lzdGVyIHRvIE5PUk1BTCBtb2RlCiAgKi8KCW1vdmIgICAgJDB4MCwlYWwgICAgICAgICAgICAgICAgIC8qIE5vcm1hbCBtb2RlIHZhbHVlICovCgltb3ZiICAgICAlYWwsICglZWRpKQoKIC8qCiAgKiBzaXplIGRyYW0gc3RhcnRpbmcgd2l0aCBleHRlcm5hbCBiYW5rIDMgbW92aW5nIHRvIGV4dGVybmFsIGJhbmsgMAogICovCgltb3ZsICAgICQweDMsJWVjeCAgICAgICAgICAgICAgICAvKiBzdGFydCB3aXRoIGV4dGVybmFsIGJhbmsgMyAqLwoKbmV4dGJhbms6CgogLyoKICAqIHdyaXRlIGNvbCAxMSB3cmFwIGFkcgogICovCgltb3ZsICAgICRDT0wxMV9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggY29sICgxMSkgd3JhcCBhZGRyICovCgltb3ZsICAgICRDT0wxMV9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciBtYXggc3VwcG9ydGVkIGNvbHVtbnMoMTEpICovCgltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSBtYXggY29sIHBhdHRlcm4gYXQgbWF4IGNvbCBhZHIgKi8KCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwoJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAvKgogICogd3JpdGUgY29sIDEwIHdyYXAgYWRyCiAgKi8KCgltb3ZsICAgICRDT0wxMF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMCBjb2wgd3JhcCBhZGRyZXNzICovCgltb3ZsICAgICRDT0wxMF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMCBjb2wgd3JhcCAqLwoJbW92bCAgICAlZWF4LCAoJWVzaSkgICAgICAgICAgICAgLyogd3JpdGUgMTAgY29sIHBhdHRlcm4gQCAxMCBjb2wgd3JhcCBhZHIgKi8KCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwoJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAvKgogICogd3JpdGUgY29sIDkgd3JhcCBhZHIKICAqLwoJbW92bCAgICAkQ09MMDlfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gOSBjb2wgd3JhcCBhZGRyZXNzICovCgltb3ZsICAgICRDT0wwOV9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciA5IGNvbCB3cmFwICovCgltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSA5IGNvbCBwYXR0ZXJuIEAgOSBjb2wgd3JhcCBhZHIgKi8KCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwoJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAvKgogICogd3JpdGUgY29sIDggd3JhcCBhZHIKICAqLwoJbW92bCAgICAkQ09MMDhfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gbWluKDgpIGNvbCB3cmFwIGFkZHJlc3MgKi8KCW1vdmwgICAgJENPTDA4X0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIG1pbiAoOCkgY29sIHdyYXAgKi8KCW1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIG1pbiBjb2wgcGF0dGVybiBAIG1pbiBjb2wgYWRyICovCgltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCgljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogLyoKICAqIHdyaXRlIHJvdyAxNCB3cmFwIGFkcgogICovCgltb3ZsICAgICRST1cxNF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggcm93ICgxNCkgd3JhcCBhZGRyICovCgltb3ZsICAgICRST1cxNF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciBtYXggc3VwcG9ydGVkIHJvd3MoMTQpICovCgltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSBtYXggcm93IHBhdHRlcm4gYXQgbWF4IHJvdyBhZHIgKi8KCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwoJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAvKgogICogd3JpdGUgcm93IDEzIHdyYXAgYWRyCiAgKi8KCW1vdmwgICAgJFJPVzEzX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEzIHJvdyB3cmFwIGFkZHJlc3MgKi8KCW1vdmwgICAgJFJPVzEzX0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIDEzIHJvdyB3cmFwICovCgltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMyByb3cgcGF0dGVybiBAIDEzIHJvdyB3cmFwIGFkciAqLwoJbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLwoJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCglqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KIC8qCiAgKiB3cml0ZSByb3cgMTIgd3JhcCBhZHIKICAqLwoJbW92bCAgICAkUk9XMTJfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gMTIgcm93IHdyYXAgYWRkcmVzcyAqLwoJbW92bCAgICAkUk9XMTJfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTIgcm93IHdyYXAgKi8KCW1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIDEyIHJvdyBwYXR0ZXJuIEAgMTIgcm93IHdyYXAgYWRyICovCgltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCgljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogLyoKICAqIHdyaXRlIHJvdyAxMSB3cmFwIGFkcgogICovCgltb3ZsICAgICRST1cxMV9BRFIsICVlZGkgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMSByb3cgd3JhcCBhZGRyZXNzICovCgltb3ZsICAgICRST1cxMV9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMSByb3cgd3JhcCAqLwoJbW92bCAgICAlZWF4LCAoJWVkaSkgICAgICAgICAgICAgLyogd3JpdGUgMTEgcm93IHBhdHRlcm4gQCAxMSByb3cgd3JhcCBhZHIgKi8KCW1vdmwgICAgKCVlZGkpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwoJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAvKgogICogd3JpdGUgcm93IDEwIHdyYXAgYWRyIC0tLSB0aGlzIHdyaXRlIGlzIHJlYWxseSB0byBkZXRlcm1pbmUgbnVtYmVyIG9mIGJhbmtzCiAgKi8KCW1vdmwgICAgJFJPVzEwX0FEUiwgJWVkaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEwIHJvdyB3cmFwIGFkZHJlc3MgKi8KCW1vdmwgICAgJFJPVzEwX0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIDEwIHJvdyB3cmFwIChBQSkgKi8KCW1vdmwgICAgJWVheCwgKCVlZGkpICAgICAgICAgICAgIC8qIHdyaXRlIDEwIHJvdyBwYXR0ZXJuIEAgMTAgcm93IHdyYXAgYWRyICovCgltb3ZsICAgICglZWRpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCgljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogLyoKICAqIHJlYWQgZGF0YSBAIHJvdyAxMiB3cmFwIGFkciB0byBkZXRlcm1pbmUgICogYmFua3MsCiAgKiBhbmQgcmVhZCBkYXRhIEAgcm93IDE0IHdyYXAgYWRyIHRvIGRldGVybWluZSAgKiByb3dzLgogICogaWYgZGF0YSBAIHJvdyAxMiB3cmFwIGFkciBpcyBub3QgQUEsIDExIG9yIDEyIHdlIGhhdmUgYmFkIFJBTS4KICAqIGlmIGRhdGEgQCByb3cgMTIgd3JhcCA9PSBBQSwgd2Ugb25seSBoYXZlIDIgYmFua3MsIE5PVCA0CiAgKiBpZiBkYXRhIEAgcm93IDEyIHdyYXAgPT0gMTEgb3IgMTIsIHdlIGhhdmUgNCBiYW5rcywKICAqLwoJeG9ydyAgICAlZGksJWRpICAgICAgICAgICAgICAgICAgLyogdmFsdWUgZm9yIDIgYmFua3MgaW4gREkgKi8KCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIHJlYWQgZnJvbSAxMiByb3cgd3JhcCB0byBjaGVjayBiYW5rcwoJCQkJCSAgKiAoZXNpIGlzIHNldHVwIGZyb20gdGhlIHdyaXRlIHRvIHJvdyAxMiB3cmFwKSAqLwoJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogY2hlY2sgZm9yIEFBIHBhdHRlcm4gIChlYXggaG9sZHMgdGhlIGFhIHBhdHRlcm4pICovCglqeiAgICAgIG9ubHkyICAgICAgICAgICAgICAgICAgICAvKiBpZiBwYXR0ZXJuID09IEFBLCB3ZSBvbmx5IGhhdmUgMiBiYW5rcyAqLwoKCS8qIDQgYmFua3MgKi8KCgltb3Z3ICAgICQ4LCVkaSAgICAgICAgICAgICAgICAgICAvKiB2YWx1ZSBmb3IgNCBiYW5rcyBpbiBESSAoQk5LX0NOVCBiaXQpICovCgljbXBsICAgICRST1cxMV9EQVRBLCAlZWJ4ICAgICAgICAvKiBvbmx5IG90aGVyIGxlZ2l0aW1hdGUgdmFsdWVzIGFyZSAxMSAqLwoJanogICAgICBvbmx5MgoJY21wbCAgICAkUk9XMTJfREFUQSwgJWVieCAgICAgICAgLyogYW5kIDEyICovCglqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiBpdHMgYmFkIGlmIG5vdCAxMSBvciAxMiEgKi8KCgkvKiBmYWxsIHRocm91Z2ggKi8Kb25seTI6CiAvKgogICogdmFsaWRhdGUgcm93IG1hc2sKICAqLwoJbW92bCAgICAkUk9XMTRfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgYmFjayB0byBtYXggcm93IHdyYXAgYWRkciAqLwoJbW92bCAgICAoJWVzaSksICVlYXggICAgICAgICAgICAgLyogcmVhZCBhY3R1YWwgbnVtYmVyIG9mIHJvd3MgQCByb3cxNCBhZHIgKi8KCgljbXBsICAgICRST1cxMV9EQVRBLCAlZWF4ICAgICAgICAvKiByb3cgbXVzdCBiZSBncmVhdGVyIHRoYW4gMTEgcGF0dGVybiAqLwoJamIgICAgICBiYWRfcmFtCgoJY21wbCAgICAkUk9XMTRfREFUQSwgJWVheCAgICAgICAgLyogYW5kIHJvdyBtdXN0IGJlIGxlc3MgdGhhbiAxNCBwYXR0ZXJuICovCglqYSAgICAgIGJhZF9yYW0KCgljbXBiICAgICVhaCwlYWwgICAgICAgICAgICAgICAgICAvKiB2ZXJpZnkgYWxsIDQgYnl0ZXMgb2YgZHdvcmQgc2FtZSAqLwoJam56ICAgICBiYWRfcmFtCgltb3ZsICAgICVlYXgsJWVieAoJc2hybCAgICAkMTYsJWVieAoJY21wdyAgICAlYngsJWF4CglqbnogICAgIGJhZF9yYW0KIC8qCiAgKiByZWFkIGNvbCAxMSB3cmFwIGFkciBmb3IgcmVhbCBjb2x1bW4gZGF0YSB2YWx1ZQogICovCgltb3ZsICAgICRDT0wxMV9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggY29sICgxMSkgd3JhcCBhZGRyICovCgltb3ZsICAgICglZXNpKSwgJWVheCAgICAgICAgICAgICAvKiByZWFkIHJlYWwgY29sIG51bWJlciBhdCBtYXggY29sIGFkciAqLwogLyoKICAqIHZhbGlkYXRlIGNvbHVtbiBkYXRhCiAgKi8KCWNtcGwgICAgJENPTDA4X0RBVEEsICVlYXggICAgICAgIC8qIGNvbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiA4IHBhdHRlcm4gKi8KCWpiICAgICAgYmFkX3JhbQoKCWNtcGwgICAgJENPTDExX0RBVEEsICVlYXggICAgICAgIC8qIGFuZCByb3cgbXVzdCBiZSBsZXNzIHRoYW4gMTEgcGF0dGVybiAqLwoJamEgICAgICBiYWRfcmFtCgoJc3VibCAgICAkQ09MMDhfREFUQSwgJWVheCAgICAgICAgLyogbm9ybWFsaXplIGNvbHVtbiBkYXRhIHRvIHplcm8gKi8KCWpjICAgICAgYmFkX3JhbQoJY21wYiAgICAlYWgsJWFsICAgICAgICAgICAgICAgICAgLyogdmVyaWZ5IGFsbCA0IGJ5dGVzIG9mIGR3b3JkIGVxdWFsICovCglqbnogICAgIGJhZF9yYW0KCW1vdmwgICAgJWVheCwlZWR4CglzaHJsICAgICQxNiwlZWR4CgljbXB3ICAgICVkeCwlYXgKCWpueiAgICAgYmFkX3JhbQogLyoKICAqIG1lcmdlIGJhbmsgYW5kIGNvbCBkYXRhIHRvZ2V0aGVyCiAgKi8KCWFkZHcgICAgJWRpLCVkeCAgICAgICAgICAgICAgICAgIC8qIG1lcmdlIG9mIGJhbmsgYW5kIGNvbCBpbmZvIGluIGRsICovCiAvKgogICogZml4IGVuZGluZyBhZGRyIG1hc2sgYmFzZWQgdXBvbiBjb2wgaW5mbwogICovCgltb3ZiICAgICQzLCVhbAoJc3ViYiAgICAlZGgsJWFsICAgICAgICAgICAgICAgICAgLyogZGggY29udGFpbnMgdGhlIG92ZXJmbG93IGZyb20gdGhlIGJhbmsvY29sIG1lcmdlICAqLwoJbW92YiAgICAlYmwsJWRoICAgICAgICAgICAgICAgICAgLyogYmwgY29udGFpbnMgdGhlIHJvdyBtYXNrIChhYSwgMDcsIDBmLCAxZiBvciAzZikgKi8KCXhjaGd3ICAgJWN4LCVheCAgICAgICAgICAgICAgICAgIC8qIGN4ID0gYXggPSAzIG9yIDIgZGVwZW5kaW5nIG9uIDIgb3IgNCBiYW5rIGRldmljZSAqLwoJc2hyYiAgICAlY2wsJWRoCSAgICAgICAgICAgICAgICAgLyogICovCglpbmNiICAgICVkaCAgICAgICAgICAgICAgICAgICAgICAvKiBlbmRpbmcgYWRkciBpcyAxIGdyZWF0ZXIgdGhhbiByZWFsIGVuZCAqLwoJeGNoZ3cgICAlY3gsJWF4ICAgICAgICAgICAgICAgICAgLyogY3ggaXMgYmFuayBudW1iZXIgYWdhaW4gKi8KIC8qCiAgKiBpc3N1ZSBhbGwgYmFua3MgcHJlY2hhcmdlCiAgKi8KYmFkX3JlaW50OgoJbW92bCAgICAkRFJDQ1RMLCAlZXNpICAgICAgICAgICAgLyogc2V0dXAgRFJBTSBjb250cm9sIHJlZ2lzdGVyIHdpdGggKi8KCW1vdmIgICAgJDB4MiwlYWwgICAgICAgICAgICAgICAgIC8qIEFsbCBiYW5rcyBwcmVjaGFyZ2UgKi8KCW1vdmIgICAgICVhbCwgKCVlc2kpCgltb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBhZGRyZXNzIHRvIGluaXQgcmVhZCBidWZmZXIgKi8KCW1vdncgICAgICVheCwgKCVlc2kpCgogLyoKICAqIHVwZGF0ZSBFTkRJTkcgQUREUkVTUyBSRUdJU1RFUgogICovCgltb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICovCgltb3ZsICAgICVlY3gsJWVieAoJYWRkbAklZWJ4LCAlZWRpCgltb3ZiICAgICVkaCwgKCVlZGkpCiAvKgogICogdXBkYXRlIENPTkZJRyBSRUdJU1RFUgogICovCgl4b3JiICAgICVkaCwlZGgKCW1vdncgICAgJDB4MDBmLCVieAoJbW92dyAgICAlY3gsJWF4CglzaGx3ICAgICQyLCVheAoJeGNoZ3cgICAlY3gsJWF4CglzaGx3ICAgICVjbCwlZHgKCXNobHcgICAgJWNsLCVieAoJbm90dyAgICAlYngKCXhjaGd3ICAgJWN4LCVheAoJbW92bCAgICAkRFJDQ0ZHLCAlZWRpCgltb3YgICAgICglZWRpKSwgJWF4CglhbmR3ICAgICVieCwlYXgKCW9ydyAgICAgJWR4LCVheAoJbW92dyAgICAlYXgsICglZWRpKQoJamN4eiAgICBjbGVhbnVwCgoJZGVjdyAgICAlY3gKCW1vdmwgICAgJWVjeCwlZWJ4Cgltb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICovCgltb3ZiICAgICQweGZmLCVhbAoJYWRkbAklZWJ4LCAlZWRpCgltb3ZiICAgICVhbCwgKCVlZGkpCiAvKgogICogc2V0IGNvbnRyb2wgcmVnaXN0ZXIgdG8gTk9STUFMIG1vZGUKICAqLwoJbW92bCAgICAkRFJDQ1RMLCAlZXNpICAgICAgICAgICAgLyogc2V0dXAgRFJBTSBjb250cm9sIHJlZ2lzdGVyIHdpdGggKi8KCW1vdmIgICAgJDB4MCwlYWwgICAgICAgICAgICAgICAgIC8qIE5vcm1hbCBtb2RlIHZhbHVlICovCgltb3ZiICAgICVhbCwgKCVlc2kpCgltb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBhZGRyZXNzIHRvIGluaXQgcmVhZCBidWZmZXIgKi8KCW1vdncgICAgJWF4LCAoJWVzaSkKCWptcCAgICAgbmV4dGJhbmsKCmNsZWFudXA6Cgltb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICAqLwoJbW92dyAgICAkNCwlY3gKCXhvcncgICAgJWF4LCVheApjbGVhbnVwbHA6Cgltb3ZiICAgKCVlZGkpLCAlYWwKCW9yYiAgICAgJWFsLCVhbAoJanogICAgICBlbXB0eWJhbmsKCglhZGRiICAgICVhaCwlYWwKCWpucyAgICAgbm90dG9vbXVjaAoKCW1vdmIgICAgJDB4N2YsJWFsCm5vdHRvb211Y2g6Cgltb3ZiICAgICVhbCwlYWgKCW9yYiAgICAgJDB4ODAsJWFsCgltb3ZiICAgICVhbCwgKCVlZGkpCmVtcHR5YmFuazoKCWluY2wgICAgJWVkaQoJbG9vcCAgICBjbGVhbnVwbHAKCiNpZiBkZWZpbmVkIENGR19TRFJBTV9EUkNUTUNUTAoJLyoganVzdCBoYXZlIHlvdXIgaGFyZHdhcmUgZGVzaW5nZXIgX0dJVkVfIHlvdSB3aGF0IHlvdSBuZWVkIGhlcmUhICovCgltb3ZsICAgICREUkNUTUNUTCwgJWVkaQoJbW92YiAgICAkQ0ZHX1NEUkFNX0RSQ1RNQ1RMLCVhbAoJbW92YiAgICAoJWVkaSksICVhbAojZWxzZQojaWYgZGVmaW5lZChDRkdfU0RSQU1fQ0FTX0xBVEVOQ1lfMlQpIHx8IGRlZmluZWQoQ0ZHX1NEUkFNX0NBU19MQVRFTkNZXzNUKQoJLyogc2V0IHRoZSBDQVMgbGF0ZW5jeSBub3cgc2luY2UgaXQgaXMgaGFyZCB0byBkbwoJICogd2hlbiB3ZSBydW4gZnJvbSB0aGUgUkFNICovCgltb3ZsICAgICREUkNUTUNUTCwgJWVkaSAgICAgICAgICAvKiBEUkFNIHRpbWluZyByZWdpc3RlciAqLwoJbW92YiAgICAoJWVkaSksICVhbAojaWZkZWYgQ0ZHX1NEUkFNX0NBU19MQVRFTkNZXzJUCglhbmRiICAgICQweGVmLCAlYWwKI2VuZGlmCiNpZmRlZiBDRkdfU0RSQU1fQ0FTX0xBVEVOQ1lfM1QKCW9yYiAgICAgJDB4MTAsICVhbAojZW5kaWYKCW1vdmIgICAgJWFsLCAoJWVkaSkKI2VuZGlmCiNlbmRpZgoJbW92bCAgICAkRFJDQ1RMLCAlZWRpICAgICAgICAgICAgLyogRFJBTSBDb250cm9sIHJlZ2lzdGVyICovCgltb3ZiICAgICQweDMsJWFsICAgICAgICAgICAgICAgICAvKiBMb2FkIG1vZGUgcmVnaXN0ZXIgY21kICovCgltb3ZiICAgICAlYWwsICglZWRpKQoJbW92dyAgICAgJWF4LCAoJWVzaSkKCgoJbW92bCAgICAkRFJDQ1RMLCAlZWRpICAgICAgICAgICAgLyogRFJBTSBDb250cm9sIHJlZ2lzdGVyICovCgltb3ZiICAgICQweDE4LCVhbCAgICAgICAgICAgICAgICAvKiAgRW5hYmxlIHJlZnJlc2ggYW5kIE5PUk1BTCBtb2RlICovCgltb3ZiICAgICVhbCwgKCVlZGkpCgoJam1wICAgICBkcmFtX2RvbmUKCmJhZF9yYW06Cgl4b3JsICAgICVlZHgsJWVkeAoJeG9ybCAgICAlZWRpLCVlZGkKCWptcCAgICAgYmFkX3JlaW50CgpkcmFtX2RvbmU6CgoJLyogcmVhZGJhY2sgRFJDQkVOREFEUiBhbmQgcmV0dXJuIHRoZSBudW1iZXIKCSAqIG9mIGF2YWlsYWJsZSByYW0gYnl0ZXMgaW4gJWVheCAqLwoKCW1vdmwgICAgJERSQ0JFTkRBRFIsICVlZGkgICAgICAgIC8qIERSQU0gZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgICovCgoJbW92bAkoJWVkaSksICVlYXgKCW1vdmwJJWVheCwgJWVjeAoJYW5kbAkkMHg4MDAwMDAwMCwgJWVjeAoJanoJYmFuazIKCWFuZGwJJDB4N2YwMDAwMDAsICVlYXgKCXNocmwJJDIsICVlYXgKCW1vdmwJJWVheCwgJWVieAoKYmFuazI6IAltb3ZsCSglZWRpKSwgJWVheAoJbW92bAklZWF4LCAlZWN4CglhbmRsCSQweDAwODAwMDAwLCAlZWN4CglqegliYW5rMQoJYW5kbAkkMHgwMDdmMDAwMCwgJWVheAoJc2hsbAkkNiwgJWVheAoJbW92bAklZWF4LCAlZWJ4CgpiYW5rMTogCW1vdmwJKCVlZGkpLCAlZWF4Cgltb3ZsCSVlYXgsICVlY3gKCWFuZGwJJDB4MDAwMDgwMDAsICVlY3gKCWp6CWJhbmswCglhbmRsCSQweDAwMDA3ZjAwLCAlZWF4CglzaGxsCSQxNCwgJWVheAoJbW92bAklZWF4LCAlZWJ4CgpiYW5rMDogCW1vdmwJKCVlZGkpLCAlZWF4Cgltb3ZsCSVlYXgsICVlY3gKCWFuZGwJJDB4MDAwMDAwODAsICVlY3gKCWp6CWRvbmUKCWFuZGwJJDB4MDAwMDAwN2YsICVlYXgKCXNobGwJJDIyLCAlZWF4Cgltb3ZsCSVlYXgsICVlYngKCgpkb25lOgoJbW92bAklZWJ4LCAlZWF4CgojaWYgQ0ZHX1NEUkFNX0VDQ19FTkFCTEUKCS8qIEEgbm9taW5hbCBtZW1vcnkgdGVzdDoganVzdCBhIGJ5dGUgYXQgZWFjaCBhZGRyZXNzIGxpbmUgKi8KCW1vdmwgICAgJWVheCwgJWVjeAoJc2hybCAgICAkMHgxLCAlZWN4Cgltb3ZsCSQweDEsICVlZGkKbWVtdGVzdDA6Cgltb3ZiCSQweGE1LCAoJWVkaSkKCWNtcGIgICAgJDB4YTUsICglZWRpKQoJam5lCW91dAoJc2hybAkkMSwgJWVjeAoJYW5kbAklZWN4LCVlY3gKCWp6CXNldF9lY2MKCXNobGwJJDEsICVlZGkKCWptcAltZW10ZXN0MAoKc2V0X2VjYzoKCS8qIGNsZWFyIGFsbCByYW0gd2l0aCBhIG1lbXNldCAqLwoJbW92bAklZWF4LCAlZWN4Cgl4b3JsCSVlc2ksICVlc2kKCXhvcmwJJWVkaSwgJWVkaQoJeG9ybAklZWF4LCAlZWF4CglzaHJsCSQyLCAlZWN4CgljbGQKCXJlcCAJc3Rvc2wKCQkJLyogZW5hYmxlIHJlYWQsIHdyaXRlIGJ1ZmZlcnMgKi8KCW1vdmIgICAgJDB4MTEsICVhbAoJbW92bCAgICAkREJDVEwsICVlZGkKCW1vdmIgICAgJWFsLCAoJWVkaSkKCQkJLyogZW5hYmxlIE5NSSBtYXBwaW5nIGZvciBFQ0MgKi8KCW1vdmwgICAgJEVDQ0lOVCwgJWVkaQoJbW92CSQweDEwLCAlYWwKCW1vdmIgICAgJWFsLCAoJWVkaSkKCQkJLyogVHVybiBvbiBFQ0MgKi8KCW1vdmwgICAgJEVDQ0NUTCwgJWVkaQoJbW92CSQweDA1LCAlYWwKCW1vdmIgICAgJWFsLCAoJWVkaSkKI2VuZGlmCm91dDoKCW1vdmwJJWVieCwgJWVheAoJam1wCSolZWJwCgojZW5kaWYgLyogQ09ORklHX1NDNTIwICovCg==