LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQWdlcmUgU3lzdGVtcyBJbmMuCiAqIFdpcmVsZXNzIGRldmljZSBkcml2ZXIgZm9yIExpbnV4ICh3bGFnczQ5KS4KICoKICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgQWdlcmUgU3lzdGVtcyBJbmMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KICoKICogSW5pdGlhbGx5IGRldmVsb3BlZCBieSBUcmlwbGVQb2ludCwgSW5jLgogKiAgIGh0dHA6Ly93d3cudHJpcGxlcG9pbnQuY29tCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGFuZCBtYWNyb3MgZm9yIGRlYnVnZ2luZy4KICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICoKICogU09GVFdBUkUgTElDRU5TRQogKgogKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwogKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCiAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KICoKICogQ29weXJpZ2h0IChjKSAyMDAzIEFnZXJlIFN5c3RlbXMgSW5jLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAqCiAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCiAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCiAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogKiAgICBkaXN0cmlidXRpb24uCiAqCiAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAogKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCiAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKgogKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwogKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIERpc2NsYWltZXIKICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCiAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQogKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgogKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAogKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAogKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAogKiBEQU1BR0UuCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWZuZGVmIF9ERUJVR19ICiNkZWZpbmUgX0RFQlVHX0gKCgoKCi8qIFR1cm4gb24gZGVidWdnaW5nIGhlcmUgaWYgbm90IGRvbmUgd2l0aCBhIHByZXByb2Nlc3NvciBkZWZpbmUgKi8KI2lmbmRlZiBEQkcKI2RlZmluZSBEQkcgMAojZWxzZQojdW5kZWYJREJHCiNkZWZpbmUgREJHIDEKI2VuZGlmIC8qIERCRyAqLwoKCgoKI2lmIERCRwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qIFNldCB0aGUgbGV2ZWwgb2YgZGVidWdnaW5nIGlmIG5vdCBkb25lIHdpdGggYSBwcmVwcm9jZXNzb3IgZGVmaW5lLiBTZWUKICAgd2xfbWFpbi5jLCBpbml0X21vZHVsZSgpIGZvciBob3cgdGhlIGRlYnVnIGxldmVsIHRyYW5zbGF0ZXMgaW50byB0aGUKICAgdGhlIHR5cGVzIG9mIG1lc3NhZ2VzIGRpc3BsYXllZCAqLwojaWZuZGVmIERCR19MVkwKI2RlZmluZSBEQkdfTFZMIDUJCQkvKiB5aWVsZHMgbm90aGluZyB2aWEgaW5pdF9tb2R1bGUsCgkJCQkJCQkgICBvcmlnaW5hbCB2YWx1ZSBvZiA1IHlpZWxkcyBEQkdfVFJBQ0VfT04gYW5kIERCR19WRVJCT1NFX09OICovCiNlbmRpZiAgLyogIERCR19MVkwqLwoKCiNkZWZpbmUgREJHX0VSUk9SX09OICAgICAgICAweDAwMDAwMDAxTAojZGVmaW5lIERCR19XQVJOSU5HX09OICAgICAgMHgwMDAwMDAwMkwKI2RlZmluZSBEQkdfTk9USUNFX09OICAgICAgIDB4MDAwMDAwMDRMCiNkZWZpbmUgREJHX1RSQUNFX09OICAgICAgICAweDAwMDAwMDA4TAojZGVmaW5lIERCR19WRVJCT1NFX09OICAgICAgMHgwMDAwMDAxMEwKI2RlZmluZSBEQkdfUEFSQU1fT04gICAgICAgIDB4MDAwMDAwMjBMCiNkZWZpbmUgREJHX0JSRUFLX09OICAgICAgICAweDAwMDAwMDQwTAojZGVmaW5lIERCR19SWF9PTiAgICAgICAgICAgMHgwMDAwMDEwMEwKI2RlZmluZSBEQkdfVFhfT04gICAgICAgICAgIDB4MDAwMDAyMDBMCiNkZWZpbmUgREJHX0RTX09OICAgICAgICAgICAweDAwMDAwNDAwTAoKI2RlZmluZSBEQkdfREVGQVVMVFMgICAgICAgIChEQkdfRVJST1JfT04gfCBEQkdfV0FSTklOR19PTiB8IERCR19CUkVBS19PTikKCiNkZWZpbmUgREJHX0ZMQUdTKEEpICAgICAgICAoKEEpLT5EZWJ1Z0ZsYWcpCiNkZWZpbmUgREJHX05BTUUoQSkgICAgICAgICAoKEEpLT5kYmdOYW1lKQojZGVmaW5lIERCR19MRVZFTChBKSAgICAgICAgKChBKS0+ZGJnTGV2ZWwpCgoKI2lmbmRlZiBQUklOVEsKIyAgIGRlZmluZSBQUklOVEsoUy4uLikgICAgIHByaW50ayhTKQojZW5kaWYgLyogUFJJTlRLICovCgoKI2lmbmRlZiBEQkdfUFJJTlQKIyAgIGRlZmluZSBEQkdfUFJJTlQoUy4uLikgIFBSSU5USyhLRVJOX0RFQlVHIFMpCiNlbmRpZiAvKiBEQkdfUFJJTlQgKi8KCgojaWZuZGVmIERCR19QUklOVEMKIyAgIGRlZmluZSBEQkdfUFJJTlRDKFMuLi4pIFBSSU5USyhTKQojZW5kaWYgLyogREJHX1BSSU5UQyAqLwoKCiNpZm5kZWYgREJHX1RSQVAKIyAgIGRlZmluZSBEQkdfVFJBUCAgICAgICAgIHt9CiNlbmRpZiAvKiBEQkdfVFJBUCAqLwoKCiNkZWZpbmUgX0VOVEVSX1NUUiAgICAgICAgICAiPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiIKI2RlZmluZSBfTEVBVkVfU1RSICAgICAgICAgICI8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8IgoKCiNkZWZpbmUgX0RCR19FTlRFUihBKQkJCQkJCVwKCURCR19QUklOVCgiJXM6JS4qczolc1xuIiwgREJHX05BTUUoQSksICsrREJHX0xFVkVMKEEpLAlcCgkJICBfRU5URVJfU1RSLCBfX2Z1bmNfXykKI2RlZmluZSBfREJHX0xFQVZFKEEpCQkJCQkJXAoJREJHX1BSSU5UKCIlczolLipzOiVzXG4iLCBEQkdfTkFNRShBKSwgREJHX0xFVkVMKEEpLS0sCVwKCQkgIF9MRUFWRV9TVFIsIF9fZnVuY19fKQoKCiNkZWZpbmUgREJHX0ZVTkMoRikKCiNkZWZpbmUgREJHX0VOVEVSKEEpICAgICAgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19UUkFDRV9PTikgXAoJCQkJX0RCR19FTlRFUihBKTsgfQoKI2RlZmluZSBEQkdfTEVBVkUoQSkgICAgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1RSQUNFX09OKSBcCgkJCQkgX0RCR19MRUFWRShBKTsgfQoKI2RlZmluZSBEQkdfUEFSQU0oQSwgTiwgRiwgUy4uLikgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19QQVJBTV9PTikgXAoJCQkJREJHX1BSSU5UKCIgICVzIC0tICJGIlxuIiwgTiwgUyk7IH0KCgojZGVmaW5lIERCR19FUlJPUihBLCBTLi4uKSBkbyB7CQkJCQkJXAoJCWlmIChEQkdfRkxBR1MoQSkgJiBEQkdfRVJST1JfT04pIHsJCQlcCgkJCURCR19QUklOVCgiJXM6RVJST1I6JXMgIiwgREJHX05BTUUoQSksIF9fZnVuY19fKTsgXAoJCQlEQkdfUFJJTlRDKFMpOwkJCQkJXAoJCQlEQkdfVFJBUDsJCQkJCVwKCQl9IH0gd2hpbGUgKDApCgoKI2RlZmluZSBEQkdfV0FSTklORyhBLCBTLi4uKSBkbyB7CQkJCQlcCgkJaWYgKERCR19GTEFHUyhBKSAmIERCR19XQVJOSU5HX09OKSB7CQkJXAoJCQlEQkdfUFJJTlQoIiVzOldBUk5JTkc6JXMgIiwgREJHX05BTUUoQSksIF9fZnVuY19fKTsgXAoJCQlEQkdfUFJJTlRDKFMpOwkJCQkJXAoJCX0gfSB3aGlsZSAoMCkKCgojZGVmaW5lIERCR19OT1RJQ0UoQSwgUy4uLikgIGRvIHsJCQkJCVwKCQlpZiAoREJHX0ZMQUdTKEEpICYgREJHX05PVElDRV9PTikgewkJCVwKCQkJREJHX1BSSU5UKCIlczpOT1RJQ0U6JXMgIiwgREJHX05BTUUoQSksIF9fZnVuY19fKTsgXAoJCQlEQkdfUFJJTlRDKFMpOwkJCQkJXAoJCX0gfSB3aGlsZSAoMCkKCgojZGVmaW5lIERCR19UUkFDRShBLCBTLi4uKSAgIGRvIHsgXAoJCWlmIChEQkdfRkxBR1MoQSkgJiBEQkdfVFJBQ0VfT04pIHsJCQlcCgkJCURCR19QUklOVCgiJXM6JXMgIiwgREJHX05BTUUoQSksIF9fZnVuY19fKTsJXAoJCQlEQkdfUFJJTlRDKFMpOwkJCQkJXAoJCX0gfSB3aGlsZSAoMCkKCgojZGVmaW5lIERCR19SWChBLCBTLi4uKSAgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1JYX09OKSB7XAoJCQkJREJHX1BSSU5UKFMpOyB9IH0KCgojZGVmaW5lIERCR19UWChBLCBTLi4uKSAgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1RYX09OKSB7XAoJCQkJREJHX1BSSU5UKFMpOyB9IH0KCiNkZWZpbmUgREJHX0RTKEEsIFMuLi4pICAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfRFNfT04pIHtcCgkJCQlEQkdfUFJJTlQoUyk7IH0gfQoKCiNkZWZpbmUgREJHX0FTU0VSVChDKSBkbyB7IFwKCQlpZiAoIShDKSkgewkJCQkJCVwKCQkJREJHX1BSSU5UKCJBU1NFUlQoJXMpIC0tICVzIyVkICglcylcbiIsCQlcCgkJCQkgICNDLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsJXAoJCQlEQkdfVFJBUDsJCQkJCVwKCQl9IH0gd2hpbGUgKDApCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICAgICAgICAgICAqZGJnTmFtZTsKICAgIGludCAgICAgICAgICAgICBkYmdMZXZlbDsKICAgIHVuc2lnbmVkIGxvbmcgICBEZWJ1Z0ZsYWc7Cn0gZGJnX2luZm9fdDsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2Vsc2UgLyogREJHICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2RlZmluZSBEQkdfREVGTgojZGVmaW5lIERCR19UUkFQCiNkZWZpbmUgREJHX0ZVTkMoRikKI2RlZmluZSBEQkdfUFJJTlQoUy4uLikKI2RlZmluZSBEQkdfRU5URVIoQSkKI2RlZmluZSBEQkdfTEVBVkUoQSkKI2RlZmluZSBEQkdfUEFSQU0oQSwgTiwgRiwgUy4uLikKI2RlZmluZSBEQkdfRVJST1IoQSwgUy4uLikKI2RlZmluZSBEQkdfV0FSTklORyhBLCBTLi4uKQojZGVmaW5lIERCR19OT1RJQ0UoQSwgUy4uLikKI2RlZmluZSBEQkdfVFJBQ0UoQSwgUy4uLikKI2RlZmluZSBEQkdfUlgoQSwgUy4uLikKI2RlZmluZSBEQkdfVFgoQSwgUy4uLikKI2RlZmluZSBEQkdfRFMoQSwgUy4uLikKI2RlZmluZSBEQkdfQVNTRVJUKEMpCgojZW5kaWYgLyogREJHICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKI2VuZGlmIC8qIF9ERUJVR19IICovCgo=