LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCIDxkYW5pZWxAb21pY3Jvbi5zZT4uCiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKLyogVGhpcyBmaWxlIGlzIGxhcmdlbHkgYmFzZWQgb24gY29kZSBvYnRuZWQgZnJvbSBBTUQuIEFNRCdzIG9yaWdpbmFsCiAqIGNvcHlyaWdodCBpcyBpbmNsdWRlZCBiZWxvdyAKICovCgovKgogKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICogICBDb3B5cmlnaHQgMTk5OSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICogIFRoaXMgc29mdHdhcmUgaXMgdGhlIHByb3BlcnR5IG9mIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYyAgKEFNRCkgIHdoaWNoIAogKiAgc3BlY2lmaWNhbGx5IGdyYW50cyB0aGUgdXNlciB0aGUgcmlnaHQgdG8gbW9kaWZ5LCB1c2UgYW5kIGRpc3RyaWJ1dGUgdGhpcyAKICogIHNvZnR3YXJlIHByb3ZpZGVkIHRoaXMgQ09QWVJJR0hUIE5PVElDRSBpcyBub3QgcmVtb3ZlZCBvciBhbHRlcmVkLiAgQWxsIAogKiAgb3RoZXIgcmlnaHRzIGFyZSByZXNlcnZlZCBieSBBTUQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAqICBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWSAKICogIE9GIEFOWSBLSU5EIElOQ0xVRElORyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgTk9OSU5GUklOR0VNRU5UIE9GIAogKiAgVEhJUkQtUEFSVFkgSU5URUxMRUNUVUFMIFBST1BFUlRZLCBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgogKiAgSU4gTk8gRVZFTlQgU0hBTEwgQU1EIE9SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCiAqICAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgUFJPRklUUywgQlVTSU5FU1MKICogIElOVEVSUlVQVElPTiwgTE9TUyBPRiBJTkZPUk1BSVRPTikgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkKICogIFRPIFVTRSBUSEUgTUFURVJJQUxTLCBFVkVOIElGIEFNRCBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogKiAgU1VDSCBEQU1BR0VTLiAgQkVDQVVTRSBTT01FIEpVUlNJRElDVElPTlMgUFJPSElCSVQgVEhFIEVYQ0xVU0lPTiBPUgogKiAgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgRk9SIENPTlNFUVVFTlRJQUwgT1IgSU5DSURFTlRBTCBEQU1BR0VTLCBUSEUgQUJPVkUKICogIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCiAqIAogKiAgQU1EIGRvZXMgbm90IGFzc3VtZSBhbnkgcmVzcG9uc2liaWxpdHkgZm9yIGFueSBlcnJvcnMgdGhhdCBtYXkgYXBwZWFyIGluCiAqICB0aGUgTWF0ZXJpYWxzIG5vciBhbnkgcmVzcG9uc2liaWxpdHkgdG8gc3VwcG9ydCBvciB1cGRhdGUgdGhlIE1hdGVyaWFscy4KICogIEFNRCByZXRhaW5zIHRoZSByaWdodCB0byBtYWtlIGNoYW5nZXMgdG8gaXRzIHRlc3Qgc3BlY2lmaWNhdGlvbnMgYXQgYW55CiAqICB0aW1lLCB3aXRob3V0IG5vdGljZS4KICogCiAqICBTbyB0aGF0IGFsbCBtYXkgYmVuZWZpdCBmcm9tIHlvdXIgZXhwZXJpZW5jZSwgcGxlYXNlIHJlcG9ydCAgYW55ICBwcm9ibGVtcyAKICogIG9yIHN1Z2dlc3Rpb25zIGFib3V0IHRoaXMgc29mdHdhcmUgYmFjayB0byBBTUQuICBQbGVhc2UgaW5jbHVkZSB5b3VyIG5hbWUsIAogKiAgY29tcGFueSwgIHRlbGVwaG9uZSBudW1iZXIsICBBTUQgcHJvZHVjdCByZXF1aXJpbmcgc3VwcG9ydCBhbmQgcXVlc3Rpb24gb3IgCiAqICBwcm9ibGVtIGVuY291bnRlcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogKiAgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgICAgICAgIFdvcmxkd2lkZSBzdXBwb3J0IGFuZCBjb250YWN0ICAgICAgICAgICAKICogIEVtYmVkZGVkIFByb2Nlc3NvciBEaXZpc2lvbiAgICAgICAgICAgIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBhdDogICAgICAgICAgICAgICAKICogIFN5c3RlbXMgRW5naW5lZXJpbmcgICAgICAgICAgICAgICAgICAgICAgIGVwZC5zdXBwb3J0QGFtZC5jb20KICogIDUyMDQgRS4gQmVuIFdoaXRlIEJsdmQuICAgICAgICAgICAgICAgICAgICAgICAgICAtb3ItCiAqICBBdXN0aW4sIFRYIDc4NzQxICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYW1kLmNvbS9odG1sL3N1cHBvcnQvdGVjaHN1cC5odG1sCiAqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCSBBVVRIT1IgICAgICA6IEJ1ZGR5IEZleSAtIE9yaWdpbmFsLiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgRlVOQ1RJT05BTCBERVNDUklQVElPTjoKICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBhdXRvZGV0ZWN0IHRoZSBnZW9tZXRyeSBvZiB0aGUgRFJBTS4KICoKICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBjb2x1bW4gYml0cyBmb3IgdGhlIERSQU0KICogZGV2aWNlcyBpbiB0aGlzIGV4dGVybmFsIGJhbmsuIFRoaXMgcm91dGluZSBhc3N1bWVzIHRoYXQgdGhlIGV4dGVybmFsIGJhbmsKICogaGFzIGJlZW4gY29uZmlndXJlZCBmb3IgYW4gMTEtYml0IGNvbHVtbiBhbmQgZm9yIDQgaW50ZXJuYWwgYmFua3MuIFRoaXMgZ2l2ZXMKICogdXMgdGhlIG1heGltdW0gYWRkcmVzcyByZWFjaCBpbiBtZW1vcnkuIEJ5IHdyaXRpbmcgYSB0ZXN0IHZhbHVlIHRvIHRoZSBtYXgKICogYWRkcmVzcyBhbmQgbG9jYXRpbmcgd2hlcmUgaXQgYWxpYXNlcyB0bywgd2UgY2FuIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHZhbGlkCiAqIGNvbHVtbiBiaXRzLgogKgogKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGludGVybmFsIGJhbmtzIGVhY2ggRFJBTQogKiBkZXZpY2UgaGFzLiBUaGUgZXh0ZXJuYWwgYmFuayAodW5kZXIgdGVzdCkgaXMgY29uZmlndXJlZCBmb3IgbWF4aW11bSByZWFjaAogKiB3aXRoIDExLWJpdCBjb2x1bW5zIGFuZCA0IGludGVybmFsIGJhbmtzLiBUaGlzIHJvdXRpbmUgd2lsbCB3cml0ZSB0byBhIG1heAogKiBhZGRyZXNzIChCQTEgYW5kIEJBMCA9IDEpIGFuZCB0aGVuIHJlYWQgZnJvbSBhbiBhZGRyZXNzIHdpdGggQkExPTAgdG8gc2VlIGlmCiAqIHRoYXQgY29sdW1uIGlzIGEgImRvbid0IGNhcmUiLiBJZiBCQTEgZG9lcyBub3QgYWZmZWN0IHdyaXRlL3JlYWQgb2YgZGF0YSwKICogdGhlbiB0aGlzIGRldmljZSBoYXMgb25seSAyIGludGVybmFsIGJhbmtzLgogKgogKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGRldGVybWluZSB0aGUgZW5kaW5nIGFkZHJlc3MgZm9yIHRoaXMgZXh0ZXJuYWwKICogYmFuayBvZiBTRFJBTS4gV2Ugd3JpdGUgdG8gYSBtYXggYWRkcmVzcyB3aXRoIGEgZGF0YSB2YWx1ZSBhbmQgdGhlbiBkaXNhYmxlCiAqIHJvdyBhZGRyZXNzIGJpdHMgbG9va2luZyBmb3IgImRvbid0IGNhcmUiIGxvY2F0aW9ucy4gRWFjaCAiZG9uJ3QgY2FyZSIgYml0CiAqIHJlcHJlc2VudHMgYSBkaXZpZGluZyBvZiB0aGUgbWF4aW11bSBkZW5zaXR5ICgxMjhNKSBieSAyLiBCeSBkaXZpZGluZyB0aGUKICogbWF4aW11bSBvZiAzMiA0TSBjaHVua3MgaW4gYW4gZXh0ZXJuYWwgYmFuayBkb3duIGJ5IGFsbCB0aGUgImRvbid0IGNhcmUiIGJpdHMKICogZGV0ZXJtaW5lZCBkdXJpbmcgc2l6aW5nLCB3ZSBzZXQgdGhlIHByb3BlciBkZW5zaXR5LgogKgogKiBXQVJOSU5HUy4KICogYnAgbXVzdCBiZSBwcmVzZXJ2ZWQgYmVjYXVzZSBpdCBpcyB1c2VkIGZvciByZXR1cm4gbGlua2FnZS4KICoKICogRVhJVAogKiBub3RoaW5nIHJldHVybmVkIC0gYnV0IHRoZSBtZW1vcnkgc3Vic3lzdGVtIGlzIGVuYWJsZWQKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgouc2VjdGlvbiAudGV4dAouZXF1ICAgICAgICAgICAgRFJDQ1RMLCAgICAgMHgwZmZmZWYwMTAgICAvKiBEUkFNIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLmVxdSAgICAgICAgICAgIERSQ1RNQ1RMLCAgIDB4MGZmZmVmMDEyICAgLyogRFJBTSB0aW1pbmcgY29udHJvbCByZWdpc3RlciAqLwouZXF1ICAgICAgICAgICAgRFJDQ0ZHLCAgICAgMHgwZmZmZWYwMTQgICAvKiBEUkFNIGJhbmsgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLwouZXF1ICAgICAgICAgICAgRFJDQkVOREFEUiwgMHgwZmZmZWYwMTggICAvKiBEUkFNIGJhbmsgZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgKi8KLmVxdSAgICAgICAgICAgIEVDQ0NUTCwgICAgIDB4MGZmZmVmMDIwICAgLyogRFJBTSBFQ0MgY29udHJvbCByZWdpc3RlciAqLwouZXF1ICAgICAgICAgICAgREJDVEwsICAgICAgMHgwZmZmZWYwNDAgICAvKiBEUkFNIGJ1ZmZlciBjb250cm9sIHJlZ2lzdGVyICovCgouZXF1ICAgICAgICAgICAgQ0FDSEVMSU5FU1osIDB4MDAwMDAwMTAgICAvKiBzaXplIG9mIG91ciBjYWNoZSBsaW5lIChyZWFkIGJ1ZmZlcikgKi8KLmVxdSAgICAgICAgICAgIENPTDExX0FEUiwgIDB4MGUwMDFlMDAgICAgLyogMTEgY29sIGFkZHJzICovCi5lcXUgICAgICAgICAgICBDT0wxMF9BRFIsICAweDBlMDAwZTAwICAgIC8qIDEwIGNvbCBhZGRycyAqLwouZXF1ICAgICAgICAgICAgQ09MMDlfQURSLCAgMHgwZTAwMDYwMCAgICAvKiAgOSBjb2wgYWRkcnMgKi8KLmVxdSAgICAgICAgICAgIENPTDA4X0FEUiwgIDB4MGUwMDAyMDAgICAgLyogIDggY29sIGFkZHJzICovCi5lcXUgICAgICAgICAgICBST1cxNF9BRFIsICAweDBmMDAwMDAwICAgIC8qIDE0IHJvdyBhZGRycyAqLwouZXF1ICAgICAgICAgICAgUk9XMTNfQURSLCAgMHgwNzAwMDAwMCAgICAvKiAxMyByb3cgYWRkcnMgKi8KLmVxdSAgICAgICAgICAgIFJPVzEyX0FEUiwgIDB4MDMwMDAwMDAgICAgLyogMTIgcm93IGFkZHJzICovCi5lcXUgICAgICAgICAgICBST1cxMV9BRFIsICAweDAxMDAwMDAwICAgIC8qIDExIHJvdyBhZGRycy9hbHNvIGJhbmsgc3dpdGNoICovCi5lcXUgICAgICAgICAgICBST1cxMF9BRFIsICAweDAwMDAwMDAwICAgIC8qIDEwIHJvdyBhZGRycy9hbHNvIGJhbmsgc3dpdGNoICovCi5lcXUgICAgICAgICAgICBDT0wxMV9EQVRBLCAweDBiMGIwYjBiICAgIC8qIDExIGNvbCBhZGRycyAqLwouZXF1ICAgICAgICAgICAgQ09MMTBfREFUQSwgMHgwYTBhMGEwYSAgICAvKiAxMCBjb2wgZGF0YSAqLwouZXF1ICAgICAgICAgICAgQ09MMDlfREFUQSwgMHgwOTA5MDkwOSAgICAvKiAgOSBjb2wgZGF0YSAqLwouZXF1ICAgICAgICAgICAgQ09MMDhfREFUQSwgMHgwODA4MDgwOCAgICAvKiAgOCBjb2wgZGF0YSAqLwouZXF1ICAgICAgICAgICAgUk9XMTRfREFUQSwgMHgzZjNmM2YzZiAgICAvKiAxNCByb3cgZGF0YSAoTUFTSykgKi8KLmVxdSAgICAgICAgICAgIFJPVzEzX0RBVEEsIDB4MWYxZjFmMWYgICAgLyogMTMgcm93IGRhdGEgKE1BU0spICovCi5lcXUgICAgICAgICAgICBST1cxMl9EQVRBLCAweDBmMGYwZjBmICAgIC8qIDEyIHJvdyBkYXRhIChNQVNLKSAqLwouZXF1ICAgICAgICAgICAgUk9XMTFfREFUQSwgMHgwNzA3MDcwNyAgICAvKiAxMSByb3cgZGF0YS9hbHNvIGJhbmsgc3dpdGNoIChNQVNLKSAqLwouZXF1ICAgICAgICAgICAgUk9XMTBfREFUQSwgMHhhYWFhYWFhYSAgICAvKiAxMCByb3cgZGF0YS9hbHNvIGJhbmsgc3dpdGNoIChNQVNLKSAqLwoKCiAvKgogICogaW5pdGlhbGl6ZSBkcmFtIGNvbnRyb2xsZXIgcmVnaXN0ZXJzCiAgKi8KLmdsb2JsIG1lbV9pbml0Cm1lbV9pbml0OiAKICAgICAgICB4b3J3ICAgICVheCwlYXgKICAgICAgICBtb3ZsICAgICREQkNUTCwgJWVkaSAgICAgICAgICAgICAKZnMJbW92YiAgICAgJWFsLCAoJWVkaSkgICAgICAgICAgICAgLyogZGlzYWJsZSB3cml0ZSBidWZmZXIgKi8KCiAgICAgICAgbW92bCAgICAkRUNDQ1RMLCAlZWRpICAgICAgICAgICAgCmZzCW1vdmIgICAgICVhbCwgKCVlZGkpICAgICAgICAgICAgIC8qIGRpc2FibGUgRUNDICovCgogICAgICAgIG1vdmwgICAgJERSQ1RNQ1RMLCAlZWRpICAgICAgICAgICAKICAgICAgICBtb3ZiICAgICQweDFFLCVhbCAgICAgICAgICAgICAgICAvKiBTZXQgU0RSQU0gdGltaW5nIGZvciBzbG93ZXN0ICovCmZzCW1vdmIgICAgICVhbCwgKCVlZGkpCgogLyoKICAqIHNldHVwIGxvb3AgdG8gZG8gNCBleHRlcm5hbCBiYW5rcyBzdGFydGluZyB3aXRoIGJhbmsgMwogICovCiAgICAgICAgbW92bCAgICAkMHhmZjAwMDAwMCwlZWF4ICAgICAgICAgLyogZW5hYmxlIGxhc3QgYmFuayBhbmQgc2V0dXAgKi8KICAgICAgICBtb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLwpmcwltb3ZsICAgICAlZWF4LCAoJWVkaSkKCiAgICAgICAgbW92bCAgICAkRFJDQ0ZHLCAlZWRpICAgICAgICAgICAgLyogc2V0dXAgKi8KICAgICAgICBtb3Z3ICAgICQweGJiYmIsJWF4ICAgICAgICAgICAgICAvKiBkcmFtIGNvbmZpZyByZWdpc3RlciBmb3IgICovCmZzCW1vdncgICAgJWF4LCAoJWVkaSkKCiAvKgogICogaXNzdWUgYSBOT1AgdG8gYWxsIERSQU1zCiAgKi8KICAgICAgICBtb3ZsICAgICREUkNDVEwsICVlZGkgICAgICAgICAgICAvKiBzZXR1cCBEUkFNIGNvbnRyb2wgcmVnaXN0ZXIgd2l0aCAqLwogICAgICAgIG1vdmIgICAgJDB4MSwlYWwgICAgICAgICAgICAgICAgIC8qIERpc2FibGUgcmVmcmVzaCxkaXNhYmxlIHdyaXRlIGJ1ZmZlciAqLyAKZnMJbW92YiAgICAgJWFsLCAoJWVkaSkKICAgICAgICBtb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBqdXN0IGEgZHVtbXkgYWRkcmVzcyB0byB3cml0ZSBmb3IgKi8gCmZzCW1vdncgICAgICVheCwgKCVlc2kpCiAvKgogICogZGVsYXkgZm9yIDEwMCB1c2VjPyAyMDA/CiAgKiAqKioqKip0aGlzIGlzIGEgY2x1ZGdlIGZvciBub3cgKioqKioqKioqKioqKgogICovCiAgICAgICAgbW92dyAgICAkMTAwLCVjeApzaXpkZWxheTogCiAgICAgICAgbG9vcCAgICBzaXpkZWxheSAgICAgICAgICAgICAgICAgLyogd2UgbmVlZCAxMDAgdXNlYyBoZXJlICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogLyoKICAqIGlzc3VlIGFsbCBiYW5rcyBwcmVjaGFyZ2UKICAqLwogICAgICAgIG1vdmIgICAgJDB4MiwlYWwgICAgICAgICAgICAgICAgIC8qIEFsbCBiYW5rcyBwcmVjaGFyZ2UgKi8KZnMJbW92YiAgICAgJWFsLCAoJWVkaSkKZnMJbW92dyAgICAgJWF4LCAoJWVzaSkKCiAvKgogICogaXNzdWUgMiBhdXRvIHJlZnJlc2hlcyB0byBhbGwgYmFua3MgCiAgKi8KICAgICAgICBtb3ZiICAgICQweDQsJWFsICAgICAgICAgICAgICAgICAvKiBBdXRvIHJlZnJlc2ggY21kICovCmZzCW1vdmIgICAgICVhbCwgKCVlZGkpCiAgICAgICAgbW92dyAgICAkMiwlY3gKcmVmcmVzaDE6IApmcwltb3Z3ICAgICAlYXgsICglZXNpKQogICAgICAgIGxvb3AgICAgcmVmcmVzaDEKCiAvKgogICogaXNzdWUgTE9BRCBNT0RFIFJFR0lTVEVSIGNvbW1hbmQKICAqLwogICAgICAgIG1vdmIgICAgJDB4MywlYWwgICAgICAgICAgICAgICAgIC8qIExvYWQgbW9kZSByZWdpc3RlciBjbWQgKi8KZnMJbW92YiAgICAgJWFsLCAoJWVkaSkKZnMJbW92dyAgICAgJWF4LCAoJWVzaSkKCiAvKgogICogaXNzdWUgOCBtb3JlIGF1dG8gcmVmcmVzaGVzIHRvIGFsbCBiYW5rcyAKICAqLyAKICAgICAgICBtb3ZiICAgICQweDQsJWFsICAgICAgICAgICAgICAgICAvKiBBdXRvIHJlZnJlc2ggY21kICovCmZzCW1vdmIgICAgICVhbCwgKCVlZGkpCiAgICAgICAgbW92dyAgICAkOCwlY3gKcmVmcmVzaDI6IApmcwltb3Z3ICAgICAlYXgsICglZXNpKQogICAgICAgIGxvb3AgICAgcmVmcmVzaDIKCiAvKgogICogc2V0IGNvbnRyb2wgcmVnaXN0ZXIgdG8gTk9STUFMIG1vZGUgCiAgKi8KICAgICAgICBtb3ZiICAgICQweDAsJWFsICAgICAgICAgICAgICAgICAvKiBOb3JtYWwgbW9kZSB2YWx1ZSAqLwpmcwltb3ZiICAgICAlYWwsICglZWRpKQoKIC8qCiAgKiBzaXplIGRyYW0gc3RhcnRpbmcgd2l0aCBleHRlcm5hbCBiYW5rIDMgbW92aW5nIHRvIGV4dGVybmFsIGJhbmsgMAogICovCiAgICAgICAgbW92bCAgICAkMHgzLCVlY3ggICAgICAgICAgICAgICAgLyogc3RhcnQgd2l0aCBleHRlcm5hbCBiYW5rIDMgKi8KCm5leHRiYW5rOiAKCiAvKgogICogd3JpdGUgY29sIDExIHdyYXAgYWRyCiAgKi8KICAgICAgICBtb3ZsICAgICRDT0wxMV9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggY29sICgxMSkgd3JhcCBhZGRyICovCiAgICAgICAgbW92bCAgICAkQ09MMTFfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgbWF4IHN1cHBvcnRlZCBjb2x1bW5zKDExKSAqLwpmcyAgICAgIG1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIG1heCBjb2wgcGF0dGVybiBhdCBtYXggY29sIGFkciAqLwpmcyAgICAgIG1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KICAgICAgICBqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KIC8qCiAgKiB3cml0ZSBjb2wgMTAgd3JhcCBhZHIKICAqLwoKICAgICAgICBtb3ZsICAgICRDT0wxMF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMCBjb2wgd3JhcCBhZGRyZXNzICovCiAgICAgICAgbW92bCAgICAkQ09MMTBfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTAgY29sIHdyYXAgKi8KZnMgICAgICBtb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMCBjb2wgcGF0dGVybiBAIDEwIGNvbCB3cmFwIGFkciAqLwpmcyAgICAgIG1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KICAgICAgICBqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KIC8qCiAgKiB3cml0ZSBjb2wgOSB3cmFwIGFkcgogICovCiAgICAgICAgbW92bCAgICAkQ09MMDlfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gOSBjb2wgd3JhcCBhZGRyZXNzICovCiAgICAgICAgbW92bCAgICAkQ09MMDlfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgOSBjb2wgd3JhcCAqLwpmcyAgICAgIG1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIDkgY29sIHBhdHRlcm4gQCA5IGNvbCB3cmFwIGFkciAqLwpmcyAgICAgIG1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KICAgICAgICBqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KIC8qCiAgKiB3cml0ZSBjb2wgOCB3cmFwIGFkcgogICovCiAgICAgICAgbW92bCAgICAkQ09MMDhfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gbWluKDgpIGNvbCB3cmFwIGFkZHJlc3MgKi8KICAgICAgICBtb3ZsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciBtaW4gKDgpIGNvbCB3cmFwICovCmZzICAgICAgbW92bCAgICAlZWF4LCAoJWVzaSkgICAgICAgICAgICAgLyogd3JpdGUgbWluIGNvbCBwYXR0ZXJuIEAgbWluIGNvbCBhZHIgKi8KZnMgICAgICBtb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCiAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCiAgICAgICAgam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAvKgogICogd3JpdGUgcm93IDE0IHdyYXAgYWRyCiAgKi8KICAgICAgICBtb3ZsICAgICRST1cxNF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggcm93ICgxNCkgd3JhcCBhZGRyICovCiAgICAgICAgbW92bCAgICAkUk9XMTRfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgbWF4IHN1cHBvcnRlZCByb3dzKDE0KSAqLwpmcyAgICAgIG1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIG1heCByb3cgcGF0dGVybiBhdCBtYXggcm93IGFkciAqLwpmcyAgICAgIG1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KICAgICAgICBqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KIC8qCiAgKiB3cml0ZSByb3cgMTMgd3JhcCBhZHIKICAqLwogICAgICAgIG1vdmwgICAgJFJPVzEzX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEzIHJvdyB3cmFwIGFkZHJlc3MgKi8KICAgICAgICBtb3ZsICAgICRST1cxM19EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMyByb3cgd3JhcCAqLwpmcyAgICAgIG1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIDEzIHJvdyBwYXR0ZXJuIEAgMTMgcm93IHdyYXAgYWRyICovCmZzICAgICAgbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLwogICAgICAgIGNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwogICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogLyoKICAqIHdyaXRlIHJvdyAxMiB3cmFwIGFkcgogICovCiAgICAgICAgbW92bCAgICAkUk9XMTJfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gMTIgcm93IHdyYXAgYWRkcmVzcyAqLwogICAgICAgIG1vdmwgICAgJFJPVzEyX0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIDEyIHJvdyB3cmFwICovCmZzICAgICAgbW92bCAgICAlZWF4LCAoJWVzaSkgICAgICAgICAgICAgLyogd3JpdGUgMTIgcm93IHBhdHRlcm4gQCAxMiByb3cgd3JhcCBhZHIgKi8KZnMgICAgICBtb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCiAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCiAgICAgICAgam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAvKgogICogd3JpdGUgcm93IDExIHdyYXAgYWRyCiAgKi8KICAgICAgICBtb3ZsICAgICRST1cxMV9BRFIsICVlZGkgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMSByb3cgd3JhcCBhZGRyZXNzICovCiAgICAgICAgbW92bCAgICAkUk9XMTFfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTEgcm93IHdyYXAgKi8KZnMgICAgICBtb3ZsICAgICVlYXgsICglZWRpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMSByb3cgcGF0dGVybiBAIDExIHJvdyB3cmFwIGFkciAqLwpmcyAgICAgIG1vdmwgICAgKCVlZGkpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KICAgICAgICBqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KIC8qCiAgKiB3cml0ZSByb3cgMTAgd3JhcCBhZHIgLS0tIHRoaXMgd3JpdGUgaXMgcmVhbGx5IHRvIGRldGVybWluZSBudW1iZXIgb2YgYmFua3MKICAqLwogICAgICAgIG1vdmwgICAgJFJPVzEwX0FEUiwgJWVkaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEwIHJvdyB3cmFwIGFkZHJlc3MgKi8KICAgICAgICBtb3ZsICAgICRST1cxMF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMCByb3cgd3JhcCAoQUEpICovCmZzICAgICAgbW92bCAgICAlZWF4LCAoJWVkaSkgICAgICAgICAgICAgLyogd3JpdGUgMTAgcm93IHBhdHRlcm4gQCAxMCByb3cgd3JhcCBhZHIgKi8KZnMgICAgICBtb3ZsICAgICglZWRpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCiAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCiAgICAgICAgam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAvKgogICogcmVhZCBkYXRhIEAgcm93IDEyIHdyYXAgYWRyIHRvIGRldGVybWluZSAgKiBiYW5rcywgCiAgKiBhbmQgcmVhZCBkYXRhIEAgcm93IDE0IHdyYXAgYWRyIHRvIGRldGVybWluZSAgKiByb3dzLgogICogaWYgZGF0YSBAIHJvdyAxMiB3cmFwIGFkciBpcyBub3QgQUEsIDExIG9yIDEyIHdlIGhhdmUgYmFkIFJBTS4KICAqIGlmIGRhdGEgQCByb3cgMTIgd3JhcCA9PSBBQSwgd2Ugb25seSBoYXZlIDIgYmFua3MsIE5PVCA0IAogICogaWYgZGF0YSBAIHJvdyAxMiB3cmFwID09IDExIG9yIDEyLCB3ZSBoYXZlIDQgYmFua3MsCiAgKi8KICAgICAgICB4b3J3ICAgICVkaSwlZGkgICAgICAgICAgICAgICAgICAvKiB2YWx1ZSBmb3IgMiBiYW5rcyBpbiBESSAqLwpmcyAgICAgIG1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIHJlYWQgZnJvbSAxMiByb3cgd3JhcCB0byBjaGVjayBiYW5rcyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAoZXNpIGlzIHNldHVwIGZyb20gdGhlIHdyaXRlIHRvIHJvdyAxMiB3cmFwKSAqLwogICAgICAgIGNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIGNoZWNrIGZvciBBQSBwYXR0ZXJuICAoZWF4IGhvbGRzIHRoZSBhYSBwYXR0ZXJuKSAqLwogICAgICAgIGp6ICAgICAgb25seTIgICAgICAgICAgICAgICAgICAgIC8qIGlmIHBhdHRlcm4gPT0gQUEsIHdlIG9ubHkgaGF2ZSAyIGJhbmtzICovCgoJLyogNCBiYW5rcyAqLwoJCiAgICAgICAgbW92dyAgICAkOCwlZGkgICAgICAgICAgICAgICAgICAgLyogdmFsdWUgZm9yIDQgYmFua3MgaW4gREkgKEJOS19DTlQgYml0KSAqLwogICAgICAgIGNtcGwgICAgJFJPVzExX0RBVEEsICVlYnggICAgICAgIC8qIG9ubHkgb3RoZXIgbGVnaXRpbWF0ZSB2YWx1ZXMgYXJlIDExICovCiAgICAgICAganogICAgICBvbmx5MgogICAgICAgIGNtcGwgICAgJFJPVzEyX0RBVEEsICVlYnggICAgICAgIC8qIGFuZCAxMiAqLwogICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIGl0cyBiYWQgaWYgbm90IDExIG9yIDEyISAqLwoJCgkvKiBmYWxsIHRocm91Z2ggKi8Kb25seTI6IAogLyoKICAqIHZhbGlkYXRlIHJvdyBtYXNrCiAgKi8KICAgICAgICBtb3ZsICAgICRST1cxNF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyBiYWNrIHRvIG1heCByb3cgd3JhcCBhZGRyICovCmZzICAgICAgbW92bCAgICAoJWVzaSksICVlYXggICAgICAgICAgICAgLyogcmVhZCBhY3R1YWwgbnVtYmVyIG9mIHJvd3MgQCByb3cxNCBhZHIgKi8KCiAgICAgICAgY21wbCAgICAkUk9XMTFfREFUQSwgJWVheCAgICAgICAgLyogcm93IG11c3QgYmUgZ3JlYXRlciB0aGFuIDExIHBhdHRlcm4gKi8KICAgICAgICBqYiAgICAgIGJhZF9yYW0KCiAgICAgICAgY21wbCAgICAkUk9XMTRfREFUQSwgJWVheCAgICAgICAgLyogYW5kIHJvdyBtdXN0IGJlIGxlc3MgdGhhbiAxNCBwYXR0ZXJuICovCiAgICAgICAgamEgICAgICBiYWRfcmFtCgogICAgICAgIGNtcGIgICAgJWFoLCVhbCAgICAgICAgICAgICAgICAgIC8qIHZlcmlmeSBhbGwgNCBieXRlcyBvZiBkd29yZCBzYW1lICovCiAgICAgICAgam56ICAgICBiYWRfcmFtCiAgICAgICAgbW92bCAgICAlZWF4LCVlYngKICAgICAgICBzaHJsICAgICQxNiwlZWJ4CiAgICAgICAgY21wdyAgICAlYngsJWF4CiAgICAgICAgam56ICAgICBiYWRfcmFtCiAvKgogICogcmVhZCBjb2wgMTEgd3JhcCBhZHIgZm9yIHJlYWwgY29sdW1uIGRhdGEgdmFsdWUKICAqLwogICAgICAgIG1vdmwgICAgJENPTDExX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIG1heCBjb2wgKDExKSB3cmFwIGFkZHIgKi8KZnMgICAgICBtb3ZsICAgICglZXNpKSwgJWVheCAgICAgICAgICAgICAvKiByZWFkIHJlYWwgY29sIG51bWJlciBhdCBtYXggY29sIGFkciAqLwogLyoKICAqIHZhbGlkYXRlIGNvbHVtbiBkYXRhCiAgKi8KICAgICAgICBjbXBsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBjb2wgbXVzdCBiZSBncmVhdGVyIHRoYW4gOCBwYXR0ZXJuICovCiAgICAgICAgamIgICAgICBiYWRfcmFtCgogICAgICAgIGNtcGwgICAgJENPTDExX0RBVEEsICVlYXggICAgICAgIC8qIGFuZCByb3cgbXVzdCBiZSBsZXNzIHRoYW4gMTEgcGF0dGVybiAqLwogICAgICAgIGphICAgICAgYmFkX3JhbQoKICAgICAgICBzdWJsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBub3JtYWxpemUgY29sdW1uIGRhdGEgdG8gemVybyAqLwogICAgICAgIGpjICAgICAgYmFkX3JhbQogICAgICAgIGNtcGIgICAgJWFoLCVhbCAgICAgICAgICAgICAgICAgIC8qIHZlcmlmeSBhbGwgNCBieXRlcyBvZiBkd29yZCBlcXVhbCAqLwogICAgICAgIGpueiAgICAgYmFkX3JhbQogICAgICAgIG1vdmwgICAgJWVheCwlZWR4CiAgICAgICAgc2hybCAgICAkMTYsJWVkeAogICAgICAgIGNtcHcgICAgJWR4LCVheAogICAgICAgIGpueiAgICAgYmFkX3JhbQogLyoKICAqIG1lcmdlIGJhbmsgYW5kIGNvbCBkYXRhIHRvZ2V0aGVyCiAgKi8KICAgICAgICBhZGR3ICAgICVkaSwlZHggICAgICAgICAgICAgICAgICAvKiBtZXJnZSBvZiBiYW5rIGFuZCBjb2wgaW5mbyBpbiBkbCAqLwogLyoKICAqIGZpeCBlbmRpbmcgYWRkciBtYXNrIGJhc2VkIHVwb24gY29sIGluZm8KICAqLwogICAgICAgIG1vdmIgICAgJDMsJWFsCiAgICAgICAgc3ViYiAgICAlZGgsJWFsICAgICAgICAgICAgICAgICAgLyogZGggY29udGFpbnMgdGhlIG92ZXJmbG93IGZyb20gdGhlIGJhbmsvY29sIG1lcmdlICAqLwogICAgICAgIG1vdmIgICAgJWJsLCVkaCAgICAgICAgICAgICAgICAgIC8qIGJsIGNvbnRhaW5zIHRoZSByb3cgbWFzayAoYWEsIDA3LCAwZiwgMWYgb3IgM2YpICovCiAgICAgICAgeGNoZ3cgICAlY3gsJWF4ICAgICAgICAgICAgICAgICAgLyogY3ggPSBheCA9IDMgb3IgMiBkZXBlbmRpbmcgb24gMiBvciA0IGJhbmsgZGV2aWNlICovCiAgICAgICAgc2hyYiAgICAlY2wsJWRoCSAgICAgICAgICAgICAgICAgLyogICovCiAgICAgICAgaW5jYiAgICAlZGggICAgICAgICAgICAgICAgICAgICAgLyogZW5kaW5nIGFkZHIgaXMgMSBncmVhdGVyIHRoYW4gcmVhbCBlbmQgKi8KICAgICAgICB4Y2hndyAgICVjeCwlYXggICAgICAgICAgICAgICAgICAvKiBjeCBpcyBiYW5rIG51bWJlciBhZ2FpbiAqLwogLyoKICAqIGlzc3VlIGFsbCBiYW5rcyBwcmVjaGFyZ2UKICAqLwpiYWRfcmVpbnQ6IAogICAgICAgIG1vdmwgICAgJERSQ0NUTCwgJWVzaSAgICAgICAgICAgIC8qIHNldHVwIERSQU0gY29udHJvbCByZWdpc3RlciB3aXRoICovCiAgICAgICAgbW92YiAgICAkMHgyLCVhbCAgICAgICAgICAgICAgICAgLyogQWxsIGJhbmtzIHByZWNoYXJnZSAqLwpmcwltb3ZiICAgICAlYWwsICglZXNpKQogICAgICAgIG1vdmwgICAgJENBQ0hFTElORVNaLCAlZXNpICAgICAgIC8qIGFkZHJlc3MgdG8gaW5pdCByZWFkIGJ1ZmZlciAqLwpmcwltb3Z3ICAgICAlYXgsICglZXNpKQoKIC8qCiAgKiB1cGRhdGUgRU5ESU5HIEFERFJFU1MgUkVHSVNURVIKICAqLwogICAgICAgIG1vdmwgICAgJERSQ0JFTkRBRFIsICVlZGkgICAgICAgIC8qIERSQU0gZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgKi8KICAgICAgICBtb3ZsICAgICVlY3gsJWVieAoJYWRkbAklZWJ4LCAlZWRpCmZzCW1vdmIgICAgJWRoLCAoJWVkaSkKIC8qCiAgKiB1cGRhdGUgQ09ORklHIFJFR0lTVEVSCiAgKi8KICAgICAgICB4b3JiICAgICVkaCwlZGgKICAgICAgICBtb3Z3ICAgICQweDAwZiwlYngKICAgICAgICBtb3Z3ICAgICVjeCwlYXgKICAgICAgICBzaGx3ICAgICQyLCVheAogICAgICAgIHhjaGd3ICAgJWN4LCVheAogICAgICAgIHNobHcgICAgJWNsLCVkeAogICAgICAgIHNobHcgICAgJWNsLCVieAogICAgICAgIG5vdHcgICAgJWJ4CiAgICAgICAgeGNoZ3cgICAlY3gsJWF4CiAgICAgICAgbW92bCAgICAkRFJDQ0ZHLCAlZWRpCmZzCW1vdiAgICAgKCVlZGkpLCAlYXgKICAgICAgICBhbmR3ICAgICVieCwlYXgKICAgICAgICBvcncgICAgICVkeCwlYXgKZnMgICAgICBtb3Z3ICAgICVheCwgKCVlZGkpCiAgICAgICAgamN4eiAgICBjbGVhbnVwCgogICAgICAgIGRlY3cgICAgJWN4CiAgICAgICAgbW92bCAgICAlZWN4LCVlYngKICAgICAgICBtb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICovCiAgICAgICAgbW92YiAgICAkMHhmZiwlYWwKCWFkZGwJJWVieCwgJWVkaQpmcwltb3ZiICAgICVhbCwgKCVlZGkpCiAvKgogICogc2V0IGNvbnRyb2wgcmVnaXN0ZXIgdG8gTk9STUFMIG1vZGUgCiAgKi8KICAgICAgICBtb3ZsICAgICREUkNDVEwsICVlc2kgICAgICAgICAgICAvKiBzZXR1cCBEUkFNIGNvbnRyb2wgcmVnaXN0ZXIgd2l0aCAqLwogICAgICAgIG1vdmIgICAgJDB4MCwlYWwgICAgICAgICAgICAgICAgIC8qIE5vcm1hbCBtb2RlIHZhbHVlICovCmZzCW1vdmIgICAgJWFsLCAoJWVzaSkKICAgICAgICBtb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBhZGRyZXNzIHRvIGluaXQgcmVhZCBidWZmZXIgKi8KZnMJbW92dyAgICAlYXgsICglZXNpKQogICAgICAgIGptcCAgICAgbmV4dGJhbmsKCmNsZWFudXA6IAogICAgICAgIG1vdmwgICAgJERSQ0JFTkRBRFIsICVlZGkgICAgICAgIC8qIERSQU0gZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgICovCiAgICAgICAgbW92dyAgICAkNCwlY3gKICAgICAgICB4b3J3ICAgICVheCwlYXgKY2xlYW51cGxwOiAKZnMJbW92YiAgICglZWRpKSwgJWFsCiAgICAgICAgb3JiICAgICAlYWwsJWFsCiAgICAgICAganogICAgICBlbXB0eWJhbmsKCiAgICAgICAgYWRkYiAgICAlYWgsJWFsCiAgICAgICAgam5zICAgICBub3R0b29tdWNoCgogICAgICAgIG1vdmIgICAgJDB4N2YsJWFsCm5vdHRvb211Y2g6IAogICAgICAgIG1vdmIgICAgJWFsLCVhaAogICAgICAgIG9yYiAgICAgJDB4ODAsJWFsCmZzCW1vdmIgICAgJWFsLCAoJWVkaSkKZW1wdHliYW5rOiAKICAgICAgICBpbmNsICAgICVlZGkKICAgICAgICBsb29wICAgIGNsZWFudXBscAoKI2lmIGRlZmluZWQoQ0ZHX1NEUkFNX0NBU19MQVRFTkNZXzJUKSB8fCBkZWZpbmVkKENGR19TRFJBTV9DQVNfTEFURU5DWV8zVCkKCS8qIHNldCB0aGUgQ0FTIGxhdGVuY3kgbm93IHNpbmNlIGl0IGlzIGhhcmQgdG8gZG8KCSAqIHdoZW4gd2UgcnVuIGZyb20gdGhlIFJBTSAqLwoJbW92bCAgICAkRFJDVE1DVEwsICVlZGkgICAgICAgICAgLyogRFJBTSB0aW1pbmcgcmVnaXN0ZXIgKi8KCW1vdmIgICAgKCVlZGkpLCAlYWwJCiNpZmRlZiBDRkdfU0RSQU1fQ0FTX0xBVEVOQ1lfMlQKCWFuZGIgICAgJDB4ZWYsICVhbAojZW5kaWYKI2lmZGVmIENGR19TRFJBTV9DQVNfTEFURU5DWV8zVAoJb3JiICAgICAkMHgxMCwgJWFsCiNlbmRpZgkgCgltb3ZiICAgICVhbCwgKCVlZGkpCiNlbmRpZgogICAgICAgIG1vdmwgICAgJERSQ0NUTCwgJWVkaSAgICAgICAgICAgIC8qIERSQU0gQ29udHJvbCByZWdpc3RlciAqLwogICAgICAgIG1vdmIgICAgJDB4MywlYWwgICAgICAgICAgICAgICAgIC8qIExvYWQgbW9kZSByZWdpc3RlciBjbWQgKi8KZnMJbW92YiAgICAgJWFsLCAoJWVkaSkKZnMJbW92dyAgICAgJWF4LCAoJWVzaSkKCgogICAgICAgIG1vdmwgICAgJERSQ0NUTCwgJWVkaSAgICAgICAgICAgIC8qIERSQU0gQ29udHJvbCByZWdpc3RlciAqLwogICAgICAgIG1vdmIgICAgJDB4MTgsJWFsICAgICAgICAgICAgICAgIC8qICBFbmFibGUgcmVmcmVzaCBhbmQgTk9STUFMIG1vZGUgKi8KZnMJbW92YiAgICAlYWwsICglZWRpKQoKICAgICAgICBqbXAgICAgIGRyYW1fZG9uZQoKYmFkX3JhbTogCiAgICAgICAgeG9ybCAgICAlZWR4LCVlZHgKICAgICAgICB4b3JsICAgICVlZGksJWVkaQogICAgICAgIGptcCAgICAgYmFkX3JlaW50CgpkcmFtX2RvbmU6IAoJCgkvKiByZWFkYmFjayBEUkNCRU5EQURSIGFuZCByZXR1cm4gdGhlIG51bWJlcgoJICogb2YgYXZhaWxhYmxlIHJhbSBieXRlcyBpbiAlZWF4ICovIAoKICAgICAgICBtb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICAqLwoJCgltb3ZsCSglZWRpKSwgJWVheAoJbW92bAklZWF4LCAlZWN4CglhbmRsCSQweDgwMDAwMDAwLCAlZWN4CglqegliYW5rMgoJYW5kbAkkMHg3ZjAwMDAwMCwgJWVheAoJc2hybAkkMiwgJWVheCAKCW1vdmwJJWVheCwgJWVieAoKYmFuazI6IAltb3ZsCSglZWRpKSwgJWVheAoJbW92bAklZWF4LCAlZWN4CglhbmRsCSQweDAwODAwMDAwLCAlZWN4CglqegliYW5rMQoJYW5kbAkkMHgwMDdmMDAwMCwgJWVheAoJc2hsbAkkNiwgJWVheCAKCW1vdmwJJWVheCwgJWVieAoKYmFuazE6IAltb3ZsCSglZWRpKSwgJWVheAoJbW92bAklZWF4LCAlZWN4CglhbmRsCSQweDAwMDA4MDAwLCAlZWN4CglqegliYW5rMAoJYW5kbAkkMHgwMDAwN2YwMCwgJWVheAoJc2hsbAkkMTQsICVlYXggCgltb3ZsCSVlYXgsICVlYngKCmJhbmswOiAJbW92bAkoJWVkaSksICVlYXgKCW1vdmwJJWVheCwgJWVjeAoJYW5kbAkkMHgwMDAwMDA4MCwgJWVjeAoJanoJZG9uZQoJYW5kbAkkMHgwMDAwMDA3ZiwgJWVheAoJc2hsbAkkMjIsICVlYXggCgltb3ZsCSVlYXgsICVlYngKCmRvbmU6CW1vdmwJJWVieCwgJWVheAoKCWptcAkqJWVicAo=