LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqICAgICAgICAgICAgICAgICAgIFNjaVRlY2ggT1MgUG9ydGFiaWxpdHkgTWFuYWdlciBMaWJyYXJ5CioKKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioKKiAgICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBTY2lUZWNoIE1HTCBQdWJsaWMKKiAgICBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQoqICAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgoqICAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuc2NpdGVjaHNvZnQuY29tL21nbC1saWNlbnNlLnR4dAoqCiogICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKiAgICAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgoqICAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZwoqICAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCioKKiAgICBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5OCBTY2lUZWNoIFNvZnR3YXJlLCBJbmMuCioKKiAgICBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgU2NpVGVjaCBTb2Z0d2FyZSwgSW5jLgoqICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCioKKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioKKiBMYW5ndWFnZTogICAgIEFOU0kgQwoqIEVudmlyb25tZW50OiAgQW55CioKKiBEZXNjcmlwdGlvbjogIE1vZHVsZSB0byBpbXBsZW1lbnQgaGlnaCBwcmVjaXNpb24gdGltaW5nIG9uIGVhY2ggT1MuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpbmNsdWRlICJ6dGltZXIuaCIKI2luY2x1ZGUgInBtYXBpLmgiCiNpbmNsdWRlICJvc2hkci5oIgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCnN0YXRpYyBMWlRpbWVyT2JqZWN0ICAgIExaVGltZXI7CnN0YXRpYyB1bG9uZyAgICAgICAgICAgIHN0YXJ0LGZpbmlzaDsKI2lmZGVmICBfX0lOVEVMX18Kc3RhdGljIGxvbmcgICAgICAgICAgICAgY3B1U3BlZWQgPSAtMTsKc3RhdGljIGlib29sICAgICAgICAgICAgaGF2ZVJEVFNDID0gZmFsc2U7CiNlbmRpZgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbXBsZW1lbnRhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCi8qIEV4dGVybmFsIEludGVsIGFzc2VtYmxlciBmdW5jdGlvbnMgKi8KI2lmZGVmICBfX0lOVEVMX18KLyoge3NlY3JldH0gKi8Kdm9pZCAgX0FTTUFQSSBfQ1BVX3JlYWRUaW1lU3RhbXAoQ1BVX2xhcmdlSW50ZWdlciAqdGltZSk7Ci8qIHtzZWNyZXR9ICovCnVsb25nIF9BU01BUEkgX0NQVV9kaWZmVGltZTY0KENQVV9sYXJnZUludGVnZXIgKnQxLENQVV9sYXJnZUludGVnZXIgKnQyLENQVV9sYXJnZUludGVnZXIgKnQpOwovKiB7c2VjcmV0fSAqLwp1bG9uZyBfQVNNQVBJIF9DUFVfY2FsY01pY3JvU2VjKENQVV9sYXJnZUludGVnZXIgKmNvdW50LHVsb25nIGZyZXEpOwojZW5kaWYKCiNpZiAgICAgZGVmaW5lZChfX1NNWDMyX18pCiNpbmNsdWRlICJzbXgvenRpbWVyLmMiCiNlbGlmICAgZGVmaW5lZChfX1JUVEFSR0VUX18pCiNpbmNsdWRlICJydHRhcmdldC96dGltZXIuYyIKI2VsaWYgICBkZWZpbmVkKF9fUkVBTERPU19fKQojaW5jbHVkZSAiZG9zL3p0aW1lci5jIgojZWxpZiAgIGRlZmluZWQoX19OVF9EUklWRVJfXykKI2luY2x1ZGUgIm50ZHJ2L3p0aW1lci5jIgojZWxpZiAgIGRlZmluZWQoX19XSU4zMl9WWERfXykKI2luY2x1ZGUgInZ4ZC96dGltZXIuYyIKI2VsaWYgICBkZWZpbmVkKF9fV0lORE9XUzMyX18pCiNpbmNsdWRlICJ3aW4zMi96dGltZXIuYyIKI2VsaWYgICBkZWZpbmVkKF9fT1MyX1ZERF9fKQojaW5jbHVkZSAidmRkL3p0aW1lci5jIgojZWxpZiAgIGRlZmluZWQoX19PUzJfXykKI2luY2x1ZGUgIm9zMi96dGltZXIuYyIKI2VsaWYgICBkZWZpbmVkKF9fTElOVVhfXykKI2luY2x1ZGUgImxpbnV4L3p0aW1lci5jIgojZWxpZiAgIGRlZmluZWQoX19RTlhfXykKI2luY2x1ZGUgInFueC96dGltZXIuYyIKI2VsaWYgICBkZWZpbmVkKF9fQkVPU19fKQojaW5jbHVkZSAiYmVvcy96dGltZXIuYyIKI2Vsc2UKI2Vycm9yICBUaW1lciBsaWJyYXJ5IG5vdCBwb3J0ZWQgdG8gdGhpcyBwbGF0Zm9ybSB5ZXQhCiNlbmRpZgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHVibGljIGludGVyZmFjZSByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkRFU0NSSVBUSU9OOgpJbml0aWFsaXplcyB0aGUgWmVuIFRpbWVyIGxpYnJhcnkgKGV4dGVuZGVkKQoKUEFSQU1FVEVSUzoKYWNjdXJhdGUgICAgLSBUcnVlIG9mIHRoZSBzcGVlZCBzaG91bGQgYmUgbWVhc3VyZWQgYWNjdXJhdGVseQoKSEVBREVSOgp6dGltZXIuaAoKUkVNQVJLUzoKVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgWmVuIFRpbWVyIGxpYnJhcnksIGFuZCAvbXVzdC8gYmUgY2FsbGVkIGJlZm9yZQphbnkgb2YgdGhlIHJlbWFpbmluZyBaZW4gVGltZXIgbGlicmFyeSBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gVGhlIGFjY3VyYXRlCnBhcmFtZXRlciBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGhpZ2hseSBhY2N1cmF0ZSB0aW1pbmcgc2hvdWxkIGJlCnVzZWQgb3Igbm90LiBJZiBoaWdoIGFjY3VyYWN5IGlzIG5lZWRlZCwgbW9yZSB0aW1lIGlzIHNwZW50IHByb2ZpbGluZyB0aGUKYWN0dWFsIHNwZWVkIG9mIHRoZSBDUFUgc28gdGhhdCB3ZSBjYW4gb2J0YWluIGhpZ2hseSBhY2N1cmF0ZSB0aW1pbmcKcmVzdWx0cywgYnV0IHRoZSB0aW1lIHNwZW50IGluIHRoZSBpbml0aWFsaXNhdGlvbiByb3V0aW5lIHdpbGwgYmUKc2lnbmlmaWNhbnRseSBsb25nZXIgKG9uIHRoZSBvcmRlciBvZiA1IHNlY29uZHMpLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIFpBUEkgWlRpbWVySW5pdEV4dCgKICAgIGlib29sIGFjY3VyYXRlKQp7CiAgICBpZiAoY3B1U3BlZWQgPT0gLTEpIHsKCV9fWlRpbWVySW5pdCgpOwojaWZkZWYgIF9fSU5URUxfXwoJY3B1U3BlZWQgPSBDUFVfZ2V0UHJvY2Vzc29yU3BlZWRJbkhaKGFjY3VyYXRlKTsKCWhhdmVSRFRTQyA9IENQVV9oYXZlUkRUU0MoKSAmJiAoY3B1U3BlZWQgPiAwKTsKI2VuZGlmCgl9Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkRFU0NSSVBUSU9OOgpJbml0aWFsaXplcyB0aGUgWmVuIFRpbWVyIGxpYnJhcnkuCgpIRUFERVI6Cnp0aW1lci5oCgpSRU1BUktTOgpUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBaZW4gVGltZXIgbGlicmFyeSwgYW5kIC9tdXN0LyBiZSBjYWxsZWQgYmVmb3JlCmFueSBvZiB0aGUgcmVtYWluaW5nIFplbiBUaW1lciBsaWJyYXJ5IGZ1bmN0aW9ucyBhcmUgY2FsbGVkLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIFpBUEkgWlRpbWVySW5pdCh2b2lkKQp7CiAgICBaVGltZXJJbml0RXh0KGZhbHNlKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKREVTQ1JJUFRJT046ClN0YXJ0cyB0aGUgTG9uZyBQZXJpb2QgWmVuIFRpbWVyIGNvdW50aW5nLgoKSEVBREVSOgp6dGltZXIuaAoKUEFSQU1FVEVSUzoKdG0gIC0gVGltZXIgb2JqZWN0IHRvIHN0YXJ0IHRpbWluZyB3aXRoCgpSRU1BUktTOgpTdGFydHMgdGhlIExvbmcgUGVyaW9kIFplbiBUaW1lciBjb3VudGluZy4gT25jZSB5b3UgaGF2ZSBzdGFydGVkIHRoZSB0aW1lciwKeW91IGNhbiBzdG9wIGl0IHdpdGggTFpUaW1lck9mZiBvciB5b3UgY2FuIGxhdGNoIHRoZSBjdXJyZW50IGNvdW50IHdpdGgKTFpUaW1lckxhcC4KClRoZSBMb25nIFBlcmlvZCBaZW4gVGltZXIgdXNlcyBhIG51bWJlciBvZiBkaWZmZXJlbnQgaGlnaCBwcmVjaXNpb24gdGltaW5nCm1lY2hhbmlzbXMgdG8gb2J0YWluIG1pY3Jvc2Vjb25kIGFjY3VyYXRlIHRpbWluZ3MgcmVzdWx0cyB3aGVuZXZlciBwb3NzaWJsZS4KVGhlIGZvbGxvd2luZyBkaWZmZXJlbnQgdGVjaG5pcXVlcyBhcmUgdXNlZCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGluZwpzeXN0ZW0sIHJ1bnRpbWUgZW52aXJvbm1lbnQgYW5kIENQVSBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUuIElmIHRoZSB0YXJnZXQKc3lzdGVtIGhhcyBhIFBlbnRpdW0gQ1BVIGluc3RhbGxlZCB3aGljaCBzdXBwb3J0cyB0aGUgUmVhZCBUaW1lIFN0YW1wCkNvdW50ZXIgaW5zdHJ1Y3Rpb24gKFJEVFNDKSwgdGhlIFplbiBUaW1lciBsaWJyYXJ5IHdpbGwgdXNlIHRoaXMgdG8Kb2J0YWluIHRoZSBtYXhpbXVtIHRpbWluZyBwcmVjaXNpb24gYXZhaWxhYmxlLgoKVW5kZXIgMzItYml0IFdpbmRvd3MsIGlmIHRoZSBQZW50aXVtIFJEVFNDIGluc3RydWN0aW9uIGlzIG5vdCBhdmFpbGFibGUsIHdlCmZpcnN0IHRyeSB0byB1c2UgdGhlIFdpbjMyIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyIEFQSSwgYW5kIGlmIHRoYXQgaXMgbm90CmF2YWlsYWJsZSB3ZSBmYWxsIGJhY2sgb24gdGhlIHRpbWVHZXRUaW1lIEFQSSB3aGljaCBpcyBhbHdheXMgc3VwcG9ydGVkLgoKVW5kZXIgMzItYml0IERPUywgaWYgdGhlIFBlbnRpdW0gUkRUU0MgaW5zdHJ1Y3Rpb24gaXMgbm90IGF2YWlsYWJsZSwgd2UKdGhlbiBkbyBhbGwgdGltaW5nIHVzaW5nIHRoZSBvbGQgc3R5bGUgODI1MyB0aW1lciBjaGlwLiBUaGUgODI1MyB0aW1lcgpyb3V0aW5lcyBwcm92aWRlIGhpZ2hseSBhY2N1cmF0ZSB0aW1pbmdzIHJlc3VsdHMgaW4gcHVyZSBET1MgbW9kZSwgaG93ZXZlcgppbiBhIERPUyBib3ggdW5kZXIgV2luZG93cyBvciBvdGhlciBPcGVyYXRpbmcgU3lzdGVtcyB0aGUgdmlydHVhbGl6YXRpb24Kb2YgdGhlIHRpbWVyIGNhbiBwcm9kdWNlIGluYWNjdXJhdGUgcmVzdWx0cy4KCk5vdGU6IEJlY2F1c2UgdGhlIExvbmcgUGVyaW9kIFplbiBUaW1lciBzdG9yZXMgdGhlIHJlc3VsdHMgaW4gYSAzMi1iaXQKICAgICAgdW5zaWduZWQgaW50ZWdlciwgeW91IGNhbiBvbmx5IHRpbWUgcGVyaW9kcyBvZiB1cCB0byAyXjMyIG1pY3Jvc2Vjb25kcywKICAgICAgb3IgYWJvdXQgMWhyIDIwbWlucy4gRm9yIHRpbWluZyBsb25nZXIgcGVyaW9kcyB1c2UgdGhlIFVsdHJhIExvbmcKICAgICAgUGVyaW9kIFplbiBUaW1lci4KClNFRSBBTFNPOgpMWlRpbWVyT2ZmLCBMWlRpbWVyTGFwLCBMWlRpbWVyQ291bnQKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBaQVBJIExaVGltZXJPbkV4dCgKICAgIExaVGltZXJPYmplY3QgKnRtKQp7CiNpZmRlZiAgX19JTlRFTF9fCiAgICBpZiAoaGF2ZVJEVFNDKSB7CglfQ1BVX3JlYWRUaW1lU3RhbXAoJnRtLT5zdGFydCk7Cgl9CiAgICBlbHNlCiNlbmRpZgoJX19MWlRpbWVyT24odG0pOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpERVNDUklQVElPTjoKUmV0dXJucyB0aGUgY3VycmVudCBjb3VudCBmb3IgdGhlIExvbmcgUGVyaW9kIFplbiBUaW1lciBhbmQga2VlcHMgaXQKcnVubmluZy4KCkhFQURFUjoKenRpbWVyLmgKClBBUkFNRVRFUlM6CnRtICAtIFRpbWVyIG9iamVjdCB0byBkbyBsYXAgdGltaW5nIHdpdGgKClJFVFVSTlM6CkNvdW50IHRoYXQgaGFzIGVsYXBzZWQgaW4gbWljcm9zZWNvbmRzLgoKUkVNQVJLUzoKUmV0dXJucyB0aGUgY3VycmVudCBjb3VudCB0aGF0IGhhcyBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8KTFpUaW1lck9uIGluIG1pY3Jvc2Vjb25kcy4gVGhlIHRpbWUgY29udGludWVzIHRvIHJ1biBhZnRlciB0aGlzIGZ1bmN0aW9uIGlzCmNhbGxlZCBzbyB5b3UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiByZXBlYXRlZGx5LgoKU0VFIEFMU086CkxaVGltZXJPbiwgTFpUaW1lck9mZiwgTFpUaW1lckNvdW50CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnVsb25nIFpBUEkgTFpUaW1lckxhcEV4dCgKICAgIExaVGltZXJPYmplY3QgKnRtKQp7CiNpZmRlZiAgX19JTlRFTF9fCiAgICBDUFVfbGFyZ2VJbnRlZ2VyICAgIHRtTGFwLHRtQ291bnQ7CgogICAgaWYgKGhhdmVSRFRTQykgewoJX0NQVV9yZWFkVGltZVN0YW1wKCZ0bUxhcCk7CglfQ1BVX2RpZmZUaW1lNjQoJnRtLT5zdGFydCwmdG1MYXAsJnRtQ291bnQpOwoJcmV0dXJuIF9DUFVfY2FsY01pY3JvU2VjKCZ0bUNvdW50LGNwdVNwZWVkKTsKCX0KICAgIGVsc2UKI2VuZGlmCglyZXR1cm4gX19MWlRpbWVyTGFwKHRtKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKREVTQ1JJUFRJT046ClN0b3BzIHRoZSBMb25nIFBlcmlvZCBaZW4gVGltZXIgY291bnRpbmcuCgpIRUFERVI6Cnp0aW1lci5oCgpQQVJBTUVURVJTOgp0bSAgLSBUaW1lciBvYmplY3QgdG8gc3RvcCB0aW1pbmcgd2l0aAoKUkVNQVJLUzoKU3RvcHMgdGhlIExvbmcgUGVyaW9kIFplbiBUaW1lciBjb3VudGluZyBhbmQgbGF0Y2hlcyB0aGUgY291bnQuIE9uY2UgeW91CmhhdmUgc3RvcHBlZCB0aGUgdGltZXIgeW91IGNhbiByZWFkIHRoZSBjb3VudCB3aXRoIExaVGltZXJDb3VudC4gSWYgeW91IG5lZWQKaGlnaGx5IGFjY3VyYXRlIHRpbWluZywgeW91IHNob3VsZCB1c2UgdGhlIG9uIGFuZCBvZmYgZnVuY3Rpb25zIHJhdGhlciB0aGFuCnRoZSBsYXAgZnVuY3Rpb24gc2luY2UgdGhlIGxhcCBmdW5jdGlvbiBkb2VzIG5vdCBzdWJ0cmFjdCB0aGUgb3ZlcmhlYWQgb2YKdGhlIGZ1bmN0aW9uIGNhbGxzIGZyb20gdGhlIHRpbWVkIGNvdW50LgoKU0VFIEFMU086CkxaVGltZXJPbiwgTFpUaW1lckxhcCwgTFpUaW1lckNvdW50CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgWkFQSSBMWlRpbWVyT2ZmRXh0KAogICAgTFpUaW1lck9iamVjdCAqdG0pCnsKI2lmZGVmICBfX0lOVEVMX18KICAgIGlmIChoYXZlUkRUU0MpIHsKCV9DUFVfcmVhZFRpbWVTdGFtcCgmdG0tPmVuZCk7Cgl9CiAgICBlbHNlCiNlbmRpZgoJX19MWlRpbWVyT2ZmKHRtKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKREVTQ1JJUFRJT046ClJldHVybnMgdGhlIGN1cnJlbnQgY291bnQgZm9yIHRoZSBMb25nIFBlcmlvZCBaZW4gVGltZXIuCgpIRUFERVI6Cnp0aW1lci5oCgpQQVJBTUVURVJTOgp0bSAgLSBUaW1lciBvYmplY3QgdG8gY29tcHV0ZSB0aGUgZWxhcHNlZCB0aW1lIHdpdGguCgpSRVRVUk5TOgpDb3VudCB0aGF0IGhhcyBlbGFwc2VkIGluIG1pY3Jvc2Vjb25kcy4KClJFTUFSS1M6ClJldHVybnMgdGhlIGN1cnJlbnQgY291bnQgdGhhdCBoYXMgZWxhcHNlZCBiZXR3ZWVuIGNhbGxzIHRvCkxaVGltZXJPbiBhbmQgTFpUaW1lck9mZiBpbiBtaWNyb3NlY29uZHMuCgpTRUUgQUxTTzoKTFpUaW1lck9uLCBMWlRpbWVyT2ZmLCBMWlRpbWVyTGFwCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnVsb25nIFpBUEkgTFpUaW1lckNvdW50RXh0KAogICAgTFpUaW1lck9iamVjdCAqdG0pCnsKI2lmZGVmICBfX0lOVEVMX18KICAgIENQVV9sYXJnZUludGVnZXIgICAgdG1Db3VudDsKCiAgICBpZiAoaGF2ZVJEVFNDKSB7CglfQ1BVX2RpZmZUaW1lNjQoJnRtLT5zdGFydCwmdG0tPmVuZCwmdG1Db3VudCk7CglyZXR1cm4gX0NQVV9jYWxjTWljcm9TZWMoJnRtQ291bnQsY3B1U3BlZWQpOwoJfQogICAgZWxzZQojZW5kaWYKCXJldHVybiBfX0xaVGltZXJDb3VudCh0bSk7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkRFU0NSSVBUSU9OOgpTdGFydHMgdGhlIExvbmcgUGVyaW9kIFplbiBUaW1lciBjb3VudGluZy4KCkhFQURFUjoKenRpbWVyLmgKClJFTUFSS1M6Ck9ic29sZXRlIGZ1bmN0aW9uLiBZb3Ugc2hvdWxkIHVzZSB0aGUgTFpUaW1lck9uRXh0IGZ1bmN0aW9uIGluc3RlYWQKd2hpY2ggYWxsb3dzIGZvciBtdWx0aXBsZSB0aW1lcnMgcnVubmluZyBhdCB0aGUgc2FtZSB0aW1lLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIFpBUEkgTFpUaW1lck9uKHZvaWQpCnsgTFpUaW1lck9uRXh0KCZMWlRpbWVyKTsgfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKREVTQ1JJUFRJT046ClJldHVybnMgdGhlIGN1cnJlbnQgY291bnQgZm9yIHRoZSBMb25nIFBlcmlvZCBaZW4gVGltZXIgYW5kIGtlZXBzIGl0CnJ1bm5pbmcuCgpIRUFERVI6Cnp0aW1lci5oCgpSRVRVUk5TOgpDb3VudCB0aGF0IGhhcyBlbGFwc2VkIGluIG1pY3Jvc2Vjb25kcy4KClJFTUFSS1M6Ck9ic29sZXRlIGZ1bmN0aW9uLiBZb3Ugc2hvdWxkIHVzZSB0aGUgTFpUaW1lckxhcEV4dCBmdW5jdGlvbiBpbnN0ZWFkCndoaWNoIGFsbG93cyBmb3IgbXVsdGlwbGUgdGltZXJzIHJ1bm5pbmcgYXQgdGhlIHNhbWUgdGltZS4KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdWxvbmcgWkFQSSBMWlRpbWVyTGFwKHZvaWQpCnsgcmV0dXJuIExaVGltZXJMYXBFeHQoJkxaVGltZXIpOyB9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpERVNDUklQVElPTjoKU3RvcHMgdGhlIExvbmcgUGVyaW9kIFplbiBUaW1lciBjb3VudGluZy4KCkhFQURFUjoKenRpbWVyLmgKClJFTUFSS1M6Ck9ic29sZXRlIGZ1bmN0aW9uLiBZb3Ugc2hvdWxkIHVzZSB0aGUgTFpUaW1lck9mZkV4dCBmdW5jdGlvbiBpbnN0ZWFkCndoaWNoIGFsbG93cyBmb3IgbXVsdGlwbGUgdGltZXJzIHJ1bm5pbmcgYXQgdGhlIHNhbWUgdGltZS4KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBaQVBJIExaVGltZXJPZmYodm9pZCkKeyBMWlRpbWVyT2ZmRXh0KCZMWlRpbWVyKTsgfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKREVTQ1JJUFRJT046ClJldHVybnMgdGhlIGN1cnJlbnQgY291bnQgZm9yIHRoZSBMb25nIFBlcmlvZCBaZW4gVGltZXIuCgpIRUFERVI6Cnp0aW1lci5oCgpSRVRVUk5TOgpDb3VudCB0aGF0IGhhcyBlbGFwc2VkIGluIG1pY3Jvc2Vjb25kcy4KClJFTUFSS1M6Ck9ic29sZXRlIGZ1bmN0aW9uLiBZb3Ugc2hvdWxkIHVzZSB0aGUgTFpUaW1lckNvdW50RXh0IGZ1bmN0aW9uIGluc3RlYWQKd2hpY2ggYWxsb3dzIGZvciBtdWx0aXBsZSB0aW1lcnMgcnVubmluZyBhdCB0aGUgc2FtZSB0aW1lLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp1bG9uZyBaQVBJIExaVGltZXJDb3VudCh2b2lkKQp7IHJldHVybiBMWlRpbWVyQ291bnRFeHQoJkxaVGltZXIpOyB9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpERVNDUklQVElPTjoKU3RhcnRzIHRoZSBVbHRyYSBMb25nIFBlcmlvZCBaZW4gVGltZXIgY291bnRpbmcuCgpIRUFERVI6Cnp0aW1lci5oCgpSRU1BUktTOgpTdGFydHMgdGhlIFVsdHJhIExvbmcgUGVyaW9kIFplbiBUaW1lciBjb3VudGluZy4gT25jZSB5b3UgaGF2ZSBzdGFydGVkIHRoZQp0aW1lciwgeW91IGNhbiBzdG9wIGl0IHdpdGggVUxaVGltZXJPZmYgb3IgeW91IGNhbiBsYXRjaCB0aGUgY3VycmVudCBjb3VudAp3aXRoIFVMWlRpbWVyTGFwLgoKVGhlIFVsdHJhIExvbmcgUGVyaW9kIFplbiBUaW1lciB1c2VzIHRoZSBhdmFpbGFibGUgb3BlcmF0aW5nIHN5c3RlbSBzZXJ2aWNlcwp0byBvYnRhaW4gYWNjdXJhdGUgdGltaW5ncyByZXN1bHRzIHdpdGggYXMgbXVjaCBwcmVjaXNpb24gYXMgdGhlIG9wZXJhdGluZwpzeXN0ZW0gcHJvdmlkZXMsIGJ1dCB3aXRoIGVub3VnaCBncmFudWxhcml0eSB0byB0aW1lIGxvbmdlciBwZXJpb2RzIG9mCnRpbWUgdGhhbiB0aGUgTG9uZyBQZXJpb2QgWmVuIFRpbWVyLiBOb3RlIHRoYXQgdGhlIHJlc29sdXRpb24gb2YgdGhlIHRpbWVyCnRpY2tzIGlzIG5vdCBjb25zdGFudCBiZXR3ZWVuIGRpZmZlcmVudCBwbGF0Zm9ybXMsIGFuZCB5b3Ugc2hvdWxkIHVzZSB0aGUKVUxaVGltZXJSZXNvbHV0aW9uIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHNlY29uZHMgaW4gYSBzaW5nbGUKdGljayBvZiB0aGUgdGltZXIsIGFuZCB1c2UgdGhpcyB0byBjb252ZXJ0IHRoZSB0aW1lciBjb3VudHMgdG8gc2Vjb25kcy4KClVuZGVyIDMyLWJpdCBXaW5kb3dzLCB3ZSB1c2UgdGhlIHRpbWVHZXRUaW1lIGZ1bmN0aW9uIHdoaWNoIHByb3ZpZGVzIGEKcmVzb2x1dGlvbiBvZiAxIG1pbGxpc2Vjb25kICgwLjAwMSBvZiBhIHNlY29uZCkuIEdpdmVuIHRoYXQgdGhlIHRpbWVyCmNvdW50IGlzIHJldHVybmVkIGFzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLCB0aGlzIHdlIGNhbiB0aW1lIGludGVydmFscwp0aGF0IGFyZSBhIG1heGltdW0gb2YgMl4zMiBtaWxsaXNlY29uZHMgaW4gbGVuZ3RoIChvciBhYm91dCAxLDIwMCBob3VycyBvcgo1MCBkYXlzISkuCgpVbmRlciAzMi1iaXQgRE9TLCB3ZSB1c2UgdGhlIHN5c3RlbSB0aW1lciB0aWNrIHdoaWNoIHJ1bnMgYXQgMTguMiB0aW1lcyBwZXIKc2Vjb25kLiBHaXZlbiB0aGF0IHRoZSB0aW1lciBjb3VudCBpcyByZXR1cm5lZCBhcyBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciwKdGhpcyB3ZSBjYW4gdGltZSBpbnRlcnZhbHMgdGhhdCBhcmUgYSBtYXhpbXVtIG9mIDJeMzIgKiAoMS8xOC4yKSBpbiBsZW5ndGgKKG9yIGFib3V0IDY1LDU1MCBob3VycyBvciAyNzMxIGRheXMhKS4KClNFRSBBTFNPOgpVTFpUaW1lck9mZiwgVUxaVGltZXJMYXAsIFVMWlRpbWVyQ291bnQsIFVMWkVsYXBzZWRUaW1lLCBVTFpSZWFkVGltZQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIFpBUEkgVUxaVGltZXJPbih2b2lkKQp7IHN0YXJ0ID0gX19VTFpSZWFkVGltZSgpOyB9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpERVNDUklQVElPTjoKUmV0dXJucyB0aGUgY3VycmVudCBjb3VudCBmb3IgdGhlIFVsdHJhIExvbmcgUGVyaW9kIFplbiBUaW1lciBhbmQga2VlcHMgaXQKcnVubmluZy4KCkhFQURFUjoKenRpbWVyLmgKClJFVFVSTlM6CkNvdW50IHRoYXQgaGFzIGVsYXBzZWQgaW4gcmVzb2x1dGlvbiBjb3VudHMuCgpSRU1BUktTOgpSZXR1cm5zIHRoZSBjdXJyZW50IGNvdW50IHRoYXQgaGFzIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0bwpVTFpUaW1lck9uIGluIG1pY3Jvc2Vjb25kcy4gVGhlIHRpbWUgY29udGludWVzIHRvIHJ1biBhZnRlciB0aGlzIGZ1bmN0aW9uIGlzCmNhbGxlZCBzbyB5b3UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiByZXBlYXRlZGx5LgoKU0VFIEFMU086ClVMWlRpbWVyT24sIFVMWlRpbWVyT2ZmLCBVTFpUaW1lckNvdW50CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnVsb25nIFpBUEkgVUxaVGltZXJMYXAodm9pZCkKeyByZXR1cm4gKF9fVUxaUmVhZFRpbWUoKSAtIHN0YXJ0KTsgfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKREVTQ1JJUFRJT046ClN0b3BzIHRoZSBMb25nIFBlcmlvZCBaZW4gVGltZXIgY291bnRpbmcuCgpIRUFERVI6Cnp0aW1lci5oCgpSRU1BUktTOgpTdG9wcyB0aGUgVWx0cmEgTG9uZyBQZXJpb2QgWmVuIFRpbWVyIGNvdW50aW5nIGFuZCBsYXRjaGVzIHRoZSBjb3VudC4gT25jZQp5b3UgaGF2ZSBzdG9wcGVkIHRoZSB0aW1lciB5b3UgY2FuIHJlYWQgdGhlIGNvdW50IHdpdGggVUxaVGltZXJDb3VudC4KClNFRSBBTFNPOgpVTFpUaW1lck9uLCBVTFpUaW1lckxhcCwgVUxaVGltZXJDb3VudAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIFpBUEkgVUxaVGltZXJPZmYodm9pZCkKeyBmaW5pc2ggPSBfX1VMWlJlYWRUaW1lKCk7IH0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkRFU0NSSVBUSU9OOgpSZXR1cm5zIHRoZSBjdXJyZW50IGNvdW50IGZvciB0aGUgVWx0cmEgTG9uZyBQZXJpb2QgWmVuIFRpbWVyLgoKSEVBREVSOgp6dGltZXIuaAoKUkVUVVJOUzoKQ291bnQgdGhhdCBoYXMgZWxhcHNlZCBpbiByZXNvbHV0aW9uIGNvdW50cy4KClJFTUFSS1M6ClJldHVybnMgdGhlIGN1cnJlbnQgY291bnQgdGhhdCBoYXMgZWxhcHNlZCBiZXR3ZWVuIGNhbGxzIHRvClVMWlRpbWVyT24gYW5kIFVMWlRpbWVyT2ZmIGluIHJlc29sdXRpb24gY291bnRzLgoKU0VFIEFMU086ClVMWlRpbWVyT24sIFVMWlRpbWVyT2ZmLCBVTFpUaW1lckxhcCwgVUxaVGltZXJSZXNvbHV0aW9uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnVsb25nIFpBUEkgVUxaVGltZXJDb3VudCh2b2lkKQp7IHJldHVybiAoZmluaXNoIC0gc3RhcnQpOyB9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpERVNDUklQVElPTjoKUmVhZHMgdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZSBVbHRyYSBMb25nIFBlcmlvZCBaZW4gVGltZXIuCgpIRUFERVI6Cnp0aW1lci5oCgpSRVRVUk5TOgpDdXJyZW50IHRpbWVyIHZhbHVlIGluIHJlc29sdXRpb24gY291bnRzLgoKUkVNQVJLUzoKUmVhZHMgdGhlIGN1cnJlbnQgVWx0cmEgTG9uZyBQZXJpb2QgWmVuIFRpbWVyIGFuZCByZXR1cm5zIGl0knMgY3VycmVudApjb3VudC4gWW91IGNhbiB1c2UgdGhlIFVMWkVsYXBzZWRUaW1lIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGVsYXBzZWQgdGltZQpiZXR3ZWVuIHR3byB0aW1lciBjb3VudCByZWFkaW5ncy4KClNFRSBBTFNPOgpVTFpFbGFwc2VkVGltZSwgVUxaVGltZXJSZXNvbHV0aW9uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnVsb25nIFpBUEkgVUxaUmVhZFRpbWUodm9pZCkKeyByZXR1cm4gX19VTFpSZWFkVGltZSgpOyB9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpERVNDUklQVElPTjoKQ29tcHV0ZSB0aGUgZWxhcHNlZCB0aW1lIGJldHdlZW4gdHdvIHRpbWVyIGNvdW50cy4KCkhFQURFUjoKenRpbWVyLmgKClBBUkFNRVRFUlM6CnN0YXJ0ICAgLSBTdGFydGluZyB0aW1lIGZvciBlbGFwc2VkIGNvdW50CmZpbmlzaCAgLSBFbmRpbmcgdGltZSBmb3IgZWxhcHNlZCBjb3VudAoKUkVUVVJOUzoKRWxhcHNlZCB0aW1lciBpbiByZXNvbHV0aW9uIGNvdW50cy4KClJFTUFSS1M6ClJldHVybnMgdGhlIGVsYXBzZWQgdGltZSBmb3IgdGhlIFVsdHJhIExvbmcgUGVyaW9kIFplbiBUaW1lciBpbiB1bml0cyBvZiB0aGUKdGltZXJzIHJlc29sdXRpb24gKDEvMTh0aCBvZiBhIHNlY29uZCB1bmRlciBET1MpLiBUaGlzIGZ1bmN0aW9uIGNvcnJlY3RseQpjb21wdXRlcyB0aGUgZGlmZmVyZW5jZSBldmVuIGlmIGEgbWlkbmlnaHQgYm91bmRhcnkgaGFzIGJlZW4gY3Jvc3NlZApkdXJpbmcgdGhlIHRpbWluZyBwZXJpb2QuCgpTRUUgQUxTTzoKVUxaUmVhZFRpbWUsIFVMWlRpbWVyUmVzb2x1dGlvbgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp1bG9uZyBaQVBJIFVMWkVsYXBzZWRUaW1lKAogICAgdWxvbmcgc3RhcnQsCiAgICB1bG9uZyBmaW5pc2gpCnsgcmV0dXJuIF9fVUxaRWxhcHNlZFRpbWUoc3RhcnQsZmluaXNoKTsgfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKREVTQ1JJUFRJT046ClJldHVybnMgdGhlIHJlc29sdXRpb24gb2YgdGhlIFVsdHJhIExvbmcgUGVyaW9kIFplbiBUaW1lci4KCkhFQURFUjoKenRpbWVyLmgKClBBUkFNRVRFUlM6CnJlc29sdXRpb24gICAtIFBsYWNlIHRvIHN0b3JlIHRoZSB0aW1lciBpbiBtaWNyb3NlY29uZHMgcGVyIHRpbWVyIGNvdW50LgoKUkVNQVJLUzoKUmV0dXJucyB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgVWx0cmEgTG9uZyBQZXJpb2QgWmVuIFRpbWVyIGFzIGEgMzItYml0CmludGVnZXIgdmFsdWUgbWVhc3VyZWQgaW4gbWljcm9zZWNvbmRzIHBlciB0aW1lciBjb3VudC4KClNFRSBBTFNPOgpVTFpSZWFkVGltZSwgVUxaRWxhcHNlZFRpbWUsIFVMWlRpbWVyQ291bnQKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBaQVBJIFVMWlRpbWVyUmVzb2x1dGlvbigKCXVsb25nICpyZXNvbHV0aW9uKQp7ICpyZXNvbHV0aW9uID0gVUxaVElNRVJfUkVTT0xVVElPTjsgfQo=