I2luY2x1ZGUgPENvcHlyaWdodC5oPgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogbXNBcGlQcm90b3R5cGUuaAoqCiogREVTQ1JJUFRJT046CiogICAgICAgQVBJIFByb3RvdHlwZXMgZm9yIFF1YXJ0ZXJEZWNrIERldmljZQoqCiogREVQRU5ERU5DSUVTOgoqCiogRklMRSBSRVZJU0lPTiBOVU1CRVI6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZm5kZWYgX19tc0FwaVByb3RvdHlwZV9oCiNkZWZpbmUgX19tc0FwaVByb3RvdHlwZV9oCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgoKCi8qIGd0QnJnRmRiLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYlNldEF0dVNpemUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFNldHMgdGhlIE1hYyBhZGRyZXNzIHRhYmxlIHNpemUuCioKKiBJTlBVVFM6CiogICAgICAgc2l6ZSAgICAtIE1hYyBhZGRyZXNzIHRhYmxlIHNpemUuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYlNldEF0dVNpemUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBBVFVfU0laRSBzaXplCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0QWdpbmdUaW1lUmFuZ2UKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgdGhlIG1heGltYWwgYW5kIG1pbmltdW0gYWdlIHRpbWVzIHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBzdXBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIG1heFRpbWVvdXQgLSBtYXggYWdpbmcgdGltZSBpbiBzZWNvdW5kcy4KKiAgICAgICBtaW5UaW1lb3V0IC0gbWluIGFnaW5nIHRpbWUgaW4gc2Vjb3VuZHMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRBZ2luZ1RpbWVSYW5nZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIE9VVCBHVF9VMzIgKm1heFRpbWVvdXQsCiAgICBPVVQgR1RfVTMyICptaW5UaW1lb3V0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRBZ2luZ1RpbWVvdXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgdGhlIHRpbWVvdXQgcGVyaW9kIGluIHNlY29uZHMgZm9yIGFnaW5nIG91dCBkeW5hbWljYWxseSBsZWFybmVkCiogICAgICAgZm9yd2FyZGluZyBpbmZvcm1hdGlvbi4gVGhlIHJldHVybmVkIHZhbHVlIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIHZhbHVlCioJCXByb2dyYW1tZWQgd2l0aCA8Z2ZkYlNldEFnaW5nVGltZW91dD4uIFBsZWFzZSByZWZlciB0byB0aGUgZGVzY3JpcHRpb24gb2YKKgkJPGdmZGJTZXRBZ2luZ1RpbWVvdXQ+LgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIHRpbWVvdXQgLSBhZ2luZyB0aW1lIGluIHNlY29uZHMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldEFnaW5nVGltZW91dAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfVTMyICAgICAgICp0aW1lb3V0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJTZXRBZ2luZ1RpbWVvdXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFNldHMgdGhlIHRpbWVvdXQgcGVyaW9kIGluIHNlY29uZHMgZm9yIGFnaW5nIG91dCBkeW5hbWljYWxseSBsZWFybmVkCiogICAgICAgZm9yd2FyZGluZyBpbmZvcm1hdGlvbi4gVGhlIHN0YW5kYXJkIHJlY29tbWVuZHMgMzAwIHNlYy4KKgkJU3VwcG9ydGVkIGFnaW5nIHRpbWVvdXQgdmFsdWVzIGFyZSBtdWx0aXBsZSBvZiB0aW1lLWJhc2UsIHdoZXJlIHRpbWUtYmFzZQoqCQlpcyBlaXRoZXIgMTUgb3IgMTYgc2Vjb25kcywgZGVwZW5kaW5nIG9uIHRoZSBTd2l0Y2ggZGV2aWNlLiBGb3IgZXhhbXBsZSwKKgkJODhFNjA2MyB1c2VzIHRpbWUtYmFzZSAxNiwgYW5kIHNvIHN1cHBvcnRlZCBhZ2luZyB0aW1lb3V0cyBhcmUgMCwxNiwzMiwKKgkJNDgsLi4uLCBhbmQgNDA4MC4gSWYgdW5zdXBwb3J0ZWQgdGltZW91dCB2YWx1ZSAoYmlnZ2VyIHRoYW4gMTYpIGlzIHVzZWQsIAoqCQl0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCB2YWx1ZSBzbWFsbGVyIHRoYW4gdGhlIAoqCQlnaXZlbiB0aW1lb3V0LiBJZiB0aGUgZ2l2ZW4gdGltZW91dCBpcyBsZXNzIHRoYW4gMTYsIG1pbmltdW0gdGltZW91dCB2YWx1ZQoqCQkxNiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4gRS5nLikgMzUgYmVjb21lcyAzMiBhbmQgNSBiZWNvbWVzIDE2LgoqCQk8Z2ZkYkdldEFnaW5nVGltZVJhbmdlPiBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSB0aW1lLWJhc2UuCioKKiBJTlBVVFM6CiogICAgICAgdGltZW91dCAtIGFnaW5nIHRpbWUgaW4gc2Vjb25kcy4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiU2V0QWdpbmdUaW1lb3V0CigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfVTMyIHRpbWVvdXQKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0QXR1RHluYW1pY0NvdW50CioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIHRoZSBjdXJyZW50IG51bWJlciBvZiBkeW5hbWljIHVuaWNhc3QgZW50cmllcyBpbiB0aGlzCiogICAgICAgRmlsdGVyaW5nIERhdGFiYXNlLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIG51bUR5bkVudHJpZXMgLSBudW1iZXIgb2YgZHluYW1pYyBlbnRyaWVzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PX1NVQ0ggLSB2bGFuIGRvZXMgbm90IGV4aXN0LgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiR2V0QXR1RHluYW1pY0NvdW50CigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX1UzMiAqbnVtRHluRW50cmllcwopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRBdHVFbnRyeUZpcnN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIGZpcnN0IGxleGljb2dyYXBoaWMgTUFDIGFkZHJlc3MgZW50cnkgZnJvbSB0aGUgQVRVLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIGF0dUVudHJ5IC0gbWF0Y2ggQWRkcmVzcyB0cmFuc2xhdGUgdW5pdCBlbnRyeS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT19TVUNIIC0gdGFibGUgaXMgZW1wdHkuCioKKiBDT01NRU5UUzoKKiAgICAgICBTZWFyY2ggc3RhcnRzIGZyb20gTWFjWzAwOjAwOjAwOjAwOjAwOjAwXQoqCioJCURCTnVtIGluIGF0dUVudHJ5IC0gCioJCQlBVFUgTUFDIEFkZHJlc3MgRGF0YWJhc2UgbnVtYmVyLiBJZiBtdWx0aXBsZSBhZGRyZXNzIAoqCQkJZGF0YWJhc2VzIGFyZSBub3QgYmVpbmcgdXNlZCwgREJOdW0gc2hvdWxkIGJlIHplcm8uCioJCQlJZiBtdWx0aXBsZSBhZGRyZXNzIGRhdGFiYXNlcyBhcmUgYmVpbmcgdXNlZCwgdGhpcyB2YWx1ZQoqCQkJc2hvdWxkIGJlIHNldCB0byB0aGUgZGVzaXJlZCBhZGRyZXNzIGRhdGFiYXNlIG51bWJlci4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldEF0dUVudHJ5Rmlyc3QKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfQVRVX0VOVFJZICAgICphdHVFbnRyeQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRBdHVFbnRyeU5leHQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgbmV4dCBsZXhpY29ncmFwaGljIE1BQyBhZGRyZXNzIGZyb20gdGhlIHNwZWNpZmllZCBNYWMgQWRkci4KKgoqIElOUFVUUzoKKiAgICAgICBhdHVFbnRyeSAtIHRoZSBNYWMgQWRkcmVzcyB0byBzdGFydCB0aGUgc2VhcmNoLgoqCiogT1VUUFVUUzoKKiAgICAgICBhdHVFbnRyeSAtIG1hdGNoIEFkZHJlc3MgdHJhbnNsYXRlIHVuaXQgZW50cnkuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzLgoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvciBvciBlbnRyeSBkb2VzIG5vdCBleGlzdC4KKiAgICAgICBHVF9OT19TVUNIIC0gbm8gbW9yZSBlbnRyaWVzLgoqCiogQ09NTUVOVFM6CiogICAgICAgU2VhcmNoIHN0YXJ0cyBmcm9tIGF0dS5tYWNBZGRyW3h4Onh4Onh4Onh4Onh4Onh4XSBzcGVjaWZpZWQgYnkgdGhlCiogICAgICAgdXNlci4KKgoqCQlEQk51bSBpbiBhdHVFbnRyeSAtIAoqCQkJQVRVIE1BQyBBZGRyZXNzIERhdGFiYXNlIG51bWJlci4gSWYgbXVsdGlwbGUgYWRkcmVzcyAKKgkJCWRhdGFiYXNlcyBhcmUgbm90IGJlaW5nIHVzZWQsIERCTnVtIHNob3VsZCBiZSB6ZXJvLgoqCQkJSWYgbXVsdGlwbGUgYWRkcmVzcyBkYXRhYmFzZXMgYXJlIGJlaW5nIHVzZWQsIHRoaXMgdmFsdWUKKgkJCXNob3VsZCBiZSBzZXQgdG8gdGhlIGRlc2lyZWQgYWRkcmVzcyBkYXRhYmFzZSBudW1iZXIuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRBdHVFbnRyeU5leHQKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTk9VVCBHVF9BVFVfRU5UUlkgICphdHVFbnRyeQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJGaW5kQXR1TWFjRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEZpbmQgRkRCIGVudHJ5IGZvciBzcGVjaWZpYyBNQUMgYWRkcmVzcyBmcm9tIHRoZSBBVFUuCioKKiBJTlBVVFM6CiogICAgICAgYXR1RW50cnkgLSB0aGUgTWFjIGFkZHJlc3MgdG8gc2VhcmNoLgoqCiogT1VUUFVUUzoKKiAgICAgICBmb3VuZCAgICAtIEdUX1RSVUUsIGlmIHRoZSBhcHByb3ByaWF0ZSBlbnRyeSBleGlzdHMuCiogICAgICAgYXR1RW50cnkgLSB0aGUgZW50cnkgcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MuCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yIG9yIGVudHJ5IGRvZXMgbm90IGV4aXN0LgoqICAgICAgIEdUX05PX1NVQ0ggLSBubyBtb3JlIGVudHJpZXMuCioKKiBDT01NRU5UUzoKKgkJREJOdW0gaW4gYXR1RW50cnkgLSAKKgkJCUFUVSBNQUMgQWRkcmVzcyBEYXRhYmFzZSBudW1iZXIuIElmIG11bHRpcGxlIGFkZHJlc3MgCioJCQlkYXRhYmFzZXMgYXJlIG5vdCBiZWluZyB1c2VkLCBEQk51bSBzaG91bGQgYmUgemVyby4KKgkJCUlmIG11bHRpcGxlIGFkZHJlc3MgZGF0YWJhc2VzIGFyZSBiZWluZyB1c2VkLCB0aGlzIHZhbHVlCioJCQlzaG91bGQgYmUgc2V0IHRvIHRoZSBkZXNpcmVkIGFkZHJlc3MgZGF0YWJhc2UgbnVtYmVyLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiRmluZEF0dU1hY0VudHJ5CigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU5PVVQgR1RfQVRVX0VOVFJZICAqYXR1RW50cnksCiAgICBPVVQgR1RfQk9PTCAgICAgICAgICpmb3VuZAopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJGbHVzaAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGZsdXNoIGFsbCBvciB1bmJsb2NrZWQgYWRkcmVzc2VzIGZyb20gdGhlIE1BQyBBZGRyZXNzCiogICAgICAgVGFibGUuCioKKiBJTlBVVFM6CiogICAgICAgZmx1c2hDbWQgLSB0aGUgZmx1c2ggb3BlcmF0aW9uIHR5cGUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9fUkVTT1VSQ0UgIC0gZmFpbGVkIHRvIGFsbG9jYXRlIGEgdDJjIHN0cnVjdAoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJGbHVzaAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0ZMVVNIX0NNRCBmbHVzaENtZAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiRmx1c2hJbkRCCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZmx1c2ggYWxsIG9yIHVuYmxvY2tlZCBhZGRyZXNzZXMgZnJvbSB0aGUgcGFydGljdWxhcgoqICAgICAgIEFUVSBEYXRhYmFzZSAoREJOdW0pLiBJZiBtdWx0aXBsZSBhZGRyZXNzIGRhdGFiYXNlcyBhcmUgYmVpbmcgdXNlZCwgdGhpcwoqCQlBUEkgY2FuIGJlIHVzZWQgdG8gZmx1c2ggZW50cmllcyBpbiBhIHBhcnRpY3VsYXIgREJOdW0gZGF0YWJhc2UuCioKKiBJTlBVVFM6CiogICAgICAgZmx1c2hDbWQgLSB0aGUgZmx1c2ggb3BlcmF0aW9uIHR5cGUuCioJCURCTnVtCSAtIEFUVSBNQUMgQWRkcmVzcyBEYXRhYmFzZSBOdW1iZXIuIAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJGbHVzaEluREIKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9GTFVTSF9DTUQgZmx1c2hDbWQsCglJTiBHVF9VMzIgREJOdW0KKTsKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiQ2xlYXJBdHVEeW5hbWljRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIENsZWFyIGFsbCBub24tc3RhdGljIGVudHJpZXMuCioKKiBJTlBVVFM6CioKKiBPVVRQVVRTOgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkNsZWFyQXR1RHluYW1pY0VudHJ5CigKICAgIElOICBHVF9RRF9ERVYgCSpkZXYKKTsKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiQWRkTWFjRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIENyZWF0ZXMgdGhlIG5ldyBlbnRyeSBpbiBNQUMgYWRkcmVzcyB0YWJsZS4KKgoqIElOUFVUUzoKKiAgICAgICBtYWNFbnRyeSAgICAtIG1hYyBhZGRyZXNzIGVudHJ5IHRvIGluc2VydCB0byB0aGUgQVRVLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT19SRVNPVVJDRSAgICAtIGZhaWxlZCB0byBhbGxvY2F0ZSBhIHQyYyBzdHJ1Y3QKKiAgICAgICBHVF9PVVRfT0ZfQ1BVX01FTSAtIG9hTWFsbG9jIGZhaWxlZAoqCiogQ09NTUVOVFM6CioJCURCTnVtIGluIGF0dUVudHJ5IC0gCioJCQlBVFUgTUFDIEFkZHJlc3MgRGF0YWJhc2UgbnVtYmVyLiBJZiBtdWx0aXBsZSBhZGRyZXNzIAoqCQkJZGF0YWJhc2VzIGFyZSBub3QgYmVpbmcgdXNlZCwgREJOdW0gc2hvdWxkIGJlIHplcm8uCioJCQlJZiBtdWx0aXBsZSBhZGRyZXNzIGRhdGFiYXNlcyBhcmUgYmVpbmcgdXNlZCwgdGhpcyB2YWx1ZQoqCQkJc2hvdWxkIGJlIHNldCB0byB0aGUgZGVzaXJlZCBhZGRyZXNzIGRhdGFiYXNlIG51bWJlci4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkFkZE1hY0VudHJ5CigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfQVRVX0VOVFJZICptYWNFbnRyeQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJEZWxNYWNFbnRyeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgRGVsZXRlcyBNQUMgYWRkcmVzcyBlbnRyeS4KKgoqIElOUFVUUzoKKiAgICAgICBtYWNBZGRyZXNzIC0gbWFjIGFkZHJlc3MuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PX1JFU09VUkNFICAtIGZhaWxlZCB0byBhbGxvY2F0ZSBhIHQyYyBzdHJ1Y3QKKiAgICAgICBHVF9OT19TVUNIICAgICAgLSBpZiBzcGVjaWZpZWQgYWRkcmVzcyBlbnRyeSBkb2VzIG5vdCBleGlzdAoqCiogQ09NTUVOVFM6CiogICAgICAgRm9yIFNWTCBtb2RlIHZsYW4gSWQgaXMgaWdub3JlZC4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkRlbE1hY0VudHJ5CigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfRVRIRVJBRERSICAqbWFjQWRkcmVzcwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiRGVsQXR1RW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIERlbGV0ZXMgQVRVIGVudHJ5LgoqCiogSU5QVVRTOgoqICAgICAgIGF0dUVudHJ5IC0gdGhlIEFUVSBlbnRyeSB0byBiZSBkZWxldGVkLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT19SRVNPVVJDRSAgLSBmYWlsZWQgdG8gYWxsb2NhdGUgYSB0MmMgc3RydWN0CiogICAgICAgR1RfTk9fU1VDSCAgICAgIC0gaWYgc3BlY2lmaWVkIGFkZHJlc3MgZW50cnkgZG9lcyBub3QgZXhpc3QKKgoqIENPTU1FTlRTOgoqCQlEQk51bSBpbiBhdHVFbnRyeSAtIAoqCQkJQVRVIE1BQyBBZGRyZXNzIERhdGFiYXNlIG51bWJlci4gSWYgbXVsdGlwbGUgYWRkcmVzcyAKKgkJCWRhdGFiYXNlcyBhcmUgbm90IGJlaW5nIHVzZWQsIERCTnVtIHNob3VsZCBiZSB6ZXJvLgoqCQkJSWYgbXVsdGlwbGUgYWRkcmVzcyBkYXRhYmFzZXMgYXJlIGJlaW5nIHVzZWQsIHRoaXMgdmFsdWUKKgkJCXNob3VsZCBiZSBzZXQgdG8gdGhlIGRlc2lyZWQgYWRkcmVzcyBkYXRhYmFzZSBudW1iZXIuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJEZWxBdHVFbnRyeQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0FUVV9FTlRSWSAgKmF0dUVudHJ5Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJMZWFybkVuYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgRW5hYmxlL2Rpc2FibGUgYXV0b21hdGljIGxlYXJuaW5nIG9mIG5ldyBzb3VyY2UgTUFDIGFkZHJlc3NlcyBvbiBwb3J0CiogICAgICAgaW5ncmVzcy4KKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgZm9yIGVuYWJsZSAgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiTGVhcm5FbmFibGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9CT09MICBlbgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYkdldExlYXJuRW5hYmxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXQgYXV0b21hdGljIGxlYXJuaW5nIHN0YXR1cyBvZiBuZXcgc291cmNlIE1BQyBhZGRyZXNzZXMgb24gcG9ydCBpbmdyZXNzLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUKKgoqIE9VVFBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIGlmIGVuYWJsZWQgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldExlYXJuRW5hYmxlCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3RwU2V0TW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIEVuYWJsZSB0aGUgU3Bhbm5pbmcgdHJlZS4KKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgZm9yIGVuYWJsZSwgR1RfRkFMU0UgZm9yIGRpc2FibGUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICB3aGVuIGVuYWJsZWQsIHRoaXMgZnVuY3Rpb24gc2V0cyBhbGwgcG9ydCB0byBibG9ja2luZyBzdGF0ZSwgYW5kIGluc2VydHMKKiAgICAgICB0aGUgQlBEVSBNQUMgaW50byB0aGUgQVRVIHRvIGJlIGNhcHR1cmVkIHRvIENQVSwgb24gZGlzYWJsZSBhbGwgcG9ydCBhcmUKKiAgICAgICBiZWluZyBtb2RpZmllZCB0byBiZSBpbiBmb3J3YXJkaW5nIHN0YXRlLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3RwU2V0TW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0JPT0wgIGVuCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0cFNldFBvcnRTdGF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldCB0aGUgcG9ydCBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIHN0YXRlIC0gdGhlIHBvcnQgc3RhdGUgdG8gc2V0LgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0cFNldFBvcnRTdGF0ZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICAgICBwb3J0LAogICAgSU4gR1RfUE9SVF9TVFBfU1RBVEUgIHN0YXRlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0cEdldFBvcnRTdGF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIHBvcnQgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgc3RhdGUgLSB0aGUgY3VycmVudCBwb3J0IHN0YXRlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0cEdldFBvcnRTdGF0ZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgICAgICAgcG9ydCwKICAgIE9VVCBHVF9QT1JUX1NUUF9TVEFURSAgKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRFZ3Jlc3NNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0IHRoZSBlZ3Jlc3MgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgbW9kZSAtIHRoZSBlZ3Jlc3MgbW9kZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRFZ3Jlc3NNb2RlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBJTiBHVF9FR1JFU1NfTU9ERSAgbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRFZ3Jlc3NNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBlZ3Jlc3MgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gdGhlIGVncmVzcyBtb2RlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEVncmVzc01vZGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBPVVQgR1RfRUdSRVNTX01PREUgICptb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFZsYW5UdW5uZWwKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSB2bGFuIHR1bm5lbCBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBtb2RlIC0gdGhlIHZsYW4gdHVubmVsIG1vZGUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0VmxhblR1bm5lbAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBtb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFZsYW5UdW5uZWwKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXQgdGhlIHZsYW4gdHVubmVsIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIHRoZSB2bGFuIHR1bm5lbCBtb2RlLi4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRWbGFuVHVubmVsCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKm1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRJR01QU25vb3AKKgoqIERFU0NSSVBUSU9OOgoqIAkJVGhpcyByb3V0aW5lIHNldCB0aGUgSUdNUCBTbm9vcC4gV2hlbiBzZXQgdG8gb25lIGFuZCB0aGlzIHBvcnQgcmVjZWl2ZXMKKgkJSUdNUCBmcmFtZSwgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIHRvIHRoZSBDUFUgcG9ydCwgb3ZlcnJpZGluZyBhbGwgb3RoZXIgCioJCXN3aXRjaGluZyBkZWNpc2lvbnMsIHdpdGggZXhjZXB0aW9uIGZvciBDUFUncyBUcmFpbGVyLgoqCQlDUFUgcG9ydCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBJbmdyZXNzIE1vZGUgYml0cy4gQSBwb3J0IGlzIGNvbnNpZGVyZWQgCioJCXRoZSBDUFUgcG9ydCBpZiBpdHMgSW5ncmVzcyBNb2RlIGFyZSBlaXRoZXIgR1RfVFJBSUxFUl9JTkdSRVNTIG9yIAoqCQlHVF9DUFVQT1JUX0lOR1JFU1MuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgZm9yIElHTVAgU25vb3Agb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRJR01QU25vb3AKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfQk9PTCAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0SUdNUFNub29wCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldCB0aGUgSUdNUCBTbm9vcCBtb2RlLgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUU6IElHTVAgU25vb3AgZW5hYmxlZAoqICAJCQlHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRJR01QU25vb3AKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKLyogdGhlIGZvbGxvd2luZyB0d28gQVBJcyBhcmUgYWRkZWQgdG8gc3VwcG9ydCBjbGlwcGVyc2hpcCAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0SGVhZGVyTW9kZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXQgaW5ncmVzcyBhbmQgZWdyZXNzIGhlYWRlciBtb2RlIG9mIGEgc3dpdGNoIHBvcnQuIAoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIGZvciBoZWFkZXIgbW9kZSAgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRIZWFkZXJNb2RlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX0JPT0wgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEhlYWRlck1vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBpbmdyZXNzIGFuZCBlZ3Jlc3MgaGVhZGVyIG1vZGUgb2YgYSBzd2l0Y2ggcG9ydC4gCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRTogaGVhZGVyIG1vZGUgZW5hYmxlZAoqICAJCQlHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRIZWFkZXJNb2RlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKm1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQcm90ZWN0ZWRNb2RlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCBwcm90ZWN0ZWQgbW9kZSBvZiBhIHN3aXRjaCBwb3J0LiAKKgkJV2hlbiB0aGlzIG1vZGUgaXMgc2V0IHRvIEdUX1RSVUUsIGZyYW1lcyBhcmUgYWxsb3dlZCB0byBlZ3Jlc3MgcG9ydAoqCQlkZWZpbmVkIGJ5IHRoZSA4MDIuMVEgVkxBTiBtZW1iZXJzaGlwIGZvciB0aGUgZnJhbWUncyBWSUQgJ0FORCcKKgkJYnkgdGhlIHBvcnQncyBWTEFOVGFibGUgaWYgODAyLjFRIGlzIGVuYWJsZWQgb24gdGhlIHBvcnQuIEJvdGggbXVzdAoqCQlhbGxvdyB0aGUgZnJhbWUgdG8gRWdyZXNzLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIGZvciBwcm90ZWN0ZWQgbW9kZSBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFByb3RlY3RlZE1vZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQcm90ZWN0ZWRNb2RlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgcHJvdGVjdGVkIG1vZGUgb2YgYSBzd2l0Y2ggcG9ydC4gCioJCVdoZW4gdGhpcyBtb2RlIGlzIHNldCB0byBHVF9UUlVFLCBmcmFtZXMgYXJlIGFsbG93ZWQgdG8gZWdyZXNzIHBvcnQKKgkJZGVmaW5lZCBieSB0aGUgODAyLjFRIFZMQU4gbWVtYmVyc2hpcCBmb3IgdGhlIGZyYW1lJ3MgVklEICdBTkQnCioJCWJ5IHRoZSBwb3J0J3MgVkxBTlRhYmxlIGlmIDgwMi4xUSBpcyBlbmFibGVkIG9uIHRoZSBwb3J0LiBCb3RoIG11c3QKKgkJYWxsb3cgdGhlIGZyYW1lIHRvIEVncmVzcy4KKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFOiBoZWFkZXIgbW9kZSBlbmFibGVkCiogIAkJCUdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFByb3RlY3RlZE1vZGUKKAogICAgSU4gIEdUX1FEX0RFVgkJKmRldiwKICAgIElOICBHVF9MUE9SVAkJcG9ydCwKICAgIE9VVCBHVF9CT09MCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0Rm9yd2FyZFVua25vd24KKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IEZvcndhcmQgVW5rbm93biBtb2RlIG9mIGEgc3dpdGNoIHBvcnQuIAoqCQlXaGVuIHRoaXMgbW9kZSBpcyBzZXQgdG8gR1RfVFJVRSwgbm9ybWFsIHN3aXRjaCBvcGVyYXRpb24gb2NjdXJzLgoqCQlXaGVuIHRoaXMgbW9kZSBpcyBzZXQgdG8gR1RfRkFMU0UsIHVuaWNhc3QgZnJhbWUgd2l0aCB1bmtub3duIERBIGFkZHJlc3NlcwoqCQl3aWxsIG5vdCBlZ3Jlc3Mgb3V0IHRoaXMgcG9ydC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgcHJvdGVjdGVkIG1vZGUgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRGb3J3YXJkVW5rbm93bgooCiAgICBJTiBHVF9RRF9ERVYJKmRldiwKICAgIElOIEdUX0xQT1JUCXBvcnQsCiAgICBJTiBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRGb3J3YXJkVW5rbm93bgoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIEZvcndhcmQgVW5rbm93biBtb2RlIG9mIGEgc3dpdGNoIHBvcnQuIAoqCQlXaGVuIHRoaXMgbW9kZSBpcyBzZXQgdG8gR1RfVFJVRSwgbm9ybWFsIHN3aXRjaCBvcGVyYXRpb24gb2NjdXJzLgoqCQlXaGVuIHRoaXMgbW9kZSBpcyBzZXQgdG8gR1RfRkFMU0UsIHVuaWNhc3QgZnJhbWUgd2l0aCB1bmtub3duIERBIGFkZHJlc3NlcwoqCQl3aWxsIG5vdCBlZ3Jlc3Mgb3V0IHRoaXMgcG9ydC4KKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFOiBoZWFkZXIgbW9kZSBlbmFibGVkCioJCQkJR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0Rm9yd2FyZFVua25vd24KKAogICAgSU4gIEdUX1FEX0RFVgkJKmRldiwKICAgIElOICBHVF9MUE9SVAkJcG9ydCwKICAgIE9VVCBHVF9CT09MCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0U3dpdGNoUmVnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgU3dpdGNoIFBvcnQgUmVnaXN0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgcmVnQWRkciAtIFRoZSByZWdpc3RlcidzIGFkZHJlc3MuCioKKiBPVVRQVVRTOgoqICAgICAgIGRhdGEgICAgLSBUaGUgcmVhZCByZWdpc3RlcidzIGRhdGEuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFN3aXRjaFJlZwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiAgR1RfVTMyCSAgICAgcmVnQWRkciwKICAgIE9VVCBHVF9VMTYJICAgICAqZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0U3dpdGNoUmVnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd3JpdGVzIFN3aXRjaCBQb3J0IFJlZ2lzdGVycy4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgIHJlZ0FkZHIgLSBUaGUgcmVnaXN0ZXIncyBhZGRyZXNzLgoqCiogT1VUUFVUUzoKKiAgICAgICBkYXRhICAgIC0gVGhlIHJlYWQgcmVnaXN0ZXIncyBkYXRhLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRTd2l0Y2hSZWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gIEdUX1UzMgkgICAgIHJlZ0FkZHIsCiAgICBJTiAgR1RfVTE2CSAgICAgZGF0YQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEdsb2JhbFJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJlYWRzIFN3aXRjaCBHbG9iYWwgUmVnaXN0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIHJlZ0FkZHIgLSBUaGUgcmVnaXN0ZXIncyBhZGRyZXNzLgoqCiogT1VUUFVUUzoKKiAgICAgICBkYXRhICAgIC0gVGhlIHJlYWQgcmVnaXN0ZXIncyBkYXRhLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRHbG9iYWxSZWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX1UzMgkgICAgIHJlZ0FkZHIsCiAgICBPVVQgR1RfVTE2CSAgICAgKmRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEdsb2JhbFJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyBTd2l0Y2ggR2xvYmFsIFJlZ2lzdGVycy4KKgoqIElOUFVUUzoKKiAgICAgICByZWdBZGRyIC0gVGhlIHJlZ2lzdGVyJ3MgYWRkcmVzcy4KKgoqIE9VVFBVVFM6CiogICAgICAgZGF0YSAgICAtIFRoZSByZWFkIHJlZ2lzdGVyJ3MgZGF0YS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0R2xvYmFsUmVnCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9VMzIJICAgICByZWdBZGRyLAogICAgSU4gIEdUX1UxNgkgICAgIGRhdGEKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuU2V0UG9ydFZsYW5Qb3J0cwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQgVkxBTiBncm91cCBwb3J0IG1lbWJlcnNoaXAgbGlzdC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqICAgICAgIG1lbVBvcnRzICAgIC0gYXJyYXkgb2YgbG9naWNhbCBwb3J0cy4KKiAgICAgICBtZW1Qb3J0c0xlbiAtIG51bWJlciBvZiBtZW1iZXJzIGluIG1lbVBvcnRzIGFycmF5CioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsblNldFBvcnRWbGFuUG9ydHMKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfTFBPUlQgbWVtUG9ydHNbXSwKICAgIElOIEdUX1U4ICAgIG1lbVBvcnRzTGVuCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZsbkdldFBvcnRWbGFuUG9ydHMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBwb3J0IFZMQU4gZ3JvdXAgcG9ydCBtZW1iZXJzaGlwIGxpc3QuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIHNldC4KKgoqIE9VVFBVVFM6CiogICAgICAgbWVtUG9ydHMgICAgLSBhcnJheSBvZiBsb2dpY2FsIHBvcnRzLgoqICAgICAgIG1lbVBvcnRzTGVuIC0gbnVtYmVyIG9mIG1lbWJlcnMgaW4gbWVtUG9ydHMgYXJyYXkKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuR2V0UG9ydFZsYW5Qb3J0cwooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0xQT1JUIG1lbVBvcnRzW10sCiAgICBPVVQgR1RfVTggICAgKm1lbVBvcnRzTGVuCik7CgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5TZXRQb3J0VXNlclByaUxzYgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIFNldCB0aGUgdXNlciBwcmlvcml0eSAoVlBUKSBMU0IgYml0LCB0byBiZSBhZGRlZCB0byB0aGUKKiAgICAgICB1c2VyIHByaW9yaXR5IG9uIHRoZSBlZ3Jlc3MuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqICAgICAgIHVzZXJQcmlMc2IgLSBHVF9UUlVFIGZvciAxLCBHVF9GQUxTRSBmb3IgMC4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuU2V0UG9ydFVzZXJQcmlMc2IKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfQk9PTCAgdXNlclByaUxzYgopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5HZXRQb3J0VXNlclByaUxzYgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIHVzZXIgcHJpb3JpdHkgKFZQVCkgTFNCIGJpdC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIHVzZXJQcmlMc2IgLSBHVF9UUlVFIGZvciAxLCBHVF9GQUxTRSBmb3IgMC4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuR2V0UG9ydFVzZXJQcmlMc2IKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAqdXNlclByaUxzYgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZsblNldFBvcnRWaWQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBTZXQgdGhlIHBvcnQgZGVmYXVsdCB2bGFuIGlkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIHNldC4KKiAgICAgICB2aWQgIC0gdGhlIHBvcnQgdmxhbiBpZC4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuU2V0UG9ydFZpZAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9VMTYgICB2aWQKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5HZXRQb3J0VmlkCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgR2V0IHRoZSBwb3J0IGRlZmF1bHQgdmxhbiBpZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIHZpZCAgLSB0aGUgcG9ydCB2bGFuIGlkLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5HZXRQb3J0VmlkCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfVTE2ICAgKnZpZAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuU2V0UG9ydFZsYW5EQk51bQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQgVkxBTiBkYXRhYmFzZSBudW1iZXIgKERCTnVtKS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCiogICAgICAgREJOdW0gCS0gZGF0YWJhc2UgbnVtYmVyIGZvciB0aGlzIHBvcnQgCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOklOIEdUX0lOR1JFU1NfTU9ERSBtb2RlCiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsblNldFBvcnRWbGFuREJOdW0KKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfVTMyICAgREJOdW0KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5HZXRQb3J0VmxhbkRCTnVtCioKKiBERVNDUklQVElPTjpJTiBHVF9JTkdSRVNTX01PREUgbW9kZQoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBwb3J0IFZMQU4gZGF0YWJhc2UgbnVtYmVyIChEQk51bSkuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAJLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIGdldC4KKgoqIE9VVFBVVFM6CiogICAgICAgREJOdW0gCS0gZGF0YWJhc2UgbnVtYmVyIGZvciB0aGlzIHBvcnQgCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5HZXRQb3J0VmxhbkRCTnVtCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfVTMyICAgICpEQk51bQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZsblNldFBvcnRWbGFuRG90MXFNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgcG9ydCA4MDIuMXEgbW9kZSAoMTE6MTApIAoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIHNldC4KKiAgICAgICBtb2RlIAktIDgwMi4xcSBtb2RlIGZvciB0aGlzIHBvcnQgCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOklOIEdUX0lOR1JFU1NfTU9ERSBtb2RlCiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsblNldFBvcnRWbGFuRG90MXFNb2RlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgCXBvcnQsCiAgICBJTiBHVF9ET1QxUV9NT0RFCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZsbkdldFBvcnRWbGFuRG90MXFNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCA4MDIuMXEgbW9kZSAoYml0IDExOjEwKS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IAktIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gZ2V0LgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIAktIDgwMi4xcSBtb2RlIGZvciB0aGlzIHBvcnQgCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsbkdldFBvcnRWbGFuRG90MXFNb2RlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfRE9UMVFfTU9ERSAgICAqbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5TZXRQb3J0VmxhbkZvcmNlRGVmYXVsdFZJRAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQgODAyLjFxIG1vZGUgKDExOjEwKSAKKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCiogICAgICAgbW9kZSAgICAtIEdUX1RSVUUsIGZvcmNlIHRvIHVzZSBkZWZhdWx0IFZJRAoqICAgICAgICAgICAgICAgICBHVF9GQVVMU0UsIG90aGVyd2lzZSAKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsblNldFBvcnRWbGFuRm9yY2VEZWZhdWx0VklECigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgCXBvcnQsCiAgICBJTiBHVF9CT09MICAJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuR2V0UG9ydFZsYW5Gb3JjZURlZmF1bHRWSUQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBwb3J0IG1vZGUgZm9yIEZvcmNlRGVmYXVsdFZJRCAoYml0IDEyKS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IAktIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gZ2V0LgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIAktIEZvcmNlRGVmYXVsdFZJRCBtb2RlIGZvciB0aGlzIHBvcnQgCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5HZXRQb3J0VmxhbkZvcmNlRGVmYXVsdFZJRAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCAJIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZXZlbnRTZXRBY3RpdmUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIHRoZSByZWNlaXZlIG9mIGFuIGhhcmR3YXJlIGRyaXZlbiBldmVudC4KKgoqIElOUFVUUzoKKiAgICAgICBldmVudFR5cGUgLSB0aGUgZXZlbnQgdHlwZS4gYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xvd2luZzogCiogICAgICAgCUdUX1NUQVRTX0RPTkUsIEdUX1ZUVV9QUk9CLCBHVF9WVFVfRE9ORSwgR1RfQVRVX0ZVTEwsICAKKiAgICAgICAJR1RfQVRVX0RPTkUsIEdUX1BIWV9JTlRFUlJVUFQsIEdUX0VFX0lOVEVSUlVQVCwgYW5kIEdUX0RFVklDRV9JTlQKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIEVhY2ggc3dpdGNoIGRldmljZSBoYXMgaXRzIG93biBzZXQgb2YgZXZlbnQgVHlwZXMuIFBsZWFzZSByZWZlciB0byB0aGUKKgkJZGV2aWNlIGRhdGFzaGVldCBmb3IgdGhlIGxpc3Qgb2YgZXZlbnQgdHlwZXMgdGhhdCB0aGUgZGV2aWNlIHN1cHBvcnRzLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBldmVudFNldEFjdGl2ZQooCiAgICBJTiBHVF9RRF9ERVYgCSpkZXYsCiAgICBJTiBHVF9VMzIgCQlldmVudFR5cGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZXZlbnRHZXRJbnRTdGF0dXMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBhbiBoYXJkd2FyZSBkcml2ZW4gZXZlbnQgc3RhdHVzLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIGludENhdXNlIC0gIEl0IHByb3ZpZGVzIHRoZSBzb3VyY2Ugb2YgaW50ZXJydXB0IG9mIHRoZSBmb2xsb3dpbmc6CioJCQkJR1RfU1RBVFNfRE9ORSwgR1RfVlRVX1BST0IsIEdUX1ZUVV9ET05FLCBHVF9BVFVfRlVMTCwgIAoqCQkJCUdUX0FUVV9ET05FLCBHVF9QSFlfSU5URVJSVVBULCBhbmQgR1RfRUVfSU5URVJSVVBULgoqCQkJCUZvciBHaWdhYml0IFN3aXRjaCwgR1RfQVRVX0ZVTEwgaXMgcmVwbGFjZWQgd2l0aCBHVF9BVFVfRlVMTCBhbmQgCioJCQkJR1RfUEhZX0lOVEVSUlVQVCBpcyBub3Qgc3VwcG9ydGVkLgoqCQkJCUdUX0RFVklDRV9JTlQgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gdGhlIGRldmljZXMsIHNvIHBsZWFzZSByZWZlcgoqCQkJCXRvIHRoZSBkYXRhc2hlZXQgZm9yIGRldGFpbHMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBldmVudEdldEludFN0YXR1cwooCiAgICBJTiAgR1RfUURfREVWIAkqZGV2LAogICAgT1VUIEdUX1UxNgkJKmludENhdXNlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2dHVHZXRJbnRTdGF0dXMKKgoqIERFU0NSSVBUSU9OOgoqIAkJQ2hlY2sgdG8gc2VlIGlmIGEgc3BlY2lmaWMgdHlwZSBvZiBWVFUgaW50ZXJydXB0IG9jY3VyZWQKKgoqIElOUFVUUzoKKiAgICAgICBpbnRUeXBlIC0gdGhlIHR5cGUgb2YgaW50ZXJydXB0IHdoaWNoIGNhdXNlcyBhbiBpbnRlcnJ1cHQuCioJCQlhbnkgY29tYmluYXRpb24gb2YgCioJCQlHVF9NRU1FQkVSX1ZJT0xBVElPTiwKKgkJCUdUX01JU1NfVklPTEFUSU9OLAoqCQkJR1RfRlVMTF9WSU9MQVRJT04KKgoqIE9VVFBVVFM6CiogCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIAkJRlVMTF9WSU9MQVRJT04gaXMgb25seSBmb3IgRmFzdCBFdGhlcm5ldCBTd2l0Y2ggKG5vdCBmb3IgR2lnYWJpdCBTd2l0Y2gpLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3Z0dUdldEludFN0YXR1cwooCiAgICBJTiAgR1RfUURfREVWIAkJCSpkZXYsCiAgICBPVVQgR1RfVlRVX0lOVF9TVEFUVVMgCSp2dHVJbnRTdGF0dXMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Z0dUdldEVudHJ5Q291bnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIFZUVSB0YWJsZQoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIG51bUVudHJpZXMgLSBudW1iZXIgb2YgVlRVIGVudHJpZXMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9fU1VDSCAtIHZsYW4gZG9lcyBub3QgZXhpc3QuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2dHVHZXRFbnRyeUNvdW50CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9VMzIgCQkqbnVtRW50cmllcwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndnR1R2V0RW50cnlGaXJzdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgR2V0cyBmaXJzdCBsZXhpY29ncmFwaGljIGVudHJ5IGZyb20gdGhlIFZUVS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICB2dHVFbnRyeSAtIG1hdGNoIFZUVSBlbnRyeS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT19TVUNIIC0gdGFibGUgaXMgZW1wdHkuCioKKiBDT01NRU5UUzoKKiAgICAgICBTZWFyY2ggc3RhcnRzIGZyb20gdmlkIG9mIGFsbCBvbmUncwoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndnR1R2V0RW50cnlGaXJzdAooCglJTiAgR1RfUURfREVWIAkJKmRldiwKCU9VVCBHVF9WVFVfRU5UUlkJKnZ0dUVudHJ5Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2dHVHZXRFbnRyeU5leHQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgbmV4dCBsZXhpY29ncmFwaGljIFZUVSBlbnRyeSBmcm9tIHRoZSBzcGVjaWZpZWQgVklELgoqCiogSU5QVVRTOgoqICAgICAgIHZ0dUVudHJ5IC0gdGhlIFZJRCB0byBzdGFydCB0aGUgc2VhcmNoLgoqCiogT1VUUFVUUzoKKiAgICAgICB2dHVFbnRyeSAtIG1hdGNoIFZUVSAgZW50cnkuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzLgoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvciBvciBlbnRyeSBkb2VzIG5vdCBleGlzdC4KKiAgICAgICBHVF9OT19TVUNIIC0gbm8gbW9yZSBlbnRyaWVzLgoqCiogQ09NTUVOVFM6CiogICAgICAgU2VhcmNoIHN0YXJ0cyBmcm9tIHRoZSBWSUQgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndnR1R2V0RW50cnlOZXh0CigKCUlOICBHVF9RRF9ERVYgCQkqZGV2LAoJSU5PVVQgR1RfVlRVX0VOVFJZICAqdnR1RW50cnkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Z0dUZpbmRWaWRFbnRyeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgRmluZCBWVFUgZW50cnkgZm9yIGEgc3BlY2lmaWMgVklELCBpdCB3aWxsIHJldHVybiB0aGUgZW50cnksIGlmIGZvdW5kLCAKKiAgICAgICBhbG9uZyB3aXRoIGl0cyBhc3NvY2lhdGVkIGRhdGEgCioKKiBJTlBVVFM6CiogICAgICAgdnR1RW50cnkgLSBjb250YWlucyB0aGUgVklEIHRvIHNlYXJjaCBmb3IuCioKKiBPVVRQVVRTOgoqICAgICAgIGZvdW5kICAgIC0gR1RfVFJVRSwgaWYgdGhlIGFwcHJvcHJpYXRlIGVudHJ5IGV4aXN0cy4KKiAgICAgICB2dHVFbnRyeSAtIHRoZSBlbnRyeSBwYXJhbWV0ZXJzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2Vzcy4KKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3Igb3IgZW50cnkgZG9lcyBub3QgZXhpc3QuCiogICAgICAgR1RfTk9fU1VDSCAtIG5vIG1vcmUgZW50cmllcy4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndnR1RmluZFZpZEVudHJ5CigKCUlOIEdUX1FEX0RFViAJCSpkZXYsCglJTk9VVCBHVF9WVFVfRU5UUlkgICp2dHVFbnRyeSwKCU9VVCBHVF9CT09MICAgICAgICAgKmZvdW5kCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2dHVGbHVzaAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJlbW92ZXMgYWxsIGVudHJpZXMgZnJvbSBWVFUgVGFibGUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2dHVGbHVzaAooCiAgICBJTiBHVF9RRF9ERVYgKmRldgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndnR1QWRkRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIENyZWF0ZXMgdGhlIG5ldyBlbnRyeSBpbiBWVFUgdGFibGUgYmFzZWQgb24gdXNlciBpbnB1dC4KKgoqIElOUFVUUzoKKiAgICAgICB2dHVFbnRyeSAgICAtIHZ0dSBlbnRyeSB0byBpbnNlcnQgdG8gdGhlIFZUVS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfRlVMTAkJCSAgLSB2dHUgdGFibGUgaXMgZnVsbAoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Z0dUFkZEVudHJ5CigKICAgIElOIEdUX1FEX0RFViAJKmRldiwKICAgIElOIEdUX1ZUVV9FTlRSWSAqdnR1RW50cnkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Z0dURlbEVudHJ5CioKKiBERVNDUklQVElPTjoKKiAgICAgICBEZWxldGVzIFZUVSBlbnRyeSBzcGVjaWZpZWQgYnkgdXNlci4KKgoqIElOUFVUUzoKKiAgICAgICB2dHVFbnRyeSAtIHRoZSBWVFUgZW50cnkgdG8gYmUgZGVsZXRlZCAKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9fU1VDSCAgICAgIC0gaWYgc3BlY2lmaWVkIGFkZHJlc3MgZW50cnkgZG9lcyBub3QgZXhpc3QKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndnR1RGVsRW50cnkKKAogICAgSU4gR1RfUURfREVWIAkqZGV2LAogICAgSU4gR1RfVlRVX0VOVFJZICp2dHVFbnRyeQopOwoKLyogZ3RQaHlDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFBoeVJlc2V0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHByZWZvcm1zIFBIWSByZXNldC4KKgkJQWZ0ZXIgcmVzZXQsIHBoeSB3aWxsIGJlIGluIEF1dG9uZWdvdGlhdGlvbiBtb2RlLgoqCiogSU5QVVRTOgoqIAkJcG9ydCAtIFRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqIAkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqIENPTU1FTlRTOgoqIAkJZGF0YSBzaGVldCByZWdpc3RlciAwLjE1IC0gUmVzZXQKKiAJCWRhdGEgc2hlZXQgcmVnaXN0ZXIgMC4xMyAtIFNwZWVkCiogCQlkYXRhIHNoZWV0IHJlZ2lzdGVyIDAuMTIgLSBBdXRvbmVnb3RpYXRpb24KKiAJCWRhdGEgc2hlZXQgcmVnaXN0ZXIgMC44ICAtIER1cGxleCBNb2RlCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0UGh5UmVzZXQKKAogICAgSU4gR1RfUURfREVWIAkqZGV2LAogICAgSU4gR1RfTFBPUlQgCXBvcnQKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQb3J0TG9vcGJhY2sKKgoqIERFU0NSSVBUSU9OOgoqIEVuYWJsZS9EaXNhYmxlIEludGVybmFsIFBvcnQgTG9vcGJhY2suIAoqIEZvciAxMC8xMDAgRmFzdCBFdGhlcm5ldCBQSFksIHNwZWVkIG9mIExvb3BiYWNrIGlzIGRldGVybWluZWQgYXMgZm9sbG93czoKKiAgIElmIEF1dG8tTmVnb3RpYXRpb24gaXMgZW5hYmxlZCwgdGhpcyByb3V0aW5lIGRpc2FibGVzIEF1dG8tTmVnb3RpYXRpb24gYW5kIAoqICAgZm9yY2VzIHNwZWVkIHRvIGJlIDEwTWJwcy4KKiAgIElmIEF1dG8tTmVnb3RpYXRpb24gaXMgZGlzYWJsZWQsIHRoZSBmb3JjZWQgc3BlZWQgaXMgdXNlZC4KKiAgIERpc2FibGluZyBMb29wYmFjayBzaW1wbHkgY2xlYXJzIGJpdCAxNCBvZiBjb250cm9sIHJlZ2lzdGVyKDAuMTQpLiBUaGVyZWZvcmUsCiogICBpdCBpcyByZWNvbW1lbmRlZCB0byBjYWxsIGdwcnRTZXRQb3J0QXV0b01vZGUgZm9yIFBIWSBjb25maWd1cmF0aW9uIGFmdGVyIAoqICAgTG9vcGJhY2sgdGVzdC4KKiBGb3IgMTAvMTAwLzEwMDAgR2lnYWdiaXQgRXRoZXJuZXQgUEhZLCBzcGVlZCBvZiBMb29wYmFjayBpcyBkZXRlcm1pbmVkIGFzIGZvbGxvd3M6CiogICBJZiBBdXRvLU5lZ290aWF0aW9uIGlzIGVuYWJsZWQgYW5kIExpbmsgaXMgYWN0aXZlLCB0aGUgY3VycmVudCBzcGVlZCBpcyB1c2VkLgoqICAgSWYgQXV0by1OZWdvdGlhdGlvbiBpcyBkaXNhYmxlZCwgdGhlIGZvcmNlZCBzcGVlZCBpcyB1c2VkLgoqICAgQWxsIG90aGVyIGNhc2VzLCBkZWZhdWx0IE1BQyBJbnRlcmZhY2Ugc3BlZWQgaXMgdXNlZC4gUGxlYXNlIHJlZmVyIHRvIHRoZSBkYXRhCiogICBzaGVldCBmb3IgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBkZWZhdWx0IE1BQyBJbnRlcmZhY2Ugc3BlZWQuCioKKiBJTlBVVFM6CiogCQlwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlcgoqIAkJZW5hYmxlIC0gSWYgR1RfVFJVRSwgZW5hYmxlIGxvb3BiYWNrIG1vZGUKKiAJCQkJCUlmIEdUX0ZBTFNFLCBkaXNhYmxlIGxvb3BiYWNrIG1vZGUKKgoqIE9VVFBVVFM6CiogCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LIAktIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgCS0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIAkJZGF0YSBzaGVldCByZWdpc3RlciAwLjE0IC0gTG9vcF9iYWNrCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0U2V0UG9ydExvb3BiYWNrCigKCUlOIEdUX1FEX0RFViAJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfQk9PTCAJCWVuYWJsZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UG9ydExvb3BiYWNrCioKKiBERVNDUklQVElPTjoKKiBHZXQgSW50ZXJuYWwgUG9ydCBMb29wYmFjayBzdGF0ZS4gCiogRm9yIDEwLzEwMCBGYXN0IEV0aGVybmV0IFBIWSwgc3BlZWQgb2YgTG9vcGJhY2sgaXMgZGV0ZXJtaW5lZCBhcyBmb2xsb3dzOgoqICAgSWYgQXV0by1OZWdvdGlhdGlvbiBpcyBlbmFibGVkLCB0aGlzIHJvdXRpbmUgZGlzYWJsZXMgQXV0by1OZWdvdGlhdGlvbiBhbmQgCiogICBmb3JjZXMgc3BlZWQgdG8gYmUgMTBNYnBzLgoqICAgSWYgQXV0by1OZWdvdGlhdGlvbiBpcyBkaXNhYmxlZCwgdGhlIGZvcmNlZCBzcGVlZCBpcyB1c2VkLgoqICAgRGlzYWJsaW5nIExvb3BiYWNrIHNpbXBseSBjbGVhcnMgYml0IDE0IG9mIGNvbnRyb2wgcmVnaXN0ZXIoMC4xNCkuIFRoZXJlZm9yZSwKKiAgIGl0IGlzIHJlY29tbWVuZGVkIHRvIGNhbGwgZ3BydFNldFBvcnRBdXRvTW9kZSBmb3IgUEhZIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgCiogICBMb29wYmFjayB0ZXN0LgoqIEZvciAxMC8xMDAvMTAwMCBHaWdhZ2JpdCBFdGhlcm5ldCBQSFksIHNwZWVkIG9mIExvb3BiYWNrIGlzIGRldGVybWluZWQgYXMgZm9sbG93czoKKiAgIElmIEF1dG8tTmVnb3RpYXRpb24gaXMgZW5hYmxlZCBhbmQgTGluayBpcyBhY3RpdmUsIHRoZSBjdXJyZW50IHNwZWVkIGlzIHVzZWQuCiogICBJZiBBdXRvLU5lZ290aWF0aW9uIGlzIGRpc2FibGVkLCB0aGUgZm9yY2VkIHNwZWVkIGlzIHVzZWQuCiogICBBbGwgb3RoZXIgY2FzZXMsIGRlZmF1bHQgTUFDIEludGVyZmFjZSBzcGVlZCBpcyB1c2VkLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGRhdGEKKiAgIHNoZWV0IGZvciB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGRlZmF1bHQgTUFDIEludGVyZmFjZSBzcGVlZC4KKiAgIAoqCiogSU5QVVRTOgoqIHBvcnQgLSBUaGUgbG9naWNhbCBwb3J0IG51bWJlciwgdW5sZXNzIFNFUkRFUyBkZXZpY2UgaXMgYWNjZXNzZWQKKiAgICAgICAgVGhlIHBoeXNpY2FsIGFkZHJlc3MsIGlmIFNFUkRFUyBkZXZpY2UgaXMgYWNjZXNzZWQKKgoqIE9VVFBVVFM6CiogZW5hYmxlIC0gSWYgR1RfVFJVRSwgIGxvb3BiYWNrIG1vZGUgaXMgZW5hYmxlZAoqIElmIEdUX0ZBTFNFLCAgbG9vcGJhY2sgbW9kZSBpcyBkaXNhYmxlZAoqCiogUkVUVVJOUzoKKiBHVF9PSyAtIG9uIHN1Y2Nlc3MKKiBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMC4xNCAtIExvb3BfYmFjawoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UG9ydExvb3BiYWNrCigKCUlOIEdUX1FEX0RFViAqZGV2LAoJSU4gR1RfTFBPUlQgIHBvcnQsCglPVVQgR1RfQk9PTCAgICplbmFibGUKKTsKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UG9ydExpbmVMb29wYmFjawoqCiogREVTQ1JJUFRJT046CiogRW5hYmxlL0Rpc2FibGUgUG9ydCBMaW5lIExvb3BiYWNrLiAKKiAgIAoqCiogSU5QVVRTOgoqIHBvcnQgLSBUaGUgbG9naWNhbCBwb3J0IG51bWJlciwgdW5sZXNzIFNFUkRFUyBkZXZpY2UgaXMgYWNjZXNzZWQKKiAgICAgICAgVGhlIHBoeXNpY2FsIGFkZHJlc3MsIGlmIFNFUkRFUyBkZXZpY2UgaXMgYWNjZXNzZWQKKiBlbmFibGUgLSBJZiBHVF9UUlVFLCBlbmFibGUgbG9vcGJhY2sgbW9kZQoqIElmIEdUX0ZBTFNFLCBkaXNhYmxlIGxvb3BiYWNrIG1vZGUKKgoqIE9VVFBVVFM6CiogTm9uZS4KKgoqIFJFVFVSTlM6CiogR1RfT0sgLSBvbiBzdWNjZXNzCiogR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiBkYXRhIHNoZWV0IHJlZ2lzdGVyIEZFOjI4LjQsIEdFOjIxXzIuMTQgIC0gTG9vcF9iYWNrCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0U2V0UG9ydExpbmVMb29wYmFjawooCglJTiBHVF9RRF9ERVYgKmRldiwKCUlOIEdUX0xQT1JUICBwb3J0LAoJSU4gR1RfQk9PTCAgIGVuYWJsZQopOwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb3J0TGluZUxvb3BiYWNrCioKKiBERVNDUklQVElPTjoKKiBHZXQgUG9ydCBMaW5lIExvb3BiYWNrIHN0YXR1cy4gCiogICAKKgoqIElOUFVUUzoKKiBwb3J0IC0gVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIsIHVubGVzcyBTRVJERVMgZGV2aWNlIGlzIGFjY2Vzc2VkCiogICAgICAgIFRoZSBwaHlzaWNhbCBhZGRyZXNzLCBpZiBTRVJERVMgZGV2aWNlIGlzIGFjY2Vzc2VkCioKKiBPVVRQVVRTOgoqIGVuYWJsZSAtIElmIEdUX1RSVUUsIGVuYWJsZSBsb29wYmFjayBtb2RlCiogSWYgR1RfRkFMU0UsIGRpc2FibGUgbG9vcGJhY2sgbW9kZSogZW5hYmxlIC0gSWYgR1RfVFJVRSwgZW5hYmxlIGxvb3BiYWNrIG1vZGUKKiBJZiBHVF9GQUxTRSwgZGlzYWJsZSBsb29wYmFjayBtb2RlCioKKiBSRVRVUk5TOgoqIEdUX09LIC0gb24gc3VjY2VzcwoqIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogZGF0YSBzaGVldCByZWdpc3RlciBGRToyOC40LCBHRToyMV8yLjE0ICAtIExvb3BfYmFjawoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydEdldFBvcnRMaW5lTG9vcGJhY2sKKAoJSU4gR1RfUURfREVWICpkZXYsCglJTiBHVF9MUE9SVCAgcG9ydCwKCU9VVCBHVF9CT09MKiAgIGVuYWJsZQopOwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQb3J0U3BlZWQKKgoqIERFU0NSSVBUSU9OOgoqIAkJU2V0cyBzcGVlZCBmb3IgYSBzcGVjaWZpYyBsb2dpY2FsIHBvcnQuIFRoaXMgZnVuY3Rpb24gd2lsbCBrZWVwIHRoZSBkdXBsZXggCioJCW1vZGUgYW5kIGxvb3BiYWNrIG1vZGUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLCBidXQgZGlzYWJsZSBvdGhlcnMsIHN1Y2ggYXMgCioJCUF1dG9uZWdvdGlhdGlvbi4KKgoqIElOUFVUUzoKKiAJCXBvcnQgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqIAkJc3BlZWQgLSBwb3J0IHNwZWVkLgoqCQkJCVBIWV9TUEVFRF8xMF9NQlBTIGZvciAxME1icHMKKgkJCQlQSFlfU1BFRURfMTAwX01CUFMgZm9yIDEwME1icHMKKgkJCQlQSFlfU1BFRURfMTAwMF9NQlBTIGZvciAxMDAwTWJwcwoqCiogT1VUUFVUUzoKKiBOb25lLgoqCiogUkVUVVJOUzoKKiBHVF9PSyAtIG9uIHN1Y2Nlc3MKKiBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMC4xMyAtIFNwZWVkIFNlbGVjdGlvbiAoTFNCKQoqIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMC42ICAtIFNwZWVkIFNlbGVjdGlvbiAoTVNCKQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFNldFBvcnRTcGVlZAooCglJTiBHVF9RRF9ERVYgCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX1BIWV9TUEVFRAlzcGVlZAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UG9ydFNwZWVkCioKKiBERVNDUklQVElPTjoKKiAJCUdldHMgc3BlZWQgZm9yIGEgc3BlY2lmaWMgbG9naWNhbCBwb3J0LiAKKgoqIElOUFVUUzoKKgkJcG9ydCAtCVRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLCB1bmxlc3MgU0VSREVTIGRldmljZSBpcyBhY2Nlc3NlZAoqCQkJCVRoZSBwaHlzaWNhbCBhZGRyZXNzLCBpZiBTRVJERVMgZGV2aWNlIGlzIGFjY2Vzc2VkCioKKiBPVVRQVVRTOgoqIAkJc3BlZWQgLSBwb3J0IHNwZWVkLgoqCQkJCVBIWV9TUEVFRF8xMF9NQlBTIGZvciAxME1icHMKKgkJCQlQSFlfU1BFRURfMTAwX01CUFMgZm9yIDEwME1icHMKKgkJCQlQSFlfU1BFRURfMTAwMF9NQlBTIGZvciAxMDAwTWJwcwoqCiogUkVUVVJOUzoKKiBHVF9PSyAtIG9uIHN1Y2Nlc3MKKiBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMC4xMyAtIFNwZWVkIFNlbGVjdGlvbiAoTFNCKQoqIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMC42ICAtIFNwZWVkIFNlbGVjdGlvbiAoTVNCKQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UG9ydFNwZWVkCigKSU4gR1RfUURfREVWICpkZXYsCklOIEdUX0xQT1JUICBwb3J0LApJTiBHVF9QSFlfU1BFRUQgKnNwZWVkCik7Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFBvcnRBdXRvTmVnRW5hYmxlCioKKiBERVNDUklQVElPTjoKKiAJCUVuYWJsZS9kaXNhYmxlIGFuIEF1dG8tTmVnb3RpYXRpb24gZm9yIGR1cGxleCBtb2RlIG9uIHNwZWNpZmljCiogCQlsb2dpY2FsIHBvcnQuIFdoZW4gQXV0b25lZ290aWF0aW9uIGlzIGRpc2FibGVkLCBwaHkgd2lsbCBiZSBpbiAxME1icHMgSGFsZiAKKgkJRHVwbGV4IG1vZGUuIEVuYWJsaW5nIEF1dG9uZWdvdGlhdGlvbiB3aWxsIHNldCAxMDBCQVNFLVRYIEZ1bGwgRHVwbGV4LCAKKgkJMTAwQkFTRS1UWCBGdWxsIER1cGxleCwgMTAwQkFTRS1UWCBGdWxsIER1cGxleCwgYW5kIDEwMEJBU0UtVFggRnVsbCBEdXBsZXgKKgkJaW4gQXV0b05lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgcmVnaXN0ZXIuCioKKiBJTlBVVFM6CiogCQlwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlcgoqIAkJc3RhdGUgLSBHVF9UUlVFIGZvciBlbmFibGUgQXV0by1OZWdvdGlhdGlvbiBmb3IgZHVwbGV4IG1vZGUsCiogCQkJCQlHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LIAktIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgCS0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIAkJZGF0YSBzaGVldCByZWdpc3RlciAwLjEyIC0gQXV0by1OZWdvdGlhdGlvbiBFbmFibGUKKiAJCWRhdGEgc2hlZXQgcmVnaXN0ZXIgNC44LCA0LjcsIDQuNiwgNC41IC0gQXV0by1OZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0UG9ydEF1dG9OZWdFbmFibGUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wgCQlzdGF0ZQopOwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb3J0QXV0b05lZ1N0YXRlCioKKiBERVNDUklQVElPTjoKKiAJCVJlYWQgdGhlIGF1dG8gbmVnb3RpYXRpb24gc3RhdGUgb2Ygc3BlY2lmaWMgbG9naWNhbCBwb3J0LgoqCQlUaGlzIHJvdXRpbmUgc2ltcGx5IHJlYWRzIEF1dG8gTmVnb3RpYXRpb24gYml0IChiaXQgMTIpIG9mIENvbnRyb2wgCioJCVJlZ2lzdGVyLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0JVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIsIHVubGVzcyBTRVJERVMgZGV2aWNlIGlzIGFjY2Vzc2VkCioJCQkJVGhlIHBoeXNpY2FsIGFkZHJlc3MsIGlmIFNFUkRFUyBkZXZpY2UgaXMgYWNjZXNzZWQKKgoqIE9VVFBVVFM6CiogCQlzdGF0ZSAJLSBHVF9UUlVFIGZvciBlbmFibGUgQXV0by1OZWdvdGlhdGlvbiwKKgkJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAJLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMIAktIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAJCWRhdGEgc2hlZXQgcmVnaXN0ZXIgMC4xMiAtIEF1dG8tTmVnb3RpYXRpb24gRW5hYmxlCiogCQlkYXRhIHNoZWV0IHJlZ2lzdGVyIDQuOCwgNC43LCA0LjYsIDQuNSAtIEF1dG8tTmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UG9ydEF1dG9OZWdTdGF0ZQooCglJTiBHVF9RRF9ERVYgKmRldiwKCUlOIEdUX0xQT1JUICBwb3J0LAoJT1VUIEdUX0JPT0wgICAqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFBvcnRQb3dlckRvd24KKgoqIERFU0NSSVBUSU9OOgoqIAkJRW5hYmxlL2Rpc2FibGUgKHBvd2VyIGRvd24pIG9uIHNwZWNpZmljIGxvZ2ljYWwgcG9ydC4gV2hlbiB0aGlzIGZ1bmN0aW9uIAoqCQlpcyBjYWxsZWQgd2l0aCBub3JtYWwgb3BlcmF0aW9uIHJlcXVlc3QsIHBoeSB3aWxsIHNldCB0byBBdXRvbmVnb3RpYXRpb24gCioJCW1vZGUuCioKKiBJTlBVVFM6CiogCQlwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlcgoqIAkJc3RhdGUJLSAgR1RfVFJVRTogcG93ZXIgZG93bgoqIAkJCQkJR1RfRkFMU0U6IG5vcm1hbCBvcGVyYXRpb24KKgoqIE9VVFBVVFM6CiogCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LIAktIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgCS0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIAkJZGF0YSBzaGVldCByZWdpc3RlciAwLjExIC0gUG93ZXIgRG93bgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFBvcnRQb3dlckRvd24KKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydCwKCUlOIEdUX0JPT0wJCXN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb3J0UG93ZXJEb3duCioKKiBERVNDUklQVElPTjoKKiAJCVJlYWQgUG9ydCBzdGF0ZSAocG93ZXIgZG93bi9ub3JtYWwgb3BlcmF0aW9uKSBvbiBzcGVjaWZpYyBsb2dpY2FsIHBvcnQuCioKKiBJTlBVVFM6CioJCXBvcnQgLQlUaGUgbG9naWNhbCBwb3J0IG51bWJlciwgdW5sZXNzIFNFUkRFUyBkZXZpY2UgaXMgYWNjZXNzZWQKKgkJCQlUaGUgcGh5c2ljYWwgYWRkcmVzcywgaWYgU0VSREVTIGRldmljZSBpcyBhY2Nlc3NlZAoqCiogT1VUUFVUUzoKKiAJCXN0YXRlIC0JR1RfVFJVRTogcG93ZXIgZG93bgoqIAkJCQlHVF9GQUxTRTogbm9ybWFsIG9wZXJhdGlvbgoqCiogUkVUVVJOUzoKKiAJCUdUX09LIAktIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgCS0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIAkJZGF0YSBzaGVldCByZWdpc3RlciAwLjExIC0gUG93ZXIgRG93bgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UG9ydFBvd2VyRG93bgooCklOIEdUX1FEX0RFViAqZGV2LApJTiBHVF9MUE9SVCAgcG9ydCwKT1VUIEdUX0JPT0wgICAqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFBvcnRSZXN0YXJ0QXV0b05lZwoqCiogREVTQ1JJUFRJT046CiogCQlSZXN0YXJ0IEF1dG9OZWdvdGlhdGlvbi4gSWYgQXV0b05lZ290aWF0aW9uIGlzIG5vdCBlbmFibGVkLCBpdCdsbCBlbmFibGUgCioJCWl0LiBMb29wYmFjayBhbmQgUG93ZXIgRG93biB3aWxsIGJlIGRpc2FibGVkIGJ5IHRoaXMgcm91dGluZS4KKgoqIElOUFVUUzoKKiAJCXBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqIAkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAJLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMIAktIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAJCWRhdGEgc2hlZXQgcmVnaXN0ZXIgMC45IC0gUmVzdGFydCBBdXRvLU5lZ290aWF0aW9uCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0UG9ydFJlc3RhcnRBdXRvTmVnCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQJCXBvcnQKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQb3J0RHVwbGV4TW9kZQoqCiogREVTQ1JJUFRJT046CiogCQlTZXRzIGR1cGxleCBtb2RlIGZvciBhIHNwZWNpZmljIGxvZ2ljYWwgcG9ydC4gVGhpcyBmdW5jdGlvbiB3aWxsIGtlZXAgCioJCXRoZSBzcGVlZCBhbmQgbG9vcGJhY2sgbW9kZSB0byB0aGUgcHJldmlvdXMgdmFsdWUsIGJ1dCBkaXNhYmxlIG90aGVycywKKgkJc3VjaCBhcyBBdXRvbmVnb3RpYXRpb24uCioKKiBJTlBVVFM6CiogCQlwb3J0IAktIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAJCWRNb2RlCS0gZHVscGV4IG1vZGUKKgoqIE9VVFBVVFM6CiogCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LIAktIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgCS0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIAkJZGF0YSBzaGVldCByZWdpc3RlciAwLjggLSBEdXBsZXggTW9kZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFNldFBvcnREdXBsZXhNb2RlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQJCXBvcnQsCglJTiBHVF9CT09MCQlkTW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0UG9ydEdldER1cGxleE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqIAkJR2V0cyBkdXBsZXggbW9kZSBmb3IgYSBzcGVjaWZpYyBsb2dpY2FsIHBvcnQuIAoqCiogSU5QVVRTOgoqCQlwb3J0IC0JVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIsIHVubGVzcyBTRVJERVMgZGV2aWNlIGlzIGFjY2Vzc2VkCioJCQkJVGhlIHBoeXNpY2FsIGFkZHJlc3MsIGlmIFNFUkRFUyBkZXZpY2UgaXMgYWNjZXNzZWQKKgoqIAkJZE1vZGUJLSBkdWxwZXggbW9kZQoqCiogUkVUVVJOUzoKKiAJCUdUX09LIAktIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgCS0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIAkJZGF0YSBzaGVldCByZWdpc3RlciAwLjggLSBkdXBsZXggbW9kZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UG9ydER1cGxleE1vZGUKKApJTiBHVF9RRF9ERVYgKmRldiwKSU4gR1RfTFBPUlQgIHBvcnQsCk9VVCBHVF9CT09MKiAgIGRNb2RlCik7Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBvcnRBdXRvTW9kZQoqCiogREVTQ1JJUFRJT046CiogCQlUaGlzIHJvdXRpbmUgc2V0cyB1cCB0aGUgcG9ydCB3aXRoIGdpdmVuIEF1dG8gTW9kZS4KKgkJU3VwcG9ydGVkIG1vZGUgaXMgYXMgZm9sbG93czoKKgkJLSBBdXRvIGZvciBib3RoIHNwZWVkIGFuZCBkdXBsZXguCioJCS0gQXV0byBmb3Igc3BlZWQgb25seSBhbmQgRnVsbCBkdXBsZXguCioJCS0gQXV0byBmb3Igc3BlZWQgb25seSBhbmQgSGFsZiBkdXBsZXguCioJCS0gQXV0byBmb3IgZHVwbGV4IG9ubHkgYW5kIHNwZWVkIDEwMDBNYnBzLgoqCQktIEF1dG8gZm9yIGR1cGxleCBvbmx5IGFuZCBzcGVlZCAxMDBNYnBzLgoqCQktIEF1dG8gZm9yIGR1cGxleCBvbmx5IGFuZCBzcGVlZCAxME1icHMuCioJCS0gU3BlZWQgMTAwME1icHMgYW5kIEZ1bGwgZHVwbGV4LgoqCQktIFNwZWVkIDEwMDBNYnBzIGFuZCBIYWxmIGR1cGxleC4KKgkJLSBTcGVlZCAxMDBNYnBzIGFuZCBGdWxsIGR1cGxleC4KKgkJLSBTcGVlZCAxMDBNYnBzIGFuZCBIYWxmIGR1cGxleC4KKgkJLSBTcGVlZCAxME1icHMgYW5kIEZ1bGwgZHVwbGV4LgoqCQktIFNwZWVkIDEwTWJwcyBhbmQgSGFsZiBkdXBsZXguCioJCQoqCiogSU5QVVRTOgoqIAkJcG9ydCAtIFRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogCQltb2RlIC0gQXV0byBNb2RlIHRvIGJlIHdyaXR0ZW4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKiBDT01NRU5UUzoKKiAJCWRhdGEgc2hlZXQgcmVnaXN0ZXIgNC44LCA0LjcsIDQuNiwgYW5kIDQuNSBBdXRvbmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudAoqIAkJZGF0YSBzaGVldCByZWdpc3RlciA0LjYsIDQuNSBBdXRvbmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudCBmb3IgMTAwMEJYCiogCQlkYXRhIHNoZWV0IHJlZ2lzdGVyIDkuOSwgOS44IEF1dG9uZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50IGZvciAxMDAwQlQKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0U2V0UG9ydEF1dG9Nb2RlCigKCUlOIEdUX1FEX0RFViAJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfUEhZX0FVVE9fTU9ERSBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb3J0QXV0b01vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICAgVGhpcyByb3V0aW5lIGdldCBBdXRvIE1vZGUgb2Ygc3BlY2lmaWMgcG9ydC4KKiAgICAgICAgU3VwcG9ydGVkIG1vZGUgaXMgYXMgZm9sbG93czoKKiAgICAgICAgLSBBdXRvIGZvciBib3RoIHNwZWVkIGFuZCBkdXBsZXguCiogICAgICAgIC0gQXV0byBmb3Igc3BlZWQgb25seSBhbmQgRnVsbCBkdXBsZXguCiogICAgICAgIC0gQXV0byBmb3Igc3BlZWQgb25seSBhbmQgSGFsZiBkdXBsZXguCiogICAgICAgIC0gQXV0byBmb3IgZHVwbGV4IG9ubHkgYW5kIHNwZWVkIDEwMDBNYnBzLgoqICAgICAgICAtIEF1dG8gZm9yIGR1cGxleCBvbmx5IGFuZCBzcGVlZCAxMDBNYnBzLgoqICAgICAgICAtIEF1dG8gZm9yIGR1cGxleCBvbmx5IGFuZCBzcGVlZCAxME1icHMuCiogICAgICAgIC0gU3BlZWQgMTAwME1icHMgYW5kIEZ1bGwgZHVwbGV4LgoqICAgICAgICAtIFNwZWVkIDEwMDBNYnBzIGFuZCBIYWxmIGR1cGxleC4KKiAgICAgICAgLSBTcGVlZCAxMDBNYnBzIGFuZCBGdWxsIGR1cGxleC4KKiAgICAgICAgLSBTcGVlZCAxMDBNYnBzIGFuZCBIYWxmIGR1cGxleC4KKiAgICAgICAgLSBTcGVlZCAxME1icHMgYW5kIEZ1bGwgZHVwbGV4LgoqICAgICAgICAtIFNwZWVkIDEwTWJwcyBhbmQgSGFsZiBkdXBsZXguCiogICAgICAgIAoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gICAgVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIsIHVubGVzcyBTRVJERVMgZGV2aWNlIGlzIGFjY2Vzc2VkCiogICAgICAgICAgICAgICAgICBUaGUgcGh5c2ljYWwgYWRkcmVzcywgaWYgU0VSREVTIGRldmljZSBpcyBhY2Nlc3NlZCAgCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlIC0gICAgQXV0byBNb2RlIHRvIGJlIHdyaXR0ZW4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gb24gZGV2aWNlIHdpdGhvdXQgY29wcGVyCioKKiBDT01NRU5UUzoKKiAgICAgICAgIGRhdGEgc2hlZXQgcmVnaXN0ZXIgNC44LCA0LjcsIDQuNiwgYW5kIDQuNSBBdXRvbmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudAoqICAgICAgICAgZGF0YSBzaGVldCByZWdpc3RlciA0LjYsIDQuNSBBdXRvbmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudCBmb3IgMTAwMEJYCiogICAgICAgICBkYXRhIHNoZWV0IHJlZ2lzdGVyIDkuOSwgOS44IEF1dG9uZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50IGZvciAxMDAwQlQKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0R2V0UG9ydEF1dG9Nb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgICBwb3J0LAogICAgT1VUIEdUX1BIWV9BVVRPX01PREUgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBhdXNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd2lsbCBzZXQgdGhlIHBhdXNlIGJpdCBpbiBBdXRvbmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudAoqCQlSZWdpc3Rlci4gQW5kIHJlc3RhcnQgdGhlIGF1dG9uZWdvdGlhdGlvbi4KKgoqIElOUFVUUzoKKiBwb3J0IC0gVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiBzdGF0ZSAtIEdUX1BIWV9QQVVTRV9NT0RFIGVudW0gdmFsdWUuCioJCQlHVF9QSFlfTk9fUEFVU0UJCS0gZGlzYWJsZSBwYXVzZQoqIAkJCUdUX1BIWV9QQVVTRQkJLSBzdXBwb3J0IHBhdXNlCioJCQlHVF9QSFlfQVNZTU1FVFJJQ19QQVVTRQktIHN1cHBvcnQgYXN5bW1ldHJpYyBwYXVzZQoqCQkJR1RfUEhZX0JPVEhfUEFVU0UJLSBzdXBwb3J0IGJvdGggcGF1c2UgYW5kIGFzeW1tZXRyaWMgcGF1c2UKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiBDT01NRU5UUzoKKiBkYXRhIHNoZWV0IHJlZ2lzdGVyIDQuMTAgQXV0b25lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0U2V0UGF1c2UKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX1BIWV9QQVVTRV9NT0RFIHN0YXRlCik7Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBhdXNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd2lsbCBnZXQgdGhlIHBhdXNlIGJpdCBpbiBBdXRvbmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudAoqCQlSZWdpc3Rlci4KKgoqIElOUFVUUzoKKgkJcG9ydCAtCVRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLCB1bmxlc3MgU0VSREVTIGRldmljZSBpcyBhY2Nlc3NlZAoqCQkJCVRoZSBwaHlzaWNhbCBhZGRyZXNzLCBpZiBTRVJERVMgZGV2aWNlIGlzIGFjY2Vzc2VkCioKKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfUEhZX1BBVVNFX01PREUgZW51bSB2YWx1ZS4KKgkJCQlHVF9QSFlfTk9fUEFVU0UJCS0gZGlzYWJsZSBwYXVzZQoqIAkJCQlHVF9QSFlfUEFVU0UJCS0gc3VwcG9ydCBwYXVzZQoqCQkJCUdUX1BIWV9BU1lNTUVUUklDX1BBVVNFCS0gc3VwcG9ydCBhc3ltbWV0cmljIHBhdXNlCioJCQkJR1RfUEhZX0JPVEhfUEFVU0UJLSBzdXBwb3J0IGJvdGggcGF1c2UgYW5kIGFzeW1tZXRyaWMgcGF1c2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiBDT01NRU5UUzoKKiBkYXRhIHNoZWV0IHJlZ2lzdGVyIDQuMTAgQXV0b25lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQYXVzZQooCklOIEdUX1FEX0RFViAqZGV2LApJTiBHVF9MUE9SVCAgcG9ydCwKT1VUICBHVF9QSFlfUEFVU0VfTU9ERSAqc3RhdGUKKTsKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UGh5UmVnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgUGh5IFJlZ2lzdGVycy4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgIHJlZ0FkZHIgLSBUaGUgcmVnaXN0ZXIncyBhZGRyZXNzLgoqCiogT1VUUFVUUzoKKiAgICAgICBkYXRhICAgIC0gVGhlIHJlYWQgcmVnaXN0ZXIncyBkYXRhLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQaHlSZWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gIEdUX1UzMgkgICAgIHJlZ0FkZHIsCiAgICBPVVQgR1RfVTE2CSAgICAgKmRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBoeVJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyBQaHkgUmVnaXN0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgcmVnQWRkciAtIFRoZSByZWdpc3RlcidzIGFkZHJlc3MuCioKKiBPVVRQVVRTOgoqICAgICAgIGRhdGEgICAgLSBUaGUgcmVhZCByZWdpc3RlcidzIGRhdGEuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFBoeVJlZwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiAgR1RfVTMyCSAgICAgcmVnQWRkciwKICAgIElOICBHVF9VMTYJICAgICBkYXRhCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0UGh5SW50RW5hYmxlCioKKiBERVNDUklQVElPTjoKKiBFbmFibGUvRGlzYWJsZSBvbmUgUEhZIEludGVycnVwdAoqIFRoaXMgcmVnaXN0ZXIgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBJTlQjIHBpbiBpcyBhc3NlcnRlZCB3aGVuIGFuIGludGVycnVwdCAKKiBldmVudCBvY2N1cnMuIFdoZW4gYW4gaW50ZXJydXB0IG9jY3VycywgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGlzIHNldCBhbmQKKiByZW1haW5zIHNldCB1bnRpbCByZWdpc3RlciAxOSBpcyByZWFkIHZpYSB0aGUgU01JLiBXaGVuIGludGVycnVwdCBlbmFibGUKKiBiaXRzIGFyZSBub3Qgc2V0IGluIHJlZ2lzdGVyIDE4LCBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMgaW4gcmVnaXN0ZXIgMTkgYXJlIAoqIHN0aWxsIHNldCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdCBldmVudHMgb2NjdXIuIEhvd2V2ZXIsIHRoZSBJTlQjIAoqIGlzIG5vdCBhc3NlcnRlZC4KKgoqIElOUFVUUzoKKiBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqIGludFR5cGUgLSB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQgdG8gZW5hYmxlL2Rpc2FibGUuIGFueSBjb21iaW5hdGlvbiBvZiAKKgkJCUdUX1NQRUVEX0NIQU5HRUQsCioJCQlHVF9EVVBMRVhfQ0hBTkdFRCwKKgkJCUdUX1BBR0VfUkVDRUlWRUQsCioJCQlHVF9BVVRPX05FR19DT01QTEVURUQsCioJCQlHVF9MSU5LX1NUQVRVU19DSEFOR0VELAoqCQkJR1RfU1lNQk9MX0VSUk9SLAoqCQkJR1RfRkFMU0VfQ0FSUklFUiwKKgkJCUdUX0ZJRk9fRkxPVywKKgkJCUdUX0NST1NTT1ZFUl9DSEFOR0VELAoqCQkJR1RfUE9MQVJJVFlfQ0hBTkdFRCwgYW5kCioJCQlHVF9KQUJCRVIKKgoqIE9VVFBVVFM6CiogTm9uZS4KKgoqIFJFVFVSTlM6CiogR1RfT0sgLSBvbiBzdWNjZXNzCiogR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiA4OEUzMDgxIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMTgKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKR1RfU1RBVFVTIGdwcnRQaHlJbnRFbmFibGUKKApJTiBHVF9RRF9ERVYgKmRldiwKSU4gR1RfTFBPUlQgICBwb3J0LApJTiBHVF9VMTYJaW50VHlwZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBoeUludFN0YXR1cwoqCiogREVTQ1JJUFRJT046CiogQ2hlY2sgdG8gc2VlIGlmIGEgc3BlY2lmaWMgdHlwZSBvZiAgaW50ZXJydXB0IG9jY3VyZWQKKgoqIElOUFVUUzoKKiBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlcgoqIGludFR5cGUgLSB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQgd2hpY2ggY2F1c2VzIGFuIGludGVycnVwdC4KKgkJCWFueSBjb21iaW5hdGlvbiBvZiAKKgkJCUdUX1NQRUVEX0NIQU5HRUQsCioJCQlHVF9EVVBMRVhfQ0hBTkdFRCwKKgkJCUdUX1BBR0VfUkVDRUlWRUQsCioJCQlHVF9BVVRPX05FR19DT01QTEVURUQsCioJCQlHVF9MSU5LX1NUQVRVU19DSEFOR0VELAoqCQkJR1RfU1lNQk9MX0VSUk9SLAoqCQkJR1RfRkFMU0VfQ0FSUklFUiwKKgkJCUdUX0ZJRk9fRkxPVywKKgkJCUdUX0NST1NTT1ZFUl9DSEFOR0VELAoqCQkJR1RfUE9MQVJJVFlfQ0hBTkdFRCwgYW5kCioJCQlHVF9KQUJCRVIKKgoqIE9VVFBVVFM6CiogTm9uZS4KKgoqIFJFVFVSTlM6CiogR1RfT0sgLSBvbiBzdWNjZXNzCiogR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiA4OEUzMDgxIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMTkKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKR1RfU1RBVFVTIGdwcnRHZXRQaHlJbnRTdGF0dXMKKApJTiBHVF9RRF9ERVYgKmRldiwKSU4gIEdUX0xQT1JUIHBvcnQsCk9VVCAgR1RfVTE2KiBpbnRUeXBlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQaHlJbnRQb3J0U3VtbWFyeQoqCiogREVTQ1JJUFRJT046CiogTGlzdHMgdGhlIHBvcnRzIHRoYXQgaGF2ZSBhY3RpdmUgaW50ZXJydXB0cy4gSXQgcHJvdmlkZXMgYSBxdWljayB3YXkgdG8gCiogaXNvbGF0ZSB0aGUgaW50ZXJydXB0IHNvIHRoYXQgdGhlIE1BQyBvciBzd2l0Y2ggZG9lcyBub3QgaGF2ZSB0byBwb2xsIHRoZQoqIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKDE5KSBmb3IgYWxsIHBvcnRzLiBSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgZG9lcyBub3QKKiBkZS1hc3NlcnQgdGhlIElOVCMgcGluCioKKiBJTlBVVFM6Ciogbm9uZQoqCiogT1VUUFVUUzoKKiBHVF9VOCAqaW50UG9ydE1hc2sgLSBiaXQgTWFzayB3aXRoIHRoZSBiaXRzIHNldCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgCiogcGh5cyB3aXRoIGFjdGl2ZSBpbnRlcnJ1cHQuIEUuZy4sIHRoZSBiaXQgbnVtYmVyIDAgYW5kIDIgYXJlIHNldCB3aGVuIAoqIHBvcnQgbnVtYmVyIDAgYW5kIDIgaGF2ZSBhY3RpdmUgaW50ZXJydXB0CioKKiBSRVRVUk5TOgoqIEdUX09LIC0gb24gc3VjY2VzcwoqIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogODhFMzA4MSBkYXRhIHNoZWV0IHJlZ2lzdGVyIDIwCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0R2V0UGh5SW50UG9ydFN1bW1hcnkKKApJTiBHVF9RRF9ERVYgKmRldiwKT1VUIEdUX1UxNiAqaW50UG9ydE1hc2sKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0Rm9yY2VGYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldCB0aGUgZm9yY2UgZmxvdyBjb250cm9sIHN0YXRlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgZm9yY2UgLSBHVF9UUlVFIGZvciBmb3JjZSBmbG93IGNvbnRyb2wgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEZvcmNlRmMKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfQk9PTCAgZm9yY2UKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0Rm9yY2VGYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgZm9yY2UgZmxvdyBjb250cm9sIHN0YXRlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIGZvcmNlIC0gR1RfVFJVRSBmb3IgZm9yY2UgZmxvdyBjb250cm9sICBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRGb3JjZUZjCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKmZvcmNlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFRyYWlsZXJNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0IHRoZSBlZ3Jlc3MgdHJhaWxlciBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgYWRkIHRyYWlsZXIgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0VHJhaWxlck1vZGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfQk9PTCAgbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRUcmFpbGVyTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgZWdyZXNzIHRyYWlsZXIgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgYWRkIHRyYWlsZXIgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0VHJhaWxlck1vZGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRJbmdyZXNzTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldCB0aGUgaW5ncmVzcyBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBtb2RlIC0gdGhlIGluZ3Jlc3MgbW9kZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0SW5ncmVzc01vZGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOIEdUX0lOR1JFU1NfTU9ERSBtb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEluZ3Jlc3NNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBpbmdyZXNzIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIHRoZSBpbmdyZXNzIG1vZGUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEluZ3Jlc3NNb2RlCigKICAgIElOIEdUX1FEX0RFViAgICAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIE9VVCBHVF9JTkdSRVNTX01PREUgKm1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0TWNSYXRlTGltaXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXQgdGhlIHBvcnQgbXVsdGljYXN0IHJhdGUgbGltaXQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIHJhdGUgLSBHVF9UUlVFIHRvIEVuYWJsZSwgR1RfRkFMU0UgZm9yIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRNY1JhdGVMaW1pdAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gR1RfTUNfUkFURSAgIHJhdGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0TWNSYXRlTGltaXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBHZXQgdGhlIHBvcnQgbXVsdGljYXN0IHJhdGUgbGltaXQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICByYXRlIC0gR1RfVFJVRSB0byBFbmFibGUsIEdUX0ZBTFNFIGZvciBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0TWNSYXRlTGltaXQKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9NQ19SQVRFICAqcmF0ZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRDdHJNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgcG9ydCBjb3VudGVycyBtb2RlIG9mIG9wZXJhdGlvbi4KKgoqIElOUFVUUzoKKiAgICAgICBtb2RlICAtIHRoZSBjb3VudGVyIG1vZGUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0Q3RyTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0NUUl9NT0RFICBtb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydENsZWFyQWxsQ3RyCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgY2xlYXJzIGFsbCBwb3J0IGNvdW50ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0Q2xlYXJBbGxDdHIKKAogICAgSU4gR1RfUURfREVWICpkZXYKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb3J0Q3RyCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCBjb3VudGVycy4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBjdHIgLSB0aGUgY291bnRlcnMgdmFsdWUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UG9ydEN0cgooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIE9VVCBHVF9QT1JUX1NUQVQgICAgKmN0cgopOwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UGFydG5lckxpbmtQYXVzZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpdmVzIHRoZSBsaW5rIHBhcnRuZXIgcGF1c2Ugc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBzdGF0ZSAtIEdUX1RSVUUgZm9yIGVuYWJsZSAgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UGFydG5lckxpbmtQYXVzZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICpzdGF0ZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRTZWxmTGlua1BhdXNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIGxpbmsgcGF1c2Ugc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBzdGF0ZSAtIEdUX1RSVUUgZm9yIGVuYWJsZSAgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0U2VsZkxpbmtQYXVzZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICpzdGF0ZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRSZXNvbHZlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIHJlc29sdmUgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBzdGF0ZSAtIEdUX1RSVUUgZm9yIERvbmUgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFJlc29sdmUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqc3RhdGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0TGlua1N0YXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIGxpbmsgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBzdGF0ZSAtIEdUX1RSVUUgZm9yIFVwICBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRMaW5rU3RhdGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqc3RhdGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UG9ydE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgcG9ydCBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIE1JSSAgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UG9ydE1vZGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQaHlNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIFBIWSBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIE1JSSBQSFkgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFBoeU1vZGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXREdXBsZXgKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgcG9ydCBkdXBsZXggbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBGdWxsICBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXREdXBsZXgKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRTcGVlZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpdmVzIHRoZSBwb3J0IHNwZWVkLgoqCiogSU5QVVRTOgoqICAgICAgIHNwZWVkIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciAxMDBNYi9zICBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRTcGVlZAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICpzcGVlZAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RHVwbGV4CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgZHVwbGV4IG1vZGUgb2YgTUlJL1NOSS9STUlJIHBvcnRzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSAJdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCQkJKGZvciBGdWxsU2FpbCwgaXQgd2lsbCBiZSBwb3J0IDIsIGFuZCBmb3IgQ2xpcHBlclNoaXAsIAoqCQkJCWl0IGNvdWxkIGJlIGVpdGhlciBwb3J0IDUgb3IgcG9ydCA2LikKKiAgICAgICBtb2RlIC0gIEdUX1RSVUUgZm9yIEZ1bGwgRHVwbGV4LAoqCQkJCUdUX0ZBTFNFIGZvciBIYWxmIER1cGxleC4KKgoqIE9VVFBVVFM6IE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXREdXBsZXgKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIElOICBHVF9CT09MICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQb3J0U3BlZWREdXBsZXhNb2RlCioKKiBERVNDUklQVElPTjoKKiAJCVNldHMgc3BlZWQgYW5kIGR1cGxleCBtb2RlIGZvciBhIHNwZWNpZmljIGxvZ2ljYWwgcG9ydC4gVGhpcyBmdW5jdGlvbgoqCQl3aWxsIGtlZXAgdGhlIGxvb3BiYWNrIG1vZGUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLCBidXQgZGlzYWJsZSBvdGhlcnMsCioJCXN1Y2ggYXMgQXV0b25lZ290aWF0aW9uLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0JVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIsIHVubGVzcyBTRVJERVMgZGV2aWNlIGlzIGFjY2Vzc2VkCioJCQkJVGhlIHBoeXNpY2FsIGFkZHJlc3MsIGlmIFNFUkRFUyBkZXZpY2UgaXMgYWNjZXNzZWQKKgkJc3BlZWQgLSBwb3J0IHNwZWVkLgoqCQkJCVBIWV9TUEVFRF8xMF9NQlBTIGZvciAxME1icHMKKgkJCQlQSFlfU1BFRURfMTAwX01CUFMgZm9yIDEwME1icHMKKgkJCQlQSFlfU1BFRURfMTAwMF9NQlBTIGZvciAxMDAwTWJwcwoqCQlkTW9kZSAtIER1cGxleCBtb2RlCioKKiBPVVRQVVRTOgoqIE5vbmUuCioKKiBSRVRVUk5TOgoqIEdUX09LIC0gb24gc3VjY2VzcwoqIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogZGF0YSBzaGVldCByZWdpc3RlciAwLjEzIC0gU3BlZWQgU2VsZWN0aW9uIChMU0IpCiogZGF0YSBzaGVldCByZWdpc3RlciAwLjYgIC0gU3BlZWQgU2VsZWN0aW9uIChNU0IpCiogZGF0YSBzaGVldCByZWdpc3RlciAwLjggIC0gRHVwbGV4IG1vZGUKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQb3J0U3BlZWREdXBsZXhNb2RlCigKSU4gR1RfUURfREVWICpkZXYsCklOIEdUX0xQT1JUICBwb3J0LApJTiBHVF9QSFlfU1BFRUQgc3BlZWQsCklOIEdUX0JPT0wgZE1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldFBvcnREZWZhdWx0VGMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFNldHMgdGhlIGRlZmF1bHQgdHJhZmZpYyBjbGFzcyBmb3IgYSBzcGVjaWZpYyBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICB0cmFmQ2xhc3MgLSBkZWZhdWx0IHRyYWZmaWMgY2xhc3Mgb2YgYSBwb3J0LgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2Nvc1NldFBvcnREZWZhdWx0VGMKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfVTggICAgdHJhZkNsYXNzCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnY29zR2V0UG9ydERlZmF1bHRUYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgR2V0cyB0aGUgZGVmYXVsdCB0cmFmZmljIGNsYXNzIGZvciBhIHNwZWNpZmljIHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAgICAgICB0cmFmQ2xhc3MgLSBkZWZhdWx0IHRyYWZmaWMgY2xhc3Mgb2YgYSBwb3J0LgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2Nvc0dldFBvcnREZWZhdWx0VGMKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgICBwb3J0LAogICAgT1VUIEdUX1U4ICAgICAqdHJhZkNsYXNzCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0UHJpb01hcFJ1bGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHByaW9yaXR5IG1hcHBpbmcgcnVsZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIHVzZXIgcHJpbyBydWxlLCBHVF9GQUxTRSBmb3Igb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldFByaW9NYXBSdWxlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX0JPT0wgIG1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0UHJpb01hcFJ1bGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXQgdGhlIHByaW9yaXR5IG1hcHBpbmcgcnVsZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgdXNlciBwcmlvIHJ1bGUsIEdUX0ZBTFNFIGZvciBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zR2V0UHJpb01hcFJ1bGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NJcFByaW9NYXBFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMgdGhlIElQIHByaW9yaXR5IG1hcHBpbmcuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIGVuICAgLSBHVF9UUlVFIHRvIEVuYWJsZSwgR1RfRkFMU0UgZm9yIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NJcFByaW9NYXBFbgooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBlbgopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRJcFByaW9NYXBFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHVybiB0aGUgSVAgcHJpb3JpdHkgbWFwcGluZyBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBlbiAgICAtIEdUX1RSVUUgZm9yIHVzZXIgcHJpbyBydWxlLCBHVF9GQUxTRSBmb3Igb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldElwUHJpb01hcEVuCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKmVuCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1VzZXJQcmlvTWFwRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzIHRoZSB1c2VyIHByaW9yaXR5IG1hcHBpbmcuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIGVuICAgLSBHVF9UUlVFIHRvIEVuYWJsZSwgR1RfRkFMU0UgZm9yIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NVc2VyUHJpb01hcEVuCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX0JPT0wgIGVuCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldFVzZXJQcmlvTWFwRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXR1cm4gdGhlIHVzZXIgcHJpb3JpdHkgbWFwcGluZyBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBlbiAgICAtIEdUX1RSVUUgZm9yIHVzZXIgcHJpbyBydWxlLCBHVF9GQUxTRSBmb3Igb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldFVzZXJQcmlvTWFwRW4KKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqZW4KKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnY29zR2V0VXNlclByaW8yVGMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgdGhlIHRyYWZmaWMgY2xhc3MgbnVtYmVyIGZvciBhIHNwZWNpZmljIDgwMi4xcCB1c2VyIHByaW9yaXR5LgoqCiogSU5QVVRTOgoqICAgICAgIHVzZXJQcmlvciAtIHVzZXIgcHJpb3JpdHkKKgoqIE9VVFBVVFM6CiogICAgICAgdHJDbGFzcyAtIFRoZSBUcmFmZmljIENsYXNzIHRoZSByZWNlaXZlZCBmcmFtZSBpcyBhc3NpZ25lZC4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CiogICAgICAgVGFibGUgLSBVc2VyUHJpbzJUYwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnY29zR2V0VXNlclByaW8yVGMKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfVTggICAgdXNlclByaW9yLAogICAgT1VUIEdUX1U4ICAgKnRyQ2xhc3MKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdjb3NTZXRVc2VyUHJpbzJUYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgU2V0cyB0aGUgdHJhZmZpYyBjbGFzcyBudW1iZXIgZm9yIGEgc3BlY2lmaWMgODAyLjFwIHVzZXIgcHJpb3JpdHkuCioKKiBJTlBVVFM6CiogICAgICAgdXNlclByaW9yIC0gdXNlciBwcmlvcml0eSBvZiBhIHBvcnQuCiogICAgICAgdHJDbGFzcyAgIC0gdGhlIFRyYWZmaWMgQ2xhc3MgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIGFzc2lnbmVkLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKiAgICAgICBUYWJsZSAtIFVzZXJQcmlvMlRjCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdjb3NTZXRVc2VyUHJpbzJUYwooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX1U4ICAgIHVzZXJQcmlvciwKICAgIElOIEdUX1U4ICAgIHRyQ2xhc3MKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdjb3NHZXREc2NwMlRjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIHRoZSB0cmFmZmljIGNsYXNzIGFzc2lnbmVkIGZvciBhIHNwZWNpZmljCiogICAgICAgSVB2NCBEc2NwLgoqCiogSU5QVVRTOgoqICAgICAgIGRzY3AgICAgLSB0aGUgSVB2NCBmcmFtZSBkc2NwIHRvIHF1ZXJ5LgoqCiogT1VUUFVUUzoKKiAgICAgICB0ckNsYXNzIC0gVGhlIFRyYWZmaWMgQ2xhc3MgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIGFzc2lnbmVkLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKiAgICAgICBUYWJsZSAtIFVzZXJQcmlvMlRjCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdjb3NHZXREc2NwMlRjCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX1U4ICAgZHNjcCwKICAgIE9VVCBHVF9VOCAgICp0ckNsYXNzCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnY29zU2V0RHNjcDJUYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHRyYWZmaWMgY2xhc3MgYXNzaWduZWQgZm9yIGEgc3BlY2lmaWMKKiAgICAgICBJUHY0IERzY3AuCioKKiBJTlBVVFM6CiogICAgICAgZHNjcCAgICAtIHRoZSBJUHY0IGZyYW1lIGRzY3AgdG8gbWFwLgoqICAgICAgIHRyQ2xhc3MgLSB0aGUgVHJhZmZpYyBDbGFzcyB0aGUgcmVjZWl2ZWQgZnJhbWUgaXMgYXNzaWduZWQuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqICAgICAgIFRhYmxlIC0gVXNlclByaW8yVGMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2Nvc1NldERzY3AyVGMKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9VOCAgICBkc2NwLAogICAgSU4gR1RfVTggICAgdHJDbGFzcwopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogcWRMb2FkRHJpdmVyCioKKiBERVNDUklQVElPTjoKKiAgICAgICBRdWFydGVyRGVjayBEcml2ZXIgSW5pdGlhbGl6YXRpb24gUm91dGluZS4gCiogICAgICAgVGhpcyBpcyB0aGUgZmlyc3Qgcm91dGluZSB0aGF0IG5lZWRzIGJlIGNhbGxlZCBieSBzeXN0ZW0gc29mdHdhcmUuIAoqICAgICAgIEl0IHRha2VzIHN5c0NmZyBmcm9tIHN5c3RlbSBzb2Z0d2FyZSwgYW5kIHJldHVyZXMgYSBwb2ludGVyICgqZGV2KSAKKiAgICAgICB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIGluY2x1ZGVzIGluZm9tYXRpb24gcmVsYXRlZCB0byB0aGlzIFF1YXJ0ZXJEZWNrCiogICAgICAgZGV2aWNlLiBUaGlzIHBvaW50ZXIgKCpkZXYpIGlzIHRoZW4gdXNlZCBmb3IgYWxsIHRoZSBBUEkgZnVuY3Rpb25zLiAKKgoqIElOUFVUUzoKKiAgICAgICBzeXNDZmcgICAgICAtIEhvbGRzIHN5c3RlbSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBPVVRQVVRTOgoqICAgICAgIGRldiAgICAgICAgIC0gSG9sZHMgZ2VuZXJhbCBzeXN0ZW0gaW5mb3JtYXRpb24uCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQUxSRUFEWV9FWElTVCAgICAtIGlmIGRldmljZSBhbHJlYWR5IHN0YXJ0ZWQKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOgoqIAlxZFVubG9hZERyaXZlciBpcyBwcm92aWRlZCB3aGVuIHRoZSBkcml2ZXIgaXMgbm90IHRvIGJlIHVzZWQgYW55bW9yZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgcWRMb2FkRHJpdmVyCigKICAgIElOICBHVF9TWVNfQ09ORklHICAgKnN5c0NmZywKICAgIE9VVCBHVF9RRF9ERVYJKmRldgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogcWRVbmxvYWREcml2ZXIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgZnVuY3Rpb24gdW5sb2FkcyB0aGUgUXVhdGVyRGVjayBEcml2ZXIuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICAxLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bCBleGVjdXRpb24gb2YKKiAgICAgICAgICAgcWRMb2FkRHJpdmVyKCkuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIHFkVW5sb2FkRHJpdmVyCigKICAgIElOIEdUX1FEX0RFViogZGV2Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBzeXNFbmFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgc3lzdGVtIGZvciBmdWxsIG9wZXJhdGlvbi4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBzeXNFbmFibGUKKAogICAgSU4gR1RfUURfREVWKiBkZXYKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTd1Jlc2V0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcHJlZm9ybXMgc3dpdGNoIHNvZnR3YXJlIHJlc2V0LgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU3dSZXNldAooCiAgICBJTiBHVF9RRF9ERVYqIGRldgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldERpc2NhcmRFeGNlc3NpdmUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXQgdGhlIERpc2NhcmQgRXhjZXNzaXZlIHN0YXRlLgoqCiogSU5QVVRTOgoqICAgICAgIGVuIC0gR1RfVFJVRSBEaXNjYXJkIGlzIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXREaXNjYXJkRXhjZXNzaXZlCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gR1RfQk9PTCBlbgopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXREaXNjYXJkRXhjZXNzaXZlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBEaXNjYXJkIEV4Y2Vzc2l2ZSBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgRGlzY2FyZCBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXREaXNjYXJkRXhjZXNzaXZlCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gR1RfQk9PTCAqZW4KKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0U2NoZWR1bGluZ01vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXQgdGhlIFNjaGVkdWxpbmcgTW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfVFJVRSB3cnIsIEdUX0ZBTFNFIHN0cmljdC4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRTY2hlZHVsaW5nTW9kZQooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOIEdUX0JPT0wgbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRTY2hlZHVsaW5nTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgU2NoZWR1bGluZyBNb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSBHVF9UUlVFIHdyciwgR1RfRkFMU0Ugc3RyaWN0LgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0U2NoZWR1bGluZ01vZGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfQk9PTCAqbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRNYXhGcmFtZVNpemUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBTZXQgdGhlIG1heCBmcmFtZSBzaXplIGFsbG93ZWQuCioKKiBJTlBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUgbWF4IHNpemUgMTUyMiwgR1RfRkFMU0UgbWF4IHNpemUgMTUzNS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRNYXhGcmFtZVNpemUKKAogICAgSU4gR1RfUURfREVWKiBkZXYsCiAgICBJTiBHVF9CT09MIG1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0TWF4RnJhbWVTaXplCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgR2V0IHRoZSBtYXggZnJhbWUgc2l6ZSBhbGxvd2VkLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSBHVF9UUlVFIG1heCBzaXplIDE1MjIsIEdUX0ZBTFNFIG1heCBzaXplIDE1MzUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRNYXhGcmFtZVNpemUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfQk9PTCAqbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNSZUxvYWQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBjYXVzZSB0byB0aGUgc3dpdGNoIHRvIHJlbG9hZCB0aGUgRUVQUk9NLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzUmVMb2FkCigKICAgIElOIEdUX1FEX0RFViogZGV2Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0V2F0Y2hEb2cKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBTZXQgdGhlIHRoZSB3YXRjaCBkb2cgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgZW5hYmxlcywgR1RfRkFMU0UgZGlzYWJsZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRXYXRjaERvZwooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOIEdUX0JPT0wgZW4KKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0V2F0Y2hEb2cKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBHZXQgdGhlIHRoZSB3YXRjaCBkb2cgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgZW5hYmxlcywgR1RfRkFMU0UgZGlzYWJsZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAtIG9uIGJhZCBwYXJhbWV0ZXIKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFdhdGNoRG9nCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgT1VUIEdUX0JPT0wgKmVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0RHVwbGV4UGF1c2VNYWMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBmdWxsIGR1cGxleCBwYXVzZSBzcmMgTWFjIEFkZHJlc3MuCioKKiBJTlBVVFM6CiogICAgICAgbWFjIC0gVGhlIE1hYyBhZGRyZXNzIHRvIGJlIHNldC4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAtIG9uIGJhZCBwYXJhbWV0ZXIKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldER1cGxleFBhdXNlTWFjCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gR1RfRVRIRVJBRERSICptYWMKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXREdXBsZXhQYXVzZU1hYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIEdldHMgdGhlIGZ1bGwgZHVwbGV4IHBhdXNlIHNyYyBNYWMgQWRkcmVzcy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBtYWMgLSB0aGUgTWFjIGFkZHJlc3MuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXREdXBsZXhQYXVzZU1hYwooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIE9VVCBHVF9FVEhFUkFERFIgKm1hYwopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRQZXJQb3J0RHVwbGV4UGF1c2VNYWMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHdoZXRoZXIgdGhlIGZ1bGwgZHVwbGV4IHBhdXNlIHNyYyBNYWMgQWRkcmVzcyBpcyBwZXIKKiAgICAgICBwb3J0IG9yIHBlciBkZXZpY2UuCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UVVJFIHBlciBwb3J0IG1hYywgR1RfRkFMU0UgZ2xvYmFsIG1hYy4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRQZXJQb3J0RHVwbGV4UGF1c2VNYWMKKAogICAgSU4gR1RfUURfREVWKiBkZXYsCiAgICBJTiBHVF9CT09MIGVuCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFBlclBvcnREdXBsZXhQYXVzZU1hYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIEdldHMgd2hldGhlciB0aGUgZnVsbCBkdXBsZXggcGF1c2Ugc3JjIE1hYyBBZGRyZXNzIGlzIHBlcgoqICAgICAgIHBvcnQgb3IgcGVyIGRldmljZS4KKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RVUkUgcGVyIHBvcnQgbWFjLCBHVF9GQUxTRSBnbG9iYWwgbWFjLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UGVyUG9ydER1cGxleFBhdXNlTWFjCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gR1RfQk9PTCAqZW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNSZWFkTWlpUmVnaXN0ZXIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBRdWFydGVyRGVjayBSZWdpc3RlcnMuIFNpbmNlIHRoaXMgcm91dGluZSBpcyBvbmx5IGZvcgoqCQlEaWFnbm9zdGljIFB1cnBvc2UsIG5vIGVycm9yIGNoZWNraW5nIHdpbGwgYmUgcGVyZm9ybWVkLgoqCQlVc2VyIGhhcyB0byBrbm93IGV4YWN0bHkgd2hpY2ggcGh5IGFkZHJlc3MoMCB+IDB4MUYpIHdpbGwgYmUgcmVhZC4KKgoqIElOUFVUUzoKKiAgICAgICBwaHlBZGRyIC0gUGh5IEFkZHJlc3MgdG8gcmVhZCB0aGUgcmVnaXN0ZXIgZm9yLiggMCB+IDB4MUYgKQoqICAgICAgIHJlZ0FkZHIgLSBUaGUgcmVnaXN0ZXIncyBhZGRyZXNzLgoqCiogT1VUUFVUUzoKKiAgICAgICBkYXRhICAgIC0gVGhlIHJlYWQgcmVnaXN0ZXIncyBkYXRhLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNSZWFkTWlpUmVnCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gIEdUX1UzMglwaHlBZGRyLAogICAgSU4gIEdUX1UzMglyZWdBZGRyLAogICAgT1VUIEdUX1UzMgkqZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzV3JpdGVNaWlSZWdpc3RlcgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyBRdWFydGVyRGVjayBSZWdpc3RlcnMuIFNpbmNlIHRoaXMgcm91dGluZSBpcyBvbmx5IGZvcgoqCQlEaWFnbm9zdGljIFB1cnBvc2UsIG5vIGVycm9yIGNoZWNraW5nIHdpbGwgYmUgcGVyZm9ybWVkLgoqCQlVc2VyIGhhcyB0byBrbm93IGV4YWN0bHkgd2hpY2ggcGh5IGFkZHJlc3MoMCB+IDB4MUYpIHdpbGwgYmUgcmVhZC4KKgoqIElOUFVUUzoKKiAgICAgICBwaHlBZGRyIC0gUGh5IEFkZHJlc3MgdG8gcmVhZCB0aGUgcmVnaXN0ZXIgZm9yLiggMCB+IDB4MUYgKQoqICAgICAgIHJlZ0FkZHIgLSBUaGUgcmVnaXN0ZXIncyBhZGRyZXNzLgoqICAgICAgIGRhdGEgICAgLSBkYXRhIHRvIGJlIHdyaXR0ZW4uCioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1dyaXRlTWlpUmVnCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gIEdUX1UzMglwaHlBZGRyLAogICAgSU4gIEdUX1UzMglyZWdBZGRyLAogICAgSU4gIEdUX1UxNglkYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRTV19Nb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBTd2l0Y2ggbW9kZS4gVGhlc2UgdHdvIGJpdHMgcmV0dXJlbiAKKiAgICAgICB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgU1dfTU9ERVsxOjBdIHBpbnMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUgRGlzY2FyZCBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIAkJVGhpcyBmZWF0dXJlIGlzIGZvciBib3RoIGNsaXBwZXJzaGlwIGFuZCBmdWxsc2FpbAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0U1dfTW9kZQooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOIEdUX1NXX01PREUgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEluaXRSZWFkeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgSW5pdFJlYWR5IGJpdC4gVGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lIHdoZW4gdGhlIEFUVSwKKiAgICAgICB0aGUgUXVldWUgQ29udHJvbGxlciBhbmQgdGhlIFN0YXRpc3RpY3MgQ29udHJvbGxlciBhcmUgZG9uZSB3aXRoIHRoZWlyIAoqICAgICAgIGluaXRpYWxpemF0aW9uIGFuZCBhcmUgcmVhZHkgdG8gYWNjZXB0IGZyYW1lcy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfVFJVRTogc3dpdGNoIGlzIHJlYWR5LCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIAkJVGhpcyBmZWF0dXJlIGlzIGZvciBib3RoIGNsaXBwZXJzaGlwIGFuZCBmdWxsc2FpbAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0SW5pdFJlYWR5CigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gR1RfQk9PTCAqbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0YXRzRmx1c2hBbGwKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEZsdXNoIEFsbCBSTU9OIGNvdW50ZXJzIGZvciBhbGwgcG9ydHMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0YXRzRmx1c2hBbGwKKAogICAgSU4gR1RfUURfREVWKiBkZXYKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0YXRzRmx1c2hQb3J0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBGbHVzaCBBbGwgUk1PTiBjb3VudGVycyBmb3IgYSBnaXZlbiBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCiogICAgICAgTm9uZQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3RhdHNGbHVzaFBvcnQKKAogICAgSU4gR1RfUURfREVWKiBkZXYsCiAgICBJTiBHVF9MUE9SVAlwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0dldFBvcnRDb3VudGVyCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgYSBzcGVjaWZpYyBjb3VudGVyIG9mIHRoZSBnaXZlbiBwb3J0CioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJY291bnRlciAtIHRoZSBjb3VudGVyIHdoaWNoIHdpbGwgYmUgcmVhZAoqCiogT1VUUFVUUzoKKgkJc3RhdHNEYXRhIC0gcG9pbnRzIHRvIDMyYml0IGRhdGEgc3RvcmFnZSBmb3IgdGhlIE1JQiBjb3VudGVyCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdGF0c0dldFBvcnRDb3VudGVyCigKCUlOICBHVF9RRF9ERVYJCSpkZXYsCglJTiAgR1RfTFBPUlQJCXBvcnQsCglJTiAgR1RfU1RBVFNfQ09VTlRFUlMJY291bnRlciwKCU9VVCBHVF9VMzIJCQkqc3RhdHNEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0dldFBvcnRBbGxDb3VudGVycwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgYWxsIFJNT04gY291bnRlcnMgb2YgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHN0YXRzQ291bnRlclNldCAtIHBvaW50cyB0byBHVF9TVEFUU19DT1VOVEVSX1NFVCBmb3IgdGhlIE1JQiBjb3VudGVycwoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3RhdHNHZXRQb3J0QWxsQ291bnRlcnMKKAoJSU4gIEdUX1FEX0RFViogZGV2LAoJSU4gIEdUX0xQT1JUCQlwb3J0LAoJT1VUIEdUX1NUQVRTX0NPVU5URVJfU0VUCSpzdGF0c0NvdW50ZXJTZXQKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldExpbWl0TW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQncyByYXRlIGNvbnRyb2wgaW5ncmVzcyBsaW1pdCBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgCS0gcmF0ZSBjb250cm9sIGluZ3Jlc3MgbGltaXQgbW9kZS4gCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRMaW1pdE1vZGUKKAogICAgSU4gR1RfUURfREVWKiAgICAgICAgICAgIGRldiwKICAgIElOIEdUX0xQT1JUIAkgICAgIHBvcnQsCiAgICBJTiBHVF9SQVRFX0xJTUlUX01PREUgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRMaW1pdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBwb3J0J3MgcmF0ZSBjb250cm9sIGluZ3Jlc3MgbGltaXQgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAJLSByYXRlIGNvbnRyb2wgaW5ncmVzcyBsaW1pdCBtb2RlLiAKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0TGltaXRNb2RlCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfUkFURV9MSU1JVF9NT0RFICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldFByaTNSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgaW5ncmVzcyBkYXRhIHJhdGUgbGltaXQgZm9yIHByaW9yaXR5IDMgZnJhbWVzLgoqICAgICAgIFByaW9yaXR5IDMgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkIGFmdGVyIHRoZSBpbmdyZXNzIHJhdGUgc2VsZWN0aW9uCiogICAgICAgaXMgcmVhY2hlZCBvciBleGNlZWRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgbW9kZSAtIHRoZSBwcmlvcml0eSAzIGZyYW1lIHJhdGUgbGltaXQgbW9kZQoqICAgICAgICAgICAgICBHVF9GQUxTRTogdXNlIHRoZSBzYW1lIHJhdGUgYXMgUHJpMlJhdGUKKiAgICAgICAgICAgICAgR1RfVFJVRTogIHVzZSB0d2ljZSB0aGUgcmF0ZSBhcyBQcmkyUmF0ZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRQcmkzUmF0ZQooCiAgICBJTiBHVF9RRF9ERVYqICAgICAgICAgICAgZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX0JPT0wgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0UHJpM1JhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBpbmdyZXNzIGRhdGEgcmF0ZSBsaW1pdCBmb3IgcHJpb3JpdHkgMyBmcmFtZXMuCiogICAgICAgUHJpb3JpdHkgMyBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQgYWZ0ZXIgdGhlIGluZ3Jlc3MgcmF0ZSBzZWxlY3Rpb24KKiAgICAgICBpcyByZWFjaGVkIG9yIGV4Y2VlZGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSB0aGUgcHJpb3JpdHkgMyBmcmFtZSByYXRlIGxpbWl0IG1vZGUKKiAgICAgICAgICAgICAgR1RfRkFMU0U6IHVzZSB0aGUgc2FtZSByYXRlIGFzIFByaTJSYXRlCiogICAgICAgICAgICAgIEdUX1RSVUU6ICB1c2UgdHdpY2UgdGhlIHJhdGUgYXMgUHJpMlJhdGUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0UHJpM1JhdGUKKAogICAgSU4gR1RfUURfREVWKiBkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRQcmkyUmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IGZvciBwcmlvcml0eSAyIGZyYW1lcy4KKiAgICAgICBQcmlvcml0eSAyIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGlvbgoqICAgICAgIGlzIHJlYWNoZWQgb3IgZXhjZWVkZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSB0aGUgcHJpb3JpdHkgMiBmcmFtZSByYXRlIGxpbWl0IG1vZGUKKiAgICAgICAgICAgICAgR1RfRkFMU0U6IHVzZSB0aGUgc2FtZSByYXRlIGFzIFByaTFSYXRlCiogICAgICAgICAgICAgIEdUX1RSVUU6ICB1c2UgdHdpY2UgdGhlIHJhdGUgYXMgUHJpMVJhdGUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0UHJpMlJhdGUKKAogICAgSU4gR1RfUURfREVWKiAgICAgICAgICAgIGRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldFByaTJSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgaW5ncmVzcyBkYXRhIHJhdGUgbGltaXQgZm9yIHByaW9yaXR5IDIgZnJhbWVzLgoqICAgICAgIFByaW9yaXR5IDIgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkIGFmdGVyIHRoZSBpbmdyZXNzIHJhdGUgc2VsZWN0aW9uCiogICAgICAgaXMgcmVhY2hlZCBvciBleGNlZWRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gdGhlIHByaW9yaXR5IDIgZnJhbWUgcmF0ZSBsaW1pdCBtb2RlCiogICAgICAgICAgICAgIEdUX0ZBTFNFOiB1c2UgdGhlIHNhbWUgcmF0ZSBhcyBQcmkxUmF0ZQoqICAgICAgICAgICAgICBHVF9UUlVFOiAgdXNlIHR3aWNlIHRoZSByYXRlIGFzIFByaTFSYXRlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldFByaTJSYXRlCigKICAgIElOIEdUX1FEX0RFViogICAgICAgICAgICBkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRQcmkxUmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IGZvciBwcmlvcml0eSAxIGZyYW1lcy4KKiAgICAgICBQcmlvcml0eSAxIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGlvbgoqICAgICAgIGlzIHJlYWNoZWQgb3IgZXhjZWVkZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSB0aGUgcHJpb3JpdHkgMSBmcmFtZSByYXRlIGxpbWl0IG1vZGUKKiAgICAgICAgICAgICAgR1RfRkFMU0U6IHVzZSB0aGUgc2FtZSByYXRlIGFzIFByaTBSYXRlCiogICAgICAgICAgICAgIEdUX1RSVUU6ICB1c2UgdHdpY2UgdGhlIHJhdGUgYXMgUHJpMFJhdGUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0UHJpMVJhdGUKKAogICAgSU4gR1RfUURfREVWKiAgICAgICAgICAgIGRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldFByaTFSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgaW5ncmVzcyBkYXRhIHJhdGUgbGltaXQgZm9yIHByaW9yaXR5IDEgZnJhbWVzLgoqICAgICAgIFByaW9yaXR5IDEgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkIGFmdGVyIHRoZSBpbmdyZXNzIHJhdGUgc2VsZWN0aW9uCiogICAgICAgaXMgcmVhY2hlZCBvciBleGNlZWRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gdGhlIHByaW9yaXR5IDEgZnJhbWUgcmF0ZSBsaW1pdCBtb2RlCiogICAgICAgICAgICAgIEdUX0ZBTFNFOiB1c2UgdGhlIHNhbWUgcmF0ZSBhcyBQcmkwUmF0ZQoqICAgICAgICAgICAgICBHVF9UUlVFOiAgdXNlIHR3aWNlIHRoZSByYXRlIGFzIFByaTBSYXRlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldFByaTFSYXRlCigKICAgIElOIEdUX1FEX0RFViogICAgICAgICAgICBkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRQcmkwUmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQncyBpbmdyZXNzIGRhdGEgbGltaXQgZm9yIHByaW9yaXR5IDAgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIHJhdGUgICAgLSBpbmdyZXNzIGRhdGEgcmF0ZSBsaW1pdCBmb3IgcHJpb3JpdHkgMCBmcmFtZXMuIFRoZXNlIGZyYW1lcwoqICAgICAgIAkgIHdpbGwgYmUgZGlzY2FyZGVkIGFmdGVyIHRoZSBpbmdyZXNzIHJhdGUgc2VsZWN0ZWQgaXMgcmVhY2hlZCAKKiAgICAgICAJICBvciBleGNlZWRlZC4gCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldFByaTBSYXRlCigKICAgIElOIEdUX1FEX0RFViogICAgICAgICAgICBkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOIEdUX1BSSTBfUkFURSAgICByYXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldFByaTBSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCdzIGluZ3Jlc3MgZGF0YSBsaW1pdCBmb3IgcHJpb3JpdHkgMCBmcmFtZXMuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydAktIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqCiogT1VUUFVUUzoKKiAgICAgICByYXRlICAgIC0gaW5ncmVzcyBkYXRhIHJhdGUgbGltaXQgZm9yIHByaW9yaXR5IDAgZnJhbWVzLiBUaGVzZSBmcmFtZXMKKiAgICAgICAJICB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGVkIGlzIHJlYWNoZWQgCiogICAgICAgCSAgb3IgZXhjZWVkZWQuIAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRQcmkwUmF0ZQooCiAgICBJTiBHVF9RRF9ERVYqICAgICAgICAgICAgZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfUFJJMF9SQVRFICAgICpyYXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldEJ5dGVzQ291bnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBieWV0cyB0byBjb3VudCBmb3IgbGltaXRpbmcgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZAoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqICAgIAlsaW1pdE1HTVQgLSBHVF9UUlVFOiBUbyBsaW1pdCBhbmQgY291bnQgTUdNVCBmcmFtZSBieXRlcwoqICAgIAkJICAgIEdUX0ZBTFNFOiBvdGhlcndpc2UKKiAgICAJY291bnRJRkcgIC0gR1RfVFJVRTogVG8gY291bnQgSUZHIGJ5dGVzCiogICAgCQkgICAgR1RfRkFMU0U6IG90aGVyd2lzZQoqICAgIAljb3VudFByZSAgLSBHVF9UUlVFOiBUbyBjb3VudCBQcmVhbWJsZSBieXRlcwoqICAgIAkJICAgIEdUX0ZBTFNFOiBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0Qnl0ZXNDb3VudAooCiAgICBJTiBHVF9RRF9ERVYqICAgICAgIGRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICAJcG9ydCwKICAgIElOIEdUX0JPT0wgCQlsaW1pdE1HTVQsCiAgICBJTiBHVF9CT09MIAkJY291bnRJRkcsCiAgICBJTiBHVF9CT09MIAkJY291bnRQcmUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0Qnl0ZXNDb3VudAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIGJ5ZXRzIHRvIGNvdW50IGZvciBsaW1pdGluZyBuZWVkcyB0byBiZSBkZXRlcm1pbmVkCioKKiBJTlBVVFM6CiogICAgICAgcG9ydAktIGxvZ2ljYWwgcG9ydCBudW1iZXIgCioKKiBPVVRQVVRTOgoqICAgIAlsaW1pdE1HTVQgLSBHVF9UUlVFOiBUbyBsaW1pdCBhbmQgY291bnQgTUdNVCBmcmFtZSBieXRlcwoqICAgIAkJICAgIEdUX0ZBTFNFOiBvdGhlcndpc2UKKiAgICAJY291bnRJRkcgIC0gR1RfVFJVRTogVG8gY291bnQgSUZHIGJ5dGVzCiogICAgCQkgICAgR1RfRkFMU0U6IG90aGVyd2lzZQoqICAgIAljb3VudFByZSAgLSBHVF9UUlVFOiBUbyBjb3VudCBQcmVhbWJsZSBieXRlcwoqICAgIAkJICAgIEdUX0ZBTFNFOiBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0Qnl0ZXNDb3VudAooCiAgICBJTiBHVF9RRF9ERVYqICAgICAgIGRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICAJcG9ydCwKICAgIElOIEdUX0JPT0wgCQkqbGltaXRNR01ULAogICAgSU4gR1RfQk9PTCAJCSpjb3VudElGRywKICAgIElOIEdUX0JPT0wgCQkqY291bnRQcmUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjU2V0RWdyZXNzUmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQncyBlZ3Jlc3MgZGF0YSBsaW1pdC4KKgkJCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICByYXRlVHlwZSAgLSBlZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IChHVF9FUkFURV9UWVBFIHVuaW9uIHR5cGUpLiAKKgkJCQkJdW5pb24gdHlwZSBpcyB1c2VkIHRvIHN1cHBvcnQgbXVsdGlwbGUgZGV2aWNlcyB3aXRoIHRoZQoqCQkJCQlkaWZmZXJlbnQgZm9ybWF0cyBvZiBlZ3Jlc3MgcmF0ZS4KKgkJCQkJR1RfRVJBVEVfVFlQRSBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHM6CioJCQkJCQlkZWZpbmVkUmF0ZSAtIEdUX0VHUkVTU19SQVRFIGVudW0gdHlwZSBzaG91bGQgdXNlZCBmb3IgdGhlIAoqCQkJCQkJCWZvbGxvd2luZyBkZXZpY2VzOgoqCQkJCQkJCTg4RTYyMTgsIDg4RTYzMTgsIDg4RTYwNjMsIDg4RTYwODMsIDg4RTYxODEsIDg4RTYxODMsCioJCQkJCQkJODhFNjA5MywgODhFNjA5NSwgODhFNjE4NSwgODhFNjEwOCwgODhFNjA2NSwgODhFNjA2MSwgCioJCQkJCQkJYW5kIHRoZWlyIHZhcmlhdGlvbnMKKgkJCQkJCWtiUmF0ZSAtIHJhdGUgaW4ga2JwcyB0aGF0IHNob3VsZCB1c2VkIGZvciB0aGUgZm9sbG93aW5nIAoqCQkJCQkJCWRldmljZXM6CioJCQkJCQkJODhFNjA5NywgODhFNjA5NiB3aXRoIHRoZSBHVF9QSVJMX0VMSU1JVF9NT0RFIG9mIAoqCQkJCQkJCQlHVF9QSVJMX0VMSU1JVF9MQVlFUjEsCioJCQkJCQkJCUdUX1BJUkxfRUxJTUlUX0xBWUVSMiwgb3IgCioJCQkJCQkJCUdUX1BJUkxfRUxJTUlUX0xBWUVSMyAoc2VlIGdyY1NldEVMaW1pdE1vZGUpCioJCQkJCQkJNjRrYnBzIH4gMU1icHMgICAgOiBpbmNyZW1lbnRzIG9mIDY0a2JwcywKKgkJCQkJCQkxTWJwcyB+IDEwME1icHMgICA6IGluY3JlbWVudHMgb2YgMU1icHMsIGFuZAoqCQkJCQkJCTEwME1icHMgfiAxMDAwTWJwczogaW5jcmVtZW50cyBvZiAxME1icHMKKgkJCQkJCQlUaGVyZWZvcmUsIHRoZSB2YWxpZCB2YWx1ZXMgYXJlOgoqCQkJCQkJCQk2NCwgMTI4LCAxOTIsIDI1NiwgMzIwLCAzODQsLi4uLCA5NjAsCioJCQkJCQkJCTEwMDAsIDIwMDAsIDMwMDAsIDQwMDAsIC4uLiwgMTAwMDAwLAoqCQkJCQkJCQkxMTAwMDAsIDEyMDAwMCwgMTMwMDAwLCAuLi4sIDEwMDAwMDAuCioJCQkJCQlmUmF0ZSAtIGZyYW1lIHBlciBzZWNvbmQgdGhhdCBzaG91bGQgdXNlZCBmb3IgdGhlIGZvbGxvd2luZwoqCQkJCQkJCWRldmljZXM6CioJCQkJCQkJODhFNjA5NywgODhFNjA5NiB3aXRoIEdUX1BJUkxfRUxJTUlUX01PREUgb2YgCioJCQkJCQkJCUdUX1BJUkxfRUxJTUlUX0ZSQU1FCioJCQkJCQkJVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDc2MDAgYW5kIDE0ODgwMDAKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOiAKKgkJCUdUXzE2TSwgR1RfMzJNLCBHVF82NE0sIEdUXzEyOE0sIGFuZCBHVF8yNTZNIGluIEdUX0VHUkVTU19SQVRFIGVudW0KKgkJCWFyZSBzdXBwb3J0ZWQgb25seSBieSBHaWdhYml0IEV0aGVybmV0IFN3aXRjaC4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0RWdyZXNzUmF0ZQooCiAgICBJTiBHVF9RRF9ERVYgICAgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgSU4gR1RfRVJBVEVfVFlQRSAgICpyYXRlVHlwZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRFZ3Jlc3NSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCdzIGVncmVzcyBkYXRhIGxpbWl0LgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICByYXRlVHlwZSAgLSBlZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IChHVF9FUkFURV9UWVBFIHVuaW9uIHR5cGUpLiAKKgkJCQkJdW5pb24gdHlwZSBpcyB1c2VkIHRvIHN1cHBvcnQgbXVsdGlwbGUgZGV2aWNlcyB3aXRoIHRoZQoqCQkJCQlkaWZmZXJlbnQgZm9ybWF0cyBvZiBlZ3Jlc3MgcmF0ZS4KKgkJCQkJR1RfRVJBVEVfVFlQRSBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHM6CioJCQkJCQlkZWZpbmVkUmF0ZSAtIEdUX0VHUkVTU19SQVRFIGVudW0gdHlwZSBzaG91bGQgdXNlZCBmb3IgdGhlIAoqCQkJCQkJCWZvbGxvd2luZyBkZXZpY2VzOgoqCQkJCQkJCTg4RTYyMTgsIDg4RTYzMTgsIDg4RTYwNjMsIDg4RTYwODMsIDg4RTYxODEsIDg4RTYxODMsCioJCQkJCQkJODhFNjA5MywgODhFNjA5NSwgODhFNjE4NSwgODhFNjEwOCwgODhFNjA2NSwgODhFNjA2MSwgCioJCQkJCQkJYW5kIHRoZWlyIHZhcmlhdGlvbnMKKgkJCQkJCWtiUmF0ZSAtIHJhdGUgaW4ga2JwcyB0aGF0IHNob3VsZCB1c2VkIGZvciB0aGUgZm9sbG93aW5nIAoqCQkJCQkJCWRldmljZXM6CioJCQkJCQkJODhFNjA5NywgODhFNjA5NiB3aXRoIHRoZSBHVF9QSVJMX0VMSU1JVF9NT0RFIG9mIAoqCQkJCQkJCQlHVF9QSVJMX0VMSU1JVF9MQVlFUjEsCioJCQkJCQkJCUdUX1BJUkxfRUxJTUlUX0xBWUVSMiwgb3IgCioJCQkJCQkJCUdUX1BJUkxfRUxJTUlUX0xBWUVSMyAoc2VlIGdyY1NldEVMaW1pdE1vZGUpCioJCQkJCQkJNjRrYnBzIH4gMU1icHMgICAgOiBpbmNyZW1lbnRzIG9mIDY0a2JwcywKKgkJCQkJCQkxTWJwcyB+IDEwME1icHMgICA6IGluY3JlbWVudHMgb2YgMU1icHMsIGFuZAoqCQkJCQkJCTEwME1icHMgfiAxMDAwTWJwczogaW5jcmVtZW50cyBvZiAxME1icHMKKgkJCQkJCQlUaGVyZWZvcmUsIHRoZSB2YWxpZCB2YWx1ZXMgYXJlOgoqCQkJCQkJCQk2NCwgMTI4LCAxOTIsIDI1NiwgMzIwLCAzODQsLi4uLCA5NjAsCioJCQkJCQkJCTEwMDAsIDIwMDAsIDMwMDAsIDQwMDAsIC4uLiwgMTAwMDAwLAoqCQkJCQkJCQkxMTAwMDAsIDEyMDAwMCwgMTMwMDAwLCAuLi4sIDEwMDAwMDAuCioJCQkJCQlmUmF0ZSAtIGZyYW1lIHBlciBzZWNvbmQgdGhhdCBzaG91bGQgdXNlZCBmb3IgdGhlIGZvbGxvd2luZwoqCQkJCQkJCWRldmljZXM6CioJCQkJCQkJODhFNjA5NywgODhFNjA5NiB3aXRoIEdUX1BJUkxfRUxJTUlUX01PREUgb2YgCioJCQkJCQkJCUdUX1BJUkxfRUxJTUlUX0ZSQU1FCioJCQkJCQkJVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDc2MDAgYW5kIDE0ODgwMDAKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOgoqCQkJR1RfMTZNLCBHVF8zMk0sIEdUXzY0TSwgR1RfMTI4TSwgYW5kIEdUXzI1Nk0gaW4gR1RfRUdSRVNTX1JBVEUgZW51bQoqCQkJYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IEdpZ2FiaXQgRXRoZXJuZXQgU3dpdGNoLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRFZ3Jlc3NSYXRlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfRVJBVEVfVFlQRSAgKnJhdGVUeXBlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGF2U2V0UEFWCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgUG9ydCBBc3NvY2lhdGlvbiBWZWN0b3IgCioKKiBJTlBVVFM6CiogICAgICAgcG9ydAktIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgcGF2IAktIFBvcnQgQXNzb2NpYXRpb24gVmVjdG9yIAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGF2U2V0UEFWCigKICAgIElOIEdUX1FEX0RFViogICAgICAgZGV2LAogICAgSU4gR1RfTFBPUlQJcG9ydCwKICAgIElOIEdUX1UxNglwYXYKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BhdkdldFBBVgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIFBvcnQgQXNzb2NpYXRpb24gVmVjdG9yIAoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBwYXYgCS0gUG9ydCBBc3NvY2lhdGlvbiBWZWN0b3IgCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwYXZHZXRQQVYKKAogICAgSU4gR1RfUURfREVWKiAgICAgICBkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9VMTYgICAgKnBhdgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGF2U2V0SW5ncmVzc01vbml0b3IKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBJbmdyZXNzIE1vbml0b3IgYml0IGluIHRoZSBQQVYuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSB0aGUgaW5ncmVzcyBtb25pdG9yIGJpdCBpbiB0aGUgUEFWCiogICAgICAgICAgICAgIEdUX0ZBTFNFOiBJbmdyZXNzIE1vbml0b3IgZW5hYmxlZCAKKiAgICAgICAgICAgICAgR1RfVFJVRTogIEluZ3Jlc3MgTW9uaXRvciBkaXNhYmxlZCAKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGF2U2V0SW5ncmVzc01vbml0b3IKKAogICAgSU4gR1RfUURfREVWKiAgICAgICBkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfQk9PTCAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGF2R2V0SW5ncmVzc01vbml0b3IKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBJbmdyZXNzIE1vbml0b3IgYml0IGluIHRoZSBQQVYuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIAoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIHRoZSBpbmdyZXNzIG1vbml0b3IgYml0IGluIHRoZSBQQVYKKiAgICAgICAgICAgICAgR1RfRkFMU0U6IEluZ3Jlc3MgTW9uaXRvciBlbmFibGVkIAoqICAgICAgICAgICAgICBHVF9UUlVFOiAgSW5ncmVzcyBNb25pdG9yIGRpc2FibGVkIAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGF2R2V0SW5ncmVzc01vbml0b3IKKAogICAgSU4gR1RfUURfREVWKiAgICAgICBkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmN0R2V0Q2FibGVTdGF0dXMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBwZXJmb3JtIHRoZSB2aXJ0dWFsIGNhYmxlIHRlc3QgZm9yIHRoZSByZXF1ZXN0ZWQgcG9ydCwKKiAgICAgICBhbmQgcmV0dXJucyB0aGUgdGhlIHN0YXR1cyBwZXIgTURJIHBhaXIuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIGNhYmxlU3RhdHVzIC0gdGhlIHBvcnQgY29wcGVyIGNhYmxlIHN0YXR1cy4KKiAgICAgICBjYWJsZUxlbiAgICAtIHRoZSBwb3J0IGNvcHBlciBjYWJsZSBsZW5ndGguCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBJbnRlcm5hbCBHaWdhYml0IFBoeXMgaW4gODhFNjE2NSBmYW1pbHkgYW5kIDg4RTYzNTEgZmFtaWx5IGRldmljZXMKKgkJYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBBUEkuIEZvciB0aG9zZSBkZXZpY2VzLCBndmN0R2V0QWR2Q2FibGVEaWFnIAoqCQlBUEkgY2FuIGJlIHVzZWQsIGluc3RlYWQuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2Y3RHZXRDYWJsZURpYWcKKAogICAgSU4gR1RfUURfREVWKiAgICAgICBkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBPVVQgR1RfQ0FCTEVfU1RBVFVTICpjYWJsZVN0YXR1cwopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZjdEdldDEwMDBCVEV4dGVuZGVkU3RhdHVzCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIGV4dGVuZGVkIGNhYmxlIHN0YXR1cywgc3VjaCBhcyBQYWlyIFBvbG9hcml0eSwKKgkJUGFpciBTd2FwLCBhbmQgUGFpciBTa2V3LiBOb3RlIHRoYXQgdGhpcyByb3V0aW5lIHdpbGwgYmUgc3VjY2VzcyBvbmx5CioJCWlmIDEwMDBCYXNlLVQgTGluayBpcyB1cC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgZXh0ZW5kZWRTdGF0dXMgLSB0aGUgZXh0ZW5kZWQgY2FibGUgc3RhdHVzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgSW50ZXJuYWwgR2lnYWJpdCBQaHlzIGluIDg4RTYxNjUgZmFtaWx5IGFuZCA4OEU2MzUxIGZhbWlseSBkZXZpY2VzCioJCWFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgQVBJLiBGb3IgdGhvc2UgZGV2aWNlcywgZ3ZjdEdldEFkdkV4dGVuZGVkU3RhdHVzIAoqCQlBUEkgY2FuIGJlIHVzZWQsIGluc3RlYWQuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2Y3RHZXQxMDAwQlRFeHRlbmRlZFN0YXR1cwooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIE9VVCBHVF8xMDAwQlRfRVhURU5ERURfU1RBVFVTICpleHRlbmRlZFN0YXR1cwopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RNZW1TZXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFNldCBhIGJsb2NrIG9mIG1lbW9yeQoqCiogSU5QVVRTOgoqICAgICAgIHN0YXJ0ICAtIHN0YXJ0IGFkZHJlc3Mgb2YgbWVtb3J5IGJsb2NrIGZvciBzZXR0aW5nCiogICAgICAgc2ltYm9sIC0gY2hhcmFjdGVyIHRvIHN0b3JlLCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQgY2hhcgoqICAgICAgIHNpemUgICAtIHNpemUgb2YgYmxvY2sgdG8gYmUgc2V0CioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgUG9pbnRlciB0byBzZXQgbWVtb3J5IGJsb2NrCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCAqIGd0TWVtU2V0CigKICAgIElOIHZvaWQgKiBzdGFydCwKICAgIElOIGludCAgICBzeW1ib2wsCiAgICBJTiBHVF9VMzIgc2l6ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndE1lbUNweQoqCiogREVTQ1JJUFRJT046CiogICAgICAgQ29waWVzICdzaXplJyBjaGFyYWN0ZXJzIGZyb20gdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5ICdzb3VyY2UnIGludG8KKiAgICAgICB0aGUgb2JqZWN0IHBvaW50ZWQgdG8gYnkgJ2Rlc3RpbmF0aW9uJy4gSWYgY29weWluZyB0YWtlcyBwbGFjZSBiZXR3ZWVuCiogICAgICAgb2JqZWN0cyB0aGF0IG92ZXJsYXAsIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQuCioKKiBJTlBVVFM6CiogICAgICAgZGVzdGluYXRpb24gLSBkZXN0aW5hdGlvbiBvZiBjb3B5CiogICAgICAgc291cmNlICAgICAgLSBzb3VyY2Ugb2YgY29weQoqICAgICAgIHNpemUgICAgICAgIC0gc2l6ZSBvZiBtZW1vcnkgdG8gY29weQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIFBvaW50ZXIgdG8gZGVzdGluYXRpb24KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkICogZ3RNZW1DcHkKKAogICAgSU4gdm9pZCAqICAgICAgIGRlc3RpbmF0aW9uLAogICAgSU4gY29uc3Qgdm9pZCAqIHNvdXJjZSwKICAgIElOIEdUX1UzMiAgICAgICBzaXplCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndE1lbUNtcAoqCiogREVTQ1JJUFRJT046CiogICAgICAgQ29tcGFyZXMgZ2l2ZW4gbWVtb3JpZXMuCioKKiBJTlBVVFM6CiogICAgICAgc3JjMSAtIHNvdXJjZSAxCiogICAgICAgc3JjMiAtIHNvdXJjZSAyCiogICAgICAgc2l6ZSAtIHNpemUgb2YgbWVtb3J5IHRvIGNvcHkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICAwLCBpZiBlcXVhbC4KKgkJbmVnYXRpdmUgbnVtYmVyLCBpZiBzcmMxIDwgc3JjMi4KKgkJcG9zaXRpdmUgbnVtYmVyLCBpZiBzcmMxID4gc3JjMi4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwppbnQgZ3RNZW1DbXAKKAogICAgSU4gY2hhciBzcmMxW10sCiAgICBJTiBjaGFyIHNyYzJbXSwKICAgIElOIEdUX1UzMiBzaXplCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0U3RybGVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBEZXRlcm1pbmUgdGhlIGxlbmd0aCBvZiBhIHN0cmluZwoqIElOUFVUUzoKKiAgICAgICBzb3VyY2UgIC0gc3RyaW5nCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgc2l6ZSAgICAtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHN0cmluZywgbm90IGluY2x1ZGluZyBFT1MuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfVTMyIGd0U3RybGVuCigKICAgIElOIGNvbnN0IHZvaWQgKiBzb3VyY2UKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3REZWxheQoqCiogREVTQ1JJUFRJT046CiogICAgICAgV2FpdCBmb3IgdGhlIGdpdmVuIHVTZWMgYW5kIHJldHVybi4KKgkJQ3VycmVudCBTd2l0Y2ggZGV2aWNlcyB3aXRoIEdpZ2FiaXQgRXRoZXJuZXQgU3VwcG9ydCByZXF1aXJlIDI1MCB1U2VjCioJCW9mIGRlbGF5IHRpbWUgZm9yIFBQVSB0byBiZSBkaXNhYmxlZC4KKgkJU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBTeXN0ZW0gYW5kL29yIE9TIGRlcGVuZGVudCwgaXQgc2hvdWxkIGJlIHByb3ZpZGVkCioJCWJ5IGVhY2ggRFNEVCB1c2VyLgoqCiogSU5QVVRTOgoqICAgICAgIGRlbGF5VGltZSAtIGRlbGF5IGluIHVTZWMuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgTm9uZQoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgZ3REZWxheQooCiAgICBJTiBjb25zdCB1bnNpZ25lZCBpbnQgZGVsYXlUaW1lCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndFZlcnNpb24KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmVyc2lvbiBvZiB0aGUgUXVhcnRlckRlY2sgU1cgc3VpdGUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgdmVyc2lvbiAgICAgLSBRdWFydGVyRGVjayBzb2Z0d2FyZSB2ZXJzaW9uLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyBvbiBzdWNjZXNzLAoqICAgICAgIEdUX0JBRF9QQVJBTSBvbiBiYWQgcGFyYW1ldGVycywKKiAgICAgICBHVF9GQUlMIG90aGVyd2lzZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndFZlcnNpb24KKAogICAgT1VUIEdUX1ZFUlNJT04gICAqdmVyc2lvbgopOwoKCi8qIFByb3RvdHlwZXMgYWRkZWQgZm9yIEdpZ2FiaXQgRXRoZXJuZXQgU3dpdGNoIFN1cHBvcnQgKi8KCgovKiBndEJyZ0ZkYi5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJNb3ZlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIG1vdmVzIGFsbCBvciB1bmJsb2NrZWQgYWRkcmVzc2VzIGZyb20gYSBwb3J0IHRvIGFub3RoZXIuCioKKiBJTlBVVFM6CioJCW1vdmVDbWQgIC0gdGhlIG1vdmUgb3BlcmF0aW9uIHR5cGUuCioJCW1vdmVGcm9tIC0gcG9ydCB3aGVyZSBtb3ZpbmcgZnJvbQoqCQltb3ZlVG8gICAtIHBvcnQgd2hlcmUgbW92aW5nIHRvCioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiTW92ZQooCglJTiBHVF9RRF9ERVYgCSpkZXYsCglJTiBHVF9NT1ZFX0NNRAltb3ZlQ21kLAoJSU4gR1RfVTMyCQltb3ZlRnJvbSwKCUlOIEdUX1UzMgkJbW92ZVRvCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJNb3ZlSW5EQgoqCiogREVTQ1JJUFRJT046CiogCQlUaGlzIHJvdXRpbmUgbW92ZSBhbGwgb3IgdW5ibG9ja2VkIGFkZHJlc3NlcyB3aGljaCBhcmUgaW4gdGhlIHBhcnRpY3VsYXIKKiAJCUFUVSBEYXRhYmFzZSAoREJOdW0pIGZyb20gYSBwb3J0IHRvIGFub3RoZXIuCioKKiBJTlBVVFM6CiogCQltb3ZlQ21kICAtIHRoZSBtb3ZlIG9wZXJhdGlvbiB0eXBlLgoqCQlEQk51bQkgCS0gQVRVIE1BQyBBZGRyZXNzIERhdGFiYXNlIE51bWJlci4KKgkJbW92ZUZyb20gLSBwb3J0IHdoZXJlIG1vdmluZyBmcm9tCioJCW1vdmVUbyAgIC0gcG9ydCB3aGVyZSBtb3ZpbmcgdG8KKgoqIE9VVFBVVFM6CiogICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYk1vdmVJbkRCCigKCUlOIEdUX1FEX0RFViAgICpkZXYsCglJTiBHVF9NT1ZFX0NNRCBtb3ZlQ21kLAoJSU4gR1RfVTMyIAkJREJOdW0sCglJTiBHVF9VMzIJCW1vdmVGcm9tLAoJSU4gR1RfVTMyCQltb3ZlVG8KKTsKCi8qIGd0QnJnU3RwLmMgKi8KCi8qIGd0QnJnVmxhbi5jICovCgovKiBndEJyZ1Z0dS5jICovCgovKiBndEV2ZW50cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdHVHZXRJbnRTdGF0dXMKKgoqIERFU0NSSVBUSU9OOgoqCQlDaGVjayB0byBzZWUgaWYgYSBzcGVjaWZpYyB0eXBlIG9mIEFUVSBpbnRlcnJ1cHQgb2NjdXJlZAoqCiogSU5QVVRTOgoqICAgICBpbnRUeXBlIC0gdGhlIHR5cGUgb2YgaW50ZXJydXB0IHdoaWNoIGNhdXNlcyBhbiBpbnRlcnJ1cHQuCioJCQkJCUdUX01FTUVCRVJfVklPTEFUSU9OLCBHVF9NSVNTX1ZJT0xBVElPTiwgb3IgR1RfRlVMTF9WSU9MQVRJT04gCioKKiBPVVRQVVRTOgoqIAkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAJLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMIAktIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F0dUdldEludFN0YXR1cwooCglJTiAgR1RfUURfREVWCQkJCSpkZXYsCglPVVQgR1RfQVRVX0lOVF9TVEFUVVMJKmF0dUludFN0YXR1cwopOwoKCi8qIGd0UGh5Q3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXQxMDAwVE1hc3Rlck1vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IHRoZSBwb3J0IG11bHRpY2FzdCByYXRlIGxpbWl0LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF8xMDAwVF9NQVNURVJfU0xBVkUgc3RydWN0dXJlCioJCQkJYXV0b0NvbmZpZyAgIC0gR1RfVFJVRSBmb3IgYXV0bywgR1RfRkFMU0UgZm9yIG1hbnVhbCBzZXR1cC4KKgkJCQltYXN0ZXJQcmVmZXIgLSBHVF9UUlVFIGlmIE1hc3RlciBjb25maWd1cmF0aW9uIGlzIHByZWZlcnJlZC4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0MTAwMFRNYXN0ZXJNb2RlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQsCglJTiBHVF8xMDAwVF9NQVNURVJfU0xBVkUJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldDEwMDBUTWFzdGVyTW9kZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXQgdGhlIHBvcnQgbXVsdGljYXN0IHJhdGUgbGltaXQuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF8xMDAwVF9NQVNURVJfU0xBVkUgc3RydWN0dXJlCioJCQkJYXV0b0NvbmZpZyAgIC0gR1RfVFJVRSBmb3IgYXV0bywgR1RfRkFMU0UgZm9yIG1hbnVhbCBzZXR1cC4KKgkJCQltYXN0ZXJQcmVmZXIgLSBHVF9UUlVFIGlmIE1hc3RlciBjb25maWd1cmF0aW9uIGlzIHByZWZlcnJlZC4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXQxMDAwVE1hc3Rlck1vZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfMTAwMFRfTUFTVEVSX1NMQVZFCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQaHlSZWcKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmVhZHMgUGh5IFJlZ2lzdGVycy4KKgoqIElOUFVUUzoKKgkJcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJcmVnQWRkciAtIFRoZSByZWdpc3RlcidzIGFkZHJlc3MuCioKKiBPVVRQVVRTOgoqCQlkYXRhICAgIC0gVGhlIHJlYWQgcmVnaXN0ZXIncyBkYXRhLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQaHlSZWcKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJSU4gIEdUX1UzMgkgCXJlZ0FkZHIsCglPVVQgR1RfVTE2CSAJKmRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBoeVJlZwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSB3cml0ZXMgUGh5IFJlZ2lzdGVycy4KKgkJCiogSU5QVVRTOgoqCQlwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqCQlyZWdBZGRyIC0gVGhlIHJlZ2lzdGVyJ3MgYWRkcmVzcy4KKgoqIE9VVFBVVFM6CioJCWRhdGEgICAgLSBUaGUgcmVhZCByZWdpc3RlcidzIGRhdGEuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFBoeVJlZwooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglJTiAgR1RfVTMyCSAJcmVnQWRkciwKCUlOICBHVF9VMTYJIAlkYXRhCik7CgoKLyogZ3RQb3J0Q3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXREcm9wT25Mb2NrCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCB0aGUgRHJvcCBvbiBMb2NrLiBXaGVuIHNldCB0byBvbmUsIEluZ3Jlc3MgZnJhbWVzIHdpbGwKKgkJYmUgZGlzY2FyZGVkIGlmIHRoZWlyIFNBIGZpZWxkIGlzIG5vdCBpbiB0aGUgQVRVJ3MgYWRkcmVzcyBkYXRhYmFzZS4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgVW5rbm93biBTQSBkcm9wIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXREcm9wT25Mb2NrCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQJCXBvcnQsCglJTiBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXREcm9wT25Mb2NrCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgRHJvcE9uTG9jayBtb2RlLgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUU6IERyb3BPbkxvY2sgZW5hYmxlZCwKKgkJCQkgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXREcm9wT25Mb2NrCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXREb3VibGVUYWcKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IHRoZSBJbmdyZXNzIERvdWJsZSBUYWcgTW9kZS4gV2hlbiBzZXQgdG8gb25lLCAKKgkJaW5ncmVzc2luZyBmcmFtZXMgYXJlIGV4YW1pbmVkIHRvIHNlZSBpZiB0aGV5IGNvbnRhaW4gYW4gODAyLjNhYyB0YWcuCioJCUlmIHRoZXkgZG8sIHRoZSB0YWcgaXMgcmVtb3ZlZCBhbmQgdGhlbiB0aGUgZnJhbWUgaXMgcHJvY2Vzc2VkIGZyb20KKgkJdGhlcmUgKGkuZS4sIHJlbW92ZWQgdGFnIGlzIGlnbm9yZWQpLiBFc3NlbnRpYWxseSwgdW50YWdnZWQgZnJhbWVzCioJCXJlbWFpbiB1bnRhZ2dlZCwgc2luZ2xlIHRhZ2dlZCBmcmFtZXMgYmVjb21lIHVudGFnZ2VkIGFuZCBkb3VibGUgdGFnZ2VkCioJCWZyYW1lcyBiZWNvbWUgc2luZ2xlIHRhZ2dlZC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgRG91bGJlVGFnIG1vZGUgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldERvdWJsZVRhZwooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUCQlwb3J0LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RG91YmxlVGFnCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgRG91YmxlVGFnIG1vZGUuCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRTogRG91YmxlVGFnIGVuYWJsZWQsCioJCQkJIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0RG91YmxlVGFnCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRJbnRlcnN3aXRjaFBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IEludGVyc3dpdGNoIFBvcnQuIFdoZW4gc2V0IHRvIG9uZSwgCioJCWl0IGluZGljYXRlcyB0aGlzIHBvcnQgaXMgYSBpbnRlcnN3aXRjaCBwb3J0IHVzZWQgdG8gY29tbXVuaWNhdGVkIHdpdGgKKgkJQ1BVIG9yIHRvIGNhc2NhZGUgd2l0aCBhbm90aGVyIHN3aXRjaCBkZXZpY2UuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgZm9yIEludGVyc3dpdGNoIHBvcnQgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEludGVyc3dpdGNoUG9ydAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUCQlwb3J0LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0SW50ZXJzd2l0aFBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBJbnRlcnN3aXRjaFBvcnQuCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRTogVGhpcyBwb3J0IGlzIGludGVyc3dpdGNoIHBvcnQsCioJCQkJIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0SW50ZXJzd2l0Y2hQb3J0CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRMZWFybkRpc2FibGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyBhdXRvbWF0aWMgbGVhcm5pbmcgb2YgbmV3IHNvdXJjZSBNQUMKKgkJYWRkcmVzc2VzIG9uIHRoZSBnaXZlbiBwb3J0IGluZ3Jlc3MKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgZGlzYWJsZSBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0TGVhcm5EaXNhYmxlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQJCXBvcnQsCglJTiBHVF9CT09MCQltb2RlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0TGVhcm5EaXNhYmxlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgTGVhcm5EaXNhYmxlIHNldHVwCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRTogTGVhcm5pbmcgZGlzYWJsZWQgb24gdGhlIGdpdmVuIHBvcnQgaW5ncmVzcyBmcmFtZXMsCioJCQkJIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0TGVhcm5EaXNhYmxlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldExlYXJuRW5hYmxlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgYXV0b21hdGljIGxlYXJuaW5nIG9mIG5ldyBzb3VyY2UgTUFDCioJCWFkZHJlc3NlcyBvbiB0aGUgZ2l2ZW4gcG9ydCBpbmdyZXNzCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJZW5hYmxlIC0gR1RfVFJVRSBmb3IgZGlzYWJsZSBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0TGVhcm5FbmFibGUKKCAKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQJCXBvcnQsCglJTiBHVF9CT09MCQllbmFibGUKKTsKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0TGVhcm5FbmFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldCBhdXRvbWF0aWMgbGVhcm5pbmcgc3RhdHVzIG9mIG5ldyBzb3VyY2UgTUFDIGFkZHJlc3NlcyBvbiBwb3J0IGluZ3Jlc3MuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgZW5hYmxlIC0gR1RfVFJVRSBpZiBlbmFibGVkICBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRMZWFybkVuYWJsZQooCiAgICBJTiBHVF9RRF9ERVYgICpkZXYsCgkgSU4gR1RfTFBPUlQJCXBvcnQsICAgIAogICAgT1VUIEdUX0JPT0wgICplbmJsZQopOwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRJZ25vcmVGQ1MKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBGQ1MgSWdub3JlIG1vZGUuIFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lLAoqCQl0aGUgbGFzdCBmb3VyIGJ5dGVzIG9mIGZyYW1lcyByZWNlaXZlZCBvbiB0aGlzIHBvcnQgYXJlIG92ZXJ3cml0dGVuIHdpdGgKKgkJYSBnb29kIENSQyBhbmQgdGhlIGZyYW1lcyB3aWxsIGJlIGFjY2VwdGVkIGJ5IHRoZSBzd2l0Y2guCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgZm9yIGlnbm9yZSBGQ1Mgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldElnbm9yZUZDUwooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUCQlwb3J0LAoJSU4gR1RfQk9PTCAJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldElnbm9yZUZDUwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIElnbm9yZSBGQ1Mgc2V0dXAKKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFOiBJZ25vcmUgRkNTIG9uIHRoZSBnaXZlbiBwb3J0J3MgaW5ncmVzcyBmcmFtZXMsCioJCQkJIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0SWdub3JlRkNTCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRWVFVQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCVZUVSBQcmlvcml0eSBPdmVycmlkZS4gVGhlIGZvbGxvd2luZyBtb2RlcyBhcmUgc3VwcG9ydGVkOgoqCQkJUFJJX09WRVJSSURFX05PTkUgLQoqCQkJCU5vcm1hbCBmcmFtZSBwcmlvcml0eSBwcm9jZXNzaW5nIG9jY3Vycy4KKgkJCVBSSV9PVkVSUklERV9GUkFNRV9RVUVVRSAtCioJCQkJQm90aCBmcmFtZSBhbmQgcXVldWUgb3ZlcnJpZGVzIHRha2UgcGxhY2Ugb24gdGhlIGZyYW1lLgoqCQkJUFJJX09WRVJSSURFX0ZSQU1FIC0KKgkJCQlQcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBWSUQgKGluIHRoZSBWVFUgdGFibGUpIGlzIHVzZWQKKgkJCQl0byBvdmVyd2l0ZSB0aGUgZnJhbWUncyBGUHJpIChmcmFtZSBwcmlvcml0eSkuCioJCQkJSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCwgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIGJlCioJCQkJdGhpcyBuZXcgcHJpb3JpdHkgdmFsdWUuCioJCQlQUklfT1ZFUlJJREVfUVVFVUUgLQoqCQkJCVByaW9yaXR5IGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFZJRCAoaW4gdGhlIFZUVSB0YWJsZSkgaXMgdXNlZAoqCQkJCXRvIG92ZXJ3aXRlIHRoZSBmcmFtZSdzIFFQcmkgKHF1ZXVlIHByaW9yaXR5KS4KKgkJCQlRUHJpIGlzIHVzZWQgaW50ZXJuYWxseSB0byBtYXAgdGhlIGZyYW1lIHRvIG9uZSBvZiB0aGUgZWdyZXNzCioJCQkJcXVldWVzIGluc2lkZSB0aGUgc3dpdGNoLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9QUklfT1ZFUlJJREUgdHlwZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBtb2RlIGlzIGludmFsaWQKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCQlQUklfT1ZFUlJJREVfRlJBTUUgYW5kIFBSSV9PVkVSUklERV9RVUVVRSBtb2RlcyBhcmUgc3VwcG9ydGVkIG9ubHkgb24KKgkJY2VydGFpbiBzd2l0Y2ggZGV2aWNlLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRWVFVQcmlPdmVycmlkZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUCQlwb3J0LAoJSU4gR1RfUFJJX09WRVJSSURFCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRWVFVQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCVZUVSBQcmlvcml0eSBPdmVycmlkZS4gVGhlIGZvbGxvd2luZyBtb2RlcyBhcmUgc3VwcG9ydGVkOgoqCQkJUFJJX09WRVJSSURFX05PTkUgLQoqCQkJCU5vcm1hbCBmcmFtZSBwcmlvcml0eSBwcm9jZXNzaW5nIG9jY3Vycy4KKgkJCVBSSV9PVkVSUklERV9GUkFNRV9RVUVVRSAtCioJCQkJQm90aCBmcmFtZSBhbmQgcXVldWUgb3ZlcnJpZGVzIHRha2UgcGxhY2Ugb24gdGhlIGZyYW1lLgoqCQkJUFJJX09WRVJSSURFX0ZSQU1FIC0KKgkJCQlQcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBWSUQgKGluIHRoZSBWVFUgdGFibGUpIGlzIHVzZWQKKgkJCQl0byBvdmVyd2l0ZSB0aGUgZnJhbWUncyBGUHJpIChmcmFtZSBwcmlvcml0eSkuCioJCQkJSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCwgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIGJlCioJCQkJdGhpcyBuZXcgcHJpb3JpdHkgdmFsdWUuCioJCQlQUklfT1ZFUlJJREVfUVVFVUUgLQoqCQkJCVByaW9yaXR5IGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFZJRCAoaW4gdGhlIFZUVSB0YWJsZSkgaXMgdXNlZAoqCQkJCXRvIG92ZXJ3aXRlIHRoZSBmcmFtZSdzIFFQcmkgKHF1ZXVlIHByaW9yaXR5KS4KKgkJCQlRUHJpIGlzIHVzZWQgaW50ZXJuYWxseSB0byBtYXAgdGhlIGZyYW1lIHRvIG9uZSBvZiB0aGUgZWdyZXNzCioJCQkJcXVldWVzIGluc2lkZSB0aGUgc3dpdGNoLgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1BSSV9PVkVSUklERSB0eXBlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCVBSSV9PVkVSUklERV9GUkFNRSBhbmQgUFJJX09WRVJSSURFX1FVRVVFIG1vZGVzIGFyZSBzdXBwb3J0ZWQgb25seSBvbgoqCQljZXJ0YWluIHN3aXRjaCBkZXZpY2UuIFBsZWFzZSByZWZlciB0byB0aGUgZGV2aWNlIGRhdGFzaGVldC4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFZUVVByaU92ZXJyaWRlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX1BSSV9PVkVSUklERQkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFNBUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlTQSBQcmlvcml0eSBPdmVycmlkZS4gVGhlIGZvbGxvd2luZyBtb2RlIGlzIHN1cHBvcnRlZDoKKgkJCVBSSV9PVkVSUklERV9OT05FIC0KKgkJCQlOb3JtYWwgZnJhbWUgcHJpb3JpdHkgcHJvY2Vzc2luZyBvY2N1cnMuCioJCQlQUklfT1ZFUlJJREVfRlJBTUVfUVVFVUUgLQoqCQkJCUJvdGggZnJhbWUgYW5kIHF1ZXVlIG92ZXJyaWRlcyB0YWtlIHBsYWNlIG9uIHRoZSBmcmFtZS4KKgkJCVBSSV9PVkVSUklERV9GUkFNRSAtCioJCQkJUHJpb3JpdHkgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgU0EgKGluIHRoZSBBVFUgdGFibGUpIGlzIHVzZWQKKgkJCQl0byBvdmVyd2l0ZSB0aGUgZnJhbWUncyBGUHJpIChmcmFtZSBwcmlvcml0eSkuCioJCQkJSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCwgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIGJlCioJCQkJdGhpcyBuZXcgcHJpb3JpdHkgdmFsdWUuCioJCQlQUklfT1ZFUlJJREVfUVVFVUUgLQoqCQkJCVByaW9yaXR5IGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFNBIChpbiB0aGUgQVRVIHRhYmxlKSBpcyB1c2VkCioJCQkJdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgUVByaSAocXVldWUgcHJpb3JpdHkpLgoqCQkJCVFQcmkgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIG1hcCB0aGUgZnJhbWUgdG8gb25lIG9mIHRoZSBlZ3Jlc3MKKgkJCQlxdWV1ZXMgaW5zaWRlIHRoZSBzd2l0Y2guCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1BSSV9PVkVSUklERSB0eXBlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIG1vZGUgaXMgaW52YWxpZAoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioJCVBSSV9PVkVSUklERV9GUkFNRSBhbmQgUFJJX09WRVJSSURFX1FVRVVFIG1vZGVzIGFyZSBzdXBwb3J0ZWQgb25seSBvbgoqCQljZXJ0YWluIHN3aXRjaCBkZXZpY2UuIFBsZWFzZSByZWZlciB0byB0aGUgZGV2aWNlIGRhdGFzaGVldC4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFNBUHJpT3ZlcnJpZGUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydCwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFNBUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlTQSBQcmlvcml0eSBPdmVycmlkZS4gVGhlIGZvbGxvd2luZyBtb2RlIGlzIHN1cHBvcnRlZDoKKgkJCVBSSV9PVkVSUklERV9OT05FIC0KKgkJCQlOb3JtYWwgZnJhbWUgcHJpb3JpdHkgcHJvY2Vzc2luZyBvY2N1cnMuCioJCQlQUklfT1ZFUlJJREVfRlJBTUVfUVVFVUUgLQoqCQkJCUJvdGggZnJhbWUgYW5kIHF1ZXVlIG92ZXJyaWRlcyB0YWtlIHBsYWNlIG9uIHRoZSBmcmFtZS4KKgkJCVBSSV9PVkVSUklERV9GUkFNRSAtCioJCQkJUHJpb3JpdHkgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgU0EgKGluIHRoZSBBVFUgdGFibGUpIGlzIHVzZWQKKgkJCQl0byBvdmVyd2l0ZSB0aGUgZnJhbWUncyBGUHJpIChmcmFtZSBwcmlvcml0eSkuCioJCQkJSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCwgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIGJlCioJCQkJdGhpcyBuZXcgcHJpb3JpdHkgdmFsdWUuCioJCQlQUklfT1ZFUlJJREVfUVVFVUUgLQoqCQkJCVByaW9yaXR5IGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFNBIChpbiB0aGUgQVRVIHRhYmxlKSBpcyB1c2VkCioJCQkJdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgUVByaSAocXVldWUgcHJpb3JpdHkpLgoqCQkJCVFQcmkgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIG1hcCB0aGUgZnJhbWUgdG8gb25lIG9mIHRoZSBlZ3Jlc3MKKgkJCQlxdWV1ZXMgaW5zaWRlIHRoZSBzd2l0Y2guCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfUFJJX09WRVJSSURFIHR5cGUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJUFJJX09WRVJSSURFX0ZSQU1FIGFuZCBQUklfT1ZFUlJJREVfUVVFVUUgbW9kZXMgYXJlIHN1cHBvcnRlZCBvbmx5IG9uCioJCWNlcnRhaW4gc3dpdGNoIGRldmljZS4gUGxlYXNlIHJlZmVyIHRvIHRoZSBkZXZpY2UgZGF0YXNoZWV0LgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0U0FQcmlPdmVycmlkZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfUFJJX09WRVJSSURFCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0REFQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCURBIFByaW9yaXR5IE92ZXJyaWRlLiBUaGUgZm9sbG93aW5nIG1vZGUgaXMgc3VwcG9ydGVkOgoqCQkJUFJJX09WRVJSSURFX05PTkUgLQoqCQkJCU5vcm1hbCBmcmFtZSBwcmlvcml0eSBwcm9jZXNzaW5nIG9jY3Vycy4KKgkJCVBSSV9PVkVSUklERV9GUkFNRSAtCioJCQkJUHJpb3JpdHkgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgREEgKGluIHRoZSBBVFUgdGFibGUpIGlzIHVzZWQKKgkJCQl0byBvdmVyd2l0ZSB0aGUgZnJhbWUncyBGUHJpIChmcmFtZSBwcmlvcml0eSkuCioJCQkJSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCwgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIGJlCioJCQkJdGhpcyBuZXcgcHJpb3JpdHkgdmFsdWUuCioJCQlQUklfT1ZFUlJJREVfUVVFVUUgLQoqCQkJCVByaW9yaXR5IGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIERBIChpbiB0aGUgQVRVIHRhYmxlKSBpcyB1c2VkCioJCQkJdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgUVByaSAocXVldWUgcHJpb3JpdHkpLgoqCQkJCVFQcmkgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIG1hcCB0aGUgZnJhbWUgdG8gb25lIG9mIHRoZSBlZ3Jlc3MKKgkJCQlxdWV1ZXMgaW5zaWRlIHRoZSBzd2l0Y2guCioJCQlQUklfT1ZFUlJJREVfRlJBTUVfUVVFVUUgLQoqCQkJCUJvdGggZnJhbWUgYW5kIHF1ZXVlIG92ZXJyaWRlcyB0YWtlIHBsYWNlIG9uIHRoZSBmcmFtZS4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfUFJJX09WRVJSSURFIHR5cGUKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgbW9kZSBpcyBpbnZhbGlkCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgkJUFJJX09WRVJSSURFX0ZSQU1FIGFuZCBQUklfT1ZFUlJJREVfUVVFVUUgbW9kZXMgYXJlIHN1cHBvcnRlZCBvbmx5IG9uCioJCWNlcnRhaW4gc3dpdGNoIGRldmljZS4gUGxlYXNlIHJlZmVyIHRvIHRoZSBkZXZpY2UgZGF0YXNoZWV0LgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0REFQcmlPdmVycmlkZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfUFJJX09WRVJSSURFCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXREQVByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKgkJREEgUHJpb3JpdHkgT3ZlcnJpZGUuIFRoZSBmb2xsb3dpbmcgbW9kZSBpcyBzdXBwb3J0ZWQ6CioJCQlQUklfT1ZFUlJJREVfTk9ORSAtCioJCQkJTm9ybWFsIGZyYW1lIHByaW9yaXR5IHByb2Nlc3Npbmcgb2NjdXJzLgoqCQkJUFJJX09WRVJSSURFX0ZSQU1FIC0KKgkJCQlQcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBEQSAoaW4gdGhlIEFUVSB0YWJsZSkgaXMgdXNlZAoqCQkJCXRvIG92ZXJ3aXRlIHRoZSBmcmFtZSdzIEZQcmkgKGZyYW1lIHByaW9yaXR5KS4KKgkJCQlJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkLCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgYmUKKgkJCQl0aGlzIG5ldyBwcmlvcml0eSB2YWx1ZS4KKgkJCVBSSV9PVkVSUklERV9RVUVVRSAtCioJCQkJUHJpb3JpdHkgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgREEgKGluIHRoZSBBVFUgdGFibGUpIGlzIHVzZWQKKgkJCQl0byBvdmVyd2l0ZSB0aGUgZnJhbWUncyBRUHJpIChxdWV1ZSBwcmlvcml0eSkuCioJCQkJUVByaSBpcyB1c2VkIGludGVybmFsbHkgdG8gbWFwIHRoZSBmcmFtZSB0byBvbmUgb2YgdGhlIGVncmVzcwoqCQkJCXF1ZXVlcyBpbnNpZGUgdGhlIHN3aXRjaC4KKgkJCVBSSV9PVkVSUklERV9GUkFNRV9RVUVVRSAtCioJCQkJQm90aCBmcmFtZSBhbmQgcXVldWUgb3ZlcnJpZGVzIHRha2UgcGxhY2Ugb24gdGhlIGZyYW1lLgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1BSSV9PVkVSUklERSB0eXBlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCVBSSV9PVkVSUklERV9GUkFNRSBhbmQgUFJJX09WRVJSSURFX1FVRVVFIG1vZGVzIGFyZSBzdXBwb3J0ZWQgb25seSBvbgoqCQljZXJ0YWluIHN3aXRjaCBkZXZpY2UuIFBsZWFzZSByZWZlciB0byB0aGUgZGV2aWNlIGRhdGFzaGVldC4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldERBUHJpT3ZlcnJpZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX1BSSV9PVkVSUklERQkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldENQVVBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBDUFUgUG9ydCBudW1iZXIuIFdoZW4gU25vb3BpbmcgaXMgZW5hYmxlZCBvbiB0aGlzIHBvcnQKKgkJb3Igd2hlbiB0aGlzIHBvcnQgaXMgY29uZmlndXJlZCBhcyBhbiBJbnRlcnN3aXRjaCBQb3J0IGFuZCBpdCByZWNlaXZlcyBhIAoqCQlUb19DUFUgZnJhbWUsIHRoZSBzd2l0Y2ggbmVlZHMgdG8ga25vdyB3aGF0IHBvcnQgb24gdGhpcyBkZXZpY2UgdGhlIGZyYW1lIAoqCQlzaG91bGQgZWdyZXNzLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCWNwdVBvcnQgLSBDUFUgUG9ydCBudW1iZXIgb3IgaW50ZXJzd2l0Y2ggcG9ydCB3aGVyZSBDUFUgUG9ydCBpcyBjb25uZWN0ZWQKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0Q1BVUG9ydAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfTFBPUlQgCWNwdVBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldENQVVBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBDUFUgTG9naWNhbCBQb3J0CioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQljcHVQb3J0IC0gQ1BVIFBvcnQncyBsb2dpY2FsIG51bWJlcgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0Q1BVUG9ydAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfTFBPUlQgCSpjcHVMUG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0TG9ja2VkUG9ydAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIExvY2tlZFBvcnQuIFdoZW4gaXQncyBzZXQgdG8gb25lLCBDUFUgZGlyZWN0ZWQgCioJCWxlYXJuaW5nIGZvciA4MDIuMXggTUFDIGF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQgb24gdGhpcyBwb3J0LiBJbiB0aGlzCioJCW1vZGUsIGFuIEFUVSBNaXNzIFZpb2xhdGlvbiBpbnRlcnJ1cHQgd2lsbCBvY2N1ciB3aGVuIGEgbmV3IFNBIGFkZHJlc3MKKgkJaXMgcmVjZWl2ZWQgaW4gYSBmcmFtZSBvbiB0aGlzIHBvcnQuIEF1dG9tYXRpY2FsbHkgU0EgbGVhcm5pbmcgYW5kIAoqCQlyZWZyZXNoaW5nIGlzIGRpc2FibGVkIGluIHRoaXMgbW9kZS4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgTG9ja2VkIFBvcnQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRMb2NrZWRQb3J0CigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQsCglJTiBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRMb2NrZWRQb3J0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgTG9ja2VkIFBvcnQgbW9kZSBmb3IgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgIC0gR1RfVFJVRSBpZiBMb2NrZWRQb3J0LCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldExvY2tlZFBvcnQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTCAgCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRJZ25vcmVXcm9uZ0RhdGEKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBJZ25vcmUgV3JvbmcgRGF0YS4gSWYgdGhlIGZyYW1lJ3MgU0EgYWRkcmVzcyBpcyBmb3VuZCAKKgkJaW4gdGhlIGRhdGFiYXNlIGFuZCBpZiB0aGUgZW50cnkgaXMgJ3N0YXRpYycgb3IgaWYgdGhlIHBvcnQgaXMgJ2xvY2tlZCcKKgkJdGhlIHNvdXJjZSBwb3J0J3MgYml0IGlzIGNoZWNrZWQgdG8gaW5zdXJlIHRoZSBTQSBoYXMgYmVlbiBhc3NpZ25lZCB0byAKKgkJdGhpcyBwb3J0LiBJZiB0aGUgU0EgaXMgTk9UIGFzc2lnbmVkIHRvIHRoaXMgcG9ydCwgaXQgaXMgY29uc2lkZXJlZCBhbiAKKgkJQVRVIE1lbWJlciBWaW9sYXRpb24uIElmIHRoZSBJZ25vcmVXcm9uZ0RhdGEgaXMgc2V0IHRvIEdUX0ZBTFNFLCBhbiBBVFUKKgkJTWVtYmVyIFZpb2xhdGlvbiBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQuIElmIGl0J3Mgc2V0IHRvIEdUX1RSVUUsCioJCXRoZSBBVFUgTWVtYmVyIFZpb2xhdGlvbiBlcnJvciB3aWxsIGJlIG1hc2tlZCBhbmQgaWdub3JlZC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgSWdub3JlV3JvbmdEYXRhLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0SWdub3JlV3JvbmdEYXRhCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQJCXBvcnQsCglJTiBHVF9CT09MCQltb2RlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0SWdub3JlV3JvbmdEYXRhCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgSWdub3JlIFdyb25nIERhdGEgbW9kZSBmb3IgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgIC0gR1RfVFJVRSBpZiBJZ25vcmVXcm9uZ0RhdGEsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0SWdub3JlV3JvbmdEYXRhCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wgCSptb2RlCik7CgoKLyogZ3RQb3J0UmF0ZUN0cmwuYyAqLwoKLyogZ3RQb3J0Um1vbi5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0dldFBvcnRDb3VudGVyMgoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIGEgc3BlY2lmaWMgY291bnRlciBvZiB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCWNvdW50ZXIgLSB0aGUgY291bnRlciB3aGljaCB3aWxsIGJlIHJlYWQKKgoqIE9VVFBVVFM6CioJCXN0YXRzRGF0YSAtIHBvaW50cyB0byAzMmJpdCBkYXRhIHN0b3JhZ2UgZm9yIHRoZSBNSUIgY291bnRlcgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgkJVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBHaWdhYml0IFN3aXRjaCBvbmx5CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdGF0c0dldFBvcnRDb3VudGVyMgooCglJTiAgR1RfUURfREVWCQkqZGV2LAoJSU4gIEdUX0xQT1JUCQlwb3J0LAoJSU4gIEdUX1NUQVRTX0NPVU5URVJTMgljb3VudGVyLAoJT1VUIEdUX1UzMgkJCSpzdGF0c0RhdGEKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0dldFBvcnRBbGxDb3VudGVyczIKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBhbGwgY291bnRlcnMgb2YgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdHNDb3VudGVyU2V0IC0gcG9pbnRzIHRvIEdUX1NUQVRTX0NPVU5URVJfU0VUIGZvciB0aGUgTUlCIGNvdW50ZXJzCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCQlUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIEdpZ2FiaXQgU3dpdGNoIG9ubHkKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0YXRzR2V0UG9ydEFsbENvdW50ZXJzMgooCglJTiAgR1RfUURfREVWCQkqZGV2LAoJSU4gIEdUX0xQT1JUCQlwb3J0LAoJT1VUIEdUX1NUQVRTX0NPVU5URVJfU0VUMgkqc3RhdHNDb3VudGVyU2V0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0dldEhpc3RvZ3JhbU1vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgSGlzdG9ncmFtIENvdW50ZXJzIE1vZGUuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gSGlzdG9ncmFtIE1vZGUgKEdUX0NPVU5UX1JYX09OTFksIEdUX0NPVU5UX1RYX09OTFksIAoqCQkJCQlhbmQgR1RfQ09VTlRfUlhfVFgpCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0JBRF9QQVJBTSAgICAtIG9uIGJhZCBwYXJhbWV0ZXIKKgkJR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCVRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgR2lnYWJpdCBTd2l0Y2ggb25seQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3RhdHNHZXRIaXN0b2dyYW1Nb2RlCigKCUlOICBHVF9RRF9ERVYJCQkJKmRldiwKCU9VVCBHVF9ISVNUT0dSQU1fTU9ERQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3RhdHNTZXRIaXN0b2dyYW1Nb2RlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgdGhlIEhpc3RvZ3JhbSBDb3VudGVycyBNb2RlLgoqCiogSU5QVVRTOgoqCQltb2RlIC0gSGlzdG9ncmFtIE1vZGUgKEdUX0NPVU5UX1JYX09OTFksIEdUX0NPVU5UX1RYX09OTFksIAoqCQkJCQlhbmQgR1RfQ09VTlRfUlhfVFgpCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCioJCUdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3RhdHNTZXRIaXN0b2dyYW1Nb2RlCigKCUlOIEdUX1FEX0RFViAJCQkJKmRldiwKCUlOIEdUX0hJU1RPR1JBTV9NT0RFCQltb2RlCik7CgoKLyogZ3RQb3J0U3RhdHVzLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBhdXNlRW4KKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIGxpbmsgcGF1c2Ugc3RhdGUuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBmb3IgZW5hYmxlIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlJZiBzZXQgTUFDIFBhdXNlIChmb3IgRnVsbCBEdXBsZXggZmxvdyBjb250cm9sKSBpcyBpbXBsZW1lbnRlZCBpbiB0aGUKKgkJbGluayBwYXJ0bmVyIGFuZCBpbiBNeVBhdXNlCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQYXVzZUVuCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wgCSpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0SGRGbG93CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpdmVzIHRoZSBoYWxmIGR1cGxleCBmbG93IGNvbnRyb2wgdmFsdWUuCioJCUlmIHNldCwgSGFsZiBEdXBsZXggYmFjayBwcmVzc3VyZSB3aWxsIGJlIHVzZWQgb24gdGhpcyBwb3J0IGlmIHRoaXMgcG9ydAoqCQlpcyBpbiBhIGhhbGYgZHVwbGV4IG1vZGUuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBmb3IgZW5hYmxlIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0SGRGbG93CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MIAkqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBIWURldGVjdAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIFBIWSBkZXRlY3Rpb24uCioJCUlmIHNldCwgQW4gODAyLjMgUEhZIGlzIGF0dGFjaGVkIHRvIHRoaXMgcG9ydC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBHVF9UUlVFIGlmIGNvbm5lY3RlZCBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UEhZRGV0ZWN0CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MIAkqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBIWURldGVjdAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIFBIWURldGVjdCBiaXQgd2hpY2ggbWFrZSBQUFUgY2hhbmdlIGl0cyBwb2xsaW5nLgoqCQlQUFUncyBwb29sIHJvdXRpbmUgdXNlcyB0aGVzZSBiaXRzIHRvIGRldGVybWluZSB3aGljaCBwb3J0J3MgdG8gcG9sbAoqCQlQSFlzIG9uIGZvciBMaW5rLCBEdXBsZXgsIFNwZWVkLCBhbmQgRmxvdyBDb250cm9sLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCXN0YXRlIC0gR1RfVFJVRSBvciBHVF9GQUxTRQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBpZiBnc3lzR2V0UFBVU3RhdGUgcmV0dXJucyAKKgkJUFBVX1NUQVRFX0FDVElWRS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFBIWURldGVjdAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglJTiAgR1RfQk9PTCAgCXN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRTcGVlZE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgcG9ydCBzcGVlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSBHVF9QT1JUX1NQRUVEX01PREUgdHlwZS4KKgkJCQkJKFBPUlRfU1BFRURfMTAwMF9NQlBTLFBPUlRfU1BFRURfMTAwX01CUFMsIG9yIFBPUlRfU1BFRURfMTBfTUJQUykKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRTcGVlZE1vZGUKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUICBwb3J0LAogICAgT1VUIEdUX1BPUlRfU1BFRURfTU9ERSAgICpzcGVlZAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0SGlnaEVycm9yUmF0ZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgUENTIEhpZ2ggRXJyb3IgUmF0ZS4KKgkJVGhpcyByb3V0aW5lIHJldHVybnMgR1RfVFJVRSBpZiB0aGUgcmF0ZSBvZiBpbnZhbGlkIGNvZGUgZ3JvdXBzIHNlZW4gYnkKKgkJUENTIGhhcyBleGNlZWRlZCAxMCB0byB0aGUgcG93ZXIgb2YgLTExLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgb3IgR1RfRkFMU0UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEhpZ2hFcnJvclJhdGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFR4UGF1c2VkCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpdmVzIFRyYW5zbWl0IFBhdXNlIHN0YXRlLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgaWYgUnggTUFDIHJlY2VpdmVzIGEgUEFVU0UgZnJhbWUgd2l0aCBub25lLXplcm8gUHVhc2UgVGltZQoqCQkJCSAgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0VHhQYXVzZWQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqc3RhdGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRGbG93Q3RybAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaXZlcyBGbG93IGNvbnRyb2wgc3RhdGUuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBpZiBSeCBNQUMgZGV0ZXJtaW5lcyB0aGF0IG5vIG1vcmUgZGF0YSBzaG91bGQgYmUgCioJCQkJCWVudGVyaW5nIHRoaXMgcG9ydC4KKgkJCQkgIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEZsb3dDdHJsCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRDX0R1cGxleAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaXZlcyBQb3J0IDkncyBkdXBsZXggY29uZmlndXJhdGlvbiBtb2RlIGRldGVybWluZWQKKgkJYXQgcmVzZXQuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBpZiBjb25maWd1cmVkIGFzIEZ1bGwgZHVwbGV4IG9wZXJhdGlvbgoqCQkJCSAgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlSZXR1cm4gdmFsdWUgaXMgdmFsaWQgb25seSBpZiB0aGUgZ2l2ZW4gcG9ydCBpcyA5LgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0Q19EdXBsZXgKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldENfTW9kZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaXZlcyBwb3J0J3MgaW50ZXJmYWNlIHR5cGUgY29uZmlndXJhdGlvbiBtb2RlIAoqCQlkZXRlcm1pbmVkIGF0IHJlc2V0LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIG9uZSBvZiB2YWx1ZSBpbiBHVF9QT1JUX0NPTkZJR19NT0RFIGVudW0gdHlwZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlSZXR1cm4gdmFsdWUgaXMgdmFsaWQgb25seSBpZiB0aGUgZ2l2ZW4gcG9ydCBpcyA5LgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0Q19Nb2RlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9QT1JUX0NPTkZJR19NT0RFICAgKnN0YXRlCik7CgoKLyogZ3RTeXNDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFBQVUVuCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgUGh5IFBvbGxpbmcgVW5pdC4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSBQUFUsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRQUFVFbgooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wgCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0UFBVRW4KKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0IHRoZSBQUFUgc3RhdGUuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgaWYgUFBVIGlzIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqCQlHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFBQVUVuCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9CT09MICAJKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRDYXNjYWRlUG9ydAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIENhc2NhZGUgUG9ydCBudW1iZXIuCioJCUluIG11bHRpY2hpcCBzeXN0ZW1zIGZyYW1lcyBjb21pbmcgZnJvbSBhIENQVSBuZWVkIHRvIGtub3cgd2hlbiB0aGV5CioJCWhhdmUgcmVhY2hlZCB0aGVpciBkZXN0aW5hdGlvbiBjaGlwLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gQ2FzY2FkZSBQb3J0CioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Q2FzY2FkZVBvcnQKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Q2FzY2FkZVBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBDYXNjYWRlIFBvcnQgbnVtYmVyLgoqCQlJbiBtdWx0aWNoaXAgc3lzdGVtcyBmcmFtZXMgY29taW5nIGZyb20gYSBDUFUgbmVlZCB0byBrbm93IHdoZW4gdGhleQoqCQloYXZlIHJlYWNoZWQgdGhlaXIgZGVzdGluYXRpb24gY2hpcC4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCXBvcnQgLSBDYXNjYWRlIFBvcnQKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldENhc2NhZGVQb3J0CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9MUE9SVCAJKnBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldERldmljZU51bWJlcgoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIERldmljZSBOdW1iZXIuCioJCUluIG11bHRpY2hpcCBzeXN0ZW1zIGZyYW1lcyBjb21pbmcgZnJvbSBhIENQVSBuZWVkIHRvIGtub3cgd2hlbiB0aGV5CioJCWhhdmUgcmVhY2hlZCB0aGVpciBkZXN0aW5hdGlvbiBjaGlwLiBGcm9tIENQVSBmcmFtZXMgd2hvc2UgRGV2X051bQoqCQlmaWVsZG1hdGNoZXMgdGhlc2UgYml0cyBoYXZlIHJlYWNoZWR0aGVpciBkZXN0aW5hdGlvbiBjaGlwIGFuZCBhcmUgc2VudAoqCQlvdXQgdGhpcyBjaGlwIHVzaW5nIHRoZSBwb3J0IG51bWJlciBpbmRpY2F0ZWQgaW4gdGhlIGZyYW1lJ3MgVHJnX1BvcnQgCioJCWZpZWxkLgoqCiogSU5QVVRTOgoqCQlkZXZOdW0gLSBEZXZpY2UgTnVtYmVyICgwIH4gMzEpCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0RGV2aWNlTnVtYmVyCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfVTMyICAJCWRldk51bQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0RGV2aWNlTnVtYmVyCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgRGV2aWNlIE51bWJlci4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWRldk51bSAtIERldmljZSBOdW1iZXIgKDAgfiAzMSkKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldERldmljZU51bWJlcgooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfVTMyICAJKmRldk51bQopOwoKCi8qIGd0UENTQ3RybC5jICovCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0Q29tbWFEZXQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIENvbW1hIERldGVjdGlvbiBzdGF0dXMgaW4gUENTCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBmb3IgQ29tbWEgRGV0ZWN0ZWQgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc0dldENvbW1hRGV0CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXRTeW5jT0sKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIFN5bk9LIGJpdC4gSXQgaXMgc2V0IHRvIGEgb25lIHdoZW4gdGhlIFBDUyBoYXMKKgkJZGV0ZWN0ZWQgYSBmZXcgY29tbWEgcGF0dGVybnMgYW5kIGlzIHN5bmNocm9uaXplZCB3aXRoIGl0cyBwZWVyIFBDUyAKKgkJbGF5ZXIuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBpZiBzeW5jaHJvbml6ZWQgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc0dldFN5bmNPSwooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0U3luY0ZhaWwKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIFN5bkZhaWwgYml0LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgaWYgc3luY2hyb25pemFpb24gZmFpbGVkIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRTeW5jRmFpbAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0QW5CeXBhc3NlZAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgSW5iYW5kIEF1dG8tTmVnb3RpYXRpb24gYnlwYXNzIHN0YXR1cy4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBHVF9UUlVFIGlmIEFOIGlzIGJ5cGFzc2VkIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRBbkJ5cGFzc2VkCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXRBbkJ5cGFzc01vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIEVuYWJsZSBtb2RlIG9mIEluYmFuZCBBdXRvLU5lZ290aWF0aW9uIGJ5cGFzcy4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgaWYgQU4gYnlwYXNzIGlzIGVuYWJsZWQgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc0dldEFuQnlwYXNzTW9kZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NTZXRBbkJ5cGFzc01vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIEVuYWJsZSBtb2RlIG9mIEluYmFuZCBBdXRvLU5lZ290aWF0aW9uIGJ5cGFzcy4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgQU4gYnlwYXNzIG1vZGUgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc1NldEFuQnlwYXNzTW9kZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfQk9PTCAgCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldFBDU0FuRW4KKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIEVuYWJsZSBtb2RlIG9mIFBDUyBJbmJhbmQgQXV0by1OZWdvdGlhdGlvbi4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgaWYgUENTIEFOIGlzIGVuYWJsZWQgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc0dldFBDU0FuRW4KKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzU2V0UENTQW5FbgoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIEVuYWJsZSBtb2RlIG9mIFBDUyBJbmJhbmQgQXV0by1OZWdvdGlhdGlvbi4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgUENTIEFOIG1vZGUgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc1NldFBDU0FuRW4KKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wgIAltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NTZXRSZXN0YXJ0UENTQW4KKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmVzdGFydHMgUENTIEluYmFuZCBBdXRvLU5lZ290aWF0aW9uLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc1NldFJlc3RhcnRQQ1NBbgooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXRQQ1NBbkRvbmUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIGNvbXBsZXRpb24gaW5mb3JtYXRpb24gb2YgUENTIEF1dG8tTmVnb3RpYXRpb24uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIGlmIFBDUyBBTiBpcyBkb25lIG9yIG5ldmVyIGRvbmUKKgkJCSAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0UENTQW5Eb25lCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc1NldExpbmtWYWx1ZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIExpbmsncyBmb3JjZSB2YWx1ZQoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCXN0YXRlIC0gR1RfVFJVRSB0byBmb3JjZSBsaW5rIHVwLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzU2V0TGlua1ZhbHVlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQsCglJTglHVF9CT09MCQlzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0TGlua1ZhbHVlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBMaW5rIFZhbHVlIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgRm9yY2luZyBMaW5rIAoqCQl1cCBvciBkb3duLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgaWYgTGluayBGb3JjZSB2YWx1ZSBpcyBvbmUgKGxpbmsgdXApCioJCQkgICAgIEdUX0ZBTFNFIG90aGVyd2lzZSAobGluayBkb3duKQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRMaW5rVmFsdWUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc1NldEZvcmNlZExpbmsKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZm9yY2VzIExpbmsuIElmIExpbmtWYWx1ZSBpcyBzZXQgdG8gb25lLCBjYWxsaW5nIHRoaXMgCioJCXJvdXRpbmUgd2l0aCBHVF9UUlVFIHdpbGwgZm9yY2UgTGluayB0byBiZSB1cC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlzdGF0ZSAtIEdUX1RSVUUgdG8gZm9yY2UgbGluayAodXAgb3IgZG93biksIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRGb3JjZWRMaW5rCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQsCglJTglHVF9CT09MCQlzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0Rm9yY2VkTGluawoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgRm9yY2VkIExpbmsgYml0CioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBpZiBGb3JjZWRMaW5rIGJpdCBpcyBvbmUsCioJCQkgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRGb3JjZWRMaW5rCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NTZXREcHhWYWx1ZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIER1cGxleCdzIEZvcmNlZCB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZQoqCQljYWxsZWQgcHJpb3IgdG8gZ3Bjc1NldEZvcmNlZERweC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlzdGF0ZSAtIEdUX1RSVUUgdG8gZm9yY2UgZnVsbCBkdXBsZXgsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXREcHhWYWx1ZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4JR1RfQk9PTAkJc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldERweFZhbHVlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBEdXBsZXgncyBGb3JjZWQgdmFsdWUKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBHVF9UUlVFIGlmIER1cGxleCdzIEZvcmNlZCB2YWx1ZSBpcyBzZXQgdG8gRnVsbCBkdXBsZXgsCioJCQkgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXREcHhWYWx1ZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzU2V0Rm9yY2VkRHB4CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGZvcmNlcyBkdXBsZXggbW9kZS4gSWYgRHB4VmFsdWUgaXMgc2V0IHRvIG9uZSwgY2FsbGluZyB0aGlzIAoqCQlyb3V0aW5lIHdpdGggR1RfVFJVRSB3aWxsIGZvcmNlIGR1cGxleCBtb2RlIHRvIGJlIGZ1bGwgZHVwbGV4LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCXN0YXRlIC0gR1RfVFJVRSB0byBmb3JjZSBkdXBsZXggbW9kZSwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc1NldEZvcmNlZERweAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4JR1RfQk9PTAkJc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldEZvcmNlZERweAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgRm9yY2VkIER1cGxleC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBHVF9UUlVFIGlmIEZvcmNlZERweCBiaXQgaXMgb25lLAoqCQkJICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0Rm9yY2VkRHB4CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NTZXRGb3JjZVNwZWVkCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGZvcmNlcyBzcGVlZC4gCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1BPUlRfRk9SQ0VEX1NQRUVEX01PREUgKDEwLCAxMDAsIDEwMDAsIG9yIE5vIFNwZWVkIEZvcmNlKQoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRGb3JjZVNwZWVkCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQsCglJTglHVF9QT1JUX0ZPUkNFRF9TUEVFRF9NT0RFICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXRGb3JjZVNwZWVkCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBGb3JjZSBTcGVlZCB2YWx1ZQoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1BPUlRfRk9SQ0VEX1NQRUVEX01PREUgKDEwLCAxMDAsIDEwMDAsIG9yIG5vIGZvcmNlIHNwZWVkKQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRGb3JjZVNwZWVkCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9QT1JUX0ZPUkNFRF9TUEVFRF9NT0RFICAgKm1vZGUKKTsKCgoKLyogZ3RRb3NNYXAuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0VGFnUmVtYXAKKgoqIERFU0NSSVBUSU9OOgoqCQlHZXRzIHRoZSByZW1hcHBlZCBwcmlvcml0eSB2YWx1ZSBmb3IgYSBzcGVjaWZpYyA4MDIuMXAgcHJpb3JpdHkgb24gYQoqCQlnaXZlbiBwb3J0LgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlwcmkgICAtIDgwMi4xcCBwcmlvcml0eQoqCiogT1VUUFVUUzoKKgkJcmVtYXBwZWRQcmkgLSByZW1hcHBlZCBQcmlvcml0eQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldFRhZ1JlbWFwCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCUlOICBHVF9VOCAgICAJcHJpLAoJT1VUIEdUX1U4ICAgCSpyZW1hcHBlZFByaQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0VGFnUmVtYXAKKgoqIERFU0NSSVBUSU9OOgoqCQlTZXRzIHRoZSByZW1hcHBlZCBwcmlvcml0eSB2YWx1ZSBmb3IgYSBzcGVjaWZpYyA4MDIuMXAgcHJpb3JpdHkgb24gYQoqCQlnaXZlbiBwb3J0LgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlwcmkgICAtIDgwMi4xcCBwcmlvcml0eQoqCQlyZW1hcHBlZFByaSAtIHJlbWFwcGVkIFByaW9yaXR5CioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0VGFnUmVtYXAKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX1U4ICAgIAlwcmksCglJTiBHVF9VOCAgICAJcmVtYXBwZWRQcmkKKTsKCgovKiBndFN5c0NvbmZpZy5jICovCgovKiBndFN5c1N0YXR1cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRQUFVTdGF0ZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXQgdGhlIFBQVSBTdGF0ZS4gVGhlc2UgdHdvIGJpdHMgcmV0dXJuIAoqCQl0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgUFBVLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1BQVV9TVEFURQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCioJCUdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UFBVU3RhdGUKKAoJSU4gIEdUX1FEX0RFViAgIAkqZGV2LAoJT1VUIEdUX1BQVV9TVEFURQkqbW9kZQopOwoKCi8qIFByb3RvdHlwZXMgYWRkZWQgZm9yIDg4RTYwOTMgKi8KCgovKiBndEJyZ0ZkYi5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRMZWFybjJBbGwKKgoqIERFU0NSSVBUSU9OOgoqCQlXaGVuIG1vcmUgdGhhbiBvbmUgTWFydmVsbCBkZXZpY2UgaXMgdXNlZCB0byBmb3JtIGEgc2luZ2xlICdzd2l0Y2gnLCBpdAoqCQltYXkgYmUgZGVzaXJhYmxlIGZvciBhbGwgZGV2aWNlcyBpbiB0aGUgJ3N3aXRjaCcgdG8gbGVhcm4gYW55IGFkZHJlc3MgdGhpcyAKKgkJZGV2aWNlIGxlYXJucy4gV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUgYWxsIG90aGVyIGRldmljZXMgaW4gdGhlIAoqCQknc3dpdGNoJyBsZWFybiB0aGUgc2FtZSBhZGRyZXNzZXMgdGhpcyBkZXZpY2UgbGVhcm5zLiBXaGVuIHRoaXMgYml0IGlzIAoqCQljbGVhcmVkIHRvIGEgemVybywgb25seSB0aGUgZGV2aWNlcyB0aGF0IGFjdHVhbGx5IHJlY2VpdmUgZnJhbWVzIHdpbGwgbGVhcm4KKgkJZnJvbSB0aG9zZSBmcmFtZXMuIFRoaXMgbW9kZSB0eXBpY2FsbHkgc3VwcG9ydHMgbW9yZSBhY3RpdmUgTUFDIGFkZHJlc3NlcyAKKgkJYXQgb25lIHRpbWUgYXMgZWFjaCBkZXZpY2UgaW4gdGhlIHN3aXRjaCBkb2VzIG5vdCBuZWVkIHRvIGxlYXJuIGFkZHJlc3NlcyAKKgkJaXQgbWF5IG5lcnZlciB1c2UuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQltb2RlICAtIEdUX1RSVUUgaWYgTGVhcm4yQWxsIGlzIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldExlYXJuMkFsbAooCglJTiAgR1RfUURfREVWICAgICpkZXYsCglPVVQgR1RfQk9PTCAJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYlNldExlYXJuMkFsbAoqCiogREVTQ1JJUFRJT046CioJCUVuYWJsZSBvciBkaXNhYmxlIExlYXJuMkFsbCBtb2RlLgoqCiogSU5QVVRTOgoqCQltb2RlIC0gR1RfVFJVRSB0byBzZXQgTGVhcm4yQWxsLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiU2V0TGVhcm4yQWxsCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiUmVtb3ZlUG9ydAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGRlYXNzb2NpYWdlcyBhbGwgb3IgdW5ibG9ja2VkIGFkZHJlc3NlcyBmcm9tIGEgcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICBtb3ZlQ21kIC0gdGhlIG1vdmUgb3BlcmF0aW9uIHR5cGUuCiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiUmVtb3ZlUG9ydAooCglJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX01PVkVfQ01EIAltb3ZlQ21kLAogICAgSU4gR1RfTFBPUlQJCXBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYlJlbW92ZVBvcnRJbkRCCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZGVhc3NvY2lhZ2VzIGFsbCBvciB1bmJsb2NrZWQgYWRkcmVzc2VzIGZyb20gYSBwb3J0IGluIHRoZQoqICAgICAgIHBhcnRpY3VsYXIgQVRVIERhdGFiYXNlIChEQk51bSkuCioKKiBJTlBVVFM6CiogICAgICAgbW92ZUNtZCAgLSB0aGUgbW92ZSBvcGVyYXRpb24gdHlwZS4KKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCURCTnVtCSAtIEFUVSBNQUMgQWRkcmVzcyBEYXRhYmFzZSBOdW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYlJlbW92ZVBvcnRJbkRCCigKCUlOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfTU9WRV9DTUQgCW1vdmVDbWQsCiAgICBJTiBHVF9MUE9SVAkJcG9ydCwKCUlOIEdUX1UzMiAJCURCTnVtCik7CgoKCi8qIGd0QnJnU3RwLmMgKi8KCi8qIGd0QnJnVmxhbi5jICovCgovKiBndEJyZ1Z0dS5jICovCgovKiBndEV2ZW50cy5jICovCgovKiBndFBDU0N0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0UENTTGluawoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgTGluayB1cCBzdGF0dXMgaW4gUENTCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBmb3IgQ29tbWEgRGV0ZWN0ZWQgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc0dldFBDU0xpbmsKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc1NldEZDVmFsdWUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBGbG93IENvbnRyb2wncyBmb3JjZSB2YWx1ZQoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCXN0YXRlIC0gR1RfVFJVRSB0byBmb3JjZSBmbG93IGNvbnRyb2wgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc1NldEZDVmFsdWUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOCUdUX0JPT0wJCXN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXRGQ1ZhbHVlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBGbG93IENvbnRyb2wgVmFsdWUgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBGb3JjaW5nIAoqCQlGbG93IENvbnRyb2wgZW5hYmxlZCBvciBkaXNhYmxlZC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBHVF9UUlVFIGlmIEZDIEZvcmNlIHZhbHVlIGlzIG9uZSAoZmxvdyBjb250cm9sIGVuYWJsZWQpCioJCQkgICAgIEdUX0ZBTFNFIG90aGVyd2lzZSAoZmxvdyBjb250cm9sIGRpc2FibGVkKQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRGQ1ZhbHVlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NTZXRGb3JjZWRGQwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBmb3JjZXMgRmxvdyBDb250cm9sLiBJZiBGQ1ZhbHVlIGlzIHNldCB0byBvbmUsIGNhbGxpbmcgdGhpcyAKKgkJcm91dGluZSB3aXRoIEdUX1RSVUUgd2lsbCBmb3JjZSBGbG93IENvbnRyb2wgdG8gYmUgZW5hYmxlZC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlzdGF0ZSAtIEdUX1RSVUUgdG8gZm9yY2UgZmxvdyBjb250cm9sIChlbmFibGUgb3IgZGlzYWJsZSksIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRGb3JjZWRGQwooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4JR1RfQk9PTAkJc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldEZvcmNlZEZDCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBGb3JjZWQgRmxvdyBDb250cm9sIGJpdAoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgaWYgRm9yY2VkRkMgYml0IGlzIG9uZSwKKgkJCSAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc0dldEZvcmNlZEZDCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgoKCi8qIGd0UGh5Q3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQYWdlZFBoeVJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJlYWRzIHBoeSByZWdpc3RlciBvZiB0aGUgZ2l2ZW4gcGFnZQoqCiogSU5QVVRTOgoqCQlwb3J0IAktIHBvcnQgdG8gYmUgcmVhZAoqCQlyZWdBZGRyCS0gcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKKgkJcGFnZQktIHBhZ2UgbnVtYmVyIHRvIGJlIHJlYWQKKgoqIE9VVFBVVFM6CioJCWRhdGEJLSB2YWx1ZSBvZiB0aGUgcmVhZCByZWdpc3RlcgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIAkJCS0gaWYgcmVhZCBzdWNjZXNzZWQKKiAgICAgICBHVF9GQUlMICAgCQkJLSBpZiByZWFkIGZhaWxlZAoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFBhZ2VkUGh5UmVnCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9VMzIgIHBvcnQsCglJTglHVF9VMzIgIHJlZ0FkZHIsCglJTglHVF9VMzIgIHBhZ2UsCiAgICBPVVQgR1RfVTE2KiBkYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQYWdlZFBoeVJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyBhIHZhbHVlIHRvIHBoeSByZWdpc3RlciBvZiB0aGUgZ2l2ZW4gcGFnZQoqCiogSU5QVVRTOgoqCQlwb3J0IAktIHBvcnQgdG8gYmUgcmVhZAoqCQlyZWdBZGRyCS0gcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKKgkJcGFnZQktIHBhZ2UgbnVtYmVyIHRvIGJlIHJlYWQKKgkJZGF0YQktIHZhbHVlIG9mIHRoZSByZWFkIHJlZ2lzdGVyCioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgCQkJLSBpZiByZWFkIHN1Y2Nlc3NlZAoqICAgICAgIEdUX0ZBSUwgICAJCQktIGlmIHJlYWQgZmFpbGVkCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0UGFnZWRQaHlSZWcKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX1UzMiBwb3J0LAoJSU4JR1RfVTMyIHJlZ0FkZHIsCglJTglHVF9VMzIgcGFnZSwKICAgIElOICBHVF9VMTYgZGF0YQopOwoKCi8qIGd0UG9ydEN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0VXNlQ29yZVRhZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldCB0aGUgVXNlQ29yZVRhZyBiaXQgaW4gUG9ydCBDb250cm9sIFJlZ2lzdGVyLgoqCQkJV2hlbiB0aGlzIGJpdCBpcyBjbGVhcmVkIHRvIGEgemVybywgaW5ncmVzc2luZyBmcmFtZXMgYXJlIGNvbnNpZGVyZWQKKgkJCVRhZ2dlZCBpZiB0aGUgMTYtYml0cyBmb2xsb3dpbmcgdGhlIGZyYW1lJ3MgU291cmNlIEFkZHJlc3MgaXMgMHg4MTAwLgoqCQkJV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUsIGluZ3Jlc3NpbmcgZnJhbWVzIGFyZSBjb25zaWRlcmVkIFRhZ2dlZAoqCQkJaWYgdGhlIDE2LWJpdHMgZm9sbG93aW5nIHRoZSBmcmFtZSdzIFNvdXJjZSBBZGRyZXNzIGlzIGVxdWFsIHRvIHRoZSAKKgkJCUNvcmVUYWcgcmVnaXN0ZXIgdmFsdWUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBmb3JjZSAtIEdUX1RSVUUgZm9yIGZvcmNlIGZsb3cgY29udHJvbCAgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0VXNlQ29yZVRhZwooCiAgICBJTiBHVF9RRF9ERVYgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgIHBvcnQsCiAgICBJTiBHVF9CT09MICAgIGZvcmNlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRVc2VDb3JlVGFnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBVc2UgQ29yZSBUYWcgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgZm9yY2UgLSBHVF9UUlVFIGZvciB1c2luZyBjb3JlIHRhZyByZWdpc3RlciAgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0VXNlQ29yZVRhZwooCiAgICBJTiAgR1RfUURfREVWICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICpmb3JjZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RGlzY2FyZFRhZ2dlZAoqCiogREVTQ1JJUFRJT046CioJCVdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lLCBhbGwgbm9uLU1HTVQgZnJhbWVzIHRoYXQgYXJlIHByb2Nlc3NlZCBhcyAKKgkJVGFnZ2VkIHdpbGwgYmUgZGlzY2FyZGVkIGFzIHRoZXkgZW50ZXIgdGhpcyBzd2l0Y2ggcG9ydC4gUHJpb3JpdHkgb25seSAKKgkJdGFnZ2VkIGZyYW1lcyAod2l0aCBhIFZJRCBvZiAweDAwMCkgYXJlIGNvbnNpZGVyZWQgdGFnZ2VkLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIHRvIGRpc2NhcmQgdGFnZ2VkIGZyYW1lLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RGlzY2FyZFRhZ2dlZAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RGlzY2FyZFRhZ2dlZAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIERpc2NhcmRUYWdnZWQgYml0IGZvciB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAgLSBHVF9UUlVFIGlmIERpc2NhcmRUYWdnZWQgYml0IGlzIHNldCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXREaXNjYXJkVGFnZ2VkCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wgCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXREaXNjYXJkVW50YWdnZWQKKgoqIERFU0NSSVBUSU9OOgoqCQlXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgYWxsIG5vbi1NR01UIGZyYW1lcyB0aGF0IGFyZSBwcm9jZXNzZWQgYXMgCioJCVVudGFnZ2VkIHdpbGwgYmUgZGlzY2FyZGVkIGFzIHRoZXkgZW50ZXIgdGhpcyBzd2l0Y2ggcG9ydC4gUHJpb3JpdHkgb25seSAKKgkJdGFnZ2VkIGZyYW1lcyAod2l0aCBhIFZJRCBvZiAweDAwMCkgYXJlIGNvbnNpZGVyZWQgdGFnZ2VkLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIHRvIGRpc2NhcmQgdW50YWdnZWQgZnJhbWUsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXREaXNjYXJkVW50YWdnZWQKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldERpc2NhcmRVbnRhZ2dlZAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIERpc2NhcmRVbnRhZ2dlZCBiaXQgZm9yIHRoZSBnaXZlbiBwb3J0CioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlICAtIEdUX1RSVUUgaWYgRGlzY2FyZFVudGFnZ2VkIGJpdCBpcyBzZXQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0RGlzY2FyZFVudGFnZ2VkCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wgCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRNYXBEQQoqCiogREVTQ1JJUFRJT046CioJCVdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lLCBub3JtYWwgc3dpdGNoIG9wZXJhdGlvbiB3aWxsIG9jY3VyIHdoZXJlIGEgCioJCWZyYW1lJ3MgREEgYWRkcmVzcyBpcyB1c2VkIHRvIGRpcmVjdCB0aGUgZnJhbWUgb3V0IHRoZSBjb3JyZWN0IHBvcnQuCioJCVdoZW4gdGhpcyBiZSBpcyBjbGVhcmVkIHRvIGEgemVybywgdGhlIGZyYW1lIHdpbGwgYmUgc2VudCBvdXQgdGhlIHBvcnQocykgCioJCWRlZmluZWQgYnkgRm9yd2FyZFVua25vd24gYml0cyBvciB0aGUgRGVmYXVsdEZvcndhcmQgYml0cyBldmVuIGlmIHRoZSBEQSAKKgkJaXMgb3VuZCBpbiB0aGUgYWRkcmVzcyBkYXRhYmFzZS4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSB0byB1c2UgTWFwREEsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRNYXBEQQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0TWFwREEKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBNYXBEQSBiaXQgZm9yIHRoZSBnaXZlbiBwb3J0CioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlICAtIEdUX1RSVUUgaWYgTWFwREEgYml0IGlzIHNldCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRNYXBEQQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MIAkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RGVmYXVsdEZvcndhcmQKKgoqIERFU0NSSVBUSU9OOgoqCQlXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgbm9ybWFsIHN3aXRjaCBvcGVyYXRpb24gd2lsbCBvY2N1cnMgYW5kIAoqCQltdWx0aWNhc3QgZnJhbWVzIHdpdGggdW5rbm93biBEQSBhZGRyZXNzZXMgYXJlIGFsbG93ZWQgdG8gZWdyZXNzIG91dCB0aGlzIAoqCQlwb3J0IChhc3N1bWluZyB0aGUgVkxBTiBzZXR0aW5ncyBhbGxvdyB0aGUgZnJhbWUgdG8gZWdyZXNzIHRoaXMgcG9ydCB0b28pLgoqCQlXaGVuIHRoaXMgYmUgaXMgY2xlYXJlZCB0byBhIHplcm8sIG11bHRpY2FzdCBmcmFtZXMgd2l0aCB1bmtub3duIERBIAoqCQlhZGRyZXNzZXMgd2lsbCBub3QgZWdyZXNzIG91dCB0aGlzIHBvcnQuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgdG8gdXNlIERlZmF1bHRGb3J3YXJkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RGVmYXVsdEZvcndhcmQKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldERlZmF1bHRGb3J3YXJkCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgRGVmYXVsdEZvcndhcmQgYml0IGZvciB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAgLSBHVF9UUlVFIGlmIERlZmF1bHRGb3J3YXJkIGJpdCBpcyBzZXQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0RGVmYXVsdEZvcndhcmQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTCAJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEVncmVzc01vbml0b3JTb3VyY2UKKgoqIERFU0NSSVBUSU9OOgoqCQlXaGVuIHRoaXMgYmUgaXMgY2xlYXJlZCB0byBhIHplcm8sIG5vcm1hbCBuZXR3b3JrIHN3aXRjaGluZyBvY2N1cnMuCioJCVdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lLCBhbnkgZnJhbWUgdGhhdCBlZ3Jlc3NlcyBvdXQgdGhpcyBwb3J0IHdpbGwKKgkJYWxzbyBiZSBzZW50IHRvIHRoZSBFZ3Jlc3NNb25pdG9yRGVzdCBQb3J0CioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgdG8gc2V0IEVncmVzc01vbml0b3JTb3VyY2UsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRFZ3Jlc3NNb25pdG9yU291cmNlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQsCglJTiBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRFZ3Jlc3NNb25pdG9yU291cmNlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgRWdyZXNzTW9uaXRvclNvdXJjZSBiaXQgZm9yIHRoZSBnaXZlbiBwb3J0CioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlICAtIEdUX1RSVUUgaWYgRWdyZXNzTW9uaXRvclNvdXJjZSBiaXQgaXMgc2V0LCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEVncmVzc01vbml0b3JTb3VyY2UKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTCAJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEluZ3Jlc3NNb25pdG9yU291cmNlCioKKiBERVNDUklQVElPTjoKKgkJV2hlbiB0aGlzIGJlIGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCBub3JtYWwgbmV0d29yayBzd2l0Y2hpbmcgb2NjdXJzLgoqCQlXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgYW55IGZyYW1lIHRoYXQgZWdyZXNzZXMgb3V0IHRoaXMgcG9ydCB3aWxsCioJCWFsc28gYmUgc2VudCB0byB0aGUgRWdyZXNzTW9uaXRvckRlc3QgUG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIHRvIHNldCBFZ3Jlc3NNb25pdG9yU291cmNlLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0SW5ncmVzc01vbml0b3JTb3VyY2UKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEluZ3Jlc3NNb25pdG9yU291cmNlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgSW5ncmVzc01vbml0b3JTb3VyY2UgYml0IGZvciB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAgLSBHVF9UUlVFIGlmIEluZ3Jlc3NNb25pdG9yU291cmNlIGJpdCBpcyBzZXQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0SW5ncmVzc01vbml0b3JTb3VyY2UKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTCAJKm1vZGUKKTsKCgovKiBndFBvcnRQQVYuYyAqLwoKLyogZ3RQb3J0UmF0ZUN0cmwuYyAqLwoKLyogZ3RQb3J0Um1vbi5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0dldFBvcnRDb3VudGVyMwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIGEgc3BlY2lmaWMgY291bnRlciBvZiB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCWNvdW50ZXIgLSB0aGUgY291bnRlciB3aGljaCB3aWxsIGJlIHJlYWQKKgoqIE9VVFBVVFM6CioJCXN0YXRzRGF0YSAtIHBvaW50cyB0byAzMmJpdCBkYXRhIHN0b3JhZ2UgZm9yIHRoZSBNSUIgY291bnRlcgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgkJVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBHaWdhYml0IFN3aXRjaCBvbmx5CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdGF0c0dldFBvcnRDb3VudGVyMwooCglJTiAgR1RfUURfREVWCQkqZGV2LAoJSU4gIEdUX0xQT1JUCQlwb3J0LAoJSU4gIEdUX1NUQVRTX0NPVU5URVJTMwljb3VudGVyLAoJT1VUIEdUX1UzMgkJCSpzdGF0c0RhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0YXRzR2V0UG9ydEFsbENvdW50ZXJzMwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIGFsbCBjb3VudGVycyBvZiB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0c0NvdW50ZXJTZXQgLSBwb2ludHMgdG8gR1RfU1RBVFNfQ09VTlRFUl9TRVQgZm9yIHRoZSBNSUIgY291bnRlcnMKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioJCVRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgR2lnYWJpdCBTd2l0Y2ggb25seQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3RhdHNHZXRQb3J0QWxsQ291bnRlcnMzCigKCUlOICBHVF9RRF9ERVYJCSpkZXYsCglJTiAgR1RfTFBPUlQJCXBvcnQsCglPVVQgR1RfU1RBVFNfQ09VTlRFUl9TRVQzCSpzdGF0c0NvdW50ZXJTZXQKKTsKCgovKiBndFBvcnRTdGF0LmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBvcnRDdHIyCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCBJbkRpc2NhcmRzLCBJbkZpbHRlcmVkLCBhbmQgT3V0RmlsdGVyZWQgY291bnRlcnMuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgY3RyIC0gdGhlIGNvdW50ZXJzIHZhbHVlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFBvcnRDdHIyCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIE9VVCBHVF9QT1JUX1NUQVQyICAgKmN0cgopOwoKLyogZ3RQb3J0U3RhdHVzLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldE1HTUlJCioKKiBERVNDUklQVElPTjoKKgkJU0VSREVTIEludGVyZmFjZSBtb2RlLiBXaGVuIHRoaXMgYml0IGlzIGNsZWFyZWQgdG8gYSB6ZXJvIGFuZCBhIFBIWSBpcyAKKgkJZGV0ZWN0ZWQgY29ubmVjdGVkIHRvIHRoaXMgcG9ydCwgdGhlIFNFUkRFUyBpbnRlcmZhY2UgYmV0d2VlbiB0aGlzIHBvcnQKKgkJYW5kIHRoZSBQSFkgd2lsbCBiZSBTR01JSS4gIFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvYSBvbmUgYW5kIGEgUEhZIGlzCioJCWRldGVjdGVkIGNvbm5lY3RlZCB0byB0aGlzIHBvcnQsIHRoZSBTRVJERVMgaW50ZXJmYWNlIGJldHdlZW4gdGhpcyBwb3J0IAoqCQlhbmQgdGhlIFBIWSB3aWxsIGJlIE1HTUlJLiBXaGVuIG5vIFBIWSBpcyBkZXRlY3RlZCBvbiB0aGlzIHBvcnQgYW5kIHRoZSAKKgkJU0VSREVTIGludGVyZmFjZSBpcyBiZWluZyB1c2VkLCBpdCB3aWxsIGJlIGNvbmZpZ3VyZWQgaW4gMTAwMEJhc2UtWCBtb2RlLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgb3IgR1RfRkFMU0UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldE1HTUlJCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRNR01JSQoqCiogREVTQ1JJUFRJT046CioJCVNFUkRFUyBJbnRlcmZhY2UgbW9kZS4gV2hlbiB0aGlzIGJpdCBpcyBjbGVhcmVkIHRvIGEgemVybyBhbmQgYSBQSFkgaXMgCioJCWRldGVjdGVkIGNvbm5lY3RlZCB0byB0aGlzIHBvcnQsIHRoZSBTRVJERVMgaW50ZXJmYWNlIGJldHdlZW4gdGhpcyBwb3J0CioJCWFuZCB0aGUgUEhZIHdpbGwgYmUgU0dNSUkuICBXaGVuIHRoaXMgYml0IGlzIHNldCB0b2Egb25lIGFuZCBhIFBIWSBpcwoqCQlkZXRlY3RlZCBjb25uZWN0ZWQgdG8gdGhpcyBwb3J0LCB0aGUgU0VSREVTIGludGVyZmFjZSBiZXR3ZWVuIHRoaXMgcG9ydCAKKgkJYW5kIHRoZSBQSFkgd2lsbCBiZSBNR01JSS4gV2hlbiBubyBQSFkgaXMgZGV0ZWN0ZWQgb24gdGhpcyBwb3J0IGFuZCB0aGUgCioJCVNFUkRFUyBpbnRlcmZhY2UgaXMgYmVpbmcgdXNlZCwgaXQgd2lsbCBiZSBjb25maWd1cmVkIGluIDEwMDBCYXNlLVggbW9kZS4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlzdGF0ZSAtIEdUX1RSVUUgb3IgR1RfRkFMU0UKKgoqIE9VVFBVVFM6CioJCU5vbmUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldE1HTUlJCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCUlOICBHVF9CT09MICAJc3RhdGUKKTsKCgovKiBndFFvc01hcC5jICovCgovKiBndFN5c0N0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Q29yZVRhZ1R5cGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBFdGhlciBDb3JlIFRhZyBUeXBlLgoqCQlUaGlzIEV0aGVyIFR5cGUgaXMgYWRkZWQgdG8gZnJhbWVzIHRoYXQgZWdyZXNzIHRoZSBzd2l0Y2ggYXMgRG91YmxlIFRhZ2dlZCAKKgkJZnJhbWVzLiBJdCBpcyBhbHNvIHRoZSBFdGhlciBUeXBlIGV4cGVjdGVkIGR1cmluZyBJbmdyZXNzIHRvIGRldGVybWluZSBpZiAKKgkJYSBmcmFtZSBpcyBUYWdnZWQgb3Igbm90IG9uIHBvcnRzIGNvbmZpZ3VyZWQgYXMgVXNlQ29yZVRhZyBtb2RlLgoqCiogSU5QVVRTOgoqCQlldGhlclR5cGUgLSBDb3JlIFRhZyBUeXBlICgyIGJ5dGVzKQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldENvcmVUYWdUeXBlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfVTE2ICAJCWV0aGVyVHlwZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Q29yZVRhZ1R5cGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBDb3JlVGFnVHlwZQoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZXRoZXJUeXBlIC0gQ29yZSBUYWcgVHlwZSAoMiBieXRlcykKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldENvcmVUYWdUeXBlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9VMTYgIAkqZXRoZXJUeXBlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRJbmdyZXNzTW9uaXRvckRlc3QKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBJbmdyZXNzIE1vbml0b3IgRGVzdGluYXRpb24gUG9ydC4gRnJhbWVzIHRoYXQgYXJlIAoqCQl0YXJnZXRlZCB0b3dhcmQgYW4gSW5ncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIGdvIG91dCB0aGUgcG9ydCBudW1iZXIgCioJCWluZGljYXRlZCBpbiB0aGVzZSBiaXRzLiBUaGlzIGluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCBvbiBhIE1hcnZlbGwgVGFnIHBvcnQKKgkJd2l0aCB0aGUgSW5ncmVzcyBNb25pdG9yIHR5cGUsIGFuZCBmcmFtZXMgcmVjZWl2ZWQgb24gYSBOZXR3b3JrIHBvcnQgdGhhdCAKKgkJaXMgZW5hYmxlZCB0byBiZSB0aGUgSW5ncmVzcyBNb25pdG9yIFNvdXJjZSBQb3J0LgoqCQlJZiB0aGUgSW5ncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQgcmVzaWRlcyBpbiB0aGlzIGRldmljZSB0aGVzZSBiaXRzIAoqCQlzaG91bGQgcG9pbnQgdG8gdGhlIE5ldHdvcmsgcG9ydCB3aGVyZSB0aGVzZSBmcmFtZXMgYXJlIHRvIGVncmVzcy4gSWYgdGhlIAoqCQlJbmdyZXNzIE1vbml0b3IgRGVzdGluYXRpb24gUG9ydCByZXNpZGVzIGluIGFub3RoZXIgZGV2aWNlIHRoZXNlIGJpdHMgCioJCXNob3VsZCBwb2ludCB0byB0aGUgTWFydmVsbCBUYWcgcG9ydCBpbiB0aGlzIGRldmljZSB0aGF0IGlzIHVzZWQgdG8gZ2V0IAoqCQl0byB0aGUgZGV2aWNlIHRoYXQgY29udGFpbnMgdGhlIEluZ3Jlc3MgTW9uaXRvciBEZXN0aW5hdGlvbiBQb3J0LgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEluZ3Jlc3NNb25pdG9yRGVzdAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUCQlwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRJbmdyZXNzTW9uaXRvckRlc3QKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBJbmdyZXNzIE1vbml0b3IgRGVzdGluYXRpb24gUG9ydC4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRJbmdyZXNzTW9uaXRvckRlc3QKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0xQT1JUICAJKnBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEVncmVzc01vbml0b3JEZXN0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgRWdyZXNzIE1vbml0b3IgRGVzdGluYXRpb24gUG9ydC4gRnJhbWVzIHRoYXQgYXJlIAoqCQl0YXJnZXRlZCB0b3dhcmQgYW4gRWdyZXNzIE1vbml0b3IgRGVzdGluYXRpb24gZ28gb3V0IHRoZSBwb3J0IG51bWJlciAKKgkJaW5kaWNhdGVkIGluIHRoZXNlIGJpdHMuIFRoaXMgaW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkIG9uIGEgTWFydmVsbCBUYWcgcG9ydAoqCQl3aXRoIHRoZSBFZ3Jlc3MgTW9uaXRvciB0eXBlLCBhbmQgZnJhbWVzIHRyYW5zbWl0dGVkIG9uIGEgTmV0d29yayBwb3J0IHRoYXQgCioJCWlzIGVuYWJsZWQgdG8gYmUgdGhlIEVncmVzcyBNb25pdG9yIFNvdXJjZSBQb3J0LgoqCQlJZiB0aGUgRWdyZXNzIE1vbml0b3IgRGVzdGluYXRpb24gUG9ydCByZXNpZGVzIGluIHRoaXMgZGV2aWNlIHRoZXNlIGJpdHMgCioJCXNob3VsZCBwb2ludCB0byB0aGUgTmV0d29yayBwb3J0IHdoZXJlIHRoZXNlIGZyYW1lcyBhcmUgdG8gZWdyZXNzLiBJZiB0aGUgCioJCUVncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQgcmVzaWRlcyBpbiBhbm90aGVyIGRldmljZSB0aGVzZSBiaXRzIAoqCQlzaG91bGQgcG9pbnQgdG8gdGhlIE1hcnZlbGwgVGFnIHBvcnQgaW4gdGhpcyBkZXZpY2UgdGhhdCBpcyB1c2VkIHRvIGdldCAKKgkJdG8gdGhlIGRldmljZSB0aGF0IGNvbnRhaW5zIHRoZSBFZ3Jlc3MgTW9uaXRvciBEZXN0aW5hdGlvbiBQb3J0LgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEVncmVzc01vbml0b3JEZXN0CigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQJCXBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEVncmVzc01vbml0b3JEZXN0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgRWdyZXNzIE1vbml0b3IgRGVzdGluYXRpb24gUG9ydC4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRFZ3Jlc3NNb25pdG9yRGVzdAooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfTFBPUlQgIAkqcG9ydAopOwoKCi8qIGd0U3lzQ29uZmlnLmMgKi8KCi8qIGd0U3lzU3RhdHVzLmMgKi8KCgovKiBmdW5jdGlvbnMgYWRkZWQgb24gcmV2IDIuMiAqLwoKLyogZ3RQb3J0Q3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRNZXNzYWdlUG9ydAoqCiogREVTQ1JJUFRJT046CioJCVdoZW4gdGhlIExlYXJuMkFsbCBiaXQgaXMgc2V0IHRvIG9uZSwgbGVhcm5pbmcgbWVzc2FnZSBmcmFtZXMgYXJlIAoqCQlnZW5lcmF0ZWQuIFRoZXNlIGZyYW1lcyB3aWxsIGJlIHNlbnQgb3V0IGFsbCBwb3J0cyB3aG9zZSBNZXNzYWdlIFBvcnQgaXMgCioJCXNldCB0byBvbmUuCiogCQlJZiB0aGlzIGZlYXR1cmUgaXMgdXNlZCwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgTWFydmVsbCBUYWcgcG9ydHMsIAoqCQlleGNlcHQgZm9yIHRoZSBDUFUncyBwb3J0LCBoYXZlIHRoZWlyIE1lc3NhZ2VQb3J0IGJpdCBzZXQgdG8gb25lLiAKKgkJUG9ydHMgdGhhdCBhcmUgbm90IE1hcnZlbGwgVGFnIHBvcnRzIHNob3VsZCBub3QgaGF2ZSB0aGVpciBNZXNzYWdlIFBvcnQKKgkJYml0IHNldCB0byBvbmUuCioJCQoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIHRvIG1ha2UgdGhpcyBwb3J0IGEgTWVzc2FnZSBQb3J0LiBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRNZXNzYWdlUG9ydAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0TWVzc2FnZVBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlXaGVuIHRoZSBMZWFybjJBbGwgYml0IGlzIHNldCB0byBvbmUsIGxlYXJuaW5nIG1lc3NhZ2UgZnJhbWVzIGFyZSAKKgkJZ2VuZXJhdGVkLiBUaGVzZSBmcmFtZXMgd2lsbCBiZSBzZW50IG91dCBhbGwgcG9ydHMgd2hvc2UgTWVzc2FnZSBQb3J0IGlzIAoqCQlzZXQgdG8gb25lLgoqIAkJSWYgdGhpcyBmZWF0dXJlIGlzIHVzZWQsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYWxsIE1hcnZlbGwgVGFnIHBvcnRzLCAKKgkJZXhjZXB0IGZvciB0aGUgQ1BVJ3MgcG9ydCwgaGF2ZSB0aGVpciBNZXNzYWdlUG9ydCBiaXQgc2V0IHRvIG9uZS4gCioJCVBvcnRzIHRoYXQgYXJlIG5vdCBNYXJ2ZWxsIFRhZyBwb3J0cyBzaG91bGQgbm90IGhhdmUgdGhlaXIgTWVzc2FnZSBQb3J0CioJCWJpdCBzZXQgdG8gb25lLgoqCioJCQoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgdG8gbWFrZSB0aGlzIHBvcnQgYSBNZXNzYWdlIFBvcnQuIEdUX0ZBTFNFLCBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRNZXNzYWdlUG9ydAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MIAkqbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFRydW5rUG9ydAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgZnVuY3Rpb24gZW5hYmxlcy9kaXNhYmxlcyBhbmQgc2V0cyB0aGUgdHJ1bmsgSUQuCioJCQoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQllbiAtIEdUX1RSVUUgdG8gbWFrZSB0aGUgcG9ydCBiZSBhIG1lbWJlciBvZiBhIHRydW5rIHdpdGggdGhlIGdpdmVuIHRydW5rSWQuCioJCQkgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgkJdHJ1bmtJZCAtIHZhbGlkIElEIGlzIDAgfiAxNS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgdHJ1bmtJZCBpcyBuZWl0aGVyIHZhbGlkIG5vciBJTlZBTElEX1RSVU5LX0lECioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFRydW5rUG9ydAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfQk9PTCAJCWVuLAoJSU4gR1RfVTMyCQl0cnVua0lkCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0VHJ1bmtQb3J0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydW5rIHN0YXRlIG9mIHRoZSBwb3J0LgoqCQlXaGVuIHRydW5rIGlzIGRpc2FibGVkLCB0cnVua0lkIGZpZWxkIHdvbid0IGhhdmUgdmFsaWQgdmFsdWUuCioJCQoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFLCBpZiB0aGUgcG9ydCBpcyBhIG1lbWJlciBvZiBhIHRydW5rLAoqCQkJIEdUX0ZBTFNFLCBvdGhlcndpc2UuCioJCXRydW5rSWQgLSAwIH4gMTUsIHZhbGlkIG9ubHkgaWYgZW4gaXMgR1RfVFJVRQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFRydW5rUG9ydAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgCSplbiwKCU9VVCBHVF9VMzIJCSp0cnVua0lkCik7CgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRHbG9iYWwyUmVnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgU3dpdGNoIEdsb2JhbCAyIFJlZ2lzdGVycy4KKgoqIElOUFVUUzoKKiAgICAgICByZWdBZGRyIC0gVGhlIHJlZ2lzdGVyJ3MgYWRkcmVzcy4KKgoqIE9VVFBVVFM6CiogICAgICAgZGF0YSAgICAtIFRoZSByZWFkIHJlZ2lzdGVyJ3MgZGF0YS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0R2xvYmFsMlJlZwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfVTMyCSAgICAgcmVnQWRkciwKICAgIE9VVCBHVF9VMTYJICAgICAqZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0R2xvYmFsMlJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyBTd2l0Y2ggR2xvYmFsMiBSZWdpc3RlcnMuCioKKiBJTlBVVFM6CiogICAgICAgcmVnQWRkciAtIFRoZSByZWdpc3RlcidzIGFkZHJlc3MuCioKKiBPVVRQVVRTOgoqICAgICAgIGRhdGEgICAgLSBUaGUgcmVhZCByZWdpc3RlcidzIGRhdGEuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEdsb2JhbDJSZWcKKAogICAgSU4gIEdUX1FEX0RFVgkJKmRldiwKICAgIElOICBHVF9VMzIJCQlyZWdBZGRyLAogICAgSU4gIEdUX1UxNgkJCWRhdGEKKTsKCi8qIGd0U3lzQ3RybC5jICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEFSUERlc3QKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBBUlAgTW9uaXRvciBEZXN0aW5hdGlvbiBQb3J0LiBUYWdnZWQgb3IgdW50YWdnZWQgCioJCWZyYW1lcyB0aGF0IGluZ3Jlc3MgTmV0d29yayBwb3J0cyB3aXRoIHRoZSBCcm9hZGNhc3QgRGVzdGluYXRpb24gQWRkcmVzcyAKKgkJYW5kIHdpdGggYW4gRXRoZXJ0eXBlIG9mIDB4MDgwNiBhcmUgbWlycm9yZWQgdG8gdGhpcyBwb3J0LiBUaGUgQVJQRGVzdCAKKgkJc2hvdWxkIHBvaW50IHRvIHRoZSBwb3J0IHRoYXQgZGlyZWN0cyB0aGVzZSBmcmFtZXMgdG8gdGhlIHN3aXRjaCdzIENQVSAKKgkJdGhhdCB3aWxsIHByb2Nlc3MgQVJQcy4gVGhpcyB0YXJnZXQgcG9ydCBzaG91bGQgYmUgYSBNYXJ2ZWxsIFRhZyBwb3J0IHNvIAoqCQl0aGF0IGZyYW1lcyB3aWxsIGVncmVzcyB3aXRoIGEgVG9fQ1BVIE1hcnZlbGwgVGFnIHdpdGggYSBDUFUgQ29kZSBvZiBBUlAuCioJCVRvX0NQVSBNYXJ2ZWxsIFRhZyBmcmFtZXMgd2l0aCBhIENQVSBDb2RlIG9mZiBBUlAgdGhhdCBpbmdyZXNzIGEgTWFydmVsbCAKKgkJVGFnIHBvcnQgd2lsbCBiZSBzZW50IHRvIHRoZSBwb3J0IG51bWJlciBkZWZpbmRlZCBpbiBBUlBEZXN0LgoqCioJCUlmIEFSUERlc3QgPSAgMHhGLCBBUlAgTW9uaXRvcmluZyBpcyBkaXNhYmxlZCBhbmQgaW5ncmVzc2luZyBUb19DUFUgQVJQIAoqCQlmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQuCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0QVJQRGVzdAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUCQlwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRBUlBEZXN0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgQVJQIE1vbml0b3IgRGVzdGluYXRpb24gUG9ydC4gVGFnZ2VkIG9yIHVudGFnZ2VkIAoqCQlmcmFtZXMgdGhhdCBpbmdyZXNzIE5ldHdvcmsgcG9ydHMgd2l0aCB0aGUgQnJvYWRjYXN0IERlc3RpbmF0aW9uIEFkZHJlc3MgCioJCWFuZCB3aXRoIGFuIEV0aGVydHlwZSBvZiAweDA4MDYgYXJlIG1pcnJvcmVkIHRvIHRoaXMgcG9ydC4gVGhlIEFSUERlc3QgCioJCXNob3VsZCBwb2ludCB0byB0aGUgcG9ydCB0aGF0IGRpcmVjdHMgdGhlc2UgZnJhbWVzIHRvIHRoZSBzd2l0Y2gncyBDUFUgCioJCXRoYXQgd2lsbCBwcm9jZXNzIEFSUHMuIFRoaXMgdGFyZ2V0IHBvcnQgc2hvdWxkIGJlIGEgTWFydmVsbCBUYWcgcG9ydCBzbyAKKgkJdGhhdCBmcmFtZXMgd2lsbCBlZ3Jlc3Mgd2l0aCBhIFRvX0NQVSBNYXJ2ZWxsIFRhZyB3aXRoIGEgQ1BVIENvZGUgb2YgQVJQLgoqCQlUb19DUFUgTWFydmVsbCBUYWcgZnJhbWVzIHdpdGggYSBDUFUgQ29kZSBvZmYgQVJQIHRoYXQgaW5ncmVzcyBhIE1hcnZlbGwgCioJCVRhZyBwb3J0IHdpbGwgYmUgc2VudCB0byB0aGUgcG9ydCBudW1iZXIgZGVmaW5kZWQgaW4gQVJQRGVzdC4KKgoqCQlJZiBBUlBEZXN0ID0gIDB4RiwgQVJQIE1vbml0b3JpbmcgaXMgZGlzYWJsZWQgYW5kIGluZ3Jlc3NpbmcgVG9fQ1BVIEFSUCAKKgkJZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEFSUERlc3QKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0xQT1JUICAJKnBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFJzdmQyQ3B1RW5hYmxlcwoqCiogREVTQ1JJUFRJT046CioJCVJlc2VydmVkIERBIEVuYWJsZXMuIFdoZW4gdGhlIGZ1bmN0aW9uLCBnc3lzU2V0UnN2ZDJDcHUsIGlzIGNhbGxlZCB3aXRoIAoqCQllbiA9IEdUX1RSVUUsIHRoZSAxNiByZXNlcnZlZCBtdWx0aWNhc3QgREEgYWRkcmVzc2VzLCB3aG9zZSBiaXQgaW4gdGhpcyAKKgkJZW5CaXRzKG9yIHJlZ2lzdGVyKSBhcmUgYWxzbyBzZXQgdG8gYSBvbmUsIGFyZSB0cmVhdGVkIGFzIE1HTVQgZnJhbWVzLiAKKgkJQWxsIHRoZSByZXNlcnZlZCBEQSdzIHRha2UgdGhlIGZvcm0gMDE6ODA6QzI6MDA6MDA6MHguIFdoZW4geCA9IDB4MCwgCioJCWJpdCAwIG9mIHRoaXMgcmVnaXN0ZXIgaXMgdGVzdGVkLiBXaGVuIHggPSAweDIsIGJpdCAyIG9mIHRoaXMgZmllbGQgaXMgCioJCXRlc3RlZCBhbmQgc28gb24uCioJCUlmIHRoZSB0ZXN0ZWQgYml0IGluIHRoaXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byBhIHplcm8sIHRoZSBmcmFtZSB3aWxsIAoqCQliZSB0cmVhdGVkIGFzIGEgbm9ybWFsIChub24tTUdNVCkgZnJhbWUuCioKKiBJTlBVVFM6CioJCWVuQml0cyAtIGJpdCB2ZWN0b3Igb2YgZW5hYmxlZCBSZXNlcnZlZCBNdWx0aWNhc3QuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UnN2ZDJDcHVFbmFibGVzCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfVTE2CQllbkJpdHMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFJzdmQyQ3B1RW5hYmxlcwoqCiogREVTQ1JJUFRJT046CioJCVJlc2VydmVkIERBIEVuYWJsZXMuIFdoZW4gdGhlIGZ1bmN0aW9uLCBnc3lzU2V0UnN2ZDJDcHUsIGlzIGNhbGxlZCB3aXRoIAoqCQllbiA9IEdUX1RSVUUsIHRoZSAxNiByZXNlcnZlZCBtdWx0aWNhc3QgREEgYWRkcmVzc2VzLCB3aG9zZSBiaXQgaW4gdGhpcyAKKgkJZW5CaXRzKG9yIHJlZ2lzdGVyKSBhcmUgYWxzbyBzZXQgdG8gYSBvbmUsIGFyZSB0cmVhdGVkIGFzIE1HTVQgZnJhbWVzLiAKKgkJQWxsIHRoZSByZXNlcnZlZCBEQSdzIHRha2UgdGhlIGZvcm0gMDE6ODA6QzI6MDA6MDA6MHguIFdoZW4geCA9IDB4MCwgCioJCWJpdCAwIG9mIHRoaXMgcmVnaXN0ZXIgaXMgdGVzdGVkLiBXaGVuIHggPSAweDIsIGJpdCAyIG9mIHRoaXMgZmllbGQgaXMgCioJCXRlc3RlZCBhbmQgc28gb24uCioJCUlmIHRoZSB0ZXN0ZWQgYml0IGluIHRoaXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byBhIHplcm8sIHRoZSBmcmFtZSB3aWxsIAoqCQliZSB0cmVhdGVkIGFzIGEgbm9ybWFsIChub24tTUdNVCkgZnJhbWUuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbkJpdHMgLSBiaXQgdmVjdG9yIG9mIGVuYWJsZWQgUmVzZXJ2ZWQgTXVsdGljYXN0LgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UnN2ZDJDcHVFbmFibGVzCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9VMTYgIAkqZW5CaXRzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRSc3ZkMkNwdQoqCiogREVTQ1JJUFRJT046CioJCVdoZW4gdGhlIFJzdmQyQ3B1IGlzIHNldCB0byBhIG9uZShHVF9UUlVFKSwgZnJhbWVzIHdpdGggYSBEZXN0aW5hdGlvbiAKKgkJQWRkcmVzcyBpbiB0aGUgcmFuZ2UgMDE6ODA6QzI6MDA6MDA6MHgsIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgVkxBTiAKKgkJbWVtYmVyc2hpcCwgd2lsbCBiZSBjb25zaWRlcmVkIE1HTVQgZnJhbWVzIGFuZCBzZW50IHRvIHRoZSBwb3J0J3MgQ1BVIAoqCQlQb3J0IGFzIGxvbmcgYXMgdGhlIGFzc29jaWF0ZWQgUnN2ZDJDcHVFbmFibGUgYml0IChnc3lzU2V0UnN2ZDJDcHVFbmFibGUgCioJCWZ1bmN0aW9uKSBmb3IgdGhlIGZyYW1lcydzIERBIGlzIGFsc28gc2V0IHRvIGEgb25lLgoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgaWYgUnN2ZDJDcHUgaXMgc2V0LiBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFJzdmQyQ3B1CigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFJzdmQyQ3B1CioKKiBERVNDUklQVElPTjoKKgkJV2hlbiB0aGUgUnN2ZDJDcHUgaXMgc2V0IHRvIGEgb25lKEdUX1RSVUUpLCBmcmFtZXMgd2l0aCBhIERlc3RpbmF0aW9uIAoqCQlBZGRyZXNzIGluIHRoZSByYW5nZSAwMTo4MDpDMjowMDowMDoweCwgcmVnYXJkbGVzcyBvZiB0aGVpciBWTEFOIAoqCQltZW1iZXJzaGlwLCB3aWxsIGJlIGNvbnNpZGVyZWQgTUdNVCBmcmFtZXMgYW5kIHNlbnQgdG8gdGhlIHBvcnQncyBDUFUgCioJCVBvcnQgYXMgbG9uZyBhcyB0aGUgYXNzb2NpYXRlZCBSc3ZkMkNwdUVuYWJsZSBiaXQgKGdzeXNTZXRSc3ZkMkNwdUVuYWJsZSAKKgkJZnVuY3Rpb24pIGZvciB0aGUgZnJhbWVzJ3MgREEgaXMgYWxzbyBzZXQgdG8gYSBvbmUuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgaWYgUnN2ZDJDcHUgaXMgc2V0LiBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UnN2ZDJDcHUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wgIAkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldE1HTVRQcmkKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGVzZSBiaXRzIGFyZSB1c2VkIGFzIHRoZSBQUklbMjowXSBiaXRzIG9uIFJzdmQyQ1BVIE1HTVQgZnJhbWVzLgoqCiogSU5QVVRTOgoqCQlwcmkgLSBQUklbMjowXSBiaXRzIChzaG91bGQgYmUgbGVzcyB0aGFuIDgpCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIElmIHByaSBpcyBub3QgbGVzcyB0aGFuIDguCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0TUdNVFByaQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX1UxNgkJcHJpCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRNR01UUHJpCioKKiBERVNDUklQVElPTjoKKgkJVGhlc2UgYml0cyBhcmUgdXNlZCBhcyB0aGUgUFJJWzI6MF0gYml0cyBvbiBSc3ZkMkNQVSBNR01UIGZyYW1lcy4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCXByaSAtIFBSSVsyOjBdIGJpdHMgKHNob3VsZCBiZSBsZXNzIHRoYW4gOCkKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldE1HTVRQcmkKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX1UxNiAgCSpwcmkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFVzZURvdWJsZVRhZ0RhdGEKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIGJpdCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBEb3VibGUgVGFnIGRhdGEgdGhhdCBpcyByZW1vdmVkIGZyb20gYSAKKgkJRG91YmxlIFRhZyBmcmFtZSBpcyB1c2VkIG9yIGlnbm9yZWQgd2hlbiBtYWtpbmcgc3dpdGNoaW5nIGRlY2lzaW9ucyBvbiAKKgkJdGhlIGZyYW1lLgoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gdXNlIHJlbW92ZWQgdGFnIGRhdGEsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRVc2VEb3VibGVUYWdEYXRhCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFVzZURvdWJsZVRhZ0RhdGEKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIGJpdCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBEb3VibGUgVGFnIGRhdGEgdGhhdCBpcyByZW1vdmVkIGZyb20gYSAKKgkJRG91YmxlIFRhZyBmcmFtZSBpcyB1c2VkIG9yIGlnbm9yZWQgd2hlbiBtYWtpbmcgc3dpdGNoaW5nIGRlY2lzaW9ucyBvbiAKKgkJdGhlIGZyYW1lLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFIGlmIHJlbW92ZWQgdGFnIGRhdGEgaXMgdXNlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0VXNlRG91YmxlVGFnRGF0YQooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTCAgCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UHJldmVudExvb3BzCioKKiBERVNDUklQVElPTjoKKgkJV2hlbiBhIE1hcnZlbGwgVGFnIHBvcnQgcmVjZWl2ZXMgYSBGb3J3YXJkIE1hcnZlbGwgVGFnIHdob3NlIFNyY19EZXYgCioJCWZpZWxkIGVxdWFscyB0aGlzIGRldmljZSdzIERldmljZSBOdW1iZXIsIHRoZSBmb2xsb3dpbmcgYWN0aW9uIHdpbGwgYmUgCioJCXRha2VuIGRlcGVuZGluZyB1cG9uIHRoZSB2YWx1ZSBvZiB0aGlzIGJpdC4KKgkJR1RfVFJVRSAoMSkgLSBUaGUgZnJhbWUgd2lsbCBiZSBkaXNjYXJkZWQuCioJCUdUX0ZBTFNFKDApIC0gVGhlIGZyYW1lIHdpbGwgYmUgcHJldmVudGVkIGZyb20gZ29pbmcgb3V0IGl0cyBvcmlnaW5hbCAKKgkJCQkJCXNvdXJjZSBwb3J0IGFzIGRlZmluZWQgYnkgdGhlIGZyYW1lJ3MgU3JjX1BvcnQgZmllbGQuCioKKiBJTlBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byBkaXNjYXJkIHRoZSBmcmFtZSBhcyBkZXNjcmliZWQgYWJvdmUsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRQcmV2ZW50TG9vcHMKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0UHJldmVudExvb3BzCioKKiBERVNDUklQVElPTjoKKgkJV2hlbiBhIE1hcnZlbGwgVGFnIHBvcnQgcmVjZWl2ZXMgYSBGb3J3YXJkIE1hcnZlbGwgVGFnIHdob3NlIFNyY19EZXYgCioJCWZpZWxkIGVxdWFscyB0aGlzIGRldmljZSdzIERldmljZSBOdW1iZXIsIHRoZSBmb2xsb3dpbmcgYWN0aW9uIHdpbGwgYmUgCioJCXRha2VuIGRlcGVuZGluZyB1cG9uIHRoZSB2YWx1ZSBvZiB0aGlzIGJpdC4KKgkJR1RfVFJVRSAoMSkgLSBUaGUgZnJhbWUgd2lsbCBiZSBkaXNjYXJkZWQuCioJCUdUX0ZBTFNFKDApIC0gVGhlIGZyYW1lIHdpbGwgYmUgcHJldmVudGVkIGZyb20gZ29pbmcgb3V0IGl0cyBvcmlnaW5hbCAKKgkJCQkJCXNvdXJjZSBwb3J0IGFzIGRlZmluZWQgYnkgdGhlIGZyYW1lJ3MgU3JjX1BvcnQgZmllbGQuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gZGlzY2FyZCB0aGUgZnJhbWUgYXMgZGVzY3JpYmVkIGFib3ZlLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRQcmV2ZW50TG9vcHMKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wgIAkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEZsb3dDb250cm9sTWVzc2FnZQoqCiogREVTQ1JJUFRJT046CioJCVdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIG9uZSwgTWFydmVsbCBUYWcgRmxvdyBDb250cm9sIG1lc3NhZ2VzIHdpbGwgYmUgCioJCWdlbmVyYXRlZCB3aGVuIGFuIG91dHB1dCBxdWV1ZSBiZWNvbWVzIGNvbmdlc3RlZCBhbmQgcmVjZWl2ZWQgTWFydmVsbCBUYWcgCioJCUZsb3cgQ29udHJvbCBtZXNzYWdlcyB3aWxsIHBhdXNlIE1BQ3MgaW5zaWRlIHRoaXMgZGV2aWNlLiBXaGVuIHRoaXMgYml0IAoqCQlpcyBjbGVhcmVkIHRvIGEgemVybywgTWFydmVsbCBUYWcgRmxvdyBDb250cm9sIG1lc3NhZ2VzIHdpbGwgbm90IGJlIAoqCQlnZW5lcmF0ZWQgYW5kIGFueSByZWNlaXZlZCB3aWxsIGJlIGlnbm9yZWQgYXQgdGhlIHRhcmdldCBNQUMuCioKKiBJTlBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byB1c2UgTWFydmVsbCBUYWcgRmxvdyBDb250cm9sIG1lc3NhZ2UsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRGbG93Q29udHJvbE1lc3NhZ2UKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Rmxvd0NvbnRyb2xNZXNzYWdlCioKKiBERVNDUklQVElPTjoKKgkJV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gb25lLCBNYXJ2ZWxsIFRhZyBGbG93IENvbnRyb2wgbWVzc2FnZXMgd2lsbCBiZSAKKgkJZ2VuZXJhdGVkIHdoZW4gYW4gb3V0cHV0IHF1ZXVlIGJlY29tZXMgY29uZ2VzdGVkIGFuZCByZWNlaXZlZCBNYXJ2ZWxsIFRhZyAKKgkJRmxvdyBDb250cm9sIG1lc3NhZ2VzIHdpbGwgcGF1c2UgTUFDcyBpbnNpZGUgdGhpcyBkZXZpY2UuIFdoZW4gdGhpcyBiaXQgCioJCWlzIGNsZWFyZWQgdG8gYSB6ZXJvLCBNYXJ2ZWxsIFRhZyBGbG93IENvbnRyb2wgbWVzc2FnZXMgd2lsbCBub3QgYmUgCioJCWdlbmVyYXRlZCBhbmQgYW55IHJlY2VpdmVkIHdpbGwgYmUgaWdub3JlZCBhdCB0aGUgdGFyZ2V0IE1BQy4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byB1c2UgTWFydmVsbCBUYWcgRmxvdyBDb250cm9sIG1lc3NhZ2UsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEZsb3dDb250cm9sTWVzc2FnZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTCAgCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Rm9yY2VGbG93Q29udHJvbFByaQoqCiogREVTQ1JJUFRJT046CioJCVdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lIHRoZSBQUklbMjowXSBiaXRzIG9mIGdlbmVyYXRlZCBNYXJ2ZWxsIFRhZyAKKgkJRmxvdyBDb250cm9sIGZyYW1lcyB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIEZDIFByaSBiaXRzIChzZXQgYnkgCioJCWdzeXNTZXRGQ1ByaSBmdW5jdGlvbiBjYWxsKS4gV2hlbiB0aGlzIGJpdCBpcyBjbGVhcmVkIHRvIGEgemVybywgZ2VuZXJhdGVkIAoqCQlNYXJ2ZWxsIFRhZyBGbG93IENvbnRyb2wgZnJhbWVzIHdpbGwgcmV0YWluIHRoZSBQUklbMjowXSBiaXRzIGZyb20gdGhlIAoqCQlmcmFtZXMgdGhhdCBjYXVzZWQgdGhlIGNvbmdlc3Rpb24uIFRoaXMgYml0IHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYgdGhlIAoqCQlGbG93Q29udHJvbE1lc3NhZ2UgYml0KGdzeXNTZXRGbG93Q29udHJvbE1lc3NhZ2UgZnVuY3Rpb24gY2FsbCkgaXMgCioJCWNsZWFyZWQgdG8gYSB6ZXJvLgoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gdXNlIGRlZmluZWQgUFJJIGJpdHMsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRGb3JjZUZsb3dDb250cm9sUHJpCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEZvcmNlRmxvd0NvbnRyb2xQcmkKKgoqIERFU0NSSVBUSU9OOgoqCQlXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSB0aGUgUFJJWzI6MF0gYml0cyBvZiBnZW5lcmF0ZWQgTWFydmVsbCBUYWcgCioJCUZsb3cgQ29udHJvbCBmcmFtZXMgd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBGQyBQcmkgYml0cyAoc2V0IGJ5IAoqCQlnc3lzU2V0RkNQcmkgZnVuY3Rpb24gY2FsbCkuIFdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZCB0byBhIHplcm8sIGdlbmVyYXRlZCAKKgkJTWFydmVsbCBUYWcgRmxvdyBDb250cm9sIGZyYW1lcyB3aWxsIHJldGFpbiB0aGUgUFJJWzI6MF0gYml0cyBmcm9tIHRoZSAKKgkJZnJhbWVzIHRoYXQgY2F1c2VkIHRoZSBjb25nZXN0aW9uLiBUaGlzIGJpdCB3aWxsIGhhdmUgbm8gZWZmZWN0IGlmIHRoZSAKKgkJRmxvd0NvbnRyb2xNZXNzYWdlIGJpdChnc3lzU2V0Rmxvd0NvbnRyb2xNZXNzYWdlIGZ1bmN0aW9uIGNhbGwpIGlzIAoqCQljbGVhcmVkIHRvIGEgemVyby4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byB1c2UgZGVmaW5lZCBQUkkgYml0cywgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Rm9yY2VGbG93Q29udHJvbFByaQooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTCAgCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0RkNQcmkKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGVzZSBiaXRzIGFyZSB1c2VkIGFzIHRoZSBQUklbMjowXSBiaXRzIG9uIGdlbmVyYXRlZCBNYXJ2ZWxsIFRhZyBGbG93IAoqCQlDb250cm9sIGZyYW1lcyBpZiB0aGUgRm9yY2VGbG93Q29udHJvbFByaSBiaXQoZ3N5c1NldEZvcmNlRmxvd0NvbnRyb2xQcmkpCioJCWlzIHNldCB0byBhIG9uZS4KKgoqIElOUFVUUzoKKgkJcHJpIC0gUFJJWzI6MF0gYml0cyAoc2hvdWxkIGJlIGxlc3MgdGhhbiA4KQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBJZiBwcmkgaXMgbm90IGxlc3MgdGhhbiA4LgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEZDUHJpCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfVTE2CQlwcmkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEZDUHJpCioKKiBERVNDUklQVElPTjoKKgkJVGhlc2UgYml0cyBhcmUgdXNlZCBhcyB0aGUgUFJJWzI6MF0gYml0cyBvbiBnZW5lcmF0ZWQgTWFydmVsbCBUYWcgRmxvdyAKKgkJQ29udHJvbCBmcmFtZXMgaWYgdGhlIEZvcmNlRmxvd0NvbnRyb2xQcmkgYml0KGdzeXNTZXRGb3JjZUZsb3dDb250cm9sUHJpKQoqCQlpcyBzZXQgdG8gYSBvbmUuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlwcmkgLSBQUklbMjowXSBiaXRzIChzaG91bGQgYmUgbGVzcyB0aGFuIDgpCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRGQ1ByaQooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfVTE2ICAJKnByaQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Rmxvd0N0cmxEZWxheQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgZnVuY3Rpb24gc2V0cyBGbG93IGNvbnRyb2wgZGVsYXkgdGltZSBmb3IgMTBNYnBzLCAxMDBNYnBzLCBhbmQgCioJCTEwMDBNYnBzLiAKKgoqIElOUFVUUzoKKgkJc3AgLSBQT1JUX1NQRUVEXzEwX01CUFMsIFBPUlRfU1BFRURfMTAwX01CUFMsIG9yIFBPUlRfU1BFRURfMTAwMF9NQlBTCioJCWRlbGF5VGltZSAtIGFjdHVhbCBkZWxheSB0aW1lIHdpbGwgYmUgKHRoaXMgdmFsdWUgeCAyLjA0OHVTKS4KKgkJCQkJdGhlIHZhbHVlIGNhbm5vdCBleGNlZWQgMHgxRkZGIChvciA4MTkxIGluIGRlY2ltYWwpLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBzcCBpcyBub3QgdmFsaWQgb3IgZGVsYXlUaW1lIGlzID4gMHgxRkZGLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEZsb3dDdHJsRGVsYXkKKAoJSU4gR1RfUURfREVWCQkJKmRldiwKCUlOIEdUX1BPUlRfU1BFRURfTU9ERQlzcCwKCUlOIEdUX1UzMgkJCQlkZWxheVRpbWUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEZsb3dDdHJsRGVsYXkKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyBGbG93IGNvbnRyb2wgZGVsYXkgdGltZSBmb3IgMTBNYnBzLCAxMDBNYnBzLCBhbmQKKgkJMTAwME1icHMuIAoqCiogSU5QVVRTOgoqCQlzcCAtIFBPUlRfU1BFRURfMTBfTUJQUywgUE9SVF9TUEVFRF8xMDBfTUJQUywgb3IgUE9SVF9TUEVFRF8xMDAwX01CUFMKKgoqIE9VVFBVVFM6CioJCWRlbGF5VGltZSAtIGFjdHVhbCBkZWxheSB0aW1lIHdpbGwgYmUgKHRoaXMgdmFsdWUgeCAyLjA0OHVTKS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBzcCBpcyBub3QgdmFsaWQgb3IgZGVsYXlUaW1lIGlzID4gMHgxRkZGLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEZsb3dDdHJsRGVsYXkKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX1BPUlRfU1BFRURfTU9ERQlzcCwKCU9VVCBHVF9VMzIJCSpkZWxheVRpbWUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldERldlJvdXRpbmdUYWJsZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgZnVuY3Rpb24gc2V0cyBEZXZpY2UgdG8gUG9ydCBtYXBwaW5nICh3aGljaCBkZXZpY2UgaXMgY29ubmVjdGVkIHRvIAoqCQl3aGljaCBwb3J0IG9mIHRoaXMgZGV2aWNlKS4gCioKKiBJTlBVVFM6CioJCWRldk51bSAtIHRhcmdldCBkZXZpY2UgbnVtYmVyLgoqCQlwb3J0TnVtIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGRldk51bSA+PSAzMiBvciBwb3J0ID49IHRvdGFsIG51bWJlciBvZiBwb3J0cy4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXREZXZSb3V0aW5nVGFibGUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9VMzIgIAkJZGV2TnVtLAoJSU4gR1RfTFBPUlQgCXBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldERldlJvdXRpbmdUYWJsZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgZnVuY3Rpb24gZ2V0cyBEZXZpY2UgdG8gUG9ydCBtYXBwaW5nICh3aGljaCBkZXZpY2UgaXMgY29ubmVjdGVkIHRvIAoqCQl3aGljaCBwb3J0IG9mIHRoaXMgZGV2aWNlKS4gCioKKiBJTlBVVFM6CioJCWRldk51bSAtIHRhcmdldCBkZXZpY2UgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJcG9ydE51bSAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGRldk51bSA+PSAzMgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldERldlJvdXRpbmdUYWJsZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfVTMyIAkJZGV2TnVtLAoJT1VUIEdUX0xQT1JUIAkqcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0VHJ1bmtNYXNrVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIGZ1bmN0aW9uIHNldHMgVHJ1bmsgbWFzayB2ZWN0b3IgdGFibGUgZm9yIGxvYWQgYmFsYW5jaW5nLgoqCQlUaGlzIHZlY3RvciB3aWxsIGJlIEFORCdlZCB3aXRoIHdoZXJlIHRoZSBmcmFtZSB3YXMgb3JpZ2luYWxseSBlZ3Jlc3NlZCB0by4KKgkJVG8gaW5zdXJlIGFsbCB0cnVua3MgYXJlIGxvYWQgYmFsYW5jZWQgY29ycmVjdGx5LCB0aGUgZGF0YSBpbiB0aGlzIHRhYmxlCioJCW5lZWRzIHRvIGJlIGNvcnJlY3RseSBjb25maWd1cmVkLgoqCiogSU5QVVRTOgoqCQl0cnVua051bSAtIG9uZSBvZiB0aGUgZWlnaHQgVHJ1bmsgbWFzayB2ZWN0b3JzLgoqCQl0cnVua01hc2sgLSBUcnVuayBNYXNrIGJpdHMuIEJpdCAwIGNvbnRyb2xzIHRydW5rIG1hc2tpbmcgZm9yIHBvcnQgMCwKKgkJCQkJYml0IDEgZm9yIHBvcnQgMSAsIGV0Yy4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgdHJ1bmtOdW0gPiAweDcgb3IgdHJ1bk1hc2sgPiAweDdGRiAob3IgcG9ydCB2ZWN0b3IpLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFRydW5rTWFza1RhYmxlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfVTMyICAJCXRydW5rTnVtLAoJSU4gR1RfVTMyCQl0cnVua01hc2sKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFRydW5rTWFza1RhYmxlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyBmdW5jdGlvbiBzZXRzIFRydW5rIG1hc2sgdmVjdG9yIHRhYmxlIGZvciBsb2FkIGJhbGFuY2luZy4KKgkJVGhpcyB2ZWN0b3Igd2lsbCBiZSBBTkQnZWQgd2l0aCB3aGVyZSB0aGUgZnJhbWUgd2FzIG9yaWdpbmFsbHkgZWdyZXNzZWQgdG8uCioJCVRvIGluc3VyZSBhbGwgdHJ1bmtzIGFyZSBsb2FkIGJhbGFuY2VkIGNvcnJlY3RseSwgdGhlIGRhdGEgaW4gdGhpcyB0YWJsZQoqCQluZWVkcyB0byBiZSBjb3JyZWN0bHkgY29uZmlndXJlZC4KKgoqIElOUFVUUzoKKgkJdHJ1bmtOdW0gLSBvbmUgb2YgdGhlIGVpZ2h0IFRydW5rIG1hc2sgdmVjdG9ycy4KKgoqIE9VVFBVVFM6CioJCXRydW5rTWFzayAtIFRydW5rIE1hc2sgYml0cy4gQml0IDAgY29udHJvbHMgdHJ1bmsgbWFza2luZyBmb3IgcG9ydCAwLAoqCQkJCQliaXQgMSBmb3IgcG9ydCAxICwgZXRjLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIHRydW5rTnVtID4gMHg3LgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFRydW5rTWFza1RhYmxlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9VMzIgCQl0cnVua051bSwKCU9VVCBHVF9VMzIJCSp0cnVua01hc2sKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEhhc2hUcnVuawoqCiogREVTQ1JJUFRJT046CioJCUhhc2ggREEgJiBTQSBmb3IgVHJ1bmtNYXNrIHNlbGVjdGlvbi4gVHJ1bmsgbG9hZCBiYWxhbmNpbmcgaXMgYWNjb21wbGlzaGVkIAoqCQlieSB1c2luZyB0aGUgZnJhbWUncyBEQSBhbmQgU0EgZmllbGRzIHRvIGFjY2VzcyBvbmUgb2YgZWlnaHQgVHJ1bmsgTWFza3MuIAoqCQlXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgdGhlIGhhc2hlZCBjb21wdXRlZCBmb3IgYWRkcmVzcyB0YWJsZSAKKgkJbG9va3VwcyBpcyB1c2VkIGZvciB0aGUgVHJ1bmtNYXNrIHNlbGVjdGlvbi4gV2hlbiB0aGlzIGJpdCBpcyBjbGVhcmVkIHRvIAoqCQlhIHplcm8gdGhlIGxvd2VyIDMgYml0cyBvZiB0aGUgZnJhbWUncyBEQSBhbmQgU0EgYXJlIFhPUidlZCB0b2dldGhlciB0byAKKgkJc2VsZWN0IHRoZSBUcnVua01hc2sgdG8gdXNlLgoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gdXNlIGxvb2t1cCB0YWJsZSwgR1RfRkFMU0UgdG8gdXNlIFhPUi4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRIYXNoVHJ1bmsKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0SGFzaFRydW5rCioKKiBERVNDUklQVElPTjoKKgkJSGFzaCBEQSAmIFNBIGZvciBUcnVua01hc2sgc2VsZWN0aW9uLiBUcnVuayBsb2FkIGJhbGFuY2luZyBpcyBhY2NvbXBsaXNoZWQgCioJCWJ5IHVzaW5nIHRoZSBmcmFtZSdzIERBIGFuZCBTQSBmaWVsZHMgdG8gYWNjZXNzIG9uZSBvZiBlaWdodCBUcnVuayBNYXNrcy4gCioJCVdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lLCB0aGUgaGFzaGVkIGNvbXB1dGVkIGZvciBhZGRyZXNzIHRhYmxlIAoqCQlsb29rdXBzIGlzIHVzZWQgZm9yIHRoZSBUcnVua01hc2sgc2VsZWN0aW9uLiBXaGVuIHRoaXMgYml0IGlzIGNsZWFyZWQgdG8gCioJCWEgemVybyB0aGUgbG93ZXIgMyBiaXRzIG9mIHRoZSBmcmFtZSdzIERBIGFuZCBTQSBhcmUgWE9SJ2VkIHRvZ2V0aGVyIHRvIAoqCQlzZWxlY3QgdGhlIFRydW5rTWFzayB0byB1c2UuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gdXNlIGxvb2t1cCB0YWJsZSwgR1RfRkFMU0UgdG8gdXNlIFhPUi4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEhhc2hUcnVuawooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTCAgCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0VHJ1bmtSb3V0aW5nCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyBmdW5jdGlvbiBzZXRzIHJvdXRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBUcnVuayBJRC4KKgoqIElOUFVUUzoKKgkJdHJ1bmtJZCAtIFRydW5rIElELgoqCQl0cnVua1JvdXRlIC0gVHJ1bmsgcm91dGUgYml0cy4gQml0IDAgY29udHJvbHMgdHJ1bmsgcm91dGluZyBmb3IgcG9ydCAwLAoqCQkJCQliaXQgMSBmb3IgcG9ydCAxICwgZXRjLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiB0cnVua0lkID4gMHhGIG9yIHRydW5rUm91dGUgPiAweDdGRihvciBwb3J0IHZlY3RvcikuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0VHJ1bmtSb3V0aW5nCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfVTMyICAJCXRydW5rSWQsCglJTiBHVF9VMzIJCXRydW5rUm91dGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFRydW5rUm91dGluZwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHJvdXRpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBUcnVuayBJRC4KKgoqIElOUFVUUzoKKgkJdHJ1bmtJZCAtIFRydW5rIElELgoqCiogT1VUUFVUUzoKKgkJdHJ1bmtSb3V0ZSAtIFRydW5rIHJvdXRlIGJpdHMuIEJpdCAwIGNvbnRyb2xzIHRydW5rIHJvdXRpbmcgZm9yIHBvcnQgMCwKKgkJCQkJYml0IDEgZm9yIHBvcnQgMSAsIGV0Yy4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiB0cnVua0lkID4gMHhGLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFRydW5rUm91dGluZwooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfVTMyIAkJdHJ1bmtJZCwKCU9VVCBHVF9VMzIJCSp0cnVua1JvdXRlCik7CgoKCi8qIFByb3RvdHlwZSBhZGRlZCBmb3IgODhFNjA5NSBSZXYgMSBvciBSZXYgMiAqLwoKLyogZ3RQb3J0Q3RybC5jICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldERpc2NhcmRCQ2FzdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBEaXNjYXJkIEJyb2FkY2FzdCBNb2RlLiBJZiB0aGUgbW9kZSBpcyBlbmFibGVkLAoqCQlhbGwgdGhlIGJyb2FkY2FzdCBmcmFtZXMgdG8gdGhlIGdpdmVuIHBvcnQgd2lsbCBiZSBkaXNjYXJkZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSwgaWYgZW5hYmxlZCwKKgkJCSBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldERpc2NhcmRCQ2FzdE1vZGUKKAoJSU4gIEdUX1FEX0RFViAgICAqZGV2LAoJSU4gIEdUX0xQT1JUICAgICBwb3J0LAoJT1VUIEdUX0JPT0wgCSAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldERpc2NhcmRCQ2FzdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBEaXNjYXJkIEJyb2FkY2FzdCBtb2RlLgoqCQlJZiB0aGUgbW9kZSBpcyBlbmFibGVkLCBhbGwgdGhlIGJyb2FkY2FzdCBmcmFtZXMgdG8gdGhlIGdpdmVuIHBvcnQgd2lsbCAKKgkJYmUgZGlzY2FyZGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCWVuIC0gR1RfVFJVRSwgdG8gZW5hYmxlIHRoZSBtb2RlLAoqCQkJIEdUX0ZBTFNFLCBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RGlzY2FyZEJDYXN0TW9kZQooCglJTiAgR1RfUURfREVWICAgICpkZXYsCglJTiAgR1RfTFBPUlQgICAgIHBvcnQsCglJTiAgR1RfQk9PTCAJIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRGQ09uUmF0ZUxpbWl0TW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHVybnMgbW9kZSB0aGF0IHRlbGxzIGlmIGluZ3Jlc3MgcmF0ZSBsaW1pdGluZyB1c2VzIEZsb3cgCioJCUNvbnRyb2wuIFdoZW4gdGhpcyBtb2RlIGlzIGVuYWJsZWQgYW5kIHRoZSBwb3J0IHJlY2VpdmVzIGZyYW1lcyBvdmVyIHRoZSAKKgkJbGltaXQsIEluZ3Jlc3MgUmF0ZSBMaW1pdGluZyB3aWxsIGJlIHBlcmZvcm1lZCBieSBzdGFsbGluZyB0aGUgCioJCWxpbmsgcGFydG5lciB1c2luZyBmbG93IGNvbnRyb2wsIGluc3RlYWQgb2YgZGlzY2FyZGluZyBmcmFtZXMuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSwgaWYgdGhlIG1vZGUgaXMgZW5hYmxlZCwKKgkJCSBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEZDT25SYXRlTGltaXRNb2RlCigKCUlOICBHVF9RRF9ERVYgICAgKmRldiwKCUlOICBHVF9MUE9SVCAgICAgcG9ydCwKCU9VVCBHVF9CT09MIAkgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRGQ09uUmF0ZUxpbWl0TW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIG1vZGUgdGhhdCB0ZWxscyBpZiBpbmdyZXNzIHJhdGUgbGltaXRpbmcgdXNlcyBGbG93IAoqCQlDb250cm9sLiBXaGVuIHRoaXMgbW9kZSBpcyBlbmFibGVkIGFuZCB0aGUgcG9ydCByZWNlaXZlcyBmcmFtZXMgb3ZlciB0aGUgCioJCWxpbWl0LCBJbmdyZXNzIFJhdGUgTGltaXRpbmcgd2lsbCBiZSBwZXJmb3JtZWQgYnkgc3RhbGxpbmcgdGhlIAoqCQlsaW5rIHBhcnRuZXIgdXNpbmcgZmxvdyBjb250cm9sLCBpbnN0ZWFkIG9mIGRpc2NhcmRpbmcgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCWVuIC0gR1RfVFJVRSwgdG8gZW5hYmxlIHRoZSBtb2RlLAoqCQkJIEdUX0ZBTFNFLCBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RkNPblJhdGVMaW1pdE1vZGUKKAoJSU4gIEdUX1FEX0RFViAgICAqZGV2LAoJSU4gIEdUX0xQT1JUICAgICBwb3J0LAoJSU4gIEdUX0JPT0wgCSBlbgopOwoKCi8qIGd0UG9ydFJhdGVDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjU2V0QnVyc3RSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgcG9ydCdzIGluZ3Jlc3MgZGF0YSBsaW1pdCBiYXNlZCBvbiBidXJzdCBzaXplLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIGJzaXplCS0gYnVyc3Qgc2l6ZS4KKiAgICAgICByYXRlICAgIC0gaW5ncmVzcyBkYXRhIHJhdGUgbGltaXQuIFRoZXNlIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciAKKgkJCQl0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGVkIGlzIHJlYWNoZWQgb3IgZXhjZWVkZWQuIAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycyAKKgkJCQkJCQkJTWluaW11bSByYXRlIGZvciBCdXJzdCBTaXplIDI0SyBieXRlIGlzIDEyOEticHMKKgkJCQkJCQkJTWluaW11bSByYXRlIGZvciBCdXJzdCBTaXplIDQ4SyBieXRlIGlzIDI1NkticHMKKgkJCQkJCQkJTWluaW11bSByYXRlIGZvciBCdXJzdCBTaXplIDk2SyBieXRlIGlzIDUxMkticHMKKgkJR1RfTk9UX1NVUFBPUlRFRCAgICAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCQlJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGJvdGggcHJpb3JpdHkgYmFzZWQgUmF0ZSBMaW1pdGluZyBhbmQgYnVyc3Qgc2l6ZQoqCQliYXNlZCBSYXRlIGxpbWl0aW5nLCB1c2VyIGhhcyB0byBtYW51YWxseSBjaGFuZ2UgdGhlIG1vZGUgdG8gYnVyc3Qgc2l6ZQoqCQliYXNlZCBSYXRlIGxpbWl0aW5nIGJ5IGNhbGxpbmcgZ3N5c1NldFJhdGVMaW1pdE1vZGUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldEJ1cnN0UmF0ZQooCiAgICBJTiBHVF9RRF9ERVYgICAgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgSU4gR1RfQlVSU1RfU0laRSAgIGJzaXplLAogICAgSU4gR1RfQlVSU1RfUkFURSAgIHJhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0QnVyc3RSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIHRoZSBwb3J0J3MgaW5ncmVzcyBkYXRhIGxpbWl0IGJhc2VkIG9uIGJ1cnN0IHNpemUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydAktIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIGJzaXplCS0gYnVyc3Qgc2l6ZS4KKiAgICAgICByYXRlICAgIC0gaW5ncmVzcyBkYXRhIHJhdGUgbGltaXQuIFRoZXNlIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciAKKgkJCQl0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGVkIGlzIHJlYWNoZWQgb3IgZXhjZWVkZWQuIAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldEJ1cnN0UmF0ZQooCiAgICBJTiAgR1RfUURfREVWICAgICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBPVVQgR1RfQlVSU1RfU0laRSAgICpic2l6ZSwKICAgIE9VVCBHVF9CVVJTVF9SQVRFICAgKnJhdGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldFRDUEJ1cnN0UmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQncyBUQ1AvSVAgaW5ncmVzcyBkYXRhIGxpbWl0IGJhc2VkIG9uIGJ1cnN0IHNpemUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydAktIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgcmF0ZSAgICAtIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IGZvciBUQ1AvSVAgcGFja2V0cy4gVGhlc2UgZnJhbWVzIHdpbGwgCioJCQkJYmUgZGlzY2FyZGVkIGFmdGVyIHRoZSBpbmdyZXNzIHJhdGUgc2VsZWN0ZWQgaXMgcmVhY2hlZCBvciBleGNlZWRlZC4gCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzIAoqCQkJCQkJCQlWYWxpZCByYXRlIGlzIEdUX0JVUlNUX05PX0xJTUlULCBvciBiZXR3ZWVuCioJCQkJCQkJCTY0S2JwcyBhbmQgMTUwMEticHMuCioJCUdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgkJSWYgdGhlIGRldmljZSBzdXBwb3J0cyBib3RoIHByaW9yaXR5IGJhc2VkIFJhdGUgTGltaXRpbmcgYW5kIGJ1cnN0IHNpemUKKgkJYmFzZWQgUmF0ZSBsaW1pdGluZywgdXNlciBoYXMgdG8gbWFudWFsbHkgY2hhbmdlIHRoZSBtb2RlIHRvIGJ1cnN0IHNpemUKKgkJYmFzZWQgUmF0ZSBsaW1pdGluZyBieSBjYWxsaW5nIGdzeXNTZXRSYXRlTGltaXRNb2RlLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRUQ1BCdXJzdFJhdGUKKAogICAgSU4gR1RfUURfREVWICAgICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOIEdUX0JVUlNUX1JBVEUgICByYXRlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRUQ1BCdXJzdFJhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0J3MgVENQL0lQIGluZ3Jlc3MgZGF0YSBsaW1pdCBiYXNlZCBvbiBidXJzdCBzaXplLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICByYXRlICAgIC0gaW5ncmVzcyBkYXRhIHJhdGUgbGltaXQgZm9yIFRDUC9JUCBwYWNrZXRzLiBUaGVzZSBmcmFtZXMgd2lsbCAKKgkJCQliZSBkaXNjYXJkZWQgYWZ0ZXIgdGhlIGluZ3Jlc3MgcmF0ZSBzZWxlY3RlZCBpcyByZWFjaGVkIG9yIGV4Y2VlZGVkLiAKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfVkFMVUUgICAgICAgIC0gcmVnaXN0ZXIgdmFsdWUgaXMgbm90IGtub3duCioJCUdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgkJSWYgdGhlIGRldmljZSBzdXBwb3J0cyBib3RoIHByaW9yaXR5IGJhc2VkIFJhdGUgTGltaXRpbmcgYW5kIGJ1cnN0IHNpemUKKgkJYmFzZWQgUmF0ZSBsaW1pdGluZywgdXNlciBoYXMgdG8gbWFudWFsbHkgY2hhbmdlIHRoZSBtb2RlIHRvIGJ1cnN0IHNpemUKKgkJYmFzZWQgUmF0ZSBsaW1pdGluZyBieSBjYWxsaW5nIGdzeXNTZXRSYXRlTGltaXRNb2RlLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRUQ1BCdXJzdFJhdGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgT1VUIEdUX0JVUlNUX1JBVEUgICAqcmF0ZQopOwoKCi8qIGd0U3lzQ3RybC5jICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFJhdGVMaW1pdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlJbmdyZXNzIFJhdGUgTGltaXRpbmcgY2FuIGJlIGVpdGhlciBQcmlvcml0eSBiYXNlZCBvciBCdXJzdCBTaXplIGJhc2VkLgoqCQlUaGlzIHJvdXRpbmUgc2V0cyB3aGljaCBtb2RlIHRvIHVzZS4KKgoqIElOUFVUUzoKKgkJbW9kZSAtIGVpdGhlciBHVF9SQVRFX1BSSV9CQVNFIG9yIEdUX1JBVEVfQlVSU1RfQkFTRQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIG1vZGUgaXMgdXNlZC4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRSYXRlTGltaXRNb2RlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfSU5HUkVTU19SQVRFX01PREUgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0UmF0ZUxpbWl0TW9kZQoqCiogREVTQ1JJUFRJT046CioJCUluZ3Jlc3MgUmF0ZSBMaW1pdGluZyBjYW4gYmUgZWl0aGVyIFByaW9yaXR5IGJhc2VkIG9yIEJ1cnN0IFNpemUgYmFzZWQuCioJCVRoaXMgcm91dGluZSBnZXRzIHdoaWNoIG1vZGUgaXMgYmVpbmcgdXNlZC4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBlaXRoZXIgR1RfUkFURV9QUklfQkFTRSBvciBHVF9SQVRFX0JVUlNUX0JBU0UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFJhdGVMaW1pdE1vZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0lOR1JFU1NfUkFURV9NT0RFICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRBZ2VJbnQKKgoqIERFU0NSSVBUSU9OOgoqCQlFbmFibGUvRGlzYWJsZSBBZ2UgUmVmcmVzaCBJbnRlcnJ1cHQuIElmIENQVSBEaXJlY3RlZCBMZWFybmluZyBpcyBiZWluZwoqCQl1c2VkIChncHJ0U2V0TG9ja2VkUG9ydCksIGl0IG1heSBiZSBkZXNpcmFibGUgdG8ga25vdyB3aGVuIGFuIGFkZHJlc3MgaXMKKgkJc3RpbGwgYmVpbmcgdXNlZCBiZWZvcmUgaXQgdG90YWxseSBhZ2VzIG91dCBvZiB0aGUgc3dpdGNoLiBUaGlzIGNhbiBiZSAKKgkJYWNjb21wbGlzaGVkIGJ5IGVuYWJsaW5nIEFnZSBSZWZyZXNoIEludGVycnVwdCAob3IgQVRVIEFnZSBWaW9sYXRpb24gSW50KS4KKgkJQW4gQVRVIEFnZSBWaW9sYXRpb24gbG9va3MgaWRlbnRpY2FsIHRvIGFuZCByZXBvcnRlZCB0aGUgc2FtZSBhcyBhbiBBVFUgCioJCU1pc3MgVmlvbGF0aW9uLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHdoZW4gdGhpcyByZXBvcnRlZC4gTm9ybWFsIEFUVSBNaXNzCioJCVZpb2xhdGlvbiBvbmx5IG9jY3VyIGlmIGEgbmV3IFNBIGFycml2ZXMgYXQgYSBMb2NrZWRQb3J0LiBUaGUgQWdlIHZlcnNpb24gCioJCW9mIHRoZSBBVFUgTWlzcyBWaW9sYXRpb24gb2NjdXJzIGlmIGFuIFNBIGFycml2ZXMgYXQgYSBMb2NrZWRQb3J0LCB3aGVyZQoqCQl0aGUgYWRkcmVzcyBpcyBjb250YWluZWQgaW4gdGhlIEFUVSdzIGRhdGFiYXNlLCBidXQgd2hlcmUgaXRzIEVudHJ5U3RhdGUgCioJCWlzIGxlc3MgdGhhbiAweDQgKGkuZS4sIGl0IGhhcyBhZ2VkIG1vcmUgdGhhbiAxLzIgd2F5KS4KKgkJR1RfQVRVX1BST0IgSW50ZXJydXB0IHNob3VsZCBiZSBlbmFibGVkIGZvciB0aGlzIGludGVycnVwdCB0byBvY2N1ci4KKgkJUmVmZXIgdG8gZXZlbnRTZXRBY3RpdmUgcm91dGluZSB0byBlbmFibGUgR1RfQVRVX1BST0IuCioJCQoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUsIHRvIGVuYWJsZSwKKgkJCSBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEFnZUludAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRBZ2VJbnQKKgoqIERFU0NSSVBUSU9OOgoqCQlHZXQgc3RhdGUgb2YgQWdlIFJlZnJlc2ggSW50ZXJydXB0IG1vZGUuIElmIENQVSBEaXJlY3RlZCBMZWFybmluZyBpcyBiZWluZwoqCQl1c2VkIChncHJ0U2V0TG9ja2VkUG9ydCksIGl0IG1heSBiZSBkZXNpcmFibGUgdG8ga25vdyB3aGVuIGFuIGFkZHJlc3MgaXMKKgkJc3RpbGwgYmVpbmcgdXNlZCBiZWZvcmUgaXQgdG90YWxseSBhZ2VzIG91dCBvZiB0aGUgc3dpdGNoLiBUaGlzIGNhbiBiZSAKKgkJYWNjb21wbGlzaGVkIGJ5IGVuYWJsaW5nIEFnZSBSZWZyZXNoIEludGVycnVwdCAob3IgQVRVIEFnZSBWaW9sYXRpb24gSW50KS4KKgkJQW4gQVRVIEFnZSBWaW9sYXRpb24gbG9va3MgaWRlbnRpY2FsIHRvIGFuZCByZXBvcnRlZCB0aGUgc2FtZSBhcyBhbiBBVFUgCioJCU1pc3MgVmlvbGF0aW9uLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHdoZW4gdGhpcyByZXBvcnRlZC4gTm9ybWFsIEFUVSBNaXNzCioJCVZpb2xhdGlvbiBvbmx5IG9jY3VyIGlmIGEgbmV3IFNBIGFycml2ZXMgYXQgYSBMb2NrZWRQb3J0LiBUaGUgQWdlIHZlcnNpb24gCioJCW9mIHRoZSBBVFUgTWlzcyBWaW9sYXRpb24gb2NjdXJzIGlmIGFuIFNBIGFycml2ZXMgYXQgYSBMb2NrZWRQb3J0LCB3aGVyZQoqCQl0aGUgYWRkcmVzcyBpcyBjb250YWluZWQgaW4gdGhlIEFUVSdzIGRhdGFiYXNlLCBidXQgd2hlcmUgaXRzIEVudHJ5U3RhdGUgCioJCWlzIGxlc3MgdGhhbiAweDQgKGkuZS4sIGl0IGhhcyBhZ2VkIG1vcmUgdGhhbiAxLzIgd2F5KS4KKgkJR1RfQVRVX1BST0IgSW50ZXJydXB0IHNob3VsZCBiZSBlbmFibGVkIGZvciB0aGlzIGludGVycnVwdCB0byBvY2N1ci4KKgkJUmVmZXIgdG8gZXZlbnRTZXRBY3RpdmUgcm91dGluZSB0byBlbmFibGUgR1RfQVRVX1BST0IuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUsIGlmIGVuYWJsZWQsCioJCQkgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEFnZUludAooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTAkJKmVuCik7CgoKLyogRm9yIFplcGh5ciAqLwoKLyogZ3RQaHlDdHJsLmMgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UGh5TGlua1N0YXR1cwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyB0aGUgTGluayBzdGF0dXMuCioKKiBJTlBVVFM6CiogCQlwb3J0IAktIFRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgIGxpbmtTdGF0dXMgLSBHVF9GQUxTRSBpZiBsaW5rIGlzIG5vdCBlc3RhYmxpc2hlZCwKKgkJCQkgICAgIEdUX1RSVUUgaWYgbGluayBpcyBlc3RhYmxpc2hlZC4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFBoeUxpbmtTdGF0dXMKKAoJSU4gR1RfUURfREVWICpkZXYsCglJTiBHVF9MUE9SVCAgcG9ydCwKICAgIElOIEdUX0JPT0wgCSAqbGlua1N0YXR1cwopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBrdEdlbkVuYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMgb3IgZGlzYWJsZXMgUGFja2V0IEdlbmVyYXRvci4KKiAgICAgICBMaW5rIHNob3VsZCBiZSBlc3RhYmxpc2hlZCBmaXJzdCBwcmlvciB0byBlbmFibGluZyB0aGUgcGFja2V0IGdlbmVyYXRvciwKKiAgICAgICBhbmQgZ2VuZXJhdG9yIHdpbGwgZ2VuZXJhdGUgcGFja2V0cyBhdCB0aGUgc3BlZWQgb2YgdGhlIGVzdGFibGlzaGVkIGxpbmsuCioJCVdoZW4gZW5hYmxlcyBwYWNrZXQgZ2VuZXJhdG9yLCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHNob3VsZCBiZSAKKiAgICAgICBwcm92aWRlZDoKKiAgICAgICAgICAgUGF5bG9hZCBUeXBlOiAgZWl0aGVyIFJhbmRvbSBvciA1QUE1NUFBNQoqICAgICAgICAgICBQYWNrZXQgTGVuZ3RoOiBlaXRoZXIgNjQgb3IgMTUxNCBieXRlcwoqICAgICAgICAgICBFcnJvciBQYWNrZXQ6ICBlaXRoZXIgRXJyb3IgcGFja2V0IG9yIG5vcm1hbCBwYWNrZXQKKgoqIElOUFVUUzoKKiAJCXBvcnQgCS0gVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICBlbiAgICAgIC0gR1RfVFJVRSB0byBlbmFibGUsIEdUX0ZBTFNFIHRvIGRpc2FibGUKKiAgICAgICBwa3RJbmZvIC0gcGFja2V0IGluZm9ybWF0aW9uKEdUX1BHIHN0cnVjdHVyZSBwb2ludGVyKSwgaWYgZW4gaXMgR1RfVFJVRS4KKiAgICAgICAgICAgICAgICAgaWdub3JlZCwgaWYgZW4gaXMgR1RfRkFMU0UKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFBrdEdlbkVuYWJsZQooCglJTiBHVF9RRF9ERVYgKmRldiwKCUlOIEdUX0xQT1JUICBwb3J0LAogICAgSU4gR1RfQk9PTCAgIGVuLAogICAgSU4gR1RfUEcgICAgICpwa3RJbmZvCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRTZXJkZXNNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgU2VyZGVzIEludGVyZmFjZSBNb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgICAgLSBTZXJkZXMgSW50ZXJmYWNlIE1vZGUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0U2VyZGVzTW9kZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCglJTiAgR1RfU0VSREVTX01PREUgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFNlcmRlc01vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIFNlcmRlcyBJbnRlcmZhY2UgTW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgIG1vZGUgICAgLSBTZXJkZXMgSW50ZXJmYWNlIE1vZGUKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFNlcmRlc01vZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAoJSU4gIEdUX1NFUkRFU19NT0RFIG1vZGUKKTsKCgovKiBndFN5c0N0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Rm9yY2VTbm9vcFByaQoqCiogREVTQ1JJUFRJT046CioJCUZvcmNlIFNub29waW5nIFByaW9yaXR5LiBUaGUgcHJpb3JpdHkgb24gSUdNUCBvciBNTEQgU25vb3AgZnJhbWVzIGFyZQoqCQlzZXQgdG8gdGhlIFNub29wUHJpIHZhbHVlIChnc3lzU2V0U25vb3BQcmkgQVBJKSB3aGVuIEZvcmNlIFNub29waW5nCiogICAgICAgUHJpb3JpdHkgaXMgZW5hYmxlZC4gV2hlbiBpdCdzIGRpc2FibGVkLCB0aGUgcHJpb3JpdHkgb24gdGhlc2UgZnJhbWVzCioJCWlzIG5vdCBtb2RpZmllZC4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIHVzZSBkZWZpbmVkIFBSSSBiaXRzLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Rm9yY2VTbm9vcFByaQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRGb3JjZVNub29wUHJpCioKKiBERVNDUklQVElPTjoKKgkJRm9yY2UgU25vb3BpbmcgUHJpb3JpdHkuIFRoZSBwcmlvcml0eSBvbiBJR01QIG9yIE1MRCBTbm9vcCBmcmFtZXMgYXJlCioJCXNldCB0byB0aGUgU25vb3BQcmkgdmFsdWUgKGdzeXNTZXRTbm9vcFByaSBBUEkpIHdoZW4gRm9yY2UgU25vb3BpbmcKKiAgICAgICBQcmlvcml0eSBpcyBlbmFibGVkLiBXaGVuIGl0J3MgZGlzYWJsZWQsIHRoZSBwcmlvcml0eSBvbiB0aGVzZSBmcmFtZXMKKgkJaXMgbm90IG1vZGlmaWVkLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIHVzZSBkZWZpbmVkIFBSSSBiaXRzLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRGb3JjZVNub29wUHJpCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9CT09MICAJKmVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0U25vb3BQcmkKKgoqIERFU0NSSVBUSU9OOgoqCQlTbm9vcCBQcmlvcml0eS4gV2hlbiBGb3JjZVNub29wUHJpIChnc3lzU2V0Rm9yY2VTbm9vcFByaSBBUEkpIGlzIGVuYWJsZWQsCiogICAgICAgdGhpcyBwcmlvcml0eSBpcyB1c2VkIGFzIHRoZSBlZ3Jlc3NpbmcgZnJhbWUncyBQUklbMjowXSBiaXRzIG9uIGdlbmVyYXRlZAoqICAgICAgIE1hcnZlbGwgVGFnIFRvX0NQVSBTbm9vcCBmcmFtZXMgYW5kIGhpZ2hlciAyIGJpdHMgb2YgdGhlIHByaW9yaXR5IGFyZQoqICAgICAgIHVzZWQgYXMgdGhlIGludGVybmFsIFF1ZXVlIFByaW9yaXR5IHRvIHVzZSBvbiBJR01QL01MRCBzbm9vcCBmcmFtZXMuCioKKiBJTlBVVFM6CioJCXByaSAtIFBSSVsyOjBdIGJpdHMgKHNob3VsZCBiZSBsZXNzIHRoYW4gOCkKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gSWYgcHJpIGlzIG5vdCBsZXNzIHRoYW4gOC4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRTbm9vcFByaQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX1UxNgkJcHJpCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0U25vb3BQcmkKKgoqIERFU0NSSVBUSU9OOgoqCQlTbm9vcCBQcmlvcml0eS4gV2hlbiBGb3JjZVNub29wUHJpIChnc3lzU2V0Rm9yY2VTbm9vcFByaSBBUEkpIGlzIGVuYWJsZWQsCiogICAgICAgdGhpcyBwcmlvcml0eSBpcyB1c2VkIGFzIHRoZSBlZ3Jlc3NpbmcgZnJhbWUncyBQUklbMjowXSBiaXRzIG9uIGdlbmVyYXRlZAoqICAgICAgIE1hcnZlbGwgVGFnIFRvX0NQVSBTbm9vcCBmcmFtZXMgYW5kIGhpZ2hlciAyIGJpdHMgb2YgdGhlIHByaW9yaXR5IGFyZQoqICAgICAgIHVzZWQgYXMgdGhlIGludGVybmFsIFF1ZXVlIFByaW9yaXR5IHRvIHVzZSBvbiBJR01QL01MRCBzbm9vcCBmcmFtZXMuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlwcmkgLSBQUklbMjowXSBiaXRzIChzaG91bGQgYmUgbGVzcyB0aGFuIDgpCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRTbm9vcFByaQooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfVTE2ICAJKnByaQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEZvcmNlQVJQUHJpCioKKiBERVNDUklQVElPTjoKKgkJRm9yY2UgQVJQIFByaW9yaXR5LiBUaGUgcHJpb3JpdHkgb24gQVJQIGZyYW1lcyBhcmUgc2V0IHRvIHRoZSBBUlBQcmkgCiogICAgICAgdmFsdWUgKGdzeXNTZXRBUlBQcmkgQVBJKSB3aGVuIEZvcmNlIEFSUCBQcmlvcml0eSBpcyBlbmFibGVkLiBXaGVuIGl0J3MgCiogICAgICAgZGlzYWJsZWQsIHRoZSBwcmlvcml0eSBvbiB0aGVzZSBmcmFtZXMgaXMgbm90IG1vZGlmaWVkLgoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gdXNlIGRlZmluZWQgUFJJIGJpdHMsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRGb3JjZUFSUFByaQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRGb3JjZUFSUFByaQoqCiogREVTQ1JJUFRJT046CioJCUZvcmNlIEFSUCBQcmlvcml0eS4gVGhlIHByaW9yaXR5IG9uIEFSUCBmcmFtZXMgYXJlIHNldCB0byB0aGUgQVJQUHJpIAoqICAgICAgIHZhbHVlIChnc3lzU2V0QVJQUHJpIEFQSSkgd2hlbiBGb3JjZSBBUlAgUHJpb3JpdHkgaXMgZW5hYmxlZC4gV2hlbiBpdCdzIAoqICAgICAgIGRpc2FibGVkLCB0aGUgcHJpb3JpdHkgb24gdGhlc2UgZnJhbWVzIGlzIG5vdCBtb2RpZmllZC4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byB1c2UgZGVmaW5lZCBQUkkgYml0cywgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Rm9yY2VBUlBQcmkKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wgIAkqZW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRBUlBQcmkKKgoqIERFU0NSSVBUSU9OOgoqCQlBUlAgUHJpb3JpdHkuIFdoZW4gRm9yY2VBUlBQcmkgKGdzeXNTZXRGb3JjZUFSUFByaSBBUEkpIGlzIGVuYWJsZWQsCiogICAgICAgdGhpcyBwcmlvcml0eSBpcyB1c2VkIGFzIHRoZSBlZ3Jlc3NpbmcgZnJhbWUncyBQUklbMjowXSBiaXRzIG9uIGdlbmVyYXRlZAoqICAgICAgIE1hcnZlbGwgVGFnIFRvX0NQVSBBUlAgZnJhbWVzIGFuZCBoaWdoZXIgMiBiaXRzIG9mIHRoZSBwcmlvcml0eSBhcmUKKiAgICAgICB1c2VkIGFzIHRoZSBpbnRlcm5hbCBRdWV1ZSBQcmlvcml0eSB0byB1c2Ugb24gQVJQIGZyYW1lcy4KKgoqIElOUFVUUzoKKgkJcHJpIC0gUFJJWzI6MF0gYml0cyAoc2hvdWxkIGJlIGxlc3MgdGhhbiA4KQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBJZiBwcmkgaXMgbm90IGxlc3MgdGhhbiA4LgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEFSUFByaQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX1UxNgkJcHJpCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0QVJQUHJpCioKKiBERVNDUklQVElPTjoKKgkJQVJQIFByaW9yaXR5LiBXaGVuIEZvcmNlQVJQUHJpIChnc3lzU2V0Rm9yY2VBUlBQcmkgQVBJKSBpcyBlbmFibGVkLAoqICAgICAgIHRoaXMgcHJpb3JpdHkgaXMgdXNlZCBhcyB0aGUgZWdyZXNzaW5nIGZyYW1lJ3MgUFJJWzI6MF0gYml0cyBvbiBnZW5lcmF0ZWQKKiAgICAgICBNYXJ2ZWxsIFRhZyBUb19DUFUgQVJQIGZyYW1lcyBhbmQgaGlnaGVyIDIgYml0cyBvZiB0aGUgcHJpb3JpdHkgYXJlCiogICAgICAgdXNlZCBhcyB0aGUgaW50ZXJuYWwgUXVldWUgUHJpb3JpdHkgdG8gdXNlIG9uIEFSUCBmcmFtZXMuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlwcmkgLSBQUklbMjowXSBiaXRzIChzaG91bGQgYmUgbGVzcyB0aGFuIDgpCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRBUlBQcmkKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX1UxNiAgCSpwcmkKKTsKCgovKiBhZGRlZCBmb3IgODhFNjA2NSAqLwoKLyogZ3RCcmdWbGFuLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5TZXRGb3JjZU1hcAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgRm9yY2UgTWFwIGZlYXR1cmUuCioJCVdoZW4gRm9yY2UgTWFwIGZlYXR1cmUgaXMgZW5hYmxlZCwgYWxsIHJlY2VpdmVkIGZyYW1lcyB3aWxsIGJlCioJCWNvbnNpZGVyZWQgTUdNVCBhbmQgdGhleSBhcmUgbWFwcGVkIHRvIHRoZSBwb3J0IG9yIHBvcnRzIGRlZmluZWQKKgkJaW4gdGhlIFZMQU4gVGFibGUgb3ZlcnJpZGluZyB0aGUgbWFwcGluZyBmcm9tIHRoZSBhZGRyZXNzIGRhdGFiYXNlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIHNldC4KKiAgICAgICBtb2RlICAgIC0gR1RfVFJVRSwgdG8gZW5hYmxlIGZvcmNlIG1hcCBmZWF0dXJlCiogICAgICAgICAgICAgICAgIEdUX0ZBVUxTRSwgb3RoZXJ3aXNlIAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsblNldEZvcmNlTWFwCigKICAgIElOICBHVF9RRF9ERVYgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUIAlwb3J0LAogICAgSU4gIEdUX0JPT0wgIAltb2RlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZsbkdldEZvcmNlTWFwCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIEZvcmNlIE1hcCBmZWF0dXJlIGlzIGVuYWJsZWQuCioJCVdoZW4gRm9yY2UgTWFwIGZlYXR1cmUgaXMgZW5hYmxlZCwgYWxsIHJlY2VpdmVkIGZyYW1lcyB3aWxsIGJlCioJCWNvbnNpZGVyZWQgTUdNVCBhbmQgdGhleSBhcmUgbWFwcGVkIHRvIHRoZSBwb3J0IG9yIHBvcnRzIGRlZmluZWQKKgkJaW4gdGhlIFZMQU4gVGFibGUgb3ZlcnJpZGluZyB0aGUgbWFwcGluZyBmcm9tIHRoZSBhZGRyZXNzIGRhdGFiYXNlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIHNldC4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAgICAtIEdUX1RSVUUsIHRvIGVuYWJsZSBmb3JjZSBtYXAgZmVhdHVyZQoqICAgICAgICAgICAgICAgICBHVF9GQVVMU0UsIG90aGVyd2lzZSAKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5HZXRGb3JjZU1hcAooCiAgICBJTiAgR1RfUURfREVWICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAJcG9ydCwKICAgIE9VVCBHVF9CT09MICAJKm1vZGUKKTsKCi8qIGd0RXZlbnRzLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2V2ZW50U2V0QWdlSW50RW4KKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyBBZ2UgSW50ZXJydXB0IGZvciBhIHBvcnQuCioJCVdoZW4gaXQncyBlbmFibGVkLCBBVFUgQWdlIFZpb2xhdGlvbiBpbnRlcnJ1cHRzIGZyb20gdGhpcyBwb3J0IGFyZSBlbmFibGVkLgoqCQlBbiBBZ2UgVmlvbGF0aW9uIHdpbGwgb2NjdXIgYW55dGltZSBhIHBvcnQgaXMgTG9ja2VkKGdwcnRTZXRMb2NrZWRQb3J0KSAKKgkJYW5kIHRoZSBpbmdyZXNzaW5nIGZyYW1lJ3MgU0EgaXMgY29udGFpbmVkIGluIHRoZSBBVFUgYXMgYSBub24tU3RhdGljIAoqCQllbnRyeSB3aXRoIGEgRW50cnlTdGF0ZSBsZXNzIHRoYW4gMHg0LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIEFnZSBJbnRlcnJ1cHQsCioJCQkgICBHVF9GQUxVU0UgdG8gZGlzYWJsZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdldmVudFNldEFnZUludEVuCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2V2ZW50R2V0QWdlSW50RW4KKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBBZ2UgSW50ZXJydXB0IEVuYWJsZSBmb3IgdGhlIHBvcnQuCioJCVdoZW4gaXQncyBlbmFibGVkLCBBVFUgQWdlIFZpb2xhdGlvbiBpbnRlcnJ1cHRzIGZyb20gdGhpcyBwb3J0IGFyZSBlbmFibGVkLgoqCQlBbiBBZ2UgVmlvbGF0aW9uIHdpbGwgb2NjdXIgYW55dGltZSBhIHBvcnQgaXMgTG9ja2VkKGdwcnRTZXRMb2NrZWRQb3J0KSAKKgkJYW5kIHRoZSBpbmdyZXNzaW5nIGZyYW1lJ3MgU0EgaXMgY29udGFpbmVkIGluIHRoZSBBVFUgYXMgYSBub24tU3RhdGljIAoqCQllbnRyeSB3aXRoIGEgRW50cnlTdGF0ZSBsZXNzIHRoYW4gMHg0LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIEFnZSBJbnRlcnJ1cHQsCioJCQkgICBHVF9GQUxVU0UgdG8gZGlzYWJsZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdldmVudEdldEFnZUludEVuCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgoKLyogZ3RQSVJMLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmxBY3RpdmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGFjdGl2YXRlcyBJbmdyZXNzIFJhdGUgTGltaXRpbmcgZm9yIHRoZSBnaXZlbiBwb3J0cyBieSAKKgkJaW5pdGlhbGl6aW5nIGEgcmVzb3VyY2UgYnVja2V0LCBhc3NpZ25pbmcgcG9ydHMsIGFuZCBjb25maWd1cmluZwoqCQlCdWNrZXQgUGFyYW1ldGVycy4KKgoqIElOUFVUUzoKKgkJaXJsVW5pdCAgLSBidWNrZXQgdG8gYmUgdXNlZCAoMCB+IDExKS4KKiAgICAgICBwb3J0VmVjICAtIHRoZSBsaXN0IG9mIHBvcnRzIHRoYXQgc2hhcmUgdGhlIGJ1Y2tldC4KKgkJcGlybERhdGEgLSBQSVJMIHJlc291cmNlIHBhcmFtZXRlcnMuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybEFjdGl2YXRlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTMyCQlpcmxVbml0LAoJSU4gIEdUX1UzMgkJcG9ydFZlYywKCUlOICBHVF9QSVJMX0RBVEEJKnBpcmxEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwaXJsRGVhY3RpdmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGRlYWN0aXZhdGVzIEluZ3Jlc3MgUmF0ZSBMaW1pdGluZyBmb3IgdGhlIGdpdmVuIGJ1Y2tldC4KKgkJSXQgc2ltcGx5IHJlbW92ZXMgZXZlcnkgcG9ydHMgZnJvbSB0aGUgSW5ncmVzcyBSYXRlIFJlc291cmNlLgoqCQlJdCBpcyBhc3N1bWVkIHRoYXQgZ3BpcmxBY3RpdmF0ZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY2FsbGVkIHdpdGgKKgkJdGhlIGlybFVuaXQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgoqCiogSU5QVVRTOgoqCQlpcmxVbml0ICAtIGJ1Y2tldCB0byBiZSBkZWFjdGl2YXRlZAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BpcmxEZWFjdGl2YXRlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTMyCQlpcmxVbml0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwaXJsVXBkYXRlUGFyYW0KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSB1cGRhdGVzIElSTCBQYXJhbWV0ZXIuCioJCUl0IGlzIGFzc3VtZWQgdGhhdCBncGlybEFjdGl2YXRlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjYWxsZWQgd2l0aAoqCQl0aGUgZ2l2ZW4gaXJsVW5pdCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCioKKiBJTlBVVFM6CioJCWlybFVuaXQgIC0gYnVja2V0IHRvIGJlIHVzZWQgKDAgfiAxMSkKKgkJcGlybERhdGEgLSBQSVJMIHJlc291cmNlIHBhcmFtZXRlcnMKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwaXJsVXBkYXRlUGFyYW0KKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9VMzIJCWlybFVuaXQsCglJTiAgR1RfUElSTF9EQVRBCSpwaXJsRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGlybFJlYWRQYXJhbQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyBJUkwgUGFyYW1ldGVyLgoqCQlJdCBpcyBhc3N1bWVkIHRoYXQgZ3BpcmxBY3RpdmF0ZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY2FsbGVkIHdpdGgKKgkJdGhlIGdpdmVuIGlybFVuaXQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgoqCiogSU5QVVRTOgoqCQlpcmxVbml0ICAtIGJ1Y2tldCB0byBiZSB1c2VkICgwIH4gMTEpLgoqCiogT1VUUFVUUzoKKgkJcGlybERhdGEgLSBQSVJMIHJlc291cmNlIHBhcmFtZXRlcnMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybFJlYWRQYXJhbQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1UzMgkJaXJsVW5pdCwKCU9VVCBHVF9QSVJMX0RBVEEJKnBpcmxEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwaXJsVXBkYXRlUG9ydFZlYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHVwZGF0ZXMgcG9ydCBsaXN0IHRoYXQgc2hhcmUgdGhlIGJ1Y2tldC4KKgkJSXQgaXMgYXNzdW1lZCB0aGF0IGdwaXJsQWN0aXZhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNhbGxlZCB3aXRoCioJCXRoZSBnaXZlbiBpcmxVbml0IGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKgoqIElOUFVUUzoKKgkJaXJsVW5pdCAgLSBidWNrZXQgdG8gYmUgdXNlZCAoMCB+IDExKS4KKiAgICAgICBwb3J0VmVjICAtIHRoZSBsaXN0IG9mIHBvcnRzIHRoYXQgc2hhcmUgdGhlIGJ1Y2tldC4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwaXJsVXBkYXRlUG9ydFZlYwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1UzMgkJaXJsVW5pdCwKCUlOICBHVF9VMzIJCXBvcnRWZWMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmxSZWFkUG9ydFZlYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyBwb3J0IGxpc3QgdGhhdCBzaGFyZSB0aGUgYnVja2V0LgoqCQlJdCBpcyBhc3N1bWVkIHRoYXQgZ3BpcmxBY3RpdmF0ZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY2FsbGVkIHdpdGgKKgkJdGhlIGdpdmVuIGlybFVuaXQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgoqCiogSU5QVVRTOgoqCQlpcmxVbml0ICAtIGJ1Y2tldCB0byBiZSB1c2VkICgwIH4gMTEpLgoqCiogT1VUUFVUUzoKKiAgICAgICBwb3J0VmVjICAtIHRoZSBsaXN0IG9mIHBvcnRzIHRoYXQgc2hhcmUgdGhlIGJ1Y2tldC4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwaXJsUmVhZFBvcnRWZWMKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9VMzIJCWlybFVuaXQsCglPVVQgR1RfVTMyCQkqcG9ydFZlYwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRQaXJsRmNNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBQb3J0IEluZ3Jlc3MgUmF0ZSBMaW1pdCBGbG93IENvbnRyb2wgbW9kZS4KKgkJV2hlbiBFQlNMaW1pdEFjdGlvbiBpcyBwcm9ncmFtbWVkIHRvIGdlbmVyYXRlIGEgZmxvdyBjb250cm9sIG1lc3NhZ2UsIAoqCQl0aGUgZGVhc3NlcnRpb24gb2YgZmxvdyBjb250cm9sIGlzIGNvbnRyb2xsZWQgYnkgdGhpcyBtb2RlLgoqCQkJR1RfUElSTF9GQ19ERUFTU0VSVF9FTVBUWToKKgkJCQlEZS1hc3NlcnQgd2hlbiB0aGUgaW5ncmVzcyByYXRlIHJlc291cmNlIGhhcyBiZWNvbWUgZW1wdHkKKgkJCUdUX1BJUkxfRkNfREVBU1NFUlRfQ0JTX0xJTUlUCioJCQkJRGUtYXNzZXJ0IHdoZW4gdGhlIGluZ3Jlc3MgcmF0ZSByZXNvdXJjZSBoYXMgZW5vdWdoIHJvb20gYXMKKgkJCQlzcGVjaWZpZWQgYnkgdGhlIENCU0xpbWl0LgoqCQlQbGVhc2UgcmVmZXIgdG8gR1RfUElSTF9SRVNPVVJDRSBzdHJ1Y3R1cmUgZm9yIEVCU0xpbWl0QWN0aW9uIGFuZAoqCQlDQlNMaW1pdC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1BJUkxfRkNfREVBU1NFUlQgZW51bSB0eXBlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0UGlybEZjTW9kZQooCiAgICBJTiAgR1RfUURfREVWCSpkZXYsCiAgICBJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9QSVJMX0ZDX0RFQVNTRVJUCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGlybEdldEluZ3Jlc3NSYXRlUmVzb3VyY2UKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIEluZ3Jlc3MgUmF0ZSBMaW1pdGluZyBSZXNvdXJjZXMgYXNzaWduZWQgdG8gdGhlIHBvcnQuCioJCVRoaXMgdmVjdG9yIGlzIHVzZWQgdG8gYXR0YWNoIHNwZWNpZmljIGNvdW50ZXIgcmVzb3VyY2VzIHRvIHRoZSBwaHlzaWNhbAoqCQlwb3J0LiBBbmQgdGhlIHNhbWUgY291bnRlciByZXNvdXJjZSBjYW4gYmUgYXR0YWNoZWQgdG8gbW9yZSB0aGFuIG9uZSBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCXJlc1ZlYyAtIHJlc291cmNlIHZlY3RvciAoYml0IDAgZm9yIGlybCB1bml0IDAsIGJpdCAxIGZvciBpcmwgdW5pdCAxLCBldGMuKQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwaXJsR2V0SW5ncmVzc1JhdGVSZXNvdXJjZQooCiAgICBJTiAgR1RfUURfREVWCSpkZXYsCiAgICBJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9VMzIJCSpyZXNWZWMKKTsKCgoKLyogZ3RQb3J0U3RhdHVzLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFB4TW9kZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaXZlcyA0IGJpdHMgb2YgUHhfTU9ERSBDb25maWd1cmF0aW9uIHZhbHVlLgoqCQlJZiBzcGVlZCBhbmQgZHVwbGV4IG1vZGVzIGFyZSBmb3JjZWQsIHRoZSByZXR1cm5lZCBtb2RlIHZhbHVlIHdvdWxkIGJlCioJCWRpZmZlcmVudCBmcm9tIHRoZSBjb25maWd1cmF0aW9uIHBpbiB2YWx1ZXMuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBQeF9NT0RFIGNvbmZpZ3VyYXRpb24gdmFsdWUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFB4TW9kZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfVTMyICAJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldE1paUludGVyZmFjZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaXZlcyBNaWkgSW50ZXJmYWNlIE1vZGUuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBpZiBNaWkgSW50ZXJmYWNlIGlzIGVuYWJsZWQsCioJCQkJICBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRNaWlJbnRlcmZhY2UKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEZkRmxvd0RpcwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgcmVhZCB0aW1lIHZhbHVlIG9mIHRoZSBGdWxsIER1cGxleCBGbG93IERpc2FibGUuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBpZiBGdWxsIER1cGxleCBGbG93IERpc2FibGUuCioJICAgCQkgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0RmRGbG93RGlzCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRIZEZsb3dEaXMKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIHJlYWQgdGltZSB2YWx1ZSBvZiB0aGUgSGFsZiBEdXBsZXggRmxvdyBEaXNhYmxlLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgaWYgSGFsZiBEdXBsZXggRmxvdyBEaXNhYmxlLgoqCSAgIAkJICAgIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEhkRmxvd0RpcwooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0T3V0UVNpemUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBlZ3Jlc3MgcXVldWUgc2l6ZSBjb3VudGVyIHZhbHVlLgoqCQlUaGlzIGNvdW50ZXIgcmVmbGVjdHMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIEVncmVzcyBidWZmZXJzIHN3aXRjaGVkIHRvIAoqCQl0aGlzIHBvcnQuIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBidWZmZXJzIGFjcm9zcyBhbGwgZm91ciBwcmlvcml0eSAKKgkJcXVldWVzLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCWNvdW50IC0gZWdyZXNzIHF1ZXVlIHNpemUgY291bnRlciB2YWx1ZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldE91dFFTaXplCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX1UxNgkJKmNvdW50Cik7CgoKLyogZ3RQb3J0Q3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRTQUZpbHRlcmluZwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXQgdGhlIFNvdXJjZSBBZGRyZXNzKFNBKSBmaXRlcmluZyBtZXRob2QuCioJCQlHVF9TQV9GSUxURVJJTkdfRElTQUJMRSA6CioJCQkJbm8gZnJhbWUgd2lsbCBiZSBmaWx0ZXJlZC4KKgkJCUdUX1NBX0RST1BfT05fTE9DSyA6CioJCQkJZGlzY2FyZCBpZiBTQSBmaWVsZCBpcyBub3QgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2UuCioJCQlHVF9TQV9EUk9QX09OX1VOTE9DIDogCioJCQkJZGlzY2FyZCBpZiBTQSBmaWVsZCBpcyBpbiB0aGUgQVRVJ3MgYWRkcmVzcyBkYXRhYmFzZSBhcyBTdGF0aWMgCioJCQkJZW50cnkgd2l0aCBhIFBvcnRWZWMgb2YgYWxsIHplcm9zLgoqCQkJR1RfU0FfRFJPUF9UT19DUFUgOiAKKgkJCQlJbmdyZXNzaW5nIGZyYW1lcyB3aWxsIGJlIG1hcHBlZCB0byB0aGUgQ1BVIFBvcnQgaWYgdGhlaXIgU0EgCioJCQkJZmllbGQgaXMgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2UgYXMgU3RhdGljIGVudHJ5IHdpdGggYSAKKgkJCQlQb3J0VmVjIG9mIGFsbCB6ZXJvcy4gT3RoZXJ3aXNlLCB0aGUgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkIAoqCQkJCWlmIHRoZWlyIFNBIGZpZWxkIGlzIG5vdCBpbiB0aGUgQVRVJ3MgYWRkcmVzcyBkYXRhYmFzZSBvciBpZiB0aGlzCioJCQkJcG9ydCdzIGJpdCBpcyBub3Qgc2V0IGluIHRoZSBQb3J0VmVjIGJpdHMgZm9yIHRoZSBmcmFtZSdzIFNBLgoqCQkKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSBHVF9TQV9GSUxURVJJTkcgc3RydWN0dXJlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0U0FGaWx0ZXJpbmcKKAogICAgSU4gR1RfUURfREVWICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICBwb3J0LAogICAgSU4gR1RfU0FfRklMVEVSSU5HICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFNBRmlsdGVyaW5nCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgdGhlIFNvdXJjZSBBZGRyZXNzKFNBKSBmaXRlcmluZyBtZXRob2QuCioJCQlHVF9TQV9GSUxURVJJTkdfRElTQUJMRSA6CioJCQkJbm8gZnJhbWUgd2lsbCBiZSBmaWx0ZXJlZC4KKgkJCUdUX1NBX0RST1BfT05fTE9DSyA6CioJCQkJZGlzY2FyZCBpZiBTQSBmaWVsZCBpcyBub3QgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2UuCioJCQlHVF9TQV9EUk9QX09OX1VOTE9DIDogCioJCQkJZGlzY2FyZCBpZiBTQSBmaWVsZCBpcyBpbiB0aGUgQVRVJ3MgYWRkcmVzcyBkYXRhYmFzZSBhcyBTdGF0aWMgCioJCQkJZW50cnkgd2l0aCBhIFBvcnRWZWMgb2YgYWxsIHplcm9zLgoqCQkJR1RfU0FfRFJPUF9UT19DUFUgOiAKKgkJCQlJbmdyZXNzaW5nIGZyYW1lcyB3aWxsIGJlIG1hcHBlZCB0byB0aGUgQ1BVIFBvcnQgaWYgdGhlaXIgU0EgCioJCQkJZmllbGQgaXMgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2UgYXMgU3RhdGljIGVudHJ5IHdpdGggYSAKKgkJCQlQb3J0VmVjIG9mIGFsbCB6ZXJvcy4gT3RoZXJ3aXNlLCB0aGUgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkIAoqCQkJCWlmIHRoZWlyIFNBIGZpZWxkIGlzIG5vdCBpbiB0aGUgQVRVJ3MgYWRkcmVzcyBkYXRhYmFzZSBvciBpZiB0aGlzCioJCQkJcG9ydCdzIGJpdCBpcyBub3Qgc2V0IGluIHRoZSBQb3J0VmVjIGJpdHMgZm9yIHRoZSBmcmFtZSdzIFNBLgoqCQkKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfU0FfRklMVEVSSU5HIHN0cnVjdHVyZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFNBRmlsdGVyaW5nCigKICAgIElOICBHVF9RRF9ERVYgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICBwb3J0LAogICAgT1VUIEdUX1NBX0ZJTFRFUklORyAgICAqbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEFSUHRvQ1BVCioKKiBERVNDUklQVElPTjoKKgkJV2hlbiBBUlB0b0NQVSBpcyBzZXQgdG8gR1RfVFJVRSwgQVJQIGZyYW1lcyBhcmUgbWFwcGVkIHRvIHRoZSBDUFUgcG9ydC4KKgkJCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBtb2RlIC0gR1RfVFJVRSwgdG8gbWFwIEFSUCBmcmFtZXMgdG8gQ1BVIFBvcnQsCioJCQkgICBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEFSUHRvQ1BVCigKICAgIElOIEdUX1FEX0RFViAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEFSUHRvQ1BVCioKKiBERVNDUklQVElPTjoKKgkJV2hlbiBBUlB0b0NQVSBpcyBzZXQgdG8gR1RfVFJVRSwgQVJQIGZyYW1lcyBhcmUgbWFwcGVkIHRvIHRoZSBDUFUgcG9ydC4KKgkJCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUsIHRvIG1hcCBBUlAgZnJhbWVzIHRvIENQVSBQb3J0LAoqCQkJICAgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRBUlB0b0NQVQooCiAgICBJTiAgR1RfUURfREVWICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRFZ3Jlc3NGbG9vZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldCBFZ3Jlc3MgRmxvb2RpbmcgTW9kZS4KKgkJRnJhbWVzIHdpdGggdW5rbm93biBEQSAoRGVzdGluYXRpb24gQWRkcmVzcyB0aGF0IGlzIG5vdCBpbiBBVFUgZGF0YWJhc2UpCioJCWdlbmVyYWxseSBmbG9vZCBvdXQgYWxsIHRoZSBwb3J0cy4gVGhpcyBtb2RlIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQKKgkJdGhvc2UgZnJhbWVzIGZyb20gZWdyZXNzaW5nIHRoaXMgcG9ydCBhcyBmb2xsb3dzOgoqCQkJR1RfQkxPQ0tfRUdSRVNTX1VOS05PV04KKgkJCQlkbyBub3QgZWdyZXNzIGZyYW1lIHdpdGggdW5rbm93biBEQSAoYm90aCB1bmljYXN0IGFuZCBtdWx0aWNhc3QpCioJCQlHVF9CTE9DS19FR1JFU1NfVU5LTk9XTl9NVUxUSUNBU1QKKgkJCQlkbyBub3QgZWdyZXNzIGZyYW1lIHdpdGggdW5rbm93biBtdWx0aWNhc3QgREEKKgkJCUdUX0JMT0NLX0VHUkVTU19VTktOT1dOX1VOSUNBU1QKKgkJCQlkbyBub3QgZWdyZXNzIGZyYW1lIHdpdGggdW5rbm93biB1bmljYXN0IERBCioJCQlHVF9CTE9DS19FR1JFU1NfTk9ORQoqCQkJCWVncmVzcyBhbGwgZnJhbWVzIHdpdGggdW5rbm93biBEQQoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBtb2RlIC0gR1RfRUdSRVNTX0ZMT09EIHN0cnVjdHVyZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RWdyZXNzRmxvb2QKKAogICAgSU4gIEdUX1FEX0RFViAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiAgR1RfRUdSRVNTX0ZMT09EICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RWdyZXNzRmxvb2QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIEVncmVzcyBGbG9vZGluZyBNb2RlLgoqCQlGcmFtZXMgd2l0aCB1bmtub3duIERBIChEZXN0aW5hdGlvbiBBZGRyZXNzIHRoYXQgaXMgbm90IGluIEFUVSBkYXRhYmFzZSkKKgkJZ2VuZXJhbGx5IGZsb29kIG91dCBhbGwgdGhlIHBvcnRzLiBUaGlzIG1vZGUgY2FuIGJlIHVzZWQgdG8gcHJldmVudAoqCQl0aG9zZSBmcmFtZXMgZnJvbSBlZ3Jlc3NpbmcgdGhpcyBwb3J0IGFzIGZvbGxvd3M6CioJCQlHVF9CTE9DS19FR1JFU1NfVU5LTk9XTgoqCQkJCWRvIG5vdCBlZ3Jlc3MgZnJhbWUgd2l0aCB1bmtub3duIERBIChib3RoIHVuaWNhc3QgYW5kIG11bHRpY2FzdCkKKgkJCUdUX0JMT0NLX0VHUkVTU19VTktOT1dOX01VTFRJQ0FTVAoqCQkJCWRvIG5vdCBlZ3Jlc3MgZnJhbWUgd2l0aCB1bmtub3duIG11bHRpY2FzdCBEQQoqCQkJR1RfQkxPQ0tfRUdSRVNTX1VOS05PV05fVU5JQ0FTVAoqCQkJCWRvIG5vdCBlZ3Jlc3MgZnJhbWUgd2l0aCB1bmtub3duIHVuaWNhc3QgREEKKgkJCUdUX0JMT0NLX0VHUkVTU19OT05FCioJCQkJZWdyZXNzIGFsbCBmcmFtZXMgd2l0aCB1bmtub3duIERBCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfRUdSRVNTX0ZMT09EIHN0cnVjdHVyZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0RWdyZXNzRmxvb2QKKAogICAgSU4gIEdUX1FEX0RFViAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfRUdSRVNTX0ZMT09EICAgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBvcnRTY2hlZAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIFBvcnQgU2NoZWR1bGluZyBNb2RlLgoqCQlXaGVuIHVzZVBvcnRTY2hlZCBpcyBlbmFibGllZCwgdGhpcyBtb2RlIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBRdWV1ZQoqCQljb250cm9sbGVyJ3Mgc2NoZWR1bGluZyBvbiB0aGUgcG9ydCBhcyBmb2xsb3dzOgoqCQkJR1RfUE9SVF9TQ0hFRF9XRUlHSFRFRF9SUkIgLSB1c2UgOCw0LDIsMSB3ZWlnaHRlZCBmYWlyIHNjaGVkdWxpbmcKKgkJCUdUX1BPUlRfU0NIRURfU1RSSUNUX1BSSSAtIHVzZSBhIHN0cmljdCBwcmlvcml0eSBzY2hlbWUKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCW1vZGUgLSBHVF9QT1JUX1NDSEVEX01PREUgZW51bSB0eXBlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFBvcnRTY2hlZAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9QT1JUX1NDSEVEX01PREUJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBvcnRTY2hlZAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIFBvcnQgU2NoZWR1bGluZyBNb2RlLgoqCQlXaGVuIHVzZVBvcnRTY2hlZCBpcyBlbmFibGllZCwgdGhpcyBtb2RlIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBRdWV1ZQoqCQljb250cm9sbGVyJ3Mgc2NoZWR1bGluZyBvbiB0aGUgcG9ydCBhcyBmb2xsb3dzOgoqCQkJR1RfUE9SVF9TQ0hFRF9XRUlHSFRFRF9SUkIgLSB1c2UgOCw0LDIsMSB3ZWlnaHRlZCBmYWlyIHNjaGVkdWxpbmcKKgkJCUdUX1BPUlRfU0NIRURfU1RSSUNUX1BSSSAtIHVzZSBhIHN0cmljdCBwcmlvcml0eSBzY2hlbWUKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfUE9SVF9TQ0hFRF9NT0RFIGVudW0gdHlwZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFBvcnRTY2hlZAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9QT1JUX1NDSEVEX01PREUJCSptb2RlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UHJvdmlkZXJUYWcKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBQcm92aWRlciBUYWcgd2hpY2ggaW5kaWNhdGVzIHRoZSBwcm92aWRlciB0YWcgKEV0aGVyIAoqCQlUeXBlKSB2YWx1ZSB0aGF0IG5lZWRzIHRvIGJlIG1hdGNoZWQgdG8gaW4gaW5ncmVzcyB0byBkZXRlcm1pbmUgaWYgYQoqCQlmcmFtZSBpcyBQcm92aWRlciB0YWdnZWQgb3Igbm90LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJdGFnICAtIFByb3ZpZGVyIFRhZyAoRXRoZXIgVHlwZSkKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0UHJvdmlkZXJUYWcKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfVTE2CQl0YWcKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFByb3ZpZGVyVGFnCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgUHJvdmlkZXIgVGFnIHdoaWNoIGluZGljYXRlcyB0aGUgcHJvdmlkZXIgdGFnIChFdGhlciAKKgkJVHlwZSkgdmFsdWUgdGhhdCBuZWVkcyB0byBiZSBtYXRjaGVkIHRvIGluIGluZ3Jlc3MgdG8gZGV0ZXJtaW5lIGlmIGEKKgkJZnJhbWUgaXMgUHJvdmlkZXIgdGFnZ2VkIG9yIG5vdC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQl0YWcgIC0gUHJvdmlkZXIgVGFnIChFdGhlciBUeXBlKQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFByb3ZpZGVyVGFnCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX1UxNgkJKnRhZwopOwoKCgovKiBndFBvcnRSYXRlQ3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldFZpZE5ybEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyBWSUQgTm9uZSBSYXRlIExpbWl0IChOUkwpLgoqCQlXaGVuIFZJRCBOUkwgaXMgZW5hYmxlZCBhbmQgdGhlIGRldGVybWluZWQgVklEIG9mIGEgZnJhbWUgcmVzdWx0cyBpbiBhIFZJRAoqCQl3aG9zZSBWSUROb25SYXRlTGltaXQgaW4gdGhlIFZUVSBUYWJsZSBpcyBzZXQgdG8gR1RfVFVSRSwgdGhlbiB0aGUgZnJhbWUKKgkJd2lsbCBub3QgYmUgaW5ncmVzcyBub3IgZWdyZXNzIHJhdGUgbGltaXRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIFZJRCBOb25lIFJhdGUgTGltaXQKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldFZpZE5ybEVuCigKICAgIElOICBHVF9RRF9ERVYJKmRldiwKICAgIElOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0VmlkTnJsRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFZJRCBOb25lIFJhdGUgTGltaXQgKE5STCkgbW9kZS4KKgkJV2hlbiBWSUQgTlJMIGlzIGVuYWJsZWQgYW5kIHRoZSBkZXRlcm1pbmVkIFZJRCBvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYSBWSUQKKgkJd2hvc2UgVklETm9uUmF0ZUxpbWl0IGluIHRoZSBWVFUgVGFibGUgaXMgc2V0IHRvIEdUX1RVUkUsIHRoZW4gdGhlIGZyYW1lCioJCXdpbGwgbm90IGJlIGluZ3Jlc3Mgbm9yIGVncmVzcyByYXRlIGxpbWl0ZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgVklEIE5vbmUgUmF0ZSBMaW1pdAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0VmlkTnJsRW4KKAogICAgSU4gIEdUX1FEX0RFVgkqZGV2LAogICAgSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjU2V0U2FOcmxFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgU0EgTm9uZSBSYXRlIExpbWl0IChOUkwpLgoqCQlXaGVuIFNBIE5STCBpcyBlbmFibGVkIGFuZCB0aGUgc291cmNlIGFkZHJlc3Mgb2YgYSBmcmFtZSByZXN1bHRzIGluIGEgQVRVCioJCWhpdCB3aGVyZSB0aGUgU0EncyBNQUMgYWRkcmVzcyByZXR1cm5zIGFuIEVudHJ5U3RhdGUgdGhhdCBpbmRpY2F0ZXMgTm9uCioJCVJhdGUgTGltaXRlZCwgdGhlbiB0aGUgZnJhbWUgd2lsbCBub3QgYmUgaW5ncmVzcyBub3IgZWdyZXNzIHJhdGUgbGltaXRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIFNBIE5vbmUgUmF0ZSBMaW1pdAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0U2FOcmxFbgooCiAgICBJTiAgR1RfUURfREVWCSpkZXYsCiAgICBJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldFNhTnJsRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFNBIE5vbmUgUmF0ZSBMaW1pdCAoTlJMKSBtb2RlLgoqCQlXaGVuIFNBIE5STCBpcyBlbmFibGVkIGFuZCB0aGUgc291cmNlIGFkZHJlc3Mgb2YgYSBmcmFtZSByZXN1bHRzIGluIGEgQVRVCioJCWhpdCB3aGVyZSB0aGUgU0EncyBNQUMgYWRkcmVzcyByZXR1cm5zIGFuIEVudHJ5U3RhdGUgdGhhdCBpbmRpY2F0ZXMgTm9uCioJCVJhdGUgTGltaXRlZCwgdGhlbiB0aGUgZnJhbWUgd2lsbCBub3QgYmUgaW5ncmVzcyBub3IgZWdyZXNzIHJhdGUgbGltaXRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIHRvIGVuYWJsZSBTQSBOb25lIFJhdGUgTGltaXQKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldFNhTnJsRW4KKAogICAgSU4gIEdUX1FEX0RFVgkqZGV2LAogICAgSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjU2V0RGFOcmxFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgREEgTm9uZSBSYXRlIExpbWl0IChOUkwpLgoqCQlXaGVuIERBIE5STCBpcyBlbmFibGVkIGFuZCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiBhIGZyYW1lIHJlc3VsdHMgaW4gCioJCWEgQVRVIGhpdCB3aGVyZSB0aGUgREEncyBNQUMgYWRkcmVzcyByZXR1cm5zIGFuIEVudHJ5U3RhdGUgdGhhdCBpbmRpY2F0ZXMgCioJCU5vbiBSYXRlIExpbWl0ZWQsIHRoZW4gdGhlIGZyYW1lIHdpbGwgbm90IGJlIGluZ3Jlc3Mgbm9yIGVncmVzcyByYXRlIAoqCQlsaW1pdGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgREEgTm9uZSBSYXRlIExpbWl0CioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAgICAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXREYU5ybEVuCigKICAgIElOICBHVF9RRF9ERVYJKmRldiwKICAgIElOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0RGFOcmxFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgU0EgTm9uZSBSYXRlIExpbWl0IChOUkwpIG1vZGUuCioJCVdoZW4gREEgTlJMIGlzIGVuYWJsZWQgYW5kIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIGEgZnJhbWUgcmVzdWx0cyBpbiAKKgkJYSBBVFUgaGl0IHdoZXJlIHRoZSBEQSdzIE1BQyBhZGRyZXNzIHJldHVybnMgYW4gRW50cnlTdGF0ZSB0aGF0IGluZGljYXRlcyAKKgkJTm9uIFJhdGUgTGltaXRlZCwgdGhlbiB0aGUgZnJhbWUgd2lsbCBub3QgYmUgaW5ncmVzcyBub3IgZWdyZXNzIHJhdGUgCioJCWxpbWl0ZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgREEgTm9uZSBSYXRlIExpbWl0CioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAgICAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXREYU5ybEVuCigKICAgIElOICBHVF9RRF9ERVYJKmRldiwKICAgIElOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldEVMaW1pdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIEVncmVzcyBSYXRlIExpbWl0IGNvdW50aW5nIG1vZGUuCioJCVRoZSBzdXBwb3J0ZWQgbW9kZXMgYXJlIGFzIGZvbGxvd3M6CioJCQlHVF9QSVJMX0VMSU1JVF9GUkFNRSAtCioJCQkJQ291bnQgdGhlIG51bWJlciBvZiBmcmFtZXMKKgkJCUdUX1BJUkxfRUxJTUlUX0xBWUVSMSAtCioJCQkJQ291bnQgYWxsIExheWVyIDEgYnl0ZXM6IAoqCQkJCVByZWFtYmxlICg4Ynl0ZXMpICsgRnJhbWUncyBEQSB0byBDUkMgKyBJRkcgKDEyYnl0ZXMpCioJCQlHVF9QSVJMX0VMSU1JVF9MQVlFUjIgLQoqCQkJCUNvdW50IGFsbCBMYXllciAyIGJ5dGVzOiBGcmFtZSdzIERBIHRvIENSQwoqCQkJR1RfUElSTF9FTElNSVRfTEFZRVIxIC0KKgkJCQlDb3VudCBhbGwgTGF5ZXIgMSBieXRlczogCioJCQkJRnJhbWUncyBEQSB0byBDUkMgLSAxOCAtIDQgKGlmIGZyYW1lIGlzIHRhZ2dlZCkKKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlcgoqCQltb2RlIC0gR1RfUElSTF9FTElNSVRfTU9ERSBlbnVtIHR5cGUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAgICAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCQlHVF9QSVJMX0VMSU1JVF9GUkFNRSBtb2RlIGlzIHN1cHBvcnRlZCBieSBvbmx5IGEgZmV3IGRldmljZXMuCioJCVBsZWFzZSByZWZlciB0byB0aGUgZGV2aWNlIGRhdGFzaGVldCBmb3IgZGV0YWlscy4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0RUxpbWl0TW9kZQooCiAgICBJTiAgR1RfUURfREVWCSpkZXYsCiAgICBJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9QSVJMX0VMSU1JVF9NT0RFCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldEVMaW1pdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIEVncmVzcyBSYXRlIExpbWl0IGNvdW50aW5nIG1vZGUuCioJCVRoZSBzdXBwb3J0ZWQgbW9kZXMgYXJlIGFzIGZvbGxvd3M6CioJCQlHVF9QSVJMX0VMSU1JVF9GUkFNRSAtCioJCQkJQ291bnQgdGhlIG51bWJlciBvZiBmcmFtZXMKKgkJCUdUX1BJUkxfRUxJTUlUX0xBWUVSMSAtCioJCQkJQ291bnQgYWxsIExheWVyIDEgYnl0ZXM6IAoqCQkJCVByZWFtYmxlICg4Ynl0ZXMpICsgRnJhbWUncyBEQSB0byBDUkMgKyBJRkcgKDEyYnl0ZXMpCioJCQlHVF9QSVJMX0VMSU1JVF9MQVlFUjIgLQoqCQkJCUNvdW50IGFsbCBMYXllciAyIGJ5dGVzOiBGcmFtZSdzIERBIHRvIENSQwoqCQkJR1RfUElSTF9FTElNSVRfTEFZRVIxIC0KKgkJCQlDb3VudCBhbGwgTGF5ZXIgMSBieXRlczogCioJCQkJRnJhbWUncyBEQSB0byBDUkMgLSAxOCAtIDQgKGlmIGZyYW1lIGlzIHRhZ2dlZCkKKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1BJUkxfRUxJTUlUX01PREUgZW51bSB0eXBlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgkJR1RfUElSTF9FTElNSVRfRlJBTUUgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgb25seSBhIGZldyBkZXZpY2VzLgoqCQlQbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQgZm9yIGRldGFpbHMuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldEVMaW1pdE1vZGUKKAogICAgSU4gIEdUX1FEX0RFVgkqZGV2LAogICAgSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfUElSTF9FTElNSVRfTU9ERQkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjU2V0UnN2ZE5ybEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBSZXNlcnZlZCBOb24gUmF0ZSBMaW1pdC4KKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgZnJhbWVzIHRoYXQgbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgCioJCVJzdmQyQ3B1IGJpdCBiZWxvdyB3aWxsIGFsc28gYmUgY29uc2lkZXJlZCB0byBiZSBpbmdyZXNzIGFuZCBlZ3Jlc3Mgbm9uIAoqCQlyYXRlIGxpbWl0ZWQuCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSBSZXNlcnZlZCBOb24gUmF0ZSBMaW1pdCwKKgkJCSBHVF9GQUxTRSB0byBkaXNhYmxlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldFJzdmROcmxFbgooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfQk9PTCAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldFJzdmROcmxFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgUmVzZXJ2ZWQgTm9uIFJhdGUgTGltaXQuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGZyYW1lcyB0aGF0IG1hdGNoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIAoqCQlSc3ZkMkNwdSBiaXQgYmVsb3cgd2lsbCBhbHNvIGJlIGNvbnNpZGVyZWQgdG8gYmUgaW5ncmVzcyBhbmQgZWdyZXNzIG5vbiAKKgkJcmF0ZSBsaW1pdGVkLgoqCiogSU5QVVRTOgoqICAgICAgIGVuIC0gR1RfVFJVRSB0byBlbmFibGUgUmVzZXJ2ZWQgTm9uIFJhdGUgTGltaXQsCioJCQkgR1RfRkFMU0UgdG8gZGlzYWJsZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRSc3ZkTnJsRW4KKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAqZW4KKTsKCgovKiBndFBvcnRSbW9uLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0YXRzR2V0UmVhbHRpbWVQb3J0Q291bnRlcgoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIGEgc3BlY2lmaWMgcmVhbHRpbWUgY291bnRlciBvZiB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCWNvdW50ZXIgLSB0aGUgY291bnRlciB3aGljaCB3aWxsIGJlIHJlYWQKKgoqIE9VVFBVVFM6CioJCXN0YXRzRGF0YSAtIHBvaW50cyB0byAzMmJpdCBkYXRhIHN0b3JhZ2UgZm9yIHRoZSBNSUIgY291bnRlcgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0YXRzR2V0UmVhbHRpbWVQb3J0Q291bnRlcgooCglJTiAgR1RfUURfREVWCQkqZGV2LAoJSU4gIEdUX0xQT1JUCQlwb3J0LAoJSU4gIEdUX1NUQVRTX0NPVU5URVJTMwljb3VudGVyLAoJT1VUIEdUX1UzMgkJCSpzdGF0c0RhdGEKKTsKCgovKiBndFFvc01hcC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NTZXRWSURGUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBWSUQgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUuIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsCioJCVZJRCBGcmFtZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIHRoaXMgcG9ydC4KKgkJVklEIEZyYW1lIHByaW9yaXR5IG92ZXJyaWRlIG9jY3VycyB3aGVuIHRoZSBkZXRlcm1pbmVkIFZJRCBvZiBhIGZyYW1lIAoqCQlyZXN1bHRzIGluIGEgVlRVIGVudHJ5IHdob3NlIHVzZVZJREZQcmkgb3ZlcnJpZGUgZmllbGQgaXMgc2V0IHRvIEdUX1RSVUUuCioJCVdoZW4gdGhpcyBvY2N1cnMgdGhlIFZJREZQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgVklEIChpbiB0aGUgCioJCVZUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIGZyYW1lIAoqCQlwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgYmUKKgkJdGhpcyBuZXcgVklERlByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIGVncmVzcyBxdWV1ZQoqCQlwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgZm9yIFZJRCBGcmFtZSBQcmlvcml0eSBPdmVycmlkZSwKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NTZXRWSURGUHJpT3ZlcnJpZGUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydCwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldFZJREZQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIFZJRCBGcmFtZSBQcmlvcml0eSBPdmVycmlkZS4gV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwKKgkJVklEIEZyYW1lIHByaW9yaXR5IG92ZXJyaWRlcyBjYW4gb2NjdXIgb24gdGhpcyBwb3J0LgoqCQlWSUQgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgVklEIG9mIGEgZnJhbWUgCioJCXJlc3VsdHMgaW4gYSBWVFUgZW50cnkgd2hvc2UgdXNlVklERlByaSBvdmVycmlkZSBmaWVsZCBpcyBzZXQgdG8gR1RfVFJVRS4KKgkJV2hlbiB0aGlzIG9jY3VycyB0aGUgVklERlByaSB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBWSUQgKGluIHRoZSAKKgkJVlRVIFRhYmxlKSBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgZnJhbWUgCioJCXByaW9yaXR5LiBJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqCQl0aGlzIG5ldyBWSURGUHJpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgZWdyZXNzIHF1ZXVlCioJCXByaW9yaXR5IChRUHJpKSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgZm9yIFZJRCBGcmFtZSBQcmlvcml0eSBPdmVycmlkZSwKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldFZJREZQcmlPdmVycmlkZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0U0FGUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBTb3VyY2UgQWRkcmVzcyhTQSkgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUuIAoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBTQSBGcmFtZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIAoqCQl0aGlzIHBvcnQuCioJCVNBIEFUVSBGcmFtZSBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMgd2hlbiB0aGUgZGV0ZXJtaW5lZCBzb3VyY2UgYWRkcmVzcwoqCQlvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYW4gQVRVIGhpdCB3aGVyZSB0aGUgU0EncyBNQUMgYWRkcmVzcyBlbnRyeSBjb250YWlucyAKKgkJdGhlIHVzZUFUVUZQcmkgZmllbGQgc2V0IHRvIEdUX1RSVUUuCioJCVdoZW4gdGhpcyBvY2N1cnMgdGhlIEFUVUZQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgU0EgKGluIHRoZSAKKgkJQVRVIFRhYmxlKSBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgZnJhbWUgCioJCXByaW9yaXR5LiBJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqCQl0aGlzIG5ldyBBVFVGUHJpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgZWdyZXNzIHF1ZXVlCioJCXByaW9yaXR5IChRUHJpKSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgU0EgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUsCioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0U0FGUHJpT3ZlcnJpZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0U0FGUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBTb3VyY2UgQWRkcmVzcyhTQSkgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUuIAoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBTQSBGcmFtZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIAoqCQl0aGlzIHBvcnQuCioJCVNBIEFUVSBGcmFtZSBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMgd2hlbiB0aGUgZGV0ZXJtaW5lZCBzb3VyY2UgYWRkcmVzcwoqCQlvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYW4gQVRVIGhpdCB3aGVyZSB0aGUgU0EncyBNQUMgYWRkcmVzcyBlbnRyeSBjb250YWlucyAKKgkJdGhlIHVzZUFUVUZQcmkgZmllbGQgc2V0IHRvIEdUX1RSVUUuCioJCVdoZW4gdGhpcyBvY2N1cnMgdGhlIEFUVUZQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgU0EgKGluIHRoZSAKKgkJQVRVIFRhYmxlKSBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgZnJhbWUgCioJCXByaW9yaXR5LiBJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqCQl0aGlzIG5ldyBBVFVGUHJpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgZWdyZXNzIHF1ZXVlCioJCXByaW9yaXR5IChRUHJpKSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgZm9yIFNBIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zR2V0U0FGUHJpT3ZlcnJpZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldERBRlByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgRGVzdGluYXRpb24gQWRkcmVzcyhEQSkgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUuIAoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBEQSBGcmFtZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIAoqCQl0aGlzIHBvcnQuCioJCURBIEFUVSBGcmFtZSBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMgd2hlbiB0aGUgZGV0ZXJtaW5lZCBkZXN0aW5hdGlvbiBhZGRyZXNzCioJCW9mIGEgZnJhbWUgcmVzdWx0cyBpbiBhbiBBVFUgaGl0IHdoZXJlIHRoZSBEQSdzIE1BQyBhZGRyZXNzIGVudHJ5IGNvbnRhaW5zIAoqCQl0aGUgdXNlQVRVRlByaSBmaWVsZCBzZXQgdG8gR1RfVFJVRS4KKgkJV2hlbiB0aGlzIG9jY3VycyB0aGUgQVRVRlByaSB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBEQSAoaW4gdGhlIAoqCQlBVFUgVGFibGUpIGlzIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBmcmFtZSdzIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBmcmFtZSAKKgkJcHJpb3JpdHkuIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIGJlCioJCXRoaXMgbmV3IEFUVUZQcmkgdmFsdWUuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWZmZWN0IHRoZSBlZ3Jlc3MgcXVldWUKKgkJcHJpb3JpdHkgKFFQcmkpIHRoZSBmcmFtZSBpcyBzd2l0Y2hlZCBpbnRvLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIGZvciBEQSBGcmFtZSBQcmlvcml0eSBPdmVycmlkZSwKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NTZXREQUZQcmlPdmVycmlkZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXREQUZQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIERlc3RpbmF0aW9uIEFkZHJlc3MoREEpIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLiAKKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgREEgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKgkJdGhpcyBwb3J0LgoqCQlEQSBBVFUgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgZGVzdGluYXRpb24gYWRkcmVzcwoqCQlvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYW4gQVRVIGhpdCB3aGVyZSB0aGUgREEncyBNQUMgYWRkcmVzcyBlbnRyeSBjb250YWlucyAKKgkJdGhlIHVzZUFUVUZQcmkgZmllbGQgc2V0IHRvIEdUX1RSVUUuCioJCVdoZW4gdGhpcyBvY2N1cnMgdGhlIEFUVUZQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgREEgKGluIHRoZSAKKgkJQVRVIFRhYmxlKSBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgZnJhbWUgCioJCXByaW9yaXR5LiBJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqCQl0aGlzIG5ldyBBVFVGUHJpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgZWdyZXNzIHF1ZXVlCioJCXByaW9yaXR5IChRUHJpKSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgZm9yIERBIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zR2V0REFGUHJpT3ZlcnJpZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldFZJRFFQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIFZJRCBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZS4gV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwKKgkJVklEIFF1ZXVlIHByaW9yaXR5IG92ZXJyaWRlcyBjYW4gb2NjdXIgb24gdGhpcyBwb3J0LgoqCQlWSUQgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgVklEIG9mIGEgZnJhbWUgCioJCXJlc3VsdHMgaW4gYSBWVFUgZW50cnkgd2hvc2UgdXNlVklEUVByaSBvdmVycmlkZSBmaWVsZCBpcyBzZXQgdG8gR1RfVFJVRS4KKgkJV2hlbiB0aGlzIG9jY3VycyB0aGUgVklEUVByaSB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBWSUQgKGluIHRoZSAKKgkJVlRVIFRhYmxlKSBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgcXVldWUgCioJCXByaW9yaXR5LiBJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBub3QKKgkJYmUgbW9kaWZpZWQgYnkgdGhpcyBuZXcgVklEUVByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBhZmZlY3RzIHRoZSBlZ3Jlc3MKKgkJcXVldWUgcHJpb3JpdHkgKFFQcmkpIHRoZSBmcmFtZSBpcyBzd2l0Y2hlZCBpbnRvLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIGZvciBWSUQgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUsCioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0VklEUVByaU92ZXJyaWRlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQJCXBvcnQsCglJTiBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRWSURRUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBWSUQgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsCioJCVZJRCBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIHRoaXMgcG9ydC4KKgkJVklEIFF1ZXVlIHByaW9yaXR5IG92ZXJyaWRlIG9jY3VycyB3aGVuIHRoZSBkZXRlcm1pbmVkIFZJRCBvZiBhIGZyYW1lIAoqCQlyZXN1bHRzIGluIGEgVlRVIGVudHJ5IHdob3NlIHVzZVZJRFFQcmkgb3ZlcnJpZGUgZmllbGQgaXMgc2V0IHRvIEdUX1RSVUUuCioJCVdoZW4gdGhpcyBvY2N1cnMgdGhlIFZJRFFQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgVklEIChpbiB0aGUgCioJCVZUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIHF1ZXVlIAoqCQlwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgbm90CioJCWJlIG1vZGlmaWVkIGJ5IHRoaXMgbmV3IFZJRFFQcmkgdmFsdWUuIFRoaXMgZnVuY3Rpb24gYWZmZWN0cyB0aGUgZWdyZXNzCioJCXF1ZXVlIHByaW9yaXR5IChRUHJpKSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgZm9yIFZJRCBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZSwKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldFZJRFFQcmlPdmVycmlkZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0U0FRUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBTb3VyY2UgQWRkcmVzcyhTQSkgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuIAoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBTQSBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIAoqCQl0aGlzIHBvcnQuCioJCVNBIEFUVSBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMgd2hlbiB0aGUgZGV0ZXJtaW5lZCBzb3VyY2UgYWRkcmVzcwoqCQlvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYW4gQVRVIGhpdCB3aGVyZSB0aGUgU0EncyBNQUMgYWRkcmVzcyBlbnRyeSBjb250YWlucyAKKgkJdGhlIHVzZUFUVVFQcmkgZmllbGQgc2V0IHRvIEdUX1RSVUUuCioJCVdoZW4gdGhpcyBvY2N1cnMgdGhlIEFUVVFQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgU0EgKGluIHRoZSAKKgkJQVRVIFRhYmxlKSBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgcXVldWUgCioJCXByaW9yaXR5LiBJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBub3QKKgkJYmUgbW9kaWZpZWQgYnkgdGhpcyBuZXcgQVRVUVByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBhZmZlY3RzIHRoZSBlZ3Jlc3MKKgkJcXVldWUgcHJpb3JpdHkgKFFQcmkpIHRoZSBmcmFtZSBpcyBzd2l0Y2hlZCBpbnRvLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIGZvciBTQSBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZSwKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NTZXRTQVFQcmlPdmVycmlkZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRTQVFQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIFNvdXJjZSBBZGRyZXNzKFNBKSBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZS4gCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIFNBIFF1ZXVlIHByaW9yaXR5IG92ZXJyaWRlcyBjYW4gb2NjdXIgb24gCioJCXRoaXMgcG9ydC4KKgkJU0EgQVRVIFF1ZXVlIHByaW9yaXR5IG92ZXJyaWRlIG9jY3VycyB3aGVuIHRoZSBkZXRlcm1pbmVkIHNvdXJjZSBhZGRyZXNzCioJCW9mIGEgZnJhbWUgcmVzdWx0cyBpbiBhbiBBVFUgaGl0IHdoZXJlIHRoZSBTQSdzIE1BQyBhZGRyZXNzIGVudHJ5IGNvbnRhaW5zIAoqCQl0aGUgdXNlQVRVUVByaSBmaWVsZCBzZXQgdG8gR1RfVFJVRS4KKgkJV2hlbiB0aGlzIG9jY3VycyB0aGUgQVRVUVByaSB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBTQSAoaW4gdGhlIAoqCQlBVFUgVGFibGUpIGlzIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBmcmFtZSdzIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBxdWV1ZSAKKgkJcHJpb3JpdHkuIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIG5vdAoqCQliZSBtb2RpZmllZCBieSB0aGlzIG5ldyBBVFVRUHJpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGFmZmVjdHMgdGhlIGVncmVzcwoqCQlxdWV1ZSBwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIGZvciBTQSBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZSwKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldFNBUVByaU92ZXJyaWRlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NTZXREQVFQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIERlc3RpbmF0aW9uIEFkZHJlc3MoREEpIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLiAKKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgREEgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKgkJdGhpcyBwb3J0LgoqCQlEQSBBVFUgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgZGVzdGluYXRpb24gYWRkcmVzcwoqCQlvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYW4gQVRVIGhpdCB3aGVyZSB0aGUgREEncyBNQUMgYWRkcmVzcyBlbnRyeSBjb250YWlucyAKKgkJdGhlIHVzZUFUVVFQcmkgZmllbGQgc2V0IHRvIEdUX1RSVUUuCioJCVdoZW4gdGhpcyBvY2N1cnMgdGhlIEFUVVFQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgREEgKGluIHRoZSAKKgkJQVRVIFRhYmxlKSBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgcXVldWUKKgkJcHJpb3JpdHkuIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIG5vdAoqCQliZSBtb2RpZmllZCBieSB0aGlzIG5ldyBBVFVRUHJpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGFmZmVjdHMgdGhlIGVncmVzcwoqCQlxdWV1ZSBwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgZm9yIERBIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldERBUVByaU92ZXJyaWRlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldERBUVByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgRGVzdGluYXRpb24gQWRkcmVzcyhEQSkgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuIAoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBEQSBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIAoqCQl0aGlzIHBvcnQuCioJCURBIEFUVSBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMgd2hlbiB0aGUgZGV0ZXJtaW5lZCBkZXN0aW5hdGlvbiBhZGRyZXNzCioJCW9mIGEgZnJhbWUgcmVzdWx0cyBpbiBhbiBBVFUgaGl0IHdoZXJlIHRoZSBEQSdzIE1BQyBhZGRyZXNzIGVudHJ5IGNvbnRhaW5zIAoqCQl0aGUgdXNlQVRVUVByaSBmaWVsZCBzZXQgdG8gR1RfVFJVRS4KKgkJV2hlbiB0aGlzIG9jY3VycyB0aGUgQVRVUVByaSB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBEQSAoaW4gdGhlIAoqCQlBVFUgVGFibGUpIGlzIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBmcmFtZSdzIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBxdWV1ZQoqCQlwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgbm90CioJCWJlIG1vZGlmaWVkIGJ5IHRoaXMgbmV3IEFUVVFQcmkgdmFsdWUuIFRoaXMgZnVuY3Rpb24gYWZmZWN0cyB0aGUgZWdyZXNzCioJCXF1ZXVlIHByaW9yaXR5IChRUHJpKSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgZm9yIERBIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zR2V0REFRUHJpT3ZlcnJpZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldEFSUFFQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIEFSUCBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZS4gCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIEFSUCBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIAoqCQl0aGlzIHBvcnQuCioJCUFSUCBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMgZm9yIGFsbCBBUlAgZnJhbWVzLgoqCQlXaGVuIHRoaXMgb2NjdXJzLCB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgZWdyZXNzIHF1ZXVlIHByaW9yaXR5CioJCXdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCBBcnBRUHJpLgoqCQlJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBub3QKKgkJYmUgbW9kaWZpZWQuIFdoZW4gdXNlZCwgdGhlIHR3byBiaXRzIG9mIHRoZSBBcnBRUHJpIHByaW9yaXR5IGRldGVybWluZSB0aGUKKgkJZWdyZXNzIHF1ZXVlIHRoZSBmcmFtZSBpcyBzd2l0Y2hlZCBpbnRvLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIGZvciBBUlAgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUsCioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0QVJQUVByaU92ZXJyaWRlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldEFSUFFQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIEFSUCBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZS4gCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIEFSUCBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIAoqCQl0aGlzIHBvcnQuCioJCUFSUCBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMgZm9yIGFsbCBBUlAgZnJhbWVzLgoqCQlXaGVuIHRoaXMgb2NjdXJzLCB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgZWdyZXNzIHF1ZXVlIHByaW9yaXR5CioJCXdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCBBcnBRUHJpLgoqCQlJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBub3QKKgkJYmUgbW9kaWZpZWQuIFdoZW4gdXNlZCwgdGhlIHR3byBiaXRzIG9mIHRoZSBBcnBRUHJpIHByaW9yaXR5IGRldGVybWluZSB0aGUKKgkJZWdyZXNzIHF1ZXVlIHRoZSBmcmFtZSBpcyBzd2l0Y2hlZCBpbnRvLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgQVJQIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zR2V0QVJQUVByaU92ZXJyaWRlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0UVByaVZhbHVlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBRdWV1ZSBwcmlvcml0eSB2YWx1ZSB0byB1c2VkIHdoZW4gZm9yY2VkLgoqCQlXaGVuIEZvcmNlUVByaSBpcyBlbmFibGVkIChncW9zU2V0Rm9yY2VRUHJpKSwgYWxsIGZyYW1lcyBlbnRlcmluZyB0aGlzIHBvcnQKKgkJYXJlIG1hcHBlZCB0byB0aGUgcHJpb3JpdHkgcXVldWUgZGVmaW5lZCBpbiB0aGlzIHZhbHVlLCB1bmxlc3MgYSBWVFUsIFNBLAoqCQlEQSBvciBBUlAgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzLiBUaGUgRnJhbWUncyBwcmlvcml0eSAoRlByaSkgaXMgbm90CioJCWVmZmVjdGVkIGJ5IHRoaXMgdmFsdWUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIHByaSAgLSBRdWV1ZSBwcmlvcml0eSB2YWx1ZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBwcmkgPiAzCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NTZXRRUHJpVmFsdWUKKAogICAgSU4gIEdUX1FEX0RFViAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgIHBvcnQsCiAgICBJTiAgR1RfVTggICAgICBwcmkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldFFQcmlWYWx1ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgUXVldWUgcHJpb3JpdHkgdmFsdWUgdG8gdXNlZCB3aGVuIGZvcmNlZC4KKgkJV2hlbiBGb3JjZVFQcmkgaXMgZW5hYmxlZCAoZ3Fvc1NldEZvcmNlUVByaSksIGFsbCBmcmFtZXMgZW50ZXJpbmcgdGhpcyBwb3J0CioJCWFyZSBtYXBwZWQgdG8gdGhlIHByaW9yaXR5IHF1ZXVlIGRlZmluZWQgaW4gdGhpcyB2YWx1ZSwgdW5sZXNzIGEgVlRVLCBTQSwKKgkJREEgb3IgQVJQIHByaW9yaXR5IG92ZXJyaWRlIG9jY3Vycy4gVGhlIEZyYW1lJ3MgcHJpb3JpdHkgKEZQcmkpIGlzIG5vdAoqCQllZmZlY3RlZCBieSB0aGlzIHZhbHVlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgcHJpICAtIFF1ZXVlIHByaW9yaXR5IHZhbHVlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NHZXRRUHJpVmFsdWUKKAogICAgSU4gIEdUX1FEX0RFViAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgIHBvcnQsCiAgICBPVVQgR1RfVTggICAgICAqcHJpCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NTZXRGb3JjZVFQcmkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIGZvcmNpbmcgUXVldWUgcHJpb3JpdHkuCioJCVdoZW4gRm9yY2VRUHJpIGlzIGRpc2FibGVkLCBub3JtYWwgcHJpb3JpdHkgcXVldWUgbWFwcGluZyBpcyB1c2VkIG9uIGFsbCAKKgkJaW5ncmVzc2luZyBmcmFtZXMgZW50ZXJpbmcgdGhpcyBwb3J0LiBXaGVuIGl0J3MgZW5hYmxlZCwgYWxsIGZyYW1lcwoqCQllbnRlcmluZyB0aGlzIHBvcnQgYXJlIG1hcHBlZCB0byB0aGUgUVByaVZhbHVlIChncW9zU2V0UVByaVZhbHVlKSwgdW5sZXNzCioJCWEgVlRVLCBTQSwgREEgb3IgQVJQIHByaW9yaXR5IG92ZXJyaWRlIG9jY3Vycy4gVGhlIGZyYW1lJ3MgcHJpb3J0eSAoRlByaSkKKgkJaXMgbm90IGVmZmVjdGVkIGJ5IHRoaXMgZmVhdHVyZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgZW4gICAtIEdUX1RSVUUsIHRvIGZvcmNlIFF1ZXVlIFByaW9yaXR5LAoqCQkJICAgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldEZvcmNlUVByaQooCiAgICBJTiAgR1RfUURfREVWICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgcG9ydCwKICAgIElOICBHVF9CT09MICAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRGb3JjZVFQcmkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBjaGVja3MgaWYgZm9yY2luZyBRdWV1ZSBwcmlvcml0eSBpcyBlbmFibGVkLgoqCQlXaGVuIEZvcmNlUVByaSBpcyBkaXNhYmxlZCwgbm9ybWFsIHByaW9yaXR5IHF1ZXVlIG1hcHBpbmcgaXMgdXNlZCBvbiBhbGwgCioJCWluZ3Jlc3NpbmcgZnJhbWVzIGVudGVyaW5nIHRoaXMgcG9ydC4gV2hlbiBpdCdzIGVuYWJsZWQsIGFsbCBmcmFtZXMKKgkJZW50ZXJpbmcgdGhpcyBwb3J0IGFyZSBtYXBwZWQgdG8gdGhlIFFQcmlWYWx1ZSAoZ3Fvc1NldFFQcmlWYWx1ZSksIHVubGVzcwoqCQlhIFZUVSwgU0EsIERBIG9yIEFSUCBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMuIFRoZSBmcmFtZSdzIHByaW9ydHkgKEZQcmkpCioJCWlzIG5vdCBlZmZlY3RlZCBieSB0aGlzIGZlYXR1cmUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBlbiAgIC0gR1RfVFJVRSwgdG8gZm9yY2UgUXVldWUgUHJpb3JpdHksCioJCQkgICBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zR2V0Rm9yY2VRUHJpCigKICAgIElOICBHVF9RRF9ERVYgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NTZXREZWZGUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgZGVmYXVsdCBmcmFtZSBwcmlvcml0eSAoMCB+IDcpLgoqCQlUaGlzIHByaW9yaXR5IGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgZnJhbWUgcHJpb3JpdHkgKEZQcmkpIHRvIHVzZSB3aGVuIAoqCQlubyBvdGhlciBwcmlvcml0eSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgcHJpICAtIGRlZmF1bHQgZnJhbWUgcHJpb3JpdHkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgcHJpID4gNwoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0RGVmRlByaQooCiAgICBJTiAgR1RfUURfREVWICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgcG9ydCwKICAgIElOICBHVF9VOCAgICAgIHByaQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0RGVmRlByaQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIGRlZmF1bHQgZnJhbWUgcHJpb3JpdHkgKDAgfiA3KS4KKgkJVGhpcyBwcmlvcml0eSBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IGZyYW1lIHByaW9yaXR5IChGUHJpKSB0byB1c2Ugd2hlbiAKKgkJbm8gb3RoZXIgcHJpb3JpdHkgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAgICAgICBwcmkgIC0gZGVmYXVsdCBmcmFtZSBwcmlvcml0eQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zR2V0RGVmRlByaQooCiAgICBJTiAgR1RfUURfREVWICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgcG9ydCwKICAgIE9VVCBHVF9VOCAgICAgICpwcmkKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NTZXRBcnBRUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBBUlAgcXVldWUgUHJpb3JpdHkgdG8gdXNlIGZvciBBUlAgUVByaSBPdmVycmlkZGVuIAoqCQlmcmFtZXMuIFdoZW4gYSBBUlAgZnJhbWUgaXMgcmVjZWl2ZWQgb24gYSBwb3IgdHRoYXQgaGFzIGl0cyBBUlAgCioJCVFQcmlPVmVycmlkZSBpcyBlbmFibGVkLCB0aGUgUVByaSBhc3NpZ25lZCB0byB0aGUgZnJhbWUgY29tZXMgZnJvbQoqCQl0aGlzIHZhbHVlCioKKiBJTlBVVFM6CiogICAgICAgcHJpIC0gQVJQIFF1ZXVlIFByaW9yaXR5ICgwIH4gMykKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgcHJpID4gMwoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0QXJwUVByaQooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfVTggICAgIHByaQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldEFycFFQcmkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIEFSUCBxdWV1ZSBQcmlvcml0eSB0byB1c2UgZm9yIEFSUCBRUHJpIE92ZXJyaWRkZW4gCioJCWZyYW1lcy4gV2hlbiBhIEFSUCBmcmFtZSBpcyByZWNlaXZlZCBvbiBhIHBvciB0dGhhdCBoYXMgaXRzIEFSUCAKKgkJUVByaU9WZXJyaWRlIGlzIGVuYWJsZWQsIHRoZSBRUHJpIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSBjb21lcyBmcm9tCioJCXRoaXMgdmFsdWUKKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBwcmkgLSBBUlAgUXVldWUgUHJpb3JpdHkgKDAgfiAzKQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zR2V0QXJwUVByaQooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfVTggICAgICpwcmkKKTsKCgovKiBndFN5c0N0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0VXNlUG9ydFNjaGVkdWxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBwZXIgcG9ydCBzY2hlZHVsaW5nIG1vZGUKKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgZW5hYmxlcyBwZXIgcG9ydCBzY2hlZHVsaW5nLCAKKgkJCSBHVF9GQUxTRSBkaXNhYmxlLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFVzZVBvcnRTY2hlZHVsZQooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfQk9PTCAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRVc2VQb3J0U2NoZWR1bGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHBlciBwb3J0IHNjaGVkdWxpbmcgbW9kZQoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIGVuIC0gR1RfVFJVRSBlbmFibGVzIHBlciBwb3J0IHNjaGVkdWxpbmcsIAoqCQkJIEdUX0ZBTFNFIGRpc2FibGUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0VXNlUG9ydFNjaGVkdWxlCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIE9VVCBHVF9CT09MICAgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRPbGRIYWRlcgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgRWdyZXNzIE9sZCBIZWFkZXIuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgYW5kIGZyYW1lcyBhcmUgZWdyZXNzZWQgd2l0aCBhIE1hcnZlbGwgSGVhZGVyLCAKKgkJdGhlIGZvcm1hdCBvZiB0aGUgSGVhZGVyIGlzIHNsaWdodGx5IG1vZGlmaWVkIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlIAoqCQl3aXRoIHByZXZpb3VzIGRldmljZXMgdGhhdCB1c2VkIHRoZSBvcmlnaW5hbCBIZWFkZXIuIFNwZWNpZmljYWxseSwgYml0IDMKKgkJb2YgdGhlIEhlYWRlcidzIDJuZCBvY3RldCBpcyBjbGVhcmVkIHRvIGEgemVybyBzdWNoIHRoYXQgb25seSBGUHJpWzI6MV0KKgkJaXMgYXZhaWxhYmxlIGluIHRoZSBIZWFkZXIuCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSBPbGQgSGVhZGVyIE1vZGUsCioJCQkgR1RfRkFMU0UgdG8gZGlzYWJsZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0T2xkSGFkZXIKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0JPT0wgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0T2xkSGFkZXIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIEVncmVzcyBPbGQgSGVhZGVyLgoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGFuZCBmcmFtZXMgYXJlIGVncmVzc2VkIHdpdGggYSBNYXJ2ZWxsIEhlYWRlciwgCioJCXRoZSBmb3JtYXQgb2YgdGhlIEhlYWRlciBpcyBzbGlnaHRseSBtb2RpZmllZCB0byBiZSBiYWNrd2FyZHMgY29tcGF0aWJsZSAKKgkJd2l0aCBwcmV2aW91cyBkZXZpY2VzIHRoYXQgdXNlZCB0aGUgb3JpZ2luYWwgSGVhZGVyLiBTcGVjaWZpY2FsbHksIGJpdCAzCioJCW9mIHRoZSBIZWFkZXIncyAybmQgb2N0ZXQgaXMgY2xlYXJlZCB0byBhIHplcm8gc3VjaCB0aGF0IG9ubHkgRlByaVsyOjFdCioJCWlzIGF2YWlsYWJsZSBpbiB0aGUgSGVhZGVyLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIGVuIC0gR1RfVFJVRSB0byBlbmFibGUgT2xkIEhlYWRlciBNb2RlLAoqCQkJIEdUX0ZBTFNFIHRvIGRpc2FibGUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldE9sZEhhZGVyCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIE9VVCBHVF9CT09MICAgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRSZWN1cnNpdmVTdHJpcHBpbmdEaXNhYmxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZGV0ZXJtaW5lcyBpZiByZWN1cnNpdmUgdGFnIHN0cmlwcGluZyBmZWF0dXJlIG5lZWRzIHRvIGJlCioJCWRpc2FibGVkLgoqCiogSU5QVVRTOgoqICAgICAgIGVuIC0gR1RfVFJVRSB0byBkaXNhYmxlIFJlY3Vyc2l2ZSBUYWcgU3RyaXBwaW5nLAoqCQkJIEdUX0ZBTFNFIHRvIGVuYWJsZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UmVjdXJzaXZlU3RyaXBwaW5nRGlzYWJsZQooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfQk9PTCAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRSZWN1cnNpdmVTdHJpcHBpbmdEaXNhYmxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIHJlY3Vyc2l2ZSB0YWcgc3RyaXBwaW5nIGZlYXR1cmUgaXMgZGlzYWJsZWQuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFLCBpZiBSZWN1cnNpdmUgVGFnIFN0cmlwcGluZyBpcyBkaXNhYmxlZCwKKgkJCSBHVF9GQUxTRSwgb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRSZWN1cnNpdmVTdHJpcHBpbmdEaXNhYmxlCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIE9VVCBHVF9CT09MICAgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRDUFVQb3J0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBDUFUgUG9ydCB3aGVyZSBSc3ZkMkNwdSBmcmFtZXMgYW5kIElHTVAvTUxEIFNub29wZWQgCioJCWZyYW1lcyBhcmUgZGVzdGluZWQuCioKKiBJTlBVVFM6CiogICAgICAgY3B1UG9ydCAtIENQVSBQb3J0CioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRDUFVQb3J0CigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCAgY3B1UG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Q1BVUG9ydAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgQ1BVIFBvcnQgd2hlcmUgUnN2ZDJDcHUgZnJhbWVzIGFuZCBJR01QL01MRCBTbm9vcGVkIAoqCQlmcmFtZXMgYXJlIGRlc3RpbmVkLgoqCiogSU5QVVRTOgoqICAgICAgIGNwdVBvcnQgLSBDUFUgUG9ydAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Q1BVUG9ydAooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfTFBPUlQgICpjcHVQb3J0Cik7CgoKCi8qIGd0U3lzU3RhdHVzLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEZyZWVRU2l6ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgRnJlZSBRdWV1ZSBDb3VudGVyLiBUaGlzIGNvdW50ZXIgcmVmbGVjdHMgdGhlIAoqCQljdXJyZW50IG51bWJlciBvZiB1bmFsbGxvY2F0ZWQgYnVmZmVycyBhdmFpbGFibGUgZm9yIGFsbCB0aGUgcG9ydHMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgY291bnQgLSBGcmVlIFF1ZXVlIENvdW50ZXIKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEZyZWVRU2l6ZQooCiAgICBJTiAgR1RfUURfREVWCSpkZXYsCiAgICBPVVQgR1RfVTE2IAkJKmNvdW50Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJCQkJTmV3IEFQSXMgaW4gRFNEVCAyLjYKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qIGd0QnJnRmRiLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYlNldFBvcnRBdHVMZWFybkxpbWl0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBQb3J0J3MgYXV0byBsZWFybmluZyBsaW1pdC4gV2hlbiB0aGUgbGltaXQgaXMgbm9uLXplcm8gdmFsdWUsIHRoZSBudW1iZXIKKgkJb2YgTUFDIGFkZHJlc3NlcyB0aGF0IGNhbiBiZSBsZWFybmVkIG9uIHRoaXMgcG9ydCBhcmUgbGltaXRlZCB0byB0aGUgdmFsdWUKKgkJc3BlY2lmaWVkIGluIHRoaXMgQVBJLiBXaGVuIHRoZSBsZWFybiBsaW1pdCBoYXMgYmVlbiByZWFjaGVkIGFueSBmcmFtZSAKKgkJdGhhdCBpbmdyZXNzZXMgdGhpcyBwb3J0IHdpdGggYSBzb3VyY2UgTUFDIGFkZHJlc3Mgbm90IGFscmVhZHkgaW4gdGhlIAoqCQlhZGRyZXNzIGRhdGFiYXNlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcG9ydCB3aWxsIGJlIGRpc2NhcmRlZC4gCioJCU5vcm1hbCBhdXRvLWxlYXJuaW5nIHdpbGwgcmVzdW1lIG9uIHRoZSBwb3J0IGFzIHNvb24gYXMgdGhlIG51bWJlciBvZiAKKgkJYWN0aXZlIHVuaWNhc3QgTUFDIGFkZHJlc3NlcyBhc3NvY2lhdGVkIHRvIHRoaXMgcG9ydCBpcyBsZXNzIHRoYW4gdGhlIAoqCQlsZWFybiBsaW1pdC4KKgkJQ1BVIGRpcmVjdGVkIEFUVSBMb2FkLCBQdXJnZSwgb3IgTW92ZSB3aWxsIG5vdCBoYXZlIGFueSBlZmZlY3Qgb24gdGhlIAoqCQlsZWFybiBsaW1pdC4KKgkJVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIHdoZW4gdGhlIGxpbWl0IGlzIHplcm8uCioJCVRoZSBmb2xsb3dpbmcgY2FyZSBpcyBuZWVkZWQgd2hlbiBlbmFibGluZyB0aGlzIGZlYXR1cmU6CioJCQkxKSBkaXNhYmxlIGxlYXJuaW5nIG9uIHRoZSBwb3J0cwoqCQkJMikgZmx1c2ggYWxsIG5vbi1zdGF0aWMgYWRkcmVzc2VzIGluIHRoZSBBVFUKKgkJCTMpIGRlZmluZSB0aGUgZGVzaXJlZCBsaW1pdCBmb3IgdGhlIHBvcnRzCioJCQk0KSByZS1lbmFibGUgbGVhcmluZyBvbiB0aGUgcG9ydHMKKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICBsaW1pdCAtIGF1dG8gbGVhcm5pbmcgbGltaXQgKCAwIH4gMjU1ICkKKgkJCQkJCQkJCQkJICAKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGxpbWl0ID4gMHhGRgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJTZXRQb3J0QXR1TGVhcm5MaW1pdAooCiAgICBJTiAgR1RfUURfREVWIAkqZGV2LAogICAgSU4gIEdUX0xQT1JUICAJcG9ydCwKICAgIElOICBHVF9VMzIgICAJbGltaXQKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRQb3J0QXR1TGVhcm5DbnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFJlYWQgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGFjdGl2ZSB1bmljYXN0IE1BQyBhZGRyZXNzZXMgYXNzb2NpYXRlZCB3aXRoIAoqCQl0aGUgZ2l2ZW4gcG9ydC4gVGhpcyBjb3VudGVyIChMZWFybkNudCkgaXMgaGVsZCBhdCB6ZXJvIGlmIGxlYXJuIGxpbWl0CioJCShnZmRiU2V0UG9ydEF0dUxlYXJuTGltaXQgQVBJKSBpcyBzZXQgdG8gemVyby4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJCQkJCQkJCQkJICAKKiBPVVRQVVRTOgoqICAgICAgIGNvdW50IC0gY3VycmVudCBhdXRvIGxlYXJuaW5nIGNvdW50CioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldFBvcnRBdHVMZWFybkNudAooCiAgICBJTiAgR1RfUURfREVWIAkqZGV2LAogICAgSU4gIEdUX0xQT1JUICAJcG9ydCwKICAgIElOICBHVF9VMzIgICAJKmNvdW50Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRBdHVBbGxDb3VudAoqCiogREVTQ1JJUFRJT046CiogICAgICAgQ291bnRzIGFsbCBlbnRyaWVzIGluIHRoZSBBZGRyZXNzIFRyYW5zbGF0aW9uIFVuaXQuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgY291bnQgLSBudW1iZXIgb2YgdmFsaWQgZW50cmllcy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldEF0dUFsbENvdW50CigKICAgIElOICBHVF9RRF9ERVYgCSpkZXYsCiAgICBPVVQgR1RfVTMyIAkJKmNvdW50Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRBdHVBbGxDb3VudEluREJOdW0KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIENvdW50cyBhbGwgZW50cmllcyBpbiB0aGUgZGVmaW5lZCBGSUQgKG9yIERCTnVtKS4KKgoqIElOUFVUUzoKKiAgICAgICBkYk51bSAtIERCTnVtIG9mIEZJRAoqCiogT1VUUFVUUzoKKiAgICAgICBjb3VudCAtIG51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIEZJRCAob3IgREJOdW0pLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiR2V0QXR1QWxsQ291bnRJbkRCTnVtCigKICAgIElOICBHVF9RRF9ERVYgCSpkZXYsCiAgICBJTiAgR1RfVTMyIAkJZGJOdW0sCiAgICBPVVQgR1RfVTMyIAkJKmNvdW50Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRBdHVEeW5hbWljQ291bnRJbkRCTnVtCioKKiBERVNDUklQVElPTjoKKiAgICAgICBDb3VudHMgYWxsIG5vbi1zdGF0aWMgZW50cmllcyBpbiB0aGUgZGVmaW5lZCBGSUQgKG9yIERCTnVtKS4KKgoqIElOUFVUUzoKKiAgICAgICBkYk51bSAtIERCTnVtIG9yIEZJRAoqCiogT1VUUFVUUzoKKiAgICAgICBjb3VudCAtIG51bWJlciBvZiB2YWxpZCBub24tc3RhdGljIGVudHJpZXMgaW4gRklEIChvciBEQk51bSkuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRBdHVEeW5hbWljQ291bnRJbkRCTnVtCigKICAgIElOICBHVF9RRF9ERVYgCSpkZXYsCiAgICBJTiAgR1RfVTMyIAkJZGJOdW0sCiAgICBPVVQgR1RfVTMyIAkJKmNvdW50Cik7CgoKLyogZ3RCcmdTdHUuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3R1R2V0RW50cnlDb3VudAoqCiogREVTQ1JJUFRJT046CiogICAgICAgR2V0cyB0aGUgY3VycmVudCBudW1iZXIgb2YgdmFsaWQgZW50cmllcyBpbiB0aGUgU1RVIHRhYmxlCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgbnVtRW50cmllcyAtIG51bWJlciBvZiBTVFUgZW50cmllcy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3R1R2V0RW50cnlDb3VudAooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfVTMyICAgICpudW1FbnRyaWVzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdHVHZXRFbnRyeUZpcnN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIGZpcnN0IGxleGljb2dyYXBoaWMgZW50cnkgZnJvbSB0aGUgU1RVLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIHN0dUVudHJ5IC0gZmluZCB0aGUgZmlyc3QgdmFsaWQgU1RVIGVudHJ5LgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PX1NVQ0ggLSB0YWJsZSBpcyBlbXB0eS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdHVHZXRFbnRyeUZpcnN0CigKICAgIElOICBHVF9RRF9ERVYgICAgICAgKmRldiwKICAgIE9VVCBHVF9TVFVfRU5UUlkgICAgKnN0dUVudHJ5Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdHVHZXRFbnRyeU5leHQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgbmV4dCBsZXhpY29ncmFwaGljIFNUVSBlbnRyeSBmcm9tIHRoZSBzcGVjaWZpZWQgU0lELgoqCiogSU5QVVRTOgoqICAgICAgIHN0dUVudHJ5IC0gdGhlIFNJRCB0byBzdGFydCB0aGUgc2VhcmNoLgoqCiogT1VUUFVUUzoKKiAgICAgICBzdHVFbnRyeSAtIG5leHQgU1RVIGVudHJ5LgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2Vzcy4KKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3Igb3IgZW50cnkgZG9lcyBub3QgZXhpc3QuCiogICAgICAgR1RfTk9fU1VDSCAtIG5vIG1vcmUgZW50cmllcy4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdHVHZXRFbnRyeU5leHQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAqZGV2LAogICAgSU5PVVQgR1RfU1RVX0VOVFJZICAqc3R1RW50cnkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0dUZpbmRTaWRFbnRyeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgRmluZCBTVFUgZW50cnkgZm9yIGEgc3BlY2lmaWMgU0lELCBpdCB3aWxsIHJldHVybiB0aGUgZW50cnksIGlmIGZvdW5kLCAKKiAgICAgICBhbG9uZyB3aXRoIGl0cyBhc3NvY2lhdGVkIGRhdGEgCioKKiBJTlBVVFM6CiogICAgICAgc3R1RW50cnkgLSBjb250YWlucyB0aGUgU0lEIHRvIHNlYXJjaGUgZm9yIAoqCiogT1VUUFVUUzoKKiAgICAgICBmb3VuZCAgICAtIEdUX1RSVUUsIGlmIHRoZSBhcHByb3ByaWF0ZSBlbnRyeSBleGlzdHMuCiogICAgICAgc3R1RW50cnkgLSB0aGUgZW50cnkgcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MuCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yIG9yIGVudHJ5IGRvZXMgbm90IGV4aXN0LgoqICAgICAgIEdUX05PX1NVQ0ggLSBubyBzdWNoIGVudHJ5LgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0dUZpbmRTaWRFbnRyeQooCiAgICBJTiAgR1RfUURfREVWICAgICAgICpkZXYsCiAgICBJTk9VVCBHVF9TVFVfRU5UUlkgICpzdHVFbnRyeSwKICAgIE9VVCBHVF9CT09MICAgICAgICAgKmZvdW5kCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdHVBZGRFbnRyeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgQ3JlYXRlcyBvciB1cGRhdGUgdGhlIGVudHJ5IGluIFNUVSB0YWJsZSBiYXNlZCBvbiB1c2VyIGlucHV0LgoqCiogSU5QVVRTOgoqICAgICAgIHN0dUVudHJ5ICAgIC0gc3R1IGVudHJ5IHRvIGluc2VydCB0byB0aGUgU1RVLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0dUFkZEVudHJ5CigKICAgIElOICBHVF9RRF9ERVYgICAJKmRldiwKICAgIElOICBHVF9TVFVfRU5UUlkJKnN0dUVudHJ5Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdHVEZWxFbnRyeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgRGVsZXRlcyBTVFUgZW50cnkgc3BlY2lmaWVkIGJ5IHVzZXIuCioKKiBJTlBVVFM6CiogICAgICAgc3R1RW50cnkgLSB0aGUgU1RVIGVudHJ5IHRvIGJlIGRlbGV0ZWQgCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0dURlbEVudHJ5CigKICAgIElOICBHVF9RRF9ERVYgICAJKmRldiwKICAgIElOICBHVF9TVFVfRU5UUlkgCSpzdHVFbnRyeQopOwoKCi8qIGd0Q0NQVlQuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHZ0SW5pdGlhbGl6ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGluaXRpYWxpemVzIHRoZSBQVlQgVGFibGUgdG8gYWxsIG9uZSdzIChpbml0aWFsIHN0YXRlKQoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B2dEluaXRpYWxpemUKKAoJSU4gIEdUX1FEX0RFViAJKmRldgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHZ0V3JpdGVQVlREYXRhCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd3JpdGUgQ3Jvc3MgQ2hpcCBQb3J0IFZsYW4gRGF0YS4KKgkJQ3Jvc3MgY2hpcCBQb3J0IFZMQU4gRGF0YSB1c2VkIGFzIGEgYml0IG1hc2sgdG8gbGltaXQgd2hlcmUgY3Jvc3MgY2hpcAoqCQlmcmFtZXMgY2FuIGVncmVzcyAoaW4gY2hpcCBQb3J0IFZMQU5zIGFyZSBtYXNrZWQgdXNpbmcgZ3ZsblNldFBvcnRWbGFuUG9ydHMKKgkJQVBJKS4gQ3Jvc3MgY2hpcCBmcmFtZXMgYXJlIEZvcndhcmQgZnJhbWVzIHRoYXQgaW5ncmVzcyBhIERTQSBvciBFdGhlciAKKgkJVHlwZSBEU0EgcG9ydCAoc2VlIGdwcnRTZXRGcmFtZU1vZGUgQVBJKS4gQml0IDAgaXMgYSBtYXNrIGZvciBwb3J0IDAsIAoqCQliaXQgMSBmb3IgcG9ydCAxLCBldGMuIFdoZW4gYSBwb3J0J3MgbWFzayBiaXQgaXMgb25lLCBmcmFtZXMgYXJlIGFsbG93ZWQgCioJCXRvIGVncmVzcyB0aGF0IHBvcnQgb24gdGhpcyBkZXZpY2UuIFdoZW4gYSBwb3J0J3MgbWFzayBiaXQgaXMgemVybywKKgkJZnJhbWVzIGFyZSBub3QgYWxsb3dlZCB0byBlZ3Jlc3MgdGhhdCBwb3J0IG9uIHRoaXMgZGV2aWNlLgoqCioJCVRoZSBDcm9zcyBDaGlwIFBvcnQgVkxBTiBUYWJsZSBpcyBhY2Nlc3NlZCBieSBpbmdyZXNzaW5nIGZyYW1lcyBiYXNlZAoqCQl1cG9uIHRoZSBvcmlnaW5hbCBzb3VyY2UgcG9ydCBvZiB0aGUgZnJhbWUgdXNpbmcgdGhlIEZvcndhcmQgZnJhbWUncyBEU0EgdGFnCioJCWZpZWxkcyBTcmNfRGV2LCBTcmNfUG9ydC9TcmNfVHJ1bmsgYW5kIFNyY19Jc19UcnVuay4gVGhlIDEgZW50cnkgb2YgdGhlIDUxMgoqCQl0aGF0IGlzIGFjY2Vzc2VkIGJ5IHRoZSBmcmFtZSBpczoKKgkJCUlmIDUgQml0IFBvcnQgKGluIEdsb2JhbCAyLCBvZmZzZXQgMHgxRCkgPSAwOgoqCQkJCUlmIFNyY19Jc19UcnVuayA9IDAgICBTcmNfRGV2WzQ6MF0sIFNyY19Qb3J0WzM6MF0xMTkKKgkJCQlJZiBTcmNfSXNfVHJ1bmsgPSAxICAgRGV2aWNlIE51bWJlciAoZ2xvYmFsIG9mZnNldCAweDFDKSwgU3JjX1RydW5rWzM6MF0KKgkJCUlmIDUgQml0IFBvcnQgKGluIEdsb2JhbCAyLCBvZmZzZXQgMHgxRCkgPSAxOgoqCQkJCUlmIFNyY19Jc19UcnVuayA9IDAgICBTcmNfRGV2WzM6MF0sIFNyY19Qb3J0WzQ6MF0xMjAKKgkJCQlJZiBTcmNfSXNfVHJ1bmsgPSAxICAgRGV2aWNlIE51bWJlclszOjBdLCBTcmNfVHJ1bmtbNDowXQoqCioJCUNyb3NzIGNoaXAgcG9ydCBWTEFOcyB3aXRoIFRydW5rcyBhcmUgc3VwcG9ydGVkIGluIHRoZSB0YWJsZSB3aGVyZSB0aGlzCioJCWRldmljZSdzIGVudHJpZXMgd291bGQgYmUgc3RvcmVkIChkZWZpbmVkIGJ5IHRoaXMgZGV2aWNlJ3MgRGV2aWNlIE51bWJlcikuCioJCVRoaXMgcG9ydGlvbiBvZiB0aGUgdGFibGUgaXMgYXZhaWxhYmxlIGZvciBUcnVuayBlbnRyaWVzIGJlY2F1c2UgdGhpcyBkZXZpY2UncwoqCQlwb3J0IFZMQU4gbWFwcGluZ3MgdG8gcG9ydHMgaW5zaWRlIHRoaXMgZGV2aWNlIGFyZSBtYXNrZWQgYnkgdGhlIHBvcnQncwoqCQlWTEFOIFRhYmxlIChzZWUgZ3ZsblNldFBvcnRWbGFuUG9ydHMgQVBJKS4KKgoqCiogSU5QVVRTOgoqCQlwdnRQb2ludGVyIC0gcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbnRyeSBvZiBQVlQgKDAgfiA1MTEpCioJCXB2dERhdGEgICAgLSBDcm9zcyBDaGlwIFBvcnQgVmxhbiBEYXRhCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHZ0V3JpdGVQVlREYXRhCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTMyCQlwdnRQb2ludGVyLAoJSU4gIEdUX1UzMgkJcHZ0RGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHZ0UmVhZFBWVERhdGEKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBDcm9zcyBDaGlwIFBvcnQgVmxhbiBEYXRhLgoqCQlDcm9zcyBjaGlwIFBvcnQgVkxBTiBEYXRhIHVzZWQgYXMgYSBiaXQgbWFzayB0byBsaW1pdCB3aGVyZSBjcm9zcyBjaGlwCioJCWZyYW1lcyBjYW4gZWdyZXNzIChpbiBjaGlwIFBvcnQgVkxBTnMgYXJlIG1hc2tlZCB1c2luZyBndmxuU2V0UG9ydFZsYW5Qb3J0cwoqCQlBUEkpLiBDcm9zcyBjaGlwIGZyYW1lcyBhcmUgRm9yd2FyZCBmcmFtZXMgdGhhdCBpbmdyZXNzIGEgRFNBIG9yIEV0aGVyIAoqCQlUeXBlIERTQSBwb3J0IChzZWUgZ3BydFNldEZyYW1lTW9kZSBBUEkpLiBCaXQgMCBpcyBhIG1hc2sgZm9yIHBvcnQgMCwgCioJCWJpdCAxIGZvciBwb3J0IDEsIGV0Yy4gV2hlbiBhIHBvcnQncyBtYXNrIGJpdCBpcyBvbmUsIGZyYW1lcyBhcmUgYWxsb3dlZCAKKgkJdG8gZWdyZXNzIHRoYXQgcG9ydCBvbiB0aGlzIGRldmljZS4gV2hlbiBhIHBvcnQncyBtYXNrIGJpdCBpcyB6ZXJvLAoqCQlmcmFtZXMgYXJlIG5vdCBhbGxvd2VkIHRvIGVncmVzcyB0aGF0IHBvcnQgb24gdGhpcyBkZXZpY2UuCioKKgkJVGhlIENyb3NzIENoaXAgUG9ydCBWTEFOIFRhYmxlIGlzIGFjY2Vzc2VkIGJ5IGluZ3Jlc3NpbmcgZnJhbWVzIGJhc2VkCioJCXVwb24gdGhlIG9yaWdpbmFsIHNvdXJjZSBwb3J0IG9mIHRoZSBmcmFtZSB1c2luZyB0aGUgRm9yd2FyZCBmcmFtZSdzIERTQSB0YWcKKgkJZmllbGRzIFNyY19EZXYsIFNyY19Qb3J0L1NyY19UcnVuayBhbmQgU3JjX0lzX1RydW5rLiBUaGUgMSBlbnRyeSBvZiB0aGUgNTEyCioJCXRoYXQgaXMgYWNjZXNzZWQgYnkgdGhlIGZyYW1lIGlzOgoqCQkJSWYgNSBCaXQgUG9ydCAoaW4gR2xvYmFsIDIsIG9mZnNldCAweDFEKSA9IDA6CioJCQkJSWYgU3JjX0lzX1RydW5rID0gMCAgIFNyY19EZXZbNDowXSwgU3JjX1BvcnRbMzowXTExOQoqCQkJCUlmIFNyY19Jc19UcnVuayA9IDEgICBEZXZpY2UgTnVtYmVyIChnbG9iYWwgb2Zmc2V0IDB4MUMpLCBTcmNfVHJ1bmtbMzowXQoqCQkJSWYgNSBCaXQgUG9ydCAoaW4gR2xvYmFsIDIsIG9mZnNldCAweDFEKSA9IDE6CioJCQkJSWYgU3JjX0lzX1RydW5rID0gMCAgIFNyY19EZXZbMzowXSwgU3JjX1BvcnRbNDowXTEyMAoqCQkJCUlmIFNyY19Jc19UcnVuayA9IDEgICBEZXZpY2UgTnVtYmVyWzM6MF0sIFNyY19UcnVua1s0OjBdCioKKgkJQ3Jvc3MgY2hpcCBwb3J0IFZMQU5zIHdpdGggVHJ1bmtzIGFyZSBzdXBwb3J0ZWQgaW4gdGhlIHRhYmxlIHdoZXJlIHRoaXMKKgkJZGV2aWNlJ3MgZW50cmllcyB3b3VsZCBiZSBzdG9yZWQgKGRlZmluZWQgYnkgdGhpcyBkZXZpY2UncyBEZXZpY2UgTnVtYmVyKS4KKgkJVGhpcyBwb3J0aW9uIG9mIHRoZSB0YWJsZSBpcyBhdmFpbGFibGUgZm9yIFRydW5rIGVudHJpZXMgYmVjYXVzZSB0aGlzIGRldmljZSdzCioJCXBvcnQgVkxBTiBtYXBwaW5ncyB0byBwb3J0cyBpbnNpZGUgdGhpcyBkZXZpY2UgYXJlIG1hc2tlZCBieSB0aGUgcG9ydCdzCioJCVZMQU4gVGFibGUgKHNlZSBndmxuU2V0UG9ydFZsYW5Qb3J0cyBBUEkpLgoqCioKKiBJTlBVVFM6CioJCXB2dFBvaW50ZXIgLSBwb2ludGVyIHRvIHRoZSBkZXNpcmVkIGVudHJ5IG9mIFBWVCAoMCB+IDUxMSkKKgoqIE9VVFBVVFM6CioJCXB2dERhdGEgICAgLSBDcm9zcyBDaGlwIFBvcnQgVmxhbiBEYXRhCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHZ0UmVhZFBWVERhdGEKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9VMzIJCXB2dFBvaW50ZXIsCglPVVQgR1RfVTMyCQkqcHZ0RGF0YQopOwoKCi8qIGd0RXZlbnRzLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2V2ZW50R2V0RGV2SW50U3RhdHVzCioKKiBERVNDUklQVElPTjoKKiAJCUNoZWNrIHRvIHNlZSB3aGljaCBkZXZpY2UgaW50ZXJydXB0cyAoV2F0Y2hEb2csIEphbUxpbWl0LCBEdXBsZXggTWlzbWF0Y2gsIGFuZAoqCQlTRVJERVMgTGluayBJbnQpIGhhdmUgb2NjdXJyZWQuCioKKiBJTlBVVFM6CiogICAgICAgaW50VHlwZSAtIHRoZSB0eXBlIG9mIGludGVycnVwdCB3aGljaCBjYXVzZXMgYW4gaW50ZXJydXB0LgoqCQkJCSAgYW55IGNvbWJpbmF0aW9uIG9mIAoqCQkJCQlHVF9ERVZfSU5UX1dBVENIRE9HLAoqCQkJCQlHVF9ERVZfSU5UX0pBTUxJTUlULAoqCQkJCQlHVF9ERVZfSU5UX0RVUExFWF9NSVNNQVRDSCwKKgkJCQkJR1RfREVWX0lOVF9TRVJERVNfTElOSwoqCQlwb3J0CS0gbG9naWNhbCBwb3J0IHdoZXJlIEdUX0RFVl9JTlRfRFVQTEVYX01JU01BVENIIG9jY3VycmVkLgoqCQkJCSAgdmFsaWQgb25seSBpZiBHVF9ERVZfSU5UX0RVUExFWF9NSVNNQVRDSCBpcyBzZXQgaW4gaW50VHlwZS4KKgkJbGlua0ludCAtIFNFUkRFUyBwb3J0IGxpc3Qgd2hlcmUgR1RfREVWX0lOVF9TRVJERVNfTElOSyBpbnRlcnJ1cHQgaXMKKgkJCQkgIGFzc2VydGVkLiBJdCdzIGluIHZlY3RvciBmb3JtYXQsIEJpdCAxMCBpcyBmb3IgcG9ydCAxMCwgCioJCQkJICBCaXQgOSBpcyBmb3IgcG9ydCA5LCBldGMuCioJCQkJICB2YWxpZCBvbmx5IGlmIEdUX0RFVl9JTlRfU0VSREVTX0xJTksgYml0IGlzIHNldCBpbiBpbnRUeXBlLgoqCQkJCSAgVGhlc2UgYml0cyBhcmUgb25seSB2YWxpZCBvZiB0aGUgcG9ydCB0aGF0IGlzIGluIDEwMDBCYXNlLVggbW9kZS4KKgoqIE9VVFBVVFM6CiogCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2V2ZW50R2V0RGV2SW50U3RhdHVzCigKICAgIElOICBHVF9RRF9ERVYgCQkJKmRldiwKICAgIE9VVCBHVF9ERVZfSU5UX1NUQVRVUwkqZGV2SW50U3RhdHVzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdldmVudFNldEFnZU91dEludEVuCioKKiBERVNDUklQVElPTjoKKgkJSW50ZXJydXB0IG9uIEFnZSBPdXQuIFdoZW4gYWdpbmcgaXMgZW5hYmxlZCwgYWxsIG5vbi1zdGF0aWMgYWRkcmVzcyAKKgkJZW50cmllcyBpbiB0aGUgQVRVJ3MgYWRkcmVzcyBkYXRhYmFzZSBhcmUgcGVyaW9kaWNhbGx5IGFnZWQuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIHNldCB0byBHVF9UUlVFIGFuZCBhbiBlbnRyeSBhc3NvY2lhdGVkIHdpdGggdGhpcyAKKgkJcG9ydCBpcyBhZ2VkIG91dCwgYW4gQWdlT3V0VmlvbGF0aW9uIHdpbGwgYmUgY2FwdHVyZWQgZm9yIHRoYXQgZW50cnkuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQltb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgQWdlIE91dCBJbnRlcnJ1cHQsCioJCQkgICBHVF9GQUxVU0UgdG8gZGlzYWJsZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdldmVudFNldEFnZU91dEludEVuCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2V2ZW50R2V0QWdlT3V0SW50RW4KKgoqIERFU0NSSVBUSU9OOgoqCQlJbnRlcnJ1cHQgb24gQWdlIE91dC4gV2hlbiBhZ2luZyBpcyBlbmFibGVkLCBhbGwgbm9uLXN0YXRpYyBhZGRyZXNzIAoqCQllbnRyaWVzIGluIHRoZSBBVFUncyBhZGRyZXNzIGRhdGFiYXNlIGFyZSBwZXJpb2RpY2FsbHkgYWdlZC4KKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgc2V0IHRvIEdUX1RSVUUgYW5kIGFuIGVudHJ5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAoqCQlwb3J0IGlzIGFnZWQgb3V0LCBhbiBBZ2VPdXRWaW9sYXRpb24gd2lsbCBiZSBjYXB0dXJlZCBmb3IgdGhhdCBlbnRyeS4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRSwgaWYgQWdlIE91dCBJbnRlcnJ1cHQgaXMgZW5hYmxlZAoqCQkJICAgR1RfRkFMVVNFLCBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdldmVudEdldEFnZU91dEludEVuCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdldmVudFNldE92ZXJMaW1pdEludAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIE92ZXIgTGltaXQgSW50ZXJydXB0IGZvciBhIHBvcnQuCioJCUlmIGl0J3MgZW5hYmxlZCwgYW4gQVRVIE1pc3MgdmlvbGF0aW9uIHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gcG9ydCBhdXRvCioJCWxlYXJuIHJlYWNoZWQgdGhlIGxpbWl0KHJlZmVyIHRvIGdmZGJHZXRQb3J0QXR1TGltaXRSZWFjaGVkIEFQSSkuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQltb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgT3ZlciBMaW1pdCBJbnRlcnJ1cHQsCioJCQkgICBHVF9GQUxVU0UgdG8gZGlzYWJsZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdldmVudFNldE92ZXJMaW1pdEludAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdldmVudEdldE92ZXJMaW1pdEludAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIE92ZXIgTGltaXQgSW50ZXJydXB0IGZvciBhIHBvcnQuCioJCUlmIGl0J3MgZW5hYmxlZCwgYW4gQVRVIE1pc3MgdmlvbGF0aW9uIHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gcG9ydCBhdXRvCioJCWxlYXJuIHJlYWNoZWQgdGhlIGxpbWl0KHJlZmVyIHRvIGdmZGJTZXRQb3J0QXR1TGVhcm5MaW1pdCBBUEkpLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIHRvIGVuYWJsZSBPdmVyIExpbWl0IEludGVycnVwdCwKKgkJCSAgIEdUX0ZBTFVTRSB0byBkaXNhYmxlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZXZlbnRHZXRPdmVyTGltaXRJbnQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2V2ZW50R2V0UG9ydEF0dUxpbWl0UmVhY2hlZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGNoZWNrcyBpZiBsZWFybiBsaW1pdCBoYXMgYmVlbiByZWFjaGVkLgoqCQlXaGVuIGl0IHJlYWNoZWQsIHRoZSBwb3J0IGNhbiBubyBsb25nZXIgYXV0byBsZWFybiBhbnkgbW9yZSBNQUMgYWRkcmVzc2VzCioJCWJlY2F1c2UgdGhlIGFkZHJlc3MgbGVhcm4gbGltaXQgc2V0IG9uIHRoaXMgcG9ydCBoYXMgYmVlbiByZWFjaGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqCQkJCQkJCQkJCQkgIAoqIE9VVFBVVFM6CiogICAgICAgbGltaXQgLSBHVF9UUlVFLCBpZiBsaW1pdCBoYXMgYmVlbiByZWFjaGVkCioJCQkgICAgR1RfRkFMU0UsIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2V2ZW50R2V0UG9ydEF0dUxpbWl0UmVhY2hlZAooCiAgICBJTiAgR1RfUURfREVWIAkqZGV2LAogICAgSU4gIEdUX0xQT1JUICAJcG9ydCwKICAgIElOICBHVF9CT09MICAgCSpsaW1pdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBldmVudFNldERldkludAoqCiogREVTQ1JJUFRJT046CioJCURldmljZSBJbnRlcnJ1cHQuCioJCVRoZSBmb2xsb3dpbmcgZGV2aWNlIGludGVycnVwdHMgYXJlIHN1cHBvcnRlZDoKKgkJCUdUX0RFVl9JTlRfV0FUQ0hET0cJLSAKKgkJCQlXYXRjaERvZyBldmVudCBpbnRlcnJ1cHQgKFdhdGNoRG9nIGV2ZW50IGNhbiBiZSBjb25maWd1cmVkIHdpdGggCioJCQkJZ3dkU2V0RXZlbnQgQVBJKQoqCQkJR1RfREVWX0lOVF9KQU1MSU1JVAktCioJCQkJYW55IG9mIHRoZSBwb3J0cyBkZXRlY3QgYW4gSW5ncmVzcyBKYW0gTGltaXQgdmlvbGF0aW9uCioJCQkJKHNlZSBncHJ0U2V0UGF1c2VMaW1pdEluIEFQSSkKKgkJCUdUX0RFVl9JTlRfRFVQTEVYX01JU01BVENIIC0gCioJCQkJYW55IG9mIHRoZSBwb3J0cyBkZXRlY3QgYSBkdXBsZXggbWlzbWF0Y2ggKGkuZS4sIHRoZSBsb2NhbCBwb3J0IGlzIAoqCQkJCWluIGhhbGYgZHVwbGV4IG1vZGUgd2hpbGUgdGhlIGxpbmsgcGFydG5lciBpcyBpbiBmdWxsIGR1cGxleCBtb2RlKQoqCQkJR1RfREVWX0lOVF9TRVJERVNfTElOSyAtIAoqCQkJCVNFUkRFUyBsaW5rIGNoYWdlIGludGVycnVwdC4KKgkJCQlBbiBpbnRlcnJ1cHQgb2NjdXJzIHdoZW4gYSBTRVJERVMgcG9ydCBjaGFuZ2VzIGxpbmsgc3RhdHVzCioJCQkJKGxpbmsgdXAgb3IgbGluayBkb3duKQoqCQkJCioJCUlmIGFueSBvZiB0aGUgYWJvdmUgZXZlbnRzIGlzIGVuYWJsZWQsIEdUX0RFVklDRV9JTlQgaW50ZXJydXB0IHdpbGwKKgkJYmUgYXNzZXJ0ZWQgYnkgdGhlIGVuYWJsZWQgZXZlbnQgd2hlbiBHVF9ERVZfSU5UIGlzIGVuYWJsZWQgd2l0aCAKKgkJZXZlbnRTZXRBY3RpdmUgQVBJLgoqCQkKKiBJTlBVVFM6CioJCWRldkludCAtIEdUX0RFVl9JTlQKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBldmVudFNldERldkludAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfREVWX0VWRU5UICAgICpkZXZJbnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3dkU2V0RXZlbnQKKgoqIERFU0NSSVBUSU9OOgoqCQlXYXRjaCBEb2cgRXZlbnQuCioJCVRoZSBmb2xsb3dpbmcgV2F0Y2ggRG9nIGV2ZW50cyBhcmUgc3VwcG9ydGVkOgoqCQkJR1RfV0RfUUMgIC0gUXVldWUgQ29udHJvbGxlciBXYXRjaCBEb2cgZW5hYmxlLgoqCQkJCQkJV2hlbiBlbmFibGVkLCB0aGUgUUMncyB3YXRjaCBkb2cgY2lyY3VpdCBjaGVja3MgZm9yIGxpbmsKKgkJCQkJCWxpc3QgZXJyb3JzIGFuZCBhbnkgZXJyb3JzIGZvdW5kIGluIHRoZSBRQy4KKgkJCUdUX1dEX0VHUkVTUyAtIEVncmVzcyBXYXRjaCBEb2cgZW5hYmxlLgoqCQkJCQkJV2hlbiBlbmFibGVkLCBlYWNoIHBvcnQncyBlZ3Jlc3MgY2lyY3VpdCBjaGVja3MgZm9yIHByb2JsZW1zCioJCQkJCQliZXR3ZWVuIHRoZSBwb3J0IGFuZCB0aGUgUXVldWUgQ29udHJvbGxlci4KKgkJCUdUX1dEX0ZPUkNFIC0gRm9yY2UgYSBXYXRjaCBEb2cgZXZlbnQuCioJCQkKKgkJSWYgYW55IG9mIHRoZSBhYm92ZSBldmVudHMgaXMgZW5hYmxlZCwgR1RfREVWSUNFX0lOVCBpbnRlcnJ1cHQgd2lsbAoqCQliZSBhc3NlcnRlZCBieSB0aGUgZW5hYmxlZCBXYXRjaERvZyBldmVudCB3aGVuIEdUX0RFVl9JTlRfV0FUQ0hET0cgaXMKKgkJZW5hYmxlZCB3aXRoIGV2ZW50U2V0RGV2QWN0aXZlIEFQSSBhbmQgR1RfREVWX0lOVCBpcyBlbmFibGVkIHdpdGggCioJCWV2ZW50U2V0QWN0aXZlIEFQSS4KKgkJCiogSU5QVVRTOgoqCQl3ZEV2ZW50IC0gV2F0Y2ggRG9nIEV2ZW50cwoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd3ZFNldEV2ZW50CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9VMzIJICAgIHdkRXZlbnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3dkU2V0U1dSZXNldE9uV0QKKgoqIERFU0NSSVBUSU9OOgoqCQlTV1Jlc2V0IG9uIFdhdGNoIERvZyBFdmVudC4KKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgYW55IGVuYWJsZWQgd2F0Y2ggZG9nIGV2ZW50IChnd2RTZXRFdmVudCBBUEkpIAoqCQl3aWxsIGF1dG9tYXRpY2FsbHkgcmVzZXQgdGhlIHN3aXRjaCBjb3JlJ3MgZGF0YXBhdGgganVzdCBhcyBpZiBnc3lzU3dSZXNldAoqCQlBUEkgaXMgY2FsbGVkLgoqCioJCVRoZSBXYXRjaCBEb2cgSGlzdG9yeSAoZ3dkR2V0SGlzdG9yeSBBUEkpIHdvbid0IGJlIGNsZWFyZWQgYnkgdGhpcyAKKgkJYXV0b21hdGljIFNXUmVzZXQuIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGtub3cgaWYgYW55IHdhdGNoIGRvZyBldmVudCAKKgkJZXZlciBvY2N1cnJlZCBldmVuIGlmIHRoZSBzd2ljaCBpcyBjb25maWd1cmVkIHRvIGF1dG9tYXRpY2FsbHkgcmVjb3ZlciAKKgkJZnJvbSBhIHdhdGNoIGRvZy4KKgoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCwgZW5hYmxlZCB3YXRjaCBkb2cgZXZlbnRzIHdpbGwgbm90IGNhdXNlIGEKKgkJU1dSZXNldC4KKgoqIElOUFVUUzoKKgkJZW4gICAtIEdUX1RSVUUgdG8gZW5hYmxlIFNXUmVzZXQgb24gV0QKKgkJCSAgIEdUX0ZBTFVTRSB0byBkaXNhYmxlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3dkU2V0U1dSZXNldE9uV0QKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0JPT0wJICAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd3ZEdldFNXUmVzZXRPbldECioKKiBERVNDUklQVElPTjoKKgkJU1dSZXNldCBvbiBXYXRjaCBEb2cgRXZlbnQuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGFueSBlbmFibGVkIHdhdGNoIGRvZyBldmVudCAoZ3dkU2V0RXZlbnQgQVBJKSAKKgkJd2lsbCBhdXRvbWF0aWNhbGx5IHJlc2V0IHRoZSBzd2l0Y2ggY29yZSdzIGRhdGFwYXRoIGp1c3QgYXMgaWYgZ3N5c1N3UmVzZXQKKgkJQVBJIGlzIGNhbGxlZC4KKgoqCQlUaGUgV2F0Y2ggRG9nIEhpc3RvcnkgKGd3ZEdldEhpc3RvcnkgQVBJKSB3b24ndCBiZSBjbGVhcmVkIGJ5IHRoaXMgCioJCWF1dG9tYXRpYyBTV1Jlc2V0LiBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBrbm93IGlmIGFueSB3YXRjaCBkb2cgZXZlbnQgCioJCWV2ZXIgb2NjdXJyZWQgZXZlbiBpZiB0aGUgc3dpY2ggaXMgY29uZmlndXJlZCB0byBhdXRvbWF0aWNhbGx5IHJlY292ZXIgCioJCWZyb20gYSB3YXRjaCBkb2cuCioKKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQsIGVuYWJsZWQgd2F0Y2ggZG9nIGV2ZW50cyB3aWxsIG5vdCBjYXVzZSBhCioJCVNXUmVzZXQuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAgIC0gR1RfVFJVRSwgaWYgU1dSZXNldCBvbiBXRCBpcyBlbmFibGVkCioJCQkgICBHVF9GQUxVU0UsIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3dkR2V0U1dSZXNldE9uV0QKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wJICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnd2RHZXRIaXN0b3J5CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBXYXRjaCBEb2cgaGlzdG9yeS4gVGhleSBhcmUKKgoqCQl3ZEV2ZW50IC0gCioJCQlXaGVuIGl0J3Mgc2V0IHRvIEdUX1RSVUUsIHNvbWUgZW5hYmxlZCBXYXRjaCBEb2cgZXZlbnQgb2NjdXJyZWQuCioJCQlUaGUgZm9sbG93aW5nIGV2ZW50cyBhcmUgcG9zc2libGU6CioJCQkJUUMgV2F0Y2hEb2cgRXZlbnQgKEdUX1dEX1FDKQoqCQkJCUVncmVzcyBXYXRjaERvZyBFdmVudCAoR1RfV0RfRUdSRVNTKQoqCQkJCUZvcmNlZCBXYXRjaERvZyBFdmVudCAoR1RfV0RfRk9SQ0UpCioJCWVncmVzc0V2ZW50IC0KKgkJCUlmIGFueSBwb3J0J3MgZWdyZXNzIGxvZ2ljIGRldGVjdHMgYW4gZWdyZXNzIHdhdGNoIGRvZyBpc3N1ZSwKKgkJCXRoaXMgZmllbGQgaXMgc2V0IHRvIEdUX1RSVUUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVuYWJsaW5nIEdUX1dEX0VHUkVTUwoqCQkJZXZlbnQuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQloaXN0b3J5IC0gR1RfV0RfRVZFTlRfSElTVE9SWSBzdHJ1Y3R1cmUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd3ZEdldEhpc3RvcnkKKAoJSU4gIEdUX1FEX0RFVgkJCSpkZXYsCglPVVQgR1RfV0RfRVZFTlRfSElTVE9SWQkqaGlzdG9yeQopOwoKCi8qIGd0UElSTDIuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGlybDJXcml0ZVJlc291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd3JpdGVzIHJlc291cmNlIGJ1Y2tldCBwYXJhbWV0ZXJzIHRvIHRoZSBnaXZlbiByZXNvdXJjZQoqCQlvZiB0aGUgcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCWlybFJlcyAgIC0gYnVja2V0IHRvIGJlIHVzZWQgKDAgfiA0KS4KKgkJcGlybERhdGEgLSBQSVJMIHJlc291cmNlIHBhcmFtZXRlcnMuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybDJXcml0ZVJlc291cmNlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9VMzIJCWlybFJlcywKCUlOICBHVF9QSVJMMl9EQVRBCSpwaXJsRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGlybDJSZWFkUmVzb3VyY2UKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgSVJMIFBhcmFtZXRlci4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCWlybFJlcyAgIC0gYnVja2V0IHRvIGJlIHVzZWQgKDAgfiA0KS4KKgoqIE9VVFBVVFM6CioJCXBpcmxEYXRhIC0gUElSTCByZXNvdXJjZSBwYXJhbWV0ZXJzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BpcmwyUmVhZFJlc291cmNlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9VMzIJCWlybFJlcywKCU9VVCBHVF9QSVJMMl9EQVRBCSpwaXJsRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGlybDJEaXNhYmxlUmVzb3VyY2UKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBkaXNhYmxlcyBJbmdyZXNzIFJhdGUgTGltaXRpbmcgZm9yIHRoZSBnaXZlbiBidWNrZXQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlpcmxSZXMgICAtIGJ1Y2tldCB0byBiZSB1c2VkICgwIH4gNCkuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybDJEaXNhYmxlUmVzb3VyY2UKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX1UzMgkJaXJsUmVzCik7CgoKLyogZ3RQb2xpY3kuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UG9saWN5CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgUG9saWN5IGZvciBwb3J0cy4KKgkJU3VwcG9ydGVkIFBvbGljaWVzIGFyZSBkZWZpbmVkIGFzIEdUX0ZSQU1FX1BPTElDWSBhcyBmb2xsb3dzOgoqCQkJRlJBTUVfUE9MSUNZX05PTkUgICAgLSBub3JtYWwgZnJhbWUgc3dpdGNoaW5nCioJCQlGUkFNRV9QT0xJQ1lfTUlSUk9SICAtIG1pcnJvciAoY29weSkgZnJhbWUgdG8gTWlycm9yRGVzdCBwb3J0CioJCQlGUkFNRV9QT0xJQ1lfVFJBUCAgICAtIHRyYXAocmUtZGlyZWN0KSBmcmFtZSB0byB0aGUgQ1BVRGVzdCBwb3J0CioJCQlGUkFNRV9QT0xJQ1lfRElTQ0FSRCAtIGRpc2NhcmQoZmlsdGVyKSB0aGUgZnJhbWUKKgkJU3VwcG9ydGVkIFBvbGljeSB0eXBlcyBhcmUgZGVmaW5lZCBhcyBHVF9QT0xJQ1lfVFlQRToKKgkJCVBPTElDWV9UWVBFX0RBIC0gREEgUG9saWN5IE1hcHBpbmcKKgkJCQlEQSBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgREEgb2YgYSBmcmFtZSBpcyBjb250YWluZWQgaW4gCioJCQkJdGhlIEFUVSBhZGRyZXNzIGRhdGFiYXNlIHdpdGggYW4gRW50cnkgU3RhdGUgdGhhdCBpbmRpY2F0ZXMgUG9saWN5LgoqCQkJUE9MSUNZX1RZUEVfU0EgLSBTQSBQb2xpY3kgTWFwcGluZwoqCQkJCVNBIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBTQSBvZiBhIGZyYW1lIGlzIGNvbnRhaW5lZCBpbiAKKgkJCQl0aGUgQVRVIGFkZHJlc3MgZGF0YWJhc2Ugd2l0aCBhbiBFbnRyeSBTdGF0ZSB0aGF0IGluZGljYXRlcyBQb2xpY3kuCioJCQlQT0xJQ1lfVFlQRV9WVFUgLSBWVFUgUG9saWN5IE1hcHBpbmcKKgkJCQlWVFUgUG9saWN5IE1hcHBpbmcgb2NjdXJzIHdoZW4gdGhlIFZJRCBvZiBhIGZyYW1lIGlzIGNvbnRhaW5lZCBpbgoqCQkJCXRoZSBWVFUgZGF0YWJhc2Ugd2l0aCB0aGUgVmlkUG9saWN5IGlzIGVuYWJsZWQuCioJCQlQT0xJQ1lfVFlQRV9FVFlQRSAtIEV0aGVyVHlwZSBQb2xpY3kgTWFwcGluZwoqCQkJCUVUeXBlIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBFdGhlclR5cGUgb2YgYSBmcmFtZSBtYXRjaGVzCioJCQkJdGhlIFBvcnRFVHlwZSAoc2VlIGdwcnRTZXRQb3J0RVR5cGUgQVBJKQoqCQkJUE9MSUNZX1RZUEVfUFBQb0UgLSBQUFBvRSBQb2xpY3kgTWFwcGluZwoqCQkJCVBQUG9FIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBFdGhlclR5cGUgb2YgYSBmcmFtZSBtYXRjaGVzIDB4ODg2MwoqCQkJUE9MSUNZX1RZUEVfVkJBUyAtIFZCQVMgUG9saWN5IE1hcHBpbmcKKgkJCQlWQkFTIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBFdGhlclR5cGUgb2YgYSBmcmFtZSBtYXRjaGVzIDB4ODIwMAoqCQkJUE9MSUNZX1RZUEVfT1BUODIgLSBESENQIE9wdGlvbiA4MiBQb2xpY3kgTWFwcGluZwoqCQkJCURIQ1AgT3B0aW9uIDgyIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBpbmdyZXNzaW5nIGZyYW1lIGlzIGFuCioJCQkJSVB2NCBVRFAgd2l0aCBhIFVEUCBEZXN0aW5hdGlvbiBwb3J0ID0gMHgwMDQzIG9yIDB4MDA0NCwgb3IgYW4KKgkJCQlJUHY2IFVEUCB3aXRoIGEgVURQIERlc3RpbmF0aW9uIHBvcnQgPSAweDAyMjMgb3IgMHgwMjIyCioJCQlQT0xJQ1lfVFlQRV9VRFAgLSBVRFAgUG9saWN5IE1hcHBpbmcKKgkJCQlVRFAgUG9saWN5IE1hcHBpbmcgb2NjdXJzIHdoZW4gdGhlIGluZ3Jlc3NpbmcgZnJhbWUgaXMKKgkJCQlhIEJyb2FkY2FzdCBJUHY0IFVEUCBvciBhIE11bHRpY2FzdCBJUHY2IFVEUC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICB0eXBlIAktIHBvbGljeSB0eXBlIChHVF9QT0xJQ1lfVFlQRSkKKiAgICAgICBwb2xpY3kgCS0gcG9saWN5IChHVF9GUkFNRV9QT0xJQ1kpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFBvbGljeQooCiAgICBJTiAgR1RfUURfREVWIAkqZGV2LAogICAgSU4gIEdUX0xQT1JUIAlwb3J0LAogICAgSU4gIEdUX1BPTElDWV9UWVBFCXR5cGUsCglJTglHVF9GUkFNRV9QT0xJQ1kJcG9saWN5Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb2xpY3kKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBQb2xpY3kgb2YgdGhlIGdpdmVuIHBvbGljeSB0eXBlLgoqCQlTdXBwb3J0ZWQgUG9saWNpZXMgYXJlIGRlZmluZWQgYXMgR1RfRlJBTUVfUE9MSUNZIGFzIGZvbGxvd3M6CioJCQlGUkFNRV9QT0xJQ1lfTk9ORSAgICAtIG5vcm1hbCBmcmFtZSBzd2l0Y2hpbmcKKgkJCUZSQU1FX1BPTElDWV9NSVJST1IgIC0gbWlycm9yIChjb3B5KSBmcmFtZSB0byBNaXJyb3JEZXN0IHBvcnQKKgkJCUZSQU1FX1BPTElDWV9UUkFQICAgIC0gdHJhcChyZS1kaXJlY3QpIGZyYW1lIHRvIHRoZSBDUFVEZXN0IHBvcnQKKgkJCUZSQU1FX1BPTElDWV9ESVNDQVJEIC0gZGlzY2FyZChmaWx0ZXIpIHRoZSBmcmFtZQoqCQlTdXBwb3J0ZWQgUG9saWN5IHR5cGVzIGFyZSBkZWZpbmVkIGFzIEdUX1BPTElDWV9UWVBFOgoqCQkJUE9MSUNZX1RZUEVfREEgLSBEQSBQb2xpY3kgTWFwcGluZwoqCQkJCURBIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBEQSBvZiBhIGZyYW1lIGlzIGNvbnRhaW5lZCBpbiAKKgkJCQl0aGUgQVRVIGFkZHJlc3MgZGF0YWJhc2Ugd2l0aCBhbiBFbnRyeSBTdGF0ZSB0aGF0IGluZGljYXRlcyBQb2xpY3kuCioJCQlQT0xJQ1lfVFlQRV9TQSAtIFNBIFBvbGljeSBNYXBwaW5nCioJCQkJU0EgUG9saWN5IE1hcHBpbmcgb2NjdXJzIHdoZW4gdGhlIFNBIG9mIGEgZnJhbWUgaXMgY29udGFpbmVkIGluIAoqCQkJCXRoZSBBVFUgYWRkcmVzcyBkYXRhYmFzZSB3aXRoIGFuIEVudHJ5IFN0YXRlIHRoYXQgaW5kaWNhdGVzIFBvbGljeS4KKgkJCVBPTElDWV9UWVBFX1ZUVSAtIFZUVSBQb2xpY3kgTWFwcGluZwoqCQkJCVZUVSBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgVklEIG9mIGEgZnJhbWUgaXMgY29udGFpbmVkIGluCioJCQkJdGhlIFZUVSBkYXRhYmFzZSB3aXRoIHRoZSBWaWRQb2xpY3kgaXMgZW5hYmxlZC4KKgkJCVBPTElDWV9UWVBFX0VUWVBFIC0gRXRoZXJUeXBlIFBvbGljeSBNYXBwaW5nCioJCQkJRVR5cGUgUG9saWN5IE1hcHBpbmcgb2NjdXJzIHdoZW4gdGhlIEV0aGVyVHlwZSBvZiBhIGZyYW1lIG1hdGNoZXMKKgkJCQl0aGUgUG9ydEVUeXBlIChzZWUgZ3BydFNldFBvcnRFVHlwZSBBUEkpCioJCQlQT0xJQ1lfVFlQRV9QUFBvRSAtIFBQUG9FIFBvbGljeSBNYXBwaW5nCioJCQkJUFBQb0UgUG9saWN5IE1hcHBpbmcgb2NjdXJzIHdoZW4gdGhlIEV0aGVyVHlwZSBvZiBhIGZyYW1lIG1hdGNoZXMgMHg4ODYzCioJCQlQT0xJQ1lfVFlQRV9WQkFTIC0gVkJBUyBQb2xpY3kgTWFwcGluZwoqCQkJCVZCQVMgUG9saWN5IE1hcHBpbmcgb2NjdXJzIHdoZW4gdGhlIEV0aGVyVHlwZSBvZiBhIGZyYW1lIG1hdGNoZXMgMHg4MjAwCioJCQlQT0xJQ1lfVFlQRV9PUFQ4MiAtIERIQ1AgT3B0aW9uIDgyIFBvbGljeSBNYXBwaW5nCioJCQkJREhDUCBPcHRpb24gODIgUG9saWN5IE1hcHBpbmcgb2NjdXJzIHdoZW4gdGhlIGluZ3Jlc3NpbmcgZnJhbWUgaXMgYW4KKgkJCQlJUHY0IFVEUCB3aXRoIGEgVURQIERlc3RpbmF0aW9uIHBvcnQgPSAweDAwNDMgb3IgMHgwMDQ0LCBvciBhbgoqCQkJCUlQdjYgVURQIHdpdGggYSBVRFAgRGVzdGluYXRpb24gcG9ydCA9IDB4MDIyMyBvciAweDAyMjIKKgkJCVBPTElDWV9UWVBFX1VEUCAtIFVEUCBQb2xpY3kgTWFwcGluZwoqCQkJCVVEUCBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgaW5ncmVzc2luZyBmcmFtZSBpcwoqCQkJCWEgQnJvYWRjYXN0IElQdjQgVURQIG9yIGEgTXVsdGljYXN0IElQdjYgVURQLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIHR5cGUgCS0gcG9saWN5IHR5cGUgKEdUX1BPTElDWV9UWVBFKQoqCiogT1VUUFVUUzoKKiAgICAgICBwb2xpY3kgCS0gcG9saWN5IChHVF9GUkFNRV9QT0xJQ1kpCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFBvbGljeQooCiAgICBJTiAgR1RfUURfREVWIAkqZGV2LAogICAgSU4gIEdUX0xQT1JUIAlwb3J0LAogICAgSU4gIEdUX1BPTElDWV9UWVBFCXR5cGUsCglPVVQgR1RfRlJBTUVfUE9MSUNZCSpwb2xpY3kKKTsKCgovKiBndFBvcnRDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBhdXNlTGltaXRPdXQKKgoqIERFU0NSSVBUSU9OOgoqCQlMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbnRpbnVvdXMgUGF1c2UgcmVmcmVzaCBmcmFtZXMgdGhhdCBjYW4gYmUgdHJhbnNtaXR0ZWQKKgkJZnJvbSB0aGlzIHBvcnQuIFdoZW4gZnVsbCBkdXBsZXggRmxvdyBDb250cm9sIGlzIGVuYWJsZWQgb24gdGhpcyBwb3J0LAoqCQl0aGVzZSBiaXRzIGFyZSB1c2VkIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgUGF1c2UgcmVmcmVzaCBmcmFtZXMgdGhhdCBjYW4gCioJCWJlIGdlbmVyYXRlZCBmcm9tIHRoaXMgcG9ydCB0byBrZWVwIHRoaXMgcG9ydCdzIGxpbmsgcGFydG5lciBmcm9tIHNlbmRpbmcKKgkJYW55IGRhdGEuCioJCVNldHRpbmcgdGhpcyB2YWx1ZSB0byAwIHdpbGwgYWxsb3cgY29udGludW91cyBQYXVzZSBmcmFtZSByZWZyZXNoZXMgdG8gCioJCWVncmVzcyB0aGlzIHBvcnQgYXMgbG9uZyBhcyB0aGlzIHBvcnQgcmVtYWlucyBjb25nZXN0ZWQuCioJCVNldHRpbmcgdGhpcyB2YWx1ZSB0byAxIHdpbGwgYWxsb3cgMSBQYXVzZSBmcmFtZSB0byBlZ3Jlc3MgZnJvbSB0aGlzIHBvcnQKKgkJZm9yIGVhY2ggY29uZ2VzdGlvbiBzaXR1YXRpb24uCioJCVNldHRpbmcgdGhpcyB2YWx1ZSB0byAyIHdpbGwgYWxsb3cgMiBQYXVzZSBmcmFtZXMgdG8gZWdyZXNzIGZyb20gdGhpcyBwb3J0CioJCWZvciBlYWNoIGNvbmdlc3Rpb24gc2l0dWF0aW9uLCBldGMuCioJCQoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCWxpbWl0IC0gdGhlIG1heCBudW1iZXIgb2YgUGF1c2UgcmVmcmVzaCBmcmFtZXMgZm9yIGVhY2ggY29uZ2VzdGlvbiBzaXR1YXRpb24KKgkJCQkoIDAgfiAweEZGKQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBsaW1pdCA+IDB4RkYKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0UGF1c2VMaW1pdE91dAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9VMTYJCWxpbWl0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQYXVzZUxpbWl0T3V0CioKKiBERVNDUklQVElPTjoKKgkJTGltaXQgdGhlIG51bWJlciBvZiBjb250aW51b3VzIFBhdXNlIHJlZnJlc2ggZnJhbWVzIHRoYXQgY2FuIGJlIHRyYW5zbWl0dGVkCioJCWZyb20gdGhpcyBwb3J0LiBXaGVuIGZ1bGwgZHVwbGV4IEZsb3cgQ29udHJvbCBpcyBlbmFibGVkIG9uIHRoaXMgcG9ydCwKKgkJdGhlc2UgYml0cyBhcmUgdXNlZCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIFBhdXNlIHJlZnJlc2ggZnJhbWVzIHRoYXQgY2FuIAoqCQliZSBnZW5lcmF0ZWQgZnJvbSB0aGlzIHBvcnQgdG8ga2VlcCB0aGlzIHBvcnQncyBsaW5rIHBhcnRuZXIgZnJvbSBzZW5kaW5nCioJCWFueSBkYXRhLgoqCQlTZXR0aW5nIHRoaXMgdmFsdWUgdG8gMCB3aWxsIGFsbG93IGNvbnRpbnVvdXMgUGF1c2UgZnJhbWUgcmVmcmVzaGVzIHRvIAoqCQllZ3Jlc3MgdGhpcyBwb3J0IGFzIGxvbmcgYXMgdGhpcyBwb3J0IHJlbWFpbnMgY29uZ2VzdGVkLgoqCQlTZXR0aW5nIHRoaXMgdmFsdWUgdG8gMSB3aWxsIGFsbG93IDEgUGF1c2UgZnJhbWUgdG8gZWdyZXNzIGZyb20gdGhpcyBwb3J0CioJCWZvciBlYWNoIGNvbmdlc3Rpb24gc2l0dWF0aW9uLgoqCQlTZXR0aW5nIHRoaXMgdmFsdWUgdG8gMiB3aWxsIGFsbG93IDIgUGF1c2UgZnJhbWVzIHRvIGVncmVzcyBmcm9tIHRoaXMgcG9ydAoqCQlmb3IgZWFjaCBjb25nZXN0aW9uIHNpdHVhdGlvbiwgZXRjLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCWxpbWl0IC0gdGhlIG1heCBudW1iZXIgb2YgUGF1c2UgcmVmcmVzaCBmcmFtZXMgZm9yIGVhY2ggY29uZ2VzdGlvbiBzaXR1YXRpb24KKgkJCQkoIDAgfiAweEZGKQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFBhdXNlTGltaXRPdXQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfVTE2CQkqbGltaXQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBhdXNlTGltaXRJbgoqCiogREVTQ1JJUFRJT046CioJCUxpbWl0IHRoZSBudW1iZXIgb2YgY29udGludW91cyBQYXVzZSByZWZyZXNoIGZyYW1lcyB0aGF0IGNhbiBiZSByZWNlaXZlZAoqCQlvbiB0aGlzIHBvcnQuIFdoZW4gYSBwb3J0IGhhcyBmbG93IENvbnRyb2wgZW5hYmxlZCwgdGhpcyB2YWx1ZSBjYW4gYmUgCioJCXVzZWQgdG8gbGltaXQgaG93IGxvbmcgdGhpcyBwb3J0IGNhbiBiZSBQYXVzZWQgb2ZmIHRvIHByZXZlbnQgYSBwb3J0IHN0YWxsCioJCXRocm91Z2ggamFtbWluZy4KKgkJV2hlbiB0aGlzIHZhbHVlIGlzIGluIHRoZSByYW5nZSBvZiAweDAxIHRvIDB4RkYsIGFuZCBhIGZyYW1lIGlzIHJlYWR5IHRvCioJCWJlIHRyYW5zbWl0dGVkIG91dCB0aGlzIHBvcnQsIGJ1dCBpdCBjYW5ub3QgYmUgdHJhbnNtaXR0ZWQgZHVlIHRvIHRoZSBwb3J0CioJCWJlaW5nIGphbW1lZCwgdGhpcyBsaW1pdCBtZWNoYW5pc20gc3RhcnRzLiBUaGUgbGltaXQgbWVjaGFuaXNtIHN0YXJ0cyAKKgkJY291bnRpbmcgbmV3IFBhdXNlIHJlZnJlc2ggZnJhbWVzIG9yIGNvdW50cyBvZiAxNiBjb25zZWN1dGl2ZSBjb2xsaXNpb25zLgoqCQlJZiB0aGUgY291bnRlciByZWFjaGVzIHRoZSB2YWx1ZSBzZXQgdGhyb3VnaCB0aGlzIEFQSSwgdGhlIGZvbGxvd2luZyBldmVudAoqCQl3aWxsIG9jY3VyOgoqCQkJMSkgUG9ydCdzIEZvcmNlRkMgaXMgZW5hYmxlZCwKKgkJCTIpIFBvcnQncyBGQ1ZhbHVlIGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCBhbmQKKgkJCTMpIEphbSBMaW1pdCBJbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuCioJCVRoaXMgZWZmZWN0aXZlbHkgZGlzYWJsZXMgRmxvdyBDb250cm9sIG9uIHRoZSBwb3J0IG9uY2UgdGhlIFBhdXNlIHRpbWVyIAoqCQlleHBpcmVzLiBJZiBhIGZyYW1lIGdldHMgdHJhbnNtaXR0ZWQgb3V0IHRoaXMgcG9ydCBiZWZvcmUgdGhlIGNvdW50ZXIKKgkJcmVhY2hlcyB0aGlzIGxpbWl0LCB0aGVuIHRoaXMgbGltaXQgbWVjaGFuaXNtIGNvdW50ZXIgcmVzZXRzIGJhY2sgdG8gemVyby4KKgoqCQlTZXR0aW5nIHRoaXMgdmFsdWUgdG8gMCB3aWxsIGFsbG93IGNvbnRpbnVvdXMgamFtbWluZyB0byBiZSByZWNlaXZlZCBvbiAKKgkJdGhpcyBwb3J0IHdpdGhvdXQgdGhlIFBvcnQncyBGb3JjZUZDIGFuZCBGQ1ZhbHVlIGdldHRpbmcgbW9kaWZpZWQuCioKKgkJVGhlIG1vZGlmaWNhdGlvbiBvZiBQb3J0J3MgRm9yY2VGQyBhbmQgRkNWYWx1ZSBpcyB0aGUgb25seSBpbmRpY2F0aW9uIHRoYXQgCioJCXRoZSBsaW1pdCB3YXMgcmVhY2hlZCBvbiB0aGlzIHBvcnQuCioJCQoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCWxpbWl0IC0gdGhlIG1heCBudW1iZXIgb2YgY29udGludW91cyBQYXVzZSByZWZyZXNoIGZyYW1lcyBmb3IgZWFjaCB0cmFzbWl0aW9uCioJCQkJKCAwIH4gMHhGRikKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgbGltaXQgPiAweEZGCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFBhdXNlTGltaXRJbgooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9VMTYJCWxpbWl0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQYXVzZUxpbWl0SW4KKgoqIERFU0NSSVBUSU9OOgoqCQlMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbnRpbnVvdXMgUGF1c2UgcmVmcmVzaCBmcmFtZXMgdGhhdCBjYW4gYmUgcmVjZWl2ZWQKKgkJb24gdGhpcyBwb3J0LiBXaGVuIGEgcG9ydCBoYXMgZmxvdyBDb250cm9sIGVuYWJsZWQsIHRoaXMgdmFsdWUgY2FuIGJlIAoqCQl1c2VkIHRvIGxpbWl0IGhvdyBsb25nIHRoaXMgcG9ydCBjYW4gYmUgUGF1c2VkIG9mZiB0byBwcmV2ZW50IGEgcG9ydCBzdGFsbAoqCQl0aHJvdWdoIGphbW1pbmcuCioJCVdoZW4gdGhpcyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2Ugb2YgMHgwMSB0byAweEZGLCBhbmQgYSBmcmFtZSBpcyByZWFkeSB0bwoqCQliZSB0cmFuc21pdHRlZCBvdXQgdGhpcyBwb3J0LCBidXQgaXQgY2Fubm90IGJlIHRyYW5zbWl0dGVkIGR1ZSB0byB0aGUgcG9ydAoqCQliZWluZyBqYW1tZWQsIHRoaXMgbGltaXQgbWVjaGFuaXNtIHN0YXJ0cy4gVGhlIGxpbWl0IG1lY2hhbmlzbSBzdGFydHMgCioJCWNvdW50aW5nIG5ldyBQYXVzZSByZWZyZXNoIGZyYW1lcyBvciBjb3VudHMgb2YgMTYgY29uc2VjdXRpdmUgY29sbGlzaW9ucy4KKgkJSWYgdGhlIGNvdW50ZXIgcmVhY2hlcyB0aGUgdmFsdWUgc2V0IHRocm91Z2ggdGhpcyBBUEksIHRoZSBmb2xsb3dpbmcgZXZlbnQKKgkJd2lsbCBvY2N1cjoKKgkJCTEpIFBvcnQncyBGb3JjZUZDIGlzIGVuYWJsZWQsCioJCQkyKSBQb3J0J3MgRkNWYWx1ZSBpcyBjbGVhcmVkIHRvIGEgemVybywgYW5kCioJCQkzKSBKYW0gTGltaXQgSW50ZXJydXB0IGlzIGFzc2VydGVkLgoqCQlUaGlzIGVmZmVjdGl2ZWx5IGRpc2FibGVzIEZsb3cgQ29udHJvbCBvbiB0aGUgcG9ydCBvbmNlIHRoZSBQYXVzZSB0aW1lciAKKgkJZXhwaXJlcy4gSWYgYSBmcmFtZSBnZXRzIHRyYW5zbWl0dGVkIG91dCB0aGlzIHBvcnQgYmVmb3JlIHRoZSBjb3VudGVyCioJCXJlYWNoZXMgdGhpcyBsaW1pdCwgdGhlbiB0aGlzIGxpbWl0IG1lY2hhbmlzbSBjb3VudGVyIHJlc2V0cyBiYWNrIHRvIHplcm8uCioKKgkJU2V0dGluZyB0aGlzIHZhbHVlIHRvIDAgd2lsbCBhbGxvdyBjb250aW51b3VzIGphbW1pbmcgdG8gYmUgcmVjZWl2ZWQgb24gCioJCXRoaXMgcG9ydCB3aXRob3V0IHRoZSBQb3J0J3MgRm9yY2VGQyBhbmQgRkNWYWx1ZSBnZXR0aW5nIG1vZGlmaWVkLgoqCioJCVRoZSBtb2RpZmljYXRpb24gb2YgUG9ydCdzIEZvcmNlRkMgYW5kIEZDVmFsdWUgaXMgdGhlIG9ubHkgaW5kaWNhdGlvbiB0aGF0IAoqCQl0aGUgbGltaXQgd2FzIHJlYWNoZWQgb24gdGhpcyBwb3J0LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCWxpbWl0IC0gdGhlIG1heCBudW1iZXIgb2YgY29udGludW91cyBQYXVzZSByZWZyZXNoIGZyYW1lcyBmb3IgZWFjaCB0cmFzbWl0aW9uCioJCQkJKCAwIH4gMHhGRikKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQYXVzZUxpbWl0SW4KKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfVTE2CQkqbGltaXQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEZyYW1lTW9kZQoqCiogREVTQ1JJUFRJT046CioJCUZybWFlIE1vZGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGV4cGVjdGVkIEluZ3Jlc3MgYW5kIHRoZSBnZW5lcmF0ZWQgRWdyZXNzCioJCXRhZ2dpbmcgZnJhbWUgZm9ybWF0IGZvciB0aGlzIHBvcnQgYXMgZm9sbG93czoKKgkJCUdUX0ZSQU1FX01PREVfTk9STUFMIC0KKgkJCQlOb3JtYWwgTmV0d29yayBtb2RlIHVzZXMgaW5kdXN0cnkgc3RhbmRhcmQgSUVFRSA4MDIuM2FjIFRhZ2dlZCBvciAKKgkJCQlVbnRhZ2dlZCBmcmFtZXMuIFRhZ2dlZCBmcmFtZXMgdXNlIGFuIEV0aGVyIFR5cGUgb2YgMHg4MTAwLgoqCQkJR1RfRlJBTUVfTU9ERV9EU0EgLQoqCQkJCURTQSBtb2RlIHVzZXMgYSBNYXJ2ZWxsIGRlZmluZWQgdGFnZ2VkIGZyYW1lIGZvcm1hdCBmb3IgCioJCQkJQ2hpcC10by1DaGlwIGFuZCBDaGlwLXRvLUNQVSBjb25uZWN0aW9ucy4KKgkJCUdUX0ZSQU1FX01PREVfUFJPVklERVIgLQoqCQkJCVByb3ZpZGVyIG1vZGUgdXNlcyB1c2VyIGRlZmluYWJsZSBFdGhlciBUeXBlcyBwZXIgcG9ydCAKKgkJCQkoc2VlIGdwcnRTZXRQb3J0RVR5cGUvZ3BydEdldFBvcnRFVHlwZSBBUEkpLgoqCQkJR1RfRlJBTUVfTU9ERV9FVEhFUl9UWVBFX0RTQSAtCioJCQkJRXRoZXIgVHlwZSBEU0EgbW9kZSB1c2VzIHN0YW5kYXJkIE1hcnZlbGwgRFNBIFRhZ2dlZCBmcmFtZSBpbmZvIAoqCQkJCWZsb3dpbmcgYSB1c2VyIGRlZmluYWJsZSBFdGhlciBUeXBlLiBUaGlzIG1vZGUgYWxsb3dzIHRoZSBtaXh0dXJlCioJCQkJb2YgTm9ybWFsIE5ldHdvcmsgZnJhbWVzIHdpdGggRFNBIFRhZ2dlZCBmcmFtZXMgYW5kIGlzIHVzZWZ1bCB0byAKKgkJCQliZSB1c2VkIG9uIHBvcnRzIHRoYXQgY29ubmVjdCB0byBhIENQVS4KKgkJCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJbW9kZSAtIEdUX0ZSQU1FX01PREUgdHlwZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBtb2RlIGlzIHVua25vd24KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RnJhbWVNb2RlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX0ZSQU1FX01PREUJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RnJhbWVNb2RlCioKKiBERVNDUklQVElPTjoKKgkJRnJtYWUgTW9kZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgZXhwZWN0ZWQgSW5ncmVzcyBhbmQgdGhlIGdlbmVyYXRlZCBFZ3Jlc3MKKgkJdGFnZ2luZyBmcmFtZSBmb3JtYXQgZm9yIHRoaXMgcG9ydCBhcyBmb2xsb3dzOgoqCQkJR1RfRlJBTUVfTU9ERV9OT1JNQUwgLQoqCQkJCU5vcm1hbCBOZXR3b3JrIG1vZGUgdXNlcyBpbmR1c3RyeSBzdGFuZGFyZCBJRUVFIDgwMi4zYWMgVGFnZ2VkIG9yIAoqCQkJCVVudGFnZ2VkIGZyYW1lcy4gVGFnZ2VkIGZyYW1lcyB1c2UgYW4gRXRoZXIgVHlwZSBvZiAweDgxMDAuCioJCQlHVF9GUkFNRV9NT0RFX0RTQSAtCioJCQkJRFNBIG1vZGUgdXNlcyBhIE1hcnZlbGwgZGVmaW5lZCB0YWdnZWQgZnJhbWUgZm9ybWF0IGZvciAKKgkJCQlDaGlwLXRvLUNoaXAgYW5kIENoaXAtdG8tQ1BVIGNvbm5lY3Rpb25zLgoqCQkJR1RfRlJBTUVfTU9ERV9QUk9WSURFUiAtCioJCQkJUHJvdmlkZXIgbW9kZSB1c2VzIHVzZXIgZGVmaW5hYmxlIEV0aGVyIFR5cGVzIHBlciBwb3J0IAoqCQkJCShzZWUgZ3BydFNldFBvcnRFVHlwZS9ncHJ0R2V0UG9ydEVUeXBlIEFQSSkuCioJCQlHVF9GUkFNRV9NT0RFX0VUSEVSX1RZUEVfRFNBIC0KKgkJCQlFdGhlciBUeXBlIERTQSBtb2RlIHVzZXMgc3RhbmRhcmQgTWFydmVsbCBEU0EgVGFnZ2VkIGZyYW1lIGluZm8gCioJCQkJZmxvd2luZyBhIHVzZXIgZGVmaW5hYmxlIEV0aGVyIFR5cGUuIFRoaXMgbW9kZSBhbGxvd3MgdGhlIG1peHR1cmUKKgkJCQlvZiBOb3JtYWwgTmV0d29yayBmcmFtZXMgd2l0aCBEU0EgVGFnZ2VkIGZyYW1lcyBhbmQgaXMgdXNlZnVsIHRvIAoqCQkJCWJlIHVzZWQgb24gcG9ydHMgdGhhdCBjb25uZWN0IHRvIGEgQ1BVLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9GUkFNRV9NT0RFIHR5cGUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRGcmFtZU1vZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfRlJBTUVfTU9ERQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0SG9sZEF0MQoqCiogREVTQ1JJUFRJT046CioJCUhvbGQgQWdpbmcgQVRVIEVudHJpZXMgYXQgYW4gRW50cnkgU3RhdGUgdmFsdWUgb2YgMS4gV2hlbiB0aGlzIGZlYXR1cmUKKgkJaXMgc2V0IHRvIEdUX1RSVUUsIEFUVSBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBvcnQgd2lsbCBhZ2UgZG93biAKKgkJdG8gYW4gRW50cnkgU3RhdGUgb2YgMHgxLCBidXQgd2lsbCBub3QgZ28gdG8gMHgwICgweDAgd291bGQgcHVyZ2UgdGhlCioJCWVudHJ5KQoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIHRvIGhvbGQgYWdpbmcgQVRVIGVudHJ5IHdpdGggRW50cnkgU3RhdGUgb2YgMSwgCioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0SG9sZEF0MQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0SG9sZEF0MQoqCiogREVTQ1JJUFRJT046CioJCUhvbGQgQWdpbmcgQVRVIEVudHJpZXMgYXQgYW4gRW50cnkgU3RhdGUgdmFsdWUgb2YgMS4gV2hlbiB0aGlzIGZlYXR1cmUKKgkJaXMgc2V0IHRvIEdUX1RSVUUsIEFUVSBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBvcnQgd2lsbCBhZ2UgZG93biAKKgkJdG8gYW4gRW50cnkgU3RhdGUgb2YgMHgxLCBidXQgd2lsbCBub3QgZ28gdG8gMHgwICgweDAgd291bGQgcHVyZ2UgdGhlCioJCWVudHJ5KQoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgdG8gaG9sZCBhZ2luZyBBVFUgZW50cnkgd2l0aCBFbnRyeSBTdGF0ZSBvZiAxLCAKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0SG9sZEF0MQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MICAJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFJlZnJlc2hMb2NrZWQKKgoqIERFU0NSSVBUSU9OOgoqCQlBdXRvIFJlZnJlc2gga25vd24gYWRkcmVzc2VzIHdoZW4gcG9ydCBpcyBMb2NrZWQuIEFscmVhZHkga25vd24gYWRkcmVzc2VzIAoqCQl3aWxsIGJlIGF1dG8gcmVmcmVzaGVkIHdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQuIFdoZW4gdGhpcyBmZWF0dXJlCioJCWlzIGRpc2FibGVkLCBhdXRvIHJlZnJlc2hpbmcgd2lsbCBub3Qgb2NjdXIgb24gTG9ja2VkIHBvcnRzLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIHRvIGVuYWJsZSBBdXRvIFJlZnJlc2gga25vd24gYWRkcmVzc2VzIG9uIGxvY2tlZCBwb3J0CioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0UmVmcmVzaExvY2tlZAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UmVmcmVzaExvY2tlZAoqCiogREVTQ1JJUFRJT046CioJCUF1dG8gUmVmcmVzaCBrbm93biBhZGRyZXNzZXMgd2hlbiBwb3J0IGlzIExvY2tlZC4gQWxyZWFkeSBrbm93biBhZGRyZXNzZXMgCioJCXdpbGwgYmUgYXV0byByZWZyZXNoZWQgd2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZC4gV2hlbiB0aGlzIGZlYXR1cmUKKgkJaXMgZGlzYWJsZWQsIGF1dG8gcmVmcmVzaGluZyB3aWxsIG5vdCBvY2N1ciBvbiBMb2NrZWQgcG9ydHMuCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgQXV0byBSZWZyZXNoIGtub3duIGFkZHJlc3NlcyBvbiBsb2NrZWQgcG9ydAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRSZWZyZXNoTG9ja2VkCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UG9ydEVUeXBlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQncyBzcGVjaWFsIEV0aGVyIFR5cGUuIFRoaXMgRXRoZXIgVHlwZSBpcyB1c2VkCioJCWZvciBQb2xpY3kgKHNlZSBncHJ0U2V0UG9saWN5IEFQSSkgYW5kIEZyYW1lTW9kZSAoc2VlIGdwcnRTZXRGcmFtZU1vZGUgQVBJKS4KKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQlldHlwZSAtIHBvcnQncyBzcGVjaWFsIGV0aGVyIHR5cGUKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0UG9ydEVUeXBlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQJCXBvcnQsCglJTiBHVF9FVFlQRQkJZXR5cGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBvcnRFVHlwZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgdGhlIHBvcnQncyBzcGVjaWFsIEV0aGVyIFR5cGUuIFRoaXMgRXRoZXIgVHlwZSBpcyB1c2VkCioJCWZvciBQb2xpY3kgKHNlZSBncHJ0U2V0UG9saWN5IEFQSSkgYW5kIEZyYW1lTW9kZSAoc2VlIGdwcnRTZXRGcmFtZU1vZGUgQVBJKS4KKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKgkJZXR5cGUgLSBwb3J0J3Mgc3BlY2lhbCBldGhlciB0eXBlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UG9ydEVUeXBlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0VUWVBFCSpldHlwZQopOwoKCi8qIGd0UG9ydFJhdGVDdHIuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRGcmFtZU92ZXJoZWFkCioKKiBERVNDUklQVElPTjoKKiAgICAgICBFZ3Jlc3MgcmF0ZSBmcmFtZSBvdmVyaGVhZCBhZGp1c3RtZW50LgoqCQlUaGlzIGZpZWxkIGlzIHVzZWQgdG8gYWRqdXN0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBuZWVkIHRvIGJlIGFkZGVkIHRvIGEKKgkJZnJhbWUncyBJRkcgb24gYSBwZXIgZnJhbWUgYmFzaXMuCioKKgkJVGhlIGVncmVzcyByYXRlIGxpbWl0ZXIgbXVsdGlwbGllcyB0aGUgdmFsdWUgcHJvZ3JhbW1lZCBpbiB0aGlzIGZpZWxkIGJ5IGZvdXIKKgkJZm9yIGNvbXB1dGluZyB0aGUgZnJhbWUgYnl0ZSBvZmZzZXQgYWRqdXN0bWVudCB2YWx1ZSAoaS5lLiwgdGhlIGFtb3VudCB0aGUKKgkJSVBHIGlzIGluY3JlYXNlZCBmb3IgZXZlcnkgZnJhbWUpLiBUaGlzIGFkanVzdG1lbnQsIGlmIGVuYWJsZWQsIGlzIG1hZGUgdG8KKgkJZXZlcnkgZWdyZXNzaW5nIGZyYW1lJ3MgSVBHIGFuZCBpdCBpcyBtYWRlIGluIGFkZGl0aW9uIHRvIGFueSBvdGhlciBJUEcKKgkJYWRqdXN0bWVudHMgZHVlIHRvIG90aGVyIEVncmVzcyBSYXRlIENvbnRyb2wgc2V0dGluZ3MuCioKKgkJVGhlIGVncmVzcyBvdmVyaGVhZCBhZGp1c3RtZW50IGNhbiBhZGQgdGhlIGZvbGxvd2luZyBudW1iZXIgb2YgYnl0ZSB0aW1lcwoqCQl0byBlYWNoIGZyYW1lJ3MgSVBHOiAwLCA0LCA4LCAxMiwgMTYsIDIwLCAyNCwgMjgsIDMyLCAzNiwgNDAsIDQ0LCA0OCwgNTIsCioJCTU2IGFuZCA2MC4KKgoqCQlFeGFtcGxlOgoqCQlJZiBGcmFtZU92ZXJoZWFkID0gMTEsIHRoZSBlZ3Jlc3MgcmF0ZSBsaW1pdGVyIHdvdWxkIGluY3JlYXNlIHRoZSBJUEcKKgkJYmV0d2VlbiBldmVyeSBmcmFtZSBieSBhbiBhZGRpdGlvbmFsIDQ0IGJ5dGVzLgoqCioJCU5vdGU6IFdoZW4gdGhlIENvdW50IE1vZGUgKHBvcnQgb2Zmc2V0IDB4MEEpIGlzIGluIEZyYW1lIGJhc2VkIGVncmVzcyByYXRlCioJCXNoYXBpbmcgbW9kZSwgdGhlc2UgRnJhbWUgT3ZlcmhlYWQgYml0cyBtdXN0IGJlIDB4MC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CSAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgb3ZlcmhlYWQgLSBGcmFtZSBvdmVyaGVhZCAoMCB+IDE1KQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldEZyYW1lT3ZlcmhlYWQKKAogICAgSU4gR1RfUURfREVWCQkqZGV2LAogICAgSU4gR1RfTFBPUlQJCQlwb3J0LAogICAgSU4gR1RfMzIJCQlvdmVyaGVhZAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRGcmFtZU92ZXJoZWFkCioKKiBERVNDUklQVElPTjoKKiAgICAgICBFZ3Jlc3MgcmF0ZSBmcmFtZSBvdmVyaGVhZCBhZGp1c3RtZW50LgoqCQlUaGlzIGZpZWxkIGlzIHVzZWQgdG8gYWRqdXN0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBuZWVkIHRvIGJlIGFkZGVkIHRvIGEKKgkJZnJhbWUncyBJRkcgb24gYSBwZXIgZnJhbWUgYmFzaXMuCioKKgkJVGhlIGVncmVzcyByYXRlIGxpbWl0ZXIgbXVsdGlwbGllcyB0aGUgdmFsdWUgcHJvZ3JhbW1lZCBpbiB0aGlzIGZpZWxkIGJ5IGZvdXIKKgkJZm9yIGNvbXB1dGluZyB0aGUgZnJhbWUgYnl0ZSBvZmZzZXQgYWRqdXN0bWVudCB2YWx1ZSAoaS5lLiwgdGhlIGFtb3VudCB0aGUKKgkJSVBHIGlzIGluY3JlYXNlZCBmb3IgZXZlcnkgZnJhbWUpLiBUaGlzIGFkanVzdG1lbnQsIGlmIGVuYWJsZWQsIGlzIG1hZGUgdG8KKgkJZXZlcnkgZWdyZXNzaW5nIGZyYW1lJ3MgSVBHIGFuZCBpdCBpcyBtYWRlIGluIGFkZGl0aW9uIHRvIGFueSBvdGhlciBJUEcKKgkJYWRqdXN0bWVudHMgZHVlIHRvIG90aGVyIEVncmVzcyBSYXRlIENvbnRyb2wgc2V0dGluZ3MuCioKKgkJVGhlIGVncmVzcyBvdmVyaGVhZCBhZGp1c3RtZW50IGNhbiBhZGQgdGhlIGZvbGxvd2luZyBudW1iZXIgb2YgYnl0ZSB0aW1lcwoqCQl0byBlYWNoIGZyYW1lJ3MgSVBHOiAwLCA0LCA4LCAxMiwgMTYsIDIwLCAyNCwgMjgsIDMyLCAzNiwgNDAsIDQ0LCA0OCwgNTIsCioJCTU2IGFuZCA2MC4KKgoqCQlFeGFtcGxlOgoqCQlJZiBGcmFtZU92ZXJoZWFkID0gMTEsIHRoZSBlZ3Jlc3MgcmF0ZSBsaW1pdGVyIHdvdWxkIGluY3JlYXNlIHRoZSBJUEcKKgkJYmV0d2VlbiBldmVyeSBmcmFtZSBieSBhbiBhZGRpdGlvbmFsIDQ0IGJ5dGVzLgoqCioJCU5vdGU6IFdoZW4gdGhlIENvdW50IE1vZGUgKHBvcnQgb2Zmc2V0IDB4MEEpIGlzIGluIEZyYW1lIGJhc2VkIGVncmVzcyByYXRlCioJCXNoYXBpbmcgbW9kZSwgdGhlc2UgRnJhbWUgT3ZlcmhlYWQgYml0cyBtdXN0IGJlIDB4MC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgb3ZlcmhlYWQgLSBGcmFtZSBvdmVyaGVhZCAoMCB+IDE1KQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldEZyYW1lT3ZlcmhlYWQKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF8zMiAgICAqb3ZlcmhlYWQKKTsKCgovKiBndFBvcnRTdGF0dXMuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0QnVmSGlnaAoqCiogREVTQ1JJUFRJT046CioJCU91dHB1dCBmcm9tIFFDIHRlbGxpbmcgdGhlIE1BQyB0aGF0IGl0IHNob3VsZCBwZXJmb3JtIEZsb3cgQ29udHJvbC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQlidWZIaWdoIC0gR1RfVFJVRSwgaWYgRmxvdyBjb250cm9sIHJlcXVpcmVkCioJCQkJICBHVF9GQUxTRSwgb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0QnVmSGlnaAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqYnVmSGlnaAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RmNFbgoqCiogREVTQ1JJUFRJT046CioJCUlucHV0IGludG8gdGhlIFFDIHRlbGxpbmcgaXQgdGhhdCBGbG93IENvbnRyb2wgaXMgZW5hYmxlZCBvbiB0aGlzIHBvcnQuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKgkJZmNFbiAtIEdUX1RSVUUsIGlmIEZsb3cgY29udHJvbCBpcyBlbmFibGVkCioJCQkgICBHVF9GQUxTRSwgb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0RmNFbgooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqZmNFbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UnN2U2l6ZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIEluZ3Jlc3MgcmVzZXJ2ZWQgcXVldWUgc2l6ZSBjb3VudGVyLgoqCQlUaGlzIGNvdW50ZXIgcmVmbGVjdHMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHJlc2VydmVkIGluZ3Jlc3MgYnVmZmVycyAKKgkJYXNzaWduZWQgdG8gdGhpcyBwb3J0LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCWNvdW50IC0gcmVzZXJ2ZWQgaW5ncmVzcyBxdWV1ZSBzaXplIGNvdW50ZXIgdmFsdWUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRSc3ZTaXplCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX1UxNgkJKmNvdW50Cik7CgoKLyogZ3RQcmlUYWJsZS5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRRUHJpT3ZlcnJpZGVUYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuCioJCVdoZW4gYSBmcmFtZSBlbnRlcnMgYSBwb3J0LCBpdHMgdHlwZSBpcyBkZXRlcm1pbmVkIGFuZCB0aGUgdHlwZSBpcyB1c2VkIAoqCQl0byBhY2Nlc3MgdGhlIFF1ZXVlIFByaW9yaXR5IFRhYmxlLiBJZiB0aGUgdHlwZSdzIHFQcmlFbiAoaW4gR1RfUVBSSV9UQkxfRU5UUlkKKgkJc3RydWN0dXJlKSBpcyBlbmFibGVkLCB0aGVuIHRoZSBmcmFtZSdzIFF1ZXVlIFByaW9yaXR5IHdpbGwgYmUgb3ZlcnJpZGRlbgoqCQl3aXRoIHRoZSB2YWx1ZSB3cml0dGVuIGluIHFQcmlvcml0eSAoaW4gR1RfUVBSSV9UQkxfRU5UUlkgc3RydWN0dXJlKS4KKgkJRnJhbWUgVHlwZXMgc3VwcG9ydGVkIGFyZToKKgkJCUZUWVBFX0RTQV9UT19DUFVfQlBEVSAtCioJCQkJVXNlZCBvbiBtdWx0aWNhc3QgRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgwIChCUERVL01HTVQpLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX0YyUiAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDEgKEZyYW1lIHRvIFJlZ2lzdGVyCioJCQkJUmVwbHkpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9JR01QIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MiAoSUdNUC9NTEQgVHJhcCkKKgkJCQlhbmQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBJR01QIG9yIE1MRCB0cmFwcGVkCioJCQlGVFlQRV9EU0FfVE9fQ1BVX1RSQVAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgzIChQb2xpY3kgVHJhcCkgYW5kCioJCQkJb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBQb2xpY3kgVHJhcHBlZAoqCQkJRlRZUEVfRFNBX1RPX0NQVV9BUlAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg0IChBUlAgTWlycm9yKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIEFSUCBNaXJyb3JlZCAoc2VlIGdwcnRTZXRBUlB0b0NQVSBBUEkpLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9NSVJST1IgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg1IChQb2xpY3kgTWlycm9yKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIFBvbGljeSBNaXJyb3JlZCAoc2VlIGdwcnRTZXRQb2xpY3kgQVBJKS4KKgkJCUZUWVBFX0RTQV9UT19DUFVfUkVTRVJWRUQgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg2IChSZXNlcnZlZCkuIE5vdAoqCQkJCXVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9UT19DUFVfVUNBU1RfTUdNVCAtCioJCQkJVXNlZCBvbiB1bmljYXN0IERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MCAodW5pY2FzdAoqCQkJCU1HTVQpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX0ZST01fQ1BVIC0KKgkJCQlVc2VkIG9uIERTQSBGcm9tX0NQVSBmcmFtZXMuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZQoqCQkJRlRZUEVfRFNBX0NST1NTX0NISVBfRkMgLQoqCQkJCVVzZWQgb24gRFNBIENyb3NzIENoaXAgRmxvdyBDb250cm9sIGZyYW1lcyAoVG9fU25pZmZlciBGbG93CioJCQkJQ29udHJvbCkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9FR1JFU1NfTU9OIC0KKgkJCQlVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEVncmVzcyBNb25pdG9yIGZyYW1lcyAoVG9fU25pZmZlciBUeCkuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9DUk9TU19DSElQX0lOR1JFU1NfTU9OIC0KKgkJCQlVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEluZ3Jlc3MgTW9uaXRvciBmcmFtZXMgKFRvX1NuaWZmZXIgUngpLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9QT1JUX0VUWVBFX01BVENIIC0KKgkJCQlVc2VkIG9uIG5vcm1hbCBuZXR3b3JrIHBvcnRzIChzZWUgZ3BydFNldEZyYW1lTW9kZSBBUEkpCioJCQkJb24gZnJhbWVzIHdob3NlIEV0aGVydHlwZSBtYXRjaGVzIHRoZSBwb3J0J3MgUG9ydEVUeXBlIHJlZ2lzdGVyLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9CQ0FTVF9OT05fRFNBX0NPTlRST0wgLQoqCQkJCVVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYSBCcm9hZGNhc3QKKgkJCQlkZXN0aW5hdGlvbiBhZGRyZXNzLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCioKKiBJTlBVVFM6CiogICAgICAgZlR5cGUgLSBmcmFtZSB0eXBlIChHVF9QUklfT1ZFUlJJREVfRlRZUEUpCiogICAgICAgZW50cnkgLSBRIFByaW9yaXR5IE92ZXJyaWRlIFRhYmxlIGVudHJ5IChHVF9RUFJJX1RCTF9FTlRSWSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNICAgICAtIG9uIHVua25vd24gZnJhbWUgdHlwZQoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRRUHJpT3ZlcnJpZGVUYWJsZQooCiAgICBJTiAgR1RfUURfREVWIAkqZGV2LAogICAgSU4gIEdUX1BSSV9PVkVSUklERV9GVFlQRQlmVHlwZSwKICAgIElOICBHVF9RUFJJX1RCTF9FTlRSWQkqZW50cnkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFFQcmlPdmVycmlkZVRhYmxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZS4KKgkJV2hlbiBhIGZyYW1lIGVudGVycyBhIHBvcnQsIGl0cyB0eXBlIGlzIGRldGVybWluZWQgYW5kIHRoZSB0eXBlIGlzIHVzZWQgCioJCXRvIGFjY2VzcyB0aGUgUXVldWUgUHJpb3JpdHkgVGFibGUuIElmIHRoZSB0eXBlJ3MgcVByaUVuIChpbiBHVF9RUFJJX1RCTF9FTlRSWQoqCQlzdHJ1Y3R1cmUpIGlzIGVuYWJsZWQsIHRoZW4gdGhlIGZyYW1lJ3MgUXVldWUgUHJpb3JpdHkgd2lsbCBiZSBvdmVycmlkZGVuCioJCXdpdGggdGhlIHZhbHVlIHdyaXR0ZW4gaW4gcVByaW9yaXR5IChpbiBHVF9RUFJJX1RCTF9FTlRSWSBzdHJ1Y3R1cmUpLgoqCQlGcmFtZSBUeXBlcyBzdXBwb3J0ZWQgYXJlOgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9CUERVIC0KKgkJCQlVc2VkIG9uIG11bHRpY2FzdCBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDAgKEJQRFUvTUdNVCkuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9UT19DUFVfRjJSIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MSAoRnJhbWUgdG8gUmVnaXN0ZXIKKgkJCQlSZXBseSkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX0lHTVAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgyIChJR01QL01MRCBUcmFwKQoqCQkJCWFuZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIElHTVAgb3IgTUxEIHRyYXBwZWQKKgkJCUZUWVBFX0RTQV9UT19DUFVfVFJBUCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDMgKFBvbGljeSBUcmFwKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIFBvbGljeSBUcmFwcGVkCioJCQlGVFlQRV9EU0FfVE9fQ1BVX0FSUCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDQgKEFSUCBNaXJyb3IpIGFuZAoqCQkJCW9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgQVJQIE1pcnJvcmVkIChzZWUgZ3BydFNldEFSUHRvQ1BVIEFQSSkuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX01JUlJPUiAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDUgKFBvbGljeSBNaXJyb3IpIGFuZAoqCQkJCW9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgUG9saWN5IE1pcnJvcmVkIChzZWUgZ3BydFNldFBvbGljeSBBUEkpLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9SRVNFUlZFRCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDYgKFJlc2VydmVkKS4gTm90CioJCQkJdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9VQ0FTVF9NR01UIC0KKgkJCQlVc2VkIG9uIHVuaWNhc3QgRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgwICh1bmljYXN0CioJCQkJTUdNVCkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfRlJPTV9DUFUgLQoqCQkJCVVzZWQgb24gRFNBIEZyb21fQ1BVIGZyYW1lcy4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lCioJCQlGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9GQyAtCioJCQkJVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBGbG93IENvbnRyb2wgZnJhbWVzIChUb19TbmlmZmVyIEZsb3cKKgkJCQlDb250cm9sKS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9DUk9TU19DSElQX0VHUkVTU19NT04gLQoqCQkJCVVzZWQgb24gRFNBIENyb3NzIENoaXAgRWdyZXNzIE1vbml0b3IgZnJhbWVzIChUb19TbmlmZmVyIFR4KS4KKgkJCQlOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX0NST1NTX0NISVBfSU5HUkVTU19NT04gLQoqCQkJCVVzZWQgb24gRFNBIENyb3NzIENoaXAgSW5ncmVzcyBNb25pdG9yIGZyYW1lcyAoVG9fU25pZmZlciBSeCkuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX1BPUlRfRVRZUEVfTUFUQ0ggLQoqCQkJCVVzZWQgb24gbm9ybWFsIG5ldHdvcmsgcG9ydHMgKHNlZSBncHJ0U2V0RnJhbWVNb2RlIEFQSSkKKgkJCQlvbiBmcmFtZXMgd2hvc2UgRXRoZXJ0eXBlIG1hdGNoZXMgdGhlIHBvcnQncyBQb3J0RVR5cGUgcmVnaXN0ZXIuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0JDQVNUX05PTl9EU0FfQ09OVFJPTCAtCioJCQkJVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhIEJyb2FkY2FzdAoqCQkJCWRlc3RpbmF0aW9uIGFkZHJlc3MuIE5vdCB1c2VkIG9uIERTQSBDb250cm9sIGZyYW1lcy4KKgoqIElOUFVUUzoKKiAgICAgICBmVHlwZSAtIGZyYW1lIHR5cGUgKEdUX1BSSV9PVkVSUklERV9GVFlQRSkKKgoqIE9VVFBVVFM6CiogICAgICAgZW50cnkgLSBRIFByaW9yaXR5IE92ZXJyaWRlIFRhYmxlIGVudHJ5IChHVF9RUFJJX1RCTF9FTlRSWSkKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNICAgICAtIG9uIHVua25vd24gZnJhbWUgdHlwZQoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRRUHJpT3ZlcnJpZGVUYWJsZQooCiAgICBJTiAgR1RfUURfREVWIAkqZGV2LAogICAgSU4gIEdUX1BSSV9PVkVSUklERV9GVFlQRQlmVHlwZSwKICAgIE9VVCBHVF9RUFJJX1RCTF9FTlRSWQkqZW50cnkKKTsKCgovKiBndFN5c0N0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Q1BVRGVzdAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIENQVSBEZXN0aW5hdGlvbiBQb3J0LiBDUFUgRGVzdGluYXRpb24gcG9ydCBpbmRpY2F0ZXMgdGhlCioJCXBvcnQgbnVtYmVyIG9uIHRoaXMgZGV2aWNlIHdoZXJlIHRoZSBDUFUgaXMgY29ubmVjdGVkIChlaXRoZXIgZGlyZWN0bHkgb3IKKgkJaW5kaXJlY3RseSB0aHJvdWdoIGFub3RoZXIgTWFydmVsbCBzd2l0Y2ggZGV2aWNlKS4KKgoqCQlNYW55IG1vZGVzIG9mIGZyYW1lIHByb2Nlc3NpbmcgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBDUFUgaXMgbG9jYXRlZC4KKgkJVGhlc2UgbW9kZXMgYXJlOgoqCQkxLiBXaGVuIElHTVAvTUxEIGZyYW1lIGlzIHJlY2VpdmVkIGFuZCBTbm9vcGluZyBpcyBlbmFibGVkCioJCTIuIFdoZW4gdGhlIHBvcnQgaXMgY29uZmlndXJlZCBhcyBhIERTQSBwb3J0IGFuZCBpdCByZWNlaXZlcyBhIFRvX0NQVSBmcmFtZQoqCQkzLiBXaGVuIGEgUnN2ZDJDUFUgZnJhbWUgZW50ZXJzIHRoZSBwb3J0CioJCTQuIFdoZW4gdGhlIHBvcnQncyBTQSBGaWx0ZXJpbmcgbW9kZSBpcyBEcm9wIHRvIENQVQoqCQk1LiBXaGVuIGFueSBvZiB0aGUgcG9ydCdzIFBvbGljeSBPcHRpb25zIHRyYXAgdGhlIGZyYW1lIHRvIHRoZSBDUFUKKgkJNi4gV2hlbiB0aGUgaW5ncmVzc2luZyBmcmFtZSBpcyBhbiBBUlAgYW5kIEFSUCBtaXJyb3JpbmcgaXMgZW5hYmxlZCBpbiB0aGUKKgkJICAgZGV2aWNlCioKKgkJSW4gYWxsIGNhc2VzLCBleGNlcHQgZm9yIEFSUCwgdGhlIGZyYW1lcyB0aGF0IG1lZXQgdGhlIGVuYWJsZWQgY3JpdGVyaWEgCioJCWFyZSBtYXBwZWQgdG8gdGhlIENQVSBEZXN0aW5hdGlvbiBwb3J0LCBvdmVycmlkaW5nIHdoZXJlIHRoZSBmcmFtZSB3b3VsZCAKKgkJbm9ybWFsbHkgZ28uIEluIHRoZSBjYXNlIG9mIEFSUCwgdGhlIGZyYW1lIHdpbGwgYmUgbWFwcGVkIG5vcm1hbGx5IGFuZCBpdCAKKgkJd2lsbCBhbHNvIGdldCBjb3BpZWQgdG8gdGhpcyBwb3J0LgoqCQlGcmFtZXMgdGhhdCBmaWx0ZXJlZCBvciBkaXNjYXJkZWQgd2lsbCBub3QgYmUgbWFwcGVkIHRvIHRoZSBDUFUgRGVzdGluYXRpb24gCioJCXBvcnQgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBSc3ZkMkNQVSBhbmQgRFNBIFRhZyBjYXNlcy4KKgoqCQlJZiBDUFVEZXN0ID0gMHhGLCB0aGUgcmVtYXBwZWQgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkLCBubyBBUlAgbWlycm9yaW5nIAoqCQl3aWxsIG9jY3VyIGFuZCBpbmdyZXNzaW5nIFRvX0NQVSBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQuCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Q1BVRGVzdAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUCQlwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRDUFVEZXN0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgQ1BVIERlc3RpbmF0aW9uIFBvcnQuIENQVSBEZXN0aW5hdGlvbiBwb3J0IGluZGljYXRlcyB0aGUKKgkJcG9ydCBudW1iZXIgb24gdGhpcyBkZXZpY2Ugd2hlcmUgdGhlIENQVSBpcyBjb25uZWN0ZWQgKGVpdGhlciBkaXJlY3RseSBvcgoqCQlpbmRpcmVjdGx5IHRocm91Z2ggYW5vdGhlciBNYXJ2ZWxsIHN3aXRjaCBkZXZpY2UpLgoqCioJCU1hbnkgbW9kZXMgb2YgZnJhbWUgcHJvY2Vzc2luZyBuZWVkIHRvIGtub3cgd2hlcmUgdGhlIENQVSBpcyBsb2NhdGVkLgoqCQlUaGVzZSBtb2RlcyBhcmU6CioJCTEuIFdoZW4gSUdNUC9NTEQgZnJhbWUgaXMgcmVjZWl2ZWQgYW5kIFNub29waW5nIGlzIGVuYWJsZWQKKgkJMi4gV2hlbiB0aGUgcG9ydCBpcyBjb25maWd1cmVkIGFzIGEgRFNBIHBvcnQgYW5kIGl0IHJlY2VpdmVzIGEgVG9fQ1BVIGZyYW1lCioJCTMuIFdoZW4gYSBSc3ZkMkNQVSBmcmFtZSBlbnRlcnMgdGhlIHBvcnQKKgkJNC4gV2hlbiB0aGUgcG9ydCdzIFNBIEZpbHRlcmluZyBtb2RlIGlzIERyb3AgdG8gQ1BVCioJCTUuIFdoZW4gYW55IG9mIHRoZSBwb3J0J3MgUG9saWN5IE9wdGlvbnMgdHJhcCB0aGUgZnJhbWUgdG8gdGhlIENQVQoqCQk2LiBXaGVuIHRoZSBpbmdyZXNzaW5nIGZyYW1lIGlzIGFuIEFSUCBhbmQgQVJQIG1pcnJvcmluZyBpcyBlbmFibGVkIGluIHRoZQoqCQkgICBkZXZpY2UKKgoqCQlJbiBhbGwgY2FzZXMsIGV4Y2VwdCBmb3IgQVJQLCB0aGUgZnJhbWVzIHRoYXQgbWVldCB0aGUgZW5hYmxlZCBjcml0ZXJpYSAKKgkJYXJlIG1hcHBlZCB0byB0aGUgQ1BVIERlc3RpbmF0aW9uIHBvcnQsIG92ZXJyaWRpbmcgd2hlcmUgdGhlIGZyYW1lIHdvdWxkIAoqCQlub3JtYWxseSBnby4gSW4gdGhlIGNhc2Ugb2YgQVJQLCB0aGUgZnJhbWUgd2lsbCBiZSBtYXBwZWQgbm9ybWFsbHkgYW5kIGl0IAoqCQl3aWxsIGFsc28gZ2V0IGNvcGllZCB0byB0aGlzIHBvcnQuCioJCUZyYW1lcyB0aGF0IGZpbHRlcmVkIG9yIGRpc2NhcmRlZCB3aWxsIG5vdCBiZSBtYXBwZWQgdG8gdGhlIENQVSBEZXN0aW5hdGlvbiAKKgkJcG9ydCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIFJzdmQyQ1BVIGFuZCBEU0EgVGFnIGNhc2VzLgoqCioJCUlmIENQVURlc3QgPSAweEYsIHRoZSByZW1hcHBlZCBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQsIG5vIEFSUCBtaXJyb3JpbmcgCioJCXdpbGwgb2NjdXIgYW5kIGluZ3Jlc3NpbmcgVG9fQ1BVIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZC4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRDUFVEZXN0CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9MUE9SVCAgCSpwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRNaXJyb3JEZXN0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgTWlycm9yIERlc3RpbmF0aW9uIFBvcnQuIEZyYW1lcyB0aGF0IGluZ3Jlc3MgYSBwb3J0IAoqCQl0aGF0IHRyaWdnZXIgYSBwb2xpY3kgbWlycm9yIGFyZSBtYXBwZWQgKGNvcGllZCkgdG8gdGhpcyBwb3J0IGFzIGxvbmcgYXMgCioJCXRoZSBmcmFtZSBpcyBub3QgZmlsdGVyZWQgb3IgZGlzY2FyZGVkLiAKKgkJVGhlIE1pcnJvciBEZXN0aW5hdGlvbiBwb3J0IHNob3VsZCBwb2ludCB0byB0aGUgcG9ydCB0aGF0IGRpcmVjdHMgdGhlc2UgCioJCWZyYW1lcyB0byB0aGUgQ1BVIHRoYXQgd2lsbCBwcm9jZXNzIHRoZXNlIGZyYW1lcy4gVGhpcyB0YXJnZXQgcG9ydCBzaG91bGQgCioJCWJlIGEgRFNBIFRhZyBwb3J0IHNvIHRoZSBmcmFtZXMgd2lsbCBlZ3Jlc3Mgd2l0aCBhIFRvX0NQVSBEU0EgVGFnIHdpdGggYSAKKgkJQ1BVIENvZGUgb2YgUG9saWN5IE1pcnJvci4KKgkJVG9fQ1BVIERTQSBUYWcgZnJhbWVzIHdpdGggYSBDUFUgQ29kZSBvZiBQb2xpY3kgTWlycm9yIHRoYXQgaW5ncmVzcyBhIERTQSAKKgkJVGFnIHBvcnQgd2lsbCBiZSBzZW50IHRvIHRoZSBwb3J0IG51bWJlciBkZWZpbmVkIGluIE1pcnJvckRlc3QuCioKKgkJSWYgTWlycm9yRGVzdCA9IDB4RiwgUG9saWN5IE1pcnJvcmluZyBpcyBkaXNhYmxlZCBhbmQgaW5ncmVzc2luZyBUb19DUFUgCioJCVBvbGljeSBNaXJyb3IgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkLgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldE1pcnJvckRlc3QKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0TWlycm9yRGVzdAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIE1pcnJvciBEZXN0aW5hdGlvbiBQb3J0LiBGcmFtZXMgdGhhdCBpbmdyZXNzIGEgcG9ydCAKKgkJdGhhdCB0cmlnZ2VyIGEgcG9saWN5IG1pcnJvciBhcmUgbWFwcGVkIChjb3BpZWQpIHRvIHRoaXMgcG9ydCBhcyBsb25nIGFzIAoqCQl0aGUgZnJhbWUgaXMgbm90IGZpbHRlcmVkIG9yIGRpc2NhcmRlZC4gCioJCVRoZSBNaXJyb3IgRGVzdGluYXRpb24gcG9ydCBzaG91bGQgcG9pbnQgdG8gdGhlIHBvcnQgdGhhdCBkaXJlY3RzIHRoZXNlIAoqCQlmcmFtZXMgdG8gdGhlIENQVSB0aGF0IHdpbGwgcHJvY2VzcyB0aGVzZSBmcmFtZXMuIFRoaXMgdGFyZ2V0IHBvcnQgc2hvdWxkIAoqCQliZSBhIERTQSBUYWcgcG9ydCBzbyB0aGUgZnJhbWVzIHdpbGwgZWdyZXNzIHdpdGggYSBUb19DUFUgRFNBIFRhZyB3aXRoIGEgCioJCUNQVSBDb2RlIG9mIFBvbGljeSBNaXJyb3IuCioJCVRvX0NQVSBEU0EgVGFnIGZyYW1lcyB3aXRoIGEgQ1BVIENvZGUgb2YgUG9saWN5IE1pcnJvciB0aGF0IGluZ3Jlc3MgYSBEU0EgCioJCVRhZyBwb3J0IHdpbGwgYmUgc2VudCB0byB0aGUgcG9ydCBudW1iZXIgZGVmaW5lZCBpbiBNaXJyb3JEZXN0LgoqCioJCUlmIE1pcnJvckRlc3QgPSAweEYsIFBvbGljeSBNaXJyb3JpbmcgaXMgZGlzYWJsZWQgYW5kIGluZ3Jlc3NpbmcgVG9fQ1BVIAoqCQlQb2xpY3kgTWlycm9yIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZC4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRNaXJyb3JEZXN0CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9MUE9SVCAgCSpwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRSTVBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlSZW1vdGUgTWFuYWdlbWVudCBmZWF0dXJlIGlzIGVuYWJsZWQgb25seSBvbiBvbmUgcG9ydC4gU2luY2Ugbm90IGFsbCBwb3J0cwoqCQljYW4gYmUgZW5hYmxlZCBmb3IgUmVtb3RlIE1hbmFnZW1lbnQgZmVhdHVyZSwgcGxlYXNlIHJlZmVyIHRvIHRoZSBkZXZpY2UKKgkJZGF0YXNoZWV0IGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbi4KKgkJRm9yIGV4YW1wbGUsIDg4RTYwOTcgZGV2aWNlIGFsbG93cyBsb2dpY2FsIHBvcnQgOSBvciAxMCwgYW5kIDg4RTYwNDcgCioJCWRldmljZSBhbGxvd3MgbG9naWNhbCBwb3J0IDQgYW5kIDUuCioJCQoqIElOUFVUUzoKKgkJcG9ydCAtIFJlbW90ZSBNYW5hZ2VtZW50IFBvcnQKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNICAgICAtIG9uIHVuYWxsb3dhYmxlIHBvcnQKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRSTVBvcnQKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Uk1Qb3J0CioKKiBERVNDUklQVElPTjoKKgkJUmVtb3RlIE1hbmFnZW1lbnQgZmVhdHVyZSBpcyBlbmFibGVkIG9ubHkgb24gb25lIHBvcnQuIFNpbmNlIG5vdCBhbGwgcG9ydHMKKgkJY2FuIGJlIGVuYWJsZWQgZm9yIFJlbW90ZSBNYW5hZ2VtZW50IGZlYXR1cmUsIHBsZWFzZSByZWZlciB0byB0aGUgZGV2aWNlCioJCWRhdGFzaGVldCBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24uCioJCUZvciBleGFtcGxlLCA4OEU2MDk3IGRldmljZSBhbGxvd3MgbG9naWNhbCBwb3J0IDkgb3IgMTAsIGFuZCA4OEU2MDQ3IAoqCQlkZXZpY2UgYWxsb3dzIGxvZ2ljYWwgcG9ydCA0IGFuZCA1LgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJcG9ydCAtIFJlbW90ZSBNYW5hZ2VtZW50IFBvcnQKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFJNUG9ydAooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfTFBPUlQgCSpwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRSTURBQ2hlY2sKKgoqIERFU0NSSVBUSU9OOgoqCQlDaGVjayB0aGUgREEgb24gUmVtb3RlIE1hbmFnZW1lbnQgZnJhbWVzLiAKKgkJV2hlbiBEQSBDaGVjayBpcyBlbmFibGVkLCB0aGUgREEgb2YgUmVtb3RlIE1hbmFnZW1lbnQgZnJhbWVzIG11c3QgYmUgCioJCWNvbnRhaW5lZCBpbiB0aGlzIGRldmljZSdzIGFkZHJlc3MgZGF0YWJhc2UgKEFUVSkgYXMgYSBTdGF0aWMgZW50cnkgCioJCShlaXRoZXIgdW5pY2FzdCBvciBtdWx0aWNhc3QpLiBJZiB0aGUgREEgb2YgdGhlIGZyYW1lIGlzIG5vdCBjb250YWluZWQgCioJCWluIHRoaXMgZGV2aWNlJ3MgYWRkcmVzcyBkYXRhYmFzZSwgdGhlIGZyYW1lIHdpbGwgYmUgbm90IGJlIHByb2Nlc3NlZCBhcyAKKgkJYSBGcmFtZS10by1SZWd0ZXIgZnJhbWUuCioJCVdoZW4gREEgQ2hlY2sgaXMgZGlzYWJsZWQsIHRoZSBEQSBvZiBSZW1vdGUgTWFuYWdlbWVudCBmcmFtZXMgaXMgbm90IAoqCQl2YWxpZGF0ZWQgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIGZyYW1lLgoqCQkKKiBJTlBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byBlbmFibGUgREEgQ2hlY2ssIAoqCQkJIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRSTURBQ2hlY2sKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MIAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFJNREFDaGVjawoqCiogREVTQ1JJUFRJT046CioJCUNoZWNrIHRoZSBEQSBvbiBSZW1vdGUgTWFuYWdlbWVudCBmcmFtZXMuIAoqCQlXaGVuIERBIENoZWNrIGlzIGVuYWJsZWQsIHRoZSBEQSBvZiBSZW1vdGUgTWFuYWdlbWVudCBmcmFtZXMgbXVzdCBiZSAKKgkJY29udGFpbmVkIGluIHRoaXMgZGV2aWNlJ3MgYWRkcmVzcyBkYXRhYmFzZSAoQVRVKSBhcyBhIFN0YXRpYyBlbnRyeSAKKgkJKGVpdGhlciB1bmljYXN0IG9yIG11bHRpY2FzdCkuIElmIHRoZSBEQSBvZiB0aGUgZnJhbWUgaXMgbm90IGNvbnRhaW5lZCAKKgkJaW4gdGhpcyBkZXZpY2UncyBhZGRyZXNzIGRhdGFiYXNlLCB0aGUgZnJhbWUgd2lsbCBiZSBub3QgYmUgcHJvY2Vzc2VkIGFzIAoqCQlhIEZyYW1lLXRvLVJlZ3RlciBmcmFtZS4KKgkJV2hlbiBEQSBDaGVjayBpcyBkaXNhYmxlZCwgdGhlIERBIG9mIFJlbW90ZSBNYW5hZ2VtZW50IGZyYW1lcyBpcyBub3QgCioJCXZhbGlkYXRlZCBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgZnJhbWUuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgaWYgREEgQ2hlY2sgaXMgZW5hYmxlZCwgCioJCQkgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Uk1EQUNoZWNrCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9CT09MIAkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFJNRW5hYmxlCioKKiBERVNDUklQVElPTjoKKgkJRW5hYmxlIG9yIGRpc2FibGUgUmVtb3RlIE1hbmFnZW1lbnQgZmVhdHVyZS4gVGhpcyBmZWF0dXJlIGNhbiBiZSBlbmFibGVkCioJCW9ubHkgb24gb25lIHBvcnQgKHNlZSBnc3lzU2V0Uk1Qb3J0IEFQSSkuCioJCQoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSBSZW1vdGUgTWFuYWdlbWVudCBmZWF0dXJlLCAKKgkJCSBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Uk1FbmFibGUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MIAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFJNRW5hYmxlCioKKiBERVNDUklQVElPTjoKKgkJRW5hYmxlIG9yIGRpc2FibGUgUmVtb3RlIE1hbmFnZW1lbnQgZmVhdHVyZS4gVGhpcyBmZWF0dXJlIGNhbiBiZSBlbmFibGVkCioJCW9ubHkgb24gb25lIHBvcnQgKHNlZSBnc3lzU2V0Uk1Qb3J0IEFQSSkuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgaWYgUmVtb3RlIE1hbmFnZW1lbnQgZmVhdHVyZSBpcyBlbmFibGVkLCAKKgkJCSBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRSTUVuYWJsZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTCAJKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRSc3ZkMkNwdUVuYWJsZXMyWAoqCiogREVTQ1JJUFRJT046CioJCVJlc2VydmVkIERBIEVuYWJsZXMgZm9yIHRoZSBmb3JtIG9mIDAxOjgwOkMyOjAwOjAwOjJ4LgoqCQlXaGVuIHRoZSBSc3ZkMkNwdShnc3lzU2V0UnN2ZDJDcHUpIGlzIHNldCB0byBhIG9uZSwgdGhlIDE2IHJlc2VydmVkIAoqCQltdWx0aWNhc3QgREEgYWRkcmVzc2VzLCB3aG9zZSBiaXQgaW4gdGhpcyByZWdpc3RlciBhcmUgYWxzbyBzZXQgdG8gYSBvbmUsIAoqCQlhcmUgdHJlYWR0ZWQgYXMgTUdNVCBmcmFtZXMuIEFsbCB0aGUgcmVzZXJ2ZWQgREEncyB0YWtlIHRoZSBmb3JtIAoqCQkwMTo4MDpDMjowMDowMDoyeC4gV2hlbiB4ID0gMHgwLCBiaXQgMCBvZiB0aGlzIHJlZ2lzdGVyIGlzIHRlc3RlZC4gCioJCVdoZW4geCA9IDB4MiwgYml0IDIgb2YgdGhpcyBmaWVsZCBpcyB0ZXN0ZWQgYW5kIHNvIG9uLgoqCQlJZiB0aGUgdGVzdGVkIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCB0aGUgZnJhbWUgd2lsbCAKKgkJYmUgdHJlYXRlZCBhcyBhIG5vcm1hbCAobm9uLU1HTVQpIGZyYW1lLgoqCiogSU5QVVRTOgoqCQllbkJpdHMgLSBiaXQgdmVjdG9yIG9mIGVuYWJsZWQgUmVzZXJ2ZWQgTXVsdGljYXN0LgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFJzdmQyQ3B1RW5hYmxlczJYCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfVTE2CQllbkJpdHMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFJzdmQyQ3B1RW5hYmxlczJYCioKKiBERVNDUklQVElPTjoKKgkJUmVzZXJ2ZWQgREEgRW5hYmxlcyBmb3IgdGhlIGZvcm0gb2YgMDE6ODA6QzI6MDA6MDA6MnguCioJCVdoZW4gdGhlIFJzdmQyQ3B1KGdzeXNTZXRSc3ZkMkNwdSkgaXMgc2V0IHRvIGEgb25lLCB0aGUgMTYgcmVzZXJ2ZWQgCioJCW11bHRpY2FzdCBEQSBhZGRyZXNzZXMsIHdob3NlIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIGFyZSBhbHNvIHNldCB0byBhIG9uZSwgCioJCWFyZSB0cmVhZHRlZCBhcyBNR01UIGZyYW1lcy4gQWxsIHRoZSByZXNlcnZlZCBEQSdzIHRha2UgdGhlIGZvcm0gCioJCTAxOjgwOkMyOjAwOjAwOjJ4LiBXaGVuIHggPSAweDAsIGJpdCAwIG9mIHRoaXMgcmVnaXN0ZXIgaXMgdGVzdGVkLiAKKgkJV2hlbiB4ID0gMHgyLCBiaXQgMiBvZiB0aGlzIGZpZWxkIGlzIHRlc3RlZCBhbmQgc28gb24uCioJCUlmIHRoZSB0ZXN0ZWQgYml0IGluIHRoaXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byBhIHplcm8sIHRoZSBmcmFtZSB3aWxsIAoqCQliZSB0cmVhdGVkIGFzIGEgbm9ybWFsIChub24tTUdNVCkgZnJhbWUuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbkJpdHMgLSBiaXQgdmVjdG9yIG9mIGVuYWJsZWQgUmVzZXJ2ZWQgTXVsdGljYXN0LgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UnN2ZDJDcHVFbmFibGVzMlgKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX1UxNiAgCSplbkJpdHMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEZsb29kQkMKKgoqIERFU0NSSVBUSU9OOgoqCQlGbG9vZCBCcm9hZGNhc3QuCioJCVdoZW4gRmxvb2QgQnJvYWRjYXN0IGlzIGVuYWJsZWQsIGZyYW1lcyB3aXRoIHRoZSBCcm9hZGNhc3QgZGVzdGluYXRpb24gCioJCWFkZHJlc3Mgd2lsbCBmbG9vZCBvdXQgYWxsIHRoZSBwb3J0cyByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHRoZQoqCQlwb3J0J3MgRWdyZXNzIEZsb29kcyBtb2RlIChzZWUgZ3BydFNldEVncmVzc0Zsb29kIEFQSSkuIFZMQU4gcnVsZXMgYW5kIAoqCQlvdGhlciBzd2l0Y2ggcG9saWN5IHN0aWxsIGFwcGxpZXMgdG8gdGhlc2UgQnJvYWRjYXN0IGZyYW1lcy4gCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLCBmcmFtZXMgd2l0aCB0aGUgQnJvYWRjYXN0IGRlc3RpbmF0aW9uCioJCWFkZHJlc3MgYXJlIGNvbnNpZGVyZWQgTXVsdGljYXN0IGZyYW1lcyBhbmQgd2lsbCBiZSBhZmZlY3RlZCBieSBwb3J0J3MgCioJCUVncmVzcyBGbG9vZHMgbW9kZS4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSBGbG9vZCBCcm9hZGNhc3QsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRGbG9vZEJDCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEZsb29kQkMKKgoqIERFU0NSSVBUSU9OOgoqCQlGbG9vZCBCcm9hZGNhc3QuCioJCVdoZW4gRmxvb2QgQnJvYWRjYXN0IGlzIGVuYWJsZWQsIGZyYW1lcyB3aXRoIHRoZSBCcm9hZGNhc3QgZGVzdGluYXRpb24gCioJCWFkZHJlc3Mgd2lsbCBmbG9vZCBvdXQgYWxsIHRoZSBwb3J0cyByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHRoZQoqCQlwb3J0J3MgRWdyZXNzIEZsb29kcyBtb2RlIChzZWUgZ3BydFNldEVncmVzc0Zsb29kIEFQSSkuIFZMQU4gcnVsZXMgYW5kIAoqCQlvdGhlciBzd2l0Y2ggcG9saWN5IHN0aWxsIGFwcGxpZXMgdG8gdGhlc2UgQnJvYWRjYXN0IGZyYW1lcy4gCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLCBmcmFtZXMgd2l0aCB0aGUgQnJvYWRjYXN0IGRlc3RpbmF0aW9uCioJCWFkZHJlc3MgYXJlIGNvbnNpZGVyZWQgTXVsdGljYXN0IGZyYW1lcyBhbmQgd2lsbCBiZSBhZmZlY3RlZCBieSBwb3J0J3MgCioJCUVncmVzcyBGbG9vZHMgbW9kZS4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSBpZiBGbG9vZCBCcm9hZGNhc3QgaXMgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Rmxvb2RCQwooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTCAgCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UmVtb3ZlMVBUYWcKKgoqIERFU0NSSVBUSU9OOgoqCQlSZW1vdmUgT25lIFByb3ZpZGVyIFRhZy4KKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgYSBwb3J0IGlzIGNvbmZpZ3VyZWQgYXMgYSBQcm92aWRlciBQb3J0CioJCShzZWUgZ3BydFNldEZyYW1lTW9kZSBBUEkpLCByZWN1cnNpdmUgUHJvdmlkZXIgVGFnIHN0cmlwcGluZyB3aWxsIE5PVCBiZSAKKgkJcGVyZm9ybWVkLiBPbmx5IHRoZSBmaXJzdCBQcm92aWRlciBUYWcgZm91bmQgb24gdGhlIGZyYW1lIHdpbGwgYmUgCioJCWV4dHJhY3RlZCBhbmQgcmVtb3ZlZC4gSXRzIGV4dHJhY3RlZCBkYXRhIHdpbGwgYmUgdXNlZCBmb3Igc3dpdGNoaW5nLgoqCQlXaGVuIGl0J3MgZGlzYWJsZWQgYW5kIGEgcG9ydCBpcyBjb25maWd1cmVkIGFzIGEgUHJvdmlkZXIgUG9ydCwgcmVjdXJzaXZlIAoqCQlQcm92aWRlciBUYWcgc3RyaXBwaW5nIHdpbGwgYmUgcGVyZm9ybWVkLiBUaGUgZmlyc3QgUHJvdmlkZXIgVGFnJ3MgZGF0YSAKKgkJd2lsbCBiZSBleHRyYWN0ZWQgYW5kIHVzZWQgZm9yIHN3aXRjaGluZywgYW5kIHRoZW4gYWxsIHN1YnNlcXVlbnQgUHJvdmlkZXIgCioJCVRhZ3MgZm91bmQgaW4gdGhlIGZyYW1lIHdpbGwgYWxzbyBiZSByZW1vdmVkLiBUaGlzIHdpbGwgb25seSBvY2N1ciBpZiB0aGUgCioJCXBvcnQncyBQb3J0RVR5cGUgKHNlZSBncHJ0U2V0UG9ydEVUeXBlIEFQSSkgaXMgbm90IDB4ODEwMC4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSBSZW1vdmUgT25lIFByb3ZpZGVyIFRhZywgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFJlbW92ZTFQVGFnCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFJlbW92ZTFQVGFnCioKKiBERVNDUklQVElPTjoKKgkJUmVtb3ZlIE9uZSBQcm92aWRlciBUYWcuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgYW5kIGEgcG9ydCBpcyBjb25maWd1cmVkIGFzIGEgUHJvdmlkZXIgUG9ydAoqCQkoc2VlIGdwcnRTZXRGcmFtZU1vZGUgQVBJKSwgcmVjdXJzaXZlIFByb3ZpZGVyIFRhZyBzdHJpcHBpbmcgd2lsbCBOT1QgYmUgCioJCXBlcmZvcm1lZC4gT25seSB0aGUgZmlyc3QgUHJvdmlkZXIgVGFnIGZvdW5kIG9uIHRoZSBmcmFtZSB3aWxsIGJlIAoqCQlleHRyYWN0ZWQgYW5kIHJlbW92ZWQuIEl0cyBleHRyYWN0ZWQgZGF0YSB3aWxsIGJlIHVzZWQgZm9yIHN3aXRjaGluZy4KKgkJV2hlbiBpdCdzIGRpc2FibGVkIGFuZCBhIHBvcnQgaXMgY29uZmlndXJlZCBhcyBhIFByb3ZpZGVyIFBvcnQsIHJlY3Vyc2l2ZSAKKgkJUHJvdmlkZXIgVGFnIHN0cmlwcGluZyB3aWxsIGJlIHBlcmZvcm1lZC4gVGhlIGZpcnN0IFByb3ZpZGVyIFRhZydzIGRhdGEgCioJCXdpbGwgYmUgZXh0cmFjdGVkIGFuZCB1c2VkIGZvciBzd2l0Y2hpbmcsIGFuZCB0aGVuIGFsbCBzdWJzZXF1ZW50IFByb3ZpZGVyIAoqCQlUYWdzIGZvdW5kIGluIHRoZSBmcmFtZSB3aWxsIGFsc28gYmUgcmVtb3ZlZC4gVGhpcyB3aWxsIG9ubHkgb2NjdXIgaWYgdGhlIAoqCQlwb3J0J3MgUG9ydEVUeXBlIChzZWUgZ3BydFNldFBvcnRFVHlwZSBBUEkpIGlzIG5vdCAweDgxMDAuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgaWYgUmVtb3ZlIE9uZSBQcm92aWRlciBUYWcgaXMgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UmVtb3ZlMVBUYWcKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wJCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0VGFnRmxvd0NvbnRyb2wKKgoqIERFU0NSSVBUSU9OOgoqCQlVc2UgYW5kIGdlbmVyYXRlIHNvdXJjZSBwb3J0IEZsb3cgQ29udHJvbCBzdGF0dXMgZm9yIENyb3NzLUNoaXAgRmxvdyAKKgkJQ29udHJvbC4KKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgYml0IDE3IG9mIHRoZSBEU0EgVGFnIEZvcndhcmQgZnJhbWVzIGlzIAoqCQlkZWZpbmVkIHRvIGJlIFNyY19GQyBhbmQgaXQgaXMgYWRkZWQgdG8gdGhlc2UgZnJhbWVzIHdoZW4gZ2VuZXJhdGVkIGFuZCAKKgkJaXQgaXMgaW5zcGVjdGVkIG9uIHRoZXNlIGZyYW1lcyB3aGVuIHJlY2VpdmVkLiBUaGUgUUMgd2lsbCB1c2UgdGhlIFNyY19GQyAKKgkJYml0IG9uIERTQSBwb3J0cyBpbnN0ZWFkIG9mIHRoZSBEU0EgcG9ydCdzIEZsb3cgQ29udHJvbCBtb2RlIGJpdCBmb3IgdGhlIAoqCQlRQyBGbG93IENvbnRyb2wgYWxnb3JpdGhtLgoqCQlXaGVuIGl0IGlzIGRpc2FibGVkLCBiaXQgMTcgb2YgdGhlIERTQSBUYWcgRm9yd2FyZCBmcmFtZXMgaXMgZGVmaW5lZCB0byAKKgkJYmUgUmVzZXJ2ZWQgYW5kIGl0IHdpbGwgYmUgemVybyBvbiB0aGVzZSBmcmFtZXMgd2hlbiBnZW5lcmF0ZWQgYW5kIGl0IAoqCQl3aWxsIG5vdCBiZSB1c2VkIG9uIHRoZXNlIGZyYW1lcyB3aGVuIHJlY2VpdmVkICh0aGlzIGlzIGEgYmFja3dhcmRzIAoqCQljb21wYXRpYmlsaXR5IG1vZGUpLgoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gZW5hYmxlIFRhZyBGbG93IENvbnRyb2wsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRUYWdGbG93Q29udHJvbAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRUYWdGbG93Q29udHJvbAoqCiogREVTQ1JJUFRJT046CioJCVVzZSBhbmQgZ2VuZXJhdGUgc291cmNlIHBvcnQgRmxvdyBDb250cm9sIHN0YXR1cyBmb3IgQ3Jvc3MtQ2hpcCBGbG93IAoqCQlDb250cm9sLgoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBiaXQgMTcgb2YgdGhlIERTQSBUYWcgRm9yd2FyZCBmcmFtZXMgaXMgCioJCWRlZmluZWQgdG8gYmUgU3JjX0ZDIGFuZCBpdCBpcyBhZGRlZCB0byB0aGVzZSBmcmFtZXMgd2hlbiBnZW5lcmF0ZWQgYW5kIAoqCQlpdCBpcyBpbnNwZWN0ZWQgb24gdGhlc2UgZnJhbWVzIHdoZW4gcmVjZWl2ZWQuIFRoZSBRQyB3aWxsIHVzZSB0aGUgU3JjX0ZDIAoqCQliaXQgb24gRFNBIHBvcnRzIGluc3RlYWQgb2YgdGhlIERTQSBwb3J0J3MgRmxvdyBDb250cm9sIG1vZGUgYml0IGZvciB0aGUgCioJCVFDIEZsb3cgQ29udHJvbCBhbGdvcml0aG0uCioJCVdoZW4gaXQgaXMgZGlzYWJsZWQsIGJpdCAxNyBvZiB0aGUgRFNBIFRhZyBGb3J3YXJkIGZyYW1lcyBpcyBkZWZpbmVkIHRvIAoqCQliZSBSZXNlcnZlZCBhbmQgaXQgd2lsbCBiZSB6ZXJvIG9uIHRoZXNlIGZyYW1lcyB3aGVuIGdlbmVyYXRlZCBhbmQgaXQgCioJCXdpbGwgbm90IGJlIHVzZWQgb24gdGhlc2UgZnJhbWVzIHdoZW4gcmVjZWl2ZWQgKHRoaXMgaXMgYSBiYWNrd2FyZHMgCioJCWNvbXBhdGliaWxpdHkgbW9kZSkuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgaWYgVGFnIEZsb3cgQ29udHJvbCBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRUYWdGbG93Q29udHJvbAooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTCAgCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0QWx3YXlzVXNlVlRVCioKKiBERVNDUklQVElPTjoKKgkJQWx3YXlzIHVzZSBWVFUuIAoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBWVFUgaGl0IGRhdGEgd2lsbCBiZSB1c2VkIHRvIG1hcCBmcmFtZXMgCioJCWV2ZW4gaWYgODAyLjFRIGlzIERpc2FibGVkIG9uIHRoZSBwb3J0LiAKKgkJV2hlbiBpdCdzIGRpc2FibGVkLCBkYXRhIHdpbGwgYmUgaWdub3JlZCB3aGVuIG1hcHBpbmcgZnJhbWVzIG9uIHBvcnRzIAoqCQl3aGVyZSA4MDIuMVEgaXMgRGlzYWJsZWQuCioKKiBJTlBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byB1c2UgVlRVIGFsd2F5cywgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEFsd2F5c1VzZVZUVQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRBbHdheXNVc2VWVFUKKgoqIERFU0NSSVBUSU9OOgoqCQlBbHdheXMgdXNlIFZUVS4gCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIFZUVSBoaXQgZGF0YSB3aWxsIGJlIHVzZWQgdG8gbWFwIGZyYW1lcyAKKgkJZXZlbiBpZiA4MDIuMVEgaXMgRGlzYWJsZWQgb24gdGhlIHBvcnQuIAoqCQlXaGVuIGl0J3MgZGlzYWJsZWQsIGRhdGEgd2lsbCBiZSBpZ25vcmVkIHdoZW4gbWFwcGluZyBmcmFtZXMgb24gcG9ydHMgCioJCXdoZXJlIDgwMi4xUSBpcyBEaXNhYmxlZC4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSBpZiBWVFUgaXMgYWx3YXlzIHVzZWQsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEFsd2F5c1VzZVZUVQooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTCAgCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UVZsYW5zT25seQoqCiogREVTQ1JJUFRJT046CioJCTgwMi4xUSBWTEFOcyBPbmx5LgoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCwgdGhlIGVncmVzcyBtYXBwaW5nIG9mIHRoZSBmcmFtZSBpcyAKKgkJbGltaXRlZCBieSB0aGUgZnJhbWUncyBWSUQgKHVzaW5nIHRoZSBNZW1iZXJUYWcgZGF0YSBmb3VuZCBpbiB0aGUgVlRVKSAKKgkJdG9nZXRoZXIgd2l0aCB0aGUgcG9ydCBiYXNlZCBWTEFOcyAodXNpbmcgdGhlIHNvdXJjZSBwb3J0J3MgUG9ydFZMQU5UYWJsZSwgCioJCWd2bG5TZXRQb3J0VmxhblBvcnRzIEFQSSkuIFRoZSB0d28gbWV0aG9kcyBhcmUgYWx3YXlzIHVzZWQgdG9nZXRoZXIgaW4gCioJCXRoaXMgbW9kZS4KKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlIGVncmVzcyBtYXBwaW5nIG9mIHRoZSBmcmFtZSBpcyBsaW1pdGllZAoqCQlieSB0aGUgZnJhbWUncyBWSUQgb25seSwgaWYgdGhlIFZJRCB3YXMgZm91bmQgaW4gdGhlIFZUVS4gSWYgdGhlIGZyYW1lJ3MKKgkJVklEIHdhcyBub3QgZm91bmQgaW4gdGhlIFZUVSB0aGUgZWdyZXNzIG1hcHBpbmcgb2YgdGhlIGZyYW1lIGlzIGxpbWl0ZWQKKgkJYnkgdGhlIHNvdXJjZSBwb3J0J3MgUG9ydFZMQU5UYWJsZSBvbmx5LiBUaGUgdHdvIG1ldGhvZHMgYXJlIG5ldmVyCioJCXVzZWQgdG9nZXRoZXIgaW4gdGhpcyBtb2RlLgoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gdXNlIDgwMi4xUSBWbGFuIE9ubHkgZmVhdHVyZSwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFFWbGFuc09ubHkKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0UVZsYW5zT25seQoqCiogREVTQ1JJUFRJT046CioJCTgwMi4xUSBWTEFOcyBPbmx5LgoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCwgdGhlIGVncmVzcyBtYXBwaW5nIG9mIHRoZSBmcmFtZSBpcyAKKgkJbGltaXRlZCBieSB0aGUgZnJhbWUncyBWSUQgKHVzaW5nIHRoZSBNZW1iZXJUYWcgZGF0YSBmb3VuZCBpbiB0aGUgVlRVKSAKKgkJdG9nZXRoZXIgd2l0aCB0aGUgcG9ydCBiYXNlZCBWTEFOcyAodXNpbmcgdGhlIHNvdXJjZSBwb3J0J3MgUG9ydFZMQU5UYWJsZSwgCioJCWd2bG5TZXRQb3J0VmxhblBvcnRzIEFQSSkuIFRoZSB0d28gbWV0aG9kcyBhcmUgYWx3YXlzIHVzZWQgdG9nZXRoZXIgaW4gCioJCXRoaXMgbW9kZS4KKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlIGVncmVzcyBtYXBwaW5nIG9mIHRoZSBmcmFtZSBpcyBsaW1pdGllZAoqCQlieSB0aGUgZnJhbWUncyBWSUQgb25seSwgaWYgdGhlIFZJRCB3YXMgZm91bmQgaW4gdGhlIFZUVS4gSWYgdGhlIGZyYW1lJ3MKKgkJVklEIHdhcyBub3QgZm91bmQgaW4gdGhlIFZUVSB0aGUgZWdyZXNzIG1hcHBpbmcgb2YgdGhlIGZyYW1lIGlzIGxpbWl0ZWQKKgkJYnkgdGhlIHNvdXJjZSBwb3J0J3MgUG9ydFZMQU5UYWJsZSBvbmx5LiBUaGUgdHdvIG1ldGhvZHMgYXJlIG5ldmVyCioJCXVzZWQgdG9nZXRoZXIgaW4gdGhpcyBtb2RlLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFIGlmIDgwMi4xUSBWbGFuIE9ubHkgZmVhdHVyZSBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRRVmxhbnNPbmx5CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9CT09MICAJKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXQ1Qml0UG9ydAoqCiogREVTQ1JJUFRJT046CioJCVVzZSA1IGJpdHMgZm9yIFBvcnQgZGF0YSBpbiB0aGUgUG9ydCBWTEFOIFRhYmxlIChQVlQpLiAKKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlIDkgYml0cyB1c2VkIHRvIGFjY2VzcyB0aGUgUFZUIG1lbW9yeSBpczoKKgkJCUFkZHJbODo1XSA9IFNvdXJjZSBEZXZpY2VbMzowXSBvciBEZXZpY2UgTnVtYmVyWzM6MF0KKgkJCUFkZHJbNDowXSA9IFNvdXJjZSBQb3J0L1RydW5rWzQ6MF0KKgkJV2hlbiBpdCdzIGRpc2FibGVkLCB0aGUgOSBiaXRzIHVzZWQgdG8gYWNjZXNzIHRoZSBQVlQgbWVtb3J5IGlzOgoqCQkJQWRkcls4OjRdID0gU291cmNlIERldmljZVs0OjBdIG9yIERldmljZSBOdW1iZXJbNDowXQoqCQkJQWRkclszOjBdID0gU291cmNlIFBvcnQvVHJ1bmtbMzowXQoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gdXNlIDUgYml0IGFzIGEgU291cmNlIHBvcnQgaW4gUFZULCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0NUJpdFBvcnQKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0NUJpdFBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlVc2UgNSBiaXRzIGZvciBQb3J0IGRhdGEgaW4gdGhlIFBvcnQgVkxBTiBUYWJsZSAoUFZUKS4gCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSA5IGJpdHMgdXNlZCB0byBhY2Nlc3MgdGhlIFBWVCBtZW1vcnkgaXM6CioJCQlBZGRyWzg6NV0gPSBTb3VyY2UgRGV2aWNlWzM6MF0gb3IgRGV2aWNlIE51bWJlclszOjBdCioJCQlBZGRyWzQ6MF0gPSBTb3VyY2UgUG9ydC9UcnVua1s0OjBdCioJCVdoZW4gaXQncyBkaXNhYmxlZCwgdGhlIDkgYml0cyB1c2VkIHRvIGFjY2VzcyB0aGUgUFZUIG1lbW9yeSBpczoKKgkJCUFkZHJbODo0XSA9IFNvdXJjZSBEZXZpY2VbNDowXSBvciBEZXZpY2UgTnVtYmVyWzQ6MF0KKgkJCUFkZHJbMzowXSA9IFNvdXJjZSBQb3J0L1RydW5rWzM6MF0KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSBpZiA1IGJpdCBpcyB1c2VkIGFzIGEgU291cmNlIFBvcnQgaW4gUFZULCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXQ1Qml0UG9ydAooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTCAgCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0U0RFVFBvbGFyaXR5CioKKiBERVNDUklQVElPTjoKKgkJU0RFVCAoU2lnbmFsIERldGVjdCkgUG9sYXJpdHkgc2VsZWN0IGJpdHMgZm9yIGVhY2ggcG9ydC4gCioJCUJpdCAxMCBpcyBmb3IgUG9ydCAxMCwgYml0IDkgaXMgZm9yIFBvcnQgOSwgZXRjLiBTREVUIGlzIHVzZWQgdG8gaGVscCAKKgkJZGV0ZXJtaW5lIGxpbmsgb24gZmliZXIgcG9ydHMuIFRoaXMgYml0IGFmZmVjdHMgdGhlIGFjdGl2ZSBsZXZlbCBvZiBhIAoqCQlwb3J0J3MgU0RFVCBwaW5zIGFzIGZvbGxvd3M6CioJCQkwID0gU0RFVCBpcyBhY3RpdmUgbG93LiBBIGxvdyBsZXZlbCBvbiB0aGUgcG9ydCdzIFNERVQgcGluIGlzIAoqCQkJCXJlcXVpcmVkIGZvciBsaW5rIHRvIG9jY3VyLgoqCQkJMSA9IFNERVQgaXMgYWN0aXZlIGhpZ2guIEEgaGlnaCBsZXZlbCBvbiB0aGUgcG9ydJJzIFNERVQgcGluIGlzIAoqCQkJCXJlcXVpcmVkIGZvciBsaW5rIHRvIG9jY3VyLgoqCQlTREVUIGlzIHVzZWQgd2hlbiB0aGUgcG9ydCBpcyBjb25maWd1cmVkIGFzIGEgZmliZXIgcG9ydC4gSW4gYWxsIG90aGVyIAoqCQlwb3J0IG1vZGVzIHRoZSBTREVUIHBpbnMgYXJlIGlnbm9yZWQgYW5kIHRoZXNlIGJpdHMgaGF2ZSBubyBlZmZlY3QuCioKKiBJTlBVVFM6CioJCXNkZXRWZWMgLSBTREVUIFBvbGFyaXR5IGZvciBlYWNoIHBvcnQgaW4gVmVjdG9yIGZvcm1hdAoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBzZGV0VmVjIGlzIGludmFsaWQKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRTREVUUG9sYXJpdHkKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9VMzIgIAkJc2RldFZlYwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0U0RFVFBvbGFyaXR5CioKKiBERVNDUklQVElPTjoKKgkJU0RFVCAoU2lnbmFsIERldGVjdCkgUG9sYXJpdHkgc2VsZWN0IGJpdHMgZm9yIGVhY2ggcG9ydC4gCioJCUJpdCAxMCBpcyBmb3IgUG9ydCAxMCwgYml0IDkgaXMgZm9yIFBvcnQgOSwgZXRjLiBTREVUIGlzIHVzZWQgdG8gaGVscCAKKgkJZGV0ZXJtaW5lIGxpbmsgb24gZmliZXIgcG9ydHMuIFRoaXMgYml0IGFmZmVjdHMgdGhlIGFjdGl2ZSBsZXZlbCBvZiBhIAoqCQlwb3J0J3MgU0RFVCBwaW5zIGFzIGZvbGxvd3M6CioJCQkwID0gU0RFVCBpcyBhY3RpdmUgbG93LiBBIGxvdyBsZXZlbCBvbiB0aGUgcG9ydCdzIFNERVQgcGluIGlzIAoqCQkJCXJlcXVpcmVkIGZvciBsaW5rIHRvIG9jY3VyLgoqCQkJMSA9IFNERVQgaXMgYWN0aXZlIGhpZ2guIEEgaGlnaCBsZXZlbCBvbiB0aGUgcG9ydJJzIFNERVQgcGluIGlzIAoqCQkJCXJlcXVpcmVkIGZvciBsaW5rIHRvIG9jY3VyLgoqCQlTREVUIGlzIHVzZWQgd2hlbiB0aGUgcG9ydCBpcyBjb25maWd1cmVkIGFzIGEgZmliZXIgcG9ydC4gSW4gYWxsIG90aGVyIAoqCQlwb3J0IG1vZGVzIHRoZSBTREVUIHBpbnMgYXJlIGlnbm9yZWQgYW5kIHRoZXNlIGJpdHMgaGF2ZSBubyBlZmZlY3QuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlzZGV0VmVjIC0gU0RFVCBQb2xhcml0eSBmb3IgZWFjaCBwb3J0IGluIFZlY3RvciBmb3JtYXQKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFNERVRQb2xhcml0eQooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfVTMyICAJKnNkZXRWZWMKKTsKCgovKiBndEJyZ1ZsYW4uYyBmb3IgMi42IHJlbGVhc2UgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZsblNldE5vRWdyUG9saWN5CioKKiBERVNDUklQVElPTjoKKgkJTm8gRWdyZXNzIFBvbGljeS4gV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUgRWdyZXNzIDgwMi4xUSBTZWN1cmUgYW5kCioJCUNoZWNrIGRpc2NhcmRzIGFyZSBub3QgcGVyZm9ybWVkLiBUaGlzIG1vZGUgYWxsb3dzYSBub24tODAyLjFRIGVuYWJsZWQgCioJCXBvcnQgdG8gc2VuZCBhIGZyYW1lIHRvIGFuIDgwMi4xUSBlbmFibGVkIHBvcnQgdGhhdCBpcyBjb25maWd1cmVkIGluIHRoZQoqCQlTZWN1cmUgb3IgQ2hlY2sgODAyLjFRIG1vZGUuIEluIHRoaXMgc2l0dWF0aW9uIHRoZSBmcmFtZXMgd2lsbCBlZ3Jlc3MgCioJCWV2ZW4gaWYgdGhlIFZJRCBhc3NpZ25lZCB0byB0aGUgZnJhbWUgaXMgbm90IGZvdW5kIGluIHRoZSBWVFUuCioKKiBJTlBVVFM6CioJCW1vZGUgLSBubyBlZ3Jlc3MgcG9saWN5IG1vZGUKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5TZXROb0VnclBvbGljeQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5HZXROb0VnclBvbGljeQoqCiogREVTQ1JJUFRJT046CioJCU5vIEVncmVzcyBQb2xpY3kuIFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lIEVncmVzcyA4MDIuMVEgU2VjdXJlIGFuZAoqCQlDaGVjayBkaXNjYXJkcyBhcmUgbm90IHBlcmZvcm1lZC4gVGhpcyBtb2RlIGFsbG93c2Egbm9uLTgwMi4xUSBlbmFibGVkIAoqCQlwb3J0IHRvIHNlbmQgYSBmcmFtZSB0byBhbiA4MDIuMVEgZW5hYmxlZCBwb3J0IHRoYXQgaXMgY29uZmlndXJlZCBpbiB0aGUKKgkJU2VjdXJlIG9yIENoZWNrIDgwMi4xUSBtb2RlLiBJbiB0aGlzIHNpdHVhdGlvbiB0aGUgZnJhbWVzIHdpbGwgZWdyZXNzIAoqCQlldmVuIGlmIHRoZSBWSUQgYXNzaWduZWQgdG8gdGhlIGZyYW1lIGlzIG5vdCBmb3VuZCBpbiB0aGUgVlRVLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIG5vIGVncmVzcyBwb2xpY3kgbW9kZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuR2V0Tm9FZ3JQb2xpY3kKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd3ZFNldFJNVVRpbWVPdXQKKgoqIERFU0NSSVBUSU9OOgoqCQlSZW1vdGUgTWFuYWdlbWVudCBUaW1lb3V0LiBXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSB0aGUgUmVtb3RlCioJCU1hbmFnZW1lbnQgVW5pdChSTVUpIHdpbGwgdGltZW91dCBvbiBXYWl0IG9uIEJpdCBjb21tYW5kcy4gSWYgdGhlIGJpdCB0aGF0CioJCWlzIGJlaW5nIHRlc3RlZCBoYXMgbm90IGdvbmUgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBhZnRlciAxIHNlYy4gaGFzIGVsYXBzZWQKKgkJdGhlIFdhaXQgb24gQml0IGNvbW1hbmQgd2lsbCBiZSB0ZXJtaW5hdGVkIGFuZCB0aGUgUmVzcG9uc2UgZnJhbWUgd2lsbCBiZQoqCQlzZW50IHdpdGhvdXQgYW55IGZ1cnRoZXIgcHJvY2Vzc2luZy4KKgoqCQlXaGVuIHRoaXMgYml0IGlzIGNsZWFyZWQgdG8gYSB6ZXJvIHRoZSBXYWl0IG9uIEJpdCBjb21tYW5kIHdpbGwgd2FpdCAKKgkJdW50aWwgdGhlIGJpdCB0aGF0IGlzIGJlaW5nIHRlc3RlZCBoYXMgY2hhbmdlZCB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLgoqCiogSU5QVVRTOgoqCQllbiAgIC0gR1RfVFJVRSB0byBlbmFibGUgUk1VIFRpbWVvdXQKKgkJCSAgIEdUX0ZBTFVTRSB0byBkaXNhYmxlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3dkU2V0Uk1VVGltZU91dAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfQk9PTAkgICAgZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3dkR2V0Uk1VVGltZU91dAoqCiogREVTQ1JJUFRJT046CioJCVJlbW90ZSBNYW5hZ2VtZW50IFRpbWVvdXQuIFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lIHRoZSBSZW1vdGUKKgkJTWFuYWdlbWVudCBVbml0KFJNVSkgd2lsbCB0aW1lb3V0IG9uIFdhaXQgb24gQml0IGNvbW1hbmRzLiBJZiB0aGUgYml0IHRoYXQKKgkJaXMgYmVpbmcgdGVzdGVkIGhhcyBub3QgZ29uZSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGFmdGVyIDEgc2VjLiBoYXMgZWxhcHNlZAoqCQl0aGUgV2FpdCBvbiBCaXQgY29tbWFuZCB3aWxsIGJlIHRlcm1pbmF0ZWQgYW5kIHRoZSBSZXNwb25zZSBmcmFtZSB3aWxsIGJlCioJCXNlbnQgd2l0aG91dCBhbnkgZnVydGhlciBwcm9jZXNzaW5nLgoqCioJCVdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZCB0byBhIHplcm8gdGhlIFdhaXQgb24gQml0IGNvbW1hbmQgd2lsbCB3YWl0IAoqCQl1bnRpbCB0aGUgYml0IHRoYXQgaXMgYmVpbmcgdGVzdGVkIGhhcyBjaGFuZ2VkIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAgIC0gR1RfVFJVRSB0byBlbmFibGUgUk1VIFRpbWVvdXQKKgkJCSAgIEdUX0ZBTFVTRSwgb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnd2RHZXRSTVVUaW1lT3V0CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9CT09MCSAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3dkR2V0RWdyZXNzV0RFdmVudAoqCiogREVTQ1JJUFRJT046CioJCUlmIGFueSBwb3J0J3MgZWdyZXNzIGxvZ2ljIGRldGVjdHMgYW4gZWdyZXNzIHdhdGNoIGRvZyBpc3N1ZSwgdGhpcyBiaXQKKgkJd2lsbCBiZSBzZXQgdG8gYSBvbmUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmcgb2YgdGhlIEdUX1dEX0VHUkVTUyBpbgoqCQlnd2RTZXRFdmVudCBmdW5jdGlvbi4KKgkJCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZXZlbnQgLSBHVF9UUlVFLCBpZiBlZ3Jlc3MgbG9naWMgaGFzIGRldGVjdGVkIGFueSBlZ3Jlc3Mgd2F0Y2ggZG9nIGlzc3VlCioJCQkgICAgR1RfRkFMVVNFLCBvdGhlcndpc2UKKgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3dkR2V0RWdyZXNzV0RFdmVudAooCglJTiAgR1RfUURfREVWCQkqZGV2LAoJT1VUIEdUX0JPT0wJCQkqZXZlbnQKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRRb1NXZWlnaHQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFByb2dyYW1tYWJsZSBSb3VuZCBSb2JpbiBXZWlnaHRzLgoqCQlFYWNoIHBvcnQgaGFzIDQgb3V0cHV0IFF1ZXVlcy4gUXVldWUgMyBoYXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgYW5kIAoqCQlRdWV1ZSAwIGhhcyB0aGUgbG93ZXN0IHByaW9yaXR5LiBXaGVuIGEgc2NoZWR1bGluZyBtb2RlIG9mIHBvcnQgaXMgCioJCWNvbmZpZ3VyZWQgYXMgV2VpZ2h0ZWQgUm91bmQgUm9iaW4gcXVldWluZyBtb2RlLCB0aGUgYWNjZXNzIHNlcXVlY2Ugb2YgdGhlIAoqCQlRdWV1ZSBpcyAzLDIsMywxLDMsMiwzLDAsMywyLDMsMSwzLDIsMyBieSBkZWZhdWx0LgoqCQlUaGlzIHNlcXVlbmNlIGNhbiBiZSBjb25maWd1cmVkIHdpdGggdGhpcyBBUEkuCioKKiBJTlBVVFM6CiogICAgICAgd2VpZ2h0IC0gYWNjZXNzIHNlcXVlbmNlIG9mIHRoZSBxdWV1ZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRRb1NXZWlnaHQKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfUW9TX1dFSUdIVAkqd2VpZ2h0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRRb1NXZWlnaHQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFByb2dyYW1tYWJsZSBSb3VuZCBSb2JpbiBXZWlnaHRzLgoqCQlFYWNoIHBvcnQgaGFzIDQgb3V0cHV0IFF1ZXVlcy4gUXVldWUgMyBoYXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgYW5kIAoqCQlRdWV1ZSAwIGhhcyB0aGUgbG93ZXN0IHByaW9yaXR5LiBXaGVuIGEgc2NoZWR1bGluZyBtb2RlIG9mIHBvcnQgaXMgCioJCWNvbmZpZ3VyZWQgYXMgV2VpZ2h0ZWQgUm91bmQgUm9iaW4gcXVldWluZyBtb2RlLCB0aGUgYWNjZXNzIHNlcXVlY2Ugb2YgdGhlIAoqCQlRdWV1ZSBpcyAzLDIsMywxLDMsMiwzLDAsMywyLDMsMSwzLDIsMyBieSBkZWZhdWx0LgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIHRoZSBhY2Nlc3Mgc2VxdWVuY2Ugb2YgdGhlIFF1ZXVlLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIHdlaWdodCAtIGFjY2VzcyBzZXF1ZW5jZSBvZiB0aGUgcXVldWUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UW9TV2VpZ2h0CigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgT1VUIEdUX1FvU19XRUlHSFQJKndlaWdodAopOwoKCi8qCiAqCWd0UG9ydEN0cmwuYwoqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0SnVtYm9Nb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgU2V0IHRoZSBtYXggZnJhbWUgc2l6ZSBhbGxvd2VkIHRvIGJlIHJlY2VpdmVkIGFuZCB0cmFuc21pdHRlZAoqCQlmcm9tIG9yIHRvIGEgZ2l2ZW4gcG9ydC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgbW9kZSAtIEdUX0pVTUJPX01PREUgKDE1MjIsIDIwNDgsIG9yIDEwMjQwKQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEp1bWJvTW9kZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9KVU1CT19NT0RFICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0SnVtYm9Nb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgbWF4IGZyYW1lIHNpemUgYWxsb3dlZCB0byBiZSByZWNlaXZlZCBhbmQgdHJhbnNtaXR0ZWQKKgkJZnJvbSBvciB0byBhIGdpdmVuIHBvcnQuCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSBHVF9KVU1CT19NT0RFICgxNTIyLCAyMDQ4LCBvciAxMDI0MCkKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEp1bWJvTW9kZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9KVU1CT19NT0RFICAgKm1vZGUKKTsKCi8qCiAqICBndFBoeUN0cmwuYwoqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRFbmVyZ3lEZXRlY3QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEVuZXJneSBEZXRlY3QgcG93ZXIgZG93biBtb2RlIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFBIWSB0byB3YWtlIHVwIG9uCioJCWl0cyBvd24gYnkgZGV0ZWN0aW5nIGFjdGl2aXR5IG9uIHRoZSBDQVQgNSBjYWJsZS4gCioKKiBJTlBVVFM6CiogCQlwb3J0IC0gVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX0VERVRFQ1RfTU9ERSB0eXBlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRFbmVyZ3lEZXRlY3QKKAoJSU4gIEdUX1FEX0RFViAqZGV2LAoJSU4gIEdUX0xQT1JUICBwb3J0LAoJT1VUIEdUX0VERVRFQ1RfTU9ERSAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRFbmVyZ3lEZXRlY3QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEVuZXJneSBEZXRlY3QgcG93ZXIgZG93biBtb2RlIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFBIWSB0byB3YWtlIHVwIG9uCioJCWl0cyBvd24gYnkgZGV0ZWN0aW5nIGFjdGl2aXR5IG9uIHRoZSBDQVQgNSBjYWJsZS4gCioKKiBJTlBVVFM6CiogCQlwb3J0IC0gVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICBtb2RlIC0gR1RfRURFVEVDVF9NT0RFIHR5cGUKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0U2V0RW5lcmd5RGV0ZWN0CigKCUlOICBHVF9RRF9ERVYgKmRldiwKCUlOICBHVF9MUE9SVCAgcG9ydCwKCUlOICBHVF9FREVURUNUX01PREUgICBtb2RlCik7CgoKLyoKICoJZ3RTeXNDdHJsLmMKKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFJNVU1vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlTZXQgUm1vdGUgTWFuYWdlbWVudCBVbml0IE1vZGU6IGRpc2FibGUsIGVuYWJsZSBvbiBwb3J0IDQgb3IgNSwgb3IgZW5hYmxlCioJCW9uIHBvcnQgOSBvciAxMC4gRGV2aWNlcywgc3VjaCBhcyA4OEU2MDk3LCBzdXBwb3J0IFJNVSBvbiBwb3J0IDkgYW5kIDEwLCAKKgkJd2hpbGUgb3RoZXIgZGV2aWNlcywgc3VjaCBhcyA4OEU2MTY1LCBzdXBwb3J0IFJNVSBvbiBwb3J0IDQgYW5kIDUuIFNvLAoqCQlwbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQgZm9yIGRldGFpbC4KKgkJV2hlbiBSTVUgaXMgZW5hYmxlZCBhbmQgdGhpcyBkZXZpY2UgcmVjZWl2ZXMgYSBSZW1vdGUgTWFuYWdlbWVudCBSZXF1ZXN0CioJCWZyYW1lIGRpcmVjdGVkIHRvIHRoaXMgZGV2aWNlLCB0aGUgZnJhbWUgd2lsbCBiZSBwcm9jZXNzZWQgYW5kIGEgUmVtb3RlIAoqCQlNYW5hZ2VtZW50IFJlc3BvbnNlIGZyYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCBzZW50IG91dC4KKgkJCioJCU5vdGU6IGVuYWJsaW5nIFJNVSBoYXMgbm8gZWZmZWN0IGlmIHRoZSBSZW1vdGUgTWFuYWdlbWVudCBwb3J0IGlzIGluIGhhbGYKKgkJZHVwbGV4IG1vZGUuIFRoZSBwb3J0J3MgRnJhbWVNb2RlIG11c3QgYmUgRFNBIG9yIEV0aGVyVHlwZSBEU0EgYXMgd2VsbC4KKgkJCiogSU5QVVRTOgoqCQlybXUgLSBHVF9STVUgc3RydWN0dXJlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAgICAgLSBvbiBiYWQgcGFyYW1ldGVyCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Uk1VTW9kZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX1JNVQkJKnJtdQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Uk1VTW9kZQoqCiogREVTQ1JJUFRJT046CioJCUdldCBSbW90ZSBNYW5hZ2VtZW50IFVuaXQgTW9kZTogZGlzYWJsZSwgZW5hYmxlIG9uIHBvcnQgNCBvciA1LCBvciBlbmFibGUKKgkJb24gcG9ydCA5IG9yIDEwLiBEZXZpY2VzLCBzdWNoIGFzIDg4RTYwOTcsIHN1cHBvcnQgUk1VIG9uIHBvcnQgOSBhbmQgMTAsIAoqCQl3aGlsZSBvdGhlciBkZXZpY2VzLCBzdWNoIGFzIDg4RTYxNjUsIHN1cHBvcnQgUk1VIG9uIHBvcnQgNCBhbmQgNS4gU28sCioJCXBsZWFzZSByZWZlciB0byB0aGUgZGV2aWNlIGRhdGFzaGVldCBmb3IgZGV0YWlsLgoqCQlXaGVuIFJNVSBpcyBlbmFibGVkIGFuZCB0aGlzIGRldmljZSByZWNlaXZlcyBhIFJlbW90ZSBNYW5hZ2VtZW50IFJlcXVlc3QKKgkJZnJhbWUgZGlyZWN0ZWQgdG8gdGhpcyBkZXZpY2UsIHRoZSBmcmFtZSB3aWxsIGJlIHByb2Nlc3NlZCBhbmQgYSBSZW1vdGUgCioJCU1hbmFnZW1lbnQgUmVzcG9uc2UgZnJhbWUgd2lsbCBiZSBnZW5lcmF0ZWQgYW5kIHNlbnQgb3V0LgoqCQkKKgkJTm90ZTogZW5hYmxpbmcgUk1VIGhhcyBubyBlZmZlY3QgaWYgdGhlIFJlbW90ZSBNYW5hZ2VtZW50IHBvcnQgaXMgaW4gaGFsZgoqCQlkdXBsZXggbW9kZS4gVGhlIHBvcnQncyBGcmFtZU1vZGUgbXVzdCBiZSBEU0Egb3IgRXRoZXJUeXBlIERTQSBhcyB3ZWxsLgoqCQkKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlybXUgLSBHVF9STVUgc3RydWN0dXJlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRSTVVNb2RlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9STVUJCSpybXUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1BvcnQyTHBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgY29udmVydHMgcGh5c2ljYWwgcG9ydCBudW1iZXIgdG8gbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHBoeXNpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQlscG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNQb3J0Mkxwb3J0CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9VMzIgCQlwb3J0LAoJT1VUIEdUX0xQT1JUCSpscG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzTHBvcnQyUG9ydAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBjb252ZXJ0cyBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIHBoeXNpY2FsIHBvcnQgbnVtYmVyLgoqCiogSU5QVVRTOgoqCQlscG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCXBvcnQgLSBwaHlzaWNhbCBwb3J0IG51bWJlcgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0xwb3J0MlBvcnQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCWxwb3J0LAoJT1VUIEdUX1UzMiAJCSpwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNQb3J0dmVjMkxwb3J0dmVjCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGNvbnZlcnRzIHBoeXNpY2FsIHBvcnQgdmVjdG9yIHRvIGxvZ2ljYWwgcG9ydCB2ZWN0b3IuCioKKiBJTlBVVFM6CioJCXBvcnR2ZWMgLSBwaHlzaWNhbCBwb3J0IHZlY3RvcgoqCiogT1VUUFVUUzoKKgkJbHBvcnR2ZWMgLSBsb2dpY2FsIHBvcnQgdmVjdG9yCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzUG9ydHZlYzJMcG9ydHZlYwooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfVTMyCQlwb3J0dmVjLAoJT1VUIEdUX1UzMiAJCSpscG9ydHZlYwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzTHBvcnR2ZWMyUG9ydHZlYwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBjb252ZXJ0cyBsb2dpY2FsIHBvcnQgdmVjdG9yIHRvIHBoeXNpY2FsIHBvcnQgdmVjdG9yLgoqCiogSU5QVVRTOgoqCQlscG9ydHZlYyAtIGxvZ2ljYWwgcG9ydCB2ZWN0b3IKKgoqIE9VVFBVVFM6CioJCXBvcnR2ZWMgLSBwaHlzaWNhbCBwb3J0IHZlY3RvcgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0xwb3J0dmVjMlBvcnR2ZWMKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX1UzMgkJbHBvcnR2ZWMsCglPVVQgR1RfVTMyIAkJKnBvcnR2ZWMKKTsKCgovKgogKiBndFBJUkwuYwogKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmxTZXRDdXJUaW1lVXBJbnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY3VycmVudCB0aW1lIHVwZGF0ZSBpbnRlcnZhbC4KKgkJUGxlYXNlIGNvbnRhY3QgRkFFIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbi4KKgoqIElOUFVUUzoKKiAgICAgICB1cEludCAtIHVwZGF0YSBpbnRlcnZhbCAoMCB+IDcpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwaXJsU2V0Q3VyVGltZVVwSW50CigKICAgIElOICBHVF9RRF9ERVYgIAkJCSpkZXYsCglJTglHVF9VMzIJCQkJdXBJbnQKKTsKCgovKgogKiBndFBJUkwyLmMKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwaXJsMlNldEN1clRpbWVVcEludAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjdXJyZW50IHRpbWUgdXBkYXRlIGludGVydmFsLgoqCQlQbGVhc2UgY29udGFjdCBGQUUgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uLgoqCiogSU5QVVRTOgoqICAgICAgIHVwSW50IC0gdXBkYXRhIGludGVydmFsICgwIH4gNykKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BpcmwyU2V0Q3VyVGltZVVwSW50CigKICAgIElOICBHVF9RRF9ERVYgIAkJCSpkZXYsCglJTglHVF9VMzIJCQkJdXBJbnQKKTsKCgovKgogKiBndFBUUC5jCiAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0Q29uZmlnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd3JpdGVzIFBUUCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBJTlBVVFM6CioJCXB0cERhdGEgIC0gUFRQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRDb25maWcKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9QVFBfQ09ORklHCSpwdHBEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRDb25maWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBQVFAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqCQlwdHBEYXRhICAtIFBUUCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0Q29uZmlnCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfUFRQX0NPTkZJRwkqcHRwRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0R2xvYmFsQ29uZmlnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd3JpdGVzIFBUUCBnbG9iYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogSU5QVVRTOgoqCQlwdHBEYXRhICAtIFBUUCBnbG9iYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFNldEdsb2JhbENvbmZpZwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1BUUF9HTE9CQUxfQ09ORklHCSpwdHBEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRHbG9iYWxDb25maWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBQVFAgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKgkJcHRwRGF0YSAgLSBQVFAgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRHbG9iYWxDb25maWcKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9QVFBfR0xPQkFMX0NPTkZJRwkqcHRwRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0UG9ydENvbmZpZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyBQVFAgcG9ydCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBJTlBVVFM6CioJCXB0cERhdGEgIC0gUFRQIHBvcnQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFNldFBvcnRDb25maWcKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOCUdUX0xQT1JUCXBvcnQsCglJTiAgR1RfUFRQX1BPUlRfQ09ORklHCSpwdHBEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRQb3J0Q29uZmlnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgUFRQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgYSBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqCQlwdHBEYXRhICAtIFBUUCBwb3J0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRQb3J0Q29uZmlnCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX1BUUF9QT1JUX0NPTkZJRwkqcHRwRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0UFRQRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzIG9yIGRpc2FibGVzIFBUUC4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSBQVFAsIEdUX0ZBTFNFIHRvIGRpc2FibGUgUFRQCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0UFRQRW4KKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9CT09MCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0UFRQRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBjaGVja3MgaWYgUFRQIGlzIGVuYWJsZWQuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSBpZiBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRQVFBFbgooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX0JPT0wJCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0UG9ydFBUUEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcyBvciBkaXNhYmxlcyBQVFAgb24gYSBwb3J0LgoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gZW5hYmxlIFBUUCwgR1RfRkFMU0UgdG8gZGlzYWJsZSBQVFAKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRQb3J0UFRQRW4KKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOCUdUX0xQT1JUCXBvcnQsCglJTiAgR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldFBvcnRQVFBFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGNoZWNrcyBpZiBQVFAgaXMgZW5hYmxlZCBvbiBhIHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSBpZiBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRQb3J0UFRQRW4KKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOCUdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKmVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0UFRQSW50CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBQVFAgaW50ZXJydXB0IHN0YXR1cyBmb3IgZWFjaCBwb3J0LgoqCQlUaGUgUFRQIEludGVycnVwdCBiaXQgZ2V0cyBzZXQgZm9yIGEgZ2l2ZW4gcG9ydCB3aGVuIGFuIGluY29taW5nIFBUUCAKKgkJZnJhbWUgaXMgdGltZSBzdGFtcGVkIGFuZCBQVFBBcnJJbnRFbiBmb3IgdGhhdCBwb3J0IGlzIHNldCB0byAweDEuCioJCVNpbWlsYXJ5IFBUUCBJbnRlcnJ1cHQgYml0IGdldHMgc2V0IGZvciBhIGdpdmVuIHBvcnQgd2hlbiBhbiBvdXRnb2luZwoqCQlQVFAgZnJhbWUgaXMgdGltZSBzdGFtcGVkIGFuZCBQVFBEZXBJbnRFbiBmb3IgdGhhdCBwb3J0IGlzIHNldCB0byAweDEuCioJCVRoaXMgYml0IGdldHMgY2xlYXJlZCB1cG9uIHNvZnR3YXJlIHJlYWRpbmcgYW5kIGNsZWFyaW5nIHRoZSBjb3JyZXNwb25kaW5nCioJCXRpbWUgY291bnRlciB2YWxpZCBiaXRzIHRoYXQgYXJlIHZhbGlkIGZvciB0aGF0IHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCXB0cEludCAJLSBpbnRlcnJ1cHQgc3RhdHVzIGZvciBlYWNoIHBvcnQgKGJpdCAwIGZvciBwb3J0IDAsIGJpdCAxIGZvciBwb3J0IDEsIGV0Yy4pCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0UFRQSW50CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfVTMyCQkqcHRwSW50Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRQVFBHbG9iYWxUaW1lCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgZ2xvYmFsIHRpbWVyIHZhbHVlIHRoYXQgaXMgcnVubmluZyBvZmYgb2YgdGhlIGZyZWUKKgkJcnVubmluZyBzd2l0Y2ggY29yZSBjbG9jay4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKgkJcHRwVGltZQktIFBUUCBnbG9iYWwgdGltZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldFBUUEdsb2JhbFRpbWUKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9VMzIJCSpwdHBUaW1lCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRUaW1lU3RhbXBlZAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgdGhlIFBUUCBwb3J0IHN0YXR1cyB0aGF0IGluY2x1ZGVzIHRpbWUgc3RhbXAgdmFsdWUgCioJCWFuZCBzZXF1Y2UgSWQgdGhhdCBhcmUgY2FwdHVyZWQgYnkgUFRQIGxvZ2ljIGZvciBhIFBUUCBmcmFtZSB0aGF0IG5lZWRzIAoqCQl0byBiZSB0aW1lIHN0YW1wZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAJCS0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICB0aW1lVG9SZWFkCS0gQXJyMCwgQXJyMSwgb3IgRGVwIHRpbWUgKEdUX1BUUF9USU1FIGVudW0gdHlwZSkKKgoqIE9VVFBVVFM6CioJCXB0cFN0YXR1cwktIFBUUCBwb3J0IHN0YXR1cwoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAJCS0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgCS0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRUaW1lU3RhbXBlZAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTglHVF9QVFBfVElNRQl0aW1lVG9SZWFkLAoJT1VUIEdUX1BUUF9UU19TVEFUVVMJKnB0cFN0YXR1cwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwUmVzZXRUaW1lU3RhbXAKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmVzZXRzIFBUUCBUaW1lIHZhbGlkIGJpdCBzbyB0aGF0IFBUUCBsb2dpYyBjYW4gdGltZSBzdGFtcAoqCQlhIG5leHQgUFRQIGZyYW1lIHRoYXQgbmVlZHMgdG8gYmUgdGltZSBzdGFtcGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgCQktIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgdGltZVRvUmVzZXQJLSBBcnIwLCBBcnIxLCBvciBEZXAgdGltZSAoR1RfUFRQX1RJTUUgZW51bSB0eXBlKQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgCQktIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIAktIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwUmVzZXRUaW1lU3RhbXAKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4JR1RfUFRQX1RJTUUJdGltZVRvUmVzZXQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldFJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJlYWRzIFBUUCByZWdpc3Rlci4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IAkJLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIHJlZ09mZnNldAktIHJlZ2lzdGVyIHRvIHJlYWQKKgoqIE9VVFBVVFM6CioJCWRhdGEJCS0gcmVnaXN0ZXIgZGF0YQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldFJlZwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfVTMyCQlyZWdPZmZzZXQsCglPVVQgR1RfVTMyCQkqZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0UmVnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd3JpdGVzIGRhdGEgdG8gUFRQIHJlZ2lzdGVyLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgCQktIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICByZWdPZmZzZXQJLSByZWdpc3RlciB0byBiZSB3cml0dGVuCioJCWRhdGEJCS0gZGF0YSB0byBiZSB3cml0dGVuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFNldFJlZwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfVTMyCQlyZWdPZmZzZXQsCglJTiAgR1RfVTMyCQlkYXRhCik7CgoKI2lmZGVmIENPTkZJR19BVkJfRlBHQQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0RlBHQUludFN0YXR1cwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgaW50ZXJydXB0IHN0YXR1cyBvZiBQVFAgbG9naWMuCioKKiBJTlBVVFM6CioJCWludFN0YXR1cwktIFBUUCBJbnQgU3RhdHVzCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0RlBHQUludFN0YXR1cwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1UzMglpbnRTdGF0dXMKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRGUEdBSW50U3RhdHVzCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBpbnRlcnJ1cHQgc3RhdHVzIG9mIFBUUCBsb2dpYy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKgkJaW50U3RhdHVzCS0gUFRQIEludCBTdGF0dXMKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRGUEdBSW50U3RhdHVzCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTMyCSppbnRTdGF0dXMKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBTZXRGUEdBSW50RW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzIFBUUCBpbnRlcnJ1cHQuCioKKiBJTlBVVFM6CioJCWludEVuCS0gZW5hYmxlL2Rpc2FibGUgUFRQIGludGVycnVwdCAoMSB0byBlbmFibGUsIDAgdG8gZGlzYWJsZSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRGUEdBSW50RW4KKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9VMzIJaW50RW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldENsb2NrU291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBQVFAgQ2xvY2sgc291cmNlIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCWNsa1NyYwktIFBUUCBjbG9jayBzb3VyY2UgKEEvRCBEZXZpY2Ugb3IgRlBHQSkKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRDbG9ja1NvdXJjZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1BUUF9DTE9DS19TUkMgCSpjbGtTcmMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldENsb2NrU291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBQVFAgQ2xvY2sgc291cmNlIG1vZGUuCioKKiBJTlBVVFM6CioJCWNsa1NyYwktIFBUUCBjbG9jayBzb3VyY2UgKEEvRCBEZXZpY2Ugb3IgRlBHQSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRDbG9ja1NvdXJjZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1BUUF9DTE9DS19TUkMgCWNsa1NyYwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0UDlNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBQb3J0IDkgTW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIFBvcnQgOSBtb2RlIChHVF9QVFBfUDlfTU9ERSBlbnVtIHR5cGUpCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0UDlNb2RlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfUFRQX1A5X01PREUgCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBTZXRQOU1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIFBvcnQgOSBNb2RlLgoqCiogSU5QVVRTOgoqCQltb2RlIC0gUG9ydCA5IG1vZGUgKEdUX1BUUF9QOV9NT0RFIGVudW0gdHlwZSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRQOU1vZGUKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9QVFBfUDlfTU9ERSAJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwUmVzZXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBwZXJmb3JtcyBzb2Z0d2FyZSByZXNldCBmb3IgUFRQIGxvZ2ljLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFJlc2V0CigKCUlOICBHVF9RRF9ERVYgCSpkZXYKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRDeWNsZUFkanVzdEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIFBUUCBEdXR5IEN5Y2xlIEFkanVzdG1lbnQgaXMgZW5hYmxlZC4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKgkJYWRqRW4JLSBHVF9UUlVFIGlmIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldEN5Y2xlQWRqdXN0RW4KKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9CT09MCQkqYWRqRW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBTZXRDeWNsZUFkanVzdEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyBQVFAgRHV0eSBDeWNsZSBBZGp1c3RtZW50LgoqCiogSU5QVVRTOgoqCQlhZGpFbgktIEdUX1RSVUUgdG8gZW5hYmxlLCBHVF9GQUxTRSB0byBkaXNhYmxlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0Q3ljbGVBZGp1c3RFbgooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0JPT0wJCWFkakVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0Q3ljbGVBZGp1c3QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIGNsb2NrIGR1dHkgY3ljbGUgYWRqdXN0bWVudCB2YWx1ZS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKgkJYWRqCS0gYWRqdXN0bWVudCB2YWx1ZSAoR1RfUFRQX0NMT0NLX0FESlVTVE1FTlQgc3RydWN0dXJlKQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldEN5Y2xlQWRqdXN0CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfUFRQX0NMT0NLX0FESlVTVE1FTlQJCSphZGoKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldEN5Y2xlQWRqdXN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBjbG9jayBkdXR5IGN5Y2xlIGFkanVzdG1lbnQgdmFsdWUuCioKKiBJTlBVVFM6CioJCWFkagktIGFkanVzdG1lbnQgdmFsdWUgKEdUX1BUUF9DTE9DS19BREpVU1RNRU5UIHN0cnVjdHVyZSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRDeWNsZUFkanVzdAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1BUUF9DTE9DS19BREpVU1RNRU5UCQkqYWRqCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRQTExFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGNoZWNrcyBpZiBQTEwgaXMgZW5hYmxlZC4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4JCS0gR1RfVFJVRSBpZiBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgkJZnJlcVNlbAktIFBMTCBGcmVxdWVuY3kgU2VsZWN0aW9uIChkZWZhdWx0IDB4MyAtIDIyLjM2OE1IeikKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBQTEwgRnJlcXVlbmNlIHNlbGVjdGlvbiBpcyBiYXNlZCBvbiB0aGUgQ2xvY2sgUmVjb3ZlcnkgUExMIGRldmljZS4KKgkJSURUIE1LMTU3NS0wMSBpcyB0aGUgZGVmYXVsdCBQTEwgZGV2aWNlLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0UExMRW4KKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9CT09MCQkqZW4sCglPVVQgR1RfVTMyCQkqZnJlcVNlbAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0UExMRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIFBMTCBkZXZpY2UuCioKKiBJTlBVVFM6CioJCWVuCQktIEdUX1RSVUUgdG8gZW5hYmxlLCBHVF9GQUxTRSB0byBkaXNhYmxlCioJCWZyZXFTZWwJLSBQTEwgRnJlcXVlbmN5IFNlbGVjdGlvbiAoZGVmYXVsdCAweDMgLSAyMi4zNjhNSHopCioJCQkJICBNZWFuaW5nZnVsIG9ubHkgd2hlbiBlbmFibGluZyBQTEwgZGV2aWNlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgUExMIEZyZXF1ZW5jZSBzZWxlY3Rpb24gaXMgYmFzZWQgb24gdGhlIENsb2NrIFJlY292ZXJ5IFBMTCBkZXZpY2UuCioJCUlEVCBNSzE1NzUtMDEgaXMgdGhlIGRlZmF1bHQgUExMIGRldmljZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFNldFBMTEVuCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfQk9PTAkJZW4sCglJTiAgR1RfVTMyCQlmcmVxU2VsCik7CiNlbmRpZgoKLyogQW1iZXIgQVBJcyAqLwoKLyogZ3RCcmdGZGIuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0TWFjQXZiCioKKiBERVNDUklQVElPTjoKKgkJQVRVIE1BQyBlbnRyeSBpbiBBVkIgbW9kZS4KKgkJV2hlbiBlbmFibGVkLCBBVFUgZW50cmllcyBvcGVyYXRlIGluIEFWQiBtb2RlOgoqCioJCUdUX0FUVV9VQ19TVEFURSAtIHN1cHBvcnQKKgkJCUdUX1VDX05PX1BSSV9TVEFUSUNfQVZCX0VOVFJZLCBhbmQgCioJCQlHVF9VQ19TVEFUSUNfQVZCX0VOVFJZCioKKgkJR1RfQVRVX01DX1NUQVRFIC0gc3VwcG9ydAoqCQkJR1RfTUNfU1RBVElDX0FWQl9FTlRSWSwgYW5kCioJCQlHVF9NQ19QUklPX1NUQVRJQ19BVkJfRU5UUlkKKgoqCQlXaGVuIGRpc2FibGVkLCBBVFUgZW50cmllcyBvcGVyYXRlIGluIG5vbi1BVkIgbW9kZToKKgoqCQlHVF9BVFVfVUNfU1RBVEUgLSBzdXBwb3J0CioJCQlHVF9VQ19OT19QUklfU1RBVElDX05STCwgYW5kIAoqCQkJR1RfVUNfU1RBVElDX05STAoqCioJCUdUX0FUVV9NQ19TVEFURSAtIHN1cHBvcnQKKgkJCUdUX01DX1NUQVRJQ19VTkxJTUlURURfUkFURSwgYW5kCioJCQlHVF9NQ19QUklPX1NUQVRJQ19VTkxJTUlURURfUkFURQoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAgLSBHVF9UUlVFIGlmIE1hY0F2YiBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldE1hY0F2YgooCglJTiAgR1RfUURfREVWICAgICpkZXYsCglPVVQgR1RfQk9PTCAJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYlNldE1hY0F2YgoqCiogREVTQ1JJUFRJT046CioJCUFUVSBNQUMgZW50cnkgaW4gQVZCIG1vZGUuCioJCVdoZW4gZW5hYmxlZCwgQVRVIGVudHJpZXMgb3BlcmF0ZSBpbiBBVkIgbW9kZToKKgoqCQlHVF9BVFVfVUNfU1RBVEUgLSBzdXBwb3J0CioJCQlHVF9VQ19OT19QUklfU1RBVElDX0FWQl9FTlRSWSwgYW5kIAoqCQkJR1RfVUNfU1RBVElDX0FWQl9FTlRSWQoqCioJCUdUX0FUVV9NQ19TVEFURSAtIHN1cHBvcnQKKgkJCUdUX01DX1NUQVRJQ19BVkJfRU5UUlksIGFuZAoqCQkJR1RfTUNfUFJJT19TVEFUSUNfQVZCX0VOVFJZCioKKgkJV2hlbiBkaXNhYmxlZCwgQVRVIGVudHJpZXMgb3BlcmF0ZSBpbiBub24tQVZCIG1vZGU6CioKKgkJR1RfQVRVX1VDX1NUQVRFIC0gc3VwcG9ydAoqCQkJR1RfVUNfTk9fUFJJX1NUQVRJQ19OUkwsIGFuZCAKKgkJCUdUX1VDX1NUQVRJQ19OUkwKKgoqCQlHVF9BVFVfTUNfU1RBVEUgLSBzdXBwb3J0CioJCQlHVF9NQ19TVEFUSUNfVU5MSU1JVEVEX1JBVEUsIGFuZAoqCQkJR1RfTUNfUFJJT19TVEFUSUNfVU5MSU1JVEVEX1JBVEUKKgoqIElOUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIE1hY0F2YiwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYlNldE1hY0F2YgooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYkdldFBvcnRBdHVMZWFybkxpbWl0CioKKiBERVNDUklQVElPTjoKKiAgICAgIFBvcnQncyBhdXRvIGxlYXJuaW5nIGxpbWl0LiBXaGVuIHRoZSBsaW1pdCBpcyBub24temVybyB2YWx1ZSwgdGhlIG51bWJlcgoqCQlvZiBNQUMgYWRkcmVzc2VzIHRoYXQgY2FuIGJlIGxlYXJuZWQgb24gdGhpcyBwb3J0IGFyZSBsaW1pdGVkIHRvIHRoZSB2YWx1ZQoqCQlzcGVjaWZpZWQgaW4gdGhpcyBBUEkuIFdoZW4gdGhlIGxlYXJuIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQgYW55IGZyYW1lIAoqCQl0aGF0IGluZ3Jlc3NlcyB0aGlzIHBvcnQgd2l0aCBhIHNvdXJjZSBNQUMgYWRkcmVzcyBub3QgYWxyZWFkeSBpbiB0aGUgCioJCWFkZHJlc3MgZGF0YWJhc2UgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwb3J0IHdpbGwgYmUgZGlzY2FyZGVkLiAKKgkJTm9ybWFsIGF1dG8tbGVhcm5pbmcgd2lsbCByZXN1bWUgb24gdGhlIHBvcnQgYXMgc29vbiBhcyB0aGUgbnVtYmVyIG9mIAoqCQlhY3RpdmUgdW5pY2FzdCBNQUMgYWRkcmVzc2VzIGFzc29jaWF0ZWQgdG8gdGhpcyBwb3J0IGlzIGxlc3MgdGhhbiB0aGUgCioJCWxlYXJuIGxpbWl0LgoqCQlDUFUgZGlyZWN0ZWQgQVRVIExvYWQsIFB1cmdlLCBvciBNb3ZlIHdpbGwgbm90IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgCioJCWxlYXJuIGxpbWl0LgoqCQlUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgd2hlbiB0aGUgbGltaXQgaXMgemVyby4KKgkJVGhlIGZvbGxvd2luZyBjYXJlIGlzIG5lZWRlZCB3aGVuIGVuYWJsaW5nIHRoaXMgZmVhdHVyZToKKgkJCTEpIGRzYWJsZSBsZWFybmluZyBvbiB0aGUgcG9ydHMKKgkJCTIpIGZsdXNoIGFsbCBub24tc3RhdGljIGFkZHJlc3NlcyBpbiB0aGUgQVRVCioJCQkzKSBkZWZpbmUgdGhlIGRlc2lyZWQgbGltaXQgZm9yIHRoZSBwb3J0cwoqCQkJNCkgcmUtZW5hYmxlIGxlYXJpbmcgb24gdGhlIHBvcnRzCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqCQkJCQkJCQkJCQkgIAoqIE9VVFBVVFM6CioJCWxpbWl0IC0gYXV0byBsZWFybmluZyBsaW1pdCAoIDAgfiAyNTUgKQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGxpbWl0ID4gMHhGRgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiR2V0UG9ydEF0dUxlYXJuTGltaXQKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9MUE9SVCAgCXBvcnQsCglPVVQgR1RfVTMyICAgCSpsaW1pdAopOwoKLyogZ3RQQ1NDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldFJHTUlJVGltaW5nRGVsYXkKKgoqIERFU0NSSVBUSU9OOgoqCQlSR01JSSByZWNlaXZlL3RyYW5zbWl0IFRpbWluZyBDb250cm9sLiBUaGlzIGFwaSBhZGRzIGRlbGF5IHRvIFJYQ0xLIGZvcgoqCQlJTkQgaW5wdXRzIGFuZCBHVFhDTEsgZm9yIE9VVEQgb3V0cHV0cyB3aGVuIHBvcnQgaXMgaW4gUkdNSUkgbW9kZS4KKgkJQ2hhbmdlIHRvIHRoaXMgYml0IGFyZSBkaXNydXB0aXZlIHRvIG5vcm1hbCBvcGVyYXRpb24uIEhlbmNlIGFueSBjaGFuZ2VzCioJCXRvIHRoaXMgcmVnaXN0ZXIgbXVzdCBiZSBkb25lIG9ubHkgd2hpbGUgdGhlIHBvcnQncyBsaW5rIGlzIGRvd24uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXJ4bW9kZSAtIEdUX0ZBTFNFIGZvciBkZWZhdWx0IHNldHVwLCBHVF9UUlVFIGZvciBhZGRpbmcgZGVsYXkgdG8gcnhjbGsKKgkJdHhtb2RlIC0gR1RfRkFMU0UgZm9yIGRlZmF1bHQgc2V0dXAsIEdUX1RSVUUgZm9yIGFkZGluZyBkZWxheSB0byB0eGNsawoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0UkdNSUlUaW1pbmdEZWxheQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpyeG1vZGUsCglPVVQgR1RfQk9PTCAgCSp0eG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc1NldFJHTUlJVGltaW5nRGVsYXkKKgoqIERFU0NSSVBUSU9OOgoqCQlSR01JSSByZWNlaXZlL3RyYW5zbWl0IFRpbWluZyBDb250cm9sLiBUaGlzIGFwaSBhZGRzIGRlbGF5IHRvIFJYQ0xLIGZvcgoqCQlJTkQgaW5wdXRzIGFuZCBHVFhDTEsgZm9yIE9VVEQgb3V0cHV0cyB3aGVuIHBvcnQgaXMgaW4gUkdNSUkgbW9kZS4KKgkJQ2hhbmdlIHRvIHRoaXMgYml0IGFyZSBkaXNydXB0aXZlIHRvIG5vcm1hbCBvcGVyYXRpb24uIEhlbmNlIGFueSBjaGFuZ2VzCioJCXRvIHRoaXMgcmVnaXN0ZXIgbXVzdCBiZSBkb25lIG9ubHkgd2hpbGUgdGhlIHBvcnQncyBsaW5rIGlzIGRvd24uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJcnhtb2RlIC0gR1RfRkFMU0UgZm9yIGRlZmF1bHQgc2V0dXAsIEdUX1RSVUUgZm9yIGFkZGluZyBkZWxheSB0byByeGNsawoqCQl0eG1vZGUgLSBHVF9GQUxTRSBmb3IgZGVmYXVsdCBzZXR1cCwgR1RfVFJVRSBmb3IgYWRkaW5nIGRlbGF5IHRvIHR4Y2xrCioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRSR01JSVRpbWluZ0RlbGF5CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCUlOICBHVF9CT09MICAJcnhtb2RlLAoJSU4gIEdUX0JPT0wgIAl0eG1vZGUKKTsKCgovKiBndFBvcnRMZWQuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0TEVECioKKiBERVNDUklQVElPTjoKKgkJVGhpcyBBUEkgYWxsb3dzIHRvIGNvbmZpZ3VyZSA0IExFRCBzZWN0aW9ucywgUHVsc2Ugc3RyZXRjaCwgQmxpbmsgcmF0ZSwKKgkJYW5kIHNwZWNpYWwgY29udHJvbHMuCioKKiBJTlBVVFM6CioJCXBvcnQJLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQljZmcgCS0gR1RfTEVEX0NGRyB2YWx1ZQoqCQl2YWx1ZSAJLSB2YWx1ZSB0byBiZSBjb25maWd1cmVkCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRMRUQKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX0xFRF9DRkcJY2ZnLAoJSU4gIEdUX1UzMgkJdmFsdWUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRMRUQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIEFQSSBhbGxvd3MgdG8gcmV0cmlldmUgNCBMRUQgc2VjdGlvbnMsIFB1bHNlIHN0cmV0Y2gsIEJsaW5rIHJhdGUsCioJCWFuZCBzcGVjaWFsIGNvbnRyb2xzLgoqCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJY2ZnIAktIEdUX0xFRF9DRkcgdmFsdWUKKgoqIE9VVFBVVFM6CioJCXZhbHVlIAktIGNvbmZpZ3VyZWQgdmFsdWUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0TEVECigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9MRURfQ0ZHCWNmZywKCU9VVCBHVF9VMzIJCSp2YWx1ZQopOwoKCgoKCi8qIGd0UG9ydFN0YXR1cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRRU2l6ZVBlclFQcmkKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBlZ3Jlc3MgcXVldWUgc2l6ZSBmb3IgcG9ydCdzIGVhY2ggUVByaSAoMCB+IDMpLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCWNvdW50cyAtIGVncmVzcyBxdWV1ZSBzaXplIHBlciBRUHJpIChzaG91bGQgYmUgNCAqIDE2Ynl0ZXMpCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UVNpemVQZXJRUHJpCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX1UxNgkJKmNvdW50cwopOwoKCi8qIGd0U3lzQ3RybC5jICovCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0QVJQd29CQwoqCiogREVTQ1JJUFRJT046CiogICAgICAgQVJQIGRldGVjdGlvbiB3aXRob3V0IEJyb2FkY2FzdCBjaGVja2luZy4gV2hlbiBlbmFibGVkIHRoZSBzd2l0Y2ggY29yZQoqICAgICAgIGRvZXMgbm90IGNoZWNrIGZvciBhIEJ0b2FkY2FzdCBNQUMgYWRkcmVzcyBhcyBwYXJ0IG9mIHRoZSBBUlAgZnJhbWUKKiAgICAgICBkZXRlY3Rpb24uIEl0IG9ubHkgY2hlY2tlcyB0aGUgRXRoZXIgVHlwZSAoMHgwODA2KS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgaWYgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0QVJQd29CQwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0JPT0wJCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0QVJQd29CQwoqCiogREVTQ1JJUFRJT046CiogICAgICAgQVJQIGRldGVjdGlvbiB3aXRob3V0IEJyb2FkY2FzdCBjaGVja2luZy4gV2hlbiBlbmFibGVkIHRoZSBzd2l0Y2ggY29yZQoqICAgICAgIGRvZXMgbm90IGNoZWNrIGZvciBhIEJ0b2FkY2FzdCBNQUMgYWRkcmVzcyBhcyBwYXJ0IG9mIHRoZSBBUlAgZnJhbWUKKiAgICAgICBkZXRlY3Rpb24uIEl0IG9ubHkgY2hlY2tlcyB0aGUgRXRoZXIgVHlwZSAoMHgwODA2KS4KKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgdG8gZW5hYmxlLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0QVJQd29CQwooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfQk9PTCAJZW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRDTEsxMjVFbgoqCiogREVTQ1JJUFRJT046CioJCUNsb2NrIDEyNU1IeiBFbmFibGUuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSBDTEsxMjUgcGluIGhhcyBhIGZyZWUgcnVubmluZyAxMjUgTUh6CioJCWNsb2NrIG91dHB1dC4KKgkJV2hlbiBpdCdzIGRpc2FibGVkLCB0aGUgQ0xLMTI1IHBpbiB3aWxsIGJlIGluIHRyaS1zdGF0ZS4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSBpZiAxMjVNSHogY2xvY2sgaXMgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Q0xLMTI1RW4KKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wgIAkqZW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRDTEsxMjVFbgoqCiogREVTQ1JJUFRJT046CioJCUNsb2NrIDEyNU1IeiBFbmFibGUuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSBDTEsxMjUgcGluIGhhcyBhIGZyZWUgcnVubmluZyAxMjUgTUh6CioJCWNsb2NrIG91dHB1dC4KKgkJV2hlbiBpdCdzIGRpc2FibGVkLCB0aGUgQ0xLMTI1IHBpbiB3aWxsIGJlIGluIHRyaS1zdGF0ZS4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSAxMjUgTUh6IGNsb2NrLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Q0xLMTI1RW4KKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MCQllbgopOwoKCi8qIGd0UHJpVGFibGUuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0RlByaU92ZXJyaWRlVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqIAkJRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUuCioJCVdoZW4gYSBmcmFtZSBlbnRlcnMgYSBwb3J0LCBpdHMgdHlwZSBpcyBkZXRlcm1pbmVkIGFuZCB0aGUgdHlwZSBpcyB1c2VkIAoqCQl0byBhY2Nlc3MgdGhlIEZyYW1lIFByaW9yaXR5IFRhYmxlLiBJZiB0aGUgdHlwZSdzIGZQcmlFbiAoaW4gR1RfRlBSSV9UQkxfRU5UUlkKKgkJc3RydWN0dXJlKSBpcyBlbmFibGVkLCB0aGVuIHRoZSBmcmFtZSdzIEZyYW1lIFByaW9yaXR5IHdpbGwgYmUgb3ZlcnJpZGRlbgoqCQl3aXRoIHRoZSB2YWx1ZSB3cml0dGVuIGluIGZQcmlvcml0eSAoaW4gR1RfRlBSSV9UQkxfRU5UUlkgc3RydWN0dXJlKS4KKgkJRnJhbWUgVHlwZXMgc3VwcG9ydGVkIGFyZToKKgkJCUZUWVBFX0RTQV9UT19DUFVfQlBEVSAtCioJCQkJVXNlZCBvbiBtdWx0aWNhc3QgRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgwIChCUERVL01HTVQpLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX0YyUiAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDEgKEZyYW1lIHRvIFJlZ2lzdGVyCioJCQkJUmVwbHkpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9JR01QIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MiAoSUdNUC9NTEQgVHJhcCkKKgkJCQlhbmQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBJR01QIG9yIE1MRCB0cmFwcGVkCioJCQlGVFlQRV9EU0FfVE9fQ1BVX1RSQVAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgzIChQb2xpY3kgVHJhcCkgYW5kCioJCQkJb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBQb2xpY3kgVHJhcHBlZAoqCQkJRlRZUEVfRFNBX1RPX0NQVV9BUlAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg0IChBUlAgTWlycm9yKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIEFSUCBNaXJyb3JlZCAoc2VlIGdwcnRTZXRBUlB0b0NQVSBBUEkpLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9NSVJST1IgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg1IChQb2xpY3kgTWlycm9yKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIFBvbGljeSBNaXJyb3JlZCAoc2VlIGdwcnRTZXRQb2xpY3kgQVBJKS4KKgkJCUZUWVBFX0RTQV9UT19DUFVfUkVTRVJWRUQgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg2IChSZXNlcnZlZCkuIE5vdAoqCQkJCXVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9UT19DUFVfVUNBU1RfTUdNVCAtCioJCQkJVXNlZCBvbiB1bmljYXN0IERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MCAodW5pY2FzdAoqCQkJCU1HTVQpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX0ZST01fQ1BVIC0KKgkJCQlVc2VkIG9uIERTQSBGcm9tX0NQVSBmcmFtZXMuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZQoqCQkJRlRZUEVfRFNBX0NST1NTX0NISVBfRkMgLQoqCQkJCVVzZWQgb24gRFNBIENyb3NzIENoaXAgRmxvdyBDb250cm9sIGZyYW1lcyAoVG9fU25pZmZlciBGbG93CioJCQkJQ29udHJvbCkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9FR1JFU1NfTU9OIC0KKgkJCQlVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEVncmVzcyBNb25pdG9yIGZyYW1lcyAoVG9fU25pZmZlciBUeCkuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9DUk9TU19DSElQX0lOR1JFU1NfTU9OIC0KKgkJCQlVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEluZ3Jlc3MgTW9uaXRvciBmcmFtZXMgKFRvX1NuaWZmZXIgUngpLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9QT1JUX0VUWVBFX01BVENIIC0KKgkJCQlVc2VkIG9uIG5vcm1hbCBuZXR3b3JrIHBvcnRzIChzZWUgZ3BydFNldEZyYW1lTW9kZSBBUEkpCioJCQkJb24gZnJhbWVzIHdob3NlIEV0aGVydHlwZSBtYXRjaGVzIHRoZSBwb3J0J3MgUG9ydEVUeXBlIHJlZ2lzdGVyLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9CQ0FTVF9OT05fRFNBX0NPTlRST0wgLQoqCQkJCVVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYSBCcm9hZGNhc3QKKgkJCQlkZXN0aW5hdGlvbiBhZGRyZXNzLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9QUFBvRV9OT05fRFNBX0NPTlRST0wgLQoqCQkJCVVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYW4gRXRoZXIgVHlwZSAweDg4NjMKKgkJCQkoaS5lLiwgUFBQb0UgZnJhbWVzKS4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfSVBfTk9OX0RTQV9DT05UUk9MIC0KKgkJCQlVc2VkIG9uIE5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBjb250YWluIGFuIElQdjQgb3IgSVB2NiBFdGhlcgoqCQkJCVR5cGUuIE5vdCB1c2VkIG9uIERTQSBDb250cm9sIGZyYW1lcy4KKgoqIElOUFVUUzoKKiAgICAgICBmVHlwZSAtIGZyYW1lIHR5cGUgKEdUX1BSSV9PVkVSUklERV9GVFlQRSkKKiAgICAgICBlbnRyeSAtIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlIFRhYmxlIGVudHJ5IChHVF9GUFJJX1RCTF9FTlRSWSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNICAgICAtIG9uIHVua25vd24gZnJhbWUgdHlwZQoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRGUHJpT3ZlcnJpZGVUYWJsZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1BSSV9PVkVSUklERV9GVFlQRQlmVHlwZSwKCUlOICBHVF9GUFJJX1RCTF9FTlRSWQkqZW50cnkKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRGUHJpT3ZlcnJpZGVUYWJsZQoqCiogREVTQ1JJUFRJT046CiogCQlGcmFtZSBQcmlvcml0eSBPdmVycmlkZS4KKgkJV2hlbiBhIGZyYW1lIGVudGVycyBhIHBvcnQsIGl0cyB0eXBlIGlzIGRldGVybWluZWQgYW5kIHRoZSB0eXBlIGlzIHVzZWQgCioJCXRvIGFjY2VzcyB0aGUgRnJhbWUgUHJpb3JpdHkgVGFibGUuIElmIHRoZSB0eXBlJ3MgZlByaUVuIChpbiBHVF9GUFJJX1RCTF9FTlRSWQoqCQlzdHJ1Y3R1cmUpIGlzIGVuYWJsZWQsIHRoZW4gdGhlIGZyYW1lJ3MgRnJhbWUgUHJpb3JpdHkgd2lsbCBiZSBvdmVycmlkZGVuCioJCXdpdGggdGhlIHZhbHVlIHdyaXR0ZW4gaW4gZlByaW9yaXR5IChpbiBHVF9GUFJJX1RCTF9FTlRSWSBzdHJ1Y3R1cmUpLgoqCQlGcmFtZSBUeXBlcyBzdXBwb3J0ZWQgYXJlOgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9CUERVIC0KKgkJCQlVc2VkIG9uIG11bHRpY2FzdCBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDAgKEJQRFUvTUdNVCkuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9UT19DUFVfRjJSIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MSAoRnJhbWUgdG8gUmVnaXN0ZXIKKgkJCQlSZXBseSkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX0lHTVAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgyIChJR01QL01MRCBUcmFwKQoqCQkJCWFuZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIElHTVAgb3IgTUxEIHRyYXBwZWQKKgkJCUZUWVBFX0RTQV9UT19DUFVfVFJBUCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDMgKFBvbGljeSBUcmFwKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIFBvbGljeSBUcmFwcGVkCioJCQlGVFlQRV9EU0FfVE9fQ1BVX0FSUCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDQgKEFSUCBNaXJyb3IpIGFuZAoqCQkJCW9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgQVJQIE1pcnJvcmVkIChzZWUgZ3BydFNldEFSUHRvQ1BVIEFQSSkuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX01JUlJPUiAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDUgKFBvbGljeSBNaXJyb3IpIGFuZAoqCQkJCW9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgUG9saWN5IE1pcnJvcmVkIChzZWUgZ3BydFNldFBvbGljeSBBUEkpLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9SRVNFUlZFRCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDYgKFJlc2VydmVkKS4gTm90CioJCQkJdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9VQ0FTVF9NR01UIC0KKgkJCQlVc2VkIG9uIHVuaWNhc3QgRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgwICh1bmljYXN0CioJCQkJTUdNVCkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfRlJPTV9DUFUgLQoqCQkJCVVzZWQgb24gRFNBIEZyb21fQ1BVIGZyYW1lcy4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lCioJCQlGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9GQyAtCioJCQkJVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBGbG93IENvbnRyb2wgZnJhbWVzIChUb19TbmlmZmVyIEZsb3cKKgkJCQlDb250cm9sKS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9DUk9TU19DSElQX0VHUkVTU19NT04gLQoqCQkJCVVzZWQgb24gRFNBIENyb3NzIENoaXAgRWdyZXNzIE1vbml0b3IgZnJhbWVzIChUb19TbmlmZmVyIFR4KS4KKgkJCQlOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX0NST1NTX0NISVBfSU5HUkVTU19NT04gLQoqCQkJCVVzZWQgb24gRFNBIENyb3NzIENoaXAgSW5ncmVzcyBNb25pdG9yIGZyYW1lcyAoVG9fU25pZmZlciBSeCkuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX1BPUlRfRVRZUEVfTUFUQ0ggLQoqCQkJCVVzZWQgb24gbm9ybWFsIG5ldHdvcmsgcG9ydHMgKHNlZSBncHJ0U2V0RnJhbWVNb2RlIEFQSSkKKgkJCQlvbiBmcmFtZXMgd2hvc2UgRXRoZXJ0eXBlIG1hdGNoZXMgdGhlIHBvcnQncyBQb3J0RVR5cGUgcmVnaXN0ZXIuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0JDQVNUX05PTl9EU0FfQ09OVFJPTCAtCioJCQkJVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhIEJyb2FkY2FzdAoqCQkJCWRlc3RpbmF0aW9uIGFkZHJlc3MuIE5vdCB1c2VkIG9uIERTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX1BQUG9FX05PTl9EU0FfQ09OVFJPTCAtCioJCQkJVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhbiBFdGhlciBUeXBlIDB4ODg2MwoqCQkJCShpLmUuLCBQUFBvRSBmcmFtZXMpLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9JUF9OT05fRFNBX0NPTlRST0wgLQoqCQkJCVVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYW4gSVB2NCBvciBJUHY2IEV0aGVyCioJCQkJVHlwZS4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgIGZUeXBlIC0gZnJhbWUgdHlwZSAoR1RfUFJJX09WRVJSSURFX0ZUWVBFKQoqCiogT1VUUFVUUzoKKiAgICAgICBlbnRyeSAtIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlIFRhYmxlIGVudHJ5IChHVF9GUFJJX1RCTF9FTlRSWSkKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgIC0gb24gdW5rbm93biBmcmFtZSB0eXBlCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0RlByaU92ZXJyaWRlVGFibGUKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9QUklfT1ZFUlJJREVfRlRZUEUJZlR5cGUsCglPVVQgR1RfRlBSSV9UQkxfRU5UUlkJKmVudHJ5Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UVByaUF2Yk92ZXJyaWRlVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqIAkJUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUgZm9yIEFWQiBlbmFibGVkIHBvcnRzIG9yIEF2Yk92ZXJyaWRlIGVuYWJsZWQgcG9ydHMuCioJCVdoZW4gYSBmcmFtZSBlbnRlcnMgYSBBVkIgcG9ydCwgaXRzIHR5cGUgaXMgZGV0ZXJtaW5lZCBhbmQgdGhlIHR5cGUgaXMgdXNlZCAKKgkJdG8gYWNjZXNzIHRoZSBRdWV1ZSBQcmlvcml0eSBUYWJsZS4gSWYgdGhlIHR5cGUncyBxUHJpRW4gKGluIEdUX1FQUklfVEJMX0VOVFJZCioJCXN0cnVjdHVyZSkgaXMgZW5hYmxlZCwgdGhlbiB0aGUgZnJhbWUncyBRdWV1ZSBQcmlvcml0eSB3aWxsIGJlIG92ZXJyaWRkZW4KKgkJd2l0aCB0aGUgdmFsdWUgd3JpdHRlbiBpbiBxUHJpb3JpdHkgKGluIEdUX1FQUklfVEJMX0VOVFJZIHN0cnVjdHVyZSkuCioJCUZyYW1lIFR5cGVzIHN1cHBvcnRlZCBhcmU6CioJCQlGVFlQRV9EU0FfVE9fQ1BVX0JQRFUgLQoqCQkJCVVzZWQgb24gbXVsdGljYXN0IERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MCAoQlBEVS9NR01UKS4KKgkJCQlOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9GMlIgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgxIChGcmFtZSB0byBSZWdpc3RlcgoqCQkJCVJlcGx5KS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9UT19DUFVfSUdNUCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDIgKElHTVAvTUxEIFRyYXApCioJCQkJYW5kIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgSUdNUCBvciBNTEQgdHJhcHBlZAoqCQkJRlRZUEVfRFNBX1RPX0NQVV9UUkFQIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MyAoUG9saWN5IFRyYXApIGFuZAoqCQkJCW9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgUG9saWN5IFRyYXBwZWQKKgkJCUZUWVBFX0RTQV9UT19DUFVfQVJQIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NCAoQVJQIE1pcnJvcikgYW5kCioJCQkJb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBBUlAgTWlycm9yZWQgKHNlZSBncHJ0U2V0QVJQdG9DUFUgQVBJKS4KKgkJCUZUWVBFX0RTQV9UT19DUFVfTUlSUk9SIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NSAoUG9saWN5IE1pcnJvcikgYW5kCioJCQkJb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBQb2xpY3kgTWlycm9yZWQgKHNlZSBncHJ0U2V0UG9saWN5IEFQSSkuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX1JFU0VSVkVEIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NiAoUmVzZXJ2ZWQpLiBOb3QKKgkJCQl1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX1VDQVNUX01HTVQgLQoqCQkJCVVzZWQgb24gdW5pY2FzdCBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDAgKHVuaWNhc3QKKgkJCQlNR01UKS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9GUk9NX0NQVSAtCioJCQkJVXNlZCBvbiBEU0EgRnJvbV9DUFUgZnJhbWVzLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWUKKgkJCUZUWVBFX0RTQV9DUk9TU19DSElQX0ZDIC0KKgkJCQlVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEZsb3cgQ29udHJvbCBmcmFtZXMgKFRvX1NuaWZmZXIgRmxvdwoqCQkJCUNvbnRyb2wpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX0NST1NTX0NISVBfRUdSRVNTX01PTiAtCioJCQkJVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBFZ3Jlc3MgTW9uaXRvciBmcmFtZXMgKFRvX1NuaWZmZXIgVHgpLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9JTkdSRVNTX01PTiAtCioJCQkJVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBJbmdyZXNzIE1vbml0b3IgZnJhbWVzIChUb19TbmlmZmVyIFJ4KS4KKgkJCQlOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfUE9SVF9FVFlQRV9NQVRDSCAtCioJCQkJVXNlZCBvbiBub3JtYWwgbmV0d29yayBwb3J0cyAoc2VlIGdwcnRTZXRGcmFtZU1vZGUgQVBJKQoqCQkJCW9uIGZyYW1lcyB3aG9zZSBFdGhlcnR5cGUgbWF0Y2hlcyB0aGUgcG9ydCdzIFBvcnRFVHlwZSByZWdpc3Rlci4KKgkJCQlOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfQkNBU1RfTk9OX0RTQV9DT05UUk9MIC0KKgkJCQlVc2VkIG9uIE5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBjb250YWluIGEgQnJvYWRjYXN0CioJCQkJZGVzdGluYXRpb24gYWRkcmVzcy4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfUFBQb0VfTk9OX0RTQV9DT05UUk9MIC0KKgkJCQlVc2VkIG9uIE5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBjb250YWluIGFuIEV0aGVyIFR5cGUgMHg4ODYzCioJCQkJKGkuZS4sIFBQUG9FIGZyYW1lcykuIE5vdCB1c2VkIG9uIERTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0lQX05PTl9EU0FfQ09OVFJPTCAtCioJCQkJVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhbiBJUHY0IG9yIElQdjYgRXRoZXIKKgkJCQlUeXBlLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCioKKiBJTlBVVFM6CiogICAgICAgZlR5cGUgLSBmcmFtZSB0eXBlIChHVF9QUklfT1ZFUlJJREVfRlRZUEUpCiogICAgICAgZW50cnkgLSBRIFByaW9yaXR5IE92ZXJyaWRlIFRhYmxlIGVudHJ5IChHVF9RUFJJX1RCTF9FTlRSWSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gICAgIC0gb24gdW5rbm93biBmcmFtZSB0eXBlCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFFQcmlBdmJPdmVycmlkZVRhYmxlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfUFJJX09WRVJSSURFX0ZUWVBFCWZUeXBlLAoJSU4gIEdUX1FQUklfVEJMX0VOVFJZCSplbnRyeQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFFQcmlBdmJPdmVycmlkZVRhYmxlCioKKiBERVNDUklQVElPTjoKKiAJCVF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlIGZvciBBVkIgZW5hYmxlZCBwb3J0cyBvciBBdmJPdmVycmlkZSBlbmFibGVkIHBvcnRzLgoqCQlXaGVuIGEgZnJhbWUgZW50ZXJzIGEgQVZCIHBvcnQsIGl0cyB0eXBlIGlzIGRldGVybWluZWQgYW5kIHRoZSB0eXBlIGlzIHVzZWQgCioJCXRvIGFjY2VzcyB0aGUgUXVldWUgUHJpb3JpdHkgVGFibGUuIElmIHRoZSB0eXBlJ3MgcVByaUVuIChpbiBHVF9RUFJJX1RCTF9FTlRSWQoqCQlzdHJ1Y3R1cmUpIGlzIGVuYWJsZWQsIHRoZW4gdGhlIGZyYW1lJ3MgUXVldWUgUHJpb3JpdHkgd2lsbCBiZSBvdmVycmlkZGVuCioJCXdpdGggdGhlIHZhbHVlIHdyaXR0ZW4gaW4gcVByaW9yaXR5IChpbiBHVF9RUFJJX1RCTF9FTlRSWSBzdHJ1Y3R1cmUpLgoqCQlGcmFtZSBUeXBlcyBzdXBwb3J0ZWQgYXJlOgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9CUERVIC0KKgkJCQlVc2VkIG9uIG11bHRpY2FzdCBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDAgKEJQRFUvTUdNVCkuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9UT19DUFVfRjJSIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MSAoRnJhbWUgdG8gUmVnaXN0ZXIKKgkJCQlSZXBseSkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX0lHTVAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgyIChJR01QL01MRCBUcmFwKQoqCQkJCWFuZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIElHTVAgb3IgTUxEIHRyYXBwZWQKKgkJCUZUWVBFX0RTQV9UT19DUFVfVFJBUCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDMgKFBvbGljeSBUcmFwKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIFBvbGljeSBUcmFwcGVkCioJCQlGVFlQRV9EU0FfVE9fQ1BVX0FSUCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDQgKEFSUCBNaXJyb3IpIGFuZAoqCQkJCW9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgQVJQIE1pcnJvcmVkIChzZWUgZ3BydFNldEFSUHRvQ1BVIEFQSSkuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX01JUlJPUiAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDUgKFBvbGljeSBNaXJyb3IpIGFuZAoqCQkJCW9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgUG9saWN5IE1pcnJvcmVkIChzZWUgZ3BydFNldFBvbGljeSBBUEkpLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9SRVNFUlZFRCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDYgKFJlc2VydmVkKS4gTm90CioJCQkJdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9VQ0FTVF9NR01UIC0KKgkJCQlVc2VkIG9uIHVuaWNhc3QgRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgwICh1bmljYXN0CioJCQkJTUdNVCkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfRlJPTV9DUFUgLQoqCQkJCVVzZWQgb24gRFNBIEZyb21fQ1BVIGZyYW1lcy4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lCioJCQlGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9GQyAtCioJCQkJVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBGbG93IENvbnRyb2wgZnJhbWVzIChUb19TbmlmZmVyIEZsb3cKKgkJCQlDb250cm9sKS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9DUk9TU19DSElQX0VHUkVTU19NT04gLQoqCQkJCVVzZWQgb24gRFNBIENyb3NzIENoaXAgRWdyZXNzIE1vbml0b3IgZnJhbWVzIChUb19TbmlmZmVyIFR4KS4KKgkJCQlOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX0NST1NTX0NISVBfSU5HUkVTU19NT04gLQoqCQkJCVVzZWQgb24gRFNBIENyb3NzIENoaXAgSW5ncmVzcyBNb25pdG9yIGZyYW1lcyAoVG9fU25pZmZlciBSeCkuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX1BPUlRfRVRZUEVfTUFUQ0ggLQoqCQkJCVVzZWQgb24gbm9ybWFsIG5ldHdvcmsgcG9ydHMgKHNlZSBncHJ0U2V0RnJhbWVNb2RlIEFQSSkKKgkJCQlvbiBmcmFtZXMgd2hvc2UgRXRoZXJ0eXBlIG1hdGNoZXMgdGhlIHBvcnQncyBQb3J0RVR5cGUgcmVnaXN0ZXIuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0JDQVNUX05PTl9EU0FfQ09OVFJPTCAtCioJCQkJVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhIEJyb2FkY2FzdAoqCQkJCWRlc3RpbmF0aW9uIGFkZHJlc3MuIE5vdCB1c2VkIG9uIERTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX1BQUG9FX05PTl9EU0FfQ09OVFJPTCAtCioJCQkJVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhbiBFdGhlciBUeXBlIDB4ODg2MwoqCQkJCShpLmUuLCBQUFBvRSBmcmFtZXMpLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9JUF9OT05fRFNBX0NPTlRST0wgLQoqCQkJCVVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYW4gSVB2NCBvciBJUHY2IEV0aGVyCioJCQkJVHlwZS4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgIGZUeXBlIC0gZnJhbWUgdHlwZSAoR1RfUFJJX09WRVJSSURFX0ZUWVBFKQoqCiogT1VUUFVUUzoKKiAgICAgICBlbnRyeSAtIFEgUHJpb3JpdHkgT3ZlcnJpZGUgVGFibGUgZW50cnkgKEdUX1FQUklfVEJMX0VOVFJZKQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAgICAgLSBvbiB1bmtub3duIGZyYW1lIHR5cGUKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UVByaUF2Yk92ZXJyaWRlVGFibGUKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9QUklfT1ZFUlJJREVfRlRZUEUJZlR5cGUsCglPVVQgR1RfUVBSSV9UQkxfRU5UUlkJKmVudHJ5Cik7CgoKLyogZ3RQb3J0Q3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXQyMDBCYXNlCioKKiBERVNDUklQVElPTjoKKgkJMjAwIEJhc2UgbW9kZS4gVGhpcyBiaXQgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBwb3J0J3MgUHhfR1RYQ0xLCioJCWZyZXF1ZW5jeSB0byA1ME1IeiB0byBzdXBwb3J0IDIwMCBCQVNFIG1vZGUgYXMgZm9sbG93czoKKgkJMCA9IDI1TUh6IFB4X0dUWENMSwoqCQkxID0gNTBNSHogUHhfR1RYQ0xLCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSAwIGZvciAxMDBNYnBzLCAxIGZvciAyMDBNYnBzCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCUNfTW9kZSBzaG91bGQgYmUgc2V0IHRvIDB4MiBpbiBvcmRlciBmb3IgdGhpcyBBUEkgdG8gd29yawoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0MjAwQmFzZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfVTMyICAJKm1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXQyMDBCYXNlCioKKiBERVNDUklQVElPTjoKKgkJMjAwIEJhc2UgbW9kZS4gVGhpcyBiaXQgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBwb3J0J3MgUHhfR1RYQ0xLCioJCWZyZXF1ZW5jeSB0byA1ME1IeiB0byBzdXBwb3J0IDIwMCBCQVNFIG1vZGUgYXMgZm9sbG93czoKKgkJCTAgPSAyNU1IeiBQeF9HVFhDTEsKKgkJCTEgPSA1ME1IeiBQeF9HVFhDTEsKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gMCBmb3IgMTAwTWJwcywgMSBmb3IgMjAwTWJwcwoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlDX01vZGUgc2hvdWxkIGJlIHNldCB0byAweDIgaW4gb3JkZXIgZm9yIHRoaXMgQVBJIHRvIHdvcmsKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldDIwMEJhc2UKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJSU4gIEdUX1UzMiAgCW1vZGUKKTsKCgovKiBndFBJUkwyLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmwyV3JpdGVUU01SZXNvdXJjZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSB3cml0ZXMgcmF0ZSByZXNvdXJjZSBidWNrZXQgcGFyYW1ldGVycyBpbiBUaW1lIFNsb3QgTWV0ZXJpbmcKKgkJbW9kZSB0byB0aGUgZ2l2ZW4gcmVzb3VyY2Ugb2YgdGhlIHBvcnQuCioKKiBJTlBVVFM6CioJCXBvcnQgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlci4KKgkJaXJsUmVzICAgLSBidWNrZXQgdG8gYmUgdXNlZCAoMCB+IDEpLgoqCQlwaXJsRGF0YSAtIFBJUkwgVFNNIHJlc291cmNlIHBhcmFtZXRlcnMuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlPbmx5IFJlc291cmNlIDAgYW5kIDEgY2FuIGJlIHN1cHBvcnRlZCBmb3IgVFNNIE1vZGUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwaXJsMldyaXRlVFNNUmVzb3VyY2UKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX1UzMgkJaXJsUmVzLAoJSU4gIEdUX1BJUkwyX1RTTV9EQVRBCSpwaXJsRGF0YQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmwyUmVhZFRTTVJlc291cmNlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBJUkwgUGFyYW1ldGVyLgoqCQlSZXR1cm5lZCBpbmdyZXNzUmF0ZSB3b3VsZCBiZSByb3VnaCBudW1iZXIuIEluc3RlYWQsIGN1c3RvbVNldHVwIHdpbGwKKgkJaGF2ZSB0aGUgZXhhY3QgY29uZmlndXJlZCB2YWx1ZS4KKgoqIElOUFVUUzoKKgkJcG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlpcmxSZXMgICAtIGJ1Y2tldCB0byBiZSB1c2VkICgwIH4gMSkuCioKKiBPVVRQVVRTOgoqCQlwaXJsRGF0YSAtIFBJUkwgcmVzb3VyY2UgcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJT25seSBSZXNvdXJjZSAwIGFuZCAxIGNhbiBiZSBzdXBwb3J0ZWQgZm9yIFRTTSBNb2RlLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybDJSZWFkVFNNUmVzb3VyY2UKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX1UzMgkJaXJsUmVzLAoJT1VUIEdUX1BJUkwyX1RTTV9EQVRBCSpwaXJsRGF0YQopOwoKCi8qIGd0UFRQLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaVNldEV2ZW50Q29uZmlnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBUQUkgRXZlbnQgQ2FwdHVyZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBJTlBVVFM6CioJCWV2ZW50RGF0YSAgLSBUQUkgRXZlbnQgQ2FwdHVyZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpU2V0RXZlbnRDb25maWcKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9UQUlfRVZFTlRfQ09ORklHCSpldmVudERhdGEKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlHZXRFdmVudENvbmZpZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgVEFJIEV2ZW50IENhcHR1cmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqCQlldmVudERhdGEgIC0gVEFJIEV2ZW50IENhcHR1cmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaUdldEV2ZW50Q29uZmlnCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfVEFJX0VWRU5UX0NPTkZJRwkqZXZlbnREYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlHZXRFdmVudFN0YXR1cwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgVEFJIEV2ZW50IENhcHR1cmUgc3RhdHVzLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqCQlldmVudERhdGEgIC0gVEFJIEV2ZW50IENhcHR1cmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaUdldEV2ZW50U3RhdHVzCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfVEFJX0VWRU5UX1NUQVRVUwkqc3RhdHVzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlHZXRFdmVudEludAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgVEFJIEV2ZW50IENhcHR1cmUgSW50ZXJydXB0IHN0YXR1cy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKgkJaW50U3RhdHVzIAktIGludGVycnVwdCBzdGF0dXMgZm9yIFRBSSBFdmVudCBjYXB0dXJlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpR2V0RXZlbnRJbnQKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9CT09MCQkqaW50U3RhdHVzCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpR2V0VHJpZ0ludAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgVEFJIFRyaWdnZXIgSW50ZXJydXB0IHN0YXR1cy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKgkJaW50U3RhdHVzIAktIGludGVycnVwdCBzdGF0dXMgZm9yIFRBSSBUcmlnZ2VyCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpR2V0VHJpZ0ludAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX0JPT0wJCSppbnRTdGF0dXMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaVNldFRyaWdDb25maWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIFRBSSBUcmlnZ2VyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIElOUFVUUzoKKgkJdHJpZ0VuICAgIC0gZW5hYmxlL2Rpc2FibGUgVEFJIFRyaWdnZXIuCioJCXRyaWdEYXRhICAtIFRBSSBUcmlnZ2VyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAodmFsaWQgb25seSBpZiB0cmlnRW4gaXMgR1RfVFJVRSkuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpU2V0VHJpZ0NvbmZpZwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0JPT0wgCXRyaWdFbiwKCUlOICBHVF9UQUlfVFJJR0dFUl9DT05GSUcJKnRyaWdEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlHZXRUcmlnQ29uZmlnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBUQUkgVHJpZ2dlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCXRyaWdFbiAgICAtIGVuYWJsZS9kaXNhYmxlIFRBSSBUcmlnZ2VyLgoqCQl0cmlnRGF0YSAgLSBUQUkgVHJpZ2dlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKHZhbGlkIG9ubHkgaWYgdHJpZ0VuIGlzIEdUX1RSVUUpLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaUdldFRyaWdDb25maWcKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9CT09MIAkqdHJpZ0VuLAoJT1VUIEdUX1RBSV9UUklHR0VSX0NPTkZJRwkqdHJpZ0RhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaUdldFRTQ2xrUGVyCioKKiBERVNDUklQVElPTjoKKiAJCVRpbWUgU3RhbXBpbmcgQ2xvY2sgUGVyaW9kIGluIHBpY28gc2Vjb25kcy4KKgkJVGhpcyByb3V0aW5lIHNwZWNpZmllcyB0aGUgY2xvY2sgcGVyaW9kIGZvciB0aGUgdGltZSBzdGFtcGluZyBjbG9jayBzdXBwbGllZCAKKgkJdG8gdGhlIFBUUCBoYXJkd2FyZSBsb2dpYy4KKgkJVGhpcyBpcyB0aGUgY2xvY2sgdGhhdCBpcyB1c2VkIGJ5IHRoZSBoYXJkd2FyZSBsb2dpYyB0byB1cGRhdGUgdGhlIFBUUCAKKgkJR2xvYmFsIFRpbWUgQ291bnRlci4KKgoqIElOUFVUUzoKKiAJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQljbGsJCS0gdGltZSBzdGFtcGluZyBjbG9jayBwZXJpb2QKKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaUdldFRTQ2xrUGVyCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfVTMyCQkqY2xrCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpU2V0VFNDbGtQZXIKKgoqIERFU0NSSVBUSU9OOgoqIAkJVGltZSBTdGFtcGluZyBDbG9jayBQZXJpb2QgaW4gcGljbyBzZWNvbmRzLgoqCQlUaGlzIHJvdXRpbmUgc3BlY2lmaWVzIHRoZSBjbG9jayBwZXJpb2QgZm9yIHRoZSB0aW1lIHN0YW1waW5nIGNsb2NrIHN1cHBsaWVkIAoqCQl0byB0aGUgUFRQIGhhcmR3YXJlIGxvZ2ljLgoqCQlUaGlzIGlzIHRoZSBjbG9jayB0aGF0IGlzIHVzZWQgYnkgdGhlIGhhcmR3YXJlIGxvZ2ljIHRvIHVwZGF0ZSB0aGUgUFRQIAoqCQlHbG9iYWwgVGltZSBDb3VudGVyLgoqCiogSU5QVVRTOgoqCQljbGsJCS0gdGltZSBzdGFtcGluZyBjbG9jayBwZXJpb2QKKgoqIE9VVFBVVFM6CiogCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpU2V0VFNDbGtQZXIKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9VMzIJCWNsawopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpU2V0TXVsdGlQVFBTeW5jCioKKiBERVNDUklQVElPTjoKKiAJCVRoaXMgcm91dGluZSBzZXRzIE11bHRpcGxlIFBUUCBkZXZpY2Ugc3luYyBtb2RlIGFuZCBzeW5jIHRpbWUgKFRyaWdHZW5BbXQpLgoqCQlXaGVuIGVuYWJsZWQsIHRoZSBoYXJkd2FyZSBsb2dpYyBkZXRlY3RzIGEgbG93IHRvIGhpZ2ggdHJhbnNpdGlvbiBvbiB0aGUgCioJCUV2ZW50UmVxdWVzdChHUElPKSBhbmQgdHJhbnNmZXJzIHRoZSBzeW5jIHRpbWUgaW50byB0aGUgUFRQIEdsb2JhbCBUaW1lCioJCXJlZ2lzdGVyLiBUaGUgRXZlbnRDYXBUaW1lIGlzIGFsc28gdXBkYXRlZCBhdCB0aGF0IGluc3RhbnQuCioKKiBJTlBVVFM6CioJCW11bHRpRW4JCS0gZW5hYmxlL2Rpc2FibGUgTXVsdGlwbGUgUFRQIGRldmljZSBzeW5jIG1vZGUKKgkJc3luY1RpbWUJLSBzeW5jIHRpbWUgKHZhbGlkIG9ubHkgaWYgbXVsdGlFbiBpcyBHVF9UUlVFKQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCVdoZW4gZW5hYmxlZCwgZ3RhaVNldFRyaWdDb25maWcsIGd0YWlTZXRFdmVudENvbmZpZywgZ3RhaVNldFRpbWVJbmMsCioJCWFuZCBndGFpU2V0VGltZURlYyBBUElzIGFyZSBub3Qgb3BlcmF0aW9uYWwuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0YWlTZXRNdWx0aVBUUFN5bmMKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9CT09MIAltdWx0aUVuLAoJSU4gIEdUXzMyCQlzeW5jVGltZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpR2V0TXVsdGlQVFBTeW5jCioKKiBERVNDUklQVElPTjoKKiAJCVRoaXMgcm91dGluZSBnZXRzIE11bHRpcGxlIFBUUCBkZXZpY2Ugc3luYyBtb2RlIGFuZCBzeW5jIHRpbWUgKFRyaWdHZW5BbXQpLgoqCQlXaGVuIGVuYWJsZWQsIHRoZSBoYXJkd2FyZSBsb2dpYyBkZXRlY3RzIGEgbG93IHRvIGhpZ2ggdHJhbnNpdGlvbiBvbiB0aGUgCioJCUV2ZW50UmVxdWVzdChHUElPKSBhbmQgdHJhbnNmZXJzIHRoZSBzeW5jIHRpbWUgaW50byB0aGUgUFRQIEdsb2JhbCBUaW1lCioJCXJlZ2lzdGVyLiBUaGUgRXZlbnRDYXBUaW1lIGlzIGFsc28gdXBkYXRlZCBhdCB0aGF0IGluc3RhbnQuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQltdWx0aUVuCQktIGVuYWJsZS9kaXNhYmxlIE11bHRpcGxlIFBUUCBkZXZpY2Ugc3luYyBtb2RlCioJCXN5bmNUaW1lCS0gc3luYyB0aW1lICh2YWxpZCBvbmx5IGlmIG11bHRpRW4gaXMgR1RfVFJVRSkKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCVdoZW4gZW5hYmxlZCwgZ3RhaVNldFRyaWdDb25maWcsIGd0YWlTZXRFdmVudENvbmZpZywgZ3RhaVNldFRpbWVJbmMsCioJCWFuZCBndGFpU2V0VGltZURlYyBBUElzIGFyZSBub3Qgb3BlcmF0aW9uYWwuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0YWlHZXRNdWx0aVBUUFN5bmMKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9CT09MIAkqbXVsdGlFbiwKCU9VVCBHVF8zMgkJKnN5bmNUaW1lCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlHZXRUaW1lSW5jRGVjCioKKiBERVNDUklQVElPTjoKKiAJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgVGltZSBpbmNyZW1lbnQvZGVjcmVtZW50IHNldHVwLgoqCQlUaGlzIGFtb3VudCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB1bml0cyBvZiBQVFAgR2xvYmFsIFRpbWUgdGhhdCBuZWVkIHRvIGJlIAoqCQlpbmNyZW1lbnRlZCBvciBkZWNyZW1lbnRlZC4gVGhpcyBpcyB1c2VkIGZvciBhZGp1c3RpbmcgdGhlIFBUUCBHbG9iYWwgVGltZSAKKgkJY291bnRlciB2YWx1ZSBieSBhIGNlcnRhaW4gYW1vdW50LgoqCiogSU5QVVRTOgoqIAkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuCQktIEdUX1RSVUUgaWYgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioJCWluYwkJLSBHVF9UUlVFIGlmIGluY3JlbWVudCwgR1RfRkFMU0UgaWYgZGVjcmVtZW50CioJCWFtb3VudAktIGluY3JlbWVudC9kZWNyZW1lbnQgYW1vdW50CioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0YWlHZXRUaW1lSW5jRGVjCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfQk9PTAkJKmVuLAoJT1VUIEdUX0JPT0wJCSppbmMsCglPVVQgR1RfVTMyCQkqYW1vdW50Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlTZXRUaW1lSW5jCioKKiBERVNDUklQVElPTjoKKiAJCVRoaXMgcm91dGluZSBlbmFibGVzIHRpbWUgaW5jcmVtZW50IGJ5IHRoZSBzcGVjaWZlZCB0aW1lIGluY3JlbWVudCBhbW91bnQuCioJCVRoZSBhbW91bnQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdW5pdHMgb2YgUFRQIEdsb2JhbCBUaW1lIHRoYXQgbmVlZCB0byBiZSAKKgkJaW5jcmVtZW50ZWQuIFRoaXMgaXMgdXNlZCBmb3IgYWRqdXN0aW5nIHRoZSBQVFAgR2xvYmFsIFRpbWUgY291bnRlciB2YWx1ZSBieQoqCQlhIGNlcnRhaW4gYW1vdW50LgoqCQlJbmNyZW1lbnQgb2NjdXJzIGp1c3Qgb25jZS4KKgoqIElOUFVUUzoKKgkJYW1vdW50CS0gdGltZSBpbmNyZW1lbnQgYW1vdW50ICgwIH4gMHhGRikKKgoqIE9VVFBVVFM6CiogCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpU2V0VGltZUluYwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1UzMgkJYW1vdW50Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlTZXRUaW1lRGVjCioKKiBERVNDUklQVElPTjoKKiAJCVRoaXMgcm91dGluZSBlbmFibGVzIHRpbWUgZGVjcmVtZW50IGJ5IHRoZSBzcGVjaWZlZCB0aW1lIGRlY3JlbWVudCBhbW91bnQuCioJCVRoZSBhbW91bnQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdW5pdHMgb2YgUFRQIEdsb2JhbCBUaW1lIHRoYXQgbmVlZCB0byBiZSAKKgkJZGVjcmVtZW50ZWQuIFRoaXMgaXMgdXNlZCBmb3IgYWRqdXN0aW5nIHRoZSBQVFAgR2xvYmFsIFRpbWUgY291bnRlciB2YWx1ZSBieQoqCQlhIGNlcnRhaW4gYW1vdW50LgoqCQlEZWNyZW1lbnQgb2NjdXJzIGp1c3Qgb25jZS4KKgoqIElOUFVUUzoKKgkJYW1vdW50CS0gdGltZSBkZWNyZW1lbnQgYW1vdW50ICgwIH4gMHg3RkYpCioKKiBPVVRQVVRTOgoqIAkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaVNldFRpbWVEZWMKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9VMzIJCWFtb3VudAopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YkdldFByaW9yaXR5CioKKiBERVNDUklQVElPTjoKKgkJUHJpb3JpdHkgb3ZlcndyaXRlLgoqCQlTdXBwb3J0ZWQgcHJpb3JpdHkgdHlwZSBpcyBkZWZpbmVkIGFzIEdUX0FWQl9QUklfVFlQRS4KKgkJUHJpb3JpdHkgaXMgZWl0aGVyIDMgYml0cyBvciAyIGJpdHMgZGVwZW5kaW5nIG9uIHByaW9yaXR5IHR5cGUuCioJCQlHVF9BVkJfSElfRlBSSQkJLSBwcmlvcml0eSBpcyAwIH4gNwoqCQkJR1RfQVZCX0hJX1FQUkkJCS0gcHJpb3JpdHkgaXMgMCB+IDMKKgkJCUdUX0FWQl9MT19GUFJJCQktIHByaW9yaXR5IGlzIDAgfiA3CioJCQlHVF9BVkJfTE9fUVBSSQkJLSBwcmlvcml0eSBpcyAwIH4gMwoqCQkJR1RfTEVHQUNZX0hJX0ZQUkkJLSBwcmlvcml0eSBpcyAwIH4gNwoqCQkJR1RfTEVHQUNZX0hJX1FQUkkJLSBwcmlvcml0eSBpcyAwIH4gMwoqCQkJR1RfTEVHQUNZX0xPX0ZQUkkJLSBwcmlvcml0eSBpcyAwIH4gNwoqCQkJR1RfTEVHQUNZX0xPX1FQUkkJLSBwcmlvcml0eSBpcyAwIH4gMwoqCiogSU5QVVRTOgoqIAkJcHJpVHlwZQktIEdUX0FWQl9QUklfVFlQRQoqCiogT1VUUFVUUzoKKgkJcHJpCS0gcHJpb3JpdHkKKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YkdldFByaW9yaXR5CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfQVZCX1BSSV9UWVBFCQlwcmlUeXBlLAoJT1VUIEdUX1UzMgkJKnByaQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiU2V0UHJpb3JpdHkKKgoqIERFU0NSSVBUSU9OOgoqCQlQcmlvcml0eSBvdmVyd3JpdGUuCioJCVN1cHBvcnRlZCBwcmlvcml0eSB0eXBlIGlzIGRlZmluZWQgYXMgR1RfQVZCX1BSSV9UWVBFLgoqCQlQcmlvcml0eSBpcyBlaXRoZXIgMyBiaXRzIG9yIDIgYml0cyBkZXBlbmRpbmcgb24gcHJpb3JpdHkgdHlwZS4KKgkJCUdUX0FWQl9ISV9GUFJJCQktIHByaW9yaXR5IGlzIDAgfiA3CioJCQlHVF9BVkJfSElfUVBSSQkJLSBwcmlvcml0eSBpcyAwIH4gMwoqCQkJR1RfQVZCX0xPX0ZQUkkJCS0gcHJpb3JpdHkgaXMgMCB+IDcKKgkJCUdUX0FWQl9MT19RUFJJCQktIHByaW9yaXR5IGlzIDAgfiAzCioJCQlHVF9MRUdBQ1lfSElfRlBSSQktIHByaW9yaXR5IGlzIDAgfiA3CioJCQlHVF9MRUdBQ1lfSElfUVBSSQktIHByaW9yaXR5IGlzIDAgfiAzCioJCQlHVF9MRUdBQ1lfTE9fRlBSSQktIHByaW9yaXR5IGlzIDAgfiA3CioJCQlHVF9MRUdBQ1lfTE9fUVBSSQktIHByaW9yaXR5IGlzIDAgfiAzCioKKiBJTlBVVFM6CiogCQlwcmlUeXBlCS0gR1RfQVZCX1BSSV9UWVBFCioJCXByaQktIHByaW9yaXR5CioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiU2V0UHJpb3JpdHkKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9BVkJfUFJJX1RZUEUJCXByaVR5cGUsCglJTiAgR1RfVTMyCQlwcmkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YkdldEFWQkhpTGltaXQKKgoqIERFU0NSSVBUSU9OOgoqCQlBVkIgSGkgRnJhbWUgTGltaXQuCioJCVdoZW4gdGhlc2UgYml0cyBhcmUgemVybywgbm9ybWFsIGZyYW1lIHByb2Nlc3Npbmcgb2NjdXJzLiAKKgkJV2hlbiBpdCdzIG5vbi16ZXJvLCB0aGV5IGFyZSB1c2VkIHRvIGRlZmluZSB0aGUgbWF4aW11bSBmcmFtZSBzaXplIGFsbG93ZWQKKgkJZm9yIEFWQiBmcmFtZXMgdGhhdCBjYW4gYmUgcGxhY2VkIGludG8gdGhlIEdUX0FWQl9ISV9RUFJJIHF1ZXVlLiBGcmFtZXMKKgkJdGhhdCBhcmUgb3ZlciB0aGlzIHNpemUgbGltaXQgYXJlIGZpbHRlcmVkLiBUaGUgb25seSBleGNlcHRpb24gdG8gdGhpcyAKKgkJaXMgbm9uLUFWQiBmcmFtZXMgdGhhdCBnZXQgdGhlaXIgUVByaUF2YiBhc3NpZ25lZCBieSB0aGUgUHJpb3JpdHkgT3ZlcnJpZGUgCioJCVRhYmxlCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlsaW1pdAktIEhpIEZyYW1lIExpbWl0CioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJHZXRBVkJIaUxpbWl0CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfVTMyCQkqbGltaXQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YlNldEFWQkhpTGltaXQKKgoqIERFU0NSSVBUSU9OOgoqCQlBVkIgSGkgRnJhbWUgTGltaXQuCioJCVdoZW4gdGhlc2UgYml0cyBhcmUgemVybywgbm9ybWFsIGZyYW1lIHByb2Nlc3Npbmcgb2NjdXJzLiAKKgkJV2hlbiBpdCdzIG5vbi16ZXJvLCB0aGV5IGFyZSB1c2VkIHRvIGRlZmluZSB0aGUgbWF4aW11bSBmcmFtZSBzaXplIGFsbG93ZWQKKgkJZm9yIEFWQiBmcmFtZXMgdGhhdCBjYW4gYmUgcGxhY2VkIGludG8gdGhlIEdUX0FWQl9ISV9RUFJJIHF1ZXVlLiBGcmFtZXMKKgkJdGhhdCBhcmUgb3ZlciB0aGlzIHNpemUgbGltaXQgYXJlIGZpbHRlcmVkLiBUaGUgb25seSBleGNlcHRpb24gdG8gdGhpcyAKKgkJaXMgbm9uLUFWQiBmcmFtZXMgdGhhdCBnZXQgdGhlaXIgUVByaUF2YiBhc3NpZ25lZCBieSB0aGUgUHJpb3JpdHkgT3ZlcnJpZGUgCioJCVRhYmxlCioKKiBJTlBVVFM6CioJCWxpbWl0CS0gSGkgRnJhbWUgTGltaXQKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJTZXRBVkJIaUxpbWl0CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTMyCQlsaW1pdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiR2V0UHRwRXh0Q2xrCioKKiBERVNDUklQVElPTjoKKgkJUFRQIGV4dGVybmFsIGNsb2NrIHNlbGVjdC4KKgkJV2hlbiB0aGlzIGJpdCBpcyBjbGVhcmVkIHRvIGEgemVybywgdGhlIFBUUCBjb3JlIGdldHMgaXRzIGNsb2NrIGZyb20gCioJCWFuIGludGVybmFsIDEyNU1IeiBjbG9jayBiYXNlZCBvbiB0aGUgZGV2aWNlJ3MgWFRBTF9JTiBpbnB1dC4gCioJCVdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lLCB0aGUgUFRQIGNvcmUgZ2V0cyBpdHMgY2xvY2sgZnJvbSB0aGUgZGV2aWNlJ3MKKgkJUFRQX0VYVENMSyBwaW4uCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlleHRDbGsJLSBHVF9UUlVFIGlmIGV4dGVybmFsIGNsb2NrIGlzIHNlbGVjdGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YkdldFB0cEV4dENsawooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX0JPT0wJCSpleHRDbGsKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YlNldFB0cEV4dENsawoqCiogREVTQ1JJUFRJT046CioJCVBUUCBleHRlcm5hbCBjbG9jayBzZWxlY3QuCioJCVdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZCB0byBhIHplcm8sIHRoZSBQVFAgY29yZSBnZXRzIGl0cyBjbG9jayBmcm9tIAoqCQlhbiBpbnRlcm5hbCAxMjVNSHogY2xvY2sgYmFzZWQgb24gdGhlIGRldmljZSdzIFhUQUxfSU4gaW5wdXQuIAoqCQlXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgdGhlIFBUUCBjb3JlIGdldHMgaXRzIGNsb2NrIGZyb20gdGhlIGRldmljZSdzCioJCVBUUF9FWFRDTEsgcGluLgoqCiogSU5QVVRTOgoqCQlleHRDbGsJLSBHVF9UUlVFIGlmIGV4dGVybmFsIGNsb2NrIGlzIHNlbGVjdGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJTZXRQdHBFeHRDbGsKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9CT09MCQlleHRDbGsKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YkdldFJlY0Nsa1NlbAoqCiogREVTQ1JJUFRJT046CioJCVN5bmNocm9ub3VzIEV0aGVybmV0IFJlY292ZXJlZCBDbG9jayBTZWxlY3QuCioJCVRoaXMgZmllbGQgaW5kaWNhdGUgdGhlIGludGVybmFsIFBIWSBudW1iZXIgd2hvc2UgcmVjb3ZlcmVkIGNsb2NrIHdpbGwKKgkJYmUgcHJlc2VudGVkIG9uIHRoZSBTRV9SQ0xLMCBvciBTRV9SQ0xLMSBwaW4gZGVwZW5kaW5nIG9uIHRoZSByZWNDbGsgc2VsZWN0aW9uLgoqCiogSU5QVVRTOgoqCQlyZWNDbGsJLSBHVF9BVkJfUkVDT1ZFUkVEX0NMT0NLIHR5cGUKKgoqIE9VVFBVVFM6CioJCWNsa1NlbAktIHJlY292ZXJlZCBjbG9jayBzZWxlY3Rpb24KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YkdldFJlY0Nsa1NlbAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0FWQl9SRUNPVkVSRURfQ0xPQ0sJcmVjQ2xrLAoJT1VUIEdUX1UzMgkJKmNsa1NlbAopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YlNldFJlY0Nsa1NlbAoqCiogREVTQ1JJUFRJT046CioJCVN5bmNocm9ub3VzIEV0aGVybmV0IFJlY292ZXJlZCBDbG9jayBTZWxlY3QuCioJCVRoaXMgZmllbGQgaW5kaWNhdGUgdGhlIGludGVybmFsIFBIWSBudW1iZXIgd2hvc2UgcmVjb3ZlcmVkIGNsb2NrIHdpbGwKKgkJYmUgcHJlc2VudGVkIG9uIHRoZSBTRV9SQ0xLMCBvciBTRV9SQ0xLMSBwaW4gZGVwZW5kaW5nIG9uIHRoZSByZWNDbGsgc2VsZWN0aW9uLgoqCiogSU5QVVRTOgoqCQlyZWNDbGsJLSBHVF9BVkJfUkVDT1ZFUkVEX0NMT0NLIHR5cGUKKgkJY2xrU2VsCS0gcmVjb3ZlcmVkIGNsb2NrIHNlbGVjdGlvbiAoc2hvdWxkIGJlIGxlc3MgdGhhbiA4KQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YlNldFJlY0Nsa1NlbAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0FWQl9SRUNPVkVSRURfQ0xPQ0sJcmVjQ2xrLAoJSU4gIEdUX1UzMgkJY2xrU2VsCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJHZXRBdmJPdWlCeXRlcwoqCiogREVTQ1JJUFRJT046CioJCUFWQiBPVUkgTGltaXQgRmlsdGVyIGJ5dGVzKDAgfiAyKS4KKgkJV2hlbiBhbGwgdGhyZWUgb2YgdGhlIEF2Yk91aSBCeXRlcyBhcmUgemVybywgbm9ybWFsIGZyYW1lIHByb2Nlc3Npbmcgb2NjdXJzLgoqCQlXaGVuIGFueSBvZiB0aGUgdGhyZWUgQXZiT3VpIEJ5dGVzIGFyZSBub24temVybywgYWxsIEFWQiBmcmFtZXMgbXVzdCBoYXZlIGEKKgkJZGVzdGluYXRpb24gYWRkcmVzcyB3aG9zZSAxc3QgdGhyZWUgYnl0ZXMgb2YgdGhlIERBIG1hdGNoIHRoZXNlIHRocmVlIAoqCQlBdmJPdWkgQnl0ZXMgb3IgdGhlIGZyYW1lIHdpbGwgYmUgZmlsdGVyZWQuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlvdWlCeXRlcwktIDMgYnl0ZXMgb2YgT1VJIGZpZWxkIGluIEV0aGVybmV0IGFkZHJlc3MgZm9ybWF0CioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJHZXRBdmJPdWlCeXRlcwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1U4CQkqb2JpQnl0ZXMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YlNldEF2Yk91aUJ5dGVzCioKKiBERVNDUklQVElPTjoKKgkJQVZCIE9VSSBMaW1pdCBGaWx0ZXIgYnl0ZXMoMCB+IDIpLgoqCQlXaGVuIGFsbCB0aHJlZSBvZiB0aGUgQXZiT3VpIEJ5dGVzIGFyZSB6ZXJvLCBub3JtYWwgZnJhbWUgcHJvY2Vzc2luZyBvY2N1cnMuCioJCVdoZW4gYW55IG9mIHRoZSB0aHJlZSBBdmJPdWkgQnl0ZXMgYXJlIG5vbi16ZXJvLCBhbGwgQVZCIGZyYW1lcyBtdXN0IGhhdmUgYQoqCQlkZXN0aW5hdGlvbiBhZGRyZXNzIHdob3NlIDFzdCB0aHJlZSBieXRlcyBvZiB0aGUgREEgbWF0Y2ggdGhlc2UgdGhyZWUgCioJCUF2Yk91aSBCeXRlcyBvciB0aGUgZnJhbWUgd2lsbCBiZSBmaWx0ZXJlZC4KKgoqIElOUFVUUzoKKgkJb3VpQnl0ZXMJLSAzIGJ5dGVzIG9mIE9VSSBmaWVsZCBpbiBFdGhlcm5ldCBhZGRyZXNzIGZvcm1hdAoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YlNldEF2Yk91aUJ5dGVzCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTgJCSpvYmlCeXRlcwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiR2V0QXZiTW9kZQoqCiogREVTQ1JJUFRJT046CioJCVBvcnQncyBBVkIgTW9kZS4KKgoqIElOUFVUUzoKKgkJcG9ydAktIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQltb2RlCS0gR1RfQVZCX01PREUgdHlwZQoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiR2V0QXZiTW9kZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4JR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9BVkJfTU9ERQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiU2V0QXZiTW9kZQoqCiogREVTQ1JJUFRJT046CioJCVBvcnQncyBBVkIgTW9kZS4KKgoqIElOUFVUUzoKKgkJcG9ydAktIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCW1vZGUJLSBHVF9BVkJfTU9ERSB0eXBlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiU2V0QXZiTW9kZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4JR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9BVkJfTU9ERQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJHZXRBdmJPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCUFWQiBPdmVycmlkZS4KKgkJV2hlbiBkaXNhYmxlZCwgbm9ybWFsIGZyYW1lIHByb2Nlc3Npbmcgb2NjdXJzLgoqCQlXaGVuIGVuYWJsZWQsIHRoZSBlZ3Jlc3MgcG9ydGlvbiBvZiB0aGlzIHBvcnQgaXMgY29uc2lkZXJlZCBBVkIgZXZlbiBpZiAKKgkJdGhlIGluZ3Jlc3MgcG9ydGlvbiBpcyBub3QuCioKKiBJTlBVVFM6CioJCXBvcnQJLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKgkJZW4JCS0gR1RfVFJVRSBpZiBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YkdldEF2Yk92ZXJyaWRlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiU2V0QXZiT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlBVkIgT3ZlcnJpZGUuCioJCVdoZW4gZGlzYWJsZWQsIG5vcm1hbCBmcmFtZSBwcm9jZXNzaW5nIG9jY3Vycy4KKgkJV2hlbiBlbmFibGVkLCB0aGUgZWdyZXNzIHBvcnRpb24gb2YgdGhpcyBwb3J0IGlzIGNvbnNpZGVyZWQgQVZCIGV2ZW4gaWYgCioJCXRoZSBpbmdyZXNzIHBvcnRpb24gaXMgbm90LgoqCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJZW4JCS0gR1RfVFJVRSB0byBlbmFibGUsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YlNldEF2Yk92ZXJyaWRlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX0JPT0wJCWVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiR2V0RmlsdGVyQmFkQXZiCioKKiBERVNDUklQVElPTjoKKgkJRmlsdGVyIEJhZCBBVkIgZnJhbWVzLgoqCQlXaGVuIGRpc2FibGVkLCBub3JtYWwgZnJhbWUgcHJvY2Vzc2luZyBvY2N1cnMuCioJCVdoZW4gZW5hYmxlZCwgZnJhbWVzIHRoYXQgYXJlIGNvbnNpZGVyZWQgQmFkIEFWQiBmcmFtZXMgYXJlIGZpbHRlcmVkLgoqCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCWVuCQktIEdUX1RSVUUgaWYgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJHZXRGaWx0ZXJCYWRBdmIKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOCUdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJTZXRGaWx0ZXJCYWRBdmIKKgoqIERFU0NSSVBUSU9OOgoqCQlGaWx0ZXIgQmFkIEFWQiBmcmFtZXMuCioJCVdoZW4gZGlzYWJsZWQsIG5vcm1hbCBmcmFtZSBwcm9jZXNzaW5nIG9jY3Vycy4KKgkJV2hlbiBlbmFibGVkLCBmcmFtZXMgdGhhdCBhcmUgY29uc2lkZXJlZCBCYWQgQVZCIGZyYW1lcyBhcmUgZmlsdGVyZWQuCioKKiBJTlBVVFM6CioJCXBvcnQJLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQllbgkJLSBHVF9UUlVFIHRvIGVuYWJsZSwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiU2V0RmlsdGVyQmFkQXZiCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX0JPT0wJCWVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiR2V0QXZiVHVubmVsCioKKiBERVNDUklQVElPTjoKKgkJQVZCIFR1bm5lbC4KKgkJV2hlbiBkaXNhYmxlZCwgbm9ybWFsIGZyYW1lIHByb2Nlc3Npbmcgb2NjdXJzLgoqCQlXaGVuIGVuYWJsZWQsIHRoZSBwb3J0IGJhc2VkIFZMQU4gVGFibGUgbWFza2luZywgODAyLjFRIFZMQU4gbWVtYmVyc2hpcCAKKgkJbWFza2luZyBhbmQgdGhlIFRydW5rIE1hc2tpbmcgaXMgYnlwYXNzZWQgZm9yIGFueSBmcmFtZSBlbnRlcmluZyB0aGlzIHBvcnQKKgkJdGhhdCBpcyBjb25zaWRlcmVkIEFWQiBieSBEQS4gVGhpcyBpbmNsdWRlcyB1bmljYXN0IGFzIHdlbGwgYXMgbXVsdGljYXN0CioJCWZyYW1lCioKKiBJTlBVVFM6CioJCXBvcnQJLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKgkJZW4JCS0gR1RfVFJVRSBpZiBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YkdldEF2YlR1bm5lbAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4JR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqZW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJTZXRBdmJUdW5uZWwKKgoqIERFU0NSSVBUSU9OOgoqCQlBVkIgVHVubmVsLgoqCQlXaGVuIGRpc2FibGVkLCBub3JtYWwgZnJhbWUgcHJvY2Vzc2luZyBvY2N1cnMuCioJCVdoZW4gZW5hYmxlZCwgdGhlIHBvcnQgYmFzZWQgVkxBTiBUYWJsZSBtYXNraW5nLCA4MDIuMVEgVkxBTiBtZW1iZXJzaGlwIAoqCQltYXNraW5nIGFuZCB0aGUgVHJ1bmsgTWFza2luZyBpcyBieXBhc3NlZCBmb3IgYW55IGZyYW1lIGVudGVyaW5nIHRoaXMgcG9ydAoqCQl0aGF0IGlzIGNvbnNpZGVyZWQgQVZCIGJ5IERBLiBUaGlzIGluY2x1ZGVzIHVuaWNhc3QgYXMgd2VsbCBhcyBtdWx0aWNhc3QKKgkJZnJhbWUKKgoqIElOUFVUUzoKKgkJcG9ydAktIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCWVuCQktIEdUX1RSVUUgdG8gZW5hYmxlLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJTZXRBdmJUdW5uZWwKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOCUdUX0xQT1JUCXBvcnQsCglJTiAgR1RfQk9PTAkJZW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJHZXRBdmJGcmFtZVBvbGljeQoqCiogREVTQ1JJUFRJT046CioJCUFWQiBIaSBvciBMbyBmcmFtZSBwb2xpY3kgbWFwcGluZy4KKgkJU3VwcG9ydGVkIHBvbGljaWVzIGFyZSBkZWZpbmVkIGluIEdUX0FWQl9GUkFNRV9QT0xJQ1kuCioJCQkKKiBJTlBVVFM6CioJCXBvcnQJLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQlmVHlwZQktIEdUX0FWQl9GUkFNRV9UWVBFIAoqCiogT1VUUFVUUzoKKgkJcG9saWN5CS0gR1RfQVZCX0ZSQU1FX1BPTElDWQoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiR2V0QXZiRnJhbWVQb2xpY3kKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOCUdUX0xQT1JUCXBvcnQsCglJTglHVF9BVkJfRlJBTUVfVFlQRQlmVHlwZSwKCU9VVCBHVF9BVkJfRlJBTUVfUE9MSUNZCQkqcG9saWN5Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiU2V0QXZiRnJhbWVQb2xpY3kKKgoqIERFU0NSSVBUSU9OOgoqCQlBVkIgSGkgb3IgTG8gZnJhbWUgcG9saWN5IG1hcHBpbmcuCioJCVN1cHBvcnRlZCBwb2xpY2llcyBhcmUgZGVmaW5lZCBpbiBHVF9BVkJfRlJBTUVfUE9MSUNZLgoqCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJZlR5cGUJLSBHVF9BVkJfRlJBTUVfVFlQRSAKKgkJcG9saWN5CS0gR1RfQVZCX0ZSQU1FX1BPTElDWQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YlNldEF2YkZyYW1lUG9saWN5CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJSU4JR1RfQVZCX0ZSQU1FX1RZUEUJZlR5cGUsCglJTiAgR1RfQVZCX0ZSQU1FX1BPTElDWQkJcG9saWN5Cik7CgovKiBBbWJlciBRQVYgQVBJICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiBBbWJlciBRQVYgQVBJICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdlNldFBvcnRRcHJpWFFUU1Rva2VuCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCBQcmlvcml0eSBRdWV1ZSAwLTMgdGltZSBzbG90IHRva2VucyBvbiBhIHBvcnQuCioJCVRoZSBzZXR0aW5nIHZhbHVlIGlzIG51bWJlciBvZiB0b2tlbnMgdGhhdCBuZWVkIHRvIGJlIHN1YnRyYWN0ZWQgYXQgZWFjaCAKKgkJUVRTIGludGVydmFsIGJvdW5kYXJ5LgoqCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJcXVldWUJIC0gMCAtIDMKKgkJcXRzVG9rZW4gLSBudW1iZXIgb2YgdG9rZW5zLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2U2V0UG9ydFFwcmlYUVRTVG9rZW4KKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOCUdUX0xQT1JUCXBvcnQsCglJTiAgR1RfVTgJCXF1ZXVlLAoJSU4gIEdUX1UxNgkJcXRzVG9rZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdkdldFBvcnRRcHJpWFFUU1Rva2VuCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldCBQcmlvcml0eSBRdWV1ZSAwLTMgdGltZSBzbG90IHRva2VucyBvbiBhIHBvcnQuCioJCVRoZSBzZXR0aW5nIHZhbHVlIGlzIG51bWJlciBvZiB0b2tlbnMgdGhhdCBuZWVkIHRvIGJlIHN1YnRyYWN0ZWQgYXQgZWFjaCAKKgkJUVRTIGludGVydmFsIGJvdW5kYXJ5LgoqCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJcXVldWUgLSAwIC0gMwoqCiogT1VUUFVUUzoKKgkJcXRzVG9rZW4gLSBudW1iZXIgb2YgdG9rZW5zCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdkdldFBvcnRRcHJpWFFUU1Rva2VuCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX1U4CQlxdWV1ZSwKCU9VVCBHVF9VMTYJCSpxdHNUb2tlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2U2V0UG9ydFFwcmlYQnVyc3RCeXRlcwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXQgUHJpb3JpdHkgUXVldWUgMC0zIEJ1cnN0IEJ5dGVzIG9uIGEgcG9ydC4KKgkJVGhpcyB2YWx1ZSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjcmVkaXRzIGluIGJ5dGVzIHRoYXQgY2FuIGJlIAoqCQlhY2N1bXVsYXRlZCB3aGVuIHRoZSBxdWV1ZSBpcyBibG9ja2VkIGZyb20gc2VuZGluZyBvdXQgYSBmcmFtZSBkdWUgdG8gCioJCWhpZ2hlciBwcmlvcml0eSBxdWV1ZSBmcmFtZXMgYmVpbmcgc2VudCBvdXQuCioKKiBJTlBVVFM6CioJCXBvcnQJLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQlxdWV1ZSAtIDAgLSAzCioJCWJ1cnN0IC0gbnVtYmVyIG9mIGNyZWRpdHMgaW4gYnl0ZXMgLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZTZXRQb3J0UXByaVhCdXJzdEJ5dGVzCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX1U4CQlxdWV1ZSwKCUlOICBHVF9VMTYJCWJ1cnN0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZHZXRQb3J0UXByaVhCdXJzdEJ5dGVzCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldCBQcmlvcml0eSBRdWV1ZSAwLTMgQnVyc3QgQnl0ZXMgb24gYSBwb3J0LgoqCQlUaGlzIHZhbHVlIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNyZWRpdHMgaW4gYnl0ZXMgdGhhdCBjYW4gYmUgCioJCWFjY3VtdWxhdGVkIHdoZW4gdGhlIHF1ZXVlIGlzIGJsb2NrZWQgZnJvbSBzZW5kaW5nIG91dCBhIGZyYW1lIGR1ZSB0byAKKgkJaGlnaGVyIHByaW9yaXR5IHF1ZXVlIGZyYW1lcyBiZWluZyBzZW50IG91dC4KKgoqIElOUFVUUzoKKgkJcG9ydAktIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCXF1ZXVlCS0gMCAtIDMKKgoqIE9VVFBVVFM6CioJCWJ1cnN0IC0gbnVtYmVyIG9mIGNyZWRpdHMgaW4gYnl0ZXMgLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdkdldFBvcnRRcHJpWEJ1cnN0Qnl0ZXMKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOCUdUX0xQT1JUCXBvcnQsCglJTiAgR1RfVTgJCXF1ZXVlLAoJT1VUIEdUX1UxNgkJKmJ1cnN0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZTZXRQb3J0UWF2RW5hYmxlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCBRQVYgZW5hYmxlIHN0YXR1cyBvbiBhIHBvcnQuCioKKiBJTlBVVFM6CioJCXBvcnQJLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQllbgkJLSBHVF9UUlVFOiBRQVYgZW5hYmxlLCBHVF9GQUxTRTogUUFWIGRpc2FibGUKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2U2V0UG9ydFFhdkVuYWJsZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4JR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9CT09MCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2R2V0UG9ydFFhdkVuYWJsZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXQgUUFWIGVuYWJsZSBzdGF0dXMgb24gYSBwb3J0LgoqCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCWVuCQktIEdUX1RSVUU6IFFBViBlbmFibGUsIEdUX0ZBTFNFOiBRQVYgZGlzYWJsZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdkdldFBvcnRRYXZFbmFibGUKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOCUdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogUUFWIEdsb2JhbCByZWdpc3RlcnMgcHJvY2Vzc2luZyAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZTZXRHbG9iYWxBZG1pbk1HTVQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IHRvIGFjY2VwdCBBZG1pdCBNYW5hZ2VtZW50IEZyYW1lcyBhbHdheXMuCioKKiBJTlBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byBzZXQgTUdNVCBmcmFtZSBhY2NlcHRlZCBhbHdheXMsIAoqCQkJIEdUX0ZBTFNFIGRvIG5vdCBzZXQgTUdNVCBmcmFtZSBhY2NlcHRlZCBhbHdheXMKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2U2V0R2xvYmFsQWRtaW5NR01UCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdkdldEdsb2JhbEFkbWluTUdNVAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXQgc2V0dGluZyBvZiBBZG1pdCBNYW5hZ2VtZW50IEZyYW1lcyBhbHdheXMuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gc2V0IE1HTVQgZnJhbWUgYWNjZXB0ZWQgYWx3YXlzLCAKKgkJCSBHVF9GQUxTRSBkbyBub3Qgc2V0IE1HTVQgZnJhbWUgYWNjZXB0ZWQgYWx3YXlzCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2R2V0R2xvYmFsQWRtaW5NR01UCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfQk9PTAkJKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZTZXRHbG9iYWxJc29QdHJUaHJlc2hvbGQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IEdsb2JhbCBJc29jaHJvbm91cyBRdWV1ZSBQb2ludGVyIFRocmVzaG9sZC4KKgkJVGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIHRvdGFsIG51bWJlciBvZiBpc29jaHJvbm91cyBwb2ludGVycyAKKgkJdGhhdCBhcmUgcmVzZXJ2ZWQgZm9yIGlzb2Nocm9ub3VzIHN0cmVhbXMuIFRoZSB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSAKKgkJY29tcHV0ZWQgaW4gU1JQIHNvZnR3YXJlIGFuZCBwcm9ncmFtbWVkIGludG8gaGFyZHdhcmUgYmFzZWQgb24gdGhlIHRvdGFsIAoqCQlhZ2dyZWdhdGUgaXNvY2hyb25vdXMgc3RyZWFtcyBjb25maWd1cmVkIHRvIGdvIHRocm91Z2ggdGhpcyBkZXZpY2UuLgoqCiogSU5QVVRTOgoqCQlpc29QdHJzIC0gIHRvdGFsIG51bWJlciBvZiBpc29jaHJvbm91cyBwb2ludGVycyAKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2U2V0R2xvYmFsSXNvUHRyVGhyZXNob2xkCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTE2CQlpc29QdHJzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZHZXRHbG9iYWxJc29QdHJUaHJlc2hvbGQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0IEdsb2JhbCBJc29jaHJvbm91cyBRdWV1ZSBQb2ludGVyIFRocmVzaG9sZC4KKgkJVGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIHRvdGFsIG51bWJlciBvZiBpc29jaHJvbm91cyBwb2ludGVycyAKKgkJdGhhdCBhcmUgcmVzZXJ2ZWQgZm9yIGlzb2Nocm9ub3VzIHN0cmVhbXMuIFRoZSB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSAKKgkJY29tcHV0ZWQgaW4gU1JQIHNvZnR3YXJlIGFuZCBwcm9ncmFtbWVkIGludG8gaGFyZHdhcmUgYmFzZWQgb24gdGhlIHRvdGFsIAoqCQlhZ2dyZWdhdGUgaXNvY2hyb25vdXMgc3RyZWFtcyBjb25maWd1cmVkIHRvIGdvIHRocm91Z2ggdGhpcyBkZXZpY2UuLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJaXNvUHRycyAtICB0b3RhbCBudW1iZXIgb2YgaXNvY2hyb25vdXMgcG9pbnRlcnMgCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2R2V0R2xvYmFsSXNvUHRyVGhyZXNob2xkCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfVTE2CQkqaXNvUHRycwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2U2V0R2xvYmFsRGlzUVNENE1HTVQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IERpc2FibGUgUXVldWUgU2NoZWR1bGVyIERlbGF5cyBmb3IgTWFuYWdlbWVudCBmcmFtZXMuLgoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUsIGl0IGluZGljYXRlcyB0byB0aGUgUXVldWUgQ29udHJvbGxlciB0byBkaXNhYmxlIGFwcGx5aW5nIFF1ZXVlCioJCQlTY2hlZHVsZXIgRGVsYXlzIGFuZCB0aGUgY29ycmVzcG9uZGluZyByYXRlIHJlZ3VsYXRvciBkb2VzIG5vdCBhY2NvdW50CioJCQlmb3IgTUdNVCBmcmFtZXMgdGhyb3VnaCB0aGlzIHF1ZXVlLgoqCQkJR1RfRkFMU0UsIHRoZSBNR01UIGZyYW1lcyBmb2xsb3cgc2ltaWxhciByYXRlIHJlZ3VsYXRpb24gYW5kIGRlbGF5CioJCQlyZWd1bGF0aW9uIGVudmVsb3BlIGFzIHNwZWNpZmllZCBmb3IgdGhlIGlzb2Nocm9ub3VzIHF1ZXVlIHRoYXQgdGhlCioJCQlNR01UIGZyYW1lcyBhcmUgc2hhcmluZyB3aXRoLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2U2V0R2xvYmFsRGlzUVNENE1HTVQKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9CT09MCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2R2V0R2xvYmFsRGlzUVNENE1HTVQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgR2V0IERpc2FibGUgUXVldWUgU2NoZWR1bGVyIERlbGF5cyBmb3IgTWFuYWdlbWVudCBmcmFtZXMuLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFLCBpdCBpbmRpY2F0ZXMgdG8gdGhlIFF1ZXVlIENvbnRyb2xsZXIgdG8gZGlzYWJsZSBhcHBseWluZyBRdWV1ZQoqCQkJU2NoZWR1bGVyIERlbGF5cyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgcmF0ZSByZWd1bGF0b3IgZG9lcyBub3QgYWNjb3VudAoqCQkJZm9yIE1HTVQgZnJhbWVzIHRocm91Z2ggdGhpcyBxdWV1ZS4KKgkJCUdUX0ZBTFNFLCB0aGUgTUdNVCBmcmFtZXMgZm9sbG93IHNpbWlsYXIgcmF0ZSByZWd1bGF0aW9uIGFuZCBkZWxheQoqCQkJcmVndWxhdGlvbiBlbnZlbG9wZSBhcyBzcGVjaWZpZWQgZm9yIHRoZSBpc29jaHJvbm91cyBxdWV1ZSB0aGF0IHRoZQoqCQkJTUdNVCBmcmFtZXMgYXJlIHNoYXJpbmcgd2l0aC4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2R2V0R2xvYmFsRGlzUVNENE1HTVQKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9CT09MCQkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdlNldEdsb2JhbEludGVycnVwdAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXQgUUFWIGludGVycnVwdCBlbmFibGUsIAoqCQlUaGUgUUFWIGludGVycnlwdHMgaW5jbHVkZToKKgkJW0dUX1FBVl9JTlRfRU5BQkxFX0VOUV9MTVRfQklUXSAgICAgICMgRW5RIExpbWl0IEludGVycnVwdCBFbmFibGUgCioJCVtHVF9RQVZfSU5UX0VOQUJMRV9JU09fREVMX0JJVF0gICAgICAjIElzbyBEZWxheSBJbnRlcnJ1cHQgRW5hYmxlICAgCioJCVtHVF9RQVZfSU5UX0VOQUJMRV9JU09fRElTX0JJVF0gICAgICAjIElzbyBEaXNjYXJkIEludGVycnVwdCBFbmFibGUgCioJCVtHVF9RQVZfSU5UX0VOQUJMRV9JU09fTElNSVRfRVhfQklUXSAjIElzbyBQYWNrZXQgTWVtb3J5IEV4Y2VlZGVkIAoqCQkJCQkJCQkJCQkgIEludGVycnVwdCBFbmFibGUgCioKKiBJTlBVVFM6CioJCWludEVuIC0gW0dUX1FBVl9JTlRfRU5BQkxFX0VOUV9MTVRfQklUXSBPUiAgCioJCQkJW0dUX1FBVl9JTlRfRU5BQkxFX0lTT19ERUxfQklUXSBPUiAgICAKKgkJCQlbR1RfUUFWX0lOVF9FTkFCTEVfSVNPX0RJU19CSVRdIE9SICAKKgkJCQlbR1RfUUFWX0lOVF9FTkFCTEVfSVNPX0xJTUlUX0VYX0JJVF0gICAKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2U2V0R2xvYmFsSW50ZXJydXB0CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTE2CQlpbnRFbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2R2V0R2xvYmFsSW50ZXJydXB0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IFFBViBpbnRlcnJ1cHQgc3RhdHVzIGFuZCBlbmFibGUgc3RhdHVzLCAKKgkJVGhlIFFBViBpbnRlcnJ5cHQgc3RhdHVzIGluY2x1ZGU6CioJCSBbR1RfUUFWX0lOVF9TVEFUVVNfRU5RX0xNVF9CSVRdICAgICAgIyBFbnF1ZXVlIERlbGF5IExpbWl0IGV4Y2VlZGVkICAKKgkJIFtHVF9RQVZfSU5UX1NUQVRVU19JU09fREVMX0JJVF0gICAgICAjIElzbyBEZWxheSBJbnRlcnJ1cHQgU3RhdHVzICAgCioJCSBbR1RfUUFWX0lOVF9TVEFUVVNfSVNPX0RJU19CSVRdICAgICAgIyBJc28gRGlzY2FyZCBJbnRlcnJ1cHQgU3RhdHVzIAoqCQkgW0dUX1FBVl9JTlRfU1RBVFVTX0lTT19MSU1JVF9FWF9CSVRdICMgSXNvIFBhY2tldCBNZW1vcnkgRXhjZWVkZWQgCioJCQkJCQkJCQkJCSAgICBJbnRlcnJ1cHQgU3RhdHVzIAoqCQlUaGUgUUFWIGludGVycnlwdCBlbmFibGUgc3RhdHVzIGluY2x1ZGU6CioJCSBbR1RfUUFWX0lOVF9FTkFCTEVfRU5RX0xNVF9CSVRdICAgICAgIyBFblEgTGltaXQgSW50ZXJydXB0IEVuYWJsZSAKKgkJIFtHVF9RQVZfSU5UX0VOQUJMRV9JU09fREVMX0JJVF0gICAgICAjIElzbyBEZWxheSBJbnRlcnJ1cHQgRW5hYmxlICAgCioJCSBbR1RfUUFWX0lOVF9FTkFCTEVfSVNPX0RJU19CSVRdICAgICAgIyBJc28gRGlzY2FyZCBJbnRlcnJ1cHQgRW5hYmxlIAoqCQkgW0dUX1FBVl9JTlRfRU5BQkxFX0lTT19MSU1JVF9FWF9CSVRdICMgSXNvIFBhY2tldCBNZW1vcnkgRXhjZWVkZWQgCioJCQkJCQkJCQkJCQkgIEludGVycnVwdCBFbmFibGUgCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlpbnRFblN0IC0gW0dUX1FBVl9JTlRfU1RBVFVTX0VOUV9MTVRfQklUXSBPUiAgICAgCioJCQkJW0dUX1FBVl9JTlRfU1RBVFVTX0lTT19ERUxfQklUXSBPUiAgIAoqCQkJCVtHVF9RQVZfSU5UX1NUQVRVU19JU09fRElTX0JJVF0gT1IgICAKKgkJCQlbR1RfUUFWX0lOVF9TVEFUVVNfSVNPX0xJTUlUX0VYX0JJVF0gT1IKKgkJCQlbR1RfUUFWX0lOVF9FTkFCTEVfRU5RX0xNVF9CSVRdIE9SICAKKgkJCQlbR1RfUUFWX0lOVF9FTkFCTEVfSVNPX0RFTF9CSVRdIE9SICAgIAoqCQkJCVtHVF9RQVZfSU5UX0VOQUJMRV9JU09fRElTX0JJVF0gT1IgIAoqCQkJCVtHVF9RQVZfSU5UX0VOQUJMRV9JU09fTElNSVRfRVhfQklUXSAgIAoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdkdldEdsb2JhbEludGVycnVwdAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1UxNgkJKmludEVuU3QKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdkdldEdsb2JhbElzb0ludGVycnVwdFBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0IElzb2Nocm9ub3VzIGludGVycnVwdCBwb3J0LgoqCQlUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgcG9ydCBudW1iZXIgZm9yIElzb0Rpc0ludCBvciBJc29MaW1pdEV4SW50IAoqCQliaXRzLiBPbmx5IG9uZSBzdWNoIGludGVycnVwdCBjb25kaXRpb24gY2FuIGJlIGRldGVjdGVkIGJ5IGhhcmR3YXJlIGF0IG9uZSAKKgkJdGltZS4gT25jZSBhbiBpbnRlcnJ1cHQgYml0IGhhcyBiZWVuIHNldCBhbG9uZyB3aXRoIHRoZSBJc29JbnRQb3J0LCB0aGUgCioJCXNvZnR3YXJlIHdvdWxkIGhhdmUgdG8gY29tZSBhbmQgY2xlYXIgdGhlIGJpdHMgYmVmb3JlIGhhcmR3YXJlIHJlY29yZHMgCioJCWFub3RoZXIgaW50ZXJydXB0IGV2ZW50LgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJcG9ydCAtIHBvcnQgbnVtYmVyIGZvciBJc29EaXNJbnQgb3IgSXNvTGltaXRFeEludCBiaXRzLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdkdldEdsb2JhbElzb0ludGVycnVwdFBvcnQKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9VOAkJKnBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdlNldEdsb2JhbElzb0RlbGF5TG10CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCBJc29jaHJvbm91cyBxdWV1ZSBkZWxheSBMaW1pdAoqCQlUaGlzIGZpZWxkIHJlcHJlc2VudHMgYSBwZXItcG9ydCBpc29jaHJvbm91cyBkZWxheSBsaW1pdCB0aGF0IAoqCQl3aWxsIGJlIGNoZWNrZWQgYnkgdGhlIHF1ZXVlIGNvbnRyb2xsZXIgbG9naWMgdG8gZW5zdXJlIG5vIGlzb2Nocm9ub3VzIAoqCQlwYWNrZXRzIHN1ZmZlciBtb3JlIHRoYW4gdGhpcyBkZWxheSB3LnIudCB0byB0aGVpciBlbGlnaWJpbGl0eSB0aW1lIHNsb3QuCioJCVRoaXMgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIFF1ZXVlIFRpbWUgU2xvdHMuIFRoZSBpbnRlcnZhbCBmb3IgdGhlIFFUUyAKKgkJY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIHJlZ2lzdGVyIGluIFFhdiBHbG9iYWwgQ29uZmlndXJhdGlvbiwgT2Zmc2V0IDB4Mi4KKgoqIElOUFVUUzoKKgkJbGltaXQgLSBwZXItcG9ydCBpc29jaHJvbm91cyBkZWxheSBsaW1pdC4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2U2V0R2xvYmFsSXNvRGVsYXlMbXQKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9VOAkJbGltaXQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdkdldEdsb2JhbElzb0RlbGF5TG10CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldCBJc29jaHJvbm91cyBxdWV1ZSBkZWxheSBMaW1pdAoqCQlUaGlzIGZpZWxkIHJlcHJlc2VudHMgYSBwZXItcG9ydCBpc29jaHJvbm91cyBkZWxheSBsaW1pdCB0aGF0IAoqCQl3aWxsIGJlIGNoZWNrZWQgYnkgdGhlIHF1ZXVlIGNvbnRyb2xsZXIgbG9naWMgdG8gZW5zdXJlIG5vIGlzb2Nocm9ub3VzIAoqCQlwYWNrZXRzIHN1ZmZlciBtb3JlIHRoYW4gdGhpcyBkZWxheSB3LnIudCB0byB0aGVpciBlbGlnaWJpbGl0eSB0aW1lIHNsb3QuCioJCVRoaXMgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIFF1ZXVlIFRpbWUgU2xvdHMuIFRoZSBpbnRlcnZhbCBmb3IgdGhlIFFUUyAKKgkJY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIHJlZ2lzdGVyIGluIFFhdiBHbG9iYWwgQ29uZmlndXJhdGlvbiwgT2Zmc2V0IDB4Mi4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWxpbWl0IC0gcGVyLXBvcnQgaXNvY2hyb25vdXMgZGVsYXkgbGltaXQuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2R2V0R2xvYmFsSXNvRGVsYXlMbXQKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9VOAkJKmxpbWl0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZTZXRHbG9iYWxJc29Nb25FbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldCBJc29jaHJvbm91cyBtb25pdG9yIGVuYWJsZQoqCQlTZXQgR1RfVFJVRTogdGhpcyBiaXQgZW5hYmxlcyB0aGUgc3RhdGlzdGljcyBnYXRoZXJpbmcgY2FwYWJpbGl0aWVzIHN0YXRlZAoqCQlpbiBQVFAgR2xvYmFsIFN0YXR1cyBSZWdpc3RlcnMgT2Zmc2V0IDB4RCwgMHhFIGFuZCAweEYuIE9uY2UgZW5hYmxlZCwgdGhlCioJCXNvZnR3YXJlIGlzIGV4cGVjdGVkIHRvIHByb2dyYW0gdGhlIElzb01vblBvcnQgKFBUUCBHbG9iYWwgU3RhdHVzIE9mZnNldAoqCQkweEQpIGluZGljYXRpbmcgd2hpY2ggcG9ydCBvZiB0aGUgZGV2aWNlIGRvZXMgdGhlIHNvZnR3YXJlIHdhbnRzIHRvIG1vbml0b3IuCioJCVVwb24gc2V0dGluZyB0aGlzIGJpdCwgdGhlIGhhcmR3YXJlIGNvbGxlY3RzIElzb0hpRGlzQ3RyLCBJc29Mb0Rpc0N0ciBhbmQKKgkJSXNvU2NoTWlzc0N0ciB2YWx1ZXMgZm9yIHRoZSBwb3J0IGluZGljYXRlZCBieSBJc29Nb25Qb3J0IHRpbGwgdGhpcyBiaXQgaXMgCioJCXNldCB0byBhIHplcm8uCioJCVNldCBHVF9GQUxTRTogdGhpcyBiaXQgZGlzYWJsZXMgdGhlIHN0YXRpc3RpY3MgZ2F0aGVyaW5nIGNhcGFiaWxpdGllcy4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIC8gR1RfRkFMU0UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdlNldEdsb2JhbElzb01vbkVuCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdkdldEdsb2JhbElzb01vbkVuCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldCBJc29jaHJvbm91cyBtb25pdG9yIGVuYWJsZQoqCQlTZXQgR1RfVFJVRTogdGhpcyBiaXQgZW5hYmxlcyB0aGUgc3RhdGlzdGljcyBnYXRoZXJpbmcgY2FwYWJpbGl0aWVzIHN0YXRlZAoqCQlpbiBQVFAgR2xvYmFsIFN0YXR1cyBSZWdpc3RlcnMgT2Zmc2V0IDB4RCwgMHhFIGFuZCAweEYuIE9uY2UgZW5hYmxlZCwgdGhlCioJCXNvZnR3YXJlIGlzIGV4cGVjdGVkIHRvIHByb2dyYW0gdGhlIElzb01vblBvcnQgKFBUUCBHbG9iYWwgU3RhdHVzIE9mZnNldAoqCQkweEQpIGluZGljYXRpbmcgd2hpY2ggcG9ydCBvZiB0aGUgZGV2aWNlIGRvZXMgdGhlIHNvZnR3YXJlIHdhbnRzIHRvIG1vbml0b3IuCioJCVVwb24gc2V0dGluZyB0aGlzIGJpdCwgdGhlIGhhcmR3YXJlIGNvbGxlY3RzIElzb0hpRGlzQ3RyLCBJc29Mb0Rpc0N0ciBhbmQKKgkJSXNvU2NoTWlzc0N0ciB2YWx1ZXMgZm9yIHRoZSBwb3J0IGluZGljYXRlZCBieSBJc29Nb25Qb3J0IHRpbGwgdGhpcyBiaXQgaXMgCioJCXNldCB0byBhIHplcm8uCioJCVNldCBHVF9GQUxTRTogdGhpcyBiaXQgZGlzYWJsZXMgdGhlIHN0YXRpc3RpY3MgZ2F0aGVyaW5nIGNhcGFiaWxpdGllcy4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSAvIEdUX0ZBTFNFLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdkdldEdsb2JhbElzb01vbkVuCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfQk9PTAkJKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZTZXRHbG9iYWxJc29Nb25Qb3J0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCBJc29jaHJvbm91cyBtb25pdG9yaW5nIHBvcnQuCioJCVRoaXMgZmllbGQgaXMgdXBkYXRlZCBieSBzb2Z0d2FyZSBhbG9uZyB3aXRoIElzbyBNb24gRW4gYml0IAoqCQkoUWF2IEdsb2JhbCBTdGF0dXMsIG9mZnNldCAweEQpIGFuZCBpdCBpbmRpY2F0ZXMgdGhlIHBvcnQgbnVtYmVyIHRoYXQgCioJCXRoZSBzb2Z0d2FyZSB3YW50cyB0aGUgaGFyZHdhcmUgdG8gc3RhcnQgbW9uaXRvcmluZyBpLmUuLCBzdGFydCB1cGRhdGluZyAKKgkJSXNvSGlEaXNDdHIsIElzb0xvRGlzQ3RyIGFuZCBJc29TY2hNaXNzQ3RyLiBUaGUgcXVldWUgY29udHJvbGxlciBjbGVhcnMgCioJCXRoZSBhYm92ZSBzdGF0cyB3aGVuIElzb01vblBvcnQgaXMgY2hhbmdlZC4uCioKKiBJTlBVVFM6CioJCXBvcnQgLSAgcG9ydCBudW1iZXIgLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZTZXRHbG9iYWxJc29Nb25Qb3J0CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTE2CQlwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZHZXRHbG9iYWxJc29Nb25Qb3J0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldCBJc29jaHJvbm91cyBtb25pdG9yaW5nIHBvcnQuCioJCVRoaXMgZmllbGQgaXMgdXBkYXRlZCBieSBzb2Z0d2FyZSBhbG9uZyB3aXRoIElzbyBNb24gRW4gYml0IAoqCQkoUWF2IEdsb2JhbCBTdGF0dXMsIG9mZnNldCAweEQpIGFuZCBpdCBpbmRpY2F0ZXMgdGhlIHBvcnQgbnVtYmVyIHRoYXQgCioJCXRoZSBzb2Z0d2FyZSB3YW50cyB0aGUgaGFyZHdhcmUgdG8gc3RhcnQgbW9uaXRvcmluZyBpLmUuLCBzdGFydCB1cGRhdGluZyAKKgkJSXNvSGlEaXNDdHIsIElzb0xvRGlzQ3RyIGFuZCBJc29TY2hNaXNzQ3RyLiBUaGUgcXVldWUgY29udHJvbGxlciBjbGVhcnMgCioJCXRoZSBhYm92ZSBzdGF0cyB3aGVuIElzb01vblBvcnQgaXMgY2hhbmdlZC4uCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlwb3J0IC0gIHBvcnQgbnVtYmVyLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdkdldEdsb2JhbElzb01vblBvcnQKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9VMTYJCSpwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZTZXRHbG9iYWxJc29IaURpc0N0cgoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXQgSXNvY2hyb25vdXMgaGkgcXVldWUgZGlzY2FyZCBjb3VudGVyLgoqCQlUaGlzIGZpZWxkIGlzIHVwZGF0ZWQgYnkgaGFyZHdhcmUgd2hlbiBpbnN0cnVjdGVkIHRvIGRvIHNvIGJ5IAoqCQllbmFibGluZyB0aGUgSXNvTW9uRW4gYml0IGluIFFhdiBHbG9iYWwgU3RhdHVzIFJlZ2lzdGVyIE9mZnNldCAweEQuIAoqCQlUaGlzIGlzIGFuIHVwY291bnRlciBvZiBudW1iZXIgb2YgaXNvY2hyb25vdXMgaGkgcGFja2V0cyBkaXNjYXJkZWQgCioJCWJ5IFF1ZXVlIENvbnRyb2xsZXIuCioKKiBJTlBVVFM6CioJCWRpc0N0ciAtIHVwY291bnRlciBvZiBudW1iZXIgb2YgaXNvY2hyb25vdXMgaGkgcGFja2V0cyBkaXNjYXJkZWQgCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdlNldEdsb2JhbElzb0hpRGlzQ3RyCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTgJCWRpc0N0cgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2R2V0R2xvYmFsSXNvSGlEaXNDdHIKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0IElzb2Nocm9ub3VzIGhpIHF1ZXVlIGRpc2NhcmQgY291bnRlci4KKgkJVGhpcyBmaWVsZCBpcyB1cGRhdGVkIGJ5IGhhcmR3YXJlIHdoZW4gaW5zdHJ1Y3RlZCB0byBkbyBzbyBieSAKKgkJZW5hYmxpbmcgdGhlIElzb01vbkVuIGJpdCBpbiBRYXYgR2xvYmFsIFN0YXR1cyBSZWdpc3RlciBPZmZzZXQgMHhELiAKKgkJVGhpcyBpcyBhbiB1cGNvdW50ZXIgb2YgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIGhpIHBhY2tldHMgZGlzY2FyZGVkIAoqCQlieSBRdWV1ZSBDb250cm9sbGVyLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZGlzQ3RyIC0gdXBjb3VudGVyIG9mIG51bWJlciBvZiBpc29jaHJvbm91cyBoaSBwYWNrZXRzIGRpc2NhcmRlZCAKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZHZXRHbG9iYWxJc29IaURpc0N0cgooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1U4CQkqZGlzQ3RyCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZTZXRHbG9iYWxJc29Mb0Rpc0N0cgoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXQgSXNvY2hyb25vdXMgTG8gcXVldWUgZGlzY2FyZCBjb3VudGVyLgoqCQlUaGlzIGZpZWxkIGlzIHVwZGF0ZWQgYnkgaGFyZHdhcmUgd2hlbiBpbnN0cnVjdGVkIHRvIGRvIHNvIGJ5IAoqCQllbmFibGluZyB0aGUgSXNvTW9uRW4gYml0IGluIFFhdiBHbG9iYWwgU3RhdHVzIFJlZ2lzdGVyIE9mZnNldCAweEQuIAoqCQlUaGlzIGlzIGFuIHVwY291bnRlciBvZiBudW1iZXIgb2YgaXNvY2hyb25vdXMgbG8gcGFja2V0cyBkaXNjYXJkZWQgCioJCWJ5IFF1ZXVlIENvbnRyb2xsZXIuCioKKiBJTlBVVFM6CioJCWRpc0N0ciAtIHVwY291bnRlciBvZiBudW1iZXIgb2YgaXNvY2hyb25vdXMgbG8gcGFja2V0cyBkaXNjYXJkZWQgCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdlNldEdsb2JhbElzb0xvRGlzQ3RyCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTgJCWRpc0N0cgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2R2V0R2xvYmFsSXNvTG9EaXNDdHIKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IElzb2Nocm9ub3VzIExvIHF1ZXVlIGRpc2NhcmQgY291bnRlci4KKgkJVGhpcyBmaWVsZCBpcyB1cGRhdGVkIGJ5IGhhcmR3YXJlIHdoZW4gaW5zdHJ1Y3RlZCB0byBkbyBzbyBieSAKKgkJZW5hYmxpbmcgdGhlIElzb01vbkVuIGJpdCBpbiBRYXYgR2xvYmFsIFN0YXR1cyBSZWdpc3RlciBPZmZzZXQgMHhELiAKKgkJVGhpcyBpcyBhbiB1cGNvdW50ZXIgb2YgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIGxvIHBhY2tldHMgZGlzY2FyZGVkIAoqCQlieSBRdWV1ZSBDb250cm9sbGVyLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZGlzQ3RyIC0gdXBjb3VudGVyIG9mIG51bWJlciBvZiBpc29jaHJvbm91cyBsbyBwYWNrZXRzIGRpc2NhcmRlZCAKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZHZXRHbG9iYWxJc29Mb0Rpc0N0cgooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1U4CQkqZGlzQ3RyCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRVc2VJcE1hcHBpbmdUYWJsZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgQVBJIHNldCB0byB1c2UgSVAgRnJhbWUgUHJpb3JpdGllcyBmcm9tIHRoaXMgdGFibGUuIAoqCQlTZXQgR1RfVFJVRTogIFRoZSBJUF9GUFJJIGRhdGEgaW4gdGhpcyB0YWJsZSBpcyB1c2VkIGFzIHRoZSBmcmFtZZJzIAoqCQkJaW5pdGlhbCBJUF9GUFJJIHVzZSBJcCBNYXBwaW5nZyB0YWJsZSBwcmlvcml0aWVzLgoqCQlTZXQgR1RfRkFMU0U6IFRoZSBJUF9GUFJJIGRhdGEgaW4gdGhpcyB0YWJsZSBpcyBpZ25vcmVkLiBJbnN0ZWFkIHRoZSAKKgkJCWZyYW1lknMgaW5pdGlhbCBJUF9GUFJJIGlzIGdlbmVyYXRlZCBieSB1c2luZyB0aGUgZnJhbWWScyBJUF9RUFJJCioJCQlhcyB0aGUgSVBfRlBSSZJzIHVwcGVyIHR3byBiaXRzLCBhbmQgdGhlIElQX0ZQUkmScyBsb3dlc3QgYml0IGNvbWVzIAoqCQkJZnJvbSBiaXQgMCBvZiB0aGUgZnJhbWWScyBzb3VyY2UgcG9ydJJzIERlZmF1bHQgUFJJIChQb3J0IG9mZnNldCAweDA3KS4KKgoqIElOUFVUUzoKKgkJZW4JLSBbR1RfVFJVRV0gLyBbR1RfRkFMU0VdCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFVzZUlwTWFwcGluZ1RhYmxlCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX0JPT0wJCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0VXNlSXBNYXBwaW5nVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIEFQSSBnZXQgdG8gdXNlIElQIEZyYW1lIFByaW9yaXRpZXMgZnJvbSB0aGlzIHRhYmxlLiAKKgkJU2V0IEdUX1RSVUU6ICBUaGUgSVBfRlBSSSBkYXRhIGluIHRoaXMgdGFibGUgaXMgdXNlZCBhcyB0aGUgZnJhbWWScyAKKgkJCWluaXRpYWwgSVBfRlBSSSB1c2UgSXAgTWFwcGluZ2cgdGFibGUgcHJpb3JpdGllcy4KKgkJU2V0IEdUX0ZBTFNFOiBUaGUgSVBfRlBSSSBkYXRhIGluIHRoaXMgdGFibGUgaXMgaWdub3JlZC4gSW5zdGVhZCB0aGUgCioJCQlmcmFtZZJzIGluaXRpYWwgSVBfRlBSSSBpcyBnZW5lcmF0ZWQgYnkgdXNpbmcgdGhlIGZyYW1lknMgSVBfUVBSSQoqCQkJYXMgdGhlIElQX0ZQUkmScyB1cHBlciB0d28gYml0cywgYW5kIHRoZSBJUF9GUFJJknMgbG93ZXN0IGJpdCBjb21lcyAKKgkJCWZyb20gYml0IDAgb2YgdGhlIGZyYW1lknMgc291cmNlIHBvcnSScyBEZWZhdWx0IFBSSSAoUG9ydCBvZmZzZXQgMHgwNykuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbgktIFtHVF9UUlVFXSAvIFtHVF9GQUxTRV0KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRVc2VJcE1hcHBpbmdUYWJsZQooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9CT09MCQkJKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRJcE1hcHBpbmdQcmlvCioKKiBERVNDUklQVElPTjoKKgkJU2V0IElQdjQgYW5kIElQdjYgRnJhbWUgUHJpb3JpdHkgTWFwcGluZywgYW5kIAoqCQlJUHY0IGFuZCBJUHY2IFF1ZXVlIFByaW9yaXR5IE1hcHBpbmcuCiogICAgICAgVGhlIGlwRnByaSB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBmcmFtZXMgaW5pdGlhbCBGUFJJIHdoZW4gdGhlIGZyYW1lIGlzIAoqCQlhbiBJUHY0IG9yIGFuIElQdjYgZnJhbWUsIGFuZCB0aGUgcG9ydJJzIEluaXRpYWxQcmkgKFBvcnQgb2Zmc2V0IDB4MDQpIAoqCQlpcyBjb25maWd1cmVkIHRvIHVzZSBJUCBGUHJpknMuCiogICAgICAgVGhlIGlwUXByaSB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBmcmFtZZJzIGluaXRpYWwgUVBSSSB3aGVuIHRoZSBmcmFtZSBpcyAKKgkJYW4gSVB2NCBvciBhbiBJUHY2IGZyYW1lLCBhbmQgdGhlIHBvcnSScyBJbml0aWFsUHJpIGFuZCBUYWdJZkJvdGggCioJCXJlZ2lzdGVycyAoUG9ydCBvZmZzZXQgMHgwNCkgYXJlIGNvbmZpZ3VyZWQgdG8gdXNlIElQIFFQcmmScy4KKgoqIElOUFVUUzoKKgkJcG9pbnQgLSBQb2ludGVyIHRvIHRoZSBJcCBNYXBwaW5nIFRhYmxlLgoqCQkJCTAgLSAweDNmOwoqCQlpcEZwcmkgLSAgVGhlIHZhbHVlIGlzIDAgLSA3CioJCWlwUXByaSAtICBUaGUgdmFsdWUgaXMgMCAtIDMuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldElwTWFwcGluZ1ByaW8KKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfVTMyCQkJcG9pbnQsCiAgICBJTiAgR1RfVTgJCQlpcEZwcmksCiAgICBJTiAgR1RfVTgJCQlpcFFwcmkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldElwTWFwcGluZ1ByaW8KKgoqIERFU0NSSVBUSU9OOgoqCQlHZXQgSVB2NCBhbmQgSVB2NiBGcmFtZSBQcmlvcml0eSBNYXBwaW5nLCBhbmQgCioJCUlQdjQgYW5kIElQdjYgUXVldWUgUHJpb3JpdHkgTWFwcGluZy4KKiAgICAgICBUaGUgaXBGcHJpIHZhbHVlIGlzIHVzZWQgYXMgdGhlIGZyYW1lcyBpbml0aWFsIEZQUkkgd2hlbiB0aGUgZnJhbWUgaXMgCioJCWFuIElQdjQgb3IgYW4gSVB2NiBmcmFtZSwgYW5kIHRoZSBwb3J0knMgSW5pdGlhbFByaSAoUG9ydCBvZmZzZXQgMHgwNCkgCioJCWlzIGNvbmZpZ3VyZWQgdG8gdXNlIElQIEZQcmmScy4KKgkJVGhlIGlwUXByaSB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBmcmFtZZJzIGluaXRpYWwgUVBSSSB3aGVuIHRoZSBmcmFtZSBpcyAKKgkJYW4gSVB2NCBvciBhbiBJUHY2IGZyYW1lLCBhbmQgdGhlIHBvcnSScyBJbml0aWFsUHJpIGFuZCBUYWdJZkJvdGggCioJCXJlZ2lzdGVycyAoUG9ydCBvZmZzZXQgMHgwNCkgYXJlIGNvbmZpZ3VyZWQgdG8gdXNlIElQIFFQcmmScy4KKgoqIElOUFVUUzoKKgkJcG9pbnQgLSBQb2ludGVyIHRvIHRoZSBJcCBNYXBwaW5nIFRhYmxlLgoqCQkJCTAgLSAweDNmOwoqCiogT1VUUFVUUzoKKgkJaXBGcHJpIC0gIFRoZSB2YWx1ZSBpcyAwIC0gNwoqCQlpcFFwcmkgLSAgVGhlIHZhbHVlIGlzIDAgLSAzLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRJcE1hcHBpbmdQcmlvCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX1UzMgkJCXBvaW50LAogICAgT1VUICBHVF9VOAkJCSppcEZwcmksCiAgICBPVVQgIEdUX1U4CQkJKmlwUXByaQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzUmVhZEVlcHJvbQoqCiogREVTQ1JJUFRJT046CioJCVJlYWQgRUVQUk9NIGZyb20gRUVQUk9NknMgYWRkcmVzcyB3aGVyZSB0aGUgRUVPcCBpcyBwZXJmb3JtZWQuCioKKiBJTlBVVFM6CioJCWFkZHIgLSBFRVBST00gQWRkcmVzcy4gCioKKiBPVVRQVVRTOgoqCQlkYXRhIC0gIERhdGEgdGhhdCB3YXMgcmVhZCBiYWNrIGZyb20gdGhlIEVFUFJPTS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNSZWFkRWVwcm9tCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX1UzMgkJCWFkZHIsCiAgICBPVVQgIEdUX1U4CQkJKmRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1dyaXRlRWVwcm9tCioKKiBERVNDUklQVElPTjoKKgkJV3JpdGUgRUVQUk9NIGF0IHRoZSBFRVBST02ScyBhZGRyZXNzIHdoZXJlIHRoZSBFRU9wIGlzIHBlcmZvcm1lZC4KKgoqIElOUFVUUzoKKgkJYWRkciAtIEVFUFJPTSBBZGRyZXNzLiAKKgkJZGF0YSAtIERhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgRUVQUk9NCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1dyaXRlRWVwcm9tCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX1UzMgkJCWFkZHIsCiAgICBJTiAgR1RfVTgJCQlkYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNSZXN0YXJ0RWVwcm9tCioKKiBERVNDUklQVElPTjoKKgkJUmVzdGFydCBSZWdpc3RlciBMb2FkZXIgZXhlY3V0aW9uIGF0IHRoZSBFRVBST02ScyBhZGRyZXNzIHdoZXJlIHRoZSBFRU9wIAoqCQlpcyBwZXJmb3JtZWQKKgoqIElOUFVUUzoKKgkJYWRkciAtIEVFUFJPTSBBZGRyZXNzLiAuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1Jlc3RhcnRFZXByb20KKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfVTMyCQkJYWRkcgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzSGFsdEVlcHJvbQoqCiogREVTQ1JJUFRJT046CioJCUhhbHQgKHN0b3AgZXhlY3V0aW5nIHRoZSBFRVBST00gaWYgaXRzIG5vdCBhbHJlYWR5IHN0b3BwZWQpCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0hhbHRFZXByb20KKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFN0RWVwcm9tCioKKiBERVNDUklQVElPTjoKKgkJR2V0IEVFUFJPTSBzdGF0dXMuIFRoZXkgYXJlIFJlZ2lzdGVyIExvYWRlciBSdW5uaW5nIHN0YXR1cyBhbmQgRUVQUk9NIAoqCQlXcml0ZSBFbmFibGUgc3RhdHVzCioJCXJ1blN0IGlzIEdUX1RSVUU6IFJlZ2lzdGVyIExvYWRlciBSdW5uaW5nLCB3aGVuZXZlciB0aGUgcmVnaXN0ZXIgbG9hZGVyIAoqCQkJaXMgYnVzeSBleGVjdXRpbmcgdGhlIGluc3RydWN0aW9ucyBjb250YWluZWQgaW4gdGhlIEVFUFJPTS4KKgkJd3JpdGVFbiBpcyBHVF9UUlVFOiBFRVBST00gV3JpdGUgRW5hYmxlLCB0aGF0IGluZGljYXRlcyB0aGF0IHdyaXRpbmcgdG8gCioJCQl0aGUgRUVQUk9NIGlzIHBvc3NpYmxlLiAKKgkJd3JpdGVFbiBpcyBHVF9GQUxTRTogdGhlIFdyaXRlIEVFUFJPTSBFRU9wIGFib3ZlIHdpbGwgbm90IGRvIGFueXRoaW5nLgoqCQkJVGhpcyByZWZsZWN0cyB0aGUgdmFsdWUgb2YgdGhlIEVFX1dFIGNvbmZpZ3VyYXRpb24gcGluIGFmdGVyIFJlc2V0LgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJcnVuU3QgICAtICAgW0dUX1RSVUVdIC8gW0dUX0ZBTFNFKQoqCQl3cml0ZUVuIC0gICBbR1RfVFJVRV0gLyBbR1RfRkFMU0UpCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0U3RFZXByb20KKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCglPVVQgR1RfQk9PTAkJCSp3cml0ZUVuLAoJT1VUIEdUX0JPT0wJCQkqcnVuU3QKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFNjcmF0Y2hNaXNjQ3RybAoqCiogREVTQ1JJUFRJT046CioJCVNldCBTY3JhdGNoIGFuZCBNaXNjIGNvbnRyb2wgZGF0YSB0byB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyLiAKKgkJVGhlIHJlZ2lzdGVyIG9mIFNjcmF0Y2ggYW5kIE1pc2MgY29udHJvbCBhcmUuCioJCQkJU2NyYXRjaCBCeXRlIDAKKgkJCQlTY3JhdGNoIEJ5dGUgMQoqCQkJCUdQSU8gQ29uZmlndXJhdGlvbgoqCQkJCVJlc2VydmVkIGZvciBmdXR1cmUgdXNlCioJCQkJR1BJTyBEaXJlY3Rpb24KKgkJCQlHUElPIERhdGEKKgkJCQlDT05GSUcgRGF0YSAwCioJCQkJQ09ORklHIERhdGEgMQoqCQkJCUNPTkZJRyBEYXRhIDIKKgkJCQlDT05GSUcgRGF0YSAzCioJCQkJU3luY0UgJiBUQUlDTEsxMjWScyBEcml2ZQoqCQkJCVA1knMgJiBDTEsxMjWScyBDbG9jayBEcml2ZQoqCQkJCVA2knMgQ2xvY2sgRHJpdmUKKgkJCQlFRVBST00gUGFkIGRyaXZlCioKKiBJTlBVVFM6CioJCXBvaW50IC0gUG9pbnRlciB0byB0aGUgU2NyYXRjaCBhbmQgTWlzYy4gQ29udHJvbCByZWdpc3Rlci4KKgkJZGF0YSAgLSBTY3JhdGNoIGFuZCBNaXNjLiBDb250cm9sIGRhdGEgd3JpdHRlbiB0byB0aGUgcmVnaXN0ZXIgCioJCQkJcG9pbnRlZCB0byBieSB0aGUgcG9pbnQgYWJvdmUuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFNjcmF0Y2hNaXNjQ3RybAooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9VMzIJCQlwb2ludCwKICAgIElOICBHVF9VOAkJCWRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFNjcmF0Y2hNaXNjQ3RybAoqCiogREVTQ1JJUFRJT046CioJCUdldCBTY3JhdGNoIGFuZCBNaXNjIGNvbnRyb2wgZGF0YSBmcm9tIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIuIAoqCQlUaGUgcmVnaXN0ZXIgb2YgU2NyYXRjaCBhbmQgTWlzYyBjb250cm9sIGFyZS4KKgkJCQlTY3JhdGNoIEJ5dGUgMAoqCQkJCVNjcmF0Y2ggQnl0ZSAxCioJCQkJR1BJTyBDb25maWd1cmF0aW9uCioJCQkJUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKgkJCQlHUElPIERpcmVjdGlvbgoqCQkJCUdQSU8gRGF0YQoqCQkJCUNPTkZJRyBEYXRhIDAKKgkJCQlDT05GSUcgRGF0YSAxCioJCQkJQ09ORklHIERhdGEgMgoqCQkJCUNPTkZJRyBEYXRhIDMKKgkJCQlTeW5jRSAmIFRBSUNMSzEyNZJzIERyaXZlCioJCQkJUDWScyAmIENMSzEyNZJzIENsb2NrIERyaXZlCioJCQkJUDaScyBDbG9jayBEcml2ZQoqCQkJCUVFUFJPTSBQYWQgZHJpdmUKCioKKiBJTlBVVFM6CioJCXBvaW50IC0gUG9pbnRlciB0byB0aGUgU2NyYXRjaCBhbmQgTWlzYy4gQ29udHJvbCByZWdpc3Rlci4KKgoqIE9VVFBVVFM6CioJCWRhdGEgLSBTY3JhdGNoIGFuZCBNaXNjLiBDb250cm9sIGRhdGEgcmVhZCBmcm9tIHRoZSByZWdpc3RlciAKKgkJCQlwb2ludGVkIHRvIGJ5IHRoZSBwb2ludCBhYm92ZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRTY3JhdGNoTWlzY0N0cmwKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfVTMyCQkJcG9pbnQsCiAgICBPVVQgIEdUX1U4CQkJKmRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFNjcmF0Y2hCaXRzCioKKiBERVNDUklQVElPTjoKKgkJU2V0IGJpdHMgdG8gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8c2NyYXRjaCBieXRlIDAgYW5kIDE+LgoqCQlUaGVzZSBiaXRzIGFyZSAxMDAlIGF2YWlsYWJsZSB0byBzb2Z0d2FyZSBmb3Igd2hhdGV2ZXIgcHVycG9zZSBkZXNpcmVkLiAKKgkJVGhlc2UgYml0cyBkbyBub3QgY29ubmVjdCB0byBhbnkgaGFyZHdhcmUgZnVuY3Rpb24uCioKKiBJTlBVVFM6CioJCXNjcml0Y2ggLSB3cml0dGVuIGJpdHMuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFNjcmF0Y2hCaXRzCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX1UxNgkJCXNjcmF0Y2gKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFNjcmF0Y2hCaXRzCioKKiBERVNDUklQVElPTjoKKgkJR2V0IGJpdHMgZnJvbSB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxzY3JhdGNoIGJ5dGUgMCBhbmQgMT4uCioJCVRoZXNlIGJpdHMgYXJlIDEwMCUgYXZhaWxhYmxlIHRvIHNvZnR3YXJlIGZvciB3aGF0ZXZlciBwdXJwb3NlIGRlc2lyZWQuIAoqCQlUaGVzZSBiaXRzIGRvIG5vdCBjb25uZWN0IHRvIGFueSBoYXJkd2FyZSBmdW5jdGlvbi4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCXNjcml0Y2ggLSByZWFkIGJpdHMuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0U2NyYXRjaEJpdHMKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBPVVQgIEdUX1UxNgkJCSpzY3JhdGNoCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRHcGlvQ29uZmlnTW9kCioKKiBERVNDUklQVElPTjoKKgkJU2V0IGJpdHMgdG8gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8R1BJTyBDb25maWd1cmF0aW9uPgoqCQl0byBjb25maWd1cmUgR1BJTyBtb2RlLgoqCQlUaGUgYml0cyBhcmUgc2hhcmVkIEdlbmVyYWwgUHVycG9zZSBJbnB1dCBPdXRwdXQgbW9kZSBCaXRzOgoqCQlCaXQgNiAtIEdUX0dQSU9fQklUXzY6CTE6R1BJT1s2XQkwOlNFX1JDTEsxCioJCUJpdCA1IC0gR1RfR1BJT19CSVRfNToJMTpHUElPWzVdCTA6U0VfUkNMSzAKKgkJTm93LCBmb2xsb2luZyBiaXRzIGFyZSByZWFkIG9ubHkuIAoqCQlCaXQgNCAtIEdUX0dQSU9fQklUXzQ6CTE6R1BJT1s0XQkwOgoqCQlCaXQgMyAtIEdUX0dQSU9fQklUXzM6CTE6R1BJT1szXQkwOgoqCQlCaXQgMiAtIEdUX0dQSU9fQklUXzI6CTE6R1BJT1syXQkwOgoqCQlCaXQgMSAtIEdUX0dQSU9fQklUXzE6CTE6R1BJT1sxXQkwOlA2X0NPTAoqCQlCaXQgMCAtIEdUX0dQSU9fQklUXzA6CTE6R1BJT1swXQkwOlA2X0NSUwoqCiogSU5QVVRTOgoqCQltb2RlIC0gT1IgW0dUX0dQSU9fQklUX3hdCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEdwaW9Db25maWdNb2QKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfVTMyCQkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0R3Bpb0NvbmZpZ01vZAoqCiogREVTQ1JJUFRJT046CioJCUdldCBtb2RlIGZyb20gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8R1BJTyBDb25maWd1cmF0aW9uPi4KKgkJVGhlIGJpdHMgYXJlIHNoYXJlZCBHZW5lcmFsIFB1cnBvc2UgSW5wdXQgT3V0cHV0IG1vZGUgQml0czoKKgkJQml0IDYgLSBHVF9HUElPX0JJVF82OgkxOkdQSU9bNl0JMDpTRV9SQ0xLMQoqCQlCaXQgNSAtIEdUX0dQSU9fQklUXzU6CTE6R1BJT1s1XQkwOlNFX1JDTEswCioJCU5vdywgZm9sbG9pbmcgYml0cyBhcmUgcmVhZCBvbmx5LiAKKgkJQml0IDQgLSBHVF9HUElPX0JJVF80OgkxOkdQSU9bNF0JMDoKKgkJQml0IDMgLSBHVF9HUElPX0JJVF8zOgkxOkdQSU9bM10JMDoKKgkJQml0IDIgLSBHVF9HUElPX0JJVF8yOgkxOkdQSU9bMl0JMDoKKgkJQml0IDEgLSBHVF9HUElPX0JJVF8xOgkxOkdQSU9bMV0JMDpQNl9DT0wKKgkJQml0IDAgLSBHVF9HUElPX0JJVF8wOgkxOkdQSU9bMF0JMDpQNl9DUlMKKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBPUiBbR1RfR1BJT19CSVRfeF0KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRHcGlvQ29uZmlnTW9kCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX1UzMgkJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRHcGlvRGlyZWN0aW9uCioKKiBERVNDUklQVElPTjoKKgkJU2V0IEdwaW8gZGlyZWN0aW9uIHRvIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPEdQSU8gRGlyZWN0aW9uPi4KKgkJVGhlIGJpdHMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgZGlyZWN0aW9uIG9mIEdQSU9bNjowXS4gCioJCVdoZW4gYSBHUElPknMgYml0IGlzIHNldCB0byBhIG9uZSB0aGF0IEdQSU8gd2lsbCBiZWNvbWUgYW4gaW5wdXQuIFdoZW4gYQoqCQlHUElPknMgYml0IGlzIGNsZWFyZWQgdG8gYSB6ZXJvIHRoYXQgR1BJTyB3aWxsIGJlY29tZSBhbiBvdXRwdXQKKgkJR2VuZXJhbCBQdXJwb3NlIElucHV0IE91dHB1dCBkaXJlY3Rpb24gYml0cyBhcmU6CioJCUJpdCA2IC0gR1RfR1BJT19CSVRfNgoqCQlCaXQgNSAtIEdUX0dQSU9fQklUXzUKKgkJQml0IDQgLSBHVF9HUElPX0JJVF80CioJCUJpdCAzIC0gR1RfR1BJT19CSVRfMwoqCQlCaXQgMiAtIEdUX0dQSU9fQklUXzIKKgkJQml0IDEgLSBHVF9HUElPX0JJVF8xCioJCUJpdCAwIC0gR1RfR1BJT19CSVRfMAoqCiogSU5QVVRTOgoqCQlkaXIgLSBPUiBbR1RfR1BJT19CSVRfeF0KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0R3Bpb0RpcmVjdGlvbgooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9VMzIJCQlkaXIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEdwaW9EaXJlY3Rpb24KKgoqIERFU0NSSVBUSU9OOgoqCQlnZXQgR3BpbyBkaXJlY3Rpb24gZnJvbSB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxHUElPIERpcmVjdGlvbj4uCioJCVRoZSBiaXRzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGRpcmVjdGlvbiBvZiBHUElPWzY6MF0uIAoqCQlXaGVuIGEgR1BJT5JzIGJpdCBpcyBzZXQgdG8gYSBvbmUgdGhhdCBHUElPIHdpbGwgYmVjb21lIGFuIGlucHV0LiBXaGVuIGEKKgkJR1BJT5JzIGJpdCBpcyBjbGVhcmVkIHRvIGEgemVybyB0aGF0IEdQSU8gd2lsbCBiZWNvbWUgYW4gb3V0cHV0CioJCUdlbmVyYWwgUHVycG9zZSBJbnB1dCBPdXRwdXQgZGlyZWN0aW9uIGJpdHMgYXJlOgoqCQlCaXQgNiAtIEdUX0dQSU9fQklUXzYKKgkJQml0IDUgLSBHVF9HUElPX0JJVF81CioJCUJpdCA0IC0gR1RfR1BJT19CSVRfNAoqCQlCaXQgMyAtIEdUX0dQSU9fQklUXzMKKgkJQml0IDIgLSBHVF9HUElPX0JJVF8yCioJCUJpdCAxIC0gR1RfR1BJT19CSVRfMQoqCQlCaXQgMCAtIEdUX0dQSU9fQklUXzAKKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWRpciAtIE9SIFtHVF9HUElPX0JJVF94XQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEdwaW9EaXJlY3Rpb24KKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBPVVQgIEdUX1UzMgkJCSpkaXIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEdwaW9EYXRhCioKKiBERVNDUklQVElPTjoKKgkJU2V0IEdwaW8gZGF0YSB0byB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxHUElPIGRhdGE+LgoqCQlXaGVuIGEgR1BJT5JzIGJpdCBpcyBzZXQgdG8gYmUgYW4gaW5wdXQsIGRhdGEgd3JpdHRlbiB0byB0aGlzIGJpdCB3aWxsIGdvIAoqCQl0byBhIGhvbGRpbmcgcmVnaXN0ZXIgYnV0IHdpbGwgbm90IGFwcGVhciBvbiB0aGUgcGluIG5vciBpbiB0aGlzIHJlZ2lzdGVyLiAKKgkJUmVhZHMgb2YgdGhpcyByZWdpc3RlciB3aWxsIHJldHVybiB0aGUgYWN0dWFsLCByZWFsLXRpbWUsIGRhdGEgdGhhdCBpcyAKKgkJYXBwZWFyaW5nIG9uIHRoZSBHUElPknMgcGluLgoqCQlXaGVuIGEgR1BJT5JzIGJpdCBpcyBzZXQgdG8gYmUgYW4gb3V0cHV0LCBkYXRhIHdyaXR0ZW4gdG8gdGhpcyBiaXQgd2lsbCBnbyAKKgkJdG8gYSBob2xkaW5nIHJlZ2lzdGVyIGFuZCB3aWxsIGFwcGVhciBvbiB0aGUgR1BJT5JzIHBpbi4gUmVhZHMgb2YgdGhpcyByZWdpc3RlciAKKgkJd2lsbCByZXR1cm4gdGhlIGFjdHVhbCwgcmVhbC10aW1lLCBkYXRhIHRoYXQgaXMgYXBwZWFyaW5nIG9uIHRoZSBHUElPknMgcGluIAoqCQkod2hpY2ggaW4gdGhpcyBjYXNlIHNob3VsZCBiZSB0aGUgZGF0YSB3cml0dGVuLCBidXQgaWYgaXRzIGlzbpJ0IHRoYXQgd291bGQgCioJCWJlIGFuIGluZGljYXRpb24gb2YgYSBjb25mbGljdCkuCioJCVdoZW4gYSBwaW6ScyBkaXJlY3Rpb24gY2hhbmdlcyBmcm9tIGlucHV0IHRvIG91dHB1dCwgdGhlIGRhdGEgbGFzdCB3cml0dGVuIAoqCQl0byB0aGUgaG9sZGluZyByZWdpc3RlciBhcHBlYXJzIG9uIHRoZSBHUElPknMgcGluCioJCUdlbmVyYWwgUHVycG9zZSBJbnB1dCBPdXRwdXQgZGF0YSBiaXRzIGFyZToKKgkJQml0IDYgLSBHVF9HUElPX0JJVF82CioJCUJpdCA1IC0gR1RfR1BJT19CSVRfNQoqCQlCaXQgNCAtIEdUX0dQSU9fQklUXzQKKgkJQml0IDMgLSBHVF9HUElPX0JJVF8zCioJCUJpdCAyIC0gR1RfR1BJT19CSVRfMgoqCQlCaXQgMSAtIEdUX0dQSU9fQklUXzEKKgkJQml0IDAgLSBHVF9HUElPX0JJVF8wCioKKiBJTlBVVFM6CioJCWRhdGEgLSBPUiBbR1RfR1BJT19CSVRfeF0KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0R3Bpb0RhdGEKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfVTMyCQkJZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0R3Bpb0RhdGEKKgoqIERFU0NSSVBUSU9OOgoqCQlnZXQgR3BpbyBkYXRhIHRvIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPEdQSU8gZGF0YT4uCioJCVdoZW4gYSBHUElPknMgYml0IGlzIHNldCB0byBiZSBhbiBpbnB1dCwgZGF0YSB3cml0dGVuIHRvIHRoaXMgYml0IHdpbGwgZ28gCioJCXRvIGEgaG9sZGluZyByZWdpc3RlciBidXQgd2lsbCBub3QgYXBwZWFyIG9uIHRoZSBwaW4gbm9yIGluIHRoaXMgcmVnaXN0ZXIuIAoqCQlSZWFkcyBvZiB0aGlzIHJlZ2lzdGVyIHdpbGwgcmV0dXJuIHRoZSBhY3R1YWwsIHJlYWwtdGltZSwgZGF0YSB0aGF0IGlzIAoqCQlhcHBlYXJpbmcgb24gdGhlIEdQSU+ScyBwaW4uCioJCVdoZW4gYSBHUElPknMgYml0IGlzIHNldCB0byBiZSBhbiBvdXRwdXQsIGRhdGEgd3JpdHRlbiB0byB0aGlzIGJpdCB3aWxsIGdvIAoqCQl0byBhIGhvbGRpbmcgcmVnaXN0ZXIgYW5kIHdpbGwgYXBwZWFyIG9uIHRoZSBHUElPknMgcGluLiBSZWFkcyBvZiB0aGlzIHJlZ2lzdGVyIAoqCQl3aWxsIHJldHVybiB0aGUgYWN0dWFsLCByZWFsLXRpbWUsIGRhdGEgdGhhdCBpcyBhcHBlYXJpbmcgb24gdGhlIEdQSU+ScyBwaW4gCioJCSh3aGljaCBpbiB0aGlzIGNhc2Ugc2hvdWxkIGJlIHRoZSBkYXRhIHdyaXR0ZW4sIGJ1dCBpZiBpdHMgaXNuknQgdGhhdCB3b3VsZCAKKgkJYmUgYW4gaW5kaWNhdGlvbiBvZiBhIGNvbmZsaWN0KS4KKgkJV2hlbiBhIHBpbpJzIGRpcmVjdGlvbiBjaGFuZ2VzIGZyb20gaW5wdXQgdG8gb3V0cHV0LCB0aGUgZGF0YSBsYXN0IHdyaXR0ZW4gCioJCXRvIHRoZSBob2xkaW5nIHJlZ2lzdGVyIGFwcGVhcnMgb24gdGhlIEdQSU+ScyBwaW4KKgkJR2VuZXJhbCBQdXJwb3NlIElucHV0IE91dHB1dCBkYXRhIGJpdHMgYXJlOgoqCQlCaXQgNiAtIEdUX0dQSU9fQklUXzYKKgkJQml0IDUgLSBHVF9HUElPX0JJVF81CioJCUJpdCA0IC0gR1RfR1BJT19CSVRfNAoqCQlCaXQgMyAtIEdUX0dQSU9fQklUXzMKKgkJQml0IDIgLSBHVF9HUElPX0JJVF8yCioJCUJpdCAxIC0gR1RfR1BJT19CSVRfMQoqCQlCaXQgMCAtIEdUX0dQSU9fQklUXzAKKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWRhdGEgLSBPUiBbR1RfR1BJT19CSVRfeF0KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRHcGlvRGF0YQooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9VMzIJCQkqZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Q29uZmlnRGF0YQoqCiogREVTQ1JJUFRJT046CioJCUdldCBSZXNldCBDb25maWd1cmF0aW9uIFBpbiBEYXRhIDAtMy4gCioJCVRoZXNlIHJlZ2lzdGVycyByZXR1cm4gdGhlIHZhbHVlcyBvYnNlcnZlZCBhZnRlciBhIGhhcmR3YXJlIFJlc2V0IG9uIHRoZSAKKgkJbGlzdGVkIENPTkZJRyBkYXRhIGxpc3RlZCBiZWxvdy4KKgkJCUNvbmZpZyBkYXRhIDA6CioJCQkgIEJpdAlDb25maWcJUGluJ3MgUHJpbWFyeSBOYW1lCioJCQkJMAlVU0VSWzBdCQlQNl9PVVREWzVdCioJCQkJMQlVU0VSWzFdCQlQNl9PVVREWzZdCioJCQkJMglVU0VSWzJdCQlQNl9PVVREWzddCioJCQkJMwlBRERSWzBdCQlQNV9PVVREWzBdCioJCQkJNAlBRERSWzFdCQlQNV9PVVREWzVdCioJCQkJNQlBRERSWzJdCQlQNV9PVVREWzZdCioJCQkJNglBRERSXTNdCQlQNV9PVVREWzddCioJCQkJNwlBRERSWzRdCQlQNV9PVVREWzFdCioJCQlDb25maWcgZGF0YSAxOgoqCQkJCTAJTEVEX1NFTFswXQlQMV9MRUQKKgkJCQkxCUxFRF9TRUxbMV0JUDJfTEVECioJCQkJMgk0Q09MIFAzX0xFRAoqCQkJCTMJTm9ybUN4CQlQNF9MRUQKKgkJCQk0CUp1bWJvCQlQMF9MRUQKKgkJCQk1CUVFX1dFCQlFRV9DUy9DMl9MRUQKKgkJCQk2CUZEX0ZMT1cJCUVFX0NMSy9DMV9MRUQKKgkJCQk3CUhEX0ZMT1cJCUVFX0RJTi9DMF9MRUQKKgkJCUNvbmZpZyBkYXRhIDI6CioJCQkJMAlQNV9NT0RFWzBdCVA1X09VVERbMl0KKgkJCQkxCVA1X01PREVbMV0JUDVfT1VURFszXQoqCQkJCTIJUDVfTU9ERVsyXQlQNV9PVVREWzRdCioJCQkJMwlSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQoqCQkJCTQJUDZfTU9ERVswXQlQNl9PVVREWzJdCioJCQkJNQlQNl9NT0RFWzFdCVA2X09VVERbM10KKgkJCQk2CVA2X01PREVbMl0JUDZfT1VURFs0XQoqCQkJCTcJUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKgkJCUNvbmZpZyBkYXRhIDM6CioJCQkJMAlSTVVfTU9ERVswXSBQNl9PVVREWzBdCioJCQkJMQlSTVVfTU9ERVsxXSBQNl9PVVREWzFdCioJCQkJMglTX1ZERE9TWzBdCVBUUF9UUklHIAoqCQkJCTMJQ0xLMTI1RU4JQ0xLMTI1CioJCQkJNAlQNV9WRERPU1swXSBQNV9HVFhDTEsKKgkJCQk1CVA1X1ZERE9TWzFdIFA1X09VVEVOCioJCQkJNglQNl9WRERPU1swXSBQNV9HVFhDTEsKKgkJCQk3CVA2X1ZERE9TWzFdIFA2X09VVEVOCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBjZmdEYXQgLSBHVF9DT05GSUdfRFRUQQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldENvbmZpZ0RhdGEKKAogICAgSU4gIEdUX1FEX0RFViAJCQkqZGV2LAogICAgT1VUICBHVF9DT05GSUdfREFUQQkJKmNmZ0RhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFN5bmNFVGFpCioKKiBERVNDUklQVElPTjoKKgkJU2V0IFN5bmNFIGFuZCBUYWkgdG8gdGhlIFNjcmF0Y2ggYW5kIE1pc2MuIENvbnRyb2wgcmVnaXN0ZXIgPFN5bmNFIGFuZCBUQUkgcGFkPi4KKgoqIElOUFVUUzoKKgkJenByIC0gWlBSIGZvciBTeW5jRSBhbmQgVEFJCioJCXpuciAtIFpOUiBmb3IgU3luY0UgYW5kIFRBSQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRTeW5jRVRhaQooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9VOAkJCXpwciwKICAgIElOICBHVF9VOAkJCXpucgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0U3luY0VUYWkKKgoqIERFU0NSSVBUSU9OOgoqCQlHZXQgU3luY0UgYW5kIFRhaSBmcm9tIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPFN5bmNFIGFuZCBUQUkgcGFkPi4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCXpwciAtIFpQUiBmb3IgU3luY0UgYW5kIFRBSQoqCQl6bnIgLSBaTlIgZm9yIFN5bmNFIGFuZCBUQUkqCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0U3luY0VUYWkKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBPVVQgIEdUX1U4CQkJKnpwciwKICAgIE9VVCAgR1RfVTgJCQkqem5yCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRQNl9DbG9jawoqCiogREVTQ1JJUFRJT046CioJCVNldCBQNl9jbG9jayB0byB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxQNl9DbG9jayBwYWQ+LgoqCiogSU5QVVRTOgoqCQl6cHIgLSBaUFIgZm9yIFA2X0Nsb2NrCioJCXpuciAtIFpOUiBmb3IgUDZfQ2xvY2sKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UDZfQ2xvY2sKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfVTgJCQl6cHIsCiAgICBJTiAgR1RfVTgJCQl6bnIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFA2X0Nsb2NrCioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXQgUDZfY2xvY2sgZnJvbSB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxQNl9DbG9jayBwYWQ+LgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJenByIC0gWlBSIGZvciBQNl9DbG9jawoqCQl6bnIgLSBaTlIgZm9yIFA2X0Nsb2NrCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UDZfQ2xvY2sKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBPVVQgIEdUX1U4CQkJKnpwciwKICAgIE9VVCAgR1RfVTgJCQkqem5yCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRQNV9DbG9jawoqCiogREVTQ1JJUFRJT046CiogICAgICAgU2V0IFA1X2Nsb2NrIHRvIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPFA1X0Nsb2NrIHBhZD4uCioKKiBJTlBVVFM6CioJCXpwciAtIFpQUiBmb3IgUDVfQ2xvY2sKKgkJem5yIC0gWk5SIGZvciBQNV9DbG9jawoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRQNV9DbG9jawooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9VOAkJCXpwciwKICAgIElOICBHVF9VOAkJCXpucgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0UDVfQ2xvY2sKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldCBQNV9jbG9jayBmcm9tIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPFA1X0Nsb2NrIHBhZD4uCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQl6cHIgLSBaUFIgZm9yIFA1X0Nsb2NrCioJCXpuciAtIFpOUiBmb3IgUDVfQ2xvY2sKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRQNV9DbG9jawooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIE9VVCAgR1RfVTgJCQkqenByLAogICAgT1VUICBHVF9VOAkJCSp6bnIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEVFUFJPTQoqCiogREVTQ1JJUFRJT046CiogICAgICAgU2V0IEVFUFJPTSBjeWNsZSB0byB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxFRVBST00gcGFkPi4KKgoqIElOUFVUUzoKKgkJZHNtIC0gRFNNIGZvciBFRVBST00gY3ljbGUKKgkJenByIC0gWlBSIGZvciBFRVBST00gY3ljbGUKKgkJem5yIC0gWk5SIGZvciBFRVBST00gY3ljbGUKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0RUVQUk9NCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX1U4CQkJZHNtLAogICAgSU4gIEdUX1U4CQkJenByLAogICAgSU4gIEdUX1U4CQkJem5yCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRFRVBST00KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldCBFRVBST00gY3ljbGUgdG8gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8RUVQUk9NIHBhZD4uCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlkc20gLSBEU00gZm9yIEVFUFJPTSBjeWNsZQoqCQl6cHIgLSBaUFIgZm9yIEVFUFJPTSBjeWNsZQoqCQl6bnIgLSBaTlIgZm9yIEVFUFJPTSBjeWNsZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEVFUFJPTQooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIE9VVCAgR1RfVTgJCQkqZHNtLAogICAgT1VUICBHVF9VOAkJCSp6cHIsCiAgICBPVVQgIEdUX1U4CQkJKnpucgopOwoKCi8qIGd0QWR2VmN0LmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZjdEdldEFkdkNhYmxlRGlhZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHBlcmZvcm0gdGhlIGFkdmFuY2VkIHZpcnR1YWwgY2FibGUgdGVzdCBmb3IgdGhlIHJlcXVlc3RlZAoqICAgICAgIHBvcnQgYW5kIHJldHVybnMgdGhlIHRoZSBzdGF0dXMgcGVyIE1ESSBwYWlyLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSBhZHZhbmNlIFZDVCBtb2RlIChlaXRoZXIgRmlyc3QgUGVhayBvciBNYXhpbXVtIFBlYWspCioKKiBPVVRQVVRTOgoqICAgICAgIGNhYmxlU3RhdHVzIC0gdGhlIHBvcnQgY29wcGVyIGNhYmxlIHN0YXR1cy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIEludGVybmFsIEdpZ2FiaXQgUGh5cyBpbiA4OEU2MTY1IGZhbWlseSBhbmQgODhFNjM1MSBmYW1pbHkgZGV2aWNlcwoqCQlhcmUgc3VwcG9ydGluZyB0aGlzIEFQSS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZjdEdldEFkdkNhYmxlRGlhZwooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBJTiAgR1RfQURWX1ZDVF9NT0RFIG1vZGUsCiAgICBPVVQgR1RfQURWX0NBQkxFX1NUQVRVUyAqY2FibGVTdGF0dXMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZjdEdldEFkdkV4dGVuZGVkU3RhdHVzCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBleHRlbmRlZCBjYWJsZSBzdGF0dXMsIHN1Y2ggYXMgUGFpciBQb2xvYXJpdHksCioJCVBhaXIgU3dhcCwgYW5kIFBhaXIgU2tldy4gTm90ZSB0aGF0IHRoaXMgcm91dGluZSB3aWxsIGJlIHN1Y2Nlc3Mgb25seQoqCQlpZiAxMDAwQmFzZS1UIExpbmsgaXMgdXAuCioJCURTUCBiYXNlZCBjYWJsZSBsZW5ndGggaXMgYWxzbyBwcm92aWRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBkZXYgIC0gcG9pbnRlciB0byBHVCBkcml2ZXIgc3RydWN0dXJlIHJldHVybmVkIGZyb20gbWRMb2FkRHJpdmVyCiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIGV4dGVuZGVkU3RhdHVzIC0gdGhlIGV4dGVuZGVkIGNhYmxlIHN0YXR1cy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCQlTdXBwb3J0aW5nIERldmljZSBsaXN0OgoqICAgICAgIAk4OEUxMTExLCA4OEUxMTEyLCA4OEUxMTQxfjYsIDg4RTExNDksIGFuZCBJbnRlcm5hbCBHaWdhYml0IFBoeXMgCioJCQlpbiA4OEU2MTY1IGZhbWlseSBhbmQgODhFNjM1MSBmYW1pbHkgZGV2aWNlcwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmN0R2V0QWR2RXh0ZW5kZWRTdGF0dXMKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgIHBvcnQsCiAgICBPVVQgR1RfQURWX0VYVEVOREVEX1NUQVRVUyAqZXh0ZW5kZWRTdGF0dXMKKTsKCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZgoKI2VuZGlmIC8qIF9fbXNBcGlfaCAqLwo=