LyoqCiAqIEZpbGU6IG9teHR5cGVzLmgKICogQnJpZWY6IERlZmluZXMgYmFzaWMgRGF0YSB0eXBlcyB1c2VkIGluIE9wZW5NQVggdjEuMC4yIGhlYWRlciBmaWxlcy4KICoKICogQ29weXJpZ2h0IKkgMjAwNS0yMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCiAqCiAqIFRoZXNlIG1hdGVyaWFscyBhcmUgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBsYXdzIGFuZCBjb250YWluIG1hdGVyaWFsIAogKiBwcm9wcmlldGFyeSB0byB0aGUgS2hyb25vcyBHcm91cCwgSW5jLiAgWW91IG1heSB1c2UgdGhlc2UgbWF0ZXJpYWxzIAogKiBmb3IgaW1wbGVtZW50aW5nIEtocm9ub3Mgc3BlY2lmaWNhdGlvbnMsIHdpdGhvdXQgYWx0ZXJpbmcgb3IgcmVtb3ZpbmcgCiAqIGFueSB0cmFkZW1hcmssIGNvcHlyaWdodCBvciBvdGhlciBub3RpY2UgZnJvbSB0aGUgc3BlY2lmaWNhdGlvbi4KICogCiAqIEtocm9ub3MgR3JvdXAgbWFrZXMgbm8sIGFuZCBleHByZXNzbHkgZGlzY2xhaW1zIGFueSwgcmVwcmVzZW50YXRpb25zIAogKiBvciB3YXJyYW50aWVzLCBleHByZXNzIG9yIGltcGxpZWQsIHJlZ2FyZGluZyB0aGVzZSBtYXRlcmlhbHMsIGluY2x1ZGluZywgCiAqIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyAKICogZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIG9yIG5vbi1pbmZyaW5nZW1lbnQgb2YgYW55IGludGVsbGVjdHVhbCBwcm9wZXJ0eS4gCiAqIEtocm9ub3MgR3JvdXAgbWFrZXMgbm8sIGFuZCBleHByZXNzbHkgZGlzY2xhaW1zIGFueSwgd2FycmFudGllcywgZXhwcmVzcyAKICogb3IgaW1wbGllZCwgcmVnYXJkaW5nIHRoZSBjb3JyZWN0bmVzcywgYWNjdXJhY3ksIGNvbXBsZXRlbmVzcywgdGltZWxpbmVzcywgCiAqIGFuZCByZWxpYWJpbGl0eSBvZiB0aGVzZSBtYXRlcmlhbHMuIAogKgogKiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIHdpbGwgdGhlIEtocm9ub3MgR3JvdXAsIG9yIGFueSBvZiBpdHMgUHJvbW90ZXJzLCAKICogQ29udHJpYnV0b3JzIG9yIE1lbWJlcnMgb3IgdGhlaXIgcmVzcGVjdGl2ZSBwYXJ0bmVycywgb2ZmaWNlcnMsIGRpcmVjdG9ycywgCiAqIGVtcGxveWVlcywgYWdlbnRzIG9yIHJlcHJlc2VudGF0aXZlcyBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzLCB3aGV0aGVyIAogKiBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBmb3IgbG9zdCByZXZlbnVlcywgCiAqIGxvc3QgcHJvZml0cywgb3Igb3RoZXJ3aXNlLCBhcmlzaW5nIGZyb20gb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZXNlIAogKiBtYXRlcmlhbHMuCiAqIAogKiBLaHJvbm9zIGFuZCBPcGVuTUFYIGFyZSB0cmFkZW1hcmtzIG9mIHRoZSBLaHJvbm9zIEdyb3VwIEluYy4gCiAqCiAqLwogIAojaWZuZGVmIF9PTVhUWVBFU19IXwojZGVmaW5lIF9PTVhUWVBFU19IXwoKI2luY2x1ZGUgPGxpbWl0cy5oPiAKCiNkZWZpbmUgT01YX0lOCiNkZWZpbmUgT01YX09VVAojZGVmaW5lIE9NWF9JTk9VVAoKCnR5cGVkZWYgZW51bSB7CiAgICAKICAgIC8qIE1hbmRhdG9yeSByZXR1cm4gY29kZXMgLSB1c2UgY2FzZXMgYXJlIGV4cGxpY2l0bHkgZGVzY3JpYmVkIGZvciBlYWNoIGZ1bmN0aW9uICovCiAgICBPTVhfU3RzX05vRXJyICAgICAgICAgICAgICAgICAgICA9ICAwLCAgICAvKiBObyBlcnJvciwgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKi8KICAgIE9NWF9TdHNfRXJyICAgICAgICAgICAgICAgICAgICAgID0gLTIsICAgIC8qIFVua25vd24vdW5zcGVjaWZpZWQgZXJyb3IgKi8gICAgCiAgICBPTVhfU3RzX0ludmFsaWRCaXRzdHJlYW1WYWxFcnIgICA9IC0xODIsICAvKiBJbnZhbGlkIHZhbHVlIGRldGVjdGVkIGR1cmluZyBiaXRzdHJlYW0gcHJvY2Vzc2luZyAqLyAgICAKICAgIE9NWF9TdHNfTWVtQWxsb2NFcnIgICAgICAgICAgICAgID0gLTksICAgIC8qIE5vdCBlbm91Z2ggbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIG9wZXJhdGlvbiAqLwogICAgT01YX1N0c0FDQUFDX0dhaW5DdHJFcnIgICAgCSAgICAgPSAtMTU5LCAgLyogQUFDOiBVbnN1cHBvcnRlZCBnYWluIGNvbnRyb2wgZGF0YSBkZXRlY3RlZCAqLwogICAgT01YX1N0c0FDQUFDX1ByZ051bUVyciAgICAgICAgICAgPSAtMTY3LCAgLyogQUFDOiBJbnZhbGlkIG51bWJlciBvZiBlbGVtZW50cyBmb3Igb25lIHByb2dyYW0gICAqLwogICAgT01YX1N0c0FDQUFDX0NvZWZWYWxFcnIgICAgICAgICAgPSAtMTYzLCAgLyogQUFDOiBJbnZhbGlkIHF1YW50aXplZCBjb2VmZmljaWVudCB2YWx1ZSAgICAgICAgICAqLyAgICAgCiAgICBPTVhfU3RzQUNBQUNfTWF4U2ZiRXJyICAgICAgICAgICA9IC0xNjIsICAvKiBBQUM6IEludmFsaWQgbWF4U2ZiIHZhbHVlIGluIHJlbGF0aW9uIHRvIG51bVN3YiAqLyAgICAKCU9NWF9TdHNBQ0FBQ19QbHNEYXRhRXJyCQkgICAgID0gLTE2MCwgIC8qIEFBQzogcHVsc2UgZXNjYXBlIHNlcXVlbmNlIGRhdGEgZXJyb3IgKi8KCiAgICAvKiBPcHRpb25hbCByZXR1cm4gY29kZXMgLSB1c2UgY2FzZXMgYXJlIGV4cGxpY2l0bHkgZGVzY3JpYmVkIGZvciBlYWNoIGZ1bmN0aW9uKi8KICAgIE9NWF9TdHNfQmFkQXJnRXJyICAgICAgICAgICAgICAgID0gLTUsICAgIC8qIEJhZCBBcmd1bWVudHMgKi8KCiAgICBPTVhfU3RzQUNBQUNfVG5zTnVtRmlsdEVyciAgICAgICA9IC0xNTcsICAvKiBBQUM6IEludmFsaWQgbnVtYmVyIG9mIFROUyBmaWx0ZXJzICAqLwogICAgT01YX1N0c0FDQUFDX1Ruc0xlbkVyciAgICAgICAgICAgPSAtMTU2LCAgLyogQUFDOiBJbnZhbGlkIFROUyByZWdpb24gbGVuZ3RoICAqLyAgIAogICAgT01YX1N0c0FDQUFDX1Ruc09yZGVyRXJyICAgICAgICAgPSAtMTU1LCAgLyogQUFDOiBJbnZhbGlkIG9yZGVyIG9mIFROUyBmaWx0ZXIgICovICAgICAgICAgICAgICAgICAgCiAgICBPTVhfU3RzQUNBQUNfVG5zQ29lZlJlc0VyciAgICAgICA9IC0xNTQsICAvKiBBQUM6IEludmFsaWQgYml0LXJlc29sdXRpb24gZm9yIFROUyBmaWx0ZXIgY29lZmZpY2llbnRzICAqLwogICAgT01YX1N0c0FDQUFDX1Ruc0NvZWZFcnIgICAgICAgICAgPSAtMTUzLCAgLyogQUFDOiBJbnZhbGlkIFROUyBmaWx0ZXIgY29lZmZpY2llbnRzICAqLyAgICAgICAgICAgICAgICAgIAogICAgT01YX1N0c0FDQUFDX1Ruc0RpcmVjdEVyciAgICAgICAgPSAtMTUyLCAgLyogQUFDOiBJbnZhbGlkIFROUyBmaWx0ZXIgZGlyZWN0aW9uICAqLyAgCgogICAgT01YX1N0c0lDSlBfSlBFR01hcmtlckVyciAgICAgICAgPSAtMTgzLCAgLyogSlBFRyBtYXJrZXIgZW5jb3VudGVyZWQgd2l0aGluIGFuIGVudHJvcHktY29kZWQgYmxvY2s7ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIdWZmbWFuIGRlY29kaW5nIG9wZXJhdGlvbiB0ZXJtaW5hdGVkIGVhcmx5LiAgICAgICAgICAgKi8KICAgIE9NWF9TdHNJQ0pQX0pQRUdNYXJrZXIgICAgICAgICAgID0gLTE4MSwgIC8qIEpQRUcgbWFya2VyIGVuY291bnRlcmVkOyBIdWZmbWFuIGRlY29kaW5nICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvcGVyYXRpb24gdGVybWluYXRlZCBlYXJseS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgIE9NWF9TdHNJUFBQX0NvbnRleHRNYXRjaEVyciAgICAgID0gLTE3LCAgIC8qIENvbnRleHQgcGFyYW1ldGVyIGRvZXNuJ3QgbWF0Y2ggdG8gdGhlIG9wZXJhdGlvbiAqLwoKICAgIE9NWF9TdHNTUF9FdmVuTWVkaWFuTWFza1NpemVFcnIgID0gLTE4MCwgIC8qIEV2ZW4gc2l6ZSBvZiB0aGUgTWVkaWFuIEZpbHRlciBtYXNrIHdhcyByZXBsYWNlZCBieSB0aGUgb2RkIG9uZSAqLwoKICAgIE9NWF9TdHNfTWF4aW11bUVudW1lcmF0aW9uICAgICAgID0gSU5UX01BWCAgLypQbGFjZWhvbGRlciwgZm9yY2VzIGVudW0gb2Ygc2l6ZSBPTVhfSU5UKi8KICAgIAogfSBPTVhSZXN1bHQ7ICAgICAgICAgIC8qKiBSZXR1cm4gdmFsdWUgb3IgZXJyb3IgdmFsdWUgcmV0dXJuZWQgZnJvbSBhIGZ1bmN0aW9uLiBJZGVudGljYWwgdG8gT01YX0lOVCAqLwoKIAovKiBPTVhfVTggKi8KI2lmIFVDSEFSX01BWCA9PSAweGZmCnR5cGVkZWYgdW5zaWduZWQgY2hhciBPTVhfVTg7CiNlbGlmIFVTSFJUX01BWCA9PSAweGZmIAp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBPTVhfVTg7IAojZWxzZQojZXJyb3IgT01YX1U4IHVuZGVmaW5lZAojZW5kaWYgCgogCi8qIE9NWF9TOCAqLwojaWYgU0NIQVJfTUFYID09IDB4N2YgCnR5cGVkZWYgc2lnbmVkIGNoYXIgT01YX1M4OwojZWxpZiBTSFJUX01BWCA9PSAweDdmIAp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgT01YX1M4OyAKI2Vsc2UKI2Vycm9yIE9NWF9TOCB1bmRlZmluZWQKI2VuZGlmCiAKIAovKiBPTVhfVTE2ICovCiNpZiBVU0hSVF9NQVggPT0gMHhmZmZmCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IE9NWF9VMTY7CiNlbGlmIFVJTlRfTUFYID09IDB4ZmZmZgp0eXBlZGVmIHVuc2lnbmVkIGludCBPTVhfVTE2OyAKI2Vsc2UKI2Vycm9yIE9NWF9VMTYgdW5kZWZpbmVkCiNlbmRpZgoKCi8qIE9NWF9TMTYgKi8KI2lmIFNIUlRfTUFYID09IDB4N2ZmZiAKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IE9NWF9TMTY7CiNlbGlmIElOVF9NQVggPT0gMHg3ZmZmIAp0eXBlZGVmIHNpZ25lZCBpbnQgT01YX1MxNjsgCiNlbHNlCiNlcnJvciBPTVhfUzE2IHVuZGVmaW5lZAojZW5kaWYKCgovKiBPTVhfVTMyICovCiNpZiBVSU5UX01BWCA9PSAweGZmZmZmZmZmCnR5cGVkZWYgdW5zaWduZWQgaW50IE9NWF9VMzI7CiNlbGlmIExPTkdfTUFYID09IDB4ZmZmZmZmZmYKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBPTVhfVTMyOyAKI2Vsc2UKI2Vycm9yIE9NWF9VMzIgdW5kZWZpbmVkCiNlbmRpZgoKCi8qIE9NWF9TMzIgKi8KI2lmIElOVF9NQVggPT0gMHg3ZmZmZmZmZgp0eXBlZGVmIHNpZ25lZCBpbnQgT01YX1MzMjsKI2VsaWYgTE9OR19NQVggPT0gMHg3ZmZmZmZmZgp0eXBlZGVmIGxvbmcgc2lnbmVkIGludCBPTVhfUzMyOyAKI2Vsc2UKI2Vycm9yIE9NWF9TMzIgdW5kZWZpbmVkCiNlbmRpZgoKCi8qIE9NWF9VNjQgJiBPTVhfUzY0ICovCiNpZiBkZWZpbmVkKCBfV0lOMzIgKSB8fCBkZWZpbmVkICggX1dJTjY0ICkKICAgIHR5cGVkZWYgX19pbnQ2NCBPTVhfUzY0OyAvKiogU2lnbmVkIDY0LWJpdCBpbnRlZ2VyICovCiAgICB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgT01YX1U2NDsgLyoqIFVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyICovCiAgICAjZGVmaW5lIE9NWF9NSU5fUzY0CQkJKDB4ODAwMDAwMDAwMDAwMDAwMGk2NCkKICAgICNkZWZpbmUgT01YX01JTl9VNjQJCQkoMHgwMDAwMDAwMDAwMDAwMDAwaTY0KQogICAgI2RlZmluZSBPTVhfTUFYX1M2NAkJCSgweDdGRkZGRkZGRkZGRkZGRkZpNjQpCiAgICAjZGVmaW5lIE9NWF9NQVhfVTY0CQkJKDB4RkZGRkZGRkZGRkZGRkZGRmk2NCkKI2Vsc2UKICAgIHR5cGVkZWYgbG9uZyBsb25nIE9NWF9TNjQ7IC8qKiBTaWduZWQgNjQtYml0IGludGVnZXIgKi8KICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIE9NWF9VNjQ7IC8qKiBVbnNpZ25lZCA2NC1iaXQgaW50ZWdlciAqLwogICAgI2RlZmluZSBPTVhfTUlOX1M2NAkJCSgweDgwMDAwMDAwMDAwMDAwMDBMTCkKICAgICNkZWZpbmUgT01YX01JTl9VNjQJCQkoMHgwMDAwMDAwMDAwMDAwMDAwTEwpCiAgICAjZGVmaW5lIE9NWF9NQVhfUzY0CQkJKDB4N0ZGRkZGRkZGRkZGRkZGRkxMKQogICAgI2RlZmluZSBPTVhfTUFYX1U2NAkJCSgweEZGRkZGRkZGRkZGRkZGRkZMTCkKI2VuZGlmCgoKLyogT01YX1NDOCAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgT01YX1M4IFJlOyAvKiogUmVhbCBwYXJ0ICovCiAgT01YX1M4IEltOyAvKiogSW1hZ2luYXJ5IHBhcnQgKi8JCgkKfSBPTVhfU0M4OyAvKiogU2lnbmVkIDgtYml0IGNvbXBsZXggbnVtYmVyICovCgoKLyogT01YX1NDMTYgKi8KdHlwZWRlZiBzdHJ1Y3QKewogIE9NWF9TMTYgUmU7IC8qKiBSZWFsIHBhcnQgKi8KICBPTVhfUzE2IEltOyAvKiogSW1hZ2luYXJ5IHBhcnQgKi8JCgkKfSBPTVhfU0MxNjsgLyoqIFNpZ25lZCAxNi1iaXQgY29tcGxleCBudW1iZXIgKi8KCgovKiBPTVhfU0MzMiAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgT01YX1MzMiBSZTsgLyoqIFJlYWwgcGFydCAqLwogIE9NWF9TMzIgSW07IC8qKiBJbWFnaW5hcnkgcGFydCAqLwkKCQp9IE9NWF9TQzMyOyAvKiogU2lnbmVkIDMyLWJpdCBjb21wbGV4IG51bWJlciAqLwoKCi8qIE9NWF9TQzY0ICovCnR5cGVkZWYgc3RydWN0CnsKICBPTVhfUzY0IFJlOyAvKiogUmVhbCBwYXJ0ICovCiAgT01YX1M2NCBJbTsgLyoqIEltYWdpbmFyeSBwYXJ0ICovCQoJCn0gT01YX1NDNjQ7IC8qKiBTaWduZWQgNjQtYml0IGNvbXBsZXggbnVtYmVyICovCgoKLyogT01YX0YzMiAqLwp0eXBlZGVmIGZsb2F0IE9NWF9GMzI7IC8qKiBTaW5nbGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50LElFRUUgNzU0ICovCgoKLyogT01YX0Y2NCAqLwp0eXBlZGVmIGRvdWJsZSBPTVhfRjY0OyAvKiogRG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCxJRUVFIDc1NCAqLwoKCi8qIE9NWF9JTlQgKi8KdHlwZWRlZiBpbnQgT01YX0lOVDsgLyoqIHNpZ25lZCBpbnRlZ2VyIGNvcnJlc3BvbmRpbmcgdG8gbWFjaGluZSB3b3JkIGxlbmd0aCwgaGFzIG1heGltdW0gc2lnbmVkIHZhbHVlIElOVF9NQVgqLwoKCiNkZWZpbmUgT01YX01JTl9TOCAgCSAgIAkoLTEyOCkKI2RlZmluZSBPTVhfTUlOX1U4ICAJCTAKI2RlZmluZSBPTVhfTUlOX1MxNgkJIAkoLTMyNzY4KQojZGVmaW5lIE9NWF9NSU5fVTE2CQkJMAojZGVmaW5lIE9NWF9NSU5fUzMyCQkJKC0yMTQ3NDgzNjQ3LTEpCiNkZWZpbmUgT01YX01JTl9VMzIJCQkwCgojZGVmaW5lIE9NWF9NQVhfUzgJCQkoMTI3KQojZGVmaW5lIE9NWF9NQVhfVTgJCQkoMjU1KQojZGVmaW5lIE9NWF9NQVhfUzE2CQkJKDMyNzY3KQojZGVmaW5lIE9NWF9NQVhfVTE2CQkJKDB4RkZGRikKI2RlZmluZSBPTVhfTUFYX1MzMgkJCSgyMTQ3NDgzNjQ3KQojZGVmaW5lIE9NWF9NQVhfVTMyCQkJKDB4RkZGRkZGRkYpCgp0eXBlZGVmIHZvaWQgT01YVm9pZDsKCiNpZm5kZWYgTlVMTAojZGVmaW5lIE5VTEwgKCh2b2lkKikwKQojZW5kaWYKCi8qKiBEZWZpbmVzIHRoZSBnZW9tZXRyaWMgcG9zaXRpb24gYW5kIHNpemUgb2YgYSByZWN0YW5nbGUsIAogICogd2hlcmUgeCx5IGRlZmluZXMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIKICAqIG9mIHRoZSByZWN0YW5nbGUsIHdpdGggZGltZW5zaW9ucyB3aWR0aCBpbiB0aGUgeC1kaXJlY3Rpb24gCiAgKiBhbmQgaGVpZ2h0IGluIHRoZSB5LWRpcmVjdGlvbiAqLwp0eXBlZGVmIHN0cnVjdCB7CglPTVhfSU5UIHg7ICAgICAgLyoqIHgtY29vcmRpbmF0ZSBvZiB0b3AgbGVmdCBjb3JuZXIgb2YgcmVjdGFuZ2xlICovCglPTVhfSU5UIHk7ICAgICAgLyoqIHktY29vcmRpbmF0ZSBvZiB0b3AgbGVmdCBjb3JuZXIgb2YgcmVjdGFuZ2xlICovCglPTVhfSU5UIHdpZHRoOyAgLyoqIFdpZHRoIGluIHRoZSB4LWRpcmVjdGlvbi4gKi8KCU9NWF9JTlQgaGVpZ2h0OyAvKiogSGVpZ2h0IGluIHRoZSB5LWRpcmVjdGlvbi4gKi8KfU9NWFJlY3Q7CgoKLyoqIERlZmluZXMgdGhlIGdlb21ldHJpYyBwb3NpdGlvbiBvZiBhIHBvaW50LCAqLwp0eXBlZGVmIHN0cnVjdCAKewogT01YX0lOVCB4OyAvKiogeC1jb29yZGluYXRlICovCiBPTVhfSU5UIHk7CS8qKiB5LWNvb3JkaW5hdGUgKi8KCQp9IE9NWFBvaW50OwoKCi8qKiBEZWZpbmVzIHRoZSBkaW1lbnNpb25zIG9mIGEgcmVjdGFuZ2xlLCBvciByZWdpb24gb2YgaW50ZXJlc3QgaW4gYW4gaW1hZ2UgKi8KdHlwZWRlZiBzdHJ1Y3QgCnsKIE9NWF9JTlQgd2lkdGg7ICAvKiogV2lkdGggb2YgdGhlIHJlY3RhbmdsZSwgaW4gdGhlIHgtZGlyZWN0aW9uICovCiBPTVhfSU5UIGhlaWdodDsgLyoqIEhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlLCBpbiB0aGUgeS1kaXJlY3Rpb24gKi8KCQp9IE9NWFNpemU7CgojZW5kaWYgLyogX09NWFRZUEVTX0hfICovCg==