LyoKICogIFUtYm9vdCAtIGkzODYgU3RhcnR1cCBDb2RlCiAqCiAqICBDb3B5cmlnaHQgKGMpIDIwMDIJT21pY3JvbiBDZXRpIEFCLCBEYW5pZWwgRW5nc3Ry9m0gPGRlbmFpZWxAb21pY3Jvbi5zZT4KICoKICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICogcHJvamVjdC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICogTUEgMDIxMTEtMTMwNyBVU0EKICovCgoKI2luY2x1ZGUgPGNvbmZpZy5oPgojaW5jbHVkZSA8dmVyc2lvbi5oPgoKCi5zZWN0aW9uIC50ZXh0Ci5jb2RlMzIKLmdsb2JsIF9zdGFydAoudHlwZSBfc3RhcnQsIEBmdW5jdGlvbgouZ2xvYmwgX2kzODZib290X3N0YXJ0Cl9pMzg2Ym9vdF9zdGFydDoKX3N0YXJ0OgoJbW92bCAgICAkMHgxOCwlZWF4CS8qIExvYWQgb3VyIHNlZ2VtZW50IHJlZ2lzdGVzLCB0aGUKCQkJCSAqIGdkdCBoYXZlIGFscmVhZHkgYmVlbiBsb2FkZWQgYnkgc3RhcnQxNi5TICovCgltb3Z3ICAgICVheCwlZnMKCW1vdncJJWF4LCVkcwoJbW92dyAgICAlYXgsJWdzCgltb3Z3ICAgICVheCwlZXMKCW1vdncgICAgJWF4LCVzcwoKCS8qIFdlIGNhbGwgYSBmZXcgZnVuY3Rpb25zIGluIHRoZSBib2FyZCBzdXBwb3J0IHBhY2thZ2UKCSAqIHNpbmNlIHdlIGhhdmUgbm8gc3RhY2sgeWV0IHdlJ2xsIGhhdmUgdG8gdXNlICVlYnAKCSAqIHRvIHN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcyAqLwoKCS8qIEVhcmx5IHBsYXRmb3JtIGluaXQgKHNldHVwIGdwaW8sIGV0YyApICovCgltb3YgICAgICRlYXJseV9ib2FyZF9pbml0X3JldCwgJWVicAoJam1wCWVhcmx5X2JvYXJkX2luaXQKZWFybHlfYm9hcmRfaW5pdF9yZXQ6CgoJLyogVGhlIF9fcG9ydDgwIGVudHJ5LXBvaW50IHNob3VsZCBiZSB1c2FiZSBieSBub3cgKi8KCS8qIHNvIHdlIHRyeSB0byBpbmRpY2F0ZSBwcm9ncmVzcyAqLwoJbW92dwkkMHgwMSwgJWF4Cgltb3ZsCSQucHJvZ3Jlc3MwLCAlZWJwCglqbXAJc2hvd19ib290X3Byb2dyZXNzX2FzbQoucHJvZ3Jlc3MwOgoKCS8qIHNpemUgbWVtb3J5ICovCgltb3YJJG1lbV9pbml0X3JldCwgJWVicAoJam1wICAgICBtZW1faW5pdAptZW1faW5pdF9yZXQ6CgoJLyogY2hlY2sgYW1tb3VudCBvZiBjb25maWd1cmVkIG1lbW9yeQoJICogKHdlIG5lZWQgYXRsZWFzdCBic3Mgc3RhcnQrYnNzIHNpemUrc3RhY2sgc2l6ZSkgKi8KCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc3RhcnQsICVlY3ggICAgICAgIC8qIEJTUyBzdGFydCAqLwoJYWRkbAkkX2kzODZib290X2Jzc19zaXplLCAlZWN4ICAgICAgICAgLyogQlNTIHNpemUgKi8KCWFkZGwJJENPTkZJR19TWVNfU1RBQ0tfU0laRSwgJWVjeAoJY21wbAklZWN4LCAlZWF4CglqYWUJbWVtX29rCgoJLyogaW5kaWNhdGUgKGxhY2sgb2YpIHByb2dyZXNzICovCgltb3Z3CSQweDgxLCAlYXgKCW1vdmwJJC5wcm9ncmVzczBhLCAlZWJwCglqbXAJc2hvd19ib290X3Byb2dyZXNzX2FzbQoucHJvZ3Jlc3MwYToKCWptcAlkaWUKbWVtX29rOgoKCS8qIGluZGljYXRlIHByb2dyZXNzICovCgltb3Z3CSQweDAyLCAlYXgKCW1vdmwJJC5wcm9ncmVzczEsICVlYnAKCWptcAlzaG93X2Jvb3RfcHJvZ3Jlc3NfYXNtCi5wcm9ncmVzczE6CgoJLyogY3JlYXRlIGEgc3RhY2sgYWZ0ZXIgdGhlIGJzcyAqLwoJbW92bCAgICAkX2kzODZib290X2Jzc19zdGFydCwgJWVheAoJYWRkbAkkX2kzODZib290X2Jzc19zaXplLCAlZWF4CglhZGRsCSRDT05GSUdfU1lTX1NUQUNLX1NJWkUsICVlYXgKCW1vdmwgICAgJWVheCwgJWVzcAoKCXB1c2hsCSQwCglwb3BsCSVlYXgKCWNtcGwJJDAsICVlYXgKCWpuZQlub19zdGFjawoJcHVzaAkkMHg1NWFhNTVhYQoJcG9wbAklZWJ4CgljbXBsCSQweDU1YWE1NWFhLCAlZWJ4CglqZQlzdGFja19vawoKbm9fc3RhY2s6CgkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KCW1vdncJJDB4ODIsICVheAoJbW92bAkkLnByb2dyZXNzMWEsICVlYnAKCWptcAlzaG93X2Jvb3RfcHJvZ3Jlc3NfYXNtCi5wcm9ncmVzczFhOgoJam1wIGRpZQoKCnN0YWNrX29rOgoJLyogaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KCW1vdncJJDB4MDMsICVheAoJbW92bAkkLnByb2dyZXNzMiwgJWVicAoJam1wCXNob3dfYm9vdF9wcm9ncmVzc19hc20KLnByb2dyZXNzMjoKCgkvKiBjb3B5IGRhdGEgc2VjdGlvbiB0byByYW0sIHNpemUgbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZCAqLwoJbW92bAkkX2kzODZib290X3JvbWRhdGFfZGVzdCwgJWVkaQkgIC8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KCW1vdmwJJF9pMzg2Ym9vdF9yb21kYXRhX3N0YXJ0LCAlZXNpCSAgLyogc291cmNlIGFkZHJlc3MgKi8KCW1vdmwJJF9pMzg2Ym9vdF9yb21kYXRhX3NpemUsICVlY3ggICAgIC8qIG51bWJlciBvZiBieXRlcyB0byBjb3B5ICovCgltb3ZsCSVlY3gsICVlYXgKCWFuZGwJJDMsICVlYXgKCWpueglkYXRhX2ZhaWwKCglzaHJsCSQyLCAlZWN4CSAgICAgICAgICAgICAgICAgIC8qIGNvcHkgNCBieXRlIGVhY2ggdGltZSAqLwoJY2xkCgljbXBsCSQwLCAlZWN4CglqZQlkYXRhX29rCmRhdGFfc2VnbWVudDoKCW1vdnNsCglsb29wCWRhdGFfc2VnbWVudAoJam1wCWRhdGFfb2sKZGF0YV9mYWlsOgoJLyogaW5kaWNhdGUgKGxhY2sgb2YpIHByb2dyZXNzICovCgltb3Z3CSQweDgzLCAlYXgKCW1vdmwJJC5wcm9ncmVzczJhLCAlZWJwCglqbXAJc2hvd19ib290X3Byb2dyZXNzX2FzbQoucHJvZ3Jlc3MyYToKCWptcAlkaWUKCmRhdGFfb2s6CgoJLyogaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KCW1vdncJJDB4MDQsICVheAoJbW92bAkkLnByb2dyZXNzMywgJWVicAoJam1wCXNob3dfYm9vdF9wcm9ncmVzc19hc20KLnByb2dyZXNzMzoKCgkvKiBjbGVhciBic3Mgc2VjdGlvbiBpbiByYW0sIHNpemUgbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZCAgKi8KCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc3RhcnQsICVlZGkgICAgICAgIC8qIE1LX0NIRyBCU1Mgc3RhcnQgKi8KCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc2l6ZSwgJWVjeCAgICAgICAgIC8qIEJTUyBzaXplICovCgltb3ZsCSVlY3gsICVlYXgKCWFuZGwJJDMsICVlYXgKCWpueglic3NfZmFpbAoJc2hybAkkMiwgJWVjeAkgICAgICAgICAgICAgICAgICAvKiBjbGVhciA0IGJ5dGUgZWFjaCB0aW1lICovCgljbGQKCWNtcGwJJDAsICVlY3gKCWplCWJzc19vawpic3M6Cgltb3ZsCSQwLCAoJWVkaSkKCWFkZAkkNCwgJWVkaQoJbG9vcAlic3MKCWptcAlic3Nfb2sKCmJzc19mYWlsOgoJLyogaW5kaWNhdGUgKGxhY2sgb2YpIHByb2dyZXNzICovCgltb3Z3CSQweDg0LCAlYXgKCW1vdmwJJC5wcm9ncmVzczNhLCAlZWJwCglqbXAJc2hvd19ib290X3Byb2dyZXNzX2FzbQoucHJvZ3Jlc3MzYToKCWptcAlkaWUKCmJzc19vazoKCgl3YmludmQKCgoJLyogaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KCW1vdncJJDB4MDUsICVheAoJbW92bAkkLnByb2dyZXNzNCwgJWVicAoJam1wCXNob3dfYm9vdF9wcm9ncmVzc19hc20KLnByb2dyZXNzNDoKCgljYWxsCXN0YXJ0X2kzODZib290ICAvKiBFbnRlciwgVS1ib290ISAqLwoKCS8qIGluZGljYXRlIChsYWNrIG9mKSBwcm9ncmVzcyAqLwoJbW92dwkkMHg4NSwgJWF4Cgltb3ZsCSQucHJvZ3Jlc3M0YSwgJWVicAoJam1wCXNob3dfYm9vdF9wcm9ncmVzc19hc20KLnByb2dyZXNzNGE6CgpkaWU6CWhsdAoJam1wCWRpZQoJaGx0Cg==