LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA5IFBhY2tldFZpZGVvCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIKICogZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMKICogYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwovKgogKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLiAKICogCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCiAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QKICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuIAogKiAKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgogKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCiAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCiAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCiAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKICoKICovCgovKiogQGZpbGUgT01YX090aGVyLmggLSBPcGVuTWF4IElMIHZlcnNpb24gMS4xLjIKICogIFRoZSBzdHJ1Y3R1cmVzIG5lZWRlZCBieSBPdGhlciBjb21wb25lbnRzIHRvIGV4Y2hhbmdlCiAqICBwYXJhbWV0ZXJzIGFuZCBjb25maWd1cmF0aW9uIGRhdGEgd2l0aCB0aGUgY29tcG9uZW50cy4KICovCgojaWZuZGVmIE9NWF9PdGhlcl9oCiNkZWZpbmUgT01YX090aGVyX2gKCiNpZmRlZiBfX2NwbHVzcGx1cwpleHRlcm4gIkMiIHsKI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCgoKLyogRWFjaCBPTVggaGVhZGVyIG11c3QgaW5jbHVkZSBhbGwgcmVxdWlyZWQgaGVhZGVyIGZpbGVzIHRvIGFsbG93IHRoZQogKiAgaGVhZGVyIHRvIGNvbXBpbGUgd2l0aG91dCBlcnJvcnMuICBUaGUgaW5jbHVkZXMgYmVsb3cgYXJlIHJlcXVpcmVkCiAqICBmb3IgdGhpcyBoZWFkZXIgZmlsZSB0byBjb21waWxlIHN1Y2Nlc3NmdWxseSAKICovCgojaW5jbHVkZSA8T01YX0NvcmUuaD4KCgovKiogCiAqIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIGRhdGEgdHlwZXMgd2hpY2ggbWF0Y2ggdG8gbXVsdGlwbGUgZG9tYWlucyBvciBubwogKiBkb21haW4gYXQgYWxsLiAgRm9yIHR5cGVzIHdoaWNoIGFyZSB2ZW5kb3Igc3BlY2lmaWMsIGEgdmFsdWUgYWJvdmUKICogT01YX09USEVSX1ZFTkRPUlRTVEFSVCBzaG91bGQgYmUgdXNlZC4KICovCnR5cGVkZWYgZW51bSBPTVhfT1RIRVJfRk9STUFUVFlQRSB7CiAgICBPTVhfT1RIRVJfRm9ybWF0VGltZSA9IDAsIC8qKjwgVHJhbnNtaXNzaW9uIG9mIHZhcmlvdXMgdGltZXN0YW1wcywgZWxhcHNlZCB0aW1lLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lIGRlbHRhcywgZXRjICovCiAgICBPTVhfT1RIRVJfRm9ybWF0UG93ZXIsICAgIC8qKjwgUGVyaGFwcyB1c2VkIGZvciBlbmFibGluZy9kaXNhYmxpbmcgcG93ZXIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCwgc2V0dGluZyBjbG9ja3M/ICovCiAgICBPTVhfT1RIRVJfRm9ybWF0U3RhdHMsICAgIC8qKjwgQ291bGQgYmUgdGhpbmdzIHN1Y2ggYXMgZnJhbWUgcmF0ZSwgZnJhbWVzIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BwZWQsIGV0YyAqLwogICAgT01YX09USEVSX0Zvcm1hdEJpbmFyeSwgICAvKio8IEFyYml0cmFyeSBiaW5hcnkgZGF0YSAqLwogICAgT01YX09USEVSX0Zvcm1hdFZlbmRvclJlc2VydmVkID0gMTAwMCwgLyoqPCBTdGFydGluZyB2YWx1ZSBmb3IgdmVuZG9yIHNwZWNpZmljIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRzICovCgogICAgT01YX09USEVSX0Zvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKICAgIE9NWF9PVEhFUl9Gb3JtYXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgT01YX09USEVSX0Zvcm1hdE1heCA9IDB4N0ZGRkZGRkYKfSBPTVhfT1RIRVJfRk9STUFUVFlQRTsKCi8qKiAKICogRW51bWVyYXRpb24gb2Ygc2VlayBtb2Rlcy4KICovCnR5cGVkZWYgZW51bSBPTVhfVElNRV9TRUVLTU9ERVRZUEUgewogICAgT01YX1RJTUVfU2Vla01vZGVGYXN0ID0gMCwgLyoqPCBQcmVmZXIgc2Vla2luZyB0byBhbiBhcHByb3hpbWF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvZiB0aGUgcmVxdWVzdGVkIHNlZWsgcG9zaXRpb24gb3ZlciAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIGFjdHVhbCBzZWVrIHBvc2l0aW9uIGlmIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZXN1bHRzIGluIGEgZmFzdGVyIHNlZWsuICovCiAgICBPTVhfVElNRV9TZWVrTW9kZUFjY3VyYXRlLCAvKio8IFByZWZlciBzZWVraW5nIHRvIHRoZSBhY3R1YWwgc2VlayAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHBvc2l0aW9uIG92ZXIgYW4gYXBwcm94aW1hdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb2YgdGhlIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uIGV2ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlmIGl0IHJlc3VsdHMgaW4gYSBzbG93ZXIgc2Vlay4gKi8KICAgIE9NWF9USU1FX1NlZWtNb2RlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAogICAgT01YX1RJTUVfU2Vla01vZGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgT01YX1RJTUVfU2Vla01vZGVNYXggPSAweDdGRkZGRkZGCn0gT01YX1RJTUVfU0VFS01PREVUWVBFOwoKLyogU3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgc2Vla21vZGUgb2YgdGhlIGNvbXBvbmVudCAqLwp0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9DT05GSUdfU0VFS01PREVUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICBPTVhfVElNRV9TRUVLTU9ERVRZUEUgZVR5cGU7ICAgIC8qKjwgVGhlIHNlZWsgbW9kZSAqLwp9IE9NWF9USU1FX0NPTkZJR19TRUVLTU9ERVRZUEU7CgovKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyBhIHRpbWUgc3RhbXAgdXNlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlncyAKICogb24gdGhlIENsb2NrIENvbXBvbmVudCAoQ0MpOgogKiAKICogT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRXYWxsVGltZTogcXVlcnkgb2YgdGhlIENDknMgY3VycmVudCB3YWxsICAKICogICAgIHRpbWUKICogT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRNZWRpYVRpbWU6IHF1ZXJ5IG9mIHRoZSBDQ5JzIGN1cnJlbnQgbWVkaWEKICogICAgIHRpbWUKICogT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRBdWRpb1JlZmVyZW5jZSBhbmQgIAogKiBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudFZpZGVvUmVmZXJlbmNlOiBhdWRpby92aWRlbyByZWZlcmVuY2UgCiAqICAgICBjbG9jayBzZW5kaW5nIFNDIGl0cyByZWZlcmVuY2UgdGltZQogKiBPTVhfSW5kZXhDb25maWdUaW1lQ2xpZW50U3RhcnRUaW1lOiBhIENsb2NrIENvbXBvbmVudCBjbGllbnQgc2VuZHMgCiAqICAgICB0aGlzIHN0cnVjdHVyZSB0byB0aGUgQ2xvY2sgQ29tcG9uZW50IHZpYSBhIFNldENvbmZpZyBvbiBpdHMgCiAqICAgICBjbGllbnQgcG9ydCB3aGVuIGl0IHJlY2VpdmVzIGEgYnVmZmVyIHdpdGgKICogICAgIE9NWF9CVUZGRVJGTEFHX1NUQVJUVElNRSBzZXQuIEl0IG11c3QgdXNlIHRoZSB0aW1lc3RhbXAKICogICAgIHNwZWNpZmllZCBieSB0aGF0IGJ1ZmZlciBmb3IgblN0YXJ0VGltZXN0YW1wLiAKICoKICogSXSScyBhbHNvIHVzZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZyBvbiBjb21wb25lbnRzIGluIGdlbmVyYWw6CiAqCiAqIE9NWF9JbmRleENvbmZpZ1RpbWVQb3NpdGlvbjogSUwgY2xpZW50IHF1ZXJ5aW5nIGNvbXBvbmVudCBwb3NpdGlvbiAKICogKEdldENvbmZpZykgb3IgY29tbWFuZGluZyBhIGNvbXBvbmVudCB0byBzZWVrIHRvIHRoZSBnaXZlbiBsb2NhdGlvbgogKiAoU2V0Q29uZmlnKQogKi8JCnR5cGVkZWYgc3RydWN0IE9NWF9USU1FX0NPTkZJR19USU1FU1RBTVBUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgaW5mb3JtYXRpb24gKi8KICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KICAgIE9NWF9USUNLUyBuVGltZXN0YW1wOyAgCSAgICAgLyoqPCB0aW1lc3RhbXAgLiovIAp9IE9NWF9USU1FX0NPTkZJR19USU1FU1RBTVBUWVBFOyAgCgovKiogRW51bWVyYXRpb24gb2YgcG9zc2libGUgcmVmZXJlbmNlIGNsb2NrcyB0byB0aGUgbWVkaWEgdGltZS4gKi8KdHlwZWRlZiBlbnVtIE9NWF9USU1FX1VQREFURVRZUEUgewogICAgICBPTVhfVElNRV9VcGRhdGVSZXF1ZXN0RnVsZmlsbG1lbnQsICAgIC8qKjwgVXBkYXRlIGlzIHRoZSBmdWxmaWxsbWVudCBvZiBhIG1lZGlhIHRpbWUgcmVxdWVzdC4gKi8KICAgICAgT01YX1RJTUVfVXBkYXRlU2NhbGVDaGFuZ2VkLAkgICAgICAgIC8qKjwgVXBkYXRlIHdhcyBnZW5lcmF0ZWQgYmVjYXVzZSB0aGUgc2NhbGUgY2hhZ25lZC4gKi8KICAgICAgT01YX1RJTUVfVXBkYXRlQ2xvY2tTdGF0ZUNoYW5nZWQsICAgICAvKio8IFVwZGF0ZSB3YXMgZ2VuZXJhdGVkIGJlY2F1c2UgdGhlIGNsb2NrIHN0YXRlIGNoYW5nZWQuICovCiAgICAgIE9NWF9USU1FX1VwZGF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKICAgICAgT01YX1RJTUVfVXBkYXRlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICAgT01YX1RJTUVfVXBkYXRlTWF4ID0gMHg3RkZGRkZGRgp9IE9NWF9USU1FX1VQREFURVRZUEU7CgovKiogRW51bWVyYXRpb24gb2YgcG9zc2libGUgcmVmZXJlbmNlIGNsb2NrcyB0byB0aGUgbWVkaWEgdGltZS4gKi8KdHlwZWRlZiBlbnVtIE9NWF9USU1FX1JFRkNMT0NLVFlQRSB7CiAgICAgIE9NWF9USU1FX1JlZkNsb2NrTm9uZSwgICAgLyoqPCBVc2Ugbm8gcmVmZXJlbmNlcy4gKi8KICAgICAgT01YX1RJTUVfUmVmQ2xvY2tBdWRpbywJLyoqPCBVc2UgcmVmZXJlbmNlcyBzZW50IHRocm91Z2ggT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRBdWRpb1JlZmVyZW5jZSAqLwogICAgICBPTVhfVElNRV9SZWZDbG9ja1ZpZGVvLCAgIC8qKjwgVXNlIHJlZmVyZW5jZXMgc2VudCB0aHJvdWdoIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50VmlkZW9SZWZlcmVuY2UgKi8KICAgICAgT01YX1RJTUVfUmVmQ2xvY2tLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCiAgICAgIE9NWF9USU1FX1JlZkNsb2NrVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICAgT01YX1RJTUVfUmVmQ2xvY2tNYXggPSAweDdGRkZGRkZGCn0gT01YX1RJTUVfUkVGQ0xPQ0tUWVBFOwoKLyoqIEVudW1lcmF0aW9uIG9mIGNsb2NrIHN0YXRlcy4gKi8KdHlwZWRlZiBlbnVtIE9NWF9USU1FX0NMT0NLU1RBVEUgewogICAgICBPTVhfVElNRV9DbG9ja1N0YXRlUnVubmluZywgICAgICAgICAgICAgLyoqPCBDbG9jayBydW5uaW5nLiAqLwogICAgICBPTVhfVElNRV9DbG9ja1N0YXRlV2FpdGluZ0ZvclN0YXJ0VGltZSwgLyoqPCBDbG9jayB3YWl0aW5nIHVudGlsIHRoZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJlc2NyaWJlZCBjbGllbnRzIGVtaXQgdGhlaXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgc3RhcnQgdGltZS4gKi8KICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZVN0b3BwZWQsICAgICAgICAgICAgIC8qKjwgQ2xvY2sgc3RvcHBlZC4gKi8KICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgIE9NWF9USU1FX0Nsb2NrU3RhdGVNYXggPSAweDdGRkZGRkZGCn0gT01YX1RJTUVfQ0xPQ0tTVEFURTsKCi8qKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgbWVkaWEgdGltZSByZXF1ZXN0IHRvIHRoZSBjbG9jayBjb21wb25lbnQuCiAqCiAqICBBIGNsaWVudCBjb21wb25lbnQgc2VuZHMgdGhpcyBzdHJ1Y3R1cmUgdG8gdGhlIENsb2NrIENvbXBvbmVudCB2aWEgYSBTZXRDb25maWcKICogIG9uIGl0cyBjbGllbnQgcG9ydCB0byBzcGVjaWZ5IGEgbWVkaWEgdGltZXN0YW1wIHRoZSBDbG9jayBDb21wb25lbnQKICogIHNob3VsZCBlbWl0LiAgVGhlIENsb2NrIENvbXBvbmVudCBzaG91bGQgZnVsZmlsbCB0aGUgcmVxdWVzdCBieSBzZW5kaW5nIGEKICogIE9NWF9USU1FX01FRElBVElNRVRZUEUgd2hlbiBpdHMgbWVkaWEgY2xvY2sgbWF0Y2hlcyB0aGUgcmVxdWVzdGVkIAogKiAgdGltZXN0YW1wLgogKgogKiAgVGhlIGNsaWVudCBtYXkgcmVxdWlyZSBhIG1lZGlhIHRpbWUgcmVxdWVzdCBiZSBmdWxmaWxsZWQgc2xpZ2h0bHkKICogIGVhcmxpZXIgdGhhbiB0aGUgbWVkaWEgdGltZSBzcGVjaWZpZWQuIEluIHRoaXMgY2FzZSB0aGUgY2xpZW50IHNwZWNpZmllcyAKICogIGFuIG9mZnNldCB3aGljaCBpcyBlcXVhbCB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHdhbGwgdGltZSBjb3JyZXNwb25kaW5nIAogKiAgdG8gdGhlIHJlcXVlc3RlZCBtZWRpYSB0aW1lIGFuZCB0aGUgd2FsbCB0aW1lIHdoZW4gaXQgd2lsbCBiZSAKICogIGZ1bGZpbGxlZC4gCiAqCiAqICBBIGNsaWVudCBjb21wb25lbnQgbWF5IHVzZXMgdGhlc2UgcmVxdWVzdHMgYW5kIHRoZSBPTVhfVElNRV9NRURJQVRJTUVUWVBFIHRvCiAqICB0aW1lIGV2ZW50cyBhY2NvcmRpbmcgdG8gdGltZXN0YW1wcy4gSWYgYSBjbGllbnQgbXVzdCBwZXJmb3JtIGFuIG9wZXJhdGlvbiBPIGF0CiAqICBhIHRpbWUgVCAoZS5nLiBkZWxpdmVyIGEgdmlkZW8gZnJhbWUgYXQgaXRzIGNvcnJlc3BvbmRpbmcgdGltZXN0YW1wKSwgaXQgbWFrZXMgYSAKICogIG1lZGlhIHRpbWUgcmVxdWVzdCBhdCBUIChwZXJoYXBzIHNwZWNpZnlpbmcgYW4gb2Zmc2V0IHRvIGVuc3VyZSB0aGUgcmVxdWVzdCBmdWxmaWxsbWVudAogKiAgaXMgYSBsaXR0bGUgZWFybHkpLiBXaGVuIHRoZSBjbG9jayBjb21wb25lbnQgcGFzc2VzIHRoZSByZXN1bHRpbmcgT01YX1RJTUVfTUVESUFUSU1FVFlQRQogKiAgc3RydWN0dXJlIGJhY2sgdG8gdGhlIGNsaWVudCBjb21wb25lbnQsIHRoZSBjbGllbnQgbWF5IHBlcmZvcm0gb3BlcmF0aW9uIE8gKHBlcmhhcHMgaGF2aW5nCiAqICB0byB3YWl0IGEgc2xpZ2h0IGFtb3VudCBtb3JlIHRpbWUgaXRzZWxmIGFzIHNwZWNpZmllZCBieSB0aGUgcmV0dXJuIHZhbHVlcykuCiAqLwoKdHlwZWRlZiBzdHJ1Y3QgT01YX1RJTUVfQ09ORklHX01FRElBVElNRVJFUVVFU1RUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KICAgIE9NWF9QVFIgcENsaWVudFByaXZhdGU7ICAgICAvKio8IENsaWVudCBwcml2YXRlIGRhdGEgdG8gZGlzYWJpZ3VhdGUgdGhpcyBtZWRpYSB0aW1lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgZnJvbSBvdGhlcnMgKGUuZy4gdGhlIG51bWJlciBvZiB0aGUgZnJhbWUgdG8gZGVsaXZlcikuIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgRHVwbGljYXRlZCBpbiB0aGUgbWVkaWEgdGltZSBzdHJ1Y3R1cmUgdGhhdCBmdWxmaWxscyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHRoaXMgcmVxdWVzdC4gQSB2YWx1ZSBvZiB6ZXJvIGlzIHJlc2VydmVkIGZvciB0aW1lIHNjYWxlIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdXBkYXRlcy4gKi8KICAgIE9NWF9USUNLUyBuTWVkaWFUaW1lc3RhbXA7ICAvKio8IE1lZGlhIHRpbWVzdGFtcCByZXF1ZXN0ZWQuKi8gCiAgICBPTVhfVElDS1Mgbk9mZnNldDsgICAgICAgICAgLyoqPCBBbW91bnQgb2Ygd2FsbCBjbG9jayB0aW1lIGJ5IHdoaWNoIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHJlcXVlc3Qgc2hvdWxkIGJlIGZ1bGZpbGxlZCBlYXJseSAqLwp9IE9NWF9USU1FX0NPTkZJR19NRURJQVRJTUVSRVFVRVNUVFlQRTsKCi8qKjwgU3RydWN0dXJlIHNlbnQgZnJvbSB0aGUgY2xvY2sgY29tcG9uZW50IGNsaWVudCBlaXRoZXIgd2hlbiBmdWxmaWxsaW5nIAogKiAgIGEgbWVkaWEgdGltZSByZXF1ZXN0IG9yIHdoZW4gdGhlIHRpbWUgc2NhbGUgaGFzIGNoYW5nZWQuIAogKgogKiAgIEluIHRoZSBmb3JtZXIgY2FzZSB0aGUgQ2xvY2sgQ29tcG9uZW50IGZpbGxzIHRoaXMgc3RydWN0dXJlIGFuZCB0aW1lcyBpdHMgZW1pc3Npb24gCiAqICAgdG8gYSBjbGllbnQgY29tcG9uZW50ICh2aWEgdGhlIGNsaWVudCBwb3J0KSBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbWVkaWEgCiAqICAgdGltZSByZXF1ZXN0IHNlbnQgYnkgdGhlIGNsaWVudC4gVGhlIENsb2NrIENvbXBvbmVudCBzaG91bGQgdGltZSB0aGUgZW1pc3Npb24gdG8gb2NjdXIKICogICB3aGVuIHRoZSByZXF1ZXN0ZWQgdGltZXN0YW1wIG1hdGNoZXMgdGhlIENsb2NrIENvbXBvbmVudCdzIG1lZGlhIHRpbWUgYnV0IGFsc28gdGhlIAogKiAgIHByZXNjcmliZWQgb2Zmc2V0IGVhcmx5LiAKICoKICogICBVcG9uIHNjYWxlIGNoYW5nZXMgdGhlIGNsb2NrIGNvbXBvbmVudCBjbGVhcnMgdGhlIG5DbGllbnRQcml2YXRlIGRhdGEsIHNlbmRzIHRoZSBjdXJyZW50CiAqICAgbWVkaWEgdGltZSBhbmQgc2V0cyB0aGUgblNjYWxlIHRvIHRoZSBuZXcgc2NhbGUgdmlhIHRoZSBjbGllbnQgcG9ydC4gSXQgZW1pdHMgYSAKICogICBPTVhfVElNRV9NRURJQVRJTUVUWVBFIHRvIGFsbCBjbGllbnRzIGluZGVwZW5kZW50IG9mIGFueSByZXF1ZXN0cy4gVGhpcyBhbGxvd3MgY2xpZW50cyB0byAKICogICBhbHRlciBwcm9jZXNzaW5nIHRvIGFjY29tb2RhdGUgc2NhbGluZy4gRm9yIGluc3RhbmNlIGEgdmlkZW8gY29tcG9uZW50IG1pZ2h0IHNraXAgaW50ZXItZnJhbWVzIAogKiAgIGluIHRoZSBjYXNlIG9mIGV4dHJlbWUgZmFzdGZvcndhcmQuIExpa2V3aXNlIGFuIGF1ZGlvIGNvbXBvbmVudCBtaWdodCBhZGQgb3IgcmVtb3ZlIHNhbXBsZXMgCiAqICAgZnJvbSBhbiBhdWRpbyBmcmFtZSB0byBzY2FsZSBhdWRpbyBkYXRhLiAKICoKICogICBJdCBpcyBleHBlY3RlZCB0aGF0IHNvbWUgY2xvY2sgY29tcG9uZW50cyBtYXkgbm90IGJlIGFibGUgdG8gZnVsZmlsbCByZXF1ZXN0cwogKiAgIGF0IGV4YWN0bHkgdGhlIHByZXNjcmliZWQgdGltZS4gVGhpcyBpcyBhY2NlcHRhYmxlIHNvIGxvbmcgYXMgdGhlIHJlcXVlc3QgaXMgCiAqICAgZnVsZmlsbGVkIGF0IGxlYXN0IGFzIGVhcmx5IGFzIGRlc2NyaWJlZCBhbmQgbm90IGxhdGVyLiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyAKICogICBmaWVsZHMgdGhlIGNsaWVudCBtYXkgdXNlIHRvIHdhaXQgZm9yIHRoZSByZW1haW5pbmcgdGltZS4KICoKICogICBUaGUgY2xpZW50IG1heSB1c2UgZWl0aGVyIHRoZSBuT2Zmc2V0IG9yIG5XYWxsVGltZUF0TWVkaWEgZmllbGRzIHRvIGRldGVybWluZSB0aGUgCiAqICAgd2FsbCB0aW1lIHVudGlsIHRoZSBuTWVkaWFUaW1lc3RhbXAgYWN0dWFsbHkgb2NjdXJzLiBJbiB0aGUgbGF0dGVyIGNhc2UgdGhlCiAqICAgY2xpZW50IGNhbiBnZXQgYSBtb3JlIGFjY3VyYXRlIHZhbHVlIGZvciBvZmZzZXQgYnkgZ2V0dGluZyB0aGUgY3VycmVudCB3YWxsCiAqICAgZnJvbSB0aGUgY2xvYyBjb21wb25lbnQgYW5kIHN1YnRyYWN0aW5nIGl0IGZyb20gbldhbGxUaW1lQXRNZWRpYS4gCiAqLwoKdHlwZWRlZiBzdHJ1Y3QgT01YX1RJTUVfTUVESUFUSU1FVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgT01YX1UzMiBuQ2xpZW50UHJpdmF0ZTsgICAgICAgICAvKio8IENsaWVudCBwcml2YXRlIGRhdGEgdG8gZGlzYWJpZ3VhdGUgdGhpcyBtZWRpYSB0aW1lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGZyb20gb3RoZXJzLiBDb3BpZWQgZnJvbSB0aGUgbWVkaWEgdGltZSByZXF1ZXN0LiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBBIHZhbHVlIG9mIHplcm8gaXMgcmVzZXJ2ZWQgZm9yIHRpbWUgc2NhbGUgdXBkYXRlcy4gKi8KICAgIE9NWF9USU1FX1VQREFURVRZUEUgZVVwZGF0ZVR5cGU7IC8qKjwgUmVhc29uIGZvciB0aGUgdXBkYXRlICovCiAgICBPTVhfVElDS1Mgbk1lZGlhVGltZXN0YW1wOyAgICAgIC8qKjwgTWVkaWEgdGltZSByZXF1ZXN0ZWQuIElmIG5vIG1lZGlhIHRpbWUgd2FzIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHJlcXVlc3RlZCB0aGVuIHRoaXMgaXMgdGhlIGN1cnJlbnQgbWVkaWEgdGltZS4gKi8gCiAgICBPTVhfVElDS1Mgbk9mZnNldDsgICAgICAgICAgICAgIC8qKjwgQW1vdW50IG9mIHdhbGwgY2xvY2sgdGltZSBieSB3aGljaCB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcmVxdWVzdCB3YXMgYWN0dWFsbHkgZnVsZmlsbGVkIGVhcmx5ICovCgogICAgT01YX1RJQ0tTIG5XYWxsVGltZUF0TWVkaWFUaW1lOyAvKio8IFdhbGwgdGltZSBjb3JyZXNwb25kaW5nIHRvIG5NZWRpYVRpbWVTdGFtcC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBBIGNsaWVudCBtYXkgY29tcGFyZSB0aGlzIHZhbHVlIHRvIGN1cnJlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBtZWRpYSB0aW1lIG9idGFpbmVkIGZyb20gdGhlIENsb2NrIENvbXBvbmVudCB0byBkZXRlcm1pbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB0aGUgd2FsbCB0aW1lIHVudGlsIHRoZSBtZWRpYSB0aW1lc3RhbXAgaXMgcmVhbGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgY3VycmVudC4gKi8KICAgIE9NWF9TMzIgeFNjYWxlOyAgICAgICAgICAgICAgICAgLyoqPCBDdXJyZW50IG1lZGlhIHRpbWUgc2NhbGUgaW4gUTE2IGZvcm1hdC4gKi8KICAgIE9NWF9USU1FX0NMT0NLU1RBVEUgZVN0YXRlOyAgICAgLyogU2Vla2luZyBDaGFuZ2UuIEFkZGVkIDcvMTIuKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0ZSBvZiB0aGUgbWVkaWEgdGltZS4gKi8KfSBPTVhfVElNRV9NRURJQVRJTUVUWVBFOyAgCgovKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBtZWRpYSB0aW1lIHNjYWxlIGZhY3Rvci4gQXBwbGljYWJsZSBvbmx5IHRvIGNsb2NrIAogKiAgY29tcG9uZW50LCBvdGhlciBjb21wb25lbnRzIHNlZSBzY2FsZSBjaGFuZ2VzIHZpYSBPTVhfVElNRV9NRURJQVRJTUVUWVBFIGJ1ZmZlcnMgc2VudCB2aWEKICogIHRoZSBjbG9jayBjb21wb25lbnQgY2xpZW50IHBvcnRzLiBVcG9uIHJlY2lldmluZyB0aGlzIGNvbmZpZyB0aGUgY2xvY2sgY29tcG9uZW50IGNoYW5nZXMgCiAqICB0aGUgcmF0ZSBieSB3aGljaCB0aGUgbWVkaWEgdGltZSBpbmNyZWFzZXMgb3IgZGVjcmVhc2VzIGVmZmVjdGl2ZWx5IGltcGxlbWVudGluZyB0cmljayBtb2Rlcy4gCiAqLyAKdHlwZWRlZiBzdHJ1Y3QgT01YX1RJTUVfQ09ORklHX1NDQUxFVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgT01YX1MzMiB4U2NhbGU7ICAgICAgICAgICAgICAgICAvKio8IFRoaXMgaXMgYSB2YWx1ZSBpbiBRMTYgZm9ybWF0IHdoaWNoIGlzIHVzZWQgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNjYWxpbmcgdGhlIG1lZGlhIHRpbWUgKi8KfSBPTVhfVElNRV9DT05GSUdfU0NBTEVUWVBFOwogCi8qKiBCaXRzIHVzZWQgdG8gaWRlbnRpZnkgYSBjbG9jayBwb3J0LiBVc2VkIGluIE9NWF9USU1FX0NPTkZJR19DTE9DS1NUQVRFVFlQRZJzIG5XYWl0TWFzayBmaWVsZCAqLwojZGVmaW5lIE9NWF9DTE9DS1BPUlQwIDB4MDAwMDAwMDEKI2RlZmluZSBPTVhfQ0xPQ0tQT1JUMSAweDAwMDAwMDAyCiNkZWZpbmUgT01YX0NMT0NLUE9SVDIgMHgwMDAwMDAwNAojZGVmaW5lIE9NWF9DTE9DS1BPUlQzIDB4MDAwMDAwMDgKI2RlZmluZSBPTVhfQ0xPQ0tQT1JUNCAweDAwMDAwMDEwCiNkZWZpbmUgT01YX0NMT0NLUE9SVDUgMHgwMDAwMDAyMAojZGVmaW5lIE9NWF9DTE9DS1BPUlQ2IDB4MDAwMDAwNDAKI2RlZmluZSBPTVhfQ0xPQ0tQT1JUNyAweDAwMDAwMDgwCgovKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBtb2RlIG9mIHRoZSBtZWRpYSBjbG9jay4gCiAqICBJTCBDbGllbnQgdXNlcyB0aGlzIGNvbmZpZyB0byBjaGFuZ2Ugb3IgcXVlcnkgdGhlIG1vZGUgb2YgdGhlIAogKiAgbWVkaWEgY2xvY2sgb2YgdGhlIGNsb2NrIGNvbXBvbmVudC4gQXBwbGljYWJsZSBvbmx5IHRvIGNsb2NrCiAqICBjb21wb25lbnQuIAogKiAgCiAqICBPbiBhIFNldENvbmZpZyBpZiBlU3RhdGUgaXMgT01YX1RJTUVfQ2xvY2tTdGF0ZVJ1bm5pbmcgbWVkaWEgdGltZQogKiAgc3RhcnRzIGltbWVkaWF0ZWx5IGF0IHRoZSBwcmVzY3JpYmVkIHN0YXJ0IHRpbWUuIElmCiAqICBPTVhfVElNRV9DbG9ja1N0YXRlV2FpdGluZ0ZvclN0YXJ0VGltZSB0aGUgQ2xvY2sgQ29tcG9uZW50IGlnbm9yZXMKICogIHRoZSBnaXZlbiBuU3RhcnRUaW1lIGFuZCB3YWl0cyBmb3IgYWxsIGNsaWVudHMgc3BlY2lmaWVkIGluIHRoZSAKICogIG5XYWl0TWFzayB0byBzZW5kIHN0YXJ0dGltZXMgKHZpYSAKICogIE9NWF9JbmRleENvbmZpZ1RpbWVDbGllbnRTdGFydFRpbWUpLiBUaGUgQ2xvY2sgQ29tcG9uZW50IHRoZW4gc3RhcnRzIAogKiAgdGhlIG1lZGlhIGNsb2NrIHVzaW5nIHRoZSBlYXJsaWVzdCBzdGFydCB0aW1lIHN1cHBsaWVkLiAqLyAgICAKdHlwZWRlZiBzdHJ1Y3QgT01YX1RJTUVfQ09ORklHX0NMT0NLU1RBVEVUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGluZm9ybWF0aW9uICovCiAgICBPTVhfVElNRV9DTE9DS1NUQVRFIGVTdGF0ZTsgLyoqPCBTdGF0ZSBvZiB0aGUgbWVkaWEgdGltZS4gKi8KICAgIE9NWF9USUNLUyBuU3RhcnRUaW1lOyAgICAgICAvKio8IFN0YXJ0IHRpbWUgb2YgdGhlIG1lZGlhIHRpbWUuICovCiAgICBPTVhfVElDS1Mgbk9mZnNldDsgICAgICAgICAgLyoqPCBUaW1lIHRvIG9mZnNldCB0aGUgbWVkaWEgdGltZSBieSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAoZS5nLiBwcmVyb2xsKS4gTWVkaWEgdGltZSB3aWxsIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcmVwb3J0ZWQgdG8gYmUgbk9mZnNldCB0aWNrcyBlYXJsaWVyLiAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICBPTVhfVTMyIG5XYWl0TWFzazsgICAgICAgICAgLyoqPCBNYXNrIG9mIE9NWF9DTE9DS1BPUlQgdmFsdWVzLiAqLwp9IE9NWF9USU1FX0NPTkZJR19DTE9DS1NUQVRFVFlQRTsKCi8qKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSByZWZlcmVuY2UgY2xvY2sgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8KICogIGNvbXB1dGUgbWVkaWEgdGltZS4gSUwgY2xpZW50IHVzZXMgdGhpcyBjb25maWcgdG8gY2hhbmdlIG9yIHF1ZXJ5IHRoZSAKICogIGNsb2NrIGNvbXBvbmVudCdzIGFjdGl2ZSByZWZlcmVuY2UgY2xvY2sgKi8KdHlwZWRlZiBzdHJ1Y3QgT01YX1RJTUVfQ09ORklHX0FDVElWRVJFRkNMT0NLVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgT01YX1RJTUVfUkVGQ0xPQ0tUWVBFIGVDbG9jazsgICAvKio8IFJlZmVyZW5jZSBjbG9jayB1c2VkIHRvIGNvbXB1dGUgbWVkaWEgdGltZSAqLyAgICAgICAgICAgICAgICAgICAgICAgIAp9IE9NWF9USU1FX0NPTkZJR19BQ1RJVkVSRUZDTE9DS1RZUEU7CgovKiogRGVzY3JpcHRvciBmb3Igc2V0dGluZyBzcGVjaWZpY3Mgb2YgcG93ZXIgdHlwZS4KICogIE5vdGU6IHRoaXMgc3RydWN0dXJlIGlzIGxpc3RlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICovCnR5cGVkZWYgc3RydWN0IE9NWF9PVEhFUl9DT05GSUdfUE9XRVJUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICBPTVhfQk9PTCBiRW5hYmxlUE07ICAgICAgIC8qKjwgRmxhZyB0byBlbmFibGUgUG93ZXIgTWFuYWdlbWVudCAqLwp9IE9NWF9PVEhFUl9DT05GSUdfUE9XRVJUWVBFOwoKCi8qKiBEZXNjcmlwdG9yIGZvciBzZXR0aW5nIHNwZWNpZmljcyBvZiBzdGF0cyB0eXBlLgogKiAgTm90ZTogdGhpcyBzdHJ1Y3R1cmUgaXMgbGlzdGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gKi8KdHlwZWRlZiBzdHJ1Y3QgT01YX09USEVSX0NPTkZJR19TVEFUU1RZUEUgewogICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgIC8qIHdoYXQgZ29lcyBoZXJlICovCn0gT01YX09USEVSX0NPTkZJR19TVEFUU1RZUEU7CgoKLyoqCiAqIFRoZSBQb3J0RGVmaW5pdGlvbiBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZWZpbmUgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIAogKiBuZWNlc3NhcnkgZm9yIHRoZSBjb21wbGlhbnQgY29tcG9uZW50IHRvIHNldHVwIGFuIGlucHV0IG9yIGFuIG91dHB1dCBvdGhlciAKICogcGF0aC4KICovCnR5cGVkZWYgc3RydWN0IE9NWF9PVEhFUl9QT1JUREVGSU5JVElPTlRZUEUgewogICAgT01YX09USEVSX0ZPUk1BVFRZUEUgZUZvcm1hdDsgIC8qKjwgVHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZvciB0aGlzIGNoYW5uZWwgKi8KfSBPTVhfT1RIRVJfUE9SVERFRklOSVRJT05UWVBFOwoKLyoqICBQb3J0IGZvcm1hdCBwYXJhbWV0ZXIuICBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGVudW1lcmF0ZQogICogIHRoZSB2YXJpb3VzIGRhdGEgaW5wdXQvb3V0cHV0IGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIHBvcnQuCiAgKi8KdHlwZWRlZiBzdHJ1Y3QgT01YX09USEVSX1BBUkFNX1BPUlRGT1JNQVRUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7IC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgT01YX1UzMiBuUG9ydEluZGV4OyAvKio8IEluZGljYXRlcyB3aGljaCBwb3J0IHRvIHNldCAqLwogICAgT01YX1UzMiBuSW5kZXg7IC8qKjwgSW5kaWNhdGVzIHRoZSBlbnVtZXJhdGlvbiBpbmRleCBmb3IgdGhlIGZvcm1hdCBmcm9tIDB4MCB0byBOLTEgKi8KICAgIE9NWF9PVEhFUl9GT1JNQVRUWVBFIGVGb3JtYXQ7IC8qKjwgVHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZvciB0aGlzIGNoYW5uZWwgKi8KfSBPTVhfT1RIRVJfUEFSQU1fUE9SVEZPUk1BVFRZUEU7IAoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCgojZW5kaWYKLyogRmlsZSBFT0YgKi8K