ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OTIwOWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvQ0hBTkdFTE9HCkBAIC0wLDAgKzEsNDM4IEBACit2ZXJzaW9uIDIuNTEKKyAgICAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBpbnRlcm5hdGlvbmFsaXNlZCBETlMuIE5vbi1BU0NJSSBjaGFyYWN0ZXJzCisgICAgICAgICAgICBpbiBkb21haW4gbmFtZXMgZm91bmQgaW4gL2V0Yy9ob3N0cywgL2V0Yy9ldGhlcnMgYW5kIAorCSAgICAvZXRjL2Ruc21hc3EuY29uZiB3aWxsIGJlIGNvcnJlY3RseSBoYW5kbGVkIGJ5IHRyYW5zbGF0aW9uIHRvCisgICAgICAgICAgICBwdW55Y29kZSwgYXMgc3BlY2lmaWVkIGluIFJGQzM0OTAuIFRoaXMgZnVuY3Rpb24gaXMgb25seQorICAgICAgICAgICAgYXZhaWxhYmxlIGlmIGRuc21hc3EgaXMgY29tcGlsZWQgd2l0aCBpbnRlcm5hdGlvbmFsaXNhdGlvbgorICAgICAgICAgICAgc3VwcG9ydCwgYW5kIGFkZHMgYSBkZXBlbmRlbmN5IG9uIEdOVSBsaWJpZG4uIFdpdGhvdXQgaTE4bgorICAgICAgICAgICAgc3VwcG9ydCwgZG5zbWFzcSBjb250aW51ZXMgdG8gYmUgY29tcGlsYWJsZSB3aXRoIGp1c3QKKyAgICAgICAgICAgIHN0YW5kYXJkIHRvb2xzLiBUaGFua3MgdG8gWXZlcyBEb3Jmc21hbiBmb3IgdGhlCisgICAgICAgICAgICBzdWdnZXN0aW9uLiAKKworICAgICAgICAgICAgQWRkIHR3byBtb3JlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgbGVhc2UtY2hhbmdlIHNjcmlwdHM6CisJICAgIEZpcnN0LCBETlNNQVNRX1NVUFBMSUVEX0hPU1ROQU1FOyB0aGlzIGlzIHNldCB0byB0aGUgaG9zdG5hbWUKKwkgICAgc3VwcGxpZWQgYnkgYSBjbGllbnQsIGV2ZW4gaWYgdGhlIGFjdHVhbCBob3N0bmFtZSB1c2VkIGlzCisJICAgIG92ZXItcmlkZGVuIGJ5IGRoY3AtaG9zdCBvciBkaGNwLWlnbm9yZS1uYW1lcyBkaXJlY3RpdmVzLgorCSAgICBBbHNvIEROU01BU1FfUkVMQVlfQUREUkVTUyB3aGljaCBnaXZlcyB0aGUgYWRkcmVzcyBvZiAKKyAgICAgICAgICAgIGEgREhDUCByZWxheSwgaWYgdXNlZC4KKwkgICAgU3VnZ2VzdGlvbnMgZnJvbSBNaWNoYWVsIFJhY2suCisKKwkgICAgRml4IHJlZ3Jlc3Npb24gd2hpY2ggYnJva2UgZWNobyBvZiByZWxheS1hZ2VudAorCSAgICBvcHRpb25zLiBUaGFua3MgdG8gTWljaGFlbCBSYWNrIGZvciBzcG90dGluZyB0aGlzLgorICAgICAgICAgIAorICAgICAgICAgICAgRG9uJ3QgdHJlYXQgb3B0aW9uIDY3IGFzIGJlaW5nIGludGVyY2hhbmdlYWJsZSB3aXRoCisgICAgICAgICAgICBkaGNwLWJvb3QgcGFyYW1ldGVycyBpZiBpdCdzIHNwZWNpZmllZCBhcworICAgICAgICAgICAgZGhjcC1vcHRpb24tZm9yY2UuCisKKwkgICAgTWFrZSB0aGUgY29kZSB0byBjYWxsIHNjcmlwdHMgb24gbGVhc2UtY2hhbmdlIGNvbXBpbGUtdGltZQorCSAgICBvcHRpb25hbC4gSXQgY2FuIGJlIHN3aXRjaGVkIG9mZiBieSBlZGl0aW5nIHNyYy9jb25maWcuaAorCSAgICBvciBidWlsZGluZyB3aXRoICJtYWtlIENPUFRTPS1ETk9fU0NSSVBUIi4KKyAKKwkgICAgTWFrZSB0aGUgVEZUUCBzZXJ2ZXIgY29wZSB3aXRoIGZpbGVuYW1lcyBmcm9tIFdpbmRvd3MvRE9TCisJICAgIHdoaWNoIHVzZSAnXCcgYXMgcGF0aG5hbWUgc2VwYXJhdG9yLiBUaGFua3MgdG8gUmFsZiBmb3IKKwkgICAgdGhlIHBhdGNoLgorCisJICAgIFVwZGF0ZWQgUG9saXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gSmFuIFBzb3RhLgorIAorCSAgICBXYXJuIGlmIGFuIElQIGFkZHJlc3MgaXMgZHVwbGljYXRlZCBpbiAvZXRjL2V0aGVycy4gVGhhbmtzCisJICAgIHRvIEZlbGl4IFNjaHdhcnogZm9yIHBvaW50aW5nIHRoaXMgb3V0LgorCisJICAgIFRlYWNoIC0tY29uZi1kaXIgdG8gdGFrZSBhbiBvcHRpb24gbGlzdCBvZiBmaWxlIHN1ZmZpY2VzCisJICAgIHdoaWNoIHdpbGwgYmUgaWdub3JlZCB3aGVuIHNjYW5uaW5nIHRoZSBkaXJlY3RvcnkuIFVzZWZ1bAorCSAgICBmb3IgYmFja3VwIGZpbGVzIGV0Yy4gVGhhbmtzIHRvIEhlbG11dCBIdWxsZW4gZm9yIHRoZQorCSAgICBzdWdnZXN0aW9uLiAKKworCSAgICBBZGQgbmV3IERIQ1Agb3B0aW9uIG5hbWVkIHRmdHBzZXJ2ZXItYWRkcmVzcywgd2hpY2gKKwkgICAgY29ycmVzcG9uZHMgdG8gdGhlIHRoaXJkIGFyZ3VtZW50IG9mIGRoY3AtYm9vdC4gVGhpcworCSAgICBhbGxvd3MgdGhlIGNvbXBsZXRlIGZ1bmN0aW9uYWxpdHkgb2YgZGhjcC1ib290IHRvIGJlCisJICAgIHJlcGxpY2F0ZWQgd2l0aCBkaGNwLW9wdGlvbi4gVXNlZnVsIHdoZW4gdXNpbmcgCisJICAgIGRoY3Atb3B0c2ZpbGUuCisKKwkgICAgVGVzdCB3aGljaCB1cHN0cmVhbSBuYW1lc2VydmVyIHRvIHVzZSBldmVyeSAxMCBzZWNvbmRzCisgICAgICAgICAgICBvciA1MCBxdWVyaWVzIGFuZCBub3QganVzdCB3aGVuIGEgcXVlcnkgdGltZXMgb3V0IGFuZCAKKyAgICAgICAgICAgIGlzIHJldHJpZWQuIFRoaXMgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2Ugd2hlbiB0aGVyZQorICAgICAgICAgICAgaXMgYSBzbG93IG5hbWVzZXJ2ZXIgaW4gdGhlIGxpc3QuIFRoYW5rcyB0byBKb2UgZm9yIHRoZQorICAgICAgICAgICAgc3VnZ2VzdGlvbi4gCisKKwkgICAgRG9uJ3QgZG8gYW55IFBYRSBwcm9jZXNzaW5nLCBldmVuIGZvciBjbGllbnRzIHdpdGggdGhlIAorCSAgICBjb3JyZWN0IHZlbmRvcmNsYXNzLCB1bmxlc3MgYXQgbGVhc3Qgb25lIHB4ZS1wcm9tcHQgb3IgCisgICAgICAgICAgICBweGUtc2VydmljZSBvcHRpb24gaXMgZ2l2ZW4uIFRoaXMgc3RvcHMgZG5zbWFzcSAKKyAgICAgICAgICAgIGludGVyZmVyaW5nIHdpdGggcHJveHkgUFhFIHN1YnN5c3RlbXMgd2hlbiBpdCBpcyBqdXN0IAorICAgICAgICAgICAgdGhlIERIQ1Agc2VydmVyLiBUaGFua3MgdG8gU3BlbmNlciBDbGFyayBmb3Igc3BvdHRpbmcgdGhpcy4KKworCSAgICBMaW1pdCB0aGUgYmxvY2tzaXplIHVzZWQgZm9yIFRGVFAgdHJhbnNmZXJzIHRvIGEgdmFsdWUKKwkgICAgd2hpY2ggYXZvaWRzIHBhY2tldCBmcmFnbWVudGF0aW9uLCBiYXNlZCBvbiB0aGUgTVRVIG9mIHRoZQorCSAgICBsb2NhbCBpbnRlcmZhY2UuIE1hbnkgbmV0Ym9vdCBST01zIGNhbid0IGNvcGUgd2l0aAorCSAgICBmcmFnbWVudGVkIHBhY2tldHMuCisKKwkgICAgSG9ub3VyIGRoY3AtaWdub3JlIGNvbmZpZ3VyYXRpb24gZm9yIFBYRSBhbmQgcHJveHktUFhFIAorCSAgICByZXF1ZXN0cy4gVGhhbmtzIHRvIE5pZWxzIEJhc2plcyBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKyAgICAgICAgICAgIFVwZGF0ZWQgRnJlbmNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gR2lsZGFzIExlIE5hZGFuLgorCisKK3ZlcnNpb24gMi41MAorCSAgICBGaXggc2VjdXJpdHkgcHJvYmxlbSB3aGljaCBhbGxvd2VkIGFueSBob3N0IHBlcm1pdHRlZCB0byAKKyAgICAgICAgICAgIGRvIFRGVFAgdG8gcG9zc2libHkgY29tcHJvbWlzZSBkbnNtYXNxIGJ5IHJlbW90ZSBidWZmZXIgCisgICAgICAgICAgICBvdmVyZmxvdyB3aGVuIFRGVFAgZW5hYmxlZC4gVGhhbmtzIHRvIENvcmUgU2VjdXJpdHkgCisJICAgIFRlY2hub2xvZ2llcyBhbmQgSXbDoW4gQXJjZSwgUGFibG8gSGVybsOhbiBKb3JnZSwgQWxlamFuZHJvIAorCSAgICBQYWJsbyBSb2RyaWd1ZXosIE1hcnTDrW4gQ29jbywgQWxiZXJ0byBTb2xpw7FvIFRlc3RhIGFuZAorCSAgICBQYWJsbyBBbm5ldHRhLiBUaGlzIHByb2JsZW0gaGFzIEJ1Z3RyYXEgaWQ6IDM2MTIxIAorICAgICAgICAgICAgYW5kIENWRTogMjAwOS0yOTU3CisKKyAgICAgICAgICAgIEZpeCBhIHByb2JsZW0gd2hpY2ggYWxsb3dlZCBhIG1hbGljaW91cyBURlRQIGNsaWVudCB0byAKKyAgICAgICAgICAgIGNyYXNoIGRuc21hc3EuIFRoYW5rcyB0byBTdGV2ZSBHcnViYiBhdCBSZWQgSGF0IGZvciAKKyAgICAgICAgICAgIHNwb3R0aW5nIHRoaXMuIFRoaXMgcHJvYmxlbSBoYXMgQnVndHJhcSBpZDogMzYxMjAgYW5kIAorICAgICAgICAgICAgQ1ZFOiAyMDA5LTI5NTgKKworCit2ZXJzaW9uIDIuNDkKKyAgICAgICAgICAgIEZpeCByZWdyZXNzaW9uIGluIDIuNDggd2hpY2ggZGlzYWJsZXMgdGhlIGxlYXNlLWNoYW5nZQorICAgICAgICAgICAgc2NyaXB0LiBUaGFua3MgdG8gSm9zZSBMdWlzIER1cmFuIGZvciBzcG90dGluZyB0aGlzLgorCisJICAgIExvZyBURlRQICJmaWxlIG5vdCBmb3VuZCIgZXJyb3JzLiBUaGVzZSB3ZXJlIG5vdCBsb2dnZWQsCisJICAgIHNpbmNlIGEgbm9ybWFsIFBYRUxpbnV4IGJvb3QgZ2VuZXJhdGVzIG1hbnkgb2YgdGhlbSwgYnV0CisJICAgIHRoZSBsYWNrIG9mIHRoZSBtZXNzYWdlcyBzZWVtcyB0byBiZSBtb3JlIGNvbmZ1c2luZyB0aGFuCisJICAgIHJvdXRpbmVseSBzZWVpbmcgdGhlbSB3aGVuIHRoZXJlIGlzIG5vIHJlYWwgZXJyb3IuCisKKwkgICAgVXBkYXRlIFNwYW5pc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBDaHJpcyBDaGF0aGFtLgorIAorCit2ZXJzaW9uIDIuNDgKKyAgICAgICAgICAgIEFyY2hpdmVkIHRoZSBleHRlbnNpdmUsIGJhY2t3YXJkcywgY2hhbmdlbG9nIHRvCisgICAgICAgICAgICBDSEFOR0VMT0cuYXJjaGl2ZS4gVGhlIGN1cnJlbnQgY2hhbmdlbG9nIG5vdyBydW5zIGZyb20KKyAgICAgICAgICAgIHZlcnNpb24gMi40MyBhbmQgcnVucyBjb252ZW50aW9uYWxseS4KKworCSAgICBGaXhlZCBidWcgd2hpY2ggYnJva2UgYmluZGluZyBvZiBzZXJ2ZXJzIHRvIHBoeXNpY2FsCisJICAgIGludGVyZmFjZXMgd2hlbiBpbnRlcmZhY2UgbmFtZXMgd2VyZSBsb25nZXIgdGhhbiBmb3VyCisJICAgIGNoYXJhY3RlcnMuIFRoYW5rcyB0byBNVVJBU0UgS2F0c3Vub3JpIGZvciB0aGUgcGF0Y2guCisKKwkgICAgRml4ZWQgbmV0bGluayBjb2RlIHRvIGNoZWNrIHRoYXQgbWVzc2FnZXMgY29tZSBmcm9tIHRoZQorCSAgICBjb3JyZWN0IHNvdXJjZSwgYW5kIG5vdCBhbm90aGVyIHVzZXJzcGFjZSBwcm9jZXNzLiBUaGFua3MKKwkgICAgdG8gU3RldmUgR3J1YmIgZm9yIHRoZSBwYXRjaC4KKworCSAgICBNYWludGFpbmFiaWxpdHkgZHJpdmU6IHJlbW92ZWQgYnVnIGFuZCBtaXNzaW5nIGZlYXR1cmUKKwkgICAgd29ya2Fyb3VuZHMgZm9yIHNvbWUgb2xkIHBsYXRmb3Jtcy4gU29sYXJpcyA5LCBPcGVuQlNECisJICAgIG9sZGVyIHRoYW4gNC4xLCBHbGliYyBvbGRlciB0aGFuIDIuMiwgTGludXggMi4yLnggYW5kIAorICAgICAgICAgICAgREJ1cyBvbGRlciB0aGFuIDEuMS54IGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLiAKKworCSAgICBEb24ndCByZWFkIGluY2x1ZGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMgbW9yZSB0aGFuIG9uY2U6CisJICAgIGFsbG93cyBjb21wbGV4IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlcyB3aXRob3V0IHByb2JsZW1zLgorCisJICAgIE1hcmsgbG9nIG1lc3NhZ2VzIGZyb20gdGhlIHZhcmlvdXMgc3Vic3lzdGVtcyBpbiBkbnNtYXNxOgorCSAgICBtZXNzYWdlcyBmcm9tIHRoZSBESENQIHN1YnN5c3RlbSBub3cgaGF2ZSB0aGUgaWRlbnQgc3RyaW5nCisJICAgICJkbnNtYXNxLWRoY3AiIGFuZCBtZXNzYWdlcyBmcm9tIFRGVFAgaGF2ZSBpZGVudAorCSAgICAiZG5zbWFzcS10ZnRwIi4gVGhhbmtzIHRvIE9sYWYgV2VzdHJpayBmb3IgdGhlIHBhdGNoLgorCisJICAgIEZpeCBwb3NzaWJsZSBpbmZpbml0ZSBESENQIHByb3RvY29sIGxvb3Agd2hlbiBhbiBJUAorCSAgICBhZGRyZXNzIG5haWxlZCB0byBhIGhvc3RuYW1lIChub3QgYSBNQUMgYWRkcmVzcykgIGFuZCBhIAorCSAgICBob3N0IHNvbWV0aW1lcyBwcm92aWRlcyB0aGUgbmFtZSwgc29tZXRpbWVzIG5vdC4KKworCSAgICBBbGxvdyAtLWFkZG4taG9zdHMgdG8gdGFrZSBhIGRpcmVjdG9yeTogYWxsIHRoZSBmaWxlcyAKKwkgICAgaW4gdGhlIGRpcmVjdG9yeSBhcmUgcmVhZC4gVGhhbmtzIHRvIFBoaWwgQ29ybmVsaXVzIGZvciAKKwkgICAgdGhlIHN1Z2dlc3Rpb24uIAorCisJICAgIFN1cHBvcnQgLS1icmlkZ2UtaW50ZXJmYWNlIG9uIGFsbCBwbGF0Zm9ybXMsIG5vdCBqdXN0IEJTRC4KKyAKKyAgICAgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGFkdmFuY2VkIFBYRSBmdW5jdGlvbnMuIEl0J3Mgbm93CisgICAgICAgICAgICBwb3NzaWJsZSB0byBkZWZpbmUgYSBwcm9tcHQgYW5kIG1lbnUgb3B0aW9ucyB3aGljaCB3aWxsCisgICAgICAgICAgICBiZSBkaXNwbGF5ZWQgd2hlbiBhIGNsaWVudCBQWEUgYm9vdHMuIEl0J3MgYWxzbyBwb3NzaWJsZSB0bworICAgICAgICAgICAgaGFuZC1vZmYgYm9vdGluZyB0byBvdGhlciBib290IHNlcnZlcnMuIFByb3h5LURIQ1AsIHdoZXJlCisgICAgICAgICAgICBkbnNtYXNxIGp1c3Qgc3VwcGxpZXMgdGhlIFBYRSBpbmZvcm1hdGlvbiBhbmQgYW5vdGhlciBESENQCisgICAgICAgICAgICBzZXJ2ZXIgZG9lcyBhZGRyZXNzIGFsbG9jYXRpb24sIGlzIGFsc28gYWxsb3dlZC4gU2VlIHRoZQorICAgICAgICAgICAgLS1weGUtcHJvbXB0IGFuZCAtLXB4ZS1zZXJ2aWNlIGtleXdvcmRzLiBUaGFua3MgdG8gCisJICAgIEFsa2lzIEdlb3Jnb3BvdWxvcyBmb3IgdGhlIHN1Z2dlc3Rpb24gYW5kIEd1aWxoZXJtZSBNb3JvCisgICAgICAgICAgICBhbmQgTWljaGFlbCBCcm93biBmb3IgYXNzaXN0YW5jZS4KKworCSAgICBJbXByb3ZlbWVudHMgdG8gREhDUCBsb2dnaW5nLiBUaGFua3MgdG8gVG9tIE1ldHJvIGZvcgorCSAgICB1c2VmdWwgc3VnZ2VzdGlvbnMuCisJICAgIAorCSAgICBBZGQgYWJpbGl0eSB0byBidWlsZCBkbnNtYXNxIHdpdGhvdXQgREhDUCBzdXBwb3J0LiBUbyBkbworCSAgICB0aGlzLCBlZGl0IHNyYy9jb25maWcuaCBvciBidWlsZCB3aXRoCisJICAgICJtYWtlIENPUFRTPS1ETk9fREhDUCIuIFRoYW5rcyB0byBNYWhhdmlyIEphaW4gZm9yIHRoZSBwYXRjaC4gCisJICAgIAorCSAgICBBZGRlZCAtLXRlc3QgY29tbWFuZC1saW5lIHN3aXRjaCAtIHN5bnRheCBjaGVjaworCSAgICBjb25maWd1cmF0aW9uIGZpbGVzIG9ubHkuCisgCisgICAgICAgICAgICBVcGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCit2ZXJzaW9uIDIuNDcKKwkgICAgVXBkYXRlZCBGcmVuY2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBHaWxkYXMgTGUgTmFkYW4uCisKKwkgICAgRml4ZWQgaW50ZXJmYWNlIGVudW1lcmF0aW9uIGNvZGUgdG8gd29yayBvbiBOZXRCU0QKKwkgICAgNS4wLiBUaGFua3MgdG8gUm95IE1hcnBsZXMgZm9yIHRoZSBwYXRjaC4gCisKKwkgICAgVXBkYXRlZCBjb25maWcuaCB0byB1c2UgdGhlIHNhbWUgbG9jYXRpb24gZm9yIHRoZSBsZWFzZQorCSAgICBmaWxlIG9uIE5ldEJTRCBhcyB0aGUgb3RoZXIgKkJTRCB2YXJpYW50cy4gQWxzbyBhbGxvdworCSAgICBMRUFTRUZJTEUgYW5kIENPTkZGSUxFIHN5bWJvbHMgdG8gYmUgb3ZlcnJpZGVuIGluIENGTEFHUy4gIAorCisgICAgICAgICAgICBIYW5kbGUgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0aW9uIG9uIElQdjYgbW9yZQorICAgICAgICAgICAgaW50ZWxsaWdlbnRseS4gSW4gSVB2NiwgYW4gaW50ZXJmYWNlIGNhbiBoYXZlIGFuIGFkZHJlc3MKKyAgICAgICAgICAgIHdoaWNoIGlzIG5vdCB1c2FibGUsIGJlY2F1c2UgaXQgaXMgc3RpbGwgdW5kZXJnb2luZyBEQUQKKyAgICAgICAgICAgIChzdWNoIGFkZHJlc3NlcyBhcmUgbWFya2VkICJ0ZW50YXRpdmUiKS4gQXR0ZW1wdGluZyB0bworICAgICAgICAgICAgYmluZCB0byBhbiBhZGRyZXNzIGluIHRoaXMgc3RhdGUgcmV0dXJucyBhbiBlcnJvciwKKyAgICAgICAgICAgIEVBRERSTk9UQVZBSUwuIFByZXZpb3VzbHksIG9uIGdldHRpbmcgc3VjaCBhbiBlcnJvciwKKyAgICAgICAgICAgIGRuc21hc3Egd291bGQgc2lsZW50bHkgYWJhbmRvbiB0aGUgYWRkcmVzcywgYW5kIG5ldmVyCisgICAgICAgICAgICBsaXN0ZW4gb24gaXQuIE5vdywgaXQgcmV0cmllcyBvbmNlIHBlciBzZWNvbmQgZm9yIDIwCisgICAgICAgICAgICBzZWNvbmRzIGJlZm9yZSBnZW5lcmF0aW5nIGEgZmF0YWwgZXJyb3IuIDIwIHNlY29uZHMgc2hvdWxkCisgICAgICAgICAgICBiZSBsb25nIGVub3VnaCBmb3IgYW55IERBRCBwcm9jZXNzIHRvIGNvbXBsZXRlLCBidXQgY2FuIGJlCisgICAgICAgICAgICBhZGp1c3RlZCBpbiBzcmMvY29uZmlnLmggaWYgbmVjZXNzYXJ5LiBUaGFua3MgdG8gTWFydGluCisgICAgICAgICAgICBLcmFmZnQgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEFkZCBEQnVzIGludHJvc3BlY3Rpb24uIFBhdGNoIGZyb20gSmVyZW15IExhaW5lLgorCisJICAgIFVwZGF0ZSBEYnVzIGNvbmZpZ3VyYXRpb24gZmlsZS4gUGF0Y2ggZnJvbSBDb2xpbiBXYWx0ZXJzLgorCSAgICBGaXggZm9yIHRoaXMgYnVnOgorICAgICAgICAgICAgaHR0cDovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0xODk2MQorCisJICAgIFN1cHBvcnQgYXJiaXRyYXJpbHkgZW5jYXBzdWxhdGVkIERIQ1Agb3B0aW9ucywgc3VnZ2VzdGlvbgorCSAgICBhbmQgaW5pdGlhbCBwYXRjaCBmcm9tIFNhbWl1bSBHcm9tb2ZmLiBUaGlzIGlzIHVzZWZ1bCBmb3IKKwkgICAgKGVnKSBnUFhFLCB3aGljaCBleHBlY3QgYWxsIGl0cyBwcml2YXRlIG9wdGlvbnMgdG8gYmUKKwkgICAgZW5jYXBzdWxhdGVkIGluc2lkZSBhIHNpbmdsZSBvcHRpb24gMTc1LiBTbywgZWcsIAorCisgICAgICAgICAgICBkaGNwLW9wdGlvbiA9IGVuY2FwOjE3NSwgMTkwLCAiaXNjc2ktY2xpZW50MCIKKyAgICAgICAgICAgIGRoY3Atb3B0aW9uID0gZW5jYXA6MTc1LCAxOTEsICJpc2NzaS1jbGllbnQwLXNlY3JldCIKKwkgICAgCisJICAgIHdpbGwgcHJvdmlkZSBpU0NTSSBwYXJhbWV0ZXJzIHRvIGdQWEUuCisKKwkgICAgRW5oYW5jZSAtLWRoY3AtbWF0Y2ggdG8gYWxsb3cgdGVzdGluZyBvZiB0aGUgY29udGVudHMgb2YgYQorCSAgICBjbGllbnQtc2VudCBvcHRpb24sIGFzIHdlbGwgYXMgaXRzIHByZXNlbmNlLiBUaGlzCisJICAgIGFwcGxpY2F0aW9uIGluIG1pbmQgZm9yIHRoaXMgaXMgUkZDIDQ1NzgKKwkgICAgY2xpZW50LWFyY2hpdGVjdHVyZSBzcGVjaWZpZXJzLCBidXQgaXQncyBnZW5lcmFsbHkgdXNlZnVsLgorCSAgICBKb2V5IEtvcmthbWVzIHN1Z2dlc3RlZCB0aGUgZW5oYW5jZW1lbnQuIAorCisJICAgIE1vdmUgZnJvbSB1c2luZyB0aGUgSVBfWE1JVF9JRiBpb2N0bCB0byBJUF9CT1VORF9JRiBvbgorCSAgICBPcGVuU29sYXJpcy4gVGhhbmtzIHRvIEJhc3RpYW4gTWFjaGVrIGZvciB0aGUgaGVhZHMtdXAuCisKKwkgICAgTm8gbG9uZ2VyIGNvbXBsYWluIGFib3V0IGJsYW5rIGxpbmVzIGluCisJICAgIC9ldGMvZXRoZXJzLiBUaGFua3MgdG8gSm9uIE5lbHNvbiBmb3IgdGhlIHBhdGNoLgorCisJICAgIEZpeCBiaW5kaW5nIG9mIHNlcnZlcnMgdG8gcGh5c2ljYWwgZGV2aWNlcywgZWcKKwkgICAgLS1zZXJ2ZXI9L2RvbWFpbi8xLjIuMy40QGV0aDAgd2hpY2ggd2FzIGJyb2tlbiBmcm9tIDIuNDMKKwkgICAgb253YXJkcyB1bmxlc3MgLS1xdWVyeS1wb3J0PTAgc2V0LiBUaGFua3MgdG8gUGV0ZXIgTmF1bGxzCisJICAgIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCSAgICBSZXBseSB0byBESENQSU5GT1JNIHJlcXVlc3RzIGV2ZW4gd2hlbiB0aGUgc3VwcGxpZWQgY2lhZGRyCisJICAgIGRvZXNuJ3QgZmFsbCBpbiBhbnkgZGhjcC1yYW5nZS4gSW4gdGhpcyBjYXNlIGl0J3Mgbm90CisJICAgIHBvc3NpYmxlIHRvIHN1cHBseSBhIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24sIGJ1dAorCSAgICBpbmRpdmlkdWFsbHktY29uZmlndXJlZCBvcHRpb25zIChlZyBQQUMpIG1heSBiZSB1c2VmdWwuCisKKwkgICAgQWxsb3cgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIGFuIGFsaWFzIHRvIGJlIGEgcmFuZ2U6CisJICAgIC0tYWxpYXM9MTkyLjE2OC4wLjAsMTAuMC4wLjAsMjU1LjI1NS4yNTUuMCBtYXBzIHRoZSB3aG9sZQorCSAgICBzdWJuZXQgMTkyLjE2OC4wLjAtPjE5Mi4xNjguMC4yNTUgdG8gMTAuMC4wLjAtPjEwLjAuMC4yNTUsCisJICAgIGFzIGJlZm9yZS4KKwkgICAgLS1hbGlhcz0xOTIuMTY4LjAuMTAtMTkyLjE2OC4wLjQwLDEwLjAuMC4wLDI1NS4yNTUuMjU1LjAKKwkgICAgbWFwcyBvbmx5IHRoZSAxOTIuMTY4LjAuMTAtPjE5Mi4xNjguMC40MCByZWdpb24uIFRoYW5rcyB0bworCSAgICBJYiBVaHJza292IGZvciB0aGUgc3VnZ2VzdGlvbi4KKworCSAgICBEb24ndCBkeW5hbWljYWxseSBhbGxvY2F0ZSBESENQIGFkZHJlc3NlcyB3aGljaCBtYXkgYnJlYWsKKwkgICAgV2luZG93cy4gIEFkZHJlc3NlcyB3aGljaCBlbmQgaW4gLjI1NSBvciAuMCBhcmUgYnJva2VuIGluCisJICAgIFdpbmRvd3MgZXZlbiB3aGVuIHVzaW5nIHN1cGVybmV0dGluZy4KKwkgICAgLS1kaGNwLXJhbmdlPTE5Mi4xNjguMC4xLDE5Mi4xNjguMS4yNTQsMjU1LDI1NSwyNTQuMCBtZWFucyAKKwkgICAgMTkyLjE2OC4wLjI1NSBpcyBhIHZhbGlkIElQIGFkZHJlc3MsIGJ1dCBub3QgZm9yIFdpbmRvd3MuIAorCSAgICBTZWUgTWljcm9zb2Z0IEtCMjgxNTc5LiBXZSB0aGVyZWZvcmUgbm8gbG9uZ2VyIGFsbG9jYXRlIAorCSAgICB0aGVzZSBhZGRyZXNzZXMgdG8gYXZvaWQgaGFyZC10by1kaWFnbm9zZSBwcm9ibGVtcy4gCisKKwkgICAgVXBkYXRlIFBvbGlzaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEphbiBQc290YS4KKworCSAgICBEZWxldGUgdGhlIFBJRC1maWxlIHdoZW4gZG5zbWFzcSBzaHV0cyBkb3duLiBOb3RlIHRoYXQgYnkKKwkgICAgdGhpcyB0aW1lLCBkbnNtYXNxIGlzIG5vcm1hbGx5IG5vdCBydW5uaW5nIGFzIHJvb3QsIHNvCisJICAgIHRoaXMgd2lsbCBmYWlsIGlmIHRoZSBQSUQtZmlsZSBpcyBzdG9yZWQgaW4gYSByb290LW93bmVkCisJICAgIGRpcmVjdG9yeTsgc3VjaCBmYWlsdXJlIGlzIHNpbGVudGx5IGlnbm9yZWQuIFRvIHRha2UKKwkgICAgYWR2YW50YWdlIG9mIHRoaXMgZmVhdHVyZSwgdGhlIFBJRC1maWxlIG11c3QgYmUgc3RvcmVkIGluIGEKKwkgICAgZGlyZWN0b3J5IG93bmVkIGFuZCB3cml0ZS1hYmxlIGJ5IHRoZSB1c2VyIHJ1bm5pbmcKKwkgICAgZG5zbWFzcS4KKworCit2ZXJzaW9uIDIuNDYKKwkgICAgQWxsb3cgLS1ib290cC1keW5hbWljIHRvIHRha2UgYSBuZXRpZCB0YWcsIHNvIHRoYXQgaXQgbWF5CisJICAgIGJlIHNlbGVjdGl2ZWx5IGVuYWJsZWQuIFRoYW5rcyB0byBPbGFmIFdlc3RyaWsgZm9yIHRoZQorCSAgICBzdWdnZXN0aW9uLiAKKworCSAgICBSZW1vdmUgSVNDLWxlYXNlZmlsZSByZWFkaW5nIGNvZGUuIFRoaXMgaGFzIGJlZW4KKwkgICAgZGVwcmVjYXRlZCBmb3IgYSBsb25nIHRpbWUsIGFuZCBsYXN0IHRpbWUgSSByZW1vdmVkIGl0LCBpdAorCSAgICBlbmRlZCB1cCBnb2luZyBiYWNrIGJ5IHJlcXVlc3Qgb2Ygb25lIHVzZXIuIFRoaXMgdGltZSwKKwkgICAgaXQncyBnb25lIGZvciBnb29kOyBvdGhlcndpc2UgaXQgd291bGQgbmVlZCB0byBiZQorCSAgICByZS13b3JrZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBkb21haW5zIChzZWUgYmVsb3cpLgorCisJICAgIFN1cHBvcnQgREhDUCBjbGllbnRzIGluIG11bHRpcGxlIEROUyBkb21haW5zLiBUaGlzIGlzIGEKKwkgICAgbG9uZy1zdGFuZGluZyByZXF1ZXN0LiBDbGllbnRzIGFyZSBhc3NpZ25lZCB0byBhIGRvbWFpbgorCSAgICBiYXNlZCBpbiB0aGVpciBJUCBhZGRyZXNzLiAgCisKKyAgICAgICAgICAgIEFkZCAtLWRoY3AtZnFkbiBmbGFnLCB3aGljaCBjaGFuZ2VzIGJlaGF2aW91ciBpZiBETlMgbmFtZXMKKyAgICAgICAgICAgIGFzc2lnbmVkIHRvIERIQ1AgY2xpZW50cy4gV2hlbiB0aGlzIGlzIHNldCwgdGhlcmUgbXVzdCBiZQorICAgICAgICAgICAgYSBkb21haW4gYXNzb2NpYXRlZCB3aXRoIGVhY2ggY2xpZW50LCBhbmQgb25seQorICAgICAgICAgICAgZnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lcyBhcmUgYWRkZWQgdG8gdGhlIEROUy4gVGhlCisgICAgICAgICAgICBhZHZhbnRhZ2UgaXMgdGhhdCB0aGUgb25seSB0aGUgRlFETiBuZWVkcyB0byBiZSB1bmlxdWUsCisgICAgICAgICAgICBzbyB0aGF0IHR3byBvciBtb3JlIERIQ1AgY2xpZW50cyBjYW4gc2hhcmUgYSBob3N0bmFtZSwgYXMKKyAgICAgICAgICAgIGxvbmcgYXMgdGhleSBhcmUgaW4gZGlmZmVyZW50IGRvbWFpbnMuCisKKwkgICAgU2V0IGVudmlyb25tZW50IHZhcmlhYmxlIEROU01BU1FfRE9NQUlOIHdoZW4gaW52b2tpbmcKKwkgICAgbGVhc2UtY2hhbmdlIHNjcmlwdC4gVGhpcyBtYXkgYmUgdXNlZnVsIGluZm9ybWF0aW9uIHRvCisJICAgIGhhdmUgbm93IHRoYXQgaXQncyB2YXJpYWJsZS4KKworCSAgICBUaWdodGVuIHVwIGRhdGEtY2hlY2tpbmcgY29kZSBmb3IgRE5TIHBhY2tldAorCSAgICBoYW5kbGluZy4gVGhhbmtzIHRvIFN0ZXZlIERvZGQgd2hvIGZvdW5kIGNlcnRhaW4gaWxsZWdhbAorCSAgICBwYWNrZXRzIHdoaWNoIGNvdWxkIGNyYXNoIGRuc21hc3EuIE5vIG1lbW9yeSBvdmVyd3JpdGUgd2FzCisJICAgIHBvc3NpYmxlLCBzbyB0aGlzIGlzIG5vdCBhIHNlY3VyaXR5IGlzc3VlIGJleW9uZCB0aGUgRG9TCisJICAgIHBvdGVudGlhbC4gIAorCisJICAgIFVwZGF0ZSBleGFtcGxlIGNvbmZpZyBkaGNwIG9wdGlvbiA0NywgdGhlIHByZXZpb3VzCisJICAgIHN1Z2dlc3Rpb24gZ2VuZXJhdGVkIGFuIGlsbGVnYWwsIHplcm8tbGVuZ3RoLAorCSAgICBvcHRpb24uIFRoYW5rcyB0byBNYXR0aGlhcyBBbmRyZWUgZm9yIGZpbmRpbmcgdGhpcy4KKworCSAgICBSZXdyaXRlIGhvc3RzLWZpbGUgcmVhZGluZyBjb2RlIHRvIHJlbW92ZSB0aGUgbGltaXQgb2YKKwkgICAgMTAyNCBjaGFyYWN0ZXJzIHBlciBsaW5lLiBKb2huIEMgTWV1c2VyIGZvdW5kIHRoaXMuCisKKwkgICAgQ3JlYXRlIGEgbmV0LWlkIHRhZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2Ugb24KKwkgICAgd2hpY2ggdGhlIERIQ1AgcmVxdWVzdCB3YXMgcmVjZWl2ZWQuCisKKwkgICAgRml4ZWQgbWlub3IgbWVtb3J5IGxlYWsgaW4gREJ1cyBjb2RlLCB0aGFua3MgdG8gSmVyZW15CisJICAgIExhaW5lIGZvciB0aGUgcGF0Y2guCisKKwkgICAgRW1pdCBEQnVzIHNpZ25hbHMgYXMgdGhlIERIQ1AgbGVhc2UgZGF0YWJhc2UKKwkgICAgY2hhbmdlcy4gVGhhbmtzIHRvIEplcmVteSBMYWluZSBmb3IgdGhlIHBhdGNoLgorCisJICAgIEFsbG93IGZvciBtb3JlIHRoYXQgb25lIE1BQyBhZGRyZXNzIGluIGEgZGhjcC1ob3N0CisJICAgIGxpbmUuIFRoaXMgY29uZmlndXJhdGlvbiB0ZWxscyBkbnNtYXNxIHRoYXQgaXQncyBPSyB0bworCSAgICBhYmFuZG9uIGEgREhDUCBsZWFzZSBvZiB0aGUgZml4ZWQgYWRkcmVzcyB0byBvbmUgTUFDCisJICAgIGFkZHJlc3MsIGlmIGFub3RoZXIgTUFDIGFkZHJlc3MgaW4gdGhlIGRoY3AtaG9zdCBzdGF0ZW1lbnQgCisJICAgIGFza3MgZm9yIGFuIGFkZHJlc3MuIFRoaXMgaXMgdXNlZnVsIHRvIGdpdmUgYSBmaXhlZAorCSAgICBhZGRyZXNzIHRvIGEgaG9zdCB3aGljaCBoYXMgdHdvIG5ldHdvcmsgaW50ZXJmYWNlcworCSAgICAoc2F5LCBhIGxhcHRvcCB3aXRoIHdpcmVkIGFuZCB3aXJlbGVzcyBpbnRlcmZhY2VzLikgCisgICAgICAgICAgICBJdCdzIHZlcnkgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IG9ubHkgb25lIGludGVyZmFjZSAKKwkgICAgYXQgYSB0aW1lIGlzIHVwLCBzaW5jZSBkbnNtYXNxIGFiYW5kb25zIHRoZSBmaXJzdCBsZWFzZSAKKwkgICAgYW5kIHJlLXVzZXMgdGhlIGFkZHJlc3MgYmVmb3JlIHRoZSBsZWFzZWQgdGltZSBoYXMKKwkgICAgZWxhcHNlZC4gSm9obiBHcmF5IHN1Z2dlc3RlZCB0aGlzLgorCisJICAgIFR3ZWFrIHRoZSByZXNwb25zZSB0byBhIERIQ1AgcmVxdWVzdCBwYWNrZXQgd2l0aCBhIHdyb25nCisJICAgIHNlcnZlci1pZCB3aGVuIC0tZGhjcC1hdXRob3JpdGF0aXZlIGlzIHNldDsgZG5zbWFzcSBub3cKKwkgICAgcmV0dXJucyBhIERIQ1BOQUssIHJhdGhlciB0aGFuIHNpbGVudGx5IGlnbm9yaW5nIHRoZQorCSAgICBwYWNrZXQuIFRoYW5rcyB0byBDaHJpcyBNYXJnZXQgZm9yIHNwb3R0aW5nIHRoaXMKKwkgICAgaW1wcm92ZW1lbnQuCisKKwkgICAgQWRkIC0tY25hbWUgb3B0aW9uLiBUaGlzIHByb3ZpZGVzIGEgbGltaXRlZCBhbGlhcworCSAgICBmdW5jdGlvbiwgdXNhYmxlIGZvciBESENQIG5hbWVzLiBUaGFua3MgdG8gQUogV2ViZXIgZm9yCisJICAgIHN1Z2dlc3Rpb25zIG9uIHRoaXMuCisKKwkgICAgVXBkYXRlZCBjb250cmliL3dlYm1pbiB3aXRoIGxhdGVzdCB2ZXJzaW9uIGZyb20gTmVpbAorCSAgICBGaXNoZXIuCisKKwkgICAgVXBkYXRlZCBQb2xpc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBKYW4gUHNvdGEuCisJICAgIAorCSAgICBDb3JyZWN0IHRoZSB0ZXh0IG5hbWVzIGZvciBESENQIG9wdGlvbnMgNjQgYW5kIDY1IHRvIGJlCisJICAgICJuaXMrLWRvbWFpbiIgYW5kICJuaXMrLXNlcnZlcnMiLgorCisJICAgIFVwZGF0ZWQgU3BhbmlzaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIENocmlzIENoYXRoYW0uCisKKwkgICAgRm9yY2UgcmUtcmVhZGluZyBvZiAvZXRjL3Jlc29sdi5jb25mIHdoZW4gYW4gImludGVyZmFjZQorCSAgICB1cCIgZXZlbnQgb2NjdXJzLgorCisKK3ZlcnNpb24gMi40NQorICAgICAgICAgICAgRml4IHRvdGFsIEROUyBmYWlsdXJlIGluIHJlbGVhc2UgMi40NCB1bmxlc3MgLS1taW4tcG9ydCAKKyAgICAgICAgICAgIHNwZWNpZmllZC4gVGhhbmtzIHRvIFN0ZXZlbiBCYXJ0aCBhbmQgR3JhbnQgQ29hZHkgZm9yCisgICAgICAgICAgICBidWdyZXBvcnQuIEFsc28gcmVqZWN0IG91dC1vZi1yYW5nZSBwb3J0IHNwZWMsIHdoaWNoIGNvdWxkCisgICAgICAgICAgICBicmVhayB0aGluZ3MgdG9vOiBzdWdnZXN0aW9uIGZyb20gR2lsbGVzIEVzcGluYXNzZS4KKwkgICAgCisKK3ZlcnNpb24gMi40NAorICAgICAgICAgICAgRml4ICBjcmFzaCB3aGVuIHVua25vd24gY2xpZW50IGF0dGVtcHRzIHRvIHJlbmV3IGEgREhDUAorICAgICAgICAgICAgbGVhc2UsIHByb2JsZW0gaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDIuNDMuIFRoYW5rcyB0bworICAgICAgICAgICAgQ2FybG9zIENhcnZhbGhvIGZvciBoZWxwIGNoYXNpbmcgdGhpcyBkb3duLgorCisJICAgIEZpeCBwb3RlbnRpYWwgY3Jhc2ggd2hlbiBhIGhvc3Qgd2hpY2ggZG9lc24ndCBoYXZlIGEgbGVhc2UKKwkgICAgZG9lcyBESENQSU5GT1JNLiBBZ2FpbiBpbnRyb2R1Y2VkIGluIDIuNDMuIFRoaXMgYnVnIGhhcworCSAgICBuZXZlciBiZWVuIHJlcG9ydGVkIGluIHRoZSB3aWxkLgorCisgICAgICAgICAgICBGaXggY3Jhc2ggaW4gbmV0bGluayBjb2RlIGludHJvZHVjZWQgaW4gMi40My4gVGhhbmtzIHRvCisgICAgICAgICAgICBKZWFuIFdvbHRlciBmb3IgZmluZGluZyB0aGlzLgorCisJICAgIENoYW5nZSBpbXBsZW1lbnRhdGlvbiBvZiBtaW5fcG9ydCB0byB3b3JrIGV2ZW4gaWYgbWluLXBvcnQKKwkgICAgaXMgbGFyZ2UuCisKKwkgICAgUGF0Y2ggdG8gZW5hYmxlIGNvbXBpbGF0aW9uIG9mIGxhdGVzdCBNYWMgT1MgWC4gVGhhbmtzIHRvCisJICAgIERhdmlkIEdpbG1hbi4KKworCSAgICBVcGRhdGUgU3BhbmlzaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIENocmlzdG9waGVyIENoYXRoYW0uCisKKwordmVyc2lvbiAyLjQzCisJICAgIFVwZGF0ZWQgUG9saXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gSmFuIFBzb3RhLgorCisJICAgIEZsYWcgZXJyb3JzIHdoZW4gY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZXBlYXRlZAorCSAgICBpbGxlZ2FsbHkuCisKKwkgICAgRnVydGhlciB0d2Vha3MgZm9yIEdOVS9rRnJlZUJTRAorCisJICAgIEFkZCAtLW5vLXdyYXAgdG8gbXNnbWVyZ2UgY2FsbCAtIHByb3ZpZGVzIG5pY2VyIC5wbyBmaWxlCisJICAgIGZvcm1hdC4KKworCSAgICBIb25vdXIgbGVhc2UtdGltZSBzcGVjIGluIGRoY3AtaG9zdCBsaW5lcyBldmVuIGZvcgorCSAgICBCT09UUC4gVGhlIHVzZXIgaXMgYXNzdW1lZCB0byBrbm93biB3aGF0IHRoZXkgYXJlIGRvaW5nIGluCisJICAgIHRoaXMgY2FzZS4gKEhvc3RzIHdpdGhvdXQgdGhlIHRpbWUgc3BlYyBzdGlsbCBnZXQgaW5maW5pdGUKKwkgICAgbGVhc2VzIGZvciBCT09UUCwgb3Zlci1yaWRpbmcgdGhlIGRlZmF1bHQgaW4gdGhlCisJICAgIGRoY3AtcmFuZ2UuKSBUaGFua3MgdG8gUGV0ZXIgS2F0em1hbm4gZm9yIHVuY292ZXJpbmcgdGhpcy4KKworCSAgICBGaXggcHJvYmxlbSBtYXRjaGluZyByZWxheS1hZ2VudCBpZHMuIFRoYW5rcyB0byBNaWNoYWVsCisJICAgIFJhY2sgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEFkZCAtLW5hcHRyLXJlY29yZCBvcHRpb24uIFN1Z2dlc3Rpb24gZnJvbSBKb2hhbgorCSAgICBCZXJncXVpc3QuCisKKwkgICAgSW1wbGVtZW50IFJGQyA1MTA3IHNlcnZlci1pZC1vdmVycmlkZSBESENQIHJlbGF5IGFnZW50CisJICAgIG9wdGlvbi4KKworCSAgICBBcHBseSBwYXRjaGVzIGZyb20gU3RlZmFuIEtydWdlciBmb3IgY29tcGlsYXRpb24gb24KKwkgICAgU29sYXJpcyAxMCB1bmRlciBTdW4gc3R1ZGlvLgorCisJICAgIFlldCBtb3JlIHR3ZWFraW5nIG9mIExpbnV4IGNhcGFiaWxpdHkgY29kZSwgdG8gc3VwcHJlc3MKKwkgICAgcG9pbnRsZXNzIHdpbmdlaW5nIGZyb20ga2VybmVsIDIuNi4yNSBhbmQgYWJvdmUuCisKKwkgICAgSW1wcm92ZSBlcnJvciBjaGVja2luZyBkdXJpbmcgc3RhcnR1cC4gUHJldmlvdXNseSwgc29tZQorCSAgICBlcnJvcnMgd2hpY2ggb2NjdXJyZWQgZHVyaW5nIHN0YXJ0dXAgd291bGQgYmUgd29ya2VkCisJICAgIGFyb3VuZCwgd2l0aCBkbnNtYXNxIHN0aWxsIHN0YXJ0aW5nIHVwLiBTb21lIHdlcmUgbG9nZ2VkLAorICAgICAgICAgICAgc29tZSBzaWxlbnQuIE5vdywgdGhleSBhbGwgY2F1c2UgYSBmYXRhbCBlcnJvciBhbmQgZG5zbWFzcSAKKyAgICAgICAgICAgIHRlcm1pbmF0ZXMgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZS4gVGhlIGVycm9ycyBhcmUgdGhvc2UKKyAgICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBjaGFuZ2luZyB1aWQgYW5kIGdpZCwgc2V0dGluZyBwcm9jZXNzIAorICAgICAgICAgICAgY2FwYWJpbGl0aWVzIGFuZCB3cml0aW5nIHRoZSBwaWRmaWxlLiBUaGFua3MgdG8gVXdlCisJICAgIEdhbnNlcnQgYW5kIHRoZSBTdXNlIHNlY3VyaXR5IHRlYW0gZm9yIHBvaW50aW5nIG91dCAKKwkgICAgdGhpcyBpbXByb3ZlbWVudCwgYW5kIEJpbGwgUmVpbWVycyBmb3IgZ29vZCBpbXBsZW1lbnRhdGlvbgorCSAgICBzdWdnZXN0aW9ucy4KKworCSAgICBQcm92aWRlIE5PX0xBUkdFRklMRSBjb21waWxlIG9wdGlvbiB0byBzd2l0Y2ggb2ZmIGxhcmdlZmlsZQorCSAgICBzdXBwb3J0IHdoZW4gY29tcGlsaW5nIGFnYWluc3QgdmVyc2lvbnMgb2YgdWNsaWJjIHdoaWNoCisJICAgIGRvbid0IHN1cHBvcnQgaXQuIFRoYW5rcyB0byBTdGVwaGFuZSBCaWxsaWFydCBmb3IgdGhlIHBhdGNoLgorICAKKyAgICAgICAgICAgIEltcGxlbWVudCByYW5kb20gc291cmNlIHBvcnRzIGZvciBpbnRlcmFjdGlvbnMgd2l0aAorICAgICAgICAgICAgdXBzdHJlYW0gbmFtZXNlcnZlcnMuIE5ldyBzcG9vZmluZyBhdHRhY2tzIGhhdmUgYmVlbiBmb3VuZAorICAgICAgICAgICAgYWdhaW5zdCBuYW1lc2VydmVycyB3aGljaCBkbyBub3QgZG8gdGhpcywgdGhvdWdoIGl0IGlzIG5vdAorICAgICAgICAgICAgY2xlYXIgaWYgZG5zbWFzcSBpcyB2dWxuZXJhYmxlLCBzaW5jZSB0byBkb2Vzbid0IGltcGxlbWVudAorICAgICAgICAgICAgcmVjdXJzaW9uLiBCeSBkZWZhdWx0IGRuc21hc3Egd2lsbCBub3cgdXNlIGEgZGlmZmVyZW50CisgICAgICAgICAgICBzb3VyY2UgcG9ydCAoYW5kIHNvY2tldCkgZm9yIGVhY2ggcXVlcnkgaXQgc2VuZHMKKyAgICAgICAgICAgIHVwc3RyZWFtLiBUaGlzIGJlaGF2aW91ciBjYW4gc3VwcHJlc3NlZCB1c2luZyB0aGUKKyAgICAgICAgICAgIC0tcXVlcnktcG9ydCBvcHRpb24sIGFuZCB0aGUgb2xkIGRlZmF1bHQgYmVoYXZpb3VyCisgICAgICAgICAgICByZXN0b3JlZCB1c2luZyAtLXF1ZXJ5LXBvcnQ9MC4gRXhwbGljaXQgc291cmNlLXBvcnQKKyAgICAgICAgICAgIHNwZWNpZmljYXRpb25zIGluIC0tc2VydmVyIGNvbmZpZ3MgYXJlIHN0aWxsIGhvbm91cmVkLgorCisJICAgIFJlcGxhY2UgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLCBmb3IgYmV0dGVyCisJICAgIHNlY3VyaXR5LiBPbiBtb3N0IEJTRCBzeXN0ZW1zLCBkbnNtYXNxIHVzZXMgdGhlCisJICAgIGFyYzRyYW5kb20oKSBSTkcsIHdoaWNoIGlzIHNlY3VyZSwgYnV0IG9uIG90aGVyIHBsYXRmb3JtcywKKwkgICAgaXQgcmVsaWVkIG9uIHRoZSBDLWxpYnJhcnkgUk5HLCB3aGljaCBtYXkgYmUKKwkgICAgZ3Vlc3NhYmxlIGFuZCB0aGVyZWZvcmUgYWxsb3cgc3Bvb2ZpbmcuIFRoaXMgcmVsZWFzZQorCSAgICByZXBsYWNlcyB0aGUgbGliYyBSTkcgd2l0aCB0aGUgU1VSRiBSTkcsIGZyb20gRGFuaWVsCisJICAgIEouIEJlcnN0ZWluJ3MgREpCRE5TIHBhY2thZ2UuICAKKworCSAgICBEb24ndCBhdHRlbXB0IHRvIGNoYW5nZSB1c2VyIG9yIGdyb3VwIG9yIHNldCBjYXBhYmlsaXRpZXMKKwkgICAgaWYgZG5zbWFzcSBpcyBydW4gYXMgYSBub24tcm9vdCB1c2VyLiBXaXRob3V0IHRoaXMsIHRoZQorCSAgICBjaGFuZ2UgZnJvbSBzb2Z0IHRvIGhhcmQgZXJyb3JzIHdoZW4gdGhlc2UgZmFpbCBjYXVzZXMKKwkgICAgcHJvYmxlbXMgZm9yIG5vbi1yb290IGRhZW1vbnMgbGlzdGVuaW5nIG9uIGhpZ2gKKwkgICAgcG9ydHMuIFRoYW5rcyB0byBQYXRyaWNrIE1jTGVhbiBmb3Igc3BvdHRpbmcgdGhpcy4KKworCSAgICBVcGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCit2ZXJzaW9uIDIuNDIKKyAgICAgICAgICAgIFRoZSBjaGFuZ2Vsb2cgZm9yIHZlcnNpb24gMi40MiBhbmQgZWFybGllciBpcyAKKyAgICAgICAgICAgIGF2YWlsYWJsZSBpbiBDSEFOR0VMT0cuYXJjaGl2ZS4KZGlmZiAtLWdpdCBhL0NIQU5HRUxPRy5hcmNoaXZlIGIvQ0hBTkdFTE9HLmFyY2hpdmUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzk5NzNjYwotLS0gL2Rldi9udWxsCisrKyBiL0NIQU5HRUxPRy5hcmNoaXZlCkBAIC0wLDAgKzEsMjUwOSBAQAorcmVsZWFzZSAwLjQgLSBpbml0aWFsIHB1YmxpYyByZWxlYXNlCisKK3JlbGVhc2UgMC41IC0gYWRkZWQgY2FjaGluZywgcmVtb3ZlZCBjb21waWxlciB3YXJuaW5nIG9uIGxpbnV4IFBQQworCityZWxlYXNlIDAuNiAtIFRDUCBoYW5kbGluZzogY2xvc2Ugc29ja2V0IGFuZCByZXR1cm4gdG8gY29ubmVjdCBzdGF0ZSBpZiB3ZSAKKyAgICAgICAgICAgICAgY2FuJ3QgcmVhZCB0aGUgZmlyc3QgYnl0ZS4gVGhpcyBjb3JyZWN0cyBhIHByb2JsZW0gc2VlbiB2ZXJ5IAorICAgICAgICAgICAgICBvY2Nhc2lvbmFsbHkgd2hlcmUgZG5zbWFzcSB3b3VsZCBsb29wIHVzaW5nIGFsbCBhdmFpbGFibGUgQ1BVLgorCisJICAgICAgQWRkZWQgYSBwYXRjaCBmcm9tIENyaXMgQmFpbGlmZiA8Yy5iYWlsaWZmQGUtc2VjdXJlLmNvbS5hdT4KKwkgICAgICB0byBzZXQgU09fUkVVU0VBRERSIG9uIHRoZSB0Y3Agc29ja2V0IHdoaWNoIHN0b3BzIHByb2JsZW1zIHdoZW4KKyAgICAgICAgICAgICAgZG5zbWFzcSBpcyByZXN0YXJ0ZWQgYW5kIG9sZCBjb25uZWN0aW9ucyBzdGlsbCBleGlzdC4KKworCSAgICAgIFN0b3BwZWQgY2xhaW1pbmcgaW4gZG9jLmh0bWwgdGhhdCBzbWFpbCBpcyB0aGUgZGVmYXVsdCBEZWJpYW4KKwkgICAgICBtYWlsZXIsIHNpbmNlIGl0IGlzbid0IGFueSBsb25nZXIuIChQb2ludGVkIG91dCBieQorCSAgICAgIERhdmlkIEthcmxpbiA8ZGthcmxpbkBjb2xvcmFkb210bi5lZHU+KQorCityZWxlYXNlIDAuNyAgIENyZWF0ZSBhIHBpZGZpbGUgYXQgL3Zhci9ydW4vZG5zbWFzcS5waWQKKworCSAgICAgIEV4dGVuc2l2ZSBhcm1vdXJpbmcgYWdhaW5zdCAicG9pc29uIHBhY2tldHMiIGNvdXJ0ZXN5IG9mCisgICAgICAgICAgICAgIFRob21hcyBNb2VzdGwgPHRtb2VzdGxAZ214Lm5ldD4KKworCSAgICAgIFNldCBzb2NrYWRkci5zYV9mYW1pbHkgb24gb3V0Z29pbmcgYWRkcmVzcywgcGF0Y2ggZnJvbQorCSAgICAgIERhdmlkIFN5bW9uZHMgPHhveHVzQHVzYS5uZXQ+CisKKyAgICAgICAgICAgICAgUGF0Y2ggdG8gY2xlYXIgY2FjaGUgb24gU0lHSFVQIAorCSAgICAgIGZyb20gSmFzb24gTC4gV2FnbmVyIDxuaWFsc2NvcnZhQHlhaG9vLmNvbT4gCisKKwkgICAgICBGaXggYmFkIGJ1ZyByZXN1bHRpbmcgZnJvbSBub3QgaW5pdGlhbGlzaW5nIHZhbHVlLXJlc3VsdAkKKwkgICAgICBhZGRyZXNzLWxlbmd0aCBwYXJhbWV0ZXIgdG8gcmVjdmZyb20oKSBhbmQgYWNjZXB0KCkgLSBpdAorCSAgICAgIHdvcmtlZCBieSBsdWNrIGJlZm9yZSEKKworcmVsZWFzZSAwLjk1ICBNYWpvciByZXdyaXRlOiByZW1vdmUgY2FsbHMgdG8gZ2V0aG9zdGJ5bmFtZSgpIGFuZCB0YWxrCisgICAgICAgICAgICAgIGRpcmVjdGx5IHRvIHRoZSB1cHN0cmVhbSBzZXJ2ZXIocykgaW5zdGVhZC4KKyAgICAgICAgICAgICAgVGhpcyBoYXMgbWFueSBhZHZhbnRhZ2VzLgorICAgICAgICAgICAgICAoMSkgRG5zbWFzcSBubyBsb25nZXIgYmxvY2tzIGR1cmluZyBsb25nIGxvb2t1cHMuCisgICAgICAgICAgICAgICgyKSBBbGwgcXVlcnkgdHlwZXMgYXJlIGhhbmRsZWQgbm93LCAoZWcgTVgpIG5vdCBqdXN0IGludGVybmV0CisgICAgICAgICAgICAgICAgICBhZGRyZXNzIHF1ZXJpZXMuIEFkZHJlc3NlcyBhcmUgY2FjaGVkLCBhbGwgb3RoZXIKKyAgICAgICAgICAgICAgICAgIHF1ZXJpZXMgYXJlIGZvcndhcmRlZCBkaXJlY3RseS4KKyAgICAgICAgICAgICAgKDMpIFRpbWUtdG8tbGl2ZSBkYXRhIGZyb20gdXBzdHJlYW0gc2VydmVyIGlzIHJlYWQgYW5kCisgICAgICAgICAgICAgICAgICB1c2VkIGJ5IGRuc21hc3EgdG8gcHVyZ2UgZW50cmllcyBmcm9tIHRoZSBjYWNoZS4KKyAgICAgICAgICAgICAgKDQpIC9ldGMvaG9zdHMgaXMgc3RpbGwgcmVhZCBhbmQgaXRzIGNvbnRlbnRzIHNlcnZlZCAodW5sZXNzIAorCSAgICAgICAgICB0aGUgLWggb3B0aW9uIGlzIGdpdmVuKS4KKyAgICAgICAgICAgICAgKDUpIERuc21hc3EgY2FuIGdldCBpdHMgdXBzdHJlYW0gc2VydmVycyBmcm9tCisgICAgICAgICAgICAgICAgICBhIGZpbGUgb3RoZXIgdGhhbiAvZXRjL3Jlc29sdi5jb25mICgtciBvcHRpb24pIHRoaXMgYWxsb3dzCisgICAgICAgICAgICAgICAgICBkbnNtYXNxIHRvIHNlcnZlIG5hbWVzIHRvIHRoZSBtYWNoaW5lIGl0IGlzIHJ1bm5pbmcKKyAgICAgICAgICAgICAgICAgIG9uIChwdXQgbmFtZXNlcnZlciAxMjcuMC4wLjEgaW4gL2V0Yy9yZXNvbHYuY29uZiBhbmQKKyAgICAgICAgICAgICAgICAgIGdpdmUgZG5zbWFzcSB0aGUgb3B0aW9uIC1yIC9ldGMvcmVzb2x2LmRuc21hc3EpCisgICAgICAgICAgICAgICg2KSBEbnNtYXNxIHdpbGwgcmUtcmVhZCBpdHMgc2VydmVycyBpZiB0aGUKKyAgICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbiB0aW1lIG9mIHJlc29sdi5jb25mIGNoYW5nZXMuIEFsb25nIHdpdGgKKyAgICAgICAgICAgICAgICAgIDQgYWJvdmUgdGhpcyBhbGxvd3MgbmFtZXNlcnZlcnMgdG8gYmUgc2V0CisJCSAgYXV0b21hdGljYWxseSBieSBwcHAgb3IgZGhjcC4JIAorCisgICAgICAgICAgICAgIEEgcmVhbGx5IGNsZXZlciBOQVQtbGlrZSB0ZWNobmlxdWUgYWxsb3dzIHRoZSBkYWVtb24gdG8gaGF2ZSBsb3RzCisgICAgICAgICAgICAgIG9mIHF1ZXJpZXMgaW4gcHJvZ3Jlc3MsIGJ1dCBzdGlsbCByZW1haW4gdmVyeSBsaWdodHdlaWdodC4KKwkgICAgICBEbnNtYXNxIGhhcyBhIHNtYWxsIGZvb3RwcmludCBhbmQgbm9ybWFsbHkgZG9lc24ndCBhbGxvY2F0ZQorICAgICAgICAgICAgICBhbnkgbW9yZSBtZW1vcnkgYWZ0ZXIgc3RhcnQtdXAuIFRoZSBOQVQtbGlrZSBmb3J3YXJkaW5nIHdhcworICAgICAgICAgICAgICBpbnNwaXJlZCBieSBhIHN1Z2dlc3Rpb24gZnJvbSBFbGkgQ2hlbiA8ZWxpQHJvdXRlZnJlZS5jb20+CisKK3JlbGVhc2UgMC45NiAgRml4ZWQgZW1iYXJyYXNpbmcgdGhpbmtvIGluIGNhY2hlIGxpbmtlZC1saXN0IGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorcmVsZWFzZSAwLjk4ICBTb21lIGVuaGFuY2VtZW50cyBhbmQgYnVnLWZpeGVzLiAKKyAgICAgICAgICAgICAgVGhhbmtzIHRvICJEZW5pcyBDYXJyZSIgPGRlbmlzLmNhcnJlQGxhcG9zdGUubmV0PiBhbmQgTWFydGluIAorICAgICAgICAgICAgICBPdHRlIDxvdHRlQGVzc2MucHN1LmVkdT4JCisgICAgICAgICAgICAgIAorCSAgICAgICgxKSBEbnNtYXNxIG5vdyBhbHdheXMgc2V0cyB0aGUgSVAgc291cmNlIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgIG9mIGl0cyByZXBsaWVzIGNvcnJlY3RseS4gT2xkZXIgdmVyc2lvbnMgd291bGQgbm90IGFsd2F5cworICAgICAgICAgICAgICAgICAgZG8gdGhpcyBvbiBtdWx0aS1ob21lZCBhbmQgSVAgYWxpYXNlZCBob3N0cywgd2hpY2ggdmlvbGF0ZXMgCisgICAgICAgICAgICAgICAgICB0aGUgUkZDLgorICAgICAgICAgICAgICAoMikgRG5zbWFzcSBubyBsb25nZXIgY3Jhc2hlcyBpZiBhIHNlcnZlciBsb29wIGlzIGNyZWF0ZWQKKwkgICAgICAgICAgKGllIGRuc21hc3EgaXMgdG9sZCB0byB1c2UgaXRzZWxmIGFzIGFuIHVwc3RyZWFtIHNlcnZlci4pCisgICAgICAgICAgICAgICAgICBOb3cgaXQganVzdCBsb2dzIHRoZSBwcm9ibGVtIGFuZCBkb2Vzbid0IHVzZSB0aGUgYmFkIAorICAgICAgICAgICAgICAgICAgc2VydmVyIGFkZHJlc3MuCisgICAgICAgICAgICAgICgzKSBEbnNtYXNxIHNob3VsZCBub3cgZm9yd2FyZCAoYnV0IG5vdCBjYWNoZSkgaW52ZXJzZSBxdWVyaWVzIAorICAgICAgICAgICAgICAgICAgYW5kIHNlcnZlciBzdGF0dXMgcXVlcmllczsgdGhpcyBmZWF0dXJlIGhhcyBub3QgYmVlbiB0ZXN0ZWQuCisgICAgICAgICAgICAgICg0KSBEb24ndCB3cml0ZSB0aGUgcGlkIGZpbGUgd2hlbiBpbiBub24tZGFlbW9uIG1vZGUuCisJICAgICAgKDUpIENyZWF0ZSB0aGUgcGlkIGZpbGUgbW9kZSA2NDQsIHJhdGhlciB0aGVuIDY2NiAoISkuCisgICAgICAgICAgICAgICg2KSBHZW5lcmF0ZSBxdWVyaWVzIHRvIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzIHdpdGggdW5wcmVkaWN0YWJsZQorICAgICAgICAgICAgICAgICAgaWRzLCB0byB0aHdhcnQgRE5TIHNwb29mZXJzLgorICAgICAgICAgICAgICAoNykgRG5zbWFzcSBubyBsb25nZXIgZm9yd2FyZHMgcXVlcmllcyB3aGVuIHRoZSAKKwkgICAgICAgICAgInJlY3Vyc2lvbiBkZXNpcmVkIiBiaXQgaXMgbm90IHNldCBpbiB0aGUgaGVhZGVyLgorCSAgICAgICg4KSBGaXhlZCBnZXRvcHQgY29kZSB0byB3b3JrIG9uIGNvbXBsaWVycyB3aXRoIHVuc2lnbmVkIGNoYXIuCisgICAgICAgICAgICAgIAorcmVsZWFzZSAwLjk5MSBBZGRlZCAtYiBmbGFnOiB3aGVuIHNldCBjYXVzZXMgZG5zbWFzcSB0byBhbHdheXMgYW5zd2VyCisJICAgICAgcmV2ZXJzZSBxdWVyaWVzIG9uIHRoZSBSRkMgMTkxOCBwcml2YXRlIElQIHNwYWNlIGl0c2VsZiBhbmQKKyAgICAgICAgICAgICAgbmV2ZXIgZm9yd2FyZCB0aGVtIHRvIGFuIHVwc3RyZWFtIHNlcnZlci4gSWYgdGhlIG5hbWUgaXMgbm90IGluCisJICAgICAgL2V0Yy9ob3N0cywgZG5zbWFzcSByZXBsaWVzIHdpdGggdGhlIGRvdHRlZC1xdWFkIGFkZHJlc3MuCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBGaXhlZCBhIGJ1ZyB3aGljaCBzdG9wcGVkIGRuc21hc3Egd29ya2luZyBvbiBhIGJveCB3aXRoCisgICAgICAgICAgICAgIHR3byBvciBtb3JlIGludGVyZmFjZXMgd2l0aCB0aGUgc2FtZSBJUCBhZGRyZXNzLiAKKworICAgICAgICAgICAgICBGaXhlZCBjYWNoZWluZyBvZiBDTkFNRXMuIFByZXZpb3VzbHksIGEgQ05BTUUgd2hpY2ggcG9pbnRlZAorICAgICAgICAgICAgICB0byAgYSBuYW1lIHdpdGggbWFueSBBIHJlY29yZHMgd291bGQgbm90IGhhdmUgYWxsIHRoZSBhZGRyZXNzZXMKKyAgICAgICAgICAgICAgcmV0dXJuZWQgd2hlbiBiZWluZyBhbnN3ZXJlZCBmcm9tIHRoZSBjYWNoZS4KKworCSAgICAgIFRoYW5rcyB0byAiU3RldmUgSGFyZHkiIDxzLmEuaGFyZHlAY29ubmVjdHV4LmNvbT4gZm9yIGhpcyBpbnB1dCAKKyAgICAgICAgICAgICAgb24gdGhlc2UgZml4ZXMuCisKKyAgICAgICAgICAgICAgRml4ZWQgcmFjZSB3aGljaCBjb3VsZCBjYXVzZSBkbnNtYXNxIHRvIG1pc3MgdGhlIHNlY29uZCBvZgorICAgICAgICAgICAgICB0d28gY2xvc2VseS1zcGFjZWQgdXBkYXRlcyBvZiByZXNvbHYuY29uZiAoVGhhbmtzIHRvIEVsaSBDaGVuCisgICAgICAgICAgICAgIGZvciBwb2ludGluZyB0aGlzIG91dC4pCisKKwkgICAgICBGaXhlZCBhIGJ1ZyB3aGljaCBjb3VsZCBjYXVzZSBkbnNtYXNxIHRvIGZhaWwgdG8gY2FjaGUgc29tZQorICAgICAgICAgICAgICBkbnMgbmFtZXMuCisKK3JlbGVhc2UgMC45OTIgU21hbGwgY2hhbmdlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIHNvIHRoYXQgbmFtZXMgaW4gL2V0Yy9ob3N0cworICAgICAgICAgICAgICBkb24ndCB1c2UgY2FjaGUgc2xvdHMuIEFsc28gbWFrZSAiLWMgMCIgZmxhZyBtZWFuaW5nZnVsbHkgCisgICAgICAgICAgICAgIGRpc2FibGUgY2FjaGluZyBjb21wbGV0ZWx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworcmVsZWFzZSAwLjk5MyBSZXR1cm4gb25seSB0aGUgZmlyc3QgKGNhbm9uaWNhbCkgbmFtZSBmcm9tIGFuIGVudHJ5IGluCisJICAgICAgL2V0Yy9ob3N0cyBhcyByZXBseSB0byByZXZlcnNlIHF1ZXJ5LgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgSGFuZGxlIHdpbGRjYXJkIHF1ZXJpZXMgZm9yIG5hbWVzL2FkZHJlc3NlcyBpbiAvZXRjL2hvc3RzCisJICAgICAgdGhpcyBpcyBtYWlubHkgdG8gYWxsb3cgcmV2ZXJzZSBsb29rdXBzIGJ5IGRpZyB0byBzdWNjZWVkLgorCSAgICAgIChCdWcgcmVwb3J0ZWQgYnkgU2ltb24gSi4gUm93ZSIgPHNyb3dlQG1vc2Uub3JnLnVrPikgIAorICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgU3VidGxlIGNoYW5nZSB0byB0aGUgbG9naWMgd2hpY2ggc2VsZWN0cyB3aGljaCBvZiBtdWx0aXBsZQorCSAgICAgIHVwc3RyZWFtIHNlcnZlcnMgd2Ugc2VuZCBxdWVyaWVzIHRvLiBUaGlzIGZpeGVzIGEgcHJvYmxlbSAKKyAgICAgICAgICAgICAgd2hlcmUgZG5zbWFzcSBjb250aW51b3VzbHkgc2VuZHMgcXVlcmllcyB0byBhIHNlcnZlciB3aGljaAorCSAgICAgIGlzIHJldHVybmluZyBlcnJvciBjb2RlcyBhbmQgaWdub3JlcyBvbmUgd2hpY2ggaXMgd29ya2luZy4KKyAgICAgICAgICAgICAgCityZWxlYXNlIDAuOTk0IEZpeGVkIGJ1ZyB3aGljaCBicm9rZSBsb29rdXAgb2YgbmFtZXMgaW4gL2V0Yy9ob3N0cworICAgICAgICAgICAgICB3aGljaCBoYXZlIHVwcGVyLWNhc2UgbGV0dGVycyBpbiB0aGVtLiBUaGFua3MgZm9yIEpvYW8gQ2xlbWVudGUKKyAgICAgICAgICAgICAgZm9yIHNwb3R0aW5nIHRoYXQgb25lLiAKKworCSAgICAgIE91dHB1dCBjYWNoZSBzdGF0aXN0aWNzIG9uIHJlY2VpcHQgb2YgU0lHVVNSMS4gVGhlc2UgZ28KKyAgICAgICAgICAgICAgdG8gc3lzbG9nIGV4Y2VwdCBpbiBkZWJ1ZyAoLWQpIG1vZGUsIHdoZW4gYSBjb21wbGV0ZSBjYWNoZQorCSAgICAgIGR1bXAgZ29lcyB0byBzdGRvdXQuIFN1Z2dlc3Rpb24gZnJvbSBKb2FvIENsZW1lbnRlLCBjb2RlCisgICAgICAgICAgICAgIGJhc2VkIGluIEpvaG4gVm9scGUncy4KKyAgICAgICAgICAgICAgCisJICAgICAgQWNjZXB0IEdOVSBsb25nIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZS4gQ29kZSBmcm9tIAorCSAgICAgIEpvaG4gVm9scGUgZm9yIHRoaXMuIAorCisgICAgICAgICAgICAgIFNwbGl0IHNvdXJjZSBjb2RlIGludG8gbXVsdGlwbGUgZmlsZXMgYW5kIHByb2R1Y2VkIAorCSAgICAgIGEgcHJvcGVyIG1ha2VmaWxlLiAKKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIEluY2x1ZGVkIGNvZGUgZnJvbSBKb2huIFZvbHBlIHRvIHBhcnNlIGRoY3AubGVhc2VzIGZpbGUKKyAgICAgICAgICAgICAgd3JpdHRlbiBieSBJU0MgZGhjcGQuIFRoZSBob3N0bmFtZXMgaW4gdGhlIGxlYXNlcyBmaWxlIGFyZQorICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgY2FjaGUgYW5kIHVwZGF0ZWQgYXMgZGhjcGQgdXBkYXRlcyB0aGUgCisgICAgICAgICAgICAgIGxlYXNlcyBmaWxlLiBUaGUgY29kZSBoYXMgYmVlbiBoZWF2aWx5IHJlLXdvcmtlZCBieSBtZSwKKyAgICAgICAgICAgICAgc28gYW55IGJ1Z3MgYXJlIHByb2JhYmx5IG1pbmUuCisKK3JlbGVhc2UgMC45OTUgU21hbGwgdGlkeS11cHMgdG8gc2lnbmFsIGhhbmRsaW5nIGFuZCBjYWNoZSBjb2RlLgorCityZWxlYXNlIDAuOTk2IEFkZGVkIG5lZ2F0aXZlIGNhY2hpbmc6IElmIGRuc21hc3EgZ2V0cyBhICJubyBzdWNoIGRvbWFpbiIgcmVwbHkKKyAgICAgICAgICAgICAgZnJvbSBhbiB1cHN0cmVhbSBuYW1lc2VydmVyLCBpdCB3aWxsIGNhY2hlIHRoYXQgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgZm9yIGEgdGltZSBzcGVjaWZpZWQgYnkgdGhlIFNPQSBSUiBpbiB0aGUgcmVwbHkuIFNlZSBSRkMgMjMwOAorICAgICAgICAgICAgICBmb3IgZGV0YWlscy4gVGhpcyBpcyB1c2VmdWwgd2l0aCAgcmVzb2x2ZXIgbGlicmFyaWVzCisgICAgICAgICAgICAgIHdoaWNoIGFwcGVuZCBhc3NvcnRlZCBzdWZmaWNlcyB0byBub24tRlFETiBpbiBhbiBhdHRlbXB0IHRvIAorICAgICAgICAgICAgICByZXNvbHZlIHRoZW0sIGNhdXNpbmcgdXNlbGVzcyBjYWNoZSBtaXNzZXMuCisKKyAgICAgICAgICAgICAgQWRkZWQgLWkgZmxhZywgd2hpY2ggcmVzdHJpY3RzIGRuc21hc3EgdG8gb2ZmZXJpbmcgbmFtZSBzZXJ2aWNlCisgICAgICAgICAgICAgIG9ubHkgb24gc3BlY2lmaWVkIGludGVyZmFjZXMuCisKK3JlbGVhc2UgMC45OTcgRGVsZXRlZCBJTlNUQUxMIHNjcmlwdCBhbmQgYWRkZWQgImluc3RhbGwiIHRhcmdldCB0byBtYWtlZmlsZS4KKworICAgICAgICAgICAgICBTdG9wcGVkIGRpc3RyaWJ1dGluZyBiaW5hcmllcyBpbiB0aGUgdGFyYmFsbCB0byBhdm9pZCAKKyAgICAgICAgICAgICAgbGliYyB2ZXJzaW9uIGNsYXNoZXMuCisKKyAgICAgICAgICAgICAgRml4ZWQgIGludGVyZmFjZSBkZXRlY3Rpb24gY29kZSB0bworICAgICAgICAgICAgICByZW1vdmUgc3B1cmlvdXMgc3RhcnR1cCBlcnJvcnMgaW4gcmFyZSBjaXJjdW1zdGFuY2VzLgorCisgICAgICAgICAgICAgIERuc21hc3Egbm93IGNoYW5nZXMgaXRzIHVpZCwgaXJyZXZvY2FibHksIHRvIG5vYm9keSBhZnRlcgorICAgICAgICAgICAgICBzdGFydHVwIGZvciBzZWN1cml0eSByZWFzb25zLiBUaGFua3MgdG8gUGV0ZXIgQmFpbGV5IGZvcgorICAgICAgICAgICAgICB0aGlzIHBhdGNoLgorCisJICAgICAgQ29wZSB3aXRoIGluZmluaXRlIERIQ1AgbGVhc2VzLiBQYXRjaCB0aGFua3MgdG8gCisJICAgICAgWWFhY292IEFraWJhIFNsYW1hLgorCisJICAgICAgQWRkZWQgcnBtIGNvbnRyb2wgZmlsZXMgdG8gLnRhci5neiBkaXN0cmlidXRpb24uIFRoYW5rcyB0bworICAgICAgICAgICAgICBQZXRlciBCYWxkd2luIGF0IENsYXJrQ29ubmVjdCBmb3IgdGhvc2UuCisKKyAgICAgICAgICAgICAgSW1wcm92ZWQgc3RhcnR1cCBzY3JpcHQgZm9yIHJwbXMuIFRoYW5rcyB0byBZYWFjb3YgQWtpYmEgU2xhbWEuCisKK3JlbGVhc2UgMS4wICAgU3RhYmxlIHJlbGVhc2U6IGRuc21hc3EgaXMgbm93IGNvbnNpZGVyZWQgZmVhdHVyZS1jb21wbGV0ZQorICAgICAgICAgICAgICBhbmQgc3RhYmxlLgorICAgICAgICAgICAgICAKK3JlbGVhc2UgMS4xICAgQWRkZWQgLS11c2VyIGFyZ3VtZW50IHRvIGFsbG93IHVzZXIgdG8gY2hhbmdlIHRvCisgICAgICAgICAgICAgIGEgZGlmZmVyZW50IHVzZXJpZC4KKworICAgICAgICAgICAgICBBZGRlZCAtLW14LXRhcmdldCBhcmd1bWVudCB0byBhbGxvdyBtYWlsIHRvIGJlIGRlbGl2ZXJlZAorICAgICAgICAgICAgICBhd2F5IGZyb20gdGhlIGdhdGV3YXkgbWFjaGluZSBydW5uaW5nIGRuc21hc3EuCisKKyAgICAgICAgICAgICAgRml4ZWQgaGlnaGx5ICBvYnNjdXJlIGJ1ZyB3aXRoIHdpbGRjYXJkIHF1ZXJpZXMgZm9yCisgICAgICAgICAgICAgIERIQ1AgbGVhc2UgZGVyaXZlZCBuYW1lcy4KKworICAgICAgICAgICAgICBNb3ZlZCBtYW5wYWdlIGZyb20gc2VjdGlvbiAxIHRvIHNlY3Rpb24gOC4KKworICAgICAgICAgICAgICBBZGRlZCAtLW5vLXBvbGwgb3B0aW9uLgorICAgICAgICAgICAgICBBZGRlZCBTdXNlLXJwbSBzdXBwb3J0LgorICAgICAgICAgICAgICBUaGFua3MgdG8gSm9lcmcgTWF5ZXIgZm9yIHRoZSBsYXN0IHR3by4KKworcmVsZWFzZSAxLjIgICBBZGRlZCBJUHY2IEROUyByZWNvcmQgc3VwcG9ydC4gQUFBQSByZWNvcmRzIGFyZSBjYWNoZWQKKyAgICAgICAgICAgICAgYW5kIHJlYWQgZnJvbSAvZXRjL2hvc3RzLiBSZXZlcnNlLWxvb2t1cHMgaW4gdGhlCisJICAgICAgaXA2LmludCBhbmQgaXA2LmFycGEgZG9tYWlucyBhcmUgc3VwcG9yZWQuIERuc21hc3EgY2FuCisgICAgICAgICAgICAgIHRhbGsgdG8gdXBzdHJlYW0gc2VydmVycyB2aWEgSVB2NiBpZiBpdCBmaW5kcyBJUDYgYWRkcmVzc2VzCisgICAgICAgICAgICAgIGluIC9ldGMvcmVzb2x2LmNvbmYgYW5kIGl0IG9mZmVycyBETlMgc2VydmljZSBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgIGlmIElQdjYgc3VwcG9ydCBpcyBwcmVzZW50IGluIHRoZSBrZXJuZWwuCisKKyAgICAgICAgICAgICAgRXh0ZW5kZWQgbmVnYXRpdmUgY2FjaGluZyB0byBOT0RBVEEgcmVwbGllcy4KKworICAgICAgICAgICAgICBSZS12YW1wZWQgQ05BTUUgcHJvY2Vzc2luZyB0byBjb3BlIHdpdGggUkZDIDIzMTcncyB1c2Ugb2YKKyAgICAgICAgICAgICAgQ05BTUVTIHRvIFBUUiBSUnMgaW4gQ0lEUi4KKworICAgICAgICAgICAgICBBZGRlZCBjb25maWcuaCBhbmQgYSBjb3VwbGUgb2Ygc3ltYm9scyB0byBhaWQKKyAgICAgICAgICAgICAgY29tcGlsYXRpb24gb24gbm9uLWxpbnV4IHN5c3RlbXMuCisKK3JlbGVhc2UgMS4zICAgU29tZSB2ZXJzaW9ucyBvZiB0aGUgTGludXgga2VybmVsIHJldHVybiBFSU5WQUwgcmF0aGVyCisgICAgICAgICAgICAgIHRoZW4gRU5QUk9UT05PU1VQUE9SVCB3aGVuIElQdjYgaXMgbm90IGF2YWlsYWJsZSwgCisgICAgICAgICAgICAgIGNhdXNpbmcgZG5zbWFzcSB0byBib21iIG91dC4gVGhpcyByZWxlYXNlIGZpeGVzIHRoYXQuCisgICAgICAgICAgICAgIFRoYW5rcyB0byBTdGV2ZSBEYXZpcyBmb3IgcG9pbnRpbmcgdGhpcyBvbmUgb3V0LgorCisgICAgICAgICAgICAgIFRyaXZpYWwgY2hhbmdlIHRvIHN0YXJ0dXAgbG9naWMgc28gdGhhdCBkbnNtYXNxIGxvZ3MKKyAgICAgICAgICAgICAgaXRzIHN0dWZmIGFuZCByZWFkcyBjb25maWcgZmlsZXMgc3RyYWlnaHQgYXdheSBvbgorICAgICAgICAgICAgICBzdGFydGluZywgcmF0aGVyIHRoYW4gYWZ0ZXIgdGhlIGZpcnN0IHF1ZXJ5IC0gcHJpbmNpcGxlIAorICAgICAgICAgICAgICBvZiBsZWFzdCBzdXJwcmlzZSBhcHBsaWVzIGhlcmUuICAgICAKKworcmVsZWFzZSAxLjQgICBGaXggYSBidWcgd2l0aCBESFBDIGxlYXNlIHBhcnNpbmcgd2hpY2ggYnJva2UgaW4KKyAgICAgICAgICAgICAgbm9uLVVUQyB0aW1lem9uZXMuIFRoYW5rcyB0byBNYXJrIFdvcm1nb29yIGZvcgorICAgICAgICAgICAgICBzcG90dGluZyBhbmQgZGlhZ25vc2luZyB0aGlzLiBGaXhlZCB2ZXJzaW9ucyBpbgorICAgICAgICAgICAgICB0aGUgLnNwZWMgZmlsZXMgdGhpcyB0aW1lLiBGaXhlZCBidWcgaW4gU3VzZSBzdGFydHVwCisgICAgICAgICAgICAgIHNjcmlwdC4gVGhhbmtzIHRvIERpZGkgTmlrbGF1cyBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCisKK3JlbGVhc2UgMS41ICAgQWRkZWQgLS1maWx0ZXJ3aW4yayBvcHRpb24gd2hpY2ggc3RvcHMgZG5zbWFzcSBmcm9tIGZvcndhcmRpbmcKKwkgICAgICAic3BhbSIgcXVlcmllcyBmcm9tIHdpbjJrIGJveGVzLiBUaGlzIGlzIHVzZWZ1bCB0byBzdG9wIHNwdXJpb3VzCisgICAgICAgICAgICAgIGNvbm5lY3Rpb25zIG92ZXIgZGlhbC1vbi1kZW1hbmQgbGlua3MuIFRoYW5rcyB0byBTdGV2ZSBIYXJkeSAKKyAgICAgICAgICAgICAgZm9yIHRoaXMgY29kZS4KKworICAgICAgICAgICAgICBDbGVhciAidHJ1bmNhdGVkIiBiaXQgaW4gcmVwbGllcyB3ZSByZXR1cm4gZnJvbSB1cHN0cmVhbS4gVGhpcworICAgICAgICAgICAgICBzdG9wcyByZXNvbHZlcnMgZnJvbSBzd2l0Y2hpbmcgdG8gVENQLCB3aGljaCBpcyBwb2ludGxlc3Mgc2luY2UKKyAgICAgICAgICAgICAgZG5zbWFzcSBkb2Vzbid0IHN1cHBvcnQgVENQLiBUaGlzIHNob3VsZCBzb2x2ZSBwcm9ibGVtcworICAgICAgICAgICAgICBpbiByZXNvbHZpbmcgaG90bWFpbC5jb20gZG9tYWlucy4KKworICAgICAgICAgICAgICBEb24ndCBpbmNsdWRlIGdldG9wdC5oIHdoZW4gR251LWxvbmctb3B0aW9ucyBhcmUgZGlzYWJsZWQgLQorICAgICAgICAgICAgICBob3BlZnVsbHkgdGhpcyB3aWxsIGFsbG93IGNvbXBpbGF0aW9uIG9uIEZyZWVCU0QuCisKKwkgICAgICBBZGRlZCB0aGUgLS1saXN0ZW4tYWRkcmVzcyBhbmQgLS1waWQtZmlsZSBmbGFncy4KKworICAgICAgICAgICAgICBGaXhlZCBhIGJ1ZyB3aGljaCBjYXVzZWQgb2xkIGVudHJpZXMgaW4gdGhlIERIQ1AgbGVhc2VzIGZpbGUKKyAgICAgICAgICAgICAgdG8gYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIGN1cnJlbnQgb25lcyB1bmRlciBjZXJ0YWluCisgICAgICAgICAgICAgIGNpcmN1bXN0YW5jZXMuCisKK3JlbGVhc2UgMS42ICAgSWYgYSBtYWNoaW5lIGdldHMgbmFtZWQgdmlhIERIQ1AgYW5kIHRoZSBESENQIG5hbWUgZG9lc24ndCBoYXZlCisgICAgICAgICAgICAgIGEgZG9tYWluIHBhcnQgYW5kIGRvbWFpbiBzdWZmaXggaXMgc2V0IHVzaW5nIHRoZSAtcyBmbGFnLCB0aGVuCisgICAgICAgICAgICAgIHRoYXQgbWFjaGluZSBoYXMgdHdvIG5hbWVzIHdpdGggdGhlIHNhbWUgYWRkcmVzcywgd2l0aCBhbmQgCisgICAgICAgICAgICAgIHdpdGhvdXQgdGhlIGRvbWFpbiBzdWZmaXguIFdoZW4gZG9pbmcgYSBfcmV2ZXJzZV8gbG9va3VwIHRvCisgICAgICAgICAgICAgIGdldCB0aGUgbmFtZSwgdGhlICJ3aXRob3V0IHN1ZmZpeCIgbmFtZSB1c2VkIHRvIGJlIHJldHVybmVkLAorICAgICAgICAgICAgICBub3cgdGhlICJ3aXRoIHN1ZmZpeCIgb25lIGdldHMgcmV0dXJuZWQgaW5zdGVhZC4gVGhpcyBjaGFuZ2UKKwkgICAgICBzdWdnZXN0ZWQgYnkgQXJub2xkIFNjaHVsei4KKworICAgICAgICAgICAgICBGaXhlZCBhc3NvcnRlZCB0eXBvcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gVGhhbmtzIAorICAgICAgICAgICAgICB0byBEYXZpZCBLaW1kb24uCisKKyAgICAgICAgICAgICAgU3VidGxlIHJlYXJyYW5nZW1lbnQgdG8gdGhlIGRvd25sb2FkYWJsZSB0YXJiYWxsLCBhbmQgc3RvcHBlZAorICAgICAgICAgICAgICBkaXN0cmlidXRpbmcgLmRlYnMsIHNpbmNlIGRuc21hc3EgaXMgbm93IGFuIG9mZmljaWFsIERlYmlhbgorICAgICAgICAgICAgICBwYWNrYWdlLgorCityZWxlYXNlIDEuNyAgIEZpeCBhIHByb2JsZW0gd2l0aCBjYWNoZSBub3QgY2xlYXJpbmcgcHJvcGVybHkKKyAgICAgICAgICAgICAgb24gcmVjZWlwdCBvZiBTSUdIVVAuIEJ1ZyBzcG90dGVkIGJ5IFNhdCBEZXNocGFuZGUuCisKKyAgICAgICAgICAgICAgSW4gZ3JvdXAtaWQgY2hhbmdpbmcgY29kZToKKwkgICAgICAxKSBEcm9wIHN1cHBsaW1lbnRhcnkgZ3JvdXBzLgorICAgICAgICAgICAgICAyKSBDaGFuZ2UgZ2lkIGJlZm9yZSBkcm9wcGluZyByb290IChwYXRjaCBmcm9tIFNvZXdvbm8gRWZmZW5kaS4pCisgICAgICAgICAgICAgIDMpIENoYW5nZSBncm91cCB0byAiZGlwIiBpZiBpdCBleGlzdHMsIHRvIGFsbG93IGFjY2VzcworICAgICAgICAgICAgICAgICB0byAvZXRjL3BwcC9yZXNvbHYuY29uZiAoc3VnZ2VzdGlvbiBmcm9tIEpvcmcgU29tbWVyLikKKyAgICAgICAgICAgICAgVXBkYXRlIGRvY3MgdG8gcmVmbGVjdCBhYm92ZSBjaGFuZ2VzLgorCisgICAgICAgICAgICAgIE90aGVyIGRvY3VtZW50YXRpb24gY2hhbmdlcyBmcm9tIERhdmlkIE1pbGxlci4KKyAgICAgICAgICAgICAgQWRkZWQgc3VnZ2VzdGVkIHNjcmlwdCBmcmFnbWVudCBmb3IgZGhjcGNkLmV4ZS4KKworcmVsZWFzZSAxLjggICBGaXggdW5zYWZlIHVzZSBvZiB0b2xvd2VyKCkgbWFjcm8gLSBhbGxvd3MgbGlua2luZyBhZ2FpbnN0IAorICAgICAgICAgICAgICB1bGliYy4gKFBhdGNoZXMgZnJvbSBTb2V3b25vIEVmZmVuZGkgYW5kIEJqb3JuIEFuZGVyc3Nvbi4pCisKKyAgICAgICAgICAgICAgRml4IHR5cG8gaW4gdXNhZ2Ugc3RyaW5nLgorCisJICAgICAgQWRkZWQgYWR2aWNlIGFib3V0IFJlZEhhdCBQUFAgY29uZmlndXJhdGlvbiB0bworICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLiAoVGhhbmtzIHRvIEMuIExlZSBUYXlsb3IuKQorCisJICAgICAgUGF0Y2hlcyB0byBmaXggcHJvYmxlbXMgb24gQlNEIHN5c3RlbXMgZnJvbSBNYXJjIEh1YmVyCisgICAgICAgICAgICAgIGFuZCBDYW4gRXJraW4gQWNhci4gVGhlc2UgYWRkIHRoZSBvcHRpb25zCisgICAgICAgICAgICAgIEhBVkVfQVJDNFJBTkRPTSBhbmQgSEFWRV9TT0NLQUREUl9TQV9MRU4gdG8gY29uZmlnLmguCisJICAgICAgRWxhYm9yYXRlZCBjb25maWcuaCAtIHNob3VsZCByZWFsbHkgdXNlIGF1dG9jb25mLgorCisJICAgICAgRml4IHRpbWUtdG8tbGl2ZSBjYWxjdWxhdGlvbiB3aGVuIGNoYXNpbmcgQ05BTUVzLgorCisJICAgICAgRml4IHVzZS1hZnRlci1mcmVlIGFuZCBtaXNzaW5nIGluaXRpYWxpc2F0aW9uIGJ1Z3MgaW4KKyAgICAgICAgICAgICAgdGhlIGNhY2hlIGNvZGUuIChUaGFua3MgdG8gTWFyYyBIdWJlci4pCisKKyAgICAgICAgICAgICAgQnVpbGRzIG9uIFNvbGFyaXMgOS4gKFRoYW5rcyB0byBNYXJjIEh1YmVyLikgICAgICAgICAgIAorCityZWxlYXNlIDEuOSAgIEZpeGVzIHRvIHJwbSAuc3BlYyBmaWxlcy4KKworICAgICAgICAgICAgICBEb24ndCBwdXQgZXhwaXJlZCBESENQIGVudHJpZXMgaW50byB0aGUgY2FjaGUgb25seSB0byAKKwkgICAgICB0aHJvdyB0aGVtIGF3YXkgYWdhaW4uCisKKyAgICAgICAgICAgICAgUHV0IGRuc21hc3Egb24gYSBzZXZlcmUgbWVtb3J5IGRpZXQ6IHRoaXMgcmVkdWNlcyBib3RoCisgICAgICAgICAgICAgIHRoZSBhbW91bnQgb2YgaGVhcCBzcGFjZSB1c2VkIGFuZCB0aGUgc3RhY2sgc2l6ZQorICAgICAgICAgICAgICByZXF1aXJlZC4gVGhlIGRpZmZlcmVuY2UgaXMgbm90IHJlYWxseSB2aXNpYmxlIHdpdGgKKyAgICAgICAgICAgICAgYmxvYXRlZCBsaWJjcyBsaWtlIGdsaWJjLCBidXQgc2hvdWxkIGRyYW1hdGljYWxseSByZWR1Y2UKKyAgICAgICAgICAgICAgbWVtb3J5IHJlcXVpcmVtZW50cyB3aGVuIGxpbmtlZCBhZ2FpbnN0IHVsaWJjIGZvciB1c2Ugb24KKyAgICAgICAgICAgICAgZW1iZWRlZCByb3V0ZXJzLCBhbmQgdGhhdCdzIHRoZSBwb2ludCByZWFsbHkuIFRoYW5rcyB0bworICAgICAgICAgICAgICBNYXR0aGV3IE5hdGFsaWVyIGZvciBwcm9tcHRpbmcgdGhpcy4gICAKKworCSAgICAgIENoYW5nZWQgZGVidWcgbW9kZSAoLWQpIHNvIHRoYXQgYWxsIGxvZ2dpbmcgYXBwZWFycyBvbgorICAgICAgICAgICAgICBzdGRlcnIgYXMgd2VsbCBhcyBnb2luZyB0byBzeXNsb2dkLiAKKworCSAgICAgIEFkZGVkIEhBVkVfSVBWNiBjb25maWcgc3ltYm9sIHRvIGFsbG93IGNvbXBpbGF0aW9uCisgICAgICAgICAgICAgIGFnYWluc3QgYSBsaWJjIHdoaWNoIGRvZXNuJ3QgaGF2ZSBJUHY2IHN1cHBvcnQuCisKKwkgICAgICBBZGRlZCBhIGZhY2lsaXR5IHRvIGxvZyBhbGwgcXVlcmllcywgZW5hYmxlZCB3aXRoIC1xIGZsYWcuCisKKwkgICAgICBGaXhlZCBwYWNrZXQgc2l6ZSBjaGVja2luZyBidWcgaW4gYWRkcmVzcyBleHRyYWN0aW9uIGNvZGUuCisKKwkgICAgICBIYWx2ZWQgZGVmYXVsdCBjYWNoZSBzaXplIC0gMzAwIHdhcyB3YXkgT1RUIGluIHR5cGljYWwgdXNlLgorCisJICAgICAgQWRkZWQgc2VsZi1NWCBmdW5jdGlvbiwgZW5hYmxlZCBieSAtZSBmbGFnLiBUaGFua3MgdG8KKyAgICAgICAgICAgICAgTHlvbmVsIFZpbmNlbnQgZm9yIHRoZSBwYXRjaC4KKworCSAgICAgIEFkZGVkIEhBVkVfRk9SSyBjb25maWcgc3ltYm9sIGFuZCBzdHVmZiB0byBzdXBwb3J0CisgICAgICAgICAgICAgIHVDbGludXguIFRoYW5rcyB0byBNYXR0aGV3IE5hdGFsaWVyIGZvciB1Q2xpbnV4IHN0dWZmLiAKKworcmVsZWFzZSAxLjEwICBMb2cgd2FybmluZ3MgaWYgcmVzb2x2LmNvbmYgb3IgZGhjcC5sZWFzZXMgYXJlIG5vdAorICAgICAgICAgICAgICBhY2Nlc3NhYmxlIGZvciBhbnkgcmVhc29uLCBhcyBzdWdnZXN0ZWQgYnkgSGlucmljaCBFaWx0cy4KKworCSAgICAgIEZpeGVkIHdyb25nIGFkZHJlc3MgcHJpbnRpbmcgaW4gZXJyb3IgbWVzc2FnZSBhYm91dAorCSAgICAgIG5vIGludGVyZmFjZSB3aXRoIGFkZHJlc3MuCisKKwkgICAgICBVcGRhdGVkIGRvY3MgYW5kIHNwbGl0IGluc3RhbGxhdGlvbiBpbnN0dWN0aW9ucyBpbnRvIHNldHVwLmh0bWwuCisKKwkgICAgICBGaXggYnVnIGluIENOQU1FIGNoYXNpbmcgY29kZTogT25lIENOQU1FIHBvaW50aW5nCisJICAgICAgdG8gbWFueSBBIHJlY29yZHMgd291bGQgbG9zZSBBIHJlY29yZHMgYWZ0ZXIgdGhlIAorCSAgICAgIGZpcnN0LiBUaGlzIGJ1ZyB3YXMgaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDEuOS4KKworCSAgICAgIExvZyBzdGFydHVwIGZhaWx1cmVzIGF0IGxldmVsIENyaXRpY2FsIGFzIHdlbGwgYXMgCisJICAgICAgcHJpbnRpbmcgdGhlbSB0byBzdGFuZGFyZCBlcnJvci4KKwkgICAgICBFeGl0IHdpdGggcmV0dXJuIGNvZGUgMSB3aGVuIGdpdmVuIGJhZCBvcHRpb25zLgorCisJICAgICAgQ2xlYW5lZCB1cCBjb2RlIGZvciBuby1jYWNoZSBvcGVyYXRpb24uCisKKyAgICAgICAgICAgICAgQWRkZWQgLW8gb3B0aW9uIHdoaWNoIGZvcmNlcyBkbnNtYXNxIHRvIHVzZSB0bworICAgICAgICAgICAgICB1cHN0cmVhbSBzZXJ2ZXJzIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbiAvZXRjL3Jlc29sdi5jb25mLgorCisgICAgICAgICAgICAgIEFkZGVkIHVwc3RyZWFtIHNlcnZlciB1c2UgbG9nZ2luZy4KKworICAgICAgICAgICAgICBMb2cgZnVsbCBjYWNoZSBkdW1wIG9uIHJlY2VpcHQgb2YgU0lHVVNSMSB3aGVuIHF1ZXJ5IAorICAgICAgICAgICAgICBsb2dnaW5nIGlzIGVuYWJsZWQgKC1xIHN3aXRjaCkuCisKKwkgICAgICBBZGRlZCAtUyBvcHRpb24gdG8gZGlyZWN0bHkgc3BlY2lmeSB1cHN0cmVhbSBzZXJ2ZXJzIGFuZAorICAgICAgICAgICAgICBhZGRlZCBhYmlsaXR5IHRvIGRpcmVjdCBxdWVyaWVzIGZvciBzcGVjaWZpYyBkb21haW5zIHRvCisgICAgICAgICAgICAgIHNwZWNmaWMgc2VydmVycy4gU3VnZ2VzdGVkIGJ5IEplbnMgVm9uZGVyaGVpZGUuCisKKwkgICAgICBVcGdyYWRlZCByYW5kb20gSUQgZ2VuZXJhdGlvbiAtIHBhdGNoIGZyb20gUm9iIEZ1bmsuCSAgICAgIAorCisJICAgICAgRml4ZWQgcmVhZGluZyBvZiBkb21haW5zIGluIGFyZ3VtZW50cyB3aXRoIGNhcGl0YWwKKyAgICAgICAgICAgICAgbGV0dGVycyBvciB0cmFpbGluZyBwZXJpb2RzLgorCisJICAgICAgRml4ZWQgcG90ZW50aWFsIFNFR1Ygd2hlbiBnaXZlbiBiYWQgb3B0aW9ucy4KKworCSAgICAgIFJlYWQgb3B0aW9ucyBmcm9tIC9ldGMvZG5zbWFzcS5jb25mIGlmIGl0IGV4aXN0cy4KKyAgICAgICAgICAgICAgRG8gc2Vuc2libGUgdGhpbmdzIHdpdGggbWlzc2luZyBwYXJhbWV0ZXJzLCBlZyAKKyAgICAgICAgICAgICAgIi0tcmVzb2x2LWZpbGU9IiB0dXJucyBvZmYgcmVhZGluZyAvZXRjL3Jlc29sdi5jb25mLgorCityZWxlYXNlIDEuMTEgIEFjdHVhbGx5IGltcGxlbWVudCB0aGUgLVIgZmxhZyBwcm9taXNlZCBpbiB0aGUgMS4xMCBtYW4gcGFnZS4KKworICAgICAgICAgICAgICBJbXByb3ZlIGFuZCByYXRpb25hbGlzZSB0aGUgcmV0dXJuIGNvZGVzIGluIGFuc3dlcnMgdG8KKyAgICAgICAgICAgICAgcXVlcmllcy4gSW4gdGhlIGNhc2UgdGhhdCB0aGVyZSBhcmUgbm8gYXZhaWxhYmxlCisgICAgICAgICAgICAgIHVwc3RyZWFtIHNlcnZlcnMgdG8gZm9yd2FyZCBhIHF1ZXJ5IHRvLCByZXR1cm4gUkVGVVNFRC4KKyAgICAgICAgICAgICAgVGhpcyBtYWtlcyBzZW5kbWFpbCB3b3JrIGJldHRlciBvbiBtb2RlbSBjb25uZWN0ZWQKKyAgICAgICAgICAgICAgc3lzdGVtcyB3aGVuIHRoZSBtb2RlbSBsaW5rIGlzIGRvd24gKFRoYW5rcyB0byBSb2dlciBQbGFudCkuCisJICAgICAgQ2FjaGUgYW5kIHJldHVybiB0aGUgTlhET01BSU4gc3RhdHVzIG9mIGZhaWxlZCBxdWVyaWVzOgorICAgICAgICAgICAgICB0aGlzIG1ha2VzIHRoZSBgaG9zdGAgY29tbWFuZCB3b3JrIHdoZW4gdHJhdmVyc2luZyBzZWFyY2gKKyAgICAgICAgICAgICAgcGF0aHMgKFRoYW5rcyB0byBQZXRlciBCYWlsZXkpLiBTZXQgdGhlICJhdXRob3JpdGF0aXZlIgorICAgICAgICAgICAgICBiaXQgaW4gcmVwbGllcyBjb250YWluaW5nIG5hbWVzIGZyb20gL2V0Yy9ob3N0cyBvciBESENQLgorCisgICAgICAgICAgICAgIFRvbGVyYXRlIE1TLURPUyBzdHlsZSBsaW5lIGVuZGluZyBjb2RlcyBpbiAvZXRjL2hvc3RzCisJICAgICAgYW5kIC9ldGMvcmVzb2x2LmNvbmYsIGZvciBwZW9wbGUgd2hvIGNvcHkgZnJvbSB3aW5zb2NrCisgICAgICAgICAgICAgIGluc3RhbGxhdGlvbnMuCisKKwkgICAgICBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIG1vcmUgdGhhbiBvbmUgcmVzb2x2LmNvbmYgZmlsZS4gVGhpcyBpcyAKKyAgICAgICAgICAgICAgaW50ZW5kZWQgZm9yIGxhcHRvcHMgd2hpY2ggY29ubmVjdCB2aWEgREhDUCBvcgorICAgICAgICAgICAgICBQUFAuIFdoaWNoZXZlciByZXNvbHYuY29uZiB3YXMgdXBkYXRlZCBsYXN0IGlzIHVzZWQuCisKKyAgICAgICAgICAgICAgQWxsb3cgLVMgZmxhZ3Mgd2hpY2ggc3BlY2lmeSBhIGRvbWFpbiBidXQgbm8gc2VydmVyCisgICAgICAgICAgICAgIGFkZHJlc3MuIFRoaXMgZ2l2ZXMgbG9jYWwgZG9tYWlucyB3aGljaCBhcmUgbmV2ZXIgZm9yd2FyZGVkLgorCisJICAgICAgQWRkIC1FIGZsYWcgdG8gYXV0b21hdGljYWxseSBhZGQgdGhlIGRvbWFpbiBzdWZmaXggdG8KKyAgICAgICAgICAgICAgbmFtZXMgaW4gL2V0Yy9ob3N0cyAtc3VnZ2VzdGlvbiBmcm9tIFBoaWwgSGFybWFuLgorCisJICAgICAgQWx3YXlzIHJldHVybiBhIHplcm8gdGltZS10by1saXZlIGZvciBuYW1lcyBkZXJpdmVkIGZyb20gCisJICAgICAgREhDUCB3aGljaCBzdG9wcyBhbnRoaW5nIGVsc2UgY2FjaGluZyB0aGVzZQorICAgICAgICAgICAgICBuYW1lcy4gUHJldmlvdXNseSB0aGUgVFRMIHdhcyBkZXJpdmVkIGZyb20gdGhlIGxlYXNlCisgICAgICAgICAgICAgIHRpbWUgYnV0IHRoYXQgaXMgaW5jb3JyZWN0IHNpbmNlIGEgbGVhc2UgY2FuIGJlIGdpdmVuCisgICAgICAgICAgICAgIHVwIGVhcmx5OiBkbnNtYXNxIHdvdWxkIGtub3cgdGhpcyBidXQgYW55dGhpbmcgd2l0aCB0aGUKKyAgICAgICAgICAgICAgbmFtZSBjYWNoZWQgd2l0aCBsb25nIFRUTCB3b3VsZCBub3QgYmUgdXBkYXRlZC4KKworCSAgICAgIEV4dGVuZGVkIEhBVkVfSVBWNiBjb25maWcgZmxhZyB0byBhbGxvdyBjb21wbGlhdGlvbiBvbgorCSAgICAgIG9sZCBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgbW9kZXJuIGxpYnJhcnkgcm91dGluZXMKKwkgICAgICBsaWtlIGluZXRfbnRvcCgpLiBUaGFua3MgdG8gUGhpbCBIYXJtYW4gZm9yIHRoZSBwYXRjaC4KKworcmVsZWFzZSAxLjEyICBBbGxvdyBtb3JlIHRoYW4gb25lIGRvbWFpbiBpbiBzZXJ2ZXIgY29uZmlnIGxpbmVzIGFuZAorCSAgICAgIG1ha2UgImxvY2FsIiBhIHN5bm9ueW0gZm9yICJzZXJ2ZXIiLiBUaGlzIG1ha2VzIHRoaW5ncworCSAgICAgIGxpa2UgImxvY2FsPS9sb2NhbG5ldC90aGVrZWxsZXlzLm9yZy51ay8iIGxlZ2FsLiBBbGxvdworICAgICAgICAgICAgICBwb3J0IHRvIHNwZWNpZmllZCBhcyBwYXJ0IG9mIHNlcnZlciBhZGRyZXNzLgorCisJICAgICAgQWxsb3cgd2hvbGUgZG9tYWlucyB0byBoYXZlIGFuIElQIGFkZHJlc3Mgc3BlY2lmaWVkCisgICAgICAgICAgICAgIGluIC9ldGMvZG5zbWFzcS5jb25mLiAoL2V0Yy9ob3N0cyBkb2Vzbid0IHdvcmsgZG9tYWlucykuCisgICAgICAgICAgICAgIGFkZHJlc3M9L2RvdWJsZWNsaWNrLm5ldC8xMjcuMC4wLjEgc2hvdWxkIGNhdGNoIGFsbAorICAgICAgICAgICAgICB0aG9zZSBuYXN0eSBiYW5uZXIgYWRzLiBJbnNwaXJlZCBieSBhIHBhdGNoIAorCSAgICAgIGZyb20gRGFuaWVsIEdyeW5pZXdpY3oKKworCSAgICAgIExvZyB0aGUgc291cmNlIG9mIGVhY2ggcXVlcnkgd2hlbiBsb2dnaW5nIHN3aXRjaGVkIG9uLiAKKworCSAgICAgIEZpeCBidWcgaW4gc2NyaXB0IGZyYWdtZW50IGZvciBkaGNwY2QgLSB0aGFua3MgdG8gQmFycnkgU3Rld2FydC4KKwkgICAgICAKKwkgICAgICBGaXggYnVnIHdoaWNoIG1lYW50IHRoYXQgc3RyaWN0LW9yZGVyIGFuZCBzZWxmLW14IHdlcmUKKwkgICAgICBhbHdheXMgZW5hYmxlZC4KKworCSAgICAgIEJ1aWxkcyB3aXRoIExpbnV4IGxpYmM1IG5vdyAtIGZvciB0aGUgRnJlZXNjbyBwcm9qZWN0LgorCisJICAgICAgRml4ZWQgTWFrZWZpbGUgaW5zdGFsbGF0aW9uIHNjcmlwdCAocGF0Y2ggZnJvbSBTaWx2YW4KKwkgICAgICBNaW5naGV0dGkpIGFuZCBhZGRlZCBDQyBhbmQgQ0ZMQUdTIHZhcmlhYmxlcy4KKworCSAgICAgIEltcHJvdmUgcmVzb3VyY2UgYWxsb2NhdGlvbiB0byByZWR1Y2UgdnVsbmVyYWJpbGl0eSB0bworCSAgICAgIERPUyBhdHRhY2tzIC0gdGhlIG9sZCB2ZXJzaW9uIGNvdWxkIGhhdmUgYWxsIHF1ZXJpZXMKKwkgICAgICBibG9ja2VkIGJ5IGEgY29udGludW91cyBoaWdoLXNwZWVkIHN0cmVhbSBvZgorCSAgICAgIHF1ZXJpZXMuIE5vdyBzb21lIHF1ZXJpZXMgd2lsbCBzdWNjZWVkLCBhbmQgdGhlIGV4Y2VzcworCSAgICAgIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCBhIHNlcnZlciBmYWlsIGVycm9yLiBUaGlzIGNoYW5nZSBhbHNvCisJICAgICAgcHJvdGVjdHMgYWdhaW5zdCBzZXJ2ZXItbG9vcHM7IHNldHRpbmcgdXAgYSByZXNvbHZpbmcKKyAgICAgICAgICAgICAgbG9vcCBiZXR3ZWVuIHR3byBpbnN0YW5jZXMgb2YgZG5zbWFzcSBpcyBubyBsb25nZXIKKwkgICAgICBjYXRhc3Ryb3BoaWMuIFRoZSBzZXJ2ZXJzIHdpbGwgY29udGludWUgdG8gcnVuLCBsb29wZWQKKwkgICAgICBxdWVyaWVzIGZhaWwgYW5kIGEgd2FybmluZyBpcyBsb2dnZWQuIFRoYW5rcyB0byBDLiBMZWUKKwkgICAgICBUYXlsb3IgZm9yIGhlbHAgd2l0aCB0aGlzLgorCSAgICAgIAorcmVsZWFzZSAxLjEzICBBZGRlZCBzdXBwb3J0IGZvciBidWlsZGluZyBycG1zIHN1aXRhYmxlIGZvciBtb2Rlcm4gU3VzZSAKKwkgICAgICBzeXN0ZW1zLiAocGF0Y2ggZnJvbSBBbmRpIDxjYW1iZWlzQG5ldHBsYWNlLmRlPikKKwkgICAgICAKKwkgICAgICBBZGRlZCBvcHRpb25zIC0tZ3JvdXAsIC0tbG9jYWxteCwgLS1sb2NhbC10dGwsCisJICAgICAgLS1uby1uZWdjYWNoZSwgLS1hZGRuLWhvc3QuCisJICAgICAgCisJICAgICAgTW92ZWQgYWxsIHRoZSB2YXJpb3VzIHJwbS1idWlsZGluZyBiaXRzIGludG8gL3JwbS4KKwkgICAgICAKKwkgICAgICBGaXggYnVpbGRzIHdpdGggZ2xpYmMgMi4xICh0aGFua3MgdG8gQ3Jpc3RpYW4KKwkgICAgICBJb25lc2N1LUlkYm9ocm4pCisJICAgICAgCisJICAgICAgUHJlc2VydmUgY2FzZSBpbiBkb21haW4gbmFtZXMsIGFzIHBlciBSRkMxMDM1LgorCSAgICAgIAorCSAgICAgIEZpeGVkIEFOWSBxdWVyaWVzIHRvIGRvbWFpbnMgd2l0aCAtLWFkZHJlc3Mgc3BlY2lmaWNhdGlvbi4KKwkgICAgICAKKwkgICAgICBGaXhlZCBGcmVlQlNEIGJ1aWxkLiAodGhhbmtzIHRvIFN0ZXZlbiBIb25zb24pCisJICAgICAgCisJICAgICAgQWRkZWQgLVEgb3B0aW9uIHdoaWNoIGFsbG93cyBhIHNwZWNpZmllZCBwb3J0IHRvIGJlIHVzZWQKKwkgICAgICB0byB0YWxrIHRvIHVwc3RyZWFtIHNlcnZlcnMuIFVzZWZ1bCBmb3IgcGVvcGxlIHdobyB3YW50CisJICAgICAgdmVyeSBwYXJhbm9pZCBmaXJld2FsbHMgd2hpY2ggb3BlbiBpbmRpdmlkdWFsIFVEUCBwb3J0LgorCSAgICAgICh0aGFua3MgdG8gRGF2aWQgQ29lIGZvciB0aGUgcGF0Y2gpCisJICAgICAgCSAgICAgIAorcmVsZWFzZSAxLjE0ICBGaXhlZCBtYW4gcGFnZSBkZXNjcmlwdGlvbiBvZiAtYiBvcHRpb24gd2hpY2ggY29uZnVzZWQgCisJICAgICAgL2V0Yy9ob3N0cyB3aXRoIC9ldGMvcmVzb2x2LmNvbmYuICh0aGFua3MgdG8gQ2hyaXN0b3BoZXIKKwkgICAgICBXZWltYW5uKQorCSAgICAgIAorCSAgICAgIEZpeGVkIGNvbmZpZy5oIHRvIGFsbG93IGJ1aWxkaW5nIHVuZGVyIE1BQ09TIFggYW5kIGdsaWJjCisJICAgICAgMi4wLnguICh0aGFua3MgdG8gTWF0dGhldyBHcmVnYW4gYW5kIFNlcmdlIENhcm9uKQorCSAgICAgIAorCSAgICAgIEFkZGVkIC0tZXhjZXB0LWludGVyZmFjZSBvcHRpb24uIChTdWdnZXN0ZWQgYnkgU2VyZ2UgQ2Fyb24pCisKKwkgICAgICBBZGRlZCBTSUdVU1IyIGZhY2lsaXR5IHRvIHJlLXNjYW4gZm9yIG5ldworCSAgICAgIGludGVyZmFjZXMuIChTdWdnZXN0ZWQgYnkgU2VyZ2UgQ2Fyb24pCisKKwkgICAgICBGaXhlZCBTRUdWIGluIG9wdGlvbi1yZWFkaW5nIGNvZGUgZm9yIGludmFsaWQgb3B0aW9ucy4KKwkgICAgICAoVGhhbmtzIHRvIEtsYWFzIFRlc2NoYXVlcikKKworICAgICAgICAgICAgICBGaXhlZCBtYW4gcGFnZSB0byBjbGFyaWZ5IGVmZmVjdCBvZiBTSUdVU1IxIG9uCisJICAgICAgL2V0Yy9yZXNvbHYuY29uZi4KKwkgICAgICAoVGhhbmtzIHRvIEtsYWFzIFRlc2NoYXVlcikKKwkgICAgICAKKwkgICAgICBDaGVjayB0aGF0IHJlY2lldmVkIHF1ZXJpZXMgaGF2ZSBvbmx5IHJmYzEwMzUtbGVnYWwgY2hhcmFjdGVycworCSAgICAgIGluIHRoZW0uIFRoaXMgY2hlY2sgaXMgbWFpbmx5IHRvIGF2b2lkIGJhZCBzdHJpbmdzIGJlaW5nCisJICAgICAgc2VudCB0byBzeXNsb2cuCisKKwkgICAgICBGaXhlZCAmJi8mIGNvbmZ1c2lvbiBpbiBvcHRpb24uYyBhbmQgYWRkZWQgREVTVERJUgorCSAgICAgIHZhcmlhYmxlIGZvciAibWFrZSBpbnN0YWxsIiAoVGhhbmtzIHRvIE9zdmFsZG8gCisgICAgICAgICAgICAgIE1hcnF1ZXMgZm9yIHRoZSBwYXRjaC4pCisKKwkgICAgICBGaXhlZCAvZXRjL2hvc3RzIHBhcnNpbmcgY29kZSB0byBjb3BlIHdpdGggTVMtRE9TCisJICAgICAgbGluZS1lbmRzIGluIHRoZSBmaWxlLiBUaGlzIHdhcyBzdXBwb3NlZCB0byBiZSBkb25lIGluCisJICAgICAgdmVyc2lvbiAxLjExLCBidXQgc29tZXRoaW5nIGdvdCBtaXNzZWQuIChUaGFua3MgdG8gRG91ZworCSAgICAgIENvcGVzdGFrZSBmb3IgaGVscGluZyB0byBmaW5kIHRoaXMuKQorCisJICAgICAgU3F1YXNoIHJlcGVhdGVkIG5hbWUvYWRkcmVzcyBwYWlycyByZWFkIGZyb20gaG9zdHMKKwkgICAgICBmaWxlcy4KKworCSAgICAgIFRpZGllZCB1cCByZXNvdXJjZSBoYW5kbGluZyBpbiB1dGlsLmMgKFRoYW5rcyB0bworCSAgICAgIENyaXN0aWFuIElvbmVzY3UtSWRib2hybikuCisKKwkgICAgICBBZGRlZCBoYXNoZWQgc2VhcmNoaW5nIG9mIGRvbWFpbiBuYW1lcy4gUGVvcGxlIGFyZSBzdGFydGluZworCSAgICAgIHRvIHVzZSBkbnNtYXNxIHdpdGggbGFyZ2VyIGxvYWRzIG5vdywgYW5kIGJpZ2dlciBjYWNoZXMsCisJICAgICAgYW5kIGxhcmdlIGxpc3RzIG9mIGFkLWJsb2NrIGFkZHJlc3Nlcy4gVGhpcyBtZWFucyBkb2luZworCSAgICAgIGxpbmVhciBzZWFyY2hlcyBjYW4gc3RhcnQgdG8gdXNlIGxvdHMgb2YgQ1BVIHNvIEkgYWRkZWQgaGFzaGVkCisJICAgICAgc2VhcmNoaW5nIGFuZCBzZXJpb3VzbHkgb3B0aW1pc2VkIHRoZSBjYWNoZSBjb2RlIGZvciAKKwkgICAgICBhbGdvcml0aG1pYyBlZmZpY2llbmN5LiBBbHNvIHVwcGVkIHRoZSBsaW1pdCBvbiBjYWNoZSAKKwkgICAgICBzaXplIHRvIDEwMDAwLgorCisJICAgICAgRml4ZWQgbG9nZ2luZyBvZiB0aGUgc291cmNlIG9mIG5hbWVzIGZyb20gdGhlIGFkZGl0aW9uYWwKKwkgICAgICBob3N0cyBmaWxlIGFuZCBmcm9tIHRoZSAiYm9ndXMgcHJpdmF0ZSBhZGRyZXNzIiBvcHRpb24uCisKKwkgICAgICBGaXhlZCBzcHVyaW91cyByZS1yZWFkaW5nIG9mIGVtcHR5IGxlYXNlIGZpbGVzLiAoVGhhbmtzCisJICAgICAgdG8gTGV3aXMgQmF1Z2htYW4gZm9yIHNwb3R0aW5nIHRoaXMuKQorCisJICAgICAgRml4ZWQgYnVpbGRpbmcgdW5kZXIgdWNsaWJjIChwYXRjaCBmcm9tIENyaXN0aWFuIElvbmVzY3UtSWRib2hybikKKwkgICAgICAKKwkgICAgICBEbyBzb21lIHNvY2tldCB0d2Vha2luZyB0byBhbGxvdyBkbnNtYXNxIHRvIGNvLWV4aXN0CisJICAgICAgd2l0aCBCSU5ELiBUaGFua3MgdG8gU3RlZmFuICdTZWMnIFplaGwgZm9yIHRoZSBwYXRjaC4KKworcmVsZWFzZSAxLjE1ICBBZGRlZCAtLWJvZ3VzLW54ZG9tYWluIG9wdGlvbi4KKworICAgICAgICAgICAgICBSZXN0cmljdCBjaGVja2luZyBvZiByZXNvbHYuY29uZiBhbmQgREhDUCBsZWFzZXMgZmlsZXMKKyAgICAgICAgICAgICAgdG8gb25jZSBwZXIgc2Vjb25kLiBUaGlzIGlzIGludGVuZGVkIHRvIGltcHJvdmUKKyAgICAgICAgICAgICAgcGVyZm9ybWFuY2UgdW5kZXIgaGVhdnkgbG9hZHMuIEFsc28gbWFrZSBhIHN5c3RlbSBjYWxsCisJICAgICAgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWUgb25jZSBwZXIgcXVlcnksIHJhdGhlciB0aGFuIGZvdXIKKyAgICAgICAgICAgICAgdGltZXMuCisKKwkgICAgICBJbmNyZWFzZWQgbnVtYmVyIG9mIG91dHN0YW5kaW5nIHF1ZXJpZXMgdG8gMTUwIGluCisJICAgICAgY29uZmlnLmgKKworcmVsZWFzZSAxLjE2ICBBbGxvdyAiLyIgY2hhcmFjdGVycyBpbiBkb21haW4gbmFtZXMgLSB0aGlzIGZpeGVzCisgICAgICAgICAgICAgIGNhY2hpbmcgb2YgUkZDIDIzMTcgQ05BTUUtUFRSIHJlY29yZHMuCisKKwkgICAgICBGaXhlZCBicmFpbi1mYXJ0IGluIC1CIG9wdGlvbiB3aGVuIEdFVE9QVF9MT05HIG5vdAorCSAgICAgIGVuYWJsZWQgLSB0aGFua3MgdG8gU3RldmVuIFlvdW5nIGFuZCBKYXNvbiBNaWxsZXIgCisJICAgICAgZm9yIHBvaW50aW5nIHRoaXMgb3V0LgorCisJICAgICAgR2VuZXJhbGlzZWQgYm9ndXMtbnhkb21haW4gY29kZTogYWxsb3cgbW9yZSB0aGFuIG9uZQorCSAgICAgIGFkZHJlc3MgdG8gY2hlY2ssIGFuZCBkZWFsIHdpdGggcmVwbGllcyB3aXRoIG11bHRpcGxlCisJICAgICAgYW5zd2VyIHJlY29yZHMuIChCYXNlZCBvbiBjb250cmlidXRpb24gZnJvbSBIdW1iZXJ0bworCSAgICAgIE1hc3NhLikKKworCSAgICAgIFVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24gdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dAorCSAgICAgIGJvZ3VzLW54ZG9tYWluIGFuZCB0aGUgVmVyaXNpZ24gdHJhZ2VkeS4KKworCSAgICAgIEFkZGVkIGxpYnJhcmllcyBuZWVkZWQgb24gU29sYXJpcyB0byBNYWtlZmlsZS4KKworCSAgICAgIEFkZGVkIGZhY2lsaXR5IHRvIHNldCBzb3VyY2UgYWRkcmVzcyBpbiBxdWVyaWVzIHRvCisJICAgICAgdXBzdHJlYW0gbmFtZXNlcnZlcnMuIFRoaXMgaXMgdXNlZnVsIHdpdGggbXVsdGlob21lZAorCSAgICAgIGhvc3RzLCBlc3BlY2lhbGx5IHdoZW4gdXNpbmcgVlBOcy4gVGhhbmtzIHRvIFRvbSBGYW5uaW5nCisJICAgICAgZm9yIHN1Z2dlc3RpbmcgdGhpcyBmZWF0dXJlLgorCisJICAgICAgVHdlYWtlZCBsb2dnaW5nOiBsb2cgdG8gZmFjaWxpdHkgTE9DQUwwIHdoZW4gaW4KKwkgICAgICBkZWJ1Zy9uby1kYWVtb24gbW9kZSBhbmQgY2hhbmdlZCBsZXZlbCBvZiBxdWVyeSBsb2dnaW5nCisJICAgICAgZnJvbSBJTkZPIHRvIERFQlVHLiBNYWtlIGxvZyBvcHRpb25zIGNvbnRyb2xsYWJsZSBpbgorCSAgICAgIGNvbmZpZy5oCisKK3JlbGVhc2UgMS4xNyAgRml4ZWQgY3Jhc2ggd2l0aCBESENQIGhvc3RuYW1lcyA+IDQwIGNoYXJhY3RlcnMuCisKKyAgICAgICAgICAgICAgRml4ZWQgbmFtZS1jb21wYXJpc2lvbiByb3V0aW5lcyB0byBub3QgZGVwZW5kIG9uIExvY2FsZSwKKyAgICAgICAgICAgICAgaW4gdGhlb3J5IHRoaXMgdmVyc2lvbnMgc2luY2UgMS4xNSBjb3VsZCBsb2NrIHVwIG9yIGdpdmUKKyAgICAgICAgICAgICAgd3JvbmcgcmVzdWx0cyB3aGVuIHJ1biB3aXRoIGxvY2FsZSAhPSAnQycuCisKKwkgICAgICBGaXggcG90ZW50aWFsIGxvY2t1cCBpbiBjYWNoZSBjb2RlLiAodGhhbmtzIHRvIEhlbm5pbmcKKwkgICAgICBHbGF3ZSBmb3IgaGVscCBjaGFzaW5nIHRoaXMgZG93bi4pCisKKwkgICAgICBNYWRlIGxlYXNlLWZpbGUgcmVhZGVyIGJ1bGxldC1wcm9vZi4KKworCSAgICAgIEFkZGVkIC1EIG9wdGlvbiwgc3VnZ2VzdGVkIGJ5IFBldGVyIEZpY2h0bmVyLgorCityZWxlYXNlIDEuMTggIEFkZGVkIHJvdW5kLXJvYmluIEROUyBmb3IgbmFtZXMgd2hpY2ggaGF2ZSBtb3JlIHRoYW4gb25lCisgICAgICAgICAgICAgIGFkZHJlc3MuIEluIHRoaXMgY2FzZSBhbGwgdGhlIGFkZHJlc3NlcyB3aWxsIGJlCisgICAgICAgICAgICAgIHJldHVybmVkLCBhcyBiZWZvcmUsIGJ1dCB0aGUgb3JkZXIgd2lsbCBjaGFuZ2Ugb24gZWFjaAorICAgICAgICAgICAgICBxdWVyeS4KKworCSAgICAgIFJlbW92ZSBzdHJheSB0b2xvd2VyKCkgYW5kIGlzYWxudW0oKSBjYWxscyBtaXNzZWQgaW4gCisJICAgICAgbGFzdCByZWxlYXNlIHRvIGNvbXBsZXRlIExPQ0FMRSBpbmRlcGVuZGVuY2UuCisKKwkgICAgICBBbGxvdyBwb3J0IG51bWJlcnMgaW4gc291cmNlLWFkZHJlc3Mgc3BlY2lmaWNhdGlvbnMuCisKKwkgICAgICBGb3IgaG9zdG5hbWVzIHdpdGhvdXQgYSBkb21haW4gcGFydCB3aGljaCBkb24ndCBnZXQKKwkgICAgICBmb3J3YXJkZWQgYmVjYXVzZSAtRCBpcyBpbiBlZmZlY3QsIHJldHVybiBOWERPTUFJTiBub3QKKwkgICAgICBhbiBlbXB0eSByZXBseS4KKworCSAgICAgIEFkZCBjb2RlIHRvIHJldHVybiB0aGUgc29mdHdhcmUgdmVyc2lvbiBpbiByZXBzb25zZSB0byB0aGUKKwkgICAgICBjb3JyZWN0IG1hZ2ljIHF1ZXJ5IGluIHRoZSBzYW1lIHdheSBhcyBCSU5ELiBVc2UgIAorCSAgICAgICJkaWcgdmVyc2lvbi5iaW5kIGNoYW9zIHR4dCIgdG8gbWFrZSB0aGUgcXVlcnkuCisKKwkgICAgICBBZGRlZCBuZWdhdGl2ZSBjYWNoaW5nIGZvciBQVFIgKGFkZHJlc3MgdG8gbmFtZSkgcmVjb3Jkcy4KKworCSAgICAgICBFbnN1cmUgdGhhdCBuYW1lcyBvZiB0aGUgZm9ybSB0eXBpY2FsbHkgdXNlZCBpbiBQVFIgcXVlcmllcworICAgICAgICAgICAgICAoaWUgdy54Lnl6LmluLWFkZHIuYXJwYSBhbmQgSVB2NiBlcXVpdmFsZW50cykgZ2V0CisgICAgICAgICAgICAgIGNvcnJlY3QgYW5zd2VycyB3aGVuIHF1ZXJpZWQgYXMgb3RoZXIgdHlwZXMuIEl0J3MKKyAgICAgICAgICAgICAgdW5saWtlbHkgdGhhdCBhbnlvbmUgd291bGQgZG8gdGhpcywgYnV0IHRoZSBjaGFuZ2UgbWFrZXMKKyAgICAgICAgICAgICAgdGhpbmdzIHBlZGFudGljYWxseSBjb3JyZWN0LgorCisJICAgICAgVGF1Z2h0IGRuc21hc3EgdG8gdW5kZXJzdGFuZCAiYml0c3RyaW5nIiBuYW1lcywgYXMgdGhlc2UKKwkgICAgICBhcmUgdXNlZCBmb3IgUFRSIGxvb2t1cHMgb2YgSVB2NiBhZGRyZXNzZXMgYnkgc29tZSAKKwkgICAgICByZXNvbHZlcnMgYW5kIGxvb2t1cCB0b29scy4gRG5zbWFzcSBub3cgdW5kZXJzdGFuZHMgYm90aAorCSAgICAgIHRoZSBpcDYuaW50IGRvbWFpbiBhbmQgdGhlIGlwNi5hcnBhIGRvbWFpbiBhbmQgYm90aAorCSAgICAgIG5pYmJsZSBhbmQgYml0c3RyaW5nIGZvcm1hdHMgc28gaXQgc2hvdWxkIHdvcmsgd2l0aCBhbnkKKwkgICAgICBjbGllbnQgY29kZS4gU3RhbmRhcmRzIGZvciB0aGlzIHN0dWZmIGhhdmUgZmxpcC1mbG9wcGVkCisJICAgICAgb3ZlciB0aGUgbGFzdCBmZXcgeWVhcnMsIGxlYXZpbmcgbWFueSBkaWZmZXJlbnQgY2xpZW50cworCSAgICAgIGluIHRoZWlyIHdha2UuIFNlZSBSRkMyNjczIGZvciBkZXRhaWxzIG9mIGJpdHN0cmluZ3MuCisJICAgICAgCisJICAgICAgQWxsb3cgJ18nIGNoYXJhY3RlcnMgaW4gZG9tYWluIG5hbWVzOiBMZWdhbCBjaGFyYWN0ZXJzCisJICAgICAgYXJlIG5vdyBbYS16XVtBLVpdLi1fIENoZWNrIG5hbWVzIHJlYWQgZnJvbSBob3N0cyBmaWxlcworCSAgICAgIGFuZCBsZWFzZXMgZmlsZXMgYW5kIHJlamVjdCBpbGxlZ2FsIG9uZXMgd2l0aCBhIG1lc3NhZ2UKKwkgICAgICBpbiBzeXNsb2cuIAorCisJICAgICAgTWFrZSBlbXB0eSBkb21haW4gbmFtZXMgaW4gc2VydmVyIGFuZCBhZGRyZXNzIG9wdGlvbnMgCisJICAgICAgaGF2ZSB0aGUgc3BlY2lhbCBtZWFuaW5nICJ1bnF1YWxpZmllZAorCSAgICAgIG5hbWVzIi4gKHVucXVhbGlmaWVkIG5hbWVzIGFyZSBuYW1lcyB3aXRob3V0IGFueSBkb3RzIGluCisJICAgICAgdGhlbSkuIEl0J3Mgbm93IHBvc3NpYmxlIHRvIGRvIHNlcnZlcj0vLzEuMi4zLjQgYW5kIGhhdmUgCisJICAgICAgdW5xdWFsaWZpZWQgbmFtZXMgc2VudCB0byBhIHNwZWNpYWwgbmFtZXNlcnZlci4KKworcmVsZWFzZSAyLjByYzEgIAorICAgICAgICAgICAgICBNb3ZlZCBzb3VyY2UgY29kZSBpbnRvIHNyYy8gZGlyZWN0b3J5LgorCisJICAgICAgRml4ZXMgdG8gY3VyZSBjb21waWxhdGlvbiBicmVha2FnZSB3aGVuIEhBVkVfSVBWNiBub3QKKwkgICAgICBzZXQsIHRoYW5rcyB0byBDbGFhcyBIaWxicmVjaHQuCisKKwkgICAgICBCSUcgQ0hBTkdFOiBhZGRlZCBhbiBpbnRlZ3JhdGVkIERIQ1Agc2VydmVyIGFuZCByZW1vdmVkCisJICAgICAgdGhlIGNvZGUgdG8gcmVhZCBJU0MgZGhjcC5sZWFzZXMuIFRoaXMgd2lucyBpbiB0ZXJtcyAKKwkgICAgICBvZiBlYXNlIG9mIHNldHVwIGFuZCBjb25maWd1cmF0aW9uIGZsZXhpYmlsaXR5IGFuZCAKKwkgICAgICB0b3RhbCBtYWNoaW5lIHJlc291cmNlcyBjb25zdW1lZC4gCisKKwkgICAgICBSZS1qaWdlZCB0aGUgc2lnbmFsIGhhbmRsaW5nIGNvZGUgdG8gcmVtb3ZlIGEgcmFjZQorCSAgICAgIGNvbmRpdGlvbiBhbmQgdG8gYmUgbW9yZSBwb3J0YWJsZS4KKworcmVsZWFzZSAyLjAKKwkgICAgIFRoYW5rcyB0byBEYXZpZCBBc2h3b3J0aCBmb3IgZmVlZGJhY2sgd2hpY2ggaW5mb3JtZWQgbWFueSAKKwkgICAgIG9mIHRoZSBmaXhlcyBiZWxvdy4KKworICAgICAgICAgICAgIEFsbG93IGhvc3RzIHRvIGJlIHNwZWNpZmllZCBieSBjbGllbnQgSUQgaW4gZGhjcC1ob3N0cworICAgICAgICAgICAgIG9wdGlvbnMuIFRoZXNlIGFyZSBub3cgb25lIG9mIAorICAgICAgICAgICAgIGRoY3AtaG9zdD08aGFyZHdhcmUgYWRkcj4sLi4uLiAKKyAgICAgICAgICAgICBkaGNwLWhvc3Q9aWQ6PGhleCBjbGllbnQgaWQ+LC4uLi4uIAorICAgICAgICAgICAgIGRoY3AtaG9zdD1pZDo8YXNjaWkgY2xpZW50IGlkPiwuLi4uLgorCSAgICAgCisJICAgICBBbGxvdyBkaGNwLWhvc3Qgb3B0aW9ucyB0byBzcGVjaWZ5IGFueSBJUCBhZGRyZXNzIG9uIHRoZQorICAgICAgICAgICAgIERIQ1Atc2VydmVkIG5ldHdvcmssIG5vdCBqdXN0IHRoZSByYW5nZSBhdmFpbGFibGUgZm9yCisgICAgICAgICAgICAgZHluYW1pYyBhbGxvY2F0aW9uLgorCisJICAgICBBbGxvdyBkaGNwLWhvc3Qgb3B0aW9ucyBmb3IgdGhlIHNhbWUgaG9zdCB3aXRoIGRpZmZlcmVudAorCSAgICAgSVAgYWRyZXNzZXMgd2hlcmUgdGhlIGNvcnJlY3Qgb25lIHdpbGwgYmUgc2VsZWN0ZWQgZm9yCisJICAgICB0aGUgbmV0d29yayB0aGUgaG9zdCBhcHBlYXJzIG9uLgorCisJICAgICBGaXggcGFyc2luZyBvZiAtLWRoY3Atb3B0aW9uIHRvIGFsbG93IG1vcmUgdGhhbiBvbmUKKwkgICAgIElQIGFkZHJlc3MgYW5kIHRvIGFsbG93IHRleHQtdHlwZSBvcHRpb25zLgkgICAgIAorCisJICAgICBJbmhpYml0IHVzZSBvZiAtLWRoY3Atb3B0aW9uIHRvIHNlbmQgaG9zdG5hbWUgREhDUCBvcHRpb25zLgorCSAgICAgCisJICAgICBVcGRhdGUgdGhlIEROUyB3aXRoIERIQ1AgaW5mb3JtYXRpb24gYWZ0ZXIgcmUtcmVhZGluZworCSAgICAgL2V0Yy9ob3N0cyBzbyB0aGF0IGFueSBESENQIGRlcml2ZWQgbmFtZXMgd2hpY2ggaGF2ZSBiZWVuCisJICAgICBzaGFkb3dlZCBieSBub3ctZGVsZXRlZCBob3N0cyBlbnRyaWVzIGJlY29tZSB2aXNpYmxlLgorCisJICAgICBGaXggdHlwb3MgaW4gZG5zbWFzcS5jb25mLmV4YW1wbGUKKworCSAgICAgRml4ZXMgdG8gTWFrZWZpbGUocykgdG8gaGVscCBwa2dzcmMgcGFja2FnaW5nIC0gcGF0Y2ggCisJICAgICBmcm9tICJwYW5jYWtlIi4KKworCSAgICAgQWRkIGRoY3AtYm9vdCBvcHRpb24gdG8gc3VwcG9ydCBuZXR3b3JrIGJvb3QuCisKKwkgICAgIENoZWNrIGZvciBkdXBsaWNhdGUgSVAgYWRkcmVzc2VzIGluIGRoY3AtaG9zdHMgbGluZXMKKwkgICAgIGFuZCByZWZ1c2UgdG8gcnVuIGlmIGZvdW5kLiBJZiBhbGxvd2VkIHRvIHJlbWFpbiB0aGVzZSAKKwkgICAgIGNhbiBwcm92b2tlIGFuIGluZmluaXRlIGxvb3AgaW4gdGhlIERIQ1AgcHJvdG9jb2wuCisKKwkgICAgIEF0dGVtcHRlZCB0byByYXRpb25hbGlzZSB0aGUgLnNwZWMgZmlsZXMgZm9yIHJwbQorCSAgICAgYnVpbGRpbmcuIFRoZXJlIGFyZSBub3cgZmlsZXMgZm9yIFJlZGhhdCwgU3VzZSBhbmQKKwkgICAgIE1hbmRyYWtlLiBJIGhvcGUgdGhleSB3b3JrIE9LLgorCisJICAgICBGaXhlZCBoYXJkLXRvLXJlcHJvZHVjZSBjcmFzaCBpbnZvbHZpbmcgdXNlIG9mIGxvY2FsCisJICAgICBkb21haW5zIGFuZCBJUHY2IHF1ZXJpZXMuIFRoYW5rcyB0byBSb3kgTWFycGxlcyBmb3IKKwkgICAgIGhlbHBpbmcgdG8gdHJhY2sgdGhhdCBvbmUgZG93bi4KKworcmVsZWFzZSAyLjEgIAorICAgICAgICAgICAgIFRoYW5rcyB0byBNYXR0IFN3aWZ0IGFuZCBEYWcgV2llZXJzIGZvciBtYW55IHN1Z2dlc3Rpb25zIAorCSAgICAgd2hpY2ggd2VudCBpbnRvIHRoaXMgcmVsZWFzZS4KKwkgICAgCisJICAgICBUd2VhayBpbmNsdWRlIGZpbGVzIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9uIEZyZWVCU0QgNQorICAgICAgICAgICAgIAorICAgICAgICAgICAgIEZpeCB1bmFsaWduZWQgYWNjZXNzIHdhcm5pbmdzIG9uIEJTRC9BbHBoYS4KKworCSAgICAgQWxsb3cgZW1wdHkgREhDUCBvcHRpb25zLCBsaWtlIHNvOiBkaHBjLW9wdGlvbj00NAorIAorICAgICAgICAgICAgIEFsbG93IHNpbmdsZS1ieXRlIERIQ1Agb3B0aW9ucyBsaWtlIHNvOiBkaGNwLW9wdGlvbj0yMCwxCisKKwkgICAgIEFsbG93IGNvbW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUgYXMgb3B0aW9ucyBpbgorCSAgICAgL2V0Yy9kbnNtYXNxLmNvbmYKKworCSAgICAgRG9uJ3QgY29tcGxhaW4gd2hlbiB0aGUgc2FtZSBuYW1lIGFuZCBhZGRyZXNzIGlzCisJICAgICBhbGxvY2F0ZWQgdG8gYSBob3N0IHVzaW5nIERIQ1AgYW5kIC9ldGMvaG9zdHMuCisJICAgICAKKwkgICAgIEFkZGVkIHRvIHRoZSBleGFtcGxlIGNvbmZpZ3VyYXRpb24gdGhlIGRuc21hc3EgZXF1aXZhbGVudAorCSAgICAgb2YgdGhlIElTQyBkaGNwZCBzZXR0aW5ncyBnaXZlbiBpbiAKKyAgICAgICAgICAgICBodHRwOi8vd3d3LnNhbWJhLm9yZy9zYW1iYS9mdHAvZG9jcy90ZXh0ZG9jcy9ESENQLVNlcnZlci1Db25maWd1cmF0aW9uLnR4dAorCisJICAgICBGaXhlZCBsb25nLWV4aXN0aW5nIHN0cmFuZ2VuZXNzIGluIExpbnV4IElQdjYgaW50ZXJmYWNlCisJICAgICBkaXNjb3ZlcnkgY29kZS4gVGhlIGZsYWdzIGZpZWxkIGluIC9wcm9jL25ldC9pZl9pbmV0NiBpcworCSAgICAgX25vdF8gdGhlIGludGVyZmFjZSBmbGFncy4gCisKKwkgICAgIEZhaWwgZ3JhY2VmdWxseSB3aGVuIGdldHRpbmcgYW4gRU5PREVWIGVycm9yIHdoZW4gdHJ5aW5nCisJICAgICB0byBiaW5kIGFuIElQdjYgc29ja2V0LCByYXRoZXIgdGhhbiBiYWlsaW5nIG91dC4gVGhhbmtzCisJICAgICB0byBKYW4gSXNjaGViZWNrIGZvciBmZWVkYmFjayBvbiB0aGF0LgorCisJICAgICBBbGxvdyB0aGUgbmFtZS0+YWRkcmVzcyBtYXBwaW5nIGZvciBzdGF0aWMgREhDUCBsZWFzZXMgdG8KKwkgICAgIGJlIHNldCBieSAvZXRjL2hvc3RzLiBJdCdzIG5vdyBwb3NzaWJsZSB0byBoYXZlCisgICAgIAkgICAgICAgIGRoY3AtaG9zdD08bWFjIGFkZHI+LHdpYmJsZQorCSAgICAgb3IgZXZlbgorICAgICAgICAgICAgICAgIGRoY3AtaG9zdD13aWJibGUKKwkgICAgIGFuZCBpbiAvZXRjL2hvc3RzIGhhdmUKKwkgICAgICAgIHdpYmJsZSAxLjIuMy40CisJICAgICBhbmQgZm9yIHRoZSBjb3JyZWN0IHRoaW5nIHRvIGhhcHBlbi4gTm90ZSB0aGF0IHNvbWUgc29ydAorCSAgICAgb2YgZGhjcC1ob3N0IGxpbmUgaXMgc3RpbGwgbmVlZGVkLCBpdCdzIG5vdCBwb3NzaWJsZSBmb3IKKwkgICAgIHJhbmRvbSBob3N0IHRvIGNsYWltIGFuIGFkZHJlc3MgaW4gL2V0Yy9ob3N0cyB3aXRob3V0CisJICAgICBzb21lIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24uCisKKwkgICAgIE1ha2UgMC4wLjAuMCBpbiBhIGRoY3Atb3B0aW9uIHRvIG1lYW4gInRoZSBtYWNoaW5lCisJICAgICBydW5uaW5nIGRuc21hc3EiLgorICAgIAkJICAgIAorICAgICAgICAgICAgIEZpeCBsZWFzZSB0aW1lIHNwZWMgd2hlbiBzcGVjaWZpZWQgaW4gZGhjcC1yYW5nZSBhbmQgbm90CisJICAgICBpbiBkaGNwLWhvc3QsIHByZXZpb3VzbHkgdGhpcyB3YXMgYWx3YXlzIG9uZSBob3VyLgorCisgICAgICAgICAgICAgRml4IHByb2JsZW0gd2l0aCBzZXR0aW5nIGRvbWFpbnMgYXMgImxvY2FsIG9ubHkiLiAtCisgICAgICAgICAgICAgdGhhbmtzIHRvIENocmlzIFNjaGFuay4KKworCSAgICAgQWRkZWQgc3VwcG9ydCBmb3IgbWF4IG1lc3NhZ2Ugc2l6ZSBESENQIG9wdGlvbi4KKworcmVsZWFzZSAyLjIKKyAgICAgICAgICAgICBGaXggdG90YWwgbGFjayBmb3IgREhDUCBmdW5jdGlvbmFsaXR5IG9uCisJICAgICBMaW51eCBzeXN0ZW1zIHdpdGggSVB2NiBlbmFibGVkLiAtIHRoYW5rcyB0bworCSAgICAgSm9uYXRob24gSHVkc29uIGZvciBzcG90dGluZyB0aGF0LgorCisJICAgICBNb3ZlIGRlZmF1bHQgY29uZmlnIGZpbGUgdW5kZXIgRnJlZUJTRCAtIHBhdGNoIGZyb20KKwkgICAgIFN0ZXZlbiBIb25zb24gCisKK3JlbGVhc2UgMi4zCisgICAgICAgICAgICAgRml4ICJpbnN0YWxsIiBtYWtlZmlsZSB0YXJnZXQuIChyZXBvcnRlZCBieSBSb2IgU3RldmVucykKKworCSAgICAgRW5zdXJlIHRoYXQgImxvY2FsPS9kb21haW4vIiBmbGFnIGlzIG9iZXllZCBmb3IgYWxsCisJICAgICBxdWVyaWVzIG9uIGEgZG9tYWluLCBub3QganVzdCBBIGFuZCBBQUFBLiAoUmVwb3J0ZWQgYnkKKwkgICAgIFBldGVyIEZpY2h0bmVyLikKKworCSAgICAgSGFuZGxlIERIQ1BERUNMSU5FIG1lc3NhZ2VzIGFuZCBwcm92aWRlIGFuIGVycm9yIG1lc3NhZ2UKKwkgICAgIGluIERIQ1BOQUsgbWVzc2FnZXMuCisJICAgICAKKwkgICAgIEFkZCAiZG9tYWluIiBzZXR0aW5nIGV4YW1wbGUgdG8KKwkgICAgIGRuc21hc3EuY29uZi5leGFtcGxlLiBUaGFua3MgdG8gSyBQIEtpcmNoZG9yZmVyIGZvcgorCSAgICAgc3BvdHRpbmcgdGhhdCBpdCB3YXMgbWlzc2luZy4KKworCSAgICAgU3VidGxlIGNoYW5nZSB0byB0aGUgREhDUFJFUVVFU1QgaGFuZGxpbmcgY29kZSB0byB3b3JrCisJICAgICBhcm91bmQgYSBidWcgaW4gdGhlIERIQ1AgY2xpZW50IGluIEhQIEpldGRpcmVjdCBwcmludGVycy4KKwkgICAgIFRoYW5rcyB0byBNYXJrbyBTdG9sbGUgZm9yIGZpbmRpbmcgdGhpcyBwcm9ibGVtLgorCisJICAgICBSZXR1cm4gREhDUCBUMSBhbmQgVDIgdGltZXMsIHdpdGggImZ1enoiIHRvIGRlc3ljaHJvbmlzZSBsZWFzZQorCSAgICAgcmVuZXdhbHMsIGFzIHNwZWNpZmllZCBpbiB0aGUgUkZDLgorCSAgICAgCisJICAgICBFbnN1cmUgdGhhdCB0aGUgRU5EIG9wdGlvbiBpcyBhbHdheXMgcHJlc2VudCBpbiBESENQCisJICAgICBwYWNrZXRzICwgZXZlbiBpZiB0aGUgcGFja2V0IGlzIHRvbyBzbWFsbCB0byBmaXQgYWxsIAorCSAgICAgdGhlIHJlcXVlc3RlZCBvcHRpb25zLgorCisJICAgICBIYW5kbGUgbGFyZ2VyLXRoYW4tZGVmYXVsdCBESENQIHBhY2tldHMgaWYgcmVxdWlyZWQsIHVwCisJICAgICB0byB0aGUgZXRoZXJuZXQgTVRVLgorCisJICAgICBGaXggYSBjb3VwbGUgb2YgcGxhY2VzIHdoZXJlIHRoZSByZXR1cm4gY29kZSBmcm9tCisJICAgICBtYWxsb2MoKSB3YXMgbm90IGNoZWNrZWQuCisKKwkgICAgIENvcGUgd2l0aCBhIG1hY2hpbmUgdGFraW5nIGEgREhDUCBsZWFzZSBhbmQgdGhlbiBtb3ZpbmcKKwkgICAgIG5ldHdvcmsgc28gdGhhdCB0aGUgbGVhc2UgYWRkcmVzcyBpcyBubyBsb25nZXIgdmFsaWQuCisKKwkgICAgIFRoZSBESENQIHNlcnZlciB3aWxsIG5vdyB3b3JrIHZpYSBhIEJPT1RQIHJlbGF5IC0gcmVtb3RlCisJICAgICBuZXR3b3JrcyBhcmUgY29uZmlndXJlZCB3aXRoIHRoZSBkaGNwLXJhbmdlIG9wdGlvbiB0aGUKKwkgICAgIHNhbWUgYXMgZGlyZWN0bHkgY29ubmVjdGVkIG9uZXMsIGJ1dCB0aGV5IG5lZWQgYW4KKwkgICAgIGFkZGl0aW9uYWwgbmV0bWFzayBwYXJhbWV0ZXIuIEVnCisJICAgICAtLWRoY3AtcmFuZ2U9MTkyLjE2OC40LjEwLDE5Mi4xNjguNC41MCwyNTUuMjU1LDI1NS4wCisgICAgICAgICAgICAgd2lsbCBlbmFibGUgREhDUCBzZXJ2aWNlIHZpYSBhIEJPT1RQIHJlbGF5IG9uIHRoZQorCSAgICAgMTkyLjE2OC40LjAgbmV0d29yay4gCisKKwkgICAgIEFkZCBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIERIQ1AgbGVhc2VzLAorCSAgICAgb3RoZXJ3aXNlIHRoZSBkYWVtb24gY291bGQgYmUgRE9TZWQgYnkgYSBtYWxpY2lvdXMKKwkgICAgIGhvc3QuIFRoZSBkZWZhdWx0IGlzIDE1MCwgYnV0IGl0IGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSAKKwkgICAgIGRoY3AtbGVhc2UtbWF4IG9wdGlvbi4KKworCSAgICAgRml4ZWQgY29tcGlsYXRpb24gb24gT3BlbkJTRCAodGhhbmtzIHRvIEZyZWRlcmljIEJyb2RiZWNrCisJICAgICBmb3IgaGVscCB3aXRoIHRoYXQuKQorCSAgICAgCisJICAgICBSZXdvcmtlZCB0aGUgREhDUCBuZXR3b3JrIGhhbmRsaW5nIGNvZGUgZm9yIHR3byBnb29kCisJICAgICBlZmZlY3RzOiAoMSkgVGhlIGxpbWl0IG9mIG9uZSBuZXR3b3JrIG9ubHkgZm9yIERIQ1Agb24KKwkgICAgIEZyZWVCU0QgaXMgbm93IGdvbmUsICgyKSBUaGUgREhDUCBzZXJ2ZXIgY29wZXMgd2l0aAorCSAgICAgZHluYW1pY2FsbHkgY3JlYXRlZCBpbnRlcmZhY2VzLiBUaGUgb25lLWludGVyZmFjZQorCSAgICAgbGltaXRhdGlvbiByZW1haW5zIGZvciBPcGVuQlNELCB3aGljaCBpcyBtaXNzaW5nCisJICAgICBleHRlbnNpb25zIHRvIHRoZSBzb2NrZXQgQVBJIHdoaWNoIGhhdmUgYmVlbiBpbiBMaW51eAorCSAgICAgc2luY2UgdmVyc2lvbiAyLjIgYW5kIEZyZWVCU0Qgc2luY2UgdmVyc2lvbiA0LjguCisKKwkgICAgIFJld29ya2VkIHRoZSBETlMgbmV0d29yayBjb2RlIHRvIGFsc28gY29wZSB3aXRoCisJICAgICBkeW5hbWljYWxseSBjcmVhdGVkIGludGVyZmFjZXMuIGRuc21hc3Egd2lsbCBub3cgbGlzdGVuCisJICAgICB0byB0aGUgd2lsZGNhcmQgYWRkcmVzcyBhbmQgcG9ydCA1MyBieSBkZWZhdWx0LCBzbyBpZiBubworCSAgICAgLS1pbnRlcmZhY2Ugb3IgLS1hZGRyZXNzIG9wdGlvbnMgYXJlIGdpdmVuIGl0IHdpbGwgaGFuZGxlCisJICAgICBkeW5hbWljYWxseSBjcmVhdGVkIGludGVyZmFjZXMuIFRoZSBvbGQgYmVoYXZpb3VyIGNhbiBiZQorCSAgICAgcmVzdG9yZWQgd2l0aCAtLWJpbmQtaW50ZXJmYWNlcyBmb3IgcGVvcGxlIHJ1bm5pbmcgQklORAorCSAgICAgb24gb25lIGludGVyZmFjZSBhbmQgZG5zbWFzcSBvbiBhbm90aGVyLiBOb3RlIHRoYXQKKwkgICAgIC0taW50ZXJmYWNlIGFuZCAtLWFkZHJlc3Mgb3B0aW9ucyBzdGlsbCB3b3JrLCBidXQgdGhlCisJICAgICBmaWx0ZXJpbmcgaXMgZG9uZSBieSBkbnNtYXNxLCByYXRoZXIgdGhlbiB0aGUga2VybmVsLgorCSAgICAgVGhpcyB3b3JrcyBvbiBMaW51eCwgYW5kIEZyZWVCU0Q+PTUuMC4gT24gc3lzdGVtcyB3aGljaAorCSAgICAgZG9uJ3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgQVBJIGV4dGVuc2lvbnMsIHRoZSBvbGQgCisJICAgICBiZWhhdmlvdXIgaXMgdXNlZCwganVzdCBhcyBpZiAtLWJpbmQtaW50ZXJmYWNlcyBoYWQgYmVlbiBzZXQuCisKKwkgICAgIEFsbG93IElQdjYgc3VwcG9ydCB0byBiZSBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuIFRvIGRvCisJICAgICB0aGF0LCBhZGQgLUROT19JUFY2IHRvIHRoZSBDRkxBR1MuIFRoYW5rcyB0byBPbGVnCisJICAgICBJLiBWZG92aWtpbiBmb3IgdGhlIHN1Z2dlc3Rpb24gdG8gZG8gdGhhdC4KKworCSAgICAgQWRkIGFiaWxpdHkgdG8gc2V0IERIQ1Agb3B0aW9ucyBwZXIgbmV0d29yay4gVGhpcyBpcyBkb25lCisJICAgICBieSBnaXZpbmcgYSBuZXR3b3JrIGFuIGlkZW50aWZpZXIgbGlrZSB0aGlzOgorCSAgICAgZGhjcC1yYW5nZT1yZWQtbmV0LDE5Mi4xNjguMC4xMCwxOTIuMTY4LjAuNTAKKwkgICAgIGFuZCB0aGVuIGxhYmVsaW5nIG9wdGlvbnMgaW50ZW5kZWQgZm9yIHRoYXQgbmV0d29yayBvbmx5CisJICAgICBsaWtlIHRoaXM6CisJICAgICBkaGNwLW9wdGlvbj1yZWQtbmV0LDYsMS4xLjEuMQorCSAgICAgVGhhbmtzIHRvIE9sZWcgVmRvdmlraW4gZm9yIGFyZ3VpbmcgdGhhdCBvbmUgdGhyb3VnaC4KKworCSAgICAgTWFkZSBlcnJvcnMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBub24tZmF0YWw6IGRuc21hc3EKKwkgICAgIHdpbGwgbm93IGNvbXBsYWluIGJpdHRlcmx5LCBidXQgY29udGludWUuCisKKwkgICAgIEFkZGVkIC0tcmVhZC1ldGhlcnMgb3B0aW9uLCB0byBhbGxvdyBkbnNtYXNxIHRvIHB1bGwKKwkgICAgIHN0YXRpYyBESENQIGluZm9ybWF0aW9uIGZyb20gdGhhdCBmaWxlLiAKKwkgICAgIFRoYW5rcyB0byBBbmRpIENhbWJlaXMgZm9yIHRoYXQgc3VnZ2VzdGlvbi4KKworCSAgICAgQWRkZWQgSEFWRV9CUk9LRU5fUlRDIGNvbXBpbGF0aW9uIG9wdGlvbiB0byBzdXBwb3J0CisJICAgICBlbWJlZGRlZCBzeXN0ZW1zIHdpdGhvdXQgYSBzdGFibGUgUlRDLiBPbGVnIFZkb3Zpa2luCisJICAgICBoZWxwZWQgd29yayBvdXQgaG93IHRvIG1ha2UgdGhhdCB3b3JrLgorCityZWxlYXNlIDIuNAorCSAgICAgRml4ZWQgaW5hYmlsaXR5IHRvIHN0YXJ0IHdoZW4gdGhlIGxlYXNlIGZpbGUgZG9lc24ndAorCSAgICAgYWxyZWFkeSBleGlzdC4gVGhhbmtzIHRvIERhZyBXaWVlcnMgZm9yIHJlcG9ydGluZyB0aGF0LgorCisJICAgICBGaXhlZCBwcm9ibGVtIHdlcmUgZGhjcC1ob3N0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkaWQKKwkgICAgIG5vdCBwbGF5IHdlbGwgd2l0aCBlbnRyaWVzIGluIC9ldGMvZXRoZXJzIGZvciB0aGUgc2FtZQorCSAgICAgaG9zdC4gVGhhbmtzIGFnYWluIHRvIERhZyBXaWVlcnMuCisKKwkgICAgIFR3ZWFrZWQgREhDUCBjb2RlIHRvIGZhdm91ciBtb3ZpbmcgdG8gYSBuZXdseS1jb25maWd1cmVkCisJICAgICBzdGF0aWMgSVAgYWRkcmVzcyByYXRoZXIgdGhhbiBhbiBvbGQgbGVhc2Ugd2hlbiBkb2luZworCSAgICAgREhDUCBhbGxvY2F0aW9uLgorCisJICAgICBBZGRlZCAtLWFsaWFzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHByb3ZpZGVzIElQdjQKKwkgICAgIHJld3JpdGUgZmFjaWxpdGllcyBsaWtlIENpc2NvICJETlMgZG9jdG9yaW5nIi4gU3VnZ2VzdGVkCisJICAgICBieSBDaGFkIFNrZWV0ZXJzLgorCisJICAgICBGaXhlZCBidWcgaW4gL2V0Yy9ldGhlcnMgcGFyc2luZyBjb2RlIHRyaWdnZXJlZCBieSB0YWIKKwkgICAgIGNoYXJhY3RlcnMuIFF1ZG9zIHRvIERhZyBXaWVlcnMgZm9yIGhlcGxpbmcgdG8gbmFpbCB0aGF0CisJICAgICBvbmUuCisgCSAgICAgCisJICAgICBBZGRlZCAiYmluZC1pbnRlcmZhY2VzIiBvcHRpb24gY29ycmVjdGx5LgkgICAgIAorCityZWxlYXNlIDIuNQorCSAgICAgTWFkZSAid2hlcmUgYXJlIHdlIGFsbG9jYXRpbmcgYWRkcmVzc2VzPyIgY29kZSBpbiBESENQCisJICAgICBzZXJ2ZXIgY29wZSB3aXRoIHJlcXVlc3RzIHZpYSBhIHJlbGF5IHdoaWNoIGlzIG9uIGEKKwkgICAgIGRpcmVjdGx5IGNvbm5lY3RlZCBuZXR3b3JrIGZvciB3aGljaCB0aGVyZSBpcyBub3QgYQorCSAgICAgY29uZmlndXJlZCBuZXRtYXNrLiBUaGlzIHN0cmFuZ2Ugc3RhdGUgb2YgYWZmYWlycyBvY2N1cnMKKwkgICAgIHdpdGggd2luNGxpbi4gVGhhbmtzIHRvIEFsZXggTWVsdCBhbmQgSmltIEhvcm5lciBmb3IgYnVnCisJICAgICByZXBvcnRzIGFuZCB0ZXN0aW5nIHdpdGggdGhpcy4gCisKKwkgICAgIEZpeGVkIHRyaXZpYWwtYnV0LWlycml0YXRpbmcgbWlzc2luZyAjaW5jbHVkZSB3aGljaCBicm9rZQorCSAgICAgY29tcGlsYXRpb24gb24gKkJTRC4KKworCSAgICAgRm9yY2UgLS1iaW5kLWludGVyZmFjZXMgaWYgSVAtYWxpYXNlZCBpbnRlcmZhY2UKKwkgICAgIHNwZWNpZmljYXRpb25zIGFyZSB1c2VkLCBzaW5jZSB0aGUgc29ja2V0cyBBUEkgcHJvdmlkZXMKKwkgICAgIG5vIG90aGVyIHNhbmUgd2F5IHRvIGRldGVybWluZSB3aGljaCBhbGlhcyBvZiBhbgorCSAgICAgaW50ZXJmYWNlIGEgcGFja2V0IHdhcyBzZW50IHRvLiBUaGFua3MgdG8gSmF2aWVyIEtvaGVuCisJICAgICBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKK3JlbGVhc2UgMi42IAorCSAgICAgU3VwcG9ydCBUb2tlbiBSaW5nIERIQ1AuIFRoYW5rcyB0byBEYWcgV2llZXJzIGZvciBoZWxwCisJICAgICB0ZXN0aW5nLiBOb3RlIHRoYXQgVG9rZW4gcmluZyBzdXBwb3J0IG9ubHkgd29ya3Mgb24gTGludXggCisJICAgICBjdXJyZW50bHkuCisKKwkgICAgIEZpeCBjb21waWxhdGlvbiBvbiBNYWNPUyBYLiBUaGFua3MgdG8gQmVybmhhcmQgRWhsZXJzIGZvcgorCSAgICAgdGhlIHBhdGNoLgorCisJICAgICBBZGRlZCBuZXcgImlnbm9yZSIga2V5d29yZCBmb3IKKwkgICAgIGRoY3AtaG9zdC4gImRoY3AtaG9zdD0xMToyMjozMzo0NDo1NTo2NixpZ25vcmUiIHdpbGwKKwkgICAgIGNhdXNlIHRoZSBESENQIHNlcnZlciB0byBpZ25vcmUgYW55IGhvc3Qgd2l0aCB0aGUgZ2l2ZW4KKwkgICAgIE1BQyBhZGRyZXNzLCBsZWF2aW5nIGl0IHRvIG90aGVyIHNlcnZlcnMgb24gdGhlCisJICAgICBuZXR3b3JrLiBUaGlzIGFsc28gd29ya3Mgd2l0aCBjbGllbnQtaWQgYW5kIGhvc3RuYW1lcy4KKwkgICAgIFN1Z2dlc3Rpb24gYnkgQWxleCBNZWx0LgorCisJICAgICBGaXhlZCBwYXJzaW5nIG9mIGhleCBjbGllbnQgSURzLiBQcm9ibGVtIHNwb3R0ZWQgYnkgUGV0ZXIKKwkgICAgIEZpY2h0bmVyLgorCisJICAgICBBbGxvdyBjb25mLWZpbGUgb3B0aW9ucyBpbiBjb25maWd1cmF0aW9uIGZpbGUsIHRvCisJICAgICBwcm92aWRlIGFuIGluY2x1ZGUgZnVuY3Rpb24uCisJICAgICAKKwkgICAgIFJlLXJlYWQgL2V0Yy9ldGhlcnMgb24gcmVjZWlwdCBvZiBTSUdIVVAuCisKKwkgICAgIEFkZGVkIGJhY2sgdGhlIGFiaWxpdHkgdG8gcmVhZCBJU0MgZGhjcGQgbGVhc2UgZmlsZXMsIGJ5CisJICAgICBwb3B1bGFyIGRlbWFuZC4gTm90ZSB0aGF0IHRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgZm9yCisJICAgICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LiBZb3UgY2FuIGdldCBiYWNrIHRoZSA0SyBvZgorCSAgICAgbWVtb3J5IHRoYXQgdGhlIGNvZGUgb2NjdXBpZXMgYnkgdW5kZWZpbmluZworCSAgICAgIkhBVkVfSVNDX1JFQURFUiIgaW4gc3JjL2NvbmZpZy5oCisKKwkgICAgIEFkZGVkIGFiaWxpdHkgdG8gZGlzYWJsZSAicG9vbCIgREhDUCBhZGRyZXNzIGFsbG9jYXRpb24KKwkgICAgIHdoaWxzdCBsZWF2aW5nIHN0YXRpYyBsZWFzZXMgd29ya2luZy4gVGhlIHN5bnRheCBpcworCSAgICAgImRoY3AtcmFuZ2U9MTkyLjE2OC4wLjAsc3RhdGljIgorCSAgICAgVGhhbmtzIHRvIEdyemVnb3J6IE5vc2VrIGZvciB0aGUgc3VnZ2VzdGlvbi4KKworCSAgICAgR2VuZXJhbGl6ZWQgZG5zbWFzcS1yaC5zcGVjIGZpbGUgdG8gd29yayBvbiBNYW5kcmFrZSB0b28sCisJICAgICBhbmQgcmVtb3ZlZCBkbnNtYXNxLW1kay5zcGVjLiBUaGFua3MgdG8gRG91ZyBLZWxsZXIuCisKKwkgICAgIEFsbG93IERIQ1Agb3B0aW9ucyB3aGljaCBhcmUgdGllZCB0byBzcGVjaWZpYyBzdGF0aWMKKwkgICAgIGxlYXNlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdG8gc3BlY2lmaWMgbmV0d29ya3MuCisKKwkgICAgIEdlbmVyYWxpc2VkIHRoZSBkaGNwLW9wdGlvbiBwYXJzZXIgYSBiaXQgdG8gYWxsb3cgaGV4CisJICAgICBzdHJpbmdzIGFzIHBhcmFtZXRlcnMuIFRoaXMgaXMgbm93IGxlZ2FsOgorCSAgICAgZGhjcC1vcHRpb249MTI4LGU0OjQ1Ojc0OjY4OjAwOjAwCisJICAgICBJbnNwaXJlZCBieSBhIHBhdGNoIGZyb20gSm9lbCBOb3JkZWxsLgorCisJICAgICBDaGFuZ2VkIHRoZSBzZW1hbnRpY3Mgb2YgYXJndW1lbnQtbGVzcyBkaGNwLW9wdGlvbnMgZm9yCisJICAgICB0aGUgZGVmYXVsdC1zZXR0aW5nIG9uZXMsIGllIDEsIDMsIDYgYW5kIDI4LiBOb3csIGRvaW5nCisJICAgICBlZywgZGhjcC1vcHRpb249MyBzdG9wcyBkbnNtYXNxIGZyb20gc2VuZGluZyBhIGRlZmF1bHQKKwkgICAgIHJvdXRlciBvcHRpb24gYXQgYWxsLiBUaGFua3MgdG8gU2NvdHQgRW1tb25zIGZvciBwb2ludGluZworCSAgICAgb3V0IHRoYXQgdGhpcyBpcyB1c2VmdWwuCisKKwkgICAgIEZpeGVkIGRuc21hc3EuY29uZiBwYXJzaW5nIGJ1ZyB3aGljaCBpbnRlcnByZXRlZCBwb3J0CisJICAgICBudW1iZXJzIGluIHNlcnZlcj0gbGluZXMgYXMgYSBjb21tZW50LiBUbyBzdGFydCBhCisJICAgICBjb21tZW50LCBhICcjJyBjaGFyYWN0ZXIgbXVzdCBub3cgYmUgYSB0aGUgc3RhcnQgb2YgYQorCSAgICAgbGluZSBvciBwcmVjZWRlZCBieSB3aGl0ZXNwYWNlLiBUaGFua3MgdG8gQ2hyaXN0aWFuCisJICAgICBIYWdnc3Ryb20gZm9yIHRoZSBidWcgcmVwb3J0LgorCityZWxlYXNlIDIuNyAgCisgICAgICAgICAgICAgQWxsb3cgdGhlIGRoY3AtaG9zdCBzcGVjaWZpY2F0aW9uIG9mIGlkOiogd2hpY2ggbWFrZXMgCisJICAgICBkbnNtYXNxIGlnbm9yZSBhbnkgY2xpZW50LWlkLiBUaGlzIGlzIHVzZWZ1bCB0byBlbnN1cmUgCisJICAgICB0aGF0IGEgZHVhbC1ib290IG1hY2hpbmUgc2VlcyB0aGUgc2FtZSBsZWFzZSB3aGVuIG9uZSBPUyAKKwkgICAgIGdpdmVzIGEgY2xpZW50LWlkIGFuZCB0aGUgb3RoZXIgZG9lc24ndC4gSXQncyBhbHNvIHVzZWZ1bAorCSAgICAgd2hlbiBQWEUgYm9vdCBESENQIGRvZXMgbm90IHVzZSBjbGllbnQgSURzIGJ1dCB0aGUgT1MgaXQgYm9vdHMgCisgICAgICAgICAgICAgZG9lcy4gVGhhbmtzIHRvIEdyemVnb3J6IE5vc2VrIGZvciBzdWdnZXN0aW5nIHRoaXMgZW5oYW5jZW1lbnQuCisKKwkgICAgIE5vIGxvbmdlciBhc3N1bWUgdGhhdCBjaWFkZHIgaXMgemVybyBpbiByZWNlaXZlZCBESENQRElTQ09WRVIgCisJICAgICBtZXNzYWdlcywganVzdCBmb3Igc2VjdXJpdHkgYWdhaW5zdCBicm9rZW4gY2xpZW50cy4KKworCSAgICAgU2V0IGRlZmF1bHQgb2Ygc2lhZGRyIGZpZWxkIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lIHJ1bm5pbmcgCisgICAgICAgICAgICAgZG5zbWFzcSB3aGVuIG5vdCBleHBsaWNpdGx5IHNldCB1c2luZyBkaGNwLWJvb3QKKyAgICAgICAgICAgICBvcHRpb24uIFRoaXMgaXMgdGhlIElTQyBkaGNwZCBiZWhhdmlvdXIuICAKKworICAgICAgICAgICAgIFNlbmQgVDEgYW5kIFQyIG9wdGlvbnMgaW4gREhDUE9GRkVSIHBhY2tldHMuIFRoaXMgaXMgcmVxdWlyZWQKKwkgICAgIGJ5IHRoZSBESENQIGNsaWVudCBpbiBzb21lIEpldERpcmVjdCBwcmludGVycy4gVGhhbmtzIAorICAgICAgICAgICAgIHRvIFBhdWwgTWF0dGFsIGZvciB3b3JrIG9uIHRoaXMuCisKKwkgICAgIEZpeGVkIGJ1ZyB3aXRoIERIQ1Agb24gT3BlbkJTRCByZXBvcnRlZCBieSBEb21pbmlxdWUgSmFjcXVlbC4KKwkgICAgIFRoZSBjb2RlIHdoaWNoIGFkZGVkIGxvb3BiYWNrIGludGVyZmFjZXMgdG8gdGhlIGxpc3QKKwkgICAgIHdhcyBjb25mdXNpbmcgdGhlIERIQ1AgY29kZSwgd2hpY2ggZXhwZWN0ZWQgb25lIGludGVyZmFjZSBvbmx5LgorCSAgICAgU29sdmVkIGJ5IGFkZGluZyBsb29wYmFjayBpbnRlcmZhY2VzIHRvIGFkZHJlc3MgbGlzdCBpbnN0ZWFkLgorCisJICAgICBBZGQgZGhjcC12ZW5kb3JjbGFzcyBvcHRpb24gdG8gYWxsb3cgb3B0aW9ucyB0byBiZSBzZW50IG9ubHkKKwkgICAgIHRvIGNlcnRhaW4gY2xhc3NlcyBvZiBjbGllbnRzLgorCisJICAgICBUd2Vha2VkIG9wdGlvbiBzZWFyY2ggY29kZSBzbyB0aGF0IGlmIGEgbmV0aWQtcXVhbGlmaWVkCisJICAgICBvcHRpb24gaXMgdXNlZCwgYW55IHVucXVhbGlmaWVkIG9wdGlvbiBpcyBpZ25vcmVkLgorCSAgICAgCisJICAgICBDaGFuZ2VkIHRoZSBtZXRob2Qgb2YgcGlja2luZyBuZXcgZHluYW1pYyBJUAorCSAgICAgYWRkcmVzc2VzLiBUaGlzIHVzZWQgdG8gdXNlIHRoZSBuZXh0IGNvbnNlY3V0aXZlCisJICAgICBhZGRyZXNzIGFzIGxvbmcgaXQgd2FzIGZyZWUsIG5vdyBpdCB1c2VzIGEgaGFzaAorCSAgICAgZnJvbSB0aGUgY2xpZW50IGhhcmR3YXJlIGFkZHJlc3MuIFRoaXMgcmVkdWNlcyB0aGUgYW1vdW50CisJICAgICBvZiBhZGRyZXNzIG1vdmVtZW50IGZvciBjbGllbnRzIHdoaWNoIGxldCB0aGVpciBsZWFzZQorCSAgICAgZXhwaXJlIGFuZCBhbGxvd3MgY29uc2VjdXRpdmUgREhDUE9GRkVSUyB0byB0aGUgc2FtZSBob3N0CisJICAgICB0byAoYWxtb3N0IGFsd2F5cykgYmUgZm9yIHRoZSBzYW1lIGFkZHJlc3MsIHdpdGhvdXQKKwkgICAgIHN0b3Jpbmcgc3RhdGUgYmVmb3JlIGEgbGVhc2UgaXMgZ3JhbnRlZC4KKyAKKwkgICAgIFR3ZWFrZWQgb3B0aW9uIGhhbmRsaW5nIGNvZGUgdG8gcmV0dXJuIGFsbCBwb3NzaWJsZQorCSAgICAgb3B0aW9ucyByYXRoZXIgdGhhbiBub25lIHdoZW4gREhDUCAicmVxdWVzdGVkIG9wdGlvbnMiCisJICAgICBmaWVsZCBpcyBtaXNzaW5nLiBUaGlzIGZpeGVzIGludGVyb3BlcmFiaWxpdHkgd2l0aAorCSAgICAgYW5jaWVudCBJQk0gTEFOTUFOIERIQ1AgY2xpZW50cy4gVGhhbmtzIHRvIEppbSBMb3V2YXUgZm9yCisJICAgICBoZWxwIHdpdGggdGhpcy4KKworcmVsZWFzZSAyLjgKKwkgICAgIFBhZCBESENQIHBhY2tldHMgdG8gYSBtaW5pbXVtIHNpemUgb2YgMzAwIGJ5dGVzLiBUaGlzCisJICAgICBmaXhlcyBpbnRlcm9wZXJhYmlsaXR5IHByb2JsZW1zIHdpdGggdGhlIExpbnV4IGluLWtlcm5lbAorCSAgICAgREhDUC9CT09UUCBjbGllbnQuIFRoYW5rcyB0byBSaWNoYXJkIE11c2lsIGZvcgorCSAgICAgZGlhZ25vc2luZyB0aGlzIGFuZCBzdXBwbHlpbmcgYSBwYXRjaC4KKworCSAgICAgRml4ZWQgb3B0aW9uLXBhcnNpbmcgYnVnIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWsuIFBhdGNoCisJICAgICBmcm9tIFJpY2hhcmQgTXVzaWwuCisKKwkgICAgIEltcHJvdmVkIHZlbmRvciBjbGFzcyBjb25maWd1cmF0aW9uIGFuZCBhZGRlZCB1c2VyIGNsYXNzCisJICAgICBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHk6ICgxKSBvcHRpb25zIGFyZSBtYXRjaGVkIG9uCisJICAgICB0aGUgbmV0aWRzIGZyb20gZGhjcC1yYW5nZSwgZGhjcC1ob3N0LCB2ZW5kb3IgY2xhc3MgYW5kCisJICAgICB1c2VyIGNsYXNzKGVzKS4gTXVsdGlwbGUgbmV0LWlkcyBhcmUgYWxsb3dlZCBhbmQgb3B0aW9ucworCSAgICAgYXJlIHNlYXJjaGVkIG9uIHRoZW0gYWxsLiAoMikgbWF0Y2hlcyBhZ2FpbnMgdmVuZG9yIGNsYXNzCisJICAgICBhbmQgdXNlciBjbGFzcyBhcmUgbm93IG9uIGEgc3Vic3RyaW5nLCBpZiB0aGUgZ2l2ZW4KKwkgICAgIHN0cmluZyBpcyBhIHN1YnN0cmluZyBvZiB0aGUgdmVuZG9yL3VzZXIgY2xhc3MsIHRoZW4gYQorCSAgICAgbWF0Y2ggb2NjdXJzLiBUaGFua3MgYWdhaW4gdG8gUmljaGFyZCBNdXNpbCBmb3IgcHJvbXB0aW5nCisJICAgICB0aGlzLgorCisJICAgICBNYWtlICIjIiBtYXRjaCBhbnkgZG9tYWluIG9uIC0tYWRkcmVzcyBhbmQgLS1zZXJ2ZXIKKwkgICAgIGZsYWdzLiAtLWFkZHJlc3M9LyMvMS4yLjMuNCB3aWxsIHJldHVybiAxLjIuMy40IGZvciBfYW55XworCSAgICAgZG9tYWluIG5vdCBvdGhlcndpc2UgbWF0Y2hlZC4gT2YgY291cnNlCisJICAgICAtLXNlcnZlcj0vIy8xLjIuMy40IGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0bworCSAgICAgLS1zZXJ2ZXI9MS4yLjMuNC4gU3BlY2lhbCByZXF1ZXN0IGZyb20gSm9zaCBIb3dsZXR0LgorCQorCSAgICAgRml4ZWQgYSBuYXN0eSBidWcgd2hpY2ggd291bGQgY2F1c2UgZG5zbWFzcSB0byBsb3NlIHRyYWNrCisJICAgICBvZiBsZWFzZXMgZm9yIGhvc3RzIHdoaWNoIGhhZCBhIC0tZGhjcC1ob3N0IGZsYWcgd2l0aG91dAorCSAgICAgYSBuYW1lIHNwZWNpZmljYXRpb24uIFRoZSBtZWNoYW5pc20gZm9yIHRoaXMgd2FzIHRoYXQKKwkgICAgIHRoZSBob3N0bmFtZSBjb3VsZCBnZXQgZXJyb25lb3VzbHkgc2V0IGFzIGEgemVyby1sZW5ndGgKKwkgICAgIHN0cmluZyBhbmQgdGhlbiB3cml0dGVuIHRvIHRoZSBsZWFzZXMgZmlsZSBhcyBhCisJICAgICBtYWwtZm9ybWVkIGxpbmUuIFJlc3RhcnRpbmcgZG5zbWFzcSB3b3VsZCB0aGVuIGxvc2UgdGhlIGxlYXNlLgorCSAgICAgQWxleCBIZXJtYW5uJ3Mgd29yayBoZWxwZWQgY2hhc2UgZG93biB0aGlzIHByb2JsZW0uCisKKwkgICAgIEFkZCBjaGVja3MgYWdhaW5zdCBESENQIGNsaWVudHMgd2hpY2ggcmV0dXJuIHplcm8tbGVuZ3RoCisJICAgICBob3N0bmFtZXMuIFRoaXMgYXZvaWRzIHRoZSBwb3RlbnRpYWwgbGVhc2UtbG9zcyBwcm9ibGVtcworCSAgICAgcmVmZmVyZWQgdG8gYWJvdmUuIEFsc28sIGlmIGEgY2xpZW50IHNlbmRzIGEgaG9zdG5hbWUgd2hlbgorCSAgICAgaXQgY3JlYXRlcyBhIGxlYXNlIGJ1dCBzdWJzZXF1ZW50bHkgc2VuZHMgbm8gb3IgYQorCSAgICAgemVyby1sZW5ndGggaG9zdG5hbWUgd2hpbHN0IHJlbmV3aW5nLCBjb250aW51ZSB0byB1c2UgdGhlCisJICAgICBleGlzdGluZyBob3N0bmFtZSwgZG9uJ3Qgd2lwZSBpdCBvdXQuIAorCSAgICAgCisJICAgICBUd2Vha2VkIG9wdGlvbiBwYXJzaW5nIHRvIGZsYWcgc29tZSBwYXJhbWV0ZXIgZXJyb3JzLgorCityZWxlYXNlIDIuOQorCSAgICAgRml4ZWQgaW50ZXJmYWNlIGZpbHRlciBjb2RlIGZvciB0d28gZWZmZWN0czogMSkgRml4ZWQgYnVnCisJICAgICB3aGVyZSBxdWVyaWVzIHNlbnQgdmlhIGxvb3BiYWNrIGludGVyZmFjZQorCSAgICAgYnV0IHRvIHRoZSBhZGRyZXNzIG9mIGFub3RoZXIgaW50ZXJmYWNlIHdlcmUgaWdub3JlZAorCSAgICAgdW5sZXNzIHRoZSBsb29wYmFjayBpbnRlcmZhY2Ugd2FzIGV4cGxpY2l0bHkgY29uZmlndXJlZC4KKwkgICAgIDIpIG9uIE9wZW5CU0QgZmFpbHVyZSB0byBjb25maWd1cmUgb25lIGludGVyZmFjZSBub3cKKwkgICAgIGNhdXNlcyBhIGZhdGFsIGVycm9yIG9uIHN0YXJ0dXAgcmF0aGVyIHRoYW4gYW4gaHVnZQorCSAgICAgc3RyZWFtIG9mIGxvZyBtZXNzYWdlcy4gVGhhbmtzIHRvIEVyaWsgSmFuIFRyb21wIGZvciAKKwkgICAgIGZpbmRpbmcgdGhhdCBidWcuCisKKwkgICAgIENoYW5nZWQgc2VydmVyIHNlbGVjdGlvbiBzdHJhdGVneSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlCisJICAgICB3aGVuIHRoZXJlIGFyZSBtYW55IGF2YWlsYWJsZSBzZXJ2ZXJzIGFuZCBzb21lIGFyZQorCSAgICAgYnJva2VuLiBUaGUgbmV3IGFsZ29yaXRobSBpcyB0byBwaWNrIGFzIGJlZm9yZSBmb3IgdGhlCisJICAgICBmaXJzdCB0cnksIGJ1dCBpZiBhIHF1ZXJ5IGlzIHJldHJpZWQsIHRvIHNlbmQgdG8gYWxsCisJICAgICBhdmFpbGFibGUgc2VydmVycyBpbiBwYXJhbGxlbC4gVGhlIGZpcnN0IG9uZSB0byByZXBseQorCSAgICAgdGhlbiBiZWNvbWVzIHByZWZlcmVkIGZvciB0aGUgbmV4dCBxdWVyeS4gVGhpcyBzaG91bGQgCisJICAgICBpbXByb3ZlIHJlbGlhYmlsaXR5IHdpdGhvdXQgZ2VuZXJhdGluZyBzaWduaWZpY2FudCBleHRyYQorCSAgICAgdXBzdHJlYW0gbG9hZC4KKworCSAgICAgRml4ZWQgYnJlYWthZ2Ugb2Ygc3BlY2lhbCBzZXJ2ZXJzL2FkZHJlc3NlcyBmb3IKKwkgICAgIHVucXVhbGlmaWVkIGRvbWFpbnMgaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDIuOCAKKwkgICAgICAKKwkgICAgIEFsbG93IGZhbGxiYWNrIHRvICJiaW5kLWludGVyZmFjZXMiIGF0IHJ1bnRpbWU6IFNvbWUKKwkgICAgIHZlcmlvbnMgb2YgKkJTRCBzZWVtIHRvIGhhdmUgZW5vdWdoIHN0dWZmIGluIHRoZSBoZWFkZXIKKwkgICAgIGZpbGVzIHRvIGJ1aWxkIGJ1dCBubyBrZXJuZWwgc3VwcG9ydC4gQWxzbyBub3cgbG9nIGlmCisJICAgICAiYmluZC1pbnRlcmZhY2VzIiBpcyBmb3JjZWQgb24uCisKKwkgICAgIExvZyByZXBsaWVzIGZyb20gdXBzdHJlYW0gc2VydmVycyB3aGljaCByZWZ1c2UgdG8gZG8KKwkgICAgIHJlY3Vyc2lvbiAtIGRuc21hc3EgaXMgbm90IGEgcmVjdXJzaXZlIG5hbWVzZXJ2ZXIgYW5kCisJICAgICByZWxpZXMgb24gdXBzdHJlYW0gc2VydmVycyB0byBkbyB0aGUgcmVjdXJzaW9uLCB0aGlzCisJICAgICBmbGFncyBhIGNvbmZpZ3VyYXRpb24gZXJyb3IuCisKKwkgICAgIERpc2FibGUgY2xpZW50LWlkIG1hdGNoaW5nIGZvciBob3N0cyB3aG9zZSBNQUMgYWRkcmVzcyBpcworCSAgICAgcmVhZCBmcm9tIC9ldGMvZXRoZXJzLiBQYXRjaCBmcm9tIE9sZWcgSS4gVmRvdmlraW4uCisKKwkgICAgIEV4dGVuZGVkIC0tbXgtaG9zdCBmbGFnIHRvIGFsbG93IGFyYml0cmFyeSB0YXJnZXRzIGZvciBNWAorCSAgICAgcmVjb3Jkcywgc3VnZ2VzdGVkIGJ5IE1vcml0eiBCdW5rdXMuCisKKwkgICAgIEZpeGVkIGJ1aWxkIHVuZGVyIE5ldEJTRCAyLjAgLSB0aGFua3MgdG8gRmVsaXggRGVpY2htYW5uCisJICAgICBmb3IgdGhlIHBhdGNoLgorCSAgICAgCisJICAgICBEZWFsIGNvcnJlY3RseSB3aXRoIHJlcGVhdGVkIGFkZHJlc3NlcyBpbiAvZXRjL2hvc3RzLiBUaGUKKwkgICAgIGZpcnN0IG5hbWUgZm91bmQgaXMgbm93IHJldHVybmVkIGZvciByZXZlcnNlIGxvb2t1cHMsCisJICAgICByYXRoZXIgdGhhbiBhbGwgb2YgdGhlbS4KKworCSAgICAgQWRkIGJhY2sgZmF0YWwgZXJyb3JzIHdoZW4gbm9uZXhpc3RhbnQgCisJICAgICBpbnRlcmZhY2VzIG9yIGludGVyZmFjZSBhZGRyZXNzZXMgYXJlIGdpdmVuIGJ1dCBvbmx5IGluCisJICAgICAiYmluZC1pbnRlcmZhY2VzIiBtb2RlLiBQcmluY2lwbGUgb2YgbGVhc3Qgc3VycHJpc2UgYXBwbGllcy4KKwkgICAgIAorCSAgICAgQWxsb3cgIyBhcyB0aGUgYXJndW1lbnQgdG8gLS1kb21haW4sIG1lYW5pbmcgInJlYWQgdGhlCisJICAgICBkb21haW4gZnJvbSB0aGUgZmlyc3Qgc2VhcmNoIGRpcmVjdGl2ZSBpbgorCSAgICAgL2V0Yy5yZXNvbHYuY29uZiIuIEZlYXR1cmUgc3VnZ2VzdGVkIGJ5IEV2YW4gSm9uZXMuCisKK3JlbGVhc2UgMi4xMAorCSAgICBBbGxvdyAtLXF1ZXJ5LXBvcnQgdG8gYmUgc2V0IHRvIGEgbG93IHBvcnQgYnkgY3JlYXRpbmcgYW5kCisJICAgIGJpbmRpbmcgdGhlIHNvY2tldCBiZWZvcmUgZHJvcHBpbmcgcm9vdC4gKFN1Z2dlc3Rpb24gZnJvbQorCSAgICBKYW1pZSBMb2tpZXIpIAorCisJICAgIFN1cHBvcnQgVENQIHF1ZXJpZXMuIEl0IHR1cm5lZCBvdXQgdG8gYmUgcG9zc2libGUgdG8gZG8KKwkgICAgdGhpcyB3aXRoIGEgY291cGxlIG9mIGh1bmRyZWQgbGluZXMgb2YgY29kZSwgb25jZSBJIGtuZXcKKwkgICAgaG93LiBUaGUgZXhlY3V0YWJsZSBzaXplIHdlbnQgdXAgYnkgYSBmZXcgSyBvbiBpMzg2LgorCSAgICBUaGVyZSBhcmUgYSBmZXcgbGltaXRhdGlvbnM6IGRhdGEgb2J0YWluZWQgdmlhIFRDUCBpcyBub3QKKwkgICAgY2FjaGVkLCBhbmQgZHluYW1pY2FsbHktY3JlYXRlZCBpbnRlcmZhY2VzIG1heSBicmVhayB1bmRlcgorCSAgICBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuIFNvdXJjZS1hZGRyZXNzIG9yIHF1ZXJ5LXBvcnQKKwkgICAgc3BlY2lmaWNhdGlvbnMgYXJlIGlnbm9yZWQgZm9yIFRDUC4KKworCSAgICBOQUsgYXR0ZW1wdHMgdG8gcmVuZXcgYSBESENQIGxlYXNlIHdoZXJlIHRoZSBESENQIHJhbmdlCisJICAgIGhhcyBjaGFuZ2VkIGFuZCB0aGUgbGVhc2UgaXMgbm8gbG9uZ2VyIGluIHRoZSBhbGxvd2VkCisJICAgIHJhbmdlLiBKYW1pZSBMb2tpZXIgcG9pbnRlZCBvdXQgdGhpcyBidWcuCisKKwkgICAgTkFLIGF0dGVtcHRzIHRvIHJlbmV3IGEgcG9vbCBESENQIGxlYXNlIHdoZW4gYSBzdGF0aWNhbGx5CisJICAgIGFsbG9jYXRlZCBhZGRyZXNzIGhhcyBiZWNvbWUgYXZhaWxhYmxlLCBmb3JjaW5nIGEgaG9zdCB0bworCSAgICBtb3ZlIHRvIGl0cyBhbGxvY2F0ZWQgYWRkcmVzcy4gTG90cyBvZiBwZW9wbGUgaGF2ZQorCSAgICBzdWdnZXN0ZWQgdGhpcyBjaGFuZ2UgYW5kIGJlZW4gcmVidWZmZWQgKHRoZXkga25vdyB3aG8KKwkgICAgdGhleSBhcmUpIHRoZSBzdHJhd3MgdGhhdCBicm9rZSB0aGUgY2FtZWwncyBiYWNrIHdlcmUgVGltCisJICAgIEN1dHRzIGFuZCBKYW1pZSBMb2tpZXIuCisKKwkgICAgUmVtb3ZlIGFueSBuYW1lc2VydmVyIHJlY29yZHMgZnJvbSBhbnN3ZXJzIHdoaWNoIGFyZQorCSAgICBtb2RpZmllZCBieSAtLWFsaWFzIGZsYWdzLiBJZiB0aGUgYW5zd2VyIGlzIG1vZGlmaWVkLCBpdAorCSAgICBjYW5ub3QgYW55IGxvbmdlciBiZSBhdXRob3JpdGF0aXZlLgorCisJICAgIENoYW5nZSBiZWhhdmlvdXIgb2YgImJvZ3VzLXByaXYiIG9wdGlvbiB0byByZXR1cm4gTlhET01BSU4KKwkgICAgcmF0aGVyIHRoYW4gYSBQVFIgcmVjb3JkIHdpdGggdGhlIGRvdHRlZC1xdWFkIGFkZHJlc3MgYXMKKwkgICAgbmFtZS4gVGhlIG5ldyBiZWhhdmlvdXIgZG9lc24ndCBwcm92b2tlIHRjcHdyYXBwZXJzIGxpa2UKKwkgICAgdGhlIG9sZCBiZWhhdmlvciBkaWQuCisKKwkgICAgQWRkZWQgYSBwYXRjaCBmb3IgdGhlIFN1c2UgcnBtLiBUaGF0IGNoYW5nZXMgdGhlIGRlZmF1bHQKKwkgICAgZ3JvdXAgdG8gb25lIHN1aXRhYmxlIGZvciBTdXNlIGFuZCBkaXNhYmxlcyBpbmNsdXNpb24gb2YKKwkgICAgdGhlIElTQyBsZWFzZS1maWxlIHJlYWRlciBjb2RlLiBUaGFua3MgdG8gQW5keSBDYW1iZWlzIGZvcgorCSAgICBoaXMgb25nb2luZyB3b3JrIG9uIFN1c2UgcGFja2FnaW5nLgorCisJICAgIFN1cHBvcnQgZm9yd2FyZGluZyBvZiBFRE5TLjAgVGhlIG1heGltdW0gVURQIHBhY2tldCBzaXplIAorCSAgICBkZWZhdWx0cyB0byAxMjgwLCBidXQgbWF5IGJlIGNoYW5nZWQgd2l0aCB0aGUKKwkgICAgLS1lZG5zLXBhY2tldC1tYXggb3B0aW9uLiBEZXRlY3QgcXVlcmllcyB3aXRoIHRoZSBkbyBiaXQKKwkgICAgc2V0IGFuZCBhbHdheXMgZm9yd2FyZCB0aGVtLCBzaW5jZSBETlNTRUMgcmVjb3JkcyBhcmUgCisJICAgIG5vdCBjYWNoZWQuIFRoaXMgYmVoYXZpb3VyIGlzIHJlcXVpcmVkIHRvIG1ha2UKKwkgICAgRE5TU0VDYmlzIHdvcmsgcHJvcGVybHkgdGhvdWdoIGRuc21hc3EuIFRoYW5rcyB0byBTaW1vbgorCSAgICBKb3NlZnNzb24gZm9yIGhlbHAgd2l0aCB0aGlzLgorCisJICAgIE1vdmUgZGVmYXVsdCBjb25maWcgZmlsZSBsb2NhdGlvbiB1bmRlciBPcGVuQlNEIGZyb20KKwkgICAgL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mIHRvIC9ldGMvZG5zbWFzcS5jb25mLiBCdWcKKwkgICAgcmVwb3J0IGZyb20gSm9uYXRoYW4gV2Vpc3MuCisKKwkgICAgVXNlIGEgbGVhc2Ugd2l0aCBtYXRjaGluZyBNQUMgYWRkcmVzcyBmb3IgYSBob3N0IHdoaWNoCisJICAgIGRvZXNuJ3QgcHJlc2VudCBhIGNsaWVudC1pZCwgZXZlbiBpZiB0aGVyZSB3YXMgYSBjbGllbnQgSUQgCisJICAgIGF0IHNvbWUgcG9pbnQgaW4gdGhlIHBhc3QuIFRoaXMgcmVkdWNlcyBzdXJwcmlzZXMgd2hlbgorCSAgICBjaGFuZ2luZyBESENQIGNsaWVudHMsIGFkZGluZyBpZDoqIHRvIGEgaG9zdCwgYW5kIGZyb20gdGhlCisJICAgIHNlbWFudGljcyBjaGFuZ2Ugb2YgL2V0Yy9ldGhlcnMgaW4gMi45LiBUaGFua3MgdG8gQmVybmFyZAorCSAgICBTYW1tZXIgZm9yIGZpbmRpbmcgdGhhdC4KKworCSAgICBBZGRlZCBhICJjb250cmliIiBkaXJlY3RvcnkgYW5kIGluIGl0IHRoZSBkbnNsaXN0IHV0aWxpdHksCisJICAgIGZyb20gVGhvbWFzIFR1dHRsZS4KKworCSAgICBGaXhlZCAiZmFpbCB0byBzdGFydCB1cCIgcHJvYmxlbXMgdW5kZXIgTGludXggd2l0aCBJUHY2CisJICAgIGVuYWJsZWQuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhlc2Ugd2VyZSBhbiBpc3N1ZSBpbgorCSAgICByZWxlYXNlZCB2ZXJzaW9ucywgYnV0IHRoZXkgbWFuaWZlc3RlZCB0aGVtc2VsdmVzIHdoZW4gVENQCisJICAgIHN1cHBvcnQgd2FzIGFkZGVkLiBUaGFua3MgdG8gTWljaGFlbCBIYW1pbHRvbiBmb3IKKwkgICAgYXNzaXN0YW5jZSB3aXRoIHRoaXMuCisKK3ZlcnNpb24gMi4xMQorCSAgICBGaXhlZCBESENQIHByb2JsZW0gd2hpY2ggY291bGQgcmVzdWx0IGluIHR3byBsZWFzZXMgaW4gdGhlCisgICAgICAgICAgICBkYXRhYmFzZSB3aXRoIHRoZSBzYW1lIGFkZHJlc3MuIFRoaXMgbG9va2VkIG11Y2ggbW9yZQorICAgICAgICAgICAgYWxhcm1pbmcgdGhlbiBpdCB3YXMsIHNpbmNlIGl0IGNvdWxkIG9ubHkgaGFwcGVuIHdoZW4gYQorICAgICAgICAgICAgbWFjaGluZSBjaGFuZ2VzIE1BQyBhZGRyZXNzIGJ1dCBrZXB0IHRoZSBzYW1lIG5hbWUuIFRoZQorICAgICAgICAgICAgb2xkIGxlYXNlIHdvdWxkIHBlcnNpc3QgdW50aWwgaXQgdGltZWQgb3V0IGJ1dCB0aGluZ3MKKyAgICAgICAgICAgIHdvdWxkIHN0aWxsIHdvcmsgT0suIAorCisJICAgIENoZWNrIHRoYXQgSVAgYWRkcmVzc2VzIGluIGFsbCBkaGNwLWhvc3QgZGlyZWN0aXZlcyBhcmUKKwkgICAgdW5pcXVlIGFuZCBkaWUgaG9ycmlibHkgaWYgdGhleSBhcmUgbm90LCBzaW5jZSBvdGhlcndpc2UKKwkgICAgZW5kbGVzcyBwcm90b2NvbCBsb29wcyBjYW4gb2NjdXIuIAorCSAgICAKKwkgICAgVXNlIElQVjZfUkVDVlBLVElORk8gYXMgc29ja2V0IG9wdGlvbiByYXRoZXIgdGhhbgorCSAgICBJUFY2X1BLVElORk8gd2hlcmUgYXZhaWxhYmxlLiBUaGlzIGtlZXBzIGxhdGUtbW9kZWwgRnJlZUJTRAorCSAgICBoYXBweS4KKworCSAgICBTZXQgc291cmNlIGludGVyZmFjZSB3aGVuIHJlcGx5aW5nIHRvIElQdjYgVURQCisJICAgIHF1ZXJpZXMuIFRoaXMgaXMgbmVlZGVkIHRvIGNvcGUgd2l0aCBsaW5rLWxvY2FsIGFkZHJlc3Nlcy4KKwordmVyc2lvbiAyLjEyCisgICAgICAgICAgICBBZGRlZCBleHRyYSBjaGVja3MgdG8gZW5zdXJlIHRoYXQgREhDUCBjcmVhdGVkIEROUyBlbnRyaWVzIAorCSAgICBjYW5ub3QgZ2VuZXJhdGUgbXVsdGlwbGUgRE5TIGFkZHJlc3MtPm5hbWUgZW50cmllcy4gVGhhbmtzIHRvIAorCSAgICBTdGVmYW4gTW9ubmllciBmb3IgZmluZGluZyB0aGUgZXhhY3Qgc2V0IG9mIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIG9wdGlvbnMgd2hpY2ggY291bGQgY3JlYXRlIHRoaXMuCisKKwkgICAgRG9uJ3Qgc2V0IHRoZSB0aGUgZmlsdGVyd2luMmsgb3B0aW9uIGluIHRoZSBleGFtcGxlIGNvbmZpZworCSAgICBmaWxlIGFuZCBhZGQgd2FybmluZ3MgdGhhdCBpcyBicmVha3MgS2VyYmVyb3MuIFRoYW5rcyB0bworCSAgICBTaW1vbiBKb3NlZnNzb24gYW5kIFRpbW90aHkgRm9sa3MgZm9yIHBvaW50aW5nIHRoYXQgb3V0LgorCSAgICAKKwkgICAgTG9nIHR5cGVzIG9mIGluY29taW5nIHF1ZXJpZXMgYXMgd2VsbCBhcyBzb3VyY2UgYW5kIGRvbWFpbi4KKworCSAgICBMb2cgTk9EQVRBIHJlcGxpZXMgZ2VuZXJhdGVkIGFzIGEgcmVzdWx0IG9mIHRoZQorCSAgICBmaWx0ZXJ3aW4yayBvcHRpb24uCisKK3ZlcnNpb24gMi4xMworCSAgICBGaXhlZCBjcmFzaCB3aXRoIHVuLW5hbWVkIERIQ1AgaG9zdHMgaW50cm9kdWNlZCBpbiAyLjEyLgorCSAgICBUaGFua3MgdG8gTmljb2xvIFdvamV3b2RhIGFuZCBHcmVnb3J5IEdhdGh5IGZvciBidWcgcmVwb3J0cy4KKwordmVyc2lvbiAyLjE0CisJICAgIEZpeCBESENQIG5ldHdvcmsgZGV0ZWN0aW9uIGZvciBob3N0cyB3aGljaCB0YWxrIHZpYSBhCisJICAgIHJlbGF5LiBUaGlzIG1ha2VzIGxlYXNlIHJlbmV3YWwgZm9yIHN1Y2ggaG9zdHMgd29yaworCSAgICBjb3JyZWN0bHkuCisKKwkgICAgU3VwcG9ydCBSRkMzMDExIHN1Ym5ldCBzZWxlY3RvcnMgaW4gdGhlIERIQ1Agc2VydmVyLgorCisJICAgIEZpeCBESENQIGNvZGUgdG8gZ2VuZXJhdGUgUkZDLWNvbXBsaWFudCByZXNwb25zZXMKKyAgICAgICAgICAgIHRvIGhvc3RzIGluIHRoZSBJTklULVJFQk9PVCBzdGF0ZS4KKworCSAgICBJbiB0aGUgREhDUCBzZXJ2ZXIsIHNldCB0aGUgcmVjZWl2ZSBidWZmZXIgc2l6ZSBvbiAKKwkgICAgdGhlIHRyYW5zbWl0LW9ubHkgcGFja2V0IHNvY2tldCB0byB6ZXJvLCB0byBhdm9pZCAKKwkgICAgd2FzdGUgb2Yga2VybmVsIGJ1ZmZlcnMuCisKKwkgICAgRml4IERIQ1AgYWRkcmVzcyBhbGxvY2F0aW9uIGNvZGUgdG8gdXNlIHRoZSB3aG9sZSBvZgorCSAgICB0aGUgREhDUCByYW5nZSwgaW5jbHVkaW5nIHRoZSBzdGFydCBhbmQgZW5kIGFkZHJlc3Nlcy4KKwkgICAgCisJICAgIEF0dGVtcHQgYW4gSUNNUCAicGluZyIgb24gbmV3IGFkZHJlc3NlcyBiZWZvcmUgYWxsb2NhdGluZyAKKwkgICAgdGhlbSB0byBsZWFzZXMsIHRvIGF2b2lkIGFsbG9jYXRpbmcgYWRkcmVzc2VzIHdoaWNoIGFyZSBpbiB1c2UuCisKKwkgICAgSGFuZGxlIHJmYzk1MSBCT09UUCBhcyB3ZWxsIGFzIERIQ1AgZm9yIGhvc3RzIHdoaWNoIGhhdmUKKwkgICAgTUFDIGFkZHJlc3MgdG8gSVAgYWRkcmVzcyBtYXBwaW5nIGRlZmluZWQuCisKKwkgICAgRml4IGNvbXBpbGF0aW9uIHVuZGVyIE1hY09TIFguIFRoYW5rcyB0byBDaHJpcyBUb21saW5zb24uCisKKwkgICAgRml4IGNvbXBpbGF0aW9uIHVuZGVyIE5ldEJTRC4gVGhhbmtzIHRvIEZlbGl4IERlaWNobWFubi4KKworCSAgICBBZGRlZCAia2VlcC1pbi1mb3JlZ3JvdW5kIiBvcHRpb24uIFRoYW5rcyB0byBTZWFuCisJICAgIE1hY0xlbm5hbiBmb3IgdGhlIHBhdGNoLgorCit2ZXJzaW9uIDIuMTUKKyAgICAgICAgICAgIEZpeGVkIE5YRE9NQUlOL05PREFUQSBjb25mdXNpb24gZm9yIGxvY2FsbHkga25vd24KKyAgICAgICAgICAgIG5hbWVzLiBXZSBub3cgcmV0dXJuIGEgTk9EQVRBIHJlcG9uc2UgZm9yIG5hbWVzIHdoaWNoIGFyZQorICAgICAgICAgICAgbG9jYWxseSBrbm93bi4gTm93IGEgcXVlcnkgZm9yIChlZyBBQUFBIG9yIE1YKSBmb3IgYSBuYW1lCisJICAgIHdpdGggYW4gSVB2NCBhZGRyZXNzIGluIC9ldGMvaG9zdHMgd2hpY2ggZmFpbHMgdXBzdHJlYW0KKyAgICAgICAgICAgIHdpbGwgZ2VuZXJhdGUgYSBOT0RBVEEgcmVzcG9uc2UuIE5vdGUgdGhhdCB0aGUgcXVlcnkgCisJICAgIGlzIHN0aWxsIHRyaWVkIHVwc3RyZWFtLCBidXQgYSBOWERPTUFJTiByZXBseSBnZXRzCisgICAgICAgICAgICBjb252ZXJ0ZWQgdG8gTk9EQVRBLiBUaGFua3MgdG8gRXJpYyBkZSBUaG91YXJzLCBFcmljCisgICAgICAgICAgICBTcGFrbWFuIGFuZCBNaWtlIE1lc3RuaWsgZm9yIGJ1ZyByZXBvcnRzL3Rlc3RpbmcuCisKKwkgICAgQWxsb3cgbXVsdGlwbGUgZGhjcC1yYW5nZXMgd2l0aGluIHRoZSBzYW1lIG5ldHdvcmsuIFRoZQorCSAgICBvcmlnaW5hbCBpbnRlbnRpb24gd2FzIHRoYXQgdGhlcmUgd291bGQgYmUgYSBkaGNwLXJhbmdlCisJICAgIG9wdGlvbiBmb3IgZWFjaCBuZXR3b3JrIHNlcnZlZCwgYnV0IHRoZXJlJ3Mgbm8gcmVhbCByZWFzb24KKwkgICAgbm90IHRvIGFsbG93IGRpc2NvbnRpbnVvdXMgcmFuZ2VzIHdpdGhpbiBhIG5ldHdvcmsgc28gdGhpcworCSAgICByZWxlYXNlIGFkZHMgc3VwcG9ydCBmb3IgdGhhdC4KKworCSAgICBDaGVjayBmb3IgZGhjcC1yYW5nZXMgd2hpY2ggYXJlIGluY29uc2lzdGVudCB3aXRoIHRoZWlyIAorCSAgICBuZXRtYXNrLCBhbmQgZ2VuZXJhdGUgZXJyb3JzIG9yIHdhcm5pbmdzLgorCSAgICAKKwkgICAgSW1wcm92ZSBlcnJvciBtZXNzYWdlcyB3aGVuIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoCisJICAgIGNvbmZpZ3VyYXRpb24uCisKK3ZlcnNpb24gMi4xNgorCSAgICBGaXhlZCB0eXBvIGluIE9wZW5CU0Qtb25seSBjb2RlIHdoaWNoIHN0b3BwZWQgY29tcGlsYXRpb24KKyAgICAgICAgICAgIHVuZGVyIHRoYXQgT1MuIENocmlzIFdlaW5oYXVwbCBnZXRzIGNyZWRpdCBmb3IgcmVwb3J0aW5nIAorICAgICAgICAgICAgdGhpcy4KKworCSAgICBBZGRlZCBkaGNwLWF1dGhvcml0YXRpdmUgb3B0aW9uIHdoaWNoIHJlc3RvcmVzIG5vbi1SRkMgCisJICAgIGNvbXBsaWFudCBidXQgZGVzaXJhYmxlIGJlaGF2aW91ciBvZiBwcmUtMi4xNCB2ZXJzaW9ucyBhbmQKKyAgICAgICAgICAgIGF2b2lkcyBsb25nIHRpbWVvdXRzIHdoaWxlIERIQ1AgY2xpZW50cyB0cnkgdG8gcmVuZXcgbGVhc2VzCisgICAgICAgICAgICB3aGljaCBhcmUgdW5rbm93biB0byBkbnNtYXNxLiBUaGFua3MgdG8gSm9obiBNYXN0d2lqayBmb3IgCisJICAgIGhlbHAgd2l0aCB0aGlzLgkgCisKKwkgICAgQWRkZWQgc3VwcG9ydCB0byB0aGUgREhDUCBvcHRpb24gY29kZSB0byBhbGxvdyBSRkMtMzM5NyAKKwkgICAgZG9tYWluIHNlYXJjaCBESENQIG9wdGlvbiAoMTE5KSB0byBiZSBzZW50LgorCisgICAgICAgICAgICBTZXQgTk9OQkxPQ0sgb24gYWxsIGxpc3RlbmluZyBzb2NrZXRzIHRvIHdvcmthcm91bmQgbm9uLVBPU0lYCisgICAgICAgICAgICBjb21wbGlhbmNlIGluIExpbnV4IDIuNCBhbmQgMi42LiBUaGlzIGZpeGVzIHJhcmUgaGFuZ3Mgd2hpY2gKKyAgICAgICAgICAgIG9jY3VyZWQgd2hlbiBjb3JydXB0ZWQgcGFja2V0cyB3ZXJlIHJlY2VpdmVkLiBUaGFua3MgdG8KKwkgICAgSm9yaXMgdmFuIFJhbnR3aWprIGZvciBjaGFzaW5nIHRoYXQgZG93bi4KKyAKKwkgICAgVXBkYXRlZCBjb25maWcuaCBmb3IgTmV0QlNELiBUaGFua3MgdG8gTWFydGluIExhbWJlcnMuCisKKyAgICAgICAgICAgIERvIGEgYmV0dGVyIGpvYiBvZiBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIHJldHJhbnNtaXNzaW9ucworCSAgICBhbmQgbmV3IHF1ZXJpZXMgd2hlbiBmb3J3YXJkaW5nLiBUaGlzIGZpeGVzIGEgYnVnCisJICAgIHRyaWdnZXJlZCBieSB0aGUgcG9saXBvIHdlYiBjYWNoZSB3aGljaCBzZW5kcyBBIGFuZCBBQUFBCisJICAgIHF1ZXJpZXMgYm90aCB3aXRoIHRoZSBzYW1lIHRyYW5zYWN0aW9uLUlELiBUaGFua3MgdG8gCisJICAgIEpvYWNoaW0gQmVyZGFsIEhhZ2EgYW5kIEp1bGl1c3ogQ2hyb2JvY3playBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwkgICAgUmV3cm90ZSBjYWNoZSBjb2RlIHRvIHN0b3JlIENOQU1FUywgcmF0aGVyIHRoZW4gY2hhc2luZworCSAgICB0aGVtIGJlZm9yZSBzdG9yYWdlLiBUaGlzIGVsaW1pbmF0ZXMgYmFkIHNpdHVhdGlvbnMgd2hlbgorCSAgICBjbGllbnRzIGdldCBpbmNvbnNpc3RlbnQgdmlld3MgZGVwZW5kaW5nIG9uIGlmIGRhdGEgY29tZXMKKwkgICAgZnJvbSB0aGUgY2FjaGUuCisKKwkgICAgQWxsb3cgZm9yIG1vcmUgdGhhbiBvbmUgLS1hZGRuLWhvc3RzIGZsYWcuCisKKwkgICAgQ2xhcmlmeSBsb2dnZWQgbWVzc2FnZSB3aGVuIGEgREhDUCBsZWFzZSBjbGFzaGVzIHdpdGggYW4KKwkgICAgL2V0Yy9ob3N0cyBlbnRyeS4gVGhhbmtzIHRvIE1hdCBTd2lmdCBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKKwkgICAgQWRkZWQgZHluYW1pYy1kbnNtYXNxIGZyb20gUGV0ZXIgV2lsbGlzIHRvIHRoZSBjb250cmliCisJICAgIHNlY3Rpb24uCisKK3ZlcnNpb24gMi4xNworCSAgICBDb3JyZWN0bHkgZGVkdWNlIHRoZSBzaXplIG9mIG51bWVyaWMgZGhjcC1vcHRpb25zLCByYXRoZXIKKwkgICAgdGhhbiBtYWtpbmcgd2lsZCBndWVzc2VzLiBBbHNvIGNvcGUgd2l0aCBuZWdhdGl2ZSB2YWx1ZXMuCisKKwkgICAgRml4ZWQgdXNlIG9mIEMgbGlicmFyeSByZXNlcnZlZCBzeW1ib2wgImluZGV4IiB3aGljaCBicm9rZQorCSAgICB1bmRlciBjZXJ0YWluIGNvbWJpbmF0aW9ucyBvZiBsaWJyYXJ5IGFuZCBjb21waWxlci4KKworCSAgICBNYWtlIGJpbmQtaW50ZXJmYWNlcyB3b3JrIGZvciBJUHY2IGludGVyZmFjZXMgdG9vLgorCisJICAgIFdhcm4gaWYgYW4gaW50ZXJmYWNlIGlzIGdpdmVuIGZvciBsaXN0ZW5pbmcgd2hpY2ggZG9lc24ndAorCSAgICBjdXJyZW50bHkgZXhpc3Qgd2hlbiBub3QgaW4gYmluZC1pbnRlcmZhY2VzIG1vZGUuIChUaGlzIGlzCisJICAgIGFscmVhZHkgYSBmYXRhbCBlcnJvciB3aGVuIGJpbmQtaW50ZXJmYWNlcyBpcyBzZXQuKQorCisJICAgIEFsbG93IHRoZSAtLWludGVyZmFjZSBhbmQgLS1leGNlcHQtaW50ZXJmYWNlIG9wdGlvbnMgdG8KKwkgICAgdGFrZSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGludGVyZmFjZXMuCisKKwkgICAgVHdlYWsgLS1kaGNwLXVzZXJjbGFzcyBtYXRjaGluZyBjb2RlIHRvIHdvcmsgd2l0aCB0aGUKKwkgICAgSVNDIGRoY2xpZW50IHdoaWNoIHZpb2xhdGVzIFJGQzMwMDQgdW5sZXNzIGl0cworCSAgICBjb25maWd1cmF0aW9uIGlzIHZlcnkgd2FycGVkLiBUaGFua3MgdG8gQ2VkcmljIER1dmFsIGZvcgorCSAgICB0aGUgYnVnIHJlcG9ydC4gCisKKwkgICAgQWxsb3cgbW9yZSB0aGFuIG9uZSBuZXR3b3JrLWlkIHRhZyBpbiBhIGRoY3Atb3B0aW9uLiBBbGwKKwkgICAgdGhlIHRhZ3MgbXVzdCBtYXRjaCB0byBlbmFibGUgdGhlIG9wdGlvbi4KKworCSAgICBBZGRlZCBkaGNwLWlnbm9yZSBvcHRpb24gdG8gZGlzYWJsZSBjbGFzc2VzIG9mIGhvc3RzIGJhc2VkCisJICAgIG9uIG5ldHdvcmstaWQgdGFncy4gQWxzbyBhbGxvdyBCT09UUCBvcHRpb25zIHRvIGJlCisJICAgIGNvbnRyb2xsZWQgYnkgbmV0d29yayB0YWdzLgorCisJICAgIEZpbGwgaW4gc25hbWUsIGZpbGUgYW5kIHNpYWRkciBmaWVsZHMgaW4gcmVwbGllcyB0bworCSAgICBESENQSU5GT1JNIG1lc3NhZ2VzLgorCisJICAgIERvbid0IHNlbmQgTkFLIHJlcGxpZXMgdG8gREhDUFJFUVVFU1QgcGFja2V0cyBmb3IgZGlzYWJsZWQKKwkgICAgY2xpZW50cy4gQ3JlZGl0IHRvIENlZHJpYyBEdXZhbCBmb3Igc3BvdHRpbmcgdGhpcy4KKworCSAgICBGaXggcmFyZSBjcmFzaCBhc3NvY2lhdGVkIHdpdGggbG9uZyBETlMgbmFtZXMgYW5kIENOQU1FCisJICAgIHJlY29yZHMuIFRoYW5rcyB0byBIb2xnZXIgSG9mZnN0YXR0ZSBhbmQgZXNwZWNpYWxseSBTdGV2ZQorCSAgICBHcmVjbmkgZm9yIGhlbHAgY2hhc2luZyB0aGF0IG9uZSBkb3duLgorCit2ZXJzaW9uIDIuMTgKKyAgICAgICAgICAgIFJld29ya2VkIHRoZSBMaW51eCBpbnRlcmZhY2UgZGlzY292ZXJ5IGNvZGUgKGFnYWluKSB0bworCSAgICBjb3BlIHdpdGggaW50ZXJmYWNlcyB3aGljaCBoYXZlIG9ubHkgSVB2NiBhZGRyZXNzZXMgYW5kIAorCSAgICBpbnRlcmZhY2VzIHdpdGggbW9yZSB0aGFuIG9uZSBJUHY2IGFkZHJlc3MuIFRoYW5rcyB0bworICAgICAgICAgICAgTWFydGluIFBlbHMgZm9yIGhlbHAgd2l0aCB0aGF0LgorCisJICAgIEZpeCBwcm9ibGVtcyB3aGljaCBvY2N1cmVkIHdoZW4gbW9yZSB0aGFuIG9uZSBkaGNwLXJhbmdlCisJICAgIHdhcyBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgc3VibmV0OiBzb21ldGltZXMgcGFyYW1ldGVycworCSAgICAobGVhc2UgdGltZSwgbmV0d29yay1pZCB0YWcpIGZyb20gdGhlIHdyb25nIG9uZSB3b3VsZCBiZQorCSAgICB1c2VkLiBUaGFua3MgdG8gUm9yeSBDYW1wYmVsbC1MYW5nZSBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwkgICAgUmVzZXQgY2FjaGUgc3RhdGlzdGljcyB3aGVuIGNsZWFyaW5nIHRoZSBjYWNoZS4KKworCSAgICBFbmFibGUgbG9uZyBjb21tYW5kIGxpbmUgb3B0aW9ucyBvbiBGcmVlQlNEIHdoZW4gdGhlCisJICAgIEMgbGlicmFyeSBzdXBwb3J0cyB0aGVtLgorCit2ZXJzaW9uIDIuMTkgCisgICAgICAgICAgICBUd2Vha2VkIHRoZSBMaW51eC1vbmx5IGludGVyZmFjZSBkaXNjb3ZlcnkgY29kZSB0byBjb3BlIAorCSAgICB3aXRoIGludGVyZmFjZS1pbmRleGVzIGxhcmdlciB0aGFuIDggYml0cyBpbgorICAgICAgICAgICAgL3Byb2MvbmV0L2lmX2luZXQ2LiBUaGlzIG9ubHkgYWZmZWN0cyBMaW51eCwgb2J2aW91c2x5LiAgCisJICAgIFRoYW5rcyB0byBSaWNoYXJkIEF0dGVyZXIgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIENoZWNrIGZvciB1bmRlci1sZW5ndGggb3B0aW9uIGZpZWxkcyBpbiBESENQIHBhY2tldHMsIGEKKwkgICAgemVybyBsZW5ndGggY2xpZW50LWlkLCBpbiBwYXJ0aWNsdWFyLCBjb3VsZCBzZXJpb3VzbHkKKwkgICAgY29uZnVzZSBkbnNtYXNxICd0aWxsIG5vdy4gVGhhbmtzIHRvIFdpbGwgTXVybmFtZSBmb3IgaGVscAorCSAgICB3aXRoIHRoYXQuCisKKwkgICAgSWYgYSBESENQLWFsbG9jYXRlZCBhZGRyZXNzIGhhcyBhbiBhc3NvY2lhdGVkIG5hbWUgaW4KKwkgICAgL2V0Yy9ob3N0cywgYW5kIHRoZSBjbGllbnQgZG9lcyBub3QgcHJvdmlkZSBhIGhvc3RuYW1lCisJICAgIHBhcmFtZXRlciBhbmQgdGhlcmUgaXMgbm8gaG9zdG5hbWUgaW4gYSBtYXRjaGluZyBkaGNwLWhvc3QKKwkgICAgb3B0aW9uLCBzZW5kIHRoZSAvZXRjL2hvc3RzIG5hbWUgYXMgdGhlIGhvc3RuYW1lIGluIAorCSAgICB0aGUgREhDUCBsZWFzZS4gVGhhbmtzIHRvIFdpbGwgTXVybmFtZSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKK3ZlcnNpb24gMi4yMAorCSAgICBBbGxvdyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mIGRuc21hc3EgdG8gcnVuIG9uIGEKKwkgICAgbWFjaGluZSwgZWFjaCBwcm92aWRpbmcgREhDUCBzZXJ2aWNlIG9uIGEgZGlmZmVyZW50CisJICAgIGludGVyZmFjZSwgcHJvdmlkZWQgdGhhdCAtLWJpbmQtaW50ZXJmYWNlcyBpcyBzZXQuIFRoaXMKKwkgICAgY29uZmlndXJhdGlvbiB1c2VkIHRvIHdvcmssIGJ1dCByZWdyZXNzZWQgaW4gdmVyc2lvbiAyLjE0CisKKwkgICAgRml4IGNvbXBpbGF0aW9uIG9uIE1hYyBPUyBYLiBUaGFua3MgdG8gS2V2aW4gQnVsbG9jay4KKwkKKwkgICAgUHJvdGVjdCBhZ2FpbnN0IG92ZXJsb25nIG5hbWVzIGFuZCBvdmVybG9uZworCSAgICBsYWJlbHMgaW4gY29uZmlndXJhdGlvbiBhbmQgZnJvbSBESENQLgorCisJICAgIEZpeCBpbnRlcmVzdGluZyBjb3JuZXIgY2FzZSBpbiBDTkFNRSBoYW5kbGluZy4gVGhpcyBvY2N1cnMKKwkgICAgd2hlbiBhIENOQU1FIGhhcyBhIHRhcmdldCB3aGljaCAic2hhZG93ZWQiIGJ5IGEgbmFtZSBpbgorCSAgICAvZXRjL2hvc3RzIG9yIGZyb20gREhDUC4gUmVzb2x2aW5nIHRoZSBDTkFNRSB3b3VsZCBzbmVhaworCSAgICB0aGUgdXBzdHJlYW0gdmFsdWUgb2YgdGhlIENOQU1FJ3MgdGFyZ2V0IGludG8gdGhlIGNhY2hlLAorCSAgICBhbG9uZ3NpZGUgdGhlIGxvY2FsIHZhbHVlLiBOb3cgdGhhdCBkb2Vzbid0IGhhcHBlbiwgdGhvdWdoCisJICAgIHJlc29sdmluZyB0aGUgQ05BTUUgc3RpbGwgZ2l2ZXMgdGhlIHVuc2hhZG93ZWQgdmFsdWUuIFRoaXMKKwkgICAgaXMgYXJndWFibHkgd3JvbmcgYnV0IHJhdGhlciBkaWZmaWN1bHQgdG8gZml4LiBUaGUgbWFpbgorCSAgICB0aGluZyBpcyB0byBhdm9pZCBnZXR0aW5nIHN0cmFuZ2UgcmVzdWx0cyBmb3IgdGhlIHRhcmdldAorCSAgICBkdWUgdG8gdGhlIGNhY2hlIHBvbGx1dGlvbiB3aGVuIHJlc29sdmluZyB0aGUKKwkgICAgQ05BTUUuIFRoYW5rcyB0byBQaWVycmUgSGFib3V6aXQgZm9yIGV4cGxvcmluZyB0aGUgY29ybmVyCisJICAgIGFuZCBzdWJtaXR0aW5nIGEgdmVyeSBjbGVhciBidWcgcmVwb3J0LgorCisJICAgIEZpeCBzdWJ0bGUgYnVnIGluIHRoZSBETlMgcGFja2V0IHBhcnNpbmcgY29kZS4gSXQncyBhbG1vc3QKKwkgICAgaW1wb3NzaWJsZSB0byBkZXNjcmliZSB0aGlzIHN1Y2NpbmN0bHksIGJ1dCB0aGUgb25lIGtub3duCisJICAgIG1hbmlmZXN0YXRpb24gaXMgdGhlIGluYWJpbGl0eSB0byBjYWNoZSB0aGUgQSByZWNvcmQgZm9yCisJICAgIHd3dy5hcHBsZS5jb20uIFRoYW5rcyB0byBCb2IgQWxleGFuZGVyIGZvciBzcG90dGluZyB0aGF0LgorCisJICAgIFN1cHBvcnQgU1JWIHJlY29yZHMuIFRoYW5rcyB0byBSb2JlcnQgS2VhbiBmb3IgdGhlIHBhdGNoZXMKKwkgICAgZm9yIHRoaXMuCisKKwkgICAgRml4ZWQgc2lnbiBjb25mdXNpb24gaW4gdGhlIHZlbmRvci1pZCBtYXRjaGluZyBjb2RlIHdoaWNoCisJICAgIGNvdWxkIGNhdXNlIGNyYXNoZXMgc29tZXRpbWVzLiAoQ3JlZGl0IHRvIE1hcmsgV2lhdGVyIGZvcgorCSAgICBoZWxwIGZpbmRpbmcgdGhpcy4pCisKKwkgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gbWF0Y2ggdGhlIG5ldGlkIHRhZyBpbiBhCisJICAgIGRoY3AtcmFuZ2UuIENvbWJpbmVkIHdpdGggdGhlIGFiaWxpdHkgdG8gaGF2ZSBtdWx0aXBsZQorCSAgICByYW5nZXMgaW4gYSBzaW5nbGUgc3VibmV0LCB0aGlzIHByb3ZpZGVzIGEgbWVhbnMgdG8KKwkgICAgc2VncmVnYXRlIGhvc3RzIG9uIGRpZmZlcmVudCBhZGRyZXNzIHJhbmdlcyBiYXNlZCBvbgorCSAgICB2ZW5kb3JjbGFzcyBvciB1c2VyY2xhc3MuIFRoYW5rcyB0byBNYXJrIFdpYXRlciBmb3IKKwkgICAgcHJvbXB0aW5nIHRoaXMgZW5oYW5jZW1lbnQuICAgIAorCisJICAgIEFkZGVkIHByZWZlcmVuY2UgdmFsdWVzIGZvciBNWCByZWNvcmRzLgorCisJICAgIEFkZGVkIHRoZSAtLWxvY2FsaXNlLXF1ZXJpZXMgb3B0aW9uLgorCit2ZXJzaW9uIDIuMjEKKyAgICAgICAgICAgIEltcHJvdmUgaGFuZGxpbmcgb2YgU0VSVkZBSUwgYW5kIFJFRlVTRUQgZXJyb3JzLiBSZWNlaXZpbmcKKwkgICAgdGhlc2Ugbm93IGluaXRpYXRlcyBzZWFyY2ggZm9yIGEgbmV3IGdvb2Qgc2VydmVyLCBhbmQgYSAKKwkgICAgc2VydmVyIHdoaWNoIHJldHVybnMgdGhlbSBpcyBub3QgYSBjYW5kaWRhdGUgYXMgYSBnb29kCisgICAgICAgICAgICBzZXJ2ZXIuIFRoYW5rcyB0byBJc3R2YW4gVmFyYWRpIGZvciBwb2ludGluZyBvdXQgdGhlCisgICAgICAgICAgICBwcm9ibGVtLgorCisJICAgIFR3ZWFrIHRoZSB0aW1lIGNvZGUgaW4gQlJPS0VOX1JUQyBtb2RlLgorCisJICAgIFNhbml0eSBjaGVjayBsZWFzZSB0aW1lcyBpbiBkaGNwLXJhbmdlIGFuZCBkaGNwLWhvc3QKKwkgICAgY29uZmlndXJhdGlvbnMgYW5kIGZvcmNlIHRoZW0gdG8gYmUgYXQgbGVhc3QgdHdvIG1pbnV0ZXMKKwkgICAgKDEyMHMpIGxlYXNlcyBzaG9ydGVyIHRoYW4gYSBtaW51dGUgY29uZnVzZSBzb21lIGNsaWVudHMsCisJICAgIG5vdGFibHkgQXBwbGUgTWFjT1MgWC4gUm9yeSBDYW1wYmVsbC1MYW5nZSBmb3VuZCB0aGlzCisJICAgIHByb2JsZW0uCisKKwkgICAgT25seSB3YXJuIG9uY2UgYWJvdXQgYW4gdXBzdHJlYW0gc2VydmVyIHdoaWNoIGlzIHJlZnVzaW5nIHRvIGRvCisJICAgIHJlY3Vyc2l2ZSBxdWVyaWVzLgorCisJICAgIEZpeCBESENQIGFkZHJlc3MgYWxsb2NhdGlvbiBwcm9ibGVtIHdoZW4gbmV0aWQgdGFncyBhcmUgaW4KKwkgICAgdXNlLiBUaGFua3MgdG8gV2lsbCBNdXJuYW5lIGZvciB0aGUgYnVnIHJlcG9ydCBhbmQKKwkgICAgc3Vic2VxdWVudCB0ZXN0aW5nLgorCisJICAgIEFkZCBhbiBhZGRpdGlvbmFsIGRhdGEgc2VjdGlvbiB0byB0aGUgcmVwbHkgZm9yIE1YIGFuZCBTUlYKKwkgICAgcXVlcmllcy4gQWRkIHN1cHBvcnQgZm9yIEROUyBUWFQgcmVjb3Jkcy4gVGhhbmtzIHRvIFJvYmVydCAKKwkgICAgS2VhbiBhbmQgSm9obiBIYW1wdG9uIGZvciBwcm9tcHRzIGFuZCB0ZXN0aW5nIG9mIHRoZXNlLgorCisJICAgIEFwcGx5IGFkZHJlc3MgcmV3cml0aW5nIHRvIHJlY29yZHMgaW4gdGhlIGFkZGl0aW9uYWwgZGF0YSBzZWN0aW9uCisJICAgIG9mIEROUyBwYWNrZXRzLiBUaGlzIG1ha2VzIHRoaW5ncyBsaWtlIE1YIHJlY29yZHMgd29yaworCSAgICB3aXRoIHRoZSBhbGlhcyBmdW5jdGlvbi4gVGhhbmtzIHRvIENoYWQgU2tlZXRlcnMgZm9yCisJICAgIHBvaW50aW5nIG91dCB0aGUgbmVlZCBmb3IgdGhpcy4KKworCSAgICBBZGRlZCBzdXBwb3J0IGZvciBxdW90ZWQgc3RyaW5ncyBpbiBjb25maWcgZmlsZS4KKworCSAgICBEZXRlY3QgYW5kIGRlZmVhdCBjYWNoZS1wb2lzb25pbmcgYXR0YWNrcyB3aGljaCBhdHRlbXB0IHRvCisJICAgIHNlbmQgKG1hbGljaW91cykgYW5zd2VycyB0byBxdWVzdGlvbnMgd2UgZGlkbid0CisJICAgIHNlbmQuIFRoZXNlIGFyZSBpZ25vcmVkIG5vdyBldmVuIGlmIHRoZSBhdHRhY2tlciBtYW5hZ2VzCisJICAgIHRvIGd1ZXNzIGEgcmFuZG9tIHF1ZXJ5LWlkLgorCisJICAgIFByb3ZpZGUgREhDUCBzdXBwb3J0IGZvciBpbnRlcmZhY2VzIHdpdGggbXVsdGlwbGUgSVAKKwkgICAgYWRkcmVzc2VzIG9yIGFsaWFzZXMuIFRoaXMgaW4gb25seSBlbmFibGVkIHVuZGVyIExpbnV4LgorCSAgICBTZWUgdGhlIEZBUSBlbnRyeSBmb3IgZGV0YWlscy4KKworCSAgICBSZXZpc2l0IHRoZSBNQUMtYWRkcmVzcyBhbmQgY2xpZW50LWlkIG1hdGNoaW5nIGNvZGUgdG8KKwkgICAgcHJvdmlkZSBzYW5lciBiZWhhdmlvdXIgd2l0aCBQWEUgYm9vdHMsIHdoZXJlIHNvbWUKKwkgICAgcmVxdWVzdHMgaGF2ZSBhIGNsaWVudC1pZCBhbmQgc29tZSBkb24ndC4KKworCSAgICBGaXhlZCBvZmYtYnktb25lIGJ1ZmZlciBvdmVyZmxvdyBpbiBsZWFzZSBmaWxlIHJlYWRpbmcKKwkgICAgY29kZS4gVGhhbmtzIHRvIFJvYiBIb2xsYW5kIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCSAgICBBZGRlZCB3aWxkY2FyZCBtYXRjaGluZyBmb3IgTUFDIGFkZHJlc3NlcyBpbiBkaGNwLWhvc3QKKwkgICAgb3B0aW9ucy4gQSBzZW5zaWJsZSBzdWdnZXN0aW9uIGJ5IE5hdGhhbmllbCBNY0NhbGx1bS4KKwordmVyc2lvbiAyLjIyCisgICAgICAgICAgICBGaXhlZCBidWlsZCBwcm9ibGVtcyBvbiAobWFueSkgc3lzdGVtcyB3aXRoIG9sZGVyIGxpYmMKKyAgICAgICAgICAgIGhlYWRlcnMgd2hlcmUgPGxpbnV4L3R5cGVzLmg+IGlzIHJlcXVpcmVkIGJlZm9yZQorICAgICAgICAgICAgPGxpbnV4L25ldGxpbmsuaD4uIEVuYWJsZWQgSEFWRV9SVE5FVExJTksgdW5kZXIgdWNsaWJjIG5vdworICAgICAgICAgICAgdGhhdCB0aGlzIGZpeCBpcyBpbiBwbGFjZS4KKworCSAgICBBZGRlZCBzdXBwb3J0IGZvciBlbmNhcHN1bGF0ZWQgdmVuZG9yLWNsYXNzLXNwZWNpZmljIERIQ1AKKwkgICAgb3B0aW9ucy4gVGhhbmtzIHRvIEVyaWMgU2hhdHRvdyBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwkgICAgRml4IHJlZ3Jlc3Npb24gaW4gMi4yMSB3aGljaCBicm9rZSBjb21tYXMgaW4gZmlsZW5hbWVzIGFuZAorCSAgICBjb3JydXB0ZWQgYXJndi4gVGhhbmtzIHRvIEVyaWMgU2NvdHQgZm9yIHRoZSBidWdyZXBvcnQuCisKKwkgICAgRml4ZWQgc3R1cGlkIHRoaW5rbyB3aGljaCBjYXVzZWQgZG5zbWFzcSB0byB3ZWRnZSBkdXJpbmcKKwkgICAgc3RhcnR1cCB3aXRoIGNlcnRhaW4gTVgtcmVjb3JkIG9wdGlvbnMuIEFub3RoZXIgMi4yMSByZWdyZXNzaW9uLgorCisJICAgIEZpeGVkIGJyb2tlbi1uZXNzIHdoZW4gcmVhZGluZyAvZXRjL2V0aGVycy4gMi4yMSBicm9rZQorCSAgICB0aGlzIHRvby4KKworCSAgICBGaXhlZCB3ZWRnZSB3aXRoIGNlcnRhaW4gREhDUCBvcHRpb25zLiBZZXQgYW5vdGhlciAyLjIxCisJICAgIHJlZ3Jlc3Npb24uIFJvYiBIb2xsYW5kIGFuZCBSb3kgTWFycGxlcyBjaGFzZWQgdGhpcyBvbmUKKwkgICAgZG93bi4KKwordmVyc2lvbiAyLjIzCisJICAgIEFkZGVkIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlcmUgY2Fubm90IGJlIG1vcmUgdGhhbiBvbmUKKwkgICAgZGhjcC1ob3N0IG9wdGlvbiBmb3IgYW55IG9uZSBJUCBhZGRyZXNzLCBldmVuIGlmIHRoZQorCSAgICBhZGRyZXNzZXMgYXJlIGFzc2lnbmVkIGluZGlyZWN0bHkgdmlhIGEgaG9zdG5hbWUgYW5kCisJICAgIC9ldGMvaG9zdHMuCisKKwkgICAgSW5jbHVkZSBhICJzZXJ2ZXIgaWRlbnRpZmllciIgaW4gREhDUE5BSyByZXBsaWVzLCBhcworCSAgICByZXF1aXJlZCBieSBSRkMyMTMxLgorCisJICAgIEFkZGVkIG1ldGhvZCAgc3VwcG9ydCBmb3IgREJ1cworCSAgICAoaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvU29mdHdhcmUvZGJ1cykKKwkgICAgVGhpcyBpcyBhIHN1cGVyaW9yIHdheSB0byByZS1jb25maWd1cmUgZG5zbWFzcSBvbi10aGUtZmx5CisJICAgIHdpdGggZGlmZmVyZW50IHVwc3RyZWFtIG5hbWVzZXJ2ZXJzLCBhcyB0aGUgaG9zdCBtb3ZlcworCSAgICBiZXR3ZWVuIG5ldHdvcmtzLiBEQnVzIHN1cHBvcnQgbXVzdCBiZSBlbmFibGVkIGluCisJICAgIHNyYy9jb25maWcuaCBhbmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsIGF0IHRoaXMKKwkgICAgcG9pbnQuIFNlZSBEQnVzLWludGVyZmFjZSBmb3IgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlCisJICAgIERCdXMgbWV0aG9kIGNhbGxzIHN1cHBvcnRlZC4KKworCSAgICBBZGRlZCBpbmZvcm1hdGlvbiB0byB0aGUgRkFRIGFib3V0IHNldHRpbmcgdGhlIEROUyBkb21haW4KKwkgICAgaW4gd2luZG93cyBYUCBhbmQgTWFjIE9TIFgsIHRoYW5rcyB0byBSaWNrIEh1bGwuCisKKwkgICAgQWRkZWQgc2FuaXR5IGNoZWNrIHRvIHJlc29sdi5jb25mIHBvbGxpbmcgY29kZSB0byBjb3BlCisJICAgIHdpdGggYmFja3dhcmRzLW1vdmluZyBjbG9ja3MuIFRoYW5rcyB0byBMZW9uYXJkbyBDYW5kdWNjaQorCSAgICBmb3IJaGVscCB3aXRoIHRoaXMuCisKKwkgICAgSGFuZGxlIHNvLWNhbGxlZCAiQS1mb3ItQSIgcXVlcmllcywgd2hpY2ggYXJlIHF1ZXJpZXMgZm9yCisJICAgIHRoZSBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCBhIG5hbWUgd2hpY2ggaXMgYWxyZWFkeSBhCisJICAgIGRvdHRlZC1xdWFkIGFkZHJlc3MuIFRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZQorCSAgICByZXNvbHZlciBjb2RlLCBidXQgc29tZXRpbWVzIGFyZW4ndCBhbmQgdGhlcmUncyBubyBwb2ludAorCSAgICBpbiBmb3J3YXJkaW5nIHRoZW0uCisKKwkgICAgQWRkZWQgIm5vLWRoY3AtaW50ZXJmYWNlIiBvcHRpb24gdG8gZGlzYWJsZSBESENQIHNlcnZpY2UKKyAgICAgICAgICAgIG9uIGFuIGludGVyZmFjZSwgd2hpbHN0IHN0aWxsIHByb3ZpZGluZyBETlMuCisKKwkgICAgRml4IGZvcm1hdC1zdHJpbmcgcHJvYmxlbSAtIGNvbmZpZyBmaWxlIG5hbWVzIGdldCBwYXNzZWQKKwkgICAgdG8gZnByaW50ZiBhcyBhIGZvcm1hdCBzdHJpbmcsIHNvICUgY2hhcmFjdGVycyBjb3VsZCBjYXVzZQorCSAgICBjcmFzaGVzLiBUaGFua3MgdG8gUm9iIEhvbGxhbmQgZm9yIHNsZXV0aGluZyB0aGF0IG9uZS4KKworCSAgICBGaXhlZCBtdWx0aXBsZSBjb21waWxlciB3YXJuaW5ncyBmcm9tIGdjYyA0LiBUaGFua3MgdG8gCisJICAgIFRpbSBDdXR0cyBmb3IgdGhlIHJlcG9ydC4KKworCSAgICBTZW5kIHRoZSBob3N0bmFtZSBvcHRpb24gb24gREhDUCBvZmZlciBtZXNzYWdlcyBhcyB3ZWxsIGFzCisJICAgIERIQ1AgYWNrIG1lc3NhZ2VzLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBSaW8gRGlnaXRhbCAKKwkgICAgQXVkaW8gUmVjZWl2ZXIuIFRoYW5rcyB0byBSb24gRnJlZGVyaWNrIGZvciB0aGUgcGF0Y2guCisgCisgICAgICAgICAgICBBZGQgJ2QnIChmb3IgZGF5KSBhcyBhIHBvc3NpYmxlIHRpbWUgbXVsdGlwbGllciBpbiBsZWFzZSAKKwkgICAgdGltZSBzcGVjaWZpY2F0aW9ucy4gVGhhbmtzIHRvIE1pY2hhZWwgRGVlZ2FuLgorCisJICAgIE1ha2UgcXVvdGluZyBzdXBwcmVzcyByZWNvZ25pdGlvbiBvZiBJUCBhZGRyZXNzZXMsIHNvCisJICAgIGRoY3Atb3B0aW9uPTY2LDEuMi4zLjQgbm93IG1lYW5zIHNvbWV0aGluZyBkaWZmZXJlbnQgdG8KKyAgICAgICAgICAgIGRoY3Atb3B0aW9uPTY2LCIxLjIuMy40Iiwgd2hpY2ggc2V0cyB0aGUgb3B0aW9uIHRvIGEKKwkgICAgc3RyaW5nIHZhbHVlLiBUaGFua3MgdG8gQnJpYW4gTWFjYXVsZXkgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEZpeGVkIHRoZSBvcHRpb24gcGFyc2luZyBjb2RlIHRvIGF2b2lkIHNlZ2ZhdWx0cyBmcm9tIHNvbWUKKwkgICAgaW52YWxpZCBjb25maWd1cmF0aW9ucy4gVGhhbmtzIHRvIFdvb2tleSBmb3Igc3BvdHRpbmcgdGhhdCBvbmUuCisgCisgICAgICAgICAgICBQcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIGNvbXBpbGUtdGltZSBvcHRpb25zIHdlcmUgCisJICAgIHNlbGVjdGVkLCBib3RoIGluIHRoZSBsb2cgYXQgc3RhcnR1cCBhbmQgYXMgcGFydCBvZiB0aGUgb3V0cHV0IAorICAgICAgICAgICAgZnJvbSBkbnNtYXNxIC0tdmVyc2lvbi4gVGhhbmtzIHRvIERpcmsgU2NoZW5rZXdpdHogZm9yIAorICAgICAgICAgICAgdGhlIHN1Z2dlc3Rpb24uIAorCisJICAgIEZpeCBwYXRoYWxvZ2ljYWwgYmVoYXZpb3VyIHdoZW4gYSBicm9rZW4gY2xpZW50IGtlZXBzIHNlbmRpbmcKKyAgICAgICAgICAgIERIQ1BESVNDT1ZFUiBtZXNzYWdlcyByZXBlYXRlZGx5IGFuZCBmYXN0LiBCZWNhdXNlIGRlYWxpbmcgd2l0aAorICAgICAgICAgICAgZWFjaCBvZiB0aGVzZSB0YWtlcyBhIGZldyBzZWNvbmRzLCAoYmVjYXVzZSBvZiB0aGUgcGluZykgdGhlbiBhIAorCSAgICBxdWV1ZSBvZiBESENQIHBhY2tldHMgY291bGQgYnVpbGQgdXAuIE5vdywgdGhlIHJlc3VsdHMgb2YgYSBwaW5nIAorICAgICAgICAgICAgdGVzdCBhcmUgYXNzdW1lZCB0byBiZSB2YWxpZCBmb3IgMzAgc2Vjb25kcywgc28gcmVwZWF0ZWQgd2FpdHMgYXJlCisgICAgICAgICAgICBub3QgcmVxdWlyZWQuIFRoYW5rcyB0byBMdWNhIExhbmRpIGZvciBmaW5kaW5nIHRoaXMuCisKKwkgICAgQWxsb3cgREhDUElORk9STSByZXF1ZXN0cyB3aXRob3V0IGhhcmR3YXJlIGFkZHJlc3MKKwkgICAgaW5mb3JtYXRpb24uIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYnkgc29tZSBicm93c2VycywgbG9va2luZworCSAgICBmb3IgcHJveHkgaW5mb3JtYXRpb24uIFRoYW5rcyB0byBTdGFubGV5IEphZGRvZSBmb3IgdGhlCisJICAgIGJ1ZyByZXBvcnQgb24gdGhhdC4KKworCSAgICBBZGQgc3VwcG9ydCBvZiB0aGUgImNsaWVudCBGUUROIiBESENQIG9wdGlvbi4gSWYgcHJlc2VudCwKKwkgICAgdGhpcyBpcyB1c2VkIHRvIGFsbG93IHRoZSBjbGllbnQgdG8gdGVsbCBkbnNtYXNxIGl0cyBuYW1lLAorCSAgICBpbiBwcmVmZXJlbmNlIHRvIChtaXMpdXNpbmcgdGhlIGhvc3RuYW1lIG9wdGlvbi4gU2VlIAorICAgICAgICAgICAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvd2cvZGhjL2RyYWZ0LWlldGYtZGhjLWZxZG4tb3B0aW9uL1wKKyAgICAgICAgICAgICAgICBkcmFmdC1pZXRmLWRoYy1mcWRuLW9wdGlvbi0xMC50eHQKKyAgICAgICAgICAgIGZvciBkZXRhaWxzIG9mIHRoZSBkcmFmdCBzcGVjLgorCisJICAgIEFkZGVkIHN0YXJ0dXAgc2NyaXB0cyBmb3IgTWFjT1MgWCBUaWdlci9QYW50aGVyIHRvIHRoZSAKKyAgICAgICAgICAgIGNvbnRyaWIgY29sbGVjdGlvbi4gVGhhbmtzIHRvIFRpbSBDdXR0cy4KKworCSAgICBUd2VhayBESENQIG5ldHdvcmsgc2VsZWN0aW9uIHNvIHRoYXQgY2xpZW50cyB3aGljaCB0dXJuIHVwCisJICAgIG9uIG91ciBuZXR3b3JrIGluIFJFQklORElORyBzdGF0ZSBhbmQgd2l0aCBhIGxlYXNlIGZvciBhCisJICAgIGZvcmVpZ24gbmV0d29yayB3aWxsIGdldCBhIE5BSyByZXNwb25zZS4gVGhhbmtzIHRvIERhbgorCSAgICBTaGVjaHRlciBmb3Igd29yayBvbiB0aGlzIGFuZCBhbiBpbml0aWFsIHBhdGNoIGFuZCB0aGFua3MKKwkgICAgdG8gR3lvcmd5IEZhcmthcyBmb3IgZnVydGhlciB0ZXN0aW5nLgorCisJICAgIEZpeCBETlMgcXVlcnkgZm9yd2FyZGluZyBmb3IgZW1wdHkgcXVlcmllcyBhbmQgZm9yd2FyZAorCSAgICBxdWVyaWVzIGV2ZW4gd2hlbiB0aGUgcmVjdXJzaW9uLWRlc2lyZWQgYml0IGlzIGNsZWFyLiBUaGlzCisJICAgIGFsbG93cyAiZGlnICt0cmFjZSIgdG8gd29yay4gUHJvYmxlbSByZXBvcnQgZnJvbSBVd2UKKwkgICAgR2Fuc2VydC4KKworCSAgICBBZGRlZCAiY29uc3QiIGRlY2xhcmF0aW9ucyB3aGVyZSBhcHByb3ByaWF0ZSwgdGhhbmtzIHRvCisJICAgIEFuZHJlYXMgTW9ociBmb3IgdGhlIHBhdGNoLgorCisJICAgIEFkZGVkIC0tYm9vdHAtZHluYW1pYyBvcHRpb24gYW5kIGFzc29jaWF0ZWQKKwkgICAgZnVuY3Rpb25hbGl0eS4gVGhhbmtzIHRvIEpvc2VmIFdvbGYgZm9yIHRoZSBzdWdnZXN0aW9uLgorIAordmVyc2lvbiAyLjI0CisgICAgICAgICAgICBVcGRhdGVkIGNvbnRyaWIvb3BlbnZwbi9kbnNtYXNxLnBhdGNoIGZyb20gSm9zZXBoIFRhdGUuCisKKwkgICAgVHdlYWtlZCBESENQIE5BSyBjb2RlLCBhIERIQ1AgTkFLIGlzIG5vdyB1bmljYXN0IGFzIGEKKwkgICAgZmFsbGJhY2sgaW4gY2FzZXMgd2hlcmUgYSBicm9hZGNhc3QgaXMgZnV0aWxlOiBuYW1lbHkgaW4KKwkgICAgcmVzcG9uc2UgdG8gYSB1bmljYXN0IFJFUVVFU1QgZnJvbSBhIG5vbi1sb2NhbCBuZXR3b3JrCisJICAgIHdoaWNoIHdhcyBub3Qgc2VudCB2aWEgYSByZWxheS4KKworCSAgICBTbGlnaHRseSBjaGFuZ2VkIHRoZSBzZW1hbnRpY3Mgb2YgZG9tYWluIG1hdGNoaW5nIGluCisJICAgIC0tc2VydmVyIGFuZCAtLWFkZHJlc3MgY29uZmlncy4gLS1zZXJ2ZXI9L2RvbWFpbi5jb20vIHN0aWxsCisJICAgIG1hdGNoZXMgZG9tYWluLmNvbSBhbmQgc3ViLmRvbWFpbi5jb20gYnV0IGRvZXMgbm90IAorCSAgICBub3cgbWF0Y2ggbmV3ZG9tYWluLmNvbSBUaGUgc2VtYW50aWNzIG9mIAorICAgICAgICAgICAgLS1zZXJ2ZXI9Ly5kb21haW4uY29tLyBhcmUgdW5jaGFuZ2VkLiAKKwkgICAgVGhhbmtzIHRvIENocmlzIEJsYWlzZSBmb3IgdGhlIHBhdGNoLgorCisJICAgIEFkZGVkIGJhY2t3YXJkcy1jb21wYXRpYmxlIGludGVybmF0aW9uYWxpc2F0aW9uIHN1cHBvcnQuCisJICAgIFRoZSBleGlzdGluZyBtYWtlIHRhcmdldHMsIChhbGwsIGRuc21hc3EsIGluc3RhbGwpIHdvcmsgYXMKKwkgICAgYmVmb3JlLiBOZXcgb25lcyAoYWxsLWkxOG4sIGFuZCBpbnN0YWxsLWkxOG4pIGFkZCBnZXR0ZXh0LgorCSAgICBUaGUgdHJhbnNsYXRpb25zIGxpdmUgaW4gcG8vIFRoZXJlIGFyZSBub3QgdG9vIG1hbnkKKwkgICAgc3RyaW5ncywgc28gaWYgYW55Ym9keSBjYW4gcHJvdmlkZSB0cmFuc2xhdGlvbnMgKGFuZCBmb3IKKwkgICAgdGhlIG1hbnBhZ2UuLi4uKSBwbGVhc2Ugc2VuZCB0aGVtIGluLgorCisJICAgIFR3ZWFrIGJlaGF2aW91ciBvbiByZWNlaXB0IG9mIFJFRlVTRUQgb3IgU0VSVkZBSUwgcmNvZGVzLAorCSAgICBub3cgdGhlIHF1ZXJ5IGdldHMgcmV0cmllZCBvbiBhbGwgc2VydmVycyBiZWZvcmUgcmV0dXJuaW5nCisJICAgIHRoZSBlcnJvciB0byB0aGUgc291cmNlIG9mIHRoZSBxdWVyeS4gVGhhbmtzIHRvIEphdmllcgorCSAgICBLb2hlbiBmb3IgdGhlIHJlcG9ydC4KKyAKKwkgICAgQWRkZWQgUG9saXNoIHRyYW5zbGF0aW9uIC0gdGhhbmtzIHRvIFRvbWFzeiBTb2NoYW5za2kuCisKKwkgICAgQ2hhbmdlZCBkZWZhdWx0IG1hbnBhZ2UgaW5zdGFsbCBsb2NhdGlvbiBmcm9tIC91c3IvbWFuIAorCSAgICB0byAvdXNyL3NoYXJlL21hbiAKKworCSAgICBBZGRlZCBTcGFuaXNoIHRyYW5zbGF0aW9uIC0gdGhhbmtzIHRvIENocmlzdG9waGVyIENoYXRoYW0uCisKKwkgICAgTG9nIGEgd2FybmluZyB3aGVuIGEgREhDUCBwYWNrZXQgaXMgdHJ1bmNhdGVkIGR1ZSB0byBsYWNrCisJICAgIG9mIHNwYWNlLiAoVGhhbmtzIHRvIE1pY2hhZWwgV2VsbGUgZm9yIHRoZSBwcm9tcHQgdG8gZG8KKwkgICAgdGhpcy4pCisJICAgIAorCSAgICBBZGRlZCBGcmVuY2ggdHJhbnNsYXRpb24gLSB0aGFua3MgdG8gTGlvbmVsIFRyaWNvbi4KKworCSAgICBBZGRlZCBJbmRvbmVzaWFuIHRyYW5zbGF0aW9uIC0gdGhhbmtzIHRvIFNhbG1hbiBBUy4KKworCSAgICBUd2Vha2VkIHRoZSBuZXRsaW5rIGNvZGUgdG8gY29wZSB3aXRoIGludGVyZmFjZSBicm9hZGNhc3QKKwkgICAgYWRkcmVzcyBub3Qgc2V0LCBvciBzZXQgdG8gMC4wLjAuMC4KKworCSAgICBGaXhlZCBwcm9ibGVtIGFzc2lnbmluZyBmaXhlZCBhZGRyZXNzZXMgdG8gaG9zdHMgd2hlbiBtb3JlCisJICAgIHRoYW4gb25lIGRoY3AtcmFuZ2UgaXMgYXZhaWxhYmxlLiBUaGFua3MgdG8gU29yaW4gUGFuY2EKKwkgICAgZm9yIGhlbHAgY2hhc2luZyB0aGlzIGRvd24uCisKKwkgICAgQWRkZWQgbW9yZSBleHBsaWN0IGVycm9yIG1lc2FnZXMgdG8gdGhlIGhvc3RzIGZpbGUgYW5kCisJICAgIGV0aGVycyBmaWxlIHJlYWRpbmcgY29kZS4gTWFya3VzIEthaXNlcnN3ZXJ0aCBzdWZmZXJlZCB0bworCSAgICBtYWtlIHRoaXMgaGFwcGVuLgorCisJICAgIEVuc3VyZSB0aGF0IGEgaG9zdG5hbWUgc3VwcGxpZWQgYnkgYSBESENQIGNsaWVudCBjYW4gbmV2ZXIKKwkgICAgb3ZlcnJpZGUgb25lIGNvbmZpZ3VyZWQgb24gdGhlIHNlcnZlci4gUHJldmlvdXNseSwgYW55CisJICAgIGhvc3QgY2xhaW1pbmcgYSBuYW1lIHdvdWxkIGJlIGdpdmVuIGl0LCBldmVuIGlmIHRoYXQKKwkgICAgb3Zlci1yb2RlIGEgZGhjcC1ob3N0IGRlY2xhcmF0aW9uLCBsZWFkaW5nIHRvIHBvdGVudGlhbGx5IAorICAgICAgICAgICAgY29uZnVzaW5nIHNpdHVhdGlvbnMuCisKKwkgICAgQWRkZWQgU2xhY2t3YXJlIHBhY2thZ2UtYnVpbGQgc3R1ZmYgaW50byBjb250cmliLyBUaGUgaTE4bgorCSAgICBlZmZvcnQgYnJva2UgdGhlIGN1cnJlbnQgc2NyaXB0cywgYW5kIHdvcmtpbmcgb25lcyB3ZXJlCisJICAgIG5lZWRlZCBmb3IgdGVzdGluZywgc28gdGhleSBlbmRlZCB1cCBoZXJlIHJhdGhlciB0aGFuIG1ha2UKKwkgICAgUGF0IHJlLWludmVudCB0aGUgd2hlZWwuCisJICAgIAorCSAgICBBZGRlZCBSb21hbmlhbiB0cmFuc2xhdGlvbiwgdGhhbmtzIHRvIFNvcmluIFBhbmNhIGZvcgorCSAgICB0aGF0LgorCit2ZXJzaW9uIDIuMjUKKyAgICAgICAgICAgIEZpeGVkIFJlZEhhdCBzcGVjIGZpbGUgZm9yIEZDNCAtIHRoYW5rcyB0byBXZXJuZXIgSG9lbHpsCisgICAgICAgICAgICBhbmQgQW5kcmV3IEJpcmQuCisKKyAgICAgICAgICAgIEZpeGVkIFN1c2Ugc3BlYyBmaWxlIC0gdGhhbmtzIHRvIFN0ZXZlbiBTcHJpbmdsLgorCisJICAgIEZpeGVkIERIQ1AgYnVnIHdoZW4gdHdvIGRpc3RpY3Qgc3VibmV0cyBhcmUgb24gdGhlIHNhbWUKKwkgICAgcGh5c2ljYWwgaW50ZXJmYWNlLiBUaGFua3MgdG8gUGF3ZWwgWmF3b3JhIGZvciBmaW5kaW5nCisJICAgIHRoaXMgYW5kIHN1Z2dlc3RpbmcgdGhlIGZpeC4KKworCSAgICBBZGRlZCBsb2dnaW5nIHRvIG1ha2UgaXQgZXhwbGljaXQgd2hlbiBkbnNtYXNxIGZhbGxzIGJhY2sKKwkgICAgZnJvbSB1c2luZyBSVC1uZXRsaW5rIHNvY2tldHMgdG8gdGhlIG9sZCBpb2N0bCBBUEkgZm9yCisJICAgIGdldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgaW50ZXJmYWNlcy4gRG9pbmcgdGhpcworCSAgICBjb21wbGV0ZWx5IHNpbGVudGx5IG1hZGUgcmVtb3RlIGRlYnVnZ2luZyBoYXJkLgorCisJICAgIE1lcmdlZCB1Y2xpYmMgYnVpbGQgZml4ZXMgZnJvbSB0aGUgT3BlbldSVCBwYWNrYWdlIGludG8KKwkgICAgc3JjL2NvbmZpZy5oIAorCisJICAgIEFkZGVkIE5vcndlZ2lhbiB0cmFuc2xhdGlvbiAtIHRoYW5rcyB0byBKYW4gRXJpayBBc2tpbGR0LgorCit2ZXJzaW9uIDIuMjYKKwkgICAgRml4ZWQgU3VTZSBycG0gcGF0Y2ggcHJvYmxlbSAtIHRoYW5rcyB0byBTdGV2ZW4gU3ByaW5nbC4KKworCSAgICBGaXhlZCBjcmFzaCB3aGVuIGF0dGVtcHRpbmcgdG8gc2VuZCBhIERIQ1AgTkFLIHRvIGEgaG9zdAorCSAgICB3aGljaCBiZWxpZXZlcyBpdCBoYXMgYSBsZWFzZSBvbiBhbiB1bmtub3duCisJICAgIG5ldHdvcmsuIFRoYW5rcyB0byBMdXR6IFByZXNzbGVyIGZvciB0aGUgYnVnIHJlcG9ydCBhbmQKKwkgICAgcGF0Y2guCisKK3ZlcnNpb24gMi4yNworCSAgICBUd2Vha2VkIERIQ1AgYmVoYXZpb3VyIHdoZW4gYSBjbGllbnQgYXR0ZW1wdHMgdG8gcmVuZXcgYSBsZWFzZQorICAgICAgICAgICAgd2hpY2ggZG5zbWFzcSBkb2Vzbid0IGtub3cgYWJvdXQuIFByZXZpb3VzbHkgdGhhdCB3b3VsZCBhbHdheXMKKyAgICAgICAgICAgIHJlc3VsdCBpbiBhIERIQ1BOQUsuIE5vdywgaW4gZGhjcC1hdXRob3JpdGF0aXZlIG1vZGUsIHRoZQorICAgICAgICAgICAgbGVhc2Ugd2lsbCBiZSBjcmVhdGVkLCBpZiBpdCdzIGxlZ2FsLiBUaGlzIG1ha2VzIGRuc21hc3Egd29yaworICAgICAgICAgICAgYmV0dGVyIGlmIHRoZSBsZWFzZSBkYXRhYmFzZSBpcyBsb3N0LCBmb3IgZXhhbXBsZSBvbiBhbiBPcGVuV1JUCisJICAgIHN5c3RlbSB3aGljaCByZWJvb3RzLiBUaGFua3MgdG8gU3RlcGhlbiBSb3NlIGZvciB3b3JrIG9uCisJICAgIHRoaXMuCisKKwkgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gc3VwcG9ydCBSRkMtMzQ0MiBzdHlsZSBkZXN0aW5hdGlvbgorCSAgICBkZXNjcmlwdG9ycyBpbiBkaGNwLW9wdGlvbnMuIFRoaXMgbWFrZXMgY2xhc3NsZXNzIHN0YXRpYworCSAgICByb3V0ZXMgZWFzeSB0byBkbywgZWcgZGhjcC1vcHRpb249MTIxLDE5Mi4xNjguMS4wLzI0LDEuMi4zLjQKKworCSAgICBBZGRlZCBlcnJvci1jaGVja2luZyB0byB0aGUgY29kZSB3aGljaCB3cml0ZXMgdGhlIGxlYXNlCisJICAgIGZpbGUuIElmIHRoaXMgZmFpbHMgZm9yIGFueSByZWFzb24sIGFuIGVycm9yIGlzIGxvZ2dlZCwKKwkgICAgYW5kIGEgcmV0cnkgb2NjdXJzIGFmdGVyIG9uZSBtaW51dGUuIFRoaXMgc2hvdWxkIGltcHJvdmUKKwkgICAgdGhpbmdzIGVnIHdoZW4gYSBmaWxlc3lzdGVtIGlzIGZ1bGwuIFRoYW5rcyB0byBKZW5zIEhvbHplCisJICAgIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCSAgICBGaXhlZCBicmVha2FnZSBvZiB0aGUgIi8jLyBtYXRjaGVzIGFueSBkb21haW4iIGZhY2lsaXR5CisJICAgIHdoaWNoIGhhcHBlbmVkIGluIDIuMjQuIFRoYW5rcyB0byBQZXRlciBTdXJkYSBmb3IgdGhlIGJ1ZworCSAgICByZXBvcnQuCisKKwkgICAgVXNlICJzaXplX3QiIGFuZCAic3NpemVfdCIgdHlwZXMgd2hlcmUgYXBwcm9wcmlhdGUgaW4gdGhlCisJICAgIGNvZGUuCisKKwkgICAgRml4IGJ1Z2d5IENOQU1FIGhhbmRsaW5nIGluIG1peGVkIElQdjQgYW5kIElQdjYKKwkgICAgcXVlcmllcy4gVGhhbmtzIHRvIEFuZHJlYXMgUGVsbWUgZm9yIGhlbHAgZmluZGluZyB0aGF0LgorCisJICAgIEFkZGVkIHNvbWUgY29kZSB0byBhdHRlbXB0IHRvIHJlLXRyYW5zbWl0IEROUyBxdWVyaWVzIHdoZW4gCisJICAgIGEgbmV0d29yayBpbnRlcmZhY2UgY29tZXMgdXAuICBUaGlzIGhlbHBzIG9uIERvRCBsaW5rcywgCisJICAgIHdoZXJlIGZyZXF1ZW50bHkgdGhlIHBhY2tldCB3aGljaCB0cmlnZ2VycyBkaWFsbGluZyBpcworICAgICAgICAgICAgYSBETlMgcXVlcnksIHdoaWNoIHRoZW4gZ2V0cyBsb3N0LiBCeSByZS1zZW5kaW5nLCB3ZSBjYW4gCisJICAgIGF2b2lkIHRoZSBsb29rdXAgZmFpbGluZy4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGFjdGl2ZQorCSAgICB3aGVuIG5ldGxpbmsgc3VwcG9ydCBpcyBjb21waWxlZCBpbiwgYW5kIHRoZXJlZm9yZSBvbmx5CisJICAgIHVuZGVyIExpbnV4LiBUaGFua3MgdG8gSmVhbiBXb2x0ZXIgZm9yIGhlbHAgd2l0aCB0aGlzLgorCisJICAgIFR3ZWFrZWQgdGhlIERIQ1AgdGFnLW1hdGNoaW5nIGNvZGUgdG8gd29yayBjb3JyZWN0bHkgd2l0aAorCSAgICBOT1QtdGFnIGNvbmRpdGlvbnMuIFRoYW5rcyB0byBMdXR6IFByZXNzbGVyIGZvciBmaW5kaW5nCisJICAgIHRoZSBidWcuCisKKwkgICAgR2VuZXJhbGlzZWQgbmV0aWQtdGFnIG1hdGNoaW5nIGluIGRoY3AtcmFuZ2Ugc3RhdGVtZW50cyB0bworCSAgICBhbGxvdyBtb3JlIHRoYW4gb25lIHRhZy4KKworCSAgICBBZGRlZCAtLWRoY3AtbWFjIHRvIGRvIE1BQyBhZGRyZXNzIG1hdGNoaW5nIGluIHRoZSBzYW1lCisJICAgIHdheSBhcyB2ZW5kb3JjbGFzcyBhbmQgdXNlcmNsYXNzIG1hdGNoaW5nLiBBIGdvb2QKKwkgICAgc3VnZ2VzdGlvbiBmcm9tIEx1dHogUHJlc3NsZXIuCisKKwkgICAgQWRkIHdvcmthcm91bmQgZm9yIGJ1Z2d5IGVhcmx5IE1pY3Jvc29mdCBESENQIGNsaWVudHMKKwkgICAgd2hpY2ggbmVlZCB6ZXJvLXRlcm1pbmF0aW9uIGluIHN0cmluZyBvcHRpb25zLgorCSAgICBUaGFua3MgdG8gRmFiaWFubyBQaXJlcyBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwkgICAgR2VuZXJhbGlzZWQgdGhlIERIQ1AgY29kZSB0byBjb3BlIHdpdGggYW55IGhhcmR3YXJlCisJICAgIGFkZHJlc3MgdHlwZSwgYXQgbGVhc3Qgb24gTGludXguICpCU0QgaXMgc3RpbGwgbGltaXRlZCB0bworCSAgICBldGhlcm5ldCBvbmx5LgorCit2ZXJzaW9uIDIuMjgKKyAgICAgICAgICAgIEVsaW1pbmF0ZWQgYWxsIHJhdyBuZXR3b3JrIGFjY2VzcyB3aGVuIHJ1bm5pbmcgb24KKyAgICAgICAgICAgIExpbnV4LiBBbGwgREhDUCBuZXR3b3JrIGFjdGl2aXR5IG5vdyBnb2VzIHRocm91Z2ggdGhlIElQCisgICAgICAgICAgICBzdGFjay4gUGFja2V0IHNvY2tldHMgYXJlIG5vIGxvbmdlciByZXF1aXJlZC4gQXBhcnQgZnJvbQorICAgICAgICAgICAgYmVpbmcgYSBuZWF0IGhhY2ssIHRoaXMgc2hvdWxkIGFsc28gYWxsb3cgREhDUCBvdmVyIElQc2VjCisgICAgICAgICAgICB0byB3b3JrIGJldHRlci4gT24gKkJTRCBhbmQgT1MgWCwgdGhlIG9sZCBtZXRob2Qgb2YgcmF3IG5ldAorICAgICAgICAgICAgYWNjZXNzIHRocm91Z2ggQlBGIGlzIHJldGFpbmVkLgorCisJICAgIFNpbXBsaWZpZWQgYnVpbGQgb3B0aW9ucy4gTmV0d29ya2luZyBpcyBub3cgc2xpbW1lZCBkb3duCisJICAgIHRvIGEgY2hvaWNlIG9mICJsaW51eCIgb3IgIm90aGVyIi4gTmV0bGluayBpcyBhbHdheXMgdXNlZAorCSAgICB1bmRlciBMaW51eC4gU2luY2UgbmV0bGluayBoYXMgYmVlbiBhdmFpbGFibGUgc2luY2UgMi4yCisJICAgIGFuZCBub24tb3B0aW9uYWwgaW4gYW4gSVB2NC1jb25maWd1cmVkICBrZXJuZWwgc2luY2UgMi40LAorCSAgICBhbmQgdGhlIGRuc21hc3EgbmV0bGluayBjb2RlIGlzIG5vdyB3ZWxsIHRlc3RlZCwgdGhpcyAKKwkgICAgc2hvdWxkIHdvcmsgb3V0IGZpbmUuIAorCisJICAgIFJlbW92ZWQgZGVjYXllZCBidWlsZCBzdXBwb3J0IGZvciBsaWJjNSBhbmQgU29sYXJpcy4KKwkgICAgCisJICAgIFJlbW92ZWQgcHNlbGVjdCBjb2RlOiB1c2UgYSBwaXBlIGZvciByYWNlLWZyZWUgc2lnbmFsCisJICAgIGhhbmRsaW5nIGluc3RlYWQsIGFzIHRoaXMgd29ya3MgZXZlcnl3aGVyZS4KKworCSAgICBObyBsb25nZXIgZW5hYmxlIHRoZSBJU0MgbGVhc2VmaWxlIHJlYWRpbmcgY29kZSBpbiB0aGUKKwkgICAgZGlzdHJpYnV0ZWQgc291cmNlcy4gSSBkb3VidCB0aGVyZSBhcmUgbWFueSBwZW9wbGUgbGVmdAorCSAgICB1c2luZyB0aGlzIDEueCBjb21wYXRpYmlsaXR5IGNvZGUuIFRob3NlIHRoYXQgYXJlIHdpbGwKKwkgICAgaGF2ZSB0byBleHBsaWNpdGx5IGVuYWJsZSBpdCBpbiBzcmMvY29uZmlnLmguCisKKwkgICAgRG9uJ3Qgc2VuZCB0aGUgIkRIQ1AgbWF4aW11bSBtZXNzYWdlIHNpemUiIG9wdGlvbiwgZXZlbiBpZiAKKwkgICAgcmVxdWVzdGVkLiBSRkMyMTMxIHNheXMgdGhpcyBpcyBhICJNVVNUIE5PVCIuCisKKwkgICAgU3VwcG9ydCBsYXJnZXItdGhhbi1taW5pbXVtIERIQ1AgbWVzc2FnZS4gRG5zbWFzcSBpcyBub3cKKwkgICAgaGFwcHkgdG8gZ2V0IGxhcmdlciB0aGFuIDU3Ni1ieXRlIERIQ1AgbWVzc2FnZXMsIGFuZCB3aWxsCisJICAgIHJldHVybiBsYXJnZSBtZXNzYWdlcywgaWYgcGVybWl0dGVkIGJ5IHRoZSAibWF4aW11bQorCSAgICBtZXNzYWdlIHNpemUiIG9wdGlvbiBvZiB0aGUgbWVzc2FnZSB0byB3aGljaCBpdCBpcworCSAgICByZXBseWluZy4gVGhlcmUncyBub3cgYW4gYXJiaXRyYXJ5IHNhbml0eSBsaW1pdCBvZiAxNjM4NAorCSAgICBieXRlcy4KKworCSAgICBBZGRlZCAtLW5vLXBpbmcgb3B0aW9uLiBUaGlzIGZpeGVzIGFuIFJGQzIxMzEgIlNIT1VMRCIuCisKKwkgICAgQnVpbGRpbmcgb24gdGhlIDIuMjcgTUFDLWFkZHJlc3MgY2hhbmdlcywgYWxsb3cgY2xpZW50cyB0byAKKwkgICAgcHJvdmlkZSBubyBNQUMgYWRkcmVzcyBhdCBhbGwsIHJlbHlpbmcgb24gdGhlIGNsaWVudC1pZCBhcworCSAgICBhIHVuaXF1ZSBpZGVudGlmaWVyLiBUaGlzIHNob3VsZCBtYWtlIHRoaW5ncyBsaWtlIERIQ1AgZm9yCisJICAgIFVTQiBjb21lIGVhc2llci4KKworCSAgICBGaXhlZCByZWdyZXNzaW9uIGluIG5ldGxpbmsgY29kZSB1bmRlciAyLjIueCBrZXJuZWxzIHdoaWNoIAorCSAgICBvY2N1cnJlZCBpbiAyLjI3LiBFcmlrIEphbiBUcm9tcCBpcyB0aGUgdmludGFnZSBrZXJuZWwgZmFuIAorCSAgICB3aG8gZm91bmQgdGhpcy4gUC5TLiBJdCBsb29rcyBsaWtlIHRoaXMgIm5ldGxpbmsgYmluZDoKKwkgICAgcGVybWlzc2lvbiBkZW5pZWQiIHByb2JsZW0gb2NjdXJlZCBpbiBrZXJuZWxzIGF0IGxlYXN0IGFzCisJICAgIGxhdGUgYSAyLjQuMTguIEdvb2QgaW5mb3JtYXRpb24gZnJvbSBBbGFpbiBSaWNob3V4LgorCisJICAgIEFkZGVkIGEgd2FybmluZyB3aGVuIGl0J3MgaW1wb3NzaWJsZSB0byBnaXZlIGEgaG9zdCBpdHMKKwkgICAgY29uZmlndXJlZCBhZGRyZXNzIGJlY2F1c2UgdGhlIGFkZHJlc3MgaXMgbGVhc2VkCisJICAgIGVsc2V3aGVyZS4gIEEgc2Vuc2libGUgc3VnZ2VzdGlvbiBmcm9tIE1pcmNlYSBCYXJkYWMuCisKKwkgICAgQWRkZWQgbWluaW1hbCBzdXBwb3J0IGZvciBSRkMgMzA0NiBESENQIHJlbGF5IGFnZW50LWlkCisJICAgIG9wdGlvbnMuIFRoZSBESENQIHNlcnZlciBub3cgZWNob2VzIHRoZXNlIGJhY2sgdG8gdGhlCisJICAgIHJlbGF5LCBhcyByZXF1aXJlZCBieSB0aGUgUkZDLiBBbHNvLCBSRkMgMzUyNyBsaW5rIHNlbGVjdGlvbiAKKwkgICAgc3ViLW9wdGlvbnMgYXJlIGhvbm91cmVkLgorCisJICAgIFNldCB0aGUgcHJvY2VzcyAiZHVtcGFibGUiIGZsYWcgd2hlbiBydW5uaW5nIGluIGRlYnVnCisJICAgIG1vZGU6IHRoaXMgbWFrZXMgZ2V0dGluZyBjb3JlIGR1bXBzIGZyb20gcm9vdCBwcm9jZXNzZXMKKwkgICAgbXVjaCBlYXNpZXIuCisJICAgIAorCSAgICBGaXhlZCBvbmUtYnl0ZSBidWZmZXIgb3ZlcmZsb3cgd2hpY2ggc2VlbXMgdG8gb25seSBjYXVzZQorCSAgICBwcm9ibGVtcyB3aGVuIGRuc21hc3EgaXMgbGlua2VkIHdpdGggdWNsaWJjLiBUaGFua3MgdG8KKwkgICAgRXJpYyBIb3VzZSBhbmQgRXJpYyBTcGFrbWFuIGZvciBoZWxwIGluIGNoYXNpbmcgdGhpcyBkb3duLgorCisJICAgIFRvbGVyYXRlIGNvbmZpZ3VyYXRpb24gc2NyZXd1cHMgd2hpY2ggbGVhZCB0byB0aGUgREhDUAorCSAgICBzZXJ2ZXIgYXR0ZW1waW5nIHRvIGFsbG9jYXRlIGl0cyBvd24gYWRkcmVzcyB0byBhCisJICAgIGNsaWVudDsgZWcgc2V0dGluZyB0aGUgd2hvbGUgc3VibmV0IHJhbmdlIGFzIGEgREhDUAorCSAgICByYW5nZS4gQWRkcmVzc2VzIGluIHVzZSBieSB0aGUgc2VydmVyIGFyZSBub3cgZXhjbHVkZWQKKwkgICAgZnJvbSB1c2UgYnkgY2xpZW50cy4KKworCSAgICBEaWQgc29tZSB0aGlua2luZyBhYm91dCBIQVZFX0JST0tFTl9SVEMgbW9kZSwgYW5kIG1hZGUgaXQKKwkgICAgbXVjaCBzaW1wbGVyIGFuZCBiZXR0ZXIuIFRoZSBrZXkgaXMgdG8ganVzdCBrZWVwIGxlYXNlCisJICAgIGxlbmd0aHMgaW4gdGhlIGxlYXNlIGZpbGUuIFNpbmNlIHRoZXNlIG5vcm1hbGx5IG5ldmVyCisJICAgIGNoYW5nZSwgZXZlbiBhcyB0aGUgbGVhc2UgaXMgcmVuZXdlZCwgdGhlIGxlYXNlIGZpbGUgbmV2ZXIKKwkgICAgbmVlZHMgdG8gY2hhbmdlIGV4Y2VwdCB3aGVuIG1hY2hpbmVzIGFycml2ZSBvbiB0aGUgbmV0d29yaworCSAgICBvciBsZWF2ZS4gVGhpcyBlbGltaW5hdGVzIHRoZSBjb2RlIGZvciB0aW1lZCB3cml0ZXMsIGFuZAorCSAgICByZWR1Y2VzIHRoZSBhbW91bnQgb2Ygd2VhciBvbiBhIGZsYXNoIGZpbGVzeXN0ZW0gdG8gdGhlCisJICAgIGFic29sdXRlIG1pbmltdW0uIEFsc28gcmUtZGlkIHRoZSBiYXNpYyB0aW1lIGZ1bmN0aW9uIGluCisJICAgIHRoaXMgbW9kZSB0byB1c2UgdGhlIHBvcnRhYmxlIHRpbWVzKCksIHJhdGhlciB0aGFuIHBhcnNpbmcKKwkgICAgL3Byb2MvdXB0aW1lLgorCisJICAgIEJlbGlldmUgdGhlIHNvdXJjZSBwb3J0IG51bWJlciB3aGVuIHJlcGx5aW5nIHRvIHVuaWNhc3QgCisJICAgIERIQ1AgcmVxdWVzdHMgYW5kIERIQ1AgcmVxdWVzdHMgdmlhIGEgcmVsYXksIGluc3RlYWQgb2YgYWx3YXlzIAorICAgICAgICAgICAgdXNpbmcgdGhlIHN0YW5kYXJkIHBvcnRzLiAgVGhpcyB3aWxsIGFsbG93IHJlbGF5cyBvbiAKKyAgICAgICAgICAgIG5vbi1zdGFuZGFyZCBwb3J0cyBhbmQgREhDUElORk9STSBmcm9tIHVucHJpdmlsZWdlZCBwb3J0cworICAgICAgICAgICAgdG8gd29yay4gVGhlIHNvdXJjZSBwb3J0IHNlbnQgYnkgdW5jb25maWd1cmVkIGNsaWVudHMgaXMgc3RpbGwgCisgICAgICAgICAgICBpZ25vcmVkLCBzaW5jZSB0aGlzIG1heSBiZSB1bnJlbGlhYmxlLiBUaGlzIG1lYW5zIHRoYXQgYSBESENQIAorICAgICAgICAgICAgY2xpZW50IG11c3QgdXNlIHRoZSBzdGFuZGFyZCBwb3J0IHRvIGRvIGZ1bGwgY29uZmlndXJhdGlvbi4KKyAKK3ZlcnNpb24gMi4yOQorCSAgICBGaXhlZCBjb21waWxhdGlvbiBvbiBPcGVuQlNEICh0aGFua3MgdG8gVG9tIEhlbnNlbCBmb3IgdGhlCisJICAgIHJlcG9ydCkuIAorCisJICAgIEZpeGVkIGZhbHNlICJubyBpbnRlcmZhY2UiIGVycm9ycyB3aGVuIC0tYmluZC1pbnRlcmZhY2VzIGlzCisJICAgIHNldCBhbG9uZyB3aXRoIC0taW50ZXJmYWNlPWxvIG9yIC0tbGlzdGVuLWFkZHJlc3MuIFRoYW5rcworCSAgICB0byBQYXVsIFdpc2UgZm9yIHRoZSByZXBvcnQuCisKKwkgICAgVXBkYXRlZCBwYXRjaCBmb3IgU3VTRSBycG0uIFRoYW5rcyB0byBTdGV2ZW4gU3ByaW5nbC4KKworCSAgICBJdCB0dXJucyBvdXQgdGhhdCB0aGVyZSBhcmUgc29tZSBMaW51eCBrZXJuZWwKKwkgICAgY29uZmlndXJhdGlvbnMgd2hpY2ggbWFrZSB1c2luZyB0aGUgY2FwYWJpbGl0eSBzeXN0ZW0KKwkgICAgaW1wb3NzaWJsZS4gSWYgdGhpcyBzaXR1YXRpb24gb2NjdXJzIHRoZW4gY29udGludWUsIHJ1bm5pbmcKKwkgICAgYXMgcm9vdCwgYW5kIGxvZyBhIHdhcm5pbmcuIFRoYW5rcyB0byBTY290dCBXZWhyZW5iZXJnCisJICAgIGZvciBoZWxwIHRyYWNraW5nIHRoaXMgZG93bi4KKwordmVyc2lvbiAyLjMwCisgICAgICAgICAgICBGaXhlZCBjcmFzaCB3aGVuIGEgREhDUCBjbGllbnQgcmVxdWVzdGVkIGEgYnJvYWRjYXN0CisgICAgICAgICAgICByZXBseS4gVGhpcyBwcm9ibGVtIHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gMi4yOC4KKwkgICAgVGhhbmtzIHRvIFNhbmRyYSBEZWtrZXJzIGZvciB0aGUgYnVnIHJlcG9ydC4KKwordmVyc2lvbiAyLjMxCisJICAgIEFkZGVkIC0tZGhjcC1zY3JpcHQgb3B0aW9uLiBUaGVyZSBoYXZlIGJlZW4gY2FsbHMgZm9yIHRoaXMKKwkgICAgZm9yIGEgbG9uZyB0aW1lIGZyb20gbWFueSBnb29kIHBlb3BsZS4gRmFiaW8gTXV6emkgZ2V0cworCSAgICB0aGUgcHJpemUgZm9yIGZpbmFsbHkgY29udmluY2luZyBtZS4KKworCSAgICBBZGRlZCBleGFtcGxlIGRidXMgY29uZmlnIGZpbGUgYW5kIG1vdmVkIGRidXMgc3R1ZmYgaW50bworCSAgICBpdHMgb3duIGRpcmVjdG9yeS4KKworCSAgICBSZW1vdmVkIGhvcnJpYmx5IG91dGRhdGVkIFJlZGhhdCBSUE0gYnVpbGQgZmlsZXMuIFRoZXNlCisJICAgIGFyZSBvYnNvbGV0ZSBub3cgdGhhdCBkbnNtYXNxIGluIGluIEZlZG9yYSBleHRyYXMuIFRoYW5rcworCSAgICB0byBQYXRyaWNrICJKaW1hIiBMYXVnaHRvbiwgdGhlIEZlZG9yYSBwYWNrYWdlCisJICAgIG1haW50YWluZXIuCisKKwkgICAgQWRkZWQgd29ya2Fyb3VuZCBmb3IgTGludXgga2VybmVsIGJ1Zy4gVGhpcyBtYW5pZmVzdHMKKwkgICAgaXRzZWxmIGFzIGZhaWx1cmUgb2YgREhDUCBvbiBrZXJuZWxzIHdpdGggInN1cHBvcnQgZm9yCisJICAgIGNsYXNzaWNhbCBJUCBvdmVyIEFUTSIgY29uZmlndXJlZC4gVGhhdCBpbmNsdWRlcyBtb3N0CisJICAgIERlYmlhbiBrZXJuZWwgcGFja2FnZXMuIE1hbnkgdGhhbmtzIHRvIEEuIENvc3RhIGFuZAorCSAgICBCZW5qYW1pbiBLdWRyaWEgZm9yIHRoZWlyIGh1Z2UgZWZmb3J0cyBpbiBjaGFzaW5nIHRoaXMKKwkgICAgZG93bi4KKworCSAgICBGb3JjZS1raWxsIGNoaWxkIHByb2Nlc3NlcyB3aGVuIGRuc21hc3EgaXMgc2VudCBhIHNpZ3Rlcm0sCisJICAgIG90aGVyd2lzZSBhbiB1bmNsb3NlZCBUQ1AgY29ubmVjdGlvbiBjb3VsZCBrZWVwIGRuc21hc3EKKwkgICAgaGFuZ2luZyByb3VuZCBmb3IgYSBmZXcgbWludXRlcy4KKworCSAgICBUd2Vha2VkIGNvbmZpZy5oIGxvZ2ljIGZvciB1Y2xpYmMgYnVpbGQuIEl0IHdpbGwgbm93IHBpY2sKKwkgICAgdXAgTU1VIGFuZCBJUFY2IHN0YXR1cyBjb3JyZWN0bHkgb24gZXZlcnkgc3lzdGVtIEkgdGVzdGVkLgorCit2ZXJzaW9uIDIuMzIgCisJICAgIEF0dGVtcHQgYSBiZXR0ZXIgam9iIG9mIHJlcGxhY2luZyBwcmV2aW91cyBjb25maWd1cmF0aW9uCisJICAgIHdoZW4gcmUtcmVhZGluZyAvZXRjL2hvc3RzIGFuZCAvZXRjL2V0aGVycy4gU0lHSFVQIGlzCisJICAgIHN0aWxsIG5vdCBpZGVudGljYWwgdG8gYSByZXN0YXJ0IHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzLAorCSAgICBidXQgaXQgaXMgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBuYW1lLT5NQUMgYWRkcmVzcyBpbgorCSAgICAvZXRjL2V0aGVycyBhbmQgbmFtZS0+SVAgYWRkcmVzcyBpbiAvZXRjL2hvc3RzLgorCisJICAgIEZhbGwgYmFjayB0byBicm9hZGNhc3QgZm9yIERIQ1AgdG8gYW4gdW5jb25maWd1cmVkIGNsaWVudAorCSAgICB3aGVuIHRoZSBNQUMgYWRkcmVzcyBzaXplIGlzIGdyZWF0ZXIgdGhhbiAxNCBieXRlcy4KKworCSAgICBGaXggcHJvYmxlbSBpbiAyLjI4LW9ud2FyZHMgcmVsZWFzZXMgd2hpY2ggYnJlYWtzIEROUyBvbgorCSAgICBNYWMgT1MgWC4gVGhhbmtzIHRvIERvdWcgRmllbGRzIGZvciB0aGUgYnVnIHJlcG9ydCBhbmQKKwkgICAgdGVzdGluZy4KKworCSAgICBBZGRlZCBmaXggdG8gYWxsb3cgY29tcGlsYXRpb24gb24gYzg5LW9ubHkgY29tcGlsZXJzLgorCSAgICBUaGFua3MgdG8gSm9obiBNYXN0d2lqayBmb3IgdGhlIHBhdGNoLgorCSAgIAorCSAgICBUd2VhayByZXNvbHYgZmlsZSBwb2xsaW5nIGNvZGUgdG8gd29yayBiZXR0ZXIgaWYgdGhlcmUgaXMKKwkgICAgYSByYWNlIGJldHdlZW4gdXBkYXRpbmcgdGhlIG10aW1lIGFuZCBmaWxlIGNvbnRlbnRzLiBUaGlzCisJICAgIGlzIG5vdCBub3JtYWxseSBhIHByb2JsZW0sIGJ1dCBpdCBjYW4gYmUgb24gc3lzdGVtcyB3aGljaAorCSAgICByZXBsYWNlIG5hbWVzZXJ2ZXJzIHdoaWxzdCBhY3RpdmUuIFRoZSBjb2RlIG5vdyBjb250aW51ZXMKKwkgICAgdG8gcmVhZCByZXNvbHYuY29uZiB1bnRpbCBpdCBnZXRzIGF0IGxlYXN0IG9uZSB1c2FibGUKKwkgICAgc2VydmVyLiBUaGFua3MgdG8gSG9sZ2VyIE1hdWVybWFubiBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwkgICAgSWYgYSBjbGllbnQgREVDTElORXMgYW4gYWRkcmVzcyB3aGljaCBpcyBhbGxvY2F0ZWQgdG8gaXQKKwkgICAgdmlhIGRoY3AtaG9zdCBvciAvZXRjL2hvc3RzLCBsb2NrIHRoYXQgYWRkcmVzcyBvdXQgb2YgdXNlCisJICAgIGZvciB0ZW4gbWludXRlcywgaW5zdGVhZCBvZiBmb3JldmVyLCBhbmQgbG9nIHdoZW4gaXQncyBub3QKKwkgICAgYmVpbmcgdXNlZCBiZWNhdXNlIG9mIHRoZSBsb2NrLW91dC4gVGhpcyBzaG91bGQgcHJvdmlkZQorCSAgICBsZXNzIHN1cnByaXNpbmcgYmVoYXZpb3VyIHdoZW4gYSBjb25maWd1cmVkIGFkZHJlc3MgY2FuJ3QgYmUKKwkgICAgdXNlZC4gVGhhbmtzIHRvIFBldGVyIFN1cmRhIGFuZCBIZWlueiBEZWluaGFydCBmb3IgaW5wdXQKKwkgICAgb24gdGhpcy4KKworCSAgICBGaXhlZCAqQlNEIERIQ1AgYnJlYWthZ2Ugd2l0aCBvbmx5IHNvbWUKKwkgICAgYXJjaGVzL2NvbXBpbGVycywgZGVwZW5kaW5nIG9uIHN0cnVjdHVyZSBwYWRkaW5nIHJ1bGVzLgorCSAgICBUaGFua3MgdG8gSmViIENhbXBiZWxsIGFuZCBUb20gSGVuc2VsIGZvciBoZWxwIHdpdGggdGhpcy4KKworCSAgICBBZGRlZCAtLWNvbmYtZGlyIG9wdGlvbi4gU3VnZ2VzdGlvbiBmcm9tIEFhcm9uIFR5Z2FydC4KKworCSAgICBBcHBsaWVkIHBhdGNoIGZyb20gQnJlbnQgQ29vayB3aGljaCBhbGxvd3MgbmV0aWRzIGluCisJICAgIGRoY3Atb3B0aW9uIGNvbmZpZ3VyYXRpb24gbGluZXMgdG8gYmUgcHJlZml4ZWQgYnkKKwkgICAgIm5ldDoiLiBUaGlzIGlzIG5vdCByZXF1aXJlZCBieSB0aGUgc3ludGF4LCBidXQgaXQgaXMKKwkgICAgY29uc2lzdGVudCB3aXRoIG90aGVyIGNvbmZpZ3VyYXRpb24gaXRlbXMuCisKKwkgICAgQWRkZWQgLS1sb2ctZmFjaWxpdHkgb3B0aW9uLiBTdWdnZXN0aW9uIGZyb20gRmFiaW8gTXV6emkuCisKKwkgICAgTWFqb3IgdXBkYXRlIHRvIFNwYW5pc2ggdHJhbnNsYXRpb24uIE1hbnkgdGhhbmtzIHRvIENocmlzCisJICAgIENoYXRoYW0uIAorCisJICAgIEZpeGVkIGdjYy00LjEgc3RyaWN0LWFsaWFzIGNvbXBpbGF0aW9uIHdhcm5pbmcuCisKK3ZlcnNpb24gMi4zMworICAgICAgICAgICAgUmVtb3ZlIGJhc2gtc3BlY2lmaWMgc2hlbGxjb2RlIGZyb20gdGhlIE1ha2VmaWxlLgorCisJICAgIEZpeCBicmVha2FnZSB3aXRoIHNvbWUgREhDUCByZWxheSBpbXBsZW1lbnRhdGlvbnMgd2hpY2gKKwkgICAgd2FzIGludHJvZHVjZWQgaW4gMi4yOC4gQmVsaWV2aW5nIHRoZSBzb3VyY2UgcG9ydCBpbgorCSAgICBESENQIHJlcXVlc3RzIGFuZCBzZW5kaW5nIHRoZSByZXBseSB0aGVyZSBpcyBzb21ldGltZXMgYQorCSAgICBiYWQgdGhpbmcgdG8gZG8sIHNvIEkndmUgcmV2ZXJ0ZWQgdG8gYWx3YXlzIHNlbmRpbmcgdG8KKwkgICAgdGhlIHJlbGF5IG9uIHBvcnQgNjguIFRoYW5rcyB0byBEYW5pZWwgSGFtbGluIGFuZCBBbGV4CisJICAgIChhbGRlKSBmb3IgYnVnIHJlcG9ydHMgb24gdGhpcy4KKworCSAgICBNb3ZlZCB0aGUgU3VTZSBwYWNrYWdpbmcgZmlsZXMgdG8gY29udHJpYi4gSSB3aWxsIG5vCisJICAgIGxvbmdlciBhdHRlbXB0IHRvIG1haW50YWluIHRoaXMgaW4gdGhlIHNvdXJjZSB0YXJiYWxsLiBJdAorCSAgICB3aWxsIGJlIGRvbmUgZXh0ZXJuYWxseSwgaW4gdGhlIHNhbWUgd2F5IGFzIHBhY2thZ2luZyBmb3IKKwkgICAgb3RoZXIgZGlzdHJvcy4gU3VzZSBwYWNrYWdlcyBhcmUgYXZhaWxhYmxlIGZyb20gCisJICAgIGZ0cDovL2Z0cC5zdXNlLmNvbS9wdWIvcGVvcGxlL3VnLworCSAgICAKKwkgICAgTWVyZ2VkIHBhdGNoIGZyb20gR2VudG9vIHRvIGhvbm91ciAkTERGTEFHUyBlbnZpcm9ubWVudC4KKworCSAgICBGaXggYnVnIGluIHJlc29sdi5jb25mIHByb2Nlc3Npbmcgd2hlbiBtb3JlIHRoYW4gb25lIGZpbGUKKwkgICAgaXMgYmVpbmcgY2hlY2tlZC4KKworCSAgICBBZGQgLS1kbnMtZm9yd2FyZC1tYXggb3B0aW9uLgorCisJICAgIFdhcm4gaWYgLS1yZXNvbHYtZmlsZSBmbGFncyBhcmUgaWdub3JlZCBiZWNhdXNlIG9mCisJICAgIC0tbm8tcmVzb2x2LiBUaGFua3MgdG8gTWFydGluIEYgS3JhZmZ0IGZvciBzcG90dGluZyB0aGlzCisJICAgIG9uZS4KKworICAgICAgICAgICAgQWRkIC0tbGVhc2VmaWxlLXJvIG9wdGlvbiB3aGljaCBhbGxvd3MgdGhlIHVzZSBvZiBhbiAKKyAgICAgICAgICAgIGV4dGVybmFsIGxlYXNlIGRhdGFiYXNlLiBNYW55IHRoYW5rcyB0byBTdGV2ZSBIb3JiYWNodWsgCisJICAgIGZvciBhc3Npc3RhbmNlIGRldmVsb3BpbmcgdGhpcyBmZWF0dXJlLgorCisJICAgIFByb3ZpZGUgZXh0cmEgaW5mb3JtYXRpb24gdG8gbGVhc2UtY2hhbmdlIHNjcmlwdCB2aWEgaXRzCisJICAgIGVudmlyb25tZW50LiBJZiB0aGUgaG9zdCBoYXMgYSBjbGllbnQtaWQsIHRoZW4KKwkgICAgRE5TTUFTUV9DTElFTlRfSUQgd2lsbCBiZSBzZXQuIEVpdGhlciB0aGUgbGVhc2UgbGVuZ3RoIChpbgorCSAgICBETlNNQVNRX0xFQVNFX0xFTkdUSCkgb3IgbGVhc2UgZXhwaXJ5IHRpbWUgKGluCisJICAgIEROU01BU1FfTEVBU0VfRVhQSVJFUykgd2lsbCBiZSBzZXQsIGRlcGVuZGluZyBvbiB0aGUKKwkgICAgSEFWRV9CUk9LRU5fUlRDIGNvbXBpbGUtdGltZSBvcHRpb24uIFRoaXMgZXh0cmEKKwkgICAgaW5mb3JtYXRpb24gc2hvdWxkIG1ha2UgaXQgcG9zc2libGUgdG8gbWFpbnRhaW4gdGhlIGxlYXNlCisJICAgIGRhdGFiYXNlIGluIGV4dGVybmFsIHN0b3JhZ2Ugc3VjaCBhcyBMREFQIG9yIGEgcmVsYXRpb25hbAorCSAgICBkYXRhYmFzZS4gTm90ZSB0aGF0IHdoaWxlIGxlYXNlZmlsZS1ybyBpcyBzZXQsIHRoZSBzY3JpcHQKKyAgICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIHdpdGggIm9sZCIgIGV2ZW50cyBtb3JlIG9mdGVuLCBzaW5jZSAKKwkgICAgY2hhbmdlcyB0byB0aGUgY2xpZW50LWlkIGFuZCBsZWFzZSBsZW5ndGgKKwkgICAgKEhBVkVfQlJPS0VOX1JUQykgb3IgbGVhc2UgZXhwaXJ5IHRpbWUgKG90aGVyd2lzZSkgCisJICAgIGFyZSBub3cgZmxhZ2dlZC4gCisKKwkgICAgQWRkIGNvbnRyaWIvd3J0Lyogd2hpY2ggaXMgYW4gZXhhbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBhbgorCSAgICBleHRlcm5hbCBwZXJzaXN0ZW50IGxlYXNlIGRhdGFiYXNlIGZvciAqV1JUIGRpc3Ryb3Mgd2l0aCAKKwkgICAgdGhlIG52cmFtIGNvbW1hbmQuCisKKwkgICAgQWRkIGNvbnRyaWIvd3J0L2RoY3BfcmVsZWFzZS5jIHdoaWNoIGlzIGEgc21hbGwgdXRpbGl0eSAKKwkgICAgd2hpY2ggcmVtb3ZlcyBESENQIGxlYXNlcyB1c2luZyBESENQUkVMRUFTRSBvcGVyYXRpb24gaW4KKwkgICAgdGhlIERIQ1AgcHJvdG9jb2wuCisKK3ZlcnNpb24gMi4zNAorCSAgICBUd2VhayBuZXR3b3JrLWRldGVybWluYXRpb24gY29kZSBmb3IgYW5vdGhlciBjb3JuZXIgY2FzZToKKwkgICAgaW4gdGhpcyBjYXNlIGEgaG9zdCBmb3JjZWQgdG8gbW92ZSBiZXR3ZWVuIGRoY3AtcmFuZ2VzIG9uCisJICAgIHRoZSBzYW1lIHBoeXNpY2FsIGludGVyZmFjZS4gVGhhbmtzIHRvIE1hdHRoaWFzIEFuZHJlZS4KKwkgICAgCisJICAgIEltcHJvdmUgaGFuZGxpbmcgb2YgaGlnaCBETlMgbG9hZHMgYnkgdGhyb3R0bGluZyBhY2NlcHRhbmNlIG9mCisJICAgIG5ldyBxdWVyaWVzIHdoZW4gcmVzb3VyY2VzIGFyZSB0aWdodC4gVGhpcyBzaG91bGQgYmUgYQorCSAgICBiZXR0ZXIgcmVzcG9uc2UgdGhhbiB0aGUgImZvcndhcmRpbmcgdGFibGUgZnVsbC4uLiIKKwkgICAgbWVzc2FnZSB3aGljaCB3YXMgbG9nZ2VkIGJlZm9yZS4KKworCSAgICBGaXhlZCBpbnRlcm1pdHRlbnQgaW5maW5pdGUgbG9vcCB3aGVuIHJlLXJlYWRpbmcKKwkgICAgL2V0Yy9ldGhlcnMgYWZ0ZXIgU0lHSFVQLiBUaGFua3MgdG8gRWxkb24gWmllZ2xlciBmb3IgdGhlCisJICAgIGJ1ZyByZXBvcnQuCisKKwkgICAgUHJvdmlkZSBleHRyYSBpbmZvcm1hdGlvbiB0byB0aGUgbGVhc2UtY2hhbmdlIHNjcmlwdDogd2hlbgorCSAgICBhIGxlYXNlIGxvc2VzIGl0cyBob3N0bmFtZSAoYmVjYXVzZSBhIG5ldyBsZWFzZSBjb21lcworCSAgICBhbG9uZyBhbmQgY2xhaW1zIHRoZSBzYW1lIG5ldyksIHRoZSAib2xkIiBhY3Rpb24gaXMgY2FsbGVkIAorCSAgICB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBsZWFzZSwgaWUgbm8gbmFtZS4gVGhlCisJICAgIGNoYW5nZSBpcyB0byBwcm92aWRlIHRoZSBmb3JtZXIgbmFtZSB3aGljaCB0aGUgbGVhc2UgaGFkCisJICAgIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBETlNNQVNRX09MRF9IT1NUTkFNRS4gVGhpcworCSAgICBoZWxwcyBzY3JpcHRzIHdoaWNoIGRvIHN0dWZmIGJhc2VkIG9uIGhvc3RuYW1lLCByYXRoZXIKKwkgICAgdGhhbiBJUCBhZGRyZXNzLiBBbHNvIHByb3ZpZGUgdmVuZG9yLWNsYXNzIGFuZCB1c2VyLWNsYXNzCisJICAgIGluZm9ybWF0aW9uIHRvIHRoZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0IHdoZW4gYSBuZXcgbGVhc2UgaXMKKwkgICAgY3JlYXRlZCBpbiB0aGUgRE5TTUFTUV9WRU5ET1JfQ0xBU1MgYW5kCisJICAgIEROU01BU1FfVVNFUl9DTEFTUzxuPiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFN1Z2dlc3Rpb24gCisgICAgICAgICAgICBmcm9tIEZyYW5jb2lzLVhhdmllciBMZSBCYWlsLgorCisJICAgIFJ1biB0aGUgbGVhc2UgY2hhbmdlIHNjcmlwdCBhcyByb290LCBldmVuIHdoZW4gZG5zbWFzcSBpcworCSAgICBjb25maWd1cmVkIHRvIGNoYW5nZSBVSUQgdG8gYW4gdW5wcml2aWxlZ2VkIHVzZXIuIFNpbmNlCisJICAgIG1vc3QgdXNlcyBvZiB0aGUgbGVhc2UgY2hhbmdlIHNjcmlwdCBuZWVkIHJvb3QsIHRoaXMKKwkgICAgYWxsb3dzIGl0cyB1c2Ugd2hpbHN0IGtlZXBpbmcgdGhlIHNlY3VyaXR5IGFkdmFudGFnZXMgb2YKKwkgICAgcnVubmluZyB0aGUgZGFlbW9uIHdpdGhvdXQgcHJpdnMuIFRoZSBzY3JpcHQgaXMgaW52b2tlZAorCSAgICB2aWEgYSBzbWFsbCBoZWxwZXIgcHJvY2VzcyB3aGljaCBrZWVwcyByb290IFVJRCwgYW5kCisJICAgIHZhbGlkYXRlcyBhbGwgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBtYWluIHByb2Nlc3MuIFRvIGdldAorCSAgICByb290LCBhbiBhdHRhY2tlciB3b3VsZCBoYXZlIHRvIGJyZWFrIGRuc21hc3EgYW5kIHRoZW4KKwkgICAgYnJlYWsgdGhlIGhlbHBlciB0aHJvdWdoIHRoZSByZXN0cmljdGVkIGNvbW1zIGNoYW5uZWwgCisJICAgIGxpbmtpbmcgdGhlIHR3by4KKwkgICAgCisJICAgIEFkZCBjb250cmliL3BvcnQtZm9yd2FyZC8qIHdoaWNoIGlzIGEgc2NyaXB0IHRvIHNldCB1cCAKKwkgICAgcG9ydC1mb3J3YXJkcyB1c2luZyB0aGUgREhDUCBsZWFzZS1jaGFuZ2Ugc2NyaXB0LiBJdCdzCisJICAgIHBvc3NpYmxlIHRvIGFkZCBhIGhvc3QgdG8gYSBjb25maWcgZmlsZSBieSBuYW1lLCBhbmQgd2hlbgorCSAgICB0aGF0IGhvc3QgZ2V0cyBhIERIQ1AgbGVhc2UsIHRoZSBzY3JpcHQgd2lsbCB1c2UgaXB0YWJsZXMKKwkgICAgdG8gc2V0IHVwIHBvcnQtZm9yd2FyZHMgdG8gY29uZmlndXJlZCBwb3J0cyBhdCB0aGUgYWRkcmVzcworCSAgICB3aGljaCB0aGUgaG9zdCBpcyBhbGxvY2F0ZWQuIFRoZSBzY3JpcHQgYWxzbyBoYW5kbGVzCisJICAgIHNldHRpbmcgdXAgdGhlIHBvcnQtZm9yd2FyZCBpcHRhYmxlcyBlbnRyaWVzIGFmdGVyIHJlYm9vdCwKKwkgICAgdXNpbmcgdGhlIHBlcnNpc3RlbnQgbGVhc2UgZGF0YWJhc2UsIGFuZCByZW1vdmluZyB0aGVtCisJICAgIHdoZW4gYSBob3N0IGxlYXZlcyBhbmQgaXRzIERIQ1AgbGVhc2UgZXhwaXJlcy4KKworCSAgICBGaXggdW5hbGlnbmVkIGFjY2VzcyBwcm9ibGVtIHdoaWNoIGNhdXNlZCB3cm9uZyBsb2cKKwkgICAgbWVzc2FnZXMgd2l0aCBzb21lIGNsaWVudHMgb24gc29tZSBhcmNoaXRlY3R1cmVzLiBUaGFua3MKKwkgICAgdG8gRnJhbmNvaXMtWGF2aWVyIExlIEJhaWwgZm9yIHRoZSBidWdyZXBvcnQuCisKKwkgICAgRml4ZWQgcHJvYmxlbSB3aXRoIERIQ1BSRUxFQVNFIGFuZCBtdWx0aS1hZGRyZXNzCisJICAgIGludGVyZmFjZXMuIEVuaGFuY2VkIGNvbnRyaWIvd3J0L2RoY3BfcmVsZWFzZSB0byBjb3BlCisJICAgIHVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMgdG9vLiBUaGFua3MgdG8gRWxkb24gWmllZ2xlciBmb3IKKwkgICAgaW5wdXQgb24gdGhpcy4KKworCSAgICBVcGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbjogdGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCSAgICBVcGdyYWRlZCB0aGUgbmFtZSBoYXNoIGZ1bmN0aW9uIGluIHRoZSBETlMgY2FjaGUuIFRoYW5rcworCSAgICB0byBPbGVnIEtob3ZheWtvIGZvciBnb29kIHdvcmsgb24gdGhpcy4KKworCSAgICBBZGRlZCAtLWNsZWFyLW9uLXJlbG9hZCBmbGFnLiAgU3VnZ2VzdGlvbiBmcm9tIEpvaGFubmVzCisJICAgIFN0ZXplbmJhY2guCisKKwkgICAgVHJlYXQgYSBuYW1lc2VydmVyIGFkZHJlc3Mgb2YgMC4wLjAuMCBhcyAibm90aGluZyIuIEVyd2luIAorICAgICAgICAgICAgQ2FicmVyYSBzcG90dGVkIHRoYXQgc3BlY2lmeWluZyBhIG5hbWVzZXJ2ZXIgYXMgMC4wLjAuMCAKKwkgICAgYnJlYWtzIHRoaW5ncyBiYWRseTsgdGhpcyBpcyBiZWNhdXNlIHRoZSBuZXR3b3JrIHN0YWNrCisJICAgIHRyZWF0cyBpcyBhcyAidGhpcyBob3N0IiBhbmQgYW4gZW5kbGVzcyBsb29wIGVuc3Vlcy4KKwkJICAgCisgICAgICAgICAgICBBZGRlZCBXZWJtaW4gbW9kdWxlIGluIGNvbnRyaWIvd2VibWluLiBUaGFua3MgdG8gTmVpbAorICAgICAgICAgICAgRmlzaGVyIGZvciB0aGF0LgorCit2ZXJzaW9uIDIuMzUKKwkgICAgR2VuZXJhdGUgYW4gIm9sZCIgc2NyaXB0IGV2ZW50IHdoZW4gYSBjbGllbnQgZG9lcyBhIERIQ1BSRVFVRVNUCisJICAgIGluIElOSVQtUkVCT09UIG9yIFNFTEVDVElORyBzdGF0ZSBhbmQgdGhlIGxlYXNlIGFscmVhZHkKKwkgICAgZXhpc3RzLiBTdXBwbHkgdmVuZG9yIGFuZCB1c2VyIGNsYXNzIGluZm9ybWF0aW9uIHRvIHRoZXNlCisJICAgIHNjcmlwdCBjYWxscy4KKworCSAgICBBZGRlZCBzdXBwb3J0IGZvciBEcmFnb25mbHkgQlNEIHRvIHNyYy9jb25maWcuaAorCisJICAgIFJlbW92ZWQgIlVwZ3JhZGluZyB0byAyLjAiIGRvY3VtZW50LCB3aGljaCBpcyBhbmNpZW50CisJICAgIGhpc3Rvcnkgbm93LgorCisJICAgIFR3ZWFrIERIQ1AgbmV0d29ya2luZyBjb2RlIGZvciBCU0QsIGVzcCBPcGVuQlNELiBBZGRlZCBhIAorCSAgICB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBPcGVuQlNEIDQuMDogdGhlcmUgc2hvdWxkIGZpbmFsbHkKKyAgICAgICAgICAgIGJlIHN1cHBvcnQgZm9yIG11bHRpcGxlIGludGVyZmFjZXMgdW5kZXIgT3BlbkJTRCBub3cuCisJICAgIE5vdGUgdGhhdCBubyB2ZXJzaW9uIG9mIGRuc21hc3EgYmVmb3JlIDIuMzUgd2lsbCB3b3JrIGZvciAKKwkgICAgREhDUCB1bmRlciBPcGVuQlNEIDQuMCBiZWNhdXNlIG9mIGEga2VybmVsIGJ1Zy4KKwkgICAgVGhhbmtzIHRvIENsYXVkaW8gSmVrZXIsIEplYiBDYW1wYmVsbCBhbmQgQ3Jpc3RvYmFsIAorCSAgICBQYWxtZXIgZm9yIGhlbHAgd2l0aCB0aGlzLgorCisJICAgIE9wdGltaXNlZCB0aGUgY2FjaGUgY29kZSBmb3IgdGhlIGNhc2Ugb2YgbGFyZ2UKKwkgICAgL2V0Yy9ob3N0cy4gVGhpcyBpcyBtYWlubHkgdG8gcmVtb3ZlIHRoZSBPKG4tc3F1YXJlZCkKKwkgICAgYWxnb3JpdGhtIHdoaWNoIG1hZGUgcmVhZGluZyBsYXJnZSAoNTAwMDAgbGluZXMpIGZpbGVzIAorCSAgICBzbG93LCBidXQgaXQgYWxzbyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHNpemUgb2YgCisJICAgIC9ldGMvaG9zdHMgd2hlbiBidWlsZGluZyBoYXNoIHRhYmxlcywgc28gb3ZlcmFsbCAKKwkgICAgcGVyZm9ybWFuY2Ugc2hvdWxkIGJlIGJldHRlci4gVGhhbmtzIHRvICJrb2tvIiBmb3IgCisJICAgIHBvaW50aW5nIG91dCB0aGUgcHJvYmxlbS4KKwordmVyc2lvbiAyLjM2CisJICAgIEFkZGVkIC0tZGhjcC1pZ25vcmUtbmFtZXMgZmxhZyB3aGljaCB0ZWxscyBkbnNtYXNxIG5vdCB0bworCSAgICB1c2UgbmFtZXMgcHJvdmlkZWQgYnkgREhDUCBjbGllbnRzLiBTdWdnZXN0aW9uIGZyb20gCisJICAgIFRob21hcyBNIFN0ZWVuaG9sZHQuCisKKwkgICAgU2VuZCBuZXRtYXNrIGFuZCBicm9hZGNhc3QgYWRkcmVzcyBESENQIG9wdGlvbnMgYWx3YXlzLAorCSAgICBldmVuIGlmIHRoZSBjbGllbnQgZG9lc24ndCByZXF1ZXN0IHRoZW0uIFRoaXMgbWFrZXMgYSBmZXcKKwkgICAgb2RkIGNsaWVudHMgd29yayBiZXR0ZXIuCisKKwkgICAgQWRkZWQgc2ltcGxlIFRGVFAgZnVuY3Rpb24sIG9wdGltaXNlZCBmb3IgbmV0LWJvb3QuIEl0IGlzCisJICAgIG5vdyBwb3NzaWJsZSB0byBuZXQgYm9vdCBob3N0cyB1c2luZyBvbmx5IGRuc21hc3EuIFRoZQorCSAgICBURlRQIHNlcnZlciBpcyByZWFkLW9ubHksIGJpbmFyeS1tb2RlIG9ubHksIGFuZCBkZXNpZ25lZCB0byBiZQorCSAgICBzZWN1cmU7IGl0IGFkZHMgYWJvdXQgNEsgdG8gdGhlIGRuc21hc3EgYmluYXJ5LiAKKyAKKwkgICAgU3VwcG9ydCBESENQIG9wdGlvbiAxMjAsIFNJUCBzZXJ2ZXJzLCAoUkZDIDMzNjEpLiBCb3RoCisgICAgICAgICAgICBlbmNvZGluZ3MgYXJlIHN1cHBvcnRlZCwgc28gYm90aCAtLWRoY3Atb3B0aW9uPTEyMCwxOTIuMTY4LjIuMworICAgICAgICAgICAgYW5kCS0tZGhjcC1vcHRpb249MTIwLHNpcC5leGFtcGxlLm5ldCB3aWxsIHdvcmsuIEJyaWFuCisgICAgICAgICAgICBDYW5kbGVyIHBvaW50ZWQgb3V0IHRoZSBuZWVkIGZvciB0aGlzLgorCisJICAgIEFsbG93IHNwYWNlcyBpbiBkb21haW4gbmFtZXMsIHRvIHN1cHBvcnQgRE5TLVNELgorCisJICAgIEFkZCAtLXB0ci1yZWNvcmQgZmxhZywgYWdhaW4gZm9yIEROUy1TRC4gVGhhbmtzIHRvIFN0ZXBoYW4gCisJICAgIFNva29sb3cgZm9yIHRoZSBzdWdnZXN0aW9uLgorCSAgICAKKwkgICAgVG9sZXJhdGUgbGVhZGluZyBzcGFjZSBvbiBsaW5lcyBpbiB0aGUgY29uZmlnIGZpbGUuIFRoYW5rcworCSAgICB0byBMdWlnaSBSaXp6byBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCisKKwkgICAgRml4ZWQgbmV0bGluay5jIHRvIGNvcGUgd2l0aCBoZWFkZXJzIGZyb20gdGhlIExpbnV4IDIuNi4xOQorCSAgICBrZXJuZWwuIFRoYW5rcyB0byBQaGlsaXAgV2FsbCBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwkgICAgQWRkZWQgLS1kaGNwLWJyaWRnZSBvcHRpb24sIGJ1dCBvbmx5IHRvIHRoZSBGcmVlQlNECisJICAgIGJ1aWxkLiBUaGlzIGZpeGVzIGFuIG9kZGl0eSB3aXRoIGEgYSBwYXJ0aWN1bGFyIGJyaWRnZWQKKwkgICAgbmV0d29yayBjb25maWd1cmF0aW9uIG9uIEZyZWVCU0QuIFRoYW5rcyB0byBMdWlnaSBSaXp6bworCSAgICBmb3IgdGhlIHBhdGNoLgorCisJICAgIEFkZGVkIEZBUSBlbnRyeSBhYm91dCBydW5uaW5nIGRuc21hc3EgaW4gYSBMaW51eAorCSAgICB2c2VydmVyLiBUaGFua3MgdG8gR2lsZGFzIGxlIE5hZGFuIGZvciB0aGUgaW5mb3JtYXRpb24uICAKKworCSAgICBGaXhlZCBwcm9ibGVtIHdpdGggb3B0aW9uIHBhcnNpbmcgd2hpY2ggaW50ZXJwcmV0ZWQgIi8iIGFzCisJICAgIGFuIGFkZHJlc3MgYW5kIG5vdCBhIHN0cmluZy4gVGhhbmtzIHRvIEx1aWdpIFJpenpvCisJICAgIGZvciB0aGUgcGF0Y2guCisKKwkgICAgSWdub3JlIHRoZSAtLWRvbWFpbi1uZWVkZWQgZmxhZyB3aGVuIGZvcndhcmRpbmcgTlMKKwkgICAgYW5kIFNPQSBxdWVyaWVzLCBzaW5jZSBOUyBxdWVyaWVzIG9mIFRMRHMgYXJlIGFsd2F5cyBsZWdpdC4KKwkgICAgTWFyY3VzIEJldHRlciBwb2ludGVkIG91dCB0aGlzIHByb2JsZW0uCisKKwkgICAgVGFrZSBjYXJlIHRvIGZvcndhcmQgc2lnbmVkIEROUyByZXF1ZXN0cyBiaXQtcGVyZmVjdCwgc28KKwkgICAgYXMgbm90IHRvIGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhlIHNpZ25hdHVyZS4gVGhpcworCSAgICBzaG91bGQgYWxsb3cgREROUyB1cGRhdGVzIHRvIGJlIGZvcndhcmRlZC4KKwordmVyc2lvbiAyLjM3CisgICAgICAgICAgICBBZGQgYmV0dGVyIHN1cHBvcnQgZm9yIFJGQy0yODU1IERIQ1Atb3Zlci1maXJld2lyZSBhbmQgUkZDCisgICAgICAgICAgIC00MzkwIERIQ1Atb3Zlci1JbmZpbmlCYW5kLiBBIGdvb2Qgc3VnZ2VzdGlvbiBmcm9tIEthcmwgU3ZlYy4KKworCSAgICBTb21lIGVmZmljaWVuY3kgdHdlYWtzIHRvIHRoZSBjYWNoZSBjb2RlIGZvciB2ZXJ5IGxhcmdlCisJICAgIC9ldGMvaG9zdHMgZmlsZXMuIFNob3VsZCBpbXByb3ZlIHJldmVyc2UgKGFkZHJlc3MtPm5hbWUpCisJICAgIGxvb2t1cHMgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbi4gVGhhbmtzIHRvIEphbiAnUmVkQnVsbHknCisJICAgIFNlaWZmZXJ0IGZvciBpbnB1dCBvbiB0aGlzLgorCisJICAgIEZpeCByZWdyZXNzaW9uIGluIDIuMzYgd2hpY2ggbWFkZSBib2d1cy1ueGRvbWFpbgorCSAgICBhbmQgRE5TIGNhY2hpbmcgdW5yZWxpYWJsZS4gVGhhbmtzIHRvIERlbm5pcyBEZURvbmF0aXMKKwkgICAgYW5kIEphbiBTZWlmZmVydCBmb3IgYnVnIHJlcG9ydHMuCisKKwkgICAgTWFrZSBESENQIGVuY2Fwc3VsYXRlZCB2ZW5kb3ItY2xhc3MJb3B0aW9ucyBzYW5lLiBCZQorCSAgICB3YXJuZWQgdGhhdCBzb21lIGNvbmNlaXZhYmxlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zIAorCSAgICB1c2luZyB0aGVzZSBtYXkgYnJlYWssIGJ1dCB0aGV5IHdvcmsgaW4gYSBtdWNoIAorCSAgICBzaW1wbGVyIGFuZCBtb3JlIGxvZ2ljYWwgd2F5IG5vdy4gUHJlcGVuZGluZworCSAgICAidmVuZG9yOjxjbGllbnQtaWQ+IiB0byBhbiBvcHRpb24gZW5jYXBzdWxhdGVzIGl0IAorCSAgICBpbiBvcHRpb24gNDMsIGFuZCB0aGUgb3B0aW9uIGlzIHNlbnQgb25seSBpZiB0aGUgCisJICAgIGNsaWVudC1zdXBwbGllZCB2ZW5kb3ItY2xhc3Mgc3Vic3RyaW5nLW1hdGNoZXMgd2l0aCAKKwkgICAgdGhlIGdpdmVuIGNsaWVudC1pZC4gVGhhbmtzIHRvIERlbm5pcyBEZURvbmF0aXMgZm9yIAorCSAgICBoZWxwIHdpdGggdGhpcy4KKworCSAgICBBcHBseSBwYXRjaCBmcm9tIEphbiBTZWlmZmVydCB0byB0aWR5IHVwIHRmdHAuYworCisJICAgIEFkZCBzdXBwb3J0IGZvciBvdmVybG9hZGluZyB0aGUgZmlsZW5hbWUgYW5kIHNlcnZlcm5hbWUgCisJICAgIGZpZWxkcyBpbiBESENQIHBhY2tldC4gVGhpcyBnaXZlcyBleHRyYSBvcHRpb24tc3BhY2Ugd2hlbgorCSAgICB0aGVzZSBmaWVsZHMgYXJlIG5vdCBiZWluZyB1c2VkIG9yIHdpdGggYSBtb2Rlcm4gY2xpZW50CisJICAgIHdoaWNoIHN1cHBvcnRzIG1vdmluZyB0aGVtIGludG8gb3B0aW9ucy4KKworCSAgICBBZGRlZCBhIExJTUlUUyBzZWN0aW9uIHRvIHRoZSBtYW4tcGFnZSwgd2l0aCBndWlkYW5jZSBvbgorCSAgICBtYXhpbXVtIG51bWJlcnMgb2YgY2xpZW50cywgZmlsZSBzaXplcyBhbmQgdHVuaW5nLgorCityZWxlYXNlIDIuMzgKKwkgICAgRml4IGNvbXBpbGF0aW9uIG9uICpCU0QuIFRoYW5rcyB0byBUb20gSGVuc2VsLgorCisJICAgIERvbid0IHNlbmQgbGVuZ3RoIHplcm8gREhDUCBvcHRpb24gNDMgYW5kIGNvcGUgd2l0aCAKKwkgICAgZW5jYXBzdWxhdGVkIG9wdGlvbnMgd2hvc2UgdG90YWwgbGVuZ3RoIGV4Y2VlZHMgMjU1IG9jdGV0cworCSAgICBieSBzcGxpdHRpbmcgdGhlbSBpbnRvIG11bHRpcGxlIG9wdGlvbiA0MyBwaWVjZXMuCisKKwkgICAgQXZvaWQgcXVlcmllcyBiZWluZyByZXRyaWVkIGZvcmV2ZXIgd2hlbiAtLXN0cmljdC1vcmRlciBpcworCSAgICBzZXQgYW5kIGFuIHVwc3RyZWFtIHNlcnZlciByZXR1cm5zIGEgU0VSVkZBSUwKKwkgICAgZXJyb3IuIFRoYW5rcyB0byBKb2hhbm5lcyBTdGV6ZW5iYWNoIGZvciBzcG90dGluZyB0aGlzLgorCisJICAgIEZpeCBCT09UUCBzdXBwb3J0LCBicm9rZW4gaW4gdmVyc2lvbiAyLjM3LgorCisJICAgIEFkZCBleGFtcGxlIGRoY3Atb3B0aW9ucyBmb3IgRXRoZXJib290LgorCisJICAgIEFkZCBcZSAoZm9yIEFTQ0lJIEVTQ2FwZSkgdG8gdGhlIHNldCBvZiB2YWxpZCBlc2NhcGVzCisJICAgIGluIGNvbmZpZy1maWxlIHN0cmluZ3MuCisKKwkgICAgQWRkZWQgLS1kaGNwLW9wdGlvbi1mb3JjZSBmbGFnIGFuZCBleGFtcGxlcyBpbiB0aGUKKwkgICAgY29uZmlndXJhdGlvbiBmaWxlIHdoaWNoIHVzZSB0aGlzIHRvIGNvbnRyb2wgUFhFTGludXguCisKKwkgICAgQWRkZWQgLS10ZnRwLW5vLWJsb2Nrc2l6ZSBvcHRpb24uCisKKwkgICAgU2V0IG5ldGlkIHRhZyAiYm9vdHAiIHdoZW4gQk9PVFAgKHJhdGhlciB0aGFuIERIQ1ApIGlzIGluCisJICAgIHVzZS4gVGhpcyBtYWtlcyBpdCBlYXN5IHRvIGN1c3RvbWlzZSB3aGljaCBvcHRpb25zIGFyZQorCSAgICBzZW50IHRvIEJPT1RQIGNsaWVudHMuIChCT09UUCBhbGxvd3Mgb25seSA2NCBvY3RldHMgZm9yCisJICAgIG9wdGlvbnMsIHNvIGl0IGNhbiBiZSBuZWNlc3NhcnkgdG8gdHJpbSB0aGluZ3MuKQorCisJICAgIEZpeCByYXJlIGhhbmcgaW4gY2FjaGUgY29kZSwgYSAyLjM3IHJlZ3Jlc3Npb24uIFRoaXMKKwkgICAgcHJvYmFibHkgbmVlZHMgYW4gaW5maW5pdGUgREhDUCBsZWFzZSBhbmQgc29tZSBiYWQgbHVjayB0bworCSAgICB0cmlnZ2VyLiBUaGFua3MgdG8gRGV0bGVmIFJlaWNoZWx0IGZvciBidWcgcmVwb3J0cyBhbmQgdGVzdGluZy4KKworcmVsZWFzZSAyLjM5CisJICAgIEFwcGx5IHBhdGNoIGZyb20gTWlrZSBCYWtlci9PcGVuV1JUIHRvIGVuc3VyZSB0aGF0IG5hbWVzCisJICAgIGxpa2UgImxvY2FsaG9zdC4iIGluIC9ldGMvaG9zdHMgd2l0aCB0cmFpbGluZyBwZXJpb2QgCisJICAgIGFyZSB0cmVhdGVkIGFzIGZ1bGx5LXF1YWxpZmllZC4KKworCSAgICBUb2xlcmF0ZSBhbmQgaWdub3JlIHNwYWNlcyBhcm91bmQgY29tbWFzIGluIHRoZQorCSAgICBjb25maWd1cmF0aW9uIGZpbGUgaW4gYWxsIGNpcmN1bXN0YW5jZXMuIE5vdGUgdGhhdCB0aGlzCisJICAgIG1heSBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgYSBmZXcgZXhpc3RpbmcgY29uZmlnIGZpbGVzLCBmb3IKKwkgICAgaW5zdGFuY2UKKwkgICAgdHh0LXJlY29yZD1teWRvbWFpbi5jb20sIHN0cmluZworCSAgICB3b3VsZCBoYXZlIGEgbGVhZGluZyBzcGFjZSBpbiB0aGUgc3RyaW5nIGJlZm9yZSwgYW5kIG5vdworCSAgICB3aWxsIG5vdC4gVG8gZ2V0IHRoZSBvbGQgYmVoYXZpb3VyIGJhY2ssIHVzZSBxdW90ZXM6CisJICAgIHR4dC1yZWNvcmQ9bXlkb21haW4uY29tLCIgc3RyaW5nIgorCisJICAgIC9hIGlzIG5vIGxvbmdlciBhIHZhbGlkIGVzY2FwZSBpbiBxdW90ZWQgc3RyaW5ncy4KKworCSAgICBBZGRlZCBzeW1ib2xpYyBESENQIG9wdGlvbiBuYW1lcy4gSW5zdGVhZCBvZgorCSAgICBkaGNwLW9wdGlvbiA9IDMsIDEuMi4zLjQgCisJICAgIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBkbworCSAgICBkaGNwLW9wdGlvbiA9IG9wdGlvbjpyb3V0ZXIsIDEuMi4zLjQKKwkgICAgVG8gc2VlIHRoZSBsaXN0IG9mIGtub3duIERIQ1Agb3B0aW9ucywgdXNlIHRoZSAKKyAgICAgICAgICAgIGNvbW1hbmQgImRuc21hc3EgLS1oZWxwIGRoY3AiCisJICAgIFRoYW5rcyB0byBMdWlnaSBSaXp6byBmb3IgYSBwYXRjaCBhbmQgZ29vZCB3b3JrIG9uIHRoaXMuCisKKwkgICAgT3ZlcmhhdWxlZCB0aGUgbG9nIGNvZGUgc28gdGhhdCBsb2dnaW5nIGNhbiBiZSBhc3luY2hyb25vdXM7IAorCSAgICBkbnNtYXNxIHRoZW4gbm8gbG9uZ2VyIGJsb2NrcyB3YWl0aW5nIGZvciB0aGUgc3lzbG9nKCkgbGlicmFyeQorCSAgICBjYWxsLiBUaGlzIGlzIGltcG9ydGFudCBvbiBzeXN0ZW1zIHdoZXJlIHN5c2xvZworCSAgICBpcyBiZWluZyB1c2VkIHRvIGxvZyBvdmVyIHRoZSBuZXR3b3JrIChhbmQgdGhlcmVmb3JlIGRvaW5nCisJICAgIEROUyBsb29rdXBzKSBhbmQgc3lzbG9nIGlzIHVzaW5nIGRuc21hc3EgYXMgaXRzIEROUworCSAgICBzZXJ2ZXIuIEhhdmluZyBkbnNtYXNxIGJsb2NrIGF3YWl0aW5nIHN5c2xvZyB1bmRlciAKKwkgICAgc3VjaCBjaXJjdW1zdGFuY2VzIGNhbiBsZWFkIHRvIHN5c2xvZyBhbmQgZG5zbWFzcSAKKwkgICAgZGVhZGxvY2tpbmcuIFRoZSBuZXcgYmVoYXZpb3VyIGlzIGVuYWJsZWQgd2l0aCBhIG5ldworCSAgICAgLS1sb2ctYXN5bmMgZmxhZywgd2hpY2ggY2FuIGFsc28gYmUgdXNlZCB0byB0dW5lIHRoZQorCSAgICBxdWV1ZSBsZW5ndGguIFBhdWwgQ2hhbWJlcnMgZm91bmQgYW5kIGRpYWdub3NlZCAKKwkgICAgdGhpcyB0cmFwIGZvciB0aGUgdW53YXJ5LiBIZSBhbHNvIGRpZCBtdWNoIHRlc3Rpbmcgb2YgCisJICAgIHRoZSBzb2x1dGlvbiBhbG9uZyB3aXRoIENhcmxvcyBDYXJ2YWxoby4KKworCSAgICAtLWxvZy1mYWNpbGl0eSBjYW4gbm93IHRha2UgYSBmaWxlLW5hbWUgaW5zdGVhZCBvZiBhIAorCSAgICBmYWNpbGl0eSBuYW1lLiBXaGVuIHRoaXMgaXMgZG9uZSwgZG5zbWFzcSBsb2dzIHRvIHRoZSAKKwkgICAgZmlsZSBhbmQgbm90IHZpYSBzeXNsb2cuIChGYWlsdXJlcyBlYXJseSBpbiBzdGFydHVwLCAKKwkgICAgd2hpbHN0IHJlYWRpbmcgY29uZmlndXJhdGlvbiwgd2lsbCBzdGlsbCBnbyB0byBzeXNsb2csIAorCSAgICBhbmQgc3lzbG9nIGlzIHVzZWQgYXMgYSBsb2ctb2YtbGFzdC1yZXNvcnQgaWYgdGhlIGZpbGUKKwkgICAgY2Fubm90IGJlIHdyaXR0ZW4uKQorCisJICAgIEFkZGVkIC0tbG9nLWRoY3AgZmxhZy4gU3VnZ2VzdGlvbiBmcm9tIENhcmxvcyBDYXJ2YWxoby4KKworCSAgICBNYWRlIEJJTkRJUiwgTUFORElSIGFuZCBMT0NBTEVESVIgaW5kZXBlbmRlbnRseQorCSAgICBvdmVyLXJpZGVhYmxlIGluIHRoZSBtYWtlZmlsZS4gU3VnZ2VzdGlvbiBmcm9tIFRob21hcworCSAgICBLbGF1c25lci4KKworCSAgICBBZGRlZCAxMjcuMC4wLjAvOCBhbmQgMTY5LjI1NC4wLjAvMTYgdG8gdGhlIGFkZHJlc3MKKwkgICAgcmFuZ2VzIGFmZmVjdGVkIGJ5IC0tYm9ndXMtcHJpdi4gVGhhbmtzIHRvICBQYXVsIAorCSAgICBDaGFtYmVycyBmb3IgdGhlIHBhdGNoLgorCisJICAgIEZpeGVkIGZhaWx1cmUgb2YgVEZUUCBzZXJ2ZXIgd2l0aCAtLWxpc3Rlbi1hZGRyZXNzLiBUaGFua3MKKwkgICAgdG8gV2lsbGlhbSBEaW5rZWwgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEFkZGVkIC0tZGhjcC1jaXJjdWl0aWQgYW5kIC0tZGhjcC1yZW1vdGVpZCBmb3IgUkZDMzA0NgorCSAgICByZWxheSBhZ2VudCBkYXRhIG1hdGNoaW5nLgorIAorCSAgICBBZGRlZCAtLWRoY3Atc3Vic2NyaWQgZm9yIFJGQzM5OTMgc3Vic2NyaWJlci1pZCByZWxheQorCSAgICBhZ2VudCBkYXRhIG1hdGNoaW5nLgorCisJICAgIENvcnJlY3RseSBnYXJiYWdlLWNvbGxlY3QgY29ubmVjdGlvbnMgd2hlbiB1cHN0cmVhbQorCSAgICBzZXJ2ZXJzIGdvIGF3YXkgYXMgYSByZXN1bHQgb2YgREJ1cyB0cmFuc2FjdGlvbnMuCisKKwkgICAgQWxsb3cgYWJzb2x1dGUgcGF0aHMgZm9yIFRGVFAgdHJhbnNmZXJzIGV2ZW4gd2hlbgorCSAgICAtLXRmdHAtcm9vdCBpcyBzZXQsIGFzIGxvbmcgYXMgdGhlIHBhdGggbWF0Y2hlcyB0aGUgcm9vdCwKKwkgICAgc28gL3Zhci9mdHAvbXlmaWxlIGlzIE9LIHdpdGggdGZ0cC1yb290PS92YXIvZnRwLgorCSAgICBUaGFua3MgZm9yIFRob21hcyBNaXp6aSBmb3IgdGhlIHBhdGNoLgorCisJICAgIFVwZGF0ZWQgU3BhbmlzaCB0cmFuc2xhdGlvbiAtIHRoYW5rcyB0byBDaHJpcyBDaGF0aGFtLgorCisJICAgIFVwZGF0ZWQgRnJlbmNoIHRyYW5zbGF0aW9uIC0gdGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCSAgICBBZGRlZCB0byBleGFtcGxlIGNvbmYgZmlsZSBleGFtcGxlIG9mIHJvdXRpbmcgUFRSIHF1ZXJpZXMKKwkgICAgZm9yIGEgc3VibmV0IHRvIGEgZGlmZmVyZW50IG5hbWVzZXJ2ZXIuIFN1Z2dlc3Rpb24gZnJvbQorCSAgICBKb24gTmljaG9sc29uLgorCisJICAgIEFkZGVkIC0taW50ZXJmYWNlLW5hbWUgb3B0aW9uLiBUaGlzIHByb3ZpZGVzIGEgZmFjaWxpdHkgCisJICAgIHRvIGFkZCBhIGRvbWFpbiBuYW1lIHdpdGggYSBkeW5hbWljIElQIGFkZHJlc3MgdGFrZW4gZnJvbQorCSAgICB0aGUgYWRkcmVzcyBvZiBhIGxvY2FsIG5ldHdvcmsgaW50ZXJmYWNlLiBVc2VmdWwgZm9yCisJICAgIG5ldHdvcmtzIHdpdGggZHluYW1pYyBJUHMuCisKK3ZlcnNpb24gMi40MAorICAgICAgICAgICAgTWFrZSBTSUdVU1IyIGNsb3NlLWFuZC1yZW9wZW4gdGhlIGxvZ2ZpbGUgd2hlbiBsb2dnaW5nIAorCSAgICBkaXJlY3QgdG8gYSBmaWxlLiBUaGFua3MgdG8gQ2FybG9zIENhcnZhbGhvIGZvciAKKwkgICAgc3VnZ2VzdGluZyB0aGlzLiBXaGVuIGEgbG9nZmlsZSBpcyBjcmVhdGVkLCBjaGFuZ2UKKwkgICAgaXRzIG93bmVyc2hpcCB0byB0aGUgdXNlciBkbnNtYXNxIHdpbGwgcnVuIGFzLCBkb24ndAorCSAgICBsZWF2ZSBpdCBvd25lZCBieSByb290LgorCisJICAgIFNldCBhIHNwZWNpYWwgdGFnLCAia25vd24iIGZvciBob3N0cyB3aGljaCBhcmUgbWF0Y2hlZCBieQorCSAgICBhIGRoY3AtaG9zdCBvciAvZXRjL2V0aGVycyBsaW5lLiBUaGlzIGlzIGVzcGVjaWFsbHkKKwkgICAgdXNlZnVsIHRvIGJlIGFibGUgdG8gZG8gLS1kaGNwLWlnbm9yZT0ja25vd24sIGxpa2UgSVNDcworCSAgICAiZGVueSB1bmtub3duLWNsaWVudHMiLgorCisJICAgIEV4cGxpY2l0bHkgc2V0IGEgdW1hc2sgYmVmb3JlIGNyZWF0aW5nIHRoZSBsZWFzZXMgZmlsZSwKKwkgICAgcmF0aGVyIHRoYW4gcmVseWluZyBvbiB3aGF0ZXZlciB3ZSBpbmhlcml0ZWQuIFRoZQorCSAgICBwZXJtaXNzaW9ucwlhcmUgc2V0IHRvIDY0NC4KKworCSAgICBGaXggaGFuZGxpbmcgb2YgZnVsbHktcXVhbGlmaWVkIG5hbWVzIGluIC0tZGhjcC1ob3N0CisJICAgIGRpcmVjdGl2ZXMgYW5kIGluIC9ldGMvZXRoZXJzLiBUaGVzZSBhcmUgbm93IHJlamVjdGVkIAorCSAgICBpZiB0aGUgZG9tYWluIGRvZXNuJ3QgbWF0Y2ggdGhhdCBnaXZlbiBieSAtLWRvbWFpbiwJICAKKwkgICAgYW5kIHVzZWQgY29ycmVjdGx5IG90aGVyd2lzZS4gQmVmb3JlLCBwdXR0aW5nCisJICAgIGEgRlFETiBoZXJlIGNvdWxkIGNhdXNlIHRoZSB3aG9sZSBGUUROIHRvIGJlIHVzZWQgYXMKKwkgICAgaG9zdG5hbWUuIFRoYW5rcyB0byBNaWNoYWVsIEhlaW1wb2xkIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCSAgICBNYXNzaXZlIGJ1dCB0cml2aWFsIGVkaXQgdG8gbWFrZSB0aGUgImRhZW1vbiIgdmFyaWFibGUgCisJICAgIGdsb2JhbCwgaW5zdGVhZCBvZiBjb3B5aW5nIHRoZSBzYW1lIHZhbHVlIGFyb3VuZCBhcyB0aGUKKwkgICAgZmlyc3QgYXJndW1lbnQgdG8gaGFsZiB0aGUgZnVuY3Rpb25zIGluIHRoZSBwcm9ncmFtLgorCSAgICAKKwkgICAgVXBkYXRlZCBTcGFuaXNoIG1hbnBhZ2UgYW5kIG1lc3NhZ2UgY2F0YWxvZy4gVGhhbmtzIAorCSAgICB0byBDaHJpcyBDaGF0aGFtLgorCSAgICAKKwkgICAgQWRkZWQgcGF0Y2ggZm9yIHN1cHBvcnQgb2YgRE5TIExPQyByZWNvcmRzIGluCisJICAgIGNvbnRyaWIvZG5zLWxvYy4gVGhhbmtzIHRvIExvcmVueiBTY2hvcmkuCisKKwkgICAgRml4ZWQgZXJyb3IgaW4gbWFucGFnZTogZGhjcC1pZ25vcmUtbmFtZSAtPgorCSAgICBkaGNwLWlnbm9yZS1uYW1lcy4gVGhhbmtzIHRvIERhbmllbCBNZW50eiBmb3Igc3BvdHRpbmcKKwkgICAgdGhpcy4KKworCSAgICBVc2UgY2xpZW50LWlkIGFzIGhhc2gtc2VlZCBmb3IgREhDUCBhZGRyZXNzIGFsbG9jYXRpb24KKwkgICAgd2l0aCBGaXJld2lyZSBhbmQgSW5maW5pYmFuZCwgYXMgdGhlc2UgZG9uJ3Qgc3VwcGx5IGFuIE1BQworCSAgICBhZGRyZXNzLiAKKworCSAgICBUd2Vha2VkIFRGVFAgZmlsZS1vcGVuIGNvZGUgdG8gbWFrZSBpdCBiZWhhdmUgc2Vuc2libHkKKwkgICAgd2hlbiB0aGUgZmlsZXN5c3RlbSBjaGFuZ2VzIHVuZGVyIGl0cyBmZWV0LgorCisJICAgIEFkZGVkIEROU01BU1FfVElNRV9SRU1BSU5JTkcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIAorCSAgICBsZWFzZS1zY3JpcHQuCisKKwkgICAgQWx3YXlzIHNlbmQgcmVwbGllcyB0byBESENQSU5GT1JNIHJlcXVlc3RzIHRvIHRoZSBzb3VyY2UKKwkgICAgb2YgdGhlIHJlcXVlc3QgYW5kIG5vdCB0byB0aGUgYWRkcmVzcyBpbiBjaWFkZHIuIFRoaXMKKwkgICAgYWxsb3dzIHRoaXJkLXBhcnR5IHF1ZXJpZXMuCisJICAgIAorCSAgICBSZXR1cm4gImxlYXNlIHRpbWUgcmVtYWluaW5nIiBpbiB0aGUgcmVwbHkgdG8gYSBESENQSU5GT1JNCisJICAgIHJlcXVlc3QgaWYgdGhlcmUgZXhpc3RzIGEgbGVhc2UgZm9yIHRoZSBob3N0IHNlbmRpbmcgdGhlCisJICAgIHJlcXVlc3QuCisKKwkgICAgQWRkZWQgLS1kaGNwLWhvc3RzZmlsZSBvcHRpb24uIFRoaXMgZ2l2ZXMgYSBzdXBlcnNldCBvZgorCSAgICB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSAvZXRjL2V0aGVycy4gVGhhbmtzIHRvIAorCSAgICBHcmVnIEt1cnR6ZXIgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisJICAgIEFjY2VwdCBrZXl3b3JkICJzZXJ2ZXIiIGFzIGEgc3lub255bSBmb3IgIm5hbWVzZXJ2ZXIiIGluIAorCSAgICByZXNvbHYuY29uZi4gVGhhbmtzIHRvIEFuZHJldyBCYXJ0bGV0dCBmb3IgdGhlIHJlcG9ydC4KKworCSAgICBBZGQgLS10ZnRwLXVuaXF1ZS1yb290IG9wdGlvbi4gU3VnZ2VzdGlvbiBmcm9tIERlcm1vdAorCSAgICBCcmFkbGV5LgorCisJICAgIFR3ZWFrIFRGVFAgcmV0cnkgdGltZXIgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBkaWZmaWN1bHQKKwkgICAgY2xpZW50cy4gVGhhbmtzIHRvIERlcm1vdCBCcmFkbGV5IGZvciBhc3Npc3RhbmNlIHdpdGgKKwkgICAgdGhpcy4gCisJICAgIAorCSAgICBDb250aW51ZSB0byB1c2UgdW5xdWFsaWZpZWQgaG9zdG5hbWVzIHByb3ZpZGVkIGJ5IERIQ1AKKwkgICAgY2xpZW50cywgZXZlbiBpZiB0aGUgZG9tYWluIHBhcnQgaXMgaWxsZWdhbC4gKFRoZSBkb21haW4KKwkgICAgaXMJaWdub3JlZCwgYW5kIGFuIGVycm9yIGxvZ2dlZC4pIFByZXZpb3VzbHkgaW4gdGhpcworCSAgICBzaXR1YXRpb24sIHRoZSB3aG9sZSBuYW1lIHdob3VsZCBoYXZlIGJlZW4KKwkgICAgcmVqZWN0ZWQuIFRoYW5rcyB0byBKaW1hIGZvciB0aGUgcGF0Y2guCisJICAgIAorCSAgICBIYW5kbGUgRUlOVFIgcmV0dXJucyBmcm9tIHdhaXQoKSBjb3JyZWN0bHkgYW5kIHJlYXAKKwkgICAgb3VyIGNoaWxkcmVuJ3MgY2hpbGRyZW4gaWYgbmVjZXNzYXJ5LiBUaGlzIGZpeGVzIAorCSAgICBhIHByb2JsZW0gd2l0aCB6b21iaWUtY3JlYXRpb24gdW5kZXIgKkJTRCB3aGVuIHVzaW5nCisJICAgIC0tZGhjcC1zY3JpcHQuCisKKwkgICAgRXNjYXBlIHNwYWNlcyBpbiBob3N0bmFtZXMgd2hlbiB0aGV5IGFyZSBzdG9yZWQgaW4gdGhlCisJICAgIGxlYXNlcyBmaWxlIGFuZCBwYXNzZWQgdG8gdGhlIGxlYXNlLWNoYW5nZQorCSAgICBzY3JpcHQuIFN1Z2dlc3Rpb24gZnJvbSBCZW4gVm9pZ3QuCisKKwkgICAgUmUtcnVuIHRoZSBsZWFzZSBjaGFtZ2Ugc2NyaXB0IHdpdGggYW4gIm9sZCIgZXZlbnQgZm9yCisJICAgIGVhY2ggbGVhc2Ugd2hlbiBkbnNtYXNxIHJlY2VpdmVzIGEgU0lHSFVQLgorCisJICAgIEFkZGVkIG1vcmUgdXNlZnVsIGV4aXQgY29kZXMsIGluY2x1ZGluZyBwYXNzaW5nIG9uIGEKKwkgICAgbm9uLXplcm8gZXhpdCBjb2RlIGZyb20gdGhlIGxlYXNlLXNjcmlwdCAiaW5pdCIgY2FsbCB3aGVuCisJICAgIC0tbGVhc2VmaWxlLXJvIGlzIHNldC4KKworCSAgICBMb2cgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSB3aGlsc3QgdGhlIGRhZW1vbiBpcworCSAgICBydW5uaW5nLiBBbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyBzdGFydHVwIGFyZSBmYXRhbCwgCisJICAgIGJ1dCBsYWNrIG9mIG1lbW9yeSB3aGlsc3QgcnVubmluZyBpcyB3b3JrZWQgYXJvdW5kLgorCSAgICBUaGlzIHVzZWQgdG8gYmUgc2lsZW50LCBidXQgbm93IGlzIGxvZ2dlZC4KKworCSAgICBGaXhlZCBtaXNhbGlnbmVkIG1lbW9yeSBhY2Nlc3Mgd2hpY2ggY2F1c2VkIHByb2JsZW1zIG9uCisJICAgIEJsYWNrZmluIENQVXMuIFRoYW5rcyB0byBBbGV4IExhbmRhdSBmb3IgdGhlIHBhdGNoLgorCisJICAgIERvbid0IGluY2x1ZGUgKHVzZWxlc3MpIHNjcmlwdC1jYWxsaW5nIGNvZGUgd2hlbiBOT19GT1JLCisJICAgIGlzIHNldC4gU2luY2UgdGhpcyB0ZW5kcyB0byBiZSB1c2VkIG9uIHZlcnkgc21hbGwgdWNsaW51eCAKKwkgICAgc3lzdGVtcywgaXQncyB3b3J0aC13aGlsZSB0byBzYXZlIHNvbWUgY29kZS1zaXplLgorCisJICAgIERvbid0IHNldCBSRVVTRUFERFIgb24gVEZUUCBsaXN0ZW5pbmcgc29ja2V0LiBUaGVyZSdzIG5vCisJICAgIG5lZWQgdG8gZG8gc28sIGFuZCBpdCBjcmVhdGVzIGNvbmZ1c2luZyBiZWhhdmlvdXIgd2hlbgorCSAgICBpbmV0ZCBpcyBhbHNvIGxpc3RlbmluZyBvbiB0aGUgc2FtZSBwb3J0LiBUaGFua3MgdG8gRXJpaworCSAgICBCcm93biBmb3Igc3BvdHRpbmcgdGhlIHByb2JsZW0uCisKK3ZlcnNpb24gMi40MQorICAgICAgICAgICAgUmVtb3ZlIGRlcHJlY2F0ZWQgY2FsbHMgd2hlbiBjb21waWxlZCBhZ2FpbnN0IGxpYmRidXMgMS4xLgorCSAgICAKKwkgICAgRml4ICJzdHJpY3QtYWxpYXMiIHdhcm5pbmcgaW4gYnBmLmMKKworCSAgICBSZWR1Y2UgZGVwZW5kZW5jeSBvbiBHbnUtbWFrZSBpbiBidWlsZCBzeXN0ZW06IGRuc21hc3Egbm93CisJICAgIGJ1aWxkcyB3aXRoIHN5c3RlbSBtYWtlIHVuZGVyIE9wZW5CU0QuCisKKwkgICAgUG9ydCB0byBTb2xhcmlzLiBEbnNtYXNxIDEueCB1c2VkIHRvIHJ1biB1bmRlciBTb2xhcmlzLAorCSAgICBhbmQgdGhpcyByZWxlYXNlIGRvZXMgc28gYWdhaW4sIGZvciBTb2xhcmlzIDkgb3IgYmV0dGVyLgorCisJICAgIEFsbG93IHRoZSBETlMgZnVuY3Rpb24gdG8gYmUgY29tcGxldGVseSBkaXNhYmxlZCwgYnkKKwkgICAgc2V0dGluZyB0aGUgcG9ydCB0byB6ZXJvICItLXBvcnQ9MCIuIFRoZSBhbGxvd3MgZG5zbWFzcSB0bworCSAgICBiZSB1c2VkIGFzIGEgc2ltcGxlIERIQ1Agc2VydmVyLCBzaW1wbGUgVEZUUCBzZXJ2ZXIsIG9yCisJICAgIGJvdGgsIGJ1dCB3aXRob3V0IHRoZSBETlMgc2VydmVyIGdldHRpbmcgaW4gdGhlIHdheS4KKworCSAgICBGaXggYSBidWcgd2hlcmUgTlhET01BSU4gY291bGQgYmUgcmV0dXJuZWQgZm9yIGEgcXVlcnkKKwkgICAgZXZlbiBpZiB0aGUgbmFtZSdzIHZhbHVlIHdhcyBrbm93biBmb3IgYSBkaWZmZXJlbnQgcXVlcnkKKwkgICAgdHlwZS4gVGhpcyBidWcgY291bGQgYmUgcHJvZGRlZCB3aXRoIAorICAgICAgICAgICAgLS1sb2NhbD0vZG9tYWluLyAtLWFkZHJlc3M9L25hbWUuZG9tYWluLzEuMi4zLjQgCisJICAgIEFuIElQdjYgcXVlcnkgZm9yIG5hbWUuZG9tYWluIHdvdWxkIHJldHVybiBOWERPTUFJTiwgYW5kCisJICAgIG5vdCB0aGUgY29ycmVjdCBOT0VSUk9SLiBUaGFua3MgdG8gTGFycyBOb29kZW4gZm9yCisJICAgIHNwb3R0aW5nIHRoZSBidWcgYW5kIEppbWEgZm9yIGRpYWdub3NpcyBvZiB0aGUgcHJvYmxlbS4KKworCSAgICBBZGRlZCBwZXItc2VydmVyIHN0YXRzIHRvIHRoZSBpbmZvcm1hdGlvbiBsb2dnZWQgd2hlbgorCSAgICBkbnNtYXNxIGdldHMgU0lHVVNSMS4KKworCSAgICBBZGRlZCBjb3VudHMgb2YgcXVlcmllcyBmb3J3YXJkZWQgYW5kIHF1ZXJpZXMgYW5zd2VyZWQKKwkgICAgbG9jYWxseSAoZnJvbSB0aGUgY2FjaGUsIC9ldGMvaG9zdHMgb3IgY29uZmlnKS4KKworCSAgICBGaXhlZCBwb3NzaWJsZSBjcmFzaCBidWcgaW4gREJ1cyBJUHY2IGNvZGUuIFRoYW5rcyB0byBNYXR0CisJICAgIERvbXNjaCBhbmQgSmltYS4KKworCSAgICBUaWdodGVuIGNoZWNrcyBmb3IgY2xhc2hlcyBiZXR3ZWVuIGhvc3RzLWZpbGUgYW5kCisJICAgIERIQ1AtZGVyaXZlZCBuYW1lcy4gTXVsdGlwbGUgYWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCBhCisJICAgIG5hbWUgaW4gaG9zdHMtZmlsZSBubyBsb25nZXIgY29uZnVzZXMgdGhlIGNoZWNrLgorCisJICAgIEFkZCAtLWRoY3Atbm8tb3ZlcnJpZGUgb3B0aW9uIHRvIGZpeCBwcm9ibGVtcyB3aXRoIHNvbWUKKwkgICAgY29tYmluYXRpb25zIG9mIHN0YWdlIHplcm8gYW5kIHN0YWdlIG9uZQorCSAgICBib290bG9hZGVycy4gVGhhbmtzIHRvIFN0ZXZlIEFsZXhhbmRlciBmb3IgdGhlIGJ1ZyByZXBvcnQuCisgIAorCSAgICBBZGQgLS10ZnRwLXBvcnQtcmFuZ2Ugb3B0aW9uLiBUaGFua3MgdG8gRGFuaWVsIE1pZXJzd2EgZm9yCisJICAgIHRoZSBzdWdnZXN0aW9uLgorIAorCSAgICBBZGQgLS1zdG9wLWRucy1yZWJpbmQgb3B0aW9uLiBUaGFua3MgdG8gQ29sbGluIE11bGxpbmVyCisJICAgIGZvciB0aGUgcGF0Y2guCisKKwkgICAgQWRkZWQgR1BMIHZlcnNpb24gMyBhcyBhIGxpY2Vuc2Ugb3B0aW9uLgorIAorCSAgICBBZGRlZCAtLWFsbC1zZXJ2ZXJzIG9wdGlvbi4gVGhhbmtzIHRvIFBldGVyIE5hdWxscyBmb3IgdGhlCisJICAgIHBhdGNoLgorCisJICAgIEV4dGVuZCBzb3VyY2UgYWRkcmVzcyBtZWNoYW5pc20gc28gdGhhdCB0aGUgaW50ZXJmYWNlIHVzZWQKKwkgICAgdG8gY29udGFjdCBhbiB1cHN0cmVhbSBETlMgc2VydmVyIGNhbiBiZSBuYWlsZWQKKwkgICAgZG93bi4gU29tZXRoaW5nIGxpa2UgIi0tc2VydmVyPTEuMi4zLjRAZXRoMSIgd2lsbCBmb3JjZQorCSAgICB0aGUgdXNlIG9mIGV0aDEgZm9yIHRyYWZmaWMgdG8gRE5TLXNlcnZlciAxLjIuMy40LiBUaGlzCisJICAgIGZhY2lsaXR5IGlzIG9ubHkgYXZhaWxhYmxlIG9uIExpbnV4IGFuZCBTb2xhcmlzLiBUaGFua3MgdG8KKwkgICAgUGV0ZXIgTmF1bGxzIGZvciBwcm9tcHRpbmcgdGhpcy4JICAgICAKKwkKKwkgICAgQWRkIC0tZGhjcC1vcHRzZmlsZSBvcHRpb24uIFRoYW5rcyB0byBDYXJsb3MgQ2FydmFsaG8gZm9yCisgICAgICAgICAgICB0aGUgc3VnZ2VzdGlvbi4KKworCSAgICBGaXhlZCBmYWlsdXJlIHRvIHNldCBzb3VyY2UgYWRkcmVzcyBmb3Igc2VydmVyIGNvbm5lY3Rpb25zCisJICAgIHdoZW4gdXNpbmcgVENQLiBUaGFua3MgdG8gU2ltb24gQ2FwcGVyIGZvciBmaW5kaW5nIHRoaXMKKwkgICAgYnVnLgorCisJICAgIFJlZnVzZSB0byBnaXZlIGEgREhDUCBjbGllbnQgdGhlIGFkZHJlc3MgaXQgYXNrcyBmb3IgaWYKKwkgICAgdGhlIGFkZHJlc3MgcmFuZ2UgaW4gcXVlc3Rpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGF0CisJICAgIHBhcnRpY3VsYXIgaG9zdC4gVGhhbmtzIHRvIENlZHJpYyBEdXZhbCBmb3IgdGhlIGJ1ZworCSAgICByZXBvcnQuIAorCisJICAgIENoYW5nZWQgYmVoYXZpb3Igb2YgREhDUCBzZXJ2ZXIgdG8gYWx3YXlzIHJldHVybiB0b3RhbCBsZW5ndGggb2YKKwkgICAgYSBuZXcgbGVhc2UgaW4gREhDUE9GRkVSLCBldmVuIGlmIGFuIGV4aXN0aW5nIGxlYXNlCisJICAgIGV4aXN0cy4gKEl0IHVzZWQgdG8gcmV0dXJuIHRoZSB0aW1lIHJlbWFpbmluZyBvbiB0aGUgbGVhc2UKKwkgICAgd2huZSBvbmUgZXhpc3RlZC4pIFRoaXMgZml4ZXMgcHJvYmxlbXMgd2l0aCB0aGUgU29ueSBFcmljc3NvbgorCSAgICBLNjEwaSBwaG9uZS4gVGhhbmtzIHRvIEhha29uIFN0b3JkYWhsIGZvciBmaW5kaW5nIGFuZAorCSAgICBmaXhpbmcgdGhpcy4KKworCSAgICBBZGQgRE5TTUFTUV9JTlRFUkZBQ0UgdG8gdGhlIGVudmlyb25tZW50IG9mIHRoZQorCSAgICBsZWFzZS1jaGFuZ2Ugc2NyaXB0LiBUaGFua3MgdG8gTmlrb3MgTWF2cm9naWFubm9wb3Vsb3MgZm9yCisJICAgIHRoZSBwYXRjaC4KKworCSAgICBGaXhlZCBicm9rZW4gLS1hbGlhcyBmdW5jdGlvbmFsaXR5LiBUaGFua3MgdG8gTWljaGFlbAorCSAgICBNZWVsaXMgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEFkZGVkIEZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgbWFuIHBhZ2UuIFRoYW5rIHRvIEdpbGRhcworCSAgICBMZSBOYWRhbiBmb3IgdGhhdC4KKworCSAgICBBZGQgLS1kaGNwLW1hdGNoIGZsYWcsIHRvIGNoZWNrIGZvciBhcmJpdHJhcnkgb3B0aW9ucyBpbgorCSAgICBESENQIG1lc3NhZ2VzIGZyb20gY2xpZW50cy4gVGhpcyBlbmFibGVzIHVzZSBvZiBkbnNtYXNxCisJICAgIHdpdGggZ1BYRS4gVGhhbmtzIHRvIFJhbmNlIEhhbGwgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisJICAgIEFkZGVkIC0tZGhjcC1icm9hZGNhc3QsIHRvIGZvcmNlIGJyb2FkY2FzdCByZXBsaWVzIHRvIERIQ1AKKwkgICAgY2xpZW50cyB3aGljaCBuZWVkIHRoZW0gYnV0IGFyZSB0b28gZHVtYiBvciB0b28gb2xkIHRvCisJICAgIGFzay4gVGhhbmtzIHRvIEJvZG8gQmVsbHV0IGZvciB0aGUgc3VnZ2VzdGlvbi4KKworCSAgICBEaXNhYmxlIHBhdGgtTVRVIGRpc2NvdmVyeSBvbiBESENQIGFuZCBURlRQIHNvY2tldHMuIFRoaXMKKwkgICAgaXMgbmV2ZXIgbmVlZGVkLCBhbmQgdGhlIHByZXNlbmNlIG9mIERGIGZsYWdzIGluIHRoZSBJUAorCSAgICBoZWFkZXIgY29uZnVzZXMgc29tZSBicm9rZW4gUFhFIFJPTVMuIFRoYW5rcyBhZ2FpbiB0byBCb2RvCisJICAgIEJlbGx1dCBmb3Igc3BvdHRpbmcgdGhpcy4KKworCSAgICBGaXggcHJvYmxlbXMgd2l0aCBhZGRyZXNzZXMgd2hpY2ggaGF2ZSBtdWx0aXBsZSBQVFIKKwkgICAgcmVjb3JkcyAtIGFsbCBidXQgb25lIG9mIHRoZXNlIGNvdWxkIGdldCBsb3N0LiAKKworCSAgICBGaXggYnVnIHdpdGggLS1hZGRyZXNzIGFuZCBBTlkgcXVlcnkgdHlwZSBzZWVpbmcgUkVGVVNFRAorCSAgICByZXR1cm4gY29kZSBpbiByZXBsaWVzLiBUaGFua3MgdG8gTWlrZSBXcmlnaHQgZm9yIHNwb3R0aW5nCisJICAgIHRoZSBwcm9ibGVtLgorCisJICAgIFVwZGF0ZSBTcGFuaXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gQ2hyaXMgQ2hhdGhhbS4KKworCSAgICBBZGQgLS1uZWctdHRsIG9wdGlvbi4KKwkgICAgCisJICAgIEFkZCB3YXJuaW5ncyBhYm91dCB0aGUgYmFkIGVmZmVjdHMgb2YgLS1maWx0ZXJ3aW4yayBvbgorCSAgICBTSVAsIFhNUFAgYW5kIEdvb2dsZS10YWxrIHRvIHRoZSBleGFtcGxlIGNvbmZpZyBmaWxlLgorCSAgICAKKwkgICAgRml4IHZhX2xpc3QgYWJ1c2UgaW4gbG9nLmMuIFRoaXMgZml4ZXMgY3Jhc2hlcyBvbiBwb3dlcnBjCisJICAgIHdoZW4gZGVidWcgbW9kZSBpcyBzZXQuIFRoYW5rcyB0byBDZWRyaWMgRHV2YWwgZm9yIHRoZQorCSAgICBwYXRjaC4gCisKK3ZlcnNpb24gMi40MgorICAgICAgICAgICAgRGVmaW5lIF9HTlVfU09VUkNFIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggbGF0ZXIgZ2xpYmMKKyAgICAgICAgICAgIGhlYWRlcnMuIFRoYW5rcyB0byBKaW1hIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbS4KKworCSAgICBBZGQgLS1kaGNwLWFsdGVybmF0ZS1wb3J0IG9wdGlvbi4gVGhhbmtzIHRvIEphbiBQc290YSBmb3IKKwkgICAgdGhlIHN1Z2dlc3Rpb24uCisKKwkgICAgRml4IHR5cG8gaW4gY29kZSB3aGljaCBpcyBvbmx5IHVzZWQgb24gQlNELCB3aGVuIERidXMgYW5kCisJICAgIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkLiBUaGFua3MgdG8gUm95IE1hcnBsZXMuCisJICAgIAorCSAgICBVcGRhdGVkIFBvbGlzaCB0cmFuc2xhdGlvbnMgLSB0aGFuayB0byBKYW4gUHNvdGEuCisKKwkgICAgRml4IE9TIGRldGVjdGlvbiBsb2dpYyB0byBjb3BlIHdpdGggR05VL0ZyZWVCU0QuCisKKwkgICAgRml4IHVuaXRpYWxpc2VkIHZhcmlhYmxlIGluIERCdXMgY29kZSAtIHRoYW5rcyB0byBSb3kKKwkgICAgTWFycGxlcy4KKworCSAgICBGaXggbmV0d29yayBlbnVtZXJhdGlvbiBjb2RlIHRvIHdvcmsgb24gbGF0ZXIgTmV0QlNEIC0KKwkgICAgdGhhbmtzIHRvIFJveSBNYXJwbGVzLgorCSAgICAKKwkgICAgUHJvdmlkZSAtLWRoY3AtYnJpZGdlIG9uIGFsbCBCU0QgdmFyaWFudHMuCisKKwkgICAgRGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIHdoaWNoIHJlbW92ZXMgYW4gYXJiaXRyYXJ5IDJHQgorICAgICAgICAgICAgbGltaXQgb24gbG9nZmlsZXMuIFRoYW5rcyB0byBQYXVsIENoYW1iZXJzIGZvciBzcG90dGluZyAKKyAgICAgICAgICAgIHRoZSBwcm9ibGVtLgorCisJICAgIEZpeCBSRkMzMDQ2IGFnZW50LWlkIGVjaG8gY29kZSwgYnJva2VuIGZvciBtYW55CisJICAgIHJlbGVhc2VzLiBUaGFua3MgdG8gSmVyZW15IExhaW5lIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbQorCSAgICBhbmQgcHJvdmlkaW5nIGEgcGF0Y2guCisKKwkgICAgQWRkZWQgU29sYXJpcyAxMCBzZXJ2aWNlIG1hbmlmZXN0IGZyb20gRGF2aWQgQ29ubmVsbHkgaW4KKwkgICAgY29udHJpYi9Tb2xhcmlzMTAKKyAJICAgIAkgICAgIAorCSAgICBBZGQgLS1kaGNwLXNjcmlwdHVzZXIgb3B0aW9uLgkgICAgCisKKwkgICAgU3VwcG9ydCBuZXcgY2FwYWJpbGl0eSBpbnRlcmZhY2Ugb24gc3VpdGFibGUgTGludXggCisJICAgIGtlcm5lbHMsIHJlbW92ZXMgImxlZ2FjeSBzdXBwb3J0IGluIHVzZSIgbWVzc2FnZXMuIFRoYW5rcyAKKyAgICAgICAgICAgIHRvIEpvcmdlIEJhc3RvcyBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuIAorCisJICAgIEZpeCBzdWJ0bGUgYnVnIGluIGNhY2hlIGNvZGUgd2hpY2ggY291bGQgY2F1c2UgZG5zbWFzcSB0bworCSAgICBsb2NrIHNwaW5uaW5nIENQVSBpbiByYXJlIGNpcmN1bXN0YW5jZXMuIFRoYW5rcyB0byBBbGV4CisJICAgIENoZWtob2xrbyBmb3IgYnVnIHJlcG9ydHMgYW5kIGhlbHAgZGVidWdnaW5nLiAKKworCSAgICBTdXBwb3J0IG5ldGFzY2lpIHRyYW5zZmVyIG1vZGUgZm9yIFRGVFAuCisKZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwNTQ5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9DT1BZSU5HCkBAIC0wLDAgKzEsMzQwIEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICAgICAgICAgICAgICAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKwwKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKwwKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorDAorICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorDAorICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSAxOXl5ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIDE5eXkgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL0NPUFlJTkctdjMgYi9DT1BZSU5HLXYzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0YTllZDAKLS0tIC9kZXYvbnVsbAorKysgYi9DT1BZSU5HLXYzCkBAIC0wLDAgKzEsNjc0IEBACisgICAgICAgICAgICAgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CisKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9yCitzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkCit0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCit0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0bworc2hhcmUgYW5kIGNoYW5nZSBhbGwgdmVyc2lvbnMgb2YgYSBwcm9ncmFtLS10byBtYWtlIHN1cmUgaXQgcmVtYWlucyBmcmVlCitzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9zdCBvZiBvdXIgc29mdHdhcmU7IGl0IGFwcGxpZXMgYWxzbyB0bworYW55IG90aGVyIHdvcmsgcmVsZWFzZWQgdGhpcyB3YXkgYnkgaXRzIGF1dGhvcnMuICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3UKK3dhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CitmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKK3RoZXNlIHJpZ2h0cyBvciBhc2tpbmcgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiAgVGhlcmVmb3JlLCB5b3UgaGF2ZQorY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmCit5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKK2ZyZWVkb21zIHRoYXQgeW91IHJlY2VpdmVkLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlCitvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleQora25vdyB0aGVpciByaWdodHMuCisKKyAgRGV2ZWxvcGVycyB0aGF0IHVzZSB0aGUgR05VIEdQTCBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOgorKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKK2dpdmluZyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgaXQuCisKKyAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCit0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgc29mdHdhcmUuICBGb3IgYm90aCB1c2VycycgYW5kCithdXRob3JzJyBzYWtlLCB0aGUgR1BMIHJlcXVpcmVzIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgYmUgbWFya2VkIGFzCitjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KK2F1dGhvcnMgb2YgcHJldmlvdXMgdmVyc2lvbnMuCisKKyAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgorbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIHNvZnR3YXJlIGluc2lkZSB0aGVtLCBhbHRob3VnaCB0aGUgbWFudWZhY3R1cmVyCitjYW4gZG8gc28uICBUaGlzIGlzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIGFpbSBvZgorcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKK3BhdHRlcm4gb2Ygc3VjaCBhYnVzZSBvY2N1cnMgaW4gdGhlIGFyZWEgb2YgcHJvZHVjdHMgZm9yIGluZGl2aWR1YWxzIHRvCit1c2UsIHdoaWNoIGlzIHByZWNpc2VseSB3aGVyZSBpdCBpcyBtb3N0IHVuYWNjZXB0YWJsZS4gIFRoZXJlZm9yZSwgd2UKK2hhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQorcHJvZHVjdHMuICBJZiBzdWNoIHByb2JsZW1zIGFyaXNlIHN1YnN0YW50aWFsbHkgaW4gb3RoZXIgZG9tYWlucywgd2UKK3N0YW5kIHJlYWR5IHRvIGV4dGVuZCB0aGlzIHByb3Zpc2lvbiB0byB0aG9zZSBkb21haW5zIGluIGZ1dHVyZSB2ZXJzaW9ucworb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCisKKyAgRmluYWxseSwgZXZlcnkgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4KK1N0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgorc29mdHdhcmUgb24gZ2VuZXJhbC1wdXJwb3NlIGNvbXB1dGVycywgYnV0IGluIHRob3NlIHRoYXQgZG8sIHdlIHdpc2ggdG8KK2F2b2lkIHRoZSBzcGVjaWFsIGRhbmdlciB0aGF0IHBhdGVudHMgYXBwbGllZCB0byBhIGZyZWUgcHJvZ3JhbSBjb3VsZAorbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKK3BhdGVudHMgY2Fubm90IGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBwcm9ncmFtIG5vbi1mcmVlLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisgICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgMC4gRGVmaW5pdGlvbnMuCisKKyAgIlRoaXMgTGljZW5zZSIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKK3dvcmtzLCBzdWNoIGFzIHNlbWljb25kdWN0b3IgbWFza3MuCisKKyAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCitMaWNlbnNlLiAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICAiTGljZW5zZWVzIiBhbmQKKyJyZWNpcGllbnRzIiBtYXkgYmUgaW5kaXZpZHVhbHMgb3Igb3JnYW5pemF0aW9ucy4KKworICBUbyAibW9kaWZ5IiBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrCitpbiBhIGZhc2hpb24gcmVxdWlyaW5nIGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZSBtYWtpbmcgb2YgYW4KK2V4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQorZWFybGllciB3b3JrIG9yIGEgd29yayAiYmFzZWQgb24iIHRoZSBlYXJsaWVyIHdvcmsuCisKKyAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLgorCisgIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKK3Blcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IKK2luZnJpbmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcgaXQgb24gYQorY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKK2Rpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlCitwdWJsaWMsIGFuZCBpbiBzb21lIGNvdW50cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuCisKKyAgVG8gImNvbnZleSIgYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlcgorcGFydGllcyB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzLiAgTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoCithIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgorCisgIEFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzICJBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIgordG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQorZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpCit0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZQorZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQord29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYKK3RoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9mIHVzZXIgY29tbWFuZHMgb3Igb3B0aW9ucywgc3VjaCBhcyBhCittZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgorCisgIDEuIFNvdXJjZSBDb2RlLgorCisgIFRoZSAic291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrCitmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICAiT2JqZWN0IGNvZGUiIG1lYW5zIGFueSBub24tc291cmNlCitmb3JtIG9mIGEgd29yay4KKworICBBICJTdGFuZGFyZCBJbnRlcmZhY2UiIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbAorc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgoraW50ZXJmYWNlcyBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb25lIHRoYXQKK2lzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLgorCisgIFRoZSAiU3lzdGVtIExpYnJhcmllcyIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCit0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgorcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgorQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0CitNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KK2ltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCisiTWFqb3IgQ29tcG9uZW50IiwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQKKyhrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0KKyhpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCitwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KKworICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCit0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCit3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvCitjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKK1N5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUKK3Byb2dyYW1zIHdoaWNoIGFyZSB1c2VkIHVubW9kaWZpZWQgaW4gcGVyZm9ybWluZyB0aG9zZSBhY3Rpdml0aWVzIGJ1dAord2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCitpbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIGZvcgordGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5CitsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKK3N1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlCitzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCB1c2VycworY2FuIHJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nCitTb3VyY2UuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0CitzYW1lIHdvcmsuCisKKyAgMi4gQmFzaWMgUGVybWlzc2lvbnMuCisKKyAgQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKK2NvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCitjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCitwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQorY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCitjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgorcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKKyAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdAorY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMKK2luIGZvcmNlLiAgWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2UKK29mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQord2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8KK25vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKK2ZvciB5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24KK2FuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZgoreW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KKworICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlcgordGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCittYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKworICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgorCisgIE5vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbAorbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCisxMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3IKK3NpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2gKK21lYXN1cmVzLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQKK2NpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgoraXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0bwordGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvcgorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKK3VzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZgordGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKworICA0LiBDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLgorCisgIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQorcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQorbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwKK3JlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCisgIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwKK2FuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCisKKyAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KKworICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCitwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZQordGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQKKyAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCisKKyAgICBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcworICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgorICAgIDcuICBUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8KKyAgICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgorCisgICAgYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMKKyAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNworICAgIGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsCisgICAgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8KKyAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CisgICAgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KKworICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CisgICAgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCisgICAgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIKKyAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KKworICBBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50Cit3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAorYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwKK2luIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4KKyJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAordXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycworYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCitpbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgorcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKworICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KKworICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcworb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCittYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbiBvbmUgb2YgdGhlc2Ugd2F5czoKKworICAgIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEKKyAgICB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcworICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAorICAgIG1vZGVsLCB0byBnaXZlIGFueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEKKyAgICBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0d2FyZSBpbiB0aGUKKyAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAorICAgIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8KKyAgICBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMKKyAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZS4KKworICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCisgICAgd3JpdHRlbiBvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoaXMKKyAgICBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZAorICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAorICAgIHdpdGggc3Vic2VjdGlvbiA2Yi4KKworICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCisgICAgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8KKyAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gIElmIHRoZSBwbGFjZSB0bworICAgIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQorICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQorICAgIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbgorICAgIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcworICAgIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisKKyAgICBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkCisgICAgeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcKKyAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCisgICAgY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuCisKKyAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCitmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZQoraW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgorCisgIEEgIlVzZXIgUHJvZHVjdCIgaXMgZWl0aGVyICgxKSBhICJjb25zdW1lciBwcm9kdWN0Iiwgd2hpY2ggbWVhbnMgYW55Cit0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwgZmFtaWx5LAorb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgoraW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0LAorZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuICBGb3IgYSBwYXJ0aWN1bGFyCitwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKK3R5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mIHByb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cworb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIKK2FjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAoraXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwKK2NvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50Cit0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKworICAiSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIiBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCitwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKK2FuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20KK2EgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGUgaW5mb3JtYXRpb24gbXVzdAorc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKK2NvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlCittb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4KKworICBJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvcgorc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKK3BhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQorVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQorZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCitieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkKK2lmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsCittb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCitiZWVuIGluc3RhbGxlZCBpbiBST00pLgorCisgIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKK3JlcXVpcmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3YXJyYW50eSwgb3IgdXBkYXRlcworZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IKK3RoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKK25ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kCithZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQKK3Byb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCisKKyAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsCitpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5Citkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbgorc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yCit1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KKworICA3LiBBZGRpdGlvbmFsIFRlcm1zLgorCisgICJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIiBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRpdGlvbnMuCitBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCitiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50Cit0aGF0IHRoZXkgYXJlIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiAgSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucworYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQordW5kZXIgdGhvc2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieQordGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KK3JlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZgoraXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgorcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3UgbWF5IHBsYWNlCithZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCitmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91CithZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCit0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKworICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQorICAgIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisKKyAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKKyAgICBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsCisgICAgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKKworICAgIGMpIFByb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwgb3IKKyAgICByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbgorICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKKworICAgIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IKKyAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKKworICAgIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUKKyAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKKworICAgIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQKKyAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgorICAgIGl0KSB3aXRoIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50LCBmb3IKKyAgICBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uCisgICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgorCisgIEFsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkICJmdXJ0aGVyCityZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CityZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcworZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyCityZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCithIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcworb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKK25vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLgorCisgIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKK211c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQorYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCit3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCisgIEFkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4gdGhlCitmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwordGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LgorCisgIDguIFRlcm1pbmF0aW9uLgorCisgIFlvdSBtYXkgbm90IHByb3BhZ2F0ZSBvciBtb2RpZnkgYSBjb3ZlcmVkIHdvcmsgZXhjZXB0IGFzIGV4cHJlc3NseQorcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyCit0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkCitwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCisKKyAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIKK2xpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQorcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZAorZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodAoraG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKK3ByaW9yIHRvIDYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lCittYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgorCisgIDkuIEFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgorCisgIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgorcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yaworb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KK3RvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCitub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiAgVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvCitub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKK2NvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCisKKyAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgorCisgIEVhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKK3JlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBZb3UgYXJlIG5vdCByZXNwb25zaWJsZQorZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKKyAgQW4gImVudGl0eSB0cmFuc2FjdGlvbiIgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgorb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgorb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKK3dvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0Cit0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKK2xpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAorZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgordGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgorCisgIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZQorcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKK25vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgorcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbgorKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKK2FueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvcgorc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LgorCisgIDExLiBQYXRlbnRzLgorCisgIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiAgVGhlCit3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICJjb250cmlidXRvciB2ZXJzaW9uIi4KKworICBBIGNvbnRyaWJ1dG9yJ3MgImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zIiBhcmUgYWxsIHBhdGVudCBjbGFpbXMKK293bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZAorYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLAorYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEKK2NvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCitwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKK3BhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgordGhpcyBMaWNlbnNlLgorCisgIEVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KK21ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KKworICBJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgInBhdGVudCBsaWNlbnNlIiBpcyBhbnkgZXhwcmVzcworYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50Cisoc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCitzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gImdyYW50IiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQorcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKK3BhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KKworICBJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLAorYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKK3RvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEKK3B1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCit0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCithdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlCitwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lcgorY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudAorbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuICAiS25vd2luZ2x5IHJlbHlpbmciIG1lYW5zIHlvdSBoYXZlCithY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKK2NvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2luIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdAorY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKworICBJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yCithcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhCitjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKK3JlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeQorb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZQoreW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKK3dvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgordGhlIHNjb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMKK2NvbmRpdGlvbmVkIG9uIHRoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZQorc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAord29yayBpZiB5b3UgYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMKK2luIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQKK3RvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCit0aGUgd29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUKK3BhcnRpZXMgd2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeQorcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yaworY29udmV5ZWQgYnkgeW91IChvciBjb3BpZXMgbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkKK2ZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0Citjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCitvciB0aGF0IHBhdGVudCBsaWNlbnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LgorCisgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKK2FueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5CitvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuCisKKyAgMTIuIE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uCisKKyAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QgY29udmV5IGEKK2NvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkKK25vdCBjb252ZXkgaXQgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhZ3JlZSB0byB0ZXJtcyB0aGF0IG9ibGlnYXRlIHlvdQordG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5Cit0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMKK0xpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGNvbnZleWluZyB0aGUgUHJvZ3JhbS4KKworICAxMy4gVXNlIHdpdGggdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCitwZXJtaXNzaW9uIHRvIGxpbmsgb3IgY29tYmluZSBhbnkgY292ZXJlZCB3b3JrIHdpdGggYSB3b3JrIGxpY2Vuc2VkCit1bmRlciB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnRvIGEgc2luZ2xlCitjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpbGwgY29udGludWUgdG8gYXBwbHkgdG8gdGhlIHBhcnQgd2hpY2ggaXMgdGhlIGNvdmVyZWQgd29yaywKK2J1dCB0aGUgc3BlY2lhbCByZXF1aXJlbWVudHMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3NlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKK2NvbWJpbmF0aW9uIGFzIHN1Y2guCisKKyAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgorCisgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mCit0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCisgIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlCitQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKK29wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkCit2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZAorYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlCit2ZXJzaW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncworcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQordG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCisKKyAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKK3Blcm1pc3Npb25zLiAgSG93ZXZlciwgbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9ucyBhcmUgaW1wb3NlZCBvbiBhbnkKK2F1dGhvciBvciBjb3B5cmlnaHQgaG9sZGVyIGFzIGEgcmVzdWx0IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEKK2xhdGVyIHZlcnNpb24uCisKKyAgMTUuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKKyAgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQorQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVAorSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQorT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQorSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GCitBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTYuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCisgIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNT0RJRklFUyBBTkQvT1IgQ09OVkVZUworVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZCitHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKK1VTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YKK0RBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJECitQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKK0VWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFUy4KKworICAxNy4gSW50ZXJwcmV0YXRpb24gb2YgU2VjdGlvbnMgMTUgYW5kIDE2LgorCisgIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAorYWJvdmUgY2Fubm90IGJlIGdpdmVuIGxvY2FsIGxlZ2FsIGVmZmVjdCBhY2NvcmRpbmcgdG8gdGhlaXIgdGVybXMsCityZXZpZXdpbmcgY291cnRzIHNoYWxsIGFwcGx5IGxvY2FsIGxhdyB0aGF0IG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMKK2FuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKK1Byb2dyYW0sIHVubGVzcyBhIHdhcnJhbnR5IG9yIGFzc3VtcHRpb24gb2YgbGlhYmlsaXR5IGFjY29tcGFuaWVzIGEKK2NvcHkgb2YgdGhlIFByb2dyYW0gaW4gcmV0dXJuIGZvciBhIGZlZS4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CitzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKKyAgSWYgdGhlIHByb2dyYW0gZG9lcyB0ZXJtaW5hbCBpbnRlcmFjdGlvbiwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydAorbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgPHByb2dyYW0+ICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgeW91ciBwcm9ncmFtJ3MgY29tbWFuZHMKK21pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KKworICBZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3Igc2Nob29sLAoraWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdyB0aGUgR05VIEdQTCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbQoraW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91CittYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKK3RoZSBsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuICBCdXQgZmlyc3QsIHBsZWFzZSByZWFkCis8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+LgpkaWZmIC0tZ2l0IGEvRkFRIGIvRkFRCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1MWMzMWUKLS0tIC9kZXYvbnVsbAorKysgYi9GQVEKQEAgLTAsMCArMSw0NzEgQEAKK1E6IFdoeSBkb2VzIGRuc21hc3Egb3BlbiBVRFAgcG9ydHMgPjEwMjQgYXMgd2VsbCBhcyBwb3J0IDUzLgorICAgSXMgdGhpcyBhIHNlY3VyaXR5IHByb2JsZW0vdHJvamFuL2JhY2tkb29yPworCitBOiBUaGUgaGlnaCBwb3J0cyB0aGF0IGRuc21hc3Egb3BlbnMgYXJlIGZvciByZXBsaWVzIGZyb20gdGhlIHVwc3RyZWFtCisgICBuYW1lc2VydmVyKHMpLiBRdWVyaWVzIGZyb20gZG5zbWFzcSB0byB1cHN0cmVhbSBuYW1lc2VydmVycyBhcmUgc2VudAorICAgZnJvbSB0aGVzZSBwb3J0cyBhbmQgcmVwbGllcyByZWNlaXZlZCB0byB0aGVtLiBUaGUgcmVhc29uIGZvciBkb2luZyB0aGlzIGlzCisgICB0aGF0IG1vc3QgZmlyZXdhbGwgc2V0dXBzIGJsb2NrIGluY29taW5nIHBhY2tldHMgX3RvXyBwb3J0IDUzLCBpbiBvcmRlcgorICAgdG8gc3RvcCBETlMgcXVlcmllcyBmcm9tIHRoZSBvdXRzaWRlIHdvcmxkLiBJZiBkbnNtYXNxIHNlbnQgaXRzIHF1ZXJpZXMKKyAgIGZyb20gcG9ydCA1MyB0aGUgcmVwbGllcyB3b3VsZCBiZSBfdG9fIHBvcnQgNTMgYW5kIGdldCBibG9ja2VkLgorCisgICBUaGlzIGlzIG5vdCBhIHNlY3VyaXR5IGhvbGUgc2luY2UgZG5zbWFzcSB3aWxsIG9ubHkgYWNjZXB0IHJlcGxpZXMgdG8gdGhhdAorICAgcG9ydDogcXVlcmllcyBhcmUgIGRyb3BwZWQuIFRoZSByZXBsaWVzIG11c3QgYmUgdG8gb3VzdGFuZGluZyBxdWVyaWVzCisgICB3aGljaCBkbnNtYXNxIGhhcyBmb3J3YXJkZWQsIG90aGVyd2lzZSB0aGV5IGFyZSBkcm9wcGVkIHRvby4KKyAKKyAgIEFkZGVuZHVtOiBkbnNtYXNxIG5vdyBoYXMgdGhlIG9wdGlvbiAicXVlcnktcG9ydCIgKC1RKSwgd2hpY2ggYWxsb3dzCisgICB5b3UgdG8gc3BlY2lmeSB0aGUgVURQIHBvcnQgdG8gYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiAgSWYgbm90CisgICBzcGVjaWZpZWQsIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgc2VsZWN0IGFuIGF2YWlsYWJsZSBwb3J0IG51bWJlcgorICAganVzdCBhcyBpdCBkaWQgYmVmb3JlLgorCisgICBTZWNvbmQgYWRkZW5kdW06IGZvbGxvd2luZyB0aGUgZGlzY292ZXJ5IG9mIGEgc2VjdXJpdHkgZmxhdyBpbiB0aGUKKyAgIEROUyBwcm90b2NvbCwgZG5zbWFzcSBmcm9tIHZlcnNpb24gMi40MyBoYXMgY2hhbmdlZCBiZWhhdmlvci4gSXQKKyAgIG5vdyB1c2VzIGEgbmV3LCByYW5kb21seSBzZWxlY3RlZCwgcG9ydCBmb3IgZWFjaCBxdWVyeS4gVGhlIG9sZAorICAgZGVmYXVsdCBiZWhhdmlvdXIgKHVzZSBvbmUgcG9ydCBhbGxvY2F0ZWQgYnkgdGhlIE9TKSBpcyBhdmFpbGFibGUgYnkKKyAgIHNldHRpbmcgLS1xdWVyeS1wb3J0PTAsIGFuZCBzZXR0aW5nIHRoZSBxdWVyeSBwb3J0IHRvIGEgcG9zaXRpdmUKKyAgIHZhbHVlIGlzIHN0aWxsIHdvcmtzLiBZb3Ugc2hvdWxkIHRoaW5rIGhhcmQgYW5kIGtub3cgd2hhdCB5b3UgYXJlCisgICBkb2luZyBiZWZvcmUgdXNpbmcgZWl0aGVyIG9mIHRoZXNlIG9wdGlvbnMuCisgCitROiBXaHkgZG9lc24ndCBkbnNtYXNxIHN1cHBvcnQgRE5TIHF1ZXJpZXMgb3ZlciBUQ1A/IERvbid0IHRoZSBSRkMncyBzcGVjaWZ5CisgICB0aGF0PworCitBOiBVcGRhdGU6IGZyb20gdmVyc2lvbiAyLjEwLCBpdCBkb2VzLiBUaGVyZSBhcmUgYSBmZXcgbGltaXRhdGlvbnM6CisgICBkYXRhIG9idGFpbmVkIHZpYSBUQ1AgaXMgbm90IGNhY2hlZCwgYW5kIHNvdXJjZS1hZGRyZXNzCisgICBvciBxdWVyeS1wb3J0IHNwZWNpZmljYXRpb25zIGFyZSBpZ25vcmVkIGZvciBUQ1AuCisKK1E6IFdoZW4gSSBzZW5kIFNJR1VTUjEgdG8gZHVtcCB0aGUgY29udGVudHMgb2YgdGhlIGNhY2hlLCBzb21lIGVudHJpZXMgaGF2ZQorICAgbm8gSVAgYWRkcmVzcyBhbmQgYXJlIGZvciBuYW1lcyBsaWtlIG15bWFjaGluZS5teWRvbWFpbi5jb20ubXlkb21haW4uY29tLgorICAgV2hhdCBhcmUgdGhlc2U/CisKK0E6IFRoZXkgYXJlIG5lZ2F0aXZlIGVudHJpZXM6IHRoYXQncyB3aGF0IHRoZSBOIGZsYWcgbWVhbnMuIERuc21hc3EgYXNrZWQgCisgICBhbiB1cHN0cmVhbSBuYW1lc2VydmVyIHRvIHJlc29sdmUgdGhhdCBhZGRyZXNzIGFuZCBpdCByZXBsaWVkICJkb2Vzbid0IAorICAgZXhpc3QsIGFuZCB3b24ndCBleGlzdCBmb3IgPG4+IGhvdXJzIiBzbyBkbnNtYXNxIHNhdmVkIHRoYXQgaW5mb3JtYXRpb24gc28KKyAgIHRoYXQgaWYgX2l0XyBnZXRzIGFza2VkIHRoZSBzYW1lIHF1ZXN0aW9uIGl0IGNhbiBhbnN3ZXIgZGlyZWN0bHkgd2l0aG91dAorICAgaGF2aW5nIHRvIGdvIGJhY2sgdG8gdGhlIHVwc3RyZWFtIHNlcnZlciBhZ2Fpbi4gVGhlIHN0cmFuZ2UgcmVwZWF0ZWQgZG9tYWlucworICAgcmVzdWx0IGZyb20gdGhlIHdheSByZXNvbHZlcnMgc2VhcmNoIHNob3J0IG5hbWVzLiBTZWUgIm1hbiByZXNvbHYuY29uZiIgZm9yCisgICBkZXRhaWxzLgorCisKK1E6IFdpbGwgZG5zbWFzcSBjb21waWxlL3J1biBvbiBub24tTGludXggc3lzdGVtcz8KKworQTogWWVzLCB0aGVyZSBpcyBleHBsaWNpdCBzdXBwb3J0IGZvciAqQlNEIGFuZCBNYWNPUyBYIGFuZCBTb2xhcmlzLiAKKyAgIFRoZXJlIGFyZSBzdGFydC11cCBzY3JpcHRzIGZvciBNYWNPUyBYIFRpZ2VyIGFuZCBQYW50aGVyIAorICAgaW4gL2NvbnRyaWIuIERuc21hc3Egd2lsbCBsaW5rIHdpdGggdWNsaWJjIHRvIHByb3ZpZGUgc21hbGwKKyAgIGJpbmFyaWVzIHN1aXRhYmxlIGZvciB1c2UgaW4gZW1iZWRkZWQgc3lzdGVtcyBzdWNoIGFzCisgICByb3V0ZXJzLiAoVGhlcmUncyBzcGVjaWFsIGNvZGUgdG8gc3VwcG9ydCBtYWNoaW5lcyB3aXRoIGZsYXNoCisgICBmaWxlc3lzdGVtcyBhbmQgbm8gYmF0dGVyeS1iYWNrZWQgUlRDLikKKyAgIElmIHlvdSBlbmNvdW50ZXIgbWFrZSBlcnJvcnMgd2l0aCAqQlNELCB0cnkgaW5zdGFsbGluZyBnbWFrZSBmcm9tCisgICBwb3J0cyBhbmQgYnVpbGRpbmcgZG5zbWFzcSB3aXRoICJtYWtlIE1BS0U9Z21ha2UiIAorICAgRm9yIG90aGVyIHN5c3RlbXMsIHRyeSBhbHRlcmluZyB0aGUgc2V0dGluZ3MgaW4gY29uZmlnLmguCisgCitROiBNeSBjb21wYW55J3MgbmFtZXNlcnZlciBrbm93cyBhYm91dCBzb21lIG5hbWVzIHdoaWNoIGFyZW4ndCBpbiB0aGUKKyAgIHB1YmxpYyBETlMuIEV2ZW4gdGhvdWdoIEkgcHV0IGl0IGZpcnN0IGluIC9ldGMvcmVzb2x2LmNvbmYsIGl0CisgICBkb3Nlbid0IHdvcms6IGRuc21hc3Egc2VlbXMgbm90IHRvIHVzZSB0aGUgbmFtZXNlcnZlcnMgaW4gdGhlIG9yZGVyCisgICBnaXZlbi4gV2hhdCBhbSBJIGRvaW5nIHdyb25nPworCitBOiBCeSBkZWZhdWx0LCBkbnNtYXNxIHRyZWF0cyBhbGwgdGhlIG5hbWVzZXJ2ZXJzIGl0IGtub3dzIGFib3V0IGFzCisgICBlcXVhbDogaXQgcGlja3MgdGhlIG9uZSB0byB1c2UgdXNpbmcgYW4gYWxnb3JpdGhtIGRlc2lnbmVkIHRvIGF2b2lkIAorICAgbmFtZXNlcnZlcnMgd2hpY2ggYXJlbid0IHJlc3BvbmRpbmcuIFRvIG1ha2UgZG5zbWFzcSB1c2UgdGhlCisgICBzZXJ2ZXJzIGluIG9yZGVyLCBnaXZlIGl0IHRoZSAtbyBmbGFnLiBJZiB5b3Ugd2FudCBzb21lIHF1ZXJpZXMKKyAgIHNlbnQgdG8gYSBzcGVjaWFsIHNlcnZlciwgdGhpbmsgYWJvdXQgdXNpbmcgdGhlIC1TIGZsYWcgdG8gZ2l2ZSB0aGUKKyAgIElQIGFkZHJlc3Mgb2YgdGhhdCBzZXJ2ZXIsIGFuZCB0ZWxsaW5nIGRuc21hc3EgZXhhY3RseSB3aGljaAorICAgZG9tYWlucyB0byB1c2UgdGhlIHNlcnZlciBmb3IuCisKK1E6IE9LLCBJJ3ZlIGdvdCBxdWVyaWVzIHRvIGEgcHJpdmF0ZSBuYW1lc2VydmVyIHdvcmtpbmcsIG5vdyBob3cgYWJvdXQgCisgICByZXZlcnNlIHF1ZXJpZXMgZm9yIGEgcmFuZ2Ugb2YgSVAgYWRkcmVzc2VzPworCitBOiBVc2UgdGhlIHN0YW5kYXJkIEROUyBjb252ZW50aW9uIG9mIDxyZXZlcnNlZCBhZGRyZXNzPi5pbi1hZGRyLmFycGEuCisgICBGb3IgaW5zdGFuY2UgdG8gc2VuZCByZXZlcnNlIHF1ZXJpZXMgb24gdGhlIHJhbmdlIDE5Mi4xNjguMC4wIHRvIAorICAgMTkyLjE2OC4wLjI1NSB0byBhIG5hbWVzZXJ2ZXIgYXQgMTAuMC4wLjEgZG8KKyAgIHNlcnZlcj0vMC4xNjguMTkyLmluLWFkZHIuYXJwYS8xMC4wLjAuMQorICAgTm90ZSB0aGF0IHRoZSAiYm9ndXMtcHJpdiIgb3B0aW9uIHRha2UgcHJpb3JpdHkgb3ZlciB0aGlzIG9wdGlvbiwKKyAgIHNvIHRoZSBhYm92ZSB3aWxsIG5vdCB3b3JrIHdoZW4gdGhlIGJvZ3VzLXByaXYgb3B0aW9uIGlzIHNldC4KKworUTogRG5zbWFzcSBmYWlscyB0byBzdGFydCB3aXRoIGFuIGVycm9yIGxpa2UgdGhpczogImRuc21hc3E6IGJpbmQKKyAgIGZhaWxlZDogQ2Fubm90IGFzc2lnbiByZXF1ZXN0ZWQgYWRkcmVzcyIuIFdoYXQncyB0aGUgcHJvYmxlbT8KKworQTogVGhpcyBoYXMgYmVlbiBzZWVuIHdoZW4gYSBzeXN0ZW0gaXMgYnJpbmdpbmcgdXAgYSBQUFAgaW50ZXJmYWNlIGF0CisgICBib290IHRpbWU6IGJ5IHRoZSB0aW1lIGRuc21hc3Egc3RhcnQgdGhlIGludGVyZmFjZSBoYXMgYmVlbgorICAgY3JlYXRlZCwgYnV0IG5vdCBicm91Z2h0IHVwIGFuZCBhc3NpZ25lZCBhbiBhZGRyZXNzLiBUaGUgZWFzaWVzdAorICAgc29sdXRpb24gaXMgdG8gdXNlIC0taW50ZXJmYWNlIGZsYWdzIHRvIHNwZWNpZnkgd2hpY2ggaW50ZXJmYWNlcworICAgZG5zbWFzcSBzaG91bGQgbGlzdGVuIG9uLiBTaW5jZSB5b3UgYXJlIHVubGlrZWx5IHRvIHdhbnQgZG5zbWFzcSB0bworICAgbGlzdGVuIG9uIGEgUFBQIGludGVyZmFjZSBhbmQgb2ZmZXIgRE5TIHNlcnZpY2UgdG8gdGhlIHdvcmxkLCB0aGUKKyAgIHByb2JsZW0gaXMgc29sdmVkLgorCitROiBJJ20gcnVubmluZyBvbiBCU0QgYW5kIGRuc21hc3Egd29uJ3QgYWNjZXB0IGxvbmcgb3B0aW9ucyBvbiB0aGUKKyAgIGNvbW1hbmQgbGluZS4gCisKK0E6IERuc21hc3Egd2hlbiBidWlsdCBvbiBzb21lIEJTRCBzeXN0ZW1zIGRvZXNuJ3QgdXNlIEdOVSBnZXRvcHQgYnkKKyAgIGRlZmF1bHQuIFlvdSBjYW4gZWl0aGVyIGp1c3QgdXNlIHRoZSBzaW5nbGUtbGV0dGVyIG9wdGlvbnMgb3IKKyAgIGNoYW5nZSBjb25maWcuaCBhbmQgdGhlIE1ha2VmaWxlIHRvIHVzZSBnZXRvcHQtbG9uZy4gTm90ZSB0aGF0CisgICBvcHRpb25zIGluIC9ldGMvZG5zbWFzcS5jb25mIG11c3QgYWx3YXlzIGJlIHRoZSBsb25nIGZvcm0sCisgICBvbiBhbGwgcGxhdGZvcm1zLgorCitROiBOYW1lcyBvbiB0aGUgaW50ZXJuZXQgYXJlIHdvcmtpbmcgZmluZSwgYnV0IGxvb2tpbmcgdXAgbG9jYWwgbmFtZXMgCisgICBmcm9tIC9ldGMvaG9zdHMgb3IgREhDUCBkb2Vzbid0IHNlZW0gdG8gd29yay4KKworQTogUmVzb2x2ZXIgY29kZSBzb21ldGltZSBkb2VzIHN0cmFuZ2UgdGhpbmdzIHdoZW4gZ2l2ZW4gbmFtZXMgd2l0aG91dAorICAgYW55IGRvdHMgaW4uIFdpbjJrIGFuZCBXaW5YUCBtYXkgbm90IHVzZSB0aGUgRE5TIGF0IGFsbCBhbmQganVzdAorICAgdHJ5IGFuZCBsb29rIHVwIHRoZSBuYW1lIHVzaW5nIFdJTlMuIE9uIHVuaXggbG9vayBhdCAib3B0aW9ucyBuZG90czoiCisgICBpbiAibWFuIHJlc29sdi5jb25mIiBmb3IgZGV0YWlscyBvbiB0aGlzIHRvcGljLiBUZXN0aW5nIGxvb2t1cHMKKyAgIHVzaW5nICJuc2xvb2t1cCIgb3IgImRpZyIgd2lsbCB3b3JrLCBidXQgdGhlbiBhdHRlbXB0aW5nIHRvIHJ1bgorICAgInBpbmciIHdpbGwgZ2V0IGEgbG9va3VwIGZhaWx1cmUsIGFwcGVuZGluZyBhIGRvdCB0byB0aGUgZW5kIG9mIHRoZQorICAgaG9zdG5hbWUgIHdpbGwgZml4IHRoaW5ncy4gKGllICJwaW5nIG15aG9zdCIgZmFpbHMsIGJ1dCAicGluZworICAgbXlob3N0LiIgd29ya3MuIFRoZSBzb2x1dGlvbiBpcyB0byBtYWtlIHN1cmUgdGhhdCBhbGwgeW91ciBob3N0cworICAgaGF2ZSBhIGRvbWFpbiBzZXQgKCJkb21haW4iIGluIHJlc29sdi5jb25mLCBvciBzZXQgYSBkb21haW4gaW4gCisgICB5b3VyIERIQ1Agc2VydmVyLCBzZWUgYmVsb3cgZnIgV2luZG93cyBYUCBhbmQgTWFjIE9TIFgpLiAKKyAgIEFueSBkb21haW4gIHdpbGwgZG8sIGJ1dCAibG9jYWxuZXQiIGlzIHRyYWRpdGlvbmFsLiBOb3cgd2hlbiB5b3UKKyAgIHJlc29sdmUgIm15aG9zdCIgdGhlIHJlc29sdmVyIHdpbGwgYXR0ZW1wdCB0byBsb29rIHVwIAorICAgIm15aG9zdC5sb2NhbG5ldCIgc28geW91IG5lZWQgdG8gaGF2ZSBkbnNtYXNxIHJlcGx5IHRvIHRoYXQgbmFtZS4gCisgICBUaGUgd2F5IHRvIGRvIHRoYXQgaXMgdG8gaW5jbHVkZSB0aGUgZG9tYWluIGluIGVhY2ggbmFtZSBvbgorICAgL2V0Yy9ob3N0cyAgYW5kL29yIHRvIHVzZSB0aGUgLS1leHBhbmQtaG9zdHMgYW5kIC0tZG9tYWluIG9wdGlvbnMuCisKK1E6IEhvdyBkbyBJIHNldCB0aGUgRE5TIGRvbWFpbiBpbiBXaW5kb3dzIFhQIG9yIE1hY09TIFggKHJlZjogcHJldmlvdXMKKyAgIHF1ZXN0aW9uKT8KKworQTogZm9yIFhQLCBDb250cm9sIFBhbmVsID4gTmV0d29yayBDb25uZWN0aW9ucyA+IHsgQ29ubmVjdGlvbiB0byBnYXRld2F5IC8KKyAgIEROUyB9ID4gUHJvcGVydGllcyA+IHsgSGlnaGxpZ2h0IFRDUC9JUCB9ID4gUHJvcGVydGllcyA+IEFkdmFuY2VkID4KKyAgIEROUyBUYWIgPiBETlMgc3VmZml4IGZvciB0aGlzIGNvbm5lY3Rpb246IAorCitBOiBmb3IgT1MgWCwgU3lzdGVtIFByZWZlcmVuY2VzID4gTmV0d29yayA+IHtDb25uZWN0aW9uIHRvIGdhdGV3YXkgLyBETlMgfSA+CisgICBTZWFyY2ggZG9tYWluczoKKworUTogQ2FuIEkgZ2V0IGRuc21hc3EgdG8gc2F2ZSB0aGUgY29udGVudHMgb2YgaXRzIGNhY2hlIHRvIGRpc2sgd2hlbgorICAgSSBzaHV0IG15IG1hY2hpbmUgZG93biBhbmQgcmUtbG9hZCB3aGVuIGl0IHN0YXJ0cyBhZ2Fpbj8KKworQTogTm8sIHRoYXQgZmFjaWxpdHkgaXMgbm90IHByb3ZpZGVkLiBWZXJ5IGZldyBuYW1lcyBpbiB0aGUgRE5TIGhhdmUKKyAgIHRoZWlyIHRpbWUtdG8tbGl2ZSBzZXQgZm9yIGxvbmdlciB0aGFuIGEgZmV3IGhvdXJzIHNvIG1vc3Qgb2YgdGhlCisgICBjYWNoZSBlbnRyaWVzIHdvdWxkIGhhdmUgZXhwaXJlZCBhZnRlciBhIHNodXRkb3duLiBGb3IgbG9uZ2VyLWxpdmVkCisgICBuYW1lcyBpdCdzIG11Y2ggY2hlYXBlciB0byBqdXN0IHJlbG9hZCB0aGVtIGZyb20gdGhlIHVwc3RyZWFtCisgICBzZXJ2ZXIuIE5vdGUgdGhhdCBkbnNtYXNxIGlzIG5vdCBzaHV0IGRvd24gYmV0d2VlbiBQUFAgc2Vzc2lvbnMgc28KKyAgIGdvIG9mZi1saW5lIGFuZCB0aGVuIG9uLWxpbmUgYWdhaW4gd2lsbCBub3QgbG9zZSB0aGUgY29udGVudHMgb2YKKyAgIHRoZSBjYWNoZS4KKworUTogV2hvIGFyZSBWZXJpc2lnbiwgd2hhdCBkbyB0aGV5IGhhdmUgdG8gZG8gd2l0aCB0aGUgYm9ndXMtbnhkb21haW4KKyAgIG9wdGlvbiBpbiBkbnNtYXNxIGFuZCB3aHkgc2hvdWxkIEkgd29yeSBhYm91dCBpdD8KKworQTogW25vdGU6IHRoaXMgd2FzIHdyaXR0ZW4gaW4gU2VwdGVtYmVyIDIwMDMsIHRoaW5ncyBtYXkgd2VsbCBjaGFuZ2UuXQorICAgVmVyc2lnbiBydW4gdGhlIC5jb20gYW5kIC5uZXQgdG9wLWxldmVsLWRvbWFpbnMuIFRoZXkgaGF2ZSBqdXN0CisgICBjaGFuZ2VkIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZWlyIHNlcnZlcnMgc28gdGhhdCB1bmtub3duIC5jb20gYW5kCisgICAubmV0IGRvbWFpbnMsIGluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgTlhET01BSU4sIChubyBzdWNoCisgICBkb21haW4pIHJldHVybiB0aGUgYWRkcmVzcyBvZiBhIGhvc3QgYXQgVmVyc2lnbiB3aGljaCBydW5zIGEgd2ViCisgICBzZXJ2ZXIgc2hvd2luZyBhIHNlYXJjaCBwYWdlLiBNb3N0IHJpZ2h0LXRoaW5raW5nIHBlb3BsZSByZWdhcmQKKyAgIHRoaXMgbmV3IGJlaGF2aW91ciBhcyBicm9rZW4gOi0pLiAgWW91IGNhbiB0ZXN0IHRvIHNlZSBpZiB5b3UgYXJlCisgICBzdWZmZXJpbmcgVmVyc2lnbiBicm9rZW5lc3MgYnkgcnVuIGEgY29tbWFuZCBsaWtlIAorICAgCisgICBob3N0IGpsc2RhamtkYWxsZC5jb20KKworICAgSWYgeW91IGdldCAiamxzZGFqa2RhbGxkLmNvbSIgZG9lcyBub3QgZXhpc3QsIHRoZW4gYWxsIGlzIGZpbmUsIGlmCisgICBob3N0IHJldHVybnMgYW4gSVAgYWRkcmVzcywgdGhlbiB0aGUgRE5TIGlzIGJyb2tlbi4gKFRyeSBhIGZldworICAgZGlmZmVyZW50IHVubGlrZWx5IGRvbWFpbnMsIGp1c3QgaW4gY2FzZSB5b3UgcGlja2VkIGEgd2llcmQgb25lCisgICB3aGljaCByZWFsbHkgX2lzXyByZWdpc3RlcmVkLikKKworICAgQXNzdW1pbmcgdGhhdCB5b3VyIEROUyBpcyBicm9rZW4sIGFuZCB5b3Ugd2FudCB0byBmaXggaXQsIHNpbXBseQorICAgbm90ZSB0aGUgSVAgYWRkcmVzcyBiZWluZyByZXR1cm5lZCBhbmQgcGFzcyBpdCB0byBkbnNtYXNxIHVzaW5nIHRoZQorICAgLS1ib2d1cy1ueGRvbWFpbiBmbGFnLiBEbnNtYXNxIHdpbGwgY2hlY2sgZm9yIHJlc3VsdHMgcmV0dXJuaW5nCisgICB0aGF0IGFkZHJlc3MgYW5kIHN1YnN0aXR1dGUgYW4gTlhET01BSU4gaW5zdGVhZC4gCisKKyAgIEFzIG9mIHdyaXRpbmcsIHRoZSBJUCBhZGRyZXNzIGluIHF1ZXN0aW9uIGZvciB0aGUgLmNvbSBhbmQgLm5ldAorICAgZG9tYWlucyBpcyBpcyA2NC45NC4xMTAuMTEuIFZhcmlvdXMgb3RoZXIsIGxlc3MgcHJvbWluZW50LAorICAgcmVnaXN0cmllcyBwdWxsIHRoZSBzYW1lIHN0dW50OyB0aGVyZSBpcyBhIGxpc3Qgb2YgdGhlbSBhbGwsIGFuZAorICAgdGhlIGFkZHJlc3NlcyB0byBibG9jaywgYXQgaHR0cDovL3dpbndhcmUub3JnL2JvZ3VzLWRvbWFpbnMudHh0CisKK1E6IFRoaXMgbmV3IERIQ1Agc2VydmVyIGlzIHdlbGwgYW5kIGdvb2QsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgZm9yIG1lLgorICAgV2hhdCdzIHRoZSBwcm9ibGVtPworCitBOiBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgY29uZmlndXJhdGlvbiBnb3RjaGFzIHdoaWNoIGhhdmUgYmVlbgorICAgZW5jb3VudGVyZWQgYnkgcGVvcGxlIG1vdmluZyBmcm9tIHRoZSBJU0MgZGhjcGQgdG8gdGhlIGRuc21hc3EKKyAgIGludGVncmF0ZWQgREhDUCBkYWVtb24uIEJvdGggYXJlIHJlbGF0ZWQgdG8gZGlmZmVyZW5jZXMgaW4gCisgICBpbiB0aGUgd2F5IHRoZSB0d28gZGFlbW9ucyBieXBhc3MgdGhlIElQIHN0YWNrIHRvIGRvICJncm91bmQgdXAiCisgICBJUCBjb25maWd1cmF0aW9uIGFuZCBjYW4gbGVhZCB0byB0aGUgZG5zbWFzcSBkYWVtb24gZmFpbGluZworICAgd2hpbHN0IHRoZSBJU0Mgb25lIHdvcmtzLgorCisgICBUaGUgZmlyc3QgdGhpbmcgdG8gY2hlY2sgaXMgdGhlIGJyb2FkY2FzdCBhZGRyZXNzIHNldCBmb3IgdGhlCisgICBldGhlcm5ldCBpbnRlcmZhY2UuIFRoaXMgaXMgbm9ybWFsbHkgdGhlIGFkZGRyZXNzIG9uIHRoZSBjb25uZWN0ZWQKKyAgIG5ldHdvcmsgd2l0aCBhbGwgb25lcyBpbiB0aGUgaG9zdCBwYXJ0LiBGb3IgaW5zdGFuY2UgaWYgdGhlIAorICAgYWRkcmVzcyBvZiB0aGUgZXRoZXJuZXQgaW50ZXJmYWNlIGlzIDE5Mi4xNjguNTUuNyBhbmQgdGhlIG5ldG1hc2sKKyAgIGlzIDI1NS4yNTUuMjU1LjAgdGhlbiB0aGUgYnJvYWRjYXN0IGFkZHJlc3Mgc2hvdWxkIGJlCisgICAxOTIuMTY4LjU1LjI1NS4gSGF2aW5nIGEgYnJvYWRjYXN0IGFkZHJlc3Mgd2hpY2ggaXMgbm90IG9uIHRoZQorICAgbmV0d29yayB0byB3aGljaCB0aGUgaW50ZXJmYWNlIGlzIGNvbm5lY3RlZCBraWxscyB0aGluZ3Mgc3RvbmUKKyAgIGRlYWQuCisKKyAgIFRoZSBzZWNvbmQgcG90ZW50aWFsIHByb2JsZW0gcmVsYXRlcyB0byBmaXJld2FsbCBydWxlczogc2luY2UgdGhlIElTQyAKKyAgIGRhZW1vbiBpbiBzb21lIGNvbmZpZ3VyYXRpb25zIGJ5cGFzc2VzIHRoZSBrZXJuZWwgZmlyZXdhbGwgcnVsZXMgCisgICBlbnRpcmVseSwgdGhlIGFiaWxpdHkgdG8gcnVuIHRoZSBJU0MgZGFlbW9uIGRvZXMgbm90IGluZGljYXRlIAorICAgdGhhdCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIE9LIGZvciB0aGUgZG5zbWFzcSBkYWVtb24uCisgICBGb3IgdGhlIGRuc21hc3EgZGFlbW9uIHRvIG9wZXJhdGUgaXQncyB2aXRhbCB0aGF0IFVEUCBwYWNrZXRzIHRvIAorICAgYW5kIGZyb20gcG9ydHMgNjcgYW5kIDY4IGFuZCBicm9hZGNhc3QgcGFja2V0cyB3aXRoIHNvdXJjZSAKKyAgIGFkZHJlc3MgMC4wLjAuMCBhbmQgZGVzdGluYXRpb24gYWRkcmVzcyAyNTUuMjU1LjI1NS4yNTUgYXJlIG5vdCAKKyAgIGRyb3BwZWQgYnkgaXB0YWJsZXMvaXBjaGFpbnMuCisKK1E6IEknbSBydW5uaW5nIERlYmlhbiwgYW5kIG15IG1hY2hpbmVzIGdldCBhbiBhZGRyZXNzIGZpbmUgd2l0aCBESENQLAorICAgYnV0IHRoZWlyIG5hbWVzIGFyZSBub3QgYXBwZWFyaW5nIGluIHRoZSBETlMuCisKK0E6IEJ5IGRlZmF1bHQsIG5vbmUgb2YgdGhlIERIQ1AgY2xpZW50cyBzZW5kIHRoZSBob3N0LW5hbWUgd2hlbiBhc2tpbmcKKyAgIGZvciBhIGxlYXNlLiBGb3IgbW9zdCBvZiB0aGUgY2xpZW50cywgeW91IGNhbiBzZXQgdGhlIGhvc3QtbmFtZSB0bworICAgc2VuZCB3aXRoIHRoZSAiaG9zdG5hbWUiIGtleXdvcmQgaW4gL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMuIChTZWUKKyAgICJtYW4gaW50ZXJmYWNlcyIgZm9yIGRldGFpbHMuKSBUaGF0IGRvZXNuJ3Qgd29yayBmb3IgZGhjbGllbnQsIHdlcmUKKyAgIHlvdSBoYXZlIHRvIGFkZCBzb21ldGhpbmcgbGlrZSAic2VuZCBob3N0LW5hbWUgZGFpc3kiIHRvCisgICAvZXRjL2RoY2xpZW50LmNvbmYgW1VwZGF0ZTogdGhlIGxhc3Rlc3QgZGhjcGNkIHBhY2thZ2VzIF9kb18gc2VuZAorICAgdGhlIGhvc3RuYW1lIGJ5IGRlZmF1bHQuCisKK1E6IEknbSBuZXR3b3JrIGJvb3RpbmcgbXkgbWFjaGluZXMsIGFuZCB0cnlpbmcgdG8gZ2l2ZSB0aGVtIHN0YXRpYworICAgREhDUC1hc3NpZ25lZCBhZGRyZXNzZXMuIFRoZSBtYWNoaW5lIGdldHMgaXRzIGNvcnJlY3QgYWRkcmVzcworICAgd2hpbHN0IGJvb3RpbmcsIGJ1dCB0aGVuIHRoZSBPUyBzdGFydHMgYW5kIGl0IHNlZW1zIHRvIGdldAorICAgYWxsb2NhdGVkIGEgZGlmZmVyZW50IGFkZHJlc3MuCisKK0E6IFdoYXQgaXMgaGFwcGVuaW5nIGlzIHRoaXM6IFRoZSBib290IHByb2Nlc3Mgc2VuZHMgYSBESENQCisgICByZXF1ZXN0IGFuZCBnZXRzIGFsbG9jYXRlZCB0aGUgc3RhdGljIGFkZHJlc3MgY29ycmVzcG9uZGluZyB0byBpdHMKKyAgIE1BQyBhZGRyZXNzLiBUaGUgYm9vdCBsb2FkZXIgZG9lcyBub3Qgc2VuZCBhIGNsaWVudC1pZC4gVGhlbiB0aGUgT1MKKyAgIHN0YXJ0cyBhbmQgcmVwZWF0cyB0aGUgREhDUCBwcm9jZXNzLCBidXQgaXQgaXQgZG9lcyBzZW5kIGEKKyAgIGNsaWVudC1pZC4gRG5zbWFzcSBjYW5ub3QgYXNzdW1lIHRoYXQgdGhlIHR3byByZXF1ZXN0cyBhcmUgZnJvbSB0aGUKKyAgIHNhbWUgbWFjaGluZSAoc2luY2UgdGhlIGNsaWVudCBJRCdzIGRvbid0IG1hdGNoKSBhbmQgZXZlbiB0aG91Z2gKKyAgIHRoZSBNQUMgYWRkcmVzcyBoYXMgYSBzdGF0aWMgYWxsb2NhdGlvbiwgdGhhdCBhZGRyZXNzIGlzIHN0aWxsIGluCisgICB1c2UgYnkgdGhlIGZpcnN0IGluY2FybmF0aW9uIG9mIHRoZSBtYWNoaW5lICh0aGUgb25lIGZyb20gdGhlIGJvb3QsCisgICB3aXRob3V0IGEgY2xpZW50IElELikgZG5zbWFzcSB0aGVyZWZvcmUgaGFzIHRvIGdpdmUgdGhlIG1hY2hpbmUgYQorICAgZHluYW1pYyBhZGRyZXNzIGZyb20gaXRzIHBvb2wuIFRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvIHNvbHZlIHRoaXM6CisgICAoMSkgcGVyc3VhZGUgeW91ciBESENQIGNsaWVudCBub3QgdG8gc2VuZCBhIGNsaWVudCBJRCwgb3IgKDIpIHNldCB1cAorICAgdGhlIHN0YXRpYyBhc3NpZ25tZW50IHRvIHRoZSBjbGllbnQgSUQsIG5vdCB0aGUgTUFDIGFkZHJlc3MuIFRoZQorICAgZGVmYXVsdCBjbGllbnQtaWQgd2lsbCBiZSAwMTo8TUFDIGFkZHJlc3M+LCBzbyBjaGFuZ2UgdGhlIGRoY3AtaG9zdAorICAgbGluZSBmcm9tICJkaGNwLWhvc3Q9MTE6MjI6MzM6NDQ6NTU6NjYsMS4yLjMuNCIgdG8KKyAgICJkaGNwLWhvc3Q9aWQ6MDE6MTE6MjI6MzM6NDQ6NTU6NjYsMS4yLjMuNCIgb3IgKDMpIHRlbGwgZG5zbWFzcSB0bworICAgaWdub3JlIGNsaWVudCBJRHMgZm9yIGEgcGFydGljdWxhciBNQUMgYWRkcmVzcywgbGlrZSB0aGlzOgorICAgZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LGlkOioKKworUTogV2hhdCBuZXR3b3JrIHR5cGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIERIQ1Agc2VydmVyPworICAKK0E6IEV0aGVybmV0IChhbmQgODAyLjExIHdpcmVsZXNzKSBhcmUgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMuIE9uCisgICBMaW51eCBhbGwgbmV0d29yayB0eXBlcyAoaW5jbHVkaW5nIEZpcmVXaXJlKSBhcmUgc3VwcG9ydGVkLgorCitROiBXaGF0IGlzIHRoaXMgc3RyYW5nZSAiYmluZC1pbnRlcmZhY2UiIG9wdGlvbj8KKworQTogVGhlIEROUyBzcGVjIHNheXMgdGhhdCB0aGUgcmVwbHkgdG8gYSBETlMgcXVlcnkgbXVzdCBjb21lIGZyb20gdGhlCisgICBzYW1lIGFkZHJlc3MgaXQgd2FzIHNlbnQgdG8uIFRoZSB0cmFkaXRpb25hbCB3YXkgdG8gd3JpdGUgYW4gVURQCisgICBzZXJ2ZXIgdG8gZG8gdGhpcyBpcyB0byBmaW5kIGFsbCBvZiB0aGUgYWRkcmVzc2VzIGJlbG9uZ2luZyB0byB0aGUKKyAgIG1hY2hpbmUgKGllIGFsbCB0aGUgaW50ZXJmYWNlcyBvbiB0aGUgbWFjaGluZSkgYW5kIHRoZW4gY3JlYXRlIGEKKyAgIHNvY2tldCBmb3IgZWFjaCBpbnRlcmZhY2Ugd2hpY2ggaXMgYm91bmQgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlCisgICBpbnRlcmZhY2UuIFRoZW4gd2hlbiBhIHBhY2tldCBpcyBzZW50IHRvIGFkZHJlc3MgQSwgaXQgaXMgcmVjZWl2ZWQKKyAgIG9uIHRoZSBzb2NrZXQgYm91bmQgdG8gYWRkcmVzcyBBIGFuZCB3aGVuIHRoZSByZXBseSBpcyBhbHNvIHNlbnQKKyAgIHZpYSB0aGF0IHNvY2tldCwgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIHNldCB0byBBIGJ5IHRoZSBrZXJuZWwgYW5kCisgICBldmVyeXRoaW5nIHdvcmtzLiBUaGlzIGlzIHRoZSBob3cgZG5zbWFzcSB3b3JrcyB3aGVuCisgICAiYmluZC1pbnRlcmZhY2VzIiBpcyBzZXQsIHdpdGggdGhlIG9idmlvdXMgZXh0ZW5zaW9uIHRoYXQgaXMgbWlzc2VzCisgICBvdXQgY3JlYXRpbmcgc29ja2V0cyBmb3Igc29tZSBpbnRlcmZhY2VzIGRlcGVuZGluZyBvbiB0aGUKKyAgIC0taW50ZXJmYWNlLCAtLWFkZHJlc3MgYW5kIC0tZXhjZXB0LWludGVyZmFjZSBmbGFncy4gIFRoZQorICAgZGlzYWR2YW50YWdlIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCBpdCBicmVha3MgaWYgaW50ZXJmYWNlcyBkb24ndAorICAgZXhpc3Qgb3IgYXJlIG5vdCBjb25maWd1cmVkIHdoZW4gdGhlIGRhZW1vbiBzdGFydHMgYW5kIGRvZXMgdGhlCisgICBzb2NrZXQgY3JlYXRpb24gc3RlcC4gSW4gYSBob3RwbHVnLWF3YXJlIHdvcmxkIHRoaXMgaXMgYSByZWFsCisgICBwcm9ibGVtLgorCisgICBUaGUgYWx0ZXJuYXRpdmUgYXBwcm9hY2ggaXMgdG8gaGF2ZSBvbmx5IG9uZSBzb2NrZXQsIHdoaWNoIGlzIGJvdW5kCisgICB0byB0aGUgY29ycmVjdCBwb3J0IGFuZCB0aGUgd2lsZGNhcmQgSVAgYWRkcmVzcyAoMC4wLjAuMCkuIFRoYXQKKyAgIHNvY2tldCB3aWxsIHJlY2VpdmUgX2FsbF8gcGFja2V0cyBzZW50IHRvIHBvcnQgNTMsIG5vIG1hdHRlciB3aGF0CisgICBkZXN0aW5hdGlvbiBhZGRyZXNzIHRoZXkgaGF2ZS4gVGhpcyBzb2x2ZXMgdGhlIHByb2JsZW0gb2YKKyAgIGludGVyZmFjZXMgd2hpY2ggYXJlIGNyZWF0ZWQgb3IgcmVjb25maWd1cmVkIGFmdGVyIGRhZW1vbgorICAgc3RhcnQtdXAuIFRvIG1ha2UgdGhpcyB3b3JrIGlzIG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSBvZiB0aGUKKyAgICJyZXBseSBzb3VyY2UgYWRkcmVzcyIgcHJvYmxlbS4gV2hlbiBhIFVEUCBwYWNrZXQgaXMgc2VudCBieSBhCisgICBzb2NrZXQgYm91bmQgdG8gMC4wLjAuMCBpdHMgc291cmNlIGFkZHJlc3Mgd2lsbCBiZSBzZXQgdG8gdGhlCisgICBhZGRyZXNzIG9mIG9uZSBvZiB0aGUgbWFjaGluZSdzIGludGVyZmFjZXMsIGJ1dCB3aGljaCBvbmUgaXMgbm90CisgICBkZXRlcm1pbmVkIGFuZCBjYW4gdmFyeSBkZXBlbmRpbmcgb24gdGhlIE9TIGJlaW5nIHJ1bi4gVG8gZ2V0IHJvdW5kCisgICB0aGlzIGl0IGlzIG5lY2Nlc3NhcnkgdG8gdXNlIGEgc2NhcnkgYWR2YW5jZWQgQVBJIHRvIGRldGVybWluZSB0aGUKKyAgIGFkZHJlc3MgdG8gd2hpY2ggYSBxdWVyeSB3YXMgc2VudCwgYW5kIGZvcmNlIHRoYXQgdG8gYmUgdGhlIHNvdXJjZQorICAgYWRkcmVzcyBpbiB0aGUgcmVwbHkuIEZvciBJUHY0IHRoaXMgc3R1ZmYgaW4gbm9uLXBvcnRhYmxlIGFuZCBxdWl0ZQorICAgb2Z0ZW4gbm90IGV2ZW4gYXZhaWxhYmxlIChJdCdzIGRpZmZlcmVudCBiZXR3ZWVuIEZyZWVCU0QgNS54IGFuZAorICAgTGludXgsIGZvciBpbnN0YW5jZSwgYW5kIEZyZWVCU0QgNC54LCBMaW51eCAyLjAueCBhbmQgT3BlbkJTRCBkb24ndAorICAgaGF2ZSBpdCBhdCBhbGwuKSBIZW5jZSAiYmluZC1pbnRlcmZhY2VzIiBoYXMgdG8gYWx3YXlzIGJlIGF2YWlsYWJsZQorICAgYXMgYSBmYWxsIGJhY2suIEZvciBJUHY2IHRoZSBBUEkgaXMgc3RhbmRhcmQgYW5kIHVuaXZlcnNhbGx5CisgICBhdmFpbGFibGUuCisKKyAgIEl0IGNvdWxkIGJlIGFyZ3VlZCB0aGF0IGlmIHRoZSAtLWludGVyZmFjZSBvciAtLWFkZHJlc3MgZmxhZ3MgYXJlCisgICB1c2VkIHRoZW4gYmluZGluZyBpbnRlcmZhY2VzIGlzIG1vcmUgYXBwcm9wcmlhdGUsIGJ1dCB1c2luZworICAgd2lsZGNhcmQgYmluZGluZyBtZWFucyB0aGF0IGRuc21hc3Egd2lsbCBxdWl0ZSBoYXBwaWx5IHN0YXJ0IHVwCisgICBhZnRlciBiZWluZyB0b2xkIHRvIHVzZSBpbnRlcmZhY2VzIHdoaWNoIGRvbid0IGV4aXN0LCBidXQgd2hpY2ggYXJlCisgICBjcmVhdGVkIGxhdGVyLiBXaWxkY2FyZCBiaW5kaW5nIGJyZWFrcyB0aGUgc2NlbmFyaW8gd2hlbiBkbnNtYXNxIGlzCisgICBsaXN0ZW5pbmcgb24gb25lIGludGVyZmFjZSBhbmQgYW5vdGhlciBzZXJ2ZXIgKG1vc3QgcHJvYmFibHkgQklORCkKKyAgIGlzIGxpc3RlbmluZyBvbiBhbm90aGVyLiBJdCdzIG5vdCBwb3NzaWJsZSBmb3IgQklORCB0byBiaW5kIHRvIGFuCisgICAoYWRkcmVzcyxwb3J0KSBwYWlyIHdoZW4gZG5zbWFzcSBoYXMgYm91bmQgKHdpbGRjYXJkLHBvcnQpLCBoZW5jZQorICAgdGhlIGFiaWxpdHkgdG8gZXhwbGljaXRseSB0dXJuIG9mZiB3aWxkY2FyZCBiaW5kaW5nLgorCitROiBXaHkgZG9lc24ndCBLZXJiZXJvcyB3b3JrL3doeSBjYW4ndCBJIGdldCBzZW5zaWJsZSBhbnN3ZXJzIHRvCisgICBxdWVyaWVzIGZvciBTUlYgcmVjb3Jkcy4KKworQTogUHJvYmFibHkgYmVjYXVzZSB5b3UgaGF2ZSB0aGUgImZpbHRlcndpbjJrIiBvcHRpb24gc2V0LiBOb3RlIHRoYXQKKyAgIGl0IHdhcyBvbiBieSBkZWZhdWx0IGluIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmaWxlcyBpbmNsdWRlZCBpbiAKKyAgIHZlcnNpb25zIGJlZm9yZSAyLjEyLCBzbyB5b3UgbWlnaHQgaGF2ZSBpdCBzZXQgb24gd2l0aG91dAorICAgcmVhbGlzaW5nLgorCitROiBDYW4gSSBnZXQgZW1haWwgbm90aWZpY2F0aW9uIHdoZW4gYSBuZXcgdmVyc2lvbiBvZiBkbnNtYXNxIGlzCisgICByZWxlYXNlZD8KKworQTogWWVzLCBuZXcgcmVsZWFzZXMgb2YgZG5zbWFzcSBhcmUgYWx3YXlzIGFubm91bmNlZCB0aHJvdWdoCisgICBmcmVzaG1lYXQubmV0LCBhbmQgdGhleSBhbGxvdyB5b3UgdG8gc3ViY3JpYmUgdG8gZW1haWwgYWxlcnRzIHdoZW4KKyAgIG5ldyB2ZXJzaW9ucyBvZiBwYXJ0aWN1bGFyIHByb2plY3RzIGFyZSByZWxlYXNlZC4gTmV3IHJlbGVhc2VzIGFyZQorICAgYWxzbyBhbm5vdW5jZWQgaW4gdGhlIGRuc21hc3EtZGlzY3VzcyBtYWlsaW5nIGxpc3QsIHN1YnNjcmliZSBhdCAKKyAgIGh0dHA6Ly9saXN0cy50aGVrZWxsZXlzLm9yZy51ay9tYWlsbWFuL2xpc3RpbmZvL2Ruc21hc3EtZGlzY3VzcworCitROiBXaGF0IGRvZXMgdGhlIGRoY3AtYXV0aG9yaXRhdGl2ZSBvcHRpb24gZG8/IAorCitBOiBTZWUgaHR0cDovL3d3dy5pc2Mub3JnL2luZGV4LnBsPy9zdy9kaGNwL2F1dGhvcml0YXRpdmUucGhwIC0gdGhhdCdzCisgICBmb3IgdGhlIElTQyBkYWVtb24sIGJ1dCB0aGUgc2FtZSBhcHBsaWVzIHRvIGRuc21hc3EuCisKK1E6IFdoeSBkb2VzIG15IEdlbnRvbyBib3ggcGF1c2UgZm9yIGEgbWludXRlIGJlZm9yZSBnZXR0aW5nIGEgbmV3CisgICBsZWFzZT8KKworQTogQmVjYXVzZSB3aGVuIGEgR2VudG9vIGJveCBzaHV0cyBkb3duLCBpdCByZWxlYXNlcyBpdHMgbGVhc2Ugd2l0aAorICAgdGhlIHNlcnZlciBidXQgcmVtZW1iZXJzIGl0IG9uIHRoZSBjbGllbnQ7IHRoaXMgc2VlbXMgdG8gYmUgYSAKKyAgIEdlbnRvby1zcGVjaWZpYyBwYXRjaCB0byBkaGNwY2QuIE9uIHJlc3RhcnQgaXQgdHJpZXMgdG8gcmVuZXcKKyAgIGEgbGVhc2Ugd2hpY2ggaXMgbG9uZyBnb25lLCBhcyBmYXIgYXMgZG5zbWFzcSBpcyBjb25jZXJuZWQsIGFuZAorICAgZG5zbWFzcSBpZ25vcmVzIGl0IHVudGlsIGlzIHRpbWVzIG91dCBhbmQgcmVzdGFydHMgdGhlIHByb2Nlc3MuCisgICBUbyBmaXggdGhpcywgc2V0IHRoZSBkaGNwLWF1dGhvcml0YXRpdmUgZmxhZyBpbiBkbnNtYXNxLgorCitROiBNeSBsYXB0b3AgaGFzIHR3byBuZXR3b3JrIGludGVyZmFjZXMsIGEgd2lyZWQgb25lIGFuZCBhIHdpcmVsZXNzCisgICBvbmUuIEkgbmV2ZXIgdXNlIGJvdGggaW50ZXJmYWNlcyBhdCB0aGUgc2FtZSB0aW1lLCBhbmQgSSdkIGxpa2UgdGhlCisgICBzYW1lIElQIGFuZCBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWQgaXJyZXNwZWN0aXZlIG9mIHdoaWNoCisgICBpbnRlcmZhY2UgaXMgaW4gdXNlLiBIb3cgY2FuIEkgZG8gdGhhdD8KKworQTogQnkgZGVmYXVsdCwgdGhlIGlkZW50aXR5IG9mIGEgbWFjaGluZSBpcyBkZXRlcm1pbmVkIGJ5IHVzaW5nIHRoZQorICAgTUFDIGFkZHJlc3MsIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBpbnRlcmZhY2UgaGFyZHdhcmUuIE9uY2UgYW4KKyAgIElQIGlzIGJvdW5kIHRvIHRoZSBNQUMgYWRkcmVzcyBvZiBvbmUgaW50ZXJmYWNlLCBpdCBjYW5ub3QgYmUKKyAgIGFzc29jaWF0ZWQgd2l0aCBhbm90aGVyIE1BQyBhZGRyZXNzIHVudGlsIGFmdGVyIHRoZSBESENQIGxlYXNlCisgICBleHBpcmVzLiBUaGUgc29sdXRpb24gdG8gdGhpcyBpcyB0byB1c2UgYSBjbGllbnQtaWQgYXMgdGhlIG1hY2hpbmUKKyAgIGlkZW50aXR5IHJhdGhlciB0aGFuIHRoZSBNQUMgYWRkcmVzcy4gSWYgeW91IGFycmFuZ2UgZm9yIHRoZSBzYW1lCisgICBjbGllbnQtaWQgdG8gc2VudCB3aGVuIGVpdGhlciBpbnRlcmZhY2UgaXMgaW4gdXNlLCB0aGUgREhDUCBzZXJ2ZXIKKyAgIHdpbGwgcmVjb2duaXNlIHRoZSBzYW1lIG1hY2hpbmUsIGFuZCB1c2UgdGhlIHNhbWUgYWRkcmVzcy4gVGhlCisgICBtZXRob2QgZm9yIHNldHRpbmcgdGhlIGNsaWVudC1pZCB2YXJpZXMgd2l0aCBESENQIGNsaWVudCBzb2Z0d2FyZSwKKyAgIGRoY3BjZCB1c2VzIHRoZSAiLUkiIGZsYWcuIFdpbmRvd3MgdXNlcyBhIHJlZ2lzdHJ5IHNldHRpbmcsCisgICBzZWUgaHR0cDovL3d3dy5qc2lpbmMuY29tL1NVQkYvVElQMjgwMC9yaDI4NDUuaHRtCitBZGRlbmR1bToKKyAgIEZyb20gdmVyc2lvbiAyLjQ2LCBkbnNtYXNxIGhhcyBhIHNvbHV0aW9uIHRvIHRoaXMgd2hpY2ggZG9lc24ndAorICAgaW52b2x2ZSBzZXR0aW5nIGNsaWVudC1JRHMuIEl0J3MgcG9zc2libGUgdG8gcHV0IG1vcmUgdGhhbiBvbmUgTUFDCisgICBhZGRyZXNzIGluIGEgLS1kaGNwLWhvc3QgY29uZmlndXJhdGlvbi4gVGhpcyB0ZWxscyBkbnNtYXNxIHRoYXQgaXQKKyAgIHNob3VsZCB1c2UgdGhlIHNwZWNpZmllZCBJUCBmb3IgYW55IG9mIHRoZSBzcGVjaWZpZWQgTUFDIGFkZHJlc3NlcywKKyAgIGFuZCBmdXJ0aGVybW9yZSBpdCBnaXZlcyBkbnNtYXNxIHBlcm1pc3Npb24gdG8gc3VtYXJpbHkgYWJhbmRvbiBhCisgICBsZWFzZSB0byBvbmUgb2YgdGhlIE1BQyBhZGRyZXNzZXMgaWYgYW5vdGhlciBvbmUgY29tZXMgYWxvbmcuIE5vdGUKKyAgIHRoYXQgdGhpcyB3aWxsIHdvcmsgZmluZSBvbmx5IGFzIGxvbmdlciBhcyBvbmx5IG9uZSBpbnRlcmZhY2UgaXMKKyAgIHVwIGF0IGFueSB0aW1lLiBUaGVyZSBpcyBubyB3YXkgZm9yIGRuc21hc3EgdG8gZW5mb3JjZSB0aGlzCisgICBjb25zdHJhaW50OiBpZiB5b3UgY29uZmlndXJlIG11bHRpcGxlIE1BQyBhZGRyZXNzZXMgYW5kIHZpb2xhdGUgCisgICB0aGlzIHJ1bGUsIGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4uCisKK1E6IENhbiBkbnNtYXNxIGRvIERIQ1Agb24gSVAtYWxpYXMgaW50ZXJmYWNlcz8KKworQTogWWVzLCBmcm9tIHZlcnNpb24tMi4yMS4gVGhlIHN1cHBvcnQgaXMgb25seSBhdmFpbGFibGUgcnVubmluZyB1bmRlcgorICAgTGludXgsIG9uIGEga2VybmVsIHdoaWNoIHByb3ZpZGVzIHRoZSBSVC1uZXRsaW5rIGZhY2lsaXR5LiBBbGwgMi40IAorICAgYW5kIDIuNiBrZXJuZWxzIHByb3ZpZGUgUlQtbmV0bGluayBhbmQgaXQncyBhbiBvcHRpb24gaW4gMi4yCisgICBrZXJuZWxzLiAKKyAgIAorICAgSWYgYSBwaHlzaWNhbCBpbnRlcmZhY2UgaGFzIG1vcmUgdGhhbiBvbmUgSVAgYWRkcmVzcyBvciBhbGlhc2VzCisgICB3aXRoIGV4dHJhIElQIGFkZHJlc3NlcywgdGhlbiBhbnkgZGhjcC1yYW5nZXMgY29ycmVzcG9uZGluZyB0bworICAgdGhlc2UgYWRkcmVzc2VzIGNhbiBiZSB1c2VkIGZvciBhZGRyZXNzIGFsbG9jYXRpb24uIFNvIGlmIGFuCisgICBpbnRlcmZhY2UgaGFzIGFkZHJlc3NlcyAxOTIuMTY4LjEuMC8yNCBhbmQgMTkyLjY4LjIuMC8yNCBhbmQgdGhlcmUKKyAgIGFyZSBESENQIHJhbmdlcyAxOTIuMTY4LjEuMTAwLTE5Mi4xNjguMS4yMDAgYW5kCisgICAxOTIuMTY4LjIuMTAwLTE5Mi4xNjguMi4yMDAgdGhlbiBib3RoIHJhbmdlcyB3b3VsZCBiZSB1c2VkIGZvciBob3N0CisgICBjb25uZWN0ZWQgdG8gdGhlIHBoeXNpY2FsIGludGVyZmFjZS4gQSBtb3JlIHR5cGljYWwgdXNlIG1pZ2h0IGJlIHRvCisgICBoYXZlIG9uZSBvZiB0aGUgYWRkcmVzcy1yYW5nZXMgYXMgc3RhdGljLW9ubHksIGFuZCBoYXZlIGtub3duCisgICBob3N0cyBhbGxvY2F0ZWQgYWRkcmVzc2VzIG9uIHRoYXQgc3VibmV0IHVzaW5nIGRoY3AtaG9zdCBvcHRpb25zLAorICAgd2hpbGUgIGFub255bW91cyBob3N0cyBnbyBvbiB0aGUgb3RoZXIuCisKKworUTogRG5zbWFzcSBzb21ldGltZXMgbG9ncyAibmFtZXNlcnZlciB4eHgueHh4Lnh4eC54eHggcmVmdXNlZAorICAgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiIGFuZCBETlMgc3RvcHMgd29ya2luZy4gV2hhdCdzIGdvaW5nIG9uPworCitBOiBQcm9iYWJseSB0aGUgbmFtZXNlcnZlciBpcyBhbiBhdXRob3JpdGF0aXZlIG5hbWVzZXJ2ZXIgZm9yIGEKKyAgIHBhcnRpY3VsYXIgZG9tYWluLCBidXQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gYW5zd2VyIGdlbmVyYWwgRE5TCisgICBxdWVyaWVzIGZvciBhbiBhcmJpdHJhcnkgZG9tYWluLiBJdCBpcyBub3Qgc3VpdGFibGUgZm9yIHVzZSBieQorICAgZG5zbWFzcSBhcyBhbiB1cHN0cmVhbSBzZXJ2ZXIgYW5kIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlCisgICBjb25maWd1cmF0aW9uLiBOb3RlIHRoYXQgaWYgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSB1cHN0cmVhbQorICAgbmFtZXNlcnZlciBjb25maWd1cmVkIGRuc21hc3Egd2lsbCBsb2FkLWJhbGFuY2UgYWNyb3NzIHRoZW0gYW5kCisgICBpdCBtYXkgYmUgc29tZSB0aW1lIGJlZm9yZSBkbnNtYXNxIGdldHMgYXJvdW5kIHRvIHVzaW5nIGEgCisgICBwYXJ0aWN1bGFyIG5hbWVzZXJ2ZXIuIFRoaXMgbWVhbnMgdGhhdCBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbgorICAgbWF5IHdvcmsgZm9yIHNvbWV0aW1lIHdpdGggYSBicm9rZW4gdXBzdHJlYW0gbmFtZXNlcnZlcgorICAgY29uZmlndXJhdGlvbi4KKworCitROiBEb2VzIHRoZSBkbnNtYXNxIERIQ1Agc2VydmVyIHByb2JlIGFkZHJlc3NlcyBiZWZvcmUgYWxsb2NhdGluZworICAgdGhlbSwgYXMgcmVjb21tZW5kZWQgaW4gUkZDMjEzMT8KKworQTogWWVzLCBkeW5tYWljYWxseSBhbGxvY2F0ZWQgSVAgYWRkcmVzc2VzIGFyZSBjaGVja2VkIGJ5IHNlbmRpbmcgYW4KKyAgIElDTVAgZWNobyByZXF1ZXN0IChwaW5nKS4gSWYgYSByZXBseSBpcyByZWNlaXZlZCwgdGhlbiBkbnNtYXNxCisgICBhc3N1bWVzIHRoYXQgdGhlIGFkZHJlc3MgaXMgaW4gdXNlLCBhbmQgYXR0ZW1wdHMgdG8gYWxsb2NhdGUgYW4KKyAgIGRpZmZlcmVudCBhZGRyZXNzLiBUaGUgd2FpdCBmb3IgYSByZXBseSBpcyBiZXR3ZWVuIHR3byBhbmQgdGhyZWUKKyAgIHNlY29uZHMuIEJlY2F1c2UgdGhlIERIQ1Agc2VydmVyIGlzIG5vdCByZS1lbnRyYW50LCBpdCBjYW5ub3Qgc2VydmUKKyAgIG90aGVyIERIQ1AgcmVxdWVzdHMgZHVyaW5nIHRoaXMgdGltZS4gVG8gYXZvaWQgZHJvcHBpbmcgcmVxdWVzdHMsCisgICB0aGUgYWRkcmVzcyBwcm9iZSBtYXkgYmUgc2tpcHBlZCB3aGVuIGRuc21hc3EgaXMgdW5kZXIgaGVhdnkgbG9hZC4KKworCitROiBJJ20gdXNpbmcgZG5zbWFzcSBvbiBhIG1hY2hpbmUgd2l0aCB0aGUgRmlyZXN0YXJ0ZXIgZmlyZXdhbGwsIGFuZAorICAgREhDUCBkb2Vzbid0IHdvcmsuIFdoYXQncyB0aGUgcHJvYmxlbT8KKworQTogVGhpcyBhIHZhcmlhbnQgb24gdGhlIGlwdGFibGVzIHByb2JsZW0uIEV4cGxpY2l0IGRldGFpbHMgb24gaG93IHRvCisgICBwcm9jZWVkIGNhbiBiZSBmb3VuZCBhdCAKKyAgIGh0dHA6Ly9saXN0cy50aGVrZWxsZXlzLm9yZy51ay9waXBlcm1haWwvZG5zbWFzcS1kaXNjdXNzLzIwMDVxMy8wMDA0MzEuaHRtbAorIAorCitROiBJJ20gdXNpbmcgZG5zbWFzcSBvbiBhIG1hY2hpbmUgd2l0aCB0aGUgc2hvcmV3YWxsIGZpcmV3YWxsLCBhbmQKKyAgIERIQ1AgZG9lc24ndCB3b3JrLiBXaGF0J3MgdGhlIHByb2JsZW0/CisKK0E6IFRoaXMgYSB2YXJpYW50IG9uIHRoZSBpcHRhYmxlcyBwcm9ibGVtLiBFeHBsaWNpdCBkZXRhaWxzIG9uIGhvdyB0bworICAgcHJvY2VlZCBjYW4gYmUgZm91bmQgYXQgCisgICBodHRwOi8vbGlzdHMudGhla2VsbGV5cy5vcmcudWsvcGlwZXJtYWlsL2Ruc21hc3EtZGlzY3Vzcy8yMDA3cTQvMDAxNzY0Lmh0bWwKKworCitROiBEbnNtYXNxIGZhaWxzIHRvIHN0YXJ0IHVwIHdpdGggYSBtZXNzYWdlIGFib3V0IGNhcGFiaWxpdGllcy4KKyAgIFdoeSBkaWQgdGhhdCBoYXBwZW4gYW5kIHdoYXQgY2FuIGRvIHRvIGZpeCBpdD8KKworQTogQ2hhbmdlIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb246IGVpdGhlciBkZXNlbGVjdCBDT05GSUdfU0VDVVJJVFkKKyAgIF9vcl8gc2VsZWN0IENPTkZJR19TRUNVUklUWV9DQVBBQklMSVRJRVMuIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gCisgICByZW1vdmUgdGhlIG5lZWQgdG8gc2V0IGNhcGFiaWxpdGllcyBieSBydW5uaW5nIGRuc21hc3EgYXMgcm9vdC4KKworUTogV2hlcmUgY2FuIEkgZ2V0IC5ycG1zIFN1aXRhYmxlIGZvciBTdXNlPworCitBOiBEbnNtYXNxIGlzIGluIFN1c2UgaXRzZWxmLCBhbmQgdGhlIGxhdGVzdCByZWxlYXNlcyBhcmUgYWxzbworICAgYXZhaWxhYmxlIGF0IGZ0cDovL2Z0cC5zdXNlLmNvbS9wdWIvcGVvcGxlL3VnLworCisKK1E6IENhbiBJIHJ1biBkbnNtYXNxIGluIGEgTGludXggdnNlcnZlcj8KKworQTogWWVzLCBhcyBhIEROUyBzZXJ2ZXIsIGRuc21hc3Egd2lsbCBqdXN0IHdvcmsgaW4gYSB2c2VydmVyLgorICAgVG8gdXNlIGRuc21hc3EncyBESENQIGZ1bmN0aW9uIHlvdSBuZWVkIHRvIGdpdmUgdGhlIHZzZXJ2ZXIKKyAgIGV4dHJhIHN5c3RlbSBjYXBhYmlsaXRpZXMuIFBsZWFzZSBub3RlIHRoYXQgZG9pbmcgc28gd2lsbCBsZXNzZXIgCisgICB0aGUgb3ZlcmFsbCBzZWN1cml0eSBvZiB5b3VyIHN5c3RlbS4gVGhlIGNhcGFiaWxpdGllcyAKKyAgIHJlcXVpcmVkIGFyZSBORVRfQURNSU4gYW5kIE5FVF9SQVcuIE5FVF9BRE1JTiBpcyBlc3NlbnRpYWwsIE5FVF9SQVcKKyAgIGlzIHJlcXVpcmVkIHRvIGRvIGFuIElDTVAgInBpbmciIGNoZWNrIG9uIG5ld2x5IGFsbG9jYXRlZAorICAgYWRkcmVzc2VzLiBJZiB5b3UgZG9uJ3QgbmVlZCB0aGlzIGNoZWNrLCB5b3UgY2FuIGRpc2FibGUgaXQgd2l0aAorICAgLS1uby1waW5nIGFuZCBvbWl0IHRoZSBORVRfUkFXIGNhcGFiaWxpdHkuIAorICAgQWRkaW5nIHRoZSBjYXBhYmlsaXRpZXMgaXMgZG9uZSBieSBhZGRpbmcgdGhlbSwgb25lIHBlciBsaW5lLCB0bworICAgZWl0aGVyIC9ldGMvdnNlcnZlcnMvPHZzZXJ2ZXJuYW1lPi9jY2FwYWJpbGl0aWVzIGZvciBhIDIuNCBrZXJuZWwgb3IKKyAgIC9ldGMvdnNlcnZlcnMvPHZzZXJ2ZXJuYW1lPi9iY2FwYWJpbGl0aWVzIGZvciBhIDIuNiBrZXJuZWwgKHBsZWFzZQorICAgcmVmZXIgdG8gdGhlIHZzZXJ2ZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisKKworUTogV2hhdCdzIHRoZSBwcm9ibGVtIHdpdGggc3lzbG9nIGFuZCBkbnNtYXNxPworCitBOiBJbiBhbG1vc3QgYWxsIGNhc2VzOiBub25lLiBJZiB5b3UgaGF2ZSB0aGUgbm9ybWFsIGFycmFuZ2VtZW50IHdpdGgKKyAgIGxvY2FsIGRhZW1vbnMgbG9nZ2luZyB0byBhIGxvY2FsIHN5c2xvZywgd2hpY2ggdGhlbiB3cml0ZXMgdG8gZGlzaywKKyAgIHRoZW4gdGhlcmUncyBuZXZlciBhIHByb2JsZW0uIElmIHlvdSB1c2UgbmV0d29yayBsb2dnaW5nLCB0aGVuCisgICB0aGVyZSdzIGEgcG90ZW50aWFsIHByb2JsZW0gd2l0aCBkZWFkbG9jazogdGhlIHN5c2xvZyBkYWVtb24gd2lsbAorICAgZG8gRE5TIGxvb2t1cHMgc28gdGhhdCBpdCBjYW4gbG9nIHRoZSBzb3VyY2Ugb2YgbG9nIG1lc3NhZ2VzLAorICAgdGhlc2UgbG9va3VwcyB3aWxsIChkZXBlbmRpbmcgb24gZXhhY3QgY29uZmlndXJhdGlvbikgZ28gdGhyb3VnaAorICAgZG5zbWFzcSwgd2hpY2ggYWxzbyBzZW5kcyBsb2cgbWVzc2FnZXMuIFdpdGggYmFkIHRpbWluZywgeW91IGNhbiAKKyAgIGFycml2ZSBhdCBhIHNpdHVhdGlvbiB3aGVyZSBzeXNsb2cgaXMgd2FpdGluZyBmb3IgZG5zbWFzcSwgYW5kCisgICBkbnNtYXNxIGlzIHdhaXRpbmcgZm9yIHN5c2xvZzsgdGhleSB3aWxsIGJvdGggd2FpdCBmb3JldmVyLiBUaGlzCisgICBwcm9ibGVtIGlzIGZpeGVkIGZyb20gZG5zbWFzcS0yLjM5LCB3aGljaCBpbnRyb2R1Y2VzIGFzeW5jaHJvbm91cworICAgbG9nZ2luZzogZG5zbWFzcSBubyBsb25nZXIgd2FpdHMgZm9yIHN5c2xvZyBhbmQgdGhlIGRlYWRsb2NrIGlzCisgICBicm9rZW4uIFRoZXJlIGlzIGEgcmVtYWluaW5nIHByb2JsZW0gaW4gMi4zOSwgd2hlcmUgImxvZy1xdWVyaWVzIgorICAgaXMgaW4gdXNlLiBJbiB0aGlzIGNhc2UgbW9zdCBETlMgcXVlcmllcyBnZW5lcmF0ZSB0d28gbG9nIGxpbmVzLCBpZgorICAgdGhlc2UgZ28gdG8gYSBzeXNsb2cgd2hpY2ggaXMgZG9pbmcgYSBETlMgbG9va3VwIGZvciBlYWNoIGxvZyBsaW5lLAorICAgdGhlbiB0aG9zZSBxdWVyaWVzIHdpbGwgaW4gdHVybiBnZW5lcmF0ZSB0d28gbW9yZSBsb2cgbGluZXMsIGFuZCBhIAorICAgY2hhaW4gcmVhY3Rpb24gcnVuYXdheSB3aWxsIG9jY3VyLiBUbyBhdm9pZCB0aGlzLCB1c2Ugc3lzbG9nLW5nCisgICBhbmQgdHVybiBvbiBzeXNsb2ctbmcncyBkbnMtY2FjaGUgZnVuY3Rpb24uCisKKworCisKKworCisKKyAKKworCisKKworICAgCisKKwkgICAgICAKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2QwN2MyNAotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsNzggQEAKKyMgZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBTaW1vbiBLZWxsZXkKKyMKKyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIworIyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMgICAgCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK1BSRUZJWCA9IC91c3IvbG9jYWwKK0JJTkRJUiA9ICR7UFJFRklYfS9zYmluCitNQU5ESVIgPSAke1BSRUZJWH0vc2hhcmUvbWFuCitMT0NBTEVESVIgPSAke1BSRUZJWH0vc2hhcmUvbG9jYWxlCisKK1NSQyA9IHNyYworUE8gPSBwbworTUFOID0gbWFuCisKK1BLR19DT05GSUcgPSBwa2ctY29uZmlnCitJTlNUQUxMID0gaW5zdGFsbAorTVNHTUVSR0UgPSBtc2dtZXJnZQorTVNHRk1UID0gbXNnZm10CitYR0VUVEVYVCA9IHhnZXR0ZXh0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0ROU01BU1FfQ0ZMQUdTPWBlY2hvICQoQ09QVFMpIHwgLi4vYmxkL3BrZy13cmFwcGVyIEhBVkVfREJVUyAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGRidXMtMWAgCitETlNNQVNRX0xJQlM9ICBgZWNobyAkKENPUFRTKSB8IC4uL2JsZC9wa2ctd3JhcHBlciBIQVZFX0RCVVMgJChQS0dfQ09ORklHKSAtLWxpYnMgZGJ1cy0xYCAKK1NVTk9TX0xJQlM9IGBpZiB1bmFtZSB8IGdyZXAgU3VuT1MgMj4mMSA+L2Rldi9udWxsOyB0aGVuIGVjaG8gLWxzb2NrZXQgLWxuc2wgLWxwb3NpeDQ7IGZpYAorCithbGwgOiAgIGRuc21hc3EKKworZG5zbWFzcSA6CisJQGNkICQoU1JDKSAmJiAkKE1BS0UpIFwKKyBETlNNQVNRX0NGTEFHUz0iJChETlNNQVNRX0NGTEFHUykiIFwKKyBETlNNQVNRX0xJQlM9IiQoRE5TTUFTUV9MSUJTKSAkKFNVTk9TX0xJQlMpIiBcCisgLWYgLi4vYmxkL01ha2VmaWxlIGRuc21hc3EgCisKK2NsZWFuIDoKKwlybSAtZiAqfiAkKFNSQykvKi5tbyBjb250cmliLyovKn4gKi8qfiAkKFNSQykvKi5wb3QgCisJcm0gLWYgJChTUkMpLyoubyAkKFNSQykvZG5zbWFzcS5hICQoU1JDKS9kbnNtYXNxIGNvcmUgKi9jb3JlCisKK2luc3RhbGwgOiBhbGwgaW5zdGFsbC1jb21tb24KKworaW5zdGFsbC1jb21tb24gOgorCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQoQklORElSKSAtZCAkKERFU1RESVIpJChNQU5ESVIpL21hbjgKKwkkKElOU1RBTEwpIC1tIDY0NCAkKE1BTikvZG5zbWFzcS44ICQoREVTVERJUikkKE1BTkRJUikvbWFuOCAKKwkkKElOU1RBTEwpIC1tIDc1NSAkKFNSQykvZG5zbWFzcSAkKERFU1RESVIpJChCSU5ESVIpCisKK2FsbC1pMThuIDoKKwlAY2QgJChTUkMpICYmICQoTUFLRSkgXAorIEkxOE49LURMT0NBTEVESVI9J1wiJChMT0NBTEVESVIpXCInIFwKKyBETlNNQVNRX0NGTEFHUz0iJChETlNNQVNRX0NGTEFHUykgYCQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgbGliaWRuYCIgXAorIEROU01BU1FfTElCUz0iJChETlNNQVNRX0xJQlMpICQoU1VOT1NfTElCUykgYCQoUEtHX0NPTkZJRykgLS1saWJzIGxpYmlkbmAiICBcCisgLWYgLi4vYmxkL01ha2VmaWxlIGRuc21hc3EgCisJQGNkICQoUE8pOyBmb3IgZiBpbiAqLnBvOyBkbyBcCisJCWNkIC4uLyQoU1JDKSAmJiAkKE1BS0UpIFwKKyBNU0dNRVJHRT0kKE1TR01FUkdFKSBNU0dGTVQ9JChNU0dGTVQpIFhHRVRURVhUPSQoWEdFVFRFWFQpIFwKKyAtZiAuLi9ibGQvTWFrZWZpbGUgJCR7ZiUucG99Lm1vOyBcCisJZG9uZQorCitpbnN0YWxsLWkxOG4gOiBhbGwtaTE4biBpbnN0YWxsLWNvbW1vbgorCWNkICQoU1JDKTsgLi4vYmxkL2luc3RhbGwtbW8gJChERVNURElSKSQoTE9DQUxFRElSKSAkKElOU1RBTEwpCisJY2QgJChNQU4pOyAuLi9ibGQvaW5zdGFsbC1tYW4gJChERVNURElSKSQoTUFORElSKSAkKElOU1RBTEwpCisKK21lcmdlIDoKKwlAY2QgJChTUkMpICYmICQoTUFLRSkgWEdFVFRFWFQ9JChYR0VUVEVYVCkgLWYgLi4vYmxkL01ha2VmaWxlIGRuc21hc3EucG90CisJQGNkICQoUE8pOyBmb3IgZiBpbiAqLnBvOyBkbyBcCisJCWVjaG8gLW4gbXNnbWVyZ2UgJCRmICYmICQoTVNHTUVSR0UpIC0tbm8td3JhcCAtVSAkJGYgLi4vJChTUkMpL2Ruc21hc3EucG90OyBcCisJZG9uZQorCisKZGlmZiAtLWdpdCBhL2JsZC9NYWtlZmlsZSBiL2JsZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41M2RhYjM0Ci0tLSAvZGV2L251bGwKKysrIGIvYmxkL01ha2VmaWxlCkBAIC0wLDAgKzEsMTcgQEAKK0NGTEFHUyA9IC1XYWxsIC1XIC1PMgorCitPQkpTID0gY2FjaGUubyByZmMxMDM1Lm8gdXRpbC5vIG9wdGlvbi5vIGZvcndhcmQubyBuZXR3b3JrLm8gXAorICAgICAgIGRuc21hc3EubyBkaGNwLm8gbGVhc2UubyByZmMyMTMxLm8gbmV0bGluay5vIGRidXMubyBicGYubyBcCisgICAgICAgaGVscGVyLm8gdGZ0cC5vIGxvZy5vCisKKy5jLm86CisJJChDQykgJChDRkxBR1MpICQoQ09QVFMpICQoSTE4TikgJChETlNNQVNRX0NGTEFHUykgJChSUE1fT1BUX0ZMQUdTKSAtYyAkPAorCitkbnNtYXNxIDogJChPQkpTKQorCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgICQoT0JKUykgJChETlNNQVNRX0xJQlMpICQoTElCUykgCisgCitkbnNtYXNxLnBvdCA6ICQoT0JKUzoubz0uYykgZG5zbWFzcS5oIGNvbmZpZy5oCisJJChYR0VUVEVYVCkgLWQgZG5zbWFzcSAtLWZvcmVpZ24tdXNlciAtLW9taXQtaGVhZGVyIC0ta2V5d29yZD1fIC1vICRAIC1pICQoT0JKUzoubz0uYykKKworJS5tbyA6IC4uL3BvLyUucG8gZG5zbWFzcS5wb3QKKwkkKE1TR01FUkdFKSAtbyAtIC4uL3BvLyQqLnBvIGRuc21hc3EucG90IHwgJChNU0dGTVQpIC1vICQqLm1vIC0KZGlmZiAtLWdpdCBhL2JsZC9pbnN0YWxsLW1hbiBiL2JsZC9pbnN0YWxsLW1hbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNGNmM2RjCi0tLSAvZGV2L251bGwKKysrIGIvYmxkL2luc3RhbGwtbWFuCkBAIC0wLDAgKzEsOSBAQAorIyEvYmluL3NoCisKK2ZvciBmIGluICo7IGRvCisgIGlmIFsgLWQgJGYgXTsgdGhlbgorICAgICAkMiAtbSA3NTUgLWQgJDEvJGYvbWFuOCAKKyAgICAgJDIgLW0gNjQ0ICRmL2Ruc21hc3EuOCAkMS8kZi9tYW44CisgICAgIGVjaG8gaW5zdGFsbGluZyAkMS8kZi9tYW44L2Ruc21hc3EuOAorICBmaQorZG9uZQpkaWZmIC0tZ2l0IGEvYmxkL2luc3RhbGwtbW8gYi9ibGQvaW5zdGFsbC1tbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMTFmYTlmCi0tLSAvZGV2L251bGwKKysrIGIvYmxkL2luc3RhbGwtbW8KQEAgLTAsMCArMSw5IEBACisjIS9iaW4vc2gKKworZm9yIGYgaW4gKi5tbzsgZG8KKyAgJDIgLW0gNzU1IC1kICQxLyR7ZiUubW99L0xDX01FU1NBR0VTCisgICQyIC1tIDY0NCAkZiAkMS8ke2YlLm1vfS9MQ19NRVNTQUdFUy9kbnNtYXNxLm1vCisgIGVjaG8gaW5zdGFsbGluZyAkMS8ke2YlLm1vfS9MQ19NRVNTQUdFUy9kbnNtYXNxLm1vCitkb25lCisKKwpkaWZmIC0tZ2l0IGEvYmxkL3BrZy13cmFwcGVyIGIvYmxkL3BrZy13cmFwcGVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRmM2I3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9ibGQvcGtnLXdyYXBwZXIKQEAgLTAsMCArMSwxMSBAQAorIyEvYmluL3NoCisKK3NlYXJjaD0kMQorc2hpZnQKKworaWYgZ3JlcCAiXlwjLipkZWZpbmUuKiRzZWFyY2giIGNvbmZpZy5oIDI+JjEgPi9kZXYvbnVsbCB8fCBcCisgICBncmVwICRzZWFyY2ggMj4mMSA+L2Rldi9udWxsIDsgdGhlbgorICBleGVjICQqCitmaQorCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvU29sYXJpczEwL1JFQURNRSBiL2NvbnRyaWIvU29sYXJpczEwL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMDM1ODc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9Tb2xhcmlzMTAvUkVBRE1FCkBAIC0wLDAgKzEsMjggQEAKK0Zyb206IERhdmlkIENvbm5lbGx5IDxkY29ubmVsbHlAZ21haWwuY29tPgorRGF0ZTogTW9uLCBBcHIgNywgMjAwOCBhdCAzOjMxIEFNCitTdWJqZWN0OiBTb2xhcmlzIDEwIHNlcnZpY2UgbWFuaWZlc3QKK1RvOiBkbnNtYXNxLWRpc2N1c3NAbGlzdHMudGhla2VsbGV5cy5vcmcudWsKKworCitJJ3ZlIGZvdW5kIGRuc21hc3EgbXVjaCBlYXNpZXIgdG8gc2V0IHVwIG9uIG15IGhvbWUgc2VydmVyIHJ1bm5pbmcgU29sYXJpcworMTAgdGhhbiB0aGUgc3RvY2sgZGhjcC9kbnMgc2VydmVyLCB3aGljaCBpcyBwcm9iYWJseSBvdmVya2lsbCBhbnl3YXkgZm9yIG15CitzaW1wbGUgaG9tZSBuZXR3b3JrIG5lZWRzLiBTaW5jZSBTb2xhcmlzIG5vdyB1c2VzIFNNRiAoU2VydmljZSBNYW5hZ2VtZW50CitGYWNpbGl0eSkgdG8gbWFuYWdlIHNlcnZpY2VzIEkgdGhvdWdodCBJJ2QgY3JlYXRlIGEgc2ltcGxlIHNlcnZpY2UgbWFuaWZlc3QKK2ZvciB0aGUgZG5zbWFzcSBzZXJ2aWNlLiBUaGUgbWFuaWZlc3QgY3VycmVudGx5IGFzc3VtZXMgdGhhdCBkbnNtYXNxIGhhcworYmVlbiBpbnN0YWxsZWQgaW4gJy91c3IvbG9jYWwvc2Jpbi9kbnNtYXNxJyBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpbgorJy91c3IvbG9jYWwvZXRjL2Ruc21hc3EuY29uZicsIHNvIHlvdSBtYXkgaGF2ZSB0byBhZGp1c3QgdGhlc2UgcGF0aHMgZm9yCit5b3VyIGxvY2FsIGluc3RhbGxhdGlvbi4gSGVyZSBhcmUgdGhlIHN0ZXBzIEkgZm9sbG93ZWQgdG8gaW5zdGFsbCBhbmQgZW5hYmxlCit0aGUgZG5zbWFzcSBzZXJ2aWNlOgorICAjIHN2Y2NmZyBpbXBvcnQgZG5zbWFzcS54bWwKKyAgIyBzdmNhZG0gZW5hYmxlIGRuc21hc3EKKworVG8gY29uZmlybSB0aGF0IHRoZSBzZXJ2aWNlIGlzIGVuYWJsZWQgYW5kIG9ubGluZToKKworICAjIHN2Y3MgLWwgZG5zbWFzcQorCitJJ3ZlIGp1c3Qgc3RhcnRlZCBsZWFybmluZyBhYm91dCBTTUYgc28gaWYgYW55b25lIGhhcyBhbnkKK2NvcnJlY3Rpb25zL2ZlZWRiYWNrIHRoZXkgYXJlIG1vcmUgdGhhbiB3ZWxjb21lLgorCitUaGFua3MsCitEYXZpZAorCmRpZmYgLS1naXQgYS9jb250cmliL1NvbGFyaXMxMC9kbnNtYXNxLnhtbCBiL2NvbnRyaWIvU29sYXJpczEwL2Ruc21hc3EueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdkYTAyNTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL1NvbGFyaXMxMC9kbnNtYXNxLnhtbApAQCAtMCwwICsxLDY1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzwhRE9DVFlQRSBzZXJ2aWNlX2J1bmRsZSBTWVNURU0gIi91c3Ivc2hhcmUvbGliL3htbC9kdGQvc2VydmljZV9idW5kbGUuZHRkLjEiPgorCis8IS0tIFNlcnZpY2UgbWFuaWZlc3QgZm9yIGRuc21hc3EgLS0+CisKKzxzZXJ2aWNlX2J1bmRsZSB0eXBlPSdtYW5pZmVzdCcgbmFtZT0nZG5zbWFzcSc+CisgIDxzZXJ2aWNlIG5hbWU9J25ldHdvcmsvZG5zbWFzcScgdHlwZT0nc2VydmljZScgdmVyc2lvbj0nMSc+CisKKyAgICA8Y3JlYXRlX2RlZmF1bHRfaW5zdGFuY2UgZW5hYmxlZD0nZmFsc2UnLz4KKyAgICA8c2luZ2xlX2luc3RhbmNlLz4KKworICAgIDxkZXBlbmRlbmN5IG5hbWU9J211bHRpLXVzZXInCisgICAgICAgICAgICAgICAgZ3JvdXBpbmc9J3JlcXVpcmVfYWxsJworICAgICAgICAgICAgICAgIHJlc3RhcnRfb249J3JlZnJlc2gnCisgICAgICAgICAgICAgICAgdHlwZT0nc2VydmljZSc+CisgICAgICA8c2VydmljZV9mbXJpIHZhbHVlPSdzdmM6L21pbGVzdG9uZS9tdWx0aS11c2VyJy8+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3kgbmFtZT0nY29uZmlnJworCQlncm91cGluZz0ncmVxdWlyZV9hbGwnCisJCXJlc3RhcnRfb249J3Jlc3RhcnQnCisJCXR5cGU9J3BhdGgnPgorICAgICAgPHNlcnZpY2VfZm1yaSB2YWx1ZT0nZmlsZTovLy91c3IvbG9jYWwvZXRjL2Ruc21hc3EuY29uZicvPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbnQgbmFtZT0nZG5zbWFzcV9tdWx0aS11c2VyLXNlcnZlcicKKyAgICAgICAgICAgICAgIGdyb3VwaW5nPSdvcHRpb25hbF9hbGwnCisgICAgICAgICAgICAgICByZXN0YXJ0X29uPSdub25lJz4KKyAgICAgIDxzZXJ2aWNlX2ZtcmkgdmFsdWU9J3N2YzovbWlsZXN0b25lL211bHRpLXVzZXItc2VydmVyJyAvPgorICAgIDwvZGVwZW5kZW50PgorCisgICAgPGV4ZWNfbWV0aG9kIHR5cGU9J21ldGhvZCcgbmFtZT0nc3RhcnQnCisgICAgICAgICAgICAgICAgIGV4ZWM9Jy91c3IvbG9jYWwvc2Jpbi9kbnNtYXNxIC1DIC91c3IvbG9jYWwvZXRjL2Ruc21hc3EuY29uZicKKyAgICAgICAgICAgICAgICAgdGltZW91dF9zZWNvbmRzPSc2MCcgPgorICAgICAgPG1ldGhvZF9jb250ZXh0PgorICAgICAgICA8bWV0aG9kX2NyZWRlbnRpYWwgdXNlcj0ncm9vdCcgZ3JvdXA9J3Jvb3QnIHByaXZpbGVnZXM9J2FsbCcvPgorICAgICAgPC9tZXRob2RfY29udGV4dD4KKyAgICA8L2V4ZWNfbWV0aG9kPgorCisgICAgPGV4ZWNfbWV0aG9kIHR5cGU9J21ldGhvZCcKKyAgICAgICAgICAgICAgICAgbmFtZT0nc3RvcCcKKyAgICAgICAgICAgICAgICAgZXhlYz0nOmtpbGwnCisgICAgICAgICAgICAgICAgIHRpbWVvdXRfc2Vjb25kcz0nNjAnLz4KKworICAgIDxleGVjX21ldGhvZCB0eXBlPSdtZXRob2QnCisgICAgICAgICAgICAgICAgIG5hbWU9J3JlZnJlc2gnCisgICAgICAgICAgICAgICAgIGV4ZWM9JzpraWxsIC1IVVAnCisgICAgICAgICAgICAgICAgIHRpbWVvdXRfc2Vjb25kcz0nNjAnIC8+CisKKyAgICA8dGVtcGxhdGU+CisgICAgICA8Y29tbW9uX25hbWU+CisgICAgICAgIDxsb2N0ZXh0IHhtbDpsYW5nPSdDJz5kbnNtYXNxIHNlcnZlcjwvbG9jdGV4dD4KKyAgICAgIDwvY29tbW9uX25hbWU+CisgICAgICA8ZGVzY3JpcHRpb24+CisgICAgICAgIDxsb2N0ZXh0IHhtbDpsYW5nPSdDJz4KK2Ruc21hc3EgLSBBIGxpZ2h0d2VpZ2h0IERIQ1AgYW5kIGNhY2hpbmcgRE5TIHNlcnZlci4KKyAgICAgICAgPC9sb2N0ZXh0PgorICAgICAgPC9kZXNjcmlwdGlvbj4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICA8bWFucGFnZSB0aXRsZT0nZG5zbWFzcScgc2VjdGlvbj0nOCcgbWFucGF0aD0nL3Vzci9sb2NhbC9tYW4nLz4KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICA8L3RlbXBsYXRlPgorCisgIDwvc2VydmljZT4KKzwvc2VydmljZV9idW5kbGU+CmRpZmYgLS1naXQgYS9jb250cmliL1N1c2UvUkVBRE1FIGIvY29udHJpYi9TdXNlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZmRjMTg2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9TdXNlL1JFQURNRQpAQCAtMCwwICsxLDYgQEAKK1RoaXMgcGFja2FnaW5nIGlzIG5vdyB1bm1haW50YWluZWQgaW4gdGhlIGRuc21hc3Egc291cmNlOiBkbnNtYXNxIGlzCitpbmNsdWRlZCBpbiBTdXNlIHByb3BlciwgYW5kIHVwLXRvLWRhdGUgcGFja2FnZXMgYXJlIG5vdyBhdmFpbGFibGUKK2Zyb20gCisKK2Z0cDovL2Z0cC5zdXNlLmNvbS9wdWIvcGVvcGxlL3VnLworCmRpZmYgLS1naXQgYS9jb250cmliL1N1c2UvUkVBRE1FLnN1c2VmaXJld2FsbCBiL2NvbnRyaWIvU3VzZS9SRUFETUUuc3VzZWZpcmV3YWxsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmMTljYTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL1N1c2UvUkVBRE1FLnN1c2VmaXJld2FsbApAQCAtMCwwICsxLDI3IEBACitUaGlzIGlzIGEgcGF0Y2ggYWdhaW5zdCBTdVNFZmlyZXdhbGwyLTMuMS0yMDYgKFN1U0UgOS54IGFuZCBvbGRlcikKK0l0IGZpeGVzIHRoZSBkZXBhbmN5IGZyb20gdGhlIGRucyBkYWVtb24gbmFtZSAnbmFtZWQnCitBZnRlciBhcHBlbmRpbmcgdGhlIHBhdGNoLCB0aGUgU3VTRWZpcmV3YWxsIGlzIGFnYWluIGFibGUgdG8gYXV0b2RldGVjdCAKK3RoZSBkbnNtYXNxIG5hbWVkIHNlcnZpY2UuCitUaGlzIGlzIGEgdmVyeSBvbGQgYnVnIGluIHRoZSBTdVNFZmlyZXdhbGwgc2NyaXB0LgorVGhlIFN1U0UgcGVvcGxlIHRoaW5rIHRoZSBuYW1lIG9mIHRoZSBkbnMgc2VydmVyIHdpbGwgYWxsd2F5cyAnbmFtZWQnCisKKworLS0tIC9zYmluL1N1U0VmaXJld2FsbDIub3JpZwkyMDA0LTAxLTIzIDEzOjMwOjA5LjAwMDAwMDAwMCArMDEwMAorKysrIC9zYmluL1N1U0VmaXJld2FsbDIJMjAwNC0wMS0yMyAxMzozMTo1Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC03NjQsNyArNzY0LDcgQEAKKyAgICAgZWNobyAnRldfQUxMT1dfSU5DT01JTkdfSElHSFBPUlRTX1VEUCBzaG91bGQgYmUgc2V0IHRvIHllcywgaWYgeW91IGFyZSBydW5uaW5nIGEgRE5TIHNlcnZlciEnCisgCisgdGVzdCAiJEZXX1NFUlZJQ0VfQVVUT0RFVEVDVCIgPSB5ZXMgLW8gIiRGV19TRVJWSUNFX0FVVE9ERVRFQ1QiID0gZG16IC1vICIkRldfU0VSVklDRV9BVVRPREVURUNUIiA9IGV4dCAmJiB7CistICAgIHRlc3QgIiRGV19TRVJWSUNFX0ROUyIgPSBubyAtYSAnIScgIiRTVEFSVF9OQU1FRCIgPSBubyAmJiBjaGVja19zcnYgbmFtZWQgJiYgeworKyAgICB0ZXN0ICIkRldfU0VSVklDRV9ETlMiID0gbm8gLWEgJyEnICIkU1RBUlRfTkFNRUQiID0gbm8gJiYgY2hlY2tfc3J2IGRuc21hc3EgJiYgeworIAllY2hvIC1lICdXYXJuaW5nOiBkZXRlY3RlZCBhY3RpdmF0ZWQgbmFtZWQsIGVuYWJsaW5nIEZXX1NFUlZJQ0VfRE5TIQorIFlvdSBzdGlsbCBoYXZlIHRvIGFsbG93IHRjcC91ZHAgcG9ydCA1MyBvbiBpbnRlcm5hbCwgZG16IGFuZC9vciBleHRlcm5hbC4nCisgCUZXX1NFUlZJQ0VfRE5TPSRGV19TRVJWSUNFX0FVVE9ERVRFQ1QKK0BAIC04NzgsNyArODc4LDcgQEAKKyB0ZXN0IC1lIC9ldGMvcmVzb2x2LmNvbmYgfHwgZWNobyAiV2FybmluZzogL2V0Yy9yZXNvbHYuY29uZiBub3QgZm91bmQiCisgIyBHZXQgcG9ydHMvSVAgYmluZGluZ3Mgb2YgTkFNRUQvU1FVSUQKKyB0ZXN0ICIkRldfU0VSVklDRV9ETlMiID0geWVzIC1vICIkRldfU0VSVklDRV9ETlMiID0gZG16IC1vICIkRldfU0VSVklDRV9ETlMiID0gZXh0IC1vICIkU1RBUlRfTkFNRUQiID0geWVzICYmIEROU19QT1JUPWAkTFNPRiAtaSAtbiAtUCB8IFwKKy0gICAgJEFXSyAtRjogJy9ebmFtZWQgLiogVURQIC8ge3ByaW50ICQyfSd8ICRHUkVQIC12dyA1MyB8ICRTT1JUIC11bmAKKysgICAgJEFXSyAtRjogJy9eZG5zbWFzcSAuKiBVRFAgLyB7cHJpbnQgJDJ9J3wgJEdSRVAgLXZ3IDUzIHwgJFNPUlQgLXVuYAorIHRlc3QgIiRGV19TRVJWSUNFX1NRVUlEIiA9IHllcyAtbyAiJEZXX1NFUlZJQ0VfU1FVSUQiID0gZG16IC1vICIkRldfU0VSVklDRV9TUVVJRCIgPSBleHQgLW8gIiRTVEFSVF9TUVVJRCIgPSB5ZXMgJiYgU1FVSURfUE9SVD1gJExTT0YgLWkgLW4gLVAgfCBcCisgICAgICRBV0sgLUY6ICcvXnNxdWlkIC4qIFVEUC8ge3ByaW50ICQyfSd8ICRTT1JUIC11bmAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvU3VzZS9kbnNtYXNxLVN1U0UucGF0Y2ggYi9jb250cmliL1N1c2UvZG5zbWFzcS1TdVNFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyNjI0NWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL1N1c2UvZG5zbWFzcS1TdVNFLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKKy0tLSBtYW4vZG5zbWFzcS44CTIwMDQtMDgtMDggMjA6NTc6NTYuMDAwMDAwMDAwICswMjAwCisrKysgbWFuL2Ruc21hc3EuOAkyMDA0LTA4LTEyIDAwOjQwOjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTY5LDcgKzY5LDcgQEAKKyAuVFAKKyAuQiBcLWcsIC0tZ3JvdXA9PGdyb3VwbmFtZT4gCisgU3BlY2lmeSB0aGUgZ3JvdXAgd2hpY2ggZG5zbWFzcSB3aWxsIHJ1bgorLWFzLiBUaGUgZGVmYXVsdHMgdG8gImRpcCIsIGlmIGF2YWlsYWJsZSwgdG8gZmFjaWxpdGF0ZSBhY2Nlc3MgdG8KKythcy4gVGhlIGRlZmF1bHRzIHRvICJkaWFsb3V0IiwgaWYgYXZhaWxhYmxlLCB0byBmYWNpbGl0YXRlIGFjY2VzcyB0bworIC9ldGMvcHBwL3Jlc29sdi5jb25mIHdoaWNoIGlzIG5vdCBub3JtYWxseSB3b3JsZCByZWFkYWJsZS4KKyAuVFAKKyAuQiBcLXYsIC0tdmVyc2lvbgorLS0tIHNyYy9jb25maWcuaAkyMDA0LTA4LTExIDExOjM5OjE4LjAwMDAwMDAwMCArMDIwMAorKysrIHNyYy9jb25maWcuaAkyMDA0LTA4LTEyIDAwOjQwOjAxLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0LDcgKzQ0LDcgQEAKKyAjZW5kaWYKKyAjZGVmaW5lIERFRkxFQVNFIDM2MDAgLyogZGVmYXVsdCBsZWFzZSB0aW1lLCAxIGhvdXIgKi8KKyAjZGVmaW5lIENIVVNFUiAibm9ib2R5IgorLSNkZWZpbmUgQ0hHUlAgImRpcCIKKysjZGVmaW5lIENIR1JQICJkaWFsb3V0IgorICNkZWZpbmUgREhDUF9TRVJWRVJfUE9SVCA2NworICNkZWZpbmUgREhDUF9DTElFTlRfUE9SVCA2OAorIAorCmRpZmYgLS1naXQgYS9jb250cmliL1N1c2UvZG5zbWFzcS1zdXNlLnNwZWMgYi9jb250cmliL1N1c2UvZG5zbWFzcS1zdXNlLnNwZWMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmY4YmE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvU3VzZS9kbnNtYXNxLXN1c2Uuc3BlYwpAQCAtMCwwICsxLDExMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBHZW5lcmFsCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK05hbWU6IGRuc21hc3EKK1ZlcnNpb246IDIuMzMKK1JlbGVhc2U6IDEKK0NvcHlyaWdodDogR1BMCitHcm91cDogUHJvZHVjdGl2aXR5L05ldHdvcmtpbmcvRE5TL1NlcnZlcnMKK1ZlbmRvcjogU2ltb24gS2VsbGV5CitQYWNrYWdlcjogU2ltb24gS2VsbGV5CitVUkw6IGh0dHA6Ly93d3cudGhla2VsbGV5cy5vcmcudWsvZG5zbWFzcQorUHJvdmlkZXM6IGRuc19kYWVtb24KK0NvbmZsaWN0czogYmluZCBiaW5kOCBiaW5kOQorUHJlUmVxOiAlZmlsbHVwX3ByZXJlcSAlaW5zc2Vydl9wcmVyZXEKK0F1dG9yZXFwcm92OiBvbgorU291cmNlMDogJXtuYW1lfS0le3ZlcnNpb259LnRhci5iejIKK0J1aWxkUm9vdDogL3Zhci90bXAvJXtuYW1lfS0le3ZlcnNpb259CitTdW1tYXJ5OiBBIGxpZ2h0d2VpZ2h0IGNhY2hpbmcgbmFtZXNlcnZlcgorCislZGVzY3JpcHRpb24KK0Ruc21hc3EgaXMgbGlnaHR3ZWlnaHQsIGVhc3kgdG8gY29uZmlndXJlIEROUyBmb3J3YXJkZXIgYW5kIERIQ1Agc2VydmVyLiBJdCAKK2lzIGRlc2lnbmVkIHRvIHByb3ZpZGUgRE5TIGFuZCwgb3B0aW9uYWxseSwgREhDUCwgdG8gYSBzbWFsbCBuZXR3b3JrLiBJdCBjYW4KK3NlcnZlIHRoZSBuYW1lcyBvZiBsb2NhbCBtYWNoaW5lcyB3aGljaCBhcmUgbm90IGluIHRoZSBnbG9iYWwgRE5TLiBUaGUgREhDUCAKK3NlcnZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIEROUyBzZXJ2ZXIgYW5kIGFsbG93cyBtYWNoaW5lcyB3aXRoIERIQ1AtYWxsb2NhdGVkCithZGRyZXNzZXMgdG8gYXBwZWFyIGluIHRoZSBETlMgd2l0aCBuYW1lcyBjb25maWd1cmVkIGVpdGhlciBpbiBlYWNoIGhvc3Qgb3IgCitpbiBhIGNlbnRyYWwgY29uZmlndXJhdGlvbiBmaWxlLiBEbnNtYXNxIHN1cHBvcnRzIHN0YXRpYyBhbmQgZHluYW1pYyBESENQIAorbGVhc2VzIGFuZCBCT09UUCBmb3IgbmV0d29yayBib290aW5nIG9mIGRpc2tsZXNzIG1hY2hpbmVzLgorCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBCdWlsZAorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCislcHJlcAorJXNldHVwIC1xCitwYXRjaCAtcDAgPHJwbS8le25hbWV9LVN1U0UucGF0Y2gKKworJWJ1aWxkCislez9zdXNlX3VwZGF0ZV9jb25maWc6JXtzdXNlX3VwZGF0ZV9jb25maWcgLWZ9fQorbWFrZSBhbGwtaTE4biBERVNURElSPSRSUE1fQlVJTERfUk9PVCBQUkVGSVg9L3VzcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEluc3RhbGwKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworJWluc3RhbGwKK3JtIC1yZiAkUlBNX0JVSUxEX1JPT1QKK21rZGlyIC1wICR7UlBNX0JVSUxEX1JPT1R9L2V0Yy9pbml0LmQKK21ha2UgaW5zdGFsbC1pMThuIERFU1RESVI9JFJQTV9CVUlMRF9ST09UIFBSRUZJWD0vdXNyCitpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSA3NTUgcnBtL3JjLmRuc21hc3Etc3VzZSAkUlBNX0JVSUxEX1JPT1QvZXRjL2luaXQuZC9kbnNtYXNxCitpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSA2NDQgZG5zbWFzcS5jb25mLmV4YW1wbGUgJFJQTV9CVUlMRF9ST09UL2V0Yy9kbnNtYXNxLmNvbmYKK3N0cmlwICRSUE1fQlVJTERfUk9PVC91c3Ivc2Jpbi9kbnNtYXNxCitsbiAtc2YgLi4vLi4vZXRjL2luaXQuZC9kbnNtYXNxICRSUE1fQlVJTERfUk9PVC91c3Ivc2Jpbi9yY2Ruc21hc3EKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBDbGVhbiB1cAorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCislY2xlYW4KK3JtIC1yZiAkUlBNX0JVSUxEX1JPT1QKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBQb3N0LWluc3RhbGwgc2NyaXB0bGV0CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyVwb3N0Cisle2ZpbGx1cF9hbmRfaW5zc2VydiBkbnNtYXNxfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFBvc3QtdW5pbnN0YWxsIHNjcmlwdGxldAorIworIyBUaGUgJXBvc3R1biBzY3JpcHQgZXhlY3V0ZXMgYWZ0ZXIgdGhlIHBhY2thZ2UgaGFzIGJlZW4gcmVtb3ZlZC4gSXQgaXMgdGhlCisjIGxhc3QgY2hhbmNlIGZvciBhIHBhY2thZ2UgdG8gY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCislcG9zdHVuCisle2luc3NlcnZfY2xlYW51cH0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBGaWxlIGxpc3QKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworJWZpbGVzCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgQ0hBTkdFTE9HIENPUFlJTkcgRkFRIGRvYy5odG1sIHNldHVwLmh0bWwgVVBHUkFESU5HX3RvXzIuMCBycG0vUkVBRE1FLnN1c2VmaXJld2FsbAorJWRvYyBjb250cmliCislY29uZmlnIC9ldGMvaW5pdC5kL2Ruc21hc3EKKyVjb25maWcgL2V0Yy9kbnNtYXNxLmNvbmYKKy91c3Ivc2Jpbi9yY2Ruc21hc3EKKy91c3Ivc2Jpbi9kbnNtYXNxCisvdXNyL3NoYXJlL2xvY2FsZS8qL0xDX01FU1NBR0VTLyoKKyVkb2MgJXtfbWFuZGlyfS9tYW44L2Ruc21hc3EuOC5negorJWRvYyAle19tYW5kaXJ9LyovbWFuOC9kbnNtYXNxLjguZ3oKKworCmRpZmYgLS1naXQgYS9jb250cmliL1N1c2UvcmMuZG5zbWFzcS1zdXNlIGIvY29udHJpYi9TdXNlL3JjLmRuc21hc3Etc3VzZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MWY0YzcyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9TdXNlL3JjLmRuc21hc3Etc3VzZQpAQCAtMCwwICsxLDc5IEBACisjISAvYmluL3NoCisjCisjIGluaXQuZC9kbnNtYXNxCisjCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICBkbnNtYXNxCisjIFJlcXVpcmVkLVN0YXJ0OiAkbmV0d29yayAkcmVtb3RlX2ZzICRzeXNsb2cKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogIDMgNQorIyBEZWZhdWx0LVN0b3A6CisjIERlc2NyaXB0aW9uOiAgICBTdGFydHMgaW50ZXJuZXQgbmFtZSBzZXJ2aWNlIG1hc3EgY2FjaGluZyBzZXJ2ZXIgKEROUykKKyMjIyBFTkQgSU5JVCBJTkZPCisKK05BTUVEX0JJTj0vdXNyL3NiaW4vZG5zbWFzcQorTkFNRURfUElEPS92YXIvcnVuL2Ruc21hc3EucGlkCitOQU1FRF9DT05GPS9ldGMvZG5zbWFzcS5jb25mCisKK2lmIFsgISAteCAkTkFNRURfQklOIF0gOyB0aGVuCisJZWNobyAtbiAiZG5zbWFzcSBub3QgaW5zdGFsbGVkICEgIgorCWV4aXQgNQorZmkKKworLiAvZXRjL3JjLnN0YXR1cworcmNfcmVzZXQKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisJZWNobyAtbiAiU3RhcnRpbmcgbmFtZSBzZXJ2aWNlIG1hc3EgY2FjaGluZyBzZXJ2ZXIgIgorICAgICAgICBjaGVja3Byb2MgLXAgJE5BTUVEX1BJRCAkTkFNRURfQklOCisgICAgICAgIGlmIFsgJD8gLWVxIDAgXSA7IHRoZW4KKyAgICAgICAgICAgZWNobyAtbiAiLSBXYXJuaW5nOiBkbnNtYXNxIGFscmVhZHkgcnVubmluZyAhICIKKyAgICAgICAgZWxzZQorICAgICAgICAgICBbIC1lICROQU1FRF9QSUQgXSAmJiBlY2hvIC1uICItIFdhcm5pbmc6ICROQU1FRF9QSUQgZXhpc3RzICEgIgorCWZpCisJc3RhcnRwcm9jIC1wICROQU1FRF9QSUQgJE5BTUVEX0JJTiAtdSBub2JvZHkKKwlyY19zdGF0dXMgLXYKKwk7OworICAgIHN0b3ApCisJZWNobyAtbiAiU2h1dHRpbmcgbmFtZSBzZXJ2aWNlIG1hc3EgY2FjaGluZyBzZXJ2ZXIgIgorCWNoZWNrcHJvYyAtcCAkTkFNRURfUElEICROQU1FRF9CSU4KKwlbICQ/IC1uZSAwIF0gJiYgZWNobyAtbiAiLSBXYXJuaW5nOiBkbnNtYXNxIG5vdCBydW5uaW5nICEgIgorCWtpbGxwcm9jIC1wICROQU1FRF9QSUQgLVRFUk0gJE5BTUVEX0JJTgorCXJjX3N0YXR1cyAtdgorCTs7CisgICAgdHJ5LXJlc3RhcnQpCisJJDAgc3RvcCAgJiYgICQwIHN0YXJ0CisJcmNfc3RhdHVzCisJOzsKKyAgICByZXN0YXJ0KQorCSQwIHN0b3AKKwkkMCBzdGFydAorCXJjX3N0YXR1cworCTs7CisgICAgZm9yY2UtcmVsb2FkKQorCSQwIHJlbG9hZAorCXJjX3N0YXR1cworCTs7CisgICAgcmVsb2FkKQorCWVjaG8gLW4gIlJlbG9hZGluZyBuYW1lIHNlcnZpY2UgbWFzcSBjYWNoaW5nIHNlcnZlciAiCisJY2hlY2twcm9jIC1wICROQU1FRF9QSUQgJE5BTUVEX0JJTgorCVsgJD8gLW5lIDAgXSAmJiBlY2hvIC1uICItIFdhcm5pbmc6IGRuc21hc3Egbm90IHJ1bm5pbmcgISAiCisJa2lsbHByb2MgLXAgJE5BTUVEX1BJRCAtSFVQICROQU1FRF9CSU4KKwlyY19zdGF0dXMgLXYKKwk7OworICAgIHN0YXR1cykKKwllY2hvIC1uICJDaGVja2luZyBmb3IgbmFtZSBzZXJ2aWNlIG1hc3EgY2FjaGluZyBzZXJ2ZXIgIgorCWNoZWNrcHJvYyAtcCAkTkFNRURfUElEICROQU1FRF9CSU4KKwlyY19zdGF0dXMgLXYKKwk7OworICAgIHByb2JlKQorCXRlc3QgJE5BTUVEX0NPTkYgLW50ICROQU1FRF9QSUQgJiYgZWNobyByZWxvYWQKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3x0cnktcmVzdGFydHxyZXN0YXJ0fGZvcmNlLXJlbG9hZHxyZWxvYWR8cHJvYmV9IgorCWV4aXQgMQorCTs7Citlc2FjCityY19leGl0CisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZG5zLWxvYy9SRUFETUUgYi9jb250cmliL2Rucy1sb2MvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmNDNhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Rucy1sb2MvUkVBRE1FCkBAIC0wLDAgKzEsMTIgQEAKK0hpIFNpbW9uCisKK0hlcmUgaXMgYSBwYXRjaCBhZ2FpbnN0IGRuc21hc3EgMi4zOSB3aGljaCBwcm92aWRlcyBzdXBwb3J0IGZvciBMT0MgIAorZW50cmllcyBpbiBvcmRlciB0byBhc3NpZ24gbG9jYXRpb24gaW5mb3JtYXRpb24gdG8gZG5zIHJlY29yZHMgIAorKHJmYzE4NzYpLiBJIHRlc3RlZCBpdCBvbiBPU1ggYW5kIG9uIE9wZW5XUlQuCisKK0NoZWVycworTG9yZW56CisKK01vcmUgaW5mbzoKK2h0dHA6Ly93d3cuY2tkaHIuY29tL2Rucy1sb2MvCitodHRwOi8vd3d3LmZhcXMub3JnL3JmY3MvcmZjMTg3Ni5odG1sCmRpZmYgLS1naXQgYS9jb250cmliL2Rucy1sb2MvZG5zbWFzcTItbG9jLXJmYzE4NzYucGF0Y2ggYi9jb250cmliL2Rucy1sb2MvZG5zbWFzcTItbG9jLXJmYzE4NzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDk1MDMyMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZG5zLWxvYy9kbnNtYXNxMi1sb2MtcmZjMTg3Ni5wYXRjaApAQCAtMCwwICsxLDUyMiBAQAorZGlmZiAtTnVyIGRuc21hc3EtMi4zOS1vcmlnL2JsZC9NYWtlZmlsZSBkbnNtYXNxLTIuMzkvYmxkL01ha2VmaWxlCistLS0gZG5zbWFzcS0yLjM5LW9yaWcvYmxkL01ha2VmaWxlCTIwMDctMDItMTcgMTQ6Mzc6MDYuMDAwMDAwMDAwICswMTAwCisrKysgZG5zbWFzcS0yLjM5L2JsZC9NYWtlZmlsZQkyMDA3LTA1LTIwIDE4OjIzOjQ0LjAwMDAwMDAwMCArMDIwMAorQEAgLTIsNyArMiw3IEBACisgUEtHX0NPTkZJRyA/PSBwa2ctY29uZmlnCisgCisgCistT0JKUyA9IGNhY2hlLm8gcmZjMTAzNS5vIHV0aWwubyBvcHRpb24ubyBmb3J3YXJkLm8gaXNjLm8gbmV0d29yay5vIFwKKytPQkpTID0gY2FjaGUubyByZmMxMDM1Lm8gcmZjMTg3Ni5vIHV0aWwubyBvcHRpb24ubyBmb3J3YXJkLm8gaXNjLm8gbmV0d29yay5vIFwKKyAgICAgICAgZG5zbWFzcS5vIGRoY3AubyBsZWFzZS5vIHJmYzIxMzEubyBuZXRsaW5rLm8gZGJ1cy5vIGJwZi5vIFwKKyAgICAgICAgaGVscGVyLm8gdGZ0cC5vIGxvZy5vCisgCitkaWZmIC1OdXIgZG5zbWFzcS0yLjM5LW9yaWcvc3JjL2Ruc21hc3EuaCBkbnNtYXNxLTIuMzkvc3JjL2Ruc21hc3EuaAorLS0tIGRuc21hc3EtMi4zOS1vcmlnL3NyYy9kbnNtYXNxLmgJMjAwNy0wNC0yMCAxMjo1MzozOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBkbnNtYXNxLTIuMzkvc3JjL2Ruc21hc3EuaAkyMDA3LTA1LTIwIDE5OjUwOjM3LjAwMDAwMDAwMCArMDIwMAorQEAgLTE2Miw2ICsxNjIsMTIgQEAKKyAgIHN0cnVjdCBpbnRlcmZhY2VfbmFtZSAqbmV4dDsKKyB9OworIAorK3N0cnVjdCBsb2NfcmVjb3JkIHsKKysgIGNoYXIgKm5hbWUsIGxvY1sxNl07CisrICB1bnNpZ25lZCBzaG9ydCBjbGFzczsKKysgIHN0cnVjdCBsb2NfcmVjb3JkICpuZXh0OworK307CisrCisgdW5pb24gYmlnbmFtZSB7CisgICBjaGFyIG5hbWVbTUFYRE5BTUVdOworICAgdW5pb24gYmlnbmFtZSAqbmV4dDsgLyogZnJlZWxpc3QgKi8KK0BAIC00NzYsNiArNDgyLDcgQEAKKyAgIHN0cnVjdCBteF9zcnZfcmVjb3JkICpteG5hbWVzOworICAgc3RydWN0IHR4dF9yZWNvcmQgKnR4dDsKKyAgIHN0cnVjdCBwdHJfcmVjb3JkICpwdHI7CisrCXN0cnVjdCBsb2NfcmVjb3JkICpsb2M7CisgICBzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgKmludF9uYW1lczsKKyAgIGNoYXIgKm14dGFyZ2V0OworICAgY2hhciAqbGVhc2VfZmlsZTsgCitAQCAtNzI1LDMgKzczMiw2IEBACisgdm9pZCB0ZnRwX3JlcXVlc3Qoc3RydWN0IGxpc3RlbmVyICpsaXN0ZW4sIHN0cnVjdCBkYWVtb24gKmRhZW1vbiwgdGltZV90IG5vdyk7Cisgdm9pZCBjaGVja190ZnRwX2xpc3RlbmVycyhzdHJ1Y3QgZGFlbW9uICpkYWVtb24sIGZkX3NldCAqcnNldCwgdGltZV90IG5vdyk7CisgI2VuZGlmCisrCisrLyogcmZjMTg3NiAqLworK3VfaW50MzJfdCBsb2NfYXRvbihjb25zdCBjaGFyICphc2NpaSwgdV9jaGFyICpiaW5hcnkpOworZGlmZiAtTnVyIGRuc21hc3EtMi4zOS1vcmlnL3NyYy9vcHRpb24uYyBkbnNtYXNxLTIuMzkvc3JjL29wdGlvbi5jCistLS0gZG5zbWFzcS0yLjM5LW9yaWcvc3JjL29wdGlvbi5jCTIwMDctMDQtMTkgMjM6MzQ6NDkuMDAwMDAwMDAwICswMjAwCisrKysgZG5zbWFzcS0yLjM5L3NyYy9vcHRpb24uYwkyMDA3LTA1LTIwIDIwOjE1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTQzLDYgKzQzLDcgQEAKKyAjZGVmaW5lIExPUFRfUkVNT1RFICAgIDI2OQorICNkZWZpbmUgTE9QVF9TVUJTQ1IgICAgMjcwCisgI2RlZmluZSBMT1BUX0lOVE5BTUUgICAyNzEKKysjZGVmaW5lIExPUFRfTE9DICAgICAgIDI3MgorIAorICNpZmRlZiBIQVZFX0dFVE9QVF9MT05HCisgc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0c1tdID0gIAorQEAgLTEyMiw2ICsxMjMsNyBAQAorICAgICB7InRmdHAtcm9vdCIsIDEsIDAsIExPUFRfUFJFRklYIH0sCisgICAgIHsidGZ0cC1tYXgiLCAxLCAwLCBMT1BUX1RGVFBfTUFYIH0sCisgICAgIHsicHRyLXJlY29yZCIsIDEsIDAsIExPUFRfUFRSIH0sCisrICAgIHsibG9jLXJlY29yZCIsIDEsIDAsIExPUFRfTE9DIH0sCisgI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykKKyAgICAgeyJicmlkZ2UtaW50ZXJmYWNlIiwgMSwgMCAsIExPUFRfQlJJREdFIH0sCisgI2VuZGlmCitAQCAtMjM1LDYgKzIzNyw3IEBACisgICB7ICIteSwgLS1sb2NhbGlzZS1xdWVyaWVzIiwgZ2V0dGV4dF9ub29wKCJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIpLCBOVUxMIH0sCisgICB7ICItWSAgLS10eHQtcmVjb3JkPW5hbWUsdHh0Li4uLiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iKSwgTlVMTCB9LAorICAgeyAiICAgIC0tcHRyLXJlY29yZD1uYW1lLHRhcmdldCIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iKSwgTlVMTCB9LAorKyAgeyAiICAgIC0tbG9jLXJlY29yZD1uYW1lLGxhdCBsb24gYWx0IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IExPQyBETlMgcmVjb3JkLiIpLCBOVUxMIH0sCisgICB7ICIgICAgLS1pbnRlcmZhY2UtbmFtZT1uYW1lLGludGVyZmFjZSIsIGdldHRleHRfbm9vcCgiR2l2ZSBETlMgbmFtZSB0byBJUHY0IGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiIpLCBOVUxMIH0sCisgICB7ICIteiwgLS1iaW5kLWludGVyZmFjZXMiLCBnZXR0ZXh0X25vb3AoIkJpbmQgb25seSB0byBpbnRlcmZhY2VzIGluIHVzZS4iKSwgTlVMTCB9LAorICAgeyAiLVosIC0tcmVhZC1ldGhlcnMiLCBnZXR0ZXh0X25vb3AoIlJlYWQgREhDUCBzdGF0aWMgaG9zdCBpbmZvcm1hdGlvbiBmcm9tICVzLiIpLCBFVEhFUlNGSUxFIH0sCitAQCAtMTgzNSw2ICsxODM4LDM3IEBACisgCW5ldy0+aW50ciA9IHNhZmVfc3RyaW5nX2FsbG9jKGNvbW1hKTsKKyAJYnJlYWs7CisgICAgICAgfQorKyAgICAgIAorKyAgICBjYXNlIExPUFRfTE9DOgorKyAgICAgIHsKKysJc3RydWN0IGxvY19yZWNvcmQgKm5ldzsKKysJdW5zaWduZWQgY2hhciAqcCwgKnE7CisrCQorKwljb21tYSA9IHNwbGl0KGFyZyk7CisrCQorKwlpZiAoIWNhbm9uaWNhbGlzZV9vcHQoYXJnKSkKKysJICB7CisrCSAgICBvcHRpb24gPSAnPyc7CisrCSAgICBwcm9ibGVtID0gXygiYmFkIExPQyByZWNvcmQiKTsKKysJICAgIGJyZWFrOworKwkgIH0KKysJCisrCW5ldyA9IHNhZmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgbG9jX3JlY29yZCkpOworKwluZXctPm5leHQgPSBkYWVtb24tPmxvYzsKKysJZGFlbW9uLT5sb2MgPSBuZXc7CisrCW5ldy0+Y2xhc3MgPSBDX0lOOworKwlpZiAoIWNvbW1hIHx8IGxvY19hdG9uKGNvbW1hLG5ldy0+bG9jKSE9MTYpCisrCSAgeworKwkgICAgb3B0aW9uID0gJz8nOworKwkgICAgcHJvYmxlbSA9IF8oImJhZCBMT0MgcmVjb3JkIik7CisrCSAgICBicmVhazsKKysJICB9CisrCisrCWlmIChjb21tYSkKKysJICAqY29tbWEgPSAwOworKwluZXctPm5hbWUgPSBzYWZlX3N0cmluZ19hbGxvYyhhcmcpOworKwlicmVhazsKKysgICAgICB9CisgCisgICAgIGNhc2UgTE9QVF9QVFI6ICAvKiAtLXB0ci1yZWNvcmQgKi8KKyAgICAgICB7CitkaWZmIC1OdXIgZG5zbWFzcS0yLjM5LW9yaWcvc3JjL3JmYzEwMzUuYyBkbnNtYXNxLTIuMzkvc3JjL3JmYzEwMzUuYworLS0tIGRuc21hc3EtMi4zOS1vcmlnL3NyYy9yZmMxMDM1LmMJMjAwNy0wNC0yMCAxMjo1NDoyNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBkbnNtYXNxLTIuMzkvc3JjL3JmYzEwMzUuYwkyMDA3LTA1LTIwIDE4OjIyOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTExMTIsNiArMTExMiwyNyBAQAorIAkgICAgfQorIAl9CisgCisrICAgICAgaWYgKHF0eXBlID09IFRfTE9DIHx8IHF0eXBlID09IFRfQU5ZKQorKwl7CisrCSAgc3RydWN0IGxvY19yZWNvcmQgKnQ7CisrCSAgZm9yKHQgPSBkYWVtb24tPmxvYzsgdCA7IHQgPSB0LT5uZXh0KQorKwkgICAgeworKwkgICAgICBpZiAodC0+Y2xhc3MgPT0gcWNsYXNzICYmIGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgdC0+bmFtZSkpCisrCQl7CisrCQkgIGFucyA9IDE7CisrCQkgIGlmICghZHJ5cnVuKQorKwkJICAgIHsKKysJCSAgICAgIGxvZ19xdWVyeShGX0NOQU1FIHwgRl9GT1JXQVJEIHwgRl9DT05GSUcgfCBGX05YRE9NQUlOLCBuYW1lLCBOVUxMLCAwLCBOVUxMLCAwKTsKKysJCSAgICAgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorKwkJCQkJICAgICAgZGFlbW9uLT5sb2NhbF90dGwsIE5VTEwsCisrCQkJCQkgICAgICBUX0xPQywgdC0+Y2xhc3MsICJ0IiwgMTYsIHQtPmxvYykpCisrCQkJYW5zY291bnQrKzsKKysKKysJCSAgICB9CisrCQl9CisrCSAgICB9CisrCX0KKysKKyAgICAgICBpZiAocWNsYXNzID09IENfSU4pCisgCXsKKyAJICBpZiAocXR5cGUgPT0gVF9QVFIgfHwgcXR5cGUgPT0gVF9BTlkpCitkaWZmIC1OdXIgZG5zbWFzcS0yLjM5LW9yaWcvc3JjL3JmYzE4NzYuYyBkbnNtYXNxLTIuMzkvc3JjL3JmYzE4NzYuYworLS0tIGRuc21hc3EtMi4zOS1vcmlnL3NyYy9yZmMxODc2LmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBkbnNtYXNxLTIuMzkvc3JjL3JmYzE4NzYuYwkyMDA3LTA1LTIwIDE5OjUwOjEwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwzNzkgQEAKKysvKgorKyAqIHJvdXRpbmVzIHRvIGNvbnZlcnQgYmV0d2VlbiBvbi10aGUtd2lyZSBSUiBmb3JtYXQgYW5kIHpvbmUgZmlsZQorKyAqIGZvcm1hdC4gIERvZXMgbm90IGNvbnRhaW4gY29udmVyc2lvbiB0by9mcm9tIGRlY2ltYWwgZGVncmVlczsKKysgKiBkaXZpZGUgb3IgbXVsdGlwbHkgYnkgNjAqNjAqMTAwMCBmb3IgdGhhdC4KKysgKi8KKysKKysjaW5jbHVkZSAiZG5zbWFzcS5oIgorKworK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG93ZXJvZnRlblsxMF0gPSB7MSwgMTAsIDEwMCwgMTAwMCwgMTAwMDAsIDEwMDAwMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwLDEwMDAwMDAwLDEwMDAwMDAwMCwxMDAwMDAwMDAwfTsKKysKKysvKiB0YWtlcyBhbiBYZVkgcHJlY2lzaW9uL3NpemUgdmFsdWUsIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uKi8KKytzdGF0aWMgY29uc3QgY2hhciAqCisrcHJlY3NpemVfbnRvYSh1X2ludDhfdCBwcmVjKQorK3sKKysgICAgICAgIHN0YXRpYyBjaGFyIHJldGJ1ZltzaXplb2YoIjkwMDAwMDAwLjAwIildOworKyAgICAgICAgdW5zaWduZWQgbG9uZyB2YWw7CisrICAgICAgICBpbnQgbWFudGlzc2EsIGV4cG9uZW50OworKworKyAgICAgICAgbWFudGlzc2EgPSAoaW50KSgocHJlYyA+PiA0KSAmIDB4MGYpICUgMTA7CisrICAgICAgICBleHBvbmVudCA9IChpbnQpKChwcmVjID4+IDApICYgMHgwZikgJSAxMDsKKysKKysgICAgICAgIHZhbCA9IG1hbnRpc3NhICogcG93ZXJvZnRlbltleHBvbmVudF07CisrCisrICAgICAgICAodm9pZCkgc3ByaW50ZihyZXRidWYsIiVkLiUuMmQiLCB2YWwvMTAwLCB2YWwlMTAwKTsKKysgICAgICAgIHJldHVybiAocmV0YnVmKTsKKyt9CisrCisrLyogY29udmVydHMgYXNjaWkgc2l6ZS9wcmVjaXNpb24gWCAqIDEwKipZKGNtKSB0byAweFhZLiBtb3ZlcyBwb2ludGVyLiovCisrc3RhdGljIHVfaW50OF90CisrcHJlY3NpemVfYXRvbihjaGFyICoqc3RycHRyKQorK3sKKysgICAgICAgIHVuc2lnbmVkIGludCBtdmFsID0gMCwgY212YWwgPSAwOworKyAgICAgICAgdV9pbnQ4X3QgcmV0dmFsID0gMDsKKysgICAgICAgIHJlZ2lzdGVyIGNoYXIgKmNwOworKyAgICAgICAgcmVnaXN0ZXIgaW50IGV4cG9uZW50OworKyAgICAgICAgcmVnaXN0ZXIgaW50IG1hbnRpc3NhOworKworKyAgICAgICAgY3AgPSAqc3RycHRyOworKworKyAgICAgICAgd2hpbGUgKGlzZGlnaXQoKmNwKSkKKysgICAgICAgICAgICAgICAgbXZhbCA9IG12YWwgKiAxMCArICgqY3ArKyAtICcwJyk7CisrCisrICAgICAgICBpZiAoKmNwID09ICcuJykgeyAgICAgICAgICAgICAgIC8qIGNlbnRpbWV0ZXJzICovCisrICAgICAgICAgICAgICAgIGNwKys7CisrICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KCpjcCkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjbXZhbCA9ICgqY3ArKyAtICcwJykgKiAxMDsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdCgqY3ApKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXZhbCArPSAoKmNwKysgLSAnMCcpOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgY212YWwgPSAobXZhbCAqIDEwMCkgKyBjbXZhbDsKKysKKysgICAgICAgIGZvciAoZXhwb25lbnQgPSAwOyBleHBvbmVudCA8IDk7IGV4cG9uZW50KyspCisrICAgICAgICAgICAgICAgIGlmIChjbXZhbCA8IHBvd2Vyb2Z0ZW5bZXhwb25lbnQrMV0pCisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBtYW50aXNzYSA9IGNtdmFsIC8gcG93ZXJvZnRlbltleHBvbmVudF07CisrICAgICAgICBpZiAobWFudGlzc2EgPiA5KQorKyAgICAgICAgICAgICAgICBtYW50aXNzYSA9IDk7CisrCisrICAgICAgICByZXR2YWwgPSAobWFudGlzc2EgPDwgNCkgfCBleHBvbmVudDsKKysKKysgICAgICAgICpzdHJwdHIgPSBjcDsKKysKKysgICAgICAgIHJldHVybiAocmV0dmFsKTsKKyt9CisrCisrLyogY29udmVydHMgYXNjaWkgbGF0L2xvbiB0byB1bnNpZ25lZCBlbmNvZGVkIDMyLWJpdCBudW1iZXIuCisrICogIG1vdmVzIHBvaW50ZXIuICovCisrc3RhdGljIHVfaW50MzJfdAorK2xhdGxvbjJ1bChjaGFyICoqbGF0bG9uc3RycHRyLGludCAqd2hpY2gpCisreworKyAgICAgICAgcmVnaXN0ZXIgY2hhciAqY3A7CisrICAgICAgICB1X2ludDMyX3QgcmV0dmFsOworKyAgICAgICAgaW50IGRlZyA9IDAsIG1pbiA9IDAsIHNlY3MgPSAwLCBzZWNzZnJhYyA9IDA7CisrCisrICAgICAgICBjcCA9ICpsYXRsb25zdHJwdHI7CisrCisrICAgICAgICB3aGlsZSAoaXNkaWdpdCgqY3ApKQorKyAgICAgICAgICAgICAgICBkZWcgPSBkZWcgKiAxMCArICgqY3ArKyAtICcwJyk7CisrCisrICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApKQorKyAgICAgICAgICAgICAgICBjcCsrOworKworKyAgICAgICAgaWYgKCEoaXNkaWdpdCgqY3ApKSkKKysgICAgICAgICAgICAgICAgZ290byBmbmRoZW1pOworKworKyAgICAgICAgd2hpbGUgKGlzZGlnaXQoKmNwKSkKKysgICAgICAgICAgICAgICAgbWluID0gbWluICogMTAgKyAoKmNwKysgLSAnMCcpOworKyAgICAgICAgd2hpbGUgKGlzc3BhY2UoKmNwKSkKKysgICAgICAgICAgICAgICAgY3ArKzsKKysKKysgICAgICAgIGlmICghKGlzZGlnaXQoKmNwKSkpCisrICAgICAgICAgICAgICAgIGdvdG8gZm5kaGVtaTsKKysKKysgICAgICAgIHdoaWxlIChpc2RpZ2l0KCpjcCkpCisrICAgICAgICAgICAgICAgIHNlY3MgPSBzZWNzICogMTAgKyAoKmNwKysgLSAnMCcpOworKworKyAgICAgICAgaWYgKCpjcCA9PSAnLicpIHsgICAgICAgICAgICAgICAvKiBkZWNpbWFsIHNlY29uZHMgKi8KKysgICAgICAgICAgICAgICAgY3ArKzsKKysgICAgICAgICAgICAgICAgaWYgKGlzZGlnaXQoKmNwKSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NmcmFjID0gKCpjcCsrIC0gJzAnKSAqIDEwMDsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdCgqY3ApKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzZnJhYyArPSAoKmNwKysgLSAnMCcpICogMTA7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdCgqY3ApKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NmcmFjICs9ICgqY3ArKyAtICcwJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICB3aGlsZSAoIWlzc3BhY2UoKmNwKSkgICAvKiBpZiBhbnkgdHJhaWxpbmcgZ2FyYmFnZSAqLworKyAgICAgICAgICAgICAgICBjcCsrOworKworKyAgICAgICAgd2hpbGUgKGlzc3BhY2UoKmNwKSkKKysgICAgICAgICAgICAgICAgY3ArKzsKKysKKysgZm5kaGVtaToKKysgICAgICAgIHN3aXRjaCAoKmNwKSB7CisrICAgICAgICBjYXNlICdOJzogY2FzZSAnbic6CisrICAgICAgICBjYXNlICdFJzogY2FzZSAnZSc6CisrICAgICAgICAgICAgICAgIHJldHZhbCA9ICgodW5zaWduZWQpMTw8MzEpCisrICAgICAgICAgICAgICAgICAgICAgICAgKyAoKCgoKGRlZyAqIDYwKSArIG1pbikgKiA2MCkgKyBzZWNzKSAqIDEwMDApCisrICAgICAgICAgICAgICAgICAgICAgICAgKyBzZWNzZnJhYzsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlICdTJzogY2FzZSAncyc6CisrICAgICAgICBjYXNlICdXJzogY2FzZSAndyc6CisrICAgICAgICAgICAgICAgIHJldHZhbCA9ICgodW5zaWduZWQpMTw8MzEpCisrICAgICAgICAgICAgICAgICAgICAgICAgLSAoKCgoKGRlZyAqIDYwKSArIG1pbikgKiA2MCkgKyBzZWNzKSAqIDEwMDApCisrICAgICAgICAgICAgICAgICAgICAgICAgLSBzZWNzZnJhYzsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICByZXR2YWwgPSAwOyAgICAgLyogaW52YWxpZCB2YWx1ZSAtLSBpbmRpY2F0ZXMgZXJyb3IgKi8KKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrCisrICAgICAgICBzd2l0Y2ggKCpjcCkgeworKyAgICAgICAgY2FzZSAnTic6IGNhc2UgJ24nOgorKyAgICAgICAgY2FzZSAnUyc6IGNhc2UgJ3MnOgorKyAgICAgICAgICAgICAgICAqd2hpY2ggPSAxOyAgICAgLyogbGF0aXR1ZGUgKi8KKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlICdFJzogY2FzZSAnZSc6CisrICAgICAgICBjYXNlICdXJzogY2FzZSAndyc6CisrICAgICAgICAgICAgICAgICp3aGljaCA9IDI7ICAgICAvKiBsb25naXR1ZGUgKi8KKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAqd2hpY2ggPSAwOyAgICAgLyogZXJyb3IgKi8KKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrCisrICAgICAgICBjcCsrOyAgICAgICAgICAgICAgICAgICAvKiBza2lwIHRoZSBoZW1pc3BoZXJlICovCisrCisrICAgICAgICB3aGlsZSAoIWlzc3BhY2UoKmNwKSkgICAvKiBpZiBhbnkgdHJhaWxpbmcgZ2FyYmFnZSAqLworKyAgICAgICAgICAgICAgICBjcCsrOworKworKyAgICAgICAgd2hpbGUgKGlzc3BhY2UoKmNwKSkgICAgLyogbW92ZSB0byBuZXh0IGZpZWxkICovCisrICAgICAgICAgICAgICAgIGNwKys7CisrCisrICAgICAgICAqbGF0bG9uc3RycHRyID0gY3A7CisrCisrICAgICAgICByZXR1cm4gKHJldHZhbCk7CisrfQorKworKy8qIGNvbnZlcnRzIGEgem9uZSBmaWxlIHJlcHJlc2VudGF0aW9uIGluIGEgc3RyaW5nIHRvIGFuIFJEQVRBCisrICogb24tdGhlLXdpcmUgcmVwcmVzZW50YXRpb24uICovCisrdV9pbnQzMl90CisrbG9jX2F0b24oY29uc3QgY2hhciAqYXNjaWksIHVfY2hhciAqYmluYXJ5KQorK3sKKysgICAgICAgIGNvbnN0IGNoYXIgKmNwLCAqbWF4Y3A7CisrICAgICAgICB1X2NoYXIgKmJjcDsKKysKKysgICAgICAgIHVfaW50MzJfdCBsYXRpdCA9IDAsIGxvbmdpdCA9IDAsIGFsdCA9IDA7CisrICAgICAgICB1X2ludDMyX3QgbGx0ZW1wMSA9IDAsIGxsdGVtcDIgPSAwOworKyAgICAgICAgaW50IGFsdG1ldGVycyA9IDAsIGFsdGZyYWMgPSAwLCBhbHRzaWduID0gMTsKKysgICAgICAgIHVfaW50OF90IGhwID0gMHgxNjsgICAgLyogZGVmYXVsdCA9IDFlNiBjbSA9IDEwMDAwLjAwbSA9IDEwa20gKi8KKysgICAgICAgIHVfaW50OF90IHZwID0gMHgxMzsgICAgLyogZGVmYXVsdCA9IDFlMyBjbSA9IDEwLjAwbSAqLworKyAgICAgICAgdV9pbnQ4X3Qgc2l6ID0gMHgxMjsgICAvKiBkZWZhdWx0ID0gMWUyIGNtID0gMS4wMG0gKi8KKysgICAgICAgIGludCB3aGljaDEgPSAwLCB3aGljaDIgPSAwOworKworKyAgICAgICAgY3AgPSBhc2NpaTsKKysgICAgICAgIG1heGNwID0gY3AgKyBzdHJsZW4oYXNjaWkpOworKworKyAgICAgICAgbGx0ZW1wMSA9IGxhdGxvbjJ1bCgmY3AsICZ3aGljaDEpOworKyAgICAgICAgbGx0ZW1wMiA9IGxhdGxvbjJ1bCgmY3AsICZ3aGljaDIpOworKworKyAgICAgICAgc3dpdGNoICh3aGljaDEgKyB3aGljaDIpIHsKKysgICAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgIC8qIDEgKyAyLCB0aGUgb25seSB2YWxpZCBjb21iaW5hdGlvbiAqLworKyAgICAgICAgICAgICAgICBpZiAoKHdoaWNoMSA9PSAxKSAmJiAod2hpY2gyID09IDIpKSB7IC8qIG5vcm1hbCBjYXNlICovCisrICAgICAgICAgICAgICAgICAgICAgICAgbGF0aXQgPSBsbHRlbXAxOworKyAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdpdCA9IGxsdGVtcDI7CisrICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHdoaWNoMSA9PSAyKSAmJiAod2hpY2gyID09IDEpKSB7LypyZXZlcnNlZCovCisrICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ2l0ID0gbGx0ZW1wMTsKKysgICAgICAgICAgICAgICAgICAgICAgICBsYXRpdCA9IGxsdGVtcDI7CisrICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAvKiBzb21lIGtpbmQgb2YgYnJva2VubmVzcyAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgLyogd2UgZGlkbid0IGdldCBvbmUgb2YgZWFjaCAqLworKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8qIGFsdGl0dWRlICovCisrICAgICAgICBpZiAoKmNwID09ICctJykgeworKyAgICAgICAgICAgICAgICBhbHRzaWduID0gLTE7CisrICAgICAgICAgICAgICAgIGNwKys7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoKmNwID09ICcrJykKKysgICAgICAgICAgICAgICAgY3ArKzsKKysKKysgICAgICAgIHdoaWxlIChpc2RpZ2l0KCpjcCkpCisrICAgICAgICAgICAgICAgIGFsdG1ldGVycyA9IGFsdG1ldGVycyAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKysKKysgICAgICAgIGlmICgqY3AgPT0gJy4nKSB7ICAgICAgICAgICAgICAgLyogZGVjaW1hbCBtZXRlcnMgKi8KKysgICAgICAgICAgICAgICAgY3ArKzsKKysgICAgICAgICAgICAgICAgaWYgKGlzZGlnaXQoKmNwKSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdGZyYWMgPSAoKmNwKysgLSAnMCcpICogMTA7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzZGlnaXQoKmNwKSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZnJhYyArPSAoKmNwKysgLSAnMCcpOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgYWx0ID0gKDEwMDAwMDAwICsgKGFsdHNpZ24gKiAoYWx0bWV0ZXJzICogMTAwICsgYWx0ZnJhYykpKTsKKysKKysgICAgICAgIHdoaWxlICghaXNzcGFjZSgqY3ApICYmIChjcCA8IG1heGNwKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWYgdHJhaWxpbmcgZ2FyYmFnZSBvciBtICovCisrICAgICAgICAgICAgICAgIGNwKys7CisrCisrICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApICYmIChjcCA8IG1heGNwKSkKKysgICAgICAgICAgICAgICAgY3ArKzsKKysgICAgICAgIGlmIChjcCA+PSBtYXhjcCkKKysgICAgICAgICAgICAgICAgZ290byBkZWZhdWx0czsKKysKKysgICAgICAgIHNpeiA9IHByZWNzaXplX2F0b24oJmNwKTsKKysKKysgICAgICAgIHdoaWxlICghaXNzcGFjZSgqY3ApICYmIChjcCA8IG1heGNwKSkvKmlmIHRyYWlsaW5nIGdhcmJhZ2Ugb3IgbSovCisrICAgICAgICAgICAgICAgIGNwKys7CisrCisrICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApICYmIChjcCA8IG1heGNwKSkKKysgICAgICAgICAgICAgICAgY3ArKzsKKysKKysgICAgICAgIGlmIChjcCA+PSBtYXhjcCkKKysgICAgICAgICAgICAgICAgZ290byBkZWZhdWx0czsKKysKKysgICAgICAgIGhwID0gcHJlY3NpemVfYXRvbigmY3ApOworKworKyAgICAgICAgd2hpbGUgKCFpc3NwYWNlKCpjcCkgJiYgKGNwIDwgbWF4Y3ApKS8qaWYgdHJhaWxpbmcgZ2FyYmFnZSBvciBtKi8KKysgICAgICAgICAgICAgICAgY3ArKzsKKysKKysgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkgJiYgKGNwIDwgbWF4Y3ApKQorKyAgICAgICAgICAgICAgICBjcCsrOworKworKyAgICAgICAgaWYgKGNwID49IG1heGNwKQorKyAgICAgICAgICAgICAgICBnb3RvIGRlZmF1bHRzOworKworKyAgICAgICAgdnAgPSBwcmVjc2l6ZV9hdG9uKCZjcCk7CisrCisrIGRlZmF1bHRzOgorKworKyAgICAgICAgYmNwID0gYmluYXJ5OworKyAgICAgICAgKmJjcCsrID0gKHVfaW50OF90KSAwOyAgLyogdmVyc2lvbiBieXRlICovCisrICAgICAgICAqYmNwKysgPSBzaXo7CisrICAgICAgICAqYmNwKysgPSBocDsKKysgICAgICAgICpiY3ArKyA9IHZwOworKyAgICAgICAgUFVUTE9ORyhsYXRpdCxiY3ApOworKyAgICAgICAgUFVUTE9ORyhsb25naXQsYmNwKTsKKysgICAgICAgIFBVVExPTkcoYWx0LGJjcCk7CisrCisrICAgICAgICByZXR1cm4gKDE2KTsgICAgICAgICAgICAvKiBzaXplIG9mIFJSIGluIG9jdGV0cyAqLworK30KKysKKysvKiB0YWtlcyBhbiBvbi10aGUtd2lyZSBMT0MgUlIgYW5kIHByaW50cyBpdCBpbiB6b25lIGZpbGUKKysgKiAoaHVtYW4gcmVhZGFibGUpIGZvcm1hdC4gKi8KKytjaGFyICoKKytsb2NfbnRvYShjb25zdCB1X2NoYXIgKmJpbmFyeSxjaGFyICphc2NpaSkKKyt7CisrICAgICAgICBzdGF0aWMgY2hhciB0bXBidWZbMjU1KjNdOworKworKyAgICAgICAgcmVnaXN0ZXIgY2hhciAqY3A7CisrICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKnJjcDsKKysKKysgICAgICAgIGludCBsYXRkZWcsIGxhdG1pbiwgbGF0c2VjLCBsYXRzZWNmcmFjOworKyAgICAgICAgaW50IGxvbmdkZWcsIGxvbmdtaW4sIGxvbmdzZWMsIGxvbmdzZWNmcmFjOworKyAgICAgICAgY2hhciBub3J0aHNvdXRoLCBlYXN0d2VzdDsKKysgICAgICAgIGludCBhbHRtZXRlcnMsIGFsdGZyYWMsIGFsdHNpZ247CisrCisrICAgICAgICBjb25zdCBpbnQgcmVmZXJlbmNlYWx0ID0gMTAwMDAwICogMTAwOworKworKyAgICAgICAgaW50MzJfdCBsYXR2YWwsIGxvbmd2YWwsIGFsdHZhbDsKKysgICAgICAgIHVfaW50MzJfdCB0ZW1wbDsKKysgICAgICAgIHVfaW50OF90IHNpemV2YWwsIGhwdmFsLCB2cHZhbCwgdmVyc2lvbnZhbDsKKysKKysgICAgICAgIGNoYXIgKnNpemVzdHIsICpocHN0ciwgKnZwc3RyOworKworKyAgICAgICAgcmNwID0gYmluYXJ5OworKyAgICAgICAgaWYgKGFzY2lpKQorKyAgICAgICAgICAgICAgICBjcCA9IGFzY2lpOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgIGNwID0gdG1wYnVmOworKyAgICAgICAgfQorKworKyAgICAgICAgdmVyc2lvbnZhbCA9ICpyY3ArKzsKKysKKysgICAgICAgIGlmICh2ZXJzaW9udmFsKSB7CisrICAgICAgICAgICAgICAgIHNwcmludGYoY3AsIjsgZXJyb3I6IHVua25vd24gTE9DIFJSIHZlcnNpb24iKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIChjcCk7CisrICAgICAgICB9CisrCisrICAgICAgICBzaXpldmFsID0gKnJjcCsrOworKworKyAgICAgICAgaHB2YWwgPSAqcmNwKys7CisrICAgICAgICB2cHZhbCA9ICpyY3ArKzsKKysKKysgICAgICAgIEdFVExPTkcodGVtcGwscmNwKTsKKysgICAgICAgIGxhdHZhbCA9ICh0ZW1wbCAtICgodW5zaWduZWQpMTw8MzEpKTsKKysKKysgICAgICAgIEdFVExPTkcodGVtcGwscmNwKTsKKysgICAgICAgIGxvbmd2YWwgPSAodGVtcGwgLSAoKHVuc2lnbmVkKTE8PDMxKSk7CisrCisrICAgICAgICBHRVRMT05HKHRlbXBsLHJjcCk7CisrICAgICAgICBpZiAodGVtcGwgPCByZWZlcmVuY2VhbHQpIHsgLyogYmVsb3cgV0dTIDg0IHNwaGVyb2lkICovCisrICAgICAgICAgICAgICAgIGFsdHZhbCA9IHJlZmVyZW5jZWFsdCAtIHRlbXBsOworKyAgICAgICAgICAgICAgICBhbHRzaWduID0gLTE7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgICBhbHR2YWwgPSB0ZW1wbCAtIHJlZmVyZW5jZWFsdDsKKysgICAgICAgICAgICAgICAgYWx0c2lnbiA9IDE7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobGF0dmFsIDwgMCkgeworKyAgICAgICAgICAgICAgICBub3J0aHNvdXRoID0gJ1MnOworKyAgICAgICAgICAgICAgICBsYXR2YWwgPSAtbGF0dmFsOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBub3J0aHNvdXRoID0gJ04nOworKworKyAgICAgICAgbGF0c2VjZnJhYyA9IGxhdHZhbCAlIDEwMDA7CisrICAgICAgICBsYXR2YWwgPSBsYXR2YWwgLyAxMDAwOworKyAgICAgICAgbGF0c2VjID0gbGF0dmFsICUgNjA7CisrICAgICAgICBsYXR2YWwgPSBsYXR2YWwgLyA2MDsKKysgICAgICAgIGxhdG1pbiA9IGxhdHZhbCAlIDYwOworKyAgICAgICAgbGF0dmFsID0gbGF0dmFsIC8gNjA7CisrICAgICAgICBsYXRkZWcgPSBsYXR2YWw7CisrCisrICAgICAgICBpZiAobG9uZ3ZhbCA8IDApIHsKKysgICAgICAgICAgICAgICAgZWFzdHdlc3QgPSAnVyc7CisrICAgICAgICAgICAgICAgIGxvbmd2YWwgPSAtbG9uZ3ZhbDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZWFzdHdlc3QgPSAnRSc7CisrCisrICAgICAgICBsb25nc2VjZnJhYyA9IGxvbmd2YWwgJSAxMDAwOworKyAgICAgICAgbG9uZ3ZhbCA9IGxvbmd2YWwgLyAxMDAwOworKyAgICAgICAgbG9uZ3NlYyA9IGxvbmd2YWwgJSA2MDsKKysgICAgICAgIGxvbmd2YWwgPSBsb25ndmFsIC8gNjA7CisrICAgICAgICBsb25nbWluID0gbG9uZ3ZhbCAlIDYwOworKyAgICAgICAgbG9uZ3ZhbCA9IGxvbmd2YWwgLyA2MDsKKysgICAgICAgIGxvbmdkZWcgPSBsb25ndmFsOworKworKyAgICAgICAgYWx0ZnJhYyA9IGFsdHZhbCAlIDEwMDsKKysgICAgICAgIGFsdG1ldGVycyA9IChhbHR2YWwgLyAxMDApICogYWx0c2lnbjsKKysKKysgICAgICAgIHNpemVzdHIgPSBzdHJkdXAocHJlY3NpemVfbnRvYShzaXpldmFsKSk7CisrICAgICAgICBocHN0ciA9IHN0cmR1cChwcmVjc2l6ZV9udG9hKGhwdmFsKSk7CisrICAgICAgICB2cHN0ciA9IHN0cmR1cChwcmVjc2l6ZV9udG9hKHZwdmFsKSk7CisrCisrICAgICAgICBzcHJpbnRmKGNwLAorKyAgICAgICAgICAgICAgICAiJWQgJS4yZCAlLjJkLiUuM2QgJWMgJWQgJS4yZCAlLjJkLiUuM2QgJWMgJWQuJS4yZG0gJXNtICVzbSAlc20iLAorKyAgICAgICAgICAgICAgICBsYXRkZWcsIGxhdG1pbiwgbGF0c2VjLCBsYXRzZWNmcmFjLCBub3J0aHNvdXRoLAorKyAgICAgICAgICAgICAgICBsb25nZGVnLCBsb25nbWluLCBsb25nc2VjLCBsb25nc2VjZnJhYywgZWFzdHdlc3QsCisrICAgICAgICAgICAgICAgIGFsdG1ldGVycywgYWx0ZnJhYywgc2l6ZXN0ciwgaHBzdHIsIHZwc3RyKTsKKysgICAgICAgIGZyZWUoc2l6ZXN0cik7CisrICAgICAgICBmcmVlKGhwc3RyKTsKKysgICAgICAgIGZyZWUodnBzdHIpOworKworKyAgICAgICAgcmV0dXJuIChjcCk7CisrfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9kbnNsaXN0L2RoY3AuY3NzIGIvY29udHJpYi9kbnNsaXN0L2RoY3AuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc5Y2VhMzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Ruc2xpc3QvZGhjcC5jc3MKQEAgLTAsMCArMSw1NyBAQAorYm9keQoreworCWZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworCWNvbG9yOiAjMDAwOworfQorCitoMQoreworCWZvbnQtc2l6ZTogbWVkaXVtOworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMSAudXBkYXRlZAoreworCWNvbG9yOiAjOTk5OworfQorCit0YWJsZQoreworCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CisJYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMwMDA7Cit9CisKK3RoCit7CisJYmFja2dyb3VuZDogI0RERDsKKwlib3JkZXItdG9wOiAycHggc29saWQgIzAwMDsKKwl0ZXh0LWFsaWduOiBsZWZ0OworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCisvKiBBbnkgcm93ICovCisKK3RyCit7CisJYm9yZGVyLXRvcDogMnB4IHNvbGlkICMwMDA7Cit9CisKKy8qIEFueSByb3cgYnV0IHRoZSBmaXJzdCBvciBzZWNvbmQgKG92ZXJyaWRlcyBhYm92ZSBydWxlKSAqLworCit0ciArIHRyICsgdHIKK3sKKwlib3JkZXItdG9wOiAycHggc29saWQgIzk5OTsKK30KKwordHIub2ZmbGluZSB0ZC5ob3N0bmFtZQoreworCWNvbG9yOiAjOTk5OworfQorCisuaG9zdG5hbWUgICB7IHdpZHRoOiAxMGVtOyB9CisuaXBfYWRkciAgICB7IHdpZHRoOiAxMGVtOyBiYWNrZ3JvdW5kOiAjREREOyB9CisuZXRoZXJfYWRkciB7IHdpZHRoOiAxNWVtOyB9CisuY2xpZW50X2lkICB7IHdpZHRoOiAxNWVtOyBiYWNrZ3JvdW5kOiAjREREOyB9Cisuc3RhdHVzICAgICB7IHdpZHRoOiA1ZW07ICB9Cisuc2luY2UgICAgICB7IHdpZHRoOiAxMGVtOyBiYWNrZ3JvdW5kOiAjREREOyB9CisubGVhc2UgICAgICB7IHdpZHRoOiAxMGVtOyB9CmRpZmYgLS1naXQgYS9jb250cmliL2Ruc2xpc3QvZG5zbGlzdC5wbCBiL2NvbnRyaWIvZG5zbGlzdC9kbnNsaXN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdjZTI3MjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Ruc2xpc3QvZG5zbGlzdC5wbApAQCAtMCwwICsxLDYwOCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgZG5zbGlzdCAtIFJlYWQgc3RhdGUgZmlsZSBmcm9tIGRuc21hc3EgYW5kIGNyZWF0ZSBhIG5pY2Ugd2ViIHBhZ2UgdG8gZGlzcGxheQorIyAgICAgICAgICAgYSBsaXN0IG9mIERIQ1AgY2xpZW50cy4KKyMgCisjIENvcHlyaWdodCAoQykgMjAwNCAgVGhvbWFzIFR1dHRsZQorIyAKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5USUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0qOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMgCisjICogVGhlIGxpY2Vuc2UgaXMgaW4gZmFjdCBpbmNsdWRlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSwgYW5kIGNhbgorIyAgIGVpdGhlciBiZSB2aWV3ZWQgYnkgcmVhZGluZyBldmVyeXRoaW5nIGFmdGVyICJfX0RBVEFfXyIgb3IgYnkKKyMgICBydW5uaW5nIGRuc2xpc3Qgd2l0aCB0aGUgJy1sJyBvcHRpb24uCisjIAorIyBWZXJzaW9uOiAwLjIKKyMgQXV0aG9yOiAgVGhvbWFzIFR1dHRsZQorIyBFbWFpbDogICBkbnNsaXN0LjIwLnRoaW5raW5naW5iaW5hcnlAc3BhbWdvdXJtZXQub3JnCisjIExpY2Vuc2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuMAorIworIyB2LiAwLjA6IFRvbyB1Z2x5IHRvIHB1Ymxpc2gsIHRocm93biBvdXQuCisjCisjIHYuIDAuMTogRmlyc3QgcmV3cml0ZS4KKyMgICAgICAgICBBZGRlZCBtYXN0ZXIgaG9zdCBsaXN0IHNvIG9mZmxpbmUgaG9zdHMgY2FuIHN0aWxsIGJlIGRpc3BsYXllZC4KKyMgICAgICAgICBGaXhlZCBtb2RpZmljYXRpb24gZGV0ZWN0aW9uIChhIG5ld2VyIG1vZGlmaWNhdGlvbiB0aW1lIGlzIGxvd2VyLikKKyMKKyMgdi4gMC4yOiBGaXhlZCBDbGllbnQgSUQgPSAiKiIgPT4gIk5vbmUiCisjICAgICAgICAgRml4ZWQgSFRNTCBlbnRpdGllcyAoYSBjbGllbnQgSUQgb2YgPz8/Pzw/IHNjcmV3ZWQgaXQgdXApCisjICAgICAgICAgRml4ZWQgY29tbWFuZC1saW5lIGFyZ3VtZW50IHByb2Nlc3NpbmcgKGFwcGFyZW50bHksICJzaGlmdCBAQVJHViIgIT0KKyMgICAgICAgICAgICAgIiRfID0gc2hpZnQgQEFSR1YiLi4uKQorIyAgICAgICAgIEFkZGVkIGxpY2Vuc2UgaW5mb3JtYXRpb24uCisKK3VzZSBUZW1wbGF0ZTsKKworIyBMb2NhdGlvbiBvZiBzdGF0ZSBmaWxlLiAgKFRoaXMgaXMgdGhlIGRuc21hc3EgZGVmYXVsdC4pCisjIENoYW5nZSB3aXRoIC1zIDxmaWxlPgorbXkgJGRuc21hc3Ffc3RhdGVfZmlsZSA9ICcvdmFyL2xpYi9taXNjL2Ruc21hc3EubGVhc2VzJzsKKyMgTG9jYXRpb24gb2YgdGVtcGxhdGUuICAoQXNzdW1lZCB0byBiZSBpbiBjdXJyZW50IGRpcmVjdG9yeS4pCisjIENoYW5nZSB3aXRoIC10IDxmaWxlPgorbXkgJGh0bWxfdGVtcGxhdGVfZmlsZSA9ICdkbnNsaXN0LnR0Mic7CisjIEZpbGUgdG8gd3JpdGUgSFRNTCBwYWdlIHRvLiAgKFRoaXMgaXMgd2hlcmUgU2xhY2t3YXJlIHB1dHMgV1dXIHBhZ2VzLiAgSXQgbWF5CisjIGJlIGRpZmZlcmVudCBvbiBvdGhlciBzeXN0ZW1zLiAgTWFrZSBzdXJlIHRoZSBwZXJtaXNzaW9ucyBhcmUgc2V0IGNvcnJlY3RseQorIyBmb3IgaXQuKQorbXkgJGh0bWxfb3V0cHV0X2ZpbGUgPSAnL3Zhci93d3cvaHRkb2NzL2RoY3AuaHRtbCc7CisjIFRpbWUgdG8gd2FpdCBhZnRlciBlYWNoIHBhZ2UgdXBkYXRlLiAgKFRoZSBzdGF0ZSBmaWxlIGlzIGNoZWNrZWQgZm9yIGNoYW5nZXMKKyMgYmVmb3JlIGVhY2ggdXBkYXRlIGJ1dCBpcyBub3QgcmVhZCBpbiBlYWNoIHRpbWUsIGluIGNhc2UgaXQgaXMgdmVyeSBiaWcuICBUaGUKKyMgcGFnZSBpcyByZXdyaXR0ZW4ganVzdCBzbyB0aGUgIih1cGRhdGVkIF9fL19fIF9fOl9fOl9fKSIgdGV4dCBjaGFuZ2VzIDstKQorbXkgJHdhaXRfdGltZSA9IDI7CisKKyMgUmVhZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLgord2hpbGUgKCRfID0gc2hpZnQgQEFSR1YpIHsKKwlpZiAoLy1zLykgeyAkZG5zbWFzcV9zdGF0ZV9maWxlID0gc2hpZnQ7IG5leHQ7IH0KKwlpZiAoLy10LykgeyAkaHRtbF90ZW1wbGF0ZV9maWxlID0gc2hpZnQ7IG5leHQ7IH0KKwlpZiAoLy1vLykgeyAkaHRtbF9vdXRwdXRfZmlsZSA9IHNoaWZ0OyAgIG5leHQ7IH0KKwlpZiAoLy1kLykgeyAkd2FpdF90aW1lID0gc2hpZnQ7ICAgICAgICAgIG5leHQ7IH0KKwlpZiAoLy1sLykgeyBzaG93X2xpY2Vuc2UoKTsgICAgICAgICAgICAgIGV4aXQ7IH0KKwlkaWUgInVzYWdlOiBkbnNsaXN0IFstcyBzdGF0ZV9maWxlXSBbLXQgdGVtcGxhdGVfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLWQgZGVsYXlfdGltZV1cbiI7Cit9CisKKyMgTWFzdGVyIGxpc3Qgb2YgY2xpZW50cywgb2ZmbGluZSBhbmQgb25saW5lLgorbXkgJGxpc3QgPSB7fTsKKyMgU29ydGVkIGhvc3QgbGlzdC4gIChJdCdzIGFjdHVhbGx5IHNvcnRlZCBieSBJUC0tdGhlIHN1YiAmYnlpcCgpIGNvbXBhcmVzIHR3bworIyBJUCBhZGRyZXNzZXMsIG9jdGV0IGJ5IG9jdGV0LCBhbmQgZmlndXJlcyBvdXQgd2hpY2ggaXMgaGlnaGVyLikKK215IEBob3N0cyA9ICgpOworIyBMYXN0IHRpbWUgdGhlIHN0YXRlIGZpbGUgd2FzIGNoYW5nZWQuCitteSAkbGFzdF9zdGF0ZV9jaGFuZ2U7CisKKyMgQ2hlY2sgZm9yIGEgY2hhbmdlIHRvIHRoZSBzdGF0ZSBmaWxlLgorc3ViIGNoZWNrX3N0YXRlIHsKKwlpZiAoZGVmaW5lZCAkbGFzdF9zdGF0ZV9jaGFuZ2UpIHsKKwkJaWYgKC1NICRkbnNtYXNxX3N0YXRlX2ZpbGUgPCAkbGFzdF9zdGF0ZV9jaGFuZ2UpIHsKKwkJCXByaW50ICJjaGVja19zdGF0ZTogc3RhdGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkLlxuIjsKKwkJCSRsYXN0X3N0YXRlX2NoYW5nZSA9IC1NICRkbnNtYXNxX3N0YXRlX2ZpbGU7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJIyBMYXN0IGNoYW5nZSB1bmRlZmluZWQsIHNvIHdlIGFyZSBydW5uaW5nIGZvciB0aGUgZmlyc3QgdGltZS4KKwkJcHJpbnQgImNoZWNrX3N0YXRlOiByZWFkaW5nIHN0YXRlIGZpbGUgYXQgc3RhcnR1cC5cbiI7CisJCXJlYWRfc3RhdGUoKTsKKwkJJGxhc3Rfc3RhdGVfY2hhbmdlID0gLU0gJGRuc21hc3Ffc3RhdGVfZmlsZTsKKwkJcmV0dXJuIDE7CisJfQorfQorCisjIFJlYWQgZGF0YSBpbiBzdGF0ZSBmaWxlLgorc3ViIHJlYWRfc3RhdGUgeworCW15ICRvbGQ7CisJbXkgJG5ldzsKKwkjIE9wZW4gZmlsZS4KKwl1bmxlc3MgKG9wZW4gU1RBVEUsICRkbnNtYXNxX3N0YXRlX2ZpbGUpIHsKKwkJd2FybiAicmVhZF9zdGF0ZTogY2FuJ3Qgb3BlbiAkZG5zbWFzcV9zdGF0ZV9maWxlIVxuIjsKKwkJcmV0dXJuIDA7CisJfQorCSMgTWFyayBhbGwgaG9zdHMgYXMgb2ZmbGluZSwgc2F2aW5nIG9sZCBzdGF0ZS4KKwlmb3JlYWNoICRldGhlciAoa2V5cyAleyRsaXN0fSkgeworCQkkbGlzdC0+eyRldGhlcn0tPnsnb2xkX29ubGluZSd9ID0gJGxpc3QtPnskZXRoZXJ9LT57J29ubGluZSd9OworCQkkbGlzdC0+eyRldGhlcn0tPnsnb25saW5lJ30gPSAwOworCX0KKwkjIFJlYWQgaG9zdHMuCisJd2hpbGUgKDxTVEFURT4pIHsKKwkJY2hvbXA7CisJCUBob3N0e3F3L3Jhd19sZWFzZSBldGhlcl9hZGRyIGlwX2FkZHIgaG9zdG5hbWUgcmF3X2NsaWVudF9pZC99ID0gc3BsaXQgL1xzKy87CisJCSRldGhlciA9ICRob3N0e2V0aGVyX2FkZHJ9OworCQkjIE1hcmsgZWFjaCBvbmxpbmUgaG9zdCBhcyBvbmxpbmUuCisJCSRsaXN0LT57JGV0aGVyfS0+eydvbmxpbmUnfSA9IDE7CisJCSMgQ29weSBkYXRhIHRvIG1hc3RlciBsaXN0LgorCQlmb3JlYWNoICRrZXkgKGtleXMgJWhvc3QpIHsKKwkJCSRsaXN0LT57JGV0aGVyfS0+eyRrZXl9ID0gJGhvc3R7JGtleX07CisJCX0KKwl9CisJY2xvc2UgU1RBVEU7CisJIyBIYW5kbGUgY2hhbmdlcyBpbiBvZmZsaW5lL29ubGluZSBzdGF0ZS4gIChUaGUgc3ViICZkb19ob3N0KCkgaGFuZGxlcworCSMgYWxsIG9mIHRoZSBleHRyYSBzdHVmZiB0byBkbyB3aXRoIGEgaG9zdCdzIGRhdGEgb25jZSBpdCBpcyByZWFkLgorCWZvcmVhY2ggJGV0aGVyIChrZXlzICV7JGxpc3R9KSB7CisJCSRvbGQgPSAkbGlzdC0+eyRldGhlcn0tPnsnb2xkX29ubGluZSd9OworCQkkbmV3ID0gJGxpc3QtPnskZXRoZXJ9LT57J29ubGluZSd9OworCQlpZiAobm90ICRvbGQpIHsKKwkJCWlmIChub3QgJG5ldykgeworCQkJCWRvX2hvc3QoJGV0aGVyLCAnb2ZmbGluZScpOworCQkJfSBlbHNlIHsKKwkJCQlkb19ob3N0KCRldGhlciwgJ2pvaW4nKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChub3QgJG5ldykgeworCQkJCWRvX2hvc3QoJGV0aGVyLCAnbGVhdmUnKTsKKwkJCX0gZWxzZSB7CisJCQkJZG9faG9zdCgkZXRoZXIsICdvbmxpbmUnKTsKKwkJCX0KKwkJfQorCX0KKwkjIFNvcnQgaG9zdHMgYnkgSVAgOy0pCisJQGhvc3RzID0gc29ydCBieWlwIHZhbHVlcyAleyRsaXN0fTsKKwkjIENvcHkgc29ydGVkIGxpc3QgdG8gdGVtcGxhdGUgZGF0YSBzdG9yZS4KKwkkZGF0YS0+eydob3N0cyd9ID0gWyBAaG9zdHMgXTsKK30KKworIyBEbyBzdHVmZiBwZXIgaG9zdC4KK3N1YiBkb19ob3N0IHsKKwlteSAoJGV0aGVyLCAkc3RhdHVzKSA9IEBfOworCQorCSMgRmluZCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIERIQ1AgY2xpZW50IElELgorCWlmICgkbGlzdC0+eyRldGhlcn0tPnsncmF3X2NsaWVudF9pZCd9IGVxICcqJykgeworCQkkbGlzdC0+eyRldGhlcn0tPnsndGV4dF9jbGllbnRfaWQnfSA9ICdOb25lJzsKKwl9IGVsc2UgeworCQlteSAkdGV4dCA9ICIiOworCQlmb3JlYWNoICRjaGFyIChzcGxpdCAvOi8sICRsaXN0LT57JGV0aGVyfS0+eydyYXdfY2xpZW50X2lkJ30pIHsKKwkJCSRjaGFyID0gcGFjaygnSDInLCAkY2hhcik7CisJCQlpZiAob3JkKCRjaGFyKSA+PSAzMiBhbmQgb3JkKCRjaGFyKSA8PSAxMjcpIHsKKwkJCQkkdGV4dCAuPSAkY2hhcjsKKwkJCX0gZWxzZSB7CisJCQkJJHRleHQgLj0gIj8iOworCQkJfQorCQl9CisJCSRsaXN0LT57JGV0aGVyfS0+eyd0ZXh0X2NsaWVudF9pZCd9ID0gJHRleHQ7CisJfQorCQkKKwkjIENvbnZlcnQgbGVhc2UgZXhwaXJhdGlvbiBkYXRlL3RpbWUgdG8gdGV4dC4KKwlpZiAoJGxpc3QtPnskZXRoZXJ9LT57J3Jhd19sZWFzZSd9ID09IDApIHsKKwkJJGxpc3QtPnskZXRoZXJ9LT57J3RleHRfbGVhc2UnfSA9ICdOZXZlcic7CisJfSBlbHNlIHsKKwkJJGxpc3QtPnskZXRoZXJ9LT57J3RleHRfbGVhc2UnfSA9IG5pY2VfdGltZSgkbGlzdC0+eyRldGhlcn0tPnsncmF3X2xlYXNlJ30pOworCX0KKwkKKwlpZiAoJHN0YXR1cyBlcSAnb2ZmbGluZScpIHsKKwkJIyBOb3RoaW5nIHRvIGRvLgorCX0gZWxzaWYgKCRzdGF0dXMgZXEgJ29ubGluZScpIHsKKwkJIyBOb3RoaW5nIHRvIGRvLgorCX0gZWxzaWYgKCRzdGF0dXMgZXEgJ2pvaW4nKSB7CisJCSMgVXBkYXRlIHRpbWVzIGZvciBqb2luaW5nIGhvc3QuCisJCXByaW50ICJkb19ob3N0OiAkZXRoZXIgam9pbmVkIHRoZSBuZXR3b3JrLlxuIjsKKwkJJGxpc3QtPnskZXRoZXJ9LT57J2pvaW5fdGltZSd9ID0gdGltZTsKKwkJJGxpc3QtPnskZXRoZXJ9LT57J3NpbmNlJ30gPSBuaWNlX3RpbWUodGltZSk7CisJfSBlbHNpZiAoJHN0YXR1cyBlcSAnbGVhdmUnKSB7CisJCSMgVXBkYXRlIHRpbWVzIGZvciBsZWF2aW5nIGhvc3QuCisJCXByaW50ICJkb19ob3N0OiAkZXRoZXIgbGVmdCB0aGUgbmV0d29yay5cbiI7CisJCSRsaXN0LT57JGV0aGVyfS0+eydsZWF2ZV90aW1lJ30gPSB0aW1lOworCQkkbGlzdC0+eyRldGhlcn0tPnsnc2luY2UnfSA9IG5pY2VfdGltZSh0aW1lKTsKKwl9CisJCit9CisKKyMgQ29udmVydCB0aW1lIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorc3ViIG5pY2VfdGltZSB7CisJbXkgJHRpbWUgPSBzaGlmdDsKKwlteSAoJHNlYywgJG1pbiwgJGhvdXIsICRtZGF5LCAkbW9uLCAkeWVhciwgJHdkYXksICR5ZGF5LCAkZHN0KSA9IGxvY2FsdGltZSgkdGltZSk7CisJJHNlYyA9IHBhZCgkc2VjLCAnMCcsIDIpOworCSRtaW4gPSBwYWQoJG1pbiwgJzAnLCAyKTsKKwkkaG91ciA9IHBhZCgkaG91ciwgJzAnLCAyKTsKKwkkbW9uID0gcGFkKCRtb24sICcwJywgMik7CisJJG1kYXkgPSBwYWQoJG1kYXksICcwJywgMik7CisJcmV0dXJuICIkbW9uLyRtZGF5ICRob3VyOiRtaW46JHNlYyI7Cit9CisKKyMgUGFkIHN0cmluZyB0byBhIGNlcnRhaW4gbGVuZ3RoIGJ5IHJlcGVhdGVkbHkgcHJlcGVuZGluZyBhbm90aGVyIHN0cmluZy4KK3N1YiBwYWQgeworCW15ICgkdGV4dCwgJHBhZCwgJGxlbmd0aCkgPSBAXzsKKwl3aGlsZSAobGVuZ3RoKCR0ZXh0KSA8ICRsZW5ndGgpIHsKKwkJJHRleHQgPSAiJHBhZCR0ZXh0IjsKKwl9CisJcmV0dXJuICR0ZXh0OworfQorCisjIENvbXBhcmUgdHdvIElQIGFkZHJlc3Nlcy4gIChVc2VzICRhIGFuZCAkYiBmcm9tIHNvcnQuKQorc3ViIGJ5aXAgeworCSMgU3BsaXQgaW50byBvY3RldHMuCisJbXkgQGEgPSBzcGxpdCAvXC4vLCAkYS0+e2lwX2FkZHJ9OworCW15IEBiID0gc3BsaXQgL1wuLywgJGItPntpcF9hZGRyfTsKKwkjIENvbXBhcmUgb2N0ZXRzLgorCWZvcmVhY2ggJG4gKDAuLjMpIHsKKwkJcmV0dXJuICRhWyRuXSA8PT4gJGJbJG5dIGlmICgkYVskbl0gIT0gJGJbJG5dKTsKKwl9CisJIyBJZiB3ZSBnZXQgaGVyZSB0aGVyZSBpcyBubyBkaWZmZXJlbmNlLgorCXJldHVybiAwOworfQorCQkKKyMgT3V0cHV0IEhUTUwgZmlsZS4KK3N1YiB3cml0ZV9vdXRwdXQgeworCSMgQ3JlYXRlIG5ldyB0ZW1wbGF0ZSBvYmplY3QuCisJbXkgJHRlbXBsYXRlID0gVGVtcGxhdGUtPm5ldygKKwkJeworCQkJQUJTT0xVVEUgPT4gMSwgIyAvdmFyL3d3dy8uLi4gaXMgYW4gYWJzb2x1dGUgcGF0aAorCQkJT1VUUFVUID0+ICRodG1sX291dHB1dF9maWxlICMgcHV0IGl0IGhlcmUsIG5vdCBTVERPVVQKKwkJfQorCSk7CisJJGRhdGEtPnsndXBkYXRlZCd9ID0gbmljZV90aW1lKHRpbWUpOyAjIGFkZCAiKHVwZGF0ZWQgLi4uKSIgdG8gZmlsZQorCXVubGVzcyAoJHRlbXBsYXRlLT5wcm9jZXNzKCRodG1sX3RlbXBsYXRlX2ZpbGUsICRkYXRhKSkgeyAjIGRvIGl0CisJCXdhcm4gIndyaXRlX291dHB1dDogVGVtcGxhdGUgVG9vbGtpdCBlcnJvcjogIiAuICR0ZW1wbGF0ZS0+ZXJyb3IoKSAuICJcbiI7CisJCXJldHVybiAwOworCX0KKwlwcmludCAid3JpdGVfb3V0cHV0OiBwYWdlIHVwZGF0ZWQuXG4iOworCXJldHVybiAxOworfQorCitzdWIgc2hvd19saWNlbnNlIHsKKwl3aGlsZSAoPERBVEE+KSB7CisJCXByaW50OworCQkkbGluZSsrOworCQlpZiAoJGxpbmUgPT0gMjQpIHsgPD47ICRsaW5lID0gMTsgfQorCX0KK30KKworIyBNYWluIGxvb3AuCit3aGlsZSAoMSkgeworCSMgQ2hlY2sgZm9yIHN0YXRlIGNoYW5nZS4KKwlpZiAoY2hlY2tfc3RhdGUoKSkgeworCQlyZWFkX3N0YXRlKCk7CisJCXNsZWVwIDE7ICMgU2xlZXAgZm9yIGEgc2Vjb25kIGp1c3Qgc28gd2UgZG9uJ3Qgd2VhciBhbnl0aGluZworCQkgICAgICAgICAjIG91dC4gIChCeSBub3Qgc2xlZXBpbmcgdGhlIHdob2xlIHRpbWUgYWZ0ZXIgYSBjaGFuZ2UKKwkJCSAjIHdlIGNhbiBkZXRlY3QgcmFwaWQgY2hhbmdlcyBtb3JlIGVhc2lseS0tbGlrZSBpZiAzMDAKKwkJCSAjIGhvc3RzIGFsbCBjb21lIGJhY2sgb25saW5lLCB0aGV5IHNob3cgdXAgcXVpY2tlci4pCisJfSBlbHNlIHsKKwkJc2xlZXAgJHdhaXRfdGltZTsgIyBUYWtlIGEgbmFwLgorCX0KKwl3cml0ZV9vdXRwdXQoKTsgIyBXcml0ZSB0aGUgZmlsZSBhbnl3YXkuCit9CitfX0RBVEFfXworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9jb250cmliL2Ruc2xpc3QvZG5zbGlzdC50dDIgYi9jb250cmliL2Ruc2xpc3QvZG5zbGlzdC50dDIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTk5OGU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZG5zbGlzdC9kbnNsaXN0LnR0MgpAQCAtMCwwICsxLDMyIEBACis8aHRtbD4KKwk8aGVhZD4KKwkJPHRpdGxlPkRIQ1AgQ2xpZW50czwvdGl0bGU+CisJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGhjcC5jc3MiLz4KKwkJPG1ldGEgaHR0cC1lcXVpdj0iUmVmcmVzaCIgY29udGVudD0iMiIvPgorCTwvaGVhZD4KKwk8Ym9keT4KKwkJPGgxPkRIQ1AgQ2xpZW50cyA8c3BhbiBjbGFzcz0idXBkYXRlZCI+KHVwZGF0ZWQgWyUgdXBkYXRlZCAlXSk8L3NwYW4+PC9oMT4KKwkJPHRhYmxlIGNvbHM9IjciPgorCQk8dHI+CisJCQk8dGggY2xhc3M9Imhvc3RuYW1lIj5Ib3N0bmFtZTwvdGg+CisJCQk8dGggY2xhc3M9ImlwX2FkZHIiPklQIEFkZHJlc3M8L3RoPgorCQkJPHRoIGNsYXNzPSJldGhlcl9hZGRyIj5FdGhlcm5ldCBBZGRyZXNzPC90aD4KKwkJCTx0aCBjbGFzcz0iY2xpZW50X2lkIj5ESENQIENsaWVudCBJRDwvdGg+CisJCQk8dGggY2xhc3M9InN0YXR1cyI+U3RhdHVzPC90aD4KKwkJCTx0aCBjbGFzcz0ic2luY2UiPlNpbmNlPC90aD4KKwkJCTx0aCBjbGFzcz0ibGVhc2UiPkxlYXNlIEV4cGlyZXM8L3RoPgorCQk8L3RyPgorCQlbJSBGT1JFQUNIIGhvc3QgSU4gaG9zdHMgJV0KKwkJCTx0ciBjbGFzcz0iWyUgSUYgaG9zdC5vbmxpbmUgJV1vbmxpbmVbJSBFTFNFICVdb2ZmbGluZVslIEVORCAlXSI+CisJCQkJPHRkIGNsYXNzPSJob3N0bmFtZSI+WyUgaG9zdC5ob3N0bmFtZSAlXTwvdGQ+CisJCQkJPHRkIGNsYXNzPSJpcF9hZGRyIj5bJSBob3N0LmlwX2FkZHIgJV08L3RkPgorCQkJCTx0ZCBjbGFzcz0iZXRoZXJfYWRkciI+WyUgaG9zdC5ldGhlcl9hZGRyICVdPC90ZD4KKwkJCQk8dGQgY2xhc3M9ImNsaWVudF9pZCI+WyUgaG9zdC50ZXh0X2NsaWVudF9pZCAlXSAoWyUgaG9zdC5yYXdfY2xpZW50X2lkICVdKTwvdGQ+CisJCQkJPHRkIGNsYXNzPSJzdGF0dXMiPlslIElGIGhvc3Qub25saW5lICVdT25saW5lWyUgRUxTRSAlXU9mZmxpbmVbJSBFTkQgJV08L3RkPgorCQkJCTx0ZCBjbGFzcz0ic2luY2UiPlslIGhvc3Quc2luY2UgJV08L3RkPgorCQkJCTx0ZCBjbGFzcz0ibGVhc2UiPlslIGhvc3QudGV4dF9sZWFzZSAlXTwvdGQ+CisJCQk8L3RyPgorCQlbJSBFTkQgJV0KKwkJPC90YWJsZT4KKwk8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250cmliL2Ruc21hc3FfTWFjT1NYL0ROU21hc3EgYi9jb250cmliL2Ruc21hc3FfTWFjT1NYL0ROU21hc3EKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmI2MjExOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZG5zbWFzcV9NYWNPU1gvRE5TbWFzcQpAQCAtMCwwICsxLDIyIEBACisjIS9iaW4vc2gKKy4gL2V0Yy9yYy5jb21tb24KKworU3RhcnRTZXJ2aWNlKCkgeworICBpZiBbICIke0ROU01BU1E6PS1OTy19IiA9ICItWUVTLSIgXSA7IHRoZW4KKyAgICAvdXNyL2xvY2FsL3NiaW4vZG5zbWFzcSAtcSAtbgorICBmaQorfQorCitTdG9wU2VydmljZSgpIHsKKyAgcGlkPWBHZXRQSUQgZG5zbWFzcWAKKyAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisgICAga2lsbCAkcGlkCisgIGZpCit9CisKK1Jlc3RhcnRTZXJ2aWNlKCkgeworICBTdG9wU2VydmljZSAiJEAiCisgIFN0YXJ0U2VydmljZSAiJEAiCit9CisKK1J1blNlcnZpY2UgIiQxIgpkaWZmIC0tZ2l0IGEvY29udHJpYi9kbnNtYXNxX01hY09TWC9SRUFETUUucnRmIGIvY29udHJpYi9kbnNtYXNxX01hY09TWC9SRUFETUUucnRmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRhNDg0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Ruc21hc3FfTWFjT1NYL1JFQURNRS5ydGYKQEAgLTAsMCArMSw0MiBAQAore1xydGYxXG1hY1xhbnNpY3BnMTAwMDBcY29jb2FydGY4MjRcY29jb2FzdWJydGYxMDAKK3tcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQ3NyBIZWx2ZXRpY2E7XGYxXGZuaWxcZmNoYXJzZXQ3NyBNb25hY287fQore1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQorXHBhcGVydzExOTAwXHBhcGVyaDE2ODQwXG1hcmdsMTQ0MFxtYXJncjE0NDBcdmlld3cxMTEyMFx2aWV3aDEwMTAwXHZpZXdraW5kMAorXHBhcmRcdHg1NjZcdHgxMTMzXHR4MTcwMFx0eDIyNjdcdHgyODM0XHR4MzQwMVx0eDM5NjhcdHg0NTM1XHR4NTEwMlx0eDU2NjlcdHg2MjM2XHR4NjgwM1xxbFxxbmF0dXJhbFxwYXJkaXJuYXR1cmFsCisKK1xmMFxmczI0IFxjZjAgMS4gCUlmIHlvdSd2ZSB1c2VkIEROU2VuYWJsZXIsIG9yIGlmIHlvdSdyZSB1c2luZyBNYWMgT1MgWCBTZXJ2ZXIsIG9yIGlmIHlvdSBoYXZlIGluIGFueSBvdGhlciB3YXkgYWN0aXZhdGVkIE1hYyBPUyBYJ3MgYnVpbHQtaW4gREhDUCBhbmQvb3IgRE5TIHNlcnZlcnMsIGRpc2FibGUgdGhlbS4gIFRoaXMgd291bGQgdXN1YWxseSBpbnZvbHZlIGNoZWNraW5nIHRoYXQgdGhleSBhcmUgZWl0aGVyIHNldCB0byAtTk8tIG9yIGFic2VudCBhbHRvZ2V0aGVyIGluIAorXGYxIC9ldGMvaG9zdGNvbmZpZworXGYwIC4gIElmIHlvdSd2ZSBuZXZlciBkb25lIGFueXRoaW5nIHRvIGRvIHdpdGggRE5TIG9yIERIQ1Agc2VydmVycyBvbiBhIGNsaWVudCB2ZXJzaW9uIG9mIE1hY09TIFgsIHlvdSB3b24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoaXM7IGl0IHdpbGwgYWxyZWFkeSBiZSBjb25maWd1cmVkIGZvciB5b3UuXAorXAorMi4JQWRkIGEgY29uZmlndXJhdGlvbiBpdGVtIHRvIAorXGYxIC9ldGMvaG9zdGNvbmZpZworXGYwICBhcyBmb2xsb3dzOlwKK1wKKworXGYxIEROU01BU1E9LVlFUy0KK1xmMCBcCitcCiszLiAJQ3JlYXRlIGEgc3lzdGVtLXdpZGUgU3RhcnR1cEl0ZW1zIGRpcmVjdG9yeSBmb3IgZG5zbWFzcTpcCitcCisKK1xmMSBzdWRvIG1rZGlyIC1wIC9MaWJyYXJ5L1N0YXJ0dXBJdGVtcy9ETlNtYXNxXAorCitcZjAgXAorNC4JQ29weSB0aGUgZmlsZXMgCitcZjEgRE5TbWFzcQorXGYwICBhbmQgCitcZjEgU3RhcnR1cFBhcmFtZXRlcnMucGxpc3QKK1xmMCAgaW50byB0aGlzIGRpcmVjdG9yeSwgYW5kIG1ha2Ugc3VyZSB0aGUgZm9ybWVyIGlzIGV4ZWN1dGFibGU6XAorXAorCitcZjEgc3VkbyBjcCBETlNtYXNxIFN0YXJ0dXBQYXJhbWV0ZXJzLnBsaXN0IC9MaWJyYXJ5L1N0YXJ0dXBJdGVtcy9ETlNtYXNxXAorc3VkbyBjaG1vZCA3NTUgL0xpYnJhcnkvU3RhcnR1cEl0ZW1zL0ROU21hc3EvRE5TbWFzcVwKKworXGYwIFwKKzUuCVN0YXJ0IHRoZSBzZXJ2aWNlOlwKK1wKKworXGYxIHN1ZG8gL0xpYnJhcnkvU3RhcnR1cEl0ZW1zL0ROU21hc3EvRE5TbWFzcSBzdGFydFwKKworXGYwIFxjZjAgXAorVGhhdCBzaG91bGQgYmUgYWxsLi4ufQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZG5zbWFzcV9NYWNPU1gvU3RhcnR1cFBhcmFtZXRlcnMucGxpc3QgYi9jb250cmliL2Ruc21hc3FfTWFjT1NYL1N0YXJ0dXBQYXJhbWV0ZXJzLnBsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ1NGJkYTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Ruc21hc3FfTWFjT1NYL1N0YXJ0dXBQYXJhbWV0ZXJzLnBsaXN0CkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZSBDb21wdXRlci8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzxwbGlzdCB2ZXJzaW9uPSIxLjAiPgorPGRpY3Q+CisJPGtleT5EZXNjcmlwdGlvbjwva2V5PgorCTxzdHJpbmc+RE5TbWFzcTwvc3RyaW5nPgorCTxrZXk+T3JkZXJQcmVmZXJlbmNlPC9rZXk+CisJPHN0cmluZz5Ob25lPC9zdHJpbmc+CisJPGtleT5Qcm92aWRlczwva2V5PgorCTxhcnJheT4KKwkJPHN0cmluZz5ETlNtYXNxPC9zdHJpbmc+CisJPC9hcnJheT4KKwk8a2V5PlVzZXM8L2tleT4KKwk8YXJyYXk+CisJCTxzdHJpbmc+TmV0d29yazwvc3RyaW5nPgorCTwvYXJyYXk+CisJPC9kaWN0PgorPC9wbGlzdD4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZHluYW1pYy1kbnNtYXNxL2R5bmFtaWMtZG5zbWFzcS5wbCBiL2NvbnRyaWIvZHluYW1pYy1kbnNtYXNxL2R5bmFtaWMtZG5zbWFzcS5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYzRhMWYxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9keW5hbWljLWRuc21hc3EvZHluYW1pYy1kbnNtYXNxLnBsCkBAIC0wLDAgKzEsMjQ5IEBACisjIS91c3IvYmluL3BlcmwKKyMgZHluYW1pYy1kbnNtYXNxLnBsIC0gdXBkYXRlIGRuc21hc3EncyBpbnRlcm5hbCBkbnMgZW50cmllcyBkeW5hbWljYWxseQorIyBDb3B5cmlnaHQgKEMpIDIwMDQgIFBldGVyIFdpbGxpcworIyAKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIyAKKyMgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzY3JpcHQgaXMgdG8gYmUgYWJsZSB0byB1cGRhdGUgZG5zbWFzcSdzIGRucworIyByZWNvcmRzIGZyb20gYSByZW1vdGUgZHluYW1pYyBkbnMgY2xpZW50LgorIyAKKyMgYmFzaWMgdXNlIG9mIHRoaXMgc2NyaXB0OgorIyBkeW5hbWljLWRuc21hc3EucGwgYWRkIHRlc3RhY2NvdW50IDEyMzQgdGVzdGFjY291bnQubXlkb21haW4uY29tCisjIGR5bmFtaWMtZG5zbWFzcS5wbCBsaXN0ZW4gJgorIyAKKyMgdGhpcyBzY3JpcHQgdHJpZXMgdG8gZW11bGF0ZSBEeW5ETlMub3JnJ3MgZHluYW1pYyBkbnMgc2VydmljZSwgc28KKyMgdGVjaG5pY2FsbHkgeW91IHNob3VsZCBiZSBhYmxlIHRvIHVzZSBhbnkgRHluRE5TLm9yZyBjbGllbnQgdG8KKyMgdXBkYXRlIHRoZSByZWNvcmRzIGhlcmUuIHRlc3RlZCBhbmQgY29uZmlybWVkIHRvIHdvcmsgd2l0aCBkZG5zdQorIyAxLjMuMS4ganVzdCBwb2ludCB0aGUgY2xpZW50J3MgaG9zdCB0byB0aGUgSVAgb2YgdGhpcyBtYWNoaW5lLAorIyBwb3J0IDkwMjAsIGFuZCBpbmNsdWRlIHRoZSBob3N0bmFtZSwgdXNlciBhbmQgcGFzcywgYW5kIGl0IHNob3VsZAorIyB3b3JrLgorIyAKKyMgbWFrZSBzdXJlICJhZGRuLWhvc3RzPS9ldGMvZHluZG5zLWhvc3RzIiBpcyBpbiB5b3VyIC9ldGMvZG5zbWFzcS5jb25mCisjIGZpbGUgYW5kICJub3BvbGwiIGlzIGNvbW1lbnRlZCBvdXQuCisKK3VzZSBzdHJpY3Q7Cit1c2UgSU86OlNvY2tldDsKK3VzZSBNSU1FOjpCYXNlNjQ7Cit1c2UgREJfRmlsZTsKK3VzZSBGY250bDsKKworbXkgJGFjY291bnRkYiA9ICJhY2NvdW50cy5kYiI7CitteSAkcmVjb3JkZmlsZSA9ICIvZXRjL2R5bmRucy1ob3N0cyI7CitteSAkZG5zbWFzcXBpZGZpbGUgPSAiL3Zhci9ydW4vZG5zbWFzcS5waWQiOyAjIGlmIHRoaXMgZG9lc24ndCBleGlzdCwgd2lsbCBsb29rIGZvciBwcm9jZXNzIGluIC9wcm9jCitteSAkbGlzdGVuYWRkcmVzcyA9ICIwLjAuMC4wIjsKK215ICRsaXN0ZW5wb3J0ID0gOTAyMDsKKworIyBubyBlZGl0aW5nIHBhc3QgdGhpcyBwb2ludCBzaG91bGQgYmUgbmVjZXNzYXJ5CisKK2lmICggQEFSR1YgPCAxICkgeworCWRpZSAiVXNhZ2U6ICQwIEFERHxERUx8TElTVFVTRVJTfFdSSVRFSE9TVFNGSUxFfExJU1RFTlxuIjsKK30gZWxzaWYgKCBsYyAkQVJHVlswXSBlcSAiYWRkIiApIHsKKwlkaWUgIlVzYWdlOiAkMCBBREQgVVNFUiBQQVNTIEhPU1ROQU1FXG4iIHVubGVzcyBAQVJHViA9PSA0OworCWFkZF9hY2N0KCRBUkdWWzFdLCAkQVJHVlsyXSwgJEFSR1ZbM10pOworfSBlbHNpZiAoIGxjICRBUkdWWzBdIGVxICJkZWwiICkgeworCWRpZSAiVXNhZ2U6ICQwIERFTCBVU0VSXG4iIHVubGVzcyBAQVJHViA9PSAyOworCXByaW50ICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHVzZXIgXCIkQVJHVlsxXVwiPyBbTi95XSAiOworCW15ICRyZXNwID0gPFNURElOPjsKKwljaG9tcCAkcmVzcDsKKwlpZiAoIGxjIHN1YnN0cigkcmVzcCwwLDEpIGVxICJ5IiApIHsKKwkJZGVsX2FjY3QoJEFSR1ZbMV0pOworCX0KK30gZWxzaWYgKCBsYyAkQVJHVlswXSBlcSAibGlzdHVzZXJzIiBvciBsYyAkQVJHVlswXSBlcSAid3JpdGVob3N0c2ZpbGUiICkgeworCW15ICRYID0gdGllIG15ICVoLCAiREJfRmlsZSIsICRhY2NvdW50ZGIsIE9fUkRXUnxPX0NSRUFULCAwNjAwLCAkREJfSEFTSDsKKwlteSAkZmg7CisJaWYgKCBsYyAkQVJHVlswXSBlcSAid3JpdGVob3N0c2ZpbGUiICkgeworICAgICAgICAJb3BlbigkZmgsICI+JHJlY29yZGZpbGUiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gcmVjb3JkZmlsZSBcIiRyZWNvcmRmaWxlXCI6ICQhXG4iOworCSAgICAgICAJZmxvY2soJGZoLCAyKTsKKwkgICAgICAgCXNlZWsoJGZoLCAwLCAwKTsKKwkgICAgICAgCXRydW5jYXRlKCRmaCwgMCk7CisgICAgICAgIH0KKwl3aGlsZSAoIG15ICgka2V5LCAkdmFsKSA9IGVhY2ggJWggKSB7CisJCW15ICgkcGFzcywgJGRvbWFpbiwgJGlwKSA9IHNwbGl0KCJcdCIsJHZhbCk7CisJCWlmICggbGMgJEFSR1ZbMF0gZXEgImxpc3R1c2VycyIgKSB7CisJCQlwcmludCAidXNlciAka2V5LCBob3N0bmFtZSAkZG9tYWluLCBpcCAkaXBcbiI7CisJCX0gZWxzZSB7CisJCQlpZiAoIGRlZmluZWQgJGlwICkgeworCQkJCXByaW50ICRmaCAiJGlwXHQkZG9tYWluXG4iOworCQkJfQorCQl9CisJfQorCWlmICggbGMgJEFSR1ZbMF0gZXEgIndyaXRlaG9zdHNmaWxlIiApIHsKKwkJZmxvY2soJGZoLCA4KTsKKwkJY2xvc2UoJGZoKTsKKwkJZG5zbWFzcV9yZXNjYW5fY29uZmlncygpOworCX0KKwl1bmRlZiAkWDsKKwl1bnRpZSAlaDsKK30gZWxzaWYgKCBsYyAkQVJHVlswXSBlcSAibGlzdGVuIiApIHsKKwlsaXN0ZW5fZm9yX3VwZGF0ZXMoKTsKK30KKworc3ViIGxpc3Rlbl9mb3JfdXBkYXRlcyB7CisJbXkgJHNvY2sgPSBJTzo6U29ja2V0OjpJTkVULT5uZXcoTGlzdGVuICAgID0+IDUsCisJCUxvY2FsQWRkciA9PiAkbGlzdGVuYWRkcmVzcywgTG9jYWxQb3J0ID0+ICRsaXN0ZW5wb3J0LAorCQlQcm90byAgICAgPT4gJ3RjcCcsIFJldXNlQWRkciA9PiAxLAorCQlNdWx0aUhvbWVkID0+IDEpIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gbGlzdGVuaW5nIHNvY2tldDogJCFcbiI7CisJJFNJR3snQ0hMRCd9ID0gJ0lHTk9SRSc7CisJd2hpbGUgKCBteSAkY2xpZW50ID0gJHNvY2stPmFjY2VwdCgpICkgeworCQlteSAkcCA9IGZvcmsoKTsKKwkJaWYgKCAkcCAhPSAwICkgeworCQkJbmV4dDsKKwkJfQorCQkkU0lHeydDSExEJ30gPSAnREVGQVVMVCc7CisJCW15IEBoZWFkZXJzOworCQlteSAlY2dpOworCQl3aGlsZSAoIDwkY2xpZW50PiApIHsKKwkJCXMvKFxyfFxuKS8vZzsKKwkJCWxhc3QgaWYgJF8gZXEgIiI7CisJCQlwdXNoIEBoZWFkZXJzLCAkXzsKKwkJfQorCQlmb3JlYWNoIG15ICRoZWFkZXIgKEBoZWFkZXJzKSB7CisJCQlpZiAoICRoZWFkZXIgPX4gL15HRVQgXC9uaWNcL3VwZGF0ZVw/KFteXHNdLispIEhUVFBcLzFcLlswMV0kLyApIHsKKwkJCQlmb3JlYWNoIG15ICRlbGVtZW50IChzcGxpdCgnJicsICQxKSkgeworCQkJCQkkY2dpeyhzcGxpdCAnPScsICRlbGVtZW50KVswXX0gPSAoc3BsaXQgJz0nLCAkZWxlbWVudClbMV07CisJCQkJfQorCQkJfSBlbHNpZiAoICRoZWFkZXIgPX4gL15BdXRob3JpemF0aW9uOiBiYXNpYyAoLispJC8gKSB7CisJCQkJdW5sZXNzICggZGVmaW5lZCAkY2dpeydob3N0bmFtZSd9ICkgeworCQkJCQlwcmludF9odHRwX3Jlc3BvbnNlKCRjbGllbnQsIHVuZGVmLCAiYmFkc3lzIik7CisJCQkJCWV4aXQoMSk7CisJCQkJfQorCQkJCWlmICggIWV4aXN0cyAkY2dpeydteWlwJ30gKSB7CisJCQkJCSRjZ2l7J215aXAnfSA9ICRjbGllbnQtPnBlZXJob3N0KCk7CisJCQkJfQorCQkJCW15ICgkdXNlciwkcGFzcykgPSBzcGxpdCAiOiIsIE1JTUU6OkJhc2U2NDo6ZGVjb2RlKCQxKTsKKwkJCQlpZiAoIGF1dGhvcml6ZSgkdXNlciwgJHBhc3MsICRjZ2l7J2hvc3RuYW1lJ30sICRjZ2l7J215aXAnfSkgPT0gMCApIHsKKwkJCQkJcHJpbnRfaHR0cF9yZXNwb25zZSgkY2xpZW50LCAkY2dpeydteWlwJ30sICJnb29kIik7CisJCQkJCXVwZGF0ZV9kbnMoXCVjZ2kpOworCQkJCX0gZWxzZSB7CisJCQkJCXByaW50X2h0dHBfcmVzcG9uc2UoJGNsaWVudCwgdW5kZWYsICJiYWRhdXRoIik7CisJCQkJCWV4aXQoMSk7CisJCQkJfQorCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJZXhpdCgwKTsKKwl9CisJcmV0dXJuKDApOworfQorCitzdWIgYWRkX2FjY3QgeworCW15ICgkdXNlciwgJHBhc3MsICRob3N0bmFtZSkgPSBAXzsKKwlteSAkWCA9IHRpZSBteSAlaCwgIkRCX0ZpbGUiLCAkYWNjb3VudGRiLCBPX1JEV1J8T19DUkVBVCwgMDYwMCwgJERCX0hBU0g7CisJJFgtPnB1dCgkdXNlciwgam9pbigiXHQiLCAoJHBhc3MsICRob3N0bmFtZSkpKTsKKwl1bmRlZiAkWDsKKwl1bnRpZSAlaDsKK30KKworc3ViIGRlbF9hY2N0IHsKKyAgICAgICAgbXkgKCR1c2VyLCAkcGFzcywgJGhvc3RuYW1lKSA9IEBfOworICAgICAgICBteSAkWCA9IHRpZSBteSAlaCwgIkRCX0ZpbGUiLCAkYWNjb3VudGRiLCBPX1JEV1J8T19DUkVBVCwgMDYwMCwgJERCX0hBU0g7CisgICAgICAgICRYLT5kZWwoJHVzZXIpOworICAgICAgICB1bmRlZiAkWDsKKyAgICAgICAgdW50aWUgJWg7Cit9CisKKworc3ViIGF1dGhvcml6ZSB7CisJbXkgJHVzZXIgPSBzaGlmdDsKKwlteSAkcGFzcyA9IHNoaWZ0OworCW15ICRob3N0bmFtZSA9IHNoaWZ0OworCW15ICRpcCA9IHNoaWZ0OzsKKwlteSAkWCA9IHRpZSBteSAlaCwgIkRCX0ZpbGUiLCAkYWNjb3VudGRiLCBPX1JEV1J8T19DUkVBVCwgMDYwMCwgJERCX0hBU0g7CisJbXkgKCRzcGFzcywgJHNob3N0KSA9IHNwbGl0KCJcdCIsICRoeyR1c2VyfSk7CisJaWYgKCBkZWZpbmVkICRoeyR1c2VyfSBhbmQgKCRzcGFzcyBlcSAkcGFzcykgYW5kICgkc2hvc3QgZXEgJGhvc3RuYW1lKSApIHsKKwkJJFgtPnB1dCgkdXNlciwgam9pbigiXHQiLCAkc3Bhc3MsICRzaG9zdCwgJGlwKSk7CisJCXVuZGVmICRYOworCQl1bnRpZSAlaDsKKwkJcmV0dXJuKDApOworCX0KKwl1bmRlZiAkWDsKKwl1bnRpZSAlaDsKKwlyZXR1cm4oMSk7Cit9CisKK3N1YiBwcmludF9odHRwX3Jlc3BvbnNlIHsKKwlteSAkc29jayA9IHNoaWZ0OworCW15ICRpcCA9IHNoaWZ0OworCW15ICRyZXNwb25zZSA9IHNoaWZ0OworCXByaW50ICRzb2NrICJIVFRQLzEuMCAyMDAgT0tcbiI7CisJbXkgQHRtcCA9IHNwbGl0IC9ccysvLCBzY2FsYXIgZ210aW1lKCk7CisJcHJpbnQgJHNvY2sgIkRhdGU6ICR0bXBbMF0sICR0bXBbMl0gJHRtcFsxXSAkdG1wWzRdICR0bXBbM10gR01UXG4iOworCXByaW50ICRzb2NrICJTZXJ2ZXI6IFBldGVyJ3MgRmFrZSBEeW5ETlMub3JnIFNlcnZlci8xLjBcbiI7CisJcHJpbnQgJHNvY2sgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iOworCXByaW50ICRzb2NrICJDb25uZWN0aW9uOiBjbG9zZVxuIjsKKwlwcmludCAkc29jayAiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiI7CisJcHJpbnQgJHNvY2sgIlxuIjsKKwkjcHJpbnQgJHNvY2sgIjEyXG4iOyAjIHRoaXMgd2FzIHBhcnQgb2YgdGhlIGR5bmRucyByZXNwb25zZSBidXQgaSdtIG5vdCBzdXJlIHdoYXQgaXQgaXMKKwlwcmludCAkc29jayAiJHJlc3BvbnNlIiwgZGVmaW5lZCgkaXApPyAiICRpcCIgOiAiIiAuICJcbiI7Cit9CisKK3N1YiB1cGRhdGVfZG5zIHsKKwlteSAkaGFzaHJlZiA9IHNoaWZ0OworCW15IEByZWNvcmRzOworCW15ICRmb3VuZCA9IDA7CisJIyB1cGRhdGUgdGhlIGFkZG4taG9zdHMgZmlsZQorCW9wZW4oRklMRSwgIis8JHJlY29yZGZpbGUiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gcmVjb3JkZmlsZSBcIiRyZWNvcmRmaWxlXCI6ICQhXG4iOworCWZsb2NrKEZJTEUsIDIpOworCXdoaWxlICggPEZJTEU+ICkgeworCQlpZiAoIC9eKFxkK1wuXGQrXC5cZCtcLlxkKylccyskJGhhc2hyZWZ7J2hvc3RuYW1lJ31cbiQvc2kgKSB7CisJCQlpZiAoICQxIG5lICQkaGFzaHJlZnsnbXlpcCd9ICkgeworCQkJCXB1c2ggQHJlY29yZHMsICIkJGhhc2hyZWZ7J215aXAnfVx0JCRoYXNocmVmeydob3N0bmFtZSd9XG4iOworCQkJCSRmb3VuZCA9IDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwdXNoIEByZWNvcmRzLCAkXzsKKwkJfQorCX0KKwl1bmxlc3MgKCAkZm91bmQgKSB7CisJCXB1c2ggQHJlY29yZHMsICIkJGhhc2hyZWZ7J215aXAnfVx0JCRoYXNocmVmeydob3N0bmFtZSd9XG4iOworCX0KKwlzeXNzZWVrKEZJTEUsIDAsIDApOworCXRydW5jYXRlKEZJTEUsIDApOworCXN5c3dyaXRlKEZJTEUsIGpvaW4oIiIsIEByZWNvcmRzKSk7CisJZmxvY2soRklMRSwgOCk7CisJY2xvc2UoRklMRSk7CisJZG5zbWFzcV9yZXNjYW5fY29uZmlncygpOworCXJldHVybigwKTsKK30KKworc3ViIGRuc21hc3FfcmVzY2FuX2NvbmZpZ3MgeworCSMgc2VuZCB0aGUgSFVQIHNpZ25hbCB0byBkbnNtYXNxCisJaWYgKCAtciAkZG5zbWFzcXBpZGZpbGUgKSB7CisJCW9wZW4oUElELCI8JGRuc21hc3FwaWRmaWxlIikgfHwgZGllICJDb3VsZCBub3Qgb3BlbiBQSUQgZmlsZSBcIiRkbnNtYXNxcGlkZmlsZVwiOiAkIVxuIjsKKwkJbXkgJHBpZCA9IDxQSUQ+OworCQljbG9zZShQSUQpOworCQljaG9tcCAkcGlkOworCQlpZiAoIGtpbGwoMCwgJHBpZCkgKSB7CisJCQlraWxsKDEsICRwaWQpOworCQl9IGVsc2UgeworCQkJZ290byBMT09LRk9SRE5TTUFTUTsKKwkJfQorCX0gZWxzZSB7CisJCUxPT0tGT1JETlNNQVNROgorCQlvcGVuZGlyKERJUiwiL3Byb2MiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW5kaXIgL3Byb2M6ICQhXG4iOworCQlteSBAZGlycyA9IGdyZXAoL15cZCskLywgcmVhZGRpcihESVIpKTsKKwkJY2xvc2VkaXIoRElSKTsKKwkJZm9yZWFjaCBteSAkcHJvY2VzcyAoQGRpcnMpIHsKKwkJCWlmICggb3BlbihGSUxFLCI8L3Byb2MvJHByb2Nlc3MvY21kbGluZSIpICkgeworCQkJCW15ICRjbWRsaW5lID0gPEZJTEU+OworCQkJCWNsb3NlKEZJTEUpOworCQkJCWlmICggKHNwbGl0KC9cMC8sJGNtZGxpbmUpKVswXSA9fiAvZG5zbWFzcS8gKSB7CisJCQkJCWtpbGwoMSwgJHByb2Nlc3MpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4oMCk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2xlYXNlLWFjY2Vzcy9SRUFETUUgYi9jb250cmliL2xlYXNlLWFjY2Vzcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmM2NmJkZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbGVhc2UtYWNjZXNzL1JFQURNRQpAQCAtMCwwICsxLDIwIEBACitIZWxsbywKKworRm9yIHNvbWUgc3BlY2lmaWMgYXBwbGljYXRpb24gSSBuZWVkZWQgdG8gZGVueSBhY2Nlc3MgdG8gYSBNQUMgYWRkcmVzcwordG8gYSBsZWFzZS4gRm9yIHRoaXMgcmVhc29uIEkgbW9kaWZpZWQgdGhlIGRoY3Atc2NyaXB0IGJlaGF2aW9yIGFuZCBpcworY2FsbGVkIHdpdGggYW4gZXh0cmEgcGFyYW1ldGVyICJhY2Nlc3MiIG9uY2UgYSBkaGNwIHJlcXVlc3Qgb3IgZGlzY292ZXIKK2lzIHJlY2VpdmVkLiBJbiB0aGF0IGNhc2UgaWYgdGhlIGV4aXQgY29kZSBvZiB0aGUgc2NyaXB0IGlzIHplcm8sCitkbnNtYXNxIGNvbnRpbnVlcyBub3JtYWxseSwgYW5kIGlmIG5vbi16ZXJvIHRoZSBwYWNrZXQgaXMgaWdub3JlZC4KKworVGhpcyB3YXMgbm90IGFkZGVkIGFzIGEgc2VjdXJpdHkgZmVhdHVyZSBidXQgYXMgYSBtZWFuIHRvIGhhbmRsZQorZGlmZmVyZW50bHkgc29tZSBhZGRyZXNzZXMuIEl0IGlzIGFsc28gcXVpdGUgaW50cnVzaXZlIHNpbmNlIGl0IHJlcXVpcmVzCitjaGFuZ2VzIGluIHNldmVyYWwgb3RoZXIgc3Vic3lzdGVtcy4KKworSXQgYXR0YWNoIHRoZSBwYXRjaCBpbiBjYXNlIHNvbWVvbmUgaXMgaW50ZXJlc3RlZC4KKworcmVnYXJkcywKK05pa29zCisKK25tYXZAZ2VubmV0c2EuY29tCisKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9sZWFzZS1hY2Nlc3MvbGVhc2UuYWNjZXNzLnBhdGNoIGIvY29udHJpYi9sZWFzZS1hY2Nlc3MvbGVhc2UuYWNjZXNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkNzZlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2xlYXNlLWFjY2Vzcy9sZWFzZS5hY2Nlc3MucGF0Y2gKQEAgLTAsMCArMSw1NzggQEAKK0luZGV4OiBzcmMvZG5zbWFzcS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3JjL2Ruc21hc3EuYwkocmV2aXNpb24gNjk2KQorKysrIHNyYy9kbnNtYXNxLmMJKHJldmlzaW9uIDgyMSkKK0BAIC01OSw3ICs1OSw2IEBACisgc3RhdGljIGludCBzZXRfZG5zX2xpc3RlbmVycyh0aW1lX3Qgbm93LCBmZF9zZXQgKnNldCwgaW50ICptYXhmZHApOworIHN0YXRpYyB2b2lkIGNoZWNrX2Ruc19saXN0ZW5lcnMoZmRfc2V0ICpzZXQsIHRpbWVfdCBub3cpOworIHN0YXRpYyB2b2lkIHNpZ19oYW5kbGVyKGludCBzaWcpOworLXN0YXRpYyB2b2lkIGFzeW5jX2V2ZW50KGludCBwaXBlLCB0aW1lX3Qgbm93KTsKKyBzdGF0aWMgdm9pZCBmYXRhbF9ldmVudChzdHJ1Y3QgZXZlbnRfZGVzYyAqZXYpOworIHN0YXRpYyB2b2lkIHBvbGxfcmVzb2x2KHZvaWQpOworIAorQEAgLTI3NSw3ICsyNzQsNyBAQAorICAgcGlwZXJlYWQgPSBwaXBlZmRbMF07CisgICBwaXBld3JpdGUgPSBwaXBlZmRbMV07CisgICAvKiBwcmltZSB0aGUgcGlwZSB0byBsb2FkIHN0dWZmIGZpcnN0IHRpbWUuICovCistICBzZW5kX2V2ZW50KHBpcGV3cml0ZSwgRVZFTlRfUkVMT0FELCAwKTsgCisrICBzZW5kX2V2ZW50KHBpcGV3cml0ZSwgRVZFTlRfUkVMT0FELCAwLCAwKTsgCisgCisgICBlcnJfcGlwZVsxXSA9IC0xOworICAgCitAQCAtMzQwLDcgKzMzOSw3IEBACisgCSAgICB9CisgCSAgZWxzZSBpZiAoZ2V0dWlkKCkgPT0gMCkKKyAJICAgIHsKKy0JICAgICAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfUElERklMRSwgZXJybm8pOworKwkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9QSURGSUxFLCBlcnJubywgMCk7CisgCSAgICAgIF9leGl0KDApOworIAkgICAgfQorIAl9CitAQCAtMzcyLDcgKzM3MSw3IEBACisgCSAgKHNldGdyb3VwcygwLCAmZHVtbXkpID09IC0xIHx8CisgCSAgIHNldGdpZChncC0+Z3JfZ2lkKSA9PSAtMSkpCisgCXsKKy0JICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9HUk9VUF9FUlIsIGVycm5vKTsKKysJICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9HUk9VUF9FUlIsIGVycm5vLCAwKTsKKyAJICBfZXhpdCgwKTsKKyAJfQorICAgCitAQCAtNDE1LDE0ICs0MTQsMTQgQEAKKyAKKyAJICBpZiAoYmFkX2NhcGFiaWxpdGllcyAhPSAwKQorIAkgICAgeworLQkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9DQVBfRVJSLCBiYWRfY2FwYWJpbGl0aWVzKTsKKysJICAgICAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfQ0FQX0VSUiwgYmFkX2NhcGFiaWxpdGllcywgMCk7CisgCSAgICAgIF9leGl0KDApOworIAkgICAgfQorIAkgIAorIAkgIC8qIGZpbmFsbHkgZHJvcCByb290ICovCisgCSAgaWYgKHNldHVpZChlbnRfcHctPnB3X3VpZCkgPT0gLTEpCisgCSAgICB7CistCSAgICAgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX1VTRVJfRVJSLCBlcnJubyk7CisrCSAgICAgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX1VTRVJfRVJSLCBlcnJubywgMCk7CisgCSAgICAgIF9leGl0KDApOworIAkgICAgfSAgICAgCisgCitAQCAtNDM0LDcgKzQzMyw3IEBACisgCSAgLyogbG9zZSB0aGUgc2V0dWlkIGFuZCBzZXRnaWQgY2FwYmlsaXRpZXMgKi8KKyAJICBpZiAoY2Fwc2V0KGhkciwgZGF0YSkgPT0gLTEpCisgCSAgICB7CistCSAgICAgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX0NBUF9FUlIsIGVycm5vKTsKKysJICAgICAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfQ0FQX0VSUiwgZXJybm8sIDApOworIAkgICAgICBfZXhpdCgwKTsKKyAJICAgIH0KKyAjZW5kaWYKK0BAIC02NDcsNyArNjQ2LDcgQEAKKyAJfQorICAgICAgIAorICAgICAgIGlmIChGRF9JU1NFVChwaXBlcmVhZCwgJnJzZXQpKQorLQlhc3luY19ldmVudChwaXBlcmVhZCwgbm93KTsKKysJYXN5bmNfZXZlbnQocGlwZXJlYWQsIG5vdywgTlVMTCwgMCk7CisgICAgICAgCisgI2lmZGVmIEhBVkVfTElOVVhfTkVUV09SSworICAgICAgIGlmIChGRF9JU1NFVChkYWVtb24tPm5ldGxpbmtmZCwgJnJzZXQpKQorQEAgLTY3NCw3ICs2NzMsNyBAQAorICNlbmRpZiAgICAgIAorIAorICAgICAgIGlmIChkYWVtb24tPmRoY3AgJiYgRkRfSVNTRVQoZGFlbW9uLT5kaGNwZmQsICZyc2V0KSkKKy0JZGhjcF9wYWNrZXQobm93KTsKKysJZGhjcF9wYWNrZXQocGlwZXJlYWQsIG5vdyk7CisgCisgI2lmbmRlZiBOT19GT1JLCisgICAgICAgaWYgKGRhZW1vbi0+aGVscGVyZmQgIT0gLTEgJiYgRkRfSVNTRVQoZGFlbW9uLT5oZWxwZXJmZCwgJndzZXQpKQorQEAgLTcxOSwxNyArNzE4LDE4IEBACisgICAgICAgZWxzZQorIAlyZXR1cm47CisgCistICAgICAgc2VuZF9ldmVudChwaXBld3JpdGUsIGV2ZW50LCAwKTsgCisrICAgICAgc2VuZF9ldmVudChwaXBld3JpdGUsIGV2ZW50LCAwLCAwKTsgCisgICAgICAgZXJybm8gPSBlcnJzYXZlOworICAgICB9CisgfQorIAorLXZvaWQgc2VuZF9ldmVudChpbnQgZmQsIGludCBldmVudCwgaW50IGRhdGEpCisrdm9pZCBzZW5kX2V2ZW50KGludCBmZCwgaW50IGV2ZW50LCBpbnQgZGF0YSwgaW50IHByaXYpCisgeworICAgc3RydWN0IGV2ZW50X2Rlc2MgZXY7CisgICAKKyAgIGV2LmV2ZW50ID0gZXZlbnQ7CisgICBldi5kYXRhID0gZGF0YTsKKysgIGV2LnByaXYgPSBwcml2OworICAgCisgICAvKiBlcnJvciBwaXBlLCBkZWJ1ZyBtb2RlLiAqLworICAgaWYgKGZkID09IC0xKQorQEAgLTc3MSwxNCArNzcxLDE3IEBACisgICAgICAgZGllKF8oImNhbm5vdCBvcGVuICVzOiAlcyIpLCBkYWVtb24tPmxvZ19maWxlID8gZGFlbW9uLT5sb2dfZmlsZSA6ICJsb2ciLCBFQ19GSUxFKTsKKyAgICAgfQorIH0JCistICAgICAgCistc3RhdGljIHZvaWQgYXN5bmNfZXZlbnQoaW50IHBpcGUsIHRpbWVfdCBub3cpCisrCisrLyogcmV0dXJucyB0aGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBldmVudAorKyAqLworK2ludCBhc3luY19ldmVudChpbnQgcGlwZSwgdGltZV90IG5vdywgc3RydWN0IGV2ZW50X2Rlc2MqIGV2ZW50LCB1bnNpZ25lZCBpbnQgc2VjcykKKyB7CisgICBwaWRfdCBwOworICAgc3RydWN0IGV2ZW50X2Rlc2MgZXY7CisgICBpbnQgaTsKKyAKKy0gIGlmIChyZWFkX3dyaXRlKHBpcGUsICh1bnNpZ25lZCBjaGFyICopJmV2LCBzaXplb2YoZXYpLCAxKSkKKysgIGlmIChyZWFkX3RpbWVvdXQocGlwZSwgKHVuc2lnbmVkIGNoYXIgKikmZXYsIHNpemVvZihldiksIG5vdywgc2VjcykgPiAwKSAKKysgICAgeworICAgICBzd2l0Y2ggKGV2LmV2ZW50KQorICAgICAgIHsKKyAgICAgICBjYXNlIEVWRU5UX1JFTE9BRDoKK0BAIC04NzIsNiArODc1LDE0IEBACisgCWZsdXNoX2xvZygpOworIAlleGl0KEVDX0dPT0QpOworICAgICAgIH0KKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gLTE7IC8qIHRpbWVvdXQgKi8KKysKKysgIGlmIChldmVudCkKKysgICAgbWVtY3B5KCBldmVudCwgJmV2LCBzaXplb2YoZXYpKTsKKysgICAgCisrICByZXR1cm4gMDsKKyB9CisgCisgc3RhdGljIHZvaWQgcG9sbF9yZXNvbHYoKQorSW5kZXg6IHNyYy9jb25maWcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9jb25maWcuaAkocmV2aXNpb24gNjk2KQorKysrIHNyYy9jb25maWcuaAkocmV2aXNpb24gODIxKQorQEAgLTUxLDYgKzUxLDggQEAKKyAjZGVmaW5lIFRGVFBfTUFYX0NPTk5FQ1RJT05TIDUwIC8qIG1heCBzaW11bHRhbmVvdXMgY29ubmVjdGlvbnMgKi8KKyAjZGVmaW5lIExPR19NQVggNSAvKiBsb2ctcXVldWUgbGVuZ3RoICovCisgI2RlZmluZSBSQU5ERklMRSAiL2Rldi91cmFuZG9tIgorKyNkZWZpbmUgU0NSSVBUX1RJTUVPVVQgNgorKyNkZWZpbmUgTEVBU0VfQ0hFQ0tfVElNRU9VVCAxMAorIAorIC8qIERCVVMgaW50ZXJmYWNlIHNwZWNpZmljcyAqLworICNkZWZpbmUgRE5TTUFTUV9TRVJWSUNFICJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIgorSW5kZXg6IHNyYy9kbnNtYXNxLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvZG5zbWFzcS5oCShyZXZpc2lvbiA2OTYpCisrKysgc3JjL2Ruc21hc3EuaAkocmV2aXNpb24gODIxKQorQEAgLTExNiw2ICsxMTYsNyBAQAorIC8qIEFzeW5jIGV2ZW50IHF1ZXVlICovCisgc3RydWN0IGV2ZW50X2Rlc2MgeworICAgaW50IGV2ZW50LCBkYXRhOworKyAgdW5zaWduZWQgaW50IHByaXY7CisgfTsKKyAKKyAjZGVmaW5lIEVWRU5UX1JFTE9BRCAgICAxCitAQCAtMzkwLDYgKzM5MSw3IEBACisgI2RlZmluZSBBQ1RJT05fT0xEX0hPU1ROQU1FICAyCisgI2RlZmluZSBBQ1RJT05fT0xEICAgICAgICAgICAzCisgI2RlZmluZSBBQ1RJT05fQUREICAgICAgICAgICA0CisrI2RlZmluZSBBQ1RJT05fQUNDRVNTICAgICAgICA1CisgCisgI2RlZmluZSBESENQX0NIQUREUl9NQVggMTYKKyAKK0BAIC03MDksNiArNzExLDcgQEAKKyBjaGFyICpwcmludF9tYWMoY2hhciAqYnVmZiwgdW5zaWduZWQgY2hhciAqbWFjLCBpbnQgbGVuKTsKKyB2b2lkIGJ1bXBfbWF4ZmQoaW50IGZkLCBpbnQgKm1heCk7CisgaW50IHJlYWRfd3JpdGUoaW50IGZkLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBzaXplLCBpbnQgcncpOworK2ludCByZWFkX3RpbWVvdXQoaW50IGZkLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBzaXplLCB0aW1lX3Qgbm93LCBpbnQgc2Vjcyk7CisgCisgLyogbG9nLmMgKi8KKyB2b2lkIGRpZShjaGFyICptZXNzYWdlLCBjaGFyICphcmcxLCBpbnQgZXhpdF9jb2RlKTsKK0BAIC03NDgsNyArNzUxLDcgQEAKKyAKKyAvKiBkaGNwLmMgKi8KKyB2b2lkIGRoY3BfaW5pdCh2b2lkKTsKKy12b2lkIGRoY3BfcGFja2V0KHRpbWVfdCBub3cpOworK3ZvaWQgZGhjcF9wYWNrZXQoaW50IHBpcGVyZWFkLCB0aW1lX3Qgbm93KTsKKyAKKyBzdHJ1Y3QgZGhjcF9jb250ZXh0ICphZGRyZXNzX2F2YWlsYWJsZShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCAKKyAJCQkJICAgICAgIHN0cnVjdCBpbl9hZGRyIGFkZHIsCitAQCAtNzkyLDE0ICs3OTUsMTYgQEAKKyB2b2lkIHJlcnVuX3NjcmlwdHModm9pZCk7CisgCisgLyogcmZjMjEzMS5jICovCistc2l6ZV90IGRoY3BfcmVwbHkoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgY2hhciAqaWZhY2VfbmFtZSwgaW50IGludF9pbmRleCwKKytzaXplX3QgZGhjcF9yZXBseShpbnQgcGlwZWZkLCBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBjaGFyICppZmFjZV9uYW1lLCBpbnQgaW50X2luZGV4LAorIAkJICBzaXplX3Qgc3osIHRpbWVfdCBub3csIGludCB1bmljYXN0X2Rlc3QsIGludCAqaXNfaW5mb3JtKTsKKyAKKyAvKiBkbnNtYXNxLmMgKi8KKyBpbnQgbWFrZV9pY21wX3NvY2sodm9pZCk7CisgaW50IGljbXBfcGluZyhzdHJ1Y3QgaW5fYWRkciBhZGRyKTsKKy12b2lkIHNlbmRfZXZlbnQoaW50IGZkLCBpbnQgZXZlbnQsIGludCBkYXRhKTsKKyt2b2lkIHNlbmRfZXZlbnQoaW50IGZkLCBpbnQgZXZlbnQsIGludCBkYXRhLCBpbnQgcHJpdik7Cisgdm9pZCBjbGVhcl9jYWNoZV9hbmRfcmVsb2FkKHRpbWVfdCBub3cpOworK2ludCB3YWl0X2Zvcl9jaGlsZChpbnQgcGlwZSk7CisraW50IGFzeW5jX2V2ZW50KGludCBwaXBlLCB0aW1lX3Qgbm93LCBzdHJ1Y3QgZXZlbnRfZGVzYyosIHVuc2lnbmVkIGludCB0aW1lb3V0KTsKKyAKKyAvKiBpc2MuYyAqLworICNpZmRlZiBIQVZFX0lTQ19SRUFERVIKK0BAIC04MzIsOSArODM3LDkgQEAKKyAvKiBoZWxwZXIuYyAqLworICNpZm5kZWYgTk9fRk9SSworIGludCBjcmVhdGVfaGVscGVyKGludCBldmVudF9mZCwgaW50IGVycl9mZCwgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIGxvbmcgbWF4X2ZkKTsKKy12b2lkIGhlbHBlcl93cml0ZSh2b2lkKTsKKytpbnQgaGVscGVyX3dyaXRlKHZvaWQpOworIHZvaWQgcXVldWVfc2NyaXB0KGludCBhY3Rpb24sIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgCistCQkgIGNoYXIgKmhvc3RuYW1lLCB0aW1lX3Qgbm93KTsKKysJCSAgY2hhciAqaG9zdG5hbWUsIHRpbWVfdCBub3csIHVuc2lnbmVkIGludCB1aWQpOworIGludCBoZWxwZXJfYnVmX2VtcHR5KHZvaWQpOworICNlbmRpZgorIAorSW5kZXg6IHNyYy91dGlsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvdXRpbC5jCShyZXZpc2lvbiA2OTYpCisrKysgc3JjL3V0aWwuYwkocmV2aXNpb24gODIxKQorQEAgLTQ0NCwzICs0NDQsMzggQEAKKyAgIHJldHVybiAxOworIH0KKyAKKytpbnQgcmVhZF90aW1lb3V0KGludCBmZCwgdW5zaWduZWQgY2hhciAqcGFja2V0LCBpbnQgc2l6ZSwgdGltZV90IG5vdywgaW50IHNlY3MpCisreworKyAgc3NpemVfdCBuLCBkb25lOworKyAgdGltZV90IGV4cGlyZTsKKysgIAorKyAgZXhwaXJlID0gbm93ICsgc2VjczsKKysgIAorKyAgZm9yIChkb25lID0gMDsgZG9uZSA8IHNpemU7IGRvbmUgKz0gbikKKysgICAgeworKyAgICByZXRyeToKKysgICAgICBpZiAoc2VjcyA+IDApIGFsYXJtKHNlY3MpOworKyAgICAgIG4gPSByZWFkKGZkLCAmcGFja2V0W2RvbmVdLCAoc2l6ZV90KShzaXplIC0gZG9uZSkpOworKworKyAgICAgIGlmIChuID09IDApCisrICAgICAgICByZXR1cm4gMDsKKysgICAgICBlbHNlIGlmIChuID09IC0xKQorKyAgICAgICAgeworKyAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKKysgICAgICAgICAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oInJlYWQgdGltZWQgb3V0IChlcnJubyAlZCkiKSwgZXJybm8pOworKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICB9CisrCisrICAgICAgICAgIGlmIChyZXRyeV9zZW5kKCkgfHwgZXJybm8gPT0gRU5PTUVNIHx8IGVycm5vID09IEVOT0JVRlMgfHwgZXJybm8gPT0gRUFHQUlOKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGlmIChzZWNzID09IDAgfHwgKHNlY3MgPiAwICYmIGRuc21hc3FfdGltZSgpIDwgZXhwaXJlKSkKKysgICAgICAgICAgICAgICAgZ290byByZXRyeTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygiZXJyb3IgaW4gcmVhZCAodGltZW91dCAlZCwgZXJybm8gJWQpIiksIHNlY3MsIGVycm5vKTsKKysgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgIH0KKysgIHJldHVybiAxOworK30KKysKK0luZGV4OiBzcmMvZGhjcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3JjL2RoY3AuYwkocmV2aXNpb24gNjk2KQorKysrIHNyYy9kaGNwLmMJKHJldmlzaW9uIDgyMSkKK0BAIC0xMDMsNyArMTAzLDcgQEAKKyAgIGRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2Jhc2UgPSBzYWZlX21hbGxvYyhkYWVtb24tPmRoY3BfcGFja2V0Lmlvdl9sZW4pOworIH0KKyAgIAorLXZvaWQgZGhjcF9wYWNrZXQodGltZV90IG5vdykKKyt2b2lkIGRoY3BfcGFja2V0KGludCBwaXBlcmVhZCwgdGltZV90IG5vdykKKyB7CisgICBzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3M7CisgICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0OworQEAgLTIzOSw3ICsyMzksOCBAQAorICAgaWYgKCFpZmFjZV9lbnVtZXJhdGUoJnBhcm0sIGNvbXBsZXRlX2NvbnRleHQsIE5VTEwpKQorICAgICByZXR1cm47CisgICBsZWFzZV9wcnVuZShOVUxMLCBub3cpOyAvKiBsb3NlIGFueSBleHBpcmVkIGxlYXNlcyAqLworLSAgaW92Lmlvdl9sZW4gPSBkaGNwX3JlcGx5KHBhcm0uY3VycmVudCwgaWZyLmlmcl9uYW1lLCBpZmFjZV9pbmRleCwgKHNpemVfdClzeiwgCisrCisrICBpb3YuaW92X2xlbiA9IGRoY3BfcmVwbHkocGlwZXJlYWQsIHBhcm0uY3VycmVudCwgaWZyLmlmcl9uYW1lLCBpZmFjZV9pbmRleCwgKHNpemVfdClzeiwgCisgCQkJICAgbm93LCB1bmljYXN0X2Rlc3QsICZpc19pbmZvcm0pOworICAgbGVhc2VfdXBkYXRlX2ZpbGUobm93KTsKKyAgIGxlYXNlX3VwZGF0ZV9kbnMoKTsKK0luZGV4OiBzcmMvaGVscGVyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvaGVscGVyLmMJKHJldmlzaW9uIDY5NikKKysrKyBzcmMvaGVscGVyLmMJKHJldmlzaW9uIDgyMSkKK0BAIC00NSw2ICs0NSw3IEBACisgI2VuZGlmCisgICB1bnNpZ25lZCBjaGFyIGh3YWRkcltESENQX0NIQUREUl9NQVhdOworICAgY2hhciBpbnRlcmZhY2VbSUZfTkFNRVNJWkVdOworKyAgdW5zaWduZWQgaW50IHVpZDsKKyB9OworIAorIHN0YXRpYyBzdHJ1Y3Qgc2NyaXB0X2RhdGEgKmJ1ZiA9IE5VTEw7CitAQCAtNjAsNyArNjEsNyBAQAorICAgICAgdGhlbiBmb3JrIG91ciBwcm9jZXNzLiAqLworICAgaWYgKHBpcGUocGlwZWZkKSA9PSAtMSB8fCAhZml4X2ZkKHBpcGVmZFsxXSkgfHwgKHBpZCA9IGZvcmsoKSkgPT0gLTEpCisgICAgIHsKKy0gICAgICBzZW5kX2V2ZW50KGVycl9mZCwgRVZFTlRfUElQRV9FUlIsIGVycm5vKTsKKysgICAgICBzZW5kX2V2ZW50KGVycl9mZCwgRVZFTlRfUElQRV9FUlIsIGVycm5vLCAwKTsKKyAgICAgICBfZXhpdCgwKTsKKyAgICAgfQorIAorQEAgLTg3LDEzICs4OCwxMyBAQAorIAl7CisgCSAgaWYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT19GT1JLKQorIAkgICAgLyogc2VuZCBlcnJvciB0byBkYWVtb24gcHJvY2VzcyBpZiBuby1mb3JrICovCistCSAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9IVVNFUl9FUlIsIGVycm5vKTsKKysJICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0hVU0VSX0VSUiwgZXJybm8sIDApOworIAkgIGVsc2UKKyAJICAgIHsKKyAJICAgICAgLyoga2lsbCBkYWVtb24gKi8KKy0JICAgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfRElFLCAwKTsKKysJICAgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfRElFLCAwLCAwKTsKKyAJICAgICAgLyogcmV0dXJuIGVycm9yICovCistCSAgICAgIHNlbmRfZXZlbnQoZXJyX2ZkLCBFVkVOVF9IVVNFUl9FUlIsIGVycm5vKTs7CisrCSAgICAgIHNlbmRfZXZlbnQoZXJyX2ZkLCBFVkVOVF9IVVNFUl9FUlIsIGVycm5vLCAwKTsKKyAJICAgIH0KKyAJICBfZXhpdCgwKTsKKyAJfQorQEAgLTEyMiw2ICsxMjMsOCBAQAorIAlhY3Rpb25fc3RyID0gImRlbCI7CisgICAgICAgZWxzZSBpZiAoZGF0YS5hY3Rpb24gPT0gQUNUSU9OX0FERCkKKyAJYWN0aW9uX3N0ciA9ICJhZGQiOworKyAgICAgIGVsc2UgaWYgKGRhdGEuYWN0aW9uID09IEFDVElPTl9BQ0NFU1MpCisrCWFjdGlvbl9zdHIgPSAiYWNjZXNzIjsKKyAgICAgICBlbHNlIGlmIChkYXRhLmFjdGlvbiA9PSBBQ1RJT05fT0xEIHx8IGRhdGEuYWN0aW9uID09IEFDVElPTl9PTERfSE9TVE5BTUUpCisgCWFjdGlvbl9zdHIgPSAib2xkIjsKKyAgICAgICBlbHNlCitAQCAtMTc4LDkgKzE4MSwxMSBAQAorIAkJeworIAkJICAvKiBPbiBlcnJvciBzZW5kIGV2ZW50IGJhY2sgdG8gbWFpbiBwcm9jZXNzIGZvciBsb2dnaW5nICovCisgCQkgIGlmIChXSUZTSUdOQUxFRChzdGF0dXMpKQorLQkJICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0tJTExFRCwgV1RFUk1TSUcoc3RhdHVzKSk7CistCQkgIGVsc2UgaWYgKFdJRkVYSVRFRChzdGF0dXMpICYmIFdFWElUU1RBVFVTKHN0YXR1cykgIT0gMCkKKy0JCSAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9FWElURUQsIFdFWElUU1RBVFVTKHN0YXR1cykpOworKwkJICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0tJTExFRCwgV1RFUk1TSUcoc3RhdHVzKSwgZGF0YS51aWQpOworKwkJICBlbHNlIGlmIChXSUZFWElURUQoc3RhdHVzKSkKKysJCSAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9FWElURUQsIFdFWElUU1RBVFVTKHN0YXR1cyksIGRhdGEudWlkKTsKKysgICAgICAgICAgICAgICAgICBlbHNlCisrCQkgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfRVhJVEVELCAtMSwgZGF0YS51aWQpOworIAkJICBicmVhazsKKyAJCX0KKyAJICAgICAgCitAQCAtMjYzLDcgKzI2OCw3IEBACisgCSAgZXJyID0gZXJybm87CisgCX0KKyAgICAgICAvKiBmYWlsZWQsIHNlbmQgZXZlbnQgc28gdGhlIG1haW4gcHJvY2VzcyBsb2dzIHRoZSBwcm9ibGVtICovCistICAgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfRVhFQ19FUlIsIGVycik7CisrICAgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfRVhFQ19FUlIsIGVyciwgZGF0YS51aWQpOworICAgICAgIF9leGl0KDApOyAKKyAgICAgfQorIH0KK0BAIC0yOTUsNyArMzAwLDcgQEAKKyB9CisgIAorIC8qIHBhY2sgdXAgbGVhc2UgZGF0YSBpbnRvIGEgYnVmZmVyICovICAgIAorLXZvaWQgcXVldWVfc2NyaXB0KGludCBhY3Rpb24sIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgY2hhciAqaG9zdG5hbWUsIHRpbWVfdCBub3cpCisrdm9pZCBxdWV1ZV9zY3JpcHQoaW50IGFjdGlvbiwgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBjaGFyICpob3N0bmFtZSwgdGltZV90IG5vdywgdW5zaWduZWQgaW50IHVpZCkKKyB7CisgICB1bnNpZ25lZCBjaGFyICpwOworICAgc2l6ZV90IHNpemU7CitAQCAtMzMyLDYgKzMzNyw3IEBACisgICAgICAgYnVmX3NpemUgPSBzaXplOworICAgICB9CisgCisrICBidWYtPnVpZCA9IHVpZDsKKyAgIGJ1Zi0+YWN0aW9uID0gYWN0aW9uOworICAgYnVmLT5od2FkZHJfbGVuID0gbGVhc2UtPmh3YWRkcl9sZW47CisgICBidWYtPmh3YWRkcl90eXBlID0gbGVhc2UtPmh3YWRkcl90eXBlOworQEAgLTM5MywxMiArMzk5LDE1IEBACisgICByZXR1cm4gYnl0ZXNfaW5fYnVmID09IDA7CisgfQorIAorLXZvaWQgaGVscGVyX3dyaXRlKHZvaWQpCisrLyogcmV0dXJucyAtMSBpZiB3cml0ZSBmYWlsZWQgZm9yIGEgcmVhc29uLCAxIGlmIG5vIGRhdGEgZXhpc3QKKysgKiBhbmQgMCBpZiBldmVyeXRoaW5nIHdhcyBvay4KKysgKi8KKytpbnQgaGVscGVyX3dyaXRlKHZvaWQpCisgeworICAgc3NpemVfdCByYzsKKyAKKyAgIGlmIChieXRlc19pbl9idWYgPT0gMCkKKy0gICAgcmV0dXJuOworKyAgICByZXR1cm4gMTsKKyAgIAorICAgaWYgKChyYyA9IHdyaXRlKGRhZW1vbi0+aGVscGVyZmQsIGJ1ZiwgYnl0ZXNfaW5fYnVmKSkgIT0gLTEpCisgICAgIHsKK0BAIC00MDksOSArNDE4LDExIEBACisgICBlbHNlCisgICAgIHsKKyAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKQorLQlyZXR1cm47CisrCXJldHVybiAtMTsKKyAgICAgICBieXRlc19pbl9idWYgPSAwOworICAgICB9CisrICAgIAorKyAgcmV0dXJuIDA7CisgfQorIAorICNlbmRpZgorSW5kZXg6IHNyYy9yZmMyMTMxLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvcmZjMjEzMS5jCShyZXZpc2lvbiA2OTYpCisrKysgc3JjL3JmYzIxMzEuYwkocmV2aXNpb24gODIxKQorQEAgLTEwMCw4ICsxMDAsNDkgQEAKKyAJCQkJICAgICAgaW50IGNsaWRfbGVuLCB1bnNpZ25lZCBjaGFyICpjbGlkLCBpbnQgKmxlbl9vdXQpOworIHN0YXRpYyB2b2lkIG1hdGNoX3ZlbmRvcl9vcHRzKHVuc2lnbmVkIGNoYXIgKm9wdCwgc3RydWN0IGRoY3Bfb3B0ICpkb3B0KTsgCisgCisrc3RhdGljIGludCBjaGVja19hY2Nlc3Nfc2NyaXB0KCBpbnQgcGlwZXJlYWQsIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCB0aW1lX3Qgbm93KQorK3sKKysjaWZuZGVmIE5PX0ZPUksKKyt1bnNpZ25lZCBpbnQgdWlkOworK3N0cnVjdCBldmVudF9kZXNjIGV2OworK2ludCByZXQ7Cisrc3RydWN0IGRoY3BfbGVhc2UgX2xlYXNlOworKworKyAgaWYgKGRhZW1vbi0+bGVhc2VfY2hhbmdlX2NvbW1hbmQgPT0gTlVMTCkgcmV0dXJuIDA7IC8qIG9rICovCisrCisrICBpZiAoIWxlYXNlKSB7IC8qIGlmIGhvc3QgaGFzIG5vdCBiZWVuIHNlZW4gYmVmb3JlIGxlYXNlIGlzIE5VTEwgKi8KKysgICAgICBtZW1zZXQoJl9sZWFzZSwgMCwgc2l6ZW9mKF9sZWFzZSkpOworKyAgICAgIGxlYXNlID0gJl9sZWFzZTsKKysgICAgICBsZWFzZV9zZXRfaHdhZGRyKGxlYXNlLCBtZXNzLT5jaGFkZHIsIE5VTEwsIG1lc3MtPmhsZW4sIG1lc3MtPmh0eXBlLCAwKTsKKysgIH0KKysKKysgIHVpZCA9IHJhbmQxNigpOworKyAgcXVldWVfc2NyaXB0KEFDVElPTl9BQ0NFU1MsIGxlYXNlLCBOVUxMLCBub3csIHVpZCk7CisrCisrICAvKiBzZW5kIGFsbCBkYXRhIHRvIGhlbHBlciBwcm9jZXNzICovCisrICBkbyAKKysgICAgeworKyAgICAgIGhlbHBlcl93cml0ZSgpOworKyAgICB9IHdoaWxlIChoZWxwZXJfYnVmX2VtcHR5KCkgPT0gMCk7CisrCisrICAvKiB3YWl0IGZvciBvdXIgZXZlbnQgKi8KKysgIHJldCA9IDA7CisrICBkbyAKKysgICAgeworKyAgICAgIHJldCA9IGFzeW5jX2V2ZW50KCBwaXBlcmVhZCwgbm93LCAmZXYsIFNDUklQVF9USU1FT1VUKTsKKysgICAgfQorKyAgd2hpbGUoZXYucHJpdiAhPSB1aWQgJiYgcmV0ID49IDApOworKworKyAgaWYgKHJldCA8IDAgfHwgZXYuZGF0YSAhPSAwKSAvKiB0aW1lb3V0IG9yIGVycm9yICovCisrICAgIHsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysKKysjZW5kaWYKKysgIHJldHVybiAwOyAvKiBvayAqLworK30KKyAJICAKKy1zaXplX3QgZGhjcF9yZXBseShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBjaGFyICppZmFjZV9uYW1lLCBpbnQgaW50X2luZGV4LAorK3NpemVfdCBkaGNwX3JlcGx5KGludCBwaXBlcmVhZCwgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgY2hhciAqaWZhY2VfbmFtZSwgaW50IGludF9pbmRleCwKKyAJCSAgc2l6ZV90IHN6LCB0aW1lX3Qgbm93LCBpbnQgdW5pY2FzdF9kZXN0LCBpbnQgKmlzX2luZm9ybSkKKyB7CisgICB1bnNpZ25lZCBjaGFyICpvcHQsICpjbGlkID0gTlVMTDsKK0BAIC0yNTIsNyArMjkzLDcgQEAKKyAJbWFjLT5uZXRpZC5uZXh0ID0gbmV0aWQ7CisgCW5ldGlkID0gJm1hYy0+bmV0aWQ7CisgICAgICAgfQorLSAgCisrCisgICAvKiBEZXRlcm1pbmUgbmV0d29yayBmb3IgdGhpcyBwYWNrZXQuIE91ciBjYWxsZXIgd2lsbCBoYXZlIGFscmVhZHkgbGlua2VkIGFsbCB0aGUgCisgICAgICBjb250ZXh0cyB3aGljaCBtYXRjaCB0aGUgYWRkcmVzc2VzIG9mIHRoZSByZWNlaXZpbmcgaW50ZXJmYWNlIGJ1dCBpZiB0aGUgCisgICAgICBtYWNoaW5lIGhhcyBhbiBhZGRyZXNzIGFscmVhZHksIG9yIGNhbWUgdmlhIGEgcmVsYXksIG9yIHdlIGhhdmUgYSBzdWJuZXQgc2VsZWN0b3IsIAorQEAgLTMyOSw3ICszNzAsNyBAQAorIAkgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJBdmFpbGFibGUgREhDUCByYW5nZTogJXMgLS0gJXMiKSwgZGFlbW9uLT5uYW1lYnVmZiwgaW5ldF9udG9hKGNvbnRleHRfdG1wLT5lbmQpKTsKKyAJfQorICAgICB9CistCisrICAgIAorICAgbWVzcy0+b3AgPSBCT09UUkVQTFk7CisgICAKKyAgIGNvbmZpZyA9IGZpbmRfY29uZmlnKGRhZW1vbi0+ZGhjcF9jb25mLCBjb250ZXh0LCBjbGlkLCBjbGlkX2xlbiwgCitAQCAtNDE4LDcgKzQ1OSw3IEBACisgCSAgICAgIGVsc2UKKyAJCW1lc3MtPnlpYWRkciA9IGxlYXNlLT5hZGRyOworIAkgICAgfQorLQkgIAorKworIAkgIGlmICghbWVzc2FnZSAmJiAKKyAJICAgICAgIWxlYXNlICYmIAorIAkgICAgICAoIShsZWFzZSA9IGxlYXNlX2FsbG9jYXRlKG1lc3MtPnlpYWRkcikpKSkKK0BAIC02NDEsNyArNjgyLDE0IEBACisgICAgICAgbWVtY3B5KHJlcV9vcHRpb25zLCBvcHRpb25fcHRyKG9wdCwgMCksIG9wdGlvbl9sZW4ob3B0KSk7CisgICAgICAgcmVxX29wdGlvbnNbb3B0aW9uX2xlbihvcHQpXSA9IE9QVElPTl9FTkQ7CisgICAgIH0KKy0gIAorKworKyAgaWYgKG1lc3NfdHlwZSA9PSBESENQUkVRVUVTVCB8fCBtZXNzX3R5cGUgPT0gREhDUERJU0NPVkVSKQorKyAgICBpZiAoY2hlY2tfYWNjZXNzX3NjcmlwdChwaXBlcmVhZCwgbGVhc2UsIG1lc3MsIG5vdykgPCAwKQorKyAgICAgIHsKKysgICAgICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygiSWdub3JpbmcgY2xpZW50IGR1ZSB0byBhY2Nlc3Mgc2NyaXB0IikpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgICAgfQorKworICAgc3dpdGNoIChtZXNzX3R5cGUpCisgICAgIHsKKyAgICAgY2FzZSBESENQREVDTElORToKK0luZGV4OiBzcmMvbG9nLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvbG9nLmMJKHJldmlzaW9uIDY5NikKKysrKyBzcmMvbG9nLmMJKHJldmlzaW9uIDgyMSkKK0BAIC03Myw3ICs3Myw3IEBACisgCisgICBpZiAoIWxvZ19yZW9wZW4oZGFlbW9uLT5sb2dfZmlsZSkpCisgICAgIHsKKy0gICAgICBzZW5kX2V2ZW50KGVycmZkLCBFVkVOVF9MT0dfRVJSLCBlcnJubyk7CisrICAgICAgc2VuZF9ldmVudChlcnJmZCwgRVZFTlRfTE9HX0VSUiwgZXJybm8sIDApOworICAgICAgIF9leGl0KDApOworICAgICB9CisgCitJbmRleDogc3JjL2xlYXNlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvbGVhc2UuYwkocmV2aXNpb24gNjk2KQorKysrIHNyYy9sZWFzZS5jCShyZXZpc2lvbiA4MjEpCitAQCAtNTExLDcgKzUxMSw3IEBACisgICAgICAgaWYgKGxlYXNlLT5vbGRfaG9zdG5hbWUpCisgCXsKKyAjaWZuZGVmIE5PX0ZPUksKKy0JICBxdWV1ZV9zY3JpcHQoQUNUSU9OX09MRF9IT1NUTkFNRSwgbGVhc2UsIGxlYXNlLT5vbGRfaG9zdG5hbWUsIG5vdyk7CisrCSAgcXVldWVfc2NyaXB0KEFDVElPTl9PTERfSE9TVE5BTUUsIGxlYXNlLCBsZWFzZS0+b2xkX2hvc3RuYW1lLCBub3csIDApOworICNlbmRpZgorIAkgIGZyZWUobGVhc2UtPm9sZF9ob3N0bmFtZSk7CisgCSAgbGVhc2UtPm9sZF9ob3N0bmFtZSA9IE5VTEw7CitAQCAtNTIwLDcgKzUyMCw3IEBACisgICAgICAgZWxzZSAKKyAJeworICNpZm5kZWYgTk9fRk9SSworLQkgIHF1ZXVlX3NjcmlwdChBQ1RJT05fREVMLCBsZWFzZSwgbGVhc2UtPmhvc3RuYW1lLCBub3cpOworKwkgIHF1ZXVlX3NjcmlwdChBQ1RJT05fREVMLCBsZWFzZSwgbGVhc2UtPmhvc3RuYW1lLCBub3csIDApOworICNlbmRpZgorIAkgIG9sZF9sZWFzZXMgPSBsZWFzZS0+bmV4dDsKKyAJICAKK0BAIC01NDAsNyArNTQwLDcgQEAKKyAgICAgaWYgKGxlYXNlLT5vbGRfaG9zdG5hbWUpCisgICAgICAgewkKKyAjaWZuZGVmIE5PX0ZPUksKKy0JcXVldWVfc2NyaXB0KEFDVElPTl9PTERfSE9TVE5BTUUsIGxlYXNlLCBsZWFzZS0+b2xkX2hvc3RuYW1lLCBub3cpOworKwlxdWV1ZV9zY3JpcHQoQUNUSU9OX09MRF9IT1NUTkFNRSwgbGVhc2UsIGxlYXNlLT5vbGRfaG9zdG5hbWUsIG5vdywgMCk7CisgI2VuZGlmCisgCWZyZWUobGVhc2UtPm9sZF9ob3N0bmFtZSk7CisgCWxlYXNlLT5vbGRfaG9zdG5hbWUgPSBOVUxMOworQEAgLTU1Miw3ICs1NTIsNyBAQAorIAkobGVhc2UtPmF1eF9jaGFuZ2VkICYmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTEVBU0VfUk8pKSkKKyAgICAgICB7CisgI2lmbmRlZiBOT19GT1JLCistCXF1ZXVlX3NjcmlwdChsZWFzZS0+bmV3ID8gQUNUSU9OX0FERCA6IEFDVElPTl9PTEQsIGxlYXNlLCBsZWFzZS0+aG9zdG5hbWUsIG5vdyk7CisrCXF1ZXVlX3NjcmlwdChsZWFzZS0+bmV3ID8gQUNUSU9OX0FERCA6IEFDVElPTl9PTEQsIGxlYXNlLCBsZWFzZS0+aG9zdG5hbWUsIG5vdywgMCk7CisgI2VuZGlmCisgCWxlYXNlLT5uZXcgPSBsZWFzZS0+Y2hhbmdlZCA9IGxlYXNlLT5hdXhfY2hhbmdlZCA9IDA7CisgCQorSW5kZXg6IG1hbi9kbnNtYXNxLjgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYW4vZG5zbWFzcS44CShyZXZpc2lvbiA2OTYpCisrKysgbWFuL2Ruc21hc3EuOAkocmV2aXNpb24gODIxKQorQEAgLTcyNCwxMiArNzI0LDE1IEBACisgLkIgXC02IC0tZGhjcC1zY3JpcHQ9PHBhdGg+CisgV2hlbmV2ZXIgYSBuZXcgREhDUCBsZWFzZSBpcyBjcmVhdGVkLCBvciBhbiBvbGQgb25lIGRlc3Ryb3llZCwgdGhlCisgYmluYXJ5IHNwZWNpZmllZCBieSB0aGlzIG9wdGlvbiBpcyBydW4uIFRoZSBhcmd1bWVudHMgdG8gdGhlIHByb2Nlc3MKKy1hcmUgImFkZCIsICJvbGQiIG9yICJkZWwiLCB0aGUgTUFDCisrYXJlICJhZGQiLCAib2xkIiwgImFjY2VzcyIgb3IgImRlbCIsIHRoZSBNQUMKKyBhZGRyZXNzIG9mIHRoZSBob3N0IChvciAiPG51bGw+IiksIHRoZSBJUCBhZGRyZXNzLCBhbmQgdGhlIGhvc3RuYW1lLAorIGlmIGtub3duLiAiYWRkIiBtZWFucyBhIGxlYXNlIGhhcyBiZWVuIGNyZWF0ZWQsICJkZWwiIG1lYW5zIGl0IGhhcworIGJlZW4gZGVzdHJveWVkLCAib2xkIiBpcyBhIG5vdGlmaWNhdGlvbiBvZiBhbiBleGlzdGluZyBsZWFzZSB3aGVuCisgZG5zbWFzcSBzdGFydHMgb3IgYSBjaGFuZ2UgdG8gTUFDIGFkZHJlc3Mgb3IgaG9zdG5hbWUgb2YgYW4gZXhpc3RpbmcKKyBsZWFzZSAoYWxzbywgbGVhc2UgbGVuZ3RoIG9yIGV4cGlyeSBhbmQgY2xpZW50LWlkLCBpZiBsZWFzZWZpbGUtcm8gaXMgc2V0KS4KKytUaGUgImFjY2VzcyIga2V5d29yZCBtZWFucyB0aGF0IGEgcmVxdWVzdCB3YXMganVzdCByZWNlaXZlZCBhbmQgZGVwZW5kaW5nCisrb24gdGhlIHNjcmlwdCBleGl0IHN0YXR1cyByZXF1ZXN0IGZvciBhZGRyZXNzIHdpbGwgYmUgZ3JhbnRlZCwgaWYgZXhpdCBzdGF0dXMKKytpcyB6ZXJvIG9yIG5vdCBpZiBpdCBpcyBub24temVyby4KKyBUaGUgcHJvY2VzcyBpcyBydW4gYXMgcm9vdCAoYXNzdW1pbmcgdGhhdCBkbnNtYXNxIHdhcyBvcmlnaW5hbGx5IHJ1biBhcworIHJvb3QpIGV2ZW4gaWYgZG5zbWFzcSBpcyBjb25maWd1cmVkIHRvIGNoYW5nZSBVSUQgdG8gYW4gdW5wcml2aWxlZ2VkIHVzZXIuCisgVGhlIGVudmlyb25tZW50IGlzIGluaGVyaXRlZCBmcm9tIHRoZSBpbnZva2VyIG9mIGRuc21hc3EsIGFuZCBpZiB0aGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvb3BlbnZwbi9SRUFETUUgYi9jb250cmliL29wZW52cG4vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRkOTk2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL29wZW52cG4vUkVBRE1FCkBAIC0wLDAgKzEsNDQgQEAKK1RoZSBwYXRjaCBJIGhhdmUgYXR0YWNoZWQgbGV0cyBtZSBnZXQgdGhlIGJlaGF2aW9yIEkgd2lzaCBvdXQgb2YKK2Ruc21hc3EuICBJIGFsc28gaW5jbHVkZSBteSB2ZXJzaW9uIG9mIGRoY2xpZW50LWVudGVyLWhvb2tzIGFzCityZXF1aXJlZCBmb3IgdGhlIHN3aXRjaG92ZXIgZnJvbSBwcmUtZG5zbWFzcSBhbmQgZGhjbGllbnQuCisKK09uIDgvMTYvMDUsIEpvc2VwaCBUYXRlIDxkcmFnb25zdHJpZGVyQGdtYWlsLmNvbT4gd3JvdGU6Cis+IEknbSB0cnlpbmcgdG8gdXNlIGRuc21hc3Egb24gYSBsYXB0b3AgaW4gb3JkZXIgdG8gZmFjaWxpdGF0ZSBvcGVudnBuCis+IGNvbm5lY3Rpb25zLiAgQXMgc3VjaCwgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSdtIGNvbmNlcm5lZAorPiBhYm91dCBpcyBhIHNpbmdsZSBzZXJ2ZXI9M0QvZXhhbXBsZS5jb20vMTkyLjE2OC4wLjEgbGluZS4KKz4KKz4gVGhlIHdheSBJIGN1cnJlbnRseSBoYXZlIGl0IHNldCB1cCBpcyBJIG1vZGlmaWVkIGRoY2xpZW50IHRvIHdyaXRlIGl0cworPiByZXNvbHYuY29uZiBkYXRhIHRvIC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQgYW5kIGNvbmZpZ3VyZWQKKz4gL2V0Yy9kbnNtYXNxLmNvbmYgdG8gbG9vayB0aGVyZSBmb3IgaXRzIHVwc3RyZWFtIGRucyBzZXJ2ZXJzLgorPiAvZXRjL3Jlc29sdi5jb25mIGlzIHNldCB0byBuYW1lc2VydmVyIDEyNy4wLjAuMQorPgorPiBBbGwgb2YgdGhpcyB3b3JrcyBncmVhdC4gIFdoZW4gSSBzdGFydCB0aGUgb3BlbnZwbiBzZXJ2aWNlLCBpdCB0aGUKKz4gcm91dGVzLCBhbmQgcXVlcmllcyB0byB0aGUgZG9tYWluIGluIHRoZSBzZXJ2ZXI9M0QgbGluZSB3b3JrIGp1c3QgZmluZS4KKz4KKz4gVGhlIG9ubHkgcHJvYmxlbSBpcyB0aGF0IHRoZSBob3N0bmFtZSBmb3IgbXkgc3lzdGVtIGRvZXNuJ3QgZ2V0IHNldAorPiBjb3JyZWN0bHkuICBXaXRoIHRoZSByZXNvbHYuY29uZiBkYXRhIHdyaXR0ZW4gdG8gc29tZXRoaW5nIG90aGVyIHRoYW4KKz4gL2V0Yy9yZXNvbHYuY29uZiwgdGhlIGlmdXAgc2NyaXB0cyBkb24ndCBoYXZlIGEgdmFsaWQgZG5zIHNlcnZlciB0byBkbworPiB0aGUgaXBjYWxjIGNhbGwgdG8gc2V0IHRoZSBsYXB0b3AncyBob3N0bmFtZS4gIElmIEkgc3RhcnQgZG5zbWFzcQorPiBiZWZvcmUgdGhlIG5ldHdvcmsgY29tZXMgdXAsIHNvbWV0aGluZyBnZXRzIGZ1YmFyJ2QuICBJJ20gbm90IHN1cmUgaG93Cis+IHRvIGRlc2NyaWJlIGl0IGV4YWN0bHksIGJ1dCBuZXR3b3JrIHNlcnZpY2VzIGFyZSBzbG93IHRvIGxvYWQsIGFuZAorPiByZXN0YXJ0aW5nIG5ldHdvcmtpbmcgYW5kIGRuc21hc3EgZG9lc24ndCBzb2x2ZSB0aGUgcHJvYmxlbS4gIFBlcmhhcHMKKz4gZG5zbWFzcSBpcyBhbnN3ZXJpbmcgdGhlIGRoY3AgcmVxdWVzdCB3aGVuIHRoZSBuZXR3b3JrIHN0YXJ0cz8KKz4gQ2VydGFpbmx5IG5vdCBkZXNpcmVkIGJlaGF2aW9yLgorPgorPiBBbnl3YXksIG15IHF1ZXN0aW9uOiBpcyB0aGVyZSBhIHdheSB0byBoYXZlIHRoZSBiZXN0IG9mIGJvdGggd29ybGRzPworPiBESENQIHJlcXVlc3RzIHRvIGFub3RoZXIgc2VydmVyLCBhbmQgRE5TIGxvb2t1cHMgdGhhdCB3b3JrIGF0IGFsbAorPiB0aW1lcz8KKz4KKz4gTXkgY3VycmVudCBiZXN0IGlkZWEgb24gaG93IHRvIHNvbHZlIHRoaXMgcHJvYmxlbSBpcyBtb2RpZnlpbmcgdGhlCis+IGRuc21hc3EgaW5pdHNjcmlwdCB0byB0d2VhayAvZXRjL2RoY2xpZW50LWVudGVyLWhvb2tzIHRvIGNoYW5nZSB3aGVyZQorPiBkaGNsaWVudCB3cml0ZXMgcmVzb2x2LmNvbmYgZGF0YSwgYW5kIGZpeGluZyB1cCAvZXRjL3Jlc29sdi5jb25mIG9uCis+IHRoZSBmbHkgdG8gc2V0IDEyNy4wLjAuMSB0byB0aGUgbmFtZXNlcnZlciAoYW5kIHNvbWVob3cga2VlcCB0aGUKKz4gc2VhcmNoIGRvbWFpbnMgaW50YWN0KSwgYnV0IEknbSBob3BpbmcgdGhhdCBJJ20ganVzdCBtaXNzaW5nIHNvbWUga2V5Cis+IHBpZWNlIG9mIHRoZSBwdXp6bGUgYW5kIHRoYXQgdGhpcyBwcm9ibGVtIGhhcyBiZWVuIHNvbHZlZCBiZWZvcmUuICBBbnkKKz4gaW5zaWdodHM/Cis+Cis+IC0tCis+IEpvc2VwaCBUYXRlCis+IFBlcnNvbmFsIGUtbWFpbDoganRhdGUgQVQgZHJhZ29uc3RyaWRlciBET1QgY29tCis+IFdlYjogaHR0cDovL3d3dy5kcmFnb25zdHJpZGVyLmNvbQorPgpkaWZmIC0tZ2l0IGEvY29udHJpYi9vcGVudnBuL2RoY2xpZW50LWVudGVyLWhvb2tzIGIvY29udHJpYi9vcGVudnBuL2RoY2xpZW50LWVudGVyLWhvb2tzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNiNzhlMmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL29wZW52cG4vZGhjbGllbnQtZW50ZXItaG9va3MKQEAgLTAsMCArMSwzMCBAQAorIyEvYmluL2Jhc2gKKworZnVuY3Rpb24gc2F2ZV9wcmV2aW91cygpIHsKKyAgaWYgWyAtZSAkMSAtYSAhIC1lICQxLnByZWRoY2xpZW50IF07IHRoZW4KKyAgICBtdiAkMSAkMS5wcmVkaGNsaWVudCAKKyAgZmkKK30KKworZnVuY3Rpb24gd3JpdGVfcmVzb2x2X2NvbmYoKSB7CisgIFJFU09MVkNPTkY9JDEKKyAgaWYgWyAtbiAiJG5ld19kb21haW5fbmFtZSIgXSB8fCBbIC1uICIkbmV3X2RvbWFpbl9uYW1lX3NlcnZlcnMiIF07IHRoZW4KKyAgICBzYXZlX3ByZXZpb3VzICRSRVNPTFZDT05GCisgICAgZWNobyAnOyBnZW5lcmF0ZWQgYnkgL2V0Yy9kaGNsaWVudC1lbnRlci1ob29rcycgPiAkUkVTT0xWQ09ORgorICAgIGlmIFsgLW4gIiRTRUFSQ0giIF07IHRoZW4KKyAJZWNobyBzZWFyY2ggJFNFQVJDSCA+PiAkUkVTT0xWQ09ORgorICAgIGVsc2UKKwlpZiBbIC1uICIkbmV3X2RvbWFpbl9uYW1lIiBdOyB0aGVuCisgCSAgICBlY2hvIHNlYXJjaCAkbmV3X2RvbWFpbl9uYW1lID4+ICRSRVNPTFZDT05GCisgCWZpCisgICAgZmkKKyAgICBjaG1vZCA2NDQgJFJFU09MVkNPTkYKKyAgICBmb3IgbmFtZXNlcnZlciBpbiAkbmV3X2RvbWFpbl9uYW1lX3NlcnZlcnM7IGRvCisgICAgICBlY2hvIG5hbWVzZXJ2ZXIgJG5hbWVzZXJ2ZXIgPj4kUkVTT0xWQ09ORgorICAgIGRvbmUKKyAgZmkKK30KKworbWFrZV9yZXNvbHZfY29uZigpIHsKKyAgd3JpdGVfcmVzb2x2X2NvbmYgL2V0Yy9yZXNvbHYuY29uZgorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9vcGVudnBuL2Ruc21hc3EucGF0Y2ggYi9jb250cmliL29wZW52cG4vZG5zbWFzcS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YzExODgxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9vcGVudnBuL2Ruc21hc3EucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorLS0tIGRuc21hc3EtMi4yMi9ycG0vZG5zbWFzcS5yaAkyMDA1LTAzLTI0IDA5OjUxOjE4LjAwMDAwMDAwMCAtMDUwMAorKysrIGRuc21hc3EtMi4yMi9ycG0vZG5zbWFzcS5yaC5uZXcJMjAwNS0wOC0yNSAxMDo1MjowNC4zMTA1Njg3ODQgLTA0MDAKK0BAIC0yLDcgKzIsNyBAQAorICMKKyAjIFN0YXJ0dXAgc2NyaXB0IGZvciB0aGUgRE5TIGNhY2hpbmcgc2VydmVyCisgIworLSMgY2hrY29uZmlnOiAyMzQ1IDk5IDAxCisrIyBjaGtjb25maWc6IDIzNDUgMDcgODkKKyAjIGRlc2NyaXB0aW9uOiBUaGlzIHNjcmlwdCBzdGFydHMgeW91ciBETlMgY2FjaGluZyBzZXJ2ZXIKKyAjIHByb2Nlc3NuYW1lOiBkbnNtYXNxCisgIyBwaWRmaWxlOiAvdmFyL3J1bi9kbnNtYXNxLnBpZAorQEAgLTEwLDYgKzEwLDI1IEBACisgIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKyAuIC9ldGMvcmMuZC9pbml0LmQvZnVuY3Rpb25zCisgCisrZnVuY3Rpb24gc2V0dXBfZGhjbGllbnRfZW50ZXJfaG9va3MoKSB7CisrICAgIGlmIFsgLWYgL2V0Yy9kaGNsaWVudC1lbnRlci1ob29rcyBdOyB0aGVuCisrICAgICAgICAuIC9ldGMvZGhjbGllbnQtZW50ZXItaG9va3MKKysgICAgICAgIGNwIC9ldGMvcmVzb2x2LmNvbmYgL2V0Yy9yZXNvbHYuY29uZi5kbnNtYXNxCisrICAgICAgICBjcCAvZXRjL2RoY2xpZW50LWVudGVyLWhvb2tzIC9ldGMvZGhjbGllbnQtZW50ZXItaG9va3MuZG5zbWFzcQorKyAgICAgICAgc2VkIC1lICdzL3Jlc29sdlwuY29uZiQvcmVzb2x2LmNvbmYuZG5zbWFzcS8nIC9ldGMvZGhjbGllbnQtZW50ZXItaG9va3MuZG5zbWFzcSA+IC9ldGMvZGhjbGllbnQtZW50ZXItaG9va3MKKysgICAgICAgIHNlZCAtZSAncy9cKG5hbWVzZXJ2ZXJbIHRhYl1cK1wpWzAtOV1cK1wuWzAtOV1cK1wuWzAtOV1cK1wuWzAtOV1cKyQvXDExMjcuMC4wLjEvJyAvZXRjL3Jlc29sdi5jb25mLmRuc21hc3EgPiAvZXRjL3Jlc29sdi5jb25mCisrICAgIGZpCisrfQorKworK2Z1bmN0aW9uIHRlYXJkb3duX2RoY2xpZW50X2VudGVyX2hvb2tzKCkgeworKyAgICBpZiBbIC1mIC9ldGMvZGhjbGllbnQtZW50ZXItaG9va3MgLWEgLWYgL2V0Yy9kaGNsaWVudC1lbnRlci1ob29rcy5kbnNtYXNxIF07IHRoZW4KKysgICAgICAgIGlmIFsgLWYgL2V0Yy9yZXNvbHYuY29uZi5kbnNtYXNxIF07IHRoZW4KKysgICAgICAgICAgICBtdiAvZXRjL3Jlc29sdi5jb25mLmRuc21hc3EgL2V0Yy9yZXNvbHYuY29uZgorKyAgICAgICAgZmkKKysgICAgICAgIG12IC9ldGMvZGhjbGllbnQtZW50ZXItaG9va3MuZG5zbWFzcSAvZXRjL2RoY2xpZW50LWVudGVyLWhvb2tzCisrICAgIGZpCisrfQorKworICMgU291cmNlIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbi4KKyAuIC9ldGMvc3lzY29uZmlnL25ldHdvcmsKKyAKK0BAIC0yNCw3ICs0Myw3IEBACisgTUFJTEhPU1ROQU1FPSIiCisgIyBjaGFuZ2UgdGhpcyBsaW5lIGlmIHlvdSB3YW50IGRucyB0byBnZXQgaXRzIHVwc3RyZWFtIHNlcnZlcnMgZnJvbQorICMgc29tZXdoZXJlIG90aGVyIHRoYXQgL2V0Yy9yZXNvbHYuY29uZiAKKy1SRVNPTFZfQ09ORj0iIgorK1JFU09MVl9DT05GPSIvZXRjL3Jlc29sdi5jb25mLmRuc21hc3EiCisgIyBjaGFuZ2UgdGhpcyBpZiB5b3Ugd2FudCBkbnNtYXNxIHRvIGNhY2hlIGFueSAiaG9zdG5hbWUiIG9yICJjbGllbnQtaG9zdG5hbWUiIGZyb20KKyAjIGEgZGhjcGQncyBsZWFzZSBmaWxlCitAQCAtNTQsNiArNzMsNyBAQAorIGNhc2UgIiQxIiBpbgorICAgc3RhcnQpCisgICAgICAgICBlY2hvIC1uICJTdGFydGluZyBkbnNtYXNxOiAiCisrICAgICAgICBzZXR1cF9kaGNsaWVudF9lbnRlcl9ob29rcworICAgICAgICAgZGFlbW9uICRkbnNtYXNxICRPUFRJT05TCisgCVJFVFZBTD0kPworICAgICAgICAgZWNobworQEAgLTYyLDYgKzgyLDcgQEAKKyAgIHN0b3ApCisgICAgICAgICBpZiB0ZXN0ICJ4YHBpZG9mIGRuc21hc3FgIiAhPSB4OyB0aGVuCisgICAgICAgICAgICAgZWNobyAtbiAiU2h1dHRpbmcgZG93biBkbnNtYXNxOiAiCisrICAgICAgICAgICAgdGVhcmRvd25fZGhjbGllbnRfZW50ZXJfaG9va3MKKyAgICAgICAgICAgICBraWxscHJvYyBkbnNtYXNxCisgICAgICAgICBmaQorIAlSRVRWQUw9JD8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9ydC1mb3J3YXJkL2Ruc21hc3EtcG9ydGZvcndhcmQgYi9jb250cmliL3BvcnQtZm9yd2FyZC9kbnNtYXNxLXBvcnRmb3J3YXJkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5YmI4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BvcnQtZm9yd2FyZC9kbnNtYXNxLXBvcnRmb3J3YXJkCkBAIC0wLDAgKzEsNjggQEAKKyMhL2Jpbi9iYXNoCisjIAorIyAvdXNyL3NiaW4vZG5zbWFzcS1wb3J0Zm9yd2FyZAorIworIyBBIHNjcmlwdCB3aGljaCBnZXRzIHJ1biB3aGVuIHRoZSBkbnNtYXNxIERIQ1AgbGVhc2UgZGF0YWJhc2UgY2hhbmdlcy4KKyMgSXQgbG9ncyB0byAkTE9HRklMRSwgaWYgaXQgZXhpc3RzLCBhbmQgbWFpbnRhaW5zIHBvcnQtZm9yd2FyZHMgdXNpbmcKKyMgSVAtdGFibGVzIHNvIHRoYXQgdGhleSBhbHdheXMgcG9pbnQgdG8gdGhlIGNvcnJlY3QgaG9zdC4gU2VlCisjICRQT1JUU0ZJTEUgZm9yIGRldGFpbHMgb24gY29uZmlndXJpbmcgdGhpcy4gZG5zbWFzcSBtdXN0IGJlIHZlcnNpb24gMi4zNCAKKyMgb3IgbGF0ZXIuCisjCisjIFRvIGVuYWJsZSB0aGlzIHNjcmlwdCwgYWRkIAorIyAgICBkaGNwLXNjcmlwdD0vdXNyL3NiaW4vZG5zbWFzcS1wb3J0Zm9yd2FyZAorIyB0byAvZXRjL2Ruc21hc3EuY29uZgorIworIyBUbyBlbmFibGUgbG9nZ2luZywgdG91Y2ggJExPR0ZJTEUKKyMKKworUE9SVFNGSUxFPS9ldGMvcG9ydGZvcndhcmQKK0xPR0ZJTEU9L3Zhci9sb2cvZGhjcC5sb2cKK0lQVEFCTEVTPS9zYmluL2lwdGFibGVzCisKK2FjdGlvbj0kezE6LTB9Citob3N0bmFtZT0kezR9CisKKyMgbG9nIHdoYXQncyBnb2luZyBvbi4KK2lmIFsgLWYgJHtMT0dGSUxFfSBdIDsgdGhlbgorICAgIGRhdGUgKyIlRCAlVCAkKiIgPj4ke0xPR0ZJTEV9CitmaQorCisjIElmIGEgbGVhc2UgZ2V0cyBzdHJpcHBlZCBvZiBhIG5hbWUsIHdlIHNlZSB0aGF0IGFzIGFuICJvbGQiIGFjdGlvbgorIyB3aXRoIEROU01BU1FfT0xEX0hPU1ROQU1FIHNldCwgY29udmVydCBpdCBpbnRvIGEgImRlbCIgCitpZiBbICR7RE5TTUFTUV9PTERfSE9TVE5BTUV9IF0gJiYgWyAke2FjdGlvbn0gPSBvbGQgXSA7IHRoZW4KKyAgICBhY3Rpb249ZGVsCisgICAgaG9zdG5hbWU9JHtETlNNQVNRX09MRF9IT1NUTkFNRX0KK2ZpCisKKyMgYWN0aW9uIGluaXQgaXMgbm90IHJlbGV2YW50LCBhbmQgd2lsbCBvbmx5IGJlIHNlZW4gd2hlbiBsZWFzZWZpbGUtcm8gaXMgc2V0LgoraWYgWyAke2FjdGlvbn0gPSBpbml0IF0gOyB0aGVuCisgICAgZXhpdCAwCitmaQorCitpZiBbICR7aG9zdG5hbWV9IF07IHRoZW4KKyAgICBwb3J0cz0kKHNlZCAtbiAtZSAiL14ke2hvc3RuYW1lfVwgLiovIHMvXi4qIC8vcCIgJHtQT1JUU0ZJTEV9KQorCisgICAgZm9yIHBvcnQgaW4gJHBvcnRzOyBkbworCXZlcmI9cmVtb3ZlZAorCXByb3RvY29sPXRjcAorCWlmIFsgJHtwb3J0OjA6MX0gPSB1IF0gOyB0aGVuCisJICAgIHByb3RvY29sPXVkcCAKKwkgICAgcG9ydD0ke3BvcnQvdS99CisJZmkKKwlzcmM9JHtwb3J0LzoqL30KKwlkc3Q9JHtwb3J0Lyo6L30KKyMgZGVsZXRlIGZpcnN0LCB0byBhdm9pZCBtdWx0aXBsZSBjb3BpZXMgb2YgcnVsZXMuCisJJHtJUFRBQkxFU30gLXQgbmF0IC1EIFBSRVJPVVRJTkcgLXAgJHByb3RvY29sIC0tZGVzdGluYXRpb24tcG9ydCAkc3JjIC1qIEROQVQgLS10by1kZXN0aW5hdGlvbiAkezN9OiRkc3QKKyAgICAgICAgaWYgWyAke2FjdGlvbn0gIT0gZGVsIF0gOyB0aGVuCisJICAgICR7SVBUQUJMRVN9IC10IG5hdCAtQSBQUkVST1VUSU5HIC1wICRwcm90b2NvbCAtLWRlc3RpbmF0aW9uLXBvcnQgJHNyYyAtaiBETkFUIC0tdG8tZGVzdGluYXRpb24gJHszfTokZHN0CisJICAgIHZlcmI9YWRkZWQKKwlmaQorCWlmIFsgLWYgJHtMT0dGSUxFfSBdIDsgdGhlbgorCSAgICBlY2hvICIgICAgIEROQVQgJHByb3RvY29sICRzcmMgdG8gJHszfTokZHN0ICR7dmVyYn0uIiA+PiR7TE9HRklMRX0KKwlmaQorICAgIGRvbmUKK2ZpCisgICAgCitleGl0IDAKKworCmRpZmYgLS1naXQgYS9jb250cmliL3BvcnQtZm9yd2FyZC9wb3J0Zm9yd2FyZCBiL2NvbnRyaWIvcG9ydC1mb3J3YXJkL3BvcnRmb3J3YXJkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFhOTdjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BvcnQtZm9yd2FyZC9wb3J0Zm9yd2FyZApAQCAtMCwwICsxLDI4IEBACisjIFRoaXMgZmlsZSBpcyByZWFkIGJ5IC91c3Ivc2Jpbi9kbnNtYXNxLXBvcnRmb3J3YXJkIGFuZCB1c2VkIHRvIHNldCB1cCBwb3J0IAorIyBmb3J3YXJkaW5nIHRvIGhvc3RuYW1lcy4gSWYgdGhlIGRuc21hc3EtZGV0ZXJtaW5lZCBob3N0bmFtZSBtYXRjaGVzIHRoZQorIyBmaXJzdCBjb2x1bW4gb2YgdGhpcyBmaWxlLCB0aGVuIGEgRE5BVCBwb3J0LWZvcndhcmQgd2lsbCBiZSBzZXQgdXAgCisjIHRvIHRoZSBhZGRyZXNzIHdoaWNoIGhhcyBqdXN0IGJlZW4gYWxsb2NhdGVkIGJ5IERIQ1AgLiBUaGUgc2Vjb25kIGZpZWxkIAorIyBpcyBwb3J0IG51bWJlcihzKS4gSWYgdGhlcmUgaXMgb25seSBvbmUsIHRoZW4gdGhlIHBvcnQtZm9yd2FyZCBnb2VzIHRvIAorIyB0aGUgc2FtZSBwb3J0IG9uIHRoZSBESENQLWNsaWVudCwgaWYgdGhlcmUgYXJlIHR3byBzZXBlcmF0ZWQgd2l0aCBhIAorIyBjb2xvbiwgdGhlbiB0aGUgc2Vjb25kIG51bWJlciBpcyB0aGUgcG9ydCB0byB3aGljaCB0aGUgY29ubmVjdGlvbiAKKyMgaXMgZm9yd2FyZGVkIG9uIHRoZSBESENQLWNsaWVudC4gQnkgZGVmYXVsdCwgZm9yd2FyZGluZyBpcyBzZXQgdXAgCisjIGZvciBUQ1AsIGJ1dCBpdCBjYW4gZG9uZSBmb3IgVURQIGluc3RlYWQgYnkgcHJlZml4aW5nIHRoZSBwb3J0IHRvICJ1Ii4gCisjIFRvIGZvcndhcmQgYm90aCBUQ1AgYW5kIFVEUCwgdHdvIGxpbmVzIGFyZSByZXF1aXJlZC4gCisjCisjIGVnLgorIyB3d3dzZXJ2ZXIgODAKKyMgd2lsbCBzZXQgdXAgYSBwb3J0IGZvcndhcmQgZnJvbSBwb3J0IDgwIG9uIHRoaXMgaG9zdCB0byBwb3J0IDgwIAorIyBhdCB0aGUgYWRkcmVzcyBhbGxvY2F0ZWQgdG8gd3d3c2VydmVyIHdoZW5ldmVyIHd3d3NlcnZlciBnZXRzIGEgREhDUCBsZWFzZS4KKyMKKyMgd3d3c2VydmVyIDgwODA6ODAKKyMgd2lsbCBzZXQgdXAgYSBwb3J0IGZvcndhcmQgZnJvbSBwb3J0IDgwODAgb24gdGhpcyBob3N0IHRvIHBvcnQgODAKKyMgb24gdGhlIERIQ1AtY2xpZW50LgorIworIyBkbnNzZXJ2ZXIgNTMKKyMgZG5zc2VydmVyIHU1MworIyB3aWxsIHBvcnQgZm9yd2FyZCBwb3J0IDUzIFVEUCBhbmQgVENQIGZyb20gdGhpcyBob3N0IHRvIHBvcnQgNTMgb24gZG5zc2VydmVyLgorIworIyBQb3J0IGZvcndhcmRzIHdpbGwgcmVjcmVhdGVkIHdoZW4gZG5zbWFzcSByZXN0YXJ0cyBhZnRlciBhIHJlYm9vdCwgYW5kCisjIHJlbW92ZWQgd2hlbiBESENQIGxlYXNlcyBleHBpcmUuIEFmdGVyIGVkaXRpbmcgdGhpcyBmaWxlLCBzZW5kCisjIFNJR0hVUCB0byBkbnNtYXNxIHRvIGluc3RhbGwgbmV3IGlwdGFibGVzIGVudHJpZXMgaW4gdGhlIGtlcm5lbC4KKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9zbGFja3dhcmUtZG5zbWFzcS9kbnNtYXNxLlNsYWNrQnVpbGQgYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2Ruc21hc3EuU2xhY2tCdWlsZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNWJhMDgzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zbGFja3dhcmUtZG5zbWFzcS9kbnNtYXNxLlNsYWNrQnVpbGQKQEAgLTAsMCArMSw1NiBAQAorIyEvYmluL3NoCitDV0Q9YHB3ZGAKK1BLRz0vdG1wL3BhY2thZ2UtZG5zbWFzcQorCitWRVJTSU9OPTIuMjQKK0FSQ0g9JHtBUkNIOi1pNDg2fQorQlVJTEQ9JHtCVUlMRDotMX0KKworaWYgWyAiJEFSQ0giID0gImkzODYiIF07IHRoZW4KKyAgU0xLQ0ZMQUdTPSItTzIgLW1hcmNoPWkzODYgLW1jcHU9aTY4NiIKK2VsaWYgWyAiJEFSQ0giID0gImk0ODYiIF07IHRoZW4KKyAgU0xLQ0ZMQUdTPSItTzIgLW1hcmNoPWk0ODYgLW1jcHU9aTY4NiIKK2VsaWYgWyAiJEFSQ0giID0gInMzOTAiIF07IHRoZW4KKyAgU0xLQ0ZMQUdTPSItTzIiCitlbGlmIFsgIiRBUkNIIiA9ICJ4ODZfNjQiIF07IHRoZW4KKyAgU0xLQ0ZMQUdTPSItTzIiCitmaQorCitybSAtcmYgJFBLRworbWtkaXIgLXAgJFBLRworY2QgL3RtcAorcm0gLXJmIGRuc21hc3EtJFZFUlNJT04KK3RhciB4enZmICRDV0QvZG5zbWFzcS0kVkVSU0lPTi50YXIuZ3oKK2NkIGRuc21hc3EtJFZFUlNJT04KK3pjYXQgJENXRC9kbnNtYXNxLmxlYXNlZGlyLmRpZmYuZ3ogfCBwYXRjaCAtcDEgLS12ZXJib3NlIC0tYmFja3VwIC0tc3VmZml4PS5vcmlnIHx8IGV4aXQKK2Nob3duIC1SIHJvb3Qucm9vdCAuCittYWtlIGluc3RhbGwtaTE4biBQUkVGSVg9L3VzciBERVNURElSPSRQS0cgTUFORElSPS91c3IvbWFuCitjaG1vZCA3NTUgJFBLRy91c3Ivc2Jpbi9kbnNtYXNxCitjaG93biAtUiByb290LmJpbiAkUEtHL3Vzci9zYmluCitnemlwIC05ICRQS0cvdXNyL21hbi9tYW44L2Ruc21hc3EuOAorZm9yIGYgaW4gJFBLRy91c3Ivc2hhcmUvbWFuLyo7IGRvIAorICAgaWYgWyAtZiAkJGYvbWFuOC9kbnNtYXNxLjggXTsgdGhlbiAKKyAgICAgICAgZ3ppcCAtOSAkJGYvbWFuOC9kbnNtYXNxLjggOyAKKyAgIGZpIAorZG9uZQorZ3ppcCAtOSAkUEtHL3Vzci9tYW4vKi9tYW44L2Ruc21hc3EuOAorbWtkaXIgLXAgJFBLRy92YXIvc3RhdGUvZG5zbWFzcQorKCBjZCAkUEtHCisgIGZpbmQgLiB8IHhhcmdzIGZpbGUgfCBncmVwICJleGVjdXRhYmxlIiB8IGdyZXAgRUxGIHwgY3V0IC1mIDEgLWQgOiB8IHhhcmdzIHN0cmlwIC0tc3RyaXAtdW5uZWVkZWQgMj4gL2Rldi9udWxsCisgIGZpbmQgLiB8IHhhcmdzIGZpbGUgfCBncmVwICJzaGFyZWQgb2JqZWN0IiB8IGdyZXAgRUxGIHwgY3V0IC1mIDEgLWQgOiB8IHhhcmdzIHN0cmlwIC0tc3RyaXAtdW5uZWVkZWQgMj4gL2Rldi9udWxsCispCitta2RpciAkUEtHL2V0YworY2F0IGRuc21hc3EuY29uZi5leGFtcGxlID4gJFBLRy9ldGMvZG5zbWFzcS5jb25mLm5ldworbWtkaXIgJFBLRy9ldGMvcmMuZAoremNhdCAkQ1dEL3JjLmRuc21hc3EuZ3ogPiAkUEtHL2V0Yy9yYy5kL3JjLmRuc21hc3EubmV3Citta2RpciAtcCAkUEtHL3Vzci9kb2MvZG5zbWFzcS0kVkVSU0lPTgorY3AgLWEgXAorICBDSEFOR0VMT0cgQ09QWUlORyBGQVEgVVBHUkFESU5HX3RvXzIuMCBkb2MuaHRtbCBzZXR1cC5odG1sIFwKKyAgJFBLRy91c3IvZG9jL2Ruc21hc3EtJFZFUlNJT04KK21rZGlyIC1wICRQS0cvaW5zdGFsbAorY2F0ICRDV0Qvc2xhY2stZGVzYyA+ICRQS0cvaW5zdGFsbC9zbGFjay1kZXNjCit6Y2F0ICRDV0QvZG9pbnN0LnNoLmd6ID4gJFBLRy9pbnN0YWxsL2RvaW5zdC5zaAorCitjZCAkUEtHCittYWtlcGtnIC1sIHkgLWMgbiAuLi9kbnNtYXNxLSRWRVJTSU9OLSRBUkNILSRCVUlMRC50Z3oKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9zbGFja3dhcmUtZG5zbWFzcS9kbnNtYXNxLmxlYXNlZGlyLmRpZmYuZ3ogYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2Ruc21hc3EubGVhc2VkaXIuZGlmZi5negpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMmZjMzJiCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zbGFja3dhcmUtZG5zbWFzcS9kbnNtYXNxLmxlYXNlZGlyLmRpZmYuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29udHJpYi9zbGFja3dhcmUtZG5zbWFzcS9kb2luc3Quc2guZ3ogYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2RvaW5zdC5zaC5negpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjQ0MjI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zbGFja3dhcmUtZG5zbWFzcS9kb2luc3Quc2guZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29udHJpYi9zbGFja3dhcmUtZG5zbWFzcS9yYy5kbnNtYXNxLmd6IGIvY29udHJpYi9zbGFja3dhcmUtZG5zbWFzcS9yYy5kbnNtYXNxLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE4NmFiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL3JjLmRuc21hc3EuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29udHJpYi9zbGFja3dhcmUtZG5zbWFzcS9zbGFjay1kZXNjIGIvY29udHJpYi9zbGFja3dhcmUtZG5zbWFzcS9zbGFjay1kZXNjCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhMGM1NzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL3NsYWNrLWRlc2MKQEAgLTAsMCArMSwxOSBAQAorIyBIT1cgVE8gRURJVCBUSElTIEZJTEU6CisjIFRoZSAiaGFuZHkgcnVsZXIiIGJlbG93IG1ha2VzIGl0IGVhc2llciB0byBlZGl0IGEgcGFja2FnZSBkZXNjcmlwdGlvbi4gIExpbmUKKyMgdXAgdGhlIGZpcnN0ICd8JyBhYm92ZSB0aGUgJzonIGZvbGxvd2luZyB0aGUgYmFzZSBwYWNrYWdlIG5hbWUsIGFuZCB0aGUgJ3wnIG9uCisjIHRoZSByaWdodCBzaWRlIG1hcmtzIHRoZSBsYXN0IGNvbHVtbiB5b3UgY2FuIHB1dCBhIGNoYXJhY3RlciBpbi4gIFlvdSBtdXN0IG1ha2UKKyMgZXhhY3RseSAxMSBsaW5lcyBmb3IgdGhlIGZvcm1hdHRpbmcgdG8gYmUgY29ycmVjdC4gIEl0J3MgYWxzbyBjdXN0b21hcnkgdG8KKyMgbGVhdmUgb25lIHNwYWNlIGFmdGVyIHRoZSAnOicuCisKKyAgICAgICB8LS0tLS1oYW5keS1ydWxlci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKK2Ruc21hc3E6IGRuc21hc3EgKHNtYWxsIEROUyBhbmQgREhDUCBzZXJ2ZXIpCitkbnNtYXNxOgorZG5zbWFzcTogRG5zbWFzcSBpcyBhIGxpZ2h0d2VpZ2h0LCBlYXN5IHRvIGNvbmZpZ3VyZSBETlMgZm9yd2FyZGVyIGFuZCBESENQCitkbnNtYXNxOiBzZXJ2ZXIuICBJdCBpcyBkZXNpZ25lZCB0byBwcm92aWRlIEROUyAoYW5kIG9wdGlvbmFsbHkgREhDUCkgdG8gYQorZG5zbWFzcTogc21hbGwgbmV0d29yaywgYW5kIGNhbiBzZXJ2ZSB0aGUgbmFtZXMgb2YgbG9jYWwgbWFjaGluZXMgd2hpY2ggYXJlIG5vdAorZG5zbWFzcTogaW4gdGhlIGdsb2JhbCBETlMuIAorZG5zbWFzcToKK2Ruc21hc3E6IERuc21hc3Egd2FzIHdyaXR0ZW4gYnkgU2ltb24gS2VsbGV5LgorZG5zbWFzcToKK2Ruc21hc3E6CitkbnNtYXNxOgpkaWZmIC0tZ2l0IGEvY29udHJpYi90cnktYWxsLW5zL1JFQURNRSBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjI0ZDU1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9SRUFETUUKQEAgLTAsMCArMSwxOSBAQAorRGF0ZTogVGh1LCAwNyBEZWMgMjAwNiAwMDo0MTo0MyAtMDUwMAorRnJvbTogQm9iIENhcnJvbGwgPGJvYi5jYXJyb2xsQHJpdC5lZHU+CitTdWJqZWN0OiBkbnNtYXNxIHN1Z2dlc3Rpb24KK1RvOiBzaW1vbkB0aGVrZWxsZXlzLm9yZy51aworCisKK0hlbGxvLAorCitJIHJlY2VudGx5IG5lZWRlZCBhIGZlYXR1cmUgaW4gZG5zbWFzcSBmb3IgYSB2ZXJ5IGJpemFycmUgc2l0dWF0aW9uLiBJIAorcGxhY2VkIGEgbGlzdCBvZiBuYW1lIHNlcnZlcnMgaW4gYSBzcGVjaWFsIHJlc29sdmUgZmlsZSBhbmQgdG9sZCBkbnNtYXNxIAordG8gdXNlIHRoYXQuIEJ1dCBJIHdhbnRlZCBpdCB0byB0cnkgcmVxdWVzdHMgaW4gb3JkZXIgYW5kIHRyZWF0IE5YRE9NQUlOIAorcmVxdWVzdHMgYXMgYSBmYWlsZWQgdGNwIGNvbm5lY3Rpb24uIEkgd3JvdGUgdGhlIGZlYXR1cmUgaW50byBkbnNtYXNxIAorYW5kIGl0IHNlZW1zIHRvIHdvcmsuIEkgcHJlcGFyZWQgYSBwYXRjaCBpbiB0aGUgZXZlbnQgdGhhdCBvdGhlcnMgbWlnaHQgCitmaW5kIGl0IHVzZWZ1bCBhcyB3ZWxsLgorCitUaGFua3MgYW5kIGtlZXAgdXAgdGhlIGdvb2Qgd29yay4KKworLS1Cb2IKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi90cnktYWxsLW5zL1JFQURNRS0yLjQ3IGIvY29udHJpYi90cnktYWxsLW5zL1JFQURNRS0yLjQ3Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlYmVjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3RyeS1hbGwtbnMvUkVBRE1FLTIuNDcKQEAgLTAsMCArMSwxMSBAQAorQSByZW1ha2Ugb2YgcGF0Y2ggQm9iIENhcnJvbGwgaGFkIHBvc3RlZCB0byBkbnNtYXNxLAorbm93IGNvbXBhdGlibGUgd2l0aCB2ZXJzaW9uIDIuNDcuIEhvcGVmdWxseSBoZSBkb2Vzbid0IAorbWluZCAoc2VuZGluZyBhIGNvcHkgb2YgdGhpcyBtYWlsIHRvIGhpbSB0b28pLgorCitNYXliZSB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgbm90IGFjY2VwdGlibGUKK2FzIGl0IGRvZXNuJ3QgYWRkIG5ldyBzd2l0Y2gsIHJhdGhlciBpdCBiaW5kcyBpdHNlbGYgdG8gInN0cmljdC1vcmRlciIuCisKK1doYXQgaXQgZG9lcyBpczogaWYgeW91IGhhdmUgc3RyaWN0LW9yZGVyIGluIHRoZSAKK2Ruc21hc3EgY29uZmlnIGZpbGUgYW5kIHF1ZXJ5IGEgZG9tYWluIHRoYXQgd291bGQgcmVzdWx0IAoraW4gTlhET01BSU4sIGl0IGl0ZXJhdGVzIHRoZSB3aG9sZSBnaXZlbiBuYW1lc2VydmVyIGxpc3QgCit1bnRpbCB0aGUgbGFzdCBvbmUgc2F5cyBOWERPTUFJTi4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuMzUtdHJ5LWFsbC1ucy5wYXRjaCBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuMzUtdHJ5LWFsbC1ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYzNmM2UwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi90cnktYWxsLW5zL2Ruc21hc3EtMi4zNS10cnktYWxsLW5zLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK2RpZmYgLU5hdSBkbnNtYXNxLTIuMzUvc3JjL2Ruc21hc3EuaCBkbnNtYXNxL3NyYy9kbnNtYXNxLmgKKy0tLSBkbnNtYXNxLTIuMzUvc3JjL2Ruc21hc3EuaAkyMDA2LTEwLTE4IDE2OjI0OjUwLjAwMDAwMDAwMCAtMDQwMAorKysrIGRuc21hc3Evc3JjL2Ruc21hc3EuaAkyMDA2LTExLTE2IDIyOjA2OjMxLjAwMDAwMDAwMCAtMDUwMAorQEAgLTExMiw2ICsxMTIsNyBAQAorICNkZWZpbmUgT1BUX05PX1BJTkcgICAgICAgIDIwOTcxNTIKKyAjZGVmaW5lIE9QVF9MRUFTRV9STyAgICAgICA0MTk0MzA0CisgI2RlZmluZSBPUFRfUkVMT0FEICAgICAgICAgODM4ODYwOAorKyNkZWZpbmUgT1BUX1RSWV9BTExfTlMgICAgIDE2Nzc3MjE2CisgCisgc3RydWN0IGFsbF9hZGRyIHsKKyAgIHVuaW9uIHsKK2RpZmYgLU5hdSBkbnNtYXNxLTIuMzUvc3JjL2ZvcndhcmQuYyBkbnNtYXNxL3NyYy9mb3J3YXJkLmMKKy0tLSBkbnNtYXNxLTIuMzUvc3JjL2ZvcndhcmQuYwkyMDA2LTEwLTE4IDE2OjI0OjUwLjAwMDAwMDAwMCAtMDQwMAorKysrIGRuc21hc3Evc3JjL2ZvcndhcmQuYwkyMDA2LTExLTE2IDIyOjA4OjE5LjAwMDAwMDAwMCAtMDUwMAorQEAgLTQ0NSw2ICs0NDUsMTAgQEAKKyAgICAgeworICAgICAgICBzdHJ1Y3Qgc2VydmVyICpzZXJ2ZXIgPSBmb3J3YXJkLT5zZW50dG87CisgICAgICAgIAorKyAgICAgICAvLyBJZiBzdHJpY3Qtb3JkZXIgYW5kIHRyeS1hbGwtbnMgYXJlIHNldCwgdHJlYXQgTlhET01BSU4gYXMgYSBmYWlsZWQgcmVxdWVzdAorKyAgICAgICBpZiggKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9PUkRFUikgJiYgKGRhZW1vbi0+b3B0aW9ucyAmJiBPUFRfVFJZX0FMTF9OUykKKysgICAgICAgICAgICYmIGhlYWRlci0+cmNvZGUgPT0gTlhET01BSU4gKSBoZWFkZXItPnJjb2RlID0gU0VSVkZBSUw7CisrCisgICAgICAgIGlmICgoaGVhZGVyLT5yY29kZSA9PSBTRVJWRkFJTCB8fCBoZWFkZXItPnJjb2RlID09IFJFRlVTRUQpICYmIGZvcndhcmQtPmZvcndhcmRhbGwgPT0gMCkKKyAJIC8qIGZvciBicm9rZW4gc2VydmVycywgYXR0ZW1wdCB0byBzZW5kIHRvIGFub3RoZXIgb25lLiAqLworIAkgeworZGlmZiAtTmF1IGRuc21hc3EtMi4zNS9zcmMvb3B0aW9uLmMgZG5zbWFzcS9zcmMvb3B0aW9uLmMKKy0tLSBkbnNtYXNxLTIuMzUvc3JjL29wdGlvbi5jCTIwMDYtMTAtMTggMTY6MjQ6NTAuMDAwMDAwMDAwIC0wNDAwCisrKysgZG5zbWFzcS9zcmMvb3B0aW9uLmMJMjAwNi0xMS0xNiAyMjoxMDozNi4wMDAwMDAwMDAgLTA1MDAKK0BAIC0yOCw3ICsyOCw3IEBACisgCisgLyogb3B0aW9ucyB3aGljaCBkb24ndCBoYXZlIGEgb25lLWNoYXIgdmVyc2lvbiAqLworICNkZWZpbmUgTE9QVF9SRUxPQUQgMjU2CistCisrI2RlZmluZSBMT1BUX1RSWV9BTExfTlMgMjU3CisgCisgI2lmZGVmIEhBVkVfR0VUT1BUX0xPTkcKKyBzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSAgCitAQCAtMTAyLDYgKzEwMiw3IEBACisgICAgIHsibGVhc2VmaWxlLXJvIiwgMCwgMCwgJzknfSwKKyAgICAgeyJkbnMtZm9yd2FyZC1tYXgiLCAxLCAwLCAnMCd9LAorICAgICB7ImNsZWFyLW9uLXJlbG9hZCIsIDAsIDAsIExPUFRfUkVMT0FEIH0sCisrICAgIHsidHJ5LWFsbC1ucyIsIDAsIDAsIExPUFRfVFJZX0FMTF9OUyB9LAorICAgICB7IE5VTEwsIDAsIDAsIDAgfQorICAgfTsKKyAKK0BAIC0xMzQsNiArMTM1LDcgQEAKKyAgIHsgJzUnLCAgICAgICAgICAgIE9QVF9OT19QSU5HIH0sCisgICB7ICc5JywgICAgICAgICAgICBPUFRfTEVBU0VfUk8gfSwKKyAgIHsgTE9QVF9SRUxPQUQsICAgIE9QVF9SRUxPQUQgfSwKKysgIHsgTE9QVF9UUllfQUxMX05TLE9QVF9UUllfQUxMX05TIH0sCisgICB7ICd2JywgICAgICAgICAgICAwfSwKKyAgIHsgJ3cnLCAgICAgICAgICAgIDB9LAorICAgeyAwLCAwIH0KK0BAIC0yMDgsNiArMjEwLDcgQEAKKyAgIHsgIi05LCAtLWxlYXNlZmlsZS1ybyIsIGdldHRleHRfbm9vcCgiUmVhZCBsZWFzZXMgYXQgc3RhcnR1cCwgYnV0IG5ldmVyIHdyaXRlIHRoZSBsZWFzZSBmaWxlLiIpLCBOVUxMIH0sCisgICB7ICItMCwgLS1kbnMtZm9yd2FyZC1tYXg9PHF1ZXJpZXM+IiwgZ2V0dGV4dF9ub29wKCJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzLiAoZGVmYXVsdHMgdG8gJXMpIiksICIhIiB9LCAKKyAgIHsgIiAgICAtLWNsZWFyLW9uLXJlbG9hZCIsIGdldHRleHRfbm9vcCgiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIpLCBSRVNPTFZGSUxFIH0sCisrICB7ICIgICAgLS10cnktYWxsLW5zIiwgZ2V0dGV4dF9ub29wKCJUcnkgYWxsIG5hbWUgc2VydmVycyBpbiB0YW5kZW0gb24gTlhET01BSU4gcmVwbGllcyAodXNlIHdpdGggc3RyaWN0LW9yZGVyKS4iKSwgTlVMTCB9LAorICAgeyBOVUxMLCBOVUxMLCBOVUxMIH0KKyB9OyAKKyAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuNDdfbm9fbnhkb21haW5fdW50aWxfZW5kLnBhdGNoIGIvY29udHJpYi90cnktYWxsLW5zL2Ruc21hc3EtMi40N19ub19ueGRvbWFpbl91bnRpbF9lbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzU4NjAwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuNDdfbm9fbnhkb21haW5fdW50aWxfZW5kLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK2RpZmYgLXVyIGRuc21hc3EtMi40Ny9zcmMvZm9yd2FyZC5jIGRuc21hc3EtMi40Ny1wYXRjaGVkL3NyYy9mb3J3YXJkLmMKKy0tLSBkbnNtYXNxLTIuNDcvc3JjL2ZvcndhcmQuYwkyMDA5LTAyLTAxIDE3OjU5OjQ4LjAwMDAwMDAwMCArMDIwMAorKysrIGRuc21hc3EtMi40Ny1wYXRjaGVkL3NyYy9mb3J3YXJkLmMJMjAwOS0wMy0xOCAxOToxMDoyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00ODgsOSArNDg4LDEyIEBACisgICAgIHJldHVybjsKKyAgICAKKyAgIHNlcnZlciA9IGZvcndhcmQtPnNlbnR0bzsKKysKKysgIGlmICggKGhlYWRlci0+cmNvZGUgPT0gTlhET01BSU4pICYmICgoZGFlbW9uLT5vcHRpb25zICYgT1BUX09SREVSKSAhPSAwKSAmJiAoc2VydmVyLT5uZXh0ICE9IE5VTEwpICkKKysgICAgaGVhZGVyLT5yY29kZSA9IFNFUlZGQUlMOworICAgCisgICBpZiAoKGhlYWRlci0+cmNvZGUgPT0gU0VSVkZBSUwgfHwgaGVhZGVyLT5yY29kZSA9PSBSRUZVU0VEKSAmJgorLSAgICAgICEoZGFlbW9uLT5vcHRpb25zICYgT1BUX09SREVSKSAmJgorKyAgICAgICgoZGFlbW9uLT5vcHRpb25zICYgT1BUX09SREVSKSAhPSAwKSAmJgorICAgICAgIGZvcndhcmQtPmZvcndhcmRhbGwgPT0gMCkKKyAgICAgLyogZm9yIGJyb2tlbiBzZXJ2ZXJzLCBhdHRlbXB0IHRvIHNlbmQgdG8gYW5vdGhlciBvbmUuICovCisgICAgIHsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvd2VibWluL1JFQURNRSBiL2NvbnRyaWIvd2VibWluL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YThmOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi93ZWJtaW4vUkVBRE1FCkBAIC0wLDAgKzEsNTQgQEAKKworVGhpcyBpcyB0aGUgUkVBRE1FIGZvciB0aGUgRE5TbWFzcSB3ZWJtaW4gbW9kdWxlLgorCitQcm9ibGVtczoKKworMSkgVGhlcmUncyBvbmx5IGJhc2ljIGVycm9yIGNoZWNraW5nIC0gaWYgeW91IGVudGVyIHNvbWUgYmFkCithZGRyZXNzZXMgb3IgbmFtZXMsIHRoZXkgd2lsbCBnbyBzdHJhaWdodCBpbnRvIHRoZSBjb25maWcgZmlsZQorYWx0aG91Z2ggd2UgZG8gY2hlY2sgZm9yIHRoaW5ncyBsaWtlIElQIGFkZHJlc3NlcyBiZWluZyBvZgordGhlIGNvcnJlY3QgZm9ybSAobm8gbGV0dGVycywgNCBncm91cHMgb2YgdXAgdG8gMyBkaWdpdHMKK3NlcGFyYXRlZCBieSBkb3RzIGV0YykuIE9uZSB0aGluZyB0aGF0IElTTidUIENIRUNLRUQgRk9SIGlzCit0aGF0IElQIGRvdHRlZCBxdWFkcyBhcmUgYWxsIG51bWJlcnMgPCAyNTYuIEFub3RoZXIgaXMgdGhhdAorbmV0bWFza3MgYXJlIGxvZ2ljYWwgKHlvdSBjb3VsZCBlbnRlciBhIG5ldG1hc2sgb2YgMjU1LjAuMjU1LjAgCitmb3IgZXhhbXBsZSkuIEVzc2VudGlhbGx5LCBpZiBpdCdsbCBwYXNzIHRoZSBjb25maWcgZmlsZQorcmVnZXggc2Nhbm5lciAoYW5kIHRoZSBhYm92ZSBleGFtcGxlcyB3aWxsKSwgaXQgd29uJ3QgYmUgCitmbGFnZ2VkIGFzICJiYWQiIGV2ZW4gaWYgaXQgaXMgYSBiaWcgbm8tbm8gZm9yIGRuc21hc3EgaXRzZWxmLiAKKworMikgQ29kZSBpcyB1Z2x5IGFuZCBhIGtsdWRnZSAtIEkgYWluJ3QgYSBwcm9ncmFtbWVyISBUaGVyZSBhcmUgcHJvYmFibHkgCithIGxvdCBvZiB0aGluZ3MgdGhhdCBjb3VsZCBiZSBkb25lIHRvIHRpZHkgdXAgdGhlIGNvZGUgLSBlZywgCitpdCBwcm9iYWJseSB3b3VsZG4ndCBodXJ0IHRvIG1vdmUgc29tZSBjb21tb24gc3R1ZmYgaW50byB0aGUgbGliIGZpbGUuCisKKzMpIEkndmUgdXNlZCB0aGUgJXRleHQgaGFzaCBhbmQgd3JpdHRlbiBhbiBlbmdsaXNoIGxhbmcgZmlsZSwgYnV0CitJIGFtIG1vbm8tbGluZ3VhbCBzbyBubyBvdGhlciBsYW5ndWFnZSBzdXBwb3J0IGFzIHlldC4KKworNCkgZm9yIHJlYXNvbnMgdW5rbm93biB0byBtZSwgdGhlIGljb24gZG9lcyBub3QgYXBwZWFyIHByb3Blcmx5CitvbiB0aGUgc2VydmVycyBwYWdlIG9mIHdlYm1pbiAoYXQgbGVhc3QgaXQgZG9lc24ndCBmb3IgbWUhKQorCis1KSBpY29ucyBoYXZlIGJlZW4gc2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gdGhlIGlwZmlsdGVyIG1vZHVsZSwKK3NwZWNpZmljYWxseSB0aGUgdXAgYW5kIGRvd24gYXJyb3dzLgorCis2KSBpZiB5b3UgZGVsZXRlIGFuIGl0ZW0sIHRoZSBjb25maWcgZmlsZSB3aWxsIGNvbnRhaW4KK2FuIG90aGVyd2lzZSBlbXB0eSwgYnV0IGNvbW1lbnRlZCBsaW5lLiBUaGlzIG1lYW5zIHRoYXQgaWYKK3lvdSBhZGQgc29tZSBuZXcgc3R1ZmYsIHRoZW4gZGVsZXRlIGl0LCB0aGUgY29uZmlnIGZpbGUKK3dpbGwgaGF2ZSBhIG51bWJlciBvZiBsaW5lcyBhdCB0aGUgZW5kIHRoYXQgYXJlIGp1c3QgY29tbWVudHMuCitUaGVyZWZvcmUsIHRoZSBjb25maWcgZmlsZSBjb3VsZCBwb3NzaWJseSBncm93IHF1aXRlIGxhcmdlLgorCis3KSBOTyBJTkNMVURFIEZJTEVTIQoraWYgeW91IHVzZSBhbiBpbmNsdWRlIGZpbGUsIGl0J2xsIGJlIGZsYWdnZWQgYXMgYW4gZXJyb3IuIAorT0sgaWYgdGhlIGluY2x1ZGUgZmlsZSBsaW5lIGlzIGNvbW1lbnRlZCBvdXQgdGhvdWdoLgorCis4KSBkZXByZWNhdGVkIGxpbmVzIG5vdCBzdXBwb3J0ZWQgKGVnIHVzZXIgYW5kIGdyb3VwKSAtIHRoZXkKK21heSBwcm9kdWNlIGFuIGVycm9yISAodXNlciBhbmQgZ3JvdXAgZG9uJ3QsIGJ1dCB5b3UgY2FuJ3QgY2hhbmdlCit0aGVtKQorCitJT1csIGl0IHdvcmtzLCBpdCdzIGp1c3Qgbm90IHZlcnkgZWxlZ2FudCBhbmQgbm90IHZlcnkgcm9idXN0LgorCitIb3BlIHlvdSBmaW5kIGl0IHVzZWZ1bCB0aG91Z2ggLSBJIGRvLCBhcyBJIHByZXZlbnRzIG1lIGhhdmluZyB0byBldmVyCit3YWRlIHRocm91Z2ggdGhlIGNvbmZpZyBmaWxlIGFuZCBtYW4gcGFnZXMgYWdhaW4uCisKK0lmIHlvdSBtb2RpZnkgaXQsIG9yIGFkZCBhIGxhbmd1YWdlIGZpbGUsIGFuZCB5b3UgaGF2ZSBhIHNwYXJlIG1vbWVudCwKK3BsZWFzZSBlLW1haWwgbWUgLSBJIHdvbid0IGJlIHVwc2V0IGF0IGFsbCBpZiB5b3UgZml4IG15IHBvb3IgY29kaW5nIQorKHJhdGhlciB0aGUgb3Bwb3NpdGUgLSBJJ2QgYmUgcGxlYXNlZCBzb21lb25lIGZvdW5kIGl0IHVzZWZ1bGwpCisKK0NoZWVycywKKwlOZWlsIEZpc2hlciA8bmVpbEBtYWduZWNvci5jb20uYXU+CmRpZmYgLS1naXQgYS9jb250cmliL3dlYm1pbi9kbnNtYXNxLndibSBiL2NvbnRyaWIvd2VibWluL2Ruc21hc3Eud2JtCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczMDdlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3dlYm1pbi9kbnNtYXNxLndibQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb250cmliL3dydC9NYWtlZmlsZSBiL2NvbnRyaWIvd3J0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4ZThkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3dydC9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKK0NGTEFHUz89IC1PMiAtV2FsbCAtVworCithbGw6IGRoY3BfcmVsZWFzZSBkaGNwX2xlYXNlX3RpbWUKKworY2xlYW46CisJcm0gLWYgKn4gKi5vIGNvcmUgZGhjcF9yZWxlYXNlIGRoY3BfbGVhc2VfdGltZQpkaWZmIC0tZ2l0IGEvY29udHJpYi93cnQvUkVBRE1FIGIvY29udHJpYi93cnQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2MjA0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3dydC9SRUFETUUKQEAgLTAsMCArMSw4MSBAQAorVGhpcyBzY3JpcHQgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHBlcnNpc3RlbnQgbGVhc2VzIG9uIG9wZW5XUlQsIERELVdSVAorZXRjLiBQZXJzaXN0ZW50IGxlYXNlcyBhcmUgZ29vZDogaWYgdGhlIGxlYXNlIGRhdGFiYXNlIGlzIGxvc3Qgb24gYQorcmVib290LCB0aGVuIGl0IHdpbGwgZXZlbnR1YWxseSBiZSByZXN0b3JlZCBhcyBob3N0cyByZW5ldyB0aGVpcgorbGVhc2VzLiBVbnRpbCBhIGhvc3QgcmVuZXdzICh3aGljaCBtYXkgdGFrZSBob3Vycy9kYXlzKSBpdCB3aWxsCitub3QgZXhpc3QgaW4gdGhlIEROUyBpZiBkbnNtYXNxJ3MgREROUyBmdW5jdGlvbiBpcyBpbiB1c2UuCisKKypXUlQgc3lzdGVtcyByZW1vdW50IGFsbCBub24tdm9sYXRpbGUgZmlsZXlzdGVtcyByZWFkLW9ubHkgYWZ0ZXIgYm9vdCwKK3NvIHRoZSBub3JtYWwgbGVhc2VmaWxlIHdpbGwgbm90IHdvcmsuIFRoZXkgZG8sIGhvd2V2ZXIgaGF2ZSBOVgorc3RvcmFnZSwgYWNjZXNzZWQgd2l0aCB0aGUgbnZyYW0gY29tbWFuZDoKKworL3Vzci9saWIgIyAgbnZyYW0KK3VzYWdlOiBudnJhbSBbZ2V0IG5hbWVdIFtzZXQgbmFtZT12YWx1ZV0gW3Vuc2V0IG5hbWVdIFtzaG93XQorCitUaGUgcHJpbmNpcGxlIGlzIHRoYXQgbGVhc2VzIGFyZSBrZXB0IGluIE5WIHZhcmlhYmxlIHdpdGggZGF0YQorY29ycmVzcG9uZGluZyB0byB0aGUgbGluZSBpbiBhIGxlYXNlZmlsZToKKworZG5zbWFzcV9sZWFzZV8xOTIuMTY4LjEuNTY9MzYwMCAwMDo0MTo0YTowNTo4MDo3NCAxOTIuMTY4LjEuNTYgKiAqCisKK0J5IGdpdmluZyBkbnNtYXNxIHRoZSBsZWFzZWZpbGUtcm8gY29tbWFuZCwgaXQgbm8gbG9uZ2VyIGNyZWF0ZXMgb3Igd3JpdGVzIGEKK2xlYXNlZmlsZTsgcmVzcG9uc2liaWxpdHkgZm9yIG1haW50YWluaW5nIHRoZSBsZWFzZSBkYXRhYmFzZSB0cmFuc2ZlcnMKK3RvIHRoZSBsZWFzZSBjaGFuZ2Ugc2NyaXB0LiBBdCBzdGFydHVwLCBpbiBsZWFzZWZpbGUtcm8gbW9kZSwKK2Ruc21hc3Egd2lsbCBydW4KKworIjxsZWFzZV9jaGFuZ2Vfc2NyaXB0PiBpbml0IiAKKworYW5kIHJlYWQgd2hhdGV2ZXIgdGhhdCBjb21tYW5kIHNwaXRzIG91dCwgZXhwZWN0aW5nIGl0IHRvCitiZSBpbiBkbnNtYXNxIGxlYXNlZmlsZSBmb3JtYXQuCisKK1NvIHRoZSBsZWFzZSBjaGFuZ2Ugc2NyaXB0LCBnaXZlbiAiaW5pdCIgYXMgYXJndlsxXSB3aWxsIAorc3VjayBleGlzdGluZyBsZWFzZXMgb3V0IG9mIHRoZSBOVlJBTSBhbmQgZW1pdCB0aGVtIGZyb20KK3N0ZG91dCBpbiB0aGUgY29ycmVjdCBmb3JtYXQuCisKK1RoZSBzZWNvbmQgcGFydCBvZiB0aGUgcHJvYmxlbSBpcyBrZWVwaW5nIHRoZSBOVlJBTSB1cC10by1kYXRlOiB0aGlzCitpcyBkb25lIGJ5IHRoZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0IHdoaWNoIGRuc21hc3EgcnVucyB3aGVuIGEgbGVhc2UgaXMKK3VwZGF0ZWQuIFdoZW4gaXQgaXMgY2FsbGVkIHdpdGggYXJndlsxXSBhcyAib2xkIiwgImFkZCIsIG9yICJkZWwiCitpdCB1cGRhdGVzIHRoZSByZWxldmFudCBudnJhbSBlbnRyeS4KKworU28sIGRuc21hc3Egc2hvdWxkIGJlIHJ1biBhcyA6CisKK2Ruc21hc3EgLS1sZWFzZWZpbGUtcm8gLS1kaGNwLXNjcmlwdD0vcGF0aC90by9sZWFzZV91cGRhdGUuc2gKKworb3IgdGhlIHNhbWUgZmxhZ3MgYWRkZWQgdG8gL2V0Yy9kbnNtYXNxLmNvbmYKKworCisKK05vdGVzOiAKKworVGhpcyBuZWVkcyBkbnNtYXNxLTIuMzMgb3IgbGF0ZXIgdG8gd29yay4KKworVGhpcyB0ZWNobmlxdWUgd2lsbCB3b3JrIHdpdGgsIG9yIHdpdGhvdXQsIGNvbXBpbGF0aW9uIHdpdGgKK0hBVkVfQlJPS0VOX1JUQy4gQ29tcGlsaW5nIHdpdGggSEFWRV9CUk9LRU5fUlRDIGlzCitfaGlnaGx5X3JlY29tbWVuZGVkXyBmb3IgdGhpcyBhcHBsaWNhdGlvbiBzaW5jZSBpcyBhdm9pZHMgcHJvYmxlbXMKK3dpdGggdGhlIHN5c3RlbSBjbG9jayBiZWluZyB3YXJwZWQgYnkgTlRQLCBhbmQgaXQgdmFzdGx5IHJlZHVjZXMgdGhlCitudW1iZXIgb2Ygd3JpdGVzIHRvIHRoZSBOVlJBTS4gV2l0aCBIQVZFX0JST0tFTl9SVEMsIE5WUkFNIGlzIHVwZGF0ZWQKK29ubHkgd2hlbiBhIGxlYXNlIGlzIGNyZWF0ZWQgb3IgZGVzdHJveWVkOyB3aXRob3V0IGl0LCBhIHdyaXRlIG9jY3VycworZXZlcnkgdGltZSBhIGxlYXNlIGlzIHJlbmV3ZWQuCisKK0l0IHByb2JhYmx5IG1ha2VzIHNlbnNlIHRvIHJlc3RyaWN0IHRoZSBudW1iZXIgb2YgYWN0aXZlIERIQ1AgbGVhc2VzCit0byBhbiBhcHByb3ByaWF0ZSBudW1iZXIgdXNpbmcgZGhjcC1sZWFzZS1tYXguIE9uIGEgbmV3IEREX1dSVCBzeXN0ZW0sCit0aGVyZSBhcmUgYWJvdXQgMTBLIGJ5dGVzIGZyZWUgaW4gdGhlIE5WUkFNLiBFYWNoIGxlYXNlIHJlY29yZCBpcworYWJvdXQgMTAwIGJ5dGVzLCBzbyByZXN0cmljdGluZyB0aGUgbnVtYmVyIG9mIGxlYXNlcyB0byA1MCB3aWxsIGxpbWl0Cit1c2UgdG8gaGFsZiB0aGF0LiAoVGhlIGRlZmF1bHQgbGltaXQgaW4gdGhlIGRpc3RyaWJ1dGVkIHNvdXJjZSBpcyAxNTApCisKK0FueSBVSSBzY3JpcHQgd2hpY2ggcmVhZHMgdGhlIGRuc21hc3EgbGVhc2VmaWxlIHdpbGwgaGF2ZSB0byBiZQorYW1tZW5kZWQsIHByb2JhYmx5IGJ5IGNoYW5naW5nIGl0IHRvIHJlYWQgdGhlIG91dHB1dCBvZiAKK2BsZWFzZV91cGRhdGUgaW5pdGAgaW5zdGVhZC4KKyAKKworVGhhbmtzOgorCitUbyBTdGV2ZSBIb3JiYWNodWsgZm9yIGNoZWNrcyBvbiB0aGUgc2NyaXB0IGFuZCBkZWJ1Z2dpbmcgYmV5b25kIHRoZSAKK2NhbGwgb2YgZHV0eS4KKworCitTaW1vbiBLZWxsZXkKK0ZyaSBKdWwgMjggMTE6NTE6MTMgQlNUIDIwMDYKKworCisKKworCmRpZmYgLS1naXQgYS9jb250cmliL3dydC9kaGNwX2xlYXNlX3RpbWUuYyBiL2NvbnRyaWIvd3J0L2RoY3BfbGVhc2VfdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4NjZiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3dydC9kaGNwX2xlYXNlX3RpbWUuYwpAQCAtMCwwICsxLDIxNCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDA3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKi8KKworLyogZGhjcF9sZWFzZV90aW1lIDxhZGRyZXNzPiAqLworCisvKiBTZW5kIGEgREhDUElORk9STSBtZXNzYWdlIHRvIGEgZG5zbWFzcSBzZXJ2ZXIgcnVubmluZyBvbiB0aGUgbG9jYWwgaG9zdAorICAgYW5kIHByaW50ICh0byBzdGRvdXQpIHRoZSB0aW1lIHJlbWFpbmluZyBpbiBhbnkgbGVhc2UgZm9yIHRoZSBnaXZlbgorICAgYWRkcmVzcy4gVGhlIHRpbWUgaXMgZ2l2ZW4gYXMgc3RyaW5nIHByaW50ZWQgdG8gc3Rkb3V0LgorCisgICBJZiBhbiBlcnJvciBvY2N1cnMgb3Igbm8gbGVhc2UgZXhpc3RzIGZvciB0aGUgZ2l2ZW4gYWRkcmVzcywgCisgICBub3RoaW5nIGlzIHNlbnQgdG8gc3Rkb3V0IGEgbWVzc2FnZSBpcyBzZW50IHRvIHN0ZGVyciBhbmQgYQorICAgbm9uLXplcm8gZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KKworICAgUmVxdWlyZXMgZG5zbWFzcSAyLjQwIG9yIGxhdGVyLiAKKyovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPG5ldC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjZGVmaW5lIERIQ1BfQ0hBRERSX01BWCAgICAgICAgICAxNgorI2RlZmluZSBCT09UUkVRVUVTVCAgICAgICAgICAgICAgMQorI2RlZmluZSBESENQX0NPT0tJRSAgICAgICAgICAgICAgMHg2MzgyNTM2MworI2RlZmluZSBPUFRJT05fUEFEICAgICAgICAgICAgICAgMAorI2RlZmluZSBPUFRJT05fTEVBU0VfVElNRSAgICAgICAgNTEKKyNkZWZpbmUgT1BUSU9OX09WRVJMT0FEICAgICAgICAgIDUyCisjZGVmaW5lIE9QVElPTl9NRVNTQUdFX1RZUEUgICAgICA1MworI2RlZmluZSBPUFRJT05fRU5EICAgICAgICAgICAgICAgMjU1CisjZGVmaW5lIERIQ1BJTkZPUk0gICAgICAgICAgICAgICA4CisjZGVmaW5lIERIQ1BfU0VSVkVSX1BPUlQgICAgICAgICA2NworCisjZGVmaW5lIG9wdGlvbl9sZW4ob3B0KSAoKGludCkoKCh1bnNpZ25lZCBjaGFyICopKG9wdCkpWzFdKSkKKyNkZWZpbmUgb3B0aW9uX3B0cihvcHQpICgodm9pZCAqKSYoKCh1bnNpZ25lZCBjaGFyICopKG9wdCkpWzJdKSkKKworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKworc3RydWN0IGRoY3BfcGFja2V0IHsKKyAgdTggb3AsIGh0eXBlLCBobGVuLCBob3BzOworICB1MzIgeGlkOworICB1MTYgc2VjcywgZmxhZ3M7CisgIHN0cnVjdCBpbl9hZGRyIGNpYWRkciwgeWlhZGRyLCBzaWFkZHIsIGdpYWRkcjsKKyAgdTggY2hhZGRyW0RIQ1BfQ0hBRERSX01BWF0sIHNuYW1lWzY0XSwgZmlsZVsxMjhdOworICB1MzIgY29va2llOworICB1bnNpZ25lZCBjaGFyIG9wdGlvbnNbMzA4XTsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpvcHRpb25fZmluZDEodW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgY2hhciAqZW5kLCBpbnQgb3B0LCBpbnQgbWluc2l6ZSkKK3sKKyAgd2hpbGUgKCpwICE9IE9QVElPTl9FTkQpIAorICAgIHsKKyAgICAgIGlmIChwID49IGVuZCkKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8qIG1hbGZvcm1lZCBwYWNrZXQgKi8KKyAgICAgIGVsc2UgaWYgKCpwID09IE9QVElPTl9QQUQpCisgICAgICAgIHArKzsKKyAgICAgIGVsc2UgCisgICAgICAgIHsgCisgICAgICAgICAgaW50IG9wdF9sZW47CisgICAgICAgICAgaWYgKHAgPj0gZW5kIC0gMikKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAvKiBtYWxmb3JtZWQgcGFja2V0ICovCisgICAgICAgICAgb3B0X2xlbiA9IG9wdGlvbl9sZW4ocCk7CisgICAgICAgICAgaWYgKHAgPj0gZW5kIC0gKDIgKyBvcHRfbGVuKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAvKiBtYWxmb3JtZWQgcGFja2V0ICovCisgICAgICAgICAgaWYgKCpwID09IG9wdCAmJiBvcHRfbGVuID49IG1pbnNpemUpCisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgICBwICs9IG9wdF9sZW4gKyAyOworICAgICAgICB9CisgICAgfQorICAKKyAgcmV0dXJuIG9wdCA9PSBPUFRJT05fRU5EID8gcCA6IE5VTEw7Cit9CisgCitzdGF0aWMgdW5zaWduZWQgY2hhciAqb3B0aW9uX2ZpbmQoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzaXplX3Qgc2l6ZSwgaW50IG9wdF90eXBlLCBpbnQgbWluc2l6ZSkKK3sKKyAgdW5zaWduZWQgY2hhciAqcmV0LCAqb3ZlcmxvYWQ7CisgIAorICAvKiBza2lwIG92ZXIgREhDUCBjb29raWU7ICovCisgIGlmICgocmV0ID0gb3B0aW9uX2ZpbmQxKCZtZXNzLT5vcHRpb25zWzBdLCAoKHVuc2lnbmVkIGNoYXIgKiltZXNzKSArIHNpemUsIG9wdF90eXBlLCBtaW5zaXplKSkpCisgICAgcmV0dXJuIHJldDsKKworICAvKiBsb29rIGZvciBvdmVybG9hZCBvcHRpb24uICovCisgIGlmICghKG92ZXJsb2FkID0gb3B0aW9uX2ZpbmQxKCZtZXNzLT5vcHRpb25zWzBdLCAoKHVuc2lnbmVkIGNoYXIgKiltZXNzKSArIHNpemUsIE9QVElPTl9PVkVSTE9BRCwgMSkpKQorICAgIHJldHVybiBOVUxMOworICAKKyAgLyogQ2FuIHdlIGxvb2sgaW4gZmlsZW5hbWUgYXJlYSA/ICovCisgIGlmICgob3ZlcmxvYWRbMl0gJiAxKSAmJgorICAgICAgKHJldCA9IG9wdGlvbl9maW5kMSgmbWVzcy0+ZmlsZVswXSwgJm1lc3MtPmZpbGVbMTI4XSwgb3B0X3R5cGUsIG1pbnNpemUpKSkKKyAgICByZXR1cm4gcmV0OworCisgIC8qIGZpbmFsbHkgdHJ5IHNuYW1lIGFyZWEgKi8KKyAgaWYgKChvdmVybG9hZFsyXSAmIDIpICYmCisgICAgICAocmV0ID0gb3B0aW9uX2ZpbmQxKCZtZXNzLT5zbmFtZVswXSwgJm1lc3MtPnNuYW1lWzY0XSwgb3B0X3R5cGUsIG1pbnNpemUpKSkKKyAgICByZXR1cm4gcmV0OworCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG9wdGlvbl91aW50KHVuc2lnbmVkIGNoYXIgKm9wdCwgaW50IHNpemUpCit7CisgIC8qIHRoaXMgd29ycmllcyBhYm91dCB1bmFsaWduZWQgZGF0YSBhbmQgYnl0ZSBvcmRlciAqLworICB1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKyAgaW50IGk7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSBvcHRpb25fcHRyKG9wdCk7CisgIAorICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgIHJldCA9IChyZXQgPDwgOCkgfCAqcCsrOworCisgIHJldHVybiByZXQ7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sgCisgIHN0cnVjdCBpbl9hZGRyIGxlYXNlOworICBzdHJ1Y3QgZGhjcF9wYWNrZXQgcGFja2V0OworICB1bnNpZ25lZCBjaGFyICpwID0gcGFja2V0Lm9wdGlvbnM7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiBkZXN0OworICBpbnQgZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOworICBzc2l6ZV90IHJjOworICAKKyAgaWYgKGFyZ2MgPCAyKQorICAgIHsgCisgICAgICBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBkaGNwX2xlYXNlX3RpbWUgPGFkZHJlc3M+XG4iKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgIGlmIChmZCA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoImNhbm5vdCBjcmVhdGUgc29ja2V0Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAKKyAgbGVhc2Uuc19hZGRyID0gaW5ldF9hZGRyKGFyZ3ZbMV0pOworICAgCisgIG1lbXNldCgmcGFja2V0LCAwLCBzaXplb2YocGFja2V0KSk7CisgCisgIHBhY2tldC5obGVuID0gMDsKKyAgcGFja2V0Lmh0eXBlID0gMDsKKworICBwYWNrZXQub3AgPSBCT09UUkVRVUVTVDsKKyAgcGFja2V0LmNpYWRkciA9IGxlYXNlOworICBwYWNrZXQuY29va2llID0gaHRvbmwoREhDUF9DT09LSUUpOworCisgICoocCsrKSA9IE9QVElPTl9NRVNTQUdFX1RZUEU7CisgICoocCsrKSA9IDE7CisgICoocCsrKSA9IERIQ1BJTkZPUk07CisKKyAgKihwKyspID0gT1BUSU9OX0VORDsKKyAKKyAgZGVzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsgCisgIGRlc3Quc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKCIxMjcuMC4wLjEiKTsKKyAgZGVzdC5zaW5fcG9ydCA9IG50b2hzKERIQ1BfU0VSVkVSX1BPUlQpOworICAKKyAgaWYgKHNlbmR0byhmZCwgJnBhY2tldCwgc2l6ZW9mKHBhY2tldCksIDAsIAorCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZkZXN0LCBzaXplb2YoZGVzdCkpID09IC0xKQorICAgIHsKKyAgICAgIHBlcnJvcigic2VuZHRvIGZhaWxlZCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgYWxhcm0oMyk7IC8qIG5vZGR5IHRpbWVvdXQuICovCisKKyAgcmMgPSByZWN2KGZkLCAmcGFja2V0LCBzaXplb2YocGFja2V0KSwgMCk7CisgIAorICBpZiAocmMgPCAoc3NpemVfdCkoc2l6ZW9mKHBhY2tldCkgLSBzaXplb2YocGFja2V0Lm9wdGlvbnMpKSkKKyAgICB7CisgICAgICBwZXJyb3IoInJlY3YgZmFpbGVkIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworICBpZiAoKHAgPSBvcHRpb25fZmluZCgmcGFja2V0LCAoc2l6ZV90KXJjLCBPUFRJT05fTEVBU0VfVElNRSwgNCkpKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCB0ID0gb3B0aW9uX3VpbnQocCwgNCk7CisgICAgICBpZiAodCA9PSAweGZmZmZmZmZmKQorCXByaW50ZigiaW5maW5pdGUiKTsKKyAgICAgIGVsc2UKKwl7CisJICB1bnNpZ25lZCBpbnQgeDsKKwkgIGlmICgoeCA9IHQvODY0MDApKQorCSAgICBwcmludGYoIiVkZCIsIHgpOworCSAgaWYgKCh4ID0gKHQvMzYwMCklMjQpKQorCSAgICBwcmludGYoIiVkaCIsIHgpOworCSAgaWYgKCh4ID0gKHQvNjApJTYwKSkKKwkgICAgcHJpbnRmKCIlZG0iLCB4KTsKKwkgIGlmICgoeCA9IHQlNjApKQorCSAgICBwcmludGYoIiVkcyIsIHgpOworCX0KKyAgICAgIHJldHVybiAwOworICAgIH0KKworICByZXR1cm4gMTsgLyogbm8gbGVhc2UgKi8KK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvd3J0L2RoY3BfcmVsZWFzZS5jIGIvY29udHJpYi93cnQvZGhjcF9yZWxlYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzY2ZDNhMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvd3J0L2RoY3BfcmVsZWFzZS5jCkBAIC0wLDAgKzEsMzMxIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqLworCisvKiBkaGNwX3JlbGVhc2UgPGludGVyZmFjZT4gPGFkZHJlc3M+IDxNQUMgYWRkcmVzcz4gPGNsaWVudF9pZD4KKyAgIE1VU1QgYmUgcnVuIGFzIHJvb3QgLSB3aWxsIGZhaWwgb3RoZXJ3aXNlLiAqLworCisvKiBTZW5kIGEgREhDUFJFTEVBU0UgbWVzc2FnZSB2aWEgdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UgCisgICB0byB0ZWxsIHRoZSBsb2NhbCBESENQIHNlcnZlciB0byBkZWxldGUgYSBwYXJ0aWN1bGFyIGxlYXNlLiAKKyAgIAorICAgVGhlIGludGVyZmFjZSBhcmd1bWVudCBpcyB0aGUgaW50ZXJmYWNlIGluIHdoaWNoIGEgREhDUAorICAgcmVxdWVzdCBfd291bGRfIGJlIHJlY2VpdmVkIGlmIGl0IHdhcyBjb21pbmcgZnJvbSB0aGUgY2xpZW50LCAKKyAgIHJhdGhlciB0aGFuIGJlaW5nIGZha2VkIHVwIGhlcmUuCisgICAKKyAgIFRoZSBhZGRyZXNzIGFyZ3VtZW50IGlzIGEgZG90dGVkLXF1YWQgSVAgYWRkcmVzc2VzIGFuZCBtYW5kYXRvcnkuIAorICAgCisgICBUaGUgTUFDIGFkZHJlc3MgaXMgY29sb24gc2VwYXJhdGVkIGhleCwgYW5kIGlzIG1hbmRhdG9yeS4gSXQgbWF5IGJlIAorICAgcHJlZml4ZWQgYnkgYW4gYWRkcmVzcy10eXBlIGJ5dGUgZm9sbG93ZWQgYnkgLSwgZWcKKworICAgMTAtMTE6MjI6MzM6NDQ6NTU6NjYKKworICAgYnV0IGlmIHRoZSBhZGRyZXNzLXR5cGUgYnl0ZSBpcyBtaXNzaW5nIGl0IGlzIGFzc3VtZWQgdG8gYmUgMSwgdGhlIHR5cGUgCisgICBmb3IgZXRoZXJuZXQuIFRoaXMgZW5jb2RpbmcgaXMgdGhlIG9uZSB1c2VkIGluIGRuc21hc3EgbGVhc2UgZmlsZXMuCisKKyAgIFRoZSBjbGllbnQtaWQgaXMgb3B0aW9uYWwuIElmIGl0IGlzICIqIiB0aGVuIGl0IHRyZWF0ZWQgYXMgYmVpbmcgbWlzc2luZy4KKyovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPG5ldC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjZGVmaW5lIERIQ1BfQ0hBRERSX01BWCAgICAgICAgICAxNgorI2RlZmluZSBCT09UUkVRVUVTVCAgICAgICAgICAgICAgMQorI2RlZmluZSBESENQX0NPT0tJRSAgICAgICAgICAgICAgMHg2MzgyNTM2MworI2RlZmluZSBPUFRJT05fU0VSVkVSX0lERU5USUZJRVIgNTQKKyNkZWZpbmUgT1BUSU9OX0NMSUVOVF9JRCAgICAgICAgIDYxCisjZGVmaW5lIE9QVElPTl9NRVNTQUdFX1RZUEUgICAgICA1MworI2RlZmluZSBPUFRJT05fRU5EICAgICAgICAgICAgICAgMjU1CisjZGVmaW5lIERIQ1BSRUxFQVNFICAgICAgICAgICAgICA3CisjZGVmaW5lIERIQ1BfU0VSVkVSX1BPUlQgICAgICAgICA2NworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKworc3RydWN0IGRoY3BfcGFja2V0IHsKKyAgdTggb3AsIGh0eXBlLCBobGVuLCBob3BzOworICB1MzIgeGlkOworICB1MTYgc2VjcywgZmxhZ3M7CisgIHN0cnVjdCBpbl9hZGRyIGNpYWRkciwgeWlhZGRyLCBzaWFkZHIsIGdpYWRkcjsKKyAgdTggY2hhZGRyW0RIQ1BfQ0hBRERSX01BWF0sIHNuYW1lWzY0XSwgZmlsZVsxMjhdOworICB1MzIgY29va2llOworICB1bnNpZ25lZCBjaGFyIG9wdGlvbnNbMzA4XTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW92ZWMgaW92OworCitzdGF0aWMgaW50IGV4cGFuZF9idWYoc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBzaXplKQoreworICB2b2lkICpuZXc7CisKKyAgaWYgKHNpemUgPD0gaW92LT5pb3ZfbGVuKQorICAgIHJldHVybiAxOworCisgIGlmICghKG5ldyA9IG1hbGxvYyhzaXplKSkpCisgICAgeworICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgaWYgKGlvdi0+aW92X2Jhc2UpCisgICAgeworICAgICAgbWVtY3B5KG5ldywgaW92LT5pb3ZfYmFzZSwgaW92LT5pb3ZfbGVuKTsKKyAgICAgIGZyZWUoaW92LT5pb3ZfYmFzZSk7CisgICAgfQorCisgIGlvdi0+aW92X2Jhc2UgPSBuZXc7CisgIGlvdi0+aW92X2xlbiA9IHNpemU7CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG5ldGxpbmtfcmVjdihpbnQgZmQpCit7CisgIHN0cnVjdCBtc2doZHIgbXNnOworICBzc2l6ZV90IHJjOworCisgIG1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisgIG1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisgIG1zZy5tc2dfbmFtZSA9IE5VTEw7CisgIG1zZy5tc2dfbmFtZWxlbiA9IDA7CisgIG1zZy5tc2dfaW92ID0gJmlvdjsKKyAgbXNnLm1zZ19pb3ZsZW4gPSAxOworICAgIAorICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBtc2cubXNnX2ZsYWdzID0gMDsKKyAgICAgIHdoaWxlICgocmMgPSByZWN2bXNnKGZkLCAmbXNnLCBNU0dfUEVFSykpID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKyAgICAgIAorICAgICAgLyogMi4yLnggZG9lc24ndCBzdXBvcnQgTVNHX1BFRUsgYXQgYWxsLCByZXR1cm5pbmcgRU9QTk9UU1VQUCwgc28gd2UganVzdCBncmFiIGEgCisgICAgICAgICBiaWcgYnVmZmVyIGFuZCBwcmF5IGluIHRoYXQgY2FzZS4gKi8KKyAgICAgIGlmIChyYyA9PSAtMSAmJiBlcnJubyA9PSBFT1BOT1RTVVBQKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCFleHBhbmRfYnVmKCZpb3YsIDIwMDApKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAKKyAgICAgIGlmIChyYyA9PSAtMSB8fCAhKG1zZy5tc2dfZmxhZ3MgJiBNU0dfVFJVTkMpKQorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgaWYgKCFleHBhbmRfYnVmKCZpb3YsIGlvdi5pb3ZfbGVuICsgMTAwKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAvKiBmaW5hbGx5LCByZWFkIGl0IGZvciByZWFsICovCisgIHdoaWxlICgocmMgPSByZWN2bXNnKGZkLCAmbXNnLCAwKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworICAKKyAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHBhcnNlX2hleChjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LCBpbnQgbWF4bGVuLCBpbnQgKm1hY190eXBlKQoreworICBpbnQgaSA9IDA7CisgIGNoYXIgKnI7CisgICAgCisgIGlmIChtYWNfdHlwZSkKKyAgICAqbWFjX3R5cGUgPSAwOworICAKKyAgd2hpbGUgKG1heGxlbiA9PSAtMSB8fCBpIDwgbWF4bGVuKQorICAgIHsKKyAgICAgIGZvciAociA9IGluOyAqciAhPSAwICYmICpyICE9ICc6JyAmJiAqciAhPSAnLSc7IHIrKyk7CisgICAgICBpZiAoKnIgPT0gMCkKKyAgICAgICAgbWF4bGVuID0gaTsKKyAgICAgIAorICAgICAgaWYgKHIgIT0gaW4gKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCpyID09ICctJyAmJiBpID09IDAgJiYgbWFjX3R5cGUpCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKnIgPSAwOworICAgICAgICAgICAgICAqbWFjX3R5cGUgPSBzdHJ0b2woaW4sIE5VTEwsIDE2KTsKKyAgICAgICAgICAgICAgbWFjX3R5cGUgPSBOVUxMOworICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAqciA9IDA7CisJICAgICAgb3V0W2ldID0gc3RydG9sKGluLCBOVUxMLCAxNik7CisgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgaW4gPSByKzE7CisgICAgfQorICAgIHJldHVybiBpOworfQorCitzdGF0aWMgaW50IGlzX3NhbWVfbmV0KHN0cnVjdCBpbl9hZGRyIGEsIHN0cnVjdCBpbl9hZGRyIGIsIHN0cnVjdCBpbl9hZGRyIG1hc2spCit7CisgIHJldHVybiAoYS5zX2FkZHIgJiBtYXNrLnNfYWRkcikgPT0gKGIuc19hZGRyICYgbWFzay5zX2FkZHIpOworfQorCitzdGF0aWMgc3RydWN0IGluX2FkZHIgZmluZF9pbnRlcmZhY2Uoc3RydWN0IGluX2FkZHIgY2xpZW50LCBpbnQgZmQsIGludCBpbmRleCkKK3sKKyAgc3RydWN0IHNvY2thZGRyX25sIGFkZHI7CisgIHN0cnVjdCBubG1zZ2hkciAqaDsKKyAgc3NpemVfdCBsZW47CisgCisgIHN0cnVjdCB7CisgICAgc3RydWN0IG5sbXNnaGRyIG5saDsKKyAgICBzdHJ1Y3QgcnRnZW5tc2cgZzsgCisgIH0gcmVxOworCisgIGFkZHIubmxfZmFtaWx5ID0gQUZfTkVUTElOSzsKKyAgYWRkci5ubF9wYWQgPSAwOworICBhZGRyLm5sX2dyb3VwcyA9IDA7CisgIGFkZHIubmxfcGlkID0gMDsgLyogYWRkcmVzcyB0byBrZXJuZWwgKi8KKworICByZXEubmxoLm5sbXNnX2xlbiA9IHNpemVvZihyZXEpOworICByZXEubmxoLm5sbXNnX3R5cGUgPSBSVE1fR0VUQUREUjsKKyAgcmVxLm5saC5ubG1zZ19mbGFncyA9IE5MTV9GX1JPT1QgfCBOTE1fRl9NQVRDSCB8IE5MTV9GX1JFUVVFU1QgfCBOTE1fRl9BQ0s7IAorICByZXEubmxoLm5sbXNnX3BpZCA9IDA7CisgIHJlcS5ubGgubmxtc2dfc2VxID0gMTsKKyAgcmVxLmcucnRnZW5fZmFtaWx5ID0gQUZfSU5FVDsgCisKKyAgaWYgKHNlbmR0byhmZCwgKHZvaWQgKikmcmVxLCBzaXplb2YocmVxKSwgMCwgCisJICAgICAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSkgPT0gLTEpCisgICAgeworICAgICAgcGVycm9yKCJzZW5kdG8gZmFpbGVkIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmICgobGVuID0gbmV0bGlua19yZWN2KGZkKSkgPT0gLTEpCisJeworCSAgcGVycm9yKCJuZXRsaW5rIik7CisJICBleGl0KDEpOworCX0KKworICAgICAgZm9yIChoID0gKHN0cnVjdCBubG1zZ2hkciAqKWlvdi5pb3ZfYmFzZTsgTkxNU0dfT0soaCwgKHNpemVfdClsZW4pOyBoID0gTkxNU0dfTkVYVChoLCBsZW4pKQorCWlmIChoLT5ubG1zZ190eXBlID09IE5MTVNHX0RPTkUpCisJICBleGl0KDApOworCWVsc2UgaWYgKGgtPm5sbXNnX3R5cGUgPT0gUlRNX05FV0FERFIpCisgICAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IGlmYWRkcm1zZyAqaWZhID0gTkxNU0dfREFUQShoKTsgIAorICAgICAgICAgICAgc3RydWN0IHJ0YXR0ciAqcnRhOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbjEgPSBoLT5ubG1zZ19sZW4gLSBOTE1TR19MRU5HVEgoc2l6ZW9mKCppZmEpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlmYS0+aWZhX2luZGV4ID09IGluZGV4ICYmIGlmYS0+aWZhX2ZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgYWRkcjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBuZXRtYXNrLnNfYWRkciA9IGh0b25sKDB4ZmZmZmZmZmYgPDwgKDMyIC0gaWZhLT5pZmFfcHJlZml4bGVuKSk7CisgICAgICAgICAgICAgICAgYWRkci5zX2FkZHIgPSAwOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAocnRhID0gSUZBX1JUQShpZmEpOyBSVEFfT0socnRhLCBsZW4xKTsgcnRhID0gUlRBX05FWFQocnRhLCBsZW4xKSkKKwkJICBpZiAocnRhLT5ydGFfdHlwZSA9PSBJRkFfTE9DQUwpCisJCSAgICBhZGRyID0gKigoc3RydWN0IGluX2FkZHIgKikocnRhKzEpKTsKKwkJCisgICAgICAgICAgICAgICAgaWYgKGFkZHIuc19hZGRyICYmIGlzX3NhbWVfbmV0KGFkZHIsIGNsaWVudCwgbmV0bWFzaykpCisJCSAgcmV0dXJuIGFkZHI7CisJICAgICAgfQorCSAgfQorICAgIH0KKyAKKyAgZXhpdCgwKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreyAKKyAgc3RydWN0IGluX2FkZHIgc2VydmVyLCBsZWFzZTsKKyAgaW50IG1hY190eXBlOworICBzdHJ1Y3QgZGhjcF9wYWNrZXQgcGFja2V0OworICB1bnNpZ25lZCBjaGFyICpwID0gcGFja2V0Lm9wdGlvbnM7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiBkZXN0OworICBzdHJ1Y3QgaWZyZXEgaWZyOworICBpbnQgZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOworICBpbnQgbmwgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcsIE5FVExJTktfUk9VVEUpOworICBzdHJ1Y3QgaW92ZWMgaW92OworIAorICBpb3YuaW92X2xlbiA9IDIwMDsKKyAgaW92Lmlvdl9iYXNlID0gbWFsbG9jKGlvdi5pb3ZfbGVuKTsKKworICBpZiAoYXJnYyA8IDQgfHwgYXJnYyA+IDUpCisgICAgeyAKKyAgICAgIGZwcmludGYoc3RkZXJyLCAidXNhZ2U6IGRoY3BfcmVsZWFzZSA8aW50ZXJmYWNlPiA8YWRkcj4gPG1hYz4gWzxjbGllbnRfaWQ+XVxuIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworICBpZiAoZmQgPT0gLTEgfHwgbmwgPT0gLTEpCisgICAgeworICAgICAgcGVycm9yKCJjYW5ub3QgY3JlYXRlIHNvY2tldCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIAorICAvKiBUaGlzIHZvb2RvbyBmYWtlcyB1cCBhIHBhY2tldCBjb21pbmcgZnJvbSB0aGUgY29ycmVjdCBpbnRlcmZhY2UsIHdoaWNoIHJlYWxseSBtYXR0ZXJzIGZvciAKKyAgICAgYSBESENQIHNlcnZlciAqLworICBzdHJjcHkoaWZyLmlmcl9uYW1lLCBhcmd2WzFdKTsKKyAgaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSwgJmlmciwgc2l6ZW9mKGlmcikpID09IC0xKQorICAgIHsKKyAgICAgIHBlcnJvcigiY2Fubm90IHNldHVwIGludGVyZmFjZSIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIAorICAKKyAgbGVhc2Uuc19hZGRyID0gaW5ldF9hZGRyKGFyZ3ZbMl0pOworICBzZXJ2ZXIgPSBmaW5kX2ludGVyZmFjZShsZWFzZSwgbmwsIGlmX25hbWV0b2luZGV4KGFyZ3ZbMV0pKTsKKyAgCisgIG1lbXNldCgmcGFja2V0LCAwLCBzaXplb2YocGFja2V0KSk7CisgCisgIHBhY2tldC5obGVuID0gcGFyc2VfaGV4KGFyZ3ZbM10sIHBhY2tldC5jaGFkZHIsIERIQ1BfQ0hBRERSX01BWCwgJm1hY190eXBlKTsKKyAgaWYgKG1hY190eXBlID09IDApCisgICAgcGFja2V0Lmh0eXBlID0gQVJQSFJEX0VUSEVSOworICBlbHNlCisgICAgcGFja2V0Lmh0eXBlID0gbWFjX3R5cGU7CisKKyAgcGFja2V0Lm9wID0gQk9PVFJFUVVFU1Q7CisgIHBhY2tldC5jaWFkZHIgPSBsZWFzZTsKKyAgcGFja2V0LmNvb2tpZSA9IGh0b25sKERIQ1BfQ09PS0lFKTsKKworICAqKHArKykgPSBPUFRJT05fTUVTU0FHRV9UWVBFOworICAqKHArKykgPSAxOworICAqKHArKykgPSBESENQUkVMRUFTRTsKKworICAqKHArKykgPSBPUFRJT05fU0VSVkVSX0lERU5USUZJRVI7CisgICoocCsrKSA9IHNpemVvZihzZXJ2ZXIpOworICBtZW1jcHkocCwgJnNlcnZlciwgc2l6ZW9mKHNlcnZlcikpOworICBwICs9IHNpemVvZihzZXJ2ZXIpOworCisgIGlmIChhcmdjID09IDUgJiYgc3RyY21wKGFyZ3ZbNF0sICIqIikgIT0gMCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgY2xpZF9sZW4gPSBwYXJzZV9oZXgoYXJndls0XSwgcCsyLCAyNTUsIE5VTEwpOworICAgICAgKihwKyspID0gT1BUSU9OX0NMSUVOVF9JRDsKKyAgICAgICoocCsrKSA9IGNsaWRfbGVuOworICAgICAgcCArPSBjbGlkX2xlbjsKKyAgICB9CisgIAorICAqKHArKykgPSBPUFRJT05fRU5EOworIAorICBkZXN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICBkZXN0LnNpbl9wb3J0ID0gbnRvaHMoREhDUF9TRVJWRVJfUE9SVCk7CisgIGRlc3Quc2luX2FkZHIgPSBzZXJ2ZXI7CisKKyAgaWYgKHNlbmR0byhmZCwgJnBhY2tldCwgc2l6ZW9mKHBhY2tldCksIDAsIAorCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZkZXN0LCBzaXplb2YoZGVzdCkpID09IC0xKQorICAgIHsKKyAgICAgIHBlcnJvcigic2VuZHRvIGZhaWxlZCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3dydC9sZWFzZV91cGRhdGUuc2ggYi9jb250cmliL3dydC9sZWFzZV91cGRhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDY1MDliMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvd3J0L2xlYXNlX3VwZGF0ZS5zaApAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKworIyBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltb24gS2VsbGV5CisjCisjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLgorIworIyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCisjIGlmICQxIGlzIGFkZCBkZWwgb3Igb2xkLCB0aGlzIGlzIGEgZG5zbWFzcS1jYWxsZWQgbGVhc2UtY2hhbmdlCisjIHNjcmlwdCwgdXBkYXRlIHRoZSBudnJhbSBkYXRhYmFzZS4gaWYgJDEgaXMgaW5pdCwgZW1pdCBhIAorIyBkbnNtYXNxLWZvcm1hdCBsZWFzZSBmaWxlIHRvIHN0ZG91dCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIAorIyBkYXRhYmFzZSwgdGhpcyBpcyBjYWxsZWQgYnkgZG5zbWFzcSBhdCBzdGFydHVwLgorCitOVlJBTT0vdXNyL3NiaW4vbnZyYW0KK1BSRUZJWD1kbnNtYXNxX2xlYXNlXworCisjIEFyZ3VtZW50cy4KKyMgJDEgaXMgYWN0aW9uIChhZGQsIGRlbCwgb2xkKQorIyAkMiBpcyBNQUMgCisjICQzIGlzIGFkZHJlc3MKKyMgJDQgaXMgaG9zdG5hbWUgKG9wdGlvbmFsLCBtYXkgYmUgdW5zZXQpCisKKyMgZW52LgorIyBETlNNQVNRX0xFQVNFX0xFTkdUSCBvciBETlNNQVNRX0xFQVNFX0VYUElSRVMgKHdoaWNoIGRlcGVuZHMgb24gSEFWRV9CUk9LRU5fUlRDKQorIyBETlNNQVNRX0NMSUVOVF9JRCAob3B0aW9uYWwsIG1heSBiZSB1bnNldCkKKworIyBGaWxlLgorIyBsZW5ndGh8ZXhwaXJlcyBNQUMgYWRkciBob3N0bmFtZXwqIENMSUR8KiAKKworIyBQcmltYXJ5IGtleSBpcyBhZGRyZXNzLgorCitpZiBbICR7MX0gPSBpbml0IF0gOyB0aGVuCisgICAgICR7TlZSQU19IHNob3cgfCBzZWQgLW4gLWUgIi9eJHtQUkVGSVh9LiovIHMvXi4qPS8vcCIKK2Vsc2UKKyAgICAgaWYgWyAkezF9ID0gZGVsIF0gOyB0aGVuCisgICAgICAgICAgJHtOVlJBTX0gdW5zZXQgJHtQUkVGSVh9JHszfQorICAgICBmaQorCisgICAgIGlmIFsgJHsxfSA9IG9sZCBdIHx8IFsgJHsxfSA9IGFkZCBdIDsgdGhlbgorICAgICAgICAgICR7TlZSQU19IHNldCAke1BSRUZJWH0kezN9PSIke0ROU01BU1FfTEVBU0VfTEVOR1RIOi19JHtETlNNQVNRX0xFQVNFX0VYUElSRVM6LX0gJHsyfSAkezN9ICR7NDotKn0gJHtETlNNQVNRX0NMSUVOVF9JRDotKn0iCisgICAgIGZpCisgICAgICR7TlZSQU19IGNvbW1pdAorZmkKKworCisKKworIApkaWZmIC0tZ2l0IGEvZGJ1cy9EQnVzLWludGVyZmFjZSBiL2RidXMvREJ1cy1pbnRlcmZhY2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGQ1NzhjYQotLS0gL2Rldi9udWxsCisrKyBiL2RidXMvREJ1cy1pbnRlcmZhY2UKQEAgLTAsMCArMSwxMzEgQEAKK0RCdXMgc3VwcG9ydCBtdXN0IGJlIGVuYWJsZWQgYXQgY29tcGlsZS10aW1lIGFuZCBydW4tdGltZS4gRW5zdXJlIAordGhhdCBzcmMvY29uZmlnLmggY29udGFpbnMgdGhlIGxpbmUKKworI2RlZmluZSBIQVZFX0RCVVMuCisKK2FuZCB0aGF0IC9ldGMvZG5zbWFzcS5jb25mIGNvbnRhaW5zIHRoZSBsaW5lCisKK2VuYWJsZS1kYnVzCisKK0JlY2F1c2UgZG5zbWFzcSBjYW4gb3BlcmF0ZSBzdGFuZC1hbG9uZSBmcm9tIHRoZSBEQnVzLCBhbmQgbWF5IG5lZWQgdG8gcHJvdmlkZQorc2VydmljZSBiZWZvcmUgdGhlIGRidXMgZGFlbW9uIGlzIGF2YWlsYWJsZSwgaXQgd2lsbCBjb250aW51ZSB0byBydW4KK2lmIHRoZSBEQnVzIGNvbm5lY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBhdCBzdGFydHVwLiBUaGUgREJ1cyB3aWxsIGJlIHBvbGxlZCAKK2V2ZXJ5IDI1MG1zIHVudGlsIGEgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZC4gU3RhcnQgb2YgcG9sbGluZyBhbmQgZmluYWwKK2Nvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhcmUgYm90aCBsb2dnZWQuIFdoZW4gZG5zbWFzcSBlc3RhYmxpc2hlcyBhCitjb25uZWN0aW9uIHRvIHRoZSBkYnVzLCBpdCBzZW5kcyB0aGUgc2lnbmFsICJVcCIuIEFueXRoaW5nIGNvbnRyb2xsaW5nCit0aGUgc2VydmVyIHNldHRpbmdzIGluIGRuc21hc3Egc2hvdWxkIHJlLWludm9rZSB0aGUgU2V0U2VydmVycyBtZXRob2QKKyhxLnYuKSB3aGVuIGl0IHNlZXMgdGhpcyBzaWduYWwuIFRoaXMgYWxsb3dzIGRuc21hc3EgdG8gYmUgcmVzdGFydGVkCithbmQgYXZvaWRzIHN0YXJ0dXAgcmFjZXMgd2l0aCB0aGUgcHJvdmlkZXIgb2YgbmFtZXNlcnZlciBpbmZvcm1hdGlvbi4KKworCitEbnNtYXNxIHByb3ZpZGVzIG9uZSBzZXJ2aWNlIG9uIHRoZSBEQnVzOiB1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxCithbmQgYSBzaW5nbGUgb2JqZWN0OiAvdWsvb3JnL3RoZWtlbGxleXMvZG5zbWFzcQorCisxLiBNRVRIT0RTCistLS0tLS0tLS0tCisKK01ldGhvZHMgYXJlIG9mIHRoZSBmb3JtCisKK3VrLm9yZy50aGVrZWxsZXlzLjxtZXRob2Q+CisKK0F2YWlsYWJsZSBtZXRob2RzIGFyZToKKworR2V0VmVyc2lvbgorLS0tLS0tLS0tLQorUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSB2ZXJzaW9uIG9mIGRuc21hc3EgcnVubmluZy4KKworQ2xlYXJDYWNoZQorLS0tLS0tLS0tLQorUmV0dXJucyBub3RoaW5nLiBDbGVhcnMgdGhlIGRvbWFpbiBuYW1lIGNhY2hlIGFuZCByZS1yZWFkcworL2V0Yy9ob3N0cy4gVGhlIHNhbWUgYXMgc2VuZGluZyBkbnNtYXNxIGEgSFVQIHNpZ25hbC4KKworU2V0U2VydmVycworLS0tLS0tLS0tLQorUmV0dXJucyBub3RoaW5nLiBUYWtlcyBhIHNldCBvZiBhcmd1bWVudHMgcmVwcmVzZW50aW5nIHRoZSBuZXcKK3Vwc3RyZWFtIEROUyBzZXJ2ZXJzIHRvIGJlIHVzZWQgYnkgZG5zbWFzcS4gSVB2NCBhZGRyZXNzZXMgYXJlCityZXByZXNlbnRlZCBhcyBhIFVJTlQzMiAoaW4gbmV0d29yayBieXRlIG9yZGVyKSBhbmQgSVB2NiBhZGRyZXNzZXMKK2FyZSByZXByZXNlbnRlZCBhcyBzaXh0ZWVuIEJZVEVzIChzaW5jZSB0aGVyZSBpcyBubyBVSU5UMTI4IHR5cGUpLgorRWFjaCBzZXJ2ZXIgYWRkcmVzcyBtYXkgYmUgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgU1RSSU5HUywgd2hpY2ggYXJlCit0aGUgZG9tYWlucyBmb3Igd2hpY2ggdGhlIHByZWNlZGluZyBzZXJ2ZXIgc2hvdWxkIGJlIHVzZWQuCisKK0V4YW1wbGVzLgorCitVSU5UMzI6IDxhZGRyZXNzMT4KK1VOSVQzMjogPGFkZHJlc3MyPgorCitpcyBlcXVpdmFsZW50IHRvCisKKy0tc2VydmVyPTxhZGRyZXNzMT4gLS1zZXJ2ZXI9PGFkZHJlc3MyPgorCisKK1VJTlQzMiA8YWRkcmVzczE+CitVSU5UMzIgPGFkZHJlc3MyPgorU1RSSU5HICJzb21lZG9tYWluLmNvbSIKKworaXMgZXF1aXZhbGVudCB0bworCistLXNlcnZlcj08YWRkcmVzczE+IC0tc2VydmVyPS9zb21lZG9tYWluLmNvbS88YWRkcmVzczI+IAorCitVSU5UMzIgPGFkZHJlc3MxPgorVUlOVDMyIDxhZGRyZXNzMj4KK1NUUklORyAic29tZWRvbWFpbi5jb20iCitVSU5UMzIgPGFkZHJlc3MzPgorU1RSSU5HICJhbm90aGVyZG9tYWluLmNvbSIKK1NUUklORyAidGhpcmRkb21haW4uY29tIgorCitpcyBlcXVpdmFsZW50IHRvCisKKy0tc2VydmVyPTxhZGRyZXNzMT4gCistLXNlcnZlcj0vc29tZWRvbWFpbi5jb20vPGFkZHJlc3MyPiAKKy0tc2VydmVyPS9hbm90aGVyZG9tYWluLmNvbS90aGlyZGRvbWFpbi5jb20vPGFkZHJlc3MzPgorCitBbSBJUHY0IGFkZHJlc3Mgb2YgMC4wLjAuMCBpcyBpbnRlcnByZXRlZCBhcyAibm8gYWRkcmVzcywgbG9jYWwgb25seSIsCitzbworCitVSU5UMzI6IDwwLjAuMC4wPgorU1RSSU5HICAibG9jYWwuZG9tYWluIgorCitpcyBlcXVpdmFsZW50IHRvCisKKy0tbG9jYWw9L2xvY2FsLmRvbWFpbi8KKworCitFYWNoIGNhbGwgdG8gU2V0U2VydmVycyBjb21wbGV0ZWx5IHJlcGxhY2VzIHRoZSBzZXQgb2Ygc2VydmVycworc3BlY2lmaWVkIGJ5IHZpYSB0aGUgREJ1cywgYnV0IGl0IGxlYXZlcyBhbnkgc2VydmVycyBzcGVjaWZpZWQgdmlhIHRoZQorY29tbWFuZCBsaW5lIG9yIC9ldGMvZG5zbWFzcS5jb25mIG9yIC9ldGMvcmVzb2x2LmNvbmYgYWxvbmUuCisKKzIuIFNJR05BTFMKKy0tLS0tLS0tLS0KKworSWYgZG5zbWFzcSdzIERIQ1Agc2VydmVyIGlzIGFjdGl2ZSwgaXQgd2lsbCBzZW5kIHNpZ25hbHMgb3ZlciBEQlVTIHdoZW5ldmVyCit0aGUgREhDUCBsZWFzZSBkYXRhYmFzZSBjaGFuZ2VzLiBUaGluayBvZiB0aGVzZSBzaWduYWxzIGFzIHRyYW5zYWN0aW9ucyBvbgorYSBkYXRhYmFzZSB3aXRoIHRoZSBJUCBhZGRyZXNzIGFjdGluZyBhcyB0aGUgcHJpbWFyeSBrZXkuCisKK1NpZ25hbHMgYXJlIG9mIHRoZSBmb3JtOgorCit1ay5vcmcudGhla2VsbGV5cy48c2lnbmFsPgorCithbmQgdGhlaXIgcGFyYW1ldGVycyBhcmU6CisKK1NUUklORyAiMTkyLjE2OC4xLjExNSIKK1NUUklORyAiMDE6MjM6NDU6Njc6ODk6YWIiCitTVFJJTkcgImhvc3RuYW1lLm9yLmZxZG4iCisKKworQXZhaWxhYmxlIHNpZ25hbHMgYXJlOgorCitEaGNwTGVhc2VBZGRlZAorLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhIERIQ1AgbGVhc2UgZm9yIGEgZ2l2ZW4gSVAgYWRkcmVzcyBpcyBjcmVhdGVkLgorCitEaGNwTGVhc2VEZWxldGVkCistLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhIERIQ1AgbGVhc2UgZm9yIGEgZ2l2ZW4gSVAgYWRkcmVzcyBpcyBkZWxldGVkLgorCitEaGNwTGVhc2VVcGRhdGVkCistLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhIERIQ1AgbGVhc2UgZm9yIGEgZ2l2ZW4gSVAgYWRkcmVzcyBpcyB1cGRhdGVkLgorIApkaWZmIC0tZ2l0IGEvZGJ1cy9kbnNtYXNxLmNvbmYgYi9kYnVzL2Ruc21hc3EuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MmIxYzc2Ci0tLSAvZGV2L251bGwKKysrIGIvZGJ1cy9kbnNtYXNxLmNvbmYKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIGJ1c2NvbmZpZyBQVUJMSUMKKyAiLS8vZnJlZWRlc2t0b3AvL0RURCBELUJVUyBCdXMgQ29uZmlndXJhdGlvbiAxLjAvL0VOIgorICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvZGJ1cy8xLjAvYnVzY29uZmlnLmR0ZCI+Cis8YnVzY29uZmlnPgorCTxwb2xpY3kgdXNlcj0icm9vdCI+CisJCTxhbGxvdyBvd249InVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EiLz4KKwkJPGFsbG93IHNlbmRfZGVzdGluYXRpb249InVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EiLz4KKwk8L3BvbGljeT4KKwk8cG9saWN5IGNvbnRleHQ9ImRlZmF1bHQiPgorICAgICAgICAgICAgICAgIDxkZW55IG93bj0idWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcSIvPgorICAgICAgICAgICAgICAgIDxkZW55IHNlbmRfZGVzdGluYXRpb249InVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EiLz4KKyAgICAgICAgPC9wb2xpY3k+Cis8L2J1c2NvbmZpZz4KKwpkaWZmIC0tZ2l0IGEvZG5zbWFzcS5jb25mLmV4YW1wbGUgYi9kbnNtYXNxLmNvbmYuZXhhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYzllZjdhCi0tLSAvZGV2L251bGwKKysrIGIvZG5zbWFzcS5jb25mLmV4YW1wbGUKQEAgLTAsMCArMSw1NDAgQEAKKyMgQ29uZmlndXJhdGlvbiBmaWxlIGZvciBkbnNtYXNxLgorIworIyBGb3JtYXQgaXMgb25lIG9wdGlvbiBwZXIgbGluZSwgbGVnYWwgb3B0aW9ucyBhcmUgdGhlIHNhbWUKKyMgYXMgdGhlIGxvbmcgb3B0aW9ucyBsZWdhbCBvbiB0aGUgY29tbWFuZCBsaW5lLiBTZWUKKyMgIi91c3Ivc2Jpbi9kbnNtYXNxIC0taGVscCIgb3IgIm1hbiA4IGRuc21hc3EiIGZvciBkZXRhaWxzLgorCisjIFRoZSBmb2xsb3dpbmcgdHdvIG9wdGlvbnMgbWFrZSB5b3UgYSBiZXR0ZXIgbmV0aXplbiwgc2luY2UgdGhleQorIyB0ZWxsIGRuc21hc3EgdG8gZmlsdGVyIG91dCBxdWVyaWVzIHdoaWNoIHRoZSBwdWJsaWMgRE5TIGNhbm5vdAorIyBhbnN3ZXIsIGFuZCB3aGljaCBsb2FkIHRoZSBzZXJ2ZXJzIChlc3BlY2lhbGx5IHRoZSByb290IHNlcnZlcnMpCisjIHVuZWNjZXNzYXJpbHkuIElmIHlvdSBoYXZlIGEgZGlhbC1vbi1kZW1hbmQgbGluayB0aGV5IGFsc28gc3RvcAorIyB0aGVzZSByZXF1ZXN0cyBmcm9tIGJyaW5naW5nIHVwIHRoZSBsaW5rIHVuZWNjZXNzYXJpbHkuCisKKyMgTmV2ZXIgZm9yd2FyZCBwbGFpbiBuYW1lcyAod2l0aG91dCBhIGRvdCBvciBkb21haW4gcGFydCkKKyNkb21haW4tbmVlZGVkCisjIE5ldmVyIGZvcndhcmQgYWRkcmVzc2VzIGluIHRoZSBub24tcm91dGVkIGFkZHJlc3Mgc3BhY2VzLgorI2JvZ3VzLXByaXYKKworCisjIFVuY29tbWVudCB0aGlzIHRvIGZpbHRlciB1c2VsZXNzIHdpbmRvd3Mtb3JpZ2luYXRlZCBETlMgcmVxdWVzdHMKKyMgd2hpY2ggY2FuIHRyaWdnZXIgZGlhbC1vbi1kZW1hbmQgbGlua3MgbmVlZGxlc3NseS4KKyMgTm90ZSB0aGF0IChhbW9uZ3N0IG90aGVyIHRoaW5ncykgdGhpcyBibG9ja3MgYWxsIFNSViByZXF1ZXN0cywKKyMgc28gZG9uJ3QgdXNlIGl0IGlmIHlvdSB1c2UgZWcgS2VyYmVyb3MsIFNJUCwgWE1NUCBvciBHb29nbGUtdGFsay4KKyMgVGhpcyBvcHRpb24gb25seSBhZmZlY3RzIGZvcndhcmRpbmcsIFNSViByZWNvcmRzIG9yaWdpbmF0aW5nIGZvcgorIyBkbnNtYXNxICh2aWEgc3J2LWhvc3Q9IGxpbmVzKSBhcmUgbm90IHN1cHByZXNzZWQgYnkgaXQuCisjZmlsdGVyd2luMmsKKworIyBDaGFuZ2UgdGhpcyBsaW5lIGlmIHlvdSB3YW50IGRucyB0byBnZXQgaXRzIHVwc3RyZWFtIHNlcnZlcnMgZnJvbQorIyBzb21ld2hlcmUgb3RoZXIgdGhhdCAvZXRjL3Jlc29sdi5jb25mCisjcmVzb2x2LWZpbGU9CisKKyMgQnkgIGRlZmF1bHQsICBkbnNtYXNxICB3aWxsICBzZW5kIHF1ZXJpZXMgdG8gYW55IG9mIHRoZSB1cHN0cmVhbQorIyBzZXJ2ZXJzIGl0IGtub3dzIGFib3V0IGFuZCB0cmllcyB0byBmYXZvdXIgc2VydmVycyB0byBhcmUgIGtub3duCisjIHRvICBiZSAgdXAuICBVbmNvbW1lbnRpbmcgdGhpcyBmb3JjZXMgZG5zbWFzcSB0byB0cnkgZWFjaCBxdWVyeQorIyB3aXRoICBlYWNoICBzZXJ2ZXIgIHN0cmljdGx5ICBpbiAgdGhlICBvcmRlciAgdGhleSAgIGFwcGVhciAgIGluCisjIC9ldGMvcmVzb2x2LmNvbmYKKyNzdHJpY3Qtb3JkZXIKKworIyBJZiB5b3UgZG9uJ3Qgd2FudCBkbnNtYXNxIHRvIHJlYWQgL2V0Yy9yZXNvbHYuY29uZiBvciBhbnkgb3RoZXIKKyMgZmlsZSwgZ2V0dGluZyBpdHMgc2VydmVycyBmcm9tIHRoaXMgZmlsZSBpbnN0ZWFkIChzZWUgYmVsb3cpLCB0aGVuCisjIHVuY29tbWVudCB0aGlzLgorI25vLXJlc29sdgorCisjIElmIHlvdSBkb24ndCB3YW50IGRuc21hc3EgdG8gcG9sbCAvZXRjL3Jlc29sdi5jb25mIG9yIG90aGVyIHJlc29sdgorIyBmaWxlcyBmb3IgY2hhbmdlcyBhbmQgcmUtcmVhZCB0aGVtIHRoZW4gdW5jb21tZW50IHRoaXMuCisjbm8tcG9sbAorCisjIEFkZCBvdGhlciBuYW1lIHNlcnZlcnMgaGVyZSwgd2l0aCBkb21haW4gc3BlY3MgaWYgdGhleSBhcmUgZm9yCisjIG5vbi1wdWJsaWMgZG9tYWlucy4KKyNzZXJ2ZXI9L2xvY2FsbmV0LzE5Mi4xNjguMC4xCisKKyMgRXhhbXBsZSBvZiByb3V0aW5nIFBUUiBxdWVyaWVzIHRvIG5hbWVzZXJ2ZXJzOiB0aGlzIHdpbGwgc2VuZCBhbGwgCisjIGFkZHJlc3MtPm5hbWUgcXVlcmllcyBmb3IgMTkyLjE2OC4zLzI0IHRvIG5hbWVzZXJ2ZXIgMTAuMS4yLjMKKyNzZXJ2ZXI9LzMuMTY4LjE5Mi5pbi1hZGRyLmFycGEvMTAuMS4yLjMKKworIyBBZGQgbG9jYWwtb25seSBkb21haW5zIGhlcmUsIHF1ZXJpZXMgaW4gdGhlc2UgZG9tYWlucyBhcmUgYW5zd2VyZWQKKyMgZnJvbSAvZXRjL2hvc3RzIG9yIERIQ1Agb25seS4KKyNsb2NhbD0vbG9jYWxuZXQvCisKKyMgQWRkIGRvbWFpbnMgd2hpY2ggeW91IHdhbnQgdG8gZm9yY2UgdG8gYW4gSVAgYWRkcmVzcyBoZXJlLgorIyBUaGUgZXhhbXBsZSBiZWxvdyBzZW5kIGFueSBob3N0IGluIGRvdWJsZWNsaWNrLm5ldCB0byBhIGxvY2FsCisjIHdlYnNlcnZlci4KKyNhZGRyZXNzPS9kb3VibGVjbGljay5uZXQvMTI3LjAuMC4xCisKKyMgLS1hZGRyZXNzIChhbmQgLS1zZXJ2ZXIpIHdvcmsgd2l0aCBJUHY2IGFkZHJlc3NlcyB0b28uCisjYWRkcmVzcz0vd3d3LnRoZWtlbGxleXMub3JnLnVrL2ZlODA6OjIwZDo2MGZmOmZlMzY6ZjgzCisKKyMgWW91IGNhbiBjb250cm9sIGhvdyBkbnNtYXNxIHRhbGtzIHRvIGEgc2VydmVyOiB0aGlzIGZvcmNlcyAKKyMgcXVlcmllcyB0byAxMC4xLjIuMyB0byBiZSByb3V0ZWQgdmlhIGV0aDEKKyMgLS1zZXJ2ZXI9MTAuMS4yLjNAZXRoMQorCisjIGFuZCB0aGlzIHNldHMgdGhlIHNvdXJjZSAoaWUgbG9jYWwpIGFkZHJlc3MgdXNlZCB0byB0YWxrIHRvCisjIDEwLjEuMi4zIHRvIDE5Mi4xNjguMS4xIHBvcnQgNTUgKHRoZXJlIG11c3QgYmUgYSBpbnRlcmZhY2Ugd2l0aCB0aGF0CisjIElQIG9uIHRoZSBtYWNoaW5lLCBvYnZpb3VzbHkpLgorIyAtLXNlcnZlcj0xMC4xLjIuM0AxOTIuMTY4LjEuMSM1NQorCisjIElmIHlvdSB3YW50IGRuc21hc3EgdG8gY2hhbmdlIHVpZCBhbmQgZ2lkIHRvIHNvbWV0aGluZyBvdGhlcgorIyB0aGFuIHRoZSBkZWZhdWx0LCBlZGl0IHRoZSBmb2xsb3dpbmcgbGluZXMuCisjdXNlcj0KKyNncm91cD0KKworIyBJZiB5b3Ugd2FudCBkbnNtYXNxIHRvIGxpc3RlbiBmb3IgREhDUCBhbmQgRE5TIHJlcXVlc3RzIG9ubHkgb24KKyMgc3BlY2lmaWVkIGludGVyZmFjZXMgKGFuZCB0aGUgbG9vcGJhY2spIGdpdmUgdGhlIG5hbWUgb2YgdGhlCisjIGludGVyZmFjZSAoZWcgZXRoMCkgaGVyZS4KKyMgUmVwZWF0IHRoZSBsaW5lIGZvciBtb3JlIHRoYW4gb25lIGludGVyZmFjZS4KKyNpbnRlcmZhY2U9CisjIE9yIHlvdSBjYW4gc3BlY2lmeSB3aGljaCBpbnRlcmZhY2UgX25vdF8gdG8gbGlzdGVuIG9uCisjZXhjZXB0LWludGVyZmFjZT0KKyMgT3Igd2hpY2ggdG8gbGlzdGVuIG9uIGJ5IGFkZHJlc3MgKHJlbWVtYmVyIHRvIGluY2x1ZGUgMTI3LjAuMC4xIGlmCisjIHlvdSB1c2UgdGhpcy4pCisjbGlzdGVuLWFkZHJlc3M9CisjIElmIHlvdSB3YW50IGRuc21hc3EgdG8gcHJvdmlkZSBvbmx5IEROUyBzZXJ2aWNlIG9uIGFuIGludGVyZmFjZSwKKyMgY29uZmlndXJlIGl0IGFzIHNob3duIGFib3ZlLCBhbmQgdGhlbiB1c2UgdGhlIGZvbGxvd2luZyBsaW5lIHRvCisjIGRpc2FibGUgREhDUCBvbiBpdC4KKyNuby1kaGNwLWludGVyZmFjZT0KKworIyBPbiBzeXN0ZW1zIHdoaWNoIHN1cHBvcnQgaXQsIGRuc21hc3EgYmluZHMgdGhlIHdpbGRjYXJkIGFkZHJlc3MsCisjIGV2ZW4gd2hlbiBpdCBpcyBsaXN0ZW5pbmcgb24gb25seSBzb21lIGludGVyZmFjZXMuIEl0IHRoZW4gZGlzY2FyZHMKKyMgcmVxdWVzdHMgdGhhdCBpdCBzaG91bGRuJ3QgcmVwbHkgdG8uIFRoaXMgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YKKyMgd29ya2luZyBldmVuIHdoZW4gaW50ZXJmYWNlcyBjb21lIGFuZCBnbyBhbmQgY2hhbmdlIGFkZHJlc3MuIElmIHlvdQorIyB3YW50IGRuc21hc3EgdG8gcmVhbGx5IGJpbmQgb25seSB0aGUgaW50ZXJmYWNlcyBpdCBpcyBsaXN0ZW5pbmcgb24sCisjIHVuY29tbWVudCB0aGlzIG9wdGlvbi4gQWJvdXQgdGhlIG9ubHkgdGltZSB5b3UgbWF5IG5lZWQgdGhpcyBpcyB3aGVuCisjIHJ1bm5pbmcgYW5vdGhlciBuYW1lc2VydmVyIG9uIHRoZSBzYW1lIG1hY2hpbmUuCisjYmluZC1pbnRlcmZhY2VzCisKKyMgSWYgeW91IGRvbid0IHdhbnQgZG5zbWFzcSB0byByZWFkIC9ldGMvaG9zdHMsIHVuY29tbWVudCB0aGUKKyMgZm9sbG93aW5nIGxpbmUuCisjbm8taG9zdHMKKyMgb3IgaWYgeW91IHdhbnQgaXQgdG8gcmVhZCBhbm90aGVyIGZpbGUsIGFzIHdlbGwgYXMgL2V0Yy9ob3N0cywgdXNlCisjIHRoaXMuCisjYWRkbi1ob3N0cz0vZXRjL2Jhbm5lcl9hZGRfaG9zdHMKKworIyBTZXQgdGhpcyAoYW5kIGRvbWFpbjogc2VlIGJlbG93KSBpZiB5b3Ugd2FudCB0byBoYXZlIGEgZG9tYWluCisjIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gc2ltcGxlIG5hbWVzIGluIGEgaG9zdHMtZmlsZS4KKyNleHBhbmQtaG9zdHMKKworIyBTZXQgdGhlIGRvbWFpbiBmb3IgZG5zbWFzcS4gdGhpcyBpcyBvcHRpb25hbCwgYnV0IGlmIGl0IGlzIHNldCwgaXQKKyMgZG9lcyB0aGUgZm9sbG93aW5nIHRoaW5ncy4KKyMgMSkgQWxsb3dzIERIQ1AgaG9zdHMgdG8gaGF2ZSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWVzLCBhcyBsb25nCisjICAgICBhcyB0aGUgZG9tYWluIHBhcnQgbWF0Y2hlcyB0aGlzIHNldHRpbmcuCisjIDIpIFNldHMgdGhlICJkb21haW4iIERIQ1Agb3B0aW9uIHRoZXJlYnkgcG90ZW50aWFsbHkgc2V0dGluZyB0aGUKKyMgICAgZG9tYWluIG9mIGFsbCBzeXN0ZW1zIGNvbmZpZ3VyZWQgYnkgREhDUAorIyAzKSBQcm92aWRlcyB0aGUgZG9tYWluIHBhcnQgZm9yICJleHBhbmQtaG9zdHMiCisjZG9tYWluPXRoZWtlbGxleXMub3JnLnVrCisKKyMgU2V0IGEgZGlmZmVyZW50IGRvbWFpbiBmb3IgYSBwYXJ0aWN1bGFyIHN1Ym5ldAorI2RvbWFpbj13aXJlbGVzcy50aGVrZWxsZXlzLm9yZy51aywxOTIuMTY4LjIuMC8yNAorCisjIFNhbWUgaWRlYSwgYnV0IHJhbmdlIHJhdGhlciB0aGVuIHN1Ym5ldAorI2RvbWFpbj1yZXNlcnZlZC50aGVrZWxsZXlzLm9yZy51aywxOTIuNjguMy4xMDAsMTkyLjE2OC4zLjIwMAorCisjIFVuY29tbWVudCB0aGlzIHRvIGVuYWJsZSB0aGUgaW50ZWdyYXRlZCBESENQIHNlcnZlciwgeW91IG5lZWQKKyMgdG8gc3VwcGx5IHRoZSByYW5nZSBvZiBhZGRyZXNzZXMgYXZhaWxhYmxlIGZvciBsZWFzZSBhbmQgb3B0aW9uYWxseQorIyBhIGxlYXNlIHRpbWUuIElmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgbmV0d29yaywgeW91IHdpbGwgbmVlZCB0bworIyByZXBlYXQgdGhpcyBmb3IgZWFjaCBuZXR3b3JrIG9uIHdoaWNoIHlvdSB3YW50IHRvIHN1cHBseSBESENQCisjIHNlcnZpY2UuCisjZGhjcC1yYW5nZT0xOTIuMTY4LjAuNTAsMTkyLjE2OC4wLjE1MCwxMmgKKworIyBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBESENQIHJhbmdlIHdoZXJlIHRoZSBuZXRtYXNrIGlzIGdpdmVuLiBUaGlzCisjIGlzIG5lZWRlZCBmb3IgbmV0d29ya3Mgd2UgcmVhY2ggdGhlIGRuc21hc3EgREhDUCBzZXJ2ZXIgdmlhIGEgcmVsYXkKKyMgYWdlbnQuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgYSBESENQIHJlbGF5IGFnZW50IGlzLCB5b3UgcHJvYmFibHkKKyMgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGlzLgorI2RoY3AtcmFuZ2U9MTkyLjE2OC4wLjUwLDE5Mi4xNjguMC4xNTAsMjU1LjI1NS4yNTUuMCwxMmgKKworIyBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBESENQIHJhbmdlIHdpdGggYSBuZXR3b3JrLWlkLCBzbyB0aGF0CisjIHNvbWUgREhDUCBvcHRpb25zIG1heSBiZSBzZXQgb25seSBmb3IgdGhpcyBuZXR3b3JrLgorI2RoY3AtcmFuZ2U9cmVkLDE5Mi4xNjguMC41MCwxOTIuMTY4LjAuMTUwCisKKyMgU3VwcGx5IHBhcmFtZXRlcnMgZm9yIHNwZWNpZmllZCBob3N0cyB1c2luZyBESENQLiBUaGVyZSBhcmUgbG90cworIyBvZiB2YWxpZCBhbHRlcm5hdGl2ZXMsIHNvIHdlIHdpbGwgZ2l2ZSBleGFtcGxlcyBvZiBlYWNoLiBOb3RlIHRoYXQKKyMgSVAgYWRkcmVzc2VzIERPIE5PVCBoYXZlIHRvIGJlIGluIHRoZSByYW5nZSBnaXZlbiBhYm92ZSwgdGhleSBqdXN0CisjIG5lZWQgdG8gYmUgb24gdGhlIHNhbWUgbmV0d29yay4gVGhlIG9yZGVyIG9mIHRoZSBwYXJhbWV0ZXJzIGluIHRoZXNlCisjIGRvIG5vdCBtYXR0ZXIsIGl0J3MgcGVybWlzc2JsZSB0byBnaXZlIG5hbWUsYWRkZHJlc3MgYW5kIE1BQyBpbiBhbnkgb3JkZXIKKworIyBBbHdheXMgYWxsb2NhdGUgdGhlIGhvc3Qgd2l0aCBldGhlcm5ldCBhZGRyZXNzIDExOjIyOjMzOjQ0OjU1OjY2CisjIFRoZSBJUCBhZGRyZXNzIDE5Mi4xNjguMC42MAorI2RoY3AtaG9zdD0xMToyMjozMzo0NDo1NTo2NiwxOTIuMTY4LjAuNjAKKworIyBBbHdheXMgc2V0IHRoZSBuYW1lIG9mIHRoZSBob3N0IHdpdGggaGFyZHdhcmUgYWRkcmVzcworIyAxMToyMjozMzo0NDo1NTo2NiB0byBiZSAiZnJlZCIKKyNkaGNwLWhvc3Q9MTE6MjI6MzM6NDQ6NTU6NjYsZnJlZAorCisjIEFsd2F5cyBnaXZlIHRoZSBob3N0IHdpdGggZXRoZXJuZXQgYWRkcmVzcyAxMToyMjozMzo0NDo1NTo2NgorIyB0aGUgbmFtZSBmcmVkIGFuZCBJUCBhZGRyZXNzIDE5Mi4xNjguMC42MCBhbmQgbGVhc2UgdGltZSA0NSBtaW51dGVzCisjZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LGZyZWQsMTkyLjE2OC4wLjYwLDQ1bQorCisjIEdpdmUgYSBob3N0IHdpdGggZXRoZXJuZXQgYWRkcmVzcyAxMToyMjozMzo0NDo1NTo2NiBvcgorIyAxMjozNDo1Njo3ODo5MDoxMiB0aGUgSVAgYWRkcmVzcyAxOTIuMTY4LjAuNjAuIERuc21hc3Egd2lsbCBhc3N1bWUKKyMgdGhhdCB0aGVzZSB0d28gZXRoZXJuZXQgaW50ZXJmYWNlcyB3aWxsIG5ldmVyIGJlIGluIHVzZSBhdCB0aGUgc2FtZQorIyB0aW1lLCBhbmQgZ2l2ZSB0aGUgSVAgYWRkcmVzcyB0byB0aGUgc2Vjb25kLCBldmVuIGlmIGl0IGlzIGFscmVhZHkKKyMgaW4gdXNlIGJ5IHRoZSBmaXJzdC4gVXNlZnVsIGZvciBsYXB0b3BzIHdpdGggd2lyZWQgYW5kIHdpcmVsZXNzCisjIGFkZHJlc3Nlcy4KKyNkaGNwLWhvc3Q9MTE6MjI6MzM6NDQ6NTU6NjYsMTI6MzQ6NTY6Nzg6OTA6MTIsMTkyLjE2OC4wLjYwCisKKyMgR2l2ZSB0aGUgbWFjaGluZSB3aGljaCBzYXlzIGl0cyBuYW1lIGlzICJiZXJ0IiBJUCBhZGRyZXNzCisjIDE5Mi4xNjguMC43MCBhbmQgYW4gaW5maW5pdGUgbGVhc2UKKyNkaGNwLWhvc3Q9YmVydCwxOTIuMTY4LjAuNzAsaW5maW5pdGUKKworIyBBbHdheXMgZ2l2ZSB0aGUgaG9zdCB3aXRoIGNsaWVudCBpZGVudGlmaWVyIDAxOjAyOjAyOjA0CisjIHRoZSBJUCBhZGRyZXNzIDE5Mi4xNjguMC42MAorI2RoY3AtaG9zdD1pZDowMTowMjowMjowNCwxOTIuMTY4LjAuNjAKKworIyBBbHdheXMgZ2l2ZSB0aGUgaG9zdCB3aXRoIGNsaWVudCBpZGVudGlmaWVyICJtYXJqb3JpZSIKKyMgdGhlIElQIGFkZHJlc3MgMTkyLjE2OC4wLjYwCisjZGhjcC1ob3N0PWlkOm1hcmpvcmllLDE5Mi4xNjguMC42MAorCisjIEVuYWJsZSB0aGUgYWRkcmVzcyBnaXZlbiBmb3IgImp1ZGdlIiBpbiAvZXRjL2hvc3RzCisjIHRvIGJlIGdpdmVuIHRvIGEgbWFjaGluZSBwcmVzZW50aW5nIHRoZSBuYW1lICJqdWRnZSIgd2hlbgorIyBpdCBhc2tzIGZvciBhIERIQ1AgbGVhc2UuCisjZGhjcC1ob3N0PWp1ZGdlCisKKyMgTmV2ZXIgb2ZmZXIgREhDUCBzZXJ2aWNlIHRvIGEgbWFjaGluZSB3aG9zZSBldGhlcm5ldAorIyBhZGRyZXNzIGlzIDExOjIyOjMzOjQ0OjU1OjY2CisjZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LGlnbm9yZQorCisjIElnbm9yZSBhbnkgY2xpZW50LWlkIHByZXNlbnRlZCBieSB0aGUgbWFjaGluZSB3aXRoIGV0aGVybmV0CisjIGFkZHJlc3MgMTE6MjI6MzM6NDQ6NTU6NjYuIFRoaXMgaXMgdXNlZnVsIHRvIHByZXZlbnQgYSBtYWNoaW5lCisjIGJlaW5nIHRyZWF0ZWQgZGlmZmVyZW50bHkgd2hlbiBydW5uaW5nIHVuZGVyIGRpZmZlcmVudCBPUydzIG9yCisjIGJldHdlZW4gUFhFIGJvb3QgYW5kIE9TIGJvb3QuCisjZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LGlkOioKKworIyBTZW5kIGV4dHJhIG9wdGlvbnMgd2hpY2ggYXJlIHRhZ2dlZCBhcyAicmVkIiB0bworIyB0aGUgbWFjaGluZSB3aXRoIGV0aGVybmV0IGFkZHJlc3MgMTE6MjI6MzM6NDQ6NTU6NjYKKyNkaGNwLWhvc3Q9MTE6MjI6MzM6NDQ6NTU6NjYsbmV0OnJlZAorCisjIFNlbmQgZXh0cmEgb3B0aW9ucyB3aGljaCBhcmUgdGFnZ2VkIGFzICJyZWQiIHRvCisjIGFueSBtYWNoaW5lIHdpdGggZXRoZXJuZXQgYWRkcmVzcyBzdGFydGluZyAxMToyMjozMzoKKyNkaGNwLWhvc3Q9MTE6MjI6MzM6KjoqOiosbmV0OnJlZAorCisjIElnbm9yZSBhbnkgY2xpZW50cyB3aGljaCBhcmUgc3BlY2lmaWVkIGluIGRoY3AtaG9zdCBsaW5lcworIyBvciAvZXRjL2V0aGVycy4gRXF1aXZhbGVudCB0byBJU0MgImRlbnkgdW5rb3duLWNsaWVudHMiLgorIyBUaGlzIHJlbGllcyBvbiB0aGUgc3BlY2lhbCAia25vd24iIHRhZyB3aGljaCBpcyBzZXQgd2hlbiAKKyMgYSBob3N0IGlzIG1hdGNoZWQuCisjZGhjcC1pZ25vcmU9I2tub3duCisKKyMgU2VuZCBleHRyYSBvcHRpb25zIHdoaWNoIGFyZSB0YWdnZWQgYXMgInJlZCIgdG8gYW55IG1hY2hpbmUgd2hvc2UKKyMgREhDUCB2ZW5kb3JjbGFzcyBzdHJpbmcgaW5jbHVkZXMgdGhlIHN1YnN0cmluZyAiTGludXgiCisjZGhjcC12ZW5kb3JjbGFzcz1yZWQsTGludXgKKworIyBTZW5kIGV4dHJhIG9wdGlvbnMgd2hpY2ggYXJlIHRhZ2dlZCBhcyAicmVkIiB0byBhbnkgbWFjaGluZSBvbmUKKyMgb2Ygd2hvc2UgREhDUCB1c2VyY2xhc3Mgc3RyaW5ncyBpbmNsdWRlcyB0aGUgc3Vic3RyaW5nICJhY2NvdW50cyIKKyNkaGNwLXVzZXJjbGFzcz1yZWQsYWNjb3VudHMKKworIyBTZW5kIGV4dHJhIG9wdGlvbnMgd2hpY2ggYXJlIHRhZ2dlZCBhcyAicmVkIiB0byBhbnkgbWFjaGluZSB3aG9zZQorIyBNQUMgYWRkcmVzcyBtYXRjaGVzIHRoZSBwYXR0ZXJuLgorI2RoY3AtbWFjPXJlZCwwMDo2MDo4QzoqOio6KgorCisjIElmIHRoaXMgbGluZSBpcyB1bmNvbW1lbnRlZCwgZG5zbWFzcSB3aWxsIHJlYWQgL2V0Yy9ldGhlcnMgYW5kIGFjdAorIyBvbiB0aGUgZXRoZXJuZXQtYWRkcmVzcy9JUCBwYWlycyBmb3VuZCB0aGVyZSBqdXN0IGFzIGlmIHRoZXkgaGFkCisjIGJlZW4gZ2l2ZW4gYXMgLS1kaGNwLWhvc3Qgb3B0aW9ucy4gVXNlZnVsIGlmIHlvdSBrZWVwCisjIE1BQy1hZGRyZXNzL2hvc3QgbWFwcGluZ3MgdGhlcmUgZm9yIG90aGVyIHB1cnBvc2VzLgorI3JlYWQtZXRoZXJzCisKKyMgU2VuZCBvcHRpb25zIHRvIGhvc3RzIHdoaWNoIGFzayBmb3IgYSBESENQIGxlYXNlLgorIyBTZWUgUkZDIDIxMzIgZm9yIGRldGFpbHMgb2YgYXZhaWxhYmxlIG9wdGlvbnMuCisjIENvbW1vbiBvcHRpb25zIGNhbiBiZSBnaXZlbiB0byBkbnNtYXNxIGJ5IG5hbWU6IAorIyBydW4gImRuc21hc3EgLS1oZWxwIGRoY3AiIHRvIGdldCBhIGxpc3QuCisjIE5vdGUgdGhhdCBhbGwgdGhlIGNvbW1vbiBzZXR0aW5ncywgc3VjaCBhcyBuZXRtYXNrIGFuZAorIyBicm9hZGNhc3QgYWRkcmVzcywgRE5TIHNlcnZlciBhbmQgZGVmYXVsdCByb3V0ZSwgYXJlIGdpdmVuCisjIHNhbmUgZGVmYXVsdHMgYnkgZG5zbWFzcS4gWW91IHZlcnkgbGlrZWx5IHdpbGwgbm90IG5lZWQgCisjIGFueSBkaGNwLW9wdGlvbnMuIElmIHlvdSB1c2UgV2luZG93cyBjbGllbnRzIGFuZCBTYW1iYSwgdGhlcmUKKyMgYXJlIHNvbWUgb3B0aW9ucyB3aGljaCBhcmUgcmVjb21tZW5kZWQsIHRoZXkgYXJlIGRldGFpbGVkIGF0IHRoZQorIyBlbmQgb2YgdGhpcyBzZWN0aW9uLgorCisjIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHJvdXRlIHN1cHBsaWVkIGJ5IGRuc21hc3EsIHdoaWNoIGFzc3VtZXMgdGhlCisjIHJvdXRlciBpcyB0aGUgc2FtZSBtYWNoaW5lIGFzIHRoZSBvbmUgcnVubmluZyBkbnNtYXNxLgorI2RoY3Atb3B0aW9uPTMsMS4yLjMuNAorCisjIERvIHRoZSBzYW1lIHRoaW5nLCBidXQgdXNpbmcgdGhlIG9wdGlvbiBuYW1lCisjZGhjcC1vcHRpb249b3B0aW9uOnJvdXRlciwxLjIuMy40CisKKyMgT3ZlcnJpZGUgdGhlIGRlZmF1bHQgcm91dGUgc3VwcGxpZWQgYnkgZG5zbWFzcSBhbmQgc2VuZCBubyBkZWZhdWx0CisjIHJvdXRlIGF0IGFsbC4gTm90ZSB0aGF0IHRoaXMgb25seSB3b3JrcyBmb3IgdGhlIG9wdGlvbnMgc2VudCBieQorIyBkZWZhdWx0ICgxLCAzLCA2LCAxMiwgMjgpIHRoZSBzYW1lIGxpbmUgd2lsbCBzZW5kIGEgemVyby1sZW5ndGggb3B0aW9uIAorIyBmb3IgYWxsIG90aGVyIG9wdGlvbiBudW1iZXJzLgorI2RoY3Atb3B0aW9uPTMKKworIyBTZXQgdGhlIE5UUCB0aW1lIHNlcnZlciBhZGRyZXNzZXMgdG8gMTkyLjE2OC4wLjQgYW5kIDEwLjEwLjAuNQorI2RoY3Atb3B0aW9uPW9wdGlvbjpudHAtc2VydmVyLDE5Mi4xNjguMC40LDEwLjEwLjAuNQorCisjIFNldCB0aGUgTlRQIHRpbWUgc2VydmVyIGFkZHJlc3MgdG8gYmUgdGhlIHNhbWUgbWFjaGluZSBhcworIyBpcyBydW5uaW5nIGRuc21hc3EKKyNkaGNwLW9wdGlvbj00MiwwLjAuMC4wCisKKyMgU2V0IHRoZSBOSVMgZG9tYWluIG5hbWUgdG8gIndlbGx5IgorI2RoY3Atb3B0aW9uPTQwLHdlbGx5CisKKyMgU2V0IHRoZSBkZWZhdWx0IHRpbWUtdG8tbGl2ZSB0byA1MAorI2RoY3Atb3B0aW9uPTIzLDUwCisKKyMgU2V0IHRoZSAiYWxsIHN1Ym5ldHMgYXJlIGxvY2FsIiBmbGFnCisjZGhjcC1vcHRpb249MjcsMQorCisjIFNlbmQgdGhlIGV0aGVyYm9vdCBtYWdpYyBmbGFnIGFuZCB0aGVuIGV0aGVyYm9vdCBvcHRpb25zIChhIHN0cmluZykuCisjZGhjcC1vcHRpb249MTI4LGU0OjQ1Ojc0OjY4OjAwOjAwCisjZGhjcC1vcHRpb249MTI5LE5JQz1lZXBybzEwMAorCisjIFNwZWNpZnkgYW4gb3B0aW9uIHdoaWNoIHdpbGwgb25seSBiZSBzZW50IHRvIHRoZSAicmVkIiBuZXR3b3JrCisjIChzZWUgZGhjcC1yYW5nZSBmb3IgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSAicmVkIiBuZXR3b3JrKQorIyBOb3RlIHRoYXQgdGhlIG5ldDogcGFydCBtdXN0IHByZWNlZGUgdGhlIG9wdGlvbjogcGFydC4KKyNkaGNwLW9wdGlvbiA9IG5ldDpyZWQsIG9wdGlvbjpudHAtc2VydmVyLCAxOTIuMTY4LjEuMQorCisjIFRoZSBmb2xsb3dpbmcgREhDUCBvcHRpb25zIHNldCB1cCBkbnNtYXNxIGluIHRoZSBzYW1lIHdheSBhcyBpcyBzcGVjaWZpZWQKKyMgZm9yIHRoZSBJU0MgZGhjcGNkIGluCisjIGh0dHA6Ly93d3cuc2FtYmEub3JnL3NhbWJhL2Z0cC9kb2NzL3RleHRkb2NzL0RIQ1AtU2VydmVyLUNvbmZpZ3VyYXRpb24udHh0CisjIGFkYXB0ZWQgZm9yIGEgdHlwaWNhbCBkbnNtYXNxIGluc3RhbGxhdGlvbiB3aGVyZSB0aGUgaG9zdCBydW5uaW5nCisjIGRuc21hc3EgaXMgYWxzbyB0aGUgaG9zdCBydW5uaW5nIHNhbWJhLgorIyB5b3UgbWF5IHdhbnQgdG8gdW5jb21tZW50IHNvbWUgb3IgYWxsIG9mIHRoZW0gaWYgeW91IHVzZSAKKyMgV2luZG93cyBjbGllbnRzIGFuZCBTYW1iYS4KKyNkaGNwLW9wdGlvbj0xOSwwICAgICAgICAgICAjIG9wdGlvbiBpcC1mb3J3YXJkaW5nIG9mZgorI2RoY3Atb3B0aW9uPTQ0LDAuMC4wLjAgICAgICMgc2V0IG5ldGJpb3Mtb3Zlci1UQ1AvSVAgbmFtZXNlcnZlcihzKSBha2EgV0lOUyBzZXJ2ZXIocykKKyNkaGNwLW9wdGlvbj00NSwwLjAuMC4wICAgICAjIG5ldGJpb3MgZGF0YWdyYW0gZGlzdHJpYnV0aW9uIHNlcnZlcgorI2RoY3Atb3B0aW9uPTQ2LDggICAgICAgICAgICMgbmV0YmlvcyBub2RlIHR5cGUKKworIyBTZW5kIFJGQy0zMzk3IEROUyBkb21haW4gc2VhcmNoIERIQ1Agb3B0aW9uLiBXQVJOSU5HOiBZb3VyIERIQ1AgY2xpZW50CisjIHByb2JhYmx5IGRvZXNuJ3Qgc3VwcG9ydCB0aGlzLi4uLi4uCisjZGhjcC1vcHRpb249b3B0aW9uOmRvbWFpbi1zZWFyY2gsZW5nLmFwcGxlLmNvbSxtYXJrZXRpbmcuYXBwbGUuY29tCisKKyMgU2VuZCBSRkMtMzQ0MiBjbGFzc2xlc3Mgc3RhdGljIHJvdXRlcyAobm90ZSB0aGUgbmV0bWFzayBlbmNvZGluZykKKyNkaGNwLW9wdGlvbj0xMjEsMTkyLjE2OC4xLjAvMjQsMS4yLjMuNCwxMC4wLjAuMC84LDUuNi43LjgKKworIyBTZW5kIHZlbmRvci1jbGFzcyBzcGVjaWZpYyBvcHRpb25zIGVuY2Fwc3VsYXRlZCBpbiBESENQIG9wdGlvbiA0My4gCisjIFRoZSBtZWFuaW5nIG9mIHRoZSBvcHRpb25zIGlzIGRlZmluZWQgYnkgdGhlIHZlbmRvci1jbGFzcyBzbworIyBvcHRpb25zIGFyZSBzZW50IG9ubHkgd2hlbiB0aGUgY2xpZW50IHN1cHBsaWVkIHZlbmRvciBjbGFzcworIyBtYXRjaGVzIHRoZSBjbGFzcyBnaXZlbiBoZXJlLiAoQSBzdWJzdHJpbmcgbWF0Y2ggaXMgT0ssIHNvICJNU0ZUIiAKKyMgbWF0Y2hlcyAiTVNGVCIgYW5kICJNU0ZUIDUuMCIpLiBUaGlzIGV4YW1wbGUgc2V0cyB0aGUKKyMgbXRmdHAgYWRkcmVzcyB0byAwLjAuMC4wIGZvciBQWEVDbGllbnRzLgorI2RoY3Atb3B0aW9uPXZlbmRvcjpQWEVDbGllbnQsMSwwLjAuMC4wCisKKyMgU2VuZCBtaWNyb3NvZnQtc3BlY2lmaWMgb3B0aW9uIHRvIHRlbGwgd2luZG93cyB0byByZWxlYXNlIHRoZSBESENQIGxlYXNlCisjIHdoZW4gaXQgc2h1dHMgZG93bi4gTm90ZSB0aGUgImkiIGZsYWcsIHRvIHRlbGwgZG5zbWFzcSB0byBzZW5kIHRoZQorIyB2YWx1ZSBhcyBhIGZvdXItYnl0ZSBpbnRlZ2VyIC0gdGhhdCdzIHdoYXQgbWljcm9zb2Z0IHdhbnRzLiBTZWUKKyMgaHR0cDovL3RlY2huZXQyLm1pY3Jvc29mdC5jb20vV2luZG93c1NlcnZlci9lbi9saWJyYXJ5L2E3MGYxYmI3LWQyZDQtNDlmMC05NmQ2LTRiNzQxNGVjZmFhZTEwMzMubXNweD9tZnI9dHJ1ZQorI2RoY3Atb3B0aW9uPXZlbmRvcjpNU0ZULDIsMWkKKworIyBTZW5kIHRoZSBFbmNhcHN1bGF0ZWQtdmVuZG9yLWNsYXNzIElEIG5lZWRlZCBieSBzb21lIGNvbmZpZ3VyYXRpb25zIG9mCisjIEV0aGVyYm9vdCB0byBhbGxvdyBpcyB0byByZWNvZ25pc2UgdGhlIERIQ1Agc2VydmVyLgorI2RoY3Atb3B0aW9uPXZlbmRvcjpFdGhlcmJvb3QsNjAsIkV0aGVyYm9vdCIKKworIyBTZW5kIG9wdGlvbnMgdG8gUFhFTGludXguIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIHNlbmQgdGhlIG9wdGlvbnMgZXZlbgorIyB0aG91Z2ggdGhleSBkb24ndCBhcHBlYXIgaW4gdGhlIHBhcmFtZXRlciByZXF1ZXN0IGxpc3QsIHNvIHdlIG5lZWQKKyMgdG8gdXNlIGRoY3Atb3B0aW9uLWZvcmNlIGhlcmUuIAorIyBTZWUgaHR0cDovL3N5c2xpbnV4Lnp5dG9yLmNvbS9weGUucGhwI3NwZWNpYWwgZm9yIGRldGFpbHMuCisjIE1hZ2ljIG51bWJlciAtIG5lZWRlZCBiZWZvcmUgYW55dGhpbmcgZWxzZSBpcyByZWNvZ25pc2VkCisjZGhjcC1vcHRpb24tZm9yY2U9MjA4LGYxOjAwOjc0OjdlCisjIENvbmZpZ3VyYXRpb24gZmlsZSBuYW1lCisjZGhjcC1vcHRpb24tZm9yY2U9MjA5LGNvbmZpZ3MvY29tbW9uCisjIFBhdGggcHJlZml4CisjZGhjcC1vcHRpb24tZm9yY2U9MjEwLC90ZnRwYm9vdC9weGVsaW51eC9maWxlcy8KKyMgUmVib290IHRpbWUuIChOb3RlICdpJyB0byBzZW5kIDMyLWJpdCB2YWx1ZSkKKyNkaGNwLW9wdGlvbi1mb3JjZT0yMTEsMzBpCisKKyMgU2V0IHRoZSBib290IGZpbGVuYW1lIGZvciBuZXRib290L1BYRS4gWW91IHdpbGwgb25seSBuZWVkIAorIyB0aGlzIGlzIHlvdSB3YW50IHRvIGJvb3QgbWFjaGluZXMgb3ZlciB0aGUgbmV0d29yayBhbmQgeW91IHdpbGwgbmVlZAorIyBhIFRGVFAgc2VydmVyOyBlaXRoZXIgZG5zbWFzcSdzIGJ1aWx0IGluIFRGVFAgc2VydmVyIG9yIGFuCisjIGV4dGVybmFsIG9uZS4gKFNlZSBiZWxvdyBmb3IgaG93IHRvIGVuYWJsZSB0aGUgVEZUUCBzZXJ2ZXIuKQorI2RoY3AtYm9vdD1weGVsaW51eC4wCisKKyMgQm9vdCBmb3IgRXRoZXJib290IGdQWEUuIFRoZSBpZGVhIGlzIHRvIHNlbmQgdHdvIGRpZmZlcmVudAorIyBmaWxlbmFtZXMsIHRoZSBmaXJzdCBsb2FkcyBnUFhFLCBhbmQgdGhlIHNlY29uZCB0ZWxscyBnUFhFIHdoYXQgdG8KKyMgbG9hZC4gVGhlIGRoY3AtbWF0Y2ggc2V0cyB0aGUgZ3B4ZSB0YWcgZm9yIHJlcXVlc3RzIGZyb20gZ1BYRS4KKyNkaGNwLW1hdGNoPWdweGUsMTc1ICMgZ1BYRSBzZW5kcyBhIDE3NSBvcHRpb24uCisjZGhjcC1ib290PW5ldDojZ3B4ZSx1bmRpb25seS5rcHhlCisjZGhjcC1ib290PW15Ym9vdGltYWdlCisgCisjIEVuY2Fwc3VsYXRlZCBvcHRpb25zIGZvciBFdGhlcmJvb3QgZ1BYRS4gQWxsIHRoZSBvcHRpb25zIGFyZQorIyBlbmNhcHN1bGF0ZWQgd2l0aGluIG9wdGlvbiAxNzUKKyNkaGNwLW9wdGlvbj1lbmNhcDoxNzUsIDEsIDViICAgICAgICAgIyBwcmlvcml0eSBjb2RlCisjZGhjcC1vcHRpb249ZW5jYXA6MTc1LCAxNzYsIDFiICAgICAgICMgbm8tcHJveHlkaGNwIAorI2RoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTc3LCBzdHJpbmcgICAjIGJ1cy1pZCAKKyNkaGNwLW9wdGlvbj1lbmNhcDoxNzUsIDE4OSwgMWIgICAgICAgIyBCSU9TIGRyaXZlIGNvZGUKKyNkaGNwLW9wdGlvbj1lbmNhcDoxNzUsIDE5MCwgdXNlciAgICAgIyBpU0NTSSB1c2VybmFtZQorI2RoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTkxLCBwYXNzICAgICAjIGlTQ1NJIHBhc3N3b3JkCisKKyMgVGVzdCBmb3IgdGhlIGFyY2hpdGVjdHVyZSBvZiBhIG5ldGJvb3QgY2xpZW50LiBQWEUgY2xpZW50cyBhcmUKKyMgc3VwcG9zZWQgdG8gc2VuZCB0aGVpciBhcmNoaXRlY3R1cmUgYXMgb3B0aW9uIDkzLiAoU2VlIFJGQyA0NTc4KQorI2RoY3AtbWF0Y2g9cGVlY2Vlcywgb3B0aW9uOmNsaWVudC1hcmNoLCAwICN4ODYtMzIKKyNkaGNwLW1hdGNoPWl0YW5pY3MsIG9wdGlvbjpjbGllbnQtYXJjaCwgMiAjSUE2NAorI2RoY3AtbWF0Y2g9aGFtbWVycywgb3B0aW9uOmNsaWVudC1hcmNoLCA2ICN4ODYtNjQKKyNkaGNwLW1hdGNoPW1hY3RlbHMsIG9wdGlvbjpjbGllbnQtYXJjaCwgNyAjRUZJIHg4Ni02NCAKKworIyBEbyByZWFsIFBYRSwgcmF0aGVyIHRoYW4ganVzdCBib290aW5nIGEgc2luZ2xlIGZpbGUsIHRoaXMgaXMgYW4KKyMgYWx0ZXJuYXRpdmUgdG8gZGhjcC1ib290LgorI3B4ZS1wcm9tcHQ9IldoYXQgc3lzdGVtIHNoYWxsIEkgbmV0Ym9vdD8iCisjIG9yIHdpdGggdGltZW91dCBiZWZvcmUgZmlyc3QgYXZhaWxhYmxlIGFjdGlvbiBpcyB0YWtlbjoKKyNweGUtcHJvbXB0PSJQcmVzcyBGOCBmb3IgbWVudS4iLCA2MAorCisjIEF2YWlsYWJsZSBib290IHNlcnZpY2VzLiBmb3IgUFhFLgorI3B4ZS1zZXJ2aWNlPXg4NlBDLCAiQm9vdCBmcm9tIGxvY2FsIGRpc2siLCAwCisKKyMgTG9hZHMgPHRmdHAtcm9vdD4vcHhlbGludXguMCBmcm9tIGRuc21hc3EgVEZUUCBzZXJ2ZXIuCisjcHhlLXNlcnZpY2U9eDg2UEMsICJJbnN0YWxsIExpbnV4IiwgcHhlbGludXggCisKKyMgTG9hZHMgPHRmdHAtcm9vdD4vcHhlbGludXguMCBmcm9tIFRGVFAgc2VydmVyIGF0IDEuMi4zLjQuCisjIEJld2FyZSB0aGlzIGZhaWxzIG9uIG9sZCBQWEUgUk9NUy4KKyNweGUtc2VydmljZT14ODZQQywgIkluc3RhbGwgTGludXgiLCBweGVsaW51eCwgMS4yLjMuNCAKKworIyBVc2UgYm9vdHNlcnZlciBvbiBuZXR3b3JrLCBmb3VuZCBteSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0LgorI3B4ZS1zZXJ2aWNlPXg4NlBDLCAiSW5zdGFsbCB3aW5kb3dzIGZyb20gUklTIHNlcnZlciIsIDEKKworIyBVc2UgYm9vdHNlcnZlciBhdCBhIGtub3duIElQIGFkZHJlc3MuCisjcHhlLXNlcnZpY2U9eDg2UEMsICJJbnN0YWxsIHdpbmRvd3MgZnJvbSBSSVMgc2VydmVyIiwgMSwgMS4yLjMuNAorCisjIElmIHlvdSBoYXZlIG11bHRpY2FzdC1GVFAgYXZhaWxhYmxlLAorIyBpbmZvcm1hdGlvbiBmb3IgdGhhdCBjYW4gYmUgcGFzc2VkIGluIGEgc2ltaWxhciB3YXkgdXNpbmcgb3B0aW9ucyAxCisjIHRvIDUuIFNlZSBwYWdlIDE5IG9mCisjIGh0dHA6Ly9kb3dubG9hZC5pbnRlbC5jb20vZGVzaWduL2FyY2hpdmVzL3dmbS9kb3dubG9hZHMvcHhlc3BlYy5wZGYgIAorCisgIAorIyBFbmFibGUgZG5zbWFzcSdzIGJ1aWx0LWluIFRGVFAgc2VydmVyCisjZW5hYmxlLXRmdHAKKworIyBTZXQgdGhlIHJvb3QgZGlyZWN0b3J5IGZvciBmaWxlcyBhdmFpbGJsZSB2aWEgRlRQLgorI3RmdHAtcm9vdD0vdmFyL2Z0cGQKKworIyBNYWtlIHRoZSBURlRQIHNlcnZlciBtb3JlIHNlY3VyZTogd2l0aCB0aGlzIHNldCwgb25seSBmaWxlcyBvd25lZCBieQorIyB0aGUgdXNlciBkbnNtYXNxIGlzIHJ1bm5pbmcgYXMgd2lsbCBiZSBzZW5kIG92ZXIgdGhlIG5ldC4KKyN0ZnRwLXNlY3VyZQorCisjIFRoaXMgb3B0aW9uIHN0b3BzIGRuc21hc3EgZnJvbSBuZWdvdGlhdGluZyBhIGxhcmdlciBibG9ja3NpemUgZm9yIFRGVFAgCisjIHRyYW5zZmVycy4gSXQgd2lsbCBzbG93IHRoaW5ncyBkb3duLCBidXQgbWF5IHJlc2N1ZSBzb21lIGJyb2tlbiBURlRQCisjIGNsaWVudHMuCisjdGZ0cC1uby1ibG9ja3NpemUKKworIyBTZXQgdGhlIGJvb3QgZmlsZSBuYW1lIG9ubHkgd2hlbiB0aGUgInJlZCIgdGFnIGlzIHNldC4KKyNkaGNwLWJvb3Q9bmV0OnJlZCxweGVsaW51eC5yZWQtbmV0CisKKyMgQW4gZXhhbXBsZSBvZiBkaGNwLWJvb3Qgd2l0aCBhbiBleHRlcm5hbCBURlRQIHNlcnZlcjogdGhlIG5hbWUgYW5kIElQCisjIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciBhcmUgZ2l2ZW4gYWZ0ZXIgdGhlIGZpbGVuYW1lLgorIyBDYW4gZmFpbCB3aXRoIG9sZCBQWEUgUk9NUy4gT3ZlcnJpZGRlbiBieSAtLXB4ZS1zZXJ2aWNlLgorI2RoY3AtYm9vdD0vdmFyL2Z0cGQvcHhlbGludXguMCxib290aG9zdCwxOTIuMTY4LjAuMworCisjIFNldCB0aGUgbGltaXQgb24gREhDUCBsZWFzZXMsIHRoZSBkZWZhdWx0IGlzIDE1MAorI2RoY3AtbGVhc2UtbWF4PTE1MAorCisjIFRoZSBESENQIHNlcnZlciBuZWVkcyBzb21ld2hlcmUgb24gZGlzayB0byBrZWVwIGl0cyBsZWFzZSBkYXRhYmFzZS4KKyMgVGhpcyBkZWZhdWx0cyB0byBhIHNhbmUgbG9jYXRpb24sIGJ1dCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaXQsIHVzZQorIyB0aGUgbGluZSBiZWxvdy4KKyNkaGNwLWxlYXNlZmlsZT0vdmFyL2xpYi9taXNjL2Ruc21hc3EubGVhc2VzCisKKyMgU2V0IHRoZSBESENQIHNlcnZlciB0byBhdXRob3JpdGF0aXZlIG1vZGUuIEluIHRoaXMgbW9kZSBpdCB3aWxsIGJhcmdlIGluCisjIGFuZCB0YWtlIG92ZXIgdGhlIGxlYXNlIGZvciBhbnkgY2xpZW50IHdoaWNoIGJyb2FkY2FzdHMgb24gdGhlIG5ldHdvcmssCisjIHdoZXRoZXIgaXQgaGFzIGEgcmVjb3JkIG9mIHRoZSBsZWFzZSBvciBub3QuIFRoaXMgYXZvaWRzIGxvbmcgdGltZW91dHMKKyMgd2hlbiBhIG1hY2hpbmUgd2FrZXMgdXAgb24gYSBuZXcgbmV0d29yay4gRE8gTk9UIGVuYWJsZSB0aGlzIGlmIHRoZXJlJ3MKKyMgdGhlIHNsaWdoZXN0IGNoYW5jZSB0aGF0IHlvdSBtaWdodCBlbmQgdXAgYWNjaWRlbnRhbGx5IGNvbmZpZ3VyaW5nIGEgREhDUAorIyBzZXJ2ZXIgZm9yIHlvdXIgY2FtcHVzL2NvbXBhbnkgYWNjaWRlbnRhbGx5LiBUaGUgSVNDIHNlcnZlciB1c2VzCisjIHRoZSBzYW1lIG9wdGlvbiwgYW5kIHRoaXMgVVJMIHByb3ZpZGVzIG1vcmUgaW5mb3JtYXRpb246CisjIGh0dHA6Ly93d3cuaXNjLm9yZy9pbmRleC5wbD8vc3cvZGhjcC9hdXRob3JpdGF0aXZlLnBocAorI2RoY3AtYXV0aG9yaXRhdGl2ZQorCisjIFJ1biBhbiBleGVjdXRhYmxlIHdoZW4gYSBESENQIGxlYXNlIGlzIGNyZWF0ZWQgb3IgZGVzdHJveWVkLgorIyBUaGUgYXJndW1lbnRzIHNlbnQgdG8gdGhlIHNjcmlwdCBhcmUgImFkZCIgb3IgImRlbCIsIAorIyB0aGVuIHRoZSBNQUMgYWRkcmVzcywgdGhlIElQIGFkZHJlc3MgYW5kIGZpbmFsbHkgdGhlIGhvc3RuYW1lCisjIGlmIHRoZXJlIGlzIG9uZS4gCisjZGhjcC1zY3JpcHQ9L2Jpbi9lY2hvCisKKyMgU2V0IHRoZSBjYWNoZXNpemUgaGVyZS4KKyNjYWNoZS1zaXplPTE1MAorCisjIElmIHlvdSB3YW50IHRvIGRpc2FibGUgbmVnYXRpdmUgY2FjaGluZywgdW5jb21tZW50IHRoaXMuCisjbm8tbmVnY2FjaGUKKworIyBOb3JtYWxseSByZXNwb25zZXMgd2hpY2ggY29tZSBmb3JtIC9ldGMvaG9zdHMgYW5kIHRoZSBESENQIGxlYXNlCisjIGZpbGUgaGF2ZSBUaW1lLVRvLUxpdmUgc2V0IGFzIHplcm8sIHdoaWNoIGNvbnZlbnRpb25hbGx5IG1lYW5zCisjIGRvIG5vdCBjYWNoZSBmdXJ0aGVyLiBJZiB5b3UgYXJlIGhhcHB5IHRvIHRyYWRlIGxvd2VyIGxvYWQgb24gdGhlCisjIHNlcnZlciBmb3IgcG90ZW50aWFsbHkgc3RhbGUgZGF0ZSwgeW91IGNhbiBzZXQgYSB0aW1lLXRvLWxpdmUgKGluCisjIHNlY29uZHMpIGhlcmUuCisjbG9jYWwtdHRsPQorCisjIElmIHlvdSB3YW50IGRuc21hc3EgdG8gZGV0ZWN0IGF0dGVtcHRzIGJ5IFZlcmlzaWduIHRvIHNlbmQgcXVlcmllcworIyB0byB1bnJlZ2lzdGVyZWQgLmNvbSBhbmQgLm5ldCBob3N0cyB0byBpdHMgc2l0ZWZpbmRlciBzZXJ2aWNlIGFuZAorIyBoYXZlIGRuc21hc3EgaW5zdGVhZCByZXR1cm4gdGhlIGNvcnJlY3QgTlhET01BSU4gcmVzcG9uc2UsIHVuY29tbWVudAorIyB0aGlzIGxpbmUuIFlvdSBjYW4gYWRkIHNpbWlsYXIgbGluZXMgdG8gZG8gdGhlIHNhbWUgZm9yIG90aGVyCisjIHJlZ2lzdHJpZXMgd2hpY2ggaGF2ZSBpbXBsZW1lbnRlZCB3aWxkY2FyZCBBIHJlY29yZHMuCisjYm9ndXMtbnhkb21haW49NjQuOTQuMTEwLjExCisKKyMgSWYgeW91IHdhbnQgdG8gZml4IHVwIEROUyByZXN1bHRzIGZyb20gdXBzdHJlYW0gc2VydmVycywgdXNlIHRoZQorIyBhbGlhcyBvcHRpb24uIFRoaXMgb25seSB3b3JrcyBmb3IgSVB2NC4KKyMgVGhpcyBhbGlhcyBtYWtlcyBhIHJlc3VsdCBvZiAxLjIuMy40IGFwcGVhciBhcyA1LjYuNy44CisjYWxpYXM9MS4yLjMuNCw1LjYuNy44CisjIGFuZCB0aGlzIG1hcHMgMS4yLjMueCB0byA1LjYuNy54CisjYWxpYXM9MS4yLjMuMCw1LjYuNy4wLDI1NS4yNTUuMjU1LjAKKyMgYW5kIHRoaXMgbWFwcyAxOTIuMTY4LjAuMTAtPjE5Mi4xNjguMC40MCB0byAxMC4wLjAuMTAtPjEwLjAuMC40MAorI2FsaWFzPTE5Mi4xNjguMC4xMC0xOTIuMTY4LjAuNDAsMTAuMC4wLjAsMjU1LjI1NS4yNTUuMAorCisjIENoYW5nZSB0aGVzZSBsaW5lcyBpZiB5b3Ugd2FudCBkbnNtYXNxIHRvIHNlcnZlIE1YIHJlY29yZHMuCisKKyMgUmV0dXJuIGFuIE1YIHJlY29yZCBuYW1lZCAibWFpbGRvbWFpbi5jb20iIHdpdGggdGFyZ2V0CisjIHNlcnZlcm1hY2hpbmUuY29tIGFuZCBwcmVmZXJlbmNlIDUwCisjbXgtaG9zdD1tYWlsZG9tYWluLmNvbSxzZXJ2ZXJtYWNoaW5lLmNvbSw1MAorCisjIFNldCB0aGUgZGVmYXVsdCB0YXJnZXQgZm9yIE1YIHJlY29yZHMgY3JlYXRlZCB1c2luZyB0aGUgbG9jYWxteCBvcHRpb24uCisjbXgtdGFyZ2V0PXNlcnZlcm1hY2hpbmUuY29tCisKKyMgUmV0dXJuIGFuIE1YIHJlY29yZCBwb2ludGluZyB0byB0aGUgbXgtdGFyZ2V0IGZvciBhbGwgbG9jYWwKKyMgbWFjaGluZXMuCisjbG9jYWxteAorCisjIFJldHVybiBhbiBNWCByZWNvcmQgcG9pbnRpbmcgdG8gaXRzZWxmIGZvciBhbGwgbG9jYWwgbWFjaGluZXMuCisjc2VsZm14CisKKyMgQ2hhbmdlIHRoZSBmb2xsb3dpbmcgbGluZXMgaWYgeW91IHdhbnQgZG5zbWFzcSB0byBzZXJ2ZSBTUlYKKyMgcmVjb3Jkcy4gIFRoZXNlIGFyZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc2VydmUgbGRhcCByZXF1ZXN0cyBmb3IKKyMgQWN0aXZlIERpcmVjdG9yeSBhbmQgb3RoZXIgd2luZG93cy1vcmlnaW5hdGVkIEROUyByZXF1ZXN0cy4KKyMgU2VlIFJGQyAyNzgyLgorIyBZb3UgbWF5IGFkZCBtdWx0aXBsZSBzcnYtaG9zdCBsaW5lcy4KKyMgVGhlIGZpZWxkcyBhcmUgPG5hbWU+LDx0YXJnZXQ+LDxwb3J0Piw8cHJpb3JpdHk+LDx3ZWlnaHQ+CisjIElmIHRoZSBkb21haW4gcGFydCBpZiBtaXNzaW5nIGZyb20gdGhlIG5hbWUgKHNvIHRoYXQgaXMganVzdCBoYXMgdGhlCisjIHNlcnZpY2UgYW5kIHByb3RvY29sIHNlY3Rpb25zKSB0aGVuIHRoZSBkb21haW4gZ2l2ZW4gYnkgdGhlIGRvbWFpbj0KKyMgY29uZmlnIG9wdGlvbiBpcyB1c2VkLiAoTm90ZSB0aGF0IGV4cGFuZC1ob3N0cyBkb2VzIG5vdCBuZWVkIHRvIGJlCisjIHNldCBmb3IgdGhpcyB0byB3b3JrLikKKworIyBBIFNSViByZWNvcmQgc2VuZGluZyBMREFQIGZvciB0aGUgZXhhbXBsZS5jb20gZG9tYWluIHRvCisjIGxkYXBzZXJ2ZXIuZXhhbXBsZS5jb20gcG9ydCAyODkKKyNzcnYtaG9zdD1fbGRhcC5fdGNwLmV4YW1wbGUuY29tLGxkYXBzZXJ2ZXIuZXhhbXBsZS5jb20sMzg5CisKKyMgQSBTUlYgcmVjb3JkIHNlbmRpbmcgTERBUCBmb3IgdGhlIGV4YW1wbGUuY29tIGRvbWFpbiB0bworIyBsZGFwc2VydmVyLmV4YW1wbGUuY29tIHBvcnQgMjg5ICh1c2luZyBkb21haW49KQorI2RvbWFpbj1leGFtcGxlLmNvbQorI3Nydi1ob3N0PV9sZGFwLl90Y3AsbGRhcHNlcnZlci5leGFtcGxlLmNvbSwzODkKKworIyBUd28gU1JWIHJlY29yZHMgZm9yIExEQVAsIGVhY2ggd2l0aCBkaWZmZXJlbnQgcHJpb3JpdGllcworI3Nydi1ob3N0PV9sZGFwLl90Y3AuZXhhbXBsZS5jb20sbGRhcHNlcnZlci5leGFtcGxlLmNvbSwzODksMQorI3Nydi1ob3N0PV9sZGFwLl90Y3AuZXhhbXBsZS5jb20sbGRhcHNlcnZlci5leGFtcGxlLmNvbSwzODksMgorCisjIEEgU1JWIHJlY29yZCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgaXMgbm8gTERBUCBzZXJ2ZXIgZm9yIHRoZSBkb21haW4KKyMgZXhhbXBsZS5jb20KKyNzcnYtaG9zdD1fbGRhcC5fdGNwLmV4YW1wbGUuY29tCisKKyMgVGhlIGZvbGxvd2luZyBsaW5lIHNob3dzIGhvdyB0byBtYWtlIGRuc21hc3Egc2VydmUgYW4gYXJiaXRyYXJ5IFBUUgorIyByZWNvcmQuIFRoaXMgaXMgdXNlZnVsIGZvciBETlMtU0QuIChOb3RlIHRoYXQgdGhlCisjIGRvbWFpbi1uYW1lIGV4cGFuc2lvbiBkb25lIGZvciBTUlYgcmVjb3JkcyBfZG9lc19ub3QKKyMgb2NjdXIgZm9yIFBUUiByZWNvcmRzLikKKyNwdHItcmVjb3JkPV9odHRwLl90Y3AuZG5zLXNkLXNlcnZpY2VzLCJOZXcgRW1wbG95ZWUgUGFnZS5faHR0cC5fdGNwLmRucy1zZC1zZXJ2aWNlcyIKKworIyBDaGFuZ2UgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBlbmFibGUgZG5zbWFzcSB0byBzZXJ2ZSBUWFQgcmVjb3Jkcy4KKyMgVGhlc2UgYXJlIHVzZWQgZm9yIHRoaW5ncyBsaWtlIFNQRiBhbmQgemVyb2NvbmYuIChOb3RlIHRoYXQgdGhlCisjIGRvbWFpbi1uYW1lIGV4cGFuc2lvbiBkb25lIGZvciBTUlYgcmVjb3JkcyBfZG9lc19ub3QKKyMgb2NjdXIgZm9yIFRYVCByZWNvcmRzLikKKworI0V4YW1wbGUgU1BGLgorI3R4dC1yZWNvcmQ9ZXhhbXBsZS5jb20sInY9c3BmMSBhIC1hbGwiCisKKyNFeGFtcGxlIHplcm9jb25mCisjdHh0LXJlY29yZD1faHR0cC5fdGNwLmV4YW1wbGUuY29tLG5hbWU9dmFsdWUscGFwZXI9QTQKKworIyBQcm92aWRlIGFuIGFsaWFzIGZvciBhICJsb2NhbCIgRE5TIG5hbWUuIE5vdGUgdGhhdCB0aGlzIF9vbmx5XyB3b3JrcworIyBmb3IgdGFyZ2V0cyB3aGljaCBhcmUgbmFtZXMgZnJvbSBESENQIG9yIC9ldGMvaG9zdHMuIEdpdmUgaG9zdAorIyAiYmVydCIgYW5vdGhlciBuYW1lLCBiZXJ0cmFuZAorI2NuYW1lPWJlcnRhbmQsYmVydAorCisjIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGxvZyBlYWNoIEROUyBxdWVyeSBhcyBpdCBwYXNzZXMgdGhyb3VnaAorIyBkbnNtYXNxLgorI2xvZy1xdWVyaWVzCisKKyMgTG9nIGxvdHMgb2YgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgREhDUCB0cmFuc2FjdGlvbnMuCisjbG9nLWRoY3AKKworIyBJbmNsdWRlIGEgYW5vdGhlciBsb3Qgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zLgorI2NvbmYtZmlsZT0vZXRjL2Ruc21hc3EubW9yZS5jb25mCisjY29uZi1kaXI9L2V0Yy9kbnNtYXNxLmQKZGlmZiAtLWdpdCBhL2RvYy5odG1sIGIvZG9jLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMThhNGIyNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy5odG1sCkBAIC0wLDAgKzEsMTEzIEBACis8SFRNTD4KKzxIRUFEPgorPFRJVExFPiBEbnNtYXNxIC0gYSBETlMgZm9yd2FyZGVyIGZvciBOQVQgZmlyZXdhbGxzLjwvVElUTEU+Cis8L0hFQUQ+Cis8Qk9EWSBCR0NPTE9SPSJXSElURSI+IAorPEgxIEFMSUdOPWNlbnRlcj5EbnNtYXNxPC9IMT4gCitEbnNtYXNxIGlzIGEgbGlnaHR3ZWlnaHQsIGVhc3kgdG8gY29uZmlndXJlIEROUyBmb3J3YXJkZXIgYW5kIERIQ1AKKyBzZXJ2ZXIuIEl0IGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUgRE5TIGFuZCwgb3B0aW9uYWxseSwgREhDUCwgdG8gYSAKKyBzbWFsbCBuZXR3b3JrLiBJdCBjYW4gc2VydmUgdGhlIG5hbWVzIG9mIGxvY2FsIG1hY2hpbmVzIHdoaWNoIGFyZSAKKyBub3QgaW4gdGhlIGdsb2JhbCBETlMuIFRoZSBESENQIHNlcnZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIEROUyAKKyBzZXJ2ZXIgYW5kIGFsbG93cyBtYWNoaW5lcyB3aXRoIERIQ1AtYWxsb2NhdGVkIGFkZHJlc3NlcworIHRvIGFwcGVhciBpbiB0aGUgRE5TIHdpdGggbmFtZXMgY29uZmlndXJlZCBlaXRoZXIgaW4gZWFjaCBob3N0IG9yCisgaW4gYSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZS4gRG5zbWFzcSBzdXBwb3J0cyBzdGF0aWMgYW5kIGR5bmFtaWMgCisgREhDUCBsZWFzZXMgYW5kIEJPT1RQL1RGVFAvUFhFIGZvciBuZXR3b3JrIGJvb3Rpbmcgb2YgZGlza2xlc3MgbWFjaGluZXMuCis8UD4KKyBEbnNtYXNxIGlzIHRhcmdldGVkIGF0IGhvbWUgbmV0d29ya3MgdXNpbmcgTkFUIGFuZCAKK2Nvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQgdmlhIGEgbW9kZW0sIGNhYmxlLW1vZGVtIG9yIEFEU0wKK2Nvbm5lY3Rpb24gYnV0IHdvdWxkIGJlIGEgZ29vZCBjaG9pY2UgZm9yIGFueSBzbWFsbGlzaCBuZXR3b3JrICh1cCB0bworMTAwMCBjbGllbnRzIGlzIGtub3duIHRvIHdvcmspIHdoZXJlIGxvdworcmVzb3VyY2UgdXNlIGFuZCBlYXNlIG9mIGNvbmZpZ3VyYXRpb24gYXJlIGltcG9ydGFudC4gCis8UD4KK1N1cHBvcnRlZCBwbGF0Zm9ybXMgaW5jbHVkZSBMaW51eCAod2l0aCBnbGliYyBhbmQgdWNsaWJjKSwgKkJTRCwKK1NvbGFyaXMgYW5kIE1hYyBPUyBYLgorRG5zbWFzcSBpcyBpbmNsdWRlZCBpbiBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIExpbnV4IGRpc3RyaWJ1dGlvbnM6CitHZW50b28sIERlYmlhbiwgU2xhY2t3YXJlLCBTdXNlLCBGZWRvcmEsCitTbW9vdGh3YWxsLCBJUC1Db3AsIGZsb3BweWZ3LCBGaXJlYm94LCBMRUFGLCBGcmVlc2NvLCBmbGk0bCwKK0NveW90ZUxpbnV4LCBFbmRpYW4gRmlyZXdhbGwgYW5kCitDbGFya2Nvbm5lY3QuIEl0IGlzIGFsc28gYXZhaWxhYmxlIGFzIEZyZWVCU0QsIE9wZW5CU0QgYW5kIE5ldEJTRCBwb3J0cyBhbmQgaXMgdXNlZCBpbgorTGlua3N5cyB3aXJlbGVzcyByb3V0ZXJzIChkZC13cnQsIG9wZW53cnQgYW5kIHRoZSBzdG9jayBmaXJtd2FyZSkgYW5kIHRoZSBtMG4wd2FsbCBwcm9qZWN0LgorPFA+CitEbnNtYXNxIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6Cis8RElSPgorCis8TEk+IAorVGhlIEROUyBjb25maWd1cmF0aW9uIG9mIG1hY2hpbmVzIGJlaGluZCB0aGUgZmlyZXdhbGwgaXMgc2ltcGxlIGFuZAorZG9lc24ndCBkZXBlbmQgb24gdGhlIGRldGFpbHMgb2YgdGhlIElTUCdzIGRucyBzZXJ2ZXJzCis8TEk+CitDbGllbnRzIHdoaWNoIHRyeSB0byBkbyBETlMgbG9va3VwcyB3aGlsZSAgYSBtb2RlbSBsaW5rIHRvIHRoZQoraW50ZXJuZXQgaXMgZG93biB3aWxsIHRpbWUgb3V0IGltbWVkaWF0ZWx5LgorPC9MST4KKzxMST4KK0Ruc21hc3Egd2lsbCBzZXJ2ZSBuYW1lcyBmcm9tIHRoZSAvZXRjL2hvc3RzIGZpbGUgb24gdGhlIGZpcmV3YWxsCittYWNoaW5lOiBJZiB0aGUgbmFtZXMgb2YgbG9jYWwgbWFjaGluZXMgYXJlIHRoZXJlLCB0aGVuIHRoZXkgY2FuIGFsbAorYmUgYWRkcmVzc2VkIHdpdGhvdXQgaGF2aW5nIHRvIG1haW50YWluIC9ldGMvaG9zdHMgb24gZWFjaCBtYWNoaW5lLgorPC9MST4KKzxMST4KK1RoZSBpbnRlZ3JhdGVkIERIQ1Agc2VydmVyIHN1cHBvcnRzIHN0YXRpYyBhbmQgZHluYW1pYyBESENQIGxlYXNlcyBhbmQKK211bHRpcGxlIG5ldHdvcmtzIGFuZCBJUCByYW5nZXMuIEl0IHdvcmtzIGFjcm9zcyBCT09UUCByZWxheXMgYW5kCitzdXBwb3J0cyBESENQIG9wdGlvbnMgaW5jbHVkaW5nIFJGQzMzOTcgRE5TIHNlYXJjaCBsaXN0cy4KK01hY2hpbmVzIHdoaWNoIGFyZSBjb25maWd1cmVkIGJ5IERIQ1AgaGF2ZSB0aGVpciBuYW1lcyBhdXRvbWF0aWNhbGx5IAoraW5jbHVkZWQgaW4gdGhlIEROUyBhbmQgdGhlIG5hbWVzIGNhbiBzcGVjaWZpZWQgYnkgZWFjaCBtYWNoaW5lIG9yCitjZW50cmFsbHkgYnkgYXNzb2NpYXRpbmcgYSBuYW1lIHdpdGggYSBNQUMgYWRkcmVzcyBpbiB0aGUgZG5zbWFzcQorY29uZmlnIGZpbGUuCis8L0xJPgorPExJPgorRG5zbWFzcSBjYWNoZXMgaW50ZXJuZXQgYWRkcmVzc2VzIChBIHJlY29yZHMgYW5kIEFBQUEgcmVjb3JkcykgYW5kIGFkZHJlc3MtdG8tbmFtZQorbWFwcGluZ3MgKFBUUiByZWNvcmRzKSwgcmVkdWNpbmcgdGhlIGxvYWQgb24gdXBzdHJlYW0gc2VydmVycyBhbmQKK2ltcHJvdmluZyBwZXJmb3JtYW5jZSAoZXNwZWNpYWxseSBvbiBtb2RlbSBjb25uZWN0aW9ucykuIAorPC9MST4KKzxMST4KK0Ruc21hc3EgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gYXV0b21hdGljYWxseSBwaWNrIHVwIHRoZSBhZGRyZXNzZXMgb2YKK2l0cyB1cHN0cmVhbSBuYW1lc2VydmVycyBmcm9tIHBwcCBvciBkaGNwIGNvbmZpZ3VyYXRpb24uIEl0IHdpbGwKK2F1dG9tYXRpY2FsbHkgcmVsb2FkIHRoaXMgaW5mb3JtYXRpb24gaWYgaXQgY2hhbmdlcy4gVGhpcyBmYWNpbGl0eQord2lsbCBiZSBvZiBwYXJ0aWN1bGFyIGludGVyZXN0IHRvIG1haW50YWluZXJzIG9mIExpbnV4IGZpcmV3YWxsCitkaXN0cmlidXRpb25zIHNpbmNlIGl0IGFsbG93cyBkbnMgY29uZmlndXJhdGlvbiB0byBiZSBtYWRlIGF1dG9tYXRpYy4KKzwvTEk+Cis8TEk+CitPbiBJUHY2LWVuYWJsZWQgYm94ZXMsIGRuc21hc3EgY2FuIGJvdGggdGFsayB0byB1cHN0cmVhbSBzZXJ2ZXJzIHZpYSBJUHY2IAorYW5kIG9mZmVyIEROUyBzZXJ2aWNlIHZpYSBJUHY2LiBPbiBkdWFsLXN0YWNrIChJUHY0IGFuZCBJUHY2KSBib3hlcyBpdCB0YWxrcworYm90aCBwcm90b2NvbHMgYW5kIGNhbiBldmVuIGFjdCBhcyBJUHY2LXRvLUlQdjQgb3IgSVB2NC10by1JUHY2IGZvcndhcmRlci4KKzwvTEk+Cis8TEk+CitEbnNtYXNxIGNhbiBiZSBjb25maWd1cmVkIHRvIHNlbmQgcXVlcmllcyBmb3IgY2VydGFpbiBkb21haW5zIHRvCit1cHN0cmVhbSBzZXJ2ZXJzIGhhbmRsaW5nIG9ubHkgdGhvc2UgZG9tYWlucy4gVGhpcyBtYWtlcyBpbnRlZ3JhdGlvbgord2l0aCBwcml2YXRlIEROUyBzeXN0ZW1zIGVhc3kuCis8L0xJPgorPExJPgorRG5zbWFzcSBzdXBwb3J0cyBNWCBhbmQgU1JWIHJlY29yZHMgYW5kIGNhbiBiZSBjb25maWd1cmVkIHRvIHJldHVybiBNWCByZWNvcmRzCitmb3IgYW55IG9yIGFsbCBsb2NhbCBtYWNoaW5lcy4KKzwvTEk+Cis8L0RJUj4KKworPEgyPkRvd25sb2FkLjwvSDI+CisKKzxBIEhSRUY9Imh0dHA6Ly93d3cudGhla2VsbGV5cy5vcmcudWsvZG5zbWFzcS8iPiBEb3dubG9hZDwvQT4gZG5zbWFzcSBoZXJlLiAKK1RoZSB0YXJiYWxsIGluY2x1ZGVzIHRoaXMgZG9jdW1lbnRhdGlvbiwgc291cmNlLCBhbmQgbWFucGFnZS4KK1RoZXJlIGlzIGFsc28gYSA8QSBIUkVGPSJDSEFOR0VMT0ciPiBDSEFOR0VMT0c8L0E+IGFuZCBhIDxBIEhSRUY9IkZBUSI+RkFRPC9BPi4KK0Ruc21hc3EgaXMgcGFydCBvZiB0aGUgRGViaWFuIGRpc3RyaWJ1dGlvbiwgaXQgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSAKKzxBIEhSRUY9Imh0dHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2QvZG5zbWFzcS8iPiBoZXJlPC9BPiBvciBpbnN0YWxsZWQgdXNpbmcgPFRUPmFwdDwvVFQ+LgorCis8SDI+TGlua3MuPC9IMj4KK0RhbWllbiBSYXVkZS1Nb3J2YW4gaGFzIGFuIGFydGljbGUgaW4gRnJlbmNoIGF0IDxBIEhSRUY9Imh0dHA6Ly93d3cuZHJhenppYi5jb20vZG9jcy1kbnNtYXNxLmh0bWwiPmh0dHA6Ly93d3cuZHJhenppYi5jb20vZG9jcy1kbnNtYXNxLmh0bWw8L0E+CitUaGVyZSBpcyBhIGdvb2QgYXJ0aWNsZSBhYm91dCBkbnNtYXNxIGF0IDxBCitIUkVGPSJodHRwOi8vd3d3LmVudGVycHJpc2VuZXR3b3JraW5ncGxhbmV0LmNvbS9uZXRvcy9hcnRpY2xlLnBocC8zMzc3MzUxIj5odHRwOi8vd3d3LmVudGVycHJpc2VuZXR3b3JraW5ncGxhbmV0LmNvbS9uZXRvcy9hcnRpY2xlLnBocC8zMzc3MzUxPC9BPgorYW5kIGFub3RoZXIgYXQgPEEKK0hSRUY9Imh0dHA6Ly93d3cubGludXguY29tL2FydGljbGVzLzE0OTA0MCI+aHR0cDovL3d3dy5saW51eC5jb20vYXJ0aWNsZXMvMTQ5MDQwPC9BPgorYW5kIElseWEgRXZzZWV2IGhhcyBhbiBhcnRpY2xlIGluIFJ1c3NpYW4gYWJvdXQgZG5zbWFzcSB0byBiZSBmb3VuZCBhdAorPEEgSFJFRj0iaHR0cDovL2lseWEtZXZzZWV2Lm5hcm9kLnJ1L2FydGljbGVzL2Ruc21hc3EiPgoraHR0cDovL2lseWEtZXZzZWV2Lm5hcm9kLnJ1L2FydGljbGVzL2Ruc21hc3E8L0E+LiBJc21hZWwgVWxsIGhhcyBhbgorYXJ0aWNsZSBhYm91dCBkbnNtYXNxIGluIFNwYW5pc2ggYXQgPEEgSFJFRj0iaHR0cDovL3d3dy5tZXktb25saW5lLmNvbS5hci9ibG9nL2luZGV4LnBocC9hcmNoaXZlcy9ndWlhLXJhcGlkYS1kZS1kbnNtYXNxIj5odHRwOi8vd3d3Lm1leS1vbmxpbmUuY29tLmFyL2Jsb2cvaW5kZXgucGhwL2FyY2hpdmVzL2d1aWEtcmFwaWRhLWRlLWRuc21hc3E8L0E+Cis8SDI+TGljZW5zZS48L0gyPgorRG5zbWFzcSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgR1BMLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgZGlzdHJpYnV0aW9uIAorZm9yIGRldGFpbHMuCisKKzxIMj5Db250YWN0LjwvSDI+CitUaGVyZSBpcyBhIGRuc21hc3EgbWFpbGluZyBsaXN0IGF0IDxBCitIUkVGPSJodHRwOi8vbGlzdHMudGhla2VsbGV5cy5vcmcudWsvbWFpbG1hbi9saXN0aW5mby9kbnNtYXNxLWRpc2N1c3MiPgoraHR0cDovL2xpc3RzLnRoZWtlbGxleXMub3JnLnVrL21haWxtYW4vbGlzdGluZm8vZG5zbWFzcS1kaXNjdXNzPC9BPiB3aGljaCBzaG91bGQgYmUgdGhlCitmaXJzdCBsb2NhdGlvbiBmb3IgcXVlcmllcywgYnVncmVwb3J0cywgc3VnZ2VzdGlvbnMgZXRjLgorRG5zbWFzcSB3YXMgd3JpdHRlbiBieSBTaW1vbiBLZWxsZXkuIFlvdSBjYW4gY29udGFjdCBtZSBhdCA8QQorSFJFRj0ibWFpbHRvOnNpbW9uQHRoZWtlbGxleXMub3JnLnVrIj5zaW1vbkB0aGVrZWxsZXlzLm9yZy51azwvQT4uCis8L0JPRFk+CisKZGlmZiAtLWdpdCBhL21hbi9kbnNtYXNxLjggYi9tYW4vZG5zbWFzcS44Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1ZWFjNjMKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vZG5zbWFzcS44CkBAIC0wLDAgKzEsMTI5MCBAQAorLlRIIEROU01BU1EgOAorLlNIIE5BTUUKK2Ruc21hc3EgXC0gQSBsaWdodHdlaWdodCBESENQIGFuZCBjYWNoaW5nIEROUyBzZXJ2ZXIuCisuU0ggU1lOT1BTSVMKKy5CIGRuc21hc3EKKy5JIFtPUFRJT05dLi4uCisuU0ggIkRFU0NSSVBUSU9OIgorLkJSIGRuc21hc3EKK2lzIGEgbGlnaHR3ZWlnaHQgRE5TLCBURlRQIGFuZCBESENQIHNlcnZlci4gSXQgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSAKK2NvdXBsZWQgRE5TIGFuZCBESENQIHNlcnZpY2UgdG8gYSBMQU4uCisuUFAKK0Ruc21hc3EgYWNjZXB0cyBETlMgcXVlcmllcyBhbmQgZWl0aGVyIGFuc3dlcnMgdGhlbSBmcm9tIGEgc21hbGwsIGxvY2FsLAorY2FjaGUgb3IgZm9yd2FyZHMgdGhlbSB0byBhIHJlYWwsIHJlY3Vyc2l2ZSwgRE5TIHNlcnZlci4gSXQgbG9hZHMgdGhlCitjb250ZW50cyBvZiAvZXRjL2hvc3RzIHNvIHRoYXQgbG9jYWwgaG9zdG5hbWVzCit3aGljaCBkbyBub3QgYXBwZWFyIGluIHRoZSBnbG9iYWwgRE5TIGNhbiBiZSByZXNvbHZlZCBhbmQgYWxzbyBhbnN3ZXJzCitETlMgcXVlcmllcyBmb3IgREhDUCBjb25maWd1cmVkIGhvc3RzLgorLlBQCitUaGUgZG5zbWFzcSBESENQIHNlcnZlciBzdXBwb3J0cyBzdGF0aWMgYWRkcmVzcyBhc3NpZ25tZW50cyBhbmQgbXVsdGlwbGUKK25ldHdvcmtzLiBJdCBhdXRvbWF0aWNhbGx5CitzZW5kcyBhIHNlbnNpYmxlIGRlZmF1bHQgc2V0IG9mIERIQ1Agb3B0aW9ucywgYW5kIGNhbiBiZSBjb25maWd1cmVkIHRvCitzZW5kIGFueSBkZXNpcmVkIHNldCBvZiBESENQIG9wdGlvbnMsIGluY2x1ZGluZyB2ZW5kb3ItZW5jYXBzdWxhdGVkCitvcHRpb25zLiBJdCBpbmNsdWRlcyBhIHNlY3VyZSwgcmVhZC1vbmx5LAorVEZUUCBzZXJ2ZXIgdG8gYWxsb3cgbmV0L1BYRSBib290IG9mIERIQ1AgaG9zdHMgYW5kIGFsc28gc3VwcG9ydHMgQk9PVFAuCisuUFAKK0Ruc21hc3EgCitzdXBwb3J0cyBJUHY2IGZvciBETlMsIGJ1dCBub3QgREhDUC4KKy5TSCBPUFRJT05TCitOb3RlIHRoYXQgaW4gZ2VuZXJhbCBtaXNzaW5nIHBhcmFtZXRlcnMgYXJlIGFsbG93ZWQgYW5kIHN3aXRjaCBvZmYKK2Z1bmN0aW9ucywgZm9yIGluc3RhbmNlICItLXBpZC1maWxlIiBkaXNhYmxlcyB3cml0aW5nIGEgUElEIGZpbGUuIE9uCitCU0QsIHVubGVzcyB0aGUgR05VIGdldG9wdCBsaWJyYXJ5IGlzIGxpbmtlZCwgdGhlIGxvbmcgZm9ybSBvZiB0aGUKK29wdGlvbnMgZG9lcyBub3Qgd29yayBvbiB0aGUgY29tbWFuZCBsaW5lOyBpdCBpcyBzdGlsbCByZWNvZ25pc2VkIGluCit0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorLlRQCisuQiAtLXRlc3QKK1JlYWQgYW5kIHN5bnRheCBjaGVjayBjb25maWd1cmF0aW9uIGZpbGUocykuIEV4aXQgd2l0aCBjb2RlIDAgaWYgYWxsCitpcyBPSywgb3IgYSBub24temVybyBjb2RlIG90aGVyd2lzZS4gRG8gbm90IHN0YXJ0IHVwIGRuc21hc3EuCisuVFAKKy5CIFwtaCwgLS1uby1ob3N0cworRG9uJ3QgcmVhZCB0aGUgaG9zdG5hbWVzIGluIC9ldGMvaG9zdHMuCisuVFAKKy5CIFwtSCwgLS1hZGRuLWhvc3RzPTxmaWxlPgorQWRkaXRpb25hbCBob3N0cyBmaWxlLiBSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBhcyB3ZWxsIGFzIC9ldGMvaG9zdHMuIElmIC1oIGlzIGdpdmVuLCByZWFkCitvbmx5IHRoZSBzcGVjaWZpZWQgZmlsZS4gVGhpcyBvcHRpb24gbWF5IGJlIHJlcGVhdGVkIGZvciBtb3JlIHRoYW4gb25lCithZGRpdGlvbmFsIGhvc3RzIGZpbGUuIElmIGEgZGlyZWN0b3J5IGlzIGdpdmVuLCB0aGVuIHJlYWQgYWxsIHRoZSBmaWxlcyBjb250YWluZWQgaW4gdGhhdCBkaXJlY3RvcnkuIAorLlRQCisuQiBcLUUsIC0tZXhwYW5kLWhvc3RzCitBZGQgdGhlIGRvbWFpbiB0byBzaW1wbGUgbmFtZXMgKHdpdGhvdXQgYSBwZXJpb2QpIGluIC9ldGMvaG9zdHMKK2luIHRoZSBzYW1lIHdheSBhcyBmb3IgREhDUC1kZXJpdmVkIG5hbWVzLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAorYXBwbHkgdG8gZG9tYWluIG5hbWVzIGluIGNuYW1lcywgUFRSIHJlY29yZHMsIFRYVCByZWNvcmRzIGV0Yy4KKy5UUAorLkIgXC1ULCAtLWxvY2FsLXR0bD08dGltZT4KK1doZW4gcmVwbHlpbmcgd2l0aCBpbmZvcm1hdGlvbiBmcm9tIC9ldGMvaG9zdHMgb3IgdGhlIERIQ1AgbGVhc2VzCitmaWxlIGRuc21hc3EgYnkgZGVmYXVsdCBzZXRzIHRoZSB0aW1lLXRvLWxpdmUgZmllbGQgdG8gemVybywgbWVhbmluZwordGhhdCB0aGUgcmVxdWVzdG9yIHNob3VsZCBub3QgaXRzZWxmIGNhY2hlIHRoZSBpbmZvcm1hdGlvbi4gVGhpcyBpcwordGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gaW4gYWxtb3N0IGFsbCBzaXR1YXRpb25zLiBUaGlzIG9wdGlvbiBhbGxvd3MgYQordGltZS10by1saXZlIChpbiBzZWNvbmRzKSB0byBiZSBnaXZlbiBmb3IgdGhlc2UgcmVwbGllcy4gVGhpcyB3aWxsCityZWR1Y2UgdGhlIGxvYWQgb24gdGhlIHNlcnZlciBhdCB0aGUgZXhwZW5zZSBvZiBjbGllbnRzIHVzaW5nIHN0YWxlCitkYXRhIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcy4KKy5UUAorLkIgLS1uZWctdHRsPTx0aW1lPgorTmVnYXRpdmUgcmVwbGllcyBmcm9tIHVwc3RyZWFtIHNlcnZlcnMgbm9ybWFsbHkgY29udGFpbiB0aW1lLXRvLWxpdmUKK2luZm9ybWF0aW9uIGluIFNPQSByZWNvcmRzIHdoaWNoIGRuc21hc3EgdXNlcyBmb3IgY2FjaGluZy4gSWYgdGhlCityZXBsaWVzIGZyb20gdXBzdHJlYW0gc2VydmVycyBvbWl0IHRoaXMgaW5mb3JtYXRpb24sIGRuc21hc3EgZG9lcyBub3QKK2NhY2hlIHRoZSByZXBseS4gVGhpcyBvcHRpb24gZ2l2ZXMgYSBkZWZhdWx0IHZhbHVlIGZvciB0aW1lLXRvLWxpdmUKKyhpbiBzZWNvbmRzKSB3aGljaCBkbnNtYXNxIHVzZXMgdG8gY2FjaGUgbmVnYXRpdmUgcmVwbGllcyBldmVuIGluIAordGhlIGFic2VuY2Ugb2YgYW4gU09BIHJlY29yZC4gCisuVFAKKy5CIFwtaywgLS1rZWVwLWluLWZvcmVncm91bmQKK0RvIG5vdCBnbyBpbnRvIHRoZSBiYWNrZ3JvdW5kIGF0IHN0YXJ0dXAgYnV0IG90aGVyd2lzZSBydW4gYXMKK25vcm1hbC4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgdXNlIHdoZW4gZG5zbWFzcSBpcyBydW4gdW5kZXIgZGFlbW9udG9vbHMKK29yIGxhdW5jaGQuCisuVFAKKy5CIFwtZCwgLS1uby1kYWVtb24KK0RlYnVnIG1vZGU6IGRvbid0IGZvcmsgdG8gdGhlIGJhY2tncm91bmQsIGRvbid0IHdyaXRlIGEgcGlkIGZpbGUsCitkb24ndCBjaGFuZ2UgdXNlciBpZCwgZ2VuZXJhdGUgYSBjb21wbGV0ZSBjYWNoZSBkdW1wIG9uIHJlY2VpcHQgb24KK1NJR1VTUjEsIGxvZyB0byBzdGRlcnIgYXMgd2VsbCBhcyBzeXNsb2csIGRvbid0IGZvcmsgbmV3IHByb2Nlc3NlcwordG8gaGFuZGxlIFRDUCBxdWVyaWVzLgorLlRQCisuQiBcLXEsIC0tbG9nLXF1ZXJpZXMKK0xvZyB0aGUgcmVzdWx0cyBvZiBETlMgcXVlcmllcyBoYW5kbGVkIGJ5IGRuc21hc3EuIEVuYWJsZSBhIGZ1bGwgY2FjaGUgZHVtcCBvbiByZWNlaXB0IG9mIFNJR1VTUjEuCisuVFAKKy5CIFwtOCwgLS1sb2ctZmFjaWxpdHk9PGZhY2lsaXR5PgorU2V0IHRoZSBmYWNpbGl0eSB0byB3aGljaCBkbnNtYXNxIHdpbGwgc2VuZCBzeXNsb2cgZW50cmllcywgdGhpcworZGVmYXVsdHMgdG8gREFFTU9OLCBhbmQgdG8gTE9DQUwwIHdoZW4gZGVidWcgbW9kZSBpcyBpbiBvcGVyYXRpb24uIElmCit0aGUgZmFjaWxpdHkgZ2l2ZW4gY29udGFpbnMgYXQgbGVhc3Qgb25lICcvJyBjaGFyYWN0ZXIsIGl0IGlzIHRha2VuIHRvCitiZSBhIGZpbGVuYW1lLCBhbmQgZG5zbWFzcSBsb2dzIHRvIHRoZSBnaXZlbiBmaWxlLCBpbnN0ZWFkIG9mCitzeXNsb2cuIChFcnJvcnMgd2hpbHN0IHJlYWRpbmcgY29uZmlndXJhdGlvbiB3aWxsIHN0aWxsIGdvIHRvIHN5c2xvZywKK2J1dCBhbGwgb3V0cHV0IGZyb20gYSBzdWNjZXNzZnVsIHN0YXJ0dXAsIGFuZCBhbGwgb3V0cHV0IHdoaWxzdAorcnVubmluZywgd2lsbCBnbyBleGNsdXNpdmVseSB0byB0aGUgZmlsZS4pIFdoZW4gbG9nZ2luZyB0byBhIGZpbGUsCitkbnNtYXNxIHdpbGwgY2xvc2UgYW5kIHJlb3BlbiB0aGUgZmlsZSB3aGVuIGl0IHJlY2VpdmVzIFNJR1VTUjIuIFRoaXMgCithbGxvd3MgdGhlIGxvZyBmaWxlIHRvIGJlIHJvdGF0ZWQgd2l0aG91dCBzdG9wcGluZyBkbnNtYXNxLgorLlRQCisuQiAtLWxvZy1hc3luY1s9PGxpbmVzPl0KK0VuYWJsZSBhc3luY2hyb25vdXMgbG9nZ2luZyBhbmQgb3B0aW9uYWxseSBzZXQgdGhlIGxpbWl0IG9uIHRoZQorbnVtYmVyIG9mIGxpbmVzCit3aGljaCB3aWxsIGJlIHF1ZXVlZCBieSBkbnNtYXNxIHdoZW4gd3JpdGluZyB0byB0aGUgc3lzbG9nIGlzIHNsb3cuIAorRG5zbWFzcSBjYW4gbG9nIGFzeW5jaHJvbm91c2x5OiB0aGlzCithbGxvd3MgaXQgdG8gY29udGludWUgZnVuY3Rpb25pbmcgd2l0aG91dCBiZWluZyBibG9ja2VkIGJ5IHN5c2xvZywgYW5kCithbGxvd3Mgc3lzbG9nIHRvIHVzZSBkbnNtYXNxIGZvciBETlMgcXVlcmllcyB3aXRob3V0IHJpc2tpbmcgZGVhZGxvY2suCitJZiB0aGUgcXVldWUgb2YgbG9nLWxpbmVzIGJlY29tZXMgZnVsbCwgZG5zbWFzcSB3aWxsIGxvZyB0aGUKK292ZXJmbG93LCBhbmQgdGhlIG51bWJlciBvZiBtZXNzYWdlcyAgbG9zdC4gVGhlIGRlZmF1bHQgcXVldWUgbGVuZ3RoIGlzCis1LCBhIHNhbmUgdmFsdWUgd291bGQgYmUgNS0yNSwgYW5kIGEgbWF4aW11bSBsaW1pdCBvZiAxMDAgaXMgaW1wb3NlZC4KKy5UUAorLkIgXC14LCAtLXBpZC1maWxlPTxwYXRoPgorU3BlY2lmeSBhbiBhbHRlcm5hdGUgcGF0aCBmb3IgZG5zbWFzcSB0byByZWNvcmQgaXRzIHByb2Nlc3MtaWQgaW4uIE5vcm1hbGx5IC92YXIvcnVuL2Ruc21hc3EucGlkLgorLlRQCisuQiBcLXUsIC0tdXNlcj08dXNlcm5hbWU+CitTcGVjaWZ5IHRoZSB1c2VyaWQgdG8gd2hpY2ggZG5zbWFzcSB3aWxsIGNoYW5nZSBhZnRlciBzdGFydHVwLiBEbnNtYXNxIG11c3Qgbm9ybWFsbHkgYmUgc3RhcnRlZCBhcyByb290LCBidXQgaXQgd2lsbCBkcm9wIHJvb3QgCitwcml2aWxlZ2VzIGFmdGVyIHN0YXJ0dXAgYnkgY2hhbmdpbmcgaWQgdG8gYW5vdGhlciB1c2VyLiBOb3JtYWxseSB0aGlzIHVzZXIgaXMgIm5vYm9keSIgYnV0IHRoYXQgCitjYW4gYmUgb3Zlci1yaWRkZW4gd2l0aCB0aGlzIHN3aXRjaC4KKy5UUAorLkIgXC1nLCAtLWdyb3VwPTxncm91cG5hbWU+IAorU3BlY2lmeSB0aGUgZ3JvdXAgd2hpY2ggZG5zbWFzcSB3aWxsIHJ1bgorYXMuIFRoZSBkZWZhdWx0cyB0byAiZGlwIiwgaWYgYXZhaWxhYmxlLCB0byBmYWNpbGl0YXRlIGFjY2VzcyB0bworL2V0Yy9wcHAvcmVzb2x2LmNvbmYgd2hpY2ggaXMgbm90IG5vcm1hbGx5IHdvcmxkIHJlYWRhYmxlLgorLlRQCisuQiBcLXYsIC0tdmVyc2lvbgorUHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyLgorLlRQCisuQiBcLXAsIC0tcG9ydD08cG9ydD4KK0xpc3RlbiBvbiA8cG9ydD4gaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgRE5TIHBvcnQgKDUzKS4gU2V0dGluZyB0aGlzCit0byB6ZXJvIGNvbXBsZXRlbHkgZGlzYWJsZXMgRE5TIGZ1bmN0aW9uLCBsZWF2aW5nIG9ubHkgREhDUCBhbmQvb3IgVEZUUC4KKy5UUAorLkIgXC1QLCAtLWVkbnMtcGFja2V0LW1heD08c2l6ZT4KK1NwZWNpZnkgdGhlIGxhcmdlc3QgRUROUy4wIFVEUCBwYWNrZXQgd2hpY2ggaXMgc3VwcG9ydGVkIGJ5IHRoZSBETlMKK2ZvcndhcmRlci4gRGVmYXVsdHMgdG8gMTI4MCwgd2hpY2ggaXMgdGhlIFJGQzI2NzEtcmVjb21tZW5kZWQgbWF4aW11bQorZm9yIGV0aGVybmV0LgorLlRQCisuQiBcLVEsIC0tcXVlcnktcG9ydD08cXVlcnlfcG9ydD4KK1NlbmQgb3V0Ym91bmQgRE5TIHF1ZXJpZXMgZnJvbSwgYW5kIGxpc3RlbiBmb3IgdGhlaXIgcmVwbGllcyBvbiwgdGhlCitzcGVjaWZpYyBVRFAgcG9ydCA8cXVlcnlfcG9ydD4gaW5zdGVhZCBvZiB1c2luZyByYW5kb20gcG9ydHMuIE5PVEUKK3RoYXQgdXNpbmcgdGhpcyBvcHRpb24gd2lsbCBtYWtlIGRuc21hc3EgbGVzcyBzZWN1cmUgYWdhaW5zdCBETlMKK3Nwb29maW5nIGF0dGFja3MgYnV0IGl0IG1heSBiZSBmYXN0ZXIgYW5kIHVzZSBsZXNzIHJlc291cmNlcy4gIFNldHRpbmcgdGhpcyBvcHRpb24KK3RvIHplcm8gbWFrZXMgZG5zbWFzcSB1c2UgYSBzaW5nbGUgcG9ydCBhbGxvY2F0ZWQgdG8gaXQgYnkgdGhlCitPUzogdGhpcyB3YXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGluIHZlcnNpb25zIHByaW9yIHRvIDIuNDMuIAorLlRQCisuQiAtLW1pbi1wb3J0PTxwb3J0PgorRG8gbm90IHVzZSBwb3J0cyBsZXNzIHRoYW4gdGhhdCBnaXZlbiBhcyBzb3VyY2UgZm9yIG91dGJvdW5kIEROUworcXVlcmllcy4gRG5zbWFzcSBwaWNrcyByYW5kb20gcG9ydHMgYXMgc291cmNlIGZvciBvdXRib3VuZCBxdWVyaWVzOgord2hlbiB0aGlzIG9wdGlvbiBpcyBnaXZlbiwgdGhlIHBvcnRzIHVzZWQgd2lsbCBhbHdheXMgdG8gbGFyZ2VyCit0aGFuIHRoYXQgc3BlY2lmaWVkLiBVc2VmdWwgZm9yIHN5c3RlbXMgYmVoaW5kIGZpcmV3YWxscy4gCisuVFAKKy5CIFwtaSwgLS1pbnRlcmZhY2U9PGludGVyZmFjZSBuYW1lPgorTGlzdGVuIG9ubHkgb24gdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UocykuIERuc21hc3EgYXV0b21hdGljYWxseSBhZGRzCit0aGUgbG9vcGJhY2sgKGxvY2FsKSBpbnRlcmZhY2UgdG8gdGhlIGxpc3Qgb2YgaW50ZXJmYWNlcyB0byB1c2Ugd2hlbgordGhlCisuQiBcLS1pbnRlcmZhY2UKK29wdGlvbiAgaXMgdXNlZC4gSWYgbm8KKy5CIFwtLWludGVyZmFjZQorb3IKKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCitvcHRpb25zIGFyZSBnaXZlbiBkbnNtYXNxIGxpc3RlbnMgb24gYWxsIGF2YWlsYWJsZSBpbnRlcmZhY2VzIGV4Y2VwdCBhbnkKK2dpdmVuIGluCisuQiBcLS1leGNlcHQtaW50ZXJmYWNlCitvcHRpb25zLiBJUCBhbGlhcyBpbnRlcmZhY2VzIChlZyAiZXRoMTowIikgY2Fubm90IGJlIHVzZWQgd2l0aAorLkIgLS1pbnRlcmZhY2UKK29yCisuQiAtLWV4Y2VwdC1pbnRlcmZhY2UKK29wdGlvbnMsIHVzZSAtLWxpc3Rlbi1hZGRyZXNzIGluc3RlYWQuIAorLlRQCisuQiBcLUksIC0tZXhjZXB0LWludGVyZmFjZT08aW50ZXJmYWNlIG5hbWU+CitEbyBub3QgbGlzdGVuIG9uIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlLiBOb3RlIHRoYXQgdGhlIG9yZGVyIG9mCisuQiBcLS1saXN0ZW4tYWRkcmVzcworLkIgLS1pbnRlcmZhY2UKK2FuZAorLkIgLS1leGNlcHQtaW50ZXJmYWNlCitvcHRpb25zIGRvZXMgbm90IG1hdHRlciBhbmQgdGhhdCAKKy5CIC0tZXhjZXB0LWludGVyZmFjZQorb3B0aW9ucyBhbHdheXMgb3ZlcnJpZGUgdGhlIG90aGVycy4KKy5UUCAKKy5CIFwtMiwgLS1uby1kaGNwLWludGVyZmFjZT08aW50ZXJmYWNlIG5hbWU+CitEbyBub3QgcHJvdmlkZSBESENQIG9yIFRGVFAgb24gdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UsIGJ1dCBkbyBwcm92aWRlIEROUyBzZXJ2aWNlLgorLlRQCisuQiBcLWEsIC0tbGlzdGVuLWFkZHJlc3M9PGlwYWRkcj4KK0xpc3RlbiBvbiB0aGUgZ2l2ZW4gSVAgYWRkcmVzcyhlcykuIEJvdGggCisuQiBcLS1pbnRlcmZhY2UKK2FuZAorLkIgXC0tbGlzdGVuLWFkZHJlc3MKK29wdGlvbnMgbWF5IGJlIGdpdmVuLCBpbiB3aGljaCBjYXNlIHRoZSBzZXQgb2YgYm90aCBpbnRlcmZhY2VzIGFuZAorYWRkcmVzc2VzIGlzIHVzZWQuIE5vdGUgdGhhdCBpZiBubworLkIgXC0taW50ZXJmYWNlCitvcHRpb24gaXMgZ2l2ZW4sIGJ1dCAKKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCitpcywgZG5zbWFzcSB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGxpc3RlbiBvbiB0aGUgbG9vcGJhY2sKK2ludGVyZmFjZS4gVG8gYWNoaWV2ZSB0aGlzLCBpdHMgSVAgYWRkcmVzcywgMTI3LjAuMC4xLCBtdXN0IGJlCitleHBsaWNpdGx5IGdpdmVuIGFzIGEgCisuQiBcLS1saXN0ZW4tYWRkcmVzcworb3B0aW9uLgorLlRQCisuQiBcLXosIC0tYmluZC1pbnRlcmZhY2VzCitPbiBzeXN0ZW1zIHdoaWNoIHN1cHBvcnQgaXQsIGRuc21hc3EgYmluZHMgdGhlIHdpbGRjYXJkIGFkZHJlc3MsCitldmVuIHdoZW4gaXQgaXMgbGlzdGVuaW5nIG9uIG9ubHkgc29tZSBpbnRlcmZhY2VzLiBJdCB0aGVuIGRpc2NhcmRzCityZXF1ZXN0cyB0aGF0IGl0IHNob3VsZG4ndCByZXBseSB0by4gVGhpcyBoYXMgdGhlIGFkdmFudGFnZSBvZiAKK3dvcmtpbmcgZXZlbiB3aGVuIGludGVyZmFjZXMgY29tZSBhbmQgZ28gYW5kIGNoYW5nZSBhZGRyZXNzLiBUaGlzCitvcHRpb24gZm9yY2VzIGRuc21hc3EgdG8gcmVhbGx5IGJpbmQgb25seSB0aGUgaW50ZXJmYWNlcyBpdCBpcworbGlzdGVuaW5nIG9uLiBBYm91dCB0aGUgb25seSB0aW1lIHdoZW4gdGhpcyBpcyB1c2VmdWwgaXMgd2hlbiAKK3J1bm5pbmcgYW5vdGhlciBuYW1lc2VydmVyIChvciBhbm90aGVyIGluc3RhbmNlIG9mIGRuc21hc3EpIG9uIHRoZQorc2FtZSBtYWNoaW5lLiBTZXR0aW5nIHRoaXMgb3B0aW9uIGFsc28gZW5hYmxlcyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YKK2Ruc21hc3Egd2hpY2ggcHJvdmlkZSBESENQIHNlcnZpY2UgdG8gcnVuIGluIHRoZSBzYW1lIG1hY2hpbmUuCisuVFAKKy5CIFwteSwgLS1sb2NhbGlzZS1xdWVyaWVzCitSZXR1cm4gYW5zd2VycyB0byBETlMgcXVlcmllcyBmcm9tIC9ldGMvaG9zdHMgd2hpY2ggZGVwZW5kIG9uIHRoZSBpbnRlcmZhY2Ugb3ZlciB3aGljaCB0aGUgcXVlcnkgd2FzCityZWNlaXZlZC4gSWYgYSBuYW1lIGluIC9ldGMvaG9zdHMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGgKK2l0LCBhbmQgYXQgbGVhc3Qgb25lIG9mIHRob3NlIGFkZHJlc3NlcyBpcyBvbiB0aGUgc2FtZSBzdWJuZXQgYXMgdGhlCitpbnRlcmZhY2UgdG8gd2hpY2ggdGhlIHF1ZXJ5IHdhcyBzZW50LCB0aGVuIHJldHVybiBvbmx5IHRoZQorYWRkcmVzcyhlcykgb24gdGhhdCBzdWJuZXQuIFRoaXMgYWxsb3dzIGZvciBhIHNlcnZlciAgdG8gaGF2ZSBtdWx0aXBsZQorYWRkcmVzc2VzIGluIC9ldGMvaG9zdHMgY29ycmVzcG9uZGluZyB0byBlYWNoIG9mIGl0cyBpbnRlcmZhY2VzLCBhbmQKK2hvc3RzIHdpbGwgZ2V0IHRoZSBjb3JyZWN0IGFkZHJlc3MgYmFzZWQgb24gd2hpY2ggbmV0d29yayB0aGV5IGFyZQorYXR0YWNoZWQgdG8uIEN1cnJlbnRseSB0aGlzIGZhY2lsaXR5IGlzIGxpbWl0ZWQgdG8gSVB2NC4KKy5UUAorLkIgXC1iLCAtLWJvZ3VzLXByaXYKK0JvZ3VzIHByaXZhdGUgcmV2ZXJzZSBsb29rdXBzLiBBbGwgcmV2ZXJzZSBsb29rdXBzIGZvciBwcml2YXRlIElQIHJhbmdlcyAoaWUgMTkyLjE2OC54LngsIGV0YykKK3doaWNoIGFyZSBub3QgZm91bmQgaW4gL2V0Yy9ob3N0cyBvciB0aGUgREhDUCBsZWFzZXMgZmlsZSBhcmUgYW5zd2VyZWQKK3dpdGggIm5vIHN1Y2ggZG9tYWluIiByYXRoZXIgdGhhbiBiZWluZyBmb3J3YXJkZWQgdXBzdHJlYW0uCisuVFAKKy5CIFwtViwgLS1hbGlhcz1bPG9sZC1pcD5dfFs8c3RhcnQtaXA+LTxlbmQtaXA+XSw8bmV3LWlwPlssPG1hc2s+XQorTW9kaWZ5IElQdjQgYWRkcmVzc2VzIHJldHVybmVkIGZyb20gdXBzdHJlYW0gbmFtZXNlcnZlcnM7IG9sZC1pcCBpcworcmVwbGFjZWQgYnkgbmV3LWlwLiBJZiB0aGUgb3B0aW9uYWwgbWFzayBpcyBnaXZlbiB0aGVuIGFueSBhZGRyZXNzCit3aGljaCBtYXRjaGVzIHRoZSBtYXNrZWQgb2xkLWlwIHdpbGwgYmUgcmUtd3JpdHRlbi4gU28sIGZvciBpbnN0YW5jZQorLkIgLS1hbGlhcz0xLjIuMy4wLDYuNy44LjAsMjU1LjI1NS4yNTUuMCAKK3dpbGwgbWFwIDEuMi4zLjU2IHRvIDYuNy44LjU2IGFuZCAxLjIuMy42NyB0byA2LjcuOC42Ny4gVGhpcyBpcyB3aGF0CitDaXNjbyBQSVggcm91dGVycyBjYWxsICJETlMgZG9jdG9yaW5nIi4gSWYgdGhlIG9sZCBJUCBpcyBnaXZlbiBhcworcmFuZ2UsIHRoZW4gb25seSBhZGRyZXNzZXMgaW4gdGhlIHJhbmdlLCByYXRoZXIgdGhhbiBhIHdob2xlIHN1Ym5ldCwKK2FyZSByZS13cml0dGVuLiBTbyAKKy5CIC0tYWxpYXM9MTkyLjE2OC4wLjEwLTE5Mi4xNjguMC40MCwxMC4wLjAuMCwyNTUuMjU1LjI1NS4wCittYXBzIDE5Mi4xNjguMC4xMC0+MTkyLjE2OC4wLjQwIHRvIDEwLjAuMC4xMC0+MTAuMC4wLjQwCisuVFAgCisuQiBcLUIsIC0tYm9ndXMtbnhkb21haW49PGlwYWRkcj4KK1RyYW5zZm9ybSByZXBsaWVzIHdoaWNoIGNvbnRhaW4gdGhlIElQIGFkZHJlc3MgZ2l2ZW4gaW50byAiTm8gc3VjaAorZG9tYWluIiByZXBsaWVzLiBUaGlzIGlzIGludGVuZGVkIHRvIGNvdW50ZXJhY3QgYSBkZXZpb3VzIG1vdmUgbWFkZSBieQorVmVyaXNpZ24gaW4gU2VwdGVtYmVyIDIwMDMgd2hlbiB0aGV5IHN0YXJ0ZWQgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mCithbiBhZHZlcnRpc2luZyB3ZWIgcGFnZSBpbiByZXNwb25zZSB0byBxdWVyaWVzIGZvciB1bnJlZ2lzdGVyZWQgbmFtZXMsCitpbnN0ZWFkIG9mIHRoZSBjb3JyZWN0IE5YRE9NQUlOIHJlc3BvbnNlLiBUaGlzIG9wdGlvbiB0ZWxscyBkbnNtYXNxIHRvCitmYWtlIHRoZSBjb3JyZWN0IHJlc3BvbnNlIHdoZW4gaXQgc2VlcyB0aGlzIGJlaGF2aW91ci4gQXMgYXQgU2VwdCAyMDAzCit0aGUgSVAgYWRkcmVzcyBiZWluZyByZXR1cm5lZCBieSBWZXJpc2lnbiBpcyA2NC45NC4xMTAuMTEKKy5UUAorLkIgXC1mLCAtLWZpbHRlcndpbjJrCitMYXRlciB2ZXJzaW9ucyBvZiB3aW5kb3dzIG1ha2UgcGVyaW9kaWMgRE5TIHJlcXVlc3RzIHdoaWNoIGRvbid0IGdldCBzZW5zaWJsZSBhbnN3ZXJzIGZyb20KK3RoZSBwdWJsaWMgRE5TIGFuZCBjYW4gY2F1c2UgcHJvYmxlbXMgYnkgdHJpZ2dlcmluZyBkaWFsLW9uLWRlbWFuZCBsaW5rcy4gVGhpcyBmbGFnIHR1cm5zIG9uIGFuIG9wdGlvbgordG8gZmlsdGVyIHN1Y2ggcmVxdWVzdHMuIFRoZSByZXF1ZXN0cyBibG9ja2VkIGFyZSBmb3IgcmVjb3JkcyBvZiB0eXBlcyBTT0EgYW5kIFNSViwgYW5kIHR5cGUgQU5ZIHdoZXJlIHRoZSAKK3JlcXVlc3RlZCBuYW1lIGhhcyB1bmRlcnNjb3JlcywgdG8gY2F0Y2ggTERBUCByZXF1ZXN0cy4KKy5UUAorLkIgXC1yLCAtLXJlc29sdi1maWxlPTxmaWxlPgorUmVhZCB0aGUgSVAgYWRkcmVzc2VzIG9mIHRoZSB1cHN0cmVhbSBuYW1lc2VydmVycyBmcm9tIDxmaWxlPiwgaW5zdGVhZCBvZgorL2V0Yy9yZXNvbHYuY29uZi4gRm9yIHRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIHNlZQorLkJSIHJlc29sdi5jb25mICg1KSAKK3RoZSBvbmx5IGxpbmVzIHJlbGV2YW50IHRvIGRuc21hc3EgYXJlIG5hbWVzZXJ2ZXIgb25lcy4gRG5zbWFzcSBjYW4KK2JlIHRvbGQgdG8gcG9sbCBtb3JlIHRoYW4gb25lIHJlc29sdi5jb25mIGZpbGUsIHRoZSBmaXJzdCBmaWxlIG5hbWUgIHNwZWNpZmllZAorb3ZlcnJpZGVzIHRoZSBkZWZhdWx0LCBzdWJzZXF1ZW50IG9uZXMgYWRkIHRvIHRoZSBsaXN0LiBUaGlzIGlzIG9ubHkKK2FsbG93ZWQgd2hlbiBwb2xsaW5nOyB0aGUgZmlsZSB3aXRoIHRoZSBjdXJyZW50bHkgbGF0ZXN0IG1vZGlmaWNhdGlvbgordGltZSBpcyB0aGUgb25lIHVzZWQuIAorLlRQCisuQiBcLVIsIC0tbm8tcmVzb2x2CitEb24ndCByZWFkIC9ldGMvcmVzb2x2LmNvbmYuIEdldCB1cHN0cmVhbSBzZXJ2ZXJzIG9ubHkgZnJvbSB0aGUgY29tbWFuZAorbGluZSBvciB0aGUgZG5zbWFzcSBjb25maWd1cmF0aW9uIGZpbGUuCisuVFAKKy5CIFwtMSwgLS1lbmFibGUtZGJ1cworQWxsb3cgZG5zbWFzcSBjb25maWd1cmF0aW9uIHRvIGJlIHVwZGF0ZWQgdmlhIERCdXMgbWV0aG9kIGNhbGxzLiBUaGUKK2NvbmZpZ3VyYXRpb24gd2hpY2ggY2FuIGJlIGNoYW5nZWQgaXMgdXBzdHJlYW0gRE5TIHNlcnZlcnMgKGFuZAorY29ycmVzcG9uZGluZyBkb21haW5zKSBhbmQgY2FjaGUgY2xlYXIuIFJlcXVpcmVzIHRoYXQgZG5zbWFzcSBoYXMKK2JlZW4gYnVpbHQgd2l0aCBEQnVzIHN1cHBvcnQuCisuVFAgCisuQiBcLW8sIC0tc3RyaWN0LW9yZGVyCitCeSBkZWZhdWx0LCBkbnNtYXNxIHdpbGwgc2VuZCBxdWVyaWVzIHRvIGFueSBvZiB0aGUgdXBzdHJlYW0gc2VydmVycworaXQga25vd3MgYWJvdXQgYW5kIHRyaWVzIHRvIGZhdm91ciBzZXJ2ZXJzIHRoYXQgYXJlIGtub3duIHRvCitiZSB1cC4gU2V0dGluZyB0aGlzIGZsYWcgZm9yY2VzIGRuc21hc3EgdG8gdHJ5IGVhY2ggcXVlcnkgd2l0aCBlYWNoCitzZXJ2ZXIgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyIGluIC9ldGMvcmVzb2x2LmNvbmYKKy5UUAorLkIgLS1hbGwtc2VydmVycworQnkgZGVmYXVsdCwgd2hlbiBkbnNtYXNxIGhhcyBtb3JlIHRoYW4gb25lIHVwc3RyZWFtIHNlcnZlciBhdmFpbGFibGUsCitpdCB3aWxsIHNlbmQgcXVlcmllcyB0byBqdXN0IG9uZSBzZXJ2ZXIuIFNldHRpbmcgdGhpcyBmbGFnIGZvcmNlcworZG5zbWFzcSB0byBzZW5kIGFsbCBxdWVyaWVzIHRvIGFsbCBhdmFpbGFibGUgc2VydmVycy4gVGhlIHJlcGx5IGZyb20KK3RoZSBzZXJ2ZXIgd2hpY2ggYW5zd2VycyBmaXJzdCB3aWxsIGJlIHJldHVybmVkIHRvIHRoZSBvcmlnaW5hbCByZXF1ZXN0b3IuCisuVFAKKy5CIC0tc3RvcC1kbnMtcmViaW5kCitSZWplY3QgKGFuZCBsb2cpIGFkZHJlc3NlcyBmcm9tIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzIHdoaWNoIGFyZSBpbiB0aGUKK3ByaXZhdGUgSVAgcmFuZ2VzLiBUaGlzIGJsb2NrcyBhbiBhdHRhY2sgd2hlcmUgYSBicm93c2VyIGJlaGluZCBhCitmaXJld2FsbCBpcyB1c2VkIHRvIHByb2JlIG1hY2hpbmVzIG9uIHRoZSBsb2NhbCBuZXR3b3JrLgorLlRQCisuQiBcLW4sIC0tbm8tcG9sbAorRG9uJ3QgcG9sbCAvZXRjL3Jlc29sdi5jb25mIGZvciBjaGFuZ2VzLgorLlRQCisuQiAtLWNsZWFyLW9uLXJlbG9hZAorV2hlbmV2ZXIgL2V0Yy9yZXNvbHYuY29uZiBpcyByZS1yZWFkLCBjbGVhciB0aGUgRE5TIGNhY2hlLgorVGhpcyBpcyB1c2VmdWwgd2hlbiBuZXcgbmFtZXNlcnZlcnMgbWF5IGhhdmUgZGlmZmVyZW50CitkYXRhIHRoYW4gdGhhdCBoZWxkIGluIGNhY2hlLgorLlRQCisuQiBcLUQsIC0tZG9tYWluLW5lZWRlZAorVGVsbHMgZG5zbWFzcSB0byBuZXZlciBmb3J3YXJkIHF1ZXJpZXMgZm9yIHBsYWluIG5hbWVzLCB3aXRob3V0IGRvdHMKK29yIGRvbWFpbiBwYXJ0cywgdG8gdXBzdHJlYW0gbmFtZXNlcnZlcnMuIElmIHRoZSBuYW1lIGlzIG5vdCBrbm93bgorZnJvbSAvZXRjL2hvc3RzIG9yIERIQ1AgdGhlbiBhICJub3QgZm91bmQiIGFuc3dlciBpcyByZXR1cm5lZC4KKy5UUAorLkIgXC1TLCAtLWxvY2FsLCAtLXNlcnZlcj1bL1s8ZG9tYWluPl0vW2RvbWFpbi9dXVs8aXBhZGRyPlsjPHBvcnQ+XVtAPHNvdXJjZS1pcD58PGludGVyZmFjZT5bIzxwb3J0Pl1dCitTcGVjaWZ5IElQIGFkZHJlc3Mgb2YgdXBzdHJlYW0gc2VydmVycyBkaXJlY3RseS4gU2V0dGluZyB0aGlzIGZsYWcgZG9lcworbm90IHN1cHByZXNzIHJlYWRpbmcgb2YgL2V0Yy9yZXNvbHYuY29uZiwgdXNlIC1SIHRvIGRvIHRoYXQuIElmIG9uZSBvcgorbW9yZSAKK29wdGlvbmFsIGRvbWFpbnMgYXJlIGdpdmVuLCB0aGF0IHNlcnZlciBpcyB1c2VkIG9ubHkgZm9yIHRob3NlIGRvbWFpbnMKK2FuZCB0aGV5IGFyZSBxdWVyaWVkIG9ubHkgdXNpbmcgdGhlIHNwZWNpZmllZCBzZXJ2ZXIuIFRoaXMgaXMKK2ludGVuZGVkIGZvciBwcml2YXRlIG5hbWVzZXJ2ZXJzOiBpZiB5b3UgaGF2ZSBhIG5hbWVzZXJ2ZXIgb24geW91cgorbmV0d29yayB3aGljaCBkZWFscyB3aXRoIG5hbWVzIG9mIHRoZSBmb3JtCit4eHguaW50ZXJuYWwudGhla2VsbGV5cy5vcmcudWsgYXQgMTkyLjE2OC4xLjEgdGhlbiBnaXZpbmcgIHRoZSBmbGFnIAorLkIgLVMgL2ludGVybmFsLnRoZWtlbGxleXMub3JnLnVrLzE5Mi4xNjguMS4xIAord2lsbCBzZW5kIGFsbCBxdWVyaWVzIGZvcgoraW50ZXJuYWwgbWFjaGluZXMgdG8gdGhhdCBuYW1lc2VydmVyLCBldmVyeXRoaW5nIGVsc2Ugd2lsbCBnbyB0byB0aGUKK3NlcnZlcnMgaW4gL2V0Yy9yZXNvbHYuY29uZi4gQW4gZW1wdHkgZG9tYWluIHNwZWNpZmljYXRpb24sCisuQiAvLyAKK2hhcyB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mICJ1bnF1YWxpZmllZCBuYW1lcyBvbmx5IiBpZSBuYW1lcyB3aXRob3V0IGFueQorZG90cyBpbiB0aGVtLiBBIG5vbi1zdGFuZGFyZCBwb3J0IG1heSBiZSBzcGVjaWZpZWQgYXMgCitwYXJ0IG9mIHRoZSBJUAorYWRkcmVzcyB1c2luZyBhICMgY2hhcmFjdGVyLgorTW9yZSB0aGFuIG9uZSAtUyBmbGFnIGlzIGFsbG93ZWQsIHdpdGgKK3JlcGVhdGVkIGRvbWFpbiBvciBpcGFkZHIgcGFydHMgYXMgcmVxdWlyZWQuIAorCitBbHNvIHBlcm1pdHRlZCBpcyBhIC1TCitmbGFnIHdoaWNoIGdpdmVzIGEgZG9tYWluIGJ1dCBubyBJUCBhZGRyZXNzOyB0aGlzIHRlbGxzIGRuc21hc3EgdGhhdAorYSBkb21haW4gaXMgbG9jYWwgYW5kIGl0IG1heSBhbnN3ZXIgcXVlcmllcyBmcm9tIC9ldGMvaG9zdHMgb3IgREhDUAorYnV0IHNob3VsZCBuZXZlciBmb3J3YXJkIHF1ZXJpZXMgb24gdGhhdCBkb21haW4gdG8gYW55IHVwc3RyZWFtCitzZXJ2ZXJzLgorLkIgbG9jYWwKK2lzIGEgc3lub255bSBmb3IKKy5CIHNlcnZlcgordG8gbWFrZSBjb25maWd1cmF0aW9uIGZpbGVzIGNsZWFyZXIgaW4gdGhpcyBjYXNlLgorCitUaGUgb3B0aW9uYWwgc3RyaW5nIGFmdGVyIHRoZSBAIGNoYXJhY3RlciB0ZWxscworZG5zbWFzcSBob3cgdG8gc2V0IHRoZSBzb3VyY2Ugb2YgdGhlIHF1ZXJpZXMgdG8gdGhpcworbmFtZXNlcnZlci4gSXQgc2hvdWxkIGJlIGFuIGlwLWFkZHJlc3MsIHdoaWNoIHNob3VsZCBiZWxvbmcgdG8gdGhlIG1hY2hpbmUgb24gd2hpY2gKK2Ruc21hc3EgaXMgcnVubmluZyBvdGhlcndpc2UgdGhpcyBzZXJ2ZXIgbGluZSB3aWxsIGJlIGxvZ2dlZCBhbmQgdGhlbgoraWdub3JlZCwgb3IgYW4gaW50ZXJmYWNlIG5hbWUuIElmIGFuIGludGVyZmFjZSBuYW1lIGlzIGdpdmVuLCB0aGVuCitxdWVyaWVzIHRvIHRoZSBzZXJ2ZXIgd2lsbCBiZSBmb3JjZWQgdmlhIHRoYXQgaW50ZXJmYWNlOyBpZiBhbgoraXAtYWRkcmVzcyBpcyBnaXZlbiB0aGVuIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgcXVlcmllcyB3aWxsIGJlIHNldAordG8gdGhhdCBhZGRyZXNzLgorVGhlIHF1ZXJ5LXBvcnQgZmxhZyBpcyBpZ25vcmVkIGZvciBhbnkgc2VydmVycyB3aGljaCBoYXZlIGEKK3NvdXJjZSBhZGRyZXNzIHNwZWNpZmllZCBidXQgdGhlIHBvcnQgbWF5IGJlIHNwZWNpZmllZCBkaXJlY3RseSBhcworcGFydCBvZiB0aGUgc291cmNlIGFkZHJlc3MuIEZvcmNpbmcgcXVlcmllcyB0byBhbiBpbnRlcmZhY2UgaXMgbm90CitpbXBsZW1lbnRlZCBvbiBhbGwgcGxhdGZvcm1zIHN1cHBvcnRlZCBieSBkbnNtYXNxLgorLlRQCisuQiBcLUEsIC0tYWRkcmVzcz0vPGRvbWFpbj4vW2RvbWFpbi9dPGlwYWRkcj4KK1NwZWNpZnkgYW4gSVAgYWRkcmVzcyB0byByZXR1cm4gZm9yIGFueSBob3N0IGluIHRoZSBnaXZlbiBkb21haW5zLgorUXVlcmllcyBpbiB0aGUgZG9tYWlucyBhcmUgbmV2ZXIgZm9yd2FyZGVkIGFuZCBhbHdheXMgcmVwbGllZCB0bword2l0aCB0aGUgc3BlY2lmaWVkIElQIGFkZHJlc3Mgd2hpY2ggbWF5IGJlIElQdjQgb3IgSVB2Ni4gVG8gZ2l2ZQorYm90aCBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBmb3IgYSBkb21haW4sIHVzZSByZXBlYXRlZCAtQSBmbGFncy4KK05vdGUgdGhhdCAvZXRjL2hvc3RzIGFuZCBESENQIGxlYXNlcyBvdmVycmlkZSB0aGlzIGZvciBpbmRpdmlkdWFsCituYW1lcy4gQSBjb21tb24gdXNlIG9mIHRoaXMgaXMgdG8gcmVkaXJlY3QgdGhlIGVudGlyZSBkb3VibGVjbGljay5uZXQKK2RvbWFpbiB0byBzb21lIGZyaWVuZGx5IGxvY2FsIHdlYiBzZXJ2ZXIgdG8gYXZvaWQgYmFubmVyIGFkcy4gVGhlCitkb21haW4gc3BlY2lmaWNhdGlvbiB3b3JrcyBpbiB0aGUgc2FtZSB3YXMgYXMgZm9yIC0tc2VydmVyLCB3aXRoIHRoZQorYWRkaXRpb25hbCBmYWNpbGl0eSB0aGF0IC8jLyBtYXRjaGVzIGFueSBkb21haW4uIFRodXMKKy0tYWRkcmVzcz0vIy8xLjIuMy40IHdpbGwgYWx3YXlzIHJldHVybiAxLjIuMy40IGZvciBhbnkgcXVlcnkgbm90CithbnN3ZXJlZCBmcm9tIC9ldGMvaG9zdHMgb3IgREhDUCBhbmQgbm90IHNlbnQgdG8gYW4gdXBzdHJlYW0KK25hbWVzZXJ2ZXIgYnkgYSBtb3JlIHNwZWNpZmljIC0tc2VydmVyIGRpcmVjdGl2ZS4KKy5UUAorLkIgXC1tLCAtLW14LWhvc3Q9PG14IG5hbWU+W1ssPGhvc3RuYW1lPl0sPHByZWZlcmVuY2U+XQorUmV0dXJuIGFuIE1YIHJlY29yZCBuYW1lZCA8bXggbmFtZT4gcG9pbnRpbmcgdG8gdGhlIGdpdmVuIGhvc3RuYW1lIChpZgorZ2l2ZW4pLCBvcgordGhlIGhvc3Qgc3BlY2lmaWVkIGluIHRoZSAtLW14LXRhcmdldCBzd2l0Y2gKK29yLCBpZiB0aGF0IHN3aXRjaCBpcyBub3QgZ2l2ZW4sIHRoZSBob3N0IG9uIHdoaWNoIGRuc21hc3EgCitpcyBydW5uaW5nLiBUaGUgZGVmYXVsdCBpcyB1c2VmdWwgZm9yIGRpcmVjdGluZyBtYWlsIGZyb20gc3lzdGVtcyBvbiBhIExBTgordG8gYSBjZW50cmFsIHNlcnZlci4gVGhlIHByZWZlcmVuY2UgdmFsdWUgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0bworMSBpZiBub3QgZ2l2ZW4uIE1vcmUgdGhhbiBvbmUgTVggcmVjb3JkIG1heSBiZSBnaXZlbiBmb3IgYSBob3N0LgorLlRQIAorLkIgXC10LCAtLW14LXRhcmdldD08aG9zdG5hbWU+CitTcGVjaWZ5IHRoZSBkZWZhdWx0IHRhcmdldCBmb3IgdGhlIE1YIHJlY29yZCByZXR1cm5lZCBieSBkbnNtYXNxLiBTZWUKKy0tbXgtaG9zdC4gIElmIC0tbXgtdGFyZ2V0IGlzIGdpdmVuLCBidXQgbm90IC0tbXgtaG9zdCwgdGhlbiBkbnNtYXNxCityZXR1cm5zIGEgTVggcmVjb3JkIGNvbnRhaW5pbmcgdGhlIE1YIHRhcmdldCBmb3IgTVggcXVlcmllcyBvbiB0aGUgCitob3N0bmFtZSBvZiB0aGUgbWFjaGluZSBvbiB3aGljaCBkbnNtYXNxIGlzIHJ1bm5pbmcuCisuVFAKKy5CIFwtZSwgLS1zZWxmbXgKK1JldHVybiBhbiBNWCByZWNvcmQgcG9pbnRpbmcgdG8gaXRzZWxmIGZvciBlYWNoIGxvY2FsCittYWNoaW5lLiBMb2NhbCBtYWNoaW5lcyBhcmUgdGhvc2UgaW4gL2V0Yy9ob3N0cyBvciB3aXRoIERIQ1AgbGVhc2VzLgorLlRQIAorLkIgXC1MLCAtLWxvY2FsbXgKK1JldHVybiBhbiBNWCByZWNvcmQgcG9pbnRpbmcgdG8gdGhlIGhvc3QgZ2l2ZW4gYnkgbXgtdGFyZ2V0IChvciB0aGUKK21hY2hpbmUgb24gd2hpY2ggZG5zbWFzcSBpcyBydW5uaW5nKSBmb3IgZWFjaAorbG9jYWwgbWFjaGluZS4gTG9jYWwgbWFjaGluZXMgYXJlIHRob3NlIGluIC9ldGMvaG9zdHMgb3Igd2l0aCBESENQCitsZWFzZXMuCisuVFAKKy5CIFwtVywgLS1zcnYtaG9zdD08X3NlcnZpY2U+LjxfcHJvdD4uWzxkb21haW4+XSxbPHRhcmdldD5bLDxwb3J0PlssPHByaW9yaXR5PlssPHdlaWdodD5dXV1dCitSZXR1cm4gYSBTUlYgRE5TIHJlY29yZC4gU2VlIFJGQzI3ODIgZm9yIGRldGFpbHMuIElmIG5vdCBzdXBwbGllZCwgdGhlCitkb21haW4gZGVmYXVsdHMgdG8gdGhhdCBnaXZlbiBieQorLkIgLS1kb21haW4uCitUaGUgZGVmYXVsdCBmb3IgdGhlIHRhcmdldCBkb21haW4gaXMgZW1wdHksIGFuZCB0aGUgZGVmYXVsdCBmb3IgcG9ydAoraXMgb25lIGFuZCB0aGUgZGVmYXVsdHMgZm9yIAord2VpZ2h0IGFuZCBwcmlvcml0eSBhcmUgemVyby4gQmUgY2FyZWZ1bCBpZiB0cmFuc3Bvc2luZyBkYXRhIGZyb20gQklORAorem9uZSBmaWxlczogdGhlIHBvcnQsIHdlaWdodCBhbmQgcHJpb3JpdHkgbnVtYmVycyBhcmUgaW4gYSBkaWZmZXJlbnQKK29yZGVyLiBNb3JlIHRoYW4gb25lIFNSViByZWNvcmQgZm9yIGEgZ2l2ZW4gc2VydmljZS9kb21haW4gaXMgYWxsb3dlZCwKK2FsbCB0aGF0IG1hdGNoIGFyZSByZXR1cm5lZC4KKy5UUAorLkIgXC1ZLCAtLXR4dC1yZWNvcmQ9PG5hbWU+W1ssPHRleHQ+XSw8dGV4dD5dCitSZXR1cm4gYSBUWFQgRE5TIHJlY29yZC4gVGhlIHZhbHVlIG9mIFRYVCByZWNvcmQgaXMgYSBzZXQgb2Ygc3RyaW5ncywKK3NvICBhbnkgbnVtYmVyIG1heSBiZSBpbmNsdWRlZCwgc3BsaXQgYnkgY29tbWFzLgorLlRQCisuQiAtLXB0ci1yZWNvcmQ9PG5hbWU+Wyw8dGFyZ2V0Pl0KK1JldHVybiBhIFBUUiBETlMgcmVjb3JkLgorLlRQCisuQiAtLW5hcHRyLXJlY29yZD08bmFtZT4sPG9yZGVyPiw8cHJlZmVyZW5jZT4sPGZsYWdzPiw8c2VydmljZT4sPHJlZ2V4cD5bLDxyZXBsYWNlbWVudD5dCitSZXR1cm4gYW4gTkFQVFIgRE5TIHJlY29yZCwgYXMgc3BlY2lmaWVkIGluIFJGQzM0MDMuCisuVFAKKy5CIC0tY25hbWU9PGNuYW1lPiw8dGFyZ2V0PgorUmV0dXJuIGEgQ05BTUUgcmVjb3JkIHdoaWNoIGluZGljYXRlcyB0aGF0IDxjbmFtZT4gaXMgcmVhbGx5Cis8dGFyZ2V0Pi4gVGhlcmUgYXJlIHNpZ25pZmljYW50IGxpbWl0YXRpb25zIG9uIHRoZSB0YXJnZXQ7IGl0IG11c3QgYmUgYQorRE5TIG5hbWUgd2hpY2ggaXMga25vd24gdG8gZG5zbWFzcSBmcm9tIC9ldGMvaG9zdHMgKG9yIGFkZGl0aW9uYWwKK2hvc3RzIGZpbGVzKSBvciBmcm9tIERIQ1AuIElmIHRoZSB0YXJnZXQgZG9lcyBub3Qgc2F0aXNmeSB0aGlzCitjcml0ZXJpYSwgdGhlIHdob2xlIGNuYW1lIGlzIGlnbm9yZWQuIFRoZSBjbmFtZSBtdXN0IGJlIHVuaXF1ZSwgYnV0IGl0CitpcyBwZXJtaXNzYWJsZSB0byBoYXZlIG1vcmUgdGhhbiBvbmUgY25hbWUgcG9pbnRpbmcgdG8gdGhlIHNhbWUgdGFyZ2V0LgorLlRQCisuQiAtLWludGVyZmFjZS1uYW1lPTxuYW1lPiw8aW50ZXJmYWNlPgorUmV0dXJuIGEgRE5TIHJlY29yZCBhc3NvY2lhdGluZyB0aGUgbmFtZSB3aXRoIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb24KK3RoZSBnaXZlbiBpbnRlcmZhY2UuIFRoaXMgZmxhZyBzcGVjaWZpZXMgYW4gQSByZWNvcmQgZm9yIHRoZSBnaXZlbgorbmFtZSBpbiB0aGUgc2FtZSB3YXkgYXMgYW4gL2V0Yy9ob3N0cyBsaW5lLCBleGNlcHQgdGhhdCB0aGUgYWRkcmVzcyBpcworbm90IGNvbnN0YW50LCBidXQgdGFrZW4gZnJvbSB0aGUgZ2l2ZW4gaW50ZXJmYWNlLiBJZiB0aGUgaW50ZXJmYWNlIGlzCitkb3duLCBub3QgY29uZmlndXJlZCBvciBub24tZXhpc3RlbnQsIGFuIGVtcHR5IHJlY29yZCBpcyByZXR1cm5lZC4gVGhlCittYXRjaGluZyBQVFIgcmVjb3JkIGlzIGFsc28gY3JlYXRlZCwgbWFwcGluZyB0aGUgaW50ZXJmYWNlIGFkZHJlc3MgdG8KK3RoZSBuYW1lLiBNb3JlIHRoYW4gb25lIG5hbWUgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnRlcmZhY2UKK2FkZHJlc3MgYnkgcmVwZWF0aW5nIHRoZSBmbGFnOyBpbiB0aGF0IGNhc2UgdGhlIGZpcnN0IGluc3RhbmNlIGlzIHVzZWQKK2ZvciB0aGUgcmV2ZXJzZSBhZGRyZXNzLXRvLW5hbWUgbWFwcGluZy4KKy5UUAorLkIgXC1jLCAtLWNhY2hlLXNpemU9PGNhY2hlc2l6ZT4KK1NldCB0aGUgc2l6ZSBvZiBkbnNtYXNxJ3MgY2FjaGUuIFRoZSBkZWZhdWx0IGlzIDE1MCBuYW1lcy4gU2V0dGluZyB0aGUgY2FjaGUgc2l6ZSB0byB6ZXJvIGRpc2FibGVzIGNhY2hpbmcuCisuVFAKKy5CIFwtTiwgLS1uby1uZWdjYWNoZQorRGlzYWJsZSBuZWdhdGl2ZSBjYWNoaW5nLiBOZWdhdGl2ZSBjYWNoaW5nIGFsbG93cyBkbnNtYXNxIHRvIHJlbWVtYmVyCisibm8gc3VjaCBkb21haW4iIGFuc3dlcnMgZnJvbSB1cHN0cmVhbSBuYW1lc2VydmVycyBhbmQgYW5zd2VyCitpZGVudGljYWwgcXVlcmllcyB3aXRob3V0IGZvcndhcmRpbmcgdGhlbSBhZ2Fpbi4gCisuVFAKKy5CIFwtMCwgLS1kbnMtZm9yd2FyZC1tYXg9PHF1ZXJpZXM+CitTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzCisxNTAsIHdoaWNoIHNob3VsZCBiZSBmaW5lIGZvciBtb3N0IHNldHVwcy4gVGhlIG9ubHkga25vd24gc2l0dWF0aW9uCit3aGVyZSB0aGlzIG5lZWRzIHRvIGJlIGluY3JlYXNlZCBpcyB3aGVuIHVzaW5nIHdlYi1zZXJ2ZXIgbG9nIGZpbGUKK3Jlc29sdmVycywgd2hpY2ggY2FuIGdlbmVyYXRlIGxhcmdlIG51bWJlcnMgb2YgY29uY3VycmVudCBxdWVyaWVzLgorLlRQCisuQiBcLUYsIC0tZGhjcC1yYW5nZT1bW25ldDpdbmV0d29yay1pZCxdPHN0YXJ0LWFkZHI+LDxlbmQtYWRkcj5bWyw8bmV0bWFzaz5dLDxicm9hZGNhc3Q+XVssPGxlYXNlIHRpbWU+XQorRW5hYmxlIHRoZSBESENQIHNlcnZlci4gQWRkcmVzc2VzIHdpbGwgYmUgZ2l2ZW4gb3V0IGZyb20gdGhlIHJhbmdlCis8c3RhcnQtYWRkcj4gdG8gPGVuZC1hZGRyPiBhbmQgZnJvbSBzdGF0aWNhbGx5IGRlZmluZWQgYWRkcmVzc2VzIGdpdmVuCitpbiAKKy5CIGRoY3AtaG9zdAorb3B0aW9ucy4gSWYgdGhlIGxlYXNlIHRpbWUgaXMgZ2l2ZW4sIHRoZW4gbGVhc2VzCit3aWxsIGJlIGdpdmVuIGZvciB0aGF0IGxlbmd0aCBvZiB0aW1lLiBUaGUgbGVhc2UgdGltZSBpcyBpbiBzZWNvbmRzLAorb3IgbWludXRlcyAoZWcgNDVtKSBvciBob3VycyAoZWcgMWgpIG9yICJpbmZpbml0ZSIuIElmIG5vdCBnaXZlbiwKK3RoZSBkZWZhdWx0IGxlYXNlIHRpbWUgaXMgb25lIGhvdXIuIFRoZQorbWluaW11bSBsZWFzZSB0aW1lIGlzIHR3byBtaW51dGVzLiBUaGlzCitvcHRpb24gbWF5IGJlIHJlcGVhdGVkLCB3aXRoIGRpZmZlcmVudCBhZGRyZXNzZXMsIHRvIGVuYWJsZSBESENQCitzZXJ2aWNlIHRvIG1vcmUgdGhhbiBvbmUgbmV0d29yay4gRm9yIGRpcmVjdGx5IGNvbm5lY3RlZCBuZXR3b3JrcyAoaWUsCituZXR3b3JrcyBvbiB3aGljaCB0aGUgbWFjaGluZSBydW5uaW5nIGRuc21hc3EgaGFzIGFuIGludGVyZmFjZSkgdGhlCituZXRtYXNrIGlzIG9wdGlvbmFsLiBJdCBpcywgaG93ZXZlciwgcmVxdWlyZWQgZm9yIG5ldHdvcmtzIHdoaWNoCityZWNlaXZlIERIQ1Agc2VydmljZSB2aWEgYSByZWxheSBhZ2VudC4gVGhlIGJyb2FkY2FzdCBhZGRyZXNzIGlzCithbHdheXMgb3B0aW9uYWwuIEl0IGlzIGFsd2F5cworYWxsb3dlZCB0byBoYXZlIG1vcmUgdGhhbiBvbmUgZGhjcC1yYW5nZSBpbiBhIHNpbmdsZSBzdWJuZXQuIFRoZSBvcHRpb25hbAorbmV0d29yay1pZCBpcyBhIGFscGhhbnVtZXJpYyBsYWJlbCB3aGljaCBtYXJrcyB0aGlzIG5ldHdvcmsgc28gdGhhdAorZGhjcCBvcHRpb25zIG1heSBiZSBzcGVjaWZpZWQgb24gYSBwZXItbmV0d29yayBiYXNpcy4gCitXaGVuIGl0IGlzIHByZWZpeGVkIHdpdGggJ25ldDonIHRoZW4gaXRzIG1lYW5pbmcgY2hhbmdlcyBmcm9tIHNldHRpbmcKK2EgdGFnIHRvIG1hdGNoaW5nIGl0LiBPbmx5IG9uZSB0YWcgbWF5IGJlIHNldCwgYnV0IG1vcmUgdGhhbiBvbmUgdGFnIG1heSBiZSBtYXRjaGVkLgorVGhlIGVuZCBhZGRyZXNzIG1heSBiZSByZXBsYWNlZCBieSB0aGUga2V5d29yZCAKKy5CIHN0YXRpYword2hpY2ggdGVsbHMgZG5zbWFzcSB0byBlbmFibGUgREhDUCBmb3IgdGhlIG5ldHdvcmsgc3BlY2lmaWVkLCBidXQgbm90Cit0byBkeW5hbWljYWxseSBhbGxvY2F0ZSBJUCBhZGRyZXNzZXM6IG9ubHkgaG9zdHMgd2hpY2ggaGF2ZSBzdGF0aWMKK2FkZHJlc3NlcyBnaXZlbiB2aWEgCisuQiBkaGNwLWhvc3QKK29yIGZyb20gL2V0Yy9ldGhlcnMgd2lsbCBiZSBzZXJ2ZWQuIFRoZSBlbmQgYWRkcmVzcyBtYXkgYmUgcmVwbGFjZWQgYnkKK3RoZSBrZXl3b3JkCisuQiBwcm94eQoraW4gd2hpY2ggY2FzZSBkbnNtYXNxIHdpbGwgcHJvdmlkZSBwcm94eS1ESENQIG9uIHRoZSBzcGVjaWZpZWQKK3N1Ym5ldC4gKFNlZSAKKy5CIHB4ZS1wcm9tcHQKK2FuZCAKKy5CIHB4ZS1zZXJ2aWNlCitmb3IgZGV0YWlscy4pCisuVFAKKy5CIFwtRywgLS1kaGNwLWhvc3Q9Wzxod2FkZHI+XVssaWQ6PGNsaWVudF9pZD58Kl1bLG5ldDo8bmV0aWQ+XVssPGlwYWRkcj5dWyw8aG9zdG5hbWU+XVssPGxlYXNlX3RpbWU+XVssaWdub3JlXQorU3BlY2lmeSBwZXIgaG9zdCBwYXJhbWV0ZXJzIGZvciB0aGUgREhDUCBzZXJ2ZXIuIFRoaXMgYWxsb3dzIGEgbWFjaGluZQord2l0aCBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgYWRkcmVzcyB0byBiZSBhbHdheXMgYWxsb2NhdGVkIHRoZSBzYW1lCitob3N0bmFtZSwgSVAgYWRkcmVzcyBhbmQgbGVhc2UgdGltZS4gQSBob3N0bmFtZSBzcGVjaWZpZWQgbGlrZSB0aGlzCitvdmVycmlkZXMgYW55IHN1cHBsaWVkIGJ5IHRoZSBESENQIGNsaWVudCBvbiB0aGUgbWFjaGluZS4gSXQgaXMgYWxzbworYWxsb3dhYmxlIHRvIG9tbWl0IHRoZSBoYXJkd2FyZSBhZGRyZXNzIGFuZCBpbmNsdWRlIHRoZSBob3N0bmFtZSwgaW4KK3doaWNoIGNhc2UgdGhlIElQIGFkZHJlc3MgYW5kIGxlYXNlIHRpbWVzIHdpbGwgYXBwbHkgdG8gYW55IG1hY2hpbmUKK2NsYWltaW5nIHRoYXQgbmFtZS4gRm9yIGV4YW1wbGUgCisuQiAtLWRoY3AtaG9zdD0wMDoyMDplMDozYjoxMzphZix3YXAsaW5maW5pdGUgCit0ZWxscyBkbnNtYXNxIHRvIGdpdmUKK3RoZSBtYWNoaW5lIHdpdGggaGFyZHdhcmUgYWRkcmVzcyAwMDoyMDplMDozYjoxMzphZiB0aGUgbmFtZSB3YXAsIGFuZAorYW4gaW5maW5pdGUgREhDUCBsZWFzZS4gCisuQiAtLWRoY3AtaG9zdD1sYXAsMTkyLjE2OC4wLjE5OSAKK3RlbGxzCitkbnNtYXNxIHRvIGFsd2F5cyBhbGxvY2F0ZSB0aGUgbWFjaGluZSBsYXAgdGhlIElQIGFkZHJlc3MKKzE5Mi4xNjguMC4xOTkuIEFkZHJlc3NlcyBhbGxvY2F0ZWQgbGlrZSB0aGlzIGFyZSBub3QgY29uc3RyYWluZWQgdG8gYmUKK2luIHRoZSByYW5nZSBnaXZlbiBieSB0aGUgLS1kaGNwLXJhbmdlIG9wdGlvbiwgYnV0IHRoZXkgbXVzdCBiZSBvbiB0aGUKK25ldHdvcmsgYmVpbmcgc2VydmVkIGJ5IHRoZSBESENQIHNlcnZlci4gSXQgaXMgYWxsb3dlZCB0byB1c2UgY2xpZW50IGlkZW50aWZpZXJzIHJhdGhlciB0aGFuCitoYXJkd2FyZSBhZGRyZXNzZXMgdG8gaWRlbnRpZnkgaG9zdHMgYnkgcHJlZml4aW5nIHdpdGggJ2lkOicuIFRodXM6IAorLkIgLS1kaGNwLWhvc3Q9aWQ6MDE6MDI6MDM6MDQsLi4uLi4gCityZWZlcnMgdG8gdGhlIGhvc3Qgd2l0aCBjbGllbnQgaWRlbnRpZmllciAwMTowMjowMzowNC4gSXQgaXMgYWxzbworYWxsb3dlZCB0byBzcGVjaWZ5IHRoZSBjbGllbnQgSUQgYXMgdGV4dCwgbGlrZSB0aGlzOgorLkIgLS1kaGNwLWhvc3Q9aWQ6Y2xpZW50aWRhc3RleHQsLi4uLi4gCisKK1RoZSBzcGVjaWFsIG9wdGlvbiBpZDoqIG1lYW5zICJpZ25vcmUgYW55IGNsaWVudC1pZCAKK2FuZCB1c2UgTUFDIGFkZHJlc3NlcyBvbmx5LiIgVGhpcyBpcyB1c2VmdWwgd2hlbiBhIGNsaWVudCBwcmVzZW50cyBhIGNsaWVudC1pZCBzb21ldGltZXMgCitidXQgbm90IG90aGVycy4KKworSWYgYSBuYW1lIGFwcGVhcnMgaW4gL2V0Yy9ob3N0cywgdGhlIGFzc29jaWF0ZWQgYWRkcmVzcyBjYW4gYmUKK2FsbG9jYXRlZCB0byBhIERIQ1AgbGVhc2UsIGJ1dCBvbmx5IGlmIGEgCisuQiAtLWRoY3AtaG9zdAorb3B0aW9uIHNwZWNpZnlpbmcgdGhlIG5hbWUgYWxzbyBleGlzdHMuIFRoZSBzcGVjaWFsIGtleXdvcmQgImlnbm9yZSIKK3RlbGxzIGRuc21hc3EgdG8gbmV2ZXIgb2ZmZXIgYSBESENQIGxlYXNlIHRvIGEgbWFjaGluZS4gVGhlIG1hY2hpbmUKK2NhbiBiZSBzcGVjaWZpZWQgYnkgaGFyZHdhcmUgYWRkcmVzcywgY2xpZW50IElEIG9yIGhvc3RuYW1lLCBmb3IKK2luc3RhbmNlCisuQiAtLWRoY3AtaG9zdD0wMDoyMDplMDozYjoxMzphZixpZ25vcmUKK1RoaXMgaXMKK3VzZWZ1bCB3aGVuIHRoZXJlIGlzIGFub3RoZXIgREhDUCBzZXJ2ZXIgb24gdGhlIG5ldHdvcmsgd2hpY2ggc2hvdWxkCitiZSB1c2VkIGJ5IHNvbWUgbWFjaGluZXMuCisKK1RoZSBuZXQ6PG5ldHdvcmstaWQ+IHNldHMgdGhlIG5ldHdvcmstaWQgdGFnCit3aGVuZXZlciB0aGlzIGRoY3AtaG9zdCBkaXJlY3RpdmUgaXMgaW4gdXNlLiBUaGlzIGNhbiBiZSB1c2VkIHRvIAorc2VsZWN0aXZlbHkgc2VuZCBESENQIG9wdGlvbnMganVzdCBmb3IgdGhpcyBob3N0LiBXaGVuIGEgaG9zdCBtYXRjaGVzIGFueQorZGhjcC1ob3N0IGRpcmVjdGl2ZSAob3Igb25lIGltcGxpZWQgYnkgL2V0Yy9ldGhlcnMpIHRoZW4gdGhlIHNwZWNpYWwKK25ldHdvcmstaWQgdGFnICJrbm93biIgaXMgc2V0LiBUaGlzIGFsbG93cyBkbnNtYXNxIHRvIGJlIGNvbmZpZ3VyZWQgdG8KK2lnbm9yZSByZXF1ZXN0cyBmcm9tIHVua25vd24gbWFjaGluZXMgdXNpbmcKKy5CIC0tZGhjcC1pZ25vcmU9I2tub3duCitFdGhlcm5ldCBhZGRyZXNzZXMgKGJ1dCBub3QgY2xpZW50LWlkcykgbWF5IGhhdmUKK3dpbGRjYXJkIGJ5dGVzLCBzbyBmb3IgZXhhbXBsZSAKKy5CIC0tZGhjcC1ob3N0PTAwOjIwOmUwOjNiOjEzOiosaWdub3JlIAord2lsbCBjYXVzZSBkbnNtYXNxIHRvIGlnbm9yZSBhIHJhbmdlIG9mIGhhcmR3YXJlIGFkZHJlc3Nlcy4gTm90ZSB0aGF0Cit0aGUgIioiIHdpbGwgbmVlZCB0byBiZSBlc2NhcGVkIG9yIHF1b3RlZCBvbiBhIGNvbW1hbmQgbGluZSwgYnV0IG5vdAoraW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworSGFyZHdhcmUgYWRkcmVzc2VzIG5vcm1hbGx5IG1hdGNoIGFueQorbmV0d29yayAoQVJQKSB0eXBlLCBidXQgaXQgaXMgcG9zc2libGUgdG8gcmVzdHJpY3QgdGhlbSB0byBhIHNpbmdsZQorQVJQIHR5cGUgYnkgcHJlY2VkaW5nIHRoZW0gd2l0aCB0aGUgQVJQLXR5cGUgKGluIEhFWCkgYW5kICItIi4gc28gCisuQiAtLWRoY3AtaG9zdD0wNi0wMDoyMDplMDozYjoxMzphZiwxLjIuMy40IAord2lsbCBvbmx5IG1hdGNoIGEKK1Rva2VuLVJpbmcgaGFyZHdhcmUgYWRkcmVzcywgc2luY2UgdGhlIEFSUC1hZGRyZXNzIHR5cGUgZm9yIHRva2VuIHJpbmcKK2lzIDYuIAorCitBcyBhIHNwZWNpYWwgY2FzZSwgaXQgaXMgcG9zc2libGUgdG8gaW5jbHVkZSBtb3JlIHRoYW4gb25lCitoYXJkd2FyZSBhZGRyZXNzLiBlZzoKKy5CIC0tZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LDEyOjM0OjU2Ojc4OjkwOjEyLDE5Mi4xNjguMC4yCitUaGlzIGFsbG93cyBhbiBJUCBhZGRyZXNzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aAorbXVsdGlwbGUgaGFyZHdhcmUgYWRkcmVzc2VzLCBhbmQgZ2l2ZXMgZG5zbWFzcSBwZXJtaXNzaW9uIHRvIGFiYW5kb24gYQorREhDUCBsZWFzZSB0byBvbmUgb2YgdGhlIGhhcmR3YXJlIGFkZHJlc3NlcyB3aGVuIGFub3RoZXIgb25lIGFza3MgZm9yCithIGxlYXNlLiBCZXdhcmUgdGhhdCB0aGlzIGlzIGEgZGFuZ2Vyb3VzIHRoaW5nIHRvIGRvLCBpdCB3aWxsIG9ubHkKK3dvcmsgcmVsaWFibHkgaWYgb25seSBvbmUgb2YgdGhlIGhhcmR3YXJlIGFkZHJlc3NlcyBpcyBhY3RpdmUgYXQgYW55Cit0aW1lIGFuZCB0aGVyZSBpcyBubyB3YXkgZm9yIGRuc21hc3EgdG8gZW5mb3JjZSB0aGlzLiBJdCBpcywgZm9yIGluc3RhbmNlLAordXNlZnVsIHRvIGFsbG9jYXRlIGEgc3RhYmxlIElQIGFkZHJlc3MgdG8gYSBsYXB0b3Agd2hpY2gKK2hhcyBib3RoIHdpcmVkIGFuZCB3aXJlbGVzcyBpbnRlcmZhY2VzLgorLlRQCisuQiAtLWRoY3AtaG9zdHNmaWxlPTxmaWxlPgorUmVhZCBESENQIGhvc3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUuIFRoZSBmaWxlIGNvbnRhaW5zIAoraW5mb3JtYXRpb24gYWJvdXQgb25lIGhvc3QgcGVyIGxpbmUuIFRoZSBmb3JtYXQgb2YgYSBsaW5lIGlzIHRoZSBzYW1lCithcyB0ZXh0IHRvIHRoZSByaWdodCBvZiAnPScgaW4gLS1kaGNwLWhvc3QuIFRoZSBhZHZhbnRhZ2Ugb2Ygc3RvcmluZyBESENQIGhvc3QgaW5mb3JtYXRpb24KK2luIHRoaXMgZmlsZSBpcyB0aGF0IGl0IGNhbiBiZSBjaGFuZ2VkIHdpdGhvdXQgcmUtc3RhcnRpbmcgZG5zbWFzcToKK3RoZSBmaWxlIHdpbGwgYmUgcmUtcmVhZCB3aGVuIGRuc21hc3EgcmVjZWl2ZXMgU0lHSFVQLgorLlRQCisuQiAtLWRoY3Atb3B0c2ZpbGU9PGZpbGU+CitSZWFkIERIQ1Agb3B0aW9uIGluZm9ybWF0aW9uIGZyb20gdGhlIHNwZWNpZmllZCBmaWxlLiBUaGUgYWR2YW50YWdlIG9mIAordXNpbmcgdGhpcyBvcHRpb24gaXMgdGhlIHNhbWUgYXMgZm9yIC0tZGhjcC1ob3N0c2ZpbGU6IHRoZQorZGhjcC1vcHRzZmlsZSB3aWxsIGJlIHJlLXJlYWQgd2hlbiBkbnNtYXNxIHJlY2VpdmVzIFNJR0hVUC4gTm90ZSB0aGF0CitpdCBpcyBwb3NzaWJsZSB0byBlbmNvZGUgdGhlIGluZm9ybWF0aW9uIGluIGEKKy5CIC0tZGhjcC1ib290CitmbGFnIGFzIERIQ1Agb3B0aW9ucywgdXNpbmcgdGhlIG9wdGlvbnMgbmFtZXMgYm9vdGZpbGUtbmFtZSwKK3NlcnZlci1pcC1hZGRyZXNzIGFuZCB0ZnRwLXNlcnZlci4gVGhpcyBhbGxvd3MgdGhlc2UgdG8gYmUgaW5jbHVkZWQKK2luIGEgZGhjcC1vcHRzZmlsZS4KKy5UUCAKKy5CIFwtWiwgLS1yZWFkLWV0aGVycworUmVhZCAvZXRjL2V0aGVycyBmb3IgaW5mb3JtYXRpb24gYWJvdXQgaG9zdHMgZm9yIHRoZSBESENQIHNlcnZlci4gVGhlCitmb3JtYXQgb2YgL2V0Yy9ldGhlcnMgaXMgYSBoYXJkd2FyZSBhZGRyZXNzLCBmb2xsb3dlZCBieSBlaXRoZXIgYQoraG9zdG5hbWUgb3IgZG90dGVkLXF1YWQgSVAgYWRkcmVzcy4gV2hlbiByZWFkIGJ5IGRuc21hc3EgdGhlc2UgbGluZXMKK2hhdmUgZXhhY3RseSB0aGUgc2FtZSBlZmZlY3QgYXMKKy5CIC0tZGhjcC1ob3N0CitvcHRpb25zIGNvbnRhaW5pbmcgdGhlIHNhbWUgaW5mb3JtYXRpb24uIC9ldGMvZXRoZXJzIGlzIHJlLXJlYWQgd2hlbiAKK2Ruc21hc3EgcmVjZWl2ZXMgU0lHSFVQLgorLlRQCisuQiBcLU8sIC0tZGhjcC1vcHRpb249WzxuZXR3b3JrLWlkPixbPG5ldHdvcmstaWQ+LF1dW2VuY2FwOjxvcHQ+LF1bdmVuZG9yOls8dmVuZG9yLWNsYXNzPl0sXVs8b3B0PnxvcHRpb246PG9wdC1uYW1lPl0sWzx2YWx1ZT5bLDx2YWx1ZT5dXQorU3BlY2lmeSBkaWZmZXJlbnQgb3IgZXh0cmEgb3B0aW9ucyB0byBESENQIGNsaWVudHMuIEJ5IGRlZmF1bHQsCitkbnNtYXNxIHNlbmRzIHNvbWUgc3RhbmRhcmQgb3B0aW9ucyB0byBESENQIGNsaWVudHMsIHRoZSBuZXRtYXNrIGFuZAorYnJvYWRjYXN0IGFkZHJlc3MgYXJlIHNldCB0byB0aGUgc2FtZSBhcyB0aGUgaG9zdCBydW5uaW5nIGRuc21hc3EsIGFuZAordGhlIEROUyBzZXJ2ZXIgYW5kIGRlZmF1bHQgcm91dGUgYXJlIHNldCB0byB0aGUgYWRkcmVzcyBvZiB0aGUgbWFjaGluZQorcnVubmluZyBkbnNtYXNxLiBJZiB0aGUgZG9tYWluIG5hbWUgb3B0aW9uIGhhcyBiZWVuIHNldCwgdGhhdCBpcyBzZW50LgorVGhpcyBjb25maWd1cmF0aW9uIGFsbG93cyB0aGVzZSBkZWZhdWx0cyB0byBiZSBvdmVycmlkZGVuLAorb3Igb3RoZXIgb3B0aW9ucyBzcGVjaWZpZWQuIFRoZSBvcHRpb24sIHRvIGJlIHNlbnQgbWF5IGJlIGdpdmVuIGFzIGEKK2RlY2ltYWwgbnVtYmVyIG9yIGFzICJvcHRpb246PG9wdGlvbi1uYW1lPiIgVGhlIG9wdGlvbiBudW1iZXJzIGFyZQorc3BlY2lmaWVkIGluIFJGQzIxMzIgYW5kIHN1YnNlcXVlbnQgUkZDcy4gVGhlIHNldCBvZiBvcHRpb24tbmFtZXMKK2tub3duIGJ5IGRuc21hc3EgY2FuIGJlIGRpc2NvdmVyZWQgYnkgcnVubmluZyAiZG5zbWFzcSAtLWhlbHAgZGhjcCIuCitGb3IgZXhhbXBsZSwgdG8gc2V0IHRoZSBkZWZhdWx0IHJvdXRlIG9wdGlvbiB0byAKKzE5Mi4xNjguNC40LCBkbyAKKy5CIC0tZGhjcC1vcHRpb249MywxOTIuMTY4LjQuNCAKK29yCisuQiAtLWRoY3Atb3B0aW9uID0gb3B0aW9uOnJvdXRlciwgMTkyLjE2OC40LjQKK2FuZCB0byBzZXQgdGhlIHRpbWUtc2VydmVyIGFkZHJlc3MgdG8gMTkyLjE2OC4wLjQsIGRvCisuQiAtLWRoY3Atb3B0aW9uID0gNDIsMTkyLjE2OC4wLjQgCitvciAKKy5CIC0tZGhjcC1vcHRpb24gPSBvcHRpb246bnRwLXNlcnZlciwgMTkyLjE2OC4wLjQKK1RoZSBzcGVjaWFsIGFkZHJlc3MgMC4wLjAuMCBpcyB0YWtlbiB0byBtZWFuICJ0aGUgYWRkcmVzcyBvZiB0aGUKK21hY2hpbmUgcnVubmluZyBkbnNtYXNxIi4gRGF0YSB0eXBlcyBhbGxvd2VkIGFyZSBjb21tYSBzZXBhcmF0ZWQKK2RvdHRlZC1xdWFkIElQIGFkZHJlc3NlcywgYSBkZWNpbWFsIG51bWJlciwgY29sb24tc2VwYXJhdGVkIGhleCBkaWdpdHMKK2FuZCBhIHRleHQgc3RyaW5nLiBJZiB0aGUgb3B0aW9uYWwgbmV0d29yay1pZHMgYXJlIGdpdmVuIHRoZW4KK3RoaXMgb3B0aW9uIGlzIG9ubHkgc2VudCB3aGVuIGFsbCB0aGUgbmV0d29yay1pZHMgYXJlIG1hdGNoZWQuCisKK1NwZWNpYWwgcHJvY2Vzc2luZyBpcyBkb25lIG9uIGEgdGV4dCBhcmd1bWVudCBmb3Igb3B0aW9uIDExOSwgdG8KK2NvbmZvcm0gd2l0aCBSRkMgMzM5Ny4gVGV4dCBvciBkb3R0ZWQtcXVhZCBJUCBhZGRyZXNzZXMgYXMgYXJndW1lbnRzCit0byBvcHRpb24gMTIwIGFyZSBoYW5kbGVkIGFzIHBlciBSRkMgMzM2MS4gRG90dGVkLXF1YWQgSVAgYWRkcmVzc2VzIAord2hpY2ggYXJlIGZvbGxvd2VkIGJ5IGEgc2xhc2ggYW5kIHRoZW4gYSBuZXRtYXNrIHNpemUgYXJlIGVuY29kZWQgYXMKK2Rlc2NyaWJlZCBpbiBSRkMgMzQ0Mi4KKworQmUgY2FyZWZ1bDogbm8gY2hlY2tpbmcgaXMgZG9uZSB0aGF0IHRoZSBjb3JyZWN0IHR5cGUgb2YgZGF0YSBmb3IgdGhlCitvcHRpb24gbnVtYmVyIGlzIHNlbnQsIGl0IGlzIHF1aXRlIHBvc3NpYmxlIHRvCitwZXJzdWFkZSBkbnNtYXNxIHRvIGdlbmVyYXRlIGlsbGVnYWwgREhDUCBwYWNrZXRzIHdpdGggaW5qdWRpY2lvdXMgdXNlCitvZiB0aGlzIGZsYWcuIFdoZW4gdGhlIHZhbHVlIGlzIGEgZGVjaW1hbCBudW1iZXIsIGRuc21hc3EgbXVzdCBkZXRlcm1pbmUgaG93IAorbGFyZ2UgdGhlIGRhdGEgaXRlbSBpcy4gSXQgZG9lcyB0aGlzIGJ5IGV4YW1pbmluZyB0aGUgb3B0aW9uIG51bWJlciBhbmQvb3IgdGhlCit2YWx1ZSwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGFwcGVuZGluZyBhIHNpbmdsZSBsZXR0ZXIgZmxhZyBhcyBmb2xsb3dzOgorYiA9IG9uZSBieXRlLCBzID0gdHdvIGJ5dGVzLCBpID0gZm91ciBieXRlcy4gVGhpcyBpcyBtYWlubHkgdXNlZnVsIHdpdGggCitlbmNhcHN1bGF0ZWQgdmVuZG9yIGNsYXNzIG9wdGlvbnMgKHNlZSBiZWxvdykgd2hlcmUgZG5zbWFzcSBjYW5ub3QKK2RldGVybWluZSBkYXRhIHNpemUgZnJvbSB0aGUgIG9wdGlvbiBudW1iZXIuIE9wdGlvbiBkYXRhIHdoaWNoCitjb25zaXN0cyBzb2xlbHkgb2YgcGVyaW9kcyBhbmQgZGlnaXRzIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYnkgZG5zbWFzcQorYXMgYW4gSVAgYWRkcmVzcywgYW5kIGluc2VydGVkIGludG8gYW4gb3B0aW9uIGFzIHN1Y2guIFRvIGZvcmNlIGEKK2xpdGVyYWwgc3RyaW5nLCB1c2UgcXVvdGVzLiBGb3IgaW5zdGFuY2Ugd2hlbiB1c2luZyBvcHRpb24gNjYgdG8gc2VuZAorYSBsaXRlcmFsIElQIGFkZHJlc3MgYXMgVEZUUCBzZXJ2ZXIgbmFtZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIGRvCisuQiAtLWRoY3Atb3B0aW9uPTY2LCIxLjIuMy40IgorCitFbmNhcHN1bGF0ZWQgVmVuZG9yLWNsYXNzIG9wdGlvbnMgbWF5IGFsc28gYmUgc3BlY2lmaWVkIHVzaW5nCistLWRoY3Atb3B0aW9uOiBmb3IgaW5zdGFuY2UgCisuQiAtLWRoY3Atb3B0aW9uPXZlbmRvcjpQWEVDbGllbnQsMSwwLjAuMC4wIAorc2VuZHMgdGhlIGVuY2Fwc3VsYXRlZCB2ZW5kb3IKK2NsYXNzLXNwZWNpZmljIG9wdGlvbiAibWZ0cC1hZGRyZXNzPTAuMC4wLjAiIHRvIGFueSBjbGllbnQgd2hvc2UKK3ZlbmRvci1jbGFzcyBtYXRjaGVzICJQWEVDbGllbnQiLiBUaGUgdmVuZG9yLWNsYXNzIG1hdGNoaW5nIGlzCitzdWJzdHJpbmcgYmFzZWQgKHNlZSAtLWRoY3AtdmVuZG9yY2xhc3MgZm9yIGRldGFpbHMpLiBJZiBhCit2ZW5kb3ItY2xhc3Mgb3B0aW9uIChudW1iZXIgNjApIGlzIHNlbnQgYnkgZG5zbWFzcSwgdGhlbiB0aGF0IGlzIHVzZWQgCitmb3Igc2VsZWN0aW5nIGVuY2Fwc3VsYXRlZCBvcHRpb25zIGluIHByZWZlcmVuY2UgdG8gYW55IHNlbnQgYnkgdGhlCitjbGllbnQuIEl0IGlzCitwb3NzaWJsZSB0byBvbWl0IHRoZSB2ZW5kb3JjbGFzcyBjb21wbGV0ZWx5OworLkIgLS1kaGNwLW9wdGlvbj12ZW5kb3I6LDEsMC4wLjAuMAoraW4gd2hpY2ggY2FzZSB0aGUgZW5jYXBzdWxhdGVkIG9wdGlvbiBpcyBhbHdheXMgc2VudC4KKworT3B0aW9ucyBtYXkgYmUgZW5jYXBzdWxhdGVkIHdpdGhpbiBvdGhlciBvcHRpb25zOiBmb3IgaW5zdGFuY2UKKy5CIC0tZGhjcC1vcHRpb249ZW5jYXA6MTc1LCAxOTAsICJpc2NzaS1jbGllbnQwIgord2lsbCBzZW5kIG9wdGlvbiAxNzUsIHdpdGhpbiB3aGljaCBpcyB0aGUgb3B0aW9uIDE5MC4gSWYgbXVsdGlwbGUKK29wdGlvbnMgYXJlIGdpdmVuIHdoaWNoIGFyZSBlbmNhcHN1bGF0ZWQgd2l0aCB0aGUgc2FtZSBvcHRpb24gbnVtYmVyCit0aGVuIHRoZXkgd2lsbCBiZSBjb3JyZWN0bHkgY29tYmluZWQgaW50byBvbmUgZW5jYXBzdWxhdGVkIG9wdGlvbi4KK2VuY2FwOiBhbmQgdmVuZG9yOiBhcmUgbWF5IG5vdCBib3RoIGJlIHNldCBpbiB0aGUgc2FtZSBkaGNwLW9wdGlvbi4KKworVGhlIGFkZHJlc3MgMC4wLjAuMCBpcyBub3QgdHJlYXRlZCBzcGVjaWFsbHkgaW4KK2VuY2Fwc3VsYXRlZCBvcHRpb25zLgorLlRQCisuQiAtLWRoY3Atb3B0aW9uLWZvcmNlPVs8bmV0d29yay1pZD4sWzxuZXR3b3JrLWlkPixdXVtlbmNhcDo8b3B0PixdW3ZlbmRvcjpbPHZlbmRvci1jbGFzcz5dLF08b3B0PixbPHZhbHVlPlssPHZhbHVlPl1dCitUaGlzIHdvcmtzIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzCisuQiAtLWRoY3Atb3B0aW9uCitleGNlcHQgdGhhdCB0aGUgb3B0aW9uIHdpbGwgYWx3YXlzIGJlIHNlbnQsIGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzCitub3QgYXNrIGZvciBpdCBpbiB0aGUgcGFyYW1ldGVyIHJlcXVlc3QgbGlzdC4gVGhpcyBpcyBzb21ldGltZXMKK25lZWRlZCwgZm9yIGV4YW1wbGUgd2hlbiBzZW5kaW5nIG9wdGlvbnMgdG8gUFhFTGludXguCisuVFAKKy5CIC0tZGhjcC1uby1vdmVycmlkZQorRGlzYWJsZSByZS11c2Ugb2YgdGhlIERIQ1Agc2VydmVybmFtZSBhbmQgZmlsZW5hbWUgZmllbGRzIGFzIGV4dHJhCitvcHRpb24gc3BhY2UuIElmIGl0IGNhbiwgZG5zbWFzcSBtb3ZlcyB0aGUgYm9vdCBzZXJ2ZXIgYW5kIGZpbGVuYW1lCitpbmZvcm1hdGlvbiAoZnJvbSBkaGNwLWJvb3QpIG91dCBvZiB0aGVpciBkZWRpY2F0ZWQgZmllbGRzIGludG8KK0RIQ1Agb3B0aW9ucy4gVGhpcyBtYWtlIGV4dHJhIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgREhDUCBwYWNrZXQgZm9yCitvcHRpb25zIGJ1dCBjYW4sIHJhcmVseSwgY29uZnVzZSBvbGQgb3IgYnJva2VuIGNsaWVudHMuIFRoaXMgZmxhZworZm9yY2VzICJzaW1wbGUgYW5kIHNhZmUiIGJlaGF2aW91ciB0byBhdm9pZCBwcm9ibGVtcyBpbiBzdWNoIGEgY2FzZS4KKy5UUAorLkIgXC1VLCAtLWRoY3AtdmVuZG9yY2xhc3M9PG5ldHdvcmstaWQ+LDx2ZW5kb3ItY2xhc3M+CitNYXAgZnJvbSBhIHZlbmRvci1jbGFzcyBzdHJpbmcgdG8gYSBuZXR3b3JrIGlkIHRhZy4gTW9zdCBESENQIGNsaWVudHMgcHJvdmlkZSBhIAorInZlbmRvciBjbGFzcyIgd2hpY2ggcmVwcmVzZW50cywgaW4gc29tZSBzZW5zZSwgdGhlIHR5cGUgb2YgaG9zdC4gVGhpcyBvcHRpb24gCittYXBzIHZlbmRvciBjbGFzc2VzIHRvIHRhZ3MsIHNvIHRoYXQgREhDUCBvcHRpb25zIG1heSBiZSBzZWxlY3RpdmVseSBkZWxpdmVyZWQKK3RvIGRpZmZlcmVudCBjbGFzc2VzIG9mIGhvc3RzLiBGb3IgZXhhbXBsZSAKKy5CIGRoY3AtdmVuZG9yY2xhc3M9cHJpbnRlcnMsSGV3bGV0dC1QYWNrYXJkIEpldERpcmVjdAord2lsbCBhbGxvdyBvcHRpb25zIHRvIGJlIHNldCBvbmx5IGZvciBIUCBwcmludGVycyBsaWtlIHNvOgorLkIgLS1kaGNwLW9wdGlvbj1wcmludGVycywzLDE5Mi4xNjguNC40IAorVGhlIHZlbmRvci1jbGFzcyBzdHJpbmcgaXMKK3N1YnN0cmluZyBtYXRjaGVkIGFnYWluc3QgdGhlIHZlbmRvci1jbGFzcyBzdXBwbGllZCBieSB0aGUgY2xpZW50LCB0bworYWxsb3cgZnV6enkgbWF0Y2hpbmcuCisuVFAKKy5CIFwtaiwgLS1kaGNwLXVzZXJjbGFzcz08bmV0d29yay1pZD4sPHVzZXItY2xhc3M+CitNYXAgZnJvbSBhIHVzZXItY2xhc3Mgc3RyaW5nIHRvIGEgbmV0d29yayBpZCB0YWcgKHdpdGggc3Vic3RyaW5nCittYXRjaGluZywgbGlrZSB2ZW5kb3IgY2xhc3NlcykuIE1vc3QgREhDUCBjbGllbnRzIHByb3ZpZGUgYSAKKyJ1c2VyIGNsYXNzIiB3aGljaCBpcyBjb25maWd1cmFibGUuIFRoaXMgb3B0aW9uCittYXBzIHVzZXIgY2xhc3NlcyB0byB0YWdzLCBzbyB0aGF0IERIQ1Agb3B0aW9ucyBtYXkgYmUgc2VsZWN0aXZlbHkgZGVsaXZlcmVkCit0byBkaWZmZXJlbnQgY2xhc3NlcyBvZiBob3N0cy4gSXQgaXMgcG9zc2libGUsIGZvciBpbnN0YW5jZSB0byB1c2UKK3RoaXMgdG8gc2V0IGEgZGlmZmVyZW50IHByaW50ZXIgc2VydmVyIGZvciBob3N0cyBpbiB0aGUgY2xhc3MKKyJhY2NvdW50cyIgdGhhbiBmb3IgaG9zdHMgaW4gdGhlIGNsYXNzICJlbmdpbmVlcmluZyIuCisuVFAKKy5CIFwtNCwgLS1kaGNwLW1hYz08bmV0d29yay1pZD4sPE1BQyBhZGRyZXNzPgorTWFwIGZyb20gYSBNQUMgYWRkcmVzcyB0byBhIG5ldHdvcmstaWQgdGFnLiBUaGUgTUFDIGFkZHJlc3MgbWF5IGluY2x1ZGUKK3dpbGRjYXJkcy4gRm9yIGV4YW1wbGUKKy5CIC0tZGhjcC1tYWM9M2NvbSwwMTozNDoyMzoqOio6Kgord2lsbCBzZXQgdGhlIHRhZyAiM2NvbSIgZm9yIGFueSBob3N0IHdob3NlIE1BQyBhZGRyZXNzIG1hdGNoZXMgdGhlIHBhdHRlcm4uCisuVFAKKy5CIC0tZGhjcC1jaXJjdWl0aWQ9PG5ldHdvcmstaWQ+LDxjaXJjdWl0LWlkPiwgLS1kaGNwLXJlbW90ZWlkPTxuZXR3b3JrLWlkPiw8cmVtb3RlLWlkPgorTWFwIGZyb20gUkZDMzA0NiByZWxheSBhZ2VudCBvcHRpb25zIHRvIG5ldHdvcmstaWQgdGFncy4gVGhpcyBkYXRhIG1heQorYmUgcHJvdmlkZWQgYnkgREhDUCByZWxheSBhZ2VudHMuIFRoZSBjaXJjdWl0LWlkIG9yIHJlbW90ZS1pZCBpcworbm9ybWFsbHkgZ2l2ZW4gYXMgY29sb24tc2VwYXJhdGVkIGhleCwgYnV0IGlzIGFsc28gYWxsb3dlZCB0byBiZSBhCitzaW1wbGUgc3RyaW5nLiBJZiBhbiBleGFjdCBtYXRjaCBpcyBhY2hpZXZlZCBiZXR3ZWVuIHRoZSBjaXJjdWl0IG9yCithZ2VudCBJRCBhbmQgb25lIHByb3ZpZGVkIGJ5IGEgcmVsYXkgYWdlbnQsIHRoZSBuZXR3b3JrLWlkIHRhZyBpcyBzZXQuCisuVFAKKy5CIC0tZGhjcC1zdWJzY3JpZD08bmV0d29yay1pZD4sPHN1YnNjcmliZXItaWQ+CitNYXAgZnJvbSBSRkMzOTkzIHN1YnNjcmliZXItaWQgcmVsYXkgYWdlbnQgb3B0aW9ucyB0byBuZXR3b3JrLWlkIHRhZ3MuCisuVFAKKy5CIC0tZGhjcC1tYXRjaD08bmV0d29yay1pZD4sPG9wdGlvbiBudW1iZXI+fG9wdGlvbjo8b3B0aW9uIG5hbWU+Wyw8dmFsdWU+XQorV2l0aG91dCBhIHZhbHVlLCBzZXQgdGhlIG5ldHdvcmstaWQgdGFnIGlmIHRoZSBjbGllbnQgc2VuZHMgYSBESENQCitvcHRpb24gb2YgdGhlIGdpdmVuIG51bWJlciBvciBuYW1lLiBXaGVuIGEgdmFsdWUgaXMgZ2l2ZW4sIHNldCB0aGUgdGFnIG9ubHkgaWYKK3RoZSBvcHRpb24gaXMgc2VudCBhbmQgbWF0Y2hlcyB0aGUgdmFsdWUuIFRoZSB2YWx1ZSBtYXkgYmUgb2YgdGhlIGZvcm0KKyIwMTpmZjoqOjAyIiBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBtdXN0IG1hdGNoIChhcGFydCBmcm9tIHdpZGNhcmRzKQorYnV0IHRoZSBvcHRpb24gc2VudCBtYXkgaGF2ZSB1bm1hdGNoZWQgZGF0YSBwYXN0IHRoZSBlbmQgb2YgdGhlCit2YWx1ZS4gVGhlIHZhbHVlIG1heSBhbHNvIGJlIG9mIHRoZSBzYW1lIGZvcm0gYXMgaW4gCisuQiBkaGNwLW9wdGlvbgoraW4gd2hpY2ggY2FzZSB0aGUgb3B0aW9uIHNlbnQgaXMgdHJlYXRlZCBhcyBhbiBhcnJheSwgYW5kIG9uZSBlbGVtZW50CittdXN0IG1hdGNoLCBzbworCistLWRoY3AtbWF0Y2g9ZWZpLWlhMzIsb3B0aW9uOmNsaWVudC1hcmNoLDYKKword2lsbCBzZXQgdGhlIHRhZyAiZWZpLWlhMzIiIGlmIHRoZSB0aGUgbnVtYmVyIDYgYXBwZWFycyBpbiB0aGUgbGlzdCBvZgorYXJjaGl0ZWN0dXJlcyBzZW50IGJ5IHRoZSBjbGllbnQgaW4gb3B0aW9uIDkzLiAoU2VlIFJGQyA0NTc4IGZvcgorZGV0YWlscy4pICBJZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcsIHN1YnN0cmluZyBtYXRjaGluZyBpcyB1c2VkLiAKKy5UUAorLkIgXC1KLCAtLWRoY3AtaWdub3JlPTxuZXR3b3JrLWlkPlssPG5ldHdvcmstaWQ+XQorV2hlbiBhbGwgdGhlIGdpdmVuIG5ldHdvcmstaWRzIG1hdGNoIHRoZSBzZXQgb2YgbmV0d29yay1pZHMgZGVyaXZlZAorZnJvbSB0aGUgbmV0LCBob3N0LCB2ZW5kb3IgYW5kIHVzZXIgY2xhc3NlcywgaWdub3JlIHRoZSBob3N0IGFuZCBkbworbm90IGFsbG9jYXRlIGl0IGEgREhDUCBsZWFzZS4KKy5UUAorLkIgLS1kaGNwLWlnbm9yZS1uYW1lc1s9PG5ldHdvcmstaWQ+Wyw8bmV0d29yay1pZD5dXQorV2hlbiBhbGwgdGhlIGdpdmVuIG5ldHdvcmstaWRzIG1hdGNoIHRoZSBzZXQgb2YgbmV0d29yay1pZHMgZGVyaXZlZAorZnJvbSB0aGUgbmV0LCBob3N0LCB2ZW5kb3IgYW5kIHVzZXIgY2xhc3NlcywgaWdub3JlIGFueSBob3N0bmFtZQorcHJvdmlkZWQgYnkgdGhlIGhvc3QuIE5vdGUgdGhhdCwgdW5saWtlIGRoY3AtaWdub3JlLCBpdCBpcyBwZXJtaXNzaWJsZQordG8gc3VwcGx5IG5vIG5ldGlkIHRhZ3MsIGluIHdoaWNoIGNhc2UgREhDUC1jbGllbnQgc3VwcGxpZWQgaG9zdG5hbWVzCithcmUgYWx3YXlzIGlnbm9yZWQsIGFuZCBESENQIGhvc3RzIGFyZSBhZGRlZCB0byB0aGUgRE5TIHVzaW5nIG9ubHkKK2RoY3AtaG9zdCBjb25maWd1cmF0aW9uIGluIGRuc21hc3EgYW5kIHRoZSBjb250ZW50cyBvZiAvZXRjL2hvc3RzIGFuZAorL2V0Yy9ldGhlcnMuCisuVFAKKy5CIC0tZGhjcC1icm9hZGNhc3Q9PG5ldHdvcmstaWQ+Wyw8bmV0d29yay1pZD5dCitXaGVuIGFsbCB0aGUgZ2l2ZW4gbmV0d29yay1pZHMgbWF0Y2ggdGhlIHNldCBvZiBuZXR3b3JrLWlkcyBkZXJpdmVkCitmcm9tIHRoZSBuZXQsIGhvc3QsIHZlbmRvciBhbmQgdXNlciBjbGFzc2VzLCBhbHdheXMgdXNlIGJyb2FkY2FzdCB0bworY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdCB3aGVuIGl0IGlzIHVuY29uZmlndXJlZC4gTW9zdCBESENQIGNsaWVudHMgd2hpY2gKK25lZWQgYnJvYWRjYXN0IHJlcGxpZXMgc2V0IGEgZmxhZyBpbiB0aGVpciByZXF1ZXN0cyBzbyB0aGF0IHRoaXMKK2hhcHBlbnMgYXV0b21hdGljYWxseSwgc29tZSBvbGQgQk9PVFAgY2xpZW50cyBkbyBub3QuCisuVFAKKy5CIFwtTSwgLS1kaGNwLWJvb3Q9W25ldDo8bmV0d29yay1pZD4sXTxmaWxlbmFtZT4sWzxzZXJ2ZXJuYW1lPlssPHNlcnZlciBhZGRyZXNzPl1dCitTZXQgQk9PVFAgb3B0aW9ucyB0byBiZSByZXR1cm5lZCBieSB0aGUgREhDUCBzZXJ2ZXIuIFNlcnZlciBuYW1lIGFuZAorYWRkcmVzcyBhcmUgb3B0aW9uYWw6IGlmIG5vdCBwcm92aWRlZCwgdGhlIG5hbWUgaXMgbGVmdCBlbXB0eSwgYW5kIHRoZQorYWRkcmVzcyBzZXQgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIG1hY2hpbmUgcnVubmluZyBkbnNtYXNxLiBJZiBkbnNtYXNxCitpcyBwcm92aWRpbmcgYSBURlRQIHNlcnZpY2UgKHNlZSAKKy5CIC0tZW5hYmxlLXRmdHAKKykgdGhlbiBvbmx5IHRoZSBmaWxlbmFtZSBpcyByZXF1aXJlZCBoZXJlIHRvIGVuYWJsZSBuZXR3b3JrIGJvb3RpbmcuCitJZiB0aGUgb3B0aW9uYWwgbmV0d29yay1pZChzKSBhcmUgZ2l2ZW4sCit0aGV5IG11c3QgbWF0Y2ggZm9yIHRoaXMgY29uZmlndXJhdGlvbiB0byBiZSBzZW50LiBOb3RlIHRoYXQKK25ldHdvcmstaWRzIGFyZSBwcmVmaXhlZCBieSAibmV0OiIgdG8gZGlzdGluZ3Vpc2ggdGhlbS4KKy5UUAorLkIgLS1weGUtc2VydmljZT1bbmV0OjxuZXR3b3JrLWlkPixdPENTQT4sPG1lbnUgdGV4dD4sPGJhc2VuYW1lPnw8Ym9vdHNlcnZpY2V0eXBlPlssPHNlcnZlciBhZGRyZXNzPl0KK01vc3QgdXNlcyBvZiBQWEUgYm9vdC1ST01TIHNpbXBseSBhbGxvdyB0aGUgUFhFCitzeXN0ZW0gdG8gb2J0YWluIGFuIElQIGFkZHJlc3MgYW5kIHRoZW4gZG93bmxvYWQgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5CisuQiBkaGNwLWJvb3QKK2FuZCBleGVjdXRlIGl0LiBIb3dldmVyIHRoZSBQWEUgc3lzdGVtIGlzIGNhcGFibGUgb2YgbW9yZSBjb21wbGV4CitmdW5jdGlvbnMgd2hlbiBzdXBwb3J0ZWQgYnkgYSBzdWl0YWJsZSBESENQIHNlcnZlci4KKworVGhpcyBzcGVjaWZpZXMgYSBib290IG9wdGlvbiB3aGljaCBtYXkgYXBwZWFyIGluIGEgUFhFIGJvb3QgbWVudS4gPENTQT4gaXMKK2NsaWVudCBzeXN0ZW0gdHlwZSwgb25seSBzZXJ2aWNlcyBvZiB0aGUgY29ycmVjdCB0eXBlIHdpbGwgYXBwZWFyIGluIGEKK21lbnUuIFRoZSBrbm93biB0eXBlcyBhcmUgeDg2UEMsIFBDOTgsIElBNjRfRUZJLCBBbHBoYSwgQXJjX3g4NiwKK0ludGVsX0xlYW5fQ2xpZW50LCBJQTMyX0VGSSwgQkNfRUZJLCBYc2NhbGVfRUZJIGFuZCBYODYtNjRfRUZJOyBhbgoraW50ZWdlciBtYXkgYmUgdXNlZCBmb3Igb3RoZXIgdHlwZXMuIFRoZQorcGFyYW1ldGVyIGFmdGVyIHRoZSBtZW51IHRleHQgbWF5IGJlIGEgZmlsZSBuYW1lLCBpbiB3aGljaCBjYXNlIGRuc21hc3EgYWN0cyBhcyBhCitib290IHNlcnZlciBhbmQgZGlyZWN0cyB0aGUgUFhFIGNsaWVudCB0byBkb3dubG9hZCB0aGUgZmlsZSBieSBURlRQLAorZWl0aGVyIGZyb20gaXRzZWxmICgKKy5CIGVuYWJsZS10ZnRwIAorbXVzdCBiZSBzZXQgZm9yIHRoaXMgdG8gd29yaykgb3IgYW5vdGhlciBURlRQIHNlcnZlciBpZiB0aGUgZmluYWwgSVAKK2FkZHJlc3MgaXMgZ2l2ZW4uCitOb3RlIHRoYXQgdGhlICJsYXllciIKK3N1ZmZpeCAobm9ybWFsbHkgIi4wIikgaXMgc3VwcGxpZWQgYnkgUFhFLCBhbmQgc2hvdWxkIG5vdCBiZSBhZGRlZCB0bwordGhlIGJhc2VuYW1lLiBJZiBhbiBpbnRlZ2VyIGJvb3Qgc2VydmljZSB0eXBlLCByYXRoZXIgdGhhbiBhIGJhc2VuYW1lCitpcyBnaXZlbiwgdGhlbiB0aGUgUFhFIGNsaWVudCB3aWxsIHNlYXJjaCBmb3IgYQorc3VpdGFibGUgYm9vdCBzZXJ2aWNlIGZvciB0aGF0IHR5cGUgb24gdGhlIG5ldHdvcmsuIFRoaXMgc2VhcmNoIG1heSBiZSBkb25lCitieSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0LCBvciBkaXJlY3QgdG8gYSBzZXJ2ZXIgaWYgaXRzIElQIGFkZHJlc3MgaXMgcHJvdmlkZWQuICBBIGJvb3Qgc2VydmljZQordHlwZSBvZiAwIGlzIHNwZWNpYWwsIGFuZCB3aWxsIGFib3J0IHRoZSBuZXQgYm9vdCBwcm9jZWR1cmUgYW5kCitjb250aW51ZSBib290aW5nIGZyb20gbG9jYWwgbWVkaWEuCisuVFAKKy5CIC0tcHhlLXByb21wdD1bbmV0OjxuZXR3b3JrLWlkPixdPHByb21wdD5bLDx0aW1lb3V0Pl0KK1NldHRpbmcgdGhpcyBwcm92aWRlcyBhIHByb21wdCB0byBiZSBkaXNwbGF5ZWQgYWZ0ZXIgUFhFIGJvb3QuIElmIHRoZQordGltZW91dCBpcyBnaXZlbiB0aGVuIGFmdGVyIHRoZQordGltZW91dCBoYXMgZWxhcHNlZCB3aXRoIG5vIGtleWJvYXJkIGlucHV0LCB0aGUgZmlyc3QgYXZhaWxhYmxlIG1lbnUKK29wdGlvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWQuIElmIHRoZSB0aW1lb3V0IGlzIHplcm8gdGhlbiB0aGUgZmlyc3QgYXZhaWxhYmxlIG1lbnUKK2l0ZW0gd2lsbCBiZSBleGVjdXRlZCBpbW1lZGlhdGVseS4gSWYgCisuQiBweGUtcHJvbXB0CitpcyBvbW1pdHRlZCB0aGUgc3lzdGVtIHdpbGwgd2FpdCBmb3IgdXNlciBpbnB1dCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUKK2l0ZW1zIGluIHRoZSBtZW51LCBidXQgYm9vdCBpbW1lZGlhdGVseSBpZgordGhlcmUgaXMgb25seSBvbmUuIFNlZQorLkIgcHhlLXNlcnZpY2UgCitmb3IgZGV0YWlscyBvZiBtZW51IGl0ZW1zLgorCitEbnNtYXNxIHN1cHBvcnRzIFBYRSAicHJveHktREhDUCIsIGluIHRoaXMgY2FzZSBhbm90aGVyIERIQ1Agc2VydmVyIG9uCit0aGUgbmV0d29yayBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBJUCBhZGRyZXNzZXMsIGFuZCBkbnNtYXNxCitzaW1wbHkgcHJvdmlkZXMgdGhlIGluZm9ybWF0aW9uIGdpdmVuIGluIAorLkIgcHhlLXByb21wdAorYW5kCisuQiBweGUtc2VydmljZQordG8gYWxsb3cgbmV0Ym9vdGluZy4gVGhpcyBtb2RlIGlzIGVuYWJsZWQgdXNpbmcgdGhlCisuQiBwcm94eQora2V5d29yZCBpbgorLkIgZGhjcC1yYW5nZS4KKy5UUCAgCisuQiBcLVgsIC0tZGhjcC1sZWFzZS1tYXg9PG51bWJlcj4KK0xpbWl0cyBkbnNtYXNxIHRvIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMuIFRoZQorZGVmYXVsdCBpcyAxNTAuIFRoaXMgbGltaXQgaXMgdG8gcHJldmVudCBEb1MgYXR0YWNrcyBmcm9tIGhvc3RzIHdoaWNoCitjcmVhdGUgdGhvdXNhbmRzIG9mIGxlYXNlcyBhbmQgdXNlIGxvdHMgb2YgbWVtb3J5IGluIHRoZSBkbnNtYXNxCitwcm9jZXNzLgorLlRQCisuQiBcLUssIC0tZGhjcC1hdXRob3JpdGF0aXZlCitTaG91bGQgYmUgc2V0IHdoZW4gZG5zbWFzcSBpcyBkZWZpbml0ZWx5IHRoZSBvbmx5IERIQ1Agc2VydmVyIG9uIGEgbmV0d29yay4KK0l0IGNoYW5nZXMgdGhlIGJlaGF2aW91ciBmcm9tIHN0cmljdCBSRkMgY29tcGxpYW5jZSBzbyB0aGF0IERIQ1AgcmVxdWVzdHMgb24KK3Vua25vd24gbGVhc2VzIGZyb20gdW5rbm93biBob3N0cyBhcmUgbm90IGlnbm9yZWQuIFRoaXMgYWxsb3dzIG5ldyBob3N0cwordG8gZ2V0IGEgbGVhc2Ugd2l0aG91dCBhIHRlZGlvdXMgdGltZW91dCB1bmRlciBhbGwgY2lyY3Vtc3RhbmNlcy4gSXQgYWxzbyAKK2FsbG93cyBkbnNtYXNxIHRvIHJlYnVpbGQgaXRzIGxlYXNlIGRhdGFiYXNlIHdpdGhvdXQgZWFjaCBjbGllbnQgbmVlZGluZyB0byAKK3JlYWNxdWlyZSBhIGxlYXNlLCBpZiB0aGUgZGF0YWJhc2UgaXMgbG9zdC4KKy5UUAorLkIgLS1kaGNwLWFsdGVybmF0ZS1wb3J0Wz08c2VydmVyIHBvcnQ+Wyw8Y2xpZW50IHBvcnQ+XV0KK0NoYW5nZSB0aGUgcG9ydHMgdXNlZCBmb3IgREhDUCBmcm9tIHRoZSBkZWZhdWx0LiBJZiB0aGlzIG9wdGlvbiBpcworZ2l2ZW4gYWxvbmUsIHdpdGhvdXQgYXJndW1lbnRzLCBpdCBjaGFuZ2VzIHRoZSBwb3J0cyB1c2VkIGZvciBESENQCitmcm9tIDY3IGFuZCA2OCB0byAxMDY3IGFuZCAxMDY4LiBJZiBhIHNpbmdsZSBhcmd1bWVudCBpcyBnaXZlbiwgdGhhdAorcG9ydCBudW1iZXIgaXMgdXNlZCBmb3IgdGhlIHNlcnZlciBhbmQgdGhlIHBvcnQgbnVtYmVyIHBsdXMgb25lIHVzZWQKK2ZvciB0aGUgY2xpZW50LiBGaW5hbGx5LCB0d28gcG9ydCBudW1iZXJzIGFsbG93cyBhcmJpdHJhcnkKK3NwZWNpZmljYXRpb24gb2YgYm90aCBzZXJ2ZXIgYW5kIGNsaWVudCBwb3J0cyBmb3IgREhDUC4KKy5UUAorLkIgXC0zLCAtLWJvb3RwLWR5bmFtaWNbPTxuZXR3b3JrLWlkPlssPG5ldHdvcmstaWQ+XV0KK0VuYWJsZSBkeW5hbWljIGFsbG9jYXRpb24gb2YgSVAgYWRkcmVzc2VzIHRvIEJPT1RQIGNsaWVudHMuIFVzZSB0aGlzCit3aXRoIGNhcmUsIHNpbmNlIGVhY2ggYWRkcmVzcyBhbGxvY2F0ZWQgdG8gYSBCT09UUCBjbGllbnQgaXMgbGVhc2VkCitmb3JldmVyLCBhbmQgdGhlcmVmb3JlIGJlY29tZXMgcGVybWFuZW50bHkgdW5hdmFpbGFibGUgZm9yIHJlLXVzZSBieQorb3RoZXIgaG9zdHMuIGlmIHRoaXMgaXMgZ2l2ZW4gd2l0aG91dCB0YWdzLCB0aGVuIGl0IHVuY29uZGl0aW9uYWxseQorZW5hYmxlcyBkeW5hbWljIGFsbG9jYXRpb24uIFdpdGggdGFncywgb25seSB3aGVuIHRoZSB0YWdzIGFyZSBhbGwKK3NldC4gSXQgbWF5IGJlIHJlcGVhdGVkIHdpdGggZGlmZmVyZW50IHRhZyBzZXRzLiAKKy5UUAorLkIgXC01LCAtLW5vLXBpbmcKK0J5IGRlZmF1bHQsIHRoZSBESENQIHNlcnZlciB3aWxsIGF0dGVtcHQgdG8gZW5zdXJlIHRoYXQgYW4gYWRkcmVzcyBpbgorbm90IGluIHVzZSBiZWZvcmUgYWxsb2NhdGluZyBpdCB0byBhIGhvc3QuIEl0IGRvZXMgdGhpcyBieSBzZW5kaW5nIGFuCitJQ01QIGVjaG8gcmVxdWVzdCAoYWthICJwaW5nIikgdG8gdGhlIGFkZHJlc3MgaW4gcXVlc3Rpb24uIElmIGl0IGdldHMKK2EgcmVwbHksIHRoZW4gdGhlIGFkZHJlc3MgbXVzdCBhbHJlYWR5IGJlIGluIHVzZSwgYW5kIGFub3RoZXIgaXMKK3RyaWVkLiBUaGlzIGZsYWcgZGlzYWJsZXMgdGhpcyBjaGVjay4gVXNlIHdpdGggY2F1dGlvbi4KKy5UUAorLkIgLS1sb2ctZGhjcAorRXh0cmEgbG9nZ2luZyBmb3IgREhDUDogbG9nIGFsbCB0aGUgb3B0aW9ucyBzZW50IHRvIERIQ1AgY2xpZW50cyBhbmQKK3RoZSBuZXRpZCB0YWdzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZW0uCisuVFAKKy5CIFwtbCwgLS1kaGNwLWxlYXNlZmlsZT08cGF0aD4KK1VzZSB0aGUgc3BlY2lmaWVkIGZpbGUgdG8gc3RvcmUgREhDUCBsZWFzZSBpbmZvcm1hdGlvbi4KKy5UUCAKKy5CIFwtNiAtLWRoY3Atc2NyaXB0PTxwYXRoPgorV2hlbmV2ZXIgYSBuZXcgREhDUCBsZWFzZSBpcyBjcmVhdGVkLCBvciBhbiBvbGQgb25lIGRlc3Ryb3llZCwgdGhlCitleGVjdXRhYmxlIHNwZWNpZmllZCBieSB0aGlzIG9wdGlvbiBpcyBydW4uIFRoZSBhcmd1bWVudHMgdG8gdGhlIHByb2Nlc3MKK2FyZSAiYWRkIiwgIm9sZCIgb3IgImRlbCIsIHRoZSBNQUMKK2FkZHJlc3Mgb2YgdGhlIGhvc3QsIHRoZSBJUCBhZGRyZXNzLCBhbmQgdGhlIGhvc3RuYW1lLAoraWYga25vd24uICJhZGQiIG1lYW5zIGEgbGVhc2UgaGFzIGJlZW4gY3JlYXRlZCwgImRlbCIgbWVhbnMgaXQgaGFzCitiZWVuIGRlc3Ryb3llZCwgIm9sZCIgaXMgYSBub3RpZmljYXRpb24gb2YgYW4gZXhpc3RpbmcgbGVhc2Ugd2hlbgorZG5zbWFzcSBzdGFydHMgb3IgYSBjaGFuZ2UgdG8gTUFDIGFkZHJlc3Mgb3IgaG9zdG5hbWUgb2YgYW4gZXhpc3RpbmcKK2xlYXNlIChhbHNvLCBsZWFzZSBsZW5ndGggb3IgZXhwaXJ5IGFuZCBjbGllbnQtaWQsIGlmIGxlYXNlZmlsZS1ybyBpcyBzZXQpLgorSWYgdGhlIE1BQyBhZGRyZXNzIGlzIGZyb20gYSBuZXR3b3JrIHR5cGUgb3RoZXIgdGhhbiBldGhlcm5ldCwKK2l0IHdpbGwgaGF2ZSB0aGUgbmV0d29yayB0eXBlIHByZXBlbmRlZCwgZWcgIjA2LTAxOjIzOjQ1OjY3Ojg5OmFiIiBmb3IKK3Rva2VuIHJpbmcuIFRoZSBwcm9jZXNzIGlzIHJ1biBhcyByb290IChhc3N1bWluZyB0aGF0IGRuc21hc3Egd2FzIG9yaWdpbmFsbHkgcnVuIGFzCityb290KSBldmVuIGlmIGRuc21hc3EgaXMgY29uZmlndXJlZCB0byBjaGFuZ2UgVUlEIHRvIGFuIHVucHJpdmlsZWdlZCB1c2VyLgorVGhlIGVudmlyb25tZW50IGlzIGluaGVyaXRlZCBmcm9tIHRoZSBpbnZva2VyIG9mIGRuc21hc3EsIGFuZCBpZiB0aGUKK2hvc3QgcHJvdmlkZWQgYSBjbGllbnQtaWQsIHRoaXMgaXMgc3RvcmVkIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorRE5TTUFTUV9DTElFTlRfSUQuIElmIHRoZSBmdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgb2YgdGhlIGhvc3QgaXMKK2tub3duLCB0aGUgZG9tYWluIHBhcnQgaXMgc3RvcmVkIGluIEROU01BU1FfRE9NQUlOLiAKK0lmIHRoZSBjbGllbnQgcHJvdmlkZXMgdmVuZG9yLWNsYXNzLCBob3N0bmFtZSBvciB1c2VyLWNsYXNzLAorIHRoZXNlIGFyZSBwcm92aWRlZCBpbiBETlNNQVNRX1ZFTkRPUl9DTEFTUworRE5TTUFTUV9TVVBQTElFRF9IT1NUTkFNRSBhbmQgCitETlNNQVNRX1VTRVJfQ0xBU1MwLi5ETlNNQVNRX1VTRVJfQ0xBU1NuIHZhcmlhYmxlcywgYnV0IG9ubHkgZm9yCisiYWRkIiBhY3Rpb25zIG9yICJvbGQiIGFjdGlvbnMgd2hlbiBhIGhvc3QgcmVzdW1lcyBhbiBleGlzdGluZyBsZWFzZSwKK3NpbmNlIHRoZXNlIGRhdGEgYXJlIG5vdCBoZWxkIGluIGRuc21hc3EncyBsZWFzZQorZGF0YWJhc2UuIElmIGRuc21hc3Egd2FzIGNvbXBpbGVkIHdpdGggSEFWRV9CUk9LRU5fUlRDLCB0aGVuCit0aGUgbGVuZ3RoIG9mIHRoZSBsZWFzZSAoaW4gc2Vjb25kcykgaXMgc3RvcmVkIGluCitETlNNQVNRX0xFQVNFX0xFTkdUSCwgb3RoZXJ3aXNlIHRoZSB0aW1lIG9mIGxlYXNlIGV4cGlyeSBpcyBzdG9yZWQgaW4KK0ROU01BU1FfTEVBU0VfRVhQSVJFUy4gVGhlIG51bWJlciBvZiBzZWNvbmRzIHVudGlsIGxlYXNlIGV4cGlyeSBpcworYWx3YXlzIHN0b3JlZCBpbiBETlNNQVNRX1RJTUVfUkVNQUlOSU5HLiAKK0lmIGEgbGVhc2UgdXNlZCB0byBoYXZlIGEgaG9zdG5hbWUsIHdoaWNoIGlzCityZW1vdmVkLCBhbiAib2xkIiBldmVudCBpcyBnZW5lcmF0ZWQgd2l0aCB0aGUgbmV3IHN0YXRlIG9mIHRoZSBsZWFzZSwgCitpZSBubyBuYW1lLCBhbmQgdGhlIGZvcm1lciBuYW1lIGlzIHByb3ZpZGVkIGluIHRoZSBlbnZpcm9ubWVudCAKK3ZhcmlhYmxlIEROU01BU1FfT0xEX0hPU1ROQU1FLiBETlNNQVNRX0lOVEVSRkFDRSBzdG9yZXMgdGhlIG5hbWUgb2YKK3RoZSBpbnRlcmZhY2Ugb24gd2hpY2ggdGhlIHJlcXVlc3QgYXJyaXZlZDsgdGhpcyBpcyBub3Qgc2V0IGZvciAib2xkIgorYWN0aW9ucyB3aGVuIGRuc21hc3EgcmVzdGFydHMuIEROU01BU1FfUkVMQVlfQUREUkVTUyBpcyBzZXQgaWYgdGhlIGNsaWVudAordXNlZCBhIERIQ1AgcmVsYXkgdG8gY29udGFjdCBkbnNtYXNxIGFuZCB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgcmVsYXkgaXMga25vd24uCitBbGwgZmlsZSBkZXNjcmlwdG9ycyBhcmUKK2Nsb3NlZCBleGNlcHQgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIHdoaWNoIGFyZSBvcGVuIHRvIC9kZXYvbnVsbAorKGV4Y2VwdCBpbiBkZWJ1ZyBtb2RlKS4KK1RoZSBzY3JpcHQgaXMgbm90IGludm9rZWQgY29uY3VycmVudGx5OiBpZiBzdWJzZXF1ZW50IGxlYXNlIAorY2hhbmdlcyBvY2N1ciwgdGhlIHNjcmlwdCBpcyBub3QgaW52b2tlZCBhZ2FpbiB1bnRpbCBhbnkgZXhpc3RpbmcgCitpbnZvY2F0aW9uIGV4aXRzLiBBdCBkbnNtYXNxIHN0YXJ0dXAsIHRoZSBzY3JpcHQgd2lsbCBiZSBpbnZva2VkIGZvcgorYWxsIGV4aXN0aW5nIGxlYXNlcyBhcyB0aGV5IGFyZSByZWFkIGZyb20gdGhlIGxlYXNlIGZpbGUuIEV4cGlyZWQKK2xlYXNlcyB3aWxsIGJlIGNhbGxlZCB3aXRoICJkZWwiIGFuZCBvdGhlcnMgd2l0aCAib2xkIi4gPHBhdGg+CittdXN0IGJlIGFuIGFic29sdXRlIHBhdGhuYW1lLCBubyBQQVRIIHNlYXJjaCBvY2N1cnMuIFdoZW4gZG5zbWFzcQorcmVjZWl2ZXMgYSBIVVAgc2lnbmFsLCB0aGUgc2NyaXB0IHdpbGwgYmUgaW52b2tlZCBmb3IgZXhpc3RpbmcgbGVhc2VzCit3aXRoIGFuICJvbGQgIiBldmVudC4KKy5UUAorLkIgLS1kaGNwLXNjcmlwdHVzZXIKK1NwZWNpZnkgdGhlIHVzZXIgYXMgd2hpY2ggdG8gcnVuIHRoZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0LiBUaGlzIGRlZmF1bHRzIHRvIHJvb3QsIGJ1dCBjYW4gYmUgY2hhbmdlZCB0byBhbm90aGVyIHVzZXIgdXNpbmcgdGhpcyBmbGFnLiAKKy5UUCAKKy5CIFwtOSwgLS1sZWFzZWZpbGUtcm8KK0NvbXBsZXRlbHkgc3VwcHJlc3MgdXNlIG9mIHRoZSBsZWFzZSBkYXRhYmFzZSBmaWxlLiBUaGUgZmlsZSB3aWxsIG5vdAorYmUgY3JlYXRlZCwgcmVhZCwgb3Igd3JpdHRlbi4gQ2hhbmdlIHRoZSB3YXkgdGhlIGxlYXNlLWNoYW5nZQorc2NyaXB0IChpZiBvbmUgaXMgcHJvdmlkZWQpIGlzIGNhbGxlZCwgc28gdGhhdCB0aGUgbGVhc2UgZGF0YWJhc2UgbWF5CitiZSBtYWludGFpbmVkIGluIGV4dGVybmFsIHN0b3JhZ2UgYnkgdGhlIHNjcmlwdC4gSW4gYWRkaXRpb24gdG8gdGhlCitpbnZvY2F0aW9ucyAgZ2l2ZW4gaW4gCisuQiAgLS1kaGNwLXNjcmlwdAordGhlIGxlYXNlLWNoYW5nZSBzY3JpcHQgaXMgY2FsbGVkIG9uY2UsIGF0IGRuc21hc3Egc3RhcnR1cCwgd2l0aCB0aGUKK3NpbmdsZSBhcmd1bWVudCAiaW5pdCIuIFdoZW4gY2FsbGVkIGxpa2UgdGhpcyB0aGUgc2NyaXB0IHNob3VsZCB3cml0ZQordGhlIHNhdmVkIHN0YXRlIG9mIHRoZSBsZWFzZSBkYXRhYmFzZSwgaW4gZG5zbWFzcSBsZWFzZWZpbGUgZm9ybWF0LCB0bworc3Rkb3V0IGFuZCBleGl0IHdpdGggemVybyBleGl0IGNvZGUuIFNldHRpbmcgdGhpcworb3B0aW9uIGFsc28gZm9yY2VzIHRoZSBsZWFzZWNoYW5nZSBzY3JpcHQgdG8gYmUgY2FsbGVkIG9uIGNoYW5nZXMKK3RvIHRoZSBjbGllbnQtaWQgYW5kIGxlYXNlIGxlbmd0aCBhbmQgZXhwaXJ5IHRpbWUuCisuVFAKKy5CIC0tYnJpZGdlLWludGVyZmFjZT08aW50ZXJmYWNlPiw8YWxpYXM+Wyw8YWxpYXM+XQorVHJlYXQgREhDUCByZXF1ZXN0IHBhY2tldHMgYXJyaXZpbmcgYXQgYW55IG9mIHRoZSA8YWxpYXM+IGludGVyZmFjZXMKK2FzIGlmIHRoZXkgaGFkIGFycml2ZWQgYXQgPGludGVyZmFjZT4uIFRoaXMgb3B0aW9uIGlzIG5lY2Vzc2FyeSB3aGVuCit1c2luZyAib2xkIHN0eWxlIiBicmlkZ2luZyBvbiBCU0QgcGxhdGZvcm1zLCBzaW5jZQorcGFja2V0cyBhcnJpdmUgYXQgdGFwIGludGVyZmFjZXMgd2hpY2ggZG9uJ3QgaGF2ZSBhbiBJUCBhZGRyZXNzLgorLlRQCisuQiBcLXMsIC0tZG9tYWluPTxkb21haW4+Wyw8YWRkcmVzcyByYW5nZT5dCitTcGVjaWZpZXMgRE5TIGRvbWFpbnMgZm9yIHRoZSBESENQIHNlcnZlci4gRG9tYWlucyBtYXkgYmUgYmUgZ2l2ZW4gCit1bmNvbmRpdGlvbmFsbHkgKHdpdGhvdXQgdGhlIElQIHJhbmdlKSBvciBmb3IgbGltaXRlZCBJUCByYW5nZXMuIFRoaXMgaGFzIHR3byBlZmZlY3RzOworZmlyc3RseSBpdCBjYXVzZXMgdGhlIERIQ1Agc2VydmVyIHRvIHJldHVybiB0aGUgZG9tYWluIHRvIGFueSBob3N0cword2hpY2ggcmVxdWVzdCBpdCwgYW5kIHNlY29uZGx5IGl0IHNldHMgdGhlIGRvbWFpbiB3aGljaCBpdCBpcyBsZWdhbAorZm9yIERIQ1AtY29uZmlndXJlZCBob3N0cyB0byBjbGFpbS4gVGhlIGludGVudGlvbiBpcyB0byBjb25zdHJhaW4KK2hvc3RuYW1lcyBzbyB0aGF0IGFuIHVudHJ1c3RlZCBob3N0IG9uIHRoZSBMQU4gY2Fubm90IGFkdmVydGlzZSAKK2l0cyBuYW1lIHZpYSBkaGNwIGFzIGUuZy4gIm1pY3Jvc29mdC5jb20iIGFuZCBjYXB0dXJlIHRyYWZmaWMgbm90IAorbWVhbnQgZm9yIGl0LiBJZiBubyBkb21haW4gc3VmZml4IGlzIHNwZWNpZmllZCwgdGhlbiBhbnkgREhDUAoraG9zdG5hbWUgd2l0aCBhIGRvbWFpbiBwYXJ0IChpZSB3aXRoIGEgcGVyaW9kKSB3aWxsIGJlIGRpc2FsbG93ZWQgCithbmQgbG9nZ2VkLiBJZiBzdWZmaXggaXMgc3BlY2lmaWVkLCB0aGVuIGhvc3RuYW1lcyB3aXRoIGEgZG9tYWluIAorcGFydCBhcmUgYWxsb3dlZCwgcHJvdmlkZWQgdGhlIGRvbWFpbiBwYXJ0IG1hdGNoZXMgdGhlIHN1ZmZpeC4gSW4KK2FkZGl0aW9uLCB3aGVuIGEgc3VmZml4IGlzIHNldCB0aGVuIGhvc3RuYW1lcyB3aXRob3V0IGEgZG9tYWluCitwYXJ0IGhhdmUgdGhlIHN1ZmZpeCBhZGRlZCBhcyBhbiBvcHRpb25hbCBkb21haW4gcGFydC4gRWcgb24gbXkgbmV0d29yayBJIGNhbiBzZXQgCisuQiAtLWRvbWFpbj10aGVrZWxsZXlzLm9yZy51aworYW5kIGhhdmUgYSBtYWNoaW5lIHdob3NlIERIQ1AgaG9zdG5hbWUgaXMgImxhcHRvcCIuIFRoZSBJUCBhZGRyZXNzIGZvciB0aGF0IG1hY2hpbmUgaXMgYXZhaWxhYmxlIGZyb20gCisuQiBkbnNtYXNxCitib3RoIGFzICJsYXB0b3AiIGFuZCAibGFwdG9wLnRoZWtlbGxleXMub3JnLnVrIi4gSWYgdGhlIGRvbWFpbiBpcworZ2l2ZW4gYXMgIiMiIHRoZW4gdGhlIGRvbWFpbiBpcyByZWFkIGZyb20gdGhlIGZpcnN0ICJzZWFyY2giIGRpcmVjdGl2ZQoraW4gL2V0Yy9yZXNvbHYuY29uZiAob3IgZXF1aXZhbGVudCkuIFRoZSBhZGRyZXNzIHJhbmdlIGNhbiBiZSBvZiB0aGUgZm9ybQorPGlwIGFkZHJlc3M+LDxpcCBhZGRyZXNzPiBvciA8aXAgYWRkcmVzcz4vPG5ldG1hc2s+IG9yIGp1c3QgYSBzaW5nbGUKKzxpcCBhZGRyZXNzPi4gU2VlIAorLkIgLS1kaGNwLWZxZG4KK3doaWNoIGNhbiBjaGFuZ2UgdGhlIGJlaGF2aW91ciBvZiBkbnNtYXNxIHdpdGggZG9tYWlucy4KKy5UUAorLkIgLS1kaGNwLWZxZG4KK0luIHRoZSBkZWZhdWx0IG1vZGUsIGRuc21hc3EgaW5zZXJ0cyB0aGUgdW5xdWFsaWZpZWQgbmFtZXMgb2YKK0RIQ1AgY2xpZW50cyBpbnRvIHRoZSBETlMuIEZvciB0aGlzIHJlYXNvbiwgdGhlIG5hbWVzIG11c3QgYmUgdW5pcXVlLAorZXZlbiBpZiB0d28gY2xpZW50cyB3aGljaCBoYXZlIHRoZSBzYW1lIG5hbWUgYXJlIGluIGRpZmZlcmVudAorZG9tYWlucy4gSWYgYSBzZWNvbmQgREhDUCBjbGllbnQgYXBwZWFycyB3aGljaCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhbgorZXhpc3RpbmcgY2xpZW50LCB0aGUgbmFtZSBpcyB0cmFuc2ZlcmVkIHRvIHRoZSBuZXcgY2xpZW50LiBJZiAKKy5CIC0tZGhjcC1mcWRuCitpcyBzZXQsIHRoaXMgYmVoYXZpb3VyIGNoYW5nZXM6IHRoZSB1bnF1YWxpZmllZCBuYW1lIGlzIG5vIGxvbmdlcgorcHV0IGluIHRoZSBETlMsIG9ubHkgdGhlIHF1YWxpZmllZCBuYW1lLiBUd28gREhDUCBjbGllbnRzIHdpdGggdGhlCitzYW1lIG5hbWUgbWF5IGJvdGgga2VlcCB0aGUgbmFtZSwgcHJvdmlkZWQgdGhhdCB0aGUgZG9tYWluIHBhcnQgaXMKK2RpZmZlcmVudCAoaWUgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lcyBkaWZmZXIuKSBUbyBlbnN1cmUgdGhhdCBhbGwKK25hbWVzIGhhdmUgYSBkb21haW4gcGFydCwgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCAKKy5CIC0tZG9tYWluIAord2l0aG91dCBhbiBhZGRyZXNzIHNwZWNpZmllZCB3aGVuIAorLkIgLS1kaGNwLWZxZG4gCitpcyBzZXQuCisuVFAKKy5CIC0tZW5hYmxlLXRmdHAKK0VuYWJsZSB0aGUgVEZUUCBzZXJ2ZXIgZnVuY3Rpb24uIFRoaXMgaXMgZGVsaWJlcmF0ZWx5IGxpbWl0ZWQgdG8gdGhhdAorbmVlZGVkIHRvIG5ldC1ib290IGEgY2xpZW50LiBPbmx5IHJlYWRpbmcgaXMgYWxsb3dlZDsgdGhlIHRzaXplIGFuZAorYmxrc2l6ZSBleHRlbnNpb25zIGFyZSBzdXBwb3J0ZWQgKHRzaXplIGlzIG9ubHkgc3VwcG9ydGVkIGluIG9jdGV0IG1vZGUpLgorLlRQCisuQiAtLXRmdHAtcm9vdD08ZGlyZWN0b3J5PgorTG9vayBmb3IgZmlsZXMgdG8gdHJhbnNmZXIgdXNpbmcgVEZUUCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4KK2RpcmVjdG9yeS4gV2hlbiB0aGlzIGlzIHNldCwgVEZUUCBwYXRocyB3aGljaCBpbmNsdWRlICIuLiIgYXJlCityZWplY3RlZCwgdG8gc3RvcCBjbGllbnRzIGdldHRpbmcgb3V0c2lkZSB0aGUgc3BlY2lmaWVkIHJvb3QuCitBYnNvbHV0ZSBwYXRocyAoc3RhcnRpbmcgd2l0aCAvKSBhcmUgYWxsb3dlZCwgYnV0IHRoZXkgbXVzdCBiZSB3aXRoaW4KK3RoZSB0ZnRwLXJvb3QuCisuVFAKKy5CIC0tdGZ0cC11bmlxdWUtcm9vdAorQWRkIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBURlRQIGNsaWVudCBhcyBhIHBhdGggY29tcG9uZW50IG9uIHRoZSBlbmQKK29mIHRoZSBURlRQLXJvb3QgKGluIHN0YW5kYXJkIGRvdHRlZC1xdWFkIGZvcm1hdCkuIE9ubHkgdmFsaWQgaWYgYQordGZ0cC1yb290IGlzIHNldCBhbmQgdGhlIGRpcmVjdG9yeSBleGlzdHMuIEZvciBpbnN0YW5jZSwgaWYgdGZ0cC1yb290IGlzICIvdGZ0cCIgYW5kIGNsaWVudCAKKzEuMi4zLjQgcmVxdWVzdHMgZmlsZSAibXlmaWxlIiB0aGVuIHRoZSBlZmZlY3RpdmUgcGF0aCB3aWxsIGJlCisiL3RmdHAvMS4yLjMuNC9teWZpbGUiIGlmIC90ZnRwLzEuMi4zLjQgZXhpc3RzIG9yIC90ZnRwL215ZmlsZSBvdGhlcndpc2UuCisuVFAKKy5CIC0tdGZ0cC1zZWN1cmUKK0VuYWJsZSBURlRQIHNlY3VyZSBtb2RlOiB3aXRob3V0IHRoaXMsIGFueSBmaWxlIHdoaWNoIGlzIHJlYWRhYmxlIGJ5Cit0aGUgZG5zbWFzcSBwcm9jZXNzIHVuZGVyIG5vcm1hbCB1bml4IGFjY2Vzcy1jb250cm9sIHJ1bGVzIGlzCithdmFpbGFibGUgdmlhIFRGVFAuIFdoZW4gdGhlIC0tdGZ0cC1zZWN1cmUgZmxhZyBpcyBnaXZlbiwgb25seSBmaWxlcworb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyB0aGUgZG5zbWFzcSBwcm9jZXNzIGFyZSBhY2Nlc3NpYmxlLiBJZgorZG5zbWFzcSBpcyBiZWluZyBydW4gYXMgcm9vdCwgZGlmZmVyZW50IHJ1bGVzIGFwcGx5OiAtLXRmdHAtc2VjdXJlCitoYXMgbm8gZWZmZWN0LCBidXQgb25seSBmaWxlcyB3aGljaCBoYXZlIHRoZSB3b3JsZC1yZWFkYWJsZSBiaXQgc2V0CithcmUgYWNjZXNzaWJsZS4gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHJ1biBkbnNtYXNxIGFzIHJvb3Qgd2l0aCBURlRQCitlbmFibGVkLCBhbmQgY2VydGFpbmx5IG5vdCB3aXRob3V0IHNwZWNpZnlpbmcgLS10ZnRwLXJvb3QuIERvaW5nIHNvCitjYW4gZXhwb3NlIGFueSB3b3JsZC1yZWFkYWJsZSBmaWxlIG9uIHRoZSBzZXJ2ZXIgdG8gYW55IGhvc3Qgb24gdGhlIG5ldC4gCisuVFAKKy5CIC0tdGZ0cC1tYXg9PGNvbm5lY3Rpb25zPgorU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IFRGVFAgY29ubmVjdGlvbnMgYWxsb3dlZC4gVGhpcworZGVmYXVsdHMgdG8gNTAuIFdoZW4gc2VydmluZyBhIGxhcmdlIG51bWJlciBvZiBURlRQIGNvbm5lY3Rpb25zLAorcGVyLXByb2Nlc3MgZmlsZSBkZXNjcmlwdG9yIGxpbWl0cyBtYXkgYmUgZW5jb3VudGVyZWQuIERuc21hc3EgbmVlZHMKK29uZSBmaWxlIGRlc2NyaXB0b3IgZm9yIGVhY2ggY29uY3VycmVudCBURlRQIGNvbm5lY3Rpb24gYW5kIG9uZQorZmlsZSBkZXNjcmlwdG9yIHBlciB1bmlxdWUgZmlsZSAocGx1cyBhIGZldyBvdGhlcnMpLiBTbyBzZXJ2aW5nIHRoZQorc2FtZSBmaWxlIHNpbXVsdGFuZW91c2x5IHRvIG4gY2xpZW50cyB3aWxsIHVzZSByZXF1aXJlIGFib3V0IG4gKyAxMCBmaWxlCitkZXNjcmlwdG9ycywgc2VydmluZyBkaWZmZXJlbnQgZmlsZXMgc2ltdWx0YW5lb3VzbHkgdG8gbiBjbGllbnRzIHdpbGwKK3JlcXVpcmUgYWJvdXQgKDIqbikgKyAxMCBkZXNjcmlwdG9ycy4gSWYgCisuQiAtLXRmdHAtcG9ydC1yYW5nZQoraXMgZ2l2ZW4sIHRoYXQgY2FuIGFmZmVjdCB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMuCisuVFAKKy5CIC0tdGZ0cC1uby1ibG9ja3NpemUKK1N0b3AgdGhlIFRGVFAgc2VydmVyIGZyb20gbmVnb3RpYXRpbmcgdGhlICJibG9ja3NpemUiIG9wdGlvbiB3aXRoIGEKK2NsaWVudC4gU29tZSBidWdneSBjbGllbnRzIHJlcXVlc3QgdGhpcyBvcHRpb24gYnV0IHRoZW4gYmVoYXZlIGJhZGx5Cit3aGVuIGl0IGlzIGdyYW50ZWQuCisuVFAKKy5CIC0tdGZ0cC1wb3J0LXJhbmdlPTxzdGFydD4sPGVuZD4KK0EgVEZUUCBzZXJ2ZXIgbGlzdGVucyBvbiBhIHdlbGwta25vd24gcG9ydCAoNjkpIGZvciBjb25uZWN0aW9uIGluaXRpYXRpb24sCitidXQgaXQgYWxzbyB1c2VzIGEgZHluYW1pY2FsbHktYWxsb2NhdGVkIHBvcnQgZm9yIGVhY2gKK2Nvbm5lY3Rpb24uIE5vcm1hbGx5IHRoZXNlIGFyZSBhbGxvY2F0ZWQgYnkgdGhlIE9TLCBidXQgdGhpcyBvcHRpb24KK3NwZWNpZmllcyBhIHJhbmdlIG9mIHBvcnRzIGZvciB1c2UgYnkgVEZUUCB0cmFuc2ZlcnMuIFRoaXMgY2FuIGJlCit1c2VmdWwgd2hlbiBURlRQIGhhcyB0byB0cmF2ZXJzZSBhIGZpcmV3YWxsLiBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlCitjYW5ub3QgYmUgbG93ZXIgdGhhbiAxMDI1IHVubGVzcyBkbnNtYXNxIGlzIHJ1bm5pbmcgYXMgcm9vdC4gVGhlIG51bWJlcgorb2YgY29uY3VycmVudCBURlRQIGNvbm5lY3Rpb25zIGlzIGxpbWl0ZWQgYnkgdGhlIHNpemUgb2YgdGhlIHBvcnQgcmFuZ2UuIAorLlRQICAKKy5CIFwtQywgLS1jb25mLWZpbGU9PGZpbGU+CitTcGVjaWZ5IGEgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhlIGNvbmYtZmlsZSBvcHRpb24gaXMgYWxzbyBhbGxvd2VkIGluCitjb25maWd1cmF0aW9uIGZpbGVzLCB0byBpbmNsdWRlIG11bHRpcGxlIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisuVFAKKy5CIFwtNywgLS1jb25mLWRpcj08ZGlyZWN0b3J5PlssPGZpbGUtZXh0ZW5zaW9uPi4uLi4uLl0KK1JlYWQgYWxsIHRoZSBmaWxlcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGFzIGNvbmZpZ3VyYXRpb24KK2ZpbGVzLiBJZiBleHRlbnNpb24ocykgYXJlIGdpdmVuLCBhbnkgZmlsZXMgd2hpY2ggZW5kIGluIHRob3NlCitleHRlbnNpb25zIGFyZSBza2lwcGVkLiBBbnkgZmlsZXMgd2hvc2UgbmFtZXMgZW5kIGluIH4gb3Igc3RhcnQgd2l0aCAuIG9yIHN0YXJ0IGFuZCBlbmQKK3dpdGggIyBhcmUgYWx3YXlzIHNraXBwZWQuIFRoaXMgZmxhZyBtYXkgYmUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQKK2xpbmUgb3IgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUuCisuU0ggQ09ORklHIEZJTEUKK0F0IHN0YXJ0dXAsIGRuc21hc3EgcmVhZHMKKy5JIC9ldGMvZG5zbWFzcS5jb25mLAoraWYgaXQgZXhpc3RzLiAoT24KK0ZyZWVCU0QsIHRoZSBmaWxlIGlzIAorLkkgL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mCispIChidXQgc2VlIHRoZSAKKy5CIFwtQworYW5kCisuQiBcLTcKK29wdGlvbnMuKSBUaGUgZm9ybWF0IG9mIHRoaXMKK2ZpbGUgY29uc2lzdHMgb2Ygb25lIG9wdGlvbiBwZXIgbGluZSwgZXhhY3RseSBhcyB0aGUgbG9uZyBvcHRpb25zIGRldGFpbGVkIAoraW4gdGhlIE9QVElPTlMgc2VjdGlvbiBidXQgd2l0aG91dCB0aGUgbGVhZGluZyAiLS0iLiBMaW5lcyBzdGFydGluZyB3aXRoICMgYXJlIGNvbW1lbnRzIGFuZCBpZ25vcmVkLiBGb3IKK29wdGlvbnMgd2hpY2ggbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UsIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgb3ZlcnJpZGVzIAordGhlIGNvbW1hbmQgbGluZS4gIFF1b3RpbmcgaXMgYWxsb3dlZCBpbiBhIGNvbmZpZyBmaWxlOgorYmV0d2VlbiAiIHF1b3RlcyB0aGUgc3BlY2lhbCBtZWFuaW5ncyBvZiAsOi4gYW5kICMgYXJlIHJlbW92ZWQgYW5kIHRoZQorZm9sbG93aW5nIGVzY2FwZXMgYXJlIGFsbG93ZWQ6IFxcXFwgXFwiIFxcdCBcXGUgXFxiIFxcciBhbmQgXFxuLiBUaGUgbGF0ZXIgCitjb3JyZXNwb25kaW5nIHRvIHRhYiwgZXNjYXBlLCBiYWNrc3BhY2UsIHJldHVybiBhbmQgbmV3bGluZS4KKy5TSCBOT1RFUworV2hlbiBpdCByZWNlaXZlcyBhIFNJR0hVUCwgCisuQiBkbnNtYXNxIAorY2xlYXJzIGl0cyBjYWNoZSBhbmQgdGhlbiByZS1sb2FkcyAKKy5JIC9ldGMvaG9zdHMKK2FuZCAKKy5JIC9ldGMvZXRoZXJzIAorYW5kIGFueSBmaWxlIGdpdmVuIGJ5IC0tZGhjcC1ob3N0c2ZpbGUsIC0tZGhjcC1vcHRzZmlsZSBvciAtLWFkZG4taG9zdHMuCitUaGUgZGhjcCBsZWFzZSBjaGFuZ2Ugc2NyaXB0IGlzIGNhbGxlZCBmb3IgYWxsCitleGlzdGluZyBESENQIGxlYXNlcy4gSWYgCisuQgorLS1uby1wb2xsCitpcyBzZXQgU0lHSFVQIGFsc28gcmUtcmVhZHMKKy5JIC9ldGMvcmVzb2x2LmNvbmYuCitTSUdIVVAKK2RvZXMgTk9UIHJlLXJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKy5QUAorV2hlbiBpdCByZWNlaXZlcyBhIFNJR1VTUjEsCisuQiBkbnNtYXNxIAord3JpdGVzIHN0YXRpc3RpY3MgdG8gdGhlIHN5c3RlbSBsb2cuIEl0IHdyaXRlcyB0aGUgY2FjaGUgc2l6ZSwKK3RoZSBudW1iZXIgb2YgbmFtZXMgd2hpY2ggaGF2ZSBoYWQgdG8gcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSBiZWZvcmUKK3RoZXkgZXhwaXJlZCBpbiBvcmRlciB0byBtYWtlIHJvb20gZm9yIG5ldyBuYW1lcyBhbmQgdGhlIHRvdGFsIG51bWJlcgorb2YgbmFtZXMgdGhhdCBoYXZlIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgY2FjaGUuIEZvciBlYWNoIHVwc3RyZWFtCitzZXJ2ZXIgaXQgZ2l2ZXMgdGhlIG51bWJlciBvZiBxdWVyaWVzIHNlbnQsIGFuZCB0aGUgbnVtYmVyIHdoaWNoCityZXN1bHRlZCBpbiBhbiBlcnJvci4gSW4gCisuQiAtLW5vLWRhZW1vbgorbW9kZSBvciB3aGVuIGZ1bGwgbG9nZ2luZyBpcyBlbmFibGVkICgtcSksIGEgY29tcGxldGUgZHVtcCBvZiB0aGUKK2NvbnRlbnRzIG9mIHRoZSBjYWNoZSBpcyBtYWRlLgorLlBQIAorV2hlbiBpdCByZWNlaXZlcyBTSUdVU1IyIGFuZCBpdCBpcyBsb2dnaW5nIGRpcmVjdCB0byBhIGZpbGUgKHNlZQorLkIgLS1sb2ctZmFjaWxpdHkKKykgCisuQiBkbnNtYXNxCit3aWxsIGNsb3NlIGFuZCByZW9wZW4gdGhlIGxvZyBmaWxlLiBOb3RlIHRoYXQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLAorZG5zbWFzcSB3aWxsIG5vdCBiZSBydW5uaW5nIGFzIHJvb3QuIFdoZW4gaXQgZmlyc3QgY3JlYXRlcyB0aGUgbG9nZmlsZQorZG5zbWFzcSBjaGFuZ2VzIHRoZSBvd25lcnNoaXAgb2YgdGhlIGZpbGUgdG8gdGhlIG5vbi1yb290IHVzZXIgaXQgd2lsbCBydW4KK2FzLiBMb2dyb3RhdGUgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgdG8gY3JlYXRlIGEgbmV3IGxvZyBmaWxlIHdpdGgKK3RoZSBvd25lcnNoaXAgd2hpY2ggbWF0Y2hlcyB0aGUgZXhpc3Rpbmcgb25lIGJlZm9yZSBzZW5kaW5nIFNJR1VTUjIuCitJZiBUQ1AgRE5TIHF1ZXJpZXMgYXJlIGluIHByb2dyZXNzLCB0aGUgb2xkIGxvZ2ZpbGUgd2lsbCByZW1haW4gb3BlbiBpbgorY2hpbGQgcHJvY2Vzc2VzIHdoaWNoIGFyZSBoYW5kbGluZyBUQ1AgcXVlcmllcyBhbmQgbWF5IGNvbnRpbnVlIHRvIGJlCit3cml0dGVuLiBUaGVyZSBpcyBhIGxpbWl0IG9mIDE1MCBzZWNvbmRzLCBhZnRlciB3aGljaCBhbGwgZXhpc3RpbmcgVENQCitwcm9jZXNzZXMgd2lsbCBoYXZlIGV4cGlyZWQ6IGZvciB0aGlzIHJlYXNvbiwgaXQgaXMgbm90IHdpc2UgdG8KK2NvbmZpZ3VyZSBsb2dmaWxlIGNvbXByZXNzaW9uIGZvciBsb2dmaWxlcyB3aGljaCBoYXZlIGp1c3QgYmVlbgorcm90YXRlZC4gVXNpbmcgbG9ncm90YXRlLCB0aGUgcmVxdWlyZWQgb3B0aW9ucyBhcmUgCisuQiBjcmVhdGUgCithbmQKKy5CIGRlbGF5Y29tcHJlc3MuCisKKyAKKy5QUAorRG5zbWFzcSBpcyBhIEROUyBxdWVyeSBmb3J3YXJkZXI6IGl0IGl0IG5vdCBjYXBhYmxlIG9mIHJlY3Vyc2l2ZWx5CithbnN3ZXJpbmcgYXJiaXRyYXJ5IHF1ZXJpZXMgc3RhcnRpbmcgZnJvbSB0aGUgcm9vdCBzZXJ2ZXJzIGJ1dAorZm9yd2FyZHMgc3VjaCBxdWVyaWVzIHRvIGEgZnVsbHkgcmVjdXJzaXZlIHVwc3RyZWFtIEROUyBzZXJ2ZXIgd2hpY2ggaXMKK3R5cGljYWxseSBwcm92aWRlZCBieSBhbiBJU1AuIEJ5IGRlZmF1bHQsIGRuc21hc3EgcmVhZHMKKy5JIC9ldGMvcmVzb2x2LmNvbmYKK3RvIGRpc2NvdmVyIHRoZSBJUAorYWRkcmVzc2VzIG9mIHRoZSB1cHN0cmVhbSBuYW1lc2VydmVycyBpdCBzaG91bGQgdXNlLCBzaW5jZSB0aGUKK2luZm9ybWF0aW9uIGlzIHR5cGljYWxseSBzdG9yZWQgdGhlcmUuIFVubGVzcworLkIgLS1uby1wb2xsCitpcyB1c2VkLAorLkIgZG5zbWFzcQorY2hlY2tzIHRoZSBtb2RpZmljYXRpb24gdGltZSBvZgorLkkgL2V0Yy9yZXNvbHYuY29uZgorKG9yIGVxdWl2YWxlbnQgaWYgCisuQiBcLS1yZXNvbHYtZmlsZSAKK2lzIHVzZWQpIGFuZCByZS1yZWFkcyBpdCBpZiBpdCBjaGFuZ2VzLiBUaGlzIGFsbG93cyB0aGUgRE5TIHNlcnZlcnMgdG8KK2JlIHNldCBkeW5hbWljYWxseSBieSBQUFAgb3IgREhDUCBzaW5jZSBib3RoIHByb3RvY29scyBwcm92aWRlIHRoZQoraW5mb3JtYXRpb24uCitBYnNlbmNlIG9mCisuSSAvZXRjL3Jlc29sdi5jb25mCitpcyBub3QgYW4gZXJyb3IKK3NpbmNlIGl0IG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYmVmb3JlIGEgUFBQIGNvbm5lY3Rpb24gZXhpc3RzLiBEbnNtYXNxIAorc2ltcGx5IGtlZXBzIGNoZWNraW5nIGluIGNhc2UKKy5JIC9ldGMvcmVzb2x2LmNvbmYgCitpcyBjcmVhdGVkIGF0IGFueQordGltZS4gRG5zbWFzcSBjYW4gYmUgdG9sZCB0byBwYXJzZSBtb3JlIHRoYW4gb25lIHJlc29sdi5jb25mCitmaWxlLiBUaGlzIGlzIHVzZWZ1bCBvbiBhIGxhcHRvcCwgd2hlcmUgYm90aCBQUFAgYW5kIERIQ1AgbWF5IGJlIHVzZWQ6CitkbnNtYXNxIGNhbiBiZSBzZXQgdG8gcG9sbCBib3RoIAorLkkgL2V0Yy9wcHAvcmVzb2x2LmNvbmYgCithbmQKKy5JIC9ldGMvZGhjcGMvcmVzb2x2LmNvbmYgCithbmQgd2lsbCB1c2UgdGhlIGNvbnRlbnRzIG9mIHdoaWNoZXZlciBjaGFuZ2VkCitsYXN0LCBnaXZpbmcgYXV0b21hdGljIHN3aXRjaGluZyBiZXR3ZWVuIEROUyBzZXJ2ZXJzLgorLlBQCitVcHN0cmVhbSBzZXJ2ZXJzIG1heSBhbHNvIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGluCit0aGUgY29uZmlndXJhdGlvbiBmaWxlLiBUaGVzZSBzZXJ2ZXIgc3BlY2lmaWNhdGlvbnMgb3B0aW9uYWxseSB0YWtlIGEKK2RvbWFpbiBuYW1lIHdoaWNoIHRlbGxzIGRuc21hc3EgdG8gdXNlIHRoYXQgc2VydmVyIG9ubHkgdG8gZmluZCBuYW1lcworaW4gdGhhdCBwYXJ0aWN1bGFyIGRvbWFpbi4KKy5QUAorSW4gb3JkZXIgdG8gY29uZmlndXJlIGRuc21hc3EgdG8gYWN0IGFzIGNhY2hlIGZvciB0aGUgaG9zdCBvbiB3aGljaCBpdCBpcyBydW5uaW5nLCBwdXQgIm5hbWVzZXJ2ZXIgMTI3LjAuMC4xIiBpbgorLkkgL2V0Yy9yZXNvbHYuY29uZgordG8gZm9yY2UgbG9jYWwgcHJvY2Vzc2VzIHRvIHNlbmQgcXVlcmllcyB0bworZG5zbWFzcS4gVGhlbiBlaXRoZXIgc3BlY2lmeSB0aGUgdXBzdHJlYW0gc2VydmVycyBkaXJlY3RseSB0byBkbnNtYXNxCit1c2luZyAKKy5CIFwtLXNlcnZlcgorb3B0aW9ucyBvciBwdXQgdGhlaXIgYWRkcmVzc2VzIHJlYWwgaW4gYW5vdGhlciBmaWxlLCBzYXkKKy5JIC9ldGMvcmVzb2x2LmRuc21hc3EKK2FuZCBydW4gZG5zbWFzcSB3aXRoIHRoZSAKKy5CIFwtciAvZXRjL3Jlc29sdi5kbnNtYXNxCitvcHRpb24uIFRoaXMgc2Vjb25kIHRlY2huaXF1ZSBhbGxvd3MgZm9yIGR5bmFtaWMgdXBkYXRlIG9mIHRoZSBzZXJ2ZXIKK2FkZHJlc3NlcyBieSBQUFAgb3IgREhDUC4KKy5QUAorQWRkcmVzc2VzIGluIC9ldGMvaG9zdHMgd2lsbCAic2hhZG93IiBkaWZmZXJlbnQgYWRkcmVzc2VzIGZvciB0aGUgc2FtZQorbmFtZXMgaW4gdGhlIHVwc3RyZWFtIEROUywgc28gIm15Y29tcGFueS5jb20gMS4yLjMuNCIgaW4gL2V0Yy9ob3N0cyB3aWxsIGVuc3VyZSB0aGF0CitxdWVyaWVzIGZvciAibXljb21wYW55LmNvbSIgYWx3YXlzIHJldHVybiAxLjIuMy40IGV2ZW4gaWYgcXVlcmllcyBpbgordGhlIHVwc3RyZWFtIEROUyB3b3VsZCBvdGhlcndpc2UgcmV0dXJuIGEgZGlmZmVyZW50IGFkZHJlc3MuIFRoZXJlIGlzCitvbmUgZXhjZXB0aW9uIHRvIHRoaXM6IGlmIHRoZSB1cHN0cmVhbSBETlMgY29udGFpbnMgYSBDTkFNRSB3aGljaAorcG9pbnRzIHRvIGEgc2hhZG93ZWQgbmFtZSwgdGhlbiBsb29raW5nIHVwIHRoZSBDTkFNRSB0aHJvdWdoIGRuc21hc3EKK3dpbGwgcmVzdWx0IGluIHRoZSB1bnNoYWRvd2VkIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgb2YKK3RoZSBDTkFNRS4gVG8gd29yayBhcm91bmQgdGhpcywgYWRkIHRoZSBDTkFNRSB0byAvZXRjL2hvc3RzIHNvIHRoYXQKK3RoZSBDTkFNRSBpcyBzaGFkb3dlZCB0b28uCisKKy5QUAorVGhlIG5ldHdvcmstaWQgc3lzdGVtIHdvcmtzIGFzIGZvbGxvd3M6IEZvciBlYWNoIERIQ1AgcmVxdWVzdCwgZG5zbWFzcQorY29sbGVjdHMgYSBzZXQgb2YgdmFsaWQgbmV0d29yay1pZCB0YWdzLCBvbmUgZnJvbSB0aGUgCisuQiBkaGNwLXJhbmdlCit1c2VkIHRvIGFsbG9jYXRlIHRoZSBhZGRyZXNzLCBvbmUgZnJvbSBhbnkgbWF0Y2hpbmcgCisuQiBkaGNwLWhvc3QKKyhhbmQgImtub3duIiBpZiBhIGRoY3AtaG9zdCBtYXRjaGVzKSAKK3RoZSB0YWcgImJvb3RwIiBmb3IgQk9PVFAgcmVxdWVzdHMsIGEgdGFnIHdob3NlIG5hbWUgaXMgdGhlIAorbmFtZSBpZiB0aGUgaW50ZXJmYWNlIG9uIHdoaWNoIHRoZSByZXF1ZXN0IGFycml2ZWQsCithbmQgcG9zc2libHkgbWFueSBmcm9tIG1hdGNoaW5nIHZlbmRvciBjbGFzc2VzIGFuZCB1c2VyCitjbGFzc2VzIHNlbnQgYnkgdGhlIERIQ1AgY2xpZW50LiBBbnkgCisuQiBkaGNwLW9wdGlvbiAKK3doaWNoIGhhcyBuZXR3b3JrLWlkIHRhZ3Mgd2lsbCBiZSB1c2VkIGluIHByZWZlcmVuY2UgIHRvIGFuIHVudGFnZ2VkIAorLkIgZGhjcC1vcHRpb24sCitwcm92aWRlZCB0aGF0IF9hbGxfIHRoZSB0YWdzIG1hdGNoIHNvbWV3aGVyZSBpbiB0aGUKK3NldCBjb2xsZWN0ZWQgYXMgZGVzY3JpYmVkIGFib3ZlLiBUaGUgcHJlZml4ICcjJyBvbiBhIHRhZyBtZWFucyAnbm90Jworc28gLS1kaGNwPW9wdGlvbj0jcHVycGxlLDMsMS4yLjMuNCBzZW5kcyB0aGUgb3B0aW9uIHdoZW4gdGhlCituZXR3b3JrLWlkIHRhZyBwdXJwbGUgaXMgbm90IGluIHRoZSBzZXQgb2YgdmFsaWQgdGFncy4KKy5QUAorSWYgdGhlIG5ldHdvcmstaWQgaW4gYQorLkIgZGhjcC1yYW5nZSAKK2lzIHByZWZpeGVkIHdpdGggJ25ldDonIHRoZW4gaXRzIG1lYW5pbmcgY2hhbmdlcyBmcm9tIHNldHRpbmcgYQordGFnIHRvIG1hdGNoaW5nIGl0LiBUaHVzIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBkaGNwLXJhbmdlIG9uIGEgc3VibmV0LAorYW5kIG9uZSBpcyB0YWdnZWQgd2l0aCBhIG5ldHdvcmstaWQgd2hpY2ggaXMgc2V0IChmb3IgaW5zdGFuY2UKK2Zyb20gYSB2ZW5kb3JjbGFzcyBvcHRpb24pIHRoZW4gaG9zdHMgd2hpY2ggc2V0IHRoZSBuZXRpZCB0YWcgd2lsbCBiZSAKK2FsbG9jYXRlZCBhZGRyZXNzZXMgaW4gdGhlIHRhZ2dlZCByYW5nZS4KKy5QUCAKK1RoZSBESENQIHNlcnZlciBpbiBkbnNtYXNxIHdpbGwgZnVuY3Rpb24gYXMgYSBCT09UUCBzZXJ2ZXIgYWxzbywKK3Byb3ZpZGVkIHRoYXQgdGhlIE1BQyBhZGRyZXNzIGFuZCBJUCBhZGRyZXNzIGZvciBjbGllbnRzIGFyZSBnaXZlbiwKK2VpdGhlciB1c2luZyAKKy5CIGRoY3AtaG9zdCAKK2NvbmZpZ3VyYXRpb25zIG9yIGluCisuSSAvZXRjL2V0aGVycworLCBhbmQgYQorLkIgZGhjcC1yYW5nZSAKK2NvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHByZXNlbnQgdG8gYWN0aXZhdGUgdGhlIERIQ1Agc2VydmVyCitvbiBhIHBhcnRpY3VsYXIgbmV0d29yay4gKFNldHRpbmcgLS1ib290cC1keW5hbWljIHJlbW92ZXMgdGhlIG5lZWQgZm9yCitzdGF0aWMgYWRkcmVzcyBtYXBwaW5ncy4pIFRoZSBmaWxlbmFtZQorcGFyYW1ldGVyIGluIGEgQk9PVFAgcmVxdWVzdCBpcyBtYXRjaGVkIGFnYWluc3QgbmV0aWRzIGluCisuQiAgZGhjcC1vcHRpb24gCitjb25maWd1cmF0aW9ucywgYXMgaXMgdGhlIHRhZyAiYm9vdHAiLCBhbGxvd2luZyBzb21lIGNvbnRyb2wgb3ZlciB0aGUgb3B0aW9ucyByZXR1cm5lZCB0bworZGlmZmVyZW50IGNsYXNzZXMgb2YgaG9zdHMuCisKKy5TSCBFWElUIENPREVTCisuUFAKKzAgLSBEbnNtYXNxIHN1Y2Nlc3NmdWxseSBmb3JrZWQgaW50byB0aGUgYmFja2dyb3VuZCwgb3IgdGVybWluYXRlZAorbm9ybWFsbHkgaWYgYmFja2dyb3VuZGluZyBpcyBub3QgZW5hYmxlZC4KKy5QUAorMSAtIEEgcHJvYmxlbSB3aXRoIGNvbmZpZ3VyYXRpb24gd2FzIGRldGVjdGVkLgorLlBQCisyIC0gQSBwcm9ibGVtIHdpdGggbmV0d29yayBhY2Nlc3Mgb2NjdXJyZWQgKGFkZHJlc3MgaW4gdXNlLCBhdHRlbXB0Cit0byB1c2UgcHJpdmlsZWdlZCBwb3J0cyB3aXRob3V0IHBlcm1pc3Npb24pLgorLlBQCiszIC0gQSBwcm9ibGVtIG9jY3VycmVkIHdpdGggYSBmaWxlc3lzdGVtIG9wZXJhdGlvbiAobWlzc2luZworZmlsZS9kaXJlY3RvcnksIHBlcm1pc3Npb25zKS4KKy5QUAorNCAtIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCisuUFAKKzUgLSBPdGhlciBtaXNjZWxsYW5lb3VzIHByb2JsZW0uCisuUFAKKzExIG9yIGdyZWF0ZXIgLSBhIG5vbiB6ZXJvIHJldHVybiBjb2RlIHdhcyByZWNlaXZlZCBmcm9tIHRoZQorbGVhc2Utc2NyaXB0IHByb2Nlc3MgImluaXQiIGNhbGwuIFRoZSBleGl0IGNvZGUgZnJvbSBkbnNtYXNxIGlzIHRoZQorc2NyaXB0J3MgZXhpdCBjb2RlIHdpdGggMTAgYWRkZWQuIAorCisuU0ggTElNSVRTCitUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHJlc291cmNlIGxpbWl0cyBpbiBkbnNtYXNxIGFyZSBnZW5lcmFsbHkKK2NvbnNlcnZhdGl2ZSwgYW5kIGFwcHJvcHJpYXRlIGZvciBlbWJlZGRlZCByb3V0ZXIgdHlwZSBkZXZpY2VzIHdpdGgKK3Nsb3cgcHJvY2Vzc29ycyBhbmQgbGltaXRlZCBtZW1vcnkuIE9uIG1vcmUgY2FwYWJsZSBoYXJkd2FyZSwgaXQgaXMKK3Bvc3NpYmxlIHRvIGluY3JlYXNlIHRoZSBsaW1pdHMsIGFuZCBoYW5kbGUgbWFueSBtb3JlIGNsaWVudHMuIFRoZQorZm9sbG93aW5nIGFwcGxpZXMgdG8gZG5zbWFzcS0yLjM3OiBlYXJsaWVyIHZlcnNpb25zIGRpZCBub3Qgc2NhbGUgYXMgd2VsbC4KKyAKKy5QUAorRG5zbWFzcSBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIEROUyBhbmQgREhDUCBmb3IgYXQgbGVhc3QgYSB0aG91c2FuZAorY2xpZW50cy4gQ2xlYXJseSB0byBkbyB0aGlzIHRoZSB2YWx1ZSBvZiAKKy5CIC0tZGhjcC1sZWFzZS1tYXgKK211c3QgYmUgaW5jcmVhc2VkLAorYW5kIGxlYXNlIHRpbWVzIHNob3VsZCBub3QgYmUgdmVyeSBzaG9ydCAobGVzcyB0aGFuIG9uZSBob3VyKS4gVGhlCit2YWx1ZSBvZiAKKy5CIC0tZG5zLWZvcndhcmQtbWF4IAorY2FuIGJlIGluY3JlYXNlZDogc3RhcnQgd2l0aCBpdCBlcXVhbCB0bwordGhlIG51bWJlciBvZiBjbGllbnRzIGFuZCBpbmNyZWFzZSBpZiBETlMgc2VlbXMgc2xvdy4gTm90ZSB0aGF0IEROUworcGVyZm9ybWFuY2UgZGVwZW5kcyB0b28gb24gdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSB1cHN0cmVhbQorbmFtZXNlcnZlcnMuIFRoZSBzaXplIG9mIHRoZSBETlMgY2FjaGUgbWF5IGJlIGluY3JlYXNlZDogdGhlIGhhcmQKK2xpbWl0IGlzIDEwMDAwIG5hbWVzIGFuZCB0aGUgZGVmYXVsdCAoMTUwKSBpcyB2ZXJ5IGxvdy4gU2VuZGluZworU0lHVVNSMSB0byBkbnNtYXNxIG1ha2VzIGl0IGxvZyBpbmZvcm1hdGlvbiB3aGljaCBpcyB1c2VmdWwgZm9yIHR1bmluZwordGhlIGNhY2hlIHNpemUuIFNlZSB0aGUgCisuQiBOT1RFUworc2VjdGlvbiBmb3IgZGV0YWlscy4KKworLlBQCitUaGUgYnVpbHQtaW4gVEZUUCBzZXJ2ZXIgaXMgY2FwYWJsZSBvZiBtYW55IHNpbXVsdGFuZW91cyBmaWxlCit0cmFuc2ZlcnM6IHRoZSBhYnNvbHV0ZSBsaW1pdCBpcyByZWxhdGVkIHRvIHRoZSBudW1iZXIgb2YgZmlsZS1oYW5kbGVzCithbGxvd2VkIHRvIGEgcHJvY2VzcyBhbmQgdGhlIGFiaWxpdHkgb2YgdGhlIHNlbGVjdCgpIHN5c3RlbSBjYWxsIHRvCitjb3BlIHdpdGggbGFyZ2UgbnVtYmVycyBvZiBmaWxlIGhhbmRsZXMuIElmIHRoZSBsaW1pdCBpcyBzZXQgdG9vIGhpZ2gKK3VzaW5nIAorLkIgLS10ZnRwLW1heAoraXQgd2lsbCBiZSBzY2FsZWQgZG93biBhbmQgdGhlIGFjdHVhbCBsaW1pdCBsb2dnZWQgYXQKK3N0YXJ0LXVwLiBOb3RlIHRoYXQgbW9yZSB0cmFuc2ZlcnMgYXJlIHBvc3NpYmxlIHdoZW4gdGhlIHNhbWUgZmlsZSBpcworYmVpbmcgc2VudCB0aGFuIHdoZW4gZWFjaCB0cmFuc2ZlciBzZW5kcyBhIGRpZmZlcmVudCBmaWxlLgorCisuUFAKK0l0IGlzIHBvc3NpYmxlIHRvIHVzZSBkbnNtYXNxIHRvIGJsb2NrIFdlYiBhZHZlcnRpc2luZyBieSB1c2luZyBhIGxpc3QKK29mIGtub3duIGJhbm5lci1hZCBzZXJ2ZXJzLCBhbGwgcmVzb2x2aW5nIHRvIDEyNy4wLjAuMSBvciAwLjAuMC4wLCBpbgorLkIgL2V0Yy9ob3N0cyAKK29yIGFuIGFkZGl0aW9uYWwgaG9zdHMgZmlsZS4gVGhlIGxpc3QgY2FuIGJlIHZlcnkgbG9uZywgCitkbnNtYXNxIGhhcyBiZWVuIHRlc3RlZCBzdWNjZXNzZnVsbHkgd2l0aCBvbmUgbWlsbGlvbiBuYW1lcy4gVGhhdCBzaXplCitmaWxlIG5lZWRzIGEgMUdIeiBwcm9jZXNzb3IgYW5kIGFib3V0IDYwTWIgb2YgUkFNLgorCisuU0ggSU5URVJOQVRJT05BTElTQVRJT04KK0Ruc21hc3EgY2FuIGJlIGNvbXBpbGVkIHRvIHN1cHBvcnQgaW50ZXJuYXRpb25hbGlzYXRpb24uIFRvIGRvIHRoaXMsCit0aGUgbWFrZSB0YXJnZXRzICJhbGwtaTE4biIgYW5kICJpbnN0YWxsLWkxOG4iIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YKK3RoZSBzdGFuZGFyZCB0YXJnZXRzICJhbGwiIGFuZCAiaW5zdGFsbCIuIFdoZW4gaW50ZXJuYXRpb25hbGlzYXRpb24KK2lzIGNvbXBpbGVkIGluLCBkbnNtYXNxIHdpbGwgcHJvZHVjZSBsb2cgbWVzc2FnZXMgaW4gdGhlIGxvY2FsCitsYW5ndWFnZSBhbmQgc3VwcG9ydCBpbnRlcm5hdGlvbmFsaXNlZCBkb21haW4gbmFtZXMgKElETikuIERvbWFpbgorbmFtZXMgaW4gL2V0Yy9ob3N0cywgL2V0Yy9ldGhlcnMgYW5kIC9ldGMvZG5zbWFzcS5jb25mIHdoaWNoIGNvbnRhaW4KK25vbi1BU0NJSSBjaGFyYWN0ZXJzIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0aGUgRE5TLWludGVybmFsIHB1bnljb2RlCityZXByZXNlbnRhdGlvbi4gTm90ZSB0aGF0CitkbnNtYXNxIGRldGVybWluZXMgYm90aCB0aGUgbGFuZ3VhZ2UgZm9yIG1lc3NhZ2VzIGFuZCB0aGUgYXNzdW1lZAorY2hhcnNldCBmb3IgY29uZmlndXJhdGlvbgorZmlsZXMgZnJvbSB0aGUgTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gVGhpcyBzaG91bGQgYmUgc2V0IHRvIHRoZSBzeXN0ZW0KK2RlZmF1bHQgdmFsdWUgYnkgdGhlIHNjcmlwdCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3Igc3RhcnRpbmcKK2Ruc21hc3EuIFdoZW4gZWRpdGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcywgYmUgY2FyZWZ1bCB0byBkbyBzbwordXNpbmcgb25seSB0aGUgc3lzdGVtLWRlZmF1bHQgbG9jYWxlIGFuZCBub3QgdXNlci1zcGVjaWZpYyBvbmUsIHNpbmNlCitkbnNtYXNxIGhhcyBubyBkaXJlY3Qgd2F5IG9mIGRldGVybWluaW5nIHRoZSBjaGFyc2V0IGluIHVzZSwgYW5kIG11c3QKK2Fzc3VtZSB0aGF0IGl0IGlzIHRoZSBzeXN0ZW0gZGVmYXVsdC4gCisgCisuU0ggRklMRVMKKy5JUiAvZXRjL2Ruc21hc3EuY29uZiAKKworLklSIC91c3IvbG9jYWwvZXRjL2Ruc21hc3EuY29uZgorCisuSVIgL2V0Yy9yZXNvbHYuY29uZgorCisuSVIgL2V0Yy9ob3N0cworCisuSVIgL2V0Yy9ldGhlcnMKKworLklSIC92YXIvbGliL21pc2MvZG5zbWFzcS5sZWFzZXMgCisKKy5JUiAvdmFyL2RiL2Ruc21hc3EubGVhc2VzCisKKy5JUiAvdmFyL3J1bi9kbnNtYXNxLnBpZAorLlNIIFNFRSBBTFNPCisuQlIgaG9zdHMgKDUpLCAKKy5CUiByZXNvbHZlciAoNSkKKy5TSCBBVVRIT1IKK1RoaXMgbWFudWFsIHBhZ2Ugd2FzIHdyaXR0ZW4gYnkgU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4uCisKKwpkaWZmIC0tZ2l0IGEvbWFuL2VzL2Ruc21hc3EuOCBiL21hbi9lcy9kbnNtYXNxLjgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzE5NzIxMgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9lcy9kbnNtYXNxLjgKQEAgLTAsMCArMSwxMzEwIEBACisuVEggRE5TTUFTUSA4CisuU0ggTk9NQlJFCitkbnNtYXNxIFwtIFVuIGxpZ2VybyBzZXJ2aWRvciBESENQIHkgRE5TIGNvbiBjYWNo6S4KKy5TSCBTSU5PUFNJUworLkIgZG5zbWFzcQorLkkgW09QQ0lPTl0uLi4KKy5TSCAiREVTQ1JJUENJ004iCisuQlIgZG5zbWFzcQorZXMgdW4gbGlnZXJvIHNlcnZpZG9yIEROUywgVEZUUCB5IERIQ1AuIFN1IHByb3Dzc2l0byBlcyBwcm92ZWVyIHNlcnZpY2lvcyBETlMKK3kgREhDUCBhIHVuYSByZWQgZGUg4XJlYSBsb2NhbC4KKy5QUAorRG5zbWFzcSBhY2VwdGEgYvpzcXVlZGFzIEROUyB5IGxhcyByZXNwb25kZSBkZXNkZSB1biBwZXF1ZfFvCitjYWNo6SBsb2NhbCwgbyBsYXMgcmVlbnbtYSBoYWNpYSB1biBzZXJ2aWRvciBETlMgcmVhbCByZWN1cnNpdm8uCitDYXJnYSBlbCBjb250ZW5pZG8gZGUgL2V0Yy9ob3N0cywgZGUgdGFsIGZvcm1hIHF1ZSBub21icmVzIGRlCitob3N0cyBsb2NhbGVzIGxvcyBjdWFsZXMgbm8gYXBhcmVjZW4gZW4gZWwgRE5TIG11bmRpYWwgcHVlZGFuIHNlcgorcmVzdWVsdG9zLiBUYW1iaeluIHJlc3BvbmRlIGEgYvpzcXVlZGFzIEROUyBwYXJhIGhvc3RzIGNvbmZpZ3VyYWRvcwordu1hIERIQ1AuCisuUFAKK0VsIHNlcnZpZG9yIERIQ1AgZG5zbWFzcSBpbmNsdXllIHNvcG9ydGUgcGFyYSBhc2lnbmFjafNuIGRlIGRpcmVjY2lvbmVzCitlc3ThdGljYXMgeSByZWRlcyBt+mx0aXBsZXMuIEF1dG9t4XRpY2FtZW50ZSBlbnbtYSB1biBwcmVkZXRlcm1pbmFkbyBzZW5zaWJsZSBkZQorb3BjaW9uZXMgREhDUCwgeSBwdWVkZSBzZXIgY29uZmlndXJhZG8gcGFyYSBlbnZpYXIgY3VhbHF1aWVyIG9wY2lvbmVzIERIQ1AgZGVzZWFkYXMsCitpbmNsdXllbmRvIG9wY2lvbmVzIGVuY2Fwc3VsYWRhcyBwb3IgdmVuZGVkb3Jlcy4gSW5jbHV5ZSB1biBzZXJ2aWRvciBzZWd1cm8KK1RGVFAgc29sby1sZWN0dXJhIHBhcmEgcGVybWl0aXIgZWwgaW5pY2lvIHbtYSByZWQvUFhFIGRlIGhvc3RzIERIQ1AuIFRhbWLtZW4KK2luY2x1eWUgc29wb3J0ZSBwYXJhIEJPT1RQLgorLlBQCitEbnNtYXNxCitpbmNsdXllIHNvcG9ydGUgSVB2NiBwYXJhIEROUywgcGVybyBubyBwYXJhIERIQ1AuCisuU0ggT1BDSU9ORVMKK07zdGVzZSBxdWUgZW4gZ2VuZXJhbCBwYXLhbWV0cm9zIGF1c2VudGVzIHNvbiBwZXJtaXRpZG9zIHkgZGVzaGFiaWxpdGFuCitmdW5jaW9uZXMsIHBvciBlamVtcGxvICItLXBpZC1maWxlPSIgZGVzaGFiaWxpdGEgbGEgZXNjcml0dXJhIGRlIHVuCithcmNoaXZvIFBJRC4gRW4gQlNELCBhIG1lbm9zIHF1ZSBsYSBsaWJyZXLtYSBHTlUgZ2V0b3B0IGVzdOkgZW5sYXphZGEsCitsYSBmb3JtYSBsYXJnYSBkZSBsYXMgb3BjaW9uZXMgbm8gZnVuY2lvbmEgZW4gbGEgbO1uZWEgZGUgY29tYW5kb3MsCitwZXJvIHRvZGF27WEgZXMgcmVjb25vY2lkYSBlbiBlbCBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNp824uCisuVFAKKy5CIC0tdGVzdAorTGVlciBhcmNoaXZvKHMpIGRlIGNvbmZpZ3VyYWNp824geSByZXZpc2FyIHN1IHNpbnRheGlzLiBTYWxpciBjb24gY/NkaWdvCiswIHNpIHRvZG8gZXN04SBiaWVuLCBvIHVuIGPzZGlnbyBuby1jZXJvIGVuIGN1YWxxdWllciBvdHJvIGNhc28uIE5vCitpbmljaWFyIGRuc21hc3EuCisuVFAKKy5CIFwtaCwgLS1uby1ob3N0cworTm8gbGVlciBsb3Mgbm9tYnJlcyBkZSBob3N0cyBlbiAvZXRjL2hvc3RzLgorLlRQCisuQiBcLUgsIC0tYWRkbi1ob3N0cz08YXJjaGl2bz4KK0FyY2hpdm8gZGUgaG9zdHMgYWRpY2lvbmFsLiBMZWVyIGVsIGFyY2hpdm8gZXNwZWNpZmljYWRvIGFkaWNpb25hbG1lbnRlCithIC9ldGMvaG9zdHMuIFNpIHNlIGJyaW5kYSAtaCwgbGVlciBzb2xvIGVsIGFyY2hpdm8gZXNwZWNpZmljYWRvLiBFc3RhCitvcGNp824gcHVlZGUgc2VyIHJlcGV0aWRhIHBhcmEgbeFzIGRlIHVuIGFyY2hpdm8gZGUgaG9zdHMgYWRpY2lvbmFsLiBTaQordW4gZGlyZWN0b3JpbyBlcyBicmluZGFkbywgZW50b25jZXMgbGVlciB0b2RvcyBsb3MgYXJjaGl2b3MgY29udGVuaWRvcyBlbgorZXNlIGRpcmVjdG9yaW8uCisuVFAKKy5CIFwtRSwgLS1leHBhbmQtaG9zdHMKK0FncmVnYXIgZWwgZG9taW5pbyBhIG5vbWJyZXMgc2VuY2lsbG9zIChzaW4gcHVudG8pIGVuIC9ldGMvaG9zdHMgZGUgbGEKK21pc21hIG1hbmVyYSBxdWUgY29uIG5vbWJyZXMgZGVyaXZhZG9zIGRlIERIQ1AuCisuVFAKKy5CIFwtVCwgLS1sb2NhbC10dGw9PHRpZW1wbz4KK0FsIHJlc3BvbmRlciBjb24gaW5mb3JtYWNp824gZGVzZGUgL2V0Yy9ob3N0cyBvIGRlc2RlIGVsIGFyY2hpdm8KK2RlIGFycmllbmRvcyBESENQLCBkbnNtYXNxIGZpamEgZWwgdGllbXBvIGRlIHZpZGEgKFRUTCkgYSBjZXJvIHBvcgorcHJlZGV0ZXJtaW5hZG8sIHNpZ25pZmljYW5kbyBxdWUgZWwgcmVtaXRlbnRlIG5vIGRlYnLhIGNhY2hlYXIKK2xhIGluZm9ybWFjafNuIHBvciBz7SBtaXNtby4gRXN0byBlcyBsbyBjb3JyZWN0byBhIGhhY2VyIGVuIGNhc2kKK3RvZGFzIGxhcyBzaXR1YWNpb25lcy4gRXN0YSBvcGNp824gcGVybWl0ZSBxdWUgc2UgZXNwZWNpZmlxdWUKK2NpZXJ0byB0aWVtcG8gZGUgdmlkYSAoZW4gc2VndW5kb3MpIHBhcmEgZXN0YXMgcmVzcHVlc3Rhcy4gRXN0bworcmVkdWNlIGxhIGNhcmdhIHNvYnJlIGVsIHNlcnZpZG9yIGFsIGNvc3RvIGRlIHF1ZSBsb3MgY2xpZW50ZXMKK3VzYXJhbiBkYXRvcyBh8WVqb3MgYmFqbyBhbGd1bmFzIGNpcmN1bnN0YW5jaWFzLgorLlRQCisuQiAtLW5lZy10dGw9PHRpZW1wbz4KK1Jlc3B1ZXN0YXMgbmVnYXRpdmFzIGRlc2RlIHNlcnZpZG9yZXMgdXBzdHJlYW0gbm9ybWFsbWVudGUgY29udGllbmVuCitpbmZvcm1hY2nzbiB0aW1lLXRvLWxpdmUgKHRpZW1wbyBkZSB2aWRhKSBlbiBleHBlZGllbnRlcyBTT0EgcXVlCitkbnNtYXNxIHVzYSBwYXJhIGhhY2VyIGNhY2jpLiBTaSBsYXMgcmVzcHVlc3RhcyBkZSBzZXJ2aWRvcmVzIHVwc3RyZWFtCitvbWl0ZW4gZXN0YSBpbmZvcm1hY2nzbiwgZG5zbWFzcSBubyBtZXRlIGxhIHJlc3B1ZXN0YSBlbiBlbCBjYWNo6S4KK0VzdGEgb3BjafNuIGJyaW5kYSB1biB2YWxvciBwcmVkZXRlcm1pbmFkbyBwYXJhIGVsIHRpbWUtdG8tbGl2ZSBxdWUKK2Ruc21hc3EgdXNhIHBhcmEgbWV0ZXIgcmVzcHVlc3RhcyBlbiBlbCBjYWNo6SBh+m4gZW4gbGEgYXVzZW5jaWEgZGUKK3VuIGV4cGVkaWVudGUgU09BLgorLlRQCisuQiBcLWssIC0ta2VlcC1pbi1mb3JlZ3JvdW5kCitObyBpciBoYWNpYSBlbCBmb25kbyBhbCBpbmljaWFyLCBwZXJvIGFwYXJ0ZSBkZSBlc28gZWplY3V0YXIgY29tbworbm9ybWFsLiBMYSBpbnRlbmNp824gZGUgZXN0byBlcyBwYXJhIGN1YW5kbyBkbnNtYXNxIGVzIGVqZWN1dGFkbworYmFqbyBkYWVtb250b29scyBvIGxhdW5jaGQuCisuVFAKKy5CIFwtZCwgLS1uby1kYWVtb24KK01vZG8gZGVidWc6IG5vIGhhY2VyIHVuIGZvcmsgaGFjaWEgZWwgZm9uZG8sIG5vIGNyZWFyIHVuIGFyY2hpdm8gUElELAorbm8gY2FtYmlhciBlbCBJRCBkZWwgdXN1YXJpbywgZ2VuZXJhciB1biBjYWNoZSBkdW1wIGNvbXBsZXRvIGFsCityZWNpYmlyIHVuIFNJR1VTUjEsIGJpdGFjb3JlYXIgYSBzdGRlcnIgYWwgaWd1YWwgcXVlIGEgc3lzbG9nLCBubworZm9ya2VhciBwcm9jZXNvcyBudWV2b3MgcGFyYSBtYW5lamFyIGL6c3F1ZWRhcyBUQ1AuCisuVFAKKy5CIFwtcSwgLS1sb2ctcXVlcmllcworQml0YWNvcmVhciBsb3MgcmVzdWx0YWRvcyBkZSBi+nNxdWVkYXMgRE5TIG1hbmVqYWRhcyBwb3IgZG5zbWFzcS4KK0hhYmlsaXRhciB1biBkdW1wIGRlIGNhY2jpIGNvbXBsZXRvIGFsIHJlY2liaXIgdW4gU0lHVVNSMS4KKy5UUAorLkIgXC04LCAtLWxvZy1mYWNpbGl0eT08ZmFjaWxpZGFkPgorRmlqYXIgbGEgZmFjaWxpZGFkIGEgbGEgY3VhbCBkbnNtYXNxIGRlYmVy4SBlbnZpYXIgbWVuc2FqZXMgc3lzbG9nLAorZXN0byBlcyBEQUVNT04gcG9yIHByZWRldGVybWluYWRvLCB5IExPQ0FMMCBjdWFuZG8gZWwgbW9kbyBkZWJ1ZyBlc3ThCitlbiBvcGVyYWNp824uIFNpIGxhIGZhY2lsaWRhZCBicmluZGFkYSBjb250aWVuZSBwb3IgbG8gbWVub3MgdW4gY2Fy4WN0ZXIKKyIvIiwgc2UgdHJhdGEgY29tbyB1biBub21icmUgZGUgYXJjaGl2bywgeSBkbnNtYXNxIGJpdGFjb3JlYXLhIGEgZGljaG8KK2FyY2hpdm8sIGVuIHZleiBkZSBzeXNsb2cuIChFcnJvcmVzIGR1cmFudGUgbGEgbGVjdHVyYSBkZSBsYSBjb25maWd1cmFjafNuCitpcuFuIGEgc3lzbG9nIHRvZGF27WEsIHBlcm8gdG9kbyBvdXRwdXQgZGVzZGUgdW4gaW5pY2lvIGV4aXRvc28sIHkgdG9kbworb3V0cHV0IG1pZW50cmFzIGVuIGVqZWN1Y2nzbiwgaXLhIGEgZXN0ZSBhcmNoaXZvIGV4Y2x1c2l2YW1lbnRlLikKK0FsIGJpdGFjb3JlYXIgYSB1biBhcmNoaXZvLCBkbnNtYXNxIGNlcnJhcuEgeSByZWFicmly4SBlbCBhcmNoaXZvIGFsCityZWNpYmlyIHVuIFNJR1VTUjIuIEVzdG8gcGVybWl0ZSBxdWUgZWwgYXJjaGl2byBkZSBiaXThY29yYSBzZWEgcm90YWRvCitzaW4gZGV0ZW5lciBhIGRuc21hc3EuCisuVFAKKy5CIC0tbG9nLWFzeW5jWz08bO1uZWFzPl0KK0hhYmlsaXRhciBiaXRhY29y6W8gYXNpbmNy825pY28geSBvcGNpb25hbG1lbnRlIGZpamFyIGVsIGztbWl0ZSBkZSBu+m1lcm8KK2RlIGztbmVhcyBxdWUgc2Vy4W4gZW52aWFkYXMgYSBsYSBjb2xldGEgcG9yIGRuc21hc3EgY3VhbmRvIHN5c2xvZyBlc3ThCitsZW50by4gRG5zbWFzcSBwdWVkZSBiaXRhY29yZWFyIGFzaW5jcvNuaWNhbWVudGU6IGVzdG8gbGUgcGVybWl0ZSBjb250aW51YXIKK2Z1bmNpb25hbmRvIHNpbiBzZXIgYmxvcXVlYWRvIHBvciBzeXNsb2csIHkgcGVybWl0ZSBhIHN5c2xvZyB1c2FyIGRuc21hc3EKK3BhcmEgYvpzcXVlZGFzIEROUyBzaW4gcmllc2dvIGRlIHRyYW5xdWUuIFNpIGxhIGNvbGV0YSBkZSBs7W5lYXMgZGUgYml04WNvcmEKK3NlIGxsZW5hLCBkbnNtYXNxIGJpdGFjb3JlYXLhIGVsIGRlc2JvcmRhbWllbnRvLCB5IGVsIG76bWVybyBkZSBtZW5zYWplcworcGVyZGlkb3MuIEVsIHRhbWHxbyBwcmVkZXRlcm1pbmFkbyBkZSBjb2xldGEgZXMgNSwgdW4gdmFsb3Igc2FubyBzZXLtYSA1LTI1LAoreSB1biBs7W1pdGUgZGUgMTAwIGVzIGltcHVlc3RvLgorLlRQCisuQiBcLXgsIC0tcGlkLWZpbGU9PHBhdGg+CitFc3BlY2lmaWNhciB1biBwYXRoIGFsdGVybm8gZG9uZGUgZG5zbWFzcSBkZWJlIGd1YXJkYXIgc3UgUElELgorTm9ybWFsbWVudGUgZXMgL3Zhci9ydW4vZG5zbWFzcS5waWQuCisuVFAKKy5CIFwtdSwgLS11c2VyPTx1c3VhcmlvPgorRXNwZWNpZmljYXIgZWwgdXNlcmlkIGFsIGN1YWwgZG5zbWFzcSBkZWJlIGNhbWJpYXJzZSBkZXNwdWVzIGRlIGluaWNpYXIuCitEbnNtYXNxIG5vcm1hbG1lbnRlIGRlYmUgc2VyIGluaWNpYWRvIGNvbW8gcm9vdCwgcGVybyBzb2x0YXLhIGxvcworcHJpdmlsZWdpb3Mgcm9vdCBkZXNwdWVzIGRlbCBpbmljaW8sIGNhbWJpYW5kbyBhIG90cm8gdXN1YXJpby4KK05vcm1hbG1lbnRlIGVzdGUgdXN1YXJpbyBlcyAibm9ib2R5IiwgcGVybyBlc28gc2UgcHVlZGUgY2FtYmlhcgorY29uIGVzdGEgb3BjafNuLgorLlRQCisuQiBcLWcsIC0tZ3JvdXA9PGdydXBvPiAKK0VzcGVjaWZpY2FyIGVsIGdydXBvIGNvbW8gZWwgY3VhbCBkbnNtYXNxIGNvcnJlcuEuIEVsIHByZWRldGVybWluYWRvCitlcyAiZGlwIiwgc2kgZXN04SBkaXNwb25pYmxlLCBwYXJhIGZhY2lsaXRhciBlbCBhY2Nlc28gYQorL2V0Yy9wcHAvcmVzb2x2LmNvbmYgZWwgY3XhbCBub3Jt4WxtZW50ZSBubyBlcyBnbG9iYWxtZW50ZSBsZe1ibGUuCisuVFAKKy5CIFwtdiwgLS12ZXJzaW9uCitNb3N0cmFyIGVsIG76bWVybyBkZSB2ZXJzafNuLgorLlRQCisuQiBcLXAsIC0tcG9ydD08cHVlcnRvPgorRXNjdWNoYXIgZW4gZWwgcHVlcnRvIDxwdWVydG8+IGVuIHZleiBkZWwgcHVlcnRvIGVzdOFuZGFyIEROUyAoNTMpLgorRmlqYXIgZXN0byBhIGNlcm8gZGVzaGFiaWxpdGEgY29tcGxldGFtZW50ZSBsYSBmdW5jafNuIEROUywgZGVqYW5kbworc29sbyBESENQIHkvbyBURlRQLgorLlRQCisuQiBcLVAsIC0tZWRucy1wYWNrZXQtbWF4PTx0YW1h8W8+CitFc3BlY2lmaWNhciBlbCBwYXF1ZXRlIFVEUCBFRE5TLjAgbeFzIGdyYW5kZSBxdWUgZXMgc29wb3J0YWRvIHBvcgorZWwgcmVlbnZpYWRvciBETlMuIFBvciBwcmVkZXRlcm1pbmFkbyBlcyAxMjgwLCBsbyBjdWFsIGVzIGVsCitt4XhpbW8gcmVjb21lbmRhZG8gZW4gUkZDMjY3MSBwYXJhIGV0aGVybmV0LgorLlRQCisuQiBcLVEsIC0tcXVlcnktcG9ydD08cHVlcnRvPgorRW52aWFyIGL6c3F1ZWRhcyBvdXRib3VuZCBkZXNkZSwgeSBlc2N1Y2hhciBwb3IgcmVzcHVlc3RhcyBlbiwKK2VsIHB1ZXJ0byBVRFAgPHB1ZXJ0bz4gZW4gdmV6IGRlIHVzYXIgcHVlcnRvcyBhbGVhdG9yaW9zLiBO83Rlc2UKK3F1ZSB1c2FyIGVzdGEgb3BjafNuIGhhY2UgcXVlIGRuc21hc3Egc2VhIG1lbm9zIHNlZ3VybyBjb250cmEKK2F0YXF1ZXMgZGUgc3Bvb2ZpbmcgRE5TLCBwZXJvIHB1ZWRlIHNlciBt4XMgcuFwaWRvIHkgdXNhciBtZW5vcworcmVjdXJzb3MuCitGaWphciBlc3RhIG9wY2nzbiBhIHplcm8gaGFjZSBxdWUgZG5zbWFzcSB1c2UgdW4gc29sbyBwdWVydG8sCithc2lnbmFkbyBwb3IgZWwgc2lzdGVtYSBvcGVyYXRpdm8gKGVzdG8gZXJhIGVsIGNvbXBvcnRhbWllbnRvCitwcmVkZXRlcm1pbmFkbyBlbiB2ZXJzaW9uZXMgYW50ZXJpb3JlcyBhIDIuNDMpLgorLlRQCisuQiAtLW1pbi1wb3J0PTxwdWVydG8+CitObyB1c2FyIHB1ZXJ0b3MgbWVub3JlcyBhIDxwdWVydG8+IGNvbW8gcmVtaXRlbnRlcyBwYXJhIGL6c3F1ZWRhcworRE5TIG91dGJvdW5kLiBEbnNtYXNxIGVzY29qZSBwdWVydG9zIGFsZWF0b3Jpb3MgY29tbyByZW1pdGVudGVzCitwYXJhIGL6c3F1ZWRhcyBETlMgb3V0Ym91bmQuIEN1YW5kbyBlc3RhIG9wY2nzbiBlcyBicmluZGFkYSwgbG9zCitwdWVydG9zIHVzYWRvcyBzaWVtcHJlIHNlcuFuIG1heW9yZXMgcXVlIGVsIGVzcGVjaWZpY2Fkby4gRXN0byBlcwor+nRpbCBwYXJhIHNpc3RlbWFzIGRldHJhcyBkZSBmaXJld2FsbHMuCisuVFAKKy5CIFwtaSwgLS1pbnRlcmZhY2U9PG5vbWJyZSBkZSBpbnRlcmZhY2U+CitFc2N1Y2hhciBzb2xvIGVuIGxhcyBpbnRlcmZhY2VzIGVzcGVjaWZpY2FkYXMuIERuc21hc3EgYXV0b23hdGljYW1lbnRlCithZ3JlZ2EgbGEgaW50ZXJmYWNlIGxvb3BiYWNrIGEgbGEgbGlzdGEgZGUgaW50ZXJmYWNlcyBwYXJhIHVzYXIgY3VhbmRvCitsYSBvcGNp824KKy5CIFwtLWludGVyZmFjZQorZXMgdXNhZGEuIFNpIG5pbmd1bmEgb3BjafNuCisuQiBcLS1pbnRlcmZhY2UKK28KKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCitlcyBicmluZGFkYSwgZG5zbWFzcSBlc2N1Y2hhIGVuIHRvZGFzIGxhcyBpbnRlcmZhY2VzIGRpc3BvbmlibGVzIGV4Y2VwdG8KK2N1YWxxdWllcmEgZmlqYWRhIGNvbiBvcGNpb25lcworLkIgXC0tZXhjZXB0LWludGVyZmFjZQorSW50ZXJmYWNlcyBJUCBhbGlhcyAocG9yIGVqZW1wbG8sICJldGgxOjAiKSBubyBwdWVkZW4gc2VyIHV0aWxpemFkYXMgY29uCisuQiAtLWludGVyZmFjZQorbworLkIgLS1leGNlcHQtaW50ZXJmYWNlCissIHVzYXIgLS1saXN0ZW4tYWRkcmVzcyBlbiB2ZXouCisuVFAKKy5CIFwtSSwgLS1leGNlcHQtaW50ZXJmYWNlPTxub21icmUgZGUgaW50ZXJmYWNlPgorTm8gZXNjdWNoYXIgZW4gbGEgaW50ZXJmYWNlIGVzcGVjaWZpY2FkYS4gTvN0ZXNlIHF1ZSBlbCBvcmRlbiBkZQorbGFzIG9wY2lvbmVzCisuQiBcLS1saXN0ZW4tYWRkcmVzcworLkIgLS1pbnRlcmZhY2UKK3kKKy5CIC0tZXhjZXB0LWludGVyZmFjZQorbm8gaW1wb3J0YSB5IGxhcyBvcGNpb25lcworLkIgLS1leGNlcHQtaW50ZXJmYWNlCitzaWVtcHJlIGludmFsaWRhbiBhIGxhcyBvdHJhcy4KKy5UUCAKKy5CIFwtMiwgLS1uby1kaGNwLWludGVyZmFjZT08bm9tYnJlIGRlIGludGVyZmFjZT4KK05vIHByb3ZlZXIgREhDUCBuaSBURlRQIGVuIGxhIGludGVyZmFjZSBlc3BlY2lmaWNhZGEsIHBlcm8gc+0KK3Byb3ZlZXIgc2VydmljaW8gRE5TLgorLlRQCisuQiBcLWEsIC0tbGlzdGVuLWFkZHJlc3M9PGRpcmVjY2nzbiBJUD4KK0VzY3VjaGFyIGVuIGxhKHMpIGRpcmVjY2nzbihlcykgSVAgZXNwZWNpZmljYWRhKHMpLiBMYXMgb3BjaW9uZXMKKy5CIFwtLWludGVyZmFjZQoreQorLkIgXC0tbGlzdGVuLWFkZHJlc3MKK2FtYmFzIHB1ZWRlbiBzZXIgYnJpbmRhZGFzLCB5IGVuIHRhbCBjYXNvIGVsIGp1ZWdvIGRlIGFtYmFzCitkaXJlY2Npb25lcyBJUCB5IGludGVyZmFjZXMgZXMgdXNhZGEuIE7zdGVzZSBxdWUgc2kgbmluZ3VuYSBvcGNp824KKy5CIFwtLWludGVyZmFjZQorZXMgYnJpbmRhZGEsIHBlcm8gc+0gc2UgYnJpbmRhIGxhIG9wY2nzbgorLkIgXC0tbGlzdGVuLWFkZHJlc3MKKywgZW50b25jZXMgZG5zbWFzcSBubyBlc2N1Y2hhcuEgYXV0b23hdGljYW1lbnRlIGVuIGxhIGludGVyZmFjZQorbG9vcGJhY2suIFBhcmEgb2J0ZW5lciBlc3RvLCBzdSBkaXJlY2Np824gSVAsIDEyNy4wLjAuMSwgZGViZSBzZXIKK2V4cGztY2l0YW1lbnRlIGJyaW5kYWRhIGNvbW8gdW5hIG9wY2nzbgorLkIgXC0tbGlzdGVuLWFkZHJlc3MKKy5UUAorLkIgXC16LCAtLWJpbmQtaW50ZXJmYWNlcworRW4gc2lzdGVtYXMgcXVlIGlubHV5ZW4gZWwgc29wb3J0ZSwgZG5zbWFzcSBhY29wbGEgbGEgZGlyZWNjafNuCitkZSBjb21vZO1uLCBh+m4gY3VhbmRvIGVzdOEgZXNjdWNoYW5kbyBzb2xhbWVudGUgZW4gYWxndW5hcworaW50ZXJmYWNlcy4gRW50b25jZXMgZGVzY2FydGEgYvpzcXVlZGFzIGEgbGFzIGN1YWxlcyBubyBkZWJlCityZXNwb25kZXIuIEVzdG8gdGllbmUgbGEgdmVudGFqYSBkZSBmdW5jaW9uYXIgYfpuIGN1YW5kbworaW50ZXJmYWNlcyB2YW4geSB2aWVuZW4geSBjYW1iaWFuIGRpcmVjY2lvbmVzLiBFc3RhIG9wY2nzbiBmb3J6YQorYSBkbnNtYXNxIGEgYWNvcGxhcnNlIHJlYWxtZW50ZSBzb2xvIGEgbGFzIGludGVyZmFjZXMgZW4KK2xhcyBjdWFsZXMgZXN04SBlc2N1Y2hhbmRvLiBDYXNpIGxhIPpuaWNhIHZleiBxdWUgZXN0byBlcyD6dGlsCitlcyBjdWFuZG8gc2UgZXN04SBjb3JyaWVuZG8gb3RybyBzZXJ2aWRvciBETlMgKG8gb3RyYSBpbnN0YW5jaWEKK2RlIGRuc21hc3EpIGVuIGxhIG1pc21hIG3hcXVpbmEuIEZpamFyIGVzdGEgb3BjafNuIHRhbWJpZW4KK2hhYmlsaXRhIG11bHRpcGxlcyBpbnN0YW5jaWFzIGRlIGRuc21hc3EsIGxhcyBjdWFsZXMgcHJvdmVlbgorc2VydmljaW8gREhDUCBlbiBsYSBtaXNtYSBt4XF1aW5hLgorLlRQCisuQiBcLXksIC0tbG9jYWxpc2UtcXVlcmllcworUmV0b3JuYXIgcmVzcHVlc3RhcyBhIGL6c3F1ZWRhcyBETlMgZGVzZGUgL2V0Yy9ob3N0cyBsYXMgY3VhbGVzIGRlcGVuZGVuCitkZSBsYSBpbnRlcmZhY2UgZG9uZGUgZW50cvMgbGEgYvpzcXVlZGEuIFNpIHVuIG5vbWJyZSBlbiAvZXRjL2hvc3RzIHRpZW5lCittYXMgZGUgdW5hIGRpcmVjY2nzbiBhc29jaWFkYSBjb24gZWwsIHkgcG9yIGxvIG1lbm9zIHVuYSBkZSBlc2FzIGRpcmVjY2lvbmVzCitlc3ThIGVuIGxhIG1pc21hIHN1YnJlZCBkZSBsYSBpbnRlcmZhY2UgZG9uZGUgZnVlIGVudmlhZGEsIGVudPNuY2VzCityZXRvcm5hciBzb2xvIGxhcyBkaXJlY2Npb25lcyBlbiBlc2Egc3VicmVkLiBFc3RvIHBlcm1pdGUgYSB1biBzZXJ2aWRvcgordGVuZXIgZGlyZWNjaW9uZXMgbfpsdGlwbGVzIGVuIC9ldGMvaG9zdHMgY29ycmVzcG9uZGllbnRlcyBhIGNhZGEgdW5hIGRlCitzdXMgaW50ZXJmYWNlcyB5IGNhZGEgaG9zdCByZWNpYmly4SBsYSByZXNwdWVzdGEgYWRlY3VhZGEKK2RlcGVuZGllbmRvIGRlIGN1YWwgcmVkIHRlbmdhbiBhZGp1bnRhLiBQb3IgZWwgbW9tZW50bywgZXN0YSBmYWNpbGlkYWQKK2VzdOEgbGltaXRhZGEgYSBJUHY0LgorLlRQCisuQiBcLWIsIC0tYm9ndXMtcHJpdgorQvpzcXVlZGFzIHByaXZhZGFzIHJldmVyc2FzIHJhcmFzLiBUb2RhIGL6c3F1ZWRhIHJldmVyc2EgcGFyYSByYW5nb3MgZGUgSVAKK3ByaXZhZG9zICgxOTIuMTY4LngueCwgZXRjLikgbG9zIGN1YWxlcyBubyBzZSBlbmN1ZW50cmVuIGVuCisvZXRjL2hvc3RzIG8gZW4gZWwgYXJjaGl2byBkZSBhcnJpZW5kb3MgREhDUCBlcyByZXNwb25kaWRhIGNvbgorImRvbWluaW8gbm8gZXhpc3RlbnRlIiBlbiB2ZXogZGUgc2VyIHJlZW52aWFkYSB1cHN0cmVhbS4KKy5UUAorLkIgXC1WLCAtLWFsaWFzPVs8SVAgdmllam8+XXxbPElQIGluaWNpbz4tPElQIGZpbmFsPl0sPElQIG51ZXZvPlssPG3hc2NhcmE+XQorTW9kaWZpY2FyIGRpcmVjY2lvbmVzIElQdjQgcmV0b3JuYWRhcyBkZXNkZSBzZXJ2aWRvcmVzIEROUyB1cHN0cmVhbTsKKzxJUCB2aWVqbz4gZXMgcmVtcGxhemFkbyBjb24gPElQIG51ZXZvPi4gU2kgbGEgbeFzY2FyYSBvcGNpb25hbAorZXMgYnJpbmRhZGEsIGVudG9uY2VzIGN1YWxxdWllciBkaXJlY2Np824gcXVlIGNvaW5jaWRhIGNvbiBlbAorPElQIHZpZWpvPiBlbm1hc2NhcmFkbyBzZXLhIHJlLWVzY3JpdGEuIEFz7SBxdWUsIHBvciBlamVtcGxvLAorLkIgLS1hbGlhcz0xLjIuMy4wLDYuNy44LjAsMjU1LjI1NS4yNTUuMCB0cmF6YXLhIDEuMi4zLjU2IGEgNi43LjguNTYKK3kgMS4yLjMuNjcgYSA2LjcuOC42Ny4gRXN0byBlcyBsbyBxdWUKK3J1dGVhZG9yZXMgQ2lzY28gUElYIGxsYW1hbiAiRE5TIGRvY3RvcmluZyIuIFNpIGxhIGRpcmVjY2nzbiB2aWVqYSBlcworYnJpbmRhZGEgY29tbyB1biByYW5nbywgZW50b25jZXMgc29sbyBkaXJlY2Npb25lcyBlbiBlc2UgcmFuZ28sIHkgbm8KK2xhIHN1YnJlZCBlbnRlcmEsIHNvbiByZS1lc2NyaXRhcy4gRGUgdGFsIG1hbmVyYSBxdWUKKy5CIC0tYWxpYXM9MTkyLjE2OC4wLjEwLTE5Mi4xNjguMC40MCwxMC4wLjAuMCwyNTUuMjU1LjI1NS4wCityZWxhY2lvbmEgMTkyLjE2OC4wLjEwLT4xOTIuMTY4LjAuNDAgYSAxMC4wLjAuMTAtPjEwLjAuMC40MAorLlRQCisuQiBcLUIsIC0tYm9ndXMtbnhkb21haW49PGRpcmVjY2nzbiBJUD4KK1RyYW5zZm9ybWFyIHJlc3B1ZXN0YXMgcXVlIGNvbnRpZW5lbiBsYSBkaXJlY2Np824gSVAgYnJpbmRhZGEgYQorcmVzcHVlc3RhcyB0aXBvICJEb21pbmlvIG5vIGV4aXN0ZSIuIExhIGludGVuY2nzbiBkZSBlc3RvIGVzIGFjdHVhcgorZW4gY29udHJhIGRlIHVuYSBtb3ZpZGEgZGVzdmlhZGEgaGVjaGEgcG9yIFZlcmlzaWduIGVuIHNlcHRpZW1icmUKK2RlbCAyMDAzLCBjdWFuZG8gY29tZW56YXJvbiBhIHJldG9ybmFyIGxhIGRpcmVjY2nzbiBkZSB1biBzZXJ2aWRvcgorZGUgcHVibGljaWRhZCBlbiByZXNwdWVzdGEgYSBi+nNxdWVkYXMgcG9yIG5vbWJyZXMgbm8gcmVnaXN0cmFkb3MsCitlbiB2ZXogZGUgbGEgY29ycmVjdGEgcmVzcHVlc3RhIE5YRE9NQUlOLiBFc3RhIG9wY2nzbiBsZSBkaWNlIGEgZG5zbWFzcQorcXVlIGRlYmUgZm9yamVhciBsYSByZXNwdWVzdGEgY29ycmVjdGEgY3VhbmRvIHZlIGVzdGUgY29tcG9ydGFtaWVudG8uCitQYXJhIHNlcHRpZW1icmUgMjAwMyBsYSBkaXJlY2Np824gSVAgc2llbmRvIHJldG9ybmFkYSBwb3IgVmVyaXNpZ24KK2VzIDY0Ljk0LjExMC4xMQorLlRQCisuQiBcLWYsIC0tZmlsdGVyd2luMmsKK0FsZ3VuYXMgdmVyc2lvbmVzIGRlIFdpbmRvd3MgaGFjZW4gYvpzcXVlZGFzIEROUyBwZXJp82RpY2FzIGxhcyBjdWFsZXMgbm8KK3JlY2liZW4gcmVzcHVlc3RhcyBzZW5zaWJsZXMgZGVzZGUgZWwgRE5TIHD6YmxpY28geSBwdWVkZW4gY2F1c2FyIHByb2JsZW1hcworYWN0aXZhbmRvIGVubGFjZXMgbWFyY2FjafNuLWVuLWRlbWFuZGEuIEVzdGEgb3BjafNuIGZpbHRyYSBkaWNoYXMgYvpzcXVlZGFzLgorTGFzIGL6c3F1ZWRhcyBmaWx0cmFkYXMgc29uIHBhcmEgcmVnaXN0cm9zIHRpcG8gU09BIHkgU1JWLCBhbCBpZ3VhbCBxdWUKK3RpcG8gQU5ZIGRvbmRlIGVsIG5vbWJyZSBwZWRpZG8gY29udGllbmUgXywgcGFyYSBhdHJhcGFyIGL6c3F1ZWRhcyBMREFQLgorLlRQCisuQiBcLXIsIC0tcmVzb2x2LWZpbGU9PGFyY2hpdm8+CitMZWVyIGxhcyBkaXJlY2Npb25lcyBJUCBkZSBzZXJ2aWRvcmVzIEROUyB1cHN0cmVhbSBkZXNkZSA8YXJjaGl2bz4sCitlbiB2ZXogZGUgL2V0Yy9yZXNvbHYuY29uZi4gUGFyYSBlbCBmb3JtYXRvIGRlIGVzdGUgYXJjaGl2bywgdmVyCisuQlIgcmVzb2x2LmNvbmYgKDUpCitMYXMg+m5pY2FzIGztbmVhcyByZWxldmFudGVzIGEgZG5zbWFzcSBzb24gbGFzIGRlIHNlcnZpZG9yZXMgRE5TLiBBCitkbnNtYXNxIHNlIGxlIHB1ZWRlIGRlY2lyIHF1ZSByZXZpc2UgbeFzIGRlIHVuIGFyY2hpdm8gcmVzb2x2LmNvbmYsCitlbCBwcmltZXIgYXJjaGl2byBlc3BlY2lmaWNhZG8gcmVtcGxhemEgYWwgcHJlZGV0ZXJtaW5hZG8sIHkgbG9zCitzdWJzaWd1aWVudGVzIHNvbiBhZ3JlZ2Fkb3MgYSBsYSBsaXN0YS4gRXN0byBlcyBzb2xvCitwZXJtaXRpZG8gYWwgaGFjZXIgcG9sbGluZzsgZWwgYXJjaGl2byBjb24gbGEgYWN0dWFsIGZlY2hhCitkZSBtb2RpZmljYWNp824gbeFzIG51ZXZhIGVzIGVsIHF1ZSBzZXLhIHVzYWRvLgorLlRQCisuQiBcLVIsIC0tbm8tcmVzb2x2CitObyBsZWVyIC9ldGMvcmVzb2x2LmNvbmYuIE9idGVuZXIgbG9zIHNlcnZpZG9yZXMgRE5TIHVwc3RyZWFtIHNvbG8KK2Rlc2RlIGxhIGztbmVhIGRlIGNvbWFuZG9zIG8gZGVzZGUgZWwgYXJjaGl2byBkZSBjb25maWd1cmFjafNuIGRlCitkbnNtYXNxLgorLlRQCisuQiBcLTEsIC0tZW5hYmxlLWRidXMKK1Blcm1pdGlyIHF1ZSBsYSBjb25maWd1cmFjafNuIGRlIGRuc21hc3Egc2VhIGFjdHVhbGl6YWRhIHbtYSBsbGFtYWRhcworZGUgbel0b2RvIERCdXMuIExhIGNvbmZpZ3VyYWNp824gcXVlIHB1ZWRlIHNlciBjYW1iaWFkYSBlcyBzZXJ2aWRvcmVzCitETlMgdXBzdHJlYW0gKHkgZG9taW5pb3MgY29ycmVzcG9uZGllbnRlcykgeSBsaW1waWV6YSBkZSBjYWNo6S4gRXN0YQorb3BjafNuIHJlcXVpZXJlIHF1ZSBkbnNtYXNxIGhheWEgc2lkbyBjb21waWxhZG8gY29uIHNvcG9ydGUgcGFyYSBEQnVzLgorLlRQIAorLkIgXC1vLCAtLXN0cmljdC1vcmRlcgorUG9yIHByZWRldGVybWluYWRvLCBkbnNtYXNxIGVudmlhcuEgYvpzcXVlZGFzIGEgY3VhbHF1aWVyYSBkZSBsb3MKK3NlcnZpZG9yZXMgdXBzdHJlYW0gcXVlIGNvbm9jZSwgeSB0cmF0YSBkZSBmYXZvcmVjZXIgc2Vydmlkb3JlcyBsb3MKK2N1YWxlcyBzYWJlIHF1ZSBlc3ThbiBhY3Rpdm9zLiBGaWphciBlc3RhIG9wY2nzbiBmb3J6YSBhIGRuc21hc3EgYQorcHJvYmFyIGNhZGEgYvpzcXVlZGEgY29uIGNhZGEgc2Vydmlkb3IgZXN0cmljdGFtZW50ZSBlbiBlbCBvcmRlbgorcXVlIGFwYXJlY2VuIGVuIC9ldGMvcmVzb2x2LmNvbmYKKy5UUAorLkIgLS1hbGwtc2VydmVycworUG9yIHByZWRldGVybWluYWRvLCBjdWFuZG8gZG5zbWFzcSB0aWVuZSBt4XMgZGUgdW4gc2Vydmlkb3IgdXBzdHJlYW0KK2Rpc3BvbmlibGUsIGVudmlhcuEgYvpzcXVlZGFzIGEgc29sbyB1biBzZXJ2aWRvci4gRmlqYXIgZXN0YSBvcGNp824KK2ZvcnphIGEgZG5zbWFzcSBhIGVudmlhciB0b2RhcyBsYXMgYvpzcXVlZGFzIGEgdG9kb3MgbG9zIHNlcnZpZG9yZXMKK2Rpc3BvbmlibGVzLiBMYSByZXNwdWVzdGEgZGVsIHNlcnZpZG9yIHF1ZSByZXNwb25kYSBwcmltZXJvIHNlcuEKK2RldnVlbHRhIGFsIHNvbGljaXRhbnRlIG9yaWdpbmFsLgorLlRQCisuQiAtLXN0b3AtZG5zLXJlYmluZAorRGVuZWdhciAoeSBiaXRhY29yZWFyKSBkaXJlY2Npb25lcyBkZSBzZXJ2aWRvcmVzIHVwc3RyZWFtIHF1ZSBlc3ThbgorZGVudHJvIGRlIHJhbmdvcyBJUCBwcml2YWRvcy4gRXN0byBibG9xdWVhIHVuIGF0YXF1ZSBkb25kZSB1biBuYXZlZ2Fkb3IKK2RldHLhcyBkZSB1biBmaXJld2FsbCBlcyB1c2FkbyBwYXJhIGFuYWxpemFyIG3hcXVpbmFzIGVuIGxhIHJlZCBsb2NhbC4KKy5UUAorLkIgXC1uLCAtLW5vLXBvbGwKK05vIHJldmlzYXIgcGVyaW9kaWNhbWVudGUgYSAvZXRjL3Jlc29sdi5jb25mIGVuIGJ1c2NhIGRlIGNhbWJpb3MuCisuVFAKKy5CIC0tY2xlYXItb24tcmVsb2FkCitDdWFuZG8gc2VhIHF1ZSAvZXRjL3Jlc29sdi5jb25mIGVzIHJlLWxlaWRhLCBsaWJlcmFyIGVsIGNhY2jpIEROUy4KK0VzdG8gZXMg+nRpbCBjdWFuZG8gc2Vydmlkb3JlcyBETlMgbnVldm9zIHB1ZWRhbiB0ZW5lciBkYXRvcyBkaWZlcmVudGVzCithIGxvcyBjb250ZW5pZG9zIGVuIGVsIGNhY2jpLgorLlRQCisuQiBcLUQsIC0tZG9tYWluLW5lZWRlZAorTGUgZGljZSBhIGRuc21hc3EgcXVlIG5vIGRlYmUgcmVlbnZpYXIgYvpzcXVlZGFzIHBhcmEgbm9tYnJlcyBzZW5jaWxsb3MsCitzaW4gcHVudG9zIG8gcGFydGVzIGRlIGRvbWluaW9zLCBhIHNlcnZpZG9yZXMgdXBzdHJlYW0uIFNpIGVsIG5vbWJyZQorbm8gc2UgY29ub2NlIGRlc2RlIC9ldGMvaG9zdHMgbyBkZXNkZSBESENQIGVudG9uY2VzIHVuYSByZXNwdWVzdGEKKyJubyBlbmNvbnRyYWRvIiBlcyBkZXZ1ZWx0YS4KKy5UUAorLkIgXC1TLCAtLWxvY2FsLCAtLXNlcnZlcj1bL1s8ZG9taW5pbz5dL1tkb21pbmlvL11dWzxkaXJlY2Np824gSVA+WyM8cHVlcnRvPl1bQDxJUCBkZSByZW1pdGVudGU+fDxpbnRlcmZhY2U+WyM8cHVlcnRvPl1dCitFc3BlY2lmaWNhciBsYSBkaXJlY2Np824gSVAgZGUgc2Vydmlkb3JlcyB1cHN0cmVhbSBkaXJlY3RhbWVudGUuIEZpamFyCitlc3RhIG9wY2nzbiBubyBzdXByaW1lIGxhIGxlY3R1cmEgZGUgL2V0Yy9yZXNvbHYuY29uZiwgdXNlIC1SIHBhcmEKK2hhY2VyIGVzby4gU2kgdW5vIGEgbeFzIGRvbWluaW9zIG9wY2lvbmFsZXMgc29uIGJyaW5kYWRvcywgZXNlIHNlcnZpZG9yCitlcyB1c2FkbyBzb2xvIHBhcmEgZXNvcyBkb21pbmlvcyB5IGxhcyBi+nNxdWVkYXMgc29uIGhlY2hhcyB1c2FuZG8KK2VsIHNlcnZpZG9yIGVzcGVjaWZpY2FkbyBzb2xhbWVudGUuIExhIGludGVuY2nzbiBkZSBlc3RvIGVzIHBhcmEgZWwKK3VzbyBjb24gc2Vydmlkb3JlcyBETlMgcHJpdmFkb3M6IHNpIHVzdGVkIHRpZW5lIHVuIHNlcnZpZG9yIEROUyBlbiBzdQorcmVkIGVsIGN1YWwgbGlkZWEgY29uIG5vbWJyZXMgZGUgbGEgZm9ybWEKK3h4eC5pbnRlcm5hbC50aGVrZWxsZXlzLm9yZy51ayBlbiAxOTIuMTY4LjEuMSBlbnRvbmNlcyBicmluZGFyIGxhCitvcGNp824KKy5CIC1TIC9pbnRlcm5hbC50aGVrZWxsZXlzLm9yZy51ay8xOTIuMTY4LjEuMQorZW52aWFy4SB0b2RhcyBsYXMgYvpzcXVlZGFzIGRlIG3hcXVpbmFzIGludGVybmFzIGEgZXNlIHNlcnZpZG9yIEROUywKK3RvZGFzIGxhcyBkZW3hcyBi+nNxdWVkYXMgc2Vy4W4gZW52aWFkYXMgYSBsb3Mgc2Vydmlkb3JlcyBlbgorL2V0Yy9yZXNvbHYuY29uZi4gVW5hIGVzcGVjaWZpY2FjafNuIGRlIGRvbWluaW8gZW4gYmxhbmNvLAorLkIgLy8KK3RpZW5lIGVsIHNpZ25pZmljYWRvIGVzcGVjaWFsIGRlICJzb2xvIG5vbWJyZXMgbm8gY2FsaWZpY2Fkb3MiLCBvCitzZWEgbm9tYnJlcyBzaW4gbmluZ/puIHB1bnRvIGVuIGVsbG9zLiBVbiBwdWVydG8gbm8tZXN04W5kYXIgcHVlZGUKK3NlciBlc3BlY2lmaWNhZG8gY29tbyBwYXJ0ZSBkZSBsYSBkaXJlY2Np824gSVAgdXNhbmRvIGVsIGNhcmFjdGVyCisjLiBN4XMgZGUgdW5hIG9wY2nzbiAtUyBlcyBwZXJtaXRpZGEsIGNvbiBwYXJ0ZXMgZGUgZG9taW5pbyBvCitkaXJlY2Np824gSVAgcmVwZXRpZGFzIGNvbW8gc2VhIG5lY2VzYXJpby4KKworVGFtYmnpbiBzZSBwZXJtaXRlIHVuYSBvcGNp824gLVMgbGEgY3VhbCBicmluZGEgdW4gZG9taW5pbyBwZXJvCituaW5ndW5hIGRpcmVjY2nzbiBJUDsgZXN0byBsZSBkaWNlIGEgZG5zbWFzcSBxdWUgdW4gZG9taW5pbyBlcyBsb2NhbAoreSBwdWVkZSByZXNwb25kZXIgYSBi+nNxdWVkYXMgZGVzZGUgL2V0Yy9ob3N0cyBvIERIQ1AgcGVybyBudW5jYQorZGViZXLhIHJlZW52aWFyIGL6c3F1ZWRhcyBlbiBlc2UgZG9taW5pbyBhIG5pbmf6biBzZXJ2aWRvciB1cHN0cmVhbS4KKy5CIGxvY2FsCitlcyB1biBzaW7zbmltbyBkZQorLkIgc2VydmVyCitwYXJhIGhhY2VyIGxvcyBhcmNoaXZvcyBkZSBjb25maWd1cmFjafNuIG1hcyBjbGFyb3MgZW4gZXN0ZSBjYXNvLgorCitFbCBzdHJpbmcgb3BjaW9uYWwgZGVzcHVlcyBkZWwgY2Fy4WN0ZXIgQCBsZSBkaWNlIGEgZG5zbWFzcSBjb21vIGZpamFyCitlbCByZW1pdGVudGUgZGUgbGFzIGL6c3F1ZWRhcyBoYWNpYSBlc3RlIHNlcnZpZG9yIEROUy4gRGViZSBzZXIgdW5hCitkaXJlY2Np824gSVAsIGxhIGN1YWwgZGViZSBzZXIgcGVydGVuZWNpZW50ZSBhIGxhIG3hcXVpbmEgZW4gbGEgY3VhbAorY29ycmUgZG5zbWFzcSwgZGUgZm9ybWEgY29udHJhcmlhIGVzdGEgbO1uZWEgZGUgc2Vydmlkb3Igc2Vy4SBiaXRhY29yZWFkYQoreSBkZXNwdelzIGlnbm9yYWRhLCBvIHVuIG5vbWJyZSBkZSBpbnRlcmZhY2UuIFNpIHVuIG5vbWJyZSBkZSBpbnRlcmZhY2UKK2VzIGJyaW5kYWRvLCBlbnRvbmNlcyBi+nNxdWVkYXMgaGFjaWEgZWwgc2Vydmlkb3Igc2Vy4W4gZm9yemFkYXMgdu1hIGVzYQoraW50ZXJmYWNlOyBzaSB1bmEgZGlyZWNjafNuIElQIGVzIGJyaW5kYWRhLCBlbnRvbmNlcyBsYSBkaXJlY2Np824gZGUKK3JlbWl0ZW50ZSBkZSBsYXMgYvpzcXVlZGFzIHNlcuEgZmlqYWRhIGEgZXNhIGRpcmVjY2nzbi4KK0xhIGV0aXF1ZXRhIHF1ZXJ5LXBvcnQgZXMgaWdub3JhZGEgcGFyYSBjdWFscXVpZXIgc2Vydmlkb3JlcyBxdWUgdGVuZ2FuCit1bmEgZGlyZWNjafNuIHJlbWl0ZW50ZSBlc3BlY2lmaWNhZGEsIHBlcm8gZWwgcHVlcnRvIHB1ZWRlIHNlcgorZXNwZWNpZmljYWRvIGRpcmVjdGFtZW50ZSBjb21vIHBhcnRlIGRlIGxhIGRpcmVjY2nzbiByZW1pdGVudGUuIEZvcnphcgorYvpzcXVlZGFzIGEgdW5hIGludGVyZmFjZSBubyBlc3ThIGltcGxlbWVudGFkbyBlbiB0b2RhcyBsYXMgcGxhdGFmb3JtYXMKK3NvcG9ydGFkYXMgcG9yIGRuc21hc3EuCisuVFAKKy5CIFwtQSwgLS1hZGRyZXNzPS88ZG9taW5pbz4vW2RvbWluaW8vXTxkaXJlY2Np824gSVA+CitFc3BlY2lmaWNhciB1bmEgZGlyZWNjafNuIElQIHBhcmEgcmV0b3JuYXIgcG9yIGN1YWxxdWllciBob3N0IGVuCitsb3MgZG9taW5pb3MgYnJpbmRhZG9zLiBC+nNxdWVkYXMgZW4gZXN0b3MgZG9taW5pb3MgbnVuY2Egc29uCityZWVudmlhZGFzLCB5IHNpZW1wcmUgc29uIHJlc3BvbmRpZGFzIGNvbiBsYSBkaXJlY2Np824gSVAKK2VzcGVjaWZpY2FkYSwgbGEgY3VhbCBwdWVkZSBzZXIgSVB2NCBvIElQdjYuIFBhcmEgYnJpbmRhciBhbWJhcworZGlyZWNjaW9uZXMgSVB2NCB5IElQdjYgcGFyYSB1biBkb21pbmlvLCB1c2FyIG9wY2lvbmVzIC1BIHJlcGV0aWRhcy4KK07zdGVzZSBxdWUgL2V0Yy9ob3N0cyB5IGFycmllbmRvcyBESENQIGludmFsaWRhbiBlc3RvIHBhcmEgbm9tYnJlcworaW5kaXZpZHVhbGVzLiBVbiB1c28gY29t+m4gcGFyYSBlc3RvIGVzIHJlZGlyZWNjaW9uYXIgZWwgZG9taW5pbworZG91YmxlY2xpY2submV0IGVudGVybyBhIGFsZ/puIHNlcnZpZG9yIHdlYiBsb2NhbCBhbWlnYWJsZSBwYXJhCitldml0YXIgYmFubmVycyBkZSBwdWJsaWNpZGFkLiBMYSBlc3BlY2lmaWNhY2nzbiBmdW5jaW9uYSBkZSBsYSBtaXNtYQorZm9ybWEgcXVlIGNvbiAtLXNlcnZlciwgY29uIGxhIGZhY2lsaWRhZCBhZGljaW9uYWwgcXVlIC8jLyBjb2luY2lkZQorY29uIGN1YWxxdWllciBkb21pbmlvLiBEZSB0YWwgZm9ybWEsIC0tYWRkcmVzcz0vIy8xLjIuMy40IHNpZW1wcmUKK3JldG9ybmFy4SAxLjIuMy40IHBhcmEgY3VhbHF1aWVyIGL6c3F1ZWRhIG5vIHJlc3BvbmRpZGEgZGVzZGUKKy9ldGMvaG9zdHMgbyBESENQIHkgcXVlIG5vIGhheWEgc2lkbyBlbnZpYWRhIGEgdW4gc2Vydmlkb3IgRE5TCit1cHN0cmVhbSBwb3IgdW5hIGRpcmVjdGl2YSAtLXNlcnZlciBtYXMgZXNwZWNpZmljYS4KKy5UUAorLkIgXC1tLCAtLW14LWhvc3Q9PG5vbWJyZSBteD5bWyw8bm9tYnJlIGRlIGhvc3Q+XSw8cHJlZmVyZW5jaWE+XQorUmV0b3JuYXIgdW4gcmVjb3JkIGxsYW1hZG8gPG14IG5hbWU+IGFwdW50YW5kbyBoYWNpYSBlbCBub21icmUgZGUKK2hvc3QgYnJpbmRhZG8gKG9wY2lvbmFsbWVudGUpLCBvIGVsIGhvc3QgZXNwZWNpZmljYWRvIGVuIGxhIG9wY2nzbgorLS1teC10YXJnZXQsIG8gc2kgZXNhIG9wY2nzbiBubyBlcyBicmluZGFkYSwgZWwgaG9zdCBlbiBlbCBjdWFsCitkbnNtYXNxIGVzdOEgY29ycmllbmRvLiBFbCBwcmVkZXRlcm1pbmFkbyBlcyD6dGlsIHBhcmEgcmVkaXJlY2Npb25hcgorY29ycmVvIGRlIHNpc3RlbWFzIGVuIGxhIHJlZCBsb2NhbCBoYWNpYSB1biBzZXJ2aWRvciBjZW50cmFsLiBMYQorb3BjafNuIGRlIHByZWZlcmVuY2lhIGVzIG9wY2lvbmFsLCB5IHN1IHByZWRldGVybWluYWRvIGVzIDEgc2kgbm8KK2VzIGJyaW5kYWRhLiBN4XMgZGUgdW4gcmVjb3JkIE1YIHB1ZWRlIHNlciBicmluZGFkbyBwYXJhIHVuIGhvc3QuCisuVFAgCisuQiBcLXQsIC0tbXgtdGFyZ2V0PTxub21icmUgZGUgaG9zdD4KK0VzcGVjaWZpY2FyIGVsIHRhcmdldCBwcmVkZXRlcm1pbmFkbyBwYXJhIGVsIHJlY29yZCBNWCBkZXZ1ZWx0bworcG9yIGRuc21hc3EuIFZlciAtLW14LWhvc3QuIFNpIC0tbXgtdGFyZ2V0IGVzIGJyaW5kYWRvLCBwZXJvIG5vCistLW14LWhvc3QsIGVudG9uY2VzIGRuc21hc3EgZGV2dWVsdmUgdW4gcmVjb3JkIE1YIGNvbnRlbmllbmRvCitlbCB0YXJnZXQgTVggcGFyYSBi+nNxdWVkYXMgTVggZW4gZWwgbm9tYnJlIGRlIGhvc3QgZGUgbGEgbeFxdWluYSBkb25kZQorZG5zbWFzcSBlc3ThIGNvcnJpZW5kby4KKy5UUAorLkIgXC1lLCAtLXNlbGZteAorUmV0b3JuYXIgdW4gcmVjb3JkIE1YIGFwdW504W5kb3NlIGEgc+0gbWlzbW8gcGFyYSBjYWRhIG3hcXVpbmEgbG9jYWwuCitN4XF1aW5hcyBsb2NhbGVzIHNvbiBhcXVlbGxhcyBlbiAvZXRjL2hvc3RzIG8gY29uIGFycmllbmRvcyBESENQLgorLlRQIAorLkIgXC1MLCAtLWxvY2FsbXgKK1JldG9ybmFyIHVuIHJlY29yZCBNWCBhcHVudGFuZG8gYWwgaG9zdCBicmluZGFkbyBwb3IgbXgtdGFyZ2V0IChvCitsYSBt4XF1aW5hIGRvbmRlIGRuc21hc3EgZXN04SBjb3JyaWVuZG8pIHBhcmEgY2FkYSBt4XF1aW5hIGxvY2FsLgorTeFxdWluYXMgbG9jYWxlcyBzb24gYXF1ZWxsYXMgZW4gL2V0Yy9ob3N0cyBvIGNvbiBhcnJpZW5kb3MgREhDUC4KKy5UUAorLkIgXC1XLCAtLXNydi1ob3N0PTxfc2VydmljaW8+LjxfcHJvdD4uWzxkb21pbmlvPl0sWzx0YXJnZXQ+Wyw8cHVlcnRvPlssPHByaW9yaWRhZD5bLDxwZXNvPl1dXV0KK1JldG9ybmFyIHVuIHJlY29yZCBETlMgU1JWLiBWZXIgUkZDMjc4MiBwYXJhIGRldGFsbGVzLiBTaSBubyBlcworYnJpbmRhZGEsIGVsIGRvbWluaW8gc2UgcHJlZGV0ZXJtaW5hIGEgZWwgYnJpbmRhZG8gcG9yCisuQiAtLWRvbWFpbi4KK0VsIHByZWRldGVybWluYWRvIHBhcmEgZWwgZG9taW5pbyB0YXJnZXQgZXN04SB2YWPtbywgZWwgcHJlZGV0ZXJtaW5hZG8KK3BhcmEgcHVlcnRvIGVzIHVubywgeSBsb3MgcHJlZGV0ZXJtaW5hZG9zIHBhcmEgcGVzbyB5IHByaW9yaWRhZCBzb24gY2Vyby4KK1RlbmVyIGN1aWRhZG8gYWwgdHJhbnNwb25lciBkYXRhIGRlc2RlIGFyY2hpdm9zIGRlIHpvbmEgQklORDogbG9zCitu+m1lcm9zIGRlIHB1ZXJ0bywgcGVzbywgeSBwcmlvcmlkYWQgZXN04W4gZW4gdW4gb3JkZW4gZGlmZXJlbnRlLiBN4XMKK2RlIHVuIHJlY29yZCBTUlYgcGFyYSB1biBzZXJ2aWNpby9kb21pbmlvIGVzIHBlcm1pdGlkbywgdG9kb3MgbG9zIHF1ZQorY29pbmNpZGFuIHNvbiByZXRvcm5hZG9zLgorLlRQCisuQiBcLVksIC0tdHh0LXJlY29yZD08bm9tYnJlPltbLDx0ZXh0bz5dLDx0ZXh0bz5dCitSZXRvcm5hciB1biBy6WNvcmQgRE5TIFRYVC4gRWwgdmFsb3IgZGVsIHLpY29yZCBUWFQgZXMgdW5hIHNlcmllIGRlCitzdHJpbmdzLCBhc+0gcXVlIGN1YWxxdWllciBu+m1lcm8gcHVlZGUgc2VyIGluY2x1aWRvLCBkaXZpZGlkbyBwb3IKK2NvbWFzLgorLlRQCisuQiAtLXB0ci1yZWNvcmQ9PG5vbWJyZT5bLDx0YXJnZXQ+XQorUmV0b3JuYXIgdW4gculjb3JkIEROUyBQVFIuCisuVFAKKy5CIC0tbmFwdHItcmVjb3JkPTxub21icmU+LDxvcmRlbj4sPHByZWZlcmVuY2lhPiw8b3BjaW9uZXM+LDxzZXJ2aWNpbz4sPHJlZ2V4cD5bLDxyZW1wbGF6bz5dCitSZXRvcm5hciB1biBy6WNvcmQgRE5TIE5BUFRSLCBjb21vIGVzcGVjaWZpY2FkbyBlbiBSRkMzNDAzLgorLlRQCisuQiAtLWNuYW1lPTxjbmFtZT4sPHRhcmdldD4KK1JldG9ybmFyIHVuIGV4cGVkaWVudGUgQ05BTUUgcXVlIGluZGljYSBxdWUgPGNuYW1lPiBlcyByZWFsbWVudGUgPHRhcmdldD4uIEhheQorbGltaXRhY2lvbmVzIHNpZ25pZmljYXRpdmFzIGVuIGVsIHRhcmdldC4gRGViZSBzZXIgdW4gbm9tYnJlIEROUyBxdWUgbGUgZXMgY29ub2NpZG8KK2EgZG5zbWFzcSBkZXNkZSAvZXRjL2hvc3RzIChvIGFyY2hpdm9zIGhvc3RzIGFkaWNpb25hbGVzKSBvIGRlIERIQ1AuIFNpIGVsIHRhcmdldAorbm8gc2F0aXNmYWNlIGVzdGUgY3JpdGVyaW8sIGVsIGNuYW1lIGVudGVybyBlcyBpZ25vcmFkby4gRWwgY25hbWUgZGViZSBzZXIg+m5pY28sCitwZXJvIGVzIHBlcm1pc2libGUgdGVuZXIgbeFzIGRlIHVuIGNuYW1lIGluZGljYW5kbyBlbCBtaXNtbyB0YXJnZXQuCisuVFAKKy5CIC0taW50ZXJmYWNlLW5hbWU9PG5vbWJyZT4sPGludGVyZmFjZT4KK1JldG9ybmFyIHVuIGV4cGVkaWVudGUgRE5TLCBhc29jaWFuZG8gZWwgbm9tYnJlIGNvbiBsYSBkaXJlY2Np824gcHJpbWFyaWEKK2VuIGxhIGludGVyZmFjZSBicmluZGFkYS4gRXN0YSBvcGNp824gZXNwZWNpZmljYSB1biBleHBlZGllbnRlIHRpcG8gQQorcGFyYSBlbCBub21icmUgYnJpbmRhZG8gZGUgbGEgbWlzbWEgZm9ybWEgcXVlIHVuYSBs7W5lYSBkZSAvZXRjL2hvc3RzLAorZXhjZXB0byBxdWUgbGEgZGlyZWNjafNuIG5vIGVzIGNvbnN0YW50ZSB5IGVzIGVuIHZleiB0b21hZGEgZGUgbGEKK2ludGVyZmFjZSBicmluZGFkYS4gU2kgbGEgaW50ZXJmYWNlIGVzdOEgZGVzaGFiaWxpdGFkYSwgbvMgY29uZmlndXJhZGEsCitvIG7zIGV4aXN0ZW50ZSwgdW4gculjb3JkIHZhY+1vIGVzIGRldnVlbHRvLiBFbCBy6WNvcmQgUFRSIHJlbGV2YW50ZQordGFtYmllbiBlcyBjcmVhZG8sIHRyYXphbmRvIGxhIGRpcmVjY2nzbiBkZSBsYSBpbnRlcmZhY2UgYSBlbCBub21icmUuCitN4XMgZGUgdW4gbm9tYnJlIHB1ZWRlIHNlciBhc29jaWFkbyBjb24gdW5hIGRpcmVjY2nzbiBkZSBpbnRlcmZhY2UsCityZXBpdGllbmRvIGxhIG9wY2nzbi4gRW4gdGFsIGNhc28sIGxhIHByaW1lcmEgaW5zdGFuY2lhIGVzIHVzYWRhIHBhcmEKK2xhIHRyYXphIHJldmVyc2EgZGlyZWNjafNuLWEtbm9tYnJlLgorLlRQCisuQiBcLWMsIC0tY2FjaGUtc2l6ZT08dGFtYfFvIGRlIGNhY2jpPgorRmlqYXIgZWwgdGFtYfFvIGRlbCBjYWNo6SBkZSBkbnNtYXNxLiBFbCBwcmVkZXRlcm1pbmFkbyBlcyAxNTAgbm9tYnJlcy4KK0ZpamFyIGVsIHRhbWHxbyBhIGNlcm8gZGVzaGFiaWxpdGEgZWwgY2FjaOkuCisuVFAKKy5CIFwtTiwgLS1uby1uZWdjYWNoZQorRGVzaGFiaWxpdGFyIGNhY2jpIG5lZ2F0aXZvLiBFbCBjYWNo6SBuZWdhdGl2byBsZSBwZXJtaXRlIGEgZG5zbWFzcQorcmVjb3JkYXIgcmVzdWx0YWRvcyB0aXBvICJkb21pbmlvIG5vIGV4aXN0ZSIgZGVzZGUgc2Vydmlkb3JlcyBETlMKK3Vwc3RyZWFtIHkgcmVzcG9uZGVyIGL6c3F1ZWRhcyBpZOludGljYXMgc2luIHJlZW52aWFybGFzIG51ZXZhbWVudGUuCisuVFAKKy5CIFwtMCwgLS1kbnMtZm9yd2FyZC1tYXg9PGL6c3F1ZWRhcz4KK0ZpamFyIGVsIG76bWVybyBt4XhpbW8gZGUgYvpzcXVlZGFzIEROUyBzaW11bHThbmVhcy4gRWwgdmFsb3IKK3ByZWRldGVybWluYWRvIGVzIDE1MCwgbG8gY3XhbCBkZWJlcu1hIGVzdGFyIGJpZW4gcGFyYSBsYSBtYXlvcu1hCitkZSBjYXNvcy4gTGEg+m5pY2Egc2l0dWFjafNuIGNvbm9jaWRhIGRvbmRlIGVzdG8gZGViZSBzZXIgaW5jcmVtZW50YWRvCitlcyBhbCB1c2FyIHJlc29sdmVkb3JlcyBkZSBiaXThY29yYXMgZGUgc2Vydmlkb3JlcyB3ZWIsIGxvcyBjdWFsZXMgcHVlZGVuCitnZW5lcmFyIHVuIG76bWVybyBpbm1lbnNvIGRlIGL6c3F1ZWRhcyBzaW11bHThbmVhcy4KKy5UUAorLkIgXC1GLCAtLWRoY3AtcmFuZ2U9W1tuZXQ6XW5ldHdvcmstaWQsXTxkaXJlY2Np824taW5pY2lvPiw8ZGlyZWNjafNuLWZpbmFsPltbLDxt4XNjYXJhPl0sPGJyb2FkY2FzdD5dWyw8dGllbXBvIGRlIGFycmllbmRvPl0KK0hhYmlsaXRhciBlbCBzZXJ2aWRvciBESENQLiBEaXJlY2Npb25lcyBzZXLhbiBkaXN0cmlidWlkYXMgZGVzZGUgZWwKK3JhbmdvIDxkaXJlY2Np824taW5pY2lvPiBoYXN0YSA8ZGlyZWNjafNuLWZpbmFsPiB5IGRlc2RlIGRpcmVjY2lvbmVzIGRlZmluaWRhcworZXN04XRpY2FtZW50ZSBlbiBvcGNpb25lcworLkIgZGhjcC1ob3N0CitTaSBlbCB0aWVtcG8gZGUgYXJyaWVuZG8gZXMgZXNwZWNpZmljYWRvLCBlbnRvbmNlcyBhcnJpZW5kb3Mgc2Vy4W4KK290b3JnYWRvcyBwb3IgZXNhIGNhbnRpZGFkIGRlIHRpZW1wby4gRWwgdGllbXBvIGRlIGFycmllbmRvIGVzIGVuCitzZWd1bmRvcywgbyBtaW51dG9zIChwb3IgZWplbXBsbywgNDVtKSwgdSBob3JhcyAocG9yIGVqZW1wbG8sIDFoKSwgbworImluZmluaXRlIi4gU2kgbm8gZXMgYnJpbmRhZGEsIGVsIHRpZW1wbyBkZSBhcnJpZW5kbyBwcmVkZXRlcm1pbmFkbworZXMgZGUgdW5hIGhvcmEuIEVsIHRpZW1wbyBkZSBhcnJpZW5kbyBt7W5pbW8gZXMgZGUgZG9zIG1pbnV0b3MuCitFc3RhIG9wY2nzbiBwdWVkZSBzZXIgcmVwZXRpZGEsIGNvbiBkaWZlcmVudGVzCitkaXJlY2Npb25lcywgcGFyYSBoYWJpbGl0YXIgc2VydmljaW8gREhDUCBlbiBt4XMgZGUgdW5hIHJlZC4gUGFyYQorcmVkZXMgY29uZWN0YWRhcyBkaXLpY3RhbWVudGUgKGVuIG90cmFzIHBhbGFicmFzLCByZWRlcyBlbiBsYXMKK2N1YWxlcyBsYSBt4XF1aW5hIGNvcnJpZW5kbyBkbnNtYXNxIHRpZW5lIHVuYSBpbnRlcmZhY2UpIGxhCitt4XNjYXJhIGRlIHN1YnJlZCBlcyBvcGNpb25hbC4gUGVybywgZXMgcmVxdWVyaWRhIHBhcmEgcmVkZXMgcXVlCityZWNpYmVuIHNlcnZpY2lvIERIQ1Agdu1hIHVuIGFnZW50ZSBkZSByZWxheS4gTGEgZGlyZWNjafNuIGRlCiticm9hZGNhc3Qgc2llbXByZSBlcyBvcGNpb25hbC4gU2llbXByZSBzZSBwZXJtaXRlIHRlbmVyIG3hcyBkZQordW4gcmFuZ28gZGhjcCAoZGhjcC1yYW5nZSkgZW4gdW5hIHN1YnJlZC4gRWwgcGFy4W1ldHJvIG9wY2lvbmFsCituZXR3b3JrLWlkIGVzIHVuYSBldGlxdWV0YSBhbGZhbnVt6XJpY2EgbGEgY3VhbCBtYXJjYSBlc3RhIHJlZCBkZQordGFsIGZvcm1hIHF1ZSBvcGNpb25lcyBkaGNwIHB1ZWRhbiBzZXIgZXNwZWNpZmljYWRhcyBlbiBiYXNlIGEgY2FkYSByZWQuCitDdWFuZG8gZXMgcHJlZmlqYWRhIGNvbiAnbmV0OicgZW50b25jZXMgZWwgc2lnbmlmaWNhZG8gY2FtYmlhCitkZSAiZmlqYXIgZXRpcXVldGEiIGEgImNvaW5jaWRpciBjb24gZXRpcXVldGEiLiBTb2xvIHVuYSBldGlxdWV0YSBwdWVkZQorc2VyIGZpamFkYSwgcGVybyBt4XMgZGUgdW5hIHB1ZWRlIHNlciByZXZpc2FkYSBwb3IgY29pbmNpZGVuY2lhcy4gTGEKK2RpcmVjY2nzbiBmaW5hbCBwdWVkZSBzZXIgcmVtcGxhemFkYSBwb3IgbGEgcGFsYWJyYSBjbGF2ZQorLkIgc3RhdGljCitsYSBjdWFsIGxlIGRpY2UgYSBkbnNtYXNxIHF1ZSBkZWJlIGhhYmlsaXRhciBESENQIHBhcmEgbGEgcmVkCitlc3BlY2lmaWNhZGEsIHBlcm8gbm8gYWxvY2FyIGRpbuFtaWNhbWVudGUgZGlyZWNjaW9uZXMgSVA6CitTb2xvIGhvc3RzIHF1ZSB0aWVuZW4gZGlyZWNjaW9uZXMgZXN04XRpY2FzIGJyaW5kYWRhcyB27WEKKy5CIGRoY3AtaG9zdAorbyBkZXNkZSAvZXRjL2V0aGVycyBzZXLhbiBzZXJ2aWRhcy4gTGEgZGlyZWNjafNuIGZpbmFsIHB1ZWRlIHNlcgorcmVtcGxhemFkYSBwb3IgbGEgcGFsYWJyYSBjbGF2ZQorLkIgcHJveHkKK2Nhc28gZW4gZWwgY3VhbCBkbnNtYXNxIHByb3ZlZXLhIHByb3h5LURIQ1AgZW4gbGEgc3VicmVkIGVzcGVjaWZpY2FkYS4gKFZlcgorLkIgcHhlLXByb21wdAoreQorLkIgcHhlLXNlcnZpY2UKK3BhcmEgZGV0YWxsZXMuKQorLlRQCisuQiBcLUcsIC0tZGhjcC1ob3N0PVs8ZGlyZWNjafNuIGRlIGhhcmR3YXJlPl1bLGlkOjxjbGllbnRfaWQ+fCpdWyxuZXQ6PG5ldGlkPl1bLDxkaXJlY2Np824gSVA+XVssPG5vbWJyZSBkZSBob3N0Pl1bLDx0aWVtcG8gZGUgYXJyaWVuZG8+XVssaWdub3JlXQorRXNwZWNpZmljYXIgcGFy4W1ldHJvcyBwb3IgaG9zdCBwYXJhIGVsIHNlcnZpZG9yIERIQ1AuIEVzdG8gcGVybWl0ZQorcXVlIHVuYSBt4XF1aW5hIGNvbiB1bmEgZGlyZWNjafNuIGRlIGhhcmR3YXJlIHBhcnRpY3VsYXIgc2VhIHNpZW1wcmUKK2Fsb2NhZGEgZWwgbWlzbW8gbm9tYnJlIGRlIGhvc3QsIGRpcmVjY2nzbiBJUCwgeSB0aWVtcG8gZGUgYXJyaWVuZG8uCitVbiBub21icmUgZGUgaG9zdCBlc3BlY2lmaWNhZG8gZGUgZXN0YSBtYW5lcmEgdG9tYSBwcmVzZWRlbmNpYQorc29icmUgY3VhbHF1aWVyYSBzdW1pbmlzdHJhZG8gcG9yIGVsIGNsaWVudGUgREhDUCBlbiBsYSBt4XF1aW5hLgorVGFtYmnpbiBzZSBwZXJtaXRlIG9taXRpciBsYSBkaXJlY2Npb24gZGUgaGFyZHdhcmUgeSBpbmNsdWlyIGVsCitub21icmUgZGUgaG9zdDsgZW4gdGFsIGNhc28gbGEgZGlyZWNjafNuIElQIHkgbG9zIHRpZW1wb3MgZGUgYXJyaWVuZG8KK3NlcuFuIGFwbGljYWJsZXMgYSBjdWFscXVpZXIgbeFxdWluYSBxdWUgcmVjbGFtZSBlc2Ugbm9tYnJlLgorUG9yIGVqZW1wbG86CisuQiAtLWRoY3AtaG9zdD0wMDoyMDplMDozYjoxMzphZix3YXAsaW5maW5pdGUKK2xlIGRpY2UgYSBkbnNtYXNxIHF1ZSBkZWJlIGRhcmxlIGEgbGEgbeFxdWluYSBjb24gZGlyZWNjafNuCitldGhlcm5ldCAwMDoyMDplMDozYjoxMzphZiBlbCBub21icmUgd2FwLCB5IHVuIGFycmllbmRvIERIQ1AgaW5maW5pdG8uCisuQiAtLWRoY3AtaG9zdD1sYXAsMTkyLjE2OC4wLjE5OQorbGUgZGljZSBhIGRuc21hc3EgcXVlIHNpZW1wcmUgZGViZSBhbG9jYXJsZSBhIGxhIG1hcXVpbmEgbGFwCitsYSBkaXJlY2Np824gSVAgMTkyLjE2OC4wLjE5OS4gRGlyZWNjaW9uZXMgYWxvY2FkYXMgZGUgZXN0YSBtYW5lcmEKK25vIHRpZW5lbiBxdWUgZXN0YXIgZGVudHJvIGRlbCByYW5nbyBkYWRvIGNvbiBsYSBvcGNp824gLS1kaGNwLXJhbmdlLAorcGVybyBkZWJlbiBlc3RhciBlbiBsYSByZWQgc2llbmRvIHNlcnZpZGEgcG9yIGVsIHNlcnZpZG9yIERIQ1AuIFNlCitwZXJtaXRlIHVzYXIgaWRlbnRpZmljYWRvcmVzIGRlIGNsaWVudGVzIGVuIHZleiBkZSBkaXJlY2Npb25lcyBkZQoraGFyZHdhcmUgcGFyYSBpZGVudGlmaWNhciBob3N0cyBwcmVmaWphbmRvICdpZDonLiBPIHNlYSBxdWU6CisuQiAtLWRoY3AtaG9zdD1pZDowMTowMjowMzowNCwuLi4uLgorc2UgcmVmaWVyZSBhbCBob3N0IGNvbiBpZGVudGlmaWNhZG9yIGRlIGNsaWVudGUgMDE6MDI6MDM6MDQuCitUYW1iaeluIHNlIHBlcm1pdGUgZXNwZWNpZmljYXIgZWwgSUQgZGUgY2xpZW50ZSBjb21vIHRleHRvLCBhc+06CisuQiAtLWRoY3AtaG9zdD1pZDppZGRlY2xpZW50ZWNvbW90ZXh0bywuLi4uLgorCitMYSBvcGNp824gZXNwZWNpYWwgaWQ6KiBzaWduaWZpY2EgImlnbm9yYXIgY3VhbHF1aWVyIElEIGRlIGNsaWVudGUKK3kgdXNhciBzb2xhbWVudGUgZGlyZWNjaW9uZXMgTUFDLiIgRXN0byBlcyD6dGlsIGN1YW5kbyB1biBjbGllbnRlCitwcmVzZW50YSB1biBJRCBkZSBjbGllbnRlIGFsZ3VuYXMgdmVjZXMgcGVybyBvdHJhcyBuby4KKworU2kgdW4gbm9tYnJlIGFwYXJlY2UgZW4gL2V0Yy9ob3N0cywgbGEgZGlyZWNjafNuIGFzb2NpYWRhIHB1ZWRlCitzZXIgYWxvY2FkYSBhIHVuIGFycmllbmRvIERIQ1AsIHBlcm8gc29sbyBzaSBleGlzdGUgdW5hIG9wY2nzbgorLkIgLS1kaGNwLWhvc3QKK2xhIGN1YWwgZXNwZWNpZmljYSBlbCBub21icmUgdGFtYmnpbi4gTGEgcGFsYWJyYSBjbGF2ZSAiaWdub3JlIgorbGUgZGljZSBhIGRuc21hc3EgcXVlIG5vIGRlYmUgb2ZyZWNlciBqYW3hcyB1biBhcnJpZW5kbyBESENQIGEKK3VuYSBt4XF1aW5hLiBMYSBt4XF1aW5hIHB1ZWRlIHNlciBlc3BlY2lmaWNhZGEgcG9yIGRpcmVjY2nzbiBkZQoraGFyZHdhcmUsIElEIGRlIGNsaWVudGUsIG8gbm9tYnJlIGRlIGhvc3QsIHBvciBlamVtcGxvOgorLkIgLS1kaGNwLWhvc3Q9MDA6MjA6ZTA6M2I6MTM6YWYsaWdub3JlCitFc3RvIGVzIPp0aWwgY3VhbmRvIGhheSBvdHJvIHNlcnZpZG9yIERIQ1AgZW4gbGEgcmVkIHF1ZSBkZWJlIHNlcgordXNhZG8gcG9yIGFsZ/puYXMgbeFxdWluYXMuCisKK0VsIG5ldDo8bmV0d29yay1pZD4gZmlqYSBsYSBldGlxdWV0YSBuZXR3b3JrLWlkIGN1YW5kbyBzZWEgcXVlCitlc3RhIGRpcmVjdGl2YSBkaGNwLWhvc3QgZXN04SBlbiB1c28uIEVzdG8gcHVlZGUgc2VyIHVzYWRvIHBhcmEKK2VudmlhciBzZWxlY3RpdmFtZW50ZSBvcGNpb25lcyBESENQIGEgZXN0ZSBob3N0LiBDdWFuZG8gdW4gaG9zdAorY29pbmNpZGUgY29uIGN1YWxxdWllciBkaXJlY3RpdmEgZGhjcC1ob3N0IChvIHVuYSBpbXBsaWNhZGEgcG9yCisvZXRjL2V0aGVycykgZW50b25jZXMgbGEgZXRpcXVldGEgbmV0d29yay1pZCBlc3BlY2lhbCAia25vd24iIGVzCitmaWphZGEuIEVzdG8gcGVybWl0ZSBxdWUgZG5zbWFzcSBzZWEgY29uZmlndXJhZG8gcGFyYSBpZ25vcmFyCitwZWRpZG9zIGRlc2RlIG3hcXVpbmFzIGRlc2Nvbm9jaWRhcyB1c2FuZG8KKy5CIC0tZGhjcC1pZ25vcmU9I2tub3duCitEaXJlY2Npb25lcyBldGhlcm5ldCAocGVybyBubyBjbGllbnQtaWRzKSBwdWVkZW4gdGVuZXIgYnl0ZXMKK2NvbW9k7W5lcywgYXPtIHF1ZSBwb3IgZWplbXBsbworLkIgLS1kaGNwLWhvc3Q9MDA6MjA6ZTA6M2I6MTM6KixpZ25vcmUKK2NhdXNhcuEgcXVlIGRuc21hc3EgaWdub3JlIHVuIHJhbmdvIGRlIGRpcmVjY2lvbmVzIGV0aGVybmV0LiBO83Rlc2UKK3F1ZSBlbCAiKiIgbmVjZXNpdGFy4SBzZXIgZXNjYXBhZG8gbyBlc2NyaXRvIGVudHJlIGNvbWlsbGFzIGVuIGxhCits7W5lYSBkZSBjb21hbmRvcywgcGVybyBubyBlbiBlbCBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNp824uCisKK0RpcmVjY2lvbmVzIGRlIGhhcmR3YXJlIG5vcm1hbG1lbnRlIGNvaW5jaWRlbiBjb24gY3VhbHF1aWVyCit0aXBvIGRlIHJlZCAoQVJQKSwgcGVybyBlcyBwb3NpYmxlIHJlc3RyaW5naXJsYXMgYSB1biB0aXBvIEFSUAorc2luZ3VsYXIgcHJlY2VkaWVuZG9sbyBjb24gZWwgdGlwbyBBUlAgKGVuIEhFWCkgeSAiLSIuIEFz7SBxdWUKKy5CIC0tZGhjcC1ob3N0PTA2LTAwOjIwOmUwOjNiOjEzOmFmLDEuMi4zLjQKK3NvbG8gY29pbmNpZGly7WEgY29uIHVuYSBkaXJlY2Np824gZGUgaGFyZHdhcmUgVG9rZW4tUmluZywgZGFkbyBxdWUKK2VsIHRpcG8gQVJQIHBhcmEgVG9rZW4tUmluZyBlcyA2LgorCitDb21vIGNhc28gZXNwZWNpYWwsIGVzIHBvc2libGUgaW5jbHVpciBt4XMgZGUgdW5hIGRpcmVjY2nzbiBkZQoraGFyZHdhcmUuIEVqZW1wbG86CisuQiAtLWRoY3AtaG9zdD0xMToyMjozMzo0NDo1NTo2NiwxMjozNDo1Njo3ODo5MDoxMiwxOTIuMTY4LjAuMgorRXN0byBwZXJtaXRlIHF1ZSB1bmEgZGlyZWNjafNuIElQIHNlYSBhc29jaWFkYSBjb24KK2RpcmVjY2lvbmVzIGRlIGhhcmR3YXJlIG36bHRpcGxlcywgeSBsZSBicmluZGEgYSBkbnNtYXNxIHBlcm1pc28KK3BhcmEgYWJhbmRvbmFyIHVuIGFycmllbmRvIERIQ1AgYSB1bmEgZGUgbGFzIGRpcmVjY2lvbmVzIGRlIGhhcmR3YXJlCitjdWFuZG8gb3RyYSBwaWRlIHVuIGFycmllbmRvLiBO83Rlc2UgcXVlIGVzdG8gZXMgYWxnbyBwZWxpZ3Jvc28sCitz82xvIGZ1bmNpb25hcuEgZGVwZW5kaWJsZW1lbnRlIHNpIHVuYSBkZSBsYXMgZGlyZWNjaW9uZXMgZGUgaGFyZHdhcmUKK2VzdOEgYWN0aXZhIGVuIGN1YWxxdWllciBtb21lbnRvIHkgZG5zbWFzcSBubyB0aWVuZSBmb3JtYSBkZSBlbmZvcnphcgorZXN0by4gUGVybyBlcyD6dGlsLCBwb3IgZWplbXBsbywgcGFyYSBhbG9jYXIgdW5hIGRpcmVjY2nzbiBJUCBlc3RhYmxlCithIHVuYSBsYXB0b3AgcXVlIHRpZW5lIGludGVyZmFjZSBhbOFtYnJpY2EgZSBpbmFs4W1icmljYS4KKy5UUAorLkIgLS1kaGNwLWhvc3RzZmlsZT08YXJjaGl2bz4KK0xlZXIgaW5mb3JtYWNp824gaG9zdCBESENQIGRlc2RlIGVsIGFyY2hpdm8gZXNwZWNpZmljYWRvLiBFbCBhcmNoaXZvIGNvbnRpZW5lIGluZm9ybWFjafNuIGRlIHVuIGhvc3QgcG9yIGztbmVhLiBFbCBmb3JtYXRvIGRlIHVuYSBs7W5lYSBlcyBpZ3VhbCBxdWUgdGV4dG8gaGFjaWEgbGEgZGVyZWNoYSBkZSAnPScgZW4gLS1kaGNwLWhvc3QuIExhIHZlbnRhamEgZGUgYWxtYWNlbmFyIGluZm9ybWFjafNuIGhvc3QgREhDUCBlbiBlc3RlIGFyY2hpdm8gZXMgcXVlIHB1ZWRlIHNlciBjYW1iaWFkYSBzaW4gdGVuZXIgcXVlIHJlaW5pY2lhciBkbnNtYXNxLiBFbCBhcmNoaXZvIHNlcuEgcmUtbGXtZG8gY3VhbmRvIGRuc21hc3EgcmVjaWJlIHVuIFNJR0hVUC4KKy5UUAorLkIgLS1kaGNwLW9wdHNmaWxlPTxhcmNoaXZvPgorTGVlciBpbmZvcm1hY2nzbiBzb2JyZSBvcGNpb25lcyBESENQIGRlc2RlIGVsIGFyY2hpdm8gZXNwZWNpZmljYWRvLiBMYQordmVudGFqYSBkZSB1c2FyIGVzdGEgb3BjafNuIGVzIGxhIG1pc21hIHF1ZSBjb24gLS1kaGNwLWhvc3RzZmlsZTogZWwKK2FyY2hpdm8gZGhjcC1vcHRzZmlsZSBzZXLhIHJlLWxl7WRvIGN1YW5kbyBkbnNtYXNxIHJlY2liZSB1biBTSUdIVVAuCisuVFAKKy5CIFwtWiwgLS1yZWFkLWV0aGVycworTGVlciAvZXRjL2V0aGVycyBlbiBidXNjYSBkZSBpbmZvcm1hY2nzbiBzb2JyZSBob3N0cyBwYXJhIGVsIHNlcnZpZG9yCitESENQLiBFbCBmb3JtYXRvIGRlIC9ldGMvZXRoZXJzIGVzIHVuYSBkaXJlY2Np824gZGUgaGFyZHdhcmUsIHNlZ3VpZGEKK3BvciB5YSBzZWEgdW4gbm9tYnJlIGRlIGhvc3QgbyB1bmEgZGlyZWNjafNuIElQLiBBbCBzZXIgbGVpZGFzIHBvcgorZG5zbWFzcSwgZXN0YXMgbO1uZWFzIHRpZW5lbiBleOFjdGFtZW50ZSBlbCBtaXNtbyBlZmVjdG8gcXVlIG9wY2lvbmVzCisuQiAtLWRoY3AtaG9zdAorcXVlIGNvbnRpZW5lbiBsYSBtaXNtYSBpbmZvcm1hY2nzbi4gL2V0Yy9ldGhlcnMgZXMgcmUtbGXtZGEgY3VhbmRvIGRuc21hc3EgcmVjaWJlIHVuIFNJR0hVUC4KKy5UUAorLkIgXC1PLCAtLWRoY3Atb3B0aW9uPVs8bmV0d29yay1pZD4sWzxuZXR3b3JrLWlkPixdXVtlbmNhcDo8b3B0PixdW3ZlbmRvcjpbPHZlbmRvci1jbGFzcz5dLF1bPG9wdD58b3B0aW9uOjxvcHQtbmFtZT5dLFs8dmFsdWU+Wyw8dmFsdWU+XV0KK0VzcGVjaWZpY2FyIG9wY2lvbmVzIGRpZmVyZW50ZXMgbyBleHRyYSBhIGNsaWVudGVzIERIQ1AuIFBvcgorcHJlZGV0ZXJtaW5hZG8sIGRuc21hc3EgZW527WEgYWxndW5hcyBvcGNpb25lcyBlc3ThbmRhciBhIGNsaWVudGVzCitESENQLiBMYSBt4XNjYXJhIGRlIHN1YnJlZCB5IGRpcmVjY2nzbiBicm9hZGNhc3Qgc29uIGZpamFkYXMgaWd1YWwKK2EgbGFzIGRlbCBob3N0IHF1ZSBjb3JyZSBkbnNtYXNxLCB5IGVsIHNlcnZpZG9yIEROUyB5IHJ1dGVhZG9yCithIGxhIGRpcmVjY2nzbiBkZSBsYSBt4XF1aW5hIHF1ZSBjb3JyZSBkbnNtYXNxLiBTaSBsYSBvcGNp824gZGUKK25vbWJyZSBkZSBkb21pbmlvIGhhIHNpZG8gZmlqYWRhLCBlcyBlbnZpYWRhLiBFc3RhIG9wY2nzbiBwZXJtaXRlCitxdWUgZXNvcyBwcmVkZXRlcm1pbmFkb3Mgc2VhbiBzb2JyZXNjcml0b3MsIG8gcXVlIHNlYW4gZXNwZWNpZmljYWRhcworb3RyYXMgb3BjaW9uZXMuIExhIG9wY2nzbiBhIHNlciBlbnZpYWRhIHB1ZWRlIHNlciBicmluZGFkYSBjb21vIHVuCitu+m1lcm8gZGVjaW1hbCBvIGNvbW8gIm9wdGlvbjo8b3B0aW9uLW5hbWU+Ii4gTG9zIG76bWVyb3MgZGUgb3BjafNuCitlc3ThbiBlc3BlY2lmaWNhZG9zIGVuIFJGQzIxMzIgeSBSRkNzIHN1YnNpZ3VpZW50ZXMuIEVsIGp1ZWdvIGRlCitvcHRpb24tbmFtZXMgY29ub2NpZG8gcG9yIGRuc21hc3EgcHVlZGUgc2VyIGRlc2N1YmllcnRvIGVqZWN1dGFuZG8KKyJkbnNtYXNxIC0taGVscCBkaGNwIi4gUG9yIGVqZW1wbG8sIHBhcmEgZmlqYXIgbGEgcnV0YSBwcmVkZXRlcm1pbmFkYSBhCisxOTIuMTY4LjQuNCwgaOFnYXNlIHVuCisuQiAtLWRoY3Atb3B0aW9uPTMsMTkyLjE2OC40LjQKK28KKy5CIC0tZGhjcC1vcHRpb249b3B0aW9uOnJvdXRlciwgMTkyLjE2OC40LjQKK3kgcGFyYSBmaWphciBsYSBkaXJlY2Np824gZGUgc2Vydmlkb3IgZGUgdGllbXBvIGEgMTkyLjE2OC4wLjQsCito4Wdhc2UgdW4KKy5CIC0tZGhjcC1vcHRpb249NDIsMTkyLjE2OC4wLjQKK28KKy5CIC0tZGhjcC1vcHRpb249b3B0aW9uOm50cC1zZXJ2ZXIsIDE5Mi4xNjguMC40CitMYSBkaXJlY2Np824gZXNwZWNpYWwgMC4wLjAuMCBlcyBlbnRlbmRpZGEgcXVlIHNpZ25pZmljYSAibGEKK2RpcmVjY2nzbiBkZSBsYSBt4XF1aW5hIHF1ZSBjb3JyZSBkbnNtYXNxIi4gVGlwb3MgZGUgZGF0YSBwZXJtaXRpZG9zCitzb24gZGlyZWNjaW9uZXMgSVAgZGUgY3VhdHJvIHNlZ21lbnRvcywgdW4gbvptZXJvIGRlY2ltYWwsIGTtZ2l0b3MgaGV4CitzZXBhcmFkb3MgcG9yIGNvbG9uZXMsIHkgdW4gc3RyaW5nIGRlIHRleHRvLiBTaSBsYXMgbmV0d29yay1pZHMKK29wY2lvbmFsZXMgc29uIGJyaW5kYWRhcywgZW50b25jZXMgZXN0YSBvcGNp824gZXMgc29sbyBlbnZpYWRhIGN1YW5kbwordG9kYXMgbGFzIG5ldHdvcmstaWRzIGNvaW5jaWRlbi4KKworUHJvY2VzYW1pZW50byBlc3BlY2lhbCBlcyBsbGV2YWRvIGEgY2FibyBlbiB1biBhcmd1bWVudG8gZGUgdGV4dG8gcGFyYQorbGEgb3BjafNuIDExOSwgZW4gY29uZm9ybWUgY29uIFJGQzMzOTcuIERpcmVjY2lvbmVzIElQIHRleHR1YWxlcyBvIGRlCitjdWF0cm8gc2VnbWVudG9zIGNvbW8gYXJndW1lbnRvcyBhIGxhIG9wY2nzbiAxMjAgc29uIG1hbmVqYWRvcyBtZWRpYW50ZQorUkZDMzM2MS4gRGlyZWNjaW9uZXMgSVAgZGUgY3VhdHJvIHNlZ21lbnRvcyBxdWUgc29uIHNlZ3VpZGFzIHBvciB1biBkaWFnb25hbAorKHNsYXNoKSB5IGRlc3B16XMgdW5hIG3hc2NhcmEgc29uIGNvZGlmaWNhZG9zIG1lZGlhbnRlIFJGQzM0NDIuCisKK1RlbmVyIGN1aWRhZG86IG5pZ3VuYSB2ZXJpZmljYWNp824gZXMgaGVjaGEgc29icmUgc2kgZWwgbvptZXJvIGRlIHRpcG8KK2NvcnJlY3RvIGVzIGVudmlhZG8sIHkgZXMgbXV5IHBvc2libGUgcGVyc3VhZGlyIGEgZG5zbWFzcSBwYXJhIHF1ZQorZ2VuZXJlIHBhcXVldGVzIERIQ1AgaWxlZ2FsZXMgbWVkaWFudGUgdXNvIGluYWRlY3VhZG8gZGUgZXN0YSBvcGNp824uCitDdWFuZG8gZWwgdmFsb3IgZXMgdW4gbvptZXJvIGRlY2ltYWwsIGRuc21hc3EgZGViZSBkZXRlcm1pbmFyIHF16SB0YW4KK2dyYW5kZSBlcyBlbCBvYmpldG8gZGUgZGF0YS4gRXN0byBlcyBoZWNobyBtZWRpYW50ZSB1bmEgZXhhbWluYWNp824gZGVsCitu+m1lcm8gZGUgb3BjafNuLCB5L28gZWwgdmFsb3IsIHBlcm8gcHVlZGUgc2VyIGludmFsaWRhZG8gYWdyZWfhbmRvbGUKK3VuYSBvcGNp824gZGUgdW5hIHNvbGEgbGV0cmEgZGUgZXN0YSBmb3JtYTogYiA9IHVuIGJ5dGUsIHMgPSBkb3MgYnl0ZXMsCitpID0gY3VhdHJvIGJ5dGVzLiBFc3RvIGVzIHByaW5jaXBhbG1lbnRlIPp0aWwgY29uIG9wY2lvbmVzIGVuY2Fwc3VsYWRhcwordGlwbyB2ZW5kZWRvciAodmVyIGFiYWpvKSBkb25kZSBkbnNtYXNxIG5vIHB1ZWRlIGRldGVybWluYXIgZWwgdGFtYfFvCitkZSBkYXRhIHVzYW5kbyBlbCBu+m1lcm8gZGUgb3BjafNuLiBEYXRhIGRlIG9wY2nzbiBsYSBjdWFsIGNvbnNpc3RlCitzb2xvIGRlIHB1bnRvcyB5IGTtZ2l0b3Mgc2Vy4SBpbnRlcnByZXRhZGEgcG9yIGRuc21hc3EgY29tbyB1bmEKK2RpcmVjY2nzbiBJUCwgeSBzZXLhIGluc2VydGFkYSBkZW50cm8gZGUgdW5hIG9wY2nzbiBkZSBlc2EgbWFuZXJhLgorUGFyYSBmb3J6YXIgdW4gc3RyaW5nIGxpdGVyYWwsIHVzYXIgY29taWxsYXMuIFBvciBlamVtcGxvLCBjdWFuZG8gc2UKK3VzYSBsYSBvcGNp824gNjYgcGFyYSBlbnZpYXIgdW5hIElQIGxpdGVyYWwgY29tbyB1biBub21icmUgZGUgc2Vydmlkb3IKK1RGVFAsIGVzIG5lY2VzYXJpbyBoYWNlcjoKKy5CIC0tZGhjcC1vcHRpb249NjYsIjEuMi4zLjQiCisKK09wY2lvbmVzIGVuY2Fwc3VsYWRhcyB2ZW5kb3ItY2xhc3MgdGFtYmnpbiBwdWVkZW4gc2VyIGVzcGVjaWZpY2FkYXMgdXNhbmRvCistLWRoY3Atb3B0aW9uOiBwb3IgZWplbXBsbworLkIgLS1kaGNwLW9wdGlvbj12ZW5kb3I6UFhFQ2xpZW50LDEsMC4wLjAuMAorZW527WEgbGEgb3BjafNuIGVzcGVj7WZpY2EgZGUgY2xhc2UgZGUgdmVuZGVkb3IgIm1mdHAtYWRkcmVzcz0wLjAuMC4wIiBhCitjdWFscXVpZXIgY2xpZW50ZSBjdXlvIHZlbmRvci1jbGFzcworY29pbmNpZGEgY29uICJQWEVDbGllbnQiLiBFbCByZXZpc2FkbyBkZSBjb2luY2lkZW5jaWFzIHZlbmRvci1jbGFzcyBlc3ThCitiYXNhZG8gZW4gc3Vic3RyaW5ncyAodmVyIC0tZGhjcC12ZW5kb3JjbGFzcyBwYXJhIGRldGFsbGVzKS4gU2kgdW5hIG9wY2nzbgordmVuZG9yLWNsYXNzIChu+m1lcm8gNjApIGVzIGVudmlhZGEgcG9yIGRuc21hc3EsIGVudG9uY2VzIGVzIHVzYWRhIHBhcmEKK3NlbGVjY2lvbmFyIG9wY2lvbmVzIGVuY2Fwc3VsYWRhcyBlbiBwcmVmZXJlbmNpYSBzb2JyZSBjdWFscXVpZXJhIGVudmlhZGEKK3BvciBlbCBjbGllbnRlLiBFcyBwb3NpYmxlIG9taXRpciBlbCB2ZW5kb3JjbGFzcyBjb21wbGV0YW1lbnRlOworLkIgLS1kaGNwLW9wdGlvbj12ZW5kb3I6LDEsMC4wLjAuMAorY2FzbyBlbiBlbCBjdeFsIGxhIG9wY2nzbiBlbmNhcHN1bGFkYSBzaWVtcHJlIGVzIGVudmlhZGEuCitPcGNpb25lcyBwdWVkZW4gc2VyIGVuY2Fwc3VsYWRhcyBkZW50cm8gZGUgb3RyYXMgb3BjaW9uZXMsIHBvciBlamVtcGxvOgorLkIgLS1kaGNwLW9wdGlvbj1lbmNhcDoxNzUsIDE5MCwgImlzY3NpLWNsaWVudDAiCitlbnZpYXLhIG9wY2nzbiAxNzUsIGRlbnRybyBkZSBsYSBjdWFsIGVzdOEgb3BjafNuIDE5MC4gU2kgbfpsdGlwbGVzCitvcGNpb25lcyBzb24gYnJpbmRhZGFzIHF1ZSBlc3ThbiBlbmNhcHN1bGFkYXMgY29uIGVsIG1pc21vIG76bWVybyBkZQorb3BjafNuIGVudG9uY2VzIHNlcuFuIGNvcnJlY3RhbWVudGUgY29tYmluYWRhcyBlbiB1bmEgb3BjafNuIGVuY2Fwc3VsYWRhLgorZW5jYXA6IHkgdmVuZG9yOiBubyBwdWVkZW4gc2VyIGZpamFkYXMgYW1iYXMgZGVudHJvIGRlIGxhIG1pc21hIG9wY2nzbiBkaGNwLW9wdGlvbi4KK0xhIGRpcmVjY2nzbiAwLjAuMC4wIG5vIGVzIHRyYXRhZGEgZGUgZm9ybWEgZXNwZWNpYWwgZW4gb3BjaW9uZXMgZW5jYXBzdWxhZGFzLgorLlRQCisuQiAtLWRoY3Atb3B0aW9uLWZvcmNlPVs8bmV0d29yay1pZD4sWzxuZXR3b3JrLWlkPixdXVtlbmNhcDo8b3B0PixdW3ZlbmRvcjpbPHZlbmRvci1jbGFzcz5dLF08b3B0PixbPHZhbHVlPlssPHZhbHVlPl1dCitFc3RvIGZ1bmNpb25hIGV44WN0YW1lbnRlIGRlIGxhIG1pc21hIGZvcm1hIHF1ZQorLkIgLS1kaGNwLW9wdGlvbgorZXhjZXB0byBxdWUgbGEgb3BjafNuIHNpZW1wcmUgc2Vy4SBlbnZpYWRhLCBh+m4gc2kgZWwgY2xpZW50ZSBubyBsYSBwaWRlIGVuCitsYSBsaXN0YSBkZSBwZWRpZG8gZGUgcGFy4W1ldHJvcy4gRXN0byBzZSBuZWNlc2l0YSBhdmVjZXMsIHBvciBlamVtcGxvIGN1YW5kbworZW52aWFuZG8gb3BjaW9uZXMgYSBQWEVMaW51eC4KKy5UUAorLkIgLS1kaGNwLW5vLW92ZXJyaWRlCitEZXNoYWJpbGl0YXIgbGEgcmV1dGlsaXphY2nzbiBkZSBsb3MgY2FtcG9zIERIQ1AgZGUgbm9tYnJlIGRlIHNlcnZpZG9yIHkKK2FyY2hpdm8gY29tbyBlc3BhY2lvIHBhcmEgb3BjaW9uZXMgZXh0cmEuIFNpIHB1ZWRlLCBkbnNtYXNxIG11ZXZlIGxhIGluZm9ybWFjafNuCitkZWwgc2Vydmlkb3IgYm9vdCB5IGRlbCBub21icmUgZGUgYXJjaGl2byAoZGUgZGhjcC1ib290KSBkZSBzdXMgY2FtcG9zIGRlZGljYWRvcworaGFjaWEgb3BjaW9uZXMgREhDUC4gRXN0byBjcmVhIGVzcGFjaW8gZXh0cmEgZW4gZWwgcGFxdWV0ZSBESENQIHBhcmEgb3BjaW9uZXMsCitwZXJvIHB1ZWRlIHJhcmFtZW50ZSBjb25mdW5kaXIgY2xpZW50ZXMgdmllam9zIG8gZGVmZWN0dW9zb3MuIEVzdGEgb3BjafNuIGZvcnphCitjb21wb3J0YW1pZW50byAic2ltcGxlIHkgc2VuY2lsbG8iIHBhcmEgcHJldmVuaXIgcHJvYmxlbWFzIGVuIHRhbGVzIGNhc29zLgorLlRQCisuQiBcLVUsIC0tZGhjcC12ZW5kb3JjbGFzcz08bmV0d29yay1pZD4sPHZlbmRvci1jbGFzcz4KK1RyYXphciBkZXNkZSB1biBzdHJpbmcgdmVuZG9yLWNsYXNzIGEgdW4gbmV0d29yayBpZC4gTGEgbWF5b3LtYSBkZSBsb3MKK2NsaWVudGVzIERIQ1AgcHJvdmVlbiB1bmEgInZlbmRvciBjbGFzcyIgbGEgY3VhbCByZXByZXNlbnRhLCBlbiBjaWVydG8KK3NlbnRpZG8sIGVsIHRpcG8gZGUgaG9zdC4gRXN0YSBvcGNp824gdHJhemEgY2xhc2VzIGRlIHZlbmRlZG9yIGEgbmV0d29yaworaWRzLCBkZSB0YWwgZm9ybWEgcXVlIG9wY2lvbmVzIERIQ1AgcHVlZGVuIHNlciBzZWxlY3RpdmFtZW50ZSBlbnRyZWdhZGFzCithIGRpZmVyZW50ZXMgY2xhc2VzIGRlIGhvc3RzLiBQb3IgZWplbXBsbworLkIgZGhjcC12ZW5kb3JjbGFzcz1wcmludGVycyxIZXdsZXR0LVBhY2thcmQgSmV0RGlyZWN0CitwZXJpdGly7WEgcXVlIG9wY2lvbmVzIHNlYW4gZmlqYWRhcyBzb2xvIHBhcmEgaW1wcmVzb3JhcyBIUCBhc+06CisuQiAtLWRoY3Atb3B0aW9uPXByaW50ZXJzLDMsMTkyLjE2OC40LjQgCitFbCBzdHJpbmcgdmVuZG9yLWNsYXNzIGVzIGNvb3JkaW5hZG8gY29uIGVsIHZlbmRvci1jbGFzcyBwcm92ZWlkbyBwb3IKK2VsIGNsaWVudGUsIHBhcmEgcGVybWl0aXIgY29pbmNpZGVuY2lhcyBib3Jyb3Nhcy4KKy5UUAorLkIgXC1qLCAtLWRoY3AtdXNlcmNsYXNzPTxuZXR3b3JrLWlkPiw8dXNlci1jbGFzcz4KK1RyYXphciBkZXNkZSB1biBzdHJpbmcgdXNlci1jbGFzcyBhIHVuIG5ldHdvcmsgaWQgKGNvbiBjb29yZGluYWNp824KK3N1YnN0cmluZywgY29tbyBjb24gdmVuZG9yLWNsYXNzKS4gTGEgbWF5b3LtYSBkZSBsb3MgY2xpZW50ZXMgREhDUAorcHJvdmVlbiB1biAidXNlciBjbGFzcyIgZWwgY3VhbCBlcyBjb25maWd1cmFibGUuIEVzdGEgb3BjafNuIHRyYXphCitjbGFzZXMgdXNlciBhIG5ldHdvcmsgaWRzLCBkZSB0YWwgbWFuZXJhIHF1ZSBvcGNpb25lcyBESENQIHB1ZWRhbgorc2VyIHNlbGVjdGl2YW1lbnRlIGVudmlhZGFzIGEgZGlmZXJlbnRlcyB0aXBvcyBkZSBob3N0cy4gRXMgcG9zaWJsZSwKK3BvciBlamVtcGxvLCB1c2FyIGVzdG8gcGFyYSBlc3BlY2lmaWNhciB1bmEgaW1wcmVzb3JhIGRpZmVyZW50ZSBwYXJhCitob3N0cyBlbiBsYSBjbGFzZSAiY3VlbnRhcyIgcXVlIHBhcmEgbG9zIGRlIGxhIGNsYXNlICJpbmdlbmllcmlhIi4KKy5UUAorLkIgXC00LCAtLWRoY3AtbWFjPTxuZXR3b3JrLWlkPiw8ZGlyZWNjafNuIE1BQz4KK1RyYXphciBkZXNkZSB1bmEgZGlyZWNjafNuIE1BQyBhIHVuYSBuZXR3b3JrIGlkLiBMYSBkaXJlY2Np824gTUFDCitwdWVkZSBpbmNsdWlyIGNvbW9k7W5lcy4gUG9yIGVqZW1wbG86CisuQiAtLWRoY3AtbWFjPTNjb20sMDE6MzQ6MjM6KjoqOioKK2ZpamFy7WEgZWwgdGFnICIzY29tIiBhIGN1YWxxdWllciBob3N0IGVsIGN1YWwgc3UgTUFDIGNvaW5jaWRhIGNvbgorZWwgcGF0cvNuLgorLlRQCisuQiAtLWRoY3AtY2lyY3VpdGlkPTxuZXR3b3JrLWlkPiw8Y2lyY3VpdC1pZD4sIC0tZGhjcC1yZW1vdGVpZD08bmV0d29yay1pZD4sPHJlbW90ZS1pZD4KK1RyYXphciBkZSBvcGNpb25lcyBhZ2VudGUgZGUgcmVsYXkgUkZDMzA0NiBhIG9wY2lvbmVzIG5ldHdvcmstaWQuIEVzdG9zCitkYXRvcyBwdWVkZW4gc2VyIHByb3Zl7WRvcyBwb3IgYWdlbnRlcyBkZSByZWxheSBESENQLiBFbCBjaXJjdWl0LWlkIG8KK3JlbW90ZS1pZCBlcyBub3JtbGFtZW50ZSBicmluZGFkbyBjb21vIGhleCBzZXBhcmFkbyBwb3IgZG9ibGVwdW50b3MsIHBlcm8KK3RhbWJp6W4gc2UgcGVybWl0ZSB1biBzdHJpbmcgc2ltcGxlLiBTaSBzZSBvYnRpZW5lIHVuYSBjb2luY2lkZW5jaWEgZXhhY3RhCitlbnRyZSBlbCBjaXJjdWl0IG8gYWdlbnQgSUQgeSB1bm8gcHJvdmXtZG8gcG9yIHVuIGFnZW50ZSBkZSByZWxheSwKK25ldHdvcmstaWQgZXMgZmlqYWRvLgorLlRQCisuQiAtLWRoY3Atc3Vic2NyaWQ9PG5ldHdvcmstaWQ+LDxzdWJzY3JpYmVyLWlkPgorVHJhemFyIGRlIG9wY2lvbmVzIHJlbGF5IHN1YnNjcmliZXItaWQgUkZDMzk5MyBhIG9wY2lvbmVzIG5ldHdvcmstaWQuCisuVFAKKy5CIC0tZGhjcC1tYXRjaD08bmV0d29yay1pZD4sPG9wdGlvbiBudW1iZXI+fG9wdGlvbjo8b3B0aW9uIG5hbWU+Wyw8dmFsdWU+XQorU2luIHVuIHZhbG9yLCBmaWphciBsYSBldGlxdWV0YSBuZXR3b3JrLWlkIHNpIGVsIGNsaWVudGUgZW527WEgdW5hIG9wY2nzbgorREhDUCBkZWwgbvptZXJvIG8gdmFsb3IgYnJpbmRhZG8uIEN1YW5kbyB1biB2YWxvciBlcyBicmluZGFkbywgZmlqYXIgbGEKK2V0aXF1ZXRhIHNvbG8gc2kgbGEgb3BjafNuIGVzIGVudmlhZGEgeSBjb2luY2lkZSBjb24gZWwgdmFsb3IuIEVsIHZhbG9yIHB1ZWRlCitzZXIgZGUgbGEgZm9ybWEgIjAxOmZmOio6MDIiLCBjYXNvIGVuIGVsIGN1YWwgZWwgdmFsb3IgZGViZSBjb2luY2lkaXIgKGFwYXJ0ZQorZGUgbG9zIGNvbW9kaW5lcykgcGVybyBsYSBvcGNp824gZW52aWFkYSBwdWVkZSB0ZW5lciBkYXRhIHF1ZSBubyBjb2luY2lkZSBkZXNwdWVzCitkZWwgZmluYWwgZGVsIHZhbG9yLiBFbCB2YWxvciB0YW1iaeluIHB1ZWRlIHNlciBkZSBsYSBtaXNtYSBmb3JtYSBxdWUKKy5CIGRoY3Atb3B0aW9uCitjYXNvIGVuIGVsIGN1YWwgbGEgb3BjafNuIGVudmlhZGEgZXMgdHJhdGFkYSBjb21vIHVuIGFycmF5LCB5IHVuIGVsZW1lbnRvIGRlYmUKK2NvaW5jaWRpciwgYXPtIHF1ZQorCistLWRoY3AtbWF0Y2g9ZWZpLWlhMzIsb3B0aW9uOmNsaWVudC1hcmNoLDYKKworZmlqYXLhIGxhIGV0aXF1ZXRhIGEgImVmaS1pYTMyIiBzaSBlbCBu+m1lcm8gNiBhcGFyZWNlIGVuIGxhIGxpc3RhIGRlCithcmNoaXRlY3R1cmFzIGVudmlhZGEgcG9yIGxvcyBjbGllbnRlcyBlbiBvcGNp824gOTMuIChWZXIgUkZDIDQ1NzggcGFyYQorZGV0YWxsZXMuKSBTaSBlbCB2YWxvciBlcyB1biBzdHJpbmcsIGNvaW5jaWRlbmNpYSBzdWJzdHJpbmcgZXMgdXNhZGEuCisuQiBcLUosIC0tZGhjcC1pZ25vcmU9PG5ldHdvcmstaWQ+Wyw8bmV0d29yay1pZD5dCitDdWFuZG8gdG9kb3MgbG9zIG5ldHdvcmsgaWRzIGJyaW5kYWRvcyBjb2luY2lkYW4gY29uIGVsIGp1ZWdvIGRlCituZXR3b3JrIGlkcyBkZXJpdmFkb3MgZGUgbGFzIGNsYXNlcyBuZXQsIGhvc3QsIHkgdmVuZG9yLCBpZ25vcmFyCitlbCBob3N0IHkgbm8gYnJpbmRhcmxlIHVuIGFycmllbmRvIERIQ1AuCisuVFAKKy5CIC0tZGhjcC1pZ25vcmUtbmFtZXNbPTxuZXR3b3JrLWlkPlssPG5ldHdvcmstaWQ+XV0KK0N1YW5kbyB0b2RvcyBsb3MgbmV0d29yay1pZHMgYnJpbmRhZG9zIGNvaW5jaWRlbiBjb24gZWwganVlZ28gZGUKK25ldHdvcmstaWRzIGRlcml2YWRvIGRlIGxhIHJlZCwgaG9zdCwgY2xhc3NlcyBkZSB2ZW5kZWRvciB5IHVzdWFyaW8sCitpZ25vcmFyIGN1YWxxdWllciBub21icmUgZGUgaG9zdCBwcm92ZWlkbyBwb3IgZWwgaG9zdC4gTvN0ZXNlIHF1ZSwKK2EgZGlmZXJlbmNpYSBkZSBkaGNwLWlnbm9yZSwgZXMgcGVybWlzaWJsZSBubyBicmluZGFyIG5pbmf6biB0YWcgbmV0aWQsCit5IGVuIHRhbCBjYXNvIG5vbWJyZXMgZGUgaG9zdCBwcm92ZWlkb3MgcG9yIGNsaWVudGVzIERIQ1Agc2llbXByZSBzb24KK2lnbm9yYWRvcywgeSBob3N0cyBESENQIHNvbiBhZ3JlZ2Fkb3MgYWwgRE5TIHVzYW5kbyBzb2xvIGxhIGNvbmZpZ3VyYWNp824KK2RoY3AtaG9zdCBlbiBkbnNtYXNxIHkgZWwgY29udGVuaWRvIGRlIC9ldGMvaG9zdHMgeSAvZXRjL2V0aGVycy4KKy5UUAorLkIgLS1kaGNwLWJyb2FkY2FzdD08bmV0d29yay1pZD5bLDxuZXR3b3JrLWlkPl0KK0N1YW5kbyB0b2RvcyBsb3MgbmV0d29yay1pZHMgYnJpbmRhZG9zIGNvaW5jaWRlbiBjb24gZWwganVlZ28gZGUgbmV0d29yay1pZHMKK2Rlcml2YWRvcyBkZSBsYSByZWQsIGhvc3QsIGNsYXNlcyBkZSB2ZW5kZWRvciB5IHVzdWFyaW9zLCBzaWVtcHJlIHVzYXIKK2Jyb2FkY2FzdCBwYXJhIGNvbXVuaWNhcnNlIGNvbiBlbCBob3N0IGN1YW5kbyBlc3ThIHNpbiBjb25maWd1cmFyLiBMYQorbWF5b3LtYSBkZSBjbGllbnRlcyBESENQIHF1ZSBuZWNlc2l0YW4gcmVzcHVlc3RhcyBicm9hZGNhc3QgZmlqYW4gdW5hCitvcGNp824gZW4gc3VzIHBlZGlkb3MgcGFyYSBxdWUgZXN0byBwYXNlIGF1dG9tYXRpY2FtZW50ZSwgYWxndW5vcworY2xpZW50ZXMgQk9PVFAgdmllam9zIG5vIGxvIGhhY2VuLgorLlRQCisuQiBcLU0sIC0tZGhjcC1ib290PVtuZXQ6PG5ldHdvcmstaWQ+LF08ZmlsZW5hbWU+LFs8c2VydmVybmFtZT5bLDxzZXJ2ZXIgYWRkcmVzcz5dXQorRmlqYXIgb3BjaW9uZXMgQk9PVFAgcXVlIGhhbiBkZSBzZXIgZGV2dWVsdGFzIHBvciBlbCBzZXJ2aWRvciBESENQLiBOb21icmUKK3kgZGlyZWNjafNuIGRlIHNlcnZpZG9yIHNvbiBvcGNpb25hbGVzOiBzaSBubyBzb24gYnJpbmRhZGFzLCBlbCBub21icmUgZXMKK2RlamFkbyBlbiBibGFuY28sIHkgbGEgZGlyZWNjafNuIGVzIGZpamFkYSBhIGxhIGRlIGxhIG3hcXVpbmEgcXVlIGNvcnJlCitkbnNtYXNxLiBTaSBkbnNtYXNxIGVzdOEgYnJpbmRhbmRvIHNlcnZpY2lvIFRGVFAgKHZlcgorLkIgLS1lbmFibGUtdGZ0cAorKSBlbnRvbmNlcyBzb2xvIGVsIG5vbWJyZSBkZSBhcmNoaXZvIGVzIHJlcXVpcmlkbyBhcXXtIHBhcmEgaGFiaWxpdGFyCitlbCBpbmljaW8gYXRyYXbpeiBkZSB1bmEgcmVkLiBTaSBsYXMgb3BjaW9uYWxlcyBuZXR3b3JrLWlkcyBzb24gYnJpbmRhZGFzLAorZWxsYXMgZGViZXLhbiBjb2luY2lkaXIgcGFyYSBxdWUgZXN0YSBjb25maWd1cmFjafNuIHNlYSBlbnZpYWRhLiBO83Rlc2UKK3F1ZSBuZXR3b3JrLWlkcyBlc3ThbiBwcmVmaWphZGFzIGNvbiAibmV0OiIgcGFyYSBkaXN0aW5ndWlybGFzLgorLlRQCisuQiAtLXB4ZS1zZXJ2aWNlPVtuZXQ6PG5ldHdvcmstaWQ+LF08Q1NBPiw8dGV4dG8gZGUgbWVu+j4sPG5vbWJyZSBiYXNlPnw8dGlwbyBkZSBzZXJ2aWNpbyBib290PlssPGRpcmVjY2nzbiBkZSBzZXJ2aWRvcj5dCitMYSBtYXlvcu1hIGRlIHVzb3MgcGFyYSBib290LVJPTVMgUFhFIHNpbXBsZW1lbnRlIHBlcm1pdGVuIGFsIHNpc3RlbWEgUFhFCitvYnRlbmVyIHVuYSBkaXJlY2Np824gSVAgeSBlbnRvbmNlcyBiYWphciBlbCBhcmNoaXZvIGVzcGVjaWZpY2FkbyBwb3IKKy5CIGRoY3AtYm9vdAoreSBlamVjdXRhcmxvLiBTaW4gZW1iYXJnbywgZWwgc2lzdGVtYSBQWEUgZXMgY2FwYXogZGUgbGxldmFyCithIGNhYm8gZnVuY2lvbmVzIG3hcyBjb21wbGVqYXMgY3VhbmRvIGVzdOFuIHNvcG9ydGFkYXMgcG9yIHVuCitzZXJ2aWRvciBESENQIGFkZWN1YWRvLgorCitFc3RvIGVzcGVjaWZpY2EgdW5hIG9wY2nzbiBib290IHF1ZSBwdWVkZSBhcGFyZWNlciBlbiB1biBtZW76IGRlIGJvb3QKK1BYRS4gPENTQT4gZXMgdGlwbyBkZSBzaXN0ZW1hIGRlIGNsaWVudGUsIHNvbG8gc2VydmljaW9zIGRlbCB0aXBvIGNvcnJlY3RvCithcGFyZWNlcuFuIGVuIHVuIG1lbvouIExvcyB0aXBvcyBjb25vY2lkb3Mgc29uIHg4NlBDLCBQQzk4LCBJQTY0X0VGSSwKK0FscGhhLCBBcmNfeDg2LCBJbnRlbF9MZWFuX0NsaWVudCwgSUEzMl9FRkksIEJDX0VGSSwgWHNjYWxlX0VGSSB5IFg4Ni02NF9FRkk7Cit1biBu+m1lcm8gZW50ZXJvIHB1ZWRlIHNlciB1dGlsaXphZG8gcGFyYSBvdHJvcyB0aXBvcy4gRWwgcGFy4W1ldHJvIGRlc3B16XMKK2RlbCB0ZXh0byBkZSBtZW76IHB1ZWRlIHNlciB1biBub21icmUgZGUgYXJjaGl2bywgY2FzbyBlbiBlbCBjdeFsIGRuc21hc3EKK2FjdPphIGNvbW8gdW4gc2Vydmlkb3IgYm9vdCB5IGxlIG9yZGVuYSBhbCBjbGllbnRlIFBYRSBiYWphciBlbCBhcmNoaXZvCit27WEgVEZUUCwgeWEgc2VhIGRlIHPtIG1pc21vICgKKy5CIGVuYWJsZS10ZnRwCitkZWJlIGVzdGFyIGZpamFkbyBwYXJhIHF1ZSBlc3RvIGZ1bmNpb25lKSBvIGRlc2RlIG90cm8gc2Vydmlkb3IgVEZUUCBzaSBsYQorZGlyZWNjafNuIElQIGZpbmFsIGVzIGJyaW5kYWRhLgorTvN0ZXNlIHF1ZSBlbCBzdWZpam8gImxheWVyIiAobm9ybWFsbWVudGUgIi4wIikgZXMgYnJpbmRhZG8gcG9yIFBYRSwgeQorbm8gZGViZSBzZXIgYWdyZWdhZG8gYWwgbm9tYnJlIGJhc2UuIFNpIHVuIG76bWVybyBlbnRlcm8gZXMgYnJpbmRhZG8gZW4gdmV6CitkZSB1biBub21icmUgYmFzZSwgZW50b25jZXMgZWwgY2xpZW50ZSBQWEUgYnVzY2Fy4SB1biBzZXJ2aWNpbyBib290IGFkZWN1YWRvCitwYXJhIGVzZSB0aXBvIGRlIHJlZC4gRXN0YSBi+nNxdWVkYSBwdWVkZSBzZXIgaGVjaGEgbWVkaWFudGUgbXVsdGljYXN0IG8KK2Jyb2FkY2FzdCwgbyBkaXJlY3RhbWVudGUgYSB1biBzZXJ2aWRvciBzaSBsYSBkaXJlY2Np824gSVAgZXMgYnJpbmRhZGEuIFVuCit0aXBvIGRlIHNlcnZpY2lvIGJvb3QgZGUgMCBlcyBlc3BlY2lhbCwgeSBhYm9ydGFy4SBlbCBwcm9jZXNvIGJvb3QgZGUgcmVkCit5IGNvbnRpbnVhcuEgZGVzZGUgbWVkaW8gbG9jYWwuCisuVFAKKy5CIC0tcHhlLXByb21wdD1bbmV0OjxuZXR3b3JrLWlkPixdPHByb21wdD5bLDx0aW1lb3V0Pl0KK0ZpamFyIGVzdG8gaGFjZSBxdWUgdW4gYXZpc28gc2VhIGV4cHVlc3RvIGRlc3B1ZXMgZGVsIGJvb3QgUFhFLiBTaSBlbCB0aW1lb3V0CitlcyBicmluZGFkbywgZW50b25jZXMgZGVzcHVlcyBxdWUgZWwgdGltZW91dCBzZSBoYXlhIHZlbmNpZG8gc2luIGlucHV0IGRlbAordGVjbGFkbywgbGEgcHJpbWVyYSBvcGNp824gZGVsIG1lbvogc2VyYSBhdXRvbWF0aWNhbWVudGUgZWplY3V0YWRhLiBTaSBlbAordGltZW91dCBlcyBjZXJvIGVudG9uY2VzIGxhIHByaW1lcmEgb3BjafNuIGRlbCBtZW76IHNlcmEgYXV0b21hdGljYW1lbnRlCitlamVjdXRhZGEuIFNpCisuQiBweGUtcHJvbXB0CitlcyBvbWl0aWRvLCBlbCBzaXN0ZW1hIGVzcGVyYXLhIHBhcmEgZWwgaW5wdXQgZGVsIHVzdWFyaW8gc2kgaGF5IG36bHRpcGxlcworYXJ07WN1bG9zIGVuIGVsIG1lbvosIHBlcm8gaGFy4SBib290IGltZWRpYXRhbWVudGUgc2kgaGF5IHNvbG8gdW5vLiBWZXIKKy5CIHB4ZS1zZXJ2aWNlCitwYXJhIGRldGFsbGVzIHNvYnJlIGFydO1jdWxvcyBkZSBtZW51LgorCitEbnNtYXNxIHRpZW5lIHNvcG9ydGUgcGFyYSAicHJveHktREhDUCIgUFhFLCBlbiBlc3RlIGNhc28gb3RybyBzZXJ2aWRvcgorREhDUCBlbiBsYSByZWQgZXMgcmVzcG9uc2FibGUgcG9yIGFzaWduYXIgZGlyZWNjaW9uZXMgSVAsIHkgZG5zbWFzcQorc2ltcGxlbWVudGUgcHJvdmVlIGxhIGRpcmVjY2nzbiBicmluZGFkYSBlbgorLkIgcHhlLXByb21wdAoreQorLkIgcHhlLXNlcnZpY2UKK3BhcmEgcGVybWl0aXIgYm9vdCBhIHRyYXZleiBkZSBsYSByZWQuIEVzdGUgbW9kbyBlcyBoYWJpbGl0YWRvIHVzYW5kbworbGEgcGFsYWJyYSBjbGF2ZQorLkIgcHJveHkKK2VuCisuQiBkaGNwLXJhbmdlLgorLlRQCisuQiBcLVgsIC0tZGhjcC1sZWFzZS1tYXg9PG76bWVybz4KK0xpbWl0YSBhIGRuc21hc3EgYSBlbCBu+m1lcm8gZXNwZWNpZmljYWRvIGRlIGFycmllbmRvcyBESENQLiBFbAorcHJlZGV0ZXJtaW5hZG8gZXMgMTUwLiBFbCBsaW1pdGUgZXMgcGFyYSBwcmV2ZW5pciBhdGFxdWVzIERvUyBkZXNkZQoraG9zdHMgcXVlIGNyZWFuIGNpZW50b3MgZGUgYXJyaWVuZG9zIHkgdXNhbiBtdWNoYSBkZSBsYSBtZW1vcmlhIGRlbAorcHJvY2VzbyBkbnNtYXNxLgorLlRQCisuQiBcLUssIC0tZGhjcC1hdXRob3JpdGF0aXZlCitFc3RhIG9wY2nzbiBkZWJlIHNlciBmaWphZGEgY3VhbmRvIGRuc21hc3EgZXMgZGVmaW5pdGl2YW1lbnRlIGVsIPpuaWNvCitzZXJ2aWRvciBESENQIGVuIGxhIHJlZC4gQ2FtYmlhIGVsIGNvbXBvcnRhbWllbnRvIGRlIFJGQyBkZSB0YWwgbWFuZXJhCitxdWUgcGVkaWRvcyBkZXNkZSBob3N0cyBubyBjb25vY2lkb3Mgbm8gc2Vy4W4gaWdub3JhZG9zLiBFc3RvIHBlcm1pdGUgcXVlCitob3N0cyBudWV2b3MgcHVlZGFuIGNvbnNlZ3VpciB1biBhcnJpZW5kbyBzaW4gc2luIHVuIHRpbWVvdXQgYmFqbyB0b2RhCitjaXJjdW5zdGFuY2lhLiBUYW1iaeluIHBlcm1pdGUgcXVlIGRuc21hc3EgcmVjb25zdHJ1eWEgc3UgYmFzZSBkZSBkYXRvcworZGUgYXJyaWVuZG9zIHNpbiBxdWUgY2FkYSBjbGllbnRlIG5lY2VzaXRlIHJlYWRxdWlyaXIgdW4gYXJyaWVuZG8KK3NpIGxhIGJhc2UgZGUgZGF0b3MgZXMgcGVyZGlkYS4KKy5UUAorLkIgLS1kaGNwLWFsdGVybmF0ZS1wb3J0Wz08cHVlcnRvIGRlIHNlcnZpZG9yPlssPHB1ZXJ0byBkZSBjbGllbnRlPl1dCitDYW1iaWFyIGRlbCBwcmVkZXRlcm1pbmFkbyBsb3MgcHVlcnRvcyB1c2Fkb3MgcGFyYSBESENQLiBTaSBlc3RhIG9wY2nzbgorZXMgYnJpbmRhZGEgc29sYSwgc2luIGFyZ3VtZW50b3MsIGNhbWJpYSBsb3MgcHVlcnRvcyB1c2Fkb3MgcGFyYSBESENQCitkZSA2NyB5IDY4IGEgMTA2NyB5IDEwNjguIFNpIHVuIHNvbG8gYXJndW1lbnRvIGVzIGJyaW5kYWRvLCBlc2UgcHVlcnRvCitlcyB1c2FkbyBwYXJhIGVsIHNlcnZpZG9yIHkgZWwgbvptZXJvIGRlIHB1ZXJ0byBtYXMgdW5vIGVzIHVzYWRvCitwYXJhIGVsIGNsaWVudGUuIEZpbmFsbWVudGUsIGRvcyBu+m1lcm9zIHBlcm1pdGVuIHF1ZSBzZSBlc3BlY2lmaXF1ZW4KK2FtYm9zIGxvcyBwdWVydG9zIGRlIHNlcnZpZG9yIHkgY2xpZW50ZSBwYXJhIERIQ1AuCisuVFAKKy5CIFwtMywgLS1ib290cC1keW5hbWljWz08bmV0d29yay1pZD5bLDxuZXR3b3JrLWlkPl1dCitIYWJpbGl0YXIgYWxvY2FjafNuIGRpbuFtaWNhIGRlIGRpcmVjY2lvbmVzIElQIGEgY2xpZW50ZXMgQk9PVFAuIFVzYXIKK2VzdG8gY29uIGN1aWRhZG8sIHlhIHF1ZSBjYWRhIGRpcmVjY2nzbiBhbG9jYWRhIGEgdW4gY2xpZW50ZSBCT09UUAorZXMgYXJyZW5kYWRhIHBhcmEgc2llbXByZSwgeSBjb25zZWN1ZW50ZW1lbnRlIHF1ZWRhIG5vLWRpc3BvbmlibGUKK3BhcmEgcmUtdXNvIHBvciBvdHJvcyBob3N0cy4gU2kgZXN0byBlcyBicmluZGFkbyBzaW4gZXRpcXVldGFzLAorZW50b25jZXMgaW5jb25kaWNpb25hbG1lbnRlIGhhYmlsaXRhIGFsb2NhY2nzbiBkaW7hbWljYS4gQ29uCitldGlxdWV0YXMsIHNvbG8gY3VhbmRvIHRvZGFzIGxhcyBldGlxdWV0YXMgZXN04W4gZmlqYWRhcy4gUHVlZGUKK3NlciByZXBldGlkbyBjb24gZGlmZXJlbnRlcyBqdWVnb3MgZGUgZXRpcXVldGFzLgorLlRQCisuQiBcLTUsIC0tbm8tcGluZworUG9yIHByZWRldGVybWluZGFkbywgZWwgc2Vydmlkb3IgREhDUCB0cmF0YXLhIGRlIGFzZWd1cmFyc2UgcXVlIHVuYQorZGlyZWNjafNuIG5vIGVzdOkgZW4gdXNvIGFudGVzIGRlIGFsb2NhcnNlbGEgYSB1biBob3N0LiBIYWNlIGVzdG8KK2VudmlhbmRvIHVuIGVjaG8gSUNNUCAocGluZykgYSBsYSBkaXJlY2Np824gcmVmZXJlbnRlLiBTaSByZWNpYmUgdW5hCityZXNwdWVzdGEsIGVudG9uY2VzIGxhIGRpcmVjY2nzbiBkZWJlIGVzdGFyIHNpZW5kbyB1c2FkYSwgeSBzZSByZXBpdGUKK2xhIHBydWViYSBjb24gb3RyYS4gRXN0YSBvcGNp824gZGVzaGFiaWxpdGEgZXN0YSBwcnVlYmEuIFVzYXIgY29uCitjdWlkYWRvLgorLlRQCisuQiAtLWxvZy1kaGNwCitCaXRhY29y6W8gZXh0cmEgcGFyYSBESENQOiBCaXRhY29yZWFyIHRvZGFzIGxhcyBvcGNpb25lcyBlbnZpYWRhcyBhCitjbGllbnRlcyBESENQIHkgbGFzIGV0aXF1ZXRhcyBuZXRpZCB1c2FkYXMgcGFyYSBkZXRlcm1pbmFybG9zLgorLlRQCisuQiBcLWwsIC0tZGhjcC1sZWFzZWZpbGU9PHBhdGg+CitVc2FyIGVsIGFyY2hpdm8gZXNwZWNpZmljYWRvIHBhcmEgYWxtYWNlbmFyIGluZm9ybWFjafNuIGRlIGFycmllbmRvcworREhDUC4KKy5UUAorLkIgXC02IC0tZGhjcC1zY3JpcHQ9PHBhdGg+CitDdWFuZG8gdW4gYXJyaWVuZG8gREhDUCBudWV2byBlcyBjcmVhZG8sIG8gdW5vIHZpZWpvIGVzCitkZXN0cnVpZG8sIGVsIGVqZWN1dGFibGUgZXNwZWNpZmljYWRvIHBvciBlc3RhIG9wY2nzbiBlcyBlamVjdXRhZG8uCitMb3MgYXJndW1lbnRvcyBwYXJhIGVsIGJpbmFyaW8gc29uICJhZGQiLCAib2xkIiwgbyAiZGVsIiwgbGEgZGlyZWNjafNuCitNQUMgZGVsIGhvc3QsIGxhIGRpcmVjY2nzbiBJUCwgeSBlbCBob3N0bmFtZSwgc2kgZXMKK2Nvbm9jaWRvLiAiYWRkIiBzaWduaWZpY2EgcXVlIHVuIGFycmllbmRvIGhhIHNpZG8gY3JlYWRvLCAiZGVsIiBxdWUKK2hhIHNpZG8gZGVzdHJ1aWRvLCB5ICJvbGQiIGVzIHVuYSBub3RpZmljYWNp824gZGUgdW4gYXJyaWVuZG8gZXhpc3RlbnRlCitjdWFuZG8gZG5zbWFzcSBpbmljaWEgbyB1biBjYW1iaW8gYSB1bmEgTUFDIG8gbm9tYnJlIGhvc3QgZGUgdW4gYXJyaWVuZG8KK2V4aXN0ZW50ZSAodGFtYmnpbiwgdGllbXBvIGRlIGFycmllbmRvIG8gdmVuY2ltaWVudG8geSBjbGllbnQtaWQsIHNpCitsZWFzZWZpbGUtcm8gZXN04SBmaWphZG8pLiBTaSBsYSBkaXJlY2Np824gTUFDIGVzIGRlIHVuIHRpcG8gZGUgcmVkCitxdWUgbm8gZXMgZXRoZXJuZXQsIHRlbmRy4SBlbCB0aXBvIGRlIHJlZCBwcmVjb2xvY2FkbywgcG9yIGVqZW1wbG8KKyIwNi0wMToyMzo0NTo2Nzo4OTphYiIgcGFyYSB0b2tlbiByaW5nLiBFbCBwcm9jZXNvIGVzIGVqZWN1dGFkbyBjb21vIHJvb3QKKyhhc3VtaWVuZG8gcXVlIGRuc21hc3EgZnVlIG9yaWdpbmFsbWVudGUgZWplY3V0YWRvIGNvbW8gcm9vdCkgYfpuIHNpIGRuc21hc3EKK2VzdOEgY29uZmlndXJhZG8gcGFyYSBjYW1iaWFyIHN1IFVJRCBhIHVuIHVzdWFyaW8gc2luIHByaXZpbGVnaW9zLgorRWwgYW1iaWVudGUgZXMgaGVyZWRhZG8gZGVsIHVzdWFyaW8gcXVlIGhhIGludm9jYWRvIGEgZG5zbWFzcSwgeSBzaSBlbAoraG9zdCBicmluZPMgdW4gY2xpZW50LWlkLCBlcyBhbG1hY2VuYWRvIGVuIGxhIHZhcmlhYmxlIGRlIGFtYmllbnRlCitETlNNQVNRX0NMSUVOVF9JRC4gU2kgZWwgZG9taW5pbyBjb21wbGV0YW1lbnRlIGNhbGlmaWNhZG8gZGVsIGhvc3QKK2VzIGNvbm9jaWRvLCBsYSBwYXJ0ZSBkZSBkb21pbmlvIGVzIGFsbWFjZW5hZGEgZW4gRE5TTUFTUV9ET01BSU4uIFNpCitlbCBjbGllbnRlIGJyaW5kYSBpbmZvcm1hY2nzbiBkZSBjbGFzZSBkZSB2ZW5kZWRvcm8gdXN1YXJpbywKK2VzdG9zIHNvbiBicmluZGFkb3MgZW4gbGFzIHZhcmlhYmxlcyBETlNNQVNRX1ZFTkRPUl9DTEFTUyB5CitETlNNQVNRX1VTRVJfQ0xBU1MwLi5ETlNNQVNRX1VTRVJfQ0xBU1NuLCBwZXJvIHNvbG8gcGFyYSBhY2Npb25lcyAiYWRkIgoreSAib2xkIiBjdWFuZG8gdW4gaG9zdCByZXN1bWUgdW4gYXJyaWVuZG8gZXhpc3RlbnRlLCBkYWRvIGEgcXVlIGVzdG9zCitkYXRvcyBubyBzb24gYWxtYWNlbmFkb3MgZW4gbGEgYmFzZSBkZSBkYXRvcyBkZSBhcnJpZW5kb3MgZGUgZG5zbWFzcS4KK1NpIGRuc21hc3EgZnVlIGNvbXBpbGFkbyBjb24gSEFWRV9CUk9LRU5fUlRDLCBlbnRvbmNlcyBsYSBkdXJhY2nzbiBkZWwKK2FycmllbmRvIChlbiBzZWd1bmRvcykgZXMgYWxtYWNlbmFkYSBlbiBETlNNQVNRX0xFQVNFX0xFTkdUSCwgZGUgb3RyYQorbWFuZXJhIGVsIHRpZW1wbyBkZSB2ZW5jaW1pZW50byBlcyBhbG1hY2VuYWRvIGVuIEROU01BU1FfTEVBU0VfRVhQSVJFUy4KK0VsIG76bWVybyBkZSBzZWd1bmRvcyBmYWx0YW50ZSBwYXJhIGVsIHZlbmNpbWllbnRvIGRlbCBhcnJpZW5kbyBzaWVtcHJlCitlcyBhbG1hY2VuYWRvIGVuIEROU01BU1FfVElNRV9SRU1BSU5JTkcuCitTaSB1biBhcnJpZW5kbyBzb2ztYSB0ZW5lciB1biBub21icmUgZGUgaG9zdCwgZWwgY3VhbCBlcyByZW1vdmlkbywgdW4KK2V2ZW50byAib2xkIiBlcyBnZW5lcmFkbyBjb24gZWwgbnVldm8gZXN0YWRvIGRlbCBhcnJpZW5kbywgKHBvciBlamVtcGxvLCBzaW4KK25vbWJyZSksIHkgZWwgbm9tYnJlIGFudGVyaW9yIGVzIGJyaW5kYWRvIGVuIGxhIHZhcmlhYmxlIGRlIGFtYmllbnRlCitETlNNQVNRX09MRF9IT1NUTkFNRS4gRE5TTUFTUV9JTlRFUkZBQ0UgYWxtYWNlbmEgZWwgbm9tYnJlIGRlIGxhIGludGVyZmFjZQorZW4gbGEgY3VhbCBsbGVn8yBlbCBwZWRpZG87IGVzdG8gbm8gZXMgZmlqYWRvIHBhcmEgYWNjaW9uZXMgInZpZWphcyIKK2N1YW5kbyBkbnNtYXNxIHJlLWluaWNpYS4KK1RvZG9zIGxvcyBkZXNjcmlwdG9yZXMgZGUgYXJjaGl2byBlc3ThbiBjZXJyYWRvcworZXhjZXB0byBzdGRpbiwgc3Rkb3V0LCB5IHN0ZGVyciBsb3MgY3VhbGVzIGVzdOFuIGFiaWVydG9zIGEgL2Rldi9udWxsCisoZXhjZXB0byBlbiBtb2RvIGRlYnVnKS4KK0VzdGUgZ3Vp824gbm8gZXMgaW52b2NhZG8gY29uY3VycmVudGVtZW50ZTogc2kgY2FtYmlvcyBkZSBhcnJpZW5kb3MKK3N1YnNpZ3VpZW50ZXMgb2N1cnJlbiwgZWwgZ3Vp824gbm8gZXMgaW52b2NhZG8gb3RyYSB2ZXogaGFzdGEgcXVlCitjdWFscXVpZXIgaW52b2NhY2nzbiBleGlzdGVudGUgaGFnYSBleGl0LiBBbCBpbmljaW8gZGUgZG5zbWFzcSwgZWwgZ3Vp824KK3NlcuEgaW52b2NhZG8gcGFyYSB0b2RvcyBsb3MgYXJyaWVuZG9zIGV4aXN0ZW50ZXMgbWllbnRyYXMgdmFuIHNpZW5kbworbGXtZG9zIGRlc2RlIGVsIGFyY2hpdm8gZGUgYXJyaWVuZG9zLiBBcnJpZW5kb3MgdmVuY2lkb3Mgc2Vy4W4gbGxhbWFkb3MKK2NvbiAiZGVsIiB5IG90cm9zIGNvbiAib2xkIi4gPHBhdGg+IGRlYmUgc2VyIHVuIHBhdGggYWJzb2x1dG8sIG5pbmd1bmEKK2L6c3F1ZWRhIFBBVEggb2N1cnJlLiBDdWFuZG8gZG5zbWFzcSByZWNpYmUgdW5hIHNl8WFsIEhVUCwgZWwgZ3Vp824gc2Vy4QoraW52b2NhZG8gcGFyYSBhcnJpZW5kb3MgZXhpc3RlbnRlcyBjb24gdW4gZXZlbnRvICJvbGQiLgorLlRQCisuQiAtLWRoY3Atc2NyaXB0dXNlcgorRXNwZWNpZmljYXIgZWwgdXN1YXJpbyBjb21vIGVsIGN1YWwgc2UgZGViZSBjb3JyZXIgZWwgYXJjaGl2bworZ3Vp824gZGUgY2FtYmlvIGRlIGFycmllbmRvcy4gRXN0ZSBlcyByb290IHBvciBwcmVkZXRlcm1pbmFkbywKK3Blcm8gcHVlZGUgc2VyIGNhbWJpYWRvIGEgb3RybyB1c3VhcmlvIG1lZGlhbnRlIGVzdGEgb3BjafNuLgorLlRQCisuQiBcLTksIC0tbGVhc2VmaWxlLXJvCitTdXByaW1pciBjb21wbGV0YW1lbnRlIGVsIHVzbyBkZWwgYXJjaGl2byBkZSBhcnJpZW5kb3MuIEVsIGFyY2hpdm8gbm8gc2Vy4QorY3JlYWRvLCBsZe1kbywgbmkgZXNjcml0by4gQ2FtYmlhciBsYSBtYW5lcmEgZW4gbGEgY3XhbCBlbCBhcmNoaXZvIGd1afNuIGRlCitjYW1iaW8gZGUgYXJyaWVuZG8gKHNpIGVzIGJyaW5kYWRvKSBlcyBsbGFtYWRvLCBkZSB0YWwgZm9ybWEgcXVlIGxhIGJhc2UgZGUKK2RhdG9zIGRlIGFycmllbmRvc3B1ZWRhIHNlciBtYW50ZW5pZGEgZW4gYWxtYWNlbmFqZSBleHRlcm5vIHBvciBlbCBhcmNoaXZvCitndWnzbi4gQWRpY2lvbuFsbWVudGUgYSBsYXMgaW52b2NhY2lvbmVzIGJyaW5kYWRhcyBlbgorLkIgLS1kaGNwLXNjcmlwdAorZWwgYXJjaGl2byBkZSBjYW1iaW8gZGUgYXJyaWVuZG9zIGVzIGxsYW1hZG8gdW5hIHZleiwgYWwgaW5pY2lvIGRlIGRuc21hc3EsCitjb24gZWwg+m5pY28gYXJndW1lbnRvICJpbml0Ii4gQ3VhbmRvIGludm9jYWRvIGRlIGVzdGEgZm9ybWEsIGVsIGd1afNuIGRlYmVy7WEKK2VzY3JpYmlyIGVsIGVzdGFkbyBndWFyZGFkbyBkZSBsYSBiYXNlIGRlIGRhdG9zIGRlIGFycmllbmRvcywgZW4gZm9ybWF0byBkZQorYXJjaGl2byBkZSBhcnJpZW5kb3MgZG5zbWFzcSwgYSBzdGRvdXQgeSBoYWNlciBleGl0IGNvbiBj82RpZ28gZXhpdCBjZXJvLiBGaWphcgorZXN0YSBvcGNp824gdGFtYmnpbiBmb3J6YSBxdWUgZWwgYXJjaGl2byBkZSBjYW1iaW8gZGUgYXJyaWVuZG9zIHNlYSBsbGFtYWRvCitjdWFuZG8gaGF5IGNhbWJpb3MgaGVjaG9zIGEgZWwgY2xpZW50LWlkIHkgdGllbXBvcyBkZSBhcnJpZW5kbyB5IHZlbmNpbWllbnRvLgorLlRQCisuQiAtLWJyaWRnZS1pbnRlcmZhY2U9PG5vbWJyZSBkZSBpbnRlcmZhY2U+LDxhbGlhcz5bLDxhbGlhcz5dCitUcmF0YXIgcGFxdWV0ZXMgZGUgcGVkaWRvcyBESENQIHF1ZSBsbGVnYW4gYSBjdWFscXVpZXJhIGRlIGxhcyBpbnRlcmZhY2VzIDxhbGlhcz4KK2NvbW8gc2kgaHViaWVyYW4gbGxlZ2FkbyBhIGxhIGludGVyZmFjZSA8bm9tYnJlIGRlIGludGVyZmFjZT4uIEVzdGEgb3BjafNuCitlcyBuZWNlc2FyaWEgYWwgdXNhciBicmlkZ2luZyBlc3RpbG8gdmllam8gZW4gcGxhdGFmb3JtYXMgQlNELCBkYWRvIGEgcXVlCitsb3MgcGFxdWV0ZXMgbGxlZ2FuIGEgaW50ZXJmYWNlcyB0YXAgcXVlIG5vIHRpZW5lbiB1bmEgZGlyZWNjafNuIElQLgorLlRQCisuQiBcLXMsIC0tZG9tYWluPTxkb21pbmlvPlssPHJhbmdvIGRlIElQcz5dCitFc3BlY2lmaWNhIGxvcyBkb21pbmlvcyBETlMgcGFyYSBlbCBzZXJ2aWRvciBESENQLiBEb21pbmlvcyBwdWVkZW4gc2VyCiticmluZGFkb3MgaW5jb25kaWNpb25hbG1lbnRlIChzaW4gZWwgcmFuZ28gZGUgSVBzKSBvIHBhcmEgcmFuZ29zIGxpbWl0YWRvcy4gRXN0bwordGllbmUgZG9zIGVmZWN0b3M6IFByaW1lcmFtZW50ZSwgY2F1c2EgcXVlIGVsIHNlcnZpZG9yIERIQ1AgbGUgZGV2dWVsdmEgZWwKK2RvbWluaW8gYSBjdWFscXVpZXIgaG9zdCBxdWUgbG8gcGlkYS4gU2VndW5kYW1lbnRlLCBmaWphIGVsIGRvbWluaW8gcGFyYSBlbAorY3VhbCBlcyBsZWdhbCBwYXJhIGhvc3RzIGNvbmZpZ3VyYWRvcyBtZWRpYW50ZSBESENQIHJlY2xhbWFyLiBMYSBpbnRlbmNp824gZXMKK3Jlc3RyaW5naXIgbm9tYnJlcyBkZSBob3N0IHBhcmEgcXVlIHVuIGhvc3Qgbm8tY29uZmlhZG8gZW4gbGEgTEFOIG5vCitwdWVkYSBwcm9jbGFtYXIgc3Ugbm9tYnJlIHbtYSBESENQLCBjb21vIHBvciBlamVtcGxvICJtaWNyb3NvZnQuY29tIiB5CitjYXB0dXJhciB0cuFmaWNvIG5vIGRlc3RpbmFkbyBhIGVsbGEuIFNpIG5pbmf6biBzdWZpam8gZGUgZG9taW5pbyBlcworZXNwZWNpZmljYWRvLCBlbnRvbmNlcyBjdWFscXVpZXIgbm9tYnJlIGRlIGhvc3QgY29uIHVuYSBwYXJ0ZSBkZSBkb21pbmlvCisobyBzZWEgY29uIHVuIHB1bnRvKSBzZXLhIG5lZ2FkYSB5IGJpdGFjb3JhZGEuIFNpIHVuIHN1ZmlqbyBlcyBlc3BlY2lmaWNhZG8sCitlbnRvbmNlcyBub21icmVzIGRlIGhvc3QgY29uIHVuYSBwYXJ0ZSBkZSBkb21pbmlvIHNvbiBwZXJtaXRpZG9zLCBjb24gdGFsCitxdWUgbGEgcGFydGUgZGUgZG9taW5pbyBjb2luY2lkYSBjb24gZWwgc3VmaWpvLiBBZGljaW9uYWxtZW50ZSwgY3VhbmRvCit1biBzdWZpam8gZXMgZmlqYWRvLCBlbnRvbmNlcyBub21icmVzIGRlIGhvc3Qgc2luIHBhcnRlIGRlIGRvbWluaW8gdGllbmVuCitlbCBzdWZpam8gYWdyZWdhZG8gY29tbyB1bmEgcGFydGUgZGUgZG9taW5pbyBvcGNpb25hbC4gUG9yIGVqZW1wbG8sIGVuCittaSByZWQgcHVlZG8gZmlqYXIKKy5CIC0tZG9tYWluPXRoZWtlbGxleXMub3JnLnVrCit5IHRlbmVyIHVuYSBtYXF1aW5hIGN1eW8gbm9tYnJlIGhvc3QgREhDUCBlcyAibGFwdG9wIi4gTGEgZGlyZWNjafNuIElQCitkZSBlc2EgbeFxdWluYSBlcyBkaXNwb25pYmxlIGRlc2RlCisuQiBkbnNtYXNxCitjb21vICJsYXB0b3AiIHkgImxhcHRvcC50aGVrZWxsZXlzLm9yZy51ayIuIFNpIGVsIGRvbWluaW8gZXMgYnJpbmRhZG8KK2NvbW8gIiMiIGVudG9uY2VzIGVsIGRvbWluaW8gZXMgbGVpZG8gZGVzZGUgbGEgcHJpbWVyYSBkaXJlY3RpdmEgc2VhcmNoCitlbiAvZXRjL3Jlc29sdi5jb25mIChvIGVxdWl2YWxlbnRlKS4gRWwgcmFuZ28gZGUgZGlyZWNjaW9uZXMgcHVlZGUgc2VyCis8ZGlyZWNjafNuIElQPiw8ZGlyZWNjafNuIElQPiBvciA8ZGlyZWNjafNuIElQPi88beFzY2FyYSBkZSBzdWJyZWQ+LiBWZXIKKy5CIC0tZGhjcC1mcWRuIGVsIGN1YWwgcHVlZGUgY2FtYmlhciBlbCBjb21wb3J0YW1pZW50byBkZSBkbnNtYXNxIGNvbgorZG9taW5pb3MuCisuVFAKKy5CIC0tZGhjcC1mcWRuCitFbiBlbCBtb2RvIHByZWRldGVybWluYWRvLCBkbnNtYXNxIHBvbmUgbG9zIG5vbWJyZXMgbm8tY2FsaWZpY2Fkb3MKK2RlIGNsaWVudGVzIERIQ1AgZW4gZWwgRE5TLiBQb3IgZXN0YSByYXrzbiwgbG9zIG5vbWJyZXMgZGViZW4gc2VyIPpuaWNvcywKK2H6biBzaSBkb3MgY2xpZW50ZXMgcXVlIHRpZW5lbiBlbCBtaXNtbyBub21icmUgZXN04W4gZW4gZG9taW5pb3MKK2RpZmVyZW50ZXMuIFNpIHVuIHNlZ3VuZG8gY2xpZW50ZSBESENQIGFwYXJlY2UgZWwgY3VhbCB0aWVuZSBlbCBtaXNtbworbm9tYnJlIHF1ZSB1biBjbGllbnRlIGV4aXN0ZW50ZSwgZWwgbm9tYnJlIGVzIHRyYW5zZmVyaWRvIGFsIGNsaWVudGUgbnVldm8uIFNpCisuQiAtLWRoY3AtZnFkbgorZXN04SBmaWphZG8sIGVzdGUgY29tcG9ydGFtaWVudG8gY2FtYmlhOiBFbCBub21icmUgbm8tY2FsaWZpY2Fkbworbm8gZXMgcHVlc3RvIGVuIGVsIEROUywgc29sbyBlbCBub21icmUgY2FsaWZpY2Fkby4gRG9zIGNsaWVudGVzIERIQ1AgY29uCitlbCBtaXNtbyBub21icmUgcHVlZGVuIGFtYm9zIHF1ZWRhcnNlIGNvbiBlbCBub21icmUsIGNvbiB0YWwgcXVlIGxhIHBhcnRlCitkZSBkb21pbmlvIHNlYSBkaWZlcmVudGUgKG8gc2VhIHF1ZSBsb3Mgbm9tYnJlcyBjb21wbGV0YW1lbnRlIGNhbGlmaWNhZG9zCitkaWZpZXJhbikuIFBhcmEgYXNlZ3VyYXIgcXVlIHRvZG9zIGxvcyBub21icmVzIHRlbmdhbiB1bmEgcGFydGUgZGUgZG9taW5pbywKK2RlYmUgaGFiZXIgYWwgbWVub3MKKy5CIC0tZG9tYWluCitzaW4gdW5hIGRpcmVjY2nzbiBlc3BlY2lmaWNhZGEgY3VhbmRvCisuQiAtLWRoY3AtZnFkbgorZXN04SBmaWphZG8uCisuVFAKKy5CIC0tZW5hYmxlLXRmdHAKK0hhYmlsaXRhciBsYSBmdW5jafNuIGRlIHNlcnZpZG9yIFRGVFAuIEVzdG8gZXN04SBkZWxpYmVyYWRhbWVudGUgbGltaXRhZG8KK2EgbG8gbmVjZXNhcmlvIHBhcmEgaGFjZXJsZSBhIHVuIGNsaWVudGUgdW4gaW5pY2lvIHbtYSByZWQuIFNvbG8gbGVjdHVyYSBlcworcGVybWl0aWRhOyBsYXMgZXh0ZW5zaW9uZXMgdHNpemUgeSBibGtzaXplIHNvbiBzb3BvcnRhZGFzICh0c2l6ZSBzb2xvIGVzCitzb3BvcnRhZGEgZW4gbW9kbyBvY3RldG8pLgorLlRQCisuQiAtLXRmdHAtcm9vdD08ZGlyZWN0b3Jpbz4KK0J1c2NhciwgcmVsYXRpdm8gYWwgZGlyZWN0b3JpbyBicmluZGFkbywgYXJjaGl2b3MgcGFyYSB0cmFuc2ZlcmlyIG1lZGlhbnRlIGVsCit1c28gZGUgVEZUUC4gQ3VhbmRvIGVzdGEgb3BjafNuIGVzdOEgZmlqYWRhLCBwYXRocyBURlRQIHF1ZSBpbmNsdXllbiAiLi4iIHNvbgorcmVjaGF6YWRvcywgcGFyYSBwcmV2ZW5pciBxdWUgY2xpZW50ZXMgc2FsZ2FuIGRlIGxhIHJh7XogZXNwZWNpZmljYWRhLiBQYXRocworYWJzb2x1dG9zIChsb3MgcXVlIGNvbWllbnphbiBjb24gIi8iKSBlc3ThbiBwZXJtaXRpZG9zLCBwZXJvIGRlYmVuIGVzdGFyCitkZW50cm8gZGVsIHRmdHAtcm9vdC4KKy5UUAorLkIgLS10ZnRwLXVuaXF1ZS1yb290CitBZ3JlZ2FyIGxhIGRpcmVjY2nzbiBJUCBkZWwgY2xpZW50ZSBURlRQIGNvbW8gdW4gY29tcG9uZW50ZSBwYXRoIGRlbCBsYWRvIGRlbAorVEZUUC1yb290IChlbiBmb3JtYXRvIGVzdOFuZGFyIGRlIGN1YXRybyBwdW50b3MpLiBTb2xvIHbhbGlkbyBzaSB1biB0ZnRwLXJvb3QKK2VzdOEgZmlqYWRvIHkgZWwgZGlyZWN0b3JpbyBleGlzdGUuIFBvciBlamVtcGxvLCBzaSB0ZnRwLXJvb3QgZXMgIi90ZnRwIiB5IGVsCitjbGllbnRlIDEuMi4zLjQgcGlkZSBlbCBhcmNoaXZvICJtaWFyY2hpdm8iIGVudG9uY2VzIGVsIHBhdGggZWZlY3Rpdm8gc2Vy4QorIi90ZnRwLzEuMi4zLjQvbWlhcmNoaXZvIiBzaSAvdGZ0cC8xLjIuMy40IGV4aXN0ZSBvIC90ZnRwL21pYXJjaGl2byBzaSBuby4KKy5UUAorLkIgLS10ZnRwLXNlY3VyZQorSGFiaWxpdGFyIG1vZG8gVEZUUCBzZWd1cm86IHNpbiBlc3RvLCBjdWFscXVpZXIgYXJjaGl2byBxdWUgZXMgbGXtYmxlIHBvciBlbAorcHJvY2VzbyBkbnNtYXNxIGJham8gcmVnbGFzIG5vcm1hbGVzIGRlIGNvbnRyb2wgZGUgYWNjZXNvIFVOSVgsIGVzdOEgZGlzcG9uaWJsZQordu1hIFRGVFAuIEN1YW5kbyBsYSBvcGNp824gLS10ZnRwLXNlY3VyZSBlcyBmaWphZGEsIHNvbG8gYXJjaGl2b3MKK3BlcnRlbmVjaWVudGVzIGFsIHVzdWFyaW8gcXVlIGNvcnJlIGVsIHByb2Nlc28gZG5zbWFzcSBlc3ThbiBhY2Nlc2libGVzLiBTaQorZG5zbWFzcSBlc3ThIGNvcnJpZW5kbyBjb21vIHJvb3QsIHJlZ2xhcyBkaWZlcmVudGVzIGFwbGljYW46IC0tdGZ0cC1zZWN1cmUgbm8KK3RpZW5lIG5pbmf6biBlZmVjdG8sIHBlcm8gc29sbyBhcmNoaXZvcyBxdWUgdGllbmVuIGVsIGJpdCBkZSBsZWN0dXJhIGdsb2JhbAorZmlqYWRvcyBlc3ThbiBhY2Nlc2libGVzLiBObyBzZSByZWNvbWllbmRhIGNvcnJlciBkbnNtYXNxIGNvbW8gcm9vdCBjb24gVEZUUAoraGFiaWxpdGFkbywgeSBtdWNobyBtZW5vcyBzaW4gZXNwZWNpZmljYXIgLS10ZnRwLXJvb3QsIHlhIHF1ZSBzZSBwdWVkZSBleHBvbmVyCitjdWFscXVpZXIgYXJjaGl2byBkZSBsZWN0dXJhIGdsb2JhbCBlbiBlbCBzZXJ2aWRvciBhIGN1YWxxdWllciBob3N0IGRlIGxhIHJlZC4KKy5UUAorLkIgLS10ZnRwLW1heD08Y29uZWNjaW9uZXM+CitGaWphciBlbCBu+m1lcm8gbeF4aW1vIHBlcm1pdGlkbyBkZSBjb25lY2Npb25lcyBURlRQIHNpbXVsdOFuZWFzLiBFc3RvIGVzIDUwCitwb3IgcHJlZGV0ZXJtaW5hZG8uIEFsIHNlcnZpciB1biBu+m1lcm8gZ3JhbmRlIGRlIGNvbmVjY2lvbmVzIFRGVFAsIGztbWl0ZXMKK2RlIGRlc2NyaXB0b3IgZGUgYXJjaGl2byBwb3IgcHJvY2VzbyBwdWVkZW4gc2VyIGVuY29udHJhZG9zLiBEbnNtYXNxIG5lY2VzaXRhCit1biBkZXNjcmlwdG9yIGRlIGFyY2hpdm8gcG9yIGNhZGEgY29uZWNjaW9uIFRGVFAgY29uY3VycmVudGUsIHkgcG9yIGFyY2hpdm8KK/puaWNvIChtYXMgYWxndW5vcyBvdHJvcykuIERlIHRhbCBtYW5lcmEgcXVlIHNlcnZpcmxlIGVsIG1pc21vIGFyY2hpdm8KK3NpbXVsdOFuZW8gYSBuIGNsaWVudGVzIHJlcXVlcmly4SBlbCB1c28gZGUgbiArIDEwIGRlc2NyaXB0b3JlcyBkZSBhcmNoaXZvLAoreSBzZXJ2aXJsZXMgYXJjaGl2b3MgZGlmZXJlbnRlcyBzaW11bHThbmVhbWVudGUgcmVxdWVyaXLhICgyKm4pICsgMTAKK2Rlc2NyaXB0b3Jlcy4gU2kKKy5CIC0tdGZ0cC1wb3J0LXJhbmdlCitlcyBicmluZGFkbywgZXNvIHB1ZWRlIGFmZWN0YXIgZWwgbvptZXJvIGRlIGNvbmV4aW9uZXMgc2ltdWx04W5lYXMuCisuVFAKKy5CIC0tdGZ0cC1uby1ibG9ja3NpemUKK05vIHBlcm1pdGlyIHF1ZSBlbCBzZXJ2aWRvciBuZWdvY2llIGxhIG9wY2nzbiAiYmxvY2tzaXplIiBjb24gdW4gY2xpZW50ZS4KK0FsZ3Vub3MgY2xpZW50ZXMgY29uIGVycm9yZXMgcGlkZW4gZXN0YSBvcGNp824gcGVybyBzZSBwb3J04W4gbWFsIGN1YW5kbyBzZQorbGVzIGJyaW5kYS4KKy5UUAorLkIgLS10ZnRwLXBvcnQtcmFuZ2U9PGluaWNpbz4sPGZpbmFsPgorVW4gc2Vydmlkb3IgVEZUUCBlc2N1Y2hhIHBvciBpbmljaW9zIGRlIGNvbmV4afNuIGVuIHVuIHB1ZXJ0byBiaWVuIGNvbm9jaWRvCisoNjkpLCBwZXJvIHRhbWJpZW4gdXNhIHVuIHB1ZXJ0byBkaW5hbWljYW1lbnRlIHNlbGVjY2lvbmFkbyBwYXJhIGNhZGEKK2NvbmV4afNuLiBOb3JtYWxtZW50ZSBlc3RvcyBzb24gc2VsZWNjaW9uYWRvcyBwb3IgZWwgc2lzdGVtYSBvcGVyYXRpdm8sCitwZXJvIGVzdGEgb3BjafNuIGVzcGVjaWZpY2EgdW4gcmFuZ28gZGUgcHVlcnRvcyBwYXJhIHNlciB1c2FkbyBwb3IgdHJhbnNmZXJlbmNpYXMKK1RGVFAuIEVzdG8gcHVlZGUgc2VyIPp0aWwgY3VhbmRvIFRGVFAgdGllbmUgcXVlIHBhc2FyIGF0cmF2ZXMgZGUgdW4gZmlyZXdhbGwuCitFbCBjb21pZW56byBkZWwgcmFuZ28gbm8gcHVlZGUgc2VyIG1lbm9yIGEgMTAyNSBhIG1lbm9zIHF1ZSBkbnNtYXNxIGVzdOkgY29ycmllbmRvCitjb21vIHJvb3QuIEVsIG76bWVybyBkZSBjb25leGlvbmVzIHNpbXVsdOFuZWFzIGVzdOEgbGltaXRhZG8gcG9yIGVsIHRhbWHxbyBkZWwKK3JhbmdvIGRlIHB1ZXJ0b3MuCisuVFAKKy5CIFwtQywgLS1jb25mLWZpbGU9PGFyY2hpdm8+CitFc3BlY2lmaWNhciB1biBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNp824gZGlmZXJlbnRlLiBMYSBvcGNp824gY29uZi1maWxlCit0YW1iaeluIGVzIHBlcm1pdGlkYSBlbiBhcmNoaXZvcyBkZSBjb25maWd1cmFjafNuLCBwYXJhIGluY2x1aXIgbfpsdGlwbGVzCithcmNoaXZvcyBkZSBjb25maWd1cmFjafNuLgorLlRQCisuQiBcLTcsIC0tY29uZi1kaXI9PGRpcmVjdG9yaW8+CitMZWVyIHRvZG9zIGxvcyBhcmNoaXZvcyBkZW50cm8gZGVsIGRpcmVjdG9yaW8gYnJpbmRhZG8gY29tbyBhcmNoaXZvcworZGUgY29uZmlndXJhY2nzbi4gQXJjaGl2b3MgY3V5b3Mgbm9tYnJlcyB0ZXJtaW5lbiBjb24gfiBvIGNvbWllbnplbgorY29uIC4gbyBjb21pZW56ZW4geSB0ZXJtaW5lbiBjb24gIyBzb24gaWdub3JhZG9zLiBFc3RhIG9wY2nzbiBwdWVkZQorc2VyIGJyaW5kYWRhIGVuIGxhIGztbmVhIGRlIGNvbWFuZG9zIG8gZW4gdW4gYXJjaGl2byBkZSBjb25maWd1cmFjafNuLgorLlNIIEFSQ0hJVk8gREUgQ09ORklHVVJBQ0lPTgorQWwgaW5pY2lvLCBkbnNtYXNxIGxlZQorLkkgL2V0Yy9kbnNtYXNxLmNvbmYsCitzaSBleGlzdGUuIChFbiBGcmVlQlNELCBlbCBhcmNoaXZvIGVzCisuSSAvdXNyL2xvY2FsL2V0Yy9kbnNtYXNxLmNvbmYKKykgKHBlcm8gdmVyIGxhcyBvcGNp825lcworLkIgXC1DCit5CisuQiBcLTcKK3BvcmZhdm9yLikgRWwgZm9ybWF0byBkZSBlc3RlIGFyY2hpdm8gY29uc2lzdGUgZGUgdW5hIG9wY2nzbiBwb3IgbO1uZWEsCitleOFjdGFtZW50ZSBjb21vIGxhcyBvcGNpb25lcyBsYXJnYXMgZGV0YWxsYWRhcyBlbiBsYSBzZWNjafNuIE9QQ0lPTkVTCitwZXJvIHNpbiBlbCAiLS0iIGFsIGZyZW50ZS4gTO1uZWFzIHF1ZSBjb21pZW56YW4gY29uICMgc29uIGNvbWVudGFyaW9zCit5IHNvbiBpZ25vcmFkYXMuIFBhcmEgb3BjaW9uZXMgcXVlIHNvbG8gcHVlZGVuIHNlciBlc3BlY2lmaWNhZGFzIHVuYQorc29sYSB2ZXosIGVsIGFyY2hpdm8gZGUgY29uZmlndXJhY2nzbiBpbnZhbGlkYSBsYSBs7W5lYSBkZSBjb21hbmRvcy4KK0xhcyBjb21pbGxhcyBzb24gcGVybWl0aWRhcyBlbiBlbCBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNp8246IGVudHJlIGNvbWlsbGFzCit0aXBvICIgbG9zIHNpZ25pZmljYWRvcyBlc3BlY2lhbGVzIGRlICw6LiB5ICMgc29uIGVsaW1pbmFkb3MgeSBsb3MKK3NpZ3VpZW50ZXMgZXNjYXBlcyBzb24gcGVybWl0aWRvczogXFxcXCBcXCIgXFx0IFxcZSBcXGIgXFxyIHkgXFxuLgorQ29ycmVzcG9uZGVuIGEgdGFiLCBlc2NhcGUsIGJhY2tzcGFjZSwgcmV0dXJuIHkgbmV3bGluZS4KKy5TSCBOT1RBUworQWwgcmVjaWJpciB1biBTSUdIVVAKKy5CIGRuc21hc3EgCitsaWJlcmEgc3UgY2FjaGUgeSBlbnRvbmNlcyByZWNhcmdhCisuSSAvZXRjL2hvc3RzCit5CisuSSAvZXRjL2V0aGVycworYWwgaWd1YWwgcXVlIGN1YWxxdWllciBhcmNoaXZvIGJyaW5kYWRvIGNvbiAtLWRoY3AtaG9zdHNmaWxlLCAtLWRoY3Atb3B0c2ZpbGUsCitvIC0tYWRkbi1ob3N0cy4KK0VsIGFyY2hpdm8gZ3Vp824gZGUgY2FtYmlvIGRlIGFycmllbmRvcyBlcyBsbGFtYWRvIHBhcmEgdG9kb3MgbG9zIGFycmllbmRvcworREhDUCBleGlzdGVudGVzLiBTaQorLkIKKy0tbm8tcG9sbAorZXN04SBmaWphZG8gZW50b25jZXMgU0lHSFVQIHRhbWJp6W4gcmUtbGVlCisuSSAvZXRjL3Jlc29sdi5jb25mLgorU0lHSFVQCitOTyByZS1sZWUgZWwgYXJjaGl2byBkZSBjb25maWd1cmFjafNuLgorLlBQCitBbCByZWNpYmlyIHVuIFNJR1VTUjEsCisuQiBkbnNtYXNxIAorZXNjcmliZSBlc3RhZO1zdGljYXMgYSBsYSBiaXThY29yYSBkZWwgc2lzdGVtYS4gRXNjcmliZSBlbCB0YW1h8W8KK2RlbCBjYWNo6SwgZWwgbnVtZXJvIGRlIG5vbWJyZXMgcXVlIGhhbiB0ZW5pZG8gcXVlIHNlciByZW1vdmlkb3MgZGVsCitjYWNo6SBhbnRlcyBkZSBxdWUgdmVuY2llcmFuIHBhcmEgaGFjZXIgZXNwYWNpbyBwYXJhIG5vbWJyZXMgbnVldm9zLCB5IGVsCitu+m1lcm8gdG90YWwgZGUgbm9tYnJlcyBxdWUgaGFuIHNpZG8gaW5zZXJ0YWRvcyBlbiBlbCBjYWNo6S4gUGFyYSBjYWRhCitzZXJ2aWRvciB1cHN0cmVhbSBicmluZGEgZWwgbvptZXJvIGRlIGL6c3F1ZWRhcyBlbnZpYWRhcywgeSBlbAorbvptZXJvIHF1ZSByZXN1bHRhcm9uIGVuIGVycm9yLiBFbiBtb2RvCisuQiAtLW5vLWRhZW1vbgorbyBjdWFuZG8gYml0YWNvculvIGNvbXBsZXRvIGVzdOEgaGFiaWxpdGFkbyAoLXEpLCB1bmEgZGVzY2FyZ2EgY29tcGxldGEgZGUKK2VsIGNvbnRlbmlkbyBkZWwgY2FjaOkgZXMgaGVjaGEuCisuUFAKK0N1YW5kbyByZWNpYmUgdW4gU0lHVVNSMiB5IGVzdOEgYml0YWNvcmVhbmRvIGRpculjdGFtZW50ZSBhIHVuIGFyY2hpdm8gKHZlcgorLkIgLS1sb2ctZmFjaWxpdHkKKykKKy5CIGRuc21hc3EKK2NlcnJhcuEgeSByZWFicmly4SBlbCBhcmNoaXZvIGRlIGJpdOFjb3JhLiBO83Rlc2UgcXVlIGR1cmFudGUgZXN0YQorb3BlcmFjafNuLCBkbnNtYXNxIG5vIGVzdGFy4SBjb3JyaWVuZG8gY29tbyByb290LiBBbCBjcmVhciBlbCBhcmNoaXZvIGRlCitiaXThY29yYSwgZG5zbWFzcSBjYW1iaWEgZWwgZHVl8W8gZGVsIGFyY2hpdm8gYSBlbCB1c3VhcmlvIG5vcm1hbCBjb21vCitlbCBxdWUgY29ycmVy4S4gTG9ncm90YXRlIGRlYmUgc2VyIGNvbmZpZ3VyYWRvIHBhcmEgY3JlYXIgdW4gYXJjaGl2byBkZQorYml04WNvcmEgbnVldm8gY29uIHBlcm1pc29zIGlndWFsZXMgYWwgZXhpc3RlbnRlLCBhbnRlcyBkZSBlbnZpYXIKK1NJR1VTUjIuIFNpIGL6c3F1ZWRhcyBETlMgVENQIGVzdOFuIGVuIHByb2dyZXNvLCBlbCBhcmNoaXZvIGRlIGJpdOFjb3JhCit2aWVqbyBzZSBtYW50ZW5kcuEgYWJpZXJ0byBlbiBwcm9jZXNvcyBoaWpvcyBxdWUgZXN04W4gbWFuZWphbmRvCiti+nNxdWVkYXMgVENQLCB5IHB1ZWRlIGNvbnRpbnVhcnNlIGEgZXNjcmliaXJsZS4gSGF5IHVuIGztbWl0ZSBkZSAxNTAKK3NlZ3VuZG9zLCBkZXNwdelzIGRlIGxvIGN1YWwgdG9kb3MgbG9zIHByb2Nlc29zIFRDUCBleGlzdGVudGVzIHNlIGhhYnLhbgordmVuY2lkbzogcG9yIGVzdGEgcmF6824sIG5vIGVzIHNhYmlvIGNvbmZpZ3VyYXIgY29tcHJlc2nzbiBkZSBhcmNoaXZvcworZGUgYml04WNvcmEgcGFyYSBhcmNoaXZvcyBxdWUgYWNhYmFuIGRlIHNlciByb3RhZG9zLiBDb24gbG9ncm90YXRlLCBsYXMKK29wY2lvbmVzIHJlcXVlcmlkYXMgc29uCisuQiBjcmVhdGUKK3kKKy5CIGRlbGF5Y29tcHJlc3MuCisuUFAKK0Ruc21hc3EgZXMgdW4gcmVlbnZpYWRvciBkZSBi+nNxdWVkYXMgRE5TOiBubyBwdWVkZSByZXNwb25kZXIgYvpzcXVlZGFzCithcmJpdHJhcmlhcyBjb21lbnphbmRvIGRlc2RlIGxvcyBzZXJ2aWRvcmVzIHJvb3QgcGVybyByZWVudu1hIGRpY2hhcworYvpzcXVlZGFzIGEgdW4gc2Vydmlkb3IgRE5TIHJlY3Vyc2l2bywgZWwgY3VhbCBlcyB07XBpY2FtZW50ZSBwcm92Ze1kbworcG9yIGVsIHByb3ZlZWRvciBkZSBJbnRlcm5ldC4gUG9yIHByZWRldGVybWluYWRvLCBkbnNtYXNxIGxlZQorLkkgL2V0Yy9yZXNvbHYuY29uZgorcGFyYSBkZXNjdWJpciBsYXMgZGlyZWNjaW9uZXMgSVAgZGUgbG9zIHNlcnZpZG9yZXMgRE5TIHVwc3RyZWFtIHF1ZQorZGViZSB1c2FyLCBkYWRvIGEgcXVlIGVzdGEgaW5mb3JtYWNp824gZXMgbm9ybWFsbWVudGUgYWxtYWNlbmFkYSBhbGztLgorQW1lbm9zIHF1ZQorLkIgLS1uby1wb2xsCitzZWEgdXNhZG8sCisuQiBkbnNtYXNxCityZXZpc2EgZWwgdGllbXBvIGRlIG1vZGlmaWNhY2nzbiBkZQorLkkgL2V0Yy9yZXNvbHYuY29uZgorKG8gZXF1aXZhbGVudGUgc2kKKy5CIFwtLXJlc29sdi1maWxlIAorZXMgdXNhZG8pIHkgbG8gcmUtbGVlIHNpIGhhIGNhbWJpYWRvLiBFc3RvIHBlcm1pdGUgcXVlIHNlcnZpZG9yZXMgRE5TIHPpYW4KK2ZpamFkb3MgZGlu4W1pY2FtZW50ZSB27WEgUFBQIG8gREhDUCB5YSBxdWUgYW1ib3MgcHJvdG9jb2xvcyBicmluZGFuIGVzdGEKK2luZm9ybWFjafNuLgorTGEgYXVzZW5jaWEgZGUKKy5JIC9ldGMvcmVzb2x2LmNvbmYKK25vIGVzIHVuIGVycm9yIHlhIHF1ZSBwdWRvIGhhYmVyIHNpZG8gY3JlYWRhIGFudGVzIGRlIHF1ZSB1bmEgY29uZXhp824gUFBQCitoYXlhIGV4aXN0aWRvLiBEbnNtYXNxIHNpbXBsZW1lbnRlIHNpZ3VlIHJldmlzYW5kbyBlbiBjYXNvIGRlIHF1ZQorLkkgL2V0Yy9yZXNvbHYuY29uZiAKK3NlYSBjcmVhZG8gZW4gYWxn+m4gbW9tZW50by4gQSBkbnNtYXNxIHNlIGxlIHB1ZWRlIGRlY2lyIHF1ZSByZXZpc2UgbeFzCitkZSB1biBhcmNoaXZvIHJlc29sdi5jb25mLiBFc3RvIGVzIPp0aWwgZW4gdW5hIGxhcHRvcCwgZG9uZGUgYW1ib3MgUFBQIHkKK0RIQ1AgcG9kcu1hbiBlc3RhciBzaWVuZG8gdXNhZG9zOiBkbnNtYXNxIHB1ZWRlIHNlciBmaWphZG8gcGFyYSByZXZpc2FyIGFtYm9zCisuSSAvZXRjL3BwcC9yZXNvbHYuY29uZiAKK3kKKy5JIC9ldGMvZGhjcGMvcmVzb2x2LmNvbmYgCit5IHVzYXLhIGVsIGNvbnRlbmlkbyBkZWwgcXVlIGhheWEgY2FtYmlhZG8gbWFzIHJlY2llbnRlbWVudGUsCiticmluZGFuZG8gYXPtIGxhIGhhYmlsaWRhZCBkZSBjYW1iaW8gYXV0b23hdGljbyBlbnRyZSBzZXJ2aWRvcmVzIEROUy4KKy5QUAorU2Vydmlkb3JlcyB1cHN0cmVhbSB0YW1iaeluIHB1ZWRlbiBzZXIgZXNwZWNpZmljYWRvcyBlbiBsYSBs7W5lYSBkZQorY29tYW5kb3MgbyBlbiBlbCBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNp824uIEVzdGFzIGVzcGVjaWZpY2FjaW9uZXMgZGUKK3NlcnZpZG9yIG9wY2lvbmFsbWVudGUgbGxldmFuIHVuIG5vbWJyZSBkZSBkb21pbmlvIGVsIGN1YWwgbGUgZGljZSBhCitkbnNtYXNxIHF1ZSBkZWJlIHVzYXIgZXNlIHNlcnZpZG9yIHNvbG8gcGFyYSBlbmNvbnRyYXIgbm9tYnJlcyBlbiBlc2UKK2RvbWluaW8gZW4gcGFydGljdWxhci4KKy5QUAorUGFyYSBjb25maWd1cmFyIGRuc21hc3EgY29tbyBjYWNo6SBwYXJhIGVsIGhvc3QgZG9uZGUgZXN04QorY29ycmllbmRvLCBwb25lciB1biAibmFtZXNlcnZlciAxMjcuMC4wLjEiIGVuCisuSSAvZXRjL3Jlc29sdi5jb25mCitwYXJhIGFz7SBmb3J6YXIgcHJvY2Vzb3MgbG9jYWxlcyBhIGVudmlhciBi+nNxdWVkYXMgYSBkbnNtYXNxLiBFbnRvbmNlcywKK28gZXNwZWNpZmljYXIgbG9zIHNlcnZpZG9yZXMgdXBzdHJlYW0gZGly6WN0YW1lbnRlIGEgZG5zbWFzcSB1c2FuZG8gb3BjaW9uZXMKKy5CIFwtLXNlcnZlcgorbyBwb25pZW5kbyBzdXMgZGlyZWNjaW9uZXMgcmVhbGVzIGVuIG90cm8gYXJjaGl2bywgZGlnYW1vcworLkkgL2V0Yy9yZXNvbHYuZG5zbWFzcQoreSBjb3JyZXIgZG5zbWFzcSBjb24gbGEgb3BjaW9uCisuQiBcLXIgL2V0Yy9yZXNvbHYuZG5zbWFzcQorRXN0YSBzZWd1bmRhIHTpY25pY2EgcGVybWl0ZSBsYSBhY3R1YWxpemFjafNuIGRpbuFtaWNhIGRlIGxhcyBkaXJlY2Npb25lcworZGUgc2Vydmlkb3IgbWVkaWFudGUgUFBQIG8gREhDUC4KKy5QUAorRGlyZWNjaW9uZXMgZW4gL2V0Yy9ob3N0cyAiaGFy4W4gc29tYnJhIiBhIGRpZmVyZW50ZXMgZGlyZWNjaW9uZXMgcGFyYQorbG9zIG1pc21vcyBub21icmVzIGVuIHNlcnZpZG9yZXMgRE5TIHVwc3RyZWFtLCBhc+0gcXVlCisibWllbXByZXNhLmNvbSAxLjIuMy40IiBlbiAvZXRjL2hvc3RzIHNlIGFzZWd1cmFy4SBxdWUgbGFzIGL6c3F1ZWRhcworcG9yICJtaWVtcHJlc2EuY29tIiBzaWVtcHJlIHJldG9ybmFy4W4gMS4yLjMuNCBh+m4gc2kgYvpzcXVlZGFzIGVuIGVsCitzZXJ2aWRvciBETlMgdXBzdHJlYW0gZGV2b2x2ZXLtYW4gdW5hIGRpcmVjY2nzbiBkaWZlcmVudGUuIEhheSB1bmEKK2V4Y2VwY2nzbiBhIGVzdG86IHNpIGVsIHNlcnZpZG9yIEROUyB1cHN0cmVhbSBjb250aWVuZSB1biBDTkFNRSBxdWUKK2FwdW50YSBhIHVuIG5vbWJyZSBzb21icmVhZG8sIGVudG9uY2VzIGJ1c2NhbmRvIGVsIENOQU1FIGEgdHJhdul6IGRlCitkbnNtYXNxIHJlc3VsdGFy4SBlbiBxdWUgbGEgZGlyZWNjafNuIG5vLXNvbWJyZWFkYSBzZXLhIGFzb2NpYWRhIGNvbgorZWwgZGVzdGlubyBkZWwgQ05BTUUuIFBhcmEgY2lyY3VtdmVudGFyIGVzdG8sIGFncmVnYXIgZWwgQ05BTUUgYQorL2V0Yy9ob3N0cyBkZSB0YWwgbWFuZXJhIHF1ZSBlbCBDTkFNRSBlcyBzb21icmVhZG8gdGFtYmnpbi4KKy5QUAorRWwgc2lzdGVtYSBuZXR3b3JrLWlkIGZ1bmNpb25hIGRlIGxhIHNpZ3VpZW50ZSBtYW5lcmE6IFBhcmEgY2FkYSBwZWRpZG8KK0RIQ1AsIGRuc21hc3EgY29sZWNjaW9uYSB1biBqdWVnbyBkZSBldGlxdWV0YXMgbmV0d29yay1pZCB24WxpZGFzLAordW5hIGRlbAorLkIgZGhjcC1yYW5nZQordXNhZG8gcGFyYSBhbG9jYXIgbGEgZGlyZWNjafNuLCB1bmEgZGUgY3VhbHF1aWVyCisuQiBkaGNwLWhvc3QKK3F1ZSBjb2luY2lkYSAoeSAia25vd24iIHNpIHVuIGRoY3AtaG9zdCBjb2luY2lkZSksIGxhIGV0aXF1ZXRhICJib290cCIKK3BhcmEgcGVkaWRvcyBCT09UUCwgdW5hIGV0aXF1ZXRhIGN1eW8gbm9tYnJlIGVzIGVsIG5vbWJyZSBkZSBsYQoraW50ZXJmYWNlIGRvbmRlIGxsZWfzIGVsIHBlZGlkbywgeSBwb3NpYmxlbWVudGUgbXVjaGFzIGRlIGNsYXNlcworZGUgdmVuZGVkb3IgeSB1c3VhcmlvIHF1ZSBjb2luY2lkYW4gcXVlIGhheWFuIHNpZG8gZW52aWFkYXMgcG9yCitlbCBjbGllbnRlIERIQ1AuIEN1YWxxdWllciBvcGNp824KKy5CIGRoY3Atb3B0aW9uIAorcXVlIHRlbmdhIGV0aXF1ZXRhcyBuZXR3b3JrLWlkIHNlcuEgdXNhZGEgZW4gcHJlZmVyZW5jaWEgZGUgdW5hIG9wY2nzbgorLkIgZGhjcC1vcHRpb24sCitzaW4gZXRpcXVldGEsIGNvbiB0YWwgcXVlIF90b2Rhc18gbGFzIGV0aXF1ZXRhcyBjb2luY2lkYW4gZW4gYWxndW5hCitwYXJ0ZSBkZWwganVlZ28gY29sZWNjaW9uYWRvIGRlc2NyaWJpZG8gYXJyaWJhLiBFbCBwcmVmaWpvICIjIiBlbiB1bmEKK2V0aXF1ZXRhIHNpZ25pZmljYSAibm8iIGFz7SBxdWUgLS1kaGNwPW9wdGlvbj0jcHVycGxlLDMsMS4yLjMuNCBlbnbtYQorbGEgb3BjafNuIGN1YW5kbyBsYSBldGlxdWV0YSBuZXR3b3JrLWlkICJwdXJwbGUiIG5vIGVzdOEgZW4gZWwganVlZ28KK2RlIGV0aXF1ZXRhcyB24WxpZGFzLgorLlBQCitTaSBlbCBuZXR3b3JrLWlkIGVuIHVuCisuQiBkaGNwLXJhbmdlIAorZXMgcHJlZmlqYWRvIGNvbiAibmV0OiIsIGVudG9uY2VzIHN1IHNpZ25pZmljYWRvIGNhbWJpYSBkZSAiZmlqYXIKK2V0aXF1ZXRhIiBhICJjb2luY2lkaXIgY29uIGV0aXF1ZXRhIi4gTyBzZWEgcXVlIHNpIGhheSBt4XMgZGUgdW4KK2RoY3AtcmFuZ2UgZW4gZW4gdW5hIHN1YnJlZCwgeSB1bm8gdGllbmUgdW5hIGV0aXF1ZXRhIG5ldHdvcmstaWQgbGEKK2N1YWwgZXN04SBmaWphZGEgKHBvciBlamVtcGxvIHVuYSBvcGNp824gZGUgY2xhc2UgZGUgdmVuZGVkb3IpIGVudG9uY2VzCitob3N0cyBxdWUgZmlqZW4gbGEgZXRpcXVldGEgbmV0d29yay1pZCBzZXLhbiBhbG9jYWRvcyBkaXJlY2Npb25lcyBlbgorZWwgcmFuZ28gZXRpcXVldGFkby4KKy5QUCAKK0VsIHNlcnZpZG9yIERIQ1AgZGUgZG5zbWFzcSBmdW5jaW9uYXLhIGNvbW8gc2Vydmlkb3IgQk9PVFAgdGFtYmllbiwKK2NvbiB0YWwgcXVlIGxhcyBkaXJlY2Npb25lcyBNQUMgeSBJUCBkZSBsb3MgY2xpZW50ZXMgc2VhbiBicmluZGFkYXMsCit5YSBzZWEgdXNhbmRvIGNvbmZpZ3VyYWNpb25lcworLkIgZGhjcC1ob3N0IAorbyBlbgorLkkgL2V0Yy9ldGhlcnMKKywgeSB1bmEgY29uZmlndXJhY2nzbgorLkIgZGhjcC1yYW5nZSAKK2VzdOkgcHJlc2VudGUgcGFyYSBhY3RpdmFyIGVsIHNlcnZpZG9yIERIQ1AgZW4gdW5hIHJlZCBwYXJ0aWN1bGFyLgorKEZpamFyIC0tYm9vdHAtZHluYW1pYyBlbGltaW5hIGxhIG5lY2VzaWRhZCBkZSB0cmF6YWRvcyBlc3ThdGljb3MuKSBFbAorcGFy4W1ldHJvIGRlIG5vbWJyZSBkZSBhcmNoaXZvcyBlbiB1biBwZWRpZG8gQk9PVFAgZXMgcmV2aXNhZG8gcGFyYQordmVyIHNpIGNvaW5jaWRlIGNvbiBhbGf6biBuZXR3b3JrLWlkIGVuIGNvbmZpZ3VyYWNp825lcworLkIgZGhjcC1vcHRpb24gCithbCBpZ3VhbCBxdWUgbGEgZXRpcXVldGEgImJvb3RwIiwgcGVybWl0aWVuZG8gYXPtIGFsZ/puIGNvbnRyb2wgc29icmUKK2xhcyBvcGNpb25lcyBkZXZ1ZWx0YXMgYSBkaWZlcmVudGVzIGNsYXNlcyBkZSBob3N0cy4KKworLlNIIEPTRElHT1MgRVhJVAorLlBQCiswIC0gRG5zbWFzcSBoaXpvIGZvcmsgaGFjaWEgZWwgZm9uZG8gZXhpdG9zYW1lbnRlLCBvIHRlcm1pbvMgZGUgbWFuZXJhCitub3JtYWwgc2kgaXIgYWwgZm9uZG8gbm8gZXN04SBoYWJpbGl0YWRvLgorLlBQCisxIC0gVW4gcHJvYmxlbWEgY29uIGxhIGNvbmZpZ3VyYWNp824gaGEgc2lkbyBkZXRlY3RhZG8uCisuUFAKKzIgLSBVbiBwcm9ibGVtYSBjb24gYWNjZXNvIGEgcmVkZXMgb2N1cnJp8yAoZGlyZWNjafNuIGVuIHVzbywgaW50ZW50bworZGUgdXNhciBwdWVydG9zIHByaXZpbGVnaWFkb3Mgc2luIHBlcm1pc28pLgorLlBQCiszIC0gVW4gcHJvYmxlbWEgY29uIHVuYSBvcGVyYWNp824gZGUgc2lzdGVtYSBkZSBhcmNoaXZvcyBvY3VycmnzIChhcmNoaXZvCitvIGRpcmVjdG9yaW8gYXVzZW50ZSwgcGVybWlzb3MpLgorLlBQCis0IC0gRmFsbGEgZGUgYWxvY2FjafNuIGRlIG1lbW9yaWEuCisuUFAKKzUgLSBPdHJvIHByb2JsZW1hIG1pc2NlbOFuZW8uCisuUFAKKzExIG8gbWF5b3IgLSB1biBjb2RpZ28gZGUgcmV0b3JubyBubyBjZXJvIGZ16SByZWNpYmlkbyBkZWwgbGxhbWFkbyAiaW5pdCIKK2RlbCBwcm9jZXNvIGRlIGFyY2hpdm8gZ3Vp824gZGUgYXJyaWVuZG9zLiBFbCBj82RpZ28gZXhpdCBkZSBkbnNtYXNxIGVzCitlbCBj82RpZ28gZXhpdCBkZWwgYXJjaGl2byBndWnzbiBjb24gMTAgc3VtYWRvLgorCisuU0ggTElNSVRFUworTG9zIHZhbG9yZXMgcHJlZGV0ZXJtaW5hZG9zIHBhcmEgbGltaXRlcyBkZSByZWN1cnNvcyBzb24gZ2VuZXLhbG1lbnRlCitjb25zZXJ2YWRvcmVzLCB5IGFwcm9waWFkb3MgcGFyYSB1c28gZW4gZGlzcG9zaXRpdm9zIHRpcG8gZW5ydXRhZG9yCitlbmNydXN0cmFkbyBjb24gcHJvY2VzYWRvcmVzIGxlbnRvcyB5IHBvY2EgbWVtb3JpYS4gRW4gaGFyZHdhcmUgbeFzCitjYXDheiwgZXMgcG9zaWJsZSBpbmNyZW1lbnRhciBsb3MgbO1taXRlcywgeSBzb3BvcnRhciBtdWNob3MgbWFzCitjbGllbnRlcy4gTG8gc2lndWllbnRlIHNlIGFwbGljYSBhIGRuc21hc3EtMi4zNzogdmVyc2lvbmVzIHByZXZpYXMKK25vIGVzY2FsYWJhbiB0YW4gYmllbi4KKworLlBQCitEbnNtYXNxIGVzIGNhcGF6IGRlIHNvcG9ydGFyIGNvbiBETlMgeSBESENQIGEgcG9yIGxvIG1lbm9zIG1pbCAoMSwwMDApCitjbGllbnRlcy4gUG9yIHN1cHVlc3RvIHF1ZSBwYXJhIGxvZ3JhciBlc3RvIGRlYmUgYXVtZW50YXJzZSBlbCB2YWxvciBkZQorLkIgLS1kaGNwLWxlYXNlLW1heAorLCB5IHRpZW1wb3MgZGUgYXJyaWVuZG8gbm8gZGViZW4gc2VyIG11eSBjb3J0b3MgKG1lbm9zIGRlIHVuYSBob3JhKS4KK0VsIHZhbG9yIGRlCisuQiAtLWRucy1mb3J3YXJkLW1heAorcHVlZGUgc2VyIGF1bWVudGFkbzogY29taWVuemUgY29uIGVsIGVxdWl2YWxlbnRlIGEgZWwgbvptZXJvIGRlIGNsaWVudGVzIHkKK2F1beludGVsbyBzaSBwYXJlY2UgbGVudG8gZWwgRE5TLiBO83Rlc2UgcXVlIGVsIHJlbmRpbWllbnRvIEROUyBkZXBlbmRlCit0YW1iaeluIGRlIGxvcyBzZXJ2aWRvcmVzIEROUyB1cHN0cmVhbS4gRWwgdGFtYfFvIGRlbCBjYWNo6SBETlMgcHVlZGUgc2VyCitpbmNyZW1lbnRhZG86IGVsIGztbWl0ZSBvYmxpZ2F0b3JpbyBlcyAxMCwwMDAgbm9tYnJlcyB5IGVsIHByZWRldGVybWluYWRvCisoMTUwKSBlcyBtdXkgYmFqby4gRWwgZW52aWFybGUgdW4gU0lHVVNSMSBhIGRuc21hc3EgaGFjZSBxdWUgYml0YWNvcullCitpbmZvcm1hY2nzbiBxdWUgZXMg+nRpbCBwYXJhIGFmaW5hciBlbCB0YW1h8W8gZGUgY2FjaOkuIFZlciBsYSBzZWNjafNuCisuQiBOT1RBUworcGFyYSBkZXRhbGxlcy4KKworLlBQCitFbCBzZXJ2aWRvciBURlRQIGluY29ycG9yYWRvIGVzIGNhcOF6IGRlIHNvcG9ydGFyIHZhcmlhcyB0cmFuc2ZlcmVuY2lhcworc2ltdWx04W5lYXMgZGUgYXJjaGl2b3M6IGVsIGztbWl0ZSBhYnNvbHV0byBlc3ThIHJlbGFjaW9uYWRvIGNvbiBlbCBu+m1lcm8KK2RlIGZpbGUtaGFuZGxlcyBwZXJtaXRpZG9zIGEgdW4gcHJvY2VzbyB5IGxhIGhhYmlsaWRhZCBkZWwgc3lzdGVtIGNhbGwKK3NlbGVjdCgpIGEgc29wb3J0YXIgbvptZXJvcyBncmFuZGVzIGRlIGZpbGUtaGFuZGxlcy4gU2kgZWwgbO1taXRlIGVzIGZpamFkbworZGVtYXNpYWRvIGFsdG8gY29uCisuQiAtLXRmdHAtbWF4CitzZXLhIGRlLWVzY2FsYWRvIHkgZWwgbO1taXRlIHJlYWwgc2Vy4SBiaXRhY29yZWFkbyBhbCBpbmljaW8uIE7zdGVzZSBxdWUgbeFzCit0cmFuc2ZlcmVuY2lhcyBzb24gcG9zaWJsZXMgY3VhbmRvIGVsIG1pc21vIGFyY2hpdm8gZXMgZW52aWFkbyBxdekgY3VhbmRvCitjYWRhIHRyYW5zZmVyZW5jaWEgZW527WEgdW4gYXJjaGl2byBkaWZlcmVudGUuCisKKy5QUAorRXMgcG9zaWJsZSB1c2FyIGRuc21hc3EgcGFyYSBuZWdhciBwdWJsaWNpZGFkIFdlYiB1c2FuZG8gdW5hIGxpc3RhIGRlCitzZXJ2aWRvcmVzIGRlIGJhbm5lcnMgYmllbiBjb25vY2lkb3MsIHRvZG9zIHJlc29sdmllbmRvc2UgYSAxMjcuMC4wLjEgbworMC4wLjAuMCBlbgorLkIgL2V0Yy9ob3N0cyAKK28gZW4gdW4gYXJjaGl2byBob3N0cyBhZGljaW9uYWwuIExhIGxpc3RhIHB1ZWRlIHNlciBtdXkgbGFyZ2EuIERuc21hc3EgaGEgc2lkbworcHJvYmFkbyBleGl083NhbWVudGUgY29uIHVuIG1pbGzzbiBkZSBub21icmVzLiBFc2UgdGFtYfFvIGRlIGFyY2hpdm8gbmVjZXNpdGEKK3VuIENQVSBkZSAxR0h6IHkgYXByb3hpbWFkYW1lbnRlIDYwTUIgZGUgUkFNLgorCisuU0ggQVJDSElWT1MKKy5JUiAvZXRjL2Ruc21hc3EuY29uZiAKKworLklSIC91c3IvbG9jYWwvZXRjL2Ruc21hc3EuY29uZgorCisuSVIgL2V0Yy9yZXNvbHYuY29uZgorCisuSVIgL2V0Yy9ob3N0cworCisuSVIgL2V0Yy9ldGhlcnMKKworLklSIC92YXIvbGliL21pc2MvZG5zbWFzcS5sZWFzZXMgCisKKy5JUiAvdmFyL2RiL2Ruc21hc3EubGVhc2VzCisKKy5JUiAvdmFyL3J1bi9kbnNtYXNxLnBpZAorLlNIIFZFUiBUQU1CSUVOCisuQlIgaG9zdHMgKDUpLCAKKy5CUiByZXNvbHZlciAoNSkKKy5TSCBBVVRPUgorRXN0ZSBtYW51YWwgZnVlIGVzY3JpdG8gcG9yIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+LgorCitUcmFkdWNpZG8gYSBlc3Bh8W9sIHBvciBDaHJpc3RvcGhlciBDaGF0aGFtIDxjaHJpc2xpbnV4QGdtYWlsLmNvbT4uCmRpZmYgLS1naXQgYS9tYW4vZnIvZG5zbWFzcS44IGIvbWFuL2ZyL2Ruc21hc3EuOApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MmVjMDI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL2ZyL2Ruc21hc3EuOApAQCAtMCwwICsxLDE0NDkgQEAKKy5USCBETlNNQVNRIDgKKy5TSCBOQU1FCitEbnNtYXNxIFwtIFVuIHNlcnZldXIgREhDUCBldCBjYWNoZSBETlMgcG9pZHMtcGx1bWUuCisuU0ggU1lOT1BTSVMKKy5CIGRuc21hc3EKKy5JIFtPUFRJT05dLi4uCisuU0ggIkRFU0NSSVBUSU9OIgorLkJSIGRuc21hc3EKK2VzdCB1biBzZXJ2ZXVyIERIQ1AgZXQgRE5TIMOgIGZhaWJsZSBlbXByZWludGUgbcOpbW9pcmUuIElsIG9mZnJlIMOgIGxhIGZvaXMgbGVzCitzZXJ2aWNlcyBETlMgZXQgREhDUCBwb3VyIHVuIHLDqXNlYXUgbG9jYWwgKExBTikuCisuUFAKK0Ruc21hc3EgYWNjZXB0ZSBsZXMgcmVxdcOqdGVzIEROUyBldCB5IHLDqXBvbmRzIHNvaXQgZW4gdXRpbGlzYW50IHVuIHBldGl0IGNhY2hlCitsb2NhbCwgc29pdCBlbiBlZmZlY3R1YW50IHVuZSByZXF1w6p0ZSDDoCB1biBzZXJ2ZXVyIEROUyByw6ljdXJzaWYgZXh0ZXJuZSAocGFyCitleGVtcGxlIGNlbHVpIGRlIHZvdHJlIGZvdXJuaXNzZXVyIGQnYWNjw6hzIGludGVybmV0KS4gSWwgY2hhcmdlIGxlIGNvbnRlbnUgZHUKK2ZpY2hpZXIgL2V0Yy9ob3N0cyBhZmluIHF1ZSBsZXMgbm9tcyBsb2NhdXggbidhcHBhcmFpc3NhbnQgcGFzIGRhbnMgbGVzIEROUworZ2xvYmF1eCBzb2llbnQgdG91dCBkZSBtw6ptZSByw6lzb2x1cywgZXQgYXNzdXJlIMOpZ2FsZW1lbnQgbGEgcsOpc29sdXRpb24gZGUgbm9tCitwb3VyIGxlcyBow7R0ZXMgcHLDqXNlbnRzIGRhbnMgbGUgc2VydmljZSBESENQLgorLlBQCitMZSBzZXJ2ZXVyIERIQ1AgRG5zbWFzcSBESENQIHN1cHBvcnRlIGxlcyBkw6lmaW5pdGlvbnMgZCdhZHJlc3NlcyBzdGF0aXF1ZXMgZXQgbGVzCityw6lzZWF1eCBtdWx0aXBsZXMuIElsIGVudm9pZSBwYXIgZMOpZmF1dCB1biBqZXUgcmFpc29ubmFibGUgZGUgcGFyYW3DqHRyZXMgREhDUCwgZXQKK3BldXQgw6p0cmUgY29uZmlndXLDqSBwb3VyIGVudm95ZXIgbidpbXBvcnRlIHF1ZWwgb3B0aW9uIERIQ1AuCitJbCBpbmNsdXQgdW4gc2VydmV1ciBURlRQIHPDqWN1cmlzw6kgZW4gbGVjdHVyZSBzZXVsZSBwZXJtZXR0YW50IGxlIGTDqW1hcnJhZ2UgdmlhCitsZSByw6lzZWF1L1BYRSBkZSBjbGllbnRzIERIQ1AgZXQgc3VwcG9ydGUgw6lnYWxlbWVudCBsZSBwcm90b2NvbGUgQk9PVFAuCisuUFAKK0Ruc21hc3Egc3VwcG9ydGUgSVB2NiBwb3VyIGxlIEROUyBtYWlzIHBhcyBwb3VyIGxlIERIQ1AuCisuU0ggT1BUSU9OUworTm90ZXMgOiBJbCBlc3QgcG9zc2libGUgZCd1dGlsaXNlciBkZXMgb3B0aW9ucyBzYW5zIGxldXIgZG9ubmVyIGRlIHBhcmFtw6h0cmUuCitEYW5zIGNlIGNhcywgbGEgZm9uY3Rpb24gY29ycmVzcG9uZGFudGUgc2VyYSBkw6lzYWN0aXbDqWUuIFBhciBleGVtcGxlCisuQiAtLXBpZC1maWxlPQorKHNhbnMgcGFyYW3DqHRyZSBhcHLDqHMgbGUgPSkgZMOpc2FjdGl2ZSBsJ8OpY3JpdHVyZSBkdSBmaWNoaWVyIFBJRC4KK1N1ciBCU0QsIMOgIG1vaW5zIHF1ZSBsZSBsb2dpY2llbCBuZSBzb2l0IGNvbXBpbMOpIGF2ZWMgbGEgYmlibGlvdGjDqHF1ZSBHTlUKK2dldG9wdCwgbGEgZm9ybWUgbG9uZ3VlIGRlcyBvcHRpb25zIG5lIGZvbmN0aW9ubmUgcGFzIGVuIGxpZ25lIGRlIGNvbW1hbmRlOyBFbGxlCitlc3QgdG91am91cnMgc3VwcG9ydMOpZSBkYW5zIGxlIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbi4KKy5UUAorLkIgLS10ZXN0CitWw6lyaWZpZSBsYSBzeW50YXhlIGR1IG91IGRlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9ucy4gU2UgdGVybWluZSBhdmVjIGxlCitjb2RlIGRlIHJldG91ciAwIHNpIHRvdXQgZXN0IE9LLCBvdSB1biBjb2RlIGRpZmbDqXJlbnQgZGUgMCBkYW5zIGxlIGNhcworY29udHJhaXJlLiBOZSBkw6ltYXJyZSBwYXMgRG5zbWFzcS4KKy5UUAorLkIgXC1oLCAtLW5vLWhvc3RzCitOZSBwYXMgY2hhcmdlciBsZXMgbm9tcyBkdSBmaWNoaWVyIC9ldGMvaG9zdHMuCisuVFAKKy5CIFwtSCwgLS1hZGRuLWhvc3RzPTxmaWNoaWVyPgorRmljaGllcnMgZCdow7R0ZXMgYWRkaXRpb25uZWxzLiBMaXJlIGxlIGZpY2hpZXIgc3DDqWNpZmnDqSBlbiBwbHVzIGRlIC9ldGMvaG9zdHMuCitTaSAKKy5CIC1oCitlc3Qgc3DDqWNpZmnDqSwgbGlyZSB1bmlxdWVtZW50IGxlIGZpY2hpZXIgc3DDqWNpZmnDqS4gQ2V0dGUgb3B0aW9uIHBldXQgw6p0cmUKK3LDqXDDqXTDqWUgYWZpbiBkJ2Fqb3V0ZXIgZCdhdXRyZXMgZmljaGllcnMuIFNpIHVuIHLDqXBlcnRvaXJlIGVzdCBkb25uw6ksIGxpcyBsZXMKK2ZpY2hpZXJzIGNvbnRlbnVzIGRhbnMgY2UgcsOpcGVydG9pcmUuCisuVFAKKy5CIFwtRSwgLS1leHBhbmQtaG9zdHMKK0Fqb3V0ZSBsZSBub20gZGUgZG9tYWluZSBhdXggbm9tcyBzaW1wbGVzIChuZSBjb250ZW5hbnQgcGFzIGRlIHBvaW50IGRhbnMgbGUKK25vbSkgY29udGVudXMgZGFucyBsZSBmaWNoaWVyIC9ldGMvaG9zdHMsIGRlIGxhIG3Dqm1lIGZhw6dvbiBxdWUgcG91ciBsZSBzZXJ2aWNlCitESENQLiBOb3RleiBxdWUgY2VsYSBuZSBzJ2FwcGxpcXVlIHBhcyBhdSBub20gZGUgZG9tYWluZSBkYW5zIGxlcyBDTkFNRSwgbGVzCitlbnJlZ2lzdHJlbWVudHMgUFRSLCBUWFQsIGV0Yy4uLgorLlRQCisuQiBcLVQsIC0tbG9jYWwtdHRsPTxkdXLDqWU+CitMb3JzcXVlIERuc21hc3EgcsOpcG9uZCBhdmVjIHVuZSBpbmZvcm1hdGlvbiBwcm92ZW5hbnQgZHUgZmljaGllciAvZXRjL2hvc3RzIG91CithdmVjIHVuIGJhaWwgREhDUCwgaWwgZG9ubmUgdW4gdGVtcHMgZGUgdmllICh0aW1lLXRvLWxpdmUpIHBvc2l0aW9ubsOpIMOgIHrDqXJvLAorYWZpbiBkJ2luZGlxdWVyIMOgIGxhIG1hY2hpbmUgZmFpc2FudCBsYSByZXF1w6p0ZSBxdWUgY2VsbGUtY2kgIG5lIGRvaXQgcGFzIMOqdHJlCittaXNlIGRhbnMgdW4gY2FjaGUuIENlY2kgZXN0IGxlIGNvbXBvcnRlbWVudCBjb3JyZWN0IGRhbnMgcHJlc3F1ZSB0b3V0ZXMgbGVzCitzaXR1YXRpb25zLgorQ2V0dGUgb3B0aW9uIHBlcm1ldCBkZSBzcMOpY2lmaWVyIGxhIHZhbGV1ciBkZSB0aW1lLXRvLWxpdmUgw6AgcmV0b3VybmVyIChlbgorc2Vjb25kZXMpLiBDZWxhIHBlcm1ldCBkZSByw6lkdWlyZSBsYSBjaGFyZ2Ugc3VyIGxlIHNlcnZldXIsIG1haXMgbGVzIGNsaWVudHMKK3Jpc3F1ZW50IGQndXRpbGlzZXIgZGVzIGRvbm7DqWVzIHDDqXJpbcOpZXMgZGFucyBjZXJ0YWlucyBjYXMuCisuVFAKKy5CIC0tbmVnLXR0bD08ZHVyw6llPgorTGVzIHLDqXBvbnNlcyBuw6lnYXRpdmVzIHByb3ZlbmFudCBkZXMgc2VydmV1cnMgYW1vbnRzIGNvbnRpZW5uZW50IG5vcm1hbGVtZW50Cit1bmUgaW5mb3JtYXRpb24gZGUgZHVyw6llIGRlIHZpZSAodGltZS10by1saXZlKSBkYW5zIGxlcyBlbnJlZ2lzdHJlbWVudHMgU09BLAoraW5mb3JtYXRpb24gZG9udCBkbnNtYXNxIHNlIHNlcnQgcG91ciBtZXR0cmUgbGEgcsOpcG9uc2UgZW4gY2FjaGUuIFNpIGxhIHLDqXBvbnNlCitkdSBzZXJ2ZXVyIGFtb250IG9tZXQgY2V0dGUgaW5mb3JtYXRpb24sIGRuc21hc3EgbmUgY2FjaGUgcGFzIGxhIHLDqXBvbnNlLiBDZXR0ZQorb3B0aW9uIHBlcm1ldCBkZSBkb25lciB1bmUgdmFsZXVyIGRlIGR1csOpZSBkZSB2aWUgcGFyIGTDqWZhdXQgKGVuIHNlY29uZGVzKSBxdWUKK2Ruc21hc3EgdXRpbGlzZSBwb3VyIG1ldHRyZSBsZXMgcsOpcG9uc2VzIG7DqWdhdGl2ZXMgZGFucyBzb24gY2FjaGUsIG3Dqm1lIGVuCitsJ2Fic2VuY2UgZCdlbnJlZ2lzdHJlbWVudCBTT0EuCisuVFAKKy5CIFwtaywgLS1rZWVwLWluLWZvcmVncm91bmQKK05lIHBhcyBhbGxlciBlbiB0w6JjaGUgZGUgZm9uZCBhdSBsYW5jZW1lbnQsIG1haXMgZW4gZGVob3JzIGRlIGNlbGEsIGZvbmN0aW9ubmVyCitub3JtYWxlbWVudC4gQ2UgbW9kZSBlc3QgcHLDqXZ1IHBvdXIgbGVzIGNhcyBvw7kgRG5zbWFzcSBlc3QgbGFuY8OpIHBhciBkYWVtb250b29scworb3UgbGF1bmNoZC4KKy5UUAorLkIgXC1kLCAtLW5vLWRhZW1vbgorTW9kZSBkZWJ1ZyAoZMOpdmVybWluYWdlKSA6IG5lIHBhcyBhbGxlciBlbiB0w6JjaGUgZGUgZm9uZCwgbmUgcGFzIMOpY3JpcmUgZGUKK2ZpY2hpZXIgcGlkLCBuZSBwYXMgY2hhbmdlciBkJ2lkZW50aWZpYW50IHV0aWxpc2F0ZXVyLCBnw6luw6lyZXIgdW4gw6l0YXQgY29tcGxldAorZHUgY2FjaGUgbG9ycyBkZSBsYSByw6ljZXB0aW9uIGQndW4gc2lnbmFsIFNJR1VTUjEsIGVudm95ZXIgbGVzIGxvZ3Mgc3VyIGxhCitzb3J0aWUgc3RhbmRhcmQgZCdlcnJldXIgKCJzdGRlcnIiKSBkZSBtw6ptZSBxdWUgZGFucyBsZSBzeXNsb2csIG5lIHBhcyBjcsOpZXIgZGUKK3Byb2Nlc3N1cyBmaWxzIHBvdXIgdHJhaXRlciBsZXMgcmVxdcOqdGVzIFRDUC4KKy5UUAorLkIgXC1xLCAtLWxvZy1xdWVyaWVzCitFbnJlZ2lzdHJlciBsZXMgcsOpc3VsdGF0cyBkZXMgcmVxdcOqdGVzIEROUyB0cmFpdMOpZXMgcGFyIERuc21hc3EgZGFucyB1biBmaWNoaWVyCitkZSB0cmFjZXMgKCJsb2dzIikuIEFjdGl2ZSBsYSBnw6luw6lyYXRpb24gZCd1biDDqXRhdCBjb21wbGV0IGR1IGNhY2hlIGxvcnMgZGUgbGEKK3LDqWNlcHRpb24gZCd1biBzaWduYWwgU0lHVVNSMS4KKy5UUAorLkIgXC04LCAtLWxvZy1mYWNpbGl0eT08ZmFjaWxpdHk+CitEw6lmaW5pdCBsYSAiZmFjaWxpdHkiIGRhbnMgbGFxdWVsbGUgRG5zbWFzcSBlbnZlcnJhIHNlcyBlbnRyw6llcyBzeXNsb2csIHBhcgorZMOpZmF1dCBEQUVNT04gb3UgTE9DQUwwIHNpIGxlIG1vZGUgZGVidWcgZXN0IGFjdGl2w6kuIFNpIGxhICJmYWNpbGl0eSIgY29udGllbnQKK2F1IG1vaW5zIHVuIGNhcmFjdMOocmUgIi8iLCBhbG9ycyBEbnNtYXNxIGNvbnNpZMOocmUgcXUnaWwgcydhZ2l0IGQndW4gZmljaGllciBldAorZW52ZXJyYSBsZXMgbG9ncyBkYW5zIGxlIGZpY2hpZXIgY29ycmVzcG9uZGFudCDDoCBsYSBwbGFjZSBkdSBzeXNsb2cuIChMZXMKK2VycmV1cnMgbG9ycyBkZSBsYSBsZWN0dXJlIGRlIGxhIGNvbmZpZ3VyYXRpb24gdm9udCB0b3Vqb3VycyB2ZXJzIGxlIHN5c2xvZywKK21haXMgdG91cyBsZXMgbWVzc2FnZXMgcG9zdMOpcmlldXJlcyDDoCB1biBkw6ltYXJyYWdlIHLDqXVzc2kgc2Vyb250IGV4Y2x1c2l2ZW1lbnQKK2Vudm95w6lzIHZlcnMgbGUgZmljaGllciBkZSBsb2dzKS4gTG9yc3F1ZSBEbnNtYXNxIGVzdCBjb25maWd1csOpIHBvdXIgZW52b3llcgorc2VzIHRyYWNlcyB2ZXJzIHVuIGZpY2hpZXIsIGxhIHLDqWNlcHRpb24gZCd1biBzaWduYWwgU0lHVVNSMiBlbnRyYWluZSBsYQorZmVybWV0dXJlIGV0IHLDqW91dmVydHVyZSBkdSBmaWNoaWVyLiBDZWxhIHBlcm1ldCBsYSByb3RhdGlvbiBkZSBmaWNoaWVycyBkZQordHJhY2VzIHNhbnMgbsOpY2Vzc2l0ZXIgbCdhcnLDqnQgZGUgRG5zbWFzcS4KKy5UUAorLkIgLS1sb2ctYXN5bmNbPTxsaWduZXM+XQorUGVybWV0IGwnZW52b2kgZGUgdHJhY2VzIGRlIG1hbmnDqHJlIGFzeW5jaHJvbmUsIGV0IGRlIG1hbmnDqHJlIG9wdGlvbm5lbGxlLCBsZQorbm9tYnJlIGRlIGxpZ25lcyBkZXZhbnQgw6p0cmUgbWlzZXMgZGFucyBsYSBmaWxlIGQnYXR0ZW50ZSBwYXIgRG5zbWFzcSBsb3JzcXVlCitsJ8OpY3JpdHVyZSB2ZXJzIGxlIHN5c2xvZyBlc3QgbGVudGUuCitEbnNtYXNxIHBldXQgZW52b3llciBzZXMgbG9ncyBkZSBtYW5pw6hyZSBhc3luY2hyb25lIDogY2VsYSBsdWkgcGVybWV0IGRlCitjb250aW51ZXIgw6AgZm9uY3Rpb25uZXIgc2FucyDDqnRyZSBibG9xdcOpIHBhciBsZSBzeXNsb2csIGV0IHBlcm1ldCDDoCBzeXNsb2cKK2QndXRpbGlzZXIgRG5zbWFzcSBwb3VyIGxlcyByw6lzb2x1dGlvbnMgRE5TIHNhbnMgcmlzcXVlIGQnaW50ZXJibG9jYWdlLgorU2kgbGEgZmlsZSBkJ2F0dGVudGUgZGV2aWVudCBwbGVpbmUsIERuc21hc3EgbG9nZ2VyYSBsZSBkw6lwYXNzZW1lbnQgZGUgZmlsZSBldAorbGUgbm9tYnJlIGRlIG1lc3NhZ2VzIHBlcmR1cy4gTGEgbG9uZ3VldXIgcGFyIGTDqWZhdXQgZGUgbGEgZmlsZSBkJ2F0dGVudGUgZXN0IGRlCis1IGV0IHVuZSB2YWxldXIgc2FpbmUgc2VyYSBjb21wcmlzZSBlbnRyZSA1IGV0IDI1LCBhdmVjIHVuZSBsaW1pdGUgbWF4aW11bQoraW1wb3PDqWUgZGUgMTAwLgorLlRQCisuQiBcLXgsIC0tcGlkLWZpbGU9PGNoZW1pbj4KK1Nww6ljaWZpZSB1biBmaWNoaWVyIGRhbnMgbGVxdWVsIHN0b2NrZXIgbGUgbnVtw6lybyBkZSBwcm9jZXNzdXMgKHBpZCkuIExhIHZhbGV1cgorcGFyIGTDqWZhdXQgZXN0IC92YXIvcnVuL2Ruc21hc3EucGlkLgorLlRQCisuQiBcLXUsIC0tdXNlcj08bm9tIGQndXRpbGlzYXRldXI+CitTcMOpY2lmaWUgbCdpZGVudGl0w6kgKG5vbSBkJ3V0aWxpc2F0ZXVyKSBwcmlzZSBwYXIgRG5zbWFzcSBhcHLDqHMgbGUgZMOpbWFycmFnZS4KK0Ruc21hc3EgZG9pdCBub3JtYWxlbWVudCDDqnRyZSBkw6ltYXJyw6kgZW4gdGVtcHMgcXVlIHJvb3QgKCJzdXBlci11dGlsaXNhdGV1ciIpLAorbWFpcyBhYmFuZG9ubmUgc2VzIHByaXZpbMOoZ2VzIGFwcsOocyBsZSBkw6ltYXJyYWdlIGVuIGNoYW5nZWFudCBkJ2lkZW50aXTDqS4KK05vcm1hbGVtZW50IGNldCB1dGlsaXNhdGV1ciBlc3QgbCd1dGlsaXNhdGV1ciBub2JvZHkgKCJwZXJzb25uZSIpLCBtYWlzIGlsIGVzdAorcG9zc2libGUgZCdlbiBkw6lmaW5pciB1biBhdXRyZSBwYXIgbGUgYmlhaXMgZGUgY2UgcGFyYW3DqHRyZS4KKy5UUAorLkIgXC1nLCAtLWdyb3VwPTxub20gZGUgZ3JvdXBlPiAKK1Nww6ljaWZpZSBsZSBncm91cGUgc291cyBsZXF1ZWwgRG5zbWFzcSBzJ2V4w6ljdXRlLiBQYXIgZMOpZmF1dCwgaWwgcydhZ2l0IGR1Citncm91cGUgImRpcCIsIGFmaW4gZGUgZmFjaWxpdGVyIGwnYWNjw6hzIGF1IGZpY2hpZXIgL2V0Yy9wcHAvcmVzb2x2LmNvbmYgcXVpCituJ2VzdCBlbiBnw6luw6lyYWwgcGFzIGVuIGxlY3R1cmUgcGFyIHRvdXQgbGUgbW9uZGUuCisuVFAKKy5CIFwtdiwgLS12ZXJzaW9uCitJbXByaW1lIGxlIG51bcOpcm8gZGUgdmVyc2lvbi4KKy5UUAorLkIgXC1wLCAtLXBvcnQ9PHBvcnQ+CitFY291dGUgc3VyIGxlIHBvcnQgbnVtw6lybyA8cG9ydD4gYXUgbGlldSBkdSBwb3J0IEROUyBzdGFuZGFyZCAoNTMpLiBQYXJhbcOpdHJlcgorY2V0dGUgdmFsZXVyIMOgIHrDqXJvIGTDqXNhY3RpdmUgY29tcGzDqHRlbWVudCBsYSBmb25jdGlvbiBETlMgcG91ciBuZSBsYWlzc2VyIGFjdGlmCitxdWUgbGUgREhDUCBvdSBsZSBURlRQLgorLlRQCisuQiBcLVAsIC0tZWRucy1wYWNrZXQtbWF4PTx0YWlsbGU+CitTcMOpY2lmaWUgbGEgdGFpbGxlIG1heGltdW0gZGUgcGFxdWV0IFVEUCBFRE5TLjAgc3VwcG9ydMOpIHBhciBsZSByZWxhaSBETlMuIExlCitkw6lmYXV0IGVzdCBkZSAxMjgwLCBxdWkgZXN0IGxhIHZhbGV1ciBtYXhpbWFsZQorcmVjb21tYW5kw6llIHBvdXIgZXRoZXJuZXQgZGFucyBsYSBSRkMyNjcxLgorLlRQCisuQiBcLVEsIC0tcXVlcnktcG9ydD08bnVtw6lybyBkZSBwb3J0PgorRW52b2llIGV0IMOpY291dGUgbGVzIHJlcXXDqnRlcyBETlMgc29ydGFudGVzIGRlcHVpcyBsZSBwb3J0IFVEUCBzcMOpY2lmacOpIHBhcgorPG51bcOpcm8gZGUgcG9ydD4sIGV0IG5vbiBzdXIgdW4gcG9ydCBhbMOpYXRvaXJlLiBOT1RFIDogQ2V0dGUgb3B0aW9uIHJlbmRzCitkbnNtYXNxIG1vaW5zIHPDu3IgY29udHJlIGxlcyBhdHRhcXVlcyBwYXIgdXN1cnBhdGlvbiBETlMgKCJETlMgc3Bvb2ZpbmciKSwgbWFpcworY2VsYSBwZXV0IHBlcm1ldHRyZSBkJ3V0aWxpc2VyIG1vaW5zIGRlIHJlc3NvdXJjZXMgZXQgZCfDqnRyZSBwbHVzIHJhcGlkZS4gRG9ubmVyCit1bmUgdmFsZXVyIGRlIHrDqXJvIMOgIGNldHRlIG9wdGlvbiByZXN0YXVyZSBsZSBjb21wb3J0ZW1lbnQgcGFyIGTDqWZhdXQgcHLDqXNlbnQgZGFucworbGVzIHZlcnNpb25zIGRlIGRuc21hc3EgaW5mw6lyaWV1cmVzIMOgIDIuNDMgcXVpIGNvbnNpc3RlIMOgIG4nYWxsb3VlciBxdSd1biBzZXVsIHBvcnQKK2FsbG91w6kgcGFyIGxlIHN5c3TDqG1lIGQnZXhwbG9pdGF0aW9uLgorLlRQCisuQiAtLW1pbi1wb3J0PTxwb3J0PgorTmUgcGFzIHV0aWxpc2VyIGRlIHBvcnQgZG9udCBsZSBudW3DqXJvIGVzdCBpbmbDqXJpZXVyIMOgIGxhIHZhbGV1ciBkb25uw6llIGVuIHBhcmFtw6h0cmUKK3BvdXIgbGVzIHJlcXXDqnRlcyBETlMgc29ydGFudGVzLiBEbnNtYXNxIGNob2lzaXMgdW4gcG9ydCBzb3VyY2UgYWzDqWF0b2lyZSBwb3VyIGxlcworcmVxdcOqdGVzIHNvcnRhbnRlcyA6IGxvcnNxdWUgY2V0dGUgb3B0aW9uIGVzdCBmb3VybmllLCBsZXMgcG9ydHMgdXRpbGlzw6lzIHNlcm9udCB0b3Vqb3VycworYXUgZGVzc3VzIGRlIGxhIHZhbGV1ciBzcMOpY2lmacOpZS4gVXRpbGUgcG91ciBkZXMgc3lzdMOobWVzIGRlcnJpw6hyZSBkZXMgZGlzcG9zaXRpZnMKK2dhcmRlLWJhcnJpw6hyZXMgKCJmaXJld2FsbHMiKS4KKy5UUAorLkIgXC1pLCAtLWludGVyZmFjZT08bm9tIGQnaW50ZXJmYWNlPgorTifDqWNvdXRlciBxdWUgc3VyIGwnaW50ZXJmYWNlIHLDqXNlYXUgc3DDqWNpZmnDqWUuIERuc21hc3EgYXVqb3V0ZSBhdXRvbWF0aXF1ZW1lbnQKK2wnaW50ZXJmYWNlIGxvY2FsZSAoImxvb3BiYWNrIikgw6AgbGEgbGlzdGUgZGVzIGludGVyZmFjZXMgbG9yc3F1ZSBsJ29wdGlvbgorLkIgLS1pbnRlcmZhY2UKK2VzdCB1dGlsaXPDqWUuCitTaSBhdWN1bmUgb3B0aW9uCisuQiAtLWludGVyZmFjZQorb3UKKy5CIC0tbGlzdGVuLWFkZHJlc3MKK24nZXN0IGRvbm7DqWUsIERuc21hc3Egw6ljb3V0ZXJhIHN1ciB0b3V0ZXMgbGVzIGludGVyZmFjZXMgZGlzcG9uaWJsZXMgc2F1ZgorY2VsbGUocykgc3DDqWNpZmnDqWUocykgcGFyIGwnb3B0aW9uCisuQiAtLWV4Y2VwdC1pbnRlcmZhY2UuCitMZXMgYWxpYXMgZCdpbnRlcmZhY2VzIElQIChlLWcgImV0aDE6MCIpIG5lIHBldXZlbnQgw6p0cmUgdXRpbGlzw6lzIG5pIGF2ZWMKKy5CIC0taW50ZXJmYWNlCituaQorLkIgXC0tZXhjZXB0LWludGVyZmFjZS4KK1V0aWxpc2VyIGwnb3B0aW9uIAorLkIgLS1saXN0ZW4tYWRkcmVzcworw6AgbGEgcGxhY2UuIAorLlRQCisuQiBcLUksIC0tZXhjZXB0LWludGVyZmFjZT08aW50ZXJmYWNlIG5hbWU+CitOZSBwYXMgw6ljb3V0ZXIgc3VyIGwnaW50ZXJmYWNlIHNww6ljaWZpw6llLiBOb3RleiBxdWUgbCdvcmRyZSBkYW5zIGxlc3F1ZWxsZXMgbGVzCitvcHRpb25zCisuQiBcLS1saXN0ZW4tYWRkcmVzcworLAorLkIgLS1pbnRlcmZhY2UKK2V0CisuQiAtLWV4Y2VwdC1pbnRlcmZhY2UKK3NvbnQgZm91cm5pZXMgbidpbXBvcnRlIHBhcywgZXQgcXVlIGwnb3B0aW9uIAorLkIgLS1leGNlcHQtaW50ZXJmYWNlCitsJ2VtcG9ydGUgdG91am91cnMgc3VyIGxlcyBhdXRyZXMuCisuVFAgCisuQiBcLTIsIC0tbm8tZGhjcC1pbnRlcmZhY2U9PG5vbSBkJ2ludGVyZmFjZT4KK05lIHBhcyBmb3VybmlyIGRlIHNlcnZpY2UgREhDUCBzdXIgbCdpbnRlcmZhY2Ugc3DDqWNpZmnDqWUsIG1haXMgZm91cm5pciB0b3V0IGRlCittw6ptZSBsZSBzZXJ2aWNlIEROUy4KKy5UUAorLkIgXC1hLCAtLWxpc3Rlbi1hZGRyZXNzPTxhZHJlc3NlIElQPgorRWNvdXRlciBzdXIgbGEgb3UgbGVzIGFkcmVzc2UocykgSVAgc3DDqWNpZmnDqWUocykuIExlcyBvcHRpb25zIAorLkIgXC0taW50ZXJmYWNlCitldAorLkIgXC0tbGlzdGVuLWFkZHJlc3MKK3BldXZlbnQtw6p0cmUgc3DDqWNpZmnDqWVzIHNpbXVsdGFuw6ltZW50LCBhdXF1ZWwgY2FzIHVuIGpldSBkJ2ludGVyZmFjZXMgZXQKK2QnYWRyZXNzZXMgc2Vyb250IHV0aWxpc8OpZXMuIE5vdGV6IHF1ZSBzaQorYXVjdW5lIG9wdGlvbgorLkIgXC0taW50ZXJmYWNlCituJ2VzdCBkb25uw6llIGFsb3JzIHF1J3VuZSBvcHRpb24gCisuQiBcLS1saXN0ZW4tYWRkcmVzcworbCdlc3QsIERuc21hc3EgbifDqWNvdXRlcmEgcGFzIGF1dG9tYXRpcXVlbWVudCBzdXIgbCdpbnRlcmZhY2UgbG9jYWxlCisoImxvb3BiYWNrIikuIFBvdXIgYWN0aXZlciBsJ8OpY291dGUgc3VyIGwnaW50ZXJmYWNlIGxvY2FsZSwgaWwgZXN0IGFsb3JzCituw6ljZXNzYWlyZSBkZSBmb3VybmlyIGV4cGxpY2l0ZW1lbnQgc29uIGFkcmVzc2UgSVAsIDEyNy4wLjAuMSB2aWEgbCdvcHRpb24KKy5CIFwtLWxpc3Rlbi1hZGRyZXNzLgorLlRQCisuQiBcLXosIC0tYmluZC1pbnRlcmZhY2VzCitTdXIgbGVzIHN5c3TDqG1lcyBxdWkgbGUgc3VwcG9ydGUsIERuc21hc3Egcydhc3NvY2llIGF2ZWMgbCdpbnRlcmZhY2Ugam9rZXIKKygid2lsZGNhcmQiKSwgbcOqbWUgbG9yc3F1J2lsIG5lIGRvaXQgw6ljb3V0ZXIgcXVlIHN1ciBjZXJ0YWluZXMgaW50ZXJmYWNlcy4gUGFyCitsYSBzdWl0ZSwgaWwgcmVqZXR0ZSBsZXMgcmVxdcOqdGVzIGF1eHF1ZWxsZXMgaWwgbmUgZG9pdCBwYXMgcsOpcG9uZHJlLiBDZXR0ZQorc2l0dWF0aW9uIHByw6lzZW50ZSBsJ2F2YW50YWdlIGRlIGZvbmN0aW9ubmVyIG3Dqm1lIGxvcnNxdWUgbGVzIGludGVyZmFjZXMgdm9udAorZXQgdmllbm5lbnQgb3UgY2hhbmdlbnQgZCdhZHJlc3Nlcy4gTCdvcHRpb24gCisuQiAtLWJpbmQtaW50ZXJmYWNlcworZm9yY2UgRG5zbWFzcSDDoCBuZSByw6llbGxlbWVudCBzJ2Fzc29jaWVyIHF1J2F2ZWMgbGVzIGludGVyZmFjZXMgc3VyIGxlc3F1ZWxsZXMKK2lsIGRvaXQgw6ljb3V0ZXIuIEwndW4gZGVzIHNldWxzIGNhcyBvw7kgY2V0dGUgb3B0aW9uIGVzdCB1dGlsZSBlc3QgY2VsdWkgb8O5IHVuCithdXRyZSBzZXJ2ZXVyIGRlIG5vbSAob3UgdW5lIGF1dHJlIGluc3RhbmNlIGRlIERuc21hc3EpIHRvdXJuZSBzdXIgbGEgbcOqbWUKK21hY2hpbmUuIFV0aWxpc2VyIGNldHRlIG9wdGlvbiBwZXJtZXQgw6lnYWxlbWVudCBkJ2F2b2lyIHBsdXNpZXVycyBpbnN0YW5jZXMgZGUKK0Ruc21hc3EgZm91cm5pc3NhbnQgdW4gc2VydmljZSBESENQIHN1ciBsYSBtw6ptZSBtYWNoaW5lLgorLlRQCisuQiBcLXksIC0tbG9jYWxpc2UtcXVlcmllcworUmV0b3VybmUgZGVzIHLDqXBvbnNlcyBhdXggcmVxdcOqdGVzIEROUyBkw6lwZW5kYW50ZXMgZGUgbCdpbnRlcmZhY2Ugc3VyIGxhcXVlbGxlCitsYSByZXF1w6p0ZSBhIMOpdMOpIHJlw6d1ZSwgw6AgcGFydGlyIGR1IGZpY2hpZXIgL2V0Yy9ob3N0cy4gU2kgdW4gbm9tIGRhbnMKKy9ldGMvaG9zdHMgYSBwbHVzIGQndW5lIGFkcmVzc2UgYXNzb2Npw6llIGF2ZWMgbHVpLCBldCBxdSd1bmUgZGVzIGFkcmVzc2VzIGF1Cittb2lucyBlc3QgZGFucyBsZSBtw6ptZSBzb3VzLXLDqXNlYXUgcXVlIGwnaW50ZXJmYWNlIHN1ciBsYXF1ZWxsZSBsYSByZXF1w6p0ZSBhIMOpdMOpCityZcOndWUsIGFsb3JzIG5lIHJldG91cm5lIHF1ZSBsYShsZXMpIGFkcmVzc2UocykgZHUgc291cy1yw6lzZWF1IGNvbnNpZMOpcsOpLiBDZWxhCitwZXJtZXQgZCdhdm9pciBkYW5zIC9ldGMvaG9zdHMgdW4gc2VydmV1ciBhdmVjIGRlIG11bHRpcGxlcyBhZHJlc3NlcywgdW5lIHBvdXIKK2NoYWN1bmUgZGUgc2VzIGludGVyZmFjZXMsIGV0IGRlIGZvdXJuaXIgYXV4IGjDtHRlcyBsJ2FkcmVzc2UgY29ycmVjdGUgKGJhc8OpZSBzdXIKK2xlIHLDqXNlYXUgYXVxdWVsIGlscyBzb250IGF0dGFjaMOpcykuIENldHRlIHBvc3NpYmlsaXTDqSBlc3QgYWN0dWVsbGVtZW50IGxpbWl0w6llCivDoCBJUHY0LgorLlRQCisuQiBcLWIsIC0tYm9ndXMtcHJpdgorRmF1c3NlIHLDqXNvbHV0aW9uIGludmVyc2UgcG91ciBsZXMgcsOpc2VhdXggcHJpdsOpcy4gVG91dGVzIGxlcyByZXF1w6p0ZXMgRE5TCitpbnZlcnNlcyBwb3VyIGRlcyBhZHJlc3NlcyBJUCBwcml2w6llcyAoaWUgMTkyLjE2OC54LngsIGV0Yy4uLikgcXVpIG5lIHNvbnQgcGFzCit0cm91dsOpZXMgZGFucyAvZXRjL2hvc3RzIG91IGRhbnMgbGUgZmljaGllciBkZSBiYXV4IERIQ1Agc2Ugdm9pZW50IHJldG91cm7DqWVzCit1bmUgcsOpcG9uc2UgInBhcyBkZSB0ZWwgZG9tYWluZSIgKCJubyBzdWNoIGRvbWFpbiIpIGF1IGxpZXUgZCfDqnRyZSB0cmFuc21pc2VzCithdXggc2VydmV1cnMgZGUgbm9tIGFtb250ICgidXBzdHJlYW0gc2VydmVyIikuCisuVFAKKy5CIFwtViwgLS1hbGlhcz1bPGFuY2llbm5lIElQPl18WzxJUCBkZSBkw6lidXQ+LTxJUCBkZSBmaW4+XSw8bm91dmVsbGUgSVA+Wyw8bWFzcXVlPl0KK01vZGlmaWUgbGVzIGFkcmVzc2VzIElQdjQgcmV0b3VybsOpZXMgcGFyIGxlcyBzZXJ2ZXVycyBkZSBub20gYW1vbnQ7Cis8YW5jaWVubmUgSVA+IGVzdCByZW1wbGFjw6llIHBhciA8bm91dmVsbGUgSVA+LiBTaSBsZSA8bWFzcXVlPiBvcHRpb25uZWwgZXN0Citmb3VybmksIGFsb3JzIHRvdXRlIGFkcmVzc2UgY29ycmVzcG9uZGFudCDDoCBsJ2FkcmVzc2UgPGFuY2llbm5lIElQPi88bWFzcXVlPgorc2VyYSByw6nDqWNyaXRlLiBBaW5zaSBwYXIgZXhlbXBsZQorLkIgLS1hbGlhcz0xLjIuMy4wLDYuNy44LjAsMjU1LjI1NS4yNTUuMCAKK21vZGlmaWVyYSAxLjIuMy41NiBlbiA2LjcuOC41NiBldCAxLjIuMy42NyBlbiA2LjcuOC42Ny4gCitDZXR0ZSBmb25jdGlvbm5hbGl0w6kgY29ycmVzcG9uZCDDoCBjZSBxdWUgbGVzIHJvdXRldXJzIENpc2NvIFBJWCBhcHBlbGxlbnQKKyJiaWRvdWlsbGFnZSBETlMiICgiRE5TIGRvY3RvcmluZyIpLiBTaSBsJ2FuY2llbm5lIElQIGVzdCBkb25uw6llIHNvdXMgbGEgZm9ybWUKK2QndW5lIGdhbW1lIGQnYWRyZXNzZXMsIGFsb3JzIHNldWxlcyBsZXMgYWRyZXNzZXMgZGFucyBjZXR0ZSBnYW1tZSBzZXJvbnQKK3LDqWVjcml0ZXMsIGV0IG5vbiBsZSBzb3VzLXLDqXNlYXUgZGFucyBzb24gZW5zZW1ibGUuIEFpbnNpLAorLkIgLS1hbGlhcz0xOTIuMTY4LjAuMTAtMTkyLjE2OC4wLjQwLDEwLjAuMC4wLDI1NS4yNTUuMjU1LjAKK2ZhaXQgY29ycmVzcG9uZHJlIDE5Mi4xNjguMC4xMC0+MTkyLjE2OC4wLjQwIMOgIDEwLjAuMC4xMC0+MTAuMC4wLjQwCisuVFAgCisuQiBcLUIsIC0tYm9ndXMtbnhkb21haW49PGFkcmVzc2UgSVA+CitUcmFuc2Zvcm1lIGxlcyByw6lwb25zZXMgY29udGVuYW50IGwnYWRyZXNzZSBJUCBmb3VybmllIGVuIHLDqXBvbnNlcyAicGFzIGRlIHRlbAorZG9tYWluZSIgKCJubyBzdWNoIGRvbWFpbiIpLiBDZWNpIGEgcG91ciBidXQgZGUgbmV1dHJhbGlzZXIgbGEgbW9kaWZpY2F0aW9uCitzb3Vybm9pc2UgbWlzZSBlbiBwbGFjZSBwYXIgVmVyaXNpZ24gZW4gc2VwdGVtYnJlIDIwMDMsIGxvcnNxdSdpbHMgb250IGNvbW1lbmPDqQorw6AgcmV0b3VybmVyIGwnYWRyZXNzZSBkJ3VuIHNlcnZldXIgd2ViIHB1YmxpY2l0YWlyZSBlbiByw6lwb25zZSBhdXggcmVxdcOqdGVzIHBvdXIKK2xlcyBub21zIGRlIGRvbWFpbmVzIG5vbiBlbnJlZ2lzdHLDqXMsIGF1IGxpZXUgZGUgbGEgcsOpcG9uc2UgY29ycmVjdGUgIk5YRE9NQUlOIi4KK0NldHRlIG9wdGlvbiBkZW1hbmRlIMOgIERuc21hc3EgZGUgcmV0b3VybmVyIGxhIHLDqXBvbnNlIGNvcnJlY3RlIGxvcnNxdSdpbAorY29uc3RhdGUgY2UgY29tcG9ydGVtZW50LiBMJ2FkcmVzc2UgcmV0b3VybsOpZSBwYXIgVmVyaXNpZ24gZW4gc2VwdGVtYnJlIDIwMDMKK2VzdCA2NC45NC4xMTAuMTEuCisuVFAKKy5CIFwtZiwgLS1maWx0ZXJ3aW4yaworTGVzIGRlcm5pw6hyZXMgdmVyc2lvbnMgZGUgd2luZG93cyBmb250IGRlcyByZXF1w6p0ZXMgRE5TIHDDqXJpb2RpcXVlcyBhdXhxdWVsbGVzCitub24gc2V1bGVtZW50IGxlcyBzZXJ2ZXVycyBETlMgcHVibGljcyBuZSBwZXV2ZW50IGRvbm5lciBkZSByw6lwb25zZSwgbWFpcyBxdWksCitkZSBzdXJjcm/DrnQsIHBldXZlbnQgcG9zZXIgZGVzIHByb2Jsw6htZXMgZW4gZMOpY2xlbmNoYW50IGRlcyBjb25uZXhpb25zCitpbnRlbXBlc3RpdmVzIHBvdXIgZGVzIGxpZW5zIHLDqXNlYXV4IGF2ZWMgZGVzIGNvbm5leGlvbnMgIsOgIGxhIGRlbWFuZGUiLiBGb3VybmlyCitjZXR0ZSBvcHRpb24gYWN0aXZlIGxlIGZpbHRyYWdlIGRlcyByZXF1w6p0ZXMgZGUgY2UgdHlwZS4gTGVzIHJlcXXDqnRlcyBibG9xdcOpZXMKK3NvbnQgbGVzIHJlcXXDqnRlcyBwb3VyIGxlcyBlbnRyw6llcyBkZSB0eXBlIFNPQSBvdSBTUlYsIGFpbnNpIHF1ZSBsZXMgcmVxdcOqdGVzIGRlCit0eXBlIEFOWSBhdmVjIGRlcyBub21zIHBvc3PDqWRhbnQgZGVzIGNhcmFjdMOocmVzIHNvdXMtbGlnbsOpcyAocmVxdcOqdGVzIHBvdXIgZGVzCitzZXJ2ZXVycyBMREFQKS4KKy5UUAorLkIgXC1yLCAtLXJlc29sdi1maWxlPTxmaWNoaWVyPgorTGlzIGxlcyBhZHJlc3NlcyBkZXMgc2VydmV1cnMgZGUgbm9tIGFtb250IGRhbnMgbGUgZmljaGllciBkZSBub20gPGZpY2hpZXI+LAorYXUgbGlldSBkdSBmaWNoaWVyIC9ldGMvcmVzb2x2LmNvbmYuIFBvdXIgbGUgZm9ybWF0IGRlIGNlIGZpY2hpZXIsIHZvaXIgZGFucyBsZQorbWFudWVsIHBvdXIKKy5CUiByZXNvbHYuY29uZiAoNSkgCitsZXMgZW50csOpZXMgY29ycmVzcG9uZGFudCBhdXggc2VydmV1cnMgZGUgbm9tcyAobmFtZXNlcnZlcikuIERuc21hc3EgcGV1dCBsaXJlCitwbHVzaWV1cnMgZmljaGllcnMgZGUgdHlwZSByZXNvbHYuY29uZiwgbGUgcHJlbWllciBmaWNoaWVyIHNww6ljaWZpw6kgcmVtcGxhY2UgbGUKK2ZpY2hpZXIgcGFyIGTDqWZhdXQsIGxlIGNvbnRlbnUgZGVzIHN1aXZhbnRzIGVzdCByYWpvdXTDqSBkYW5zIGxhIGxpc3RlIGRlcworZmljaGllcnMgw6AgY29uc3VsdGVyLiBTZXVsIGxlIGZpY2hpZXIgYXlhbnQgbGEgZGVybmnDqHJlIGRhdGUgZGUgbW9kaWZpY2F0aW9uCitzZXJhIGNoYXJnw6kgZW4gbcOpbW9pcmUuCisuVFAKKy5CIFwtUiwgLS1uby1yZXNvbHYKK05lIHBhcyBsaXJlIGxlIGNvbnRlbnUgZHUgZmljaGllciAvZXRjL3Jlc29sdi5jb25mLiBOJ29idGVuaXIgbCdhZHJlc3NlIGRlcworc2VydmV1cnMgZGUgbm9tIGFtb250IHF1ZSBkZXB1aXMgbGEgbGlnbmUgZGUgY29tbWFuZGUgb3UgbGUgZmljaGllciBkZQorY29uZmlndXJhdGlvbiBkZSBEbnNtYXNxLgorLlRQCisuQiBcLTEsIC0tZW5hYmxlLWRidXMKK0F1dG9yaXNlciBsYSBtaXNlIMOgIGpvdXIgZGUgbGEgY29uZmlndXJhdGlvbiBkZSBEbnNtYXNxIHBhciBsZSBiaWFpcyBkJ2FwcGVsIGRlCittw6l0aG9kZXMgREJ1cy4gSWwgZXN0IHBvc3NpYmxlIHBhciBjZSBiaWFpcyBkZSBtZXR0cmUgw6Agam91ciBsJ2FkcmVzc2UgZGUKK3NlcnZldXJzIEROUyBhbW9udCAoZXQgbGVzIGRvbWFpbmVzIGNvcnJlc3BvbmRhbnRzKSBldCBkZSB2aWRlciBsZSBjYWNoZS4gQ2V0dGUKK29wdGlvbiBuw6ljZXNzaXRlIHF1ZSBEbnNtYXNxIHNvaXQgY29tcGlsw6kgYXZlYyBsZSBzdXBwb3J0IERCdXMuCisuVFAgCisuQiBcLW8sIC0tc3RyaWN0LW9yZGVyCitQYXIgZMOpZmF1dCwgRG5zbWFzcSBlbnZvaWUgbGVzIHJlcXXDqnRlcyDDoCBuJ2ltcG9ydGUgbGVxdWVsIGRlcyBzZXJ2ZXVycyBhbW9udHMKK2RvbnQgaWwgYSBjb25uYWlzc2FuY2UgdG91dCBlbiBlc3NheWFudCBkZSBmYXZvcmlzZXIgbGVzIHNlcnZldXJzIHF1J2lsIHNhaXQKK2ZvbmN0aW9ubmVyLiBDZXR0ZSBvcHRpb24gZm9yY2UgRG5zbWFzcSDDoCBlc3NheWVyIGQnaW50ZXJyb2dlciwgcG91ciBjaGFxdWUKK3JlcXXDqnRlLCBsZXMgc2VydmV1cnMgRE5TIGRhbnMgbGV1ciBvcmRyZSBkJ2FwcGFyaXRpb24gZGFucyBsZSBmaWNoaWVyCisvZXRjL3Jlc29sdi5jb25mLgorLlRQCisuQiAtLWFsbC1zZXJ2ZXJzCitQYXIgZMOpZmF1dCwgbG9yc3F1ZSBkbnNtYXNxIGEgcGx1cyBkJ3VuIHNlcnZldXIgYW1vbnQgZGlzcG9uaWJsZSwgaWwgbidlbnZvaWUKK2xlcyByZXF1w6p0ZXMgcXUnw6AgdW4gc2V1bCBzZXJ2ZXVyLiBTcMOpY2lmaWVyIGNldHRlIG9wdGlvbiBmb3JjZSBkbnNtYXNxIMOgCitlZmZlY3R1ZXIgc2VzIHJlcXXDqnRlcyDDoCB0b3VzIGxlcyBzZXJ2ZXVycyBkaXNwb25pYmxlcy4gTGUgcsOpc3VsdGF0IHJlbnZvecOpCithdSBjbGllbnQgc2VyYSBjZWx1aSBmb3Vybml0IHBhciBsZSBwcmVtaWVyIHNlcnZldXIgYXlhbnQgcsOpcG9uZHUuCisuVFAKKy5CIC0tc3RvcC1kbnMtcmViaW5kCitSZWpldGUgKGV0IGVucmVnaXN0cmUgZGFucyBsZSBqb3VybmFsIGQnYWN0aXZpdMOpKSBsZXMgYWRyZXNzZXMgZGFucyBsYSBnYW1tZQorZCdhZHJlc3NlcyBJUCBwcml2w6llIChhdSBzZW5zIFJGQzE5MTgpIHF1aSBwb3VycmFpZW50IMOqdHJlIHJlbnZvecOpZXMgcGFyIGxlcworc2VydmV1cnMgYW1vbnRzIHN1aXRlIMOgIHVuZSByw6lzb2x1dGlvbiBkZSBub20uIENlbGEgYmxvcXVlIGxlcyBhdHRhcXVlcyBjaGVyY2hhbnQKK8OgIGTDqXRvdXJuZXIgZGUgbGV1ciB1c2FnZSBsZXMgbG9naWNpZWxzIGRlIG5hdmlnYXRpb24gd2ViICgnYnJvd3NlcicpIGVuIHMnZW4KK3NlcnZhbnQgcG91ciBkw6ljb3V2cmlyIGxlcyBtYWNoaW5lcyBzaXR1w6llcyBzdXIgbGUgcsOpc2VhdSBsb2NhbC4KKy5UUAorLkIgXC1uLCAtLW5vLXBvbGwKK05lIHBhcyB2w6lyaWZpZXIgcsOpZ3VsacOocmVtZW50IHNpIGxlIGZpY2hpZXIgL2V0Yy9yZXNvbHYuY29uZiBhIMOpdMOpIG1vZGlmacOpLgorLlRQCisuQiAtLWNsZWFyLW9uLXJlbG9hZAorTG9yc3F1ZSBsZSBmaWNoaWVyIC9ldGMvcmVzb2x2LmNvbmYgZXN0IHJlbHUsIHZpZGVyIGxlIGNhY2hlIEROUy4KK0NlbGEgZXN0IHV0aWxlIHNpIGxlcyBub3V2ZWF1eCBzZXJ2ZXVycyBzb250IHN1c2NlcHRpYmxlcyBkJ2F2b2lyIGRlcyBkb25uw6llcworZGlmZsOpcmVudGVzIGRlIGNlbGxlcyBzdG9ja8OpZXMgZGFucyBsZSBjYWNoZS4KKy5UUAorLkIgXC1ELCAtLWRvbWFpbi1uZWVkZWQKK0luZGlxdWUgw6AgRG5zbWFzcSBkZSBuZSBqYW1haXMgdHJhbnNtZXR0cmUgZW4gYW1vbnQgZGUgcmVxdcOqdGVzIHBvdXIgZGVzIG5vbXMKK3NpbXBsZXMsIG5lIGNvbXByZW5hbnQgZG9uYyBuaSBwb2ludHMgbmkgbm9tIGRlIGRvbWFpbmUuIFNpIHVuIG5vbSBuJ2VzdCBwYXMKK2RhbnMgL2V0Yy9ob3N0cyBvdSBkYW5zIGxhIGxpc3RlIGRlcyBiYXV4IERIQ1AsIGFsb3JzIHVuZSByw6lwb25zZSBkZSB0eXBlCisibm9uIHRyb3V2w6kiIGVzdCByZW52b3nDqWUuCisuVFAKKy5CIFwtUywgLS1sb2NhbCwgLS1zZXJ2ZXI9Wy9bPGRvbWFpbmU+XS9bZG9tYWluZS9dXVs8QWRyZXNzZSBJUD5bIzxwb3J0Pl1bQDxBZHJlc3NlIElQIHNvdXJjZT58PGludGVyZmFjZT5bIzxwb3J0Pl1dXQorU3DDqWNpZmllIGRpcmVjdGVtZW50IGwnYWRyZXNzZSBJUCBkJ3VuIHNlcnZldXIgZGUgbm9tIGFtb250LiBDZXR0ZSBvcHRpb24gbmUKK3N1cHByaW1lIHBhcyBsYSBsZWN0dXJlIGR1IGZpY2hpZXIgL2V0Yy9yZXNvbHYuY29uZiA6IHV0aWxpc2VyIHBvdXIgY2VsYQorbCdvcHRpb24KKy5CIC1SIC4KK1NpIHVuIG91IHBsdXNpZXVycyBub20ocykgZGUgZG9tYWluZShzKSBvcHRpb25uZWwocykgc29udCBmb3VybmlzLCBjZQorc2VydmV1ciBzZXJhIHVuaXF1ZW1lbnQgdXRpbGlzw6kgdW5pcXVlbWVudCBwb3VyIGNlKHMpIGRvbWFpbmUocyksIGV0IHRvdXRlCityZXF1w6p0ZSBjb25jZXJuYW50IGNlKHMpIGRvbWFpbmUocykgc2VyYSBhZHJlc3PDqWUgdW5pcXVlbWVudCDDoCBjZSBzZXJ2ZXVyLgorQ2V0dGUgb3B0aW9uIGVzdCBkZXN0aW7DqWUgYXV4IHNlcnZldXJzIGRlIG5vbSBwcml2w6lzIDogc2kgdm91cyBhdmV6IHVuIHNlcnZldXIKK2RlIG5vbSBzdXIgdm90cmUgcsOpc2VhdSBheWFudCBwb3VyIGFkcmVzc2UgSVAgMTkyLjE2OC4xLjEgZXQgZWZmZWN0dWFudCBsYQorcsOpc29sdXRpb24gZGVzIG5vbXMgZGUgbGEgZm9ybWUgeHh4LmludGVybmFsLnRoZWtlbGxleXMub3JnLnVrLCBhbG9ycworLkIgLVMgL2ludGVybmFsLnRoZWtlbGxleXMub3JnLnVrLzE5Mi4xNjguMS4xIAorZW52ZXJyYSB0b3V0ZXMgbGVzIHJlcXXDqnRlcyBwb3VyIGxlcyBtYWNoaW5lcyBpbnRlcm5lcyB2ZXJzIGNlIHNlcnZldXIgZGUgbm9tLAorYWxvcnMgcXVlIHRvdXRlcyBsZXMgYXV0cmVzIHJlcXXDqnRlcyBzZXJvbnQgYWRyZXNzw6llcyBhdXggc2VydmV1cnMgaW5kaXF1w6lzIGRhbnMKK2xlIGZpY2hpZXIgL2V0Yy9yZXNvbHYuY29uZi4gVW5lIHNww6ljaWZpY2F0aW9uIGRlIG5vbSBkZSBkb21haW5lIHZpZGUsCisuQiAvLyAKK3Bvc3PDqGRlIGxlIHNlbnMgcGFydGljdWxpZXIgZGUgInBvdXIgbGVzIG5vbXMgbm9uIHF1YWxpZmnDqXMgdW5pcXVlbWVudCIsCitjJ2VzdC3DoC1kaXJlIGxlcyBub21zIG5lIHBvc3PDqWRhbnQgcGFzIGRlIHBvaW50cy4gVW4gcG9ydCBub24gc3RhbmRhcmQgcGV1dCDDqnRyZQorcmFqb3V0w6kgw6AgbGEgc3VpdGUgZGVzIGFkcmVzc2VzIElQIGVuIHV0aWxpc2FudCBsZSBjYXJhY3TDqHJlICMuIFBsdXMgZCd1bmUKK29wdGlvbgorLkIgLVMKK2VzdCBhdXRvcmlzw6llLCBlbiByw6lww6l0YW50IGxlcyBkb21haW5lcyBldCBhZHJlc3NlcyBJUCBjb21tZSByZXF1aXMuCisKK0lsIGVzdCDDqWdhbGVtZW50IHBlcm1pcyBkZSBkb25uZXIgdW5lIG9wdGlvbgorLkIgLVMKK2F2ZWMgdW4gbm9tIGRlIGRvbWFpbmUgbWFpcyBzYW5zCithZHJlc3NlIElQOyBDZWxhIGluZm9ybWUgRG5zbWFzcSBxdWUgbGUgZG9tYWluZSBlc3QgbG9jYWwgZXQgcXUnaWwgZG9pdCByw6lwb25kcmUKK2F1eCByZXF1w6p0ZXMgbGUgY29uY2VybmFudCBkZXB1aXMgbGVzIGVudHLDqWVzIGNvbnRlbnVlcyBkYW5zIGxlIGZpY2hpZXIKKy9ldGMvaG9zdHMgb3UgbGVzIGJhdXggREhDUCwgZXQgbmUgZG9pdCBlbiBhdWN1biBjYXMgdHJhbnNtZXR0cmUgbGVzIHJlcXXDqnRlcworYXV4IHNlcnZldXJzIGFtb250cy4KKy5CIGxvY2FsCitlc3Qgc3lub255bWUgZGUKKy5CIHNlcnZlcgorKCJzZXJ2ZXVyIikgYWZpbiBkZSByZW5kcmUgcGx1cyBjbGFpcmUgbCd1dGlsaXNhdGlvbiBkZSBjZXR0ZSBvcHRpb24gcG91ciBjZXQKK3VzYWdlIHBhcnRpY3VsaWVyLgorCitMYSBjaGHDrm5lIGRlIGNhcmFjdMOocmVzIG9wdGlvbm5lbGxlIHN1aXZhbnQgbGUgY2FyYWN0w6hyZSBAIHBlcm1ldCBkZSBkw6lmaW5pcgorbGEgc291cmNlIHF1ZSBEbnNtYXNxIGRvaXQgdXRpbGlzZXIgcG91ciBsZXMgcsOpcG9uc2VzIMOgIGNlCitzZXJ2ZXVyIGRlIG5vbS4gSWwgZG9pdCBzJ2FnaXIgZCd1bmUgZGVzIGFkcmVzc2VzIElQIGFwcGFydGVuYW50IMOgIGxhIG1hY2hpbmUgc3VyCitsYXF1ZWxsZSB0b3VybmUgRG5zbWFzcSBvdSBzaW5vbiBsYSBsaWduZSBzZXJhIGlnbm9yw6llIGV0IHVuZSBlcnJldXIgc2VyYQorY29uc2lnbsOpZSBkYW5zIGxlIGpvdXJuYWwgZGVzIMOpdsOpbmVtZW50cywgb3UgYWxvcnMgZCd1biBub20gZCdpbnRlcmZhY2UuIFNpIHVuIG5vbQorZCdpbnRlcmZhY2UgZXN0IGRvbm7DqSwgYWxvcnMgbGVzIHJlcXXDqnRlcyB2ZXJzIGxlIHNlcnZldXIgZGUgbm9tIHNlcm9udCBlbnZvecOpZXMKK2RlcHVpcyBjZXR0ZSBpbnRlcmZhY2U7IHNpIHVuZSBhZHJlc3NlIGlwIGVzdCBkb25uw6llLCBhbG9ycyBsJ2FkcmVzc2Ugc291cmNlIGRlCitsYSByZXF1w6p0ZSBzZXJhIGwnYWRyZXNzZSBlbiBxdWVzdGlvbi4gTCdvcHRpb24gcXVlcnktcG9ydCBlc3QgaWdub3LDqWUgcG91ciB0b3VzCitsZXMgc2VydmV1cnMgYXlhbnQgdW5lIGFkcmVzc2Ugc291cmNlIHNww6ljaWZpw6llLCBtYWlzIGlsIGVzdCBwb3NzaWJsZSBkZSBsYSBkb25uZXIKK2RpcmVjdGVtZW50IGRhbnMgbGEgc3DDqWNpZmljYXRpb24gZGUgbCdhZHJlc3NlIHNvdXJjZS4gRm9yY2VyIGxlcyByZXF1w6p0ZXMgw6Agw6p0cmUKK8OpbWlzZXMgZGVwdWlzIHVuZSBpbnRlcmZhY2Ugc3DDqWNpZmlxdWUgbidlc3QgcGFzIHBvc3NpYmxlIHN1ciB0b3V0ZXMgbGVzIHBsYXRlZm9ybWVzCitzdXBwb3J0w6llcyBwYXIgZG5zbWFzcS4KKy5UUAorLkIgXC1BLCAtLWFkZHJlc3M9Lzxkb21haW5lPi9bZG9tYWluZS9dPGFkcmVzc2UgSVA+CitTcMOpY2lmaWUgdW5lIGFkcmVzc2UgSVAgw6AgcmV0b3VybmVyIHBvdXIgdG91dGUgcmVxdcOqdGUgcG91ciBsZXMgZG9tYWluZXMgZm91cm5pcworZW4gb3B0aW9uLiBMZXMgcmVxdcOqdGVzIHBvdXIgY2UocykgZG9tYWluZShzKSBuZSBzb250IGphbWFpcyB0cmFuc21pc2VzIGF1eAorc2VydmV1cnMgYW1vbnRzIGV0IHJlw6dvaXZlbnQgY29tbWUgcsOpcG9uc2UgbCdhZHJlc3NlIElQIHNww6ljaWZpw6llIHF1aSBwZXV0IMOqdHJlCit1bmUgYWRyZXNzZSBJUHY0IG91IElQdjYuIFBvdXIgZG9ubmVyIMOgIGxhIGZvaXMgdW5lIGFkcmVzc2UgSVB2NCBldCB1bmUgYWRyZXNzZQorSVB2NiBwb3VyIHVuIGRvbWFpbmUsIHV0aWxpc2VyIHBsdXNpZXVycyBvcHRpb25zCisuQiAtQS4KK0lsIGZhdXQgbm90ZXIgcXVlIGxlCitjb250ZW51IGR1IGZpY2hpZXIgL2V0Yy9ob3N0cyBldCBkZSBjZWx1aSBkZXMgYmF1eCBESENQIHN1cHBsYW50ZSBjZWNpIHBvdXIgZGVzCitub21zIGluZGl2aWR1ZWxzLiBVbmUgdXRpbGlzYXRpb24gY291cmFudGUgZGUgY2V0dGUgb3B0aW9uIGVzdCBkZSByZWRpcmlnZXIgbGEKK3RvdGFsaXTDqSBkdSBkb21haW5lIGRvdWJsZWNsaWNrLm5ldCB2ZXJzIHVuIHNlcnZldXIgd2ViIGxvY2FsIGFmaW4gZCfDqXZpdGVyIGxlcworYmFubmnDqHJlcyBwdWJsaWNpdGFpcmVzLiBMYSBzcMOpY2lmaWNhdGlvbiBkZSBkb21haW5lIGZvbmN0aW9ubmUgZGUgbGEgbcOqbWUgZmHDp29uCitxdWUKKy5CICAtLXNlcnZlciwKK2F2ZWMgbGEgY2FyYWN0w6lyaXN0aXF1ZSBzdXBwbMOpbWVudGFpcmUgcXVlCisuQiAvIy8KK2Nvw69uY2lkZSBhdmVjIHRvdXQgZG9tYWluZS4gQWluc2ksCisuQiAtLWFkZHJlc3M9LyMvMS4yLjMuNAorcmV0b3VybmVyYSAxLjIuMy40IHBvdXIgdG91dGUgcmVxdcOqdGUKK24nYXlhbnQgZGUgcsOpcG9uc2UgbmkgZGFucyAvZXRjL2hvc3RzLCBuaSBkYW5zIGxlcyBiYXV4IERIQ1AsIGV0IG4nw6l0YW50IHBhcwordHJhbnNtaXNlIMOgIHVuIHNlcnZldXIgc3DDqWNpZmlxdWUgcGFyIGxlIGJpYWlzIGQndW5lIGRpcmVjdGl2ZQorLkIgLS1zZXJ2ZXIuCisuVFAKKy5CIFwtbSwgLS1teC1ob3N0PTxub20gZGUgbCdow7R0ZT5bWyw8bm9tIGR1IE1YPl0sPHByw6lmZXJlbmNlPl0KK1Nww6ljaWZpZSB1biBlbnJlZ2lzdHJlbWVudCBkZSB0eXBlIE1YIHBvdXIgPG5vbSBkZSBsJ2jDtHRlPiByZXRvdXJuYW50IGxlIG5vbQorZG9ubsOpIGRhbnMgPG5vbSBkdSBNWD4gKHMnaWwgZXN0IHByw6lzZW50KSwgb3Ugc2lub24gbGUgbm9tIHNww6ljaWZpw6kgZGFucworbCdvcHRpb24KKy5CIC0tbXgtdGFyZ2V0CitzaSBlbGxlIGVzdCBwcsOpc2VudGUuIFNpbm9uIHJldG91cm5lIGxlIG5vbSBkZSBsYSBtYWNoaW5lCitzdXIgbGFxdWVsbGUgRG5zbWFzcSB0b3VybmUuIExhIHZhbGV1ciBwYXIgZMOpZmF1dCAoc3DDqWNpZmnDqWUgZGFucyBsJ29wdGlvbgorLkIgLS1teC10YXJnZXQKKykgZXN0IHV0aWxlIGRhbnMgdW4gcsOpc2VhdSBsb2NhbCBwb3VyIHJlZGlyaWdlciBsZXMgY291cnJpZXJzCivDqWxlY3Ryb25pcXVlcyB2ZXJzIHVuIHNlcnZldXIgY2VudHJhbC4gTGEgdmFsZXVyIGRlIHByw6lmw6lyZW5jZSBlc3Qgb3B0aW9ubmVsbGUKK2V0IHZhdXQgcGFyIGTDqWZhdXQgMSBzaSBlbGxlIG4nZXN0IHBhcyBzcMOpY2lmacOpZS4gUGx1cyBkJ3VuZSBlbnRyw6llIE1YIHBldXQgw6p0cmUKK2ZvdXJuaWUgcG91ciB1biBow7R0ZSBkb25uw6kuCisuVFAgCisuQiBcLXQsIC0tbXgtdGFyZ2V0PTxub20gZCdow7R0ZT4KK1Nww6ljaWZpZSBsYSByw6lwb25zZSBwYXIgZMOpZmF1dCBmb3VybmllIHBhciBEbnNtYXNxIHBvdXIgbGVzIHJlcXXDqnRlcyBzdXIgZGVzCitlbnJlZ2lzdHJlbWVudHMgZGUgdHlwZSBNWC4gVm9pcgorLkIgLS1teC1ob3N0LgorU2kKKy5CIC0tbXgtdGFyZ2V0Citlc3QgZG9ubsOpIG1haXMgcGFzIGRlCisuQiAtLW14LWhvc3QsCithbG9ycyBEbnNtYXNxIHJldG91cm5lIGNvbW1lIHLDqXBvbnNlIHVuIGVucmVnaXN0cmVtZW50IE1YCitjb250ZW5hbnQgbGUgbm9tIGQnaMO0dGUgc3DDqWNpZmnDqSBkYW5zIGwnb3B0aW9uCisuQiAtLW14LXRhcmdldAorcG91ciB0b3V0ZSByZXF1w6p0ZQorY29uY2VybmFudCBsZSBNWCBkZSBsYSBtYWNoaW5lIHN1ciBsYXF1ZWxsZSB0b3VybmUgRG5zbWFzcS4KKy5UUAorLkIgXC1lLCAtLXNlbGZteAorRMOpZmluaXQsIHBvdXIgdG91dGVzIGxlcyBtYWNoaW5lcyBsb2NhbGVzLCB1biBNWCBjb3JyZXNwb25kYW50IMOgIGwnaMO0dGUKK2NvbnNpZMOpcsOpLiBMZXMgbWFjaGluZXMgbG9jYWxlcyBzb250IGNlbGxlcyBkw6lmaW5pZXMgZGFucyBsZSBmaWNoaWVyIC9ldGMvaG9zdHMKK291IGRhbnMgdW4gYmFpbCBESENQLgorLlRQIAorLkIgXC1MLCAtLWxvY2FsbXgKK0TDqWZpbml0LCBwb3VyIHRvdXRlcyBsZXMgbWFjaGluZXMgbG9jYWxlcywgdW4gZW5yZWdpc3RyZW1lbnQgTVggcG9pbnRhbnQgc3VyCitsJ2jDtHRlIHNww6ljaWZpw6kgcGFyIG14LXRhcmdldCAob3UgbGEgbWFjaGluZSBzdXIgbGFxdWVsbGUgRG5zbWFzcSB0b3VybmUpLiBMZXMKK21hY2hpbmVzIGxvY2FsZXMgc29udCBjZWxsZXMgZMOpZmluaWVzIGRhbnMgbGUgZmljaGllciAvZXRjL2hvc3RzIG91IGRhbnMgdW4gYmFpbAorREhDUC4KKy5UUAorLkIgXC1XIC0tc3J2LWhvc3Q9PF9zZXJ2aWNlPi48X3Byb3RvY29sZT4uWzxkb21haW5lPl0sWzxjaWJsZT5bLDxwb3J0PlssPHByaW9yaXTDqT5bLDxwb2lkcz5dXV1dCitTcMOpY2lmaWUgdW4gZW5yZWdpc3RyZW1lbnQgRE5TIGRlIHR5cGUgU1JWLiBWb2lyIGxhIFJGQzI3ODIgcG91ciBwbHVzIGRlCitkw6l0YWlscy4gU2kgbGUgY2hhbXBzIDxkb21haW5lPiBuJ2VzdCBwYXMgZm91cm5pLCBwcmVuZHMgcGFyIGTDqWZhdXQgbGEgdmFsZXVyCitmb3VybmllIGRhbnMgbCdvcHRpb24KKy5CIC0tZG9tYWluLgorTGEgdmFsZXVyIHBhciBkw6lmYXV0IHBvdXIgbGUgZG9tYWluZSBlc3QgdmlkZSBldCBsZSBwb3J0IHBhciBkw6lmYXV0IGVzdCAxLCBhbG9ycworcXVlIGxlcyBwb2lkcyBldCBwcmlvcml0w6lzIHBhciBkw6lmYXV0IHNvbnQgMC4gQXR0ZW50aW9uIGxvcnNxdWUgdm91cyB0cmFuc3Bvc2V6CitkZXMgdmFsZXVycyBpc3N1ZXMgZCd1bmUgY29uZmlndXJhdGlvbiBCSU5EIDogbGVzIHBvcnRzLCBwb2lkcyBldCBwcmlvcml0w6lzIHNvbnQKK2RhbnMgdW4gb3JkcmUgZGlmZsOpcmVudHMuIFBvdXIgdW4gc2VydmljZS9kb21haW5lIGRvbm7DqSwgcGx1cyBkJ3VuCitlbnJlZ2lzdHJlbWVudCBTUlYgZXN0IGF1dG9yaXPDqSBldCB0b3VzIGxlcyBlbnJlZ2lzdHJlbWVudHMgcXVpIGNvw69uY2lkZW50IHNvbnQKK3JldG91cm7DqXMgZGFucyBsYSByw6lwb25zZS4KKy5UUAorLkIgXC1ZLCAtLXR4dC1yZWNvcmQ9PG5vbT5bWyw8dGV4dGU+XSw8dGV4dGU+XQorRMOpZmluaXQgdW4gZW5yZWdpc3RyZW1lbnQgRE5TIGRlIHR5cGUgVFhULiBMYSB2YWxldXIgZGUgbCdlbnJlZ2lzdHJlbWVudCBUWFQgZXN0Cit1biBlbnNlbWJsZSBkZSBjaGHDrm5lcyBkZSBjYXJhY3TDqHJlcywgZG9uYyB1biBub21icmUgdmFyaWFibGUgZGUgY2hhw65uZXMgZGUKK2NhcmFjdMOocmVzIHBldXZlbnQgw6p0cmUgc3DDqWNpZmnDqWVzLCBzw6lwYXLDqWVzIHBhciBkZXMgdmlyZ3VsZXMuCisuVFAKKy5CIC0tcHRyLXJlY29yZD08bm9tPlssPGNpYmxlPl0KK0TDqWZpbml0IHVuIGVucmVnaXN0cmVtZW50IEROUyBkZSB0eXBlIFBUUi4KKy5UUAorLkIgLS1uYXB0ci1yZWNvcmQ9PG5vbT4sPG9yZHJlPiw8cHLDqWbDqXJlbmNlPiw8ZHJhcGVhdXg+LDxzZXJ2aWNlPiw8ZXhwci4gcsOpZ3VsacOocmU+Wyw8cmVtcGxhY2VtZW50Pl0KK1JldG91cm5lIHVuIGVucmVnaXN0cmVtZW50IGRlIHR5cGUgTkFQVFIsIHRlbCBxdWUgc3DDqWNpZmnDqSBkYW5zIGxlIFJGQzM0MDMuCisuVFAKKy5CIC0tY25hbWU9PGNuYW1lPiw8Y2libGU+CitSZXRvdXJuZSB1biBlbnJlZ2lzdHJlbWVudCBkZSB0eXBlIENOQU1FIHF1aSBpbmRpcXVlIHF1ZSA8Y25hbWU+IGVzdCBlbgorcsOpYWxpdMOpIDxjaWJsZT4uIElsIGV4aXN0ZSBkZXMgY29udHJhaW50ZXMgc2lnbmlmaWNhdGl2ZXMgc3VyIGxhIHZhbGV1cgorZGUgY2libGU7IGlsIGRvaXQgcydhZ2lyIGQndW4gbm9tIEROUyBxdWkgZXN0IGNvbm51IGRlIGRuc21hc3EgdmlhIC9ldGMvaG9zdHMKKyhvdSB1biBmaWNoaWVyIGjDtHRlcyBhZGRpdGlvbm5lbCkgb3UgdmlhIERIQ1AuIFNpIHVuZSBjaWJsZSBuZSBzYXRpc2ZhaXQKK3BhcyBjZXMgY3JpdMOocmVzLCBsZSBDTkFNRSBlc3QgaWdub3LDqS4gTGUgQ05BTUUgZG9pdCDDqnRyZSB1bmlxdWUsIG1haXMKK2lsIGVzdCBhdXRvcmlzw6kgZCdhdm9pciBwbHVzIGQndW4gQ05BTUUgcG9pbnRhbnQgdmVycyBsYSBtw6ptZSBjaWJsZS4KKy5UUAorLkIgLS1pbnRlcmZhY2UtbmFtZT08bm9tPiw8aW50ZXJmYWNlPgorRMOpZmluaXQgdW4gZW50cmVnaXN0cmVtZW50IEROUyBhc3NvY2lhbnQgbGUgbm9tIGF2ZWMgbCdhZHJlc3NlIHByaW1haXJlIHN1cgorbCdpbnRlcmZhY2UgZG9ubsOpZSBlbiBhcmd1bWVudC4gQ2V0dGUgb3B0aW9uIHNww6ljaWZpZSB1biBlbnJlZ2lzdHJlbWVudCBkZSB0eXBlCitBIHBvdXIgbGUgbm9tIGRvbm7DqSBlbiBhcmd1bWVudCBkZSBsYSBtw6ptZSBmYcOnb24gcXVlIHMnaWwgw6l0YWl0IGTDqWZpbmkgcGFyIHVuZQorbGlnbmUgZGUgL2V0Yy9ob3N0cywgc2F1ZiBxdWUgbCdhZHJlc3NlIG4nZXN0IHBhcyBjb25zdGFudGUgbWFpcyBkw6lwZW5kYW50ZSBkZQorbCdpbnRlcmZhY2UgZMOpZmluaWUuIFNpIGwnaW50ZXJmYWNlIGVzdCBpbmFjdGl2ZSwgbm9uIGV4aXN0YW50ZSBvdSBub24KK2NvbmZpZ3Vyw6llLCB1bmUgcsOpcG9uc2UgdmlkZSBlc3QgZm91cm5pZS4gVW4gZW5yZWdpc3RyZW1lbnQgaW52ZXJzZSAoUFRSKSBlc3QKK8OpZ2FsZW1lbnQgY3LDqcOpIHBhciBjZXR0ZSBvcHRpb24sIGFzc29jaWFudCBsJ2FkcmVzc2UgZGUgbCdpbnRlcmZhY2UgYXZlYyBsZSBub20uCitQbHVzIGQndW4gbm9tIHBldXQgw6p0cmUgYXNzb2Npw6kgw6AgdW5lIGludGVyZmFjZSBkb25uw6llIGVuIHLDqXDDqXRhbnQgY2V0dGUgb3B0aW9uCitwbHVzaWV1cnMgZm9pczsgZGFucyBjZSBjYXMsIGwnZW5yZWdpc3RyZW1lbnQgaW52ZXJzZSBwb2ludGUgdmVycyBsZSBub20gZm91cm5pCitkYW5zIGxhIHByZW1pw6hyZSBpbnN0YW5jZSBkZSBjZXR0ZSBvcHRpb24uCisuVFAKKy5CIFwtYywgLS1jYWNoZS1zaXplPTx0YWlsbGU+CitEw6lmaW5pdCBsYSB0YWlsbGUgZHUgY2FjaGUgZGUgRG5zbWFzcS4gTGEgdmFsZXVyIHBhciBkw6lmYXV0IGVzdCBkZSAxNTAgbm9tcy4KK0TDqWZpbmlyIHVuZSB2YWxldXIgZGUgesOpcm8gZMOpc2FjdGl2ZSBsZSBjYWNoZS4KKy5UUAorLkIgXC1OLCAtLW5vLW5lZ2NhY2hlCitEw6lzYWN0aXZlIGxlICJjYWNoZSBuw6lnYXRpZiIuIExlICJjYWNoZSBuw6lnYXRpZiIgcGVybWV0IMOgIERuc21hc3EgZGUgc2Ugc291dmVuaXIKK2RlcyByw6lwb25zZXMgZGUgdHlwZSAibm8gc3VjaCBkb21haW4iIGZvdXJuaWVzIHBhciBsZXMgc2VydmV1cnMgRE5TIGVuIGFtb250IGV0CitkZSBmb3VybmlyIGxlcyByw6lwb25zZXMgc2FucyBhdm9pciDDoCByZS10cmFuc21ldHRyZSBsZXMgcmVxdcOqdGVzIGF1eCBzZXJ2ZXVycworYW1vbnQuCisuVFAKKy5CIFwtMCwgLS1kbnMtZm9yd2FyZC1tYXg9PG5vbWJyZSBkZSByZXF1w6p0ZXM+CitEw6lmaW5pdCBsZSBub21icmUgbWF4aW11bSBkZSByZXF1w6p0ZXMgRE5TIHNpbXVsdGFuw6llcy4gTGEgdmFsZXVyIHBhciBkw6lmYXV0IGVzdAorMTUwLCBjZSBxdWkgZGV2cmFpdCDDqnRyZSBzdWZmaXNhbnQgZGFucyBsYSBtYWpvcml0w6kgZGVzIGNvbmZpZ3VyYXRpb25zLiBMYSBzZXVsZQorc2l0dWF0aW9uIGlkZW50aWZpw6llIGRhbnMgbGFxdWVsbGUgY2V0dGUgdmFsZXVyIG7DqWNlc3NpdGUgZCfDqnRyZSBhdWdtZW50w6llIGVzdAorbG9yc3F1J3VuIHNlcnZldXIgd2ViIGEgbGEgcsOpc29sdXRpb24gZGUgbm9tIGFjdGl2w6llIHBvdXIgbCdlbnJlZ2lzdHJlbWVudCBkZQorc29uIGpvdXJuYWwgZGVzIHJlcXXDqnRlcywgY2UgcXVpIHBldXQgZ8OpbsOpcmVyIHVuIG5vbWJyZSBpbXBvcnRhbnQgZGUgcmVxdcOqdGVzCitzaW11bHRhbsOpZXMuCisuVFAKKy5CIFwtRiwgLS1kaGNwLXJhbmdlPVtbbmV0Ol1pZGVudGlmaWFudCBkZSByw6lzZWF1LF08YWRyZXNzZSBkZSBkw6lidXQ+LDxhZHJlc3NlIGRlIGZpbj5bWyw8bWFzcXVlIGRlIHLDqXNlYXU+XSw8YnJvYWRjYXN0Pl1bLDxkdXLDqWUgZGUgYmFpbD5dCitBY3RpdmUgbGUgc2VydmV1ciBESENQLiBMZXMgYWRyZXNzZXMgc2Vyb250IGRvbm7DqWVzIGRhbnMgbGEgcGxhZ2UgY29tcHJpc2UgZW50cmUKKzxhZHJlc3NlIGRlIGTDqWJ1dD4gZXQgPGFkcmVzc2UgZGUgZmluPiBldCDDoCBwYXJ0aXIgZGVzIGFkcmVzc2VzIGTDqWZpbmllcworc3RhdGlxdWVtZW50IGRhbnMgbCdvcHRpb24KKy5CIGRoY3AtaG9zdC4KK1NpIHVuZSBkdXLDqWUgZGUgYmFpbCBlc3QgZG9ubsOpZSwgYWxvcnMgbGVzIGJhdXggc2Vyb250IGRvbm7DqXMgcG91ciBjZXR0ZQorZHVyw6llLiBMYSBkdXLDqWUgZGUgYmFpbCBlc3QgZG9ubsOpZSBlbiBzZWNvbmRlcywgZW4gbWludXRlcyAoZXhlbXBsZSA6IDQ1bSksCitlbiBoZXVyZXMgKGV4ZW1wbGUgOiAxaCkgb3Ugw6p0cmUgbGEgY2hhaW5lIGRlIGNhcmFjdMOocmUgImluZmluaXRlIiBwb3VyIHVuZQorZHVyw6llIGluZMOpdGVybWluw6llLiBTaSBhdWN1bmUgdmFsZXVyIG4nZXN0IGRvbm7DqWUsIHVuZSBkdXLDqWUgZGUgYmFpbCBwYXIgZMOpZmF1dAorZGUgdW5lIGhldXJlIGVzdCBhcHBsaXF1w6llLiBMYSB2YWxldXIgbWluaW11bSBwb3VyIHVuIGJhaWwgREhDUCBlc3QgZGUgMgorbWludXRlcy4KK0NldHRlIG9wdGlvbiBwZXV0IMOqdHJlIHLDqXDDqXTDqWUsIGF2ZWMgZGlmZsOpcmVudGVzIGFkcmVzc2VzLAorcG91ciBhY3RpdmVyIGxlIHNlcnZpY2UgREhDUCBzdXIgcGx1cyBkJ3VuIHLDqXNlYXUuIFBvdXIgZGVzIHLDqXNlYXV4IGRpcmVjdGVtZW50Citjb25uZWN0w6lzIChjJ2VzdC3DoC1kaXJlIGRlcyByw6lzZWF1eCBkYW5zIGxlc3F1ZWxzIGxhIG1hY2hpbmUgc3VyIGxhcXVlbGxlIHRvdXJuZQorRG5zbWFzcSBwb3Nzw6hkZSB1bmUgaW50ZXJmYWNlKSwgbGUgbWFzcXVlIGRlIHLDqXNlYXUgZXN0IG9wdGlvbm5lbC4gSWwgZXN0IHBhcgorY29udHJlIHJlcXVpcyBwb3VyIGxlcyByw6lzZWF1eCBwb3VyIGxlc3F1ZWxzIGxlIHNlcnZpY2UgREhDUCBzZSBmYWl0IHZpYSB1bgorcmVsYWlzIERIQ1AgKCJyZWxheSBhZ2VudCIpLiBMJ2FkcmVzc2UgZGUgYnJvYWRjYXN0IGVzdCB0b3Vqb3VycyBvcHRpb25uZWxsZS4KKworSWwgZXN0IHRvdWpvdXJzIHBvc3NpYmxlIGQnYXZvaXIgcGx1cyBkJ3VuZSBwbGFnZSBESENQIHBvdXIgdW4gbcOqbWUKK3NvdXMtcsOpc2VhdS4KKworTCdpZGVudGlmaWFudCBkZSByw6lzZWF1IG9wdGlvbm5lbCBlc3QgdW4gbGFiZWwgYWxwaGFudW3DqXJpcXVlIHF1aSBwZXJtZXQgZGUKK21hcnF1ZXIgY2UgcsOpc2VhdSBhZmluIGRlIGZvdXJuaXIgZGVzIG9wdGlvbnMgREhDUCBzcMOpY2lmaXF1ZXMgw6AgY2hhcXVlIHLDqXNlYXUuCitMb3JzcXVlIHByw6lmaXjDqSBwYXIgJ25ldDonLCBsYSBzaWduaWZpY2F0aW9uIGNoYW5nZSBlc3QgYXUgbGlldSBkZSBkw6lmaW5pciB1bgorbGFiZWwsIGlsIGTDqWZpbml0IGxlIGxhYmVsIHBvdXIgbGFxdWVsbGUgbGEgcsOoZ2xlIHMnYXBwbGlxdWUuIFVuIHNldWwgbGFiZWwgcGV1dC0KK8OqdHJlIGTDqWZpbmkgbWFpcyBwbHVzaWV1cnMgbGFiZWxzIHBldXZlbnQgY2/Dr25jaWRlci4KKworTCdhZHJlc3NlIGRlIGZpbiBwZXV0IMOqdHJlIHJlbXBsYWPDqWUgcGFyIGxlIG1vdC1jbGVmCisuQiBzdGF0aWMKKygic3RhdGlxdWUiKSBxdWkgaW5kaXF1ZSDDoCBEbnNtYXNxIGQnYWN0aXZlciBsZSBzZXJ2aWNlIERIQ1AgcG91ciBsZSByw6lzZWF1CitzcMOpY2lmacOpLCBtYWlzIGRlIG5lIHBhcyBhY3RpdmVyIGwnYWxsb2NhdGlvbiBkeW5hbWlxdWUgZCdhZHJlc3NlcyBJUCA6IFNldWxzCitsZXMgaMO0dGVzIHBvc3PDqWRhbnQgZGVzIGFkcmVzc2VzIElQIHN0YXRpcXVlcyBmb3VybmllcyB2aWEgCisuQiBkaGNwLWhvc3QKK291IHByw6lzZW50ZXMgZGFucyBsZSBmaWNoaWVyIC9ldGMvZXRoZXJzIHNlcm9udCBhbG9ycyBzZXJ2aXMgcGFyIGxlIERIQ1AuCisKK0wnYWRyZXNzZSBkZSBmaW4gcGV1dC3DqnRyZSByZW1wbGFjw6llIHBhciBsZSBtb3QtY2xlZgorLkIgcHJveHkKKywgYXVxdWVsIGNhcyBEbnNtYXNxIGZvdXJuaXJhIHVuIHNlcnZpY2UgZGUgREhDUCBwcm94eSBwb3VyIGxlIHNvdXMtcsOpc2VhdQorc3DDqWNpZmnDqS4gKHZvaXIKKy5CIHB4ZS1wcm9tcHQKK2V0CisuQiBweGUtc2VydmljZQorcG91ciBwbHVzIGRlIGTDqXRhaWxzKS4KKy5UUAorLkIgXC1HLCAtLWRoY3AtaG9zdD1bPGFkcmVzc2UgbWF0w6lyaWVsbGU+XVssaWQ6PGlkZW50aWZpYW50IGNsaWVudD58Kl1bLG5ldDo8aWRlbnRpZmlhbnQgZGUgcsOpc2VhdT5dWyw8YWRyZXNzZSBJUD5dWyw8bm9tIGQnaMO0dGU+XVssPGR1csOpZSBkZSBiYWlsPl1bLGlnbm9yZV0KK1Nww6ljaWZpZSBsZXMgcGFyYW3DqHRyZXMgREhDUCByZWxhdGlmcyDDoCB1biBow7R0ZS4gQ2VsYSBwZXJtZXQgw6AgdW5lIG1hY2hpbmUKK3Bvc3PDqWRhbnQgdW5lIGFkcmVzc2UgbWF0w6lyaWVsbGUgc3DDqWNpZmlxdWUgZGUgc2Ugdm9pciB0b3Vqb3VycyBhbGxvdcOpZSBsZXMKK23Dqm1lcyBub20gZCdow7R0ZSwgYWRyZXNzZSBJUCBldCBkdXLDqWUgZGUgYmFpbC4gVW4gbm9tIGQnaMO0dGUgc3DDqWNpZmnDqSBjb21tZQorY2VjaSByZW1wbGFjZSBsZSBub20gZm91cm5pIHBhciBsZSBjbGllbnQgREhDUCBkZSBsYSBtYWNoaW5lIGjDtHRlLiBJbCBlc3QKK8OpZ2FsZW1lbnQgcG9zc2libGUgZCdvbWV0dHJlIGwnYWRyZXNzZSBtYXTDqXJpZWxsZSBldCBkJ2luY2x1cmUgbGUgbm9tIGQnaMO0dGUsCithdXF1ZWwgY2FzIGwnYWRyZXNzZSBJUCBldCBsYSBkdXLDqWUgZGUgYmFpbCBzJ2FwcGxpcXVlcm9udCDDoCB0b3V0ZSBtYWNoaW5lIHNlCityw6ljbGFtYW50IGRlIGNlIG5vbS4gUGFyIGV4ZW1wbGUKKy5CIC0tZGhjcC1ob3N0PTAwOjIwOmUwOjNiOjEzOmFmLHdhcCxpbmZpbml0ZSAKK3Nww6ljaWZpZSDDoCBEbnNtYXNxIGRlIGZvdXJuaXIgw6AgbGEgbWFjaGluZSBkJ2FkcmVzc2UgbWF0w6lyaWVsbGUKKzAwOjIwOmUwOjNiOjEzOmFmIGxlIG5vbSwgZXQgdW4gYmFpbCBkZSBkdXLDqWUgaW5kw6l0ZXJtaW7DqWUuCisKKy5CIC0tZGhjcC1ob3N0PWxhcCwxOTIuMTY4LjAuMTk5IAorc3DDqWNpZmllIMOgIERuc21hc3EgZCdhbGxvdWVyIHRvdWpvdXJzIMOgIGxhIG1hY2hpbmUgcG9ydGFudCBsZSBub20gbGFwCitsJ2FkcmVzc2UgSVAgOTIuMTY4LjAuMTk5LiBMZXMgYWRyZXNzZXMgYWxsb3XDqWVzIGNvbW1lIGNlY2kgbmUgc29udCBwYXMKK2NvbnRyYWludGVzIGRhbnMgdW5lIHBsYWdlIGQnYWRyZXNzZSBzcMOpY2lmacOpZSBwYXIgdW5lIG9wdGlvbiAtLWRoY3AtcmFuZ2UsIG1haXMKK2VsbGVzIGRvaXZlbnQgw6p0cmUgc3VyIHVuIHLDqXNlYXUgc2VydmkgcGFyIGxlIHNlcnZldXIgREhDUC4gSWwgZXN0IHBvc3NpYmxlCitkJ3V0aWxpc2VyIGRlcyBpZGVudGlmaWFudHMgY2xpZW50cyBwbHV0w7R0IHF1ZSBkZXMgYWRyZXNzZXMgbWF0w6lyaWVsbGVzIHBvdXIKK2lkZW50aWZpZXIgbGVzIGjDtHRlcywgZW4gcHLDqWZpeGFudCBwYXIgY2V1eC1jaSBwYXIgJ2lkOicuIEFpbnNpLCAKKy5CIC0tZGhjcC1ob3N0PWlkOjAxOjAyOjAzOjA0LC4uLi4uIAorcsOpZsOocmUgw6AgbCdow7R0ZSBkJ2lkZW50aWZpYW50IDAxOjAyOjAzOjA0LiBJbCBlc3Qgw6lnYWxlbWVudCBwb3NzaWJsZSBkZQorc3DDqWNpZmllciBsJ2lkZW50aWZpYW50IGNsaWVudCBzb3VzIGxhIGZvcm1lIGQndW5lIGNoYcOubmUgZGUgY2FyYWN0w6hyZXMsIGNvbW1lCitjZWNpIDoKKy5CIC0tZGhjcC1ob3N0PWlkOmlkZW50aWZpYW50Y2xpZW50c291c2Zvcm1lZGVjaGFpbmUsLi4uLi4gCisKK0wnb3B0aW9uIHNww6ljaWFsZSBpZDoqIHNpZ25pZmllIDogImlnbm9yZXIgdG91dCBpZGVudGlmaWFudCBjbGllbnQgZXQgbid1dGlsaXNlcgorcXVlIGwnYWRyZXNzZSBtYXTDqXJpZWxsZSIuIENlbGEgZXN0IHV0aWxlIGxvcnNxdSd1biBjbGllbnQgcHLDqXNlbnRlIHVuCitpZGVudGlmaWFudCBjbGllbnQgbWFpcyBwYXMgbGVzIGF1dHJlcy4KKworU2kgdW4gbm9tIGFwcGFyYcOudCBkYW5zIC9ldGMvaG9zdHMsIGwnYWRyZXNzZSBhc3NvY2nDqWUgcGV1dCDDqnRyZSBhbGxvdcOpZSDDoCB1bgorYmFpbCBESENQIG1haXMgc2V1bGVtZW50IHNpIHVuZSBvcHRpb24KKy5CIC0tZGhjcC1ob3N0CitzcMOpY2lmaWFudCBsZSBub20gZXhpc3RlIHBhciBhaWxsZXVycy4gTGUgbW90IGNsZWYgImlnbm9yZSIgKCJpZ25vcmVyIikgaW5kaXF1ZQorw6AgRG5zbWFzcSBkZSBuZSBqYW1haXMgZm91cm5pciBkZSBiYWlsIERIQ1Agw6AgdW5lIG1hY2hpbmUuIExhIG1hY2hpbmUgcGV1dCDDqnRyZQorc3DDqWNpZmnDqWUgcGFyIHNvbiBhZHJlc3NlIG1hdMOpcmllbGxlLCBzb24gaWRlbnRpZmlhbnQgY2xpZW50IG91IHNvbiBub20gZCdow7R0ZS4KK1BhciBleGVtcGxlCisuQiAtLWRoY3AtaG9zdD0wMDoyMDplMDozYjoxMzphZixpZ25vcmUKK0NlbGEgZXN0IHV0aWxlIGxvcnNxdSd1biBhdXRyZSBzZXJ2ZXVyIERIQ1Agc3VyIGxlIHLDqXNlYXUgZG9pdCDDqnRyZSB1dGlsaXPDqSBwYXIKK2NlcnRhaW5lcyBtYWNoaW5lcy4KKworTGUgcGFyYW3DqHRyZSBuZXQ6PGlkZW50aWZpYW50IHLDqXNlYXU+IHBlcm1ldCBkZSBkw6lmaW5pciB1bgoraWRlbnRpZmlhbnQgZGUgcsOpc2VhdSBsb3JzcXVlIGwnb3B0aW9uIGRoY3AtaG9zdCBlc3QgdXRpbGlzw6llLiBDZWxhIHBldXQgc2VydmlyCivDoCBzw6lsZWN0aW9ubmVyIGRlcyBvcHRpb25zIERIQ1AganVzdGUgcG91ciBjZXQgaMO0dGUuIExvcnNxdSd1bmUgbWFjaGluZSBjb8OvbmNpZGUKK2F2ZWMgdW5lIGRpcmVjdGl2ZSBkaGNwLWhvc3QgKG91IHVuZSBpbXBsaXF1w6llIHBhciAvZXRjL2V0aGVycyksIGFsb3JzCitsJ2lkZW50aWZpYW50IHLDqXNlYXUgcsOpc2VydsOpICJrbm93biIgKCJjb25udSIpIGVzdCBhc3NvY2nDqS4gQ2VsYSBwZXJtZXQgw6AKK0Ruc21hc3EgZCfDqnRyZSBjb25maWd1csOpIHBvdXIgaWdub3JlciBsZXMgcmVxdcOqdGVzIGlzc3VzIGRlIG1hY2hpbmVzIGluY29ubnVlCisgcGFyIGxlIGJpYWlzIGRlIAorLkIgLS1kaGNwLWlnbm9yZT0ja25vd24uCisKK0xlcyBhZHJlc3NlcyBldGhlcm5ldCAobWFpcyBwYXMgbGVzIGlkZW50aWZpYW50cyBjbGllbnRzKSBwZXV2ZW50IMOqdHJlIGTDqWZpbmllcworYXZlYyBkZXMgb2N0ZXRzIGpva2VyLCBhaW5zaSBwYXIgZXhlbXBsZQorLkIgLS1kaGNwLWhvc3Q9MDA6MjA6ZTA6M2I6MTM6KixpZ25vcmUgCitkZW1hbmRlIMOgIERuc21hc3EgZCdpZ25vcmVyIHVuZSBnYW1tZSBkJ2FkcmVzc2VzIG1hdMOpcmllbGxlcy4gSWwgZXN0ICDDoCBub3RlcgorcXVlICIqIiBkb2l0LcOqdHJlIHByw6ljw6lkw6kgZCd1biBjYXJhY3TDqHJlIGQnw6ljaGFwcGVtZW50IG91IG1pcyBlbnRyZSBndWlsbGVtZXRzCitsb3JzcXVlIHNww6ljaWZpw6kgZW4gb3B0aW9uIGRlIGxpZ25lIGRlIGNvbW1hbmRlLCBtYWlzIHBhcyBkYW5zIGxlIGZpY2hpZXIgZGUKK2NvbmZpZ3VyYXRpb24uCisKK0xlcyBhZHJlc3NlcyBtYXTDqXJpZWxsZXMgY2/Dr25jaWRlbnQgZW4gcHJpbmNpcGUgYXZlYyBuJ2ltcG9ydGUKK3F1ZWwgdHlwZSBkZSByw6lzZWF1IChBUlApLCBtYWlzIGlsIGVzdCBwb3NzaWJsZSBkZSBsZXMgbGltaXRlciDDoCB1biBzZXVsIHR5cGUKK0FSUCBlbiBsZXMgcHLDqWPDqWRhbnQgZHUgdHlwZSBBUlAgKGVuIEhleGFkw6ljaW1hbCkgZXQgZGUgIi0iLiBBaW5zaQorLkIgLS1kaGNwLWhvc3Q9MDYtMDA6MjA6ZTA6M2I6MTM6YWYsMS4yLjMuNCAKK2Nvw69uY2lkZXJhIHVuaXF1ZW1lbnQgYXZlYyBkZXMgYWRyZXNzZXMgbWF0w6lyaWVsbGVzIFRva2VuLVJpbmcsIHB1aXNxdWUgbGUgdHlwZQorQVJQIHBvdXIgdW5lIGFkcmVzc2UgVG9rZW4tUmluZyBlc3QgNi4KKworVW4gY2FzIHNww6ljaWFsIGNvcnJlc3BvbmQgw6AgbCdpbmNsdXNpb24gZCd1bmUgb3UgcGx1c2lldXJzIGFkcmVzc2VzCittYXTDqXJpZWxsZXMsIGMtw6AtZCA6CisuQiAtLWRoY3AtaG9zdD0xMToyMjozMzo0NDo1NTo2NiwxMjozNDo1Njo3ODo5MDoxMiwxOTIuMTY4LjAuMi4KK0NlbGEgcGVybWV0IMOgIHVuZSBhZHJlc3NlIElQIGQnw6p0cmUgYXNzb2Npw6kgw6AgcGx1c2lldXJzIGFkcmVzc2VzCittYXTDqXJpZWxsZXMsIGV0IGRvbm5lIMOgIGRuc21hc3EgbGEgcGVybWlzc2lvbiBkJ2FiYW5kb25uZXIgdW4gYmFpbCBESENQCithdHRyaWJ1w6kgw6AgbCd1bmUgZGUgY2VzIGFkcmVzc2VzIGxvcnNxdSd1bmUgYXV0cmUgYWRyZXNzZSBkYW5zIGxhIGxpc3RlCitkZW1hbmRlIHVuIGJhaWwuIENlY2kgZXN0IHVuZSBvcMOpcmF0aW9uIGRhbmdlcmV1c2UgcXVpIG5lIGZvbmN0aW9ubmVyYQorZGUgbWFuacOocmUgZmlhYmxlIHF1ZSBzaSB1bmUgYWRyZXNzZSBtYXTDqXJpZWxsZSBlc3QgYWN0aXZlIMOgIHVuIG1vbWVudAorZG9ubsOpIGV0IGRuc21hc3EgbidhIGF1Y3VuIG1veWVuIGRlIHMnYXNzdXJlciBkZSBjZWxhLiBDZWxhIGVzdCB1dGlsZSwKK3BhciBleGVtcGxlLCBwb3VyIGFsbG91ZXIgdW5lIGFkcmVzc2UgSVAgc3RhYmxlIMOgIHVuIGxhcHRvcCBxdWkKK2F1cmFpdCDDoCBsYSBmb2lzIHVuZSBjb25uZXhpb24gZmlsYWlyZSBldCBzYW5zLWZpbC4KKy5UUAorLkIgLS1kaGNwLWhvc3RzZmlsZT08ZmljaGllcj4KK0xpcyBsZXMgaW5mb3JtYXRpb25zIGQnaMO0dGVzIERIQ1AgZGFucyBsZSBmaWNoaWVyIHNww6ljaWZpw6kuIExlIGZpY2hpZXIgY29udGllbnQKK2RlcyBpbmZvcm1hdGlvbnMgw6AgcmFpc29uIGQndW4gaMO0dGUgcGFyIGxpZ25lLiBMZSBmb3JtYXQgZCd1bmUgbGlnbmUgZXN0IGxhIG3Dqm1lCitxdWUgbGUgdGV4dGUgZm91cm5pIMOgIGxhIGRyb2l0ZSBzdXIgY2FyYWN0w6hyZSAiPSIgZGFucyBsJ29wdGlvbgorLkIgLS1kaGNwLWhvc3QuCitMJ2F2YW50YWdlIGRlIHN0b2NrZXIgbGVzIGluZm9ybWF0aW9ucyBzdXIgbGVzIGjDtHRlcyBESENQIGRhbnMgY2UgZmljaGllciBlc3QKK3F1ZSBjZWxsZXMtY2kgcGV1dmVudCDDqnRyZSBtb2RpZmnDqWVzIHNhbnMgcmVjaGFyZ2VyIERuc21hc3E7IGxlIGZpY2hpZXIgc2VyYQorcmVsdSBsb3JzcXVlIERuc21hc3EgcmXDp29pdCB1biBzaWduYWwgU0lHSFVQLgorLlRQCisuQiAtLWRoY3Atb3B0c2ZpbGU9PGZpY2hpZXI+CitMaXMgbGVzIGluZm9ybWF0aW9ucyByZWxhdGl2ZXMgYXV4IG9wdGlvbnMgREhDUCBkYW5zIGxlIGZpY2hpZXIgc3DDqWNpZmnDqS4KK0wnaW50w6lyw6p0IGQndXRpbGlzZXIgY2V0dGUgb3B0aW9uIGVzdCBsZSBtw6ptZSBxdWUgcG91ciAtLWRoY3AtaG9zdHNmaWxlIDogbGUKK2ZpY2hpZXIgc3DDqWNpZmnDqSBzZXJhIHJlY2hhcmfDqSDDoCBsYSByw6ljZXB0aW9uIHBhciBkbnNtYXNxIGQndW4gc2lnbmFsIFNJR0hVUC4KK05vdGV6IHF1J2lsIGVzdCBwb3NzaWJsZSBkJ2VuY29kZXIgbCdpbmZvcm1hdGlvbiB2aWEKKy5CIC0tZGhjcC1ib290CitlbiB1dGlsaXNhbnQgbGVzIG5vbXMgb3B0aW9ubmVscyBib290ZmlsZS1uYW1lLCBzZXJ2ZXItaXAtYWRkcmVzcyBldAordGZ0cC1zZXJ2ZXIuIENlY2kgcGVybWV0IGQnaW5jbHVyZSBjZXMgb3B0aW9ucyBkYW5zIHVuIGZpY2hpZXIgImRoY3Atb3B0c2ZpbGUiLkROU01BU1FfU1VQUExJRURfSE9TVE5BTUUKKy5UUAorLkIgXC1aLCAtLXJlYWQtZXRoZXJzCitMaXMgbGVzIGluZm9ybWF0aW9ucyBkJ2jDtHRlcyBESENQIGRhbnMgbGUgZmljaGllciAvZXRjL2V0aGVycy4gTGUgZm9ybWF0IGRlCisvZXRjL2V0aGVycyBlc3QgdW5lIGFkcmVzc2UgbWF0w6lyaWVsbGUgc3VpdmllLCBzb2l0IHBhciB1biBub20gZCdow7R0ZSwgc29pdCBwYXIKK3VuZSBhZHJlc3NlIElQIHNvdXMgbGEgZm9ybWUgZGUgNCBjaGlmZnJlcyBzw6lwYXLDqXMgcGFyIGRlcyBwb2ludHMuIExvcnNxdWUgbHUKK3BhciBEbnNtYXNxLCBjZXMgbGlnbmVzIG9udCBleGFjdGVtZW50IGxlIG3Dqm1lIGVmZmV0IHF1ZSBsJ29wdGlvbgorLkIgLS1kaGNwLWhvc3QKK2NvbnRlbmFudCBsZXMgbcOqbWVzIGluZm9ybWF0aW9ucy4gL2V0Yy9ldGhlcnMgZXN0IHJlbHUgw6AgbGEgcsOpY2VwdGlvbiBkJ3VuCitzaWduYWwgU0lHSFVQIHBhciBEbnNtYXNxLgorLlRQCisuQiBcLU8sIC0tZGhjcC1vcHRpb249WzxpZGVudGlmaWFudF9kZV9yw6lzZWF1PixbPGlkZW50aWZpYW50X2RlX3LDqXNlYXU+LF1dW2VuY2FwOjxvcHRpb24+LF1bdmVuZG9yOls8Y2xhc3NlX3ZlbmRldXI+XSxdWzxvcHRpb24+fG9wdGlvbjo8bm9tIGQnb3B0aW9uPl0sWzx2YWxldXI+Wyw8dmFsZXVyPl1dCitTcMOpY2lmaWUgZGVzIG9wdGlvbnMgZGlmZsOpcmVudGVzIG91IHN1cHBsw6ltZW50YWlyZXMgcG91ciBkZXMgY2xpZW50cyBESENQLiBQYXIKK2TDqWZhdXQsIERuc21hc3EgZW52b2llIHVuIGVuc2VtYmxlIHN0YW5kYXJkIGQnb3B0aW9ucyBhdXggY2xpZW50cyBESENQIDogbGUKK21hc3F1ZSBkZSByw6lzZWF1IGV0IGwnYWRyZXNzZSBkZSBicm9hZGNhc3Qgc29udCBsZXMgbcOqbWVzIHF1ZSBwb3VyIGwnaMO0dGUKK3N1ciBsZXF1ZWwgdG91cm5lIERuc21hc3EsIGV0IGxlIHNlcnZldXIgRE5TIGFpbnNpIHF1ZSBsYSByb3V0ZSBwYXIgZMOpZmF1dAorcHJlbm5lbnQgY29tbWUgdmFsZXVyIGwnYWRyZXNzZSBkZSBsYSBtYWNoaW5lIHN1ciBsYXF1ZWxsZSB0b3VybmUgRG5zbWFzcS4gU2kKK3VuZSBvcHRpb24gZGUgbm9tIGRlIGRvbWFpbmUgYSDDqXTDqSBkw6lmaW5pZSwgc29uIGNvbnRlbnUgZXN0IHRyYW5zbWlzLiBDZXR0ZQorb3B0aW9uIGRlIGNvbmZpZ3VyYXRpb24gcGVybWV0IGRlIGNoYW5nZXIgdG91dGVzIGNlcyB2YWxldXJzIHBhciBkw6lmYXV0LCBvdSBkZQorc3DDqWNpZmllciBkJ2F1dHJlcyBvcHRpb25zLiBMJ29wdGlvbiBESENQIMOgIHRyYW5zbWV0dHJlIHBldXQgw6p0cmUgZm91cm5pZSBzb3VzCitmb3JtZSBkJ3VuIG5vbWJyZSBkw6ljaW1hbCBvdSBzb3VzIGxhIGZvcm1lICJvcHRpb246PG5vbSBkJ29wdGlvbj4iLiBMZXMgbm9tYnJlcworY29ycmVzcG9uZGFudHMgYXV4IG9wdGlvbnMgc29udCBkw6lmaW5pcyBkYW5zIGxhIFJGQzIxMzIgZXQgc3VpdmFudHMuIExlcyBub21zCitkJ29wdGlvbnMgY29ubnVzIHBhciBEbnNtYXNxIHBldXZlbnQgw6p0cmUgb2J0ZW51cyB2aWEgIkRuc21hc3EgLS1oZWxwIGRoY3AiLgorUGFyIGV4ZW1wbGUsIHBvdXIgZMOpZmluaXIgbGEgcm91dGUgcGFyIGTDqWZhdXQgw6AgMTkyLjE2OC40LjQsIGlsIGVzdCBwb3NzaWJsZSBkZQorZmFpcmUKKy5CIC0tZGhjcC1vcHRpb249MywxOTIuMTY4LjQuNCAKK291CisuQiAtLWRoY3Atb3B0aW9uID0gb3B0aW9uOnJvdXRlciwgMTkyLjE2OC40LjQKK291IGVuY29yZSwgcG91ciBwb3NpdGlvbm5lciBsJ2FkcmVzc2UgZHUgc2VydmV1ciBkZSB0ZW1wcyDDoCAxOTIuMTY4LjAuNCwgb24gcGV1dAorZmFpcmUKKy5CIC0tZGhjcC1vcHRpb24gPSA0MiwxOTIuMTY4LjAuNCAKK291IAorLkIgLS1kaGNwLW9wdGlvbiA9IG9wdGlvbjpudHAtc2VydmVyLCAxOTIuMTY4LjAuNAorTCdhZHJlc3NlIDAuMC4wLjAgcHJlbmRzIGljaSBsZSBzZW5zICJkJ2FkcmVzc2UgZGUgbGEgbWFjaGluZSBzdXIgbGFxdWVsbGUKK3RvdXJuZSBEbnNtYXNxIi4gTGVzIHR5cGVzIGRlIGRvbm7DqWVzIGF1dG9yaXPDqWVzIHNvbnQgZGVzIGFkcmVzc2VzIElQIHNvdXMgbGEKK2Zvcm1lIGRlIDQgY2hpZmZyZXMgc8OpcGFyw6lzIHBhciBkZXMgcG9pbnRzLCB1biBub21icmUgZMOpY2ltYWwsIHVuZSBsaXN0ZSBkZQorY2FyYWN0w6hyZXMgaGV4YWTDqWNpbWF1eCBzw6lwYXLDqXMgcGFyIGRlcyAyIHBvaW50cywgb3UgdW5lIGNoYcOubmUgZGUgY2FyYWN0w6hyZXMuCitTaSBkZXMgaWRlbnRpZmlhbnRzIGRlIHLDqXNlYXV4IHNvbnQgZm91cm5pcywgYWxvcnMgY2V0dGUgb3B0aW9uIG4nZXN0IGVudm95w6llCitxdSdhdXggcsOpc2VhdXggZG9udCB0b3VzIGxlcyBpZGVudGlmaWFudHMgY2/Dr25jaWRlbnQuCisKK1VuIHRyYWl0ZW1lbnQgc3DDqWNpYWwgZXN0IGVmZmVjdHXDqSBzdXIgbGVzIGNoYcOubmVzIGRlIGNhcmFjdMOocmVzIGZvdXJuaWVzIHBvdXIKK2wnb3B0aW9uIDExOSwgY29uZm9ybcOpbWVudCDDoCBsYSBSRkMgMzM5Ny4gTGVzIGNoYcOubmVzIGRlIGNhcmFjdMOocmVzIG91IGxlcworYWRyZXNzZXMgSVAgc291cyBmb3JtZSBkZSA0IGNoaWZmcmVzIHPDqXBhcsOpcyBwYXIgZGVzIHBvaW50cyBkb25uw6lzIGVuIGFyZ3VtZW50cworZGUgbCdvcHRpb24gMTIwIHNvbnQgdHJhaXTDqXMgY29uZm9ybcOpbWVudHMgw6AgbGEgUkZDIDMzNjEuIExlcyBhZHJlc3NlcyBJUCBzb3VzCitmb3JtZSBkZSA0IGNoaWZmcmVzIHPDqXBhcsOpcyBwYXIgZGVzIHBvaW50cyBzdWl2aWVzIHBhciB1bmUgYmFycmUgbW9udGFudGUgIi8iLAorcHVpcyB1bmUgdGFpbGxlIGRlIG1hc3F1ZSBzb250IGVuY29kw6lzIGNvbmZvcm3DqW1lbnRzIMOgIGxhIFJGQyAzNDQyLgorCitBdHRlbnRpb24gOiBhdWN1biB0ZXN0IG4nw6l0YW50IGZhaXQgcG91ciB2w6lyaWZpZXIgcXVlIGRlcyBkb25uw6llcyBkJ3VuIHR5cGUKK2Fkw6lxdWF0IHNvbnQgZW52b3nDqWVzIHBvdXIgdW4gbnVtw6lybyBkJ29wdGlvbiBkb25uw6ksIGlsIGVzdCB0b3V0IMOgIGZhaXQgcG9zc2libGUKK2RlIHBlcnN1YWRlciBEbnNtYXNxIGRlIGfDqW7DqXJlciBkZXMgcGFxdWV0cyBESENQIGlsbMOpZ2F1eCBwYXIgdW5lIHV0aWxpc2F0aW9uCitpbmNvcnJlY3RlIGRlIGNldHRlIG9wdGlvbi4gTG9yc3F1ZSBsYSB2YWxldXIgZXN0IHVuIG5vbWJyZSBkw6ljaW1hbCwgRG5zbWFzcQorZG9pdCBkw6l0ZXJtaW5lciBsYSB0YWlsbGUgZGVzIGRvbm7DqWVzLiBDZWxhIGVzdCBmYWl0IGVuIGV4YW1pbmFudCBsZSBudW3DqXJvIGRlCitsJ29wdGlvbiBldC9vdSBsYSB2YWxldXIsIG1haXMgcGV1dC3DqnRyZSDDqXZpdMOpIGVuIHJham91dGFudCB1biBzdWZmaXhlIGQndW5lCitsZXR0cmUgY29tbWUgc3VpdCA6CitiID0gdW4gb2N0ZXQsIHMgPSAyIG9jdGV0cywgaSA9IDQgb2N0ZXRzLiBDZWxhIHNlcnQgZXNzZW50aWVsbGVtZW50IHBvdXIgZGVzCitvcHRpb25zIGVuY2Fwc3Vsw6llcyBkZSBjbGFzc2VzIGRlIHZlbmRldXJzICh2b2lyIHBsdXMgYmFzKSwgcG91ciBsZXNxdWVsbGVzIAorRG5zbWFzcSBuZSBwZXV0IGTDqXRlcm1pbmVyIGxhIHRhaWxsZSBkZSBsYSB2YWxldXIuIExlcyBkb25uw6llcyBkJ29wdGlvbnMKK2NvbnNpc3RhbnQgdW5pcXVlbWVudCBkZSBwb2ludHMgZXQgZGUgZMOpY2ltYXV4IHNvbnQgaW50ZXJwcsOpdMOpZXMgcGFyIERuc21hc3EKK2NvbW1lIGRlcyBhZHJlc3NlcyBJUCwgZXQgZW52b3nDqWVzIGNvbW1lIHRlbGxlcy4gUG91ciBmb3JjZXIgbCdlbnZvaSBzb3VzIGZvcm1lCitkZSBjaGHDrm5lIGRlIGNhcmFjdMOocmUsIGlsIGVzdCBuw6ljZXNzYWlyZSBkJ3V0aWxpc2VyIGRlcyBndWlsbGVtZXRzIGRvdWJsZXMuIFBhcgorZXhlbXBsZSwgbCd1dGlsaXNhdGlvbiBkZSBsJ29wdGlvbiA2NiBwb3VyIGZvdXJuaXIgdW5lIGFkcmVzc2UgSVAgc291cyBsYSBmb3JtZQorZCd1bmUgY2hhw65uZSBkZSBjYXJhY3TDqHJlcyBjb21tZSBub20gZGUgc2VydmV1ciBURlRQLCBpbCBlc3QgbsOpY2Vzc2FpcmUgZGUgZmFpcmUKK2NvbW1lIHN1aXQgOgorLkIgLS1kaGNwLW9wdGlvbj02NiwiMS4yLjMuNCIKKworTGVzIG9wdGlvbnMgZW5jYXBzdWzDqWVzIGRlIGNsYXNzZXMgZGUgdmVuZGV1cnMgcGV1dmVudC3DqnRyZSBhdXNzaSBzcMOpY2lmacOpZXMgZW4KK3V0aWxpc2FudAorLkIgLS1kaGNwLW9wdGlvbgorOiBwYXIgZXhlbXBsZQorLkIgLS1kaGNwLW9wdGlvbj12ZW5kb3I6UFhFQ2xpZW50LDEsMC4wLjAuMAorZW52b2llIGwnb3B0aW9uIGVuY2Fwc3Vsw6llIGRlIGNsYXNzZSBkZSB2ZW5kZXVyICJtZnRwLWFkZHJlc3M9MC4wLjAuMCIgw6AKK24naW1wb3J0ZSBxdWVsIGNsaWVudCBkb250IGxhIGNsYXNzZSBkZSB2ZW5kZXVyIGNvcnJlc3BvbmQgw6AgIlBYRUNsaWVudCIuIExhCitjb3JyZXNwb25kYW5jZSBwb3VyIGxlcyBjbGFzc2VzIGRlIHZlbmRldXIgcydlZmZlY3R1ZSBzdXIgZGVzIHNvdXMtY2hhw65uZXMgZGUKK2NhcmFjdMOocmVzICh2b2lyCisuQiAtLWRoY3AtdmVuZG9yY2xhc3MKK3BvdXIgcGx1cyBkZSBkw6l0YWlscykuIFNpIHVuZSBvcHRpb24gZGUKK2NsYXNzZSBkZSB2ZW5kZXVyIChudW3DqXJvIDYwKSBlc3QgZW52b3nDqWUgcGFyIERuc21hc3EsIGFsb3JzIGNlbGEgZXN0IHV0aWxpc8OpCitwb3VyIHPDqWxlY3Rpb25uZXIgbGVzIG9wdGlvbnMgZW5jYXBzdWzDqWVzLCBkZSBwcsOpZsOpcmVuY2Ugw6AgdG91dGUgb3B0aW9uIGVudm95w6llCitwYXIgbGUgY2xpZW50LiBJbCBlc3QgcG9zc2libGUgZCdvbWV0dHJlIGNvbXBsw6h0ZW1lbnQgdW5lIGNsYXNzZSBkZSB2ZW5kZXVyIDoKKy5CIC0tZGhjcC1vcHRpb249dmVuZG9yOiwxLDAuMC4wLjAKK0RhbnMgY2UgY2FzIGwnb3B0aW9uIGVuY2Fwc3Vsw6llIGVzdCB0b3Vqb3VycyBlbnZvecOpZS4KKworTGVzIG9wdGlvbnMgcGV1dmVudC3DqnRyZSBlbmNhcHN1bMOpZXMgYXUgc2VpbiBkJ2F1dHJlcyBvcHRpb25zIDoKK3BhciBleGVtcGxlCisuQiAtLWRoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTkwLCAiaXNjc2ktY2xpZW50MCIKK2VudmVycmEgbCdvcHRpb24gMTc1LCBhdSBzZWluIGRlIGxhcXVlbGxlIHNlIHRyb3V2ZSBsJ29wdGlvbiAxOTAuCitQbHVzaWV1cnMgb3B0aW9ucyBlbmNhcHN1bMOpZXMgYXZlYyBsZSBtw6ptZSBudW3DqXJvIGQnb3B0aW9uIHNlcm9udCBjb3JyZWN0ZW1lbnQKK2NvbWJpbsOpZXMgYXUgc2VpbiBkJ3VuZSBzZXVsZSBvcHRpb24gZW5jYXBzdWzDqWUuIElsIG4nZXN0IHBhcyBwb3NzaWJsZSBkZQorc3DDqWNpZmllciBlbmNhcDogZXQgdmVuZG9yOiBhdSBzZWluIGQndW5lIG3Dqm1lIG9wdGlvbiBkaGNwLgorCitMJ2FkcmVzc2UgMC4wLjAuMCBuJ2VzdCBwYXMgdHJhaXTDqWUgZGUgbWFuacOocmUgcGFydGljdWxpw6hyZSBsb3JzcXVlIGZvdXJuaWUgZGFucwordW5lIG9wdGlvbiBlbmNhcHN1bMOpZS4KKy5UUAorLkIgLS1kaGNwLW9wdGlvbi1mb3JjZT1bPGlkZW50aWZpYW50IGRlIHLDqXNlYXU+LFs8aWRlbnRpZmlhbnQgZGUgcsOpc2VhdT4sXV1bZW5jYXA6PG9wdGlvbj4sXVt2ZW5kb3I6WzxjbGFzc2UgZGUgdmVuZGV1cj5dLF08b3B0aW9uPixbPHZhbGV1cj5bLDx2YWxldXI+XV0KK0NlbGEgZm9uY3Rpb25uZSBleGFjdGVtZW50IGRlIGxhIG3Dqm1lIGZhw6dvbiBxdWUKKy5CIC0tZGhjcC1vcHRpb24KK3NhdWYgcXVlIGNldHRlIG9wdGlvbiBzZXJhIHRvdWpvdXJzIGVudm95w6llLCBtw6ptZSBzaSBsZSBjbGllbnQgbmUgbGEgZGVtYW5kZSBwYXMKK2RhbnMgbGEgbGlzdGUgZGUgcGFyYW3DqnRyZXMgcmVxdWlzLiBDZWxhIGVzdCBwYXJmb2lzIG7DqWNlc3NhaXJlLCBwYXIgZXhlbXBsZSBsb3JzCitkZSBsYSBmb3Vybml0dXJlIGQnb3B0aW9ucyDDoCBQWEVMaW51eC4KKy5UUAorLkIgLS1kaGNwLW5vLW92ZXJyaWRlCitEw6lzYWN0aXZlIGxhIHLDqXV0aWxpc2F0aW9uIGRlcyBjaGFtcHMgREhDUCBub20gZGUgc2VydmV1ciBldCBub20gZGUKK2ZpY2hpZXIgY29tbWUgZXNwYWNlIHN1cHBsw6ltZW50YWlyZSBwb3VyIGxlcyBvcHRpb25zLiBTaSBjZWxhIGVzdAorcG9zc2libGUsIGRuc21hc3EgZMOpcGxhY2UgbGVzIGluZm9ybWF0aW9ucyBzdXIgbGUgc2VydmV1ciBkZSBkw6ltYXJyYWdlCitldCBsZSBub20gZGUgZmljaGllciAoZm91cm5pcyBwYXIgJ2RoY3AtYm9vdCcpIGVuIGRlaG9ycyBkZXMgY2hhbXBzCitkw6lkacOpcyDDoCBjZXQgdXNhZ2UgZGFucyBsZXMgb3B0aW9ucyBESENQLiBDZXQgZXNwYWNlIHN1cHBsw6ltZW50YWlyZSBlc3QKK2Fsb3JzIGRpc3BvbmlibGUgZGFucyBsZSBwYXF1ZXQgREhDUCBwb3VyIGQnYXV0cmVzIG9wdGlvbnMsIG1haXMgcGV1dCwgZGFucworcXVlbHF1ZXMgcmFyZXMgY2FzLCBwZXJ0dXJiZXIgZGVzIGNsaWVudHMgdmlldXggb3UgZMOpZmVjdHVldXguIENldHRlCitvcHRpb24gZm9yY2UgbGUgY29tcG9ydGVtZW50IMOgIGwndXRpbGlzYXRpb24gZGVzIHZhbGV1cnMgInNpbXBsZXMgZXQgc8O7cmVzIgorYWZpbiBkJ8Opdml0ZXIgZGVzIHByb2Jsw6htZXMgZGFucyBkZSB0ZWxzIGNhcy4KKy5UUAorLkIgXC1VLCAtLWRoY3AtdmVuZG9yY2xhc3M9PGlkZW50aWZpYW50IGRlIHLDqXNlYXU+LDxjbGFzc2UgZGUgdmVuZGV1cj4KK0Fzc29jaWUgdW5lIGNoYcOubmUgZGUgY2xhc3NlIGRlIHZlbmRldXIgw6AgdW4gaW5kZW50aWZpYW50IGRlIHLDqXNlYXUuIExhIHBsdXBhcnQKK2RlcyBjbGllbnRzIERIQ1AgZm91cm5pc3NlbnQgdW5lICJjbGFzc2UgZGUgdmVuZGV1ciIgKCJ2ZW5kb3IgY2xhc3MiKSBxdWkKK3JlcHLDqXNlbnRlLCBkJ3VuZSBjZXJ0YWluZSBmYcOnb24sIGxlIHR5cGUgZCdow7R0ZS4gQ2V0dGUgb3B0aW9uIGFzc29jaWUgZGVzCitjbGFzc2VzIGRlIHZlbmRldXIgw6AgZGVzIGxhYmVscywgZGUgdGVsbGUgc29ydGUgcXVlIGRlcyBvcHRpb25zIERIQ1AgcGV1dmVudC3DqnRyZQorZm91cm5pZSBkZSBtYW5pw6hyZSBzw6lsZWN0aXZlIGF1eCBkaWZmw6lyZW50ZXMgY2xhc3NlcyBkJ2jDtHRlcy4gUGFyIGV4ZW1wbGUsCisuQiBkaGNwLXZlbmRvcmNsYXNzPXByaW50ZXJzLEhld2xldHQtUGFja2FyZCBKZXREaXJlY3QKK3Blcm1ldCBkZSBuJ2FsbG91ZXIgZGVzIG9wdGlvbnMgcXUnYXV4IGltcHJpbWFudGVzIEhQIGRlIGxhIG1hbmnDqHJlIHN1aXZhbnRlIDoKKy5CIC0tZGhjcC1vcHRpb249cHJpbnRlcnMsMywxOTIuMTY4LjQuNAorTGEgY2hhw65uZSBkZSBjYXJhY3TDqHJlcyBkZSBsYSBjbGFzc2UgZGUgdmVuZGV1ciBmb3VuaWUgZW4gYXJndW1lbnQgZXN0IGNoZXJjaMOpZQorZW4gdGVtcHMgcXVlIHNvdXMtY2hhw65uZSBkZSBjYXJhY3TDqHJlcyBhdSBzZWluIGRlIGxhIGNsYXNzZSBkZSB2ZW5kZXVyIGZvdXJuaWUKK3BhciBsZSBjbGllbnQsIGRlIGZhw6dvbiDDoCBwZXJtZXR0cmUgbGEgcmVjaGVyY2hlIGQndW4gc291cy1lbnNlbWJsZSBkZSBsYSBjaGHDrm5lCitkZSBjYXJhY3TDqHJlcyAoImZ1enp5IG1hdGNoaW5nIikuCisuVFAKKy5CIFwtaiwgLS1kaGNwLXVzZXJjbGFzcz08aWRlbnRpZmlhbnQgZGUgcsOpc2VhdT4sPGNsYXNzZSB1dGlsaXNhdGV1cj4KK0Fzc29jaWUgdW5lIGNoYcOubmUgZGUgY2xhc3NlIGQndXRpbGlzYXRldXIgw6AgdW4gaWRlbnRpZmlhbnQgcsOpc2VhdSAoZWZmZWN0dWUgbGEKK3JlY2hlcmNoZSBzdXIgZGVzIHNvdXMtY2hhw65uZXMsIGNvbW1lIHBvdXIgbGVzIGNsYXNzZXMgZGUgdmVuZGV1cikuIExhIHBsdXBhcnQKK2RlcyBjbGllbnRzIHBlcm1ldHRlbnQgZGUgY29uZmlndXJlciB1bmUgImNsYXNzZSBkJ3V0aWxpc2F0ZXVyIi4gQ2V0dGUgb3B0aW9uCithc3NvY2llIHVuZSBjbGFzc2UgZCd1dGlsaXNhdGV1ciDDoCB1biBsYWJlbCwgZGUgdGVsbGUgbWFuacOocmUgcXUnaWwgc29pdAorcG9zc2libGUgZGUgZm91cm5pciBkZXMgb3B0aW9ucyBESENQIHNww6ljaWZpcXVlcyDDoCBkaWZmw6lyZW50ZXMgY2xhc3NlcyBkJ2jDtHRlcy4KK0lsIGVzdCBwb3NzaWJsZSwgcGFyIGV4ZW1wbGUsIGQndXRpbGlzZXIgY2VjaSBwb3VyIGTDqWZpbmlyIHVuIHNlcnZldXIKK2QnaW1wcmVzc2lvbiBkaWZmw6lyZW50IHBvdXIgbGVzIGjDtHRlcyBkZSBsYSBjbGFzc2UgImNvbXB0ZXMiIGV0IGNldXggZGUgbGEKK2NsYXNzZSAiaW5nw6luaWVyaWUiLgorLlRQCisuQiBcLTQsIC0tZGhjcC1tYWM9PGlkZW50aWZpYW50IGRlIHLDqXNlYXU+LDxhZHJlc3NlIE1BQz4KK0Fzc29jaWUgdW5lIGFkcmVzc2UgbWF0w6lyaWVsbGUgKE1BQykgw6AgdW4gaWRlbnRpZmlhbnQgcsOpc2VhdS4gTCdhZHJlc3NlCittYXTDqXJpZWxsZSBwZXV0IGluY2x1cmUgZGVzIGpva2Vycy4gUGFyIGV4ZW1wbGUKKy5CIC0tZGhjcC1tYWM9M2NvbSwwMTozNDoyMzoqOio6KgorcGVybWV0IGRlIGTDqWZpbmlyIGxlIGxhYmVsICIzY29tIiBwb3VyIG4naW1wb3J0ZSBxdWVsIGjDtHRlIGRvbnQgbCdhZHJlc3NlCittYXTDqXJpZWxsZSBjb8OvbmNpZGUgYXZlYyBsZXMgY3JpdMOocmVzIGTDqWZpbmlzLgorLlRQCisuQiAtLWRoY3AtY2lyY3VpdGlkPTxpZGVudGlmaWFudCBkZSByw6lzZWF1Piw8aWRlbnRpZmlhbnQgZGUgY2lyY3VpdD4sIC0tZGhjcC1yZW1vdGVpZD08aWRlbnRpZmlhbnQgZGUgcsOpc2VhdT4sPGlkZW50aWZpYW50IGRpc3RhbnQ+CitBc3NvY2llIGRlcyBvcHRpb25zIGRlIHJlbGFpcyBESENQIGlzc3VzIGRlIGxhIFJGQzMwNDYgw6AgZGVzIGlkZW50aWZpYW50cyBkZQorcsOpc2VhdS4gQ2V0dGUgaW5mb3JtYXRpb24gcGV1dC3DqnRyZSBmb3VybmllIHBhciBkZXMgcmVsYWlzIERIQ1AuIEwnaWRlbnRpZmlhbnQKK2RlIGNpcmN1aXQgb3UgbCdpZGVudGlmaWFudCBkaXN0YW50IGVzdCBub3JtYWxlbWVudCBmb3Vybmkgc291cyBsYSBmb3JtZSBkJ3VuZQorY2hhw65uZSBkZSB2YWxldXJzIGhleGFkw6ljaW1hbGVzIHPDqXBhcsOpZXMgcGFyIGRlcyAiOiIsIG1haXMgaWwgZXN0IMOpZ2FsZW1lbnQKK3Bvc3NpYmxlIHF1J2VsbGUgbGUgc29pdCBzb3VzIGxhIGZvcm1lIGQndW5lIHNpbXBsZSBjaGHDrm5lIGRlIGNhcmFjdMOocmVzLiBTaQorbCdpZGVudGlmaWFudCBkZSBjaXJjdWl0IG91IGQnYWdlbnQgY29ycmVzcG9uZCBleGFjdGVtZW50IMOgIGNlbHVpIGZvdXJuaSBwYXIgbGUKK3JlbGFpcyBESENQLCBhbG9ycyBsJ2lkZW50aWZpYW50IGRlIHLDqXNlYXUgZXN0IHBvc2l0aW9ubsOpLgorLlRQCisuQiAtLWRoY3Atc3Vic2NyaWQ9PGlkZW50aWZpYW50IGRlIHLDqXNlYXU+LDxpZGVudGlmaWFudCBkJ2Fib25uw6k+CitBc3NvY2llIGRlcyBvcHRpb25zIGRlIHJlbGFpcyBESENQIGlzc3VlcyBkZSBsYSBSRkMzOTkzIMOgIGRlcyBpZGVudGlmaWFudHMgZGUKK3LDqXNlYXUuCisuVFAKKy5CIC0tZGhjcC1tYXRjaD08aWRlbnRpZmlhbnQgZGUgcsOpc2VhdT4sPG51bcOpcm8gZCdvcHRpb24+fG9wdGlvbjo8bm9tIGQnb3B0aW9uPlssPHZhbGV1cj5dCitTaSBhdWN1bmUgdmFsZXVyIG4nZXN0IHNww6ljaWZpw6llLCBhc3NvY2llIGwnaWRlbnRpZmlhbnQgZGUgcsOpc2VhdSBzaSBsZSBjbGllbnQKK2Vudm9pZSB1bmUgb3B0aW9uIERIQ1AgYXZlYyBsZSBudW3DqXJvIG91IGxlIG5vbSBzcMOpY2lmacOpLiBMb3JzcXUndW5lIHZhbGV1ciBlc3QKK2ZvdXJuaWUsIHBvc2l0aW9ubmUgbGUgbGFiZWwgc2V1bGVtZW50IGRhbnMgbGUgY2FzIG/DuSBsJ29wdGlvbiBlc3QgZm91cm5pZSBldAorY29ycmVzcG9uZCDDoCBsYSB2YWxldXIuIExhIHZhbGV1ciBwZXV0LcOqdHJlIGRlIGxhIGZvcm1lICIwMTpmZjoqOjAyIiwgYXVxdWVsCitjYXMgbGUgZMOpYnV0IGRlIGwnb3B0aW9uIGRvaXQgY29ycmVzcG9uZHJlIChlbiByZXNwZWN0YW50IGxlcyBqb2tlcnMpLiBMYQordmFsZXVyIHBldXQgYXVzc2kgw6p0cmUgZGUgbGEgbcOqbWUgZm9ybWUgcXVlIGRhbnMKKy5CIGRoY3Atb3B0aW9uCissIGF1cXVlbCBjYXMgbCdvcHRpb24gZXN0IHRyYWl0w6llIGNvbW1lIHVuIHRhYmxlYXUgZGUgdmFsZXVyLCBldCB1biBkZXMKK8OpbMOpbWVudHMgZG9pdCBjb3JyZXNwb25kcmUsIGFpbnNpCisKKy0tZGhjcC1tYXRjaD1lZmktaWEzMixvcHRpb246Y2xpZW50LWFyY2gsNgorCitzcMOpY2lmaWUgbGUgbGFiZWwgImVmaS1pYTMyIiBzaSBsZSBudW3DqXJvIDYgYXBwYXJhw650IGRuYXMgbGEgbGlzdGUKK2QnYXJjaGl0ZWN0dXJlcyBlbnZvecOpIHBhciBsZSBjbGllbnQgYXUgc2VpbiBkZSBsJ29wdGlvbiA5My4gKHNlIHLDqWZlcmVyCithdSBSRkMgNDU3OCBwb3VyIHBsdXMgZGUgZMOpdGFpbHMpLiBTaSBsYSB2YWxldXIgZXN0IHVuIGNoYWluZSBkZSBjYXJhY3TDqHJlcywKK2NlbGxlLWNpIGVzdCByZWNoZXJjaMOpZSAoY29ycmVzcG9uZGFuY2UgZW4gdGVtcHMgcXVlIHNvdXMtY2hhw65uZSkuCisuVFAKKy5CIFwtSiwgLS1kaGNwLWlnbm9yZT08aWRlbnRpZmlhbnQgZGUgcsOpc2VhdT5bLDxpZGVudGlmaWFudCBkZSByw6lzZWF1Pl0KK0xvcnNxdWUgdG91cyBsZXMgaWRlbnRpZmlhbnRzIGRlIHLDqXNlYXUgZm91cm5pcyBjb8OvbmNpZGVudCBhdmVjIGxhIGxpc3RlCitkJ2lkZW50aWZpYW50cyByw6lzZWF1IGTDqXJpdsOpZSBkZXMgY2xhc3NlcyBkZSByw6lzZWF1LCBow7R0ZSwgdmVuZGV1ciBldAordXRpbGlzYXRldXIsIGlnbm9yZXIgbCdow7R0ZSBldCBuZSBwYXMgZG9ubmVyIGRlIGJhaWwgREhDUC4KKy5UUAorLkIgLS1kaGNwLWlnbm9yZS1uYW1lc1s9PGlkZW50aWZpYW50IGRlIHLDqXNlYXU+Wyw8aWRlbnRpZmlhbnQgZGUgcsOpc2VhdT5dXQorTG9yc3F1ZSB0b3VzIGxlcyBpZGVudGlmaWFudCBkZSByw6lzZWF1IGNvw69uY2lkZW50IGF2ZWMgbGEgbGlzdGUgZCdpZGVudGlmaWFudHMKK3LDqXNlYXUgZMOpcml2w6llcyBkZXMgY2xhc3NlcyBkZSByw6lzZWF1LCBow7R0ZSwgdmVuZGV1ciBldCB1dGlsaXNhdGV1ciwgaWdub3JlciBsZQorbm9tIGRlIG1hY2hpbmUgZm91cm5pIHBhciBsJ2jDtHRlLiBJbCBlc3Qgw6Agbm90ZXIgcXVlLCDDoCBsYSBkaWZmw6lyZW5jZSBkZQorbCdvcHRpb24gImRoY3AtaWdub3JlIiwgaWwgZXN0IHBlcm1pcyBkZSBuZSBwYXMgZm91cm5pciBkJ2lkZW50aWZpYW50IHLDqXNlYXUuCitEYW5zIGNlIGNhcywgbGVzIG5vbXMgZCdow7R0ZXMgZm91cm5pcyBwYXIgbGVzIGNsaWVudHMgREhDUCBzZXJvbnQgdG91am91cnMKK2lnbm9yw6lzLCBldCBsZXMgbm9tcyBkJ2jDtHRlcyBzZXJvbnQgYWpvdXTDqXMgYXUgRE5TIGVuIHV0aWxpc2FudCB1bmlxdWVtZW50IGxhCitjb25maWd1cmF0aW9uIGRoY3AtaG9zdCBkZSBEbnNtYXNxLCBhaW5zaSBxdWUgbGUgY29udGVudSBkZXMgZmljaGllcnMgL2V0Yy9ob3N0cworZXQgL2V0Yy9ldGhlcnMuCisuVFAKKy5CIC0tZGhjcC1icm9hZGNhc3Q9PGlkZW50aWZpYW50IGRlIHLDqXNlYXU+Wyw8aWRlbnRpZmlhbnQgZGUgcsOpc2VhdT5dCitMb3JzcXVlIHRvdXMgbGVzIGlkZW50aWZpYW50cyBkZSByw6lzZWF1eCBmb3VybmlzIGNvcnJlc3BvbmRlbnQgw6AgY2V1eAorb2J0ZW51cyDDoCBwYXJ0aXIgZGVzIGNsYXNzZXMgZGUgcsOpc2VhdSwgZCdow7R0ZSBvdSBkJ3V0aWxpc2F0ZXVyLCBmb3JjZQorbCd1dGlsaXNhdGlvbiBkdSBicm9hZGNhc3QgcG91ciBjb21tdW5pcXVlciBhdmVjIGwnaMO0dGUgbG9yc3F1ZSBjZWx1aS1jaSBuJ2VzdAorcGFzIGNvbmZpZ3Vyw6kuIExhIHBsdXBhcnQgZGVzIGNsaWVudHMgREhDUCBuw6ljZXNzaXRhbnQgdW5lIHLDqXBvbnNlIHBhciBsZSBiaWFpcworZCd1biBicm9hZGNhc3QgYWN0aXZlbnQgdW5lIG9wdGlvbiBkYW5zIGxldXIgcmVxdcOqdGUsIGNlIHF1aSBmYWl0IHF1ZSBjZWxhCitzZSBmYWl0IGF1dG9tYXRpcXVlbWVudCwgbWFpcyBjZSBuJ2VzdCBwYXMgbGEgY2FzIGRlIGNlcnRhaW5zIHZpZXV4IGNsaWVudHMgQk9PVFAuCisuVFAKKy5CIFwtTSwgLS1kaGNwLWJvb3Q9W25ldDo8aWRlbnRpZmlhbnQgZGUgcsOpc2VhdT4sXTxub20gZGUgZmljaGllcj4sWzxub20gZGUgc2VydmV1cj5bLDxhZHJlc3NlIGRlIHNlcnZldXI+XV0KK1Nww6ljaWZpZSBsZXMgb3B0aW9ucyBCT09UUCBkZXZhbnQgw6p0cmUgcmV0b3VybsOpZXMgcGFyIGxlIHNlcnZldXIgREhDUC4gTGUgbm9tIGRlCitzZXJ2ZXVyIGFpbnNpIHF1ZSBsJ2FkcmVzc2Ugc29udCBvcHRpb25uZWxzIDogcydpbHMgbmUgc29udCBwYXMgZm91cm5pcywgbGUgbm9tCitlc3QgbGFpc3PDqSB2aWRlIGV0IGwnYWRyZXNzZSBmb3VybmllIGVzdCBjZWxsZSBkZSBsYSBtYWNoaW5lIHN1ciBsYXF1ZWxsZQorcydleMOpY3V0ZSBEbnNtYXNxLiBTaSBEbnNtYXNxIGZvdW5pdCB1biBzZXJ2aWNlIFRGVFAgKHZvaXIKKy5CIC0tZW5hYmxlLXRmdHAKKyksIGFsb3JzIHNldWwgdW4gbm9tIGRlIGZpY2hpZXIgZXN0IHJlcXVpcyBpY2kgcG91ciBwZXJtZXR0cmUgdW4gZMOpbWFycmFnZSBwYXIKK2xlIHLDqXNlYXUuCitTaSBkJ8OpdmVudHVlbHMgaWRlbnRpZmlhbnRzIGRlIHLDqXNlYXUgc29udCBmb3VybmlzLCBpbHMgZG9pdmVudCBjb8OvbmNpZGVyIGF2ZWMKK2NldXggZHUgY2xpZW50IHBvdXIgcXVlIGNldCDDqWxlbWVudCBkZSBjb25maWd1cmF0aW9uIGx1aSBzb2l0IGVudm95w6kuIElsIGVzdCDDoAorbm90ZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgZGUgcsOpc2VhdSBkb2l2ZW50LcOqdHJlIHByw6lmaXjDqXMgcGFyICJuZXQ6Ii4KKy5UUAorLkIgLS1weGUtc2VydmljZT1bbmV0OjxpZGVudGlmaWFudCBkZSByw6lzZWF1PixdPENTQT4sPGVudHLDqWUgZGUgbWVudT4sPG5vbSBkZSBmaWNoaWVyPnw8dHlwZSBkZSBzZXJ2aWNlIGRlIGTDqW1hcnJhZ2U+Wyw8YWRyZXNzZSBkZSBzZXJ2ZXVyPl0KK0xhIHBsdXBhcnQgZGVzIFJPTVMgZGUgZMOpbWFycmFnZSBQWEUgbmUgcGVybWV0dGVudCBhdSBzeXN0w6htZSBQWEUgcXVlIGxhIHNpbXBsZQorb2J0ZW50aW9uIGQndW5lIGFkcmVzc2UgSVAsIGxlIHTDqWzDqWNoYXJnZW1lbnQgZHUgZmljaGllciBzcMOpY2lmacOpIGRhbnMKKy5CIGRoY3AtYm9vdAorZXQgc29uIGV4w6ljdXRpb24uIENlcGVuZGFudCwgbGUgc3lzdMOobWUgUFhFIGVzdCBjYXBhYmxlIGRlIGZvbmN0aW9ucyBiaWVuIHBsdXMKK2NvbXBsZXhlcyBwb3VyIHBldSBxdWUgbGUgc2VydmV1ciBESENQIHNvaXQgYWRhcHTDqS4KKworQ2VjaSBzcMOpY2lmaWUgbCdvcHRpb24gZGUgZMOpbWFycmFnZSBxdWkgYXBwYXJhaXRyYSBkYW5zIHVuIG1lbnUgZGUgZMOpbWFycmFnZQorUFhFLiA8Q1NBPiBlc3QgbGUgdHlwZSBkdSBzeXN0w6htZSBjbGllbnQuIFNldWxzIGRlcyB0eXBlcyBkZSBzZXJ2aWNlcyB2YWxpZGVzCithcHBhcmFpdHJvbnQgZGFucyB1biBtZW51LiBMZXMgdHlwZXMgY29ubnVzIHNvbnQgeDg2UEMsIFBDOTgsIElBNjRfRUZJLCBBbHBoYSwKK0FyY194ODYsIEludGVsX0xlYW5fQ2xpZW50LCBJQTMyX0VGSSwgQkNfRUZJLCBYc2NhbGVfRUZJIGV0IFg4Ni02NF9FRkk7CitEJ2F1dHJlcyB0eXBlcyBwZXV2ZW50LcOqdHJlIHNww6ljaWZpw6lzIHNvdXMgbGEgZm9ybWUgZCd1bmUgdmFsZXVyIGVudGnDqHJlLiBMZQorcGFyYW3DqHRyZSBhcHLDqHMgbGUgdGV4dGUgY29ycmVzcG9uZGFudCDDoCBsJ2VudHLDqWUgZGFucyBsZSBtZW51IHBldXQgw6p0cmUgdW4gbm9tCitkZSBmaWNoaWVyLCBhdXF1ZWwgY2FzIERuc21hc3EgYWdpdCBjb21tZSB1biBzZXJ2ZXVyIGRlIGTDqW1hcnJhZ2UgZXQgaW5kaXF1ZSBhdQorY2xpZW50IFBYRSBxdSdpbCBmYXV0IHTDqWzDqWNoYXJnZXIgY2UgZmljaGllciB2aWEgVEZUUCwgc29pdCBkZXB1aXMgY2Ugc2VydmV1cgorKGwnb3B0aW9uCisuQiBlbmFibGUtdGZ0cCAKK2RvaXQgw6p0cmUgc3DDqWNpZmnDqWUgcG91ciBxdWUgY2VsYSBtYXJjaGUpLCBzb2l0IGRlcHVpcyB1biBhdXRyZSBzZXJ2ZXVyIFRGVFAKK3NpIHVuZSBhZHJlc3NlIGRlIHNlcnZldXIgZXN0IGZvdXJuaWUuCitWZXVpbGxleiBub3RlciBxdWUgbGUgc3VmZml4ZSBkZSAiY291Y2hlIiAoZW4gcHJpbmNpcGUgIi4wIikgZXN0IGZvdXJuaSBwYXIgUFhFCitldCBuZSBkb2l0IHBhcyDDqnRyZSByYWpvdXTDqSBhdSBub20gZGUgZmljaGllci4gU2kgdW5lIHZhbGV1ciBudW3DqXJpcXVlIGVudGnDqHJlCitlc3QgZm91cm5pciBwb3VyIGxlIHR5cGUgZGUgZMOpbWFycmFnZSwgZW4gcmVtcGxhY2VtZW50IGR1IG5vbSBkZSBmaWNoaWVyLCBsZQorY2xpZW50IFBYRSBkZXZyYSBjaGVyY2hlciB1biBzZXJ2aWNlIGRlIGTDqW1hcnJhZ2UgZGUgY2UgdHlwZSBzdXIgbGUgcsOpc2VhdS4KK0NldHRlIHJlY2hlcmNoZSBwZXV0IMOqdHJlIGZhaXRlIHZpYSBtdWx0aWNhc3Qgb3UgYnJvYWRjYXN0LCBvdSBkaXJlY3RlbWVudAorYXVwcsOocyBkJ3VuIHNlcnZldXIgc2kgc29uIGFkcmVzc2UgSVAgZXN0IGZvdXJuaWUgZGFucyBsJ29wdGlvbi4gVW4gc2VydmljZSBkZQorZMOpbWFycmFnZSBkZSB0eXBlIDAgZXN0IHNww6ljaWFsIGV0IHByb3ZvcXVlcmEgdW5lIGludGVycnVwdGlvbiBkdSBkw6ltYXJyYWdlIHBhcgorbGUgcsOpc2VhdSBhaW5zaSBxdWUgbGEgcG91cnN1aXRlIGR1IGTDqW1hcnJhZ2Ugc3VyIHVuIG3DqWRpYSBsb2NhbC4KKy5UUAorLkIgLS1weGUtcHJvbXB0PVtuZXQ6PGlkZW50aWZpYW50IGRlIHLDqXNlYXU+LF08aW52aXRlPlssPGTDqWxhaT5dCitDZXR0ZSBvcHRpb24gcGVybWV0IGQnYWZmaWNoZXIgdW5lIGludml0ZSDDoCBsYSBzdWl0ZSBkdSBkw6ltYXJyYWdlIFBYRS4gU2kgdW4KK2TDqWxhaSBlc3QgZm91cm5pLCBhbG9ycyBsYSBwcmVtacOocmUgZW50csOpZSBkdSBtZW51IGRlIGTDqW1hcnJhZ2Ugc2VyYQorYXV0b21hdGlxdWVtZW50IGV4w6ljdXTDqWUgYXByw6hzIGNlIGTDqWxhaS4gU2kgbGUgZMOpbGFpIHZhdXQgMCwgYWxvcnMgbGEgcHJlbWnDqHJlCitlbnRyw6llIGRpc3BvbmlibGUgc2VyYSBleMOpY3V0w6llIGltbcOpZGlhdGVtZW50LiBTaQorLkIgcHhlLXByb21wdAorZXN0IG9taXMsIGxlIHN5c3TDqG1lIGF0dGVuZHJhIHVuIGNob2l4IGRlIGwndXRpbGlzYXRldXIgcydpbCBleGlzdGUgcGx1c2lldXJzCitlbnRyw6llcyBkYW5zIGxlIG1lbnUsIG91IGTDqW1hcnJlcmEgaW1tw6lkaWF0ZW1lbnQgZGFucyBsZSBjYXMgb8O5IGlsIG4neSBhIHF1J3VuZQorc2V1bGUgZW50csOpZS4gVm9pcgorLkIgcHhlLXNlcnZpY2UgCitwb3VyIHBsdXMgZGUgZMOpdGFpbHMgc3VyIGxlcyBlbnRyw6llcyBkZSBtZW51LgorCitEbnNtYXNxIHBldXQgc2VydmlyIGRlICJwcm94eS1ESENQIiBQWEUsIGRhbnMgbGUgY2FzIG/DuSB1biBhdXRyZSBzZXJ2ZXVyIERIQ1AKK3N1ciBsZSByw6lzZWF1IGVzdCByZXNwb25zYWJsZSBkZSBsJ2FsbG9jYXRpb24gZGVzIGFkcmVzc2VzIElQLCBhdXF1ZWwgY2FzCitEbnNtYXNxIHNlIGNvbnRlbnRlIGRlIGZvdXJuaXIgbGVzIGluZm9ybWF0aW9ucyBkb25uw6llcyBkYW5zIGxlcyBvcHRpb25zCisuQiBweGUtcHJvbXB0CitldAorLkIgcHhlLXNlcnZpY2UKK3BvdXIgcGVybWV0dHJlIGxlIGTDqW1hcnJhZ2UgcGFyIGxlIHLDqXNlYXUuIENlIG1vZGUgZXN0IGFjdGl2w6kgZW4gdXRpbGlzYW50IGxlCittb3QtY2xlZgorLkIgcHJveHkKK2RhbnMKKy5CIGRoY3AtcmFuZ2UuCisuVFAKKy5CIFwtWCwgLS1kaGNwLWxlYXNlLW1heD08bm9tYnJlPgorTGltaXRlIERuc21hc3Egw6AgdW4gbWF4aW11bSBkZSA8bm9tYnJlPiBiYXV4IERIQ1AuIExlIGTDqWZhdXQgZXN0IGRlIDE1MC4gQ2V0dGUKK2xpbWl0ZSBwZXJtZXQgZCfDqXZpdGVyIGRlcyBhdHRhcXVlcyBkZSBkw6luaSBkZSBzZXJ2aWNlICgiRG9TIikgcGFyIGRlcyBow7R0ZXMKK2Nyw6lhbnQgZGVzIG1pbGxpZXJzIGRlIGJhdXggZXQgdXRpbGlzYW50IGJlYXVjb3VwIGRlIG3DqW1vaXJlIGRhbnMgbGUgcHJvY2Vzc3VzCitEbnNtYXNxLgorLlRQCisuQiBcLUssIC0tZGhjcC1hdXRob3JpdGF0aXZlCitDZXR0ZSBvcHRpb24gZG9pdCDDqnRyZSBkb25uw6llIGxvcnNxdWUgRG5zbWFzcSBlc3QgbGUgc2V1bCBzZXJ2ZXVyIERIQ1Agc3VyIGxlCityw6lzZWF1LiBDZWxhIGNoYW5nZSBsZSBjb21wb3J0ZW1lbnQgcGFyIGTDqWZhdXQgcXVpIGVzdCBjZWx1aSBkJ3VuIHN0cmljdCByZXNwZWN0CitkZXMgUkZDLCBhZmluIHF1ZSBsZXMgcmVxdcOqdGVzIERIQ1AgcG91ciBkZXMgYmF1eCBpbmNvbm51cyBwYXIgZGVzIGjDtHRlcworaW5jb25udXMgbmUgc29pZW50IHBhcyBpZ25vcsOpZXMuIENlbGEgcGVybWV0IMOgIGRlIG5vdXZlYXV4IGjDtHRlcyBkJ29idGVuaXIgZGVzCitiYXV4IHNhbnMgdGVuaXIgY29tcHRlIGRlIGZhc3RpZGlldXNlcyB0ZW1wb3Jpc2F0aW9ucyAoInRpbWVvdXQiKS4gQ2VsYSBwZXJtZXQKK8OpZ2FsZW1lbnQgw6AgRG5zbWFzcSBkZSByZWNvbnN0cnVpcmUgc2EgYmFzZSBkZSBkb25uw6llIGNvbnRlbmFudCBsZXMgYmF1eCBzYW5zCitxdWUgbGVzIGNsaWVudHMgbidhaWVudCBiZXNvaW4gZGUgcmVkZW1hbmRlciB1biBiYWlsLCBzaSBjZWxsZS1jaSBlc3QgcGVyZHVlLgorLlRQCisuQiAtLWRoY3AtYWx0ZXJuYXRlLXBvcnRbPTxwb3J0IHNlcnZldXI+Wyw8cG9ydCBjbGllbnQ+XV0KK0NoYW5nZSBsZXMgcG9ydHMgdXRpbGlzw6lzIHBhciBkw6lmYXV0IHBvdXIgbGUgREhDUC4gU2kgY2V0dGUgb3B0aW9uIGVzdCBkb25uw6llCit0b3V0ZSBzZXVsZSBzYW5zIGFyZ3VtZW50cywgYWxvcnMgY2hhbmdlIGxlcyBwb3J0cyB1dGlsaXPDqXMgcG91ciBsZSBESENQCitkZSA2NyBldCA2OCByZXNwZWN0aXZlbWVudCDDoCAxMDY3IGV0IDEwNjguIFNpIHVuIHNldWwgYXJndW1lbnQgZXN0IGRvbm7DqSwgY2UKK251bcOpcm8gZXN0IHV0aWxpc8OpIHBvdXIgbGUgcG9ydCBzZXJ2ZXVyIGV0IGNlIG51bcOpcm8gcGx1cyAxIGVzdCB1dGlsaXPDqSBwb3VyIGxlCitwb3J0IGNsaWVudC4gRW5maW4sIGVuIGZvdXJuaXNzYW50IGRldXggbnVtw6lyb3MgZGUgcG9ydHMsIGlsIGVzdCBwb3NzaWJsZSBkZQorc3DDqWNpZmllciBhcmJpdHJhaXJlbWVudCAyIHBvcnRzIMOgIGxhIGZvaXMgcG91ciBsZSBzZXJ2ZXVyIGV0IHBvdXIgbGUgY2xpZW50IERIQ1AuCisuVFAKKy5CIFwtMywgLS1ib290cC1keW5hbWljWz08aWRlbnRpZmlhbnQgZGUgcsOpc2VhdT5bLDxpZGVudGlmaWFudCBkZSByw6lzZWF1Pl1dCitQZXJtZXQgbCdhbGxvY2F0aW9uIGR5bmFtaXF1ZSBkJ2FkcmVzc2VzIElQIMOgIGRlcyBjbGllbnRzIEJPT1RQLiBVdGlsaXNlciBjZXR0ZQorb3B0aW9uIGF2ZWMgcHLDqWNhdXRpb24sIHVuZSBhZHJlc3NlIGFsbG91w6llIMOgIHVuIGNsaWVudCBCT09UUCDDqXRhbnQgcGVycMOpdHVlbGxlLAorZXQgZGUgZmFpdCBuJ2VzdCBwbHVzIGRpc3BvbmlibGVzIHBvdXIgZCdhdXRyZXMgaMO0dGVzLiBTaSBhdWN1biBhcmd1bWVudCBuJ2VzdAorZG9ubsOpLCBhbG9ycyBjZXR0ZSBvcHRpb24gcGVybWV0IHVuZSBhbGxvY2F0aW9uIGR5bmFtaXF1ZSBkYW5zIHRvdXMgbGVzIGNhcy4gU2kKK2RlcyBhcmd1bWVudHMgc29udCBzcMOpY2lmacOpcywgYWxvcnMgbCdhbGxvY2F0aW9uIG5lIHNlIGZhaXQgcXVlIGxvcnNxdWUgdG91cworbGVzIGlkZW50aWZpYW50cyBjb8OvbmNpZGVudC4gSWwgZXN0IHBvc3NpYmxlIGRlIHLDqXBldGVyIGNldHRlIG9wdGlvbiBhdmVjCitwbHVzaWV1cnMgamV1eCBkJ2FyZ3VtZW50cy4KKy5UUAorLkIgXC01LCAtLW5vLXBpbmcKK1BhciBkw6lmYXV0LCBsZSBzZXJ2ZXVyIERIQ1AgdGVudGUgZGUgcydhc3N1cmVyIHF1J3VuZSBhZHJlc3NlIG4nZXN0IHBhcyB1dGlsaXPDqWUKK2F2YW50IGRlIGwnYWxsb3VlciDDoCB1biBow7R0ZS4gQ2VsYSBlc3QgZmFpdCBlbiBlbnZveWFudCB1bmUgcmVxdcOqdGUgSUNNUCBkZSB0eXBlCisiZWNobyByZXF1ZXN0IiAoYXVzc2kgY29ubnVlIHNvdXMgbGUgbm9tIGRlICJwaW5nIikgw6AgbCdhZHJlc3NlIGVuIHF1ZXN0aW9uLiBTaQorbGUgc2VydmV1ciBvYnRpZW50IHVuZSByw6lwb25zZSwgYWxvcnMgbCdhZHJlc3NlIGRvaXQgZMOpasOgIMOqdHJlIHV0aWxpc8OpZSBldCB1bmUKK2F1dHJlIGVzdCBlc3NhecOpZS4gQ2V0dGUgb3B0aW9uIHBlcm1ldCBkZSBzdXBwcmltZXIgY2V0dGUgdsOpcmlmaWNhdGlvbi4gQQordXRpbGlzZXIgYXZlYyBwcsOpY2F1dGlvbi4KKy5UUAorLkIgLS1sb2ctZGhjcAorVHJhY2VzIGFkZGl0aW9ubmVsbGVzIHBvdXIgbGUgc2VydmljZSBESENQIDogZW5yZWdpc3RyZSB0b3V0ZXMgbGVzIG9wdGlvbnMKK2Vudm95w6llcyBhdXggY2xpZW50cyBESENQIGV0IGxlcyBpZGVudGlmaWFudHMgZGUgcsOpc2VhdXggdXRpbGlzw6lzIHBvdXIgbGEKK2TDqXRlcm1pbmF0aW9uIGRlIGNlbGxlcy1jaS4KKy5UUAorLkIgXC1sLCAtLWRoY3AtbGVhc2VmaWxlPTxjaGVtaW4gZGUgZmljaGllcj4KK1V0aWxpc2UgbGUgZmljaGllciBkb250IGxlIGNoZW1pbiBlc3QgZm91cm5pIHBvdXIgc3RvY2tlciBsZXMgaW5mb3JtYXRpb25zIGRlCitiYXV4IERIQ1AuCisuVFAgCisuQiBcLTYgLS1kaGNwLXNjcmlwdD08Y2hlbWluIGRlIGZpY2hpZXI+CitMb3JzcXUndW4gYmFpbCBESENQIGVzdCBjcsOpw6ksIG91IHF1J3VuIGFuY2llbiBlc3Qgc3VwcHJpbcOpLCBsZSBmaWNoaWVyIGRvbnQgbGUKK2NoZW1pbiAgZXN0IHNww6ljaWZpw6kgZXN0IGV4w6ljdXTDqS4gTGVzIGFyZ3VtZW50cyBmb3VybmlzIMOgIGNlbHVpLWNpIHNvbnQgc29pdAorImFkZCIgKCJham91dGVyIiksICJvbGQiICgiYW5jaWVuIikgb3UgImRlbCIgKCJzdXBwcmltZXIiKSwgc3VpdmkgZGUgbCdhZHJlc3NlCitNQUMgZGUgbCdow7R0ZSBwdWlzIGwnYWRyZXNzZSBJUCBldCBsZSBub20gZCdow7R0ZSBzaSBjZWx1aS1jaSBlc3QKK2Nvbm51LiJhZGQiIHNpZ25pZmllIHF1J3VuIGJhaWwgYSDDqXTDqSBjcsOpw6ksICJkZWwiIHNpZ25pZmllIHF1J2lsIGEgw6l0w6kgc3VwcHJpbcOpLAorIm9sZCIgbm90aWZpZSBxdWUgbGUgYmFpbCBleGlzdGFpdCBhdSBsYW5jZW1lbnQgZGUgRG5zbWFzcSwgb3UgdW4gY2hhbmdlbWVudAorZCdhZHJlc3NlIE1BQyBvdSBkZSBub20gZCdow7R0ZSBwb3VyIHVuIGJhaWwgZXhpc3RhbnQgKG91LCBkYW5zIGxlIGNhcyBvw7kKK2xlYXNlZmlsZS1ybyBlc3Qgc3DDqWNpZmnDqSwgdW4gY2hhbmdlbWVudCBkZSBkdXLDqWUgZGUgYmFpbCBvdSBkJ2lkZW50aWZpYW50CitkJ2jDtHRlKS4gU2kgbCdhZHJlc3NlIE1hYyBlc3QgZCd1biB0eXBlIGRlIHLDqXNlYXUgYXV0cmUgcXUnZXRoZXJuZXQsIGlsIGVzdAorbsOpY2Vzc2FpcmUgZGUgbGEgcHLDqWNlZGVyIGR1IHR5cGUgZGUgcsOpc2VhdSwgcGFyIGV4ZW1wbGUgIjA2LTAxOjIzOjQ1OjY3Ojg5OmFiIgorcG91ciBkdSB0b2tlbiByaW5nLiBMZSBwcm9jZXNzdXMgZXN0IGV4w6ljdXTDqSBlbiB0ZW1wcyBxdWUgc3VwZXItdXRpbGlzYXRldXIgCisoc2kgRG5zbWFzcSBhIMOpdMOpIGxhbmPDqSBlbiB0ZW1wcyBxdWUgInJvb3QiKSwgbcOqbWUgc2kgRG5zbWFzcSBlc3QgY29uZmlndXLDqSAKK3BvdXIgY2hhbmdlciBzb24gVUlEIHBvdXIgY2VsbGUgZCd1biB1dGlsaXNhdGV1ciBub24tcHJpdmlsw6lnacOpLgorTCdlbnZpcm9ubmVtZW50IGVzdCBow6lyaXTDqSBkZSBjZWx1aSBkZSBsJ2ludm9jYXRpb24gZHUgcHJvY2Vzc3VzIERuc21hc3EsIGV0CitzaSBsJ2jDtHRlIGZvdXJuaXQgdW4gaWRlbnRpZmlhbnQgZGUgY2xpZW50LCBjZWx1aS1jaSBlc3Qgc3RvY2vDqSBkYW5zIGxhCit2YXJpYWJsZSBkJ2Vudmlyb25uZW1lbnQgRE5TTUFTUV9DTElFTlRfSUQuIFNpIHVuIG5vbSBkZSBkb21haW5lIHBsZWluZW1lbnQKK3F1YWxpZmnDqSAoRlFETikgIGVzdCBjb25udSBwb3VyIGwnaMO0dGUsIGxhIHBhcnQgcmVsYXRpdmUgYXUgZG9tYWluZSBlc3Qgc3RvY2vDqWUKK2RhbnMgRE5TTUFTUV9ET01BSU4uIFNpIGxlIGNsaWVudCBmb3Vybml0IHVuZSBpbmZvcm1hdGlvbiBkZSBjbGFzc2UgZGUgdmVuZGV1ciwKK2RlIGNsYXNzZSBkJ3V0aWxpc2F0ZXVyIG91IHVuIG5vbSBkJ2jDtHRlLCBjZWxsZXMtY2kgc29udCBwb3NpdGlvbm7DqWVzIGRhbnMgbGVzCit2YXJpYWJsZXMgRE5TTUFTUV9WRU5ET1JfQ0xBU1MgZXQgRE5TTUFTUV9VU0VSX0NMQVNTMCDDoCBETlNNQVNRX1VTRVJfQ0xBU1NuCitldCBETlNNQVNRX1NVUFBMSUVEX0hPU1ROQU1FIHJlc3BlY3RpdmVtZW50LCBtYWlzIHNldWxlbWVudCBwb3VyIGxlcyBhY3Rpb25zCisiYWRkIiBldCAib2xkIiBsb3JzcXUndW4gaMO0dGUgcmVwcmVuZCB1biBiYWlsIGV4aXN0YW50LCBjZXMgdmFyaWFibGVzIG4nw6l0YW50CitwYXMgc3RvY2vDqWVzIGRhbnMgbGEgYmFzZSBkZSBiYXV4IGRlIERuc21hc3EuIFNpIERuc21hc3EgYSDDqXTDqSBjb21waWzDqSBhdmVjCitsJ29wdGlvbiBIQVZFX0JST0tFTl9SVEMgKCJob3Jsb2dlIFJUQyBkw6lmZWN0dWV1c2UiKSwgYWxvcnMgbGEgZHVyw6llIGR1IGJhaWwKKyhlbiBzZWNvbmRlcykgZXN0IHN0b2Nrw6llIGRhbnMgbGEgdmFyaWFibGUgRE5TTUFTUV9MRUFTRV9MRU5HVEgsIHNpbm9uIGxhIGRhdGUKK2QnZXhwaXJhdGlvbiBkdSBiYWlsIGVzdCB0b3Vqb3VycyBzdG9ja8OpIGRhbnMgbGEgdmFyaWFibGUgZCdlbnZpcm9ubmVtZW50CitETlNNQVNRX0xFQVNFX0VYUElSRVMuIExlIG5vbWJyZSBkZSBzZWNvbmRlcyBhdmFudCBleHBpcmF0aW9uIGVzdCB0b3Vqb3Vycworc3RvY2vDqSBkYW5zIEROU01BU1FfVElNRV9SRU1BSU5JTkcuIFNpIHVuIGJhaWwgw6l0YWl0IGFzc29jacOpIMOgIHVuIG5vbSBkJ2jDtHRlIGV0CitxdWUgY2VsdWktY2kgZXN0IHN1cHByaW3DqSwgdW4gw6l2w6puZW1lbnQgZGUgdHlwZSAib2xkIiBlc3QgZ8OpbsOpcsOpIGF2ZWMgbGUKK25vdXZlYXUgc3RhdHV0IGR1IGJhaWwsIGMtw6AtZCBzYW5zIG5vbSBkJ2jDtHRlLCBldCBsZSBub20gaW5pdGlhbCBlc3QgZm91cm5pCitkYW5zIGxhIHZhcmlhYmxlIGQnZW52aXJvbm5lbWVudCBETlNNQVNRX09MRF9IT1NUTkFNRS4gTGEgdmFyaWFibGUKK0ROU01BU1FfSU5URVJGQUNFIGNvbnRpZW50IGxlIG5vbSBkZSBsJ2ludGVyZmFjZSBzdXIgbGFxdWVsbGUgbGEgcmVxdcOqdGUgZXN0CithcnJpdsOpZTsgY2VjaSBuJ2VzdCBwYXMgcmVuc2VpZ27DqSBkYW5zIGxlIGNhcyBkZXMgYWN0aW9ucyAib2xkIiBheWFudCBsaWV1CithcHLDqHMgdW4gcmVkw6ltYXJyYWdlIGRlIGRuc21hc3EuIExhIHZhcmlhYmxlIEROU01BU1FfUkVMQVlfQUREUkVTUyBlc3QKK3JlbnNlaWduw6llIHNpIGxlIGNsaWVudCBhIHV0aWxpc8OpIHVuIHJlbGFpIERIQ1AgcG91ciBjb250YWN0ZXIgRG5zbWFzcSwgc2kKK2wnYWRyZXNzZSBJUCBkdSByZWxhaSBlc3QgY29ubnVlLgorVG91cyBsZXMgZGVzY3JpcHRldXJzIGRlIGZpY2hpZXJzIHNvbnQgZmVybcOpcywgc2F1ZiBzdGRpbiwgc3Rkb3V0IGV0IHN0ZGVyciBxdWkKK3NvbnQgb3V2ZXJ0cyBzdXIgL2Rldi9udWxsIChzYXVmIGVuIG1vZGUgZMOpdmVybWluYWdlKS4KK0xlIHNjcmlwdCBuJ2VzdCBwYXMgbGFuY8OpIGRlIG1hbmnDqHJlIGNvbmN1cnJlbnRlIDogc2kgdW4gYXV0cmUgY2hhbmdlbWVudCBkZQorYmFpbCBpbnRlcnZpZW50LCBsZSBzY3JpcHQgbmUgc2VyYSByZWxhbmPDqSBxdWUgbG9yc3F1ZSBsJ2V4w6ljdXRpb24gYWN0dWVsbGUgc2VyYQordGVybWluw6llLgorQXUgZMOpbWFycmFnZSBkZSBEbnNtYXNxLCBsZSBzY3JpcHQgc2VyYSBpbnZvcXXDqSBwb3VyIGNoYWN1biBkZXMgYmF1eCBleGlzdGFudHMKK2RhbnMgbGUgZmljaGllciBkZXMgYmF1eC4gTGUgc2NyaXB0IHNlcmEgbGFuY8OpIGF2ZWMgbCdhY3Rpb24gImRlbCIgcG91ciBsZXMgYmF1eAorZXhwaXLDqXMsIGV0ICJvbGQiIHBvdXIgbGVzIGF1dHJlcy4gPGNoZW1pbiBkZSBmaWNoaWVyPiBkb2l0IMOqdHJlIHVuIGNoZW1pbgorYWJzb2x1IChjJ2VzdC3DoC1kaXJlIHBhcnRhbnQgZGUgbGEgcmFjaW5lICIvIiksIGF1Y3VuZSByZWNoZXJjaGUgbidhdXJhIGxpZXUKK2RhbnMgbGVzIHLDqXBlcnRvaXJlcyBkZSBsYSB2YXJpYWJsZSBkJ2Vudmlyb25uZW1lbnQgUEFUSC4gTG9yc3F1ZSBEbnNtYXNxIHJlw6dvaXQKK3VuIHNpZ25hbCBIVVAsIGxlIHNjcmlwdCBzZXJhIGludm9xdcOpIGF2ZWMgdW5lIGFjdGlvbiAib2xkIiBwb3VyIHRvdXMgbGVzIGJhdXgKK2V4aXN0YW50cy4KKy5UUCAKKy5CIC0tZGhjcC1zY3JpcHR1c2VyCitTcMOpY2lmaWUgbCd1dGlsaXNhdGV1ciBzb3VzIGxlcXVlbCBsZSBzY3JpcHQgbGVhc2UtY2hhbmdlIGRvaXQgw6p0cmUgZXjDqWN1dMOpLiBMYQordmFsZXVyIHBhciBkw6lmYXV0IGNvcnJlc3BvbmQgw6AgbCd1dGlsaXNhdGV1ciByb290IG1haXMgcGV1dC3DqnRyZSBjaGFuZ8OpZSBwYXIgbGUKK2JpYWlzIGRlIGNldHRlIG9wdGlvbi4KKy5UUAorLkIgXC05LCAtLWxlYXNlZmlsZS1ybworU3VwcHJpbWVyIGNvbXBsw6h0ZW1lbnQgbCd1c2FnZSBkdSBmaWNoaWVyIHNlcnZhbnQgZGUgYmFzZSBkZSBkb25uw6llIHBvdXIgbGVzCitiYXV4IERIQ1AuIExlIGZpY2hpZXIgbmUgc2VyYSBuaSBjcsOpw6ksIG5pIGx1LCBuaSDDqWNyaXQuIENoYW5nZSBsYSBmYcOnb24gZG9udCBsZQorc2NyaXB0IGRlIGNoYW5nZW1lbnQgZCfDqXRhdCBkZSBiYWlsIGVzdCBsYW5jw6kgKHNpIGNlbHVpLWNpIGVzdCBmb3VybmkgcGFyIGxlCitiaWFpcyBkZSBsJ29wdGlvbgorLkIgLS1kaGNwLXNjcmlwdAorKSwgZGUgc29ydGUgcXVlIGxhIGJhc2UgZGUgZG9ubsOpZXMgZGUgYmF1eCBwdWlzc2UKK8OqdHJlIGNvbXBsw6h0ZW1lbnQgZ8OpcsOpZSBwYXIgbGUgc2NyaXB0IHN1ciB1biBzdG9ja2FnZSBleHRlcm5lLiBFbiBhZGRpdGlvbiBhdXgKK2FjdGlvbnMgZMOpY3JpdGVzIGRhbnMgCisuQiAgLS1kaGNwLXNjcmlwdCwKK2xlIHNjcmlwdCBkZSBjaGFuZ2VtZW50IGQnw6l0YXQgZGUgYmFpbCBlc3QgYXBwZWxsw6kgdW5lIGZvaXMsIGF1IGxhbmNlbWVudCBkZQorRG5zbWFzcSwgYXZlYyBwb3VyIHNldWwgYXJndW1lbnQgImluaXQiLiBMb3JzcXUnYXBwZWxsw6kgZGUgbGEgc29ydGUsIGxlIHNjcmlwdAorZG9pdCBmb3VybmlyIGwnw6l0YXQgZGUgbGEgYmFzZSBkZSBiYXV4LCBkYW5zIGxlIGZvcm1hdCBkZSBmaWNoaWVyIGRlIGJhdXggZGUKK0Ruc21hc3EsIHN1ciBzYSBzb3J0aWUgc3RhbmRhcmQgKHN0ZG91dCkgZXQgcmV0b3VybmVyIHVuIGNvZGUgZGUgcmV0b3VyIGRlIDAuCitQb3NpdGlvbm5lciBjZXR0ZSBvcHRpb24gcHJvdm9xdWUgw6lnYWxlbWVudCB1bmUgaW52b2NhdGlvbiBkdSBzY3JpcHQgZGUKK2NoYW5nZW1lbnQgZCfDqXRhdCBkZSBiYWlsIMOgIGNoYXF1ZSBjaGFuZ2VtZW50IGRlIGwnaWRlbnRpZmlhbnQgZGUgY2xpZW50LCBkZQorbG9uZ3VldXIgZGUgYmFpbCBvdSBkZSBkYXRlIGQnZXhwaXJhdGlvbi4KKy5UUAorLkIgLS1icmlkZ2UtaW50ZXJmYWNlPTxpbnRlcmZhY2U+LDxhbGlhcz5bLDxhbGlhcz5dCitUcmFpdGVyIGxlcyByZXF1w6p0ZXMgREhDUCBhcnJpdmFudCBzdXIgbidpbXBvcnRlIGxhcXVlbGxlIGRlcyBpbnRlcmZhY2VzIDxhbGlhcz4KK2NvbW1lIHNpIGVsbGVzIGFycml2YWllbnQgZGUgbCdpbnRlcmZhY2UgPGludGVyZmFjZT4uIENldHRlIG9wdGlvbiBlc3QKK27DqWNlc3NhaXJlIGxvcnMgZGUgbCd1dGlsaXNhdGlvbiBkZSBwb250IGV0aGVybmV0ICJhbmNpZW4gbW9kZSIgc3VyIHBsYXRlLWZvcm1lCitCU0QsIHB1aXNxdWUgZGFucyBjZSBjYXMgbGVzIHBhcXVldHMgYXJyaXZlbnQgc3VyIGRlcyBpbnRlcmZhY2VzICJ0YXAiIG4nb250CitwYXMgZCdhZHJlc3NlIElQLgorLlRQCisuQiBcLXMsIC0tZG9tYWluPTxkb21haW5lPlssPGdhbW1lIGQnYWRyZXNzZXM+XQorU3DDqWNpZmllIGxlIGRvbWFpbmUgZHUgc2VydmV1ciBESENQLiBMZSBkb21haW5lIHBldXQgw6p0cmUgZG9ubsOpIGRlIG1hbmnDqHJlCitpbmNvbmRpdGlvbm5lbGxlIChzYW5zIHNww6ljaWZpZXIgZGUgZ2FtbWUgZCdhZHJlc3NlcyBJUCkgb3UgcG91ciBkZXMgZ2FtbWVzCitkJ2FkcmVzc2VzIElQIGxpbWl0w6llcy4gQ2VsYSBhIGRldXggZWZmZXRzOyB0b3V0IGQnYWJvcmQsIGxlCitzZXJ2ZXVyIERIQ1AgcmV0b3VybmUgbGUgZG9tYWluZSDDoCB0b3VzIGxlcyBow7R0ZXMgbGUgZGVtYW5kYW50LCBkZXV4acOobWVtZW50LAorY2VsYSBzcMOpY2lmaWUgbGUgZG9tYWluZSB2YWxpZGUgcG91ciBsZXMgaMO0dGVzIERIQ1AgY29uZmlndXLDqXMuIExlIGJ1dCBkZSBjZWxhCitlc3QgZGUgY29udHJhaW5kcmUgbGVzIG5vbXMgZCdow7R0ZSBhZmluIHF1J2F1Y3VuIGjDtHRlIHN1ciBsZSBMQU4gbmUgcHVpc3NlCitmb3VybmlyIHZpYSBESENQIHVuIG5vbSB0ZWwgcXVlIHBhciBleGVtcGxlICJtaWNyb3NvZnQuY29tIiBldCBjYXB0dXJlciBkdQordHJhZmljIGRlIG1hbmnDqHJlIGlsbMOpZ2l0aW1lLiBTaSBhdWN1biBub20gZGUgZG9tYWluZSBuJ2VzdCBzcMOpY2lmacOpLCBhbG9ycworbGVzIG5vbXMgZCdow7R0ZXMgYXZlYyB1biBub20gZGUgZG9tYWluZSAoYy3DoC1kIHVuIHBvaW50IGRhbnMgbGUgbm9tKSBzZXJvbnQKK2ludGVyZGl0cyBldCBlbnJlZ2lzdHLDqXMgZGFucyBsZSBqb3VybmFsIChsb2dzKS4gU2kgdW4gc3VmZml4ZSBlc3QgZm91cm5pLCBhbG9ycworbGVzIG5vbXMgZCdow7R0ZXMgcG9zc8OpZGFudCB1biBkb21haW5lIHNvbnQgYXV0b3Jpc8OpcywgcG91ciBwZXUgcXVlIGxlIG5vbSBkZQorZG9tYWluZSBjb8OvbmNpZGUgYXZlYyBsZSBub20gZm91cm5pLiBEZSBwbHVzLCBzaSB1biBzdWZmaXhlIGVzdCBmb3VybmksIGFsb3JzCitsZXMgbm9tcyBkJ2jDtHRlcyBuZSBwb3Nzw6lkYW50IHBhcyBkZSBub20gZGUgZG9tYWluIHNlIHZvaWVudCByYWpvdXRlciBsZQorc3VmZml4ZSBmb3VybmkgZGFucyBsJ29wdGlvbgorLkIgLS1kb21haW4uCitBaW5zaSwgc3VyIG1vbiByw6lzZWF1LCBqZSBwZXV4IGNvbmZpZ3VyZXIKKy5CIC0tZG9tYWluPXRoZWtlbGxleXMub3JnLnVrCitldCBhdm9pciB1bmUgbWFjaGluZSBkb250IGxlIG5vbSBESENQIHNlcmFpdCAibGFwdG9wIi4gTCdhZHJlc3NlIElQIGRlIGNldHRlCittYWNoaW5lIHNlcmEgZGlzcG9uaWJsZSDDoCBsYSBmb2lzIHBvdXIgImxhcHRvcCIgZXQgImxhcHRvcC50aGVrZWxsZXlzLm9yZy51ayIuCitTaSBsYSB2YWxldXIgZm91cm5pZSBwb3VyIDxkb21haW5lPiBlc3QgIiMiLCBhbG9ycyBsZSBub20gZGUgZG9tYWluZSBlc3QKK3Bvc2l0aW9ubsOpIMOgIGxhIHByZW1pw6hyZSB2YWxldXIgZGUgbGEgZGlyZWN0aXZlICJzZWFyY2giIGR1IGZpY2hpZXIKKy9ldGMvcmVzb2x2LmNvbmYgKG91IMOpcXVpdmFsZW50KS4gTGEgZ2FtbWUgZCdhZHJlc3NlcyBwZXV0IMOqdHJlIGRlIGxhIGZvcm1lCis8YWRyZXNzZSBpcD4sPGFkcmVzc2UgaXA+IG91IDxhZHJlc3NlIGlwPi88bWFzcXVlIGRlIHLDqXNlYXU+IHZvaXJlIHVuZSBzaW1wbGUKKzxhZHJlc3NlIGlwPi4gVm9pcgorLkIgLS1kaGNwLWZxZG4KK3F1aSBwZXV0IGNoYW5nZXIgbGUgY29tcG9ydGVtZW50IGRlIGRuc21hc3EgcmVsYXRpZiBhdXggZG9tYWluZXMuCisuVFAKKy5CIC0tZGhjcC1mcWRuCitEYW5zIGxlIG1vZGUgcGFyIGTDqWZhdXQsIGRuc21hc3EgaW5zw6hyZSBsZXMgbm9tcyBub24tcXVhbGlmacOpcyBkZXMgY2xpZW50cworREhDUCBkYW5zIGxlIEROUy4gUG91ciBjZXR0ZSByYWlzb24sIGxlcyBub21zIGRvaXZlbnQgw6p0cmUgdW5pcXVlcywgbcOqbWUgc2kKK2RldXggY2xpZW50cyBheWFudCBsZSBtw6ptZSBub20gc29udCBkYW5zIGRldXggZG9tYWluZXMgZGlmZsOpcmVudHMuIFNpIHVuCitkZXV4acOobWUgY2xpZW50IERIQ1AgYXBwYXJhw650IGF5YW50IGxlIG3Dqm1lIG5vbSBxdSd1biBjbGllbnQgZMOpasOgIGV4aXN0YW50LAorY2Ugbm9tIGVzdCB0cmFuc2bDqXLDqSBhdSBub3V2ZWF1IGNsaWVudC4gU2kKKy5CIC0tZGhjcC1mcWRuCitlc3Qgc3DDqWNpZmnDqSwgY2UgY29tcG9ydGVtZW50IGNoYW5nZSA6IGxlcyBub21zIG5vbiBxdWFsaWZpw6lzIG5lIHNvbnQgcGx1cworcmFqb3V0w6lzIGRhbnMgbGUgRE5TLCBzZXVscyBsZXMgbm9tcyBxdWFsaWZpw6lzIGxlIHNvbnQuIERldXggY2xpZW50cyBESENQCithdmVjIGxlIG3Dqm1lIG5vbSBwZXV2ZW50IHRvdXMgbGVzIGRldXggZ2FyZGVyIGxlIG5vbSwgcG91ciBwZXUgcXVlIGxhIHBhcnRpZQorcmVsYXRpdmUgYXUgZG9tYWluZSBzb2l0IGRpZmbDqXJlbnRlIChjLcOgLWQgcXVlIGxlcyBub21zIHBsZWluZW1lbnRzIHF1YWxpZmnDqXMKK2RpZmbDqHJlbnQpLiBQb3VyIGQnYXNzdXJlciBxdWUgdG91cyBsZXMgbm9tcyBvbnQgdW5lIHBhcnRpZSBkb21haW5lLCBpbCBkb2l0LXkKK2F2b2lyIGF1IG1vaW5zIHVuCisuQiAtLWRvbWFpbgorc2FucyBnYW1tZSBkJ2FkcmVzc2VzIGRlIHNww6ljaWZpw6kgbG9yc3F1ZSBsJ29wdGlvbgorLkIgLS1kaGNwLWZxZG4gCitlc3QgY29uZmlndXLDqWUuCisuVFAKKy5CIC0tZW5hYmxlLXRmdHAKK0FjdGl2ZSBsYSBmb25jdGlvbiBzZXJ2ZXVyIFRGVFAuIENlbHVpLWNpIGVzdCBkZSBtYW5pw6hyZSBkw6lsaWLDqXLDqWUgbGltaXTDqSBhdXgKK2ZvbmN0aW9ucyBuw6ljZXNzYWlyZXMgYXUgZMOpbWFycmFnZSBwYXIgbGUgcsOpc2VhdSAoIm5ldC1ib290IikgZCd1biBjbGllbnQuIFNldWwKK3VuIGFjY8OocyBlbiBsZWN0dXJlIGVzdCBwb3NzaWJsZTsgbGVzIGV4dGVuc2lvbnMgdHNpemUgZXQgYmxrc2l6ZSBzb250IHN1cHBvcnTDqWVzCisodHNpemUgZXN0IHNldWxlbWVudCBzdXBwb3J0w6kgZW4gbW9kZSBvY3RldCkuCisuVFAKKy5CIC0tdGZ0cC1yb290PTxyw6lwZXJ0b2lyZT4KK0xlcyBmaWNoaWVycyDDoCBmb3VybmlyIGRhbnMgbGVzIHRyYW5zZmVydHMgVEZUUCBzZXJvbnQgY2hlcmNow6lzIGVuIHByZW5hbnQgbGUKK3LDqXBlcnRvaXJlIGZvdXJuaSBjb21tZSByYWNpbmUuIExvcnNxdWUgY2VsYSBlc3QgZm91cm5pLCBsZXMgY2hlbWlucyBURlRQCitpbmNsdWFudCAiLi4iIHNvbnQgcmVqZXTDqXMsIGFmaW4gZCfDqXZpdGVyIHF1ZSBsZXMgY2xpZW50cyBuZSBwdWlzc2VudCBzb3J0aXIgZGUKK2xhIHJhY2luZSBzcMOpY2lmacOpZS4gTGVzIGNoZW1pbnMgYWJzb2x1cyAoY29tbWVuw6dhbnQgcGFyICIvIikgc29udCBhdXRvcmlzw6lzLAorbWFpcyBpbHMgZG9pdmVudCDDqnRyZSDDoCBsYSByYWNpbmUgVEZUUCBmb3VybmllLgorLlRQCisuQiAtLXRmdHAtdW5pcXVlLXJvb3QKK0Fqb3V0ZXIgbCdhZHJlc3NlIElQIGR1IGNsaWVudCBURlRQIGVuIHRlbXBzIHF1J8OpbMOpbWVudCBkZSBjaGVtaW4sIMOgIGxhIHN1aXRlCitkZSBsYSByYWNpbmUgdGZ0cCAoYWRyZXNzZSBzb3VzIGZvcm1lIGRlIDQgY2hpZmZyZXMgc8OpcGFyw6lzIHBhciBkZXMgcG9pbnRzKS4KK1VuaXF1ZW1lbnQgdmFsYWJsZSBzaSB1bmUgcmFjaW5lIFRGVFAgZXN0IHNww6ljaWZpw6llIGV0IHNpIGxlIHLDqXBlcnRvaXJlCitjb3JyZXNwb25kIGV4aXN0ZS4gQWluc2ksIHNpIGxhIHZhbGV1ciBwb3VyIHRmdHAtcm9vdCBlc3QgIi90ZnRwIiBldCBxdWUgbGUKK2NsaWVudCBkJ2FkcmVzc2UgSVAgMS4yLjMuNCByZXF1aWVydCBsZSBmaWNoaWVyICJtb25maWNoaWVyIiwgYWxvcnMgbGUgY2hlbWluCitlZmZlY3RpdmUgcsOpc3VsdGFudCBzZXJhICIvdGZ0cC8xLjIuMy40L21vbmZpY2hpZXIiIHNpIC90ZnRwLzEuMi4zLjQgZXhpc3RlLCBvdQorIi90ZnRwL21vbmZpY2hpZXIiIGRhbnMgbGUgY2FzIGNvbnRyYWlyZS4KKy5UUAorLkIgLS10ZnRwLXNlY3VyZQorQWN0aXZlIGxlIG1vZGUgVEZUUCBzw6ljdXJpc8OpIDogc2FucyBjZWxhLCB0b3V0IGZpY2hpZXIgbGlzaWJsZQorcGFyIERuc21hc3EgZXN0IGRpc3BvbmlibGUgdmlhIFRGVFAgKGxlcyByw6hnbGVzIGRlIGNvbnRyw7RsZSBkJ2FjY8OocyB1bml4CitoYWJpdHVlbGxlcyBzJ2FwcGxpcXVlbnQpLiBMb3JzcXVlIGwnb3B0aW9uCisuQiAtLXRmdHAtc2VjdXJlCitlc3Qgc3DDqWNpZmnDqWUsIHNldWxzIGxlcyBmaWNoaWVycyBwb3Nzw6lkw6lzIHBhciBsJ3V0aWxpc2F0ZXVyIHNvdXMgbGVxdWVsIHRvdXJuZQorbGUgcHJvY2Vzc3VzIERuc21hc3Egc29udCBhY2Nlc3NpYmxlcy4gU2kgRG5zbWFzcSBlc3QgZXjDqWN1dMOpIGVuIHRlbXBzIHF1ZQorc3VwZXItdXRpbGlzYXRldXIgKCJyb290IiksIGRlcyByw6hnbGVzIGRpZmbDqXJlbnRlcyBzJ2FwcGxpcXVlbnQgOgorLkIgLS10ZnRwLXNlY3VyZQorbidhIGF1Y3VuIGVmZmV0LCBtYWlzIHNldWxzIGxlcyBmaWNoaWVycyBheWFudCB1biBkcm9pdCBkZSBsZWN0dXJlIHBvdXIgdG91dCBsZQorbW9uZGUgc29udCBhY2Nlc3NpYmxlcy4gSWwgbidlc3QgcGFzIHJlY29tbWFuZMOpIGQnZXjDqWN1dGVyIERuc21hc3Egc291cworbCd1dGlsaXNhdGV1ciAicm9vdCIgbG9yc3F1ZSBsZSBzZXJ2aWNlIFRGVFAgZXN0IGFjdGl2w6ksIGV0IGlsIGVzdCBmb3JtZWxsZW1lbnQKK2TDqWNvbnNlaWxsw6kgZGUgbGUgZmFpcmUgc2FucyBmb3VybmlyIGwnb3B0aW9uCisuQiAtLXRmdHAtcm9vdC4KK1NhbnMgY2VsYSwgZW4gZWZmZXQsIGwnYWNjw6hzIGRlIHRvdXMgbGVzIGZpY2hpZXJzIGR1IHNlcnZldXIgcG91ciBsZXF1ZWwgbGUKK2Ryb2l0IGRlIGxlY3R1cmUgcG91ciB0b3V0IGxlIG1vbmRlIGVzdCBwb3NpdGlvbm7DqSAoIndvcmxkLXJlYWRhYmxlIikgZGV2aWVudAorcG9zc2libGUgcGFyIG4naW1wb3J0ZSBxdWVsIGjDtHRlIHN1ciBsZSByw6lzZWF1LgorLlRQCisuQiAtLXRmdHAtbWF4PTxjb25uZXhpb25zPgorRMOpZmluaXQgbGUgbm9tYnJlIG1heGltdW0gZGUgY29ubmV4aW9ucyBURlRQIHNpbXVsdGFuw6llcyBhdXRvcmlzw6llcy4gTGEgdmFsZXVyCitwYXIgZMOpZmF1dCBlc3QgZGUgNTAuIExvcnNxdSd1biBncmFuZCBub21icmUgZGUgY29ubmV4aW9ucyBURlRQIGVzdCBzcMOpY2lmacOpLAoraWwgc2UgcGV1dCBxdWUgbGEgbGltaXRlIGRlIG5vbWJyZSBkZSBkZXNjcmlwdGV1cnMgZGUgZmljaGllcnMgcGFyIHByb2Nlc3N1cworc29pdCBhdHRlaW50ZS4gRG5zbWFzcSBuw6ljZXNzaXRlIHF1ZWxxdWVzIGRlc2NyaXB0ZXVycyBkZSBmaWNoaWVycywgYWluc2kgcXUndW4KK2Rlc2NyaXB0ZXVyIGRlIGZpY2hpZXIgcG91ciBjaGFxdWUgY29ubmV4aW9uIFRGVFAgc2ltdWx0YW7DqWUgZXQgcG91ciBjaGFjdW4gZGVzCitmaWNoaWVycyBkZXZhbnQgw6p0cmUgZm91cm5pcy4gRGUgZmFpdCwgc2VydmlyIGxlIG3Dqm1lIGZpY2hpZXIgw6AgbiBjbGllbnRzIG5lCituw6ljZXNzaXRlcmEgcXUnZW52aXJvbiBuICsgMTAgZGVzY3JpcHRldXJzIGRlIGZpY2hpZXJzLCBhbG9ycyBxdWUgZm91cm5pciBkZXMKK2ZpY2hpZXJzIHRvdXMgZGlmZsOpcmVudHMgw6AgbiBjbGllbnRzIHV0aWxpc2VyYSBlbnZpcm9uICgyKm4pICsgMTAgZGVzY3JpcHRldXJzLgorU2kgZWxsZSBlc3QgZG9ubsOpZSwgbCdvcHRpb24gCisuQiAtLXRmdHAtcG9ydC1yYW5nZQorcGV1dCBhZmZlY3RlciBsZSBub21icmUgbWF4aW11bSBkZSBjb25uZXhpb25zIGNvbmN1cnJlbnRlcy4KKy5UUAorLkIgLS10ZnRwLW5vLWJsb2Nrc2l6ZQorRW1ww6pjaGUgbGUgc2VydmV1ciBURlRQIGRlIG7DqWdvY2llciBsJ29wdGlvbiAiYmxvY2tzaXplIiAodGFpbGxlIGRlIGJsb2MpIGF2ZWMKK2xlcyBjbGllbnRzLiBDZXJ0YWlucyBjbGllbnRzIGJ1Z2fDqXMgc3DDqWNpZmllbnQgY2V0dGUgb3B0aW9uIG1haXMgc2UgY29tcG9ydGVudAorZW5zdWl0ZSBkZSBtYW5pw6hyZSBpbmNvcnJlY3RlIHNpIGNlbGxlLWNpIGVzdCBhY2NvcmTDqWUuCisuVFAKKy5CIC0tdGZ0cC1wb3J0LXJhbmdlPTxkw6lidXQ+LDxmaW4+CitVbiBzZXJ2ZXVyIFRGVFAgw6ljb3V0ZSBzdXIgbGUgcG9ydCBwcsOpZMOpZmluaSA2OSAoIndlbGwta25vd24gcG9ydCIpIHBvdXIKK2wnaW5pdGlhdGlvbiBkZSBsYSBjb25uZXhpb24sIG1haXMgdXRpbGlzZSDDqWdhbGVtZW50IHVuIHBvcnQgZHluYW1pcXVlbWVudAorYWxsb3XDqSBwb3VyIGNoYXF1ZSBjb25uZXhpb24uIE5vcm1hbGVtZW50LCBjZXMgcG9ydHMgc29udCBhbGxvdcOpcyBwYXIKK2xlIHN5c3TDqG1lIGQnZXhwbG9pdGF0aW9uLCBtYWlzIGNldHRlIG9wdGlvbiBwZXJtZXQgZGUgc3DDqWNpZmllciB1bmUgZ2FtbWUKK2RlIHBvcnRzIMOgIHV0aWxpc2VyIHBvdXIgbGVzIHRyYW5zZmVydHMgVEZUUC4gQ2VsYSBwZXV0LcOqdHJlIHV0aWxlIHNpCitURlRQIGRvaXQgdHJhdmVyc2VyIHVuIGRpc3Bvc2l0aWYgZ2FyZGUtYmFycmnDqHJlICgiZmlyZXdhbGwiKS4gTGEgdmFsZXVyCitkZSBkw6lidXQgcG91ciBsYSBwbGFnZSBkZSBwb3J0IG5lIHBldXQtw6p0cmUgaW5mw6lyaWV1cmUgw6AgMTAyNSBzYXVmIHNpCitkbnNtYXNxIHRvdXJuZSBlbiB0ZW1wcyBxdWUgc3VwZXItdXRpbGlzYXRldXIgKCJyb290IikuIExlIG5vbWJyZSBkZQorY29ubmV4aW9ucyBURlRQIGNvbmN1cnJlbnRlcyBlc3QgbGltaXTDqWUgcGFyIGxhIHRhaWxsZSBkZSBsYSBnYW1tZSBkZQorcG9ydHMgYWluc2kgc3DDqWNpZmnDqWUuCisuVFAKKy5CIC0tdGZ0cC1wb3J0LXJhbmdlPTxkw6lidXQ+LDxmaW4+CitVbiBzZXJ2ZXVyIFRGVFAgw6ljb3V0ZSBzdXIgdW4gbnVtw6lybyBkZSBwb3J0IGJpZW4gY29ubnUgKDY5KSBwb3VyIGwnaW5pdGlhdGlvbgorZGUgbGEgY29ubmV4aW9uLCBldCBhbGxvdWUgZHluYW1pcXVlbWVudCB1biBwb3J0IHBvdXIgY2hhcXVlIGNvbm5leGlvbi4gQ2VzCitudW3DqXJvcyBkZSBwb3J0cyBzb250IGVuIHByaW5jaXBlIGFsbG91w6lzIHBhciBsZSBzeXN0w6htZSBkJ2V4cGxvaXRhdGlvbiwgbWFpcworY2V0dGUgb3B0aW9uIHBlcm1ldCBkZSBzcMOpY2lmaWVyIHVuZSBnYW1tZSBkZSBwb3J0cyDDoCB1dGlsaXNlciBwb3VyIGxlcwordHJhbnNmZXJ0cyBURlRQLiBDZWxhIHBldXQtw6p0cmUgdXRpbGUgbG9yc3F1ZSBjZXV4LWNpIGRvaXZlbnQgdHJhdmVyc2VyIHVuCitkaXNwb3NpdGlmIGdhcmRlLWJhcnJpw6hyZSAoImZpcmV3YWxsIikuIExlIGTDqWJ1dCBkZSBsYSBwbGFnZSBuZSBwZXV0LcOqdHJlCitpbmbDqXJpZXVyIMOgIDEwMjQgw6AgbW9pbnMgcXVlIERuc21hc3EgbmUgZm9uY3Rpb25uZSBlbiB0ZW1wcyBxdWUKK3N1cGVyLXV0aWxpc2F0ZXVyICgicm9vdCIpLiBMZSBub21icmUgbWF4aW1hbCBkZSBjb25uZXhpb25zIFRGVFAgY29uY3VycmVudGVzCitlc3QgbGltaXTDqWUgcGFyIGxhIHRhaWxsZSBkZSBsYSBwbGFnZSBkZSBwb3J0cyBhaW5zaSBkw6lmaW5pZS4gCisuVFAKKy5CIFwtQywgLS1jb25mLWZpbGU9PGZpY2hpZXI+CitTcMOpY2lmaWUgdW4gZmljaGllciBkZSBjb25maWd1cmF0aW9uIGRpZmbDqXJlbnQuIEwnb3B0aW9uICJjb25mLWZpbGUiIGVzdAorw6lnYWxlbWVudCBhdXRvcmlzw6llIGRhbnMgZGVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24sIGNlIHF1aSBwZXJtZXQKK2wnaW5jbHVzaW9uIGRlIG11bHRpcGxlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLgorLlRQCisuQiBcLTcsIC0tY29uZi1kaXI9PHLDqXBlcnRvaXJlPlssPGV4dGVuc2lvbiBkZSBmaWNoaWVyPi4uLl0KK0xpcyB0b3VzIGxlcyBmaWNoaWVycyBkdSByw6lwZXJ0b2lyZSBzcMOpY2lmacOpIGV0IGxlcyB0cmFpdGUgY29tbWUgZGVzIGZpY2hpZXJzIGRlCitjb25maWd1cmF0aW9uLiBTaSBkZXMgZXh0ZW5zaW9ucyBzb250IGRvbm7DqWVzLCB0b3V0IGZpY2hpZXIgZmluaXNzYW50IHBhciBjZXMKK2V4dGVuc2lvbnMgc2Vyb250IGlnbm9yw6lzLiBUb3V0IGZpY2hpZXIgZG9udCBsZSBub20gc2UgdGVybWluZSBlbiB+IG91IGNvbW1lbmNlCitwYXIgLiwgYWluc2kgcXVlIGNldXggY29tbWVuw6dhbnQgb3Ugc2UgdGVybWluYW50IHBhciAjIHNlcm9udCBzeXN0w6ltYXRpcXVlbWVudAoraWdub3LDqXMuCitDZXR0ZSBvcHRpb24gcGV1dCDDqnRyZSBkb25uw6llIGVuIGxpZ25lIGRlIGNvbW1hbmRlIG91IGRhbnMgdW4gZmljaGllciBkZQorY29uZmlndXJhdGlvbi4KKy5TSCBGSUNISUVSIERFIENPTkZJR1VSQVRJT04KK0F1IGTDqW1hcnJhZ2UsIERuc21hc3EgbGlzCisuSSAvZXRjL2Ruc21hc3EuY29uZiwKK3NpIGNlIGZpY2hpZXIgZXhpc3RlLiAoU3VyIEZyZWVCU0QsIGNlIGZpY2hpZXIgZXN0CisuSSAvdXNyL2xvY2FsL2V0Yy9kbnNtYXNxLmNvbmYKKykgKHZvaXIgY2VwZW5kYW50IGxlcyBvcHRpb25zIAorLkIgXC1DCitldAorLkIgXC03CispLiBMZSBmb3JtYXQgZGUgY2UgZmljaGllciBjb25zaXN0ZSBlbiB1bmUgb3B0aW9uIHBhciBsaWduZSwgZXhhY3RlbWVudCBjb21tZQorbGVzIG9wdGlvbnMgbG9uZ3VlcyBkw6l0YWlsbMOpZXMgZGFucyBsYSBzZWN0aW9uIE9QVElPTlMsIG1haXMgc2FucyDDqnRyZSBwcsOpY8OpZMOpZXMKK3BhciAiLS0iLiBMZXMgbGlnbmVzIGNvbW1lbsOnYW50IHBhciAjIHNvbnQgZGVzIGNvbW1lbnRhaXJlcyBldCBzb250IGlnbm9yw6llcy4KK1BvdXIgbGVzIG9wdGlvbnMgcXVpIG5lIHBldXZlbnQtw6p0cmUgc3DDqWNpZmnDqWVzIHF1J3VuZSBzZXVsZSBmb2lzLCBjZWxsZSBkdQorZmljaGllciBkZSBjb25maWd1cmF0aW9uIHByZW5kcyBsZSBwYXMgc3VyIGNlbGxlIGZvdXJuaWUgZW4gbGlnbmUgZGUgY29tbWFuZGUuCitJbCBlc3QgcG9zc2libGUgZCd1dGlsaXNlciBkZXMgZ3VpbGxlbWV0cyBhZmluIGQnw6l2aXRlciBxdWUgbGVzICIsIiwiOiIsIi4iIGV0CisiIyIgbmUgc29pdCBpbnRlcnByw6p0w6lzLCBldCBpbCBlc3QgcG9zc2libGUgZCd1dGlsaXNlciBsZXMgc8OpcXVlbmNlcworZCfDqWNoYXBwZW1lbnQgc3VpdmFudGVzIDogXFxcXCBcXCIgXFx0IFxcZSBcXGIgXFxyIGV0IFxcbi4gRWxsZXMgY29ycmVzcG9uZGVudAorcmVzcGVjdGl2ZW1lbnQgw6AgbGEgYmFycmUgb2JsaXF1ZSBkZXNjZW5kYW50ZSAoImFudGktc2xhc2giKSwgZ3VpbGxlbWV0cyBkb3VibGVzLAordGFidWxhdGlvbiwgY2FyYWN0w6hyZSBkJ8OpY2hhcHBlbWVudCAoImVzY2FwZSIpLCBzdXBwcmVzc2lvbiAoImJhY2tzcGFjZSIpLCByZXRvdXIgKCJyZXR1cm4iKSBldAorbm91dmVsbGUgbGlnbmUgKCJuZXdsaW5lIikuCisuU0ggTk9URVMKK0EgbGEgcsOpY2VwdGlvbiBkJ3VuIHNpZ25hbCBTSUdIVVAsCisuQiBEbnNtYXNxCit2aWRlIHNvbiBjYWNoZSBldCByZWNoYXJnZSBsZXMgZmljaGllcnMKKy5JIC9ldGMvaG9zdHMKK2V0CisuSSAvZXRjL2V0aGVycyAKK2FpbnNpIHF1ZSB0b3V0IGF1dHJlIGZpY2hpZXIgc3DDqWNpZmnDqSBwYXIgbGVzIG9wdGlvbnMKKy5CIC0tZGhjcC1ob3N0c2ZpbGUKKywKKy5CIC0tZGhjcC1vcHRzZmlsZQorb3UKKy5CIC0tYWRkbi1ob3N0cy4KK0xlIHNjcmlwdCBkZSBjaGFuZ2VtZW50IGRlIGJhaWwgZXN0IGFwcGVsbMOpIHBvdXIgY2hhcXVlIGJhaWwgREhDUCBleGlzdGFudC4gU2kKK2wnb3B0aW9uCisuQiAtLW5vLXBvbGwKK2VzdCBwb3NpdGlvbm7DqWUsIGFsb3JzIGxlIGZpY2hpZXIKKy5JIC9ldGMvcmVzb2x2LmNvbmYKK2VzdCDDqWdhbGVtZW50IHJlY2hhcmfDqS4KK1NJR0hVUCBuZSBwcm92b3F1ZSBQQVMgZGUgcmVjaGFyZ2VtZW50IGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbi4KKy5QUAorQSBsYSByw6ljZXB0aW9uIGQndW4gc2lnbmFsIFNJR1VTUjEsCisuQiBEbnNtYXNxIAorw6ljcml0IGRlcyBzdGF0aXN0aXF1ZXMgZGFucyBsZXMgdHJhY2VzIHN5c3TDqG1lLiBMZXMgaW5mb3JtYXRpb25zIGZvdXJuaWVzIHNvbnQgOgorbGEgdGFpbGxlIGR1IGNhY2hlLCBsZSBub21icmUgZGUgbm9tcyBheWFudCDDqXTDqSBzdXBwcmltw6lzIGR1IGNhY2hlIGF2YW50CitleHBpcmF0aW9uIGFmaW4gZGUgZmFpcmUgZGUgbGEgcGxhY2UgcG91ciBsZXMgbm91dmVhdXggbm9tcywgYWluc2kgcXVlIGxlIG5vbWJyZQordG90YWwgZCdlbnRyw6llcyBheWFudCDDqXTDqSBpbnPDqXLDqWVzIGRhbnMgbGUgY2FjaGUuIFBvdXIgY2hhcXVlIHNlcnZldXIgYW1vbnQsIGlsIGZvdXJuaXQKK2xlIG5vbW5icmUgZGUgcmVxdcOqdGVzIHRyYW5zbWlzZXMgYWluc2kgcXVlIGxlIG5vbWJyZSBkZSByZXF1w6p0ZXMgYXlhbnQgcsOpc3VsdMOpIHBhciB1bmUKK2VycmV1ci4gTG9yc3F1ZSBEbnNtYXNxIGEgw6l0w6kgbGFuY8OpIHZpYQorLkIgLS1uby1kYWVtb24KK291IGxvcnNxdWUgbGEgdHJhw6dhYmlsaXTDqSBtYXhpbWFsZSBhIMOpdMOpIGFjdGl2w6llICgKKy5CIC1xCispLCBsYSB0b3RhbGl0w6kgZHUgY29udGVudSBkdQorY2FjaGUgZXN0IGRlIHN1cmNyb8OudCBmb3VybmllLgorLlBQIAorQSBsYSByw6ljZXB0aW9uIGQndW4gc2lnbmFsIFNJR1VTUjIgZXQgbG9yc3F1J2lsIGVucmVnaXN0cmUgZGlyZWN0ZW1lbnQgc2VzCit0cmFjZXMgZGFucyB1biBmaWNoaWVyICh2b2lyCisuQiAtLWxvZy1mYWNpbGl0eQorKSwgYWxvcnMgCisuQiBEbnNtYXNxCitmZXJtZSBldCByZS1yb3V2cmUgbGUgZmljaGllciBkZSB0cmFjZXMuIElsIGZhdXQgbm90ZXIgcXVlIHBlbmRhbnQgY2V0dGUKK29ww6lyYXRpb24gRG5zbWFzcSBuZSBzJ2V4w6ljdXRlIHBhcyBlbiB0ZW1wcyBxdWUgInJvb3QiLiBMb3JzcXUnaWwgY3LDqcOpIHVuCitmaWNoaWVyIGRlIHRyYWNlcyBwb3VyIGxhIHByZW1pw6hyZSBmb2lzLCBEbnNtYXNxIGNoYW5nZSBsZSBwcm9wcmnDqXRhaXJlIGR1CitmaWNoaWVyIGFmaW4gZGUgbGUgZmFpcmUgYXBwYXJ0ZW5pciDDoCBsJ3V0aWxpc2F0ZXVyIG5vbiAicm9vdCIgc291cyBsZXF1ZWwKK0Ruc21hc3EgcydleMOpY3V0ZS4gTGUgbG9naWNpZWwgZGUgcm90YXRpb24gZGUgZmljaGllcnMgZGUgdHJhY2UgbG9ncm90YXRlIGRvaXQKK8OqdHJlIGNvbmZpZ3Vyw6kgcG91ciBjcsOpZXIgdW4gbm91dmVhdSBmaWNoaWVyIGF2ZWMgdW4gcHJvcHJpw6l0YWlyZSBpZGVudGlxdWUgYXUKK2ZpY2hpZXIgZXhpc3RhbnQgYXZhbnQgZCdlbnZveWVyIGxlIHNpZ25hbCBTSUdVU1IyLiBTaSB1bmUgcmVxdcOqdGUgRE5TIFRDUCBlc3QKK2VuIGNvdXJzLCBsJ2FuY2llbiBmaWNoaWVyIGRlIHRyYWNlcyByZXN0ZSBvdXZlcnQgZGFucyBsZSBwcm9jZXNzdXMgZmlscyBxdWkKK3RyYWl0ZSBsYSByZXF1w6p0ZSBUQ1AgZXQgaWwgcGV1dCB5IMOqdHJlIMOpY3JpdC4gSWwgZXhpc3RlIGNlcGVuZGFudCB1bmUgbGltaXRlCitkZSAxNTAgc2Vjb25kZXMgYXByw6hzIGxhcXVlbGxlIHRvdXMgbGVzIHByb2Nlc3N1cyB0cmFpdGFudCBkZXMgcmVxdcOqdGVzIFRDUAorZXhwaXJlbnQgOiBwb3VyIGNldHRlIHJhaXNvbiwgaWwgZXN0IHByw6lmw6lyYWJsZSBkZSBuZSBwYXMgY29uZmlndXJlciBsYQorY29tcHJlc3Npb24gZGVzIGZpY2hpZXJzIGRlIHRyYWNlcyB2ZW5hbnQganVzdGUgZGUgZmFpcmUgbCdvYmpldCBkJ3VuZSByb3RhdGlvbi4KK0RhbnMgbGUgY2FzIGRlIGwndXRpbGlzYXRpb24gZHUgbG9naWNpZWwgbG9ncm90YXRlLCBsZXMgb3B0aW9ucyByZXF1aXNlcyBzb250CisuQiBjcmVhdGUgCitldAorLkIgZGVsYXljb21wcmVzcy4KKworIAorLlBQCitEbnNtYXNxIGVzdCB1biBsb2dpY2llbCBkZSB0cmFuc21pc3Npb24gZGUgcmVxdcOqdGVzIEROUyA6IGlsIG4nZXN0IHBhcyBjYXBhYmxlCitkJ2VmZmVjdHVlciB1bmUgcsOpc29sdXRpb24gZGUgbm9tIHLDqWN1cnNpdmUgZW4gcGFydGFudCBkZXMgc2VydmV1cnMgRE5TIHJhY2luZSwKK21haXMgdHJhbnNtZXQgZGUgdGVsbGVzIHJlcXXDqnRlcyDDoCB1biBzZXJ2ZXVyIEROUyBhbW9udCBjYXBhYmxlIGRlIHRlbGxlcworcmVjaGVyY2hlcyByw6ljdXJzaXZlcywgY2UgcXVpIGVzdCB0eXBpcXVlbWVudCBsZSBjYXMgZCd1biBzZXJ2ZXVyIEROUyBkZSBGQUkuCitQYXIgZMOpZmF1dCwgRG5zbWFzcSBsaXMKKy5JIC9ldGMvcmVzb2x2LmNvbmYKK3BvdXIgZMOpY291dnJpciBsZXMgYWRyZXNzZXMgSVAgZGVzIHNlcnZldXJzIEROUyBhbW9udHMgw6AgdXRpbGlzZXIsIHB1aXNxdWUgY2V0dGUKK2luZm9ybWF0aW9uIGVzdCBlbiBnw6luw6lyYWwgc3RvY2vDqWUgw6AgY2V0IGVuZHJvaXQuIEEgbW9pbnMgcXVlIGwnb3B0aW9uCisuQiAtLW5vLXBvbGwKK25lIHNvaXQgdXRpbGlzw6llLAorLkIgRG5zbWFzcQordsOpcmlmaWUgbGEgZGF0ZSBkZSBtb2RpZmljYXRpb24gZHUgZmljaGllcgorLkkgL2V0Yy9yZXNvbHYuY29uZgorKG91IGwnw6lxdWl2YWxlbnQgc2kgCisuQiBcLS1yZXNvbHYtZmlsZSAKK2VzdCB1dGlsaXPDqSksIGV0IGxlIHJlbGlzIGxvcnNxdSdpbCBjaGFuZ2UuIENlbGEgcGVybWV0IGRlIGTDqWZpbmlyIGxlcyBzZXJ2ZXVycworRE5TIGFtb250IGRlIG1hbmnDqHJlIGR5bmFtaXF1ZSBsb3JzcXVlIFBQUCBvdSBESENQIHNvbnQgdXRpbGlzw6lzLCBwdWlzcXVlIGNlcworcHJvdG9jb2xlcyBmb3Vybmlzc2VudCBjZXR0ZSBpbmZvcm1hdGlvbi4KK0wnYWJzZW5jZSBkdSBmaWNoaWVyCisuSSAvZXRjL3Jlc29sdi5jb25mCituZSBjb25kdWl0IHBhcyDDoCB1bmUgZXJyZXVyLCBwdWlzcXUnaWwgcGV1dCB0csOocyBiaWVuIG5lIHBhcyDDqnRyZSBjcsOpw6kgYXZhbnQKK3F1J3VuZSBjb25uZXhpb24gUFBQIG5lIHNvaXQgw6l0YWJsaWUuIERhbnMgY2UgY2FzLCBEbnNtYXNxIHbDqXJpZmllIHLDqWd1bGnDqHJlbWVudAorcG91ciB2b2lyIHNpIHVuIGZpY2hpZXIKKy5JIC9ldGMvcmVzb2x2LmNvbmYgCitlc3QgY3LDqcOpLiBEbnNtYXNxIHBldXQgw6p0cmUgY29uZmlndXLDqSBwb3VyIGxpcmUgcGx1cyBkJ3VuIGZpY2hpZXIgcmVzb2x2LmNvbmYuCitDZWxhIGVzdCB1dGlsZSBzdXIgdW4gb3JkaW5hdGV1ciBwb3J0YWJsZSBvw7kgUFBQIGV0IERIQ1AgcGV1dmVudC3DqnRyZSB1dGlsaXPDqXMgOgorRG5zbWFzcSBwZXV0IGFsb3JzIMOqdHJlIGNvbmZpZ3Vyw6kgcG91ciBsaXJlIMOgIGxhIGZvaXMKKy5JIC9ldGMvcHBwL3Jlc29sdi5jb25mIAorZXQKKy5JIC9ldGMvZGhjcGMvcmVzb2x2LmNvbmYgCitldCB1dGlsaXNlcmEgbGUgY29udGVudSBkdSBmaWNoaWVyIGF5YW50IGNoYW5nw6kgZW4gZGVybmllciwgY2UgcXVpIHBlcm1ldCBkZQorcGFzc2VyIGF1dG9tYXRpcXVlbWVudCBkZSBzZXJ2ZXVycyBETlMgw6AgZCdhdXRyZXMuCisuUFAKK0xlcyBzZXJ2ZXVycyBhbW9udHMgcGV1dmVudCBhdXNzaSDDqnRyZSBzcMOpY2lmacOpcyBzdXIgbGEgbGlnbmUgZGUgY29tbWFuZGUgb3UKK2RhbnMgdW4gZmljaGllciBkZSBjb25maWd1cmF0aW9uLiBDZXMgc3DDqWNpZmljYXRpb25zIGRlIHNlcnZldXJzIHBldXZlbnQKK8OpdmVudHVlbGxlbWVudCBzZSB2b2lyIGFkam9pbmRyZSBkJ3VuIG5vbSBkZSBkb21haW5lIHF1aSBwcsOpY2lzZSDDoCBEbnNtYXNxIHF1ZWwKK3NlcnZldXIgdXRpbGlzZXIgcG91ciB0cm91dmVyIGxlcyBub21zIGQndW4gZG9tYWluZSBkb25uw6kuCisuUFAKK1BvdXIgY29uZmlndXJlciBEbnNtYXNxIGFmaW4gcXUnaWwgc2UgY29tcG9ydGUgY29tbWUgdW4gY2FjaGUgcG91ciBsYSBtYWNoaW5lCitzdXIgbGFxdWVsbGUgaWwgdG91cm5lLCBtZXR0cmUgIm5hbWVzZXJ2ZXIgMTI3LjAuMC4xIiBkYW5zIGxlIGZpY2hpZXIKKy5JIC9ldGMvcmVzb2x2LmNvbmYKK2FmaW4gZGUgZm9yY2VyIGxlcyBwcm9jZXNzdXMgbG9jYXV4IMOgIGVudm95ZXIgbGV1cnMgcmVxdcOqdGVzIMOgIERuc21hc3EuIEVuc3VpdGUsCitzcMOpY2lmaWVyIGxlcyBzZXJ2ZXVycyBETlMgYW1vbnQgc29pdCBlbiBsZXMgZm91cm5pc3NhbnQgZGlyZWN0ZW1lbnQgw6AgRG5zbWFzcQordmlhIGwnb3B0aW9uCisuQiBcLS1zZXJ2ZXIKK291IGFsb3JzIGVuIG1ldHRhbnQgbGV1cnMgYWRyZXNzZXMgZGFucyB1biBhdXRyZSBmaWNoaWVyLCBwYXIgZXhlbXBsZQorLkkgL2V0Yy9yZXNvbHYuZG5zbWFzcQorZXQgZW4gbGFuw6dhbnQgRG5zbWFzcSBhdmVjIGwnb3B0aW9uCisuQiBcLXIgL2V0Yy9yZXNvbHYuZG5zbWFzcS4KK0NldHRlIGRldXhpw6htZSB0ZWNobmlxdWUgcGVybWV0IGxhIG1pc2Utw6Atam91ciBkeW5hbWlxdWUgZGVzIGFkZHJlc3NlcyBkZQorc2VydmV1cnMgRE5TIGFtb250IHBhciBsZSBiaWFpcyBkZSBQUFAgb3UgREhDUC4KKy5QUAorTGVzIGFkcmVzc2VzIGRhbnMgL2V0Yy9ob3N0cyBwcmVubmVudCBsZSBkZXNzdXMgc3VyIGNlbGxlcyBmb3VybmllcyBwYXIgbGUKK3NlcnZldXIgRE5TIGFtb250LCBhaW5zaSAibWFjb21wYWduaWUuY29tIDEuMi4zLjQiIGRhbnMgL2V0Yy9ob3N0cyBhc3N1cmUgcXVlCitsZXMgcmVxdcOqdGVzIHBvdXIgIm1hY29tcGFnbmllLmNvbSIgcmV0b3VybmVyb250IHRvdWpvdXJzIDEuMi4zLjQsIG3Dqm1lIHNpIHVuZQorcmVxdcOqdGUgYXUgc2VydmV1ciBETlMgYW1vbnQgcmV0b3VybmVyYWl0IHVuZSBhZHJlc3NlIGRpZmbDqXJlbnRlLiBJbCB5IGEgdW5lCitleGNlcHRpb24gw6AgY2VjaSA6IHNpIGxlIEROUyBhbW9udCBjb250aWVudCB1biBDTkFNRSBxdWkgcG9pbnRlIHZlcnMgdW4gbm9tCitwcsOpc2VudCBkYW5zIC9ldGMvaG9zdHMsIGFsb3JzIGxhIHJlY2hlcmNoZSBkdSBDTkFNRSB2aWEgRG5zbWFzcSBmb3VybmlyYQorbCdhZHJlc3NlIEROUyBhbW9udC4gUG91ciBjb250b3VybmVyIGNlbGEsIGlsIHN1ZmZpdCBkZSBtZXR0cmUgbCdlbnRyw6llCitjb3JyZXNwb25kYW50IGF1IENOQU1FIGRhbnMgL2V0Yy9ob3N0cy4KKworLlBQCitsZXMgaWRlbnRpZmlhbnRzIGRlIHLDqXNlYXUgZm9uY3Rpb25uZW50IGNvbW1lIHN1aXQgOiBEbnNtYXNxIGFzc29jaWUgw6AgY2hhcXVlCityZXF1w6p0ZSBESENQIHVuIGVuc2VtYmxlIGQnaWRlbnRpZmlhbnRzIGRlIHLDqXNlYXU7IHVuIHBvdXIgbGEgcGxhZ2UgZCdhZHJlc3NlCitESENQICgKKy5CIGRoY3AtcmFuZ2UKKykgdXRpbGlzw6llIHBvdXIgYWxsb3VlciBsJ2FkcmVzc2UsIHVuIGlkZW50aWZpYW50IHBvdXIgY2hhcXVlIGVudHLDqWUKKy5CIGRoY3AtaG9zdAorYXNzb2Npw6llIChpbCBham91dGUgImtub3duIiBsb3JzcXUndW5lIGVudHLDqWUgZGhjcC1ob3N0IGNvw69uY2lkZSksIGwnw6l0aXF1ZXR0ZQorImJvb3RwIiBwb3VyIGxlcyByZXF1w6p0ZXMgQk9PVFAsIHVuIGlkZW50aWZpYW50IGRvbnQgbGUgbm9tIGVzdCBsZSBub20gZGUKK2wnaW50ZXJmYWNlIHN1ciBsYXF1ZWxsZSBsYSByZXF1w6p0ZSBlc3QgYXJyaXbDqWUsIGV0IMOpdmVudHVlbGxlbWVudCB1bgoraWRlbnRpZmlhbnQgcG91ciBjaGFxdWUgY2xhc3NlIGRlIHZlbmRldXIgb3UgZCd1dGlsaXNhdGV1cgorZm91cm5pZSBwYXIgbGUgY2xpZW50IERIQ1AgZGFucyBzYSByZXF1w6p0ZS4gTGVzIG9wdGlvbnMgREhDUCAoCisuQiBkaGNwLW9wdGlvbiAKKykgYXlhbnQgdW4gaWRlbnRpZmlhbnQgZGUgcsOpc2VhdSBzZXJvbnQgdXRpbGlzw6lzIGRlIHByw6lmw6lyZW5jZSDDoCBjZWxsZXMKK3NhbnMgaWRlbnRpZmlhbnRzIGRlIHLDqXNlYXUsIHBvdXIgcGV1IHF1ZQorLkkgdG91cworbGVzIGxhYmVscyBjb3JyZXNwb25kZW50LgorTGUgcHLDqWZpeGUgJyMnIHN1ciB1biBsYWJlbCBlc3QgdW4gaW5kaWNhdGV1ciBkZSBuw6lnYXRpb24sIGFpbnNpCisuQiAtLWRoY3A9b3B0aW9uPSNwdXJwbGUsMywxLjIuMy40CitlbnZvaWUgbCdvcHRpb24gbG9yc3F1ZSBsZSBsYWJlbCAicHVycGxlIiBuJ2VzdCBwYXMgZGFucyBsYSBsaXN0ZSBkZSBsYWJlbHMKK3ZhbGlkZXMgcG91ciBsJ2jDtHRlIGNvbnNpZMOpcsOpLgorLlBQCitTaSBsJ2lkZW50aWZpYW50IGRlIHLDqXNlYXUgZGFucyBsYSBwbGFnZSBkJ2FkcmVzc2VzIERIQ1AgKAorLkIgZGhjcC1yYW5nZSAKKykgZXN0IHByw6lmaXjDqSBwYXIgJ25ldDonLCBhbG9ycyBzYSBzaWduaWZpY2F0aW9uIGNoYW5nZSA6IGF1IGxpZXUgZCdhc3NvY2llciB1bgorbGFiZWwgw6AgbGEgcGxhZ2Ugc3DDqWNpZmnDqWUsIGNlbGEgaW5kaXF1ZSB1biBsYWJlbCBkZSByw6lzZWF1IGRldmFudCDDqnRyZSBzcMOpY2lmacOpCitwYXIgbGUgY2xpZW50IERIQ1AuIEFpbnNpLCBzJ2lsIHkgYSBwbHVzIGQndW5lIHBsYWdlIGQnYWRyZXNzZXMgREhDUCBzdXIgdW4KK3NvdXMtcsOpc2VhdSwgZXQgcXVlIGwndW5lIGVzdCBwcsOpZml4w6llIHBhciB1biBpZGVudGlmaWFudCBkZSByw6lzZWF1IChwYXIgZXhlbXBsZQorbCd1biBzcMOpY2lmacOpIGRhbnMgdW5lIG9wdGlvbiBkZSBjbGFzc2UgZGUgdmVuZGV1ciksIGFsb3JzIHVuIGjDtHRlIGF5YW50CitsJ2lkZW50aWZpYW50IGRlIHLDqXNlYXUgZW4gcXVlc3Rpb24gcG9zaXRpb25uw6kgc2UgdmVycmEgYWxsb3VlciB1bmUgYWRyZXNzZSBkYW5zCitsYSBwbGFnZSBkJ2FkcmVzc2VzIERIQ1AgcHLDqWZpeMOpZS4KKy5QUCAKK0xlIHNlcnZldXIgREhDUCBpbnTDqWdyw6kgZGFucyBEbnNtYXNxIGZvbmN0aW9ubmUgw6lnYWxlbWVudCBlbiB0ZW1wcyBxdWUgc2VydmV1cgorQk9PVFAsIHBvdXIgcGV1IHF1ZSBsJ2FkcmVzc2UgTUFDIGV0IGwnYWRyZXNzZSBJUCBkZXMgY2xpZW50cyBzb2llbnQgZm91cm5pZXMsCitxdWUgY2Ugc29pdCBwYXIgbGUgYmlhaXMgZGUgbCdvcHRpb24gCisuQiBkaGNwLWhvc3QgCitvdSBkYW5zIGxlIGZpY2hpZXIKKy5JIC9ldGMvZXRoZXJzCissIGV0IHF1ZSBsJ29wdGlvbgorLkIgZGhjcC1yYW5nZSAKK3NvaXQgcHLDqXNlbnRlIGFmaW4gZCdhY3RpdmVyIGxlIHNlcnZldXIgREhDUCBwb3VyIHVuIHLDqXNlYXUgZG9ubsOpIChMJ29wdGlvbgorLkIgLS1ib290cC1keW5hbWljCitzdXBwcmltZSBsYSBuw6ljZXNzaXTDqSBkZXMgYXNzb2NpYXRpb25zIHN0YXRpcXVlcykuIExlIHBhcmFtw6h0cmUKKyJmaWxlbmFtZSIgKG5vbSBkZSBmaWNoaWVyKSBkZSBsYSByZXF1w6p0ZSBCT09UUCBlc3QgY29tcGFyw6kgYXZlYyBsZXMKK2lkZW50aWZpYW50cyBkZSByw6lzZWF1eCBkZXMgb3B0aW9ucworLkIgIGRoY3Atb3B0aW9uIAorYWluc2kgcXVlIGxlIGxhYmVsICJib290cCIsIGNlIHF1aSBwZXJtZXQgZGUgY29udHLDtGxlciBsZXMgb3B0aW9ucyByZXRvdXJuw6llcworYXV4IGRpZmbDqXJlbnRlcyBjbGFzc2VzIGQnaMO0dGVzLgorCisuU0ggQ09ERVMgREUgU09SVElFCisuUFAKKzAgLSBEbnNtYXNxIHMnZXN0IGNvcnJlY3RlbWVudCBsYW5jw6kgZW4gdMOiY2hlIGRlIGZvbmQsIG91IGFsb3JzIHMnZXN0Citjb3JyZWN0ZW1lbnQgdGVybWluw6kgc2kgbGUgbGFuY2VtZW50IGVuIHTDomNoZSBkZSBmb25kIG4nYSBwYXMgw6l0w6kgYWN0aXbDqS4KKy5QUAorMSAtIFVuIHByb2Jsw6htZSBkZSBjb25maWd1cmF0aW9uIGEgw6l0w6kgZMOpdGVjdMOpLgorLlBQCisyIC0gVW4gcHJvYmzDqG1lIGVzdCBzdXJ2ZW51IGF2ZWMgdW4gYWNjw6hzIHLDqXNlYXUgKGFkcmVzc2UgZMOpasOgIHV0aWxpc8OpZSwKK3RlbnRhdGl2ZSBkJ3V0aWxpc2VyIHVuIHBvcnQgcHJpdmlsw6lnacOpIHNhbnMgbGVzIHBlcm1pc3Npb25zIG7DqWNlc3NhaXJlcykuCisuUFAKKzMgLSBVbiBwcm9ibMOobWUgZXN0IHN1cnZlbnUgYXZlYyB1bmUgb3DDqXJhdGlvbiBzdXIgdW4gc3lzdMOobWUgZGUgZmljaGllcgorKGZpY2hpZXIgb3UgcsOpcGVydG9pcmUgbWFucXVhbnQsIHBlcm1pc3Npb25zKS4KKy5QUAorNCAtIEltcG9zc2liaWxpdMOpIGQnYWxsb3VlciBkZSBsYSBtw6ltb2lyZS4KKy5QUAorNSAtIEF1dHJlIHByb2Jsw6htZS4KKy5QUAorMTEgb3UgcGx1cyAtIHVuIGNvZGUgZGUgcmV0b3VyIGRpZmbDqXJlbnQgZGUgMCBhIMOpdMOpIHJlw6d1IGxvcnMgZGUgbCdhcHBlbCBhdQorcHJvY2Vzc3VzICJpbml0IiBkdSBzY3JpcHQgZGVzIGJhaWxzLiBMZSBjb2RlIGRlIHJldG91ciBkZSBEbnNtYXNxIGNvcnJlc3BvbmQKK2F1IGNvZGUgZGUgcmV0b3VyIGR1IHNjcmlwdCBwbHVzIDEwLgorCisuU0ggTElNSVRFUworTGVzIHZhbGV1cnMgcGFyIGTDqWZhdXQgcG91ciBsZXMgbGltaXRlcyBkZSByZXNzb3VyY2VzIGRlIERuc21hc3Egc29udCBlbiBnw6luw6lyYWwKK2NvbnNlcnZhdHJpY2VzIGV0IGFwcHJvcHJpw6llcyBwb3VyIGRlcyB1dGlsaXNhdGlvbnMgZW1iYXJxdcOpZXMgc3VyIGRlcyBtYWNoaW5lcworZGUgdHlwZSByb3V0ZXVyIGF5YW50IGRlcyBwcm9jZXNzZXVycyBsZW50cyBldCB1bmUgbcOpbW9pcmUgbGltaXTDqWUuIFN1ciBkdQorbWF0w6lyaWVsIHBsdXMgcGVyZm9ybWFudCwgaWwgZXN0IHBvc3NpYmxlIGQnYXVnbWVudGVyIGxlcyBsaW1pdGVzIGV0IGRlIGfDqXJlcgorcGx1cyBkZSBjbGllbnRzLiBMZXMgcmVtYXJxdWVzIHN1aXZhbnRlcyBzJ2FwcGxpcXVlbnQgw6AgRG5zbWFzcSB2ZXJzaW9uIDIuMzcgZXQKK3VsdMOpcmlldXIgOiBsZXMgdmVyc2lvbnMgcHLDqWPDqWRlbnRlcyBuZSBtb250YWllbnQgcGFzIGVuIGNoYXJnZSBhdXNzaSBiaWVuLgorIAorLlBQCitEbnNtYXNxIGVzdCBjYXBhYmxlIGRlIGfDqXJlciBsZSBETlMgZXQgREhDUCBwb3VyIGF1IG1vaW5zIHVuIG1pbGxpZXIgZGUgY2xpZW50cy4KK0V2aWRlbWVudCwgcG91ciBjZWxhIGxhIHZhbGV1ciBkZSAKKy5CIC0tZGhjcC1sZWFzZS1tYXgKK2RvaXQgw6p0cmUgYXVnbWVudMOpZSBldCBsYSBkdXLDqWUgZGVzIGJhdXggbmUgZG9pdCBwYXMgw6p0cmUgdHLDqHMgY291cnRlIChtb2lucworZCd1bmUgaGV1cmUpLiBMYSB2YWxldXIgZGUKKy5CIC0tZG5zLWZvcndhcmQtbWF4IAorcGV1dC3DqnRyZSBhdWdtZW50w6llIDogY29tbWVuY2VyIHBhciBsYSByZW5kcmUgw6lnYWxlIGF1IG5vbWJyZSBkZSBjbGllbnRzIGV0CitsJ2F1Z21lbnRlciBzaSBsZSBETlMgc2VtYmxlIGxlbnQuIE5vdGVyIHF1ZSBsYSBwZXJmb3JtYW5jZSBkdSBETlMgZMOpcGVuZHMKK8OpZ2FsZW1lbnQgZGUgbGEgcGVyZm9ybWFuY2UgZGVzIHNlcnZldXJzIGFtb250cy4gTGEgdGFpbGxlIGR1IGNhY2hlIEROUyBwZXV0LQorw6p0cmUgYXVnbWVudMOpZSA6IGxhIGxpbWl0ZSBlbiBkdXIgZXN0IGRlIDEwMDAwIGVudHLDqWVzIGV0IGxhIHZhbGV1ciBwYXIgZMOpZmF1dAorKDE1MCkgZXN0IHRyw6hzIGJhc3NlLiBFbnZveWVyIHVuIHNpZ25hbCBTSUdVU1IxIMOgIERuc21hc3EgbGUgZmFpdCDDqW1ldHRyZSBkZXMKK2luZm9ybWF0aW9ucyB1dGlsZXMgcG91ciBwYXJhbcOpdHJlciBsYSB0YWlsbGUgZGUgY2FjaGUuIFZvaXIgbGEgc2VjdGlvbgorLkIgTk9URVMKK3BvdXIgcGx1cyBkZSBkw6l0YWlscy4KKy5QUAorTGUgc2VydmV1ciBURlRQIGludMOpZ3LDqSBlc3QgY2FwYWJsZSBkZSBwbHVzaWV1cnMgdHJhbnNmZXJ0cyBkZSBmaWNoaWVycworc2ltdWx0YW7DqXMgOiBMYSBsaW1pdGUgYWJzb2x1ZSBlc3QgbGnDqWUgYXUgbm9tYnJlIG1heGltYWwgZGUgZGVzY3JpcHRldXJzIGRlCitmaWNoaWVycyBhbGxvdcOpIMOgIHVuIHByb2Nlc3N1cyBldCDDoCBsYSBjYXBhY2l0w6kgZGUgbCdhcHBlbCBzeXN0w6htZSBzZWxlY3QoKSDDoAorZ8OpcmVyIHVuIGdyYW5kIG5vbWJyZSBkZSBIQU5ETEUgZGUgZmljaGllci4gU2kgbGEgbGltaXRlIGVzdCBmaXjDqWUgdHJvcCBoYXV0IHBhcgorbGUgYmlhaXMgZGUKKy5CIC0tdGZ0cC1tYXgKK2VsbGUgc2VyYSByw6lkdWl0ZSBldCBsYSBsaW1pdGUgYWN0dWVsbGUgc2VyYSBlbnJlZ2lzdHLDqWUgYXUgZMOpbWFycmFnZS4gSWwgZmF1dAorbm90ZXIgcXVlIHBsdXMgZGUgdHJhbnNmZXJ0cyBzb250IHBvc3NpYmxlIGxvcnNxdWUgbGUgbcOqbWUgZmljaGllciBlc3QgdHJhbnNtaXMKK2F1IGxpZXUgZCdhdm9pciB1biBmaWNoaWVyIGRpZmbDqXJlbnQgcG91ciBjaGFxdWUgdHJhbnNmZXJ0LgorCisuUFAKK0lsIGVzdCBwb3NzaWJsZSBkJ3V0aWxpc2VyIERuc21hc3EgcG91ciBibG9xdWVyIGxhIHB1YmxpY2l0w6kgc3VyIGxhIHRvaWxlCitlbiBhc3NvY2lhbnQgZGVzIHNlcnZldXJzIGRlIHB1YmxpY2l0w6kgYmllbiBjb25udXMgw6AgbCdhZHJlc3NlIDEyNy4wLjAuMSBvdQorMC4wLjAuMCBwYXIgbGUgYmlhaXMgZHUgZmljaGllcgorLkIgL2V0Yy9ob3N0cyAKK291IGQndW4gZmljaGllciBkJ2jDtHRlIGFkZGl0aW9ubmVsLiBDZXR0ZSBsaXN0ZSBwZXV0LcOqdHJlIHRyw6hzIGxvbmd1ZSwgRG5zbWFzcQorYXlhbnQgw6l0w6kgdGVzdMOpIGF2ZWMgc3VjY8OocyBhdmVjIHVuIG1pbGxpb24gZGUgbm9tcy4gQ2V0dGUgdGFpbGxlIGRlIGZpY2hpZXIKK27DqWNlc3NpdGUgdW4gcHJvY2Vzc2V1ciDDoCAxIEdoeiBldCBlbnZpcm9uIDYwIE1vIGRlIFJBTS4KKworLlNIIEZJQ0hJRVJTCisuSVIgL2V0Yy9kbnNtYXNxLmNvbmYgCisKKy5JUiAvdXNyL2xvY2FsL2V0Yy9kbnNtYXNxLmNvbmYKKworLklSIC9ldGMvcmVzb2x2LmNvbmYKKworLklSIC9ldGMvaG9zdHMKKworLklSIC9ldGMvZXRoZXJzCisKKy5JUiAvdmFyL2xpYi9taXNjL2Ruc21hc3EubGVhc2VzIAorCisuSVIgL3Zhci9kYi9kbnNtYXNxLmxlYXNlcworCisuSVIgL3Zhci9ydW4vZG5zbWFzcS5waWQKKy5TSCBWT0lSIEFVU1NJCisuQlIgaG9zdHMgKDUpLCAKKy5CUiByZXNvbHZlciAoNSkKKy5TSCBBVVRFVVIKK0NldHRlIHBhZ2UgZGUgbWFudWVsIGEgw6l0w6kgw6ljcml0ZSBwYXIgU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4uCisKK0xhIHRyYWR1Y3Rpb24gZGFucyB1biBmcmFuw6dhaXMgYmFuY2FsIGEgw6l0w6kgY29tbWlzZSBwYXIgR2lsZGFzIExlIE5hZGFuCis8M250cjBwMTNAZ21haWwuY29tPiA6IFRvdXRlIHLDqXZpc2lvbi9jb3JyZWN0aW9uIHBlcm1ldHRhbnQgZGUgY29ycmlnZXIKK29ydGhvZ3JhcGhlIG91IGdyYW1tYWlyZSBtYWlzIHN1cnRvdXQgbGVzIMOpdmVudHVlbGxlcyBmYXV0ZXMgZGUgc2VucyBzZXJhIGxhCitiaWVudmVudWUhCmRpZmYgLS1naXQgYS9wby9kZS5wbyBiL3BvL2RlLnBvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlMWM0NDAKLS0tIC9kZXYvbnVsbAorKysgYi9wby9kZS5wbwpAQCAtMCwwICsxLDE0NjIgQEAKKyMgR2VybWFuIHRyYW5zbGF0aW9ucyBmb3IgZG5zbWFzcSBwYWNrYWdlLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiwgMjAwNS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGRuc21hc3EgMi4yNFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNi0xOCAxMjoyNCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNS0wOS0yNyAwOTozNyswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPlxuIgorIkxhbmd1YWdlLVRlYW06IEdlcm1hbiA8ZGVAbGkub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBjYWNoZS5jOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjc5OCBkaGNwLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIiIKKworIyBAU2ltb246IEhlcmUgSSBuZWVkIGFuIGV4YW1wbGUgdG8gdW5kZXJzdGFuZCBpdCA6KQorIzogY2FjaGUuYzo4NTYgZGhjcC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbmFtZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICIiCisKKyMgQFNpbW9uOiBIZXJlIEkgbmVlZCBhbiBleGFtcGxlIHRvIHVuZGVyc3RhbmQgaXQgOikKKyM6IGNhY2hlLmM6ODYzIGRoY3AuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyAtICVkIGFkZHJlc3NlcyIKK21zZ3N0ciAibGVzZSAlcyAtICVkIEFkcmVzc2VuIgorCisjIEBTaW1vbjogJ2xlc2UnIGlzIHByZXNlbnQsIGlzIHRoYXQgb2s/IElmIGl0IHNob3VsZCBiZSBwYXN0LCBpdCB3b3VsZCBiZQorIyBAU2ltb246ICJnZWxlc2VuOiAlcyAtICVkIEFkcmVzc2VuIiAtIG5vdGUgdGhlIGNvbG9uLCBpdCdzIGEgbXVzdCwgdGhlbi4KKyM6IGNhY2hlLmM6OTAyCittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAiQ2FjaGUgZ2VsZWVydCIKKworIzogY2FjaGUuYzo5MzMgb3B0aW9uLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIGRpcmVjdG9yeSAlczogJXMiCittc2dzdHIgIiIKKworIyBAU2ltb246ICJDYWNoZSBnZWxlZXJ0IiBpcyBsaXRlcmFsbHkgIkNhY2hlIGVtcHRpZWQiIGJ1dCBJIHRoaW5rIG90aGVyIHRyYW5zbGF0aW9ucyBjb3VsZCBiZSBtaXNsZWFkaW5nCisjIEBTaW1vbjogKEkgZG9uJ3Qga25vdyBhIGdvb2QgZ2VybWFuIHJlcGxhY2VtZW50IGZvciAiQ2FjaGUiIGJ1dCBBRkFJSyAiQ2FjaGUiIGlzIGNvbW1vbiBpbiBnZXJtYW4pCisjOiBjYWNoZS5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGdpdmluZyBuYW1lICVzIHRvIHRoZSBESENQIGxlYXNlIG9mICVzIGJlY2F1c2UgdGhlIG5hbWUgZXhpc3RzIGluICVzIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAiTmFtZSAlcyB3dXJkZSBuaWNodCBkZW0gREhDUCAnTWlldGVyJyB2b24gJXMgenVnZXdpZXNlbiwgZGEgZGVyIE5hbWUgaW4gJXNtaXQgZGVyIEFkcmVzc2UgJXMgYmVyZWl0cyBleGlzdGllcnQiCisKKyM6IGNhY2hlLmM6MTEyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lICVsdSIKK21zZ3N0ciAiIgorCisjIEBTaW1vbjogIk1pZXRlciIgaXMgcmF0aGVyICdsb2dkZXIsIHJlbnRlciwgdGVuYW50LCBsZXNzZWUnIGJ1dCBJIGNvdWxkbid0IGZpbmQgYW55dGhpbmcgdGhhdCBmaXRzIGJldHRlci4KKyMgQFNpbW9uOiBTbyBJIHRob3VnaHQgSSBwdXQgaXQgaW4gJyctbWFya3MgOikKKyM6IGNhY2hlLmM6MTEzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2FjaGUgc2l6ZSAlZCwgJWQvJWQgY2FjaGUgaW5zZXJ0aW9ucyByZS11c2VkIHVuZXhwaXJlZCBjYWNoZSBlbnRyaWVzLiIKK21zZ3N0ciAiQ2FjaGUgR3LDtsOfZSAlZCwgJWQvJWQgQ2FjaGUtRWluZsO8Z3VuZ2VuIHZlcndlbmRldGVuIG5pY2h0IGFiZ2VsYXVmZW5lIENhY2hlLUVpbnRyw6RnZSB3aWVkZXIuIgorCisjOiBjYWNoZS5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicXVlcmllcyBmb3J3YXJkZWQgJXUsIHF1ZXJpZXMgYW5zd2VyZWQgbG9jYWxseSAldSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyICVzIyVkOiBxdWVyaWVzIHNlbnQgJXUsIHJldHJpZWQgb3IgZmFpbGVkICV1IgorbXNnc3RyICIiCisKKyM6IHV0aWwuYzo1OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2VlZCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3I6ICVzIgorbXNnc3RyICIiCisKKyM6IHV0aWwuYzoxOTEKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IgorbXNnc3RyICIiCisKKyMgQFNpbW9uOiAicmUtdXNlZCIgPSAid2llZGVydmVyd2VuZGVuIiwgYnV0IGluIHN1Y2ggYSBjYXNlIGl0IG11c3QgYmUgc3BsaXQgYXBhcnQgdG8gInZlcndlbmRldCAuLi4gd2llZGVyIgorIyBAU2ltb246ICJ1bmV4cGlyZWQiID0gIm5pY2h0IGFiZ2VsYXVmZW4iIChleHBpcmVkPWFiZ2VsYXVmZW4pIC0tIGFsdG9nZXRoZXIgaXQgc291bmRzIGNvbXBsaWNhdGVkIGluIGdlcm1hbiwKKyMgQFNpbW9uOiBJIHdvdWxkIHByZWZlciB0byB1c2UgIm5vY2ggZ8O8bHRpZ2UiID0gInN0aWxsIHZhbGlkIiwgd291bGQgdGhhdCBmaXQgdG8gdGhlIHNlbnNlPyBUaGVuIGl0IHdvdWxkIGJlOgorIyBAU2ltb246IG1zZ3N0ciAiQ2FjaGUgR3LDtsOfZSAlZCwgJWQvJWQgQ2FjaGUtRWluZsO8Z3VuZ2VuIHZlcndlbmRldGVuIG5vY2ggZ8O8bHRpZ2UgQ2FjaGUtRWludHLDpGdlIHdpZWRlci4iCisjIEBTaW1vbjogYnR3LCB3aGF0IGlzIHRoZSAiJWQvJWQiLXBhcnQ/CisjOiB1dGlsLmM6MjI5IG9wdGlvbi5jOjU0OAorbXNnaWQgImNvdWxkIG5vdCBnZXQgbWVtb3J5IgorbXNnc3RyICJTcGVpY2hlciBuaWNodCB2ZXJmw7xnYmFyIgorCisjOiB1dGlsLmM6MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgIiIKKworIyBAU2ltb246IG5vdCBwZXJmZWN0IGJ1dCBJIGNhbm5vdCBnZXQgbmVhcmVyIHJpZ2h0IG5vdy4KKyM6IHV0aWwuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5maW5pdGUiCittc2dzdHIgInVuZW5kbGljaCIKKworIzogb3B0aW9uLmM6MjI4Cittc2dpZCAiU3BlY2lmeSBsb2NhbCBhZGRyZXNzKGVzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJMb2thbGUgYWJ6dWjDtnJlbmRlIEFkcmVzc2UobikgYW5nZWJlbi4iCisKKyMgQFNpbW9uOiBRdWl0ZSBsaXRlcmFsIHRyYW5zbGF0aW9uLCBzb3VuZHMgbm90IHRvbyBwb2xpdGUgaW4gZ2VybWFuLgorIyBAU2ltb246IEhvdyBhYm91dDogIkJpdHRlIGRpZSBsb2thbGVuIGFienVow7ZyZW5kZSBBZHJlc3NlKG4pIGFuZ2ViZW4uIgorIyBAU2ltb246ID0gIlBsZWFzZSBzcGVjaWZ5IHRoZSBsb2NhbCBhZGRyZXNzKGVzKSB0byBsaXN0ZW4gb24uIgorIzogb3B0aW9uLmM6MjI5Cittc2dpZCAiUmV0dXJuIGlwYWRkciBmb3IgYWxsIGhvc3RzIGluIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiUsO8Y2trZWhyLUlQLUFkcmVzc2UgZsO8ciBhbGxlIEdlcsOkdGUgaW4gYW5nZWJlbmVuIERvbcOkbmVuIgorCisjIEBTaW1vbjogSSBob3BlICJSZXR1cm4gaXBhZGRyIiBpcyBzaW1pbGFyIHRvICJSZXR1cm4taXBhZGRyIiBhbmQgbm90ICJSZXR1cm4gdGhlIGlwYWRkciAuLi4gISIKKyM6IG9wdGlvbi5jOjIzMAorbXNnaWQgIkZha2UgcmV2ZXJzZSBsb29rdXBzIGZvciBSRkMxOTE4IHByaXZhdGUgYWRkcmVzcyByYW5nZXMuIgorbXNnc3RyICInR2Vmw6Rsc2NodGUnIFLDvGNrd8OkcnRzLUVyZ2Vibmlzc2UgZsO8ciBwcml2YXRlIEFkcmVzc2JlcmVpY2hlIG5hY2ggUkZDMTkxOCIKKworIyBAU2ltb246IEknbSBhIGJpdCB1bnN1cmUgYWJvdXQgdGhlIG1lYW5pbmcgb2YgIkZha2UiIGhlcmUsIGFuZCB0aGUgYmVzdCB3b3JkIGZvciAibG9va3VwIiBpcyAiTmFjaHNlaGVuIiAKKyMgQFNpbW9uOiAodGhhdCBpcyAibG9va2luZy1mb3IiKSBidXQgSSB0aGluayB0aGF0IGNhbm5vdCBiZSB1c2VkLiAiRXJnZWJuaXNzZSIgPSAicmVzdWx0cyIsIGlzIHRoYXQgbmVhciBlbm91Z2g/CisjOiBvcHRpb24uYzoyMzEKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiQmVoYW5kbGUgSVAtQWRyIGFscyBOWERPTUFJTiAod2VocnQgVmVyaXNpZ24tUGxhdHpoYWx0ZXIgYWIpLiIKKworIyBAU2ltb246IG9yICJCZWhhbmRsZSBJUC1BZHIgYWxzIE5YRE9NQUlOIChnZWdlbiBWZXJpc2lnbi1QbGF0emhhbHRlcikuIgorIyBAU2ltb246ICJnZWdlbiIgPSAiYWdhaW5zdCIsIEkgYmVsaWV2ZSB0aGF0IG1pZ2h0IGJlIGNsdW1zeSBpbiBlbmdsaXNoIGJ1dCBpdCBpcyBmaW5lIGluIGdlcm1hbi4KKyMgQFNpbW9uOiBKdXN0IGJ5IGNoYW5jZSBJIGtub3cgd2hhdCB0aGlzIGlzIGZvciAtIGl0IGlzIG1lcmVseSBhZ2FpbnN0IHZlcmlzaWduJ3MgdXNlIG9mIHdpbGRjYXJkCisjIEBTaW1vbjogZW50cmllcyAodGhhdCBsZWFkIHRvIHRoZWlyIG93biBzZXJ2ZXJzKSwgcmlnaHQuIFRoZXJlZm9yZSwgaG93IGFib3V0OgorIyBAU2ltb246ICAgIkJlaGFuZGxlIElQLUFkciBhbHMgTlhET01BSU4gKGdlZ2VuIFZlcmlzaWducyBQbGF0emhhbHRlci1HZWJyYXVjaCkuIgorIyBAU2ltb246ID0gIlRyZWF0IGlwYWRkciBhcyBOWERPTUFJTiAoZGVmZWF0cyBWZXJpc2lnbnMgd2lsZGNhcmQgdXNhZ2UpLiIgPworIyBAU2ltb246IEJ1dCB0aGUgZXhwbGFuYXRvcnkoPykgZWZmZWN0IGlzIG9ubHkgYSB2ZXJ5IHRpbnkgYml0IGJldHRlciwgSSBiZWxpZXZlIC0gd2hhdCBkbyBVIHRoaW5rPyAKKyM6IG9wdGlvbi5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBjYWNoZSBpbiBlbnRyaWVzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJBbmdhYmUgZGVyIEdyw7bDn2UgZGVzIENhY2hlcyBpbiBFaW50csOkZ2VuIChWb3JlaW5zdGVsbHVuZzogJXMpLiIKKworIzogb3B0aW9uLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgY29uZmlndXJhdGlvbiBmaWxlIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJBbmdhYmUgZGVyIEtvbmZpZ3VyYXRpb25zZGF0ZWkgKFZvcmVpbnN0ZWxsdW5nOiAlcykuIgorCisjOiBvcHRpb24uYzoyMzQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIk5JQ0hUIGluIGRlbiBIaW50ZXJncnVuZCBnZWhlbjogQmV0cmllYiBpbSBEZWJ1Zy1Nb2R1cyIKKworIyBAU2ltb246ID0gIkRPIE5PVCBnbyBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBPcGVyYXRpb24gaW4gZGVidWctbW9kZSIKKyMgQFNpbW9uOiBJIGtub3cgaXQgc291bmRzIGEgYml0IGNsdW1zeSBpbiBlbmdsaXNoLCBidXQgImZvcmsiIHdvdWxkIGJlIGhhcmQgdG8gdW5kZXJzdGFuZAorIyBAU2ltb246IGFuZCB0aGVuIEkgZ2V0IGEgcHJvYmxlbSBiZXR3ZWVuICJnbyIgYW5kICJydW4iIC0gc28uLi4KKyMgQFNpbW9uOiAiRGVidWctbW9kZSIgPSAiRmVobGVyc3VjaC1Nb2R1cyIsIGxpdGVyYWxseSwgYnV0IEkgdGhpbmsgIkRlYnVnLU1vZHVzIiBpcyBiZXR0ZXIgOikKKyM6IG9wdGlvbi5jOjIzNQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIkFuZnJhZ2VuIG9obmUgRG9tw6RuZW4tVGVpbCBOSUNIVCB3ZWl0ZXJzY2hpY2tlbiIKKworIyBAU2ltb246ICJ3ZWl0ZXJzY2hpY2tlbiIgaXMgcmF0aGVyICJwYXNzIG9uIiAoSSBob3BlKSBidXQgdGhhdCdzIHRoZSBiZXN0IEkgZm91bmQuCisjOiBvcHRpb24uYzoyMzYKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIlLDvGNrZ2FiZSBhdWYgc2ljaCBzZWxic3QgemVpZ2VuZGVyIE1YLUVpbnRyw6RnZSBmw7xyIGxva2FsZSBHZXLDpHRlIgorCisjIEBTaW1vbjogInNlbGYtcG9pbnRpbmciIGlzIGEgYml0IGRpZmZpY3VsdCwgdGhlIG1lYW5pbmcgaXMgY2xlYXIgYnV0IHRha2VzIDMtNCB3b3JkcyB0byBleHByZXNzIGl0IGluIGdlcm1hbi4KKyMgQFNpbW9uOiAiR2Vyw6R0ZSIgaXMgYWJvdXQgImhhcmQtZGV2aWNlcyIuIFRoZXJlIGlzIGEgd29yZCBmb3IgImhvc3QiIChpdCBpcyAiV2lydCIpIGJ1dCBpdCB3b3VsZCBiZSBtaXNsZWFkaW5nLgorIyBAU2ltb246IE15IG9ubGluZSBkaWN0IHN1Z2dlc3QgIlJlY2huZXIiICg9IENvbXB1dGVyKSwgYnV0IEkgdGhpbmsgImhhcmQtZGV2aWNlcyIgaXMgYmV0dGVyIGJlY2F1c2UgaXQncyBtb3JlIGdlbmVyYWwuCisjOiBvcHRpb24uYzoyMzcKK21zZ2lkICJFeHBhbmQgc2ltcGxlIG5hbWVzIGluIC9ldGMvaG9zdHMgd2l0aCBkb21haW4tc3VmZml4LiIKK21zZ3N0ciAiRXJ3ZWl0ZXJlIGVpbmZhY2hlIE5hbWVuIGluIC9ldGMvaG9zdHMgbWl0IGRlciBEb23DpG5lbi1FbmR1bmciCisKKyM6IG9wdGlvbi5jOjIzOAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIid1bmVjaHRlJyBETlMtQW5mcmFnZW4gdm9uIFdpbmRvd3MtUmVjaG5lcm4gbmljaHQgd2VpdGVybGVpdGVuIgorCisjIEBTaW1vbjogSSdtIGEgYml0IHVuc3VyZSBhYm91dCAic3B1cmlvdXMiCisjOiBvcHRpb24uYzoyMzkKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIGdyb3VwIGFmdGVyIHN0YXJ0dXAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQxCittc2dpZCAiU2V0IGFkZHJlc3Mgb3IgaG9zdG5hbWUgZm9yIGEgc3BlY2lmaWVkIG1hY2hpbmUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0MgorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDMKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9uIHNwZWNzIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIGxvYWQgJXMgZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgYSBob3N0cyBmaWxlIHRvIGJlIHJlYWQgaW4gYWRkaXRpb24gdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0NgorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ3Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgTk9UIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ4Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0OQorbXNnaWQgIk1hcCBSRkMzMDQ2IGNpcmN1aXQtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTAKK21zZ2lkICJNYXAgUkZDMzA0NiByZW1vdGUtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTEKK21zZ2lkICJNYXAgUkZDMzk5MyBzdWJzY3JpYmVyLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjUyCittc2dpZCAiRG9uJ3QgZG8gREhDUCBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTMKK21zZ2lkICJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1NQorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1NworbXNnaWQgIlJldHVybiBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU4Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1OQorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBwb2xsICVzIGZpbGUsIHJlbG9hZCBvbmx5IG9uIFNJR0hVUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjYxCittc2dpZCAiRG8gTk9UIGNhY2hlIGZhaWxlZCBzZWFyY2ggcmVzdWx0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBuYW1lc2VydmVycyBzdHJpY3RseSBpbiB0aGUgb3JkZXIgZ2l2ZW4gaW4gJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2MworbXNnaWQgIlNwZWNpZnkgb3B0aW9ucyB0byBiZSBzZW50IHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY0Cittc2dpZCAiREhDUCBvcHRpb24gc2VudCBldmVuIGlmIHRoZSBjbGllbnQgZG9lcyBub3QgcmVxdWVzdCBpdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY1Cittc2dpZCAiU3BlY2lmeSBwb3J0IHRvIGxpc3RlbiBmb3IgRE5TIHJlcXVlc3RzIG9uIChkZWZhdWx0cyB0byA1MykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIHN1cHBvcnRlZCBVRFAgcGFja2V0IHNpemUgZm9yIEVETlMuMCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjcKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2OAorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY5Cittc2dpZCAiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjcxCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjcyCittc2dpZCAiTmV2ZXIgZm9yd2FyZCBxdWVyaWVzIHRvIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzMKK21zZ2lkICJTcGVjaWZ5IHRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgaW4gREhDUCBsZWFzZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3NAorbXNnaWQgIlNwZWNpZnkgZGVmYXVsdCB0YXJnZXQgaW4gYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzUKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciByZXBsaWVzIGZyb20gL2V0Yy9ob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc2Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbmVnYXRpdmUgY2FjaGluZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIHVzZXIgYWZ0ZXIgc3RhcnR1cC4gKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc4Cittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc5Cittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjgwCittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjgxCittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4MgorbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3AgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIkFuZ2FiZSBkZXIgS29uZmlndXJhdGlvbnNkYXRlaSAoVm9yZWluc3RlbGx1bmc6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NQorbXNnaWQgIkFuc3dlciBETlMgcXVlcmllcyBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlIGEgcXVlcnkgd2FzIHNlbnQgdG8uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NgorbXNnaWQgIlNwZWNpZnkgVFhUIEROUyByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NworbXNnaWQgIlNwZWNpZnkgUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4OAorbXNnaWQgIkdpdmUgRE5TIG5hbWUgdG8gSVB2NCBhZGRyZXNzIG9mIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg5Cittc2dpZCAiQmluZCBvbmx5IHRvIGludGVyZmFjZXMgaW4gdXNlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZCBESENQIHN0YXRpYyBob3N0IGluZm9ybWF0aW9uIGZyb20gJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MQorbXNnaWQgIkVuYWJsZSB0aGUgREJ1cyBpbnRlcmZhY2UgZm9yIHNldHRpbmcgdXBzdHJlYW0gc2VydmVycywgZXRjLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTIKK21zZ2lkICJEbyBub3QgcHJvdmlkZSBESENQIG9uIHRoaXMgaW50ZXJmYWNlLCBvbmx5IHByb3ZpZGUgRE5TLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTMKK21zZ2lkICJFbmFibGUgZHluYW1pYyBhZGRyZXNzIGFsbG9jYXRpb24gZm9yIGJvb3RwLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTQKK21zZ2lkICJNYXAgTUFDIGFkZHJlc3MgKHdpdGggd2lsZGNhcmRzKSB0byBvcHRpb24gc2V0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTUKK21zZ2lkICJUcmVhdCBESENQIHJlcXVlc3RzIG9uIGFsaWFzZXMgYXMgYXJyaXZpbmcgZnJvbSBpbnRlcmZhY2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NgorbXNnaWQgIkRpc2FibGUgSUNNUCBlY2hvIGFkZHJlc3MgY2hlY2tpbmcgaW4gdGhlIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTcKK21zZ2lkICJTY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTgKK21zZ2lkICJSZWFkIGNvbmZpZ3VyYXRpb24gZnJvbSBhbGwgdGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTkKK21zZ2lkICJMb2cgdG8gdGhpcyBzeXNsb2cgZmFjaWxpdHkgb3IgZmlsZS4gKGRlZmF1bHRzIHRvIERBRU1PTikiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzAwCittc2dpZCAiRG8gbm90IHVzZSBsZWFzZWZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzLiAoZGVmYXVsdHMgdG8gJXMpIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhciBETlMgY2FjaGUgd2hlbiByZWxvYWRpbmcgJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwMworbXNnaWQgIklnbm9yZSBob3N0bmFtZXMgcHJvdmlkZWQgYnkgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDQKK21zZ2lkICJEbyBOT1QgcmV1c2UgZmlsZW5hbWUgYW5kIHNlcnZlciBmaWVsZHMgZm9yIGV4dHJhIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzA1Cittc2dpZCAiRW5hYmxlIGludGVncmF0ZWQgcmVhZC1vbmx5IFRGVFAgc2VydmVyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDYKK21zZ2lkICJFeHBvcnQgZmlsZXMgYnkgVEZUUCBvbmx5IGZyb20gdGhlIHNwZWNpZmllZCBzdWJ0cmVlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDcKK21zZ2lkICJBZGQgY2xpZW50IElQIGFkZHJlc3MgdG8gdGZ0cC1yb290LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDgKK21zZ2lkICJBbGxvdyBhY2Nlc3Mgb25seSB0byBmaWxlcyBvd25lZCBieSB0aGUgdXNlciBydW5uaW5nIGRuc21hc3EuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25uY3VycmVudCBURlRQIHRyYW5zZmVycyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTAKK21zZ2lkICJEaXNhYmxlIHRoZSBURlRQIGJsb2Nrc2l6ZSBleHRlbnNpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxMQorbXNnaWQgIkVwaGVtZXJhbCBwb3J0IHJhbmdlIGZvciB1c2UgYnkgVEZUUCB0cmFuc2ZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxMgorbXNnaWQgIkV4dHJhIGxvZ2dpbmcgZm9yIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxMworbXNnaWQgIkVuYWJsZSBhc3luYy4gbG9nZ2luZzsgb3B0aW9uYWxseSBzZXQgcXVldWUgbGVuZ3RoLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTQKK21zZ2lkICJTdG9wIEROUyByZWJpbmRpbmcuIEZpbHRlciBwcml2YXRlIElQIHJhbmdlcyB3aGVuIHJlc29sdmluZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE1Cittc2dpZCAiQWx3YXlzIHBlcmZvcm0gRE5TIHF1ZXJpZXMgdG8gYWxsIHNlcnZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxNgorbXNnaWQgIlNldCB0YWcgaWYgY2xpZW50IGluY2x1ZGVzIG1hdGNoaW5nIG9wdGlvbiBpbiByZXF1ZXN0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTcKK21zZ2lkICJVc2UgYWx0ZXJuYXRpdmUgcG9ydHMgZm9yIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxOAorbXNnaWQgIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0IGFzIHRoaXMgdXNlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE5Cittc2dpZCAiU3BlY2lmeSBOQVBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjAKK21zZ2lkICJTcGVjaWZ5IGxvd2VzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzIxCittc2dpZCAiVXNlIG9ubHkgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lcyBmb3IgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjIKK21zZ2lkICJTcGVjaWZ5IGFsaWFzIG5hbWUgZm9yIExPQ0FMIEROUyBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjMKK21zZ2lkICJQcm9tcHQgdG8gc2VuZCB0byBQWEUgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI0Cittc2dpZCAiQm9vdCBzZXJ2aWNlIGZvciBQWEUgbWVudS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI1Cittc2dpZCAiQ2hlY2sgY29uZmlndXJhdGlvbiBzeW50YXguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjYxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBzaG9ydCBvcHRpb25zIG9ubHkgb24gdGhlIGNvbW1hbmQgbGluZS5cbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsaWQgb3B0aW9ucyBhcmU6XG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1Agb3B0aW9uczpcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3MzUKK21zZ2lkICJiYWQgZGhjcC1vcHRpb24iCittc2dzdHIgIiIKKworIyBAU2ltb246IEhlcmUgSSBuZWVkIGFuIGV4YW1wbGUgdG8gdW5kZXJzdGFuZCBpdCA6KQorIzogb3B0aW9uLmM6NzkyCisjLCBmdXp6eQorbXNnaWQgImJhZCBJUCBhZGRyZXNzIgorbXNnc3RyICJsZXNlICVzIC0gJWQgQWRyZXNzZW4iCisKKyM6IG9wdGlvbi5jOjg5MQorbXNnaWQgImJhZCBkb21haW4gaW4gZGhjcC1vcHRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6OTUwCittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6OTU5Cittc2dpZCAiaWxsZWdhbCBkaGNwLW1hdGNoIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjk5NQorbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQgZmxhZyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDAzCittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBrZXl3b3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEwODYgdGZ0cC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMTMxCittc2dpZCAib25seSBvbmUgZGhjcC1ob3N0c2ZpbGUgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMTM4Cittc2dpZCAib25seSBvbmUgZGhjcC1vcHRzZmlsZSBhbGxvd2VkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjExODMKK21zZ2lkICJiYWQgTVggcHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMTg4Cittc2dpZCAiYmFkIE1YIG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTIwMgorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTIxMgorbXNnaWQgImNhbm5vdCBydW4gc2NyaXB0cyB1bmRlciB1Q2xpbnV4IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEyMTQKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX1NDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNDQyIG9wdGlvbi5jOjE0NDYKK21zZ2lkICJiYWQgcG9ydCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNDY1IG9wdGlvbi5jOjE0OTAKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2MTEKK21zZ2lkICJiYWQgcG9ydCByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjI4Cittc2dpZCAiYmFkIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTY2OQorbXNnaWQgImJhZCBkaGNwLXJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2OTUKK21zZ2lkICJvbmx5IG9uZSBuZXRpZCB0YWcgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNzQwCittc2dpZCAiaW5jb25zaXN0ZW50IERIQ1AgcmFuZ2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTkxMgorbXNnaWQgImJhZCBESENQIGhvc3QgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMjAxIG9wdGlvbi5jOjI0ODEKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIyODQKK21zZ2lkICJpbnZhbGlkIGFsaWFzIHJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIyOTcKK21zZ2lkICJiYWQgaW50ZXJmYWNlIG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjMyMgorbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzI3Cittc2dpZCAiZHVwbGljYXRlIENOQU1FIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzNDcKK21zZ2lkICJiYWQgUFRSIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzc4Cittc2dpZCAiYmFkIE5BUFRSIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDAzCittc2dpZCAiVFhUIHJlY29yZCBzdHJpbmcgdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ1MQorbXNnaWQgImJhZCBUWFQgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0NjcKK21zZ2lkICJiYWQgU1JWIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDc0Cittc2dpZCAiYmFkIFNSViB0YXJnZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ4OAorbXNnaWQgImludmFsaWQgcHJpb3JpdHkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ5NQorbXNnaWQgImludmFsaWQgd2VpZ2h0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1MTQKK21zZ2lkICJ1bnN1cHBvcnRlZCBvcHRpb24gKGNoZWNrIHRoYXQgZG5zbWFzcSB3YXMgY29tcGlsZWQgd2l0aCBESENQL1RGVFAvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGVzIG5lc3RlZCB0b28gZGVlcCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTY1IHRmdHAuYzo1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2MjYKK21zZ2lkICJtaXNzaW5nIFwiIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NzMKK21zZ2lkICJiYWQgb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NzUKK21zZ2lkICJleHRyYW5lb3VzIHBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjc3Cittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY4NQorbXNnaWQgImVycm9yIgorbXNnc3RyICIiCisKKyMgQFNpbW9uOiAiU3BlaWNoZXIgbmljaHQgdmVyZsO8Z2JhciIgPSAibWVtb3J5IG5vdCBhdmFpbGFibGUiCisjIEBTaW1vbjogImNvdWxkIG5vdCBnZXQgbWVtb3J5IiA9ICJrb25udGUga2VpbmVuIFNwZWljaGVyIGJla29tbWVuIiBvciAia29ubnRlIFNwZWljaGVyIG5pY2h0IGJla29tbWVuIgorIyBAU2ltb246ICgia2VpbmVuIFNwZWljaGVyIiA9ICJubyBtZW1vcnkiLCAiLi4uIG5pY2h0IGJla29tbWVuIiA9ICIuLi4gbm90IGdldCIpIAorIyBAU2ltb246IGJvdGggd291bGQgYmUgY29ycmVjdCAtIGJ1dCB3b3VsZCBzb3VuZCByYXRoZXIgY2x1bXN5IGluIGdlcm1hbgorIyBAU2ltb246IGhvdyBhYm91dCAiTmljaHQgZ2Vuw7xnZW5kIFNwZWljaGVyIHZlcmbDvGdiYXIiID0gIk5vdCBlbm91Z2ggbWVtb3J5IGF2YWlsYWJsZSIgPworIzogb3B0aW9uLmM6MjY5MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhdCBsaW5lICVkIG9mICUlcyIKK21zZ3N0ciAiJXMgaW4gWmVpbGUgJWQgdm9uICUlcyIKKworIzogb3B0aW9uLmM6Mjc0MCBvcHRpb24uYzoyNzcxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29tcGlsZSB0aW1lIG9wdGlvbnMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdFxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIDMuXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg1OAorbXNnaWQgInRyeSAtLWhlbHAiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg2MAorbXNnaWQgInRyeSAtdyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODYzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb21tYW5kIGxpbmUgb3B0aW9uczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGhvc3QtbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkzMgorbXNnaWQgIm9ubHkgb25lIHJlc29sdi5jb25mIGZpbGUgYWxsb3dlZCBpbiBuby1wb2xsIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NDIKK21zZ2lkICJtdXN0IGhhdmUgZXhhY3RseSBvbmUgcmVzb2x2LmNvbmYgdG8gcmVhZCBkb21haW4gZnJvbS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk0NSBuZXR3b3JrLmM6NzU0IGRoY3AuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2VhcmNoIGRpcmVjdGl2ZSBmb3VuZCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTgzCittc2dpZCAidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5ODcKK21zZ2lkICJzeW50YXggY2hlY2sgT0siCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjQzNworbXNnaWQgInBvc3NpYmxlIEROUy1yZWJpbmQgYXR0YWNrIGRldGVjdGVkIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo0MTcgZG5zbWFzcS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpc3RlbmluZyBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBJUFY2IG9wdGlvbnMgb24gbGlzdGVuaW5nIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbGlzdGVuIG9uIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIFRGVFAgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIHNlcnZlciBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBsb2NhbCBpbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gY2Fubm90IG1ha2UvYmluZCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MjAKK21zZ2lkICJ1bnF1YWxpZmllZCIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzIwCittc2dpZCAibmFtZXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcyMgorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcyNAorbXNnaWQgImRvbWFpbiIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgZm9yICVzICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCh2aWEgJXMpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTQ2Cittc2dpZCAiVEZUUCBzZXJ2ZXIgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfVEZUUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE1MQorbXNnaWQgImFzeWNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBTb2xhcmlzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgbGlzdCBvZiBpbnRlcmZhY2VzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gaW50ZXJmYWNlIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjAxIGRuc21hc3EuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiREJ1cyBlcnJvcjogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIwNAorbXNnaWQgIkRCdXMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHVzZXIgb3IgZ3JvdXA6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBpbGUgdGltZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDYwCittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGNvbm5lY3RlZCB0byBzeXN0ZW0gYnVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0NjIKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogYnVzIGNvbm5lY3Rpb24gcGVuZGluZyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGZhaWxlZCB0byBjaGFuZ2Ugb3duZXIgb2YgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0NzEKK21zZ2lkICJzZXR0aW5nIC0tYmluZC1pbnRlcmZhY2VzIG9wdGlvbiBiZWNhdXNlIG9mIE9TIGxpbWl0YXRpb25zIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogaW50ZXJmYWNlICVzIGRvZXMgbm90IGN1cnJlbnRseSBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDgxCittc2dpZCAid2FybmluZzogaWdub3JpbmcgcmVzb2x2LWZpbGUgZmxhZyBiZWNhdXNlIG5vLXJlc29sdiBpcyBzZXQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ4NAorbXNnaWQgIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgc3RhdGljIGxlYXNlcyBvbmx5IG9uICUuMHMlcywgbGVhc2UgdGltZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIHByb3h5IG9uIHN1Ym5ldCAlLjBzJXMlLjBzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgSVAgcmFuZ2UgJXMgLS0gJXMsIGxlYXNlIHRpbWUgJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjUxOQorbXNnaWQgInJvb3QgaXMgIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo1MTkKK21zZ2lkICJlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo1MjEKK21zZ2lkICJzZWN1cmUgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3RyaWN0aW5nIG1heGltdW0gc2ltdWx0YW5lb3VzIFRGVFAgdHJhbnNmZXJzIHRvICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NjcKK21zZ2lkICJjb25uZWN0ZWQgdG8gc3lzdGVtIERCdXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBoZWxwZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgdXNlci1pZCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIGdyb3VwLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBpZGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hpbGQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hpbGQgcHJvY2VzcyBleGl0ZWQgd2l0aCBzdGF0dXMgJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg4NQorbXNnaWQgImV4aXRpbmcgb24gcmVjZWlwdCBvZiBTSUdURVJNIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2VydmVycyBmb3VuZCBpbiAlcywgd2lsbCByZXRyeSIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgSUNNUCByYXcgc29ja2V0OiAlcy4iCittc2dzdHIgIiIKKworIzogZGhjcC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmFuZ2UgJXMgLS0gJXMgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCBuZXRtYXNrICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGxpbmUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICVzIGxpbmUgJWQsIGR1cGxpY2F0ZSBuYW1lIG9yIElQIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gJXMuIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBpbiBob3N0c2ZpbGUsIHVzaW5nICVzIGZvciBESENQIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo5NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBvciBjcmVhdGUgbGVhc2UgZmlsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzo5MgorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJ1biBsZWFzZS1pbml0IHNjcmlwdCAlczogJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibGVhc2UtaW5pdCBzY3JpcHQgcmV0dXJuZWQgZXhpdCBjb2RlICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSAlczogJXMgKHJldHJ5IGluICV1cykiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUCByZXF1ZXN0ICVzICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozMzcKK21zZ2lkICJ3aXRoIHN1Ym5ldCBzZWxlY3RvciIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzM3Cittc2dpZCAidmlhIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgQXZhaWxhYmxlIERIQ1Agc3VibmV0OiAlcy8lcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IEF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6Mzg0Cittc2dpZCAiZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQxOCByZmMyMTMxLmM6ODgzIHJmYzIxMzEuYzoxMjQyCittc2dpZCAiaWdub3JlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NDMzIHJmYzIxMzEuYzoxMTAwCittc2dpZCAiYWRkcmVzcyBpbiB1c2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQ0NyByZmMyMTMxLmM6OTM3Cittc2dpZCAibm8gYWRkcmVzcyBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQ1NCByZmMyMTMxLmM6MTA2MworbXNnaWQgIndyb25nIG5ldHdvcmsiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQ2NworbXNnaWQgIm5vIGFkZHJlc3MgY29uZmlndXJlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NDczIHJmYzIxMzEuYzoxMTEzCittc2dpZCAibm8gbGVhc2VzIGxlZnQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjU1OAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgcHJvdmlkZXMgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBWZW5kb3IgY2xhc3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgVXNlciBjbGFzczogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjczNworbXNnaWQgIlBYRSBCSVMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6ODc0Cittc2dpZCAidW5rbm93biBsZWFzZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgd2FzIHByZXZpb3VzbHkgZGVjbGluZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjkzNSByZmMyMTMxLmM6MTEwNgorbXNnaWQgIm5vIHVuaXF1ZS1pZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAwMworbXNnaWQgIndyb25nIHNlcnZlci1JRCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAyMgorbXNnaWQgIndyb25nIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMzkKK21zZ2lkICJsZWFzZSBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwNzEKK21zZ2lkICJhZGRyZXNzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwODIKK21zZ2lkICJzdGF0aWMgbGVhc2UgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDg2Cittc2dpZCAiYWRkcmVzcyByZXNlcnZlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJhYmFuZG9uaW5nIGxlYXNlIHRvICVzIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHRhZ3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJvb3RmaWxlIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHNlcnZlciBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTYxMworIywgYy1mb3JtYXQKK21zZ2lkICIldSBuZXh0IHNlcnZlcjogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgREhDUC9CT09UUCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gcGFja2V0IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxOTE5Cittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGRvbWFpbiAlcyBmb3IgREhDUCBob3N0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjIwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVxdWVzdGVkIG9wdGlvbnM6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldGxpbmsuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXRsaW5rLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldGxpbmsgcmV0dXJucyBlcnJvcjogJXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjE1MAorbXNnaWQgImF0dGVtcHQgdG8gc2V0IGFuIElQdjYgc2VydmVyIGFkZHJlc3MgdmlhIERCdXMgLSBubyBJUHY2IHN1cHBvcnQiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjI4NgorbXNnaWQgInNldHRpbmcgdXBzdHJlYW0gc2VydmVycyBmcm9tIERCdXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjMyNAorbXNnaWQgImNvdWxkIG5vdCByZWdpc3RlciBhIERCdXMgbWVzc2FnZSBoYW5kbGVyIgorbXNnc3RyICIiCisKKyM6IGJwZi5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1AgQlBGIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogYnBmLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVxdWVzdCBmb3IgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgdHlwZSAoJWQpIHJlY2VpdmVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzoxNzkKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGZyZWUgcG9ydCBmb3IgVEZUUCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgc2VudCAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBlcnJvciAlZCAlcyByZWNlaXZlZCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcmZsb3c6ICVkIGxvZyBlbnRyaWVzIGxvc3QiCittc2dzdHIgIiIKKworIzogbG9nLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyMgQFNpbW9uOiBJIHdvdWxkIGxpa2UgdG8gaGF2ZSBhbiBleGFtcGxlIDopIC0gaW5zdGVhZCBvZiAidm9uIiBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byB1c2UgImF1cyIsCisjIEBTaW1vbjogYm90aCB0cmFuc2xhdGUgdG8gIm9mIiBhbmQgbm90aGluZyBlbHNlLCBidXQgZGVwZW5kaW5nIG9uIHRoZSBzZW5zZSBvbmUgY291bGQgYmUgYmV0dGVyIAorIyBAU2ltb246IHRoYW4gdGhlIG90aGVyLgorIzogbG9nLmM6NDE1Cittc2dpZCAiRkFJTEVEIHRvIHN0YXJ0IHVwIgorbXNnc3RyICJTdGFydCBnZXNjaGVpdGVydCIKKworIyBAU2ltb246IEhlcmUgSSBuZWVkIGFuIGV4YW1wbGUgdG8gdW5kZXJzdGFuZCBpdCA6KQorIywgZnV6enkKKyN+IG1zZ2lkICJyZWFkICVzIC0gJWQgaG9zdHMiCisjfiBtc2dzdHIgImxlc2UgJXMgLSAlZCBBZHJlc3NlbiIKZGlmZiAtLWdpdCBhL3BvL2VzLnBvIGIvcG8vZXMucG8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjAxZTE3MQotLS0gL2Rldi9udWxsCisrKyBiL3BvL2VzLnBvCkBAIC0wLDAgKzEsMTUwMCBAQAorIyBTcGFuaXNoIHRyYW5zbGF0aW9ucyBmb3IgZG5zbWFzcSBwYWNrYWdlLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBDaHJpc3RvcGhlciBDaGF0aGFtIDxjaHJpc2xpbnV4QGdtYWlsLmNvbT4sIDIwMDUuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBkbnNtYXNxIDIuMjRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDktMDYtMTggMTI6MjQrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMTAtMDcgMTE6MDQrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQ2hyaXN0b3BoZXIgQ2hhdGhhbSA8Y2hyaXNsaW51eEBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU3BhbmlzaCA8ZXNAbGkub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGNhY2hlLmM6NzY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjYXJnYXIgbm9tYnJlcyBkZXNkZSAlczogJXMiCisKKyM6IGNhY2hlLmM6Nzk4IGRoY3AuYzo3ODUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImRpcmVjY2nzbiBlcnLzbmVhIGVuICVzIGztbmVhICVkIgorCisjOiBjYWNoZS5jOjg1NiBkaGNwLmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIm5vbWJyZSBlcnLzbmVvIGVuICVzIGztbmVhICVkIgorCisjOiBjYWNoZS5jOjg2MyBkaGNwLmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMgLSAlZCBhZGRyZXNzZXMiCittc2dzdHIgImRpcmVjY2nzbmVzICVzIC0gJWQgbGXtZGFzIgorCisjOiBjYWNoZS5jOjkwMgorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgImVsIGNhY2jpIGZ1ZSBsaWJlcmFkbyIKKworIzogY2FjaGUuYzo5MzMgb3B0aW9uLmM6MTA1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyBkaXJlY3RvcnkgJXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBhY2Nlc2FyIGRpcmVjdG9yaW8gJXM6ICVzIgorCisjOiBjYWNoZS5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGdpdmluZyBuYW1lICVzIHRvIHRoZSBESENQIGxlYXNlIG9mICVzIGJlY2F1c2UgdGhlIG5hbWUgZXhpc3RzIGluICVzIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAibm8gb3RvcmdhbmRvIG5vbWJyZSAlcyBhbCBhcnJpZW5kbyBESENQIGRlICVzIHBvcnF1ZSBlbCBub21icmUgZXhpc3RlIGVuICVzIGNvbiBkaXJlY2Np824gJXMiCisKKyM6IGNhY2hlLmM6MTEyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lICVsdSIKK21zZ3N0ciAidGllbXBvICVsdSIKKworIzogY2FjaGUuYzoxMTMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYWNoZSBzaXplICVkLCAlZC8lZCBjYWNoZSBpbnNlcnRpb25zIHJlLXVzZWQgdW5leHBpcmVkIGNhY2hlIGVudHJpZXMuIgorbXNnc3RyICJ0YW1h8W8gZGUgY2FjaOkgJWQsICVkLyVkIGluc2VyY2nzbmVzIGRlIGNhY2jpIHJldXRpbGl6YXJvbiBvYmpldG9zIG5vIHZlbmNpZG9zLiIKKworIzogY2FjaGUuYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yd2FyZGVkICV1LCBxdWVyaWVzIGFuc3dlcmVkIGxvY2FsbHkgJXUiCittc2dzdHIgImL6c3F1ZWRhcyByZWVudmlhZGFzICV1LCBi+nNxdWVkYXMgcmVzcG9uZGlkYXMgbG9jYWxtZW50ZSAldSIKKworIzogY2FjaGUuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciAlcyMlZDogcXVlcmllcyBzZW50ICV1LCByZXRyaWVkIG9yIGZhaWxlZCAldSIKK21zZ3N0ciAic2Vydmlkb3IgJXMjJWQ6IGL6c3F1ZWRhcyBlbnZpYWRhcyAldSwgcmVpbnRlbnRhZGFzIG8gZmFsbGlkYXMgJXUiCisKKyM6IHV0aWwuYzo1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciB2YWxvciBzZW1pbGxhIHBhcmEgZWwgZ2VuZXJhZG9yIGRlIG76bWVyb3MgYWxlYXRvcmlvczogJXMiCisKKyM6IHV0aWwuYzoxOTEKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAibm8gc2UgcHVkbyBhbG9jYXIgJWQgYnl0ZXMiCisKKyM6IHV0aWwuYzoyMjkgb3B0aW9uLmM6NTQ4Cittc2dpZCAiY291bGQgbm90IGdldCBtZW1vcnkiCittc2dzdHIgIm5vIHNlIHB1ZG8gYWRxdWlyaXIgbWVtb3JpYSIKKworIzogdXRpbC5jOjIzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgcGlwZTogJXMiCisKKyM6IHV0aWwuYzoyNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhbG9jYXIgJWQgYnl0ZXMiCisKKyM6IHV0aWwuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5maW5pdGUiCittc2dzdHIgImluZmluaXRvIgorCisjOiBvcHRpb24uYzoyMjgKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGRpcmVjY2nzbihlcykgbG9jYWxlcyBk825kZSBlc2N1Y2hhci4iCisKKyM6IG9wdGlvbi5jOjIyOQorbXNnaWQgIlJldHVybiBpcGFkZHIgZm9yIGFsbCBob3N0cyBpbiBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIlJldG9ybmFyIGlwYWRkciAoZGlyZWNjafNuIElQKSBwYXJhIHRvZG9zIGxvcyBob3N0cyBlbiBsb3MgZG9taW5pb3MgZXNwZWNpZmljYWRvcy4iCisKKyM6IG9wdGlvbi5jOjIzMAorbXNnaWQgIkZha2UgcmV2ZXJzZSBsb29rdXBzIGZvciBSRkMxOTE4IHByaXZhdGUgYWRkcmVzcyByYW5nZXMuIgorbXNnc3RyICJGYWxzaWZpY2FyIGL6c3F1ZWRhcyByZXZlcnNhcyBwYXJhIHJhbmdvcyBkZSBkaXJlY2Np824gcHJpdmFkb3MgUkZDMTkxOC4iCisKKyM6IG9wdGlvbi5jOjIzMQorbXNnaWQgIlRyZWF0IGlwYWRkciBhcyBOWERPTUFJTiAoZGVmZWF0cyBWZXJpc2lnbiB3aWxkY2FyZCkuIgorbXNnc3RyICJUcmF0YXIgaXBhZGRyIChkaXJlY2Np824gSVApIGNvbW8gTlhET01BSU4gKGRlcnJvdGEgY29tb2TtbiBWZXJpc2lnbikuIgorCisjOiBvcHRpb24uYzoyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgaW4gZW50cmllcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgdGFtYfFvIGRlIGNhY2jpIGVuIGN1YW50byBhIGNhbnRpZGFkIGRlIG9iamV0b3MgKCVzIHBvciBwcmVkZXRlcm1pbmFkbykuIgorCisjOiBvcHRpb24uYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGFyY2hpdm8gZGUgY29uZmlndXJhY2nzbiAoJXMgcG9yIHByZWRldGVybWluYWRvKS4iCisKKyM6IG9wdGlvbi5jOjIzNAorbXNnaWQgIkRvIE5PVCBmb3JrIGludG8gdGhlIGJhY2tncm91bmQ6IHJ1biBpbiBkZWJ1ZyBtb2RlLiIKK21zZ3N0ciAiTk8gaGFjZXIgdW4gZm9yayBoYWNpYSBlbCBmb25kbzogY29ycmVyIGVuIG1vZG8gZGVidWcuIgorCisjOiBvcHRpb24uYzoyMzUKK21zZ2lkICJEbyBOT1QgZm9yd2FyZCBxdWVyaWVzIHdpdGggbm8gZG9tYWluIHBhcnQuIgorbXNnc3RyICJOTyByZWVudmlhciBi+nNxdWVkYXMgc2luIHBhcnRlIGRlIGRvbWluaW8uIgorCisjOiBvcHRpb24uYzoyMzYKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIlJldG9ybmFyIGV4cGVkaWVudGVzIE1YIGF1dG8tc2XxYWxhZG9yZXMgcGFyYSBob3N0cyBsb2NhbGVzLiIKKworIzogb3B0aW9uLmM6MjM3Cittc2dpZCAiRXhwYW5kIHNpbXBsZSBuYW1lcyBpbiAvZXRjL2hvc3RzIHdpdGggZG9tYWluLXN1ZmZpeC4iCittc2dzdHIgIkV4cGFuZGlyIG5vbWJyZXMgc2ltcGxlcyBlbiAvZXRjL2hvc3RzIGNvbiBkb21haW4tc3VmZml4IChzdWZpam8gZGUgZG9taW5pbykuIgorCisjOiBvcHRpb24uYzoyMzgKK21zZ2lkICJEb24ndCBmb3J3YXJkIHNwdXJpb3VzIEROUyByZXF1ZXN0cyBmcm9tIFdpbmRvd3MgaG9zdHMuIgorbXNnc3RyICJObyByZWVudmlhciBwZWRpZG9zIEROUyBmYWxzb3MgZGVzZGUgbeFxdWluYXMgV2luZG93cy4iCisKKyM6IG9wdGlvbi5jOjIzOQorbXNnaWQgIkVuYWJsZSBESENQIGluIHRoZSByYW5nZSBnaXZlbiB3aXRoIGxlYXNlIGR1cmF0aW9uLiIKK21zZ3N0ciAiSGFiaWxpdGFyIERIQ1AgZGVudHJvIGRlbCByYW5nbyBicmluZGFkbyBjb24gZHVyYWNp824gZGVsIGFycmllbmRvLiIKKworIzogb3B0aW9uLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIGdyb3VwIGFmdGVyIHN0YXJ0dXAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIkNhbWJpYXIgYSBlc3RlIGdydXBvIGRlc3B16XMgZGVsIGluaWNpbyAoJXMgcG9yIHByZWRldGVybWluYWRvKS4iCisKKyM6IG9wdGlvbi5jOjI0MQorbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiRmlqYXIgZGlyZWNjafNuIG8gbm9tYnJlIGRlIGhvc3QgcGFyYSB1bmEgbeFxdWluYSBlc3BlY2lmaWNhZGEuIgorCisjOiBvcHRpb24uYzoyNDIKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUiCittc2dzdHIgIkxlZXIgZXNwZWNpZmljYWNpb25lcyBESENQIGRlIGhvc3QgZGVzZGUgYXJjaGl2byIKKworIzogb3B0aW9uLmM6MjQzCittc2dpZCAiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUiCittc2dzdHIgIkxlZXIgb3BjaW9uZXMgREhDUCBkZSBob3N0IGRlc2RlIGFyY2hpdm8iCisKKyM6IG9wdGlvbi5jOjI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgbG9hZCAlcyBmaWxlLiIKK21zZ3N0ciAiTk8gY2FyZ2FyIGFyY2hpdm8gJXMuIgorCisjOiBvcHRpb24uYzoyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBhIGhvc3RzIGZpbGUgdG8gYmUgcmVhZCBpbiBhZGRpdGlvbiB0byAlcy4iCittc2dzdHIgIkVzcGVjaWZpY2FyIHVuIGFyY2hpdm8gZGUgaG9zdHMgcGFyYSBzZXIgbGXtZG8gYWRpY2lvbmFsbWVudGUgYSAlcy4iCisKKyM6IG9wdGlvbi5jOjI0NgorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGludGVyZmFjZShzKSBkb25kZSBlc2N1Y2hhci4iCisKKyM6IG9wdGlvbi5jOjI0NworbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIE5PVCB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJFc3BlY2lmaWNhciBpbnRlcmZhY2UocykgZG9uZGUgTk8gZXNjdWNoYXIuIgorCisjOiBvcHRpb24uYzoyNDgKKyMsIGZ1enp5Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJUcmF6YXIgY2xhc2UgZGUgdXN1YXJpbyBESENQIGEgZXRpcXVldGEuIgorCisjOiBvcHRpb24uYzoyNDkKK21zZ2lkICJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iCittc2dzdHIgIlRyYXphciBjaXJjdWl0LWlkIChpZGVudGlmaWNhY2nzbiBkZSBjaXJjdWl0bykgUkZDMzA0NiBhIGV0aXF1ZXRhLiIKKworIzogb3B0aW9uLmM6MjUwCittc2dpZCAiTWFwIFJGQzMwNDYgcmVtb3RlLWlkIHRvIHRhZy4iCittc2dzdHIgIlRyYXphciByZW1vdGUtaWQgKGlkZW50aWZpY2FjafNuIHJlbW90YSkgUkZDMzA0NiBhIGV0aXF1ZXRhLiIKKworIzogb3B0aW9uLmM6MjUxCittc2dpZCAiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIgorbXNnc3RyICJUcmF6YXIgc3Vic2NyaWJlci1pZCAoaWRlbnRpZmljYWNp824gZGUgc3VzY3JpdG9yKSBSRkMzOTkzIGEgZXRpcXVldGEuIgorCisjOiBvcHRpb24uYzoyNTIKKyMsIGZ1enp5Cittc2dpZCAiRG9uJ3QgZG8gREhDUCBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiTm8gaGFjZXIgREhDUCBwYXJhIGhvc3RzIGNvbiBldGlxdWV0YSBmaWphZGEuIgorCisjOiBvcHRpb24uYzoyNTMKKyMsIGZ1enp5Cittc2dpZCAiRm9yY2UgYnJvYWRjYXN0IHJlcGxpZXMgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIkZvcnphciByZXNwdWVzdGFzIGJyb2FkY2FzdCBwYXJhIGhvc3RzIGNvbiBldGlxdWV0YSBmaWphZGEuIgorCisjOiBvcHRpb24uYzoyNTQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICJOTyBoYWNlciB1biBmb3JrIGhhY2lhIGVsIGZvbmRvLCBOTyBjb3JyZXIgZW4gbW9kbyBkZWJ1Zy4iCisKKyM6IG9wdGlvbi5jOjI1NQorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICJBc3VtaXIgcXVlIHNvbW9zIGVsIPpuaWNvIHNlcnZpZG9yIERIQ1AgZW4gbGEgcmVkIGxvY2FsLiIKKworIzogb3B0aW9uLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgd2hlcmUgdG8gc3RvcmUgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGRvbmRlIGFsbWFjZW5hciBhcnJpZW5kb3MgREhDUCAoJXMgcG9yIHByZWRldGVybWluYWRvKS4iCisKKyM6IG9wdGlvbi5jOjI1NworbXNnaWQgIlJldHVybiBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIlJldG9ybmFyIGV4cGVkaWVudGVzIE1YIHBhcmEgaG9zdHMgbG9jYWxlcy4iCisKKyM6IG9wdGlvbi5jOjI1OAorbXNnaWQgIlNwZWNpZnkgYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgdW4gZXhwZWRpZW50ZSBNWC4iCisKKyM6IG9wdGlvbi5jOjI1OQorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIkVzcGVjaWZpY2FyIG9wY2lvbmVzIEJPT1RQIGEgc2Vydmlkb3IgREhDUC4iCisKKyM6IG9wdGlvbi5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgcG9sbCAlcyBmaWxlLCByZWxvYWQgb25seSBvbiBTSUdIVVAuIgorbXNnc3RyICJOTyByZXZpc2FyIGFyY2hpdm8gJXMgcGVyafNkaWNhbWVudGUsIHJlY2FyZ2FyIHNvbG8gY29uIFNJR0hVUC4iCisKKyM6IG9wdGlvbi5jOjI2MQorbXNnaWQgIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIgorbXNnc3RyICJOTyBhbG1hY2VuYXIgZW4gY2FjaOkgcmVzdWx0YWRvcyBkZSBi+nNxdWVkYXMgZmFsbGlkYXMuIgorCisjOiBvcHRpb24uYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIG5hbWVzZXJ2ZXJzIHN0cmljdGx5IGluIHRoZSBvcmRlciBnaXZlbiBpbiAlcy4iCittc2dzdHIgIlVzYXIgc2Vydmlkb3JlcyBETlMgZXN0cmljdGFtZW50ZSBlbiBlbCDzcmRlbiBicmluZGFkbyBlbiAlcy4iCisKKyM6IG9wdGlvbi5jOjI2MworIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IG9wdGlvbnMgdG8gYmUgc2VudCB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICJFc3BlY2lmaWNhciBvcGNpb25lcyBwYXJhIHNlciBlbnZpYWRhcyBhIGNsaWVudGVzIERIQ1AuIgorCisjOiBvcHRpb24uYzoyNjQKK21zZ2lkICJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIKK21zZ3N0ciAiT3BjafNuIERIQ1AgZW52aWFkYSBh+m4gc2kgZWwgY2xpZW50ZSBubyBsYSBwaWRlLiIKKworIzogb3B0aW9uLmM6MjY1Cittc2dpZCAiU3BlY2lmeSBwb3J0IHRvIGxpc3RlbiBmb3IgRE5TIHJlcXVlc3RzIG9uIChkZWZhdWx0cyB0byA1MykuIgorbXNnc3RyICJFc3BlY2lmaWNhciBwdWVydG8gZG9uZGUgZXNjdWNoYXIgcG9yIGL6c3F1ZWRhcyBETlMgKDUzIHBvciBwcmVkZXRlcm1pbmFkbykuIgorCisjOiBvcHRpb24uYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBzdXBwb3J0ZWQgVURQIHBhY2tldCBzaXplIGZvciBFRE5TLjAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlRhbWHxbyBt4XhpbW8gZGUgcGFxdWV0ZXMgVURQIHNvcG9ydGFkbyBwYXJhIEVETlMuMCAoJXMgcG9yIHByZWRldGVybWluYWRvKS4iCisKKyM6IG9wdGlvbi5jOjI2NworIywgZnV6enkKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJCaXRhY29yZWFyIGL6c3F1ZWRhcyBETlMuIgorCisjOiBvcHRpb24uYzoyNjgKKyMsIGZ1enp5Cittc2dpZCAiRm9yY2UgdGhlIG9yaWdpbmF0aW5nIHBvcnQgZm9yIHVwc3RyZWFtIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiRW5mb3J6YXIgZWwgcHVlcnRvIG9yaWdpbmFsIHBhcmEgYvpzcXVlZGFzIEROUyB1cHN0cmVhbS4iCisKKyM6IG9wdGlvbi5jOjI2OQorbXNnaWQgIkRvIE5PVCByZWFkIHJlc29sdi5jb25mLiIKK21zZ3N0ciAiTk8gbGVlciByZXNvbHYuY29uZi4iCisKKyM6IG9wdGlvbi5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGVsIHBhdGggaGFjaWEgcmVzb2x2LmNvbmYgKCVzIHBvciBwcmVkZXRlcm1pbmFkbykuIgorCisjOiBvcHRpb24uYzoyNzEKK21zZ2lkICJTcGVjaWZ5IGFkZHJlc3MoZXMpIG9mIHVwc3RyZWFtIHNlcnZlcnMgd2l0aCBvcHRpb25hbCBkb21haW5zLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgZGlyZWNjafNuKGVzKSBkZSBzZXJ2aWRvcmVzIHVwc3RyZWFtIGNvbiBkb21pbmlvcyBvcGNpb25hbGVzLiIKKworIzogb3B0aW9uLmM6MjcyCittc2dpZCAiTmV2ZXIgZm9yd2FyZCBxdWVyaWVzIHRvIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiTnVuY2EgcmVlbnZpYXIgYvpzcXVlZGFzIGEgZG9taW5pb3MgZXNwZWNpZmljYWRvcy4iCisKKyM6IG9wdGlvbi5jOjI3MworbXNnaWQgIlNwZWNpZnkgdGhlIGRvbWFpbiB0byBiZSBhc3NpZ25lZCBpbiBESENQIGxlYXNlcy4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGVsIGRvbWluaW8gcGFyYSBzZXIgYXNpZ25hZG8gZW4gYXJyaWVuZG9zIERIQ1AuIgorCisjOiBvcHRpb24uYzoyNzQKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGRlc3Rpbm8gcHJlZGV0ZXJtaW5hZG8gZW4gdW4gZXhwZWRpZW50ZSBNWC4iCisKKyM6IG9wdGlvbi5jOjI3NQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIHJlcGxpZXMgZnJvbSAvZXRjL2hvc3RzLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgdGllbXBvIGRlIHZpZGEgZW4gc2VndW5kb3MgcGFyYSByZXNwdWVzdGFzIGRlc2RlIC9ldGMvaG9zdHMuIgorCisjOiBvcHRpb24uYzoyNzYKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbmVnYXRpdmUgY2FjaGluZy4iCittc2dzdHIgIkVzcGVjaWZpY2FyIHRpZW1wbyBkZSB2aWRhIGVuIHNlZ3VuZG9zIHBhcmEgY2FjaOkgbmVnYXRpdm8uIgorCisjOiBvcHRpb24uYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgdXNlciBhZnRlciBzdGFydHVwLiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiQ2FtYmlhciBhIGVzdGUgdXN1YXJpbyBkZXNwdWVzIGRlbCBpbmljaW8gKCVzIHBvciBwcmVkZXRlcm1pbmFkbykuIgorCisjOiBvcHRpb24uYzoyNzgKKyMsIGZ1enp5Cittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIlRyYXphciBjbGFzZSBkZSB2ZW5kZWRvciBESENQIGEgZXRpcXVldGEuIgorCisjOiBvcHRpb24uYzoyNzkKK21zZ2lkICJEaXNwbGF5IGRuc21hc3EgdmVyc2lvbiBhbmQgY29weXJpZ2h0IGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiTW9zdHJhciBpbmZvcm1hY2nzbiBzb2JyZSBsYSB2ZXJzafNuIHkgY29weXJpZ2h0IGRlIGRuc21hc3EuIgorCisjOiBvcHRpb24uYzoyODAKK21zZ2lkICJUcmFuc2xhdGUgSVB2NCBhZGRyZXNzZXMgZnJvbSB1cHN0cmVhbSBzZXJ2ZXJzLiIKK21zZ3N0ciAiVHJhZHVjaXIgZGlyZWNjaW9uZXMgSVB2NCBkZXNkZSBzZXJ2aWRvcmVzIHVwc3RyZWFtLiIKKworIzogb3B0aW9uLmM6MjgxCittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICJFc3BlY2lmaWNhciB1biBleHBlZGllbnRlIFNSVi4iCisKKyM6IG9wdGlvbi5jOjI4MgorbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3AgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIk1vc3RyYXIgZXN0ZSBtZW5zYWplLiBVc2FyIC0taGVscCBkaGNwIHBhcmEgb3BjaW9uZXMgREhDUCBjb25vY2lkYXMuIgorCisjOiBvcHRpb24uYzoyODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCBvZiBQSUQgZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgcGF0aCBkZSBhcmNoaXZvIFBJRCAoJXMgcG9yIHByZWRldGVybWluYWRvKS4iCisKKyM6IG9wdGlvbi5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJFc3BlY2lmaWNhciBu+m1lcm8gbeF4aW1vIGRlIGFycmllbmRvcyBESENQICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIzogb3B0aW9uLmM6Mjg1Cittc2dpZCAiQW5zd2VyIEROUyBxdWVyaWVzIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgYSBxdWVyeSB3YXMgc2VudCB0by4iCittc2dzdHIgIlJlc3BvbmRlciBhIGL6c3F1ZWRhcyBETlMgZW4gYmFzZSBhIGxhIGludGVyZmFjZSBhIGxhIGN14WwgZnVlcm9uIGVudmlhZGFzLiIKKworIzogb3B0aW9uLmM6Mjg2Cittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGV4cGVkaWVudGUgRE5TIFRYVC4iCisKKyM6IG9wdGlvbi5jOjI4NworIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IFBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgZXhwZWRpZW50ZSBETlMgUFRSLiIKKworIzogb3B0aW9uLmM6Mjg4Cittc2dpZCAiR2l2ZSBETlMgbmFtZSB0byBJUHY0IGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiIKK21zZ3N0ciAiT3RvcmdhciBub21icmUgRE5TIGEgZGlyZWNjafNuIElQdjQgZGUgaW50ZXJmYWNlLiIKKworIzogb3B0aW9uLmM6Mjg5Cittc2dpZCAiQmluZCBvbmx5IHRvIGludGVyZmFjZXMgaW4gdXNlLiIKK21zZ3N0ciAiQWNvcGxhciBzb2xvIGEgaW50ZXJmYWNlcyBlbiB1c28uIgorCisjOiBvcHRpb24uYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZCBESENQIHN0YXRpYyBob3N0IGluZm9ybWF0aW9uIGZyb20gJXMuIgorbXNnc3RyICJMZWVyIGluZm9ybWFjafNuIHNvYnJlIGhvc3RzIERIQ1AgZXN04XRpY29zIGRlc2RlICVzLiIKKworIzogb3B0aW9uLmM6MjkxCittc2dpZCAiRW5hYmxlIHRoZSBEQnVzIGludGVyZmFjZSBmb3Igc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzLCBldGMuIgorbXNnc3RyICJIYWJpbGl0YXIgbGEgaW50ZXJmYWNlIERCdXMgcGFyYSBmaWphciBzZXJ2aWRvcmVzIHVwc3RyZWFtLCBldGMuIgorCisjOiBvcHRpb24uYzoyOTIKK21zZ2lkICJEbyBub3QgcHJvdmlkZSBESENQIG9uIHRoaXMgaW50ZXJmYWNlLCBvbmx5IHByb3ZpZGUgRE5TLiIKK21zZ3N0ciAiTm8gcHJvdmVlciBESENQIGVuIGVzdGEgaW50ZXJmYWNlLCBz82xvIHByb3ZlZXIgRE5TLiIKKworIzogb3B0aW9uLmM6MjkzCittc2dpZCAiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iCittc2dzdHIgIkhhYmlsaXRhciBhbG9jYWNp824gZGlu4W1pY2EgZGUgZGlyZWNjafNuZXMgcGFyYSBCT09UUC4iCisKKyM6IG9wdGlvbi5jOjI5NAorIywgZnV6enkKK21zZ2lkICJNYXAgTUFDIGFkZHJlc3MgKHdpdGggd2lsZGNhcmRzKSB0byBvcHRpb24gc2V0LiIKK21zZ3N0ciAiVHJhemFyIGRpcmVjY2nzbiBNQUMgKGNvbiBjb21vZO1uZXMpIGEgb3BjafNuIGZpamFkYS4iCisKKyM6IG9wdGlvbi5jOjI5NQorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIlRyYXRhciBwZWRpZG9zIERIQ1AgZW4gYWxpYXMgY29tbyBzaSBsbGVnYXJhbiBkZSBsYSBpbnRlcmZhY2UuIgorCisjOiBvcHRpb24uYzoyOTYKK21zZ2lkICJEaXNhYmxlIElDTVAgZWNobyBhZGRyZXNzIGNoZWNraW5nIGluIHRoZSBESENQIHNlcnZlci4iCittc2dzdHIgIkRlc2hhYmlsaXRhciB2ZXJpZmljYWNp824gZGUgZGlyZWNjafNuZXMgcGFyYSBlY2hvIElDTVAgZW4gZWwgc2Vydmlkb3IgREhDUC4iCisKKyM6IG9wdGlvbi5jOjI5NworbXNnaWQgIlNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICJBcmNoaXZvIGd1afNuIHBhcmEgZWplY3V0YXIgY3VhbmRvIHNlIGNyZWEgbyBkZXN0cnV5ZSB1biBhcnJpZW5kbyBESENQLiIKKworIzogb3B0aW9uLmM6Mjk4Cittc2dpZCAiUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4iCittc2dzdHIgIkxlZXIgY29uZmlndXJhY2nzbiBkZXNkZSB0b2RvcyBsb3MgYXJjaGl2b3MgZW4gZXN0ZSBkaXJlY3RvcmlvLiIKKworIzogb3B0aW9uLmM6Mjk5CisjLCBmdXp6eQorbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiQml0YWNvcmVhciBhIGVzdGEgZmFjaWxpZGFkIHN5c2xvZyBvIGFyY2hpdm8uIChEQUVNT04gcG9yIHByZWRldGVybWluYWRvKSIKKworIzogb3B0aW9uLmM6MzAwCittc2dpZCAiRG8gbm90IHVzZSBsZWFzZWZpbGUuIgorbXNnc3RyICJObyB1c2FyIGFyY2hpdm8gZGUgYXJyaWVuZG9zLiIKKworIzogb3B0aW9uLmM6MzAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzLiAoZGVmYXVsdHMgdG8gJXMpIgorbXNnc3RyICJO+m1lcm8gbeF4aW1vIGRlIGL6c3F1ZWRhcyBETlMgc2ltdWx04W5lYXMuICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pIgorCisjOiBvcHRpb24uYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIKK21zZ3N0ciAiTGliZXJhciBjYWNo6SBETlMgYWwgcmVjYXJnYXIgJXMuIgorCisjOiBvcHRpb24uYzozMDMKK21zZ2lkICJJZ25vcmUgaG9zdG5hbWVzIHByb3ZpZGVkIGJ5IERIQ1AgY2xpZW50cy4iCittc2dzdHIgIklnbm9yYXIgbm9tYnJlcyBkZSBob3N0IGJyaW5kYWRvcyBwb3IgY2xpZW50ZXMgREhDUC4iCisKKyM6IG9wdGlvbi5jOjMwNAorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiTk8gcmV1dGlsaXphciBjYW1wb3MgZGUgbm9tYnJlIGRlIGFyY2hpdm8geSBzZXJ2aWRvciBwYXJhIG9wY2lvbmVzIERIQ1AgZXh0cmEuIgorCisjOiBvcHRpb24uYzozMDUKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICJIYWJpbGl0YXIgc2Vydmlkb3IgaW50ZWdyYWRvIFRGVFAgc29sby1sZWN0dXJhLiIKKworIzogb3B0aW9uLmM6MzA2Cittc2dpZCAiRXhwb3J0IGZpbGVzIGJ5IFRGVFAgb25seSBmcm9tIHRoZSBzcGVjaWZpZWQgc3VidHJlZS4iCittc2dzdHIgIkV4cG9ydGFyIGFyY2hpdm9zIHbtYSBURlRQIHNvbG8gZGVsIHN1Yi3hcmJvbCBlc3BlY2lmaWNhZG8uIgorCisjOiBvcHRpb24uYzozMDcKK21zZ2lkICJBZGQgY2xpZW50IElQIGFkZHJlc3MgdG8gdGZ0cC1yb290LiIKK21zZ3N0ciAiQWdyZWdhciBJUCBkZSBjbGllbnRlIGEgdGZ0cC1yb290LiIKKworIzogb3B0aW9uLmM6MzA4Cittc2dpZCAiQWxsb3cgYWNjZXNzIG9ubHkgdG8gZmlsZXMgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBkbnNtYXNxLiIKK21zZ3N0ciAiUGVybWl0aXIgYWNjZXNvIHNvbG8gYSBhcmNoaXZvcyBwZXJ0ZW5lY2llbnRlcyBhbCB1c3VhcmlvIHF1ZSBjb3JyZSBkbnNtYXNxLiIKKworIzogb3B0aW9uLmM6MzA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25uY3VycmVudCBURlRQIHRyYW5zZmVycyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiTvptZXJvIG3heGltbyBkZSB0cmFuc2ZlcmVuY2lhcyBURlRQIHNpbXVsdOFuZWFzICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIzogb3B0aW9uLmM6MzEwCittc2dpZCAiRGlzYWJsZSB0aGUgVEZUUCBibG9ja3NpemUgZXh0ZW5zaW9uLiIKK21zZ3N0ciAiRGVzaGFiaWxpdGFyIGxhIGV4dGVuc2nzbiBURlRQIGJsb2Nrc2l6ZSAodGFtYfFvIGRlIGJsb3F1ZSkuIgorCisjOiBvcHRpb24uYzozMTEKK21zZ2lkICJFcGhlbWVyYWwgcG9ydCByYW5nZSBmb3IgdXNlIGJ5IFRGVFAgdHJhbnNmZXJzLiIKK21zZ3N0ciAiUmFuZ28gZGUgcHVlcnRvcyBlZu1tZXJvcyBwYXJhIHNlciB1c2Fkb3MgcG9yIHRyYW5zZmVyZW5jaWFzIFRGVFAuIgorCisjOiBvcHRpb24uYzozMTIKK21zZ2lkICJFeHRyYSBsb2dnaW5nIGZvciBESENQLiIKK21zZ3N0ciAiQml0YWNvcmVvIGV4dHJhIHBhcmEgREhDUC4iCisKKyM6IG9wdGlvbi5jOjMxMworbXNnaWQgIkVuYWJsZSBhc3luYy4gbG9nZ2luZzsgb3B0aW9uYWxseSBzZXQgcXVldWUgbGVuZ3RoLiIKK21zZ3N0ciAiSGFiaWxpdGFyIGJpdGFjb3JlbyBhc2luY3Lzbmljbzsgb3BjaW9uYWxtZW50ZSBmaWphciB0YW1h8W8gZGUgY29sYS4iCisKKyM6IG9wdGlvbi5jOjMxNAorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiRGV0ZW5lciByZXZpbmN1bGFjafNuIEROUy4gRmlsdHJhciByYW5nb3MgZGUgSVAgcHJpdmFkb3MgYWwgcmVzb2x2ZXIuIgorCisjOiBvcHRpb24uYzozMTUKK21zZ2lkICJBbHdheXMgcGVyZm9ybSBETlMgcXVlcmllcyB0byBhbGwgc2VydmVycy4iCittc2dzdHIgIlNpZW1wcmUgcmVhbGl6YXIgYvpzcXVlZGFzIEROUyBhIHRvZG9zIGxvcyBzZXJ2aWRvcmVzLiIKKworIzogb3B0aW9uLmM6MzE2CisjLCBmdXp6eQorbXNnaWQgIlNldCB0YWcgaWYgY2xpZW50IGluY2x1ZGVzIG1hdGNoaW5nIG9wdGlvbiBpbiByZXF1ZXN0LiIKK21zZ3N0ciAiRmlqYXIgZXRpcXVldGEgc2kgY2xpZW50ZSBpbmNsdXllIG9wY2nzbiBjb2luY2lkZW50ZSBlbiBwZWRpZG8uIgorCisjOiBvcHRpb24uYzozMTcKK21zZ2lkICJVc2UgYWx0ZXJuYXRpdmUgcG9ydHMgZm9yIERIQ1AuIgorbXNnc3RyICJVc2FyIHB1ZXJ0b3MgYWx0ZXJuYXRpdm9zIHBhcmEgREhDUC4iCisKKyM6IG9wdGlvbi5jOjMxOAorbXNnaWQgIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0IGFzIHRoaXMgdXNlci4iCittc2dzdHIgIkNvcnJlciBhcmNoaXZvIGd1afNuIGRlIGNhbWJpbyBkZSBhcnJpZW5kb3MgY29tbyBlc3RlIHVzdWFyaW8uIgorCisjOiBvcHRpb24uYzozMTkKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBOQVBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgZXhwZWRpZW50ZSBETlMgTkFQVFIuIgorCisjOiBvcHRpb24uYzozMjAKK21zZ2lkICJTcGVjaWZ5IGxvd2VzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iCittc2dzdHIgIkVzcGVjaWZpY2FyIHB1ZXJ0byBt4XMgYmFqbyBkaXNwb25pYmxlIHBhcmEgdHJhbnNtaXNp824gZGUgYvpzcXVlZGFzIEROUy4iCisKKyM6IG9wdGlvbi5jOjMyMQorbXNnaWQgIlVzZSBvbmx5IGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZXMgZm9yIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIlVzYXIgc29sbyBub21icmVzIGRlIGRvbWluaW8gY29tcGxldGFtZW50ZSBjYWxpZmljYWRvcyBwYXJhIGNsaWVudGVzIERIQ1AuIgorCisjOiBvcHRpb24uYzozMjIKK21zZ2lkICJTcGVjaWZ5IGFsaWFzIG5hbWUgZm9yIExPQ0FMIEROUyBuYW1lLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgbm9tYnJlIGFsaWFzIHBhcmEgbm9tYnJlIEROUyBMT0NBTC4iCisKKyM6IG9wdGlvbi5jOjMyMworIywgZnV6enkKK21zZ2lkICJQcm9tcHQgdG8gc2VuZCB0byBQWEUgY2xpZW50cy4iCittc2dzdHIgIkF2aXNvIGEgc2VyIGVudmlhZG8gYSBjbGllbnRlcyBQWEUuIgorCisjOiBvcHRpb24uYzozMjQKK21zZ2lkICJCb290IHNlcnZpY2UgZm9yIFBYRSBtZW51LiIKK21zZ3N0ciAiU2VydmljbyBib290IHBhcmEgbWVu+iBQWEUuIgorCisjOiBvcHRpb24uYzozMjUKK21zZ2lkICJDaGVjayBjb25maWd1cmF0aW9uIHN5bnRheC4iCittc2dzdHIgIlJldmlzYXIgc2ludGF4aXMgZGUgY29uZmlndXJhY2nzbi4iCisKKyM6IG9wdGlvbi5jOjYxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCittc2dzdHIgIiIKKyJNb2RvIGRlIHVzbzogZG5zbWFzcSBbb3BjaW9uZXNdXG4iCisiXG4iCisKKyM6IG9wdGlvbi5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2Ugc2hvcnQgb3B0aW9ucyBvbmx5IG9uIHRoZSBjb21tYW5kIGxpbmUuXG4iCittc2dzdHIgIlVzYXIgb3BjaW9uZXMgY29ydGFzIHNvbG8gZW4gbGEgbO1uZWEgZGUgY29tYW5kb3MuXG4iCisKKyM6IG9wdGlvbi5jOjYxNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVmFsaWQgb3B0aW9ucyBhcmU6XG4iCittc2dzdHIgIk9wY2lvbmVzIHbhbGlkYXMgc29uIDpcbiIKKworIzogb3B0aW9uLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1Agb3B0aW9uczpcbiIKK21zZ3N0ciAiT3BjaW9uZXMgREhDUCBjb25vY2lkYXM6XG4iCisKKyM6IG9wdGlvbi5jOjczNQorbXNnaWQgImJhZCBkaGNwLW9wdGlvbiIKK21zZ3N0ciAib3BjafNuIGRoY3Atb3B0aW9uIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjc5MgorIywgZnV6enkKK21zZ2lkICJiYWQgSVAgYWRkcmVzcyIKK21zZ3N0ciAiZGlyZWNjafNuIElQIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjg5MQorbXNnaWQgImJhZCBkb21haW4gaW4gZGhjcC1vcHRpb24iCittc2dzdHIgImRvbWluaW8gZXJy825lbyBlbiBkaGNwLW9wdGlvbiIKKworIzogb3B0aW9uLmM6OTUwCittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgIm9wY2nzbiBkaGNwLW9wdGlvbiBkZW1hc2lhZG8gbGFyZ2EiCisKKyM6IG9wdGlvbi5jOjk1OQorbXNnaWQgImlsbGVnYWwgZGhjcC1tYXRjaCIKK21zZ3N0ciAiZGhjcC1tYXRjaCBpbGVnYWwiCisKKyM6IG9wdGlvbi5jOjk5NQorbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQgZmxhZyIKK21zZ3N0ciAib3BjafNuIHJlcGV0aWRhIGlsZWdhbCIKKworIzogb3B0aW9uLmM6MTAwMworbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQga2V5d29yZCIKK21zZ3N0ciAicGFsYWJyYSBjbGF2ZSByZXBldGlkYSBpbGVnYWwiCisKKyM6IG9wdGlvbi5jOjEwODYgdGZ0cC5jOjM1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFjY2VzYXIgJXM6ICVzIgorCisjOiBvcHRpb24uYzoxMTMxCisjLCBmdXp6eQorbXNnaWQgIm9ubHkgb25lIGRoY3AtaG9zdHNmaWxlIGFsbG93ZWQiCittc2dzdHIgInNvbG8gdW4gZGhjcC1ob3N0c2ZpbGUgcGVybWl0aWRvIgorCisjOiBvcHRpb24uYzoxMTM4CisjLCBmdXp6eQorbXNnaWQgIm9ubHkgb25lIGRoY3Atb3B0c2ZpbGUgYWxsb3dlZCIKK21zZ3N0ciAic29sbyB1biBkaGNwLW9wdHNmaWxlIHBlcm1pdGlkbyIKKworIzogb3B0aW9uLmM6MTE4MworbXNnaWQgImJhZCBNWCBwcmVmZXJlbmNlIgorbXNnc3RyICJwcmVmZXJlbmNpYSBNWCBlcnLzbmVhIgorCisjOiBvcHRpb24uYzoxMTg4Cittc2dpZCAiYmFkIE1YIG5hbWUiCittc2dzdHIgIm5vbWJyZSBNWCBlcnLzbmVvIgorCisjOiBvcHRpb24uYzoxMjAyCittc2dpZCAiYmFkIE1YIHRhcmdldCIKK21zZ3N0ciAiZGVzdGlubyBNWCBlcnLzbmVvIgorCisjOiBvcHRpb24uYzoxMjEyCittc2dpZCAiY2Fubm90IHJ1biBzY3JpcHRzIHVuZGVyIHVDbGludXgiCittc2dzdHIgIm5vIHNlIHB1ZWRlbiBjb3JyZXIgYXJjaGl2b3MgZ3Vp825lcyBiYWpvIHVDbGludXgiCisKKyM6IG9wdGlvbi5jOjEyMTQKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX1NDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNDQyIG9wdGlvbi5jOjE0NDYKK21zZ2lkICJiYWQgcG9ydCIKK21zZ3N0ciAicHVlcnRvIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjE0NjUgb3B0aW9uLmM6MTQ5MAorbXNnaWQgImludGVyZmFjZSBiaW5kaW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgInZpbmN1bGFjafNuIGRlIGludGVyZmFjZSBubyBlc3ThIHNvcG9ydGFkbyIKKworIzogb3B0aW9uLmM6MTYxMQorIywgZnV6enkKK21zZ2lkICJiYWQgcG9ydCByYW5nZSIKK21zZ3N0ciAicmFuZ28gZGUgcHVlcnRvcyBlcnLzbmVvIgorCisjOiBvcHRpb24uYzoxNjI4Cittc2dpZCAiYmFkIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgIm9wY2nzbiBicmlkZ2UtaW50ZXJmYWNlIChpbnRlcmZhY2UgcHVlbnRlKSBlcnLzbmVhIgorCisjOiBvcHRpb24uYzoxNjY5Cittc2dpZCAiYmFkIGRoY3AtcmFuZ2UiCittc2dzdHIgIm9wY2nzbiBkaGNwLXJhbmdlIChyYW5nbyBESENQKSBlcnLzbmVhIgorCisjOiBvcHRpb24uYzoxNjk1Cittc2dpZCAib25seSBvbmUgbmV0aWQgdGFnIGFsbG93ZWQiCittc2dzdHIgInNvbG8gdW5hIGV0aXF1ZXRhIG5ldGlkIHBlcm1pdGlkYSIKKworIzogb3B0aW9uLmM6MTc0MAorbXNnaWQgImluY29uc2lzdGVudCBESENQIHJhbmdlIgorbXNnc3RyICJyYW5nbyBESENQIGluY29uc2lzdGVudGUiCisKKyM6IG9wdGlvbi5jOjE5MTIKKyMsIGZ1enp5Cittc2dpZCAiYmFkIERIQ1AgaG9zdCBuYW1lIgorbXNnc3RyICJub21icmUgZGUgaG9zdCBESENQIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjIyMDEgb3B0aW9uLmM6MjQ4MQorbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIm76bWVybyBkZSBwdWVydG8gaW524WxpZG8iCisKKyM6IG9wdGlvbi5jOjIyODQKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBhbGlhcyByYW5nZSIKK21zZ3N0ciAicmFuZ28gYWxpYXMgaW524WxpZG8iCisKKyM6IG9wdGlvbi5jOjIyOTcKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICJub21icmUgZGUgaW50ZXJmYWNlIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjIzMjIKK21zZ2lkICJiYWQgQ05BTUUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjMyNworbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiQ05BTUUgZHVwbGljYWRvIgorCisjOiBvcHRpb24uYzoyMzQ3CisjLCBmdXp6eQorbXNnaWQgImJhZCBQVFIgcmVjb3JkIgorbXNnc3RyICJleHBlZGllbnRlIFBUUiBlcnLzbmVvIgorCisjOiBvcHRpb24uYzoyMzc4CisjLCBmdXp6eQorbXNnaWQgImJhZCBOQVBUUiByZWNvcmQiCittc2dzdHIgImV4cGVkaWVudGUgTkFQVFIgZXJy825lbyIKKworIzogb3B0aW9uLmM6MjQwMworbXNnaWQgIlRYVCByZWNvcmQgc3RyaW5nIHRvbyBsb25nIgorbXNnc3RyICJleHBlZGllbnRlIFRYVCBkZW1hc2lhZG8gbGFyZ28iCisKKyM6IG9wdGlvbi5jOjI0NTEKK21zZ2lkICJiYWQgVFhUIHJlY29yZCIKK21zZ3N0ciAiZXhwZWRpZW50ZSBUWFQgZXJy825lbyIKKworIzogb3B0aW9uLmM6MjQ2NworbXNnaWQgImJhZCBTUlYgcmVjb3JkIgorbXNnc3RyICJleHBlZGllbnRlIFNSViBlcnLzbmVvIgorCisjOiBvcHRpb24uYzoyNDc0Cittc2dpZCAiYmFkIFNSViB0YXJnZXQiCittc2dzdHIgImRlc3Rpbm8gU1JWIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjI0ODgKK21zZ2lkICJpbnZhbGlkIHByaW9yaXR5IgorbXNnc3RyICJwcmlvcmlkYWQgaW524WxpZGEiCisKKyM6IG9wdGlvbi5jOjI0OTUKK21zZ2lkICJpbnZhbGlkIHdlaWdodCIKK21zZ3N0ciAicGVzbyBpbnbhbGlkbyIKKworIzogb3B0aW9uLmM6MjUxNAorbXNnaWQgInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9EQnVzIHN1cHBvcnQpIgorbXNnc3RyICJvcGNp824gbm8gc29wb3J0YWRhICh2ZXJpZmljYXIgcXVlIGRuc21hc3EgZnVlIGNvbXBpbGFkbyBjb24gc29wb3J0ZSBwYXJhIERIQ1AvVEZUUC9EQnVzKSIKKworIzogb3B0aW9uLmM6MjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlcyBuZXN0ZWQgdG9vIGRlZXAgaW4gJXMiCittc2dzdHIgImFyY2hpdm9zIGplcmFycXVpemFkb3MgZGVtYXNpYWRvIHByb2Z1bmRvIGVuICVzIgorCisjOiBvcHRpb24uYzoyNTY1IHRmdHAuYzo1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyICVzOiAlcyIKKworIzogb3B0aW9uLmM6MjYyNgorbXNnaWQgIm1pc3NpbmcgXCIiCittc2dzdHIgImZhbHRhIFwiIgorCisjOiBvcHRpb24uYzoyNjczCittc2dpZCAiYmFkIG9wdGlvbiIKK21zZ3N0ciAib3BjafNuIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjI2NzUKK21zZ2lkICJleHRyYW5lb3VzIHBhcmFtZXRlciIKK21zZ3N0ciAicGFy4W1ldHJvIGV4dHJh8W8iCisKKyM6IG9wdGlvbi5jOjI2NzcKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciIKK21zZ3N0ciAicGFy4W1ldHJvIGF1c2VudGUiCisKKyM6IG9wdGlvbi5jOjI2ODUKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZXJyb3IiCisKKyM6IG9wdGlvbi5jOjI2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYXQgbGluZSAlZCBvZiAlJXMiCittc2dzdHIgIiVzIGVuIGztbmVhICVkIGRlICUlcyIKKworIzogb3B0aW9uLmM6Mjc0MCBvcHRpb24uYzoyNzcxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIgorbXNnc3RyICJsZXllbmRvICVzIgorCisjOiBvcHRpb24uYzoyODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgdmVyc2lvbiAlcyAgJXNcbiIKK21zZ3N0ciAiRG5zbWFzcSB2ZXJzafNuICVzICAlc1xuIgorCisjOiBvcHRpb24uYzoyODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb21waWxlIHRpbWUgb3B0aW9ucyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiT3BjaW9uZXMgZGUgY29tcGlsYWNp824gJXNcbiIKKyJcbiIKKworIzogb3B0aW9uLmM6Mjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiRXN0ZSBzb2Z0d2FyZSB2aWVuZSBTSU4gTklOR1VOQSBHQVJBTlRJQS5cbiIKKworIzogb3B0aW9uLmM6Mjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0XG4iCittc2dzdHIgIkRuc21hc3EgZXMgc29mdHdhcmUgbGlicmUsIHkgdXN0ZWQgZXN04SBiaWVudmVuaWRvIGEgcmVkaXN0cmlidWlybG9cbiIKKworIzogb3B0aW9uLmM6Mjg0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIDMuXG4iCittc2dzdHIgImJham8gbG9zIHTpcm1pbm9zIGRlIGxhIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzafNuIDIgbyAzLlxuIgorCisjOiBvcHRpb24uYzoyODU4Cittc2dpZCAidHJ5IC0taGVscCIKK21zZ3N0ciAicHJ1ZWJlIC0taGVscCIKKworIzogb3B0aW9uLmM6Mjg2MAorbXNnaWQgInRyeSAtdyIKK21zZ3N0ciAicHJ1ZWJlIC13IgorCisjOiBvcHRpb24uYzoyODYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJvcGNpb25lcyBkZSBs7W5lYSBkZSBjb21hbmRvcyBlcnLzbmVhczogJXMiCisKKyM6IG9wdGlvbi5jOjI5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBob3N0LW5hbWU6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBvYnRlbmVyIGhvc3QtbmFtZSAobm9tYnJlIGRlIGhvc3QpOiAlcyIKKworIzogb3B0aW9uLmM6MjkzMgorbXNnaWQgIm9ubHkgb25lIHJlc29sdi5jb25mIGZpbGUgYWxsb3dlZCBpbiBuby1wb2xsIG1vZGUuIgorbXNnc3RyICJzb2xvIHVuIGFyY2hpdm8gcmVzb2x2LmNvbmYgcGVybWl0aWRvIGVuIG1vZG8gbm8tcG9sbC4iCisKKyM6IG9wdGlvbi5jOjI5NDIKK21zZ2lkICJtdXN0IGhhdmUgZXhhY3RseSBvbmUgcmVzb2x2LmNvbmYgdG8gcmVhZCBkb21haW4gZnJvbS4iCittc2dzdHIgImRlYmUgaGFiZXIgZXjhY3RhbWVudGUgdW4gcmVzb2x2LmNvbmYgZGVzZGUgZG9uZGUgbGVlciBkb21pbmlvLiIKKworIzogb3B0aW9uLmM6Mjk0NSBuZXR3b3JrLmM6NzU0IGRoY3AuYzo3MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyICVzOiAlcyIKKworIzogb3B0aW9uLmM6Mjk2MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZWFyY2ggZGlyZWN0aXZlIGZvdW5kIGluICVzIgorbXNnc3RyICJuaW5ndW5hIGRpcmVjdGl2YSBkZSBi+nNxdWVkYSBlbmNvbnRyYWRhIGVuICVzIgorCisjOiBvcHRpb24uYzoyOTgzCittc2dpZCAidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IgorbXNnc3RyICJkZWJlIGhhYmVyIHVuIGRvbWluaW8gcHJlZGV0ZXJtaW5hZG8gY3VhbmRvIC0tZGhjcC1mcWRuIGVzdOEgZmlqYWRvIgorCisjOiBvcHRpb24uYzoyOTg3Cittc2dpZCAic3ludGF4IGNoZWNrIE9LIgorbXNnc3RyICJyZXZpc2nzbiBkZSBzaW50YXhpcyBPSyIKKworIzogZm9yd2FyZC5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiCittc2dzdHIgInNlcnZpZG9yIEROUyAlcyBzZSByZXVz8yBhIGhhY2VyIHVuYSBi+nNxdWVkYSByZWN1cnNpdmEiCisKKyM6IGZvcndhcmQuYzo0MzcKK21zZ2lkICJwb3NzaWJsZSBETlMtcmViaW5kIGF0dGFjayBkZXRlY3RlZCIKK21zZ3N0ciAicG9zaWJsZSBhdGFxdWUgZGUgcmV2aW5jdWxhY2nzbiBETlMgZGV0ZWN0YWRvIgorCisjOiBuZXR3b3JrLmM6NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIGluIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgImludGVyZmFjZSBkZXNjb25vY2lkYSAlcyBlbiBicmlkZ2UtaW50ZXJmYWNlIgorCisjOiBuZXR3b3JrLmM6NDE3IGRuc21hc3EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciB1biBzb2NrZXQgZXNjdWNoYWRvcjogJXMiCisKKyM6IG5ldHdvcmsuYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBJUFY2IG9wdGlvbnMgb24gbGlzdGVuaW5nIHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZmlqYXIgb3BjaW9uZXMgSVB2NiBzb2JyZSBzb2NrZXQgZXNjdWNoYWRvcjogJXMiCisKKyM6IG5ldHdvcmsuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGFjb3BsYXIgc29ja2V0IGVzY3VjaGFkb3IgcGFyYSAlczogJXMiCisKKyM6IG5ldHdvcmsuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxpc3RlbiBvbiBzb2NrZXQ6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGVzY3VjaGFyIGVuIHNvY2tldDogJXMiCisKKyM6IG5ldHdvcmsuYzo0NjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgVEZUUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGNyZWFyIHNvY2tldCBURlRQOiAlcyIKKworIzogbmV0d29yay5jOjY2MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgc2VydmVyIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGFjb3BsYXIgc29ja2V0IGVzY3VjaGFkb3IgcGFyYSAlczogJXMiCisKKyM6IG5ldHdvcmsuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGxvY2FsIGludGVyZmFjZSIKK21zZ3N0ciAiaWdub3JhbmRvIHNlcnZpZG9yIEROUyAlcyAtIGludGVyZmFjZSBsb2NhbCIKKworIzogbmV0d29yay5jOjcwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAiaWdub3JhbmRvIHNlcnZpZG9yIEROUyAlcyAtIG5vIHNlIHB1ZWRlIGNyZWFyL2Fjb3BsYXIgc29ja2V0OiAlcyIKKworIzogbmV0d29yay5jOjcyMAorbXNnaWQgInVucXVhbGlmaWVkIgorbXNnc3RyICJubyBjYWxpZmljYWRvIgorCisjOiBuZXR3b3JrLmM6NzIwCittc2dpZCAibmFtZXMiCittc2dzdHIgIm5vbWJyZXMiCisKKyM6IG5ldHdvcmsuYzo3MjIKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICJwcmVkZXRlcm1pbmFkbyIKKworIzogbmV0d29yay5jOjcyNAorbXNnaWQgImRvbWFpbiIKK21zZ3N0ciAiZG9taW5pbyIKKworIzogbmV0d29yay5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBsb2NhbCBhZGRyZXNzZXMgb25seSBmb3IgJXMgJXMiCittc2dzdHIgInVzYW5kbyBkaXJlY2Npb25lcyBsb2NhbGVzIHNvbG8gcGFyYSAlcyAlcyIKKworIzogbmV0d29yay5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIGZvciAlcyAlcyIKK21zZ3N0ciAidXNhbmRvIHNlcnZpZG9yIEROUyAlcyMlZCBwYXJhICVzICVzIgorCisjOiBuZXR3b3JrLmM6NzMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkKHZpYSAlcykiCittc2dzdHIgInVzYW5kbyBzZXJ2aWRvciBETlMgJXMjJWQodu1hICVzKSIKKworIzogbmV0d29yay5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIgorbXNnc3RyICJ1c2FuZG8gc2Vydmlkb3IgRE5TICVzIyVkIgorCisjOiBkbnNtYXNxLmM6MTQ2CisjLCBmdXp6eQorbXNnaWQgIlRGVFAgc2VydmVyIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX1RGVFAgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJzZXJ2aWRvciBURlRQIG5vIGRpc3BvbmlibGU6IGZpamFyIEhBVkVfVEZUUCBlbiBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoxNTEKKyMsIGZ1enp5Cittc2dpZCAiYXN5Y2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIFNvbGFyaXMiCittc2dzdHIgImJpdGFjb3JlbyBhc2luY3LzbmljbyBubyBlc3ThIGRpc3BvbmlibGUgYmFqbyBTb2xhcmlzIgorCisjOiBkbnNtYXNxLmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGxpc3Qgb2YgaW50ZXJmYWNlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZW5jb250cmFyIGxpc3RhIGRlIGludGVyZmFjZXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIgorbXNnc3RyICJpbnRlcmZhY2UgZGVzY29ub2NpZGEgJXMiCisKKyM6IGRuc21hc3EuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gaW50ZXJmYWNlIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAibmluZ3VuYSBpbnRlcmZhY2UgY29uIGRpcmVjY2nzbiAlcyIKKworIzogZG5zbWFzcS5jOjIwMSBkbnNtYXNxLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICJlcnJvciBEQnVzOiAlcyIKKworIzogZG5zbWFzcS5jOjIwNAorbXNnaWQgIkRCdXMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgbm8gZGlzcG9uaWJsZTogZmlqYXIgSEFWRV9EQlVTIGVuIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHVzZXIgb3IgZ3JvdXA6ICVzIgorbXNnc3RyICJ1c3VhcmlvIG8gZ3J1cG8gZGVzY29ub2NpZG86ICVzIgorCisjOiBkbnNtYXNxLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byBmaWxlc3lzdGVtIHJvb3Q6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBjYW1iaWFyIGRpcmVjdG9yaW8gYSByYe16IGRlIHNpc3RlbWEgZGUgYXJjaGl2b3M6ICVzIgorCisjOiBkbnNtYXNxLmM6NDQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIKK21zZ3N0ciAiaW5pY2lhZG8sIHZlcnNp824gJXMgRE5TIGRlc2hhYmlsaXRhZG8iCisKKyM6IGRuc21hc3EuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBjYWNoZXNpemUgJWQiCittc2dzdHIgImluaWNpYWRvLCB2ZXJzafNuICVzIHRhbWHxbyBkZSBjYWNo6SAlZCIKKworIzogZG5zbWFzcS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJpbmljaWFkbywgdmVyc2nzbiAlcyBjYWNo6SBkZXNoYWJpbGl0YWRvIgorCisjOiBkbnNtYXNxLmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBpbGUgdGltZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAib3BjaW9uZXMgZGUgY29tcGlsYWNp8246ICVzIgorCisjOiBkbnNtYXNxLmM6NDYwCittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGNvbm5lY3RlZCB0byBzeXN0ZW0gYnVzIgorbXNnc3RyICJzb3BvcnRlIERCdXMgaGFiaWxpdGFkbzogY29uZWN0YWRvIGEgYnVzIGRlIHNpc3RlbWEiCisKKyM6IGRuc21hc3EuYzo0NjIKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogYnVzIGNvbm5lY3Rpb24gcGVuZGluZyIKK21zZ3N0ciAic29wb3J0ZSBEQnVzIGhhYmlsaXRhZG86IGNvbmVjY2nzbiBhIGJ1cyBwZW5kaWVudGUiCisKKyM6IGRuc21hc3EuYzo0NjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGZhaWxlZCB0byBjaGFuZ2Ugb3duZXIgb2YgJXM6ICVzIgorbXNnc3RyICJhZHZlcnRlbmNpYTogbm8gc2UgcHVkbyBjYW1iaWFyIGR1ZfFvIGRlICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjQ3MQorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgImZpamFuZG8gb3BjafNuIC0tYmluZC1pbnRlcmZhY2VzIGRlYmlkbyBhIGxpbWl0YWNpb25lcyBkZSBzaXN0ZW1hIG9wZXJhdGl2byIKKworIzogZG5zbWFzcS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBpbnRlcmZhY2UgJXMgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0IgorbXNnc3RyICJhZHZlcnRlbmNpYTogaW50ZXJmYWNlICVzIG5vIGV4aXN0ZSBhY3R14WxtZW50ZSIKKworIzogZG5zbWFzcS5jOjQ4MQorbXNnaWQgIndhcm5pbmc6IGlnbm9yaW5nIHJlc29sdi1maWxlIGZsYWcgYmVjYXVzZSBuby1yZXNvbHYgaXMgc2V0IgorbXNnc3RyICJhZHZlcnRlbmNpYTogaWdub3JhbmRvIG9wY2nzbiByZXNvbHYtZmlsZSBwb3JxdWUgbm8tcmVzb2x2IGVzdOEgZmlqYWRvIgorCisjOiBkbnNtYXNxLmM6NDg0CisjLCBmdXp6eQorbXNnaWQgIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIKK21zZ3N0ciAiYWR2ZXJ0ZW5jaWE6IG5pbmf6biBzZXJ2aWRvciB1cHN0cmVhbSBjb25maWd1cmFkbyIKKworIzogZG5zbWFzcS5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBlbmFibGVkLCBxdWV1ZSBsaW1pdCBpcyAlZCBtZXNzYWdlcyIKK21zZ3N0ciAiYml0YWNvcmVvIGFzaW5jcvNuaWNvIGhhYmlsaXRhZG8sIGztbWl0ZSBkZSBjb2xhIGVzICVkIG1lbnNhamVzIgorCisjOiBkbnNtYXNxLmM6NTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMsIGxlYXNlIHRpbWUgJXMiCittc2dzdHIgIkRIQ1AsIGFycmllbmRvcyBlc3ThdGljb3Mgc29sbyBlbiAlLjBzJXMsIHRpZW1wbyBkZSBhcnJpZW5kbyAlcyIKKworIzogZG5zbWFzcS5jOjUwMworIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBwcm94eSBvbiBzdWJuZXQgJS4wcyVzJS4wcyIKK21zZ3N0ciAiREhDUCwgcHJveHkgZW4gc3VicmVkICUuMHMlcyUuMHMiCisKKyM6IGRuc21hc3EuYzo1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgSVAgcmFuZ2UgJXMgLS0gJXMsIGxlYXNlIHRpbWUgJXMiCittc2dzdHIgIkRIQ1AsIHJhbmdvIGRlIElQcyAlcyAtLSAlcywgdGllbXBvIGRlIGFycmllbmRvICVzIgorCisjOiBkbnNtYXNxLmM6NTE5Cittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgInJvb3QgZXMgIgorCisjOiBkbnNtYXNxLmM6NTE5CisjLCBmdXp6eQorbXNnaWQgImVuYWJsZWQiCittc2dzdHIgImhhYmlsaXRhZG8iCisKKyM6IGRuc21hc3EuYzo1MjEKK21zZ2lkICJzZWN1cmUgbW9kZSIKK21zZ3N0ciAibW9kbyBzZWd1cm8iCisKKyM6IGRuc21hc3EuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdHJpY3RpbmcgbWF4aW11bSBzaW11bHRhbmVvdXMgVEZUUCB0cmFuc2ZlcnMgdG8gJWQiCittc2dzdHIgImxpbWl0YW5kbyBu+m1lcm8gbeF4aW1vIGRlIHRyYW5zZmVyZW5jaWFzIFRGVFAgc2ltdWx04W5lYXMgYSAlZCIKKworIzogZG5zbWFzcS5jOjY2NworbXNnaWQgImNvbm5lY3RlZCB0byBzeXN0ZW0gREJ1cyIKK21zZ3N0ciAiY29uZWN0YWRvIGEgREJ1cyBkZSBzaXN0ZW1hIgorCisjOiBkbnNtYXNxLmM6NzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmb3JrIGludG8gYmFja2dyb3VuZDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGhhY2VyIGZvcmsgaGFjaWEgZWwgZm9uZG86ICVzIgorCisjOiBkbnNtYXNxLmM6NzYwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGhlbHBlcjogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gY3JlYXIgYXl1ZGFudGU6ICVzIgorCisjOiBkbnNtYXNxLmM6NzYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzZXR0aW5nIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVzIgorbXNnc3RyICJjb25maWd1cmFjafNuIGRlIGNhcGFjaWRhZGVzIGhhIGZhbGxhZG86ICVzIgorCisjOiBkbnNtYXNxLmM6NzY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIHVzZXItaWQgdG8gJXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGNhbWJpYXIgdXNlci1pZCBhICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjc3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gY2FtYmlhciBncm91cC1pZCBhICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjc3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGlkZmlsZSAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gYWJyaXIgYXJjaGl2byBQSUQgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6Nzc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFicmlyICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjgzMworIywgYy1mb3JtYXQKK21zZ2lkICJjaGlsZCBwcm9jZXNzIGtpbGxlZCBieSBzaWduYWwgJWQiCittc2dzdHIgInByb2Nlc28gaGlqbyBlbGltaW5hZG8gcG9yIHNl8WFsICVkIgorCisjOiBkbnNtYXNxLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNoaWxkIHByb2Nlc3MgZXhpdGVkIHdpdGggc3RhdHVzICVkIgorbXNnc3RyICJwcm9jZXNvIGhpam8gaGl6byBleGl0IGNvbiBlc3RhZG8gJWQiCisKKyM6IGRuc21hc3EuYzo4NDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjdXRlICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBlamVjdXRhciAlczogJXMiCisKKyM6IGRuc21hc3EuYzo4ODUKK21zZ2lkICJleGl0aW5nIG9uIHJlY2VpcHQgb2YgU0lHVEVSTSIKK21zZ3N0ciAic2FsaWVuZG8gYWwgcmVjaWJpciBTSUdURVJNIgorCisjOiBkbnNtYXNxLmM6OTAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhY2Nlc2FyICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICJsZXllbmRvICVzIgorCisjOiBkbnNtYXNxLmM6OTM2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJubyBzZXJ2ZXJzIGZvdW5kIGluICVzLCB3aWxsIHJldHJ5IgorbXNnc3RyICJuaW5n+m4gc2Vydmlkb3IgZW5jb250cmFkbyBlbiAlcywgc2UgcmVpbnRlbnRhcuEiCisKKyM6IGRoY3AuYzo0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgc29ja2V0IERIQ1A6ICVzIgorCisjOiBkaGNwLmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBvcHRpb25zIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBmaWphciBvcGNpb25lcyBlbiBzb2NrZXQgREhDUDogJXMiCisKKyM6IGRoY3AuYzo2NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBmaWphciBTT19SRVVTRXtBRERSfFBPUlR9IGVuIHNvY2tldCBESENQOiAlcyIKKworIzogZGhjcC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gYWNvcGxhciBzb2NrZXQgZGUgc2Vydmlkb3IgREhDUDogJXMiCisKKyM6IGRoY3AuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVAgcmF3IHNvY2tldDogJXMuIgorbXNnc3RyICJubyBzZSBwdWVkZSBjcmVhciBzb2NrZXQgY3J1ZG8gSUNNUDogJXMuIgorCisjOiBkaGNwLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcGFja2V0IHJlY2VpdmVkIG9uICVzIHdoaWNoIGhhcyBubyBhZGRyZXNzIgorbXNnc3RyICJQYXF1ZXRlIERIQ1AgcmVjaWJpZG8gZW4gJXMgcXVlIG5vIHRpZW5lIGRpcmVjY2nzbiIKKworIzogZGhjcC5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIKK21zZ3N0ciAicmFuZ28gREhDUCAlcyAtLSAlcyBubyBjb2luY2lkZSBjb24gbeFzY2FyYSBkZSBzdWJyZWQgJXMiCisKKyM6IGRoY3AuYzo3NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBsaW5lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImztbmVhIGVycvNuZWEgZW4gJXMgbO1uZWEgJWQiCisKKyM6IGRoY3AuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXMgbGluZSAlZCwgZHVwbGljYXRlIG5hbWUgb3IgSVAgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZS4iCittc2dzdHIgImRpcmVjY2nzbiBJUCBkdXBsaWNhZGEgJXMgZW4gZGlyZWN0aXZhIGRoY3AtY29uZmlnLiIKKworIzogZGhjcC5jOjkwMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gJXMuIgorbXNnc3RyICJkaXJlY2Np824gSVAgZHVwbGljYWRhICVzIGVuICVzLiIKKworIzogZGhjcC5jOjk0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbW9yZSB0aGFuIG9uZSBhZGRyZXNzIGluIGhvc3RzZmlsZSwgdXNpbmcgJXMgZm9yIERIQ1AiCittc2dzdHIgIiVzIHRpZW5lIG3hcyBkZSB1bmEgZGlyZWNjafNuIGVuIGhvc3RzZmlsZSwgdXNhbmRvICVzIHBhcmEgREhDUCIKKworIzogZGhjcC5jOjk0OAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyAoJXMpIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZSIKK21zZ3N0ciAiZGlyZWNjafNuIElQIGR1cGxpY2FkYSAlcyAoJXMpIGVuIGRpcmVjdGl2YSBkaGNwLWNvbmZpZyIKKworIzogbGVhc2UuYzo2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gb3IgY3JlYXRlIGxlYXNlIGZpbGUgJXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBhYnJpciBvIGNyZWFyIGFyY2hpdm8gZGUgYXJyaWVuZG9zICVzOiAlcyIKKworIzogbGVhc2UuYzo5MgorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgImRlbWFzaWFkb3MgYXJyaWVuZG9zIGFsbWFjZW5hZG9zIgorCisjOiBsZWFzZS5jOjEyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJ1biBsZWFzZS1pbml0IHNjcmlwdCAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGVqZWN1dGFyIGFyY2hpdm8gZ3Vp824gbGVhc2UtaW5pdCAlczogJXMiCisKKyM6IGxlYXNlLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAiYXJjaGl2byBndWnzbiBsZWFzZS1pbml0IHJldG9ybvMgZXhpdCBjb2RlICVzIgorCisjOiBsZWFzZS5jOjIzNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlICVzOiAlcyAocmV0cnkgaW4gJXVzKSIKK21zZ3N0ciAiZXJyb3IgYWwgZXNjcmliaXIgJXM6ICVzIChyZWludGVudGFyIGVuICV1cykiCisKKyM6IHJmYzIxMzEuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1AgcmVxdWVzdCAlcyAlcyIKK21zZ3N0ciAibmluZ/puIHJhbmdvIGRlIGRpcmVjY2nzbmVzIGRpc3BvbmlibGUgcGFyYSBwZWRpZG8gREhDUCAlcyAlcyIKKworIzogcmZjMjEzMS5jOjMzNworbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICJjb24gc2VsZWN0b3IgZGUgc3VicmVkIgorCisjOiByZmMyMTMxLmM6MzM3Cittc2dpZCAidmlhIgorbXNnc3RyICJ27WEiCisKKyM6IHJmYzIxMzEuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgQXZhaWxhYmxlIERIQ1Agc3VibmV0OiAlcy8lcyIKK21zZ3N0ciAiJXUgU3VicmVkIERIQ1AgZGlzcG9uaWJsZTogJXMvJXMiCisKKyM6IHJmYzIxMzEuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgQXZhaWxhYmxlIERIQ1AgcmFuZ2U6ICVzIC0tICVzIgorbXNnc3RyICIldSBSYW5nbyBESENQIGRpc3BvbmlibGU6ICVzIC0tICVzIgorCisjOiByZmMyMTMxLmM6Mzg0Cittc2dpZCAiZGlzYWJsZWQiCittc2dzdHIgImRlc2hhYmlsaXRhZG8iCisKKyM6IHJmYzIxMzEuYzo0MTggcmZjMjEzMS5jOjg4MyByZmMyMTMxLmM6MTI0MgorbXNnaWQgImlnbm9yZWQiCittc2dzdHIgImlnbm9yYWRvIgorCisjOiByZmMyMTMxLmM6NDMzIHJmYzIxMzEuYzoxMTAwCittc2dpZCAiYWRkcmVzcyBpbiB1c2UiCittc2dzdHIgImRpcmVjY2nzbiBlbiB1c28iCisKKyM6IHJmYzIxMzEuYzo0NDcgcmZjMjEzMS5jOjkzNworbXNnaWQgIm5vIGFkZHJlc3MgYXZhaWxhYmxlIgorbXNnc3RyICJuaW5ndW5hIGRpcmVjY2nzbiBkaXNwb25pYmxlIgorCisjOiByZmMyMTMxLmM6NDU0IHJmYzIxMzEuYzoxMDYzCittc2dpZCAid3JvbmcgbmV0d29yayIKK21zZ3N0ciAicmVkIGVxdWl2b2NhZGEiCisKKyM6IHJmYzIxMzEuYzo0NjcKK21zZ2lkICJubyBhZGRyZXNzIGNvbmZpZ3VyZWQiCittc2dzdHIgIm5pbmd1bmEgZGlyZWNjafNuIGNvbmZpZ3VyYWRhIgorCisjOiByZmMyMTMxLmM6NDczIHJmYzIxMzEuYzoxMTEzCittc2dpZCAibm8gbGVhc2VzIGxlZnQiCittc2dzdHIgIm5vIHNvYnJhIG5pbmf6biBhcnJpZW5kbyIKKworIzogcmZjMjEzMS5jOjU1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IHByb3ZpZGVzIG5hbWU6ICVzIgorbXNnc3RyICIldSBjbGllbnRlIHByb3ZlZSBub21icmU6ICVzIgorCisjOiByZmMyMTMxLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IFZlbmRvciBjbGFzczogJXMiCittc2dzdHIgIiV1IENsYXNlIGRlIHZlbmRlZG9yOiAlcyIKKworIzogcmZjMjEzMS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBVc2VyIGNsYXNzOiAlcyIKK21zZ3N0ciAiJXUgQ2xhc2UgZGUgdXN1YXJpbzogJXMiCisKKyM6IHJmYzIxMzEuYzo3MzcKK21zZ2lkICJQWEUgQklTIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIm5vIGhheSBzb3BvcnRlIHBhcmEgQklTIFBYRSIKKworIzogcmZjMjEzMS5jOjg1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZGlzYWJsaW5nIERIQ1Agc3RhdGljIGFkZHJlc3MgJXMgZm9yICVzIgorbXNnc3RyICJkZXNoYWJpbGl0YW5kbyBkaXJlY2Np824gREhDUCBlc3ThdGljYSAlcyBwYXJhICVzIgorCisjOiByZmMyMTMxLmM6ODc0Cittc2dpZCAidW5rbm93biBsZWFzZSIKK21zZ3N0ciAiYXJyaWVuZG8gZGVzY29ub2NpZG8iCisKKyM6IHJmYzIxMzEuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGxlYXNlZCB0byAlcyIKK21zZ3N0ciAibm8gdXNhbmRvIGRpcmVjY2nzbiBjb25maWd1cmFkYSAlcyBwb3JxdWUgZXN04SBhcnJlbmRhZGEgYSAlcyIKKworIzogcmZjMjEzMS5jOjkxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGluIHVzZSBieSB0aGUgc2VydmVyIG9yIHJlbGF5IgorbXNnc3RyICJubyB1c2FuZG8gZGlyZWNjafNuIGNvbmZpZ3VyYWRhICVzIHBvcnF1ZSBlc3ThIGVuIHVzbyBwb3IgZWwgc2Vydmlkb3IgbyByZWxheSIKKworIzogcmZjMjEzMS5jOjkxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIgorbXNnc3RyICJubyB1c2FuZG8gZGlyZWNjafNuIGNvbmZpZ3VyYWRhICVzIHBvcnF1ZSBmdekgcHJldmlhbWVudGUgZGVuZWdhZGEiCisKKyM6IHJmYzIxMzEuYzo5MzUgcmZjMjEzMS5jOjExMDYKK21zZ2lkICJubyB1bmlxdWUtaWQiCittc2dzdHIgIm5pbmf6biB1bmlxdWUtaWQgKGlkZW50aWZpY2FjafNuIPpuaWNhKSIKKworIzogcmZjMjEzMS5jOjEwMDMKK21zZ2lkICJ3cm9uZyBzZXJ2ZXItSUQiCittc2dzdHIgIklEIGRlIHNlcnZpZG9yIGVxdWl2b2NhZGEiCisKKyM6IHJmYzIxMzEuYzoxMDIyCittc2dpZCAid3JvbmcgYWRkcmVzcyIKK21zZ3N0ciAiZGlyZWNjafNuIGVxdWl2b2NhZGEiCisKKyM6IHJmYzIxMzEuYzoxMDM5Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICJhcnJpZW5kbyBubyBlbmNvbnRyYWRvIgorCisjOiByZmMyMTMxLmM6MTA3MQorbXNnaWQgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiZGlyZWNjafNuIG5vIGRpc3BvbmlibGUiCisKKyM6IHJmYzIxMzEuYzoxMDgyCittc2dpZCAic3RhdGljIGxlYXNlIGF2YWlsYWJsZSIKK21zZ3N0ciAiYXJyaWVuZG8gZXN04XRpY28gZGlzcG9uaWJsZSIKKworIzogcmZjMjEzMS5jOjEwODYKK21zZ2lkICJhZGRyZXNzIHJlc2VydmVkIgorbXNnc3RyICJkaXJlY2Np824gcmVzZXJ2YWRhIgorCisjOiByZmMyMTMxLmM6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJhYmFuZG9uaW5nIGxlYXNlIHRvICVzIG9mICVzIgorbXNnc3RyICJhYmFuZG9uYW5kbyBhcnJpZW5kbyBhICVzIGRlICVzIgorCisjOiByZmMyMTMxLmM6MTU4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSB0YWdzOiAlcyIKK21zZ3N0ciAiJXUgZXRpcXVldGFzOiAlcyIKKworIzogcmZjMjEzMS5jOjE1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiV1IG5vbWJyZSBkZSBib290ZmlsZTogJXMiCisKKyM6IHJmYzIxMzEuYzoxNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHNlcnZlciBuYW1lOiAlcyIKK21zZ3N0ciAiJXUgbm9tYnJlIGRlIHNlcnZpZG9yOiAlcyIKKworIzogcmZjMjEzMS5jOjE2MTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IG5leHQgc2VydmVyOiAlcyIKK21zZ3N0ciAiJXUgc2lndWllbnRlIHNlcnZpZG9yOiAlcyIKKworIzogcmZjMjEzMS5jOjE2ODAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIERIQ1AvQk9PVFAgb3B0aW9uICVkOiBubyBzcGFjZSBsZWZ0IGluIHBhY2tldCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZW52aWFyIG9wY2nzbiBESENQL0JPT1RQICVkOiBubyBxdWVkYSBlc3BhY2lvIGVuIHBhcXVldGUiCisKKyM6IHJmYzIxMzEuYzoxOTE5Cittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICJtZW76IFBYRSBkZW1hc2lhZG8gZ3JhbmRlIgorCisjOiByZmMyMTMxLmM6MjAzNAorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkb21haW4gJXMgZm9yIERIQ1AgaG9zdCBuYW1lICVzIgorbXNnc3RyICJJZ25vcmFuZG8gZG9taW5pbyAlcyBwYXJhIG5vbWJyZSBkZSBob3N0IERIQ1AgJXMiCisKKyM6IHJmYzIxMzEuYzoyMDUyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSByZXF1ZXN0ZWQgb3B0aW9uczogJXMiCittc2dzdHIgIiV1IG9wY2lvbmVzIHNvbGljaXRhZGFzOiAlcyIKKworIzogbmV0bGluay5jOjY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgc29ja2V0IG5ldGxpbms6ICVzIgorCisjOiBuZXRsaW5rLmM6MjY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJuZXRsaW5rIHJldHVybnMgZXJyb3I6ICVzIgorbXNnc3RyICJuZXRsaW5rIHJldG9ybmEgZXJyb3I6ICVzIgorCisjOiBkYnVzLmM6MTUwCittc2dpZCAiYXR0ZW1wdCB0byBzZXQgYW4gSVB2NiBzZXJ2ZXIgYWRkcmVzcyB2aWEgREJ1cyAtIG5vIElQdjYgc3VwcG9ydCIKK21zZ3N0ciAiaW50ZW50byBkZSBmaWphciBkaXJlY2Np824gZGUgc2Vydmlkb3IgSVB2NiB27WEgREJ1cyAtIG5vIGhheSBzb3BvcnRlIElQdjYiCisKKyM6IGRidXMuYzoyODYKK21zZ2lkICJzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMgZnJvbSBEQnVzIgorbXNnc3RyICJmaWphbmRvIHNlcnZpZG9yZXMgdXBzdHJlYW0gZGVzZGUgREJ1cyIKKworIzogZGJ1cy5jOjMyNAorbXNnaWQgImNvdWxkIG5vdCByZWdpc3RlciBhIERCdXMgbWVzc2FnZSBoYW5kbGVyIgorbXNnc3RyICJubyBzZSBwdWRvIHJlZ2lzdHJhciB1biBtYW5lamFkb3IgZGUgbWVuc2FqZXMgREJ1cyIKKworIzogYnBmLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBCUEYgc29ja2V0OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgc29ja2V0IEJQRiBESENQOiAlcyIKKworIzogYnBmLmM6MTc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIKK21zZ3N0ciAicGVkaWRvIERIQ1AgcG9yIHRpcG8gZGUgaGFyZHdhcmUgbm8tc29wb3J0YWRvICglZCkgcmVjaWJpZG8gZW4gJXMiCisKKyM6IHRmdHAuYzoxNzkKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGZyZWUgcG9ydCBmb3IgVEZUUCIKK21zZ3N0ciAiaW5jYXBheiBkZSBjb25zZWd1aXIgcHVlcnRvIGxpYnJlIHBhcmEgVEZUUCIKKworIzogdGZ0cC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgInBlZGlkbyBuby1zb3BvcnRhZG8gZGVzZGUgJXMiCisKKyM6IHRmdHAuYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBzZW50ICVzIHRvICVzIgorbXNnc3RyICJURlRQIGVudmnzICVzIGEgJXMiCisKKyM6IHRmdHAuYzozMDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgbm90IGZvdW5kIgorbXNnc3RyICJhcmNoaXZvICVzIG5vIGVuY29udHJhZG8iCisKKyM6IHRmdHAuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBlcnJvciAlZCAlcyByZWNlaXZlZCBmcm9tICVzIgorbXNnc3RyICJlcnJvciBURlRQICVkICVzIHJlY2liaWRvIGRlICVzIgorCisjOiB0ZnRwLmM6NDQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJURlRQIGZhaWxlZCBzZW5kaW5nICVzIHRvICVzIgorbXNnc3RyICJURlRQIG5vIHB1ZG8gZW52aWFyICVzIGEgJXMiCisKKyM6IGxvZy5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyZmxvdzogJWQgbG9nIGVudHJpZXMgbG9zdCIKK21zZ3N0ciAiZGVzYm9yZGFtaWVudG86ICVkIGVudHJhZGFzIGRlIGJpdOFjb3JhIHBlcmRpZGFzIgorCisjOiBsb2cuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZhaWxlZDogJXMiCittc2dzdHIgImJpdOFjb3JhIGZhbGzzOiAlcyIKKworIzogbG9nLmM6NDE1Cittc2dpZCAiRkFJTEVEIHRvIHN0YXJ0IHVwIgorbXNnc3RyICJlbCBpbmljaW8gaGEgRkFMTEFETyIKKworI34gbXNnaWQgIkRIQ1AgcGFja2V0OiB0cmFuc2FjdGlvbi1pZCBpcyAldSIKKyN+IG1zZ3N0ciAicGFxdWV0ZSBESENQOiB0cmFuc2FjdGlvbi1pZCAoaWRlbnRpZmljYWNp824gZGUgdHJhbnNhY2Np824pIGVzICV1IgorCisjfiBtc2dpZCAibXVzdCBzZXQgZXhhY3RseSBvbmUgaW50ZXJmYWNlIG9uIGJyb2tlbiBzeXN0ZW1zIHdpdGhvdXQgSVBfUkVDVklGIgorI34gbXNnc3RyICJkZWJlIGZpamFyc2UgZXjhY3RhbWVudGUgdW5hIGludGVyZmFjZSBlbiBzaXN0ZW1hcyByb3RvcyBzaW4gSVBfUkVDVklGIgorCisjLCBmdXp6eQorI34gbXNnaWQgImZhaWxlZCB0byBsb2FkICVzOiAlcyIKKyN+IG1zZ3N0ciAibm8gc2UgcHVkbyBjYXJnYXIgJXM6ICVzIgorCisjfiBtc2dpZCAiYmFkIG5hbWUgaW4gJXMiCisjfiBtc2dzdHIgIm5vbWJyZSBlcnLzbmVvIGVuICVzIgorCisjfiBtc2dpZCAiSWdub3JpbmcgREhDUCBsZWFzZSBmb3IgJXMgYmVjYXVzZSBpdCBoYXMgYW4gaWxsZWdhbCBkb21haW4gcGFydCIKKyN+IG1zZ3N0ciAiSWdub3JhbmRvIGFycmllbmRvIERIQ1AgcGFyYSAlcyBwb3JxdWUgdGllbmUgdW5hIHBhcnRlIGlsZWdhbCBkZSBkb21pbmlvIgorCisjfiBtc2dpZCAiSVNDIGRoY3BkIGludGVncmF0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0lTQ19SRUFERVIgaW4gc3JjL2NvbmZpZy5oIgorI34gbXNnc3RyICJpbnRlZ3JhY2nzbiBkaGNwZCBJU0Mgbm8gZGlzcG9uaWJsZTogZmlqYXIgSEFWRV9JU0NfUkVBREVSIGVuIHNyYy9jb25maWcuaCIKKworIywgZnV6enkKKyN+IG1zZ2lkICJpbGxlZ2FsIGRvbWFpbiAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorI34gbXNnc3RyICJkb21pbmlvIGlsZWdhbCAlcyBlbiBkaXJlY3RpdmEgZGhjcC1jb25maWcuIgorCisjfiBtc2dpZCAiaWxsZWdhbCBkb21haW4gJXMgaW4gJXMuIgorI34gbXNnc3RyICJkb21pbmlvIGlsZWdhbCAlcyBlbiAlcy4iCisKKyN+IG1zZ2lkICJydW5uaW5nIGFzIHJvb3QiCisjfiBtc2dzdHIgImNvcnJpZW5kbyBjb21vIHJvb3QiCisKKyN+IG1zZ2lkICJSZWFkIGxlYXNlcyBhdCBzdGFydHVwLCBidXQgbmV2ZXIgd3JpdGUgdGhlIGxlYXNlIGZpbGUuIgorI34gbXNnc3RyICJMZWVyIGFycmllbmRvcyBhbCBpbmljaW8sIHBlcm8gbnVuY2EgZXNjcmliaXIgZWwgYXJjaGl2byBkZSBhcnJpZW5kb3MuIgorCisjLCBmdXp6eQorI34gbXNnaWQgInJlYWQgJXMgLSAlZCBob3N0cyIKKyN+IG1zZ3N0ciAiZGlyZWNjafNuZXMgJXMgLSAlZCBsZe1kYXMiCisKKyN+IG1zZ2lkICJMaW1pdCBvZiAlZCBsZWFzZXMgZXhjZWVkZWQuIgorI34gbXNnc3RyICJM7W1pdGUgZGUgJWQgYXJyaWVuZG9zIGV4Y2VkaWRvLiIKKworI34gbXNnaWQgImJhZCBkaGNwLWhvc3QiCisjfiBtc2dzdHIgIm9wY2nzbiBkaGNwLWhvc3QgZXJy825lYSIKKworI34gbXNnaWQgImRvbWFpbnMiCisjfiBtc2dzdHIgImRvbWluaW9zIgorCisjfiBtc2dpZCAiSWdub3JpbmcgREhDUCBob3N0IG5hbWUgJXMgYmVjYXVzZSBpdCBoYXMgYW4gaWxsZWdhbCBkb21haW4gcGFydCIKKyN+IG1zZ3N0ciAiSWdub3JhbmRvIG5vbWJyZSBkZSBob3N0IERIQ1AgJXMgcG9ycXVlIGNvbnRpZW5lIHVuYSBwYXJ0ZSBpbGVnYWwgZGUgZG9taW5pbyIKKworI34gbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiIKKyN+IG1zZ3N0ciAiTW9zdHJhciBlc3RlIG1lbnNhamUuIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVtIgorI34gbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgJXM6ICVtIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6JW0iCisjfiBtc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciAlczolbSIKZGlmZiAtLWdpdCBhL3BvL2ZpLnBvIGIvcG8vZmkucG8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTBhNmZiZAotLS0gL2Rldi9udWxsCisrKyBiL3BvL2ZpLnBvCkBAIC0wLDAgKzEsMTQxMSBAQAorIyBGaW5uaXNoIHRyYW5zbGF0aW9ucyBmb3IgZG5zbWFzcSBwYWNrYWdlLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiwgMjAwNS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGRuc21hc3EgMi4yNFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNi0xOCAxMjoyNCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNS0xMS0yOCAyMjowNSswMDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPlxuIgorIkxhbmd1YWdlLVRlYW06IEZpbm5pc2ggPHRyYW5zbGF0aW9uLXRlYW0tZmlAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUFTQ0lJXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBjYWNoZS5jOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjc5OCBkaGNwLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzo4NTYgZGhjcC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbmFtZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6ODYzIGRoY3AuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyAtICVkIGFkZHJlc3NlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjkwMgorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzo5MzMgb3B0aW9uLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIGRpcmVjdG9yeSAlczogJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMTI5CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgJWx1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYWNoZSBzaXplICVkLCAlZC8lZCBjYWNoZSBpbnNlcnRpb25zIHJlLXVzZWQgdW5leHBpcmVkIGNhY2hlIGVudHJpZXMuIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvcndhcmRlZCAldSwgcXVlcmllcyBhbnN3ZXJlZCBsb2NhbGx5ICV1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogJXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjE5MQorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjIyOSBvcHRpb24uYzo1NDgKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZpbml0ZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMjgKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjI5Cittc2dpZCAiUmV0dXJuIGlwYWRkciBmb3IgYWxsIGhvc3RzIGluIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzAKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzEKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgaW4gZW50cmllcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjM0Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZDogcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzNQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjM2Cittc2dpZCAiUmV0dXJuIHNlbGYtcG9pbnRpbmcgTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzNworbXNnaWQgIkV4cGFuZCBzaW1wbGUgbmFtZXMgaW4gL2V0Yy9ob3N0cyB3aXRoIGRvbWFpbi1zdWZmaXguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzOAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjM5Cittc2dpZCAiRW5hYmxlIERIQ1AgaW4gdGhlIHJhbmdlIGdpdmVuIHdpdGggbGVhc2UgZHVyYXRpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyBncm91cCBhZnRlciBzdGFydHVwIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0MQorbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDIKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQzCittc2dpZCAiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBsb2FkICVzIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDYKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0NworbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIE5PVCB0byBsaXN0ZW4gb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0OAorbXNnaWQgIk1hcCBESENQIHVzZXIgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDkKK21zZ2lkICJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjUwCittc2dpZCAiTWFwIFJGQzMwNDYgcmVtb3RlLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjUxCittc2dpZCAiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1MgorbXNnaWQgIkRvbid0IGRvIERIQ1AgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjUzCittc2dpZCAiRm9yY2UgYnJvYWRjYXN0IHJlcGxpZXMgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU0Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZCwgZG8gTk9UIHJ1biBpbiBkZWJ1ZyBtb2RlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTUKK21zZ2lkICJBc3N1bWUgd2UgYXJlIHRoZSBvbmx5IERIQ1Agc2VydmVyIG9uIHRoZSBsb2NhbCBuZXR3b3JrLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB3aGVyZSB0byBzdG9yZSBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTcKK21zZ2lkICJSZXR1cm4gTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1OAorbXNnaWQgIlNwZWNpZnkgYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTkKK21zZ2lkICJTcGVjaWZ5IEJPT1RQIG9wdGlvbnMgdG8gREhDUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgcG9sbCAlcyBmaWxlLCByZWxvYWQgb25seSBvbiBTSUdIVVAuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2MQorbXNnaWQgIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgbmFtZXNlcnZlcnMgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIGdpdmVuIGluICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjMKK21zZ2lkICJTcGVjaWZ5IG9wdGlvbnMgdG8gYmUgc2VudCB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NAorbXNnaWQgIkRIQ1Agb3B0aW9uIHNlbnQgZXZlbiBpZiB0aGUgY2xpZW50IGRvZXMgbm90IHJlcXVlc3QgaXQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NQorbXNnaWQgIlNwZWNpZnkgcG9ydCB0byBsaXN0ZW4gZm9yIEROUyByZXF1ZXN0cyBvbiAoZGVmYXVsdHMgdG8gNTMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBzdXBwb3J0ZWQgVURQIHBhY2tldCBzaXplIGZvciBFRE5TLjAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY3Cittc2dpZCAiTG9nIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjgKK21zZ2lkICJGb3JjZSB0aGUgb3JpZ2luYXRpbmcgcG9ydCBmb3IgdXBzdHJlYW0gRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2OQorbXNnaWQgIkRvIE5PVCByZWFkIHJlc29sdi5jb25mLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIHJlc29sdi5jb25mIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3MQorbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyhlcykgb2YgdXBzdHJlYW0gc2VydmVycyB3aXRoIG9wdGlvbmFsIGRvbWFpbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3MgorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjczCittc2dpZCAiU3BlY2lmeSB0aGUgZG9tYWluIHRvIGJlIGFzc2lnbmVkIGluIERIQ1AgbGVhc2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzQKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc1Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgcmVwbGllcyBmcm9tIC9ldGMvaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3NgorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyB1c2VyIGFmdGVyIHN0YXJ0dXAuIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3OAorbXNnaWQgIk1hcCBESENQIHZlbmRvciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3OQorbXNnaWQgIkRpc3BsYXkgZG5zbWFzcSB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4MAorbXNnaWQgIlRyYW5zbGF0ZSBJUHY0IGFkZHJlc3NlcyBmcm9tIHVwc3RyZWFtIHNlcnZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4MQorbXNnaWQgIlNwZWNpZnkgYSBTUlYgcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODIKK21zZ2lkICJEaXNwbGF5IHRoaXMgbWVzc2FnZS4gVXNlIC0taGVscCBkaGNwIGZvciBrbm93biBESENQIG9wdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4MworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg1Cittc2dpZCAiQW5zd2VyIEROUyBxdWVyaWVzIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgYSBxdWVyeSB3YXMgc2VudCB0by4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg2Cittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg3Cittc2dpZCAiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg4Cittc2dpZCAiR2l2ZSBETlMgbmFtZSB0byBJUHY0IGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODkKK21zZ2lkICJCaW5kIG9ubHkgdG8gaW50ZXJmYWNlcyBpbiB1c2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkxCittc2dpZCAiRW5hYmxlIHRoZSBEQnVzIGludGVyZmFjZSBmb3Igc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzLCBldGMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MgorbXNnaWQgIkRvIG5vdCBwcm92aWRlIERIQ1Agb24gdGhpcyBpbnRlcmZhY2UsIG9ubHkgcHJvdmlkZSBETlMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MworbXNnaWQgIkVuYWJsZSBkeW5hbWljIGFkZHJlc3MgYWxsb2NhdGlvbiBmb3IgYm9vdHAuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NAorbXNnaWQgIk1hcCBNQUMgYWRkcmVzcyAod2l0aCB3aWxkY2FyZHMpIHRvIG9wdGlvbiBzZXQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NQorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk2Cittc2dpZCAiRGlzYWJsZSBJQ01QIGVjaG8gYWRkcmVzcyBjaGVja2luZyBpbiB0aGUgREhDUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NworbXNnaWQgIlNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5OAorbXNnaWQgIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5OQorbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDAKK21zZ2lkICJEbyBub3QgdXNlIGxlYXNlZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzAzCittc2dpZCAiSWdub3JlIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNAorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDUKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNgorbXNnaWQgIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNworbXNnaWQgIkFkZCBjbGllbnQgSVAgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwOAorbXNnaWQgIkFsbG93IGFjY2VzcyBvbmx5IHRvIGZpbGVzIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgZG5zbWFzcS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbm5jdXJyZW50IFRGVFAgdHJhbnNmZXJzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxMAorbXNnaWQgIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzExCittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzEyCittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzEzCittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxNAorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTUKK21zZ2lkICJBbHdheXMgcGVyZm9ybSBETlMgcXVlcmllcyB0byBhbGwgc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE2Cittc2dpZCAiU2V0IHRhZyBpZiBjbGllbnQgaW5jbHVkZXMgbWF0Y2hpbmcgb3B0aW9uIGluIHJlcXVlc3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxNworbXNnaWQgIlVzZSBhbHRlcm5hdGl2ZSBwb3J0cyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE4Cittc2dpZCAiUnVuIGxlYXNlLWNoYW5nZSBzY3JpcHQgYXMgdGhpcyB1c2VyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTkKK21zZ2lkICJTcGVjaWZ5IE5BUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMAorbXNnaWQgIlNwZWNpZnkgbG93ZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjEKK21zZ2lkICJVc2Ugb25seSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWVzIGZvciBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMgorbXNnaWQgIlNwZWNpZnkgYWxpYXMgbmFtZSBmb3IgTE9DQUwgRE5TIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMworbXNnaWQgIlByb21wdCB0byBzZW5kIHRvIFBYRSBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjQKK21zZ2lkICJCb290IHNlcnZpY2UgZm9yIFBYRSBtZW51LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjUKK21zZ2lkICJDaGVjayBjb25maWd1cmF0aW9uIHN5bnRheC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogZG5zbWFzcSBbb3B0aW9uc11cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIHNob3J0IG9wdGlvbnMgb25seSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjYxNworIywgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUCBvcHRpb25zOlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjczNQorbXNnaWQgImJhZCBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3OTIKK21zZ2lkICJiYWQgSVAgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo4OTEKK21zZ2lkICJiYWQgZG9tYWluIGluIGRoY3Atb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjk1MAorbXNnaWQgImRoY3Atb3B0aW9uIHRvbyBsb25nIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjk1OQorbXNnaWQgImlsbGVnYWwgZGhjcC1tYXRjaCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo5OTUKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGZsYWciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTAwMworbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQga2V5d29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDg2IHRmdHAuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTEzMQorbXNnaWQgIm9ubHkgb25lIGRoY3AtaG9zdHNmaWxlIGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTEzOAorbXNnaWQgIm9ubHkgb25lIGRoY3Atb3B0c2ZpbGUgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMTgzCittc2dpZCAiYmFkIE1YIHByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTE4OAorbXNnaWQgImJhZCBNWCBuYW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEyMDIKK21zZ2lkICJiYWQgTVggdGFyZ2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEyMTIKK21zZ2lkICJjYW5ub3QgcnVuIHNjcmlwdHMgdW5kZXIgdUNsaW51eCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMjE0Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9TQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgbGVhc2UtY2hhbmdlIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTQ0MiBvcHRpb24uYzoxNDQ2Cittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTQ2NSBvcHRpb24uYzoxNDkwCittc2dpZCAiaW50ZXJmYWNlIGJpbmRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjExCittc2dpZCAiYmFkIHBvcnQgcmFuZ2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTYyOAorbXNnaWQgImJhZCBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2NjkKK21zZ2lkICJiYWQgZGhjcC1yYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjk1Cittc2dpZCAib25seSBvbmUgbmV0aWQgdGFnIGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTc0MAorbXNnaWQgImluY29uc2lzdGVudCBESENQIHJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE5MTIKK21zZ2lkICJiYWQgREhDUCBob3N0IG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjIwMSBvcHRpb24uYzoyNDgxCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMjg0Cittc2dpZCAiaW52YWxpZCBhbGlhcyByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMjk3Cittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzMjIKK21zZ2lkICJiYWQgQ05BTUUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjMyNworbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzQ3Cittc2dpZCAiYmFkIFBUUiByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjM3OAorbXNnaWQgImJhZCBOQVBUUiByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQwMworbXNnaWQgIlRYVCByZWNvcmQgc3RyaW5nIHRvbyBsb25nIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0NTEKK21zZ2lkICJiYWQgVFhUIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDY3Cittc2dpZCAiYmFkIFNSViByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ3NAorbXNnaWQgImJhZCBTUlYgdGFyZ2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0ODgKK21zZ2lkICJpbnZhbGlkIHByaW9yaXR5IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0OTUKK21zZ2lkICJpbnZhbGlkIHdlaWdodCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTE0Cittc2dpZCAidW5zdXBwb3J0ZWQgb3B0aW9uIChjaGVjayB0aGF0IGRuc21hc3Egd2FzIGNvbXBpbGVkIHdpdGggREhDUC9URlRQL0RCdXMgc3VwcG9ydCkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlcyBuZXN0ZWQgdG9vIGRlZXAgaW4gJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU2NSB0ZnRwLmM6NTEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjI2Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjczCittc2dpZCAiYmFkIG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjc1Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY3NworbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2ODUKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGF0IGxpbmUgJWQgb2YgJSVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3NDAgb3B0aW9uLmM6Mjc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSB2ZXJzaW9uICVzICAlc1xuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbXBpbGUgdGltZSBvcHRpb25zICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXRcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBvciAzLlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NTgKK21zZ2lkICJ0cnkgLS1oZWxwIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NjAKK21zZ2lkICJ0cnkgLXciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBob3N0LW5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MzIKK21zZ2lkICJvbmx5IG9uZSByZXNvbHYuY29uZiBmaWxlIGFsbG93ZWQgaW4gbm8tcG9sbCBtb2RlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTQyCittc2dpZCAibXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlc29sdi5jb25mIHRvIHJlYWQgZG9tYWluIGZyb20uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NDUgbmV0d29yay5jOjc1NCBkaGNwLmM6NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlYXJjaCBkaXJlY3RpdmUgZm91bmQgaW4gJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk4MworbXNnaWQgInRoZXJlIG11c3QgYmUgYSBkZWZhdWx0IGRvbWFpbiB3aGVuIC0tZGhjcC1mcWRuIGlzIHNldCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTg3Cittc2dpZCAic3ludGF4IGNoZWNrIE9LIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo0MzcKK21zZ2lkICJwb3NzaWJsZSBETlMtcmViaW5kIGF0dGFjayBkZXRlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMgaW4gYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NDE3IGRuc21hc3EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgSVBWNiBvcHRpb25zIG9uIGxpc3RlbmluZyBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxpc3RlbiBvbiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBURlRQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBzZXJ2ZXIgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzIwCittc2dpZCAidW5xdWFsaWZpZWQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcyMAorbXNnaWQgIm5hbWVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MjIKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MjQKK21zZ2lkICJkb21haW4iCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBsb2NhbCBhZGRyZXNzZXMgb25seSBmb3IgJXMgJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIGZvciAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQodmlhICVzKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE0NgorbXNnaWQgIlRGVFAgc2VydmVyIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX1RGVFAgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNTEKK21zZ2lkICJhc3ljaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgU29sYXJpcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGxpc3Qgb2YgaW50ZXJmYWNlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGludGVyZmFjZSB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIwMSBkbnNtYXNxLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMDQKK21zZ2lkICJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB1c2VyIG9yIGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byBmaWxlc3lzdGVtIHJvb3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlc2l6ZSAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21waWxlIHRpbWUgb3B0aW9uczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ2MAorbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBjb25uZWN0ZWQgdG8gc3lzdGVtIGJ1cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDYyCittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGJ1cyBjb25uZWN0aW9uIHBlbmRpbmciCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBmYWlsZWQgdG8gY2hhbmdlIG93bmVyIG9mICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDcxCittc2dpZCAic2V0dGluZyAtLWJpbmQtaW50ZXJmYWNlcyBvcHRpb24gYmVjYXVzZSBvZiBPUyBsaW1pdGF0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGludGVyZmFjZSAlcyBkb2VzIG5vdCBjdXJyZW50bHkgZXhpc3QiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ4MQorbXNnaWQgIndhcm5pbmc6IGlnbm9yaW5nIHJlc29sdi1maWxlIGZsYWcgYmVjYXVzZSBuby1yZXNvbHYgaXMgc2V0IgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0ODQKK21zZ2lkICJ3YXJuaW5nOiBubyB1cHN0cmVhbSBzZXJ2ZXJzIGNvbmZpZ3VyZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBlbmFibGVkLCBxdWV1ZSBsaW1pdCBpcyAlZCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMsIGxlYXNlIHRpbWUgJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjUwMworIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBwcm94eSBvbiBzdWJuZXQgJS4wcyVzJS4wcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIElQIHJhbmdlICVzIC0tICVzLCBsZWFzZSB0aW1lICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo1MTkKK21zZ2lkICJyb290IGlzICIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTE5Cittc2dpZCAiZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTIxCittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICJyZXN0cmljdGluZyBtYXhpbXVtIHNpbXVsdGFuZW91cyBURlRQIHRyYW5zZmVycyB0byAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NjY3Cittc2dpZCAiY29ubmVjdGVkIHRvIHN5c3RlbSBEQnVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgaW50byBiYWNrZ3JvdW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInNldHRpbmcgY2FwYWJpbGl0aWVzIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc2NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIHVzZXItaWQgdG8gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwaWRmaWxlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Nzc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNoaWxkIHByb2Nlc3Mga2lsbGVkIGJ5IHNpZ25hbCAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNoaWxkIHByb2Nlc3MgZXhpdGVkIHdpdGggc3RhdHVzICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWN1dGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4ODUKK21zZ2lkICJleGl0aW5nIG9uIHJlY2VpcHQgb2YgU0lHVEVSTSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6OTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlcnZlcnMgZm91bmQgaW4gJXMsIHdpbGwgcmV0cnkiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IG9wdGlvbnMgb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQIHNlcnZlciBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVAgcmF3IHNvY2tldDogJXMuIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCBwYWNrZXQgcmVjZWl2ZWQgb24gJXMgd2hpY2ggaGFzIG5vIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBsaW5lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlLiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzIGluICVzLiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtb3JlIHRoYW4gb25lIGFkZHJlc3MgaW4gaG9zdHNmaWxlLCB1c2luZyAlcyBmb3IgREhDUCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6OTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzICglcykgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gb3IgY3JlYXRlIGxlYXNlIGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6OTIKK21zZ2lkICJ0b28gbWFueSBzdG9yZWQgbGVhc2VzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBydW4gbGVhc2UtaW5pdCBzY3JpcHQgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIChyZXRyeSBpbiAldXMpIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1AgcmVxdWVzdCAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzM3Cittc2dpZCAid2l0aCBzdWJuZXQgc2VsZWN0b3IiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjMzNworbXNnaWQgInZpYSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IEF2YWlsYWJsZSBESENQIHN1Ym5ldDogJXMvJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBBdmFpbGFibGUgREhDUCByYW5nZTogJXMgLS0gJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM4NAorbXNnaWQgImRpc2FibGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0MTggcmZjMjEzMS5jOjg4MyByZmMyMTMxLmM6MTI0MgorbXNnaWQgImlnbm9yZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQzMyByZmMyMTMxLmM6MTEwMAorbXNnaWQgImFkZHJlc3MgaW4gdXNlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0NDcgcmZjMjEzMS5jOjkzNworbXNnaWQgIm5vIGFkZHJlc3MgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0NTQgcmZjMjEzMS5jOjEwNjMKK21zZ2lkICJ3cm9uZyBuZXR3b3JrIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0NjcKK21zZ2lkICJubyBhZGRyZXNzIGNvbmZpZ3VyZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQ3MyByZmMyMTMxLmM6MTExMworbXNnaWQgIm5vIGxlYXNlcyBsZWZ0IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IHByb3ZpZGVzIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgVmVuZG9yIGNsYXNzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IFVzZXIgY2xhc3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo3MzcKK21zZ2lkICJQWEUgQklTIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJkaXNhYmxpbmcgREhDUCBzdGF0aWMgYWRkcmVzcyAlcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjg3NAorbXNnaWQgInVua25vd24gbGVhc2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgbGVhc2VkIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGluIHVzZSBieSB0aGUgc2VydmVyIG9yIHJlbGF5IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5MzUgcmZjMjEzMS5jOjExMDYKK21zZ2lkICJubyB1bmlxdWUtaWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMDMKK21zZ2lkICJ3cm9uZyBzZXJ2ZXItSUQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMjIKK21zZ2lkICJ3cm9uZyBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDM5Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDcxCittc2dpZCAiYWRkcmVzcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDgyCittc2dpZCAic3RhdGljIGxlYXNlIGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTA4NgorbXNnaWQgImFkZHJlc3MgcmVzZXJ2ZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJhbmRvbmluZyBsZWFzZSB0byAlcyBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTU4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSB0YWdzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBib290ZmlsZSBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTYwNQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBzZXJ2ZXIgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgbmV4dCBzZXJ2ZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIERIQ1AvQk9PVFAgb3B0aW9uICVkOiBubyBzcGFjZSBsZWZ0IGluIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTkxOQorbXNnaWQgIlBYRSBtZW51IHRvbyBsYXJnZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MjAzNAorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkb21haW4gJXMgZm9yIERIQ1AgaG9zdCBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHJlcXVlc3RlZCBvcHRpb25zOiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXRsaW5rLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBuZXRsaW5rIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogbmV0bGluay5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXRsaW5rIHJldHVybnMgZXJyb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IGRidXMuYzoxNTAKK21zZ2lkICJhdHRlbXB0IHRvIHNldCBhbiBJUHY2IHNlcnZlciBhZGRyZXNzIHZpYSBEQnVzIC0gbm8gSVB2NiBzdXBwb3J0IgorbXNnc3RyICIiCisKKyM6IGRidXMuYzoyODYKK21zZ2lkICJzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMgZnJvbSBEQnVzIgorbXNnc3RyICIiCisKKyM6IGRidXMuYzozMjQKK21zZ2lkICJjb3VsZCBub3QgcmVnaXN0ZXIgYSBEQnVzIG1lc3NhZ2UgaGFuZGxlciIKK21zZ3N0ciAiIgorCisjOiBicGYuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIEJQRiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJwZi5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MTc5Cittc2dpZCAidW5hYmxlIHRvIGdldCBmcmVlIHBvcnQgZm9yIFRGVFAiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIHNlbnQgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgZXJyb3IgJWQgJXMgcmVjZWl2ZWQgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgZmFpbGVkIHNlbmRpbmcgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogbG9nLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJmbG93OiAlZCBsb2cgZW50cmllcyBsb3N0IgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzo0MTUKK21zZ2lkICJGQUlMRUQgdG8gc3RhcnQgdXAiCittc2dzdHIgIiIKZGlmZiAtLWdpdCBhL3BvL2ZyLnBvIGIvcG8vZnIucG8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzlmMmY5ZgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2ZyLnBvCkBAIC0wLDAgKzEsMTUwNCBAQAorIyBGcmVuY2ggdHJhbnNsYXRpb25zIGZvciBkbnNtYXNxIHBhY2thZ2UuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIExpb25lbCBUcmljb24gPGxpb25lbC50cmljb25AZnJlZS5mcj4sIDIwMDUuCisjIFRyYW5zbGF0aW9uIGNvbXBsZXRlZCBieSBHaWxkYXMgTGUgTmFkYW4gPDNudHIwcDEzQGdtYWlsLmNvbT4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGRuc21hc3EgMi41MVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNi0xOCAxMjoyNCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0wOS0zMCAxMDoyMiswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiAgR2lsZGFzIExlIE5hZGFuIDwzbnRyMHAxM0BnbWFpbC5jb20+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgorCisjOiBjYWNoZS5jOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjaGFyZ2VyIGxlcyBub21zIOAgcGFydGlyIGRlICVzIDogJXMiCisKKyM6IGNhY2hlLmM6Nzk4IGRoY3AuYzo3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFkZHJlc3MgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAibWF1dmFpc2UgYWRyZXNzZSBkYW5zICVzIGxpZ25lICVkIgorCisjOiBjYWNoZS5jOjg1NiBkaGNwLmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIm1hdXZhaXMgbm9tIGRhbnMgJXMgbGlnbmUgJWQiCisKKyM6IGNhY2hlLmM6ODYzIGRoY3AuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyAtICVkIGFkZHJlc3NlcyIKK21zZ3N0ciAibGVjdHVyZSAlcyAtICVkIGFkcmVzc2VzIgorCisjOiBjYWNoZS5jOjkwMgorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgImNhY2hlIHZpZOkiCisKKyM6IGNhY2hlLmM6OTMzIG9wdGlvbi5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyBkaXJlY3RvcnkgJXM6ICVzIgorbXNnc3RyICJOZSBwZXV0IHBhcyBsaXJlIGxlIHLpcGVydG9pcmUgJXMgOiAlcyIKKworIzogY2FjaGUuYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIm5lIGRvbm5lIHBhcyBkZSBub20gJXMgYXUgYmFpbCBESENQIGRlICVzIHBhcmNlLXF1ZSBsZSBub20gZXhpc3RlIGRhbnMgJXMgYXZlYyBsJ2FkcmVzc2UgJXMiCisKKyM6IGNhY2hlLmM6MTEyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lICVsdSIKK21zZ3N0ciAiaG9yb2RhdGFnZSAlbHUiCisKKyM6IGNhY2hlLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYWNoZSBzaXplICVkLCAlZC8lZCBjYWNoZSBpbnNlcnRpb25zIHJlLXVzZWQgdW5leHBpcmVkIGNhY2hlIGVudHJpZXMuIgorbXNnc3RyICJ0YWlsbGUgZGUgY2FjaGUgJWQsICVkLyVkIGluc2VydGlvbnMgZGFucyBsZSBjYWNoZSBlbnRy6WVzIG5vbi1leHBpcullcyBy6XV0aWxpc+llcyIKKworIzogY2FjaGUuYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yd2FyZGVkICV1LCBxdWVyaWVzIGFuc3dlcmVkIGxvY2FsbHkgJXUiCittc2dzdHIgInJlcXXqdGVzIHRyYW5zbWlzZXMgJXUsIHJlcXXqdGVzIHLpc29sdWVzIGxvY2FsZW1lbnQgJXUiCisKKyM6IGNhY2hlLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgInNlcnZldXIgJXMjJWQ6IHJlcXXqdGVzIGVudm956WVzICV1LCByZXF16nRlcyBy6WVzc2F56WVzIG91IOljaG916WVzICV1IgorCisjOiB1dGlsLmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2luaXRpYWxpc2VyIGxlIGfpbulyYXRldXIgZGUgbm9tYnJlIGFs6WF0b2lyZSA6ICVzIgorCisjOiB1dGlsLmM6MTkxCittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FsbG91ZXIgbGEgbeltb2lyZSIKKworIzogdXRpbC5jOjIyOSBvcHRpb24uYzo1NDgKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FsbG91ZXIgZGUgbGEgbeltb2lyZSIKKworIzogdXRpbC5jOjIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIHBpcGU6ICVzIgorbXNnc3RyICJOZSBwZXV0IHBhcyBjcullciBsZSB0dWJlICVzIDogJXMiCisKKyM6IHV0aWwuYzoyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlICVkIGJ5dGVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWxsb3VlciAlZCBvY3RldHMiCisKKyM6IHV0aWwuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5maW5pdGUiCittc2dzdHIgImlsbGltaXTpKGUpIgorCisjOiBvcHRpb24uYzoyMjgKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlNw6WNpZmllIGxhIG91IGxlcyBhZHJlc3NlKHMpIGxvY2FsZXMgb/kgbGUgZOltb24gZG9pdCBzZSBtZXR0cmUg4CBsJ+ljb3V0ZS4iCisKKyM6IG9wdGlvbi5jOjIyOQorbXNnaWQgIlJldHVybiBpcGFkZHIgZm9yIGFsbCBob3N0cyBpbiBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIlJldG91cm5lIGxlcyBhZHJlc3NlcyBJUCBwb3VyIHRvdXRlcyBsZXMgbWFjaGluZXMgcHLpc2VudGVzIGRhbnMgbGVzIGRvbWFpbmVzIHNw6WNpZmnpcyIKKworIzogb3B0aW9uLmM6MjMwCittc2dpZCAiRmFrZSByZXZlcnNlIGxvb2t1cHMgZm9yIFJGQzE5MTggcHJpdmF0ZSBhZGRyZXNzIHJhbmdlcy4iCittc2dzdHIgIlRyYWR1Y3Rpb24gaW52ZXJzZSB0cnVxdellIHBvdXIgbGEgcGxhZ2UgZCdhZHJlc3NlIHByaXbpZSBSRkMxOTE4IgorCisjOiBvcHRpb24uYzoyMzEKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiVHJhaXRlIGwnYWRyZXNzZSBJUCBjb21tZSB1biBkb21haW5lIGluZXhpc3RhbnQgTlhET01BSU4gKGNvbnRvdXJuZSBsZSBzeXN0ZW1lIGRlIHJlZGlyZWN0aW9uIGRlIFZlcmlzaWduKSIKKworIzogb3B0aW9uLmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGluIGVudHJpZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNw6WNpZmllIGxlIG5vbWJyZSBkJ2VudHLpZXMgcXVlIGNvbnRpZW5kcmEgbGUgY2FjaGUgKHBhciBk6WZhdXQgOiAlcykuIgorCisjOiBvcHRpb24uYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNw6WNpZmllIGxlIG5vbSBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gKHBhciBk6WZhdXQgOiAlcykiCisKKyM6IG9wdGlvbi5jOjIzNAorbXNnaWQgIkRvIE5PVCBmb3JrIGludG8gdGhlIGJhY2tncm91bmQ6IHJ1biBpbiBkZWJ1ZyBtb2RlLiIKK21zZ3N0ciAiTmUgcGFzc2UgcGFzIGVuIHTiY2hlIGRlIGZvbmQgOiBk6W1hcnJlIGVuIG1vZGUgZGVidWciCisKKyM6IG9wdGlvbi5jOjIzNQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIk5lIHJldHJhbnNtZXQgcGFzIGxlcyByZXF16nRlcyBxdWkgbidvbnQgcGFzIGRlIGRvbWFpbmUuIgorCisjOiBvcHRpb24uYzoyMzYKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIlJldG91cm5lIGxlcyBjaGFtcHMgTVggcG91ciBsZXMgbWFjaGluZXMgbG9jYWxlcy4iCisKKyM6IG9wdGlvbi5jOjIzNworbXNnaWQgIkV4cGFuZCBzaW1wbGUgbmFtZXMgaW4gL2V0Yy9ob3N0cyB3aXRoIGRvbWFpbi1zdWZmaXguIgorbXNnc3RyICJFdGVuZCBsZXMgbm9tcyB1bmlxdWVzIGRlcyBtYWNoaW5lcyBkYW5zIC9ldGMvaG9zdHMgYXZlYyBsZSBzdWZmaXhlIGR1IGRvbWFpbmUuIgorCisjOiBvcHRpb24uYzoyMzgKK21zZ2lkICJEb24ndCBmb3J3YXJkIHNwdXJpb3VzIEROUyByZXF1ZXN0cyBmcm9tIFdpbmRvd3MgaG9zdHMuIgorbXNnc3RyICJOZSByZXRyYW5zbWV0IHBhcyBsZXMgZmF1c3NlcyByZXF16nRlcyBETlMgZW4gcHJvdmVuYW5jZSBkZXMgbWFjaGluZXMgV2luZG93cy4iCisKKyM6IG9wdGlvbi5jOjIzOQorbXNnaWQgIkVuYWJsZSBESENQIGluIHRoZSByYW5nZSBnaXZlbiB3aXRoIGxlYXNlIGR1cmF0aW9uLiIKK21zZ3N0ciAiQXV0b3Jpc2UgREhDUCBkYW5zIGxhIHBsYWdlIGQnYWRyZXNzZXMgZG9ubullIHN1ciBsYSBkdXLpZSBkZSB2YWxpZGl06SBkdSBiYWlsLiIKKworIzogb3B0aW9uLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIGdyb3VwIGFmdGVyIHN0YXJ0dXAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIk9uIGNoYW5nZSBwb3VyIGNlIGdyb3VwZSBhcHLocyBsZSBk6W1hcnJhZ2UgKHBhciBk6WZhdXQgOiAlcykuIgorCisjOiBvcHRpb24uYzoyNDEKK21zZ2lkICJTZXQgYWRkcmVzcyBvciBob3N0bmFtZSBmb3IgYSBzcGVjaWZpZWQgbWFjaGluZS4iCittc2dzdHIgIk9uIGFzc2lnbmUgdW5lIGFkcmVzc2Ugb3UgdW4gbm9tIHBvdXIgdW5lIG1hY2hpbmUgc3DpY2lmaellLiIKKworIzogb3B0aW9uLmM6MjQyCittc2dpZCAiUmVhZCBESENQIGhvc3Qgc3BlY3MgZnJvbSBmaWxlIgorbXNnc3RyICJMZWN0dXJlIGRlcyBzcOljaWZpY2F0aW9ucyBkJ2j0dGVzIERIQ1Ag4CBwYXJ0aXIgZHUgZmljaGllciIKKworIzogb3B0aW9uLmM6MjQzCittc2dpZCAiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUiCittc2dzdHIgIkxlY3R1cmUgZGVzIG9wdGlvbnMgREhDUCDgIHBhcnRpciBkdSBmaWNoaWVyIgorCisjOiBvcHRpb24uYzoyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIGxvYWQgJXMgZmlsZS4iCittc2dzdHIgIk5lIGNoYXJnZSBQQVMgbGUgZmljaGllciAlcy4iCisKKyM6IG9wdGlvbi5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiU3DpY2lmaWUgdW4gbm9tIGRlIGZpY2hpZXIgaG9zdHMg4CBsaXJlIGVuIGNvbXBs6W1lbnQgZGUgJXMiCisKKyM6IG9wdGlvbi5jOjI0NgorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlNw6WNpZmllIGxhIG91IGxlcyBpbnRlcmZhY2Uocykgb/kgbGUgZOltb24gZG9pdCBzZSBtZXR0cmUg4CBsJ+ljb3V0ZS4iCisKKyM6IG9wdGlvbi5jOjI0NworbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIE5PVCB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTcOljaWZpZSBsYSBvdSBsZXMgaW50ZXJmYWNlKHMpIHF1ZSBsZSBk6W1vbiBuZSBkb2l0IFBBUyB0cmFpdGVyLiIKKworIworIzogb3B0aW9uLmM6MjQ4Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJBc3NvY2llIGxlcyBjbGFzc2VzIGQndXRpbGlzYXRldXJzICgndXNlciBjbGFzcycpIERIQ1AgYXV4IG9wdGlvbnMuIgorCisjOiBvcHRpb24uYzoyNDkKK21zZ2lkICJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iCittc2dzdHIgIkFzc29jaWUgbGVzIGlkZW50aWZpYW50cyBkZSBjaXJjdWl0cyBSRkMzMDQ2ICgnY2lyY3VpdC1pZCcpIGF1eCBvcHRpb25zIgorCisjOiBvcHRpb24uYzoyNTAKK21zZ2lkICJNYXAgUkZDMzA0NiByZW1vdGUtaWQgdG8gdGFnLiIKK21zZ3N0ciAiQXNzb2NpZSBsZXMgaWRlbnRpZmlhbnRzIGRpc3RhbnRzIFJGQzMwNDYgKCdyZW1vdGUtaWQnKSBhdXggb3B0aW9ucyIKKworIzogb3B0aW9uLmM6MjUxCittc2dpZCAiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIgorbXNnc3RyICJBc3NvY2llIGxlcyBpZGVudGlmaWFudHMgZGUgc291c2NyaXB0ZXVycyBSRkMzOTkzICgnc3Vic2NyaWJlci1pZCcpIGF1eCBvcHRpb25zIgorCisjCisjOiBvcHRpb24uYzoyNTIKK21zZ2lkICJEb24ndCBkbyBESENQIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJOZSBwYXMgYXV0b3Jpc2VyIERIQ1AgcG91ciBsZXMgbWFjaGluZXMg6W51bWVy6WVzIGRhbnMgbGVzIG9wdGlvbnMuIgorCisjCisjOiBvcHRpb24uYzoyNTMKK21zZ2lkICJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiRm9yY2VyIGxlcyBy6XBvbnNlcyBwYXIgJ2Jyb2FkY2FzdCcgcG91ciBsZXMgbWFjaGluZXMg6W51bWVy6WVzIGRhbnMgbGVzIG9wdGlvbnMuIgorCisjOiBvcHRpb24uYzoyNTQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICJOZSBwYXNzZSBwYXMgZW4gdOJjaGUgZGUgZm9uZCwgbmUgcGFzIHMnZXjpY3V0ZXIgZW4gbW9kZSBkZWJ1Zy4iCisKKyM6IG9wdGlvbi5jOjI1NQorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICJPbiBjb25zaWTocmUgcXVlIGwnb24gZXN0IGxlIHNldWwgc2VydmV1ciBESENQIHN1ciBsZSBy6XNlYXUgbG9jYWwuIgorCisjOiBvcHRpb24uYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB3aGVyZSB0byBzdG9yZSBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3DpY2lmaWUgb/kgaWwgZmF1dCBzYXV2ZWdhcmRlciBsZXMgYmF1eCBESENQIChwYXIgZOlmYXV0IDogJXMpLiIKKworIzogb3B0aW9uLmM6MjU3Cittc2dpZCAiUmV0dXJuIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiUmV0b3VybmUgbGVzIGNoYW1wcyBNWCBwb3VyIGxlcyBtYWNoaW5lcyBsb2NhbGVzLiIKKworIzogb3B0aW9uLmM6MjU4Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJTcOljaWZpZSB1biBjaGFtcCBNWC4iCisKKyM6IG9wdGlvbi5jOjI1OQorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIlNw6WNpZmllIGxlcyBvcHRpb25zIEJPT1RQIHBvdXIgbGUgc2VydmV1ciBESENQLiIKKworIzogb3B0aW9uLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBwb2xsICVzIGZpbGUsIHJlbG9hZCBvbmx5IG9uIFNJR0hVUC4iCittc2dzdHIgIk5lIHBhcyBzY3J1dGVyIGxlIGZpY2hpZXIgJXMsIG5lIHJlY2hhcmdlciBsZXMgbW9kaWZpY2F0aW9ucyBxdWUgc3VyIHLpY2VwdGlvbiBkdSBzaWduYWwgU0lHSFVQLiIKKworIzogb3B0aW9uLmM6MjYxCittc2dpZCAiRG8gTk9UIGNhY2hlIGZhaWxlZCBzZWFyY2ggcmVzdWx0cy4iCittc2dzdHIgIk5lIHBsYWNlIHBhcyBlbiBjYWNoZSBsZSBy6XN1bHRhdCBkZXMgcmVxdep0ZXMgcXVpIG9udCDpY2hvdellcy4iCisKKyM6IG9wdGlvbi5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgbmFtZXNlcnZlcnMgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIGdpdmVuIGluICVzLiIKK21zZ3N0ciAiVXRpbGlzZSBsZXMgc2VydmV1cnMgZGUgbm9tcyBkYW5zIGwnb3JkcmUgZG9ubukgZGFucyAlcy4iCisKKyMKKyM6IG9wdGlvbi5jOjI2MworbXNnaWQgIlNwZWNpZnkgb3B0aW9ucyB0byBiZSBzZW50IHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIk9wdGlvbnMgc3VwcGzpbWVudGFpcmVzIOAgYXNzb2NpZXIgYXV4IGNsaWVudHMgREhDUC4iCisKKyM6IG9wdGlvbi5jOjI2NAorbXNnaWQgIkRIQ1Agb3B0aW9uIHNlbnQgZXZlbiBpZiB0aGUgY2xpZW50IGRvZXMgbm90IHJlcXVlc3QgaXQuIgorbXNnc3RyICJPcHRpb24gREhDUCBlbnZveellIG3qbWUgc2kgbGUgY2xpZW50IGRlIGxhIGRlbWFuZGUgcGFzLiIKKworIzogb3B0aW9uLmM6MjY1Cittc2dpZCAiU3BlY2lmeSBwb3J0IHRvIGxpc3RlbiBmb3IgRE5TIHJlcXVlc3RzIG9uIChkZWZhdWx0cyB0byA1MykuIgorbXNnc3RyICJTcOljaWZpZSBsZSBwb3J0IG/5IGlsIGZhdXQg6WNvdXRlciBsZXMgcmVxdep0ZXMgRE5TIChwYXIgZOlmYXV0IDogNTMpLiIKKworIzogb3B0aW9uLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gc3VwcG9ydGVkIFVEUCBwYWNrZXQgc2l6ZSBmb3IgRUROUy4wIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJUYWlsbGUgbWF4aW1hbGUgZGVzIHBhcXVldHMgVURQIHN1cHBvcnTpcyBwb3VyIEVETlMuMCAocGFyIGTpZmF1dCA6ICVzKS4iCisKKyMKKyM6IG9wdGlvbi5jOjI2NworbXNnaWQgIkxvZyBETlMgcXVlcmllcy4iCittc2dzdHIgIkVucmVnaXN0cmUgbGVzIHJlcXXqdGVzIEROUyBkYW5zIHVuIGpvdXJuYWwgZCdhY3Rpdml06S4iCisKKyMKKyM6IG9wdGlvbi5jOjI2OAorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIkZvcmNlIGxlIHBvcnQgZCdvcmlnaW5lIHBvdXIgbGVzIHJlcXXqdGVzIHZlcnMgbGVzIHNlcnZldXJzIGFtb250cy4iCisKKyM6IG9wdGlvbi5jOjI2OQorbXNnaWQgIkRvIE5PVCByZWFkIHJlc29sdi5jb25mLiIKK21zZ3N0ciAiTmUgcGFzIGxpcmUgbGUgZmljaGllciByZXNvbHYuY29uZi4iCisKKyM6IG9wdGlvbi5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNw6WNpZmllIGxlIGNoZW1pbiBwb3VyIGxlIGZpY2hpZXIgcmVzb2x2LmNvbmYgKHBhciBk6WZhdXQgOiAlcykuIgorCisjOiBvcHRpb24uYzoyNzEKK21zZ2lkICJTcGVjaWZ5IGFkZHJlc3MoZXMpIG9mIHVwc3RyZWFtIHNlcnZlcnMgd2l0aCBvcHRpb25hbCBkb21haW5zLiIKK21zZ3N0ciAiU3DpY2lmaWUgbGEgb3UgbGVzIGFkcmVzc2VzIGRlcyBzZXJ2ZXVycyBhbW9udHMgYXZlYyBkZXMgZG9tYWluZXMgb3B0aW9uZWxzLiIKKworIzogb3B0aW9uLmM6MjcyCittc2dpZCAiTmV2ZXIgZm9yd2FyZCBxdWVyaWVzIHRvIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiTmUgamFtYWlzIHJldHJhbnNtZXR0cmUgbGVzIHJlcXXqdGVzIHBvdXIgbGVzIGRvbWFpbmVzIHNw6WNpZmnpcy4iCisKKyM6IG9wdGlvbi5jOjI3MworbXNnaWQgIlNwZWNpZnkgdGhlIGRvbWFpbiB0byBiZSBhc3NpZ25lZCBpbiBESENQIGxlYXNlcy4iCittc2dzdHIgIlNw6WNpZmllIGxlIGRvbWFpbmUgcXVpIGRvaXQgZXRyZSBhc3NpZ27pIGF1eCBiYXV4IERIQ1AuIgorCisjOiBvcHRpb24uYzoyNzQKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIlNw6WNpZmllIGxhIGNpYmxlIHBhciBk6WZhdXQgZGFucyB1biBjaGFtcCBNWC4iCisKKyM6IG9wdGlvbi5jOjI3NQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIHJlcGxpZXMgZnJvbSAvZXRjL2hvc3RzLiIKK21zZ3N0ciAiU3DpY2lmaWUgbGUgVFRMIGVuIHNlY29uZGVzIHBvdXIgbGVzIHLpcG9uc2VzIHF1aSB1dGlsaXNlbnQgL2V0Yy9ob3N0cy4iCisKKyMKKyM6IG9wdGlvbi5jOjI3NgorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIgorbXNnc3RyICJTcOljaWZpZSBsZSBUVEwgZW4gc2Vjb25kZXMgcG91ciBsZXMgculwb25zZXMgcXVpIHV0aWxpc2VudCAvZXRjL2hvc3RzLiIKKworIzogb3B0aW9uLmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIHVzZXIgYWZ0ZXIgc3RhcnR1cC4gKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIkNoYW5nZSBwb3VyIGNldCB1dGlsaXNhdGV1ciBhcHLocyBsZSBk6W1hcnJhZ2UgKHBhciBk6WZhdXQgOiAlcykuIgorCisjCisjOiBvcHRpb24uYzoyNzgKK21zZ2lkICJNYXAgREhDUCB2ZW5kb3IgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiQXNzb2NpZSBsZXMgY2xhc3NlcyBkZSBmb3Vybmlzc2V1cnMgKCd2ZW5kb3IgY2xhc3MnKSBESENQIGF1eCBvcHRpb25zLiIKKworIzogb3B0aW9uLmM6Mjc5Cittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIkFmZmljaGUgbGEgdmVyc2lvbiBkZSBEbnNtYXNxIGV0IGxlcyBpbmZvcm1hdGlvbnMgbGnpZXMgYXUgY29weXJpZ2h0LiIKKworIzogb3B0aW9uLmM6MjgwCittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIlRyYWR1aXQgbGVzIGFkcmVzc2VzIElQVjQgZGVzIHNlcnZldXJzIGFtb250cy4iCisKKyM6IG9wdGlvbi5jOjI4MQorbXNnaWQgIlNwZWNpZnkgYSBTUlYgcmVjb3JkLiIKK21zZ3N0ciAiIFNw6WNpZmllIHVuIGNoYW1wIFNSVi4iCisKKyM6IG9wdGlvbi5jOjI4MgorbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3AgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIkFmZmljaGVyIGNlIG1lc3NhZ2UuIFV0aWxpc2VyIC0taGVscCBkaGNwIHBvdXIgb2J0ZW5pciBsYSBsaXN0ZSBkZXMgb3B0aW9ucyBESENQIGNvbm51ZXMuIgorCisjOiBvcHRpb24uYzoyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIG9mIFBJRCBmaWxlIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcOljaWZpZSB1biBjaGVtaW4gcG91ciBsZSBmaWNoaWVyIFBJRCAocGFyIGTpZmF1dCA6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcOljaWZpZSBsZSBub21icmUgbWF4aW11bSBkZSBiYXV4IERIQ1AgKHBhciBk6WZhdXQgOiAlcykuIgorCisjOiBvcHRpb24uYzoyODUKK21zZ2lkICJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIKK21zZ3N0ciAiUmVwb25kIGF1eCByZXF16nRlcyBETlMgZW4gc2UgYmFzYW50IHN1ciBsJ2ludGVyZmFjZSBvdSBhIOl06SBlbnZveellIGxhIHJlcXXqdGUuIgorCisjOiBvcHRpb24uYzoyODYKK21zZ2lkICJTcGVjaWZ5IFRYVCBETlMgcmVjb3JkLiIKK21zZ3N0ciAiU3DpY2lmaWUgdW4gY2hhbXAgRE5TIFRYVCIKKworIworIzogb3B0aW9uLmM6Mjg3Cittc2dpZCAiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIlNw6WNpZmllIHVuIGNoYW1wIEROUyBQVFIiCisKKyM6IG9wdGlvbi5jOjI4OAorbXNnaWQgIkdpdmUgRE5TIG5hbWUgdG8gSVB2NCBhZGRyZXNzIG9mIGludGVyZmFjZS4iCittc2dzdHIgIkRvbm5lIGxlIG5vbSBETlMgcG91ciBsJ2FkcmVzc2UgSVB2NCBkZSBsJ2ludGVyZmFjZS4iCisKKyM6IG9wdGlvbi5jOjI4OQorbXNnaWQgIkJpbmQgb25seSB0byBpbnRlcmZhY2VzIGluIHVzZS4iCittc2dzdHIgIkFzc29jaWF0aW9uIHVuaXF1ZW1lbnQgYXV4IGludGVyZmFjZXMgculzZWF1IGFjdHVlbGxlbWVudCBhY3RpdmVzLiIKKworIzogb3B0aW9uLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWQgREhDUCBzdGF0aWMgaG9zdCBpbmZvcm1hdGlvbiBmcm9tICVzLiIKK21zZ3N0ciAiTGVjdHVyZSBkZXMgaW5mb3JtYXRpb25zIGRlIERIQ1Agc3RhdGlxdWUg4CBwYXJ0aXIgZGUgJXMuIgorCisjOiBvcHRpb24uYzoyOTEKK21zZ2lkICJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iCittc2dzdHIgIkF1dG9yaXNlIGwnaW50ZXJmYWNlIERCdXMgcG91ciBsYSBjb25maWd1cmF0aW9uIGRlcyBzZXJ2ZXVycyBhbW9udHMsIGV0Yy4iCisKKyM6IG9wdGlvbi5jOjI5MgorbXNnaWQgIkRvIG5vdCBwcm92aWRlIERIQ1Agb24gdGhpcyBpbnRlcmZhY2UsIG9ubHkgcHJvdmlkZSBETlMuIgorbXNnc3RyICJOZSBwYXMgYXNzdXJlciBkZSBmb25jdGlvbiBESENQIHN1ciBjZXR0ZSBpbnRlcmZhY2UsIG1haXMgc2V1bGVtZW50IGxhIGZvbmN0aW9uIEROUy4iCisKKyM6IG9wdGlvbi5jOjI5MworbXNnaWQgIkVuYWJsZSBkeW5hbWljIGFkZHJlc3MgYWxsb2NhdGlvbiBmb3IgYm9vdHAuIgorbXNnc3RyICJBdXRvcmlzZSBsJ2FsbG9jYXRpb24gZHluYW1pcXVlIGQnYWRyZXNzZSBwb3VyIGJvb3RwLiIKKworIworIzogb3B0aW9uLmM6Mjk0Cittc2dpZCAiTWFwIE1BQyBhZGRyZXNzICh3aXRoIHdpbGRjYXJkcykgdG8gb3B0aW9uIHNldC4iCittc2dzdHIgIkFzc29jaWUgbCdhZHJlc3NlIE1BQyAoYXZlYyBsZXMgam9rZXJzKSBhdXggb3B0aW9ucy4iCisKKyM6IG9wdGlvbi5jOjI5NQorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIlRyYWl0ZXIgbGVzIHJlcXXqdGVzIERIQ1Agc3VyIGxlcyBhbGlhcyBjb21tZSBhcnJpdmFudCBkZSBsJ2ludGVyZmFjZS4iCisKKyM6IG9wdGlvbi5jOjI5NgorbXNnaWQgIkRpc2FibGUgSUNNUCBlY2hvIGFkZHJlc3MgY2hlY2tpbmcgaW4gdGhlIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiU3VwcHJpbWUgbGEgdulyaWZpY2F0aW9uIGQnYWRyZXNzZSBzdXIgbGUgc2VydmV1ciBhdSBtb3llbiBkZSBwYXF1ZXRzIElDTVAgZWNobyIKKworIzogb3B0aW9uLmM6Mjk3Cittc2dpZCAiU2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIlNjcmlwdCDgIGV46WN1dGVyIGxvcnMgZGUgbGEgY3LpYXRpb24gb3UgZGVzdHJ1Y3Rpb24gZGUgYmFpbCBESENQLiIKKworIzogb3B0aW9uLmM6Mjk4Cittc2dpZCAiUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4iCittc2dzdHIgIkxlY3R1cmUgZGUgbGEgY29uZmlndXJhdGlvbiBkYW5zIHRvdXMgbGVzIGZpY2hpZXJzIGRlIGNlIHLpcGVydG9pcmUuIgorCisjCisjOiBvcHRpb24uYzoyOTkKK21zZ2lkICJMb2cgdG8gdGhpcyBzeXNsb2cgZmFjaWxpdHkgb3IgZmlsZS4gKGRlZmF1bHRzIHRvIERBRU1PTikiCittc2dzdHIgIkVucmVnaXN0cmVyIGxlcyBqb3VybmF1eCBkJ2FjdGl2aXTpIGRhbnMgY2V0dGUgZmFjaWxpdOkgc3lzbG9nLiAoZOlmYXV0IDogREFFTU9OKSIKKworIzogb3B0aW9uLmM6MzAwCittc2dpZCAiRG8gbm90IHVzZSBsZWFzZWZpbGUuIgorbXNnc3RyICJOZSBwYXMgdXRpbGlzZXIgZGUgZmljaGllciBkZSBiYXV4LiIKKworIzogb3B0aW9uLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiCittc2dzdHIgIlNw6WNpZmllIGxlIG5vbWJyZSBtYXhpbXVtIGRlIHJlcXXqdGVzIERIQ1AgY29uY3VycmVudGVzIChwYXIgZOlmYXV0IDogJXMpLiIKKworIzogb3B0aW9uLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iCittc2dzdHIgIlZpZGVyIGxlIGNhY2hlIEROUyBsb3JzIGR1IHJlY2hhcmdlbWVudCBkZSAlcy4iCisKKyM6IG9wdGlvbi5jOjMwMworbXNnaWQgIklnbm9yZSBob3N0bmFtZXMgcHJvdmlkZWQgYnkgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiSWdub3JlciBsZXMgbm9tcyBkJ2j0dGVzIGZvdXJuaXMgcGFyIGxlcyBjbGllbnRzIERIQ1AiCisKKyM6IG9wdGlvbi5jOjMwNAorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiTmUgcGFzIHLpdXRpbGlzZXIgbGVzIGNoYW1wcyBub20gZGUgZmljaGllciBldCBzZXJ2ZXVyIGRhbnMgbGVzIG9wdGlvbnMgREhDUCBzdXBwbOltZW50YWlyZXMuIgorCisjOiBvcHRpb24uYzozMDUKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICJBY3RpdmVyIGxlIHNlcnZlciBURlRQIGludOlncukgKGZvbmN0aW9ubmFudCBlbiBsZWN0dXJlIHNldWxlbWVudCkiCisKKyM6IG9wdGlvbi5jOjMwNgorbXNnaWQgIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIgorbXNnc3RyICJOJ2V4cG9ydGVyIHBhciBURlRQIHF1ZSBsZXMgZmljaGllcnMgZGUgbCdhcmJvcmVzY2VuY2UgZGUgZmljaGllciBzcOljaWZp6WUiCisKKyM6IG9wdGlvbi5jOjMwNworbXNnaWQgIkFkZCBjbGllbnQgSVAgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIgorbXNnc3RyICJBam91dGVyIGxlcyBhZHJlc3NlcyBJUCBjbGllbnRlcyDgIGxhIHJhY2luZSB0ZnRwICgndGZ0cC1yb290JykuIgorCisjOiBvcHRpb24uYzozMDgKK21zZ2lkICJBbGxvdyBhY2Nlc3Mgb25seSB0byBmaWxlcyBvd25lZCBieSB0aGUgdXNlciBydW5uaW5nIGRuc21hc3EuIgorbXNnc3RyICJBY2PocyBhdXggc2V1bHMgZmljaGllcnMgYXBwYXJ0ZW5hbnRzIOAgbCd1dGlsaXNhdGV1ciBzb3VzIGxlcXVlbCB0b3VybmUgZG5zbWFzcSIKKworIzogb3B0aW9uLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbm5jdXJyZW50IFRGVFAgdHJhbnNmZXJzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcOljaWZpZSBsZSBub21icmUgbWF4aW11bSBkZSB0cmFuc2ZlcnQgVEZUUCBjb25jdXJyZW50cyAoZOlmYXV0IDogJXMpLiIKKworIzogb3B0aW9uLmM6MzEwCittc2dpZCAiRGlzYWJsZSB0aGUgVEZUUCBibG9ja3NpemUgZXh0ZW5zaW9uLiIKK21zZ3N0ciAiROlzYWN0aXZhdGlvbiBkZSBsJ2V4dGVuc2lvbiBURlRQIKsgdGFpbGxlIGRlIGJsb2MguyIKKworIzogb3B0aW9uLmM6MzExCittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIkdhbW1lIGRlIHBvcnRzIGRhbnMgbGFxdWVsbGUgc2Vyb250IGNob2lzaXMgbGVzIHBvcnRzIHRlbXBvcmFpcmVzIHV0aWxpc+lzIGRhbnMgbGVzIHRyYW5zZmVydHMgVEZUUC4iCisKKyM6IG9wdGlvbi5jOjMxMgorbXNnaWQgIkV4dHJhIGxvZ2dpbmcgZm9yIERIQ1AuIgorbXNnc3RyICJUcmFjZXMgc3VwcGzpbWVudGFpcmVzIHBvdXIgbGUgREhDUC4iCisKKyM6IG9wdGlvbi5jOjMxMworbXNnaWQgIkVuYWJsZSBhc3luYy4gbG9nZ2luZzsgb3B0aW9uYWxseSBzZXQgcXVldWUgbGVuZ3RoLiIKK21zZ3N0ciAiQWN0aXZlIGwn6WNyaXR1cmUgZGUgdHJhY2VzIGVuIG1vZGUgYXN5bmNocm9uZS4gUGV1dCBwcmVuZHJlIGVuIG9wdGlvbiBsYSB2YWxldXIgZGUgbGEgbG9uZ3VldXIgZGUgbGEgcXVldWUuIgorCisjOiBvcHRpb24uYzozMTQKK21zZ2lkICJTdG9wIEROUyByZWJpbmRpbmcuIEZpbHRlciBwcml2YXRlIElQIHJhbmdlcyB3aGVuIHJlc29sdmluZy4iCittc2dzdHIgIlN0b3BwZXIgbGEgculhc3NvY2lhdGlvbiBETlMgKCdETlMgcmViaW5kaW5nJykuIEZpbHRyZSBsZXMgZ2FtbWVzIGQnYWRyZXNzZXMgSVAgcHJpdullcyBsb3JzIGRlIGxhIHLpc29sdXRpb24uIgorCisjOiBvcHRpb24uYzozMTUKK21zZ2lkICJBbHdheXMgcGVyZm9ybSBETlMgcXVlcmllcyB0byBhbGwgc2VydmVycy4iCittc2dzdHIgIlRvdWpvdXJzIGVmZmVjdHVlciBsZXMgcmVxdep0ZXMgRE5TIOAgdG91cyBsZXMgc2VydmV1cnMuIgorCisjCisjOiBvcHRpb24uYzozMTYKK21zZ2lkICJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iCittc2dzdHIgIlNw6WNpZmllIGxlIGxhYmVsIHNpIGxlIGNsaWVudCBpbmNsdXMgbCdvcHRpb24gZGFucyBsYSByZXF16nRlLiIKKworIzogb3B0aW9uLmM6MzE3Cittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiVXRpbGlzZXIgZGVzIHBvcnRzIGFsdGVybmF0aWZzIHBvdXIgbGUgREhDUC4iCisKKyM6IG9wdGlvbi5jOjMxOAorbXNnaWQgIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0IGFzIHRoaXMgdXNlci4iCittc2dzdHIgIkxhbmNlciBsZSBzY3JpcHQgJ2xlYXNlLWNoYW5nZScgYXZlYyBjZXQgdXRpbGlzYXRldXIuIgorCisjCisjOiBvcHRpb24uYzozMTkKK21zZ2lkICJTcGVjaWZ5IE5BUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICJTcOljaWZpZSB1biBjaGFtcCBETlMgTkFQVFIuIgorCisjOiBvcHRpb24uYzozMjAKK21zZ2lkICJTcGVjaWZ5IGxvd2VzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iCittc2dzdHIgIkTpZmluaWUgbGUgcGx1cyBwZXRpdCBwb3J0IHV0aWxpc+kgcG91ciBsYSB0cmFuc21pc3Npb24gZCd1bmUgcmVxdep0ZSBETlMuIgorCisjOiBvcHRpb24uYzozMjEKK21zZ2lkICJVc2Ugb25seSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWVzIGZvciBESENQIGNsaWVudHMuIgorbXNnc3RyICJVdGlsaXNlIHNldWxlbWVudCBsZXMgbm9tcyBkZSBkb21haW5lIHBsZWluZW1lbnQgcXVhbGlmaelzIHBvdXIgbGVzIGNsaWVudHMgREhDUC4iCisKKyM6IG9wdGlvbi5jOjMyMgorbXNnaWQgIlNwZWNpZnkgYWxpYXMgbmFtZSBmb3IgTE9DQUwgRE5TIG5hbWUuIgorbXNnc3RyICJTcOljaWZpZSB1biBhbGlhcyBwb3VyIHVuIG5vbSBETlMgbG9jYWwuIgorCisjCisjOiBvcHRpb24uYzozMjMKK21zZ2lkICJQcm9tcHQgdG8gc2VuZCB0byBQWEUgY2xpZW50cy4iCittc2dzdHIgIkludml0ZSDgIGVudm95ZXIgYXV4IGNsaWVudHMgUFhFLiIKKworIzogb3B0aW9uLmM6MzI0Cittc2dpZCAiQm9vdCBzZXJ2aWNlIGZvciBQWEUgbWVudS4iCittc2dzdHIgIlNlcnZpY2UgZGUgZOltYXJyYWdlIHBvdXIgbWVudSBQWEUiCisKKyM6IG9wdGlvbi5jOjMyNQorbXNnaWQgIkNoZWNrIGNvbmZpZ3VyYXRpb24gc3ludGF4LiIKK21zZ3N0ciAidulyaWZpY2F0aW9uIGRlIGxhIHN5bnRheGUgZGUgbGEgY29uZmlndXJhdGlvbiIKKworIzogb3B0aW9uLmM6NjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogZG5zbWFzcSBbb3B0aW9uc11cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlVzYWdlIDogZG5zbWFzcSBbb3B0aW9uc11cbiIKKyJcbiIKKworIzogb3B0aW9uLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBzaG9ydCBvcHRpb25zIG9ubHkgb24gdGhlIGNvbW1hbmQgbGluZS5cbiIKK21zZ3N0ciAiVXRpbGlzZXogbGVzIG9wdGlvbnMgY291cnRlcyB1bmlxdWVtZW50IHN1ciBsYSBsaWduZSBkZSBjb21tYW5kZS5cbiIKKworIzogb3B0aW9uLmM6NjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbGlkIG9wdGlvbnMgYXJlOlxuIgorbXNnc3RyICJMZXMgb3B0aW9ucyB2YWxpZGVzIHNvbnQgOlxuIgorCisjOiBvcHRpb24uYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUCBvcHRpb25zOlxuIgorbXNnc3RyICJPcHRpb25zIERIQ1AgY29ubnVlcyA6XG4iCisKKyM6IG9wdGlvbi5jOjczNQorbXNnaWQgImJhZCBkaGNwLW9wdGlvbiIKK21zZ3N0ciAibWF1dmFpc2UgdmFsZXVyIGRlICdkaGNwLW9wdGlvbiciCisKKyMKKyM6IG9wdGlvbi5jOjc5MgorbXNnaWQgImJhZCBJUCBhZGRyZXNzIgorbXNnc3RyICJtYXV2YWlzZSBhZHJlc3NlIElQIgorCisjOiBvcHRpb24uYzo4OTEKK21zZ2lkICJiYWQgZG9tYWluIGluIGRoY3Atb3B0aW9uIgorbXNnc3RyICJtYXV2YWlzIGRvbWFpbmUgZGFucyBkaGNwLW9wdGlvbiIKKworIzogb3B0aW9uLmM6OTUwCittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgImRoY3Atb3B0aW9uIHRyb3AgbG9uZyIKKworIzogb3B0aW9uLmM6OTU5Cittc2dpZCAiaWxsZWdhbCBkaGNwLW1hdGNoIgorbXNnc3RyICJ2YWxldXIgaWxs6WdhbGUgcG91ciAnZGhjcC1tYXRjaCciCisKKyM6IG9wdGlvbi5jOjk5NQorbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQgZmxhZyIKK21zZ3N0ciAiVW5lIG9wdGlvbiBuZSBwb3V2YW50IOp0cmUgc3DpY2lmaekgcXUndW5lIHNldWxlIGZvaXMg4CDpdOkgZG9ubullIHBsdXNpZXVycyBmb2lzLiIKKworIzogb3B0aW9uLmM6MTAwMworbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQga2V5d29yZCIKK21zZ3N0ciAiTW90LWNsZWYgbmUgcG91dmFudCDqdHJlIHLpcOl06SIKKworIzogb3B0aW9uLmM6MTA4NiB0ZnRwLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJOZSBwZXV0IHBhcyBsaXJlICVzIDogJXMiCisKKyMKKyM6IG9wdGlvbi5jOjExMzEKK21zZ2lkICJvbmx5IG9uZSBkaGNwLWhvc3RzZmlsZSBhbGxvd2VkIgorbXNnc3RyICJ1bmUgc2V1bGUgdmFsZXVyIGVzdCBhdXRvcmlz6WUgcG91ciAnZGhjcC1ob3N0c2ZpbGUnIgorCisjCisjOiBvcHRpb24uYzoxMTM4Cittc2dpZCAib25seSBvbmUgZGhjcC1vcHRzZmlsZSBhbGxvd2VkIgorbXNnc3RyICJ1bmUgc2V1bGUgdmFsZXVyIGVzdCBhdXRvcmlz6WUgcG91ciAnZGhjcC1vcHRzZmlsZSciCisKKyM6IG9wdGlvbi5jOjExODMKK21zZ2lkICJiYWQgTVggcHJlZmVyZW5jZSIKK21zZ3N0ciAiTWF1dmFpc2UgcHLpZmVyZW5jZSBNWCIKKworIzogb3B0aW9uLmM6MTE4OAorbXNnaWQgImJhZCBNWCBuYW1lIgorbXNnc3RyICJtYXV2YWlzIG5vbSBNWCIKKworIzogb3B0aW9uLmM6MTIwMgorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgIm1hdXZhaXNlIGNpYmxlIE1YIgorCisjOiBvcHRpb24uYzoxMjEyCittc2dpZCAiY2Fubm90IHJ1biBzY3JpcHRzIHVuZGVyIHVDbGludXgiCittc2dzdHIgIm5lIHBldXQgZXjpY3V0ZXIgZGUgc2NyaXB0IHNvdXMgdUNsaW51eCIKKworIzogb3B0aW9uLmM6MTIxNAorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIGxlYXNlLWNoYW5nZSBzY3JpcHRzIgorbXNnc3RyICJwb3VyIHBlcm1ldHRyZSBsJ2V46WN1dGlvbiBkZSBzY3JpcHRzIGF1IGNoYW5nZW1lbnQgZGUgYmFpbCAobGVhc2UtY2hhbmdlKSwgcmVjb21waWxlciBlbiBk6WZpbmlzc2FudCBIQVZFX1NDUklQVCIKKworIzogb3B0aW9uLmM6MTQ0MiBvcHRpb24uYzoxNDQ2Cittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgIm1hdXZhaXMgcG9ydCIKKworIzogb3B0aW9uLmM6MTQ2NSBvcHRpb24uYzoxNDkwCittc2dpZCAiaW50ZXJmYWNlIGJpbmRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiYXNzb2NpYXRpb24gZCdpbnRlcmZhY2Ugbm9uIHN1cHBvcnTpZSIKKworIworIzogb3B0aW9uLmM6MTYxMQorbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICJtYXV2YWlzZSBnYW1tZSBkZSBwb3J0cyIKKworIzogb3B0aW9uLmM6MTYyOAorbXNnaWQgImJhZCBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICJtYXV2YWlzZSBpbnRlcmZhY2UtcG9udCIKKworIzogb3B0aW9uLmM6MTY2OQorbXNnaWQgImJhZCBkaGNwLXJhbmdlIgorbXNnc3RyICJtYXV2YWlzZSBwbGFnZSBkJ2FkcmVzc2VzIERIQ1AgKGRoY3AtcmFuZ2UpIgorCisjOiBvcHRpb24uYzoxNjk1Cittc2dpZCAib25seSBvbmUgbmV0aWQgdGFnIGFsbG93ZWQiCittc2dzdHIgInVuZSBzZXVsZSDpdGlxdWV0dGUgbmV0aWQgZXN0IGF1dG9yaXPpZSIKKworIzogb3B0aW9uLmM6MTc0MAorbXNnaWQgImluY29uc2lzdGVudCBESENQIHJhbmdlIgorbXNnc3RyICJwbGFnZSBkJ2FkcmVzc2VzIERIQ1AgaW5jb2jpcmVudGUiCisKKyMKKyM6IG9wdGlvbi5jOjE5MTIKK21zZ2lkICJiYWQgREhDUCBob3N0IG5hbWUiCittc2dzdHIgIm1hdXZhaXMgbm9tIGQnaPR0ZSBESENQIgorCisjOiBvcHRpb24uYzoyMjAxIG9wdGlvbi5jOjI0ODEKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJudW3pcm8gZGUgcG9ydCBpbnZhbGlkZSIKKworIworIzogb3B0aW9uLmM6MjI4NAorbXNnaWQgImludmFsaWQgYWxpYXMgcmFuZ2UiCittc2dzdHIgInBvaWRzIGludmFsaWRlIgorCisjCisjOiBvcHRpb24uYzoyMjk3Cittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICJtYXV2YWlzIG5vbSBkJ2ludGVyZmFjZSIKKworIzogb3B0aW9uLmM6MjMyMgorbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAibWF1dmFpcyBDTkFNRSIKKworIzogb3B0aW9uLmM6MjMyNworbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiY2UgQ05BTUUgZXhpc3RlIGTpamEiCisKKyMKKyM6IG9wdGlvbi5jOjIzNDcKK21zZ2lkICJiYWQgUFRSIHJlY29yZCIKK21zZ3N0ciAibWF1dmFpcyBjaGFtcCBQVFIiCisKKyMKKyM6IG9wdGlvbi5jOjIzNzgKK21zZ2lkICJiYWQgTkFQVFIgcmVjb3JkIgorbXNnc3RyICJtYXV2YWlzIGNoYW1wIE5BUFRSIgorCisjOiBvcHRpb24uYzoyNDAzCittc2dpZCAiVFhUIHJlY29yZCBzdHJpbmcgdG9vIGxvbmciCittc2dzdHIgImNoYe5uZSBkdSBjaGFtcCBUWFQgdHJvcCBsb25ndWUiCisKKyM6IG9wdGlvbi5jOjI0NTEKK21zZ2lkICJiYWQgVFhUIHJlY29yZCIKK21zZ3N0ciAibWF1dmFpcyBjaGFtcCBUWFQiCisKKyM6IG9wdGlvbi5jOjI0NjcKK21zZ2lkICJiYWQgU1JWIHJlY29yZCIKK21zZ3N0ciAibWF1dmFpcyBjaGFtcCBTUlYiCisKKyM6IG9wdGlvbi5jOjI0NzQKK21zZ2lkICJiYWQgU1JWIHRhcmdldCIKK21zZ3N0ciAibWF1dmFpc2UgY2libGUgU1JWIgorCisjOiBvcHRpb24uYzoyNDg4Cittc2dpZCAiaW52YWxpZCBwcmlvcml0eSIKK21zZ3N0ciAicHJpb3JpdOkgaW52YWxpZGUiCisKKyM6IG9wdGlvbi5jOjI0OTUKK21zZ2lkICJpbnZhbGlkIHdlaWdodCIKK21zZ3N0ciAicG9pZHMgaW52YWxpZGUiCisKKyM6IG9wdGlvbi5jOjI1MTQKK21zZ2lkICJ1bnN1cHBvcnRlZCBvcHRpb24gKGNoZWNrIHRoYXQgZG5zbWFzcSB3YXMgY29tcGlsZWQgd2l0aCBESENQL1RGVFAvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAib3B0aW9uIG5vbiBzdXBwb3J06WUgKHbpcmlmaWVyIHF1ZSBEbnNtYXNxIGEg6XTpIGNvbXBpbOkgYXZlYyBsZSBzdXBwb3J0IERIQ1AvVEZUUC9EQnVzKSIKKworIzogb3B0aW9uLmM6MjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlcyBuZXN0ZWQgdG9vIGRlZXAgaW4gJXMiCittc2dzdHIgInRyb3AgZGUgbml2ZWF1eCBkZSBy6WN1cnNpb24gcG91ciBsZXMgZmljaGllcnMgZGFucyAlcyIKKworIzogb3B0aW9uLmM6MjU2NSB0ZnRwLmM6NTEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzOiAlcyIKK21zZ3N0ciAiTmUgcGV1dCBwYXMgbGlyZSAlcyA6ICVzIgorCisjOiBvcHRpb24uYzoyNjI2Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAiaWwgbWFucXVlIFwiIgorCisjOiBvcHRpb24uYzoyNjczCittc2dpZCAiYmFkIG9wdGlvbiIKK21zZ3N0ciAibWF1dmFpc2Ugb3B0aW9uIgorCisjOiBvcHRpb24uYzoyNjc1Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgInBhcmFt6HRyZSBlbiB0cm9wIgorCisjOiBvcHRpb24uYzoyNjc3Cittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIiCittc2dzdHIgInBhcmFt6HRyZSBtYW5xdWFudCIKKworIzogb3B0aW9uLmM6MjY4NQorbXNnaWQgImVycm9yIgorbXNnc3RyICJlcnJldXIiCisKKyM6IG9wdGlvbi5jOjI2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYXQgbGluZSAlZCBvZiAlJXMiCittc2dzdHIgIiVzIOAgbGEgbGlnbmUgJWQgZGUgJSVzIgorCisjOiBvcHRpb24uYzoyNzQwIG9wdGlvbi5jOjI3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyIKK21zZ3N0ciAiTGVjdHVyZSBkZSAlcyIKKworIzogb3B0aW9uLmM6Mjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIlZlcnNpb24gZGUgRG5zbWFzcSAlcyAgJXNcbiIKKworIzogb3B0aW9uLmM6Mjg0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29tcGlsZSB0aW1lIG9wdGlvbnMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk9wdGlvbnMg4CBsYSBjb21waWxhdGlvbiAlc1xuIgorIlxuIgorCisjOiBvcHRpb24uYzoyODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLlxuIgorbXNnc3RyICJDZSBsb2dpY2llbCBlc3QgZm91cm5pIHNhbnMgQVVDVU5FIEdBUkFOVElFLlxuIgorCisjOiBvcHRpb24uYzoyODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXRcbiIKK21zZ3N0ciAiRG5zbWFzcSBlc3QgdW4gbG9naWNpZWwgbGlicmUsIGlsIHZvdXMgZXN0IHBlcm1pcyBkZSBsZSByZWRpc3RyaWJ1ZXJcbiIKKworIzogb3B0aW9uLmM6Mjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgb3IgMy5cbiIKK21zZ3N0ciAic291cyBsZXMgdGVybWVzIGRlIGxhIGxpY2VuY2UgR1BMIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSksIHZlcnNpb24gMiBvdSAzLlxuIgorCisjOiBvcHRpb24uYzoyODU4Cittc2dpZCAidHJ5IC0taGVscCIKK21zZ3N0ciAiZXNzYXlleiBhdmVjIC0taGVscCIKKworIzogb3B0aW9uLmM6Mjg2MAorbXNnaWQgInRyeSAtdyIKK21zZ3N0ciAiZXNzYXlleiBhdmVjIC13IgorCisjOiBvcHRpb24uYzoyODYzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb21tYW5kIGxpbmUgb3B0aW9uczogJXMiCittc2dzdHIgIm1hdXZhaXNlcyBvcHRpb25zIGVuIGxpZ25lIGRlIGNvbW1hbmRlIDogJXMuIgorCisjOiBvcHRpb24uYzoyOTA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgaG9zdC1uYW1lOiAlcyIKK21zZ3N0ciAibmUgcGV1dCBwYXMgb2J0ZW5pciBsZSBub20gZGUgbGEgbWFjaGluZSA6ICVzIgorCisjOiBvcHRpb24uYzoyOTMyCittc2dpZCAib25seSBvbmUgcmVzb2x2LmNvbmYgZmlsZSBhbGxvd2VkIGluIG5vLXBvbGwgbW9kZS4iCittc2dzdHIgInNldWwgdW4gZmljaGllciByZXNvbHYuY29uZiBlc3QgYXV0b3Jpc+kgZGFucyBsZSBtb2RlIG5vLXBvbGwiCisKKyM6IG9wdGlvbi5jOjI5NDIKK21zZ2lkICJtdXN0IGhhdmUgZXhhY3RseSBvbmUgcmVzb2x2LmNvbmYgdG8gcmVhZCBkb21haW4gZnJvbS4iCittc2dzdHIgInVuIGZpY2hpZXIgcmVzb2x2LmNvbmYgKGV0IHVuIHNldWwpIGVzdCBu6WNlc3NhaXJlIHBvdXIgeSBy6WN1cGVyZXIgbGUgbm9tIGRlIGRvbWFpbmUuIgorCisjOiBvcHRpb24uYzoyOTQ1IG5ldHdvcmsuYzo3NTQgZGhjcC5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSAlcyA6ICVzIgorCisjOiBvcHRpb24uYzoyOTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlYXJjaCBkaXJlY3RpdmUgZm91bmQgaW4gJXMiCittc2dzdHIgInBhcyBkZSBkaXJlY3RpdmUgZGUgcmVjaGVyY2hlIHRyb3V26WUgZGFucyAlcyIKKworIzogb3B0aW9uLmM6Mjk4MworbXNnaWQgInRoZXJlIG11c3QgYmUgYSBkZWZhdWx0IGRvbWFpbiB3aGVuIC0tZGhjcC1mcWRuIGlzIHNldCIKK21zZ3N0ciAidW4gZG9tYWluZSBwYXIgZOlmYXV0IGRvaXQg6nRyZSBzcOljaWZp6SBsb3JzcXVlIGwnb3B0aW9uIC0tZGhjcC1mcWRuIGVzdCB1dGlsaXPpZSIKKworIzogb3B0aW9uLmM6Mjk4NworbXNnaWQgInN5bnRheCBjaGVjayBPSyIKK21zZ3N0ciAidulyaWZpY2F0aW9uIGRlIHN5bnRheGUgT0siCisKKyM6IGZvcndhcmQuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICJsZSBzZXJ2ZXVyIGRlIG5vbSAlcyBhIHJlZnVz6SBkZSBmYWlyZSB1bmUgcmVjaGVyY2hlIHLpY3Vyc2l2ZSIKKworIzogZm9yd2FyZC5jOjQzNworbXNnaWQgInBvc3NpYmxlIEROUy1yZWJpbmQgYXR0YWNrIGRldGVjdGVkIgorbXNnc3RyICJk6XRlY3Rpb24gZCd1bmUgcG9zc2libGUgYXR0YXF1ZSBkZSB0eXBlIEROUy1yZWJpbmQiCisKKyM6IG5ldHdvcmsuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICJpbnRlcmZhY2UgJXMgaW5jb25udWUgc3DpY2lmaellIGNvbW1lIGludGVyZmFjZSBkZSBwb250IgorCisjOiBuZXR3b3JrLmM6NDE3IGRuc21hc3EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcullciB1bmUgc29ja2V0IGRlIGxlY3R1cmUgOiAlcyIKKworIzogbmV0d29yay5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IElQVjYgb3B0aW9ucyBvbiBsaXN0ZW5pbmcgc29ja2V0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FjdGl2ZXIgbGVzIG9wdGlvbnMgSVBWNiBzdXIgbGEgc29ja2V0IGRlIGxlY3R1cmUgOiAlcyIKKworIzogbmV0d29yay5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGllciBsYSBzb2NrZXQgZGUgbGVjdHVyZSBwb3VyICVzIDogJXMiCisKKyM6IG5ldHdvcmsuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxpc3RlbiBvbiBzb2NrZXQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgc3VyIGxhIHNvY2tldCA6ICVzIgorCisjOiBuZXR3b3JrLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgVEZUUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNy6WVyIHVuZSBzb2NrZXQgVEZUUCA6ICVzIgorCisjOiBuZXR3b3JrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIHNlcnZlciBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaWVyIGxhIHNvY2tldCBkZSBzZXJ2ZXVyIHBvdXIgJXMgOiAlcyIKKworIzogbmV0d29yay5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIgorbXNnc3RyICJpZ25vcmUgbGUgc2VydmV1ciBkZSBub20gJXMgLSBpbnRlcmZhY2UgbG9jYWxlIgorCisjOiBuZXR3b3JrLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBjYW5ub3QgbWFrZS9iaW5kIHNvY2tldDogJXMiCittc2dzdHIgImlnbm9yZSBsZSBzZXJ2ZXVyIGRlIG5vbSAlcyAtIG5lIHBldXQgY29uc3RydWlyZS9saWVyIGxhIHNvY2tldCA6ICVtIgorCisjOiBuZXR3b3JrLmM6NzIwCittc2dpZCAidW5xdWFsaWZpZWQiCittc2dzdHIgIm5vbi1xdWFsaWZp6ShlKSIKKworIzogbmV0d29yay5jOjcyMAorbXNnaWQgIm5hbWVzIgorbXNnc3RyICJub21zIgorCisjOiBuZXR3b3JrLmM6NzIyCittc2dpZCAiZGVmYXVsdCIKK21zZ3N0ciAiZOlmYXV0IgorCisjOiBuZXR3b3JrLmM6NzI0Cittc2dpZCAiZG9tYWluIgorbXNnc3RyICJkb21haW5lIgorCisjOiBuZXR3b3JrLmM6NzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAidXRpbGlzZSBsZXMgYWRyZXNzZXMgbG9jYWxlcyBzZXVsZW1lbnQgcG91ciAlcyAlcyIKKworIzogbmV0d29yay5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIGZvciAlcyAlcyIKK21zZ3N0ciAidXRpbGlzZSBsZSBzZXJ2ZXVyIGRlIG5vbSAlcyMlZCBwb3VyICVzICVzIgorCisjOiBuZXR3b3JrLmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQodmlhICVzKSIKK21zZ3N0ciAidXRpbGlzZSBsZSBzZXJ2ZXVyIGRlIG5vbSAlcyMlZCAodmlhICVzKSIKKworIzogbmV0d29yay5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIgorbXNnc3RyICJ1dGlsaXNlIGxlIHNlcnZldXIgZGUgbm9tICVzIyVkIgorCisjCisjOiBkbnNtYXNxLmM6MTQ2Cittc2dpZCAiVEZUUCBzZXJ2ZXIgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfVEZUUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIlRGVFAgbidlc3QgcGFzIGRpc3BvbmlibGUgOiBhY3RpdmV6IEhBVkVfVEZUUCBkYW5zIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE1MQorbXNnaWQgImFzeWNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBTb2xhcmlzIgorbXNnc3RyICJsJ+ljcml0dXJlIGRlIHRyYWNlcyBlbiBtb2RlIGFzeW5jaHJvbmUgbidlc3QgcGFzIGRpc3BvbmlibGUgc291cyBTb2xhcmlzLiIKKworIzogZG5zbWFzcS5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBsaXN0IG9mIGludGVyZmFjZXM6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGEgbGlzdGUgZGVzIGludGVyZmFjZXMgOiAlcyIKKworIzogZG5zbWFzcS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiaW50ZXJmYWNlICVzIGluY29ubnVlIgorCisjOiBkbnNtYXNxLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGludGVyZmFjZSB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgInBhcyBkJ2ludGVyZmFjZSBhdmVjIGwnYWRyZXNzZSAlcyIKKworIzogZG5zbWFzcS5jOjIwMSBkbnNtYXNxLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICJFcnJldXIgREJ1cyA6ICVzIgorCisjOiBkbnNtYXNxLmM6MjA0Cittc2dpZCAiREJ1cyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9EQlVTIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBuJ2VzdCBwYXMgZGlzcG9uaWJsZSA6IGFjdGl2ZXogSEFWRV9EQlVTIGRhbnMgc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdXNlciBvciBncm91cDogJXMiCittc2dzdHIgInV0aWxpc2F0ZXVyIG91IGdyb3VwZSBpbmNvbm51IDogJXMiCisKKyM6IGRuc21hc3EuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiCittc2dzdHIgIk5lIHBldXQgZWZmZWN0dWVyIHVuICdjaGRpcicg4CBsYSByYWNpbmUgZHUgc3lzdOhtZSBkZSBmaWNoaWVyIDogJXMiCisKKyM6IGRuc21hc3EuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiCittc2dzdHIgImTpbWFycmFnZSBhdmVjIGxlIEROUyBk6XNhY3RpdukgKHZlcnNpb24gJXMpIgorCisjOiBkbnNtYXNxLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICJkZW1hcnLpLCB2ZXJzaW9uICVzICh0YWlsbGUgZGUgY2FjaGUgJWQpIgorCisjOiBkbnNtYXNxLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgImTpbWFycmFnZSBhdmVjIGxlIGNhY2hlIGTpc2FjdGl26SAodmVyc2lvbiAlcykiCisKKyM6IGRuc21hc3EuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJvcHRpb25zIOAgbGEgY29tcGlsYXRpb24gOiAlcyIKKworIzogZG5zbWFzcS5jOjQ2MAorbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBjb25uZWN0ZWQgdG8gc3lzdGVtIGJ1cyIKK21zZ3N0ciAiU3VwcG9ydCBEQnVzIGF1dG9yaXPpIDogY29ubmVjdOkgYXUgYnVzIHN5c3TobWUiCisKKyM6IGRuc21hc3EuYzo0NjIKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogYnVzIGNvbm5lY3Rpb24gcGVuZGluZyIKK21zZ3N0ciAiU3VwcG9ydCBEQnVzIGF1dG9yaXPpIDogY29ubmV4aW9uIGF1IGJ1cyBlbiBhdHRlbnRlIgorCisjOiBkbnNtYXNxLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGZhaWxlZCB0byBjaGFuZ2Ugb3duZXIgb2YgJXM6ICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNoYW5nZXIgcG91ciBsJ3V0aWxpc2F0ZXVyICVzIDogJXMiCisKKyM6IGRuc21hc3EuYzo0NzEKK21zZ2lkICJzZXR0aW5nIC0tYmluZC1pbnRlcmZhY2VzIG9wdGlvbiBiZWNhdXNlIG9mIE9TIGxpbWl0YXRpb25zIgorbXNnc3RyICJhY3RpdmUgbCdvcHRpb24gLS1iaW5kLWludGVyZmFjZXMg4CBjYXVzZSBkZSBsaW1pdGF0aW9ucyBkYW5zIGxlIHN5c3TobWUgZCdleHBsb2l0YXRpb24iCisKKyM6IGRuc21hc3EuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogaW50ZXJmYWNlICVzIGRvZXMgbm90IGN1cnJlbnRseSBleGlzdCIKK21zZ3N0ciAiYXR0ZW50aW9uIDogbCdpbnRlcmZhY2UgJXMgbidleGlzdGUgcGFzIGFjdHVlbGxlbWVudCIKKworIzogZG5zbWFzcS5jOjQ4MQorbXNnaWQgIndhcm5pbmc6IGlnbm9yaW5nIHJlc29sdi1maWxlIGZsYWcgYmVjYXVzZSBuby1yZXNvbHYgaXMgc2V0IgorbXNnc3RyICJhdHRlbnRpb24gOiBsJ29wdGlvbiCrIHJlc29sdi1maWxlILsgc2VyYSBpZ25vcullIGNhciCrIG5vLXJlc29sdiC7IGEg6XTpIHNw6WNpZmnpIgorCisjCisjOiBkbnNtYXNxLmM6NDg0Cittc2dpZCAid2FybmluZzogbm8gdXBzdHJlYW0gc2VydmVycyBjb25maWd1cmVkIgorbXNnc3RyICJhdHRlbnRpb24gOiBhdWN1biBzZXJ2ZXVyIGFtb250IG4nZXN0IGNvbmZpZ3Vy6SIKKworIzogZG5zbWFzcS5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBlbmFibGVkLCBxdWV1ZSBsaW1pdCBpcyAlZCBtZXNzYWdlcyIKK21zZ3N0ciAibW9kZSBhc3luY2hyb25lIGQn6WNyaXR1cmUgZGUgdHJhY2VzLCBsYSB0YWlsbGUgbWF4aW11bSBkZSBsYSBxdWV1ZSBlc3QgZGUgJWQgbWVzc2FnZXMuIgorCisjOiBkbnNtYXNxLmM6NTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMsIGxlYXNlIHRpbWUgJXMiCittc2dzdHIgImJhdXggc3RhdGlxdWVzIERIQ1Agc2V1bGVtZW50IHN1ciAlLjBzJXMsIGR1cullIGRlIHZhbGlkaXTpIGRlIGJhaWwgJXMiCisKKyM6IGRuc21hc3EuYzo1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgcHJveHkgb24gc3VibmV0ICUuMHMlcyUuMHMiCittc2dzdHIgIkRIQ1AsIHByb3h5IHN1ciBsZSBzb3VzLXLpc2VhdSAlLjBzJXMlLjBzIgorCisjOiBkbnNtYXNxLmM6NTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIElQIHJhbmdlICVzIC0tICVzLCBsZWFzZSB0aW1lICVzIgorbXNnc3RyICJESENQLCBwbGFnZSBkJ2FkcmVzc2VzICVzIC0tICVzLCBkdXLpZSBkZSBiYWlsICVzIgorCisjOiBkbnNtYXNxLmM6NTE5Cittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgInJvb3QgZXN0IgorCisjCisjOiBkbnNtYXNxLmM6NTE5Cittc2dpZCAiZW5hYmxlZCIKK21zZ3N0ciAiYWN0aXbpIgorCisjOiBkbnNtYXNxLmM6NTIxCittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIm1vZGUgc+ljdXJpc+kiCisKKyM6IGRuc21hc3EuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdHJpY3RpbmcgbWF4aW11bSBzaW11bHRhbmVvdXMgVEZUUCB0cmFuc2ZlcnMgdG8gJWQiCittc2dzdHIgImxlIG5vbWJyZSBtYXhpbXVtIGRlIHRyYW5zZmVydHMgVEZUUCBzaW11bHRhbulzIHNlcmEgcmVzdHJlaW50IOAgJWQiCisKKyM6IGRuc21hc3EuYzo2NjcKK21zZ2lkICJjb25uZWN0ZWQgdG8gc3lzdGVtIERCdXMiCittc2dzdHIgImNvbm5lY3TpIGF1IHN5c3RlbWUgREJ1cyIKKworIzogZG5zbWFzcS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICJOZSBwZXV0IHNlIGxhbmNlciBlbiB04mNoZSBkZSBmb25kIDogJXMiCisKKyM6IGRuc21hc3EuYzo3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBoZWxwZXI6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNy6WVyIGxlICdoZWxwZXInIDogJXMiCisKKyM6IGRuc21hc3EuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb25maWd1cmVyIGxhIGNhcGFjaXTpICVzIgorCisjOiBkbnNtYXNxLmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgdXNlci1pZCB0byAlczogJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgY2hhbmdlciBsJ2lkZW50aWZpYW50IHV0aWxpc2F0ZXVyIHBvdXIgJXMgOiAlcyIKKworIzogZG5zbWFzcS5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIGdyb3VwLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjaGFuZ2VyIGwnaWRlbnRpZmlhbnQgZGUgZ3JvdXBlIHBvdXIgJXMgOiAlcyIKKworIzogZG5zbWFzcS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwaWRmaWxlICVzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlIGZpY2hpZXIgZGUgUElEICVzIDogJXMiCisKKyM6IGRuc21hc3EuYzo3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJOZSBwZXV0IHBhcyBsaXJlICVzIDogJXMiCisKKyM6IGRuc21hc3EuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hpbGQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICJMZSBwcm9jZXNzdXMgZmlscyBhIOl06SB0ZXJtaW7pIHBhciBsZSBzaWduYWwgJWQiCisKKyM6IGRuc21hc3EuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hpbGQgcHJvY2VzcyBleGl0ZWQgd2l0aCBzdGF0dXMgJWQiCittc2dzdHIgIkxlIHByb2Nlc3N1cyBmaWxzIHMnZXN0IHRlcm1pbukgYXZlYyBsZSBzdGF0dXQgJWQiCisKKyM6IGRuc21hc3EuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWN1dGUgJXM6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnZXjpY3V0ZXIg4CAlcyA6ICVzIgorCisjOiBkbnNtYXNxLmM6ODg1Cittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgInNvcnRpZSBzdXIgculjZXB0aW9uIGR1IHNpZ25hbCBTSUdURVJNIgorCisjOiBkbnNtYXNxLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWNj6WRlciDgICVzIDogJXMiCisKKyM6IGRuc21hc3EuYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyAlcyIKK21zZ3N0ciAiTGVjdHVyZSBkZSAlcyIKKworIzogZG5zbWFzcS5jOjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZXJ2ZXJzIGZvdW5kIGluICVzLCB3aWxsIHJldHJ5IgorbXNnc3RyICJhdWN1biBzZXJ2ZXVyIHRyb3V26SBkYW5zICVzLCB2YSBy6WVzc2F5ZXIiCisKKyM6IGRoY3AuYzo0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAibmUgcGV1dCBjcullciBsYSBzb2NrZXQgREhDUDogJXMiCisKKyM6IGRoY3AuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IG9wdGlvbnMgb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYXBwbGlxdWVyIGxlcyBvcHRpb25zIHN1ciBsYSBzb2NrZXQgREhDUCA6ICVzIgorCisjOiBkaGNwLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBk6WNsYXJlciBTT19SRVVTRXtBRERSfFBPUlR9IHN1ciBsYSBzb2NrZXQgREhDUCA6ICVzIgorCisjOiBkaGNwLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUCBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaWVyIGxhIHNvY2tldCBzZXJ2ZXVyIERIQ1AgOiAlcyIKKworIzogZGhjcC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgSUNNUCByYXcgc29ja2V0OiAlcy4iCittc2dzdHIgIm5lIHBldXQgY3LpZXIgZGUgc29ja2V0IGVuIG1vZGUgcmF3IHBvdXIgSUNNUCA6ICVzLiIKKworIzogZGhjcC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAiUGFxdWV0IERIQ1AgcmXndSBzdXIgJXMgcXVpIG4nYSBwYXMgZCdhZHJlc3NlIgorCisjOiBkaGNwLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmFuZ2UgJXMgLS0gJXMgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCBuZXRtYXNrICVzIgorbXNnc3RyICJMYSBwbGFnZSBkJ2FkcmVzc2VzIERIQ1AgJXMgLS0gJXMgbidlc3QgcGFzIGNvaOlyZW50ZSBhdmVjIGxlIG1hc3F1ZSBkZSBy6XNlYXUgJXMiCisKKyM6IGRoY3AuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGxpbmUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAibWF1dmFpc2UgbGlnbmUgZGFucyAlcyBsaWduZSAlZCIKKworIzogZGhjcC5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICJpZ25vcmUgJXMg4CBsYSBsaWduZSAlZCA6IGR1cGxpY2F0aW9uIGRlIG5vbSBvdSBkJ2FkcmVzc2UgSVAiCisKKyM6IGRoY3AuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlLiIKK21zZ3N0ciAiYWRyZXNzZSBJUCAlcyBkdXBsaXF16WUgZGFucyBsYSBkaXJlY3RpdmUgZGhjcC1jb25maWcuIgorCisjOiBkaGNwLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzIGluICVzLiIKK21zZ3N0ciAiYWRyZXNzZSBJUCAlcyBkdXBsaXF16WUgZGFucyAlcy4iCisKKyM6IGRoY3AuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBpbiBob3N0c2ZpbGUsIHVzaW5nICVzIGZvciBESENQIgorbXNnc3RyICIlcyBhIHBsdXMgZCd1bmUgYWRyZXNzZSBkYW5zIGxlIGZpY2hpZXIgZCdo9HRlLCB1dGlsaXNhdGlvbiBkZSAlcyBwb3VyIGxlIERIQ1AuIgorCisjOiBkaGNwLmM6OTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzICglcykgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlIgorbXNnc3RyICJhZHJlc3NlIElQICVzICglcykgZHVwbGlxdellIGRhbnMgbGEgZGlyZWN0aXZlIGRoY3AtY29uZmlnLiIKKworIzogbGVhc2UuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBvciBjcmVhdGUgbGVhc2UgZmlsZSAlczogJXMiCittc2dzdHIgIm5lIHBldXQgb3V2cmlyIG91IGNy6WVyIGxlIGZpY2hpZXJzIGRlIGJhdXggJXMgOiAlcyIKKworIzogbGVhc2UuYzo5MgorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgImJlYXVjb3VwIHRyb3AgZGUgYmF1eCBlbnJlZ2lzdHLpcyIKKworIzogbGVhc2UuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJ1biBsZWFzZS1pbml0IHNjcmlwdCAlczogJXMiCittc2dzdHIgIk5lIHBldXQgcGFzIGV46WN1dGVyIGxlIHNjcmlwdCBsZWFzZS1pbml0ICVzIDogJXMiCisKKyM6IGxlYXNlLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAibGUgc2NyaXB0IGxlYXNlLWluaXQgYSByZXRvdXJu6SBsZSBjb2RlICVzIgorCisjOiBsZWFzZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIChyZXRyeSBpbiAldXMpIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgJXMgOiAlcyAocHJvY2hhaW4gZXNzYWkgZGFucyAldXMpIgorCisjOiByZmMyMTMxLmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQIHJlcXVlc3QgJXMgJXMiCittc2dzdHIgInBhcyBkZSBwbGFnZSBkJ2FkcmVzc2UgZGlzcG9uaWJsZSBwb3VyIGxhIHJlcXXqdGUgREhDUCAlcyAlcyIKKworIzogcmZjMjEzMS5jOjMzNworbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICJhdmVjIHPpbGVjdGV1ciBkZSBzb3VzLXJlc2VhdSIKKworIzogcmZjMjEzMS5jOjMzNworbXNnaWQgInZpYSIKK21zZ3N0ciAicGFyIGwnaW50ZXJt6WRpYWlyZSBkZSIKKworIzogcmZjMjEzMS5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBBdmFpbGFibGUgREhDUCBzdWJuZXQ6ICVzLyVzIgorbXNnc3RyICIldSBzb3VzLXLpc2VhdXggREhDUCBkaXNwb25pYmxlcyA6ICVzLyVzIgorCisjOiByZmMyMTMxLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IEF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiJXUgbGEgZ2FtbWUgREhDUCBkaXNwb25pYmxlIGVzdCA6ICVzIC0tICVzIgorCisjOiByZmMyMTMxLmM6Mzg0Cittc2dpZCAiZGlzYWJsZWQiCittc2dzdHIgImTpc2FjdGl26SIKKworIzogcmZjMjEzMS5jOjQxOCByZmMyMTMxLmM6ODgzIHJmYzIxMzEuYzoxMjQyCittc2dpZCAiaWdub3JlZCIKK21zZ3N0ciAiaWdub3LpIgorCisjOiByZmMyMTMxLmM6NDMzIHJmYzIxMzEuYzoxMTAwCittc2dpZCAiYWRkcmVzcyBpbiB1c2UiCittc2dzdHIgImFkcmVzc2UgZOlq4CB1dGlsaXPpZSIKKworIzogcmZjMjEzMS5jOjQ0NyByZmMyMTMxLmM6OTM3Cittc2dpZCAibm8gYWRkcmVzcyBhdmFpbGFibGUiCittc2dzdHIgInBhcyBkJ2FkcmVzc2UgZGlzcG9uaWJsZSIKKworIzogcmZjMjEzMS5jOjQ1NCByZmMyMTMxLmM6MTA2MworbXNnaWQgIndyb25nIG5ldHdvcmsiCittc2dzdHIgIm1hdXZhaXMgculzZWF1IgorCisjOiByZmMyMTMxLmM6NDY3Cittc2dpZCAibm8gYWRkcmVzcyBjb25maWd1cmVkIgorbXNnc3RyICJwYXMgZCdhZHJlc3NlIGNvbmZpZ3Vy6WUiCisKKyM6IHJmYzIxMzEuYzo0NzMgcmZjMjEzMS5jOjExMTMKK21zZ2lkICJubyBsZWFzZXMgbGVmdCIKK21zZ3N0ciAicGx1cyBhdWN1biBiYWlsIGRpc3BvbmlibGUiCisKKyM6IHJmYzIxMzEuYzo1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IHByb3ZpZGVzIG5hbWU6ICVzIgorbXNnc3RyICJsZSBjbGllbnQgJXUgZm91cm5pIGxlIG5vbSA6ICVzIgorCisjOiByZmMyMTMxLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IFZlbmRvciBjbGFzczogJXMiCittc2dzdHIgIiV1IENsYXNzZSBkZSB2ZW5kZXVyICgnVmVuZG9yIENsYXNzJykgOiAlcyIKKworIzogcmZjMjEzMS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBVc2VyIGNsYXNzOiAlcyIKK21zZ3N0ciAiJXUgQ2xhc3NlIGQndXRpbGlzYXRldXIgOiAlcyIKKworIzogcmZjMjEzMS5jOjczNworbXNnaWQgIlBYRSBCSVMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiU2VydmljZSBQWEUgQklTIChCb290IEludGVncml0eSBTZXJ2aWNlcykgbm9uIHN1cHBvcnTpIgorCisjOiByZmMyMTMxLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIKK21zZ3N0ciAiZOlzYWN0aXZlIGwnYWRyZXNzZSBzdGF0aXF1ZSBESENQICVzIHBvdXIgJXMiCisKKyM6IHJmYzIxMzEuYzo4NzQKK21zZ2lkICJ1bmtub3duIGxlYXNlIgorbXNnc3RyICJiYWlsIGluY29ubnUiCisKKyM6IHJmYzIxMzEuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGxlYXNlZCB0byAlcyIKK21zZ3N0ciAiTCdhZHJlc3NlIHN0YXRpcXVlICVzIG5lIHNlcmEgcGFzIHV0aWxpc+llIGNhciB1biBiYWlsIGVzdCBk6WrgIGF0dHJpYnXpIOAgJXMiCisKKyM6IHJmYzIxMzEuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGluIHVzZSBieSB0aGUgc2VydmVyIG9yIHJlbGF5IgorbXNnc3RyICJMJ2FkcmVzc2Ugc3RhdGlxdWUgJXMgbmUgc2VyYSBwYXMgdXRpbGlz6WUgY2FyIGVsbGUgZXN0IHV0aWxpc+llIHBhciBsZSBzZXJ2ZXVyIG91IHVuIHJlbGFpIgorCisjOiByZmMyMTMxLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCB3YXMgcHJldmlvdXNseSBkZWNsaW5lZCIKK21zZ3N0ciAiTCdhZHJlc3NlIHN0YXRpcXVlICVzIG5lIHNlcmEgcGFzIHV0aWxpc+llIGNhciBlbGxlIGEgcHLpYWxhYmxlbWVudCDpdOkgcmVmdXPpZSIKKworIzogcmZjMjEzMS5jOjkzNSByZmMyMTMxLmM6MTEwNgorbXNnaWQgIm5vIHVuaXF1ZS1pZCIKK21zZ3N0ciAicGFzIGQnaWRlbnRpZmlhbnQgdW5pcXVlIgorCisjOiByZmMyMTMxLmM6MTAwMworbXNnaWQgIndyb25nIHNlcnZlci1JRCIKK21zZ3N0ciAibWF1dmFpcyBpZGVudGlmaWFudCBkZSBzZXJ2ZXVyIgorCisjOiByZmMyMTMxLmM6MTAyMgorbXNnaWQgIndyb25nIGFkZHJlc3MiCittc2dzdHIgIm1hdXZhaXNlIGFkcmVzc2UiCisKKyM6IHJmYzIxMzEuYzoxMDM5Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICJiYWlsIG5vbiB0cm91dukiCisKKyM6IHJmYzIxMzEuYzoxMDcxCittc2dpZCAiYWRkcmVzcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJhZHJlc3NlIG5vbiBkaXNwb25pYmxlIgorCisjOiByZmMyMTMxLmM6MTA4MgorbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgImJhaWwgc3RhdGlxdWUgZGlzcG9uaWJsZSIKKworIzogcmZjMjEzMS5jOjEwODYKK21zZ2lkICJhZGRyZXNzIHJlc2VydmVkIgorbXNnc3RyICJhZHJlc3NlIHJlc2VydullIgorCisjOiByZmMyMTMxLmM6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJhYmFuZG9uaW5nIGxlYXNlIHRvICVzIG9mICVzIgorbXNnc3RyICJhYmFuZG9uIGR1IGJhaWwgZGUgJXMgcG91ciAlcyIKKworIzogcmZjMjEzMS5jOjE1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdGFnczogJXMiCittc2dzdHIgIiV1IG9wdGlvbnM6ICVzIgorCisjOiByZmMyMTMxLmM6MTU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBib290ZmlsZSBuYW1lOiAlcyIKK21zZ3N0ciAiJXUgbm9tIGRlIGZpY2hpZXIgJ2Jvb3RmaWxlJyA6ICVzIgorCisjOiByZmMyMTMxLmM6MTYwNQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBzZXJ2ZXIgbmFtZTogJXMiCittc2dzdHIgIiV1IG5vbSBkdSBzZXJ2ZXVyIDogJXMiCisKKyM6IHJmYzIxMzEuYzoxNjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IG5leHQgc2VydmVyOiAlcyIKK21zZ3N0ciAiJXUgc2VydmV1ciBzdWl2YW50IDogJXMiCisKKyM6IHJmYzIxMzEuYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIERIQ1AvQk9PVFAgb3B0aW9uICVkOiBubyBzcGFjZSBsZWZ0IGluIHBhY2tldCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2Vudm95ZXIgbCdvcHRpb24gREhDUC9CT09UUCAlZCA6IHBhcyBhc3NleiBkJ2VzcGFjZSBkYW5zIGxlIHBhcXVldCIKKworIzogcmZjMjEzMS5jOjE5MTkKK21zZ2lkICJQWEUgbWVudSB0b28gbGFyZ2UiCittc2dzdHIgIm1lbnUgUFhFIHRyb3AgZ3JhbmQiCisKKyM6IHJmYzIxMzEuYzoyMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGRvbWFpbiAlcyBmb3IgREhDUCBob3N0IG5hbWUgJXMiCittc2dzdHIgIkxlIGRvbWFpbmUgJXMgZXN0IGlnbm9y6SBwb3VyIGwnaPR0ZSBESENQICVzIgorCisjOiByZmMyMTMxLmM6MjA1MgorIywgYy1mb3JtYXQKK21zZ2lkICIldSByZXF1ZXN0ZWQgb3B0aW9uczogJXMiCittc2dzdHIgIiV1IG9wdGlvbnMgZGVtYW5k6WVzIDogJXMiCisKKyM6IG5ldGxpbmsuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIKK21zZ3N0ciAibmUgcGV1eCBsaWVyIHVuZSBzb2NrZXQgbmV0bGluayA6ICVzIgorCisjOiBuZXRsaW5rLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldGxpbmsgcmV0dXJucyBlcnJvcjogJXMiCittc2dzdHIgIkVycmV1ciBuZXRsaW5rIDogJXMiCisKKyM6IGRidXMuYzoxNTAKK21zZ2lkICJhdHRlbXB0IHRvIHNldCBhbiBJUHY2IHNlcnZlciBhZGRyZXNzIHZpYSBEQnVzIC0gbm8gSVB2NiBzdXBwb3J0IgorbXNnc3RyICJ0ZW50YXRpdmUgZGUgbGllciB1bmUgYWRyZXNzZSBzZXJ2ZXVyIElQVjYgdmlhIERCdXMgLSBwYXMgZGUgc3VwcG9ydCBJUFY2IgorCisjOiBkYnVzLmM6Mjg2Cittc2dpZCAic2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20gREJ1cyIKK21zZ3N0ciAiY29uZmlndXJhdGlvbiBkZXMgc2VydmV1cnMgYW1vbnRzIOAgcGFydGlyIGRlIERCdXMiCisKKyM6IGRidXMuYzozMjQKK21zZ2lkICJjb3VsZCBub3QgcmVnaXN0ZXIgYSBEQnVzIG1lc3NhZ2UgaGFuZGxlciIKK21zZ3N0ciAibmUgcGV1dCBlbnJlZ2lzdHJlciB1bmUgcm91dGluZSBkZSB0cmFpdGVtZW50IGRlcyBtZXNzYWdlcyBEQnVzIgorCisjOiBicGYuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIEJQRiBzb2NrZXQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNy6WVyIHVuZSBzb2NrZXQgQlBGIHBvdXIgREhDUCA6ICVzIgorCisjOiBicGYuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZXF1ZXN0IGZvciB1bnN1cHBvcnRlZCBoYXJkd2FyZSB0eXBlICglZCkgcmVjZWl2ZWQgb24gJXMiCittc2dzdHIgInJlcXXqdGUgREhDUCBwb3VyIHVuIHR5cGUgZGUgbWF06XJpZWwgbm9uIHN1cHBvcnTpICglZCkgcmXndWUgc3VyICVzIgorCisjOiB0ZnRwLmM6MTc5Cittc2dpZCAidW5hYmxlIHRvIGdldCBmcmVlIHBvcnQgZm9yIFRGVFAiCittc2dzdHIgImltcG9zc2libGUgZCdvYnRlbmlyIHVuIHBvcnQgbGlicmUgcG91ciBURlRQIgorCisjOiB0ZnRwLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAicmVxdep0ZSBkZSAlcyBub24gc3VwcG9ydOllIgorCisjOiB0ZnRwLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgc2VudCAlcyB0byAlcyIKK21zZ3N0ciAiVEZUUCBlbnZveekgJXMg4CAlcyIKKworIzogdGZ0cC5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiZmljaGllciAlcyBub24gdHJvdXbpIgorCisjOiB0ZnRwLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgZXJyb3IgJWQgJXMgcmVjZWl2ZWQgZnJvbSAlcyIKK21zZ3N0ciAiVEZUUCBlcnJldXIgJWQgJXMgcmXndSBkZSAlcyIKKworIzogdGZ0cC5jOjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGZhaWxlZCBzZW5kaW5nICVzIHRvICVzIgorbXNnc3RyICJURlRQIDogaW1wb3NzaWJsZSBkJ2Vudm95ZXIgJXMg4CAlcyIKKworIzogbG9nLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJmbG93OiAlZCBsb2cgZW50cmllcyBsb3N0IgorbXNnc3RyICJk6WJvcmRlbWVudCA6ICVkIHRyYWNlcyBwZXJkdWVzIgorCisjOiBsb2cuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZhaWxlZDogJXMiCittc2dzdHIgInRyYWNlIHBlcmR1ZSA6ICVzIgorCisjOiBsb2cuYzo0MTUKK21zZ2lkICJGQUlMRUQgdG8gc3RhcnQgdXAiCittc2dzdHIgIklNUE9TU0lCTEUgZGUgZOltYXJyZXIiCisKKyN+IG1zZ2lkICJESENQIHBhY2tldDogdHJhbnNhY3Rpb24taWQgaXMgJXUiCisjfiBtc2dzdHIgInBhcXVldCBESENQIDogbCdpZGVudGlmaWFudCBkZSB0cmFuc2FjdGlvbiAoJ3RyYW5zYWN0aW9uLWlkJykgZXN0ICV1IgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6JXMiCisjfiBtc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSAlcyA6ICVzIgorCisjfiBtc2dpZCAibXVzdCBzZXQgZXhhY3RseSBvbmUgaW50ZXJmYWNlIG9uIGJyb2tlbiBzeXN0ZW1zIHdpdGhvdXQgSVBfUkVDVklGIgorI34gbXNnc3RyICJVbmUgaW50ZXJmYWNlIGV0IHVuZSBzZXVsZSBkb2l0IOp0cmUgZOljbGFy6WUgc3VyIGxlcyBzeXN06G1lcyBzYW5zIElQX1JFQ1ZJRiIKKworIworI34gbXNnaWQgImZhaWxlZCB0byBsb2FkICVzOiAlcyIKKyN+IG1zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjaGFyZ2VyICVzIDogJW0iCisKKyN+IG1zZ2lkICJiYWQgbmFtZSBpbiAlcyIKKyN+IG1zZ3N0ciAibWF1dmFpcyBub20gZGFucyAlcyIKKworI34gbXNnaWQgIklnbm9yaW5nIERIQ1AgbGVhc2UgZm9yICVzIGJlY2F1c2UgaXQgaGFzIGFuIGlsbGVnYWwgZG9tYWluIHBhcnQiCisjfiBtc2dzdHIgIk9uIGlnbm9yZSBsZSBiYWlsIERIQ1AgcG91ciAlcyBjYXIgaWwgcG9zc+hkZSB1biBub20gZGUgZG9tYWluZSBpbGzpZ2FsIgorCisjfiBtc2dpZCAiSVNDIGRoY3BkIGludGVncmF0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0lTQ19SRUFERVIgaW4gc3JjL2NvbmZpZy5oIgorI34gbXNnc3RyICJMJ2ludOlncmF0aW9uIERIQ1AgSVNDIG4nZXN0IHBhcyBkaXNwb25pYmxlIDogYWN0aXZleiBIQVZFX0lTQ19SRUFERVIgZGFucyBzcmMvY29uZmlnLmgiCisKKyMKKyN+IG1zZ2lkICJpbGxlZ2FsIGRvbWFpbiAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorI34gbXNnc3RyICJkb21haW5lICVzIGR1cGxpcXXpIGRhbnMgbGEgZGlyZWN0aXZlIGRoY3AtY29uZmlnLiIKKworI34gbXNnaWQgImlsbGVnYWwgZG9tYWluICVzIGluICVzLiIKKyN+IG1zZ3N0ciAiZG9tYWluZSAlcyBpbGzpZ2FsIGRhbnMgJXMuIgorCisjfiBtc2dpZCAicnVubmluZyBhcyByb290IgorI34gbXNnc3RyICJleGVjdXTpIGVuIHRlbXBzIHF1ZSByb290IgorCisjfiBtc2dpZCAiUmVhZCBsZWFzZXMgYXQgc3RhcnR1cCwgYnV0IG5ldmVyIHdyaXRlIHRoZSBsZWFzZSBmaWxlLiIKKyN+IG1zZ3N0ciAiTGVjdHVyZSBkZXMgYmF1eCBhdSBk6W1hcnJhZ2UsIG1haXMgYXVjdW5lIOljcml0dXJlIGRlIGZpY2hpZXIgZGUgYmF1eCIKKworIworI34gbXNnaWQgInJlYWQgJXMgLSAlZCBob3N0cyIKKyN+IG1zZ3N0ciAibGVjdHVyZSAlcyAtICVkIGj0dGVzIgorCisjfiBtc2dpZCAiYmFkIGRoY3AtaG9zdCIKKyN+IG1zZ3N0ciAibWF1dmFpcyBkaGNwLWhvc3QiCisKKyN+IG1zZ2lkICJkb21haW5zIgorI34gbXNnc3RyICJkb21haW5lcyIKKworI34gbXNnaWQgIklnbm9yaW5nIERIQ1AgaG9zdCBuYW1lICVzIGJlY2F1c2UgaXQgaGFzIGFuIGlsbGVnYWwgZG9tYWluIHBhcnQiCisjfiBtc2dzdHIgIkxlIG5vbSBkZSBtYWNoaW5lIERIQ1AgJXMgc2VyYSBpZ25vcukgcGFyY2UgcXUnaWwgcG9zc+hkZSB1biBub20gZGUgZG9tYWluZSBpbGzpZ2FsIgorCisjfiBtc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIgorI34gbXNnc3RyICJBZmZpY2hlIGNlIG1lc3NhZ2UuIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVtIgorI34gbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgJXMgOiAlbSIKKworI34gbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiVtIgorI34gbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgJXMgOiAlbSIKKworIworI34gbXNnaWQgImNhbm5vdCBzZW5kIGVuY2Fwc3VsYXRlZCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gd3JhcHBlciIKKyN+IG1zZ3N0ciAiSW1wb3NzaWJsZSBkJ2Vudm95ZXIgbCdvcHRpb24gREhDUCAlZCA6IHBhcyBhc3NleiBkJ2VzcGFjZSBkYW5zIGxlIHBhcXVldCIKKworI34gbXNnaWQgIk1vcmUgdGhhbiBvbmUgdmVuZG9yIGNsYXNzIG1hdGNoZXMsIHVzaW5nICVzIgorI34gbXNnc3RyICJQbHVzaWV1cnMgY2xhc3NlcyBkZSBmb3Vybmlzc2V1cnMgY29ycmVzcG9uZGVudCwgJXMgc2VyYSB1dGlsaXPpIgpkaWZmIC0tZ2l0IGEvcG8vaWQucG8gYi9wby9pZC5wbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNWZmNmU4Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vaWQucG8KQEAgLTAsMCArMSwxNzI3IEBACisjIEluZG9uZXNpYW4gdHJhbnNsYXRpb25zIGZvciBkbnNtYXNxIHBhY2thZ2UuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIFNhbG1hbiBBUyA8c2FzQHNhbG1hbi5vci5pZD4sIDIwMDUuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBkbnNtYXNxIDIuMjRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDktMDYtMTggMTI6MjQrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMTAtMDcgMTE6NDUrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogU2FsbWFuIEFTIDxzYXNAc2FsbWFuLm9yLmlkPlxuIgorIkxhbmd1YWdlLVRlYW06IEluZG9uZXNpYW4gPHRyYW5zbGF0aW9uLXRlYW0taWRAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUFTQ0lJXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjIE9LCisjOiBjYWNoZS5jOjc2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgbmFtZXMgZnJvbSAlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbXVhdCBuYW1hLW5hbWEgZGFyaSAlczogJXMiCisKKyMgT0sKKyM6IGNhY2hlLmM6Nzk4IGRoY3AuYzo3ODUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImtlc2FsYWhhbiBuYW1hIHBhZGEgJXMgYmFyaXMgJWQiCisKKyMgT0sKKyM6IGNhY2hlLmM6ODU2IGRoY3AuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG5hbWUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAia2VzYWxhaGFuIG5hbWEgcGFkYSAlcyBiYXJpcyAlZCIKKworIyBPSworIzogY2FjaGUuYzo4NjMgZGhjcC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIgorbXNnc3RyICJtZW1iYWNhICVzIC0gJWQgYWxhbWF0IgorCisjIE9LCisjOiBjYWNoZS5jOjkwMgorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgImNhY2hlIHRlbGFoIGRpaGFwdXMiCisKKyMgT0sKKyM6IGNhY2hlLmM6OTMzIG9wdGlvbi5jOjEwNTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW1iYWNhICVzOiAlcyIKKworIyBPSworIzogY2FjaGUuYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgInRpZGFrIG1lbWJlcmlrYW4gbmFtYSAlcyBrZXBhZGEgbGVhc2UgREhDUCAlcyBrYXJlbmEgbmFtYSB0ZWxhaCBhZGEgZGFsYW0gJXNkZW5nYW4gYWxhbWF0ICVzIgorCisjOiBjYWNoZS5jOjExMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSAlbHUiCittc2dzdHIgIiIKKworIyBPSworIzogY2FjaGUuYzoxMTMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYWNoZSBzaXplICVkLCAlZC8lZCBjYWNoZSBpbnNlcnRpb25zIHJlLXVzZWQgdW5leHBpcmVkIGNhY2hlIGVudHJpZXMuIgorbXNnc3RyICJ1a3VyYW4gY2FjaGUgJWQsICVkLyVkIHBlbnlpc2lwYW4gY2FjaGUgbWVuaW1wYSBjYWNoZSB5YW5nIGJlbHVtIGthZGFsdXdhcnNhIgorCisjOiBjYWNoZS5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicXVlcmllcyBmb3J3YXJkZWQgJXUsIHF1ZXJpZXMgYW5zd2VyZWQgbG9jYWxseSAldSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyICVzIyVkOiBxdWVyaWVzIHNlbnQgJXUsIHJldHJpZWQgb3IgZmFpbGVkICV1IgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHV0aWwuYzo1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVuZGVuZ2Fya2FuIGRpIHNvY2tldDogJXMiCisKKyMgT0sKKyM6IHV0aWwuYzoxOTEKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAiZ2FnYWwgbWVtdWF0ICVTOiAlbSIKKworIyBPSworIzogdXRpbC5jOjIyOSBvcHRpb24uYzo1NDgKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW5kYXBhdGthbiBtZW1vcnkiCisKKyMgT0sKKyM6IHV0aWwuYzoyMzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgInRpZGFrIGJpc2EgbWVtYmFjYSAlczogJXMiCisKKyMgT0sKKyM6IHV0aWwuYzoyNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtdWF0ICVTOiAlbSIKKworIyBPSworIzogdXRpbC5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZpbml0ZSIKK21zZ3N0ciAidGFrIHRlcmJhdGFzIgorCisjIE9LCisjOiBvcHRpb24uYzoyMjgKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlRlbnR1a2FuIGFsYW1hdCBsb2thbCB1bnR1ayBtZW5kZW5nYXJrYW4uIgorCisjIE9LCisjOiBvcHRpb24uYzoyMjkKK21zZ2lkICJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICJNZW5naGFzaWxrYW4gaXBhZGRyIHVudHVrIHNlbXVhIGhvc3QgZGFsYW0gZG9tYWluIHlhbmcgZGlwaWxpaC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjIzMAorbXNnaWQgIkZha2UgcmV2ZXJzZSBsb29rdXBzIGZvciBSRkMxOTE4IHByaXZhdGUgYWRkcmVzcyByYW5nZXMuIgorbXNnc3RyICJGYWtlIHBlbmNhcmlhbiBiYWxpayB1bnR1ayBhbGFtYXQgcHJpdmF0ZSBzZXN1YWkgZGVuZ2FuIFJGQzE5MTguIgorCisjIE9LCisjOiBvcHRpb24uYzoyMzEKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiUGVybGFrdWthbiBpcGFkZHIgc2ViYWdhaSBOWERPTUFJTiAobWVuZ2FsYWhrYW4gd2lsZGNhcmQgVmVyaXNpZ24pLiIKKworIyBPSworIzogb3B0aW9uLmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGluIGVudHJpZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlRlbnR1a2FuIHVrdXJhbiBjYWNoZSwgZGFsYW0ganVtbGFoIGlzaWFuIChkZWZhdWx0ICVzKS4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiVGVudHVrYW4gZmlsZSBrb25maWd1cmFzaSAoZGVmYXVsdCAlcykuIgorCisjIE9LCisjOiBvcHRpb24uYzoyMzQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIkpBTkdBTiBiZXJqYWxhbiBkaSBiYWNrZ3JvdW5kOiBiZXJqYWxhbiBkYWxhbSBtb2R1cyBkZWJ1Zy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjIzNQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIkpBTkdBTiB0ZXJ1c2thbiBwZXJtaW50YWFuIHRhbnBhIGJhZ2lhbiBkb21haW4uIgorCisjIE9LCisjOiBvcHRpb24uYzoyMzYKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIk1lbmdlbWJhbGlrYW4gcmVjb3JkIE1YIHVudHVrIGRpcmkgc2VuZGlyaSBob3N0LWhvc3QgbG9rYWwuIgorCisjIE9LCisjOiBvcHRpb24uYzoyMzcKK21zZ2lkICJFeHBhbmQgc2ltcGxlIG5hbWVzIGluIC9ldGMvaG9zdHMgd2l0aCBkb21haW4tc3VmZml4LiIKK21zZ3N0ciAiTWVsZW5na2FwaSBuYW1hLW5hbWEgZGkgL2V0Yy9ob3N0cyBkZW5nYW4gYWtoaXJhbiBkb21haW4uIgorCisjIE9LCisjOiBvcHRpb24uYzoyMzgKK21zZ2lkICJEb24ndCBmb3J3YXJkIHNwdXJpb3VzIEROUyByZXF1ZXN0cyBmcm9tIFdpbmRvd3MgaG9zdHMuIgorbXNnc3RyICJKYW5nYW4gbWVuZXJ1c2thbiBwZXJtaW50YWFuIEROUyBzcHVyaW91cyBkYXJpIGhvc3QtaG9zdCBXaW5kb3dzLiIKKworIyBPSworIzogb3B0aW9uLmM6MjM5Cittc2dpZCAiRW5hYmxlIERIQ1AgaW4gdGhlIHJhbmdlIGdpdmVuIHdpdGggbGVhc2UgZHVyYXRpb24uIgorbXNnc3RyICJCb2xlaGthbiBESENQIGRhbGFtIGphbmdrYXVhbiB5YW5nIGRpYmVyaWthbiBkZW5nYW4gZHVyYXNpIGxlYXNlLiIKKworIyBPSworIzogb3B0aW9uLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIGdyb3VwIGFmdGVyIHN0YXJ0dXAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlViYWgga2UgZ3JvdXAgaW5pIHNldGVsYWggbXVsYWkgKGRlZmF1bHQgJXMpLiIKKworIyBPSworIzogb3B0aW9uLmM6MjQxCittc2dpZCAiU2V0IGFkZHJlc3Mgb3IgaG9zdG5hbWUgZm9yIGEgc3BlY2lmaWVkIG1hY2hpbmUuIgorbXNnc3RyICJTZXRlbCBhbGFtYXQgYXRhdSBuYW1hIGhvc3QgdW50dWsgbWVzaW4geWFuZyBkaXNlYnV0a2FuLiIKKworIzogb3B0aW9uLmM6MjQyCittc2dpZCAiUmVhZCBESENQIGhvc3Qgc3BlY3MgZnJvbSBmaWxlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0MworbXNnaWQgIlJlYWQgREhDUCBvcHRpb24gc3BlY3MgZnJvbSBmaWxlIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgbG9hZCAlcyBmaWxlLiIKK21zZ3N0ciAiSkFOR0FOIG11YXQgZmlsZSAlcy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiU2VidXRrYW4gc2VidWFoIGZpbGUgaG9zdHMgeWFuZyBoYXJ1cyBkaWJhY2Egc2ViYWdhaSB0YW1iYWhhbiB1bnR1ayAlcy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI0NgorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlNlYnV0a2FuIGFudGFybXVrYSB1bnR1ayBtZW5kZW5nYXJrYW4uIgorCisjIE9LCisjOiBvcHRpb24uYzoyNDcKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSBOT1QgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiU2VidXRrYW4gYW50YXJtdWthIHVudHVrIFRJREFLIG1lbmRlbmdhcmthbi4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI0OAorIywgZnV6enkKK21zZ2lkICJNYXAgREhDUCB1c2VyIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIlBldGFrYW4ga2VsYXMgdXNlciBESENQIGtlIHNldGVsYW4geWFuZyBkaXBpbGloLiIKKworIzogb3B0aW9uLmM6MjQ5Cittc2dpZCAiTWFwIFJGQzMwNDYgY2lyY3VpdC1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1MAorbXNnaWQgIk1hcCBSRkMzMDQ2IHJlbW90ZS1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1MQorbXNnaWQgIk1hcCBSRkMzOTkzIHN1YnNjcmliZXItaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzoyNTIKKyMsIGZ1enp5Cittc2dpZCAiRG9uJ3QgZG8gREhDUCBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiSmFuZ2FuIG1lbmdndW5ha2FuIERIQ1AgdW50dWsgaG9zdC1ob3N0IHlhbmcgZGlwaWxpaC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI1MworIywgZnV6enkKK21zZ2lkICJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiSmFuZ2FuIG1lbmdndW5ha2FuIERIQ1AgdW50dWsgaG9zdC1ob3N0IHlhbmcgZGlwaWxpaC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI1NAorbXNnaWQgIkRvIE5PVCBmb3JrIGludG8gdGhlIGJhY2tncm91bmQsIGRvIE5PVCBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIkpBTkdBTiBiZXJqYWxhbiBkaSBiYWNrZ3JvdW5kLCBqYW5nYW4gYmVyamFsYW4gZGFsYW0gbW9kdXMgZGVidWcuIgorCisjIE9LCisjOiBvcHRpb24uYzoyNTUKK21zZ2lkICJBc3N1bWUgd2UgYXJlIHRoZSBvbmx5IERIQ1Agc2VydmVyIG9uIHRoZSBsb2NhbCBuZXR3b3JrLiIKK21zZ3N0ciAiQmVycGlraXIgYmFod2Ega2l0YSBzYXR1LXNhdHVueWEgREhDUCBzZXJ2ZXIgZGFsYW0gamFyaW5nYW4uIgorCisjIE9LCisjOiBvcHRpb24uYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB3aGVyZSB0byBzdG9yZSBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU2VidXRrYW4gbG9rYXNpIHVudHVrIG1lbnlpbXBhbiBsZWFzZSBESENQIChkZWZhdWx0ICVzKS4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI1NworbXNnaWQgIlJldHVybiBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIktlbWJhbGlrYW4gcmVrb3JkIE1YIHVudHVrIGhvc3QtaG9zdCBsb2thbC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI1OAorbXNnaWQgIlNwZWNpZnkgYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiU2VidXRrYW4gc2VidWFoIHJla29yZCBNWC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI1OQorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIlNlYnV0a2FuIHBpbGloYW4tcGlsaWhhbiBCT09UUCB1bnR1ayBESENQIHNlcnZlci4iCisKKyM6IG9wdGlvbi5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgcG9sbCAlcyBmaWxlLCByZWxvYWQgb25seSBvbiBTSUdIVVAuIgorbXNnc3RyICJKYW5nYW4ga3VtcHVsa2FuIGZpbGUgJXMsIG11YXQga2VtYmFsaSBzYWF0IFNJR0hVUC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI2MQorbXNnaWQgIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIgorbXNnc3RyICJKQU5HQU4gbWVueWltcGFuIGhhc2lsIHBlbmNhcmlhbiB5YW5nIGdhZ2FsLiIKKworIyBPSworIzogb3B0aW9uLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBuYW1lc2VydmVycyBzdHJpY3RseSBpbiB0aGUgb3JkZXIgZ2l2ZW4gaW4gJXMuIgorbXNnc3RyICJHdW5ha2FuIHNlY2FyYSBrZXRhdCBuYW1hc2VydmVyIHlhbmcgZGlzZWJ1dGthbiBzZXN1YWkgdXJ1dGFuIGRpICVzLiIKKworIyBPSworIzogb3B0aW9uLmM6MjYzCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgb3B0aW9ucyB0byBiZSBzZW50IHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIlNldGVsIHBpbGloYW4tcGlsaWhhbiB0YW1iYWhhbiB5YW5nIGFrYW4gZGlzZXRlbCB1bnR1ayBrbGllbi1rbGllbiBESENQLiIKKworIzogb3B0aW9uLmM6MjY0Cittc2dpZCAiREhDUCBvcHRpb24gc2VudCBldmVuIGlmIHRoZSBjbGllbnQgZG9lcyBub3QgcmVxdWVzdCBpdC4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6MjY1Cittc2dpZCAiU3BlY2lmeSBwb3J0IHRvIGxpc3RlbiBmb3IgRE5TIHJlcXVlc3RzIG9uIChkZWZhdWx0cyB0byA1MykuIgorbXNnc3RyICJTZWJ1dGthbiBwb3J0IHVudHVrIG1lbmRlbmdhcmthbiBwZXJtaW50YWFuIEROUyAoZGVmYXVsdCBwb3J0IDUzKS4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIHN1cHBvcnRlZCBVRFAgcGFja2V0IHNpemUgZm9yIEVETlMuMCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiVWt1cmFuIG1ha3NpbXVtIHBha2V0IFVEUCB5YW5nIGRpZHVrdW5nIHVudHVrIEVETlMuMCAoZGVmYXVsdCAlcykuIgorCisjIE9LCisjOiBvcHRpb24uYzoyNjcKKyMsIGZ1enp5Cittc2dpZCAiTG9nIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiUGVybWludGFhbiBsb2cuIgorCisjIE9LCisjOiBvcHRpb24uYzoyNjgKKyMsIGZ1enp5Cittc2dpZCAiRm9yY2UgdGhlIG9yaWdpbmF0aW5nIHBvcnQgZm9yIHVwc3RyZWFtIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiUGFrc2EgcG9ydCBhc2FsIHVudHVrIHBlcm1pbnRhYW4ga2UgYXRhcy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI2OQorbXNnaWQgIkRvIE5PVCByZWFkIHJlc29sdi5jb25mLiIKK21zZ3N0ciAiSkFOR0FOIGJhY2EgcmVzb2x2LmNvbmYuIgorCisjIE9LCisjOiBvcHRpb24uYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIHJlc29sdi5jb25mIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTZWJ1dGthbiBwYXRoIGtlIHJlc29sdi5jb25mIChkZWZhdWx0ICVzKS4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI3MQorbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyhlcykgb2YgdXBzdHJlYW0gc2VydmVycyB3aXRoIG9wdGlvbmFsIGRvbWFpbnMuIgorbXNnc3RyICJTZWJ1dGthbiBhbGFtYXQtYWxhbWF0IHNlcnZlciBkaSBhdGFzLCBib2xlaCBkaWxlbmdrYXBpIGRlbmdhbiBuYW1hIGRvbWFpbi4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI3MgorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIkpBTkdBTiBwZXJuYWggbWVuZXJ1c2thbiBwZXJtaW50YWFuIGtlIGRvbWFpbiB5YW5nIGRpc2VidXRrYW4uIgorCisjIE9LCisjOiBvcHRpb24uYzoyNzMKK21zZ2lkICJTcGVjaWZ5IHRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgaW4gREhDUCBsZWFzZXMuIgorbXNnc3RyICJTZWJ1dGthbiBkb21haW4geWFuZyBkaWd1bmFrYW4gZGFsYW0gbGVhc2UgREhDUC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI3NAorbXNnaWQgIlNwZWNpZnkgZGVmYXVsdCB0YXJnZXQgaW4gYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiU2VidXRrYW4gdHVqdWFuIGRlZmF1bHQgZGFsYW0gcmVrb3JkIE1YLiIKKworIyBPSworIzogb3B0aW9uLmM6Mjc1Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgcmVwbGllcyBmcm9tIC9ldGMvaG9zdHMuIgorbXNnc3RyICJTZWJ1dGthbiB0aW1lLXRvLWxpdmUgZGFsYW0gZGV0aWsgdW50dWsgamF3YWJhbiBkYXJpIC9ldGMvaG9zdHMuIgorCisjIE9LCisjOiBvcHRpb24uYzoyNzYKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbmVnYXRpdmUgY2FjaGluZy4iCittc2dzdHIgIlNlYnV0a2FuIHRpbWUtdG8tbGl2ZSBkYWxhbSBkZXRpayB1bnR1ayBqYXdhYmFuIGRhcmkgL2V0Yy9ob3N0cy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyB1c2VyIGFmdGVyIHN0YXJ0dXAuIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJVYmFoIGtlIHVzZXIgaW5pIHNldGVsYWggbXVsYWkuIChkZWZhdWx0ICVzKS4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI3OAorIywgZnV6enkKK21zZ2lkICJNYXAgREhDUCB2ZW5kb3IgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiTWVtZXRha2FuIGtlbGFzIHZlbmRvciBESENQIGtlIGRhZnRhciBwaWxpaGFuLiIKKworIyBPSworIzogb3B0aW9uLmM6Mjc5Cittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIk1lbmFtcGlsa2FuIHZlcnNpIGRhbiBpbmZvcm1hc2kgaGFrIGNpcHRhIGRuc21hc3EuIgorCisjIE9LCisjOiBvcHRpb24uYzoyODAKK21zZ2lkICJUcmFuc2xhdGUgSVB2NCBhZGRyZXNzZXMgZnJvbSB1cHN0cmVhbSBzZXJ2ZXJzLiIKK21zZ3N0ciAiVGVyamVtYWhrYW4gYWxhbWF0LWFsYW1hdCBJUHY0IGRhcmkgc2VydmVyLXNlcnZlciBkaSBhdGFzLiIKKworIyBPSworIzogb3B0aW9uLmM6MjgxCittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICJTZWJ1dGthbiByZWtvcmQgU1JWLiIKKworIzogb3B0aW9uLmM6MjgyCittc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIFVzZSAtLWhlbHAgZGhjcCBmb3Iga25vd24gREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzoyODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCBvZiBQSUQgZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU2VidXRrYW4gcGF0aCBmaWxlIFBJRC4gKGRlZmF1bHQgJXMpLiIKKworIyBPSworIzogb3B0aW9uLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNlYnV0a2FuIGp1bWxhaCBtYWtzaW11bSBsZWFzZSBESENQIChkZWZhdWx0ICVzKS4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI4NQorbXNnaWQgIkFuc3dlciBETlMgcXVlcmllcyBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlIGEgcXVlcnkgd2FzIHNlbnQgdG8uIgorbXNnc3RyICJKYXdhYiBwZXJtaW50YWFuIEROUyBiZXJkYXNhcmthbiBhbnRhcm11a2EgZGltYW5hIHBlcm1pbnRhYW4gZGlraXJpbWthbi4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI4NgorbXNnaWQgIlNwZWNpZnkgVFhUIEROUyByZWNvcmQuIgorbXNnc3RyICJTZWJ1dGthbiByZWtvcmQgVFhUIEROUy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI4NworIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IFBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiU2VidXRrYW4gcmVrb3JkIFRYVCBETlMuIgorCisjOiBvcHRpb24uYzoyODgKK21zZ2lkICJHaXZlIEROUyBuYW1lIHRvIElQdjQgYWRkcmVzcyBvZiBpbnRlcmZhY2UuIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI4OQorbXNnaWQgIkJpbmQgb25seSB0byBpbnRlcmZhY2VzIGluIHVzZS4iCittc2dzdHIgIkhhbnlhIGthaXRrYW4ga2UgYW50YXJtdWthIHlhbmcgc2VkYW5nIGRpZ3VuYWthbiBzYWphLiIKKworIyBPSworIzogb3B0aW9uLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWQgREhDUCBzdGF0aWMgaG9zdCBpbmZvcm1hdGlvbiBmcm9tICVzLiIKK21zZ3N0ciAiQmFjYSBpbmZvcm1hc2kgc3RhdGlrIGhvc3QgREhDUCBkYXJpICVzLiIKKworIyBPSworIzogb3B0aW9uLmM6MjkxCittc2dpZCAiRW5hYmxlIHRoZSBEQnVzIGludGVyZmFjZSBmb3Igc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzLCBldGMuIgorbXNnc3RyICJNdW5na2lua2FuIGFudGFyIG11a2EgREJ1cyB1bnR1ayBtZW55ZXRlbCBzZXJ2ZXItc2VydmVyIGRpIGF0YXMsIGRzYi4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI5MgorbXNnaWQgIkRvIG5vdCBwcm92aWRlIERIQ1Agb24gdGhpcyBpbnRlcmZhY2UsIG9ubHkgcHJvdmlkZSBETlMuIgorbXNnc3RyICJKQU5HQU4gbWVueWVkaWFrYW4gREhDUCBwYWRhIGFudGFybXVrYSBpbmksIGhhbnlhIG1lbnllZGlha2FuIEROUy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI5MworbXNnaWQgIkVuYWJsZSBkeW5hbWljIGFkZHJlc3MgYWxsb2NhdGlvbiBmb3IgYm9vdHAuIgorbXNnc3RyICJNdW5na2lua2FuIGFsb2thc2kgYWxhbWF0IGRpbmFtaXMgdW50dWsgYm9vdHAuIgorCisjIE9LCisjOiBvcHRpb24uYzoyOTQKKyMsIGZ1enp5Cittc2dpZCAiTWFwIE1BQyBhZGRyZXNzICh3aXRoIHdpbGRjYXJkcykgdG8gb3B0aW9uIHNldC4iCittc2dzdHIgIk1lbWV0YWthbiBrZWxhcyB2ZW5kb3IgREhDUCBrZSBkYWZ0YXIgcGlsaWhhbi4iCisKKyM6IG9wdGlvbi5jOjI5NQorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk2Cittc2dpZCAiRGlzYWJsZSBJQ01QIGVjaG8gYWRkcmVzcyBjaGVja2luZyBpbiB0aGUgREhDUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NworbXNnaWQgIlNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5OAorbXNnaWQgIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI5OQorIywgZnV6enkKK21zZ2lkICJMb2cgdG8gdGhpcyBzeXNsb2cgZmFjaWxpdHkgb3IgZmlsZS4gKGRlZmF1bHRzIHRvIERBRU1PTikiCittc2dzdHIgIlViYWgga2UgdXNlciBpbmkgc2V0ZWxhaCBtdWxhaS4gKGRlZmF1bHQgJXMpLiIKKworIzogb3B0aW9uLmM6MzAwCittc2dpZCAiRG8gbm90IHVzZSBsZWFzZWZpbGUuIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjMwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcy4gKGRlZmF1bHRzIHRvICVzKSIKK21zZ3N0ciAiU2VidXRrYW4ganVtbGFoIG1ha3NpbXVtIGxlYXNlIERIQ1AgKGRlZmF1bHQgJXMpLiIKKworIzogb3B0aW9uLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzAzCittc2dpZCAiSWdub3JlIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNAorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDUKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNgorbXNnaWQgIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNworbXNnaWQgIkFkZCBjbGllbnQgSVAgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwOAorbXNnaWQgIkFsbG93IGFjY2VzcyBvbmx5IHRvIGZpbGVzIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgZG5zbWFzcS4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6MzA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25uY3VycmVudCBURlRQIHRyYW5zZmVycyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU2VidXRrYW4ganVtbGFoIG1ha3NpbXVtIGxlYXNlIERIQ1AgKGRlZmF1bHQgJXMpLiIKKworIzogb3B0aW9uLmM6MzEwCittc2dpZCAiRGlzYWJsZSB0aGUgVEZUUCBibG9ja3NpemUgZXh0ZW5zaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTEKK21zZ2lkICJFcGhlbWVyYWwgcG9ydCByYW5nZSBmb3IgdXNlIGJ5IFRGVFAgdHJhbnNmZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTIKK21zZ2lkICJFeHRyYSBsb2dnaW5nIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTMKK21zZ2lkICJFbmFibGUgYXN5bmMuIGxvZ2dpbmc7IG9wdGlvbmFsbHkgc2V0IHF1ZXVlIGxlbmd0aC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE0Cittc2dpZCAiU3RvcCBETlMgcmViaW5kaW5nLiBGaWx0ZXIgcHJpdmF0ZSBJUCByYW5nZXMgd2hlbiByZXNvbHZpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxNQorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTYKK21zZ2lkICJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE3Cittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTgKK21zZ2lkICJSdW4gbGVhc2UtY2hhbmdlIHNjcmlwdCBhcyB0aGlzIHVzZXIuIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjMxOQorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IE5BUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICJTZWJ1dGthbiByZWtvcmQgVFhUIEROUy4iCisKKyM6IG9wdGlvbi5jOjMyMAorbXNnaWQgIlNwZWNpZnkgbG93ZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjEKK21zZ2lkICJVc2Ugb25seSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWVzIGZvciBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMgorbXNnaWQgIlNwZWNpZnkgYWxpYXMgbmFtZSBmb3IgTE9DQUwgRE5TIG5hbWUuIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjMyMworIywgZnV6enkKK21zZ2lkICJQcm9tcHQgdG8gc2VuZCB0byBQWEUgY2xpZW50cy4iCittc2dzdHIgIlNldGVsIHBpbGloYW4tcGlsaWhhbiB0YW1iYWhhbiB5YW5nIGFrYW4gZGlzZXRlbCB1bnR1ayBrbGllbi1rbGllbiBESENQLiIKKworIzogb3B0aW9uLmM6MzI0Cittc2dpZCAiQm9vdCBzZXJ2aWNlIGZvciBQWEUgbWVudS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI1Cittc2dpZCAiQ2hlY2sgY29uZmlndXJhdGlvbiBzeW50YXguIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjYxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCittc2dzdHIgIiIKKyJQZW5nZ3VuYWFuOiBkbnNtYXNxIFtwaWxpaGFuXVxuIgorIlxuIgorCisjIE9LCisjOiBvcHRpb24uYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIHNob3J0IG9wdGlvbnMgb25seSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuIgorbXNnc3RyICJHdW5ha2FuIHBpbGloYW4gcGVuZGVrIHNhamEgcGFkYSBwZXJpbnRhaCBiYXJpcy5cbiIKKworIyBPSworIzogb3B0aW9uLmM6NjE3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiUGlsaWhhbiB5YW5nIGJvbGVoIGFkYWxhaDpcbiIKKworIzogb3B0aW9uLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1Agb3B0aW9uczpcbiIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzo3MzUKK21zZ2lkICJiYWQgZGhjcC1vcHRpb24iCittc2dzdHIgImRoY3Atb3B0aW9uIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzo3OTIKKyMsIGZ1enp5Cittc2dpZCAiYmFkIElQIGFkZHJlc3MiCittc2dzdHIgIm1lbWJhY2EgJXMgLSAlZCBhbGFtYXQiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjg5MQorbXNnaWQgImJhZCBkb21haW4gaW4gZGhjcC1vcHRpb24iCittc2dzdHIgImRvbWFpbiBkYWxhbSBkaGNwLW9wdGlvbiBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6OTUwCittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgImRoY3Atb3B0aW9uIHRlcmxhbHUgcGFuamFuZyIKKworIzogb3B0aW9uLmM6OTU5Cittc2dpZCAiaWxsZWdhbCBkaGNwLW1hdGNoIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjk5NQorbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQgZmxhZyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDAzCittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBrZXl3b3JkIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjEwODYgdGZ0cC5jOjM1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgInRpZGFrIGJpc2EgbWVtYmFjYSAlczogJXMiCisKKyM6IG9wdGlvbi5jOjExMzEKK21zZ2lkICJvbmx5IG9uZSBkaGNwLWhvc3RzZmlsZSBhbGxvd2VkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjExMzgKK21zZ2lkICJvbmx5IG9uZSBkaGNwLW9wdHNmaWxlIGFsbG93ZWQiCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6MTE4MworbXNnaWQgImJhZCBNWCBwcmVmZXJlbmNlIgorbXNnc3RyICJrZXN1a2FhbiBNWCBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6MTE4OAorbXNnaWQgImJhZCBNWCBuYW1lIgorbXNnc3RyICJuYW1hIE1YIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzoxMjAyCittc2dpZCAiYmFkIE1YIHRhcmdldCIKK21zZ3N0ciAidGFyZ2V0IE1YIHNhbGFoIgorCisjOiBvcHRpb24uYzoxMjEyCittc2dpZCAiY2Fubm90IHJ1biBzY3JpcHRzIHVuZGVyIHVDbGludXgiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTIxNAorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIGxlYXNlLWNoYW5nZSBzY3JpcHRzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjE0NDIgb3B0aW9uLmM6MTQ0NgorbXNnaWQgImJhZCBwb3J0IgorbXNnc3RyICJwb3J0IHNhbGFoIgorCisjOiBvcHRpb24uYzoxNDY1IG9wdGlvbi5jOjE0OTAKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjE2MTEKKyMsIGZ1enp5Cittc2dpZCAiYmFkIHBvcnQgcmFuZ2UiCittc2dzdHIgInBvcnQgc2FsYWgiCisKKyM6IG9wdGlvbi5jOjE2MjgKK21zZ2lkICJiYWQgYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzoxNjY5Cittc2dpZCAiYmFkIGRoY3AtcmFuZ2UiCittc2dzdHIgImRoY3AtcmFuZ2Ugc2FsYWgiCisKKyM6IG9wdGlvbi5jOjE2OTUKK21zZ2lkICJvbmx5IG9uZSBuZXRpZCB0YWcgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzoxNzQwCittc2dpZCAiaW5jb25zaXN0ZW50IERIQ1AgcmFuZ2UiCittc2dzdHIgImphbmdrYXVhbiBESENQIHRpZGFrIGtvbnNpc3RlbiIKKworIyBPSworIzogb3B0aW9uLmM6MTkxMgorIywgZnV6enkKK21zZ2lkICJiYWQgREhDUCBob3N0IG5hbWUiCittc2dzdHIgIm5hbWEgTVggc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjIyMDEgb3B0aW9uLmM6MjQ4MQorbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIm5vbW9yIHBvcnQgdGlkYWsgYmVuYXIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjIyODQKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBhbGlhcyByYW5nZSIKK21zZ3N0ciAid2VpZ2h0IHRpZGFrIGJlbmFyIgorCisjIE9LCisjOiBvcHRpb24uYzoyMjk3CisjLCBmdXp6eQorbXNnaWQgImJhZCBpbnRlcmZhY2UgbmFtZSIKK21zZ3N0ciAibmFtYSBNWCBzYWxhaCIKKworIzogb3B0aW9uLmM6MjMyMgorbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzI3Cittc2dpZCAiZHVwbGljYXRlIENOQU1FIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjIzNDcKKyMsIGZ1enp5Cittc2dpZCAiYmFkIFBUUiByZWNvcmQiCittc2dzdHIgInJla29yZCBTUlYgc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjIzNzgKKyMsIGZ1enp5Cittc2dpZCAiYmFkIE5BUFRSIHJlY29yZCIKK21zZ3N0ciAicmVrb3JkIFNSViBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6MjQwMworbXNnaWQgIlRYVCByZWNvcmQgc3RyaW5nIHRvbyBsb25nIgorbXNnc3RyICJzdHJpbmcgcmVrb3JkIFRYVCB0ZXJsYWx1IHBhbmphbmciCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI0NTEKK21zZ2lkICJiYWQgVFhUIHJlY29yZCIKK21zZ3N0ciAicmVrb3JkIFRYVCBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6MjQ2NworbXNnaWQgImJhZCBTUlYgcmVjb3JkIgorbXNnc3RyICJyZWtvcmQgU1JWIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzoyNDc0Cittc2dpZCAiYmFkIFNSViB0YXJnZXQiCittc2dzdHIgInRhcmdldCBTUlYgc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI0ODgKK21zZ2lkICJpbnZhbGlkIHByaW9yaXR5IgorbXNnc3RyICJwcmlvcml0YXMgdGlkYWsgYmVuYXIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI0OTUKK21zZ2lkICJpbnZhbGlkIHdlaWdodCIKK21zZ3N0ciAid2VpZ2h0IHRpZGFrIGJlbmFyIgorCisjOiBvcHRpb24uYzoyNTE0Cittc2dpZCAidW5zdXBwb3J0ZWQgb3B0aW9uIChjaGVjayB0aGF0IGRuc21hc3Egd2FzIGNvbXBpbGVkIHdpdGggREhDUC9URlRQL0RCdXMgc3VwcG9ydCkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlcyBuZXN0ZWQgdG9vIGRlZXAgaW4gJXMiCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6MjU2NSB0ZnRwLmM6NTEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzOiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW1iYWNhICVzOiAlcyIKKworIyBPSworIzogb3B0aW9uLmM6MjYyNgorbXNnaWQgIm1pc3NpbmcgXCIiCittc2dzdHIgImt1cmFuZyBcIiIKKworIyBPSworIzogb3B0aW9uLmM6MjY3MworbXNnaWQgImJhZCBvcHRpb24iCittc2dzdHIgInBpbGloYW4gc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI2NzUKK21zZ2lkICJleHRyYW5lb3VzIHBhcmFtZXRlciIKK21zZ3N0ciAicGFyYW1ldGVyIGJlcmxlYmloYW4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI2NzcKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciIKK21zZ3N0ciAicGFyYW1ldGVyIGt1cmFuZyIKKworIyBPSworIzogb3B0aW9uLmM6MjY4NQorbXNnaWQgImVycm9yIgorbXNnc3RyICJrZXNhbGFoYW4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYXQgbGluZSAlZCBvZiAlJXMiCittc2dzdHIgIiVzIHBhZGEgYmFyaXMgJWQgZGFyaSAlJXMiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI3NDAgb3B0aW9uLmM6Mjc3MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyIKK21zZ3N0ciAibWVtYmFjYSAlcyIKKworIyBPSworIzogb3B0aW9uLmM6Mjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIkRuc21hc3EgdmVyc2kgJXMgICVzXG4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbXBpbGUgdGltZSBvcHRpb25zICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJQaWxpaGFuLXBpbGloYW4gc2FhdCBrb21waWxhc2kgJXNcbiIKKyJcbiIKKworIyBPSworIzogb3B0aW9uLmM6Mjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiUGVyYW5na2F0IGx1bmFrIGluaSB0ZXJzZWRpYSBUQU5QQSBKQU1JTkFOIFNFRElLSVRQVU4uXG4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdFxuIgorbXNnc3RyICJEbnNkbWFzcSBhZGFsYWggcGVyYW5na2F0IGx1bmFrIGJlYmFzLCBkYW4gQW5kYSBkaXBlcnNpbGFoa2FuIHVudHVrIG1lbWJhZ2lrYW5ueWFcbiIKKworIyBPSworIzogb3B0aW9uLmM6Mjg0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIDMuXG4iCittc2dzdHIgImRlbmdhbiBhdHVyYW4gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpIDIuXG4iCisKKyM6IG9wdGlvbi5jOjI4NTgKK21zZ2lkICJ0cnkgLS1oZWxwIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NjAKK21zZ2lkICJ0cnkgLXciCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6Mjg2MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbW1hbmQgbGluZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAicGlsaWhhbiBiYXJpcyBwZXJpbnRhaCBzYWxhaDogJXMuIgorCisjIE9LCisjOiBvcHRpb24uYzoyOTA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgaG9zdC1uYW1lOiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW5kYXBhdGthbiBob3N0LW5hbWU6ICVzIgorCisjIE9LCisjOiBvcHRpb24uYzoyOTMyCittc2dpZCAib25seSBvbmUgcmVzb2x2LmNvbmYgZmlsZSBhbGxvd2VkIGluIG5vLXBvbGwgbW9kZS4iCittc2dzdHIgImhhbnlhIHNhdHUgZmlsZSByZXNvbHYuY29uZiB5YW5nIGRpcGVyYm9sZWhrYW4gZGFsYW0gbW9kdXMgbm8tcG9sbC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI5NDIKK21zZ2lkICJtdXN0IGhhdmUgZXhhY3RseSBvbmUgcmVzb2x2LmNvbmYgdG8gcmVhZCBkb21haW4gZnJvbS4iCittc2dzdHIgImhhcnVzIG1lbXB1bnlhaSB0ZXBhdCBzYXR1IHJlc29sdi5jb25mIHVudHVrIG1lbmRhcGF0a2FuIG5hbWEgZG9tYWluLiIKKworIyBPSworIzogb3B0aW9uLmM6Mjk0NSBuZXR3b3JrLmM6NzU0IGRoY3AuYzo3MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtYmFjYSAlczogJXMiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2VhcmNoIGRpcmVjdGl2ZSBmb3VuZCBpbiAlcyIKK21zZ3N0ciAidGlkYWsgZGl0ZW11a2FuIGRpcmVrdGlmIHNlYXJjaCBkaSAlcyIKKworIzogb3B0aW9uLmM6Mjk4MworbXNnaWQgInRoZXJlIG11c3QgYmUgYSBkZWZhdWx0IGRvbWFpbiB3aGVuIC0tZGhjcC1mcWRuIGlzIHNldCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTg3Cittc2dpZCAic3ludGF4IGNoZWNrIE9LIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGZvcndhcmQuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICJuYW1lc2VydmVyICVzIG1lbm9sYWsgbWVsYWt1a2FuIHJlc29sdXNpIHJla3Vyc2lmIgorCisjOiBmb3J3YXJkLmM6NDM3Cittc2dpZCAicG9zc2libGUgRE5TLXJlYmluZCBhdHRhY2sgZGV0ZWN0ZWQiCittc2dzdHIgIiIKKworIyBPSworIzogbmV0d29yay5jOjczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICJhbnRhcm11a2EgdGlkYWsgZGlrZW5hbCAlcyIKKworIyBPSworIzogbmV0d29yay5jOjQxNyBkbnNtYXNxLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldDogJXMiCittc2dzdHIgImdhZ2FsIG1lbWJ1YXQgc29ja2V0OiAlcyAiCisKKyMgT0sKKyM6IG5ldHdvcmsuYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBJUFY2IG9wdGlvbnMgb24gbGlzdGVuaW5nIHNvY2tldDogJXMiCittc2dzdHIgImdhZ2FsIG1lbnlldGVsIElQVjYgcGFkYSBzb2NrZXQ6ICVzIgorCisjOiBuZXR3b3JrLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIGxpc3RlbmluZyBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtLWJpbmQgc29ja2V0IHVudHVrIG1lbmRlbmdhcmthbiAlczogJXMiCisKKyMgT0sKKyM6IG5ldHdvcmsuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxpc3RlbiBvbiBzb2NrZXQ6ICVzIgorbXNnc3RyICJnYWdhbCBtZW5kZW5nYXJrYW4gZGkgc29ja2V0OiAlcyIKKworIyBPSworIzogbmV0d29yay5jOjQ2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBURlRQIHNvY2tldDogJXMiCittc2dzdHIgImdhZ2FsIG1lbWJ1YXQgc29ja2V0OiAlcyAiCisKKyM6IG5ldHdvcmsuYzo2NjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIHNlcnZlciBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtLWJpbmQgc29ja2V0IHVudHVrIG1lbmRlbmdhcmthbiAlczogJXMiCisKKyMgT0sKKyM6IG5ldHdvcmsuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGxvY2FsIGludGVyZmFjZSIKK21zZ3N0ciAibWVuZ2FiYWlrYW4gbmFtZXNlcnZlciAlcyAtIGFudGFybXVrYSBsb2thbCIKKworIyBPSworIzogbmV0d29yay5jOjcwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAibWVuZ2FiYWlrYW4gbmFtZXNlcnZlciAlcyAtIHRhayBkYXBhdCBtZW1idWF0L21lbS1iaW5kIHNvY2tldDogJXMiCisKKyMgT0sKKyM6IG5ldHdvcmsuYzo3MjAKK21zZ2lkICJ1bnF1YWxpZmllZCIKK21zZ3N0ciAidGlkYWsgbWVtZW51aGkgc3lhcmF0IgorCisjOiBuZXR3b3JrLmM6NzIwCittc2dpZCAibmFtZXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcyMgorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIiIKKworIyBPSworIzogbmV0d29yay5jOjcyNAorbXNnaWQgImRvbWFpbiIKK21zZ3N0ciAiZG9tYWluIgorCisjIE9LCisjOiBuZXR3b3JrLmM6NzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAibWVuZ2d1bmFrYW4gYWxhbWF0IGxva2FsIHNhamEgdW50dWsgJXMgJXMiCisKKyMgT0sKKyM6IG5ldHdvcmsuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCBmb3IgJXMgJXMiCittc2dzdHIgIm1lbmdndW5ha2FuIG5hbWVzZXJ2ZXIgJXMjJWQgdW50dWsgJXMgJXMiCisKKyMgT0sKKyM6IG5ldHdvcmsuYzo3MzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQodmlhICVzKSIKK21zZ3N0ciAibWVuZ2d1bmFrYW4gbmFtZXNlcnZlciAlcyMlZCIKKworIyBPSworIzogbmV0d29yay5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIgorbXNnc3RyICJtZW5nZ3VuYWthbiBuYW1lc2VydmVyICVzIyVkIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTQ2CisjLCBmdXp6eQorbXNnaWQgIlRGVFAgc2VydmVyIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX1RGVFAgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIHRpZGFrIHRlcnNlZGlhOiBzZXRlbCBIQVZFX0RCVVMgZGFsYW0gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MTUxCittc2dpZCAiYXN5Y2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIFNvbGFyaXMiCittc2dzdHIgIiIKKworIyBPSworIzogZG5zbWFzcS5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBsaXN0IG9mIGludGVyZmFjZXM6ICVzIgorbXNnc3RyICJnYWdhbCBtZW5kYXBhdGthbiBkYWZ0YXIgYW50YXJtdWthOiAlcyIKKworIyBPSworIzogZG5zbWFzcS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiYW50YXJtdWthIHRpZGFrIGRpa2VuYWwgJXMiCisKKyMgT0sKKyM6IGRuc21hc3EuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gaW50ZXJmYWNlIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAidGlkYWsgYWRhIGFudGFybXVrYSBkZW5nYW4gYWxhbWF0ICVzIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MjAxIGRuc21hc3EuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiREJ1cyBlcnJvcjogJXMiCittc2dzdHIgIkRCdXMgZXJyb3I6ICVzIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MjA0Cittc2dpZCAiREJ1cyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9EQlVTIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyB0aWRhayB0ZXJzZWRpYTogc2V0ZWwgSEFWRV9EQlVTIGRhbGFtIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHVzZXIgb3IgZ3JvdXA6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiCittc2dzdHIgIiIKKworIyBPSworIzogZG5zbWFzcS5jOjQ0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiCittc2dzdHIgImRpbXVsYWksIGNhY2hlIHZlcnNpICVzIGRpIGRpc2FibGUiCisKKyMgT0sKKyM6IGRuc21hc3EuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBjYWNoZXNpemUgJWQiCittc2dzdHIgImRpbXVsYWksIHZlcnNpICVzIHVrdXJhbiBjYWNoZSAlZCIKKworIyBPSworIzogZG5zbWFzcS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJkaW11bGFpLCBjYWNoZSB2ZXJzaSAlcyBkaSBkaXNhYmxlIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBpbGUgdGltZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAicGlsaWhhbi1waWxpaGFuIHNhYXQga29tcGlsYXNpOiAlcyIKKworIyBPSworIzogZG5zbWFzcS5jOjQ2MAorbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBjb25uZWN0ZWQgdG8gc3lzdGVtIGJ1cyIKK21zZ3N0ciAiZHVrdW5nYW4gREJ1cyBkaW11bmdraW5rYW46IHRlcmtvbmVrc2kgcGFkYSBidXMgc2lzdGVtIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NDYyCittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGJ1cyBjb25uZWN0aW9uIHBlbmRpbmciCittc2dzdHIgImR1a3VuZ2FuIERCdXMgZGltdW5na2lua2FuOiBrb25la3NpIGJ1cyBkaXR1bmRhIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NDY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBmYWlsZWQgdG8gY2hhbmdlIG93bmVyIG9mICVzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtdWF0IG5hbWEtbmFtYSBkYXJpICVzOiAlcyIKKworIyBPSworIzogZG5zbWFzcS5jOjQ3MQorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgInNldGVsYW4gb3BzaSAtLWJpbmQtaW50ZXJmYWNlcyBkaXNlYmFia2FuIGtldGVyYmF0YXNhbiBPUyIKKworIyBPSworIzogZG5zbWFzcS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBpbnRlcmZhY2UgJXMgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0IgorbXNnc3RyICJwZXJpbmdhdGFuOiBhbnRhcm11a2EgJXMgdGlkYWsgYWRhIgorCisjOiBkbnNtYXNxLmM6NDgxCittc2dpZCAid2FybmluZzogaWdub3JpbmcgcmVzb2x2LWZpbGUgZmxhZyBiZWNhdXNlIG5vLXJlc29sdiBpcyBzZXQiCittc2dzdHIgIiIKKworIyBPSworIzogZG5zbWFzcS5jOjQ4NAorIywgZnV6enkKK21zZ2lkICJ3YXJuaW5nOiBubyB1cHN0cmVhbSBzZXJ2ZXJzIGNvbmZpZ3VyZWQiCittc2dzdHIgIm1lbnlldGVsIHNlcnZlci1zZXJ2ZXIgZGkgYXRhcyBkZW5nYW4gREJ1cyIKKworIzogZG5zbWFzcS5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBlbmFibGVkLCBxdWV1ZSBsaW1pdCBpcyAlZCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMsIGxlYXNlIHRpbWUgJXMiCittc2dzdHIgIkRIQ1AsIGxlYXNlIHN0YXRpYyBwYWRhICUuMHMlcywgd2FrdHUgbGVhc2UgJXMiCisKKyM6IGRuc21hc3EuYzo1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgcHJveHkgb24gc3VibmV0ICUuMHMlcyUuMHMiCittc2dzdHIgIiIKKworIyBPSworIzogZG5zbWFzcS5jOjUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBJUCByYW5nZSAlcyAtLSAlcywgbGVhc2UgdGltZSAlcyIKK21zZ3N0ciAiREhDUCwgamFuZ2thdW4gSVAgJXMgLS0gJXMsIHdha3R1IGxlYXNlICVzIgorCisjOiBkbnNtYXNxLmM6NTE5Cittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgIiIKKworIyBPSworIzogZG5zbWFzcS5jOjUxOQorIywgZnV6enkKK21zZ2lkICJlbmFibGVkIgorbXNnc3RyICJkaSBkaXNhYmxlIgorCisjOiBkbnNtYXNxLmM6NTIxCittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICJyZXN0cmljdGluZyBtYXhpbXVtIHNpbXVsdGFuZW91cyBURlRQIHRyYW5zZmVycyB0byAlZCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NjY3Cittc2dpZCAiY29ubmVjdGVkIHRvIHN5c3RlbSBEQnVzIgorbXNnc3RyICJ0ZXJodWJ1bmcga2Ugc2lzdGVtIERCdXMiCisKKyM6IGRuc21hc3EuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgaW50byBiYWNrZ3JvdW5kOiAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NzYwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGhlbHBlcjogJXMiCittc2dzdHIgImdhZ2FsIG1lbWJhY2EgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInNldHRpbmcgY2FwYWJpbGl0aWVzIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIyBPSworIzogZG5zbWFzcS5jOjc2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSB1c2VyLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtdWF0IG5hbWEtbmFtYSBkYXJpICVzOiAlcyIKKworIyBPSworIzogZG5zbWFzcS5jOjc3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbXVhdCBuYW1hLW5hbWEgZGFyaSAlczogJXMiCisKKyMgT0sKKyM6IGRuc21hc3EuYzo3NzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBpZGZpbGUgJXM6ICVzIgorbXNnc3RyICJnYWdhbCBtZW1iYWNhICVzOiAlcyIKKworIyBPSworIzogZG5zbWFzcS5jOjc3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJ0aWRhayBiaXNhIG1lbWJ1a2EgJXM6JXMiCisKKyM6IGRuc21hc3EuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hpbGQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hpbGQgcHJvY2VzcyBleGl0ZWQgd2l0aCBzdGF0dXMgJWQiCittc2dzdHIgIiIKKworIyBPSworIzogZG5zbWFzcS5jOjg0MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWN1dGUgJXM6ICVzIgorbXNnc3RyICJnYWdhbCBtZW5nYWtzZXMgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6ODg1Cittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgImtlbHVhciBrYXJlbmEgbWVuZXJpbWEgU0lHVEVSTSIKKworIyBPSworIzogZG5zbWFzcS5jOjkwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyAlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbmdha3NlcyAlczogJXMiCisKKyMgT0sKKyM6IGRuc21hc3EuYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyAlcyIKK21zZ3N0ciAibWVtYmFjYSAlcyIKKworIyBPSworIzogZG5zbWFzcS5jOjkzNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gc2VydmVycyBmb3VuZCBpbiAlcywgd2lsbCByZXRyeSIKK21zZ3N0ciAidGlkYWsgZGl0ZW11a2FuIGRpcmVrdGlmIHNlYXJjaCBkaSAlcyIKKworIyBPSworIzogZGhjcC5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJ0aWRhayBiaXNhIG1lbWJ1YXQgc29ja2V0IERIQ1A6ICVzIgorCisjIE9LCisjOiBkaGNwLmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBvcHRpb25zIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVueWV0ZWwgb3BzaSBwYWRhIHNvY2tldCBESENQOiAlcyIKKworIyBPSworIzogZGhjcC5jOjY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJnYWdhbCBtZW55ZXRlbCBTT19SRVVTRUFERFIgcGFkYSBzb2NrZXQgREhDUDogJXMiCisKKyMgT0sKKyM6IGRoY3AuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQIHNlcnZlciBzb2NrZXQ6ICVzIgorbXNnc3RyICJnYWdhbCBtZW0tYmluZCBzb2NrZXQgc2VydmVyIERIQ1A6ICVzIgorCisjIE9LCisjOiBkaGNwLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QIHJhdyBzb2NrZXQ6ICVzLiIKK21zZ3N0ciAidGlkYWsgZGFwYXQgbWVtYnVhdCBzb2NrZXQgSUNNUCByYXc6ICVzIgorCisjOiBkaGNwLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcGFja2V0IHJlY2VpdmVkIG9uICVzIHdoaWNoIGhhcyBubyBhZGRyZXNzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRoY3AuYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByYW5nZSAlcyAtLSAlcyBpcyBub3QgY29uc2lzdGVudCB3aXRoIG5ldG1hc2sgJXMiCittc2dzdHIgImphbmdrYXVhbiBESENQICVzIC0tICVzIHRpZGFrIGtvbnNpc3RlbiBkZW5nYW4gbmV0bWFzayAlcyIKKworIyBPSworIzogZGhjcC5jOjc3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGxpbmUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAia2VzYWxhaGFuIG5hbWEgcGFkYSAlcyBiYXJpcyAlZCIKKworIzogZGhjcC5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRoY3AuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlLiIKK21zZ3N0ciAiYWxhbWF0IElQIGtlbWJhciAlcyBkYWxhbSBkaXJla3RpZiBkaGNwLWNvbmZpZyIKKworIyBPSworIzogZGhjcC5jOjkwMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gJXMuIgorbXNnc3RyICJhbGFtYXQgSVAga2VtYmFyICVzIGRhbGFtIGRpcmVrdGlmIGRoY3AtY29uZmlnIgorCisjOiBkaGNwLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtb3JlIHRoYW4gb25lIGFkZHJlc3MgaW4gaG9zdHNmaWxlLCB1c2luZyAlcyBmb3IgREhDUCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkaGNwLmM6OTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzICglcykgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlIgorbXNnc3RyICJhbGFtYXQgSVAga2VtYmFyICVzICglcykgZGFsYW0gZGlyZWt0aWYgZGhjcC1jb25maWciCisKKyMgT0sKKyM6IGxlYXNlLmM6NjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIG9yIGNyZWF0ZSBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAidGlkYWsgZGFwYXQgbWVtYnVrYSBhdGF1IG1lbWJ1YXQgZmlsZSBsZWFzZTogJXMiCisKKyMgT0sKKyM6IGxlYXNlLmM6OTIKK21zZ2lkICJ0b28gbWFueSBzdG9yZWQgbGVhc2VzIgorbXNnc3RyICJ0ZXJsYWx1IGJhbnlhayBsZWFzZSB5YW5nIGRpc2ltcGFuIgorCisjIE9LCisjOiBsZWFzZS5jOjEyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJ1biBsZWFzZS1pbml0IHNjcmlwdCAlczogJXMiCittc2dzdHIgInRpZGFrIGJpc2EgbWVtYmFjYSAlczogJXMiCisKKyM6IGxlYXNlLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBsZWFzZS5jOjIzNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlICVzOiAlcyAocmV0cnkgaW4gJXVzKSIKK21zZ3N0ciAiZ2FnYWwgbWVtYmFjYSAlczogJXMiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1AgcmVxdWVzdCAlcyAlcyIKK21zZ3N0ciAidGlkYWsgYWRhIGFsYW1hdCB5YW5nIGJpc2EgZGlwYWthaSB1bnR1ayBwZXJtaW50YWFuIERIQ1AgJXMgJXMiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzozMzcKK21zZ2lkICJ3aXRoIHN1Ym5ldCBzZWxlY3RvciIKK21zZ3N0ciAiZGVuZ2FuIHBlbWlsaWggc3VibmV0IgorCisjIE9LCisjOiByZmMyMTMxLmM6MzM3Cittc2dpZCAidmlhIgorbXNnc3RyICJsZXdhdCIKKworIzogcmZjMjEzMS5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBBdmFpbGFibGUgREhDUCBzdWJuZXQ6ICVzLyVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgQXZhaWxhYmxlIERIQ1AgcmFuZ2U6ICVzIC0tICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzozODQKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAiZGkgZGlzYWJsZSIKKworIyBPSworIzogcmZjMjEzMS5jOjQxOCByZmMyMTMxLmM6ODgzIHJmYzIxMzEuYzoxMjQyCittc2dpZCAiaWdub3JlZCIKK21zZ3N0ciAiZGlhYmFpa2FuIgorCisjIE9LCisjOiByZmMyMTMxLmM6NDMzIHJmYzIxMzEuYzoxMTAwCittc2dpZCAiYWRkcmVzcyBpbiB1c2UiCittc2dzdHIgImFsYW1hdCB0ZWxhaCBkaWd1bmFrYW4iCisKKyMgT0sKKyM6IHJmYzIxMzEuYzo0NDcgcmZjMjEzMS5jOjkzNworbXNnaWQgIm5vIGFkZHJlc3MgYXZhaWxhYmxlIgorbXNnc3RyICJ0YWsgYWRhIGFsYW1hdCB5YW5nIHRlcnNlZGlhIgorCisjIE9LCisjOiByZmMyMTMxLmM6NDU0IHJmYzIxMzEuYzoxMDYzCittc2dpZCAid3JvbmcgbmV0d29yayIKK21zZ3N0ciAiamFyaW5nYW4geWFuZyBzYWxhaCIKKworIyBPSworIzogcmZjMjEzMS5jOjQ2NworbXNnaWQgIm5vIGFkZHJlc3MgY29uZmlndXJlZCIKK21zZ3N0ciAidGFrIGFkYSBhbGFtYXQgeWFuZyBkaXNldGVsIgorCisjIE9LCisjOiByZmMyMTMxLmM6NDczIHJmYzIxMzEuYzoxMTEzCittc2dpZCAibm8gbGVhc2VzIGxlZnQiCittc2dzdHIgInRhayBhZGEgbGVhc2UgeWFuZyB0ZXJzaXNhIgorCisjOiByZmMyMTMxLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBwcm92aWRlcyBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IFZlbmRvciBjbGFzczogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBVc2VyIGNsYXNzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NzM3Cittc2dpZCAiUFhFIEJJUyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzo4NTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIKK21zZ3N0ciAibWVuLWRpc2FibGUgYWxhbWF0IHN0YXRpayBESENQICVzIgorCisjIE9LCisjOiByZmMyMTMxLmM6ODc0Cittc2dpZCAidW5rbm93biBsZWFzZSIKK21zZ3N0ciAibGVhc2UgdGlkYWsgZGlrZXRhaHVpIgorCisjOiByZmMyMTMxLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgd2FzIHByZXZpb3VzbHkgZGVjbGluZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjkzNSByZmMyMTMxLmM6MTEwNgorbXNnaWQgIm5vIHVuaXF1ZS1pZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAwMworbXNnaWQgIndyb25nIHNlcnZlci1JRCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiByZmMyMTMxLmM6MTAyMgorbXNnaWQgIndyb25nIGFkZHJlc3MiCittc2dzdHIgImFsYW1hdCBzYWxhaCIKKworIyBPSworIzogcmZjMjEzMS5jOjEwMzkKK21zZ2lkICJsZWFzZSBub3QgZm91bmQiCittc2dzdHIgImxlYXNlIHRhayBkaXRlbXVrYW4iCisKKyMgT0sKKyM6IHJmYzIxMzEuYzoxMDcxCittc2dpZCAiYWRkcmVzcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJhbGFtYXQgdGFrIHRlcnNlZGlhIgorCisjIE9LCisjOiByZmMyMTMxLmM6MTA4MgorbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgImxlYXNlIHN0YXRpayB0YWsgdGVyc2VkaWEiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzoxMDg2Cittc2dpZCAiYWRkcmVzcyByZXNlcnZlZCIKK21zZ3N0ciAiYWxhbWF0IHRlbGFoIGRpcGVzYW4iCisKKyM6IHJmYzIxMzEuYzoxMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdGFnczogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIyBPSworIzogcmZjMjEzMS5jOjE2MDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHNlcnZlciBuYW1lOiAlcyIKK21zZ3N0ciAiREJ1cyBlcnJvcjogJXMiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzoxNjEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBuZXh0IHNlcnZlcjogJXMiCittc2dzdHIgIkRCdXMgZXJyb3I6ICVzIgorCisjOiByZmMyMTMxLmM6MTY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBESENQL0JPT1RQIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiBwYWNrZXQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE5MTkKK21zZ2lkICJQWEUgbWVudSB0b28gbGFyZ2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjIwMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZG9tYWluICVzIGZvciBESENQIGhvc3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiByZmMyMTMxLmM6MjA1MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVxdWVzdGVkIG9wdGlvbnM6ICVzIgorbXNnc3RyICJwaWxpaGFuLXBpbGloYW4gc2FhdCBrb21waWxhc2k6ICVzIgorCisjIE9LCisjOiBuZXRsaW5rLmM6NjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgbmV0bGluayBzb2NrZXQ6ICVzIgorbXNnc3RyICJ0aWRhayBiaXNhIG1lbS1iaW5kIG5ldGxpbmsgc29ja2V0OiAlcyIKKworIyBPSworIzogbmV0bGluay5jOjI2NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibmV0bGluayByZXR1cm5zIGVycm9yOiAlcyIKK21zZ3N0ciAiREJ1cyBlcnJvcjogJXMiCisKKyMgT0sKKyM6IGRidXMuYzoxNTAKK21zZ2lkICJhdHRlbXB0IHRvIHNldCBhbiBJUHY2IHNlcnZlciBhZGRyZXNzIHZpYSBEQnVzIC0gbm8gSVB2NiBzdXBwb3J0IgorbXNnc3RyICJtZW5jb2JhIG1lbnlldGVsIHNlYnVhaCBhbGFtYXQgSVB2NiBzZXJ2ZXIgbGV3YXQgREJ1cyAtIHRpZGFrIGFkYSBkdWt1bmdhbiB1bnR1ayBJUHY2IgorCisjIE9LCisjOiBkYnVzLmM6Mjg2Cittc2dpZCAic2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20gREJ1cyIKK21zZ3N0ciAibWVueWV0ZWwgc2VydmVyLXNlcnZlciBkaSBhdGFzIGRlbmdhbiBEQnVzIgorCisjIE9LCisjOiBkYnVzLmM6MzI0Cittc2dpZCAiY291bGQgbm90IHJlZ2lzdGVyIGEgREJ1cyBtZXNzYWdlIGhhbmRsZXIiCittc2dzdHIgInRpZGFrIGJpc2EgbWVuZGFmdGFyIHNlYnVhaCBEQnVzIG1lc3NhZ2UgaGFuZGxlciIKKworIyBPSworIzogYnBmLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBCUEYgc29ja2V0OiAlcyIKK21zZ3N0ciAidGlkYWsgZGFwYXQgbWVtYnVhdCBzb2NrZXQgREhDUCBCUEY6ICVzIgorCisjIE9LCisjOiBicGYuYzoxNzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVxdWVzdCBmb3IgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgdHlwZSAoJWQpIHJlY2VpdmVkIG9uICVzIgorbXNnc3RyICJwZXJtaW50YWFuIERIQ1AgdW50dWsgdGlwZSBoYXJkd2FyZSB5YW5nIHRpZGFrIGRpZHVrdW5nICglZCkgZGl0ZXJpbWEgcGFkYSAlcyIKKworIzogdGZ0cC5jOjE3OQorbXNnaWQgInVuYWJsZSB0byBnZXQgZnJlZSBwb3J0IGZvciBURlRQIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBzZW50ICVzIHRvICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHRmdHAuYzozMDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgbm90IGZvdW5kIgorbXNnc3RyICJsZWFzZSB0YWsgZGl0ZW11a2FuIgorCisjOiB0ZnRwLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgZXJyb3IgJWQgJXMgcmVjZWl2ZWQgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiB0ZnRwLmM6NDQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJURlRQIGZhaWxlZCBzZW5kaW5nICVzIHRvICVzIgorbXNnc3RyICJnYWdhbCBtZW1iYWNhICVzOiAlcyIKKworIzogbG9nLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJmbG93OiAlZCBsb2cgZW50cmllcyBsb3N0IgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBsb2cuYzo0MTUKK21zZ2lkICJGQUlMRUQgdG8gc3RhcnQgdXAiCittc2dzdHIgIkdBR0FMIHVudHVrIG1lbXVsYWkiCisKKyMgT0sKKyN+IG1zZ2lkICJtdXN0IHNldCBleGFjdGx5IG9uZSBpbnRlcmZhY2Ugb24gYnJva2VuIHN5c3RlbXMgd2l0aG91dCBJUF9SRUNWSUYiCisjfiBtc2dzdHIgImhhcnVzIG1lbnlldGVsIHNhdHUgYW50YXJtdWthIHNhamEgcGFkYSBzaXN0ZW0geWFuZyB0aWRhayBiZW5hciBkZW5nYW4gSVBfUkVDVklGIgorCisjIE9LCisjLCBmdXp6eQorI34gbXNnaWQgImZhaWxlZCB0byBsb2FkICVzOiAlcyIKKyN+IG1zZ3N0ciAiZ2FnYWwgbWVtdWF0ICVTOiAlcyIKKworIyBPSworI34gbXNnaWQgImJhZCBuYW1lIGluICVzIgorI34gbXNnc3RyICJrZXNhbGFoYW4gbmFtYSBkaSAlcyIKKworIyBPSworI34gbXNnaWQgIklnbm9yaW5nIERIQ1AgbGVhc2UgZm9yICVzIGJlY2F1c2UgaXQgaGFzIGFuIGlsbGVnYWwgZG9tYWluIHBhcnQiCisjfiBtc2dzdHIgIk1lbmdhYmFpa2FuIGxlYXNlIERIQ1AgdW50dWsgJXMgc2ViYWIgdGVyZGFwYXQgYmFnaWFuIGRvbWFpbiB5YW5nIHRpZGFrIHNhaCIKKworIyBPSworI34gbXNnaWQgIklTQyBkaGNwZCBpbnRlZ3JhdGlvbiBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9JU0NfUkVBREVSIGluIHNyYy9jb25maWcuaCIKKyN+IG1zZ3N0ciAiSW50ZWdyYXNpIGRlbmdhbiBkaGNwZCBJU0MgdGlkYWsgdGVyc2VkaWE6IGF0dXIgSEFWRV9JU0NfUkVBREVSIGRhbGFtIHNyYy9jb25maWcuaCIKKworIyBPSworIywgZnV6enkKKyN+IG1zZ2lkICJpbGxlZ2FsIGRvbWFpbiAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorI34gbXNnc3RyICJhbGFtYXQgSVAga2VtYmFyICVzIGRhbGFtIGRpcmVrdGlmIGRoY3AtY29uZmlnIgorCisjIE9LCisjfiBtc2dpZCAicnVubmluZyBhcyByb290IgorI34gbXNnc3RyICJiZXJqYWxhbiBtZW5nZ3VuYWthbiByb290IgorCisjIE9LCisjLCBmdXp6eQorI34gbXNnaWQgInJlYWQgJXMgLSAlZCBob3N0cyIKKyN+IG1zZ3N0ciAibWVtYmFjYSAlcyAtICVkIGFsYW1hdCIKKworIyBPSworI34gbXNnaWQgImJhZCBkaGNwLWhvc3QiCisjfiBtc2dzdHIgImRoY3AtaG9zdCBzYWxhaCIKKworIyBPSworI34gbXNnaWQgImRvbWFpbnMiCisjfiBtc2dzdHIgImRvbWFpbi1kb21haW4iCisKKyMgT0sKKyN+IG1zZ2lkICJJZ25vcmluZyBESENQIGhvc3QgbmFtZSAlcyBiZWNhdXNlIGl0IGhhcyBhbiBpbGxlZ2FsIGRvbWFpbiBwYXJ0IgorI34gbXNnc3RyICJNZW5nYWJhaWthbiBuYW1hIGhvc3QgREhDUCAlcyBzZWJhYiBtZW1pbGlraSBiYWdpYW4gZG9tYWluIHlhbmcgdGlkYWsgc2FoIgorCisjIE9LCisjfiBtc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIgorI34gbXNnc3RyICJNZW5hbXBpbGthbiBwZXNhbiBpbmkuIgorCisjIE9LCisjfiBtc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVtIgorI34gbXNnc3RyICJnYWdhbCBtZW1iYWNhICVzOiAlbSIKKworIyBPSworI34gbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiVtIgorI34gbXNnc3RyICJnYWdhbCBtZW1iYWNhICVzOiVtIgorCisjIE9LCisjfiBtc2dpZCAiTW9yZSB0aGFuIG9uZSB2ZW5kb3IgY2xhc3MgbWF0Y2hlcywgdXNpbmcgJXMiCisjfiBtc2dzdHIgIkxlYmloIGRhcmkgc2F0dSBrZWxhcyB2ZW5kb3IgeWFuZyBzZXN1YWksIG1lbmdndW5ha2FuICVzIgorCisjIE9LCisjfiBtc2dpZCAiZm9yd2FyZGluZyB0YWJsZSBvdmVyZmxvdzogY2hlY2sgZm9yIHNlcnZlciBsb29wcy4iCisjfiBtc2dzdHIgIm1lbmVydXNrYW4gdGFiZWwgb3ZlcmZsb3c6IG1lbWVyaWtzYSBhcGFrYWggdGVyamFkaSBsb29wIHNlcnZlci4iCisKKyMgT0sKKyN+IG1zZ2lkICJuZXN0ZWQgaW5jbHVkZXMgbm90IGFsbG93ZWQiCisjfiBtc2dzdHIgImluY2x1ZGVzIGJlcnNhcmFuZyB0aWRhayBkaWlqaW5rYW4iCisKKyMgT0sKKyN+IG1zZ2lkICJESENQLCAlcyB3aWxsIGJlIHdyaXR0ZW4gZXZlcnkgJXMiCisjfiBtc2dzdHIgIkRIQ1AsICVzIGFrYW4gZGl0dWxpcyBzZXRpYXAgJXMiCisKKyMgT0sKKyN+IG1zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1AgcGFja2V0IHNvY2tldDogJXMuIElzIENPTkZJR19QQUNLRVQgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbD8iCisjfiBtc2dzdHIgInRpZGFrIGRhcGF0IG1lbWJ1YXQgc29ja2V0IHBhY2tldCBESENQOiAlcy4gQXBha2FoIENPTkZJR19QQUNLRVQgZGltdW5na2lua2FuIHBhZGEga2VybmVsPyIKZGlmZiAtLWdpdCBhL3BvL2l0LnBvIGIvcG8vaXQucG8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzdhOGM0YgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2l0LnBvCkBAIC0wLDAgKzEsMTQxMSBAQAorIyBJdGFsaWFuIHRyYW5zbGF0aW9ucyBmb3IgZG5zbWFzcSBwYWNrYWdlLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiwgMjAwNi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGRuc21hc3EgMi4zMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNi0xOCAxMjoyNCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNi0wNS0yMiAxMTowOSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPlxuIgorIkxhbmd1YWdlLVRlYW06IEl0YWxpYW4gPHRwQGxpc3RzLmxpbnV4Lml0PlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUFTQ0lJXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBjYWNoZS5jOjc2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjc5OCBkaGNwLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzo4NTYgZGhjcC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbmFtZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6ODYzIGRoY3AuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyAtICVkIGFkZHJlc3NlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjkwMgorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzo5MzMgb3B0aW9uLmM6MTA1NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIGRpcmVjdG9yeSAlczogJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMTI5CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgJWx1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYWNoZSBzaXplICVkLCAlZC8lZCBjYWNoZSBpbnNlcnRpb25zIHJlLXVzZWQgdW5leHBpcmVkIGNhY2hlIGVudHJpZXMuIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvcndhcmRlZCAldSwgcXVlcmllcyBhbnN3ZXJlZCBsb2NhbGx5ICV1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogJXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjE5MQorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjIyOSBvcHRpb24uYzo1NDgKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZpbml0ZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMjgKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjI5Cittc2dpZCAiUmV0dXJuIGlwYWRkciBmb3IgYWxsIGhvc3RzIGluIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzAKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzEKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgaW4gZW50cmllcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjM0Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZDogcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzNQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjM2Cittc2dpZCAiUmV0dXJuIHNlbGYtcG9pbnRpbmcgTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzNworbXNnaWQgIkV4cGFuZCBzaW1wbGUgbmFtZXMgaW4gL2V0Yy9ob3N0cyB3aXRoIGRvbWFpbi1zdWZmaXguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzOAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjM5Cittc2dpZCAiRW5hYmxlIERIQ1AgaW4gdGhlIHJhbmdlIGdpdmVuIHdpdGggbGVhc2UgZHVyYXRpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyBncm91cCBhZnRlciBzdGFydHVwIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0MQorbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDIKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQzCittc2dpZCAiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBsb2FkICVzIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDYKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0NworbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIE5PVCB0byBsaXN0ZW4gb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0OAorbXNnaWQgIk1hcCBESENQIHVzZXIgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDkKK21zZ2lkICJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjUwCittc2dpZCAiTWFwIFJGQzMwNDYgcmVtb3RlLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjUxCittc2dpZCAiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1MgorbXNnaWQgIkRvbid0IGRvIERIQ1AgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjUzCittc2dpZCAiRm9yY2UgYnJvYWRjYXN0IHJlcGxpZXMgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU0Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZCwgZG8gTk9UIHJ1biBpbiBkZWJ1ZyBtb2RlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTUKK21zZ2lkICJBc3N1bWUgd2UgYXJlIHRoZSBvbmx5IERIQ1Agc2VydmVyIG9uIHRoZSBsb2NhbCBuZXR3b3JrLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB3aGVyZSB0byBzdG9yZSBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTcKK21zZ2lkICJSZXR1cm4gTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1OAorbXNnaWQgIlNwZWNpZnkgYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTkKK21zZ2lkICJTcGVjaWZ5IEJPT1RQIG9wdGlvbnMgdG8gREhDUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgcG9sbCAlcyBmaWxlLCByZWxvYWQgb25seSBvbiBTSUdIVVAuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2MQorbXNnaWQgIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgbmFtZXNlcnZlcnMgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIGdpdmVuIGluICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjMKK21zZ2lkICJTcGVjaWZ5IG9wdGlvbnMgdG8gYmUgc2VudCB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NAorbXNnaWQgIkRIQ1Agb3B0aW9uIHNlbnQgZXZlbiBpZiB0aGUgY2xpZW50IGRvZXMgbm90IHJlcXVlc3QgaXQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NQorbXNnaWQgIlNwZWNpZnkgcG9ydCB0byBsaXN0ZW4gZm9yIEROUyByZXF1ZXN0cyBvbiAoZGVmYXVsdHMgdG8gNTMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBzdXBwb3J0ZWQgVURQIHBhY2tldCBzaXplIGZvciBFRE5TLjAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY3Cittc2dpZCAiTG9nIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjgKK21zZ2lkICJGb3JjZSB0aGUgb3JpZ2luYXRpbmcgcG9ydCBmb3IgdXBzdHJlYW0gRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2OQorbXNnaWQgIkRvIE5PVCByZWFkIHJlc29sdi5jb25mLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIHJlc29sdi5jb25mIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3MQorbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyhlcykgb2YgdXBzdHJlYW0gc2VydmVycyB3aXRoIG9wdGlvbmFsIGRvbWFpbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3MgorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjczCittc2dpZCAiU3BlY2lmeSB0aGUgZG9tYWluIHRvIGJlIGFzc2lnbmVkIGluIERIQ1AgbGVhc2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzQKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc1Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgcmVwbGllcyBmcm9tIC9ldGMvaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3NgorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyB1c2VyIGFmdGVyIHN0YXJ0dXAuIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3OAorbXNnaWQgIk1hcCBESENQIHZlbmRvciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3OQorbXNnaWQgIkRpc3BsYXkgZG5zbWFzcSB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4MAorbXNnaWQgIlRyYW5zbGF0ZSBJUHY0IGFkZHJlc3NlcyBmcm9tIHVwc3RyZWFtIHNlcnZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4MQorbXNnaWQgIlNwZWNpZnkgYSBTUlYgcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODIKK21zZ2lkICJEaXNwbGF5IHRoaXMgbWVzc2FnZS4gVXNlIC0taGVscCBkaGNwIGZvciBrbm93biBESENQIG9wdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4MworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg1Cittc2dpZCAiQW5zd2VyIEROUyBxdWVyaWVzIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgYSBxdWVyeSB3YXMgc2VudCB0by4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg2Cittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg3Cittc2dpZCAiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg4Cittc2dpZCAiR2l2ZSBETlMgbmFtZSB0byBJUHY0IGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODkKK21zZ2lkICJCaW5kIG9ubHkgdG8gaW50ZXJmYWNlcyBpbiB1c2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkxCittc2dpZCAiRW5hYmxlIHRoZSBEQnVzIGludGVyZmFjZSBmb3Igc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzLCBldGMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MgorbXNnaWQgIkRvIG5vdCBwcm92aWRlIERIQ1Agb24gdGhpcyBpbnRlcmZhY2UsIG9ubHkgcHJvdmlkZSBETlMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MworbXNnaWQgIkVuYWJsZSBkeW5hbWljIGFkZHJlc3MgYWxsb2NhdGlvbiBmb3IgYm9vdHAuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NAorbXNnaWQgIk1hcCBNQUMgYWRkcmVzcyAod2l0aCB3aWxkY2FyZHMpIHRvIG9wdGlvbiBzZXQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NQorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk2Cittc2dpZCAiRGlzYWJsZSBJQ01QIGVjaG8gYWRkcmVzcyBjaGVja2luZyBpbiB0aGUgREhDUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NworbXNnaWQgIlNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5OAorbXNnaWQgIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5OQorbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDAKK21zZ2lkICJEbyBub3QgdXNlIGxlYXNlZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzAzCittc2dpZCAiSWdub3JlIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNAorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDUKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNgorbXNnaWQgIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNworbXNnaWQgIkFkZCBjbGllbnQgSVAgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwOAorbXNnaWQgIkFsbG93IGFjY2VzcyBvbmx5IHRvIGZpbGVzIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgZG5zbWFzcS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbm5jdXJyZW50IFRGVFAgdHJhbnNmZXJzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxMAorbXNnaWQgIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzExCittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzEyCittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzEzCittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxNAorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTUKK21zZ2lkICJBbHdheXMgcGVyZm9ybSBETlMgcXVlcmllcyB0byBhbGwgc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE2Cittc2dpZCAiU2V0IHRhZyBpZiBjbGllbnQgaW5jbHVkZXMgbWF0Y2hpbmcgb3B0aW9uIGluIHJlcXVlc3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxNworbXNnaWQgIlVzZSBhbHRlcm5hdGl2ZSBwb3J0cyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE4Cittc2dpZCAiUnVuIGxlYXNlLWNoYW5nZSBzY3JpcHQgYXMgdGhpcyB1c2VyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTkKK21zZ2lkICJTcGVjaWZ5IE5BUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMAorbXNnaWQgIlNwZWNpZnkgbG93ZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjEKK21zZ2lkICJVc2Ugb25seSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWVzIGZvciBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMgorbXNnaWQgIlNwZWNpZnkgYWxpYXMgbmFtZSBmb3IgTE9DQUwgRE5TIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMworbXNnaWQgIlByb21wdCB0byBzZW5kIHRvIFBYRSBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjQKK21zZ2lkICJCb290IHNlcnZpY2UgZm9yIFBYRSBtZW51LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjUKK21zZ2lkICJDaGVjayBjb25maWd1cmF0aW9uIHN5bnRheC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogZG5zbWFzcSBbb3B0aW9uc11cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIHNob3J0IG9wdGlvbnMgb25seSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjYxNworIywgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUCBvcHRpb25zOlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjczNQorbXNnaWQgImJhZCBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3OTIKK21zZ2lkICJiYWQgSVAgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo4OTEKK21zZ2lkICJiYWQgZG9tYWluIGluIGRoY3Atb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjk1MAorbXNnaWQgImRoY3Atb3B0aW9uIHRvbyBsb25nIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjk1OQorbXNnaWQgImlsbGVnYWwgZGhjcC1tYXRjaCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo5OTUKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGZsYWciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTAwMworbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQga2V5d29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDg2IHRmdHAuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTEzMQorbXNnaWQgIm9ubHkgb25lIGRoY3AtaG9zdHNmaWxlIGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTEzOAorbXNnaWQgIm9ubHkgb25lIGRoY3Atb3B0c2ZpbGUgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMTgzCittc2dpZCAiYmFkIE1YIHByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTE4OAorbXNnaWQgImJhZCBNWCBuYW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEyMDIKK21zZ2lkICJiYWQgTVggdGFyZ2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEyMTIKK21zZ2lkICJjYW5ub3QgcnVuIHNjcmlwdHMgdW5kZXIgdUNsaW51eCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMjE0Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9TQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgbGVhc2UtY2hhbmdlIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTQ0MiBvcHRpb24uYzoxNDQ2Cittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTQ2NSBvcHRpb24uYzoxNDkwCittc2dpZCAiaW50ZXJmYWNlIGJpbmRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjExCittc2dpZCAiYmFkIHBvcnQgcmFuZ2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTYyOAorbXNnaWQgImJhZCBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2NjkKK21zZ2lkICJiYWQgZGhjcC1yYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjk1Cittc2dpZCAib25seSBvbmUgbmV0aWQgdGFnIGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTc0MAorbXNnaWQgImluY29uc2lzdGVudCBESENQIHJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE5MTIKK21zZ2lkICJiYWQgREhDUCBob3N0IG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjIwMSBvcHRpb24uYzoyNDgxCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMjg0Cittc2dpZCAiaW52YWxpZCBhbGlhcyByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMjk3Cittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzMjIKK21zZ2lkICJiYWQgQ05BTUUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjMyNworbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzQ3Cittc2dpZCAiYmFkIFBUUiByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjM3OAorbXNnaWQgImJhZCBOQVBUUiByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQwMworbXNnaWQgIlRYVCByZWNvcmQgc3RyaW5nIHRvbyBsb25nIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0NTEKK21zZ2lkICJiYWQgVFhUIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDY3Cittc2dpZCAiYmFkIFNSViByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ3NAorbXNnaWQgImJhZCBTUlYgdGFyZ2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0ODgKK21zZ2lkICJpbnZhbGlkIHByaW9yaXR5IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0OTUKK21zZ2lkICJpbnZhbGlkIHdlaWdodCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTE0Cittc2dpZCAidW5zdXBwb3J0ZWQgb3B0aW9uIChjaGVjayB0aGF0IGRuc21hc3Egd2FzIGNvbXBpbGVkIHdpdGggREhDUC9URlRQL0RCdXMgc3VwcG9ydCkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU1NworIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlcyBuZXN0ZWQgdG9vIGRlZXAgaW4gJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU2NSB0ZnRwLmM6NTEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjI2Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjczCittc2dpZCAiYmFkIG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjc1Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY3NworbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2ODUKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGF0IGxpbmUgJWQgb2YgJSVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3NDAgb3B0aW9uLmM6Mjc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSB2ZXJzaW9uICVzICAlc1xuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbXBpbGUgdGltZSBvcHRpb25zICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXRcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBvciAzLlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NTgKK21zZ2lkICJ0cnkgLS1oZWxwIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NjAKK21zZ2lkICJ0cnkgLXciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBob3N0LW5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MzIKK21zZ2lkICJvbmx5IG9uZSByZXNvbHYuY29uZiBmaWxlIGFsbG93ZWQgaW4gbm8tcG9sbCBtb2RlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTQyCittc2dpZCAibXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlc29sdi5jb25mIHRvIHJlYWQgZG9tYWluIGZyb20uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NDUgbmV0d29yay5jOjc1NCBkaGNwLmM6NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlYXJjaCBkaXJlY3RpdmUgZm91bmQgaW4gJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk4MworbXNnaWQgInRoZXJlIG11c3QgYmUgYSBkZWZhdWx0IGRvbWFpbiB3aGVuIC0tZGhjcC1mcWRuIGlzIHNldCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTg3Cittc2dpZCAic3ludGF4IGNoZWNrIE9LIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo0MzcKK21zZ2lkICJwb3NzaWJsZSBETlMtcmViaW5kIGF0dGFjayBkZXRlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMgaW4gYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NDE3IGRuc21hc3EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgSVBWNiBvcHRpb25zIG9uIGxpc3RlbmluZyBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxpc3RlbiBvbiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBURlRQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBzZXJ2ZXIgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzIwCittc2dpZCAidW5xdWFsaWZpZWQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcyMAorbXNnaWQgIm5hbWVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MjIKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MjQKK21zZ2lkICJkb21haW4iCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBsb2NhbCBhZGRyZXNzZXMgb25seSBmb3IgJXMgJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIGZvciAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzMyCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQodmlhICVzKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE0NgorbXNnaWQgIlRGVFAgc2VydmVyIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX1RGVFAgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNTEKK21zZ2lkICJhc3ljaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgU29sYXJpcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGxpc3Qgb2YgaW50ZXJmYWNlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGludGVyZmFjZSB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIwMSBkbnNtYXNxLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMDQKK21zZ2lkICJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB1c2VyIG9yIGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byBmaWxlc3lzdGVtIHJvb3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlc2l6ZSAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21waWxlIHRpbWUgb3B0aW9uczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ2MAorbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBjb25uZWN0ZWQgdG8gc3lzdGVtIGJ1cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDYyCittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGJ1cyBjb25uZWN0aW9uIHBlbmRpbmciCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBmYWlsZWQgdG8gY2hhbmdlIG93bmVyIG9mICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDcxCittc2dpZCAic2V0dGluZyAtLWJpbmQtaW50ZXJmYWNlcyBvcHRpb24gYmVjYXVzZSBvZiBPUyBsaW1pdGF0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGludGVyZmFjZSAlcyBkb2VzIG5vdCBjdXJyZW50bHkgZXhpc3QiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ4MQorbXNnaWQgIndhcm5pbmc6IGlnbm9yaW5nIHJlc29sdi1maWxlIGZsYWcgYmVjYXVzZSBuby1yZXNvbHYgaXMgc2V0IgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0ODQKK21zZ2lkICJ3YXJuaW5nOiBubyB1cHN0cmVhbSBzZXJ2ZXJzIGNvbmZpZ3VyZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBlbmFibGVkLCBxdWV1ZSBsaW1pdCBpcyAlZCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMsIGxlYXNlIHRpbWUgJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjUwMworIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBwcm94eSBvbiBzdWJuZXQgJS4wcyVzJS4wcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIElQIHJhbmdlICVzIC0tICVzLCBsZWFzZSB0aW1lICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo1MTkKK21zZ2lkICJyb290IGlzICIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTE5Cittc2dpZCAiZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTIxCittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICJyZXN0cmljdGluZyBtYXhpbXVtIHNpbXVsdGFuZW91cyBURlRQIHRyYW5zZmVycyB0byAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NjY3Cittc2dpZCAiY29ubmVjdGVkIHRvIHN5c3RlbSBEQnVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgaW50byBiYWNrZ3JvdW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInNldHRpbmcgY2FwYWJpbGl0aWVzIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc2NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIHVzZXItaWQgdG8gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwaWRmaWxlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Nzc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNoaWxkIHByb2Nlc3Mga2lsbGVkIGJ5IHNpZ25hbCAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNoaWxkIHByb2Nlc3MgZXhpdGVkIHdpdGggc3RhdHVzICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWN1dGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4ODUKK21zZ2lkICJleGl0aW5nIG9uIHJlY2VpcHQgb2YgU0lHVEVSTSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6OTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlcnZlcnMgZm91bmQgaW4gJXMsIHdpbGwgcmV0cnkiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IG9wdGlvbnMgb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQIHNlcnZlciBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVAgcmF3IHNvY2tldDogJXMuIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCBwYWNrZXQgcmVjZWl2ZWQgb24gJXMgd2hpY2ggaGFzIG5vIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBsaW5lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlLiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzIGluICVzLiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtb3JlIHRoYW4gb25lIGFkZHJlc3MgaW4gaG9zdHNmaWxlLCB1c2luZyAlcyBmb3IgREhDUCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6OTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzICglcykgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gb3IgY3JlYXRlIGxlYXNlIGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6OTIKK21zZ2lkICJ0b28gbWFueSBzdG9yZWQgbGVhc2VzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBydW4gbGVhc2UtaW5pdCBzY3JpcHQgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIChyZXRyeSBpbiAldXMpIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1AgcmVxdWVzdCAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzM3Cittc2dpZCAid2l0aCBzdWJuZXQgc2VsZWN0b3IiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjMzNworbXNnaWQgInZpYSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IEF2YWlsYWJsZSBESENQIHN1Ym5ldDogJXMvJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBBdmFpbGFibGUgREhDUCByYW5nZTogJXMgLS0gJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM4NAorbXNnaWQgImRpc2FibGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0MTggcmZjMjEzMS5jOjg4MyByZmMyMTMxLmM6MTI0MgorbXNnaWQgImlnbm9yZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQzMyByZmMyMTMxLmM6MTEwMAorbXNnaWQgImFkZHJlc3MgaW4gdXNlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0NDcgcmZjMjEzMS5jOjkzNworbXNnaWQgIm5vIGFkZHJlc3MgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0NTQgcmZjMjEzMS5jOjEwNjMKK21zZ2lkICJ3cm9uZyBuZXR3b3JrIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0NjcKK21zZ2lkICJubyBhZGRyZXNzIGNvbmZpZ3VyZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQ3MyByZmMyMTMxLmM6MTExMworbXNnaWQgIm5vIGxlYXNlcyBsZWZ0IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IHByb3ZpZGVzIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgVmVuZG9yIGNsYXNzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IFVzZXIgY2xhc3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo3MzcKK21zZ2lkICJQWEUgQklTIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJkaXNhYmxpbmcgREhDUCBzdGF0aWMgYWRkcmVzcyAlcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjg3NAorbXNnaWQgInVua25vd24gbGVhc2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgbGVhc2VkIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGluIHVzZSBieSB0aGUgc2VydmVyIG9yIHJlbGF5IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5MzUgcmZjMjEzMS5jOjExMDYKK21zZ2lkICJubyB1bmlxdWUtaWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMDMKK21zZ2lkICJ3cm9uZyBzZXJ2ZXItSUQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMjIKK21zZ2lkICJ3cm9uZyBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDM5Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDcxCittc2dpZCAiYWRkcmVzcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDgyCittc2dpZCAic3RhdGljIGxlYXNlIGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTA4NgorbXNnaWQgImFkZHJlc3MgcmVzZXJ2ZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJhbmRvbmluZyBsZWFzZSB0byAlcyBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTU4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSB0YWdzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBib290ZmlsZSBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTYwNQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBzZXJ2ZXIgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgbmV4dCBzZXJ2ZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIERIQ1AvQk9PVFAgb3B0aW9uICVkOiBubyBzcGFjZSBsZWZ0IGluIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTkxOQorbXNnaWQgIlBYRSBtZW51IHRvbyBsYXJnZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MjAzNAorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkb21haW4gJXMgZm9yIERIQ1AgaG9zdCBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHJlcXVlc3RlZCBvcHRpb25zOiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXRsaW5rLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBuZXRsaW5rIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogbmV0bGluay5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXRsaW5rIHJldHVybnMgZXJyb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IGRidXMuYzoxNTAKK21zZ2lkICJhdHRlbXB0IHRvIHNldCBhbiBJUHY2IHNlcnZlciBhZGRyZXNzIHZpYSBEQnVzIC0gbm8gSVB2NiBzdXBwb3J0IgorbXNnc3RyICIiCisKKyM6IGRidXMuYzoyODYKK21zZ2lkICJzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMgZnJvbSBEQnVzIgorbXNnc3RyICIiCisKKyM6IGRidXMuYzozMjQKK21zZ2lkICJjb3VsZCBub3QgcmVnaXN0ZXIgYSBEQnVzIG1lc3NhZ2UgaGFuZGxlciIKK21zZ3N0ciAiIgorCisjOiBicGYuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIEJQRiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJwZi5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MTc5Cittc2dpZCAidW5hYmxlIHRvIGdldCBmcmVlIHBvcnQgZm9yIFRGVFAiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIHNlbnQgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgZXJyb3IgJWQgJXMgcmVjZWl2ZWQgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgZmFpbGVkIHNlbmRpbmcgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogbG9nLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJmbG93OiAlZCBsb2cgZW50cmllcyBsb3N0IgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzo0MTUKK21zZ2lkICJGQUlMRUQgdG8gc3RhcnQgdXAiCittc2dzdHIgIiIKZGlmZiAtLWdpdCBhL3BvL25vLnBvIGIvcG8vbm8ucG8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjcwZTU2YgotLS0gL2Rldi9udWxsCisrKyBiL3BvL25vLnBvCkBAIC0wLDAgKzEsMTUwOCBAQAorIyBOb3J3ZWdpYW4gdHJhbnNsYXRpb25zIGZvciBkbnNtYXNxIHBhY2thZ2UuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+LCAyMDA2LgorIworIyBDdXJyZW50IHRyYW5zbGF0b3I6IEphbiBFcmlrIEFza2lsZHQgPGplYXNraWxkdEBnbWFpbC5jb20+LCAyMDA2CisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBkbnNtYXNxIDIuMjVcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDktMDYtMTggMTI6MjQrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDYtMDEtMTEgMTc6MzkrMDAwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmFuIEVyaWsgQXNraWxkdCA8amVhc2tpbGR0QGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBOb3J3ZWdpYW4gPGkxOG4tbmJAbGlzdGVyLnBpbmcudWlvLm5vPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGNhY2hlLmM6NzY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbGFzdGUgbmF2biBmcmEgJXM6ICVzIgorCisjOiBjYWNoZS5jOjc5OCBkaGNwLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImTlcmxpZyBhZHJlc3NlIHZlZCAlcyBsaW5qZSAlZCIKKworIzogY2FjaGUuYzo4NTYgZGhjcC5jOjgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbmFtZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICJk5XJsaWcgbmF2biB2ZWQgJXMgbGluamUgJWQiCisKKyM6IGNhY2hlLmM6ODYzIGRoY3AuYzo4NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyAtICVkIGFkZHJlc3NlcyIKK21zZ3N0ciAibGVzICVzIC0gJWQgYWRyZXNzZXIiCisKKyM6IGNhY2hlLmM6OTAyCittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAibWVsbG9tbGFnZXIgdPhtdCIKKworIzogY2FjaGUuYzo5MzMgb3B0aW9uLmM6MTA1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyBkaXJlY3RvcnkgJXM6ICVzIgorbXNnc3RyICJrYW4gaWtrZSBsZXNlICVzOiAlcyIKKworIzogY2FjaGUuYzoxMDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgImdpciBpa2tlIG5hdm5ldCAlcyB0aWwgREhDUCBsZWllbiBmb3IgJXMgZm9yZGkgbmF2bmV0IGVrc2lzdGVyZXIgaSAlcyBtZWQgYWRyZXNzZW4gJXMiCisKKyM6IGNhY2hlLmM6MTEyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lICVsdSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjExMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhY2hlIHNpemUgJWQsICVkLyVkIGNhY2hlIGluc2VydGlvbnMgcmUtdXNlZCB1bmV4cGlyZWQgY2FjaGUgZW50cmllcy4iCittc2dzdHIgIm1lbGxvbWxhZ2VyIHN0+HJyZWxzZSAlZCwgJWQvJWQgbWVsbG9tbGFnZXIgaW5uc2V0dGluZ2VyIHJlLWJydWtlciBtZWxsb21sYWdlciBwbGFzc2VyIHNvbSBpa2tlIGVyIHV0bPhwdCIKKworIzogY2FjaGUuYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yd2FyZGVkICV1LCBxdWVyaWVzIGFuc3dlcmVkIGxvY2FsbHkgJXUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciAlcyMlZDogcXVlcmllcyBzZW50ICV1LCByZXRyaWVkIG9yIGZhaWxlZCAldSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6NTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogJXMiCittc2dzdHIgImZlaWxldCDlIGx5dHRlIHDlIHNvY2tldDogJXMiCisKKyM6IHV0aWwuYzoxOTEKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAiZmVpbGV0IOUgbGFzdGUgJWQgYnl0ZXMiCisKKyM6IHV0aWwuYzoyMjkgb3B0aW9uLmM6NTQ4Cittc2dpZCAiY291bGQgbm90IGdldCBtZW1vcnkiCittc2dzdHIgImt1bm5lIGlra2UgZuUgbWlubmUiCisKKyM6IHV0aWwuYzoyMzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgImthbiBpa2tlIGxlc2UgJXM6ICVzIgorCisjOiB1dGlsLmM6MjQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgImZlaWxldCDlIGxhc3RlICVkIGJ5dGVzIgorCisjOiB1dGlsLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgImluZmluaXRlIgorbXNnc3RyICJ1ZW5kZWxpZyIKKworIzogb3B0aW9uLmM6MjI4Cittc2dpZCAiU3BlY2lmeSBsb2NhbCBhZGRyZXNzKGVzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTcGVzaWZpc2VyIGxva2FsKGUpIGFkcmVzc2Uocikg5SBseXR0ZSBw5S4iCisKKyM6IG9wdGlvbi5jOjIyOQorbXNnaWQgIlJldHVybiBpcGFkZHIgZm9yIGFsbCBob3N0cyBpbiBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIlJldHVybmVyIGlwYWRkciBmb3IgYWxsZSB2ZXJ0ZXIgaSBkZXQgc3Blc2lmaXNlcnRlIGRvbWVuZXQuIgorCisjOiBvcHRpb24uYzoyMzAKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiRm9yZmFsc2sgcmV2ZXJzIG9wcHNsYWcgZm9yIFJGQzE5MTggcHJpdmF0ZSBhZHJlc3NlIG9tcuVkZXIuIgorCisjOiBvcHRpb24uYzoyMzEKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiQmVoYW5kbGUgaXBhZGRyIHNvbSBOWERPTUFJTiAob21n5XIgVmVyaXNpZ24gd2lsZGNhcmQpLiIKKworIzogb3B0aW9uLmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGluIGVudHJpZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZXNpZmlzZXIgc3T4cnJlbHNlbiBw5SBtZWxsb21sYWdlciBwbGFzc2VuZSAoc3RhbmRhcmQgZXIgJXMpLiIKKworIzogb3B0aW9uLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgY29uZmlndXJhdGlvbiBmaWxlIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVzaWZpc2VyIGtvbmZpZ3VyYXNqb25zZmlsIChzdGFuZGFyZCBlciAlcykuIgorCisjOiBvcHRpb24uYzoyMzQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIklLS0UgbGVnZyAoZm9yaykgc29tIGJha2dydW5uc3Byb3Nlc3M6IGtq+HIgaSBkZWJ1ZyBtb2R1cy4iCisKKyM6IG9wdGlvbi5jOjIzNQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIklLS0UgdmlkZXJlc2VuZCBvcHBzbGFnIHNvbSBtYW5nbGVyIGRvbWVuZSBkZWwuIgorCisjOiBvcHRpb24uYzoyMzYKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIlJldHVybmVyIHNlbHYtcGVrZW5kZSBNWCBwb3N0IGZvciBsb2thbGUgdmVydGVyLiIKKworIzogb3B0aW9uLmM6MjM3Cittc2dpZCAiRXhwYW5kIHNpbXBsZSBuYW1lcyBpbiAvZXRjL2hvc3RzIHdpdGggZG9tYWluLXN1ZmZpeC4iCittc2dzdHIgIlV0dmlkIGVua2xlIG5hdm4gaSAvZXRjL2hvc3RzIG1lZCBkb21lbmUtc3VmZmlrcy4iCisKKyM6IG9wdGlvbi5jOjIzOAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIklra2UgdmlkZXJlc2VuZCBmYWxza2UvdWVrdGUgRE5TIGZvcmVzcPhyc2xlciBmcmEgV2luZG93cyB2ZXJ0ZXIuIgorCisjOiBvcHRpb24uYzoyMzkKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIkFrdGl2ZXIgREhDUCBpIGRldCBnaXR0ZSBvbXLlZGV0IG1lZCBsZWllIHZhcmlnaGV0IgorCisjOiBvcHRpb24uYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgZ3JvdXAgYWZ0ZXIgc3RhcnR1cCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU2tpZnQgdGlsIGRlbm5lIGdydXBwZW4gZXR0ZXIgb3Bwc3RhcnQgKHN0YW5kYXJkIGVyICVzKS4iCisKKyM6IG9wdGlvbi5jOjI0MQorbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiU2V0dCBhZHJlc3NlIGVsbGVyIHZlcnRzbmF2biBmb3IgZW4gc3Blc2lmaWtrIG1hc2tpbi4iCisKKyM6IG9wdGlvbi5jOjI0MgorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDMKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9uIHNwZWNzIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIGxvYWQgJXMgZmlsZS4iCittc2dzdHIgIklLS0UgbGFzdCAlcyBmaWxlbi4iCisKKyM6IG9wdGlvbi5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBlbiB2ZXJ0cyAoaG9zdHMpIGZpbCBzb20gc2thbCBsZXNlcyBpIHRpbGxlZyB0aWwgJXMuIgorCisjOiBvcHRpb24uYzoyNDYKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTcGVzaWZpc2VyIG5ldHR2ZXJrc2tvcnQgZGV0IHNrYWwgbHl0dGVzIHDlLiIKKworIzogb3B0aW9uLmM6MjQ3Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgTk9UIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlNwZXNpZmlzZXIgbmV0dHZlcmtza29ydCBkZXQgSUtLRSBza2FsIGx5dHRlcyBw5S4iCisKKyM6IG9wdGlvbi5jOjI0OAorIywgZnV6enkKK21zZ2lkICJNYXAgREhDUCB1c2VyIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIk1hcCBESENQIGJydWtlciBrbGFzc2UgdGlsIG9wc2pvbiBzZXR0LiIKKworIzogb3B0aW9uLmM6MjQ5Cittc2dpZCAiTWFwIFJGQzMwNDYgY2lyY3VpdC1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1MAorbXNnaWQgIk1hcCBSRkMzMDQ2IHJlbW90ZS1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1MQorbXNnaWQgIk1hcCBSRkMzOTkzIHN1YnNjcmliZXItaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTIKKyMsIGZ1enp5Cittc2dpZCAiRG9uJ3QgZG8gREhDUCBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiSWtrZSB1dGb4ciBESENQIGZvciBrbGllbnRlciBpIG9wc2pvbiBzZXR0LiIKKworIzogb3B0aW9uLmM6MjUzCisjLCBmdXp6eQorbXNnaWQgIkZvcmNlIGJyb2FkY2FzdCByZXBsaWVzIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJJa2tlIHV0ZvhyIERIQ1AgZm9yIGtsaWVudGVyIGkgb3Bzam9uIHNldHQuIgorCisjOiBvcHRpb24uYzoyNTQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICJJS0tFIGxhc3QgKGZvcmspIHNvbSBiYWtncnVubnNwcm9zZXNzLCBJS0tFIGtq+HIgaSBkZWJ1ZyBtb2R1cy4iCisKKyM6IG9wdGlvbi5jOjI1NQorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICJBbnRhIGF0IHZpIGVyIGRlbiBlbmVzdGUgREhDUCB0amVuZXJlbiBw5SBkZXQgbG9rYWxlIG5ldHR2ZXJrZXQuIgorCisjOiBvcHRpb24uYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB3aGVyZSB0byBzdG9yZSBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBodm9yIERIQ1AgbGVpZW5lIHNrYWwgbGFncmVzIChzdGFuZGFyZCBlciAlcykuIgorCisjOiBvcHRpb24uYzoyNTcKK21zZ2lkICJSZXR1cm4gTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICJSZXR1cm5lciBNWCByZWNvcmRzIGZvciBsb2thbGUgdmVydGVyLiIKKworIzogb3B0aW9uLmM6MjU4Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJTcGVzaWZpc2VyIGVuIE1YIHBvc3QuIgorCisjOiBvcHRpb24uYzoyNTkKK21zZ2lkICJTcGVjaWZ5IEJPT1RQIG9wdGlvbnMgdG8gREhDUCBzZXJ2ZXIuIgorbXNnc3RyICJTcGVzaWZpc2VyIEJPT1RQIG9wc2pvbmVyIHRpbCBESENQIHRqZW5lci4iCisKKyM6IG9wdGlvbi5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgcG9sbCAlcyBmaWxlLCByZWxvYWQgb25seSBvbiBTSUdIVVAuIgorbXNnc3RyICJJS0tFIHNw+HIgKHBvbGwpICVzIGZpbCwgbGVzIHDlIG55dHQga3VuIHZlZCBTSUdIVVAiCisKKyM6IG9wdGlvbi5jOjI2MQorbXNnaWQgIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIgorbXNnc3RyICJJS0tFIG1lbGxvbWxhZ3JlIHP4a2VyZXN1bHRhdGVyIHNvbSBmZWlsZXIuIgorCisjOiBvcHRpb24uYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIG5hbWVzZXJ2ZXJzIHN0cmljdGx5IGluIHRoZSBvcmRlciBnaXZlbiBpbiAlcy4iCittc2dzdHIgIkJydWsgbmF2bmV0amVuZXJlIGt1biBzb20gYmVzdGVtdCBpIHJla2tlZvhsZ2VuIGdpdHQgaSAlcy4iCisKKyM6IG9wdGlvbi5jOjI2MworIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IG9wdGlvbnMgdG8gYmUgc2VudCB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICJTZXR0IGVrc3RyYSBvcHNqb25lciBzb20gc2thbCBmb3JkZWxlcyB0aWwgREhDUCBrbGllbnRlbmUuIgorCisjOiBvcHRpb24uYzoyNjQKK21zZ2lkICJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjUKK21zZ2lkICJTcGVjaWZ5IHBvcnQgdG8gbGlzdGVuIGZvciBETlMgcmVxdWVzdHMgb24gKGRlZmF1bHRzIHRvIDUzKS4iCittc2dzdHIgIlNwZXNpZmlzZXIgbHl0dGVwb3J0IGZvciBETlMgb3Bwc2xhZyAoc3RhbmRhcmQgZXIgNTMpLiIKKworIzogb3B0aW9uLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gc3VwcG9ydGVkIFVEUCBwYWNrZXQgc2l6ZSBmb3IgRUROUy4wIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJNYWtzaW1hbCBzdPh0dGV0IFVEUCBwYWtrZXN0+HJyZWxzZSBmb3IgRUROUy4wIChzdGFuZGFyZCBlciAlcykuIgorCisjOiBvcHRpb24uYzoyNjcKKyMsIGZ1enp5Cittc2dpZCAiTG9nIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiTG9nZyBvcHBzbGFnLiIKKworIzogb3B0aW9uLmM6MjY4CisjLCBmdXp6eQorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIlR2aW5nIGJydWsgYXYgb3BwcmlubmVsaWcgcG9ydCBmb3Igb3Bwc3Ry+G1zIG9wcHNsYWcuIgorCisjOiBvcHRpb24uYzoyNjkKK21zZ2lkICJEbyBOT1QgcmVhZCByZXNvbHYuY29uZi4iCittc2dzdHIgIklLS0UgbGVzIHJlc29sdi5jb25mLiIKKworIzogb3B0aW9uLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCB0byByZXNvbHYuY29uZiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBzdGllbiB0aWwgcmVzb2x2LmNvbmYgKHN0YW5kYXJkIGVyICVzKS4iCisKKyM6IG9wdGlvbi5jOjI3MQorbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyhlcykgb2YgdXBzdHJlYW0gc2VydmVycyB3aXRoIG9wdGlvbmFsIGRvbWFpbnMuIgorbXNnc3RyICJTcGVzaWZpc2VyIGFkcmVzc2VuKGUpIHRpbCBvcHBzdHL4bXMgdGplbmVyZSBtZWQgdmFsZ2ZyaWUgZG9tZW5lci4iCisKKyM6IG9wdGlvbi5jOjI3MgorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIkFsZHJpIHZpZGVyZXNlbmQgb3Bwc2xhZyB0aWwgc3Blc2lmaXNlcnRlIGRvbWVuZXIuIgorCisjOiBvcHRpb24uYzoyNzMKK21zZ2lkICJTcGVjaWZ5IHRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgaW4gREhDUCBsZWFzZXMuIgorbXNnc3RyICJTcGVzaWZpc2VyIGRvbWVuZXQgc29tIHNrYWwgdGlsZGVsZXMgaSBESENQIGxlaWVuLiIKKworIzogb3B0aW9uLmM6Mjc0Cittc2dpZCAiU3BlY2lmeSBkZWZhdWx0IHRhcmdldCBpbiBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJTcGVzaWZpc2VyIGRlZmF1bHQgbeVsIGkgZW4gTVggcG9zdC4iCisKKyM6IG9wdGlvbi5jOjI3NQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIHJlcGxpZXMgZnJvbSAvZXRjL2hvc3RzLiIKK21zZ3N0ciAiU3Blc2lmaXNlciB0aW1lLXRvLWxpdmUgaSBzZWt1bmRlciBmb3Igc3ZhciBmcmEgL2V0Yy9ob3N0cy4iCisKKyM6IG9wdGlvbi5jOjI3NgorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciBuZWdhdGl2ZSBjYWNoaW5nLiIKK21zZ3N0ciAiU3Blc2lmaXNlciB0aW1lLXRvLWxpdmUgaSBzZWt1bmRlciBmb3Igc3ZhciBmcmEgL2V0Yy9ob3N0cy4iCisKKyM6IG9wdGlvbi5jOjI3NworIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyB1c2VyIGFmdGVyIHN0YXJ0dXAuIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTa2lmdCB0aWwgZGVubmUgYnJ1a2VyIGV0dGVyIG9wcHN0YXJ0IChzdGFuZGFyZCBlciAlcykuIgorCisjOiBvcHRpb24uYzoyNzgKKyMsIGZ1enp5Cittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIk1hcCBESENQIHByb2R1c2VudCBrbGFzc2UgdGlsIG9wc2pvbiBzZXR0LiIKKworIzogb3B0aW9uLmM6Mjc5Cittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIlZpcyBkbnNtYXNxIHZlcnNqb24gb2cgY29weXJpZ2h0IGluZm9ybWFzam9uLiIKKworIzogb3B0aW9uLmM6MjgwCittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIk92ZXJzZXR0IElQdjQgYWRyZXNzZXIgZnJhIG9wcHN0cvhtcyB0amVuZXJlLiIKKworIzogb3B0aW9uLmM6MjgxCittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICJTcGVzaWZpc2VyIGVuIFNSViBwb3N0LiIKKworIzogb3B0aW9uLmM6MjgyCittc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIFVzZSAtLWhlbHAgZGhjcCBmb3Iga25vd24gREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCBvZiBQSUQgZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBzdGllbiB0aWwgUElEIGZpbC4gKHN0YW5kYXJkIGVyICVzKS4iCisKKyM6IG9wdGlvbi5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVzaWZpc2VyIG1ha3NpbXVtIGFudGFsbCBESENQIGxlaWVyIChzdGFuZGFyZCBlciAlcykiCisKKyM6IG9wdGlvbi5jOjI4NQorbXNnaWQgIkFuc3dlciBETlMgcXVlcmllcyBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlIGEgcXVlcnkgd2FzIHNlbnQgdG8uIgorbXNnc3RyICJTdmFyIEROUyBvcHBzbGFnIGJhc2VydCBw5SBuZXR0dmVya3Nrb3J0ZXQgb3Bwc2xhZ2V0IGJsZSBzZW5kdCB0aWwuIgorCisjOiBvcHRpb24uYzoyODYKK21zZ2lkICJTcGVjaWZ5IFRYVCBETlMgcmVjb3JkLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBUWFQgRE5TIHBvc3QuIgorCisjOiBvcHRpb24uYzoyODcKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIlNwZXNpZmlzZXIgVFhUIEROUyBwb3N0LiIKKworIzogb3B0aW9uLmM6Mjg4Cittc2dpZCAiR2l2ZSBETlMgbmFtZSB0byBJUHY0IGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODkKK21zZ2lkICJCaW5kIG9ubHkgdG8gaW50ZXJmYWNlcyBpbiB1c2UuIgorbXNnc3RyICJCaW5kIGt1biB0aWwgbmV0dHZlcmtza29ydCBzb20gZXIgaSBicnVrLiIKKworIzogb3B0aW9uLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWQgREhDUCBzdGF0aWMgaG9zdCBpbmZvcm1hdGlvbiBmcm9tICVzLiIKK21zZ3N0ciAiTGVzIERIQ1Agc3RhdGlzayB2ZXJ0IGluZm9ybWFzam9uIGZyYSAlcy4iCisKKyM6IG9wdGlvbi5jOjI5MQorbXNnaWQgIkVuYWJsZSB0aGUgREJ1cyBpbnRlcmZhY2UgZm9yIHNldHRpbmcgdXBzdHJlYW0gc2VydmVycywgZXRjLiIKK21zZ3N0ciAiQWt0aXZlciBEQnVzIGludGVyZmFjZSBmb3Ig5SBzZXR0ZSBvcHBzdHL4bXMgdGplbmVyZSwgb3N2LiIKKworIzogb3B0aW9uLmM6MjkyCittc2dpZCAiRG8gbm90IHByb3ZpZGUgREhDUCBvbiB0aGlzIGludGVyZmFjZSwgb25seSBwcm92aWRlIEROUy4iCittc2dzdHIgIklra2UgbGV2ZXIgREhDUCBw5SBkZXR0ZSBuZXR0dmVya3Nrb3J0ZXQsIGt1biBsZXZlciBETlMuIgorCisjOiBvcHRpb24uYzoyOTMKK21zZ2lkICJFbmFibGUgZHluYW1pYyBhZGRyZXNzIGFsbG9jYXRpb24gZm9yIGJvb3RwLiIKK21zZ3N0ciAiQWt0aXZlciBkeW5hbWlzayBhZHJlc3NlIGFsbG9rZXJpbmcgZm9yIGJvb3RwLiIKKworIzogb3B0aW9uLmM6Mjk0CisjLCBmdXp6eQorbXNnaWQgIk1hcCBNQUMgYWRkcmVzcyAod2l0aCB3aWxkY2FyZHMpIHRvIG9wdGlvbiBzZXQuIgorbXNnc3RyICJNYXAgREhDUCBwcm9kdXNlbnQga2xhc3NlIHRpbCBvcHNqb24gc2V0dC4iCisKKyM6IG9wdGlvbi5jOjI5NQorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk2Cittc2dpZCAiRGlzYWJsZSBJQ01QIGVjaG8gYWRkcmVzcyBjaGVja2luZyBpbiB0aGUgREhDUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NworbXNnaWQgIlNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5OAorbXNnaWQgIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5OQorIywgZnV6enkKK21zZ2lkICJMb2cgdG8gdGhpcyBzeXNsb2cgZmFjaWxpdHkgb3IgZmlsZS4gKGRlZmF1bHRzIHRvIERBRU1PTikiCittc2dzdHIgIlNraWZ0IHRpbCBkZW5uZSBicnVrZXIgZXR0ZXIgb3Bwc3RhcnQgKHN0YW5kYXJkIGVyICVzKS4iCisKKyM6IG9wdGlvbi5jOjMwMAorbXNnaWQgIkRvIG5vdCB1c2UgbGVhc2VmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiCittc2dzdHIgIlNwZXNpZmlzZXIgbWFrc2ltdW0gYW50YWxsIERIQ1AgbGVpZXIgKHN0YW5kYXJkIGVyICVzKSIKKworIzogb3B0aW9uLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzAzCittc2dpZCAiSWdub3JlIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNAorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDUKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNgorbXNnaWQgIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNworbXNnaWQgIkFkZCBjbGllbnQgSVAgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwOAorbXNnaWQgIkFsbG93IGFjY2VzcyBvbmx5IHRvIGZpbGVzIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgZG5zbWFzcS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25uY3VycmVudCBURlRQIHRyYW5zZmVycyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBtYWtzaW11bSBhbnRhbGwgREhDUCBsZWllciAoc3RhbmRhcmQgZXIgJXMpIgorCisjOiBvcHRpb24uYzozMTAKK21zZ2lkICJEaXNhYmxlIHRoZSBURlRQIGJsb2Nrc2l6ZSBleHRlbnNpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxMQorbXNnaWQgIkVwaGVtZXJhbCBwb3J0IHJhbmdlIGZvciB1c2UgYnkgVEZUUCB0cmFuc2ZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxMgorbXNnaWQgIkV4dHJhIGxvZ2dpbmcgZm9yIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxMworbXNnaWQgIkVuYWJsZSBhc3luYy4gbG9nZ2luZzsgb3B0aW9uYWxseSBzZXQgcXVldWUgbGVuZ3RoLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTQKK21zZ2lkICJTdG9wIEROUyByZWJpbmRpbmcuIEZpbHRlciBwcml2YXRlIElQIHJhbmdlcyB3aGVuIHJlc29sdmluZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE1Cittc2dpZCAiQWx3YXlzIHBlcmZvcm0gRE5TIHF1ZXJpZXMgdG8gYWxsIHNlcnZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxNgorbXNnaWQgIlNldCB0YWcgaWYgY2xpZW50IGluY2x1ZGVzIG1hdGNoaW5nIG9wdGlvbiBpbiByZXF1ZXN0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTcKK21zZ2lkICJVc2UgYWx0ZXJuYXRpdmUgcG9ydHMgZm9yIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxOAorbXNnaWQgIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0IGFzIHRoaXMgdXNlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE5CisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgTkFQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIlNwZXNpZmlzZXIgVFhUIEROUyBwb3N0LiIKKworIzogb3B0aW9uLmM6MzIwCittc2dpZCAiU3BlY2lmeSBsb3dlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMQorbXNnaWQgIlVzZSBvbmx5IGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZXMgZm9yIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzIyCittc2dpZCAiU3BlY2lmeSBhbGlhcyBuYW1lIGZvciBMT0NBTCBETlMgbmFtZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzIzCisjLCBmdXp6eQorbXNnaWQgIlByb21wdCB0byBzZW5kIHRvIFBYRSBjbGllbnRzLiIKK21zZ3N0ciAiU2V0dCBla3N0cmEgb3Bzam9uZXIgc29tIHNrYWwgZm9yZGVsZXMgdGlsIERIQ1Aga2xpZW50ZW5lLiIKKworIzogb3B0aW9uLmM6MzI0Cittc2dpZCAiQm9vdCBzZXJ2aWNlIGZvciBQWEUgbWVudS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI1Cittc2dpZCAiQ2hlY2sgY29uZmlndXJhdGlvbiBzeW50YXguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjYxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCittc2dzdHIgIiIKKyJCcnVrOiBkbnNtYXNxIFtvcHNqb25lcl1cbiIKKyJcbiIKKworIzogb3B0aW9uLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBzaG9ydCBvcHRpb25zIG9ubHkgb24gdGhlIGNvbW1hbmQgbGluZS5cbiIKK21zZ3N0ciAiQnJ1ayBrb3J0ZSBvcHNqb25lciBrdW4gcOUga29tbWFuZG9saW5qZW4uXG4iCisKKyM6IG9wdGlvbi5jOjYxNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVmFsaWQgb3B0aW9ucyBhcmU6XG4iCittc2dzdHIgIkd5bGRpZ2Ugb3Bzam9uZXIgZXIgOlxuIgorCisjOiBvcHRpb24uYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUCBvcHRpb25zOlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjczNQorbXNnaWQgImJhZCBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiZOVybGlnIGRoY3Atb3Bzam9uIgorCisjOiBvcHRpb24uYzo3OTIKKyMsIGZ1enp5Cittc2dpZCAiYmFkIElQIGFkZHJlc3MiCittc2dzdHIgImxlcyAlcyAtICVkIGFkcmVzc2VyIgorCisjOiBvcHRpb24uYzo4OTEKK21zZ2lkICJiYWQgZG9tYWluIGluIGRoY3Atb3B0aW9uIgorbXNnc3RyICJk5XJsaWcgZG9tZW5lIGkgZGhjcC1vcHNqb24iCisKKyM6IG9wdGlvbi5jOjk1MAorbXNnaWQgImRoY3Atb3B0aW9uIHRvbyBsb25nIgorbXNnc3RyICJkaGNwLW9wc2pvbiBmb3IgbGFuZyIKKworIzogb3B0aW9uLmM6OTU5Cittc2dpZCAiaWxsZWdhbCBkaGNwLW1hdGNoIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjk5NQorbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQgZmxhZyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDAzCittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBrZXl3b3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEwODYgdGZ0cC5jOjM1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgImthbiBpa2tlIGxlc2UgJXM6ICVzIgorCisjOiBvcHRpb24uYzoxMTMxCittc2dpZCAib25seSBvbmUgZGhjcC1ob3N0c2ZpbGUgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMTM4Cittc2dpZCAib25seSBvbmUgZGhjcC1vcHRzZmlsZSBhbGxvd2VkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjExODMKK21zZ2lkICJiYWQgTVggcHJlZmVyZW5jZSIKK21zZ3N0ciAiZOVybGlnIE1YIHByZWZlcmFuc2UiCisKKyM6IG9wdGlvbi5jOjExODgKK21zZ2lkICJiYWQgTVggbmFtZSIKK21zZ3N0ciAiZOVybGlnIE1YIG5hdm4iCisKKyM6IG9wdGlvbi5jOjEyMDIKK21zZ2lkICJiYWQgTVggdGFyZ2V0IgorbXNnc3RyICJk5XJsaWcgTVggbeVsIgorCisjOiBvcHRpb24uYzoxMjEyCittc2dpZCAiY2Fubm90IHJ1biBzY3JpcHRzIHVuZGVyIHVDbGludXgiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTIxNAorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIGxlYXNlLWNoYW5nZSBzY3JpcHRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE0NDIgb3B0aW9uLmM6MTQ0NgorbXNnaWQgImJhZCBwb3J0IgorbXNnc3RyICJk5XJsaWcgcG9ydCIKKworIzogb3B0aW9uLmM6MTQ2NSBvcHRpb24uYzoxNDkwCittc2dpZCAiaW50ZXJmYWNlIGJpbmRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjExCisjLCBmdXp6eQorbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICJk5XJsaWcgcG9ydCIKKworIzogb3B0aW9uLmM6MTYyOAorbXNnaWQgImJhZCBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2NjkKK21zZ2lkICJiYWQgZGhjcC1yYW5nZSIKK21zZ3N0ciAiZOVybGlnIGRoY3Atb21y5WRlIgorCisjOiBvcHRpb24uYzoxNjk1Cittc2dpZCAib25seSBvbmUgbmV0aWQgdGFnIGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTc0MAorbXNnaWQgImluY29uc2lzdGVudCBESENQIHJhbmdlIgorbXNnc3RyICJpa2tlIGtvbnNpc3RlbnQgREhDUCBvbXLlZGUiCisKKyM6IG9wdGlvbi5jOjE5MTIKKyMsIGZ1enp5Cittc2dpZCAiYmFkIERIQ1AgaG9zdCBuYW1lIgorbXNnc3RyICJk5XJsaWcgTVggbmF2biIKKworIzogb3B0aW9uLmM6MjIwMSBvcHRpb24uYzoyNDgxCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAidWd5bGRpZyBwb3J0bnVtbWVyIgorCisjOiBvcHRpb24uYzoyMjg0CisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgYWxpYXMgcmFuZ2UiCittc2dzdHIgInVneWxkaWcgdmVrdCIKKworIzogb3B0aW9uLmM6MjI5NworIywgZnV6enkKK21zZ2lkICJiYWQgaW50ZXJmYWNlIG5hbWUiCittc2dzdHIgImTlcmxpZyBNWCBuYXZuIgorCisjOiBvcHRpb24uYzoyMzIyCittc2dpZCAiYmFkIENOQU1FIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzMjcKK21zZ2lkICJkdXBsaWNhdGUgQ05BTUUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjM0NworIywgZnV6enkKK21zZ2lkICJiYWQgUFRSIHJlY29yZCIKK21zZ3N0ciAiZOVybGlnIFNSViBwb3N0IgorCisjOiBvcHRpb24uYzoyMzc4CisjLCBmdXp6eQorbXNnaWQgImJhZCBOQVBUUiByZWNvcmQiCittc2dzdHIgImTlcmxpZyBTUlYgcG9zdCIKKworIzogb3B0aW9uLmM6MjQwMworbXNnaWQgIlRYVCByZWNvcmQgc3RyaW5nIHRvbyBsb25nIgorbXNnc3RyICJUWFQgcG9zdCBzdHJlbmcgZm9yIGxhbmciCisKKyM6IG9wdGlvbi5jOjI0NTEKK21zZ2lkICJiYWQgVFhUIHJlY29yZCIKK21zZ3N0ciAiZOVybGlnIFRYVCBwb3N0IgorCisjOiBvcHRpb24uYzoyNDY3Cittc2dpZCAiYmFkIFNSViByZWNvcmQiCittc2dzdHIgImTlcmxpZyBTUlYgcG9zdCIKKworIzogb3B0aW9uLmM6MjQ3NAorbXNnaWQgImJhZCBTUlYgdGFyZ2V0IgorbXNnc3RyICJk5XJsaWcgU1JWIG3lbCIKKworIzogb3B0aW9uLmM6MjQ4OAorbXNnaWQgImludmFsaWQgcHJpb3JpdHkiCittc2dzdHIgInVneWxkaWcgcHJpb3JpdGV0IgorCisjOiBvcHRpb24uYzoyNDk1Cittc2dpZCAiaW52YWxpZCB3ZWlnaHQiCittc2dzdHIgInVneWxkaWcgdmVrdCIKKworIzogb3B0aW9uLmM6MjUxNAorbXNnaWQgInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9EQnVzIHN1cHBvcnQpIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZXMgbmVzdGVkIHRvbyBkZWVwIGluICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1NjUgdGZ0cC5jOjUxMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgImthbiBpa2tlIGxlc2UgJXM6ICVzIgorCisjOiBvcHRpb24uYzoyNjI2Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAibWFuZ2xlciBcIiIKKworIzogb3B0aW9uLmM6MjY3MworbXNnaWQgImJhZCBvcHRpb24iCittc2dzdHIgImTlcmxpZyBvcHNqb24iCisKKyM6IG9wdGlvbi5jOjI2NzUKK21zZ2lkICJleHRyYW5lb3VzIHBhcmFtZXRlciIKK21zZ3N0ciAib3ZlcmZs+GRpZyBwYXJhbWV0ZXIiCisKKyM6IG9wdGlvbi5jOjI2NzcKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciIKK21zZ3N0ciAibWFuZ2xlciBwYXJhbWV0ZXIiCisKKyM6IG9wdGlvbi5jOjI2ODUKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZmVpbCIKKworIzogb3B0aW9uLmM6MjY5MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhdCBsaW5lICVkIG9mICUlcyIKK21zZ3N0ciAiJXMgcOUgbGluamUgJWQgYXYgJSVzIgorCisjOiBvcHRpb24uYzoyNzQwIG9wdGlvbi5jOjI3NzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMiCittc2dzdHIgImxlc2VyICVzIgorCisjOiBvcHRpb24uYzoyODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgdmVyc2lvbiAlcyAgJXNcbiIKK21zZ3N0ciAiRG5zbWFzcSB2ZXJzam9uICVzICVzXG4iCisKKyM6IG9wdGlvbi5jOjI4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbXBpbGUgdGltZSBvcHRpb25zICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJLb21waWxlcmluZ3NvcHNqb25lciAlc1xuIgorIlxuIgorCisjOiBvcHRpb24uYzoyODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLlxuIgorbXNnc3RyICJEZW5uZSBwcm9ncmFtdmFyZW4ga29tbWVyIG1lZCBBQlNPTFVUVCBJTkdFTiBHQVJBTlRJLlxuIgorCisjOiBvcHRpb24uYzoyODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXRcbiIKK21zZ3N0ciAiRE5zbWFzcSBlciBmcmkgcHJvZ3JhbXZhcmUsIGR1IGVyIHZlbGtvbW1lbiB0aWwg5SByZWRpc3RyaWJ1ZXJlIGRlblxuIgorCisjOiBvcHRpb24uYzoyODQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgb3IgMy5cbiIKK21zZ3N0ciAidW5kZXIgdmlsa+VyZW5lIGdpdHQgaSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2pvbiAyLlxuIgorCisjOiBvcHRpb24uYzoyODU4Cittc2dpZCAidHJ5IC0taGVscCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODYwCittc2dpZCAidHJ5IC13IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb21tYW5kIGxpbmUgb3B0aW9uczogJXMiCittc2dzdHIgImTlcmxpZ2Uga29tbWFuZGxpbmplIG9wc2pvbmVyOiAlcy4iCisKKyM6IG9wdGlvbi5jOjI5MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBob3N0LW5hbWU6ICVzIgorbXNnc3RyICJrbGFyZXIgaWtrZSDlIGblIHZlcnRzbmF2bjogJXMiCisKKyM6IG9wdGlvbi5jOjI5MzIKK21zZ2lkICJvbmx5IG9uZSByZXNvbHYuY29uZiBmaWxlIGFsbG93ZWQgaW4gbm8tcG9sbCBtb2RlLiIKK21zZ3N0ciAia3VuIGVuIHJlc29sdi5jb25mIGZpbCB0aWxsYXQgaSBuby1wb2xsIG1vZHVzLiIKKworIzogb3B0aW9uLmM6Mjk0MgorbXNnaWQgIm11c3QgaGF2ZSBleGFjdGx5IG9uZSByZXNvbHYuY29uZiB0byByZWFkIGRvbWFpbiBmcm9tLiIKK21zZ3N0ciAibeUgaGEgbvh5YWt0aWcgZW4gcmVzb2x2LmNvbmYg5SBsZXNlIGRvbWVuZSBmcmEuIgorCisjOiBvcHRpb24uYzoyOTQ1IG5ldHdvcmsuYzo3NTQgZGhjcC5jOjczNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsZXNlICVzOiAlcyIKKworIzogb3B0aW9uLmM6Mjk2MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZWFyY2ggZGlyZWN0aXZlIGZvdW5kIGluICVzIgorbXNnc3RyICJpbnRldCBz+GtlIGRpcmVrdGl2IGZ1bm5ldCBpICVzIgorCisjOiBvcHRpb24uYzoyOTgzCittc2dpZCAidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5ODcKK21zZ2lkICJzeW50YXggY2hlY2sgT0siCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiCittc2dzdHIgIm5hdm5ldGplbmVyICVzIG5la3RldCDlIGdq+HJlIGV0IHJla3Vyc2l2dCBvcHBzbGFnIgorCisjOiBmb3J3YXJkLmM6NDM3Cittc2dpZCAicG9zc2libGUgRE5TLXJlYmluZCBhdHRhY2sgZGV0ZWN0ZWQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICJ1a2plbnQgdGlsa255dG5pbmcgKGludGVyZmFjZSkgJXMiCisKKyM6IG5ldHdvcmsuYzo0MTcgZG5zbWFzcS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpc3RlbmluZyBzb2NrZXQ6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsYWdlIGx5dHRlIHNvY2tldDogJXMiCisKKyM6IG5ldHdvcmsuYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBJUFY2IG9wdGlvbnMgb24gbGlzdGVuaW5nIHNvY2tldDogJXMiCittc2dzdHIgImZlaWxldCDlIHNldHRlIElQdjYgb3Bzam9uZXIgcOUgbHl0dGUgc29ja2V0OiAlcyIKKworIzogbmV0d29yay5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgImZlaWxldCDlIGJpbmRlIGx5dHRlIHNvY2tldCBmb3IgJXM6ICVzIgorCisjOiBuZXR3b3JrLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsaXN0ZW4gb24gc29ja2V0OiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbHl0dGUgcOUgc29ja2V0OiAlcyIKKworIzogbmV0d29yay5jOjQ2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBURlRQIHNvY2tldDogJXMiCittc2dzdHIgImZlaWxldCDlIGxhZ2UgbHl0dGUgc29ja2V0OiAlcyIKKworIzogbmV0d29yay5jOjY2MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgc2VydmVyIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBiaW5kZSBseXR0ZSBzb2NrZXQgZm9yICVzOiAlcyIKKworIzogbmV0d29yay5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIgorbXNnc3RyICJpZ25vcmVyZXIgbmF2bmV0amVuZXIgJXMgLSBsb2thbCB0aWxrbnl0bmluZyIKKworIzogbmV0d29yay5jOjcwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAiaWdub3JlcmVyIG5hdm5ldGplbmVyICVzIC0ga2FuIGlra2UgbGFnZS9kaW5kZSBzb2NrZXQ6ICVzIgorCisjOiBuZXR3b3JrLmM6NzIwCittc2dpZCAidW5xdWFsaWZpZWQiCittc2dzdHIgImlra2Uga3ZhbGlmaXNlcnQiCisKKyM6IG5ldHdvcmsuYzo3MjAKK21zZ2lkICJuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzIyCittc2dpZCAiZGVmYXVsdCIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzI0Cittc2dpZCAiZG9tYWluIgorbXNnc3RyICJkb21lbmUiCisKKyM6IG5ldHdvcmsuYzo3MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbG9jYWwgYWRkcmVzc2VzIG9ubHkgZm9yICVzICVzIgorbXNnc3RyICJiZW55dHRlciBsb2thbGUgYWRyZXNzZXIga3VuIGZvciAlcyAlcyIKKworIzogbmV0d29yay5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIGZvciAlcyAlcyIKK21zZ3N0ciAiYmVueXR0ZXIgbmF2bmV0amVuZXIgJXMjJWQgZm9yICVzICVzIgorCisjOiBuZXR3b3JrLmM6NzMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkKHZpYSAlcykiCittc2dzdHIgImJlbnl0dGVyIG5hdm5ldGplbmVyICVzIyVkIgorCisjOiBuZXR3b3JrLmM6NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQiCittc2dzdHIgImJlbnl0dGVyIG5hdm5ldGplbmVyICVzIyVkIgorCisjOiBkbnNtYXNxLmM6MTQ2CisjLCBmdXp6eQorbXNnaWQgIlRGVFAgc2VydmVyIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX1RGVFAgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIGlra2UgdGlsZ2plbmdlbGlnOiBzZXR0IEhBVkVfREJVUyBpIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE1MQorbXNnaWQgImFzeWNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBTb2xhcmlzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgbGlzdCBvZiBpbnRlcmZhY2VzOiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgZmlubmUgbGlzdGUgYXYgdGlsa255dG5pbmdlciAoaW50ZXJmYWNlcyk6ICVzIgorCisjOiBkbnNtYXNxLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIgorbXNnc3RyICJ1a2plbnQgdGlsa255dG5pbmcgKGludGVyZmFjZSkgJXMiCisKKyM6IGRuc21hc3EuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gaW50ZXJmYWNlIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAiaW5nZW4gdGlsa255dG5pbmcgKGludGVyZmFjZSkgbWVkIGFkcmVzc2UgJXMiCisKKyM6IGRuc21hc3EuYzoyMDEgZG5zbWFzcS5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJEQnVzIGVycm9yOiAlcyIKK21zZ3N0ciAiREJ1cyBmZWlsOiAlcyIKKworIzogZG5zbWFzcS5jOjIwNAorbXNnaWQgIkRCdXMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgaWtrZSB0aWxnamVuZ2VsaWc6IHNldHQgSEFWRV9EQlVTIGkgc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdXNlciBvciBncm91cDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gZmlsZXN5c3RlbSByb290OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIKK21zZ3N0ciAic3RhcnRldCwgdmVyc2pvbiAlcyBtZWxsb21sYWdlciBkZWFrdGl2ZXJ0IgorCisjOiBkbnNtYXNxLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICJzdGFydGV0LCB2ZXJzam9uICVzIG1lbGxvbWxhZ2VyIHN0+HJyZWxzZSAlZCIKKworIzogZG5zbWFzcS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJzdGFydGV0LCB2ZXJzam9uICVzIG1lbGxvbWxhZ2VyIGRlYWt0aXZlcnQiCisKKyM6IGRuc21hc3EuYzo0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJrb21waWxlcmluZ3Mgb3Bzam9uZXI6ICVzIgorCisjOiBkbnNtYXNxLmM6NDYwCittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGNvbm5lY3RlZCB0byBzeXN0ZW0gYnVzIgorbXNnc3RyICJEQnVzIHN0+HR0ZSBha3RpdmVydDoga29ibGV0IHRpbCBzeXN0ZW0gYnVzcyIKKworIzogZG5zbWFzcS5jOjQ2MgorbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBidXMgY29ubmVjdGlvbiBwZW5kaW5nIgorbXNnc3RyICJEQnVzIHN0+HR0ZSBha3RpdmVydDogYXZ2ZW50ZXIgYnVzcyB0aWxrb2JsaW5nIgorCisjOiBkbnNtYXNxLmM6NDY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBmYWlsZWQgdG8gY2hhbmdlIG93bmVyIG9mICVzOiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbGFzdGUgbmF2biBmcmEgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6NDcxCittc2dpZCAic2V0dGluZyAtLWJpbmQtaW50ZXJmYWNlcyBvcHRpb24gYmVjYXVzZSBvZiBPUyBsaW1pdGF0aW9ucyIKK21zZ3N0ciAic2V0dGVyIC0tYmluZC1pbnRlcmZhY2VzIG9wc2pvbiBw5SBncnVubiBhdiBPUyBiZWdyZW5zbmluZ2VyIgorCisjOiBkbnNtYXNxLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGludGVyZmFjZSAlcyBkb2VzIG5vdCBjdXJyZW50bHkgZXhpc3QiCittc2dzdHIgImFkdmFyc2VsOiBuZXR0dmVya3Nrb3J0ICVzIGVrc2lzdGVyZXIgaWtrZSBmb3IgdGlkZW4iCisKKyM6IGRuc21hc3EuYzo0ODEKK21zZ2lkICJ3YXJuaW5nOiBpZ25vcmluZyByZXNvbHYtZmlsZSBmbGFnIGJlY2F1c2Ugbm8tcmVzb2x2IGlzIHNldCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDg0CisjLCBmdXp6eQorbXNnaWQgIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIKK21zZ3N0ciAic2V0dGVyIG9wcHN0cvhtcyB0amVuZXIgZnJhIERCdXMiCisKKyM6IGRuc21hc3EuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgZW5hYmxlZCwgcXVldWUgbGltaXQgaXMgJWQgbWVzc2FnZXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBzdGF0aWMgbGVhc2VzIG9ubHkgb24gJS4wcyVzLCBsZWFzZSB0aW1lICVzIgorbXNnc3RyICJESENQLCBzdGF0aXNrIGxlaWUga3VuIHDlICUuMHMlcywgbGVpZSB0aWQgJXMiCisKKyM6IGRuc21hc3EuYzo1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgcHJveHkgb24gc3VibmV0ICUuMHMlcyUuMHMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBJUCByYW5nZSAlcyAtLSAlcywgbGVhc2UgdGltZSAlcyIKK21zZ3N0ciAiREhDUCwgSVAgb21y5WRlICVzIC0tICVzLCBsZWllIHRpZCAlcyIKKworIzogZG5zbWFzcS5jOjUxOQorbXNnaWQgInJvb3QgaXMgIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo1MTkKKyMsIGZ1enp5Cittc2dpZCAiZW5hYmxlZCIKK21zZ3N0ciAiZGVha3RpdmVydCIKKworIzogZG5zbWFzcS5jOjUyMQorbXNnaWQgInNlY3VyZSBtb2RlIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdHJpY3RpbmcgbWF4aW11bSBzaW11bHRhbmVvdXMgVEZUUCB0cmFuc2ZlcnMgdG8gJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY2NworbXNnaWQgImNvbm5lY3RlZCB0byBzeXN0ZW0gREJ1cyIKK21zZ3N0ciAidGlsa29ibGV0IHRpbCBzeXN0ZW0gREJ1cyIKKworIzogZG5zbWFzcS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbGVzZSAlczogJXMiCisKKyM6IGRuc21hc3EuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIHVzZXItaWQgdG8gJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsYXN0ZSBuYXZuIGZyYSAlczogJXMiCisKKyM6IGRuc21hc3EuYzo3NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgZ3JvdXAtaWQgdG8gJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsYXN0ZSBuYXZuIGZyYSAlczogJXMiCisKKyM6IGRuc21hc3EuYzo3NzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBpZGZpbGUgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsZXNlICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjc3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJrYW4gaWtrZSDlcG5lICVzOiVzIgorCisjOiBkbnNtYXNxLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNoaWxkIHByb2Nlc3Mga2lsbGVkIGJ5IHNpZ25hbCAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNoaWxkIHByb2Nlc3MgZXhpdGVkIHdpdGggc3RhdHVzICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4NDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjdXRlICVzOiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgZuUgdGlsZ2FuZyB0aWwgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6ODg1Cittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgImF2c2x1dHRlciBldHRlciBtb3R0YWsgYXYgU0lHVEVSTSIKKworIzogZG5zbWFzcS5jOjkwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyAlczogJXMiCittc2dzdHIgImZlaWxldCDlIGblIHRpbGdhbmcgdGlsICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICJsZXNlciAlcyIKKworIzogZG5zbWFzcS5jOjkzNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gc2VydmVycyBmb3VuZCBpbiAlcywgd2lsbCByZXRyeSIKK21zZ3N0ciAiaW50ZXQgc/hrZSBkaXJla3RpdiBmdW5uZXQgaSAlcyIKKworIzogZGhjcC5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJrYW4gaWtrZSBsYWdlIERIQ1Agc29ja2V0OiAlcyIKKworIzogZGhjcC5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImZlaWxldCDlIHNldHRlIG9wc2pvbmVyIHDlIERIQ1Agc29ja2V0OiAlcyIKKworIzogZGhjcC5jOjY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBzZXR0ZSBTT19SRVVTRUFERFIgcOUgREhDUCBzb2NrZXQ6ICVzIgorCisjOiBkaGNwLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUCBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgYmluZGUgREhDUCB0amVuZXIgc29ja2V0OiAlcyIKKworIzogZGhjcC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgSUNNUCByYXcgc29ja2V0OiAlcy4iCittc2dzdHIgImthbiBpa2tlIGxhZ2UgSUNNUCByYXcgc29ja2V0OiAlcyIKKworIzogZGhjcC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmFuZ2UgJXMgLS0gJXMgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCBuZXRtYXNrICVzIgorbXNnc3RyICJESENQIG9tcuVkZSAlcyAtLSAlcyBlciBpa2tlIGtvbnNpc3RlbnQgbWVkIG5ldHRtYXNrZSAlcyIKKworIzogZGhjcC5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbGluZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICJk5XJsaWcgbGluamUgdmVkICVzIGxpbmplICVkIgorCisjOiBkaGNwLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICVzIGxpbmUgJWQsIGR1cGxpY2F0ZSBuYW1lIG9yIElQIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorbXNnc3RyICJkdWJsaXNlcnRlIElQIGFkcmVzc2VyIGkgJXMgZGhjcC1jb25maWcgZGlyZWt0aXYuIgorCisjOiBkaGNwLmM6OTAwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyBpbiAlcy4iCittc2dzdHIgImR1Ymxpc2VydGUgSVAgYWRyZXNzZXIgaSAlcyBkaGNwLWNvbmZpZyBkaXJla3Rpdi4iCisKKyM6IGRoY3AuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBpbiBob3N0c2ZpbGUsIHVzaW5nICVzIGZvciBESENQIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo5NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiCittc2dzdHIgImR1Ymxpc2VydGUgSVAgYWRyZXNzZXIgaSAlcyAoJXMpIGkgZGhjcC1jb25maWcgZGlyZWt0aXYiCisKKyM6IGxlYXNlLmM6NjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIG9yIGNyZWF0ZSBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAia2FuIGlra2Ug5XBuZSBlbGxlciBsYWdlIGxlaWUgZmlsOiAlcyIKKworIzogbGVhc2UuYzo5MgorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgImZvciBtYW5nZSBsYWdyZWRlIGxlaWVyIgorCisjOiBsZWFzZS5jOjEyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJ1biBsZWFzZS1pbml0IHNjcmlwdCAlczogJXMiCittc2dzdHIgImthbiBpa2tlIGxlc2UgJXM6ICVzIgorCisjOiBsZWFzZS5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJsZWFzZS1pbml0IHNjcmlwdCByZXR1cm5lZCBleGl0IGNvZGUgJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoyMzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSAlczogJXMgKHJldHJ5IGluICV1cykiCittc2dzdHIgImZlaWxldCDlIGxlc2UgJXM6ICVzIgorCisjOiByZmMyMTMxLmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQIHJlcXVlc3QgJXMgJXMiCittc2dzdHIgImluZ2VuIGFkcmVzc2Ugb21y5WRlIHRpbGdqZW5nZWxpZyBmb3IgREhDUCBrcmF2ICVzICVzIgorCisjOiByZmMyMTMxLmM6MzM3Cittc2dpZCAid2l0aCBzdWJuZXQgc2VsZWN0b3IiCittc2dzdHIgIm1lZCBzdWJuZXQgdmVsZ2VyIgorCisjOiByZmMyMTMxLmM6MzM3Cittc2dpZCAidmlhIgorbXNnc3RyICJ2aWEiCisKKyM6IHJmYzIxMzEuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgQXZhaWxhYmxlIERIQ1Agc3VibmV0OiAlcy8lcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IEF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6Mzg0Cittc2dpZCAiZGlzYWJsZWQiCittc2dzdHIgImRlYWt0aXZlcnQiCisKKyM6IHJmYzIxMzEuYzo0MTggcmZjMjEzMS5jOjg4MyByZmMyMTMxLmM6MTI0MgorbXNnaWQgImlnbm9yZWQiCittc2dzdHIgIm92ZXJzZXR0IgorCisjOiByZmMyMTMxLmM6NDMzIHJmYzIxMzEuYzoxMTAwCittc2dpZCAiYWRkcmVzcyBpbiB1c2UiCittc2dzdHIgImFkcmVzc2UgaSBicnVrIgorCisjOiByZmMyMTMxLmM6NDQ3IHJmYzIxMzEuYzo5MzcKK21zZ2lkICJubyBhZGRyZXNzIGF2YWlsYWJsZSIKK21zZ3N0ciAiaW5nZW4gYWRyZXNzZSB0aWxnamVuZ2VsaWciCisKKyM6IHJmYzIxMzEuYzo0NTQgcmZjMjEzMS5jOjEwNjMKK21zZ2lkICJ3cm9uZyBuZXR3b3JrIgorbXNnc3RyICJnYWx0IG5ldHR2ZXJrIgorCisjOiByZmMyMTMxLmM6NDY3Cittc2dpZCAibm8gYWRkcmVzcyBjb25maWd1cmVkIgorbXNnc3RyICJpbmdlbiBhZHJlc3NlIGtvbmZpZ3VyZXJ0IgorCisjOiByZmMyMTMxLmM6NDczIHJmYzIxMzEuYzoxMTEzCittc2dpZCAibm8gbGVhc2VzIGxlZnQiCittc2dzdHIgImluZ2VuIGxlaWVyIGlnamVuIgorCisjOiByZmMyMTMxLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBwcm92aWRlcyBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IFZlbmRvciBjbGFzczogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBVc2VyIGNsYXNzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NzM3Cittc2dpZCAiUFhFIEJJUyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo4NTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIKK21zZ3N0ciAiZGVha3RpdmVyZXIgREhDUCBzdGF0aXNrIGFkcmVzc2UgJXMiCisKKyM6IHJmYzIxMzEuYzo4NzQKK21zZ2lkICJ1bmtub3duIGxlYXNlIgorbXNnc3RyICJ1a2plbnQgbGVpZSIKKworIzogcmZjMjEzMS5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgbGVhc2VkIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGluIHVzZSBieSB0aGUgc2VydmVyIG9yIHJlbGF5IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5MzUgcmZjMjEzMS5jOjExMDYKK21zZ2lkICJubyB1bmlxdWUtaWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMDMKK21zZ2lkICJ3cm9uZyBzZXJ2ZXItSUQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMjIKK21zZ2lkICJ3cm9uZyBhZGRyZXNzIgorbXNnc3RyICJnYWwgYWRyZXNzZSIKKworIzogcmZjMjEzMS5jOjEwMzkKK21zZ2lkICJsZWFzZSBub3QgZm91bmQiCittc2dzdHIgImxlaWUgaWtrZSBmdW5uZXQiCisKKyM6IHJmYzIxMzEuYzoxMDcxCittc2dpZCAiYWRkcmVzcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJhZHJlc3NlIGlra2UgdGlsZ2plbmdlbGlnIgorCisjOiByZmMyMTMxLmM6MTA4MgorbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgInN0YXRpc2sgbGVpZSB0aWxnamVuZ2VsaWciCisKKyM6IHJmYzIxMzEuYzoxMDg2Cittc2dpZCAiYWRkcmVzcyByZXNlcnZlZCIKK21zZ3N0ciAiYWRyZXNzZSByZXNlcnZlcnQiCisKKyM6IHJmYzIxMzEuYzoxMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdGFnczogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE2MDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHNlcnZlciBuYW1lOiAlcyIKK21zZ3N0ciAiREJ1cyBmZWlsOiAlcyIKKworIzogcmZjMjEzMS5jOjE2MTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IG5leHQgc2VydmVyOiAlcyIKK21zZ3N0ciAiREJ1cyBmZWlsOiAlcyIKKworIzogcmZjMjEzMS5jOjE2ODAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIERIQ1AvQk9PVFAgb3B0aW9uICVkOiBubyBzcGFjZSBsZWZ0IGluIHBhY2tldCIKK21zZ3N0ciAia2FuIGlra2Ugc2VuZGUgREhDUCBvcHNqb24gJWQ6IGlra2UgbWVyIHBsYXNzIGkgcGFra2VuIgorCisjOiByZmMyMTMxLmM6MTkxOQorbXNnaWQgIlBYRSBtZW51IHRvbyBsYXJnZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MjAzNAorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkb21haW4gJXMgZm9yIERIQ1AgaG9zdCBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMDUyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSByZXF1ZXN0ZWQgb3B0aW9uczogJXMiCittc2dzdHIgImtvbXBpbGVyaW5ncyBvcHNqb25lcjogJXMiCisKKyM6IG5ldGxpbmsuYzo2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBuZXRsaW5rIHNvY2tldDogJXMiCittc2dzdHIgImthbiBpa2tlIGJpbmRlIG5ldGxpbmsgc29ja2V0OiAlcyIKKworIzogbmV0bGluay5jOjI2NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibmV0bGluayByZXR1cm5zIGVycm9yOiAlcyIKK21zZ3N0ciAiREJ1cyBmZWlsOiAlcyIKKworIzogZGJ1cy5jOjE1MAorbXNnaWQgImF0dGVtcHQgdG8gc2V0IGFuIElQdjYgc2VydmVyIGFkZHJlc3MgdmlhIERCdXMgLSBubyBJUHY2IHN1cHBvcnQiCittc2dzdHIgImZvcnP4ayBw5SDlIHNldHRlIGVuIElQdjYgdGplbmVyIGFkcmVzc2UgdmlhIERCdXMgLSBpbmdlbiBJUHY2IHN0+HR0ZSIKKworIzogZGJ1cy5jOjI4NgorbXNnaWQgInNldHRpbmcgdXBzdHJlYW0gc2VydmVycyBmcm9tIERCdXMiCittc2dzdHIgInNldHRlciBvcHBzdHL4bXMgdGplbmVyIGZyYSBEQnVzIgorCisjOiBkYnVzLmM6MzI0Cittc2dpZCAiY291bGQgbm90IHJlZ2lzdGVyIGEgREJ1cyBtZXNzYWdlIGhhbmRsZXIiCittc2dzdHIgImt1bm5lIGlra2UgcmVnaXN0cmVyZSBlbiBEQnVzIG1lbGRpbmdzaOVuZHRlcmVyIgorCisjOiBicGYuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIEJQRiBzb2NrZXQ6ICVzIgorbXNnc3RyICJrYW4gaWtrZSBsYWdlIERIQ1AgQlBGIHNvY2tldDogJXMiCisKKyM6IGJwZi5jOjE3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZXF1ZXN0IGZvciB1bnN1cHBvcnRlZCBoYXJkd2FyZSB0eXBlICglZCkgcmVjZWl2ZWQgb24gJXMiCittc2dzdHIgIkRIQ1Aga3JhdiBmb3IgaWtrZSBzdPh0dGV0IG1hc2tpbnZhcmUgdHlwZSAoJWQpIG1vdHRhdHQgcOUgJXMiCisKKyM6IHRmdHAuYzoxNzkKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGZyZWUgcG9ydCBmb3IgVEZUUCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgc2VudCAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MzA1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAibGVpZSBpa2tlIGZ1bm5ldCIKKworIzogdGZ0cC5jOjQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGVycm9yICVkICVzIHJlY2VpdmVkIGZyb20gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjQ0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbGVzZSAlczogJXMiCisKKyM6IGxvZy5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyZmxvdzogJWQgbG9nIGVudHJpZXMgbG9zdCIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogbG9nLmM6NDE1Cittc2dpZCAiRkFJTEVEIHRvIHN0YXJ0IHVwIgorbXNnc3RyICJGRUlMRVQg5SBzdGFydGUgb3BwIgorCisjfiBtc2dpZCAibXVzdCBzZXQgZXhhY3RseSBvbmUgaW50ZXJmYWNlIG9uIGJyb2tlbiBzeXN0ZW1zIHdpdGhvdXQgSVBfUkVDVklGIgorI34gbXNnc3RyICJt5SBzZXR0ZSBu+Hlha3RpZyBldCBpbnRlcmZhY2UgcOUg+GRlbGFndGUgc3lzdGVtZXIgdXRlbiBJUF9SRUNWSUYiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiZmFpbGVkIHRvIGxvYWQgJXM6ICVzIgorI34gbXNnc3RyICJmZWlsZXQg5SBsYXN0ZSAlczogJXMiCisKKyN+IG1zZ2lkICJiYWQgbmFtZSBpbiAlcyIKKyN+IG1zZ3N0ciAiZOVybGlnIG5hdm4gaSAlcyIKKworI34gbXNnaWQgIklnbm9yaW5nIERIQ1AgbGVhc2UgZm9yICVzIGJlY2F1c2UgaXQgaGFzIGFuIGlsbGVnYWwgZG9tYWluIHBhcnQiCisjfiBtc2dzdHIgIklnbm9yZXJlciBESENQIGxlaWUgZm9yICVzIHNpZGVuIGRlbiBoYXIgZW4gdWxvdmxpZyBkb21lbmUgZGVsIgorCisjfiBtc2dpZCAiSVNDIGRoY3BkIGludGVncmF0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0lTQ19SRUFERVIgaW4gc3JjL2NvbmZpZy5oIgorI34gbXNnc3RyICJJU0MgZGhjcGYgaW50ZWdyYXNqb24gaWtrZSB0aWxnamVuZ2VsaWc6IHNldHQgSEFWRV9JU0NfUkVBREVSIGkgc3JjL2NvbmZpZy5oIgorCisjLCBmdXp6eQorI34gbXNnaWQgImlsbGVnYWwgZG9tYWluICVzIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZS4iCisjfiBtc2dzdHIgImR1Ymxpc2VydGUgSVAgYWRyZXNzZXIgaSAlcyBkaGNwLWNvbmZpZyBkaXJla3Rpdi4iCisKKyN+IG1zZ2lkICJydW5uaW5nIGFzIHJvb3QiCisjfiBtc2dzdHIgImtq+HJlciBzb20gcm90IChyb290KSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJyZWFkICVzIC0gJWQgaG9zdHMiCisjfiBtc2dzdHIgImxlcyAlcyAtICVkIGFkcmVzc2VyIgorCisjfiBtc2dpZCAiYmFkIGRoY3AtaG9zdCIKKyN+IG1zZ3N0ciAiZOVybGlnIGRoY3AtdmVydCIKKworI34gbXNnaWQgImRvbWFpbnMiCisjfiBtc2dzdHIgImRvbWVuZXIiCisKKyN+IG1zZ2lkICJJZ25vcmluZyBESENQIGhvc3QgbmFtZSAlcyBiZWNhdXNlIGl0IGhhcyBhbiBpbGxlZ2FsIGRvbWFpbiBwYXJ0IgorI34gbXNnc3RyICJJZ25vcmVyZXIgREhDUCB2ZXJ0cyBuYXZuICVzIHDlIGdydW5uIGF2IHVsb3ZsaWcgZG9tZW5lIGRlbCIKKworI34gbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiIKKyN+IG1zZ3N0ciAiVmlzIGRlbm5lIG1lbGRpbmdlbi4iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczogJW0iCisjfiBtc2dzdHIgImZlaWxldCDlIGxlc2UgJXM6ICVtIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6JW0iCisjfiBtc2dzdHIgImZlaWxldCDlIGxlc2UgJXM6JW0iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiY2Fubm90IHNlbmQgZW5jYXBzdWxhdGVkIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiB3cmFwcGVyIgorI34gbXNnc3RyICJrYW4gaWtrZSBzZW5kZSBESENQIG9wc2pvbiAlZDogaWtrZSBtZXIgcGxhc3MgaSBwYWtrZW4iCisKKyN+IG1zZ2lkICJNb3JlIHRoYW4gb25lIHZlbmRvciBjbGFzcyBtYXRjaGVzLCB1c2luZyAlcyIKKyN+IG1zZ3N0ciAiTWVyIGVubiBlbiBwcm9kdXNlbnQga2xhc3NlIHNvbSBwYXNzZXIsIGJydWtlciAlcyIKKworI34gbXNnaWQgImZvcndhcmRpbmcgdGFibGUgb3ZlcmZsb3c6IGNoZWNrIGZvciBzZXJ2ZXIgbG9vcHMuIgorI34gbXNnc3RyICJmcmVtc2VuZGVsc2UgKGZvcndhcmRpbmcpIHRhYmVsbCBvdmVyZmx5dDogc2pla2sgZXR0ZXIgdGplbmVyIGz4a2tlci4iCisKKyN+IG1zZ2lkICJuZXN0ZWQgaW5jbHVkZXMgbm90IGFsbG93ZWQiCisjfiBtc2dzdHIgIm74c3RlZGUgaW5rbHVkZXJpbmdlciBlciBpa2tlIHRpbGxhdHQiCisKKyN+IG1zZ2lkICJESENQLCAlcyB3aWxsIGJlIHdyaXR0ZW4gZXZlcnkgJXMiCisjfiBtc2dzdHIgIkRIQ1AsICVzIHZpbCBibGkgc2tyZXZldCBodmVyICVzIgorCisjfiBtc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIHBhY2tldCBzb2NrZXQ6ICVzLiBJcyBDT05GSUdfUEFDS0VUIGVuYWJsZWQgaW4geW91ciBrZXJuZWw/IgorI34gbXNnc3RyICJrYW4gaWtrZSBsYWdlIERIQ1AgcGFra2Ugc29ja2V0OiAlcy4gRXIgQ09ORklHX1BBQ0tFVCBha3RpdmVydCBpIGRpbiBramVybmU/IgorCisjfiBtc2dpZCAiQ2Fubm90IHVzZSBSVG5ldGxpbmsgc29ja2V0LCBmYWxsaW5nIGJhY2sgdG8gaW9jdGwgQVBJIgorI34gbXNnc3RyICJLYW4gaWtrZSBiZW55dHRlIFJUbmV0bGluayBzb2NrZXQsIGZhbGxlciB0aWxiYWtlIHRpbCBpb2N0bCBBUEkiCmRpZmYgLS1naXQgYS9wby9wbC5wbyBiL3BvL3BsLnBvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFjY2FhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9wby9wbC5wbwpAQCAtMCwwICsxLDE0MjAgQEAKKyMgdHJhbnNsYXRpb24gb2YgcGwucG8gdG8gcG9sc2tpCisjIFBvbGlzaCB0cmFuc2xhdGlvbnMgZm9yIGRuc21hc3EgcGFja2FnZS4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMKKyMgVG9tYXN6IFNvY2hh8XNraSA8bmVyZGhlcm9AZ21haWwuY29tPiwgMjAwNS4KKyMgSmFuIFBzb3RhIDxqYXNpdUBiZWxzem5pY2EucGw+LCAyMDA4LCAyMDA5LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogcGxcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDktMDYtMTAgMjA6NTcrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMTAtMDIgMjA6MzArMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmFuIFBzb3RhIDxqYXNpdUBiZWxzem5pY2EucGw+XG4iCisiTGFuZ3VhZ2UtVGVhbTogUG9saXNoIDxrZGUtaTE4bi1kb2NAa2RlLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0yXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogIG5wbHVyYWxzPTM7IHBsdXJhbD0obj09MSA/IDAgOiBuJTEwPj0yICYmIG4lMTA8PTQgJiYgKG4lMTAwPDEwIHx8IG4lMTAwPj0yMCkgPyAxIDogMik7XG4iCisiWC1HZW5lcmF0b3I6IExva2FsaXplIDEuMFxuIgorIlgtTGFuZ3VhZ2U6IHBsX1BMXG4iCisKKyM6IGNhY2hlLmM6NzY0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIG5hbWVzIGZyb20gJXM6ICVzIgorbXNnc3RyICJuaWUgcG90cmFmaeogd2N6eXRh5iBuYXp3IHogJXM6ICVzIgorCisjOiBjYWNoZS5jOjc5OCBkaGNwLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImKz6mRueSBhZHJlcyB3IHBsaWt1ICVzLCB3IGxpbmlpICVkIgorCisjOiBjYWNoZS5jOjg1NiBkaGNwLmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImKz6mRuYSBuYXp3YSB3IHBsaWt1ICVzLCB3IGxpbmlpICVkIgorCisjOiBjYWNoZS5jOjg2MyBkaGNwLmM6ODc1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMgLSAlZCBhZGRyZXNzZXMiCittc2dzdHIgIndjenl0YbNlbSAlcyAtICVkIGFkcmVz83ciCisKKyM6IGNhY2hlLmM6OTAyCittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAid3ljenlzemN6b25vIHBhbWnq5iBwb2Ry6mN6brEiCisKKyM6IGNhY2hlLmM6OTMzIG9wdGlvbi5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyBkaXJlY3RvcnkgJXM6ICVzIgorbXNnc3RyICJicmFrIGRvc3TqcHUgZG8ga2F0YWxvZ3UgJXM6ICVzIgorCisjOiBjYWNoZS5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGdpdmluZyBuYW1lICVzIHRvIHRoZSBESENQIGxlYXNlIG9mICVzIGJlY2F1c2UgdGhlIG5hbWUgZXhpc3RzIGluICVzIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAibmF6d2EgJXMgbmllIHpvc3Rhs2EgbmFkYW5hIGR6aWVyv2F3aWUgREhDUCAlcyxwb25pZXdhvyBuYXp3YSBpc3RuaWVqZSB3ICVzIGkgbWEganW/IGFkcmVzICVzIgorCisjOiBjYWNoZS5jOjExMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSAlbHUiCittc2dzdHIgImN6YXMgJWx1IgorCisjOiBjYWNoZS5jOjExMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FjaGUgc2l6ZSAlZCwgJWQvJWQgY2FjaGUgaW5zZXJ0aW9ucyByZS11c2VkIHVuZXhwaXJlZCBjYWNoZSBlbnRyaWVzLiIKK21zZ3N0ciAid2llbGtvtuYgcGFtaepjaSBwb2Ry6mN6bmVqOiAlZDsgJWQgeiAlZCBtaWVqc2MgYWt0dWFsbnljaCB3cGlz83cgdb95dG8gcG9ub3duaWUuIgorCisjOiBjYWNoZS5jOjExMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicXVlcmllcyBmb3J3YXJkZWQgJXUsIHF1ZXJpZXMgYW5zd2VyZWQgbG9jYWxseSAldSIKK21zZ3N0ciAiJXUgemFweXRh8SBwcnplc7NhbnljaCBkYWxlaiwgJXUgb2Rwb3dpZWR6aSB1ZHppZWxvbnljaCBzYW1vZHppZWxuaWUiCisKKyM6IGNhY2hlLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgInNlcndlciAlcyMlZDogJXUgemFweXRh8SB3eXOzYW55Y2gsICV1IHBvbm93aW9ueWNoIGx1YiBuaWV1ZGFueWNoIgorCisjOiB1dGlsLmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIKK21zZ3N0ciAiYnJhayBtb79saXdvtmNpIHW/eWNpYSBnZW5lcmF0b3JhIGxpY3piIGxvc293eWNoOiAlcyIKKworIzogdXRpbC5jOjE5MQorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiCittc2dzdHIgIm5pZSB1ZGGzbyBzaeogcHJ6eWR6aWVsaeYgcGFtaepjaSIKKworIzogdXRpbC5jOjIyOSBvcHRpb24uYzo1NDgKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAibmllIG1vv25hIGRvc3Rh5iBwYW1p6mNpIgorCisjOiB1dGlsLmM6MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgImKzsWQgcG9kY3phcyBwcvNieSB1dHdvcnplbmlhIHBvdG9rdTogJXMiCisKKyM6IHV0aWwuYzoyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlICVkIGJ5dGVzIgorbXNnc3RyICJuaWVtb79saXdvtuYgcHJ6eWR6aWVsZW5pYSAlZCBiYWp083cgcGFtaepjaSIKKworIzogdXRpbC5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZpbml0ZSIKK21zZ3N0ciAibmllc2tv8WN6b25hIgorCisjOiBvcHRpb24uYzoyMjgKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIldza2F6YW5pZSBhZHJlc/N3LCBuYSBrdPNyeWNoIG5hbGW/eSBuYXOzdWNoaXdh5i4iCisKKyM6IG9wdGlvbi5jOjIyOQorbXNnaWQgIlJldHVybiBpcGFkZHIgZm9yIGFsbCBob3N0cyBpbiBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIlp3cmFjYW5pZSBhZHJlc3UgSVAgZGxhIHdzenlzdGtpY2ggaG9zdPN3IHdlIHdza2F6YW55Y2ggZG9tZW5hY2guIgorCisjOiBvcHRpb24uYzoyMzAKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiV3mzsWN6ZW5pZSBwcnpla2F6eXdhbmlhIHphcHl0YfEgb2R3cm90bnljaCBkbGEgcHJ5d2F0bnljaCB6YWtyZXPzdyBJUC4iCisKKyM6IG9wdGlvbi5jOjIzMQorbXNnaWQgIlRyZWF0IGlwYWRkciBhcyBOWERPTUFJTiAoZGVmZWF0cyBWZXJpc2lnbiB3aWxkY2FyZCkuIgorbXNnc3RyICJUcmFrdG93YW5pZSBhZHJlc3UgSVAgamFrbyBOWERPTUFJTiAodW5pZXdhv25pYSAsLFZlcmlzaWduIHdpbGRjYXJkJycpLiIKKworIzogb3B0aW9uLmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGluIGVudHJpZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIldza2F6YW5pZSB3aWVsa2+2Y2kgcGFtaepjaSBwb2Ry6mN6bmVqIChkb215tmxuaWU6ICVzIG1pZWpzYykuIgorCisjOiBvcHRpb24uYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIldza2F6YW5pZSBwbGlrdSBrb25maWd1cmFjeWpuZWdvIChkb215tmxuaWU6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjIzNAorbXNnaWQgIkRvIE5PVCBmb3JrIGludG8gdGhlIGJhY2tncm91bmQ6IHJ1biBpbiBkZWJ1ZyBtb2RlLiIKK21zZ3N0ciAiTklFIHR383J6IHByb2Nlc3UgcG90b21uZWdvIHcgdGxlOiBkemlhs2FuaWUgdyB0cnliaWUgZGVidWdvd2FuaWEuIgorCisjOiBvcHRpb24uYzoyMzUKK21zZ2lkICJEbyBOT1QgZm9yd2FyZCBxdWVyaWVzIHdpdGggbm8gZG9tYWluIHBhcnQuIgorbXNnc3RyICJXebOxY3plbmllIHByemVrYXp5d2FuaWEgemFweXRh8SBiZXogcG9kYW5laiBjeuq2Y2kgZG9tZW5vd2VqLiIKKworIzogb3B0aW9uLmM6MjM2Cittc2dpZCAiUmV0dXJuIHNlbGYtcG9pbnRpbmcgTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICJad3JhY2FuaWUgc2Ftb3dza2F6dWqxY2VnbyByZWtvcmR1IE1YIGRsYSBsb2thbG55Y2ggaG9zdPN3LiIKKworIzogb3B0aW9uLmM6MjM3Cittc2dpZCAiRXhwYW5kIHNpbXBsZSBuYW1lcyBpbiAvZXRjL2hvc3RzIHdpdGggZG9tYWluLXN1ZmZpeC4iCittc2dzdHIgIlJvendpamFuaWUgcHJvc3R5Y2ggbmF6dyB6IC9ldGMvaG9zdHMgcHJ6eXJvc3RraWVtIGRvbWVub3d5bS4iCisKKyM6IG9wdGlvbi5jOjIzOAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIld5s7FjemVuaWUgcHJ6ZWthenl3YW5pYSBwb3pvcm55Y2ggemFweXRh8SBETlMgeiBrb21wdXRlcvN3IGR6aWGzYWqxY3ljaCBwb2QgV2luZG93cy4iCisKKyM6IG9wdGlvbi5jOjIzOQorbXNnaWQgIkVuYWJsZSBESENQIGluIHRoZSByYW5nZSBnaXZlbiB3aXRoIGxlYXNlIGR1cmF0aW9uLiIKK21zZ3N0ciAiV7OxY3plbmllIHNlcndlcmEgREhDUCBkbGEgd3NrYXphbmVnbyB6YWtyZXN1IGFkcmVz83cuIgorCisjOiBvcHRpb24uYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgZ3JvdXAgYWZ0ZXIgc3RhcnR1cCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiUG8gdXJ1Y2hvbWllbml1IHptaWFuYSBncnVweSBwcm9jZXN1IG5hIHBvZGFusSAoZG9tebZsbmllOiAlcykuIgorCisjOiBvcHRpb24uYzoyNDEKK21zZ2lkICJTZXQgYWRkcmVzcyBvciBob3N0bmFtZSBmb3IgYSBzcGVjaWZpZWQgbWFjaGluZS4iCittc2dzdHIgIlVzdGF3aWVuaWUgYWRyZXN1IGx1YiBuYXp3eSBkbGEgd3NrYXphbmVnbyBrb21wdXRlcmEuIgorCisjOiBvcHRpb24uYzoyNDIKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUiCittc2dzdHIgIldjenl0YW5pZSB6IHBvZGFuZWdvIHBsaWt1IG9waXN1IG1hc3p5biBuYSBwb3RyemVieSBESENQLiIKKworIzogb3B0aW9uLmM6MjQzCittc2dpZCAiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUiCittc2dzdHIgIldjenl0YW5pZSB6IHBvZGFuZWdvIHBsaWt1IHdhcnRvtmNpIG9wY2ppIERIQ1AuIgorCisjOiBvcHRpb24uYzoyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIGxvYWQgJXMgZmlsZS4iCittc2dzdHIgIk5pZSB3Y3p5dHl3YW5pZSBwbGlrdSAlcy4iCisKKyM6IG9wdGlvbi5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiV3NrYXphbmllIGRvZGF0a293ZWdvIHBsaWt1ICdob3N0cycgb3By82N6ICVzLiIKKworIzogb3B0aW9uLmM6MjQ2Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiSW50ZXJmZWpzeSwgbmEga3TzcnljaCBuYXOzdWNoaXdh5i4iCisKKyM6IG9wdGlvbi5jOjI0NworbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIE5PVCB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJJbnRlcmZlanN5LCBuYSBrdPNyeWNoIE5JRSBuYXOzdWNoaXdh5i4iCisKKyM6IG9wdGlvbi5jOjI0OAorbXNnaWQgIk1hcCBESENQIHVzZXIgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiUHJ6eXBvcnqxZGtvd2FuaWUgem5hY3puaWthIHcgemFsZb9ub7ZjaSBvZCBrbGFzeSB1v3l0a293bmlrYSBESENQLiIKKworIzogb3B0aW9uLmM6MjQ5Cittc2dpZCAiTWFwIFJGQzMwNDYgY2lyY3VpdC1pZCB0byB0YWcuIgorbXNnc3RyICJQcnp5cG9yerFka293YW5pZSB6bmFjem5pa2EgdyB6YWxlv25vtmNpIG9kIG51bWVydSBvYndvZHUgKHcgcm96dW1pZW5pdSBSRkMzMDQ2KS4iCisKKyM6IG9wdGlvbi5jOjI1MAorbXNnaWQgIk1hcCBSRkMzMDQ2IHJlbW90ZS1pZCB0byB0YWcuIgorbXNnc3RyICJQcnp5cG9yerFka293YW5pZSB6bmFjem5pa2EgdyB6YWxlv25vtmNpIG9kIG51bWVydSBhZ2VudGEgKHcgcm96dW1pZW5pdSBSRkMzMDQ2KS4iCisKKyM6IG9wdGlvbi5jOjI1MQorbXNnaWQgIk1hcCBSRkMzOTkzIHN1YnNjcmliZXItaWQgdG8gdGFnLiIKK21zZ3N0ciAiUHJ6eXBvcnqxZGtvd2FuaWUgem5hY3puaWthIHcgemFsZb9ub7ZjaSBvZCBudW1lcnUgc3Vic2tyeWJlbnRhICh3IHJvenVtaWVuaXUgUkZDMzk5MykuIgorCisjOiBvcHRpb24uYzoyNTIKK21zZ2lkICJEb24ndCBkbyBESENQIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJXebOxY3plbmllIERIQ1AgZGxhIGhvc3TzdyB6IG9rcmW2bG9ueW0gem5hY3puaWtpZW0uIgorCisjOiBvcHRpb24uYzoyNTMKK21zZ2lkICJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiV3ltdXN6ZW5pZSBvZHBvd2llZHppIHcgdHJ5YmllIHJvemezb3N6ZW5pb3d5bSBkbGEgaG9zdPN3IHogb2tyZbZsb255bSB6bmFjem5pa2llbS4iCisKKyM6IG9wdGlvbi5jOjI1NAorbXNnaWQgIkRvIE5PVCBmb3JrIGludG8gdGhlIGJhY2tncm91bmQsIGRvIE5PVCBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIk5JRSB0d/NyeiBwcm9jZXN1IHBvdG9tbmVnbyB3IHRsZSBpIE5JRSB3s7FjemFqIHRyeWJ1IGRlYnVnb3dhbmlhLiIKKworIzogb3B0aW9uLmM6MjU1Cittc2dpZCAiQXNzdW1lIHdlIGFyZSB0aGUgb25seSBESENQIHNlcnZlciBvbiB0aGUgbG9jYWwgbmV0d29yay4iCittc2dzdHIgIlpha7NhZGFuaWUsIL9lIGplc3Rltm15IGplZHlueW0gc2Vyd2VyZW0gREhDUCB3IHNpZWNpIGxva2FsbmVqLiIKKworIzogb3B0aW9uLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgd2hlcmUgdG8gc3RvcmUgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIqZjaWW/a2EgcHJ6ZWNob3d5d2FuaWEgcGxpa3UgZHppZXK/YXcgREhDUCAoZG9tebZsbmllOiAlcykuIgorCisjOiBvcHRpb24uYzoyNTcKK21zZ2lkICJSZXR1cm4gTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICJXs7FjemVuaWUgendyYWNhbmlhIHJla29yZHUgTVggZGxhIGhvc3TzdyBsb2thbG55Y2guIgorCisjOiBvcHRpb24uYzoyNTgKK21zZ2lkICJTcGVjaWZ5IGFuIE1YIHJlY29yZC4iCittc2dzdHIgIlNwZWN5ZmlrYWNqYSByZWtvcmR1IE1YLiIKKworIzogb3B0aW9uLmM6MjU5Cittc2dpZCAiU3BlY2lmeSBCT09UUCBvcHRpb25zIHRvIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiT2tyZbZsZW5pZSBvcGNqaSBCT09UUCBzZXJ3ZXJhIERIQ1AuIgorCisjOiBvcHRpb24uYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIHBvbGwgJXMgZmlsZSwgcmVsb2FkIG9ubHkgb24gU0lHSFVQLiIKK21zZ3N0ciAiV3mzsWN6ZW5pZSBvYnNlcndhY2ppIHBsaWt1ICVzLCBwb25vd25lIG9kY3p5dHl3YW5pZSB0eWxrbyBwbyBvZGVicmFuaXUgc3lnbmGzdSBTSUdIVVAuIgorCisjOiBvcHRpb24uYzoyNjEKK21zZ2lkICJEbyBOT1QgY2FjaGUgZmFpbGVkIHNlYXJjaCByZXN1bHRzLiIKK21zZ3N0ciAiV3mzsWN6ZW5pZSBwcnplY2hvd3l3YW5pYSB3IHBhbWnqY2kgcG9kcupjem5laiB3eW5pa/N3IG5pZXVkYW55Y2ggd3lzenVraXdh8S4iCisKKyM6IG9wdGlvbi5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgbmFtZXNlcnZlcnMgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIGdpdmVuIGluICVzLiIKK21zZ3N0ciAiT2RweXR5d2FuaWUgc2Vyd2Vy83cgbmF6dyB3IGtvbGVqbm+2Y2kgaWNoIHd5c3SxcGllbmlhIHcgJXMuIgorCisjOiBvcHRpb24uYzoyNjMKK21zZ2lkICJTcGVjaWZ5IG9wdGlvbnMgdG8gYmUgc2VudCB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICJTcGVjeWZpa2FjamEgb3Bjamkgd3lzebNhbmVqIGRvIGtsaWVudPN3IERIQ1AuIgorCisjOiBvcHRpb24uYzoyNjQKK21zZ2lkICJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIKK21zZ3N0ciAiT3BjamEgREhDUCB3eXN5s2FuYSBuYXdldCBqZb9lbGkga2xpZW50IG8gbmmxIG5pZSBwcm9zaS4iCisKKyM6IG9wdGlvbi5jOjI2NQorbXNnaWQgIlNwZWNpZnkgcG9ydCB0byBsaXN0ZW4gZm9yIEROUyByZXF1ZXN0cyBvbiAoZGVmYXVsdHMgdG8gNTMpLiIKK21zZ3N0ciAiV3NrYXphbmllIHBvcnR1IGRvIG5hc7N1Y2hpd2FuaWEgemFweXRh8SBETlMgKGRvbXm2bG5pZTogNTMpLiIKKworIzogb3B0aW9uLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gc3VwcG9ydGVkIFVEUCBwYWNrZXQgc2l6ZSBmb3IgRUROUy4wIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJNYWtzeW1hbG5hIG9ic7N1Z2l3YW5hIHdpZWxrb7bmIHBha2lldHUgRUROUy4wIChkb215tmxuaWU6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjI2NworbXNnaWQgIkxvZyBETlMgcXVlcmllcy4iCittc2dzdHIgIlezsWN6ZW5pZSBzcGlzeXdhbmlhIHphcHl0YfEgRE5TIGRvIGxvZ3UuIgorCisjOiBvcHRpb24uYzoyNjgKK21zZ2lkICJGb3JjZSB0aGUgb3JpZ2luYXRpbmcgcG9ydCBmb3IgdXBzdHJlYW0gRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJXeW11c3plbmllIHW/eWNpYSB3c2themFuZWdvIHBvcnR1IFVEUCBkbyBvZHB5dHl3YW5pYSBuYWRyeupkbnljaCBzZXJ3ZXLzdyBETlMgaSBvZGJpZXJhbmlhIG9kIG5pY2ggb2Rwb3dpZWR6aS4iCisKKyM6IG9wdGlvbi5jOjI2OQorbXNnaWQgIkRvIE5PVCByZWFkIHJlc29sdi5jb25mLiIKK21zZ3N0ciAiV3mzsWN6ZW5pZSBjenl0YW5pYSBwbGlrdSByZXNvbHYuY29uZi4iCisKKyM6IG9wdGlvbi5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIldza2F6YW5pZSBwb7Nvv2VuaWEgcGxpa3UgcmVzb2x2LmNvbmYgKGRvbXm2bG5pZTogJXMpLiIKKworIzogb3B0aW9uLmM6MjcxCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iCittc2dzdHIgIldza2F6eXdhbmllIGFkcmVz83cgc2Vyd2Vy83cgbmF6dywgb3Bjam9uYWxuaWUgeiBwcnp5cGlzYW5pZW0gZG8gZG9tZW55LiIKKworIzogb3B0aW9uLmM6MjcyCittc2dpZCAiTmV2ZXIgZm9yd2FyZCBxdWVyaWVzIHRvIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiV3mzsWN6ZW5pZSBwcnpla2F6eXdhbmlhIHphcHl0YfEgZG8gd3NrYXphbnljaCBkb21lbi4iCisKKyM6IG9wdGlvbi5jOjI3MworbXNnaWQgIlNwZWNpZnkgdGhlIGRvbWFpbiB0byBiZSBhc3NpZ25lZCBpbiBESENQIGxlYXNlcy4iCittc2dzdHIgIldza2F6YW5pZSBkb21lbnkgZGxhIHNlcndlcmEgREhDUC4iCisKKyM6IG9wdGlvbi5jOjI3NAorbXNnaWQgIlNwZWNpZnkgZGVmYXVsdCB0YXJnZXQgaW4gYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiT2tyZbZsZW5pZSBkb215tmxuZWdvIGNlbHUgdyByZWtvcmR6aWUgTVguIgorCisjOiBvcHRpb24uYzoyNzUKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciByZXBsaWVzIGZyb20gL2V0Yy9ob3N0cy4iCittc2dzdHIgIk9rcmW2bGVuaWUgKHcgc2VrdW5kYWNoKSBjemFzdSB3Yb9ub7ZjaSBvZHBvd2llZHppIHVkemllbG9ueWNoIG5hIHBvZHN0YXdpZSAvZXRjL2hvc3RzIChkb215tmxuaWUgMCkuIgorCisjOiBvcHRpb24uYzoyNzYKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciBuZWdhdGl2ZSBjYWNoaW5nLiIKK21zZ3N0ciAiT2tyZbZsZW5pZSAodyBzZWt1bmRhY2gpIGN6YXN1IHdhv25vtmNpIG5lZ2F0eXdueWNoIG9kcG93aWVkemkuIgorCisjOiBvcHRpb24uYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgdXNlciBhZnRlciBzdGFydHVwLiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiWm1pYW5hIHW/eXRrb3duaWthIHByb2Nlc3UgbmEgd3NrYXphbmVnbyAocG8gdXJ1Y2hvbWllbml1LCBkb215tmxuaWU6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjI3OAorbXNnaWQgIk1hcCBESENQIHZlbmRvciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJQcnp5cG9yerFka293YW5pZSB6bmFjem5pa2EgdyB6YWxlv25vtmNpIG9kIHR5cHUga2xpZW50YSBESENQLiIKKworIzogb3B0aW9uLmM6Mjc5Cittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIld5ZHJ1a293YW5pZSBpbmZvcm1hY2ppIG8gcHJvZ3JhbWllIGkgb2Nocm9uaWUgcHJhdyBhdXRvcnNraWNoLiIKKworIzogb3B0aW9uLmM6MjgwCittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIlSzdW1hY3plbmllIGFkcmVz83cgSVB2NCB6IHNlcndlcvN3IG5hZHJ66mRueWNoLiIKKworIzogb3B0aW9uLmM6MjgxCittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICJPa3JltmxlbmllIHJla29yZHUgU1JWLiIKKworIzogb3B0aW9uLmM6MjgyCittc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIFVzZSAtLWhlbHAgZGhjcCBmb3Iga25vd24gREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiV3m2d2lldGxhIHRlbiBrb211bmlrYXQuIFW/eWogJy0taGVscCBkaGNwJyBjaGOxYyBwcnplanJ6ZeYgbGlzdOogb3BjamkgREhDUCAoZGhjcC1vcHRpb249eHh4LC4uLikuIgorCisjOiBvcHRpb24uYzoyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIG9mIFBJRCBmaWxlIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJPa3JltmxlbmllILZjaWW/a2kgZG8gcGxpa3UgUElEIChkb215tmxuaWU6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJNYWtzeW1hbG5hIGxpY3piYSBkemllcr9hdyBESENQIChkb215tmxuaWU6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjI4NQorbXNnaWQgIkFuc3dlciBETlMgcXVlcmllcyBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlIGEgcXVlcnkgd2FzIHNlbnQgdG8uIgorbXNnc3RyICJVemFsZb9uaWVuaWUgb2Rwb3dpZWR6aSBETlMgb2QgaW50ZXJmZWpzdSwgbmEga3TzcnltIG9kZWJyYW5vIHphcHl0YW5pZSAod3lnb2RuZSBkbGEgc2Vyd2Vy83cga2lsa3UgcG9kc2llY2kgeiBy879ueW1pIGFkcmVzYW1pIHcgL2V0Yy9ob3N0cykuIgorCisjOiBvcHRpb24uYzoyODYKK21zZ2lkICJTcGVjaWZ5IFRYVCBETlMgcmVjb3JkLiIKK21zZ3N0ciAiU3BlY3lmaWthY2phIHJla29yZHUgRE5TIFRYVC4iCisKKyM6IG9wdGlvbi5jOjI4NworbXNnaWQgIlNwZWNpZnkgUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICJTcGVjeWZpa2FjamEgcmVrb3JkdSBETlMgUFRSLiIKKworIzogb3B0aW9uLmM6Mjg4Cittc2dpZCAiR2l2ZSBETlMgbmFtZSB0byBJUHY0IGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiIKK21zZ3N0ciAiWndyYWNhIG5henfqIGRvbWVub3exIHBvd2mxemFusSB6IGFkcmVzZW0gaW50ZXJmZWpzdSBzaWVjaW93ZWdvLiIKKworIzogb3B0aW9uLmM6Mjg5Cittc2dpZCAiQmluZCBvbmx5IHRvIGludGVyZmFjZXMgaW4gdXNlLiIKK21zZ3N0ciAiTmFzs3VjaGl3YW5pZSB0eWxrbyBuYSB3eWtvcnp5c3R5d2FueWNoIGludGVyZmVqc2FjaCAodW1vv2xpd2lhIHVydWNob21pZW5pZSBvc29ibnljaCBzZXJ3ZXLzdyBkbGEgcvO/bnljaCBrYXJ0KS4iCisKKyM6IG9wdGlvbi5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iCittc2dzdHIgIldjenl0YW5pZSBwcnp5cG9yerFka293YfEgYWRyZXPzdyB6ICVzLiIKKworIzogb3B0aW9uLmM6MjkxCittc2dpZCAiRW5hYmxlIHRoZSBEQnVzIGludGVyZmFjZSBmb3Igc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzLCBldGMuIgorbXNnc3RyICJXs7FjemVuaWUgdb95d2FuaWEgaW50ZXJmZWpzdSBEQnVzIGRvIGluZm9ybW93YW5pYSBvIHptaWFuYWNoIGtvbmZpZ3VyYWNqaS4iCisKKyM6IG9wdGlvbi5jOjI5MgorbXNnaWQgIkRvIG5vdCBwcm92aWRlIERIQ1Agb24gdGhpcyBpbnRlcmZhY2UsIG9ubHkgcHJvdmlkZSBETlMuIgorbXNnc3RyICJVcnVjaG9taWVuaWUgbmEgd3NrYXphbnltIGludGVyZmVqc2llIHR5bGtvIEROUy1hLCBiZXogdXOzdWcgREhDUCBpIFRGVFAuIgorCisjOiBvcHRpb24uYzoyOTMKK21zZ2lkICJFbmFibGUgZHluYW1pYyBhZGRyZXNzIGFsbG9jYXRpb24gZm9yIGJvb3RwLiIKK21zZ3N0ciAiV7OxY3plbmllIGR5bmFtaWN6bmVnbyBwcnp5ZHppZWxhbmlhIGFkcmVz83cgZGxhIGtsaWVudPN3IEJPT1RQLiIKKworIzogb3B0aW9uLmM6Mjk0Cittc2dpZCAiTWFwIE1BQyBhZGRyZXNzICh3aXRoIHdpbGRjYXJkcykgdG8gb3B0aW9uIHNldC4iCittc2dzdHIgIlByenlwb3J6sWRrb3dhbmllIHpuYWN6bmlrYSB3IHphbGW/bm+2Y2kgb2QgYWRyZXN1IE1BQyAobW+/bmEgdb95d2HmIHVvZ/Nsbmll8TogKikuIgorCisjOiBvcHRpb24uYzoyOTUKK21zZ2lkICJUcmVhdCBESENQIHJlcXVlc3RzIG9uIGFsaWFzZXMgYXMgYXJyaXZpbmcgZnJvbSBpbnRlcmZhY2UuIgorbXNnc3RyICJUcmFrdG93YW5pZSC/sWRh8SBESENQIG9kZWJyYW55Y2ggbmEgaW50ZXJmZWpzYWNoIGFsaWFzLCAuLi4sIGpha28gb2RlYnJhbnljaCBuYSBpZmFjZS4iCisKKyM6IG9wdGlvbi5jOjI5NgorbXNnaWQgIkRpc2FibGUgSUNNUCBlY2hvIGFkZHJlc3MgY2hlY2tpbmcgaW4gdGhlIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiUG9taW5p6mNpZSBzcHJhd2R6YW5pYSB6YSBwb21vY7EgSUNNUCBuaWV6YWrqdG+2Y2kgYWRyZXN1IHByemVkIGplZ28gd3lkemllcr9hd2llbmllbS4iCisKKyM6IG9wdGlvbi5jOjI5NworbXNnaWQgIlNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICJXc2themFuaWUgc2tyeXB0dSB1cnVjaGFtaWFuZWdvIHcgcHJ6eXBhZGt1IHd5ZHppZXK/YXdpZW5pYSBhZHJlc3UgbHViIHd5Z2G2bmnqY2lhIGR6aWVyv2F3eS4iCisKKyM6IG9wdGlvbi5jOjI5OAorbXNnaWQgIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIgorbXNnc3RyICJXY3p5dGFuaWUgd3N6eXN0a2ljaCBwbGlr83cgemUgd3NrYXphbmVnbyBrYXRhbG9ndSBqYWtvIGtvbmZpZ3VyYWN5am55Y2guIgorCisjOiBvcHRpb24uYzoyOTkKK21zZ2lkICJMb2cgdG8gdGhpcyBzeXNsb2cgZmFjaWxpdHkgb3IgZmlsZS4gKGRlZmF1bHRzIHRvIERBRU1PTikiCittc2dzdHIgIldza2F6YW5pZSBrYW5hs3Ugc3lzbG9nLWEgZG8ga3TzcmVnbyBtYWqxIHRyYWZpYeYga29tdW5pa2F0eSAoZG9tebZsbmllOiBEQUVNT04pIgorCisjOiBvcHRpb24uYzozMDAKK21zZ2lkICJEbyBub3QgdXNlIGxlYXNlZmlsZS4iCittc2dzdHIgIk5pZXW/eXdhbmllIGJhenkgZHppZXK/YXcuIgorCisjOiBvcHRpb24uYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcy4gKGRlZmF1bHRzIHRvICVzKSIKK21zZ3N0ciAiTWFrc3ltYWxuYSBsaWN6YmEgamVkbm9jemW2bmllIG9ic7N1Z2l3YW55Y2ggemFweXRh8SBETlMgKGRvbXm2bG5pZTogJXMpIgorCisjOiBvcHRpb24uYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIKK21zZ3N0ciAiQ3p5c3pjemVuaWUgcGFtaepjaSBwb2Ry6mN6bmVqIHNlcndlcmEgbmF6dyB3IHByenlwYWRrdSBwb25vd25lZ28gb2Rjenl0dSAlcy4iCisKKyM6IG9wdGlvbi5jOjMwMworbXNnaWQgIklnbm9yZSBob3N0bmFtZXMgcHJvdmlkZWQgYnkgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiTmllIHp3cmFjYW5pZSB1d2FnaSBuYSBuYXp36iBwb2Rhd2FusSBwcnpleiBrbGllbnRhIHcgcHJ6eXBhZGt1IGRvcGFzb3dhbmlhIHdzenlzdGtpY2ggd3ltaWVuaW9ueWNoIHpuYWN6bmlr83cuIgorCisjOiBvcHRpb24uYzozMDQKK21zZ2lkICJEbyBOT1QgcmV1c2UgZmlsZW5hbWUgYW5kIHNlcnZlciBmaWVsZHMgZm9yIGV4dHJhIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIld5s7FjemVuaWUgb3N6Y3rqZHphbmlhIG1pZWpzY2EgdyBwYWtpZWNpZSBESENQIHByemV6IHByemVzdXdhbmllIHDzbCBzZXJ2ZXJuYW1lIGkgZmlsZW5hbWUgZG8gb3BjamkgREhDUC4gV3ltdXN6YSBwcm9zdHN6eSB0cnliIGJ1ZG93eSBwYWtpZXR1IHJvendpsXp1arFjIHByb2JsZW15IHogbmllcHJ6eXN0b3Nvd2FueW1pIGtsaWVudGFtaSBESENQLiIKKworIzogb3B0aW9uLmM6MzA1Cittc2dpZCAiRW5hYmxlIGludGVncmF0ZWQgcmVhZC1vbmx5IFRGVFAgc2VydmVyLiIKK21zZ3N0ciAiV7OxY3plbmllIHdidWRvd2FuZWdvIHNlcndlcmEgVEZUUCAodHlsa28gZG8gd3lzebNhbmlhKS4iCisKKyM6IG9wdGlvbi5jOjMwNgorbXNnaWQgIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIgorbXNnc3RyICJPZ3JhbmljemVuaWUgZHppYbNhbmlhIHNlcndlcmEgVEZUUCBkbyB3c2themFuZWdvIGthdGFsb2d1IGkgcG9ka2F0YWxvZ/N3LiBOYXp3eSB6IC4uIHOxIG9kcnp1Y2FuZSwgLyBvZG5vc2kgc2nqIGRvIHdza2F6YW5lZ28ga2F0YWxvZ3UuIgorCisjOiBvcHRpb24uYzozMDcKK21zZ2lkICJBZGQgY2xpZW50IElQIGFkZHJlc3MgdG8gdGZ0cC1yb290LiIKK21zZ3N0ciAiRG9rbGVqYW5pZSBhZHJlc3UgSVAga2xpZW50YSBkbyBns/N3bmVnbyBrYXRhbG9ndSBURlRQLiBKZb9lbGkgd3luaWtvd3kga2F0YWxvZyBuaWUgaXN0bmllamUsIG5hZGFsIHd5a29yenlzdHVqZSBzaeogdGZ0cC1yb290LiIKKworIzogb3B0aW9uLmM6MzA4Cittc2dpZCAiQWxsb3cgYWNjZXNzIG9ubHkgdG8gZmlsZXMgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBkbnNtYXNxLiIKK21zZ3N0ciAiT2dyYW5pY3plbmllIGRvc3TqcHUgZG8gcGxpa/N3IHByemV6IFRGVFAgZG8gdHljaCwga3TzcnljaCB3s2G2Y2ljaWVsZW0gamVzdCB1v3l0a293bmlrIHVydWNoYW1pYWqxY3kgZG5zbWFzcS1hLiIKKworIzogb3B0aW9uLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbm5jdXJyZW50IFRGVFAgdHJhbnNmZXJzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJNYWtzeW1hbG5hIGxpY3piYSBqZWRub2N6ZbZuaWUgb2Jzs3VnaXdhbnljaCBwb7OxY3pl8SBURlRQIChkb215tmxuaWUgJXMpLiIKKworIzogb3B0aW9uLmM6MzEwCittc2dpZCAiRGlzYWJsZSB0aGUgVEZUUCBibG9ja3NpemUgZXh0ZW5zaW9uLiIKK21zZ3N0ciAiV3mzsWN6ZW5pZSBtb79saXdvtmNpIG5lZ29jam93YW5pYSB3aWVsa2+2Y2kgYmxva3UgZGxhIHByemVzebPzdyBwcnpleiBURlRQLiIKKworIzogb3B0aW9uLmM6MzExCittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIldza2F6YW5pZSB6YWtyZXN1IHBvcnTzdyBkbyB1v3l0a3UgVEZUUC4iCisKKyM6IG9wdGlvbi5jOjMxMgorbXNnaWQgIkV4dHJhIGxvZ2dpbmcgZm9yIERIQ1AuIgorbXNnc3RyICJXs7FjemVuaWUgc3Bpc3l3YW5pYSB3IGxvZ3Ugb3BlcmFjamkgREhDUC4iCisKKyM6IG9wdGlvbi5jOjMxMworbXNnaWQgIkVuYWJsZSBhc3luYy4gbG9nZ2luZzsgb3B0aW9uYWxseSBzZXQgcXVldWUgbGVuZ3RoLiIKK21zZ3N0ciAiV7OxY3plbmllIGFzeW5jaHJvbmljem5lZ28gemFwaXN5d2FuaWEgZG8gbG9ndSB6IGV3ZW50dWFsbnltIHdza2F6YW5pZW0gZLN1Z2+2Y2kga29sZWpraS4iCisKKyM6IG9wdGlvbi5jOjMxNAorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiT2RmaWx0cm93eXdhbmllIGFkcmVz83cgd3NrYXp1arFjeWNoIG5hIGtvbXB1dGVyeSB3IHNpZWNpYWNoIHdld27qdHJ6bnljaCBzcG+2cvNkIG9kcG93aWVkemkgb2QgemV3bup0cnpueWNoIHNlcndlcvN3IEROUy4iCisKKyM6IG9wdGlvbi5jOjMxNQorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiSmVkbm9jemVzbmUgb2RweXR5d2FuaWUgd3N6eXN0a2ljaCBzZXJ3ZXLzdyBuYWRyeupkbnljaDsga2xpZW50b3dpIHByemVrYXp5d2FuYSBqZXN0IHBpZXJ3c3phIG9kcG93aWVkvC4iCisKKyM6IG9wdGlvbi5jOjMxNgorbXNnaWQgIlNldCB0YWcgaWYgY2xpZW50IGluY2x1ZGVzIG1hdGNoaW5nIG9wdGlvbiBpbiByZXF1ZXN0LiIKK21zZ3N0ciAiVXN0YXdpZW5pZSB6bmFjem5pa2EgamW/ZWxpIHcgv7FkYW5pdSBESENQIHBvamF3aSBzaeogd3NrYXphbmEgb3BjamEsIGV3ZW50dWFsbmllIG8ga29ua3JldG5laiB3YXJ0b7ZjaS4iCisKKyM6IG9wdGlvbi5jOjMxNworbXNnaWQgIlVzZSBhbHRlcm5hdGl2ZSBwb3J0cyBmb3IgREhDUC4iCittc2dzdHIgIlW/eWNpZSBhbHRlcm5hdHl3bnljaCBwb3J083cgZGxhIHVzs3VnaSBESENQLiIKKworIzogb3B0aW9uLmM6MzE4Cittc2dpZCAiUnVuIGxlYXNlLWNoYW5nZSBzY3JpcHQgYXMgdGhpcyB1c2VyLiIKK21zZ3N0ciAiVXJ1Y2hhbWlhbmllIHNrcnlwdHUgZGhjcC1zY3JpcHQgamFrbyB3c2themFueSB1v3l0a293bmlrLiIKKworIzogb3B0aW9uLmM6MzE5Cittc2dpZCAiU3BlY2lmeSBOQVBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiU3BlY3lmaWthY2phIHJla29yZHUgRE5TIE5BUFRSLiIKKworIzogb3B0aW9uLmM6MzIwCittc2dpZCAiU3BlY2lmeSBsb3dlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICJVc3Rhd2llbmllIGRvbG5laiBncmFuaWN5IG51bWVy83cgcG9ydPN3IGRvIHByemVzebNhbmlhIHphcHl0YfEgRE5TLiIKKworIzogb3B0aW9uLmM6MzIxCittc2dpZCAiVXNlIG9ubHkgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lcyBmb3IgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiUHJ6ZWNob3d5d2FuaWUgdyBzZXJ3ZXJ6ZSBETlMgZG5zbWFzcS1hIHR5bGtvIHcgcGWzbmkga3dhbGlmaWtvd2FueWNoIG5hencgemezYXN6YW55Y2ggcHJ6ZXoga2xpZW5083cgREhDUC4iCisKKyM6IG9wdGlvbi5jOjMyMgorbXNnaWQgIlNwZWNpZnkgYWxpYXMgbmFtZSBmb3IgTE9DQUwgRE5TIG5hbWUuIgorbXNnc3RyICJXc2themFuaWUgc3lub25pbXUgbmF6d3kga29tcHV0ZXJhIGxva2FsbmVnbyAtIHpuYW5lZ28geiAvZXRjL2hvc3RzIGFsYm8geiBESENQLiIKKworIzogb3B0aW9uLmM6MzIzCittc2dpZCAiUHJvbXB0IHRvIHNlbmQgdG8gUFhFIGNsaWVudHMuIgorbXNnc3RyICJaZ7Nvc3plbmllIHd5c3mzYW5lIGtsaWVudG9tIFBYRS4iCisKKyM6IG9wdGlvbi5jOjMyNAorbXNnaWQgIkJvb3Qgc2VydmljZSBmb3IgUFhFIG1lbnUuIgorbXNnc3RyICJTa7NhZG5payBtZW51IFBYRSAoLS0+IG1hbikuIgorCisjOiBvcHRpb24uYzozMjUKK21zZ2lkICJDaGVjayBjb25maWd1cmF0aW9uIHN5bnRheC4iCittc2dzdHIgIlNwcmF3ZLwgc2uzYWRuaeouIgorCisjOiBvcHRpb24uYzo2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiBkbnNtYXNxIFtvcHRpb25zXVxuIgorIlxuIgorbXNnc3RyICIiCisiVb95Y2llOiBkbnNtYXNxIFtvcGNqZV1cbiIKKyJcbiIKKworIzogb3B0aW9uLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBzaG9ydCBvcHRpb25zIG9ubHkgb24gdGhlIGNvbW1hbmQgbGluZS5cbiIKK21zZ3N0ciAiVyB0eW0gc3lzdGVtaWUgdyBsaW5paSBwb2xlY2XxIG1vv25hIHW/eXdh5iB3ebOxY3puaWUgamVkbm9saXRlcm93eWNoIG9wY2ppLlxuIgorCisjOiBvcHRpb24uYzo2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsaWQgb3B0aW9ucyBhcmU6XG4iCittc2dzdHIgIkRvc3TqcG5lIG9wY2plOlxuIgorCisjOiBvcHRpb24uYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUCBvcHRpb25zOlxuIgorbXNnc3RyICJabmFuZSBvcGNqZSBESENQOlxuIgorCisjOiBvcHRpb24uYzo3MzUKK21zZ2lkICJiYWQgZGhjcC1vcHRpb24iCittc2dzdHIgImKzsWQgdyBkaGNwLW9wdGlvbiIKKworIzogb3B0aW9uLmM6NzkyCittc2dpZCAiYmFkIElQIGFkZHJlc3MiCittc2dzdHIgInqzeSBhZHJlcyBJUCIKKworIzogb3B0aW9uLmM6ODkxCittc2dpZCAiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIKK21zZ3N0ciAibmllcHJhd2lks293YSBuYXp3YSBkb21lbnkgdyBkaGNwLW9wdGlvbiIKKworIzogb3B0aW9uLmM6OTUwCittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgInpieXQgZLN1Z2EgZGhjcC1vcHRpb24gKD4yNTUgem5ha/N3KSIKKworIzogb3B0aW9uLmM6OTU5Cittc2dpZCAiaWxsZWdhbCBkaGNwLW1hdGNoIgorbXNnc3RyICJuaWVkb3B1c3pjemFsbmUgZGhjcC1tYXRjaCIKKworIzogb3B0aW9uLmM6OTk1Cittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBmbGFnIgorbXNnc3RyICJ3aWVsb2tyb3RuZSB1v3ljaWUgb3BjamkgbmllZG96d29sb25lIChwb2phd2mzYSBzaeogd2N6ZbZuaWVqIHcgbGluaWkgcG9sZWNl8SkiCisKKyM6IG9wdGlvbi5jOjEwMDMKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGtleXdvcmQiCittc2dzdHIgIndpZWxva3JvdG5lIHW/eWNpZSBvcGNqaSBuaWVkb3p3b2xvbmUgKHBvamF3abNhIHNp6iB3c3pltm5pZWogdyBwbGlrdSBrb25maWd1cmFjeWpueW0pIgorCisjOiBvcHRpb24uYzoxMDg2IHRmdHAuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgImJyYWsgZG9zdOpwdSBkbyAlczogJXMiCisKKyM6IG9wdGlvbi5jOjExMzEKK21zZ2lkICJvbmx5IG9uZSBkaGNwLWhvc3RzZmlsZSBhbGxvd2VkIgorbXNnc3RyICJtb79uYSB3c2themHmIHR5bGtvIGplZGVuIHBsaWsgZGhjcC1ob3N0c2ZpbGUiCisKKyM6IG9wdGlvbi5jOjExMzgKK21zZ2lkICJvbmx5IG9uZSBkaGNwLW9wdHNmaWxlIGFsbG93ZWQiCittc2dzdHIgIm1vv25hIHdza2F6YeYgdHlsa28gamVkZW4gcGxpayBkaGNwLW9wdHNmaWxlIgorCisjOiBvcHRpb24uYzoxMTgzCittc2dpZCAiYmFkIE1YIHByZWZlcmVuY2UiCittc2dzdHIgIm5pZXByYXdpZLNvd2Egd2FydG+25iBwcmVmZXJlbmNqaSBNWCIKKworIzogb3B0aW9uLmM6MTE4OAorbXNnaWQgImJhZCBNWCBuYW1lIgorbXNnc3RyICJuaWVwcmF3aWSzb3dhIG5hendhIE1YIgorCisjOiBvcHRpb24uYzoxMjAyCittc2dpZCAiYmFkIE1YIHRhcmdldCIKK21zZ3N0ciAibmllcHJhd2lks293YSB3YXJ0b7bmIGNlbHUgTVgiCisKKyM6IG9wdGlvbi5jOjEyMTIKK21zZ2lkICJjYW5ub3QgcnVuIHNjcmlwdHMgdW5kZXIgdUNsaW51eCIKK21zZ3N0ciAidyB1Q2xpbnVrc2llIG5pZSBtYSBtb79saXdvtmNpIHVydWNoYW1pYW5pYSBza3J5cHTzdyIKKworIzogb3B0aW9uLmM6MTIxNAorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIGxlYXNlLWNoYW5nZSBzY3JpcHRzIgorbXNnc3RyICK/ZWJ5IG1pZeYgbW+/bGl3b7bmIHW/eXdhbmlhIHNrcnlwdPN3IHd5d2+zeXdhbnljaCBwcnp5IHptaWFuaWUgZHppZXK/YXd5LCBwcnpla29tcGlsdWogZG5zbWFzcS1hIHogd7OxY3pvbrEgZmxhZ7EgSEFWRV9TQ1JJUFQiCisKKyM6IG9wdGlvbi5jOjE0NDIgb3B0aW9uLmM6MTQ0NgorbXNnaWQgImJhZCBwb3J0IgorbXNnc3RyICJuaWVwcmF3aWSzb3d5IG51bWVyIHBvcnR1IgorCisjOiBvcHRpb24uYzoxNDY1IG9wdGlvbi5jOjE0OTAKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJuaWUgbWEgbW+/bGl3b7ZjaSBkb3dpsXp5d2FuaWEgZG8gaW50ZXJmZWpzdSIKKworIzogb3B0aW9uLmM6MTYxMQorbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICJuaWVwcmF3aWSzb3d5IHpha3JlcyBudW1lcvN3IHBvcnTzdyIKKworIzogb3B0aW9uLmM6MTYyOAorbXNnaWQgImJhZCBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICJuaWVwcmF3aWSzb3dhIG5hendhIHVyerFkemVuaWEgdyBicmlkZ2UtaW50ZXJmYWNlIgorCisjOiBvcHRpb24uYzoxNjY5Cittc2dpZCAiYmFkIGRoY3AtcmFuZ2UiCittc2dzdHIgIm5pZXByYXdpZLNvd3kgemFrcmVzIGRoY3AtcmFuZ2UiCisKKyM6IG9wdGlvbi5jOjE2OTUKK21zZ2lkICJvbmx5IG9uZSBuZXRpZCB0YWcgYWxsb3dlZCIKK21zZ3N0ciAibW+/bmEgd3NrYXph5iB0eWxrbyBqZWRlbiB6bmFjem5payBzaWVjaSIKKworIzogb3B0aW9uLmM6MTc0MAorbXNnaWQgImluY29uc2lzdGVudCBESENQIHJhbmdlIgorbXNnc3RyICJuaWVzcPNqbnkgemFrcmVzIGFkcmVz83cgREhDUCIKKworIzogb3B0aW9uLmM6MTkxMgorbXNnaWQgImJhZCBESENQIGhvc3QgbmFtZSIKK21zZ3N0ciAibmllZG9wdXN6Y3phbG5hIG5hendhIGtvbXB1dGVyYSB3IGRoY3AtaG9zdCIKKworIzogb3B0aW9uLmM6MjIwMSBvcHRpb24uYzoyNDgxCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAibmllcHJhd2lks293eSBudW1lciBwb3J0dSIKKworIzogb3B0aW9uLmM6MjI4NAorbXNnaWQgImludmFsaWQgYWxpYXMgcmFuZ2UiCittc2dzdHIgIm5pZXByYXdpZLNvd3kgemFrcmVzIGFkcmVz83cgdyAtLWFsaWFzIgorCisjOiBvcHRpb24uYzoyMjk3Cittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICJuaWVwcmF3aWSzb3dhIG5hendhIGludGVyZmVqc3UiCisKKyM6IG9wdGlvbi5jOjIzMjIKK21zZ2lkICJiYWQgQ05BTUUiCittc2dzdHIgInqzYSBDTkFNRSIKKworIzogb3B0aW9uLmM6MjMyNworbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAicG93dPNyem9uYSBDTkFNRSIKKworIzogb3B0aW9uLmM6MjM0NworbXNnaWQgImJhZCBQVFIgcmVjb3JkIgorbXNnc3RyICJuaWVwcmF3aWSzb3d5IHphcGlzIHJla29yZHUgUFRSIgorCisjOiBvcHRpb24uYzoyMzc4Cittc2dpZCAiYmFkIE5BUFRSIHJlY29yZCIKK21zZ3N0ciAibmllcHJhd2lks293eSB6YXBpcyByZWtvcmR1IE5BUFRSIgorCisjOiBvcHRpb24uYzoyNDAzCittc2dpZCAiVFhUIHJlY29yZCBzdHJpbmcgdG9vIGxvbmciCittc2dzdHIgInpieXQgZLN1Z2kgcmVrb3JkIFRYVCIKKworIzogb3B0aW9uLmM6MjQ1MQorbXNnaWQgImJhZCBUWFQgcmVjb3JkIgorbXNnc3RyICJuaWVwcmF3aWSzb3d5IHphcGlzIHJla29yZHUgVFhUIgorCisjOiBvcHRpb24uYzoyNDY3Cittc2dpZCAiYmFkIFNSViByZWNvcmQiCittc2dzdHIgIm5pZXByYXdpZLNvd3kgemFwaXMgcmVrb3JkdSBTUlYiCisKKyM6IG9wdGlvbi5jOjI0NzQKK21zZ2lkICJiYWQgU1JWIHRhcmdldCIKK21zZ3N0ciAibmllcHJhd2lks293YSB3YXJ0b7bmIGNlbHUgU1JWIgorCisjOiBvcHRpb24uYzoyNDg4Cittc2dpZCAiaW52YWxpZCBwcmlvcml0eSIKK21zZ3N0ciAibmllcHJhd2lks293eSBwcmlvcnl0ZXQiCisKKyM6IG9wdGlvbi5jOjI0OTUKK21zZ2lkICJpbnZhbGlkIHdlaWdodCIKK21zZ3N0ciAibmllcHJhd2lks293YSB3YWdhIgorCisjOiBvcHRpb24uYzoyNTE0Cittc2dpZCAidW5zdXBwb3J0ZWQgb3B0aW9uIChjaGVjayB0aGF0IGRuc21hc3Egd2FzIGNvbXBpbGVkIHdpdGggREhDUC9URlRQL0RCdXMgc3VwcG9ydCkiCittc2dzdHIgIm5pZW9ic7N1Z2l3YW5hIG9wY2phIChzcHJhd2S8LCBjenkgb2Jzs3VnYSBESENQL1RGVFAvREJ1cyB6b3N0YbNhIHdrb21waWxvd2FuYSkiCisKKyM6IG9wdGlvbi5jOjI1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZXMgbmVzdGVkIHRvbyBkZWVwIGluICVzIgorbXNnc3RyICJ6Ynl0IGR1v2UgemFns+piaWVuaWUgcGxpa/N3IHcgJXMiCisKKyM6IG9wdGlvbi5jOjI1NjUgdGZ0cC5jOjUxMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgImKzsWQgb2Rjenl0dSB6IHBsaWt1ICVzOiAlcyIKKworIzogb3B0aW9uLmM6MjYyNgorbXNnaWQgIm1pc3NpbmcgXCIiCittc2dzdHIgImJyYWt1amUgXCIiCisKKyM6IG9wdGlvbi5jOjI2NzMKK21zZ2lkICJiYWQgb3B0aW9uIgorbXNnc3RyICJuaWVwcmF3aWSzb3dhIG9wY2phIgorCisjOiBvcHRpb24uYzoyNjc1Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgIm5hZHd5v2tvd3kgcGFyYW1ldHIiCisKKyM6IG9wdGlvbi5jOjI2NzcKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciIKK21zZ3N0ciAiYnJhayBwYXJhbWV0cnUiCisKKyM6IG9wdGlvbi5jOjI2ODUKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiYrOxZCIKKworIzogb3B0aW9uLmM6MjY5MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhdCBsaW5lICVkIG9mICUlcyIKK21zZ3N0ciAiJXMgdyBsaW5paSAlZCBwbGlrdSAlJXMiCisKKyM6IG9wdGlvbi5jOjI3NDAgb3B0aW9uLmM6Mjc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIgorbXNnc3RyICJwcnplY3p5dGGzZW0gJXMiCisKKyM6IG9wdGlvbi5jOjI4NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSB2ZXJzaW9uICVzICAlc1xuIgorbXNnc3RyICJEbnNtYXNxLCB3ZXJzamEgJXMgICVzXG4iCisKKyM6IG9wdGlvbi5jOjI4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbXBpbGUgdGltZSBvcHRpb25zICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJXa29tcGlsb3dhbmUgb3BjamUgJXNcbiIKKyJcbiIKKworIzogb3B0aW9uLmM6Mjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiQXV0b3IgbmllIGRhamUgr0FETllDSCBHV0FSQU5DSkkgZWd6ZWt3b3dhbG55Y2ggcHJhd25pZS5cbiIKKworIzogb3B0aW9uLmM6Mjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0XG4iCittc2dzdHIgIkRuc21hc3EgamVzdCB3b2xueW0gb3Byb2dyYW1vd2FuaWVtLCBtb79lc3ogZ28gcm96cHJvd2FkemHmXG4iCisKKyM6IG9wdGlvbi5jOjI4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIDMuXG4iCittc2dzdHIgIm5hIHdhcnVua2FjaCBva3JltmxvbnljaCB3IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlLCB3IHdlcnNqaSAyIGx1YiAzLlxuIgorCisjOiBvcHRpb24uYzoyODU4Cittc2dpZCAidHJ5IC0taGVscCIKK21zZ3N0ciAic3By82J1ajogLS1oZWxwIgorCisjOiBvcHRpb24uYzoyODYwCittc2dpZCAidHJ5IC13IgorbXNnc3RyICJzcHLzYnVqOiAtdyIKKworIzogb3B0aW9uLmM6Mjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJuaWVwcmF3aWSzb3dhIG9wY2phIHcgbGluaWkgcG9sZWNl8SAlcyIKKworIzogb3B0aW9uLmM6MjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGhvc3QtbmFtZTogJXMiCittc2dzdHIgIm5pZSBtb79uYSBwb2JyYeYgbmF6d3kgaG9zdGE6ICVzIgorCisjOiBvcHRpb24uYzoyOTMyCittc2dpZCAib25seSBvbmUgcmVzb2x2LmNvbmYgZmlsZSBhbGxvd2VkIGluIG5vLXBvbGwgbW9kZS4iCittc2dzdHIgIncgdHJ5YmllIG5vLXBvbGwgbW+/bmEgd3NrYXph5iBuYWp3eb9laiBqZWRlbiBwbGlrIHJlc29sdi5jb25mLiIKKworIzogb3B0aW9uLmM6Mjk0MgorbXNnaWQgIm11c3QgaGF2ZSBleGFjdGx5IG9uZSByZXNvbHYuY29uZiB0byByZWFkIGRvbWFpbiBmcm9tLiIKK21zZ3N0ciAibXVzaXN6IG1pZeYgZG9rs2FkbmllIGplZGVuIHBsaWsgcmVzb2x2LmNvbmYgZG8gb2Rjenl0dSBkb21lbi4iCisKKyM6IG9wdGlvbi5jOjI5NDUgbmV0d29yay5jOjc1NCBkaGNwLmM6NzM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlcyIKK21zZ3N0ciAibmllIHVkYbNvIHNp6iBvZGN6eXRh5iAlczogJXMiCisKKyM6IG9wdGlvbi5jOjI5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2VhcmNoIGRpcmVjdGl2ZSBmb3VuZCBpbiAlcyIKK21zZ3N0ciAiYnJhayB3eXR5Y3pueWNoIHd5c3p1a2l3YW5pYSB3ICVzIgorCisjOiBvcHRpb24uYzoyOTgzCittc2dpZCAidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IgorbXNnc3RyICJ3IHByenlwYWRrdSB1v3l3YW5pYSAtLWRoY3AtZnFkbiB0cnplYmEgd3NrYXph5iBkb215tmxusSBkb21lbuoiCisKKyM6IG9wdGlvbi5jOjI5ODcKK21zZ2lkICJzeW50YXggY2hlY2sgT0siCittc2dzdHIgInNrs2FkbmlhIHNwcmF3ZHpvbmEsIGplc3QgcHJhd2lks293YSIKKworIzogZm9yd2FyZC5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiCittc2dzdHIgInNlcndlciBuYXp3ICVzIG9kbWF3aWEgd3lrb25hbmlhIHphcHl0YW5pYSByZWt1cmVuY3lqbmVnbyIKKworIzogZm9yd2FyZC5jOjQzNworbXNnaWQgInBvc3NpYmxlIEROUy1yZWJpbmQgYXR0YWNrIGRldGVjdGVkIgorbXNnc3RyICJwcmF3ZG9wb2RvYm5pZSB3eWtyeXRvIGF0YWsgRE5TLXJlYmluZCIKKworIzogbmV0d29yay5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIGluIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgIm5pZXpuYW55IGludGVyZmVqcyAlcyB3IGJyaWRnZS11IgorCisjOiBuZXR3b3JrLmM6NDE3IGRuc21hc3EuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0OiAlcyIKK21zZ3N0ciAiYrOxZCBwb2RjemFzIHR3b3J6ZW5pYSBnbmlhemRhOiAlcyIKKworIzogbmV0d29yay5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IElQVjYgb3B0aW9ucyBvbiBsaXN0ZW5pbmcgc29ja2V0OiAlcyIKK21zZ3N0ciAiYrOxZCB1c3Rhd2lhbmlhIG9wY2ppIElQVjYgbmEgbmFzs3VjaHVqsWN5bSBnbmllvGR6aWU6ICVzIgorCisjOiBuZXR3b3JrLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIGxpc3RlbmluZyBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiYrOxZCBwcnp5IHByenl6bmF3YW5pdSBuYXp3eSBnbmlhemR1ICVzOiAlcyIKKworIzogbmV0d29yay5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbGlzdGVuIG9uIHNvY2tldDogJXMiCittc2dzdHIgImKzsWQgcHJ6eSB3s7FjemFuaXUgbmFzs3VjaHUgbmEgZ25pZbxkemllOiAlcyIKKworIzogbmV0d29yay5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIFRGVFAgc29ja2V0OiAlcyIKK21zZ3N0ciAibmllIHBvd2lvZLNvIHNp6iBvdHdpZXJhbmllIGduaWF6ZGEgZGxhIHVzs3VnaSBURlRQOiAlcyIKKworIzogbmV0d29yay5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBzZXJ2ZXIgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgImKzsWQgcHJ6eSBwcnp5em5hd2FuaXUgbmF6d3kgZ25pYXpkdSBzZXJ3ZXJhICVzOiAlcyIKKworIzogbmV0d29yay5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIgorbXNnc3RyICJpZ25vcm93YW5pZSBzZXJ3ZXJhIG5hencgJXMgLSBpbnRlcmZlanMgbG9rYWxueSIKKworIzogbmV0d29yay5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gY2Fubm90IG1ha2UvYmluZCBzb2NrZXQ6ICVzIgorbXNnc3RyICJpZ25vcm93YW5pZSBzZXJ3ZXJhIG5hencgJXMgLSBuaWUgbW+/bmEgdXR3b3J6eeYvZG93abF6YeYgZ25pYXpkYTogJXMiCisKKyM6IG5ldHdvcmsuYzo3MjAKK21zZ2lkICJ1bnF1YWxpZmllZCIKK21zZ3N0ciAibmlla3dhbGlmaWtvd2FuZSgtYSkiCisKKyM6IG5ldHdvcmsuYzo3MjAKK21zZ2lkICJuYW1lcyIKK21zZ3N0ciAibmF6d3kiCisKKyM6IG5ldHdvcmsuYzo3MjIKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICJkb215tmxuZSIKKworIzogbmV0d29yay5jOjcyNAorbXNnaWQgImRvbWFpbiIKK21zZ3N0ciAiZG9tZW55IgorCisjOiBuZXR3b3JrLmM6NzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAidb95d2FtIGFkcmVz83cgbG9rYWxueWNoIHR5bGtvIGRsYSAlcyAlcyIKKworIzogbmV0d29yay5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIGZvciAlcyAlcyIKK21zZ3N0ciAidb95d2FtIHNlcndlcmEgbmF6dyAlcyMlZCBkbGEgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCh2aWEgJXMpIgorbXNnc3RyICJ1v3l3YW0gc2Vyd2VyYSBuYXp3ICVzIyVkIChwcnpleiAlcykiCisKKyM6IG5ldHdvcmsuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCIKK21zZ3N0ciAidb95d2FtIHNlcndlcmEgbmF6dyAlcyMlZCIKKworIzogZG5zbWFzcS5jOjE0NgorbXNnaWQgIlRGVFAgc2VydmVyIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX1RGVFAgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJTZXJ3ZXIgVEZUUCBuaWUgem9zdGGzIHdrb21waWxvd2FueSAtLSB1c3RhdyBIQVZFX1RGVFAgdyBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoxNTEKK21zZ2lkICJhc3ljaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgU29sYXJpcyIKK21zZ3N0ciAiemFwaXMgZG8gbG9n83cgdyB0cnliaWUgYXN5bmNocm9uaWN6bnltIG5pZSBqZXN0IGRvc3TqcG55IHcgU29sYXJpc2llIgorCisjOiBkbnNtYXNxLmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGxpc3Qgb2YgaW50ZXJmYWNlczogJXMiCittc2dzdHIgImKzsWQgcG9kY3phcyB0d29yemVuaWEgbGlzdHkgaW50ZXJmZWpz83cgc2llY2lvd3ljaDogJXMiCisKKyM6IGRuc21hc3EuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMiCittc2dzdHIgIm5pZXpuYW55IGludGVyZmVqcyAlcyIKKworIzogZG5zbWFzcS5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBpbnRlcmZhY2Ugd2l0aCBhZGRyZXNzICVzIgorbXNnc3RyICJicmFrIGludGVyZmVqc3UgeiBhZHJlc2VtICVzIgorCisjOiBkbnNtYXNxLmM6MjAxIGRuc21hc3EuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiREJ1cyBlcnJvcjogJXMiCittc2dzdHIgImKzsWQgREJ1czogJXMiCisKKyM6IGRuc21hc3EuYzoyMDQKK21zZ2lkICJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJPYnOzdWdhIERCdXMgbmllIHpvc3Rhs2Egd2tvbXBpbG93YW5hIC0tIHVzdGF3IEhBVkVfREJVUyB3IHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHVzZXIgb3IgZ3JvdXA6ICVzIgorbXNnc3RyICJuaWV6bmFueSB1v3l0a293bmlrIGx1YiBncnVwYTogJXMiCisKKyM6IGRuc21hc3EuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiCittc2dzdHIgIm5pZSBwb3RyYWZp6iB3ZWq25iBkbyBns/N3bmVnbyBrYXRhbG9ndTogJXMiCisKKyM6IGRuc21hc3EuYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiCittc2dzdHIgInVydWNob21pb255LCB3ZXJzamEgJXMsIEROUyB3ebOxY3pvbnkiCisKKyM6IGRuc21hc3EuYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBjYWNoZXNpemUgJWQiCittc2dzdHIgInVydWNob21pb255LCB3ZXJzamEgJXMsICVkIG1pZWpzYyB3IHBhbWnqY2kgcG9kcupjem5laiIKKworIzogZG5zbWFzcS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJ1cnVjaG9taW9ueSwgd2Vyc2phICVzLCBwYW1p6uYgcG9kcupjem5hIHd5s7Fjem9uYSIKKworIzogZG5zbWFzcS5jOjQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21waWxlIHRpbWUgb3B0aW9uczogJXMiCittc2dzdHIgIm9wY2plIGtvbXBpbGFjamk6ICVzIgorCisjOiBkbnNtYXNxLmM6NDYwCittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGNvbm5lY3RlZCB0byBzeXN0ZW0gYnVzIgorbXNnc3RyICJvYnOzdWdhIERCdXMgd7OxY3pvbmEsIHBvZLOxY3pvbm8gZG8gc2Vyd2VyYSBEQnVzIgorCisjOiBkbnNtYXNxLmM6NDYyCittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGJ1cyBjb25uZWN0aW9uIHBlbmRpbmciCittc2dzdHIgIm9ic7N1Z2EgREJ1cyB3s7Fjem9uYSwgdHJ3YSBwb2SzsWN6YW5pZSBkbyBzZXJ3ZXJhIERCdXMiCisKKyM6IGRuc21hc3EuYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogZmFpbGVkIHRvIGNoYW5nZSBvd25lciBvZiAlczogJXMiCittc2dzdHIgIlVXQUdBISBOaWUgdWRhs28gc2nqIHptaWVuaeYgdb95dGtvd25pa2EgcGxpa3UgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6NDcxCittc2dpZCAic2V0dGluZyAtLWJpbmQtaW50ZXJmYWNlcyBvcHRpb24gYmVjYXVzZSBvZiBPUyBsaW1pdGF0aW9ucyIKK21zZ3N0ciAidXN0YXdpYW0gLS1iaW5kLWludGVyZmFjZXMgeiBwb3dvZHUgb2dyYW5pY3pl8SBzeXN0ZW11IG9wZXJhY3lqbmVnbyIKKworIzogZG5zbWFzcS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBpbnRlcmZhY2UgJXMgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0IgorbXNnc3RyICJ1d2FnYTogaW50ZXJmZWpzICVzIG5pZSBqZXN0IHezsWN6b255IgorCisjOiBkbnNtYXNxLmM6NDgxCittc2dpZCAid2FybmluZzogaWdub3JpbmcgcmVzb2x2LWZpbGUgZmxhZyBiZWNhdXNlIG5vLXJlc29sdiBpcyBzZXQiCittc2dzdHIgInV3YWdhOiBpZ25vcnVq6iBvcGNq6iByZXNvbHYtZmlsZSwgcG9uaWV3Yb8gd3licmFubyB0cnliIG5vLXJlc29sdiIKKworIzogZG5zbWFzcS5jOjQ4NAorbXNnaWQgIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIKK21zZ3N0ciAidXdhZ2E6IG5pZSB3c2themFubyBuYWRyeupkbnljaCBzZXJ3ZXLzdyBETlMiCisKKyM6IGRuc21hc3EuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgZW5hYmxlZCwgcXVldWUgbGltaXQgaXMgJWQgbWVzc2FnZXMiCittc2dzdHIgInezsWN6b25vIGFzeW5jaHJvbmljem55IHRyeWIgemFwaXN1IGRvIGxvZ/N3IHoga29sZWprsSBuYSAlZCBrb211bmlrYXTzdyIKKworIzogZG5zbWFzcS5jOjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBzdGF0aWMgbGVhc2VzIG9ubHkgb24gJS4wcyVzLCBsZWFzZSB0aW1lICVzIgorbXNnc3RyICJESENQOiB0eWxrbyBzdGF0eWN6bmUgZHppZXK/YXd5IG5hICUuMHMlcywgY3phcyBkemllcr9hd3kgJXMiCisKKyM6IGRuc21hc3EuYzo1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgcHJveHkgb24gc3VibmV0ICUuMHMlcyUuMHMiCittc2dzdHIgIkRIQ1A6IHBvtnJlZG5payBuYSBwb2RzaWVjaSAlLjBzJXMlLjBzIgorCisjOiBkbnNtYXNxLmM6NTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIElQIHJhbmdlICVzIC0tICVzLCBsZWFzZSB0aW1lICVzIgorbXNnc3RyICJESENQOiB6YWtyZXMgSVAgJXMgLS0gJXMsIGN6YXMgZHppZXK/YXd5ICVzIgorCisjOiBkbnNtYXNxLmM6NTE5Cittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgInogZ7Pzd255bSBrYXRhbG9naWVtIHcgIgorCisjOiBkbnNtYXNxLmM6NTE5Cittc2dpZCAiZW5hYmxlZCIKK21zZ3N0ciAid7OxY3pvbnkiCisKKyM6IGRuc21hc3EuYzo1MjEKK21zZ2lkICJzZWN1cmUgbW9kZSIKK21zZ3N0ciAidyB0cnliaWUgYmV6cGllY3pueW0iCisKKyM6IGRuc21hc3EuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdHJpY3RpbmcgbWF4aW11bSBzaW11bHRhbmVvdXMgVEZUUCB0cmFuc2ZlcnMgdG8gJWQiCittc2dzdHIgIm9ncmFuaWN6YW0gaWxvtuYgamVkbm9jemVzbnljaCBwcnplc7Nh8SBURlRQIGRvICVkIgorCisjOiBkbnNtYXNxLmM6NjY3Cittc2dpZCAiY29ubmVjdGVkIHRvIHN5c3RlbSBEQnVzIgorbXNnc3RyICJwb2SzsWN6b25vIGRvIERCdXMtYSIKKworIzogZG5zbWFzcS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICJuaWUgcG90cmFmaeogcHJ6ZbOxY3p55iBzaeogZG8gcHJhY3kgdyB0bGU6ICVzIgorCisjOiBkbnNtYXNxLmM6NzYwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAibmllIHVkYbNvIHNp6iB1dHdvcnp55iBwcm9jZXN1IHBvbW9jbmljemVnbzogJXMiCisKKyM6IGRuc21hc3EuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAibmllIHBvd2lvZLNvIHNp6iB1c3Rhd2lhbmllIG9ncmFuaWN6ZfEgKGNhcGFiaWxpdGllcyk6ICVzIgorCisjOiBkbnNtYXNxLmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgdXNlci1pZCB0byAlczogJXMiCittc2dzdHIgIm5pZSB1ZGGzbyBzaeogem1pZW5p5iB1v3l0a293bmlrYSBwcm9jZXN1IG5hICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIGdyb3VwLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAibmllIHVkYbNvIHNp6iB6bWllbmnmIGdydXB5IHByb2Nlc3UgbmEgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBpZGZpbGUgJXM6ICVzIgorbXNnc3RyICJuaWUgdWRhs28gc2nqIG90d29yennmIHBsaWt1IHogUElELWVtICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjc3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgIm5pZSBtb79uYSBvdHdvcnp55iAlczogJXMiCisKKyM6IGRuc21hc3EuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hpbGQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICJwcm9jZXMgcG90b21ueSB6YWJpdHkgc3lnbmGzZW0gJWQiCisKKyM6IGRuc21hc3EuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hpbGQgcHJvY2VzcyBleGl0ZWQgd2l0aCBzdGF0dXMgJWQiCittc2dzdHIgInByb2NlcyBwb3RvbW55IHpha2/xY3p5syBzaeogeiBrb2RlbSBwb3dyb3R1ICVkIgorCisjOiBkbnNtYXNxLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjdXRlICVzOiAlcyIKK21zZ3N0ciAibmllIHVkYbNvIHNp6iB1cnVjaG9taeYgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6ODg1Cittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgInpha2/xY3p5s2VtIGR6aWGzYW5pZSB6IHBvd29kdSBvZGVicmFuaWEgU0lHVEVSTSIKKworIzogZG5zbWFzcS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAiYnJhayBkb3N06nB1IGRvICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICJjenl0YW5pZSAlcyIKKworIzogZG5zbWFzcS5jOjkzNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZXJ2ZXJzIGZvdW5kIGluICVzLCB3aWxsIHJldHJ5IgorbXNnc3RyICJ3ICVzIG5pZSB6bmFsYXqzZW0gc2Vyd2Vy83csIHNwcvNidWrqIHBvbm93bmllIHDzvG5pZWoiCisKKyM6IGRoY3AuYzo0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAibmllIHVkYbNvIHNp6iB1dHdvcnp55iBnbmlhemRhIGRsYSBESENQOiAlcyIKKworIzogZGhjcC5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImKzsWQgcG9kY3phcyB1c3Rhd2lhbmlhIG9wY2ppIGduaWF6ZGEgREhDUDogJXMiCisKKyM6IGRoY3AuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJuaWUgdWRhs28gc2nqIHVzdGF3aeYgU09fUkVVU0V7QUREUnxQT1JUfSBnbmlhemRhIERIQ1A6ICVzIgorCisjOiBkaGNwLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUCBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiYrOxZCBwcnp5IHByenl6bmF3YW5pdSBuYXp3eSBnbmlhemR1IHNlcndlcmEgREhDUDogJXMiCisKKyM6IGRoY3AuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVAgcmF3IHNvY2tldDogJXMuIgorbXNnc3RyICJuaWUgdWRhs28gc2nqIHV0d29yennmIHN1cm93ZWdvIGduaWF6ZGEgSUNNUDogJXMuIgorCisjOiBkaGNwLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcGFja2V0IHJlY2VpdmVkIG9uICVzIHdoaWNoIGhhcyBubyBhZGRyZXNzIgorbXNnc3RyICK/sWRhbmllIERIQ1Agb2RlYnJhbm8gbmEgaW50ZXJmZWpzaWUgJXMsIGt083J5IG5pZSBtYSBhZHJlc3UiCisKKyM6IGRoY3AuYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByYW5nZSAlcyAtLSAlcyBpcyBub3QgY29uc2lzdGVudCB3aXRoIG5ldG1hc2sgJXMiCittc2dzdHIgInpha3JlcyBhZHJlc/N3IERIQ1AgJXMgLS0gJXMgamVzdCBuaWVzcPNqbnkgeiBtYXNrsSBzaWVjaSAlcyIKKworIzogZGhjcC5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbGluZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICJ6s2EgemF3YXJ0b7bmIHBsaWt1ICVzLCB3IGxpbmlpICVkIgorCisjOiBkaGNwLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICVzIGxpbmUgJWQsIGR1cGxpY2F0ZSBuYW1lIG9yIElQIGFkZHJlc3MiCittc2dzdHIgIncgJXMgcG9taWphbSBsaW5p6iAlZCAtLSBwb3d083J6b25hIG5hendhIGx1YiBhZHJlcyBJUCIKKworIzogZGhjcC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorbXNnc3RyICJwb3d083J6b255IGFkcmVzIElQICglcykgdyBwYXJhbWV0cnplIGRoY3AtY29uZmlnIgorCisjOiBkaGNwLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzIGluICVzLiIKK21zZ3N0ciAicG93dPNyem9ueSBhZHJlcyBJUCAoJXMpIHcgcGxpa3UgJXMiCisKKyM6IGRoY3AuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBpbiBob3N0c2ZpbGUsIHVzaW5nICVzIGZvciBESENQIgorbXNnc3RyICJkbyBrb21wdXRlcmEgbyBuYXp3aWUgJXMgcGFzdWplIHdp6mNlaiBuab8gamVkZW4gYWRyZXMsIHcgb2Rwb3dpZWR6aSBESENQIHd5c3mzYW0gJXMiCisKKyM6IGRoY3AuYzo5NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiCittc2dzdHIgInBvd3TzcnplbmllIGFkcmVzdSBJUCAlcyAoJXMpIHcgb3BjamkgZGhjcC1jb25maWciCisKKyM6IGxlYXNlLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gb3IgY3JlYXRlIGxlYXNlIGZpbGUgJXM6ICVzIgorbXNnc3RyICJuaWUgcG90cmFmaeogb3R3b3J6eeYgYWxibyB1dHdvcnp55iBwbGlrdSBkemllcr9hdyAlczogJXMiCisKKyM6IGxlYXNlLmM6OTIKK21zZ2lkICJ0b28gbWFueSBzdG9yZWQgbGVhc2VzIgorbXNnc3RyICJ6Ynl0IGR1v2EgaWxvtuYgemFwaXNhbnljaCBkemllcr9hdyIKKworIzogbGVhc2UuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJ1biBsZWFzZS1pbml0IHNjcmlwdCAlczogJXMiCittc2dzdHIgIm5pZSBwb3RyYWZp6iB1cnVjaG9taeYgc2tyeXB0dSAlczogJXMiCisKKyM6IGxlYXNlLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAic2tyeXB0IHpha2/xY3p5syBzaeogeiBrb2RlbSBwb3dyb3R1ICVzIgorCisjOiBsZWFzZS5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIChyZXRyeSBpbiAldXMpIgorbXNnc3RyICJis7FkIHphcGlzdSBkbyAlczogJXMgKHNwcvNidWrqIHBvbm93bmllIHphICV1cykiCisKKyM6IHJmYzIxMzEuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1AgcmVxdWVzdCAlcyAlcyIKK21zZ3N0ciAibmllIHpkZWZpbmlvd2FubyB6YWtyZXN1IGFkcmVz83cgb2Rwb3dpZWRuaWVnbyBkbGEgv7FkYW5pYSAlcyAlcyIKKworIzogcmZjMjEzMS5jOjMzNworbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICJ6IHd5Ym9yZW0gcG9kc2llY2kiCisKKyM6IHJmYzIxMzEuYzozMzcKK21zZ2lkICJ2aWEiCittc2dzdHIgInByemV6IgorCisjOiByZmMyMTMxLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IEF2YWlsYWJsZSBESENQIHN1Ym5ldDogJXMvJXMiCittc2dzdHIgIiV1IERvc3TqcG5hIHBvZHNpZeYgREhDUDogJXMvJXMiCisKKyM6IHJmYzIxMzEuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgQXZhaWxhYmxlIERIQ1AgcmFuZ2U6ICVzIC0tICVzIgorbXNnc3RyICIldSB6YWtyZXMgYWRyZXPzdyBuYSB1v3l0ZWsgREhDUDogJXMgLS0gJXMiCisKKyM6IHJmYzIxMzEuYzozODQKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAid3mzsWN6b255KGEpIgorCisjOiByZmMyMTMxLmM6NDE4IHJmYzIxMzEuYzo4ODMgcmZjMjEzMS5jOjEyNDIKK21zZ2lkICJpZ25vcmVkIgorbXNnc3RyICJpZ25vcnVq6iIKKworIzogcmZjMjEzMS5jOjQzMyByZmMyMTMxLmM6MTEwMAorbXNnaWQgImFkZHJlc3MgaW4gdXNlIgorbXNnc3RyICJhZHJlcyBqZXN0IHcgdb95Y2l1IgorCisjOiByZmMyMTMxLmM6NDQ3IHJmYzIxMzEuYzo5MzcKK21zZ2lkICJubyBhZGRyZXNzIGF2YWlsYWJsZSIKK21zZ3N0ciAiYnJhayBkb3N06nBuZWdvIGFkcmVzdSIKKworIzogcmZjMjEzMS5jOjQ1NCByZmMyMTMxLmM6MTA2MworbXNnaWQgIndyb25nIG5ldHdvcmsiCittc2dzdHIgIm5pZXByYXdpZLNvd2Egc2ll5iIKKworIzogcmZjMjEzMS5jOjQ2NworbXNnaWQgIm5vIGFkZHJlc3MgY29uZmlndXJlZCIKK21zZ3N0ciAiYnJhayBza29uZmlndXJvd2FuZWdvIGFkcmVzdSIKKworIzogcmZjMjEzMS5jOjQ3MyByZmMyMTMxLmM6MTExMworbXNnaWQgIm5vIGxlYXNlcyBsZWZ0IgorbXNnc3RyICJicmFrIHdvbG55Y2ggZHppZXK/YXciCisKKyM6IHJmYzIxMzEuYzo1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IHByb3ZpZGVzIG5hbWU6ICVzIgorbXNnc3RyICJrbGllbnQgJXUgcHJ6ZWRzdGF3aWEgc2nqIGpha28gJXMiCisKKyM6IHJmYzIxMzEuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgVmVuZG9yIGNsYXNzOiAlcyIKK21zZ3N0ciAiJXUga2xhc2Ega2xpZW50YTogJXMiCisKKyM6IHJmYzIxMzEuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgVXNlciBjbGFzczogJXMiCittc2dzdHIgIiV1IEtsYXNhIHW/eXRrb3duaWthOiAlcyIKKworIzogcmZjMjEzMS5jOjczNworbXNnaWQgIlBYRSBCSVMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiUFhFIEJJUyBuaWUgamVzdCBvYnOzdWdpd2FuZSIKKworIzogcmZjMjEzMS5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJkaXNhYmxpbmcgREhDUCBzdGF0aWMgYWRkcmVzcyAlcyBmb3IgJXMiCittc2dzdHIgInd5s7FjemFtIHN0YXR5Y3puZSBwcnp5cGlzYW5pZSBhZHJlc3UgJXMgZGxhICVzIgorCisjOiByZmMyMTMxLmM6ODc0Cittc2dpZCAidW5rbm93biBsZWFzZSIKK21zZ3N0ciAibmllem5hbmEgZHppZXK/YXdhIgorCisjOiByZmMyMTMxLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiCittc2dzdHIgIm5pZSBwcm9wb251auogemFrs2FkYW5lZ28gdyBrb25maWd1cmFjamkgYWRyZXN1ICVzLCBibyBqZXN0IG9uIGp1vyB3eWR6aWVyv2F3aW9ueSBrb21wdXRlcm93aSAlcyIKKworIzogcmZjMjEzMS5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgIm5pZSBwcm9wb251auogemFrs2FkYW5lZ28gdyBrb25maWd1cmFjamkgYWRyZXN1ICVzLCBibyB1v3l3YSBnbyBrdPNyebYgeiBzZXJ3ZXLzdyIKKworIzogcmZjMjEzMS5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgd2FzIHByZXZpb3VzbHkgZGVjbGluZWQiCittc2dzdHIgIm5pZSBwcm9wb251auogemFrs2FkYW5lZ28gdyBrb25maWd1cmFjamkgYWRyZXN1ICVzLCBibyBqdb8gcG9wcnplZG5pbyB6b3N0YbMgb2RyenVjb255IgorCisjOiByZmMyMTMxLmM6OTM1IHJmYzIxMzEuYzoxMTA2Cittc2dpZCAibm8gdW5pcXVlLWlkIgorbXNnc3RyICJicmFrIHVuaWthbG5lZ28gaWQiCisKKyM6IHJmYzIxMzEuYzoxMDAzCittc2dpZCAid3Jvbmcgc2VydmVyLUlEIgorbXNnc3RyICJuaWVwcmF3aWSzb3d5IGlkZW50eWZpa2F0b3Igc2Vyd2VyYSAoc2VydmVyLUlEKSIKKworIzogcmZjMjEzMS5jOjEwMjIKK21zZ2lkICJ3cm9uZyBhZGRyZXNzIgorbXNnc3RyICJis+pkbnkgYWRyZXMiCisKKyM6IHJmYzIxMzEuYzoxMDM5Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICJkemllcr9hd2Egbmllem5hbGV6aW9uYSIKKworIzogcmZjMjEzMS5jOjEwNzEKK21zZ2lkICJhZGRyZXNzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgImFkcmVzIG5pZWRvc3TqcG55IgorCisjOiByZmMyMTMxLmM6MTA4MgorbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgImRvc3TqcG5hIHN0YXR5Y3puYSBkemllcr9hd2EiCisKKyM6IHJmYzIxMzEuYzoxMDg2Cittc2dpZCAiYWRkcmVzcyByZXNlcnZlZCIKK21zZ3N0ciAiYWRyZXMgemFyZXplcndvd2FueSIKKworIzogcmZjMjEzMS5jOjEwOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJhbmRvbmluZyBsZWFzZSB0byAlcyBvZiAlcyIKK21zZ3N0ciAicG9yenVjYW0gcHJ6eXBpc2FuaWUgZG8gJXMgbmF6d3kgJXMiCisKKyM6IHJmYzIxMzEuYzoxNTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHRhZ3M6ICVzIgorbXNnc3RyICIldSBjZWNoeTogJXMiCisKKyM6IHJmYzIxMzEuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJvb3RmaWxlIG5hbWU6ICVzIgorbXNnc3RyICIldSBuYXp3YSBwbGlrdSBib290b3dhbmlhOiAlcyIKKworIzogcmZjMjEzMS5jOjE2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgc2VydmVyIG5hbWU6ICVzIgorbXNnc3RyICIldSBuYXp3YSBzZXJ3ZXJhOiAlcyIKKworIzogcmZjMjEzMS5jOjE2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgbmV4dCBzZXJ2ZXI6ICVzIgorbXNnc3RyICIldSBuYXN06nBueSBzZXJ3ZXI6ICVzIgorCisjOiByZmMyMTMxLmM6MTY4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBESENQL0JPT1RQIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiBwYWNrZXQiCittc2dzdHIgIm5pZSBtYW0gbW+/bGl3b7ZjaSB3eXOzYW5pYSBvcGNqaSAlZCBESENQL0JPT1RQOiBuaWVkb3N0YXRlY3puYSBpbG+25iBtaWVqc2NhIHcgcGFraWVjaWUiCisKKyM6IHJmYzIxMzEuYzoxOTE5Cittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICJtZW51IFBYRSB6Ynl0IGR1v2UiCisKKyM6IHJmYzIxMzEuYzoyMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGRvbWFpbiAlcyBmb3IgREhDUCBob3N0IG5hbWUgJXMiCittc2dzdHIgIk5pZSB1d3pnbOpkbmlhbSBjeuq2Y2kgZG9tZW5vd2VqICglcykgZGxhIGtvbXB1dGVyYSAlcyIKKworIzogcmZjMjEzMS5jOjIwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVxdWVzdGVkIG9wdGlvbnM6ICVzIgorbXNnc3RyICIldSB3c2themFuZSBvcGNqZTogJXMiCisKKyM6IG5ldGxpbmsuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIKK21zZ3N0ciAibmllIHBvdHJhZmnqIHV0d29yennmIHBvs7FjemVuaWEgbmV0bGluayAlcyIKKworIzogbmV0bGluay5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXRsaW5rIHJldHVybnMgZXJyb3I6ICVzIgorbXNnc3RyICJ3eXN0sXBpsyBis7FkIHcgcG+zsWN6ZW5pdSBuZXRsaW5rICVzIgorCisjOiBkYnVzLmM6MTUwCittc2dpZCAiYXR0ZW1wdCB0byBzZXQgYW4gSVB2NiBzZXJ2ZXIgYWRkcmVzcyB2aWEgREJ1cyAtIG5vIElQdjYgc3VwcG9ydCIKK21zZ3N0ciAicHLzYmEgdXN0YXdpZW5pYSBhZHJlc3UgSVB2NiBzZXJ3ZXJhIHByemV6IERCdXMsIGFsZSBicmFrIG9ic7N1Z2kgSVB2NiIKKworIzogZGJ1cy5jOjI4NgorbXNnaWQgInNldHRpbmcgdXBzdHJlYW0gc2VydmVycyBmcm9tIERCdXMiCittc2dzdHIgInVzdGF3aWFtIGFkcmVzeSBzZXJ3ZXLzdyBuYWRyeupkbnljaCBuYSBwb2RzdGF3aWUgaW5mb3JtYWNqaSBvZGVicmFueWNoIHogREJ1cyIKKworIzogZGJ1cy5jOjMyNAorbXNnaWQgImNvdWxkIG5vdCByZWdpc3RlciBhIERCdXMgbWVzc2FnZSBoYW5kbGVyIgorbXNnc3RyICJuaWUgbW+/bmEgemFyZWplc3Ryb3dh5iB1Y2h3eXR1IERCdXMiCisKKyM6IGJwZi5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1AgQlBGIHNvY2tldDogJXMiCittc2dzdHIgIm5pZSBwb3RyYWZp6iB1dHdvcnp55iBnbmlhemRhIERIQ1AgQlBGOiAlcyIKKworIzogYnBmLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVxdWVzdCBmb3IgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgdHlwZSAoJWQpIHJlY2VpdmVkIG9uICVzIgorbXNnc3RyICK/sWRhbmllIERIQ1Agb2QgdXJ6sWR6ZW5pYSBuaWVvYnOzdWdpd2FuZWdvIHR5cHUgKCVkKSBvZGVicmFubyBuYSAlcyIKKworIzogdGZ0cC5jOjE3OQorbXNnaWQgInVuYWJsZSB0byBnZXQgZnJlZSBwb3J0IGZvciBURlRQIgorbXNnc3RyICJicmFrIHdvbG5lZ28gcG9ydHUgZGxhIHVzs3VnaSBURlRQIgorCisjOiB0ZnRwLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAibmllb2Jzs3VnaXdhbmUgv7FkYW5pZSBvZCBrb21wdXRlcmEgJXMiCisKKyM6IHRmdHAuYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBzZW50ICVzIHRvICVzIgorbXNnc3RyICJwbGlrICVzIHByemVzs2FubyB6YSBwb21vY7EgVEZUUCBkbyAlcyIKKworIzogdGZ0cC5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAicGxpayAlcyBuaWUgem9zdGGzIHpuYWxlemlvbnkiCisKKyM6IHRmdHAuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBlcnJvciAlZCAlcyByZWNlaXZlZCBmcm9tICVzIgorbXNnc3RyICJis7FkIFRGVFA6ICVkIGJhanTzdyBvZGVicmFubyAoJXMpIHogJXMiCisKKyM6IHRmdHAuYzo0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIKK21zZ3N0ciAiYrOxZCB3eXN5s2FuaWEgcHJ6ZXogVEZUUCBwbGlrdSAlcyBkbyBrb21wdXRlcmEgJXMiCisKKyM6IGxvZy5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyZmxvdzogJWQgbG9nIGVudHJpZXMgbG9zdCIKK21zZ3N0ciAicHJ6ZXBls25pZW5pZTogc3RyYWNvbm8gJWQgd3Bpc/N3IGRvIGxvZ/N3IgorCisjOiBsb2cuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZhaWxlZDogJXMiCittc2dzdHIgIm5pZSB1ZGGzbyBzaeogemFwaXNh5iBrb211bmlrYXTzdyBkbyAlcyIKKworIzogbG9nLmM6NDE1Cittc2dpZCAiRkFJTEVEIHRvIHN0YXJ0IHVwIgorbXNnc3RyICJCo6FEOiBuaWUgdWRhs28gc2nqIHVydWNob21p5iBkbnNtYXNxLWEiCisKZGlmZiAtLWdpdCBhL3BvL3B0X0JSLnBvIGIvcG8vcHRfQlIucG8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODliODEzMwotLS0gL2Rldi9udWxsCisrKyBiL3BvL3B0X0JSLnBvCkBAIC0wLDAgKzEsMTQxMSBAQAorIyBQb3J0dWd1ZXNlIHRyYW5zbGF0aW9ucyBmb3IgZG5zbWFzcSBwYWNrYWdlLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiwgMjAwNi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGRuc21hc3EgMi4yNlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNi0xOCAxMjoyNCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNi0wMS0xNiAyMDo0MiswMDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPlxuIgorIkxhbmd1YWdlLVRlYW06IFBvcnR1Z3Vlc2UgPGxkcC1ickBiYXphci5jb25lY3RpdmEuY29tLmJyPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUFTQ0lJXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuID4gMSk7XG4iCisKKyM6IGNhY2hlLmM6NzY0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIG5hbWVzIGZyb20gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6Nzk4IGRoY3AuYzo3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFkZHJlc3MgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjg1NiBkaGNwLmM6ODAxCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzo4NjMgZGhjcC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6OTAyCittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjkzMyBvcHRpb24uYzoxMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGdpdmluZyBuYW1lICVzIHRvIHRoZSBESENQIGxlYXNlIG9mICVzIGJlY2F1c2UgdGhlIG5hbWUgZXhpc3RzIGluICVzIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjExMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSAlbHUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhY2hlIHNpemUgJWQsICVkLyVkIGNhY2hlIGluc2VydGlvbnMgcmUtdXNlZCB1bmV4cGlyZWQgY2FjaGUgZW50cmllcy4iCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMTMyCisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yd2FyZGVkICV1LCBxdWVyaWVzIGFuc3dlcmVkIGxvY2FsbHkgJXUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciAlcyMlZDogcXVlcmllcyBzZW50ICV1LCByZXRyaWVkIG9yIGZhaWxlZCAldSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MTkxCittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MjI5IG9wdGlvbi5jOjU0OAorbXNnaWQgImNvdWxkIG5vdCBnZXQgbWVtb3J5IgorbXNnc3RyICIiCisKKyM6IHV0aWwuYzoyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlOiAlcyIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgImluZmluaXRlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIyOAorbXNnaWQgIlNwZWNpZnkgbG9jYWwgYWRkcmVzcyhlcykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMjkKK21zZ2lkICJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzMAorbXNnaWQgIkZha2UgcmV2ZXJzZSBsb29rdXBzIGZvciBSRkMxOTE4IHByaXZhdGUgYWRkcmVzcyByYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzMQorbXNnaWQgIlRyZWF0IGlwYWRkciBhcyBOWERPTUFJTiAoZGVmZWF0cyBWZXJpc2lnbiB3aWxkY2FyZCkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBjYWNoZSBpbiBlbnRyaWVzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjM1Cittc2dpZCAiRG8gTk9UIGZvcndhcmQgcXVlcmllcyB3aXRoIG5vIGRvbWFpbiBwYXJ0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzYKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjM3Cittc2dpZCAiRXhwYW5kIHNpbXBsZSBuYW1lcyBpbiAvZXRjL2hvc3RzIHdpdGggZG9tYWluLXN1ZmZpeC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjM4Cittc2dpZCAiRG9uJ3QgZm9yd2FyZCBzcHVyaW91cyBETlMgcmVxdWVzdHMgZnJvbSBXaW5kb3dzIGhvc3RzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzkKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIGdyb3VwIGFmdGVyIHN0YXJ0dXAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQxCittc2dpZCAiU2V0IGFkZHJlc3Mgb3IgaG9zdG5hbWUgZm9yIGEgc3BlY2lmaWVkIG1hY2hpbmUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0MgorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDMKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9uIHNwZWNzIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIGxvYWQgJXMgZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgYSBob3N0cyBmaWxlIHRvIGJlIHJlYWQgaW4gYWRkaXRpb24gdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0NgorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ3Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgTk9UIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ4Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0OQorbXNnaWQgIk1hcCBSRkMzMDQ2IGNpcmN1aXQtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTAKK21zZ2lkICJNYXAgUkZDMzA0NiByZW1vdGUtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTEKK21zZ2lkICJNYXAgUkZDMzk5MyBzdWJzY3JpYmVyLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjUyCittc2dpZCAiRG9uJ3QgZG8gREhDUCBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTMKK21zZ2lkICJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1NQorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1NworbXNnaWQgIlJldHVybiBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU4Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1OQorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBwb2xsICVzIGZpbGUsIHJlbG9hZCBvbmx5IG9uIFNJR0hVUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjYxCittc2dpZCAiRG8gTk9UIGNhY2hlIGZhaWxlZCBzZWFyY2ggcmVzdWx0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBuYW1lc2VydmVycyBzdHJpY3RseSBpbiB0aGUgb3JkZXIgZ2l2ZW4gaW4gJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2MworbXNnaWQgIlNwZWNpZnkgb3B0aW9ucyB0byBiZSBzZW50IHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY0Cittc2dpZCAiREhDUCBvcHRpb24gc2VudCBldmVuIGlmIHRoZSBjbGllbnQgZG9lcyBub3QgcmVxdWVzdCBpdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY1Cittc2dpZCAiU3BlY2lmeSBwb3J0IHRvIGxpc3RlbiBmb3IgRE5TIHJlcXVlc3RzIG9uIChkZWZhdWx0cyB0byA1MykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIHN1cHBvcnRlZCBVRFAgcGFja2V0IHNpemUgZm9yIEVETlMuMCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjcKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2OAorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY5Cittc2dpZCAiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjcxCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjcyCittc2dpZCAiTmV2ZXIgZm9yd2FyZCBxdWVyaWVzIHRvIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzMKK21zZ2lkICJTcGVjaWZ5IHRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgaW4gREhDUCBsZWFzZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3NAorbXNnaWQgIlNwZWNpZnkgZGVmYXVsdCB0YXJnZXQgaW4gYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzUKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciByZXBsaWVzIGZyb20gL2V0Yy9ob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc2Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbmVnYXRpdmUgY2FjaGluZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIHVzZXIgYWZ0ZXIgc3RhcnR1cC4gKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc4Cittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc5Cittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjgwCittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjgxCittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4MgorbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3AgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCBvZiBQSUQgZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODUKK21zZ2lkICJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODYKK21zZ2lkICJTcGVjaWZ5IFRYVCBETlMgcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODcKK21zZ2lkICJTcGVjaWZ5IFBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODgKK21zZ2lkICJHaXZlIEROUyBuYW1lIHRvIElQdjQgYWRkcmVzcyBvZiBpbnRlcmZhY2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4OQorbXNnaWQgIkJpbmQgb25seSB0byBpbnRlcmZhY2VzIGluIHVzZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWQgREhDUCBzdGF0aWMgaG9zdCBpbmZvcm1hdGlvbiBmcm9tICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTEKK21zZ2lkICJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkyCittc2dpZCAiRG8gbm90IHByb3ZpZGUgREhDUCBvbiB0aGlzIGludGVyZmFjZSwgb25seSBwcm92aWRlIEROUy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkzCittc2dpZCAiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk0Cittc2dpZCAiTWFwIE1BQyBhZGRyZXNzICh3aXRoIHdpbGRjYXJkcykgdG8gb3B0aW9uIHNldC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk1Cittc2dpZCAiVHJlYXQgREhDUCByZXF1ZXN0cyBvbiBhbGlhc2VzIGFzIGFycml2aW5nIGZyb20gaW50ZXJmYWNlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTYKK21zZ2lkICJEaXNhYmxlIElDTVAgZWNobyBhZGRyZXNzIGNoZWNraW5nIGluIHRoZSBESENQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk3Cittc2dpZCAiU2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk4Cittc2dpZCAiUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk5Cittc2dpZCAiTG9nIHRvIHRoaXMgc3lzbG9nIGZhY2lsaXR5IG9yIGZpbGUuIChkZWZhdWx0cyB0byBEQUVNT04pIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwMAorbXNnaWQgIkRvIG5vdCB1c2UgbGVhc2VmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcy4gKGRlZmF1bHRzIHRvICVzKSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDMKK21zZ2lkICJJZ25vcmUgaG9zdG5hbWVzIHByb3ZpZGVkIGJ5IERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzA0Cittc2dpZCAiRG8gTk9UIHJldXNlIGZpbGVuYW1lIGFuZCBzZXJ2ZXIgZmllbGRzIGZvciBleHRyYSBESENQIG9wdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNQorbXNnaWQgIkVuYWJsZSBpbnRlZ3JhdGVkIHJlYWQtb25seSBURlRQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzA2Cittc2dpZCAiRXhwb3J0IGZpbGVzIGJ5IFRGVFAgb25seSBmcm9tIHRoZSBzcGVjaWZpZWQgc3VidHJlZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzA3Cittc2dpZCAiQWRkIGNsaWVudCBJUCBhZGRyZXNzIHRvIHRmdHAtcm9vdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzA4Cittc2dpZCAiQWxsb3cgYWNjZXNzIG9ubHkgdG8gZmlsZXMgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBkbnNtYXNxLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29ubmN1cnJlbnQgVEZUUCB0cmFuc2ZlcnMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzEwCittc2dpZCAiRGlzYWJsZSB0aGUgVEZUUCBibG9ja3NpemUgZXh0ZW5zaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTEKK21zZ2lkICJFcGhlbWVyYWwgcG9ydCByYW5nZSBmb3IgdXNlIGJ5IFRGVFAgdHJhbnNmZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTIKK21zZ2lkICJFeHRyYSBsb2dnaW5nIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTMKK21zZ2lkICJFbmFibGUgYXN5bmMuIGxvZ2dpbmc7IG9wdGlvbmFsbHkgc2V0IHF1ZXVlIGxlbmd0aC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE0Cittc2dpZCAiU3RvcCBETlMgcmViaW5kaW5nLiBGaWx0ZXIgcHJpdmF0ZSBJUCByYW5nZXMgd2hlbiByZXNvbHZpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxNQorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTYKK21zZ2lkICJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE3Cittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTgKK21zZ2lkICJSdW4gbGVhc2UtY2hhbmdlIHNjcmlwdCBhcyB0aGlzIHVzZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxOQorbXNnaWQgIlNwZWNpZnkgTkFQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzIwCittc2dpZCAiU3BlY2lmeSBsb3dlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMQorbXNnaWQgIlVzZSBvbmx5IGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZXMgZm9yIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzIyCittc2dpZCAiU3BlY2lmeSBhbGlhcyBuYW1lIGZvciBMT0NBTCBETlMgbmFtZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzIzCittc2dpZCAiUHJvbXB0IHRvIHNlbmQgdG8gUFhFIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyNAorbXNnaWQgIkJvb3Qgc2VydmljZSBmb3IgUFhFIG1lbnUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyNQorbXNnaWQgIkNoZWNrIGNvbmZpZ3VyYXRpb24gc3ludGF4LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiBkbnNtYXNxIFtvcHRpb25zXVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2Ugc2hvcnQgb3B0aW9ucyBvbmx5IG9uIHRoZSBjb21tYW5kIGxpbmUuXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbGlkIG9wdGlvbnMgYXJlOlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQIG9wdGlvbnM6XG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NzM1Cittc2dpZCAiYmFkIGRoY3Atb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjc5MgorbXNnaWQgImJhZCBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjg5MQorbXNnaWQgImJhZCBkb21haW4gaW4gZGhjcC1vcHRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6OTUwCittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6OTU5Cittc2dpZCAiaWxsZWdhbCBkaGNwLW1hdGNoIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjk5NQorbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQgZmxhZyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDAzCittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBrZXl3b3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEwODYgdGZ0cC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMTMxCittc2dpZCAib25seSBvbmUgZGhjcC1ob3N0c2ZpbGUgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMTM4Cittc2dpZCAib25seSBvbmUgZGhjcC1vcHRzZmlsZSBhbGxvd2VkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjExODMKK21zZ2lkICJiYWQgTVggcHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMTg4Cittc2dpZCAiYmFkIE1YIG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTIwMgorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTIxMgorbXNnaWQgImNhbm5vdCBydW4gc2NyaXB0cyB1bmRlciB1Q2xpbnV4IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEyMTQKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX1NDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNDQyIG9wdGlvbi5jOjE0NDYKK21zZ2lkICJiYWQgcG9ydCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNDY1IG9wdGlvbi5jOjE0OTAKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2MTEKK21zZ2lkICJiYWQgcG9ydCByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjI4Cittc2dpZCAiYmFkIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTY2OQorbXNnaWQgImJhZCBkaGNwLXJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2OTUKK21zZ2lkICJvbmx5IG9uZSBuZXRpZCB0YWcgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNzQwCittc2dpZCAiaW5jb25zaXN0ZW50IERIQ1AgcmFuZ2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTkxMgorbXNnaWQgImJhZCBESENQIGhvc3QgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMjAxIG9wdGlvbi5jOjI0ODEKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIyODQKK21zZ2lkICJpbnZhbGlkIGFsaWFzIHJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIyOTcKK21zZ2lkICJiYWQgaW50ZXJmYWNlIG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjMyMgorbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzI3Cittc2dpZCAiZHVwbGljYXRlIENOQU1FIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzNDcKK21zZ2lkICJiYWQgUFRSIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzc4Cittc2dpZCAiYmFkIE5BUFRSIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDAzCittc2dpZCAiVFhUIHJlY29yZCBzdHJpbmcgdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ1MQorbXNnaWQgImJhZCBUWFQgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0NjcKK21zZ2lkICJiYWQgU1JWIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDc0Cittc2dpZCAiYmFkIFNSViB0YXJnZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ4OAorbXNnaWQgImludmFsaWQgcHJpb3JpdHkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ5NQorbXNnaWQgImludmFsaWQgd2VpZ2h0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1MTQKK21zZ2lkICJ1bnN1cHBvcnRlZCBvcHRpb24gKGNoZWNrIHRoYXQgZG5zbWFzcSB3YXMgY29tcGlsZWQgd2l0aCBESENQL1RGVFAvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGVzIG5lc3RlZCB0b28gZGVlcCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTY1IHRmdHAuYzo1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2MjYKK21zZ2lkICJtaXNzaW5nIFwiIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NzMKK21zZ2lkICJiYWQgb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NzUKK21zZ2lkICJleHRyYW5lb3VzIHBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjc3Cittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY4NQorbXNnaWQgImVycm9yIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYXQgbGluZSAlZCBvZiAlJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc0MCBvcHRpb24uYzoyNzcxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29tcGlsZSB0aW1lIG9wdGlvbnMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdFxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIDMuXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg1OAorbXNnaWQgInRyeSAtLWhlbHAiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg2MAorbXNnaWQgInRyeSAtdyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODYzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb21tYW5kIGxpbmUgb3B0aW9uczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGhvc3QtbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkzMgorbXNnaWQgIm9ubHkgb25lIHJlc29sdi5jb25mIGZpbGUgYWxsb3dlZCBpbiBuby1wb2xsIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NDIKK21zZ2lkICJtdXN0IGhhdmUgZXhhY3RseSBvbmUgcmVzb2x2LmNvbmYgdG8gcmVhZCBkb21haW4gZnJvbS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk0NSBuZXR3b3JrLmM6NzU0IGRoY3AuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2VhcmNoIGRpcmVjdGl2ZSBmb3VuZCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTgzCittc2dpZCAidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5ODcKK21zZ2lkICJzeW50YXggY2hlY2sgT0siCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjQzNworbXNnaWQgInBvc3NpYmxlIEROUy1yZWJpbmQgYXR0YWNrIGRldGVjdGVkIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo0MTcgZG5zbWFzcS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpc3RlbmluZyBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBJUFY2IG9wdGlvbnMgb24gbGlzdGVuaW5nIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbGlzdGVuIG9uIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIFRGVFAgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIHNlcnZlciBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBsb2NhbCBpbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gY2Fubm90IG1ha2UvYmluZCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MjAKK21zZ2lkICJ1bnF1YWxpZmllZCIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzIwCittc2dpZCAibmFtZXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcyMgorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcyNAorbXNnaWQgImRvbWFpbiIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzI5CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgZm9yICVzICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCh2aWEgJXMpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTQ2Cittc2dpZCAiVEZUUCBzZXJ2ZXIgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfVEZUUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE1MQorbXNnaWQgImFzeWNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBTb2xhcmlzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgbGlzdCBvZiBpbnRlcmZhY2VzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gaW50ZXJmYWNlIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjAxIGRuc21hc3EuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiREJ1cyBlcnJvcjogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIwNAorbXNnaWQgIkRCdXMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHVzZXIgb3IgZ3JvdXA6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBpbGUgdGltZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDYwCittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGNvbm5lY3RlZCB0byBzeXN0ZW0gYnVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0NjIKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogYnVzIGNvbm5lY3Rpb24gcGVuZGluZyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGZhaWxlZCB0byBjaGFuZ2Ugb3duZXIgb2YgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0NzEKK21zZ2lkICJzZXR0aW5nIC0tYmluZC1pbnRlcmZhY2VzIG9wdGlvbiBiZWNhdXNlIG9mIE9TIGxpbWl0YXRpb25zIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogaW50ZXJmYWNlICVzIGRvZXMgbm90IGN1cnJlbnRseSBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDgxCittc2dpZCAid2FybmluZzogaWdub3JpbmcgcmVzb2x2LWZpbGUgZmxhZyBiZWNhdXNlIG5vLXJlc29sdiBpcyBzZXQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ4NAorbXNnaWQgIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgc3RhdGljIGxlYXNlcyBvbmx5IG9uICUuMHMlcywgbGVhc2UgdGltZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIHByb3h5IG9uIHN1Ym5ldCAlLjBzJXMlLjBzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgSVAgcmFuZ2UgJXMgLS0gJXMsIGxlYXNlIHRpbWUgJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjUxOQorbXNnaWQgInJvb3QgaXMgIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo1MTkKK21zZ2lkICJlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo1MjEKK21zZ2lkICJzZWN1cmUgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3RyaWN0aW5nIG1heGltdW0gc2ltdWx0YW5lb3VzIFRGVFAgdHJhbnNmZXJzIHRvICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NjcKK21zZ2lkICJjb25uZWN0ZWQgdG8gc3lzdGVtIERCdXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBoZWxwZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgdXNlci1pZCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIGdyb3VwLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBpZGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hpbGQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hpbGQgcHJvY2VzcyBleGl0ZWQgd2l0aCBzdGF0dXMgJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg4NQorbXNnaWQgImV4aXRpbmcgb24gcmVjZWlwdCBvZiBTSUdURVJNIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo5MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2VydmVycyBmb3VuZCBpbiAlcywgd2lsbCByZXRyeSIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgSUNNUCByYXcgc29ja2V0OiAlcy4iCittc2dzdHIgIiIKKworIzogZGhjcC5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6Mzg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmFuZ2UgJXMgLS0gJXMgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCBuZXRtYXNrICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGxpbmUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICVzIGxpbmUgJWQsIGR1cGxpY2F0ZSBuYW1lIG9yIElQIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gJXMuIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBpbiBob3N0c2ZpbGUsIHVzaW5nICVzIGZvciBESENQIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo5NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBvciBjcmVhdGUgbGVhc2UgZmlsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzo5MgorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJ1biBsZWFzZS1pbml0IHNjcmlwdCAlczogJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibGVhc2UtaW5pdCBzY3JpcHQgcmV0dXJuZWQgZXhpdCBjb2RlICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSAlczogJXMgKHJldHJ5IGluICV1cykiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUCByZXF1ZXN0ICVzICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozMzcKK21zZ2lkICJ3aXRoIHN1Ym5ldCBzZWxlY3RvciIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzM3Cittc2dpZCAidmlhIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgQXZhaWxhYmxlIERIQ1Agc3VibmV0OiAlcy8lcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IEF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6Mzg0Cittc2dpZCAiZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQxOCByZmMyMTMxLmM6ODgzIHJmYzIxMzEuYzoxMjQyCittc2dpZCAiaWdub3JlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NDMzIHJmYzIxMzEuYzoxMTAwCittc2dpZCAiYWRkcmVzcyBpbiB1c2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQ0NyByZmMyMTMxLmM6OTM3Cittc2dpZCAibm8gYWRkcmVzcyBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQ1NCByZmMyMTMxLmM6MTA2MworbXNnaWQgIndyb25nIG5ldHdvcmsiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQ2NworbXNnaWQgIm5vIGFkZHJlc3MgY29uZmlndXJlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NDczIHJmYzIxMzEuYzoxMTEzCittc2dpZCAibm8gbGVhc2VzIGxlZnQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjU1OAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgcHJvdmlkZXMgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBWZW5kb3IgY2xhc3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgVXNlciBjbGFzczogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjczNworbXNnaWQgIlBYRSBCSVMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6ODc0Cittc2dpZCAidW5rbm93biBsZWFzZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjkxNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgd2FzIHByZXZpb3VzbHkgZGVjbGluZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjkzNSByZmMyMTMxLmM6MTEwNgorbXNnaWQgIm5vIHVuaXF1ZS1pZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAwMworbXNnaWQgIndyb25nIHNlcnZlci1JRCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAyMgorbXNnaWQgIndyb25nIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMzkKK21zZ2lkICJsZWFzZSBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwNzEKK21zZ2lkICJhZGRyZXNzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwODIKK21zZ2lkICJzdGF0aWMgbGVhc2UgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDg2Cittc2dpZCAiYWRkcmVzcyByZXNlcnZlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICJhYmFuZG9uaW5nIGxlYXNlIHRvICVzIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHRhZ3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJvb3RmaWxlIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHNlcnZlciBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTYxMworIywgYy1mb3JtYXQKK21zZ2lkICIldSBuZXh0IHNlcnZlcjogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE2ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgREhDUC9CT09UUCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gcGFja2V0IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxOTE5Cittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGRvbWFpbiAlcyBmb3IgREhDUCBob3N0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjIwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVxdWVzdGVkIG9wdGlvbnM6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldGxpbmsuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXRsaW5rLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldGxpbmsgcmV0dXJucyBlcnJvcjogJXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjE1MAorbXNnaWQgImF0dGVtcHQgdG8gc2V0IGFuIElQdjYgc2VydmVyIGFkZHJlc3MgdmlhIERCdXMgLSBubyBJUHY2IHN1cHBvcnQiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjI4NgorbXNnaWQgInNldHRpbmcgdXBzdHJlYW0gc2VydmVycyBmcm9tIERCdXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjMyNAorbXNnaWQgImNvdWxkIG5vdCByZWdpc3RlciBhIERCdXMgbWVzc2FnZSBoYW5kbGVyIgorbXNnc3RyICIiCisKKyM6IGJwZi5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1AgQlBGIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogYnBmLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVxdWVzdCBmb3IgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgdHlwZSAoJWQpIHJlY2VpdmVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzoxNzkKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGZyZWUgcG9ydCBmb3IgVEZUUCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgc2VudCAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBlcnJvciAlZCAlcyByZWNlaXZlZCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcmZsb3c6ICVkIGxvZyBlbnRyaWVzIGxvc3QiCittc2dzdHIgIiIKKworIzogbG9nLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjQxNQorbXNnaWQgIkZBSUxFRCB0byBzdGFydCB1cCIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvcG8vcm8ucG8gYi9wby9yby5wbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNmMyNDkyCi0tLSAvZGV2L251bGwKKysrIGIvcG8vcm8ucG8KQEAgLTAsMCArMSwxNTAzIEBACisjIFJvbWFuaWFuIHRyYW5zbGF0aW9ucyBmb3IgZG5zbWFzcSBwYWNrYWdlLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiwgMjAwNS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGRuc21hc3EgMi4yNFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNi0xOCAxMjoyNCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNS0xMS0yMiAxNjo0NiswMDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPlxuIgorIkxhbmd1YWdlLVRlYW06IFJvbWFuaWFuIDx0cmFuc2xhdGlvbi10ZWFtLXJvQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIyBmb3IgY29tcGF0aWJpbGl0eSBwdXJwb3NlcyB0aGUgbGV0dGVycyDDoiwgxIMsIMWfLCDFoyBhbmQgw64gY2FuIGJlIHdyaXR0ZW4gYXMgdGhlaXIgbG9vay1hbGlrZSBjb3JyZXNwb25kZW50LgorIzogY2FjaGUuYzo3NjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIG5hbWVzIGZyb20gJXM6ICVzIgorbXNnc3RyICLDrm5jxINyY2FyZWEgbnVtZWxvciBkaW4gJXM6ICVzIGEgZcWfdWF0IgorCisjOiBjYWNoZS5jOjc5OCBkaGNwLmM6Nzg1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImFkcmVzxIMgZ3JlxZ9pdMSDIMOubiAlcywgbGluaWEgJWQiCisKKyM6IGNhY2hlLmM6ODU2IGRoY3AuYzo4MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG5hbWUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAibnVtZSBncmXFn2l0IMOubiAlcyBsaW5pYSAlZCIKKworIzogY2FjaGUuYzo4NjMgZGhjcC5jOjg3NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIgorbXNnc3RyICJjaXRlc2MgJXMgLSAlZCBhZHJlc2UiCisKKyM6IGNhY2hlLmM6OTAyCittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAibWVtb3JpYSB0ZW1wb3JhcsSDIGEgZm9zdCDFn3RlYXJzxIMiCisKKyM6IGNhY2hlLmM6OTMzIG9wdGlvbi5jOjEwNTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBjYWNoZS5jOjEwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGdpdmluZyBuYW1lICVzIHRvIHRoZSBESENQIGxlYXNlIG9mICVzIGJlY2F1c2UgdGhlIG5hbWUgZXhpc3RzIGluICVzIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAibnUgcG90IGRhIG51bWVsZSAlcyDDrm1wcnVtdXR1bHVpIGRlIGFkcmVzxIMgREhDUCBhIGx1aSAlcyBkZW9hcmVjZSBudW1lbGVleGlzdMSDIMOubiAlcyBjdSBhZHJlc2EgJXMiCisKKyM6IGNhY2hlLmM6MTEyOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lICVsdSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjExMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhY2hlIHNpemUgJWQsICVkLyVkIGNhY2hlIGluc2VydGlvbnMgcmUtdXNlZCB1bmV4cGlyZWQgY2FjaGUgZW50cmllcy4iCittc2dzdHIgImNhbnRpdGF0ZSBkZSBtZW1vcmllIHRlbXBvcmFyxIMgJWQsICVkLyVkIHN0b2PEg3JpIHRlbXBvcmFyZSBhdXJldXRpbGl6YXQgbG9jYcWjaWkgbmVleHBpcmF0ZS4iCisKKyM6IGNhY2hlLmM6MTEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvcndhcmRlZCAldSwgcXVlcmllcyBhbnN3ZXJlZCBsb2NhbGx5ICV1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2VlZCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3I6ICVzIgorbXNnc3RyICJhc2N1bHRhcmVhIHBlIHNvY2tldCBhIGXFn3VhdDogJXMiCisKKyM6IHV0aWwuYzoxOTEKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAibnUgcG90IMOubmPEg3JjYSAlZCBieXRlcyIKKworIzogdXRpbC5jOjIyOSBvcHRpb24uYzo1NDgKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAibnUgYW0gcHV0dXQgYWxvY2EgbWVtb3JpZSIKKworIzogdXRpbC5jOjIzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiB1dGlsLmM6MjQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgIm51IHBvdCDDrm5jxINyY2EgJWQgYnl0ZXMiCisKKyM6IHV0aWwuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5maW5pdGUiCittc2dzdHIgImluZmluaXQiCisKKyM6IG9wdGlvbi5jOjIyOAorbXNnaWQgIlNwZWNpZnkgbG9jYWwgYWRkcmVzcyhlcykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiU3BlY2lmaWNhxaNpIGFkcmVzZWxlIGxvY2FsZSBkZXNlcnZpdGUuIgorCisjOiBvcHRpb24uYzoyMjkKK21zZ2lkICJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICJBZmnFn2VhesSDIGFkcmVzZWxlIElQIGFsZSBtYcWfaW5pbG9yIMOubiBkb21lbml1bCBkYXQuIgorCisjOiBvcHRpb24uYzoyMzAKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiU2ltdWxlYXrEgyBjxIN1dMSDcmkgZHVwxIMgYWRyZXPEgyBwZW50cnUgZG9tZW5paSBkZSBhZHJlc8SDIHByaXZhdGUgKFJGQzE5MTgpLiIKKworIzogb3B0aW9uLmM6MjMxCittc2dpZCAiVHJlYXQgaXBhZGRyIGFzIE5YRE9NQUlOIChkZWZlYXRzIFZlcmlzaWduIHdpbGRjYXJkKS4iCittc2dzdHIgIkludGVycHJldGVhesSDIGFkcmVzYSBJUCBjYSBOWERPTUFJTiAow65tcG90cml2YSBtYW5pcHVsxINyaWxvciBWZXJpc2lnbikiCisKKyM6IG9wdGlvbi5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBjYWNoZSBpbiBlbnRyaWVzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVjaWZpY8SDIG3Eg3JpbWVhIMOubnJlZ2lzdHLEg3JpbG9yIHRlbXBvcmFyZSAoaW1wbGljaXQgZSAlcykuIgorCisjOiBvcHRpb24uYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZWNpZmljxIMgZmnFn2llciBkZSBjb25maWd1cmFyZSAoaW1wbGljaXQgZSAlcykuIgorCisjOiBvcHRpb24uYzoyMzQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIk5VIHBvcm5lxZ90ZSDDrm4gZnVuZGFsOiBydWxlYXrEgyDDrm4gbW9kdWwgZGVwYW5hcmUuIgorCisjOiBvcHRpb24uYzoyMzUKK21zZ2lkICJEbyBOT1QgZm9yd2FyZCBxdWVyaWVzIHdpdGggbm8gZG9tYWluIHBhcnQuIgorbXNnc3RyICJOVSDDrm5haW50YSBjZXJlcmlsZSBjZSBudSBjb27Fo2luIGRvbWVuaXUgRE5TLiIKKworIzogb3B0aW9uLmM6MjM2Cittc2dpZCAiUmV0dXJuIHNlbGYtcG9pbnRpbmcgTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICJSxINzcHVuZGUgY3Ugw65ucmVnaXN0csSDcmkgTVggc3ByZSBlbCDDrm5zdcWfaSBwZW50cnUgbWHFn2luaSBsb2NhbGUuIgorCisjOiBvcHRpb24uYzoyMzcKK21zZ2lkICJFeHBhbmQgc2ltcGxlIG5hbWVzIGluIC9ldGMvaG9zdHMgd2l0aCBkb21haW4tc3VmZml4LiIKK21zZ3N0ciAiQWRhdWfEgyBudW1lbG9yIHNpbXBsZSBkaW4gL2V0Yy9ob3N0cyBudW1lbGUgZG9tZW5pdWx1aSBjYSBzdWZpeC4iCisKKyM6IG9wdGlvbi5jOjIzOAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIk51IGluYWludGEgY2VyZXJpIEROUyBkZWZlY3RlIHByb3Zlbml0ZSBkZSBsYSBtYcWfaW5pIFdpbmRvd3MuIgorCisjOiBvcHRpb24uYzoyMzkKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIkFjdGl2ZWF6xIMgREhDUCDDrm4gZG9tZW5pdWwgZGF0IGN1IGR1cmF0xIMgbGltaXRhdMSDIGRlIMOubXBydW11dC4iCisKKyM6IG9wdGlvbi5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyBncm91cCBhZnRlciBzdGFydHVwIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJSdWxlYXrEgyBzdWIgYWNlc3QgZ3J1cCBkdXDEgyBwb3JuaXJlIChpbXBsaWNpdCBlICVzKS4iCisKKyM6IG9wdGlvbi5jOjI0MQorbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiU2NoaW1ixIMgYWRyZXNhIHNhdSBudW1lbGUgbWHFn2luaWkgc3BlY2lmaWNhdGUuIgorCisjOiBvcHRpb24uYzoyNDIKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQzCittc2dpZCAiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBsb2FkICVzIGZpbGUuIgorbXNnc3RyICJOdSDDrm5jYXJjxIMgZmnFn2llcnVsICVzLiIKKworIzogb3B0aW9uLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgYSBob3N0cyBmaWxlIHRvIGJlIHJlYWQgaW4gYWRkaXRpb24gdG8gJXMuIgorbXNnc3RyICJTcGVjaWZpY8SDIHNwcmUgY2l0aXJlIHVuIGZpxZ9pZXIgaG9zdHMgYWRpxaNpb25hbCBsYSAlcy4iCisKKyM6IG9wdGlvbi5jOjI0NgorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlNwZWNpZmljxIMgaW50ZXJmZcWjZWxlIGRlc2Vydml0ZS4iCisKKyM6IG9wdGlvbi5jOjI0NworbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIE5PVCB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTcGVjaWZpY8SDIGludGVyZmXFo2VsZSBORS1kZXNlcnZpdGUuIgorCisjOiBvcHRpb24uYzoyNDgKKyMsIGZ1enp5Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJMZWFnxIMgY2xhc2EgZGUgdXRpbGl6YXRvciBESENQIGN1IGdydXAgZGUgb3DFo2l1bmkuIgorCisjOiBvcHRpb24uYzoyNDkKK21zZ2lkICJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjUwCittc2dpZCAiTWFwIFJGQzMwNDYgcmVtb3RlLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjUxCittc2dpZCAiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1MgorIywgZnV6enkKK21zZ2lkICJEb24ndCBkbyBESENQIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJOdSBmdXJuaXphIERIQ1AgbWHFn2luaWxvciBkaW4gZ3J1cHVsIGRlIG9wxaNpdW5pLiIKKworIzogb3B0aW9uLmM6MjUzCisjLCBmdXp6eQorbXNnaWQgIkZvcmNlIGJyb2FkY2FzdCByZXBsaWVzIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJOdSBmdXJuaXphIERIQ1AgbWHFn2luaWxvciBkaW4gZ3J1cHVsIGRlIG9wxaNpdW5pLiIKKworIzogb3B0aW9uLmM6MjU0Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZCwgZG8gTk9UIHJ1biBpbiBkZWJ1ZyBtb2RlLiIKK21zZ3N0ciAiTlUgcG9ybmXFn3RlIMOubiBmdW5kYWwsIE5VIHJ1bGVhesSDIMOubiBtb2R1bCBkZXBhbmFyZS4iCisKKyM6IG9wdGlvbi5jOjI1NQorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICJQcmVzdXB1bmUgY8SDIHN1bnRlbSBzaW5ndXJ1bCBzZXJ2ZXIgREhDUCBkaW4gcmXFo2VhdWEgbG9jYWzEgy4iCisKKyM6IG9wdGlvbi5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVjaWZpY8SDIGZpxZ9pZXJ1bCBkZSBzdG9jYXJlIGEgw65tcHJ1bXV0dXJpbG9yIERIQ1AgKGltcGxpY2l0IGUgJXMpLiIKKworIzogb3B0aW9uLmM6MjU3Cittc2dpZCAiUmV0dXJuIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiUsSDc3B1bmRlIGN1IMOubnRyZWdpc3RyxINyaSBNWCBwZW50cnUgbWHFn2luaSBsb2NhbGUuIgorCisjOiBvcHRpb24uYzoyNTgKK21zZ2lkICJTcGVjaWZ5IGFuIE1YIHJlY29yZC4iCittc2dzdHIgIlNwZWNpZmljxIMgbyDDrm5yZWdpc3RyYXJlIE1YLiIKKworIzogb3B0aW9uLmM6MjU5Cittc2dpZCAiU3BlY2lmeSBCT09UUCBvcHRpb25zIHRvIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBvcMWjaXVuaSBCT09UUCBzZXJ2ZXJ1bHVpIERIQ1AuIgorCisjOiBvcHRpb24uYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIHBvbGwgJXMgZmlsZSwgcmVsb2FkIG9ubHkgb24gU0lHSFVQLiIKK21zZ3N0ciAiTnUgw65uY8SDcmNhIGZpxZ9pZXJ1bCAlcywgY2l0ZcWfdGUtbCBkb2FyIGxhIFNJR0hVUC4iCisKKyM6IG9wdGlvbi5jOjI2MQorbXNnaWQgIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIgorbXNnc3RyICJOVSBtZW1vcmEgcmV6dWx0YXRlbGUgZGUgY8SDdXRhcmUgRE5TIGXFn3VhdGF0xIMuIgorCisjOiBvcHRpb24uYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIG5hbWVzZXJ2ZXJzIHN0cmljdGx5IGluIHRoZSBvcmRlciBnaXZlbiBpbiAlcy4iCittc2dzdHIgIkZvbG9zZcWfdGUgc2VydmVyZSBETlMgc3RyaWN0IMOubiBvcmRpbmVhIGRhdMSDIMOubiAlcy4iCisKKyM6IG9wdGlvbi5jOjI2MworIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IG9wdGlvbnMgdG8gYmUgc2VudCB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICJDb25maWd1cmVhesSDIG9wxaNpdW5pIMOubiBwbHVzY2UgdHJlYnVpZSB0cmltaXNlIGNsaWVuxaNpbG9yIERIQ1AuIgorCisjOiBvcHRpb24uYzoyNjQKK21zZ2lkICJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjUKK21zZ2lkICJTcGVjaWZ5IHBvcnQgdG8gbGlzdGVuIGZvciBETlMgcmVxdWVzdHMgb24gKGRlZmF1bHRzIHRvIDUzKS4iCittc2dzdHIgIlNwZWNpZmljxIMgbnVtxINydWwgcG9ydHVsdWkgcGVudHJ1IGNlcmVyaSBETlMgKGltcGxpY2l0IGUgNTMpLiIKKworIzogb3B0aW9uLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gc3VwcG9ydGVkIFVEUCBwYWNrZXQgc2l6ZSBmb3IgRUROUy4wIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJNYXJpbWVhIG1heGltxIMgYSBwYWNoZXR1bHVpIFVEUCBwZW50cnUgRUROUy4wIChpbXBsaWNpdCBlICVzKS4iCisKKyM6IG9wdGlvbi5jOjI2NworIywgZnV6enkKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICLDjm5yZWdpc3RyZWF6xIMgdHJhbnphY8WjaWlsZS4iCisKKyM6IG9wdGlvbi5jOjI2OAorIywgZnV6enkKK21zZ2lkICJGb3JjZSB0aGUgb3JpZ2luYXRpbmcgcG9ydCBmb3IgdXBzdHJlYW0gRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJGb3LFo2VhesSDIGFjZXN0IHBvcnQgcGVudHJ1IGRhdGVsZSBjZSBwbGVhY8SDLiIKKworIzogb3B0aW9uLmM6MjY5Cittc2dpZCAiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIgorbXNnc3RyICJOVSBjaXRpIGZpxZ9pZXJ1bCByZXNvbHYuY29uZiIKKworIzogb3B0aW9uLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCB0byByZXNvbHYuY29uZiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBjYWxlYSBjxIN0cmUgcmVzb2x2LmNvbmYgKGltcGxpY2l0IGUgJXMpLiIKKworIzogb3B0aW9uLmM6MjcxCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iCittc2dzdHIgIlNwZWNpZmljxIMgYWRyZXNlbGUgc2VydmVyKGVsb3IpIHN1cGVyaW9hcmUgY3UgZG9tZW5paSBvcMWjaW9uYWxlLiIKKworIzogb3B0aW9uLmM6MjcyCittc2dpZCAiTmV2ZXIgZm9yd2FyZCBxdWVyaWVzIHRvIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiTnUgw65uYWludGVhesSDIGNlcmVyaWxlIHNwcmUgZG9tZW5paWxlIHNwZWNpZmljYXRlLiIKKworIzogb3B0aW9uLmM6MjczCittc2dpZCAiU3BlY2lmeSB0aGUgZG9tYWluIHRvIGJlIGFzc2lnbmVkIGluIERIQ1AgbGVhc2VzLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBkb21lbml1bCBkZSB0cmFuc21pcyBwcmluIERIQ1AuIgorCisjOiBvcHRpb24uYzoyNzQKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIlNwZWNpZmljxIMgbyDFo2ludMSDIMOubnRyLW8gw65ucmVnaXN0cmFyZSBNWC4iCisKKyM6IG9wdGlvbi5jOjI3NQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIHJlcGxpZXMgZnJvbSAvZXRjL2hvc3RzLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBUVEwgw65uIHNlY3VuZGUgcGVudHJ1IHLEg3NwdW5zdXJpbGUgZGluIC9ldGMvaG9zdHMuIgorCisjOiBvcHRpb24uYzoyNzYKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbmVnYXRpdmUgY2FjaGluZy4iCittc2dzdHIgIlNwZWNpZmljxIMgVFRMIMOubiBzZWN1bmRlIHBlbnRydSByxINzcHVuc3VyaWxlIGRpbiAvZXRjL2hvc3RzLiIKKworIzogb3B0aW9uLmM6Mjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIHVzZXIgYWZ0ZXIgc3RhcnR1cC4gKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlJ1bGVhesSDIHN1YiBhY2VzdCB1dGlsaXphdG9yIGR1cMSDIHBvcm5pcmUuIChpbXBsaWNpdCBlICVzKS4iCisKKyM6IG9wdGlvbi5jOjI3OAorIywgZnV6enkKK21zZ2lkICJNYXAgREhDUCB2ZW5kb3IgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiVHJpbWl0ZSBvcMWjaXVuaSBESENQIMOubiBmdW5jxaNpZSBkZSBtYXJjYSBwbMSDY2lpIGRlIHJlxaNlYS4iCisKKyM6IG9wdGlvbi5jOjI3OQorbXNnaWQgIkRpc3BsYXkgZG5zbWFzcSB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uIgorbXNnc3RyICJBZmnFn2VhesSDIHZlcnNpdW5lYSBkbnNtYXNxIMWfaSBkcmVwdHVyaWxlIGRlIGF1dG9yLiIKKworIzogb3B0aW9uLmM6MjgwCittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIlRyYWR1Y2UgYWRyZXNlbGUgSVB2NCBkZSBsYSBzZXJ2ZXJlbGUgRE5TIHN1cGVyaW9hcmUuIgorCisjOiBvcHRpb24uYzoyODEKK21zZ2lkICJTcGVjaWZ5IGEgU1JWIHJlY29yZC4iCittc2dzdHIgIlNwZWNpZmljxIMgbyDDrm5yZWdpc3RyYXJlIFNSVi4iCisKKyM6IG9wdGlvbi5jOjI4MgorbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3AgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZWNpZmljxIMgbyBjYWxlIHBlbnRydSBmacWfaWVydWwgUElELiAoaW1wbGljaXQgJXMpLiIKKworIzogb3B0aW9uLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZWNpZmljxIMgbnVtxINydWwgbWF4aW0gZGUgw65tcHJ1bXV0dXJpIERIQ1AgKGltcGxpY2l0ICVzKS4iCisKKyM6IG9wdGlvbi5jOjI4NQorbXNnaWQgIkFuc3dlciBETlMgcXVlcmllcyBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlIGEgcXVlcnkgd2FzIHNlbnQgdG8uIgorbXNnc3RyICJSxINzcHVuZGUgY2VyZXJpbG9yIEROUyDDrm4gZnVuY8WjaWUgZGUgaW50ZXJmYcWjYSBwZSBjYXJlIGEgdmVuaXQgY2VyZXJlYS4iCisKKyM6IG9wdGlvbi5jOjI4NgorbXNnaWQgIlNwZWNpZnkgVFhUIEROUyByZWNvcmQuIgorbXNnc3RyICJTcGVjaWZpY8SDIG8gw65ucmVnaXN0cmFyZSBUWFQuIgorCisjOiBvcHRpb24uYzoyODcKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIlNwZWNpZmljxIMgbyDDrm5yZWdpc3RyYXJlIFRYVC4iCisKKyM6IG9wdGlvbi5jOjI4OAorbXNnaWQgIkdpdmUgRE5TIG5hbWUgdG8gSVB2NCBhZGRyZXNzIG9mIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg5Cittc2dpZCAiQmluZCBvbmx5IHRvIGludGVyZmFjZXMgaW4gdXNlLiIKK21zZ3N0ciAiQXNjdWx0xIMgZG9hciBwZSBpbnRlcmZlxaNlbGUgYWN0aXZlLiIKKworIzogb3B0aW9uLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWQgREhDUCBzdGF0aWMgaG9zdCBpbmZvcm1hdGlvbiBmcm9tICVzLiIKK21zZ3N0ciAiQ2l0ZcWfdGUgaW5mb3JtYcWjaWkgREhDUCBzdGF0aWNlIGRlc3ByZSBtYcWfaW7EgyBkaW4gJXMuIgorCisjOiBvcHRpb24uYzoyOTEKK21zZ2lkICJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iCittc2dzdHIgIkFjdGl2ZWF6YSBpbnRlcmZhxaNhIERCdXMgcGVudHJ1IGNvbmZpZ3VyYXJlYSBzZXJ2ZXJlbG9yIHN1cGVyaW9hcmUuIgorCisjOiBvcHRpb24uYzoyOTIKK21zZ2lkICJEbyBub3QgcHJvdmlkZSBESENQIG9uIHRoaXMgaW50ZXJmYWNlLCBvbmx5IHByb3ZpZGUgRE5TLiIKK21zZ3N0ciAiTnUgYWN0aXZlYXrEgyBESENQIGNpIGRvYXIgRE5TIHBlIGFjZWFzdMSDIGludGVyZmHFo8SDLiIKKworIzogb3B0aW9uLmM6MjkzCittc2dpZCAiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iCittc2dzdHIgIkFjdGl2ZWF6xIMgYWxvY2FyZWEgZGluYW1pY8SDIGEgYWRyZXNlbG9yIHBlbnRydSBCT09UUC4iCisKKyM6IG9wdGlvbi5jOjI5NAorIywgZnV6enkKK21zZ2lkICJNYXAgTUFDIGFkZHJlc3MgKHdpdGggd2lsZGNhcmRzKSB0byBvcHRpb24gc2V0LiIKK21zZ3N0ciAiVHJpbWl0ZSBvcMWjaXVuaSBESENQIMOubiBmdW5jxaNpZSBkZSBtYXJjYSBwbMSDY2lpIGRlIHJlxaNlYS4iCisKKyM6IG9wdGlvbi5jOjI5NQorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk2Cittc2dpZCAiRGlzYWJsZSBJQ01QIGVjaG8gYWRkcmVzcyBjaGVja2luZyBpbiB0aGUgREhDUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5NworbXNnaWQgIlNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5OAorbXNnaWQgIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5OQorIywgZnV6enkKK21zZ2lkICJMb2cgdG8gdGhpcyBzeXNsb2cgZmFjaWxpdHkgb3IgZmlsZS4gKGRlZmF1bHRzIHRvIERBRU1PTikiCittc2dzdHIgIlJ1bGVhesSDIHN1YiBhY2VzdCB1dGlsaXphdG9yIGR1cMSDIHBvcm5pcmUuIChpbXBsaWNpdCBlICVzKS4iCisKKyM6IG9wdGlvbi5jOjMwMAorbXNnaWQgIkRvIG5vdCB1c2UgbGVhc2VmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiCittc2dzdHIgIlNwZWNpZmljxIMgbnVtxINydWwgbWF4aW0gZGUgw65tcHJ1bXV0dXJpIERIQ1AgKGltcGxpY2l0ICVzKS4iCisKKyM6IG9wdGlvbi5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhciBETlMgY2FjaGUgd2hlbiByZWxvYWRpbmcgJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwMworbXNnaWQgIklnbm9yZSBob3N0bmFtZXMgcHJvdmlkZWQgYnkgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDQKK21zZ2lkICJEbyBOT1QgcmV1c2UgZmlsZW5hbWUgYW5kIHNlcnZlciBmaWVsZHMgZm9yIGV4dHJhIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzA1Cittc2dpZCAiRW5hYmxlIGludGVncmF0ZWQgcmVhZC1vbmx5IFRGVFAgc2VydmVyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDYKK21zZ2lkICJFeHBvcnQgZmlsZXMgYnkgVEZUUCBvbmx5IGZyb20gdGhlIHNwZWNpZmllZCBzdWJ0cmVlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDcKK21zZ2lkICJBZGQgY2xpZW50IElQIGFkZHJlc3MgdG8gdGZ0cC1yb290LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDgKK21zZ2lkICJBbGxvdyBhY2Nlc3Mgb25seSB0byBmaWxlcyBvd25lZCBieSB0aGUgdXNlciBydW5uaW5nIGRuc21hc3EuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29ubmN1cnJlbnQgVEZUUCB0cmFuc2ZlcnMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZWNpZmljxIMgbnVtxINydWwgbWF4aW0gZGUgw65tcHJ1bXV0dXJpIERIQ1AgKGltcGxpY2l0ICVzKS4iCisKKyM6IG9wdGlvbi5jOjMxMAorbXNnaWQgIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzExCittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzEyCittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzEzCittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxNAorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTUKK21zZ2lkICJBbHdheXMgcGVyZm9ybSBETlMgcXVlcmllcyB0byBhbGwgc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE2Cittc2dpZCAiU2V0IHRhZyBpZiBjbGllbnQgaW5jbHVkZXMgbWF0Y2hpbmcgb3B0aW9uIGluIHJlcXVlc3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxNworbXNnaWQgIlVzZSBhbHRlcm5hdGl2ZSBwb3J0cyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE4Cittc2dpZCAiUnVuIGxlYXNlLWNoYW5nZSBzY3JpcHQgYXMgdGhpcyB1c2VyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTkKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBOQVBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBvIMOubnJlZ2lzdHJhcmUgVFhULiIKKworIzogb3B0aW9uLmM6MzIwCittc2dpZCAiU3BlY2lmeSBsb3dlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMQorbXNnaWQgIlVzZSBvbmx5IGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZXMgZm9yIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzIyCittc2dpZCAiU3BlY2lmeSBhbGlhcyBuYW1lIGZvciBMT0NBTCBETlMgbmFtZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzIzCisjLCBmdXp6eQorbXNnaWQgIlByb21wdCB0byBzZW5kIHRvIFBYRSBjbGllbnRzLiIKK21zZ3N0ciAiQ29uZmlndXJlYXrEgyBvcMWjaXVuaSDDrm4gcGx1c2NlIHRyZWJ1aWUgdHJpbWlzZSBjbGllbsWjaWxvciBESENQLiIKKworIzogb3B0aW9uLmM6MzI0Cittc2dpZCAiQm9vdCBzZXJ2aWNlIGZvciBQWEUgbWVudS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI1Cittc2dpZCAiQ2hlY2sgY29uZmlndXJhdGlvbiBzeW50YXguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjYxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCittc2dzdHIgIiIKKyJVdGlsaXphcmU6IGRuc21hc3EgW29wxaNpdW5pXVxuIgorIlxuIgorCisjOiBvcHRpb24uYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIHNob3J0IG9wdGlvbnMgb25seSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuIgorbXNnc3RyICJGb2xvc2nFo2kgb3DFo2l1bmlsZSBwcmVzY3VydGF0ZSBkb2FyIMOubiBsaW5pZSBkZSBjb21hbmTEgy5cbiIKKworIzogb3B0aW9uLmM6NjE3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiT3DFo2l1bmlsZSB2YWxpZGUgc3VudDpcbiIKKworIzogb3B0aW9uLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1Agb3B0aW9uczpcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3MzUKK21zZ2lkICJiYWQgZGhjcC1vcHRpb24iCittc2dzdHIgImRoY3Atb3B0aW9uIGludmFsaWQiCisKKyM6IG9wdGlvbi5jOjc5MgorIywgZnV6enkKK21zZ2lkICJiYWQgSVAgYWRkcmVzcyIKK21zZ3N0ciAiY2l0ZXNjICVzIC0gJWQgYWRyZXNlIgorCisjOiBvcHRpb24uYzo4OTEKK21zZ2lkICJiYWQgZG9tYWluIGluIGRoY3Atb3B0aW9uIgorbXNnc3RyICJkb21lbml1IEROUyBpbnZhbGlkIMOubiBkZWNsYXJhxaNpYSBkaGNwLW9wdGlvbiIKKworIzogb3B0aW9uLmM6OTUwCittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgImRlY2xhcmFyZWEgZGhjcC1vcHRpb24gZXN0ZSBwcmVhIGx1bmfEgyIKKworIzogb3B0aW9uLmM6OTU5Cittc2dpZCAiaWxsZWdhbCBkaGNwLW1hdGNoIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjk5NQorbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQgZmxhZyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDAzCittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBrZXl3b3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEwODYgdGZ0cC5jOjM1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgIm51IHBvdCBjaXRpICVzOiAlcyIKKworIzogb3B0aW9uLmM6MTEzMQorbXNnaWQgIm9ubHkgb25lIGRoY3AtaG9zdHNmaWxlIGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTEzOAorbXNnaWQgIm9ubHkgb25lIGRoY3Atb3B0c2ZpbGUgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMTgzCittc2dpZCAiYmFkIE1YIHByZWZlcmVuY2UiCittc2dzdHIgInByZWZlcmluxaPEgyBNWCBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjExODgKK21zZ2lkICJiYWQgTVggbmFtZSIKK21zZ3N0ciAibnVtZSBNWCBpbnZhbGlkIgorCisjOiBvcHRpb24uYzoxMjAyCittc2dpZCAiYmFkIE1YIHRhcmdldCIKK21zZ3N0ciAixaNpbnTEgyBNWCBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjEyMTIKK21zZ2lkICJjYW5ub3QgcnVuIHNjcmlwdHMgdW5kZXIgdUNsaW51eCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMjE0Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9TQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgbGVhc2UtY2hhbmdlIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTQ0MiBvcHRpb24uYzoxNDQ2Cittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgInBvcnQgaW52YWxpZCIKKworIzogb3B0aW9uLmM6MTQ2NSBvcHRpb24uYzoxNDkwCittc2dpZCAiaW50ZXJmYWNlIGJpbmRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjExCisjLCBmdXp6eQorbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICJwb3J0IGludmFsaWQiCisKKyM6IG9wdGlvbi5jOjE2MjgKK21zZ2lkICJiYWQgYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjY5Cittc2dpZCAiYmFkIGRoY3AtcmFuZ2UiCittc2dzdHIgImRoY3AtcmFuZ2UgaW52YWxpZCIKKworIzogb3B0aW9uLmM6MTY5NQorbXNnaWQgIm9ubHkgb25lIG5ldGlkIHRhZyBhbGxvd2VkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE3NDAKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUCByYW5nZSIKK21zZ3N0ciAiZG9tZW5pdSBESENQIGluY29uc2lzdGVudCIKKworIzogb3B0aW9uLmM6MTkxMgorIywgZnV6enkKK21zZ2lkICJiYWQgREhDUCBob3N0IG5hbWUiCittc2dzdHIgIm51bWUgTVggaW52YWxpZCIKKworIzogb3B0aW9uLmM6MjIwMSBvcHRpb24uYzoyNDgxCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAibnVtxINyIGRlIHBvcnQgaW52YWxpZCIKKworIzogb3B0aW9uLmM6MjI4NAorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGFsaWFzIHJhbmdlIgorbXNnc3RyICJwb25kZXJlIGludmFsaWTEgyIKKworIzogb3B0aW9uLmM6MjI5NworIywgZnV6enkKK21zZ2lkICJiYWQgaW50ZXJmYWNlIG5hbWUiCittc2dzdHIgIm51bWUgTVggaW52YWxpZCIKKworIzogb3B0aW9uLmM6MjMyMgorbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMzI3Cittc2dpZCAiZHVwbGljYXRlIENOQU1FIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIzNDcKKyMsIGZ1enp5Cittc2dpZCAiYmFkIFBUUiByZWNvcmQiCittc2dzdHIgIsOubnJlZ2lzdHJhcmUgU1JWIGludmFsaWTEgyIKKworIzogb3B0aW9uLmM6MjM3OAorIywgZnV6enkKK21zZ2lkICJiYWQgTkFQVFIgcmVjb3JkIgorbXNnc3RyICLDrm5yZWdpc3RyYXJlIFNSViBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjI0MDMKK21zZ2lkICJUWFQgcmVjb3JkIHN0cmluZyB0b28gbG9uZyIKK21zZ3N0ciAixZ9pcnVsIGRlIGNhcmFjdGVyZSBwZW50cnUgw65ucmVnaXN0cmFyZWEgVFhUIGVzdGUgcHJlYSBsdW5nIgorCisjOiBvcHRpb24uYzoyNDUxCittc2dpZCAiYmFkIFRYVCByZWNvcmQiCittc2dzdHIgIsOubnJlZ2lzdHJhcmUgVFhUIGludmFsaWTEgyIKKworIzogb3B0aW9uLmM6MjQ2NworbXNnaWQgImJhZCBTUlYgcmVjb3JkIgorbXNnc3RyICLDrm5yZWdpc3RyYXJlIFNSViBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjI0NzQKK21zZ2lkICJiYWQgU1JWIHRhcmdldCIKK21zZ3N0ciAixaNpbnTEgyBTUlYgaW52YWxpZMSDIgorCisjOiBvcHRpb24uYzoyNDg4Cittc2dpZCAiaW52YWxpZCBwcmlvcml0eSIKK21zZ3N0ciAicHJpb3JpdGF0ZSBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjI0OTUKK21zZ2lkICJpbnZhbGlkIHdlaWdodCIKK21zZ3N0ciAicG9uZGVyZSBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjI1MTQKK21zZ2lkICJ1bnN1cHBvcnRlZCBvcHRpb24gKGNoZWNrIHRoYXQgZG5zbWFzcSB3YXMgY29tcGlsZWQgd2l0aCBESENQL1RGVFAvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTU3CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGVzIG5lc3RlZCB0b28gZGVlcCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTY1IHRmdHAuYzo1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICJudSBwb3QgY2l0aSAlczogJXMiCisKKyM6IG9wdGlvbi5jOjI2MjYKK21zZ2lkICJtaXNzaW5nIFwiIgorbXNnc3RyICJsaXBzZcWfdGUgXCIiCisKKyM6IG9wdGlvbi5jOjI2NzMKK21zZ2lkICJiYWQgb3B0aW9uIgorbXNnc3RyICJvcMWjaXVuZSBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjI2NzUKK21zZ2lkICJleHRyYW5lb3VzIHBhcmFtZXRlciIKK21zZ3N0ciAicGFyYW1ldHJ1IG5lcmVjdW5vc2N1dCIKKworIzogb3B0aW9uLmM6MjY3NworbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIgorbXNnc3RyICJwYXJhbWV0cnUgbGlwc2EiCisKKyM6IG9wdGlvbi5jOjI2ODUKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZXJvYXJlIgorCisjOiBvcHRpb24uYzoyNjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGF0IGxpbmUgJWQgb2YgJSVzIgorbXNnc3RyICIlcyBsYSBsaW5pYSAlZCBkaW4gJSVzIgorCisjOiBvcHRpb24uYzoyNzQwIG9wdGlvbi5jOjI3NzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMiCittc2dzdHIgImNpdGVzYyAlcyIKKworIzogb3B0aW9uLmM6Mjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgImRuc21hc3EgdmVyc2l1bmVhICVzICAlc1xuIgorCisjOiBvcHRpb24uYzoyODQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb21waWxlIHRpbWUgb3B0aW9ucyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiT3DFo2l1bmkgY3UgY2FyZSBhIGZvc3QgY29tcGlsYXQgJXNcbiIKKyJcbiIKKworIzogb3B0aW9uLmM6Mjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiQWNlc3QgcHJvZ3JhbSB2aW5lIEbEglLEgiBOSUNJIE8gR0FSQU7FoklFLlxuIgorCisjOiBvcHRpb24uYzoyODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXRcbiIKK21zZ3N0ciAiRG5zbWFzcSBlc3RlIHVuIHByb2dyYW0gZ3JhdHVpdCwgc3VudGXFo2kgaW52aXRhxaNpIHPEgy1sIHJlZGlzdHJpYnVpxaNpXG4iCisKKyM6IG9wdGlvbi5jOjI4NDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBvciAzLlxuIgorbXNnc3RyICLDrm4gdGVybWVuaWkgTGljZW7Fo2VpIHB1YmxpY2UgZ2VuZXJhbGUgR05VLCB2ZXJzaXVuZWEgMi5cbiIKKworIzogb3B0aW9uLmM6Mjg1OAorbXNnaWQgInRyeSAtLWhlbHAiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg2MAorbXNnaWQgInRyeSAtdyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJvcMWjaXVuaSDDrm4gbGluaWUgZGUgY29tYW5kxIMgaW52YWxpZGU6ICVzLiIKKworIzogb3B0aW9uLmM6MjkwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGhvc3QtbmFtZTogJXMiCittc2dzdHIgIm51IHBvdCBjaXRpIG51bWVsZSBtYcWfaW5paTogJXMiCisKKyM6IG9wdGlvbi5jOjI5MzIKK21zZ2lkICJvbmx5IG9uZSByZXNvbHYuY29uZiBmaWxlIGFsbG93ZWQgaW4gbm8tcG9sbCBtb2RlLiIKK21zZ3N0ciAic2UgcGVybWl0ZSB1biBzaW5ndXIgZmnFn2llciByZXNvbHYuY29uZiDDrm4gbW9kdWwgbm8tcG9sbCIKKworIzogb3B0aW9uLmM6Mjk0MgorbXNnaWQgIm11c3QgaGF2ZSBleGFjdGx5IG9uZSByZXNvbHYuY29uZiB0byByZWFkIGRvbWFpbiBmcm9tLiIKK21zZ3N0ciAiYW0gbmV2b2llIGRlIHVuIHNpbmd1ciByZXNvbHYuY29uZiBkaW4gY2FyZSBzxIMgY2l0ZXNjIG51bWVsZSBkb21lbml1bHVpLiIKKworIzogb3B0aW9uLmM6Mjk0NSBuZXR3b3JrLmM6NzU0IGRoY3AuYzo3MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBvcHRpb24uYzoyOTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlYXJjaCBkaXJlY3RpdmUgZm91bmQgaW4gJXMiCittc2dzdHIgIm51IHMtYSBnxINzaXQgbmljaSB1biBjcml0ZXJpdSBkZSBjxIN1dGFyZSDDrm4gJXMiCisKKyM6IG9wdGlvbi5jOjI5ODMKK21zZ2lkICJ0aGVyZSBtdXN0IGJlIGEgZGVmYXVsdCBkb21haW4gd2hlbiAtLWRoY3AtZnFkbiBpcyBzZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk4NworbXNnaWQgInN5bnRheCBjaGVjayBPSyIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWVzZXJ2ZXIgJXMgcmVmdXNlZCB0byBkbyBhIHJlY3Vyc2l2ZSBxdWVyeSIKK21zZ3N0ciAic2VydmVydWwgRE5TICVzIHJlZnV6xIMgaW50ZXJvZ8SDcmlsZSByZWN1cnNpdmUiCisKKyM6IGZvcndhcmQuYzo0MzcKK21zZ2lkICJwb3NzaWJsZSBETlMtcmViaW5kIGF0dGFjayBkZXRlY3RlZCIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIGluIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgImludGVyZmHFo8SDIG5lY3Vub3NjdXTEgyAlcyIKKworIzogbmV0d29yay5jOjQxNyBkbnNtYXNxLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldDogJXMiCittc2dzdHIgImNyZWVhcmVhIHNvY2tldC11bHVpIGRlIGFzY3VsdGFyZSBhIGXFn3VhdDogJXMiCisKKyM6IG5ldHdvcmsuYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBJUFY2IG9wdGlvbnMgb24gbGlzdGVuaW5nIHNvY2tldDogJXMiCittc2dzdHIgImNvbmZpZ3VyYXJlYSBvcMWjaXVuaWxvciBJUHY2IGEgZcWfdWF0IHBlIHNvY2tldC11bCBkZSBhc2N1bHRhcmU6ICVzIgorCisjOiBuZXR3b3JrLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIGxpc3RlbmluZyBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiYWN0aXZhcmVhIHNvY2tldC11bHVpIGRlIGFzY3VsdGFyZSBwZW50cnUgJXMgYSBlxZ91YXQ6ICVzIgorCisjOiBuZXR3b3JrLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsaXN0ZW4gb24gc29ja2V0OiAlcyIKK21zZ3N0ciAiYXNjdWx0YXJlYSBwZSBzb2NrZXQgYSBlxZ91YXQ6ICVzIgorCisjOiBuZXR3b3JrLmM6NDY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIFRGVFAgc29ja2V0OiAlcyIKK21zZ3N0ciAiY3JlZWFyZWEgc29ja2V0LXVsdWkgZGUgYXNjdWx0YXJlIGEgZcWfdWF0OiAlcyIKKworIzogbmV0d29yay5jOjY2MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgc2VydmVyIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICJhY3RpdmFyZWEgc29ja2V0LXVsdWkgZGUgYXNjdWx0YXJlIHBlbnRydSAlcyBhIGXFn3VhdDogJXMiCisKKyM6IG5ldHdvcmsuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGxvY2FsIGludGVyZmFjZSIKK21zZ3N0ciAiaWdub3LEg20gc2VydmVydWwgRE5TICVzIC0gaW50ZXJmYcWjxIMgbG9jYWzEgyIKKworIzogbmV0d29yay5jOjcwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAiaWdub3LEg20gc2VydmVydWwgRE5TICVzIC0gbnUgcG90IGNyZWVhL2FjdGl2YSBzb2NrZXQtdWw6ICVzIgorCisjOiBuZXR3b3JrLmM6NzIwCittc2dpZCAidW5xdWFsaWZpZWQiCittc2dzdHIgImludmFsaWQiCisKKyM6IG5ldHdvcmsuYzo3MjAKK21zZ2lkICJuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzIyCittc2dpZCAiZGVmYXVsdCIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzI0Cittc2dpZCAiZG9tYWluIgorbXNnc3RyICJkb21lbml1IgorCisjOiBuZXR3b3JrLmM6NzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAiZm9sb3NpbSBhZHJlc2VsZSBsb2NhbGUgZG9hciBwZW50cnUgJVMgJXMiCisKKyM6IG5ldHdvcmsuYzo3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCBmb3IgJXMgJXMiCittc2dzdHIgImZvbG9zaW0gc2VydmVydWwgRE5TICVzIyVkIHBlbnRydSAlcyAlcyIKKworIzogbmV0d29yay5jOjczMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCh2aWEgJXMpIgorbXNnc3RyICJmb2xvc2ltIHNlcnZlcnVsIEROUyAlcyMlZCIKKworIzogbmV0d29yay5jOjczNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIgorbXNnc3RyICJmb2xvc2ltIHNlcnZlcnVsIEROUyAlcyMlZCIKKworIzogZG5zbWFzcS5jOjE0NgorIywgZnV6enkKK21zZ2lkICJURlRQIHNlcnZlciBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9URlRQIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBudSBlc3RlIGRpc3BvbmliaWw6IHB1bmXFo2kgSEFWRV9EQlVTIGluIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE1MQorbXNnaWQgImFzeWNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBTb2xhcmlzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgbGlzdCBvZiBpbnRlcmZhY2VzOiAlcyIKK21zZ3N0ciAiZW51bWVyYXJlYSBpbnRlcmZlxaNlbG9yIGEgZcWfdWF0OiAlcyIKKworIzogZG5zbWFzcS5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiaW50ZXJmYcWjxIMgbmVjdW5vc2N1dMSDICVzIgorCisjOiBkbnNtYXNxLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGludGVyZmFjZSB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIm51IGV4aXN0YSBpbnRlcmZhxaPEgyBwZW50cnUgYWRyZXNhICVzIgorCisjOiBkbnNtYXNxLmM6MjAxIGRuc21hc3EuYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiREJ1cyBlcnJvcjogJXMiCittc2dzdHIgImVyb2FyZSBEQnVzOiAlcyIKKworIzogZG5zbWFzcS5jOjIwNAorbXNnaWQgIkRCdXMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgbnUgZXN0ZSBkaXNwb25pYmlsOiBwdW5lxaNpIEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB1c2VyIG9yIGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byBmaWxlc3lzdGVtIHJvb3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgRE5TIGRpc2FibGVkIgorbXNnc3RyICJhbSBwb3JuaXQsIHZlcnNpdW5lYSAlcyBtZW1vcmllIHRlbXBvcmFyxIMgZGV6YWN0aXZhdMSDIgorCisjOiBkbnNtYXNxLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICJhbSBwb25pdCwgdmVyc2l1bmVhICVzIG1lbW9yaWUgdGVtcG9yYXLEgyAlZCIKKworIzogZG5zbWFzcS5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJhbSBwb3JuaXQsIHZlcnNpdW5lYSAlcyBtZW1vcmllIHRlbXBvcmFyxIMgZGV6YWN0aXZhdMSDIgorCisjOiBkbnNtYXNxLmM6NDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBpbGUgdGltZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAiY29tcGlsYXQgY3Ugb3DFo2l1bmlsZTogJXMiCisKKyM6IGRuc21hc3EuYzo0NjAKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogY29ubmVjdGVkIHRvIHN5c3RlbSBidXMiCittc2dzdHIgInN1cG9ydHVsIERCdXMgYWN0aXY6IHN1bnQgY29uZWN0YXQgbGEgbWFnaXN0cmFsYSBzaXN0ZW0iCisKKyM6IGRuc21hc3EuYzo0NjIKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogYnVzIGNvbm5lY3Rpb24gcGVuZGluZyIKK21zZ3N0ciAic3Vwb3J0dWwgREJ1cyBhY3RpdjogYcWfdGVwdCBjb25leGl1bmVhIGxhIG1hZ2lzdHJhbMSDIgorCisjIGZvciBjb21wYXRpYmlsaXR5IHB1cnBvc2VzIHRoZSBsZXR0ZXJzIMOiLCDEgywgxZ8sIMWjIGFuZCDDriBjYW4gYmUgd3JpdHRlbiBhcyB0aGVpciBsb29rLWFsaWtlIGNvcnJlc3BvbmRlbnQuCisjOiBkbnNtYXNxLmM6NDY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBmYWlsZWQgdG8gY2hhbmdlIG93bmVyIG9mICVzOiAlcyIKK21zZ3N0ciAiw65uY8SDcmNhcmVhIG51bWVsb3IgZGluICVzOiAlcyBhIGXFn3VhdCIKKworIzogZG5zbWFzcS5jOjQ3MQorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgInNwZWNpZmljIG9wxaNpdW5lYSAtLWJpbmQtaW50ZXJmYWNlcyBkaW4gY2F1emEgbGltaXTEg3JpbG9yIFNPIgorCisjOiBkbnNtYXNxLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGludGVyZmFjZSAlcyBkb2VzIG5vdCBjdXJyZW50bHkgZXhpc3QiCittc2dzdHIgImF0ZW7Fo2llOiBpbnRlcmZhxaNhICVzIG51IGV4aXN0xIMgbW9tZW50YW4iCisKKyM6IGRuc21hc3EuYzo0ODEKK21zZ2lkICJ3YXJuaW5nOiBpZ25vcmluZyByZXNvbHYtZmlsZSBmbGFnIGJlY2F1c2Ugbm8tcmVzb2x2IGlzIHNldCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDg0CisjLCBmdXp6eQorbXNnaWQgIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIKK21zZ3N0ciAiY29uZmlndXLEg20gc2VydmVyZWxlIHN1cGVyaW9hcmUgcHJpbiBEYnVzIgorCisjOiBkbnNtYXNxLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgc3RhdGljIGxlYXNlcyBvbmx5IG9uICUuMHMlcywgbGVhc2UgdGltZSAlcyIKK21zZ3N0ciAiREhDUCwgw65tcHJ1bXV0dXJpIHN0YXRpY2UgZG9hciBjxIN0cmUgICUuMHMlcywgdGltcHVsIHJlw65ub2lyaWkgJXMiCisKKyM6IGRuc21hc3EuYzo1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgcHJveHkgb24gc3VibmV0ICUuMHMlcyUuMHMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBJUCByYW5nZSAlcyAtLSAlcywgbGVhc2UgdGltZSAlcyIKK21zZ3N0ciAiREhDUCwgZG9tZW5pdSBJUCAlcyAtLSAlcywgdGltcHVsIHJlw65ub2lyaWkgJXMiCisKKyM6IGRuc21hc3EuYzo1MTkKK21zZ2lkICJyb290IGlzICIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTE5CisjLCBmdXp6eQorbXNnaWQgImVuYWJsZWQiCittc2dzdHIgImRlemFjdGl2YXQiCisKKyM6IGRuc21hc3EuYzo1MjEKK21zZ2lkICJzZWN1cmUgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3RyaWN0aW5nIG1heGltdW0gc2ltdWx0YW5lb3VzIFRGVFAgdHJhbnNmZXJzIHRvICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NjcKK21zZ2lkICJjb25uZWN0ZWQgdG8gc3lzdGVtIERCdXMiCittc2dzdHIgIm1hZ2lzdHJhbGEgc2lzdGVtIERidXMgY29uZWN0YXTEgyIKKworIzogZG5zbWFzcS5jOjc1NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgInNldHRpbmcgY2FwYWJpbGl0aWVzIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIyBmb3IgY29tcGF0aWJpbGl0eSBwdXJwb3NlcyB0aGUgbGV0dGVycyDDoiwgxIMsIMWfLCDFoyBhbmQgw64gY2FuIGJlIHdyaXR0ZW4gYXMgdGhlaXIgbG9vay1hbGlrZSBjb3JyZXNwb25kZW50LgorIzogZG5zbWFzcS5jOjc2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSB1c2VyLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAiw65uY8SDcmNhcmVhIG51bWVsb3IgZGluICVzOiAlcyBhIGXFn3VhdCIKKworIyBmb3IgY29tcGF0aWJpbGl0eSBwdXJwb3NlcyB0aGUgbGV0dGVycyDDoiwgxIMsIMWfLCDFoyBhbmQgw64gY2FuIGJlIHdyaXR0ZW4gYXMgdGhlaXIgbG9vay1hbGlrZSBjb3JyZXNwb25kZW50LgorIzogZG5zbWFzcS5jOjc3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgIsOubmPEg3JjYXJlYSBudW1lbG9yIGRpbiAlczogJXMgYSBlxZ91YXQiCisKKyM6IGRuc21hc3EuYzo3NzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBpZGZpbGUgJXM6ICVzIgorbXNnc3RyICJudSBwb3QgY2l0aSAlczogJXMiCisKKyM6IGRuc21hc3EuYzo3NzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGRlc2NoaWRlICVzOiVzIgorCisjOiBkbnNtYXNxLmM6ODMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNoaWxkIHByb2Nlc3Mga2lsbGVkIGJ5IHNpZ25hbCAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNoaWxkIHByb2Nlc3MgZXhpdGVkIHdpdGggc3RhdHVzICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4NDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjdXRlICVzOiAlcyIKK21zZ3N0ciAiYWNjZXNhcmVhIHNlcnZlcnVsdWkgJXMgYSBlxZ91YXQ6ICVzIgorCisjOiBkbnNtYXNxLmM6ODg1Cittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgImFtIHByaW1pdCBTSUdURVJNLCBhbSB0ZXJtaW5hdCIKKworIzogZG5zbWFzcS5jOjkwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyAlczogJXMiCittc2dzdHIgImFjY2VzYXJlYSBzZXJ2ZXJ1bHVpICVzIGEgZcWfdWF0OiAlcyIKKworIzogZG5zbWFzcS5jOjkyNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICJjaXRlc2MgJXMiCisKKyM6IGRuc21hc3EuYzo5MzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlcnZlcnMgZm91bmQgaW4gJXMsIHdpbGwgcmV0cnkiCittc2dzdHIgIm51IHMtYSBnxINzaXQgbmljaSB1biBjcml0ZXJpdSBkZSBjxIN1dGFyZSDDrm4gJXMiCisKKyM6IGRoY3AuYzo0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAibnUgcG90IGNyZWVhIHNvY2tldCBESENQOiAlcyIKKworIzogZGhjcC5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImNvbmZpZ3VyYXJlYSBvcMWjaXVuaWxvciBzb2NrZXR1bHVpIERIQ1AgYSBlxZ91YXQ6ICVzIgorCisjOiBkaGNwLmM6NjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImNvbmZpZ3VyYXJlYSBTT19SRVVTRUFERFIgcGUgc29ja2V0LXVsIERIQ1AgYSBlxZ91YXQ6ICVzIgorCisjOiBkaGNwLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUCBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiYWN0aXZhcmVhIHNvY2tldC11bHVpIHNlcnZlci11bHVpIERIQ1AgYSBlxZ91YXQ6ICVzIgorCisjOiBkaGNwLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QIHJhdyBzb2NrZXQ6ICVzLiIKK21zZ3N0ciAibnUgcG90IGNyZWVhIHNvY2tldCBJQ01QIHJhdzogJXMuIgorCisjOiBkaGNwLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcGFja2V0IHJlY2VpdmVkIG9uICVzIHdoaWNoIGhhcyBubyBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzozODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByYW5nZSAlcyAtLSAlcyBpcyBub3QgY29uc2lzdGVudCB3aXRoIG5ldG1hc2sgJXMiCittc2dzdHIgImRvbWVuaXUgREhDUCAlcyAtLSAlcyBudSBlc3RlIGNvbnNpc3RlbnQgY3UgbWFzY2EgZGUgcmXFo2VhICVzIgorCisjOiBkaGNwLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBsaW5lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImxpbmllIGludmFsaWTEgyDDrm4gJXMgcsOibmR1bCAlZCIKKworIzogZGhjcC5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlLiIKK21zZ3N0ciAiYWRyZXPEgyBJUCBkdXBsaWNhdCAlcyDDrm4gZGVjbGFyYcWjaWEgZGhjcC1jb25maWcuIgorCisjOiBkaGNwLmM6OTAwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyBpbiAlcy4iCittc2dzdHIgImFkcmVzxIMgSVAgZHVwbGljYXQgJXMgw65uIGRlY2xhcmHFo2lhIGRoY3AtY29uZmlnLiIKKworIzogZGhjcC5jOjk0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbW9yZSB0aGFuIG9uZSBhZGRyZXNzIGluIGhvc3RzZmlsZSwgdXNpbmcgJXMgZm9yIERIQ1AiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjk0OAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyAoJXMpIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZSIKK21zZ3N0ciAiYWRyZXPEgyBJUCBkdXBsaWNhdCAlcyAoJXMpIMOubiBkZWNsYXJhxaNpYSBkaGNwLWNvbmZpZy4iCisKKyM6IGxlYXNlLmM6NjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIG9yIGNyZWF0ZSBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGNyZWVhIHNhdSBkZXNjaGlkZSBmacWfaWVydWwgY3Ugw65tcHJ1bXV0dXJpOiAlcyIKKworIzogbGVhc2UuYzo5MgorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgInByZWEgbXVsdGUgw65tcHJ1bXV0dXJpIHN0b2NhdGUiCisKKyM6IGxlYXNlLmM6MTI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcnVuIGxlYXNlLWluaXQgc2NyaXB0ICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBsZWFzZS5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJsZWFzZS1pbml0IHNjcmlwdCByZXR1cm5lZCBleGl0IGNvZGUgJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoyMzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSAlczogJXMgKHJldHJ5IGluICV1cykiCittc2dzdHIgIm51IHBvdCBjaXRpICVzOiAlcyIKKworIzogcmZjMjEzMS5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUCByZXF1ZXN0ICVzICVzIgorbXNnc3RyICJuaWNpIHVuIGRvbWVuaXUgZGUgYWRyZXNlIGRpc3BvbmliaWwgcGVudHJ1IGNlcmVyZWEgREhDUCAlcyAlcyIKKworIzogcmZjMjEzMS5jOjMzNworbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICJjdSBzZWxlY3RvcnVsIGRlIHN1YnJlxaNlYSIKKworIzogcmZjMjEzMS5jOjMzNworbXNnaWQgInZpYSIKK21zZ3N0ciAicHJpbiIKKworIzogcmZjMjEzMS5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBBdmFpbGFibGUgREhDUCBzdWJuZXQ6ICVzLyVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgQXZhaWxhYmxlIERIQ1AgcmFuZ2U6ICVzIC0tICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozODQKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAiZGV6YWN0aXZhdCIKKworIzogcmZjMjEzMS5jOjQxOCByZmMyMTMxLmM6ODgzIHJmYzIxMzEuYzoxMjQyCittc2dpZCAiaWdub3JlZCIKK21zZ3N0ciAiaWdub3JhdCIKKworIzogcmZjMjEzMS5jOjQzMyByZmMyMTMxLmM6MTEwMAorbXNnaWQgImFkZHJlc3MgaW4gdXNlIgorbXNnc3RyICJhZHJlc2EgZXN0ZSBmb2xvc2l0xIMiCisKKyM6IHJmYzIxMzEuYzo0NDcgcmZjMjEzMS5jOjkzNworbXNnaWQgIm5vIGFkZHJlc3MgYXZhaWxhYmxlIgorbXNnc3RyICJuaWNpIG8gYWRyZXPEgyBkaXNwb25pYmlsxIMiCisKKyM6IHJmYzIxMzEuYzo0NTQgcmZjMjEzMS5jOjEwNjMKK21zZ2lkICJ3cm9uZyBuZXR3b3JrIgorbXNnc3RyICJyZcWjZWEgZ3JlxZ9pdMSDIgorCisjOiByZmMyMTMxLmM6NDY3Cittc2dpZCAibm8gYWRkcmVzcyBjb25maWd1cmVkIgorbXNnc3RyICJhZHJlc8SDIGxpcHPEgyIKKworIzogcmZjMjEzMS5jOjQ3MyByZmMyMTMxLmM6MTExMworbXNnaWQgIm5vIGxlYXNlcyBsZWZ0IgorbXNnc3RyICJudSBtYWkgYW0gZGUgdW5kZSBzxIMgw65tcHJ1bXV0IgorCisjOiByZmMyMTMxLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBwcm92aWRlcyBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IFZlbmRvciBjbGFzczogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBVc2VyIGNsYXNzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NzM3Cittc2dpZCAiUFhFIEJJUyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo4NTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIKK21zZ3N0ciAiZGV6YWN0aXbEg20gYWRyZXNlbGUgREhDUCBzdGF0aWNlICVzIgorCisjOiByZmMyMTMxLmM6ODc0Cittc2dpZCAidW5rbm93biBsZWFzZSIKK21zZ3N0ciAiw65tcHJ1bXV0IG5lY3Vub3NjdXQiCisKKyM6IHJmYzIxMzEuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGxlYXNlZCB0byAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6OTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBpbiB1c2UgYnkgdGhlIHNlcnZlciBvciByZWxheSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCB3YXMgcHJldmlvdXNseSBkZWNsaW5lZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6OTM1IHJmYzIxMzEuYzoxMTA2Cittc2dpZCAibm8gdW5pcXVlLWlkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDAzCittc2dpZCAid3Jvbmcgc2VydmVyLUlEIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDIyCittc2dpZCAid3JvbmcgYWRkcmVzcyIKK21zZ3N0ciAiYWRyZXPEgyBncmXFn2l0xIMiCisKKyM6IHJmYzIxMzEuYzoxMDM5Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICLDrm1wcnVtdXR1bCBudSBhIGZvc3QgZ8SDc2l0IgorCisjOiByZmMyMTMxLmM6MTA3MQorbXNnaWQgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiYWRyZXPEgyBpbmRpc3BvbmliaWzEgyIKKworIzogcmZjMjEzMS5jOjEwODIKK21zZ2lkICJzdGF0aWMgbGVhc2UgYXZhaWxhYmxlIgorbXNnc3RyICLDrm1wcnVtdXQgc3RhdGljIGVzdGUgZGlzcG9uaWJpbCIKKworIzogcmZjMjEzMS5jOjEwODYKK21zZ2lkICJhZGRyZXNzIHJlc2VydmVkIgorbXNnc3RyICJhZHJlc8SDIHJlemVydmF0xIMiCisKKyM6IHJmYzIxMzEuYzoxMDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdGFnczogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE2MDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHNlcnZlciBuYW1lOiAlcyIKK21zZ3N0ciAiZXJvYXJlIERCdXM6ICVzIgorCisjOiByZmMyMTMxLmM6MTYxMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgbmV4dCBzZXJ2ZXI6ICVzIgorbXNnc3RyICJlcm9hcmUgREJ1czogJXMiCisKKyM6IHJmYzIxMzEuYzoxNjgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBESENQL0JPT1RQIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiBwYWNrZXQiCittc2dzdHIgIm51IHBvdCB0cmltaXRlIG9wxaNpdW5lYSBESENQICVkOiBudSBtYWkgZXN0ZSBsb2Mgw65uIHBhY2hldCIKKworIzogcmZjMjEzMS5jOjE5MTkKK21zZ2lkICJQWEUgbWVudSB0b28gbGFyZ2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjIwMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZG9tYWluICVzIGZvciBESENQIGhvc3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MjA1MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVxdWVzdGVkIG9wdGlvbnM6ICVzIgorbXNnc3RyICJjb21waWxhdCBjdSBvcMWjaXVuaWxlOiAlcyIKKworIzogbmV0bGluay5jOjY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIKK21zZ3N0ciAibnUgcG90IHPEgyBhY3RpdmV6IHNvY2tldC11bCBuZXRsaW5rOiAlcyIKKworIzogbmV0bGluay5jOjI2NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibmV0bGluayByZXR1cm5zIGVycm9yOiAlcyIKK21zZ3N0ciAiZXJvYXJlIERCdXM6ICVzIgorCisjOiBkYnVzLmM6MTUwCittc2dpZCAiYXR0ZW1wdCB0byBzZXQgYW4gSVB2NiBzZXJ2ZXIgYWRkcmVzcyB2aWEgREJ1cyAtIG5vIElQdjYgc3VwcG9ydCIKK21zZ3N0ciAiaW5jZXJjIHPEgyBjb25maWd1cmV6IHVuIHNlcnZlciBJUHY2IHByaW4gRGJ1cyAtIG51IGVzdGUgc3Vwb3J0IElQdjYiCisKKyM6IGRidXMuYzoyODYKK21zZ2lkICJzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMgZnJvbSBEQnVzIgorbXNnc3RyICJjb25maWd1csSDbSBzZXJ2ZXJlbGUgc3VwZXJpb2FyZSBwcmluIERidXMiCisKKyM6IGRidXMuYzozMjQKK21zZ2lkICJjb3VsZCBub3QgcmVnaXN0ZXIgYSBEQnVzIG1lc3NhZ2UgaGFuZGxlciIKK21zZ3N0ciAibnUgcG90IGFjdGl2YSBvIGludGVyZmHFo8SDIGRlIG1lc2FqZSBEQnVzIgorCisjOiBicGYuYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIEJQRiBzb2NrZXQ6ICVzIgorbXNnc3RyICJudSBwb3QgY3JlZWEgc29ja2V0IERIQ1AgQlBGOiAlcyIKKworIzogYnBmLmM6MTc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIKK21zZ3N0ciAiY2VyZXJlIERIQ1AgcGVudHJ1IGRpc3Bveml0aXYgbmVzdXBvcnRhdCAoJWQpIHJlY2VwxaNpb25hdMSDIHByaW4gJXMiCisKKyM6IHRmdHAuYzoxNzkKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGZyZWUgcG9ydCBmb3IgVEZUUCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgc2VudCAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MzA1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiw65tcHJ1bXV0dWwgbnUgYSBmb3N0IGfEg3NpdCIKKworIzogdGZ0cC5jOjQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGVycm9yICVkICVzIHJlY2VpdmVkIGZyb20gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjQ0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBsb2cuYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcmZsb3c6ICVkIGxvZyBlbnRyaWVzIGxvc3QiCittc2dzdHIgIiIKKworIzogbG9nLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjQxNQorbXNnaWQgIkZBSUxFRCB0byBzdGFydCB1cCIKK21zZ3N0ciAicG9ybmlyZWEgQSBFxZ5VQVQiCisKKyN+IG1zZ2lkICJtdXN0IHNldCBleGFjdGx5IG9uZSBpbnRlcmZhY2Ugb24gYnJva2VuIHN5c3RlbXMgd2l0aG91dCBJUF9SRUNWSUYiCisjfiBtc2dzdHIgInRyZWJ1aWUgc3BlY2lmaWNhdMSDIGV4YWN0IG8gc2luZ3VyxIMgaW50ZXJmYcWjxIMgcGUgc2lzdGVtZWxlIGRlZmVjdGVjZSBudSBhdSBJUF9SRUNWSUYiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiZmFpbGVkIHRvIGxvYWQgJXM6ICVzIgorI34gbXNnc3RyICJudSBwb3Qgw65uY8SDcmNhICVzOiAlcyIKKworI34gbXNnaWQgImJhZCBuYW1lIGluICVzIgorI34gbXNnc3RyICJudW1lIGludmFsaWQgw65uICVzIgorCisjfiBtc2dpZCAiSWdub3JpbmcgREhDUCBsZWFzZSBmb3IgJXMgYmVjYXVzZSBpdCBoYXMgYW4gaWxsZWdhbCBkb21haW4gcGFydCIKKyN+IG1zZ3N0ciAiw45tcHJ1bXV0dWwgREhDUCBwZW50cnUgJXMgdmEgZmkgaWdub3JhdCBkZW9hcmVjZSBhcmUgZG9tZW5pdSBpbnZhbGlkIgorCisjfiBtc2dpZCAiSVNDIGRoY3BkIGludGVncmF0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0lTQ19SRUFERVIgaW4gc3JjL2NvbmZpZy5oIgorI34gbXNnc3RyICJJbnRlZ3JhcmVhIGN1IElTQyBkaGNwZCBudSBlc3RlIGRpc3BvbmliaWzEgzpwdW5lxaNpIEhBVkVfSVNDX0hFQURFUiDDrm4gc3JjL2NvbmZpZy5oIgorCisjLCBmdXp6eQorI34gbXNnaWQgImlsbGVnYWwgZG9tYWluICVzIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZS4iCisjfiBtc2dzdHIgImFkcmVzxIMgSVAgZHVwbGljYXQgJXMgw65uIGRlY2xhcmHFo2lhIGRoY3AtY29uZmlnLiIKKworI34gbXNnaWQgInJ1bm5pbmcgYXMgcm9vdCIKKyN+IG1zZ3N0ciAicnVsZXogY2Egcm9vdCIKKworIywgZnV6enkKKyN+IG1zZ2lkICJyZWFkICVzIC0gJWQgaG9zdHMiCisjfiBtc2dzdHIgImNpdGVzYyAlcyAtICVkIGFkcmVzZSIKKworI34gbXNnaWQgImJhZCBkaGNwLWhvc3QiCisjfiBtc2dzdHIgImRoY3AtaG9zdCBpbnZhbGlkIgorCisjfiBtc2dpZCAiZG9tYWlucyIKKyN+IG1zZ3N0ciAiZG9tZW5paSIKKworI34gbXNnaWQgIklnbm9yaW5nIERIQ1AgaG9zdCBuYW1lICVzIGJlY2F1c2UgaXQgaGFzIGFuIGlsbGVnYWwgZG9tYWluIHBhcnQiCisjfiBtc2dzdHIgIklnbm9yIG51bWVsZSBESENQIGFsIG1hxZ9pbmlpICVzIGRlb2FyZWNlIGFyZSBkb21lbml1IEROUyBpbGVnYWwiCisKKyN+IG1zZ2lkICJEaXNwbGF5IHRoaXMgbWVzc2FnZS4iCisjfiBtc2dzdHIgIkFmacWfZWF6xIMgYWNlc3QgbWVzYWouIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6JW0iCisjfiBtc2dzdHIgImNpdGlyZWEgJXM6JW4gYSBlxZ91YXQiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiY2Fubm90IHNlbmQgZW5jYXBzdWxhdGVkIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiB3cmFwcGVyIgorI34gbXNnc3RyICJudSBwb3QgdHJpbWl0ZSBvcMWjaXVuZWEgREhDUCAlZDogbnUgbWFpIGVzdGUgbG9jIMOubiBwYWNoZXQiCisKKyN+IG1zZ2lkICJNb3JlIHRoYW4gb25lIHZlbmRvciBjbGFzcyBtYXRjaGVzLCB1c2luZyAlcyIKKyN+IG1zZ3N0ciAiU2UgcG90cml2ZXNjIG1haSBtdWx0ZSBjbGFzZSBkZSBtxINyY2kgZGUgaW50ZXJmZcWjZSwgZm9sb3NpbSAlcyIKKworI34gbXNnaWQgImZvcndhcmRpbmcgdGFibGUgb3ZlcmZsb3c6IGNoZWNrIGZvciBzZXJ2ZXIgbG9vcHMuIgorI34gbXNnc3RyICJkZXDEg8WfaXJlIGRlIG1lbW9yaWUgw65uIHRhYmVsYSBjdSDDrm5haW50xINyaSBETlM6IHZlcmlmaWNhxaNpIGRlIGJ1Y2xlLiIKKworI34gbXNnaWQgIm5lc3RlZCBpbmNsdWRlcyBub3QgYWxsb3dlZCIKKyN+IG1zZ3N0ciAiaW5jbHV6aXVuaWxlIGxvY2FsZSBudSBzdW50IHBlcm1pc2UiCisKKyN+IG1zZ2lkICJESENQLCAlcyB3aWxsIGJlIHdyaXR0ZW4gZXZlcnkgJXMiCisjfiBtc2dzdHIgIkRIQ1AsICVzIHZhIGZpIHJlc2NyaXMgb2RhdMSDIGxhIGZpZWNhcmUgJXMiCisKKyN+IG1zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1AgcGFja2V0IHNvY2tldDogJXMuIElzIENPTkZJR19QQUNLRVQgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbD8iCisjfiBtc2dzdHIgIm51IHBvdCBjcmVlYSBzb2NrZXQgREhDUCBwYWNrZXQ6ICVzLiBBdmXFo2kgYWN0aXZhdMSDIMOubiBudWNsZXVsc2lzdGVtdWx1aSBvcMWjaXVuZWEgQ09ORklHX1BBQ0tFVCA/IgpkaWZmIC0tZ2l0IGEvc2V0dXAuaHRtbCBiL3NldHVwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTE4M2YzYgotLS0gL2Rldi9udWxsCisrKyBiL3NldHVwLmh0bWwKQEAgLTAsMCArMSwyMzEgQEAKKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+IENvbmZpZ3VyaW5nIERuc21hc3EuPC9USVRMRT4KKzwvSEVBRD4KKzxCT0RZIEJHQ09MT1I9IldISVRFIj4gCis8SDEgQUxJR049Y2VudGVyPkRuc21hc3Egc2V0dXA8L0gxPiAKKzxIMj5JbnN0YWxsYXRpb24uPC9IMj4KK1RvIGNvbXBpbGUgYW5kIGluc3RhbGwgZG5zbWFzcSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIChhcyByb290KSBpcyBlbm91Z2guCisKKzxQUkU+CittYWtlIGluc3RhbGwKKzwvUFJFPgorCitZb3UgbWlnaHQgd2FudCB0byBlZGl0IGNvbmZpZy5oLiBEbnNtYXNxIGhhcworYmVlbiBydW4gb24gKGF0IGxlYXN0KSBMaW51eCwgdUNMaW51eCwgQUlYIDQuMS41LCBGcmVlQlNEIDQuNCBPcGVuQlNEIGFuZCBUcnU2NCA0LnggCisKK0Ruc21hc3EgaXMgbm9ybWFsbHkgIHJ1biBvbiBhIGZpcmV3YWxsIG1hY2hpbmUgKHRoZSBtYWNoaW5lIHdpdGggdGhlCittb2RlbSBvciBvdGhlciBjb25uZWN0aW9uIHRvIHlvdXIgSVNQLikgYnV0IGl0IGNhbiBydW4gb24gYW55IG1hY2hpbmUKK3dpdGggYWNjZXNzIHRvIHRoZSBJU1BzIG5hbWVzZXJ2ZXJzLgorCitQdXQgdGhlIGJpbmFyeSBpbiA8VFQ+L3Vzci9sb2NhbC9zYmluL2Ruc21hc3E8L1RUPiAocnVubmluZyA8VFQ+bWFrZSBpbnN0YWxsPC9UVD4gIHdpbGwgZG8gdGhpcykgYW5kIGFycmFuZ2UgZm9yIGl0Cit0byBiZSBzdGFydGVkIGF0IGJvb3QgdGltZS4KKworTm90ZSB0aGF0IGRuc21hc3EgbmVlZHMgdG8gcnVuIGFzIHJvb3QsIHNpbmNlIGl0IGJpbmRzIHByaXZpbGVnZWQgcG9ydHMuIEl0IHdpbGwgZHJvcCByb290IHByaXZpbGVnZXMgYWZ0ZXIgc3RhcnQtdXAuIERuc21hc3EKK2xvZ3MgcHJvYmxlbXMgdXNpbmcgdGhlIHN5c2xvZyBmYWNpbGl0eSBhcyBhIGRhZW1vbi4gSXQgbG9ncyBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIHRvIGxvY2FsMAorPFA+Cis8SDI+Q29uZmlndXJhdGlvbi48L0gyPgorQ29uZmlndXJhdGlvbiBmb3IgZG5zbWFzcSBpcyBwcmV0dHkgc2ltcGxlIGluIGFsbW9zdCBhbGwgY2FzZXMuIFRoZQorcHJvZ3JhbSBoYXMgY29sbGVjdGVkIGEgZmFpciBmZXcgb3B0aW9ucyBhcyBpdCBoYXMgZGV2ZWxvcGVkIGJ1dCBtb3N0IG9mIHRoZW0KK2FyZSBub3QgbmVlZGVkIG1vc3Qgb2YgdGhlIHRpbWUuIEEgbWFjaGluZSB3aGljaCBhbHJlYWR5IGhhcyBhIEROUworY29uZmlndXJhdGlvbiAoaWUgb25lIG9yIG1vcmUgZXh0ZXJuYWwgbmFtZXNlcnZlcnMgaW4gPFRUPi9ldGMvcmVzb2x2LmNvbmY8L1RUPgorYW5kIGFueSBsb2NhbCBob3N0cyBpbiA8VFQ+L2V0Yy9ob3N0czwvVFQ+KSBjYW4gYmUgdHVybmVkIGludG8gYSBuYW1lc2VydmVyCitzaW1wbHkgYnkgcnVubmluZyBkbnNtYXNxLCB3aXRoIG5vIG9wdGlvbnMgb3IgY29uZmlndXJhdGlvbiBhdAorYWxsLiBTZXQgdGhlIElQIGFkZHJlc3Mgb2YgdGhlIG1hY2hpbmUgcnVubmluZyBkbnNtYXNxIGFzIHRoZSBETlMKK3NlcnZlciBpbiBhbGwgdGhlIG90aGVyIG1hY2hpbmVzIG9uIHlvdXIgbmV0d29yaywgYW5kIHlvdSdyZSBkb25lLgorPFA+CitXaXRoIGEgZmV3IG9wdGlvbiBmbGFncywgaXQgaXMgcG9zc2libGUgdG8gbWFrZSBkbnNtYXNxIGRvIG1vcmUgY2xldmVyCit0cmlja3MuIE9wdGlvbnMgZm9yIGRuc21hc3EgY2FuIGJlIHNldCBlaXRoZXIgb24gdGhlIGNvbW1hbmQgbGluZQord2hlbiBzdGFydGluZyBkbnNtYXNxLCBvciBpbiBpdHMgY29uZmlndXJhdGlvbiBmaWxlLCA8VFQ+L2V0Yy9kbnNtYXNxLmNvbmY8L1RUPi4KKworPGgyPk1ha2luZyB0aGUgbmFtZXNlcnZlciBtYWNoaW5lIHVzZSBkbnNtYXNxLjwvaDI+CitJbiB0aGUgc2ltcGxlIGNvbmZpZ3VyYXRpb24gZGVzY3JpYmVkIGFib3ZlLCBwcm9jZXNzZXMgbG9jYWwgdG8gdGhlCittYWNoaW5lIHdpbGwgbm90IHVzZSBkbnNtYXNxLCBzaW5jZSB0aGV5IGdldCB0aGVpciBpbmZvcm1hdGlvbiBhYm91dAord2hpY2ggbmFtZXNlcnZlcnMgdG8gdXNlIGZyb20gL2V0Yy9yZXNvbHYuY29uZiwgd2hpY2ggaXMgc2V0IHRvIHRoZQordXBzdHJlYW0gbmFtZXNlcnZlcnMuIFRvIGZpeCB0aGlzLCBzaW1wbHkgcmVwbGFjZSB0aGUgbmFtZXNlcnZlciBpbgorPFRUPi9ldGMvcmVzb2x2LmNvbmY8L1RUPiB3aXRoIHRoZSBsb2NhbCBhZGRyZXNzIDEyNy4wLjAuMSBhbmQgZ2l2ZSB0aGUKK2FkZHJlc3MoZXMpIG9mIHRoZSB1cHN0cmVhbSBuYW1lc2VydmVyKHMpIHRvIGRuc21hc3EgZGlyZWN0bHkuIFlvdSBjYW4KK2RvIHRoaXMgdXNpbmcgZWl0aGVyIHRoZSA8VFQ+c2VydmVyPC9UVD4gb3B0aW9uLCBvciBieSBwdXR0aW5nIHRoZW0gaW50bworYW5vdGhlciBmaWxlLCBhbmQgdGVsbGluZyAgZG5zbWFzcSBhYm91dCBpdHMgbG9jYXRpb24gd2l0aCAKK3RoZSA8VFQ+cmVzb2x2LWZpbGU8L1RUPiBvcHRpb24uIAorCis8aDI+QXV0b21hdGljIG5hbWVzZXJ2ZXIgY29uZmlndXJhdGlvbi48L2gyPgorVGhlIHR3byBwcm90b2NvbHMgbW9zdCB1c2VkIGZvciBhdXRvbWF0aWMgSVAgbmV0d29yayBjb25maWd1cmF0aW9uCisoUFBQIGFuZCBESENQKSBjYW4gZGV0ZXJtaW5lIHRoZSBJUCBhZGRyZXNzZXMgZm9yIG5hbWVzZXJ2ZXJzIGF1dG9tYXRpY2FsbHkuCitUaGUgZGFlbW9ucyBjYW4gYmUgbWFkZSB0byB3cml0ZSBvdXQgYSBmaWxlIGluIHRoZSByZXNvbHYuY29uZiBmb3JtYXQgd2l0aCB0aGUKK25hbWVzZXJ2ZXJzIGluIHdoaWNoIGlzIHBlcmZlY3QgZm9yIGRuc21hc3EgdG8gdXNlLiBXaGVuIHRoZQorbmFtZXNlcnZlcnMgY2hhbmdlLCBmb3IgaW5zdGFuY2Ugb24gZGlhbGxpbmcgaW50byBhIG5ldyBJU1AgdXNpbmcgUFBQLAorZG5zbWFzcSB3aWxsIGF1dG9tYXRpY2FsbHkgcmUtcmVhZCB0aGlzIGZpbGUgYW5kIGJlZ2luIHVzaW5nIHRoZSBuZXcKK25hbWVzZXJ2ZXIocykgY29tcGxldGVseSB0cmFuc3BhcmVudGx5LgorCis8aDM+QXV0b21hdGljIEROUyBzZXJ2ZXIgY29uZmlndXJhdGlvbiB3aXRoIFBQUC48L2gzPgorTGF0ZXIgdmVyc2lvbnMgb2YgcHBwZCBoYXZlIGFuIG9wdGlvbiAidXNlcGVlcmRucyIgd2hpY2ggaW5zdHJ1Y3RzIGl0IHRvIHdyaXRlIGEgZmlsZSBjb250YWluaW5nCit0aGUgYWRkcmVzcyhlcykgb2YgdGhlIEROUyBzZXZlcnMgaW4gPFRUPi9ldGMvcHBwL3Jlc29sdi5jb25mPC9UVD4uIENvbmZpZ3VyZSBkbnNtYXNxCithcyBhYm92ZSB3aXRoICJuYW1lc2VydmVyIDEyNy4wLjAuMSIgaW4gPFRUPi9ldGMvcmVzb2x2LmNvbmY8L1RUPiBhbmQgcnVuIGRuc21hc3EgCit3aXRoIHRvIG9wdGlvbiA8VFQ+cmVzb2x2LWZpbGU9L2V0Yy9wcHAvcmVzb2x2LmNvbmY8L1RUPi4KKzxQPgorT24gUmVkaGF0IChhdCBsZWFzdCB2ZXJzaW9ucyA3LjEsIDcuMiBhbmQgNy4zKSB5b3UgY2FuIHNldCBwcHBkCitvcHRpb25zIGJ5IGFkZGluZyAiUFBQT1BUSU9OUz11c2VwZWVyZG5zIiB0bworPFRUPi9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cy9pZmNmZy1pcHBwMDwvVFQ+LiAgSW4gdGhlIHNhbWUgZmlsZSwgbWFrZSBzdXJlCit0aGF0ICJQRUVSRE5TPW5vIiB0byBzdG9wIFJlZEhhdCdzIG5ldHdvcmsgaW5pdHNjcmlwdHMgZnJvbSBjb3B5aW5nCis8VFQ+L2V0Yy9wcHAvcmVzb2x2LmNvbmY8L1RUPiBpbnRvIDxUVD4vZXRjL3Jlc29sdi5jb25mPC9UVD4uPEJSPgorCitPbiBTdVNFIChhdCBsZWFzdCB2ZXJzaW9uIDguMSwgYW5kIDguMikgeW91IHNob3VsZCB1c2UgWWFTVCB0byBhY3RpdmF0ZQorPFRUPlt4XSBNb2RpZnkgRE5TIHdoZW4gY29ubmVjdGVkPC9UVD4gdGhlbiBzdG9wIFN1U0VzIG5ldHdvcmsgaW5pdHNjcmlwdHMgCitmcm9tIGNvcHlpbmcgPFRUPi9ldGMvcHBwL3Jlc29sdi5jb25mPC9UVD4gaW50byA8VFQ+L2V0Yy9yZXNvbHYuY29uZjwvVFQ+IAorYnkgbW9kaWZ5aW5nIE1PRElGWV9SRVNPTFZfQ09ORl9EWU5BTUlDQUxMWT0ibm8iIGluIDxUVD4vZXRjL3N5c2NvbmZpZy9uZXR3b3JrL2NvbmZpZzwvVFQ+LgorIAorCis8aDM+QXV0b21hdGljIEROUyBzZXJ2ZXIgY29uZmlndXJhdGlvbiB3aXRoIERIQ1AuPC9oMz4KK1lvdSBuZWVkIHRvIGdldCB5b3VyIERIQ1AgY2xpZW50IHRvIHdyaXRlIHRoZSBhZGRyZXNzZShzKSBvZiB0aGUgRE5TCitzZXJ2ZXJzIHRvIGEgZmlsZSBvdGhlciB0aGFuIDxUVD4vZXRjL3Jlc29sdi5jb25mPC9UVD4uIEZvciBkaGNwY2QsIHRoZQorPFRUPmRoY3BjZC5leGU8L1RUPiBzY3JpcHQgZ2V0cyBydW4gd2l0aCB0aGUgYWRkcmVzc2VzIG9mIHRoZSBuYW1lc2VydmVyKHMpIGluCit0aGUgc2hlbGwgdmFyaWFibGUgPFRUPiRETlM8L1RUPi4gVGhlIGZvbGxvd2luZyBiaXQgb2Ygc2hlbGwgc2NyaXB0Cit1c2VzIHRoYXQgdG8gd3JpdGUgYSBmaWxlIHN1aXRhYmxlIGZvciBkbnNtYXNxLiAKKzxQUkU+CisKK2VjaG8gLW4gPnwvZXRjL2RoY3BjL3Jlc29sdi5jb25mCitkbnNzZXJ2cz0ke0ROUy8vLC8gfQorZm9yIHNlcnYgaW4gJGRuc3NlcnZzOyBkbworICAgIGVjaG8gIm5hbWVzZXJ2ZXIgJHNlcnYiID4+L2V0Yy9kaGNwYy9yZXNvbHYuY29uZgorZG9uZQorCis8L1BSRT4KKyAKK1JlbWVtYmVyIHRvIGdpdmUgZGhjcGNkIHRoZSA8VFQ+LVI8L1RUPiBmbGFnIHRvIHN0b3AgaXQgb3ZlcndyaXRpbmcgCis8VFQ+L2V0Yy9yZXNvbHYuY29uZjwvVFQ+LgorCis8UD4KK0ZvciBvdGhlciBESENQIGNsaWVudHMgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0LgorCis8aDM+IERIQ1AgYW5kIFBQUC48L2gzPgorT24gYSBsYXB0b3Agd2hpY2ggbWF5IHBvdGVudGlhbGx5IGNvbm5lY3QgdmlhIGEgbW9kZW0gYW5kIFBQUCBvcgorZXRoZXJuZXQgYW5kIERIQ1AgaXQgaXMgcG9zc2libGUgdG8gY29tYmluZSBib3RoIG9mIHRoZSBhYm92ZQorY29uZmlndXJhdGlvbnMuIFJ1bm5pbmcgZG5zbWFzcSB3aXRoIHRoZSBmbGFncworPFRUPnJlc29sdi1maWxlPS9ldGMvcHBwL3Jlc29sdi5jb25mIHJlc29sdi1maWxlPS9ldGMvZGhjcGMvcmVzb2x2LmNvbmY8L1RUPiAgCittYWtlcyBpdCBwb2xsIDxCPmJvdGg8L0I+IGZpbGVzIGFuZCB1c2Ugd2hpY2hldmVyIHdhcyB1cGRhdGVkCitsYXN0LiBUaGUgcmVzdWx0IGlzIGF1dG9tYXRpYyBzd2l0Y2hpbmcgYmV0d2VlbiBETlMgc2VydmVycy4KKzwvSDM+CisKKzxIMj4gSW50ZWdyYXRpb24gd2l0aCBESENQLjwvSDI+CitEbnNtYXNxIHJlYWRzIDxUVD4vZXRjL2hvc3RzPC9UVD4gc28gdGhhdCB0aGUgbmFtZXMgb2YgbG9jYWwgbWFjaGluZXMgYXJlCithdmFpbGFibGUgaW4gRE5TLiBUaGlzIGlzIGZpbmUgd2hlbiB5b3UgZ2l2ZSBhbGwgeW91ciBsb2NhbCBtYWNoaW5lcworc3RhdGljIElQIGFkZHJlc3NlcyB3aGljaCBjYW4gZ28gaW4gPFRUPi9ldGMvaG9zdHM8L1RUPiwgYnV0IGl0IGRvZXNuJ3Qgd29yayAKK3doZW4gbG9jYWwgbWFjaGluZXMgYXJlIGNvbmZpZ3VyZWQgdmlhIERIQ1AsIHNpbmNlIHRoZSBJUCBhZGRyZXNzCithbGxvY2F0ZWQgdG8gbWFjaGluZSBpcyBub3QgZml4ZWQuIERuc21hc3EgY29tZXMgd2l0aCBhbiBpbnRlZ3JhdGVkCitESENQIGRhZW1vbiB0byBzb2x2ZSB0aGlzIHByb2JsZW0uCis8UD4KK1RoZSBkbnNtYXNxIERIQ1AgZGFlbW9uIGFsbG9jYXRlcyBhZGRyZXNzZXMgdG8gaG9zdHMgb24gdGhlIG5ldHdvcmsgYW5kIHRyaWVzCit0byBkZXRlcm1pbmUgdGhlaXIgbmFtZXMuIElmIGl0IHN1Y2NlZWRzIGl0IGFkZCB0aGUgbmFtZSBhbmQgYWRkcmVzcworcGFpciB0byB0aGUgRE5TLiBUaGVyZSBhcmUgYmFzaWNhbGx5IHR3byB3YXlzIHRvIGFzc29jaWF0ZSBhIG5hbWUgd2l0aAorYSBESENQLWNvbmZpZ3VyZWQgbWFjaGluZTsgZWl0aGVyIHRoZSBtYWNoaW5lIGtub3dzIGl0cyBuYW1lIHdoaWNoIGl0CitnZXRzIGEgREhDUCBsZWFzZSwgb3IgZG5zbWFzcSBnaXZlcyBpdCBhIG5hbWUsIGJhc2VkIG9uIHRoZSBNQUMKK2FkZHJlc3Mgb2YgaXRzIGV0aGVybmV0IGNhcmQuIEZvciB0aGUgZm9ybWVyIHRvIHdvcmssIGEgbWFjaGluZSBuZWVkcyB0byBrbm93IGl0cyBuYW1lIHdoZW4gaXQKK3JlcXVlc3RzIGEgREhDUCBsZWFzZS4gRm9yIGRoY3BjZCwgdGhlIC1oIG9wdGlvbiBzcGVjaWZpZXMgdGhpcy4gVGhlCituYW1lcyBtYXkgYmUgYW55dGhpbmcgYXMgZmFyIGFzIERIQ1AgaXMgY29uY2VybmVkLCBidXQgZG5zbWFzcSBhZGRzCitzb21lIGxpbWl0YXRpb25zLiBCeSBkZWZhdWx0IHRoZSBuYW1lcyBtdXN0IG5vIGhhdmUgYSBkb21haW4gcGFydCwgaWUKK3RoZXkgbXVzdCBqdXN0IGJlIGEgYWxwaGFudW1lcmljIG5hbWUsIHdpdGhvdXQgYW55IGRvdHMuICBUaGlzIGlzIGEKK3NlY3VyaXR5IGZlYXR1cmUgdG8gc3RvcCBhIG1hY2hpbmUgb24geW91ciBuZXR3b3JrIHRlbGxpbmcgREhDUCB0aGF0CitpdHMgbmFtZSBpcyAid3d3Lm1pY3Jvc29mdC5jb20iIGFuZCB0aGVyZWJ5IGdyYWJiaW5nIHRyYWZmaWMgd2hpY2gKK3Nob3VsZG4ndCBnbyB0byBpdC4gQSBkb21haW4gcGFydCBpcyBvbmx5IGFsbG93ZWQgYnkgZG5zbWFzcSBpbiBESENQIG1hY2hpbmUgbmFtZXMKK2lmIHRoZSA8VFQ+ZG9tYWluLXN1ZmZpeDwvVFQ+IG9wdGlvbiBpcyBzZXQsIHRoZSBkb21haW4gcGFydCBtdXN0IG1hdGNoIHRoZQorc3VmZml4LgorPFA+CitBcyBhbiBhc2lkZSwgbWFrZSBzdXJlIG5vdCB0byB0ZWxsIERIQ1AgdG8gc2V0IHRoZSBob3N0bmFtZSB3aGVuIGl0CitvYnRhaW5zIGEgbGVhc2UgKGluIGRoY3BjZCB0aGF0J3MgdGhlIC1IIGZsYWcuKQorVGhpcyBpcyBub3QgcmVsaWFibGUgc2luY2UgdGhlIERIQ1Agc2VydmVyIGdldHMgdGhlCitob3N0bmFtZSBmcm9tIEROUyB3aGljaCBpbiB0aGlzIGNhc2UgaXMgZG5zbWFzcS4gVGhlcmUgaXMgYSByYWNlCitjb25kaXRpb24gYmVjYXVzZSB0aGUgaG9zdCdzIG5hbWUgaW4gdGhlIEROUyBtYXkgY2hhbmdlIGFzIGEKK3Jlc3VsdCBvZiBpdCBnZXR0aW5nIGEgREhDUCBsZWFzZSwgYnV0IHRoaXMgZG9lcyBub3QgcHJvcGFnYXRlIGJlZm9yZQordGhlIG5hbWUgaXMgbG9va2VkIHVwLiBUaGUgbmV0IGVmZmVjdCBtYXkgYmUgdGhhdCB0aGUgaG9zdCBiZWxpZXZlcyBpdAoraXMgY2FsbGVkIHNvbWV0aGluZyBkaWZmZXJlbnQgdG8gaXRzIG5hbWUgaW4gdGhlIEROUy4gVG8gYmUgc2FmZSwgc2V0Cit0aGUgaG9zdG5hbWUgb24gYSBtYWNoaW5lIGxvY2FsbHksIGFuZCBwYXNzIHRoZSBzYW1lIG5hbWUgdG8gREhDUCB3aGVuCityZXF1ZXN0aW5nIGEgbGVhc2UuCis8UD4KKzxIMj5TZXR0aW5nIHVwIGEgbWFpbGh1Yi48L0gyPgorSWYgeW91IGdlbmVyYXRlIG1haWwgb24gdGhlIG1hY2hpbmVzIGF0dGFjaGVkIHRvIHlvdXIgcHJpdmF0ZSBuZXR3b3JrLCB5b3UgbWF5CisgYmUgaW50ZXJlc3RlZCBpbiB0aGUgTVggcmVjb3JkIGZlYXR1cmUgb2YgZG5zbWFzcS4gVGhpcyBhbGxvd3MgeW91IHRvIGhhdmUgYWxsCisgdGhlIG1hY2hpbmVzIG9uIHlvdXIgbmV0d29yayB1c2UgeW91ciBmaXJld2FsbCBvciBhbm90aGVyIG1hY2hpbmUgYXMgYSAic21hcnRob3N0IiBhbmQgCitkZWxpdmVyIG1haWwgdG8gaXQuIFRoZSBkZXRhaWxzIG9mIGhvdyB0byBzZXQgdGhpcyB1cCBhcmUgaGlnaGx5IGRlcGVuZGVudCBvbgoreW91ciBtYWlsZXIsIHN5c3RlbSBhbmQgZGlzdHJpYnV0aW9uLiBUaGUgb25seSB0aGluZyB0aGF0J3MgcmVsZXZhbnQgdG8gZG5zbWFzcSBpcyB0aGF0IHRoZSBtYWlsZXIgCituZWVkcyB0byBiZSBhYmxlIHRvIGludGVycm9nYXRlIHRoZSBETlMgYW5kIGZpbmQgYW4gTVggcmVjb3JkIGZvciB5b3VyIG1haWxodWIuCis8UD4KK0J5IGdpdmluZyBkbnNtYXNxIHRoZSA8VFQ+bXgtaG9zdDwvVFQ+IG9wdGlvbgoreW91IGluc3RydWN0IGRuc21hc3EgdG8gc2VydmUgYW4gTVggcmVjb3JkIGZvciB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuIAorQnkgZGVmYXVsdCB0aGUgTVggcmVjb3JkIAorcG9pbnRzIHRvIHRoZSBtYWNoaW5lIG9uIHdoaWNoIGRuc21hc3EgaXMgcnVubmluZywgc28gbWFpbCBkZWxpdmVyZWQgdG8gdGhhdAorbmFtZSB3aWxsIGdldCBzZW50IHRvIHRoZSBtYWlsZXIgb24geW91ciBmaXJld2FsbCBtYWNoaW5lLiBZb3UgY2FuCitoYXZlIHRoZSBNWCByZWNvcmQgcG9pbnQgdG8gYW5vdGhlciBtYWNoaW5lIGJ5IHVzaW5nIHRoZSA8VFQ+bXgtdGFyZ2V0PC9UVD4KK29wdGlvbi4KKzxQPgorSW4gc29tZSBjYXNlcyBpdCdzIHVzZWZ1bCBmb3IgYWxsIGxvY2FsIG1hY2hpbmVzIHRvIHNlZSBhbiBNWCByZWNvcmQKK3BvaW50aW5nIGF0IHRoZW1zZWx2ZXM6IHRoaXMgYWxsb3dzIG1haWxlcnMgd2hpY2ggaW5zaXN0IG9uIGFuIE1YIHJlY29yZCBhbmQKK2Rvbid0IGZhbGwgYmFjayB0byBBIHJlY29yZHMgdG8gZGVsaXZlciBtYWlsIHdpdGhpbiB0aGUKK21hY2hpbmUuIFRoZXNlIE1YIHJlY29yZHMgYXJlIGVuYWJsZWQgdXNpbmcgdGhlIDxUVD5zZWxmbXg8L1RUPiBvcHRpb24uCisKKzxIMj5Vc2luZyBzcGVjaWFsIHNlcnZlcnMuPC9IMj4KK0Ruc21hc3EgaGFzIHRoZSBhYmlsaXR5IHRvIGRpcmVjdCBETlMgcXVlcmllcyBmb3IgY2VydGFpbiBkb21haW5zIHRvCitzcGVjaWZpYyB1cHN0cmVhbSBuYW1lc2VydmVycy4gVGhpcyBmZWF0dXJlIHdhcyBhZGRlZCBmb3IgdXNlIHdpdGgKK1ZQTnMgYnV0IGl0IGlzIGZ1bGx5IGdlbmVyYWwuIFRoZSBzY2VuYXJpbyBpcyB0aGlzOiB5b3UgaGF2ZSBhCitzdGFuZGFyZCBpbnRlcm5ldCBjb25uZWN0aW9uIHZpYSBhbiBJU1AsIGFuZCBkbnNtYXNxIGlzIGNvbmZpZ3VyZWQgdG8KK2ZvcndhcmQgcXVlcmllcyB0byB0aGUgSVNQJ3MgbmFtZXNlcnZlcnMsIHRoZW4geW91IG1ha2UgYSBWUE4KK2Nvbm5lY3Rpb24gaW50byB5b3VyIGNvbXBhbmllcyBuZXR3b3JrLCBnaXZpbmcgYWNjZXNzIHRvIGhvc3RzIGluc2lkZQordGhlIGNvbXBhbnkgZmlyZXdhbGwuIFlvdSBoYXZlIGFjY2VzcywgYnV0IHNpbmNlIG1hbnkgb2YgdGhlIGludGVybmFsIGhvc3RzCithcmVuJ3QgdmlzaWJsZSBvbiB0aGUgcHVibGljIGludGVybmV0LCB5b3VyIGNvbXBhbnkgZG9lc24ndCBwdWJsaXNoIAordGhlbSB0byB0aGUgcHVibGljIEROUyBhbmQgeW91IGNhbid0IGdldCB0aGVpciBJUCBhZGRyZXNzIGZyb20gdGhlIElTUAorbmFtZXNlcnZlcnMuIFRoZSBzb2x1dGlvbiBpcyB0byB1c2UgdGhlIGNvbXBhbmllcyBuYW1lc2VydmVyIGZvcgorcHJpdmF0ZSBkb21haW5zIHdpdGhpbiB0aGUgY29tcGFueSwgYW5kIGRuc21hc3EgYWxsb3dzIHRoaXMuIEFzc3VtaW5nCit0aGF0IGludGVybmFsIGNvbXBhbnkgbWFjaGluZXMgYXJlIGFsbCBpbiB0aGUgZG9tYWluIGludGVybmFsLm15Y28uY29tCithbmQgdGhlIGNvbXBhbmllcyBuYW1lc2VydmVyIGlzIGF0IDE5Mi4xNjguMTAuMSB0aGVuIHRoZSBvcHRpb24KKzxUVD5zZXJ2ZXI9L2ludGVybmFsLm15Y28uY29tLzE5Mi4xNjguMTAuMTwvVFQ+IHdpbGwgZGlyZWN0IGFsbAorcXVlcmllcyBpbiB0aGUgaW50ZXJuYWwgZG9tYWluIHRvIHRoZSBjb3JyZWN0IG5hbWVzZXJ2ZXIuIFlvdSBjYW4KK3NwZWNpZnkgbW9yZSB0aGFuIG9uZSBkb21haW4gaW4gZWFjaCBzZXJ2ZXIgb3B0aW9uLiBJZiB0aGVyZSBpcworbW9yZSB0aGFuIG9uZSBuYW1lc2VydmVyIGp1c3QgaW5jbHVkZSBhcyBtYW55Cis8VFQ+c2VydmVyPC9UVD4gb3B0aW9ucyBhcyBpcyBuZWVkZWQgdG8gc3BlY2lmeSB0aGVtIGFsbC4gIAorCis8SDI+TG9jYWwgZG9tYWlucy48L0gyPgorU29tZXRpbWVzIHBlb3BsZSBoYXZlIGxvY2FsIGRvbWFpbnMgd2hpY2ggdGhleSBkbyBub3Qgd2FudCBmb3J3YXJkZWQKK3RvIHVwc3RyZWFtIHNlcnZlcnMuIFRoaXMgaXMgYWNjb21vZGF0ZWQgYnkgdXNpbmcgc2VydmVyIG9wdGlvbnMKK3dpdGhvdXQgdGhlIHNlcnZlciBJUCBhZGRyZXNzLiBUbyBtYWtlIHRoaW5ncyBjbGVhcmVyIDxUVD5sb2NhbDwvVFQ+CitpcyBhIHN5bm9ueW0gZm9yIDxUVD5zZXJ2ZXI8L1RUPi4gRm9yIGV4YW1wbGUgdGhlIG9wdGlvbgorPFRUPmxvY2FsPS9sb2NhbG5ldC88L1RUPiBlbnN1cmVzIHRoYXQgYW55IGRvbWFpbiBuYW1lIHF1ZXJ5IHdoaWNoIGVuZHMgaW4KKzxUVD4ubG9jYWxuZXQ8L1RUPiB3aWxsIGJlIGFuc3dlcmVkIGlmIHBvc3NpYmxlIGZyb20KKzxUVD4vZXRjL2hvc3RzPC9UVD4gb3IgREhDUCwgYnV0IG5ldmVyIHNlbnQgdG8gYW4gdXBzdHJlYW0gc2VydmVyLgorCis8SDI+RGVmZWF0aW5nIHdpbGRjYXJkcyBpbiB0b3AgbGV2ZWwgZG9tYWlucy48L0gyPgorSW4gU2VwdGVtYmVyIDIwMDMgVmVyaXNpZ24gaW5zdGFsbGVkIGEgd2lsZGNhcmQgcmVjb3JkIGluIHRoZSAuY29tIGFuZAorLm5ldCB0b3AgbGV2ZWwgZG9tYWlucy4gVGhlIGVmZmVjdCBvZiB0aGlzIGlzIHRoYXQgcXVlcmllcyBmb3IKK3VucmVnaXN0ZXJlZCAuY29tIGFuZCAubmV0IG5hbWVzIG5vdyByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgVmVyaXNpZ24ncworc2l0ZWZpbmRlciBzZXJ2aWNlLCByYXRoZXIgdGhhbiBhICJubyBzdWNoIGRvbWFpbiIgcmVzcG9uc2UuIFRvCityZXN0b3JlIHRoZSBjb3JyZWN0IGJlaGF2aW91ciwgeW91IGNhbiB0ZWxsIGRuc21hc3EgdGhlIGFkZHJlc3Mgb2YgdGhlCitzaXRlZmluZGVyIGhvc3QgYW5kIGhhdmUgaXQgc3Vic3RpdHV0ZSBhbiBOWERPTUFJTiByZXBseSB3aGVuIGl0IHNlZXMKK3RoYXQgYWRkcmVzcy4gVGhlIHNpdGVmaW5kZXIgYWRkcmVzcyBpcyBjdXJyZW50bHkgIDY0Ljk0LjExMC4xMSwgc28KK2dpdmluZyB0aGUgb3B0aW9uIDxUVD5ib2d1cy1ueGRvbWFpbj02NC45NC4xMTAuMTE8L1RUPiB3aWxsIGVuYWJsZQordGhpcyBmYWNpbGl0eSBmb3IgVmVyaXNpZ24uIElmIG90aGVyIFRMRHMgZG8gdGhhdCBzYW1lIHRoaW5nIHlvdSBjYW4KK2FkZCB0aGUgY29ycmVjdCBhZGRyZXNzZXMgZm9yIHRoZW0gdG9vLiBTZWUgdGhlIGRuc21hc3EgRkFRIGZvciBtb3JlCitkZXRhaWxzIG9uIHRoZSA8VFQ+Ym9ndXMtbnhkb21haW48L1RUPiBvcHRpb24uCisgCis8SDI+T3RoZXIgY29uZmlndXJhdGlvbiBkZXRhaWxzLjwvSDI+CitCeSBkZWZhdWx0IGRuc21hc3Egb2ZmZXJzIEROUyBzZXJ2aWNlIG9uIGFsbCB0aGUgY29uZmlndXJlZCBpbnRlcmZhY2VzCitvZiBhIGhvc3QuIEl0J3MgbGlrZWx5IHRoYXQgeW91IGRvbid0IChmb3IgaW5zdGFuY2UpIHdhbnQgdG8gb2ZmZXIgYQorRE5TIHNlcnZpY2UgdG8gdGhlIHdvcmxkIHZpYSBhbiBpbnRlcmZhY2UgY29ubmVjdGVkIHRvIEFEU0wgb3IKK2NhYmxlLW1vZGVtIHNvIGRuc21hc3EgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHdoaWNoIGludGVyZmFjZXMgaXQgd2lsbAorbGlzdGVuIG9uLiBVc2UgZWl0aGVyIHRoZSA8VFQ+aW50ZXJmYWNlPC9UVD4gb3IgPFRUPmFkZHJlc3M8L1RUPiBvcHRpb25zIHRvIGRvIHRoaXMuCis8UD4KK1RoZSA8VFQ+ZmlsdGVyd2luMms8L1RUPiBvcHRpb24gbWFrZXMgZG5zbWFzcSBpZ25vcmUgY2VydGFpbiBETlMgcmVxdWVzdHMgd2hpY2gKK2FyZSBtYWRlIGJ5IFdpbmRvd3MgYm94ZW4gZXZlcnkgZmV3IG1pbnV0ZXMuIFRoZSByZXF1ZXN0cyBnZW5lcmFsbHkKK2Rvbid0IGdldCBzZW5zaWJsZSBhbnN3ZXJzIGluIHRoZSBnbG9iYWwgRE5TIGFuZCBjYXVzZSB0cm91YmxlIGJ5Cit0cmlnZ2VyaW5nIGRpYWwtb24tZGVtYW5kIGludGVybmV0IGxpbmtzLgorPFA+CitTZW5kaW5nIFNJR0hVUCB0byB0aGUgZG5zbWFzcSBwcm9jZXNzIHdpbGwgY2F1c2UgaXQgdG8gZW1wdHkgaXRzIGNhY2hlIGFuZCAKK3RoZW4gcmUtbG9hZCA8VFQ+L2V0Yy9ob3N0czwvVFQ+IGFuZCA8VFQ+L2V0Yy9yZXNvbHYuY29uZjwvVFQ+LgorPFA+IFNlbmRpbmcgU0lHVVNSMSAoa2lsbGFsbCAtMTAgZG5zbWFzcSkgdG8gdGhlIGRuc21hc3EgcHJvY2VzcyB3aWxsCitjYXVzZSB0byB0byB3cml0ZSBjYWNoZSB1c2FnZSBzdGF0aXN0aWNzcyB0byB0aGUgbG9nLCB0eXBpY2FsbHkKKzxUVD4vdmFyL2xvZy9zeXNsb2c8L1RUPiBvciA8VFQ+L3Zhci9sb2cvbWVzc2FnZXM8L1RUPi4KKzxQPiBUaGUgPFRUPmxvZy1xdWVyaWVzPC9UVD4gb3B0aW9uIHRlbGxzIGRuc21hc3EgdG8gdmVyYm9zZWx5IGxvZyB0aGUgcXVlcmllcworaXQgaXMgaGFuZGxpbmcgYW5kIGNhdXNlcyBTSUdVU1IxIHRvIHRyaWdnZXIgYSBjb21wbGV0ZSBkdW1wIG9mIHRoZQorY29udGVudHMgb2YgdGhlIGNhY2hlIHRvIHRoZSBzeXNsb2cuCisKKzxQPkZvciBhIGNvbXBsZXRlIGxpc3Rpbmcgb2Ygb3B0aW9ucyBwbGVhc2UgdGFrZSBhIGxvb2sgYXQgdGhlIG1hbnBhZ2UKK2Ruc21hc3EoOCkuCmRpZmYgLS1naXQgYS9zcmMvYnBmLmMgYi9zcmMvYnBmLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWJkZTc4YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9icGYuYwpAQCAtMCwwICsxLDI1NCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspIHx8IGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisKK3N0YXRpYyBzdHJ1Y3QgaW92ZWMgaWZjb25mID0geworICAuaW92X2Jhc2UgPSBOVUxMLAorICAuaW92X2xlbiA9IDAKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW92ZWMgaWZyZXEgPSB7CisgIC5pb3ZfYmFzZSA9IE5VTEwsCisgIC5pb3ZfbGVuID0gMAorfTsKKworaW50IGlmYWNlX2VudW1lcmF0ZSh2b2lkICpwYXJtLCBpbnQgKCppcHY0X2NhbGxiYWNrKSgpLCBpbnQgKCppcHY2X2NhbGxiYWNrKSgpKQoreworICBjaGFyICpwdHI7CisgIHN0cnVjdCBpZnJlcSAqaWZyOworICBzdHJ1Y3QgaWZjb25mIGlmYzsKKyAgaW50IGZkLCBlcnJzYXYsIHJldCA9IDA7CisgIGludCBsYXN0bGVuID0gMDsKKyAgc2l6ZV90IGxlbiA9IDA7CisgIAorICBpZiAoKGZkID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfREdSQU0sIDApKSA9PSAtMSkKKyAgICByZXR1cm4gMDsKKyAgCisgIHdoaWxlKDEpCisgICAgeworICAgICAgbGVuICs9IDEwKnNpemVvZihzdHJ1Y3QgaWZyZXEpOworICAgICAgCisgICAgICBpZiAoIWV4cGFuZF9idWYoJmlmY29uZiwgbGVuKSkKKwlnb3RvIGVycjsKKyAgICAgIAorICAgICAgaWZjLmlmY19sZW4gPSBsZW47CisgICAgICBpZmMuaWZjX2J1ZiA9IGlmY29uZi5pb3ZfYmFzZTsKKyAgICAgIAorICAgICAgaWYgKGlvY3RsKGZkLCBTSU9DR0lGQ09ORiwgJmlmYykgPT0gLTEpCisJeworCSAgaWYgKGVycm5vICE9IEVJTlZBTCB8fCBsYXN0bGVuICE9IDApCisJICAgIGdvdG8gZXJyOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoaWZjLmlmY19sZW4gPT0gbGFzdGxlbikKKwkgICAgYnJlYWs7IC8qIGdvdCBhIGJpZyBlbm91Z2ggYnVmZmVyIG5vdyAqLworCSAgbGFzdGxlbiA9IGlmYy5pZmNfbGVuOworCX0KKyAgICB9CisgIAorICBmb3IgKHB0ciA9IGlmYy5pZmNfYnVmOyBwdHIgPCAoY2hhciAqKShpZmMuaWZjX2J1ZiArIGlmYy5pZmNfbGVuKTsgcHRyICs9IGxlbikKKyAgICB7CisgICAgICAvKiBzdWJzZXF1ZW50IGVudHJpZXMgbWF5IG5vdCBiZSBhbGlnbmVkLCBzbyBjb3B5IGludG8KKwkgYW4gYWxpZ25lZCBidWZmZXIgdG8gYXZvaWQgbmFzdHkgY29tcGxhaW50cyBhYm91dCAKKwkgdW5hbGlnbmVkIGFjY2Vzc2VzLiAqLworCisgICAgICBsZW4gPSBzaXplb2Yoc3RydWN0IGlmcmVxKTsKKyAgICAgIAorI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgICAgICBpZnIgPSAoc3RydWN0IGlmcmVxICopcHRyOworICAgICAgaWYgKGlmci0+aWZyX2FkZHIuc2FfbGVuID4gc2l6ZW9mKGlmci0+aWZyX2lmcnUpKQorCWxlbiA9IGlmci0+aWZyX2FkZHIuc2FfbGVuICsgb2Zmc2V0b2Yoc3RydWN0IGlmcmVxLCBpZnJfaWZydSk7CisjZW5kaWYKKyAgICAgIAorICAgICAgaWYgKCFleHBhbmRfYnVmKCZpZnJlcSwgbGVuKSkKKwlnb3RvIGVycjsKKworICAgICAgaWZyID0gKHN0cnVjdCBpZnJlcSAqKWlmcmVxLmlvdl9iYXNlOworICAgICAgbWVtY3B5KGlmciwgcHRyLCBsZW4pOworICAgICAgICAgICAKKyAgICAgIGlmIChpZnItPmlmcl9hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUICYmIGlwdjRfY2FsbGJhY2spCisJeworCSAgc3RydWN0IGluX2FkZHIgYWRkciwgbmV0bWFzaywgYnJvYWRjYXN0OworCSAgYnJvYWRjYXN0LnNfYWRkciA9IDA7CisJICBhZGRyID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmlmci0+aWZyX2FkZHIpLT5zaW5fYWRkcjsKKwkgIGlmIChpb2N0bChmZCwgU0lPQ0dJRk5FVE1BU0ssIGlmcikgPT0gLTEpCisJICAgIGNvbnRpbnVlOworCSAgbmV0bWFzayA9ICgoc3RydWN0IHNvY2thZGRyX2luICopICZpZnItPmlmcl9hZGRyKS0+c2luX2FkZHI7CisJICBpZiAoaW9jdGwoZmQsIFNJT0NHSUZCUkRBRERSLCBpZnIpICE9IC0xKQorCSAgICBicm9hZGNhc3QgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmaWZyLT5pZnJfYWRkciktPnNpbl9hZGRyOyAKKwkgIGlmICghKCgqaXB2NF9jYWxsYmFjaykoYWRkciwgCisJCQkJIChpbnQpaWZfbmFtZXRvaW5kZXgoaWZyLT5pZnJfbmFtZSksCisJCQkJIG5ldG1hc2ssIGJyb2FkY2FzdCwgCisJCQkJIHBhcm0pKSkKKwkgICAgZ290byBlcnI7CisJfQorI2lmZGVmIEhBVkVfSVBWNgorICAgICAgZWxzZSBpZiAoaWZyLT5pZnJfYWRkci5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYgaXB2Nl9jYWxsYmFjaykKKwl7CisJICBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIgPSAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJmlmci0+aWZyX2FkZHIpLT5zaW42X2FkZHI7CisJICAvKiB2b29kb28gdG8gY2xlYXIgaW50ZXJmYWNlIGZpZWxkIGluIGFkZHJlc3MgKi8KKwkgIGlmICghKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT1dJTEQpICYmIElONl9JU19BRERSX0xJTktMT0NBTChhZGRyKSkKKwkgICAgeworCSAgICAgIGFkZHItPnM2X2FkZHJbMl0gPSAwOworCSAgICAgIGFkZHItPnM2X2FkZHJbM10gPSAwOworCSAgICB9CisJICBpZiAoISgoKmlwdjZfY2FsbGJhY2spKGFkZHIsCisJCQkJIChpbnQpKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJmlmci0+aWZyX2FkZHIpLT5zaW42X3Njb3BlX2lkLAorCQkJCSAoaW50KWlmX25hbWV0b2luZGV4KGlmci0+aWZyX25hbWUpLAorCQkJCSBwYXJtKSkpCisJICAgIGdvdG8gZXJyOworCX0KKyNlbmRpZgorICAgIH0KKyAgCisgIHJldCA9IDE7CisKKyBlcnI6CisgIGVycnNhdiA9IGVycm5vOworICBjbG9zZShmZCk7ICAKKyAgZXJybm8gPSBlcnJzYXY7CisKKyAgcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspICYmIGRlZmluZWQoSEFWRV9ESENQKQorI2luY2x1ZGUgPG5ldC9icGYuaD4KKwordm9pZCBpbml0X2JwZih2b2lkKQoreworICBpbnQgaSA9IDA7CisKKyAgd2hpbGUgKDEpIAorICAgIHsKKyAgICAgIC8qIHVzZWZ1bCBzaXplIHdoaWNoIGhhcHBlbnMgdG8gYmUgc3VmZmljaWVudCAqLworICAgICAgaWYgKGV4cGFuZF9idWYoJmlmcmVxLCBzaXplb2Yoc3RydWN0IGlmcmVxKSkpCisJeworCSAgc3ByaW50ZihpZnJlcS5pb3ZfYmFzZSwgIi9kZXYvYnBmJWQiLCBpKyspOworCSAgaWYgKChkYWVtb24tPmRoY3BfcmF3X2ZkID0gb3BlbihpZnJlcS5pb3ZfYmFzZSwgT19SRFdSLCAwKSkgIT0gLTEpCisJICAgIHJldHVybjsKKwl9CisgICAgICBpZiAoZXJybm8gIT0gRUJVU1kpCisJZGllKF8oImNhbm5vdCBjcmVhdGUgREhDUCBCUEYgc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworICAgIH0JICAgICAKK30KKwordm9pZCBzZW5kX3ZpYV9icGYoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzaXplX3QgbGVuLAorCQkgIHN0cnVjdCBpbl9hZGRyIGlmYWNlX2FkZHIsIHN0cnVjdCBpZnJlcSAqaWZyKQoreworICAgLyogSGFpcnkgc3R1ZmYsIHBhY2tldCBlaXRoZXIgaGFzIHRvIGdvIHRvIHRoZQorICAgICAgbmV0IGJyb2FkY2FzdCBvciB0aGUgZGVzdGluYXRpb24gY2FuJ3QgcmVwbHkgdG8gQVJQIHlldCwKKyAgICAgIGJ1dCB3ZSBkbyBrbm93IHRoZSBwaHlzaWNhbCBhZGRyZXNzLiAKKyAgICAgIEJ1aWxkIHRoZSBwYWNrZXQgYnkgc3RlYW0sIGFuZCBzZW5kIGRpcmVjdGx5LCBieXBhc3NpbmcKKyAgICAgIHRoZSBrZXJuZWwgSVAgc3RhY2sgKi8KKyAgCisgIHN0cnVjdCBldGhlcl9oZWFkZXIgZXRoZXI7IAorICBzdHJ1Y3QgaXAgaXA7CisgIHN0cnVjdCB1ZHBoZHIgeworICAgIHUxNiB1aF9zcG9ydDsgICAgICAgICAgICAgICAvKiBzb3VyY2UgcG9ydCAqLworICAgIHUxNiB1aF9kcG9ydDsgICAgICAgICAgICAgICAvKiBkZXN0aW5hdGlvbiBwb3J0ICovCisgICAgdTE2IHVoX3VsZW47ICAgICAgICAgICAgICAgIC8qIHVkcCBsZW5ndGggKi8KKyAgICB1MTYgdWhfc3VtOyAgICAgICAgICAgICAgICAgLyogdWRwIGNoZWNrc3VtICovCisgIH0gdWRwOworICAKKyAgdTMyIGksIHN1bTsKKyAgc3RydWN0IGlvdmVjIGlvdls0XTsKKworICAvKiBPbmx5IGtub3cgaG93IHRvIGRvIGV0aGVybmV0IG9uICpCU0QgKi8KKyAgaWYgKG1lc3MtPmh0eXBlICE9IEFSUEhSRF9FVEhFUiB8fCBtZXNzLT5obGVuICE9IEVUSEVSX0FERFJfTEVOKQorICAgIHsKKyAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oIkRIQ1AgcmVxdWVzdCBmb3IgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgdHlwZSAoJWQpIHJlY2VpdmVkIG9uICVzIiksIAorCQltZXNzLT5odHlwZSwgaWZyLT5pZnJfbmFtZSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgCisgIGlmci0+aWZyX2FkZHIuc2FfZmFtaWx5ID0gQUZfTElOSzsKKyAgaWYgKGlvY3RsKGRhZW1vbi0+ZGhjcGZkLCBTSU9DR0lGQUREUiwgaWZyKSA8IDApCisgICAgcmV0dXJuOworICAKKyAgbWVtY3B5KGV0aGVyLmV0aGVyX3Nob3N0LCBMTEFERFIoKHN0cnVjdCBzb2NrYWRkcl9kbCAqKSZpZnItPmlmcl9hZGRyKSwgRVRIRVJfQUREUl9MRU4pOworICBldGhlci5ldGhlcl90eXBlID0gaHRvbnMoRVRIRVJUWVBFX0lQKTsKKyAgCisgIGlmIChudG9ocyhtZXNzLT5mbGFncykgJiAweDgwMDApCisgICAgeworICAgICAgbWVtc2V0KGV0aGVyLmV0aGVyX2Rob3N0LCAyNTUsICBFVEhFUl9BRERSX0xFTik7CisgICAgICBpcC5pcF9kc3Quc19hZGRyID0gSU5BRERSX0JST0FEQ0FTVDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBtZW1jcHkoZXRoZXIuZXRoZXJfZGhvc3QsIG1lc3MtPmNoYWRkciwgRVRIRVJfQUREUl9MRU4pOyAKKyAgICAgIGlwLmlwX2RzdC5zX2FkZHIgPSBtZXNzLT55aWFkZHIuc19hZGRyOworICAgIH0KKyAgCisgIGlwLmlwX3AgPSBJUFBST1RPX1VEUDsKKyAgaXAuaXBfc3JjLnNfYWRkciA9IGlmYWNlX2FkZHIuc19hZGRyOworICBpcC5pcF9sZW4gPSBodG9ucyhzaXplb2Yoc3RydWN0IGlwKSArIAorCQkgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsKKwkJICAgIGxlbikgOworICBpcC5pcF9obCA9IHNpemVvZihzdHJ1Y3QgaXApIC8gNDsKKyAgaXAuaXBfdiA9IElQVkVSU0lPTjsKKyAgaXAuaXBfdG9zID0gMDsKKyAgaXAuaXBfaWQgPSBodG9ucygwKTsKKyAgaXAuaXBfb2ZmID0gaHRvbnMoMHg0MDAwKTsgLyogZG9uJ3QgZnJhZ21lbnQgKi8KKyAgaXAuaXBfdHRsID0gSVBERUZUVEw7CisgIGlwLmlwX3N1bSA9IDA7CisgIGZvciAoc3VtID0gMCwgaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGlwKSAvIDI7IGkrKykKKyAgICBzdW0gKz0gKCh1MTYgKikmaXApW2ldOworICB3aGlsZSAoc3VtPj4xNikKKyAgICBzdW0gPSAoc3VtICYgMHhmZmZmKSArIChzdW0gPj4gMTYpOyAgCisgIGlwLmlwX3N1bSA9IChzdW0gPT0gMHhmZmZmKSA/IHN1bSA6IH5zdW07CisgIAorICB1ZHAudWhfc3BvcnQgPSBodG9ucyhkYWVtb24tPmRoY3Bfc2VydmVyX3BvcnQpOworICB1ZHAudWhfZHBvcnQgPSBodG9ucyhkYWVtb24tPmRoY3BfY2xpZW50X3BvcnQpOworICBpZiAobGVuICYgMSkKKyAgICAoKGNoYXIgKiltZXNzKVtsZW5dID0gMDsgLyogZm9yIGNoZWNrc3VtLCBpbiBjYXNlIGxlbmd0aCBpcyBvZGQuICovCisgIHVkcC51aF9zdW0gPSAwOworICB1ZHAudWhfdWxlbiA9IHN1bSA9IGh0b25zKHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIGxlbik7CisgIHN1bSArPSBodG9ucyhJUFBST1RPX1VEUCk7CisgIHN1bSArPSBpcC5pcF9zcmMuc19hZGRyICYgMHhmZmZmOworICBzdW0gKz0gKGlwLmlwX3NyYy5zX2FkZHIgPj4gMTYpICYgMHhmZmZmOworICBzdW0gKz0gaXAuaXBfZHN0LnNfYWRkciAmIDB4ZmZmZjsKKyAgc3VtICs9IChpcC5pcF9kc3Quc19hZGRyID4+IDE2KSAmIDB4ZmZmZjsKKyAgZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdWRwaGRyKS8yOyBpKyspCisgICAgc3VtICs9ICgodTE2ICopJnVkcClbaV07CisgIGZvciAoaSA9IDA7IGkgPCAobGVuICsgMSkgLyAyOyBpKyspCisgICAgc3VtICs9ICgodTE2ICopbWVzcylbaV07CisgIHdoaWxlIChzdW0+PjE2KQorICAgIHN1bSA9IChzdW0gJiAweGZmZmYpICsgKHN1bSA+PiAxNik7CisgIHVkcC51aF9zdW0gPSAoc3VtID09IDB4ZmZmZikgPyBzdW0gOiB+c3VtOworICAKKyAgaW9jdGwoZGFlbW9uLT5kaGNwX3Jhd19mZCwgQklPQ1NFVElGLCBpZnIpOworICAKKyAgaW92WzBdLmlvdl9iYXNlID0gJmV0aGVyOworICBpb3ZbMF0uaW92X2xlbiA9IHNpemVvZihldGhlcik7CisgIGlvdlsxXS5pb3ZfYmFzZSA9ICZpcDsKKyAgaW92WzFdLmlvdl9sZW4gPSBzaXplb2YoaXApOworICBpb3ZbMl0uaW92X2Jhc2UgPSAmdWRwOworICBpb3ZbMl0uaW92X2xlbiA9IHNpemVvZih1ZHApOworICBpb3ZbM10uaW92X2Jhc2UgPSBtZXNzOworICBpb3ZbM10uaW92X2xlbiA9IGxlbjsKKworICB3aGlsZSAod3JpdGV2KGRhZW1vbi0+ZGhjcF9yYXdfZmQsIGlvdiwgNCkgPT0gLTEgJiYgcmV0cnlfc2VuZCgpKTsKK30KKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlLmMgYi9zcmMvY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNjQxYWU3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NhY2hlLmMKQEAgLTAsMCArMSwxMzE3IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDA5IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworc3RhdGljIHN0cnVjdCBjcmVjICpjYWNoZV9oZWFkID0gTlVMTCwgKmNhY2hlX3RhaWwgPSBOVUxMLCAqKmhhc2hfdGFibGUgPSBOVUxMOworI2lmZGVmIEhBVkVfREhDUAorc3RhdGljIHN0cnVjdCBjcmVjICpkaGNwX3NwYXJlID0gTlVMTDsKKyNlbmRpZgorc3RhdGljIHN0cnVjdCBjcmVjICpuZXdfY2hhaW4gPSBOVUxMOworc3RhdGljIGludCBjYWNoZV9pbnNlcnRlZCA9IDAsIGNhY2hlX2xpdmVfZnJlZWQgPSAwLCBpbnNlcnRfZXJyb3I7CitzdGF0aWMgdW5pb24gYmlnbmFtZSAqYmlnX2ZyZWUgPSBOVUxMOworc3RhdGljIGludCBiaWduYW1lc19sZWZ0LCBoYXNoX3NpemU7CitzdGF0aWMgaW50IHVpZCA9IDA7CitzdGF0aWMgY2hhciAqYWRkcmJ1ZmYgPSBOVUxMOworCisvKiB0eXBlLT5zdHJpbmcgbWFwcGluZzogdGhpcyBpcyBhbHNvIHVzZWQgYnkgdGhlIG5hbWUtaGFzaCBmdW5jdGlvbiBhcyBhIG1peGluZyB0YWJsZS4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICB1bnNpZ25lZCBpbnQgdHlwZTsKKyAgY29uc3QgY2hhciAqIGNvbnN0IG5hbWU7Cit9IHR5cGVzdHJbXSA9IHsKKyAgeyAxLCAgICJBIiB9LAorICB7IDIsICAgIk5TIiB9LAorICB7IDUsICAgIkNOQU1FIiB9LAorICB7IDYsICAgIlNPQSIgfSwKKyAgeyAxMCwgICJOVUxMIiB9LAorICB7IDExLCAgIldLUyIgfSwKKyAgeyAxMiwgICJQVFIiIH0sCisgIHsgMTMsICAiSElORk8iIH0sCQorICB7IDE1LCAgIk1YIiB9LAorICB7IDE2LCAgIlRYVCIgfSwKKyAgeyAyMiwgICJOU0FQIiB9LAorICB7IDIzLCAgIk5TQVBfUFRSIiB9LAorICB7IDI0LCAgIlNJRyIgfSwKKyAgeyAyNSwgICJLRVkiIH0sCisgIHsgMjgsICAiQUFBQSIgfSwKKyAgeyAzMywgICJTUlYiIH0sCisgIHsgMzUsICAiTkFQVFIiIH0sCisgIHsgMzYsICAiS1giIH0sCisgIHsgMzcsICAiQ0VSVCIgfSwKKyAgeyAzOCwgICJBNiIgfSwKKyAgeyAzOSwgICJETkFNRSIgfSwKKyAgeyA0MSwgICJPUFQiIH0sCisgIHsgNDgsICAiRE5TS0VZIiB9LAorICB7IDI0OSwgIlRLRVkiIH0sCisgIHsgMjUwLCAiVFNJRyIgfSwKKyAgeyAyNTEsICJJWEZSIiB9LAorICB7IDI1MiwgIkFYRlIiIH0sCisgIHsgMjUzLCAiTUFJTEIiIH0sCisgIHsgMjU0LCAiTUFJTEEiIH0sCisgIHsgMjU1LCAiQU5ZIiB9Cit9OworCitzdGF0aWMgdm9pZCBjYWNoZV9mcmVlKHN0cnVjdCBjcmVjICpjcmVjcCk7CitzdGF0aWMgdm9pZCBjYWNoZV91bmxpbmsoc3RydWN0IGNyZWMgKmNyZWNwKTsKK3N0YXRpYyB2b2lkIGNhY2hlX2xpbmsoc3RydWN0IGNyZWMgKmNyZWNwKTsKK3N0YXRpYyB2b2lkIHJlaGFzaChpbnQgc2l6ZSk7CitzdGF0aWMgdm9pZCBjYWNoZV9oYXNoKHN0cnVjdCBjcmVjICpjcmVjcCk7CisKK3ZvaWQgY2FjaGVfaW5pdCh2b2lkKQoreworICBzdHJ1Y3QgY3JlYyAqY3JlY3A7CisgIGludCBpOworCisgIGlmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTE9HKQorICAgIGFkZHJidWZmID0gc2FmZV9tYWxsb2MoQUREUlNUUkxFTik7CisgIAorICBiaWduYW1lc19sZWZ0ID0gZGFlbW9uLT5jYWNoZXNpemUvMTA7CisgIAorICBpZiAoZGFlbW9uLT5jYWNoZXNpemUgPiAwKQorICAgIHsKKyAgICAgIGNyZWNwID0gc2FmZV9tYWxsb2MoZGFlbW9uLT5jYWNoZXNpemUqc2l6ZW9mKHN0cnVjdCBjcmVjKSk7CisgICAgICAKKyAgICAgIGZvciAoaT0wOyBpIDwgZGFlbW9uLT5jYWNoZXNpemU7IGkrKywgY3JlY3ArKykKKwl7CisJICBjYWNoZV9saW5rKGNyZWNwKTsKKwkgIGNyZWNwLT5mbGFncyA9IDA7CisJICBjcmVjcC0+dWlkID0gdWlkKys7CisJfQorICAgIH0KKyAgCisgIC8qIGNyZWF0ZSBpbml0aWFsIGhhc2ggdGFibGUqLworICByZWhhc2goZGFlbW9uLT5jYWNoZXNpemUpOworfQorCisvKiBJbiBtb3N0IGNhc2VzLCB3ZSBjcmVhdGUgdGhlIGhhc2ggdGFibGUgb25jZSBoZXJlIGJ5IGNhbGxpbmcgdGhpcyB3aXRoIChoYXNoX3RhYmxlID09IE5VTEwpCisgICBidXQgaWYgdGhlIGhvc3RzIGZpbGUocykgYXJlIGJpZyAoc29tZSBwZW9wbGUgaGF2ZSA1MDAwMCBhZC1ibG9jayBlbnRyaWVzKSwgdGhlIHRhYmxlCisgICB3aWxsIGJlIG11Y2ggdG9vIHNtYWxsLCBzbyB0aGUgaG9zdHMgcmVhZGluZyBjb2RlIGNhbGxzIHJlaGFzaCBldmVyeSAxMDAwIGFkZHJlc3NlcywgdG8KKyAgIGV4cGFuZCB0aGUgdGFibGUuICovCitzdGF0aWMgdm9pZCByZWhhc2goaW50IHNpemUpCit7CisgIHN0cnVjdCBjcmVjICoqbmV3LCAqKm9sZCwgKnAsICp0bXA7CisgIGludCBpLCBuZXdfc2l6ZSwgb2xkX3NpemU7CisKKyAgLyogaGFzaF9zaXplIGlzIGEgcG93ZXIgb2YgdHdvLiAqLworICBmb3IgKG5ld19zaXplID0gNjQ7IG5ld19zaXplIDwgc2l6ZS8xMDsgbmV3X3NpemUgPSBuZXdfc2l6ZSA8PCAxKTsKKyAgCisgIC8qIG11c3Qgc3VjY2VlZCBpbiBnZXR0aW5nIGZpcnN0IGluc3RhbmNlLCBmYWlsdXJlIGxhdGVyIGlzIG5vbi1mYXRhbCAqLworICBpZiAoIWhhc2hfdGFibGUpCisgICAgbmV3ID0gc2FmZV9tYWxsb2MobmV3X3NpemUgKiBzaXplb2Yoc3RydWN0IGNyZWMgKikpOworICBlbHNlIGlmIChuZXdfc2l6ZSA8PSBoYXNoX3NpemUgfHwgIShuZXcgPSB3aGluZV9tYWxsb2MobmV3X3NpemUgKiBzaXplb2Yoc3RydWN0IGNyZWMgKikpKSkKKyAgICByZXR1cm47CisKKyAgZm9yKGkgPSAwOyBpIDwgbmV3X3NpemU7IGkrKykKKyAgICBuZXdbaV0gPSBOVUxMOworCisgIG9sZCA9IGhhc2hfdGFibGU7CisgIG9sZF9zaXplID0gaGFzaF9zaXplOworICBoYXNoX3RhYmxlID0gbmV3OworICBoYXNoX3NpemUgPSBuZXdfc2l6ZTsKKyAgCisgIGlmIChvbGQpCisgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IG9sZF9zaXplOyBpKyspCisJZm9yIChwID0gb2xkW2ldOyBwIDsgcCA9IHRtcCkKKwkgIHsKKwkgICAgdG1wID0gcC0+aGFzaF9uZXh0OworCSAgICBjYWNoZV9oYXNoKHApOworCSAgfQorICAgICAgZnJlZShvbGQpOworICAgIH0KK30KKyAgCitzdGF0aWMgc3RydWN0IGNyZWMgKipoYXNoX2J1Y2tldChjaGFyICpuYW1lKQoreworICB1bnNpZ25lZCBpbnQgYywgdmFsID0gMDE3NDY1OyAvKiBCYXJrZXIgY29kZSAtIG1pbmltdW0gc2VsZi1jb3JyZWxhdGlvbiBpbiBjeWNsaWMgc2hpZnQgKi8KKyAgY29uc3QgdW5zaWduZWQgY2hhciAqbWl4X3RhYiA9IChjb25zdCB1bnNpZ25lZCBjaGFyKil0eXBlc3RyOyAKKworICB3aGlsZSgoYyA9ICh1bnNpZ25lZCBjaGFyKSAqbmFtZSsrKSkKKyAgICB7CisgICAgICAvKiBkb24ndCB1c2UgdG9sb3dlciBhbmQgZnJpZW5kcyBoZXJlIC0gdGhleSBtYXkgYmUgbWVzc2VkIHVwIGJ5IExPQ0FMRSAqLworICAgICAgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKQorCWMgKz0gJ2EnIC0gJ0EnOworICAgICAgdmFsID0gKCh2YWwgPDwgNykgfCAodmFsID4+ICgzMiAtIDcpKSkgKyAobWl4X3RhYlsodmFsICsgYykgJiAweDNGXSBeIGMpOworICAgIH0gCisgIAorICAvKiBoYXNoX3NpemUgaXMgYSBwb3dlciBvZiB0d28gKi8KKyAgcmV0dXJuIGhhc2hfdGFibGUgKyAoKHZhbCBeICh2YWwgPj4gMTYpKSAmIChoYXNoX3NpemUgLSAxKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNhY2hlX2hhc2goc3RydWN0IGNyZWMgKmNyZWNwKQoreworICAvKiBtYWludGFpbiBhbiBpbnZhcmlhbnQgdGhhdCBhbGwgZW50cmllcyB3aXRoIEZfUkVWRVJTRSBzZXQKKyAgICAgYXJlIGF0IHRoZSBzdGFydCBvZiB0aGUgaGFzaC1jaGFpbiAgYW5kIGFsbCBub24tcmV2ZXJzZQorICAgICBpbW1vcnRhbCBlbnRyaWVzIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBoYXNoLWNoYWluLgorICAgICBUaGlzIGFsbG93cyByZXZlcnNlIHNlYXJjaGVzIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gdG8gYmUgb3B0aW1pc2VkICovCisKKyAgc3RydWN0IGNyZWMgKip1cCA9IGhhc2hfYnVja2V0KGNhY2hlX2dldF9uYW1lKGNyZWNwKSk7CisKKyAgaWYgKCEoY3JlY3AtPmZsYWdzICYgRl9SRVZFUlNFKSkKKyAgICB7CisgICAgICB3aGlsZSAoKnVwICYmICgoKnVwKS0+ZmxhZ3MgJiBGX1JFVkVSU0UpKQorCXVwID0gJigoKnVwKS0+aGFzaF9uZXh0KTsgCisgICAgICAKKyAgICAgIGlmIChjcmVjcC0+ZmxhZ3MgJiBGX0lNTU9SVEFMKQorCXdoaWxlICgqdXAgJiYgISgoKnVwKS0+ZmxhZ3MgJiBGX0lNTU9SVEFMKSkKKwkgIHVwID0gJigoKnVwKS0+aGFzaF9uZXh0KTsKKyAgICB9CisgIGNyZWNwLT5oYXNoX25leHQgPSAqdXA7CisgICp1cCA9IGNyZWNwOworfQorIAorc3RhdGljIHZvaWQgY2FjaGVfZnJlZShzdHJ1Y3QgY3JlYyAqY3JlY3ApCit7CisgIGNyZWNwLT5mbGFncyAmPSB+Rl9GT1JXQVJEOworICBjcmVjcC0+ZmxhZ3MgJj0gfkZfUkVWRVJTRTsKKyAgY3JlY3AtPnVpZCA9IHVpZCsrOyAvKiBpbnZhbGlkYXRlIENOQU1FUyBwb2ludGluZyB0byB0aGlzLiAqLworICAKKyAgaWYgKGNhY2hlX3RhaWwpCisgICAgY2FjaGVfdGFpbC0+bmV4dCA9IGNyZWNwOworICBlbHNlCisgICAgY2FjaGVfaGVhZCA9IGNyZWNwOworICBjcmVjcC0+cHJldiA9IGNhY2hlX3RhaWw7CisgIGNyZWNwLT5uZXh0ID0gTlVMTDsKKyAgY2FjaGVfdGFpbCA9IGNyZWNwOworICAKKyAgLyogcmV0cmlldmUgYmlnIG5hbWUgZm9yIGZ1cnRoZXIgdXNlLiAqLworICBpZiAoY3JlY3AtPmZsYWdzICYgRl9CSUdOQU1FKQorICAgIHsKKyAgICAgIGNyZWNwLT5uYW1lLmJuYW1lLT5uZXh0ID0gYmlnX2ZyZWU7CisgICAgICBiaWdfZnJlZSA9IGNyZWNwLT5uYW1lLmJuYW1lOworICAgICAgY3JlY3AtPmZsYWdzICY9IH5GX0JJR05BTUU7CisgICAgfQorfSAgICAKKworLyogaW5zZXJ0IGEgbmV3IGNhY2hlIGVudHJ5IGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0ICh5b3VuZ2VzdCBlbnRyeSkgKi8KK3N0YXRpYyB2b2lkIGNhY2hlX2xpbmsoc3RydWN0IGNyZWMgKmNyZWNwKQoreworICBpZiAoY2FjaGVfaGVhZCkgLyogY2hlY2sgbmVlZGVkIGZvciBpbml0IGNvZGUgKi8KKyAgICBjYWNoZV9oZWFkLT5wcmV2ID0gY3JlY3A7CisgIGNyZWNwLT5uZXh0ID0gY2FjaGVfaGVhZDsKKyAgY3JlY3AtPnByZXYgPSBOVUxMOworICBjYWNoZV9oZWFkID0gY3JlY3A7CisgIGlmICghY2FjaGVfdGFpbCkKKyAgICBjYWNoZV90YWlsID0gY3JlY3A7Cit9CisKKy8qIHJlbW92ZSBhbiBhcmJpdHJhcnkgY2FjaGUgZW50cnkgZm9yIHByb21vdGlvbiAqLyAKK3N0YXRpYyB2b2lkIGNhY2hlX3VubGluayAoc3RydWN0IGNyZWMgKmNyZWNwKQoreworICBpZiAoY3JlY3AtPnByZXYpCisgICAgY3JlY3AtPnByZXYtPm5leHQgPSBjcmVjcC0+bmV4dDsKKyAgZWxzZQorICAgIGNhY2hlX2hlYWQgPSBjcmVjcC0+bmV4dDsKKworICBpZiAoY3JlY3AtPm5leHQpCisgICAgY3JlY3AtPm5leHQtPnByZXYgPSBjcmVjcC0+cHJldjsKKyAgZWxzZQorICAgIGNhY2hlX3RhaWwgPSBjcmVjcC0+cHJldjsKK30KKworY2hhciAqY2FjaGVfZ2V0X25hbWUoc3RydWN0IGNyZWMgKmNyZWNwKQoreworICBpZiAoY3JlY3AtPmZsYWdzICYgRl9CSUdOQU1FKQorICAgIHJldHVybiBjcmVjcC0+bmFtZS5ibmFtZS0+bmFtZTsKKyAgZWxzZSBpZiAoY3JlY3AtPmZsYWdzICYgKEZfREhDUCB8IEZfQ09ORklHKSkgCisgICAgcmV0dXJuIGNyZWNwLT5uYW1lLm5hbWVwOworICAKKyAgcmV0dXJuIGNyZWNwLT5uYW1lLnNuYW1lOworfQorCitzdGF0aWMgaW50IGlzX291dGRhdGVkX2NuYW1lX3BvaW50ZXIoc3RydWN0IGNyZWMgKmNyZWNwKQoreworICBpZiAoIShjcmVjcC0+ZmxhZ3MgJiBGX0NOQU1FKSkKKyAgICByZXR1cm4gMDsKKyAgCisgIGlmIChjcmVjcC0+YWRkci5jbmFtZS5jYWNoZSAmJiBjcmVjcC0+YWRkci5jbmFtZS51aWQgPT0gY3JlY3AtPmFkZHIuY25hbWUuY2FjaGUtPnVpZCkKKyAgICByZXR1cm4gMDsKKyAgCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGlzX2V4cGlyZWQodGltZV90IG5vdywgc3RydWN0IGNyZWMgKmNyZWNwKQoreworICBpZiAoY3JlY3AtPmZsYWdzICYgRl9JTU1PUlRBTCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoZGlmZnRpbWUobm93LCBjcmVjcC0+dHRkKSA8IDApCisgICAgcmV0dXJuIDA7CisgIAorICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjYWNoZV9zY2FuX2ZyZWUoY2hhciAqbmFtZSwgc3RydWN0IGFsbF9hZGRyICphZGRyLCB0aW1lX3Qgbm93LCB1bnNpZ25lZCBzaG9ydCBmbGFncykKK3sKKyAgLyogU2NhbiBhbmQgcmVtb3ZlIG9sZCBlbnRyaWVzLgorICAgICBJZiAoZmxhZ3MgJiBGX0ZPUldBUkQpIHRoZW4gcmVtb3ZlIGFueSBmb3J3YXJkIGVudHJpZXMgZm9yIG5hbWUgYW5kIGFueSBleHBpcmVkCisgICAgIGVudHJpZXMgYnV0IG9ubHkgaW4gdGhlIHNhbWUgaGFzaCBidWNrZXQgYXMgbmFtZS4KKyAgICAgSWYgKGZsYWdzICYgRl9SRVZFUlNFKSB0aGVuIHJlbW92ZSBhbnkgcmV2ZXJzZSBlbnRyaWVzIGZvciBhZGRyIGFuZCBhbnkgZXhwaXJlZAorICAgICBlbnRyaWVzIGluIHRoZSB3aG9sZSBjYWNoZS4KKyAgICAgSWYgKGZsYWdzID09IDApIHJlbW92ZSBhbnkgZXhwaXJlZCBlbnRyaWVzIGluIHRoZSB3aG9sZSBjYWNoZS4gCisKKyAgICAgSW4gdGhlIGZsYWdzICYgRl9GT1JXQVJEIGNhc2UsIHRoZSByZXR1cm4gY29kZSBpcyB2YWxpZCwgYW5kIHJldHVybnMgemVybyBpZiB0aGUKKyAgICAgbmFtZSBleGlzdHMgaW4gdGhlIGNhY2hlIGFzIGEgSE9TVFMgb3IgREhDUCBlbnRyeSAodGhlc2UgYXJlIG5ldmVyIGRlbGV0ZWQpCisKKyAgICAgV2UgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCBoYXNoIGNoYWlucyBoYXZlIHN0dWZmIGluIHRoZSBvcmRlciA8cmV2ZXJzZT4sPG90aGVyPiw8aW1tb3J0YWw+CisgICAgIHNvIHRoYXQgd2hlbiB3ZSBoaXQgYW4gZW50cnkgd2hpY2ggaXNuJ3QgcmV2ZXJzZSBhbmQgaXMgaW1tb3J0YWwsIHdlJ3JlIGRvbmUuICovCisgCisgIHN0cnVjdCBjcmVjICpjcmVjcCwgKip1cDsKKyAgCisgIGlmIChmbGFncyAmIEZfRk9SV0FSRCkKKyAgICB7CisgICAgICBmb3IgKHVwID0gaGFzaF9idWNrZXQobmFtZSksIGNyZWNwID0gKnVwOyBjcmVjcDsgY3JlY3AgPSBjcmVjcC0+aGFzaF9uZXh0KQorCWlmIChpc19leHBpcmVkKG5vdywgY3JlY3ApIHx8IGlzX291dGRhdGVkX2NuYW1lX3BvaW50ZXIoY3JlY3ApKQorCSAgeyAKKwkgICAgKnVwID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkgICAgaWYgKCEoY3JlY3AtPmZsYWdzICYgKEZfSE9TVFMgfCBGX0RIQ1ApKSkKKwkgICAgICB7CisJCWNhY2hlX3VubGluayhjcmVjcCk7CisJCWNhY2hlX2ZyZWUoY3JlY3ApOworCSAgICAgIH0KKwkgIH0gCisJZWxzZSBpZiAoKGNyZWNwLT5mbGFncyAmIEZfRk9SV0FSRCkgJiYgCisJCSAoKGZsYWdzICYgY3JlY3AtPmZsYWdzICYgKEZfSVBWNCB8IEZfSVBWNikpIHx8ICgoY3JlY3AtPmZsYWdzIHwgZmxhZ3MpICYgRl9DTkFNRSkpICYmCisJCSBob3N0bmFtZV9pc2VxdWFsKGNhY2hlX2dldF9uYW1lKGNyZWNwKSwgbmFtZSkpCisJICB7CisJICAgIGlmIChjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCkpCisJICAgICAgcmV0dXJuIDA7CisJICAgICp1cCA9IGNyZWNwLT5oYXNoX25leHQ7CisJICAgIGNhY2hlX3VubGluayhjcmVjcCk7CisJICAgIGNhY2hlX2ZyZWUoY3JlY3ApOworCSAgfQorCWVsc2UKKwkgIHVwID0gJmNyZWNwLT5oYXNoX25leHQ7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaW50IGk7CisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBpbnQgYWRkcmxlbiA9IChmbGFncyAmIEZfSVBWNikgPyBJTjZBRERSU1ogOiBJTkFERFJTWjsKKyNlbHNlCisgICAgICBpbnQgYWRkcmxlbiA9IElOQUREUlNaOworI2VuZGlmIAorICAgICAgZm9yIChpID0gMDsgaSA8IGhhc2hfc2l6ZTsgaSsrKQorCWZvciAoY3JlY3AgPSBoYXNoX3RhYmxlW2ldLCB1cCA9ICZoYXNoX3RhYmxlW2ldOyAKKwkgICAgIGNyZWNwICYmICgoY3JlY3AtPmZsYWdzICYgRl9SRVZFUlNFKSB8fCAhKGNyZWNwLT5mbGFncyAmIEZfSU1NT1JUQUwpKTsKKwkgICAgIGNyZWNwID0gY3JlY3AtPmhhc2hfbmV4dCkKKwkgIGlmIChpc19leHBpcmVkKG5vdywgY3JlY3ApKQorCSAgICB7CisJICAgICAgKnVwID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkgICAgICBpZiAoIShjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCkpKQorCQl7IAorCQkgIGNhY2hlX3VubGluayhjcmVjcCk7CisJCSAgY2FjaGVfZnJlZShjcmVjcCk7CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoIShjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCkpICYmCisJCSAgIChmbGFncyAmIGNyZWNwLT5mbGFncyAmIEZfUkVWRVJTRSkgJiYgCisJCSAgIChmbGFncyAmIGNyZWNwLT5mbGFncyAmIChGX0lQVjQgfCBGX0lQVjYpKSAmJgorCQkgICBtZW1jbXAoJmNyZWNwLT5hZGRyLmFkZHIsIGFkZHIsIGFkZHJsZW4pID09IDApCisJICAgIHsKKwkgICAgICAqdXAgPSBjcmVjcC0+aGFzaF9uZXh0OworCSAgICAgIGNhY2hlX3VubGluayhjcmVjcCk7CisJICAgICAgY2FjaGVfZnJlZShjcmVjcCk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgdXAgPSAmY3JlY3AtPmhhc2hfbmV4dDsKKyAgICB9CisgIAorICByZXR1cm4gMTsKK30KKworLyogTm90ZTogVGhlIG5vcm1hbCBjYWxsaW5nIHNlcXVlbmNlIGlzCisgICBjYWNoZV9zdGFydF9pbnNlcnQKKyAgIGNhY2hlX2luc2VydCAqIG4KKyAgIGNhY2hlX2VuZF9pbnNlcnQKKworICAgYnV0IGFuIGFib3J0IGNhbiBjYXVzZSB0aGUgY2FjaGVfZW5kX2luc2VydCB0byBiZSBtaXNzZWQgCisgICBpbiB3aGljaCBjYW4gdGhlIG5leHQgY2FjaGVfc3RhcnRfaW5zZXJ0IGNsZWFucyB0aGluZ3MgdXAuICovCisKK3ZvaWQgY2FjaGVfc3RhcnRfaW5zZXJ0KHZvaWQpCit7CisgIC8qIEZyZWUgYW55IGVudHJpZXMgd2hpY2ggZGlkbid0IGdldCBjb21taXR0ZWQgZHVyaW5nIHRoZSBsYXN0CisgICAgIGluc2VydCBkdWUgdG8gZXJyb3IuCisgICovCisgIHdoaWxlIChuZXdfY2hhaW4pCisgICAgeworICAgICAgc3RydWN0IGNyZWMgKnRtcCA9IG5ld19jaGFpbi0+bmV4dDsKKyAgICAgIGNhY2hlX2ZyZWUobmV3X2NoYWluKTsKKyAgICAgIG5ld19jaGFpbiA9IHRtcDsKKyAgICB9CisgIG5ld19jaGFpbiA9IE5VTEw7CisgIGluc2VydF9lcnJvciA9IDA7Cit9CisgCitzdHJ1Y3QgY3JlYyAqY2FjaGVfaW5zZXJ0KGNoYXIgKm5hbWUsIHN0cnVjdCBhbGxfYWRkciAqYWRkciwgCisJCQkgIHRpbWVfdCBub3csICB1bnNpZ25lZCBsb25nIHR0bCwgdW5zaWduZWQgc2hvcnQgZmxhZ3MpCit7CisgIHN0cnVjdCBjcmVjICpuZXc7CisgIHVuaW9uIGJpZ25hbWUgKmJpZ19uYW1lID0gTlVMTDsKKyAgaW50IGZyZWVkX2FsbCA9IGZsYWdzICYgRl9SRVZFUlNFOworICBpbnQgZnJlZV9hdmFpbCA9IDA7CisKKyAgbG9nX3F1ZXJ5KGZsYWdzIHwgRl9VUFNUUkVBTSwgbmFtZSwgYWRkciwgTlVMTCk7CisKKyAgLyogQ09ORklHIGJpdCBtZWFucyBzb21ldGhpbmcgZWxzZSB3aGVuIHN0b3JlZCBpbiBjYWNoZSBlbnRyaWVzICovCisgIGZsYWdzICY9IH5GX0NPTkZJRzsKKworICAvKiBpZiBwcmV2aW91cyBpbnNlcnRpb24gZmFpbGVkIGdpdmUgdXAgbm93LiAqLworICBpZiAoaW5zZXJ0X2Vycm9yKQorICAgIHJldHVybiBOVUxMOworCisgIC8qIEZpcnN0IHJlbW92ZSBhbnkgZXhwaXJlZCBlbnRyaWVzIGFuZCBlbnRyaWVzIGZvciB0aGUgbmFtZS9hZGRyZXNzIHdlCisgICAgIGFyZSBjdXJyZW50bHkgaW5zZXJ0aW5nLiBGYWlsIGlzIHdlIGF0dGVtcHQgdG8gZGVsZXRlIGEgbmFtZSBmcm9tCisgICAgIC9ldGMvaG9zdHMgb3IgREhDUC4gKi8KKyAgaWYgKCFjYWNoZV9zY2FuX2ZyZWUobmFtZSwgYWRkciwgbm93LCBmbGFncykpCisgICAgeworICAgICAgaW5zZXJ0X2Vycm9yID0gMTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgCisgIC8qIE5vdyBnZXQgYSBjYWNoZSBlbnRyeSBmcm9tIHRoZSBlbmQgb2YgdGhlIExSVSBsaXN0ICovCisgIHdoaWxlICgxKSB7CisgICAgaWYgKCEobmV3ID0gY2FjaGVfdGFpbCkpIC8qIG5vIGVudHJpZXMgbGVmdCAtIGNhY2hlIGlzIHRvbyBzbWFsbCwgYmFpbCAqLworICAgICAgeworCWluc2VydF9lcnJvciA9IDE7CisJcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgCisgICAgLyogRW5kIG9mIExSVSBsaXN0IGlzIHN0aWxsIGluIHVzZTogaWYgd2UgZGlkbid0IHNjYW4gYWxsIHRoZSBoYXNoCisgICAgICAgY2hhaW5zIGZvciBleHBpcmVkIGVudHJpZXMgZG8gdGhhdCBub3cuIElmIHdlIGFscmVhZHkgdHJpZWQgdGhhdAorICAgICAgIHRoZW4gaXQncyB0aW1lIHRvIHN0YXJ0IHNwaWxsaW5nIHRoaW5ncy4gKi8KKyAgICAKKyAgICBpZiAobmV3LT5mbGFncyAmIChGX0ZPUldBUkQgfCBGX1JFVkVSU0UpKQorICAgICAgeyAKKwkvKiBJZiBmcmVlX2F2YWlsIHNldCwgd2UgYmVsaWV2ZSB0aGF0IGFuIGVudHJ5IGhhcyBiZWVuIGZyZWVkLgorCSAgIEJ1Z3MgaGF2ZSBiZWVuIGtub3duIHRvIG1ha2UgdGhpcyBub3QgdHJ1ZSwgcmVzdWx0aW5nIGluCisJICAgYSB0aWdodCBsb29wIGhlcmUuIElmIHRoYXQgaGFwcGVucywgYWJhbmRvbiB0aGUKKwkgICBpbnNlcnQuIE9uY2UgaW4gdGhpcyBzdGF0ZSwgYWxsIGluc2VydHMgd2lsbCBwcm9iYWJseSBmYWlsLiAqLworCWlmIChmcmVlX2F2YWlsKQorCSAgeworCSAgICBpbnNlcnRfZXJyb3IgPSAxOworCSAgICByZXR1cm4gTlVMTDsKKwkgIH0KKwkJCisJaWYgKGZyZWVkX2FsbCkKKwkgIHsKKwkgICAgZnJlZV9hdmFpbCA9IDE7IC8qIE11c3QgYmUgZnJlZSBzcGFjZSBub3cuICovCisJICAgIGNhY2hlX3NjYW5fZnJlZShjYWNoZV9nZXRfbmFtZShuZXcpLCAmbmV3LT5hZGRyLmFkZHIsIG5vdywgbmV3LT5mbGFncyk7CisJICAgIGNhY2hlX2xpdmVfZnJlZWQrKzsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGNhY2hlX3NjYW5fZnJlZShOVUxMLCBOVUxMLCBub3csIDApOworCSAgICBmcmVlZF9hbGwgPSAxOworCSAgfQorCWNvbnRpbnVlOworICAgICAgfQorIAorICAgIC8qIENoZWNrIGlmIHdlIG5lZWQgdG8gYW5kIGNhbiBhbGxvY2F0ZSBleHRyYSBtZW1vcnkgZm9yIGEgbG9uZyBuYW1lLgorICAgICAgIElmIHRoYXQgZmFpbHMsIGdpdmUgdXAgbm93LiAqLworICAgIGlmIChuYW1lICYmIChzdHJsZW4obmFtZSkgPiBTTUFMTEROQU1FLTEpKQorICAgICAgeworCWlmIChiaWdfZnJlZSkKKwkgIHsgCisJICAgIGJpZ19uYW1lID0gYmlnX2ZyZWU7CisJICAgIGJpZ19mcmVlID0gYmlnX2ZyZWUtPm5leHQ7CisJICB9CisJZWxzZSBpZiAoIWJpZ25hbWVzX2xlZnQgfHwKKwkJICEoYmlnX25hbWUgPSAodW5pb24gYmlnbmFtZSAqKXdoaW5lX21hbGxvYyhzaXplb2YodW5pb24gYmlnbmFtZSkpKSkKKwkgIHsKKwkgICAgaW5zZXJ0X2Vycm9yID0gMTsKKwkgICAgcmV0dXJuIE5VTEw7CisJICB9CisJZWxzZQorCSAgYmlnbmFtZXNfbGVmdC0tOworCQorICAgICAgfQorCisgICAgLyogR290IHRoZSByZXN0OiBmaW5hbGx5IGdyYWIgZW50cnkuICovCisgICAgY2FjaGVfdW5saW5rKG5ldyk7CisgICAgYnJlYWs7CisgIH0KKyAgCisgIG5ldy0+ZmxhZ3MgPSBmbGFnczsKKyAgaWYgKGJpZ19uYW1lKQorICAgIHsKKyAgICAgIG5ldy0+bmFtZS5ibmFtZSA9IGJpZ19uYW1lOworICAgICAgbmV3LT5mbGFncyB8PSBGX0JJR05BTUU7CisgICAgfQorCisgIGlmIChuYW1lKQorICAgIHN0cmNweShjYWNoZV9nZXRfbmFtZShuZXcpLCBuYW1lKTsKKyAgZWxzZQorICAgICpjYWNoZV9nZXRfbmFtZShuZXcpID0gMDsKKworICBpZiAoYWRkcikKKyAgICBuZXctPmFkZHIuYWRkciA9ICphZGRyOworICBlbHNlCisgICAgbmV3LT5hZGRyLmNuYW1lLmNhY2hlID0gTlVMTDsKKyAgCisgIG5ldy0+dHRkID0gbm93ICsgKHRpbWVfdCl0dGw7CisgIG5ldy0+bmV4dCA9IG5ld19jaGFpbjsKKyAgbmV3X2NoYWluID0gbmV3OworCisgIHJldHVybiBuZXc7Cit9CisKKy8qIGFmdGVyIGVuZCBvZiBpbnNlcnRpb24sIGNvbW1pdCB0aGUgbmV3IGVudHJpZXMgKi8KK3ZvaWQgY2FjaGVfZW5kX2luc2VydCh2b2lkKQoreworICBpZiAoaW5zZXJ0X2Vycm9yKQorICAgIHJldHVybjsKKyAgCisgIHdoaWxlIChuZXdfY2hhaW4pCisgICAgeyAKKyAgICAgIHN0cnVjdCBjcmVjICp0bXAgPSBuZXdfY2hhaW4tPm5leHQ7CisgICAgICAvKiBkcm9wIENOQU1FcyB3aGljaCBkaWRuJ3QgZmluZCBhIHRhcmdldC4gKi8KKyAgICAgIGlmIChpc19vdXRkYXRlZF9jbmFtZV9wb2ludGVyKG5ld19jaGFpbikpCisJY2FjaGVfZnJlZShuZXdfY2hhaW4pOworICAgICAgZWxzZQorCXsKKwkgIGNhY2hlX2hhc2gobmV3X2NoYWluKTsKKwkgIGNhY2hlX2xpbmsobmV3X2NoYWluKTsKKwkgIGNhY2hlX2luc2VydGVkKys7CisJfQorICAgICAgbmV3X2NoYWluID0gdG1wOworICAgIH0KKyAgbmV3X2NoYWluID0gTlVMTDsKK30KKworc3RydWN0IGNyZWMgKmNhY2hlX2ZpbmRfYnlfbmFtZShzdHJ1Y3QgY3JlYyAqY3JlY3AsIGNoYXIgKm5hbWUsIHRpbWVfdCBub3csIHVuc2lnbmVkIHNob3J0IHByb3QpCit7CisgIHN0cnVjdCBjcmVjICphbnM7CisKKyAgaWYgKGNyZWNwKSAvKiBpdGVyYXRpbmcgKi8KKyAgICBhbnMgPSBjcmVjcC0+bmV4dDsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIGZpcnN0IHNlYXJjaCwgbG9vayBmb3IgcmVsZXZhbnQgZW50cmllcyBhbmQgcHVzaCB0byB0b3Agb2YgbGlzdAorCSBhbHNvIGZyZWUgYW55dGhpbmcgd2hpY2ggaGFzIGV4cGlyZWQgKi8KKyAgICAgIHN0cnVjdCBjcmVjICpuZXh0LCAqKnVwLCAqKmluc2VydCA9IE5VTEwsICoqY2hhaW5wID0gJmFuczsKKyAgICAgIGludCBpbnNfZmxhZ3MgPSAwOworICAgICAgCisgICAgICBmb3IgKHVwID0gaGFzaF9idWNrZXQobmFtZSksIGNyZWNwID0gKnVwOyBjcmVjcDsgY3JlY3AgPSBuZXh0KQorCXsKKwkgIG5leHQgPSBjcmVjcC0+aGFzaF9uZXh0OworCSAgCisJICBpZiAoIWlzX2V4cGlyZWQobm93LCBjcmVjcCkgJiYgIWlzX291dGRhdGVkX2NuYW1lX3BvaW50ZXIoY3JlY3ApKQorCSAgICB7CisJICAgICAgaWYgKChjcmVjcC0+ZmxhZ3MgJiBGX0ZPUldBUkQpICYmIAorCQkgIChjcmVjcC0+ZmxhZ3MgJiBwcm90KSAmJgorCQkgIGhvc3RuYW1lX2lzZXF1YWwoY2FjaGVfZ2V0X25hbWUoY3JlY3ApLCBuYW1lKSkKKwkJeworCQkgIGlmIChjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCkpCisJCSAgICB7CisJCSAgICAgICpjaGFpbnAgPSBjcmVjcDsKKwkJICAgICAgY2hhaW5wID0gJmNyZWNwLT5uZXh0OworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgY2FjaGVfdW5saW5rKGNyZWNwKTsKKwkJICAgICAgY2FjaGVfbGluayhjcmVjcCk7CisJCSAgICB9CisJICAgICAgCSAgICAgIAorCQkgIC8qIE1vdmUgYWxsIGJ1dCB0aGUgZmlyc3QgZW50cnkgdXAgdGhlIGhhc2ggY2hhaW4KKwkJICAgICB0aGlzIGltcGxlbWVudHMgcm91bmQtcm9iaW4uIAorCQkgICAgIE1ha2Ugc3VyZSB0aGF0IHJlLW9yZGVyaW5nIGRvZXNuJ3QgYnJlYWsgdGhlIGhhc2gtY2hhaW4KKwkJICAgICBvcmRlciBpbnZhcmlhbnRzLiAKKwkJICAqLworCQkgIGlmIChpbnNlcnQgJiYgKGNyZWNwLT5mbGFncyAmIChGX1JFVkVSU0UgfCBGX0lNTU9SVEFMKSkgPT0gaW5zX2ZsYWdzKQorCQkgICAgeworCQkgICAgICAqdXAgPSBjcmVjcC0+aGFzaF9uZXh0OworCQkgICAgICBjcmVjcC0+aGFzaF9uZXh0ID0gKmluc2VydDsKKwkJICAgICAgKmluc2VydCA9IGNyZWNwOworCQkgICAgICBpbnNlcnQgPSAmY3JlY3AtPmhhc2hfbmV4dDsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGlmICghaW5zZXJ0KQorCQkJeworCQkJICBpbnNlcnQgPSB1cDsKKwkJCSAgaW5zX2ZsYWdzID0gY3JlY3AtPmZsYWdzICYgKEZfUkVWRVJTRSB8IEZfSU1NT1JUQUwpOworCQkJfQorCQkgICAgICB1cCA9ICZjcmVjcC0+aGFzaF9uZXh0OyAKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UKKwkJLyogY2FzZSA6IG5vdCBleHBpcmVkLCBpbmNvcnJlY3QgZW50cnkuICovCisJCXVwID0gJmNyZWNwLT5oYXNoX25leHQ7IAorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBleHBpcmVkIGVudHJ5LCBmcmVlIGl0ICovCisJICAgICAgKnVwID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkgICAgICBpZiAoIShjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCkpKQorCQl7IAorCQkgIGNhY2hlX3VubGluayhjcmVjcCk7CisJCSAgY2FjaGVfZnJlZShjcmVjcCk7CisJCX0KKwkgICAgfQorCX0KKwkgIAorICAgICAgKmNoYWlucCA9IGNhY2hlX2hlYWQ7CisgICAgfQorCisgIGlmIChhbnMgJiYgCisgICAgICAoYW5zLT5mbGFncyAmIEZfRk9SV0FSRCkgJiYKKyAgICAgIChhbnMtPmZsYWdzICYgcHJvdCkgJiYKKyAgICAgIGhvc3RuYW1lX2lzZXF1YWwoY2FjaGVfZ2V0X25hbWUoYW5zKSwgbmFtZSkpCisgICAgcmV0dXJuIGFuczsKKyAgCisgIHJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgY3JlYyAqY2FjaGVfZmluZF9ieV9hZGRyKHN0cnVjdCBjcmVjICpjcmVjcCwgc3RydWN0IGFsbF9hZGRyICphZGRyLCAKKwkJCQl0aW1lX3Qgbm93LCB1bnNpZ25lZCBzaG9ydCBwcm90KQoreworICBzdHJ1Y3QgY3JlYyAqYW5zOworI2lmZGVmIEhBVkVfSVBWNgorICBpbnQgYWRkcmxlbiA9IChwcm90ID09IEZfSVBWNikgPyBJTjZBRERSU1ogOiBJTkFERFJTWjsKKyNlbHNlCisgIGludCBhZGRybGVuID0gSU5BRERSU1o7CisjZW5kaWYKKyAgCisgIGlmIChjcmVjcCkgLyogaXRlcmF0aW5nICovCisgICAgYW5zID0gY3JlY3AtPm5leHQ7CisgIGVsc2UKKyAgICB7ICAKKyAgICAgIC8qIGZpcnN0IHNlYXJjaCwgbG9vayBmb3IgcmVsZXZhbnQgZW50cmllcyBhbmQgcHVzaCB0byB0b3Agb2YgbGlzdAorCSBhbHNvIGZyZWUgYW55dGhpbmcgd2hpY2ggaGFzIGV4cGlyZWQuIEFsbCB0aGUgcmV2ZXJzZSBlbnRyaWVzIGFyZSBhdCB0aGUKKwkgc3RhcnQgb2YgdGhlIGhhc2ggY2hhaW4sIHNvIHdlIGNhbiBnaXZlIHVwIHdoZW4gd2UgZmluZCB0aGUgZmlyc3QgCisJIG5vbi1SRVZFUlNFIG9uZS4gICovCisgICAgICAgaW50IGk7CisgICAgICAgc3RydWN0IGNyZWMgKip1cCwgKipjaGFpbnAgPSAmYW5zOworICAgICAgIAorICAgICAgIGZvciAoaT0wOyBpPGhhc2hfc2l6ZTsgaSsrKQorCSBmb3IgKGNyZWNwID0gaGFzaF90YWJsZVtpXSwgdXAgPSAmaGFzaF90YWJsZVtpXTsgCisJICAgICAgY3JlY3AgJiYgKGNyZWNwLT5mbGFncyAmIEZfUkVWRVJTRSk7CisJICAgICAgY3JlY3AgPSBjcmVjcC0+aGFzaF9uZXh0KQorCSAgIGlmICghaXNfZXhwaXJlZChub3csIGNyZWNwKSkKKwkgICAgIHsgICAgICAKKwkgICAgICAgaWYgKChjcmVjcC0+ZmxhZ3MgJiBwcm90KSAmJgorCQkgICBtZW1jbXAoJmNyZWNwLT5hZGRyLmFkZHIsIGFkZHIsIGFkZHJsZW4pID09IDApCisJCSB7CSAgICAKKwkJICAgaWYgKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQKSkKKwkJICAgICB7CisJCSAgICAgICAqY2hhaW5wID0gY3JlY3A7CisJCSAgICAgICBjaGFpbnAgPSAmY3JlY3AtPm5leHQ7CisJCSAgICAgfQorCQkgICBlbHNlCisJCSAgICAgeworCQkgICAgICAgY2FjaGVfdW5saW5rKGNyZWNwKTsKKwkJICAgICAgIGNhY2hlX2xpbmsoY3JlY3ApOworCQkgICAgIH0KKwkJIH0KKwkgICAgICAgdXAgPSAmY3JlY3AtPmhhc2hfbmV4dDsKKwkgICAgIH0KKwkgICBlbHNlCisJICAgICB7CisJICAgICAgICp1cCA9IGNyZWNwLT5oYXNoX25leHQ7CisJICAgICAgIGlmICghKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQKSkpCisJCSB7CisJCSAgIGNhY2hlX3VubGluayhjcmVjcCk7CisJCSAgIGNhY2hlX2ZyZWUoY3JlY3ApOworCQkgfQorCSAgICAgfQorICAgICAgIAorICAgICAgICpjaGFpbnAgPSBjYWNoZV9oZWFkOworICAgIH0KKyAgCisgIGlmIChhbnMgJiYgCisgICAgICAoYW5zLT5mbGFncyAmIEZfUkVWRVJTRSkgJiYKKyAgICAgIChhbnMtPmZsYWdzICYgcHJvdCkgJiYKKyAgICAgIG1lbWNtcCgmYW5zLT5hZGRyLmFkZHIsIGFkZHIsIGFkZHJsZW4pID09IDApCisgICAgcmV0dXJuIGFuczsKKyAgCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBhZGRfaG9zdHNfZW50cnkoc3RydWN0IGNyZWMgKmNhY2hlLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIsIGludCBhZGRybGVuLCAKKwkJCSAgICB1bnNpZ25lZCBzaG9ydCBmbGFncywgaW50IGluZGV4LCBpbnQgYWRkcl9kdXApCit7CisgIHN0cnVjdCBjcmVjICpsb29rdXAgPSBjYWNoZV9maW5kX2J5X25hbWUoTlVMTCwgY2FjaGUtPm5hbWUuc25hbWUsIDAsIGZsYWdzICYgKEZfSVBWNCB8IEZfSVBWNikpOworICBpbnQgaSwgbmFtZWV4aXN0cyA9IDA7CisgIHN0cnVjdCBjbmFtZSAqYTsKKworICAvKiBSZW1vdmUgZHVwbGljYXRlcyBpbiBob3N0cyBmaWxlcy4gKi8KKyAgaWYgKGxvb2t1cCAmJiAobG9va3VwLT5mbGFncyAmIEZfSE9TVFMpKQorICAgIHsKKyAgICAgIG5hbWVleGlzdHMgPSAxOworICAgICAgaWYgKG1lbWNtcCgmbG9va3VwLT5hZGRyLmFkZHIsIGFkZHIsIGFkZHJsZW4pID09IDApCisJeworCSAgZnJlZShjYWNoZSk7CisJICByZXR1cm47CisJfQorICAgIH0KKyAgCisgIC8qIEVuc3VyZSB0aGVyZSBpcyBvbmx5IG9uZSBhZGRyZXNzIC0+IG5hbWUgbWFwcGluZyAoZmlyc3Qgb25lIHRydW1wcykgCisgICAgIFdlIGRvIHRoaXMgYnkgc3RlYW0gaGVyZSwgZmlyc3Qgd2Ugc2VlIGlmIHRoZSBhZGRyZXNzIGlzIHRoZSBzYW1lIGFzCisgICAgIHRoZSBsYXN0IG9uZSB3ZSBzYXcsIHdoaWNoIGVsaW1pbmF0ZXMgbW9zdCBpbiB0aGUgY2FzZSBvZiBhbiBhZC1ibG9jayAKKyAgICAgZmlsZSB3aXRoIHRob3VzYW5kcyBvZiBlbnRyaWVzIGZvciB0aGUgc2FtZSBhZGRyZXNzLgorICAgICBUaGVuIHdlIHNlYXJjaCBhbmQgYmFpbCBhdCB0aGUgZmlyc3QgbWF0Y2hpbmcgYWRkcmVzcyB0aGF0IGNhbWUgZnJvbQorICAgICBhIEhPU1RTIGZpbGUuIFNpbmNlIHRoZSBmaXJzdCBob3N0IGVudHJ5IGdldHMgcmV2ZXJzZSwgd2Uga25vdyAKKyAgICAgdGhlbiB0aGF0IGl0IG11c3QgZXhpc3Qgd2l0aG91dCBzZWFyY2hpbmcgZXhoYXVzdGl2ZWx5IGZvciBpdC4gKi8KKyAgCisgIGlmIChhZGRyX2R1cCkKKyAgICBmbGFncyAmPSB+Rl9SRVZFUlNFOworICBlbHNlCisgICAgZm9yIChpPTA7IGk8aGFzaF9zaXplOyBpKyspCisgICAgICB7CisJZm9yIChsb29rdXAgPSBoYXNoX3RhYmxlW2ldOyBsb29rdXA7IGxvb2t1cCA9IGxvb2t1cC0+aGFzaF9uZXh0KQorCSAgaWYgKChsb29rdXAtPmZsYWdzICYgRl9IT1NUUykgJiYgCisJICAgICAgKGxvb2t1cC0+ZmxhZ3MgJiBmbGFncyAmIChGX0lQVjQgfCBGX0lQVjYpKSAmJgorCSAgICAgIG1lbWNtcCgmbG9va3VwLT5hZGRyLmFkZHIsIGFkZHIsIGFkZHJsZW4pID09IDApCisJICAgIHsKKwkgICAgICBmbGFncyAmPSB+Rl9SRVZFUlNFOworCSAgICAgIGJyZWFrOworCSAgICB9CisJaWYgKGxvb2t1cCkKKwkgIGJyZWFrOworICAgICAgfQorICAKKyAgY2FjaGUtPmZsYWdzID0gZmxhZ3M7CisgIGNhY2hlLT51aWQgPSBpbmRleDsKKyAgbWVtY3B5KCZjYWNoZS0+YWRkci5hZGRyLCBhZGRyLCBhZGRybGVuKTsKKyAgY2FjaGVfaGFzaChjYWNoZSk7CisgIAorICAvKiBkb24ndCBuZWVkIHRvIGRvIGFsaWFzIHN0dWZmIGZvciBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgYWRkcmVzc2VzLiAqLworICBpZiAoIW5hbWVleGlzdHMpCisgICAgZm9yIChhID0gZGFlbW9uLT5jbmFtZXM7IGE7IGEgPSBhLT5uZXh0KQorICAgICAgaWYgKGhvc3RuYW1lX2lzZXF1YWwoY2FjaGUtPm5hbWUuc25hbWUsIGEtPnRhcmdldCkgJiYKKwkgIChsb29rdXAgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcmVjKSkpKQorCXsKKwkgIGxvb2t1cC0+ZmxhZ3MgPSBGX0ZPUldBUkQgfCBGX0lNTU9SVEFMIHwgRl9DT05GSUcgfCBGX0hPU1RTIHwgRl9DTkFNRTsKKwkgIGxvb2t1cC0+bmFtZS5uYW1lcCA9IGEtPmFsaWFzOworCSAgbG9va3VwLT5hZGRyLmNuYW1lLmNhY2hlID0gY2FjaGU7CisJICBsb29rdXAtPmFkZHIuY25hbWUudWlkID0gaW5kZXg7CisJICBjYWNoZV9oYXNoKGxvb2t1cCk7CisJfQorfQorCitzdGF0aWMgaW50IGVhdHNwYWNlKEZJTEUgKmYpCit7CisgIGludCBjLCBubCA9IDA7CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKChjID0gZ2V0YyhmKSkgPT0gJyMnKQorCXdoaWxlIChjICE9ICdcbicgJiYgYyAhPSBFT0YpCisJICBjID0gZ2V0YyhmKTsKKyAgICAgIAorICAgICAgaWYgKGMgPT0gRU9GKQorCXJldHVybiAxOworCisgICAgICBpZiAoIWlzc3BhY2UoYykpCisJeworCSAgdW5nZXRjKGMsIGYpOworCSAgcmV0dXJuIG5sOworCX0KKworICAgICAgaWYgKGMgPT0gJ1xuJykKKwlubCA9IDE7CisgICAgfQorfQorCSAKK3N0YXRpYyBpbnQgZ2V0dG9rKEZJTEUgKmYsIGNoYXIgKnRva2VuKQoreworICBpbnQgYywgY291bnQgPSAwOworIAorICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoKGMgPSBnZXRjKGYpKSA9PSBFT0YpCisJcmV0dXJuIChjb3VudCA9PSAwKSA/IEVPRiA6IDE7CisKKyAgICAgIGlmIChpc3NwYWNlKGMpIHx8IGMgPT0gJyMnKQorCXsKKwkgIHVuZ2V0YyhjLCBmKTsKKwkgIHJldHVybiBlYXRzcGFjZShmKTsKKwl9CisgICAgICAKKyAgICAgIGlmIChjb3VudCA8IChNQVhETkFNRSAtIDEpKQorCXsKKwkgIHRva2VuW2NvdW50KytdID0gYzsKKwkgIHRva2VuW2NvdW50XSA9IDA7CisJfQorICAgIH0KK30KKworc3RhdGljIGludCByZWFkX2hvc3RzZmlsZShjaGFyICpmaWxlbmFtZSwgaW50IGluZGV4LCBpbnQgY2FjaGVfc2l6ZSkKK3sgIAorICBGSUxFICpmID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisgIGNoYXIgKnRva2VuID0gZGFlbW9uLT5uYW1lYnVmZiwgKmRvbWFpbl9zdWZmaXggPSBOVUxMOworICBpbnQgYWRkcl9jb3VudCA9IDAsIG5hbWVfY291bnQgPSBjYWNoZV9zaXplLCBsaW5lbm8gPSAwOworICB1bnNpZ25lZCBzaG9ydCBmbGFncyA9IDAsIHNhdmVkX2ZsYWdzID0gMDsKKyAgc3RydWN0IGFsbF9hZGRyIGFkZHIsIHNhdmVkX2FkZHI7CisgIGludCBhdG5sLCBhZGRybGVuID0gMCwgYWRkcl9kdXA7CisKKyAgaWYgKCFmKQorICAgIHsKKyAgICAgIG15X3N5c2xvZyhMT0dfRVJSLCBfKCJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIpLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgCisgIGVhdHNwYWNlKGYpOworICAKKyAgd2hpbGUgKChhdG5sID0gZ2V0dG9rKGYsIHRva2VuKSkgIT0gRU9GKQorICAgIHsKKyAgICAgIGFkZHJfZHVwID0gMDsKKyAgICAgIGxpbmVubysrOworICAgICAgCisjaWZkZWYgSEFWRV9JUFY2ICAgICAgCisgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIHRva2VuLCAmYWRkcikgPiAwKQorCXsKKwkgIGZsYWdzID0gRl9IT1NUUyB8IEZfSU1NT1JUQUwgfCBGX0ZPUldBUkQgfCBGX1JFVkVSU0UgfCBGX0lQVjQ7CisJICBhZGRybGVuID0gSU5BRERSU1o7CisJICBkb21haW5fc3VmZml4ID0gZ2V0X2RvbWFpbihhZGRyLmFkZHIuYWRkcjQpOworCX0KKyAgICAgIGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgdG9rZW4sICZhZGRyKSA+IDApCisJeworCSAgZmxhZ3MgPSBGX0hPU1RTIHwgRl9JTU1PUlRBTCB8IEZfRk9SV0FSRCB8IEZfUkVWRVJTRSB8IEZfSVBWNjsKKwkgIGFkZHJsZW4gPSBJTjZBRERSU1o7CisJICBkb21haW5fc3VmZml4ID0gZGFlbW9uLT5kb21haW5fc3VmZml4OworCX0KKyNlbHNlIAorICAgICAgaWYgKChhZGRyLmFkZHIuYWRkcjQuc19hZGRyID0gaW5ldF9hZGRyKHRva2VuKSkgIT0gKGluX2FkZHJfdCkgLTEpCisJeworCSAgZmxhZ3MgPSBGX0hPU1RTIHwgRl9JTU1PUlRBTCB8IEZfRk9SV0FSRCB8IEZfUkVWRVJTRSB8IEZfSVBWNDsKKwkgIGFkZHJsZW4gPSBJTkFERFJTWjsKKwkgIGRvbWFpbl9zdWZmaXggPSBnZXRfZG9tYWluKGFkZHIuYWRkci5hZGRyNCk7CisJfQorI2VuZGlmCisgICAgICBlbHNlCisJeworCSAgbXlfc3lzbG9nKExPR19FUlIsIF8oImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiKSwgZmlsZW5hbWUsIGxpbmVubyk7IAorCSAgd2hpbGUgKGF0bmwgPT0gMCkKKwkgICAgYXRubCA9IGdldHRvayhmLCB0b2tlbik7CisJICBjb250aW51ZTsKKwl9CisgICAgICAKKyAgICAgIGlmIChzYXZlZF9mbGFncyA9PSBmbGFncyAmJiBtZW1jbXAoJmFkZHIsICZzYXZlZF9hZGRyLCBhZGRybGVuKSA9PSAwKQorCWFkZHJfZHVwID0gMTsKKyAgICAgIGVsc2UKKwl7CisJICBzYXZlZF9mbGFncyA9IGZsYWdzOworCSAgc2F2ZWRfYWRkciA9IGFkZHI7CisJfQorICAgICAgCisgICAgICBhZGRyX2NvdW50Kys7CisgICAgICAKKyAgICAgIC8qIHJlaGFzaCBldmVyeSAxMDAwIG5hbWVzLiAqLworICAgICAgaWYgKChuYW1lX2NvdW50IC0gY2FjaGVfc2l6ZSkgPiAxMDAwKQorCXsKKwkgIHJlaGFzaChuYW1lX2NvdW50KTsKKwkgIGNhY2hlX3NpemUgPSBuYW1lX2NvdW50OworCX0gCisgICAgICAKKyAgICAgIHdoaWxlIChhdG5sID09IDApCisJeworCSAgc3RydWN0IGNyZWMgKmNhY2hlOworCSAgaW50IGZxZG4sIG5vbWVtOworCSAgY2hhciAqY2Fub247CisJICAKKwkgIGlmICgoYXRubCA9IGdldHRvayhmLCB0b2tlbikpID09IEVPRikKKwkgICAgYnJlYWs7CisKKwkgIGZxZG4gPSAhIXN0cmNocih0b2tlbiwgJy4nKTsKKworCSAgaWYgKChjYW5vbiA9IGNhbm9uaWNhbGlzZSh0b2tlbiwgJm5vbWVtKSkpCisJICAgIHsKKwkgICAgICAvKiBJZiBzZXQsIGFkZCBhIHZlcnNpb24gb2YgdGhlIG5hbWUgd2l0aCBhIGRlZmF1bHQgZG9tYWluIGFwcGVuZGVkICovCisJICAgICAgaWYgKChkYWVtb24tPm9wdGlvbnMgJiBPUFRfRVhQQU5EKSAmJiBkb21haW5fc3VmZml4ICYmICFmcWRuICYmIAorCQkgIChjYWNoZSA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGNyZWMpICsgCisJCQkJCXN0cmxlbihjYW5vbikrMitzdHJsZW4oZG9tYWluX3N1ZmZpeCktU01BTExETkFNRSkpKQorCQl7CisJCSAgc3RyY3B5KGNhY2hlLT5uYW1lLnNuYW1lLCBjYW5vbik7CisJCSAgc3RyY2F0KGNhY2hlLT5uYW1lLnNuYW1lLCAiLiIpOworCQkgIHN0cmNhdChjYWNoZS0+bmFtZS5zbmFtZSwgZG9tYWluX3N1ZmZpeCk7CisJCSAgYWRkX2hvc3RzX2VudHJ5KGNhY2hlLCAmYWRkciwgYWRkcmxlbiwgZmxhZ3MsIGluZGV4LCBhZGRyX2R1cCk7CisJCSAgYWRkcl9kdXAgPSAxOworCQkgIG5hbWVfY291bnQrKzsKKwkJfQorCSAgICAgIGlmICgoY2FjaGUgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcmVjKSArIHN0cmxlbihjYW5vbikrMS1TTUFMTEROQU1FKSkpCisJCXsKKwkJICBzdHJjcHkoY2FjaGUtPm5hbWUuc25hbWUsIGNhbm9uKTsKKwkJICBhZGRfaG9zdHNfZW50cnkoY2FjaGUsICZhZGRyLCBhZGRybGVuLCBmbGFncywgaW5kZXgsIGFkZHJfZHVwKTsKKwkJICBuYW1lX2NvdW50Kys7CisJCX0KKwkgICAgICBmcmVlKGNhbm9uKTsKKwkgICAgICAKKwkgICAgfQorCSAgZWxzZSBpZiAoIW5vbWVtKQorCSAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiYmFkIG5hbWUgYXQgJXMgbGluZSAlZCIpLCBmaWxlbmFtZSwgbGluZW5vKTsgCisJfQorICAgIH0gCisKKyAgZmNsb3NlKGYpOworICByZWhhc2gobmFtZV9jb3VudCk7CisgIAorICBteV9zeXNsb2coTE9HX0lORk8sIF8oInJlYWQgJXMgLSAlZCBhZGRyZXNzZXMiKSwgZmlsZW5hbWUsIGFkZHJfY291bnQpOworICAKKyAgcmV0dXJuIG5hbWVfY291bnQ7Cit9CisJICAgIAordm9pZCBjYWNoZV9yZWxvYWQodm9pZCkKK3sKKyAgc3RydWN0IGNyZWMgKmNhY2hlLCAqKnVwLCAqdG1wOworICBpbnQgaSwgdG90YWxfc2l6ZSA9IGRhZW1vbi0+Y2FjaGVzaXplOworICBzdHJ1Y3QgaG9zdHNmaWxlICphaDsKKworICBjYWNoZV9pbnNlcnRlZCA9IGNhY2hlX2xpdmVfZnJlZWQgPSAwOworICAKKyAgZm9yIChpPTA7IGk8aGFzaF9zaXplOyBpKyspCisgICAgZm9yIChjYWNoZSA9IGhhc2hfdGFibGVbaV0sIHVwID0gJmhhc2hfdGFibGVbaV07IGNhY2hlOyBjYWNoZSA9IHRtcCkKKyAgICAgIHsKKwl0bXAgPSBjYWNoZS0+aGFzaF9uZXh0OworCWlmIChjYWNoZS0+ZmxhZ3MgJiBGX0hPU1RTKQorCSAgeworCSAgICAqdXAgPSBjYWNoZS0+aGFzaF9uZXh0OworCSAgICBmcmVlKGNhY2hlKTsKKwkgIH0KKwllbHNlIGlmICghKGNhY2hlLT5mbGFncyAmIEZfREhDUCkpCisJICB7CisJICAgICp1cCA9IGNhY2hlLT5oYXNoX25leHQ7CisJICAgIGlmIChjYWNoZS0+ZmxhZ3MgJiBGX0JJR05BTUUpCisJICAgICAgeworCQljYWNoZS0+bmFtZS5ibmFtZS0+bmV4dCA9IGJpZ19mcmVlOworCQliaWdfZnJlZSA9IGNhY2hlLT5uYW1lLmJuYW1lOworCSAgICAgIH0KKwkgICAgY2FjaGUtPmZsYWdzID0gMDsKKwkgIH0KKwllbHNlCisJICB1cCA9ICZjYWNoZS0+aGFzaF9uZXh0OworICAgICAgfQorICAKKyAgaWYgKChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTk9fSE9TVFMpICYmICFkYWVtb24tPmFkZG5faG9zdHMpCisgICAgeworICAgICAgaWYgKGRhZW1vbi0+Y2FjaGVzaXplID4gMCkKKwlteV9zeXNsb2coTE9HX0lORk8sIF8oImNsZWFyZWQgY2FjaGUiKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmICghKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT19IT1NUUykpCisgICAgdG90YWxfc2l6ZSA9IHJlYWRfaG9zdHNmaWxlKEhPU1RTRklMRSwgMCwgdG90YWxfc2l6ZSk7CisgIAorICBmb3IgKGkgPSAwLCBhaCA9IGRhZW1vbi0+YWRkbl9ob3N0czsgYWg7IGFoID0gYWgtPm5leHQpCisgICAgeworICAgICAgaWYgKGkgPD0gYWgtPmluZGV4KQorCWkgPSBhaC0+aW5kZXggKyAxOworCisgICAgICBpZiAoYWgtPmZsYWdzICYgQUhfRElSKQorCWFoLT5mbGFncyB8PSBBSF9JTkFDVElWRTsKKyAgICAgIGVsc2UKKwlhaC0+ZmxhZ3MgJj0gfkFIX0lOQUNUSVZFOworICAgIH0KKworICBmb3IgKGFoID0gZGFlbW9uLT5hZGRuX2hvc3RzOyBhaDsgYWggPSBhaC0+bmV4dCkKKyAgICBpZiAoIShhaC0+ZmxhZ3MgJiBBSF9JTkFDVElWRSkpCisgICAgICB7CisJc3RydWN0IHN0YXQgYnVmOworCWlmIChzdGF0KGFoLT5mbmFtZSwgJmJ1ZikgIT0gLTEgJiYgU19JU0RJUihidWYuc3RfbW9kZSkpCisJICB7CisJICAgIERJUiAqZGlyX3N0cmVhbTsKKwkgICAgc3RydWN0IGRpcmVudCAqZW50OworCSAgICAKKwkgICAgLyogZG9uJ3QgcmVhZCB0aGlzIGFzIGEgZmlsZSAqLworCSAgICBhaC0+ZmxhZ3MgfD0gQUhfSU5BQ1RJVkU7CisJICAgIAorCSAgICBpZiAoIShkaXJfc3RyZWFtID0gb3BlbmRpcihhaC0+Zm5hbWUpKSkKKwkgICAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiY2Fubm90IGFjY2VzcyBkaXJlY3RvcnkgJXM6ICVzIiksIAorCQkJYWgtPmZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCSAgICBlbHNlCisJICAgICAgeworCQl3aGlsZSAoKGVudCA9IHJlYWRkaXIoZGlyX3N0cmVhbSkpKQorCQkgIHsKKwkJICAgIHNpemVfdCBsZW5kaXIgPSBzdHJsZW4oYWgtPmZuYW1lKTsKKwkJICAgIHNpemVfdCBsZW5maWxlID0gc3RybGVuKGVudC0+ZF9uYW1lKTsKKwkJICAgIHN0cnVjdCBob3N0c2ZpbGUgKmFoMTsKKwkJICAgIGNoYXIgKnBhdGg7CisJCSAgICAKKwkJICAgIC8qIGlnbm9yZSBlbWFjcyBiYWNrdXBzIGFuZCBkb3RmaWxlcyAqLworCQkgICAgaWYgKGxlbmZpbGUgPT0gMCB8fCAKKwkJCWVudC0+ZF9uYW1lW2xlbmZpbGUgLSAxXSA9PSAnficgfHwKKwkJCShlbnQtPmRfbmFtZVswXSA9PSAnIycgJiYgZW50LT5kX25hbWVbbGVuZmlsZSAtIDFdID09ICcjJykgfHwKKwkJCWVudC0+ZF9uYW1lWzBdID09ICcuJykKKwkJICAgICAgY29udGludWU7CisJCSAgICAKKwkJICAgIC8qIHNlZSBpZiB3ZSBoYXZlIGFuIGV4aXN0aW5nIHJlY29yZC4KKwkJICAgICAgIGRpciBpcyBhaC0+Zm5hbWUgCisJCSAgICAgICBmaWxlIGlzIGVudC0+ZF9uYW1lCisJCSAgICAgICBwYXRoIHRvIG1hdGNoIGlzIGFoMS0+Zm5hbWUgKi8KKworCQkgICAgZm9yIChhaDEgPSBkYWVtb24tPmFkZG5faG9zdHM7IGFoMTsgYWgxID0gYWgxLT5uZXh0KQorCQkgICAgICB7CisJCQlpZiAobGVuZGlyIDwgc3RybGVuKGFoMS0+Zm5hbWUpICYmCisJCQkgICAgc3Ryc3RyKGFoMS0+Zm5hbWUsIGFoLT5mbmFtZSkgPT0gYWgxLT5mbmFtZSAmJgorCQkJICAgIGFoMS0+Zm5hbWVbbGVuZGlyXSA9PSAnLycgJiYKKwkJCSAgICBzdHJjbXAoYWgxLT5mbmFtZSArIGxlbmRpciArIDEsIGVudC0+ZF9uYW1lKSA9PSAwKQorCQkJICB7CisJCQkgICAgYWgxLT5mbGFncyAmPSB+QUhfSU5BQ1RJVkU7CisJCQkgICAgYnJlYWs7CisJCQkgIH0KKwkJICAgICAgfQorCQkgICAgCisJCSAgICAvKiBtYWtlIG5ldyByZWNvcmQgKi8KKwkJICAgIGlmICghYWgxKQorCQkgICAgICB7CisJCQlpZiAoIShhaDEgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBob3N0c2ZpbGUpKSkpCisJCQkgIGNvbnRpbnVlOworCQkJCisJCQlpZiAoIShwYXRoID0gd2hpbmVfbWFsbG9jKGxlbmRpciArIGxlbmZpbGUgKyAyKSkpCisJCQkgIHsKKwkJCSAgICBmcmVlKGFoMSk7CisJCQkgICAgY29udGludWU7CisJCQkgIH0KKwkJICAgICAgCQorCQkJc3RyY3B5KHBhdGgsIGFoLT5mbmFtZSk7CisJCQlzdHJjYXQocGF0aCwgIi8iKTsKKwkJCXN0cmNhdChwYXRoLCBlbnQtPmRfbmFtZSk7CisJCQlhaDEtPmZuYW1lID0gcGF0aDsKKwkJCWFoMS0+aW5kZXggPSBpKys7CisJCQlhaDEtPmZsYWdzID0gQUhfRElSOworCQkJYWgxLT5uZXh0ID0gZGFlbW9uLT5hZGRuX2hvc3RzOworCQkJZGFlbW9uLT5hZGRuX2hvc3RzID0gYWgxOworCQkgICAgICB9CisJCSAgICAKKwkJICAgIC8qIGluYWN0aXZhdGUgcmVjb3JkIGlmIG5vdCByZWd1bGFyIGZpbGUgKi8KKwkJICAgIGlmICgoYWgxLT5mbGFncyAmIEFIX0RJUikgJiYgc3RhdChhaDEtPmZuYW1lLCAmYnVmKSAhPSAtMSAmJiAhU19JU1JFRyhidWYuc3RfbW9kZSkpCisJCSAgICAgIGFoMS0+ZmxhZ3MgfD0gQUhfSU5BQ1RJVkU7IAorCisJCSAgfQorCQljbG9zZWRpcihkaXJfc3RyZWFtKTsKKwkgICAgICB9CisJICB9CisgICAgICB9CisJICAgIAorICBmb3IgKGFoID0gZGFlbW9uLT5hZGRuX2hvc3RzOyBhaDsgYWggPSBhaC0+bmV4dCkKKyAgICBpZiAoIShhaC0+ZmxhZ3MgJiBBSF9JTkFDVElWRSkpCisgICAgICB0b3RhbF9zaXplID0gcmVhZF9ob3N0c2ZpbGUoYWgtPmZuYW1lLCBhaC0+aW5kZXgsIHRvdGFsX3NpemUpOworfSAKKworY2hhciAqZ2V0X2RvbWFpbihzdHJ1Y3QgaW5fYWRkciBhZGRyKQoreworICBzdHJ1Y3QgY29uZF9kb21haW4gKmM7CisKKyAgZm9yIChjID0gZGFlbW9uLT5jb25kX2RvbWFpbjsgYzsgYyA9IGMtPm5leHQpCisgICAgaWYgKG50b2hsKGFkZHIuc19hZGRyKSA+PSBudG9obChjLT5zdGFydC5zX2FkZHIpICYmCisgICAgICAgIG50b2hsKGFkZHIuc19hZGRyKSA8PSBudG9obChjLT5lbmQuc19hZGRyKSkKKyAgICAgIHJldHVybiBjLT5kb21haW47CisKKyAgcmV0dXJuIGRhZW1vbi0+ZG9tYWluX3N1ZmZpeDsKK30KKworI2lmZGVmIEhBVkVfREhDUAordm9pZCBjYWNoZV91bmhhc2hfZGhjcCh2b2lkKQoreworICBzdHJ1Y3QgY3JlYyAqY2FjaGUsICoqdXA7CisgIGludCBpOworCisgIGZvciAoaT0wOyBpPGhhc2hfc2l6ZTsgaSsrKQorICAgIGZvciAoY2FjaGUgPSBoYXNoX3RhYmxlW2ldLCB1cCA9ICZoYXNoX3RhYmxlW2ldOyBjYWNoZTsgY2FjaGUgPSBjYWNoZS0+aGFzaF9uZXh0KQorICAgICAgaWYgKGNhY2hlLT5mbGFncyAmIEZfREhDUCkKKwl7CisJICAqdXAgPSBjYWNoZS0+aGFzaF9uZXh0OworCSAgY2FjaGUtPm5leHQgPSBkaGNwX3NwYXJlOworCSAgZGhjcF9zcGFyZSA9IGNhY2hlOworCX0KKyAgICAgIGVsc2UKKwl1cCA9ICZjYWNoZS0+aGFzaF9uZXh0OworfQorCit2b2lkIGNhY2hlX2FkZF9kaGNwX2VudHJ5KGNoYXIgKmhvc3RfbmFtZSwgCisJCQkgIHN0cnVjdCBpbl9hZGRyICpob3N0X2FkZHJlc3MsIHRpbWVfdCB0dGQpIAoreworICBzdHJ1Y3QgY3JlYyAqY3JlYyA9IE5VTEwsICphbGlhc2M7CisgIHVuc2lnbmVkIHNob3J0IGZsYWdzID0gIEZfREhDUCB8IEZfRk9SV0FSRCB8IEZfSVBWNCB8IEZfUkVWRVJTRTsKKyAgaW50IGluX2hvc3RzID0gMDsKKyAgc3RydWN0IGNuYW1lICphOworICAKKyAgd2hpbGUgKChjcmVjID0gY2FjaGVfZmluZF9ieV9uYW1lKGNyZWMsIGhvc3RfbmFtZSwgMCwgRl9JUFY0IHwgRl9DTkFNRSkpKQorICAgIHsKKyAgICAgIC8qIGNoZWNrIGFsbCBhZGRyZXNzZXMgYXNzb2NpYXRlZCB3aXRoIG5hbWUgKi8KKyAgICAgIGlmIChjcmVjLT5mbGFncyAmIEZfSE9TVFMpCisJeworCSAgaWYgKGNyZWMtPmFkZHIuYWRkci5hZGRyLmFkZHI0LnNfYWRkciAhPSBob3N0X2FkZHJlc3MtPnNfYWRkcikKKwkgICAgeworCSAgICAgIHN0cmNweShkYWVtb24tPm5hbWVidWZmLCBpbmV0X250b2EoY3JlYy0+YWRkci5hZGRyLmFkZHIuYWRkcjQpKTsKKwkgICAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIAorCQkJXygibm90IGdpdmluZyBuYW1lICVzIHRvIHRoZSBESENQIGxlYXNlIG9mICVzIGJlY2F1c2UgIgorCQkJICAidGhlIG5hbWUgZXhpc3RzIGluICVzIHdpdGggYWRkcmVzcyAlcyIpLCAKKwkJCWhvc3RfbmFtZSwgaW5ldF9udG9hKCpob3N0X2FkZHJlc3MpLAorCQkJcmVjb3JkX3NvdXJjZShjcmVjLT51aWQpLCBkYWVtb24tPm5hbWVidWZmKTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKwkgIGVsc2UKKwkgICAgLyogaWYgaW4gaG9zdHMsIGRvbid0IG5lZWQgREhDUCByZWNvcmQgKi8KKwkgICAgaW5faG9zdHMgPSAxOworCX0KKyAgICAgIGVsc2UgaWYgKCEoY3JlYy0+ZmxhZ3MgJiBGX0RIQ1ApKQorCXsKKwkgIGNhY2hlX3NjYW5fZnJlZShob3N0X25hbWUsIE5VTEwsIDAsIGNyZWMtPmZsYWdzICYgKEZfSVBWNCB8IEZfQ05BTUUgfCBGX0ZPUldBUkQpKTsKKwkgIC8qIHNjYW5fZnJlZSBkZWxldGVzIGFsbCBhZGRyZXNzZXMgYXNzb2NpYXRlZCB3aXRoIG5hbWUgKi8KKwkgIGJyZWFrOworCX0KKyAgICB9CisgIAorICAgaWYgKGluX2hvc3RzKQorICAgIHJldHVybjsKKworICAgaWYgKChjcmVjID0gY2FjaGVfZmluZF9ieV9hZGRyKE5VTEwsIChzdHJ1Y3QgYWxsX2FkZHIgKilob3N0X2FkZHJlc3MsIDAsIEZfSVBWNCkpKQorICAgICB7CisgICAgICAgaWYgKGNyZWMtPmZsYWdzICYgRl9ORUcpCisJIGNhY2hlX3NjYW5fZnJlZShOVUxMLCAoc3RydWN0IGFsbF9hZGRyICopaG9zdF9hZGRyZXNzLCAwLCBGX0lQVjQgfCBGX1JFVkVSU0UpOworICAgICAgIGVsc2UKKwkgLyogYXZvaWQgbXVsdGlwbGUgcmV2ZXJzZSBtYXBwaW5ncyAqLworCSBmbGFncyAmPSB+Rl9SRVZFUlNFOworICAgICB9CisgICAKKyAgIGlmICgoY3JlYyA9IGRoY3Bfc3BhcmUpKQorICAgIGRoY3Bfc3BhcmUgPSBkaGNwX3NwYXJlLT5uZXh0OworICBlbHNlIC8qIG5lZWQgbmV3IG9uZSAqLworICAgIGNyZWMgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcmVjKSk7CisgIAorICBpZiAoY3JlYykgLyogbWFsbG9jIG1heSBmYWlsICovCisgICAgeworICAgICAgY3JlYy0+ZmxhZ3MgPSBmbGFnczsKKyAgICAgIGlmICh0dGQgPT0gMCkKKwljcmVjLT5mbGFncyB8PSBGX0lNTU9SVEFMOworICAgICAgZWxzZQorCWNyZWMtPnR0ZCA9IHR0ZDsKKyAgICAgIGNyZWMtPmFkZHIuYWRkci5hZGRyLmFkZHI0ID0gKmhvc3RfYWRkcmVzczsKKyAgICAgIGNyZWMtPm5hbWUubmFtZXAgPSBob3N0X25hbWU7CisgICAgICBjcmVjLT51aWQgPSB1aWQrKzsKKyAgICAgIGNhY2hlX2hhc2goY3JlYyk7CisKKyAgICAgIGZvciAoYSA9IGRhZW1vbi0+Y25hbWVzOyBhOyBhID0gYS0+bmV4dCkKKwlpZiAoaG9zdG5hbWVfaXNlcXVhbChob3N0X25hbWUsIGEtPnRhcmdldCkpCisJICB7CisJICAgIGlmICgoYWxpYXNjID0gZGhjcF9zcGFyZSkpCisJICAgICAgZGhjcF9zcGFyZSA9IGRoY3Bfc3BhcmUtPm5leHQ7CisJICAgIGVsc2UgLyogbmVlZCBuZXcgb25lICovCisJICAgICAgYWxpYXNjID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3JlYykpOworCSAgICAKKwkgICAgaWYgKGFsaWFzYykKKwkgICAgICB7CisJCWFsaWFzYy0+ZmxhZ3MgPSBGX0ZPUldBUkQgfCBGX0NPTkZJRyB8IEZfREhDUCB8IEZfQ05BTUU7CisJCWlmICh0dGQgPT0gMCkKKwkJICBhbGlhc2MtPmZsYWdzIHw9IEZfSU1NT1JUQUw7CisJCWVsc2UKKwkJICBhbGlhc2MtPnR0ZCA9IHR0ZDsKKwkJYWxpYXNjLT5uYW1lLm5hbWVwID0gYS0+YWxpYXM7CisJCWFsaWFzYy0+YWRkci5jbmFtZS5jYWNoZSA9IGNyZWM7CisJCWFsaWFzYy0+YWRkci5jbmFtZS51aWQgPSBjcmVjLT51aWQ7CisJCWNhY2hlX2hhc2goYWxpYXNjKTsKKwkgICAgICB9CisJICB9CisgICAgfQorfQorI2VuZGlmCisKKwordm9pZCBkdW1wX2NhY2hlKHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBzZXJ2ZXIgKnNlcnYsICpzZXJ2MTsKKworICBteV9zeXNsb2coTE9HX0lORk8sIF8oInRpbWUgJWx1IiksICh1bnNpZ25lZCBsb25nKW5vdyk7CisgIG15X3N5c2xvZyhMT0dfSU5GTywgXygiY2FjaGUgc2l6ZSAlZCwgJWQvJWQgY2FjaGUgaW5zZXJ0aW9ucyByZS11c2VkIHVuZXhwaXJlZCBjYWNoZSBlbnRyaWVzLiIpLCAKKwkgICAgZGFlbW9uLT5jYWNoZXNpemUsIGNhY2hlX2xpdmVfZnJlZWQsIGNhY2hlX2luc2VydGVkKTsKKyAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJxdWVyaWVzIGZvcndhcmRlZCAldSwgcXVlcmllcyBhbnN3ZXJlZCBsb2NhbGx5ICV1IiksIAorCSAgICBkYWVtb24tPnF1ZXJpZXNfZm9yd2FyZGVkLCBkYWVtb24tPmxvY2FsX2Fuc3dlcik7CisKKyAgaWYgKCFhZGRyYnVmZiAmJiAhKGFkZHJidWZmID0gd2hpbmVfbWFsbG9jKEFERFJTVFJMRU4pKSkKKyAgICByZXR1cm47CisKKyAgLyogc3VtIGNvdW50cyBmcm9tIGRpZmZlcmVudCByZWNvcmRzIGZvciBzYW1lIHNlcnZlciAqLworICBmb3IgKHNlcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnY7IHNlcnYgPSBzZXJ2LT5uZXh0KQorICAgIHNlcnYtPmZsYWdzICY9IH5TRVJWX0NPVU5URUQ7CisgIAorICBmb3IgKHNlcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnY7IHNlcnYgPSBzZXJ2LT5uZXh0KQorICAgIGlmICghKHNlcnYtPmZsYWdzICYgKFNFUlZfTk9fQUREUiB8IFNFUlZfTElURVJBTF9BRERSRVNTIHwgU0VSVl9DT1VOVEVEKSkpCisgICAgICB7CisJaW50IHBvcnQ7CisJdW5zaWduZWQgaW50IHF1ZXJpZXMgPSAwLCBmYWlsZWRfcXVlcmllcyA9IDA7CisJZm9yIChzZXJ2MSA9IHNlcnY7IHNlcnYxOyBzZXJ2MSA9IHNlcnYxLT5uZXh0KQorCSAgaWYgKCEoc2VydjEtPmZsYWdzICYgKFNFUlZfTk9fQUREUiB8IFNFUlZfTElURVJBTF9BRERSRVNTIHwgU0VSVl9DT1VOVEVEKSkgJiYgc29ja2FkZHJfaXNlcXVhbCgmc2Vydi0+YWRkciwgJnNlcnYxLT5hZGRyKSkKKwkgICAgeworCSAgICAgIHNlcnYxLT5mbGFncyB8PSBTRVJWX0NPVU5URUQ7CisJICAgICAgcXVlcmllcyArPSBzZXJ2MS0+cXVlcmllczsKKwkgICAgICBmYWlsZWRfcXVlcmllcyArPSBzZXJ2MS0+ZmFpbGVkX3F1ZXJpZXM7CisJICAgIH0KKwlwb3J0ID0gcHJldHR5cHJpbnRfYWRkcigmc2Vydi0+YWRkciwgYWRkcmJ1ZmYpOworCW15X3N5c2xvZyhMT0dfSU5GTywgXygic2VydmVyICVzIyVkOiBxdWVyaWVzIHNlbnQgJXUsIHJldHJpZWQgb3IgZmFpbGVkICV1IiksIGFkZHJidWZmLCBwb3J0LCBxdWVyaWVzLCBmYWlsZWRfcXVlcmllcyk7CisgICAgICB9CisgIAorICBpZiAoKGRhZW1vbi0+b3B0aW9ucyAmIChPUFRfREVCVUcgfCBPUFRfTE9HKSkpCisgICAgeworICAgICAgc3RydWN0IGNyZWMgKmNhY2hlIDsKKyAgICAgIGludCBpOworICAgICAgbXlfc3lzbG9nKExPR19ERUJVRywgIkhvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzICAgICBFeHBpcmVzIik7CisgICAgCisgICAgICBmb3IgKGk9MDsgaTxoYXNoX3NpemU7IGkrKykKKwlmb3IgKGNhY2hlID0gaGFzaF90YWJsZVtpXTsgY2FjaGU7IGNhY2hlID0gY2FjaGUtPmhhc2hfbmV4dCkKKwkgIHsKKwkgICAgY2hhciAqYSwgKnAgPSBkYWVtb24tPm5hbWVidWZmOworCSAgICBwICs9IHNwcmludGYocCwgIiUtNDAuNDBzICIsIGNhY2hlX2dldF9uYW1lKGNhY2hlKSk7CisJICAgIGlmICgoY2FjaGUtPmZsYWdzICYgRl9ORUcpICYmIChjYWNoZS0+ZmxhZ3MgJiBGX0ZPUldBUkQpKQorCSAgICAgIGEgPSAiIjsgCisJICAgIGVsc2UgaWYgKGNhY2hlLT5mbGFncyAmIEZfQ05BTUUpIAorCSAgICAgIHsKKwkJYSA9ICIiOworCQlpZiAoIWlzX291dGRhdGVkX2NuYW1lX3BvaW50ZXIoY2FjaGUpKQorCQkgIGEgPSBjYWNoZV9nZXRfbmFtZShjYWNoZS0+YWRkci5jbmFtZS5jYWNoZSk7CisJICAgICAgfQorI2lmZGVmIEhBVkVfSVBWNgorCSAgICBlbHNlIAorCSAgICAgIHsgCisJCWEgPSBhZGRyYnVmZjsKKwkJaWYgKGNhY2hlLT5mbGFncyAmIEZfSVBWNCkKKwkJICBpbmV0X250b3AoQUZfSU5FVCwgJmNhY2hlLT5hZGRyLmFkZHIsIGFkZHJidWZmLCBBRERSU1RSTEVOKTsKKwkJZWxzZSBpZiAoY2FjaGUtPmZsYWdzICYgRl9JUFY2KQorCQkgIGluZXRfbnRvcChBRl9JTkVUNiwgJmNhY2hlLT5hZGRyLmFkZHIsIGFkZHJidWZmLCBBRERSU1RSTEVOKTsKKwkgICAgICB9CisjZWxzZQorICAgICAgICAgICAgZWxzZSAKKwkgICAgICBhID0gaW5ldF9udG9hKGNhY2hlLT5hZGRyLmFkZHIuYWRkci5hZGRyNCk7CisjZW5kaWYKKwkgICAgcCArPSBzcHJpbnRmKHAsICIlLTMwLjMwcyAlcyVzJXMlcyVzJXMlcyVzJXMlcyAgIiwgYSwgCisJCQkgY2FjaGUtPmZsYWdzICYgRl9JUFY0ID8gIjQiIDogIiIsCisJCQkgY2FjaGUtPmZsYWdzICYgRl9JUFY2ID8gIjYiIDogIiIsCisJCQkgY2FjaGUtPmZsYWdzICYgRl9DTkFNRSA/ICJDIiA6ICIiLAorCQkJIGNhY2hlLT5mbGFncyAmIEZfRk9SV0FSRCA/ICJGIiA6ICIgIiwKKwkJCSBjYWNoZS0+ZmxhZ3MgJiBGX1JFVkVSU0UgPyAiUiIgOiAiICIsCisJCQkgY2FjaGUtPmZsYWdzICYgRl9JTU1PUlRBTCA/ICJJIiA6ICIgIiwKKwkJCSBjYWNoZS0+ZmxhZ3MgJiBGX0RIQ1AgPyAiRCIgOiAiICIsCisJCQkgY2FjaGUtPmZsYWdzICYgRl9ORUcgPyAiTiIgOiAiICIsCisJCQkgY2FjaGUtPmZsYWdzICYgRl9OWERPTUFJTiA/ICJYIiA6ICIgIiwKKwkJCSBjYWNoZS0+ZmxhZ3MgJiBGX0hPU1RTID8gIkgiIDogIiAiKTsKKyNpZmRlZiBIQVZFX0JST0tFTl9SVEMKKwkgICAgcCArPSBzcHJpbnRmKHAsICIlbHUiLCBjYWNoZS0+ZmxhZ3MgJiBGX0lNTU9SVEFMID8gMDogKHVuc2lnbmVkIGxvbmcpKGNhY2hlLT50dGQgLSBub3cpKTsKKyNlbHNlCisJICAgIHAgKz0gc3ByaW50ZihwLCAiJXMiLCBjYWNoZS0+ZmxhZ3MgJiBGX0lNTU9SVEFMID8gIlxuIiA6IGN0aW1lKCYoY2FjaGUtPnR0ZCkpKTsKKwkgICAgLyogY3RpbWUgaW5jbHVkZXMgdHJhaWxpbmcgXG4gLSBlYXQgaXQgKi8KKwkgICAgKihwLTEpID0gMDsKKyNlbmRpZgorCSAgICBteV9zeXNsb2coTE9HX0RFQlVHLCBkYWVtb24tPm5hbWVidWZmKTsKKwkgIH0KKyAgICB9Cit9CisKK2NoYXIgKnJlY29yZF9zb3VyY2UoaW50IGluZGV4KQoreworICBzdHJ1Y3QgaG9zdHNmaWxlICphaDsKKworICBpZiAoaW5kZXggPT0gMCkKKyAgICByZXR1cm4gSE9TVFNGSUxFOworCisgIGZvciAoYWggPSBkYWVtb24tPmFkZG5faG9zdHM7IGFoOyBhaCA9IGFoLT5uZXh0KQorICAgIGlmIChhaC0+aW5kZXggPT0gaW5kZXgpCisgICAgICByZXR1cm4gYWgtPmZuYW1lOworICAKKyAgcmV0dXJuICI8dW5rbm93bj4iOworfQorCit2b2lkIHF1ZXJ5c3RyKGNoYXIgKnN0ciwgdW5zaWduZWQgc2hvcnQgdHlwZSkKK3sKKyAgdW5zaWduZWQgaW50IGk7CisgIAorICBzcHJpbnRmKHN0ciwgInF1ZXJ5W3R5cGU9JWRdIiwgdHlwZSk7IAorICBmb3IgKGkgPSAwOyBpIDwgKHNpemVvZih0eXBlc3RyKS9zaXplb2YodHlwZXN0clswXSkpOyBpKyspCisgICAgaWYgKHR5cGVzdHJbaV0udHlwZSA9PSB0eXBlKQorICAgICAgc3ByaW50ZihzdHIsInF1ZXJ5WyVzXSIsIHR5cGVzdHJbaV0ubmFtZSk7Cit9CisKK3ZvaWQgbG9nX3F1ZXJ5KHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyICpuYW1lLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIsIGNoYXIgKmFyZykKK3sKKyAgY2hhciAqc291cmNlLCAqZGVzdCA9IGFkZHJidWZmOworICBjaGFyICp2ZXJiID0gImlzIjsKKyAgCisgIGlmICghKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9MT0cpKQorICAgIHJldHVybjsKKworICBpZiAoYWRkcikKKyAgICB7CisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBpbmV0X250b3AoZmxhZ3MgJiBGX0lQVjQgPyBBRl9JTkVUIDogQUZfSU5FVDYsCisJCWFkZHIsIGFkZHJidWZmLCBBRERSU1RSTEVOKTsKKyNlbHNlCisgICAgICBzdHJuY3B5KGFkZHJidWZmLCBpbmV0X250b2EoYWRkci0+YWRkci5hZGRyNCksIEFERFJTVFJMRU4pOyAgCisjZW5kaWYKKyAgICB9CisKKyAgaWYgKGZsYWdzICYgRl9SRVZFUlNFKQorICAgIHsKKyAgICAgIGRlc3QgPSBuYW1lOworICAgICAgbmFtZSA9IGFkZHJidWZmOworICAgIH0KKyAgCisgIGlmIChmbGFncyAmIEZfTkVHKQorICAgIHsKKyAgICAgIGlmIChmbGFncyAmIEZfTlhET01BSU4pCisJeworCSAgaWYgKGZsYWdzICYgRl9JUFY0KQorCSAgICBkZXN0ID0gIk5YRE9NQUlOLUlQdjQiOworCSAgZWxzZSBpZiAoZmxhZ3MgJiBGX0lQVjYpCisJICAgIGRlc3QgPSAiTlhET01BSU4tSVB2NiI7CisJICBlbHNlCisJICAgIGRlc3QgPSAiTlhET01BSU4iOworCX0KKyAgICAgIGVsc2UKKwl7ICAgICAgCisJICBpZiAoZmxhZ3MgJiBGX0lQVjQpCisJICAgIGRlc3QgPSAiTk9EQVRBLUlQdjQiOworCSAgZWxzZSBpZiAoZmxhZ3MgJiBGX0lQVjYpCisJICAgIGRlc3QgPSAiTk9EQVRBLUlQdjYiOworCSAgZWxzZQorCSAgICBkZXN0ID0gIk5PREFUQSI7CisJfQorICAgIH0KKyAgZWxzZSBpZiAoZmxhZ3MgJiBGX0NOQU1FKQorICAgIHsKKyAgICAgIC8qIG5hc3R5IGFidXNlIG9mIE5YRE9NQUlOIGFuZCBDTkFNRSBmbGFncyAqLworICAgICAgaWYgKGZsYWdzICYgRl9OWERPTUFJTikKKwlkZXN0ID0gYXJnOworICAgICAgZWxzZQorCWRlc3QgPSAiPENOQU1FPiI7CisgICAgfQorICAgIAorICBpZiAoZmxhZ3MgJiBGX0NPTkZJRykKKyAgICBzb3VyY2UgPSAiY29uZmlnIjsKKyAgZWxzZSBpZiAoZmxhZ3MgJiBGX0RIQ1ApCisgICAgc291cmNlID0gIkRIQ1AiOworICBlbHNlIGlmIChmbGFncyAmIEZfSE9TVFMpCisgICAgc291cmNlID0gYXJnOworICBlbHNlIGlmIChmbGFncyAmIEZfVVBTVFJFQU0pCisgICAgc291cmNlID0gInJlcGx5IjsKKyAgZWxzZSBpZiAoZmxhZ3MgJiBGX1NFUlZFUikKKyAgICB7CisgICAgICBzb3VyY2UgPSAiZm9yd2FyZGVkIjsKKyAgICAgIHZlcmIgPSAidG8iOworICAgIH0KKyAgZWxzZSBpZiAoZmxhZ3MgJiBGX1FVRVJZKQorICAgIHsKKyAgICAgIHNvdXJjZSA9IGFyZzsKKyAgICAgIHZlcmIgPSAiZnJvbSI7CisgICAgfQorICBlbHNlCisgICAgc291cmNlID0gImNhY2hlZCI7CisgIAorICBpZiAoc3RybGVuKG5hbWUpID09IDApCisgICAgbmFtZSA9ICIuIjsKKworICBteV9zeXNsb2coTE9HX0RFQlVHLCAiJXMgJXMgJXMgJXMiLCBzb3VyY2UsIG5hbWUsIHZlcmIsIGRlc3QpOworfQorCmRpZmYgLS1naXQgYS9zcmMvY29uZmlnLmggYi9zcmMvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDVkM2IxNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb25maWcuaApAQCAtMCwwICsxLDI5MyBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNkZWZpbmUgVkVSU0lPTiAiMi41MSIKKworI2RlZmluZSBGVEFCU0laIDE1MCAvKiBtYXggbnVtYmVyIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzIChkZWZhdWx0KSAqLworI2RlZmluZSBNQVhfUFJPQ1MgMjAgLyogbWF4IG5vIGNoaWxkcmVuIGZvciBUQ1AgcmVxdWVzdHMgKi8KKyNkZWZpbmUgQ0hJTERfTElGRVRJTUUgMTUwIC8qIHNlY3MgJ3RpbGwgdGVybWluYXRlZCAoUkZDMTAzNSBzdWdnZXN0cyA+IDEyMHMpICovCisjZGVmaW5lIEVETlNfUEtUU1ogMTI4MCAvKiBkZWZhdWx0IG1heCBFRE5TLjAgVURQIHBhY2tldCBmcm9tIFJGQzI2NzEgKi8KKyNkZWZpbmUgVElNRU9VVCAxMCAvKiBkcm9wIFVEUCBxdWVyaWVzIGFmdGVyIFRJTUVPVVQgc2Vjb25kcyAqLworI2RlZmluZSBGT1JXQVJEX1RFU1QgNTAgLyogdHJ5IGFsbCBzZXJ2ZXJzIGV2ZXJ5IDUwIHF1ZXJpZXMgKi8KKyNkZWZpbmUgRk9SV0FSRF9USU1FIDEwIC8qIG9yIDEwIHNlY29uZHMgKi8KKyNkZWZpbmUgUkFORE9NX1NPQ0tTIDY0IC8qIG1heCBzaW11bHRhbmVvdXMgcmFuZG9tIHBvcnRzICovCisjZGVmaW5lIExFQVNFX1JFVFJZIDYwIC8qIG9uIGVycm9yLCByZXRyeSB3cml0aW5nIGxlYXNlZmlsZSBhZnRlciBMRUFTRV9SRVRSWSBzZWNvbmRzICovCisjZGVmaW5lIENBQ0hFU0laIDE1MCAvKiBkZWZhdWx0IGNhY2hlIHNpemUgKi8KKyNkZWZpbmUgTUFYTEVBU0VTIDE1MCAvKiBtYXhpbXVtIG51bWJlciBvZiBESENQIGxlYXNlcyAqLworI2RlZmluZSBQSU5HX1dBSVQgMyAvKiB3YWl0IGZvciBwaW5nIGFkZHJlc3MtaW4tdXNlIHRlc3QgKi8KKyNkZWZpbmUgUElOR19DQUNIRV9USU1FIDMwIC8qIFBpbmcgdGVzdCBhc3N1bWVkIHRvIGJlIHZhbGlkIHRoaXMgbG9uZy4gKi8KKyNkZWZpbmUgREVDTElORV9CQUNLT0ZGIDYwMCAvKiBkaXNhYmxlIERFQ0xJTkVkIHN0YXRpYyBhZGRyZXNzZXMgZm9yIHRoaXMgbG9uZyAqLworI2RlZmluZSBESENQX1BBQ0tFVF9NQVggMTYzODQgLyogaGFyZCBsaW1pdCBvbiBESENQIHBhY2tldCBzaXplICovCisjZGVmaW5lIFNNQUxMRE5BTUUgNDAgLyogbW9zdCBkb21haW4gbmFtZXMgYXJlIHNtYWxsZXIgdGhhbiB0aGlzICovCisjZGVmaW5lIEhPU1RTRklMRSAiL2V0Yy9ob3N0cyIKKyNkZWZpbmUgRVRIRVJTRklMRSAiL2V0Yy9ldGhlcnMiCisjaWZkZWYgX191Q2xpbnV4X18KKyMgIGRlZmluZSBSRVNPTFZGSUxFICIvZXRjL2NvbmZpZy9yZXNvbHYuY29uZiIKKyNlbHNlCisjICBkZWZpbmUgUkVTT0xWRklMRSAiL2V0Yy9yZXNvbHYuY29uZiIKKyNlbmRpZgorI2RlZmluZSBSVU5GSUxFICIvdmFyL3J1bi9kbnNtYXNxLnBpZCIKKworI2lmbmRlZiBMRUFTRUZJTEUKKyMgICBpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkIChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCisjICAgICAgZGVmaW5lIExFQVNFRklMRSAiL3Zhci9kYi9kbnNtYXNxLmxlYXNlcyIKKyMgICBlbGlmIGRlZmluZWQoX19zdW5fXykgfHwgZGVmaW5lZCAoX19zdW4pCisjICAgICAgZGVmaW5lIExFQVNFRklMRSAiL3Zhci9jYWNoZS9kbnNtYXNxLmxlYXNlcyIKKyMgICBlbHNlCisjICAgICAgZGVmaW5lIExFQVNFRklMRSAiL3Zhci9saWIvbWlzYy9kbnNtYXNxLmxlYXNlcyIKKyMgICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgQ09ORkZJTEUKKyMgICBpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorIyAgICAgIGRlZmluZSBDT05GRklMRSAiL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mIgorIyAgIGVsc2UKKyMgICAgICBkZWZpbmUgQ09ORkZJTEUgIi9ldGMvZG5zbWFzcS5jb25mIgorIyAgIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBERUZMRUFTRSAzNjAwIC8qIGRlZmF1bHQgbGVhc2UgdGltZSwgMSBob3VyICovCisjZGVmaW5lIENIVVNFUiAibm9ib2R5IgorI2RlZmluZSBDSEdSUCAiZGlwIgorI2RlZmluZSBESENQX1NFUlZFUl9QT1JUIDY3CisjZGVmaW5lIERIQ1BfQ0xJRU5UX1BPUlQgNjgKKyNkZWZpbmUgREhDUF9TRVJWRVJfQUxUUE9SVCAxMDY3CisjZGVmaW5lIERIQ1BfQ0xJRU5UX0FMVFBPUlQgMTA2OAorI2RlZmluZSBURlRQX1BPUlQgNjkKKyNkZWZpbmUgVEZUUF9NQVhfQ09OTkVDVElPTlMgNTAgLyogbWF4IHNpbXVsdGFuZW91cyBjb25uZWN0aW9ucyAqLworI2RlZmluZSBMT0dfTUFYIDUgLyogbG9nLXF1ZXVlIGxlbmd0aCAqLworI2RlZmluZSBSQU5ERklMRSAiL2Rldi91cmFuZG9tIgorI2RlZmluZSBEQURfV0FJVCAyMCAvKiByZXRyeSBiaW5kaW5nIElQdjYgc29ja2V0cyBmb3IgdGhpcyBsb25nICovCisKKy8qIERCVVMgaW50ZXJmYWNlIHNwZWNpZmljcyAqLworI2RlZmluZSBETlNNQVNRX1NFUlZJQ0UgInVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EiCisjZGVmaW5lIEROU01BU1FfUEFUSCAiL3VrL29yZy90aGVrZWxsZXlzL2Ruc21hc3EiCisKKy8qIEEgc21hbGwgY29sbGVjdGlvbiBvZiBSUi10eXBlcyB3aGljaCBhcmUgbWlzc2luZyBvbiBzb21lIHBsYXRmb3JtcyAqLworCisjaWZuZGVmIFRfU0lHCisjICBkZWZpbmUgVF9TSUcgMjQKKyNlbmRpZgorCisjaWZuZGVmIFRfU1JWCisjICBkZWZpbmUgVF9TUlYgMzMKKyNlbmRpZgorCisjaWZuZGVmIFRfT1BUCisjICBkZWZpbmUgVF9PUFQgNDEKKyNlbmRpZgorCisjaWZuZGVmIFRfVEtFWQorIyAgZGVmaW5lIFRfVEtFWSAyNDkKKyNlbmRpZgorCisjaWZuZGVmIFRfVFNJRworIyAgZGVmaW5lIFRfVFNJRyAyNTAKKyNlbmRpZgorCisKKy8qIEZvbGxvd3Mgc3lzdGVtIHNwZWNpZmljIHN3aXRjaGVzLiBJZiB5b3UgcnVuIG9uIGEgCisgICBuZXcgc3lzdGVtLCB5b3UgbWF5IHdhbnQgdG8gZWRpdCB0aGVzZS4gCisgICBNYXkgcmVwbGFjZSB0aGlzIHdpdGggQXV0b2NvbmYgb25lIGRheS4gCisKK0hBVkVfTElOVVhfTkVUV09SSworSEFWRV9CU0RfTkVUV09SSworSEFWRV9TT0xBUklTX05FVFdPUksKKyAgIGRlZmluZSBleGFjdGx5IG9uZSBvZiB0aGVzZSB0byBhbHRlciBpbnRlcmFjdGlvbiB3aXRoIGtlcm5lbCBuZXR3b3JraW5nLgorCitIQVZFX0JST0tFTl9SVEMKKyAgIGRlZmluZSB0aGlzIG9uIGVtYmVkZGVkIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBhbiBSVEMKKyAgIHdoaWNoIGtlZXBzIHRpbWUgb3ZlciByZWJvb3RzLiBDYXVzZXMgZG5zbWFzcSB0byB1c2UgdXB0aW1lCisgICBmb3IgdGltaW5nLCBhbmQga2VlcCBsZWFzZSBsZW5ndGhzIHJhdGhlciB0aGFuIGV4cGlyeSB0aW1lcworICAgaW4gaXRzIGxlYXNlcyBmaWxlLiBUaGlzIGFsc28gbWFrZSBkbnNtYXNxICJmbGFzaCBkaXNrIGZyaWVuZGx5Ii4KKyAgIE5vcm1hbGx5LCBkbnNtYXNxIHRyaWVzIHZlcnkgaGFyZCB0byBrZWVwIHRoZSBvbi1kaXNrIGxlYXNlcyBmaWxlCisgICB1cC10by1kYXRlOiByZXdyaXRpbmcgaXQgYWZ0ZXIgZXZlcnkgcmVuZXdhbC4gIFdoZW4gSEFWRV9CUk9LRU5fUlRDIAorICAgaXMgaW4gZWZmZWN0LCB0aGUgbGVhc2UgZmlsZSBpcyBvbmx5IHdyaXR0ZW4gd2hlbiBhIG5ldyBsZWFzZSBpcyAKKyAgIGNyZWF0ZWQsIG9yIGFuIG9sZCBvbmUgZGVzdHJveWVkLiAoQmVjYXVzZSB0aG9zZSBhcmUgdGhlIG9ubHkgdGltZXMgCisgICBpdCBjaGFuZ2VzLikgVGhpcyB2YXN0bHkgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGZpbGUgd3JpdGVzLCBhbmQgbWFrZXMKKyAgIGl0IHZpYWJsZSB0byBrZWVwIHRoZSBsZWFzZSBmaWxlIG9uIGEgZmxhc2ggZmlsZXN5c3RlbS4KKyAgIE5PVEU6IHdoZW4gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMsIGJlIHN1cmUgdG8gZGVsZXRlIGFueSBvbGQKKyAgIGxlYXNlcyBmaWxlLCBvdGhlcndpc2UgZG5zbWFzcSBtYXkgZ2V0IHZlcnkgY29uZnVzZWQuCisKK0hBVkVfVEZUUAorICAgZGVmaW5lIHRoaXMgdG8gZ2V0IGRuc21hc3EncyBidWlsdC1pbiBURlRQIHNlcnZlci4KKworSEFWRV9ESENQCisgICBkZWZpbmUgdGhpcyB0byBnZXQgZG5zbWFzcSdzIERIQ1Agc2VydmVyLgorCitIQVZFX1NDUklQVAorICAgZGVmaW5lIHRoaXMgdG8gZ2V0IHRoZSBhYmlsaXR5IHRvIGNhbGwgc2NyaXB0cyBvbiBsZWFzZS1jaGFuZ2UKKworSEFWRV9HRVRPUFRfTE9ORworICAgZGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgR05VIGxpYmMgb3IgR05VIGdldG9wdC4gCisKK0hBVkVfQVJDNFJBTkRPTQorICAgZGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgYXJjNHJhbmRvbSgpIHRvIGdldCBiZXR0ZXIgc2VjdXJpdHkgZnJvbSBETlMgc3Bvb2ZzCisgICBieSB1c2luZyByZWFsbHkgcmFuZG9tIGlkcyAoT3BlbkJTRCkgCisKK0hBVkVfU09DS0FERFJfU0FfTEVOCisgICBkZWZpbmUgdGhpcyBpZiBzdHJ1Y3Qgc29ja2FkZHIgaGFzIHNhX2xlbiBmaWVsZCAoKkJTRCkgCisKK0hBVkVfREJVUworICAgRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgdG8gbGluayBhZ2FpbnN0IGxpYmRidXMsIGFuZCBoYXZlIGRuc21hc3EKKyAgIGRlZmluZSBzb21lIG1ldGhvZHMgdG8gYWxsb3cgKHJlKWNvbmZpZ3VyYXRpb24gb2YgdGhlIHVwc3RyZWFtIEROUyAKKyAgIHNlcnZlcnMgdmlhIERCdXMuCisKK05PVEVTOgorICAgRm9yIExpbnV4IHlvdSBzaG91bGQgZGVmaW5lIAorICAgICAgSEFWRV9MSU5VWF9ORVRXT1JLCisgICAgICBIQVZFX0dFVE9QVF9MT05HCisgIHlvdSBzaG91bGQgTk9UIGRlZmluZSAKKyAgICAgIEhBVkVfQVJDNFJBTkRPTQorICAgICAgSEFWRV9TT0NLQUREUl9TQV9MRU4KKworICAgRm9yICpCU0Qgc3lzdGVtcyB5b3Ugc2hvdWxkIGRlZmluZSAKKyAgICAgSEFWRV9CU0RfTkVUV09SSworICAgICBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgYW5kIHlvdSBNQVkgZGVmaW5lICAKKyAgICAgSEFWRV9BUkM0UkFORE9NIC0gT3BlbkJTRCBhbmQgRnJlZUJTRCBhbmQgTmV0QlNEIHZlcnNpb24gMi4wIG9yIGxhdGVyCisgICAgIEhBVkVfR0VUT1BUX0xPTkcgLSBOZXRCU0QsIGxhdGVyIEZyZWVCU0QgCisgICAgICAgICAgICAgICAgICAgICAgIChGcmVlQlNEIGFuZCBPcGVuQlNEIG9ubHkgaWYgeW91IGxpbmsgR05VIGdldG9wdCkgCisKKyovCisKKy8qIHBsYXRmb3JtIGluZGVwZW5kZW50IG9wdGlvbnMtIHVuY29tbWVudCB0byBlbmFibGUgKi8KKyNkZWZpbmUgSEFWRV9ESENQCisjZGVmaW5lIEhBVkVfVEZUUAorI2RlZmluZSBIQVZFX1NDUklQVAorLyogI2RlZmluZSBIQVZFX0JST0tFTl9SVEMgKi8KKy8qICNkZWZpbmUgSEFWRV9EQlVTICovCisKKy8qIEFsbG93IFRGVFAgdG8gYmUgZGlzYWJsZWQgd2l0aCBDT1BUUz0tRE5PX1RGVFAgKi8KKyNpZmRlZiBOT19URlRQCisjdW5kZWYgSEFWRV9URlRQCisjZW5kaWYKKworLyogQWxsb3cgREhDUCB0byBiZSBkaXNhYmxlZCB3aXRoIENPUFRTPS1ETk9fREhDUCAqLworI2lmZGVmIE5PX0RIQ1AKKyN1bmRlZiBIQVZFX0RIQ1AKKyNlbmRpZgorCisvKiBBbGxvdyBzY3JpcHRzIHRvIGJlIGRpc2FibGVkIHdpdGggQ09QVFM9LUROT19TQ1JJUFQgKi8KKyNpZmRlZiBOT19TQ1JJUFQKKyN1bmRlZiBIQVZFX1NDUklQVAorI2VuZGlmCisKKworCisvKiBwbGF0Zm9ybSBkZXBlbmRlbnQgb3B0aW9ucy4gKi8KKworLyogTXVzdCBwcmVjZWVkIF9fbGludXhfXyBzaW5jZSB1Q2xpbnV4IGRlZmluZXMgX19saW51eF9fIHRvby4gKi8KKyNpZiBkZWZpbmVkKF9fdUNsaW51eF9fKQorI2RlZmluZSBIQVZFX0xJTlVYX05FVFdPUksKKyNkZWZpbmUgSEFWRV9HRVRPUFRfTE9ORworI3VuZGVmIEhBVkVfQVJDNFJBTkRPTQorI3VuZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisvKiBOZXZlciB1c2UgZm9yaygpIG9uIHVDbGludXguIE5vdGUgdGhhdCB0aGlzIGlzIHN1YnRseSBkaWZmZXJlbnQgZnJvbSB0aGUKKyAgIC0ta2VlcC1pbi1mb3JlZ3JvdW5kIG9wdGlvbiwgc2luY2UgaXQgYWxzbyAgc3VwcHJlc3NlcyBmb3JraW5nIG5ldyAKKyAgIHByb2Nlc3NlcyBmb3IgVENQIGNvbm5lY3Rpb25zIGFuZCBkaXNhYmxlcyB0aGUgY2FsbC1hLXNjcmlwdCBvbiBsZWFzZWNoYW5nZQorICAgc3lzdGVtLiBJdCdzIGludGVuZGVkIGZvciB1c2Ugb24gTU1VLWxlc3Mga2VybmVscy4gKi8KKyNkZWZpbmUgTk9fRk9SSworCisjZWxpZiBkZWZpbmVkKF9fVUNMSUJDX18pCisjZGVmaW5lIEhBVkVfTElOVVhfTkVUV09SSworI2lmIGRlZmluZWQoX19VQ0xJQkNfSEFTX0dOVV9HRVRPUFRfXykgfHwgXAorICAgKChfX1VDTElCQ19NQUpPUl9fPT0wKSAmJiAoX19VQ0xJQkNfTUlOT1JfXz09OSkgJiYgKF9fVUNMSUJDX1NVQkxFVkVMX188MjEpKQorIyAgICBkZWZpbmUgSEFWRV9HRVRPUFRfTE9ORworI2VuZGlmCisjdW5kZWYgSEFWRV9BUkM0UkFORE9NCisjdW5kZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyNpZiAhZGVmaW5lZChfX0FSQ0hfSEFTX01NVV9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19IQVNfTU1VX18pCisjICBkZWZpbmUgTk9fRk9SSworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VDTElCQ19IQVNfSVBWNl9fKQorIyAgaWZuZGVmIElQVjZfVjZPTkxZCisjICAgIGRlZmluZSBJUFY2X1Y2T05MWSAyNgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBUaGlzIGlzIGZvciBnbGliYyAyLnggKi8KKyNlbGlmIGRlZmluZWQoX19saW51eF9fKQorI2RlZmluZSBIQVZFX0xJTlVYX05FVFdPUksKKyNkZWZpbmUgSEFWRV9HRVRPUFRfTE9ORworI3VuZGVmIEhBVkVfQVJDNFJBTkRPTQorI3VuZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisKKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19PcGVuQlNEX18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwgXAorICAgICAgZGVmaW5lZCAoX19GcmVlQlNEX2tlcm5lbF9fKQorI2RlZmluZSBIQVZFX0JTRF9ORVRXT1JLCisvKiBMYXRlciB2ZXJpb25zIG9mIEZyZWVCU0QgaGF2ZSBnZXRvcHRfbG9uZygpICovCisjaWYgZGVmaW5lZChvcHRpb25hbF9hcmd1bWVudCkgJiYgZGVmaW5lZChyZXF1aXJlZF9hcmd1bWVudCkKKyMgICBkZWZpbmUgSEFWRV9HRVRPUFRfTE9ORworI2VuZGlmCisjaWYgIWRlZmluZWQgKF9fRnJlZUJTRF9rZXJuZWxfXykKKyMgICBkZWZpbmUgSEFWRV9BUkM0UkFORE9NCisjZW5kaWYKKyNkZWZpbmUgSEFWRV9TT0NLQUREUl9TQV9MRU4KKworI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisjZGVmaW5lIEhBVkVfQlNEX05FVFdPUksKKyN1bmRlZiBIQVZFX0dFVE9QVF9MT05HCisjZGVmaW5lIEhBVkVfQVJDNFJBTkRPTQorI2RlZmluZSBIQVZFX1NPQ0tBRERSX1NBX0xFTgorLyogRGVmaW5lIGJlZm9yZSBzeXMvc29ja2V0LmggaXMgaW5jbHVkZWQgc28gd2UgZ2V0IHNvY2tsZW5fdCAqLworI2RlZmluZSBfQlNEX1NPQ0tMRU5fVF8KKyAKKyNlbGlmIGRlZmluZWQoX19OZXRCU0RfXykKKyNkZWZpbmUgSEFWRV9CU0RfTkVUV09SSworI2RlZmluZSBIQVZFX0dFVE9QVF9MT05HCisjdW5kZWYgSEFWRV9BUkM0UkFORE9NCisjZGVmaW5lIEhBVkVfU09DS0FERFJfU0FfTEVOCisKKyNlbGlmIGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoX19zdW5fXykKKyNkZWZpbmUgSEFWRV9TT0xBUklTX05FVFdPUksKKyNkZWZpbmUgSEFWRV9HRVRPUFRfTE9ORworI3VuZGVmIEhBVkVfQVJDNFJBTkRPTQorI3VuZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisjZGVmaW5lIF9YUEc0XzIKKyNkZWZpbmUgX19FWFRFTlNJT05TX18KKyNkZWZpbmUgRVRIRVJfQUREUl9MRU4gNiAKKyAKKyNlbmRpZgorCisvKiBEZWNpZGUgaWYgd2UncmUgZ29pbmcgdG8gc3VwcG9ydCBJUHY2ICovCisvKiBJUHY2IGNhbiBiZSBmb3JjZWQgb2ZmIHdpdGggIm1ha2UgQ09QVFM9LUROT19JUFY2IiAqLworLyogV2UgYXNzdW1lIHRoYXQgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIElQdjYKKyAgIGhlYWRlcnMgZG9uJ3QgaGF2ZSBudG9wIGFuZCBwdG9uIGVpdGhlciAqLworCisjaWYgZGVmaW5lZChJTkVUNl9BRERSU1RSTEVOKSAmJiBkZWZpbmVkKElQVjZfVjZPTkxZKSAmJiAhZGVmaW5lZChOT19JUFY2KQorIyAgZGVmaW5lIEhBVkVfSVBWNgorIyAgZGVmaW5lIEFERFJTVFJMRU4gSU5FVDZfQUREUlNUUkxFTgorIyAgaWYgZGVmaW5lZChTT0xfSVBWNikKKyMgICAgZGVmaW5lIElQVjZfTEVWRUwgU09MX0lQVjYKKyMgIGVsc2UKKyMgICAgZGVmaW5lIElQVjZfTEVWRUwgSVBQUk9UT19JUFY2CisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChJTkVUX0FERFJTVFJMRU4pCisjICB1bmRlZiBIQVZFX0lQVjYKKyMgIGRlZmluZSBBRERSU1RSTEVOIElORVRfQUREUlNUUkxFTgorI2Vsc2UKKyMgIHVuZGVmIEhBVkVfSVBWNgorIyAgZGVmaW5lIEFERFJTVFJMRU4gMTYgLyogNCozICsgMyBkb3RzICsgTlVMTCAqLworI2VuZGlmCisKKy8qIENhbid0IGRvIHNjcmlwdHMgd2l0aG91dCBmb3JrICovCisjaWZkZWYgTk9GT1JLCisjICB1bmRlZiBIQVZFX1NDUklQVAorI2VuZGlmCisKZGlmZiAtLWdpdCBhL3NyYy9kYnVzLmMgYi9zcmMvZGJ1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0MWY5MjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGJ1cy5jCkBAIC0wLDAgKzEsNDM2IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDA5IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfREJVUworCisjaW5jbHVkZSA8ZGJ1cy9kYnVzLmg+CisKK2NvbnN0IGNoYXIqIGludHJvc3BlY3Rpb25feG1sID0KKyI8IURPQ1RZUEUgbm9kZSBQVUJMSUMgXCItLy9mcmVlZGVza3RvcC8vRFREIEQtQlVTIE9iamVjdCBJbnRyb3NwZWN0aW9uIDEuMC8vRU5cIlxuIgorIlwiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzL2RidXMvMS4wL2ludHJvc3BlY3QuZHRkXCI+XG4iCisiPG5vZGUgbmFtZT1cIiIgRE5TTUFTUV9QQVRIICJcIj5cbiIKKyIgIDxpbnRlcmZhY2UgbmFtZT1cIm9yZy5mcmVlZGVza3RvcC5EQnVzLkludHJvc3BlY3RhYmxlXCI+XG4iCisiICAgIDxtZXRob2QgbmFtZT1cIkludHJvc3BlY3RcIj5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJkYXRhXCIgZGlyZWN0aW9uPVwib3V0XCIgdHlwZT1cInNcIi8+XG4iCisiICAgIDwvbWV0aG9kPlxuIgorIiAgPC9pbnRlcmZhY2U+XG4iCisiICA8aW50ZXJmYWNlIG5hbWU9XCIiIEROU01BU1FfU0VSVklDRSAiXCI+XG4iCisiICAgIDxtZXRob2QgbmFtZT1cIkNsZWFyQ2FjaGVcIj5cbiIKKyIgICAgPC9tZXRob2Q+XG4iCisiICAgIDxtZXRob2QgbmFtZT1cIkdldFZlcnNpb25cIj5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJ2ZXJzaW9uXCIgZGlyZWN0aW9uPVwib3V0XCIgdHlwZT1cInNcIi8+XG4iCisiICAgIDwvbWV0aG9kPlxuIgorIiAgICA8bWV0aG9kIG5hbWU9XCJTZXRTZXJ2ZXJzXCI+XG4iCisiICAgICAgPGFyZyBuYW1lPVwic2VydmVyc1wiIGRpcmVjdGlvbj1cImluXCIgdHlwZT1cImF2XCIvPlxuIgorIiAgICA8L21ldGhvZD5cbiIKKyIgICAgPHNpZ25hbCBuYW1lPVwiRGhjcExlYXNlQWRkZWRcIj5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJpcGFkZHJcIiB0eXBlPVwic1wiLz5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJod2FkZHJcIiB0eXBlPVwic1wiLz5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJob3N0bmFtZVwiIHR5cGU9XCJzXCIvPlxuIgorIiAgICA8L3NpZ25hbD5cbiIKKyIgICAgPHNpZ25hbCBuYW1lPVwiRGhjcExlYXNlRGVsZXRlZFwiPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cImlwYWRkclwiIHR5cGU9XCJzXCIvPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cImh3YWRkclwiIHR5cGU9XCJzXCIvPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cImhvc3RuYW1lXCIgdHlwZT1cInNcIi8+XG4iCisiICAgIDwvc2lnbmFsPlxuIgorIiAgICA8c2lnbmFsIG5hbWU9XCJEaGNwTGVhc2VVcGRhdGVkXCI+XG4iCisiICAgICAgPGFyZyBuYW1lPVwiaXBhZGRyXCIgdHlwZT1cInNcIi8+XG4iCisiICAgICAgPGFyZyBuYW1lPVwiaHdhZGRyXCIgdHlwZT1cInNcIi8+XG4iCisiICAgICAgPGFyZyBuYW1lPVwiaG9zdG5hbWVcIiB0eXBlPVwic1wiLz5cbiIKKyIgICAgPC9zaWduYWw+XG4iCisiICA8L2ludGVyZmFjZT5cbiIKKyI8L25vZGU+XG4iOworCitzdHJ1Y3Qgd2F0Y2ggeworICBEQnVzV2F0Y2ggKndhdGNoOyAgICAgIAorICBzdHJ1Y3Qgd2F0Y2ggKm5leHQ7Cit9OworCisKK3N0YXRpYyBkYnVzX2Jvb2xfdCBhZGRfd2F0Y2goREJ1c1dhdGNoICp3YXRjaCwgdm9pZCAqZGF0YSkKK3sKKyAgc3RydWN0IHdhdGNoICp3OworCisgIGZvciAodyA9IGRhZW1vbi0+d2F0Y2hlczsgdzsgdyA9IHctPm5leHQpCisgICAgaWYgKHctPndhdGNoID09IHdhdGNoKQorICAgICAgcmV0dXJuIFRSVUU7CisKKyAgaWYgKCEodyA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IHdhdGNoKSkpKQorICAgIHJldHVybiBGQUxTRTsKKworICB3LT53YXRjaCA9IHdhdGNoOworICB3LT5uZXh0ID0gZGFlbW9uLT53YXRjaGVzOworICBkYWVtb24tPndhdGNoZXMgPSB3OworCisgIHcgPSBkYXRhOyAvKiBubyB3YXJuaW5nICovCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfd2F0Y2goREJ1c1dhdGNoICp3YXRjaCwgdm9pZCAqZGF0YSkKK3sKKyAgc3RydWN0IHdhdGNoICoqdXAsICp3OyAgCisgIAorICBmb3IgKHVwID0gJihkYWVtb24tPndhdGNoZXMpLCB3ID0gZGFlbW9uLT53YXRjaGVzOyB3OyB3ID0gdy0+bmV4dCkKKyAgICBpZiAody0+d2F0Y2ggPT0gd2F0Y2gpCisgICAgICB7CisgICAgICAgICp1cCA9IHctPm5leHQ7CisgICAgICAgIGZyZWUodyk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgdXAgPSAmKHctPm5leHQpOworCisgIHcgPSBkYXRhOyAvKiBubyB3YXJuaW5nICovCit9CisKK3N0YXRpYyB2b2lkIGRidXNfcmVhZF9zZXJ2ZXJzKERCdXNNZXNzYWdlICptZXNzYWdlKQoreworICBzdHJ1Y3Qgc2VydmVyICpzZXJ2LCAqdG1wLCAqKnVwOworICBEQnVzTWVzc2FnZUl0ZXIgaXRlcjsKKyAgdW5pb24gIG15c29ja2FkZHIgYWRkciwgc291cmNlX2FkZHI7CisgIGNoYXIgKmRvbWFpbjsKKyAgCisgIGRidXNfbWVzc2FnZV9pdGVyX2luaXQobWVzc2FnZSwgJml0ZXIpOworICAKKyAgLyogbWFyayBldmVyeXRoaW5nIGZyb20gREJVUyAqLworICBmb3IgKHNlcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnY7IHNlcnYgPSBzZXJ2LT5uZXh0KQorICAgIGlmIChzZXJ2LT5mbGFncyAmIFNFUlZfRlJPTV9EQlVTKQorICAgICAgc2Vydi0+ZmxhZ3MgfD0gU0VSVl9NQVJLOworICAKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaW50IHNraXAgPSAwOworCisgICAgICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSA9PSBEQlVTX1RZUEVfVUlOVDMyKQorCXsKKwkgIHUzMiBhOworCSAgCisJICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXIsICZhKTsKKwkgIGRidXNfbWVzc2FnZV9pdGVyX25leHQgKCZpdGVyKTsKKwkgIAorI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisJICBzb3VyY2VfYWRkci5pbi5zaW5fbGVuID0gYWRkci5pbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkgIGFkZHIuaW4uc2luX2FkZHIuc19hZGRyID0gbnRvaGwoYSk7CisJICBzb3VyY2VfYWRkci5pbi5zaW5fZmFtaWx5ID0gYWRkci5pbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwkgIGFkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhOQU1FU0VSVkVSX1BPUlQpOworCSAgc291cmNlX2FkZHIuaW4uc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKwkgIHNvdXJjZV9hZGRyLmluLnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5xdWVyeV9wb3J0KTsKKwl9CisgICAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpID09IERCVVNfVFlQRV9CWVRFKQorCXsKKwkgIHVuc2lnbmVkIGNoYXIgcFtzaXplb2Yoc3RydWN0IGluNl9hZGRyKV07CisJICB1bnNpZ25lZCBpbnQgaTsKKworCSAgc2tpcCA9IDE7CisKKwkgIGZvcihpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOyBpKyspCisJICAgIHsKKwkgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXIsICZwW2ldKTsKKwkgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmaXRlcik7CisJICAgICAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikgIT0gREJVU19UWVBFX0JZVEUpCisJCWJyZWFrOworCSAgICB9CisKKyNpZm5kZWYgSEFWRV9JUFY2CisJICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oImF0dGVtcHQgdG8gc2V0IGFuIElQdjYgc2VydmVyIGFkZHJlc3MgdmlhIERCdXMgLSBubyBJUHY2IHN1cHBvcnQiKSk7CisjZWxzZQorCSAgaWYgKGkgPT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciktMSkKKwkgICAgeworCSAgICAgIG1lbWNweSgmYWRkci5pbjYuc2luNl9hZGRyLCBwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgICAgICAgICAgICAgc291cmNlX2FkZHIuaW42LnNpbjZfbGVuID0gYWRkci5pbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKyAgICAgICAgICAgICAgc291cmNlX2FkZHIuaW42LnNpbjZfZmFtaWx5ID0gYWRkci5pbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgICAgICAgYWRkci5pbjYuc2luNl9wb3J0ID0gaHRvbnMoTkFNRVNFUlZFUl9QT1JUKTsKKyAgICAgICAgICAgICAgc291cmNlX2FkZHIuaW42LnNpbjZfZmxvd2luZm8gPSBhZGRyLmluNi5zaW42X2Zsb3dpbmZvID0gMDsKKwkgICAgICBzb3VyY2VfYWRkci5pbjYuc2luNl9zY29wZV9pZCA9IGFkZHIuaW42LnNpbjZfc2NvcGVfaWQgPSAwOworICAgICAgICAgICAgICBzb3VyY2VfYWRkci5pbjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7CisgICAgICAgICAgICAgIHNvdXJjZV9hZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhkYWVtb24tPnF1ZXJ5X3BvcnQpOworCSAgICAgIHNraXAgPSAwOworCSAgICB9CisjZW5kaWYKKwl9CisgICAgICBlbHNlCisJLyogQXQgdGhlIGVuZCAqLworCWJyZWFrOworICAgICAgCisgICAgICBkbyB7CisJaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikgPT0gREJVU19UWVBFX1NUUklORykKKwkgIHsKKwkgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmZG9tYWluKTsKKwkgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJml0ZXIpOworCSAgfQorCWVsc2UKKwkgIGRvbWFpbiA9IE5VTEw7CisJCisJaWYgKCFza2lwKQorCSAgeworCSAgICAvKiBTZWUgaWYgdGhpcyBpcyBhbHJlYWR5IHRoZXJlLCBhbmQgdW5tYXJrICovCisJICAgIGZvciAoc2VydiA9IGRhZW1vbi0+c2VydmVyczsgc2Vydjsgc2VydiA9IHNlcnYtPm5leHQpCisJICAgICAgaWYgKChzZXJ2LT5mbGFncyAmIFNFUlZfRlJPTV9EQlVTKSAmJgorCQkgIChzZXJ2LT5mbGFncyAmIFNFUlZfTUFSSykpCisJCXsKKwkJICBpZiAoIShzZXJ2LT5mbGFncyAmIFNFUlZfSEFTX0RPTUFJTikgJiYgIWRvbWFpbikKKwkJICAgIHsKKwkJICAgICAgc2Vydi0+ZmxhZ3MgJj0gflNFUlZfTUFSSzsKKwkJICAgICAgYnJlYWs7CisJCSAgICB9CisJCSAgaWYgKChzZXJ2LT5mbGFncyAmIFNFUlZfSEFTX0RPTUFJTikgJiYgCisJCSAgICAgIGRvbWFpbiAmJgorCQkgICAgICBob3N0bmFtZV9pc2VxdWFsKGRvbWFpbiwgc2Vydi0+ZG9tYWluKSkKKwkJICAgIHsKKwkJICAgICAgc2Vydi0+ZmxhZ3MgJj0gflNFUlZfTUFSSzsKKwkJICAgICAgYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgCisJICAgIGlmICghc2VydiAmJiAoc2VydiA9IHdoaW5lX21hbGxvYyhzaXplb2YgKHN0cnVjdCBzZXJ2ZXIpKSkpCisJICAgICAgeworCQkvKiBOb3QgZm91bmQsIGNyZWF0ZSBhIG5ldyBvbmUuICovCisJCW1lbXNldChzZXJ2LCAwLCBzaXplb2Yoc3RydWN0IHNlcnZlcikpOworCQkKKwkJaWYgKGRvbWFpbikKKwkJICBzZXJ2LT5kb21haW4gPSB3aGluZV9tYWxsb2Moc3RybGVuKGRvbWFpbikrMSk7CisJCQorCQlpZiAoZG9tYWluICYmICFzZXJ2LT5kb21haW4pCisJCSAgeworCQkgICAgZnJlZShzZXJ2KTsKKwkJICAgIHNlcnYgPSBOVUxMOworCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIHNlcnYtPm5leHQgPSBkYWVtb24tPnNlcnZlcnM7CisJCSAgICBkYWVtb24tPnNlcnZlcnMgPSBzZXJ2OworCQkgICAgc2Vydi0+ZmxhZ3MgPSBTRVJWX0ZST01fREJVUzsKKwkJICAgIGlmIChkb21haW4pCisJCSAgICAgIHsKKwkJCXN0cmNweShzZXJ2LT5kb21haW4sIGRvbWFpbik7CisJCQlzZXJ2LT5mbGFncyB8PSBTRVJWX0hBU19ET01BSU47CisJCSAgICAgIH0KKwkJICB9CisJICAgICAgfQorCisJICAgIGlmIChzZXJ2KQorCSAgICAgIHsKKwkJaWYgKHNvdXJjZV9hZGRyLmluLnNpbl9mYW1pbHkgPT0gQUZfSU5FVCAmJgorCQkgICAgYWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPT0gMCAmJgorCQkgICAgc2Vydi0+ZG9tYWluKQorCQkgIHNlcnYtPmZsYWdzIHw9IFNFUlZfTk9fQUREUjsKKwkJZWxzZQorCQkgIHsKKwkJICAgIHNlcnYtPmZsYWdzICY9IH5TRVJWX05PX0FERFI7CisJCSAgICBzZXJ2LT5hZGRyID0gYWRkcjsKKwkJICAgIHNlcnYtPnNvdXJjZV9hZGRyID0gc291cmNlX2FkZHI7CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKwl9IHdoaWxlIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpID09IERCVVNfVFlQRV9TVFJJTkcpOworICAgIH0KKyAgCisgIC8qIHVubGluayBhbmQgZnJlZSBhbnl0aGluZyBzdGlsbCBtYXJrZWQuICovCisgIGZvciAoc2VydiA9IGRhZW1vbi0+c2VydmVycywgdXAgPSAmZGFlbW9uLT5zZXJ2ZXJzOyBzZXJ2OyBzZXJ2ID0gdG1wKSAKKyAgICB7CisgICAgICB0bXAgPSBzZXJ2LT5uZXh0OworICAgICAgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9NQVJLKQorCXsKKwkgIHNlcnZlcl9nb25lKHNlcnYpOworCSAgKnVwID0gc2Vydi0+bmV4dDsKKwkgIGZyZWUoc2Vydik7CisJfQorICAgICAgZWxzZSAKKwl1cCA9ICZzZXJ2LT5uZXh0OworICAgIH0KKworfQorCitEQnVzSGFuZGxlclJlc3VsdCBtZXNzYWdlX2hhbmRsZXIoREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIAorCQkJCSAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UsIAorCQkJCSAgdm9pZCAqdXNlcl9kYXRhKQoreworICBjaGFyICptZXRob2QgPSAoY2hhciAqKWRidXNfbWVzc2FnZV9nZXRfbWVtYmVyKG1lc3NhZ2UpOworICAgCisgIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobWVzc2FnZSwgREJVU19JTlRFUkZBQ0VfSU5UUk9TUEVDVEFCTEUsICJJbnRyb3NwZWN0IikpCisgICAgeworICAgICAgREJ1c01lc3NhZ2UgKnJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1lc3NhZ2UpOworCisgICAgICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MocmVwbHksIERCVVNfVFlQRV9TVFJJTkcsICZpbnRyb3NwZWN0aW9uX3htbCwgREJVU19UWVBFX0lOVkFMSUQpOworICAgICAgZGJ1c19jb25uZWN0aW9uX3NlbmQgKGNvbm5lY3Rpb24sIHJlcGx5LCBOVUxMKTsKKyAgICAgIGRidXNfbWVzc2FnZV91bnJlZiAocmVwbHkpOworICAgIH0KKyAgZWxzZSBpZiAoc3RyY21wKG1ldGhvZCwgIkdldFZlcnNpb24iKSA9PSAwKQorICAgIHsKKyAgICAgIGNoYXIgKnYgPSBWRVJTSU9OOworICAgICAgREJ1c01lc3NhZ2UgKnJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1lc3NhZ2UpOworICAgICAgCisgICAgICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MocmVwbHksIERCVVNfVFlQRV9TVFJJTkcsICZ2LCBEQlVTX1RZUEVfSU5WQUxJRCk7CisgICAgICBkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoY29ubmVjdGlvbiwgcmVwbHksIE5VTEwpOworICAgICAgZGJ1c19tZXNzYWdlX3VucmVmIChyZXBseSk7CisgICAgfQorICBlbHNlIGlmIChzdHJjbXAobWV0aG9kLCAiU2V0U2VydmVycyIpID09IDApCisgICAgeworICAgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMgZnJvbSBEQnVzIikpOworICAgICAgZGJ1c19yZWFkX3NlcnZlcnMobWVzc2FnZSk7CisgICAgICBjaGVja19zZXJ2ZXJzKCk7CisgICAgfQorICBlbHNlIGlmIChzdHJjbXAobWV0aG9kLCAiQ2xlYXJDYWNoZSIpID09IDApCisgICAgY2xlYXJfY2FjaGVfYW5kX3JlbG9hZChkbnNtYXNxX3RpbWUoKSk7CisgIGVsc2UKKyAgICByZXR1cm4gKERCVVNfSEFORExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEKTsKKyAgCisgIG1ldGhvZCA9IHVzZXJfZGF0YTsgLyogbm8gd2FybmluZyAqLworCisgIHJldHVybiAoREJVU19IQU5ETEVSX1JFU1VMVF9IQU5ETEVEKTsKKyAKK30KKyAKKworLyogcmV0dXJucyBOVUxMIG9yIGVycm9yIG1lc3NhZ2UsIG1heSBmYWlsIHNpbGVudGx5IGlmIGRidXMgZGFlbW9uIG5vdCB5ZXQgdXAuICovCitjaGFyICpkYnVzX2luaXQodm9pZCkKK3sKKyAgREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24gPSBOVUxMOworICBEQnVzT2JqZWN0UGF0aFZUYWJsZSBkbnNtYXNxX3Z0YWJsZSA9IHtOVUxMLCAmbWVzc2FnZV9oYW5kbGVyLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisgIERCdXNFcnJvciBkYnVzX2Vycm9yOworICBEQnVzTWVzc2FnZSAqbWVzc2FnZTsKKworICBkYnVzX2Vycm9yX2luaXQgKCZkYnVzX2Vycm9yKTsKKyAgaWYgKCEoY29ubmVjdGlvbiA9IGRidXNfYnVzX2dldCAoREJVU19CVVNfU1lTVEVNLCAmZGJ1c19lcnJvcikpKQorICAgIHJldHVybiBOVUxMOworICAgIAorICBkYnVzX2Nvbm5lY3Rpb25fc2V0X2V4aXRfb25fZGlzY29ubmVjdChjb25uZWN0aW9uLCBGQUxTRSk7CisgIGRidXNfY29ubmVjdGlvbl9zZXRfd2F0Y2hfZnVuY3Rpb25zKGNvbm5lY3Rpb24sIGFkZF93YXRjaCwgcmVtb3ZlX3dhdGNoLCAKKwkJCQkgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgZGJ1c19lcnJvcl9pbml0ICgmZGJ1c19lcnJvcik7CisgIGRidXNfYnVzX3JlcXVlc3RfbmFtZSAoY29ubmVjdGlvbiwgRE5TTUFTUV9TRVJWSUNFLCAwLCAmZGJ1c19lcnJvcik7CisgIGlmIChkYnVzX2Vycm9yX2lzX3NldCAoJmRidXNfZXJyb3IpKQorICAgIHJldHVybiAoY2hhciAqKWRidXNfZXJyb3IubWVzc2FnZTsKKyAgCisgIGlmICghZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdF9wYXRoKGNvbm5lY3Rpb24sICBETlNNQVNRX1BBVEgsIAorCQkJCQkgICAgJmRuc21hc3FfdnRhYmxlLCBOVUxMKSkKKyAgICByZXR1cm4gXygiY291bGQgbm90IHJlZ2lzdGVyIGEgREJ1cyBtZXNzYWdlIGhhbmRsZXIiKTsKKyAgCisgIGRhZW1vbi0+ZGJ1cyA9IGNvbm5lY3Rpb247IAorICAKKyAgaWYgKChtZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwoRE5TTUFTUV9QQVRILCBETlNNQVNRX1NFUlZJQ0UsICJVcCIpKSkKKyAgICB7CisgICAgICBkYnVzX2Nvbm5lY3Rpb25fc2VuZChjb25uZWN0aW9uLCBtZXNzYWdlLCBOVUxMKTsKKyAgICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisgCisKK3ZvaWQgc2V0X2RidXNfbGlzdGVuZXJzKGludCAqbWF4ZmRwLAorCQkJZmRfc2V0ICpyc2V0LCBmZF9zZXQgKndzZXQsIGZkX3NldCAqZXNldCkKK3sKKyAgc3RydWN0IHdhdGNoICp3OworICAKKyAgZm9yICh3ID0gZGFlbW9uLT53YXRjaGVzOyB3OyB3ID0gdy0+bmV4dCkKKyAgICBpZiAoZGJ1c193YXRjaF9nZXRfZW5hYmxlZCh3LT53YXRjaCkpCisgICAgICB7CisJdW5zaWduZWQgaW50IGZsYWdzID0gZGJ1c193YXRjaF9nZXRfZmxhZ3Mody0+d2F0Y2gpOworCWludCBmZCA9IGRidXNfd2F0Y2hfZ2V0X3VuaXhfZmQody0+d2F0Y2gpOworCQorCWJ1bXBfbWF4ZmQoZmQsIG1heGZkcCk7CisJCisJaWYgKGZsYWdzICYgREJVU19XQVRDSF9SRUFEQUJMRSkKKwkgIEZEX1NFVChmZCwgcnNldCk7CisJCisJaWYgKGZsYWdzICYgREJVU19XQVRDSF9XUklUQUJMRSkKKwkgIEZEX1NFVChmZCwgd3NldCk7CisJCisJRkRfU0VUKGZkLCBlc2V0KTsKKyAgICAgIH0KK30KKwordm9pZCBjaGVja19kYnVzX2xpc3RlbmVycyhmZF9zZXQgKnJzZXQsIGZkX3NldCAqd3NldCwgZmRfc2V0ICplc2V0KQoreworICBEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbiA9IChEQnVzQ29ubmVjdGlvbiAqKWRhZW1vbi0+ZGJ1czsKKyAgc3RydWN0IHdhdGNoICp3OworCisgIGZvciAodyA9IGRhZW1vbi0+d2F0Y2hlczsgdzsgdyA9IHctPm5leHQpCisgICAgaWYgKGRidXNfd2F0Y2hfZ2V0X2VuYWJsZWQody0+d2F0Y2gpKQorICAgICAgeworCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CisJaW50IGZkID0gZGJ1c193YXRjaF9nZXRfdW5peF9mZCh3LT53YXRjaCk7CisJCisJaWYgKEZEX0lTU0VUKGZkLCByc2V0KSkKKwkgIGZsYWdzIHw9IERCVVNfV0FUQ0hfUkVBREFCTEU7CisJCisJaWYgKEZEX0lTU0VUKGZkLCB3c2V0KSkKKwkgIGZsYWdzIHw9IERCVVNfV0FUQ0hfV1JJVEFCTEU7CisJCisJaWYgKEZEX0lTU0VUKGZkLCBlc2V0KSkKKwkgIGZsYWdzIHw9IERCVVNfV0FUQ0hfRVJST1I7CisKKwlpZiAoZmxhZ3MgIT0gMCkKKwkgIGRidXNfd2F0Y2hfaGFuZGxlKHctPndhdGNoLCBmbGFncyk7CisgICAgICB9CisKKyAgaWYgKGNvbm5lY3Rpb24pCisgICAgeworICAgICAgZGJ1c19jb25uZWN0aW9uX3JlZiAoY29ubmVjdGlvbik7CisgICAgICB3aGlsZSAoZGJ1c19jb25uZWN0aW9uX2Rpc3BhdGNoIChjb25uZWN0aW9uKSA9PSBEQlVTX0RJU1BBVENIX0RBVEFfUkVNQUlOUyk7CisgICAgICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWYgKGNvbm5lY3Rpb24pOworICAgIH0KK30KKwordm9pZCBlbWl0X2RidXNfc2lnbmFsKGludCBhY3Rpb24sIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgY2hhciAqaG9zdG5hbWUpCit7CisgIERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uID0gKERCdXNDb25uZWN0aW9uICopZGFlbW9uLT5kYnVzOworICBEQnVzTWVzc2FnZSogbWVzc2FnZSA9IE5VTEw7CisgIERCdXNNZXNzYWdlSXRlciBhcmdzOworICBjaGFyICphY3Rpb25fc3RyLCAqYWRkciwgKm1hYyA9IGRhZW1vbi0+bmFtZWJ1ZmY7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIGludCBpOworCisgIGlmICghY29ubmVjdGlvbikKKyAgICByZXR1cm47CisgIAorICBpZiAoIWhvc3RuYW1lKQorICAgIGhvc3RuYW1lID0gIiI7CisgIAorICBwID0gZXh0ZW5kZWRfaHdhZGRyKGxlYXNlLT5od2FkZHJfdHlwZSwgbGVhc2UtPmh3YWRkcl9sZW4sCisJCSAgICAgIGxlYXNlLT5od2FkZHIsIGxlYXNlLT5jbGlkX2xlbiwgbGVhc2UtPmNsaWQsICZpKTsKKyAgcHJpbnRfbWFjKG1hYywgcCwgaSk7CisgIAorICBpZiAoYWN0aW9uID09IEFDVElPTl9ERUwpCisgICAgYWN0aW9uX3N0ciA9ICJEaGNwTGVhc2VEZWxldGVkIjsKKyAgZWxzZSBpZiAoYWN0aW9uID09IEFDVElPTl9BREQpCisgICAgYWN0aW9uX3N0ciA9ICJEaGNwTGVhc2VBZGRlZCI7CisgIGVsc2UgaWYgKGFjdGlvbiA9PSBBQ1RJT05fT0xEKQorICAgIGFjdGlvbl9zdHIgPSAiRGhjcExlYXNlVXBkYXRlZCI7CisgIGVsc2UKKyAgICByZXR1cm47CisKKyAgYWRkciA9IGluZXRfbnRvYShsZWFzZS0+YWRkcik7CisKKyAgaWYgKCEobWVzc2FnZSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsKEROU01BU1FfUEFUSCwgRE5TTUFTUV9TRVJWSUNFLCBhY3Rpb25fc3RyKSkpCisgICAgcmV0dXJuOworICAKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQobWVzc2FnZSwgJmFyZ3MpOworCisgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMoJmFyZ3MsIERCVVNfVFlQRV9TVFJJTkcsICZhZGRyKSAmJgorICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZhcmdzLCBEQlVTX1RZUEVfU1RSSU5HLCAmbWFjKSAmJgorICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZhcmdzLCBEQlVTX1RZUEVfU1RSSU5HLCAmaG9zdG5hbWUpKQorICAgIGRidXNfY29ubmVjdGlvbl9zZW5kKGNvbm5lY3Rpb24sIG1lc3NhZ2UsIE5VTEwpOworICAKKyAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9kaGNwLmMgYi9zcmMvZGhjcC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMzNWZjMDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGhjcC5jCkBAIC0wLDAgKzEsMTAwMiBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0RIQ1AKKworc3RydWN0IGlmYWNlX3BhcmFtIHsKKyAgc3RydWN0IGluX2FkZHIgcmVsYXksIHByaW1hcnk7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmN1cnJlbnQ7CisgIGludCBpbmQ7Cit9OworCitzdGF0aWMgaW50IGNvbXBsZXRlX2NvbnRleHQoc3RydWN0IGluX2FkZHIgbG9jYWwsIGludCBpZl9pbmRleCwgCisJCQkgICAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgc3RydWN0IGluX2FkZHIgYnJvYWRjYXN0LCB2b2lkICp2cGFyYW0pOworCit2b2lkIGRoY3BfaW5pdCh2b2lkKQoreworICBpbnQgZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FkZHI7CisgIGludCBvbmVvcHQgPSAxOworI2lmIGRlZmluZWQoSVBfTVRVX0RJU0NPVkVSKSAmJiBkZWZpbmVkKElQX1BNVFVESVNDX0RPTlQpCisgIGludCBtdHUgPSBJUF9QTVRVRElTQ19ET05UOworI2VuZGlmCisKKyAgaWYgKGZkID09IC0xKQorICAgIGRpZSAoXygiY2Fubm90IGNyZWF0ZSBESENQIHNvY2tldDogJXMiKSwgTlVMTCwgRUNfQkFETkVUKTsKKyAgCisgIGlmICghZml4X2ZkKGZkKSB8fAorI2lmIGRlZmluZWQoSVBfTVRVX0RJU0NPVkVSKSAmJiBkZWZpbmVkKElQX1BNVFVESVNDX0RPTlQpCisgICAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfSVAsIElQX01UVV9ESVNDT1ZFUiwgJm10dSwgc2l6ZW9mKG10dSkpID09IC0xIHx8CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgICAgIHNldHNvY2tvcHQoZmQsIFNPTF9JUCwgSVBfUEtUSU5GTywgJm9uZW9wdCwgc2l6ZW9mKG9uZW9wdCkpID09IC0xIHx8CisjZWxzZQorICAgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgSVBfUkVDVklGLCAmb25lb3B0LCBzaXplb2Yob25lb3B0KSkgPT0gLTEgfHwKKyNlbmRpZgorICAgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fQlJPQURDQVNULCAmb25lb3B0LCBzaXplb2Yob25lb3B0KSkgPT0gLTEpICAKKyAgICBkaWUoXygiZmFpbGVkIHRvIHNldCBvcHRpb25zIG9uIERIQ1Agc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworICAKKyAgLyogV2hlbiBiaW5kLWludGVyZmFjZXMgaXMgc2V0LCB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gb25lIGRubXNhc3EKKyAgICAgaW5zdGFuY2UgYmluZGluZyBwb3J0IDY3LiBUaGF0J3MgT0sgaWYgdGhleSBzZXJ2ZSBkaWZmZXJlbnQgbmV0d29ya3MuCisgICAgIE5lZWQgdG8gc2V0IFJFVVNFQUREUiB0byBtYWtlIHRoaXMgcG9zaWJsZSwgb3IgUkVVU0VQT1JUIG9uICpCU0QuICovCisgIGlmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTk9XSUxEKQorICAgIHsKKyNpZmRlZiBTT19SRVVTRVBPUlQKKyAgICAgIGludCByYyA9IHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFUE9SVCwgJm9uZW9wdCwgc2l6ZW9mKG9uZW9wdCkpOworI2Vsc2UKKyAgICAgIGludCByYyA9IHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9uZW9wdCwgc2l6ZW9mKG9uZW9wdCkpOworI2VuZGlmCisgICAgICBpZiAocmMgPT0gLTEpCisJZGllKF8oImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQIHNvY2tldDogJXMiKSwgTlVMTCwgRUNfQkFETkVUKTsKKyAgICB9CisgIAorICBtZW1zZXQoJnNhZGRyLCAwLCBzaXplb2Yoc2FkZHIpKTsKKyAgc2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgIHNhZGRyLnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5kaGNwX3NlcnZlcl9wb3J0KTsKKyAgc2FkZHIuc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICBzYWRkci5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKworICBpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpKQorICAgIGRpZShfKCJmYWlsZWQgdG8gYmluZCBESENQIHNlcnZlciBzb2NrZXQ6ICVzIiksIE5VTEwsIEVDX0JBRE5FVCk7CisKKyAgZGFlbW9uLT5kaGNwZmQgPSBmZDsKKworI2lmIGRlZmluZWQoSEFWRV9CU0RfTkVUV09SSykKKyAgLyogV2hlbiB3ZSdyZSBub3QgdXNpbmcgY2FwYWJpbGl0aWVzLCB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSBiZWZvcmUKKyAgICAgd2UgZHJvcCByb290LiBBbHNvLCBzZXQgYnVmZmVyIHNpemUgc21hbGwsIHRvIGF2b2lkIHdhc3RpbmcKKyAgICAga2VybmVsIGJ1ZmZlcnMgKi8KKyAgCisgIGlmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTk9fUElORykKKyAgICBkYWVtb24tPmRoY3BfaWNtcF9mZCA9IC0xOworICBlbHNlIGlmICgoZGFlbW9uLT5kaGNwX2ljbXBfZmQgPSBtYWtlX2ljbXBfc29jaygpKSA9PSAtMSB8fAorCSAgIHNldHNvY2tvcHQoZGFlbW9uLT5kaGNwX2ljbXBfZmQsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJm9uZW9wdCwgc2l6ZW9mKG9uZW9wdCkpID09IC0xICkKKyAgICBkaWUoXygiY2Fubm90IGNyZWF0ZSBJQ01QIHJhdyBzb2NrZXQ6ICVzLiIpLCBOVUxMLCBFQ19CQURORVQpOworICAKKyAgLyogTWFrZSBCUEYgcmF3IHNlbmQgc29ja2V0ICovCisgIGluaXRfYnBmKCk7CisjZW5kaWYKKyAgCisgIGNoZWNrX2RoY3BfaG9zdHMoMSk7CisgICAgCisgIGRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2xlbiA9IHNpemVvZihzdHJ1Y3QgZGhjcF9wYWNrZXQpOyAKKyAgZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfYmFzZSA9IHNhZmVfbWFsbG9jKGRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2xlbik7Cit9CisgIAordm9pZCBkaGNwX3BhY2tldCh0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3M7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIHN0cnVjdCBpbmFtZSAqdG1wOworICBzdHJ1Y3QgaWZyZXEgaWZyOworICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKyAgc3RydWN0IHNvY2thZGRyX2luIGRlc3Q7CisgIHN0cnVjdCBjbXNnaGRyICpjbXB0cjsKKyAgc3RydWN0IGlvdmVjIGlvdjsKKyAgc3NpemVfdCBzejsgCisgIGludCBpZmFjZV9pbmRleCA9IDAsIHVuaWNhc3RfZGVzdCA9IDAsIGlzX2luZm9ybSA9IDA7CisgIHN0cnVjdCBpbl9hZGRyIGlmYWNlX2FkZHIsICphZGRycCA9IE5VTEw7CisgIHN0cnVjdCBpZmFjZV9wYXJhbSBwYXJtOworCisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgY21zZ2hkciBhbGlnbjsgLyogdGhpcyBlbnN1cmVzIGFsaWdubWVudCAqLworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpXTsKKyNlbGlmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHVuc2lnbmVkIGludCkpXTsKKyNlbGlmIGRlZmluZWQoSEFWRV9CU0RfTkVUV09SSykgCisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9kbCkpXTsKKyNlbmRpZgorICB9IGNvbnRyb2xfdTsKKyAgCisgIG1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisgIG1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisgIG1zZy5tc2dfbmFtZSA9IE5VTEw7CisgIG1zZy5tc2dfbmFtZWxlbiA9IDA7CisgIG1zZy5tc2dfaW92ID0gJmRhZW1vbi0+ZGhjcF9wYWNrZXQ7CisgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIG1zZy5tc2dfZmxhZ3MgPSAwOworICAgICAgd2hpbGUgKChzeiA9IHJlY3Ztc2coZGFlbW9uLT5kaGNwZmQsICZtc2csIE1TR19QRUVLIHwgTVNHX1RSVU5DKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworICAgICAgCisgICAgICBpZiAoc3ogPT0gLTEpCisJcmV0dXJuOworICAgICAgCisgICAgICBpZiAoIShtc2cubXNnX2ZsYWdzICYgTVNHX1RSVU5DKSkKKwlicmVhazsKKworICAgICAgLyogVmVyeSBuZXcgTGludXgga2VybmVscyByZXR1cm4gdGhlIGFjdHVhbCBzaXplIG5lZWRlZCwgCisJIG9sZGVyIG9uZXMgYWx3YXlzIHJldHVybiB0cnVuY2F0ZWQgc2l6ZSAqLworICAgICAgaWYgKChzaXplX3Qpc3ogPT0gZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfbGVuKQorCXsKKwkgIGlmICghZXhwYW5kX2J1ZigmZGFlbW9uLT5kaGNwX3BhY2tldCwgc3ogKyAxMDApKQorCSAgICByZXR1cm47CisJfQorICAgICAgZWxzZQorCXsKKwkgIGV4cGFuZF9idWYoJmRhZW1vbi0+ZGhjcF9wYWNrZXQsIHN6KTsKKwkgIGJyZWFrOworCX0KKyAgICB9CisgIAorICAvKiBleHBhbmRfYnVmIG1heSBoYXZlIG1vdmVkIGJ1ZmZlciAqLworICBtZXNzID0gKHN0cnVjdCBkaGNwX3BhY2tldCAqKWRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2Jhc2U7CisgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sX3UpOworICBtc2cubXNnX2NvbnRyb2wgPSBjb250cm9sX3UuY29udHJvbDsKKyAgbXNnLm1zZ19mbGFncyA9IDA7CisgIG1zZy5tc2dfbmFtZSA9ICZkZXN0OworICBtc2cubXNnX25hbWVsZW4gPSBzaXplb2YoZGVzdCk7CisKKyAgd2hpbGUgKChzeiA9IHJlY3Ztc2coZGFlbW9uLT5kaGNwZmQsICZtc2csIDApKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgCisgIGlmICgobXNnLm1zZ19mbGFncyAmIE1TR19UUlVOQykgfHwgc3ogPCAoc3NpemVfdCkoc2l6ZW9mKCptZXNzKSAtIHNpemVvZihtZXNzLT5vcHRpb25zKSkpCisgICAgcmV0dXJuOworICAKKyNpZiBkZWZpbmVkIChIQVZFX0xJTlVYX05FVFdPUkspCisgIGlmIChtc2cubXNnX2NvbnRyb2xsZW4gPj0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkKKyAgICBmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorICAgICAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IFNPTF9JUCAmJiBjbXB0ci0+Y21zZ190eXBlID09IElQX1BLVElORk8pCisJeworCSAgaWZhY2VfaW5kZXggPSAoKHN0cnVjdCBpbl9wa3RpbmZvICopQ01TR19EQVRBKGNtcHRyKSktPmlwaV9pZmluZGV4OworCSAgaWYgKCgoc3RydWN0IGluX3BrdGluZm8gKilDTVNHX0RBVEEoY21wdHIpKS0+aXBpX2FkZHIuc19hZGRyICE9IElOQUREUl9CUk9BRENBU1QpCisJICAgIHVuaWNhc3RfZGVzdCA9IDE7CisJfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspIAorICBpZiAobXNnLm1zZ19jb250cm9sbGVuID49IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpCisgICAgZm9yIChjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtcHRyOyBjbXB0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtcHRyKSkKKyAgICAgIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtcHRyLT5jbXNnX3R5cGUgPT0gSVBfUkVDVklGKQorICAgICAgICBpZmFjZV9pbmRleCA9ICgoc3RydWN0IHNvY2thZGRyX2RsICopQ01TR19EQVRBKGNtcHRyKSktPnNkbF9pbmRleDsKKworICAKKyNlbGlmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspIAorICBpZiAobXNnLm1zZ19jb250cm9sbGVuID49IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpCisgICAgZm9yIChjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtcHRyOyBjbXB0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtcHRyKSkKKyAgICAgIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtcHRyLT5jbXNnX3R5cGUgPT0gSVBfUkVDVklGKQorCWlmYWNlX2luZGV4ID0gKigodW5zaWduZWQgaW50ICopQ01TR19EQVRBKGNtcHRyKSk7CisJICAKKyNlbmRpZgorCQorICBpZiAoIWluZGV4dG9uYW1lKGRhZW1vbi0+ZGhjcGZkLCBpZmFjZV9pbmRleCwgaWZyLmlmcl9uYW1lKSkKKyAgICByZXR1cm47CisKKyNpZmRlZiBNU0dfQkNBU1QKKyAgLyogT3BlbkJTRCB0ZWxscyB1cyB3aGVuIGEgcGFja2V0IHdhcyBicm9hZGNhc3QgKi8KKyAgaWYgKCEobXNnLm1zZ19mbGFncyAmIE1TR19CQ0FTVCkpCisgICAgdW5pY2FzdF9kZXN0ID0gMTsKKyNlbmRpZgorCisgIGlmci5pZnJfYWRkci5zYV9mYW1pbHkgPSBBRl9JTkVUOworICBpZiAoaW9jdGwoZGFlbW9uLT5kaGNwZmQsIFNJT0NHSUZBRERSLCAmaWZyKSAhPSAtMSApCisgICAgeworICAgICAgYWRkcnAgPSAmaWZhY2VfYWRkcjsKKyAgICAgIGlmYWNlX2FkZHIgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmaWZyLmlmcl9hZGRyKS0+c2luX2FkZHI7CisgICAgfQorCisgIGlmICghaWZhY2VfY2hlY2soQUZfSU5FVCwgKHN0cnVjdCBhbGxfYWRkciAqKWFkZHJwLCBpZnIuaWZyX25hbWUsICZpZmFjZV9pbmRleCkpCisgICAgcmV0dXJuOworICAKKyAgZm9yICh0bXAgPSBkYWVtb24tPmRoY3BfZXhjZXB0OyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKyAgICBpZiAodG1wLT5uYW1lICYmIChzdHJjbXAodG1wLT5uYW1lLCBpZnIuaWZyX25hbWUpID09IDApKQorICAgICAgcmV0dXJuOworICAKKyAgLyogaW50ZXJmYWNlIG1heSBoYXZlIGJlZW4gY2hhbmdlZCBieSBhbGlhcyBpbiBpZmFjZV9jaGVjayAqLworICBpZiAoIWFkZHJwKQorICAgIHsKKyAgICAgIGlmIChpb2N0bChkYWVtb24tPmRoY3BmZCwgU0lPQ0dJRkFERFIsICZpZnIpID09IC0xKQorCXsKKwkgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oIkRIQ1AgcGFja2V0IHJlY2VpdmVkIG9uICVzIHdoaWNoIGhhcyBubyBhZGRyZXNzIiksIGlmci5pZnJfbmFtZSk7CisJICByZXR1cm47CisJfQorICAgICAgZWxzZQorCWlmYWNlX2FkZHIgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmaWZyLmlmcl9hZGRyKS0+c2luX2FkZHI7CisgICAgfQorICAKKyAgLyogdW5saW5rZWQgY29udGV4dHMgYXJlIG1hcmtlZCBieSBjb250ZXh0LT5jdXJyZW50ID09IGNvbnRleHQgKi8KKyAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwOyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+bmV4dCkKKyAgICBjb250ZXh0LT5jdXJyZW50ID0gY29udGV4dDsKKyAgCisgIHBhcm0ucmVsYXkgPSBtZXNzLT5naWFkZHI7CisgIHBhcm0ucHJpbWFyeSA9IGlmYWNlX2FkZHI7CisgIHBhcm0uY3VycmVudCA9IE5VTEw7CisgIHBhcm0uaW5kID0gaWZhY2VfaW5kZXg7CisKKyAgaWYgKCFpZmFjZV9lbnVtZXJhdGUoJnBhcm0sIGNvbXBsZXRlX2NvbnRleHQsIE5VTEwpKQorICAgIHJldHVybjsKKyAgbGVhc2VfcHJ1bmUoTlVMTCwgbm93KTsgLyogbG9zZSBhbnkgZXhwaXJlZCBsZWFzZXMgKi8KKyAgaW92Lmlvdl9sZW4gPSBkaGNwX3JlcGx5KHBhcm0uY3VycmVudCwgaWZyLmlmcl9uYW1lLCBpZmFjZV9pbmRleCwgKHNpemVfdClzeiwgCisJCQkgICBub3csIHVuaWNhc3RfZGVzdCwgJmlzX2luZm9ybSk7CisgIGxlYXNlX3VwZGF0ZV9maWxlKG5vdyk7CisgIGxlYXNlX3VwZGF0ZV9kbnMoKTsKKyAgICAKKyAgaWYgKGlvdi5pb3ZfbGVuID09IDApCisgICAgcmV0dXJuOworICAKKyAgbXNnLm1zZ19uYW1lID0gJmRlc3Q7CisgIG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihkZXN0KTsKKyAgbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKyAgbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKyAgbXNnLm1zZ19pb3YgPSAmaW92OworICBpb3YuaW92X2Jhc2UgPSBkYWVtb24tPmRoY3BfcGFja2V0Lmlvdl9iYXNlOworICAKKyAgLyogcGFja2V0IGJ1ZmZlciBtYXkgaGF2ZSBtb3ZlZCAqLworICBtZXNzID0gKHN0cnVjdCBkaGNwX3BhY2tldCAqKWRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2Jhc2U7CisgIAorI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIGRlc3Quc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisgICAgIAorICBpZiAobWVzcy0+Z2lhZGRyLnNfYWRkcikKKyAgICB7CisgICAgICAvKiBTZW5kIHRvIEJPT1RQIHJlbGF5ICAqLworICAgICAgZGVzdC5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+ZGhjcF9zZXJ2ZXJfcG9ydCk7CisgICAgICBkZXN0LnNpbl9hZGRyID0gbWVzcy0+Z2lhZGRyOyAKKyAgICB9CisgIGVsc2UgaWYgKG1lc3MtPmNpYWRkci5zX2FkZHIpCisgICAgeworICAgICAgLyogSWYgdGhlIGNsaWVudCdzIGlkZWEgb2YgaXRzIG93biBhZGRyZXNzIHRhbGx5cyB3aXRoCisJIHRoZSBzb3VyY2UgYWRkcmVzcyBpbiB0aGUgcmVxdWVzdCBwYWNrZXQsIHdlIGJlbGlldmUgdGhlCisJIHNvdXJjZSBwb3J0IHRvbywgYW5kIHNlbmQgYmFjayB0byB0aGF0LiAgSWYgd2UncmUgcmVwbHlpbmcgCisJIHRvIGEgREhDUElORk9STSwgdHJ1c3QgdGhlIHNvdXJjZSBhZGRyZXNzIGFsd2F5cy4gKi8KKyAgICAgIGlmICgoIWlzX2luZm9ybSAmJiBkZXN0LnNpbl9hZGRyLnNfYWRkciAhPSBtZXNzLT5jaWFkZHIuc19hZGRyKSB8fAorCSAgZGVzdC5zaW5fcG9ydCA9PSAwIHx8IGRlc3Quc2luX2FkZHIuc19hZGRyID09IDApCisJeworCSAgZGVzdC5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+ZGhjcF9jbGllbnRfcG9ydCk7IAorCSAgZGVzdC5zaW5fYWRkciA9IG1lc3MtPmNpYWRkcjsKKwl9CisgICAgfSAKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgZWxzZSBpZiAoKG50b2hzKG1lc3MtPmZsYWdzKSAmIDB4ODAwMCkgfHwgbWVzcy0+aGxlbiA9PSAwIHx8CisJICAgbWVzcy0+aGxlbiA+IHNpemVvZihpZnIuaWZyX2FkZHIuc2FfZGF0YSkgfHwgbWVzcy0+aHR5cGUgPT0gMCkKKyAgICB7CisgICAgICAvKiBicm9hZGNhc3QgdG8gMjU1LjI1NS4yNTUuMjU1IChvciBtYWMgYWRkcmVzcyBpbnZhbGlkKSAqLworICAgICAgc3RydWN0IGluX3BrdGluZm8gKnBrdDsKKyAgICAgIG1zZy5tc2dfY29udHJvbCA9IGNvbnRyb2xfdS5jb250cm9sOworICAgICAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2xfdSk7CisgICAgICBjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7CisgICAgICBwa3QgPSAoc3RydWN0IGluX3BrdGluZm8gKilDTVNHX0RBVEEoY21wdHIpOworICAgICAgcGt0LT5pcGlfaWZpbmRleCA9IGlmYWNlX2luZGV4OworICAgICAgcGt0LT5pcGlfc3BlY19kc3Quc19hZGRyID0gMDsKKyAgICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IGNtcHRyLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpOworICAgICAgY21wdHItPmNtc2dfbGV2ZWwgPSBTT0xfSVA7CisgICAgICBjbXB0ci0+Y21zZ190eXBlID0gSVBfUEtUSU5GTzsgIAorICAgICAgZGVzdC5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQlJPQURDQVNUOworICAgICAgZGVzdC5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+ZGhjcF9jbGllbnRfcG9ydCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogdW5pY2FzdCB0byB1bmNvbmZpZ3VyZWQgY2xpZW50LiBJbmplY3QgbWFjIGFkZHJlc3MgZGlyZWN0IGludG8gQVJQIGNhY2hlLiAKKwkgc3RydWN0IHNvY2thZGRyIGxpbWl0cyBzaXplIHRvIDE0IGJ5dGVzLiAqLworICAgICAgc3RydWN0IGFycHJlcSByZXE7CisgICAgICBkZXN0LnNpbl9hZGRyID0gbWVzcy0+eWlhZGRyOworICAgICAgZGVzdC5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+ZGhjcF9jbGllbnRfcG9ydCk7CisgICAgICAqKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmcmVxLmFycF9wYSkgPSBkZXN0OworICAgICAgcmVxLmFycF9oYS5zYV9mYW1pbHkgPSBtZXNzLT5odHlwZTsKKyAgICAgIG1lbWNweShyZXEuYXJwX2hhLnNhX2RhdGEsIG1lc3MtPmNoYWRkciwgbWVzcy0+aGxlbik7CisgICAgICBzdHJuY3B5KHJlcS5hcnBfZGV2LCBpZnIuaWZyX25hbWUsIDE2KTsKKyAgICAgIHJlcS5hcnBfZmxhZ3MgPSBBVEZfQ09NOworICAgICAgaW9jdGwoZGFlbW9uLT5kaGNwZmQsIFNJT0NTQVJQLCAmcmVxKTsKKyAgICB9CisjZWxpZiBkZWZpbmVkKEhBVkVfU09MQVJJU19ORVRXT1JLKQorICBlbHNlIGlmICgobnRvaHMobWVzcy0+ZmxhZ3MpICYgMHg4MDAwKSB8fCBtZXNzLT5obGVuICE9IEVUSEVSX0FERFJfTEVOIHx8IG1lc3MtPmh0eXBlICE9IEFSUEhSRF9FVEhFUikKKyAgICB7CisgICAgICAvKiBicm9hZGNhc3QgdG8gMjU1LjI1NS4yNTUuMjU1IChvciBtYWMgYWRkcmVzcyBpbnZhbGlkKSAqLworICAgICAgZGVzdC5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQlJPQURDQVNUOworICAgICAgZGVzdC5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+ZGhjcF9jbGllbnRfcG9ydCk7CisgICAgICAvKiBub3RlIHRoYXQgd2UgZG9uJ3Qgc3BlY2lmeSB0aGUgaW50ZXJmYWNlIGhlcmU6IHRoYXQncyBkb25lIGJ5IHRoZQorCSBJUF9CT1VORF9JRiBzb2Nrb3B0IGxvd2VyIGRvd24uICovCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogdW5pY2FzdCB0byB1bmNvbmZpZ3VyZWQgY2xpZW50LiBJbmplY3QgbWFjIGFkZHJlc3MgZGlyZWN0IGludG8gQVJQIGNhY2hlLiAKKwkgTm90ZSB0aGF0IHRoaXMgb25seSB3b3JrcyBmb3IgZXRoZXJuZXQgb24gc29sYXJpcywgYmVjYXVzZSB3ZSB1c2UgU0lPQ1NBUlAKKwkgYW5kIG5vdCBTSU9DU1hBUlAsIHdoaWNoIHdvdWxkIGJlIHBlcmZlY3QsIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgRU5YSU8gCisJIG15c3RlcmlvdXNseS4gQmFoLiBGYWxsIGJhY2sgdG8gYnJvYWRjYXN0IGZvciBvdGhlciBuZXQgdHlwZXMuICovCisgICAgICBzdHJ1Y3QgYXJwcmVxIHJlcTsKKyAgICAgIGRlc3Quc2luX2FkZHIgPSBtZXNzLT55aWFkZHI7CisgICAgICBkZXN0LnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5kaGNwX2NsaWVudF9wb3J0KTsKKyAgICAgICooKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZyZXEuYXJwX3BhKSA9IGRlc3Q7CisgICAgICByZXEuYXJwX2hhLnNhX2ZhbWlseSA9IEFGX1VOU1BFQzsKKyAgICAgIG1lbWNweShyZXEuYXJwX2hhLnNhX2RhdGEsIG1lc3MtPmNoYWRkciwgbWVzcy0+aGxlbik7CisgICAgICByZXEuYXJwX2ZsYWdzID0gQVRGX0NPTTsKKyAgICAgIGlvY3RsKGRhZW1vbi0+ZGhjcGZkLCBTSU9DU0FSUCwgJnJlcSk7CisgICAgfQorI2VsaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKQorICBlbHNlIAorICAgIHsKKyAgICAgIHNlbmRfdmlhX2JwZihtZXNzLCBpb3YuaW92X2xlbiwgaWZhY2VfYWRkciwgJmlmcik7CisgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAKKyNpZmRlZiBIQVZFX1NPTEFSSVNfTkVUV09SSworICBzZXRzb2Nrb3B0KGRhZW1vbi0+ZGhjcGZkLCBJUFBST1RPX0lQLCBJUF9CT1VORF9JRiwgJmlmYWNlX2luZGV4LCBzaXplb2YoaWZhY2VfaW5kZXgpKTsKKyNlbmRpZgorICAKKyAgd2hpbGUoc2VuZG1zZyhkYWVtb24tPmRoY3BmZCwgJm1zZywgMCkgPT0gLTEgJiYgcmV0cnlfc2VuZCgpKTsKK30KKyAKKy8qIFRoaXMgaXMgYSBjb21wbGV4IHJvdXRpbmU6IGl0IGdldHMgY2FsbGVkIHdpdGggZWFjaCAoYWRkcmVzcyxuZXRtYXNrLGJyb2FkY2FzdCkgdHJpcGxlIAorICAgb2YgZWFjaCBpbnRlcmZhY2UgKGFuZCBhbnkgcmVsYXkgYWRkcmVzcykgYW5kIGRvZXMgdGhlICBmb2xsb3dpbmcgdGhpbmdzOgorCisgICAxKSBEaXNjYXJkcyBzdHVmZiBmb3IgaW50ZXJmYWNlcyBvdGhlciB0aGFuIHRoZSBvbmUgb24gd2hpY2ggYSBESENQIHBhY2tldCBqdXN0IGFycml2ZWQuCisgICAyKSBGaWxscyBpbiBhbnkgbmV0bWFzayBhbmQgYnJvYWRjYXN0IGFkZHJlc3NlcyB3aGljaCBoYXZlIG5vdCBiZWVuIGV4cGxpY2l0bHkgY29uZmlndXJlZC4KKyAgIDMpIEZpbGxzIGluIGxvY2FsICh0aGlzIGhvc3QpIGFuZCByb3V0ZXIgKHRoaXMgaG9zdCBvciByZWxheSkgYWRkcmVzc2VzLgorICAgNCkgTGlua3MgY29udGV4dHMgd2hpY2ggYXJlIHZhbGlkIGZvciBob3N0cyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIGFycml2YWwgaW50ZXJmYWNlIG9uIC0+Y3VycmVudC4KKworICAgTm90ZSB0aGF0IHRoZSBjdXJyZW50IGNoYWluIG1heSBiZSBzdXBlcmNlZGVkIGxhdGVyIGZvciBjb25maWd1cmVkIGhvc3RzIG9yIHRob3NlIGNvbWluZyB2aWEgZ2F0ZXdheXMuICovCisKK3N0YXRpYyBpbnQgY29tcGxldGVfY29udGV4dChzdHJ1Y3QgaW5fYWRkciBsb2NhbCwgaW50IGlmX2luZGV4LCAKKwkJCSAgICBzdHJ1Y3QgaW5fYWRkciBuZXRtYXNrLCBzdHJ1Y3QgaW5fYWRkciBicm9hZGNhc3QsIHZvaWQgKnZwYXJhbSkKK3sKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dDsKKyAgc3RydWN0IGlmYWNlX3BhcmFtICpwYXJhbSA9IHZwYXJhbTsKKyAgCisgIGZvciAoY29udGV4dCA9IGRhZW1vbi0+ZGhjcDsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisgICAgeworICAgICAgaWYgKCEoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX05FVE1BU0spICYmCisJICAoaXNfc2FtZV9uZXQobG9jYWwsIGNvbnRleHQtPnN0YXJ0LCBuZXRtYXNrKSB8fAorCSAgIGlzX3NhbWVfbmV0KGxvY2FsLCBjb250ZXh0LT5lbmQsIG5ldG1hc2spKSkKKyAgICAgIHsgCisJaWYgKGNvbnRleHQtPm5ldG1hc2suc19hZGRyICE9IG5ldG1hc2suc19hZGRyICYmCisJICAgICEoaXNfc2FtZV9uZXQobG9jYWwsIGNvbnRleHQtPnN0YXJ0LCBuZXRtYXNrKSAmJgorCSAgICAgIGlzX3NhbWVfbmV0KGxvY2FsLCBjb250ZXh0LT5lbmQsIG5ldG1hc2spKSkKKwkgIHsKKwkgICAgc3RyY3B5KGRhZW1vbi0+ZGhjcF9idWZmLCBpbmV0X250b2EoY29udGV4dC0+c3RhcnQpKTsKKwkgICAgc3RyY3B5KGRhZW1vbi0+ZGhjcF9idWZmMiwgaW5ldF9udG9hKGNvbnRleHQtPmVuZCkpOworCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIpLAorCQkgICAgICBkYWVtb24tPmRoY3BfYnVmZiwgZGFlbW9uLT5kaGNwX2J1ZmYyLCBpbmV0X250b2EobmV0bWFzaykpOworCSAgfQkKKyAJY29udGV4dC0+bmV0bWFzayA9IG5ldG1hc2s7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChjb250ZXh0LT5uZXRtYXNrLnNfYWRkcikKKwl7CisJICBpZiAoaXNfc2FtZV9uZXQobG9jYWwsIGNvbnRleHQtPnN0YXJ0LCBjb250ZXh0LT5uZXRtYXNrKSAmJgorCSAgICAgIGlzX3NhbWVfbmV0KGxvY2FsLCBjb250ZXh0LT5lbmQsIGNvbnRleHQtPm5ldG1hc2spKQorCSAgICB7CisJICAgICAgLyogbGluayBpdCBvbnRvIHRoZSBjdXJyZW50IGNoYWluIGlmIHdlJ3ZlIG5vdCBzZWVuIGl0IGJlZm9yZSAqLworCSAgICAgIGlmIChpZl9pbmRleCA9PSBwYXJhbS0+aW5kICYmIGNvbnRleHQtPmN1cnJlbnQgPT0gY29udGV4dCkKKwkJeworCQkgIGNvbnRleHQtPnJvdXRlciA9IGxvY2FsOworCQkgIGNvbnRleHQtPmxvY2FsID0gbG9jYWw7CisJCSAgY29udGV4dC0+Y3VycmVudCA9IHBhcmFtLT5jdXJyZW50OworCQkgIHBhcmFtLT5jdXJyZW50ID0gY29udGV4dDsKKwkJfQorCSAgICAgIAorCSAgICAgIGlmICghKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9CUkRDQVNUKSkKKwkJeworCQkgIGlmIChpc19zYW1lX25ldChicm9hZGNhc3QsIGNvbnRleHQtPnN0YXJ0LCBjb250ZXh0LT5uZXRtYXNrKSkKKwkJICAgIGNvbnRleHQtPmJyb2FkY2FzdCA9IGJyb2FkY2FzdDsKKwkJICBlbHNlIAorCQkgICAgY29udGV4dC0+YnJvYWRjYXN0LnNfYWRkciAgPSBjb250ZXh0LT5zdGFydC5zX2FkZHIgfCB+Y29udGV4dC0+bmV0bWFzay5zX2FkZHI7CisJCX0KKwkgICAgfQkKKwkgIGVsc2UgaWYgKHBhcmFtLT5yZWxheS5zX2FkZHIgJiYgaXNfc2FtZV9uZXQocGFyYW0tPnJlbGF5LCBjb250ZXh0LT5zdGFydCwgY29udGV4dC0+bmV0bWFzaykpCisJICAgIHsKKwkgICAgICBjb250ZXh0LT5yb3V0ZXIgPSBwYXJhbS0+cmVsYXk7CisJICAgICAgY29udGV4dC0+bG9jYWwgPSBwYXJhbS0+cHJpbWFyeTsKKwkgICAgICAvKiBmaWxsIGluIG1pc3NpbmcgYnJvYWRjYXN0IGFkZHJlc3NlcyBmb3IgcmVsYXllZCByYW5nZXMgKi8KKwkgICAgICBpZiAoIShjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfQlJEQ0FTVCkpCisJCWNvbnRleHQtPmJyb2FkY2FzdC5zX2FkZHIgID0gY29udGV4dC0+c3RhcnQuc19hZGRyIHwgfmNvbnRleHQtPm5ldG1hc2suc19hZGRyOworCSAgICB9CisKKwl9CisgICAgfQorCisgIHJldHVybiAxOworfQorCSAgCitzdHJ1Y3QgZGhjcF9jb250ZXh0ICphZGRyZXNzX2F2YWlsYWJsZShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCAKKwkJCQkgICAgICAgc3RydWN0IGluX2FkZHIgdGFkZHIsCisJCQkJICAgICAgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZHMpCit7CisgIC8qIENoZWNrIGlzIGFuIGFkZHJlc3MgaXMgT0sgZm9yIHRoaXMgbmV0d29yaywgY2hlY2sgYWxsCisgICAgIHBvc3NpYmxlIHJhbmdlcy4gTWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3MgaXNuJ3QgaW4gdXNlCisgICAgIGJ5IHRoZSBzZXJ2ZXIgaXRzZWxmLiAqLworICAKKyAgdW5zaWduZWQgaW50IHN0YXJ0LCBlbmQsIGFkZHIgPSBudG9obCh0YWRkci5zX2FkZHIpOworICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICp0bXA7CisKKyAgZm9yICh0bXAgPSBjb250ZXh0OyB0bXA7IHRtcCA9IHRtcC0+Y3VycmVudCkKKyAgICBpZiAodGFkZHIuc19hZGRyID09IGNvbnRleHQtPnJvdXRlci5zX2FkZHIpCisgICAgICByZXR1cm4gTlVMTDsKKyAgCisgIGZvciAodG1wID0gY29udGV4dDsgdG1wOyB0bXAgPSB0bXAtPmN1cnJlbnQpCisgICAgeworICAgICAgc3RhcnQgPSBudG9obCh0bXAtPnN0YXJ0LnNfYWRkcik7CisgICAgICBlbmQgPSBudG9obCh0bXAtPmVuZC5zX2FkZHIpOworCisgICAgICBpZiAoISh0bXAtPmZsYWdzICYgQ09OVEVYVF9TVEFUSUMpICYmCisJICBhZGRyID49IHN0YXJ0ICYmCisJICBhZGRyIDw9IGVuZCAmJgorCSAgbWF0Y2hfbmV0aWQodG1wLT5maWx0ZXIsIG5ldGlkcywgMSkpCisJcmV0dXJuIHRtcDsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBkaGNwX2NvbnRleHQgKm5hcnJvd19jb250ZXh0KHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIAorCQkJCSAgICBzdHJ1Y3QgaW5fYWRkciB0YWRkciwKKwkJCQkgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkcykKK3sKKyAgLyogV2Ugc3RhcnQgb2Ygd2l0aCBhIHNldCBvZiBwb3NzaWJsZSBjb250ZXh0cywgYWxsIG9uIHRoZSBjdXJyZW50IHBoeXNpY2FsIGludGVyZmFjZS4KKyAgICAgVGhlc2UgYXJlIGNoYWluZWQgb24gLT5jdXJyZW50LgorICAgICBIZXJlIHdlIGhhdmUgYW4gYWRkcmVzcywgYW5kIHJldHVybiB0aGUgYWN0dWFsIGNvbnRleHQgY29ycmVwb25kaW5nIHRvIHRoYXQKKyAgICAgYWRkcmVzcy4gTm90ZSB0aGF0IG5vbmUgbWF5IGZpdCwgaWYgdGhlIGFkZHJlc3MgY2FtZSBhIGRoY3AtaG9zdCBhbmQgaXMgb3V0c2lkZQorICAgICBhbnkgZGhjcC1yYW5nZS4gSW4gdGhhdCBjYXNlIHdlIHJldHVybiBhIHN0YXRpYyByYW5nZSBpZiBwb3NzaWJsZSwgb3IgZmFpbGluZyB0aGF0LAorICAgICBhbnkgY29udGV4dCBvbiB0aGUgY29ycmVjdCBzdWJuZXQuIChJZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUsIHRoaXMgaXMgYSBkb2RneSAKKyAgICAgY29uZmlndXJhdGlvbjogbWF5YmUgdGhlcmUgc2hvdWxkIGJlIGEgd2FybmluZy4pICovCisgIAorICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICp0bXA7CisKKyAgaWYgKCEodG1wID0gYWRkcmVzc19hdmFpbGFibGUoY29udGV4dCwgdGFkZHIsIG5ldGlkcykpKQorICAgIHsKKyAgICAgIGZvciAodG1wID0gY29udGV4dDsgdG1wOyB0bXAgPSB0bXAtPmN1cnJlbnQpCisJaWYgKGlzX3NhbWVfbmV0KHRhZGRyLCB0bXAtPnN0YXJ0LCB0bXAtPm5ldG1hc2spICYmIAorCSAgICAodG1wLT5mbGFncyAmIENPTlRFWFRfU1RBVElDKSkKKwkgIGJyZWFrOworICAgICAgCisgICAgICBpZiAoIXRtcCkKKwlmb3IgKHRtcCA9IGNvbnRleHQ7IHRtcDsgdG1wID0gdG1wLT5jdXJyZW50KQorCSAgaWYgKGlzX3NhbWVfbmV0KHRhZGRyLCB0bXAtPnN0YXJ0LCB0bXAtPm5ldG1hc2spKQorCSAgICBicmVhazsKKyAgICB9CisgIAorICAvKiBPbmx5IG9uZSBjb250ZXh0IGFsbG93ZWQgbm93ICovCisgIGlmICh0bXApCisgICAgdG1wLT5jdXJyZW50ID0gTlVMTDsKKyAgCisgIHJldHVybiB0bXA7Cit9CisKK3N0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnX2ZpbmRfYnlfYWRkcmVzcyhzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZ3MsIHN0cnVjdCBpbl9hZGRyIGFkZHIpCit7CisgIHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnOworICAKKyAgZm9yIChjb25maWcgPSBjb25maWdzOyBjb25maWc7IGNvbmZpZyA9IGNvbmZpZy0+bmV4dCkKKyAgICBpZiAoKGNvbmZpZy0+ZmxhZ3MgJiBDT05GSUdfQUREUikgJiYgY29uZmlnLT5hZGRyLnNfYWRkciA9PSBhZGRyLnNfYWRkcikKKyAgICAgIHJldHVybiBjb25maWc7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIElzIGV2ZXJ5IG1lbWJlciBvZiBjaGVjayBtYXRjaGVkIGJ5IGEgbWVtYmVyIG9mIHBvb2w/IAorICAgSWYgdGFnbm90bmVlZGVkLCB1bnRhZ2dlZCBpcyBPSyAqLworaW50IG1hdGNoX25ldGlkKHN0cnVjdCBkaGNwX25ldGlkICpjaGVjaywgc3RydWN0IGRoY3BfbmV0aWQgKnBvb2wsIGludCB0YWdub3RuZWVkZWQpCit7CisgIHN0cnVjdCBkaGNwX25ldGlkICp0bXAxOworICAKKyAgaWYgKCFjaGVjayAmJiAhdGFnbm90bmVlZGVkKQorICAgIHJldHVybiAwOworCisgIGZvciAoOyBjaGVjazsgY2hlY2sgPSBjaGVjay0+bmV4dCkKKyAgICB7CisgICAgICBpZiAoY2hlY2stPm5ldFswXSAhPSAnIycpCisJeworCSAgZm9yICh0bXAxID0gcG9vbDsgdG1wMTsgdG1wMSA9IHRtcDEtPm5leHQpCisJICAgIGlmIChzdHJjbXAoY2hlY2stPm5ldCwgdG1wMS0+bmV0KSA9PSAwKQorCSAgICAgIGJyZWFrOworCSAgaWYgKCF0bXAxKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlCisJZm9yICh0bXAxID0gcG9vbDsgdG1wMTsgdG1wMSA9IHRtcDEtPm5leHQpCisJICBpZiAoc3RyY21wKChjaGVjay0+bmV0KSsxLCB0bXAxLT5uZXQpID09IDApCisJICAgIHJldHVybiAwOworICAgIH0KKyAgcmV0dXJuIDE7Cit9CisKK2ludCBhZGRyZXNzX2FsbG9jYXRlKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsCisJCSAgICAgc3RydWN0IGluX2FkZHIgKmFkZHJwLCB1bnNpZ25lZCBjaGFyICpod2FkZHIsIGludCBod19sZW4sIAorCQkgICAgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZHMsIHRpbWVfdCBub3cpICAgCit7CisgIC8qIEZpbmQgYSBmcmVlIGFkZHJlc3M6IGV4Y2x1ZGUgYW55dGhpbmcgaW4gdXNlIGFuZCBhbnl0aGluZyBhbGxvY2F0ZWQgdG8KKyAgICAgYSBwYXJ0aWN1bGFyIGh3YWRkci9jbGllbnRpZC9ob3N0bmFtZSBpbiBvdXIgY29uZmlndXJhdGlvbi4KKyAgICAgVHJ5IHRvIHJldHVybiBmcm9tIGNvbnRleHRzIHdoaWNoIG1hdGNoIG5ldGlkcyBmaXJzdC4gKi8KKworICBzdHJ1Y3QgaW5fYWRkciBzdGFydCwgYWRkcjsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqYywgKmQ7CisgIGludCBpLCBwYXNzOworICB1bnNpZ25lZCBpbnQgajsgCisKKyAgLyogaGFzaCBod2FkZHIgKi8KKyAgZm9yIChqID0gMCwgaSA9IDA7IGkgPCBod19sZW47IGkrKykKKyAgICBqICs9IGh3YWRkcltpXSArIChod2FkZHJbaV0gPDwgOCkgKyAoaHdhZGRyW2ldIDw8IDE2KTsKKyAgCisgIGZvciAocGFzcyA9IDA7IHBhc3MgPD0gMTsgcGFzcysrKQorICAgIGZvciAoYyA9IGNvbnRleHQ7IGM7IGMgPSBjLT5jdXJyZW50KQorICAgICAgaWYgKGMtPmZsYWdzICYgQ09OVEVYVF9TVEFUSUMpCisJY29udGludWU7CisgICAgICBlbHNlIGlmICghbWF0Y2hfbmV0aWQoYy0+ZmlsdGVyLCBuZXRpZHMsIHBhc3MpKQorCWNvbnRpbnVlOworICAgICAgZWxzZQorCXsKKwkgIC8qIHBpY2sgYSBzZWVkIGJhc2VkIG9uIGh3YWRkciB0aGVuIGl0ZXJhdGUgdW50aWwgd2UgZmluZCBhIGZyZWUgYWRkcmVzcy4gKi8KKwkgIHN0YXJ0LnNfYWRkciA9IGFkZHIuc19hZGRyID0gCisJICAgIGh0b25sKG50b2hsKGMtPnN0YXJ0LnNfYWRkcikgKyAKKwkJICAoKGogKyBjLT5hZGRyX2Vwb2NoKSAlICgxICsgbnRvaGwoYy0+ZW5kLnNfYWRkcikgLSBudG9obChjLT5zdGFydC5zX2FkZHIpKSkpOworCSAgCisJICBkbyB7CisJICAgIC8qIGVsaW1pbmF0ZSBhZGRyZXNzZXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIuICovCisJICAgIGZvciAoZCA9IGNvbnRleHQ7IGQ7IGQgPSBkLT5jdXJyZW50KQorCSAgICAgIGlmIChhZGRyLnNfYWRkciA9PSBkLT5yb3V0ZXIuc19hZGRyKQorCQlicmVhazsKKworCSAgICAvKiBBZGRyZXNzZXMgd2hpY2ggZW5kIGluIC4yNTUgYW5kIC4wIGFyZSBicm9rZW4gaW4gV2luZG93cyBldmVuIHdoZW4gdXNpbmcgCisJICAgICAgIHN1cGVybmV0dGluZy4gaWUgZGhjcC1yYW5nZT0xOTIuMTY4LjAuMSwxOTIuMTY4LjEuMjU0LDI1NSwyNTUsMjU0LjAKKwkgICAgICAgdGhlbiAxOTIuMTY4LjAuMjU1IGlzIGEgdmFsaWQgSVAgYWRkcmVzcywgYnV0IG5vdCBmb3IgV2luZG93cyBhcyBpdCdzCisJICAgICAgIGluIHRoZSBjbGFzcyBDIHJhbmdlLiBTZWUgIEtCMjgxNTc5LiBXZSB0aGVyZWZvcmUgZG9uJ3QgYWxsb2NhdGUgdGhlc2UgCisJICAgICAgIGFkZHJlc3NlcyB0byBhdm9pZCBoYXJkLXRvLWRpYWdub3NlIHByb2JsZW1zLiBUaGFua3MgQmlsbC4gKi8JICAgIAorCSAgICBpZiAoIWQgJiYKKwkJIWxlYXNlX2ZpbmRfYnlfYWRkcihhZGRyKSAmJiAKKwkJIWNvbmZpZ19maW5kX2J5X2FkZHJlc3MoZGFlbW9uLT5kaGNwX2NvbmYsIGFkZHIpICYmCisJCSghSU5fQ0xBU1NDKG50b2hsKGFkZHIuc19hZGRyKSkgfHwgCisJCSAoKG50b2hsKGFkZHIuc19hZGRyKSAmIDB4ZmYpICE9IDB4ZmYgJiYgKChudG9obChhZGRyLnNfYWRkcikgJiAweGZmKSAhPSAweDApKSkpCisJICAgICAgeworCQlzdHJ1Y3QgcGluZ19yZXN1bHQgKnIsICp2aWN0aW0gPSBOVUxMOworCQlpbnQgY291bnQsIG1heCA9IChpbnQpKDAuNiAqICgoKGZsb2F0KVBJTkdfQ0FDSEVfVElNRSkvCisJCQkJCSAgICAgICgoZmxvYXQpUElOR19XQUlUKSkpOworCQkKKwkJKmFkZHJwID0gYWRkcjsKKworCQlpZiAoZGFlbW9uLT5vcHRpb25zICYgT1BUX05PX1BJTkcpCisJCSAgcmV0dXJuIDE7CisJCQorCQkvKiBjaGVjayBpZiB3ZSBmYWlsZWQgdG8gcGluZyBhZGRyIHNvbWV0aW1lIGluIHRoZSBsYXN0CisJCSAgIFBJTkdfQ0FDSEVfVElNRSBzZWNvbmRzLiBJZiBzbywgYXNzdW1lIHRoZSBzYW1lIHNpdHVhdGlvbiBzdGlsbCBleGlzdHMuCisJCSAgIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdoZW4gYSBzdHVwaWQgY2xpZW50IGJhbmdzCisJCSAgIG9uIHVzIHJlcGVhdGVkbHkuIEFzIGEgZmluYWwgY2hlY2ssIGlmIHdlIGRpZCBtb3JlCisJCSAgIHRoYW4gNjAlIG9mIHRoZSBwb3NzaWJsZSBwaW5nIGNoZWNrcyBpbiB0aGUgbGFzdCAKKwkJICAgUElOR19DQUNIRV9USU1FLCB3ZSBhcmUgaW4gaGlnaC1sb2FkIG1vZGUsIHNvIGRvbid0IGRvIGFueSBtb3JlLiAqLworCQlmb3IgKGNvdW50ID0gMCwgciA9IGRhZW1vbi0+cGluZ19yZXN1bHRzOyByOyByID0gci0+bmV4dCkKKwkJICBpZiAoZGlmZnRpbWUobm93LCByLT50aW1lKSA+ICAoZmxvYXQpUElOR19DQUNIRV9USU1FKQorCQkgICAgdmljdGltID0gcjsgLyogb2xkIHJlY29yZCAqLworCQkgIGVsc2UgaWYgKCsrY291bnQgPT0gbWF4IHx8IHItPmFkZHIuc19hZGRyID09IGFkZHIuc19hZGRyKQorCQkgICAgcmV0dXJuIDE7CisJCSAgICAKKwkJaWYgKGljbXBfcGluZyhhZGRyKSkKKwkJICAvKiBhZGRyZXNzIGluIHVzZTogcGVydHVyYiBhZGRyZXNzIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGFyZQorCQkgICAgIGxlc3MgbGlrZWx5IHRvIHRyeSB0aGlzIGFkZHJlc3MgYWdhaW4uICovCisJCSAgYy0+YWRkcl9lcG9jaCsrOworCQllbHNlCisJCSAgeworCQkgICAgLyogYXQgdGhpcyBwb2ludCB2aWN0aW0gbWF5IGhvbGQgYW4gZXhwaXJlZCByZWNvcmQgKi8KKwkJICAgIGlmICghdmljdGltKQorCQkgICAgICB7CisJCQlpZiAoKHZpY3RpbSA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IHBpbmdfcmVzdWx0KSkpKQorCQkJICB7CisJCQkgICAgdmljdGltLT5uZXh0ID0gZGFlbW9uLT5waW5nX3Jlc3VsdHM7CisJCQkgICAgZGFlbW9uLT5waW5nX3Jlc3VsdHMgPSB2aWN0aW07CisJCQkgIH0KKwkJICAgICAgfQorCQkgICAgCisJCSAgICAvKiByZWNvcmQgdGhhdCB0aGlzIGFkZHJlc3MgaXMgT0sgZm9yIDMwcyAKKwkJICAgICAgIHdpdGhvdXQgbW9yZSBwaW5nIGNoZWNrcyAqLworCQkgICAgaWYgKHZpY3RpbSkKKwkJICAgICAgeworCQkJdmljdGltLT5hZGRyID0gYWRkcjsKKwkJCXZpY3RpbS0+dGltZSA9IG5vdzsKKwkJICAgICAgfQorCQkgICAgcmV0dXJuIDE7CisJCSAgfQorCSAgICAgIH0KKworCSAgICBhZGRyLnNfYWRkciA9IGh0b25sKG50b2hsKGFkZHIuc19hZGRyKSArIDEpOworCSAgICAKKwkgICAgaWYgKGFkZHIuc19hZGRyID09IGh0b25sKG50b2hsKGMtPmVuZC5zX2FkZHIpICsgMSkpCisJICAgICAgYWRkciA9IGMtPnN0YXJ0OworCSAgICAKKwkgIH0gd2hpbGUgKGFkZHIuc19hZGRyICE9IHN0YXJ0LnNfYWRkcik7CisJfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19hZGRyX2luX2NvbnRleHQoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGRoY3BfY29uZmlnICpjb25maWcpCit7CisgIGlmICghY29udGV4dCkgLyogY2FsbGVkIHZpYSBmaW5kX2NvbmZpZygpIGZyb20gbGVhc2VfdXBkYXRlX2Zyb21fY29uZmlncygpICovCisgICAgcmV0dXJuIDE7IAorICBpZiAoIShjb25maWctPmZsYWdzICYgQ09ORklHX0FERFIpKQorICAgIHJldHVybiAxOworICBmb3IgKDsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPmN1cnJlbnQpCisgICAgaWYgKGlzX3NhbWVfbmV0KGNvbmZpZy0+YWRkciwgY29udGV4dC0+c3RhcnQsIGNvbnRleHQtPm5ldG1hc2spKQorICAgICAgcmV0dXJuIDE7CisgIAorICByZXR1cm4gMDsKK30KKworaW50IGNvbmZpZ19oYXNfbWFjKHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBjaGFyICpod2FkZHIsIGludCBsZW4sIGludCB0eXBlKQoreworICBzdHJ1Y3QgaHdhZGRyX2NvbmZpZyAqY29uZl9hZGRyOworICAKKyAgZm9yIChjb25mX2FkZHIgPSBjb25maWctPmh3YWRkcjsgY29uZl9hZGRyOyBjb25mX2FkZHIgPSBjb25mX2FkZHItPm5leHQpCisgICAgaWYgKGNvbmZfYWRkci0+d2lsZGNhcmRfbWFzayA9PSAwICYmCisJY29uZl9hZGRyLT5od2FkZHJfbGVuID09IGxlbiAmJgorCShjb25mX2FkZHItPmh3YWRkcl90eXBlID09IHR5cGUgfHwgY29uZl9hZGRyLT5od2FkZHJfdHlwZSA9PSAwKSAmJgorCW1lbWNtcChjb25mX2FkZHItPmh3YWRkciwgaHdhZGRyLCBsZW4pID09IDApCisgICAgICByZXR1cm4gMTsKKyAgCisgIHJldHVybiAwOworfQorCitzdHJ1Y3QgZGhjcF9jb25maWcgKmZpbmRfY29uZmlnKHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlncywKKwkJCQlzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LAorCQkJCXVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCBjbGlkX2xlbiwKKwkJCQl1bnNpZ25lZCBjaGFyICpod2FkZHIsIGludCBod19sZW4sIAorCQkJCWludCBod190eXBlLCBjaGFyICpob3N0bmFtZSkKK3sKKyAgaW50IGNvdW50LCBuZXc7CisgIHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnLCAqY2FuZGlkYXRlOyAKKyAgc3RydWN0IGh3YWRkcl9jb25maWcgKmNvbmZfYWRkcjsKKworICBpZiAoY2xpZCkKKyAgICBmb3IgKGNvbmZpZyA9IGNvbmZpZ3M7IGNvbmZpZzsgY29uZmlnID0gY29uZmlnLT5uZXh0KQorICAgICAgaWYgKGNvbmZpZy0+ZmxhZ3MgJiBDT05GSUdfQ0xJRCkKKwl7CisJICBpZiAoY29uZmlnLT5jbGlkX2xlbiA9PSBjbGlkX2xlbiAmJiAKKwkgICAgICBtZW1jbXAoY29uZmlnLT5jbGlkLCBjbGlkLCBjbGlkX2xlbikgPT0gMCAmJgorCSAgICAgIGlzX2FkZHJfaW5fY29udGV4dChjb250ZXh0LCBjb25maWcpKQorCSAgICByZXR1cm4gY29uZmlnOworCSAgCisJICAvKiBkaGNwY2QgcHJlZml4ZXMgQVNDSUkgY2xpZW50IElEcyBieSB6ZXJvIHdoaWNoIGlzIHdyb25nLCBidXQgd2UgdHJ5IGFuZAorCSAgICAgY29wZSB3aXRoIHRoYXQgaGVyZSAqLworCSAgaWYgKCpjbGlkID09IDAgJiYgY29uZmlnLT5jbGlkX2xlbiA9PSBjbGlkX2xlbi0xICAmJgorCSAgICAgIG1lbWNtcChjb25maWctPmNsaWQsIGNsaWQrMSwgY2xpZF9sZW4tMSkgPT0gMCAmJgorCSAgICAgIGlzX2FkZHJfaW5fY29udGV4dChjb250ZXh0LCBjb25maWcpKQorCSAgICByZXR1cm4gY29uZmlnOworCX0KKyAgCisKKyAgZm9yIChjb25maWcgPSBjb25maWdzOyBjb25maWc7IGNvbmZpZyA9IGNvbmZpZy0+bmV4dCkKKyAgICBpZiAoY29uZmlnX2hhc19tYWMoY29uZmlnLCBod2FkZHIsIGh3X2xlbiwgaHdfdHlwZSkgJiYKKwlpc19hZGRyX2luX2NvbnRleHQoY29udGV4dCwgY29uZmlnKSkKKyAgICAgIHJldHVybiBjb25maWc7CisgIAorICBpZiAoaG9zdG5hbWUgJiYgY29udGV4dCkKKyAgICBmb3IgKGNvbmZpZyA9IGNvbmZpZ3M7IGNvbmZpZzsgY29uZmlnID0gY29uZmlnLT5uZXh0KQorICAgICAgaWYgKChjb25maWctPmZsYWdzICYgQ09ORklHX05BTUUpICYmIAorCSAgaG9zdG5hbWVfaXNlcXVhbChjb25maWctPmhvc3RuYW1lLCBob3N0bmFtZSkgJiYKKwkgIGlzX2FkZHJfaW5fY29udGV4dChjb250ZXh0LCBjb25maWcpKQorCXJldHVybiBjb25maWc7CisKKyAgLyogdXNlIG1hdGNoIHdpdGggZmV3ZXN0IHdpbGRjYXN0IG9jdGV0cyAqLworICBmb3IgKGNhbmRpZGF0ZSA9IE5VTEwsIGNvdW50ID0gMCwgY29uZmlnID0gY29uZmlnczsgY29uZmlnOyBjb25maWcgPSBjb25maWctPm5leHQpCisgICAgaWYgKGlzX2FkZHJfaW5fY29udGV4dChjb250ZXh0LCBjb25maWcpKQorICAgICAgZm9yIChjb25mX2FkZHIgPSBjb25maWctPmh3YWRkcjsgY29uZl9hZGRyOyBjb25mX2FkZHIgPSBjb25mX2FkZHItPm5leHQpCisJaWYgKGNvbmZfYWRkci0+d2lsZGNhcmRfbWFzayAhPSAwICYmCisJICAgIGNvbmZfYWRkci0+aHdhZGRyX2xlbiA9PSBod19sZW4gJiYJCisJICAgIChjb25mX2FkZHItPmh3YWRkcl90eXBlID09IGh3X3R5cGUgfHwgY29uZl9hZGRyLT5od2FkZHJfdHlwZSA9PSAwKSAmJgorCSAgICAobmV3ID0gbWVtY21wX21hc2tlZChjb25mX2FkZHItPmh3YWRkciwgaHdhZGRyLCBod19sZW4sIGNvbmZfYWRkci0+d2lsZGNhcmRfbWFzaykpID4gY291bnQpCisJICB7CisJICAgIGNvdW50ID0gbmV3OworCSAgICBjYW5kaWRhdGUgPSBjb25maWc7CisJICB9CisKKyAgcmV0dXJuIGNhbmRpZGF0ZTsKK30KKwordm9pZCBkaGNwX3JlYWRfZXRoZXJzKHZvaWQpCit7CisgIEZJTEUgKmYgPSBmb3BlbihFVEhFUlNGSUxFLCAiciIpOworICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisgIGNoYXIgKmJ1ZmYgPSBkYWVtb24tPm5hbWVidWZmOworICBjaGFyICppcCwgKmNwOworICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworICB1bnNpZ25lZCBjaGFyIGh3YWRkcltFVEhFUl9BRERSX0xFTl07CisgIHN0cnVjdCBkaGNwX2NvbmZpZyAqKnVwLCAqdG1wOworICBzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZzsKKyAgaW50IGNvdW50ID0gMCwgbGluZW5vID0gMDsKKworICBhZGRyLnNfYWRkciA9IDA7IC8qIGVsaW1pbmF0ZSB3YXJuaW5nICovCisgIAorICBpZiAoIWYpCisgICAgeworICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfRVJSLCBfKCJmYWlsZWQgdG8gcmVhZCAlczogJXMiKSwgRVRIRVJTRklMRSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogVGhpcyBjYW4gYmUgY2FsbGVkIGFnYWluIG9uIFNJR0hVUCwgc28gcmVtb3ZlIGVudHJpZXMgY3JlYXRlZCBsYXN0IHRpbWUgcm91bmQuICovCisgIGZvciAodXAgPSAmZGFlbW9uLT5kaGNwX2NvbmYsIGNvbmZpZyA9IGRhZW1vbi0+ZGhjcF9jb25mOyBjb25maWc7IGNvbmZpZyA9IHRtcCkKKyAgICB7CisgICAgICB0bXAgPSBjb25maWctPm5leHQ7CisgICAgICBpZiAoY29uZmlnLT5mbGFncyAmIENPTkZJR19GUk9NX0VUSEVSUykKKwl7CisJICAqdXAgPSB0bXA7CisJICAvKiBjYW5ub3QgaGF2ZSBhIGNsaWQgKi8KKwkgIGlmIChjb25maWctPmZsYWdzICYgQ09ORklHX05BTUUpCisJICAgIGZyZWUoY29uZmlnLT5ob3N0bmFtZSk7CisJICBmcmVlKGNvbmZpZy0+aHdhZGRyKTsKKwkgIGZyZWUoY29uZmlnKTsKKwl9CisgICAgICBlbHNlCisJdXAgPSAmY29uZmlnLT5uZXh0OworICAgIH0KKworICB3aGlsZSAoZmdldHMoYnVmZiwgTUFYRE5BTUUsIGYpKQorICAgIHsKKyAgICAgIGNoYXIgKmhvc3QgPSBOVUxMOworICAgICAgCisgICAgICBsaW5lbm8rKzsKKyAgICAgIAorICAgICAgd2hpbGUgKHN0cmxlbihidWZmKSA+IDAgJiYgaXNzcGFjZSgoaW50KWJ1ZmZbc3RybGVuKGJ1ZmYpLTFdKSkKKwlidWZmW3N0cmxlbihidWZmKS0xXSA9IDA7CisgICAgICAKKyAgICAgIGlmICgoKmJ1ZmYgPT0gJyMnKSB8fCAoKmJ1ZmYgPT0gJysnKSB8fCAoKmJ1ZmYgPT0gMCkpCisJY29udGludWU7CisgICAgICAKKyAgICAgIGZvciAoaXAgPSBidWZmOyAqaXAgJiYgIWlzc3BhY2UoKGludCkqaXApOyBpcCsrKTsKKyAgICAgIGZvcig7ICppcCAmJiBpc3NwYWNlKChpbnQpKmlwKTsgaXArKykKKwkqaXAgPSAwOworICAgICAgaWYgKCEqaXAgfHwgcGFyc2VfaGV4KGJ1ZmYsIGh3YWRkciwgRVRIRVJfQUREUl9MRU4sIE5VTEwsIE5VTEwpICE9IEVUSEVSX0FERFJfTEVOKQorCXsKKwkgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0VSUiwgXygiYmFkIGxpbmUgYXQgJXMgbGluZSAlZCIpLCBFVEhFUlNGSUxFLCBsaW5lbm8pOyAKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIAorICAgICAgLyogY2hlY2sgZm9yIG5hbWUgb3IgZG90dGVkLXF1YWQgKi8KKyAgICAgIGZvciAoY3AgPSBpcDsgKmNwOyBjcCsrKQorCWlmICghKCpjcCA9PSAnLicgfHwgKCpjcCA+PScwJyAmJiAqY3AgPD0gJzknKSkpCisJICBicmVhazsKKyAgICAgIAorICAgICAgaWYgKCEqY3ApCisJeworCSAgaWYgKChhZGRyLnNfYWRkciA9IGluZXRfYWRkcihpcCkpID09IChpbl9hZGRyX3QpLTEpCisJICAgIHsKKwkgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19FUlIsIF8oImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiKSwgRVRIRVJTRklMRSwgbGluZW5vKTsgCisJICAgICAgY29udGludWU7CisJICAgIH0KKworCSAgZmxhZ3MgPSBDT05GSUdfQUREUjsKKwkgIAorCSAgZm9yIChjb25maWcgPSBkYWVtb24tPmRoY3BfY29uZjsgY29uZmlnOyBjb25maWcgPSBjb25maWctPm5leHQpCisJICAgIGlmICgoY29uZmlnLT5mbGFncyAmIENPTkZJR19BRERSKSAmJiBjb25maWctPmFkZHIuc19hZGRyID09IGFkZHIuc19hZGRyKQorCSAgICAgIGJyZWFrOworCX0KKyAgICAgIGVsc2UgCisJeworCSAgaW50IG5vbWVtOworCSAgaWYgKCEoaG9zdCA9IGNhbm9uaWNhbGlzZShpcCwgJm5vbWVtKSkgfHwgIWxlZ2FsX2hvc3RuYW1lKGhvc3QpKQorCSAgICB7CisJICAgICAgaWYgKCFub21lbSkKKwkJbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfRVJSLCBfKCJiYWQgbmFtZSBhdCAlcyBsaW5lICVkIiksIEVUSEVSU0ZJTEUsIGxpbmVubyk7IAorCSAgICAgIGZyZWUoaG9zdCk7CisJICAgICAgY29udGludWU7CisJICAgIH0KKwkgICAgICAKKwkgIGZsYWdzID0gQ09ORklHX05BTUU7CisKKwkgIGZvciAoY29uZmlnID0gZGFlbW9uLT5kaGNwX2NvbmY7IGNvbmZpZzsgY29uZmlnID0gY29uZmlnLT5uZXh0KQorCSAgICBpZiAoKGNvbmZpZy0+ZmxhZ3MgJiBDT05GSUdfTkFNRSkgJiYgaG9zdG5hbWVfaXNlcXVhbChjb25maWctPmhvc3RuYW1lLCBob3N0KSkKKwkgICAgICBicmVhazsKKwl9CisKKyAgICAgIGlmIChjb25maWcgJiYgKGNvbmZpZy0+ZmxhZ3MgJiBDT05GSUdfRlJPTV9FVEhFUlMpKQorCXsKKwkgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0VSUiwgXygiaWdub3JpbmcgJXMgbGluZSAlZCwgZHVwbGljYXRlIG5hbWUgb3IgSVAgYWRkcmVzcyIpLCBFVEhFUlNGSUxFLCBsaW5lbm8pOyAKKwkgIGNvbnRpbnVlOworCX0KKwkKKyAgICAgIGlmICghY29uZmlnKQorCXsgCisJICBmb3IgKGNvbmZpZyA9IGRhZW1vbi0+ZGhjcF9jb25mOyBjb25maWc7IGNvbmZpZyA9IGNvbmZpZy0+bmV4dCkKKwkgICAgeworCSAgICAgIHN0cnVjdCBod2FkZHJfY29uZmlnICpjb25mX2FkZHIgPSBjb25maWctPmh3YWRkcjsKKwkgICAgICBpZiAoY29uZl9hZGRyICYmIAorCQkgIGNvbmZfYWRkci0+bmV4dCA9PSBOVUxMICYmIAorCQkgIGNvbmZfYWRkci0+d2lsZGNhcmRfbWFzayA9PSAwICYmCisJCSAgY29uZl9hZGRyLT5od2FkZHJfbGVuID09IEVUSEVSX0FERFJfTEVOICYmCisJCSAgKGNvbmZfYWRkci0+aHdhZGRyX3R5cGUgPT0gQVJQSFJEX0VUSEVSIHx8IGNvbmZfYWRkci0+aHdhZGRyX3R5cGUgPT0gMCkgJiYKKwkJICBtZW1jbXAoY29uZl9hZGRyLT5od2FkZHIsIGh3YWRkciwgRVRIRVJfQUREUl9MRU4pID09IDApCisJCWJyZWFrOworCSAgICB9CisJICAKKwkgIGlmICghY29uZmlnKQorCSAgICB7CisJICAgICAgaWYgKCEoY29uZmlnID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9jb25maWcpKSkpCisJCWNvbnRpbnVlOworCSAgICAgIGNvbmZpZy0+ZmxhZ3MgPSBDT05GSUdfRlJPTV9FVEhFUlM7CisJICAgICAgY29uZmlnLT5od2FkZHIgPSBOVUxMOworCSAgICAgIGNvbmZpZy0+ZG9tYWluID0gTlVMTDsKKwkgICAgICBjb25maWctPm5leHQgPSBkYWVtb24tPmRoY3BfY29uZjsKKwkgICAgICBkYWVtb24tPmRoY3BfY29uZiA9IGNvbmZpZzsKKwkgICAgfQorCSAgCisJICBjb25maWctPmZsYWdzIHw9IGZsYWdzOworCSAgCisJICBpZiAoZmxhZ3MgJiBDT05GSUdfTkFNRSkKKwkgICAgeworCSAgICAgIGNvbmZpZy0+aG9zdG5hbWUgPSBob3N0OworCSAgICAgIGhvc3QgPSBOVUxMOworCSAgICB9CisJICAKKwkgIGlmIChmbGFncyAmIENPTkZJR19BRERSKQorCSAgICBjb25maWctPmFkZHIgPSBhZGRyOworCX0KKyAgICAgIAorICAgICAgY29uZmlnLT5mbGFncyB8PSBDT05GSUdfTk9DTElEOworICAgICAgaWYgKCFjb25maWctPmh3YWRkcikKKwljb25maWctPmh3YWRkciA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGh3YWRkcl9jb25maWcpKTsKKyAgICAgIGlmIChjb25maWctPmh3YWRkcikKKwl7CisJICBtZW1jcHkoY29uZmlnLT5od2FkZHItPmh3YWRkciwgaHdhZGRyLCBFVEhFUl9BRERSX0xFTik7CisJICBjb25maWctPmh3YWRkci0+aHdhZGRyX2xlbiA9IEVUSEVSX0FERFJfTEVOOworCSAgY29uZmlnLT5od2FkZHItPmh3YWRkcl90eXBlID0gQVJQSFJEX0VUSEVSOworCSAgY29uZmlnLT5od2FkZHItPndpbGRjYXJkX21hc2sgPSAwOworCSAgY29uZmlnLT5od2FkZHItPm5leHQgPSBOVUxMOworCX0KKyAgICAgIGNvdW50Kys7CisgICAgICAKKyAgICAgIGZyZWUoaG9zdCk7CisKKyAgICB9CisgIAorICBmY2xvc2UoZik7CisKKyAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygicmVhZCAlcyAtICVkIGFkZHJlc3NlcyIpLCBFVEhFUlNGSUxFLCBjb3VudCk7Cit9CisKK3ZvaWQgY2hlY2tfZGhjcF9ob3N0cyhpbnQgZmF0YWwpCit7CisgIC8qIElmIHRoZSBzYW1lIElQIGFwcGVhcnMgaW4gbW9yZSB0aGFuIG9uZSBob3N0IGNvbmZpZywgdGhlbiBESVNDT1ZFUgorICAgICBmb3Igb25lIG9mIHRoZSBob3N0cyB3aWxsIGdldCB0aGUgYWRkcmVzcywgYnV0IFJFUVVFU1Qgd2lsbCBiZSBOQUtlZCwKKyAgICAgc2luY2UgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgYnkgdGhlIG90aGVyIG9uZSAtPiBwcm90b2NvbCBsb29wLiAKKyAgICAgQWxzbyBjaGVjayB0aGF0IEZRRE5zIG1hdGNoIHRoZSBkb21haW4gd2UgYXJlIHVzaW5nLiAqLworICAKKyAgc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdzLCAqY3A7CisgCisgIGZvciAoY29uZmlncyA9IGRhZW1vbi0+ZGhjcF9jb25mOyBjb25maWdzOyBjb25maWdzID0gY29uZmlncy0+bmV4dCkKKyAgICB7CisgICAgICBjaGFyICpkb21haW47CisKKyAgICAgIGlmICgoY29uZmlncy0+ZmxhZ3MgJiBESE9QVF9CQU5LKSB8fCBmYXRhbCkKKyAgICAgICB7CisJIGZvciAoY3AgPSBjb25maWdzLT5uZXh0OyBjcDsgY3AgPSBjcC0+bmV4dCkKKwkgICBpZiAoKGNvbmZpZ3MtPmZsYWdzICYgY3AtPmZsYWdzICYgQ09ORklHX0FERFIpICYmIGNvbmZpZ3MtPmFkZHIuc19hZGRyID09IGNwLT5hZGRyLnNfYWRkcikKKwkgICAgIHsKKwkgICAgICAgaWYgKGZhdGFsKQorCQkgZGllKF8oImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZS4iKSwgCisJCSAgICAgaW5ldF9udG9hKGNwLT5hZGRyKSwgRUNfQkFEQ09ORik7CisJICAgICAgIGVsc2UKKwkJIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0VSUiwgXygiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gJXMuIiksIAorCQkJICAgaW5ldF9udG9hKGNwLT5hZGRyKSwgZGFlbW9uLT5kaGNwX2hvc3RzX2ZpbGUpOworCSAgICAgICBjb25maWdzLT5mbGFncyAmPSB+Q09ORklHX0FERFI7CisJICAgICB9CisJIAorCSAvKiBzcGxpdCBvZmYgZG9tYWluIHBhcnQgKi8KKwkgaWYgKChjb25maWdzLT5mbGFncyAmIENPTkZJR19OQU1FKSAmJiAoZG9tYWluID0gc3RyaXBfaG9zdG5hbWUoY29uZmlncy0+aG9zdG5hbWUpKSkKKwkgICBjb25maWdzLT5kb21haW4gPSBkb21haW47CisgICAgICAgfQorICAgIH0KK30KKwordm9pZCBkaGNwX3VwZGF0ZV9jb25maWdzKHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlncykKK3sKKyAgLyogU29tZSBwZW9wbGUgbGlrZSB0byBrZWVwIGFsbCBzdGF0aWMgSVAgYWRkcmVzc2VzIGluIC9ldGMvaG9zdHMuCisgICAgIFRoaXMgZ29lcyB0aHJvdWdoIC9ldGMvaG9zdHMgYW5kIHNldHMgc3RhdGljIGFkZHJlc3NlcyBmb3IgYW55IERIQ1AgY29uZmlnCisgICAgIHJlY29yZHMgd2hpY2ggZG9uJ3QgaGF2ZSBhbiBhZGRyZXNzIGFuZCB3aG9zZSBuYW1lIG1hdGNoZXMuIAorICAgICBXZSB0YWtlIGNhcmUgdG8gbWFpbnRhaW4gdGhlIGludmFyaWFudCB0aGF0IGFueSBJUCBhZGRyZXNzIGNhbiBhcHBlYXIKKyAgICAgaW4gYXQgbW9zdCBvbmUgZGhjcC1ob3N0LiBTaW5jZSAvZXRjL2hvc3RzIGNhbiBiZSByZS1yZWFkIGJ5IFNJR0hVUCwgCisgICAgIHJlc3RvcmUgdGhlIHN0YXR1cy1xdW8gYW50ZSBmaXJzdC4gKi8KKyAgCisgIHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnOworICBzdHJ1Y3QgY3JlYyAqY3JlYzsKKworICBmb3IgKGNvbmZpZyA9IGNvbmZpZ3M7IGNvbmZpZzsgY29uZmlnID0gY29uZmlnLT5uZXh0KQorICAgIGlmIChjb25maWctPmZsYWdzICYgQ09ORklHX0FERFJfSE9TVFMpCisgICAgICBjb25maWctPmZsYWdzICY9IH4oQ09ORklHX0FERFIgfCBDT05GSUdfQUREUl9IT1NUUyk7CisgIAorICAKKyAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwKQorICAgIGZvciAoY29uZmlnID0gY29uZmlnczsgY29uZmlnOyBjb25maWcgPSBjb25maWctPm5leHQpCisgICAgICBpZiAoIShjb25maWctPmZsYWdzICYgQ09ORklHX0FERFIpICYmCisJICAoY29uZmlnLT5mbGFncyAmIENPTkZJR19OQU1FKSAmJiAKKwkgIChjcmVjID0gY2FjaGVfZmluZF9ieV9uYW1lKE5VTEwsIGNvbmZpZy0+aG9zdG5hbWUsIDAsIEZfSVBWNCkpICYmCisJICAoY3JlYy0+ZmxhZ3MgJiBGX0hPU1RTKSkKKwl7CisJICBpZiAoY2FjaGVfZmluZF9ieV9uYW1lKGNyZWMsIGNvbmZpZy0+aG9zdG5hbWUsIDAsIEZfSVBWNCkpCisJICAgIHsKKwkgICAgICAvKiB1c2UgcHJpbWFyeSAoZmlyc3QpIGFkZHJlc3MgKi8KKwkgICAgICB3aGlsZSAoY3JlYyAmJiAhKGNyZWMtPmZsYWdzICYgRl9SRVZFUlNFKSkKKwkJY3JlYyA9IGNhY2hlX2ZpbmRfYnlfbmFtZShjcmVjLCBjb25maWctPmhvc3RuYW1lLCAwLCBGX0lQVjQpOworCSAgICAgIGlmICghY3JlYykKKwkJY29udGludWU7IC8qIHNob3VsZCBiZSBuZXZlciAqLworCSAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oIiVzIGhhcyBtb3JlIHRoYW4gb25lIGFkZHJlc3MgaW4gaG9zdHNmaWxlLCB1c2luZyAlcyBmb3IgREhDUCIpLCAKKwkJCWNvbmZpZy0+aG9zdG5hbWUsIGluZXRfbnRvYShjcmVjLT5hZGRyLmFkZHIuYWRkci5hZGRyNCkpOworCSAgICB9CisKKwkgIGlmIChjb25maWdfZmluZF9ieV9hZGRyZXNzKGNvbmZpZ3MsIGNyZWMtPmFkZHIuYWRkci5hZGRyLmFkZHI0KSkKKwkgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfV0FSTklORywgXygiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiKSwgCisJCSAgICAgIGluZXRfbnRvYShjcmVjLT5hZGRyLmFkZHIuYWRkci5hZGRyNCksIGNvbmZpZy0+aG9zdG5hbWUpOworCSAgZWxzZSAKKwkgICAgeworCSAgICAgIGNvbmZpZy0+YWRkciA9IGNyZWMtPmFkZHIuYWRkci5hZGRyLmFkZHI0OworCSAgICAgIGNvbmZpZy0+ZmxhZ3MgfD0gQ09ORklHX0FERFIgfCBDT05GSUdfQUREUl9IT1NUUzsKKwkgICAgfQorCX0KK30KKworLyogSWYgd2UndmUgbm90IGZvdW5kIGEgaG9zdG5hbWUgYW55IG90aGVyIHdheSwgdHJ5IGFuZCBzZWUgaWYgdGhlcmUncyBvbmUgaW4gL2V0Yy9ob3N0cworICAgZm9yIHRoaXMgYWRkcmVzcy4gSWYgaXQgaGFzIGEgZG9tYWluIHBhcnQsIHRoYXQgbXVzdCBtYXRjaCB0aGUgc2V0IGRvbWFpbiBhbmQKKyAgIGl0IGdldHMgc3RyaXBwZWQuIFRoZSBzZXQgb2YgbGVnYWwgZG9tYWluIG5hbWVzIGlzIGJpZ2dlciB0aGFuIHRoZSBzZXQgb2YgbGVnYWwgaG9zdG5hbWVzCisgICBzbyBjaGVjayBoZXJlIHRoYXQgdGhlIGRvbWFpbiBuYW1lIGlzIGxlZ2FsIGFzIGEgaG9zdG5hbWUuICovCitjaGFyICpob3N0X2Zyb21fZG5zKHN0cnVjdCBpbl9hZGRyIGFkZHIpCit7CisgIHN0cnVjdCBjcmVjICpsb29rdXA7CisgIGNoYXIgKmhvc3RuYW1lID0gTlVMTDsKKyAgY2hhciAqZDEsICpkMjsKKworICBpZiAoZGFlbW9uLT5wb3J0ID09IDApCisgICAgcmV0dXJuIE5VTEw7IC8qIEROUyBkaXNhYmxlZC4gKi8KKyAgCisgIGxvb2t1cCA9IGNhY2hlX2ZpbmRfYnlfYWRkcihOVUxMLCAoc3RydWN0IGFsbF9hZGRyICopJmFkZHIsIDAsIEZfSVBWNCk7CisgIGlmIChsb29rdXAgJiYgKGxvb2t1cC0+ZmxhZ3MgJiBGX0hPU1RTKSkKKyAgICB7CisgICAgICBob3N0bmFtZSA9IGRhZW1vbi0+ZGhjcF9idWZmOworICAgICAgc3RybmNweShob3N0bmFtZSwgY2FjaGVfZ2V0X25hbWUobG9va3VwKSwgMjU2KTsKKyAgICAgIGhvc3RuYW1lWzI1NV0gPSAwOworICAgICAgZDEgPSBzdHJpcF9ob3N0bmFtZShob3N0bmFtZSk7CisgICAgICBkMiA9IGdldF9kb21haW4oYWRkcik7CisgICAgICBpZiAoIWxlZ2FsX2hvc3RuYW1lKGhvc3RuYW1lKSB8fCAoZDEgJiYgKCFkMiB8fCAhaG9zdG5hbWVfaXNlcXVhbChkMSwgZDIpKSkpCisJaG9zdG5hbWUgPSBOVUxMOworICAgIH0KKyAgCisgIHJldHVybiBob3N0bmFtZTsKK30KKworLyogcmV0dXJuIGRvbWFpbiBvciBOVUxMIGlmIG5vbmUuICovCitjaGFyICpzdHJpcF9ob3N0bmFtZShjaGFyICpob3N0bmFtZSkKK3sKKyAgY2hhciAqZG90ID0gc3RyY2hyKGhvc3RuYW1lLCAnLicpOworIAorICBpZiAoIWRvdCkKKyAgICByZXR1cm4gTlVMTDsKKyAgCisgICpkb3QgPSAwOyAvKiB0cnVuY2F0ZSAqLworICBpZiAoc3RybGVuKGRvdCsxKSAhPSAwKQorICAgIHJldHVybiBkb3QrMTsKKyAgCisgIHJldHVybiBOVUxMOworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvc3JjL2Ruc21hc3EuYyBiL3NyYy9kbnNtYXNxLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDhlM2VjZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kbnNtYXNxLmMKQEAgLTAsMCArMSwxMjg3IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDA5IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworc3RydWN0IGRhZW1vbiAqZGFlbW9uOworCitzdGF0aWMgY2hhciAqY29tcGlsZV9vcHRzID0gCisjaWZuZGVmIEhBVkVfSVBWNgorIm5vLSIKKyNlbmRpZgorIklQdjYgIgorI2lmbmRlZiBIQVZFX0dFVE9QVF9MT05HCisibm8tIgorI2VuZGlmCisiR05VLWdldG9wdCAiCisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDCisibm8tUlRDICIKKyNlbmRpZgorI2lmZGVmIE5PX0ZPUksKKyJuby1NTVUgIgorI2VuZGlmCisjaWZuZGVmIEhBVkVfREJVUworIm5vLSIKKyNlbmRpZgorIkRCdXMgIgorI2lmbmRlZiBMT0NBTEVESVIKKyJuby0iCisjZW5kaWYKKyJJMThOICIKKyNpZm5kZWYgSEFWRV9ESENQCisibm8tIgorI2VuZGlmCisiREhDUCAiCisjaWYgZGVmaW5lZChIQVZFX0RIQ1ApICYmICFkZWZpbmVkKEhBVkVfU0NSSVBUKQorIm5vLXNjcmlwdHMgIgorI2VuZGlmCisjaWZuZGVmIEhBVkVfVEZUUAorIm5vLSIKKyNlbmRpZgorIlRGVFAiOworCisKKworc3RhdGljIHZvbGF0aWxlIHBpZF90IHBpZCA9IDA7CitzdGF0aWMgdm9sYXRpbGUgaW50IHBpcGV3cml0ZTsKKworc3RhdGljIGludCBzZXRfZG5zX2xpc3RlbmVycyh0aW1lX3Qgbm93LCBmZF9zZXQgKnNldCwgaW50ICptYXhmZHApOworc3RhdGljIHZvaWQgY2hlY2tfZG5zX2xpc3RlbmVycyhmZF9zZXQgKnNldCwgdGltZV90IG5vdyk7CitzdGF0aWMgdm9pZCBzaWdfaGFuZGxlcihpbnQgc2lnKTsKK3N0YXRpYyB2b2lkIGFzeW5jX2V2ZW50KGludCBwaXBlLCB0aW1lX3Qgbm93KTsKK3N0YXRpYyB2b2lkIGZhdGFsX2V2ZW50KHN0cnVjdCBldmVudF9kZXNjICpldik7CitzdGF0aWMgdm9pZCBwb2xsX3Jlc29sdih2b2lkKTsKKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGJpbmRfZmFsbGJhY2sgPSAwOworICB0aW1lX3Qgbm93OworICBzdHJ1Y3Qgc2lnYWN0aW9uIHNpZ2FjdDsKKyAgc3RydWN0IGluYW1lICppZl90bXA7CisgIGludCBwaXBlcmVhZCwgcGlwZWZkWzJdLCBlcnJfcGlwZVsyXTsKKyAgc3RydWN0IHBhc3N3ZCAqZW50X3B3ID0gTlVMTDsKKyNpZiBkZWZpbmVkKEhBVkVfREhDUCkgJiYgZGVmaW5lZChIQVZFX1NDUklQVCkKKyAgdWlkX3Qgc2NyaXB0X3VpZCA9IDA7CisgIGdpZF90IHNjcmlwdF9naWQgPSAwOworI2VuZGlmCisgIHN0cnVjdCBncm91cCAqZ3AgPSBOVUxMOworICBsb25nIGksIG1heF9mZCA9IHN5c2NvbmYoX1NDX09QRU5fTUFYKTsKKyAgY2hhciAqYmFkdXNlciA9IE5VTEw7CisgIGludCBsb2dfZXJyOworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorICBjYXBfdXNlcl9oZWFkZXJfdCBoZHIgPSBOVUxMOworICBjYXBfdXNlcl9kYXRhX3QgZGF0YSA9IE5VTEw7CisjZW5kaWYgCisKKyNpZmRlZiBMT0NBTEVESVIKKyAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworICBiaW5kdGV4dGRvbWFpbigiZG5zbWFzcSIsIExPQ0FMRURJUik7IAorICB0ZXh0ZG9tYWluKCJkbnNtYXNxIik7CisjZW5kaWYKKworICBzaWdhY3Quc2FfaGFuZGxlciA9IHNpZ19oYW5kbGVyOworICBzaWdhY3Quc2FfZmxhZ3MgPSAwOworICBzaWdlbXB0eXNldCgmc2lnYWN0LnNhX21hc2spOworICBzaWdhY3Rpb24oU0lHVVNSMSwgJnNpZ2FjdCwgTlVMTCk7CisgIHNpZ2FjdGlvbihTSUdVU1IyLCAmc2lnYWN0LCBOVUxMKTsKKyAgc2lnYWN0aW9uKFNJR0hVUCwgJnNpZ2FjdCwgTlVMTCk7CisgIHNpZ2FjdGlvbihTSUdURVJNLCAmc2lnYWN0LCBOVUxMKTsKKyAgc2lnYWN0aW9uKFNJR0FMUk0sICZzaWdhY3QsIE5VTEwpOworICBzaWdhY3Rpb24oU0lHQ0hMRCwgJnNpZ2FjdCwgTlVMTCk7CisKKyAgLyogaWdub3JlIFNJR1BJUEUgKi8KKyAgc2lnYWN0LnNhX2hhbmRsZXIgPSBTSUdfSUdOOworICBzaWdhY3Rpb24oU0lHUElQRSwgJnNpZ2FjdCwgTlVMTCk7CisKKyAgdW1hc2soMDIyKTsgLyoga25vd24gdW1hc2ssIGNyZWF0ZSBsZWFzZXMgYW5kIHBpZCBmaWxlcyBhcyAwNjQ0ICovCisKKyAgcmVhZF9vcHRzKGFyZ2MsIGFyZ3YsIGNvbXBpbGVfb3B0cyk7CisgICAgCisgIGlmIChkYWVtb24tPmVkbnNfcGt0c3ogPCBQQUNLRVRTWikKKyAgICBkYWVtb24tPmVkbnNfcGt0c3ogPSBQQUNLRVRTWjsKKyAgZGFlbW9uLT5wYWNrZXRfYnVmZl9zeiA9IGRhZW1vbi0+ZWRuc19wa3RzeiA+IEROU01BU1FfUEFDS0VUU1ogPyAKKyAgICBkYWVtb24tPmVkbnNfcGt0c3ogOiBETlNNQVNRX1BBQ0tFVFNaOworICBkYWVtb24tPnBhY2tldCA9IHNhZmVfbWFsbG9jKGRhZW1vbi0+cGFja2V0X2J1ZmZfc3opOworCisjaWZkZWYgSEFWRV9ESENQCisgIGlmICghZGFlbW9uLT5sZWFzZV9maWxlKQorICAgIHsKKyAgICAgIGlmIChkYWVtb24tPmRoY3ApCisJZGFlbW9uLT5sZWFzZV9maWxlID0gTEVBU0VGSUxFOworICAgIH0KKyNlbmRpZgorICAKKyAgLyogQ2xvc2UgYW55IGZpbGUgZGVzY3JpcHRvcnMgd2UgaW5oZXJpdGVkIGFwYXJ0IGZyb20gc3Rke2lufG91dHxlcnJ9ICovCisgIGZvciAoaSA9IDA7IGkgPCBtYXhfZmQ7IGkrKykKKyAgICBpZiAoaSAhPSBTVERPVVRfRklMRU5PICYmIGkgIT0gU1RERVJSX0ZJTEVOTyAmJiBpICE9IFNURElOX0ZJTEVOTykKKyAgICAgIGNsb3NlKGkpOworCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgIG5ldGxpbmtfaW5pdCgpOworI2VsaWYgIShkZWZpbmVkKElQX1JFQ1ZEU1RBRERSKSAmJiBcCisJZGVmaW5lZChJUF9SRUNWSUYpICYmIFwKKwlkZWZpbmVkKElQX1NFTkRTUkNBRERSKSkKKyAgaWYgKCEoZGFlbW9uLT5vcHRpb25zICYgT1BUX05PV0lMRCkpCisgICAgeworICAgICAgYmluZF9mYWxsYmFjayA9IDE7CisgICAgICBkYWVtb24tPm9wdGlvbnMgfD0gT1BUX05PV0lMRDsKKyAgICB9CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1RGVFAKKyAgaWYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9URlRQKQorICAgIGRpZShfKCJURlRQIHNlcnZlciBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9URlRQIGluIHNyYy9jb25maWcuaCIpLCBOVUxMLCBFQ19CQURDT05GKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TT0xBUklTX05FVFdPUksKKyAgaWYgKGRhZW1vbi0+bWF4X2xvZ3MgIT0gMCkKKyAgICBkaWUoXygiYXN5Y2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIFNvbGFyaXMiKSwgTlVMTCwgRUNfQkFEQ09ORik7CisjZW5kaWYKKyAgCisgIHJhbmRfaW5pdCgpOworICAKKyAgbm93ID0gZG5zbWFzcV90aW1lKCk7CisgIAorI2lmZGVmIEhBVkVfREhDUAorICBpZiAoZGFlbW9uLT5kaGNwKQorICAgIHsKKyAgICAgIC8qIE5vdGUgdGhhdCBvcmRlciBtYXR0ZXJzIGhlcmUsIHdlIG11c3QgY2FsbCBsZWFzZV9pbml0IGJlZm9yZQorCSBjcmVhdGluZyBhbnkgZmlsZSBkZXNjcmlwdG9ycyB3aGljaCBzaG91bGRuJ3QgYmUgbGVha2VkCisJIHRvIHRoZSBsZWFzZS1zY3JpcHQgaW5pdCBwcm9jZXNzLiAqLworICAgICAgbGVhc2VfaW5pdChub3cpOworICAgICAgZGhjcF9pbml0KCk7CisgICAgfQorI2VuZGlmCisKKyAgaWYgKCFlbnVtZXJhdGVfaW50ZXJmYWNlcygpKQorICAgIGRpZShfKCJmYWlsZWQgdG8gZmluZCBsaXN0IG9mIGludGVyZmFjZXM6ICVzIiksIE5VTEwsIEVDX01JU0MpOworICAgIAorICBpZiAoZGFlbW9uLT5vcHRpb25zICYgT1BUX05PV0lMRCkgCisgICAgeworICAgICAgZGFlbW9uLT5saXN0ZW5lcnMgPSBjcmVhdGVfYm91bmRfbGlzdGVuZXJzKCk7CisKKyAgICAgIGZvciAoaWZfdG1wID0gZGFlbW9uLT5pZl9uYW1lczsgaWZfdG1wOyBpZl90bXAgPSBpZl90bXAtPm5leHQpCisJaWYgKGlmX3RtcC0+bmFtZSAmJiAhaWZfdG1wLT51c2VkKQorCSAgZGllKF8oInVua25vd24gaW50ZXJmYWNlICVzIiksIGlmX3RtcC0+bmFtZSwgRUNfQkFETkVUKTsKKyAgCisgICAgICBmb3IgKGlmX3RtcCA9IGRhZW1vbi0+aWZfYWRkcnM7IGlmX3RtcDsgaWZfdG1wID0gaWZfdG1wLT5uZXh0KQorCWlmICghaWZfdG1wLT51c2VkKQorCSAgeworCSAgICBwcmV0dHlwcmludF9hZGRyKCZpZl90bXAtPmFkZHIsIGRhZW1vbi0+bmFtZWJ1ZmYpOworCSAgICBkaWUoXygibm8gaW50ZXJmYWNlIHdpdGggYWRkcmVzcyAlcyIpLCBkYWVtb24tPm5hbWVidWZmLCBFQ19CQURORVQpOworCSAgfQorICAgIH0KKyAgZWxzZSBpZiAoKGRhZW1vbi0+cG9ydCAhPSAwIHx8IChkYWVtb24tPm9wdGlvbnMgJiBPUFRfVEZUUCkpICYmCisJICAgIShkYWVtb24tPmxpc3RlbmVycyA9IGNyZWF0ZV93aWxkY2FyZF9saXN0ZW5lcnMoKSkpCisgICAgZGllKF8oImZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldDogJXMiKSwgTlVMTCwgRUNfQkFETkVUKTsKKyAgCisgIGlmIChkYWVtb24tPnBvcnQgIT0gMCkKKyAgICBjYWNoZV9pbml0KCk7CisgICAgCisgIGlmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfREJVUykKKyNpZmRlZiBIQVZFX0RCVVMKKyAgICB7CisgICAgICBjaGFyICplcnI7CisgICAgICBkYWVtb24tPmRidXMgPSBOVUxMOworICAgICAgZGFlbW9uLT53YXRjaGVzID0gTlVMTDsKKyAgICAgIGlmICgoZXJyID0gZGJ1c19pbml0KCkpKQorCWRpZShfKCJEQnVzIGVycm9yOiAlcyIpLCBlcnIsIEVDX01JU0MpOworICAgIH0KKyNlbHNlCisgIGRpZShfKCJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIiksIE5VTEwsIEVDX0JBRENPTkYpOworI2VuZGlmCisgIAorICBpZiAoZGFlbW9uLT5wb3J0ICE9IDApCisgICAgcHJlX2FsbG9jYXRlX3NmZHMoKTsKKworI2lmIGRlZmluZWQoSEFWRV9ESENQKSAmJiBkZWZpbmVkKEhBVkVfU0NSSVBUKQorICAvKiBOb3RlIGdldHB3bmFtIHJldHVybnMgc3RhdGljIHN0b3JhZ2UgKi8KKyAgaWYgKGRhZW1vbi0+ZGhjcCAmJiBkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kICYmIGRhZW1vbi0+c2NyaXB0dXNlcikKKyAgICB7CisgICAgICBpZiAoKGVudF9wdyA9IGdldHB3bmFtKGRhZW1vbi0+c2NyaXB0dXNlcikpKQorCXsKKwkgIHNjcmlwdF91aWQgPSBlbnRfcHctPnB3X3VpZDsKKwkgIHNjcmlwdF9naWQgPSBlbnRfcHctPnB3X2dpZDsKKwkgfQorICAgICAgZWxzZQorCWJhZHVzZXIgPSBkYWVtb24tPnNjcmlwdHVzZXI7CisgICAgfQorI2VuZGlmCisgIAorICBpZiAoZGFlbW9uLT51c2VybmFtZSAmJiAhKGVudF9wdyA9IGdldHB3bmFtKGRhZW1vbi0+dXNlcm5hbWUpKSkKKyAgICBiYWR1c2VyID0gZGFlbW9uLT51c2VybmFtZTsKKyAgZWxzZSBpZiAoZGFlbW9uLT5ncm91cG5hbWUgJiYgIShncCA9IGdldGdybmFtKGRhZW1vbi0+Z3JvdXBuYW1lKSkpCisgICAgYmFkdXNlciA9IGRhZW1vbi0+Z3JvdXBuYW1lOworCisgIGlmIChiYWR1c2VyKQorICAgIGRpZShfKCJ1bmtub3duIHVzZXIgb3IgZ3JvdXA6ICVzIiksIGJhZHVzZXIsIEVDX0JBRENPTkYpOworICAgCisgIC8qIGltcGxlbWVudCBncm91cCBkZWZhdWx0cywgImRpcCIgaWYgYXZhaWxhYmxlLCBvciBncm91cCBhc3NvY2lhdGVkIHdpdGggdWlkICovCisgIGlmICghZGFlbW9uLT5ncm91cF9zZXQgJiYgIWdwKQorICAgIHsKKyAgICAgIGlmICghKGdwID0gZ2V0Z3JuYW0oQ0hHUlApKSAmJiBlbnRfcHcpCisJZ3AgPSBnZXRncmdpZChlbnRfcHctPnB3X2dpZCk7CisgICAgICAKKyAgICAgIC8qIGZvciBlcnJvciBtZXNzYWdlICovCisgICAgICBpZiAoZ3ApCisJZGFlbW9uLT5ncm91cG5hbWUgPSBncC0+Z3JfbmFtZTsgCisgICAgfQorCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgIC8qIGRldGVybWluZSBjYXBhYmlsaXR5IEFQSSB2ZXJzaW9uIGhlcmUsIHdoaWxlIHdlIGNhbiBzdGlsbAorICAgICBjYWxsIHNhZmVfbWFsbG9jICovCisgIGlmIChlbnRfcHcgJiYgZW50X3B3LT5wd191aWQgIT0gMCkKKyAgICB7CisgICAgICBpbnQgY2Fwc2l6ZSA9IDE7IC8qIGZvciBoZWFkZXIgdmVyc2lvbiAxICovCisgICAgICBoZHIgPSBzYWZlX21hbGxvYyhzaXplb2YoKmhkcikpOworCisgICAgICAvKiBmaW5kIHZlcnNpb24gc3VwcG9ydGVkIGJ5IGtlcm5lbCAqLworICAgICAgbWVtc2V0KGhkciwgMCwgc2l6ZW9mKCpoZHIpKTsKKyAgICAgIGNhcGdldChoZHIsIE5VTEwpOworICAgICAgCisgICAgICBpZiAoaGRyLT52ZXJzaW9uICE9IExJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8xKQorCXsKKwkgIC8qIGlmIHVua25vd24gdmVyc2lvbiwgdXNlIGxhcmdlc3Qgc3VwcG9ydGVkIHZlcnNpb24gKDMpICovCisJICBpZiAoaGRyLT52ZXJzaW9uICE9IExJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8yKQorCSAgICBoZHItPnZlcnNpb24gPSBMSU5VWF9DQVBBQklMSVRZX1ZFUlNJT05fMzsKKwkgIGNhcHNpemUgPSAyOworCX0KKyAgICAgIAorICAgICAgZGF0YSA9IHNhZmVfbWFsbG9jKHNpemVvZigqZGF0YSkgKiBjYXBzaXplKTsKKyAgICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoKmRhdGEpICogY2Fwc2l6ZSk7CisgICAgfQorI2VuZGlmCisKKyAgLyogVXNlIGEgcGlwZSB0byBjYXJyeSBzaWduYWxzIGFuZCBvdGhlciBldmVudHMgYmFjayB0byB0aGUgZXZlbnQgbG9vcCAKKyAgICAgaW4gYSByYWNlLWZyZWUgbWFubmVyIGFuZCBhbm90aGVyIHRvIGNhcnJ5IGVycm9ycyB0byBkYWVtb24taW52b2tpbmcgcHJvY2VzcyAqLworICBzYWZlX3BpcGUocGlwZWZkLCAxKTsKKyAgCisgIHBpcGVyZWFkID0gcGlwZWZkWzBdOworICBwaXBld3JpdGUgPSBwaXBlZmRbMV07CisgIC8qIHByaW1lIHRoZSBwaXBlIHRvIGxvYWQgc3R1ZmYgZmlyc3QgdGltZS4gKi8KKyAgc2VuZF9ldmVudChwaXBld3JpdGUsIEVWRU5UX1JFTE9BRCwgMCk7IAorCisgIGVycl9waXBlWzFdID0gLTE7CisgIAorICBpZiAoIShkYWVtb24tPm9wdGlvbnMgJiBPUFRfREVCVUcpKSAgIAorICAgIHsKKyAgICAgIGludCBudWxsZmQ7CisKKyAgICAgIC8qIFRoZSBmb2xsb3dpbmcgY29kZSAiZGFlbW9uaXplcyIgdGhlIHByb2Nlc3MuIAorCSBTZWUgU3RldmVucyBzZWN0aW9uIDEyLjQgKi8KKyAgICAgIAorICAgICAgaWYgKGNoZGlyKCIvIikgIT0gMCkKKwlkaWUoXygiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiKSwgTlVMTCwgRUNfTUlTQyk7IAorCisjaWZuZGVmIE5PX0ZPUksgICAgICAKKyAgICAgIGlmICghKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT19GT1JLKSkKKwl7CisJICBwaWRfdCBwaWQ7CisJICAKKwkgIC8qIHBpcGUgdG8gY2FycnkgZXJyb3JzIGJhY2sgdG8gb3JpZ2luYWwgcHJvY2Vzcy4KKwkgICAgIFdoZW4gc3RhcnR1cCBpcyBjb21wbGV0ZSB3ZSBjbG9zZSB0aGlzIGFuZCB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzLiAqLworCSAgc2FmZV9waXBlKGVycl9waXBlLCAwKTsKKwkgIAorCSAgaWYgKChwaWQgPSBmb3JrKCkpID09IC0xKQorCSAgICAvKiBmZCA9PSAtMSBzaW5jZSB3ZSd2ZSBub3QgZm9ya2VkLCBuZXZlciByZXR1cm5zLiAqLworCSAgICBzZW5kX2V2ZW50KC0xLCBFVkVOVF9GT1JLX0VSUiwgZXJybm8pOworCSAgIAorCSAgaWYgKHBpZCAhPSAwKQorCSAgICB7CisJICAgICAgc3RydWN0IGV2ZW50X2Rlc2MgZXY7CisJICAgICAgCisJICAgICAgLyogY2xvc2Ugb3VyIGNvcHkgb2Ygd3JpdGUtZW5kICovCisJICAgICAgY2xvc2UoZXJyX3BpcGVbMV0pOworCSAgICAgIAorCSAgICAgIC8qIGNoZWNrIGZvciBlcnJvcnMgYWZ0ZXIgdGhlIGZvcmsgKi8KKwkgICAgICBpZiAocmVhZF93cml0ZShlcnJfcGlwZVswXSwgKHVuc2lnbmVkIGNoYXIgKikmZXYsIHNpemVvZihldiksIDEpKQorCQlmYXRhbF9ldmVudCgmZXYpOworCSAgICAgIAorCSAgICAgIF9leGl0KEVDX0dPT0QpOworCSAgICB9IAorCSAgCisJICBjbG9zZShlcnJfcGlwZVswXSk7CisKKwkgIC8qIE5PIGNhbGxzIHRvIGRpZSgpIGZyb20gaGVyZSBvbi4gKi8KKwkgIAorCSAgc2V0c2lkKCk7CisJIAorCSAgaWYgKChwaWQgPSBmb3JrKCkpID09IC0xKQorCSAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9GT1JLX0VSUiwgZXJybm8pOworCSAKKwkgIGlmIChwaWQgIT0gMCkKKwkgICAgX2V4aXQoMCk7CisJfQorI2VuZGlmCisgICAgICAgICAgICAKKyAgICAgIC8qIHdyaXRlIHBpZGZpbGUgX2FmdGVyXyBmb3JraW5nICEgKi8KKyAgICAgIGlmIChkYWVtb24tPnJ1bmZpbGUpCisJeworCSAgRklMRSAqcGlkZmlsZTsKKwkgIAorCSAgLyogb25seSBjb21wbGFpbiBpZiBzdGFydGVkIGFzIHJvb3QgKi8KKwkgIGlmICgocGlkZmlsZSA9IGZvcGVuKGRhZW1vbi0+cnVuZmlsZSwgInciKSkpCisJICAgIHsKKwkgICAgICBmcHJpbnRmKHBpZGZpbGUsICIlZFxuIiwgKGludCkgZ2V0cGlkKCkpOworCSAgICAgIGZjbG9zZShwaWRmaWxlKTsKKwkgICAgfQorCSAgZWxzZSBpZiAoZ2V0dWlkKCkgPT0gMCkKKwkgICAgeworCSAgICAgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX1BJREZJTEUsIGVycm5vKTsKKwkgICAgICBfZXhpdCgwKTsKKwkgICAgfQorCX0KKyAgICAgICAgIAorICAgICAgLyogb3BlbiAgc3Rkb3V0IGV0YyB0byAvZGV2L251bGwgKi8KKyAgICAgIG51bGxmZCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7CisgICAgICBkdXAyKG51bGxmZCwgU1RET1VUX0ZJTEVOTyk7CisgICAgICBkdXAyKG51bGxmZCwgU1RERVJSX0ZJTEVOTyk7CisgICAgICBkdXAyKG51bGxmZCwgU1RESU5fRklMRU5PKTsKKyAgICAgIGNsb3NlKG51bGxmZCk7CisgICAgfQorICAKKyAgIGxvZ19lcnIgPSBsb2dfc3RhcnQoZW50X3B3LCBlcnJfcGlwZVsxXSk7IAorICAgCisgICAvKiBpZiB3ZSBhcmUgdG8gcnVuIHNjcmlwdHMsIHdlIG5lZWQgdG8gZm9yayBhIGhlbHBlciBiZWZvcmUgZHJvcHBpbmcgcm9vdC4gKi8KKyAgZGFlbW9uLT5oZWxwZXJmZCA9IC0xOworI2lmIGRlZmluZWQoSEFWRV9ESENQKSAmJiBkZWZpbmVkKEhBVkVfU0NSSVBUKSAKKyAgaWYgKGRhZW1vbi0+ZGhjcCAmJiBkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kKQorICAgIGRhZW1vbi0+aGVscGVyZmQgPSBjcmVhdGVfaGVscGVyKHBpcGV3cml0ZSwgZXJyX3BpcGVbMV0sIHNjcmlwdF91aWQsIHNjcmlwdF9naWQsIG1heF9mZCk7CisjZW5kaWYKKworICBpZiAoIShkYWVtb24tPm9wdGlvbnMgJiBPUFRfREVCVUcpICYmIGdldHVpZCgpID09IDApICAgCisgICAgeworICAgICAgaW50IGJhZF9jYXBhYmlsaXRpZXMgPSAwOworICAgICAgZ2lkX3QgZHVtbXk7CisgICAgICAKKyAgICAgIC8qIHJlbW92ZSBhbGwgc3VwcGxpbWVudGFyeSBncm91cHMgKi8KKyAgICAgIGlmIChncCAmJiAKKwkgIChzZXRncm91cHMoMCwgJmR1bW15KSA9PSAtMSB8fAorCSAgIHNldGdpZChncC0+Z3JfZ2lkKSA9PSAtMSkpCisJeworCSAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfR1JPVVBfRVJSLCBlcnJubyk7CisJICBfZXhpdCgwKTsKKwl9CisgIAorICAgICAgaWYgKGVudF9wdyAmJiBlbnRfcHctPnB3X3VpZCAhPSAwKQorCXsgICAgIAorI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorCSAgLyogT24gbGludXgsIHdlIGtlZXAgQ0FQX05FVEFETUlOIChmb3IgQVJQLWluamVjdGlvbikgYW5kCisJICAgICBDQVBfTkVUX1JBVyAoZm9yIGljbXApIGlmIHdlJ3JlIGRvaW5nIGRoY3AgKi8KKwkgIGRhdGEtPmVmZmVjdGl2ZSA9IGRhdGEtPnBlcm1pdHRlZCA9IGRhdGEtPmluaGVyaXRhYmxlID0KKwkgICAgKDEgPDwgQ0FQX05FVF9BRE1JTikgfCAoMSA8PCBDQVBfTkVUX1JBVykgfCAoMSA8PCBDQVBfU0VUVUlEKTsKKwkgIAorCSAgLyogVGVsbCBrZXJuZWwgdG8gbm90IGNsZWFyIGNhcGFiaWxpdGllcyB3aGVuIGRyb3BwaW5nIHJvb3QgKi8KKwkgIGlmIChjYXBzZXQoaGRyLCBkYXRhKSA9PSAtMSB8fCBwcmN0bChQUl9TRVRfS0VFUENBUFMsIDEpID09IC0xKQorCSAgICBiYWRfY2FwYWJpbGl0aWVzID0gZXJybm87CisJCQkgIAorI2VsaWYgZGVmaW5lZChIQVZFX1NPTEFSSVNfTkVUV09SSykKKwkgIC8qIGh0dHA6Ly9kZXZlbG9wZXJzLnN1bi5jb20vc29sYXJpcy9hcnRpY2xlcy9wcm9ncmFtX3ByaXZpbGVnZXMuaHRtbCAqLworCSAgcHJpdl9zZXRfdCAqcHJpdl9zZXQ7CisJICAKKwkgIGlmICghKHByaXZfc2V0ID0gcHJpdl9zdHJfdG9fc2V0KCJiYXNpYyIsICIsIiwgTlVMTCkpIHx8CisJICAgICAgcHJpdl9hZGRzZXQocHJpdl9zZXQsIFBSSVZfTkVUX0lDTVBBQ0NFU1MpID09IC0xIHx8CisJICAgICAgcHJpdl9hZGRzZXQocHJpdl9zZXQsIFBSSVZfU1lTX05FVF9DT05GSUcpID09IC0xKQorCSAgICBiYWRfY2FwYWJpbGl0aWVzID0gZXJybm87CisKKwkgIGlmIChwcml2X3NldCAmJiBiYWRfY2FwYWJpbGl0aWVzID09IDApCisJICAgIHsKKwkgICAgICBwcml2X2ludmVyc2UocHJpdl9zZXQpOworCSAgCisJICAgICAgaWYgKHNldHBwcml2KFBSSVZfT0ZGLCBQUklWX0xJTUlULCBwcml2X3NldCkgPT0gLTEpCisJCWJhZF9jYXBhYmlsaXRpZXMgPSBlcnJubzsKKwkgICAgfQorCisJICBpZiAocHJpdl9zZXQpCisJICAgIHByaXZfZnJlZXNldChwcml2X3NldCk7CisKKyNlbmRpZiAgICAKKworCSAgaWYgKGJhZF9jYXBhYmlsaXRpZXMgIT0gMCkKKwkgICAgeworCSAgICAgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX0NBUF9FUlIsIGJhZF9jYXBhYmlsaXRpZXMpOworCSAgICAgIF9leGl0KDApOworCSAgICB9CisJICAKKwkgIC8qIGZpbmFsbHkgZHJvcCByb290ICovCisJICBpZiAoc2V0dWlkKGVudF9wdy0+cHdfdWlkKSA9PSAtMSkKKwkgICAgeworCSAgICAgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX1VTRVJfRVJSLCBlcnJubyk7CisJICAgICAgX2V4aXQoMCk7CisJICAgIH0gICAgIAorCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisJICBkYXRhLT5lZmZlY3RpdmUgPSBkYXRhLT5wZXJtaXR0ZWQgPSAKKwkgICAgKDEgPDwgQ0FQX05FVF9BRE1JTikgfCAoMSA8PCBDQVBfTkVUX1JBVyk7CisJICBkYXRhLT5pbmhlcml0YWJsZSA9IDA7CisJICAKKwkgIC8qIGxvc2UgdGhlIHNldHVpZCBhbmQgc2V0Z2lkIGNhcGJpbGl0aWVzICovCisJICBpZiAoY2Fwc2V0KGhkciwgZGF0YSkgPT0gLTEpCisJICAgIHsKKwkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9DQVBfRVJSLCBlcnJubyk7CisJICAgICAgX2V4aXQoMCk7CisJICAgIH0KKyNlbmRpZgorCSAgCisJfQorICAgIH0KKyAgCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgIGlmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfREVCVUcpIAorICAgIHByY3RsKFBSX1NFVF9EVU1QQUJMRSwgMSk7CisjZW5kaWYKKworICBpZiAoZGFlbW9uLT5wb3J0ID09IDApCisgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIpLCBWRVJTSU9OKTsKKyAgZWxzZSBpZiAoZGFlbW9uLT5jYWNoZXNpemUgIT0gMCkKKyAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIiksIFZFUlNJT04sIGRhZW1vbi0+Y2FjaGVzaXplKTsKKyAgZWxzZQorICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygic3RhcnRlZCwgdmVyc2lvbiAlcyBjYWNoZSBkaXNhYmxlZCIpLCBWRVJTSU9OKTsKKyAgCisgIG15X3N5c2xvZyhMT0dfSU5GTywgXygiY29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzIiksIGNvbXBpbGVfb3B0cyk7CisgIAorI2lmZGVmIEhBVkVfREJVUworICBpZiAoZGFlbW9uLT5vcHRpb25zICYgT1BUX0RCVVMpCisgICAgeworICAgICAgaWYgKGRhZW1vbi0+ZGJ1cykKKwlteV9zeXNsb2coTE9HX0lORk8sIF8oIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBjb25uZWN0ZWQgdG8gc3lzdGVtIGJ1cyIpKTsKKyAgICAgIGVsc2UKKwlteV9zeXNsb2coTE9HX0lORk8sIF8oIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBidXMgY29ubmVjdGlvbiBwZW5kaW5nIikpOworICAgIH0KKyNlbmRpZgorCisgIGlmIChsb2dfZXJyICE9IDApCisgICAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJ3YXJuaW5nOiBmYWlsZWQgdG8gY2hhbmdlIG93bmVyIG9mICVzOiAlcyIpLCAKKwkgICAgICBkYWVtb24tPmxvZ19maWxlLCBzdHJlcnJvcihsb2dfZXJyKSk7CisKKyAgaWYgKGJpbmRfZmFsbGJhY2spCisgICAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJzZXR0aW5nIC0tYmluZC1pbnRlcmZhY2VzIG9wdGlvbiBiZWNhdXNlIG9mIE9TIGxpbWl0YXRpb25zIikpOworICAKKyAgaWYgKCEoZGFlbW9uLT5vcHRpb25zICYgT1BUX05PV0lMRCkpIAorICAgIGZvciAoaWZfdG1wID0gZGFlbW9uLT5pZl9uYW1lczsgaWZfdG1wOyBpZl90bXAgPSBpZl90bXAtPm5leHQpCisgICAgICBpZiAoaWZfdG1wLT5uYW1lICYmICFpZl90bXAtPnVzZWQpCisJbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJ3YXJuaW5nOiBpbnRlcmZhY2UgJXMgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0IiksIGlmX3RtcC0+bmFtZSk7CisgICAKKyAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwICYmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTk9fUkVTT0xWKSkKKyAgICB7CisgICAgICBpZiAoZGFlbW9uLT5yZXNvbHZfZmlsZXMgJiYgIWRhZW1vbi0+cmVzb2x2X2ZpbGVzLT5pc19kZWZhdWx0KQorCW15X3N5c2xvZyhMT0dfV0FSTklORywgXygid2FybmluZzogaWdub3JpbmcgcmVzb2x2LWZpbGUgZmxhZyBiZWNhdXNlIG5vLXJlc29sdiBpcyBzZXQiKSk7CisgICAgICBkYWVtb24tPnJlc29sdl9maWxlcyA9IE5VTEw7CisgICAgICBpZiAoIWRhZW1vbi0+c2VydmVycykKKwlteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIpKTsKKyAgICB9IAorCisgIGlmIChkYWVtb24tPm1heF9sb2dzICE9IDApCisgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJhc3luY2hyb25vdXMgbG9nZ2luZyBlbmFibGVkLCBxdWV1ZSBsaW1pdCBpcyAlZCBtZXNzYWdlcyIpLCBkYWVtb24tPm1heF9sb2dzKTsKKworI2lmZGVmIEhBVkVfREhDUAorICBpZiAoZGFlbW9uLT5kaGNwKQorICAgIHsKKyAgICAgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmRoY3BfdG1wOworICAgICAgCisgICAgICBmb3IgKGRoY3BfdG1wID0gZGFlbW9uLT5kaGNwOyBkaGNwX3RtcDsgZGhjcF90bXAgPSBkaGNwX3RtcC0+bmV4dCkKKwl7CisJICBwcmV0dHlwcmludF90aW1lKGRhZW1vbi0+ZGhjcF9idWZmMiwgZGhjcF90bXAtPmxlYXNlX3RpbWUpOworCSAgc3RyY3B5KGRhZW1vbi0+ZGhjcF9idWZmLCBpbmV0X250b2EoZGhjcF90bXAtPnN0YXJ0KSk7CisJICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCAKKwkJICAgIChkaGNwX3RtcC0+ZmxhZ3MgJiBDT05URVhUX1NUQVRJQykgPyAKKwkJICAgIF8oIkRIQ1AsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMsIGxlYXNlIHRpbWUgJXMiKSA6CisJCSAgICAoZGhjcF90bXAtPmZsYWdzICYgQ09OVEVYVF9QUk9YWSkgPworCQkgICAgXygiREhDUCwgcHJveHkgb24gc3VibmV0ICUuMHMlcyUuMHMiKSA6CisJCSAgICBfKCJESENQLCBJUCByYW5nZSAlcyAtLSAlcywgbGVhc2UgdGltZSAlcyIpLAorCQkgICAgZGFlbW9uLT5kaGNwX2J1ZmYsIGluZXRfbnRvYShkaGNwX3RtcC0+ZW5kKSwgZGFlbW9uLT5kaGNwX2J1ZmYyKTsKKwl9CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1RGVFAKKyAgaWYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9URlRQKQorICAgIHsKKyNpZmRlZiBGRF9TRVRTSVpFCisgICAgICBpZiAoRkRfU0VUU0laRSA8ICh1bnNpZ25lZCltYXhfZmQpCisJbWF4X2ZkID0gRkRfU0VUU0laRTsKKyNlbmRpZgorCisgICAgICBteV9zeXNsb2coTVNfVEZUUCB8IExPR19JTkZPLCAiVEZUUCAlcyVzICVzIiwgCisJCWRhZW1vbi0+dGZ0cF9wcmVmaXggPyBfKCJyb290IGlzICIpIDogXygiZW5hYmxlZCIpLAorCQlkYWVtb24tPnRmdHBfcHJlZml4ID8gZGFlbW9uLT50ZnRwX3ByZWZpeDogIiIsCisJCWRhZW1vbi0+b3B0aW9ucyAmIE9QVF9URlRQX1NFQ1VSRSA/IF8oInNlY3VyZSBtb2RlIikgOiAiIik7CisgICAgICAKKyAgICAgIC8qIFRoaXMgaXMgYSBndWVzcywgaXQgYXNzdW1lcyB0aGF0IGZvciBzbWFsbCBsaW1pdHMsIAorCSBkaXNqb2ludCBmaWxlcyBtaWdodCBiZSBzZXJ2ZWQsIGJ1dCBmb3IgbGFyZ2UgbGltaXRzLCAKKwkgYSBzaW5nbGUgZmlsZSB3aWxsIGJlIHNlbnQgdG8gbWF5IGNsaWVudHMgKHRoZSBmaWxlIG9ubHkgbmVlZHMKKwkgb25lIGZkKS4gKi8KKworICAgICAgbWF4X2ZkIC09IDMwOyAvKiB1c2Ugb3RoZXIgdGhhbiBURlRQICovCisgICAgICAKKyAgICAgIGlmIChtYXhfZmQgPCAwKQorCW1heF9mZCA9IDU7CisgICAgICBlbHNlIGlmIChtYXhfZmQgPCAxMDApCisJbWF4X2ZkID0gbWF4X2ZkLzI7CisgICAgICBlbHNlCisJbWF4X2ZkID0gbWF4X2ZkIC0gMjA7CisgICAgICAKKyAgICAgIC8qIGlmIHdlIGhhdmUgdG8gdXNlIGEgbGltaXRlZCByYW5nZSBvZiBwb3J0cywgCisJIHRoYXQgd2lsbCBsaW1pdCB0aGUgbnVtYmVyIG9mIHRyYW5zZmVycyAqLworICAgICAgaWYgKGRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0ICE9IDAgJiYKKwkgIGRhZW1vbi0+ZW5kX3RmdHBfcG9ydCAtIGRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0ICsgMSA8IG1heF9mZCkKKwltYXhfZmQgPSBkYWVtb24tPmVuZF90ZnRwX3BvcnQgLSBkYWVtb24tPnN0YXJ0X3RmdHBfcG9ydCArIDE7CisKKyAgICAgIGlmIChkYWVtb24tPnRmdHBfbWF4ID4gbWF4X2ZkKQorCXsKKwkgIGRhZW1vbi0+dGZ0cF9tYXggPSBtYXhfZmQ7CisJICBteV9zeXNsb2coTVNfVEZUUCB8IExPR19XQVJOSU5HLCAKKwkJICAgIF8oInJlc3RyaWN0aW5nIG1heGltdW0gc2ltdWx0YW5lb3VzIFRGVFAgdHJhbnNmZXJzIHRvICVkIiksIAorCQkgICAgZGFlbW9uLT50ZnRwX21heCk7CisJfQorICAgIH0KKyNlbmRpZgorCisgIC8qIGZpbmlzaGVkIHN0YXJ0LXVwIC0gcmVsZWFzZSBvcmlnaW5hbCBwcm9jZXNzICovCisgIGlmIChlcnJfcGlwZVsxXSAhPSAtMSkKKyAgICBjbG9zZShlcnJfcGlwZVsxXSk7CisgIAorICBpZiAoZGFlbW9uLT5wb3J0ICE9IDApCisgICAgY2hlY2tfc2VydmVycygpOworICAKKyAgcGlkID0gZ2V0cGlkKCk7CisgIAorICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpbnQgbWF4ZmQgPSAtMTsKKyAgICAgIHN0cnVjdCB0aW1ldmFsIHQsICp0cCA9IE5VTEw7CisgICAgICBmZF9zZXQgcnNldCwgd3NldCwgZXNldDsKKyAgICAgIAorICAgICAgRkRfWkVSTygmcnNldCk7CisgICAgICBGRF9aRVJPKCZ3c2V0KTsKKyAgICAgIEZEX1pFUk8oJmVzZXQpOworICAgICAgCisgICAgICAvKiBpZiB3ZSBhcmUgb3V0IG9mIHJlc291cmNlcywgZmluZCBob3cgbG9uZyB3ZSBoYXZlIHRvIHdhaXQKKwkgZm9yIHNvbWUgdG8gY29tZSBmcmVlLCB3ZSdsbCBsb29wIGFyb3VuZCB0aGVuIGFuZCByZXN0YXJ0CisJIGxpc3RlbmluZyBmb3IgcXVlcmllcyAqLworICAgICAgaWYgKCh0LnR2X3NlYyA9IHNldF9kbnNfbGlzdGVuZXJzKG5vdywgJnJzZXQsICZtYXhmZCkpICE9IDApCisJeworCSAgdC50dl91c2VjID0gMDsKKwkgIHRwID0gJnQ7CisJfQorCisgICAgICAvKiBXaGlsc3QgcG9sbGluZyBmb3IgdGhlIGRidXMsIG9yIGRvaW5nIGEgdGZ0cCB0cmFuc2Zlciwgd2FrZSBldmVyeSBxdWFydGVyIHNlY29uZCAqLworICAgICAgaWYgKGRhZW1vbi0+dGZ0cF90cmFucyB8fAorCSAgKChkYWVtb24tPm9wdGlvbnMgJiBPUFRfREJVUykgJiYgIWRhZW1vbi0+ZGJ1cykpCisJeworCSAgdC50dl9zZWMgPSAwOworCSAgdC50dl91c2VjID0gMjUwMDAwOworCSAgdHAgPSAmdDsKKwl9CisKKyNpZmRlZiBIQVZFX0RCVVMKKyAgICAgIHNldF9kYnVzX2xpc3RlbmVycygmbWF4ZmQsICZyc2V0LCAmd3NldCwgJmVzZXQpOworI2VuZGlmCQorICAKKyNpZmRlZiBIQVZFX0RIQ1AKKyAgICAgIGlmIChkYWVtb24tPmRoY3ApCisJeworCSAgRkRfU0VUKGRhZW1vbi0+ZGhjcGZkLCAmcnNldCk7CisJICBidW1wX21heGZkKGRhZW1vbi0+ZGhjcGZkLCAmbWF4ZmQpOworCX0KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgICAgICBGRF9TRVQoZGFlbW9uLT5uZXRsaW5rZmQsICZyc2V0KTsKKyAgICAgIGJ1bXBfbWF4ZmQoZGFlbW9uLT5uZXRsaW5rZmQsICZtYXhmZCk7CisjZW5kaWYKKyAgICAgIAorICAgICAgRkRfU0VUKHBpcGVyZWFkLCAmcnNldCk7CisgICAgICBidW1wX21heGZkKHBpcGVyZWFkLCAmbWF4ZmQpOworCisjaWZkZWYgSEFWRV9ESENQCisjICBpZmRlZiBIQVZFX1NDUklQVAorICAgICAgd2hpbGUgKGhlbHBlcl9idWZfZW1wdHkoKSAmJiBkb19zY3JpcHRfcnVuKG5vdykpOworCisgICAgICBpZiAoIWhlbHBlcl9idWZfZW1wdHkoKSkKKwl7CisJICBGRF9TRVQoZGFlbW9uLT5oZWxwZXJmZCwgJndzZXQpOworCSAgYnVtcF9tYXhmZChkYWVtb24tPmhlbHBlcmZkLCAmbWF4ZmQpOworCX0KKyMgIGVsc2UKKyAgICAgIC8qIG5lZWQgdGhpcyBmb3Igb3RoZXIgc2lkZS1lZmZlY3RzICovCisgICAgICB3aGlsZSAoZG9fc2NyaXB0X3J1bihub3cpKTsKKyMgIGVuZGlmCisjZW5kaWYKKyAgIAorICAgICAgLyogbXVzdCBkbyB0aGlzIGp1c3QgYmVmb3JlIHNlbGVjdCgpLCB3aGVuIHdlIGtub3cgbm8KKwkgbW9yZSBjYWxscyB0byBteV9zeXNsb2coKSBjYW4gb2NjdXIgKi8KKyAgICAgIHNldF9sb2dfd3JpdGVyKCZ3c2V0LCAmbWF4ZmQpOworICAgICAgCisgICAgICBpZiAoc2VsZWN0KG1heGZkKzEsICZyc2V0LCAmd3NldCwgJmVzZXQsIHRwKSA8IDApCisJeworCSAgLyogb3RoZXJ3aXNlIHVuZGVmaW5lZCBhZnRlciBlcnJvciAqLworCSAgRkRfWkVSTygmcnNldCk7IEZEX1pFUk8oJndzZXQpOyBGRF9aRVJPKCZlc2V0KTsKKwl9CisKKyAgICAgIG5vdyA9IGRuc21hc3FfdGltZSgpOworCisgICAgICBjaGVja19sb2dfd3JpdGVyKCZ3c2V0KTsKKworICAgICAgLyogQ2hlY2sgZm9yIGNoYW5nZXMgdG8gcmVzb2x2IGZpbGVzIG9uY2UgcGVyIHNlY29uZCBtYXguICovCisgICAgICAvKiBEb24ndCBnbyBzaWxlbnQgZm9yIGxvbmcgcGVyaW9kcyBpZiB0aGUgY2xvY2sgZ29lcyBiYWNrd2FyZHMuICovCisgICAgICBpZiAoZGFlbW9uLT5sYXN0X3Jlc29sdiA9PSAwIHx8IAorCSAgZGlmZnRpbWUobm93LCBkYWVtb24tPmxhc3RfcmVzb2x2KSA+IDEuMCB8fCAKKwkgIGRpZmZ0aW1lKG5vdywgZGFlbW9uLT5sYXN0X3Jlc29sdikgPCAtMS4wKQorCXsKKwkgIGRhZW1vbi0+bGFzdF9yZXNvbHYgPSBub3c7CisKKwkgIGlmIChkYWVtb24tPnBvcnQgIT0gMCAmJiAhKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT19QT0xMKSkKKwkgICAgcG9sbF9yZXNvbHYoKTsKKwl9CisgICAgICAKKyAgICAgIGlmIChGRF9JU1NFVChwaXBlcmVhZCwgJnJzZXQpKQorCWFzeW5jX2V2ZW50KHBpcGVyZWFkLCBub3cpOworICAgICAgCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgICAgICBpZiAoRkRfSVNTRVQoZGFlbW9uLT5uZXRsaW5rZmQsICZyc2V0KSkKKwluZXRsaW5rX211bHRpY2FzdCgpOworI2VuZGlmCisgICAgICAKKyNpZmRlZiBIQVZFX0RCVVMKKyAgICAgIC8qIGlmIHdlIGRpZG4ndCBjcmVhdGUgYSBEQnVzIGNvbm5lY3Rpb24sIHJldHJ5IG5vdy4gKi8gCisgICAgIGlmICgoZGFlbW9uLT5vcHRpb25zICYgT1BUX0RCVVMpICYmICFkYWVtb24tPmRidXMpCisJeworCSAgY2hhciAqZXJyOworCSAgaWYgKChlcnIgPSBkYnVzX2luaXQoKSkpCisJICAgIG15X3N5c2xvZyhMT0dfV0FSTklORywgXygiREJ1cyBlcnJvcjogJXMiKSwgZXJyKTsKKwkgIGlmIChkYWVtb24tPmRidXMpCisJICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygiY29ubmVjdGVkIHRvIHN5c3RlbSBEQnVzIikpOworCX0KKyAgICAgIGNoZWNrX2RidXNfbGlzdGVuZXJzKCZyc2V0LCAmd3NldCwgJmVzZXQpOworI2VuZGlmCisgICAgICAKKyAgICAgIGNoZWNrX2Ruc19saXN0ZW5lcnMoJnJzZXQsIG5vdyk7CisKKyNpZmRlZiBIQVZFX1RGVFAKKyAgICAgIGNoZWNrX3RmdHBfbGlzdGVuZXJzKCZyc2V0LCBub3cpOworI2VuZGlmICAgICAgCisKKyNpZmRlZiBIQVZFX0RIQ1AKKyAgICAgIGlmIChkYWVtb24tPmRoY3AgJiYgRkRfSVNTRVQoZGFlbW9uLT5kaGNwZmQsICZyc2V0KSkKKwlkaGNwX3BhY2tldChub3cpOworCisjICBpZmRlZiBIQVZFX1NDUklQVAorICAgICAgaWYgKGRhZW1vbi0+aGVscGVyZmQgIT0gLTEgJiYgRkRfSVNTRVQoZGFlbW9uLT5oZWxwZXJmZCwgJndzZXQpKQorCWhlbHBlcl93cml0ZSgpOworIyAgZW5kaWYKKyNlbmRpZgorCisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzaWdfaGFuZGxlcihpbnQgc2lnKQoreworICBpZiAocGlkID09IDApCisgICAgeworICAgICAgLyogaWdub3JlIGFueXRoaW5nIG90aGVyIHRoYW4gVEVSTSBkdXJpbmcgc3RhcnR1cAorCSBhbmQgaW4gaGVscGVyIHByb2MuIChoZWxwZXIgaWdub3JlIFRFUk0gdG9vKSAqLworICAgICAgaWYgKHNpZyA9PSBTSUdURVJNKQorCWV4aXQoRUNfTUlTQyk7CisgICAgfQorICBlbHNlIGlmIChwaWQgIT0gZ2V0cGlkKCkpCisgICAgeworICAgICAgLyogYWxhcm0gaXMgdXNlZCB0byBraWxsIFRDUCBjaGlsZHJlbiBhZnRlciBhIGZpeGVkIHRpbWUuICovCisgICAgICBpZiAoc2lnID09IFNJR0FMUk0pCisJX2V4aXQoMCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogbWFzdGVyIHByb2Nlc3MgKi8KKyAgICAgIGludCBldmVudCwgZXJyc2F2ZSA9IGVycm5vOworICAgICAgCisgICAgICBpZiAoc2lnID09IFNJR0hVUCkKKwlldmVudCA9IEVWRU5UX1JFTE9BRDsKKyAgICAgIGVsc2UgaWYgKHNpZyA9PSBTSUdDSExEKQorCWV2ZW50ID0gRVZFTlRfQ0hJTEQ7CisgICAgICBlbHNlIGlmIChzaWcgPT0gU0lHQUxSTSkKKwlldmVudCA9IEVWRU5UX0FMQVJNOworICAgICAgZWxzZSBpZiAoc2lnID09IFNJR1RFUk0pCisJZXZlbnQgPSBFVkVOVF9URVJNOworICAgICAgZWxzZSBpZiAoc2lnID09IFNJR1VTUjEpCisJZXZlbnQgPSBFVkVOVF9EVU1QOworICAgICAgZWxzZSBpZiAoc2lnID09IFNJR1VTUjIpCisJZXZlbnQgPSBFVkVOVF9SRU9QRU47CisgICAgICBlbHNlCisJcmV0dXJuOworCisgICAgICBzZW5kX2V2ZW50KHBpcGV3cml0ZSwgZXZlbnQsIDApOyAKKyAgICAgIGVycm5vID0gZXJyc2F2ZTsKKyAgICB9Cit9CisKK3ZvaWQgc2VuZF9ldmVudChpbnQgZmQsIGludCBldmVudCwgaW50IGRhdGEpCit7CisgIHN0cnVjdCBldmVudF9kZXNjIGV2OworICAKKyAgZXYuZXZlbnQgPSBldmVudDsKKyAgZXYuZGF0YSA9IGRhdGE7CisgIAorICAvKiBlcnJvciBwaXBlLCBkZWJ1ZyBtb2RlLiAqLworICBpZiAoZmQgPT0gLTEpCisgICAgZmF0YWxfZXZlbnQoJmV2KTsKKyAgZWxzZQorICAgIC8qIHBpcGUgaXMgbm9uLWJsb2NraW5nIGFuZCBzdHJ1Y3QgZXZlbnRfZGVzYyBpcyBzbWFsbGVyIHRoYW4KKyAgICAgICBQSVBFX0JVRiwgc28gdGhpcyBlaXRoZXIgZmFpbHMgb3Igd3JpdGVzIGV2ZXJ5dGhpbmcgKi8KKyAgICB3aGlsZSAod3JpdGUoZmQsICZldiwgc2l6ZW9mKGV2KSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworfQorCitzdGF0aWMgdm9pZCBmYXRhbF9ldmVudChzdHJ1Y3QgZXZlbnRfZGVzYyAqZXYpCit7CisgIGVycm5vID0gZXYtPmRhdGE7CisgIAorICBzd2l0Y2ggKGV2LT5ldmVudCkKKyAgICB7CisgICAgY2FzZSBFVkVOVF9ESUU6CisgICAgICBleGl0KDApOworCisgICAgY2FzZSBFVkVOVF9GT1JLX0VSUjoKKyAgICAgIGRpZShfKCJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIiksIE5VTEwsIEVDX01JU0MpOworICAKKyAgICBjYXNlIEVWRU5UX1BJUEVfRVJSOgorICAgICAgZGllKF8oImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIpLCBOVUxMLCBFQ19NSVNDKTsKKyAgCisgICAgY2FzZSBFVkVOVF9DQVBfRVJSOgorICAgICAgZGllKF8oInNldHRpbmcgY2FwYWJpbGl0aWVzIGZhaWxlZDogJXMiKSwgTlVMTCwgRUNfTUlTQyk7CisKKyAgICBjYXNlIEVWRU5UX1VTRVJfRVJSOgorICAgIGNhc2UgRVZFTlRfSFVTRVJfRVJSOgorICAgICAgZGllKF8oImZhaWxlZCB0byBjaGFuZ2UgdXNlci1pZCB0byAlczogJXMiKSwgCisJICBldi0+ZXZlbnQgPT0gRVZFTlRfVVNFUl9FUlIgPyBkYWVtb24tPnVzZXJuYW1lIDogZGFlbW9uLT5zY3JpcHR1c2VyLAorCSAgRUNfTUlTQyk7CisKKyAgICBjYXNlIEVWRU5UX0dST1VQX0VSUjoKKyAgICAgIGRpZShfKCJmYWlsZWQgdG8gY2hhbmdlIGdyb3VwLWlkIHRvICVzOiAlcyIpLCBkYWVtb24tPmdyb3VwbmFtZSwgRUNfTUlTQyk7CisgICAgICAKKyAgICBjYXNlIEVWRU5UX1BJREZJTEU6CisgICAgICBkaWUoXygiZmFpbGVkIHRvIG9wZW4gcGlkZmlsZSAlczogJXMiKSwgZGFlbW9uLT5ydW5maWxlLCBFQ19GSUxFKTsKKworICAgIGNhc2UgRVZFTlRfTE9HX0VSUjoKKyAgICAgIGRpZShfKCJjYW5ub3Qgb3BlbiAlczogJXMiKSwgZGFlbW9uLT5sb2dfZmlsZSA/IGRhZW1vbi0+bG9nX2ZpbGUgOiAibG9nIiwgRUNfRklMRSk7CisgICAgfQorfQkKKyAgICAgIAorc3RhdGljIHZvaWQgYXN5bmNfZXZlbnQoaW50IHBpcGUsIHRpbWVfdCBub3cpCit7CisgIHBpZF90IHA7CisgIHN0cnVjdCBldmVudF9kZXNjIGV2OworICBpbnQgaTsKKworICBpZiAocmVhZF93cml0ZShwaXBlLCAodW5zaWduZWQgY2hhciAqKSZldiwgc2l6ZW9mKGV2KSwgMSkpCisgICAgc3dpdGNoIChldi5ldmVudCkKKyAgICAgIHsKKyAgICAgIGNhc2UgRVZFTlRfUkVMT0FEOgorCWNsZWFyX2NhY2hlX2FuZF9yZWxvYWQobm93KTsKKwlpZiAoZGFlbW9uLT5wb3J0ICE9IDAgJiYgZGFlbW9uLT5yZXNvbHZfZmlsZXMgJiYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT19QT0xMKSkKKwkgIHsKKwkgICAgcmVsb2FkX3NlcnZlcnMoZGFlbW9uLT5yZXNvbHZfZmlsZXMtPm5hbWUpOworCSAgICBjaGVja19zZXJ2ZXJzKCk7CisJICB9CisjaWZkZWYgSEFWRV9ESENQCisJcmVydW5fc2NyaXB0cygpOworI2VuZGlmCisJYnJlYWs7CisJCisgICAgICBjYXNlIEVWRU5UX0RVTVA6CisJaWYgKGRhZW1vbi0+cG9ydCAhPSAwKQorCSAgZHVtcF9jYWNoZShub3cpOworCWJyZWFrOworCQorICAgICAgY2FzZSBFVkVOVF9BTEFSTToKKyNpZmRlZiBIQVZFX0RIQ1AKKwlpZiAoZGFlbW9uLT5kaGNwKQorCSAgeworCSAgICBsZWFzZV9wcnVuZShOVUxMLCBub3cpOworCSAgICBsZWFzZV91cGRhdGVfZmlsZShub3cpOworCSAgfQorI2VuZGlmCisJYnJlYWs7CisJCQorICAgICAgY2FzZSBFVkVOVF9DSElMRDoKKwkvKiBTZWUgU3RldmVucyA1LjEwICovCisJd2hpbGUgKChwID0gd2FpdHBpZCgtMSwgTlVMTCwgV05PSEFORykpICE9IDApCisJICBpZiAocCA9PSAtMSkKKwkgICAgeworCSAgICAgIGlmIChlcnJubyAhPSBFSU5UUikKKwkJYnJlYWs7CisJICAgIH0gICAgICAKKwkgIGVsc2UgCisJICAgIGZvciAoaSA9IDAgOyBpIDwgTUFYX1BST0NTOyBpKyspCisJICAgICAgaWYgKGRhZW1vbi0+dGNwX3BpZHNbaV0gPT0gcCkKKwkJZGFlbW9uLT50Y3BfcGlkc1tpXSA9IDA7CisJYnJlYWs7CisJCisgICAgICBjYXNlIEVWRU5UX0tJTExFRDoKKwlteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oImNoaWxkIHByb2Nlc3Mga2lsbGVkIGJ5IHNpZ25hbCAlZCIpLCBldi5kYXRhKTsKKwlicmVhazsKKworICAgICAgY2FzZSBFVkVOVF9FWElURUQ6CisJbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJjaGlsZCBwcm9jZXNzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCIpLCBldi5kYXRhKTsKKwlicmVhazsKKworICAgICAgY2FzZSBFVkVOVF9FWEVDX0VSUjoKKwlteV9zeXNsb2coTE9HX0VSUiwgXygiZmFpbGVkIHRvIGV4ZWN1dGUgJXM6ICVzIiksIAorCQkgIGRhZW1vbi0+bGVhc2VfY2hhbmdlX2NvbW1hbmQsIHN0cmVycm9yKGV2LmRhdGEpKTsKKwlicmVhazsKKworCS8qIG5lY2Vzc2FyeSBmb3IgZmF0YWwgZXJyb3JzIGluIGhlbHBlciAqLworICAgICAgY2FzZSBFVkVOVF9IVVNFUl9FUlI6CisgICAgICBjYXNlIEVWRU5UX0RJRToKKwlmYXRhbF9ldmVudCgmZXYpOworCWJyZWFrOworCisgICAgICBjYXNlIEVWRU5UX1JFT1BFTjoKKwkvKiBOb3RlOiB0aGlzIG1heSBsZWF2ZSBUQ1AtaGFuZGxpbmcgcHJvY2Vzc2VzIHdpdGggdGhlIG9sZCBmaWxlIHN0aWxsIG9wZW4uCisJICAgU2luY2UgYW55IHN1Y2ggcHJvY2VzcyB3aWxsIGRpZSBpbiBDSElMRF9MSUZFVElNRSBvciBwcm9iYWJseSBtdWNoIHNvb25lciwKKwkgICB3ZSBsZWF2ZSB0aGVtIGxvZ2dpbmcgdG8gdGhlIG9sZCBmaWxlLiAqLworCWlmIChkYWVtb24tPmxvZ19maWxlICE9IE5VTEwpCisJICBsb2dfcmVvcGVuKGRhZW1vbi0+bG9nX2ZpbGUpOworCWJyZWFrOworCQorICAgICAgY2FzZSBFVkVOVF9URVJNOgorCS8qIEtub2NrIGFsbCBvdXIgY2hpbGRyZW4gb24gdGhlIGhlYWQuICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9QUk9DUzsgaSsrKQorCSAgaWYgKGRhZW1vbi0+dGNwX3BpZHNbaV0gIT0gMCkKKwkgICAga2lsbChkYWVtb24tPnRjcF9waWRzW2ldLCBTSUdBTFJNKTsKKwkKKyNpZiBkZWZpbmVkKEhBVkVfREhDUCkgJiYgZGVmaW5lZChIQVZFX1NDUklQVCkKKwkvKiBoYW5kbGUgcGVuZGluZyBsZWFzZSB0cmFuc2l0aW9ucyAqLworCWlmIChkYWVtb24tPmhlbHBlcmZkICE9IC0xKQorCSAgeworCSAgICAvKiBibG9jayBpbiB3cml0ZXMgdW50aWwgYWxsIGRvbmUgKi8KKwkgICAgaWYgKChpID0gZmNudGwoZGFlbW9uLT5oZWxwZXJmZCwgRl9HRVRGTCkpICE9IC0xKQorCSAgICAgIGZjbnRsKGRhZW1vbi0+aGVscGVyZmQsIEZfU0VURkwsIGkgJiB+T19OT05CTE9DSyk7IAorCSAgICBkbyB7CisJICAgICAgaGVscGVyX3dyaXRlKCk7CisJICAgIH0gd2hpbGUgKCFoZWxwZXJfYnVmX2VtcHR5KCkgfHwgZG9fc2NyaXB0X3J1bihub3cpKTsKKwkgICAgY2xvc2UoZGFlbW9uLT5oZWxwZXJmZCk7CisJICB9CisjZW5kaWYKKwkKKwlpZiAoZGFlbW9uLT5sZWFzZV9zdHJlYW0pCisJICBmY2xvc2UoZGFlbW9uLT5sZWFzZV9zdHJlYW0pOworCisJaWYgKGRhZW1vbi0+cnVuZmlsZSkKKwkgIHVubGluayhkYWVtb24tPnJ1bmZpbGUpOworCQorCW15X3N5c2xvZyhMT0dfSU5GTywgXygiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iKSk7CisJZmx1c2hfbG9nKCk7CisJZXhpdChFQ19HT09EKTsKKyAgICAgIH0KK30KKworc3RhdGljIHZvaWQgcG9sbF9yZXNvbHYoKQoreworICBzdHJ1Y3QgcmVzb2x2YyAqcmVzLCAqbGF0ZXN0OworICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworICB0aW1lX3QgbGFzdF9jaGFuZ2UgPSAwOworICAvKiBUaGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBwb3NzaWJsZSBmaWxlLiAKKyAgICAgR28gdGhyb3VnaCBhbmQgZmluZCB0aGUgb25lIHdoaWNoIGNoYW5nZWQgX2xhc3RfLgorICAgICBXYXJuIG9mIGFueSB3aGljaCBjYW4ndCBiZSByZWFkLiAqLworICBmb3IgKGxhdGVzdCA9IE5VTEwsIHJlcyA9IGRhZW1vbi0+cmVzb2x2X2ZpbGVzOyByZXM7IHJlcyA9IHJlcy0+bmV4dCkKKyAgICBpZiAoc3RhdChyZXMtPm5hbWUsICZzdGF0YnVmKSA9PSAtMSkKKyAgICAgIHsKKwlpZiAoIXJlcy0+bG9nZ2VkKQorCSAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJmYWlsZWQgdG8gYWNjZXNzICVzOiAlcyIpLCByZXMtPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJcmVzLT5sb2dnZWQgPSAxOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKwlyZXMtPmxvZ2dlZCA9IDA7CisJaWYgKHN0YXRidWYuc3RfbXRpbWUgIT0gcmVzLT5tdGltZSkKKwkgIHsKKwkgICAgcmVzLT5tdGltZSA9IHN0YXRidWYuc3RfbXRpbWU7CisJICAgIGlmIChkaWZmdGltZShzdGF0YnVmLnN0X210aW1lLCBsYXN0X2NoYW5nZSkgPiAwLjApCisJICAgICAgeworCQlsYXN0X2NoYW5nZSA9IHN0YXRidWYuc3RfbXRpbWU7CisJCWxhdGVzdCA9IHJlczsKKwkgICAgICB9CisJICB9CisgICAgICB9CisgIAorICBpZiAobGF0ZXN0KQorICAgIHsKKyAgICAgIHN0YXRpYyBpbnQgd2FybmVkID0gMDsKKyAgICAgIGlmIChyZWxvYWRfc2VydmVycyhsYXRlc3QtPm5hbWUpKQorCXsKKwkgIG15X3N5c2xvZyhMT0dfSU5GTywgXygicmVhZGluZyAlcyIpLCBsYXRlc3QtPm5hbWUpOworCSAgd2FybmVkID0gMDsKKwkgIGNoZWNrX3NlcnZlcnMoKTsKKwkgIGlmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfUkVMT0FEKQorCSAgICBjYWNoZV9yZWxvYWQoKTsKKwl9CisgICAgICBlbHNlIAorCXsKKwkgIGxhdGVzdC0+bXRpbWUgPSAwOworCSAgaWYgKCF3YXJuZWQpCisJICAgIHsKKwkgICAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIm5vIHNlcnZlcnMgZm91bmQgaW4gJXMsIHdpbGwgcmV0cnkiKSwgbGF0ZXN0LT5uYW1lKTsKKwkgICAgICB3YXJuZWQgPSAxOworCSAgICB9CisJfQorICAgIH0KK30gICAgICAgCisKK3ZvaWQgY2xlYXJfY2FjaGVfYW5kX3JlbG9hZCh0aW1lX3Qgbm93KQoreworICBpZiAoZGFlbW9uLT5wb3J0ICE9IDApCisgICAgY2FjaGVfcmVsb2FkKCk7CisgIAorI2lmZGVmIEhBVkVfREhDUAorICBpZiAoZGFlbW9uLT5kaGNwKQorICAgIHsKKyAgICAgIGlmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfRVRIRVJTKQorCWRoY3BfcmVhZF9ldGhlcnMoKTsKKyAgICAgIHJlcmVhZF9kaGNwKCk7CisgICAgICBkaGNwX3VwZGF0ZV9jb25maWdzKGRhZW1vbi0+ZGhjcF9jb25mKTsKKyAgICAgIGNoZWNrX2RoY3BfaG9zdHMoMCk7CisgICAgICBsZWFzZV91cGRhdGVfZnJvbV9jb25maWdzKCk7IAorICAgICAgbGVhc2VfdXBkYXRlX2ZpbGUobm93KTsgCisgICAgICBsZWFzZV91cGRhdGVfZG5zKCk7CisgICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgc2V0X2Ruc19saXN0ZW5lcnModGltZV90IG5vdywgZmRfc2V0ICpzZXQsIGludCAqbWF4ZmRwKQoreworICBzdHJ1Y3Qgc2VydmVyZmQgKnNlcnZlcmZkcDsKKyAgc3RydWN0IGxpc3RlbmVyICpsaXN0ZW5lcjsKKyAgaW50IHdhaXQgPSAwLCBpOworICAKKyNpZmRlZiBIQVZFX1RGVFAKKyAgaW50ICB0ZnRwID0gMDsKKyAgc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyOworICBmb3IgKHRyYW5zZmVyID0gZGFlbW9uLT50ZnRwX3RyYW5zOyB0cmFuc2ZlcjsgdHJhbnNmZXIgPSB0cmFuc2Zlci0+bmV4dCkKKyAgICB7CisgICAgICB0ZnRwKys7CisgICAgICBGRF9TRVQodHJhbnNmZXItPnNvY2tmZCwgc2V0KTsKKyAgICAgIGJ1bXBfbWF4ZmQodHJhbnNmZXItPnNvY2tmZCwgbWF4ZmRwKTsKKyAgICB9CisjZW5kaWYKKyAgCisgIC8qIHdpbGwgd2UgYmUgYWJsZSB0byBnZXQgbWVtb3J5PyAqLworICBpZiAoZGFlbW9uLT5wb3J0ICE9IDApCisgICAgZ2V0X25ld19mcmVjKG5vdywgJndhaXQpOworICAKKyAgZm9yIChzZXJ2ZXJmZHAgPSBkYWVtb24tPnNmZHM7IHNlcnZlcmZkcDsgc2VydmVyZmRwID0gc2VydmVyZmRwLT5uZXh0KQorICAgIHsKKyAgICAgIEZEX1NFVChzZXJ2ZXJmZHAtPmZkLCBzZXQpOworICAgICAgYnVtcF9tYXhmZChzZXJ2ZXJmZHAtPmZkLCBtYXhmZHApOworICAgIH0KKworICBpZiAoZGFlbW9uLT5wb3J0ICE9IDAgJiYgIWRhZW1vbi0+b3Nwb3J0KQorICAgIGZvciAoaSA9IDA7IGkgPCBSQU5ET01fU09DS1M7IGkrKykKKyAgICAgIGlmIChkYWVtb24tPnJhbmRvbXNvY2tzW2ldLnJlZmNvdW50ICE9IDApCisJeworCSAgRkRfU0VUKGRhZW1vbi0+cmFuZG9tc29ja3NbaV0uZmQsIHNldCk7CisJICBidW1wX21heGZkKGRhZW1vbi0+cmFuZG9tc29ja3NbaV0uZmQsIG1heGZkcCk7CisJfQorICAKKyAgZm9yIChsaXN0ZW5lciA9IGRhZW1vbi0+bGlzdGVuZXJzOyBsaXN0ZW5lcjsgbGlzdGVuZXIgPSBsaXN0ZW5lci0+bmV4dCkKKyAgICB7CisgICAgICAvKiBvbmx5IGxpc3RlbiBmb3IgcXVlcmllcyBpZiB3ZSBoYXZlIHJlc291cmNlcyAqLworICAgICAgaWYgKGxpc3RlbmVyLT5mZCAhPSAtMSAmJiB3YWl0ID09IDApCisJeworCSAgRkRfU0VUKGxpc3RlbmVyLT5mZCwgc2V0KTsKKwkgIGJ1bXBfbWF4ZmQobGlzdGVuZXItPmZkLCBtYXhmZHApOworCX0KKworICAgICAgLyogZGVhdGggb2YgYSBjaGlsZCBnb2VzIHRocm91Z2ggdGhlIHNlbGVjdCBsb29wLCBzbworCSB3ZSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgYXJyYW5nZSB0byB3YWtlIHVwIGhlcmUgKi8KKyAgICAgIGlmICAobGlzdGVuZXItPnRjcGZkICE9IC0xKQorCWZvciAoaSA9IDA7IGkgPCBNQVhfUFJPQ1M7IGkrKykKKwkgIGlmIChkYWVtb24tPnRjcF9waWRzW2ldID09IDApCisJICAgIHsKKwkgICAgICBGRF9TRVQobGlzdGVuZXItPnRjcGZkLCBzZXQpOworCSAgICAgIGJ1bXBfbWF4ZmQobGlzdGVuZXItPnRjcGZkLCBtYXhmZHApOworCSAgICAgIGJyZWFrOworCSAgICB9CisKKyNpZmRlZiBIQVZFX1RGVFAKKyAgICAgIGlmICh0ZnRwIDw9IGRhZW1vbi0+dGZ0cF9tYXggJiYgbGlzdGVuZXItPnRmdHBmZCAhPSAtMSkKKwl7CisJICBGRF9TRVQobGlzdGVuZXItPnRmdHBmZCwgc2V0KTsKKwkgIGJ1bXBfbWF4ZmQobGlzdGVuZXItPnRmdHBmZCwgbWF4ZmRwKTsKKwl9CisjZW5kaWYKKworICAgIH0KKyAgCisgIHJldHVybiB3YWl0OworfQorCitzdGF0aWMgdm9pZCBjaGVja19kbnNfbGlzdGVuZXJzKGZkX3NldCAqc2V0LCB0aW1lX3Qgbm93KQoreworICBzdHJ1Y3Qgc2VydmVyZmQgKnNlcnZlcmZkcDsKKyAgc3RydWN0IGxpc3RlbmVyICpsaXN0ZW5lcjsKKyAgaW50IGk7CisKKyAgZm9yIChzZXJ2ZXJmZHAgPSBkYWVtb24tPnNmZHM7IHNlcnZlcmZkcDsgc2VydmVyZmRwID0gc2VydmVyZmRwLT5uZXh0KQorICAgIGlmIChGRF9JU1NFVChzZXJ2ZXJmZHAtPmZkLCBzZXQpKQorICAgICAgcmVwbHlfcXVlcnkoc2VydmVyZmRwLT5mZCwgc2VydmVyZmRwLT5zb3VyY2VfYWRkci5zYS5zYV9mYW1pbHksIG5vdyk7CisgIAorICBpZiAoZGFlbW9uLT5wb3J0ICE9IDAgJiYgIWRhZW1vbi0+b3Nwb3J0KQorICAgIGZvciAoaSA9IDA7IGkgPCBSQU5ET01fU09DS1M7IGkrKykKKyAgICAgIGlmIChkYWVtb24tPnJhbmRvbXNvY2tzW2ldLnJlZmNvdW50ICE9IDAgJiYgCisJICBGRF9JU1NFVChkYWVtb24tPnJhbmRvbXNvY2tzW2ldLmZkLCBzZXQpKQorCXJlcGx5X3F1ZXJ5KGRhZW1vbi0+cmFuZG9tc29ja3NbaV0uZmQsIGRhZW1vbi0+cmFuZG9tc29ja3NbaV0uZmFtaWx5LCBub3cpOworICAKKyAgZm9yIChsaXN0ZW5lciA9IGRhZW1vbi0+bGlzdGVuZXJzOyBsaXN0ZW5lcjsgbGlzdGVuZXIgPSBsaXN0ZW5lci0+bmV4dCkKKyAgICB7CisgICAgICBpZiAobGlzdGVuZXItPmZkICE9IC0xICYmIEZEX0lTU0VUKGxpc3RlbmVyLT5mZCwgc2V0KSkKKwlyZWNlaXZlX3F1ZXJ5KGxpc3RlbmVyLCBub3cpOyAKKyAgICAgIAorI2lmZGVmIEhBVkVfVEZUUCAgICAgCisgICAgICBpZiAobGlzdGVuZXItPnRmdHBmZCAhPSAtMSAmJiBGRF9JU1NFVChsaXN0ZW5lci0+dGZ0cGZkLCBzZXQpKQorCXRmdHBfcmVxdWVzdChsaXN0ZW5lciwgbm93KTsKKyNlbmRpZgorCisgICAgICBpZiAobGlzdGVuZXItPnRjcGZkICE9IC0xICYmIEZEX0lTU0VUKGxpc3RlbmVyLT50Y3BmZCwgc2V0KSkKKwl7CisJICBpbnQgY29uZmQ7CisJICBzdHJ1Y3QgaXJlYyAqaWZhY2UgPSBOVUxMOworCSAgcGlkX3QgcDsKKwkgIAorCSAgd2hpbGUoKGNvbmZkID0gYWNjZXB0KGxpc3RlbmVyLT50Y3BmZCwgTlVMTCwgTlVMTCkpID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKwkgIAorCSAgaWYgKGNvbmZkID09IC0xKQorCSAgICBjb250aW51ZTsKKwkgIAorCSAgaWYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT1dJTEQpCisJICAgIGlmYWNlID0gbGlzdGVuZXItPmlmYWNlOworCSAgZWxzZQorCSAgICB7CisJICAgICAgdW5pb24gbXlzb2NrYWRkciB0Y3BfYWRkcjsKKwkgICAgICBzb2NrbGVuX3QgdGNwX2xlbiA9IHNpemVvZih1bmlvbiBteXNvY2thZGRyKTsKKwkgICAgICAvKiBDaGVjayBmb3IgYWxsb3dlZCBpbnRlcmZhY2VzIHdoZW4gYmluZGluZyB0aGUgd2lsZGNhcmQgYWRkcmVzczoKKwkJIHdlIGRvIHRoaXMgYnkgbG9va2luZyBmb3IgYW4gaW50ZXJmYWNlIHdpdGggdGhlIHNhbWUgYWRkcmVzcyBhcyAKKwkJIHRoZSBsb2NhbCBhZGRyZXNzIG9mIHRoZSBUQ1AgY29ubmVjdGlvbiwgdGhlbiBsb29raW5nIHRvIHNlZSBpZiB0aGF0J3MKKwkJIGFuIGFsbG93ZWQgaW50ZXJmYWNlLiBBcyBhIHNpZGUgZWZmZWN0LCB3ZSBnZXQgdGhlIG5ldG1hc2sgb2YgdGhlCisJCSBpbnRlcmZhY2UgdG9vLCBmb3IgbG9jYWxpc2F0aW9uLiAqLworCSAgICAgIAorCSAgICAgIC8qIGludGVyZmFjZSBtYXkgYmUgbmV3IHNpbmNlIHN0YXJ0dXAgKi8KKwkgICAgICBpZiAoZW51bWVyYXRlX2ludGVyZmFjZXMoKSAmJgorCQkgIGdldHNvY2tuYW1lKGNvbmZkLCAoc3RydWN0IHNvY2thZGRyICopJnRjcF9hZGRyLCAmdGNwX2xlbikgIT0gLTEpCisJCWZvciAoaWZhY2UgPSBkYWVtb24tPmludGVyZmFjZXM7IGlmYWNlOyBpZmFjZSA9IGlmYWNlLT5uZXh0KQorCQkgIGlmIChzb2NrYWRkcl9pc2VxdWFsKCZpZmFjZS0+YWRkciwgJnRjcF9hZGRyKSkKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAKKwkgIGlmICghaWZhY2UpCisJICAgIHsKKwkgICAgICBzaHV0ZG93bihjb25mZCwgU0hVVF9SRFdSKTsKKwkgICAgICBjbG9zZShjb25mZCk7CisJICAgIH0KKyNpZm5kZWYgTk9fRk9SSworCSAgZWxzZSBpZiAoIShkYWVtb24tPm9wdGlvbnMgJiBPUFRfREVCVUcpICYmIChwID0gZm9yaygpKSAhPSAwKQorCSAgICB7CisJICAgICAgaWYgKHAgIT0gLTEpCisJCXsKKwkJICBpbnQgaTsKKwkJICBmb3IgKGkgPSAwOyBpIDwgTUFYX1BST0NTOyBpKyspCisJCSAgICBpZiAoZGFlbW9uLT50Y3BfcGlkc1tpXSA9PSAwKQorCQkgICAgICB7CisJCQlkYWVtb24tPnRjcF9waWRzW2ldID0gcDsKKwkJCWJyZWFrOworCQkgICAgICB9CisJCX0KKwkgICAgICBjbG9zZShjb25mZCk7CisJICAgIH0KKyNlbmRpZgorCSAgZWxzZQorCSAgICB7CisJICAgICAgdW5zaWduZWQgY2hhciAqYnVmZjsKKwkgICAgICBzdHJ1Y3Qgc2VydmVyICpzOyAKKwkgICAgICBpbnQgZmxhZ3M7CisJICAgICAgc3RydWN0IGluX2FkZHIgZHN0X2FkZHJfNDsKKwkgICAgICAKKwkgICAgICBkc3RfYWRkcl80LnNfYWRkciA9IDA7CisJICAgICAgCisJICAgICAgIC8qIEFycmFuZ2UgZm9yIFNJR0FMQVJNIGFmdGVyIENISUxEX0xJRkVUSU1FIHNlY29uZHMgdG8KKwkJICB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MuICovCisJICAgICAgaWYgKCEoZGFlbW9uLT5vcHRpb25zICYgT1BUX0RFQlVHKSkKKwkJYWxhcm0oQ0hJTERfTElGRVRJTUUpOworCSAgICAgIAorCSAgICAgIC8qIHN0YXJ0IHdpdGggbm8gdXBzdHJlYW0gY29ubmVjdGlvbnMuICovCisJICAgICAgZm9yIChzID0gZGFlbW9uLT5zZXJ2ZXJzOyBzOyBzID0gcy0+bmV4dCkKKwkJIHMtPnRjcGZkID0gLTE7IAorCSAgICAgIAorCSAgICAgIC8qIFRoZSBjb25uZWN0ZWQgc29ja2V0IGluaGVyaXRzIG5vbi1ibG9ja2luZworCQkgYXR0cmlidXRlIGZyb20gdGhlIGxpc3RlbmluZyBzb2NrZXQuIAorCQkgUmVzZXQgdGhhdCBoZXJlLiAqLworCSAgICAgIGlmICgoZmxhZ3MgPSBmY250bChjb25mZCwgRl9HRVRGTCwgMCkpICE9IC0xKQorCQlmY250bChjb25mZCwgRl9TRVRGTCwgZmxhZ3MgJiB+T19OT05CTE9DSyk7CisJICAgICAgCisJICAgICAgaWYgKGxpc3RlbmVyLT5mYW1pbHkgPT0gQUZfSU5FVCkKKwkJZHN0X2FkZHJfNCA9IGlmYWNlLT5hZGRyLmluLnNpbl9hZGRyOworCSAgICAgIAorCSAgICAgIGJ1ZmYgPSB0Y3BfcmVxdWVzdChjb25mZCwgbm93LCBkc3RfYWRkcl80LCBpZmFjZS0+bmV0bWFzayk7CisJICAgICAgIAorCSAgICAgIHNodXRkb3duKGNvbmZkLCBTSFVUX1JEV1IpOworCSAgICAgIGNsb3NlKGNvbmZkKTsKKwkgICAgICAKKwkgICAgICBpZiAoYnVmZikKKwkJZnJlZShidWZmKTsKKwkgICAgICAKKwkgICAgICBmb3IgKHMgPSBkYWVtb24tPnNlcnZlcnM7IHM7IHMgPSBzLT5uZXh0KQorCQlpZiAocy0+dGNwZmQgIT0gLTEpCisJCSAgeworCQkgICAgc2h1dGRvd24ocy0+dGNwZmQsIFNIVVRfUkRXUik7CisJCSAgICBjbG9zZShzLT50Y3BmZCk7CisJCSAgfQorI2lmbmRlZiBOT19GT1JLCQkgICAKKwkgICAgICBpZiAoIShkYWVtb24tPm9wdGlvbnMgJiBPUFRfREVCVUcpKQorCQl7CisJCSAgZmx1c2hfbG9nKCk7CisJCSAgX2V4aXQoMCk7CisJCX0KKyNlbmRpZgorCSAgICB9CisJfQorICAgIH0KK30KKworI2lmZGVmIEhBVkVfREhDUAoraW50IG1ha2VfaWNtcF9zb2NrKHZvaWQpCit7CisgIGludCBmZDsKKyAgaW50IHplcm9vcHQgPSAwOworCisgIGlmICgoZmQgPSBzb2NrZXQgKEFGX0lORVQsIFNPQ0tfUkFXLCBJUFBST1RPX0lDTVApKSAhPSAtMSkKKyAgICB7CisgICAgICBpZiAoIWZpeF9mZChmZCkgfHwKKwkgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0RPTlRST1VURSwgJnplcm9vcHQsIHNpemVvZih6ZXJvb3B0KSkgPT0gLTEpCisJeworCSAgY2xvc2UoZmQpOworCSAgZmQgPSAtMTsKKwl9CisgICAgfQorCisgIHJldHVybiBmZDsKK30KKworaW50IGljbXBfcGluZyhzdHJ1Y3QgaW5fYWRkciBhZGRyKQoreworICAvKiBUcnkgYW5kIGdldCBhbiBJQ01QIGVjaG8gZnJvbSBhIG1hY2hpbmUuICovCisKKyAgLyogTm90ZSB0aGF0IHdoaWxzdCBpbiB0aGUgdGhyZWUgc2Vjb25kIHdhaXQsIHdlIGNoZWNrIGZvciAKKyAgICAgKGFuZCBzZXJ2aWNlKSBldmVudHMgb24gdGhlIEROUyBhbmQgVEZUUCAgc29ja2V0cywgKHNvIGRvaW5nIHRoYXQKKyAgICAgYmV0dGVyIG5vdCB1c2UgYW55IHJlc291cmNlcyBvdXIgY2FsbGVyIGhhcyBpbiB1c2UuLi4pCisgICAgIGJ1dCB3ZSByZW1haW4gZGVhZiB0byBzaWduYWxzIG9yIGZ1cnRoZXIgREhDUCBwYWNrZXRzLiAqLworCisgIGludCBmZDsKKyAgc3RydWN0IHNvY2thZGRyX2luIHNhZGRyOworICBzdHJ1Y3QgeyAKKyAgICBzdHJ1Y3QgaXAgaXA7CisgICAgc3RydWN0IGljbXAgaWNtcDsKKyAgfSBwYWNrZXQ7CisgIHVuc2lnbmVkIHNob3J0IGlkID0gcmFuZDE2KCk7CisgIHVuc2lnbmVkIGludCBpLCBqOworICBpbnQgZ290cmVwbHkgPSAwOworICB0aW1lX3Qgc3RhcnQsIG5vdzsKKworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKSB8fCBkZWZpbmVkIChIQVZFX1NPTEFSSVNfTkVUV09SSykKKyAgaWYgKChmZCA9IG1ha2VfaWNtcF9zb2NrKCkpID09IC0xKQorICAgIHJldHVybiAwOworI2Vsc2UKKyAgaW50IG9wdCA9IDIwMDA7CisgIGZkID0gZGFlbW9uLT5kaGNwX2ljbXBfZmQ7CisgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJm9wdCwgc2l6ZW9mKG9wdCkpOworI2VuZGlmCisKKyAgc2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgIHNhZGRyLnNpbl9wb3J0ID0gMDsKKyAgc2FkZHIuc2luX2FkZHIgPSBhZGRyOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIHNhZGRyLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorICAKKyAgbWVtc2V0KCZwYWNrZXQuaWNtcCwgMCwgc2l6ZW9mKHBhY2tldC5pY21wKSk7CisgIHBhY2tldC5pY21wLmljbXBfdHlwZSA9IElDTVBfRUNITzsKKyAgcGFja2V0LmljbXAuaWNtcF9pZCA9IGlkOworICBmb3IgKGogPSAwLCBpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgaWNtcCkgLyAyOyBpKyspCisgICAgaiArPSAoKHUxNiAqKSZwYWNrZXQuaWNtcClbaV07CisgIHdoaWxlIChqPj4xNikKKyAgICBqID0gKGogJiAweGZmZmYpICsgKGogPj4gMTYpOyAgCisgIHBhY2tldC5pY21wLmljbXBfY2tzdW0gPSAoaiA9PSAweGZmZmYpID8gaiA6IH5qOworICAKKyAgd2hpbGUgKHNlbmR0byhmZCwgKGNoYXIgKikmcGFja2V0LmljbXAsIHNpemVvZihzdHJ1Y3QgaWNtcCksIDAsIAorCQkoc3RydWN0IHNvY2thZGRyICopJnNhZGRyLCBzaXplb2Yoc2FkZHIpKSA9PSAtMSAmJgorCSByZXRyeV9zZW5kKCkpOworICAKKyAgZm9yIChub3cgPSBzdGFydCA9IGRuc21hc3FfdGltZSgpOyAKKyAgICAgICBkaWZmdGltZShub3csIHN0YXJ0KSA8IChmbG9hdClQSU5HX1dBSVQ7KQorICAgIHsKKyAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgICAgZmRfc2V0IHJzZXQsIHdzZXQ7CisgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gZmFkZHI7CisgICAgICBpbnQgbWF4ZmQgPSBmZDsgCisgICAgICBzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKGZhZGRyKTsKKyAgICAgIAorICAgICAgdHYudHZfdXNlYyA9IDI1MDAwMDsKKyAgICAgIHR2LnR2X3NlYyA9IDA7IAorICAgICAgCisgICAgICBGRF9aRVJPKCZyc2V0KTsKKyAgICAgIEZEX1pFUk8oJndzZXQpOworICAgICAgRkRfU0VUKGZkLCAmcnNldCk7CisgICAgICBzZXRfZG5zX2xpc3RlbmVycyhub3csICZyc2V0LCAmbWF4ZmQpOworICAgICAgc2V0X2xvZ193cml0ZXIoJndzZXQsICZtYXhmZCk7CisKKyAgICAgIGlmIChzZWxlY3QobWF4ZmQrMSwgJnJzZXQsICZ3c2V0LCBOVUxMLCAmdHYpIDwgMCkKKwl7CisJICBGRF9aRVJPKCZyc2V0KTsKKwkgIEZEX1pFUk8oJndzZXQpOworCX0KKworICAgICAgbm93ID0gZG5zbWFzcV90aW1lKCk7CisKKyAgICAgIGNoZWNrX2xvZ193cml0ZXIoJndzZXQpOworICAgICAgY2hlY2tfZG5zX2xpc3RlbmVycygmcnNldCwgbm93KTsKKworI2lmZGVmIEhBVkVfVEZUUAorICAgICAgY2hlY2tfdGZ0cF9saXN0ZW5lcnMoJnJzZXQsIG5vdyk7CisjZW5kaWYKKworICAgICAgaWYgKEZEX0lTU0VUKGZkLCAmcnNldCkgJiYKKwkgIHJlY3Zmcm9tKGZkLCAmcGFja2V0LCBzaXplb2YocGFja2V0KSwgMCwKKwkJICAgKHN0cnVjdCBzb2NrYWRkciAqKSZmYWRkciwgJmxlbikgPT0gc2l6ZW9mKHBhY2tldCkgJiYKKwkgIHNhZGRyLnNpbl9hZGRyLnNfYWRkciA9PSBmYWRkci5zaW5fYWRkci5zX2FkZHIgJiYKKwkgIHBhY2tldC5pY21wLmljbXBfdHlwZSA9PSBJQ01QX0VDSE9SRVBMWSAmJgorCSAgcGFja2V0LmljbXAuaWNtcF9zZXEgPT0gMCAmJgorCSAgcGFja2V0LmljbXAuaWNtcF9pZCA9PSBpZCkKKwl7CisJICBnb3RyZXBseSA9IDE7CisJICBicmVhazsKKwl9CisgICAgfQorICAKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykgfHwgZGVmaW5lZChIQVZFX1NPTEFSSVNfTkVUV09SSykKKyAgY2xvc2UoZmQpOworI2Vsc2UKKyAgb3B0ID0gMTsKKyAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmb3B0LCBzaXplb2Yob3B0KSk7CisjZW5kaWYKKworICByZXR1cm4gZ290cmVwbHk7Cit9CisjZW5kaWYKKworIApkaWZmIC0tZ2l0IGEvc3JjL2Ruc21hc3EuaCBiL3NyYy9kbnNtYXNxLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTg0ZWE4NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kbnNtYXNxLmgKQEAgLTAsMCArMSw4ODUgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgU2ltb24gS2VsbGV5CisgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2RlZmluZSBDT1BZUklHSFQgIkNvcHlyaWdodCAoQykgMjAwMC0yMDA5IFNpbW9uIEtlbGxleSIgCisKKyNpZm5kZWYgTk9fTEFSR0VGSUxFCisvKiBFbnN1cmUgd2UgY2FuIHVzZSBmaWxlcyA+MkdCIChsb2cgZmlsZXMgbWF5IGdyb3cgdGhpcyBiaWcpICovCisjICBkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UgMQorIyAgZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisjZW5kaWYKKworLyogR2V0IGxpbnV4IEMgbGlicmFyeSB2ZXJzaW9ucy4gKi8KKyNpZmRlZiBfX2xpbnV4X18KKyMgIGRlZmluZSBfR05VX1NPVVJDRQorIyAgaW5jbHVkZSA8ZmVhdHVyZXMuaD4gCisjZW5kaWYKKworLyogZ2V0IHRoZXNlIGJlZm9yZSBjb25maWcuaCAgZm9yIElQdjYgc3R1ZmYuLi4gKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworI2lmZGVmIF9fQVBQTEVfXworIyAgaW5jbHVkZSA8bmFtZXNlci5oPgorIyAgaW5jbHVkZSA8YXJwYS9uYW1lc2VyX2NvbXBhdC5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2VuZGlmCisKKy8qIGFuZCB0aGlzLiAqLworI2luY2x1ZGUgPGdldG9wdC5oPgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNkZWZpbmUgZ2V0dGV4dF9ub29wKFMpIChTKQorI2lmbmRlZiBMT0NBTEVESVIKKyMgIGRlZmluZSBfKFMpIChTKQorI2Vsc2UKKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgIGluY2x1ZGUgPGxvY2FsZS5oPiAgIAorIyAgZGVmaW5lIF8oUykgZ2V0dGV4dChTKQorI2VuZGlmCisKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2lmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19zdW5fXykgfHwgZGVmaW5lZCAoX19zdW4pCisjICBpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+CisjZWxzZQorIyAgaW5jbHVkZSA8bmV0L2V0aGVybmV0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8c3lzbG9nLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaWZuZGVmIEhBVkVfTElOVVhfTkVUV09SSworIyAgaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKy8qIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHVuaXZlcnNhbGx5LWF2YWlsYWJsZSAKKyAgIHVzZXJwYWNlIGhlYWRlciBmb3IgdGhlc2UuICovCitleHRlcm4gaW50IGNhcHNldChjYXBfdXNlcl9oZWFkZXJfdCBoZWFkZXIsIGNhcF91c2VyX2RhdGFfdCBkYXRhKTsKK2V4dGVybiBpbnQgY2FwZ2V0KGNhcF91c2VyX2hlYWRlcl90IGhlYWRlciwgY2FwX3VzZXJfZGF0YV90IGRhdGEpOworI2RlZmluZSBMSU5VWF9DQVBBQklMSVRZX1ZFUlNJT05fMSAgMHgxOTk4MDMzMAorI2RlZmluZSBMSU5VWF9DQVBBQklMSVRZX1ZFUlNJT05fMiAgMHgyMDA3MTAyNgorI2RlZmluZSBMSU5VWF9DQVBBQklMSVRZX1ZFUlNJT05fMyAgMHgyMDA4MDUyMgorCisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfU09MQVJJU19ORVRXT1JLKQorI2luY2x1ZGUgPHByaXYuaD4KKyNlbmRpZgorCisvKiBkYWVtb24gaXMgZnVuY3Rpb24gaW4gdGhlIEMgbGlicmFyeS4uLi4gKi8KKyNkZWZpbmUgZGFlbW9uIGRuc21hc3FfZGFlbW9uCisKKy8qIEFzeW5jIGV2ZW50IHF1ZXVlICovCitzdHJ1Y3QgZXZlbnRfZGVzYyB7CisgIGludCBldmVudCwgZGF0YTsKK307CisKKyNkZWZpbmUgRVZFTlRfUkVMT0FEICAgIDEKKyNkZWZpbmUgRVZFTlRfRFVNUCAgICAgIDIKKyNkZWZpbmUgRVZFTlRfQUxBUk0gICAgIDMKKyNkZWZpbmUgRVZFTlRfVEVSTSAgICAgIDQKKyNkZWZpbmUgRVZFTlRfQ0hJTEQgICAgIDUKKyNkZWZpbmUgRVZFTlRfUkVPUEVOICAgIDYKKyNkZWZpbmUgRVZFTlRfRVhJVEVEICAgIDcKKyNkZWZpbmUgRVZFTlRfS0lMTEVEICAgIDgKKyNkZWZpbmUgRVZFTlRfRVhFQ19FUlIgIDkKKyNkZWZpbmUgRVZFTlRfUElQRV9FUlIgIDEwCisjZGVmaW5lIEVWRU5UX1VTRVJfRVJSICAxMQorI2RlZmluZSBFVkVOVF9DQVBfRVJSICAgMTIKKyNkZWZpbmUgRVZFTlRfUElERklMRSAgIDEzCisjZGVmaW5lIEVWRU5UX0hVU0VSX0VSUiAxNAorI2RlZmluZSBFVkVOVF9HUk9VUF9FUlIgMTUKKyNkZWZpbmUgRVZFTlRfRElFICAgICAgIDE2CisjZGVmaW5lIEVWRU5UX0xPR19FUlIgICAxNworI2RlZmluZSBFVkVOVF9GT1JLX0VSUiAgMTgKKworLyogRXhpdCBjb2Rlcy4gKi8KKyNkZWZpbmUgRUNfR09PRCAgICAgICAgMAorI2RlZmluZSBFQ19CQURDT05GICAgICAxCisjZGVmaW5lIEVDX0JBRE5FVCAgICAgIDIKKyNkZWZpbmUgRUNfRklMRSAgICAgICAgMworI2RlZmluZSBFQ19OT01FTSAgICAgICA0CisjZGVmaW5lIEVDX01JU0MgICAgICAgIDUKKyNkZWZpbmUgRUNfSU5JVF9PRkZTRVQgMTAKKworLyogTWluIGJ1ZmZlciBzaXplOiB3ZSBjaGVjayBhZnRlciBhZGRpbmcgZWFjaCByZWNvcmQsIHNvIHRoZXJlIG11c3QgYmUgCisgICBtZW1vcnkgZm9yIHRoZSBsYXJnZXN0IHBhY2tldCwgYW5kIHRoZSBsYXJnZXN0IHJlY29yZCBzbyB0aGUKKyAgIG1pbiBmb3IgRE5TIGlzIFBBQ0tFVFNaK01BWEROQU1FK1JSRklYRURTWiB3aGljaCBpcyA8IDEwMDAuCisgICBUaGlzIG1pZ2h0IGJlIGluY3JlYXNlZCBpcyBFRE5TIHBhY2tldCBzaXplIGlmIGdyZWF0ZXIgdGhhbiB0aGUgbWluaW11bS4KKyovCisjZGVmaW5lIEROU01BU1FfUEFDS0VUU1ogUEFDS0VUU1orTUFYRE5BTUUrUlJGSVhFRFNaCisKKyNkZWZpbmUgT1BUX0JPR1VTUFJJViAgICAgICgxdTw8MCkKKyNkZWZpbmUgT1BUX0ZJTFRFUiAgICAgICAgICgxdTw8MSkKKyNkZWZpbmUgT1BUX0xPRyAgICAgICAgICAgICgxdTw8MikKKyNkZWZpbmUgT1BUX1NFTEZNWCAgICAgICAgICgxdTw8MykKKyNkZWZpbmUgT1BUX05PX0hPU1RTICAgICAgICgxdTw8NCkKKyNkZWZpbmUgT1BUX05PX1BPTEwgICAgICAgICgxdTw8NSkKKyNkZWZpbmUgT1BUX0RFQlVHICAgICAgICAgICgxdTw8NikKKyNkZWZpbmUgT1BUX09SREVSICAgICAgICAgICgxdTw8NykKKyNkZWZpbmUgT1BUX05PX1JFU09MViAgICAgICgxdTw8OCkKKyNkZWZpbmUgT1BUX0VYUEFORCAgICAgICAgICgxdTw8OSkKKyNkZWZpbmUgT1BUX0xPQ0FMTVggICAgICAgICgxdTw8MTApCisjZGVmaW5lIE9QVF9OT19ORUcgICAgICAgICAoMXU8PDExKQorI2RlZmluZSBPUFRfTk9ET1RTX0xPQ0FMICAgKDF1PDwxMikKKyNkZWZpbmUgT1BUX05PV0lMRCAgICAgICAgICgxdTw8MTMpCisjZGVmaW5lIE9QVF9FVEhFUlMgICAgICAgICAoMXU8PDE0KQorI2RlZmluZSBPUFRfUkVTT0xWX0RPTUFJTiAgKDF1PDwxNSkKKyNkZWZpbmUgT1BUX05PX0ZPUksgICAgICAgICgxdTw8MTYpCisjZGVmaW5lIE9QVF9BVVRIT1JJVEFUSVZFICAoMXU8PDE3KQorI2RlZmluZSBPUFRfTE9DQUxJU0UgICAgICAgKDF1PDwxOCkKKyNkZWZpbmUgT1BUX0RCVVMgICAgICAgICAgICgxdTw8MTkpCisjZGVmaW5lIE9QVF9ESENQX0ZRRE4gICAgICAoMXU8PDIwKQorI2RlZmluZSBPUFRfTk9fUElORyAgICAgICAgKDF1PDwyMSkKKyNkZWZpbmUgT1BUX0xFQVNFX1JPICAgICAgICgxdTw8MjIpCisjZGVmaW5lIE9QVF9BTExfU0VSVkVSUyAgICAoMXU8PDIzKQorI2RlZmluZSBPUFRfUkVMT0FEICAgICAgICAgKDF1PDwyNCkKKyNkZWZpbmUgT1BUX1RGVFAgICAgICAgICAgICgxdTw8MjUpCisjZGVmaW5lIE9QVF9URlRQX1NFQ1VSRSAgICAoMXU8PDI2KQorI2RlZmluZSBPUFRfVEZUUF9OT0JMT0NLICAgKDF1PDwyNykKKyNkZWZpbmUgT1BUX0xPR19PUFRTICAgICAgICgxdTw8MjgpCisjZGVmaW5lIE9QVF9URlRQX0FQUkVGICAgICAoMXU8PDI5KQorI2RlZmluZSBPUFRfTk9fT1ZFUlJJREUgICAgKDF1PDwzMCkKKyNkZWZpbmUgT1BUX05PX1JFQklORCAgICAgICgxdTw8MzEpCisKKy8qIGV4dHJhIGZsYWdzIGZvciBteV9zeXNsb2csIHdlIHVzZSBhIGNvdXBsZSBvZiBmYWNpbGl0aWVzIHNpbmNlIHRoZXkgYXJlIGtub3duIAorICAgbm90IHRvIG9jY3VweSB0aGUgc2FtZSBiaXRzIGFzIHByaW9yaXRpZXMsIG5vIG1hdHRlciBob3cgc3lzbG9nLmggaXMgc2V0IHVwLiAqLworI2RlZmluZSBNU19URlRQIExPR19VU0VSCisjZGVmaW5lIE1TX0RIQ1AgTE9HX0RBRU1PTiAKKworc3RydWN0IGFsbF9hZGRyIHsKKyAgdW5pb24geworICAgIHN0cnVjdCBpbl9hZGRyIGFkZHI0OworI2lmZGVmIEhBVkVfSVBWNgorICAgIHN0cnVjdCBpbjZfYWRkciBhZGRyNjsKKyNlbmRpZgorICB9IGFkZHI7Cit9OworCitzdHJ1Y3QgYm9ndXNfYWRkciB7CisgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisgIHN0cnVjdCBib2d1c19hZGRyICpuZXh0OworfTsKKworLyogZG5zIGRvY3RvciBwYXJhbSAqLworc3RydWN0IGRvY3RvciB7CisgIHN0cnVjdCBpbl9hZGRyIGluLCBlbmQsIG91dCwgbWFzazsKKyAgc3RydWN0IGRvY3RvciAqbmV4dDsKK307CisKK3N0cnVjdCBteF9zcnZfcmVjb3JkIHsKKyAgY2hhciAqbmFtZSwgKnRhcmdldDsKKyAgaW50IGlzc3J2LCBzcnZwb3J0LCBwcmlvcml0eSwgd2VpZ2h0OworICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICBzdHJ1Y3QgbXhfc3J2X3JlY29yZCAqbmV4dDsKK307CisKK3N0cnVjdCBuYXB0ciB7CisgIGNoYXIgKm5hbWUsICpyZXBsYWNlLCAqcmVnZXhwLCAqc2VydmljZXMsICpmbGFnczsKKyAgdW5zaWduZWQgaW50IG9yZGVyLCBwcmVmOworICBzdHJ1Y3QgbmFwdHIgKm5leHQ7Cit9OworCitzdHJ1Y3QgdHh0X3JlY29yZCB7CisgIGNoYXIgKm5hbWUsICp0eHQ7CisgIHVuc2lnbmVkIHNob3J0IGNsYXNzLCBsZW47CisgIHN0cnVjdCB0eHRfcmVjb3JkICpuZXh0OworfTsKKworc3RydWN0IHB0cl9yZWNvcmQgeworICBjaGFyICpuYW1lLCAqcHRyOworICBzdHJ1Y3QgcHRyX3JlY29yZCAqbmV4dDsKK307CisKK3N0cnVjdCBjbmFtZSB7CisgIGNoYXIgKmFsaWFzLCAqdGFyZ2V0OworICBzdHJ1Y3QgY25hbWUgKm5leHQ7Cit9OworCitzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgeworICBjaGFyICpuYW1lOyAvKiBkb21haW4gbmFtZSAqLworICBjaGFyICppbnRyOyAvKiBpbnRlcmZhY2UgbmFtZSAqLworICBzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgKm5leHQ7Cit9OworCit1bmlvbiBiaWduYW1lIHsKKyAgY2hhciBuYW1lW01BWEROQU1FXTsKKyAgdW5pb24gYmlnbmFtZSAqbmV4dDsgLyogZnJlZWxpc3QgKi8KK307CisKK3N0cnVjdCBjcmVjIHsgCisgIHN0cnVjdCBjcmVjICpuZXh0LCAqcHJldiwgKmhhc2hfbmV4dDsKKyAgdGltZV90IHR0ZDsgLyogdGltZSB0byBkaWUgKi8KKyAgaW50IHVpZDsgCisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgYWxsX2FkZHIgYWRkcjsKKyAgICBzdHJ1Y3QgeworICAgICAgc3RydWN0IGNyZWMgKmNhY2hlOworICAgICAgaW50IHVpZDsKKyAgICB9IGNuYW1lOworICB9IGFkZHI7CisgIHVuc2lnbmVkIHNob3J0IGZsYWdzOworICB1bmlvbiB7CisgICAgY2hhciBzbmFtZVtTTUFMTEROQU1FXTsKKyAgICB1bmlvbiBiaWduYW1lICpibmFtZTsKKyAgICBjaGFyICpuYW1lcDsKKyAgfSBuYW1lOworfTsKKworI2RlZmluZSBGX0lNTU9SVEFMICAxCisjZGVmaW5lIEZfQ09ORklHICAgIDIKKyNkZWZpbmUgRl9SRVZFUlNFICAgNAorI2RlZmluZSBGX0ZPUldBUkQgICA4CisjZGVmaW5lIEZfREhDUCAgICAgIDE2IAorI2RlZmluZSBGX05FRyAgICAgICAzMiAgICAgICAKKyNkZWZpbmUgRl9IT1NUUyAgICAgNjQKKyNkZWZpbmUgRl9JUFY0ICAgICAgMTI4CisjZGVmaW5lIEZfSVBWNiAgICAgIDI1NgorI2RlZmluZSBGX0JJR05BTUUgICA1MTIKKyNkZWZpbmUgRl9VUFNUUkVBTSAgMTAyNAorI2RlZmluZSBGX1NFUlZFUiAgICAyMDQ4CisjZGVmaW5lIEZfTlhET01BSU4gIDQwOTYKKyNkZWZpbmUgRl9RVUVSWSAgICAgODE5MgorI2RlZmluZSBGX0NOQU1FICAgICAxNjM4NAorI2RlZmluZSBGX05PRVJSICAgICAzMjc2OAorCisvKiBzdHJ1Y3Qgc29ja2FkZHIgaXMgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIGFueSBhZGRyZXNzLAorICAgYW5kIHNwZWNpZmljYWxseSBub3QgYmlnIGVub3VnaCB0byBob2xkIGFuIElQdjYgYWRkcmVzcy4KKyAgIEJsZWNoLiBSb2xsIG91ciBvd24uICovCit1bmlvbiBteXNvY2thZGRyIHsKKyAgc3RydWN0IHNvY2thZGRyIHNhOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gaW47CisjaWYgZGVmaW5lZChIQVZFX0lQVjYpCisgIHN0cnVjdCBzb2NrYWRkcl9pbjYgaW42OworI2VuZGlmCit9OworCisjZGVmaW5lIFNFUlZfRlJPTV9SRVNPTFYgICAgICAgMSAgLyogMSBmb3Igc2VydmVycyBmcm9tIHJlc29sdiwgMCBmb3IgY29tbWFuZCBsaW5lLiAqLworI2RlZmluZSBTRVJWX05PX0FERFIgICAgICAgICAgIDIgIC8qIG5vIHNlcnZlciwgdGhpcyBkb21haW4gaXMgbG9jYWwgb25seSAqLworI2RlZmluZSBTRVJWX0xJVEVSQUxfQUREUkVTUyAgIDQgIC8qIGFkZHIgaXMgdGhlIGFuc3dlciwgbm90IHRoZSBzZXJ2ZXIgKi8gCisjZGVmaW5lIFNFUlZfSEFTX0RPTUFJTiAgICAgICAgOCAgLyogc2VydmVyIGZvciBvbmUgZG9tYWluIG9ubHkgKi8KKyNkZWZpbmUgU0VSVl9IQVNfU09VUkNFICAgICAgIDE2ICAvKiBzb3VyY2UgYWRkcmVzcyBkZWZpbmVkICovCisjZGVmaW5lIFNFUlZfRk9SX05PRE9UUyAgICAgICAzMiAgLyogc2VydmVyIGZvciBuYW1lcyB3aXRoIG5vIGRvbWFpbiBwYXJ0IG9ubHkgKi8KKyNkZWZpbmUgU0VSVl9XQVJORURfUkVDVVJTSVZFIDY0ICAvKiBhdm9pZCB3YXJuaW5nIHNwYW0gKi8KKyNkZWZpbmUgU0VSVl9GUk9NX0RCVVMgICAgICAgMTI4ICAvKiAxIGlmIHNvdXJjZSBpcyBEQnVzICovCisjZGVmaW5lIFNFUlZfTUFSSyAgICAgICAgICAgIDI1NiAgLyogZm9yIG1hcmstYW5kLWRlbGV0ZSAqLworI2RlZmluZSBTRVJWX1RZUEUgICAgKFNFUlZfSEFTX0RPTUFJTiB8IFNFUlZfRk9SX05PRE9UUykKKyNkZWZpbmUgU0VSVl9DT1VOVEVEICAgICAgICAgNTEyICAvKiB3b3Jrc3BhY2UgZm9yIGxvZyBjb2RlICovCisKK3N0cnVjdCBzZXJ2ZXJmZCB7CisgIGludCBmZDsKKyAgdW5pb24gbXlzb2NrYWRkciBzb3VyY2VfYWRkcjsKKyAgY2hhciBpbnRlcmZhY2VbSUZfTkFNRVNJWkUrMV07CisgIHN0cnVjdCBzZXJ2ZXJmZCAqbmV4dDsKK307CisKK3N0cnVjdCByYW5kZmQgeworICBpbnQgZmQ7CisgIHVuc2lnbmVkIHNob3J0IHJlZmNvdW50LCBmYW1pbHk7Cit9OworICAKK3N0cnVjdCBzZXJ2ZXIgeworICB1bmlvbiBteXNvY2thZGRyIGFkZHIsIHNvdXJjZV9hZGRyOworICBjaGFyIGludGVyZmFjZVtJRl9OQU1FU0laRSsxXTsKKyAgc3RydWN0IHNlcnZlcmZkICpzZmQ7IAorICBjaGFyICpkb21haW47IC8qIHNldCBpZiB0aGlzIHNlcnZlciBvbmx5IGhhbmRsZXMgYSBkb21haW4uICovIAorICBpbnQgZmxhZ3MsIHRjcGZkOworICB1bnNpZ25lZCBpbnQgcXVlcmllcywgZmFpbGVkX3F1ZXJpZXM7CisgIHN0cnVjdCBzZXJ2ZXIgKm5leHQ7IAorfTsKKworc3RydWN0IGlyZWMgeworICB1bmlvbiBteXNvY2thZGRyIGFkZHI7CisgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2s7IC8qIG9ubHkgdmFsaWQgZm9yIElQdjQgKi8KKyAgaW50IGRoY3Bfb2ssIG10dTsKKyAgc3RydWN0IGlyZWMgKm5leHQ7Cit9OworCitzdHJ1Y3QgbGlzdGVuZXIgeworICBpbnQgZmQsIHRjcGZkLCB0ZnRwZmQsIGZhbWlseTsKKyAgc3RydWN0IGlyZWMgKmlmYWNlOyAvKiBvbmx5IHZhbGlkIGZvciBub24td2lsZGNhcmQgKi8KKyAgc3RydWN0IGxpc3RlbmVyICpuZXh0OworfTsKKworLyogaW50ZXJmYWNlIGFuZCBhZGRyZXNzIHBhcm1zIGZyb20gY29tbWFuZCBsaW5lLiAqLworc3RydWN0IGluYW1lIHsKKyAgY2hhciAqbmFtZTsKKyAgdW5pb24gbXlzb2NrYWRkciBhZGRyOworICBpbnQgaXNsb29wLCB1c2VkOworICBzdHJ1Y3QgaW5hbWUgKm5leHQ7Cit9OworCisvKiByZXNvbHYtZmlsZSBwYXJtcyBmcm9tIGNvbW1hbmQtbGluZSAqLworc3RydWN0IHJlc29sdmMgeworICBzdHJ1Y3QgcmVzb2x2YyAqbmV4dDsKKyAgaW50IGlzX2RlZmF1bHQsIGxvZ2dlZDsKKyAgdGltZV90IG10aW1lOworICBjaGFyICpuYW1lOworfTsKKworLyogYWRuLWhvc3RzIHBhcm1zIGZyb20gY29tbWFuZC1saW5lICovCisjZGVmaW5lIEFIX0RJUiAgICAgIDEKKyNkZWZpbmUgQUhfSU5BQ1RJVkUgMgorc3RydWN0IGhvc3RzZmlsZSB7CisgIHN0cnVjdCBob3N0c2ZpbGUgKm5leHQ7CisgIGludCBmbGFnczsKKyAgY2hhciAqZm5hbWU7CisgIGludCBpbmRleDsgLyogbWF0Y2hlcyB0byBjYWNoZSBlbnRyaWVzIGZvciBsb2dnaW5nICovCit9OworCitzdHJ1Y3QgZnJlYyB7CisgIHVuaW9uIG15c29ja2FkZHIgc291cmNlOworICBzdHJ1Y3QgYWxsX2FkZHIgZGVzdDsKKyAgc3RydWN0IHNlcnZlciAqc2VudHRvOyAvKiBOVUxMIG1lYW5zIGZyZWUgKi8KKyAgc3RydWN0IHJhbmRmZCAqcmZkNDsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgc3RydWN0IHJhbmRmZCAqcmZkNjsKKyNlbmRpZgorICB1bnNpZ25lZCBpbnQgaWZhY2U7CisgIHVuc2lnbmVkIHNob3J0IG9yaWdfaWQsIG5ld19pZDsKKyAgaW50IGZkLCBmb3J3YXJkYWxsOworICB1bnNpZ25lZCBpbnQgY3JjOworICB0aW1lX3QgdGltZTsKKyAgc3RydWN0IGZyZWMgKm5leHQ7Cit9OworCisvKiBhY3Rpb25zIGluIHRoZSBkYWVtb24tPmhlbHBlciBSUEMgKi8KKyNkZWZpbmUgQUNUSU9OX0RFTCAgICAgICAgICAgMQorI2RlZmluZSBBQ1RJT05fT0xEX0hPU1ROQU1FICAyCisjZGVmaW5lIEFDVElPTl9PTEQgICAgICAgICAgIDMKKyNkZWZpbmUgQUNUSU9OX0FERCAgICAgICAgICAgNAorCisjZGVmaW5lIERIQ1BfQ0hBRERSX01BWCAxNgorCitzdHJ1Y3QgZGhjcF9sZWFzZSB7CisgIGludCBjbGlkX2xlbjsgICAgICAgICAgLyogbGVuZ3RoIG9mIGNsaWVudCBpZGVudGlmaWVyICovCisgIHVuc2lnbmVkIGNoYXIgKmNsaWQ7ICAgLyogY2xpZW50aWQgKi8KKyAgY2hhciAqaG9zdG5hbWUsICpmcWRuOyAvKiBuYW1lIGZyb20gY2xpZW50LWhvc3RuYW1lIG9wdGlvbiBvciBjb25maWcgKi8KKyAgY2hhciAqb2xkX2hvc3RuYW1lOyAgICAvKiBob3N0bmFtZSBiZWZvcmUgaXQgbW92ZWQgdG8gYW5vdGhlciBsZWFzZSAqLworICBjaGFyIGF1dGhfbmFtZTsgICAgICAgIC8qIGhvc3RuYW1lIGNhbWUgZnJvbSBjb25maWcsIG5vdCBmcm9tIGNsaWVudCAqLworICBjaGFyIG5ldzsgICAgICAgICAgICAgIC8qIG5ld2x5IGNyZWF0ZWQgKi8KKyAgY2hhciBjaGFuZ2VkOyAgICAgICAgICAvKiBtb2RpZmllZCAqLworICBjaGFyIGF1eF9jaGFuZ2VkOyAgICAgIC8qIENMSUQgb3IgZXhwaXJ5IGNoYW5nZWQgKi8KKyAgdGltZV90IGV4cGlyZXM7ICAgICAgICAvKiBsZWFzZSBleHBpcnkgKi8KKyNpZmRlZiBIQVZFX0JST0tFTl9SVEMKKyAgdW5zaWduZWQgaW50IGxlbmd0aDsKKyNlbmRpZgorICBpbnQgaHdhZGRyX2xlbiwgaHdhZGRyX3R5cGU7CisgIHVuc2lnbmVkIGNoYXIgaHdhZGRyW0RIQ1BfQ0hBRERSX01BWF07IAorICBzdHJ1Y3QgaW5fYWRkciBhZGRyLCBvdmVycmlkZSwgZ2lhZGRyOworICB1bnNpZ25lZCBjaGFyICp2ZW5kb3JjbGFzcywgKnVzZXJjbGFzcywgKnN1cHBsaWVkX2hvc3RuYW1lOworICB1bnNpZ25lZCBpbnQgdmVuZG9yY2xhc3NfbGVuLCB1c2VyY2xhc3NfbGVuLCBzdXBwbGllZF9ob3N0bmFtZV9sZW47CisgIGludCBsYXN0X2ludGVyZmFjZTsKKyAgc3RydWN0IGRoY3BfbGVhc2UgKm5leHQ7Cit9OworCitzdHJ1Y3QgZGhjcF9uZXRpZCB7CisgIGNoYXIgKm5ldDsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKm5leHQ7Cit9OworCitzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0IHsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKmxpc3Q7CisgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKm5leHQ7Cit9OworCitzdHJ1Y3QgaHdhZGRyX2NvbmZpZyB7CisgIGludCBod2FkZHJfbGVuLCBod2FkZHJfdHlwZTsKKyAgdW5zaWduZWQgY2hhciBod2FkZHJbREhDUF9DSEFERFJfTUFYXTsKKyAgdW5zaWduZWQgaW50IHdpbGRjYXJkX21hc2s7CisgIHN0cnVjdCBod2FkZHJfY29uZmlnICpuZXh0OworfTsKKworc3RydWN0IGRoY3BfY29uZmlnIHsKKyAgdW5zaWduZWQgaW50IGZsYWdzOworICBpbnQgY2xpZF9sZW47ICAgICAgICAgIC8qIGxlbmd0aCBvZiBjbGllbnQgaWRlbnRpZmllciAqLworICB1bnNpZ25lZCBjaGFyICpjbGlkOyAgIC8qIGNsaWVudGlkICovCisgIGNoYXIgKmhvc3RuYW1lLCAqZG9tYWluOworICBzdHJ1Y3QgZGhjcF9uZXRpZCBuZXRpZDsKKyAgc3RydWN0IGluX2FkZHIgYWRkcjsKKyAgdGltZV90IGRlY2xpbmVfdGltZTsKKyAgdW5zaWduZWQgaW50IGxlYXNlX3RpbWU7CisgIHN0cnVjdCBod2FkZHJfY29uZmlnICpod2FkZHI7CisgIHN0cnVjdCBkaGNwX2NvbmZpZyAqbmV4dDsKK307CisKKyNkZWZpbmUgQ09ORklHX0RJU0FCTEUgICAgICAgICAgIDEKKyNkZWZpbmUgQ09ORklHX0NMSUQgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ09ORklHX1RJTUUgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ09ORklHX05BTUUgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ09ORklHX0FERFIgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ09ORklHX05FVElEICAgICAgICAgICAgNjQKKyNkZWZpbmUgQ09ORklHX05PQ0xJRCAgICAgICAgICAxMjgKKyNkZWZpbmUgQ09ORklHX0ZST01fRVRIRVJTICAgICAyNTYgICAgLyogZW50cnkgY3JlYXRlZCBieSAvZXRjL2V0aGVycyAqLworI2RlZmluZSBDT05GSUdfQUREUl9IT1NUUyAgICAgIDUxMiAgICAvKiBhZGRyZXNzIGFkZGVkIGJ5IGZyb20gL2V0Yy9ob3N0cyAqLworI2RlZmluZSBDT05GSUdfREVDTElORUQgICAgICAgMTAyNCAgICAvKiBhZGRyZXNzIGRlY2xpbmVkIGJ5IGNsaWVudCAqLworI2RlZmluZSBDT05GSUdfQkFOSyAgICAgICAgICAgMjA0OCAgICAvKiBmcm9tIGRoY3AgaG9zdHMgZmlsZSAqLworCitzdHJ1Y3QgZGhjcF9vcHQgeworICBpbnQgb3B0LCBsZW4sIGZsYWdzOworICB1bmlvbiB7CisgICAgaW50IGVuY2FwOworICAgIHVuc2lnbmVkIGludCB3aWxkY2FyZF9tYXNrOworICAgIHVuc2lnbmVkIGNoYXIgKnZlbmRvcl9jbGFzczsKKyAgfSB1OworICB1bnNpZ25lZCBjaGFyICp2YWw7CisgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZDsKKyAgc3RydWN0IGRoY3Bfb3B0ICpuZXh0OworfTsKKworI2RlZmluZSBESE9QVF9BRERSICAgICAgICAgICAgICAgMQorI2RlZmluZSBESE9QVF9TVFJJTkcgICAgICAgICAgICAgMgorI2RlZmluZSBESE9QVF9FTkNBUFNVTEFURSAgICAgICAgNAorI2RlZmluZSBESE9QVF9FTkNBUF9NQVRDSCAgICAgICAgOAorI2RlZmluZSBESE9QVF9GT1JDRSAgICAgICAgICAgICAxNgorI2RlZmluZSBESE9QVF9CQU5LICAgICAgICAgICAgICAzMgorI2RlZmluZSBESE9QVF9FTkNBUF9ET05FICAgICAgICA2NAorI2RlZmluZSBESE9QVF9NQVRDSCAgICAgICAgICAgIDEyOAorI2RlZmluZSBESE9QVF9WRU5ET1IgICAgICAgICAgIDI1NgorI2RlZmluZSBESE9QVF9IRVggICAgICAgICAgICAgIDUxMgorI2RlZmluZSBESE9QVF9WRU5ET1JfTUFUQ0ggICAgMTAyNAorCitzdHJ1Y3QgZGhjcF9ib290IHsKKyAgY2hhciAqZmlsZSwgKnNuYW1lOworICBzdHJ1Y3QgaW5fYWRkciBuZXh0X3NlcnZlcjsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkOworICBzdHJ1Y3QgZGhjcF9ib290ICpuZXh0OworfTsKKworc3RydWN0IHB4ZV9zZXJ2aWNlIHsKKyAgdW5zaWduZWQgc2hvcnQgQ1NBLCB0eXBlOyAKKyAgY2hhciAqbWVudSwgKmJhc2VuYW1lOworICBzdHJ1Y3QgaW5fYWRkciBzZXJ2ZXI7CisgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZDsKKyAgc3RydWN0IHB4ZV9zZXJ2aWNlICpuZXh0OworfTsKKworI2RlZmluZSBNQVRDSF9WRU5ET1IgICAgIDEKKyNkZWZpbmUgTUFUQ0hfVVNFUiAgICAgICAyCisjZGVmaW5lIE1BVENIX0NJUkNVSVQgICAgMworI2RlZmluZSBNQVRDSF9SRU1PVEUgICAgIDQKKyNkZWZpbmUgTUFUQ0hfU1VCU0NSSUJFUiA1CisKKy8qIHZlbmRvcmNsYXNzLCB1c2VyY2xhc3MsIHJlbW90ZS1pZCBvciBjaWN1aXQtaWQgKi8KK3N0cnVjdCBkaGNwX3ZlbmRvciB7CisgIGludCBsZW4sIG1hdGNoX3R5cGUsIG9wdGlvbjsKKyAgY2hhciAqZGF0YTsKKyAgc3RydWN0IGRoY3BfbmV0aWQgbmV0aWQ7CisgIHN0cnVjdCBkaGNwX3ZlbmRvciAqbmV4dDsKK307CisKK3N0cnVjdCBkaGNwX21hYyB7CisgIHVuc2lnbmVkIGludCBtYXNrOworICBpbnQgaHdhZGRyX2xlbiwgaHdhZGRyX3R5cGU7CisgIHVuc2lnbmVkIGNoYXIgaHdhZGRyW0RIQ1BfQ0hBRERSX01BWF07CisgIHN0cnVjdCBkaGNwX25ldGlkIG5ldGlkOworICBzdHJ1Y3QgZGhjcF9tYWMgKm5leHQ7Cit9OworCitzdHJ1Y3QgZGhjcF9icmlkZ2UgeworICBjaGFyIGlmYWNlW0lGX05BTUVTSVpFXTsKKyAgc3RydWN0IGRoY3BfYnJpZGdlICphbGlhcywgKm5leHQ7Cit9OworCitzdHJ1Y3QgY29uZF9kb21haW4geworICBjaGFyICpkb21haW47CisgIHN0cnVjdCBpbl9hZGRyIHN0YXJ0LCBlbmQ7CisgIHN0cnVjdCBjb25kX2RvbWFpbiAqbmV4dDsKK307CisKK3N0cnVjdCBkaGNwX2NvbnRleHQgeworICB1bnNpZ25lZCBpbnQgbGVhc2VfdGltZSwgYWRkcl9lcG9jaDsKKyAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgYnJvYWRjYXN0OworICBzdHJ1Y3QgaW5fYWRkciBsb2NhbCwgcm91dGVyOworICBzdHJ1Y3QgaW5fYWRkciBzdGFydCwgZW5kOyAvKiByYW5nZSBvZiBhdmFpbGFibGUgYWRkcmVzc2VzICovCisgIGludCBmbGFnczsKKyAgc3RydWN0IGRoY3BfbmV0aWQgbmV0aWQsICpmaWx0ZXI7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKm5leHQsICpjdXJyZW50OworfTsKKworI2RlZmluZSBDT05URVhUX1NUQVRJQyAgICAxCisjZGVmaW5lIENPTlRFWFRfTkVUTUFTSyAgIDIKKyNkZWZpbmUgQ09OVEVYVF9CUkRDQVNUICAgNAorI2RlZmluZSBDT05URVhUX1BST1hZICAgICA4CisKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKKworc3RydWN0IGRoY3BfcGFja2V0IHsKKyAgdTggb3AsIGh0eXBlLCBobGVuLCBob3BzOworICB1MzIgeGlkOworICB1MTYgc2VjcywgZmxhZ3M7CisgIHN0cnVjdCBpbl9hZGRyIGNpYWRkciwgeWlhZGRyLCBzaWFkZHIsIGdpYWRkcjsKKyAgdTggY2hhZGRyW0RIQ1BfQ0hBRERSX01BWF0sIHNuYW1lWzY0XSwgZmlsZVsxMjhdOworICB1OCBvcHRpb25zWzMxMl07Cit9OworCitzdHJ1Y3QgcGluZ19yZXN1bHQgeworICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworICB0aW1lX3QgdGltZTsKKyAgc3RydWN0IHBpbmdfcmVzdWx0ICpuZXh0OworfTsKKworc3RydWN0IHRmdHBfZmlsZSB7CisgIGludCByZWZjb3VudCwgZmQ7CisgIG9mZl90IHNpemU7CisgIGRldl90IGRldjsKKyAgaW5vX3QgaW5vZGU7CisgIGNoYXIgZmlsZW5hbWVbXTsKK307CisKK3N0cnVjdCB0ZnRwX3RyYW5zZmVyIHsKKyAgaW50IHNvY2tmZDsKKyAgdGltZV90IHRpbWVvdXQ7CisgIGludCBiYWNrb2ZmOworICB1bnNpZ25lZCBpbnQgYmxvY2ssIGJsb2Nrc2l6ZSwgZXhwYW5zaW9uOworICBvZmZfdCBvZmZzZXQ7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiBwZWVyOworICBjaGFyIG9wdF9ibG9ja3NpemUsIG9wdF90cmFuc2l6ZSwgbmV0YXNjaWksIGNhcnJ5bGY7CisgIHN0cnVjdCB0ZnRwX2ZpbGUgKmZpbGU7CisgIHN0cnVjdCB0ZnRwX3RyYW5zZmVyICpuZXh0OworfTsKKworZXh0ZXJuIHN0cnVjdCBkYWVtb24geworICAvKiBkYXRhc3R1Y3R1cmVzIHJlcHJlc2VudGluZyB0aGUgY29tbWFuZC1saW5lIGFuZCAKKyAgICAgY29uZmlnIGZpbGUgYXJndW1lbnRzLiBBbGwgc2V0IChpbmNsdWRpbmcgZGVmYXVsdHMpCisgICAgIGluIG9wdGlvbi5jICovCisKKyAgdW5zaWduZWQgaW50IG9wdGlvbnM7CisgIHN0cnVjdCByZXNvbHZjIGRlZmF1bHRfcmVzb2x2LCAqcmVzb2x2X2ZpbGVzOworICB0aW1lX3QgbGFzdF9yZXNvbHY7CisgIHN0cnVjdCBteF9zcnZfcmVjb3JkICpteG5hbWVzOworICBzdHJ1Y3QgbmFwdHIgKm5hcHRyOworICBzdHJ1Y3QgdHh0X3JlY29yZCAqdHh0OworICBzdHJ1Y3QgcHRyX3JlY29yZCAqcHRyOworICBzdHJ1Y3QgY25hbWUgKmNuYW1lczsKKyAgc3RydWN0IGludGVyZmFjZV9uYW1lICppbnRfbmFtZXM7CisgIGNoYXIgKm14dGFyZ2V0OworICBjaGFyICpsZWFzZV9maWxlOyAKKyAgY2hhciAqdXNlcm5hbWUsICpncm91cG5hbWUsICpzY3JpcHR1c2VyOworICBpbnQgZ3JvdXBfc2V0LCBvc3BvcnQ7CisgIGNoYXIgKmRvbWFpbl9zdWZmaXg7CisgIHN0cnVjdCBjb25kX2RvbWFpbiAqY29uZF9kb21haW47CisgIGNoYXIgKnJ1bmZpbGU7IAorICBjaGFyICpsZWFzZV9jaGFuZ2VfY29tbWFuZDsKKyAgc3RydWN0IGluYW1lICppZl9uYW1lcywgKmlmX2FkZHJzLCAqaWZfZXhjZXB0LCAqZGhjcF9leGNlcHQ7CisgIHN0cnVjdCBib2d1c19hZGRyICpib2d1c19hZGRyOworICBzdHJ1Y3Qgc2VydmVyICpzZXJ2ZXJzOworICBpbnQgbG9nX2ZhYzsgLyogbG9nIGZhY2lsaXR5ICovCisgIGNoYXIgKmxvZ19maWxlOyAvKiBvcHRpb25hbCBsb2cgZmlsZSAqLworICBpbnQgbWF4X2xvZ3M7ICAvKiBxdWV1ZSBsaW1pdCAqLworICBpbnQgY2FjaGVzaXplLCBmdGFic2l6ZTsKKyAgaW50IHBvcnQsIHF1ZXJ5X3BvcnQsIG1pbl9wb3J0OworICB1bnNpZ25lZCBsb25nIGxvY2FsX3R0bCwgbmVnX3R0bDsKKyAgc3RydWN0IGhvc3RzZmlsZSAqYWRkbl9ob3N0czsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqZGhjcDsKKyAgc3RydWN0IGRoY3BfY29uZmlnICpkaGNwX2NvbmY7CisgIHN0cnVjdCBkaGNwX29wdCAqZGhjcF9vcHRzLCAqZGhjcF9tYXRjaDsKKyAgc3RydWN0IGRoY3BfdmVuZG9yICpkaGNwX3ZlbmRvcnM7CisgIHN0cnVjdCBkaGNwX21hYyAqZGhjcF9tYWNzOworICBzdHJ1Y3QgZGhjcF9ib290ICpib290X2NvbmZpZzsKKyAgc3RydWN0IHB4ZV9zZXJ2aWNlICpweGVfc2VydmljZXM7CisgIGludCBlbmFibGVfcHhlOworICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICpkaGNwX2lnbm9yZSwgKmRoY3BfaWdub3JlX25hbWVzLCAqZm9yY2VfYnJvYWRjYXN0LCAqYm9vdHBfZHluYW1pYzsKKyAgY2hhciAqZGhjcF9ob3N0c19maWxlLCAqZGhjcF9vcHRzX2ZpbGU7CisgIGludCBkaGNwX21heCwgdGZ0cF9tYXg7CisgIGludCBkaGNwX3NlcnZlcl9wb3J0LCBkaGNwX2NsaWVudF9wb3J0OworICBpbnQgc3RhcnRfdGZ0cF9wb3J0LCBlbmRfdGZ0cF9wb3J0OyAKKyAgdW5zaWduZWQgaW50IG1pbl9sZWFzZXRpbWU7CisgIHN0cnVjdCBkb2N0b3IgKmRvY3RvcnM7CisgIHVuc2lnbmVkIHNob3J0IGVkbnNfcGt0c3o7CisgIGNoYXIgKnRmdHBfcHJlZml4OyAKKworICAvKiBnbG9iYWxseSB1c2VkIHN0dWZmIGZvciBETlMgKi8KKyAgY2hhciAqcGFja2V0OyAvKiBwYWNrZXQgYnVmZmVyICovCisgIGludCBwYWNrZXRfYnVmZl9zejsgLyogc2l6ZSBvZiBhYm92ZSAqLworICBjaGFyICpuYW1lYnVmZjsgLyogTUFYRE5BTUUgc2l6ZSBidWZmZXIgKi8KKyAgdW5zaWduZWQgaW50IGxvY2FsX2Fuc3dlciwgcXVlcmllc19mb3J3YXJkZWQ7CisgIHN0cnVjdCBmcmVjICpmcmVjX2xpc3Q7CisgIHN0cnVjdCBzZXJ2ZXJmZCAqc2ZkczsKKyAgc3RydWN0IGlyZWMgKmludGVyZmFjZXM7CisgIHN0cnVjdCBsaXN0ZW5lciAqbGlzdGVuZXJzOworICBzdHJ1Y3Qgc2VydmVyICpsYXN0X3NlcnZlcjsKKyAgdGltZV90IGZvcndhcmR0aW1lOworICBpbnQgZm9yd2FyZGNvdW50OworICBzdHJ1Y3Qgc2VydmVyICpzcnZfc2F2ZTsgLyogVXNlZCBmb3IgcmVzZW5kIG9uIERvRCAqLworICBzaXplX3QgcGFja2V0X2xlbjsgICAgICAgLyogICAgICAiICAgICAgICAiICAgICAgICAqLworICBzdHJ1Y3QgcmFuZGZkICpyZmRfc2F2ZTsgLyogICAgICAiICAgICAgICAiICAgICAgICAqLworICBwaWRfdCB0Y3BfcGlkc1tNQVhfUFJPQ1NdOworICBzdHJ1Y3QgcmFuZGZkIHJhbmRvbXNvY2tzW1JBTkRPTV9TT0NLU107CisKKyAgLyogREhDUCBzdGF0ZSAqLworICBpbnQgZGhjcGZkLCBoZWxwZXJmZDsgCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgIGludCBuZXRsaW5rZmQ7CisjZWxpZiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspCisgIGludCBkaGNwX3Jhd19mZCwgZGhjcF9pY21wX2ZkOworI2VuZGlmCisgIHN0cnVjdCBpb3ZlYyBkaGNwX3BhY2tldDsKKyAgY2hhciAqZGhjcF9idWZmLCAqZGhjcF9idWZmMjsKKyAgc3RydWN0IHBpbmdfcmVzdWx0ICpwaW5nX3Jlc3VsdHM7CisgIEZJTEUgKmxlYXNlX3N0cmVhbTsKKyAgc3RydWN0IGRoY3BfYnJpZGdlICpicmlkZ2VzOworCisgIC8qIERCdXMgc3R1ZmYgKi8KKyAgLyogdm9pZCAqIGhlcmUgdG8gYXZvaWQgZGVwZW5kaW5nIG9uIGRidXMgaGVhZGVycyBvdXRzaWRlIGRidXMuYyAqLworICB2b2lkICpkYnVzOworI2lmZGVmIEhBVkVfREJVUworICBzdHJ1Y3Qgd2F0Y2ggKndhdGNoZXM7CisjZW5kaWYKKworICAvKiBURlRQIHN0dWZmICovCisgIHN0cnVjdCB0ZnRwX3RyYW5zZmVyICp0ZnRwX3RyYW5zOworCit9ICpkYWVtb247CisKKy8qIGNhY2hlLmMgKi8KK3ZvaWQgY2FjaGVfaW5pdCh2b2lkKTsKK3ZvaWQgbG9nX3F1ZXJ5KHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyICpuYW1lLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIsIGNoYXIgKmFyZyk7IAorY2hhciAqcmVjb3JkX3NvdXJjZShpbnQgaW5kZXgpOwordm9pZCBxdWVyeXN0cihjaGFyICpzdHIsIHVuc2lnbmVkIHNob3J0IHR5cGUpOworc3RydWN0IGNyZWMgKmNhY2hlX2ZpbmRfYnlfYWRkcihzdHJ1Y3QgY3JlYyAqY3JlY3AsCisJCQkJc3RydWN0IGFsbF9hZGRyICphZGRyLCB0aW1lX3Qgbm93LCAKKwkJCQl1bnNpZ25lZCBzaG9ydCBwcm90KTsKK3N0cnVjdCBjcmVjICpjYWNoZV9maW5kX2J5X25hbWUoc3RydWN0IGNyZWMgKmNyZWNwLCAKKwkJCQljaGFyICpuYW1lLCB0aW1lX3Qgbm93LCB1bnNpZ25lZCBzaG9ydCAgcHJvdCk7Cit2b2lkIGNhY2hlX2VuZF9pbnNlcnQodm9pZCk7Cit2b2lkIGNhY2hlX3N0YXJ0X2luc2VydCh2b2lkKTsKK3N0cnVjdCBjcmVjICpjYWNoZV9pbnNlcnQoY2hhciAqbmFtZSwgc3RydWN0IGFsbF9hZGRyICphZGRyLAorCQkJICB0aW1lX3Qgbm93LCB1bnNpZ25lZCBsb25nIHR0bCwgdW5zaWduZWQgc2hvcnQgZmxhZ3MpOwordm9pZCBjYWNoZV9yZWxvYWQodm9pZCk7Cit2b2lkIGNhY2hlX2FkZF9kaGNwX2VudHJ5KGNoYXIgKmhvc3RfbmFtZSwgc3RydWN0IGluX2FkZHIgKmhvc3RfYWRkcmVzcywgdGltZV90IHR0ZCk7Cit2b2lkIGNhY2hlX3VuaGFzaF9kaGNwKHZvaWQpOwordm9pZCBkdW1wX2NhY2hlKHRpbWVfdCBub3cpOworY2hhciAqY2FjaGVfZ2V0X25hbWUoc3RydWN0IGNyZWMgKmNyZWNwKTsKK2NoYXIgKmdldF9kb21haW4oc3RydWN0IGluX2FkZHIgYWRkcik7CisKKy8qIHJmYzEwMzUuYyAqLwordW5zaWduZWQgc2hvcnQgZXh0cmFjdF9yZXF1ZXN0KEhFQURFUiAqaGVhZGVyLCBzaXplX3QgcWxlbiwgCisJCQkgICAgICAgY2hhciAqbmFtZSwgdW5zaWduZWQgc2hvcnQgKnR5cGVwKTsKK3NpemVfdCBzZXR1cF9yZXBseShIRUFERVIgKmhlYWRlciwgc2l6ZV90ICBxbGVuLAorCQkgICBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHJwLCB1bnNpZ25lZCBzaG9ydCBmbGFncywKKwkJICAgdW5zaWduZWQgbG9uZyBsb2NhbF90dGwpOworaW50IGV4dHJhY3RfYWRkcmVzc2VzKEhFQURFUiAqaGVhZGVyLCBzaXplX3QgcWxlbiwgY2hhciAqbmFtZWJ1ZmYsIHRpbWVfdCBub3cpOworc2l6ZV90IGFuc3dlcl9yZXF1ZXN0KEhFQURFUiAqaGVhZGVyLCBjaGFyICpsaW1pdCwgc2l6ZV90IHFsZW4sICAKKwkJICAgc3RydWN0IGluX2FkZHIgbG9jYWxfYWRkciwgc3RydWN0IGluX2FkZHIgbG9jYWxfbmV0bWFzaywgdGltZV90IG5vdyk7CitpbnQgY2hlY2tfZm9yX2JvZ3VzX3dpbGRjYXJkKEhFQURFUiAqaGVhZGVyLCBzaXplX3QgcWxlbiwgY2hhciAqbmFtZSwgCisJCQkgICAgIHN0cnVjdCBib2d1c19hZGRyICphZGRyLCB0aW1lX3Qgbm93KTsKK3Vuc2lnbmVkIGNoYXIgKmZpbmRfcHNldWRvaGVhZGVyKEhFQURFUiAqaGVhZGVyLCBzaXplX3QgcGxlbiwKKwkJCQkgc2l6ZV90ICpsZW4sIHVuc2lnbmVkIGNoYXIgKipwLCBpbnQgKmlzX3NpZ24pOworaW50IGNoZWNrX2Zvcl9sb2NhbF9kb21haW4oY2hhciAqbmFtZSwgdGltZV90IG5vdyk7Cit1bnNpZ25lZCBpbnQgcXVlc3Rpb25zX2NyYyhIRUFERVIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGNoYXIgKmJ1ZmYpOworc2l6ZV90IHJlc2l6ZV9wYWNrZXQoSEVBREVSICpoZWFkZXIsIHNpemVfdCBwbGVuLCAKKwkJICB1bnNpZ25lZCBjaGFyICpwaGVhZGVyLCBzaXplX3QgaGxlbik7CisKKy8qIHV0aWwuYyAqLwordm9pZCByYW5kX2luaXQodm9pZCk7Cit1bnNpZ25lZCBzaG9ydCByYW5kMTYodm9pZCk7CitpbnQgbGVnYWxfaG9zdG5hbWUoY2hhciAqYyk7CitjaGFyICpjYW5vbmljYWxpc2UoY2hhciAqcywgaW50ICpub21lbSk7Cit1bnNpZ25lZCBjaGFyICpkb19yZmMxMDM1X25hbWUodW5zaWduZWQgY2hhciAqcCwgY2hhciAqc3ZhbCk7Cit2b2lkICpzYWZlX21hbGxvYyhzaXplX3Qgc2l6ZSk7Cit2b2lkIHNhZmVfcGlwZShpbnQgKmZkLCBpbnQgcmVhZF9ub2Jsb2NrKTsKK3ZvaWQgKndoaW5lX21hbGxvYyhzaXplX3Qgc2l6ZSk7CitpbnQgc2FfbGVuKHVuaW9uIG15c29ja2FkZHIgKmFkZHIpOworaW50IHNvY2thZGRyX2lzZXF1YWwodW5pb24gbXlzb2NrYWRkciAqczEsIHVuaW9uIG15c29ja2FkZHIgKnMyKTsKK2ludCBob3N0bmFtZV9pc2VxdWFsKGNoYXIgKmEsIGNoYXIgKmIpOwordGltZV90IGRuc21hc3FfdGltZSh2b2lkKTsKK2ludCBpc19zYW1lX25ldChzdHJ1Y3QgaW5fYWRkciBhLCBzdHJ1Y3QgaW5fYWRkciBiLCBzdHJ1Y3QgaW5fYWRkciBtYXNrKTsKK2ludCByZXRyeV9zZW5kKHZvaWQpOwordm9pZCBwcmV0dHlwcmludF90aW1lKGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IHQpOworaW50IHByZXR0eXByaW50X2FkZHIodW5pb24gbXlzb2NrYWRkciAqYWRkciwgY2hhciAqYnVmKTsKK2ludCBwYXJzZV9oZXgoY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IG1heGxlbiwgCisJICAgICAgdW5zaWduZWQgaW50ICp3aWxkY2FyZF9tYXNrLCBpbnQgKm1hY190eXBlKTsKK2ludCBtZW1jbXBfbWFza2VkKHVuc2lnbmVkIGNoYXIgKmEsIHVuc2lnbmVkIGNoYXIgKmIsIGludCBsZW4sIAorCQkgIHVuc2lnbmVkIGludCBtYXNrKTsKK2ludCBleHBhbmRfYnVmKHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3Qgc2l6ZSk7CitjaGFyICpwcmludF9tYWMoY2hhciAqYnVmZiwgdW5zaWduZWQgY2hhciAqbWFjLCBpbnQgbGVuKTsKK3ZvaWQgYnVtcF9tYXhmZChpbnQgZmQsIGludCAqbWF4KTsKK2ludCByZWFkX3dyaXRlKGludCBmZCwgdW5zaWduZWQgY2hhciAqcGFja2V0LCBpbnQgc2l6ZSwgaW50IHJ3KTsKKworLyogbG9nLmMgKi8KK3ZvaWQgZGllKGNoYXIgKm1lc3NhZ2UsIGNoYXIgKmFyZzEsIGludCBleGl0X2NvZGUpOworaW50IGxvZ19zdGFydChzdHJ1Y3QgcGFzc3dkICplbnRfcHcsIGludCBlcnJmZCk7CitpbnQgbG9nX3Jlb3BlbihjaGFyICpsb2dfZmlsZSk7Cit2b2lkIG15X3N5c2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKK3ZvaWQgc2V0X2xvZ193cml0ZXIoZmRfc2V0ICpzZXQsIGludCAqbWF4ZmRwKTsKK3ZvaWQgY2hlY2tfbG9nX3dyaXRlcihmZF9zZXQgKnNldCk7Cit2b2lkIGZsdXNoX2xvZyh2b2lkKTsKKworLyogb3B0aW9uLmMgKi8KK3ZvaWQgcmVhZF9vcHRzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKmNvbXBpbGVfb3B0cyk7CitjaGFyICpvcHRpb25fc3RyaW5nKHVuc2lnbmVkIGNoYXIgb3B0LCBpbnQgKmlzX2lwLCBpbnQgKmlzX25hbWUpOwordm9pZCByZXJlYWRfZGhjcCh2b2lkKTsKKworLyogZm9yd2FyZC5jICovCit2b2lkIHJlcGx5X3F1ZXJ5KGludCBmZCwgaW50IGZhbWlseSwgdGltZV90IG5vdyk7Cit2b2lkIHJlY2VpdmVfcXVlcnkoc3RydWN0IGxpc3RlbmVyICpsaXN0ZW4sIHRpbWVfdCBub3cpOwordW5zaWduZWQgY2hhciAqdGNwX3JlcXVlc3QoaW50IGNvbmZkLCB0aW1lX3Qgbm93LAorCQkJICAgc3RydWN0IGluX2FkZHIgbG9jYWxfYWRkciwgc3RydWN0IGluX2FkZHIgbmV0bWFzayk7Cit2b2lkIHNlcnZlcl9nb25lKHN0cnVjdCBzZXJ2ZXIgKnNlcnZlcik7CitzdHJ1Y3QgZnJlYyAqZ2V0X25ld19mcmVjKHRpbWVfdCBub3csIGludCAqd2FpdCk7CisKKy8qIG5ldHdvcmsuYyAqLworaW50IGluZGV4dG9uYW1lKGludCBmZCwgaW50IGluZGV4LCBjaGFyICpuYW1lKTsKK2ludCBsb2NhbF9iaW5kKGludCBmZCwgdW5pb24gbXlzb2NrYWRkciAqYWRkciwgY2hhciAqaW50bmFtZSwgaW50IGlzX3RjcCk7CitpbnQgcmFuZG9tX3NvY2soaW50IGZhbWlseSk7Cit2b2lkIHByZV9hbGxvY2F0ZV9zZmRzKHZvaWQpOworaW50IHJlbG9hZF9zZXJ2ZXJzKGNoYXIgKmZuYW1lKTsKK3ZvaWQgY2hlY2tfc2VydmVycyh2b2lkKTsKK2ludCBlbnVtZXJhdGVfaW50ZXJmYWNlcygpOworc3RydWN0IGxpc3RlbmVyICpjcmVhdGVfd2lsZGNhcmRfbGlzdGVuZXJzKHZvaWQpOworc3RydWN0IGxpc3RlbmVyICpjcmVhdGVfYm91bmRfbGlzdGVuZXJzKHZvaWQpOworaW50IGlmYWNlX2NoZWNrKGludCBmYW1pbHksIHN0cnVjdCBhbGxfYWRkciAqYWRkciwgY2hhciAqbmFtZSwgaW50ICppbmRleHApOworaW50IGZpeF9mZChpbnQgZmQpOworc3RydWN0IGluX2FkZHIgZ2V0X2lmYWRkcihjaGFyICppbnRyKTsKKworLyogZGhjcC5jICovCisjaWZkZWYgSEFWRV9ESENQCit2b2lkIGRoY3BfaW5pdCh2b2lkKTsKK3ZvaWQgZGhjcF9wYWNrZXQodGltZV90IG5vdyk7CitzdHJ1Y3QgZGhjcF9jb250ZXh0ICphZGRyZXNzX2F2YWlsYWJsZShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCAKKwkJCQkgICAgICAgc3RydWN0IGluX2FkZHIgYWRkciwKKwkJCQkgICAgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkcyk7CitzdHJ1Y3QgZGhjcF9jb250ZXh0ICpuYXJyb3dfY29udGV4dChzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCAKKwkJCQkgICAgc3RydWN0IGluX2FkZHIgdGFkZHIsCisJCQkJICAgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZHMpOworaW50IG1hdGNoX25ldGlkKHN0cnVjdCBkaGNwX25ldGlkICpjaGVjaywgc3RydWN0IGRoY3BfbmV0aWQgKnBvb2wsIGludCBuZWdvbmx5KTtpbnQgYWRkcmVzc19hbGxvY2F0ZShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LAorCQkgICAgIHN0cnVjdCBpbl9hZGRyICphZGRycCwgdW5zaWduZWQgY2hhciAqaHdhZGRyLCBpbnQgaHdfbGVuLAorCQkgICAgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZHMsIHRpbWVfdCBub3cpOworaW50IGNvbmZpZ19oYXNfbWFjKHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBjaGFyICpod2FkZHIsIGludCBsZW4sIGludCB0eXBlKTsKK3N0cnVjdCBkaGNwX2NvbmZpZyAqZmluZF9jb25maWcoc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdzLAorCQkJCXN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsCisJCQkJdW5zaWduZWQgY2hhciAqY2xpZCwgaW50IGNsaWRfbGVuLAorCQkJCXVuc2lnbmVkIGNoYXIgKmh3YWRkciwgaW50IGh3X2xlbiwgCisJCQkJaW50IGh3X3R5cGUsIGNoYXIgKmhvc3RuYW1lKTsKK3ZvaWQgZGhjcF91cGRhdGVfY29uZmlncyhzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZ3MpOwordm9pZCBkaGNwX3JlYWRfZXRoZXJzKHZvaWQpOwordm9pZCBjaGVja19kaGNwX2hvc3RzKGludCBmYXRhbCk7CitzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZ19maW5kX2J5X2FkZHJlc3Moc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdzLCBzdHJ1Y3QgaW5fYWRkciBhZGRyKTsKK2NoYXIgKnN0cmlwX2hvc3RuYW1lKGNoYXIgKmhvc3RuYW1lKTsKK2NoYXIgKmhvc3RfZnJvbV9kbnMoc3RydWN0IGluX2FkZHIgYWRkcik7CitjaGFyICpnZXRfZG9tYWluKHN0cnVjdCBpbl9hZGRyIGFkZHIpOworI2VuZGlmCisKKy8qIGxlYXNlLmMgKi8KKyNpZmRlZiBIQVZFX0RIQ1AKK3ZvaWQgbGVhc2VfdXBkYXRlX2ZpbGUodGltZV90IG5vdyk7Cit2b2lkIGxlYXNlX3VwZGF0ZV9kbnMoKTsKK3ZvaWQgbGVhc2VfaW5pdCh0aW1lX3Qgbm93KTsKK3N0cnVjdCBkaGNwX2xlYXNlICpsZWFzZV9hbGxvY2F0ZShzdHJ1Y3QgaW5fYWRkciBhZGRyKTsKK3ZvaWQgbGVhc2Vfc2V0X2h3YWRkcihzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIHVuc2lnbmVkIGNoYXIgKmh3YWRkciwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqY2xpZCwgaW50IGh3X2xlbiwgaW50IGh3X3R5cGUsIGludCBjbGlkX2xlbik7Cit2b2lkIGxlYXNlX3NldF9ob3N0bmFtZShzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIGNoYXIgKm5hbWUsIGludCBhdXRoKTsKK3ZvaWQgbGVhc2Vfc2V0X2V4cGlyZXMoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCB1bnNpZ25lZCBpbnQgbGVuLCB0aW1lX3Qgbm93KTsKK3ZvaWQgbGVhc2Vfc2V0X2ludGVyZmFjZShzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIGludCBpbnRlcmZhY2UpOworc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlX2ZpbmRfYnlfY2xpZW50KHVuc2lnbmVkIGNoYXIgKmh3YWRkciwgaW50IGh3X2xlbiwgaW50IGh3X3R5cGUsICAKKwkJCQkJdW5zaWduZWQgY2hhciAqY2xpZCwgaW50IGNsaWRfbGVuKTsKK3N0cnVjdCBkaGNwX2xlYXNlICpsZWFzZV9maW5kX2J5X2FkZHIoc3RydWN0IGluX2FkZHIgYWRkcik7Cit2b2lkIGxlYXNlX3BydW5lKHN0cnVjdCBkaGNwX2xlYXNlICp0YXJnZXQsIHRpbWVfdCBub3cpOwordm9pZCBsZWFzZV91cGRhdGVfZnJvbV9jb25maWdzKHZvaWQpOworaW50IGRvX3NjcmlwdF9ydW4odGltZV90IG5vdyk7Cit2b2lkIHJlcnVuX3NjcmlwdHModm9pZCk7CisjZW5kaWYKKworLyogcmZjMjEzMS5jICovCisjaWZkZWYgSEFWRV9ESENQCitzaXplX3QgZGhjcF9yZXBseShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBjaGFyICppZmFjZV9uYW1lLCBpbnQgaW50X2luZGV4LAorCQkgIHNpemVfdCBzeiwgdGltZV90IG5vdywgaW50IHVuaWNhc3RfZGVzdCwgaW50ICppc19pbmZvcm0pOwordW5zaWduZWQgY2hhciAqZXh0ZW5kZWRfaHdhZGRyKGludCBod3R5cGUsIGludCBod2xlbiwgdW5zaWduZWQgY2hhciAqaHdhZGRyLCAKKwkJCSAgICAgICBpbnQgY2xpZF9sZW4sIHVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCAqbGVuX291dCk7CisjZW5kaWYKKworLyogZG5zbWFzcS5jICovCisjaWZkZWYgSEFWRV9ESENQCitpbnQgbWFrZV9pY21wX3NvY2sodm9pZCk7CitpbnQgaWNtcF9waW5nKHN0cnVjdCBpbl9hZGRyIGFkZHIpOworI2VuZGlmCit2b2lkIHNlbmRfZXZlbnQoaW50IGZkLCBpbnQgZXZlbnQsIGludCBkYXRhKTsKK3ZvaWQgY2xlYXJfY2FjaGVfYW5kX3JlbG9hZCh0aW1lX3Qgbm93KTsKKworLyogbmV0bGluay5jICovCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCit2b2lkIG5ldGxpbmtfaW5pdCh2b2lkKTsKK3ZvaWQgbmV0bGlua19tdWx0aWNhc3Qodm9pZCk7CisjZW5kaWYKKworLyogYnBmLmMgKi8KKyNpZmRlZiBIQVZFX0JTRF9ORVRXT1JLCit2b2lkIGluaXRfYnBmKHZvaWQpOwordm9pZCBzZW5kX3ZpYV9icGYoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzaXplX3QgbGVuLAorCQkgIHN0cnVjdCBpbl9hZGRyIGlmYWNlX2FkZHIsIHN0cnVjdCBpZnJlcSAqaWZyKTsKKyNlbmRpZgorCisvKiBicGYuYyBvciBuZXRsaW5rLmMgKi8KK2ludCBpZmFjZV9lbnVtZXJhdGUodm9pZCAqcGFybSwgaW50ICgqaXB2NF9jYWxsYmFjaykoKSwgaW50ICgqaXB2Nl9jYWxsYmFjaykoKSk7CisKKy8qIGRidXMuYyAqLworI2lmZGVmIEhBVkVfREJVUworY2hhciAqZGJ1c19pbml0KHZvaWQpOwordm9pZCBjaGVja19kYnVzX2xpc3RlbmVycyhmZF9zZXQgKnJzZXQsIGZkX3NldCAqd3NldCwgZmRfc2V0ICplc2V0KTsKK3ZvaWQgc2V0X2RidXNfbGlzdGVuZXJzKGludCAqbWF4ZmRwLCBmZF9zZXQgKnJzZXQsIGZkX3NldCAqd3NldCwgZmRfc2V0ICplc2V0KTsKK3ZvaWQgZW1pdF9kYnVzX3NpZ25hbChpbnQgYWN0aW9uLCBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIGNoYXIgKmhvc3RuYW1lKTsKKyNlbmRpZgorCisvKiBoZWxwZXIuYyAqLworI2lmIGRlZmluZWQoSEFWRV9ESENQKSAmJiAhZGVmaW5lZChOT19GT1JLKQoraW50IGNyZWF0ZV9oZWxwZXIoaW50IGV2ZW50X2ZkLCBpbnQgZXJyX2ZkLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbG9uZyBtYXhfZmQpOwordm9pZCBoZWxwZXJfd3JpdGUodm9pZCk7Cit2b2lkIHF1ZXVlX3NjcmlwdChpbnQgYWN0aW9uLCBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIAorCQkgIGNoYXIgKmhvc3RuYW1lLCB0aW1lX3Qgbm93KTsKK2ludCBoZWxwZXJfYnVmX2VtcHR5KHZvaWQpOworI2VuZGlmCisKKy8qIHRmdHAuYyAqLworI2lmZGVmIEhBVkVfVEZUUAordm9pZCB0ZnRwX3JlcXVlc3Qoc3RydWN0IGxpc3RlbmVyICpsaXN0ZW4sIHRpbWVfdCBub3cpOwordm9pZCBjaGVja190ZnRwX2xpc3RlbmVycyhmZF9zZXQgKnJzZXQsIHRpbWVfdCBub3cpOworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZm9yd2FyZC5jIGIvc3JjL2ZvcndhcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MGNkYTFjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ZvcndhcmQuYwpAQCAtMCwwICsxLDEwOTQgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCitzdGF0aWMgc3RydWN0IGZyZWMgKmxvb2t1cF9mcmVjKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgY3JjKTsKK3N0YXRpYyBzdHJ1Y3QgZnJlYyAqbG9va3VwX2ZyZWNfYnlfc2VuZGVyKHVuc2lnbmVkIHNob3J0IGlkLAorCQkJCQkgIHVuaW9uIG15c29ja2FkZHIgKmFkZHIsCisJCQkJCSAgdW5zaWduZWQgaW50IGNyYyk7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0X2lkKGludCBmb3JjZSwgdW5zaWduZWQgc2hvcnQgZm9yY2VfaWQsIHVuc2lnbmVkIGludCBjcmMpOworc3RhdGljIHZvaWQgZnJlZV9mcmVjKHN0cnVjdCBmcmVjICpmKTsKK3N0YXRpYyBzdHJ1Y3QgcmFuZGZkICphbGxvY2F0ZV9yZmQoaW50IGZhbWlseSk7CisKKy8qIFNlbmQgYSBVRFAgcGFja2V0IHdpdGggaXRzIHNvdXJjZSBhZGRyZXNzIHNldCBhcyAic291cmNlIiAKKyAgIHVubGVzcyBub3dpbGQgaXMgdHJ1ZSwgd2hlbiB3ZSBqdXN0IHNlbmQgaXQgd2l0aCB0aGUga2VybmVsIGRlZmF1bHQgKi8KK3N0YXRpYyB2b2lkIHNlbmRfZnJvbShpbnQgZmQsIGludCBub3dpbGQsIGNoYXIgKnBhY2tldCwgc2l6ZV90IGxlbiwgCisJCSAgICAgIHVuaW9uIG15c29ja2FkZHIgKnRvLCBzdHJ1Y3QgYWxsX2FkZHIgKnNvdXJjZSwKKwkJICAgICAgdW5zaWduZWQgaW50IGlmYWNlKQoreworICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKyAgc3RydWN0IGlvdmVjIGlvdlsxXTsgCisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgY21zZ2hkciBhbGlnbjsgLyogdGhpcyBlbnN1cmVzIGFsaWdubWVudCAqLworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpXTsKKyNlbGlmIGRlZmluZWQoSVBfU0VORFNSQ0FERFIpCisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSldOworI2VuZGlmCisjaWZkZWYgSEFWRV9JUFY2CisgICAgY2hhciBjb250cm9sNltDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW42X3BrdGluZm8pKV07CisjZW5kaWYKKyAgfSBjb250cm9sX3U7CisgIAorICBpb3ZbMF0uaW92X2Jhc2UgPSBwYWNrZXQ7CisgIGlvdlswXS5pb3ZfbGVuID0gbGVuOworCisgIG1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisgIG1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisgIG1zZy5tc2dfZmxhZ3MgPSAwOworICBtc2cubXNnX25hbWUgPSB0bzsKKyAgbXNnLm1zZ19uYW1lbGVuID0gc2FfbGVuKHRvKTsKKyAgbXNnLm1zZ19pb3YgPSBpb3Y7CisgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgCisgIGlmICghbm93aWxkKQorICAgIHsKKyAgICAgIHN0cnVjdCBjbXNnaGRyICpjbXB0cjsKKyAgICAgIG1zZy5tc2dfY29udHJvbCA9ICZjb250cm9sX3U7CisgICAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbF91KTsKKyAgICAgIGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsKKworICAgICAgaWYgKHRvLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKwl7CisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisJICBzdHJ1Y3QgaW5fcGt0aW5mbyAqcGt0ID0gKHN0cnVjdCBpbl9wa3RpbmZvICopQ01TR19EQVRBKGNtcHRyKTsKKwkgIHBrdC0+aXBpX2lmaW5kZXggPSAwOworCSAgcGt0LT5pcGlfc3BlY19kc3QgPSBzb3VyY2UtPmFkZHIuYWRkcjQ7CisJICBtc2cubXNnX2NvbnRyb2xsZW4gPSBjbXB0ci0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IGluX3BrdGluZm8pKTsKKwkgIGNtcHRyLT5jbXNnX2xldmVsID0gU09MX0lQOworCSAgY21wdHItPmNtc2dfdHlwZSA9IElQX1BLVElORk87CisjZWxpZiBkZWZpbmVkKElQX1NFTkRTUkNBRERSKQorCSAgc3RydWN0IGluX2FkZHIgKmEgPSAoc3RydWN0IGluX2FkZHIgKilDTVNHX0RBVEEoY21wdHIpOworCSAgKmEgPSBzb3VyY2UtPmFkZHIuYWRkcjQ7CisJICBtc2cubXNnX2NvbnRyb2xsZW4gPSBjbXB0ci0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKwkgIGNtcHRyLT5jbXNnX2xldmVsID0gSVBQUk9UT19JUDsKKwkgIGNtcHRyLT5jbXNnX3R5cGUgPSBJUF9TRU5EU1JDQUREUjsKKyNlbmRpZgorCX0KKyAgICAgIGVsc2UKKyNpZmRlZiBIQVZFX0lQVjYKKwl7CisJICBzdHJ1Y3QgaW42X3BrdGluZm8gKnBrdCA9IChzdHJ1Y3QgaW42X3BrdGluZm8gKilDTVNHX0RBVEEoY21wdHIpOworCSAgcGt0LT5pcGk2X2lmaW5kZXggPSBpZmFjZTsgLyogTmVlZCBpZmFjZSBmb3IgSVB2NiB0byBoYW5kbGUgbGluay1sb2NhbCBhZGRycyAqLworCSAgcGt0LT5pcGk2X2FkZHIgPSBzb3VyY2UtPmFkZHIuYWRkcjY7CisJICBtc2cubXNnX2NvbnRyb2xsZW4gPSBjbXB0ci0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IGluNl9wa3RpbmZvKSk7CisJICBjbXB0ci0+Y21zZ190eXBlID0gSVBWNl9QS1RJTkZPOworCSAgY21wdHItPmNtc2dfbGV2ZWwgPSBJUFY2X0xFVkVMOworCX0KKyNlbHNlCisgICAgICBpZmFjZSA9IDA7IC8qIGVsaW1pbmF0ZSB3YXJuaW5nICovCisjZW5kaWYKKyAgICB9CisgIAorIHJldHJ5OgorICBpZiAoc2VuZG1zZyhmZCwgJm1zZywgMCkgPT0gLTEpCisgICAgeworICAgICAgLyogY2VydGFpbiBMaW51eCBrZXJuZWxzIHNlZW0gdG8gb2JqZWN0IHRvIHNldHRpbmcgdGhlIHNvdXJjZSBhZGRyZXNzIGluIHRoZSBJUHY2IHN0YWNrCisJIGJ5IHJldHVybmluZyBFSU5WQUwgZnJvbSBzZW5kbXNnLiBJbiB0aGF0IGNhc2UsIHRyeSBhZ2FpbiB3aXRob3V0IHNldHRpbmcgdGhlCisJIHNvdXJjZSBhZGRyZXNzLCBzaW5jZSBpdCB3aWxsIG5lYXJseSBhbHdheSBiZSBjb3JyZWN0IGFueXdheS4gIElQdjYgc3RpbmtzLiAqLworICAgICAgaWYgKGVycm5vID09IEVJTlZBTCAmJiBtc2cubXNnX2NvbnRyb2xsZW4pCisJeworCSAgbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKwkgIGdvdG8gcmV0cnk7CisJfQorICAgICAgaWYgKHJldHJ5X3NlbmQoKSkKKwlnb3RvIHJldHJ5OworICAgIH0KK30KKyAgICAgICAgICAKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBzZWFyY2hfc2VydmVycyh0aW1lX3Qgbm93LCBzdHJ1Y3QgYWxsX2FkZHIgKiphZGRycHAsIAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcXR5cGUsIGNoYXIgKnFkb21haW4sIGludCAqdHlwZSwgY2hhciAqKmRvbWFpbikKKwkJCSAgICAgIAoreworICAvKiBJZiB0aGUgcXVlcnkgZW5kcyBpbiB0aGUgZG9tYWluIGluIG9uZSBvZiBvdXIgc2VydmVycywgc2V0CisgICAgIGRvbWFpbiB0byBwb2ludCB0byB0aGF0IG5hbWUuIFdlIGZpbmQgdGhlIGxhcmdlc3QgbWF0Y2ggdG8gYWxsb3cgYm90aAorICAgICBkb21haW4ub3JnIGFuZCBzdWIuZG9tYWluLm9yZyB0byBleGlzdC4gKi8KKyAgCisgIHVuc2lnbmVkIGludCBuYW1lbGVuID0gc3RybGVuKHFkb21haW4pOworICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4gPSAwOworICBzdHJ1Y3Qgc2VydmVyICpzZXJ2OworICB1bnNpZ25lZCBzaG9ydCBmbGFncyA9IDA7CisgIAorICBmb3IgKHNlcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnY7IHNlcnY9c2Vydi0+bmV4dCkKKyAgICAvKiBkb21haW4gbWF0Y2hlcyB0YWtlIHByaW9yaXR5IG92ZXIgTk9ET1RTIG1hdGNoZXMgKi8KKyAgICBpZiAoKHNlcnYtPmZsYWdzICYgU0VSVl9GT1JfTk9ET1RTKSAmJiAqdHlwZSAhPSBTRVJWX0hBU19ET01BSU4gJiYgIXN0cmNocihxZG9tYWluLCAnLicpICYmIG5hbWVsZW4gIT0gMCkKKyAgICAgIHsKKwl1bnNpZ25lZCBzaG9ydCBzZmxhZyA9IHNlcnYtPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQgPyBGX0lQVjQgOiBGX0lQVjY7IAorCSp0eXBlID0gU0VSVl9GT1JfTk9ET1RTOworCWlmIChzZXJ2LT5mbGFncyAmIFNFUlZfTk9fQUREUikKKwkgIGZsYWdzID0gRl9OWERPTUFJTjsKKwllbHNlIGlmIChzZXJ2LT5mbGFncyAmIFNFUlZfTElURVJBTF9BRERSRVNTKSAKKwkgIHsgCisJICAgIGlmIChzZmxhZyAmIHF0eXBlKQorCSAgICAgIHsKKwkJZmxhZ3MgPSBzZmxhZzsKKwkJaWYgKHNlcnYtPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpIAorCQkgICphZGRycHAgPSAoc3RydWN0IGFsbF9hZGRyICopJnNlcnYtPmFkZHIuaW4uc2luX2FkZHI7CisjaWZkZWYgSEFWRV9JUFY2CisJCWVsc2UKKwkJICAqYWRkcnBwID0gKHN0cnVjdCBhbGxfYWRkciAqKSZzZXJ2LT5hZGRyLmluNi5zaW42X2FkZHI7CisjZW5kaWYgCisJICAgICAgfQorCSAgICBlbHNlIGlmICghZmxhZ3MgfHwgKGZsYWdzICYgRl9OWERPTUFJTikpCisJICAgICAgZmxhZ3MgPSBGX05PRVJSOworCSAgfSAKKyAgICAgIH0KKyAgICBlbHNlIGlmIChzZXJ2LT5mbGFncyAmIFNFUlZfSEFTX0RPTUFJTikKKyAgICAgIHsKKwl1bnNpZ25lZCBpbnQgZG9tYWlubGVuID0gc3RybGVuKHNlcnYtPmRvbWFpbik7CisJY2hhciAqbWF0Y2hzdGFydCA9IHFkb21haW4gKyBuYW1lbGVuIC0gZG9tYWlubGVuOworCWlmIChuYW1lbGVuID49IGRvbWFpbmxlbiAmJgorCSAgICBob3N0bmFtZV9pc2VxdWFsKG1hdGNoc3RhcnQsIHNlcnYtPmRvbWFpbikgJiYKKwkgICAgZG9tYWlubGVuID49IG1hdGNobGVuICYmCisJICAgIChkb21haW5sZW4gPT0gMCB8fCBuYW1lbGVuID09IGRvbWFpbmxlbiB8fCAqKHNlcnYtPmRvbWFpbikgPT0gJy4nIHx8ICoobWF0Y2hzdGFydC0xKSA9PSAnLicgKSkKKwkgIHsKKwkgICAgdW5zaWduZWQgc2hvcnQgc2ZsYWcgPSBzZXJ2LT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUID8gRl9JUFY0IDogRl9JUFY2OworCSAgICAqdHlwZSA9IFNFUlZfSEFTX0RPTUFJTjsKKwkgICAgKmRvbWFpbiA9IHNlcnYtPmRvbWFpbjsKKwkgICAgbWF0Y2hsZW4gPSBkb21haW5sZW47CisJICAgIGlmIChzZXJ2LT5mbGFncyAmIFNFUlZfTk9fQUREUikKKwkgICAgICBmbGFncyA9IEZfTlhET01BSU47CisJICAgIGVsc2UgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9MSVRFUkFMX0FERFJFU1MpCisJICAgICAgeworCQlpZiAoc2ZsYWcgJiBxdHlwZSkKKwkJICB7CisJCSAgICBmbGFncyA9IHNmbGFnOworCQkgICAgaWYgKHNlcnYtPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpIAorCQkgICAgICAqYWRkcnBwID0gKHN0cnVjdCBhbGxfYWRkciAqKSZzZXJ2LT5hZGRyLmluLnNpbl9hZGRyOworI2lmZGVmIEhBVkVfSVBWNgorCQkgICAgZWxzZQorCQkgICAgICAqYWRkcnBwID0gKHN0cnVjdCBhbGxfYWRkciAqKSZzZXJ2LT5hZGRyLmluNi5zaW42X2FkZHI7CisjZW5kaWYKKwkJICB9CisJCWVsc2UgaWYgKCFmbGFncyB8fCAoZmxhZ3MgJiBGX05YRE9NQUlOKSkKKwkJICBmbGFncyA9IEZfTk9FUlI7CisJICAgICAgfQorCSAgfSAKKyAgICAgIH0KKworICBpZiAoZmxhZ3MgPT0gMCAmJiAhKHF0eXBlICYgRl9CSUdOQU1FKSAmJiAKKyAgICAgIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTk9ET1RTX0xPQ0FMKSAmJiAhc3RyY2hyKHFkb21haW4sICcuJykgJiYgbmFtZWxlbiAhPSAwKQorICAgIC8qIGRvbid0IGZvcndhcmQgc2ltcGxlIG5hbWVzLCBtYWtlIGV4Y2VwdGlvbiBmb3IgTlMgcXVlcmllcyBhbmQgZW1wdHkgbmFtZS4gKi8KKyAgICBmbGFncyA9IEZfTlhET01BSU47CisgICAgCisgIGlmIChmbGFncyA9PSBGX05YRE9NQUlOICYmIGNoZWNrX2Zvcl9sb2NhbF9kb21haW4ocWRvbWFpbiwgbm93KSkKKyAgICBmbGFncyA9IEZfTk9FUlI7CisKKyAgaWYgKGZsYWdzKQorICAgIHsKKyAgICAgIGludCBsb2dmbGFncyA9IDA7CisgICAgICAKKyAgICAgIGlmIChmbGFncyA9PSBGX05YRE9NQUlOIHx8IGZsYWdzID09IEZfTk9FUlIpCisJbG9nZmxhZ3MgPSBGX05FRyB8IHF0eXBlOworICAKKyAgICAgIGxvZ19xdWVyeShsb2dmbGFncyB8IGZsYWdzIHwgRl9DT05GSUcgfCBGX0ZPUldBUkQsIHFkb21haW4sICphZGRycHAsIE5VTEwpOworICAgIH0KKworICByZXR1cm4gIGZsYWdzOworfQorCitzdGF0aWMgaW50IGZvcndhcmRfcXVlcnkoaW50IHVkcGZkLCB1bmlvbiBteXNvY2thZGRyICp1ZHBhZGRyLAorCQkJIHN0cnVjdCBhbGxfYWRkciAqZHN0X2FkZHIsIHVuc2lnbmVkIGludCBkc3RfaWZhY2UsCisJCQkgSEVBREVSICpoZWFkZXIsIHNpemVfdCBwbGVuLCB0aW1lX3Qgbm93LCBzdHJ1Y3QgZnJlYyAqZm9yd2FyZCkKK3sKKyAgY2hhciAqZG9tYWluID0gTlVMTDsKKyAgaW50IHR5cGUgPSAwOworICBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHJwID0gTlVMTDsKKyAgdW5zaWduZWQgaW50IGNyYyA9IHF1ZXN0aW9uc19jcmMoaGVhZGVyLCBwbGVuLCBkYWVtb24tPm5hbWVidWZmKTsKKyAgdW5zaWduZWQgc2hvcnQgZmxhZ3MgPSAwOworICB1bnNpZ25lZCBzaG9ydCBnb3RuYW1lID0gZXh0cmFjdF9yZXF1ZXN0KGhlYWRlciwgcGxlbiwgZGFlbW9uLT5uYW1lYnVmZiwgTlVMTCk7CisgIHN0cnVjdCBzZXJ2ZXIgKnN0YXJ0ID0gTlVMTDsKKyAgICAKKyAgLyogbWF5IGJlIG5vIHNlcnZlcnMgYXZhaWxhYmxlLiAqLworICBpZiAoIWRhZW1vbi0+c2VydmVycykKKyAgICBmb3J3YXJkID0gTlVMTDsKKyAgZWxzZSBpZiAoZm9yd2FyZCB8fCAoZm9yd2FyZCA9IGxvb2t1cF9mcmVjX2J5X3NlbmRlcihudG9ocyhoZWFkZXItPmlkKSwgdWRwYWRkciwgY3JjKSkpCisgICAgeworICAgICAgLyogcmV0cnkgb24gZXhpc3RpbmcgcXVlcnksIHNlbmQgdG8gYWxsIGF2YWlsYWJsZSBzZXJ2ZXJzICAqLworICAgICAgZG9tYWluID0gZm9yd2FyZC0+c2VudHRvLT5kb21haW47CisgICAgICBmb3J3YXJkLT5zZW50dG8tPmZhaWxlZF9xdWVyaWVzKys7CisgICAgICBpZiAoIShkYWVtb24tPm9wdGlvbnMgJiBPUFRfT1JERVIpKQorCXsKKwkgIGZvcndhcmQtPmZvcndhcmRhbGwgPSAxOworCSAgZGFlbW9uLT5sYXN0X3NlcnZlciA9IE5VTEw7CisJfQorICAgICAgdHlwZSA9IGZvcndhcmQtPnNlbnR0by0+ZmxhZ3MgJiBTRVJWX1RZUEU7CisgICAgICBpZiAoIShzdGFydCA9IGZvcndhcmQtPnNlbnR0by0+bmV4dCkpCisJc3RhcnQgPSBkYWVtb24tPnNlcnZlcnM7IC8qIGF0IGVuZCBvZiBsaXN0LCByZWN5Y2xlICovCisgICAgICBoZWFkZXItPmlkID0gaHRvbnMoZm9yd2FyZC0+bmV3X2lkKTsKKyAgICB9CisgIGVsc2UgCisgICAgeworICAgICAgaWYgKGdvdG5hbWUpCisJZmxhZ3MgPSBzZWFyY2hfc2VydmVycyhub3csICZhZGRycCwgZ290bmFtZSwgZGFlbW9uLT5uYW1lYnVmZiwgJnR5cGUsICZkb21haW4pOworICAgICAgCisgICAgICBpZiAoIWZsYWdzICYmICEoZm9yd2FyZCA9IGdldF9uZXdfZnJlYyhub3csIE5VTEwpKSkKKwkvKiB0YWJsZSBmdWxsIC0gc2VydmVyIGZhaWx1cmUuICovCisJZmxhZ3MgPSBGX05FRzsKKyAgICAgIAorICAgICAgaWYgKGZvcndhcmQpCisJeworCSAgLyogZm9yY2UgdW5jaGFuZ2luZyBpZCBmb3Igc2lnbmVkIHBhY2tldHMgKi8KKwkgIGludCBpc19zaWduOworCSAgZmluZF9wc2V1ZG9oZWFkZXIoaGVhZGVyLCBwbGVuLCBOVUxMLCBOVUxMLCAmaXNfc2lnbik7CisJICAKKwkgIGZvcndhcmQtPnNvdXJjZSA9ICp1ZHBhZGRyOworCSAgZm9yd2FyZC0+ZGVzdCA9ICpkc3RfYWRkcjsKKwkgIGZvcndhcmQtPmlmYWNlID0gZHN0X2lmYWNlOworCSAgZm9yd2FyZC0+b3JpZ19pZCA9IG50b2hzKGhlYWRlci0+aWQpOworCSAgZm9yd2FyZC0+bmV3X2lkID0gZ2V0X2lkKGlzX3NpZ24sIGZvcndhcmQtPm9yaWdfaWQsIGNyYyk7CisJICBmb3J3YXJkLT5mZCA9IHVkcGZkOworCSAgZm9yd2FyZC0+Y3JjID0gY3JjOworCSAgZm9yd2FyZC0+Zm9yd2FyZGFsbCA9IDA7CisJICBoZWFkZXItPmlkID0gaHRvbnMoZm9yd2FyZC0+bmV3X2lkKTsKKworCSAgLyogSW4gc3RyaWN0X29yZGVyIG1vZGUsIG9yIHdoZW4gdXNpbmcgZG9tYWluIHNwZWNpZmljIHNlcnZlcnMKKwkgICAgIGFsd2F5cyB0cnkgc2VydmVycyBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIGluIHJlc29sdi5jb25mLAorCSAgICAgb3RoZXJ3aXNlLCB1c2UgdGhlIG9uZSBsYXN0IGtub3duIHRvIHdvcmsuICovCisJICAKKwkgIGlmICh0eXBlICE9IDAgIHx8IChkYWVtb24tPm9wdGlvbnMgJiBPUFRfT1JERVIpKQorCSAgICBzdGFydCA9IGRhZW1vbi0+c2VydmVyczsKKwkgIGVsc2UgaWYgKCEoc3RhcnQgPSBkYWVtb24tPmxhc3Rfc2VydmVyKSB8fAorCQkgICBkYWVtb24tPmZvcndhcmRjb3VudCsrID4gRk9SV0FSRF9URVNUIHx8CisJCSAgIGRpZmZ0aW1lKG5vdywgZGFlbW9uLT5mb3J3YXJkdGltZSkgPiBGT1JXQVJEX1RJTUUpCisJICAgIHsKKwkgICAgICBzdGFydCA9IGRhZW1vbi0+c2VydmVyczsKKwkgICAgICBmb3J3YXJkLT5mb3J3YXJkYWxsID0gMTsKKwkgICAgICBkYWVtb24tPmZvcndhcmRjb3VudCA9IDA7CisJICAgICAgZGFlbW9uLT5mb3J3YXJkdGltZSA9IG5vdzsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgLyogY2hlY2sgZm9yIHNlbmQgZXJyb3JzIGhlcmUgKG5vIHJvdXRlIHRvIGhvc3QpIAorICAgICBpZiB3ZSBmYWlsIHRvIHNlbmQgdG8gYWxsIG5hbWVzZXJ2ZXJzLCBzZW5kIGJhY2sgYW4gZXJyb3IKKyAgICAgcGFja2V0IHN0cmFpZ2h0IGF3YXkgKGhlbHBzIG1vZGVtIHVzZXJzIHdoZW4gb2ZmbGluZSkgICovCisgIAorICBpZiAoIWZsYWdzICYmIGZvcndhcmQpCisgICAgeworICAgICAgc3RydWN0IHNlcnZlciAqZmlyc3RzZW50dG8gPSBzdGFydDsKKyAgICAgIGludCBmb3J3YXJkZWQgPSAwOworCisgICAgICB3aGlsZSAoMSkKKwl7IAorCSAgLyogb25seSBzZW5kIHRvIHNlcnZlcnMgZGVhbGluZyB3aXRoIG91ciBkb21haW4uCisJICAgICBkb21haW4gbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugc2VydmVyLT5kb21haW4gCisJICAgICBtdXN0IGJlIE5VTEwgYWxzby4gKi8KKwkgIAorCSAgaWYgKHR5cGUgPT0gKHN0YXJ0LT5mbGFncyAmIFNFUlZfVFlQRSkgJiYKKwkgICAgICAodHlwZSAhPSBTRVJWX0hBU19ET01BSU4gfHwgaG9zdG5hbWVfaXNlcXVhbChkb21haW4sIHN0YXJ0LT5kb21haW4pKSAmJgorCSAgICAgICEoc3RhcnQtPmZsYWdzICYgU0VSVl9MSVRFUkFMX0FERFJFU1MpKQorCSAgICB7CisJICAgICAgaW50IGZkOworCisJICAgICAgLyogZmluZCBzZXJ2ZXIgc29ja2V0IHRvIHVzZSwgbWF5IG5lZWQgdG8gZ2V0IHJhbmRvbSBvbmUuICovCisJICAgICAgaWYgKHN0YXJ0LT5zZmQpCisJCWZkID0gc3RhcnQtPnNmZC0+ZmQ7CisJICAgICAgZWxzZSAKKwkJeworI2lmZGVmIEhBVkVfSVBWNgorCQkgIGlmIChzdGFydC0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisJCSAgICB7CisJCSAgICAgIGlmICghZm9yd2FyZC0+cmZkNiAmJgorCQkJICAhKGZvcndhcmQtPnJmZDYgPSBhbGxvY2F0ZV9yZmQoQUZfSU5FVDYpKSkKKwkJCWJyZWFrOworCQkgICAgICBkYWVtb24tPnJmZF9zYXZlID0gZm9yd2FyZC0+cmZkNjsKKwkJICAgICAgZmQgPSBmb3J3YXJkLT5yZmQ2LT5mZDsKKwkJICAgIH0KKwkJICBlbHNlCisjZW5kaWYKKwkJICAgIHsKKwkJICAgICAgaWYgKCFmb3J3YXJkLT5yZmQ0ICYmCisJCQkgICEoZm9yd2FyZC0+cmZkNCA9IGFsbG9jYXRlX3JmZChBRl9JTkVUKSkpCisJCQlicmVhazsKKwkJICAgICAgZGFlbW9uLT5yZmRfc2F2ZSA9IGZvcndhcmQtPnJmZDQ7CisJCSAgICAgIGZkID0gZm9yd2FyZC0+cmZkNC0+ZmQ7CisJCSAgICB9CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAoc2VuZHRvKGZkLCAoY2hhciAqKWhlYWRlciwgcGxlbiwgMCwKKwkJCSAmc3RhcnQtPmFkZHIuc2EsCisJCQkgc2FfbGVuKCZzdGFydC0+YWRkcikpID09IC0xKQorCQl7CisJCSAgaWYgKHJldHJ5X3NlbmQoKSkKKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgLyogS2VlcCBpbmZvIGluIGNhc2Ugd2Ugd2FudCB0byByZS1zZW5kIHRoaXMgcGFja2V0ICovCisJCSAgZGFlbW9uLT5zcnZfc2F2ZSA9IHN0YXJ0OworCQkgIGRhZW1vbi0+cGFja2V0X2xlbiA9IHBsZW47CisJCSAgCisJCSAgaWYgKCFnb3RuYW1lKQorCQkgICAgc3RyY3B5KGRhZW1vbi0+bmFtZWJ1ZmYsICJxdWVyeSIpOworCQkgIGlmIChzdGFydC0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKwkJICAgIGxvZ19xdWVyeShGX1NFUlZFUiB8IEZfSVBWNCB8IEZfRk9SV0FSRCwgZGFlbW9uLT5uYW1lYnVmZiwgCisJCQkgICAgICAoc3RydWN0IGFsbF9hZGRyICopJnN0YXJ0LT5hZGRyLmluLnNpbl9hZGRyLCBOVUxMKTsgCisjaWZkZWYgSEFWRV9JUFY2CisJCSAgZWxzZQorCQkgICAgbG9nX3F1ZXJ5KEZfU0VSVkVSIHwgRl9JUFY2IHwgRl9GT1JXQVJELCBkYWVtb24tPm5hbWVidWZmLCAKKwkJCSAgICAgIChzdHJ1Y3QgYWxsX2FkZHIgKikmc3RhcnQtPmFkZHIuaW42LnNpbjZfYWRkciwgTlVMTCk7CisjZW5kaWYgCisJCSAgc3RhcnQtPnF1ZXJpZXMrKzsKKwkJICBmb3J3YXJkZWQgPSAxOworCQkgIGZvcndhcmQtPnNlbnR0byA9IHN0YXJ0OworCQkgIGlmICghZm9yd2FyZC0+Zm9yd2FyZGFsbCkgCisJCSAgICBicmVhazsKKwkJICBmb3J3YXJkLT5mb3J3YXJkYWxsKys7CisJCX0KKwkgICAgfSAKKwkgIAorCSAgaWYgKCEoc3RhcnQgPSBzdGFydC0+bmV4dCkpCisgCSAgICBzdGFydCA9IGRhZW1vbi0+c2VydmVyczsKKwkgIAorCSAgaWYgKHN0YXJ0ID09IGZpcnN0c2VudHRvKQorCSAgICBicmVhazsKKwl9CisgICAgICAKKyAgICAgIGlmIChmb3J3YXJkZWQpCisJcmV0dXJuIDE7CisgICAgICAKKyAgICAgIC8qIGNvdWxkIG5vdCBzZW5kIG9uLCBwcmVwYXJlIHRvIHJldHVybiAqLyAKKyAgICAgIGhlYWRlci0+aWQgPSBodG9ucyhmb3J3YXJkLT5vcmlnX2lkKTsKKyAgICAgIGZyZWVfZnJlYyhmb3J3YXJkKTsgLyogY2FuY2VsICovCisgICAgfQkgIAorICAKKyAgLyogY291bGQgbm90IHNlbmQgb24sIHJldHVybiBlbXB0eSBhbnN3ZXIgb3IgYWRkcmVzcyBpZiBrbm93biBmb3Igd2hvbGUgZG9tYWluICovCisgIGlmICh1ZHBmZCAhPSAtMSkKKyAgICB7CisgICAgICBwbGVuID0gc2V0dXBfcmVwbHkoaGVhZGVyLCBwbGVuLCBhZGRycCwgZmxhZ3MsIGRhZW1vbi0+bG9jYWxfdHRsKTsKKyAgICAgIHNlbmRfZnJvbSh1ZHBmZCwgZGFlbW9uLT5vcHRpb25zICYgT1BUX05PV0lMRCwgKGNoYXIgKiloZWFkZXIsIHBsZW4sIHVkcGFkZHIsIGRzdF9hZGRyLCBkc3RfaWZhY2UpOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHNpemVfdCBwcm9jZXNzX3JlcGx5KEhFQURFUiAqaGVhZGVyLCB0aW1lX3Qgbm93LCAKKwkJCSAgICBzdHJ1Y3Qgc2VydmVyICpzZXJ2ZXIsIHNpemVfdCBuKQoreworICB1bnNpZ25lZCBjaGFyICpwaGVhZGVyLCAqc2l6ZXA7CisgIGludCBtdW5nZWQgPSAwLCBpc19zaWduOworICBzaXplX3QgcGxlbjsgCisKKyAgLyogSWYgdXBzdHJlYW0gaXMgYWR2ZXJ0aXNpbmcgYSBsYXJnZXIgVURQIHBhY2tldCBzaXplCisgICAgIHRoYW4gd2UgYWxsb3csIHRyaW0gaXQgc28gdGhhdCB3ZSBkb24ndCBnZXQgb3ZlcmxhcmdlCisgICAgIHJlcXVlc3RzIGZvciB0aGUgY2xpZW50LiBXZSBjYW4ndCBkbyB0aGlzIGZvciBzaWduZWQgcGFja2V0cy4gKi8KKworICBpZiAoKHBoZWFkZXIgPSBmaW5kX3BzZXVkb2hlYWRlcihoZWFkZXIsIG4sICZwbGVuLCAmc2l6ZXAsICZpc19zaWduKSkgJiYgIWlzX3NpZ24pCisgICAgeworICAgICAgdW5zaWduZWQgc2hvcnQgdWRwc3o7CisgICAgICB1bnNpZ25lZCBjaGFyICpwc2F2ZSA9IHNpemVwOworICAgICAgCisgICAgICBHRVRTSE9SVCh1ZHBzeiwgc2l6ZXApOworICAgICAgaWYgKHVkcHN6ID4gZGFlbW9uLT5lZG5zX3BrdHN6KQorCVBVVFNIT1JUKGRhZW1vbi0+ZWRuc19wa3RzeiwgcHNhdmUpOworICAgIH0KKworICBpZiAoaGVhZGVyLT5vcGNvZGUgIT0gUVVFUlkgfHwgKGhlYWRlci0+cmNvZGUgIT0gTk9FUlJPUiAmJiBoZWFkZXItPnJjb2RlICE9IE5YRE9NQUlOKSkKKyAgICByZXR1cm4gbjsKKyAgCisgIC8qIENvbXBsYWluIGxvdWRseSBpZiB0aGUgdXBzdHJlYW0gc2VydmVyIGlzIG5vbi1yZWN1cnNpdmUuICovCisgIGlmICghaGVhZGVyLT5yYSAmJiBoZWFkZXItPnJjb2RlID09IE5PRVJST1IgJiYgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSA9PSAwICYmCisgICAgICBzZXJ2ZXIgJiYgIShzZXJ2ZXItPmZsYWdzICYgU0VSVl9XQVJORURfUkVDVVJTSVZFKSkKKyAgICB7CisgICAgICBwcmV0dHlwcmludF9hZGRyKCZzZXJ2ZXItPmFkZHIsIGRhZW1vbi0+bmFtZWJ1ZmYpOworICAgICAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiKSwgZGFlbW9uLT5uYW1lYnVmZik7CisgICAgICBpZiAoIShkYWVtb24tPm9wdGlvbnMgJiBPUFRfTE9HKSkKKwlzZXJ2ZXItPmZsYWdzIHw9IFNFUlZfV0FSTkVEX1JFQ1VSU0lWRTsKKyAgICB9ICAKKyAgICAKKyAgaWYgKGRhZW1vbi0+Ym9ndXNfYWRkciAmJiBoZWFkZXItPnJjb2RlICE9IE5YRE9NQUlOICYmCisgICAgICBjaGVja19mb3JfYm9ndXNfd2lsZGNhcmQoaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmLCBkYWVtb24tPmJvZ3VzX2FkZHIsIG5vdykpCisgICAgeworICAgICAgbXVuZ2VkID0gMTsKKyAgICAgIGhlYWRlci0+cmNvZGUgPSBOWERPTUFJTjsKKyAgICAgIGhlYWRlci0+YWEgPSAwOworICAgIH0KKyAgZWxzZSAKKyAgICB7CisgICAgICBpZiAoaGVhZGVyLT5yY29kZSA9PSBOWERPTUFJTiAmJiAKKwkgIGV4dHJhY3RfcmVxdWVzdChoZWFkZXIsIG4sIGRhZW1vbi0+bmFtZWJ1ZmYsIE5VTEwpICYmCisJICBjaGVja19mb3JfbG9jYWxfZG9tYWluKGRhZW1vbi0+bmFtZWJ1ZmYsIG5vdykpCisJeworCSAgLyogaWYgd2UgZm9yd2FyZGVkIGEgcXVlcnkgZm9yIGEgbG9jYWxseSBrbm93biBuYW1lIChiZWNhdXNlIGl0IHdhcyBmb3IgCisJICAgICBhbiB1bmtub3duIHR5cGUpIGFuZCB0aGUgYW5zd2VyIGlzIE5YRE9NQUlOLCBjb252ZXJ0IHRoYXQgdG8gTk9EQVRBLAorCSAgICAgc2luY2Ugd2Uga25vdyB0aGF0IHRoZSBkb21haW4gZXhpc3RzLCBldmVuIGlmIHVwc3RyZWFtIGRvZXNuJ3QgKi8KKwkgIG11bmdlZCA9IDE7CisJICBoZWFkZXItPmFhID0gMTsKKwkgIGhlYWRlci0+cmNvZGUgPSBOT0VSUk9SOworCX0KKyAgICAgIAorICAgICAgaWYgKGV4dHJhY3RfYWRkcmVzc2VzKGhlYWRlciwgbiwgZGFlbW9uLT5uYW1lYnVmZiwgbm93KSkKKwl7CisJICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oInBvc3NpYmxlIEROUy1yZWJpbmQgYXR0YWNrIGRldGVjdGVkIikpOworCSAgbXVuZ2VkID0gMTsKKwl9CisgICAgfQorICAKKyAgLyogZG8gdGhpcyBhZnRlciBleHRyYWN0X2FkZHJlc3Nlcy4gRW5zdXJlIE5PREFUQSByZXBseSBhbmQgcmVtb3ZlCisgICAgIG5hbWVzZXJ2ZXIgaW5mby4gKi8KKyAgCisgIGlmIChtdW5nZWQpCisgICAgeworICAgICAgaGVhZGVyLT5hbmNvdW50ID0gaHRvbnMoMCk7CisgICAgICBoZWFkZXItPm5zY291bnQgPSBodG9ucygwKTsKKyAgICAgIGhlYWRlci0+YXJjb3VudCA9IGh0b25zKDApOworICAgIH0KKyAgCisgIC8qIHRoZSBib2d1cy1ueGRvbWFpbiBzdHVmZiwgZG9jdG9yIGFuZCBOWERPTUFJTi0+Tk9EQVRBIG11bmdpbmcgY2FuIGFsbCBlbGlkZQorICAgICBzZWN0aW9ucyBvZiB0aGUgcGFja2V0LiBGaW5kIHRoZSBuZXcgbGVuZ3RoIGhlcmUgYW5kIHB1dCBiYWNrIHBzZXVkb2hlYWRlcgorICAgICBpZiBpdCB3YXMgcmVtb3ZlZC4gKi8KKyAgcmV0dXJuIHJlc2l6ZV9wYWNrZXQoaGVhZGVyLCBuLCBwaGVhZGVyLCBwbGVuKTsKK30KKworLyogc2V0cyBuZXcgbGFzdF9zZXJ2ZXIgKi8KK3ZvaWQgcmVwbHlfcXVlcnkoaW50IGZkLCBpbnQgZmFtaWx5LCB0aW1lX3Qgbm93KQoreworICAvKiBwYWNrZXQgZnJvbSBwZWVyIHNlcnZlciwgZXh0cmFjdCBkYXRhIGZvciBjYWNoZSwgYW5kIHNlbmQgdG8KKyAgICAgb3JpZ2luYWwgcmVxdWVzdGVyICovCisgIEhFQURFUiAqaGVhZGVyOworICB1bmlvbiBteXNvY2thZGRyIHNlcnZlcmFkZHI7CisgIHN0cnVjdCBmcmVjICpmb3J3YXJkOworICBzb2NrbGVuX3QgYWRkcmxlbiA9IHNpemVvZihzZXJ2ZXJhZGRyKTsKKyAgc3NpemVfdCBuID0gcmVjdmZyb20oZmQsIGRhZW1vbi0+cGFja2V0LCBkYWVtb24tPmVkbnNfcGt0c3osIDAsICZzZXJ2ZXJhZGRyLnNhLCAmYWRkcmxlbik7CisgIHNpemVfdCBubjsKKyAgc3RydWN0IHNlcnZlciAqc2VydmVyOworICAKKyAgLyogcGFja2V0IGJ1ZmZlciBvdmVyd3JpdHRlbiAqLworICBkYWVtb24tPnNydl9zYXZlID0gTlVMTDsKKyAgCisgIC8qIERldGVybWluZSB0aGUgYWRkcmVzcyBvZiB0aGUgc2VydmVyIHJlcGx5aW5nICBzbyB0aGF0IHdlIGNhbiBtYXJrIHRoYXQgYXMgZ29vZCAqLworICBzZXJ2ZXJhZGRyLnNhLnNhX2ZhbWlseSA9IGZhbWlseTsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgaWYgKHNlcnZlcmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorICAgIHNlcnZlcmFkZHIuaW42LnNpbjZfZmxvd2luZm8gPSAwOworI2VuZGlmCisgIAorICAvKiBzcG9vZiBjaGVjazogYW5zd2VyIG11c3QgY29tZSBmcm9tIGtub3duIHNlcnZlciwgKi8KKyAgZm9yIChzZXJ2ZXIgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnZlcjsgc2VydmVyID0gc2VydmVyLT5uZXh0KQorICAgIGlmICghKHNlcnZlci0+ZmxhZ3MgJiAoU0VSVl9MSVRFUkFMX0FERFJFU1MgfCBTRVJWX05PX0FERFIpKSAmJgorCXNvY2thZGRyX2lzZXF1YWwoJnNlcnZlci0+YWRkciwgJnNlcnZlcmFkZHIpKQorICAgICAgYnJlYWs7CisgICAKKyAgaGVhZGVyID0gKEhFQURFUiAqKWRhZW1vbi0+cGFja2V0OworICAKKyAgaWYgKCFzZXJ2ZXIgfHwKKyAgICAgIG4gPCAoaW50KXNpemVvZihIRUFERVIpIHx8ICFoZWFkZXItPnFyIHx8CisgICAgICAhKGZvcndhcmQgPSBsb29rdXBfZnJlYyhudG9ocyhoZWFkZXItPmlkKSwgcXVlc3Rpb25zX2NyYyhoZWFkZXIsIG4sIGRhZW1vbi0+bmFtZWJ1ZmYpKSkpCisgICAgcmV0dXJuOworICAgCisgIHNlcnZlciA9IGZvcndhcmQtPnNlbnR0bzsKKyAgCisgIGlmICgoaGVhZGVyLT5yY29kZSA9PSBTRVJWRkFJTCB8fCBoZWFkZXItPnJjb2RlID09IFJFRlVTRUQpICYmCisgICAgICAhKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9PUkRFUikgJiYKKyAgICAgIGZvcndhcmQtPmZvcndhcmRhbGwgPT0gMCkKKyAgICAvKiBmb3IgYnJva2VuIHNlcnZlcnMsIGF0dGVtcHQgdG8gc2VuZCB0byBhbm90aGVyIG9uZS4gKi8KKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICpwaGVhZGVyOworICAgICAgc2l6ZV90IHBsZW47CisgICAgICBpbnQgaXNfc2lnbjsKKyAgICAgIAorICAgICAgLyogcmVjcmVhdGUgcXVlcnkgZnJvbSByZXBseSAqLworICAgICAgcGhlYWRlciA9IGZpbmRfcHNldWRvaGVhZGVyKGhlYWRlciwgKHNpemVfdCluLCAmcGxlbiwgTlVMTCwgJmlzX3NpZ24pOworICAgICAgaWYgKCFpc19zaWduKQorCXsKKwkgIGhlYWRlci0+YW5jb3VudCA9IGh0b25zKDApOworCSAgaGVhZGVyLT5uc2NvdW50ID0gaHRvbnMoMCk7CisJICBoZWFkZXItPmFyY291bnQgPSBodG9ucygwKTsKKwkgIGlmICgobm4gPSByZXNpemVfcGFja2V0KGhlYWRlciwgKHNpemVfdCluLCBwaGVhZGVyLCBwbGVuKSkpCisJICAgIHsKKwkgICAgICBoZWFkZXItPnFyID0gMDsKKwkgICAgICBoZWFkZXItPnRjID0gMDsKKwkgICAgICBmb3J3YXJkX3F1ZXJ5KC0xLCBOVUxMLCBOVUxMLCAwLCBoZWFkZXIsIG5uLCBub3csIGZvcndhcmQpOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCX0KKyAgICB9ICAgCisgIAorICBpZiAoKGZvcndhcmQtPnNlbnR0by0+ZmxhZ3MgJiBTRVJWX1RZUEUpID09IDApCisgICAgeworICAgICAgaWYgKGhlYWRlci0+cmNvZGUgPT0gU0VSVkZBSUwgfHwgaGVhZGVyLT5yY29kZSA9PSBSRUZVU0VEKQorCXNlcnZlciA9IE5VTEw7CisgICAgICBlbHNlCisJeworCSAgc3RydWN0IHNlcnZlciAqbGFzdF9zZXJ2ZXI7CisJICAKKwkgIC8qIGZpbmQgZ29vZCBzZXJ2ZXIgYnkgYWRkcmVzcyBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGFzc3VtZSB0aGUgbGFzdCBvbmUgd2Ugc2VudCB0byAqLyAKKwkgIGZvciAobGFzdF9zZXJ2ZXIgPSBkYWVtb24tPnNlcnZlcnM7IGxhc3Rfc2VydmVyOyBsYXN0X3NlcnZlciA9IGxhc3Rfc2VydmVyLT5uZXh0KQorCSAgICBpZiAoIShsYXN0X3NlcnZlci0+ZmxhZ3MgJiAoU0VSVl9MSVRFUkFMX0FERFJFU1MgfCBTRVJWX0hBU19ET01BSU4gfCBTRVJWX0ZPUl9OT0RPVFMgfCBTRVJWX05PX0FERFIpKSAmJgorCQlzb2NrYWRkcl9pc2VxdWFsKCZsYXN0X3NlcnZlci0+YWRkciwgJnNlcnZlcmFkZHIpKQorCSAgICAgIHsKKwkJc2VydmVyID0gbGFzdF9zZXJ2ZXI7CisJCWJyZWFrOworCSAgICAgIH0KKwl9IAorICAgICAgaWYgKCEoZGFlbW9uLT5vcHRpb25zICYgT1BUX0FMTF9TRVJWRVJTKSkKKwlkYWVtb24tPmxhc3Rfc2VydmVyID0gc2VydmVyOworICAgIH0KKyAgCisgIC8qIElmIHRoZSBhbnN3ZXIgaXMgYW4gZXJyb3IsIGtlZXAgdGhlIGZvcndhcmQgcmVjb3JkIGluIHBsYWNlIGluIGNhc2UKKyAgICAgd2UgZ2V0IGEgZ29vZCByZXBseSBmcm9tIGFub3RoZXIgc2VydmVyLiBLaWxsIGl0IHdoZW4gd2UndmUKKyAgICAgaGFkIHJlcGxpZXMgZnJvbSBhbGwgdG8gYXZvaWQgZmlsbGluZyB0aGUgZm9yd2FyZGluZyB0YWJsZSB3aGVuCisgICAgIGV2ZXJ5dGhpbmcgaXMgYnJva2VuICovCisgIGlmIChmb3J3YXJkLT5mb3J3YXJkYWxsID09IDAgfHwgLS1mb3J3YXJkLT5mb3J3YXJkYWxsID09IDEgfHwgCisgICAgICAoaGVhZGVyLT5yY29kZSAhPSBSRUZVU0VEICYmIGhlYWRlci0+cmNvZGUgIT0gU0VSVkZBSUwpKQorICAgIHsKKyAgICAgIGlmICgobm4gPSBwcm9jZXNzX3JlcGx5KGhlYWRlciwgbm93LCBzZXJ2ZXIsIChzaXplX3QpbikpKQorCXsKKwkgIGhlYWRlci0+aWQgPSBodG9ucyhmb3J3YXJkLT5vcmlnX2lkKTsKKwkgIGhlYWRlci0+cmEgPSAxOyAvKiByZWN1cnNpb24gaWYgYXZhaWxhYmxlICovCisJICBzZW5kX2Zyb20oZm9yd2FyZC0+ZmQsIGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT1dJTEQsIGRhZW1vbi0+cGFja2V0LCBubiwgCisJCSAgICAmZm9yd2FyZC0+c291cmNlLCAmZm9yd2FyZC0+ZGVzdCwgZm9yd2FyZC0+aWZhY2UpOworCX0KKyAgICAgIGZyZWVfZnJlYyhmb3J3YXJkKTsgLyogY2FuY2VsICovCisgICAgfQorfQorCisKK3ZvaWQgcmVjZWl2ZV9xdWVyeShzdHJ1Y3QgbGlzdGVuZXIgKmxpc3RlbiwgdGltZV90IG5vdykKK3sKKyAgSEVBREVSICpoZWFkZXIgPSAoSEVBREVSICopZGFlbW9uLT5wYWNrZXQ7CisgIHVuaW9uIG15c29ja2FkZHIgc291cmNlX2FkZHI7CisgIHVuc2lnbmVkIHNob3J0IHR5cGU7CisgIHN0cnVjdCBhbGxfYWRkciBkc3RfYWRkcjsKKyAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgZHN0X2FkZHJfNDsKKyAgc2l6ZV90IG07CisgIHNzaXplX3QgbjsKKyAgaW50IGlmX2luZGV4ID0gMDsKKyAgc3RydWN0IGlvdmVjIGlvdlsxXTsKKyAgc3RydWN0IG1zZ2hkciBtc2c7CisgIHN0cnVjdCBjbXNnaGRyICpjbXB0cjsKKyAgdW5pb24geworICAgIHN0cnVjdCBjbXNnaGRyIGFsaWduOyAvKiB0aGlzIGVuc3VyZXMgYWxpZ25tZW50ICovCisjaWZkZWYgSEFWRV9JUFY2CisgICAgY2hhciBjb250cm9sNltDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW42X3BrdGluZm8pKV07CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluX3BrdGluZm8pKV07CisjZWxpZiBkZWZpbmVkKElQX1JFQ1ZEU1RBRERSKSAmJiBkZWZpbmVkKEhBVkVfU09MQVJJU19ORVRXT1JLKQorICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpICsKKwkJIENNU0dfU1BBQ0Uoc2l6ZW9mKHVuc2lnbmVkIGludCkpXTsKKyNlbGlmIGRlZmluZWQoSVBfUkVDVkRTVEFERFIpCisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgKworCQkgQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNvY2thZGRyX2RsKSldOworI2VuZGlmCisgIH0gY29udHJvbF91OworICAKKyAgLyogcGFja2V0IGJ1ZmZlciBvdmVyd3JpdHRlbiAqLworICBkYWVtb24tPnNydl9zYXZlID0gTlVMTDsKKyAgCisgIGlmIChsaXN0ZW4tPmZhbWlseSA9PSBBRl9JTkVUICYmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTk9XSUxEKSkKKyAgICB7CisgICAgICBkc3RfYWRkcl80ID0gbGlzdGVuLT5pZmFjZS0+YWRkci5pbi5zaW5fYWRkcjsKKyAgICAgIG5ldG1hc2sgPSBsaXN0ZW4tPmlmYWNlLT5uZXRtYXNrOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGRzdF9hZGRyXzQuc19hZGRyID0gMDsKKyAgICAgIG5ldG1hc2suc19hZGRyID0gMDsKKyAgICB9CisKKyAgaW92WzBdLmlvdl9iYXNlID0gZGFlbW9uLT5wYWNrZXQ7CisgIGlvdlswXS5pb3ZfbGVuID0gZGFlbW9uLT5lZG5zX3BrdHN6OworICAgIAorICBtc2cubXNnX2NvbnRyb2wgPSBjb250cm9sX3UuY29udHJvbDsKKyAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2xfdSk7CisgIG1zZy5tc2dfZmxhZ3MgPSAwOworICBtc2cubXNnX25hbWUgPSAmc291cmNlX2FkZHI7CisgIG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihzb3VyY2VfYWRkcik7CisgIG1zZy5tc2dfaW92ID0gaW92OworICBtc2cubXNnX2lvdmxlbiA9IDE7CisgIAorICBpZiAoKG4gPSByZWN2bXNnKGxpc3Rlbi0+ZmQsICZtc2csIDApKSA9PSAtMSkKKyAgICByZXR1cm47CisgIAorICBpZiAobiA8IChpbnQpc2l6ZW9mKEhFQURFUikgfHwgCisgICAgICAobXNnLm1zZ19mbGFncyAmIE1TR19UUlVOQykgfHwKKyAgICAgIGhlYWRlci0+cXIpCisgICAgcmV0dXJuOworICAKKyAgc291cmNlX2FkZHIuc2Euc2FfZmFtaWx5ID0gbGlzdGVuLT5mYW1pbHk7CisjaWZkZWYgSEFWRV9JUFY2CisgIGlmIChsaXN0ZW4tPmZhbWlseSA9PSBBRl9JTkVUNikKKyAgICBzb3VyY2VfYWRkci5pbjYuc2luNl9mbG93aW5mbyA9IDA7CisjZW5kaWYKKyAgCisgIGlmICghKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT1dJTEQpKQorICAgIHsKKyAgICAgIHN0cnVjdCBpZnJlcSBpZnI7CisKKyAgICAgIGlmIChtc2cubXNnX2NvbnRyb2xsZW4gPCBzaXplb2Yoc3RydWN0IGNtc2doZHIpKQorCXJldHVybjsKKworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorICAgICAgaWYgKGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQpCisJZm9yIChjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtcHRyOyBjbXB0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtcHRyKSkKKwkgIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBTT0xfSVAgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBJUF9QS1RJTkZPKQorCSAgICB7CisJICAgICAgZHN0X2FkZHJfNCA9IGRzdF9hZGRyLmFkZHIuYWRkcjQgPSAoKHN0cnVjdCBpbl9wa3RpbmZvICopQ01TR19EQVRBKGNtcHRyKSktPmlwaV9zcGVjX2RzdDsKKwkgICAgICBpZl9pbmRleCA9ICgoc3RydWN0IGluX3BrdGluZm8gKilDTVNHX0RBVEEoY21wdHIpKS0+aXBpX2lmaW5kZXg7CisJICAgIH0KKyNlbGlmIGRlZmluZWQoSVBfUkVDVkRTVEFERFIpICYmIGRlZmluZWQoSVBfUkVDVklGKQorICAgICAgaWYgKGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQpCisJeworCSAgZm9yIChjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtcHRyOyBjbXB0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtcHRyKSkKKwkgICAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBJUF9SRUNWRFNUQUREUikKKwkgICAgICBkc3RfYWRkcl80ID0gZHN0X2FkZHIuYWRkci5hZGRyNCA9ICooKHN0cnVjdCBpbl9hZGRyICopQ01TR19EQVRBKGNtcHRyKSk7CisJICAgIGVsc2UgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBJUF9SRUNWSUYpCisjaWZkZWYgSEFWRV9TT0xBUklTX05FVFdPUksKKwkgICAgICBpZl9pbmRleCA9ICooKHVuc2lnbmVkIGludCAqKUNNU0dfREFUQShjbXB0cikpOworI2Vsc2UKKwkgICAgICBpZl9pbmRleCA9ICgoc3RydWN0IHNvY2thZGRyX2RsICopQ01TR19EQVRBKGNtcHRyKSktPnNkbF9pbmRleDsKKyNlbmRpZgorCX0KKyNlbmRpZgorICAgICAgCisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVDYpCisJeworCSAgZm9yIChjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtcHRyOyBjbXB0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtcHRyKSkKKwkgICAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQVjZfTEVWRUwgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBJUFY2X1BLVElORk8pCisJICAgICAgeworCQlkc3RfYWRkci5hZGRyLmFkZHI2ID0gKChzdHJ1Y3QgaW42X3BrdGluZm8gKilDTVNHX0RBVEEoY21wdHIpKS0+aXBpNl9hZGRyOworCQlpZl9pbmRleCA9KChzdHJ1Y3QgaW42X3BrdGluZm8gKilDTVNHX0RBVEEoY21wdHIpKS0+aXBpNl9pZmluZGV4OworCSAgICAgIH0KKwl9CisjZW5kaWYKKyAgICAgIAorICAgICAgLyogZW5mb3JjZSBhdmFpbGFibGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgIAorICAgICAgaWYgKCFpbmRleHRvbmFtZShsaXN0ZW4tPmZkLCBpZl9pbmRleCwgaWZyLmlmcl9uYW1lKSB8fAorCSAgIWlmYWNlX2NoZWNrKGxpc3Rlbi0+ZmFtaWx5LCAmZHN0X2FkZHIsIGlmci5pZnJfbmFtZSwgJmlmX2luZGV4KSkKKwlyZXR1cm47CisgICAgICAKKyAgICAgIGlmIChsaXN0ZW4tPmZhbWlseSA9PSBBRl9JTkVUICYmCisJICAoZGFlbW9uLT5vcHRpb25zICYgT1BUX0xPQ0FMSVNFKSAmJgorCSAgaW9jdGwobGlzdGVuLT5mZCwgU0lPQ0dJRk5FVE1BU0ssICZpZnIpID09IC0xKQorCXJldHVybjsKKyAgICAgIAorICAgICAgbmV0bWFzayA9ICgoc3RydWN0IHNvY2thZGRyX2luICopICZpZnIuaWZyX2FkZHIpLT5zaW5fYWRkcjsKKyAgICB9CisgIAorICBpZiAoZXh0cmFjdF9yZXF1ZXN0KGhlYWRlciwgKHNpemVfdCluLCBkYWVtb24tPm5hbWVidWZmLCAmdHlwZSkpCisgICAgeworICAgICAgY2hhciB0eXBlc1syMF07CisKKyAgICAgIHF1ZXJ5c3RyKHR5cGVzLCB0eXBlKTsKKworICAgICAgaWYgKGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQpIAorCWxvZ19xdWVyeShGX1FVRVJZIHwgRl9JUFY0IHwgRl9GT1JXQVJELCBkYWVtb24tPm5hbWVidWZmLCAKKwkJICAoc3RydWN0IGFsbF9hZGRyICopJnNvdXJjZV9hZGRyLmluLnNpbl9hZGRyLCB0eXBlcyk7CisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBlbHNlCisJbG9nX3F1ZXJ5KEZfUVVFUlkgfCBGX0lQVjYgfCBGX0ZPUldBUkQsIGRhZW1vbi0+bmFtZWJ1ZmYsIAorCQkgIChzdHJ1Y3QgYWxsX2FkZHIgKikmc291cmNlX2FkZHIuaW42LnNpbjZfYWRkciwgdHlwZXMpOworI2VuZGlmCisgICAgfQorCisgIG0gPSBhbnN3ZXJfcmVxdWVzdCAoaGVhZGVyLCAoKGNoYXIgKikgaGVhZGVyKSArIFBBQ0tFVFNaLCAoc2l6ZV90KW4sIAorCQkgICAgICBkc3RfYWRkcl80LCBuZXRtYXNrLCBub3cpOworICBpZiAobSA+PSAxKQorICAgIHsKKyAgICAgIHNlbmRfZnJvbShsaXN0ZW4tPmZkLCBkYWVtb24tPm9wdGlvbnMgJiBPUFRfTk9XSUxELCAoY2hhciAqKWhlYWRlciwgCisJCW0sICZzb3VyY2VfYWRkciwgJmRzdF9hZGRyLCBpZl9pbmRleCk7CisgICAgICBkYWVtb24tPmxvY2FsX2Fuc3dlcisrOworICAgIH0KKyAgZWxzZSBpZiAoZm9yd2FyZF9xdWVyeShsaXN0ZW4tPmZkLCAmc291cmNlX2FkZHIsICZkc3RfYWRkciwgaWZfaW5kZXgsCisJCQkgaGVhZGVyLCAoc2l6ZV90KW4sIG5vdywgTlVMTCkpCisgICAgZGFlbW9uLT5xdWVyaWVzX2ZvcndhcmRlZCsrOworICBlbHNlCisgICAgZGFlbW9uLT5sb2NhbF9hbnN3ZXIrKzsKK30KKworLyogVGhlIGRhZW1vbiBmb3JrcyBiZWZvcmUgY2FsbGluZyB0aGlzOiBpdCBzaG91bGQgZGVhbCB3aXRoIG9uZSBjb25uZWN0aW9uLAorICAgYmxvY2tpbmcgYXMgbmVjY2Vzc2FyeSwgYW5kIHRoZW4gcmV0dXJuLiBOb3RlLCBuZWVkIHRvIGJlIGEgYml0IGNhcmVmdWwKKyAgIGFib3V0IHJlc291cmNlcyBmb3IgZGVidWcgbW9kZSwgd2hlbiB0aGUgZm9yayBpcyBzdXBwcmVzc2VkOiB0aGF0J3MKKyAgIGRvbmUgYnkgdGhlIGNhbGxlci4gKi8KK3Vuc2lnbmVkIGNoYXIgKnRjcF9yZXF1ZXN0KGludCBjb25mZCwgdGltZV90IG5vdywKKwkJCSAgIHN0cnVjdCBpbl9hZGRyIGxvY2FsX2FkZHIsIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2spCit7CisgIGludCBzaXplID0gMDsKKyAgc2l6ZV90IG07CisgIHVuc2lnbmVkIHNob3J0IHF0eXBlLCBnb3RuYW1lOworICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKKyAgLyogTWF4IFRDUCBwYWNrZXQgKyBzbG9wICovCisgIHVuc2lnbmVkIGNoYXIgKnBhY2tldCA9IHdoaW5lX21hbGxvYyg2NTUzNiArIE1BWEROQU1FICsgUlJGSVhFRFNaKTsKKyAgSEVBREVSICpoZWFkZXI7CisgIHN0cnVjdCBzZXJ2ZXIgKmxhc3Rfc2VydmVyOworICAKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKCFwYWNrZXQgfHwKKwkgICFyZWFkX3dyaXRlKGNvbmZkLCAmYzEsIDEsIDEpIHx8ICFyZWFkX3dyaXRlKGNvbmZkLCAmYzIsIDEsIDEpIHx8CisJICAhKHNpemUgPSBjMSA8PCA4IHwgYzIpIHx8CisJICAhcmVhZF93cml0ZShjb25mZCwgcGFja2V0LCBzaXplLCAxKSkKKyAgICAgICAJcmV0dXJuIHBhY2tldDsgCisgIAorICAgICAgaWYgKHNpemUgPCAoaW50KXNpemVvZihIRUFERVIpKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICBoZWFkZXIgPSAoSEVBREVSICopcGFja2V0OworICAgICAgCisgICAgICBpZiAoKGdvdG5hbWUgPSBleHRyYWN0X3JlcXVlc3QoaGVhZGVyLCAodW5zaWduZWQgaW50KXNpemUsIGRhZW1vbi0+bmFtZWJ1ZmYsICZxdHlwZSkpKQorCXsKKwkgIHVuaW9uIG15c29ja2FkZHIgcGVlcl9hZGRyOworCSAgc29ja2xlbl90IHBlZXJfbGVuID0gc2l6ZW9mKHVuaW9uIG15c29ja2FkZHIpOworCSAgCisJICBpZiAoZ2V0cGVlcm5hbWUoY29uZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmcGVlcl9hZGRyLCAmcGVlcl9sZW4pICE9IC0xKQorCSAgICB7CisJICAgICAgY2hhciB0eXBlc1syMF07CisKKwkgICAgICBxdWVyeXN0cih0eXBlcywgcXR5cGUpOworCisJICAgICAgaWYgKHBlZXJfYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgCisJCWxvZ19xdWVyeShGX1FVRVJZIHwgRl9JUFY0IHwgRl9GT1JXQVJELCBkYWVtb24tPm5hbWVidWZmLCAKKwkJCSAgKHN0cnVjdCBhbGxfYWRkciAqKSZwZWVyX2FkZHIuaW4uc2luX2FkZHIsIHR5cGVzKTsKKyNpZmRlZiBIQVZFX0lQVjYKKwkgICAgICBlbHNlCisJCWxvZ19xdWVyeShGX1FVRVJZIHwgRl9JUFY2IHwgRl9GT1JXQVJELCBkYWVtb24tPm5hbWVidWZmLCAKKwkJCSAgKHN0cnVjdCBhbGxfYWRkciAqKSZwZWVyX2FkZHIuaW42LnNpbjZfYWRkciwgdHlwZXMpOworI2VuZGlmCisJICAgIH0KKwl9CisgICAgICAKKyAgICAgIC8qIG0gPiAwIGlmIGFuc3dlcmVkIGZyb20gY2FjaGUgKi8KKyAgICAgIG0gPSBhbnN3ZXJfcmVxdWVzdChoZWFkZXIsICgoY2hhciAqKSBoZWFkZXIpICsgNjU1MzYsICh1bnNpZ25lZCBpbnQpc2l6ZSwgCisJCQkgbG9jYWxfYWRkciwgbmV0bWFzaywgbm93KTsKKworICAgICAgLyogRG8gdGhpcyBieSBzdGVhbSBub3cgd2UncmUgbm90IGluIHRoZSBzZWxlY3QoKSBsb29wICovCisgICAgICBjaGVja19sb2dfd3JpdGVyKE5VTEwpOyAKKyAgICAgIAorICAgICAgaWYgKG0gPT0gMCkKKwl7CisJICB1bnNpZ25lZCBzaG9ydCBmbGFncyA9IDA7CisJICBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHJwID0gTlVMTDsKKwkgIGludCB0eXBlID0gMDsKKwkgIGNoYXIgKmRvbWFpbiA9IE5VTEw7CisJICAKKwkgIGlmIChnb3RuYW1lKQorCSAgICBmbGFncyA9IHNlYXJjaF9zZXJ2ZXJzKG5vdywgJmFkZHJwLCBnb3RuYW1lLCBkYWVtb24tPm5hbWVidWZmLCAmdHlwZSwgJmRvbWFpbik7CisJICAKKwkgIGlmICh0eXBlICE9IDAgIHx8IChkYWVtb24tPm9wdGlvbnMgJiBPUFRfT1JERVIpIHx8ICFkYWVtb24tPmxhc3Rfc2VydmVyKQorCSAgICBsYXN0X3NlcnZlciA9IGRhZW1vbi0+c2VydmVyczsKKwkgIGVsc2UKKwkgICAgbGFzdF9zZXJ2ZXIgPSBkYWVtb24tPmxhc3Rfc2VydmVyOworICAgICAgCisJICBpZiAoIWZsYWdzICYmIGxhc3Rfc2VydmVyKQorCSAgICB7CisJICAgICAgc3RydWN0IHNlcnZlciAqZmlyc3RzZW5kdG8gPSBOVUxMOworCSAgICAgIHVuc2lnbmVkIGludCBjcmMgPSBxdWVzdGlvbnNfY3JjKGhlYWRlciwgKHVuc2lnbmVkIGludClzaXplLCBkYWVtb24tPm5hbWVidWZmKTsKKworCSAgICAgIC8qIExvb3Agcm91bmQgYXZhaWxhYmxlIHNlcnZlcnMgdW50aWwgd2Ugc3VjY2VlZCBpbiBjb25uZWN0aW5nIHRvIG9uZS4KKwkgICAgICAgICBOb3RlIHRoYXQgdGhpcyBjb2RlIHN1YnRsZXkgZW5zdXJlcyB0aGF0IGNvbnNlY3V0aXZlIHF1ZXJpZXMgb24gdGhpcyBjb25uZWN0aW9uCisJICAgICAgICAgd2hpY2ggY2FuIGdvIHRvIHRoZSBzYW1lIHNlcnZlciwgZG8gc28uICovCisJICAgICAgd2hpbGUgKDEpIAorCQl7CisJCSAgaWYgKCFmaXJzdHNlbmR0bykKKwkJICAgIGZpcnN0c2VuZHRvID0gbGFzdF9zZXJ2ZXI7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBpZiAoIShsYXN0X3NlcnZlciA9IGxhc3Rfc2VydmVyLT5uZXh0KSkKKwkJCWxhc3Rfc2VydmVyID0gZGFlbW9uLT5zZXJ2ZXJzOworCQkgICAgICAKKwkJICAgICAgaWYgKGxhc3Rfc2VydmVyID09IGZpcnN0c2VuZHRvKQorCQkJYnJlYWs7CisJCSAgICB9CisJICAgICAgCisJCSAgLyogc2VydmVyIGZvciB3cm9uZyBkb21haW4gKi8KKwkJICBpZiAodHlwZSAhPSAobGFzdF9zZXJ2ZXItPmZsYWdzICYgU0VSVl9UWVBFKSB8fAorCQkgICAgICAodHlwZSA9PSBTRVJWX0hBU19ET01BSU4gJiYgIWhvc3RuYW1lX2lzZXF1YWwoZG9tYWluLCBsYXN0X3NlcnZlci0+ZG9tYWluKSkpCisJCSAgICBjb250aW51ZTsKKwkJICAKKwkJICBpZiAoKGxhc3Rfc2VydmVyLT50Y3BmZCA9PSAtMSkgJiYKKwkJICAgICAgKGxhc3Rfc2VydmVyLT50Y3BmZCA9IHNvY2tldChsYXN0X3NlcnZlci0+YWRkci5zYS5zYV9mYW1pbHksIFNPQ0tfU1RSRUFNLCAwKSkgIT0gLTEgJiYKKwkJICAgICAgKCFsb2NhbF9iaW5kKGxhc3Rfc2VydmVyLT50Y3BmZCwgICZsYXN0X3NlcnZlci0+c291cmNlX2FkZHIsIGxhc3Rfc2VydmVyLT5pbnRlcmZhY2UsIDEpIHx8CisJCSAgICAgICBjb25uZWN0KGxhc3Rfc2VydmVyLT50Y3BmZCwgJmxhc3Rfc2VydmVyLT5hZGRyLnNhLCBzYV9sZW4oJmxhc3Rfc2VydmVyLT5hZGRyKSkgPT0gLTEpKQorCQkgICAgeworCQkgICAgICBjbG9zZShsYXN0X3NlcnZlci0+dGNwZmQpOworCQkgICAgICBsYXN0X3NlcnZlci0+dGNwZmQgPSAtMTsKKwkJICAgIH0KKwkJICAKKwkJICBpZiAobGFzdF9zZXJ2ZXItPnRjcGZkID09IC0xKQkKKwkJICAgIGNvbnRpbnVlOworCisJCSAgYzEgPSBzaXplID4+IDg7CisJCSAgYzIgPSBzaXplOworCQkgIAorCQkgIGlmICghcmVhZF93cml0ZShsYXN0X3NlcnZlci0+dGNwZmQsICZjMSwgMSwgMCkgfHwKKwkJICAgICAgIXJlYWRfd3JpdGUobGFzdF9zZXJ2ZXItPnRjcGZkLCAmYzIsIDEsIDApIHx8CisJCSAgICAgICFyZWFkX3dyaXRlKGxhc3Rfc2VydmVyLT50Y3BmZCwgcGFja2V0LCBzaXplLCAwKSB8fAorCQkgICAgICAhcmVhZF93cml0ZShsYXN0X3NlcnZlci0+dGNwZmQsICZjMSwgMSwgMSkgfHwKKwkJICAgICAgIXJlYWRfd3JpdGUobGFzdF9zZXJ2ZXItPnRjcGZkLCAmYzIsIDEsIDEpKQorCQkgICAgeworCQkgICAgICBjbG9zZShsYXN0X3NlcnZlci0+dGNwZmQpOworCQkgICAgICBsYXN0X3NlcnZlci0+dGNwZmQgPSAtMTsKKwkJICAgICAgY29udGludWU7CisJCSAgICB9IAorCQkgIAorCQkgIG0gPSAoYzEgPDwgOCkgfCBjMjsKKwkJICBpZiAoIXJlYWRfd3JpdGUobGFzdF9zZXJ2ZXItPnRjcGZkLCBwYWNrZXQsIG0sIDEpKQorCQkgICAgcmV0dXJuIHBhY2tldDsKKwkJICAKKwkJICBpZiAoIWdvdG5hbWUpCisJCSAgICBzdHJjcHkoZGFlbW9uLT5uYW1lYnVmZiwgInF1ZXJ5Iik7CisJCSAgaWYgKGxhc3Rfc2VydmVyLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQkgICAgbG9nX3F1ZXJ5KEZfU0VSVkVSIHwgRl9JUFY0IHwgRl9GT1JXQVJELCBkYWVtb24tPm5hbWVidWZmLCAKKwkJCSAgICAgIChzdHJ1Y3QgYWxsX2FkZHIgKikmbGFzdF9zZXJ2ZXItPmFkZHIuaW4uc2luX2FkZHIsIE5VTEwpOyAKKyNpZmRlZiBIQVZFX0lQVjYKKwkJICBlbHNlCisJCSAgICBsb2dfcXVlcnkoRl9TRVJWRVIgfCBGX0lQVjYgfCBGX0ZPUldBUkQsIGRhZW1vbi0+bmFtZWJ1ZmYsIAorCQkJICAgICAgKHN0cnVjdCBhbGxfYWRkciAqKSZsYXN0X3NlcnZlci0+YWRkci5pbjYuc2luNl9hZGRyLCBOVUxMKTsKKyNlbmRpZiAKKwkJICAKKwkJICAvKiBUaGVyZSdzIG5vIHBvaW50IGluIHVwZGF0aW5nIHRoZSBjYWNoZSwgc2luY2UgdGhpcyBwcm9jZXNzIHdpbGwgZXhpdCBhbmQKKwkJICAgICBsb3NlIHRoZSBpbmZvcm1hdGlvbiBhZnRlciBhIGZldyBxdWVyaWVzLiBXZSBtYWtlIHRoaXMgY2FsbCBmb3IgdGhlIGFsaWFzIGFuZCAKKwkJICAgICBib2d1cy1ueGRvbWFpbiBzaWRlLWVmZmVjdHMuICovCisJCSAgLyogSWYgdGhlIGNyYyBvZiB0aGUgcXVlc3Rpb24gc2VjdGlvbiBkb2Vzbid0IG1hdGNoIHRoZSBjcmMgd2Ugc2VudCwgdGhlbgorCQkgICAgIHNvbWVvbmUgbWlnaHQgYmUgYXR0ZW1wdGluZyB0byBpbnNlcnQgYm9ndXMgdmFsdWVzIGludG8gdGhlIGNhY2hlIGJ5IAorCQkgICAgIHNlbmRpbmcgcmVwbGllcyBjb250YWluaW5nIHF1ZXN0aW9ucyBhbmQgYm9ndXMgYW5zd2Vycy4gKi8KKwkJICBpZiAoY3JjID09IHF1ZXN0aW9uc19jcmMoaGVhZGVyLCAodW5zaWduZWQgaW50KW0sIGRhZW1vbi0+bmFtZWJ1ZmYpKQorCQkgICAgbSA9IHByb2Nlc3NfcmVwbHkoaGVhZGVyLCBub3csIGxhc3Rfc2VydmVyLCAodW5zaWduZWQgaW50KW0pOworCQkgIAorCQkgIGJyZWFrOworCQl9CisJICAgIH0KKwkgIAorCSAgLyogSW4gY2FzZSBvZiBsb2NhbCBhbnN3ZXIgb3Igbm8gY29ubmVjdGlvbnMgbWFkZS4gKi8KKwkgIGlmIChtID09IDApCisJICAgIG0gPSBzZXR1cF9yZXBseShoZWFkZXIsICh1bnNpZ25lZCBpbnQpc2l6ZSwgYWRkcnAsIGZsYWdzLCBkYWVtb24tPmxvY2FsX3R0bCk7CisJfQorCisgICAgICBjaGVja19sb2dfd3JpdGVyKE5VTEwpOworICAgICAgCisgICAgICBjMSA9IG0+Pjg7CisgICAgICBjMiA9IG07CisgICAgICBpZiAoIXJlYWRfd3JpdGUoY29uZmQsICZjMSwgMSwgMCkgfHwKKwkgICFyZWFkX3dyaXRlKGNvbmZkLCAmYzIsIDEsIDApIHx8IAorCSAgIXJlYWRfd3JpdGUoY29uZmQsIHBhY2tldCwgbSwgMCkpCisJcmV0dXJuIHBhY2tldDsKKyAgICB9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnJlYyAqYWxsb2NhdGVfZnJlYyh0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgZnJlYyAqZjsKKyAgCisgIGlmICgoZiA9IChzdHJ1Y3QgZnJlYyAqKXdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGZyZWMpKSkpCisgICAgeworICAgICAgZi0+bmV4dCA9IGRhZW1vbi0+ZnJlY19saXN0OworICAgICAgZi0+dGltZSA9IG5vdzsKKyAgICAgIGYtPnNlbnR0byA9IE5VTEw7CisgICAgICBmLT5yZmQ0ID0gTlVMTDsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgICAgIGYtPnJmZDYgPSBOVUxMOworI2VuZGlmCisgICAgICBkYWVtb24tPmZyZWNfbGlzdCA9IGY7CisgICAgfQorCisgIHJldHVybiBmOworfQorCitzdGF0aWMgc3RydWN0IHJhbmRmZCAqYWxsb2NhdGVfcmZkKGludCBmYW1pbHkpCit7CisgIHN0YXRpYyBpbnQgZmluZ2VyID0gMDsKKyAgaW50IGk7CisKKyAgLyogbGltaXQgdGhlIG51bWJlciBvZiBzb2NrZXRzIHdlIGhhdmUgb3BlbiB0byBhdm9pZCBzdGFydmF0aW9uIG9mIAorICAgICAoZWcpIFRGVFAuIE9uY2Ugd2UgaGF2ZSBhIHJlYXNvbmFibGUgbnVtYmVyLCByYW5kb21uZXNzIHNob3VsZCBiZSBPSyAqLworCisgIGZvciAoaSA9IDA7IGkgPCBSQU5ET01fU09DS1M7IGkrKykKKyAgICBpZiAoZGFlbW9uLT5yYW5kb21zb2Nrc1tpXS5yZWZjb3VudCA9PSAwKQorICAgICAgeworCWlmICgoZGFlbW9uLT5yYW5kb21zb2Nrc1tpXS5mZCA9IHJhbmRvbV9zb2NrKGZhbWlseSkpID09IC0xKQorCSAgYnJlYWs7CisgICAgICAKKwlkYWVtb24tPnJhbmRvbXNvY2tzW2ldLnJlZmNvdW50ID0gMTsKKwlkYWVtb24tPnJhbmRvbXNvY2tzW2ldLmZhbWlseSA9IGZhbWlseTsKKwlyZXR1cm4gJmRhZW1vbi0+cmFuZG9tc29ja3NbaV07CisgICAgICB9CisKKyAgLyogTm8gZnJlZSBvbmVzIG9yIGNhbm5vdCBnZXQgbmV3IHNvY2tldCwgZ3JhYiBhbiBleGlzdGluZyBvbmUgKi8KKyAgZm9yIChpID0gMDsgaSA8IFJBTkRPTV9TT0NLUzsgaSsrKQorICAgIHsKKyAgICAgIGludCBqID0gKGkrZmluZ2VyKSAlIFJBTkRPTV9TT0NLUzsKKyAgICAgIGlmIChkYWVtb24tPnJhbmRvbXNvY2tzW2pdLnJlZmNvdW50ICE9IDAgJiYKKwkgIGRhZW1vbi0+cmFuZG9tc29ja3Nbal0uZmFtaWx5ID09IGZhbWlseSAmJiAKKwkgIGRhZW1vbi0+cmFuZG9tc29ja3Nbal0ucmVmY291bnQgIT0gMHhmZmZmKQorCXsKKwkgIGZpbmdlciA9IGo7CisJICBkYWVtb24tPnJhbmRvbXNvY2tzW2pdLnJlZmNvdW50Kys7CisJICByZXR1cm4gJmRhZW1vbi0+cmFuZG9tc29ja3Nbal07CisJfQorICAgIH0KKworICByZXR1cm4gTlVMTDsgLyogZG9vbSAqLworfQorCitzdGF0aWMgdm9pZCBmcmVlX2ZyZWMoc3RydWN0IGZyZWMgKmYpCit7CisgIGlmIChmLT5yZmQ0ICYmIC0tKGYtPnJmZDQtPnJlZmNvdW50KSA9PSAwKQorICAgIGNsb3NlKGYtPnJmZDQtPmZkKTsKKyAgICAKKyAgZi0+cmZkNCA9IE5VTEw7CisgIGYtPnNlbnR0byA9IE5VTEw7CisgIAorI2lmZGVmIEhBVkVfSVBWNgorICBpZiAoZi0+cmZkNiAmJiAtLShmLT5yZmQ2LT5yZWZjb3VudCkgPT0gMCkKKyAgICBjbG9zZShmLT5yZmQ2LT5mZCk7CisgICAgCisgIGYtPnJmZDYgPSBOVUxMOworI2VuZGlmCit9CisKKy8qIGlmIHdhaXQ9PU5VTEwgcmV0dXJuIGEgZnJlZSBvciBvbGRlciB0aGFuIFRJTUVPVVQgcmVjb3JkLgorICAgZWxzZSByZXR1cm4gKndhaXQgemVybyBpZiBvbmUgYXZhaWxhYmxlLCBvciAqd2FpdCBpcyBkZWxheSB0bworICAgd2hlbiB0aGUgb2xkZXN0IGluLXVzZSByZWNvcmQgd2lsbCBleHBpcmUuIEltcG9zZSBhbiBhYnNvbHV0ZQorICAgbGltaXQgb2YgNCpUSU1FT1VUIGJlZm9yZSB3ZSB3aXBlIHRoaW5ncyAoZm9yIHJhbmRvbSBzb2NrZXRzKSAqLworc3RydWN0IGZyZWMgKmdldF9uZXdfZnJlYyh0aW1lX3Qgbm93LCBpbnQgKndhaXQpCit7CisgIHN0cnVjdCBmcmVjICpmLCAqb2xkZXN0LCAqdGFyZ2V0OworICBpbnQgY291bnQ7CisgIAorICBpZiAod2FpdCkKKyAgICAqd2FpdCA9IDA7CisKKyAgZm9yIChmID0gZGFlbW9uLT5mcmVjX2xpc3QsIG9sZGVzdCA9IE5VTEwsIHRhcmdldCA9ICBOVUxMLCBjb3VudCA9IDA7IGY7IGYgPSBmLT5uZXh0LCBjb3VudCsrKQorICAgIGlmICghZi0+c2VudHRvKQorICAgICAgdGFyZ2V0ID0gZjsKKyAgICBlbHNlIAorICAgICAgeworCWlmIChkaWZmdGltZShub3csIGYtPnRpbWUpID49IDQqVElNRU9VVCkKKwkgIHsKKwkgICAgZnJlZV9mcmVjKGYpOworCSAgICB0YXJnZXQgPSBmOworCSAgfQorCQorCWlmICghb2xkZXN0IHx8IGRpZmZ0aW1lKGYtPnRpbWUsIG9sZGVzdC0+dGltZSkgPD0gMCkKKwkgIG9sZGVzdCA9IGY7CisgICAgICB9CisKKyAgaWYgKHRhcmdldCkKKyAgICB7CisgICAgICB0YXJnZXQtPnRpbWUgPSBub3c7CisgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KKyAgCisgIC8qIGNhbid0IGZpbmQgZW1wdHkgb25lLCB1c2Ugb2xkZXN0IGlmIHRoZXJlIGlzIG9uZQorICAgICBhbmQgaXQncyBvbGRlciB0aGFuIHRpbWVvdXQgKi8KKyAgaWYgKG9sZGVzdCAmJiAoKGludClkaWZmdGltZShub3csIG9sZGVzdC0+dGltZSkpID49IFRJTUVPVVQpCisgICAgeyAKKyAgICAgIC8qIGtlZXAgc3R1ZmYgZm9yIHR3aWNlIHRpbWVvdXQgaWYgd2UgY2FuIGJ5IGFsbG9jYXRpbmcgYSBuZXcKKwkgcmVjb3JkIGluc3RlYWQgKi8KKyAgICAgIGlmIChkaWZmdGltZShub3csIG9sZGVzdC0+dGltZSkgPCAyKlRJTUVPVVQgJiYgCisJICBjb3VudCA8PSBkYWVtb24tPmZ0YWJzaXplICYmCisJICAoZiA9IGFsbG9jYXRlX2ZyZWMobm93KSkpCisJcmV0dXJuIGY7CisKKyAgICAgIGlmICghd2FpdCkKKwl7CisJICBmcmVlX2ZyZWMob2xkZXN0KTsKKwkgIG9sZGVzdC0+dGltZSA9IG5vdzsKKwl9CisgICAgICByZXR1cm4gb2xkZXN0OworICAgIH0KKyAgCisgIC8qIG5vbmUgYXZhaWxhYmxlLCBjYWxjdWxhdGUgdGltZSAndGlsbCBvbGRlc3QgcmVjb3JkIGV4cGlyZXMgKi8KKyAgaWYgKGNvdW50ID4gZGFlbW9uLT5mdGFic2l6ZSkKKyAgICB7CisgICAgICBpZiAob2xkZXN0ICYmIHdhaXQpCisJKndhaXQgPSBvbGRlc3QtPnRpbWUgKyAodGltZV90KVRJTUVPVVQgLSBub3c7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIAorICBpZiAoIShmID0gYWxsb2NhdGVfZnJlYyhub3cpKSAmJiB3YWl0KQorICAgIC8qIHdhaXQgb25lIHNlY29uZCBvbiBtYWxsb2MgZmFpbHVyZSAqLworICAgICp3YWl0ID0gMTsKKworICByZXR1cm4gZjsgLyogT0sgaWYgbWFsbG9jIGZhaWxzIGFuZCB0aGlzIGlzIE5VTEwgKi8KK30KKyAKKy8qIGNyYyBpcyBhbGwtb25lcyBpZiBub3Qga25vd24uICovCitzdGF0aWMgc3RydWN0IGZyZWMgKmxvb2t1cF9mcmVjKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgY3JjKQoreworICBzdHJ1Y3QgZnJlYyAqZjsKKworICBmb3IoZiA9IGRhZW1vbi0+ZnJlY19saXN0OyBmOyBmID0gZi0+bmV4dCkKKyAgICBpZiAoZi0+c2VudHRvICYmIGYtPm5ld19pZCA9PSBpZCAmJiAKKwkoZi0+Y3JjID09IGNyYyB8fCBjcmMgPT0gMHhmZmZmZmZmZikpCisgICAgICByZXR1cm4gZjsKKyAgICAgIAorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBmcmVjICpsb29rdXBfZnJlY19ieV9zZW5kZXIodW5zaWduZWQgc2hvcnQgaWQsCisJCQkJCSAgdW5pb24gbXlzb2NrYWRkciAqYWRkciwKKwkJCQkJICB1bnNpZ25lZCBpbnQgY3JjKQoreworICBzdHJ1Y3QgZnJlYyAqZjsKKyAgCisgIGZvcihmID0gZGFlbW9uLT5mcmVjX2xpc3Q7IGY7IGYgPSBmLT5uZXh0KQorICAgIGlmIChmLT5zZW50dG8gJiYKKwlmLT5vcmlnX2lkID09IGlkICYmIAorCWYtPmNyYyA9PSBjcmMgJiYKKwlzb2NrYWRkcl9pc2VxdWFsKCZmLT5zb3VyY2UsIGFkZHIpKQorICAgICAgcmV0dXJuIGY7CisgICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEEgc2VydmVyIHJlY29yZCBpcyBnb2luZyBhd2F5LCByZW1vdmUgcmVmZXJlbmNlcyB0byBpdCAqLwordm9pZCBzZXJ2ZXJfZ29uZShzdHJ1Y3Qgc2VydmVyICpzZXJ2ZXIpCit7CisgIHN0cnVjdCBmcmVjICpmOworICAKKyAgZm9yIChmID0gZGFlbW9uLT5mcmVjX2xpc3Q7IGY7IGYgPSBmLT5uZXh0KQorICAgIGlmIChmLT5zZW50dG8gJiYgZi0+c2VudHRvID09IHNlcnZlcikKKyAgICAgIGZyZWVfZnJlYyhmKTsKKyAgCisgIGlmIChkYWVtb24tPmxhc3Rfc2VydmVyID09IHNlcnZlcikKKyAgICBkYWVtb24tPmxhc3Rfc2VydmVyID0gTlVMTDsKKworICBpZiAoZGFlbW9uLT5zcnZfc2F2ZSA9PSBzZXJ2ZXIpCisgICAgZGFlbW9uLT5zcnZfc2F2ZSA9IE5VTEw7Cit9CisKKy8qIHJldHVybiB1bmlxdWUgcmFuZG9tIGlkcy4KKyAgIEZvciBzaWduZWQgcGFja2V0cyB3ZSBjYW4ndCBjaGFuZ2UgdGhlIElEIHdpdGhvdXQgYnJlYWtpbmcgdGhlCisgICBzaWduaW5nLCBzbyB3ZSBrZWVwIHRoZSBzYW1lIG9uZS4gSW4gdGhpcyBjYXNlIGZvcmNlIGlzIHNldCwgYW5kIHRoaXMKKyAgIHJvdXRpbmUgZGVnZW5lcmF0ZXMgaW50byBraWxsaW5nIGFueSBjb25mbGljdGluZyBmb3J3YXJkIHJlY29yZC4gKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZXRfaWQoaW50IGZvcmNlLCB1bnNpZ25lZCBzaG9ydCBmb3JjZV9pZCwgdW5zaWduZWQgaW50IGNyYykKK3sKKyAgdW5zaWduZWQgc2hvcnQgcmV0ID0gMDsKKyAgCisgIGlmIChmb3JjZSkKKyAgICB7CisgICAgICBzdHJ1Y3QgZnJlYyAqZiA9IGxvb2t1cF9mcmVjKGZvcmNlX2lkLCBjcmMpOworICAgICAgaWYgKGYpCisJZnJlZV9mcmVjKGYpOyAvKiBmcmVlICovCisgICAgICByZXQgPSBmb3JjZV9pZDsKKyAgICB9CisgIGVsc2UgZG8gCisgICAgcmV0ID0gcmFuZDE2KCk7CisgIHdoaWxlIChsb29rdXBfZnJlYyhyZXQsIGNyYykpOworICAKKyAgcmV0dXJuIHJldDsKK30KKworCisKKworCmRpZmYgLS1naXQgYS9zcmMvaGVscGVyLmMgYi9zcmMvaGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjk5MmU3OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9oZWxwZXIuYwpAQCAtMCwwICsxLDQyOCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKy8qIFRoaXMgZmlsZSBoYXMgY29kZSB0byBmb3JrIGEgaGVscGVyIHByb2Nlc3Mgd2hpY2ggcmVjaWV2ZXMgZGF0YSB2aWEgYSBwaXBlIAorICAgc2hhcmVkIHdpdGggdGhlIG1haW4gcHJvY2VzcyBhbmQgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYSBzY3JpcHQgd2hlbgorICAgREhDUCBsZWFzZXMgY2hhbmdlLgorCisgICBUaGUgaGVscGVyIHByb2Nlc3MgaXMgZm9ya2VkIGJlZm9yZSB0aGUgbWFpbiBwcm9jZXNzIGRyb3BzIHJvb3QsIHNvIGl0IHJldGFpbnMgcm9vdCAKKyAgIHByaXZzIHRvIHBhc3Mgb24gdG8gdGhlIHNjcmlwdC4gRm9yIHRoaXMgcmVhc29uIGl0IHRyaWVzIHRvIGJlIHBhcmFub2lkIGFib3V0IAorICAgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBtYWluIHByb2Nlc3MsIGluIGNhc2UgdGhhdCBoYXMgYmVlbiBjb21wcm9taXNlZC4gV2UgZG9uJ3QKKyAgIHdhbnQgdGhlIGhlbHBlciB0byBnaXZlIGFuIGF0dGFja2VyIHJvb3QuIEluIHBhcnRpY3VsYXIsIHRoZSBzY3JpcHQgdG8gYmUgcnVuIGlzCisgICBub3Qgc2V0dGFibGUgdmlhIHRoZSBwaXBlLCBvbmNlIHRoZSBmb3JrIGhhcyB0YWtlbiBwbGFjZSBpdCBpcyBub3QgYWx0ZXJhYmxlIGJ5IHRoZSAKKyAgIG1haW4gcHJvY2Vzcy4KKyovCisKKyNpZiBkZWZpbmVkKEhBVkVfREhDUCkgJiYgZGVmaW5lZChIQVZFX1NDUklQVCkKKworc3RhdGljIHZvaWQgbXlfc2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgKmVycm9yKTsKKworc3RydWN0IHNjcmlwdF9kYXRhCit7CisgIHVuc2lnbmVkIGNoYXIgYWN0aW9uLCBod2FkZHJfbGVuLCBod2FkZHJfdHlwZTsKKyAgdW5zaWduZWQgY2hhciBjbGlkX2xlbiwgaG9zdG5hbWVfbGVuLCB1Y2xhc3NfbGVuLCB2Y2xhc3NfbGVuLCBzaG9zdF9sZW47CisgIHN0cnVjdCBpbl9hZGRyIGFkZHIsIGdpYWRkcjsKKyAgdW5zaWduZWQgaW50IHJlbWFpbmluZ190aW1lOworI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworICB1bnNpZ25lZCBpbnQgbGVuZ3RoOworI2Vsc2UKKyAgdGltZV90IGV4cGlyZXM7CisjZW5kaWYKKyAgdW5zaWduZWQgY2hhciBod2FkZHJbREhDUF9DSEFERFJfTUFYXTsKKyAgY2hhciBpbnRlcmZhY2VbSUZfTkFNRVNJWkVdOworfTsKKworc3RhdGljIHN0cnVjdCBzY3JpcHRfZGF0YSAqYnVmID0gTlVMTDsKK3N0YXRpYyBzaXplX3QgYnl0ZXNfaW5fYnVmID0gMCwgYnVmX3NpemUgPSAwOworCitpbnQgY3JlYXRlX2hlbHBlcihpbnQgZXZlbnRfZmQsIGludCBlcnJfZmQsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBsb25nIG1heF9mZCkKK3sKKyAgcGlkX3QgcGlkOworICBpbnQgaSwgcGlwZWZkWzJdOworICBzdHJ1Y3Qgc2lnYWN0aW9uIHNpZ2FjdDsKKworICAvKiBjcmVhdGUgdGhlIHBpcGUgdGhyb3VnaCB3aGljaCB0aGUgbWFpbiBwcm9ncmFtIHNlbmRzIHVzIGNvbW1hbmRzLAorICAgICB0aGVuIGZvcmsgb3VyIHByb2Nlc3MuICovCisgIGlmIChwaXBlKHBpcGVmZCkgPT0gLTEgfHwgIWZpeF9mZChwaXBlZmRbMV0pIHx8IChwaWQgPSBmb3JrKCkpID09IC0xKQorICAgIHsKKyAgICAgIHNlbmRfZXZlbnQoZXJyX2ZkLCBFVkVOVF9QSVBFX0VSUiwgZXJybm8pOworICAgICAgX2V4aXQoMCk7CisgICAgfQorCisgIGlmIChwaWQgIT0gMCkKKyAgICB7CisgICAgICBjbG9zZShwaXBlZmRbMF0pOyAvKiBjbG9zZSByZWFkZXIgc2lkZSAqLworICAgICAgcmV0dXJuIHBpcGVmZFsxXTsKKyAgICB9CisKKyAgLyogaWdub3JlIFNJR1RFUk0sIHNvIHRoYXQgd2UgY2FuIGNsZWFuIHVwIHdoZW4gdGhlIG1haW4gcHJvY2VzcyBnZXRzIGhpdAorICAgICBhbmQgU0lHQUxSTSBzbyB0aGF0IHdlIGNhbiB1c2Ugc2xlZXAoKSAqLworICBzaWdhY3Quc2FfaGFuZGxlciA9IFNJR19JR047CisgIHNpZ2FjdC5zYV9mbGFncyA9IDA7CisgIHNpZ2VtcHR5c2V0KCZzaWdhY3Quc2FfbWFzayk7CisgIHNpZ2FjdGlvbihTSUdURVJNLCAmc2lnYWN0LCBOVUxMKTsKKyAgc2lnYWN0aW9uKFNJR0FMUk0sICZzaWdhY3QsIE5VTEwpOworCisgIGlmICghKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9ERUJVRykgJiYgdWlkICE9IDApCisgICAgeworICAgICAgZ2lkX3QgZHVtbXk7CisgICAgICBpZiAoc2V0Z3JvdXBzKDAsICZkdW1teSkgPT0gLTEgfHwgCisJICBzZXRnaWQoZ2lkKSA9PSAtMSB8fCAKKwkgIHNldHVpZCh1aWQpID09IC0xKQorCXsKKwkgIGlmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTk9fRk9SSykKKwkgICAgLyogc2VuZCBlcnJvciB0byBkYWVtb24gcHJvY2VzcyBpZiBuby1mb3JrICovCisJICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0hVU0VSX0VSUiwgZXJybm8pOworCSAgZWxzZQorCSAgICB7CisJICAgICAgLyoga2lsbCBkYWVtb24gKi8KKwkgICAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9ESUUsIDApOworCSAgICAgIC8qIHJldHVybiBlcnJvciAqLworCSAgICAgIHNlbmRfZXZlbnQoZXJyX2ZkLCBFVkVOVF9IVVNFUl9FUlIsIGVycm5vKTsKKwkgICAgfQorCSAgX2V4aXQoMCk7CisJfQorICAgIH0KKworICAvKiBjbG9zZSBhbGwgdGhlIHNvY2tldHMgZXRjLCB3ZSBkb24ndCBuZWVkIHRoZW0gaGVyZS4gVGhpcyBjbG9zZXMgZXJyX2ZkLCBzbyB0aGF0CisgICAgIG1haW4gcHJvY2VzcyBjYW4gcmV0dXJuLiAqLworICBmb3IgKG1heF9mZC0tOyBtYXhfZmQgPj0gMDsgbWF4X2ZkLS0pCisgICAgaWYgKG1heF9mZCAhPSBTVERPVVRfRklMRU5PICYmIG1heF9mZCAhPSBTVERFUlJfRklMRU5PICYmIAorCW1heF9mZCAhPSBTVERJTl9GSUxFTk8gJiYgbWF4X2ZkICE9IHBpcGVmZFswXSAmJiBtYXhfZmQgIT0gZXZlbnRfZmQpCisgICAgICBjbG9zZShtYXhfZmQpOworICAKKyAgLyogbG9vcCBoZXJlICovCisgIHdoaWxlKDEpCisgICAgeworICAgICAgc3RydWN0IHNjcmlwdF9kYXRhIGRhdGE7CisgICAgICBjaGFyICpwLCAqYWN0aW9uX3N0ciwgKmhvc3RuYW1lID0gTlVMTDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5uYW1lYnVmZjsKKyAgICAgIGludCBlcnIgPSAwOworCisgICAgICAvKiB3ZSByZWFkIHplcm8gYnl0ZXMgd2hlbiBwaXBlIGNsb3NlZDogdGhpcyBpcyBvdXIgc2lnbmFsIHRvIGV4aXQgKi8gCisgICAgICBpZiAoIXJlYWRfd3JpdGUocGlwZWZkWzBdLCAodW5zaWduZWQgY2hhciAqKSZkYXRhLCBzaXplb2YoZGF0YSksIDEpKQorCV9leGl0KDApOworICAgICAgCisgICAgICBpZiAoZGF0YS5hY3Rpb24gPT0gQUNUSU9OX0RFTCkKKwlhY3Rpb25fc3RyID0gImRlbCI7CisgICAgICBlbHNlIGlmIChkYXRhLmFjdGlvbiA9PSBBQ1RJT05fQUREKQorCWFjdGlvbl9zdHIgPSAiYWRkIjsKKyAgICAgIGVsc2UgaWYgKGRhdGEuYWN0aW9uID09IEFDVElPTl9PTEQgfHwgZGF0YS5hY3Rpb24gPT0gQUNUSU9OX09MRF9IT1NUTkFNRSkKKwlhY3Rpb25fc3RyID0gIm9sZCI7CisgICAgICBlbHNlCisJY29udGludWU7CisJCisgICAgICAvKiBzdHJpbmdpZnkgTUFDIGludG8gZGhjcF9idWZmICovCisgICAgICBwID0gZGFlbW9uLT5kaGNwX2J1ZmY7CisgICAgICBpZiAoZGF0YS5od2FkZHJfdHlwZSAhPSBBUlBIUkRfRVRIRVIgfHwgZGF0YS5od2FkZHJfbGVuID09IDApIAorICAgICAgICBwICs9IHNwcmludGYocCwgIiUuMngtIiwgZGF0YS5od2FkZHJfdHlwZSk7CisgICAgICBmb3IgKGkgPSAwOyAoaSA8IGRhdGEuaHdhZGRyX2xlbikgJiYgKGkgPCBESENQX0NIQUREUl9NQVgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBwICs9IHNwcmludGYocCwgIiUuMngiLCBkYXRhLmh3YWRkcltpXSk7CisgICAgICAgICAgaWYgKGkgIT0gZGF0YS5od2FkZHJfbGVuIC0gMSkKKyAgICAgICAgICAgIHAgKz0gc3ByaW50ZihwLCAiOiIpOworICAgICAgICB9CisgICAgICAKKyAgICAgIC8qIGFuZCBDTElEIGludG8gcGFja2V0ICovCisgICAgICBpZiAoIXJlYWRfd3JpdGUocGlwZWZkWzBdLCBidWYsIGRhdGEuY2xpZF9sZW4sIDEpKQorCWNvbnRpbnVlOworICAgICAgZm9yIChwID0gZGFlbW9uLT5wYWNrZXQsIGkgPSAwOyBpIDwgZGF0YS5jbGlkX2xlbjsgaSsrKQorCXsKKwkgIHAgKz0gc3ByaW50ZihwLCAiJS4yeCIsIGJ1ZltpXSk7CisJICBpZiAoaSAhPSBkYXRhLmNsaWRfbGVuIC0gMSkgCisJICAgIHAgKz0gc3ByaW50ZihwLCAiOiIpOworCX0KKyAgICAgIAorICAgICAgLyogYW5kIGV4cGlyeSBvciBsZW5ndGggaW50byBkaGNwX2J1ZmYyICovCisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDCisgICAgICBzcHJpbnRmKGRhZW1vbi0+ZGhjcF9idWZmMiwgIiV1ICIsIGRhdGEubGVuZ3RoKTsKKyNlbHNlCisgICAgICBzcHJpbnRmKGRhZW1vbi0+ZGhjcF9idWZmMiwgIiVsdSAiLCAodW5zaWduZWQgbG9uZylkYXRhLmV4cGlyZXMpOworI2VuZGlmCisgICAgICAKKyAgICAgIGlmICghcmVhZF93cml0ZShwaXBlZmRbMF0sIGJ1ZiwgCisJCSAgICAgIGRhdGEuaG9zdG5hbWVfbGVuICsgZGF0YS51Y2xhc3NfbGVuICsgZGF0YS52Y2xhc3NfbGVuICsgZGF0YS5zaG9zdF9sZW4sIDEpKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICAvKiBwb3NzaWJsZSBmb3JrIGVycm9ycyBhcmUgYWxsIHRlbXBvcmFyeSByZXNvdXJjZSBwcm9ibGVtcyAqLworICAgICAgd2hpbGUgKChwaWQgPSBmb3JrKCkpID09IC0xICYmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRU5PTUVNKSkKKwlzbGVlcCgyKTsKKyAgICAgIAorICAgICAgaWYgKHBpZCA9PSAtMSkKKwljb250aW51ZTsKKwkgIAorICAgICAgLyogd2FpdCBmb3IgY2hpbGQgdG8gY29tcGxldGUgKi8KKyAgICAgIGlmIChwaWQgIT0gMCkKKwl7CisJICAvKiByZWFwIG91ciBjaGlsZHJlbidzIGNoaWxkcmVuLCBpZiBuZWNlc3NhcnkgKi8KKwkgIHdoaWxlICgxKQorCSAgICB7CisJICAgICAgaW50IHN0YXR1czsKKwkgICAgICBwaWRfdCByYyA9IHdhaXQoJnN0YXR1cyk7CisJICAgICAgCisJICAgICAgaWYgKHJjID09IHBpZCkKKwkJeworCQkgIC8qIE9uIGVycm9yIHNlbmQgZXZlbnQgYmFjayB0byBtYWluIHByb2Nlc3MgZm9yIGxvZ2dpbmcgKi8KKwkJICBpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkKKwkJICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0tJTExFRCwgV1RFUk1TSUcoc3RhdHVzKSk7CisJCSAgZWxzZSBpZiAoV0lGRVhJVEVEKHN0YXR1cykgJiYgV0VYSVRTVEFUVVMoc3RhdHVzKSAhPSAwKQorCQkgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfRVhJVEVELCBXRVhJVFNUQVRVUyhzdGF0dXMpKTsKKwkJICBicmVhazsKKwkJfQorCSAgICAgIAorCSAgICAgIGlmIChyYyA9PSAtMSAmJiBlcnJubyAhPSBFSU5UUikKKwkJYnJlYWs7CisJICAgIH0KKwkgIAorCSAgY29udGludWU7CisJfQorICAgICAgCisgICAgICBpZiAoZGF0YS5jbGlkX2xlbiAhPSAwKQorCW15X3NldGVudigiRE5TTUFTUV9DTElFTlRfSUQiLCBkYWVtb24tPnBhY2tldCwgJmVycik7CisKKyAgICAgIGlmIChzdHJsZW4oZGF0YS5pbnRlcmZhY2UpICE9IDApCisJbXlfc2V0ZW52KCJETlNNQVNRX0lOVEVSRkFDRSIsIGRhdGEuaW50ZXJmYWNlLCAmZXJyKTsKKyAgICAgICAgICAgIAorI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworICAgICAgbXlfc2V0ZW52KCJETlNNQVNRX0xFQVNFX0xFTkdUSCIsIGRhZW1vbi0+ZGhjcF9idWZmMiwgJmVycik7CisjZWxzZQorICAgICAgbXlfc2V0ZW52KCJETlNNQVNRX0xFQVNFX0VYUElSRVMiLCBkYWVtb24tPmRoY3BfYnVmZjIsICZlcnIpOyAKKyNlbmRpZgorICAgICAgCisgICAgICBpZiAoZGF0YS52Y2xhc3NfbGVuICE9IDApCisJeworCSAgYnVmW2RhdGEudmNsYXNzX2xlbiAtIDFdID0gMDsgLyogZG9uJ3QgdHJ1c3QgemVyby10ZXJtICovCisJICAvKiBjYW5ub3QgaGF2ZSA9IGNoYXJzIGluIGVudiAtIHRydW5jYXRlIGlmIGZvdW5kIC4gKi8KKwkgIGlmICgocCA9IHN0cmNocigoY2hhciAqKWJ1ZiwgJz0nKSkpCisJICAgICpwID0gMDsKKwkgIG15X3NldGVudigiRE5TTUFTUV9WRU5ET1JfQ0xBU1MiLCAoY2hhciAqKWJ1ZiwgJmVycik7CisJICBidWYgKz0gZGF0YS52Y2xhc3NfbGVuOworCX0KKyAgICAgIAorICAgICAgaWYgKGRhdGEudWNsYXNzX2xlbiAhPSAwKQorCXsKKwkgIHVuc2lnbmVkIGNoYXIgKmVuZCA9IGJ1ZiArIGRhdGEudWNsYXNzX2xlbjsKKwkgIGJ1ZltkYXRhLnVjbGFzc19sZW4gLSAxXSA9IDA7IC8qIGRvbid0IHRydXN0IHplcm8tdGVybSAqLworCSAgCisJICBmb3IgKGkgPSAwOyBidWYgPCBlbmQ7KQorCSAgICB7CisJICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbigoY2hhciAqKWJ1ZikgKyAxOworCSAgICAgIGlmICgocCA9IHN0cmNocigoY2hhciAqKWJ1ZiwgJz0nKSkpCisJCSpwID0gMDsKKwkgICAgICBpZiAoc3RybGVuKChjaGFyICopYnVmKSAhPSAwKQorCQl7CisJCSAgc3ByaW50ZihkYWVtb24tPmRoY3BfYnVmZjIsICJETlNNQVNRX1VTRVJfQ0xBU1MlaSIsIGkrKyk7CisJCSAgbXlfc2V0ZW52KGRhZW1vbi0+ZGhjcF9idWZmMiwgKGNoYXIgKilidWYsICZlcnIpOworCQl9CisJICAgICAgYnVmICs9IGxlbjsKKwkgICAgfQorCX0KKyAgICAgIAorICAgICAgaWYgKGRhdGEuc2hvc3RfbGVuICE9IDApCisJeworCSAgYnVmW2RhdGEuc2hvc3RfbGVuIC0gMV0gPSAwOyAvKiBkb24ndCB0cnVzdCB6ZXJvLXRlcm0gKi8KKwkgIC8qIGNhbm5vdCBoYXZlID0gY2hhcnMgaW4gZW52IC0gdHJ1bmNhdGUgaWYgZm91bmQgLiAqLworCSAgaWYgKChwID0gc3RyY2hyKChjaGFyICopYnVmLCAnPScpKSkKKwkgICAgKnAgPSAwOworCSAgbXlfc2V0ZW52KCJETlNNQVNRX1NVUFBMSUVEX0hPU1ROQU1FIiwgKGNoYXIgKilidWYsICZlcnIpOworCSAgYnVmICs9IGRhdGEuc2hvc3RfbGVuOworCX0KKworICAgICAgaWYgKGRhdGEuZ2lhZGRyLnNfYWRkciAhPSAwKQorCW15X3NldGVudigiRE5TTUFTUV9SRUxBWV9BRERSRVNTIiwgaW5ldF9udG9hKGRhdGEuZ2lhZGRyKSwgJmVycik7IAorCisgICAgICBzcHJpbnRmKGRhZW1vbi0+ZGhjcF9idWZmMiwgIiV1ICIsIGRhdGEucmVtYWluaW5nX3RpbWUpOworICAgICAgbXlfc2V0ZW52KCJETlNNQVNRX1RJTUVfUkVNQUlOSU5HIiwgZGFlbW9uLT5kaGNwX2J1ZmYyLCAmZXJyKTsKKyAgICAgIAorICAgICAgaWYgKGRhdGEuaG9zdG5hbWVfbGVuICE9IDApCisJeworCSAgY2hhciAqZG90OworCSAgaG9zdG5hbWUgPSAoY2hhciAqKWJ1ZjsKKwkgIGhvc3RuYW1lW2RhdGEuaG9zdG5hbWVfbGVuIC0gMV0gPSAwOworCSAgaWYgKCFsZWdhbF9ob3N0bmFtZShob3N0bmFtZSkpCisJICAgIGhvc3RuYW1lID0gTlVMTDsKKwkgIGVsc2UgaWYgKChkb3QgPSBzdHJjaHIoaG9zdG5hbWUsICcuJykpKQorCSAgICB7CisJICAgICAgbXlfc2V0ZW52KCJETlNNQVNRX0RPTUFJTiIsIGRvdCsxLCAmZXJyKTsKKwkgICAgICAqZG90ID0gMDsKKwkgICAgfQorCX0KKyAgICAgIAorICAgICAgaWYgKGRhdGEuYWN0aW9uID09IEFDVElPTl9PTERfSE9TVE5BTUUgJiYgaG9zdG5hbWUpCisJeworCSAgbXlfc2V0ZW52KCJETlNNQVNRX09MRF9IT1NUTkFNRSIsIGhvc3RuYW1lLCAmZXJyKTsKKwkgIGhvc3RuYW1lID0gTlVMTDsKKwl9CisKKyAgICAgIC8qIHdlIG5lZWQgdG8gaGF2ZSB0aGUgZXZlbnRfZmQgYXJvdW5kIGlmIGV4ZWMgZmFpbHMgKi8KKyAgICAgIGlmICgoaSA9IGZjbnRsKGV2ZW50X2ZkLCBGX0dFVEZEKSkgIT0gLTEpCisJZmNudGwoZXZlbnRfZmQsIEZfU0VURkQsIGkgfCBGRF9DTE9FWEVDKTsKKyAgICAgIGNsb3NlKHBpcGVmZFswXSk7CisKKyAgICAgIHAgPSAgc3RycmNocihkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kLCAnLycpOworICAgICAgaWYgKGVyciA9PSAwKQorCXsKKwkgIGV4ZWNsKGRhZW1vbi0+bGVhc2VfY2hhbmdlX2NvbW1hbmQsIAorCQlwID8gcCsxIDogZGFlbW9uLT5sZWFzZV9jaGFuZ2VfY29tbWFuZCwKKwkJYWN0aW9uX3N0ciwgZGFlbW9uLT5kaGNwX2J1ZmYsIGluZXRfbnRvYShkYXRhLmFkZHIpLCBob3N0bmFtZSwgKGNoYXIqKU5VTEwpOworCSAgZXJyID0gZXJybm87CisJfQorICAgICAgLyogZmFpbGVkLCBzZW5kIGV2ZW50IHNvIHRoZSBtYWluIHByb2Nlc3MgbG9ncyB0aGUgcHJvYmxlbSAqLworICAgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfRVhFQ19FUlIsIGVycik7CisgICAgICBfZXhpdCgwKTsgCisgICAgfQorfQorCitzdGF0aWMgdm9pZCBteV9zZXRlbnYoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIGludCAqZXJyb3IpCit7CisgIGlmICgqZXJyb3IgPT0gMCAmJiBzZXRlbnYobmFtZSwgdmFsdWUsIDEpICE9IDApCisgICAgKmVycm9yID0gZXJybm87Cit9CisgCisvKiBwYWNrIHVwIGxlYXNlIGRhdGEgaW50byBhIGJ1ZmZlciAqLyAgICAKK3ZvaWQgcXVldWVfc2NyaXB0KGludCBhY3Rpb24sIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgY2hhciAqaG9zdG5hbWUsIHRpbWVfdCBub3cpCit7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIHNpemVfdCBzaXplOworICB1bnNpZ25lZCBpbnQgaG9zdG5hbWVfbGVuID0gMCwgY2xpZF9sZW4gPSAwLCB2Y2xhc3NfbGVuID0gMDsKKyAgdW5zaWduZWQgaW50IHVjbGFzc19sZW4gPSAwLCBzaG9zdF9sZW4gPSAwOworICAKKyAgLyogbm8gc2NyaXB0ICovCisgIGlmIChkYWVtb24tPmhlbHBlcmZkID09IC0xKQorICAgIHJldHVybjsKKworICBpZiAobGVhc2UtPnZlbmRvcmNsYXNzKQorICAgIHZjbGFzc19sZW4gPSBsZWFzZS0+dmVuZG9yY2xhc3NfbGVuOworICBpZiAobGVhc2UtPnVzZXJjbGFzcykKKyAgICB1Y2xhc3NfbGVuID0gbGVhc2UtPnVzZXJjbGFzc19sZW47CisgIGlmIChsZWFzZS0+c3VwcGxpZWRfaG9zdG5hbWUpCisgICAgc2hvc3RfbGVuID0gbGVhc2UtPnN1cHBsaWVkX2hvc3RuYW1lX2xlbjsKKyAgaWYgKGxlYXNlLT5jbGlkKQorICAgIGNsaWRfbGVuID0gbGVhc2UtPmNsaWRfbGVuOworICBpZiAoaG9zdG5hbWUpCisgICAgaG9zdG5hbWVfbGVuID0gc3RybGVuKGhvc3RuYW1lKSArIDE7CisKKyAgc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2NyaXB0X2RhdGEpICsgIGNsaWRfbGVuICsgdmNsYXNzX2xlbiArIHVjbGFzc19sZW4gKyBzaG9zdF9sZW4gKyBob3N0bmFtZV9sZW47CisKKyAgaWYgKHNpemUgPiBidWZfc2l6ZSkKKyAgICB7CisgICAgICBzdHJ1Y3Qgc2NyaXB0X2RhdGEgKm5ldzsKKyAgICAgIAorICAgICAgLyogc3RhcnQgd2l0aCByZWFzb25hYmxlIHNpemUsIHdpbGwgYWxtb3N0IG5ldmVyIG5lZWQgZXh0ZW5kaW5nLiAqLworICAgICAgaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IHNjcmlwdF9kYXRhKSArIDIwMCkKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3JpcHRfZGF0YSkgKyAyMDA7CisKKyAgICAgIGlmICghKG5ldyA9IHdoaW5lX21hbGxvYyhzaXplKSkpCisJcmV0dXJuOworICAgICAgaWYgKGJ1ZikKKwlmcmVlKGJ1Zik7CisgICAgICBidWYgPSBuZXc7CisgICAgICBidWZfc2l6ZSA9IHNpemU7CisgICAgfQorCisgIGJ1Zi0+YWN0aW9uID0gYWN0aW9uOworICBidWYtPmh3YWRkcl9sZW4gPSBsZWFzZS0+aHdhZGRyX2xlbjsKKyAgYnVmLT5od2FkZHJfdHlwZSA9IGxlYXNlLT5od2FkZHJfdHlwZTsKKyAgYnVmLT5jbGlkX2xlbiA9IGNsaWRfbGVuOworICBidWYtPnZjbGFzc19sZW4gPSB2Y2xhc3NfbGVuOworICBidWYtPnVjbGFzc19sZW4gPSB1Y2xhc3NfbGVuOworICBidWYtPnNob3N0X2xlbiA9IHNob3N0X2xlbjsKKyAgYnVmLT5ob3N0bmFtZV9sZW4gPSBob3N0bmFtZV9sZW47CisgIGJ1Zi0+YWRkciA9IGxlYXNlLT5hZGRyOworICBidWYtPmdpYWRkciA9IGxlYXNlLT5naWFkZHI7CisgIG1lbWNweShidWYtPmh3YWRkciwgbGVhc2UtPmh3YWRkciwgbGVhc2UtPmh3YWRkcl9sZW4pOworICBidWYtPmludGVyZmFjZVswXSA9IDA7CisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgIGlmIChsZWFzZS0+bGFzdF9pbnRlcmZhY2UgIT0gMCkKKyAgICB7CisgICAgICBzdHJ1Y3QgaWZyZXEgaWZyOworICAgICAgaWZyLmlmcl9pZmluZGV4ID0gbGVhc2UtPmxhc3RfaW50ZXJmYWNlOworICAgICAgaWYgKGlvY3RsKGRhZW1vbi0+ZGhjcGZkLCBTSU9DR0lGTkFNRSwgJmlmcikgIT0gLTEpCisJc3RybmNweShidWYtPmludGVyZmFjZSwgaWZyLmlmcl9uYW1lLCBJRl9OQU1FU0laRSk7CisgICAgfQorI2Vsc2UKKyAgaWYgKGxlYXNlLT5sYXN0X2ludGVyZmFjZSAhPSAwKQorICAgIGlmX2luZGV4dG9uYW1lKGxlYXNlLT5sYXN0X2ludGVyZmFjZSwgYnVmLT5pbnRlcmZhY2UpOworI2VuZGlmCisgIAorI2lmZGVmIEhBVkVfQlJPS0VOX1JUQyAKKyAgYnVmLT5sZW5ndGggPSBsZWFzZS0+bGVuZ3RoOworI2Vsc2UKKyAgYnVmLT5leHBpcmVzID0gbGVhc2UtPmV4cGlyZXM7CisjZW5kaWYKKyAgYnVmLT5yZW1haW5pbmdfdGltZSA9ICh1bnNpZ25lZCBpbnQpZGlmZnRpbWUobGVhc2UtPmV4cGlyZXMsIG5vdyk7CisKKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopKGJ1ZisxKTsKKyAgaWYgKGNsaWRfbGVuICE9IDApCisgICAgeworICAgICAgbWVtY3B5KHAsIGxlYXNlLT5jbGlkLCBjbGlkX2xlbik7CisgICAgICBwICs9IGNsaWRfbGVuOworICAgIH0KKyAgaWYgKHZjbGFzc19sZW4gIT0gMCkKKyAgICB7CisgICAgICBtZW1jcHkocCwgbGVhc2UtPnZlbmRvcmNsYXNzLCB2Y2xhc3NfbGVuKTsKKyAgICAgIHAgKz0gdmNsYXNzX2xlbjsKKyAgICB9CisgIGlmICh1Y2xhc3NfbGVuICE9IDApCisgICAgeworICAgICAgbWVtY3B5KHAsIGxlYXNlLT51c2VyY2xhc3MsIHVjbGFzc19sZW4pOworICAgICAgcCArPSB1Y2xhc3NfbGVuOworICAgIH0KKyAgaWYgKHNob3N0X2xlbiAhPSAwKQorICAgIHsKKyAgICAgIG1lbWNweShwLCBsZWFzZS0+c3VwcGxpZWRfaG9zdG5hbWUsIHNob3N0X2xlbik7CisgICAgICBwICs9IHNob3N0X2xlbjsKKyAgICB9IAorICBpZiAoaG9zdG5hbWVfbGVuICE9IDApCisgICAgeworICAgICAgbWVtY3B5KHAsIGhvc3RuYW1lLCBob3N0bmFtZV9sZW4pOworICAgICAgcCArPSBob3N0bmFtZV9sZW47CisgICAgfQorCisgIGJ5dGVzX2luX2J1ZiA9IHAgLSAodW5zaWduZWQgY2hhciAqKWJ1ZjsKK30KKworaW50IGhlbHBlcl9idWZfZW1wdHkodm9pZCkKK3sKKyAgcmV0dXJuIGJ5dGVzX2luX2J1ZiA9PSAwOworfQorCit2b2lkIGhlbHBlcl93cml0ZSh2b2lkKQoreworICBzc2l6ZV90IHJjOworCisgIGlmIChieXRlc19pbl9idWYgPT0gMCkKKyAgICByZXR1cm47CisgIAorICBpZiAoKHJjID0gd3JpdGUoZGFlbW9uLT5oZWxwZXJmZCwgYnVmLCBieXRlc19pbl9idWYpKSAhPSAtMSkKKyAgICB7CisgICAgICBpZiAoYnl0ZXNfaW5fYnVmICE9IChzaXplX3QpcmMpCisJbWVtbW92ZShidWYsIGJ1ZiArIHJjLCBieXRlc19pbl9idWYgLSByYyk7IAorICAgICAgYnl0ZXNfaW5fYnVmIC09IHJjOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpCisJcmV0dXJuOworICAgICAgYnl0ZXNfaW5fYnVmID0gMDsKKyAgICB9Cit9CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL3NyYy9sZWFzZS5jIGIvc3JjL2xlYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzAyMWQxNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9sZWFzZS5jCkBAIC0wLDAgKzEsNjIyIEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDA5IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfREhDUAorCitzdGF0aWMgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlcyA9IE5VTEwsICpvbGRfbGVhc2VzID0gTlVMTDsKK3N0YXRpYyBpbnQgZG5zX2RpcnR5LCBmaWxlX2RpcnR5LCBsZWFzZXNfbGVmdDsKKwordm9pZCBsZWFzZV9pbml0KHRpbWVfdCBub3cpCit7CisgIHVuc2lnbmVkIGxvbmcgZWk7CisgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgaW50IGNsaWRfbGVuLCBod19sZW4sIGh3X3R5cGU7CisgIEZJTEUgKmxlYXNlc3RyZWFtOworICAKKyAgLyogVGhlc2UgdHdvIGVhY2ggaG9sZCBhIERIQ1Agb3B0aW9uIG1heCBzaXplIDI1NQorICAgICBhbmQgZ2V0IGEgdGVybWluYXRpbmcgemVybyBhZGRlZCAqLworICBkYWVtb24tPmRoY3BfYnVmZiA9IHNhZmVfbWFsbG9jKDI1Nik7CisgIGRhZW1vbi0+ZGhjcF9idWZmMiA9IHNhZmVfbWFsbG9jKDI1Nik7IAorICAKKyAgbGVhc2VzX2xlZnQgPSBkYWVtb24tPmRoY3BfbWF4OworCisgIGlmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTEVBU0VfUk8pCisgICAgeworICAgICAgLyogcnVuICI8bGVhc2VfY2hhbmdlX3NjcmlwdD4gaW5pdCIgb25jZSB0byBnZXQgdGhlCisJIGluaXRpYWwgc3RhdGUgb2YgdGhlIGRhdGFiYXNlLiBJZiBsZWFzZWZpbGUtcm8gaXMKKwkgc2V0IHdpdGhvdXQgYSBzY3JpcHQsIHdlIGp1c3QgZG8gd2l0aG91dCBhbnkgCisJIGxlYXNlIGRhdGFiYXNlLiAqLworI2lmZGVmIEhBVkVfU0NSSVBUCisgICAgICBpZiAoZGFlbW9uLT5sZWFzZV9jaGFuZ2VfY29tbWFuZCkKKwl7CisJICBzdHJjcHkoZGFlbW9uLT5kaGNwX2J1ZmYsIGRhZW1vbi0+bGVhc2VfY2hhbmdlX2NvbW1hbmQpOworCSAgc3RyY2F0KGRhZW1vbi0+ZGhjcF9idWZmLCAiIGluaXQiKTsKKwkgIGxlYXNlc3RyZWFtID0gcG9wZW4oZGFlbW9uLT5kaGNwX2J1ZmYsICJyIik7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJeworICAgICAgICAgIGZpbGVfZGlydHkgPSBkbnNfZGlydHkgPSAwOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogTk9URTogbmVlZCBhKyBtb2RlIHRvIGNyZWF0ZSBmaWxlIGlmIGl0IGRvZXNuJ3QgZXhpc3QgKi8KKyAgICAgIGxlYXNlc3RyZWFtID0gZGFlbW9uLT5sZWFzZV9zdHJlYW0gPSBmb3BlbihkYWVtb24tPmxlYXNlX2ZpbGUsICJhKyIpOworICAgICAgCisgICAgICBpZiAoIWxlYXNlc3RyZWFtKQorCWRpZShfKCJjYW5ub3Qgb3BlbiBvciBjcmVhdGUgbGVhc2UgZmlsZSAlczogJXMiKSwgZGFlbW9uLT5sZWFzZV9maWxlLCBFQ19GSUxFKTsKKyAgICAgIAorICAgICAgLyogYSsgbW9kZSBsZWF2ZXMgcG9pbnRlciBhdCBlbmQuICovCisgICAgICByZXdpbmQobGVhc2VzdHJlYW0pOworICAgIH0KKyAgCisgIC8qIGNsaWVudC1pZCBtYXggbGVuZ3RoIGlzIDI1NSB3aGljaCBpcyAyNTUqMiBkaWdpdHMgKyAyNTQgY29sb25zIAorICAgICBib3Jyb3cgRE5TIHBhY2tldCBidWZmZXIgd2hpY2ggaXMgYWx3YXlzIGxhcmdlciB0aGFuIDEwMDAgYnl0ZXMgKi8KKyAgaWYgKGxlYXNlc3RyZWFtKQorICAgIHdoaWxlIChmc2NhbmYobGVhc2VzdHJlYW0sICIlbHUgJTI1NXMgJTE2cyAlMjU1cyAlNzY0cyIsCisJCSAgJmVpLCBkYWVtb24tPmRoY3BfYnVmZjIsIGRhZW1vbi0+bmFtZWJ1ZmYsIAorCQkgIGRhZW1vbi0+ZGhjcF9idWZmLCBkYWVtb24tPnBhY2tldCkgPT0gNSkKKyAgICAgIHsKKwlod19sZW4gPSBwYXJzZV9oZXgoZGFlbW9uLT5kaGNwX2J1ZmYyLCAodW5zaWduZWQgY2hhciAqKWRhZW1vbi0+ZGhjcF9idWZmMiwgREhDUF9DSEFERFJfTUFYLCBOVUxMLCAmaHdfdHlwZSk7CisJLyogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBubyBleHBsaWN0IE1BQyBhZGRyZXNzIHR5cGUgbWVhbnMgZXRoZXIuICovCisJaWYgKGh3X3R5cGUgPT0gMCAmJiBod19sZW4gIT0gMCkKKwkgIGh3X3R5cGUgPSBBUlBIUkRfRVRIRVI7CisJCisJYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoZGFlbW9uLT5uYW1lYnVmZik7CisJCisJLyogZGVjb2RlIGhleCBpbiBwbGFjZSAqLworCWNsaWRfbGVuID0gMDsKKwlpZiAoc3RyY21wKGRhZW1vbi0+cGFja2V0LCAiKiIpICE9IDApCisJICBjbGlkX2xlbiA9IHBhcnNlX2hleChkYWVtb24tPnBhY2tldCwgKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPnBhY2tldCwgMjU1LCBOVUxMLCBOVUxMKTsKKwkKKwlpZiAoIShsZWFzZSA9IGxlYXNlX2FsbG9jYXRlKGFkZHIpKSkKKwkgIGRpZSAoXygidG9vIG1hbnkgc3RvcmVkIGxlYXNlcyIpLCBOVUxMLCBFQ19NSVNDKTsKKyAgICAgICAJCisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDCisJaWYgKGVpICE9IDApCisJICBsZWFzZS0+ZXhwaXJlcyA9ICh0aW1lX3QpZWkgKyBub3c7CisJZWxzZQorCSAgbGVhc2UtPmV4cGlyZXMgPSAodGltZV90KTA7CisJbGVhc2UtPmxlbmd0aCA9IGVpOworI2Vsc2UKKwkvKiBzdHJpY3RseSB0aW1lX3QgaXMgb3BhcXVlLCBidXQgdGhpcyBoYWNrIHNob3VsZCB3b3JrIG9uIGFsbCBzYW5lIHN5c3RlbXMsCisJICAgZXZlbiB3aGVuIHNpemVvZih0aW1lX3QpID09IDggKi8KKwlsZWFzZS0+ZXhwaXJlcyA9ICh0aW1lX3QpZWk7CisjZW5kaWYKKwkKKwlsZWFzZV9zZXRfaHdhZGRyKGxlYXNlLCAodW5zaWduZWQgY2hhciAqKWRhZW1vbi0+ZGhjcF9idWZmMiwgKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPnBhY2tldCwgaHdfbGVuLCBod190eXBlLCBjbGlkX2xlbik7CisJCisJaWYgKHN0cmNtcChkYWVtb24tPmRoY3BfYnVmZiwgIioiKSAhPSAgMCkKKwkgIGxlYXNlX3NldF9ob3N0bmFtZShsZWFzZSwgZGFlbW9uLT5kaGNwX2J1ZmYsIDApOworCisJLyogc2V0IHRoZXNlIGNvcnJlY3RseTogdGhlICJvbGQiIGV2ZW50cyBhcmUgZ2VuZXJhdGVkIGxhdGVyIGZyb20KKwkgICB0aGUgc3RhcnR1cCBzeW50aGVzaXNlZCBTSUdIVVAuICovCisJbGVhc2UtPm5ldyA9IGxlYXNlLT5jaGFuZ2VkID0gMDsKKyAgICAgIH0KKyAgCisjaWZkZWYgSEFWRV9TQ1JJUFQKKyAgaWYgKCFkYWVtb24tPmxlYXNlX3N0cmVhbSkKKyAgICB7CisgICAgICBpbnQgcmMgPSAwOworCisgICAgICAvKiBzaGVsbCByZXR1cm5zIDEyNyBmb3IgImNvbW1hbmQgbm90IGZvdW5kIiwgMTI2IGZvciBiYWQgcGVybWlzc2lvbnMuICovCisgICAgICBpZiAoIWxlYXNlc3RyZWFtIHx8IChyYyA9IHBjbG9zZShsZWFzZXN0cmVhbSkpID09IC0xIHx8IFdFWElUU1RBVFVTKHJjKSA9PSAxMjcgfHwgV0VYSVRTVEFUVVMocmMpID09IDEyNikKKwl7CisJICBpZiAoV0VYSVRTVEFUVVMocmMpID09IDEyNykKKwkgICAgZXJybm8gPSBFTk9FTlQ7CisJICBlbHNlIGlmIChXRVhJVFNUQVRVUyhyYykgPT0gMTI2KQorCSAgICBlcnJubyA9IEVBQ0NFUzsKKwkgIGRpZShfKCJjYW5ub3QgcnVuIGxlYXNlLWluaXQgc2NyaXB0ICVzOiAlcyIpLCBkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kLCBFQ19GSUxFKTsKKwl9CisgICAgICAKKyAgICAgIGlmIChXRVhJVFNUQVRVUyhyYykgIT0gMCkKKwl7CisJICBzcHJpbnRmKGRhZW1vbi0+ZGhjcF9idWZmLCAiJWQiLCBXRVhJVFNUQVRVUyhyYykpOworCSAgZGllKF8oImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIpLCBkYWVtb24tPmRoY3BfYnVmZiwgV0VYSVRTVEFUVVMocmMpICsgRUNfSU5JVF9PRkZTRVQpOworCX0KKyAgICB9CisjZW5kaWYKKworICAvKiBTb21lIGxlYXNlcyBtYXkgaGF2ZSBleHBpcmVkICovCisgIGZpbGVfZGlydHkgPSAwOworICBsZWFzZV9wcnVuZShOVUxMLCBub3cpOworICBkbnNfZGlydHkgPSAxOworfQorCit2b2lkIGxlYXNlX3VwZGF0ZV9mcm9tX2NvbmZpZ3Modm9pZCkKK3sKKyAgLyogY2hhbmdlcyB0byB0aGUgY29uZmlnIG1heSBjaGFuZ2UgY3VycmVudCBsZWFzZXMuICovCisgIAorICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnOworICBjaGFyICpuYW1lOworCisgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgIGlmICgoY29uZmlnID0gZmluZF9jb25maWcoZGFlbW9uLT5kaGNwX2NvbmYsIE5VTEwsIGxlYXNlLT5jbGlkLCBsZWFzZS0+Y2xpZF9sZW4sIAorCQkJICAgICAgbGVhc2UtPmh3YWRkciwgbGVhc2UtPmh3YWRkcl9sZW4sIGxlYXNlLT5od2FkZHJfdHlwZSwgTlVMTCkpICYmIAorCShjb25maWctPmZsYWdzICYgQ09ORklHX05BTUUpICYmCisJKCEoY29uZmlnLT5mbGFncyAmIENPTkZJR19BRERSKSB8fCBjb25maWctPmFkZHIuc19hZGRyID09IGxlYXNlLT5hZGRyLnNfYWRkcikpCisgICAgICBsZWFzZV9zZXRfaG9zdG5hbWUobGVhc2UsIGNvbmZpZy0+aG9zdG5hbWUsIDEpOworICAgIGVsc2UgaWYgKChuYW1lID0gaG9zdF9mcm9tX2RucyhsZWFzZS0+YWRkcikpKQorICAgICAgbGVhc2Vfc2V0X2hvc3RuYW1lKGxlYXNlLCBuYW1lLCAxKTsgLyogdXBkYXRlcyBhdXRoIGZsYWcgb25seSAqLworfQorCitzdGF0aWMgdm9pZCBvdXJwcmludGYoaW50ICplcnJwLCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKyAgCisgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOworICBpZiAoISgqZXJycCkgJiYgdmZwcmludGYoZGFlbW9uLT5sZWFzZV9zdHJlYW0sIGZvcm1hdCwgYXApIDwgMCkKKyAgICAqZXJycCA9IGVycm5vOworICB2YV9lbmQoYXApOworfQorCit2b2lkIGxlYXNlX3VwZGF0ZV9maWxlKHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgdGltZV90IG5leHRfZXZlbnQ7CisgIGludCBpLCBlcnIgPSAwOworCisgIGlmIChmaWxlX2RpcnR5ICE9IDAgJiYgZGFlbW9uLT5sZWFzZV9zdHJlYW0pCisgICAgeworICAgICAgZXJybm8gPSAwOworICAgICAgcmV3aW5kKGRhZW1vbi0+bGVhc2Vfc3RyZWFtKTsKKyAgICAgIGlmIChlcnJubyAhPSAwIHx8IGZ0cnVuY2F0ZShmaWxlbm8oZGFlbW9uLT5sZWFzZV9zdHJlYW0pLCAwKSAhPSAwKQorCWVyciA9IGVycm5vOworICAgICAgCisgICAgICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKwl7CisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDCisJICBvdXJwcmludGYoJmVyciwgIiV1ICIsIGxlYXNlLT5sZW5ndGgpOworI2Vsc2UKKwkgIG91cnByaW50ZigmZXJyLCAiJWx1ICIsICh1bnNpZ25lZCBsb25nKWxlYXNlLT5leHBpcmVzKTsKKyNlbmRpZgorCSAgaWYgKGxlYXNlLT5od2FkZHJfdHlwZSAhPSBBUlBIUkRfRVRIRVIgfHwgbGVhc2UtPmh3YWRkcl9sZW4gPT0gMCkgCisJICAgIG91cnByaW50ZigmZXJyLCAiJS4yeC0iLCBsZWFzZS0+aHdhZGRyX3R5cGUpOworCSAgZm9yIChpID0gMDsgaSA8IGxlYXNlLT5od2FkZHJfbGVuOyBpKyspCisJICAgIHsKKwkgICAgICBvdXJwcmludGYoJmVyciwgIiUuMngiLCBsZWFzZS0+aHdhZGRyW2ldKTsKKwkgICAgICBpZiAoaSAhPSBsZWFzZS0+aHdhZGRyX2xlbiAtIDEpCisJCW91cnByaW50ZigmZXJyLCAiOiIpOworCSAgICB9CisKKwkgIG91cnByaW50ZigmZXJyLCAiICVzICIsIGluZXRfbnRvYShsZWFzZS0+YWRkcikpOworCSAgb3VycHJpbnRmKCZlcnIsICIlcyAiLCBsZWFzZS0+aG9zdG5hbWUgPyBsZWFzZS0+aG9zdG5hbWUgOiAiKiIpOworCSAgCSAgCisJICBpZiAobGVhc2UtPmNsaWQgJiYgbGVhc2UtPmNsaWRfbGVuICE9IDApCisJICAgIHsKKwkgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVhc2UtPmNsaWRfbGVuIC0gMTsgaSsrKQorCQlvdXJwcmludGYoJmVyciwgIiUuMng6IiwgbGVhc2UtPmNsaWRbaV0pOworCSAgICAgIG91cnByaW50ZigmZXJyLCAiJS4yeFxuIiwgbGVhc2UtPmNsaWRbaV0pOworCSAgICB9CisJICBlbHNlCisJICAgIG91cnByaW50ZigmZXJyLCAiKlxuIik7CSAgCisJfQorICAgICAgCisgICAgICBpZiAoZmZsdXNoKGRhZW1vbi0+bGVhc2Vfc3RyZWFtKSAhPSAwIHx8CisJICBmc3luYyhmaWxlbm8oZGFlbW9uLT5sZWFzZV9zdHJlYW0pKSA8IDApCisJZXJyID0gZXJybm87CisgICAgICAKKyAgICAgIGlmICghZXJyKQorCWZpbGVfZGlydHkgPSAwOworICAgIH0KKyAgCisgIC8qIFNldCBhbGFybSBmb3Igd2hlbiB0aGUgZmlyc3QgbGVhc2UgZXhwaXJlcyArIHNsb3AuICovCisgIGZvciAobmV4dF9ldmVudCA9IDAsIGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKyAgICBpZiAobGVhc2UtPmV4cGlyZXMgIT0gMCAmJgorCShuZXh0X2V2ZW50ID09IDAgfHwgZGlmZnRpbWUobmV4dF9ldmVudCwgbGVhc2UtPmV4cGlyZXMgKyAxMCkgPiAwLjApKQorICAgICAgbmV4dF9ldmVudCA9IGxlYXNlLT5leHBpcmVzICsgMTA7CisgICAKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBpZiAobmV4dF9ldmVudCA9PSAwIHx8IGRpZmZ0aW1lKG5leHRfZXZlbnQsIExFQVNFX1JFVFJZICsgbm93KSA+IDAuMCkKKwluZXh0X2V2ZW50ID0gTEVBU0VfUkVUUlkgKyBub3c7CisgICAgICAKKyAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0VSUiwgXygiZmFpbGVkIHRvIHdyaXRlICVzOiAlcyAocmV0cnkgaW4gJXVzKSIpLCAKKwkJZGFlbW9uLT5sZWFzZV9maWxlLCBzdHJlcnJvcihlcnIpLAorCQkodW5zaWduZWQgaW50KWRpZmZ0aW1lKG5leHRfZXZlbnQsIG5vdykpOworICAgIH0KKworICBpZiAobmV4dF9ldmVudCAhPSAwKQorICAgIGFsYXJtKCh1bnNpZ25lZClkaWZmdGltZShuZXh0X2V2ZW50LCBub3cpKTsgCit9CisKK3ZvaWQgbGVhc2VfdXBkYXRlX2Rucyh2b2lkKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIAorICBpZiAoZGFlbW9uLT5wb3J0ICE9IDAgJiYgZG5zX2RpcnR5KQorICAgIHsKKyAgICAgIGNhY2hlX3VuaGFzaF9kaGNwKCk7CisgICAgICAKKyAgICAgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorCXsKKwkgIGlmIChsZWFzZS0+ZnFkbikKKwkgICAgY2FjaGVfYWRkX2RoY3BfZW50cnkobGVhc2UtPmZxZG4sICZsZWFzZS0+YWRkciwgbGVhc2UtPmV4cGlyZXMpOworCSAgICAgCisJICBpZiAoIShkYWVtb24tPm9wdGlvbnMgJiBPUFRfREhDUF9GUUROKSAmJiBsZWFzZS0+aG9zdG5hbWUpCisJICAgIGNhY2hlX2FkZF9kaGNwX2VudHJ5KGxlYXNlLT5ob3N0bmFtZSwgJmxlYXNlLT5hZGRyLCBsZWFzZS0+ZXhwaXJlcyk7CisJfQorICAgICAgCisgICAgICBkbnNfZGlydHkgPSAwOworICAgIH0KK30KKwordm9pZCBsZWFzZV9wcnVuZShzdHJ1Y3QgZGhjcF9sZWFzZSAqdGFyZ2V0LCB0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsICp0bXAsICoqdXA7CisKKyAgZm9yIChsZWFzZSA9IGxlYXNlcywgdXAgPSAmbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSB0bXApCisgICAgeworICAgICAgdG1wID0gbGVhc2UtPm5leHQ7CisgICAgICBpZiAoKGxlYXNlLT5leHBpcmVzICE9IDAgJiYgZGlmZnRpbWUobm93LCBsZWFzZS0+ZXhwaXJlcykgPiAwKSB8fCBsZWFzZSA9PSB0YXJnZXQpCisJeworCSAgZmlsZV9kaXJ0eSA9IDE7CisJICBpZiAobGVhc2UtPmhvc3RuYW1lKQorCSAgICBkbnNfZGlydHkgPSAxOworCSAgCisJICAqdXAgPSBsZWFzZS0+bmV4dDsgLyogdW5saW5rICovCisJICAKKwkgIC8qIFB1dCBvbiBvbGRfbGVhc2VzIGxpc3QgJ3RpbGwgd2UKKwkgICAgIGNhbiBydW4gdGhlIHNjcmlwdCAqLworCSAgbGVhc2UtPm5leHQgPSBvbGRfbGVhc2VzOworCSAgb2xkX2xlYXNlcyA9IGxlYXNlOworCSAgCisJICBsZWFzZXNfbGVmdCsrOworCX0KKyAgICAgIGVsc2UKKwl1cCA9ICZsZWFzZS0+bmV4dDsKKyAgICB9Cit9IAorCQorICAKK3N0cnVjdCBkaGNwX2xlYXNlICpsZWFzZV9maW5kX2J5X2NsaWVudCh1bnNpZ25lZCBjaGFyICpod2FkZHIsIGludCBod19sZW4sIGludCBod190eXBlLAorCQkJCQl1bnNpZ25lZCBjaGFyICpjbGlkLCBpbnQgY2xpZF9sZW4pCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKworICBpZiAoY2xpZCkKKyAgICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKyAgICAgIGlmIChsZWFzZS0+Y2xpZCAmJiBjbGlkX2xlbiA9PSBsZWFzZS0+Y2xpZF9sZW4gJiYKKwkgIG1lbWNtcChjbGlkLCBsZWFzZS0+Y2xpZCwgY2xpZF9sZW4pID09IDApCisJcmV0dXJuIGxlYXNlOworICAKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCQorICAgIGlmICgoIWxlYXNlLT5jbGlkIHx8ICFjbGlkKSAmJiAKKwlod19sZW4gIT0gMCAmJiAKKwlsZWFzZS0+aHdhZGRyX2xlbiA9PSBod19sZW4gJiYKKwlsZWFzZS0+aHdhZGRyX3R5cGUgPT0gaHdfdHlwZSAmJgorCW1lbWNtcChod2FkZHIsIGxlYXNlLT5od2FkZHIsIGh3X2xlbikgPT0gMCkKKyAgICAgIHJldHVybiBsZWFzZTsKKyAgCisgIHJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2VfZmluZF9ieV9hZGRyKHN0cnVjdCBpbl9hZGRyIGFkZHIpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKworICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKyAgICBpZiAobGVhc2UtPmFkZHIuc19hZGRyID09IGFkZHIuc19hZGRyKQorICAgICAgcmV0dXJuIGxlYXNlOworICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlX2FsbG9jYXRlKHN0cnVjdCBpbl9hZGRyIGFkZHIpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgaWYgKCFsZWFzZXNfbGVmdCB8fCAhKGxlYXNlID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9sZWFzZSkpKSkKKyAgICByZXR1cm4gTlVMTDsKKworICBtZW1zZXQobGVhc2UsIDAsIHNpemVvZihzdHJ1Y3QgZGhjcF9sZWFzZSkpOworICBsZWFzZS0+bmV3ID0gMTsKKyAgbGVhc2UtPmFkZHIgPSBhZGRyOworICBsZWFzZS0+aHdhZGRyX2xlbiA9IDI1NjsgLyogaWxsZWdhbCB2YWx1ZSAqLworICBsZWFzZS0+ZXhwaXJlcyA9IDE7CisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDCisgIGxlYXNlLT5sZW5ndGggPSAweGZmZmZmZmZmOyAvKiBpbGxlZ2FsIHZhbHVlICovCisjZW5kaWYKKyAgbGVhc2UtPm5leHQgPSBsZWFzZXM7CisgIGxlYXNlcyA9IGxlYXNlOworICAKKyAgZmlsZV9kaXJ0eSA9IDE7CisgIGxlYXNlc19sZWZ0LS07CisKKyAgcmV0dXJuIGxlYXNlOworfQorCit2b2lkIGxlYXNlX3NldF9leHBpcmVzKHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgdW5zaWduZWQgaW50IGxlbiwgdGltZV90IG5vdykKK3sKKyAgdGltZV90IGV4cCA9IG5vdyArICh0aW1lX3QpbGVuOworICAKKyAgaWYgKGxlbiA9PSAweGZmZmZmZmZmKQorICAgIHsKKyAgICAgIGV4cCA9IDA7CisgICAgICBsZW4gPSAwOworICAgIH0KKyAgCisgIGlmIChleHAgIT0gbGVhc2UtPmV4cGlyZXMpCisgICAgeworICAgICAgZG5zX2RpcnR5ID0gMTsKKyAgICAgIGxlYXNlLT5leHBpcmVzID0gZXhwOworI2lmbmRlZiBIQVZFX0JST0tFTl9SVEMKKyAgICAgIGxlYXNlLT5hdXhfY2hhbmdlZCA9IGZpbGVfZGlydHkgPSAxOworI2VuZGlmCisgICAgfQorICAKKyNpZmRlZiBIQVZFX0JST0tFTl9SVEMKKyAgaWYgKGxlbiAhPSBsZWFzZS0+bGVuZ3RoKQorICAgIHsKKyAgICAgIGxlYXNlLT5sZW5ndGggPSBsZW47CisgICAgICBsZWFzZS0+YXV4X2NoYW5nZWQgPSBmaWxlX2RpcnR5ID0gMTsgCisgICAgfQorI2VuZGlmCit9IAorCit2b2lkIGxlYXNlX3NldF9od2FkZHIoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCB1bnNpZ25lZCBjaGFyICpod2FkZHIsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCBod19sZW4sIGludCBod190eXBlLCBpbnQgY2xpZF9sZW4pCit7CisgIGlmIChod19sZW4gIT0gbGVhc2UtPmh3YWRkcl9sZW4gfHwKKyAgICAgIGh3X3R5cGUgIT0gbGVhc2UtPmh3YWRkcl90eXBlIHx8IAorICAgICAgKGh3X2xlbiAhPSAwICYmIG1lbWNtcChsZWFzZS0+aHdhZGRyLCBod2FkZHIsIGh3X2xlbikgIT0gMCkpCisgICAgeworICAgICAgbWVtY3B5KGxlYXNlLT5od2FkZHIsIGh3YWRkciwgaHdfbGVuKTsKKyAgICAgIGxlYXNlLT5od2FkZHJfbGVuID0gaHdfbGVuOworICAgICAgbGVhc2UtPmh3YWRkcl90eXBlID0gaHdfdHlwZTsKKyAgICAgIGxlYXNlLT5jaGFuZ2VkID0gZmlsZV9kaXJ0eSA9IDE7IC8qIHJ1biBzY3JpcHQgb24gY2hhbmdlICovCisgICAgfQorCisgIC8qIG9ubHkgdXBkYXRlIGNsaWQgd2hlbiBvbmUgaXMgYXZhaWxhYmxlLCBzdG9wcyBwYWNrZXRzCisgICAgIHdpdGhvdXQgYSBjbGlkIHJlbW92aW5nIHRoZSByZWNvcmQuIExlYXNlIGluaXQgdXNlcworICAgICBjbGlkX2xlbiA9PSAwIGZvciBubyBjbGlkLiAqLworICBpZiAoY2xpZF9sZW4gIT0gMCAmJiBjbGlkKQorICAgIHsKKyAgICAgIGlmICghbGVhc2UtPmNsaWQpCisJbGVhc2UtPmNsaWRfbGVuID0gMDsKKworICAgICAgaWYgKGxlYXNlLT5jbGlkX2xlbiAhPSBjbGlkX2xlbikKKwl7CisJICBsZWFzZS0+YXV4X2NoYW5nZWQgPSBmaWxlX2RpcnR5ID0gMTsKKwkgIGZyZWUobGVhc2UtPmNsaWQpOworCSAgaWYgKCEobGVhc2UtPmNsaWQgPSB3aGluZV9tYWxsb2MoY2xpZF9sZW4pKSkKKwkgICAgcmV0dXJuOworCX0KKyAgICAgIGVsc2UgaWYgKG1lbWNtcChsZWFzZS0+Y2xpZCwgY2xpZCwgY2xpZF9sZW4pICE9IDApCisJbGVhc2UtPmF1eF9jaGFuZ2VkID0gZmlsZV9kaXJ0eSA9IDE7CisJICAKKyAgICAgIGxlYXNlLT5jbGlkX2xlbiA9IGNsaWRfbGVuOworICAgICAgbWVtY3B5KGxlYXNlLT5jbGlkLCBjbGlkLCBjbGlkX2xlbik7CisgICAgfQorCit9CisKK3N0YXRpYyB2b2lkIGtpbGxfbmFtZShzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UpCit7CisgIC8qIHJ1biBzY3JpcHQgdG8gc2F5IHdlIGxvc3Qgb3VyIG9sZCBuYW1lICovCisgIAorICAvKiB0aGlzIHNob3VsZG4ndCBoYXBwZW4gdW5sZXNzIHVwZGF0ZXMgYXJlIHZlcnkgcXVpY2sgYW5kIHRoZQorICAgICBzY3JpcHQgdmVyeSBzbG93LCB3ZSBqdXN0IGF2b2lkIGEgbWVtb3J5IGxlYWsgaWYgaXQgZG9lcy4gKi8KKyAgZnJlZShsZWFzZS0+b2xkX2hvc3RuYW1lKTsKKyAgCisgIC8qIElmIHdlIGtub3cgdGhlIGZxZG4sIHBhc3MgdGhhdC4gVGhlIGhlbHBlciB3aWxsIGRlcml2ZSB0aGUKKyAgICAgdW5xdWFsaWZpZWQgbmFtZSBmcm9tIGl0LCBmcmVlIHRoZSB1bnF1bGFpZmllZCBuYW1lIGhlcmUuICovCisKKyAgaWYgKGxlYXNlLT5mcWRuKQorICAgIHsKKyAgICAgIGxlYXNlLT5vbGRfaG9zdG5hbWUgPSBsZWFzZS0+ZnFkbjsKKyAgICAgIGZyZWUobGVhc2UtPmhvc3RuYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICBsZWFzZS0+b2xkX2hvc3RuYW1lID0gbGVhc2UtPmhvc3RuYW1lOworCisgIGxlYXNlLT5ob3N0bmFtZSA9IGxlYXNlLT5mcWRuID0gTlVMTDsKK30KKwordm9pZCBsZWFzZV9zZXRfaG9zdG5hbWUoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBjaGFyICpuYW1lLCBpbnQgYXV0aCkKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlX3RtcDsKKyAgY2hhciAqbmV3X25hbWUgPSBOVUxMLCAqbmV3X2ZxZG4gPSBOVUxMOworICAKKyAgaWYgKGxlYXNlLT5ob3N0bmFtZSAmJiBuYW1lICYmIGhvc3RuYW1lX2lzZXF1YWwobGVhc2UtPmhvc3RuYW1lLCBuYW1lKSkKKyAgICB7CisgICAgICBsZWFzZS0+YXV0aF9uYW1lID0gYXV0aDsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIAorICBpZiAoIW5hbWUgJiYgIWxlYXNlLT5ob3N0bmFtZSkKKyAgICByZXR1cm47CisKKyAgLyogSWYgYSBtYWNoaW5lIHR1cm5zIHVwIG9uIGEgbmV3IG5ldCB3aXRob3V0IGRyb3BwaW5nIHRoZSBvbGQgbGVhc2UsCisgICAgIG9yIHR3byBtYWNoaW5lcyBjbGFpbSB0aGUgc2FtZSBuYW1lLCB0aGVuIHdlIGVuZCB1cCB3aXRoIHR3byBpbnRlcmZhY2VzIHdpdGgKKyAgICAgdGhlIHNhbWUgbmFtZS4gQ2hlY2sgZm9yIHRoYXQgaGVyZSBhbmQgcmVtb3ZlIHRoZSBuYW1lIGZyb20gdGhlIG9sZCBsZWFzZS4KKyAgICAgRG9uJ3QgYWxsb3cgYSBuYW1lIGZyb20gdGhlIGNsaWVudCB0byBvdmVycmlkZSBhIG5hbWUgZnJvbSBkbnNtYXNxIGNvbmZpZy4gKi8KKyAgCisgIGlmIChuYW1lKQorICAgIHsKKyAgICAgIGlmICgobmV3X25hbWUgPSB3aGluZV9tYWxsb2Moc3RybGVuKG5hbWUpICsgMSkpKQorCXsKKwkgIGNoYXIgKnN1ZmZpeCA9IGdldF9kb21haW4obGVhc2UtPmFkZHIpOworCSAgc3RyY3B5KG5ld19uYW1lLCBuYW1lKTsKKwkgIGlmIChzdWZmaXggJiYgKG5ld19mcWRuID0gd2hpbmVfbWFsbG9jKHN0cmxlbihuZXdfbmFtZSkgKyBzdHJsZW4oc3VmZml4KSArIDIpKSkKKwkgICAgeworCSAgICAgIHN0cmNweShuZXdfZnFkbiwgbmFtZSk7CisJICAgICAgc3RyY2F0KG5ld19mcWRuLCAiLiIpOworCSAgICAgIHN0cmNhdChuZXdfZnFkbiwgc3VmZml4KTsKKwkgICAgfQorCX0KKwkgIAorICAgICAgLyogRGVwZW5kaW5nIG9uIG1vZGUsIHdlIGNoZWNrIGVpdGhlciB1bnF1YWxpZmllZCBuYW1lIG9yIEZRRE4uICovCisgICAgICBmb3IgKGxlYXNlX3RtcCA9IGxlYXNlczsgbGVhc2VfdG1wOyBsZWFzZV90bXAgPSBsZWFzZV90bXAtPm5leHQpCisJeworCSAgaWYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9ESENQX0ZRRE4pCisJICAgIHsKKwkgICAgICBpZiAoIW5ld19mcWRuIHx8ICFsZWFzZV90bXAtPmZxZG4gfHwgIWhvc3RuYW1lX2lzZXF1YWwobGVhc2VfdG1wLT5mcWRuLCBuZXdfZnFkbikgKQorCQljb250aW51ZTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKCFuZXdfbmFtZSB8fCAhbGVhc2VfdG1wLT5ob3N0bmFtZSB8fCAhaG9zdG5hbWVfaXNlcXVhbChsZWFzZV90bXAtPmhvc3RuYW1lLCBuZXdfbmFtZSkgKQorCQljb250aW51ZTsgCisJICAgIH0KKwkgIAorCSAgaWYgKGxlYXNlX3RtcC0+YXV0aF9uYW1lICYmICFhdXRoKQorCSAgICB7CisJICAgICAgZnJlZShuZXdfbmFtZSk7CisJICAgICAgZnJlZShuZXdfZnFkbik7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJCisJICBraWxsX25hbWUobGVhc2VfdG1wKTsKKwkgIGJyZWFrOworCX0KKyAgICB9CisKKyAgaWYgKGxlYXNlLT5ob3N0bmFtZSkKKyAgICBraWxsX25hbWUobGVhc2UpOworCisgIGxlYXNlLT5ob3N0bmFtZSA9IG5ld19uYW1lOworICBsZWFzZS0+ZnFkbiA9IG5ld19mcWRuOworICBsZWFzZS0+YXV0aF9uYW1lID0gYXV0aDsKKyAgCisgIGZpbGVfZGlydHkgPSAxOworICBkbnNfZGlydHkgPSAxOyAKKyAgbGVhc2UtPmNoYW5nZWQgPSAxOyAvKiBydW4gc2NyaXB0IG9uIGNoYW5nZSAqLworfQorCit2b2lkIGxlYXNlX3NldF9pbnRlcmZhY2Uoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBpbnQgaW50ZXJmYWNlKQoreworICBpZiAobGVhc2UtPmxhc3RfaW50ZXJmYWNlID09IGludGVyZmFjZSkKKyAgICByZXR1cm47CisKKyAgbGVhc2UtPmxhc3RfaW50ZXJmYWNlID0gaW50ZXJmYWNlOworICBsZWFzZS0+Y2hhbmdlZCA9IDE7Cit9CisKK3ZvaWQgcmVydW5fc2NyaXB0cyh2b2lkKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIAorICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKyAgICBsZWFzZS0+Y2hhbmdlZCA9IDE7Cit9CisKKy8qIGRlbGV0ZWQgbGVhc2VzIGdldCB0cmFuc2ZlcnJlZCB0byB0aGUgb2xkX2xlYXNlcyBsaXN0LgorICAgcmVtb3ZlIHRoZW0gaGVyZSwgYWZ0ZXIgY2FsbGluZyB0aGUgbGVhc2UgY2hhbmdlCisgICBzY3JpcHQuIEFsc28gcnVuIHRoZSBsZWFzZSBjaGFuZ2Ugc2NyaXB0IG9uIG5ldy9tb2RpZmllZCBsZWFzZXMuCisKKyAgIFJldHVybiB6ZXJvIGlmIG5vdGhpbmcgdG8gZG8uICovCitpbnQgZG9fc2NyaXB0X3J1bih0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisKKyNpZmRlZiBIQVZFX0RCVVMKKyAgLyogSWYgd2UncmUgZ29pbmcgdG8gYmUgc2VuZGluZyBEQnVzIHNpZ25hbHMsIGJ1dCB0aGUgY29ubmVjdGlvbiBpcyBub3QgeWV0IHVwLAorICAgICBkZWxheSBldmVyeXRoaW5nIHVudGlsIGl0IGlzLiAqLworICBpZiAoKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9EQlVTKSAmJiAhZGFlbW9uLT5kYnVzKQorICAgIHJldHVybiAwOworI2VuZGlmCisKKyAgaWYgKG9sZF9sZWFzZXMpCisgICAgeworICAgICAgbGVhc2UgPSBvbGRfbGVhc2VzOworICAgICAgICAgICAgICAgICAgCisgICAgICAvKiBJZiB0aGUgbGVhc2Ugc3RpbGwgaGFzIGFuIG9sZF9ob3N0bmFtZSwgZG8gdGhlICJvbGQiIGFjdGlvbiBvbiB0aGF0IGZpcnN0ICovCisgICAgICBpZiAobGVhc2UtPm9sZF9ob3N0bmFtZSkKKwl7CisjaWZkZWYgSEFWRV9TQ1JJUFQKKwkgIHF1ZXVlX3NjcmlwdChBQ1RJT05fT0xEX0hPU1ROQU1FLCBsZWFzZSwgbGVhc2UtPm9sZF9ob3N0bmFtZSwgbm93KTsKKyNlbmRpZgorCSAgZnJlZShsZWFzZS0+b2xkX2hvc3RuYW1lKTsKKwkgIGxlYXNlLT5vbGRfaG9zdG5hbWUgPSBOVUxMOworCSAgcmV0dXJuIDE7CisJfQorICAgICAgZWxzZSAKKwl7CisJICBraWxsX25hbWUobGVhc2UpOworI2lmZGVmIEhBVkVfU0NSSVBUCisJICBxdWV1ZV9zY3JpcHQoQUNUSU9OX0RFTCwgbGVhc2UsIGxlYXNlLT5vbGRfaG9zdG5hbWUsIG5vdyk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0RCVVMKKwkgIGVtaXRfZGJ1c19zaWduYWwoQUNUSU9OX0RFTCwgbGVhc2UsIGxlYXNlLT5vbGRfaG9zdG5hbWUpOworI2VuZGlmCisJICBvbGRfbGVhc2VzID0gbGVhc2UtPm5leHQ7CisJICAKKwkgIGZyZWUobGVhc2UtPm9sZF9ob3N0bmFtZSk7IAorCSAgZnJlZShsZWFzZS0+Y2xpZCk7CisJICBmcmVlKGxlYXNlLT52ZW5kb3JjbGFzcyk7CisJICBmcmVlKGxlYXNlLT51c2VyY2xhc3MpOworCSAgZnJlZShsZWFzZS0+c3VwcGxpZWRfaG9zdG5hbWUpOworCSAgZnJlZShsZWFzZSk7CisJICAgIAorCSAgcmV0dXJuIDE7IAorCX0KKyAgICB9CisgIAorICAvKiBtYWtlIHN1cmUgd2UgYW5ub3VuY2UgdGhlIGxvc3Mgb2YgYSBob3N0bmFtZSBiZWZvcmUgaXRzIG5ldyBsb2NhdGlvbi4gKi8KKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgaWYgKGxlYXNlLT5vbGRfaG9zdG5hbWUpCisgICAgICB7CQorI2lmZGVmIEhBVkVfU0NSSVBUCisJcXVldWVfc2NyaXB0KEFDVElPTl9PTERfSE9TVE5BTUUsIGxlYXNlLCBsZWFzZS0+b2xkX2hvc3RuYW1lLCBub3cpOworI2VuZGlmCisJZnJlZShsZWFzZS0+b2xkX2hvc3RuYW1lKTsKKwlsZWFzZS0+b2xkX2hvc3RuYW1lID0gTlVMTDsKKwlyZXR1cm4gMTsKKyAgICAgIH0KKyAgCisgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgIGlmIChsZWFzZS0+bmV3IHx8IGxlYXNlLT5jaGFuZ2VkIHx8IAorCShsZWFzZS0+YXV4X2NoYW5nZWQgJiYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9MRUFTRV9STykpKQorICAgICAgeworI2lmZGVmIEhBVkVfU0NSSVBUCisJcXVldWVfc2NyaXB0KGxlYXNlLT5uZXcgPyBBQ1RJT05fQUREIDogQUNUSU9OX09MRCwgbGVhc2UsIAorCQkgICAgIGxlYXNlLT5mcWRuID8gbGVhc2UtPmZxZG4gOiBsZWFzZS0+aG9zdG5hbWUsIG5vdyk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0RCVVMKKwllbWl0X2RidXNfc2lnbmFsKGxlYXNlLT5uZXcgPyBBQ1RJT05fQUREIDogQUNUSU9OX09MRCwgbGVhc2UsCisJCQkgbGVhc2UtPmZxZG4gPyBsZWFzZS0+ZnFkbiA6IGxlYXNlLT5ob3N0bmFtZSk7CisjZW5kaWYKKwlsZWFzZS0+bmV3ID0gbGVhc2UtPmNoYW5nZWQgPSBsZWFzZS0+YXV4X2NoYW5nZWQgPSAwOworCQorCS8qIHRoZXNlIGFyZSB1c2VkIGZvciB0aGUgImFkZCIgY2FsbCwgdGhlbiBqdW5rZWQsIHNpbmNlIHRoZXkncmUgbm90IGluIHRoZSBkYXRhYmFzZSAqLworCWZyZWUobGVhc2UtPnZlbmRvcmNsYXNzKTsKKwlsZWFzZS0+dmVuZG9yY2xhc3MgPSBOVUxMOworCQorCWZyZWUobGVhc2UtPnVzZXJjbGFzcyk7CisJbGVhc2UtPnVzZXJjbGFzcyA9IE5VTEw7CisJCisJZnJlZShsZWFzZS0+c3VwcGxpZWRfaG9zdG5hbWUpOworCWxlYXNlLT5zdXBwbGllZF9ob3N0bmFtZSA9IE5VTEw7CisJCQkKKwlyZXR1cm4gMTsKKyAgICAgIH0KKworICByZXR1cm4gMDsgLyogbm90aGluZyB0byBkbyAqLworfQorCisjZW5kaWYKKwkgIAorCisgICAgICAKKwpkaWZmIC0tZ2l0IGEvc3JjL2xvZy5jIGIvc3JjL2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlYzQ5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbG9nLmMKQEAgLTAsMCArMSw0MTkgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisvKiBJbXBsZW1lbnQgbG9nZ2luZyB0byAvZGV2L2xvZyBhc3luY2hyb25vdXNseS4gSWYgc3lzbG9nZCBpcyAKKyAgIG1ha2luZyBETlMgbG9va3VwcyB0aHJvdWdoIGRuc21hc3EsIGFuZCBkbnNtYXNxIGJsb2NrcyBhd2FpdGluZworICAgc3lzbG9nZCwgdGhlbiB0aGUgdHdvIGRhZW1vbnMgY2FuIGRlYWRsb2NrLiBXZSBnZXQgYXJvdW5kIHRoaXMKKyAgIGJ5IG5vdCBibG9ja2luZyB3aGVuIHRhbGtpbmcgdG8gc3lzbG9nLCBpbnN0ZWFkIHdlIHF1ZXVlIHVwIHRvIAorICAgTUFYX0xPR1MgbWVzc2FnZXMuIElmIG1vcmUgYXJlIHF1ZXVlZCwgdGhleSB3aWxsIGJlIGRyb3BwZWQsCisgICBhbmQgdGhlIGRyb3AgZXZlbnQgaXRzZWxmIGxvZ2dlZC4gKi8KKworLyogVGhlICJ3aXJlIiBwcm90b2NvbCBmb3IgbG9nZ2luZyBpcyBkZWZpbmVkIGluIFJGQyAzMTY0ICovCisKKy8qIEZyb20gUkZDIDMxNjQgKi8KKyNkZWZpbmUgTUFYX01FU1NBR0UgMTAyNAorCisvKiBkZWZhdWx0cyBpbiBjYXNlIHdlIGRpZSgpIGJlZm9yZSB3ZSBsb2dfc3RhcnQoKSAqLworc3RhdGljIGludCBsb2dfZmFjID0gTE9HX0RBRU1PTjsKK3N0YXRpYyBpbnQgbG9nX3N0ZGVyciA9IDA7IAorc3RhdGljIGludCBsb2dfZmQgPSAtMTsKK3N0YXRpYyBpbnQgbG9nX3RvX2ZpbGUgPSAwOworc3RhdGljIGludCBlbnRyaWVzX2FsbG9jZWQgPSAwOworc3RhdGljIGludCBlbnRyaWVzX2xvc3QgPSAwOworc3RhdGljIGludCBjb25uZWN0aW9uX2dvb2QgPSAxOworc3RhdGljIGludCBtYXhfbG9ncyA9IDA7CitzdGF0aWMgaW50IGNvbm5lY3Rpb25fdHlwZSA9IFNPQ0tfREdSQU07CisKK3N0cnVjdCBsb2dfZW50cnkgeworICBpbnQgb2Zmc2V0LCBsZW5ndGg7CisgIHBpZF90IHBpZDsgLyogdG8gYXZvaWQgZHVwbGljYXRlcyBvdmVyIGEgZm9yayAqLworICBzdHJ1Y3QgbG9nX2VudHJ5ICpuZXh0OworICBjaGFyIHBheWxvYWRbTUFYX01FU1NBR0VdOworfTsKKworc3RhdGljIHN0cnVjdCBsb2dfZW50cnkgKmVudHJpZXMgPSBOVUxMOworc3RhdGljIHN0cnVjdCBsb2dfZW50cnkgKmZyZWVfZW50cmllcyA9IE5VTEw7CisKKworaW50IGxvZ19zdGFydChzdHJ1Y3QgcGFzc3dkICplbnRfcHcsIGludCBlcnJmZCkKK3sKKyAgaW50IHJldCA9IDA7CisKKyAgbG9nX3N0ZGVyciA9ICEhKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9ERUJVRyk7CisKKyAgaWYgKGRhZW1vbi0+bG9nX2ZhYyAhPSAtMSkKKyAgICBsb2dfZmFjID0gZGFlbW9uLT5sb2dfZmFjOworI2lmZGVmIExPR19MT0NBTDAKKyAgZWxzZSBpZiAoZGFlbW9uLT5vcHRpb25zICYgT1BUX0RFQlVHKQorICAgIGxvZ19mYWMgPSBMT0dfTE9DQUwwOworI2VuZGlmCisKKyAgaWYgKGRhZW1vbi0+bG9nX2ZpbGUpCisgICAgeyAKKyAgICAgIGxvZ190b19maWxlID0gMTsKKyAgICAgIGRhZW1vbi0+bWF4X2xvZ3MgPSAwOworICAgIH0KKyAgCisgIG1heF9sb2dzID0gZGFlbW9uLT5tYXhfbG9nczsKKworICBpZiAoIWxvZ19yZW9wZW4oZGFlbW9uLT5sb2dfZmlsZSkpCisgICAgeworICAgICAgc2VuZF9ldmVudChlcnJmZCwgRVZFTlRfTE9HX0VSUiwgZXJybm8pOworICAgICAgX2V4aXQoMCk7CisgICAgfQorCisgIC8qIGlmIHF1ZXVpbmcgaXMgaW5oaWJpdGVkLCBtYWtlIHN1cmUgd2UgYWxsb2NhdGUKKyAgICAgdGhlIG9uZSByZXF1aXJlZCBidWZmZXIgbm93LiAqLworICBpZiAobWF4X2xvZ3MgPT0gMCkKKyAgICB7ICAKKyAgICAgIGZyZWVfZW50cmllcyA9IHNhZmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgbG9nX2VudHJ5KSk7CisgICAgICBmcmVlX2VudHJpZXMtPm5leHQgPSBOVUxMOworICAgICAgZW50cmllc19hbGxvY2VkID0gMTsKKyAgICB9CisKKyAgLyogSWYgd2UncmUgcnVubmluZyBhcyByb290IGFuZCBnb2luZyB0byBjaGFuZ2UgdWlkIGxhdGVyLAorICAgICBjaGFuZ2UgdGhlIG93bmVyc2hpcCBoZXJlIHNvIHRoYXQgdGhlIGZpbGUgaXMgYWx3YXlzIG93bmVkIGJ5CisgICAgIHRoZSBkbnNtYXNxIHVzZXIuIFRoZW4gbG9ncm90YXRlIGNhbiBqdXN0IGNvcHkgdGhlIG93bmVyLgorICAgICBGYWlsdXJlIG9mIHRoZSBjaG93biBjYWxsIGlzIE9LLCAoZm9yIGluc3RhbmNlIHdoZW4gc3RhcnRlZCBhcyBub24tcm9vdCkgKi8KKyAgaWYgKGxvZ190b19maWxlICYmIGVudF9wdyAmJiBlbnRfcHctPnB3X3VpZCAhPSAwICYmIAorICAgICAgZmNob3duKGxvZ19mZCwgZW50X3B3LT5wd191aWQsIC0xKSAhPSAwKQorICAgIHJldCA9IGVycm5vOworCisgIHJldHVybiByZXQ7Cit9CisKK2ludCBsb2dfcmVvcGVuKGNoYXIgKmxvZ19maWxlKQoreworICBpZiAobG9nX2ZkICE9IC0xKQorICAgIGNsb3NlKGxvZ19mZCk7CisKKyAgLyogTk9URTogdW1hc2sgaXMgc2V0IHRvIDAyMiBieSB0aGUgdGltZSB0aGlzIGdldHMgY2FsbGVkICovCisgICAgIAorICBpZiAobG9nX2ZpbGUpCisgICAgeworICAgICAgbG9nX2ZkID0gb3Blbihsb2dfZmlsZSwgT19XUk9OTFl8T19DUkVBVHxPX0FQUEVORCwgU19JUlVTUnxTX0lXVVNSfFNfSVJHUlApOworICAgICAgcmV0dXJuIGxvZ19mZCAhPSAtMTsKKyAgICB9CisgIGVsc2UKKyNpZmRlZiBIQVZFX1NPTEFSSVNfTkVUV09SSworICAgIC8qIFNvbGFyaXMgbG9nZ2luZyBpcyAiZGlmZmVyZW50IiwgL2Rldi9sb2cgaXMgbm90IHVuaXgtZG9tYWluIHNvY2tldC4KKyAgICAgICBKdXN0IGxlYXZlIGxvZ19mZCA9PSAtMSBhbmQgdXNlIHRoZSB2c3lzbG9nIGNhbGwgZm9yIGV2ZXJ5dGhpbmcuLi4uICovCisjICAgZGVmaW5lIF9QQVRIX0xPRyAiIiAgLyogZHVtbXkgKi8KKyAgICBsb2dfZmQgPSAtMTsKKyNlbHNlCisgICAgeworICAgICAgIGludCBmbGFnczsKKyAgICAgICBsb2dfZmQgPSBzb2NrZXQoQUZfVU5JWCwgY29ubmVjdGlvbl90eXBlLCAwKTsKKyAgICAgIAorICAgICAgaWYgKGxvZ19mZCA9PSAtMSkKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgLyogaWYgbWF4X2xvZ3MgaXMgemVybywgbGVhdmUgdGhlIHNvY2tldCBibG9ja2luZyAqLworICAgICAgaWYgKG1heF9sb2dzICE9IDAgJiYgKGZsYWdzID0gZmNudGwobG9nX2ZkLCBGX0dFVEZMKSkgIT0gLTEpCisJZmNudGwobG9nX2ZkLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spOworICAgIH0KKyNlbmRpZgorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2VudHJ5KHZvaWQpCit7CisgIHN0cnVjdCBsb2dfZW50cnkgKnRtcCA9IGVudHJpZXM7CisgIGVudHJpZXMgPSB0bXAtPm5leHQ7CisgIHRtcC0+bmV4dCA9IGZyZWVfZW50cmllczsKKyAgZnJlZV9lbnRyaWVzID0gdG1wOworfSAgICAgIAorCitzdGF0aWMgdm9pZCBsb2dfd3JpdGUodm9pZCkKK3sKKyAgc3NpemVfdCByYzsKKyAgIAorICB3aGlsZSAoZW50cmllcykKKyAgICB7CisgICAgICAvKiBBdm9pZCBkdXBsaWNhdGVzIG92ZXIgYSBmb3JrKCkgKi8KKyAgICAgIGlmIChlbnRyaWVzLT5waWQgIT0gZ2V0cGlkKCkpCisJeworCSAgZnJlZV9lbnRyeSgpOworCSAgY29udGludWU7CisJfQorCisgICAgICBjb25uZWN0aW9uX2dvb2QgPSAxOworCisgICAgICBpZiAoKHJjID0gd3JpdGUobG9nX2ZkLCBlbnRyaWVzLT5wYXlsb2FkICsgZW50cmllcy0+b2Zmc2V0LCBlbnRyaWVzLT5sZW5ndGgpKSAhPSAtMSkKKwl7CisJICBlbnRyaWVzLT5sZW5ndGggLT0gcmM7CisJICBlbnRyaWVzLT5vZmZzZXQgKz0gcmM7CisJICBpZiAoZW50cmllcy0+bGVuZ3RoID09IDApCisJICAgIHsKKwkgICAgICBmcmVlX2VudHJ5KCk7CisJICAgICAgaWYgKGVudHJpZXNfbG9zdCAhPSAwKQorCQl7CisJCSAgaW50IGUgPSBlbnRyaWVzX2xvc3Q7CisJCSAgZW50cmllc19sb3N0ID0gMDsgLyogYXZvaWQgd2lsZCByZWN1cnNpb24gKi8KKwkJICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIm92ZXJmbG93OiAlZCBsb2cgZW50cmllcyBsb3N0IiksIGUpOworCQl9CSAgCisJICAgIH0KKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIAorICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorCWNvbnRpbnVlOworCisgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQorCXJldHVybjsgLyogc3lzbG9nZCBidXN5LCBnbyBhZ2FpbiB3aGVuIHNlbGVjdCgpIG9yIHBvbGwoKSBzYXlzIHNvICovCisgICAgICAKKyAgICAgIGlmIChlcnJubyA9PSBFTk9CVUZTKQorCXsKKwkgIGNvbm5lY3Rpb25fZ29vZCA9IDA7CisJICByZXR1cm47CisJfQorCisgICAgICAvKiBlcnJvcnMgaGFuZGxpbmcgYWZ0ZXIgdGhpcyBhc3N1bWVzIHNvY2tldHMgKi8gCisgICAgICBpZiAoIWxvZ190b19maWxlKQorCXsKKwkgIC8qIE9uY2UgYSBzdHJlYW0gc29ja2V0IGhpdHMgRVBJUEUsIHdlIGhhdmUgdG8gY2xvc2UgYW5kIHJlLW9wZW4KKwkgICAgICh3ZSBpZ25vcmUgU0lHUElQRSkgKi8KKwkgIGlmIChlcnJubyA9PSBFUElQRSkKKwkgICAgeworCSAgICAgIGlmIChsb2dfcmVvcGVuKE5VTEwpKQorCQljb250aW51ZTsKKwkgICAgfQorCSAgZWxzZSBpZiAoZXJybm8gPT0gRUNPTk5SRUZVU0VEIHx8IAorCQkgICBlcnJubyA9PSBFTk9UQ09OTiB8fCAKKwkJICAgZXJybm8gPT0gRURFU1RBRERSUkVRIHx8IAorCQkgICBlcnJubyA9PSBFQ09OTlJFU0VUKQorCSAgICB7CisJICAgICAgLyogc29ja2V0IHdlbnQgKHN5c2xvZ2QgZG93bj8pLCB0cnkgYW5kIHJlY29ubmVjdC4gSWYgd2UgZmFpbCwKKwkJIHN0b3AgdHJ5aW5nIHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gbXlfc3lzbG9nKCkgCisJCSBFQ09OTlJFRlVTRUQgLT4gY29ubmVjdGlvbiB3ZW50IGRvd24KKwkJIEVOT1RDT05OIC0+IG5vYm9keSBsaXN0ZW5pbmcKKwkJIChFQ09OTlJFU0VULCBFREVTVEFERFJSRVEgYXJlICpCU0QgZXF1aXZhbGVudHMpICovCisJICAgICAgCisJICAgICAgc3RydWN0IHNvY2thZGRyX3VuIGxvZ2FkZHI7CisJICAgICAgCisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKwkgICAgICBsb2dhZGRyLnN1bl9sZW4gPSBzaXplb2YobG9nYWRkcikgLSBzaXplb2YobG9nYWRkci5zdW5fcGF0aCkgKyBzdHJsZW4oX1BBVEhfTE9HKSArIDE7IAorI2VuZGlmCisJICAgICAgbG9nYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKwkgICAgICBzdHJuY3B5KGxvZ2FkZHIuc3VuX3BhdGgsIF9QQVRIX0xPRywgc2l6ZW9mKGxvZ2FkZHIuc3VuX3BhdGgpKTsKKwkgICAgICAKKwkgICAgICAvKiBHb3QgY29ubmVjdGlvbiBiYWNrPyB0cnkgYWdhaW4uICovCisJICAgICAgaWYgKGNvbm5lY3QobG9nX2ZkLCAoc3RydWN0IHNvY2thZGRyICopJmxvZ2FkZHIsIHNpemVvZihsb2dhZGRyKSkgIT0gLTEpCisJCWNvbnRpbnVlOworCSAgICAgIAorCSAgICAgIC8qIGVycm9ycyBmcm9tIGNvbm5lY3Qgd2hpY2ggbWVhbiB3ZSBzaG91bGQga2VlcCB0cnlpbmcgKi8KKwkgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UIHx8IAorCQkgIGVycm5vID09IEVBTFJFQURZIHx8IAorCQkgIGVycm5vID09IEVDT05OUkVGVVNFRCB8fAorCQkgIGVycm5vID09IEVJU0NPTk4gfHwgCisJCSAgZXJybm8gPT0gRUlOVFIgfHwKKwkJICBlcnJubyA9PSBFQUdBSU4pCisJCXsKKwkJICAvKiB0cnkgYWdhaW4gb24gbmV4dCBzeXNsb2coKSBjYWxsICovCisJCSAgY29ubmVjdGlvbl9nb29kID0gMDsKKwkJICByZXR1cm47CisJCX0KKwkgICAgICAKKwkgICAgICAvKiB0cnkgdGhlIG90aGVyIHNvcnQgb2Ygc29ja2V0Li4uICovCisJICAgICAgaWYgKGVycm5vID09IEVQUk9UT1RZUEUpCisJCXsKKwkJICBjb25uZWN0aW9uX3R5cGUgPSBjb25uZWN0aW9uX3R5cGUgPT0gU09DS19ER1JBTSA/IFNPQ0tfU1RSRUFNIDogU09DS19ER1JBTTsKKwkJICBpZiAobG9nX3Jlb3BlbihOVUxMKSkKKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwl9CisKKyAgICAgIC8qIGdpdmUgdXAgLSBmYWxsIGJhY2sgdG8gc3lzbG9nKCkgLSB0aGlzIGhhbmRsZXMgb3V0LW9mLXNwYWNlCisJIHdoZW4gbG9nZ2luZyB0byBhIGZpbGUsIGZvciBpbnN0YW5jZS4gKi8KKyAgICAgIGxvZ19mZCA9IC0xOworICAgICAgbXlfc3lzbG9nKExPR19DUklULCBfKCJsb2cgZmFpbGVkOiAlcyIpLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuOworICAgIH0KK30KKworLyogcHJpb3JpdHkgaXMgb25lIG9mIExPR19ERUJVRywgTE9HX0lORk8sIExPR19OT1RJQ0UsIGV0Yy4gU2VlIHN5cy9zeXNsb2cuaC4KKyAgIE9SJ2QgdG8gcHJpb3JpdHkgY2FuIGJlIE1TX1RGVFAsIE1TX0RIQ1AsIC4uLiB0byBiZSBhYmxlIHRvIGRvIGxvZyBzZXBhcmF0aW9uIGJldHdlZW4KKyAgIEROUywgREhDUCBhbmQgVEZUUCBzZXJ2aWNlcy4KKyovCit2b2lkIG15X3N5c2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFwOworICBzdHJ1Y3QgbG9nX2VudHJ5ICplbnRyeTsKKyAgdGltZV90IHRpbWVfbm93OworICBjaGFyICpwOworICBzaXplX3QgbGVuOworICBwaWRfdCBwaWQgPSBnZXRwaWQoKTsKKyAgY2hhciAqZnVuYyA9ICIiOworCisgIGlmICgoTE9HX0ZBQ01BU0sgJiBwcmlvcml0eSkgPT0gTVNfVEZUUCkKKyAgICBmdW5jID0gIi10ZnRwIjsKKyAgZWxzZSBpZiAoKExPR19GQUNNQVNLICYgcHJpb3JpdHkpID09IE1TX0RIQ1ApCisgICAgZnVuYyA9ICItZGhjcCI7CisgICAgICAKKyAgcHJpb3JpdHkgPSBMT0dfUFJJKHByaW9yaXR5KTsKKyAgCisgIGlmIChsb2dfc3RkZXJyKSAKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImRuc21hc3ElczogIiwgZnVuYyk7CisgICAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsKKyAgICAgIHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcCk7CisgICAgICB2YV9lbmQoYXApOworICAgICAgZnB1dGMoJ1xuJywgc3RkZXJyKTsKKyAgICB9CisKKyAgaWYgKGxvZ19mZCA9PSAtMSkKKyAgICB7CisgICAgICAvKiBmYWxsLWJhY2sgdG8gc3lzbG9nIGlmIHdlIGRpZSBkdXJpbmcgc3RhcnR1cCBvciBmYWlsIGR1cmluZyBydW5uaW5nLiAqLworICAgICAgc3RhdGljIGludCBpc29wZW4gPSAwOworICAgICAgaWYgKCFpc29wZW4pCisJeworCSAgb3BlbmxvZygiZG5zbWFzcSIsIExPR19QSUQsIGxvZ19mYWMpOworCSAgaXNvcGVuID0gMTsKKwl9CisgICAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsgIAorICAgICAgdnN5c2xvZyhwcmlvcml0eSwgZm9ybWF0LCBhcCk7CisgICAgICB2YV9lbmQoYXApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgCisgIGlmICgoZW50cnkgPSBmcmVlX2VudHJpZXMpKQorICAgIGZyZWVfZW50cmllcyA9IGVudHJ5LT5uZXh0OworICBlbHNlIGlmIChlbnRyaWVzX2FsbG9jZWQgPCBtYXhfbG9ncyAmJiAoZW50cnkgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2dfZW50cnkpKSkpCisgICAgZW50cmllc19hbGxvY2VkKys7CisgIAorICBpZiAoIWVudHJ5KQorICAgIGVudHJpZXNfbG9zdCsrOworICBlbHNlCisgICAgeworICAgICAgLyogYWRkIHRvIGVuZCBvZiBsaXN0LCBjb25zdW1lZCBmcm9tIHRoZSBzdGFydCAqLworICAgICAgZW50cnktPm5leHQgPSBOVUxMOworICAgICAgaWYgKCFlbnRyaWVzKQorCWVudHJpZXMgPSBlbnRyeTsKKyAgICAgIGVsc2UKKwl7CisJICBzdHJ1Y3QgbG9nX2VudHJ5ICp0bXA7CisJICBmb3IgKHRtcCA9IGVudHJpZXM7IHRtcC0+bmV4dDsgdG1wID0gdG1wLT5uZXh0KTsKKwkgIHRtcC0+bmV4dCA9IGVudHJ5OworCX0KKyAgICAgIAorICAgICAgdGltZSgmdGltZV9ub3cpOworICAgICAgcCA9IGVudHJ5LT5wYXlsb2FkOworICAgICAgaWYgKCFsb2dfdG9fZmlsZSkKKwlwICs9IHNwcmludGYocCwgIjwlZD4iLCBwcmlvcml0eSB8IGxvZ19mYWMpOworCisgICAgICBwICs9IHNwcmludGYocCwgIiUuMTVzIGRuc21hc3Elc1slZF06ICIsIGN0aW1lKCZ0aW1lX25vdykgKyA0LCBmdW5jLCAoaW50KXBpZCk7CisgICAgICAgIAorICAgICAgbGVuID0gcCAtIGVudHJ5LT5wYXlsb2FkOworICAgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7ICAKKyAgICAgIGxlbiArPSB2c25wcmludGYocCwgTUFYX01FU1NBR0UgLSBsZW4sIGZvcm1hdCwgYXApICsgMTsgLyogaW5jbHVkZSB6ZXJvLXRlcm1pbmF0b3IgKi8KKyAgICAgIHZhX2VuZChhcCk7CisgICAgICBlbnRyeS0+bGVuZ3RoID0gbGVuID4gTUFYX01FU1NBR0UgPyBNQVhfTUVTU0FHRSA6IGxlbjsKKyAgICAgIGVudHJ5LT5vZmZzZXQgPSAwOworICAgICAgZW50cnktPnBpZCA9IHBpZDsKKworICAgICAgLyogcmVwbGFjZSB0ZXJtaW5hdG9yIHdpdGggXG4gKi8KKyAgICAgIGlmIChsb2dfdG9fZmlsZSkKKwllbnRyeS0+cGF5bG9hZFtlbnRyeS0+bGVuZ3RoIC0gMV0gPSAnXG4nOworICAgIH0KKyAgCisgIC8qIGFsbW9zdCBhbHdheXMsIGxvZ2dpbmcgd29uJ3QgYmxvY2ssIHNvIHRyeSBhbmQgd3JpdGUgdGhpcyBub3csCisgICAgIHRvIHNhdmUgY29sbGVjdGluZyB0b28gbWFueSBsb2cgbWVzc2FnZXMgZHVyaW5nIGEgc2VsZWN0IGxvb3AuICovCisgIGxvZ193cml0ZSgpOworICAKKyAgLyogU2luY2Ugd2UncmUgZG9pbmcgdGhpbmdzIGFzeW5jaHJvbm91c2x5LCBhIGNhY2hlLWR1bXAsIGZvciBpbnN0YW5jZSwKKyAgICAgY2FuIG5vdyBnZW5lcmF0ZSBsb2cgbGluZXMgdmVyeSBmYXN0LiBXaXRoIGEgc21hbGwgYnVmZmVyIChkZXNpcmFibGUpLAorICAgICB0aGF0IG1lYW5zIGl0IGNhbiBvdmVyZmxvdyB0aGUgbG9nLWJ1ZmZlciB2ZXJ5IHF1aWNrbHksCisgICAgIHNvIHRoYXQgdGhlIGNhY2hlIGR1bXAgYmVjb21lcyBtYWlubHkgYSBjb3VudCBvZiBob3cgbWFueSBsaW5lcyAKKyAgICAgb3ZlcmZsb3dlZC4gVG8gYXZvaWQgdGhpcywgd2UgZGVsYXkgaGVyZSwgdGhlIGRlbGF5IGlzIGNvbnRyb2xsZWQgCisgICAgIGJ5IHF1ZXVlLW9jY3VwYW5jeSwgYW5kIGdyb3dzIGV4cG9uZW50aWFsbHkuIFRoZSBkZWxheSBpcyBsaW1pdGVkIHRvICgyXjgpbXMuCisgICAgIFRoZSBzY2FsaW5nIHN0dWZmIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBxdWV1ZSBpcyBiaWdnZXIgdGhhbiA4LCB0aGUgZGVsYXkKKyAgICAgb25seSBvY2N1cnMgZm9yIHRoZSBsYXN0IDggZW50cmllcy4gT25jZSB0aGUgcXVldWUgaXMgZnVsbCwgd2Ugc3RvcCBkZWxheWluZworICAgICB0byBwcmVzZXJ2ZSBwZXJmb3JtYW5jZS4KKyAgKi8KKworICBpZiAoZW50cmllcyAmJiBtYXhfbG9ncyAhPSAwKQorICAgIHsKKyAgICAgIGludCBkOworICAgICAgCisgICAgICBmb3IgKGQgPSAwLGVudHJ5ID0gZW50cmllczsgZW50cnk7IGVudHJ5ID0gZW50cnktPm5leHQsIGQrKyk7CisgICAgICAKKyAgICAgIGlmIChkID09IG1heF9sb2dzKQorCWQgPSAwOworICAgICAgZWxzZSBpZiAobWF4X2xvZ3MgPiA4KQorCWQgLT0gbWF4X2xvZ3MgLSA4OworCisgICAgICBpZiAoZCA+IDApCisJeworCSAgc3RydWN0IHRpbWVzcGVjIHdhaXRlcjsKKwkgIHdhaXRlci50dl9zZWMgPSAwOworCSAgd2FpdGVyLnR2X25zZWMgPSAxMDAwMDAwIDw8IChkIC0gMSk7IC8qIDEgbXMgKi8KKwkgIG5hbm9zbGVlcCgmd2FpdGVyLCBOVUxMKTsKKyAgICAgIAorCSAgLyogSGF2ZSBhbm90aGVyIGdvIG5vdyAqLworCSAgbG9nX3dyaXRlKCk7CisJfQorICAgIH0gCit9CisKK3ZvaWQgc2V0X2xvZ193cml0ZXIoZmRfc2V0ICpzZXQsIGludCAqbWF4ZmRwKQoreworICBpZiAoZW50cmllcyAmJiBsb2dfZmQgIT0gLTEgJiYgY29ubmVjdGlvbl9nb29kKQorICAgIHsKKyAgICAgIEZEX1NFVChsb2dfZmQsIHNldCk7CisgICAgICBidW1wX21heGZkKGxvZ19mZCwgbWF4ZmRwKTsKKyAgICB9Cit9CisKK3ZvaWQgY2hlY2tfbG9nX3dyaXRlcihmZF9zZXQgKnNldCkKK3sKKyAgaWYgKGxvZ19mZCAhPSAtMSAmJiAoIXNldCB8fCBGRF9JU1NFVChsb2dfZmQsIHNldCkpKQorICAgIGxvZ193cml0ZSgpOworfQorCit2b2lkIGZsdXNoX2xvZyh2b2lkKQoreworICAvKiBibG9jayB1bnRpbCBxdWV1ZSBlbXB0eSAqLworICBpZiAobG9nX2ZkICE9IC0xKQorICAgIHsKKyAgICAgIGludCBmbGFnczsKKyAgICAgIGlmICgoZmxhZ3MgPSBmY250bChsb2dfZmQsIEZfR0VURkwpKSAhPSAtMSkKKwlmY250bChsb2dfZmQsIEZfU0VURkwsIGZsYWdzICYgfk9fTk9OQkxPQ0spOworICAgICAgbG9nX3dyaXRlKCk7CisgICAgICBjbG9zZShsb2dfZmQpOworICAgIH0KK30KKwordm9pZCBkaWUoY2hhciAqbWVzc2FnZSwgY2hhciAqYXJnMSwgaW50IGV4aXRfY29kZSkKK3sKKyAgY2hhciAqZXJybWVzcyA9IHN0cmVycm9yKGVycm5vKTsKKyAgCisgIGlmICghYXJnMSkKKyAgICBhcmcxID0gZXJybWVzczsKKworICBsb2dfc3RkZXJyID0gMTsgLyogcHJpbnQgYXMgd2VsbCBhcyBsb2cgd2hlbiB3ZSBkaWUuLi4uICovCisgIGZwdXRjKCdcbicsIHN0ZGVycik7IC8qIHByZXR0eWZ5ICBzdGFydHVwLXNjcmlwdCBtZXNzYWdlICovCisgIG15X3N5c2xvZyhMT0dfQ1JJVCwgbWVzc2FnZSwgYXJnMSwgZXJybWVzcyk7CisgIAorICBsb2dfc3RkZXJyID0gMDsKKyAgbXlfc3lzbG9nKExPR19DUklULCBfKCJGQUlMRUQgdG8gc3RhcnQgdXAiKSk7CisgIGZsdXNoX2xvZygpOworICAKKyAgZXhpdChleGl0X2NvZGUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL25ldGxpbmsuYyBiL3NyYy9uZXRsaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzdjNDM4NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uZXRsaW5rLmMKQEAgLTAsMCArMSwzMDMgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKworLyogbGludXggMi42LjE5IGJ1Z2dlcnMgdXAgdGhlIGhlYWRlcnMsIHBhdGNoIGl0IHVwIGhlcmUuICovIAorI2lmbmRlZiBJRkFfUlRBCisjICBkZWZpbmUgSUZBX1JUQShyKSAgXAorICAgICAgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSkpKQorCisjICBpbmNsdWRlIDxsaW51eC9pZl9hZGRyLmg+CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBpb3ZlYyBpb3Y7CitzdGF0aWMgdTMyIG5ldGxpbmtfcGlkOworCitzdGF0aWMgdm9pZCBubF9lcnIoc3RydWN0IG5sbXNnaGRyICpoKTsKK3N0YXRpYyB2b2lkIG5sX3JvdXRlY2hhbmdlKHN0cnVjdCBubG1zZ2hkciAqaCk7CisKK3ZvaWQgbmV0bGlua19pbml0KHZvaWQpCit7CisgIHN0cnVjdCBzb2NrYWRkcl9ubCBhZGRyOworICBzb2NrbGVuX3Qgc2xlbiA9IHNpemVvZihhZGRyKTsKKworICBhZGRyLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisgIGFkZHIubmxfcGFkID0gMDsKKyAgYWRkci5ubF9waWQgPSAwOyAvKiBhdXRvYmluZCAqLworI2lmZGVmIEhBVkVfSVBWNgorICBhZGRyLm5sX2dyb3VwcyA9IFJUTUdSUF9JUFY0X1JPVVRFIHwgUlRNR1JQX0lQVjZfUk9VVEU7CisjZWxzZQorICBhZGRyLm5sX2dyb3VwcyA9IFJUTUdSUF9JUFY0X1JPVVRFOworI2VuZGlmCisgIAorICAvKiBNYXkgbm90IGJlIGFibGUgdG8gaGF2ZSBwZXJtaXNzaW9uIHRvIHNldCBtdWx0aWNhc3QgZ3JvdXBzIGRvbid0IGRpZSBpbiB0aGF0IGNhc2UgKi8KKyAgaWYgKChkYWVtb24tPm5ldGxpbmtmZCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVywgTkVUTElOS19ST1VURSkpICE9IC0xKQorICAgIHsKKyAgICAgIGlmIChiaW5kKGRhZW1vbi0+bmV0bGlua2ZkLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSkgPT0gLTEpCisJeworCSAgYWRkci5ubF9ncm91cHMgPSAwOworCSAgaWYgKGVycm5vICE9IEVQRVJNIHx8IGJpbmQoZGFlbW9uLT5uZXRsaW5rZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKGFkZHIpKSA9PSAtMSkKKwkgICAgZGFlbW9uLT5uZXRsaW5rZmQgPSAtMTsKKwl9CisgICAgfQorICAKKyAgaWYgKGRhZW1vbi0+bmV0bGlua2ZkID09IC0xIHx8IAorICAgICAgZ2V0c29ja25hbWUoZGFlbW9uLT5uZXRsaW5rZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgJnNsZW4pID09IDEpCisgICAgZGllKF8oImNhbm5vdCBjcmVhdGUgbmV0bGluayBzb2NrZXQ6ICVzIiksIE5VTEwsIEVDX01JU0MpOworICAgCisgIC8qIHNhdmUgcGlkIGFzc2lnbmVkIGJ5IGJpbmQoKSBhbmQgcmV0cmlldmVkIGJ5IGdldHNvY2tuYW1lKCkgKi8gCisgIG5ldGxpbmtfcGlkID0gYWRkci5ubF9waWQ7CisgIAorICBpb3YuaW92X2xlbiA9IDEwMDsKKyAgaW92Lmlvdl9iYXNlID0gc2FmZV9tYWxsb2MoaW92Lmlvdl9sZW4pOworfQorCitzdGF0aWMgc3NpemVfdCBuZXRsaW5rX3JlY3Yodm9pZCkKK3sKKyAgc3RydWN0IG1zZ2hkciBtc2c7CisgIHN0cnVjdCBzb2NrYWRkcl9ubCBubGFkZHI7CisgIHNzaXplX3QgcmM7CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKyAgICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisgICAgICBtc2cubXNnX25hbWUgPSAmbmxhZGRyOworICAgICAgbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKG5sYWRkcik7CisgICAgICBtc2cubXNnX2lvdiA9ICZpb3Y7CisgICAgICBtc2cubXNnX2lvdmxlbiA9IDE7CisgICAgICBtc2cubXNnX2ZsYWdzID0gMDsKKyAgICAgIAorICAgICAgd2hpbGUgKChyYyA9IHJlY3Ztc2coZGFlbW9uLT5uZXRsaW5rZmQsICZtc2csIE1TR19QRUVLIHwgTVNHX1RSVU5DKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworICAgICAgCisgICAgICAvKiBtYWtlIGJ1ZmZlciBiaWcgZW5vdWdoICovCisgICAgICBpZiAocmMgIT0gLTEgJiYgKG1zZy5tc2dfZmxhZ3MgJiBNU0dfVFJVTkMpKQorCXsKKwkgIC8qIFZlcnkgbmV3IExpbnV4IGtlcm5lbHMgcmV0dXJuIHRoZSBhY3R1YWwgc2l6ZSBuZWVkZWQsIG9sZGVyIG9uZXMgYWx3YXlzIHJldHVybiB0cnVuY2F0ZWQgc2l6ZSAqLworCSAgaWYgKChzaXplX3QpcmMgPT0gaW92Lmlvdl9sZW4pCisJICAgIHsKKwkgICAgICBpZiAoZXhwYW5kX2J1ZigmaW92LCByYyArIDEwMCkpCisJCWNvbnRpbnVlOworCSAgICB9CisJICBlbHNlCisJICAgIGV4cGFuZF9idWYoJmlvdiwgcmMpOworCX0KKworICAgICAgLyogcmVhZCBpdCBmb3IgcmVhbCAqLworICAgICAgbXNnLm1zZ19mbGFncyA9IDA7CisgICAgICB3aGlsZSAoKHJjID0gcmVjdm1zZyhkYWVtb24tPm5ldGxpbmtmZCwgJm1zZywgMCkpID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKyAgICAgIAorICAgICAgLyogTWFrZSBzdXJlIHRoaXMgaXMgZnJvbSB0aGUga2VybmVsICovCisgICAgICBpZiAocmMgPT0gLTEgfHwgbmxhZGRyLm5sX3BpZCA9PSAwKQorCWJyZWFrOworICAgIH0KKyAgICAgIAorICAvKiBkaXNjYXJkIHN0dWZmIHdoaWNoIGlzIHRydW5jYXRlZCBhdCB0aGlzIHBvaW50IChleHBhbmRfYnVmKCkgbWF5IGZhaWwpICovCisgIGlmIChtc2cubXNnX2ZsYWdzICYgTVNHX1RSVU5DKQorICAgIHsKKyAgICAgIHJjID0gLTE7CisgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICB9CisgIAorICByZXR1cm4gcmM7Cit9CisgIAoraW50IGlmYWNlX2VudW1lcmF0ZSh2b2lkICpwYXJtLCBpbnQgKCppcHY0X2NhbGxiYWNrKSgpLCBpbnQgKCppcHY2X2NhbGxiYWNrKSgpKQoreworICBzdHJ1Y3Qgc29ja2FkZHJfbmwgYWRkcjsKKyAgc3RydWN0IG5sbXNnaGRyICpoOworICBzc2l6ZV90IGxlbjsKKyAgc3RhdGljIHVuc2lnbmVkIGludCBzZXEgPSAwOworICBpbnQgZmFtaWx5ID0gQUZfSU5FVDsKKworICBzdHJ1Y3QgeworICAgIHN0cnVjdCBubG1zZ2hkciBubGg7CisgICAgc3RydWN0IHJ0Z2VubXNnIGc7IAorICB9IHJlcTsKKworICBhZGRyLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisgIGFkZHIubmxfcGFkID0gMDsKKyAgYWRkci5ubF9ncm91cHMgPSAwOworICBhZGRyLm5sX3BpZCA9IDA7IC8qIGFkZHJlc3MgdG8ga2VybmVsICovCisKKyBhZ2FpbjoKKyAgcmVxLm5saC5ubG1zZ19sZW4gPSBzaXplb2YocmVxKTsKKyAgcmVxLm5saC5ubG1zZ190eXBlID0gUlRNX0dFVEFERFI7CisgIHJlcS5ubGgubmxtc2dfZmxhZ3MgPSBOTE1fRl9ST09UIHwgTkxNX0ZfTUFUQ0ggfCBOTE1fRl9SRVFVRVNUIHwgTkxNX0ZfQUNLOyAKKyAgcmVxLm5saC5ubG1zZ19waWQgPSAwOworICByZXEubmxoLm5sbXNnX3NlcSA9ICsrc2VxOworICByZXEuZy5ydGdlbl9mYW1pbHkgPSBmYW1pbHk7IAorCisgIC8qIERvbid0IGJsb2NrIGluIHJlY3Zmcm9tIGlmIHNlbmQgZmFpbHMgKi8KKyAgd2hpbGUoKGxlbiA9IHNlbmR0byhkYWVtb24tPm5ldGxpbmtmZCwgKHZvaWQgKikmcmVxLCBzaXplb2YocmVxKSwgMCwgCisJCSAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKGFkZHIpKSkgPT0gLTEgJiYgcmV0cnlfc2VuZCgpKTsKKyAgCisgIGlmIChsZW4gPT0gLTEpCisgICAgcmV0dXJuIDA7CisgICAgCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmICgobGVuID0gbmV0bGlua19yZWN2KCkpID09IC0xKQorCXsKKwkgIGlmIChlcnJubyA9PSBFTk9CVUZTKQorCSAgICB7CisJICAgICAgc2xlZXAoMSk7CisJICAgICAgZ290byBhZ2FpbjsKKwkgICAgfQorCSAgcmV0dXJuIDA7CisJfQorCisgICAgICBmb3IgKGggPSAoc3RydWN0IG5sbXNnaGRyICopaW92Lmlvdl9iYXNlOyBOTE1TR19PSyhoLCAoc2l6ZV90KWxlbik7IGggPSBOTE1TR19ORVhUKGgsIGxlbikpCisJaWYgKGgtPm5sbXNnX3NlcSAhPSBzZXEgfHwgaC0+bmxtc2dfcGlkICE9IG5ldGxpbmtfcGlkKQorCSAgbmxfcm91dGVjaGFuZ2UoaCk7IC8qIE1heSBiZSBtdWx0aWNhc3QgYXJyaXZpbmcgYXN5bmMgKi8KKwllbHNlIGlmIChoLT5ubG1zZ190eXBlID09IE5MTVNHX0VSUk9SKQorCSAgbmxfZXJyKGgpOworCWVsc2UgaWYgKGgtPm5sbXNnX3R5cGUgPT0gTkxNU0dfRE9ORSkKKwkgIHsKKyNpZmRlZiBIQVZFX0lQVjYKKwkgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUICYmIGlwdjZfY2FsbGJhY2spCisJICAgICAgeworCQlmYW1pbHkgPSBBRl9JTkVUNjsKKwkJZ290byBhZ2FpbjsKKwkgICAgICB9CisjZW5kaWYKKwkgICAgcmV0dXJuIDE7CisJICB9CisJZWxzZSBpZiAoaC0+bmxtc2dfdHlwZSA9PSBSVE1fTkVXQUREUikKKwkgIHsKKwkgICAgc3RydWN0IGlmYWRkcm1zZyAqaWZhID0gTkxNU0dfREFUQShoKTsgIAorCSAgICBzdHJ1Y3QgcnRhdHRyICpydGEgPSBJRkFfUlRBKGlmYSk7CisJICAgIHVuc2lnbmVkIGludCBsZW4xID0gaC0+bmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqaWZhKSk7CisJICAgIAorCSAgICBpZiAoaWZhLT5pZmFfZmFtaWx5ID09IEFGX0lORVQpCisJICAgICAgeworCQlzdHJ1Y3QgaW5fYWRkciBuZXRtYXNrLCBhZGRyLCBicm9hZGNhc3Q7CisJCQorCQluZXRtYXNrLnNfYWRkciA9IGh0b25sKDB4ZmZmZmZmZmYgPDwgKDMyIC0gaWZhLT5pZmFfcHJlZml4bGVuKSk7CisJCWFkZHIuc19hZGRyID0gMDsKKwkJYnJvYWRjYXN0LnNfYWRkciA9IDA7CisJCQorCQl3aGlsZSAoUlRBX09LKHJ0YSwgbGVuMSkpCisJCSAgeworCQkgICAgaWYgKHJ0YS0+cnRhX3R5cGUgPT0gSUZBX0xPQ0FMKQorCQkgICAgICBhZGRyID0gKigoc3RydWN0IGluX2FkZHIgKikocnRhKzEpKTsKKwkJICAgIGVsc2UgaWYgKHJ0YS0+cnRhX3R5cGUgPT0gSUZBX0JST0FEQ0FTVCkKKwkJICAgICAgYnJvYWRjYXN0ID0gKigoc3RydWN0IGluX2FkZHIgKikocnRhKzEpKTsKKwkJICAgIAorCQkgICAgcnRhID0gUlRBX05FWFQocnRhLCBsZW4xKTsKKwkJICB9CisJCQorCQlpZiAoYWRkci5zX2FkZHIgJiYgaXB2NF9jYWxsYmFjaykKKwkJICBpZiAoISgoKmlwdjRfY2FsbGJhY2spKGFkZHIsIGlmYS0+aWZhX2luZGV4LCBuZXRtYXNrLCBicm9hZGNhc3QsIHBhcm0pKSkKKwkJICAgIHJldHVybiAwOworCSAgICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwkgICAgZWxzZSBpZiAoaWZhLT5pZmFfZmFtaWx5ID09IEFGX0lORVQ2KQorCSAgICAgIHsKKwkJc3RydWN0IGluNl9hZGRyICphZGRycCA9IE5VTEw7CisJCXdoaWxlIChSVEFfT0socnRhLCBsZW4xKSkKKwkJICB7CisJCSAgICBpZiAocnRhLT5ydGFfdHlwZSA9PSBJRkFfQUREUkVTUykKKwkJICAgICAgYWRkcnAgPSAoKHN0cnVjdCBpbjZfYWRkciAqKShydGErMSkpOyAKKwkJICAgIAorCQkgICAgcnRhID0gUlRBX05FWFQocnRhLCBsZW4xKTsKKwkJICB9CisJCQorCQlpZiAoYWRkcnAgJiYgaXB2Nl9jYWxsYmFjaykKKwkJICBpZiAoISgoKmlwdjZfY2FsbGJhY2spKGFkZHJwLCBpZmEtPmlmYV9pbmRleCwgaWZhLT5pZmFfaW5kZXgsIHBhcm0pKSkKKwkJICAgIHJldHVybiAwOworCSAgICAgIH0KKyNlbmRpZgorCSAgfQorICAgIH0KK30KKworCit2b2lkIG5ldGxpbmtfbXVsdGljYXN0KHZvaWQpCit7CisgIHNzaXplX3QgbGVuOworICBzdHJ1Y3Qgbmxtc2doZHIgKmg7CisgIGludCBmbGFnczsKKyAgCisgIC8qIGRvbid0IHJpc2sgYmxvY2tpbmcgcmVhZGluZyBuZXRsaW5rIG1lc3NhZ2VzIGhlcmUuICovCisgIGlmICgoZmxhZ3MgPSBmY250bChkYWVtb24tPm5ldGxpbmtmZCwgRl9HRVRGTCkpID09IC0xIHx8CisgICAgICBmY250bChkYWVtb24tPm5ldGxpbmtmZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9PSAtMSkgCisgICAgcmV0dXJuOworICAKKyAgaWYgKChsZW4gPSBuZXRsaW5rX3JlY3YoKSkgIT0gLTEpCisgICAgeworICAgICAgZm9yIChoID0gKHN0cnVjdCBubG1zZ2hkciAqKWlvdi5pb3ZfYmFzZTsgTkxNU0dfT0soaCwgKHNpemVfdClsZW4pOyBoID0gTkxNU0dfTkVYVChoLCBsZW4pKQorCWlmIChoLT5ubG1zZ190eXBlID09IE5MTVNHX0VSUk9SKQorCSAgbmxfZXJyKGgpOworCWVsc2UKKwkgIG5sX3JvdXRlY2hhbmdlKGgpOworICAgIH0KKworICAvKiByZXN0b3JlIG5vbi1ibG9ja2luZyBzdGF0dXMgKi8KKyAgZmNudGwoZGFlbW9uLT5uZXRsaW5rZmQsIEZfU0VURkwsIGZsYWdzKTsgCit9CisKK3N0YXRpYyB2b2lkIG5sX2VycihzdHJ1Y3Qgbmxtc2doZHIgKmgpCit7CisgIHN0cnVjdCBubG1zZ2VyciAqZXJyID0gTkxNU0dfREFUQShoKTsKKyAgCisgIGlmIChlcnItPmVycm9yICE9IDApCisgICAgbXlfc3lzbG9nKExPR19FUlIsIF8oIm5ldGxpbmsgcmV0dXJucyBlcnJvcjogJXMiKSwgc3RyZXJyb3IoLShlcnItPmVycm9yKSkpOworfQorCisvKiBXZSBhcnJhbmdlIHRvIHJlY2VpdmUgbmV0bGluayBtdWx0aWNhc3QgbWVzc2FnZXMgd2hlbmV2ZXIgdGhlIG5ldHdvcmsgcm91dGUgaXMgYWRkZWQuCisgICBJZiB0aGlzIGhhcHBlbnMgYW5kIHdlIHN0aWxsIGhhdmUgYSBETlMgcGFja2V0IGluIHRoZSBidWZmZXIsIHdlIHJlLXNlbmQgaXQuCisgICBUaGlzIGhlbHBzIG9uIERvRCBsaW5rcywgd2hlcmUgZnJlcXVlbnRseSB0aGUgcGFja2V0IHdoaWNoIHRyaWdnZXJzIGRpYWxsaW5nIGlzCisgICBhIEROUyBxdWVyeSwgd2hpY2ggdGhlbiBnZXRzIGxvc3QuIEJ5IHJlLXNlbmRpbmcsIHdlIGNhbiBhdm9pZCB0aGUgbG9va3VwCisgICBmYWlsaW5nLiBOb3RlIHRoYXQgd2Ugb25seSBhY2NlcHQgdGhlc2UgbWVzc2FnZXMgZnJvbSB0aGUga2VybmVsIChwaWQgPT0gMCkgKi8gCitzdGF0aWMgdm9pZCBubF9yb3V0ZWNoYW5nZShzdHJ1Y3Qgbmxtc2doZHIgKmgpCit7CisgIGlmIChoLT5ubG1zZ19waWQgPT0gMCAmJiBoLT5ubG1zZ190eXBlID09IFJUTV9ORVdST1VURSkKKyAgICB7CisgICAgICBzdHJ1Y3QgcnRtc2cgKnJ0bSA9IE5MTVNHX0RBVEEoaCk7CisgICAgICBpbnQgZmQ7CisKKyAgICAgIGlmIChydG0tPnJ0bV90eXBlICE9IFJUTl9VTklDQVNUIHx8IHJ0bS0+cnRtX3Njb3BlICE9IFJUX1NDT1BFX0xJTkspCisJcmV0dXJuOworCisgICAgICAvKiBGb3JjZSByZS1yZWFkaW5nIHJlc29sdiBmaWxlIHJpZ2h0IG5vdywgZm9yIGx1Y2suICovCisgICAgICBkYWVtb24tPmxhc3RfcmVzb2x2ID0gMDsKKworICAgICAgaWYgKGRhZW1vbi0+c3J2X3NhdmUpCisJeworCSAgaWYgKGRhZW1vbi0+c3J2X3NhdmUtPnNmZCkKKwkgICAgZmQgPSBkYWVtb24tPnNydl9zYXZlLT5zZmQtPmZkOworCSAgZWxzZSBpZiAoZGFlbW9uLT5yZmRfc2F2ZSAmJiBkYWVtb24tPnJmZF9zYXZlLT5yZWZjb3VudCAhPSAwKQorCSAgICBmZCA9IGRhZW1vbi0+cmZkX3NhdmUtPmZkOworCSAgZWxzZQorCSAgICByZXR1cm47CisJICAKKwkgIHdoaWxlKHNlbmR0byhmZCwgZGFlbW9uLT5wYWNrZXQsIGRhZW1vbi0+cGFja2V0X2xlbiwgMCwKKwkJICAgICAgICZkYWVtb24tPnNydl9zYXZlLT5hZGRyLnNhLCBzYV9sZW4oJmRhZW1vbi0+c3J2X3NhdmUtPmFkZHIpKSA9PSAtMSAmJiByZXRyeV9zZW5kKCkpOyAKKwl9CisgICAgfQorfQorCisjZW5kaWYKKworICAgICAgCmRpZmYgLS1naXQgYS9zcmMvbmV0d29yay5jIGIvc3JjL25ldHdvcmsuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ODExM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL25ldHdvcmsuYwpAQCAtMCwwICsxLDg3NCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0xJTlVYX05FVFdPUksKKworaW50IGluZGV4dG9uYW1lKGludCBmZCwgaW50IGluZGV4LCBjaGFyICpuYW1lKQoreworICBzdHJ1Y3QgaWZyZXEgaWZyOworICAKKyAgaWYgKGluZGV4ID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWZyLmlmcl9pZmluZGV4ID0gaW5kZXg7CisgIGlmIChpb2N0bChmZCwgU0lPQ0dJRk5BTUUsICZpZnIpID09IC0xKQorICAgIHJldHVybiAwOworCisgIHN0cm5jcHkobmFtZSwgaWZyLmlmcl9uYW1lLCBJRl9OQU1FU0laRSk7CisKKyAgcmV0dXJuIDE7Cit9CisKKyNlbHNlCisKK2ludCBpbmRleHRvbmFtZShpbnQgZmQsIGludCBpbmRleCwgY2hhciAqbmFtZSkKK3sgCisgIGlmIChpbmRleCA9PSAwIHx8ICFpZl9pbmRleHRvbmFtZShpbmRleCwgbmFtZSkpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKKyNlbmRpZgorCitpbnQgaWZhY2VfY2hlY2soaW50IGZhbWlseSwgc3RydWN0IGFsbF9hZGRyICphZGRyLCBjaGFyICpuYW1lLCBpbnQgKmluZGV4cCkKK3sKKyAgc3RydWN0IGluYW1lICp0bXA7CisgIGludCByZXQgPSAxOworCisgIC8qIE5vdGU6IGhhdmUgdG8gY2hlY2sgYWxsIGFuZCBub3QgYmFpbCBvdXQgZWFybHksIHNvIHRoYXQgd2Ugc2V0IHRoZQorICAgICAidXNlZCIgZmxhZ3MuICovCisKKyAgaWYgKGluZGV4cCkKKyAgICB7CisgICAgICAvKiBPbmUgZm9ybSBvZiBicmlkZ2luZyBvbiBCU0QgaGFzIHRoZSBwcm9wZXJ0eSB0aGF0IHBhY2tldHMKKwkgY2FuIGJlIHJlY2lldmVkIG9uIGJyaWRnZSBpbnRlcmZhY2VzIHdoaWNoIGRvIG5vdCBoYXZlIGFuIElQIGFkZHJlc3MuCisJIFdlIGFsbG93IHRoZXNlIHRvIGJlIHRyZWF0ZWQgYXMgYWxpYXNlcyBvZiBhbm90aGVyIGludGVyZmFjZSB3aGljaCBkb2VzIGhhdmUKKwkgYW4gSVAgYWRkcmVzcyB3aXRoIC0tZGhjcC1icmlkZ2U9aW50ZXJmYWNlLGFsaWFzLGFsaWFzICovCisgICAgICBzdHJ1Y3QgZGhjcF9icmlkZ2UgKmJyaWRnZSwgKmFsaWFzOworICAgICAgZm9yIChicmlkZ2UgPSBkYWVtb24tPmJyaWRnZXM7IGJyaWRnZTsgYnJpZGdlID0gYnJpZGdlLT5uZXh0KQorCXsKKwkgIGZvciAoYWxpYXMgPSBicmlkZ2UtPmFsaWFzOyBhbGlhczsgYWxpYXMgPSBhbGlhcy0+bmV4dCkKKwkgICAgaWYgKHN0cm5jbXAobmFtZSwgYWxpYXMtPmlmYWNlLCBJRl9OQU1FU0laRSkgPT0gMCkKKwkgICAgICB7CisJCWludCBuZXdpbmRleDsKKwkJCisJCWlmICghKG5ld2luZGV4ID0gaWZfbmFtZXRvaW5kZXgoYnJpZGdlLT5pZmFjZSkpKQorCQkgIHsKKwkJICAgIG15X3N5c2xvZyhMT0dfV0FSTklORywgXygidW5rbm93biBpbnRlcmZhY2UgJXMgaW4gYnJpZGdlLWludGVyZmFjZSIpLCBuYW1lKTsKKwkJICAgIHJldHVybiAwOworCQkgIH0KKwkJZWxzZSAKKwkJICB7CisJCSAgICAqaW5kZXhwID0gbmV3aW5kZXg7CisJCSAgICBzdHJuY3B5KG5hbWUsICBicmlkZ2UtPmlmYWNlLCBJRl9OQU1FU0laRSk7CisJCSAgICBicmVhazsKKwkJICB9CisJICAgICAgfQorCSAgaWYgKGFsaWFzKQorCSAgICBicmVhazsKKwl9CisgICAgfQorICAKKyAgaWYgKGRhZW1vbi0+aWZfbmFtZXMgfHwgKGFkZHIgJiYgZGFlbW9uLT5pZl9hZGRycykpCisgICAgeworICAgICAgcmV0ID0gMDsKKworICAgICAgZm9yICh0bXAgPSBkYWVtb24tPmlmX25hbWVzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKwlpZiAodG1wLT5uYW1lICYmIChzdHJjbXAodG1wLT5uYW1lLCBuYW1lKSA9PSAwKSkKKwkgIHJldCA9IHRtcC0+dXNlZCA9IDE7CisJICAgICAgICAKKyAgICAgIGZvciAodG1wID0gZGFlbW9uLT5pZl9hZGRyczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJaWYgKGFkZHIgJiYgdG1wLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBmYW1pbHkpCisJICB7CisJICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCAmJgorCQl0bXAtPmFkZHIuaW4uc2luX2FkZHIuc19hZGRyID09IGFkZHItPmFkZHIuYWRkcjQuc19hZGRyKQorCSAgICAgIHJldCA9IHRtcC0+dXNlZCA9IDE7CisjaWZkZWYgSEFWRV9JUFY2CisJICAgIGVsc2UgaWYgKGZhbWlseSA9PSBBRl9JTkVUNiAmJgorCQkgICAgIElONl9BUkVfQUREUl9FUVVBTCgmdG1wLT5hZGRyLmluNi5zaW42X2FkZHIsIAorCQkJCQkmYWRkci0+YWRkci5hZGRyNikpCisJICAgICAgcmV0ID0gdG1wLT51c2VkID0gMTsKKyNlbmRpZgorCSAgfSAgICAgICAgICAKKyAgICB9CisgIAorICBmb3IgKHRtcCA9IGRhZW1vbi0+aWZfZXhjZXB0OyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKyAgICBpZiAodG1wLT5uYW1lICYmIChzdHJjbXAodG1wLT5uYW1lLCBuYW1lKSA9PSAwKSkKKyAgICAgIHJldCA9IDA7CisgIAorICByZXR1cm4gcmV0OyAKK30KKyAgICAgIAorc3RhdGljIGludCBpZmFjZV9hbGxvd2VkKHN0cnVjdCBpcmVjICoqaXJlY3AsIGludCBpZl9pbmRleCwgCisJCQkgdW5pb24gbXlzb2NrYWRkciAqYWRkciwgc3RydWN0IGluX2FkZHIgbmV0bWFzaykgCit7CisgIHN0cnVjdCBpcmVjICppZmFjZTsKKyAgaW50IGZkLCBtdHUgPSAwLCBsb29wYmFjazsKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgaW50IGRoY3Bfb2sgPSAxOworICBzdHJ1Y3QgaW5hbWUgKnRtcDsKKyAgCisgIC8qIGNoZWNrIHdoZXRoZXIgdGhlIGludGVyZmFjZSBJUCBoYXMgYmVlbiBhZGRlZCBhbHJlYWR5IAorICAgICB3ZSBjYWxsIHRoaXMgcm91dGluZSBtdWx0aXBsZSB0aW1lcy4gKi8KKyAgZm9yIChpZmFjZSA9ICppcmVjcDsgaWZhY2U7IGlmYWNlID0gaWZhY2UtPm5leHQpIAorICAgIGlmIChzb2NrYWRkcl9pc2VxdWFsKCZpZmFjZS0+YWRkciwgYWRkcikpCisgICAgICByZXR1cm4gMTsKKyAgCisgIGlmICgoZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgMCkpID09IC0xIHx8CisgICAgICAhaW5kZXh0b25hbWUoZmQsIGlmX2luZGV4LCBpZnIuaWZyX25hbWUpIHx8CisgICAgICBpb2N0bChmZCwgU0lPQ0dJRkZMQUdTLCAmaWZyKSA9PSAtMSkKKyAgICB7CisgICAgICBpZiAoZmQgIT0gLTEpCisJeworCSAgaW50IGVycnNhdmUgPSBlcnJubzsKKwkgIGNsb3NlKGZkKTsKKwkgIGVycm5vID0gZXJyc2F2ZTsKKwl9CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAKKyAgbG9vcGJhY2sgPSBpZnIuaWZyX2ZsYWdzICYgSUZGX0xPT1BCQUNLOworCisgIGlmIChpb2N0bChmZCwgU0lPQ0dJRk1UVSwgJmlmcikgIT0gLTEpCisgICAgbXR1ID0gaWZyLmlmcl9tdHU7CisgIAorICBjbG9zZShmZCk7CisgIAorICAvKiBJZiB3ZSBhcmUgcmVzdHJpY3RpbmcgdGhlIHNldCBvZiBpbnRlcmZhY2VzIHRvIHVzZSwgbWFrZQorICAgICBzdXJlIHRoYXQgbG9vcGJhY2sgaW50ZXJmYWNlcyBhcmUgaW4gdGhhdCBzZXQuICovCisgIGlmIChkYWVtb24tPmlmX25hbWVzICYmIGxvb3BiYWNrKQorICAgIHsKKyAgICAgIHN0cnVjdCBpbmFtZSAqbG87CisgICAgICBmb3IgKGxvID0gZGFlbW9uLT5pZl9uYW1lczsgbG87IGxvID0gbG8tPm5leHQpCisJaWYgKGxvLT5uYW1lICYmIHN0cmNtcChsby0+bmFtZSwgaWZyLmlmcl9uYW1lKSA9PSAwKQorCSAgeworCSAgICBsby0+aXNsb29wID0gMTsKKwkgICAgYnJlYWs7CisJICB9CisgICAgICAKKyAgICAgIGlmICghbG8gJiYgCisJICAobG8gPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbmFtZSkpKSAmJgorCSAgKGxvLT5uYW1lID0gd2hpbmVfbWFsbG9jKHN0cmxlbihpZnIuaWZyX25hbWUpKzEpKSkKKwl7CisJICBzdHJjcHkobG8tPm5hbWUsIGlmci5pZnJfbmFtZSk7CisJICBsby0+aXNsb29wID0gbG8tPnVzZWQgPSAxOworCSAgbG8tPm5leHQgPSBkYWVtb24tPmlmX25hbWVzOworCSAgZGFlbW9uLT5pZl9uYW1lcyA9IGxvOworCX0KKyAgICB9CisgIAorICBpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQgJiYKKyAgICAgICFpZmFjZV9jaGVjayhBRl9JTkVULCAoc3RydWN0IGFsbF9hZGRyICopJmFkZHItPmluLnNpbl9hZGRyLCBpZnIuaWZyX25hbWUsIE5VTEwpKQorICAgIHJldHVybiAxOworICAKKyAgZm9yICh0bXAgPSBkYWVtb24tPmRoY3BfZXhjZXB0OyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKyAgICBpZiAodG1wLT5uYW1lICYmIChzdHJjbXAodG1wLT5uYW1lLCBpZnIuaWZyX25hbWUpID09IDApKQorICAgICAgZGhjcF9vayA9IDA7CisgIAorI2lmZGVmIEhBVkVfSVBWNgorICBpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2ICYmCisgICAgICAhaWZhY2VfY2hlY2soQUZfSU5FVDYsIChzdHJ1Y3QgYWxsX2FkZHIgKikmYWRkci0+aW42LnNpbjZfYWRkciwgaWZyLmlmcl9uYW1lLCBOVUxMKSkKKyAgICByZXR1cm4gMTsKKyNlbmRpZgorCisgIC8qIGFkZCB0byBsaXN0ICovCisgIGlmICgoaWZhY2UgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcmVjKSkpKQorICAgIHsKKyAgICAgIGlmYWNlLT5hZGRyID0gKmFkZHI7CisgICAgICBpZmFjZS0+bmV0bWFzayA9IG5ldG1hc2s7CisgICAgICBpZmFjZS0+ZGhjcF9vayA9IGRoY3Bfb2s7CisgICAgICBpZmFjZS0+bXR1ID0gbXR1OworICAgICAgaWZhY2UtPm5leHQgPSAqaXJlY3A7CisgICAgICAqaXJlY3AgPSBpZmFjZTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgCisgIGVycm5vID0gRU5PTUVNOyAKKyAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBIQVZFX0lQVjYKK3N0YXRpYyBpbnQgaWZhY2VfYWxsb3dlZF92NihzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsLCAKKwkJCSAgICBpbnQgc2NvcGUsIGludCBpZl9pbmRleCwgdm9pZCAqdnBhcmFtKQoreworICB1bmlvbiBteXNvY2thZGRyIGFkZHI7CisgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2s7IC8qIGR1bW15ICovCisgIAorICBuZXRtYXNrLnNfYWRkciA9IDA7CisgIAorICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgYWRkci5pbjYuc2luNl9sZW4gPSBzaXplb2YoYWRkci5pbjYpOworI2VuZGlmCisgIGFkZHIuaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgIGFkZHIuaW42LnNpbjZfYWRkciA9ICpsb2NhbDsKKyAgYWRkci5pbjYuc2luNl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5wb3J0KTsKKyAgYWRkci5pbjYuc2luNl9zY29wZV9pZCA9IHNjb3BlOworICAKKyAgcmV0dXJuIGlmYWNlX2FsbG93ZWQoKHN0cnVjdCBpcmVjICoqKXZwYXJhbSwgaWZfaW5kZXgsICZhZGRyLCBuZXRtYXNrKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGlmYWNlX2FsbG93ZWRfdjQoc3RydWN0IGluX2FkZHIgbG9jYWwsIGludCBpZl9pbmRleCwgCisJCQkgICAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgc3RydWN0IGluX2FkZHIgYnJvYWRjYXN0LCB2b2lkICp2cGFyYW0pCit7CisgIHVuaW9uIG15c29ja2FkZHIgYWRkcjsKKworICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgYWRkci5pbi5zaW5fbGVuID0gc2l6ZW9mKGFkZHIuaW4pOworI2VuZGlmCisgIGFkZHIuaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgIGFkZHIuaW4uc2luX2FkZHIgPSBicm9hZGNhc3Q7IC8qIHdhcm5pbmcgKi8KKyAgYWRkci5pbi5zaW5fYWRkciA9IGxvY2FsOworICBhZGRyLmluLnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5wb3J0KTsKKworICByZXR1cm4gaWZhY2VfYWxsb3dlZCgoc3RydWN0IGlyZWMgKiopdnBhcmFtLCBpZl9pbmRleCwgJmFkZHIsIG5ldG1hc2spOworfQorICAgCitpbnQgZW51bWVyYXRlX2ludGVyZmFjZXModm9pZCkKK3sKKyNpZmRlZiBIQVZFX0lQVjYKKyAgcmV0dXJuIGlmYWNlX2VudW1lcmF0ZSgmZGFlbW9uLT5pbnRlcmZhY2VzLCBpZmFjZV9hbGxvd2VkX3Y0LCBpZmFjZV9hbGxvd2VkX3Y2KTsKKyNlbHNlCisgIHJldHVybiBpZmFjZV9lbnVtZXJhdGUoJmRhZW1vbi0+aW50ZXJmYWNlcywgaWZhY2VfYWxsb3dlZF92NCwgTlVMTCk7CisjZW5kaWYKK30KKworLyogc2V0IE5PTkJMT0NLIGJpdCBvbiBmZDogU2VlIFN0ZXZlbnMgMTYuNiAqLworaW50IGZpeF9mZChpbnQgZmQpCit7CisgIGludCBmbGFnczsKKworICBpZiAoKGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkwpKSA9PSAtMSB8fAorICAgICAgZmNudGwoZmQsIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSykgPT0gLTEpCisgICAgcmV0dXJuIDA7CisgIAorICByZXR1cm4gMTsKK30KKworI2lmIGRlZmluZWQoSEFWRV9JUFY2KQorc3RhdGljIGludCBjcmVhdGVfaXB2Nl9saXN0ZW5lcihzdHJ1Y3QgbGlzdGVuZXIgKipsaW5rLCBpbnQgcG9ydCkKK3sKKyAgdW5pb24gbXlzb2NrYWRkciBhZGRyOworICBpbnQgdGNwZmQsIGZkOworICBzdHJ1Y3QgbGlzdGVuZXIgKmw7CisgIGludCBvcHQgPSAxOworCisgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgYWRkci5pbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgYWRkci5pbjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7CisgIGFkZHIuaW42LnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIGFkZHIuaW42LnNpbjZfbGVuID0gc2l6ZW9mKGFkZHIuaW42KTsKKyNlbmRpZgorCisgIC8qIE5vIGVycm9yIG9mIHRoZSBrZXJuZWwgZG9lc24ndCBzdXBwb3J0IElQdjYgKi8KKyAgaWYgKChmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19ER1JBTSwgMCkpID09IC0xKQorICAgIHJldHVybiAoZXJybm8gPT0gRVBST1RPTk9TVVBQT1JUIHx8CisJICAgIGVycm5vID09IEVBRk5PU1VQUE9SVCB8fAorCSAgICBlcnJubyA9PSBFSU5WQUwpOworICAKKyAgaWYgKCh0Y3BmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19TVFJFQU0sIDApKSA9PSAtMSkKKyAgICByZXR1cm4gMDsKKyAgICAgIAorICBpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmb3B0LCBzaXplb2Yob3B0KSkgPT0gLTEgfHwKKyAgICAgIHNldHNvY2tvcHQodGNwZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9wdCwgc2l6ZW9mKG9wdCkpID09IC0xIHx8CisgICAgICBzZXRzb2Nrb3B0KGZkLCBJUFY2X0xFVkVMLCBJUFY2X1Y2T05MWSwgJm9wdCwgc2l6ZW9mKG9wdCkpID09IC0xIHx8CisgICAgICBzZXRzb2Nrb3B0KHRjcGZkLCBJUFY2X0xFVkVMLCBJUFY2X1Y2T05MWSwgJm9wdCwgc2l6ZW9mKG9wdCkpID09IC0xIHx8CisgICAgICAhZml4X2ZkKGZkKSB8fAorICAgICAgIWZpeF9mZCh0Y3BmZCkgfHwKKyNpZmRlZiBJUFY2X1JFQ1ZQS1RJTkZPCisgICAgICBzZXRzb2Nrb3B0KGZkLCBJUFY2X0xFVkVMLCBJUFY2X1JFQ1ZQS1RJTkZPLCAmb3B0LCBzaXplb2Yob3B0KSkgPT0gLTEgfHwKKyNlbHNlCisgICAgICBzZXRzb2Nrb3B0KGZkLCBJUFY2X0xFVkVMLCBJUFY2X1BLVElORk8sICZvcHQsIHNpemVvZihvcHQpKSA9PSAtMSB8fAorI2VuZGlmCisgICAgICBiaW5kKHRjcGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNhX2xlbigmYWRkcikpID09IC0xIHx8CisgICAgICBsaXN0ZW4odGNwZmQsIDUpID09IC0xIHx8CisgICAgICBiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNhX2xlbigmYWRkcikpID09IC0xKSAKKyAgICByZXR1cm4gMDsKKyAgICAgIAorICBsID0gc2FmZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXN0ZW5lcikpOworICBsLT5mZCA9IGZkOworICBsLT50Y3BmZCA9IHRjcGZkOworICBsLT50ZnRwZmQgPSAtMTsKKyAgbC0+ZmFtaWx5ID0gQUZfSU5FVDY7CisgIGwtPm5leHQgPSBOVUxMOworICAqbGluayA9IGw7CisgIAorICByZXR1cm4gMTsKK30KKyNlbmRpZgorCitzdHJ1Y3QgbGlzdGVuZXIgKmNyZWF0ZV93aWxkY2FyZF9saXN0ZW5lcnModm9pZCkKK3sKKyAgdW5pb24gbXlzb2NrYWRkciBhZGRyOworICBpbnQgb3B0ID0gMTsKKyAgc3RydWN0IGxpc3RlbmVyICpsLCAqbDYgPSBOVUxMOworICBpbnQgdGNwZmQgPSAtMSwgZmQgPSAtMSwgdGZ0cGZkID0gLTE7CisKKyAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICBhZGRyLmluLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICBhZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisgIGFkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPnBvcnQpOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIGFkZHIuaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisKKyAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwKQorICAgIHsKKyAgICAgIAorICAgICAgaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPT0gLTEgfHwKKwkgICh0Y3BmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCkpID09IC0xKQorCXJldHVybiBOVUxMOworICAgICAgCisgICAgICBpZiAoc2V0c29ja29wdCh0Y3BmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmb3B0LCBzaXplb2Yob3B0KSkgPT0gLTEgfHwKKwkgIGJpbmQodGNwZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2FfbGVuKCZhZGRyKSkgPT0gLTEgfHwKKwkgIGxpc3Rlbih0Y3BmZCwgNSkgPT0gLTEgfHwKKwkgICFmaXhfZmQodGNwZmQpIHx8CisjaWZkZWYgSEFWRV9JUFY2CisJICAhY3JlYXRlX2lwdjZfbGlzdGVuZXIoJmw2LCBkYWVtb24tPnBvcnQpIHx8CisjZW5kaWYKKwkgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9wdCwgc2l6ZW9mKG9wdCkpID09IC0xIHx8CisJICAhZml4X2ZkKGZkKSB8fAorI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKSAKKwkgIHNldHNvY2tvcHQoZmQsIFNPTF9JUCwgSVBfUEtUSU5GTywgJm9wdCwgc2l6ZW9mKG9wdCkpID09IC0xIHx8CisjZWxpZiBkZWZpbmVkKElQX1JFQ1ZEU1RBRERSKSAmJiBkZWZpbmVkKElQX1JFQ1ZJRikKKwkgIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVAsIElQX1JFQ1ZEU1RBRERSLCAmb3B0LCBzaXplb2Yob3B0KSkgPT0gLTEgfHwKKwkgIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVAsIElQX1JFQ1ZJRiwgJm9wdCwgc2l6ZW9mKG9wdCkpID09IC0xIHx8CisjZW5kaWYgCisJICBiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNhX2xlbigmYWRkcikpID09IC0xKQorCXJldHVybiBOVUxMOworICAgIH0KKyAgCisjaWZkZWYgSEFWRV9URlRQCisgIGlmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfVEZUUCkKKyAgICB7CisgICAgICBhZGRyLmluLnNpbl9wb3J0ID0gaHRvbnMoVEZUUF9QT1JUKTsKKyAgICAgIGlmICgodGZ0cGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApKSA9PSAtMSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIAorICAgICAgaWYgKCFmaXhfZmQodGZ0cGZkKSB8fAorI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKSAKKwkgIHNldHNvY2tvcHQodGZ0cGZkLCBTT0xfSVAsIElQX1BLVElORk8sICZvcHQsIHNpemVvZihvcHQpKSA9PSAtMSB8fAorI2VsaWYgZGVmaW5lZChJUF9SRUNWRFNUQUREUikgJiYgZGVmaW5lZChJUF9SRUNWSUYpCisJICBzZXRzb2Nrb3B0KHRmdHBmZCwgSVBQUk9UT19JUCwgSVBfUkVDVkRTVEFERFIsICZvcHQsIHNpemVvZihvcHQpKSA9PSAtMSB8fAorCSAgc2V0c29ja29wdCh0ZnRwZmQsIElQUFJPVE9fSVAsIElQX1JFQ1ZJRiwgJm9wdCwgc2l6ZW9mKG9wdCkpID09IC0xIHx8CisjZW5kaWYgCisJICBiaW5kKHRmdHBmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzYV9sZW4oJmFkZHIpKSA9PSAtMSkKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYKKyAgCisgIGwgPSBzYWZlX21hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3RlbmVyKSk7CisgIGwtPmZhbWlseSA9IEFGX0lORVQ7CisgIGwtPmZkID0gZmQ7CisgIGwtPnRjcGZkID0gdGNwZmQ7CisgIGwtPnRmdHBmZCA9IHRmdHBmZDsKKyAgbC0+bmV4dCA9IGw2OworCisgIHJldHVybiBsOworfQorCitzdHJ1Y3QgbGlzdGVuZXIgKmNyZWF0ZV9ib3VuZF9saXN0ZW5lcnModm9pZCkKK3sKKyAgc3RydWN0IGxpc3RlbmVyICpsaXN0ZW5lcnMgPSBOVUxMOworICBzdHJ1Y3QgaXJlYyAqaWZhY2U7CisgIGludCByYywgb3B0ID0gMTsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgc3RhdGljIGludCBkYWRfY291bnQgPSAwOworI2VuZGlmCisKKyAgZm9yIChpZmFjZSA9IGRhZW1vbi0+aW50ZXJmYWNlczsgaWZhY2U7IGlmYWNlID0gaWZhY2UtPm5leHQpCisgICAgeworICAgICAgc3RydWN0IGxpc3RlbmVyICpuZXcgPSBzYWZlX21hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3RlbmVyKSk7CisgICAgICBuZXctPmZhbWlseSA9IGlmYWNlLT5hZGRyLnNhLnNhX2ZhbWlseTsKKyAgICAgIG5ldy0+aWZhY2UgPSBpZmFjZTsKKyAgICAgIG5ldy0+bmV4dCA9IGxpc3RlbmVyczsKKyAgICAgIG5ldy0+dGZ0cGZkID0gLTE7CisgICAgICBuZXctPnRjcGZkID0gLTE7CisgICAgICBuZXctPmZkID0gLTE7CisgICAgICBsaXN0ZW5lcnMgPSBuZXc7CisKKyAgICAgIGlmIChkYWVtb24tPnBvcnQgIT0gMCkKKwl7CisJICBpZiAoKG5ldy0+dGNwZmQgPSBzb2NrZXQoaWZhY2UtPmFkZHIuc2Euc2FfZmFtaWx5LCBTT0NLX1NUUkVBTSwgMCkpID09IC0xIHx8CisJICAgICAgKG5ldy0+ZmQgPSBzb2NrZXQoaWZhY2UtPmFkZHIuc2Euc2FfZmFtaWx5LCBTT0NLX0RHUkFNLCAwKSkgPT0gLTEgfHwKKwkgICAgICBzZXRzb2Nrb3B0KG5ldy0+ZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9wdCwgc2l6ZW9mKG9wdCkpID09IC0xIHx8CisJICAgICAgc2V0c29ja29wdChuZXctPnRjcGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICZvcHQsIHNpemVvZihvcHQpKSA9PSAtMSB8fAorCSAgICAgICFmaXhfZmQobmV3LT50Y3BmZCkgfHwKKwkgICAgICAhZml4X2ZkKG5ldy0+ZmQpKQorCSAgICBkaWUoXygiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworCSAgCisjaWZkZWYgSEFWRV9JUFY2CisJICBpZiAoaWZhY2UtPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorCSAgICB7CisJICAgICAgaWYgKHNldHNvY2tvcHQobmV3LT5mZCwgSVBWNl9MRVZFTCwgSVBWNl9WNk9OTFksICZvcHQsIHNpemVvZihvcHQpKSA9PSAtMSB8fAorCQkgIHNldHNvY2tvcHQobmV3LT50Y3BmZCwgSVBWNl9MRVZFTCwgSVBWNl9WNk9OTFksICZvcHQsIHNpemVvZihvcHQpKSA9PSAtMSkKKwkJZGllKF8oImZhaWxlZCB0byBzZXQgSVBWNiBvcHRpb25zIG9uIGxpc3RlbmluZyBzb2NrZXQ6ICVzIiksIE5VTEwsIEVDX0JBRE5FVCk7CisJICAgIH0KKyNlbmRpZgorCisJICB3aGlsZSgxKQorCSAgICB7CisJICAgICAgaWYgKChyYyA9IGJpbmQobmV3LT5mZCwgJmlmYWNlLT5hZGRyLnNhLCBzYV9sZW4oJmlmYWNlLT5hZGRyKSkpICE9IC0xKQorCQlicmVhazsKKwkgICAgICAKKyNpZmRlZiBIQVZFX0lQVjYKKwkgICAgICAvKiBBbiBpbnRlcmZhY2UgbWF5IGhhdmUgYW4gSVB2NiBhZGRyZXNzIHdoaWNoIGlzIHN0aWxsIHVuZGVyZ29pbmcgREFELiAKKwkJIElmIHNvLCB0aGUgYmluZCB3aWxsIGZhaWwgdW50aWwgdGhlIERBRCBjb21wbGV0ZXMsIHNvIHdlIHRyeSBvdmVyIDIwIHNlY29uZHMKKwkJIGJlZm9yZSBmYWlsaW5nLiAqLworCSAgICAgIGlmIChpZmFjZS0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYgKGVycm5vID09IEVOT0RFViB8fCBlcnJubyA9PSBFQUREUk5PVEFWQUlMKSAmJiAKKwkJICBkYWRfY291bnQrKyA8IERBRF9XQUlUKQorCQl7CisJCSAgc2xlZXAoMSk7CisJCSAgY29udGludWU7CisJCX0KKyNlbmRpZgorCSAgICAgIGJyZWFrOworCSAgICB9CisJICAKKwkgIGlmIChyYyA9PSAtMSB8fCBiaW5kKG5ldy0+dGNwZmQsICZpZmFjZS0+YWRkci5zYSwgc2FfbGVuKCZpZmFjZS0+YWRkcikpID09IC0xKQorCSAgICB7CisJICAgICAgcHJldHR5cHJpbnRfYWRkcigmaWZhY2UtPmFkZHIsIGRhZW1vbi0+bmFtZWJ1ZmYpOworCSAgICAgIGRpZShfKCJmYWlsZWQgdG8gYmluZCBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiKSwgCisJCSAgZGFlbW9uLT5uYW1lYnVmZiwgRUNfQkFETkVUKTsKKwkgICAgfQorCSAgICAKKwkgIGlmIChsaXN0ZW4obmV3LT50Y3BmZCwgNSkgPT0gLTEpCisJICAgIGRpZShfKCJmYWlsZWQgdG8gbGlzdGVuIG9uIHNvY2tldDogJXMiKSwgTlVMTCwgRUNfQkFETkVUKTsKKwl9CisKKyNpZmRlZiBIQVZFX1RGVFAKKyAgICAgIGlmICgoZGFlbW9uLT5vcHRpb25zICYgT1BUX1RGVFApICYmIGlmYWNlLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUICYmIGlmYWNlLT5kaGNwX29rKQorCXsKKwkgIHNob3J0IHNhdmUgPSBpZmFjZS0+YWRkci5pbi5zaW5fcG9ydDsKKwkgIGlmYWNlLT5hZGRyLmluLnNpbl9wb3J0ID0gaHRvbnMoVEZUUF9QT1JUKTsKKwkgIGlmICgobmV3LT50ZnRwZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCkpID09IC0xIHx8CisJICAgICAgc2V0c29ja29wdChuZXctPnRmdHBmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmb3B0LCBzaXplb2Yob3B0KSkgPT0gLTEgfHwKKwkgICAgICAhZml4X2ZkKG5ldy0+dGZ0cGZkKSB8fAorCSAgICAgIGJpbmQobmV3LT50ZnRwZmQsICZpZmFjZS0+YWRkci5zYSwgc2FfbGVuKCZpZmFjZS0+YWRkcikpID09IC0xKQorCSAgICBkaWUoXygiZmFpbGVkIHRvIGNyZWF0ZSBURlRQIHNvY2tldDogJXMiKSwgTlVMTCwgRUNfQkFETkVUKTsKKwkgIGlmYWNlLT5hZGRyLmluLnNpbl9wb3J0ID0gc2F2ZTsKKwl9CisjZW5kaWYKKworICAgIH0KKworICByZXR1cm4gbGlzdGVuZXJzOworfQorCisKKy8qIHJldHVybiBhIFVEUCBzb2NrZXQgYm91bmQgdG8gYSByYW5kb20gcG9ydCwgaGF2ZSB0byBjb3BlIHdpdGggc3RyYXlpbmcgaW50bworICAgb2NjdXBpZWQgcG9ydCBub3MgYW5kIHJlc2VydmVkIG9uZXMuICovCitpbnQgcmFuZG9tX3NvY2soaW50IGZhbWlseSkKK3sKKyAgaW50IGZkOworCisgIGlmICgoZmQgPSBzb2NrZXQoZmFtaWx5LCBTT0NLX0RHUkFNLCAwKSkgIT0gLTEpCisgICAgeworICAgICAgdW5pb24gbXlzb2NrYWRkciBhZGRyOworICAgICAgdW5zaWduZWQgaW50IHBvcnRzX2F2YWlsID0gNjU1MzZ1IC0gKHVuc2lnbmVkIHNob3J0KWRhZW1vbi0+bWluX3BvcnQ7CisgICAgICBpbnQgdHJpZXMgPSBwb3J0c19hdmFpbCA8IDMwID8gMyAqIHBvcnRzX2F2YWlsIDogMTAwOworCisgICAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgICBhZGRyLnNhLnNhX2ZhbWlseSA9IGZhbWlseTsKKworICAgICAgLyogZG9uJ3QgbG9vcCBmb3JldmVyIGlmIGFsbCBwb3J0cyBpbiB1c2UuICovCisKKyAgICAgIGlmIChmaXhfZmQoZmQpKQorCXdoaWxlKHRyaWVzLS0pCisJICB7CisJICAgIHVuc2lnbmVkIHNob3J0IHBvcnQgPSByYW5kMTYoKTsKKwkgICAgCisJICAgIGlmIChkYWVtb24tPm1pbl9wb3J0ICE9IDApCisJICAgICAgcG9ydCA9IGh0b25zKGRhZW1vbi0+bWluX3BvcnQgKyAocG9ydCAlICgodW5zaWduZWQgc2hvcnQpcG9ydHNfYXZhaWwpKSk7CisJICAgIAorCSAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpIAorCSAgICAgIHsKKwkJYWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworCQlhZGRyLmluLnNpbl9wb3J0ID0gcG9ydDsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorCQlhZGRyLmluLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCSAgICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJYWRkci5pbjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7IAorCQlhZGRyLmluNi5zaW42X3BvcnQgPSBwb3J0OworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisJCWFkZHIuaW42LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJICAgICAgfQorI2VuZGlmCisJICAgIAorCSAgICBpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzYV9sZW4oJmFkZHIpKSA9PSAwKQorCSAgICAgIHJldHVybiBmZDsKKwkgICAgCisJICAgIGlmIChlcnJubyAhPSBFQUREUklOVVNFICYmIGVycm5vICE9IEVBQ0NFUykKKwkgICAgICBicmVhazsKKwkgIH0KKworICAgICAgY2xvc2UoZmQpOworICAgIH0KKworICByZXR1cm4gLTE7IAorfQorICAKKworaW50IGxvY2FsX2JpbmQoaW50IGZkLCB1bmlvbiBteXNvY2thZGRyICphZGRyLCBjaGFyICppbnRuYW1lLCBpbnQgaXNfdGNwKQoreworICB1bmlvbiBteXNvY2thZGRyIGFkZHJfY29weSA9ICphZGRyOworCisgIC8qIGNhbm5vdCBzZXQgc291cmNlIF9wb3J0XyBmb3IgVENQIGNvbm5lY3Rpb25zLiAqLworICBpZiAoaXNfdGNwKQorICAgIHsKKyAgICAgIGlmIChhZGRyX2NvcHkuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisJYWRkcl9jb3B5LmluLnNpbl9wb3J0ID0gMDsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgICAgIGVsc2UKKwlhZGRyX2NvcHkuaW42LnNpbjZfcG9ydCA9IDA7CisjZW5kaWYKKyAgICB9CisgIAorICBpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyX2NvcHksIHNhX2xlbigmYWRkcl9jb3B5KSkgPT0gLTEpCisgICAgcmV0dXJuIDA7CisgICAgCisjaWYgZGVmaW5lZChTT19CSU5EVE9ERVZJQ0UpCisgIGlmIChpbnRuYW1lWzBdICE9IDAgJiYKKyAgICAgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSwgaW50bmFtZSwgc3RybGVuKGludG5hbWUpKSA9PSAtMSkKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHNlcnZlcmZkICphbGxvY2F0ZV9zZmQodW5pb24gbXlzb2NrYWRkciAqYWRkciwgY2hhciAqaW50bmFtZSkKK3sKKyAgc3RydWN0IHNlcnZlcmZkICpzZmQ7CisgIGludCBlcnJzYXZlOworCisgIC8qIHdoZW4gdXNpbmcgcmFuZG9tIHBvcnRzLCBzZXJ2ZXJzIHdoaWNoIHdvdWxkIG90aGVyd2lzZSB1c2UKKyAgICAgdGhlIElOQUREUl9BTlkvcG9ydDAgc29ja2V0IGhhdmUgc2ZkIHNldCB0byBOVUxMICovCisgIGlmICghZGFlbW9uLT5vc3BvcnQgJiYgaW50bmFtZVswXSA9PSAwKQorICAgIHsKKyAgICAgIGVycm5vID0gMDsKKyAgICAgIAorICAgICAgaWYgKGFkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUICYmCisJICBhZGRyLT5pbi5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSAmJgorCSAgYWRkci0+aW4uc2luX3BvcnQgPT0gaHRvbnMoMCkpIAorCXJldHVybiBOVUxMOworCisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2ICYmCisJICBtZW1jbXAoJmFkZHItPmluNi5zaW42X2FkZHIsICZpbjZhZGRyX2FueSwgc2l6ZW9mKGluNmFkZHJfYW55KSkgPT0gMCAmJgorCSAgYWRkci0+aW42LnNpbjZfcG9ydCA9PSBodG9ucygwKSkgCisJcmV0dXJuIE5VTEw7CisjZW5kaWYKKyAgICB9CisgICAgICAKKyAgLyogbWF5IGhhdmUgYSBzdWl0YWJsZSBvbmUgYWxyZWFkeSAqLworICBmb3IgKHNmZCA9IGRhZW1vbi0+c2Zkczsgc2ZkOyBzZmQgPSBzZmQtPm5leHQgKQorICAgIGlmIChzb2NrYWRkcl9pc2VxdWFsKCZzZmQtPnNvdXJjZV9hZGRyLCBhZGRyKSAmJgorCXN0cmNtcChpbnRuYW1lLCBzZmQtPmludGVyZmFjZSkgPT0gMCkKKyAgICAgIHJldHVybiBzZmQ7CisgIAorICAvKiBuZWVkIHRvIG1ha2UgYSBuZXcgb25lLiAqLworICBlcnJubyA9IEVOT01FTTsgLyogaW4gY2FzZSBtYWxsb2MgZmFpbHMuICovCisgIGlmICghKHNmZCA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcnZlcmZkKSkpKQorICAgIHJldHVybiBOVUxMOworICAKKyAgaWYgKChzZmQtPmZkID0gc29ja2V0KGFkZHItPnNhLnNhX2ZhbWlseSwgU09DS19ER1JBTSwgMCkpID09IC0xKQorICAgIHsKKyAgICAgIGZyZWUoc2ZkKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgCisgIGlmICghbG9jYWxfYmluZChzZmQtPmZkLCBhZGRyLCBpbnRuYW1lLCAwKSB8fCAhZml4X2ZkKHNmZC0+ZmQpKQorICAgIHsgCisgICAgICBlcnJzYXZlID0gZXJybm87IC8qIHNhdmUgZXJyb3IgZnJvbSBiaW5kLiAqLworICAgICAgY2xvc2Uoc2ZkLT5mZCk7CisgICAgICBmcmVlKHNmZCk7CisgICAgICBlcnJubyA9IGVycnNhdmU7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgCisgIHN0cmNweShzZmQtPmludGVyZmFjZSwgaW50bmFtZSk7IAorICBzZmQtPnNvdXJjZV9hZGRyID0gKmFkZHI7CisgIHNmZC0+bmV4dCA9IGRhZW1vbi0+c2ZkczsKKyAgZGFlbW9uLT5zZmRzID0gc2ZkOworICByZXR1cm4gc2ZkOyAKK30KKworLyogY3JlYXRlIHVwc3RyZWFtIHNvY2tldHMgZHVyaW5nIHN0YXJ0dXAsIGJlZm9yZSByb290IGlzIGRyb3BwZWQgd2hpY2ggbWF5IGJlIG5lZWRlZAorICAgdGhpcyBhbGxvd3MgcXVlcnlfcG9ydCB0byBiZSBhIGxvdyBwb3J0IGFuZCBpbnRlcmZhY2UgYmluZGluZyAqLwordm9pZCBwcmVfYWxsb2NhdGVfc2Zkcyh2b2lkKQoreworICBzdHJ1Y3Qgc2VydmVyICpzcnY7CisgIAorICBpZiAoZGFlbW9uLT5xdWVyeV9wb3J0ICE9IDApCisgICAgeworICAgICAgdW5pb24gIG15c29ja2FkZHIgYWRkcjsKKyAgICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgIGFkZHIuaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICBhZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisgICAgICBhZGRyLmluLnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5xdWVyeV9wb3J0KTsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgICAgYWRkci5pbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKyAgICAgIGFsbG9jYXRlX3NmZCgmYWRkciwgIiIpOworI2lmZGVmIEhBVkVfSVBWNgorICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgYWRkci5pbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgIGFkZHIuaW42LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworICAgICAgYWRkci5pbjYuc2luNl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5xdWVyeV9wb3J0KTsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgICAgYWRkci5pbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKyAgICAgIGFsbG9jYXRlX3NmZCgmYWRkciwgIiIpOworI2VuZGlmCisgICAgfQorICAKKyAgZm9yIChzcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNydjsgc3J2ID0gc3J2LT5uZXh0KQorICAgIGlmICghKHNydi0+ZmxhZ3MgJiAoU0VSVl9MSVRFUkFMX0FERFJFU1MgfCBTRVJWX05PX0FERFIpKSAmJgorCSFhbGxvY2F0ZV9zZmQoJnNydi0+c291cmNlX2FkZHIsIHNydi0+aW50ZXJmYWNlKSAmJgorCWVycm5vICE9IDAgJiYKKwkoZGFlbW9uLT5vcHRpb25zICYgT1BUX05PV0lMRCkpCisgICAgICB7CisJcHJldHR5cHJpbnRfYWRkcigmc3J2LT5hZGRyLCBkYWVtb24tPm5hbWVidWZmKTsKKwlpZiAoc3J2LT5pbnRlcmZhY2VbMF0gIT0gMCkKKwkgIHsKKwkgICAgc3RyY2F0KGRhZW1vbi0+bmFtZWJ1ZmYsICIgIik7CisJICAgIHN0cmNhdChkYWVtb24tPm5hbWVidWZmLCBzcnYtPmludGVyZmFjZSk7CisJICB9CisJZGllKF8oImZhaWxlZCB0byBiaW5kIHNlcnZlciBzb2NrZXQgZm9yICVzOiAlcyIpLAorCSAgICBkYWVtb24tPm5hbWVidWZmLCBFQ19CQURORVQpOworICAgICAgfSAgCit9CisKKwordm9pZCBjaGVja19zZXJ2ZXJzKHZvaWQpCit7CisgIHN0cnVjdCBpcmVjICppZmFjZTsKKyAgc3RydWN0IHNlcnZlciAqbmV3LCAqdG1wLCAqcmV0ID0gTlVMTDsKKyAgaW50IHBvcnQgPSAwOworCisgIGZvciAobmV3ID0gZGFlbW9uLT5zZXJ2ZXJzOyBuZXc7IG5ldyA9IHRtcCkKKyAgICB7CisgICAgICB0bXAgPSBuZXctPm5leHQ7CisgICAgICAKKyAgICAgIGlmICghKG5ldy0+ZmxhZ3MgJiAoU0VSVl9MSVRFUkFMX0FERFJFU1MgfCBTRVJWX05PX0FERFIpKSkKKwl7CisJICBwb3J0ID0gcHJldHR5cHJpbnRfYWRkcigmbmV3LT5hZGRyLCBkYWVtb24tPm5hbWVidWZmKTsKKworCSAgLyogMC4wLjAuMCBpcyBub3RoaW5nLCB0aGUgc3RhY2sgdHJlYXRzIGl0IGxpa2UgMTI3LjAuMC4xICovCisJICBpZiAobmV3LT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUICYmCisJICAgICAgbmV3LT5hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9PSAwKQorCSAgICB7CisJICAgICAgZnJlZShuZXcpOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisKKwkgIGZvciAoaWZhY2UgPSBkYWVtb24tPmludGVyZmFjZXM7IGlmYWNlOyBpZmFjZSA9IGlmYWNlLT5uZXh0KQorCSAgICBpZiAoc29ja2FkZHJfaXNlcXVhbCgmbmV3LT5hZGRyLCAmaWZhY2UtPmFkZHIpKQorCSAgICAgIGJyZWFrOworCSAgaWYgKGlmYWNlKQorCSAgICB7CisJICAgICAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIiksIGRhZW1vbi0+bmFtZWJ1ZmYpOworCSAgICAgIGZyZWUobmV3KTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgCisJICAvKiBEbyB3ZSBuZWVkIGEgc29ja2V0IHNldD8gKi8KKwkgIGlmICghbmV3LT5zZmQgJiYgCisJICAgICAgIShuZXctPnNmZCA9IGFsbG9jYXRlX3NmZCgmbmV3LT5zb3VyY2VfYWRkciwgbmV3LT5pbnRlcmZhY2UpKSAmJgorCSAgICAgIGVycm5vICE9IDApCisJICAgIHsKKwkgICAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIAorCQkJXygiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIpLAorCQkJZGFlbW9uLT5uYW1lYnVmZiwgc3RyZXJyb3IoZXJybm8pKTsKKwkgICAgICBmcmVlKG5ldyk7CisJICAgICAgY29udGludWU7CisJICAgIH0KKwl9CisgICAgICAKKyAgICAgIC8qIHJldmVyc2Ugb3JkZXIgLSBnZXRzIGl0IHJpZ2h0LiAqLworICAgICAgbmV3LT5uZXh0ID0gcmV0OworICAgICAgcmV0ID0gbmV3OworICAgICAgCisgICAgICBpZiAobmV3LT5mbGFncyAmIChTRVJWX0hBU19ET01BSU4gfCBTRVJWX0ZPUl9OT0RPVFMpKQorCXsKKwkgIGNoYXIgKnMxLCAqczI7CisJICBpZiAoIShuZXctPmZsYWdzICYgU0VSVl9IQVNfRE9NQUlOKSkKKwkgICAgczEgPSBfKCJ1bnF1YWxpZmllZCIpLCBzMiA9IF8oIm5hbWVzIik7CisJICBlbHNlIGlmIChzdHJsZW4obmV3LT5kb21haW4pID09IDApCisJICAgIHMxID0gXygiZGVmYXVsdCIpLCBzMiA9ICIiOworCSAgZWxzZQorCSAgICBzMSA9IF8oImRvbWFpbiIpLCBzMiA9IG5ldy0+ZG9tYWluOworCSAgCisJICBpZiAobmV3LT5mbGFncyAmIFNFUlZfTk9fQUREUikKKwkgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJ1c2luZyBsb2NhbCBhZGRyZXNzZXMgb25seSBmb3IgJXMgJXMiKSwgczEsIHMyKTsKKwkgIGVsc2UgaWYgKCEobmV3LT5mbGFncyAmIFNFUlZfTElURVJBTF9BRERSRVNTKSkKKwkgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJ1c2luZyBuYW1lc2VydmVyICVzIyVkIGZvciAlcyAlcyIpLCBkYWVtb24tPm5hbWVidWZmLCBwb3J0LCBzMSwgczIpOworCX0KKyAgICAgIGVsc2UgaWYgKG5ldy0+aW50ZXJmYWNlWzBdICE9IDApCisJbXlfc3lzbG9nKExPR19JTkZPLCBfKCJ1c2luZyBuYW1lc2VydmVyICVzIyVkKHZpYSAlcykiKSwgZGFlbW9uLT5uYW1lYnVmZiwgcG9ydCwgbmV3LT5pbnRlcmZhY2UpOyAKKyAgICAgIGVsc2UKKwlteV9zeXNsb2coTE9HX0lORk8sIF8oInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQiKSwgZGFlbW9uLT5uYW1lYnVmZiwgcG9ydCk7IAorICAgIH0KKyAgCisgIGRhZW1vbi0+c2VydmVycyA9IHJldDsKK30KKworLyogUmV0dXJuIHplcm8gaWYgbm8gc2VydmVycyBmb3VuZCwgaW4gdGhhdCBjYXNlIHdlIGtlZXAgcG9sbGluZy4KKyAgIFRoaXMgaXMgYSBwcm90ZWN0aW9uIGFnYWluc3QgYW4gdXBkYXRlLXRpbWUvd3JpdGUgcmFjZSBvbiByZXNvbHYuY29uZiAqLworaW50IHJlbG9hZF9zZXJ2ZXJzKGNoYXIgKmZuYW1lKQoreworICBGSUxFICpmOworICBjaGFyICpsaW5lOworICBzdHJ1Y3Qgc2VydmVyICpvbGRfc2VydmVycyA9IE5VTEw7CisgIHN0cnVjdCBzZXJ2ZXIgKm5ld19zZXJ2ZXJzID0gTlVMTDsKKyAgc3RydWN0IHNlcnZlciAqc2VydjsKKyAgaW50IGdvdG9uZSA9IDA7CisKKyAgLyogYnVmZiBoYXBwZW5zIHRvIGJlIE1BWEROQU1FIGxvbmcuLi4gKi8KKyAgaWYgKCEoZiA9IGZvcGVuKGZuYW1lLCAiciIpKSkKKyAgICB7CisgICAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiZmFpbGVkIHRvIHJlYWQgJXM6ICVzIiksIGZuYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAKKyAgLyogbW92ZSBvbGQgc2VydmVycyB0byBmcmVlIGxpc3QgLSB3ZSBjYW4gcmV1c2UgdGhlIG1lbW9yeSAKKyAgICAgYW5kIG5vdCByaXNrIG1hbGxvYyBpZiB0aGVyZSBhcmUgdGhlIHNhbWUgb3IgZmV3ZXIgbmV3IHNlcnZlcnMuIAorICAgICBTZXJ2ZXJzIHdoaWNoIHdlcmUgc3BlY2NlZCBvbiB0aGUgY29tbWFuZCBsaW5lIGdvIHRvIHRoZSBuZXcgbGlzdC4gKi8KKyAgZm9yIChzZXJ2ID0gZGFlbW9uLT5zZXJ2ZXJzOyBzZXJ2OykKKyAgICB7CisgICAgICBzdHJ1Y3Qgc2VydmVyICp0bXAgPSBzZXJ2LT5uZXh0OworICAgICAgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9GUk9NX1JFU09MVikKKwl7CisJICBzZXJ2LT5uZXh0ID0gb2xkX3NlcnZlcnM7CisJICBvbGRfc2VydmVycyA9IHNlcnY7IAorCSAgLyogZm9yd2FyZCB0YWJsZSBydWxlcyByZWZlcmVuY2Ugc2VydmVycywgc28gaGF2ZSB0byBibG93IHRoZW0gYXdheSAqLworCSAgc2VydmVyX2dvbmUoc2Vydik7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHNlcnYtPm5leHQgPSBuZXdfc2VydmVyczsKKwkgIG5ld19zZXJ2ZXJzID0gc2VydjsKKwl9CisgICAgICBzZXJ2ID0gdG1wOworICAgIH0KKyAgCisgIHdoaWxlICgobGluZSA9IGZnZXRzKGRhZW1vbi0+bmFtZWJ1ZmYsIE1BWEROQU1FLCBmKSkpCisgICAgeworICAgICAgdW5pb24gbXlzb2NrYWRkciBhZGRyLCBzb3VyY2VfYWRkcjsKKyAgICAgIGNoYXIgKnRva2VuID0gc3RydG9rKGxpbmUsICIgXHRcblxyIik7CisgICAgICAKKyAgICAgIGlmICghdG9rZW4pCisJY29udGludWU7CisgICAgICBpZiAoc3RyY21wKHRva2VuLCAibmFtZXNlcnZlciIpICE9IDAgJiYgc3RyY21wKHRva2VuLCAic2VydmVyIikgIT0gMCkKKwljb250aW51ZTsKKyAgICAgIGlmICghKHRva2VuID0gc3RydG9rKE5VTEwsICIgXHRcblxyIikpKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgICBtZW1zZXQoJnNvdXJjZV9hZGRyLCAwLCBzaXplb2Yoc291cmNlX2FkZHIpKTsKKyAgICAgIAorICAgICAgaWYgKChhZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcih0b2tlbikpICE9IChpbl9hZGRyX3QpIC0xKQorCXsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorCSAgc291cmNlX2FkZHIuaW4uc2luX2xlbiA9IGFkZHIuaW4uc2luX2xlbiA9IHNpemVvZihzb3VyY2VfYWRkci5pbik7CisjZW5kaWYKKwkgIHNvdXJjZV9hZGRyLmluLnNpbl9mYW1pbHkgPSBhZGRyLmluLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCSAgYWRkci5pbi5zaW5fcG9ydCA9IGh0b25zKE5BTUVTRVJWRVJfUE9SVCk7CisJICBzb3VyY2VfYWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworCSAgc291cmNlX2FkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPnF1ZXJ5X3BvcnQpOworCX0KKyNpZmRlZiBIQVZFX0lQVjYKKyAgICAgIGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgdG9rZW4sICZhZGRyLmluNi5zaW42X2FkZHIpID4gMCkKKwl7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKwkgIHNvdXJjZV9hZGRyLmluNi5zaW42X2xlbiA9IGFkZHIuaW42LnNpbjZfbGVuID0gc2l6ZW9mKHNvdXJjZV9hZGRyLmluNik7CisjZW5kaWYKKwkgIHNvdXJjZV9hZGRyLmluNi5zaW42X2ZhbWlseSA9IGFkZHIuaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJICBhZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhOQU1FU0VSVkVSX1BPUlQpOworCSAgc291cmNlX2FkZHIuaW42LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworCSAgc291cmNlX2FkZHIuaW42LnNpbjZfcG9ydCA9IGh0b25zKGRhZW1vbi0+cXVlcnlfcG9ydCk7CisJfQorI2VuZGlmIC8qIElQVjYgKi8KKyAgICAgIGVsc2UKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgaWYgKG9sZF9zZXJ2ZXJzKQorCXsKKwkgIHNlcnYgPSBvbGRfc2VydmVyczsKKwkgIG9sZF9zZXJ2ZXJzID0gb2xkX3NlcnZlcnMtPm5leHQ7CisJfQorICAgICAgZWxzZSBpZiAoIShzZXJ2ID0gd2hpbmVfbWFsbG9jKHNpemVvZiAoc3RydWN0IHNlcnZlcikpKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgLyogdGhpcyBsaXN0IGlzIHJldmVyc2Ugb3JkZXJlZDogCisJIGl0IGdldHMgcmV2ZXJzZWQgYWdhaW4gaW4gY2hlY2tfc2VydmVycyAqLworICAgICAgc2Vydi0+bmV4dCA9IG5ld19zZXJ2ZXJzOworICAgICAgbmV3X3NlcnZlcnMgPSBzZXJ2OworICAgICAgc2Vydi0+YWRkciA9IGFkZHI7CisgICAgICBzZXJ2LT5zb3VyY2VfYWRkciA9IHNvdXJjZV9hZGRyOworICAgICAgc2Vydi0+ZG9tYWluID0gTlVMTDsKKyAgICAgIHNlcnYtPmludGVyZmFjZVswXSA9IDA7CisgICAgICBzZXJ2LT5zZmQgPSBOVUxMOworICAgICAgc2Vydi0+ZmxhZ3MgPSBTRVJWX0ZST01fUkVTT0xWOworICAgICAgc2Vydi0+cXVlcmllcyA9IHNlcnYtPmZhaWxlZF9xdWVyaWVzID0gMDsKKyAgICAgIGdvdG9uZSA9IDE7CisgICAgfQorICAKKyAgLyogRnJlZSBhbnkgbWVtb3J5IG5vdCB1c2VkLiAqLworICB3aGlsZSAob2xkX3NlcnZlcnMpCisgICAgeworICAgICAgc3RydWN0IHNlcnZlciAqdG1wID0gb2xkX3NlcnZlcnMtPm5leHQ7CisgICAgICBmcmVlKG9sZF9zZXJ2ZXJzKTsKKyAgICAgIG9sZF9zZXJ2ZXJzID0gdG1wOworICAgIH0KKworICBkYWVtb24tPnNlcnZlcnMgPSBuZXdfc2VydmVyczsKKyAgZmNsb3NlKGYpOworCisgIHJldHVybiBnb3RvbmU7Cit9CisKKworLyogVXNlIGFuIElQdjQgbGlzdGVuZXIgc29ja2V0IGZvciBpb2N0bGluZyAqLworc3RydWN0IGluX2FkZHIgZ2V0X2lmYWRkcihjaGFyICppbnRyKQoreworICBzdHJ1Y3QgbGlzdGVuZXIgKmw7CisgIHN0cnVjdCBpZnJlcSBpZnI7CisKKyAgZm9yIChsID0gZGFlbW9uLT5saXN0ZW5lcnM7IGwgJiYgbC0+ZmFtaWx5ICE9IEFGX0lORVQ7IGwgPSBsLT5uZXh0KTsKKyAgCisgIHN0cm5jcHkoaWZyLmlmcl9uYW1lLCBpbnRyLCBJRl9OQU1FU0laRSk7CisgIGlmci5pZnJfYWRkci5zYV9mYW1pbHkgPSBBRl9JTkVUOworICAKKyAgaWYgKCFsIHx8IGlvY3RsKGwtPmZkLCBTSU9DR0lGQUREUiwgJmlmcikgPT0gLTEpCisgICAgKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmlmci5pZnJfYWRkciktPnNpbl9hZGRyLnNfYWRkciA9IC0xOworICAKKyAgcmV0dXJuICgoc3RydWN0IHNvY2thZGRyX2luICopICZpZnIuaWZyX2FkZHIpLT5zaW5fYWRkcjsKK30KKworCisKZGlmZiAtLWdpdCBhL3NyYy9vcHRpb24uYyBiL3NyYy9vcHRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYmVhMzdlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29wdGlvbi5jCkBAIC0wLDAgKzEsMjk5MCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKy8qIGRlZmluZSB0aGlzIHRvIGdldCBmYWNpbGl0eW5hbWVzICovCisjZGVmaW5lIFNZU0xPR19OQU1FUworI2luY2x1ZGUgImRuc21hc3EuaCIKKyNpbmNsdWRlIDxzZXRqbXAuaD4KKworc3RhdGljIHZvbGF0aWxlIGludCBtZW1fcmVjb3ZlciA9IDA7CitzdGF0aWMgam1wX2J1ZiBtZW1fam1wOworc3RhdGljIHZvaWQgb25lX2ZpbGUoY2hhciAqZmlsZSwgaW50IG5lc3QsIGludCBoYXJkX29wdCk7CisKKy8qIFNvbGFyaXMgaGVhZGVycyBkb24ndCBoYXZlIGZhY2lsaXR5IG5hbWVzLiAqLworI2lmZGVmIEhBVkVfU09MQVJJU19ORVRXT1JLCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgY2hhciAqY19uYW1lOworICB1bnNpZ25lZCBpbnQgY192YWw7Cit9ICBmYWNpbGl0eW5hbWVzW10gPSB7CisgIHsgImtlcm4iLCAgIExPR19LRVJOIH0sCisgIHsgInVzZXIiLCAgIExPR19VU0VSIH0sCisgIHsgIm1haWwiLCAgIExPR19NQUlMIH0sCisgIHsgImRhZW1vbiIsIExPR19EQUVNT04gfSwKKyAgeyAiYXV0aCIsICAgTE9HX0FVVEggfSwKKyAgeyAic3lzbG9nIiwgTE9HX1NZU0xPRyB9LAorICB7ICJscHIiLCAgICBMT0dfTFBSIH0sCisgIHsgIm5ld3MiLCAgIExPR19ORVdTIH0sCisgIHsgInV1Y3AiLCAgIExPR19VVUNQIH0sCisgIHsgImF1ZGl0IiwgIExPR19BVURJVCB9LAorICB7ICJjcm9uIiwgICBMT0dfQ1JPTiB9LAorICB7ICJsb2NhbDAiLCBMT0dfTE9DQUwwIH0sCisgIHsgImxvY2FsMSIsIExPR19MT0NBTDEgfSwKKyAgeyAibG9jYWwyIiwgTE9HX0xPQ0FMMiB9LAorICB7ICJsb2NhbDMiLCBMT0dfTE9DQUwzIH0sCisgIHsgImxvY2FsNCIsIExPR19MT0NBTDQgfSwKKyAgeyAibG9jYWw1IiwgTE9HX0xPQ0FMNSB9LAorICB7ICJsb2NhbDYiLCBMT0dfTE9DQUw2IH0sCisgIHsgImxvY2FsNyIsIExPR19MT0NBTDcgfSwKKyAgeyBOVUxMLCAwIH0KK307CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0dFVE9QVF9MT05HCitzdHJ1Y3QgbXlvcHRpb24geworICBjb25zdCBjaGFyICpuYW1lOworICBpbnQgaGFzX2FyZzsKKyAgaW50ICpmbGFnOworICBpbnQgdmFsOworfTsKKyNlbmRpZgorCisjZGVmaW5lIE9QVFNUUklORyAiOTUxeVpETkxFUkt6b3dlZm5idmhka3FyOm06cDpjOmw6czppOnQ6dTpnOmE6eDpTOkM6QTpUOkg6UTpJOkI6RjpHOk86TTpYOlY6VTpqOlA6SjpXOlk6Mjo0OjY6Nzo4OjA6MzoiCisKKy8qIG9wdGlvbnMgd2hpY2ggZG9uJ3QgaGF2ZSBhIG9uZS1jaGFyIHZlcnNpb24gKi8KKyNkZWZpbmUgTE9QVF9SRUxPQUQgICAgMjU2CisjZGVmaW5lIExPUFRfTk9fTkFNRVMgIDI1NworI2RlZmluZSBMT1BUX1RGVFAgICAgICAyNTgKKyNkZWZpbmUgTE9QVF9TRUNVUkUgICAgMjU5CisjZGVmaW5lIExPUFRfUFJFRklYICAgIDI2MAorI2RlZmluZSBMT1BUX1BUUiAgICAgICAyNjEKKyNkZWZpbmUgTE9QVF9CUklER0UgICAgMjYyCisjZGVmaW5lIExPUFRfVEZUUF9NQVggIDI2MworI2RlZmluZSBMT1BUX0ZPUkNFICAgICAyNjQKKyNkZWZpbmUgTE9QVF9OT0JMT0NLICAgMjY1CisjZGVmaW5lIExPUFRfTE9HX09QVFMgIDI2NgorI2RlZmluZSBMT1BUX01BWF9MT0dTICAyNjcKKyNkZWZpbmUgTE9QVF9DSVJDVUlUICAgMjY4CisjZGVmaW5lIExPUFRfUkVNT1RFICAgIDI2OQorI2RlZmluZSBMT1BUX1NVQlNDUiAgICAyNzAKKyNkZWZpbmUgTE9QVF9JTlROQU1FICAgMjcxCisjZGVmaW5lIExPUFRfQkFOSyAgICAgIDI3MgorI2RlZmluZSBMT1BUX0RIQ1BfSE9TVCAyNzMKKyNkZWZpbmUgTE9QVF9BUFJFRiAgICAgMjc0CisjZGVmaW5lIExPUFRfT1ZFUlJJREUgIDI3NQorI2RlZmluZSBMT1BUX1RGVFBQT1JUUyAyNzYKKyNkZWZpbmUgTE9QVF9SRUJJTkQgICAgMjc3CisjZGVmaW5lIExPUFRfTk9MQVNUICAgIDI3OAorI2RlZmluZSBMT1BUX09QVFMgICAgICAyNzkKKyNkZWZpbmUgTE9QVF9ESENQX09QVFMgMjgwCisjZGVmaW5lIExPUFRfTUFUQ0ggICAgIDI4MQorI2RlZmluZSBMT1BUX0JST0FEQ0FTVCAyODIKKyNkZWZpbmUgTE9QVF9ORUdUVEwgICAgMjgzCisjZGVmaW5lIExPUFRfQUxUUE9SVCAgIDI4NAorI2RlZmluZSBMT1BUX1NDUklQVFVTUiAyODUKKyNkZWZpbmUgTE9QVF9MT0NBTCAgICAgMjg2CisjZGVmaW5lIExPUFRfTkFQVFIgICAgIDI4NworI2RlZmluZSBMT1BUX01JTlBPUlQgICAyODgKKyNkZWZpbmUgTE9QVF9ESENQX0ZRRE4gMjg5CisjZGVmaW5lIExPUFRfQ05BTUUgICAgIDI5MAorI2RlZmluZSBMT1BUX1BYRV9QUk9NVCAyOTEKKyNkZWZpbmUgTE9QVF9QWEVfU0VSViAgMjkyCisjZGVmaW5lIExPUFRfVEVTVCAgICAgIDI5MworCisjaWZkZWYgSEFWRV9HRVRPUFRfTE9ORworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0c1tdID0gIAorI2Vsc2UKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXlvcHRpb24gb3B0c1tdID0gCisjZW5kaWYKKyAgeyAKKyAgICB7ICJ2ZXJzaW9uIiwgMCwgMCwgJ3YnIH0sCisgICAgeyAibm8taG9zdHMiLCAwLCAwLCAnaCcgfSwKKyAgICB7ICJuby1wb2xsIiwgMCwgMCwgJ24nIH0sCisgICAgeyAiaGVscCIsIDAsIDAsICd3JyB9LAorICAgIHsgIm5vLWRhZW1vbiIsIDAsIDAsICdkJyB9LAorICAgIHsgImxvZy1xdWVyaWVzIiwgMCwgMCwgJ3EnIH0sCisgICAgeyAidXNlciIsIDIsIDAsICd1JyB9LAorICAgIHsgImdyb3VwIiwgMiwgMCwgJ2cnIH0sCisgICAgeyAicmVzb2x2LWZpbGUiLCAyLCAwLCAncicgfSwKKyAgICB7ICJteC1ob3N0IiwgMSwgMCwgJ20nIH0sCisgICAgeyAibXgtdGFyZ2V0IiwgMSwgMCwgJ3QnIH0sCisgICAgeyAiY2FjaGUtc2l6ZSIsIDIsIDAsICdjJyB9LAorICAgIHsgInBvcnQiLCAxLCAwLCAncCcgfSwKKyAgICB7ICJkaGNwLWxlYXNlZmlsZSIsIDIsIDAsICdsJyB9LAorICAgIHsgImRoY3AtbGVhc2UiLCAxLCAwLCAnbCcgfSwKKyAgICB7ICJkaGNwLWhvc3QiLCAxLCAwLCAnRycgfSwKKyAgICB7ICJkaGNwLXJhbmdlIiwgMSwgMCwgJ0YnIH0sCisgICAgeyAiZGhjcC1vcHRpb24iLCAxLCAwLCAnTycgfSwKKyAgICB7ICJkaGNwLWJvb3QiLCAxLCAwLCAnTScgfSwKKyAgICB7ICJkb21haW4iLCAxLCAwLCAncycgfSwKKyAgICB7ICJkb21haW4tc3VmZml4IiwgMSwgMCwgJ3MnIH0sCisgICAgeyAiaW50ZXJmYWNlIiwgMSwgMCwgJ2knIH0sCisgICAgeyAibGlzdGVuLWFkZHJlc3MiLCAxLCAwLCAnYScgfSwKKyAgICB7ICJib2d1cy1wcml2IiwgMCwgMCwgJ2InIH0sCisgICAgeyAiYm9ndXMtbnhkb21haW4iLCAxLCAwLCAnQicgfSwKKyAgICB7ICJzZWxmbXgiLCAwLCAwLCAnZScgfSwKKyAgICB7ICJmaWx0ZXJ3aW4yayIsIDAsIDAsICdmJyB9LAorICAgIHsgInBpZC1maWxlIiwgMiwgMCwgJ3gnIH0sCisgICAgeyAic3RyaWN0LW9yZGVyIiwgMCwgMCwgJ28nIH0sCisgICAgeyAic2VydmVyIiwgMSwgMCwgJ1MnIH0sCisgICAgeyAibG9jYWwiLCAxLCAwLCBMT1BUX0xPQ0FMIH0sCisgICAgeyAiYWRkcmVzcyIsIDEsIDAsICdBJyB9LAorICAgIHsgImNvbmYtZmlsZSIsIDIsIDAsICdDJyB9LAorICAgIHsgIm5vLXJlc29sdiIsIDAsIDAsICdSJyB9LAorICAgIHsgImV4cGFuZC1ob3N0cyIsIDAsIDAsICdFJyB9LAorICAgIHsgImxvY2FsbXgiLCAwLCAwLCAnTCcgfSwKKyAgICB7ICJsb2NhbC10dGwiLCAxLCAwLCAnVCcgfSwKKyAgICB7ICJuby1uZWdjYWNoZSIsIDAsIDAsICdOJyB9LAorICAgIHsgImFkZG4taG9zdHMiLCAxLCAwLCAnSCcgfSwKKyAgICB7ICJxdWVyeS1wb3J0IiwgMSwgMCwgJ1EnIH0sCisgICAgeyAiZXhjZXB0LWludGVyZmFjZSIsIDEsIDAsICdJJyB9LAorICAgIHsgIm5vLWRoY3AtaW50ZXJmYWNlIiwgMSwgMCwgJzInIH0sCisgICAgeyAiZG9tYWluLW5lZWRlZCIsIDAsIDAsICdEJyB9LAorICAgIHsgImRoY3AtbGVhc2UtbWF4IiwgMSwgMCwgJ1gnIH0sCisgICAgeyAiYmluZC1pbnRlcmZhY2VzIiwgMCwgMCwgJ3onIH0sCisgICAgeyAicmVhZC1ldGhlcnMiLCAwLCAwLCAnWicgfSwKKyAgICB7ICJhbGlhcyIsIDEsIDAsICdWJyB9LAorICAgIHsgImRoY3AtdmVuZG9yY2xhc3MiLCAxLCAwLCAnVScgfSwKKyAgICB7ICJkaGNwLXVzZXJjbGFzcyIsIDEsIDAsICdqJyB9LAorICAgIHsgImRoY3AtaWdub3JlIiwgMSwgMCwgJ0onIH0sCisgICAgeyAiZWRucy1wYWNrZXQtbWF4IiwgMSwgMCwgJ1AnIH0sCisgICAgeyAia2VlcC1pbi1mb3JlZ3JvdW5kIiwgMCwgMCwgJ2snIH0sCisgICAgeyAiZGhjcC1hdXRob3JpdGF0aXZlIiwgMCwgMCwgJ0snIH0sCisgICAgeyAic3J2LWhvc3QiLCAxLCAwLCAnVycgfSwKKyAgICB7ICJsb2NhbGlzZS1xdWVyaWVzIiwgMCwgMCwgJ3knIH0sCisgICAgeyAidHh0LXJlY29yZCIsIDEsIDAsICdZJyB9LAorICAgIHsgImVuYWJsZS1kYnVzIiwgMCwgMCwgJzEnIH0sCisgICAgeyAiYm9vdHAtZHluYW1pYyIsIDIsIDAsICczJyB9LAorICAgIHsgImRoY3AtbWFjIiwgMSwgMCwgJzQnIH0sCisgICAgeyAibm8tcGluZyIsIDAsIDAsICc1JyB9LAorICAgIHsgImRoY3Atc2NyaXB0IiwgMSwgMCwgJzYnIH0sCisgICAgeyAiY29uZi1kaXIiLCAxLCAwLCAnNycgfSwKKyAgICB7ICJsb2ctZmFjaWxpdHkiLCAxLCAwICwnOCcgfSwKKyAgICB7ICJsZWFzZWZpbGUtcm8iLCAwLCAwLCAnOScgfSwKKyAgICB7ICJkbnMtZm9yd2FyZC1tYXgiLCAxLCAwLCAnMCcgfSwKKyAgICB7ICJjbGVhci1vbi1yZWxvYWQiLCAwLCAwLCBMT1BUX1JFTE9BRCB9LAorICAgIHsgImRoY3AtaWdub3JlLW5hbWVzIiwgMiwgMCwgTE9QVF9OT19OQU1FUyB9LAorICAgIHsgImVuYWJsZS10ZnRwIiwgMCwgMCwgTE9QVF9URlRQIH0sCisgICAgeyAidGZ0cC1zZWN1cmUiLCAwLCAwLCBMT1BUX1NFQ1VSRSB9LAorICAgIHsgInRmdHAtdW5pcXVlLXJvb3QiLCAwLCAwLCBMT1BUX0FQUkVGIH0sCisgICAgeyAidGZ0cC1yb290IiwgMSwgMCwgTE9QVF9QUkVGSVggfSwKKyAgICB7ICJ0ZnRwLW1heCIsIDEsIDAsIExPUFRfVEZUUF9NQVggfSwKKyAgICB7ICJwdHItcmVjb3JkIiwgMSwgMCwgTE9QVF9QVFIgfSwKKyAgICB7ICJuYXB0ci1yZWNvcmQiLCAxLCAwLCBMT1BUX05BUFRSIH0sCisgICAgeyAiYnJpZGdlLWludGVyZmFjZSIsIDEsIDAgLCBMT1BUX0JSSURHRSB9LAorICAgIHsgImRoY3Atb3B0aW9uLWZvcmNlIiwgMSwgMCwgTE9QVF9GT1JDRSB9LAorICAgIHsgInRmdHAtbm8tYmxvY2tzaXplIiwgMCwgMCwgTE9QVF9OT0JMT0NLIH0sCisgICAgeyAibG9nLWRoY3AiLCAwLCAwLCBMT1BUX0xPR19PUFRTIH0sCisgICAgeyAibG9nLWFzeW5jIiwgMiwgMCwgTE9QVF9NQVhfTE9HUyB9LAorICAgIHsgImRoY3AtY2lyY3VpdGlkIiwgMSwgMCwgTE9QVF9DSVJDVUlUIH0sCisgICAgeyAiZGhjcC1yZW1vdGVpZCIsIDEsIDAsIExPUFRfUkVNT1RFIH0sCisgICAgeyAiZGhjcC1zdWJzY3JpZCIsIDEsIDAsIExPUFRfU1VCU0NSIH0sCisgICAgeyAiaW50ZXJmYWNlLW5hbWUiLCAxLCAwLCBMT1BUX0lOVE5BTUUgfSwKKyAgICB7ICJkaGNwLWhvc3RzZmlsZSIsIDEsIDAsIExPUFRfREhDUF9IT1NUIH0sCisgICAgeyAiZGhjcC1vcHRzZmlsZSIsIDEsIDAsIExPUFRfREhDUF9PUFRTIH0sCisgICAgeyAiZGhjcC1uby1vdmVycmlkZSIsIDAsIDAsIExPUFRfT1ZFUlJJREUgfSwKKyAgICB7ICJ0ZnRwLXBvcnQtcmFuZ2UiLCAxLCAwLCBMT1BUX1RGVFBQT1JUUyB9LAorICAgIHsgInN0b3AtZG5zLXJlYmluZCIsIDAsIDAsIExPUFRfUkVCSU5EIH0sCisgICAgeyAiYWxsLXNlcnZlcnMiLCAwLCAwLCBMT1BUX05PTEFTVCB9LCAKKyAgICB7ICJkaGNwLW1hdGNoIiwgMSwgMCwgTE9QVF9NQVRDSCB9LCAKKyAgICB7ICJkaGNwLWJyb2FkY2FzdCIsIDEsIDAsIExPUFRfQlJPQURDQVNUIH0sCisgICAgeyAibmVnLXR0bCIsIDEsIDAsIExPUFRfTkVHVFRMIH0sCisgICAgeyAiZGhjcC1hbHRlcm5hdGUtcG9ydCIsIDIsIDAsIExPUFRfQUxUUE9SVCB9LAorICAgIHsgImRoY3Atc2NyaXB0dXNlciIsIDEsIDAsIExPUFRfU0NSSVBUVVNSIH0sCisgICAgeyAibWluLXBvcnQiLCAxLCAwLCBMT1BUX01JTlBPUlQgfSwKKyAgICB7ICJkaGNwLWZxZG4iLCAwLCAwLCBMT1BUX0RIQ1BfRlFETiB9LAorICAgIHsgImNuYW1lIiwgMSwgMCwgTE9QVF9DTkFNRSB9LAorICAgIHsgInB4ZS1wcm9tcHQiLCAxLCAwLCBMT1BUX1BYRV9QUk9NVCB9LAorICAgIHsgInB4ZS1zZXJ2aWNlIiwgMSwgMCwgTE9QVF9QWEVfU0VSViB9LAorICAgIHsgInRlc3QiLCAwLCAwLCBMT1BUX1RFU1QgfSwKKyAgICB7IE5VTEwsIDAsIDAsIDAgfQorICB9OworCisvKiBUaGVzZSBtdXN0IGhhdmUgbW9yZSB0aGUgb25lICcxJyBiaXQgKi8KKyNkZWZpbmUgQVJHX0RVUCAgICAgICAzCisjZGVmaW5lIEFSR19PTkUgICAgICAgNQorI2RlZmluZSBBUkdfVVNFRF9DTCAgIDcKKyNkZWZpbmUgQVJHX1VTRURfRklMRSA5CisKK3N0YXRpYyBzdHJ1Y3QgeworICBpbnQgb3B0OworICB1bnNpZ25lZCBpbnQgcmVwdDsKKyAgY2hhciAqIGNvbnN0IGZsYWdkZXNjOworICBjaGFyICogY29uc3QgZGVzYzsKKyAgY2hhciAqIGNvbnN0IGFyZzsKK30gdXNhZ2VbXSA9IHsKKyAgeyAnYScsIEFSR19EVVAsICJpcGFkZHIiLCAgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iKSwgTlVMTCB9LAorICB7ICdBJywgQVJHX0RVUCwgIi9kb21haW4vaXBhZGRyIiwgZ2V0dGV4dF9ub29wKCJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIiksIE5VTEwgfSwKKyAgeyAnYicsIE9QVF9CT0dVU1BSSVYsIE5VTEwsIGdldHRleHRfbm9vcCgiRmFrZSByZXZlcnNlIGxvb2t1cHMgZm9yIFJGQzE5MTggcHJpdmF0ZSBhZGRyZXNzIHJhbmdlcy4iKSwgTlVMTCB9LAorICB7ICdCJywgQVJHX0RVUCwgImlwYWRkciIsIGdldHRleHRfbm9vcCgiVHJlYXQgaXBhZGRyIGFzIE5YRE9NQUlOIChkZWZlYXRzIFZlcmlzaWduIHdpbGRjYXJkKS4iKSwgTlVMTCB9LCAKKyAgeyAnYycsIEFSR19PTkUsICJjYWNoZXNpemUiLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGluIGVudHJpZXMgKGRlZmF1bHRzIHRvICVzKS4iKSwgIiQiIH0sCisgIHsgJ0MnLCBBUkdfRFVQLCAicGF0aCIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iKSwgQ09ORkZJTEUgfSwKKyAgeyAnZCcsIE9QVF9ERUJVRywgTlVMTCwgZ2V0dGV4dF9ub29wKCJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iKSwgTlVMTCB9LAorICB7ICdEJywgT1BUX05PRE9UU19MT0NBTCwgTlVMTCwgZ2V0dGV4dF9ub29wKCJEbyBOT1QgZm9yd2FyZCBxdWVyaWVzIHdpdGggbm8gZG9tYWluIHBhcnQuIiksIE5VTEwgfSwgCisgIHsgJ2UnLCBPUFRfU0VMRk1YLCBOVUxMLCBnZXR0ZXh0X25vb3AoIlJldHVybiBzZWxmLXBvaW50aW5nIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIpLCBOVUxMIH0sCisgIHsgJ0UnLCBPUFRfRVhQQU5ELCBOVUxMLCBnZXR0ZXh0X25vb3AoIkV4cGFuZCBzaW1wbGUgbmFtZXMgaW4gL2V0Yy9ob3N0cyB3aXRoIGRvbWFpbi1zdWZmaXguIiksIE5VTEwgfSwKKyAgeyAnZicsIE9QVF9GSUxURVIsIE5VTEwsIGdldHRleHRfbm9vcCgiRG9uJ3QgZm9yd2FyZCBzcHVyaW91cyBETlMgcmVxdWVzdHMgZnJvbSBXaW5kb3dzIGhvc3RzLiIpLCBOVUxMIH0sCisgIHsgJ0YnLCBBUkdfRFVQLCAiaXBhZGRyLGlwYWRkcix0aW1lIiwgZ2V0dGV4dF9ub29wKCJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iKSwgTlVMTCB9LAorICB7ICdnJywgQVJHX09ORSwgImdyb3VwbmFtZSIsIGdldHRleHRfbm9vcCgiQ2hhbmdlIHRvIHRoaXMgZ3JvdXAgYWZ0ZXIgc3RhcnR1cCAoZGVmYXVsdHMgdG8gJXMpLiIpLCBDSEdSUCB9LAorICB7ICdHJywgQVJHX0RVUCwgIjxob3N0c3BlYz4iLCBnZXR0ZXh0X25vb3AoIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9ESENQX0hPU1QsIEFSR19PTkUsICI8ZmlsZW5hbWU+IiwgZ2V0dGV4dF9ub29wKCJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUiKSwgTlVMTCB9LAorICB7IExPUFRfREhDUF9PUFRTLCBBUkdfT05FLCAiPGZpbGVuYW1lPiIsIGdldHRleHRfbm9vcCgiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUiKSwgTlVMTCB9LAorICB7ICdoJywgT1BUX05PX0hPU1RTLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIE5PVCBsb2FkICVzIGZpbGUuIiksIEhPU1RTRklMRSB9LAorICB7ICdIJywgQVJHX0RVUCwgInBhdGgiLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgYSBob3N0cyBmaWxlIHRvIGJlIHJlYWQgaW4gYWRkaXRpb24gdG8gJXMuIiksIEhPU1RTRklMRSB9LAorICB7ICdpJywgQVJHX0RVUCwgImludGVyZmFjZSIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBpbnRlcmZhY2UocykgdG8gbGlzdGVuIG9uLiIpLCBOVUxMIH0sCisgIHsgJ0knLCBBUkdfRFVQLCAiaW50IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGludGVyZmFjZShzKSBOT1QgdG8gbGlzdGVuIG9uLiIpICwgTlVMTCB9LAorICB7ICdqJywgQVJHX0RVUCwgIjx0YWc+LDxjbGFzcz4iLCBnZXR0ZXh0X25vb3AoIk1hcCBESENQIHVzZXIgY2xhc3MgdG8gdGFnLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9DSVJDVUlULCBBUkdfRFVQLCAiPHRhZz4sPGNpcmN1aXQ+IiwgZ2V0dGV4dF9ub29wKCJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iKSwgTlVMTCB9LAorICB7IExPUFRfUkVNT1RFLCBBUkdfRFVQLCAiPHRhZz4sPHJlbW90ZT4iLCBnZXR0ZXh0X25vb3AoIk1hcCBSRkMzMDQ2IHJlbW90ZS1pZCB0byB0YWcuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1NVQlNDUiwgQVJHX0RVUCwgIjx0YWc+LDxyZW1vdGU+IiwgZ2V0dGV4dF9ub29wKCJNYXAgUkZDMzk5MyBzdWJzY3JpYmVyLWlkIHRvIHRhZy4iKSwgTlVMTCB9LAorICB7ICdKJywgQVJHX0RVUCwgIj08aWQ+Wyw8aWQ+XSIsIGdldHRleHRfbm9vcCgiRG9uJ3QgZG8gREhDUCBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIpLCBOVUxMIH0sCisgIHsgTE9QVF9CUk9BRENBU1QsIEFSR19EVVAsICI9PGlkPlssPGlkPl0iLCBnZXR0ZXh0X25vb3AoIkZvcmNlIGJyb2FkY2FzdCByZXBsaWVzIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIiksIE5VTEwgfSwgCisgIHsgJ2snLCBPUFRfTk9fRk9SSywgTlVMTCwgZ2V0dGV4dF9ub29wKCJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIiksIE5VTEwgfSwKKyAgeyAnSycsIE9QVF9BVVRIT1JJVEFUSVZFLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIiksIE5VTEwgfSwKKyAgeyAnbCcsIEFSR19PTkUsICJwYXRoIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIiksIExFQVNFRklMRSB9LAorICB7ICdMJywgT1BUX0xPQ0FMTVgsIE5VTEwsIGdldHRleHRfbm9vcCgiUmV0dXJuIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIpLCBOVUxMIH0sCisgIHsgJ20nLCBBUkdfRFVQLCAiaG9zdF9uYW1lLHRhcmdldCxwcmVmIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGFuIE1YIHJlY29yZC4iKSwgTlVMTCB9LAorICB7ICdNJywgQVJHX0RVUCwgIjxib290cCBvcHRzPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBCT09UUCBvcHRpb25zIHRvIERIQ1Agc2VydmVyLiIpLCBOVUxMIH0sCisgIHsgJ24nLCBPUFRfTk9fUE9MTCwgTlVMTCwgZ2V0dGV4dF9ub29wKCJEbyBOT1QgcG9sbCAlcyBmaWxlLCByZWxvYWQgb25seSBvbiBTSUdIVVAuIiksIFJFU09MVkZJTEUgfSwgCisgIHsgJ04nLCBPUFRfTk9fTkVHLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIiksIE5VTEwgfSwKKyAgeyAnbycsIE9QVF9PUkRFUiwgTlVMTCwgZ2V0dGV4dF9ub29wKCJVc2UgbmFtZXNlcnZlcnMgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIGdpdmVuIGluICVzLiIpLCBSRVNPTFZGSUxFIH0sCisgIHsgJ08nLCBBUkdfRFVQLCAiPG9wdHNwZWM+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IG9wdGlvbnMgdG8gYmUgc2VudCB0byBESENQIGNsaWVudHMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0ZPUkNFLCBBUkdfRFVQLCAiPG9wdHNwZWM+IiwgZ2V0dGV4dF9ub29wKCJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIpLCBOVUxMfSwKKyAgeyAncCcsIEFSR19PTkUsICJudW1iZXIiLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgcG9ydCB0byBsaXN0ZW4gZm9yIEROUyByZXF1ZXN0cyBvbiAoZGVmYXVsdHMgdG8gNTMpLiIpLCBOVUxMIH0sCisgIHsgJ1AnLCBBUkdfT05FLCAiPHNpemU+IiwgZ2V0dGV4dF9ub29wKCJNYXhpbXVtIHN1cHBvcnRlZCBVRFAgcGFja2V0IHNpemUgZm9yIEVETlMuMCAoZGVmYXVsdHMgdG8gJXMpLiIpLCAiKiIgfSwKKyAgeyAncScsIE9QVF9MT0csIE5VTEwsIGdldHRleHRfbm9vcCgiTG9nIEROUyBxdWVyaWVzLiIpLCBOVUxMIH0sCisgIHsgJ1EnLCBBUkdfT05FLCAibnVtYmVyIiwgZ2V0dGV4dF9ub29wKCJGb3JjZSB0aGUgb3JpZ2luYXRpbmcgcG9ydCBmb3IgdXBzdHJlYW0gRE5TIHF1ZXJpZXMuIiksIE5VTEwgfSwKKyAgeyAnUicsIE9QVF9OT19SRVNPTFYsIE5VTEwsIGdldHRleHRfbm9vcCgiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIiksIE5VTEwgfSwKKyAgeyAncicsIEFSR19EVVAsICJwYXRoIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iKSwgUkVTT0xWRklMRSB9LCAKKyAgeyAnUycsIEFSR19EVVAsICIvZG9tYWluL2lwYWRkciIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iKSwgTlVMTCB9LAorICB7IExPUFRfTE9DQUwsIEFSR19EVVAsICIvZG9tYWluLyIsIGdldHRleHRfbm9vcCgiTmV2ZXIgZm9yd2FyZCBxdWVyaWVzIHRvIHNwZWNpZmllZCBkb21haW5zLiIpLCBOVUxMIH0sCisgIHsgJ3MnLCBBUkdfRFVQLCAiPGRvbWFpbj5bLDxyYW5nZT5dIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IHRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgaW4gREhDUCBsZWFzZXMuIiksIE5VTEwgfSwKKyAgeyAndCcsIEFSR19PTkUsICJob3N0X25hbWUiLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgZGVmYXVsdCB0YXJnZXQgaW4gYW4gTVggcmVjb3JkLiIpLCBOVUxMIH0sCisgIHsgJ1QnLCBBUkdfT05FLCAidGltZSIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgcmVwbGllcyBmcm9tIC9ldGMvaG9zdHMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX05FR1RUTCwgQVJHX09ORSwgInRpbWUiLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIiksIE5VTEwgfSwKKyAgeyAndScsIEFSR19PTkUsICJ1c2VybmFtZSIsIGdldHRleHRfbm9vcCgiQ2hhbmdlIHRvIHRoaXMgdXNlciBhZnRlciBzdGFydHVwLiAoZGVmYXVsdHMgdG8gJXMpLiIpLCBDSFVTRVIgfSwgCisgIHsgJ1UnLCBBUkdfRFVQLCAiPGlkPiw8Y2xhc3M+IiwgZ2V0dGV4dF9ub29wKCJNYXAgREhDUCB2ZW5kb3IgY2xhc3MgdG8gdGFnLiIpLCBOVUxMIH0sCisgIHsgJ3YnLCAwLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRpc3BsYXkgZG5zbWFzcSB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uIiksIE5VTEwgfSwKKyAgeyAnVicsIEFSR19EVVAsICJhZGRyLGFkZHIsbWFzayIsIGdldHRleHRfbm9vcCgiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iKSwgTlVMTCB9LAorICB7ICdXJywgQVJHX0RVUCwgIm5hbWUsdGFyZ2V0LC4uLiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBhIFNSViByZWNvcmQuIiksIE5VTEwgfSwKKyAgeyAndycsIDAsIE5VTEwsIGdldHRleHRfbm9vcCgiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIFVzZSAtLWhlbHAgZGhjcCBmb3Iga25vd24gREhDUCBvcHRpb25zLiIpLCBOVUxMIH0sCisgIHsgJ3gnLCBBUkdfT05FLCAicGF0aCIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBwYXRoIG9mIFBJRCBmaWxlIChkZWZhdWx0cyB0byAlcykuIiksIFJVTkZJTEUgfSwKKyAgeyAnWCcsIEFSR19PTkUsICJudW1iZXIiLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iKSwgIiYiIH0sCisgIHsgJ3knLCBPUFRfTE9DQUxJU0UsIE5VTEwsIGdldHRleHRfbm9vcCgiQW5zd2VyIEROUyBxdWVyaWVzIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgYSBxdWVyeSB3YXMgc2VudCB0by4iKSwgTlVMTCB9LAorICB7ICdZJywgQVJHX0RVUCwgIm5hbWUsdHh0Li4uLiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iKSwgTlVMTCB9LAorICB7IExPUFRfUFRSLCBBUkdfRFVQLCAibmFtZSx0YXJnZXQiLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgUFRSIEROUyByZWNvcmQuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0lOVE5BTUUsIEFSR19EVVAsICJuYW1lLGludGVyZmFjZSIsIGdldHRleHRfbm9vcCgiR2l2ZSBETlMgbmFtZSB0byBJUHY0IGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiIpLCBOVUxMIH0sCisgIHsgJ3onLCBPUFRfTk9XSUxELCBOVUxMLCBnZXR0ZXh0X25vb3AoIkJpbmQgb25seSB0byBpbnRlcmZhY2VzIGluIHVzZS4iKSwgTlVMTCB9LAorICB7ICdaJywgT1BUX0VUSEVSUywgTlVMTCwgZ2V0dGV4dF9ub29wKCJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iKSwgRVRIRVJTRklMRSB9LAorICB7ICcxJywgT1BUX0RCVVMsIE5VTEwsIGdldHRleHRfbm9vcCgiRW5hYmxlIHRoZSBEQnVzIGludGVyZmFjZSBmb3Igc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzLCBldGMuIiksIE5VTEwgfSwKKyAgeyAnMicsIEFSR19EVVAsICJpbnRlcmZhY2UiLCBnZXR0ZXh0X25vb3AoIkRvIG5vdCBwcm92aWRlIERIQ1Agb24gdGhpcyBpbnRlcmZhY2UsIG9ubHkgcHJvdmlkZSBETlMuIiksIE5VTEwgfSwKKyAgeyAnMycsIEFSR19EVVAsICJbPTxpZD5bLDxpZD5dXSIsIGdldHRleHRfbm9vcCgiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iKSwgTlVMTCB9LAorICB7ICc0JywgQVJHX0RVUCwgIjxpZD4sPG1hYyBhZGRyZXNzPiIsIGdldHRleHRfbm9vcCgiTWFwIE1BQyBhZGRyZXNzICh3aXRoIHdpbGRjYXJkcykgdG8gb3B0aW9uIHNldC4iKSwgTlVMTCB9LAorICB7IExPUFRfQlJJREdFLCBBUkdfRFVQLCAiaWZhY2UsYWxpYXMsLi4iLCBnZXR0ZXh0X25vb3AoIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iKSwgTlVMTCB9LAorICB7ICc1JywgT1BUX05PX1BJTkcsIE5VTEwsIGdldHRleHRfbm9vcCgiRGlzYWJsZSBJQ01QIGVjaG8gYWRkcmVzcyBjaGVja2luZyBpbiB0aGUgREhDUCBzZXJ2ZXIuIiksIE5VTEwgfSwKKyAgeyAnNicsIEFSR19PTkUsICJwYXRoIiwgZ2V0dGV4dF9ub29wKCJTY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIpLCBOVUxMIH0sCisgIHsgJzcnLCBBUkdfRFVQLCAicGF0aCIsIGdldHRleHRfbm9vcCgiUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4iKSwgTlVMTCB9LAorICB7ICc4JywgQVJHX09ORSwgIjxmYWNpbHR5Pnw8ZmlsZT4iLCBnZXR0ZXh0X25vb3AoIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIpLCBOVUxMIH0sCisgIHsgJzknLCBPUFRfTEVBU0VfUk8sIE5VTEwsIGdldHRleHRfbm9vcCgiRG8gbm90IHVzZSBsZWFzZWZpbGUuIiksIE5VTEwgfSwKKyAgeyAnMCcsIEFSR19PTkUsICI8cXVlcmllcz4iLCBnZXR0ZXh0X25vb3AoIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiKSwgIiEiIH0sIAorICB7IExPUFRfUkVMT0FELCBPUFRfUkVMT0FELCBOVUxMLCBnZXR0ZXh0X25vb3AoIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iKSwgUkVTT0xWRklMRSB9LAorICB7IExPUFRfTk9fTkFNRVMsIEFSR19EVVAsICJbPTxpZD5bLDxpZD5dXSIsIGdldHRleHRfbm9vcCgiSWdub3JlIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQIGNsaWVudHMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX09WRVJSSURFLCBPUFRfTk9fT1ZFUlJJREUsIE5VTEwsIGdldHRleHRfbm9vcCgiRG8gTk9UIHJldXNlIGZpbGVuYW1lIGFuZCBzZXJ2ZXIgZmllbGRzIGZvciBleHRyYSBESENQIG9wdGlvbnMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1RGVFAsIE9QVF9URlRQLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkVuYWJsZSBpbnRlZ3JhdGVkIHJlYWQtb25seSBURlRQIHNlcnZlci4iKSwgTlVMTCB9LAorICB7IExPUFRfUFJFRklYLCBBUkdfT05FLCAiPGRpcmVjdG9yeT4iLCBnZXR0ZXh0X25vb3AoIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0FQUkVGLCBPUFRfVEZUUF9BUFJFRiwgTlVMTCwgZ2V0dGV4dF9ub29wKCJBZGQgY2xpZW50IElQIGFkZHJlc3MgdG8gdGZ0cC1yb290LiIpLCBOVUxMIH0sCisgIHsgTE9QVF9TRUNVUkUsIE9QVF9URlRQX1NFQ1VSRSwgTlVMTCwgZ2V0dGV4dF9ub29wKCJBbGxvdyBhY2Nlc3Mgb25seSB0byBmaWxlcyBvd25lZCBieSB0aGUgdXNlciBydW5uaW5nIGRuc21hc3EuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1RGVFBfTUFYLCBBUkdfT05FLCAiPGNvbm5lY3Rpb25zPiIsIGdldHRleHRfbm9vcCgiTWF4aW11bSBudW1iZXIgb2YgY29ubmN1cnJlbnQgVEZUUCB0cmFuc2ZlcnMgKGRlZmF1bHRzIHRvICVzKS4iKSwgIiMiIH0sCisgIHsgTE9QVF9OT0JMT0NLLCBPUFRfVEZUUF9OT0JMT0NLLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iKSwgTlVMTCB9LAorICB7IExPUFRfVEZUUFBPUlRTLCBBUkdfT05FLCAiPHN0YXJ0Piw8ZW5kPiIsIGdldHRleHRfbm9vcCgiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iKSwgTlVMTCB9LAorICB7IExPUFRfTE9HX09QVFMsIE9QVF9MT0dfT1BUUywgTlVMTCwgZ2V0dGV4dF9ub29wKCJFeHRyYSBsb2dnaW5nIGZvciBESENQLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9NQVhfTE9HUywgQVJHX09ORSwgIls9PGxvZyBsaW5lcz5dIiwgZ2V0dGV4dF9ub29wKCJFbmFibGUgYXN5bmMuIGxvZ2dpbmc7IG9wdGlvbmFsbHkgc2V0IHF1ZXVlIGxlbmd0aC4iKSwgTlVMTCB9LAorICB7IExPUFRfUkVCSU5ELCBPUFRfTk9fUkVCSU5ELCBOVUxMLCBnZXR0ZXh0X25vb3AoIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9OT0xBU1QsIE9QVF9BTExfU0VSVkVSUywgTlVMTCwgZ2V0dGV4dF9ub29wKCJBbHdheXMgcGVyZm9ybSBETlMgcXVlcmllcyB0byBhbGwgc2VydmVycy4iKSwgTlVMTCB9LAorICB7IExPUFRfTUFUQ0gsIEFSR19EVVAsICI8bmV0aWQ+LDxvcHRzcGVjPiIsIGdldHRleHRfbm9vcCgiU2V0IHRhZyBpZiBjbGllbnQgaW5jbHVkZXMgbWF0Y2hpbmcgb3B0aW9uIGluIHJlcXVlc3QuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0FMVFBPUlQsIEFSR19PTkUsICJbPTxwb3J0cz5dIiwgZ2V0dGV4dF9ub29wKCJVc2UgYWx0ZXJuYXRpdmUgcG9ydHMgZm9yIERIQ1AuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1NDUklQVFVTUiwgQVJHX09ORSwgIjx1c2VybmFtZT4iLCBnZXR0ZXh0X25vb3AoIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0IGFzIHRoaXMgdXNlci4iKSwgTlVMTCB9LAorICB7IExPUFRfTkFQVFIsIEFSR19EVVAsICI8bmFtZT4sPG5hcHRyPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBOQVBUUiBETlMgcmVjb3JkLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9NSU5QT1JULCBBUkdfT05FLCAiPHBvcnQ+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGxvd2VzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iKSwgTlVMTCB9LAorICB7IExPUFRfREhDUF9GUUROLCBPUFRfREhDUF9GUUROLCBOVUxMLCBnZXR0ZXh0X25vb3AoIlVzZSBvbmx5IGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZXMgZm9yIERIQ1AgY2xpZW50cy4iKSwgTlVMTCB9LAorICB7IExPUFRfQ05BTUUsIEFSR19EVVAsICI8YWxpYXM+LDx0YXJnZXQ+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGFsaWFzIG5hbWUgZm9yIExPQ0FMIEROUyBuYW1lLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9QWEVfUFJPTVQsIEFSR19EVVAsICI8cHJvbXB0PixbPHRpbWVvdXQ+XSIsIGdldHRleHRfbm9vcCgiUHJvbXB0IHRvIHNlbmQgdG8gUFhFIGNsaWVudHMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1BYRV9TRVJWLCBBUkdfRFVQLCAiPHNlcnZpY2U+IiwgZ2V0dGV4dF9ub29wKCJCb290IHNlcnZpY2UgZm9yIFBYRSBtZW51LiIpLCBOVUxMIH0sCisgIHsgTE9QVF9URVNULCAwLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkNoZWNrIGNvbmZpZ3VyYXRpb24gc3ludGF4LiIpLCBOVUxMIH0sCisgIHsgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCB9Cit9OyAKKworI2lmZGVmIEhBVkVfREhDUAorLyogbWFrZXMgb3B0aW9ucyB3aGljaCB0YWtlIGEgbGlzdCBvZiBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgT1RfQUREUl9MSVNUIDB4ODAKKy8qIERIQ1AtaW50ZXJuYWwgb3B0aW9ucywgZm9yIGxvZ2dpbmcuIG5vdCB2YWxpZCBpbiBjb25maWcgZmlsZSAqLworI2RlZmluZSBPVF9JTlRFUk5BTCAweDQwCisjZGVmaW5lIE9UX05BTUUgMHgyMAorCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgY2hhciAqbmFtZTsKKyAgdW5zaWduZWQgY2hhciB2YWwsIHNpemU7Cit9IG9wdHRhYltdID0geworICB7ICJuZXRtYXNrIiwgMSwgT1RfQUREUl9MSVNUIH0sCisgIHsgInRpbWUtb2Zmc2V0IiwgMiwgNCB9LAorICB7ICJyb3V0ZXIiLCAzLCBPVF9BRERSX0xJU1QgIH0sCisgIHsgImRucy1zZXJ2ZXIiLCA2LCBPVF9BRERSX0xJU1QgfSwKKyAgeyAibG9nLXNlcnZlciIsIDcsIE9UX0FERFJfTElTVCB9LAorICB7ICJscHItc2VydmVyIiwgOSwgT1RfQUREUl9MSVNUIH0sCisgIHsgImhvc3RuYW1lIiwgMTIsIE9UX0lOVEVSTkFMIHwgT1RfTkFNRSB9LAorICB7ICJib290LWZpbGUtc2l6ZSIsIDEzLCAyIH0sCisgIHsgImRvbWFpbi1uYW1lIiwgMTUsIE9UX05BTUUgfSwKKyAgeyAic3dhcC1zZXJ2ZXIiLCAxNiwgT1RfQUREUl9MSVNUIH0sCisgIHsgInJvb3QtcGF0aCIsIDE3LCAwIH0sCisgIHsgImV4dGVuc2lvbi1wYXRoIiwgMTgsIDAgfSwKKyAgeyAiaXAtZm9yd2FyZC1lbmFibGUiLCAxOSwgMSB9LAorICB7ICJub24tbG9jYWwtc291cmNlLXJvdXRpbmciLCAyMCwgMSB9LAorICB7ICJwb2xpY3ktZmlsdGVyIiwgMjEsIE9UX0FERFJfTElTVCB9LAorICB7ICJtYXgtZGF0YWdyYW0tcmVhc3NlbWJseSIsIDIyLCAyIH0sCisgIHsgImRlZmF1bHQtdHRsIiwgMjMsIDEgfSwKKyAgeyAibXR1IiwgMjYsIDIgfSwKKyAgeyAiYWxsLXN1Ym5ldHMtbG9jYWwiLCAyNywgMSB9LAorICB7ICJicm9hZGNhc3QiLCAyOCwgT1RfSU5URVJOQUwgfCBPVF9BRERSX0xJU1QgfSwKKyAgeyAicm91dGVyLWRpc2NvdmVyeSIsIDMxLCAxIH0sCisgIHsgInJvdXRlci1zb2xpY2l0YXRpb24iLCAzMiwgT1RfQUREUl9MSVNUIH0sCisgIHsgInN0YXRpYy1yb3V0ZSIsIDMzLCBPVF9BRERSX0xJU1QgfSwKKyAgeyAidHJhaWxlci1lbmNhcHN1bGF0aW9uIiwgMzQsIDEgfSwKKyAgeyAiYXJwLXRpbWVvdXQiLCAzNSwgNCB9LAorICB7ICJldGhlcm5ldC1lbmNhcCIsIDM2LCAxIH0sCisgIHsgInRjcC10dGwiLCAzNywgMSB9LAorICB7ICJ0Y3Ata2VlcGFsaXZlIiwgMzgsIDQgfSwKKyAgeyAibmlzLWRvbWFpbiIsIDQwLCAwIH0sCisgIHsgIm5pcy1zZXJ2ZXIiLCA0MSwgT1RfQUREUl9MSVNUIH0sCisgIHsgIm50cC1zZXJ2ZXIiLCA0MiwgT1RfQUREUl9MSVNUIH0sCisgIHsgInZlbmRvci1lbmNhcCIsIDQzLCBPVF9JTlRFUk5BTCB9LAorICB7ICJuZXRiaW9zLW5zIiwgNDQsIE9UX0FERFJfTElTVCB9LAorICB7ICJuZXRiaW9zLWRkIiwgNDUsIE9UX0FERFJfTElTVCB9LAorICB7ICJuZXRiaW9zLW5vZGV0eXBlIiwgNDYsIDEgfSwKKyAgeyAibmV0Ymlvcy1zY29wZSIsIDQ3LCAwIH0sCisgIHsgIngtd2luZG93cy1mcyIsIDQ4LCBPVF9BRERSX0xJU1QgfSwKKyAgeyAieC13aW5kb3dzLWRtIiwgNDksIE9UX0FERFJfTElTVCB9LAorICB7ICJyZXF1ZXN0ZWQtYWRkcmVzcyIsIDUwLCBPVF9JTlRFUk5BTCB8IE9UX0FERFJfTElTVCB9LAorICB7ICJsZWFzZS10aW1lIiwgNTEsIE9UX0lOVEVSTkFMIH0sCisgIHsgIm9wdGlvbi1vdmVybG9hZCIsIDUyLCBPVF9JTlRFUk5BTCB9LAorICB7ICJtZXNzYWdlLXR5cGUiLCA1MywgT1RfSU5URVJOQUwsIH0sCisgIHsgInNlcnZlci1pZGVudGlmaWVyIiwgNTQsIE9UX0lOVEVSTkFMIHwgT1RfQUREUl9MSVNUIH0sCisgIHsgInBhcmFtZXRlci1yZXF1ZXN0IiwgNTUsIE9UX0lOVEVSTkFMIH0sCisgIHsgIm1lc3NhZ2UiLCA1NiwgT1RfSU5URVJOQUwgfSwKKyAgeyAibWF4LW1lc3NhZ2Utc2l6ZSIsIDU3LCBPVF9JTlRFUk5BTCB9LAorICB7ICJUMSIsIDU4LCBPVF9JTlRFUk5BTCB9LAorICB7ICJUMiIsIDU5LCBPVF9JTlRFUk5BTCB9LAorICB7ICJ2ZW5kb3ItY2xhc3MiLCA2MCwgMCB9LAorICB7ICJjbGllbnQtaWQiLCA2MSxPVF9JTlRFUk5BTCB9LAorICB7ICJuaXMrLWRvbWFpbiIsIDY0LCAwIH0sCisgIHsgIm5pcystc2VydmVyIiwgNjUsIE9UX0FERFJfTElTVCB9LAorICB7ICJ0ZnRwLXNlcnZlciIsIDY2LCAwIH0sCisgIHsgImJvb3RmaWxlLW5hbWUiLCA2NywgMCB9LAorICB7ICJtb2JpbGUtaXAtaG9tZSIsIDY4LCBPVF9BRERSX0xJU1QgfSwgCisgIHsgInNtdHAtc2VydmVyIiwgNjksIE9UX0FERFJfTElTVCB9LCAKKyAgeyAicG9wMy1zZXJ2ZXIiLCA3MCwgT1RfQUREUl9MSVNUIH0sIAorICB7ICJubnRwLXNlcnZlciIsIDcxLCBPVF9BRERSX0xJU1QgfSwgCisgIHsgImlyYy1zZXJ2ZXIiLCA3NCwgT1RfQUREUl9MSVNUIH0sIAorICB7ICJ1c2VyLWNsYXNzIiwgNzcsIDAgfSwKKyAgeyAiRlFETiIsIDgxLCBPVF9JTlRFUk5BTCB9LAorICB7ICJhZ2VudC1pZCIsIDgyLCBPVF9JTlRFUk5BTCB9LAorICB7ICJjbGllbnQtYXJjaCIsIDkzLCAyIH0sCisgIHsgImNsaWVudC1pbnRlcmZhY2UtaWQiLCA5NCwgMCB9LAorICB7ICJjbGllbnQtbWFjaGluZS1pZCIsIDk3LCAwIH0sCisgIHsgInN1Ym5ldC1zZWxlY3QiLCAxMTgsIE9UX0lOVEVSTkFMIH0sCisgIHsgImRvbWFpbi1zZWFyY2giLCAxMTksIDAgfSwKKyAgeyAic2lwLXNlcnZlciIsIDEyMCwgMCB9LAorICB7ICJjbGFzc2xlc3Mtc3RhdGljLXJvdXRlIiwgMTIxLCAwIH0sCisgIHsgInNlcnZlci1pcC1hZGRyZXNzIiwgMjU1LCBPVF9BRERSX0xJU1QgfSwgLyogc3BlY2lhbCwgaW50ZXJuYWwgb25seSwgc2V0cyBzaWFkZHIgKi8KKyAgeyBOVUxMLCAwLCAwIH0KK307CisKK2NoYXIgKm9wdGlvbl9zdHJpbmcodW5zaWduZWQgY2hhciBvcHQsIGludCAqaXNfaXAsIGludCAqaXNfbmFtZSkKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgb3B0dGFiW2ldLm5hbWU7IGkrKykKKyAgICBpZiAob3B0dGFiW2ldLnZhbCA9PSBvcHQpCisgICAgICB7CisJaWYgKGlzX2lwKQorCSAgKmlzX2lwID0gISEob3B0dGFiW2ldLnNpemUgJiBPVF9BRERSX0xJU1QpOworCWlmIChpc19uYW1lKQorCSAgKmlzX25hbWUgPSAhIShvcHR0YWJbaV0uc2l6ZSAmIE9UX05BTUUpOworCXJldHVybiBvcHR0YWJbaV0ubmFtZTsKKyAgICAgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworI2VuZGlmCisKKy8qIFdlIGhpZGUgbWV0YWNoYXJhdGVycyBpbiBxdW90ZWQgc3RyaW5ncyBieSBtYXBwaW5nIHRoZW0gaW50byB0aGUgQVNDSUkgY29udHJvbAorICAgY2hhcmFjdGVyIHNwYWNlLiBOb3RlIHRoYXQgdGhlIFwwLCBcdCBcYiBcciBcMDMzIGFuZCBcbiBjaGFyYWN0ZXJzIGFyZSBjYXJlZnVsbHkgcGxhY2VkIGluIHRoZQorICAgZm9sbG93aW5nIHNlcXVlbmNlIHNvIHRoYXQgdGhleSBtYXAgdG8gdGhlbXNlbHZlczogaXQgaXMgdGhlcmVmb3JlIHBvc3NpYmxlIHRvIGNhbGwKKyAgIHVuaGlkZV9tZXRhcyByZXBlYXRlZGx5IG9uIHN0cmluZyB3aXRob3V0IGJyZWFraW5nIHRoaW5ncy4KKyAgIFRoZSB0cmFuc2Zvcm1hdGlvbiBnZXRzIHVuZG9uZSBieSBvcHRfY2Fub25pY2FsaXNlLCBhdG9pX2NoZWNrIGFuZCBvcHRfc3RyaW5nX2FsbG9jLCBhbmQgYSAKKyAgIGNvdXBsZSBvZiBvdGhlciBwbGFjZXMuIAorICAgTm90ZSB0aGF0IHNwYWNlIGlzIGluY2x1ZGVkIGhlcmUgc28gdGhhdAorICAgLS1kaGNwLW9wdGlvbj0zLCBzdHJpbmcKKyAgIGhhcyBmaXZlIGNoYXJhY3RlcnMsIHdoaWxzdAorICAgLS1kaGNwLW9wdGlvbj0zLCIgc3RyaW5nIgorICAgaGFzIHNpeC4KKyovCisKK3N0YXRpYyBjb25zdCBjaGFyIG1ldGFbXSA9ICJcMDAwMTIzNDU2IFxiXHRcbjc4XHI5MGFiY2RlZkFCQ0RFXDAzM0Y6LC4iOworCitzdGF0aWMgY2hhciBoaWRlX21ldGEoY2hhciBjKQoreworICB1bnNpZ25lZCBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihtZXRhKSAtIDEpOyBpKyspCisgICAgaWYgKGMgPT0gbWV0YVtpXSkKKyAgICAgIHJldHVybiAoY2hhcilpOworICAKKyAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBjaGFyIHVuaGlkZV9tZXRhKGNoYXIgY3IpCit7IAorICB1bnNpZ25lZCBpbnQgYyA9IGNyOworICAKKyAgaWYgKGMgPCAoc2l6ZW9mKG1ldGEpIC0gMSkpCisgICAgY3IgPSBtZXRhW2NdOworICAKKyAgcmV0dXJuIGNyOworfQorCitzdGF0aWMgdm9pZCB1bmhpZGVfbWV0YXMoY2hhciAqY3ApCit7CisgIGlmIChjcCkKKyAgICBmb3IoOyAqY3A7IGNwKyspCisgICAgICAqY3AgPSB1bmhpZGVfbWV0YSgqY3ApOworfQorCitzdGF0aWMgdm9pZCAqb3B0X21hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAqcmV0OworCisgIGlmIChtZW1fcmVjb3ZlcikKKyAgICB7CisgICAgICByZXQgPSB3aGluZV9tYWxsb2Moc2l6ZSk7CisgICAgICBpZiAoIXJldCkKKwlsb25nam1wKG1lbV9qbXAsIDEpOworICAgIH0KKyAgZWxzZQorICAgIHJldCA9IHNhZmVfbWFsbG9jKHNpemUpOworICAKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNoYXIgKm9wdF9zdHJpbmdfYWxsb2MoY2hhciAqY3ApCit7CisgIGNoYXIgKnJldCA9IE5VTEw7CisgIAorICBpZiAoY3AgJiYgc3RybGVuKGNwKSAhPSAwKQorICAgIHsKKyAgICAgIHJldCA9IG9wdF9tYWxsb2Moc3RybGVuKGNwKSsxKTsKKyAgICAgIHN0cmNweShyZXQsIGNwKTsgCisgICAgICAKKyAgICAgIC8qIHJlc3RvcmUgaGlkZGVuIG1ldGFjaGFycyAqLworICAgICAgdW5oaWRlX21ldGFzKHJldCk7CisgICAgfQorICAgIAorICByZXR1cm4gcmV0OworfQorCisKKy8qIGZpbmQgbmV4dCBjb21tYSwgc3BsaXQgc3RyaW5nIHdpdGggemVybyBhbmQgZWxpbWluYXRlIHNwYWNlcy4KKyAgIHJldHVybiBzdGFydCBvZiBzdHJpbmcgZm9sbG93aW5nIGNvbW1hICovCisKK3N0YXRpYyBjaGFyICpzcGxpdF9jaHIoY2hhciAqcywgY2hhciBjKQoreworICBjaGFyICpjb21tYSwgKnA7CisKKyAgaWYgKCFzIHx8ICEoY29tbWEgPSBzdHJjaHIocywgYykpKQorICAgIHJldHVybiBOVUxMOworICAKKyAgcCA9IGNvbW1hOworICAqY29tbWEgPSAnICc7CisgIAorICBmb3IgKDsgaXNzcGFjZSgoaW50KSpjb21tYSk7IGNvbW1hKyspOworIAorICBmb3IgKDsgKHAgPj0gcykgJiYgaXNzcGFjZSgoaW50KSpwKTsgcC0tKQorICAgICpwID0gMDsKKyAgICAKKyAgcmV0dXJuIGNvbW1hOworfQorCitzdGF0aWMgY2hhciAqc3BsaXQoY2hhciAqcykKK3sKKyAgcmV0dXJuIHNwbGl0X2NocihzLCAnLCcpOworfQorCitzdGF0aWMgY2hhciAqY2Fub25pY2FsaXNlX29wdChjaGFyICpzKQoreworICBjaGFyICpyZXQ7CisgIGludCBub21lbTsKKworICBpZiAoIXMpCisgICAgcmV0dXJuIDA7CisKKyAgdW5oaWRlX21ldGFzKHMpOworICBpZiAoIShyZXQgPSBjYW5vbmljYWxpc2UocywgJm5vbWVtKSkgJiYgbm9tZW0pCisgICAgeworICAgICAgaWYgKG1lbV9yZWNvdmVyKQorCWxvbmdqbXAobWVtX2ptcCwgMSk7CisgICAgICBlbHNlCisJZGllKF8oImNvdWxkIG5vdCBnZXQgbWVtb3J5IiksIE5VTEwsIEVDX05PTUVNKTsKKyAgICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdG9pX2NoZWNrKGNoYXIgKmEsIGludCAqcmVzKQoreworICBjaGFyICpwOworCisgIGlmICghYSkKKyAgICByZXR1cm4gMDsKKworICB1bmhpZGVfbWV0YXMoYSk7CisgIAorICBmb3IgKHAgPSBhOyAqcDsgcCsrKQorICAgICBpZiAoKnAgPCAnMCcgfHwgKnAgPiAnOScpCisgICAgICAgcmV0dXJuIDA7CisKKyAgKnJlcyA9IGF0b2koYSk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGF0b2lfY2hlY2sxNihjaGFyICphLCBpbnQgKnJlcykKK3sKKyAgaWYgKCEoYXRvaV9jaGVjayhhLCByZXMpKSB8fAorICAgICAgKnJlcyA8IDAgfHwKKyAgICAgICpyZXMgPiAweGZmZmYpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisJCitzdGF0aWMgdm9pZCBhZGRfdHh0KGNoYXIgKm5hbWUsIGNoYXIgKnR4dCkKK3sKKyAgc2l6ZV90IGxlbiA9IHN0cmxlbih0eHQpOworICBzdHJ1Y3QgdHh0X3JlY29yZCAqciA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCB0eHRfcmVjb3JkKSk7CisgIAorICByLT5uYW1lID0gb3B0X3N0cmluZ19hbGxvYyhuYW1lKTsKKyAgci0+bmV4dCA9IGRhZW1vbi0+dHh0OworICBkYWVtb24tPnR4dCA9IHI7CisgIHItPmNsYXNzID0gQ19DSEFPUzsKKyAgci0+dHh0ID0gb3B0X21hbGxvYyhsZW4rMSk7CisgIHItPmxlbiA9IGxlbisxOworICAqKHItPnR4dCkgPSBsZW47CisgIG1lbWNweSgoci0+dHh0KSsxLCB0eHQsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIGRvX3VzYWdlKHZvaWQpCit7CisgIGNoYXIgYnVmZlsxMDBdOworICBpbnQgaSwgajsKKworICBzdHJ1Y3QgeworICAgIGNoYXIgaGFuZGxlOworICAgIGludCB2YWw7CisgIH0gdGFiW10gPSB7CisgICAgeyAnJCcsIENBQ0hFU0laIH0sCisgICAgeyAnKicsIEVETlNfUEtUU1ogfSwKKyAgICB7ICcmJywgTUFYTEVBU0VTIH0sCisgICAgeyAnIScsIEZUQUJTSVogfSwKKyAgICB7ICcjJywgVEZUUF9NQVhfQ09OTkVDVElPTlMgfSwKKyAgICB7ICdcMCcsIDAgfQorICB9OworCisgIHByaW50ZihfKCJVc2FnZTogZG5zbWFzcSBbb3B0aW9uc11cblxuIikpOworI2lmbmRlZiBIQVZFX0dFVE9QVF9MT05HCisgIHByaW50ZihfKCJVc2Ugc2hvcnQgb3B0aW9ucyBvbmx5IG9uIHRoZSBjb21tYW5kIGxpbmUuXG4iKSk7CisjZW5kaWYKKyAgcHJpbnRmKF8oIlZhbGlkIG9wdGlvbnMgYXJlOlxuIikpOworICAKKyAgZm9yIChpID0gMDsgdXNhZ2VbaV0ub3B0ICE9IDA7IGkrKykKKyAgICB7CisgICAgICBjaGFyICpkZXNjID0gdXNhZ2VbaV0uZmxhZ2Rlc2M7IAorICAgICAgY2hhciAqZXEgPSAiPSI7CisgICAgICAKKyAgICAgIGlmICghZGVzYyB8fCAqZGVzYyA9PSAnWycpCisJZXEgPSAiIjsKKyAgICAgIAorICAgICAgaWYgKCFkZXNjKQorCWRlc2MgPSAiIjsKKworICAgICAgZm9yICggaiA9IDA7IG9wdHNbal0ubmFtZTsgaisrKQorCWlmIChvcHRzW2pdLnZhbCA9PSB1c2FnZVtpXS5vcHQpCisJICBicmVhazsKKyAgICAgIGlmICh1c2FnZVtpXS5vcHQgPCAyNTYpCisJc3ByaW50ZihidWZmLCAiLSVjLCAiLCB1c2FnZVtpXS5vcHQpOworICAgICAgZWxzZQorCXNwcmludGYoYnVmZiwgIiAgICAiKTsKKyAgICAgIAorICAgICAgc3ByaW50ZihidWZmKzQsICItLSVzJXMlcyIsIG9wdHNbal0ubmFtZSwgZXEsIGRlc2MpOworICAgICAgcHJpbnRmKCIlLTM2LjM2cyIsIGJ1ZmYpOworCSAgICAgCisgICAgICBpZiAodXNhZ2VbaV0uYXJnKQorCXsKKwkgIHN0cmNweShidWZmLCB1c2FnZVtpXS5hcmcpOworCSAgZm9yIChqID0gMDsgdGFiW2pdLmhhbmRsZTsgaisrKQorCSAgICBpZiAodGFiW2pdLmhhbmRsZSA9PSAqKHVzYWdlW2ldLmFyZykpCisJICAgICAgc3ByaW50ZihidWZmLCAiJWQiLCB0YWJbal0udmFsKTsKKwl9CisgICAgICBwcmludGYoXyh1c2FnZVtpXS5kZXNjKSwgYnVmZik7CisgICAgICBwcmludGYoIlxuIik7CisgICAgfQorfQorCisjaWZkZWYgSEFWRV9ESENQCitzdGF0aWMgdm9pZCBkaXNwbGF5X29wdHModm9pZCkKK3sKKyAgaW50IGk7CisgIAorICBwcmludGYoXygiS25vd24gREhDUCBvcHRpb25zOlxuIikpOworICAKKyAgZm9yIChpID0gMDsgb3B0dGFiW2ldLm5hbWU7IGkrKykKKyAgICBpZiAoIShvcHR0YWJbaV0uc2l6ZSAmIE9UX0lOVEVSTkFMKSkKKyAgICAgIHByaW50ZigiJTNkICVzXG4iLCBvcHR0YWJbaV0udmFsLCBvcHR0YWJbaV0ubmFtZSk7Cit9CisKKy8qIFRoaXMgaXMgdG9vIGluc2FuZWx5IGxhcmdlIHRvIGtlZXAgaW4tbGluZSBpbiB0aGUgc3dpdGNoICovCitzdGF0aWMgY2hhciAqcGFyc2VfZGhjcF9vcHQoY2hhciAqYXJnLCBpbnQgZmxhZ3MpCit7CisgIHN0cnVjdCBkaGNwX29wdCAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3Bfb3B0KSk7CisgIGNoYXIgbGVuY2hhciA9IDAsICpjcDsKKyAgaW50IGksIGFkZHJzLCBkaWdzLCBpc19hZGRyLCBpc19oZXgsIGlzX2RlYywgaXNfc3RyaW5nLCBkb3RzOworICBjaGFyICpjb21tYSA9IE5VTEwsICpwcm9ibGVtID0gTlVMTDsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKm5wID0gTlVMTDsKKyAgdW5zaWduZWQgY2hhciBvcHRfbGVuID0gMDsKKworICBuZXctPmxlbiA9IDA7CisgIG5ldy0+ZmxhZ3MgPSBmbGFnczsKKyAgbmV3LT5uZXRpZCA9IE5VTEw7CisgIG5ldy0+dmFsID0gTlVMTDsKKyAgbmV3LT5vcHQgPSAwOworICAKKyAgd2hpbGUgKGFyZykKKyAgICB7CisgICAgICBjb21tYSA9IHNwbGl0KGFyZyk7ICAgICAgCisKKyAgICAgIGZvciAoY3AgPSBhcmc7ICpjcDsgY3ArKykKKwlpZiAoKmNwIDwgJzAnIHx8ICpjcCA+ICc5JykKKwkgIGJyZWFrOworICAgICAgCisgICAgICBpZiAoISpjcCkKKwl7CisJICBuZXctPm9wdCA9IGF0b2koYXJnKTsKKwkgIG9wdF9sZW4gPSAwOworCSAgYnJlYWs7CisJfQorICAgICAgCisgICAgICBpZiAoc3Ryc3RyKGFyZywgIm9wdGlvbjoiKSA9PSBhcmcpCisJeworCSAgZm9yIChpID0gMDsgb3B0dGFiW2ldLm5hbWU7IGkrKykKKwkgICAgaWYgKCEob3B0dGFiW2ldLnNpemUgJiBPVF9JTlRFUk5BTCkgJiYKKwkJc3RyY2FzZWNtcChvcHR0YWJbaV0ubmFtZSwgYXJnKzcpID09IDApCisJICAgICAgeworCQluZXctPm9wdCA9IG9wdHRhYltpXS52YWw7CisJCW9wdF9sZW4gPSBvcHR0YWJbaV0uc2l6ZTsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgLyogb3B0aW9uOjxvcHRuYW1lPiBtdXN0IGZvbGxvdyB0YWcgYW5kIHZlbmRvciBzdHJpbmcuICovCisJICBicmVhazsKKwl9CisgICAgICBlbHNlIGlmIChzdHJzdHIoYXJnLCAidmVuZG9yOiIpID09IGFyZykKKwl7CisJICBuZXctPnUudmVuZG9yX2NsYXNzID0gKHVuc2lnbmVkIGNoYXIgKilvcHRfc3RyaW5nX2FsbG9jKGFyZys3KTsKKwkgIG5ldy0+ZmxhZ3MgfD0gREhPUFRfVkVORE9SOworCX0KKyAgICAgIGVsc2UgaWYgKHN0cnN0cihhcmcsICJlbmNhcDoiKSA9PSBhcmcpCisJeworCSAgbmV3LT51LmVuY2FwID0gYXRvaShhcmcrNik7CisJICBuZXctPmZsYWdzIHw9IERIT1BUX0VOQ0FQU1VMQVRFOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBuZXctPm5ldGlkID0gb3B0X21hbGxvYyhzaXplb2YgKHN0cnVjdCBkaGNwX25ldGlkKSk7CisJICAvKiBhbGxvdyBvcHRpb25hbCAibmV0OiIgZm9yIGNvbnNpc3RlbmN5ICovCisJICBpZiAoc3Ryc3RyKGFyZywgIm5ldDoiKSA9PSBhcmcpCisJICAgIG5ldy0+bmV0aWQtPm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKzQpOworCSAgZWxzZQorCSAgICBuZXctPm5ldGlkLT5uZXQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJICBuZXctPm5ldGlkLT5uZXh0ID0gbnA7CisJICBucCA9IG5ldy0+bmV0aWQ7CisJfQorICAgICAgCisgICAgICBhcmcgPSBjb21tYTsgCisgICAgfQorICAKKyAgaWYgKG5ldy0+b3B0ID09IDApCisgICAgcHJvYmxlbSA9IF8oImJhZCBkaGNwLW9wdGlvbiIpOworICBlbHNlIGlmIChjb21tYSkKKyAgICB7CisgICAgICAvKiBjaGFyYWN0ZXJpc2UgdGhlIHZhbHVlICovCisgICAgICBjaGFyIGM7CisgICAgICBpc19hZGRyID0gaXNfaGV4ID0gaXNfZGVjID0gaXNfc3RyaW5nID0gMTsKKyAgICAgIGFkZHJzID0gZGlncyA9IDE7CisgICAgICBkb3RzID0gMDsKKyAgICAgIGZvciAoY3AgPSBjb21tYTsgKGMgPSAqY3ApOyBjcCsrKQorCWlmIChjID09ICcsJykKKwkgIHsKKwkgICAgYWRkcnMrKzsKKwkgICAgaXNfZGVjID0gaXNfaGV4ID0gMDsKKwkgIH0KKwllbHNlIGlmIChjID09ICc6JykKKwkgIHsKKwkgICAgZGlncysrOworCSAgICBpc19kZWMgPSBpc19hZGRyID0gMDsKKwkgIH0KKwllbHNlIGlmIChjID09ICcvJykgCisJICB7CisJICAgIGlzX2RlYyA9IGlzX2hleCA9IDA7CisJICAgIGlmIChjcCA9PSBjb21tYSkgLyogbGVhZGluZyAvIG1lYW5zIGEgcGF0aG5hbWUgKi8KKwkgICAgICBpc19hZGRyID0gMDsKKwkgIH0gCisJZWxzZSBpZiAoYyA9PSAnLicpCQorCSAgeworCSAgICBpc19kZWMgPSBpc19oZXggPSAwOworCSAgICBkb3RzKys7CisJICB9CisJZWxzZSBpZiAoYyA9PSAnLScpCisJICBpc19oZXggPSBpc19hZGRyID0gMDsKKwllbHNlIGlmIChjID09ICcgJykKKwkgIGlzX2RlYyA9IGlzX2hleCA9IDA7CisJZWxzZSBpZiAoIShjID49JzAnICYmIGMgPD0gJzknKSkKKwkgIHsKKwkgICAgaXNfYWRkciA9IDA7CisJICAgIGlmIChjcFsxXSA9PSAwICYmIGlzX2RlYyAmJgorCQkoYyA9PSAnYicgfHwgYyA9PSAncycgfHwgYyA9PSAnaScpKQorCSAgICAgIHsKKwkJbGVuY2hhciA9IGM7CisJCSpjcCA9IDA7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgaXNfZGVjID0gMDsKKwkgICAgaWYgKCEoKGMgPj0nQScgJiYgYyA8PSAnRicpIHx8CisJCSAgKGMgPj0nYScgJiYgYyA8PSAnZicpIHx8IAorCQkgIChjID09ICcqJyAmJiAoZmxhZ3MgJiBESE9QVF9NQVRDSCkpKSkKKwkgICAgICBpc19oZXggPSAwOworCSAgfQorICAgICAKKyAgICAgIC8qIFdlIGtub3cgdGhhdCBzb21lIG9wdGlvbnMgdGFrZSBhZGRyZXNzZXMgKi8KKworICAgICAgaWYgKG9wdF9sZW4gJiBPVF9BRERSX0xJU1QpCisJeworCSAgaXNfc3RyaW5nID0gaXNfZGVjID0gaXNfaGV4ID0gMDsKKwkgIGlmICghaXNfYWRkciB8fCBkb3RzID09IDApCisJICAgIHByb2JsZW0gPSBfKCJiYWQgSVAgYWRkcmVzcyIpOworCX0KKwkgIAorICAgICAgaWYgKGlzX2hleCAmJiBkaWdzID4gMSkKKwl7CisJICBuZXctPmxlbiA9IGRpZ3M7CisJICBuZXctPnZhbCA9IG9wdF9tYWxsb2MobmV3LT5sZW4pOworCSAgcGFyc2VfaGV4KGNvbW1hLCBuZXctPnZhbCwgZGlncywgKGZsYWdzICYgREhPUFRfTUFUQ0gpID8gJm5ldy0+dS53aWxkY2FyZF9tYXNrIDogTlVMTCwgTlVMTCk7CisJICBuZXctPmZsYWdzIHw9IERIT1BUX0hFWDsKKwl9CisgICAgICBlbHNlIGlmIChpc19kZWMpCisJeworCSAgaW50IGksIHZhbCA9IGF0b2koY29tbWEpOworCSAgLyogYXNzdW1lIG51bWVyaWMgYXJnIGlzIDEgYnl0ZSBleGNlcHQgZm9yCisJICAgICBvcHRpb25zIHdoZXJlIGl0IGlzIGtub3duIG90aGVyd2lzZS4KKwkgICAgIEZvciB2ZW5kb3IgY2xhc3Mgb3B0aW9uLCB3ZSBoYXZlIHRvIGhhY2suICovCisJICBpZiAob3B0X2xlbiAhPSAwKQorCSAgICBuZXctPmxlbiA9IG9wdF9sZW47CisJICBlbHNlIGlmICh2YWwgJiAweGZmZmYwMDAwKQorCSAgICBuZXctPmxlbiA9IDQ7CisJICBlbHNlIGlmICh2YWwgJiAweGZmMDApCisJICAgIG5ldy0+bGVuID0gMjsKKwkgIGVsc2UKKwkgICAgbmV3LT5sZW4gPSAxOworCisJICBpZiAobGVuY2hhciA9PSAnYicpCisJICAgIG5ldy0+bGVuID0gMTsKKwkgIGVsc2UgaWYgKGxlbmNoYXIgPT0gJ3MnKQorCSAgICBuZXctPmxlbiA9IDI7CisJICBlbHNlIGlmIChsZW5jaGFyID09ICdpJykKKwkgICAgbmV3LT5sZW4gPSA0OworCSAgCisJICBuZXctPnZhbCA9IG9wdF9tYWxsb2MobmV3LT5sZW4pOworCSAgZm9yIChpPTA7IGk8bmV3LT5sZW47IGkrKykKKwkgICAgbmV3LT52YWxbaV0gPSB2YWw+PigobmV3LT5sZW4gLSBpIC0gMSkqOCk7CisJfQorICAgICAgZWxzZSBpZiAoaXNfYWRkcikJCisJeworCSAgc3RydWN0IGluX2FkZHIgaW47CisJICB1bnNpZ25lZCBjaGFyICpvcDsKKwkgIGNoYXIgKnNsYXNoOworCSAgLyogbWF4IGxlbmd0aCBvZiBhZGRyZXNzL3N1Ym5ldCBkZXNjcmlwdG9yIGlzIGZpdmUgYnl0ZXMsCisJICAgICBhZGQgb25lIGZvciB0aGUgb3B0aW9uIDEyMCBlbmMgYnl0ZSB0b28gKi8KKwkgIG5ldy0+dmFsID0gb3AgPSBvcHRfbWFsbG9jKCg1ICogYWRkcnMpICsgMSk7CisJICBuZXctPmZsYWdzIHw9IERIT1BUX0FERFI7CisKKwkgIGlmICghKG5ldy0+ZmxhZ3MgJiBESE9QVF9FTkNBUFNVTEFURSkgJiYgbmV3LT5vcHQgPT0gMTIwKQorCSAgICB7CisJICAgICAgKihvcCsrKSA9IDE7IC8qIFJGQyAzMzYxICJlbmMgYnl0ZSIgKi8KKwkgICAgICBuZXctPmZsYWdzICY9IH5ESE9QVF9BRERSOworCSAgICB9CisJICB3aGlsZSAoYWRkcnMtLSkgCisJICAgIHsKKwkgICAgICBjcCA9IGNvbW1hOworCSAgICAgIGNvbW1hID0gc3BsaXQoY3ApOworCSAgICAgIHNsYXNoID0gc3BsaXRfY2hyKGNwLCAnLycpOworCSAgICAgIGluLnNfYWRkciA9IGluZXRfYWRkcihjcCk7CisJICAgICAgaWYgKCFzbGFzaCkKKwkJeworCQkgIG1lbWNweShvcCwgJmluLCBJTkFERFJTWik7CisJCSAgb3AgKz0gSU5BRERSU1o7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikmaW47CisJCSAgaW50IG5ldHNpemUgPSBhdG9pKHNsYXNoKTsKKwkJICAqb3ArKyA9IG5ldHNpemU7CisJCSAgaWYgKG5ldHNpemUgPiAwKQorCQkgICAgKm9wKysgPSAqcCsrOworCQkgIGlmIChuZXRzaXplID4gOCkKKwkJICAgICpvcCsrID0gKnArKzsKKwkJICBpZiAobmV0c2l6ZSA+IDE2KQorCQkgICAgKm9wKysgPSAqcCsrOworCQkgIGlmIChuZXRzaXplID4gMjQpCisJCSAgICAqb3ArKyA9ICpwKys7CisJCSAgbmV3LT5mbGFncyAmPSB+REhPUFRfQUREUjsgLyogY2Fubm90IHJlLXdyaXRlIGRlc2NyaXB0b3IgZm9ybWF0ICovCisJCX0gCisJICAgIH0KKwkgIG5ldy0+bGVuID0gb3AgLSBuZXctPnZhbDsKKwl9CisgICAgICBlbHNlIGlmIChpc19zdHJpbmcpCisJeworCSAgLyogdGV4dCBhcmcgKi8KKwkgIGlmICgobmV3LT5vcHQgPT0gMTE5IHx8IG5ldy0+b3B0ID09IDEyMCkgJiYgIShuZXctPmZsYWdzICYgREhPUFRfRU5DQVBTVUxBVEUpKQorCSAgICB7CisJICAgICAgLyogZG5zIHNlYXJjaCwgUkZDIDMzOTcsIG9yIFNJUCwgUkZDIDMzNjEgKi8KKwkgICAgICB1bnNpZ25lZCBjaGFyICpxLCAqciwgKnRhaWw7CisJICAgICAgdW5zaWduZWQgY2hhciAqcCwgKm0gPSBOVUxMLCAqbmV3cDsKKwkgICAgICBzaXplX3QgbmV3bGVuLCBsZW4gPSAwOworCSAgICAgIGludCBoZWFkZXJfc2l6ZSA9IChuZXctPm9wdCA9PSAxMTkpID8gMCA6IDE7CisJICAgICAgCisJICAgICAgYXJnID0gY29tbWE7CisJICAgICAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgICAgIAorCSAgICAgIHdoaWxlIChhcmcgJiYgKmFyZykKKwkJeworCQkgIGNoYXIgKmRvbTsKKwkJICBpZiAoIShkb20gPSBhcmcgPSBjYW5vbmljYWxpc2Vfb3B0KGFyZykpKQorCQkgICAgeworCQkgICAgICBwcm9ibGVtID0gXygiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIpOworCQkgICAgICBicmVhazsKKwkJICAgIH0KKwkJICAKKwkJICBuZXdwID0gb3B0X21hbGxvYyhsZW4gKyBzdHJsZW4oYXJnKSArIDIgKyBoZWFkZXJfc2l6ZSk7CisJCSAgaWYgKG0pCisJCSAgICBtZW1jcHkobmV3cCwgbSwgaGVhZGVyX3NpemUgKyBsZW4pOworCQkgIG0gPSBuZXdwOworCQkgIHAgPSBtICsgaGVhZGVyX3NpemU7CisJCSAgcSA9IHAgKyBsZW47CisJCSAgCisJCSAgLyogYWRkIHN0cmluZyBvbiB0aGUgZW5kIGluIFJGQzEwMzUgZm9ybWF0ICovCisJCSAgd2hpbGUgKCphcmcpIAorCQkgICAgeworCQkgICAgICB1bnNpZ25lZCBjaGFyICpjcCA9IHErKzsKKwkJICAgICAgaW50IGo7CisJCSAgICAgIGZvciAoaiA9IDA7ICphcmcgJiYgKCphcmcgIT0gJy4nKTsgYXJnKyssIGorKykKKwkJCSpxKysgPSAqYXJnOworCQkgICAgICAqY3AgPSBqOworCQkgICAgICBpZiAoKmFyZykKKwkJCWFyZysrOworCQkgICAgfQorCQkgICpxKysgPSAwOworCQkgIGZyZWUoZG9tKTsKKworCQkgIC8qIE5vdyB0YWlsLWNvbXByZXNzIHVzaW5nIGVhcmxpZXIgbmFtZXMuICovCisJCSAgbmV3bGVuID0gcSAtIHA7CisJCSAgZm9yICh0YWlsID0gcCArIGxlbjsgKnRhaWw7IHRhaWwgKz0gKCp0YWlsKSArIDEpCisJCSAgICBmb3IgKHIgPSBwOyByIC0gcCA8IChpbnQpbGVuOyByICs9ICgqcikgKyAxKQorCQkgICAgICBpZiAoc3RyY21wKChjaGFyICopciwgKGNoYXIgKil0YWlsKSA9PSAwKQorCQkJeworCQkJICBQVVRTSE9SVCgociAtIHApIHwgMHhjMDAwLCB0YWlsKTsgCisJCQkgIG5ld2xlbiA9IHRhaWwgLSBwOworCQkJICBnb3RvIGVuZDsKKwkJCX0KKwkJZW5kOgorCQkgIGxlbiA9IG5ld2xlbjsKKwkJICAKKwkJICBhcmcgPSBjb21tYTsKKwkJICBjb21tYSA9IHNwbGl0KGFyZyk7CisJCX0KKyAgICAgIAorCSAgICAgIC8qIFJGQyAzMzYxLCBlbmMgYnl0ZSBpcyB6ZXJvIGZvciBuYW1lcyAqLworCSAgICAgIGlmIChuZXctPm9wdCA9PSAxMjApCisJCW1bMF0gPSAwOworCSAgICAgIG5ldy0+bGVuID0gKGludCkgbGVuICsgaGVhZGVyX3NpemU7CisJICAgICAgbmV3LT52YWwgPSBtOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBuZXctPmxlbiA9IHN0cmxlbihjb21tYSk7CisJICAgICAgLyoga2VlcCB0ZXJtaW5hdGluZyB6ZXJvIG9uIHN0cmluZyAqLworCSAgICAgIG5ldy0+dmFsID0gKHVuc2lnbmVkIGNoYXIgKilvcHRfc3RyaW5nX2FsbG9jKGNvbW1hKTsKKwkgICAgICBuZXctPmZsYWdzIHw9IERIT1BUX1NUUklORzsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgaWYgKChuZXctPmxlbiA+IDI1NSkgfHwgKG5ldy0+bGVuID4gMjUzICYmIChuZXctPmZsYWdzICYgKERIT1BUX1ZFTkRPUiB8IERIT1BUX0VOQ0FQU1VMQVRFKSkpKQorICAgIHByb2JsZW0gPSBfKCJkaGNwLW9wdGlvbiB0b28gbG9uZyIpOworICAKKyAgaWYgKCFwcm9ibGVtKQorICAgIHsKKyAgICAgIGlmIChmbGFncyA9PSBESE9QVF9NQVRDSCkKKwl7CisJICBpZiAoKG5ldy0+ZmxhZ3MgJiAoREhPUFRfRU5DQVBTVUxBVEUgfCBESE9QVF9WRU5ET1IpKSB8fAorCSAgICAgICFuZXctPm5ldGlkIHx8CisJICAgICAgbmV3LT5uZXRpZC0+bmV4dCkKKwkgICAgcHJvYmxlbSA9IF8oImlsbGVnYWwgZGhjcC1tYXRjaCIpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5kaGNwX21hdGNoOworCSAgICAgIGRhZW1vbi0+ZGhjcF9tYXRjaCA9IG5ldzsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgICAgIAorCXsKKwkgIG5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9vcHRzOworCSAgZGFlbW9uLT5kaGNwX29wdHMgPSBuZXc7CisJfQorICAgIH0KKworICByZXR1cm4gcHJvYmxlbTsKK30KKworI2VuZGlmCisKK3N0YXRpYyBjaGFyICpvbmVfb3B0KGludCBvcHRpb24sIGNoYXIgKmFyZywgY2hhciAqZ2VuX3Byb2IsIGludCBuZXN0KQoreyAgICAgIAorICBpbnQgaTsKKyAgY2hhciAqY29tbWEsICpwcm9ibGVtID0gTlVMTDs7CisKKyAgaWYgKG9wdGlvbiA9PSAnPycpCisgICAgcmV0dXJuIGdlbl9wcm9iOworICAKKyAgZm9yIChpPTA7IHVzYWdlW2ldLm9wdCAhPSAwOyBpKyspCisgICAgaWYgKHVzYWdlW2ldLm9wdCA9PSBvcHRpb24pCisgICAgICB7CisJIGludCByZXB0ID0gdXNhZ2VbaV0ucmVwdDsKKwkgCisJIGlmIChuZXN0ID09IDApCisJICAgeworCSAgICAgLyogY29tbWFuZCBsaW5lICovCisJICAgICBpZiAocmVwdCA9PSBBUkdfVVNFRF9DTCkKKwkgICAgICAgcmV0dXJuIF8oImlsbGVnYWwgcmVwZWF0ZWQgZmxhZyIpOworCSAgICAgaWYgKHJlcHQgPT0gQVJHX09ORSkKKwkgICAgICAgdXNhZ2VbaV0ucmVwdCA9IEFSR19VU0VEX0NMOworCSAgIH0KKwkgZWxzZQorCSAgIHsKKwkgICAgIC8qIGFsbG93IGZpbGUgdG8gb3ZlcnJpZGUgY29tbWFuZCBsaW5lICovCisJICAgICBpZiAocmVwdCA9PSBBUkdfVVNFRF9GSUxFKQorCSAgICAgICByZXR1cm4gXygiaWxsZWdhbCByZXBlYXRlZCBrZXl3b3JkIik7CisJICAgICBpZiAocmVwdCA9PSBBUkdfVVNFRF9DTCB8fCByZXB0ID09IEFSR19PTkUpCisJICAgICAgIHVzYWdlW2ldLnJlcHQgPSBBUkdfVVNFRF9GSUxFOworCSAgIH0KKworCSBpZiAocmVwdCAhPSBBUkdfRFVQICYmIHJlcHQgIT0gQVJHX09ORSAmJiByZXB0ICE9IEFSR19VU0VEX0NMKSAKKwkgICB7CisJICAgICBkYWVtb24tPm9wdGlvbnMgfD0gcmVwdDsKKwkgICAgIHJldHVybiBOVUxMOworCSAgIH0KKyAgICAgICAKKwkgYnJlYWs7CisgICAgICB9CisgIAorICBzd2l0Y2ggKG9wdGlvbikKKyAgICB7IAorICAgIGNhc2UgJ0MnOiAvKiAtLWNvbmYtZmlsZSAqLworICAgICAgeworCWNoYXIgKmZpbGUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJaWYgKGZpbGUpCisJICB7CisJICAgIG9uZV9maWxlKGZpbGUsIG5lc3QsIDApOworCSAgICBmcmVlKGZpbGUpOworCSAgfQorCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSAnNyc6IC8qIC0tY29uZi1kaXIgKi8JICAgICAgCisgICAgICB7CisJRElSICpkaXJfc3RyZWFtOworCXN0cnVjdCBkaXJlbnQgKmVudDsKKwljaGFyICpkaXJlY3RvcnksICpwYXRoOworCXN0cnVjdCBsaXN0IHsKKwkgIGNoYXIgKnN1ZmZpeDsKKwkgIHN0cnVjdCBsaXN0ICpuZXh0OworCX0gKmlnbm9yZV9zdWZmaXggPSBOVUxMLCAqbGk7CisJCisJY29tbWEgPSBzcGxpdChhcmcpOworCWlmICghKGRpcmVjdG9yeSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKSkpCisJICBicmVhazsKKwkKKwlmb3IgKGFyZyA9IGNvbW1hOyBhcmc7IGFyZyA9IGNvbW1hKSAKKwkgIHsKKwkgICAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgICBsaSA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXN0KSk7CisJICAgIGxpLT5uZXh0ID0gaWdub3JlX3N1ZmZpeDsKKwkgICAgaWdub3JlX3N1ZmZpeCA9IGxpOworCSAgICAvKiBIYXZlIHRvIGNvcHk6IGJ1ZmZlciBpcyBvdmVyd3JpdHRlbiAqLworCSAgICBsaS0+c3VmZml4ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCSAgfTsKKwkKKwlpZiAoIShkaXJfc3RyZWFtID0gb3BlbmRpcihkaXJlY3RvcnkpKSkKKwkgIGRpZShfKCJjYW5ub3QgYWNjZXNzIGRpcmVjdG9yeSAlczogJXMiKSwgZGlyZWN0b3J5LCBFQ19GSUxFKTsKKwkKKwl3aGlsZSAoKGVudCA9IHJlYWRkaXIoZGlyX3N0cmVhbSkpKQorCSAgeworCSAgICBzaXplX3QgbGVuID0gc3RybGVuKGVudC0+ZF9uYW1lKTsKKwkgICAgc3RydWN0IHN0YXQgYnVmOworCSAgICAKKwkgICAgLyogaWdub3JlIGVtYWNzIGJhY2t1cHMgYW5kIGRvdGZpbGVzICovCisJICAgIGlmIChsZW4gPT0gMCB8fAorCQllbnQtPmRfbmFtZVtsZW4gLSAxXSA9PSAnficgfHwKKwkJKGVudC0+ZF9uYW1lWzBdID09ICcjJyAmJiBlbnQtPmRfbmFtZVtsZW4gLSAxXSA9PSAnIycpIHx8CisJCWVudC0+ZF9uYW1lWzBdID09ICcuJykKKwkgICAgICBjb250aW51ZTsKKworCSAgICBmb3IgKGxpID0gaWdub3JlX3N1ZmZpeDsgbGk7IGxpID0gbGktPm5leHQpCisJICAgICAgeworCQkvKiBjaGVjayBmb3IgcHJvc2NyaWJlZCBzdWZmaWNlcyAqLworCQlzaXplX3QgbHMgPSBzdHJsZW4obGktPnN1ZmZpeCk7CisJCWlmIChsZW4gPiBscyAmJgorCQkgICAgc3RyY21wKGxpLT5zdWZmaXgsICZlbnQtPmRfbmFtZVtsZW4gLSBsc10pID09IDApCisJCSAgYnJlYWs7CisJICAgICAgfQorCSAgICBpZiAobGkpCisJICAgICAgY29udGludWU7CisJICAgIAorCSAgICBwYXRoID0gb3B0X21hbGxvYyhzdHJsZW4oZGlyZWN0b3J5KSArIGxlbiArIDIpOworCSAgICBzdHJjcHkocGF0aCwgZGlyZWN0b3J5KTsKKwkgICAgc3RyY2F0KHBhdGgsICIvIik7CisJICAgIHN0cmNhdChwYXRoLCBlbnQtPmRfbmFtZSk7CisKKwkgICAgaWYgKHN0YXQocGF0aCwgJmJ1ZikgPT0gLTEpCisJICAgICAgZGllKF8oImNhbm5vdCBhY2Nlc3MgJXM6ICVzIiksIHBhdGgsIEVDX0ZJTEUpOworCSAgICAvKiBvbmx5IHJlZyBmaWxlcyBhbGxvd2VkLiAqLworCSAgICBpZiAoIVNfSVNSRUcoYnVmLnN0X21vZGUpKQorCSAgICAgIGNvbnRpbnVlOworCSAgICAKKwkgICAgLyogZGlyIGlzIG9uZSBsZXZlbCwgc28gZmlsZXMgbXVzdCBiZSByZWFkYWJsZSAqLworCSAgICBvbmVfZmlsZShwYXRoLCBuZXN0ICsgMSwgMCk7CisJICAgIGZyZWUocGF0aCk7CisJICB9CisgICAgIAorCWNsb3NlZGlyKGRpcl9zdHJlYW0pOworCWZyZWUoZGlyZWN0b3J5KTsKKwlmb3IoOyBpZ25vcmVfc3VmZml4OyBpZ25vcmVfc3VmZml4ID0gbGkpCisJICB7CisJICAgIGxpID0gaWdub3JlX3N1ZmZpeC0+bmV4dDsKKwkgICAgZnJlZShpZ25vcmVfc3VmZml4LT5zdWZmaXgpOworCSAgICBmcmVlKGlnbm9yZV9zdWZmaXgpOworCSAgfQorCSAgICAgIAorCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSAnOCc6IC8qIC0tbG9nLWZhY2lsaXR5ICovCisgICAgICAvKiBtYXkgYmUgYSBmaWxlbmFtZSAqLworICAgICAgaWYgKHN0cmNocihhcmcsICcvJykpCisJZGFlbW9uLT5sb2dfZmlsZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKyAgICAgIGVsc2UKKwl7CSAgCisJICBmb3IgKGkgPSAwOyBmYWNpbGl0eW5hbWVzW2ldLmNfbmFtZTsgaSsrKQorCSAgICBpZiAoaG9zdG5hbWVfaXNlcXVhbCgoY2hhciAqKWZhY2lsaXR5bmFtZXNbaV0uY19uYW1lLCBhcmcpKQorCSAgICAgIGJyZWFrOworCSAgCisJICBpZiAoZmFjaWxpdHluYW1lc1tpXS5jX25hbWUpCisJICAgIGRhZW1vbi0+bG9nX2ZhYyA9IGZhY2lsaXR5bmFtZXNbaV0uY192YWw7CisJICBlbHNlCisJICAgIHByb2JsZW0gPSAiYmFkIGxvZyBmYWNpbGl0eSI7CisJfQorICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlICd4JzogLyogLS1waWQtZmlsZSAqLworICAgICAgZGFlbW9uLT5ydW5maWxlID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExPUFRfREhDUF9IT1NUOiAvKiAtLWRoY3AtaG9zdGZpbGUgKi8KKyAgICAgIGlmIChkYWVtb24tPmRoY3BfaG9zdHNfZmlsZSkKKwlwcm9ibGVtID0gXygib25seSBvbmUgZGhjcC1ob3N0c2ZpbGUgYWxsb3dlZCIpOworICAgICAgZWxzZQorCWRhZW1vbi0+ZGhjcF9ob3N0c19maWxlID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworICAgICAgYnJlYWs7CisgICAgIAorICAgIGNhc2UgTE9QVF9ESENQX09QVFM6IC8qIC0tZGhjcC1vcHRzZmlsZSAqLworICAgICAgaWYgKGRhZW1vbi0+ZGhjcF9vcHRzX2ZpbGUpCisJcHJvYmxlbSA9IF8oIm9ubHkgb25lIGRoY3Atb3B0c2ZpbGUgYWxsb3dlZCIpOworICAgICAgZWxzZQorCWRhZW1vbi0+ZGhjcF9vcHRzX2ZpbGUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisgICAgICBicmVhazsgCisgICAgICAKKyAgICBjYXNlICdyJzogLyogLS1yZXNvbHYtZmlsZSAqLworICAgICAgeworCWNoYXIgKm5hbWUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJc3RydWN0IHJlc29sdmMgKm5ldywgKmxpc3QgPSBkYWVtb24tPnJlc29sdl9maWxlczsKKwkKKwlpZiAobGlzdCAmJiBsaXN0LT5pc19kZWZhdWx0KQorCSAgeworCSAgICAvKiByZXBsYWNlIGRlZmF1bHQgcmVzb2x2IGZpbGUgLSBwb3NzaWJseSB3aXRoIG5vdGhpbmcgKi8KKwkgICAgaWYgKG5hbWUpCisJICAgICAgeworCQlsaXN0LT5pc19kZWZhdWx0ID0gMDsKKwkJbGlzdC0+bmFtZSA9IG5hbWU7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgbGlzdCA9IE5VTEw7CisJICB9CisJZWxzZSBpZiAobmFtZSkKKwkgIHsKKwkgICAgbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc29sdmMpKTsKKwkgICAgbmV3LT5uZXh0ID0gbGlzdDsKKwkgICAgbmV3LT5uYW1lID0gbmFtZTsKKwkgICAgbmV3LT5pc19kZWZhdWx0ID0gMDsKKwkgICAgbmV3LT5tdGltZSA9IDA7CisJICAgIG5ldy0+bG9nZ2VkID0gMDsKKwkgICAgbGlzdCA9IG5ldzsKKwkgIH0KKwlkYWVtb24tPnJlc29sdl9maWxlcyA9IGxpc3Q7CisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICBjYXNlICdtJzogIC8qIC0tbXgtaG9zdCAqLworICAgICAgeworCWludCBwcmVmID0gMTsKKwlzdHJ1Y3QgbXhfc3J2X3JlY29yZCAqbmV3OworCWNoYXIgKm5hbWUsICp0YXJnZXQgPSBOVUxMOworCisJaWYgKChjb21tYSA9IHNwbGl0KGFyZykpKQorCSAgeworCSAgICBjaGFyICpwcmVmc3RyOworCSAgICBpZiAoKHByZWZzdHIgPSBzcGxpdChjb21tYSkpICYmICFhdG9pX2NoZWNrMTYocHJlZnN0ciwgJnByZWYpKQorCSAgICAgIHByb2JsZW0gPSBfKCJiYWQgTVggcHJlZmVyZW5jZSIpOworCSAgfQorCQorCWlmICghKG5hbWUgPSBjYW5vbmljYWxpc2Vfb3B0KGFyZykpIHx8IAorCSAgICAoY29tbWEgJiYgISh0YXJnZXQgPSBjYW5vbmljYWxpc2Vfb3B0KGNvbW1hKSkpKQorCSAgcHJvYmxlbSA9IF8oImJhZCBNWCBuYW1lIik7CisJCisJbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IG14X3Nydl9yZWNvcmQpKTsKKwluZXctPm5leHQgPSBkYWVtb24tPm14bmFtZXM7CisJZGFlbW9uLT5teG5hbWVzID0gbmV3OworCW5ldy0+aXNzcnYgPSAwOworCW5ldy0+bmFtZSA9IG5hbWU7CisJbmV3LT50YXJnZXQgPSB0YXJnZXQ7IC8qIG1heSBiZSBOVUxMICovCisJbmV3LT53ZWlnaHQgPSBwcmVmOworCWJyZWFrOworICAgICAgfQorICAgICAgCisgICAgY2FzZSAndCc6IC8qICAtLW14LXRhcmdldCAqLworICAgICAgaWYgKCEoZGFlbW9uLT5teHRhcmdldCA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkpCisJcHJvYmxlbSA9IF8oImJhZCBNWCB0YXJnZXQiKTsKKyAgICAgIGJyZWFrOworCisjaWZkZWYgSEFWRV9ESENQICAgICAgCisgICAgY2FzZSAnbCc6ICAvKiAtLWRoY3AtbGVhc2VmaWxlICovCisgICAgICBkYWVtb24tPmxlYXNlX2ZpbGUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgJzYnOiAvKiAtLWRoY3Atc2NyaXB0ICovCisjICBpZiBkZWZpbmVkKE5PX0ZPUkspCisgICAgICBwcm9ibGVtID0gXygiY2Fubm90IHJ1biBzY3JpcHRzIHVuZGVyIHVDbGludXgiKTsKKyMgIGVsaWYgIWRlZmluZWQoSEFWRV9TQ1JJUFQpCisgICAgICBwcm9ibGVtID0gXygicmVjb21waWxlIHdpdGggSEFWRV9TQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgbGVhc2UtY2hhbmdlIHNjcmlwdHMiKTsKKyMgIGVsc2UKKyAgICAgIGRhZW1vbi0+bGVhc2VfY2hhbmdlX2NvbW1hbmQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisjICBlbmRpZgorICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgIGNhc2UgJ0gnOiAvKiAtLWFkZG4taG9zdHMgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgaG9zdHNmaWxlICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaG9zdHNmaWxlKSk7CisJc3RhdGljIGludCBob3N0c19pbmRleCA9IDE7CisJbmV3LT5mbmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwluZXctPmluZGV4ID0gaG9zdHNfaW5kZXgrKzsKKwluZXctPmZsYWdzID0gMDsKKwluZXctPm5leHQgPSBkYWVtb24tPmFkZG5faG9zdHM7CisJZGFlbW9uLT5hZGRuX2hvc3RzID0gbmV3OworCWJyZWFrOworICAgICAgfQorICAgICAgCisgICAgY2FzZSAncyc6IC8qIC0tZG9tYWluICovCisgICAgICBpZiAoc3RyY21wIChhcmcsICIjIikgPT0gMCkKKwlkYWVtb24tPm9wdGlvbnMgfD0gT1BUX1JFU09MVl9ET01BSU47CisgICAgICBlbHNlCisJeworCSAgY2hhciAqZDsKKwkgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgIGlmICghKGQgPSBjYW5vbmljYWxpc2Vfb3B0KGFyZykpKQorCSAgICBvcHRpb24gPSAnPyc7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoY29tbWEpCisJCXsKKwkJICBzdHJ1Y3QgY29uZF9kb21haW4gKm5ldyA9IHNhZmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29uZF9kb21haW4pKTsKKwkJICB1bmhpZGVfbWV0YXMoY29tbWEpOworCQkgIGlmICgoYXJnID0gc3BsaXRfY2hyKGNvbW1hLCAnLycpKSkKKwkJICAgIHsKKwkJICAgICAgaW50IG1hc2s7CisJCSAgICAgIGlmICgobmV3LT5zdGFydC5zX2FkZHIgPSBpbmV0X2FkZHIoY29tbWEpKSA9PSAoaW5fYWRkcl90KS0xIHx8CisJCQkgICFhdG9pX2NoZWNrKGFyZywgJm1hc2spKQorCQkJb3B0aW9uID0gJz8nOworCQkgICAgICBlbHNlCisJCQl7CisJCQkgIG1hc2sgPSAoMSA8PCAoMzIgLSBtYXNrKSkgLSAxOworCQkJICBuZXctPnN0YXJ0LnNfYWRkciA9IG50b2hsKGh0b25sKG5ldy0+c3RhcnQuc19hZGRyKSAmIH5tYXNrKTsKKwkJCSAgbmV3LT5lbmQuc19hZGRyID0gbmV3LT5zdGFydC5zX2FkZHIgfCBodG9ubChtYXNrKTsKKwkJCX0KKwkJICAgIH0KKwkJICBlbHNlIGlmICgoYXJnID0gc3BsaXQoY29tbWEpKSkKKwkJICAgIHsKKwkJICAgICAgaWYgKChuZXctPnN0YXJ0LnNfYWRkciA9IGluZXRfYWRkcihjb21tYSkpID09IChpbl9hZGRyX3QpLTEgfHwKKwkJCSAgKG5ldy0+ZW5kLnNfYWRkciA9IGluZXRfYWRkcihhcmcpKSA9PSAoaW5fYWRkcl90KS0xKQorCQkJb3B0aW9uID0gJz8nOworCQkgICAgfQorCQkgIGVsc2UgaWYgKChuZXctPnN0YXJ0LnNfYWRkciA9IG5ldy0+ZW5kLnNfYWRkciA9IGluZXRfYWRkcihjb21tYSkpID09IChpbl9hZGRyX3QpLTEpCisJCSAgICBvcHRpb24gPSAnPyc7CisKKwkJICBuZXctPmRvbWFpbiA9IGQ7CisJCSAgbmV3LT5uZXh0ID0gZGFlbW9uLT5jb25kX2RvbWFpbjsKKwkJICBkYWVtb24tPmNvbmRfZG9tYWluID0gbmV3OworCQl9CisJICAgICAgZWxzZQorCQlkYWVtb24tPmRvbWFpbl9zdWZmaXggPSBkOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlICd1JzogIC8qIC0tdXNlciAqLworICAgICAgZGFlbW9uLT51c2VybmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSAnZyc6ICAvKiAtLWdyb3VwICovCisgICAgICBkYWVtb24tPmdyb3VwbmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKyAgICAgIGRhZW1vbi0+Z3JvdXBfc2V0ID0gMTsKKyAgICAgIGJyZWFrOworCisjaWZkZWYgSEFWRV9ESENQCisgICAgY2FzZSBMT1BUX1NDUklQVFVTUjogLyogLS1zY3JpcHR1c2VyICovCisgICAgICBkYWVtb24tPnNjcmlwdHVzZXIgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgCisgICAgY2FzZSAnaSc6ICAvKiAtLWludGVyZmFjZSAqLworICAgICAgZG8geworCXN0cnVjdCBpbmFtZSAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGluYW1lKSk7CisJY29tbWEgPSBzcGxpdChhcmcpOworCW5ldy0+bmV4dCA9IGRhZW1vbi0+aWZfbmFtZXM7CisJZGFlbW9uLT5pZl9uYW1lcyA9IG5ldzsKKwkvKiBuZXctPm5hbWUgbWF5IGJlIE5VTEwgaWYgc29tZW9uZSBkb2VzCisJICAgImludGVyZmFjZT0iIHRvIGRpc2FibGUgYWxsIGludGVyZmFjZXMgZXhjZXB0IGxvb3AuICovCisJbmV3LT5uYW1lID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCW5ldy0+aXNsb29wID0gbmV3LT51c2VkID0gMDsKKwlhcmcgPSBjb21tYTsKKyAgICAgIH0gd2hpbGUgKGFyZyk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgJ0knOiAgLyogLS1leGNlcHQtaW50ZXJmYWNlICovCisgICAgY2FzZSAnMic6ICAvKiAtLW5vLWRoY3AtaW50ZXJmYWNlICovCisgICAgICBkbyB7CisJc3RydWN0IGluYW1lICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5hbWUpKTsKKwljb21tYSA9IHNwbGl0KGFyZyk7CisJbmV3LT5uYW1lID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCWlmIChvcHRpb24gPT0gJ0knKQorCSAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmlmX2V4Y2VwdDsKKwkgICAgZGFlbW9uLT5pZl9leGNlcHQgPSBuZXc7CisJICB9CisJZWxzZQorCSAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmRoY3BfZXhjZXB0OworCSAgICBkYWVtb24tPmRoY3BfZXhjZXB0ID0gbmV3OworCSAgfQorCWFyZyA9IGNvbW1hOworICAgICAgfSB3aGlsZSAoYXJnKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSAnQic6ICAvKiAtLWJvZ3VzLW54ZG9tYWluICovCisgICAgICB7CisJc3RydWN0IGluX2FkZHIgYWRkcjsKKwl1bmhpZGVfbWV0YXMoYXJnKTsKKwlpZiAoYXJnICYmIChhZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmcpKSAhPSAoaW5fYWRkcl90KS0xKQorCSAgeworCSAgICBzdHJ1Y3QgYm9ndXNfYWRkciAqYmFkZHIgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgYm9ndXNfYWRkcikpOworCSAgICBiYWRkci0+bmV4dCA9IGRhZW1vbi0+Ym9ndXNfYWRkcjsKKwkgICAgZGFlbW9uLT5ib2d1c19hZGRyID0gYmFkZHI7CisJICAgIGJhZGRyLT5hZGRyID0gYWRkcjsKKwkgIH0KKwllbHNlCisJICBvcHRpb24gPSAnPyc7IC8qIGVycm9yICovCisJYnJlYWs7CQorICAgICAgfQorICAgICAgCisgICAgY2FzZSAnYSc6ICAvKiAtLWxpc3Rlbi1hZGRyZXNzICovCisgICAgICBkbyB7CisJc3RydWN0IGluYW1lICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5hbWUpKTsKKwljb21tYSA9IHNwbGl0KGFyZyk7CisJdW5oaWRlX21ldGFzKGFyZyk7CisJbmV3LT5uZXh0ID0gZGFlbW9uLT5pZl9hZGRyczsKKwlpZiAoYXJnICYmIChuZXctPmFkZHIuaW4uc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKGFyZykpICE9IChpbl9hZGRyX3QpLTEpCisJICB7CisJICAgIG5ldy0+YWRkci5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisJICAgIG5ldy0+YWRkci5pbi5zaW5fbGVuID0gc2l6ZW9mKG5ldy0+YWRkci5pbik7CisjZW5kaWYKKwkgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwllbHNlIGlmIChhcmcgJiYgaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmcsICZuZXctPmFkZHIuaW42LnNpbjZfYWRkcikgPiAwKQorCSAgeworCSAgICBuZXctPmFkZHIuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDY7CisJICAgIG5ldy0+YWRkci5pbjYuc2luNl9mbG93aW5mbyA9IDA7CisJICAgIG5ldy0+YWRkci5pbjYuc2luNl9zY29wZV9pZCA9IDA7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKwkgICAgbmV3LT5hZGRyLmluNi5zaW42X2xlbiA9IHNpemVvZihuZXctPmFkZHIuaW42KTsKKyNlbmRpZgorCSAgfQorI2VuZGlmCisJZWxzZQorCSAgeworCSAgICBvcHRpb24gPSAnPyc7IC8qIGVycm9yICovCisJICAgIGJyZWFrOworCSAgfQorCQorCWRhZW1vbi0+aWZfYWRkcnMgPSBuZXc7CisJYXJnID0gY29tbWE7CisgICAgICB9IHdoaWxlIChhcmcpOworICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlICdTJzogICAgICAgIC8qICAtLXNlcnZlciAqLworICAgIGNhc2UgTE9QVF9MT0NBTDogLyogIC0tbG9jYWwgKi8KKyAgICBjYXNlICdBJzogICAgICAgIC8qICAtLWFkZHJlc3MgKi8KKyAgICAgIHsKKwlzdHJ1Y3Qgc2VydmVyICpzZXJ2LCAqbmV3bGlzdCA9IE5VTEw7CisJCisJdW5oaWRlX21ldGFzKGFyZyk7CisJCisJaWYgKGFyZyAmJiAqYXJnID09ICcvJykKKwkgIHsKKwkgICAgY2hhciAqZW5kOworCSAgICBhcmcrKzsKKwkgICAgd2hpbGUgKChlbmQgPSBzcGxpdF9jaHIoYXJnLCAnLycpKSkKKwkgICAgICB7CisJCWNoYXIgKmRvbWFpbiA9IE5VTEw7CisJCS8qICMgbWF0Y2hlcyBldmVyeXRoaW5nIGFuZCBiZWNvbWVzIGEgemVybyBsZW5ndGggZG9tYWluIHN0cmluZyAqLworCQlpZiAoc3RyY21wKGFyZywgIiMiKSA9PSAwKQorCQkgIGRvbWFpbiA9ICIiOworCQllbHNlIGlmIChzdHJsZW4gKGFyZykgIT0gMCAmJiAhKGRvbWFpbiA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkpCisJCSAgb3B0aW9uID0gJz8nOworCQlzZXJ2ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcnZlcikpOworCQltZW1zZXQoc2VydiwgMCwgc2l6ZW9mKHN0cnVjdCBzZXJ2ZXIpKTsKKwkJc2Vydi0+bmV4dCA9IG5ld2xpc3Q7CisJCW5ld2xpc3QgPSBzZXJ2OworCQlzZXJ2LT5kb21haW4gPSBkb21haW47CisJCXNlcnYtPmZsYWdzID0gZG9tYWluID8gU0VSVl9IQVNfRE9NQUlOIDogU0VSVl9GT1JfTk9ET1RTOworCQlhcmcgPSBlbmQ7CisJICAgICAgfQorCSAgICBpZiAoIW5ld2xpc3QpCisJICAgICAgeworCQlvcHRpb24gPSAnPyc7CisJCWJyZWFrOworCSAgICAgIH0KKwkgICAgCisJICB9CisJZWxzZQorCSAgeworCSAgICBuZXdsaXN0ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcnZlcikpOworCSAgICBtZW1zZXQobmV3bGlzdCwgMCwgc2l6ZW9mKHN0cnVjdCBzZXJ2ZXIpKTsKKwkgIH0KKwkKKwlpZiAob3B0aW9uID09ICdBJykKKwkgIHsKKwkgICAgbmV3bGlzdC0+ZmxhZ3MgfD0gU0VSVl9MSVRFUkFMX0FERFJFU1M7CisJICAgIGlmICghKG5ld2xpc3QtPmZsYWdzICYgU0VSVl9UWVBFKSkKKwkgICAgICBvcHRpb24gPSAnPyc7CisJICB9CisJCisJaWYgKCFhcmcgfHwgISphcmcpCisJICB7CisJICAgIG5ld2xpc3QtPmZsYWdzIHw9IFNFUlZfTk9fQUREUjsgLyogbm8gc2VydmVyICovCisJICAgIGlmIChuZXdsaXN0LT5mbGFncyAmIFNFUlZfTElURVJBTF9BRERSRVNTKQorCSAgICAgIG9wdGlvbiA9ICc/JzsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGludCBzb3VyY2VfcG9ydCA9IDAsIHNlcnZfcG9ydCA9IE5BTUVTRVJWRVJfUE9SVDsKKwkgICAgY2hhciAqcG9ydG5vLCAqc291cmNlOworCSAgICAKKwkgICAgaWYgKChzb3VyY2UgPSBzcGxpdF9jaHIoYXJnLCAnQCcpKSAmJiAvKiBpcyB0aGVyZSBhIHNvdXJjZS4gKi8KKwkJKHBvcnRubyA9IHNwbGl0X2Nocihzb3VyY2UsICcjJykpICYmCisJCSFhdG9pX2NoZWNrMTYocG9ydG5vLCAmc291cmNlX3BvcnQpKQorCSAgICAgIHByb2JsZW0gPSBfKCJiYWQgcG9ydCIpOworCSAgICAgICAJICAgIAorCSAgICBpZiAoKHBvcnRubyA9IHNwbGl0X2NocihhcmcsICcjJykpICYmIC8qIGlzIHRoZXJlIGEgcG9ydCBuby4gKi8KKwkJIWF0b2lfY2hlY2sxNihwb3J0bm8sICZzZXJ2X3BvcnQpKQorCSAgICAgIHByb2JsZW0gPSBfKCJiYWQgcG9ydCIpOworCSAgICAKKwkgICAgaWYgKChuZXdsaXN0LT5hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmcpKSAhPSAoaW5fYWRkcl90KSAtMSkKKwkgICAgICB7CisJCW5ld2xpc3QtPmFkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhzZXJ2X3BvcnQpOwkKKwkJbmV3bGlzdC0+c291cmNlX2FkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhzb3VyY2VfcG9ydCk7IAorCQluZXdsaXN0LT5hZGRyLnNhLnNhX2ZhbWlseSA9IG5ld2xpc3QtPnNvdXJjZV9hZGRyLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKwkJbmV3bGlzdC0+c291cmNlX2FkZHIuaW4uc2luX2xlbiA9IG5ld2xpc3QtPmFkZHIuaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCWlmIChzb3VyY2UpCisJCSAgeworCQkgICAgbmV3bGlzdC0+ZmxhZ3MgfD0gU0VSVl9IQVNfU09VUkNFOworCQkgICAgaWYgKChuZXdsaXN0LT5zb3VyY2VfYWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoc291cmNlKSkgPT0gKGluX2FkZHJfdCkgLTEpCisJCSAgICAgIHsKKyNpZiBkZWZpbmVkKFNPX0JJTkRUT0RFVklDRSkKKwkJCW5ld2xpc3QtPnNvdXJjZV9hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisJCQlzdHJuY3B5KG5ld2xpc3QtPmludGVyZmFjZSwgc291cmNlLCBJRl9OQU1FU0laRSk7CisjZWxzZQorCQkJcHJvYmxlbSA9IF8oImludGVyZmFjZSBiaW5kaW5nIG5vdCBzdXBwb3J0ZWQiKTsKKyNlbmRpZgorCQkgICAgICB9CisJCSAgfQorCQllbHNlCisJCSAgbmV3bGlzdC0+c291cmNlX2FkZHIuaW4uc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKwkgICAgICB9CisjaWZkZWYgSEFWRV9JUFY2CisJICAgIGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgYXJnLCAmbmV3bGlzdC0+YWRkci5pbjYuc2luNl9hZGRyKSA+IDApCisJICAgICAgeworCQluZXdsaXN0LT5hZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhzZXJ2X3BvcnQpOworCQluZXdsaXN0LT5zb3VyY2VfYWRkci5pbjYuc2luNl9wb3J0ID0gaHRvbnMoc291cmNlX3BvcnQpOworCQluZXdsaXN0LT5hZGRyLnNhLnNhX2ZhbWlseSA9IG5ld2xpc3QtPnNvdXJjZV9hZGRyLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisJCW5ld2xpc3QtPmFkZHIuaW42LnNpbjZfbGVuID0gbmV3bGlzdC0+c291cmNlX2FkZHIuaW42LnNpbjZfbGVuID0gc2l6ZW9mKG5ld2xpc3QtPmFkZHIuaW42KTsKKyNlbmRpZgorCQlpZiAoc291cmNlKQorCQkgIHsKKwkJICAgICBuZXdsaXN0LT5mbGFncyB8PSBTRVJWX0hBU19TT1VSQ0U7CisJCSAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgc291cmNlLCAmbmV3bGlzdC0+c291cmNlX2FkZHIuaW42LnNpbjZfYWRkcikgPT0gMCkKKwkJICAgICAgeworI2lmIGRlZmluZWQoU09fQklORFRPREVWSUNFKQorCQkJbmV3bGlzdC0+c291cmNlX2FkZHIuaW42LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OyAKKwkJCXN0cm5jcHkobmV3bGlzdC0+aW50ZXJmYWNlLCBzb3VyY2UsIElGX05BTUVTSVpFKTsKKyNlbHNlCisJCQlwcm9ibGVtID0gXygiaW50ZXJmYWNlIGJpbmRpbmcgbm90IHN1cHBvcnRlZCIpOworI2VuZGlmCisJCSAgICAgIH0KKwkJICB9CisJCWVsc2UKKwkJICBuZXdsaXN0LT5zb3VyY2VfYWRkci5pbjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7IAorCSAgICAgIH0KKyNlbmRpZgorCSAgICBlbHNlCisJICAgICAgb3B0aW9uID0gJz8nOyAvKiBlcnJvciAqLworCSAgICAKKwkgIH0KKwkKKwlzZXJ2ID0gbmV3bGlzdDsKKwl3aGlsZSAoc2Vydi0+bmV4dCkKKwkgIHsKKwkgICAgc2Vydi0+bmV4dC0+ZmxhZ3MgPSBzZXJ2LT5mbGFnczsKKwkgICAgc2Vydi0+bmV4dC0+YWRkciA9IHNlcnYtPmFkZHI7CisJICAgIHNlcnYtPm5leHQtPnNvdXJjZV9hZGRyID0gc2Vydi0+c291cmNlX2FkZHI7CisJICAgIHNlcnYgPSBzZXJ2LT5uZXh0OworCSAgfQorCXNlcnYtPm5leHQgPSBkYWVtb24tPnNlcnZlcnM7CisJZGFlbW9uLT5zZXJ2ZXJzID0gbmV3bGlzdDsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgIGNhc2UgJ2MnOiAgLyogLS1jYWNoZS1zaXplICovCisgICAgICB7CisJaW50IHNpemU7CisJCisJaWYgKCFhdG9pX2NoZWNrKGFyZywgJnNpemUpKQorCSAgb3B0aW9uID0gJz8nOworCWVsc2UKKwkgIHsKKwkgICAgLyogemVybyBpcyBPSywgYW5kIG1lYW5zIG5vIGNhY2hpbmcuICovCisJICAgIAorCSAgICBpZiAoc2l6ZSA8IDApCisJICAgICAgc2l6ZSA9IDA7CisJICAgIGVsc2UgaWYgKHNpemUgPiAxMDAwMCkKKwkgICAgICBzaXplID0gMTAwMDA7CisJICAgIAorCSAgICBkYWVtb24tPmNhY2hlc2l6ZSA9IHNpemU7CisJICB9CisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICBjYXNlICdwJzogIC8qIC0tcG9ydCAqLworICAgICAgaWYgKCFhdG9pX2NoZWNrMTYoYXJnLCAmZGFlbW9uLT5wb3J0KSkKKwlvcHRpb24gPSAnPyc7CisgICAgICBicmVhazsKKyAgICAKKyAgICBjYXNlIExPUFRfTUlOUE9SVDogIC8qIC0tbWluLXBvcnQgKi8KKyAgICAgIGlmICghYXRvaV9jaGVjazE2KGFyZywgJmRhZW1vbi0+bWluX3BvcnQpKQorCW9wdGlvbiA9ICc/JzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnMCc6ICAvKiAtLWRucy1mb3J3YXJkLW1heCAqLworICAgICAgaWYgKCFhdG9pX2NoZWNrKGFyZywgJmRhZW1vbi0+ZnRhYnNpemUpKQorCW9wdGlvbiA9ICc/JzsKKyAgICAgIGJyZWFrOyAgCisgICAgCisgICAgY2FzZSBMT1BUX01BWF9MT0dTOiAgLyogLS1sb2ctYXN5bmMgKi8KKyAgICAgIGRhZW1vbi0+bWF4X2xvZ3MgPSBMT0dfTUFYOyAvKiBkZWZhdWx0ICovCisgICAgICBpZiAoYXJnICYmICFhdG9pX2NoZWNrKGFyZywgJmRhZW1vbi0+bWF4X2xvZ3MpKQorCW9wdGlvbiA9ICc/JzsKKyAgICAgIGVsc2UgaWYgKGRhZW1vbi0+bWF4X2xvZ3MgPiAxMDApCisJZGFlbW9uLT5tYXhfbG9ncyA9IDEwMDsKKyAgICAgIGJyZWFrOyAgCisKKyAgICBjYXNlICdQJzogLyogLS1lZG5zLXBhY2tldC1tYXggKi8KKyAgICAgIHsKKwlpbnQgaTsKKwlpZiAoIWF0b2lfY2hlY2soYXJnLCAmaSkpCisJICBvcHRpb24gPSAnPyc7CisJZGFlbW9uLT5lZG5zX3BrdHN6ID0gKHVuc2lnbmVkIHNob3J0KWk7CQorCWJyZWFrOworICAgICAgfQorICAgICAgCisgICAgY2FzZSAnUSc6ICAvKiAtLXF1ZXJ5LXBvcnQgKi8KKyAgICAgIGlmICghYXRvaV9jaGVjazE2KGFyZywgJmRhZW1vbi0+cXVlcnlfcG9ydCkpCisJb3B0aW9uID0gJz8nOworICAgICAgLyogaWYgZXhwbGljaXRseSBzZXQgdG8gemVybywgdXNlIHNpbmdsZSBPUyBlcGhlbWVyYWwgcG9ydAorCSBhbmQgZGlzYWJsZSByYW5kb20gcG9ydHMgKi8KKyAgICAgIGlmIChkYWVtb24tPnF1ZXJ5X3BvcnQgPT0gMCkKKwlkYWVtb24tPm9zcG9ydCA9IDE7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgJ1QnOiAgICAgICAgIC8qIC0tbG9jYWwtdHRsICovCisgICAgY2FzZSBMT1BUX05FR1RUTDogLyogLS1uZWctdHRsICovCisgICAgICB7CisJaW50IHR0bDsKKwlpZiAoIWF0b2lfY2hlY2soYXJnLCAmdHRsKSkKKwkgIG9wdGlvbiA9ICc/JzsKKwllbHNlIGlmIChvcHRpb24gPT0gTE9QVF9ORUdUVEwpCisJICBkYWVtb24tPm5lZ190dGwgPSAodW5zaWduZWQgbG9uZyl0dGw7CisJZWxzZQorCSAgZGFlbW9uLT5sb2NhbF90dGwgPSAodW5zaWduZWQgbG9uZyl0dGw7CisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyNpZmRlZiBIQVZFX0RIQ1AKKyAgICBjYXNlICdYJzogLyogLS1kaGNwLWxlYXNlLW1heCAqLworICAgICAgaWYgKCFhdG9pX2NoZWNrKGFyZywgJmRhZW1vbi0+ZGhjcF9tYXgpKQorCW9wdGlvbiA9ICc/JzsKKyAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAKKyNpZmRlZiBIQVZFX1RGVFAKKyAgICBjYXNlIExPUFRfVEZUUF9NQVg6ICAvKiAgLS10ZnRwLW1heCAqLworICAgICAgaWYgKCFhdG9pX2NoZWNrKGFyZywgJmRhZW1vbi0+dGZ0cF9tYXgpKQorCW9wdGlvbiA9ICc/JzsKKyAgICAgIGJyZWFrOyAgCisKKyAgICBjYXNlIExPUFRfUFJFRklYOiAvKiAtLXRmdHAtcHJlZml4ICovCisgICAgICBkYWVtb24tPnRmdHBfcHJlZml4ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExPUFRfVEZUUFBPUlRTOiAvKiAtLXRmdHAtcG9ydC1yYW5nZSAqLworICAgICAgaWYgKCEoY29tbWEgPSBzcGxpdChhcmcpKSB8fCAKKwkgICFhdG9pX2NoZWNrMTYoYXJnLCAmZGFlbW9uLT5zdGFydF90ZnRwX3BvcnQpIHx8CisJICAhYXRvaV9jaGVjazE2KGNvbW1hLCAmZGFlbW9uLT5lbmRfdGZ0cF9wb3J0KSkKKwlwcm9ibGVtID0gXygiYmFkIHBvcnQgcmFuZ2UiKTsKKyAgICAgIAorICAgICAgaWYgKGRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0ID4gZGFlbW9uLT5lbmRfdGZ0cF9wb3J0KQorCXsKKwkgIGludCB0bXAgPSBkYWVtb24tPnN0YXJ0X3RmdHBfcG9ydDsKKwkgIGRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0ID0gZGFlbW9uLT5lbmRfdGZ0cF9wb3J0OworCSAgZGFlbW9uLT5lbmRfdGZ0cF9wb3J0ID0gdG1wOworCX0gCisgICAgICAKKyAgICAgIGJyZWFrOworI2VuZGlmCisJICAgICAgCisgICAgY2FzZSBMT1BUX0JSSURHRTogICAvKiAtLWJyaWRnZS1pbnRlcmZhY2UgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgZGhjcF9icmlkZ2UgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX2JyaWRnZSkpOworCWlmICghKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJICB7CisJICAgIHByb2JsZW0gPSBfKCJiYWQgYnJpZGdlLWludGVyZmFjZSIpOworCSAgICBicmVhazsKKwkgIH0KKwkKKwlzdHJuY3B5KG5ldy0+aWZhY2UsIGFyZywgSUZfTkFNRVNJWkUpOworCW5ldy0+YWxpYXMgPSBOVUxMOworCW5ldy0+bmV4dCA9IGRhZW1vbi0+YnJpZGdlczsKKwlkYWVtb24tPmJyaWRnZXMgPSBuZXc7CisKKwlkbyB7CisJICBhcmcgPSBjb21tYTsKKwkgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgIGlmIChzdHJsZW4oYXJnKSAhPSAwKQorCSAgICB7CisJICAgICAgc3RydWN0IGRoY3BfYnJpZGdlICpiID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3BfYnJpZGdlKSk7IAorCSAgICAgIGItPm5leHQgPSBuZXctPmFsaWFzOworCSAgICAgIG5ldy0+YWxpYXMgPSBiOworCSAgICAgIHN0cm5jcHkoYi0+aWZhY2UsIGFyZywgSUZfTkFNRVNJWkUpOworCSAgICB9CisJfSB3aGlsZSAoY29tbWEpOworCQorCWJyZWFrOworICAgICAgfQorCisjaWZkZWYgSEFWRV9ESENQCisgICAgY2FzZSAnRic6ICAvKiAtLWRoY3AtcmFuZ2UgKi8KKyAgICAgIHsKKwlpbnQgaywgbGVhc2Vwb3MgPSAyOworCWNoYXIgKmNwLCAqYVs1XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworCXN0cnVjdCBkaGNwX2NvbnRleHQgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX2NvbnRleHQpKTsKKwkKKwluZXctPm5leHQgPSBkYWVtb24tPmRoY3A7CisJbmV3LT5sZWFzZV90aW1lID0gREVGTEVBU0U7CisJbmV3LT5hZGRyX2Vwb2NoID0gMDsKKwluZXctPm5ldG1hc2suc19hZGRyID0gMDsKKwluZXctPmJyb2FkY2FzdC5zX2FkZHIgPSAwOworCW5ldy0+cm91dGVyLnNfYWRkciA9IDA7CisJbmV3LT5uZXRpZC5uZXQgPSBOVUxMOworCW5ldy0+ZmlsdGVyID0gTlVMTDsKKwluZXctPmZsYWdzID0gMDsKKwkKKwlnZW5fcHJvYiA9IF8oImJhZCBkaGNwLXJhbmdlIik7CisJCisJaWYgKCFhcmcpCisJICB7CisJICAgIG9wdGlvbiA9ICc/JzsKKwkgICAgYnJlYWs7CisJICB9CisJCisJd2hpbGUoMSkKKwkgIHsKKwkgICAgZm9yIChjcCA9IGFyZzsgKmNwOyBjcCsrKQorCSAgICAgIGlmICghKCpjcCA9PSAnICcgfHwgKmNwID09ICcuJyB8fCAgKCpjcCA+PScwJyAmJiAqY3AgPD0gJzknKSkpCisJCWJyZWFrOworCSAgICAKKwkgICAgaWYgKCpjcCAhPSAnLCcgJiYgKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJICAgICAgeworCQlpZiAoc3Ryc3RyKGFyZywgIm5ldDoiKSA9PSBhcmcpCisJCSAgeworCQkgICAgc3RydWN0IGRoY3BfbmV0aWQgKnR0ID0gb3B0X21hbGxvYyhzaXplb2YgKHN0cnVjdCBkaGNwX25ldGlkKSk7CisJCSAgICB0dC0+bmV0ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcrNCk7CisJCSAgICB0dC0+bmV4dCA9IG5ldy0+ZmlsdGVyOworCQkgICAgbmV3LT5maWx0ZXIgPSB0dDsKKwkJICB9CisJCWVsc2UKKwkJICB7CisJCSAgICBpZiAobmV3LT5uZXRpZC5uZXQpCisJCSAgICAgIHByb2JsZW0gPSBfKCJvbmx5IG9uZSBuZXRpZCB0YWcgYWxsb3dlZCIpOworCQkgICAgZWxzZQorCQkgICAgICBuZXctPm5ldGlkLm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkJICB9CisJCWFyZyA9IGNvbW1hOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJYVswXSA9IGFyZzsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgfQorCQorCWZvciAoayA9IDE7IGsgPCA1OyBrKyspCisJICBpZiAoIShhW2tdID0gc3BsaXQoYVtrLTFdKSkpCisJICAgIGJyZWFrOworCQorCWlmICgoayA8IDIpIHx8ICgobmV3LT5zdGFydC5zX2FkZHIgPSBpbmV0X2FkZHIoYVswXSkpID09IChpbl9hZGRyX3QpLTEpKQorCSAgb3B0aW9uID0gJz8nOworCWVsc2UgaWYgKHN0cmNtcChhWzFdLCAic3RhdGljIikgPT0gMCkKKwkgIHsKKwkgICAgbmV3LT5lbmQgPSBuZXctPnN0YXJ0OworCSAgICBuZXctPmZsYWdzIHw9IENPTlRFWFRfU1RBVElDOworCSAgfQorCWVsc2UgaWYgKHN0cmNtcChhWzFdLCAicHJveHkiKSA9PSAwKQorCSAgeworCSAgICBuZXctPmVuZCA9IG5ldy0+c3RhcnQ7CisJICAgIG5ldy0+ZmxhZ3MgfD0gQ09OVEVYVF9QUk9YWTsKKwkgIH0KKwllbHNlIGlmICgobmV3LT5lbmQuc19hZGRyID0gaW5ldF9hZGRyKGFbMV0pKSA9PSAoaW5fYWRkcl90KS0xKQorCSAgb3B0aW9uID0gJz8nOworCQorCWlmIChudG9obChuZXctPnN0YXJ0LnNfYWRkcikgPiBudG9obChuZXctPmVuZC5zX2FkZHIpKQorCSAgeworCSAgICBzdHJ1Y3QgaW5fYWRkciB0bXAgPSBuZXctPnN0YXJ0OworCSAgICBuZXctPnN0YXJ0ID0gbmV3LT5lbmQ7CisJICAgIG5ldy0+ZW5kID0gdG1wOworCSAgfQorCQorCWlmIChvcHRpb24gIT0gJz8nICYmIGsgPj0gMyAmJiBzdHJjaHIoYVsyXSwgJy4nKSAmJiAgCisJICAgICgobmV3LT5uZXRtYXNrLnNfYWRkciA9IGluZXRfYWRkcihhWzJdKSkgIT0gKGluX2FkZHJfdCktMSkpCisJICB7CisJICAgIG5ldy0+ZmxhZ3MgfD0gQ09OVEVYVF9ORVRNQVNLOworCSAgICBsZWFzZXBvcyA9IDM7CisJICAgIGlmICghaXNfc2FtZV9uZXQobmV3LT5zdGFydCwgbmV3LT5lbmQsIG5ldy0+bmV0bWFzaykpCisJICAgICAgcHJvYmxlbSA9IF8oImluY29uc2lzdGVudCBESENQIHJhbmdlIik7CisJICB9CisJZGFlbW9uLT5kaGNwID0gbmV3OworCQorCWlmIChrID49IDQgJiYgc3RyY2hyKGFbM10sICcuJykgJiYgIAorCSAgICAoKG5ldy0+YnJvYWRjYXN0LnNfYWRkciA9IGluZXRfYWRkcihhWzNdKSkgIT0gKGluX2FkZHJfdCktMSkpCisJICB7CisJICAgIG5ldy0+ZmxhZ3MgfD0gQ09OVEVYVF9CUkRDQVNUOworCSAgICBsZWFzZXBvcyA9IDQ7CisJICB9CisJCisJaWYgKGsgPj0gbGVhc2Vwb3MrMSkKKwkgIHsKKwkgICAgaWYgKHN0cmNtcChhW2xlYXNlcG9zXSwgImluZmluaXRlIikgPT0gMCkKKwkgICAgICBuZXctPmxlYXNlX3RpbWUgPSAweGZmZmZmZmZmOworCSAgICBlbHNlCisJICAgICAgeworCQlpbnQgZmFjID0gMTsKKwkJaWYgKHN0cmxlbihhW2xlYXNlcG9zXSkgPiAwKQorCQkgIHsKKwkJICAgIHN3aXRjaCAoYVtsZWFzZXBvc11bc3RybGVuKGFbbGVhc2Vwb3NdKSAtIDFdKQorCQkgICAgICB7CisJCSAgICAgIGNhc2UgJ2QnOgorCQkgICAgICBjYXNlICdEJzoKKwkJCWZhYyAqPSAyNDsKKwkJCS8qIGZhbGwgdGhvdWdoICovCisJCSAgICAgIGNhc2UgJ2gnOgorCQkgICAgICBjYXNlICdIJzoKKwkJCWZhYyAqPSA2MDsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQkgICAgICBjYXNlICdtJzoKKwkJICAgICAgY2FzZSAnTSc6CisJCQlmYWMgKj0gNjA7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJICAgICAgY2FzZSAncyc6CisJCSAgICAgIGNhc2UgJ1MnOgorCQkJYVtsZWFzZXBvc11bc3RybGVuKGFbbGVhc2Vwb3NdKSAtIDFdID0gMDsKKwkJICAgICAgfQorCQkgICAgCisJCSAgICBuZXctPmxlYXNlX3RpbWUgPSBhdG9pKGFbbGVhc2Vwb3NdKSAqIGZhYzsKKwkJICAgIC8qIExlYXNlcyBvZiBhIG1pbnV0ZSBvciBsZXNzIGNvbmZ1c2UKKwkJICAgICAgIHNvbWUgY2xpZW50cywgbm90YWJseSBBcHBsZSdzICovCisJCSAgICBpZiAobmV3LT5sZWFzZV90aW1lIDwgMTIwKQorCQkgICAgICBuZXctPmxlYXNlX3RpbWUgPSAxMjA7CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKwlicmVhazsKKyAgICAgIH0KKworICAgIGNhc2UgTE9QVF9CQU5LOgorICAgIGNhc2UgJ0cnOiAgLyogLS1kaGNwLWhvc3QgKi8KKyAgICAgIHsKKwlpbnQgaiwgayA9IDA7CisJY2hhciAqYVs2XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworCXN0cnVjdCBkaGNwX2NvbmZpZyAqbmV3OworCXN0cnVjdCBpbl9hZGRyIGluOworCQorCW5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX2NvbmZpZykpOworCQorCW5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9jb25mOworCW5ldy0+ZmxhZ3MgPSAob3B0aW9uID09IExPUFRfQkFOSykgPyBDT05GSUdfQkFOSyA6IDA7CisJbmV3LT5od2FkZHIgPSBOVUxMOworCQorCWlmICgoYVswXSA9IGFyZykpCisJICBmb3IgKGsgPSAxOyBrIDwgNjsgaysrKQorCSAgICBpZiAoIShhW2tdID0gc3BsaXQoYVtrLTFdKSkpCisJICAgICAgYnJlYWs7CisJCisJZm9yIChqID0gMDsgaiA8IGs7IGorKykKKwkgIGlmIChzdHJjaHIoYVtqXSwgJzonKSkgLyogZXRoZXJuZXQgYWRkcmVzcywgbmV0aWQgb3IgYmluYXJ5IENMSUQgKi8KKwkgICAgeworCSAgICAgIGNoYXIgKmFyZyA9IGFbal07CisJICAgICAgCisJICAgICAgaWYgKChhcmdbMF0gPT0gJ2knIHx8IGFyZ1swXSA9PSAnSScpICYmCisJCSAgKGFyZ1sxXSA9PSAnZCcgfHwgYXJnWzFdID09ICdEJykgJiYKKwkJICBhcmdbMl0gPT0gJzonKQorCQl7CisJCSAgaWYgKGFyZ1szXSA9PSAnKicpCisJCSAgICBuZXctPmZsYWdzIHw9IENPTkZJR19OT0NMSUQ7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBpbnQgbGVuOworCQkgICAgICBhcmcgKz0gMzsgLyogZHVtcCBpZDogKi8KKwkJICAgICAgaWYgKHN0cmNocihhcmcsICc6JykpCisJCQlsZW4gPSBwYXJzZV9oZXgoYXJnLCAodW5zaWduZWQgY2hhciAqKWFyZywgLTEsIE5VTEwsIE5VTEwpOworCQkgICAgICBlbHNlCisJCQl7CisJCQkgIHVuaGlkZV9tZXRhcyhhcmcpOworCQkJICBsZW4gPSAoaW50KSBzdHJsZW4oYXJnKTsKKwkJCX0KKworCQkgICAgICBpZiAoKG5ldy0+Y2xpZCA9IG9wdF9tYWxsb2MobGVuKSkpCisJCQl7CisJCQkgIG5ldy0+ZmxhZ3MgfD0gQ09ORklHX0NMSUQ7CisJCQkgIG5ldy0+Y2xpZF9sZW4gPSBsZW47CisJCQkgIG1lbWNweShuZXctPmNsaWQsIGFyZywgbGVuKTsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UgaWYgKHN0cnN0cihhcmcsICJuZXQ6IikgPT0gYXJnKQorCQl7CisJCSAgaW50IGxlbiA9IHN0cmxlbihhcmcgKyA0KSArIDE7CisJCSAgaWYgKChuZXctPm5ldGlkLm5ldCA9IG9wdF9tYWxsb2MobGVuKSkpCisJCSAgICB7CisJCSAgICAgIG5ldy0+ZmxhZ3MgfD0gQ09ORklHX05FVElEOworCQkgICAgICBzdHJjcHkobmV3LT5uZXRpZC5uZXQsIGFyZys0KTsKKwkJICAgICAgdW5oaWRlX21ldGFzKG5ldy0+bmV0aWQubmV0KTsKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UgCisJCXsKKwkJICBzdHJ1Y3QgaHdhZGRyX2NvbmZpZyAqbmV3aHcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaHdhZGRyX2NvbmZpZykpOworCQkgIG5ld2h3LT5uZXh0ID0gbmV3LT5od2FkZHI7CisJCSAgbmV3LT5od2FkZHIgPSBuZXdodzsKKwkJICBuZXdody0+aHdhZGRyX2xlbiA9IHBhcnNlX2hleChhW2pdLCBuZXdody0+aHdhZGRyLCBESENQX0NIQUREUl9NQVgsIAorCQkJCQkJJm5ld2h3LT53aWxkY2FyZF9tYXNrLCAmbmV3aHctPmh3YWRkcl90eXBlKTsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChzdHJjaHIoYVtqXSwgJy4nKSAmJiAoaW4uc19hZGRyID0gaW5ldF9hZGRyKGFbal0pKSAhPSAoaW5fYWRkcl90KS0xKQorCSAgICB7CisJICAgICAgbmV3LT5hZGRyID0gaW47CisJICAgICAgbmV3LT5mbGFncyB8PSBDT05GSUdfQUREUjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgY2hhciAqY3AsICpsYXN0cCA9IE5VTEwsIGxhc3QgPSAwOworCSAgICAgIGludCBmYWMgPSAxOworCSAgICAgIAorCSAgICAgIGlmIChzdHJsZW4oYVtqXSkgPiAxKQorCQl7CisJCSAgbGFzdHAgPSBhW2pdICsgc3RybGVuKGFbal0pIC0gMTsKKwkJICBsYXN0ID0gKmxhc3RwOworCQkgIHN3aXRjaCAobGFzdCkKKwkJICAgIHsKKwkJICAgIGNhc2UgJ2QnOgorCQkgICAgY2FzZSAnRCc6CisJCSAgICAgIGZhYyAqPSAyNDsKKwkJICAgICAgLyogZmFsbCB0aHJvdWdoICovCisJCSAgICBjYXNlICdoJzoKKwkJICAgIGNhc2UgJ0gnOgorCQkgICAgICBmYWMgKj0gNjA7CisJCSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCQkgICAgY2FzZSAnbSc6CisJCSAgICBjYXNlICdNJzoKKwkJICAgICAgZmFjICo9IDYwOworCQkgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKwkJICAgIGNhc2UgJ3MnOgorCQkgICAgY2FzZSAnUyc6CisJCSAgICAgICpsYXN0cCA9IDA7CisJCSAgICB9CisJCX0KKwkgICAgICAKKwkgICAgICBmb3IgKGNwID0gYVtqXTsgKmNwOyBjcCsrKQorCQlpZiAoIWlzZGlnaXQoKGludCkqY3ApICYmICpjcCAhPSAnICcpCisJCSAgYnJlYWs7CisJICAgICAgCisJICAgICAgaWYgKCpjcCkKKwkJeworCQkgIGlmIChsYXN0cCkKKwkJICAgICpsYXN0cCA9IGxhc3Q7CisJCSAgaWYgKHN0cmNtcChhW2pdLCAiaW5maW5pdGUiKSA9PSAwKQorCQkgICAgeworCQkgICAgICBuZXctPmxlYXNlX3RpbWUgPSAweGZmZmZmZmZmOworCQkgICAgICBuZXctPmZsYWdzIHw9IENPTkZJR19USU1FOworCQkgICAgfQorCQkgIGVsc2UgaWYgKHN0cmNtcChhW2pdLCAiaWdub3JlIikgPT0gMCkKKwkJICAgIG5ldy0+ZmxhZ3MgfD0gQ09ORklHX0RJU0FCTEU7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBpZiAoIShuZXctPmhvc3RuYW1lID0gY2Fub25pY2FsaXNlX29wdChhW2pdKSkgfHwKKwkJCSAgIWxlZ2FsX2hvc3RuYW1lKG5ldy0+aG9zdG5hbWUpKQorCQkJcHJvYmxlbSA9IF8oImJhZCBESENQIGhvc3QgbmFtZSIpOworCQkgICAgICBlbHNlCisJCQluZXctPmZsYWdzIHw9IENPTkZJR19OQU1FOworCQkgICAgICBuZXctPmRvbWFpbiA9IE5VTEw7CQkJCisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBuZXctPmxlYXNlX3RpbWUgPSBhdG9pKGFbal0pICogZmFjOyAKKwkJICAvKiBMZWFzZXMgb2YgYSBtaW51dGUgb3IgbGVzcyBjb25mdXNlCisJCSAgICAgc29tZSBjbGllbnRzLCBub3RhYmx5IEFwcGxlJ3MgKi8KKwkJICBpZiAobmV3LT5sZWFzZV90aW1lIDwgMTIwKQorCQkgICAgbmV3LT5sZWFzZV90aW1lID0gMTIwOworCQkgIG5ldy0+ZmxhZ3MgfD0gQ09ORklHX1RJTUU7CisJCX0KKwkgICAgfQorCQorCWRhZW1vbi0+ZGhjcF9jb25mID0gbmV3OworCWJyZWFrOworICAgICAgfQorICAgICAgCisgICAgY2FzZSAnTyc6ICAgICAgICAgICAvKiAtLWRoY3Atb3B0aW9uICovCisgICAgY2FzZSBMT1BUX0ZPUkNFOiAgICAvKiAtLWRoY3Atb3B0aW9uLWZvcmNlICovCisgICAgY2FzZSBMT1BUX09QVFM6CisgICAgY2FzZSBMT1BUX01BVENIOiAgICAvKiAtLWRoY3AtbWF0Y2ggKi8KKyAgICAgIHByb2JsZW0gPSBwYXJzZV9kaGNwX29wdChhcmcsIAorCQkJICAgICAgIG9wdGlvbiA9PSBMT1BUX0ZPUkNFID8gREhPUFRfRk9SQ0UgOiAKKwkJCSAgICAgICAob3B0aW9uID09IExPUFRfTUFUQ0ggPyBESE9QVF9NQVRDSCA6CisJCQkgICAgICAgKG9wdGlvbiA9PSBMT1BUX09QVFMgPyBESE9QVF9CQU5LIDogMCkpKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSAnTSc6IC8qIC0tZGhjcC1ib290ICovCisgICAgICB7CisJc3RydWN0IGRoY3BfbmV0aWQgKmlkID0gTlVMTDsKKwl3aGlsZSAoYXJnICYmIHN0cnN0cihhcmcsICJuZXQ6IikgPT0gYXJnKQorCSAgeworCSAgICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV3aWQgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9uZXRpZCkpOworCSAgICBuZXdpZC0+bmV4dCA9IGlkOworCSAgICBpZCA9IG5ld2lkOworCSAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICAgIG5ld2lkLT5uZXQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZys0KTsKKwkgICAgYXJnID0gY29tbWE7CisJICB9OworCQorCWlmICghYXJnKQorCSAgb3B0aW9uID0gJz8nOworCWVsc2UgCisJICB7CisJICAgIGNoYXIgKmRoY3BfZmlsZSwgKmRoY3Bfc25hbWUgPSBOVUxMOworCSAgICBzdHJ1Y3QgaW5fYWRkciBkaGNwX25leHRfc2VydmVyOworCSAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICAgIGRoY3BfZmlsZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkgICAgZGhjcF9uZXh0X3NlcnZlci5zX2FkZHIgPSAwOworCSAgICBpZiAoY29tbWEpCisJICAgICAgeworCQlhcmcgPSBjb21tYTsKKwkJY29tbWEgPSBzcGxpdChhcmcpOworCQlkaGNwX3NuYW1lID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCQlpZiAoY29tbWEpCisJCSAgeworCQkgICAgdW5oaWRlX21ldGFzKGNvbW1hKTsKKwkJICAgIGlmICgoZGhjcF9uZXh0X3NlcnZlci5zX2FkZHIgPSBpbmV0X2FkZHIoY29tbWEpKSA9PSAoaW5fYWRkcl90KS0xKQorCQkgICAgICBvcHRpb24gPSAnPyc7CisJCSAgfQorCSAgICAgIH0KKwkgICAgaWYgKG9wdGlvbiAhPSAnPycpCisJICAgICAgeworCQlzdHJ1Y3QgZGhjcF9ib290ICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9ib290KSk7CisJCW5ldy0+ZmlsZSA9IGRoY3BfZmlsZTsKKwkJbmV3LT5zbmFtZSA9IGRoY3Bfc25hbWU7CisJCW5ldy0+bmV4dF9zZXJ2ZXIgPSBkaGNwX25leHRfc2VydmVyOworCQluZXctPm5ldGlkID0gaWQ7CisJCW5ldy0+bmV4dCA9IGRhZW1vbi0+Ym9vdF9jb25maWc7CisJCWRhZW1vbi0+Ym9vdF9jb25maWcgPSBuZXc7CisJICAgICAgfQorCSAgfQorCQorCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBMT1BUX1BYRV9QUk9NVDogIC8qIC0tcHhlLXByb21wdCAqLworICAgICAgIHsKKwkgc3RydWN0IGRoY3Bfb3B0ICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9vcHQpKTsKKwkgaW50IHRpbWVvdXQ7CisKKwkgbmV3LT5uZXRpZCA9IE5VTEw7CisJIG5ldy0+b3B0ID0gMTA7IC8qIFBYRV9NRU5VX1BST01QVCAqLworCisJIHdoaWxlIChhcmcgJiYgc3Ryc3RyKGFyZywgIm5ldDoiKSA9PSBhcmcpCisJICAgeworCSAgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5uID0gb3B0X21hbGxvYyhzaXplb2YgKHN0cnVjdCBkaGNwX25ldGlkKSk7CisJICAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICAgICBubi0+bmV4dCA9IG5ldy0+bmV0aWQ7CisJICAgICBuZXctPm5ldGlkID0gbm47CisJICAgICBubi0+bmV0ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcrNCk7CisJICAgICBhcmcgPSBjb21tYTsKKwkgICB9CisJIAorCSBpZiAoIWFyZykKKwkgICBvcHRpb24gPSAnPyc7CisJIGVsc2UKKwkgICB7CisJICAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICAgICB1bmhpZGVfbWV0YXMoYXJnKTsKKwkgICAgIG5ldy0+bGVuID0gc3RybGVuKGFyZykgKyAxOworCSAgICAgbmV3LT52YWwgPSBvcHRfbWFsbG9jKG5ldy0+bGVuKTsKKwkgICAgIG1lbWNweShuZXctPnZhbCArIDEsIGFyZywgbmV3LT5sZW4gLSAxKTsKKwkgICAgIAorCSAgICAgbmV3LT51LnZlbmRvcl9jbGFzcyA9ICh1bnNpZ25lZCBjaGFyICopIlBYRUNsaWVudCI7CisJICAgICBuZXctPmZsYWdzID0gREhPUFRfVkVORE9SOworCSAgICAgCisJICAgICBpZiAoY29tbWEgJiYgYXRvaV9jaGVjayhjb21tYSwgJnRpbWVvdXQpKQorCSAgICAgICAqKG5ldy0+dmFsKSA9IHRpbWVvdXQ7CisJICAgICBlbHNlCisJICAgICAgICoobmV3LT52YWwpID0gMjU1OworCisJICAgICBuZXctPm5leHQgPSBkYWVtb24tPmRoY3Bfb3B0czsKKwkgICAgIGRhZW1vbi0+ZGhjcF9vcHRzID0gbmV3OworCSAgICAgZGFlbW9uLT5lbmFibGVfcHhlID0gMTsKKwkgICB9CisJIAorCSBicmVhazsKKyAgICAgICB9CisgICAgICAgCisgICAgY2FzZSBMT1BUX1BYRV9TRVJWOiAgLyogLS1weGUtc2VydmljZSAqLworICAgICAgIHsKKwkgc3RydWN0IHB4ZV9zZXJ2aWNlICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHhlX3NlcnZpY2UpKTsKKwkgY2hhciAqQ1NBW10gPSB7ICJ4ODZQQyIsICJQQzk4IiwgIklBNjRfRUZJIiwgIkFscGhhIiwgIkFyY194ODYiLCAiSW50ZWxfTGVhbl9DbGllbnQiLAorCQkJICJJQTMyX0VGSSIsICJCQ19FRkkiLCAiWHNjYWxlX0VGSSIsICJ4ODYtNjRfRUZJIiwgTlVMTCB9OyAgCisJIHN0YXRpYyBpbnQgYm9vdHR5cGUgPSAzMjc2ODsKKwkgCisJIG5ldy0+bmV0aWQgPSBOVUxMOworCSBuZXctPnNlcnZlci5zX2FkZHIgPSAwOworCisJIHdoaWxlIChhcmcgJiYgc3Ryc3RyKGFyZywgIm5ldDoiKSA9PSBhcmcpCisJICAgeworCSAgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5uID0gb3B0X21hbGxvYyhzaXplb2YgKHN0cnVjdCBkaGNwX25ldGlkKSk7CisJICAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICAgICBubi0+bmV4dCA9IG5ldy0+bmV0aWQ7CisJICAgICBuZXctPm5ldGlkID0gbm47CisJICAgICBubi0+bmV0ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcrNCk7CisJICAgICBhcmcgPSBjb21tYTsKKwkgICB9CisgICAgICAgCisJIGlmIChhcmcgJiYgKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJICAgeworCSAgICAgZm9yIChpID0gMDsgQ1NBW2ldOyBpKyspCisJICAgICAgIGlmIChzdHJjYXNlY21wKENTQVtpXSwgYXJnKSA9PSAwKQorCQkgYnJlYWs7CisJICAgICAKKwkgICAgIGlmIChDU0FbaV0gfHwgYXRvaV9jaGVjayhhcmcsICZpKSkKKwkgICAgICAgeworCQkgYXJnID0gY29tbWE7CisJCSBjb21tYSA9IHNwbGl0KGFyZyk7CisJCSAKKwkJIG5ldy0+Q1NBID0gaTsKKwkJIG5ldy0+bWVudSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkJIAorCQkgaWYgKGNvbW1hKQorCQkgICB7CisJCSAgICAgYXJnID0gY29tbWE7CisJCSAgICAgY29tbWEgPSBzcGxpdChhcmcpOworCQkgICAgIGlmIChhdG9pX2NoZWNrKGFyZywgJmkpKQorCQkgICAgICAgeworCQkJIG5ldy0+dHlwZSA9IGk7CisJCQkgbmV3LT5iYXNlbmFtZSA9IE5VTEw7CisJCSAgICAgICB9CisJCSAgICAgZWxzZQorCQkgICAgICAgeworCQkJIG5ldy0+dHlwZSA9IGJvb3R0eXBlKys7CisJCQkgbmV3LT5iYXNlbmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkJICAgICAgIH0KKwkJICAgICAKKwkJICAgICBpZiAoY29tbWEgJiYgKG5ldy0+c2VydmVyLnNfYWRkciA9IGluZXRfYWRkcihjb21tYSkpID09IChpbl9hZGRyX3QpLTEpCisJCSAgICAgICBvcHRpb24gPSAnPyc7CisJCSAgICAgCisJCSAgICAgLyogT3JkZXIgbWF0dGVycyAqLworCQkgICAgIG5ldy0+bmV4dCA9IE5VTEw7CisJCSAgICAgaWYgKCFkYWVtb24tPnB4ZV9zZXJ2aWNlcykKKwkJICAgICAgIGRhZW1vbi0+cHhlX3NlcnZpY2VzID0gbmV3OyAKKwkJICAgICBlbHNlCisJCSAgICAgICB7CisJCQkgc3RydWN0IHB4ZV9zZXJ2aWNlICpzOworCQkJIGZvciAocyA9IGRhZW1vbi0+cHhlX3NlcnZpY2VzOyBzLT5uZXh0OyBzID0gcy0+bmV4dCk7CisJCQkgcy0+bmV4dCA9IG5ldzsKKwkJICAgICAgIH0KKwkJICAgICAKKwkJICAgICBkYWVtb24tPmVuYWJsZV9weGUgPSAxOworCQkgICAgIGJyZWFrOworCQkgICB9CisJICAgICAgIH0KKwkgICB9CisJIAorCSBvcHRpb24gPSAnPyc7CisJIGJyZWFrOworICAgICAgIH0KKwkgCisgICAgY2FzZSAnNCc6ICAvKiAtLWRoY3AtbWFjICovCisgICAgICB7CisJaWYgKCEoY29tbWEgPSBzcGxpdChhcmcpKSkKKwkgIG9wdGlvbiA9ICc/JzsKKwllbHNlCisJICB7CisJICAgIHN0cnVjdCBkaGNwX21hYyAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3BfbWFjKSk7CisJICAgIGlmIChzdHJzdHIoYXJnLCAibmV0OiIpID09IGFyZykKKwkgICAgICBuZXctPm5ldGlkLm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKzQpOworCSAgICBlbHNlCisJICAgICAgbmV3LT5uZXRpZC5uZXQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJICAgIHVuaGlkZV9tZXRhcyhjb21tYSk7CisJICAgIG5ldy0+aHdhZGRyX2xlbiA9IHBhcnNlX2hleChjb21tYSwgbmV3LT5od2FkZHIsIERIQ1BfQ0hBRERSX01BWCwgJm5ldy0+bWFzaywgJm5ldy0+aHdhZGRyX3R5cGUpOworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmRoY3BfbWFjczsKKwkgICAgZGFlbW9uLT5kaGNwX21hY3MgPSBuZXc7CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgJ1UnOiAgICAgICAgICAgLyogLS1kaGNwLXZlbmRvcmNsYXNzICovCisgICAgY2FzZSAnaic6ICAgICAgICAgICAvKiAtLWRoY3AtdXNlcmNsYXNzICovCisgICAgY2FzZSBMT1BUX0NJUkNVSVQ6ICAvKiAtLWRoY3AtY2lyY3VpdGlkICovCisgICAgY2FzZSBMT1BUX1JFTU9URTogICAvKiAtLWRoY3AtcmVtb3RlaWQgKi8KKyAgICBjYXNlIExPUFRfU1VCU0NSOiAgIC8qIC0tZGhjcC1zdWJzY3JpZCAqLworICAgICAgeworCWlmICghKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJICBvcHRpb24gPSAnPyc7CisJZWxzZQorCSAgeworCSAgICBjaGFyICpwOworCSAgICBpbnQgZGlnID0gMDsKKwkgICAgc3RydWN0IGRoY3BfdmVuZG9yICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF92ZW5kb3IpKTsKKwkgICAgaWYgKHN0cnN0cihhcmcsICJuZXQ6IikgPT0gYXJnKQorCSAgICAgIG5ldy0+bmV0aWQubmV0ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcrNCk7CisJICAgIGVsc2UKKwkgICAgICBuZXctPm5ldGlkLm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkgICAgLyogY2hlY2sgZm9yIGhleCBzdHJpbmcgLSBtdXN0IGRpZ2l0cyBtYXkgaW5jbHVkZSA6IG11c3Qgbm90IGhhdmUgbm90aGluZyBlbHNlLCAKKwkgICAgICAgb25seSBhbGxvd2VkIGZvciBhZ2VudC1vcHRpb25zLiAqLworCSAgICBmb3IgKHAgPSBjb21tYTsgKnA7IHArKykKKwkgICAgICBpZiAoaXN4ZGlnaXQoKGludCkqcCkpCisJCWRpZyA9IDE7CisJICAgICAgZWxzZSBpZiAoKnAgIT0gJzonKQorCQlicmVhazsKKwkgICAgdW5oaWRlX21ldGFzKGNvbW1hKTsKKwkgICAgaWYgKG9wdGlvbiA9PSAnVScgfHwgb3B0aW9uID09ICdqJyB8fCAqcCB8fCAhZGlnKQorCSAgICAgIHsKKwkJbmV3LT5sZW4gPSBzdHJsZW4oY29tbWEpOyAgCisJCW5ldy0+ZGF0YSA9IG9wdF9tYWxsb2MobmV3LT5sZW4pOworCQltZW1jcHkobmV3LT5kYXRhLCBjb21tYSwgbmV3LT5sZW4pOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJbmV3LT5sZW4gPSBwYXJzZV9oZXgoY29tbWEsICh1bnNpZ25lZCBjaGFyICopY29tbWEsIHN0cmxlbihjb21tYSksIE5VTEwsIE5VTEwpOworCQluZXctPmRhdGEgPSBvcHRfbWFsbG9jKG5ldy0+bGVuKTsKKwkJbWVtY3B5KG5ldy0+ZGF0YSwgY29tbWEsIG5ldy0+bGVuKTsKKwkgICAgICB9CisKKwkgICAgc3dpdGNoIChvcHRpb24pCisJICAgICAgeworCSAgICAgIGNhc2UgJ2onOgorCQluZXctPm1hdGNoX3R5cGUgPSBNQVRDSF9VU0VSOworCQlicmVhazsKKwkgICAgICBjYXNlICdVJzoKKwkJbmV3LT5tYXRjaF90eXBlID0gTUFUQ0hfVkVORE9SOworCQlicmVhazsgCisJICAgICAgY2FzZSBMT1BUX0NJUkNVSVQ6CisJCW5ldy0+bWF0Y2hfdHlwZSA9IE1BVENIX0NJUkNVSVQ7CisJCWJyZWFrOworCSAgICAgIGNhc2UgTE9QVF9SRU1PVEU6CisJCW5ldy0+bWF0Y2hfdHlwZSA9IE1BVENIX1JFTU9URTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBMT1BUX1NVQlNDUjoKKwkJbmV3LT5tYXRjaF90eXBlID0gTUFUQ0hfU1VCU0NSSUJFUjsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmRoY3BfdmVuZG9yczsKKwkgICAgZGFlbW9uLT5kaGNwX3ZlbmRvcnMgPSBuZXc7CisJICB9CisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICBjYXNlIExPUFRfQUxUUE9SVDogICAvKiAtLWRoY3AtYWx0ZXJuYXRlLXBvcnQgKi8KKyAgICAgIGlmICghYXJnKQorCXsKKwkgIGRhZW1vbi0+ZGhjcF9zZXJ2ZXJfcG9ydCA9IERIQ1BfU0VSVkVSX0FMVFBPUlQ7CisJICBkYWVtb24tPmRoY3BfY2xpZW50X3BvcnQgPSBESENQX0NMSUVOVF9BTFRQT1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICBpZiAoIWF0b2lfY2hlY2sxNihhcmcsICZkYWVtb24tPmRoY3Bfc2VydmVyX3BvcnQpIHx8IAorCSAgICAgIChjb21tYSAmJiAhYXRvaV9jaGVjazE2KGNvbW1hLCAmZGFlbW9uLT5kaGNwX2NsaWVudF9wb3J0KSkpCisJICAgIHByb2JsZW0gPSBfKCJpbnZhbGlkIHBvcnQgbnVtYmVyIik7CisJICBpZiAoIWNvbW1hKQorCSAgICBkYWVtb24tPmRoY3BfY2xpZW50X3BvcnQgPSBkYWVtb24tPmRoY3Bfc2VydmVyX3BvcnQrMTsgCisJfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdKJzogICAgICAgICAgICAvKiAtLWRoY3AtaWdub3JlICovCisgICAgY2FzZSBMT1BUX05PX05BTUVTOiAgLyogLS1kaGNwLWlnbm9yZS1uYW1lcyAqLworICAgIGNhc2UgTE9QVF9CUk9BRENBU1Q6IC8qIC0tZGhjcC1icm9hZGNhc3QgKi8KKyAgICBjYXNlICczJzogICAgICAgICAgICAvKiAtLWJvb3RwLWR5bmFtaWMgKi8gCisgICAgICB7CisJc3RydWN0IGRoY3BfbmV0aWRfbGlzdCAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3BfbmV0aWRfbGlzdCkpOworCXN0cnVjdCBkaGNwX25ldGlkICpsaXN0ID0gTlVMTDsKKwlpZiAob3B0aW9uID09ICdKJykKKwkgIHsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5kaGNwX2lnbm9yZTsKKwkgICAgZGFlbW9uLT5kaGNwX2lnbm9yZSA9IG5ldzsKKwkgIH0KKwllbHNlIGlmIChvcHRpb24gPT0gTE9QVF9CUk9BRENBU1QpCisJICB7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+Zm9yY2VfYnJvYWRjYXN0OworCSAgICBkYWVtb24tPmZvcmNlX2Jyb2FkY2FzdCA9IG5ldzsKKwkgIH0KKwllbHNlIGlmIChvcHRpb24gPT0gJzMnKQorCSAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmJvb3RwX2R5bmFtaWM7CisJICAgIGRhZW1vbi0+Ym9vdHBfZHluYW1pYyA9IG5ldzsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9pZ25vcmVfbmFtZXM7CisJICAgIGRhZW1vbi0+ZGhjcF9pZ25vcmVfbmFtZXMgPSBuZXc7CisJICB9CisJCisJd2hpbGUgKGFyZykgeworCSAgc3RydWN0IGRoY3BfbmV0aWQgKm1lbWJlciA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX25ldGlkKSk7CisJICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICBtZW1iZXItPm5leHQgPSBsaXN0OworCSAgbGlzdCA9IG1lbWJlcjsKKwkgIGlmIChzdHJzdHIoYXJnLCAibmV0OiIpID09IGFyZykKKwkgICAgbWVtYmVyLT5uZXQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZys0KTsKKwkgIGVsc2UKKwkgICAgbWVtYmVyLT5uZXQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJICBhcmcgPSBjb21tYTsKKwl9CisJCisJbmV3LT5saXN0ID0gbGlzdDsKKwlicmVhazsKKyAgICAgIH0KKyNlbmRpZgorICAgICAgCisgICAgY2FzZSAnVic6ICAvKiAtLWFsaWFzICovCisgICAgICB7CisJY2hhciAqZGFzaCwgKmFbM10gPSB7IE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlpbnQgayA9IDA7CisJc3RydWN0IGRvY3RvciAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRvY3RvcikpOworCW5ldy0+bmV4dCA9IGRhZW1vbi0+ZG9jdG9yczsKKwlkYWVtb24tPmRvY3RvcnMgPSBuZXc7CisJbmV3LT5tYXNrLnNfYWRkciA9IDB4ZmZmZmZmZmY7CisJbmV3LT5lbmQuc19hZGRyID0gMDsKKworCWlmICgoYVswXSA9IGFyZykpCisJICBmb3IgKGsgPSAxOyBrIDwgMzsgaysrKQorCSAgICB7CisJICAgICAgaWYgKCEoYVtrXSA9IHNwbGl0KGFbay0xXSkpKQorCQlicmVhazsKKwkgICAgICB1bmhpZGVfbWV0YXMoYVtrXSk7CisJICAgIH0KKwkKKwlkYXNoID0gc3BsaXRfY2hyKGFbMF0sICctJyk7CisKKwlpZiAoKGsgPCAyKSB8fCAKKwkgICAgKChuZXctPmluLnNfYWRkciA9IGluZXRfYWRkcihhWzBdKSkgPT0gKGluX2FkZHJfdCktMSkgfHwKKwkgICAgKChuZXctPm91dC5zX2FkZHIgPSBpbmV0X2FkZHIoYVsxXSkpID09IChpbl9hZGRyX3QpLTEpKQorCSAgb3B0aW9uID0gJz8nOworCQorCWlmIChrID09IDMpCisJICBuZXctPm1hc2suc19hZGRyID0gaW5ldF9hZGRyKGFbMl0pOworCQorCWlmIChkYXNoICYmIAorCSAgICAoKG5ldy0+ZW5kLnNfYWRkciA9IGluZXRfYWRkcihkYXNoKSkgPT0gKGluX2FkZHJfdCktMSB8fAorCSAgICAgIWlzX3NhbWVfbmV0KG5ldy0+aW4sIG5ldy0+ZW5kLCBuZXctPm1hc2spIHx8CisJICAgICBudG9obChuZXctPmluLnNfYWRkcikgPiBudG9obChuZXctPmVuZC5zX2FkZHIpKSkKKwkgIHByb2JsZW0gPSBfKCJpbnZhbGlkIGFsaWFzIHJhbmdlIik7CisJCisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICBjYXNlIExPUFRfSU5UTkFNRTogIC8qIC0taW50ZXJmYWNlLW5hbWUgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgKm5ldywgKip1cDsKKwljaGFyICpkb21haW4gPSBOVUxMOworCisJY29tbWEgPSBzcGxpdChhcmcpOworCQorCWlmICghY29tbWEgfHwgIShkb21haW4gPSBjYW5vbmljYWxpc2Vfb3B0KGFyZykpKQorCSAgcHJvYmxlbSA9IF8oImJhZCBpbnRlcmZhY2UgbmFtZSIpOworCQorCW5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRlcmZhY2VfbmFtZSkpOworCW5ldy0+bmV4dCA9IE5VTEw7CisJLyogQWRkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QsIHNvIHRoYXQgZmlyc3QgbmFtZQorCSAgIG9mIGFuIGludGVyZmFjZSBpcyB1c2VkIGZvciBQVFIgbG9va3Vwcy4gKi8KKwlmb3IgKHVwID0gJmRhZW1vbi0+aW50X25hbWVzOyAqdXA7IHVwID0gJigoKnVwKS0+bmV4dCkpOworCSp1cCA9IG5ldzsKKwluZXctPm5hbWUgPSBkb21haW47CisJbmV3LT5pbnRyID0gb3B0X3N0cmluZ19hbGxvYyhjb21tYSk7CisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICBjYXNlIExPUFRfQ05BTUU6IC8qIC0tY25hbWUgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgY25hbWUgKm5ldzsKKwkKKwlpZiAoIShjb21tYSA9IHNwbGl0KGFyZykpKQorCSAgb3B0aW9uID0gJz8nOworCWVsc2UKKwkgIHsKKwkgICAgY2hhciAqYWxpYXMgPSBjYW5vbmljYWxpc2Vfb3B0KGFyZyk7CisJICAgIGNoYXIgKnRhcmdldCA9IGNhbm9uaWNhbGlzZV9vcHQoY29tbWEpOworCSAgICAKKwkgICAgaWYgKCFhbGlhcyB8fCAhdGFyZ2V0KQorCSAgICAgIHByb2JsZW0gPSBfKCJiYWQgQ05BTUUiKTsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJZm9yIChuZXcgPSBkYWVtb24tPmNuYW1lczsgbmV3OyBuZXcgPSBuZXctPm5leHQpCisJCSAgaWYgKGhvc3RuYW1lX2lzZXF1YWwobmV3LT5hbGlhcywgYXJnKSkKKwkJICAgIHByb2JsZW0gPSBfKCJkdXBsaWNhdGUgQ05BTUUiKTsKKwkJbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGNuYW1lKSk7CisJCW5ldy0+bmV4dCA9IGRhZW1vbi0+Y25hbWVzOworCQlkYWVtb24tPmNuYW1lcyA9IG5ldzsKKwkJbmV3LT5hbGlhcyA9IGFsaWFzOworCQluZXctPnRhcmdldCA9IHRhcmdldDsKKwkgICAgICB9CisJICB9CisJYnJlYWs7CisgICAgICB9CisKKyAgICBjYXNlIExPUFRfUFRSOiAgLyogLS1wdHItcmVjb3JkICovCisgICAgICB7CisJc3RydWN0IHB0cl9yZWNvcmQgKm5ldzsKKwljaGFyICpkb20sICp0YXJnZXQgPSBOVUxMOworCisJY29tbWEgPSBzcGxpdChhcmcpOworCQorCWlmICghKGRvbSA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkgfHwKKwkgICAgKGNvbW1hICYmICEodGFyZ2V0ID0gY2Fub25pY2FsaXNlX29wdChjb21tYSkpKSkKKwkgIHByb2JsZW0gPSBfKCJiYWQgUFRSIHJlY29yZCIpOworCWVsc2UKKwkgIHsKKwkgICAgbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHB0cl9yZWNvcmQpKTsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5wdHI7CisJICAgIGRhZW1vbi0+cHRyID0gbmV3OworCSAgICBuZXctPm5hbWUgPSBkb207CisJICAgIG5ldy0+cHRyID0gdGFyZ2V0OworCSAgfQorCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBMT1BUX05BUFRSOiAvKiAtLW5hcHRyLXJlY29yZCAqLworICAgICAgeworCWNoYXIgKmFbN10gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlpbnQgayA9IDA7CisJc3RydWN0IG5hcHRyICpuZXc7CisJaW50IG9yZGVyLCBwcmVmOworCWNoYXIgKm5hbWUsICpyZXBsYWNlID0gTlVMTDsKKworCWlmICgoYVswXSA9IGFyZykpCisJICBmb3IgKGsgPSAxOyBrIDwgNzsgaysrKQorCSAgICBpZiAoIShhW2tdID0gc3BsaXQoYVtrLTFdKSkpCisJICAgICAgYnJlYWs7CisJCisJCisJaWYgKGsgPCA2IHx8IAorCSAgICAhKG5hbWUgPSBjYW5vbmljYWxpc2Vfb3B0KGFbMF0pKSB8fAorCSAgICAhYXRvaV9jaGVjazE2KGFbMV0sICZvcmRlcikgfHwgCisJICAgICFhdG9pX2NoZWNrMTYoYVsyXSwgJnByZWYpIHx8CisJICAgIChrID09IDcgJiYgIShyZXBsYWNlID0gY2Fub25pY2FsaXNlX29wdChhWzZdKSkpKQorCSAgcHJvYmxlbSA9IF8oImJhZCBOQVBUUiByZWNvcmQiKTsKKwllbHNlCisJICB7CisJICAgIG5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBuYXB0cikpOworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPm5hcHRyOworCSAgICBkYWVtb24tPm5hcHRyID0gbmV3OworCSAgICBuZXctPm5hbWUgPSBuYW1lOworCSAgICBuZXctPmZsYWdzID0gb3B0X3N0cmluZ19hbGxvYyhhWzNdKTsKKwkgICAgbmV3LT5zZXJ2aWNlcyA9IG9wdF9zdHJpbmdfYWxsb2MoYVs0XSk7CisJICAgIG5ldy0+cmVnZXhwID0gb3B0X3N0cmluZ19hbGxvYyhhWzVdKTsKKwkgICAgbmV3LT5yZXBsYWNlID0gcmVwbGFjZTsKKwkgICAgbmV3LT5vcmRlciA9IG9yZGVyOworCSAgICBuZXctPnByZWYgPSBwcmVmOworCSAgfQorCWJyZWFrOworICAgICAgfQorICAgICAgIAorICAgIGNhc2UgJ1knOiAgLyogLS10eHQtcmVjb3JkICovCisgICAgICB7CisJc3RydWN0IHR4dF9yZWNvcmQgKm5ldzsKKwl1bnNpZ25lZCBjaGFyICpwLCAqcTsKKwkKKwlpZiAoKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJICBjb21tYS0tOworCQorCWdlbl9wcm9iID0gXygiVFhUIHJlY29yZCBzdHJpbmcgdG9vIGxvbmciKTsKKwkKKwlpZiAoKHEgPSAodW5zaWduZWQgY2hhciAqKWNvbW1hKSkKKwkgIHdoaWxlICgxKQorCSAgICB7CisJICAgICAgc2l6ZV90IGxlbjsKKwkgICAgICBpZiAoKHAgPSAodW5zaWduZWQgY2hhciAqKXN0cmNocigoY2hhciopcSsxLCAnLCcpKSkKKwkJeworCQkgIGlmICgobGVuID0gcCAtIHEgLSAxKSA+IDI1NSkKKwkJICAgIG9wdGlvbiA9ICc/JzsKKwkJICAqcSA9IGxlbjsKKwkJICBmb3IgKHEgPSBxKzE7IHEgPCBwOyBxKyspCisJCSAgICAqcSA9IHVuaGlkZV9tZXRhKCpxKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGlmICgobGVuID0gc3RybGVuKChjaGFyICopcSsxKSkgPiAyNTUpCisJCSAgICBvcHRpb24gPSAnPyc7CisJCSAgKnEgPSBsZW47CisJCSAgZm9yIChxID0gcSsxOyAqcTsgcSsrKQorCQkgICAgKnEgPSB1bmhpZGVfbWV0YSgqcSk7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgfQorCQorCW5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCB0eHRfcmVjb3JkKSk7CisJbmV3LT5uZXh0ID0gZGFlbW9uLT50eHQ7CisJZGFlbW9uLT50eHQgPSBuZXc7CisJbmV3LT5jbGFzcyA9IENfSU47CisJaWYgKGNvbW1hKQorCSAgeworCSAgICBuZXctPmxlbiA9IHEgLSAoKHVuc2lnbmVkIGNoYXIgKiljb21tYSk7CisJICAgIG5ldy0+dHh0ID0gb3B0X21hbGxvYyhuZXctPmxlbik7CisJICAgIG1lbWNweShuZXctPnR4dCwgY29tbWEsIG5ldy0+bGVuKTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIHN0YXRpYyBjaGFyIGVtcHR5W10gPSAiIjsKKwkgICAgbmV3LT5sZW4gPSAxOworCSAgICBuZXctPnR4dCA9IGVtcHR5OworCSAgfQorCQorCS8qIGVuc3VyZSBhcmcgaXMgdGVybWluYXRlZCAqLworCWlmIChjb21tYSkKKwkgICpjb21tYSA9IDA7CisKKwlpZiAoIShuZXctPm5hbWUgPSBjYW5vbmljYWxpc2Vfb3B0KGFyZykpKQorCSAgeworCSAgICBwcm9ibGVtID0gXygiYmFkIFRYVCByZWNvcmQiKTsKKwkgICAgYnJlYWs7CisJICB9CisKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgIGNhc2UgJ1cnOiAgLyogLS1zcnYtaG9zdCAqLworICAgICAgeworCWludCBwb3J0ID0gMSwgcHJpb3JpdHkgPSAwLCB3ZWlnaHQgPSAwOworCWNoYXIgKm5hbWUsICp0YXJnZXQgPSBOVUxMOworCXN0cnVjdCBteF9zcnZfcmVjb3JkICpuZXc7CisJCisJY29tbWEgPSBzcGxpdChhcmcpOworCQorCWlmICghKG5hbWUgPSBjYW5vbmljYWxpc2Vfb3B0KGFyZykpKQorCSAgcHJvYmxlbSA9IF8oImJhZCBTUlYgcmVjb3JkIik7CisJICAKKwlpZiAoY29tbWEpCisJICB7CisJICAgIGFyZyA9IGNvbW1hOworCSAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICAgIGlmICghKHRhcmdldCA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkKKykJICAgICAgcHJvYmxlbSA9IF8oImJhZCBTUlYgdGFyZ2V0Iik7CisJCQorCSAgICBpZiAoY29tbWEpCisJICAgICAgeworCQlhcmcgPSBjb21tYTsKKwkJY29tbWEgPSBzcGxpdChhcmcpOworCQlpZiAoIWF0b2lfY2hlY2sxNihhcmcsICZwb3J0KSkKKwkJICBwcm9ibGVtID0gXygiaW52YWxpZCBwb3J0IG51bWJlciIpOworCQkKKwkJaWYgKGNvbW1hKQorCQkgIHsKKwkJICAgIGFyZyA9IGNvbW1hOworCQkgICAgY29tbWEgPSBzcGxpdChhcmcpOworCQkgICAgaWYgKCFhdG9pX2NoZWNrMTYoYXJnLCAmcHJpb3JpdHkpKQorCQkgICAgICBwcm9ibGVtID0gXygiaW52YWxpZCBwcmlvcml0eSIpOworCQkJCisJCSAgICBpZiAoY29tbWEpCisJCSAgICAgIHsKKwkJCWFyZyA9IGNvbW1hOworCQkJY29tbWEgPSBzcGxpdChhcmcpOworCQkJaWYgKCFhdG9pX2NoZWNrMTYoYXJnLCAmd2VpZ2h0KSkKKwkJCSAgcHJvYmxlbSA9IF8oImludmFsaWQgd2VpZ2h0Iik7CisJCSAgICAgIH0KKwkJICB9CisJICAgICAgfQorCSAgfQorCQorCW5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBteF9zcnZfcmVjb3JkKSk7CisJbmV3LT5uZXh0ID0gZGFlbW9uLT5teG5hbWVzOworCWRhZW1vbi0+bXhuYW1lcyA9IG5ldzsKKwluZXctPmlzc3J2ID0gMTsKKwluZXctPm5hbWUgPSBuYW1lOworCW5ldy0+dGFyZ2V0ID0gdGFyZ2V0OworCW5ldy0+c3J2cG9ydCA9IHBvcnQ7CisJbmV3LT5wcmlvcml0eSA9IHByaW9yaXR5OworCW5ldy0+d2VpZ2h0ID0gd2VpZ2h0OworCWJyZWFrOworICAgICAgfQorICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBfKCJ1bnN1cHBvcnRlZCBvcHRpb24gKGNoZWNrIHRoYXQgZG5zbWFzcSB3YXMgY29tcGlsZWQgd2l0aCBESENQL1RGVFAvREJ1cyBzdXBwb3J0KSIpOworCisgICAgfQorCisgIGlmIChwcm9ibGVtKQorICAgIHJldHVybiBwcm9ibGVtOworICAKKyAgaWYgKG9wdGlvbiA9PSAnPycpCisgICAgcmV0dXJuIGdlbl9wcm9iOworCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBvbmVfZmlsZShjaGFyICpmaWxlLCBpbnQgbmVzdCwgaW50IGhhcmRfb3B0KQkKK3sKKyAgdm9sYXRpbGUgaW50IGxpbmVubyA9IDA7CisgIGludCBpLCBvcHRpb247IAorICBGSUxFICpmOworICBjaGFyICpwLCAqYXJnLCAqc3RhcnQsICpidWZmID0gZGFlbW9uLT5uYW1lYnVmZjsKKyAgc3RhdGljIHN0cnVjdCBmaWxlcmVhZCB7CisgICAgZGV2X3QgZGV2OworICAgIGlub190IGlubzsKKyAgICBzdHJ1Y3QgZmlsZXJlYWQgKm5leHQ7CisgIH0gKmZpbGVzcmVhZCA9IE5VTEw7CisgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisgIAorICAvKiBpZ25vcmUgcmVwZWF0ZWQgZmlsZXMuICovCisgIGlmIChoYXJkX29wdCA9PSAwICYmIHN0YXQoZmlsZSwgJnN0YXRidWYpID09IDApCisgICAgeworICAgICAgc3RydWN0IGZpbGVyZWFkICpyOworCisgICAgICBmb3IgKHIgPSBmaWxlc3JlYWQ7IHI7IHIgPSByLT5uZXh0KQorCWlmIChyLT5kZXYgPT0gc3RhdGJ1Zi5zdF9kZXYgJiYgci0+aW5vID09IHN0YXRidWYuc3RfaW5vKQorCSAgcmV0dXJuOworCisgICAgICByID0gc2FmZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBmaWxlcmVhZCkpOworICAgICAgci0+bmV4dCA9IGZpbGVzcmVhZDsKKyAgICAgIGZpbGVzcmVhZCA9IHI7CisgICAgICByLT5kZXYgPSBzdGF0YnVmLnN0X2RldjsKKyAgICAgIHItPmlubyA9IHN0YXRidWYuc3RfaW5vOworICAgIH0KKworICBpZiAobmVzdCA+IDIwKQorICAgIGRpZShfKCJmaWxlcyBuZXN0ZWQgdG9vIGRlZXAgaW4gJXMiKSwgZmlsZSwgRUNfQkFEQ09ORik7CisKKyAgaWYgKCEoZiA9IGZvcGVuKGZpbGUsICJyIikpKQorICAgIHsgICAKKyAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQgJiYgbmVzdCA9PSAwKQorCXJldHVybjsgLyogTm8gY29uZmZpbGUsIGFsbCBkb25lLiAqLworICAgICAgZWxzZQorCXsKKwkgIGNoYXIgKnN0ciA9IF8oImNhbm5vdCByZWFkICVzOiAlcyIpOworCSAgaWYgKGhhcmRfb3B0ICE9IDApCisJICAgIHsKKwkgICAgICBteV9zeXNsb2coTE9HX0VSUiwgc3RyLCBmaWxlLCBzdHJlcnJvcihlcnJubykpOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCSAgZWxzZQorCSAgICBkaWUoc3RyLCBmaWxlLCBFQ19GSUxFKTsKKwl9CisgICAgfSAKKyAgCisgIHdoaWxlIChmZ2V0cyhidWZmLCBNQVhETkFNRSwgZikpCisgICAgeworICAgICAgaW50IHdoaXRlOworICAgICAgdW5zaWduZWQgaW50IGxhc3RxdW90ZTsKKyAgICAgIGNoYXIgKmVycm1lc3M7CisKKyAgICAgIC8qIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgbG9uZ2ptcHMgaGVyZSBpZiBtZW1fcmVjb3ZlciA9PSAxICovIAorICAgICAgaWYgKGhhcmRfb3B0KQorCXsKKwkgIGlmIChzZXRqbXAobWVtX2ptcCkpCisJICAgIGNvbnRpbnVlOworCSAgbWVtX3JlY292ZXIgPSAxOworCX0KKyAgICAgIAorICAgICAgbGluZW5vKys7CisgICAgICBlcnJtZXNzID0gTlVMTDsKKyAgICAgIAorICAgICAgLyogSW1wbGVtZW50IHF1b3RlcywgaW5zaWRlIHF1b3RlcyB3ZSBhbGxvdyBcXCBcIiBcbiBhbmQgXHQgCisJIG1ldGFjaGFyYWN0ZXJzIGdldCBoaWRkZW4gYWxzbyBzdHJpcCBjb21tZW50cyAqLworICAgICAgCisgICAgICBmb3IgKHdoaXRlID0gMSwgbGFzdHF1b3RlID0gMCwgcCA9IGJ1ZmY7ICpwOyBwKyspCisJeworCSAgaWYgKCpwID09ICciJykKKwkgICAgeworCSAgICAgIG1lbW1vdmUocCwgcCsxLCBzdHJsZW4ocCsxKSsxKTsKKwkgICAgICBmb3IoOyAqcCAmJiAqcCAhPSAnIic7IHArKykKKwkJeworCQkgIGlmICgqcCA9PSAnXFwnICYmIHN0cmNocigiXCJ0bmViclxcIiwgcFsxXSkpCisJCSAgICB7CisJCSAgICAgIGlmIChwWzFdID09ICd0JykKKwkJCXBbMV0gPSAnXHQnOworCQkgICAgICBlbHNlIGlmIChwWzFdID09ICduJykKKwkJCXBbMV0gPSAnXG4nOworCQkgICAgICBlbHNlIGlmIChwWzFdID09ICdiJykKKwkJCXBbMV0gPSAnXGInOworCQkgICAgICBlbHNlIGlmIChwWzFdID09ICdyJykKKwkJCXBbMV0gPSAnXHInOworCQkgICAgICBlbHNlIGlmIChwWzFdID09ICdlJykgLyogZXNjYXBlICovCisJCQlwWzFdID0gJ1wwMzMnOworCQkgICAgICBtZW1tb3ZlKHAsIHArMSwgc3RybGVuKHArMSkrMSk7CisJCSAgICB9CisJCSAgKnAgPSBoaWRlX21ldGEoKnApOworCQl9CisJICAgICAgaWYgKCpwID09ICciJykgCisJCXsKKwkJICBtZW1tb3ZlKHAsIHArMSwgc3RybGVuKHArMSkrMSk7CisJCSAgbGFzdHF1b3RlID0gcCAtIGJ1ZmY7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBlcnJtZXNzID0gXygibWlzc2luZyBcIiIpOworCQkgIGdvdG8gb29wczsgCisJCX0KKwkgICAgfQorCisJICBpZiAod2hpdGUgJiYgKnAgPT0gJyMnKQorCSAgICB7IAorCSAgICAgICpwID0gMDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgd2hpdGUgPSBpc3NwYWNlKChpbnQpdW5oaWRlX21ldGEoKnApKTsgCisJfQorCisgICAgICAvKiBmZ2V0cyBnZXRzIGVuZCBvZiBsaW5lIGNoYXIgdG9vLiAqLworICAgICAgd2hpbGUgKHN0cmxlbihidWZmKSA+IGxhc3RxdW90ZSAmJiBpc3NwYWNlKChpbnQpdW5oaWRlX21ldGEoYnVmZltzdHJsZW4oYnVmZiktMV0pKSkKKwlidWZmW3N0cmxlbihidWZmKS0xXSA9IDA7CisKKyAgICAgIGlmICgqYnVmZiA9PSAwKQorCWNvbnRpbnVlOyAKKworICAgICAgaWYgKGhhcmRfb3B0ICE9IDApCisJYXJnID0gYnVmZjsKKyAgICAgIGVsc2UgaWYgKChwPXN0cmNocihidWZmLCAnPScpKSkKKwl7CisJICAvKiBhbGxvdyBzcGFjZXMgYXJvdW5kICI9IiAqLworCSAgYXJnID0gcCsxOworCSAgZm9yICg7IHAgPj0gYnVmZiAmJiAoaXNzcGFjZSgoaW50KSpwKSB8fCAqcCA9PSAnPScpOyBwLS0pCisJICAgICpwID0gMDsKKwl9CisgICAgICBlbHNlCisJYXJnID0gTlVMTDsKKworICAgICAgaWYgKGhhcmRfb3B0ICE9IDApCisJb3B0aW9uID0gaGFyZF9vcHQ7CisgICAgICBlbHNlCisJeworCSAgLyogc2tpcCBsZWFkaW5nIHNwYWNlICovCisJICBmb3IgKHN0YXJ0ID0gYnVmZjsgKnN0YXJ0ICYmIGlzc3BhY2UoKGludCkqc3RhcnQpOyBzdGFydCsrKTsKKwkgIAorCSAgZm9yIChvcHRpb24gPSAwLCBpID0gMDsgb3B0c1tpXS5uYW1lOyBpKyspIAorCSAgICBpZiAoc3RyY21wKG9wdHNbaV0ubmFtZSwgc3RhcnQpID09IDApCisJICAgICAgeworCQlvcHRpb24gPSBvcHRzW2ldLnZhbDsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgCisJICBpZiAoIW9wdGlvbikKKwkgICAgZXJybWVzcyA9IF8oImJhZCBvcHRpb24iKTsKKwkgIGVsc2UgaWYgKG9wdHNbaV0uaGFzX2FyZyA9PSAwICYmIGFyZykKKwkgICAgZXJybWVzcyA9IF8oImV4dHJhbmVvdXMgcGFyYW1ldGVyIik7CisJICBlbHNlIGlmIChvcHRzW2ldLmhhc19hcmcgPT0gMSAmJiAhYXJnKQorCSAgICBlcnJtZXNzID0gXygibWlzc2luZyBwYXJhbWV0ZXIiKTsKKwl9CisJICAKKyAgICAgIGlmICghZXJybWVzcykKKwl7CisJICBpZiAoYXJnKQorCSAgICBmb3IgKDsgaXNzcGFjZSgoaW50KSphcmcpOyBhcmcrKyk7CisJICAKKwkgIGVycm1lc3MgPSBvbmVfb3B0KG9wdGlvbiwgYXJnLCBfKCJlcnJvciIpLCBuZXN0ICsgMSk7CisJfQorICAgICAgCisgICAgICBpZiAoZXJybWVzcykKKwl7CisJb29wczoKKwkgIHNwcmludGYoYnVmZiwgXygiJXMgYXQgbGluZSAlZCBvZiAlJXMiKSwgZXJybWVzcywgbGluZW5vKTsKKwkgIGlmIChoYXJkX29wdCAhPSAwKQorCSAgICBteV9zeXNsb2coTE9HX0VSUiwgYnVmZiwgZmlsZSk7CisJICBlbHNlCisJICAgIGRpZShidWZmLCBmaWxlLCBFQ19CQURDT05GKTsKKwl9CisgICAgfQorCisgIG1lbV9yZWNvdmVyID0gMTsKKyAgZmNsb3NlKGYpOworfQorCisjaWZkZWYgSEFWRV9ESENQCit2b2lkIHJlcmVhZF9kaGNwKHZvaWQpCit7CisgIGlmIChkYWVtb24tPmRoY3BfaG9zdHNfZmlsZSkKKyAgICB7CisgICAgICBzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZ3MsICpjcCwgKip1cDsKKyAgICAgIAorICAgICAgLyogcmVtb3ZlIGV4aXN0aW5nLi4uICovCisgICAgICBmb3IgKHVwID0gJmRhZW1vbi0+ZGhjcF9jb25mLCBjb25maWdzID0gZGFlbW9uLT5kaGNwX2NvbmY7IGNvbmZpZ3M7IGNvbmZpZ3MgPSBjcCkKKwl7CisJICBjcCA9IGNvbmZpZ3MtPm5leHQ7CisJICAKKwkgIGlmIChjb25maWdzLT5mbGFncyAmIENPTkZJR19CQU5LKQorCSAgICB7CisJICAgICAgc3RydWN0IGh3YWRkcl9jb25maWcgKm1hYywgKnRtcDsKKwkgICAgICAKKwkgICAgICBmb3IgKG1hYyA9IGNvbmZpZ3MtPmh3YWRkcjsgbWFjOyBtYWMgPSB0bXApCisJCXsKKwkJICB0bXAgPSBtYWMtPm5leHQ7CisJCSAgZnJlZShtYWMpOworCQl9CisJICAgICAgaWYgKGNvbmZpZ3MtPmZsYWdzICYgQ09ORklHX0NMSUQpCisJCWZyZWUoY29uZmlncy0+Y2xpZCk7CisJICAgICAgaWYgKGNvbmZpZ3MtPmZsYWdzICYgQ09ORklHX05FVElEKQorCQlmcmVlKGNvbmZpZ3MtPm5ldGlkLm5ldCk7CisJICAgICAgaWYgKGNvbmZpZ3MtPmZsYWdzICYgQ09ORklHX05BTUUpCisJCWZyZWUoY29uZmlncy0+aG9zdG5hbWUpOworCSAgICAgIAorICAgICAKKwkgICAgICAqdXAgPSBjb25maWdzLT5uZXh0OworCSAgICAgIGZyZWUoY29uZmlncyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgdXAgPSAmY29uZmlncy0+bmV4dDsKKwl9CisgICAgICAKKyAgICAgIG9uZV9maWxlKGRhZW1vbi0+ZGhjcF9ob3N0c19maWxlLCAxLCBMT1BUX0JBTkspOyAgCisgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCJyZWFkICVzIiksIGRhZW1vbi0+ZGhjcF9ob3N0c19maWxlKTsKKyAgICB9CisKKyAgaWYgKGRhZW1vbi0+ZGhjcF9vcHRzX2ZpbGUpCisgICAgeworICAgICAgc3RydWN0IGRoY3Bfb3B0ICpvcHRzLCAqY3AsICoqdXA7CisgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZCAqaWQsICpuZXh0OworCisgICAgICBmb3IgKHVwID0gJmRhZW1vbi0+ZGhjcF9vcHRzLCBvcHRzID0gZGFlbW9uLT5kaGNwX29wdHM7IG9wdHM7IG9wdHMgPSBjcCkKKwl7CisJICBjcCA9IG9wdHMtPm5leHQ7CisJICAKKwkgIGlmIChvcHRzLT5mbGFncyAmIERIT1BUX0JBTkspCisJICAgIHsKKwkgICAgICBpZiAoKG9wdHMtPmZsYWdzICYgREhPUFRfVkVORE9SKSkKKwkJZnJlZShvcHRzLT51LnZlbmRvcl9jbGFzcyk7CisJICAgICAgZnJlZShvcHRzLT52YWwpOworCSAgICAgIGZvciAoaWQgPSBvcHRzLT5uZXRpZDsgaWQ7IGlkID0gbmV4dCkKKwkJeworCQkgIG5leHQgPSBpZC0+bmV4dDsKKwkJICBmcmVlKGlkLT5uZXQpOworCQkgIGZyZWUoaWQpOworCQl9CisJICAgICAgKnVwID0gb3B0cy0+bmV4dDsKKwkgICAgICBmcmVlKG9wdHMpOworCSAgICB9CisJICBlbHNlCisJICAgIHVwID0gJm9wdHMtPm5leHQ7CisJfQorICAgICAgCisgICAgICBvbmVfZmlsZShkYWVtb24tPmRoY3Bfb3B0c19maWxlLCAxLCBMT1BUX09QVFMpOyAgCisgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCJyZWFkICVzIiksIGRhZW1vbi0+ZGhjcF9vcHRzX2ZpbGUpOworICAgIH0KK30KKyNlbmRpZgorICAgIAordm9pZCByZWFkX29wdHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICpjb21waWxlX29wdHMpCit7CisgIGNoYXIgKmJ1ZmYgPSBvcHRfbWFsbG9jKE1BWEROQU1FKTsKKyAgaW50IG9wdGlvbiwgbmVzdCA9IDAsIHRlc3Rtb2RlID0gMDsKKyAgY2hhciAqZXJybWVzcywgKmFyZywgKmNvbmZmaWxlID0gQ09ORkZJTEU7CisgICAgICAKKyAgb3B0ZXJyID0gMDsKKworICBkYWVtb24gPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGFlbW9uKSk7CisgIG1lbXNldChkYWVtb24sIDAsIHNpemVvZihzdHJ1Y3QgZGFlbW9uKSk7CisgIGRhZW1vbi0+bmFtZWJ1ZmYgPSBidWZmOworCisgIC8qIFNldCBkZWZhdWx0cyAtIGV2ZXJ5dGhpbmcgZWxzZSBpcyB6ZXJvIG9yIE5VTEwgKi8KKyAgZGFlbW9uLT5jYWNoZXNpemUgPSBDQUNIRVNJWjsKKyAgZGFlbW9uLT5mdGFic2l6ZSA9IEZUQUJTSVo7CisgIGRhZW1vbi0+cG9ydCA9IE5BTUVTRVJWRVJfUE9SVDsKKyAgZGFlbW9uLT5kaGNwX2NsaWVudF9wb3J0ID0gREhDUF9DTElFTlRfUE9SVDsKKyAgZGFlbW9uLT5kaGNwX3NlcnZlcl9wb3J0ID0gREhDUF9TRVJWRVJfUE9SVDsKKyAgZGFlbW9uLT5kZWZhdWx0X3Jlc29sdi5pc19kZWZhdWx0ID0gMTsKKyAgZGFlbW9uLT5kZWZhdWx0X3Jlc29sdi5uYW1lID0gUkVTT0xWRklMRTsKKyAgZGFlbW9uLT5yZXNvbHZfZmlsZXMgPSAmZGFlbW9uLT5kZWZhdWx0X3Jlc29sdjsKKyAgZGFlbW9uLT51c2VybmFtZSA9IENIVVNFUjsKKyAgZGFlbW9uLT5ydW5maWxlID0gIFJVTkZJTEU7CisgIGRhZW1vbi0+ZGhjcF9tYXggPSBNQVhMRUFTRVM7CisgIGRhZW1vbi0+dGZ0cF9tYXggPSBURlRQX01BWF9DT05ORUNUSU9OUzsKKyAgZGFlbW9uLT5lZG5zX3BrdHN6ID0gRUROU19QS1RTWjsKKyAgZGFlbW9uLT5sb2dfZmFjID0gLTE7CisgIGFkZF90eHQoInZlcnNpb24uYmluZCIsICJkbnNtYXNxLSIgVkVSU0lPTiApOworICBhZGRfdHh0KCJhdXRob3JzLmJpbmQiLCAiU2ltb24gS2VsbGV5Iik7CisgIGFkZF90eHQoImNvcHlyaWdodC5iaW5kIiwgQ09QWVJJR0hUKTsKKworICB3aGlsZSAoMSkgCisgICAgeworI2lmZGVmIEhBVkVfR0VUT1BUX0xPTkcKKyAgICAgIG9wdGlvbiA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIE9QVFNUUklORywgb3B0cywgTlVMTCk7CisjZWxzZQorICAgICAgb3B0aW9uID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIE9QVFNUUklORyk7CisjZW5kaWYKKyAgICAgIAorICAgICAgaWYgKG9wdGlvbiA9PSAtMSkKKwlicmVhazsKKyAgICAgIAorICAgICAgLyogQ29weSBvcHRhcmcgc28gdGhhdCBhcmd2IGRvZXNuJ3QgZ2V0IGNoYW5nZWQgKi8KKyAgICAgIGlmIChvcHRhcmcpCisJeworCSAgc3RybmNweShidWZmLCBvcHRhcmcsIE1BWEROQU1FKTsKKwkgIGJ1ZmZbTUFYRE5BTUUtMV0gPSAwOworCSAgYXJnID0gYnVmZjsKKwl9CisgICAgICBlbHNlCisJYXJnID0gTlVMTDsKKyAgICAgIAorICAgICAgLyogY29tbWFuZC1saW5lIG9ubHkgc3R1ZmYgKi8KKyAgICAgIGlmIChvcHRpb24gPT0gTE9QVF9URVNUKQorCXRlc3Rtb2RlID0gMTsKKyAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAndycpCisJeworCSAgaWYgKGFyZ2MgIT0gMyB8fCAgc3RyY21wKGFyZ3ZbMl0sICJkaGNwIikgIT0gMCkKKwkgICAgZG9fdXNhZ2UoKTsKKyNpZmRlZiBIQVZFX0RIQ1AKKwkgIGVsc2UKKwkgICAgZGlzcGxheV9vcHRzKCk7CisjZW5kaWYKKwkgIGV4aXQoMCk7CisJfQorICAgICAgZWxzZSBpZiAob3B0aW9uID09ICd2JykKKwl7CisJICBwcmludGYoXygiRG5zbWFzcSB2ZXJzaW9uICVzICAlc1xuIiksIFZFUlNJT04sIENPUFlSSUdIVCk7CisJICBwcmludGYoXygiQ29tcGlsZSB0aW1lIG9wdGlvbnMgJXNcblxuIiksIGNvbXBpbGVfb3B0cyk7IAorCSAgcHJpbnRmKF8oIlRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLlxuIikpOworCSAgcHJpbnRmKF8oIkRuc21hc3EgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXRcbiIpKTsKKwkgIHByaW50ZihfKCJ1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgb3IgMy5cbiIpKTsKKyAgICAgICAgICBleGl0KDApOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChvcHRpb24gPT0gJ0MnKQorCXsKKwkgIGNvbmZmaWxlID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCSAgbmVzdCsrOworCX0KKyAgICAgIGVsc2UKKwl7CisjaWZkZWYgSEFWRV9HRVRPUFRfTE9ORworCSAgZXJybWVzcyA9IG9uZV9vcHQob3B0aW9uLCBhcmcsIF8oInRyeSAtLWhlbHAiKSwgMCk7CisjZWxzZSAKKwkgIGVycm1lc3MgPSBvbmVfb3B0KG9wdGlvbiwgYXJnLCBfKCJ0cnkgLXciKSwgMCk7IAorI2VuZGlmICAKKwkgIGlmIChlcnJtZXNzKQorCSAgICBkaWUoXygiYmFkIGNvbW1hbmQgbGluZSBvcHRpb25zOiAlcyIpLCBlcnJtZXNzLCBFQ19CQURDT05GKTsKKwl9CisgICAgfQorCisgIGlmIChjb25mZmlsZSkKKyAgICBvbmVfZmlsZShjb25mZmlsZSwgbmVzdCwgMCk7CisKKyAgLyogcG9ydCBtaWdodCBub3QgYmUga25vd24gd2hlbiB0aGUgYWRkcmVzcyBpcyBwYXJzZWQgLSBmaWxsIGluIGhlcmUgKi8KKyAgaWYgKGRhZW1vbi0+c2VydmVycykKKyAgICB7CisgICAgICBzdHJ1Y3Qgc2VydmVyICp0bXA7CisgICAgICBmb3IgKHRtcCA9IGRhZW1vbi0+c2VydmVyczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJaWYgKCEodG1wLT5mbGFncyAmIFNFUlZfSEFTX1NPVVJDRSkpCisJICB7CisJICAgIGlmICh0bXAtPnNvdXJjZV9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCSAgICAgIHRtcC0+c291cmNlX2FkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPnF1ZXJ5X3BvcnQpOworI2lmZGVmIEhBVkVfSVBWNgorCSAgICBlbHNlIGlmICh0bXAtPnNvdXJjZV9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkgICAgICB0bXAtPnNvdXJjZV9hZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhkYWVtb24tPnF1ZXJ5X3BvcnQpOworI2VuZGlmIAorCSAgfSAKKyAgICB9CisgIAorICBpZiAoZGFlbW9uLT5pZl9hZGRycykKKyAgICB7ICAKKyAgICAgIHN0cnVjdCBpbmFtZSAqdG1wOworICAgICAgZm9yKHRtcCA9IGRhZW1vbi0+aWZfYWRkcnM7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorCWlmICh0bXAtPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisJICB0bXAtPmFkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPnBvcnQpOworI2lmZGVmIEhBVkVfSVBWNgorCWVsc2UgaWYgKHRtcC0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisJICB0bXAtPmFkZHIuaW42LnNpbjZfcG9ydCA9IGh0b25zKGRhZW1vbi0+cG9ydCk7CisjZW5kaWYgLyogSVB2NiAqLworICAgIH0KKwkJICAgICAgCisgIC8qIG9ubHkgb25lIG9mIHRoZXNlIG5lZWQgYmUgc3BlY2lmaWVkOiB0aGUgb3RoZXIgZGVmYXVsdHMgdG8gdGhlIGhvc3QtbmFtZSAqLworICBpZiAoKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9MT0NBTE1YKSB8fCBkYWVtb24tPm14bmFtZXMgfHwgZGFlbW9uLT5teHRhcmdldCkKKyAgICB7CisgICAgICBzdHJ1Y3QgbXhfc3J2X3JlY29yZCAqbXg7CisgICAgICAKKyAgICAgIGlmIChnZXRob3N0bmFtZShidWZmLCBNQVhETkFNRSkgPT0gLTEpCisJZGllKF8oImNhbm5vdCBnZXQgaG9zdC1uYW1lOiAlcyIpLCBOVUxMLCBFQ19NSVNDKTsKKyAgICAgIAorICAgICAgZm9yIChteCA9IGRhZW1vbi0+bXhuYW1lczsgbXg7IG14ID0gbXgtPm5leHQpCisJaWYgKCFteC0+aXNzcnYgJiYgaG9zdG5hbWVfaXNlcXVhbChteC0+bmFtZSwgYnVmZikpCisJICBicmVhazsKKyAgICAgIAorICAgICAgaWYgKChkYWVtb24tPm14dGFyZ2V0IHx8IChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTE9DQUxNWCkpICYmICFteCkKKwl7CisJICBteCA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBteF9zcnZfcmVjb3JkKSk7CisJICBteC0+bmV4dCA9IGRhZW1vbi0+bXhuYW1lczsKKwkgIG14LT5pc3NydiA9IDA7CisJICBteC0+dGFyZ2V0ID0gTlVMTDsKKwkgIG14LT5uYW1lID0gb3B0X3N0cmluZ19hbGxvYyhidWZmKTsKKwkgIGRhZW1vbi0+bXhuYW1lcyA9IG14OworCX0KKyAgICAgIAorICAgICAgaWYgKCFkYWVtb24tPm14dGFyZ2V0KQorCWRhZW1vbi0+bXh0YXJnZXQgPSBvcHRfc3RyaW5nX2FsbG9jKGJ1ZmYpOworCisgICAgICBmb3IgKG14ID0gZGFlbW9uLT5teG5hbWVzOyBteDsgbXggPSBteC0+bmV4dCkKKwlpZiAoIW14LT5pc3NydiAmJiAhbXgtPnRhcmdldCkKKwkgIG14LT50YXJnZXQgPSBkYWVtb24tPm14dGFyZ2V0OworICAgIH0KKworICBpZiAoIShkYWVtb24tPm9wdGlvbnMgJiBPUFRfTk9fUkVTT0xWKSAmJgorICAgICAgZGFlbW9uLT5yZXNvbHZfZmlsZXMgJiYgCisgICAgICBkYWVtb24tPnJlc29sdl9maWxlcy0+bmV4dCAmJiAKKyAgICAgIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTk9fUE9MTCkpCisgICAgZGllKF8oIm9ubHkgb25lIHJlc29sdi5jb25mIGZpbGUgYWxsb3dlZCBpbiBuby1wb2xsIG1vZGUuIiksIE5VTEwsIEVDX0JBRENPTkYpOworICAKKyAgaWYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9SRVNPTFZfRE9NQUlOKQorICAgIHsKKyAgICAgIGNoYXIgKmxpbmU7CisgICAgICBGSUxFICpmOworCisgICAgICBpZiAoKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT19SRVNPTFYpIHx8CisJICAhZGFlbW9uLT5yZXNvbHZfZmlsZXMgfHwgCisJICAoZGFlbW9uLT5yZXNvbHZfZmlsZXMpLT5uZXh0KQorCWRpZShfKCJtdXN0IGhhdmUgZXhhY3RseSBvbmUgcmVzb2x2LmNvbmYgdG8gcmVhZCBkb21haW4gZnJvbS4iKSwgTlVMTCwgRUNfQkFEQ09ORik7CisgICAgICAKKyAgICAgIGlmICghKGYgPSBmb3BlbigoZGFlbW9uLT5yZXNvbHZfZmlsZXMpLT5uYW1lLCAiciIpKSkKKwlkaWUoXygiZmFpbGVkIHRvIHJlYWQgJXM6ICVzIiksIChkYWVtb24tPnJlc29sdl9maWxlcyktPm5hbWUsIEVDX0ZJTEUpOworICAgICAgCisgICAgICB3aGlsZSAoKGxpbmUgPSBmZ2V0cyhidWZmLCBNQVhETkFNRSwgZikpKQorCXsKKwkgIGNoYXIgKnRva2VuID0gc3RydG9rKGxpbmUsICIgXHRcblxyIik7CisJICAKKwkgIGlmICghdG9rZW4gfHwgc3RyY21wKHRva2VuLCAic2VhcmNoIikgIT0gMCkKKwkgICAgY29udGludWU7CisJICAKKwkgIGlmICgodG9rZW4gPSBzdHJ0b2soTlVMTCwgIiBcdFxuXHIiKSkgJiYgIAorCSAgICAgIChkYWVtb24tPmRvbWFpbl9zdWZmaXggPSBjYW5vbmljYWxpc2Vfb3B0KHRva2VuKSkpCisJICAgIGJyZWFrOworCX0KKworICAgICAgZmNsb3NlKGYpOworCisgICAgICBpZiAoIWRhZW1vbi0+ZG9tYWluX3N1ZmZpeCkKKwlkaWUoXygibm8gc2VhcmNoIGRpcmVjdGl2ZSBmb3VuZCBpbiAlcyIpLCAoZGFlbW9uLT5yZXNvbHZfZmlsZXMpLT5uYW1lLCBFQ19NSVNDKTsKKyAgICB9CisKKyAgaWYgKGRhZW1vbi0+ZG9tYWluX3N1ZmZpeCkKKyAgICB7CisgICAgICAgLyogYWRkIGRvbWFpbiBmb3IgYW55IHNydiByZWNvcmQgd2l0aG91dCBvbmUuICovCisgICAgICBzdHJ1Y3QgbXhfc3J2X3JlY29yZCAqc3J2OworICAgICAgCisgICAgICBmb3IgKHNydiA9IGRhZW1vbi0+bXhuYW1lczsgc3J2OyBzcnYgPSBzcnYtPm5leHQpCisJaWYgKHNydi0+aXNzcnYgJiYKKwkgICAgc3RyY2hyKHNydi0+bmFtZSwgJy4nKSAmJiAKKwkgICAgc3RyY2hyKHNydi0+bmFtZSwgJy4nKSA9PSBzdHJyY2hyKHNydi0+bmFtZSwgJy4nKSkKKwkgIHsKKwkgICAgc3RyY3B5KGJ1ZmYsIHNydi0+bmFtZSk7CisJICAgIHN0cmNhdChidWZmLCAiLiIpOworCSAgICBzdHJjYXQoYnVmZiwgZGFlbW9uLT5kb21haW5fc3VmZml4KTsKKwkgICAgZnJlZShzcnYtPm5hbWUpOworCSAgICBzcnYtPm5hbWUgPSBvcHRfc3RyaW5nX2FsbG9jKGJ1ZmYpOworCSAgfQorICAgIH0KKyAgZWxzZSBpZiAoZGFlbW9uLT5vcHRpb25zICYgT1BUX0RIQ1BfRlFETikKKyAgICBkaWUoXygidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IiksIE5VTEwsIEVDX0JBRENPTkYpOworCisgIGlmICh0ZXN0bW9kZSkKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImRuc21hc3E6ICVzLlxuIiwgXygic3ludGF4IGNoZWNrIE9LIikpOworICAgICAgZXhpdCgwKTsKKyAgICB9Cit9ICAKZGlmZiAtLWdpdCBhL3NyYy9yZmMxMDM1LmMgYi9zcmMvcmZjMTAzNS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNhNWNlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcmZjMTAzNS5jCkBAIC0wLDAgKzEsMTYwNCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKK3N0YXRpYyBpbnQgYWRkX3Jlc291cmNlX3JlY29yZChIRUFERVIgKmhlYWRlciwgY2hhciAqbGltaXQsIGludCAqdHJ1bmNwLCAKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbmFtZW9mZnNldCwgdW5zaWduZWQgY2hhciAqKnBwLCAKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHR0bCwgdW5zaWduZWQgaW50ICpvZmZzZXQsIHVuc2lnbmVkIHNob3J0IHR5cGUsIAorCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IGNsYXNzLCBjaGFyICpmb3JtYXQsIC4uLik7CisKKyNkZWZpbmUgQ0hFQ0tfTEVOKGhlYWRlciwgcHAsIHBsZW4sIGxlbikgXAorICAgICgoc2l6ZV90KSgocHApIC0gKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKSArIChsZW4pKSA8PSAocGxlbikpCisKKyNkZWZpbmUgQUREX1JETEVOKGhlYWRlciwgcHAsIHBsZW4sIGxlbikgXAorICAgICghQ0hFQ0tfTEVOKGhlYWRlciwgcHAsIHBsZW4sIGxlbikgPyAwIDogKGxvbmcpKChwcCkgKz0gKGxlbikpLCAxKQorCitzdGF0aWMgaW50IGV4dHJhY3RfbmFtZShIRUFERVIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHVuc2lnbmVkIGNoYXIgKipwcCwgCisJCQljaGFyICpuYW1lLCBpbnQgaXNFeHRyYWN0LCBpbnQgZXh0cmFieXRlcykKK3sKKyAgdW5zaWduZWQgY2hhciAqY3AgPSAodW5zaWduZWQgY2hhciAqKW5hbWUsICpwID0gKnBwLCAqcDEgPSBOVUxMOworICB1bnNpZ25lZCBpbnQgaiwgbCwgaG9wcyA9IDA7CisgIGludCByZXR2YWx1ZSA9IDE7CisgIAorICBpZiAoaXNFeHRyYWN0KQorICAgICpjcCA9IDA7CisKKyAgd2hpbGUgKDEpCisgICAgeyAKKyAgICAgIHVuc2lnbmVkIGludCBsYWJlbF90eXBlOworCisgICAgICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHBsZW4sIDEpKQorCXJldHVybiAwOworICAgICAgCisgICAgICBpZiAoKGwgPSAqcCsrKSA9PSAwKSAKKwkvKiBlbmQgbWFya2VyICovCisJeworCSAgLyogY2hlY2sgdGhhdCB0aGVyZSBhcmUgdGhlIGNvcnJlY3Qgbm8gb2YgYnl0ZXMgYWZ0ZXIgdGhlIG5hbWUgKi8KKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcGxlbiwgZXh0cmFieXRlcykpCisJICAgIHJldHVybiAwOworCSAgCisJICBpZiAoaXNFeHRyYWN0KQorCSAgICB7CisJICAgICAgaWYgKGNwICE9ICh1bnNpZ25lZCBjaGFyICopbmFtZSkKKwkJY3AtLTsKKwkgICAgICAqY3AgPSAwOyAvKiB0ZXJtaW5hdGU6IGxvc2UgZmluYWwgcGVyaW9kICovCisJICAgIH0KKwkgIGVsc2UgaWYgKCpjcCAhPSAwKQorCSAgICByZXR2YWx1ZSA9IDI7CisJICAKKwkgIGlmIChwMSkgLyogd2UganVtcGVkIHZpYSBjb21wcmVzc2lvbiAqLworCSAgICAqcHAgPSBwMTsKKwkgIGVsc2UKKwkgICAgKnBwID0gcDsKKwkgIAorCSAgcmV0dXJuIHJldHZhbHVlOworCX0KKworICAgICAgbGFiZWxfdHlwZSA9IGwgJiAweGMwOworICAgICAgCisgICAgICBpZiAobGFiZWxfdHlwZSA9PSAweGMwKSAvKiBwb2ludGVyICovCisJeyAKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcGxlbiwgMSkpCisJICAgIHJldHVybiAwOworCSAgICAgIAorCSAgLyogZ2V0IG9mZnNldCAqLworCSAgbCA9IChsJjB4M2YpIDw8IDg7CisJICBsIHw9ICpwKys7CisJICAKKwkgIGlmICghcDEpIC8qIGZpcnN0IGp1bXAsIHNhdmUgbG9jYXRpb24gdG8gZ28gYmFjayB0byAqLworCSAgICBwMSA9IHA7CisJICAgICAgCisJICBob3BzKys7IC8qIGJyZWFrIG1hbGljaW91cyBpbmZpbml0ZSBsb29wcyAqLworCSAgaWYgKGhvcHMgPiAyNTUpCisJICAgIHJldHVybiAwOworCSAgCisJICBwID0gbCArICh1bnNpZ25lZCBjaGFyICopaGVhZGVyOworCX0KKyAgICAgIGVsc2UgaWYgKGxhYmVsX3R5cGUgPT0gMHg4MCkKKwlyZXR1cm4gMDsgLyogcmVzZXJ2ZWQgKi8KKyAgICAgIGVsc2UgaWYgKGxhYmVsX3R5cGUgPT0gMHg0MCkKKwl7IC8qIEVMVCAqLworCSAgdW5zaWduZWQgaW50IGNvdW50LCBkaWdzOworCSAgCisJICBpZiAoKGwgJiAweDNmKSAhPSAxKQorCSAgICByZXR1cm4gMDsgLyogd2Ugb25seSB1bmRlcnN0YW5kIGJpdHN0cmluZ3MgKi8KKworCSAgaWYgKCFpc0V4dHJhY3QpCisJICAgIHJldHVybiAwOyAvKiBDYW5ub3QgY29tcGFyZSBiaXRzcmluZ3MgKi8KKwkgIAorCSAgY291bnQgPSAqcCsrOworCSAgaWYgKGNvdW50ID09IDApCisJICAgIGNvdW50ID0gMjU2OworCSAgZGlncyA9ICgoY291bnQtMSk+PjIpKzE7CisJICAKKwkgIC8qIG91dHB1dCBpcyBcW3g8aGV4Pi9zaXpdLiB3aGljaCBpcyBkaWdzKzkgY2hhcnMgKi8KKwkgIGlmIChjcCAtICh1bnNpZ25lZCBjaGFyICopbmFtZSArIGRpZ3MgKyA5ID49IE1BWEROQU1FKQorCSAgICByZXR1cm4gMDsKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcGxlbiwgKGNvdW50LTEpPj4zKSkKKwkgICAgcmV0dXJuIDA7CisKKwkgICpjcCsrID0gJ1xcJzsKKwkgICpjcCsrID0gJ1snOworCSAgKmNwKysgPSAneCc7CisJICBmb3IgKGo9MDsgajxkaWdzOyBqKyspCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBpbnQgZGlnOworCSAgICAgIGlmIChqJTIgPT0gMCkKKwkJZGlnID0gKnAgPj4gNDsKKwkgICAgICBlbHNlCisJCWRpZyA9ICpwKysgJiAweDBmOworCSAgICAgIAorCSAgICAgICpjcCsrID0gZGlnIDwgMTAgPyBkaWcgKyAnMCcgOiBkaWcgKyAnQScgLSAxMDsKKwkgICAgfSAKKwkgIGNwICs9IHNwcmludGYoKGNoYXIgKiljcCwgIi8lZF0iLCBjb3VudCk7CisJICAvKiBkbyB0aGlzIGhlcmUgdG8gb3ZlcndyaXRlIHRoZSB6ZXJvIGNoYXIgZnJvbSBzcHJpbnRmICovCisJICAqY3ArKyA9ICcuJzsKKwl9CisgICAgICBlbHNlIAorCXsgLyogbGFiZWxfdHlwZSA9IDAgLT4gbGFiZWwuICovCisJICBpZiAoY3AgLSAodW5zaWduZWQgY2hhciAqKW5hbWUgKyBsICsgMSA+PSBNQVhETkFNRSkKKwkgICAgcmV0dXJuIDA7CisJICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHBsZW4sIGwpKQorCSAgICByZXR1cm4gMDsKKwkgIAorCSAgZm9yKGo9MDsgajxsOyBqKyssIHArKykKKwkgICAgaWYgKGlzRXh0cmFjdCkKKwkgICAgICB7CisJCXVuc2lnbmVkIGNoYXIgYyA9ICpwOworCQlpZiAoaXNhc2NpaShjKSAmJiAhaXNjbnRybChjKSAmJiBjICE9ICcuJykKKwkJICAqY3ArKyA9ICpwOworCQllbHNlCisJCSAgcmV0dXJuIDA7CisJICAgICAgfQorCSAgICBlbHNlIAorCSAgICAgIHsKKwkJdW5zaWduZWQgY2hhciBjMSA9ICpjcCwgYzIgPSAqcDsKKwkJCisJCWlmIChjMSA9PSAwKQorCQkgIHJldHZhbHVlID0gMjsKKwkJZWxzZSAKKwkJICB7CisJCSAgICBjcCsrOworCQkgICAgaWYgKGMxID49ICdBJyAmJiBjMSA8PSAnWicpCisJCSAgICAgIGMxICs9ICdhJyAtICdBJzsKKwkJICAgIGlmIChjMiA+PSAnQScgJiYgYzIgPD0gJ1onKQorCQkgICAgICBjMiArPSAnYScgLSAnQSc7CisJCSAgICAKKwkJICAgIGlmIChjMSAhPSBjMikKKwkJICAgICAgcmV0dmFsdWUgPSAgMjsKKwkJICB9CisJICAgICAgfQorCSAgCisJICBpZiAoaXNFeHRyYWN0KQorCSAgICAqY3ArKyA9ICcuJzsKKwkgIGVsc2UgaWYgKCpjcCAhPSAwICYmICpjcCsrICE9ICcuJykKKwkgICAgcmV0dmFsdWUgPSAyOworCX0KKyAgICB9Cit9CisgCisvKiBNYXggc2l6ZSBvZiBpbnB1dCBzdHJpbmcgKGZvciBJUHY2KSBpcyA3NSBjaGFycy4pICovCisjZGVmaW5lIE1BWEFSUEFOQU1FIDc1CitzdGF0aWMgaW50IGluX2FycGFfbmFtZV8yX2FkZHIoY2hhciAqbmFtZWluLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHJwKQoreworICBpbnQgajsKKyAgY2hhciBuYW1lW01BWEFSUEFOQU1FKzFdLCAqY3AxOworICB1bnNpZ25lZCBjaGFyICphZGRyID0gKHVuc2lnbmVkIGNoYXIgKilhZGRycDsKKyAgY2hhciAqbGFzdGNodW5rID0gTlVMTCwgKnBlbmNodW5rID0gTlVMTDsKKyAgCisgIGlmIChzdHJsZW4obmFtZWluKSA+IE1BWEFSUEFOQU1FKQorICAgIHJldHVybiAwOworCisgIG1lbXNldChhZGRycCwgMCwgc2l6ZW9mKHN0cnVjdCBhbGxfYWRkcikpOworCisgIC8qIHR1cm4gbmFtZSBpbnRvIGEgc2VyaWVzIG9mIGFzY2lpeiBzdHJpbmdzICovCisgIC8qIGogY291bnRzIG5vIG9mIGxhYmVscyAqLworICBmb3IoaiA9IDEsY3AxID0gbmFtZTsgKm5hbWVpbjsgY3AxKyssIG5hbWVpbisrKQorICAgIGlmICgqbmFtZWluID09ICcuJykKKyAgICAgIHsKKwlwZW5jaHVuayA9IGxhc3RjaHVuazsKKyAgICAgICAgbGFzdGNodW5rID0gY3AxICsgMTsKKwkqY3AxID0gMDsKKwlqKys7CisgICAgICB9CisgICAgZWxzZQorICAgICAgKmNwMSA9ICpuYW1laW47CisgIAorICAqY3AxID0gMDsKKworICBpZiAoajwzKQorICAgIHJldHVybiAwOworCisgIGlmIChob3N0bmFtZV9pc2VxdWFsKGxhc3RjaHVuaywgImFycGEiKSAmJiBob3N0bmFtZV9pc2VxdWFsKHBlbmNodW5rLCAiaW4tYWRkciIpKQorICAgIHsKKyAgICAgIC8qIElQIHY0ICovCisgICAgICAvKiBhZGRyZXNzIGFyaXZlcyBhcyBhIG5hbWUgb2YgdGhlIGZvcm0KKwkgd3d3Lnh4eC55eXkuenp6LmluLWFkZHIuYXJwYQorCSBzb21lIG9mIHRoZSBsb3cgb3JkZXIgYWRkcmVzcyBvY3RldHMgbWlnaHQgYmUgbWlzc2luZworCSBhbmQgc2hvdWxkIGJlIHNldCB0byB6ZXJvLiAqLworICAgICAgZm9yIChjcDEgPSBuYW1lOyBjcDEgIT0gcGVuY2h1bms7IGNwMSArPSBzdHJsZW4oY3AxKSsxKQorCXsKKwkgIC8qIGNoZWNrIGZvciBkaWdpdHMgb25seSAod2VlZHMgb3V0IHRoaW5ncyBsaWtlCisJICAgICA1MC4wLzI0LjY3LjI4LjY0LmluLWFkZHIuYXJwYSB3aGljaCBhcmUgdXNlZCAKKwkgICAgIGFzIENOQU1FIHRhcmdldHMgYWNjb3JkaW5nIHRvIFJGQyAyMzE3ICovCisJICBjaGFyICpjcDsKKwkgIGZvciAoY3AgPSBjcDE7ICpjcDsgY3ArKykKKwkgICAgaWYgKCFpc2RpZ2l0KChpbnQpKmNwKSkKKwkgICAgICByZXR1cm4gMDsKKwkgIAorCSAgYWRkclszXSA9IGFkZHJbMl07CisJICBhZGRyWzJdID0gYWRkclsxXTsKKwkgIGFkZHJbMV0gPSBhZGRyWzBdOworCSAgYWRkclswXSA9IGF0b2koY3AxKTsKKwl9CisKKyAgICAgIHJldHVybiBGX0lQVjQ7CisgICAgfQorI2lmZGVmIEhBVkVfSVBWNgorICBlbHNlIGlmIChob3N0bmFtZV9pc2VxdWFsKHBlbmNodW5rLCAiaXA2IikgJiYgCisJICAgKGhvc3RuYW1lX2lzZXF1YWwobGFzdGNodW5rLCAiaW50IikgfHwgaG9zdG5hbWVfaXNlcXVhbChsYXN0Y2h1bmssICJhcnBhIikpKQorICAgIHsKKyAgICAgIC8qIElQIHY2OgorICAgICAgICAgQWRkcmVzcyBhcnJpdmVzIGFzIDAuMS4yLjMuNC41LjYuNy44LjkuYS5iLmMuZC5lLmYuaXA2LltpbnR8YXJwYV0KKyAgICAJIG9yIFxbeGZlZGNiYTk4NzY1NDMyMTBmZWRjYmE5ODc2NTQzMjEwLzEyOF0uaXA2LltpbnR8YXJwYV0KKyAgICAgIAorCSBOb3RlIHRoYXQgbW9zdCBvZiB0aGVzZSB0aGUgdmFyaW91cyByZXByZW50YXRpb25zIGFyZSBvYnNvbGV0ZSBhbmQgCisJIGxlZnQtb3ZlciBmcm9tIHRoZSBtYW55IEROUy1mb3ItSVB2NiB3YXJzLiBXZSBzdXBwb3J0IGFsbCB0aGUgZm9ybWF0cworCSB0aGF0IHdlIGNhbiBzaW5jZSB0aGVyZSBpcyBubyByZWFzb24gbm90IHRvLgorICAgICAgKi8KKworICAgICAgaWYgKCpuYW1lID09ICdcXCcgJiYgKihuYW1lKzEpID09ICdbJyAmJiAKKwkgICgqKG5hbWUrMikgPT0gJ3gnIHx8ICoobmFtZSsyKSA9PSAnWCcpKQorCXsJICAKKwkgIGZvciAoaiA9IDAsIGNwMSA9IG5hbWUrMzsgKmNwMSAmJiBpc3hkaWdpdCgoaW50KSAqY3AxKSAmJiBqIDwgMzI7IGNwMSsrLCBqKyspCisJICAgIHsKKwkgICAgICBjaGFyIHhkaWdbMl07CisJICAgICAgeGRpZ1swXSA9ICpjcDE7CisJICAgICAgeGRpZ1sxXSA9IDA7CisJICAgICAgaWYgKGolMikKKwkJYWRkcltqLzJdIHw9IHN0cnRvbCh4ZGlnLCBOVUxMLCAxNik7CisJICAgICAgZWxzZQorCQlhZGRyW2ovMl0gPSBzdHJ0b2woeGRpZywgTlVMTCwgMTYpIDw8IDQ7CisJICAgIH0KKwkgIAorCSAgaWYgKCpjcDEgPT0gJy8nICYmIGogPT0gMzIpCisJICAgIHJldHVybiBGX0lQVjY7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGZvciAoY3AxID0gbmFtZTsgY3AxICE9IHBlbmNodW5rOyBjcDEgKz0gc3RybGVuKGNwMSkrMSkKKwkgICAgeworCSAgICAgIGlmICgqKGNwMSsxKSB8fCAhaXN4ZGlnaXQoKGludCkqY3AxKSkKKwkJcmV0dXJuIDA7CisJICAgICAgCisJICAgICAgZm9yIChqID0gc2l6ZW9mKHN0cnVjdCBhbGxfYWRkciktMTsgaj4wOyBqLS0pCisJCWFkZHJbal0gPSAoYWRkcltqXSA+PiA0KSB8IChhZGRyW2otMV0gPDwgNCk7CisJICAgICAgYWRkclswXSA9IChhZGRyWzBdID4+IDQpIHwgKHN0cnRvbChjcDEsIE5VTEwsIDE2KSA8PCA0KTsKKwkgICAgfQorCSAgCisJICByZXR1cm4gRl9JUFY2OworCX0KKyAgICB9CisjZW5kaWYKKyAgCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciAqc2tpcF9uYW1lKHVuc2lnbmVkIGNoYXIgKmFuc3AsIEhFQURFUiAqaGVhZGVyLCBzaXplX3QgcGxlbiwgaW50IGV4dHJhYnl0ZXMpCit7CisgIHdoaWxlKDEpCisgICAgeworICAgICAgdW5zaWduZWQgaW50IGxhYmVsX3R5cGU7CisgICAgICAKKyAgICAgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgYW5zcCwgcGxlbiwgMSkpCisJcmV0dXJuIE5VTEw7CisgICAgICAKKyAgICAgIGxhYmVsX3R5cGUgPSAoKmFuc3ApICYgMHhjMDsKKworICAgICAgaWYgKGxhYmVsX3R5cGUgPT0gMHhjMCkKKwl7CisJICAvKiBwb2ludGVyIGZvciBjb21wcmVzc2lvbi4gKi8KKwkgIGFuc3AgKz0gMjsJCisJICBicmVhazsKKwl9CisgICAgICBlbHNlIGlmIChsYWJlbF90eXBlID09IDB4ODApCisJcmV0dXJuIE5VTEw7IC8qIHJlc2VydmVkICovCisgICAgICBlbHNlIGlmIChsYWJlbF90eXBlID09IDB4NDApCisJeworCSAgLyogRXh0ZW5kZWQgbGFiZWwgdHlwZSAqLworCSAgdW5zaWduZWQgaW50IGNvdW50OworCSAgCisJICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIGFuc3AsIHBsZW4sIDIpKQorCSAgICByZXR1cm4gTlVMTDsKKwkgIAorCSAgaWYgKCgoKmFuc3ArKykgJiAweDNmKSAhPSAxKQorCSAgICByZXR1cm4gTlVMTDsgLyogd2Ugb25seSB1bmRlcnN0YW5kIGJpdHN0cmluZ3MgKi8KKwkgIAorCSAgY291bnQgPSAqKGFuc3ArKyk7IC8qIEJpdHMgaW4gYml0c3RyaW5nICovCisJICAKKwkgIGlmIChjb3VudCA9PSAwKSAvKiBjb3VudCA9PSAwIG1lYW5zIDI1NiBiaXRzICovCisJICAgIGFuc3AgKz0gMzI7CisJICBlbHNlCisJICAgIGFuc3AgKz0gKChjb3VudC0xKT4+MykrMTsKKwl9CisgICAgICBlbHNlCisJeyAvKiBsYWJlbCB0eXBlID09IDAgQm90dG9tIHNpeCBiaXRzIGlzIGxlbmd0aCAqLworCSAgdW5zaWduZWQgaW50IGxlbiA9ICgqYW5zcCsrKSAmIDB4M2Y7CisJICAKKwkgIGlmICghQUREX1JETEVOKGhlYWRlciwgYW5zcCwgcGxlbiwgbGVuKSkKKwkgICAgcmV0dXJuIE5VTEw7CisKKwkgIGlmIChsZW4gPT0gMCkKKwkgICAgYnJlYWs7IC8qIHplcm8gbGVuZ3RoIGxhYmVsIG1hcmtzIHRoZSBlbmQuICovCisJfQorICAgIH0KKworICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIGFuc3AsIHBsZW4sIGV4dHJhYnl0ZXMpKQorICAgIHJldHVybiBOVUxMOworICAKKyAgcmV0dXJuIGFuc3A7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpza2lwX3F1ZXN0aW9ucyhIRUFERVIgKmhlYWRlciwgc2l6ZV90IHBsZW4pCit7CisgIGludCBxOworICB1bnNpZ25lZCBjaGFyICphbnNwID0gKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKzEpOworCisgIGZvciAocSA9IG50b2hzKGhlYWRlci0+cWRjb3VudCk7IHEgIT0gMDsgcS0tKQorICAgIHsKKyAgICAgIGlmICghKGFuc3AgPSBza2lwX25hbWUoYW5zcCwgaGVhZGVyLCBwbGVuLCA0KSkpCisJcmV0dXJuIE5VTEw7CisgICAgICBhbnNwICs9IDQ7IC8qIGNsYXNzIGFuZCB0eXBlICovCisgICAgfQorICAKKyAgcmV0dXJuIGFuc3A7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpza2lwX3NlY3Rpb24odW5zaWduZWQgY2hhciAqYW5zcCwgaW50IGNvdW50LCBIRUFERVIgKmhlYWRlciwgc2l6ZV90IHBsZW4pCit7CisgIGludCBpLCByZGxlbjsKKyAgCisgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIGlmICghKGFuc3AgPSBza2lwX25hbWUoYW5zcCwgaGVhZGVyLCBwbGVuLCAxMCkpKQorCXJldHVybiBOVUxMOyAKKyAgICAgIGFuc3AgKz0gODsgLyogdHlwZSwgY2xhc3MsIFRUTCAqLworICAgICAgR0VUU0hPUlQocmRsZW4sIGFuc3ApOworICAgICAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBhbnNwLCBwbGVuLCByZGxlbikpCisJcmV0dXJuIE5VTEw7CisgICAgfQorCisgIHJldHVybiBhbnNwOworfQorCisvKiBDUkMgdGhlIHF1ZXN0aW9uIHNlY3Rpb24uIFRoaXMgaXMgdXNlZCB0byBzYWZlbHkgZGV0ZWN0IHF1ZXJ5IAorICAgcmV0cmFuc21pc2lvbiBhbmQgdG8gZGV0ZWN0IGFuc3dlcnMgdG8gcXVlc3Rpb25zIHdlIGRpZG4ndCBhc2ssIHdoaWNoIAorICAgbWlnaHQgYmUgcG9pc29uaW5nIGF0dGFja3MuIE5vdGUgdGhhdCB3ZSBkZWNvZGUgdGhlIG5hbWUgcmF0aGVyIAorICAgdGhhbiBDUkMgdGhlIHJhdyBieXRlcywgc2luY2UgcmVwbGllcyBtaWdodCBiZSBjb21wcmVzc2VkIGRpZmZlcmVudGx5LiAKKyAgIFdlIGlnbm9yZSBjYXNlIGluIHRoZSBuYW1lcyBmb3IgdGhlIHNhbWUgcmVhc29uLiBSZXR1cm4gYWxsLW9uZXMKKyAgIGlmIHRoZXJlIGlzIG5vdCBxdWVzdGlvbiBzZWN0aW9uLiAqLwordW5zaWduZWQgaW50IHF1ZXN0aW9uc19jcmMoSEVBREVSICpoZWFkZXIsIHNpemVfdCBwbGVuLCBjaGFyICpuYW1lKQoreworICBpbnQgcTsKKyAgdW5zaWduZWQgaW50IGNyYyA9IDB4ZmZmZmZmZmY7CisgIHVuc2lnbmVkIGNoYXIgKnAxLCAqcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKworICBmb3IgKHEgPSBudG9ocyhoZWFkZXItPnFkY291bnQpOyBxICE9IDA7IHEtLSkgCisgICAgeworICAgICAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBwbGVuLCAmcCwgbmFtZSwgMSwgNCkpCisJcmV0dXJuIGNyYzsgLyogYmFkIHBhY2tldCAqLworICAgICAgCisgICAgICBmb3IgKHAxID0gKHVuc2lnbmVkIGNoYXIgKiluYW1lOyAqcDE7IHAxKyspCisJeworCSAgaW50IGkgPSA4OworCSAgY2hhciBjID0gKnAxOworCisJICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpCisJICAgIGMgKz0gJ2EnIC0gJ0EnOworCisJICBjcmMgXj0gYyA8PCAyNDsKKwkgIHdoaWxlIChpLS0pCisJICAgIGNyYyA9IGNyYyAmIDB4ODAwMDAwMDAgPyAoY3JjIDw8IDEpIF4gMHgwNGMxMWRiNyA6IGNyYyA8PCAxOworCX0KKyAgICAgIAorICAgICAgLyogQ1JDIHRoZSBjbGFzcyBhbmQgdHlwZSBhcyB3ZWxsICovCisgICAgICBmb3IgKHAxID0gcDsgcDEgPCBwKzQ7IHAxKyspCisJeworCSAgaW50IGkgPSA4OworCSAgY3JjIF49ICpwMSA8PCAyNDsKKwkgIHdoaWxlIChpLS0pCisJICAgIGNyYyA9IGNyYyAmIDB4ODAwMDAwMDAgPyAoY3JjIDw8IDEpIF4gMHgwNGMxMWRiNyA6IGNyYyA8PCAxOworCX0KKworICAgICAgcCArPSA0OworICAgICAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCAwKSkKKwlyZXR1cm4gY3JjOyAvKiBiYWQgcGFja2V0ICovCisgICAgfQorCisgIHJldHVybiBjcmM7Cit9CisKKworc2l6ZV90IHJlc2l6ZV9wYWNrZXQoSEVBREVSICpoZWFkZXIsIHNpemVfdCBwbGVuLCB1bnNpZ25lZCBjaGFyICpwaGVhZGVyLCBzaXplX3QgaGxlbikKK3sKKyAgdW5zaWduZWQgY2hhciAqYW5zcCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcGxlbik7CisgICAgCisgIC8qIGlmIHBhY2tldCBpcyBtYWxmb3JtZWQsIGp1c3QgcmV0dXJuIGFzLWlzLiAqLworICBpZiAoIWFuc3ApCisgICAgcmV0dXJuIHBsZW47CisgIAorICBpZiAoIShhbnNwID0gc2tpcF9zZWN0aW9uKGFuc3AsIG50b2hzKGhlYWRlci0+YW5jb3VudCkgKyBudG9ocyhoZWFkZXItPm5zY291bnQpICsgbnRvaHMoaGVhZGVyLT5hcmNvdW50KSwKKwkJCSAgICBoZWFkZXIsIHBsZW4pKSkKKyAgICByZXR1cm4gcGxlbjsKKyAgICAKKyAgLyogcmVzdG9yZSBwc2V1ZG9oZWFkZXIgKi8KKyAgaWYgKHBoZWFkZXIgJiYgbnRvaHMoaGVhZGVyLT5hcmNvdW50KSA9PSAwKQorICAgIHsKKyAgICAgIC8qIG11c3QgdXNlIG1lbW1vdmUsIG1heSBvdmVybGFwICovCisgICAgICBtZW1tb3ZlKGFuc3AsIHBoZWFkZXIsIGhsZW4pOworICAgICAgaGVhZGVyLT5hcmNvdW50ID0gaHRvbnMoMSk7CisgICAgICBhbnNwICs9IGhsZW47CisgICAgfQorCisgIHJldHVybiBhbnNwIC0gKHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7Cit9CisKK3Vuc2lnbmVkIGNoYXIgKmZpbmRfcHNldWRvaGVhZGVyKEhFQURFUiAqaGVhZGVyLCBzaXplX3QgcGxlbiwgc2l6ZV90ICAqbGVuLCB1bnNpZ25lZCBjaGFyICoqcCwgaW50ICppc19zaWduKQoreworICAvKiBTZWUgaWYgcGFja2V0IGhhcyBhbiBSRkMyNjcxIHBzZXVkb2hlYWRlciwgYW5kIGlmIHNvIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuIAorICAgICBhbHNvIHJldHVybiBsZW5ndGggb2YgcHNldWRvaGVhZGVyIGluICpsZW4gYW5kIHBvaW50ZXIgdG8gdGhlIFVEUCBzaXplIGluICpwCisgICAgIEZpbmFsbHksIGNoZWNrIHRvIHNlZSBpZiBhIHBhY2tldCBpcyBzaWduZWQuIElmIGl0IGlzIHdlIGNhbm5vdCBjaGFuZ2UgYSBzaW5nbGUgYml0IGJlZm9yZQorICAgICBmb3J3YXJkaW5nLiBXZSBsb29rIGZvciBTSUcgYW5kIFRTSUcgaW4gdGhlIGFkZGl0aW9uIHNlY3Rpb24sIGFuZCBUS0VZIHF1ZXJpZXMgKGZvciBHU1MtVFNJRykgKi8KKyAgCisgIGludCBpLCBhcmNvdW50ID0gbnRvaHMoaGVhZGVyLT5hcmNvdW50KTsKKyAgdW5zaWduZWQgY2hhciAqYW5zcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKyAgdW5zaWduZWQgc2hvcnQgcmRsZW4sIHR5cGUsIGNsYXNzOworICB1bnNpZ25lZCBjaGFyICpyZXQgPSBOVUxMOworCisgIGlmIChpc19zaWduKQorICAgIHsKKyAgICAgICppc19zaWduID0gMDsKKworICAgICAgaWYgKGhlYWRlci0+b3Bjb2RlID09IFFVRVJZKQorCXsKKwkgIGZvciAoaSA9IG50b2hzKGhlYWRlci0+cWRjb3VudCk7IGkgIT0gMDsgaS0tKQorCSAgICB7CisJICAgICAgaWYgKCEoYW5zcCA9IHNraXBfbmFtZShhbnNwLCBoZWFkZXIsIHBsZW4sIDQpKSkKKwkJcmV0dXJuIE5VTEw7CisJICAgICAgCisJICAgICAgR0VUU0hPUlQodHlwZSwgYW5zcCk7IAorCSAgICAgIEdFVFNIT1JUKGNsYXNzLCBhbnNwKTsKKwkgICAgICAKKwkgICAgICBpZiAoY2xhc3MgPT0gQ19JTiAmJiB0eXBlID09IFRfVEtFWSkKKwkJKmlzX3NpZ24gPSAxOworCSAgICB9CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmICghKGFuc3AgPSBza2lwX3F1ZXN0aW9ucyhoZWFkZXIsIHBsZW4pKSkKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisgICAgCisgIGlmIChhcmNvdW50ID09IDApCisgICAgcmV0dXJuIE5VTEw7CisgIAorICBpZiAoIShhbnNwID0gc2tpcF9zZWN0aW9uKGFuc3AsIG50b2hzKGhlYWRlci0+YW5jb3VudCkgKyBudG9ocyhoZWFkZXItPm5zY291bnQpLCBoZWFkZXIsIHBsZW4pKSkKKyAgICByZXR1cm4gTlVMTDsgCisgIAorICBmb3IgKGkgPSAwOyBpIDwgYXJjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnNhdmUsICpzdGFydCA9IGFuc3A7CisgICAgICBpZiAoIShhbnNwID0gc2tpcF9uYW1lKGFuc3AsIGhlYWRlciwgcGxlbiwgMTApKSkKKwlyZXR1cm4gTlVMTDsgCisKKyAgICAgIEdFVFNIT1JUKHR5cGUsIGFuc3ApOworICAgICAgc2F2ZSA9IGFuc3A7CisgICAgICBHRVRTSE9SVChjbGFzcywgYW5zcCk7CisgICAgICBhbnNwICs9IDQ7IC8qIFRUTCAqLworICAgICAgR0VUU0hPUlQocmRsZW4sIGFuc3ApOworICAgICAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBhbnNwLCBwbGVuLCByZGxlbikpCisJcmV0dXJuIE5VTEw7CisgICAgICBpZiAodHlwZSA9PSBUX09QVCkKKwl7CisJICBpZiAobGVuKQorCSAgICAqbGVuID0gYW5zcCAtIHN0YXJ0OworCSAgaWYgKHApCisJICAgICpwID0gc2F2ZTsKKwkgIHJldCA9IHN0YXJ0OworCX0KKyAgICAgIGVsc2UgaWYgKGlzX3NpZ24gJiYgCisJICAgICAgIGkgPT0gYXJjb3VudCAtIDEgJiYgCisJICAgICAgIGNsYXNzID09IENfQU5ZICYmIAorCSAgICAgICAodHlwZSA9PSBUX1NJRyB8fCB0eXBlID09IFRfVFNJRykpCisJKmlzX3NpZ24gPSAxOworICAgIH0KKyAgCisgIHJldHVybiByZXQ7Cit9CisgICAgICAKKyAgCisvKiBpcyBhZGRyIGluIHRoZSBub24tZ2xvYmFsbHktcm91dGVkIElQIHNwYWNlPyAqLyAKK3N0YXRpYyBpbnQgcHJpdmF0ZV9uZXQoc3RydWN0IGluX2FkZHIgYWRkcikgCit7CisgIGluX2FkZHJfdCBpcF9hZGRyID0gbnRvaGwoYWRkci5zX2FkZHIpOworCisgIHJldHVybgorICAgICgoaXBfYWRkciAmIDB4RkYwMDAwMDApID09IDB4N0YwMDAwMDApICAvKiAxMjcuMC4wLjAvOCAgICAobG9vcGJhY2spICovIHx8IAorICAgICgoaXBfYWRkciAmIDB4RkZGRjAwMDApID09IDB4QzBBODAwMDApICAvKiAxOTIuMTY4LjAuMC8xNiAocHJpdmF0ZSkgICovIHx8CisgICAgKChpcF9hZGRyICYgMHhGRjAwMDAwMCkgPT0gMHgwQTAwMDAwMCkgIC8qIDEwLjAuMC4wLzggICAgIChwcml2YXRlKSAgKi8gfHwKKyAgICAoKGlwX2FkZHIgJiAweEZGRjAwMDAwKSA9PSAweEFDMTAwMDAwKSAgLyogMTcyLjE2LjAuMC8xMiAgKHByaXZhdGUpICAqLyB8fAorICAgICgoaXBfYWRkciAmIDB4RkZGRjAwMDApID09IDB4QTlGRTAwMDApICAvKiAxNjkuMjU0LjAuMC8xNiAoemVyb2NvbmYpICovIDsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmRvX2RvY3Rvcih1bnNpZ25lZCBjaGFyICpwLCBpbnQgY291bnQsIEhFQURFUiAqaGVhZGVyLCBzaXplX3QgcWxlbikKK3sKKyAgaW50IGksIHF0eXBlLCBxY2xhc3MsIHJkbGVuOworICB1bnNpZ25lZCBsb25nIHR0bDsKKworICBmb3IgKGkgPSBjb3VudDsgaSAhPSAwOyBpLS0pCisgICAgeworICAgICAgaWYgKCEocCA9IHNraXBfbmFtZShwLCBoZWFkZXIsIHFsZW4sIDEwKSkpCisJcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKyAgICAgIAorICAgICAgR0VUU0hPUlQocXR5cGUsIHApOyAKKyAgICAgIEdFVFNIT1JUKHFjbGFzcywgcCk7CisgICAgICBHRVRMT05HKHR0bCwgcCk7CisgICAgICBHRVRTSE9SVChyZGxlbiwgcCk7CisgICAgICAKKyAgICAgIGlmICgocWNsYXNzID09IENfSU4pICYmIChxdHlwZSA9PSBUX0EpKQorCXsKKwkgIHN0cnVjdCBkb2N0b3IgKmRvY3RvcjsKKwkgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisJICAKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcWxlbiwgSU5BRERSU1opKQorCSAgICByZXR1cm4gMDsKKwkgICAKKwkgICAvKiBhbGlnbm1lbnQgKi8KKwkgIG1lbWNweSgmYWRkciwgcCwgSU5BRERSU1opOworCSAgCisJICBmb3IgKGRvY3RvciA9IGRhZW1vbi0+ZG9jdG9yczsgZG9jdG9yOyBkb2N0b3IgPSBkb2N0b3ItPm5leHQpCisJICAgIHsKKwkgICAgICBpZiAoZG9jdG9yLT5lbmQuc19hZGRyID09IDApCisJCXsKKwkJICBpZiAoIWlzX3NhbWVfbmV0KGRvY3Rvci0+aW4sIGFkZHIsIGRvY3Rvci0+bWFzaykpCisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICAgIGVsc2UgaWYgKG50b2hsKGRvY3Rvci0+aW4uc19hZGRyKSA+IG50b2hsKGFkZHIuc19hZGRyKSB8fCAKKwkJICAgICAgIG50b2hsKGRvY3Rvci0+ZW5kLnNfYWRkcikgPCBudG9obChhZGRyLnNfYWRkcikpCisJCWNvbnRpbnVlOworCSAgICAgCisJICAgICAgYWRkci5zX2FkZHIgJj0gfmRvY3Rvci0+bWFzay5zX2FkZHI7CisJICAgICAgYWRkci5zX2FkZHIgfD0gKGRvY3Rvci0+b3V0LnNfYWRkciAmIGRvY3Rvci0+bWFzay5zX2FkZHIpOworCSAgICAgIC8qIFNpbmNlIHdlIG11bmdlZCB0aGUgZGF0YSwgdGhlIHNlcnZlciBpdCBjYW1lIGZyb20gaXMgbm8gbG9uZ2VyIGF1dGhvcml0YXRpdmUgKi8KKwkgICAgICBoZWFkZXItPmFhID0gMDsKKwkgICAgICBtZW1jcHkocCwgJmFkZHIsIElOQUREUlNaKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAgIAorICAgICAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBwLCBxbGVuLCByZGxlbikpCisJIHJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisgICAgfQorICAKKyAgcmV0dXJuIHA7IAorfQorCitzdGF0aWMgaW50IGZpbmRfc29hKEhFQURFUiAqaGVhZGVyLCBzaXplX3QgcWxlbikKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgaW50IHF0eXBlLCBxY2xhc3MsIHJkbGVuOworICB1bnNpZ25lZCBsb25nIHR0bCwgbWludHRsID0gVUxPTkdfTUFYOworICBpbnQgaSwgZm91bmRfc29hID0gMDsKKyAgCisgIC8qIGZpcnN0IG1vdmUgdG8gTlMgc2VjdGlvbiBhbmQgZmluZCBUVEwgZnJvbSBhbnkgU09BIHNlY3Rpb24gKi8KKyAgaWYgKCEocCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcWxlbikpIHx8CisgICAgICAhKHAgPSBkb19kb2N0b3IocCwgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSwgaGVhZGVyLCBxbGVuKSkpCisgICAgcmV0dXJuIDA7ICAvKiBiYWQgcGFja2V0ICovCisgIAorICBmb3IgKGkgPSBudG9ocyhoZWFkZXItPm5zY291bnQpOyBpICE9IDA7IGktLSkKKyAgICB7CisgICAgICBpZiAoIShwID0gc2tpcF9uYW1lKHAsIGhlYWRlciwgcWxlbiwgMTApKSkKKwlyZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworICAgICAgCisgICAgICBHRVRTSE9SVChxdHlwZSwgcCk7IAorICAgICAgR0VUU0hPUlQocWNsYXNzLCBwKTsKKyAgICAgIEdFVExPTkcodHRsLCBwKTsKKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBwKTsKKyAgICAgIAorICAgICAgaWYgKChxY2xhc3MgPT0gQ19JTikgJiYgKHF0eXBlID09IFRfU09BKSkKKwl7CisJICBmb3VuZF9zb2EgPSAxOworCSAgaWYgKHR0bCA8IG1pbnR0bCkKKwkgICAgbWludHRsID0gdHRsOworCisJICAvKiBNTkFNRSAqLworCSAgaWYgKCEocCA9IHNraXBfbmFtZShwLCBoZWFkZXIsIHFsZW4sIDApKSkKKwkgICAgcmV0dXJuIDA7CisJICAvKiBSTkFNRSAqLworCSAgaWYgKCEocCA9IHNraXBfbmFtZShwLCBoZWFkZXIsIHFsZW4sIDIwKSkpCisJICAgIHJldHVybiAwOworCSAgcCArPSAxNjsgLyogU0VSSUFMIFJFRlJFU0ggUkVUUlkgRVhQSVJFICovCisJICAKKwkgIEdFVExPTkcodHRsLCBwKTsgLyogbWluVFRMICovCisJICBpZiAodHRsIDwgbWludHRsKQorCSAgICBtaW50dGwgPSB0dGw7CisJfQorICAgICAgZWxzZSBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAsIHFsZW4sIHJkbGVuKSkKKwlyZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworICAgIH0KKyAgCisgIC8qIHJld3JpdGUgYWRkcmVzc2VzIGluIGFkZGl0aW9hbCBzZWN0aW9uIHRvbyAqLworICBpZiAoIWRvX2RvY3RvcihwLCBudG9ocyhoZWFkZXItPmFyY291bnQpLCBoZWFkZXIsIHFsZW4pKQorICAgIHJldHVybiAwOworICAKKyAgaWYgKCFmb3VuZF9zb2EpCisgICAgbWludHRsID0gZGFlbW9uLT5uZWdfdHRsOworCisgIHJldHVybiBtaW50dGw7Cit9CisKKy8qIE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIGNvZGUgY2FuIGNyZWF0ZSBDTkFNRSBjaGFpbnMgdGhhdCBkb24ndCBwb2ludCB0byBhIHJlYWwgcmVjb3JkLAorICAgZWl0aGVyIGJlY2F1c2Ugb2YgbGFjayBvZiBtZW1vcnksIG9yIGxhY2sgb2YgU09BIHJlY29yZHMuICBUaGVzZSBhcmUgdHJlYXRlZCBieSB0aGUgY2FjaGUgY29kZSBhcyAKKyAgIGV4cGlyZWQgYW5kIGNsZWFuZWQgb3V0IHRoYXQgd2F5LiAKKyAgIFJldHVybiAxIGlmIHdlIHJlamVjdCBhbiBhZGRyZXNzIGJlY2F1c2UgaXQgbG9vayBsaWtlIHBhcmN0IG9mIGRucy1yZWJpbmRpbmcgYXR0YWNrLiAqLworaW50IGV4dHJhY3RfYWRkcmVzc2VzKEhFQURFUiAqaGVhZGVyLCBzaXplX3QgcWxlbiwgY2hhciAqbmFtZSwgdGltZV90IG5vdykKK3sKKyAgdW5zaWduZWQgY2hhciAqcCwgKnAxLCAqZW5kcnIsICpuYW1lcDsKKyAgaW50IGksIGosIHF0eXBlLCBxY2xhc3MsIGFxdHlwZSwgYXFjbGFzcywgYXJkbGVuLCByZXMsIHNlYXJjaGVkX3NvYSA9IDA7CisgIHVuc2lnbmVkIGxvbmcgdHRsID0gMDsKKyAgc3RydWN0IGFsbF9hZGRyIGFkZHI7CisKKyAgY2FjaGVfc3RhcnRfaW5zZXJ0KCk7CisKKyAgLyogZmluZF9zb2EgaXMgbmVlZGVkIGZvciBkbnNfZG9jdG9yIHNpZGUtZWZmZWN0cywgc28gZG9uJ3QgY2FsbCBpdCBsYXppbHkgaWYgdGhlcmUgYXJlIGFueS4gKi8KKyAgaWYgKGRhZW1vbi0+ZG9jdG9ycykKKyAgICB7CisgICAgICBzZWFyY2hlZF9zb2EgPSAxOworICAgICAgdHRsID0gZmluZF9zb2EoaGVhZGVyLCBxbGVuKTsKKyAgICB9CisgIAorICAvKiBnbyB0aHJvdWdoIHRoZSBxdWVzdGlvbnMuICovCisgIHAgPSAodW5zaWduZWQgY2hhciAqKShoZWFkZXIrMSk7CisgIAorICBmb3IgKGkgPSBudG9ocyhoZWFkZXItPnFkY291bnQpOyBpICE9IDA7IGktLSkKKyAgICB7CisgICAgICBpbnQgZm91bmQgPSAwLCBjbmFtZV9jb3VudCA9IDU7CisgICAgICBzdHJ1Y3QgY3JlYyAqY3BwID0gTlVMTDsKKyAgICAgIGludCBmbGFncyA9IGhlYWRlci0+cmNvZGUgPT0gTlhET01BSU4gPyBGX05YRE9NQUlOIDogMDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgY3R0bCA9IFVMT05HX01BWCwgYXR0bDsKKyAgICAgIAorICAgICAgbmFtZXAgPSBwOworICAgICAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBxbGVuLCAmcCwgbmFtZSwgMSwgNCkpCisJcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKyAgICAgICAgICAgCisgICAgICBHRVRTSE9SVChxdHlwZSwgcCk7IAorICAgICAgR0VUU0hPUlQocWNsYXNzLCBwKTsKKyAgICAgIAorICAgICAgaWYgKHFjbGFzcyAhPSBDX0lOKQorCWNvbnRpbnVlOworCisgICAgICAvKiBQVFJzOiB3ZSBjaGFzZSBDTkFNRXMgaGVyZSwgc2luY2Ugd2UgaGF2ZSBubyB3YXkgdG8gCisJIHJlcHJlc2VudCB0aGVtIGluIHRoZSBjYWNoZS4gKi8KKyAgICAgIGlmIChxdHlwZSA9PSBUX1BUUikKKwl7IAorCSAgaW50IG5hbWVfZW5jb2RpbmcgPSBpbl9hcnBhX25hbWVfMl9hZGRyKG5hbWUsICZhZGRyKTsKKwkgIAorCSAgaWYgKCFuYW1lX2VuY29kaW5nKQorCSAgICBjb250aW51ZTsKKworCSAgaWYgKCEoZmxhZ3MgJiBGX05YRE9NQUlOKSkKKwkgICAgeworCSAgICBjbmFtZV9sb29wOgorCSAgICAgIGlmICghKHAxID0gc2tpcF9xdWVzdGlvbnMoaGVhZGVyLCBxbGVuKSkpCisJCXJldHVybiAwOworCSAgICAgIAorCSAgICAgIGZvciAoaiA9IG50b2hzKGhlYWRlci0+YW5jb3VudCk7IGogIT0gMDsgai0tKSAKKwkJeworCQkgIHVuc2lnbmVkIGNoYXIgKnRtcCA9IG5hbWVwOworCQkgIC8qIHRoZSBsb29wIGJvZHkgb3ZlcndyaXRlcyB0aGUgb3JpZ2luYWwgbmFtZSwgc28gZ2V0IGl0IGJhY2sgaGVyZS4gKi8KKwkJICBpZiAoIWV4dHJhY3RfbmFtZShoZWFkZXIsIHFsZW4sICZ0bXAsIG5hbWUsIDEsIDApIHx8CisJCSAgICAgICEocmVzID0gZXh0cmFjdF9uYW1lKGhlYWRlciwgcWxlbiwgJnAxLCBuYW1lLCAwLCAxMCkpKQorCQkgICAgcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKwkJICAKKwkJICBHRVRTSE9SVChhcXR5cGUsIHAxKTsgCisJCSAgR0VUU0hPUlQoYXFjbGFzcywgcDEpOworCQkgIEdFVExPTkcoYXR0bCwgcDEpOworCQkgIEdFVFNIT1JUKGFyZGxlbiwgcDEpOworCQkgIGVuZHJyID0gcDErYXJkbGVuOworCQkgIAorCQkgIC8qIFRUTCBvZiByZWNvcmQgaXMgbWluaW11bSBvZiBDTkFNRVMgYW5kIFBUUiAqLworCQkgIGlmIChhdHRsIDwgY3R0bCkKKwkJICAgIGN0dGwgPSBhdHRsOworCisJCSAgaWYgKGFxY2xhc3MgPT0gQ19JTiAmJiByZXMgIT0gMiAmJiAoYXF0eXBlID09IFRfQ05BTUUgfHwgYXF0eXBlID09IFRfUFRSKSkKKwkJICAgIHsKKwkJICAgICAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBxbGVuLCAmcDEsIG5hbWUsIDEsIDApKQorCQkJcmV0dXJuIDA7CisJCSAgICAgIAorCQkgICAgICBpZiAoYXF0eXBlID09IFRfQ05BTUUpCisJCQl7CisJCQkgIGlmICghY25hbWVfY291bnQtLSkKKwkJCSAgICByZXR1cm4gMDsgLyogbG9vcGVkIENOQU1FUyAqLworCQkJICBnb3RvIGNuYW1lX2xvb3A7CisJCQl9CisJCSAgICAgIAorCQkgICAgICBjYWNoZV9pbnNlcnQobmFtZSwgJmFkZHIsIG5vdywgY3R0bCwgbmFtZV9lbmNvZGluZyB8IEZfUkVWRVJTRSk7CisJCSAgICAgIGZvdW5kID0gMTsgCisJCSAgICB9CisJCSAgCisJCSAgcDEgPSBlbmRycjsKKwkJICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAxLCBxbGVuLCAwKSkKKwkJICAgIHJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisJCX0KKwkgICAgfQorCSAgCisJICAgaWYgKCFmb3VuZCAmJiAhKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT19ORUcpKQorCSAgICB7CisJICAgICAgaWYgKCFzZWFyY2hlZF9zb2EpCisJCXsKKwkJICBzZWFyY2hlZF9zb2EgPSAxOworCQkgIHR0bCA9IGZpbmRfc29hKGhlYWRlciwgcWxlbik7CisJCX0KKwkgICAgICBpZiAodHRsKQorCQljYWNoZV9pbnNlcnQoTlVMTCwgJmFkZHIsIG5vdywgdHRsLCBuYW1lX2VuY29kaW5nIHwgRl9SRVZFUlNFIHwgRl9ORUcgfCBmbGFncyk7CQorCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIGV2ZXJ5dGhpbmcgb3RoZXIgdGhhbiBQVFIgKi8KKwkgIHN0cnVjdCBjcmVjICpuZXdjOworCSAgaW50IGFkZHJsZW47CisKKwkgIGlmIChxdHlwZSA9PSBUX0EpCisJICAgIHsKKwkgICAgICBhZGRybGVuID0gSU5BRERSU1o7CisJICAgICAgZmxhZ3MgfD0gRl9JUFY0OworCSAgICB9CisjaWZkZWYgSEFWRV9JUFY2CisJICBlbHNlIGlmIChxdHlwZSA9PSBUX0FBQUEpCisJICAgIHsKKwkgICAgICBhZGRybGVuID0gSU42QUREUlNaOworCSAgICAgIGZsYWdzIHw9IEZfSVBWNjsKKwkgICAgfQorI2VuZGlmCisJICBlbHNlIAorCSAgICBjb250aW51ZTsKKwkgICAgCisJICBpZiAoIShmbGFncyAmIEZfTlhET01BSU4pKQorCSAgICB7CisJICAgIGNuYW1lX2xvb3AxOgorCSAgICAgIGlmICghKHAxID0gc2tpcF9xdWVzdGlvbnMoaGVhZGVyLCBxbGVuKSkpCisJCXJldHVybiAwOworCSAgICAgIAorCSAgICAgIGZvciAoaiA9IG50b2hzKGhlYWRlci0+YW5jb3VudCk7IGogIT0gMDsgai0tKSAKKwkJeworCQkgIGlmICghKHJlcyA9IGV4dHJhY3RfbmFtZShoZWFkZXIsIHFsZW4sICZwMSwgbmFtZSwgMCwgMTApKSkKKwkJICAgIHJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisJCSAgCisJCSAgR0VUU0hPUlQoYXF0eXBlLCBwMSk7IAorCQkgIEdFVFNIT1JUKGFxY2xhc3MsIHAxKTsKKwkJICBHRVRMT05HKGF0dGwsIHAxKTsKKwkJICBHRVRTSE9SVChhcmRsZW4sIHAxKTsKKwkJICBlbmRyciA9IHAxK2FyZGxlbjsKKwkJICAKKwkJICBpZiAoYXFjbGFzcyA9PSBDX0lOICYmIHJlcyAhPSAyICYmIChhcXR5cGUgPT0gVF9DTkFNRSB8fCBhcXR5cGUgPT0gcXR5cGUpKQorCQkgICAgeworCQkgICAgICBpZiAoYXF0eXBlID09IFRfQ05BTUUpCisJCQl7CisJCQkgIGlmICghY25hbWVfY291bnQtLSkKKwkJCSAgICByZXR1cm4gMDsgLyogbG9vcGVkIENOQU1FUyAqLworCQkJICBuZXdjID0gY2FjaGVfaW5zZXJ0KG5hbWUsIE5VTEwsIG5vdywgYXR0bCwgRl9DTkFNRSB8IEZfRk9SV0FSRCk7CisJCQkgIGlmIChuZXdjICYmIGNwcCkKKwkJCSAgICB7CisJCQkgICAgICBjcHAtPmFkZHIuY25hbWUuY2FjaGUgPSBuZXdjOworCQkJICAgICAgY3BwLT5hZGRyLmNuYW1lLnVpZCA9IG5ld2MtPnVpZDsKKwkJCSAgICB9CisKKwkJCSAgY3BwID0gbmV3YzsKKwkJCSAgaWYgKGF0dGwgPCBjdHRsKQorCQkJICAgIGN0dGwgPSBhdHRsOworCQkJICAKKwkJCSAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBxbGVuLCAmcDEsIG5hbWUsIDEsIDApKQorCQkJICAgIHJldHVybiAwOworCQkJICBnb3RvIGNuYW1lX2xvb3AxOworCQkJfQorCQkgICAgICBlbHNlCisJCQl7CisJCQkgIGZvdW5kID0gMTsKKwkJCSAgCisJCQkgIC8qIGNvcHkgYWRkcmVzcyBpbnRvIGFsaWduZWQgc3RvcmFnZSAqLworCQkJICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAxLCBxbGVuLCBhZGRybGVuKSkKKwkJCSAgICByZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworCQkJICBtZW1jcHkoJmFkZHIsIHAxLCBhZGRybGVuKTsKKwkJCSAgCisJCQkgIC8qIGNoZWNrIGZvciByZXR1cm5lZCBhZGRyZXNzIGluIHByaXZhdGUgc3BhY2UgKi8KKwkJCSAgaWYgKChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTk9fUkVCSU5EKSAmJgorCQkJICAgICAgKGZsYWdzICYgRl9JUFY0KSAmJgorCQkJICAgICAgcHJpdmF0ZV9uZXQoYWRkci5hZGRyLmFkZHI0KSkKKwkJCSAgICByZXR1cm4gMTsKKwkJCSAgCisJCQkgIG5ld2MgPSBjYWNoZV9pbnNlcnQobmFtZSwgJmFkZHIsIG5vdywgYXR0bCwgZmxhZ3MgfCBGX0ZPUldBUkQpOworCQkJICBpZiAobmV3YyAmJiBjcHApCisJCQkgICAgeworCQkJICAgICAgY3BwLT5hZGRyLmNuYW1lLmNhY2hlID0gbmV3YzsKKwkJCSAgICAgIGNwcC0+YWRkci5jbmFtZS51aWQgPSBuZXdjLT51aWQ7CisJCQkgICAgfQorCQkJICBjcHAgPSBOVUxMOworCQkJfQorCQkgICAgfQorCQkgIAorCQkgIHAxID0gZW5kcnI7CisJCSAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwMSwgcWxlbiwgMCkpCisJCSAgICByZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworCQl9CisJICAgIH0KKwkgIAorCSAgaWYgKCFmb3VuZCAmJiAhKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT19ORUcpKQorCSAgICB7CisJICAgICAgaWYgKCFzZWFyY2hlZF9zb2EpCisJCXsKKwkJICBzZWFyY2hlZF9zb2EgPSAxOworCQkgIHR0bCA9IGZpbmRfc29hKGhlYWRlciwgcWxlbik7CisJCX0KKwkgICAgICAvKiBJZiB0aGVyZSdzIG5vIFNPQSB0byBnZXQgdGhlIFRUTCBmcm9tLCBidXQgdGhlcmUgaXMgYSBDTkFNRSAKKwkJIHBvaW50aW5nIGF0IHRoaXMsIGluaGVyaXQgaXRzIFRUTCAqLworCSAgICAgIGlmICh0dGwgfHwgY3BwKQorCQl7CisJCSAgbmV3YyA9IGNhY2hlX2luc2VydChuYW1lLCBOVUxMLCBub3csIHR0bCA/IHR0bCA6IGN0dGwsIEZfRk9SV0FSRCB8IEZfTkVHIHwgZmxhZ3MpOwkKKwkJICBpZiAobmV3YyAmJiBjcHApCisJCSAgICB7CisJCSAgICAgIGNwcC0+YWRkci5jbmFtZS5jYWNoZSA9IG5ld2M7CisJCSAgICAgIGNwcC0+YWRkci5jbmFtZS51aWQgPSBuZXdjLT51aWQ7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgIAorICAvKiBEb24ndCBwdXQgc3R1ZmYgZnJvbSBhIHRydW5jYXRlZCBwYWNrZXQgaW50byB0aGUgY2FjaGUsIGJ1dCBkbyBldmVyeXRoaW5nIGVsc2UgKi8KKyAgaWYgKCFoZWFkZXItPnRjKQorICAgIGNhY2hlX2VuZF9pbnNlcnQoKTsKKworICByZXR1cm4gMDsKK30KKworLyogSWYgdGhlIHBhY2tldCBob2xkcyBleGFjdGx5IG9uZSBxdWVyeQorICAgcmV0dXJuIEZfSVBWNCBvciBGX0lQVjYgIGFuZCBsZWF2ZSB0aGUgbmFtZSBmcm9tIHRoZSBxdWVyeSBpbiBuYW1lLiAKKyAgIEFidXNlIEZfQklHTkFNRSB0byBpbmRpY2F0ZSBhbiBOUyBxdWVyeSAtIHl1Y2suICovCisKK3Vuc2lnbmVkIHNob3J0IGV4dHJhY3RfcmVxdWVzdChIRUFERVIgKmhlYWRlciwgc2l6ZV90IHFsZW4sIGNoYXIgKm5hbWUsIHVuc2lnbmVkIHNob3J0ICp0eXBlcCkKK3sKKyAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKyAgaW50IHF0eXBlLCBxY2xhc3M7CisKKyAgaWYgKHR5cGVwKQorICAgICp0eXBlcCA9IDA7CisKKyAgaWYgKG50b2hzKGhlYWRlci0+cWRjb3VudCkgIT0gMSB8fCBoZWFkZXItPm9wY29kZSAhPSBRVUVSWSkKKyAgICByZXR1cm4gMDsgLyogbXVzdCBiZSBleGFjdGx5IG9uZSBxdWVyeS4gKi8KKyAgCisgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcWxlbiwgJnAsIG5hbWUsIDEsIDQpKQorICAgIHJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisgICAKKyAgR0VUU0hPUlQocXR5cGUsIHApOyAKKyAgR0VUU0hPUlQocWNsYXNzLCBwKTsKKworICBpZiAodHlwZXApCisgICAgKnR5cGVwID0gcXR5cGU7CisKKyAgaWYgKHFjbGFzcyA9PSBDX0lOKQorICAgIHsKKyAgICAgIGlmIChxdHlwZSA9PSBUX0EpCisJcmV0dXJuIEZfSVBWNDsKKyAgICAgIGlmIChxdHlwZSA9PSBUX0FBQUEpCisJcmV0dXJuIEZfSVBWNjsKKyAgICAgIGlmIChxdHlwZSA9PSBUX0FOWSkKKwlyZXR1cm4gIEZfSVBWNCB8IEZfSVBWNjsKKyAgICAgIGlmIChxdHlwZSA9PSBUX05TIHx8IHF0eXBlID09IFRfU09BKQorCXJldHVybiBGX1FVRVJZIHwgRl9CSUdOQU1FOworICAgIH0KKyAgCisgIHJldHVybiBGX1FVRVJZOworfQorCisKK3NpemVfdCBzZXR1cF9yZXBseShIRUFERVIgKmhlYWRlciwgc2l6ZV90IHFsZW4sCisJCXN0cnVjdCBhbGxfYWRkciAqYWRkcnAsIHVuc2lnbmVkIHNob3J0IGZsYWdzLCB1bnNpZ25lZCBsb25nIHR0bCkKK3sKKyAgdW5zaWduZWQgY2hhciAqcCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcWxlbik7CisgIAorICBoZWFkZXItPnFyID0gMTsgLyogcmVzcG9uc2UgKi8KKyAgaGVhZGVyLT5hYSA9IDA7IC8qIGF1dGhvcml0aXZlICovCisgIGhlYWRlci0+cmEgPSAxOyAvKiByZWN1cnNpb24gaWYgYXZhaWxhYmxlICovCisgIGhlYWRlci0+dGMgPSAwOyAvKiBub3QgdHJ1bmNhdGVkICovCisgIGhlYWRlci0+bnNjb3VudCA9IGh0b25zKDApOworICBoZWFkZXItPmFyY291bnQgPSBodG9ucygwKTsKKyAgaGVhZGVyLT5hbmNvdW50ID0gaHRvbnMoMCk7IC8qIG5vIGFuc3dlcnMgdW5sZXNzIGNoYW5nZWQgYmVsb3cgKi8KKyAgaWYgKGZsYWdzID09IEZfTkVHKQorICAgIGhlYWRlci0+cmNvZGUgPSBTRVJWRkFJTDsgLyogY291bGRuJ3QgZ2V0IG1lbW9yeSAqLworICBlbHNlIGlmIChmbGFncyA9PSBGX05PRVJSKQorICAgIGhlYWRlci0+cmNvZGUgPSBOT0VSUk9SOyAvKiBlbXB0eSBkb21haW4gKi8KKyAgZWxzZSBpZiAoZmxhZ3MgPT0gRl9OWERPTUFJTikKKyAgICBoZWFkZXItPnJjb2RlID0gTlhET01BSU47CisgIGVsc2UgaWYgKHAgJiYgZmxhZ3MgPT0gRl9JUFY0KQorICAgIHsgLyogd2Uga25vdyB0aGUgYWRkcmVzcyAqLworICAgICAgaGVhZGVyLT5yY29kZSA9IE5PRVJST1I7CisgICAgICBoZWFkZXItPmFuY291bnQgPSBodG9ucygxKTsKKyAgICAgIGhlYWRlci0+YWEgPSAxOworICAgICAgYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIE5VTEwsIE5VTEwsIHNpemVvZihIRUFERVIpLCAmcCwgdHRsLCBOVUxMLCBUX0EsIENfSU4sICI0IiwgYWRkcnApOworICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKyAgZWxzZSBpZiAocCAmJiBmbGFncyA9PSBGX0lQVjYpCisgICAgeworICAgICAgaGVhZGVyLT5yY29kZSA9IE5PRVJST1I7CisgICAgICBoZWFkZXItPmFuY291bnQgPSBodG9ucygxKTsKKyAgICAgIGhlYWRlci0+YWEgPSAxOworICAgICAgYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIE5VTEwsIE5VTEwsIHNpemVvZihIRUFERVIpLCAmcCwgdHRsLCBOVUxMLCBUX0FBQUEsIENfSU4sICI2IiwgYWRkcnApOworICAgIH0KKyNlbmRpZgorICBlbHNlIC8qIG5vd2hlcmUgdG8gZm9yd2FyZCB0byAqLworICAgIGhlYWRlci0+cmNvZGUgPSBSRUZVU0VEOworIAorICByZXR1cm4gcCAtICh1bnNpZ25lZCBjaGFyICopaGVhZGVyOworfQorCisvKiBjaGVjayBpZiBuYW1lIG1hdGNoZXMgbG9jYWwgbmFtZXMgaWUgZnJvbSAvZXRjL2hvc3RzIG9yIERIQ1Agb3IgbG9jYWwgbXggbmFtZXMuICovCitpbnQgY2hlY2tfZm9yX2xvY2FsX2RvbWFpbihjaGFyICpuYW1lLCB0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgY3JlYyAqY3JlY3A7CisgIHN0cnVjdCBteF9zcnZfcmVjb3JkICpteDsKKyAgc3RydWN0IHR4dF9yZWNvcmQgKnR4dDsKKyAgc3RydWN0IGludGVyZmFjZV9uYW1lICppbnRyOworICBzdHJ1Y3QgcHRyX3JlY29yZCAqcHRyOworICAKKyAgaWYgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShOVUxMLCBuYW1lLCBub3csIEZfSVBWNCB8IEZfSVBWNikpICYmCisgICAgICAoY3JlY3AtPmZsYWdzICYgKEZfSE9TVFMgfCBGX0RIQ1ApKSkKKyAgICByZXR1cm4gMTsKKyAgCisgIGZvciAobXggPSBkYWVtb24tPm14bmFtZXM7IG14OyBteCA9IG14LT5uZXh0KQorICAgIGlmIChob3N0bmFtZV9pc2VxdWFsKG5hbWUsIG14LT5uYW1lKSkKKyAgICAgIHJldHVybiAxOworCisgIGZvciAodHh0ID0gZGFlbW9uLT50eHQ7IHR4dDsgdHh0ID0gdHh0LT5uZXh0KQorICAgIGlmIChob3N0bmFtZV9pc2VxdWFsKG5hbWUsIHR4dC0+bmFtZSkpCisgICAgICByZXR1cm4gMTsKKworICBmb3IgKGludHIgPSBkYWVtb24tPmludF9uYW1lczsgaW50cjsgaW50ciA9IGludHItPm5leHQpCisgICAgaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgaW50ci0+bmFtZSkpCisgICAgICByZXR1cm4gMTsKKworICBmb3IgKHB0ciA9IGRhZW1vbi0+cHRyOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkKKyAgICBpZiAoaG9zdG5hbWVfaXNlcXVhbChuYW1lLCBwdHItPm5hbWUpKQorICAgICAgcmV0dXJuIDE7CisgCisgIHJldHVybiAwOworfQorCisvKiBJcyB0aGUgcGFja2V0IGEgcmVwbHkgd2l0aCB0aGUgYW5zd2VyIGFkZHJlc3MgZXF1YWwgdG8gYWRkcj8KKyAgIElmIHNvIG11bmcgaXMgaW50byBhbiBOWERPTUFJTiByZXBseSBhbmQgYWxzbyBwdXQgdGhhdCBpbmZvcm1hdGlvbgorICAgaW4gdGhlIGNhY2hlLiAqLworaW50IGNoZWNrX2Zvcl9ib2d1c193aWxkY2FyZChIRUFERVIgKmhlYWRlciwgc2l6ZV90IHFsZW4sIGNoYXIgKm5hbWUsIAorCQkJICAgICBzdHJ1Y3QgYm9ndXNfYWRkciAqYmFkZHIsIHRpbWVfdCBub3cpCit7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIGludCBpLCBxdHlwZSwgcWNsYXNzLCByZGxlbjsKKyAgdW5zaWduZWQgbG9uZyB0dGw7CisgIHN0cnVjdCBib2d1c19hZGRyICpiYWRkcnA7CisKKyAgLyogc2tpcCBvdmVyIHF1ZXN0aW9ucyAqLworICBpZiAoIShwID0gc2tpcF9xdWVzdGlvbnMoaGVhZGVyLCBxbGVuKSkpCisgICAgcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKworICBmb3IgKGkgPSBudG9ocyhoZWFkZXItPmFuY291bnQpOyBpICE9IDA7IGktLSkKKyAgICB7CisgICAgICBpZiAoIWV4dHJhY3RfbmFtZShoZWFkZXIsIHFsZW4sICZwLCBuYW1lLCAxLCAxMCkpCisJcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKyAgCisgICAgICBHRVRTSE9SVChxdHlwZSwgcCk7IAorICAgICAgR0VUU0hPUlQocWNsYXNzLCBwKTsKKyAgICAgIEdFVExPTkcodHRsLCBwKTsKKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBwKTsKKyAgICAgIAorICAgICAgaWYgKHFjbGFzcyA9PSBDX0lOICYmIHF0eXBlID09IFRfQSkKKwl7CisJICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHFsZW4sIElOQUREUlNaKSkKKwkgICAgcmV0dXJuIDA7CisJICAKKwkgIGZvciAoYmFkZHJwID0gYmFkZHI7IGJhZGRycDsgYmFkZHJwID0gYmFkZHJwLT5uZXh0KQorCSAgICBpZiAobWVtY21wKCZiYWRkcnAtPmFkZHIsIHAsIElOQUREUlNaKSA9PSAwKQorCSAgICAgIHsKKwkJLyogRm91bmQgYSBib2d1cyBhZGRyZXNzLiBJbnNlcnQgdGhhdCBpbmZvIGhlcmUsIHNpbmNlIHRoZXJlIG5vIFNPQSByZWNvcmQKKwkJICAgdG8gZ2V0IHRoZSB0dGwgZnJvbSBpbiB0aGUgbm9ybWFsIHByb2Nlc3NpbmcgKi8KKwkJY2FjaGVfc3RhcnRfaW5zZXJ0KCk7CisJCWNhY2hlX2luc2VydChuYW1lLCBOVUxMLCBub3csIHR0bCwgRl9JUFY0IHwgRl9GT1JXQVJEIHwgRl9ORUcgfCBGX05YRE9NQUlOIHwgRl9DT05GSUcpOworCQljYWNoZV9lbmRfaW5zZXJ0KCk7CisJCQorCQlyZXR1cm4gMTsKKwkgICAgICB9CisJfQorICAgICAgCisgICAgICBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAsIHFsZW4sIHJkbGVuKSkKKwlyZXR1cm4gMDsKKyAgICB9CisgIAorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGRfcmVzb3VyY2VfcmVjb3JkKEhFQURFUiAqaGVhZGVyLCBjaGFyICpsaW1pdCwgaW50ICp0cnVuY3AsIHVuc2lnbmVkIGludCBuYW1lb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICoqcHAsIAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdHRsLCB1bnNpZ25lZCBpbnQgKm9mZnNldCwgdW5zaWduZWQgc2hvcnQgdHlwZSwgdW5zaWduZWQgc2hvcnQgY2xhc3MsIGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFwOworICB1bnNpZ25lZCBjaGFyICpzYXYsICpwID0gKnBwOworICBpbnQgajsKKyAgdW5zaWduZWQgc2hvcnQgdXN2YWw7CisgIGxvbmcgbHZhbDsKKyAgY2hhciAqc3ZhbDsKKworICBpZiAodHJ1bmNwICYmICp0cnVuY3ApCisgICAgcmV0dXJuIDA7CisKKyAgUFVUU0hPUlQobmFtZW9mZnNldCB8IDB4YzAwMCwgcCk7CisgIFBVVFNIT1JUKHR5cGUsIHApOworICBQVVRTSE9SVChjbGFzcywgcCk7CisgIFBVVExPTkcodHRsLCBwKTsgICAgICAvKiBUVEwgKi8KKworICBzYXYgPSBwOyAgICAgICAgICAgICAgLyogU2F2ZSBwb2ludGVyIHRvIFJETGVuZ3RoIGZpZWxkICovCisgIFBVVFNIT1JUKDAsIHApOyAgICAgICAvKiBQbGFjZWhvbGRlciBSRExlbmd0aCAqLworCisgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOyAgIC8qIG1ha2UgYXAgcG9pbnQgdG8gMXN0IHVuYW1lZCBhcmd1bWVudCAqLworICAKKyAgZm9yICg7ICpmb3JtYXQ7IGZvcm1hdCsrKQorICAgIHN3aXRjaCAoKmZvcm1hdCkKKyAgICAgIHsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgICAgIGNhc2UgJzYnOgorCXN2YWwgPSB2YV9hcmcoYXAsIGNoYXIgKik7IAorCW1lbWNweShwLCBzdmFsLCBJTjZBRERSU1opOworCXAgKz0gSU42QUREUlNaOworCWJyZWFrOworI2VuZGlmCisJCisgICAgICBjYXNlICc0JzoKKwlzdmFsID0gdmFfYXJnKGFwLCBjaGFyICopOyAKKwltZW1jcHkocCwgc3ZhbCwgSU5BRERSU1opOworCXAgKz0gSU5BRERSU1o7CisJYnJlYWs7CisJCisgICAgICBjYXNlICdzJzoKKwl1c3ZhbCA9IHZhX2FyZyhhcCwgaW50KTsKKwlQVVRTSE9SVCh1c3ZhbCwgcCk7CisJYnJlYWs7CisJCisgICAgICBjYXNlICdsJzoKKwlsdmFsID0gdmFfYXJnKGFwLCBsb25nKTsKKwlQVVRMT05HKGx2YWwsIHApOworCWJyZWFrOworCQorICAgICAgY2FzZSAnZCc6CisJLyogZ2V0IGRvbWFpbi1uYW1lIGFuc3dlciBhcmcgYW5kIHN0b3JlIGl0IGluIFJEQVRBIGZpZWxkICovCisJaWYgKG9mZnNldCkKKwkgICpvZmZzZXQgPSBwIC0gKHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7CisJcCA9IGRvX3JmYzEwMzVfbmFtZShwLCB2YV9hcmcoYXAsIGNoYXIgKikpOworCSpwKysgPSAwOworCWJyZWFrOworCQorICAgICAgY2FzZSAndCc6CisJdXN2YWwgPSB2YV9hcmcoYXAsIGludCk7CisJc3ZhbCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwltZW1jcHkocCwgc3ZhbCwgdXN2YWwpOworCXAgKz0gdXN2YWw7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgJ3onOgorCXN2YWwgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJdXN2YWwgPSBzdmFsID8gc3RybGVuKHN2YWwpIDogMDsKKwlpZiAodXN2YWwgPiAyNTUpCisJICB1c3ZhbCA9IDI1NTsKKwkqcCsrID0gKHVuc2lnbmVkIGNoYXIpdXN2YWw7CisJbWVtY3B5KHAsIHN2YWwsIHVzdmFsKTsKKwlwICs9IHVzdmFsOworCWJyZWFrOworICAgICAgfQorCisgIHZhX2VuZChhcCk7CS8qIGNsZWFuIHVwIHZhcmlhYmxlIGFyZ3VtZW50IHBvaW50ZXIgKi8KKyAgCisgIGogPSBwIC0gc2F2IC0gMjsKKyAgUFVUU0hPUlQoaiwgc2F2KTsgICAgIC8qIE5vdywgc3RvcmUgcmVhbCBSRExlbmd0aCAqLworICAKKyAgLyogY2hlY2sgZm9yIG92ZXJmbG93IG9mIGJ1ZmZlciAqLworICBpZiAobGltaXQgJiYgKCh1bnNpZ25lZCBjaGFyICopbGltaXQgLSBwKSA8IDApCisgICAgeworICAgICAgaWYgKHRydW5jcCkKKwkqdHJ1bmNwID0gMTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgCisgICpwcCA9IHA7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjcmVjX3R0bChzdHJ1Y3QgY3JlYyAqY3JlY3AsIHRpbWVfdCBub3cpCit7CisgIC8qIFJldHVybiAwIHR0bCBmb3IgREhDUCBlbnRyaWVzLCB3aGljaCBtaWdodCBjaGFuZ2UKKyAgICAgYmVmb3JlIHRoZSBsZWFzZSBleHBpcmVzLiAqLworCisgIGlmICAoY3JlY3AtPmZsYWdzICYgKEZfSU1NT1JUQUwgfCBGX0RIQ1ApKQorICAgIHJldHVybiBkYWVtb24tPmxvY2FsX3R0bDsKKyAgCisgIHJldHVybiBjcmVjcC0+dHRkIC0gbm93OworfQorICAKKworLyogcmV0dXJuIHplcm8gaWYgd2UgY2FuJ3QgYW5zd2VyIGZyb20gY2FjaGUsIG9yIHBhY2tldCBzaXplIGlmIHdlIGNhbiAqLworc2l6ZV90IGFuc3dlcl9yZXF1ZXN0KEhFQURFUiAqaGVhZGVyLCBjaGFyICpsaW1pdCwgc2l6ZV90IHFsZW4sICAKKwkJICAgICAgc3RydWN0IGluX2FkZHIgbG9jYWxfYWRkciwgc3RydWN0IGluX2FkZHIgbG9jYWxfbmV0bWFzaywgdGltZV90IG5vdykgCit7CisgIGNoYXIgKm5hbWUgPSBkYWVtb24tPm5hbWVidWZmOworICB1bnNpZ25lZCBjaGFyICpwLCAqYW5zcCwgKnBoZWFkZXI7CisgIGludCBxdHlwZSwgcWNsYXNzOworICBzdHJ1Y3QgYWxsX2FkZHIgYWRkcjsKKyAgdW5zaWduZWQgaW50IG5hbWVvZmZzZXQ7CisgIHVuc2lnbmVkIHNob3J0IGZsYWc7CisgIGludCBxLCBhbnMsIGFuc2NvdW50ID0gMCwgYWRkbmNvdW50ID0gMDsKKyAgaW50IGRyeXJ1biA9IDAsIHNlY19yZXFkID0gMDsKKyAgaW50IGlzX3NpZ247CisgIHN0cnVjdCBjcmVjICpjcmVjcDsKKyAgaW50IG54ZG9tYWluID0gMCwgYXV0aCA9IDEsIHRydW5jID0gMDsKKyAgc3RydWN0IG14X3Nydl9yZWNvcmQgKnJlYzsKKyAKKyAgLyogSWYgdGhlcmUgaXMgYW4gUkZDMjY3MSBwc2V1ZG9oZWFkZXIgdGhlbiBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5CisgICAgIHBhcnRpYWwgcmVwbGllcywgc28gd2UgaGF2ZSB0byBkbyBhIGRyeSBydW4gdG8gc2VlIGlmIHdlIGNhbiBhbnN3ZXIKKyAgICAgdGhlIHF1ZXJ5LiBXZSBjaGVjayB0byBzZWUgaWYgdGhlIGRvIGJpdCBpcyBzZXQsIGlmIHNvIHdlIGFsd2F5cworICAgICBmb3J3YXJkIHJhdGhlciB0aGFuIGFuc3dlcmluZyBmcm9tIHRoZSBjYWNoZSwgd2hpY2ggZG9lc24ndCBpbmNsdWRlCisgICAgIHNlY3VyaXR5IGluZm9ybWF0aW9uLiAqLworCisgIGlmIChmaW5kX3BzZXVkb2hlYWRlcihoZWFkZXIsIHFsZW4sIE5VTEwsICZwaGVhZGVyLCAmaXNfc2lnbikpCisgICAgeyAKKyAgICAgIHVuc2lnbmVkIHNob3J0IHVkcHN6LCBleHRfcmNvZGUsIGZsYWdzOworICAgICAgdW5zaWduZWQgY2hhciAqcHNhdmUgPSBwaGVhZGVyOworCisgICAgICBHRVRTSE9SVCh1ZHBzeiwgcGhlYWRlcik7CisgICAgICBHRVRTSE9SVChleHRfcmNvZGUsIHBoZWFkZXIpOworICAgICAgR0VUU0hPUlQoZmxhZ3MsIHBoZWFkZXIpOworICAgICAgCisgICAgICBzZWNfcmVxZCA9IGZsYWdzICYgMHg4MDAwOyAvKiBkbyBiaXQgKi8gCisKKyAgICAgIC8qIElmIG91ciBjbGllbnQgaXMgYWR2ZXJ0aXNpbmcgYSBsYXJnZXIgVURQIHBhY2tldCBzaXplCisJIHRoYW4gd2UgYWxsb3csIHRyaW0gaXQgc28gdGhhdCB3ZSBkb24ndCBnZXQgYW4gb3ZlcmxhcmdlCisJIHJlc3BvbnNlIGZyb20gdXBzdHJlYW0gKi8KKworICAgICAgaWYgKCFpc19zaWduICYmICh1ZHBzeiA+IGRhZW1vbi0+ZWRuc19wa3RzeikpCisJUFVUU0hPUlQoZGFlbW9uLT5lZG5zX3BrdHN6LCBwc2F2ZSk7IAorCisgICAgICBkcnlydW4gPSAxOworICAgIH0KKworICBpZiAobnRvaHMoaGVhZGVyLT5xZGNvdW50KSA9PSAwIHx8IGhlYWRlci0+b3Bjb2RlICE9IFFVRVJZICkKKyAgICByZXR1cm4gMDsKKyAgCisgIGZvciAocmVjID0gZGFlbW9uLT5teG5hbWVzOyByZWM7IHJlYyA9IHJlYy0+bmV4dCkKKyAgICByZWMtPm9mZnNldCA9IDA7CisgIAorIHJlcnVuOgorICAvKiBkZXRlcm1pbmUgZW5kIG9mIHF1ZXN0aW9uIHNlY3Rpb24gKHdlIHB1dCBhbnN3ZXJzIHRoZXJlKSAqLworICBpZiAoIShhbnNwID0gc2tpcF9xdWVzdGlvbnMoaGVhZGVyLCBxbGVuKSkpCisgICAgcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKyAgIAorICAvKiBub3cgcHJvY2VzcyBlYWNoIHF1ZXN0aW9uLCBhbnN3ZXJzIGdvIGluIFJScyBhZnRlciB0aGUgcXVlc3Rpb24gKi8KKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKworICBmb3IgKHEgPSBudG9ocyhoZWFkZXItPnFkY291bnQpOyBxICE9IDA7IHEtLSkKKyAgICB7CisgICAgICAvKiBzYXZlIHBvaW50ZXIgdG8gbmFtZSBmb3IgY29weWluZyBpbnRvIGFuc3dlcnMgKi8KKyAgICAgIG5hbWVvZmZzZXQgPSBwIC0gKHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7CisKKyAgICAgIC8qIG5vdyBleHRyYWN0IG5hbWUgYXMgLi1jb25jYXRlbmF0ZWQgc3RyaW5nIGludG8gbmFtZSAqLworICAgICAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBxbGVuLCAmcCwgbmFtZSwgMSwgNCkpCisJcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKyAgICAgICAgICAgIAorICAgICAgR0VUU0hPUlQocXR5cGUsIHApOyAKKyAgICAgIEdFVFNIT1JUKHFjbGFzcywgcCk7CisKKyAgICAgIGFucyA9IDA7IC8qIGhhdmUgd2UgYW5zd2VyZWQgdGhpcyBxdWVzdGlvbiAqLworICAgICAgCisgICAgICBpZiAocXR5cGUgPT0gVF9UWFQgfHwgcXR5cGUgPT0gVF9BTlkpCisJeworCSAgc3RydWN0IHR4dF9yZWNvcmQgKnQ7CisJICBmb3IodCA9IGRhZW1vbi0+dHh0OyB0IDsgdCA9IHQtPm5leHQpCisJICAgIHsKKwkgICAgICBpZiAodC0+Y2xhc3MgPT0gcWNsYXNzICYmIGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgdC0+bmFtZSkpCisJCXsKKwkJICBhbnMgPSAxOworCQkgIGlmICghZHJ5cnVuKQorCQkgICAgeworCQkgICAgICBsb2dfcXVlcnkoRl9DTkFNRSB8IEZfRk9SV0FSRCB8IEZfQ09ORklHIHwgRl9OWERPTUFJTiwgbmFtZSwgTlVMTCwgIjxUWFQ+Iik7CisJCSAgICAgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkgICAgICBkYWVtb24tPmxvY2FsX3R0bCwgTlVMTCwKKwkJCQkJICAgICAgVF9UWFQsIHQtPmNsYXNzLCAidCIsIHQtPmxlbiwgdC0+dHh0KSkKKwkJCWFuc2NvdW50Kys7CisKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorCisgICAgICBpZiAocWNsYXNzID09IENfSU4pCisJeworCSAgaWYgKHF0eXBlID09IFRfUFRSIHx8IHF0eXBlID09IFRfQU5ZKQorCSAgICB7CisJICAgICAgLyogc2VlIGlmIGl0J3Mgdy56Lnkuei5pbi1hZGRyLmFycGEgZm9ybWF0ICovCisJICAgICAgaW50IGlzX2FycGEgPSBpbl9hcnBhX25hbWVfMl9hZGRyKG5hbWUsICZhZGRyKTsKKwkgICAgICBzdHJ1Y3QgcHRyX3JlY29yZCAqcHRyOworCSAgICAgIHN0cnVjdCBpbnRlcmZhY2VfbmFtZSogaW50ciA9IE5VTEw7CisKKwkgICAgICBmb3IgKHB0ciA9IGRhZW1vbi0+cHRyOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkKKwkJaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgcHRyLT5uYW1lKSkKKwkJICBicmVhazsKKworCSAgICAgIGlmIChpc19hcnBhID09IEZfSVBWNCkKKwkJZm9yIChpbnRyID0gZGFlbW9uLT5pbnRfbmFtZXM7IGludHI7IGludHIgPSBpbnRyLT5uZXh0KQorCQkgIHsKKwkJICAgIGlmIChhZGRyLmFkZHIuYWRkcjQuc19hZGRyID09IGdldF9pZmFkZHIoaW50ci0+aW50cikuc19hZGRyKQorCQkgICAgICBicmVhazsKKwkJICAgIGVsc2UKKwkJICAgICAgd2hpbGUgKGludHItPm5leHQgJiYgc3RyY21wKGludHItPmludHIsIGludHItPm5leHQtPmludHIpID09IDApCisJCQlpbnRyID0gaW50ci0+bmV4dDsKKwkJICB9CisJICAgICAgCisJICAgICAgaWYgKGludHIpCisJCXsKKwkJICBhbnMgPSAxOworCQkgIGlmICghZHJ5cnVuKQorCQkgICAgeworCQkgICAgICBsb2dfcXVlcnkoRl9JUFY0IHwgRl9SRVZFUlNFIHwgRl9DT05GSUcsIGludHItPm5hbWUsICZhZGRyLCBOVUxMKTsKKwkJICAgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCSAgICAgIGRhZW1vbi0+bG9jYWxfdHRsLCBOVUxMLAorCQkJCQkgICAgICBUX1BUUiwgQ19JTiwgImQiLCBpbnRyLT5uYW1lKSkKKwkJCWFuc2NvdW50Kys7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlIGlmIChwdHIpCisJCXsKKwkJICBhbnMgPSAxOworCQkgIGlmICghZHJ5cnVuKQorCQkgICAgeworCQkgICAgICBsb2dfcXVlcnkoRl9DTkFNRSB8IEZfRk9SV0FSRCB8IEZfQ09ORklHIHwgRl9OWERPTUFJTiwgbmFtZSwgTlVMTCwgIjxQVFI+Iik7CisJCSAgICAgIGZvciAocHRyID0gZGFlbW9uLT5wdHI7IHB0cjsgcHRyID0gcHRyLT5uZXh0KQorCQkJaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgcHRyLT5uYW1lKSAmJgorCQkJICAgIGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCQlkYWVtb24tPmxvY2FsX3R0bCwgTlVMTCwKKwkJCQkJCVRfUFRSLCBDX0lOLCAiZCIsIHB0ci0+cHRyKSkKKwkJCSAgYW5zY291bnQrKzsKKwkJCSAKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UgaWYgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfYWRkcihOVUxMLCAmYWRkciwgbm93LCBpc19hcnBhKSkpCisJCWRvIAorCQkgIHsgCisJCSAgICAvKiBkb24ndCBhbnN3ZXIgd2lsZGNhcmQgcXVlcmllcyB3aXRoIGRhdGEgbm90IGZyb20gL2V0Yy9ob3N0cyBvciBkaGNwIGxlYXNlcyAqLworCQkgICAgaWYgKHF0eXBlID09IFRfQU5ZICYmICEoY3JlY3AtPmZsYWdzICYgKEZfSE9TVFMgfCBGX0RIQ1ApKSkKKwkJICAgICAgY29udGludWU7CisJCSAgICAKKwkJICAgIGlmIChjcmVjcC0+ZmxhZ3MgJiBGX05FRykKKwkJICAgICAgeworCQkJYW5zID0gMTsKKwkJCWF1dGggPSAwOworCQkJaWYgKGNyZWNwLT5mbGFncyAmIEZfTlhET01BSU4pCisJCQkgIG54ZG9tYWluID0gMTsKKwkJCWlmICghZHJ5cnVuKQorCQkJICBsb2dfcXVlcnkoY3JlY3AtPmZsYWdzICYgfkZfRk9SV0FSRCwgbmFtZSwgJmFkZHIsIE5VTEwpOworCQkgICAgICB9CisJCSAgICBlbHNlIGlmICgoY3JlY3AtPmZsYWdzICYgKEZfSE9TVFMgfCBGX0RIQ1ApKSB8fCAhc2VjX3JlcWQpCisJCSAgICAgIHsKKwkJCWFucyA9IDE7CisJCQlpZiAoIShjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCkpKQorCQkJICBhdXRoID0gMDsKKwkJCWlmICghZHJ5cnVuKQorCQkJICB7CisJCQkgICAgbG9nX3F1ZXJ5KGNyZWNwLT5mbGFncyAmIH5GX0ZPUldBUkQsIGNhY2hlX2dldF9uYW1lKGNyZWNwKSwgJmFkZHIsIAorCQkJCSAgICAgIHJlY29yZF9zb3VyY2UoY3JlY3AtPnVpZCkpOworCQkJICAgIAorCQkJICAgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkJICAgIGNyZWNfdHRsKGNyZWNwLCBub3cpLCBOVUxMLAorCQkJCQkJICAgIFRfUFRSLCBDX0lOLCAiZCIsIGNhY2hlX2dldF9uYW1lKGNyZWNwKSkpCisJCQkgICAgICBhbnNjb3VudCsrOworCQkJICB9CisJCSAgICAgIH0KKwkJICB9IHdoaWxlICgoY3JlY3AgPSBjYWNoZV9maW5kX2J5X2FkZHIoY3JlY3AsICZhZGRyLCBub3csIGlzX2FycGEpKSk7CisJICAgICAgZWxzZSBpZiAoaXNfYXJwYSA9PSBGX0lQVjQgJiYgCisJCSAgICAgICAoZGFlbW9uLT5vcHRpb25zICYgT1BUX0JPR1VTUFJJVikgJiYgCisJCSAgICAgICBwcml2YXRlX25ldChhZGRyLmFkZHIuYWRkcjQpKQorCQl7CisJCSAgLyogaWYgbm90IGluIGNhY2hlLCBlbmFibGVkIGFuZCBwcml2YXRlIElQVjQgYWRkcmVzcywgcmV0dXJuIE5YRE9NQUlOICovCisJCSAgYW5zID0gMTsKKwkJICBueGRvbWFpbiA9IDE7CisJCSAgaWYgKCFkcnlydW4pCisJCSAgICBsb2dfcXVlcnkoRl9DT05GSUcgfCBGX1JFVkVSU0UgfCBGX0lQVjQgfCBGX05FRyB8IEZfTlhET01BSU4sIAorCQkJICAgICAgbmFtZSwgJmFkZHIsIE5VTEwpOworCQl9CisJICAgIH0KKwkgICAgCisJICBmb3IgKGZsYWcgPSBGX0lQVjQ7IGZsYWc7IGZsYWcgPSAoZmxhZyA9PSBGX0lQVjQpID8gRl9JUFY2IDogMCkKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUgPSBUX0E7CisJICAgICAgCisJICAgICAgaWYgKGZsYWcgPT0gRl9JUFY2KQorI2lmZGVmIEhBVkVfSVBWNgorCQl0eXBlID0gVF9BQUFBOworI2Vsc2UKKwkgICAgICAgIGJyZWFrOworI2VuZGlmCisJICAgICAgCisJICAgICAgaWYgKHF0eXBlICE9IHR5cGUgJiYgcXR5cGUgIT0gVF9BTlkpCisJCWNvbnRpbnVlOworCSAgICAgIAorCSAgICAgIC8qIENoZWNrIGZvciAiQSBmb3IgQSIgIHF1ZXJpZXMgKi8KKwkgICAgICBpZiAocXR5cGUgPT0gVF9BICYmIChhZGRyLmFkZHIuYWRkcjQuc19hZGRyID0gaW5ldF9hZGRyKG5hbWUpKSAhPSAoaW5fYWRkcl90KSAtMSkKKwkJeworCQkgIGFucyA9IDE7CisJCSAgaWYgKCFkcnlydW4pCisJCSAgICB7CisJCSAgICAgIGxvZ19xdWVyeShGX0ZPUldBUkQgfCBGX0NPTkZJRyB8IEZfSVBWNCwgbmFtZSwgJmFkZHIsIE5VTEwpOworCQkgICAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJICAgICAgZGFlbW9uLT5sb2NhbF90dGwsIE5VTEwsIHR5cGUsIENfSU4sICI0IiwgJmFkZHIpKQorCQkJYW5zY291bnQrKzsKKwkJICAgIH0KKwkJICBjb250aW51ZTsKKwkJfQorCisJICAgICAgLyogaW50ZXJmYWNlIG5hbWUgc3R1ZmYgKi8KKwkgICAgICBpZiAocXR5cGUgPT0gVF9BKQorCQl7CisJCSAgc3RydWN0IGludGVyZmFjZV9uYW1lICppbnRyOworCisJCSAgZm9yIChpbnRyID0gZGFlbW9uLT5pbnRfbmFtZXM7IGludHI7IGludHIgPSBpbnRyLT5uZXh0KQorCQkgICAgaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgaW50ci0+bmFtZSkpCisJCSAgICAgIGJyZWFrOworCQkgIAorCQkgIGlmIChpbnRyKQorCQkgICAgeworCQkgICAgICBhbnMgPSAxOworCQkgICAgICBpZiAoIWRyeXJ1bikKKwkJCXsKKwkJCSAgaWYgKChhZGRyLmFkZHIuYWRkcjQgPSBnZXRfaWZhZGRyKGludHItPmludHIpKS5zX2FkZHIgPT0gKGluX2FkZHJfdCkgLTEpCisJCQkgICAgbG9nX3F1ZXJ5KEZfRk9SV0FSRCB8IEZfQ09ORklHIHwgRl9JUFY0IHwgRl9ORUcsIG5hbWUsIE5VTEwsIE5VTEwpOworCQkJICBlbHNlCisJCQkgICAgeworCQkJICAgICAgbG9nX3F1ZXJ5KEZfRk9SV0FSRCB8IEZfQ09ORklHIHwgRl9JUFY0LCBuYW1lLCAmYWRkciwgTlVMTCk7CisJCQkgICAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJCSAgICAgIGRhZW1vbi0+bG9jYWxfdHRsLCBOVUxMLCB0eXBlLCBDX0lOLCAiNCIsICZhZGRyKSkKKwkJCQlhbnNjb3VudCsrOworCQkJICAgIH0KKwkJCX0KKwkJICAgICAgY29udGludWU7CisJCSAgICB9CisJCX0KKworCSAgICBjbmFtZV9yZXN0YXJ0OgorCSAgICAgIGlmICgoY3JlY3AgPSBjYWNoZV9maW5kX2J5X25hbWUoTlVMTCwgbmFtZSwgbm93LCBmbGFnIHwgRl9DTkFNRSkpKQorCQl7CisJCSAgaW50IGxvY2FsaXNlID0gMDsKKwkJICAKKwkJICAvKiBTZWUgaWYgYSBwdXRhdGl2ZSBhZGRyZXNzIGlzIG9uIHRoZSBuZXR3b3JrIGZyb20gd2hpY2ggd2UgcmVjaWV2ZWQKKwkJICAgICB0aGUgcXVlcnksIGlzIHNvIHdlJ2xsIGZpbHRlciBvdGhlciBhbnN3ZXJzLiAqLworCQkgIGlmIChsb2NhbF9hZGRyLnNfYWRkciAhPSAwICYmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTE9DQUxJU0UpICYmIGZsYWcgPT0gRl9JUFY0KQorCQkgICAgeworCQkgICAgICBzdHJ1Y3QgY3JlYyAqc2F2ZSA9IGNyZWNwOworCQkgICAgICBkbyB7CisJCQlpZiAoKGNyZWNwLT5mbGFncyAmIEZfSE9TVFMpICYmCisJCQkgICAgaXNfc2FtZV9uZXQoKigoc3RydWN0IGluX2FkZHIgKikmY3JlY3AtPmFkZHIpLCBsb2NhbF9hZGRyLCBsb2NhbF9uZXRtYXNrKSkKKwkJCSAgeworCQkJICAgIGxvY2FsaXNlID0gMTsKKwkJCSAgICBicmVhazsKKwkJCSAgfSAKKwkJCX0gd2hpbGUgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShjcmVjcCwgbmFtZSwgbm93LCBmbGFnIHwgRl9DTkFNRSkpKTsKKwkJICAgICAgY3JlY3AgPSBzYXZlOworCQkgICAgfQorCQkJICAKKwkJICBkbworCQkgICAgeyAKKwkJICAgICAgLyogZG9uJ3QgYW5zd2VyIHdpbGRjYXJkIHF1ZXJpZXMgd2l0aCBkYXRhIG5vdCBmcm9tIC9ldGMvaG9zdHMKKwkJCSBvciBESENQIGxlYXNlcyAqLworCQkgICAgICBpZiAocXR5cGUgPT0gVF9BTlkgJiYgIShjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCkpKQorCQkJYnJlYWs7CisJCSAgICAgIAorCQkgICAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9DTkFNRSkKKwkJCXsKKwkJCSAgaWYgKCFkcnlydW4pCisJCQkgICAgeworCQkJICAgICAgbG9nX3F1ZXJ5KGNyZWNwLT5mbGFncywgbmFtZSwgTlVMTCwgcmVjb3JkX3NvdXJjZShjcmVjcC0+dWlkKSk7CisJCQkgICAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJCSAgICAgIGNyZWNfdHRsKGNyZWNwLCBub3cpLCAmbmFtZW9mZnNldCwKKwkJCQkJCSAgICAgIFRfQ05BTUUsIENfSU4sICJkIiwgY2FjaGVfZ2V0X25hbWUoY3JlY3AtPmFkZHIuY25hbWUuY2FjaGUpKSkKKwkJCQlhbnNjb3VudCsrOworCQkJICAgIH0KKwkJCSAgCisJCQkgIHN0cmNweShuYW1lLCBjYWNoZV9nZXRfbmFtZShjcmVjcC0+YWRkci5jbmFtZS5jYWNoZSkpOworCQkJICBnb3RvIGNuYW1lX3Jlc3RhcnQ7CisJCQl9CisJCSAgICAgIAorCQkgICAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9ORUcpCisJCQl7CisJCQkgIGFucyA9IDE7CisJCQkgIGF1dGggPSAwOworCQkJICBpZiAoY3JlY3AtPmZsYWdzICYgRl9OWERPTUFJTikKKwkJCSAgICBueGRvbWFpbiA9IDE7CisJCQkgIGlmICghZHJ5cnVuKQorCQkJICAgIGxvZ19xdWVyeShjcmVjcC0+ZmxhZ3MsIG5hbWUsIE5VTEwsIE5VTEwpOworCQkJfQorCQkgICAgICBlbHNlIGlmICgoY3JlY3AtPmZsYWdzICYgKEZfSE9TVFMgfCBGX0RIQ1ApKSB8fCAhc2VjX3JlcWQpCisJCQl7CisJCQkgIC8qIElmIHdlIGFyZSByZXR1cm5pbmcgbG9jYWwgYW5zd2VycyBkZXBlbmRpbmcgb24gbmV0d29yaywKKwkJCSAgICAgZmlsdGVyIGhlcmUuICovCisJCQkgIGlmIChsb2NhbGlzZSAmJiAKKwkJCSAgICAgIChjcmVjcC0+ZmxhZ3MgJiBGX0hPU1RTKSAmJgorCQkJICAgICAgIWlzX3NhbWVfbmV0KCooKHN0cnVjdCBpbl9hZGRyICopJmNyZWNwLT5hZGRyKSwgbG9jYWxfYWRkciwgbG9jYWxfbmV0bWFzaykpCisJCQkgICAgY29udGludWU7CisgICAgICAgCisJCQkgIGlmICghKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQKSkpCisJCQkgICAgYXV0aCA9IDA7CisJCQkgIAorCQkJICBhbnMgPSAxOworCQkJICBpZiAoIWRyeXJ1bikKKwkJCSAgICB7CisJCQkgICAgICBsb2dfcXVlcnkoY3JlY3AtPmZsYWdzICYgfkZfUkVWRVJTRSwgbmFtZSwgJmNyZWNwLT5hZGRyLmFkZHIsCisJCQkJCXJlY29yZF9zb3VyY2UoY3JlY3AtPnVpZCkpOworCQkJICAgICAgCisJCQkgICAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJCSAgICAgIGNyZWNfdHRsKGNyZWNwLCBub3cpLCBOVUxMLCB0eXBlLCBDX0lOLCAKKwkJCQkJCSAgICAgIHR5cGUgPT0gVF9BID8gIjQiIDogIjYiLCAmY3JlY3AtPmFkZHIpKQorCQkJCWFuc2NvdW50Kys7CisJCQkgICAgfQorCQkJfQorCQkgICAgfSB3aGlsZSAoKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKGNyZWNwLCBuYW1lLCBub3csIGZsYWcgfCBGX0NOQU1FKSkpOworCQl9CisJICAgIH0KKwkgIAorCSAgaWYgKHF0eXBlID09IFRfTVggfHwgcXR5cGUgPT0gVF9BTlkpCisJICAgIHsKKwkgICAgICBpbnQgZm91bmQgPSAwOworCSAgICAgIGZvciAocmVjID0gZGFlbW9uLT5teG5hbWVzOyByZWM7IHJlYyA9IHJlYy0+bmV4dCkKKwkJaWYgKCFyZWMtPmlzc3J2ICYmIGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgcmVjLT5uYW1lKSkKKwkJICB7CisJCSAgYW5zID0gZm91bmQgPSAxOworCQkgIGlmICghZHJ5cnVuKQorCQkgICAgeworCQkgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworCQkgICAgICBsb2dfcXVlcnkoRl9DTkFNRSB8IEZfRk9SV0FSRCB8IEZfQ09ORklHIHwgRl9OWERPTUFJTiwgbmFtZSwgTlVMTCwgIjxNWD4iKTsKKwkJICAgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgZGFlbW9uLT5sb2NhbF90dGwsCisJCQkJCSAgICAgICZvZmZzZXQsIFRfTVgsIENfSU4sICJzZCIsIHJlYy0+d2VpZ2h0LCByZWMtPnRhcmdldCkpCisJCQl7CisJCQkgIGFuc2NvdW50Kys7CisJCQkgIGlmIChyZWMtPnRhcmdldCkKKwkJCSAgICByZWMtPm9mZnNldCA9IG9mZnNldDsKKwkJCX0KKwkJICAgIH0KKwkJICB9CisJICAgICAgCisJICAgICAgaWYgKCFmb3VuZCAmJiAoZGFlbW9uLT5vcHRpb25zICYgKE9QVF9TRUxGTVggfCBPUFRfTE9DQUxNWCkpICYmIAorCQkgIGNhY2hlX2ZpbmRfYnlfbmFtZShOVUxMLCBuYW1lLCBub3csIEZfSE9TVFMgfCBGX0RIQ1ApKQorCQl7IAorCQkgIGFucyA9IDE7CisJCSAgaWYgKCFkcnlydW4pCisJCSAgICB7CisJCSAgICAgIGxvZ19xdWVyeShGX0NOQU1FIHwgRl9GT1JXQVJEIHwgRl9DT05GSUcgfCBGX05YRE9NQUlOLCBuYW1lLCBOVUxMLCAiPE1YPiIpOworCQkgICAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCBkYWVtb24tPmxvY2FsX3R0bCwgTlVMTCwgCisJCQkJCSAgICAgIFRfTVgsIENfSU4sICJzZCIsIDEsIAorCQkJCQkgICAgICAoZGFlbW9uLT5vcHRpb25zICYgT1BUX1NFTEZNWCkgPyBuYW1lIDogZGFlbW9uLT5teHRhcmdldCkpCisJCQlhbnNjb3VudCsrOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgIAkgIAorCSAgaWYgKHF0eXBlID09IFRfU1JWIHx8IHF0eXBlID09IFRfQU5ZKQorCSAgICB7CisJICAgICAgaW50IGZvdW5kID0gMDsKKwkgICAgICAKKwkgICAgICBmb3IgKHJlYyA9IGRhZW1vbi0+bXhuYW1lczsgcmVjOyByZWMgPSByZWMtPm5leHQpCisJCWlmIChyZWMtPmlzc3J2ICYmIGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgcmVjLT5uYW1lKSkKKwkJICB7CisJCSAgICBmb3VuZCA9IGFucyA9IDE7CisJCSAgICBpZiAoIWRyeXJ1bikKKwkJICAgICAgeworCQkJdW5zaWduZWQgaW50IG9mZnNldDsKKwkJCWxvZ19xdWVyeShGX0NOQU1FIHwgRl9GT1JXQVJEIHwgRl9DT05GSUcgfCBGX05YRE9NQUlOLCBuYW1lLCBOVUxMLCAiPFNSVj4iKTsKKwkJCWlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIGRhZW1vbi0+bG9jYWxfdHRsLCAKKwkJCQkJCSZvZmZzZXQsIFRfU1JWLCBDX0lOLCAic3NzZCIsIAorCQkJCQkJcmVjLT5wcmlvcml0eSwgcmVjLT53ZWlnaHQsIHJlYy0+c3J2cG9ydCwgcmVjLT50YXJnZXQpKQorCQkJICB7CisJCQkgICAgYW5zY291bnQrKzsKKwkJCSAgICBpZiAocmVjLT50YXJnZXQpCisJCQkgICAgICByZWMtPm9mZnNldCA9IG9mZnNldDsKKwkJCSAgfQorCQkgICAgICB9CisJCSAgfQorCSAgICAgIAorCSAgICAgIGlmICghZm91bmQgJiYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9GSUxURVIpICYmICAocXR5cGUgPT0gVF9TUlYgfHwgKHF0eXBlID09IFRfQU5ZICYmIHN0cmNocihuYW1lLCAnXycpKSkpCisJCXsKKwkJICBhbnMgPSAxOworCQkgIGlmICghZHJ5cnVuKQorCQkgICAgbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9ORUcsIG5hbWUsIE5VTEwsIE5VTEwpOworCQl9CisJICAgIH0KKworCSAgaWYgKHF0eXBlID09IFRfTkFQVFIgfHwgcXR5cGUgPT0gVF9BTlkpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgbmFwdHIgKm5hOworCSAgICAgIGZvciAobmEgPSBkYWVtb24tPm5hcHRyOyBuYTsgbmEgPSBuYS0+bmV4dCkKKwkJaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgbmEtPm5hbWUpKQorCQkgIHsKKwkJICAgIGFucyA9IDE7CisJCSAgICBpZiAoIWRyeXJ1bikKKwkJICAgICAgeworCQkJbG9nX3F1ZXJ5KEZfQ05BTUUgfCBGX0ZPUldBUkQgfCBGX0NPTkZJRyB8IEZfTlhET01BSU4sIG5hbWUsIE5VTEwsICI8TkFQVFI+Iik7CisJCQlpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCBkYWVtb24tPmxvY2FsX3R0bCwgCisJCQkJCQlOVUxMLCBUX05BUFRSLCBDX0lOLCAic3N6enpkIiwgCisJCQkJCQluYS0+b3JkZXIsIG5hLT5wcmVmLCBuYS0+ZmxhZ3MsIG5hLT5zZXJ2aWNlcywgbmEtPnJlZ2V4cCwgbmEtPnJlcGxhY2UpKQorCQkJICBhbnNjb3VudCsrOworCQkgICAgICB9CisJCSAgfQorCSAgICB9CisJICAKKwkgIGlmIChxdHlwZSA9PSBUX01BSUxCKQorCSAgICBhbnMgPSAxLCBueGRvbWFpbiA9IDE7CisKKwkgIGlmIChxdHlwZSA9PSBUX1NPQSAmJiAoZGFlbW9uLT5vcHRpb25zICYgT1BUX0ZJTFRFUikpCisJICAgIHsKKwkgICAgICBhbnMgPSAxOyAKKwkgICAgICBpZiAoIWRyeXJ1bikKKwkJbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9ORUcsIG5hbWUsICZhZGRyLCBOVUxMKTsKKwkgICAgfQorCX0KKworICAgICAgaWYgKCFhbnMpCisJcmV0dXJuIDA7IC8qIGZhaWxlZCB0byBhbnN3ZXIgYSBxdWVzdGlvbiAqLworICAgIH0KKyAgCisgIGlmIChkcnlydW4pCisgICAgeworICAgICAgZHJ5cnVuID0gMDsKKyAgICAgIGdvdG8gcmVydW47CisgICAgfQorICAKKyAgLyogY3JlYXRlIGFuIGFkZGl0aW9uYWwgZGF0YSBzZWN0aW9uLCBmb3Igc3R1ZmYgaW4gU1JWIGFuZCBNWCByZWNvcmQgcmVwbGllcy4gKi8KKyAgZm9yIChyZWMgPSBkYWVtb24tPm14bmFtZXM7IHJlYzsgcmVjID0gcmVjLT5uZXh0KQorICAgIGlmIChyZWMtPm9mZnNldCAhPSAwKQorICAgICAgeworCS8qIHNxdWFzaCBkdXBlcyAqLworCXN0cnVjdCBteF9zcnZfcmVjb3JkICp0bXA7CisJZm9yICh0bXAgPSByZWMtPm5leHQ7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorCSAgaWYgKHRtcC0+b2Zmc2V0ICE9IDAgJiYgaG9zdG5hbWVfaXNlcXVhbChyZWMtPnRhcmdldCwgdG1wLT50YXJnZXQpKQorCSAgICB0bXAtPm9mZnNldCA9IDA7CisJCisJY3JlY3AgPSBOVUxMOworCXdoaWxlICgoY3JlY3AgPSBjYWNoZV9maW5kX2J5X25hbWUoY3JlY3AsIHJlYy0+dGFyZ2V0LCBub3csIEZfSVBWNCB8IEZfSVBWNikpKQorCSAgeworI2lmZGVmIEhBVkVfSVBWNgorCSAgICBpbnQgdHlwZSA9ICBjcmVjcC0+ZmxhZ3MgJiBGX0lQVjQgPyBUX0EgOiBUX0FBQUE7CisjZWxzZQorCSAgICBpbnQgdHlwZSA9IFRfQTsKKyNlbmRpZgorCSAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9ORUcpCisJICAgICAgY29udGludWU7CisKKwkgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgTlVMTCwgcmVjLT5vZmZzZXQsICZhbnNwLCAKKwkJCQkgICAgY3JlY190dGwoY3JlY3AsIG5vdyksIE5VTEwsIHR5cGUsIENfSU4sIAorCQkJCSAgICBjcmVjcC0+ZmxhZ3MgJiBGX0lQVjQgPyAiNCIgOiAiNiIsICZjcmVjcC0+YWRkcikpCisJICAgICAgYWRkbmNvdW50Kys7CisJICB9CisgICAgICB9CisgIAorICAvKiBkb25lIGFsbCBxdWVzdGlvbnMsIHNldCB1cCBoZWFkZXIgYW5kIHJldHVybiBsZW5ndGggb2YgcmVzdWx0ICovCisgIGhlYWRlci0+cXIgPSAxOyAvKiByZXNwb25zZSAqLworICBoZWFkZXItPmFhID0gYXV0aDsgLyogYXV0aG9yaXRpdmUgLSBvbmx5IGhvc3RzIGFuZCBESENQIGRlcml2ZWQgbmFtZXMuICovCisgIGhlYWRlci0+cmEgPSAxOyAvKiByZWN1cnNpb24gaWYgYXZhaWxhYmxlICovCisgIGhlYWRlci0+dGMgPSB0cnVuYzsgLyogdHJ1bmNhdGlvbiAqLworICBpZiAoYW5zY291bnQgPT0gMCAmJiBueGRvbWFpbikKKyAgICBoZWFkZXItPnJjb2RlID0gTlhET01BSU47CisgIGVsc2UKKyAgICBoZWFkZXItPnJjb2RlID0gTk9FUlJPUjsgLyogbm8gZXJyb3IgKi8KKyAgaGVhZGVyLT5hbmNvdW50ID0gaHRvbnMoYW5zY291bnQpOworICBoZWFkZXItPm5zY291bnQgPSBodG9ucygwKTsKKyAgaGVhZGVyLT5hcmNvdW50ID0gaHRvbnMoYWRkbmNvdW50KTsKKyAgcmV0dXJuIGFuc3AgLSAodW5zaWduZWQgY2hhciAqKWhlYWRlcjsKK30KKworCisKKworCmRpZmYgLS1naXQgYS9zcmMvcmZjMjEzMS5jIGIvc3JjL3JmYzIxMzEuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZWMxYmNmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3JmYzIxMzEuYwpAQCAtMCwwICsxLDIzMzIgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWZkZWYgSEFWRV9ESENQCisKKyNkZWZpbmUgQk9PVFJFUVVFU1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQk9PVFJFUExZICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgREhDUF9DT09LSUUgICAgICAgICAgICAgIDB4NjM4MjUzNjMKKworLyogVGhlIExpbnV4IGluLWtlcm5lbCBESENQIGNsaWVudCBzaWxlbnRseSBpZ25vcmVzIGFueSBwYWNrZXQgCisgICBzbWFsbGVyIHRoYW4gdGhpcy4gU2lnaC4uLi4uLi4uLi4uICAgKi8KKyNkZWZpbmUgTUlOX1BBQ0tFVFNaICAgICAgICAgICAgIDMwMAorCisjZGVmaW5lIE9QVElPTl9QQUQgICAgICAgICAgICAgICAwCisjZGVmaW5lIE9QVElPTl9ORVRNQVNLICAgICAgICAgICAxCisjZGVmaW5lIE9QVElPTl9ST1VURVIgICAgICAgICAgICAzCisjZGVmaW5lIE9QVElPTl9ETlNTRVJWRVIgICAgICAgICA2CisjZGVmaW5lIE9QVElPTl9IT1NUTkFNRSAgICAgICAgICAxMgorI2RlZmluZSBPUFRJT05fRE9NQUlOTkFNRSAgICAgICAgMTUKKyNkZWZpbmUgT1BUSU9OX0JST0FEQ0FTVCAgICAgICAgIDI4CisjZGVmaW5lIE9QVElPTl9WRU5ET1JfQ0xBU1NfT1BUICA0MworI2RlZmluZSBPUFRJT05fUkVRVUVTVEVEX0lQICAgICAgNTAgCisjZGVmaW5lIE9QVElPTl9MRUFTRV9USU1FICAgICAgICA1MQorI2RlZmluZSBPUFRJT05fT1ZFUkxPQUQgICAgICAgICAgNTIKKyNkZWZpbmUgT1BUSU9OX01FU1NBR0VfVFlQRSAgICAgIDUzCisjZGVmaW5lIE9QVElPTl9TRVJWRVJfSURFTlRJRklFUiA1NAorI2RlZmluZSBPUFRJT05fUkVRVUVTVEVEX09QVElPTlMgNTUKKyNkZWZpbmUgT1BUSU9OX01FU1NBR0UgICAgICAgICAgIDU2CisjZGVmaW5lIE9QVElPTl9NQVhNRVNTQUdFICAgICAgICA1NworI2RlZmluZSBPUFRJT05fVDEgICAgICAgICAgICAgICAgNTgKKyNkZWZpbmUgT1BUSU9OX1QyICAgICAgICAgICAgICAgIDU5CisjZGVmaW5lIE9QVElPTl9WRU5ET1JfSUQgICAgICAgICA2MAorI2RlZmluZSBPUFRJT05fQ0xJRU5UX0lEICAgICAgICAgNjEKKyNkZWZpbmUgT1BUSU9OX1NOQU1FICAgICAgICAgICAgIDY2CisjZGVmaW5lIE9QVElPTl9GSUxFTkFNRSAgICAgICAgICA2NworI2RlZmluZSBPUFRJT05fVVNFUl9DTEFTUyAgICAgICAgNzcKKyNkZWZpbmUgT1BUSU9OX0NMSUVOVF9GUUROICAgICAgIDgxCisjZGVmaW5lIE9QVElPTl9BR0VOVF9JRCAgICAgICAgICA4MgorI2RlZmluZSBPUFRJT05fQVJDSCAgICAgICAgICAgICAgOTMKKyNkZWZpbmUgT1BUSU9OX1BYRV9VVUlEICAgICAgICAgIDk3CisjZGVmaW5lIE9QVElPTl9TVUJORVRfU0VMRUNUICAgICAxMTgKKyNkZWZpbmUgT1BUSU9OX0VORCAgICAgICAgICAgICAgIDI1NQorCisjZGVmaW5lIFNVQk9QVF9DSVJDVUlUX0lEICAgICAgICAxCisjZGVmaW5lIFNVQk9QVF9SRU1PVEVfSUQgICAgICAgICAyCisjZGVmaW5lIFNVQk9QVF9TVUJORVRfU0VMRUNUICAgICA1ICAgICAvKiBSRkMgMzUyNyAqLworI2RlZmluZSBTVUJPUFRfU1VCU0NSX0lEICAgICAgICAgNiAgICAgLyogUkZDIDMzOTMgKi8KKyNkZWZpbmUgU1VCT1BUX1NFUlZFUl9PUiAgICAgICAgIDExICAgIC8qIFJGQyA1MTA3ICovCisKKyNkZWZpbmUgU1VCT1BUX1BYRV9CT09UX0lURU0gICAgIDcxICAgIC8qIFBYRSBzdGFuZGFyZCAqLworI2RlZmluZSBTVUJPUFRfUFhFX0RJU0NPVkVSWSAgICAgNgorI2RlZmluZSBTVUJPUFRfUFhFX1NFUlZFUlMgICAgICAgOAorI2RlZmluZSBTVUJPUFRfUFhFX01FTlUgICAgICAgICAgOQorI2RlZmluZSBTVUJPUFRfUFhFX01FTlVfUFJPTVBUICAgMTAKKworI2RlZmluZSBESENQRElTQ09WRVIgICAgICAgICAgICAgMQorI2RlZmluZSBESENQT0ZGRVIgICAgICAgICAgICAgICAgMgorI2RlZmluZSBESENQUkVRVUVTVCAgICAgICAgICAgICAgMworI2RlZmluZSBESENQREVDTElORSAgICAgICAgICAgICAgNAorI2RlZmluZSBESENQQUNLICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBESENQTkFLICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBESENQUkVMRUFTRSAgICAgICAgICAgICAgNworI2RlZmluZSBESENQSU5GT1JNICAgICAgICAgICAgICAgOAorCisjZGVmaW5lIGhhdmVfY29uZmlnKGNvbmZpZywgbWFzaykgKChjb25maWcpICYmICgoY29uZmlnKS0+ZmxhZ3MgJiAobWFzaykpKSAKKyNkZWZpbmUgb3B0aW9uX2xlbihvcHQpICgoaW50KSgoKHVuc2lnbmVkIGNoYXIgKikob3B0KSlbMV0pKQorI2RlZmluZSBvcHRpb25fcHRyKG9wdCwgaSkgKCh2b2lkICopJigoKHVuc2lnbmVkIGNoYXIgKikob3B0KSlbMnUrKHVuc2lnbmVkIGludCkoaSldKSkKKworc3RhdGljIGludCBzYW5pdGlzZSh1bnNpZ25lZCBjaGFyICpvcHQsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3RydWN0IGluX2FkZHIgc2VydmVyX2lkKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBpbl9hZGRyIG92ZXJyaWRlLCBzdHJ1Y3QgaW5fYWRkciBmYWxsYmFjayk7CitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfdGltZShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZywgdW5zaWduZWQgY2hhciAqb3B0KTsKK3N0YXRpYyB2b2lkIG9wdGlvbl9wdXQoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCB1bnNpZ25lZCBjaGFyICplbmQsIGludCBvcHQsIGludCBsZW4sIHVuc2lnbmVkIGludCB2YWwpOworc3RhdGljIHZvaWQgb3B0aW9uX3B1dF9zdHJpbmcoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCB1bnNpZ25lZCBjaGFyICplbmQsIAorCQkJICAgICAgaW50IG9wdCwgY2hhciAqc3RyaW5nLCBpbnQgbnVsbF90ZXJtKTsKK3N0YXRpYyBzdHJ1Y3QgaW5fYWRkciBvcHRpb25fYWRkcih1bnNpZ25lZCBjaGFyICpvcHQpOworc3RhdGljIHN0cnVjdCBpbl9hZGRyIG9wdGlvbl9hZGRyX2Fycih1bnNpZ25lZCBjaGFyICpvcHQsIGludCBvZmZzZXQpOworc3RhdGljIHVuc2lnbmVkIGludCBvcHRpb25fdWludCh1bnNpZ25lZCBjaGFyICpvcHQsIGludCBpLCBpbnQgc2l6ZSk7CitzdGF0aWMgdm9pZCBsb2dfcGFja2V0KGNoYXIgKnR5cGUsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGNoYXIgKmV4dF9tYWMsIAorCQkgICAgICAgaW50IG1hY19sZW4sIGNoYXIgKmludGVyZmFjZSwgY2hhciAqc3RyaW5nLCB1MzIgeGlkKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpvcHRpb25fZmluZChzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHNpemVfdCBzaXplLCBpbnQgb3B0X3R5cGUsIGludCBtaW5zaXplKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpvcHRpb25fZmluZDEodW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgY2hhciAqZW5kLCBpbnQgb3B0LCBpbnQgbWluc2l6ZSk7CitzdGF0aWMgc2l6ZV90IGRoY3BfcGFja2V0X3NpemUoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYWdlbnRfaWQsIHVuc2lnbmVkIGNoYXIgKnJlYWxfZW5kKTsKK3N0YXRpYyB2b2lkIGNsZWFyX3BhY2tldChzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCk7CitzdGF0aWMgdm9pZCBkb19vcHRpb25zKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsCisJCSAgICAgICBzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpyZWFsX2VuZCwgCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpyZXFfb3B0aW9ucywKKwkJICAgICAgIGNoYXIgKmhvc3RuYW1lLCAKKwkJICAgICAgIGNoYXIgKmRvbWFpbiwgY2hhciAqY29uZmlnX2RvbWFpbiwKKwkJICAgICAgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZCwKKwkJICAgICAgIHN0cnVjdCBpbl9hZGRyIHN1Ym5ldF9hZGRyLAorCQkgICAgICAgdW5zaWduZWQgY2hhciBmcWRuX2ZsYWdzLAorCQkgICAgICAgaW50IG51bGxfdGVybSwgaW50IHB4ZWFyY2gsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICp1dWlkKTsKKworCitzdGF0aWMgdm9pZCBtYXRjaF92ZW5kb3Jfb3B0cyh1bnNpZ25lZCBjaGFyICpvcHQsIHN0cnVjdCBkaGNwX29wdCAqZG9wdCk7IAorc3RhdGljIHZvaWQgZG9fZW5jYXBfb3B0cyhzdHJ1Y3QgZGhjcF9vcHQgKm9wdHMsIGludCBlbmNhcCwgaW50IGZsYWcsIHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgdW5zaWduZWQgY2hhciAqZW5kLCBpbnQgbnVsbF90ZXJtKTsKK3N0YXRpYyB2b2lkIHB4ZV9taXNjKHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgdW5zaWduZWQgY2hhciAqZW5kLCB1bnNpZ25lZCBjaGFyICp1dWlkKTsKK3N0YXRpYyBpbnQgcHJ1bmVfdmVuZG9yX29wdHMoc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkKTsKK3N0YXRpYyBzdHJ1Y3QgZGhjcF9vcHQgKnB4ZV9vcHRzKGludCBweGVfYXJjaCwgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkKTsKK3N0cnVjdCBkaGNwX2Jvb3QgKmZpbmRfYm9vdChzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQpOworCisgIAorc2l6ZV90IGRoY3BfcmVwbHkoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgY2hhciAqaWZhY2VfbmFtZSwgaW50IGludF9pbmRleCwKKwkJICBzaXplX3Qgc3osIHRpbWVfdCBub3csIGludCB1bmljYXN0X2Rlc3QsIGludCAqaXNfaW5mb3JtKQoreworICB1bnNpZ25lZCBjaGFyICpvcHQsICpjbGlkID0gTlVMTDsKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmx0bXAsICpsZWFzZSA9IE5VTEw7CisgIHN0cnVjdCBkaGNwX3ZlbmRvciAqdmVuZG9yOworICBzdHJ1Y3QgZGhjcF9tYWMgKm1hYzsKKyAgc3RydWN0IGRoY3BfbmV0aWRfbGlzdCAqaWRfbGlzdDsKKyAgaW50IGNsaWRfbGVuID0gMCwgaWdub3JlID0gMCwgZG9fY2xhc3NlcyA9IDAsIHNlbGVjdGluZyA9IDAsIHB4ZWFyY2ggPSAtMTsKKyAgc3RydWN0IGRoY3BfcGFja2V0ICptZXNzID0gKHN0cnVjdCBkaGNwX3BhY2tldCAqKWRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2Jhc2U7CisgIHVuc2lnbmVkIGNoYXIgKmVuZCA9ICh1bnNpZ25lZCBjaGFyICopKG1lc3MgKyAxKTsgCisgIHVuc2lnbmVkIGNoYXIgKnJlYWxfZW5kID0gKHVuc2lnbmVkIGNoYXIgKikobWVzcyArIDEpOyAKKyAgY2hhciAqaG9zdG5hbWUgPSBOVUxMLCAqb2ZmZXJfaG9zdG5hbWUgPSBOVUxMLCAqY2xpZW50X2hvc3RuYW1lID0gTlVMTCwgKmRvbWFpbiA9IE5VTEw7CisgIGludCBob3N0bmFtZV9hdXRoID0gMCwgYm9ya2VuX29wdCA9IDA7CisgIHVuc2lnbmVkIGNoYXIgKnJlcV9vcHRpb25zID0gTlVMTDsKKyAgY2hhciAqbWVzc2FnZSA9IE5VTEw7CisgIHVuc2lnbmVkIGludCB0aW1lOworICBzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZzsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkOworICBzdHJ1Y3QgaW5fYWRkciBzdWJuZXRfYWRkciwgZmFsbGJhY2ssIG92ZXJyaWRlOworICB1bnNpZ25lZCBzaG9ydCBmdXp6ID0gMDsKKyAgdW5zaWduZWQgaW50IG1lc3NfdHlwZSA9IDA7CisgIHVuc2lnbmVkIGNoYXIgZnFkbl9mbGFncyA9IDA7CisgIHVuc2lnbmVkIGNoYXIgKmFnZW50X2lkID0gTlVMTCwgKnV1aWQgPSBOVUxMOworICB1bnNpZ25lZCBjaGFyICplbWFjID0gTlVMTDsKKyAgaW50IGVtYWNfbGVuID0gMDsKKyAgc3RydWN0IGRoY3BfbmV0aWQga25vd25faWQsIGlmYWNlX2lkOworICBzdHJ1Y3QgZGhjcF9vcHQgKm87CisgIHVuc2lnbmVkIGNoYXIgcHhlX3V1aWRbMTddOworCisgIHN1Ym5ldF9hZGRyLnNfYWRkciA9IG92ZXJyaWRlLnNfYWRkciA9IDA7CisKKyAgLyogc2V0IHRhZyB3aXRoIG5hbWUgPT0gaW50ZXJmYWNlICovCisgIGlmYWNlX2lkLm5ldCA9IGlmYWNlX25hbWU7CisgIGlmYWNlX2lkLm5leHQgPSBOVUxMOworICBuZXRpZCA9ICZpZmFjZV9pZDsgCisgIAorICBpZiAobWVzcy0+b3AgIT0gQk9PVFJFUVVFU1QgfHwgbWVzcy0+aGxlbiA+IERIQ1BfQ0hBRERSX01BWCkKKyAgICByZXR1cm4gMDsKKyAgIAorICBpZiAobWVzcy0+aHR5cGUgPT0gMCAmJiBtZXNzLT5obGVuICE9IDApCisgICAgcmV0dXJuIDA7CisKKyAgLyogY2hlY2sgZm9yIERIQ1AgcmF0aGVyIHRoYW4gQk9PVFAgKi8KKyAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX01FU1NBR0VfVFlQRSwgMSkpKQorICAgIHsKKyAgICAgIG1lc3NfdHlwZSA9IG9wdGlvbl91aW50KG9wdCwgMCwgMSk7CisKKyAgICAgIC8qIG9ubHkgaW5zaXN0IG9uIGEgY29va2llIGZvciBESENQLiAqLworICAgICAgaWYgKCooKHUzMiAqKSZtZXNzLT5vcHRpb25zKSAhPSBodG9ubChESENQX0NPT0tJRSkpCisJcmV0dXJuIDA7CisKKyAgICAgIC8qIHR3byB0aGluZ3MgdG8gbm90ZSBoZXJlOiBleHBhbmRfYnVmIG1heSBtb3ZlIHRoZSBwYWNrZXQsCisJIHNvIHJlYXNzaWduIG1lc3MgZnJvbSBkYWVtb24tPnBhY2tldC4gQWxzbywgdGhlIHNpemUKKwkgc2VudCBpbmNsdWRlcyB0aGUgSVAgYW5kIFVEUCBoZWFkZXJzLCBoZW5jZSB0aGUgbWFnaWMgIi0yOCIgKi8KKyAgICAgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9NQVhNRVNTQUdFLCAyKSkpCisJeworCSAgc2l6ZV90IHNpemUgPSAoc2l6ZV90KW9wdGlvbl91aW50KG9wdCwgMCwgMikgLSAyODsKKwkgIAorCSAgaWYgKHNpemUgPiBESENQX1BBQ0tFVF9NQVgpCisJICAgIHNpemUgPSBESENQX1BBQ0tFVF9NQVg7CisJICBlbHNlIGlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBkaGNwX3BhY2tldCkpCisJICAgIHNpemUgPSBzaXplb2Yoc3RydWN0IGRoY3BfcGFja2V0KTsKKwkgIAorCSAgaWYgKGV4cGFuZF9idWYoJmRhZW1vbi0+ZGhjcF9wYWNrZXQsIHNpemUpKQorCSAgICB7CisJICAgICAgbWVzcyA9IChzdHJ1Y3QgZGhjcF9wYWNrZXQgKilkYWVtb24tPmRoY3BfcGFja2V0Lmlvdl9iYXNlOworCSAgICAgIHJlYWxfZW5kID0gZW5kID0gKCh1bnNpZ25lZCBjaGFyICopbWVzcykgKyBzaXplOworCSAgICB9CisJfQorCisgICAgICAvKiBTb21lIGJ1Z2d5IGNsaWVudHMgc2V0IGNpYWRkciB3aGVuIHRoZXkgc2hvdWxkbid0LCBzbyBjbGVhciB0aGF0IGhlcmUgc2luY2UKKwkgaXQgY2FuIGFmZmVjdCB0aGUgY29udGV4dC1kZXRlcm1pbmF0aW9uIGNvZGUuICovCisgICAgICBpZiAoKG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fUkVRVUVTVEVEX0lQLCBJTkFERFJTWikgfHwgbWVzc190eXBlID09IERIQ1BESVNDT1ZFUikpCisJbWVzcy0+Y2lhZGRyLnNfYWRkciA9IDA7CisKKyAgICAgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9BR0VOVF9JRCwgMSkpKQorCXsKKwkgIC8qIEFueSBhZ2VudC1pZCBuZWVkcyB0byBiZSBjb3BpZWQgYmFjayBvdXQsIHZlcmJhdGltLCBhcyB0aGUgbGFzdCBvcHRpb24KKwkgICAgIGluIHRoZSBwYWNrZXQuIEhlcmUsIHdlIHNoaWZ0IGl0IHRvIHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYnVmZmVyLCBpZiBpdCBkb2Vzbid0CisJICAgICBnZXQgb3ZlcndyaXR0ZW4sIHRoZW4gaXQgd2lsbCBiZSBzaHVmZmxlZCBiYWNrIGF0IHRoZSBlbmQgb2YgcHJvY2Vzc2luZy4KKwkgICAgIE5vdGUgdGhhdCB0aGUgaW5jb21pbmcgb3B0aW9ucyBtdXN0IG5vdCBiZSBvdmVyd3JpdHRlbiBoZXJlLCBzbyB0aGVyZSBoYXMgdG8gCisJICAgICBiZSBlbm91Z2ggZnJlZSBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgdG8gY29weSB0aGUgb3B0aW9uLiAqLworCSAgdW5zaWduZWQgY2hhciAqc29wdDsKKwkgIHVuc2lnbmVkIGludCB0b3RhbCA9IG9wdGlvbl9sZW4ob3B0KSArIDI7CisJICB1bnNpZ25lZCBjaGFyICpsYXN0X29wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fRU5ELCAwKTsKKwkgIGlmIChsYXN0X29wdCAmJiBsYXN0X29wdCA8IGVuZCAtIHRvdGFsKQorCSAgICB7CisJICAgICAgZW5kIC09IHRvdGFsOworCSAgICAgIGFnZW50X2lkID0gZW5kOworCSAgICAgIG1lbWNweShhZ2VudF9pZCwgb3B0LCB0b3RhbCk7CisJICAgIH0KKworCSAgLyogbG9vayBmb3IgUkZDMzUyNyBMaW5rIHNlbGVjdGlvbiBzdWItb3B0aW9uICovCisJICBpZiAoKHNvcHQgPSBvcHRpb25fZmluZDEob3B0aW9uX3B0cihvcHQsIDApLCBvcHRpb25fcHRyKG9wdCwgb3B0aW9uX2xlbihvcHQpKSwgU1VCT1BUX1NVQk5FVF9TRUxFQ1QsIElOQUREUlNaKSkpCisJICAgIHN1Ym5ldF9hZGRyID0gb3B0aW9uX2FkZHIoc29wdCk7CisKKwkgIC8qIGxvb2sgZm9yIFJGQzUxMDcgc2VydmVyLWlkZW50aWZpZXItb3ZlcnJpZGUgKi8KKwkgIGlmICgoc29wdCA9IG9wdGlvbl9maW5kMShvcHRpb25fcHRyKG9wdCwgMCksIG9wdGlvbl9wdHIob3B0LCBvcHRpb25fbGVuKG9wdCkpLCBTVUJPUFRfU0VSVkVSX09SLCBJTkFERFJTWikpKQorCSAgICBvdmVycmlkZSA9IG9wdGlvbl9hZGRyKHNvcHQpOworCSAgCisJICAvKiBpZiBhIGNpcmN1aXQtaWQgb3IgcmVtb3RlLWlzIG9wdGlvbiBpcyBwcm92aWRlZCwgZXhhY3QtbWF0Y2ggdG8gb3B0aW9ucy4gKi8gCisJICBmb3IgKHZlbmRvciA9IGRhZW1vbi0+ZGhjcF92ZW5kb3JzOyB2ZW5kb3I7IHZlbmRvciA9IHZlbmRvci0+bmV4dCkKKwkgICAgeworCSAgICAgIGludCBzZWFyY2g7CisJICAgICAgCisJICAgICAgaWYgKHZlbmRvci0+bWF0Y2hfdHlwZSA9PSBNQVRDSF9DSVJDVUlUKQorCQlzZWFyY2ggPSBTVUJPUFRfQ0lSQ1VJVF9JRDsKKwkgICAgICBlbHNlIGlmICh2ZW5kb3ItPm1hdGNoX3R5cGUgPT0gTUFUQ0hfUkVNT1RFKQorCQlzZWFyY2ggPSBTVUJPUFRfUkVNT1RFX0lEOworCSAgICAgIGVsc2UgaWYgKHZlbmRvci0+bWF0Y2hfdHlwZSA9PSBNQVRDSF9TVUJTQ1JJQkVSKQorCQlzZWFyY2ggPSBTVUJPUFRfU1VCU0NSX0lEOworCSAgICAgIGVsc2UgCisJCWNvbnRpbnVlOworCisJICAgICAgaWYgKChzb3B0ID0gb3B0aW9uX2ZpbmQxKG9wdGlvbl9wdHIob3B0LCAwKSwgb3B0aW9uX3B0cihvcHQsIG9wdGlvbl9sZW4ob3B0KSksIHNlYXJjaCwgMSkpICYmCisJCSAgdmVuZG9yLT5sZW4gPT0gb3B0aW9uX2xlbihzb3B0KSAmJgorCQkgIG1lbWNtcChvcHRpb25fcHRyKHNvcHQsIDApLCB2ZW5kb3ItPmRhdGEsIHZlbmRvci0+bGVuKSA9PSAwKQorCQl7CisJCSAgdmVuZG9yLT5uZXRpZC5uZXh0ID0gbmV0aWQ7CisJCSAgbmV0aWQgPSAmdmVuZG9yLT5uZXRpZDsKKwkJICBicmVhazsKKwkJfSAKKwkgICAgfQorCX0KKworICAgICAgLyogQ2hlY2sgZm9yIFJGQzMwMTEgc3VibmV0IHNlbGVjdG9yIC0gb25seSBpZiBSRkMzNTI3IG9uZSBub3QgcHJlc2VudCAqLworICAgICAgaWYgKHN1Ym5ldF9hZGRyLnNfYWRkciA9PSAwICYmIChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1NVQk5FVF9TRUxFQ1QsIElOQUREUlNaKSkpCisJc3VibmV0X2FkZHIgPSBvcHRpb25fYWRkcihvcHQpOworICAgICAgCisgICAgICAvKiBJZiB0aGVyZSBpcyBubyBjbGllbnQgaWRlbnRpZmllciBvcHRpb24sIHVzZSB0aGUgaGFyZHdhcmUgYWRkcmVzcyAqLworICAgICAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX0NMSUVOVF9JRCwgMSkpKQorCXsKKwkgIGNsaWRfbGVuID0gb3B0aW9uX2xlbihvcHQpOworCSAgY2xpZCA9IG9wdGlvbl9wdHIob3B0LCAwKTsKKwl9CisKKyAgICAgIC8qIGRvIHdlIGhhdmUgYSBsZWFzZSBpbiBzdG9yZT8gKi8KKyAgICAgIGxlYXNlID0gbGVhc2VfZmluZF9ieV9jbGllbnQobWVzcy0+Y2hhZGRyLCBtZXNzLT5obGVuLCBtZXNzLT5odHlwZSwgY2xpZCwgY2xpZF9sZW4pOworCisgICAgICAvKiBJZiB0aGlzIHJlcXVlc3QgaXMgbWlzc2luZyBhIGNsaWQsIGJ1dCB3ZSd2ZSBzZWVuIG9uZSBiZWZvcmUsIAorCSB1c2UgaXQgYWdhaW4gZm9yIG9wdGlvbiBtYXRjaGluZyBldGMuICovCisgICAgICBpZiAobGVhc2UgJiYgIWNsaWQgJiYgbGVhc2UtPmNsaWQpCisJeworCSAgY2xpZF9sZW4gPSBsZWFzZS0+Y2xpZF9sZW47CisJICBjbGlkID0gbGVhc2UtPmNsaWQ7CisJfQorCisgICAgICAvKiBmaW5kIG1hYyB0byB1c2UgZm9yIGxvZ2dpbmcgYW5kIGhhc2hpbmcgKi8KKyAgICAgIGVtYWMgPSBleHRlbmRlZF9od2FkZHIobWVzcy0+aHR5cGUsIG1lc3MtPmhsZW4sIG1lc3MtPmNoYWRkciwgY2xpZF9sZW4sIGNsaWQsICZlbWFjX2xlbik7CisgICAgfQorICAKKyAgZm9yIChtYWMgPSBkYWVtb24tPmRoY3BfbWFjczsgbWFjOyBtYWMgPSBtYWMtPm5leHQpCisgICAgaWYgKG1hYy0+aHdhZGRyX2xlbiA9PSBtZXNzLT5obGVuICYmCisJKG1hYy0+aHdhZGRyX3R5cGUgPT0gbWVzcy0+aHR5cGUgfHwgbWFjLT5od2FkZHJfdHlwZSA9PSAwKSAmJgorCW1lbWNtcF9tYXNrZWQobWFjLT5od2FkZHIsIG1lc3MtPmNoYWRkciwgbWVzcy0+aGxlbiwgbWFjLT5tYXNrKSkKKyAgICAgIHsKKwltYWMtPm5ldGlkLm5leHQgPSBuZXRpZDsKKwluZXRpZCA9ICZtYWMtPm5ldGlkOworICAgICAgfQorICAKKyAgLyogRGV0ZXJtaW5lIG5ldHdvcmsgZm9yIHRoaXMgcGFja2V0LiBPdXIgY2FsbGVyIHdpbGwgaGF2ZSBhbHJlYWR5IGxpbmtlZCBhbGwgdGhlIAorICAgICBjb250ZXh0cyB3aGljaCBtYXRjaCB0aGUgYWRkcmVzc2VzIG9mIHRoZSByZWNlaXZpbmcgaW50ZXJmYWNlIGJ1dCBpZiB0aGUgCisgICAgIG1hY2hpbmUgaGFzIGFuIGFkZHJlc3MgYWxyZWFkeSwgb3IgY2FtZSB2aWEgYSByZWxheSwgb3Igd2UgaGF2ZSBhIHN1Ym5ldCBzZWxlY3RvciwgCisgICAgIHdlIHNlYXJjaCBhZ2Fpbi4gSWYgd2UgZG9uJ3QgaGF2ZSBoYXZlIGEgZ2lhZGRyIG9yIGV4cGxpY2l0IHN1Ym5ldCBzZWxlY3RvciwgCisgICAgIHVzZSB0aGUgY2lhZGRyLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGEgIG1hY2hpbmUgd2hpY2ggZ290IGEgbGVhc2UgdmlhIGEgCisgICAgIHJlbGF5IHdvbid0IHVzZSB0aGUgcmVsYXkgdG8gcmVuZXcuIElmIG1hdGNoaW5nIGEgY2lhZGRyIGZhaWxzIGJ1dCB3ZSBoYXZlIGEgY29udGV4dCAKKyAgICAgZnJvbSB0aGUgcGh5c2ljYWwgbmV0d29yaywgY29udGludWUgdXNpbmcgdGhhdCB0byBhbGxvdyBjb3JyZWN0IERIQ1BOQUsgZ2VuZXJhdGlvbiBsYXRlci4gKi8KKyAgaWYgKG1lc3MtPmdpYWRkci5zX2FkZHIgfHwgc3VibmV0X2FkZHIuc19hZGRyIHx8IG1lc3MtPmNpYWRkci5zX2FkZHIpCisgICAgeworICAgICAgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dF90bXAsICpjb250ZXh0X25ldyA9IE5VTEw7CisgICAgICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworICAgICAgaW50IGZvcmNlID0gMDsKKyAgICAgIAorICAgICAgaWYgKHN1Ym5ldF9hZGRyLnNfYWRkcikKKwl7CisJICBhZGRyID0gc3VibmV0X2FkZHI7CisJICBmb3JjZSA9IDE7CisJfQorICAgICAgZWxzZSBpZiAobWVzcy0+Z2lhZGRyLnNfYWRkcikKKwl7CisJICBhZGRyID0gbWVzcy0+Z2lhZGRyOworCSAgZm9yY2UgPSAxOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBJZiBjaWFkZHIgaXMgaW4gdGhlIGhhcmR3YXJlIGRlcml2ZWQgc2V0IG9mIGNvbnRleHRzLCBsZWF2ZSB0aGF0IHVuY2hhbmdlZCAqLworCSAgYWRkciA9IG1lc3MtPmNpYWRkcjsKKwkgIGZvciAoY29udGV4dF90bXAgPSBjb250ZXh0OyBjb250ZXh0X3RtcDsgY29udGV4dF90bXAgPSBjb250ZXh0X3RtcC0+Y3VycmVudCkKKwkgICAgaWYgKGNvbnRleHRfdG1wLT5uZXRtYXNrLnNfYWRkciAmJiAKKwkJaXNfc2FtZV9uZXQoYWRkciwgY29udGV4dF90bXAtPnN0YXJ0LCBjb250ZXh0X3RtcC0+bmV0bWFzaykgJiYKKwkJaXNfc2FtZV9uZXQoYWRkciwgY29udGV4dF90bXAtPmVuZCwgY29udGV4dF90bXAtPm5ldG1hc2spKQorCSAgICAgIHsKKwkJY29udGV4dF9uZXcgPSBjb250ZXh0OworCQlicmVhazsKKwkgICAgICB9CisJfSAKKwkJCisgICAgICBpZiAoIWNvbnRleHRfbmV3KQorCWZvciAoY29udGV4dF90bXAgPSBkYWVtb24tPmRoY3A7IGNvbnRleHRfdG1wOyBjb250ZXh0X3RtcCA9IGNvbnRleHRfdG1wLT5uZXh0KQorCSAgaWYgKGNvbnRleHRfdG1wLT5uZXRtYXNrLnNfYWRkciAgJiYgCisJICAgICAgaXNfc2FtZV9uZXQoYWRkciwgY29udGV4dF90bXAtPnN0YXJ0LCBjb250ZXh0X3RtcC0+bmV0bWFzaykgJiYKKwkgICAgICBpc19zYW1lX25ldChhZGRyLCBjb250ZXh0X3RtcC0+ZW5kLCBjb250ZXh0X3RtcC0+bmV0bWFzaykpCisJICAgIHsKKwkgICAgICBjb250ZXh0X3RtcC0+Y3VycmVudCA9IGNvbnRleHRfbmV3OworCSAgICAgIGNvbnRleHRfbmV3ID0gY29udGV4dF90bXA7CisJICAgIH0KKyAgICAgIAorICAgICAgaWYgKGNvbnRleHRfbmV3IHx8IGZvcmNlKQorCWNvbnRleHQgPSBjb250ZXh0X25ldzsKKyAgICAgIAorICAgIH0KKyAgCisgIGlmICghY29udGV4dCkKKyAgICB7CisgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUCByZXF1ZXN0ICVzICVzIiksIAorCQlzdWJuZXRfYWRkci5zX2FkZHIgPyBfKCJ3aXRoIHN1Ym5ldCBzZWxlY3RvciIpIDogXygidmlhIiksCisJCXN1Ym5ldF9hZGRyLnNfYWRkciA/IGluZXRfbnRvYShzdWJuZXRfYWRkcikgOiAobWVzcy0+Z2lhZGRyLnNfYWRkciA/IGluZXRfbnRvYShtZXNzLT5naWFkZHIpIDogaWZhY2VfbmFtZSkpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIC8qIGtlZXAgX2FfIGxvY2FsIGFkZHJlc3MgYXZhaWxhYmxlLiAqLworICBmYWxsYmFjayA9IGNvbnRleHQtPmxvY2FsOworICAKKyAgaWYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9MT0dfT1BUUykKKyAgICB7CisgICAgICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0X3RtcDsKKyAgICAgIGZvciAoY29udGV4dF90bXAgPSBjb250ZXh0OyBjb250ZXh0X3RtcDsgY29udGV4dF90bXAgPSBjb250ZXh0X3RtcC0+Y3VycmVudCkKKwl7CisJICBzdHJjcHkoZGFlbW9uLT5uYW1lYnVmZiwgaW5ldF9udG9hKGNvbnRleHRfdG1wLT5zdGFydCkpOworCSAgaWYgKGNvbnRleHRfdG1wLT5mbGFncyAmIChDT05URVhUX1NUQVRJQyB8IENPTlRFWFRfUFJPWFkpKQorCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBBdmFpbGFibGUgREhDUCBzdWJuZXQ6ICVzLyVzIiksCisJCSAgICAgIG50b2hsKG1lc3MtPnhpZCksIGRhZW1vbi0+bmFtZWJ1ZmYsIGluZXRfbnRvYShjb250ZXh0X3RtcC0+bmV0bWFzaykpOworCSAgZWxzZQorCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBBdmFpbGFibGUgREhDUCByYW5nZTogJXMgLS0gJXMiKSwgCisJCSAgICAgIG50b2hsKG1lc3MtPnhpZCksIGRhZW1vbi0+bmFtZWJ1ZmYsIGluZXRfbnRvYShjb250ZXh0X3RtcC0+ZW5kKSk7CisJfQorICAgIH0KKworICBtZXNzLT5vcCA9IEJPT1RSRVBMWTsKKyAgCisgIGNvbmZpZyA9IGZpbmRfY29uZmlnKGRhZW1vbi0+ZGhjcF9jb25mLCBjb250ZXh0LCBjbGlkLCBjbGlkX2xlbiwgCisJCSAgICAgICBtZXNzLT5jaGFkZHIsIG1lc3MtPmhsZW4sIG1lc3MtPmh0eXBlLCBOVUxMKTsKKworICAvKiBzZXQgImtub3duIiB0YWcgZm9yIGtub3duIGhvc3RzICovCisgIGlmIChjb25maWcpCisgICAgeworICAgICAga25vd25faWQubmV0ID0gImtub3duIjsKKyAgICAgIGtub3duX2lkLm5leHQgPSBuZXRpZDsKKyAgICAgIG5ldGlkID0gJmtub3duX2lkOworICAgIH0KKyAgCisgIGlmIChtZXNzX3R5cGUgPT0gMCkKKyAgICB7CisgICAgICAvKiBCT09UUCByZXF1ZXN0ICovCisgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZCBpZCwgYm9vdHBfaWQ7CisgICAgICBzdHJ1Y3QgaW5fYWRkciAqbG9nYWRkciA9IE5VTEw7CisKKyAgICAgIC8qIG11c3QgaGF2ZSBhIE1BQyBhZGRyIGZvciBib290cCAqLworICAgICAgaWYgKG1lc3MtPmh0eXBlID09IDAgfHwgbWVzcy0+aGxlbiA9PSAwIHx8IChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUFJPWFkpKQorCXJldHVybiAwOworICAgICAgCisgICAgICBpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfRElTQUJMRSkpCisJbWVzc2FnZSA9IF8oImRpc2FibGVkIik7CisKKyAgICAgIGVuZCA9IG1lc3MtPm9wdGlvbnMgKyA2NDsgLyogQk9PVFAgdmVuZCBhcmVhIGlzIG9ubHkgNjQgYnl0ZXMgKi8KKyAgICAgICAgICAgIAorICAgICAgaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX05BTUUpKQorCXsKKwkgIGhvc3RuYW1lID0gY29uZmlnLT5ob3N0bmFtZTsKKwkgIGRvbWFpbiA9IGNvbmZpZy0+ZG9tYWluOworCX0KKworICAgICAgaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX05FVElEKSkKKwl7CisJICBjb25maWctPm5ldGlkLm5leHQgPSBuZXRpZDsKKwkgIG5ldGlkID0gJmNvbmZpZy0+bmV0aWQ7CisJfQorCisgICAgICAvKiBNYXRjaCBpbmNvbWluZyBmaWxlbmFtZSBmaWVsZCBhcyBhIG5ldGlkLiAqLworICAgICAgaWYgKG1lc3MtPmZpbGVbMF0pCisJeworCSAgbWVtY3B5KGRhZW1vbi0+ZGhjcF9idWZmMiwgbWVzcy0+ZmlsZSwgc2l6ZW9mKG1lc3MtPmZpbGUpKTsKKwkgIGRhZW1vbi0+ZGhjcF9idWZmMltzaXplb2YobWVzcy0+ZmlsZSkgKyAxXSA9IDA7IC8qIGVuc3VyZSB6ZXJvIHRlcm0uICovCisJICBpZC5uZXQgPSAoY2hhciAqKWRhZW1vbi0+ZGhjcF9idWZmMjsKKwkgIGlkLm5leHQgPSBuZXRpZDsKKwkgIG5ldGlkID0gJmlkOworCX0KKworICAgICAgLyogQWRkICJib290cCIgYXMgYSB0YWcgdG8gYWxsb3cgZGlmZmVyZW50IG9wdGlvbnMsIGFkZHJlc3MgcmFuZ2VzIGV0YworCSBmb3IgQk9PVFAgY2xpZW50cyAqLworICAgICAgYm9vdHBfaWQubmV0ID0gImJvb3RwIjsKKyAgICAgIGJvb3RwX2lkLm5leHQgPSBuZXRpZDsKKyAgICAgIG5ldGlkID0gJmJvb3RwX2lkOworICAgICAgCisgICAgICBmb3IgKGlkX2xpc3QgPSBkYWVtb24tPmRoY3BfaWdub3JlOyBpZF9saXN0OyBpZF9saXN0ID0gaWRfbGlzdC0+bmV4dCkKKwlpZiAobWF0Y2hfbmV0aWQoaWRfbGlzdC0+bGlzdCwgbmV0aWQsIDApKQorCSAgbWVzc2FnZSA9IF8oImlnbm9yZWQiKTsKKyAgICAgIAorICAgICAgaWYgKCFtZXNzYWdlKQorCXsKKwkgIGludCBuYWlsZWQgPSAwOworCisJICBpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfQUREUikpCisJICAgIHsKKwkgICAgICBuYWlsZWQgPSAxOworCSAgICAgIGxvZ2FkZHIgPSAmY29uZmlnLT5hZGRyOworCSAgICAgIG1lc3MtPnlpYWRkciA9IGNvbmZpZy0+YWRkcjsKKwkgICAgICBpZiAoKGxlYXNlID0gbGVhc2VfZmluZF9ieV9hZGRyKGNvbmZpZy0+YWRkcikpICYmCisJCSAgKGxlYXNlLT5od2FkZHJfbGVuICE9IG1lc3MtPmhsZW4gfHwKKwkJICAgbGVhc2UtPmh3YWRkcl90eXBlICE9IG1lc3MtPmh0eXBlIHx8CisJCSAgIG1lbWNtcChsZWFzZS0+aHdhZGRyLCBtZXNzLT5jaGFkZHIsIGxlYXNlLT5od2FkZHJfbGVuKSAhPSAwKSkKKwkJbWVzc2FnZSA9IF8oImFkZHJlc3MgaW4gdXNlIik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmICghKGxlYXNlID0gbGVhc2VfZmluZF9ieV9jbGllbnQobWVzcy0+Y2hhZGRyLCBtZXNzLT5obGVuLCBtZXNzLT5odHlwZSwgTlVMTCwgMCkpIHx8CisJCSAgIWFkZHJlc3NfYXZhaWxhYmxlKGNvbnRleHQsIGxlYXNlLT5hZGRyLCBuZXRpZCkpCisJCXsKKwkJICAgaWYgKGxlYXNlKQorCQkgICAgIHsKKwkJICAgICAgIC8qIGxlYXNlIGV4aXN0cywgd3JvbmcgbmV0d29yay4gKi8KKwkJICAgICAgIGxlYXNlX3BydW5lKGxlYXNlLCBub3cpOworCQkgICAgICAgbGVhc2UgPSBOVUxMOworCQkgICAgIH0KKwkJICAgaWYgKCFhZGRyZXNzX2FsbG9jYXRlKGNvbnRleHQsICZtZXNzLT55aWFkZHIsIG1lc3MtPmNoYWRkciwgbWVzcy0+aGxlbiwgbmV0aWQsIG5vdykpCisJCSAgICAgbWVzc2FnZSA9IF8oIm5vIGFkZHJlc3MgYXZhaWxhYmxlIik7CisJCX0KKwkgICAgICBlbHNlCisJCW1lc3MtPnlpYWRkciA9IGxlYXNlLT5hZGRyOworCSAgICB9CisJICAKKwkgIGlmICghbWVzc2FnZSAmJiAhKGNvbnRleHQgPSBuYXJyb3dfY29udGV4dChjb250ZXh0LCBtZXNzLT55aWFkZHIsIG5ldGlkKSkpCisJICAgIG1lc3NhZ2UgPSBfKCJ3cm9uZyBuZXR3b3JrIik7CisJICBlbHNlIGlmIChjb250ZXh0LT5uZXRpZC5uZXQpCisJICAgIHsKKwkgICAgICBjb250ZXh0LT5uZXRpZC5uZXh0ID0gbmV0aWQ7CisJICAgICAgbmV0aWQgPSAmY29udGV4dC0+bmV0aWQ7CisJICAgIH0JIAorCSAgCisJICBpZiAoIW1lc3NhZ2UgJiYgIW5haWxlZCkKKwkgICAgeworCSAgICAgIGZvciAoaWRfbGlzdCA9IGRhZW1vbi0+Ym9vdHBfZHluYW1pYzsgaWRfbGlzdDsgaWRfbGlzdCA9IGlkX2xpc3QtPm5leHQpCisJCWlmICgoIWlkX2xpc3QtPmxpc3QpIHx8IG1hdGNoX25ldGlkKGlkX2xpc3QtPmxpc3QsIG5ldGlkLCAwKSkKKwkJICBicmVhazsKKwkgICAgICBpZiAoIWlkX2xpc3QpCisJCW1lc3NhZ2UgPSBfKCJubyBhZGRyZXNzIGNvbmZpZ3VyZWQiKTsKKwkgICAgfQorCisJICBpZiAoIW1lc3NhZ2UgJiYgCisJICAgICAgIWxlYXNlICYmIAorCSAgICAgICghKGxlYXNlID0gbGVhc2VfYWxsb2NhdGUobWVzcy0+eWlhZGRyKSkpKQorCSAgICBtZXNzYWdlID0gXygibm8gbGVhc2VzIGxlZnQiKTsKKwkgIAorCSAgaWYgKCFtZXNzYWdlKQorCSAgICB7CisJICAgICAgbG9nYWRkciA9ICZtZXNzLT55aWFkZHI7CisJCQorCSAgICAgIGxlYXNlX3NldF9od2FkZHIobGVhc2UsIG1lc3MtPmNoYWRkciwgTlVMTCwgbWVzcy0+aGxlbiwgbWVzcy0+aHR5cGUsIDApOworCSAgICAgIGlmIChob3N0bmFtZSkKKwkJbGVhc2Vfc2V0X2hvc3RuYW1lKGxlYXNlLCBob3N0bmFtZSwgMSk7IAorCSAgICAgIC8qIGluZmluaXRlIGxlYXNlIHVubGVzcyBuYWlsZWQgaW4gZGhjcC1ob3N0IGxpbmUuICovCisJICAgICAgbGVhc2Vfc2V0X2V4cGlyZXMobGVhc2UsICAKKwkJCQloYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19USU1FKSA/IGNvbmZpZy0+bGVhc2VfdGltZSA6IDB4ZmZmZmZmZmYsIAorCQkJCW5vdyk7IAorCSAgICAgIGxlYXNlX3NldF9pbnRlcmZhY2UobGVhc2UsIGludF9pbmRleCk7CisJICAgICAgCisJICAgICAgY2xlYXJfcGFja2V0KG1lc3MsIGVuZCk7CisJICAgICAgZG9fb3B0aW9ucyhjb250ZXh0LCBtZXNzLCBlbmQsIE5VTEwsIGhvc3RuYW1lLCBnZXRfZG9tYWluKG1lc3MtPnlpYWRkciksIAorCQkJIGRvbWFpbiwgbmV0aWQsIHN1Ym5ldF9hZGRyLCAwLCAwLCAwLCBOVUxMKTsKKwkgICAgfQorCX0KKyAgICAgIAorICAgICAgbG9nX3BhY2tldCgiQk9PVFAiLCBsb2dhZGRyLCBtZXNzLT5jaGFkZHIsIG1lc3MtPmhsZW4sIGlmYWNlX25hbWUsIG1lc3NhZ2UsIG1lc3MtPnhpZCk7CisgICAgICAKKyAgICAgIHJldHVybiBtZXNzYWdlID8gMCA6IGRoY3BfcGFja2V0X3NpemUobWVzcywgbmV0aWQsIGFnZW50X2lkLCByZWFsX2VuZCk7CisgICAgfQorICAgICAgCisgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9DTElFTlRfRlFETiwgNCkpKQorICAgIHsKKyAgICAgIC8qIGh0dHA6Ly90b29scy5pZXRmLm9yZy93Zy9kaGMvZHJhZnQtaWV0Zi1kaGMtZnFkbi1vcHRpb24vZHJhZnQtaWV0Zi1kaGMtZnFkbi1vcHRpb24tMTAudHh0ICovCisgICAgICBpbnQgbGVuID0gb3B0aW9uX2xlbihvcHQpOworICAgICAgY2hhciAqcHEgPSBkYWVtb24tPmRoY3BfYnVmZjsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnBwLCAqb3AgPSBvcHRpb25fcHRyKG9wdCwgMCk7CisgICAgICAKKyAgICAgIGZxZG5fZmxhZ3MgPSAqb3A7CisgICAgICBsZW4gLT0gMzsKKyAgICAgIG9wICs9IDM7CisgICAgICBwcCA9IG9wOworICAgICAgCisgICAgICAvKiBBbHdheXMgZm9yY2UgdXBkYXRlLCBzaW5jZSB0aGUgY2xpZW50IGhhcyBubyB3YXkgdG8gZG8gaXQgaXRzZWxmLiAqLworICAgICAgaWYgKCEoZnFkbl9mbGFncyAmIDB4MDEpKQorCWZxZG5fZmxhZ3MgfD0gMHgwMjsKKyAgICAgIAorICAgICAgZnFkbl9mbGFncyAmPSB+MHgwODsKKyAgICAgIGZxZG5fZmxhZ3MgfD0gMHgwMTsKKyAgICAgIAorICAgICAgaWYgKGZxZG5fZmxhZ3MgJiAweDA0KQorCXdoaWxlICgqb3AgIT0gMCAmJiAoKG9wICsgKCpvcCkgKyAxKSAtIHBwKSA8IGxlbikKKwkgIHsKKwkgICAgbWVtY3B5KHBxLCBvcCsxLCAqb3ApOworCSAgICBwcSArPSAqb3A7CisJICAgIG9wICs9ICgqb3ApKzE7CisJICAgICoocHErKykgPSAnLic7CisJICB9CisgICAgICBlbHNlCisJeworCSAgbWVtY3B5KHBxLCBvcCwgbGVuKTsKKwkgIGlmIChsZW4gPiAwICYmIG9wW2xlbi0xXSA9PSAwKQorCSAgICBib3JrZW5fb3B0ID0gMTsKKwkgIHBxICs9IGxlbiArIDE7CisJfQorICAgICAgCisgICAgICBpZiAocHEgIT0gZGFlbW9uLT5kaGNwX2J1ZmYpCisJcHEtLTsKKyAgICAgIAorICAgICAgKnBxID0gMDsKKyAgICAgIAorICAgICAgaWYgKGxlZ2FsX2hvc3RuYW1lKGRhZW1vbi0+ZGhjcF9idWZmKSkKKwlvZmZlcl9ob3N0bmFtZSA9IGNsaWVudF9ob3N0bmFtZSA9IGRhZW1vbi0+ZGhjcF9idWZmOworICAgIH0KKyAgZWxzZSBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fSE9TVE5BTUUsIDEpKSkKKyAgICB7CisgICAgICBpbnQgbGVuID0gb3B0aW9uX2xlbihvcHQpOworICAgICAgbWVtY3B5KGRhZW1vbi0+ZGhjcF9idWZmLCBvcHRpb25fcHRyKG9wdCwgMCksIGxlbik7CisgICAgICAvKiBNaWNyb3NvZnQgY2xpZW50cyBhcmUgYnJva2VuLCBhbmQgbmVlZCB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5ncworCSBpbiBvcHRpb25zLiBXZSBkZXRlY3QgdGhpcyBzdGF0ZSBoZXJlLCBhbmQgZG8gdGhlIHNhbWUgaW4KKwkgYW55IG9wdGlvbnMgd2Ugc2VuZCAqLworICAgICAgaWYgKGxlbiA+IDAgJiYgZGFlbW9uLT5kaGNwX2J1ZmZbbGVuLTFdID09IDApCisJYm9ya2VuX29wdCA9IDE7CisgICAgICBlbHNlCisJZGFlbW9uLT5kaGNwX2J1ZmZbbGVuXSA9IDA7CisgICAgICBpZiAobGVnYWxfaG9zdG5hbWUoZGFlbW9uLT5kaGNwX2J1ZmYpKQorCWNsaWVudF9ob3N0bmFtZSA9IGRhZW1vbi0+ZGhjcF9idWZmOworICAgIH0KKworICBpZiAoY2xpZW50X2hvc3RuYW1lICYmIGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9MT0dfT1BUUykKKyAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBjbGllbnQgcHJvdmlkZXMgbmFtZTogJXMiKSwgbnRvaGwobWVzcy0+eGlkKSwgY2xpZW50X2hvc3RuYW1lKTsKKyAgCisgIGlmIChoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19OQU1FKSkKKyAgICB7CisgICAgICBob3N0bmFtZSA9IGNvbmZpZy0+aG9zdG5hbWU7CisgICAgICBkb21haW4gPSBjb25maWctPmRvbWFpbjsKKyAgICAgIGhvc3RuYW1lX2F1dGggPSAxOworICAgICAgLyogYmUgY2FyZWZ1bCBub3QgdG8gc2VuZCBhbiBPRkZFUiB3aXRoIGEgaG9zdG5hbWUgbm90IG1hdGNoaW5nIHRoZSBESVNDT1ZFUi4gKi8KKyAgICAgIGlmIChmcWRuX2ZsYWdzICE9IDAgfHwgIWNsaWVudF9ob3N0bmFtZSB8fCBob3N0bmFtZV9pc2VxdWFsKGhvc3RuYW1lLCBjbGllbnRfaG9zdG5hbWUpKQorICAgICAgICBvZmZlcl9ob3N0bmFtZSA9IGhvc3RuYW1lOworICAgIH0KKyAgZWxzZSBpZiAoY2xpZW50X2hvc3RuYW1lKQorICAgIHsKKyAgICAgIGRvbWFpbiA9IHN0cmlwX2hvc3RuYW1lKGNsaWVudF9ob3N0bmFtZSk7CisgICAgICAKKyAgICAgIGlmIChzdHJsZW4oY2xpZW50X2hvc3RuYW1lKSAhPSAwKQorCXsKKwkgIGhvc3RuYW1lID0gY2xpZW50X2hvc3RuYW1lOworCSAgaWYgKCFjb25maWcpCisJICAgIHsKKwkgICAgICAvKiBTZWFyY2ggYWdhaW4gbm93IHdlIGhhdmUgYSBob3N0bmFtZS4gCisJCSBPbmx5IGFjY2VwdCBjb25maWdzIHdpdGhvdXQgQ0xJRCBhbmQgSFdBRERSIGhlcmUsICh0aGV5IHdvbid0IG1hdGNoKQorCQkgdG8gYXZvaWQgaW1wZXJzb25hdGlvbiBieSBuYW1lLiAqLworCSAgICAgIHN0cnVjdCBkaGNwX2NvbmZpZyAqbmV3ID0gZmluZF9jb25maWcoZGFlbW9uLT5kaGNwX2NvbmYsIGNvbnRleHQsIE5VTEwsIDAsCisJCQkJCQkgICAgbWVzcy0+Y2hhZGRyLCBtZXNzLT5obGVuLCAKKwkJCQkJCSAgICBtZXNzLT5odHlwZSwgaG9zdG5hbWUpOworCSAgICAgIGlmIChuZXcgJiYgIWhhdmVfY29uZmlnKG5ldywgQ09ORklHX0NMSUQpICYmICFuZXctPmh3YWRkcikKKwkJeworCQkgIGNvbmZpZyA9IG5ldzsKKwkJICAvKiBzZXQgImtub3duIiB0YWcgZm9yIGtub3duIGhvc3RzICovCisJCSAga25vd25faWQubmV0ID0gImtub3duIjsKKwkJICBrbm93bl9pZC5uZXh0ID0gbmV0aWQ7CisJCSAgbmV0aWQgPSAma25vd25faWQ7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgIAorICBpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfTkVUSUQpKQorICAgIHsKKyAgICAgIGNvbmZpZy0+bmV0aWQubmV4dCA9IG5ldGlkOworICAgICAgbmV0aWQgPSAmY29uZmlnLT5uZXRpZDsKKyAgICB9CisgIAorICAvKiBkaGNwLW1hdGNoLiBJZiB3ZSBoYXZlIGhleC1hbmQtd2lsZGNhcmRzLCBsb29rIGZvciBhIGxlZnQtYW5jaG9yZWQgbWF0Y2guCisgICAgIE90aGVyd2lzZSBhc3N1bWUgdGhlIG9wdGlvbiBpcyBhbiBhcnJheSwgYW5kIGxvb2sgZm9yIGEgbWF0Y2hpbmcgZWxlbWVudC4gCisgICAgIElmIG5vIGRhdGEgZ2l2ZW4sIGV4aXN0YW5jZSBvZiB0aGUgb3B0aW9uIGlzIGVub3VnaC4gKi8KKyAgZm9yIChvID0gZGFlbW9uLT5kaGNwX21hdGNoOyBvOyBvID0gby0+bmV4dCkKKyAgICB7CisgICAgICBpbnQgaSwgbWF0Y2hlZCA9IDA7CisgICAgICAKKyAgICAgIGlmICghKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBvLT5vcHQsIDEpKSB8fAorCSAgby0+bGVuID4gb3B0aW9uX2xlbihvcHQpKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICBpZiAoby0+bGVuID09IDApCisJbWF0Y2hlZCA9IDE7CisgICAgICBlbHNlIGlmIChvLT5mbGFncyAmIERIT1BUX0hFWCkKKwl7IAorCSAgaWYgKG1lbWNtcF9tYXNrZWQoby0+dmFsLCBvcHRpb25fcHRyKG9wdCwgMCksIG8tPmxlbiwgby0+dS53aWxkY2FyZF9tYXNrKSkKKwkgICAgbWF0Y2hlZCA9IDE7CisJfQorICAgICAgZWxzZSAKKwlmb3IgKGkgPSAwOyBpIDw9IChvcHRpb25fbGVuKG9wdCkgLSBvLT5sZW4pOyApIAorCSAgeworCSAgICBpZiAobWVtY21wKG8tPnZhbCwgb3B0aW9uX3B0cihvcHQsIGkpLCBvLT5sZW4pID09IDApCisJICAgICAgeworCQltYXRjaGVkID0gMTsKKwkJYnJlYWs7CisJICAgICAgfQorCisJICAgIGlmIChvLT5mbGFncyAmIERIT1BUX1NUUklORykKKwkgICAgICBpKys7CisJICAgIGVsc2UKKwkgICAgICBpICs9IG8tPmxlbjsKKwkgIH0KKyAgICAgIAorICAgICAgaWYgKG1hdGNoZWQpCisJeworCSAgby0+bmV0aWQtPm5leHQgPSBuZXRpZDsKKwkgIG5ldGlkID0gby0+bmV0aWQ7CisJfQorICAgIH0KKwkKKyAgLyogdXNlci1jbGFzcyBvcHRpb25zIGFyZSwgYWNjb3JkaW5nIHRvIFJGQzMwMDQsIHN1cHBvc2VkIHRvIGNvbnRhaW4KKyAgICAgYSBzZXQgb2YgY291bnRlZCBzdHJpbmdzLiBIZXJlIHdlIGNoZWNrIHRoYXQgdGhpcyBpcyBzbyAoYnkgc2VlaW5nCisgICAgIGlmIHRoZSBjb3VudHMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgb3ZlcmFsbCBvcHRpb24gbGVuZ3RoKSBhbmQgaWYKKyAgICAgc28gemVybyB0aGUgY291bnRzIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IHNwdXJpb3VzIG1hdGNoZXMgYmV0d2VlbiAKKyAgICAgdGhlIHZlbmRvciBzdHJpbmcgYW5kIHRoZSBjb3VudHMuIElmIHRoZSBsZW5ndGhzIGRvbid0IGFkZCB1cCwgd2UKKyAgICAgYXNzdW1lIHRoYXQgdGhlIG9wdGlvbiBpcyBhIHNpbmdsZSBzdHJpbmcgYW5kIG5vbiBSRkMzMDA0IGNvbXBsaWFudCAKKyAgICAgYW5kIGp1c3QgZG8gdGhlIHN1YnN0cmluZyBtYXRjaC4gZGhjbGllbnQgcHJvdmlkZXMgdGhlc2UgYnJva2VuIG9wdGlvbnMuCisgICAgIFRoZSBjb2RlLCBsYXRlciwgd2hpY2ggc2VuZHMgdXNlci1jbGFzcyBkYXRhIHRvIHRoZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0CisgICAgIHJlbGllcyBvbiB0aGUgdHJhbnNmb3JtYXRpb24gZG9uZSBoZXJlLgorICAqLworCisgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9VU0VSX0NMQVNTLCAxKSkpCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciAqdWNwID0gb3B0aW9uX3B0cihvcHQsIDApOworICAgICAgaW50IHRtcCwgajsKKyAgICAgIGZvciAoaiA9IDA7IGogPCBvcHRpb25fbGVuKG9wdCk7IGogKz0gdWNwW2pdICsgMSk7CisgICAgICBpZiAoaiA9PSBvcHRpb25fbGVuKG9wdCkpCisJZm9yIChqID0gMDsgaiA8IG9wdGlvbl9sZW4ob3B0KTsgaiA9IHRtcCkKKwkgIHsKKwkgICAgdG1wID0gaiArIHVjcFtqXSArIDE7CisJICAgIHVjcFtqXSA9IDA7CisJICB9CisgICAgfQorICAgIAorICBmb3IgKHZlbmRvciA9IGRhZW1vbi0+ZGhjcF92ZW5kb3JzOyB2ZW5kb3I7IHZlbmRvciA9IHZlbmRvci0+bmV4dCkKKyAgICB7CisgICAgICBpbnQgbW9wdDsKKyAgICAgIAorICAgICAgaWYgKHZlbmRvci0+bWF0Y2hfdHlwZSA9PSBNQVRDSF9WRU5ET1IpCisJbW9wdCA9IE9QVElPTl9WRU5ET1JfSUQ7CisgICAgICBlbHNlIGlmICh2ZW5kb3ItPm1hdGNoX3R5cGUgPT0gTUFUQ0hfVVNFUikKKwltb3B0ID0gT1BUSU9OX1VTRVJfQ0xBU1M7IAorICAgICAgZWxzZQorCWNvbnRpbnVlOworCisgICAgICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBtb3B0LCAxKSkpCisJeworCSAgaW50IGk7CisJICBmb3IgKGkgPSAwOyBpIDw9IChvcHRpb25fbGVuKG9wdCkgLSB2ZW5kb3ItPmxlbik7IGkrKykKKwkgICAgaWYgKG1lbWNtcCh2ZW5kb3ItPmRhdGEsIG9wdGlvbl9wdHIob3B0LCBpKSwgdmVuZG9yLT5sZW4pID09IDApCisJICAgICAgeworCQl2ZW5kb3ItPm5ldGlkLm5leHQgPSBuZXRpZDsKKwkJbmV0aWQgPSAmdmVuZG9yLT5uZXRpZDsKKwkJYnJlYWs7CisJICAgICAgfQorCX0KKyAgICB9CisKKyAgLyogbWFyayB2ZW5kb3ItZW5jYXBzdWxhdGVkIG9wdGlvbnMgd2hpY2ggbWF0Y2ggdGhlIGNsaWVudC1zdXBwbGllZCB2ZW5kb3IgY2xhc3MgKi8KKyAgbWF0Y2hfdmVuZG9yX29wdHMob3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9WRU5ET1JfSUQsIDEpLCBkYWVtb24tPmRoY3Bfb3B0cyk7CisgICAgCisgIGlmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTE9HX09QVFMpCisgICAgeworICAgICAgaWYgKHNhbml0aXNlKG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fVkVORE9SX0lELCAxKSwgZGFlbW9uLT5uYW1lYnVmZikpCisJbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygiJXUgVmVuZG9yIGNsYXNzOiAlcyIpLCBudG9obChtZXNzLT54aWQpLCBkYWVtb24tPm5hbWVidWZmKTsKKyAgICAgIGlmIChzYW5pdGlzZShvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1VTRVJfQ0xBU1MsIDEpLCBkYWVtb24tPm5hbWVidWZmKSkKKwlteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBVc2VyIGNsYXNzOiAlcyIpLCBudG9obChtZXNzLT54aWQpLCBkYWVtb24tPm5hbWVidWZmKTsKKyAgICB9CisKKyAgLyogaWYgYWxsIHRoZSBuZXRpZHMgaW4gdGhlIGlnbm9yZSBsaXN0IGFyZSBwcmVzZW50LCBpZ25vcmUgdGhpcyBjbGllbnQgKi8KKyAgZm9yIChpZF9saXN0ID0gZGFlbW9uLT5kaGNwX2lnbm9yZTsgaWRfbGlzdDsgaWRfbGlzdCA9IGlkX2xpc3QtPm5leHQpCisgICAgaWYgKG1hdGNoX25ldGlkKGlkX2xpc3QtPmxpc3QsIG5ldGlkLCAwKSkKKyAgICAgIGlnbm9yZSA9IDE7CisgICAKKyAgLyogQ2FuIGhhdmUgc2V0dGluZyB0byBpZ25vcmUgdGhlIGNsaWVudCBJRCBmb3IgYSBwYXJ0aWN1bGFyIE1BQyBhZGRyZXNzIG9yIGhvc3RuYW1lICovCisgIGlmIChoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19OT0NMSUQpKQorICAgIGNsaWQgPSBOVUxMOworICAgICAgICAgIAorICAvKiBDaGVjayBpZiBjbGllbnQgaXMgUFhFIGNsaWVudC4gKi8KKyAgaWYgKGRhZW1vbi0+ZW5hYmxlX3B4ZSAmJiAKKyAgICAgIChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1ZFTkRPUl9JRCwgOSkpICYmIAorICAgICAgc3RybmNtcChvcHRpb25fcHRyKG9wdCwgMCksICJQWEVDbGllbnQiLCA5KSA9PSAwKQorICAgIHsKKyAgICAgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9QWEVfVVVJRCwgMTcpKSkKKwl7CisJICBtZW1jcHkocHhlX3V1aWQsIG9wdGlvbl9wdHIob3B0LCAwKSwgMTcpOworCSAgdXVpZCA9IHB4ZV91dWlkOworCX0KKworICAgICAgLyogQ2hlY2sgaWYgdGhpcyBpcyByZWFsbHkgYSBQWEUgYm9vdHNlcnZlciByZXF1ZXN0LCBhbmQgaGFuZGxlIHNwZWNpYWxseSBpZiBzby4gKi8KKyAgICAgIGlmICgobWVzc190eXBlID09IERIQ1BSRVFVRVNUIHx8IG1lc3NfdHlwZSA9PSBESENQSU5GT1JNKSAmJgorCSAgKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fVkVORE9SX0NMQVNTX09QVCwgMSkpICYmCisJICAob3B0ID0gb3B0aW9uX2ZpbmQxKG9wdGlvbl9wdHIob3B0LCAwKSwgb3B0aW9uX3B0cihvcHQsIG9wdGlvbl9sZW4ob3B0KSksIFNVQk9QVF9QWEVfQk9PVF9JVEVNLCA0KSkpCisJeworCSAgc3RydWN0IHB4ZV9zZXJ2aWNlICpzZXJ2aWNlOworCSAgaW50IHR5cGUgPSBvcHRpb25fdWludChvcHQsIDAsIDIpOworCSAgaW50IGxheWVyID0gb3B0aW9uX3VpbnQob3B0LCAyLCAyKTsKKwkgIHVuc2lnbmVkIGNoYXIgc2F2ZTcxWzRdOworCSAgc3RydWN0IGRoY3Bfb3B0IG9wdDcxOworCisJICBpZiAoaWdub3JlKQorCSAgICByZXR1cm4gMDsKKworCSAgaWYgKGxheWVyICYgMHg4MDAwKQorCSAgICB7CisJICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfRVJSLCBfKCJQWEUgQklTIG5vdCBzdXBwb3J0ZWQiKSk7CisJICAgICAgcmV0dXJuIDA7CisJICAgIH0KKworCSAgbWVtY3B5KHNhdmU3MSwgb3B0aW9uX3B0cihvcHQsIDApLCA0KTsKKwkgIAorCSAgZm9yIChzZXJ2aWNlID0gZGFlbW9uLT5weGVfc2VydmljZXM7IHNlcnZpY2U7IHNlcnZpY2UgPSBzZXJ2aWNlLT5uZXh0KQorCSAgICBpZiAoc2VydmljZS0+dHlwZSA9PSB0eXBlKQorCSAgICAgIGJyZWFrOworCSAgCisJICBpZiAoIXNlcnZpY2UgfHwgIXNlcnZpY2UtPmJhc2VuYW1lKQorCSAgICByZXR1cm4gMDsKKwkgIAorCSAgY2xlYXJfcGFja2V0KG1lc3MsIGVuZCk7CisJICAKKwkgIG1lc3MtPnlpYWRkciA9IG1lc3MtPmNpYWRkcjsKKwkgIG1lc3MtPmNpYWRkci5zX2FkZHIgPSAwOworCSAgaWYgKHNlcnZpY2UtPnNlcnZlci5zX2FkZHIgIT0gMCkKKwkgICAgbWVzcy0+c2lhZGRyID0gc2VydmljZS0+c2VydmVyOyAKKwkgIGVsc2UKKwkgICAgbWVzcy0+c2lhZGRyID0gY29udGV4dC0+bG9jYWw7IAorCSAgCisJICBzbnByaW50ZigoY2hhciAqKW1lc3MtPmZpbGUsIHNpemVvZihtZXNzLT5maWxlKSwgIiVzLiVkIiwgc2VydmljZS0+YmFzZW5hbWUsIGxheWVyKTsKKwkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fTUVTU0FHRV9UWVBFLCAxLCBESENQQUNLKTsKKwkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fU0VSVkVSX0lERU5USUZJRVIsIElOQUREUlNaLCBodG9ubChjb250ZXh0LT5sb2NhbC5zX2FkZHIpKTsKKwkgIHB4ZV9taXNjKG1lc3MsIGVuZCwgdXVpZCk7CisJICAKKwkgIHBydW5lX3ZlbmRvcl9vcHRzKG5ldGlkKTsKKwkgIG9wdDcxLnZhbCA9IHNhdmU3MTsKKwkgIG9wdDcxLm9wdCA9IFNVQk9QVF9QWEVfQk9PVF9JVEVNOworCSAgb3B0NzEubGVuID0gNDsKKwkgIG9wdDcxLmZsYWdzID0gREhPUFRfVkVORE9SX01BVENIOworCSAgb3B0NzEubmV0aWQgPSBOVUxMOworCSAgb3B0NzEubmV4dCA9IGRhZW1vbi0+ZGhjcF9vcHRzOworCSAgZG9fZW5jYXBfb3B0cygmb3B0NzEsIE9QVElPTl9WRU5ET1JfQ0xBU1NfT1BULCBESE9QVF9WRU5ET1JfTUFUQ0gsIG1lc3MsIGVuZCwgMCk7CisJICAKKwkgIGxvZ19wYWNrZXQoIlBYRSIsICZtZXNzLT55aWFkZHIsIGVtYWMsIGVtYWNfbGVuLCBpZmFjZV9uYW1lLCAoY2hhciAqKW1lc3MtPmZpbGUsIG1lc3MtPnhpZCk7CisJICByZXR1cm4gZGhjcF9wYWNrZXRfc2l6ZShtZXNzLCBuZXRpZCwgYWdlbnRfaWQsIHJlYWxfZW5kKTsJICAKKwl9CisgICAgICAKKyAgICAgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9BUkNILCAyKSkpCisJeworCSAgcHhlYXJjaCA9IG9wdGlvbl91aW50KG9wdCwgMCwgMik7CisKKwkgIC8qIHByb3h5IERIQ1AgaGVyZS4gVGhlIERIQ1BSRVFVRVNUIHN0dWZmIGlzIGZvciBnUFhFICovCisJICBpZiAoKG1lc3NfdHlwZSA9PSBESENQRElTQ09WRVIgfHwgbWVzc190eXBlID09IERIQ1BSRVFVRVNUKSAmJiAKKwkgICAgICAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1BST1hZKSkKKwkgICAgeworCSAgICAgIHN0cnVjdCBkaGNwX2Jvb3QgKmJvb3QgPSBmaW5kX2Jvb3QobmV0aWQpOworCisJICAgICAgbWVzcy0+eWlhZGRyLnNfYWRkciA9IDA7CisJICAgICAgaWYgIChtZXNzX3R5cGUgPT0gREhDUERJU0NPVkVSIHx8IG1lc3MtPmNpYWRkci5zX2FkZHIgPT0gMCkKKwkJeworCQkgIG1lc3MtPmNpYWRkci5zX2FkZHIgPSAwOworCQkgIG1lc3MtPmZsYWdzIHw9IGh0b25zKDB4ODAwMCk7IC8qIGJyb2FkY2FzdCAqLworCQl9CisKKwkgICAgICBjbGVhcl9wYWNrZXQobWVzcywgZW5kKTsKKwkgICAgICAKKwkgICAgICAvKiBQcm92aWRlIHRoZSBib290ZmlsZSBoZXJlLCBmb3IgZ1BYRSwgYW5kIGluIGNhc2Ugd2UgaGF2ZSBubyBtZW51IGl0ZW1zCisJCSBhbmQgc2V0IGRpc2NvdmVyeV9jb250cm9sID0gOCAqLworCSAgICAgIGlmIChib290KQorCQl7CisJCSAgaWYgKGJvb3QtPm5leHRfc2VydmVyLnNfYWRkcikKKwkJICAgIG1lc3MtPnNpYWRkciA9IGJvb3QtPm5leHRfc2VydmVyOworCQkgIAorCQkgIGlmIChib290LT5maWxlKQorCQkgICAgc3RybmNweSgoY2hhciAqKW1lc3MtPmZpbGUsIGJvb3QtPmZpbGUsIHNpemVvZihtZXNzLT5maWxlKS0xKTsKKwkJfQorCisJICAgICAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9NRVNTQUdFX1RZUEUsIDEsIAorCQkJIG1lc3NfdHlwZSA9PSBESENQRElTQ09WRVIgPyBESENQT0ZGRVIgOiBESENQQUNLKTsKKwkgICAgICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSLCBJTkFERFJTWiwgaHRvbmwoY29udGV4dC0+bG9jYWwuc19hZGRyKSk7CisJICAgICAgcHhlX21pc2MobWVzcywgZW5kLCB1dWlkKTsKKwkgICAgICBwcnVuZV92ZW5kb3Jfb3B0cyhuZXRpZCk7CisJICAgICAgZG9fZW5jYXBfb3B0cyhweGVfb3B0cyhweGVhcmNoLCBuZXRpZCksIE9QVElPTl9WRU5ET1JfQ0xBU1NfT1BULCBESE9QVF9WRU5ET1JfTUFUQ0gsIG1lc3MsIGVuZCwgMCk7CisJICAgICAgCisJICAgICAgbG9nX3BhY2tldCgiUFhFIiwgTlVMTCwgZW1hYywgZW1hY19sZW4sIGlmYWNlX25hbWUsIGlnbm9yZSA/ICJwcm94eSIgOiAicHJveHktaWdub3JlZCIsIG1lc3MtPnhpZCk7CisJICAgICAgcmV0dXJuIGlnbm9yZSA/IDAgOiBkaGNwX3BhY2tldF9zaXplKG1lc3MsIG5ldGlkLCBhZ2VudF9pZCwgcmVhbF9lbmQpOwkgIAorCSAgICB9CisJfQorICAgIH0KKworICAvKiBpZiB3ZSdyZSBqdXN0IGEgcHJveHkgc2VydmVyLCBnbyBubyBmdXJ0aGVyICovCisgIGlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUFJPWFkpCisgICAgcmV0dXJuIDA7CisgIAorICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fUkVRVUVTVEVEX09QVElPTlMsIDApKSkKKyAgICB7CisgICAgICByZXFfb3B0aW9ucyA9ICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYyOworICAgICAgbWVtY3B5KHJlcV9vcHRpb25zLCBvcHRpb25fcHRyKG9wdCwgMCksIG9wdGlvbl9sZW4ob3B0KSk7CisgICAgICByZXFfb3B0aW9uc1tvcHRpb25fbGVuKG9wdCldID0gT1BUSU9OX0VORDsKKyAgICB9CisgIAorICBzd2l0Y2ggKG1lc3NfdHlwZSkKKyAgICB7CisgICAgY2FzZSBESENQREVDTElORToKKyAgICAgIGlmICghKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fU0VSVkVSX0lERU5USUZJRVIsIElOQUREUlNaKSkgfHwKKwkgIG9wdGlvbl9hZGRyKG9wdCkuc19hZGRyICE9IHNlcnZlcl9pZChjb250ZXh0LCBvdmVycmlkZSwgZmFsbGJhY2spLnNfYWRkcikKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgLyogc2FuaXRpc2UgYW55IG1lc3NhZ2UuIFBhcmFub2lkPyBNb2k/ICovCisgICAgICBzYW5pdGlzZShvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX01FU1NBR0UsIDEpLCBkYWVtb24tPmRoY3BfYnVmZik7CisgICAgICAKKyAgICAgIGlmICghKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fUkVRVUVTVEVEX0lQLCBJTkFERFJTWikpKQorCXJldHVybiAwOworICAgICAgCisgICAgICBsb2dfcGFja2V0KCJESENQREVDTElORSIsIG9wdGlvbl9wdHIob3B0LCAwKSwgZW1hYywgZW1hY19sZW4sIGlmYWNlX25hbWUsIGRhZW1vbi0+ZGhjcF9idWZmLCBtZXNzLT54aWQpOworICAgICAgCisgICAgICBpZiAobGVhc2UgJiYgbGVhc2UtPmFkZHIuc19hZGRyID09IG9wdGlvbl9hZGRyKG9wdCkuc19hZGRyKQorCWxlYXNlX3BydW5lKGxlYXNlLCBub3cpOworICAgICAgCisgICAgICBpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfQUREUikgJiYgCisJICBjb25maWctPmFkZHIuc19hZGRyID09IG9wdGlvbl9hZGRyKG9wdCkuc19hZGRyKQorCXsKKwkgIHByZXR0eXByaW50X3RpbWUoZGFlbW9uLT5kaGNwX2J1ZmYsIERFQ0xJTkVfQkFDS09GRik7CisJICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJkaXNhYmxpbmcgREhDUCBzdGF0aWMgYWRkcmVzcyAlcyBmb3IgJXMiKSwgCisJCSAgICBpbmV0X250b2EoY29uZmlnLT5hZGRyKSwgZGFlbW9uLT5kaGNwX2J1ZmYpOworCSAgY29uZmlnLT5mbGFncyB8PSBDT05GSUdfREVDTElORUQ7CisJICBjb25maWctPmRlY2xpbmVfdGltZSA9IG5vdzsKKwl9CisgICAgICBlbHNlCisJLyogbWFrZSBzdXJlIHRoaXMgaG9zdCBnZXRzIGEgZGlmZmVyZW50IGFkZHJlc3MgbmV4dCB0aW1lLiAqLworCWZvciAoOyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+Y3VycmVudCkKKwkgIGNvbnRleHQtPmFkZHJfZXBvY2grKzsKKyAgICAgIAorICAgICAgcmV0dXJuIDA7CisKKyAgICBjYXNlIERIQ1BSRUxFQVNFOgorICAgICAgaWYgKCEoY29udGV4dCA9IG5hcnJvd19jb250ZXh0KGNvbnRleHQsIG1lc3MtPmNpYWRkciwgbmV0aWQpKSB8fAorCSAgIShvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSLCBJTkFERFJTWikpIHx8CisJICBvcHRpb25fYWRkcihvcHQpLnNfYWRkciAhPSBzZXJ2ZXJfaWQoY29udGV4dCwgb3ZlcnJpZGUsIGZhbGxiYWNrKS5zX2FkZHIpCisJcmV0dXJuIDA7CisgICAgICAKKyAgICAgIGlmIChsZWFzZSAmJiBsZWFzZS0+YWRkci5zX2FkZHIgPT0gbWVzcy0+Y2lhZGRyLnNfYWRkcikKKwlsZWFzZV9wcnVuZShsZWFzZSwgbm93KTsKKyAgICAgIGVsc2UKKwltZXNzYWdlID0gXygidW5rbm93biBsZWFzZSIpOworCisgICAgICBsb2dfcGFja2V0KCJESENQUkVMRUFTRSIsICZtZXNzLT5jaWFkZHIsIGVtYWMsIGVtYWNfbGVuLCBpZmFjZV9uYW1lLCBtZXNzYWdlLCBtZXNzLT54aWQpOworCQorICAgICAgcmV0dXJuIDA7CisgICAgICAKKyAgICBjYXNlIERIQ1BESVNDT1ZFUjoKKyAgICAgIGlmIChpZ25vcmUgfHwgaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfRElTQUJMRSkpCisJeworCSAgbWVzc2FnZSA9IF8oImlnbm9yZWQiKTsKKwkgIG9wdCA9IE5VTEw7CisJfQorICAgICAgZWxzZSAKKwl7CisJICBzdHJ1Y3QgaW5fYWRkciBhZGRyLCBjb25mOworCSAgCisJICBhZGRyLnNfYWRkciA9IGNvbmYuc19hZGRyID0gMDsKKworCSAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1JFUVVFU1RFRF9JUCwgSU5BRERSU1opKSkJIAorCSAgICBhZGRyID0gb3B0aW9uX2FkZHIob3B0KTsKKwkgIAorCSAgaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX0FERFIpKQorCSAgICB7CisJICAgICAgY2hhciAqYWRkcnMgPSBpbmV0X250b2EoY29uZmlnLT5hZGRyKTsKKwkgICAgICAKKwkgICAgICBpZiAoKGx0bXAgPSBsZWFzZV9maW5kX2J5X2FkZHIoY29uZmlnLT5hZGRyKSkgJiYgCisJCSAgbHRtcCAhPSBsZWFzZSAmJgorCQkgICFjb25maWdfaGFzX21hYyhjb25maWcsIGx0bXAtPmh3YWRkciwgbHRtcC0+aHdhZGRyX2xlbiwgbHRtcC0+aHdhZGRyX3R5cGUpKQorCQl7CisJCSAgaW50IGxlbjsKKwkJICB1bnNpZ25lZCBjaGFyICptYWMgPSBleHRlbmRlZF9od2FkZHIobHRtcC0+aHdhZGRyX3R5cGUsIGx0bXAtPmh3YWRkcl9sZW4sCisJCQkJCQkgICAgICAgbHRtcC0+aHdhZGRyLCBsdG1wLT5jbGlkX2xlbiwgbHRtcC0+Y2xpZCwgJmxlbik7CisJCSAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfV0FSTklORywgXygibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGxlYXNlZCB0byAlcyIpLAorCQkJICAgIGFkZHJzLCBwcmludF9tYWMoZGFlbW9uLT5uYW1lYnVmZiwgbWFjLCBsZW4pKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHN0cnVjdCBkaGNwX2NvbnRleHQgKnRtcDsKKwkJICBmb3IgKHRtcCA9IGNvbnRleHQ7IHRtcDsgdG1wID0gdG1wLT5jdXJyZW50KQorCQkgICAgaWYgKGNvbnRleHQtPnJvdXRlci5zX2FkZHIgPT0gY29uZmlnLT5hZGRyLnNfYWRkcikKKwkJICAgICAgYnJlYWs7CisJCSAgaWYgKHRtcCkKKwkJICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBpbiB1c2UgYnkgdGhlIHNlcnZlciBvciByZWxheSIpLCBhZGRycyk7CisJCSAgZWxzZSBpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfREVDTElORUQpICYmCisJCQkgICBkaWZmdGltZShub3csIGNvbmZpZy0+ZGVjbGluZV90aW1lKSA8IChmbG9hdClERUNMSU5FX0JBQ0tPRkYpCisJCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgd2FzIHByZXZpb3VzbHkgZGVjbGluZWQiKSwgYWRkcnMpOworCQkgIGVsc2UKKwkJICAgIGNvbmYgPSBjb25maWctPmFkZHI7CisJCX0KKwkgICAgfQorCSAgCisJICBpZiAoY29uZi5zX2FkZHIpCisJICAgIG1lc3MtPnlpYWRkciA9IGNvbmY7CisJICBlbHNlIGlmIChsZWFzZSAmJiAKKwkJICAgYWRkcmVzc19hdmFpbGFibGUoY29udGV4dCwgbGVhc2UtPmFkZHIsIG5ldGlkKSAmJiAKKwkJICAgIWNvbmZpZ19maW5kX2J5X2FkZHJlc3MoZGFlbW9uLT5kaGNwX2NvbmYsIGxlYXNlLT5hZGRyKSkKKwkgICAgbWVzcy0+eWlhZGRyID0gbGVhc2UtPmFkZHI7CisJICBlbHNlIGlmIChvcHQgJiYgYWRkcmVzc19hdmFpbGFibGUoY29udGV4dCwgYWRkciwgbmV0aWQpICYmICFsZWFzZV9maW5kX2J5X2FkZHIoYWRkcikgJiYgCisJCSAgICFjb25maWdfZmluZF9ieV9hZGRyZXNzKGRhZW1vbi0+ZGhjcF9jb25mLCBhZGRyKSkKKwkgICAgbWVzcy0+eWlhZGRyID0gYWRkcjsKKwkgIGVsc2UgaWYgKGVtYWNfbGVuID09IDApCisJICAgIG1lc3NhZ2UgPSBfKCJubyB1bmlxdWUtaWQiKTsKKwkgIGVsc2UgaWYgKCFhZGRyZXNzX2FsbG9jYXRlKGNvbnRleHQsICZtZXNzLT55aWFkZHIsIGVtYWMsIGVtYWNfbGVuLCBuZXRpZCwgbm93KSkKKwkgICAgbWVzc2FnZSA9IF8oIm5vIGFkZHJlc3MgYXZhaWxhYmxlIik7ICAgICAgCisJfQorICAgICAgCisgICAgICBsb2dfcGFja2V0KCJESENQRElTQ09WRVIiLCBvcHQgPyBvcHRpb25fcHRyKG9wdCwgMCkgOiBOVUxMLCBlbWFjLCBlbWFjX2xlbiwgaWZhY2VfbmFtZSwgbWVzc2FnZSwgbWVzcy0+eGlkKTsgCisKKyAgICAgIGlmIChtZXNzYWdlIHx8ICEoY29udGV4dCA9IG5hcnJvd19jb250ZXh0KGNvbnRleHQsIG1lc3MtPnlpYWRkciwgbmV0aWQpKSkKKwlyZXR1cm4gMDsKKworICAgICAgbG9nX3BhY2tldCgiREhDUE9GRkVSIiAsICZtZXNzLT55aWFkZHIsIGVtYWMsIGVtYWNfbGVuLCBpZmFjZV9uYW1lLCBOVUxMLCBtZXNzLT54aWQpOworCisgICAgICBpZiAoY29udGV4dC0+bmV0aWQubmV0KQorCXsKKwkgIGNvbnRleHQtPm5ldGlkLm5leHQgPSBuZXRpZDsKKwkgIG5ldGlkID0gJmNvbnRleHQtPm5ldGlkOworCX0KKyAgICAgICAKKyAgICAgIHRpbWUgPSBjYWxjX3RpbWUoY29udGV4dCwgY29uZmlnLCBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX0xFQVNFX1RJTUUsIDQpKTsKKyAgICAgIGNsZWFyX3BhY2tldChtZXNzLCBlbmQpOworICAgICAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9NRVNTQUdFX1RZUEUsIDEsIERIQ1BPRkZFUik7CisgICAgICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSLCBJTkFERFJTWiwgbnRvaGwoc2VydmVyX2lkKGNvbnRleHQsIG92ZXJyaWRlLCBmYWxsYmFjaykuc19hZGRyKSk7CisgICAgICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX0xFQVNFX1RJTUUsIDQsIHRpbWUpOworICAgICAgLyogVDEgYW5kIFQyIGFyZSByZXF1aXJlZCBpbiBESENQT0ZGRVIgYnkgSFAncyB3YWNreSBKZXRkaXJlY3QgY2xpZW50LiAqLworICAgICAgaWYgKHRpbWUgIT0gMHhmZmZmZmZmZikKKwl7CisJICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX1QxLCA0LCAodGltZS8yKSk7CisJICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX1QyLCA0LCAodGltZSo3KS84KTsKKwl9CisgICAgICBkb19vcHRpb25zKGNvbnRleHQsIG1lc3MsIGVuZCwgcmVxX29wdGlvbnMsIG9mZmVyX2hvc3RuYW1lLCBnZXRfZG9tYWluKG1lc3MtPnlpYWRkciksIAorCQkgZG9tYWluLCBuZXRpZCwgc3VibmV0X2FkZHIsIGZxZG5fZmxhZ3MsIGJvcmtlbl9vcHQsIHB4ZWFyY2gsIHV1aWQpOworICAgICAgCisgICAgICByZXR1cm4gZGhjcF9wYWNrZXRfc2l6ZShtZXNzLCBuZXRpZCwgYWdlbnRfaWQsIHJlYWxfZW5kKTsKKyAgICAgIAorICAgIGNhc2UgREhDUFJFUVVFU1Q6CisgICAgICBpZiAoaWdub3JlIHx8IGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX0RJU0FCTEUpKQorCXJldHVybiAwOworICAgICAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1JFUVVFU1RFRF9JUCwgSU5BRERSU1opKSkKKwl7CisJICAvKiBTRUxFQ1RJTkcgIG9yIElOSVRfUkVCT09UICovCisJICBtZXNzLT55aWFkZHIgPSBvcHRpb25fYWRkcihvcHQpOworCSAgCisJICAvKiBzZW5kIHZlbmRvciBhbmQgdXNlciBjbGFzcyBpbmZvIGZvciBuZXcgb3IgcmVjcmVhdGVkIGxlYXNlICovCisJICBkb19jbGFzc2VzID0gMTsKKwkgIAorCSAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSLCBJTkFERFJTWikpKQorCSAgICB7CisJICAgICAgLyogU0VMRUNUSU5HICovCisJICAgICAgc2VsZWN0aW5nID0gMTsKKwkgICAgICAKKwkgICAgICBpZiAob3ZlcnJpZGUuc19hZGRyICE9IDApCisJCXsKKwkJICBpZiAob3B0aW9uX2FkZHIob3B0KS5zX2FkZHIgIT0gb3ZlcnJpZGUuc19hZGRyKQorCQkgICAgcmV0dXJuIDA7CisJCX0KKwkgICAgICBlbHNlIAorCQl7CisJCSAgZm9yICg7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5jdXJyZW50KQorCQkgICAgaWYgKGNvbnRleHQtPmxvY2FsLnNfYWRkciA9PSBvcHRpb25fYWRkcihvcHQpLnNfYWRkcikKKwkJICAgICAgYnJlYWs7CisJCSAgCisJCSAgaWYgKCFjb250ZXh0KQorCQkgICAgeworCQkgICAgICAvKiBJbiBhdXRoIG1vZGUsIGEgUkVRVUVTVCBzZW50IHRvIHRoZSB3cm9uZyBzZXJ2ZXIKKwkJCSBzaG91bGQgYmUgZmF1bHRlZCwgc28gdGhhdCB0aGUgY2xpZW50IGVzdGFibGlzaGVzIAorCQkJIGNvbW11bmljYXRpb24gd2l0aCB1cywgb3RoZXJ3aXNlLCBzaWxlbnRseSBpZ25vcmUuICovCisJCSAgICAgIGlmICghKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9BVVRIT1JJVEFUSVZFKSkKKwkJCXJldHVybiAwOworCQkgICAgICBtZXNzYWdlID0gXygid3Jvbmcgc2VydmVyLUlEIik7CisJCSAgICB9CisJCX0KKworCSAgICAgIC8qIElmIGEgbGVhc2UgZXhpc3RzIGZvciB0aGlzIGhvc3QgYW5kIGFub3RoZXIgYWRkcmVzcywgc3F1YXNoIGl0LiAqLworCSAgICAgIGlmIChsZWFzZSAmJiBsZWFzZS0+YWRkci5zX2FkZHIgIT0gbWVzcy0+eWlhZGRyLnNfYWRkcikKKwkJeworCQkgIGxlYXNlX3BydW5lKGxlYXNlLCBub3cpOworCQkgIGxlYXNlID0gTlVMTDsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBJTklULVJFQk9PVCAqLworCSAgICAgIGlmICghbGVhc2UgJiYgIShkYWVtb24tPm9wdGlvbnMgJiBPUFRfQVVUSE9SSVRBVElWRSkpCisJCXJldHVybiAwOworCSAgICAgIAorCSAgICAgIGlmIChsZWFzZSAmJiBsZWFzZS0+YWRkci5zX2FkZHIgIT0gbWVzcy0+eWlhZGRyLnNfYWRkcikKKwkJeworCQkgIG1lc3NhZ2UgPSBfKCJ3cm9uZyBhZGRyZXNzIik7CisJCSAgLyogYXZvaWQgbG9vcHMgd2hlbiBjbGllbnQgYnJhaW4tZGVhZCAqLworCQkgIGxlYXNlX3BydW5lKGxlYXNlLCBub3cpOworCQkgIGxlYXNlID0gTlVMTDsKKwkJfQorCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFJFTkVXSU5HIG9yIFJFQklORElORyAqLyAKKwkgIC8qIENoZWNrIGV4aXN0aW5nIGxlYXNlIGZvciB0aGlzIGFkZHJlc3MuCisJICAgICBXZSBhbGxvdyBpdCB0byBiZSBtaXNzaW5nIGlmIGRoY3AtYXV0aG9yaXRhdGl2ZSBtb2RlCisJICAgICBhcyBsb25nIGFzIHdlIGNhbiBhbGxvY2F0ZSB0aGUgbGVhc2Ugbm93IC0gY2hlY2tlZCBiZWxvdy4KKwkgICAgIFRoaXMgbWFrZXMgZm9yIGEgc21vb3RoIHJlY292ZXJ5IGZyb20gYSBsb3N0IGxlYXNlIERCICovCisJICBpZiAoKGxlYXNlICYmIG1lc3MtPmNpYWRkci5zX2FkZHIgIT0gbGVhc2UtPmFkZHIuc19hZGRyKSB8fAorCSAgICAgICghbGVhc2UgJiYgIShkYWVtb24tPm9wdGlvbnMgJiBPUFRfQVVUSE9SSVRBVElWRSkpKQorCSAgICB7CisJICAgICAgbWVzc2FnZSA9IF8oImxlYXNlIG5vdCBmb3VuZCIpOworCSAgICAgIC8qIGVuc3VyZSB3ZSBicm9hZGNhc3QgTkFLICovCisJICAgICAgdW5pY2FzdF9kZXN0ID0gMDsKKwkgICAgfQorCSAgLyogZGVzeW5jaHJvbmlzZSByZW5ld2FscyAqLworCSAgZnV6eiA9IHJhbmQxNigpOworCSAgbWVzcy0+eWlhZGRyID0gbWVzcy0+Y2lhZGRyOworCX0KKyAgICAgIAorICAgICAgbG9nX3BhY2tldCgiREhDUFJFUVVFU1QiLCAmbWVzcy0+eWlhZGRyLCBlbWFjLCBlbWFjX2xlbiwgaWZhY2VfbmFtZSwgTlVMTCwgbWVzcy0+eGlkKTsKKyAKKyAgICAgIGlmICghbWVzc2FnZSkKKwl7CisJICBzdHJ1Y3QgZGhjcF9jb25maWcgKmFkZHJfY29uZmlnOworCSAgc3RydWN0IGRoY3BfY29udGV4dCAqdG1wID0gTlVMTDsKKwkgIAorCSAgaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX0FERFIpKQorCSAgICBmb3IgKHRtcCA9IGNvbnRleHQ7IHRtcDsgdG1wID0gdG1wLT5jdXJyZW50KQorCSAgICAgIGlmIChjb250ZXh0LT5yb3V0ZXIuc19hZGRyID09IGNvbmZpZy0+YWRkci5zX2FkZHIpCisJCWJyZWFrOworCSAgCisJICBpZiAoIShjb250ZXh0ID0gbmFycm93X2NvbnRleHQoY29udGV4dCwgbWVzcy0+eWlhZGRyLCBuZXRpZCkpKQorCSAgICB7CisJICAgICAgLyogSWYgYSBtYWNoaW5lIG1vdmVzIG5ldHdvcmtzIHdoaWxzdCBpdCBoYXMgYSBsZWFzZSwgd2UgY2F0Y2ggdGhhdCBoZXJlLiAqLworCSAgICAgIG1lc3NhZ2UgPSBfKCJ3cm9uZyBuZXR3b3JrIik7CisJICAgICAgLyogZW5zdXJlIHdlIGJyb2FkY2FzdCBOQUsgKi8KKwkgICAgICB1bmljYXN0X2Rlc3QgPSAwOworCSAgICB9CisJICAKKwkgIC8qIENoZWNrIGZvciByZW5ld2FsIG9mIGEgbGVhc2Ugd2hpY2ggaXMgb3V0c2lkZSB0aGUgYWxsb3dlZCByYW5nZS4gKi8KKwkgIGVsc2UgaWYgKCFhZGRyZXNzX2F2YWlsYWJsZShjb250ZXh0LCBtZXNzLT55aWFkZHIsIG5ldGlkKSAmJgorCQkgICAoIWhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX0FERFIpIHx8IGNvbmZpZy0+YWRkci5zX2FkZHIgIT0gbWVzcy0+eWlhZGRyLnNfYWRkcikpCisJICAgIG1lc3NhZ2UgPSBfKCJhZGRyZXNzIG5vdCBhdmFpbGFibGUiKTsKKwkgIAorCSAgLyogQ2hlY2sgaWYgYSBuZXcgc3RhdGljIGFkZHJlc3MgaGFzIGJlZW4gY29uZmlndXJlZC4gQmUgdmVyeSBzdXJlIHRoYXQKKwkgICAgIHdoZW4gdGhlIGNsaWVudCBkb2VzIERJU0NPVkVSLCBpdCB3aWxsIGdldCB0aGUgc3RhdGljIGFkZHJlc3MsIG90aGVyd2lzZQorCSAgICAgYW4gZW5kbGVzcyBwcm90b2NvbCBsb29wIHdpbGwgZW5zdWUuICovCisJICBlbHNlIGlmICghdG1wICYmICFzZWxlY3RpbmcgJiYKKwkJICAgaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfQUREUikgJiYgCisJCSAgICghaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfREVDTElORUQpIHx8CisJCSAgICBkaWZmdGltZShub3csIGNvbmZpZy0+ZGVjbGluZV90aW1lKSA+IChmbG9hdClERUNMSU5FX0JBQ0tPRkYpICYmCisJCSAgIGNvbmZpZy0+YWRkci5zX2FkZHIgIT0gbWVzcy0+eWlhZGRyLnNfYWRkciAmJgorCQkgICAoIShsdG1wID0gbGVhc2VfZmluZF9ieV9hZGRyKGNvbmZpZy0+YWRkcikpIHx8IGx0bXAgPT0gbGVhc2UpKQorCSAgICBtZXNzYWdlID0gXygic3RhdGljIGxlYXNlIGF2YWlsYWJsZSIpOworCisJICAvKiBDaGVjayB0byBzZWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgYXMgYSBzdGF0aWMgYWRkcmVzcyBmb3IgYW5vdGhlciBob3N0ICovCisJICBlbHNlIGlmICgoYWRkcl9jb25maWcgPSBjb25maWdfZmluZF9ieV9hZGRyZXNzKGRhZW1vbi0+ZGhjcF9jb25mLCBtZXNzLT55aWFkZHIpKSAmJiBhZGRyX2NvbmZpZyAhPSBjb25maWcpCisJICAgIG1lc3NhZ2UgPSBfKCJhZGRyZXNzIHJlc2VydmVkIik7CisKKwkgIGVsc2UgaWYgKCFsZWFzZSAmJiAobHRtcCA9IGxlYXNlX2ZpbmRfYnlfYWRkcihtZXNzLT55aWFkZHIpKSkKKwkgICAgeworCSAgICAgIC8qIElmIGEgaG9zdCBpcyBjb25maWd1cmVkIHdpdGggbW9yZSB0aGFuIG9uZSBNQUMgYWRkcmVzcywgaXQncyBPSyB0byAnbml4IAorCQkgYSBsZWFzZSBmcm9tIG9uZSBvZiBpdCdzIE1BQ3MgdG8gZ2l2ZSB0aGUgYWRkcmVzcyB0byBhbm90aGVyLiAqLworCSAgICAgIGlmIChjb25maWcgJiYgY29uZmlnX2hhc19tYWMoY29uZmlnLCBsdG1wLT5od2FkZHIsIGx0bXAtPmh3YWRkcl9sZW4sIGx0bXAtPmh3YWRkcl90eXBlKSkKKwkJeworCQkgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiKSwKKwkJCSAgICBwcmludF9tYWMoZGFlbW9uLT5uYW1lYnVmZiwgbHRtcC0+aHdhZGRyLCBsdG1wLT5od2FkZHJfbGVuKSwgCisJCQkgICAgaW5ldF9udG9hKGx0bXAtPmFkZHIpKTsKKwkJICBsZWFzZSA9IGx0bXA7CisJCX0KKwkgICAgICBlbHNlCisJCW1lc3NhZ2UgPSBfKCJhZGRyZXNzIGluIHVzZSIpOworCSAgICB9CisKKwkgIGlmICghbWVzc2FnZSkKKwkgICAgeworCSAgICAgIGlmIChlbWFjX2xlbiA9PSAwKQorCQltZXNzYWdlID0gXygibm8gdW5pcXVlLWlkIik7CisJICAgICAgCisJICAgICAgZWxzZSBpZiAoIWxlYXNlKQorCQl7CSAgICAgCisJCSAgaWYgKChsZWFzZSA9IGxlYXNlX2FsbG9jYXRlKG1lc3MtPnlpYWRkcikpKQorCQkgICAgZG9fY2xhc3NlcyA9IDE7CisJCSAgZWxzZQorCQkgICAgbWVzc2FnZSA9IF8oIm5vIGxlYXNlcyBsZWZ0Iik7CisJCX0KKwkgICAgfQorCX0KKworICAgICAgaWYgKG1lc3NhZ2UpCisJeworCSAgbG9nX3BhY2tldCgiREhDUE5BSyIsICZtZXNzLT55aWFkZHIsIGVtYWMsIGVtYWNfbGVuLCBpZmFjZV9uYW1lLCBtZXNzYWdlLCBtZXNzLT54aWQpOworCSAgCisJICBtZXNzLT55aWFkZHIuc19hZGRyID0gMDsKKwkgIGNsZWFyX3BhY2tldChtZXNzLCBlbmQpOworCSAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9NRVNTQUdFX1RZUEUsIDEsIERIQ1BOQUspOworCSAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9TRVJWRVJfSURFTlRJRklFUiwgSU5BRERSU1osIG50b2hsKHNlcnZlcl9pZChjb250ZXh0LCBvdmVycmlkZSwgZmFsbGJhY2spLnNfYWRkcikpOworCSAgb3B0aW9uX3B1dF9zdHJpbmcobWVzcywgZW5kLCBPUFRJT05fTUVTU0FHRSwgbWVzc2FnZSwgYm9ya2VuX29wdCk7CisJICAvKiBUaGlzIGZpeGVzIGEgcHJvYmxlbSB3aXRoIHRoZSBESENQIHNwZWMsIGJyb2FkY2FzdGluZyBhIE5BSyB0byBhIGhvc3Qgb24gCisJICAgICBhIGRpc3RhbnQgc3VibmV0IHdoaWNoIHVuaWNhc3QgYSBSRVEgdG8gdXMgd29uJ3Qgd29yay4gKi8KKwkgIGlmICghdW5pY2FzdF9kZXN0IHx8IG1lc3MtPmdpYWRkci5zX2FkZHIgIT0gMCB8fCAKKwkgICAgICBtZXNzLT5jaWFkZHIuc19hZGRyID09IDAgfHwgaXNfc2FtZV9uZXQoY29udGV4dC0+bG9jYWwsIG1lc3MtPmNpYWRkciwgY29udGV4dC0+bmV0bWFzaykpCisJICAgIHsKKwkgICAgICBtZXNzLT5mbGFncyB8PSBodG9ucygweDgwMDApOyAvKiBicm9hZGNhc3QgKi8KKwkgICAgICBtZXNzLT5jaWFkZHIuc19hZGRyID0gMDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAgaWYgKGRvX2NsYXNzZXMpCisJICAgICB7CisJICAgICAgIGlmIChtZXNzLT5naWFkZHIuc19hZGRyKQorCQkgbGVhc2UtPmdpYWRkciA9IG1lc3MtPmdpYWRkcjsKKwkgICAgICAgCisJICAgICAgIGxlYXNlLT5jaGFuZ2VkID0gMTsKKwkgICAgICAgLyogY29weSB1c2VyLWNsYXNzIGFuZCB2ZW5kb3IgY2xhc3MgaW50byBuZXcgbGVhc2UsIGZvciB0aGUgc2NyaXB0ICovCisJICAgICAgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9VU0VSX0NMQVNTLCAxKSkpCisJCSB7CisJCSAgIGludCBsZW4gPSBvcHRpb25fbGVuKG9wdCk7CisJCSAgIHVuc2lnbmVkIGNoYXIgKnVjcCA9IG9wdGlvbl9wdHIob3B0LCAwKTsKKwkJICAgLyogSWYgdGhlIHVzZXItY2xhc3Mgb3B0aW9uIHN0YXJ0ZWQgYXMgY291bnRlZCBzdHJpbmdzLCB0aGUgZmlyc3QgYnl0ZSB3aWxsIGJlIHplcm8uICovCisJCSAgIGlmIChsZW4gIT0gMCAmJiB1Y3BbMF0gPT0gMCkKKwkJICAgICB1Y3ArKywgbGVuLS07CisJCSAgIGZyZWUobGVhc2UtPnVzZXJjbGFzcyk7CisJCSAgIGlmICgobGVhc2UtPnVzZXJjbGFzcyA9IHdoaW5lX21hbGxvYyhsZW4rMSkpKQorCQkgICAgIHsKKwkJICAgICAgIG1lbWNweShsZWFzZS0+dXNlcmNsYXNzLCB1Y3AsIGxlbik7CisJCSAgICAgICBsZWFzZS0+dXNlcmNsYXNzW2xlbl0gPSAwOworCQkgICAgICAgbGVhc2UtPnVzZXJjbGFzc19sZW4gPSBsZW4rMTsKKwkJICAgICB9CisJCSB9CisJICAgICAgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9WRU5ET1JfSUQsIDEpKSkKKwkJIHsKKwkJICAgaW50IGxlbiA9IG9wdGlvbl9sZW4ob3B0KTsKKwkJICAgdW5zaWduZWQgY2hhciAqdWNwID0gb3B0aW9uX3B0cihvcHQsIDApOworCQkgICBmcmVlKGxlYXNlLT52ZW5kb3JjbGFzcyk7CisJCSAgIGlmICgobGVhc2UtPnZlbmRvcmNsYXNzID0gd2hpbmVfbWFsbG9jKGxlbisxKSkpCisJCSAgICAgeworCQkgICAgICAgbWVtY3B5KGxlYXNlLT52ZW5kb3JjbGFzcywgdWNwLCBsZW4pOworCQkgICAgICAgbGVhc2UtPnZlbmRvcmNsYXNzW2xlbl0gPSAwOworCQkgICAgICAgbGVhc2UtPnZlbmRvcmNsYXNzX2xlbiA9IGxlbisxOworCQkgICAgIH0KKwkJIH0KKwkgICAgICAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX0hPU1ROQU1FLCAxKSkpCisJCSB7CisJCSAgIGludCBsZW4gPSBvcHRpb25fbGVuKG9wdCk7CisJCSAgIHVuc2lnbmVkIGNoYXIgKnVjcCA9IG9wdGlvbl9wdHIob3B0LCAwKTsKKwkJICAgZnJlZShsZWFzZS0+c3VwcGxpZWRfaG9zdG5hbWUpOworCQkgICBpZiAoKGxlYXNlLT5zdXBwbGllZF9ob3N0bmFtZSA9IHdoaW5lX21hbGxvYyhsZW4rMSkpKQorCQkgICAgIHsKKwkJICAgICAgIG1lbWNweShsZWFzZS0+c3VwcGxpZWRfaG9zdG5hbWUsIHVjcCwgbGVuKTsKKwkJICAgICAgIGxlYXNlLT5zdXBwbGllZF9ob3N0bmFtZVtsZW5dID0gMDsKKwkJICAgICAgIGxlYXNlLT5zdXBwbGllZF9ob3N0bmFtZV9sZW4gPSBsZW4rMTsKKwkJICAgICB9CisJCSB9CisJICAgICB9CisJICAgCisJICAgaWYgKCFob3N0bmFtZV9hdXRoICYmIChjbGllbnRfaG9zdG5hbWUgPSBob3N0X2Zyb21fZG5zKG1lc3MtPnlpYWRkcikpKQorCSAgICAgeworCSAgICAgIGhvc3RuYW1lID0gY2xpZW50X2hvc3RuYW1lOworCSAgICAgIGhvc3RuYW1lX2F1dGggPSAxOworCSAgICB9CisgICAgICAKKwkgIGlmIChjb250ZXh0LT5uZXRpZC5uZXQpCisJICAgIHsKKwkgICAgICBjb250ZXh0LT5uZXRpZC5uZXh0ID0gbmV0aWQ7CisJICAgICAgbmV0aWQgPSAmY29udGV4dC0+bmV0aWQ7CisJICAgIH0KKwkKKwkgIHRpbWUgPSBjYWxjX3RpbWUoY29udGV4dCwgY29uZmlnLCBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX0xFQVNFX1RJTUUsIDQpKTsKKwkgIGxlYXNlX3NldF9od2FkZHIobGVhc2UsIG1lc3MtPmNoYWRkciwgY2xpZCwgbWVzcy0+aGxlbiwgbWVzcy0+aHR5cGUsIGNsaWRfbGVuKTsKKwkgICAKKwkgIC8qIGlmIGFsbCB0aGUgbmV0aWRzIGluIHRoZSBpZ25vcmVfbmFtZSBsaXN0IGFyZSBwcmVzZW50LCBpZ25vcmUgY2xpZW50LXN1cHBsaWVkIG5hbWUgKi8KKwkgIGlmICghaG9zdG5hbWVfYXV0aCkKKwkgICAgeworCSAgICAgIGZvciAoaWRfbGlzdCA9IGRhZW1vbi0+ZGhjcF9pZ25vcmVfbmFtZXM7IGlkX2xpc3Q7IGlkX2xpc3QgPSBpZF9saXN0LT5uZXh0KQorCQlpZiAoKCFpZF9saXN0LT5saXN0KSB8fCBtYXRjaF9uZXRpZChpZF9saXN0LT5saXN0LCBuZXRpZCwgMCkpCisJCSAgYnJlYWs7CisJICAgICAgaWYgKGlkX2xpc3QpCisJCWhvc3RuYW1lID0gTlVMTDsKKwkgICAgfQorCSAgaWYgKGhvc3RuYW1lKQorCSAgICBsZWFzZV9zZXRfaG9zdG5hbWUobGVhc2UsIGhvc3RuYW1lLCBob3N0bmFtZV9hdXRoKTsKKwkgIAorCSAgbGVhc2Vfc2V0X2V4cGlyZXMobGVhc2UsIHRpbWUsIG5vdyk7CisJICBsZWFzZV9zZXRfaW50ZXJmYWNlKGxlYXNlLCBpbnRfaW5kZXgpOworCisJICBpZiAob3ZlcnJpZGUuc19hZGRyICE9IDApCisJICAgIGxlYXNlLT5vdmVycmlkZSA9IG92ZXJyaWRlOworCSAgZWxzZQorCSAgICBvdmVycmlkZSA9IGxlYXNlLT5vdmVycmlkZTsKKworCSAgbG9nX3BhY2tldCgiREhDUEFDSyIsICZtZXNzLT55aWFkZHIsIGVtYWMsIGVtYWNfbGVuLCBpZmFjZV9uYW1lLCBob3N0bmFtZSwgbWVzcy0+eGlkKTsgIAorCSAgCisJICBjbGVhcl9wYWNrZXQobWVzcywgZW5kKTsKKwkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fTUVTU0FHRV9UWVBFLCAxLCBESENQQUNLKTsKKwkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fU0VSVkVSX0lERU5USUZJRVIsIElOQUREUlNaLCBudG9obChzZXJ2ZXJfaWQoY29udGV4dCwgb3ZlcnJpZGUsIGZhbGxiYWNrKS5zX2FkZHIpKTsKKwkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fTEVBU0VfVElNRSwgNCwgdGltZSk7CisJICBpZiAodGltZSAhPSAweGZmZmZmZmZmKQorCSAgICB7CisJICAgICAgd2hpbGUgKGZ1enogPiAodGltZS8xNikpCisJCWZ1enogPSBmdXp6LzI7IAorCSAgICAgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fVDEsIDQsICh0aW1lLzIpIC0gZnV6eik7CisJICAgICAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9UMiwgNCwgKCh0aW1lLzgpKjcpIC0gZnV6eik7CisJICAgIH0KKwkgIGRvX29wdGlvbnMoY29udGV4dCwgbWVzcywgZW5kLCByZXFfb3B0aW9ucywgaG9zdG5hbWUsIGdldF9kb21haW4obWVzcy0+eWlhZGRyKSwgCisJCSAgICAgZG9tYWluLCBuZXRpZCwgc3VibmV0X2FkZHIsIGZxZG5fZmxhZ3MsIGJvcmtlbl9vcHQsIHB4ZWFyY2gsIHV1aWQpOworCX0KKworICAgICAgcmV0dXJuIGRoY3BfcGFja2V0X3NpemUobWVzcywgbmV0aWQsIGFnZW50X2lkLCByZWFsX2VuZCk7IAorICAgICAgCisgICAgY2FzZSBESENQSU5GT1JNOgorICAgICAgaWYgKGlnbm9yZSB8fCBoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19ESVNBQkxFKSkKKwltZXNzYWdlID0gXygiaWdub3JlZCIpOworICAgICAgCisgICAgICBsb2dfcGFja2V0KCJESENQSU5GT1JNIiwgJm1lc3MtPmNpYWRkciwgZW1hYywgZW1hY19sZW4sIGlmYWNlX25hbWUsIG1lc3NhZ2UsIG1lc3MtPnhpZCk7CisgICAgIAorICAgICAgaWYgKG1lc3NhZ2UgfHwgbWVzcy0+Y2lhZGRyLnNfYWRkciA9PSAwKQorCXJldHVybiAwOworCisgICAgICAvKiBGb3IgREhDUElORk9STSBvbmx5LCBjb3BlIHdpdGhvdXQgYSB2YWxpZCBjb250ZXh0ICovCisgICAgICBjb250ZXh0ID0gbmFycm93X2NvbnRleHQoY29udGV4dCwgbWVzcy0+Y2lhZGRyLCBuZXRpZCk7CisgICAgICAKKyAgICAgIC8qIEZpbmQgYSBsZWFzdCBiYXNlZCBvbiBJUCBhZGRyZXNzIGlmIHdlIGRpZG4ndAorCSBnZXQgb25lIGZyb20gTUFDIGFkZHJlc3MvY2xpZW50LWQgKi8KKyAgICAgIGlmICghbGVhc2UgJiYKKwkgIChsZWFzZSA9IGxlYXNlX2ZpbmRfYnlfYWRkcihtZXNzLT5jaWFkZHIpKSAmJiAKKwkgIGxlYXNlLT5ob3N0bmFtZSkKKwlob3N0bmFtZSA9IGxlYXNlLT5ob3N0bmFtZTsKKyAgICAgIAorICAgICAgaWYgKCFob3N0bmFtZSkKKwlob3N0bmFtZSA9IGhvc3RfZnJvbV9kbnMobWVzcy0+Y2lhZGRyKTsKKworICAgICAgbG9nX3BhY2tldCgiREhDUEFDSyIsICZtZXNzLT5jaWFkZHIsIGVtYWMsIGVtYWNfbGVuLCBpZmFjZV9uYW1lLCBob3N0bmFtZSwgbWVzcy0+eGlkKTsKKyAgICAgIAorICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC0+bmV0aWQubmV0KQorCXsKKwkgIGNvbnRleHQtPm5ldGlkLm5leHQgPSBuZXRpZDsKKwkgIG5ldGlkID0gJmNvbnRleHQtPm5ldGlkOworCX0KKyAgICAgIAorICAgICAgaWYgKGxlYXNlKQorCXsKKwkgIGlmIChvdmVycmlkZS5zX2FkZHIgIT0gMCkKKwkgICAgbGVhc2UtPm92ZXJyaWRlID0gb3ZlcnJpZGU7CisJICBlbHNlCisJICAgIG92ZXJyaWRlID0gbGVhc2UtPm92ZXJyaWRlOworCX0KKworICAgICAgY2xlYXJfcGFja2V0KG1lc3MsIGVuZCk7CisgICAgICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX01FU1NBR0VfVFlQRSwgMSwgREhDUEFDSyk7CisgICAgICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSLCBJTkFERFJTWiwgbnRvaGwoc2VydmVyX2lkKGNvbnRleHQsIG92ZXJyaWRlLCBmYWxsYmFjaykuc19hZGRyKSk7CisgICAgICAKKyAgICAgIGlmIChsZWFzZSkKKwl7CisJICBpZiAobGVhc2UtPmV4cGlyZXMgPT0gMCkKKwkgICAgdGltZSA9IDB4ZmZmZmZmZmY7CisJICBlbHNlCisJICAgIHRpbWUgPSAodW5zaWduZWQgaW50KWRpZmZ0aW1lKGxlYXNlLT5leHBpcmVzLCBub3cpOworCSAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9MRUFTRV9USU1FLCA0LCB0aW1lKTsKKwkgIGxlYXNlX3NldF9pbnRlcmZhY2UobGVhc2UsIGludF9pbmRleCk7CisJfQorCisgICAgICBkb19vcHRpb25zKGNvbnRleHQsIG1lc3MsIGVuZCwgcmVxX29wdGlvbnMsIGhvc3RuYW1lLCBnZXRfZG9tYWluKG1lc3MtPmNpYWRkciksCisJCSBkb21haW4sIG5ldGlkLCBzdWJuZXRfYWRkciwgZnFkbl9mbGFncywgYm9ya2VuX29wdCwgcHhlYXJjaCwgdXVpZCk7CisgICAgICAKKyAgICAgICppc19pbmZvcm0gPSAxOyAvKiBoYW5kbGUgcmVwbHkgZGlmZmVyZW50bHkgKi8KKyAgICAgIHJldHVybiBkaGNwX3BhY2tldF9zaXplKG1lc3MsIG5ldGlkLCBhZ2VudF9pZCwgcmVhbF9lbmQpOyAKKyAgICB9CisgIAorICByZXR1cm4gMDsKK30KKworLyogZmluZCBhIGdvb2QgdmFsdWUgdG8gdXNlIGFzIE1BQyBhZGRyZXNzIGZvciBsb2dnaW5nIGFuZCBhZGRyZXNzLWFsbG9jYXRpb24gaGFzaGluZy4KKyAgIFRoaXMgaXMgbm9ybWFsbHkganVzdCB0aGUgY2hhZGRyIGZpZWxkIGZyb20gdGhlIERIQ1AgcGFja2V0LAorICAgYnV0IGVnIEZpcmV3aXJlIHdpbGwgaGF2ZSBobGVuID09IDAgYW5kIHVzZSB0aGUgY2xpZW50LWlkIGluc3RlYWQuIAorICAgVGhpcyBjb3VsZCBiZSBhbnl0aGluZywgYnV0IHdpbGwgbm9ybWFsbHkgYmUgRVVJNjQgZm9yIEZpcmV3aXJlLgorICAgV2UgYXNzdW1lIHRoYXQgaWYgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGNsaWVudC1pZCBlcXVhbHMgdGhlIGh0eXBlIGJ5dGUKKyAgIHRoZW4gdGhlIGNsaWVudC1pZCBpcyB1c2luZyB0aGUgdXN1YWwgZW5jb2RpbmcgYW5kIHVzZSB0aGUgcmVzdCBvZiB0aGUgCisgICBjbGllbnQtaWQ6IGlmIG5vdCB3ZSBjYW4gdXNlIHRoZSB3aG9sZSBjbGllbnQtaWQuIFRoaXMgc2hvdWxkIGdpdmUKKyAgIHNhbmUgTUFDIGFkZHJlc3MgbG9ncy4gKi8KK3Vuc2lnbmVkIGNoYXIgKmV4dGVuZGVkX2h3YWRkcihpbnQgaHd0eXBlLCBpbnQgaHdsZW4sIHVuc2lnbmVkIGNoYXIgKmh3YWRkciwgCisJCQkJICAgICAgaW50IGNsaWRfbGVuLCB1bnNpZ25lZCBjaGFyICpjbGlkLCBpbnQgKmxlbl9vdXQpCit7CisgIGlmIChod2xlbiA9PSAwICYmIGNsaWQgJiYgY2xpZF9sZW4gPiAzKQorICAgIHsKKyAgICAgIGlmIChjbGlkWzBdICA9PSBod3R5cGUpCisJeworCSAgKmxlbl9vdXQgPSBjbGlkX2xlbiAtIDEgOworCSAgcmV0dXJuIGNsaWQgKyAxOworCX0KKworI2lmIGRlZmluZWQoQVJQSFJEX0VVSTY0KSAmJiBkZWZpbmVkKEFSUEhSRF9JRUVFMTM5NCkKKyAgICAgIGlmIChjbGlkWzBdID09ICBBUlBIUkRfRVVJNjQgJiYgaHd0eXBlID09IEFSUEhSRF9JRUVFMTM5NCkKKwl7CisJICAqbGVuX291dCA9IGNsaWRfbGVuIC0gMSA7CisJICByZXR1cm4gY2xpZCArIDE7CisJfQorI2VuZGlmCisgICAgICAKKyAgICAgICpsZW5fb3V0ID0gY2xpZF9sZW47CisgICAgICByZXR1cm4gY2xpZDsKKyAgICB9CisgIAorICAqbGVuX291dCA9IGh3bGVuOworICByZXR1cm4gaHdhZGRyOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfdGltZShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZywgdW5zaWduZWQgY2hhciAqb3B0KQoreworICB1bnNpZ25lZCBpbnQgdGltZSA9IGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX1RJTUUpID8gY29uZmlnLT5sZWFzZV90aW1lIDogY29udGV4dC0+bGVhc2VfdGltZTsKKyAgCisgIGlmIChvcHQpCisgICAgeyAKKyAgICAgIHVuc2lnbmVkIGludCByZXFfdGltZSA9IG9wdGlvbl91aW50KG9wdCwgMCwgNCk7CisgICAgICBpZiAocmVxX3RpbWUgPCAxMjAgKQorCXJlcV90aW1lID0gMTIwOyAvKiBzYW5pdHkgKi8KKyAgICAgIGlmICh0aW1lID09IDB4ZmZmZmZmZmYgfHwgKHJlcV90aW1lICE9IDB4ZmZmZmZmZmYgJiYgcmVxX3RpbWUgPCB0aW1lKSkKKwl0aW1lID0gcmVxX3RpbWU7CisgICAgfQorCisgIHJldHVybiB0aW1lOworfQorCitzdGF0aWMgc3RydWN0IGluX2FkZHIgc2VydmVyX2lkKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBpbl9hZGRyIG92ZXJyaWRlLCBzdHJ1Y3QgaW5fYWRkciBmYWxsYmFjaykKK3sKKyAgaWYgKG92ZXJyaWRlLnNfYWRkciAhPSAwKQorICAgIHJldHVybiBvdmVycmlkZTsKKyAgZWxzZSBpZiAoY29udGV4dCkKKyAgICByZXR1cm4gY29udGV4dC0+bG9jYWw7CisgIGVsc2UKKyAgICByZXR1cm4gZmFsbGJhY2s7Cit9CisKK3N0YXRpYyBpbnQgc2FuaXRpc2UodW5zaWduZWQgY2hhciAqb3B0LCBjaGFyICpidWYpCit7CisgIGNoYXIgKnA7CisgIGludCBpOworICAKKyAgKmJ1ZiA9IDA7CisgIAorICBpZiAoIW9wdCkKKyAgICByZXR1cm4gMDsKKworICBwID0gb3B0aW9uX3B0cihvcHQsIDApOworCisgIGZvciAoaSA9IG9wdGlvbl9sZW4ob3B0KTsgaSA+IDA7IGktLSkKKyAgICB7CisgICAgICBjaGFyIGMgPSAqcCsrOworICAgICAgaWYgKGlzcHJpbnQoKGludCljKSkKKwkqYnVmKysgPSBjOworICAgIH0KKyAgKmJ1ZiA9IDA7IC8qIGFkZCB0ZXJtaW5hdG9yICovCisgIAorICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgbG9nX3BhY2tldChjaGFyICp0eXBlLCB2b2lkICphZGRyLCB1bnNpZ25lZCBjaGFyICpleHRfbWFjLCAKKwkJICAgICAgIGludCBtYWNfbGVuLCBjaGFyICppbnRlcmZhY2UsIGNoYXIgKnN0cmluZywgdTMyIHhpZCkKK3sKKyAgc3RydWN0IGluX2FkZHIgYTsKKyAKKyAgLyogYWRkciBtYXkgYmUgbWlzYWxpZ25lZCAqLworICBpZiAoYWRkcikKKyAgICBtZW1jcHkoJmEsIGFkZHIsIHNpemVvZihhKSk7CisgIAorICBwcmludF9tYWMoZGFlbW9uLT5uYW1lYnVmZiwgZXh0X21hYywgbWFjX2xlbik7CisgIAorICBpZihkYWVtb24tPm9wdGlvbnMgJiBPUFRfTE9HX09QVFMpCisgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sICIldSAlcyglcykgJXMlcyVzICVzIiwKKwkgICAgICAgbnRvaGwoeGlkKSwgCisJICAgICAgIHR5cGUsCisJICAgICAgIGludGVyZmFjZSwgCisJICAgICAgIGFkZHIgPyBpbmV0X250b2EoYSkgOiAiIiwKKwkgICAgICAgYWRkciA/ICIgIiA6ICIiLAorCSAgICAgICBkYWVtb24tPm5hbWVidWZmLAorCSAgICAgICBzdHJpbmcgPyBzdHJpbmcgOiAiIik7CisgIGVsc2UKKyAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCAiJXMoJXMpICVzJXMlcyAlcyIsCisJICAgICAgdHlwZSwKKwkgICAgICBpbnRlcmZhY2UsIAorCSAgICAgIGFkZHIgPyBpbmV0X250b2EoYSkgOiAiIiwKKwkgICAgICBhZGRyID8gIiAiIDogIiIsCisJICAgICAgZGFlbW9uLT5uYW1lYnVmZiwKKwkgICAgICBzdHJpbmcgPyBzdHJpbmcgOiAiIik7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ19vcHRpb25zKHVuc2lnbmVkIGNoYXIgKnN0YXJ0LCB1MzIgeGlkKQoreworICB3aGlsZSAoKnN0YXJ0ICE9IE9QVElPTl9FTkQpCisgICAgeworICAgICAgaW50IGlzX2lwLCBpc19uYW1lLCBpOworICAgICAgY2hhciAqdGV4dCA9IG9wdGlvbl9zdHJpbmcoc3RhcnRbMF0sICZpc19pcCwgJmlzX25hbWUpOworICAgICAgdW5zaWduZWQgY2hhciB0cnVuYyA9IG9wdGlvbl9sZW4oc3RhcnQpOworICAgICAgCisgICAgICBpZiAoaXNfaXApCisJZm9yIChkYWVtb24tPm5hbWVidWZmWzBdPSAwLCBpID0gMDsgaSA8PSB0cnVuYyAtIElOQUREUlNaOyBpICs9IElOQUREUlNaKSAKKwkgIHsKKwkgICAgaWYgKGkgIT0gMCkKKwkgICAgICBzdHJuY2F0KGRhZW1vbi0+bmFtZWJ1ZmYsICIsICIsIDI1NiAtIHN0cmxlbihkYWVtb24tPm5hbWVidWZmKSk7CisJICAgIHN0cm5jYXQoZGFlbW9uLT5uYW1lYnVmZiwgaW5ldF9udG9hKG9wdGlvbl9hZGRyX2FycihzdGFydCwgaSkpLCAyNTYgLSBzdHJsZW4oZGFlbW9uLT5uYW1lYnVmZikpOworCSAgfQorICAgICAgZWxzZSBpZiAoIWlzX25hbWUgfHwgIXNhbml0aXNlKHN0YXJ0LCBkYWVtb24tPm5hbWVidWZmKSkKKwl7CisJICBpZiAodHJ1bmMgPiAxMykKKwkgICAgdHJ1bmMgPSAxMzsKKwkgIHByaW50X21hYyhkYWVtb24tPm5hbWVidWZmLCBvcHRpb25fcHRyKHN0YXJ0LCAwKSwgdHJ1bmMpOworCX0KKyAgICAgIAorICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgIiV1IHNlbnQgc2l6ZTolM2Qgb3B0aW9uOiUzZCVzJXMlcyVzJXMiLCAKKwkJbnRvaGwoeGlkKSwgb3B0aW9uX2xlbihzdGFydCksIHN0YXJ0WzBdLAorCQl0ZXh0ID8gIjoiIDogIiIsIHRleHQgPyB0ZXh0IDogIiIsCisJCXRydW5jID09IDAgPyAiIiA6ICIgICIsCisJCXRydW5jID09IDAgPyAiIiA6IGRhZW1vbi0+bmFtZWJ1ZmYsCisJCXRydW5jID09IG9wdGlvbl9sZW4oc3RhcnQpID8gIiIgOiAiLi4uIik7CisgICAgICBzdGFydCArPSBzdGFydFsxXSArIDI7CisgICAgfQorfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciAqb3B0aW9uX2ZpbmQxKHVuc2lnbmVkIGNoYXIgKnAsIHVuc2lnbmVkIGNoYXIgKmVuZCwgaW50IG9wdCwgaW50IG1pbnNpemUpCit7CisgIHdoaWxlICgxKSAKKyAgICB7CisgICAgICBpZiAocCA+IGVuZCkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGVsc2UgaWYgKCpwID09IE9QVElPTl9FTkQpCisJcmV0dXJuIG9wdCA9PSBPUFRJT05fRU5EID8gcCA6IE5VTEw7CisgICAgICBlbHNlIGlmICgqcCA9PSBPUFRJT05fUEFEKQorCXArKzsKKyAgICAgIGVsc2UgCisJeyAKKwkgIGludCBvcHRfbGVuOworCSAgaWYgKHAgPiBlbmQgLSAyKQorCSAgICByZXR1cm4gTlVMTDsgLyogbWFsZm9ybWVkIHBhY2tldCAqLworCSAgb3B0X2xlbiA9IG9wdGlvbl9sZW4ocCk7CisJICBpZiAocCA+IGVuZCAtICgyICsgb3B0X2xlbikpCisJICAgIHJldHVybiBOVUxMOyAvKiBtYWxmb3JtZWQgcGFja2V0ICovCisJICBpZiAoKnAgPT0gb3B0ICYmIG9wdF9sZW4gPj0gbWluc2l6ZSkKKwkgICAgcmV0dXJuIHA7CisJICBwICs9IG9wdF9sZW4gKyAyOworCX0KKyAgICB9Cit9CisgCitzdGF0aWMgdW5zaWduZWQgY2hhciAqb3B0aW9uX2ZpbmQoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzaXplX3Qgc2l6ZSwgaW50IG9wdF90eXBlLCBpbnQgbWluc2l6ZSkKK3sKKyAgdW5zaWduZWQgY2hhciAqcmV0LCAqb3ZlcmxvYWQ7CisgIAorICAvKiBza2lwIG92ZXIgREhDUCBjb29raWU7ICovCisgIGlmICgocmV0ID0gb3B0aW9uX2ZpbmQxKCZtZXNzLT5vcHRpb25zWzBdICsgc2l6ZW9mKHUzMiksICgodW5zaWduZWQgY2hhciAqKW1lc3MpICsgc2l6ZSwgb3B0X3R5cGUsIG1pbnNpemUpKSkKKyAgICByZXR1cm4gcmV0OworCisgIC8qIGxvb2sgZm9yIG92ZXJsb2FkIG9wdGlvbi4gKi8KKyAgaWYgKCEob3ZlcmxvYWQgPSBvcHRpb25fZmluZDEoJm1lc3MtPm9wdGlvbnNbMF0gKyBzaXplb2YodTMyKSwgKCh1bnNpZ25lZCBjaGFyICopbWVzcykgKyBzaXplLCBPUFRJT05fT1ZFUkxPQUQsIDEpKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgCisgIC8qIENhbiB3ZSBsb29rIGluIGZpbGVuYW1lIGFyZWEgPyAqLworICBpZiAoKG92ZXJsb2FkWzJdICYgMSkgJiYKKyAgICAgIChyZXQgPSBvcHRpb25fZmluZDEoJm1lc3MtPmZpbGVbMF0sICZtZXNzLT5maWxlWzEyOF0sIG9wdF90eXBlLCBtaW5zaXplKSkpCisgICAgcmV0dXJuIHJldDsKKworICAvKiBmaW5hbGx5IHRyeSBzbmFtZSBhcmVhICovCisgIGlmICgob3ZlcmxvYWRbMl0gJiAyKSAmJgorICAgICAgKHJldCA9IG9wdGlvbl9maW5kMSgmbWVzcy0+c25hbWVbMF0sICZtZXNzLT5zbmFtZVs2NF0sIG9wdF90eXBlLCBtaW5zaXplKSkpCisgICAgcmV0dXJuIHJldDsKKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBpbl9hZGRyIG9wdGlvbl9hZGRyX2Fycih1bnNpZ25lZCBjaGFyICpvcHQsIGludCBvZmZzZXQpCit7CisgIC8qIHRoaXMgd29ycmllcyBhYm91dCB1bmFsaWduZWQgZGF0YSBpbiB0aGUgb3B0aW9uLiAqLworICAvKiBzdHJ1Y3QgaW5fYWRkciBpcyBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KKyAgc3RydWN0IGluX2FkZHIgcmV0OworCisgIG1lbWNweSgmcmV0LCBvcHRpb25fcHRyKG9wdCwgb2Zmc2V0KSwgSU5BRERSU1opOworCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW5fYWRkciBvcHRpb25fYWRkcih1bnNpZ25lZCBjaGFyICpvcHQpCit7CisgIHJldHVybiBvcHRpb25fYWRkcl9hcnIob3B0LCAwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBvcHRpb25fdWludCh1bnNpZ25lZCBjaGFyICpvcHQsIGludCBvZmZzZXQsIGludCBzaXplKQoreworICAvKiB0aGlzIHdvcnJpZXMgYWJvdXQgdW5hbGlnbmVkIGRhdGEgYW5kIGJ5dGUgb3JkZXIgKi8KKyAgdW5zaWduZWQgaW50IHJldCA9IDA7CisgIGludCBpOworICB1bnNpZ25lZCBjaGFyICpwID0gb3B0aW9uX3B0cihvcHQsIG9mZnNldCk7CisgIAorICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgIHJldCA9IChyZXQgPDwgOCkgfCAqcCsrOworCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpkaGNwX3NraXBfb3B0cyh1bnNpZ25lZCBjaGFyICpzdGFydCkKK3sKKyAgd2hpbGUgKCpzdGFydCAhPSAwKQorICAgIHN0YXJ0ICs9IHN0YXJ0WzFdICsgMjsKKyAgcmV0dXJuIHN0YXJ0OworfQorCisvKiBvbmx5IGZvciB1c2Ugd2hlbiBidWlsZGluZyBwYWNrZXQ6IGRvZXNuJ3QgY2hlY2sgZm9yIGJhZCBkYXRhLiAqLyAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpmaW5kX292ZXJsb2FkKHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcykKK3sKKyAgdW5zaWduZWQgY2hhciAqcCA9ICZtZXNzLT5vcHRpb25zWzBdICsgc2l6ZW9mKHUzMik7CisgIAorICB3aGlsZSAoKnAgIT0gMCkKKyAgICB7CisgICAgICBpZiAoKnAgPT0gT1BUSU9OX09WRVJMT0FEKQorCXJldHVybiBwOworICAgICAgcCArPSBwWzFdICsgMjsKKyAgICB9CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgc2l6ZV90IGRoY3BfcGFja2V0X3NpemUoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYWdlbnRfaWQsIHVuc2lnbmVkIGNoYXIgKnJlYWxfZW5kKQoreworICB1bnNpZ25lZCBjaGFyICpwID0gZGhjcF9za2lwX29wdHMoJm1lc3MtPm9wdGlvbnNbMF0gKyBzaXplb2YodTMyKSk7CisgIHVuc2lnbmVkIGNoYXIgKm92ZXJsb2FkOworICBzaXplX3QgcmV0OworICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICppZF9saXN0OworICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbjsKKworICAvKiBtb3ZlIGFnZW50X2lkIGJhY2sgZG93biB0byB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgKi8KKyAgaWYgKGFnZW50X2lkKQorICAgIHsKKyAgICAgIG1lbW1vdmUocCwgYWdlbnRfaWQsIHJlYWxfZW5kIC0gYWdlbnRfaWQpOworICAgICAgcCArPSByZWFsX2VuZCAtIGFnZW50X2lkOworICAgICAgbWVtc2V0KHAsIDAsIHJlYWxfZW5kIC0gcCk7IC8qIGluIGNhc2Ugb2Ygb3ZlcmxhcCAqLworICAgIH0KKyAgCisgIC8qIFdlIGRvIGxvZ2dpbmcgdG9vICovCisgIGlmIChuZXRpZCAmJiAoZGFlbW9uLT5vcHRpb25zICYgT1BUX0xPR19PUFRTKSkKKyAgICB7CisgICAgICBjaGFyICpzID0gZGFlbW9uLT5uYW1lYnVmZjsKKyAgICAgIGZvciAoKnMgPSAwOyBuZXRpZDsgbmV0aWQgPSBuZXRpZC0+bmV4dCkKKwl7CisJICAvKiBraWxsIGR1cGVzLiAqLworCSAgZm9yIChuID0gbmV0aWQtPm5leHQ7IG47IG4gPSBuLT5uZXh0KQorCSAgICBpZiAoc3RyY21wKG5ldGlkLT5uZXQsIG4tPm5ldCkgPT0gMCkKKwkgICAgICBicmVhazsKKwkgIAorCSAgaWYgKCFuKQorCSAgICB7CisJICAgICAgc3RybmNhdCAocywgbmV0aWQtPm5ldCwgKE1BWEROQU1FLTEpIC0gc3RybGVuKHMpKTsKKwkgICAgICBpZiAobmV0aWQtPm5leHQpCisJCXN0cm5jYXQgKHMsICIsICIsIChNQVhETkFNRS0xKSAtIHN0cmxlbihzKSk7CisJICAgIH0KKwl9CisgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSB0YWdzOiAlcyIpLCBudG9obChtZXNzLT54aWQpLCBzKTsKKyAgICB9IAorICAgCisgIC8qIGFkZCBFTkQgb3B0aW9ucyB0byB0aGUgcmVnaW9ucy4gKi8KKyAgb3ZlcmxvYWQgPSBmaW5kX292ZXJsb2FkKG1lc3MpOworICAKKyAgaWYgKG92ZXJsb2FkICYmIChvcHRpb25fdWludChvdmVybG9hZCwgMCwgMSkgJiAxKSkKKyAgICB7CisgICAgICAqZGhjcF9za2lwX29wdHMobWVzcy0+ZmlsZSkgPSBPUFRJT05fRU5EOworICAgICAgaWYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9MT0dfT1BUUykKKwlsb2dfb3B0aW9ucyhtZXNzLT5maWxlLCBtZXNzLT54aWQpOworICAgIH0KKyAgZWxzZSBpZiAoKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9MT0dfT1BUUykgJiYgc3RybGVuKChjaGFyICopbWVzcy0+ZmlsZSkgIT0gMCkKKyAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBib290ZmlsZSBuYW1lOiAlcyIpLCBudG9obChtZXNzLT54aWQpLCAoY2hhciAqKW1lc3MtPmZpbGUpOworICAKKyAgaWYgKG92ZXJsb2FkICYmIChvcHRpb25fdWludChvdmVybG9hZCwgMCwgMSkgJiAyKSkKKyAgICB7CisgICAgICAqZGhjcF9za2lwX29wdHMobWVzcy0+c25hbWUpID0gT1BUSU9OX0VORDsKKyAgICAgIGlmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTE9HX09QVFMpCisJbG9nX29wdGlvbnMobWVzcy0+c25hbWUsIG1lc3MtPnhpZCk7CisgICAgfQorICBlbHNlIGlmICgoZGFlbW9uLT5vcHRpb25zICYgT1BUX0xPR19PUFRTKSAmJiBzdHJsZW4oKGNoYXIgKiltZXNzLT5zbmFtZSkgIT0gMCkKKyAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBzZXJ2ZXIgbmFtZTogJXMiKSwgbnRvaGwobWVzcy0+eGlkKSwgKGNoYXIgKiltZXNzLT5zbmFtZSk7CisKKworICAqcCsrID0gT1BUSU9OX0VORDsKKyAgCisgIGlmIChkYWVtb24tPm9wdGlvbnMgJiBPUFRfTE9HX09QVFMpCisgICAgeworICAgICAgaWYgKG1lc3MtPnNpYWRkci5zX2FkZHIgIT0gMCkKKwlteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBuZXh0IHNlcnZlcjogJXMiKSwgbnRvaGwobWVzcy0+eGlkKSwgaW5ldF9udG9hKG1lc3MtPnNpYWRkcikpOworICAgICAgCisgICAgICBsb2dfb3B0aW9ucygmbWVzcy0+b3B0aW9uc1swXSArIHNpemVvZih1MzIpLCBtZXNzLT54aWQpOworICAgIH0gCisgIAorICBmb3IgKGlkX2xpc3QgPSBkYWVtb24tPmZvcmNlX2Jyb2FkY2FzdDsgaWRfbGlzdDsgaWRfbGlzdCA9IGlkX2xpc3QtPm5leHQpCisgICAgaWYgKG1hdGNoX25ldGlkKGlkX2xpc3QtPmxpc3QsIG5ldGlkLCAwKSkKKyAgICAgIG1lc3MtPmZsYWdzIHw9IGh0b25zKDB4ODAwMCk7IC8qIGZvcmNlIGJyb2FkY2FzdCAqLworICAKKyAgcmV0ID0gKHNpemVfdCkocCAtICh1bnNpZ25lZCBjaGFyICopbWVzcyk7CisgIAorICBpZiAocmV0IDwgTUlOX1BBQ0tFVFNaKQorICAgIHJldCA9IE1JTl9QQUNLRVRTWjsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciAqZnJlZV9zcGFjZShzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgaW50IG9wdCwgaW50IGxlbikKK3sKKyAgdW5zaWduZWQgY2hhciAqcCA9IGRoY3Bfc2tpcF9vcHRzKCZtZXNzLT5vcHRpb25zWzBdICsgc2l6ZW9mKHUzMikpOworICAKKyAgaWYgKHAgKyBsZW4gKyAzID49IGVuZCkKKyAgICAvKiBub3QgZW5vdWdoIHNwYWNlIGluIG9wdGlvbnMgYXJlYSwgdHJ5IGFuZCB1c2Ugb3ZlcmxvYWQsIGlmIHBvc3MgKi8KKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICpvdmVybG9hZDsKKyAgICAgIAorICAgICAgaWYgKCEob3ZlcmxvYWQgPSBmaW5kX292ZXJsb2FkKG1lc3MpKSAmJgorCSAgKG1lc3MtPmZpbGVbMF0gPT0gMCB8fCBtZXNzLT5zbmFtZVswXSA9PSAwKSkKKwl7CisJICAvKiBhdHRlbXB0IHRvIG92ZXJsb2FkIGZuYW1lIGFuZCBzbmFtZSBhcmVhcywgd2UndmUgcmVzZXJ2ZWQgc3BhY2UgZm9yIHRoZQorCSAgICAgb3ZlcmZsb3cgb3B0aW9uIHByZXZpdW91c2x5LiAqLworCSAgb3ZlcmxvYWQgPSBwOworCSAgKihwKyspID0gT1BUSU9OX09WRVJMT0FEOworCSAgKihwKyspID0gMTsKKwl9CisgICAgICAKKyAgICAgIHAgPSBOVUxMOworICAgICAgCisgICAgICAvKiB1c2luZyBmaWxlbmFtZSBmaWVsZCA/ICovCisgICAgICBpZiAob3ZlcmxvYWQpCisJeworCSAgaWYgKG1lc3MtPmZpbGVbMF0gPT0gMCkKKwkgICAgb3ZlcmxvYWRbMl0gfD0gMTsKKwkgIAorCSAgaWYgKG92ZXJsb2FkWzJdICYgMSkKKwkgICAgeworCSAgICAgIHAgPSBkaGNwX3NraXBfb3B0cyhtZXNzLT5maWxlKTsKKwkgICAgICBpZiAocCArIGxlbiArIDMgPj0gbWVzcy0+ZmlsZSArIHNpemVvZihtZXNzLT5maWxlKSkKKwkJcCA9IE5VTEw7CisJICAgIH0KKwkgIAorCSAgaWYgKCFwKQorCSAgICB7CisJICAgICAgLyogdHJ5IHRvIGJyaW5nIHNuYW1lIGludG8gcGxheSAoaXQgbWF5IGJlIGFscmVhZHkpICovCisJICAgICAgaWYgKG1lc3MtPnNuYW1lWzBdID09IDApCisJCW92ZXJsb2FkWzJdIHw9IDI7CisJICAgICAgCisJICAgICAgaWYgKG92ZXJsb2FkWzJdICYgMikKKwkJeworCQkgIHAgPSBkaGNwX3NraXBfb3B0cyhtZXNzLT5zbmFtZSk7CisJCSAgaWYgKHAgKyBsZW4gKyAzID49IG1lc3MtPnNuYW1lICsgc2l6ZW9mKG1lc3MtPmZpbGUpKQorCQkgICAgcCA9IE5VTEw7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIAorICAgICAgaWYgKCFwKQorCW15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oImNhbm5vdCBzZW5kIERIQ1AvQk9PVFAgb3B0aW9uICVkOiBubyBzcGFjZSBsZWZ0IGluIHBhY2tldCIpLCBvcHQpOworICAgIH0KKyAKKyAgaWYgKHApCisgICAgeworICAgICAgKihwKyspID0gb3B0OworICAgICAgKihwKyspID0gbGVuOworICAgIH0KKworICByZXR1cm4gcDsKK30KKwkgICAgICAKK3N0YXRpYyB2b2lkIG9wdGlvbl9wdXQoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCB1bnNpZ25lZCBjaGFyICplbmQsIGludCBvcHQsIGludCBsZW4sIHVuc2lnbmVkIGludCB2YWwpCit7CisgIGludCBpOworICB1bnNpZ25lZCBjaGFyICpwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsIG9wdCwgbGVuKTsKKyAgCisgIGlmIChwKSAKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAqKHArKykgPSB2YWwgPj4gKDggKiAobGVuIC0gKGkgKyAxKSkpOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fcHV0X3N0cmluZyhzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgaW50IG9wdCwgCisJCQkgICAgICBjaGFyICpzdHJpbmcsIGludCBudWxsX3Rlcm0pCit7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyaW5nKTsKKworICBpZiAobnVsbF90ZXJtICYmIGxlbiAhPSAyNTUpCisgICAgbGVuKys7CisKKyAgaWYgKChwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsIG9wdCwgbGVuKSkpCisgICAgbWVtY3B5KHAsIHN0cmluZywgbGVuKTsKK30KKworLyogcmV0dXJuIGxlbmd0aCwgbm90ZSB0aGlzIG9ubHkgZG9lcyB0aGUgZGF0YSBwYXJ0ICovCitzdGF0aWMgaW50IGRvX29wdChzdHJ1Y3QgZGhjcF9vcHQgKm9wdCwgdW5zaWduZWQgY2hhciAqcCwgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgaW50IG51bGxfdGVybSkKK3sKKyAgaW50IGxlbiA9IG9wdC0+bGVuOworICAKKyAgaWYgKChvcHQtPmZsYWdzICYgREhPUFRfU1RSSU5HKSAmJiBudWxsX3Rlcm0gJiYgbGVuICE9IDI1NSkKKyAgICBsZW4rKzsKKworICBpZiAocCAmJiBsZW4gIT0gMCkKKyAgICB7CisgICAgICBpZiAoY29udGV4dCAmJiAob3B0LT5mbGFncyAmIERIT1BUX0FERFIpKQorCXsKKwkgIGludCBqOworCSAgc3RydWN0IGluX2FkZHIgKmEgPSAoc3RydWN0IGluX2FkZHIgKilvcHQtPnZhbDsKKwkgIGZvciAoaiA9IDA7IGogPCBvcHQtPmxlbjsgais9SU5BRERSU1osIGErKykKKwkgICAgeworCSAgICAgIC8qIHplcm8gbWVhbnMgInNlbGYiIChidXQgbm90IGluIHZlbmRvcmNsYXNzIG9wdGlvbnMuKSAqLworCSAgICAgIGlmIChhLT5zX2FkZHIgPT0gMCkKKwkJbWVtY3B5KHAsICZjb250ZXh0LT5sb2NhbCwgSU5BRERSU1opOworCSAgICAgIGVsc2UKKwkJbWVtY3B5KHAsIGEsIElOQUREUlNaKTsKKwkgICAgICBwICs9IElOQUREUlNaOworCSAgICB9CisJfQorICAgICAgZWxzZQorCW1lbWNweShwLCBvcHQtPnZhbCwgbGVuKTsKKyAgICB9ICAKKyAgcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBpbl9saXN0KHVuc2lnbmVkIGNoYXIgKmxpc3QsIGludCBvcHQpCit7CisgIGludCBpOworCisgICAvKiBJZiBubyByZXF1ZXN0ZWQgb3B0aW9ucywgc2VuZCBldmVyeXRoaW5nLCBub3Qgbm90aGluZy4gKi8KKyAgaWYgKCFsaXN0KQorICAgIHJldHVybiAxOworICAKKyAgZm9yIChpID0gMDsgbGlzdFtpXSAhPSBPUFRJT05fRU5EOyBpKyspCisgICAgaWYgKG9wdCA9PSBsaXN0W2ldKQorICAgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGhjcF9vcHQgKm9wdGlvbl9maW5kMihzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQsIHN0cnVjdCBkaGNwX29wdCAqb3B0cywgaW50IG9wdCkKK3sKKyAgc3RydWN0IGRoY3Bfb3B0ICp0bXA7ICAKKyAgZm9yICh0bXAgPSBvcHRzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKyAgICBpZiAodG1wLT5vcHQgPT0gb3B0ICYmICEodG1wLT5mbGFncyAmIChESE9QVF9FTkNBUFNVTEFURSB8IERIT1BUX1ZFTkRPUikpKQorICAgICAgaWYgKG1hdGNoX25ldGlkKHRtcC0+bmV0aWQsIG5ldGlkLCBuZXRpZCA/IDAgOiAxKSkKKwlyZXR1cm4gdG1wOworCSAgICAgIAorICByZXR1cm4gbmV0aWQgPyBvcHRpb25fZmluZDIoTlVMTCwgb3B0cywgb3B0KSA6IE5VTEw7Cit9CisKKy8qIG1hcmsgdmVuZG9yLWVuY2Fwc3VsYXRlZCBvcHRpb25zIHdoaWNoIG1hdGNoIHRoZSBjbGllbnQtc3VwcGxpZWQgIG9yCisgICBjb25maWctc3VwcGxpZWQgdmVuZG9yIGNsYXNzICovCitzdGF0aWMgdm9pZCBtYXRjaF92ZW5kb3Jfb3B0cyh1bnNpZ25lZCBjaGFyICpvcHQsIHN0cnVjdCBkaGNwX29wdCAqZG9wdCkKK3sKKyAgZm9yICg7IGRvcHQ7IGRvcHQgPSBkb3B0LT5uZXh0KQorICAgIHsKKyAgICAgIGRvcHQtPmZsYWdzICY9IH5ESE9QVF9WRU5ET1JfTUFUQ0g7CisgICAgICBpZiAob3B0ICYmIChkb3B0LT5mbGFncyAmIERIT1BUX1ZFTkRPUikpCisJeworCSAgaW50IGksIGxlbiA9IDA7CisJICBpZiAoZG9wdC0+dS52ZW5kb3JfY2xhc3MpCisJICAgIGxlbiA9IHN0cmxlbigoY2hhciAqKWRvcHQtPnUudmVuZG9yX2NsYXNzKTsKKwkgIGZvciAoaSA9IDA7IGkgPD0gKG9wdGlvbl9sZW4ob3B0KSAtIGxlbik7IGkrKykKKwkgICAgaWYgKGxlbiA9PSAwIHx8IG1lbWNtcChkb3B0LT51LnZlbmRvcl9jbGFzcywgb3B0aW9uX3B0cihvcHQsIGkpLCBsZW4pID09IDApCisJICAgICAgeworCQlkb3B0LT5mbGFncyB8PSBESE9QVF9WRU5ET1JfTUFUQ0g7CisJCWJyZWFrOworCSAgICAgIH0KKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBkb19lbmNhcF9vcHRzKHN0cnVjdCBkaGNwX29wdCAqb3B0LCBpbnQgZW5jYXAsIGludCBmbGFnLCAgCisJCQkgIHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgdW5zaWduZWQgY2hhciAqZW5kLCBpbnQgbnVsbF90ZXJtKQoreworICBpbnQgbGVuLCBlbmNfbGVuOworICBzdHJ1Y3QgZGhjcF9vcHQgKnN0YXJ0OworICB1bnNpZ25lZCBjaGFyICpwOworICAgIAorICAvKiBmaW5kIHNpemUgaW4gYWR2YW5jZSAqLworICBmb3IgKGVuY19sZW4gPSAwLCBzdGFydCA9IG9wdDsgb3B0OyBvcHQgPSBvcHQtPm5leHQpCisgICAgaWYgKG9wdC0+ZmxhZ3MgJiBmbGFnKQorICAgICAgeworCWludCBuZXcgPSBkb19vcHQob3B0LCBOVUxMLCBOVUxMLCBudWxsX3Rlcm0pICsgMjsKKwlpZiAoZW5jX2xlbiArIG5ldyA8PSAyNTUpCisJICBlbmNfbGVuICs9IG5ldzsKKwllbHNlCisJICB7CisJICAgIHAgPSBmcmVlX3NwYWNlKG1lc3MsIGVuZCwgZW5jYXAsIGVuY19sZW4pOworCSAgICBmb3IgKDsgc3RhcnQgJiYgc3RhcnQgIT0gb3B0OyBzdGFydCA9IHN0YXJ0LT5uZXh0KQorCSAgICAgIGlmIChwICYmIChzdGFydC0+ZmxhZ3MgJiBmbGFnKSkKKwkJeworCQkgIGxlbiA9IGRvX29wdChzdGFydCwgcCArIDIsIE5VTEwsIG51bGxfdGVybSk7CisJCSAgKihwKyspID0gc3RhcnQtPm9wdDsKKwkJICAqKHArKykgPSBsZW47CisJCSAgcCArPSBsZW47CisJCX0KKwkgICAgZW5jX2xlbiA9IG5ldzsKKwkgICAgc3RhcnQgPSBvcHQ7CisJICB9CisgICAgICB9CisgIAorICBpZiAoZW5jX2xlbiAhPSAwICYmCisgICAgICAocCA9IGZyZWVfc3BhY2UobWVzcywgZW5kLCBlbmNhcCwgZW5jX2xlbiArIDEpKSkKKyAgICB7CisgICAgICBmb3IgKDsgc3RhcnQ7IHN0YXJ0ID0gc3RhcnQtPm5leHQpCisJaWYgKHN0YXJ0LT5mbGFncyAmIGZsYWcpCisJICB7CisJICAgIGxlbiA9IGRvX29wdChzdGFydCwgcCArIDIsIE5VTEwsIG51bGxfdGVybSk7CisJICAgICoocCsrKSA9IHN0YXJ0LT5vcHQ7CisJICAgICoocCsrKSA9IGxlbjsKKwkgICAgcCArPSBsZW47CisJICB9CisgICAgICAqcCA9IE9QVElPTl9FTkQ7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBweGVfbWlzYyhzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgdW5zaWduZWQgY2hhciAqdXVpZCkKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKworICBvcHRpb25fcHV0X3N0cmluZyhtZXNzLCBlbmQsIE9QVElPTl9WRU5ET1JfSUQsICJQWEVDbGllbnQiLCAwKTsKKyAgaWYgKHV1aWQgJiYgKHAgPSBmcmVlX3NwYWNlKG1lc3MsIGVuZCwgT1BUSU9OX1BYRV9VVUlELCAxNykpKQorICAgIG1lbWNweShwLCB1dWlkLCAxNyk7Cit9CisKK3N0YXRpYyBpbnQgcHJ1bmVfdmVuZG9yX29wdHMoc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkKQoreworICBpbnQgZm9yY2UgPSAwOworICBzdHJ1Y3QgZGhjcF9vcHQgKm9wdDsKKworICAvKiBwcnVuZSB2ZW5kb3ItZW5jYXBzdWxhdGVkIG9wdGlvbnMgYmFzZWQgb24gbmV0aWQsIGFuZCBsb29rIGlmIHdlJ3JlIGZvcmNpbmcgdGhlbSB0byBiZSBzZW50ICovCisgIGZvciAob3B0ID0gZGFlbW9uLT5kaGNwX29wdHM7IG9wdDsgb3B0ID0gb3B0LT5uZXh0KQorICAgIGlmIChvcHQtPmZsYWdzICYgREhPUFRfVkVORE9SX01BVENIKQorICAgICAgeworCWlmICghbWF0Y2hfbmV0aWQob3B0LT5uZXRpZCwgbmV0aWQsIDEpKQorCSAgb3B0LT5mbGFncyAmPSB+REhPUFRfVkVORE9SX01BVENIOworCWVsc2UgaWYgKG9wdC0+ZmxhZ3MgJiBESE9QVF9GT1JDRSkKKwkgIGZvcmNlID0gMTsKKyAgICAgIH0KKyAgcmV0dXJuIGZvcmNlOworfQorCitzdGF0aWMgc3RydWN0IGRoY3Bfb3B0ICpweGVfb3B0cyhpbnQgcHhlX2FyY2gsIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZCkKK3sKKyNkZWZpbmUgTlVNX09QVFMgNCAgCisKKyAgdW5zaWduZWQgIGNoYXIgKnAsICpxOworICBzdHJ1Y3QgcHhlX3NlcnZpY2UgKnNlcnZpY2U7CisgIHN0YXRpYyBzdHJ1Y3QgZGhjcF9vcHQgKm8sICpyZXQ7CisgIGludCBpLCBqID0gTlVNX09QVFMgLSAxOworICAKKyAgLyogV2UgcGFzcyBiYWNrIHJlZmVyZW5jZXMgdG8gdGhlc2UsIGhlbmNlIHRoZXkgYXJlIGRlY2xhcmVkIHN0YXRpYyAqLworICBzdGF0aWMgdW5zaWduZWQgY2hhciBkaXNjb3ZlcnlfY29udHJvbDsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZmFrZV9wcm9tcHRbXSA9IHsgMCwgJ1AnLCAnWCcsICdFJyB9OyAKKyAgc3RhdGljIHN0cnVjdCBkaGNwX29wdCAqZmFrZV9vcHRzID0gTlVMTDsKKyAgCisgIC8qIFdlIGFyZSBmb3VuZCBieSBicm9hZGNhc3QsIHNvIGRpc2FibGUgbXVsdGljYXN0LiBJdCBnZXRzIHN3aXRjaGVkIG9uIGFnYWluCisgICAgIGlmIHdlIHBvaW50IHRvIG90aGVyIHNlcnZlcnMgYW5kIGRvbid0IGdpdmUgYSB1bmljYXN0IGFkZHJlc3MuIE5vdGUgdGhhdAorICAgICB3ZSBkb24ndCBwcm92aWRlIG91ciBvd24gYWRkcmVzcyBmb3Igc2VydmljZXMgd2UgYXJlIHRoZSBib290IHNlcnZlciBmb3IgYmVjYXVzZSB1bmljYXN0IAorICAgICBkaXNjb3ZlcnkgaXMgdG8gcG9ydCA0MDExIGFuZCB3ZSBkb24ndCBsaXN0ZW4gdGhlcmUuIElmIHlvdSBhcmUgdXNpbmcgcHJveHkgREhDUCAKKyAgICAgYW5kIERIQ1AgcmVsYXlzLCB0aGUgcmVsYXkgd2lsbCBuZWVkIHRvIGZvcndhcmQgdG8gdGhlIHByb3h5IHRvby4gKi8KKyAgZGlzY292ZXJ5X2NvbnRyb2wgPSAyOworICAKKyAgcmV0ID0gZGFlbW9uLT5kaGNwX29wdHM7CisgIAorICBpZiAoIWZha2Vfb3B0cyAmJiAhKGZha2Vfb3B0cyA9IHdoaW5lX21hbGxvYyhOVU1fT1BUUyAqIHNpemVvZihzdHJ1Y3QgZGhjcF9vcHQpKSkpCisgICAgcmV0dXJuIHJldDsKKworICBmb3IgKGkgPSAwOyBpIDwgTlVNX09QVFM7IGkrKykKKyAgICB7CisgICAgICBmYWtlX29wdHNbaV0uZmxhZ3MgPSBESE9QVF9WRU5ET1JfTUFUQ0g7CisgICAgICBmYWtlX29wdHNbaV0ubmV0aWQgPSBOVUxMOworICAgICAgZmFrZV9vcHRzW2ldLm5leHQgPSBpID09IChOVU1fT1BUUyAtIDEpID8gcmV0IDogJmZha2Vfb3B0c1tpKzFdOworICAgIH0KKyAgCisgIC8qIGNyZWF0ZSB0aGUgZGF0YSBmb3IgdGhlIFBYRV9NRU5VIGFuZCBQWEVfU0VSVkVSUyBvcHRpb25zLiAqLworICBwID0gKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjsKKyAgcSA9ICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYyOworCisgIGZvciAoaSA9IDAsIHNlcnZpY2UgPSBkYWVtb24tPnB4ZV9zZXJ2aWNlczsgc2VydmljZTsgc2VydmljZSA9IHNlcnZpY2UtPm5leHQpCisgICAgaWYgKHB4ZV9hcmNoID09IHNlcnZpY2UtPkNTQSAmJiBtYXRjaF9uZXRpZChzZXJ2aWNlLT5uZXRpZCwgbmV0aWQsIDEpKQorICAgICAgeworCXNpemVfdCBsZW4gPSBzdHJsZW4oc2VydmljZS0+bWVudSk7CisJLyogb3B0IDQzIG1heCBzaXplIGlzIDI1NS4gZW5jYXBzdWxhdGVkIG9wdGlvbiBoYXMgdHlwZSBhbmQgbGVuZ3RoCisJICAgYnl0ZXMsIHNvIGl0cyBtYXggc2l6ZSBpcyAyNTMuICovCisJaWYgKHAgLSAodW5zaWduZWQgY2hhciAqKWRhZW1vbi0+ZGhjcF9idWZmICsgbGVuICsgMyA8IDI1MykKKwkgIHsKKwkgICAgKihwKyspID0gc2VydmljZS0+dHlwZSA+PiA4OworCSAgICAqKHArKykgPSBzZXJ2aWNlLT50eXBlOworCSAgICAqKHArKykgPSBsZW47CisJICAgIG1lbWNweShwLCBzZXJ2aWNlLT5tZW51LCBsZW4pOworCSAgICBwICs9IGxlbjsKKwkgICAgaSsrOworCSAgfQorCWVsc2UKKwkgIHsKKwkgIHRvb2JpZzoKKwkgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfRVJSLCBfKCJQWEUgbWVudSB0b28gbGFyZ2UiKSk7CisJICAgIHJldHVybiBkYWVtb24tPmRoY3Bfb3B0czsKKwkgIH0KKwkKKwlpZiAoIXNlcnZpY2UtPmJhc2VuYW1lKQorCSAgeworCSAgICBpZiAoc2VydmljZS0+c2VydmVyLnNfYWRkciAhPSAwKQorCSAgICAgIHsKKwkJaWYgKHEgLSAodW5zaWduZWQgY2hhciAqKWRhZW1vbi0+ZGhjcF9idWZmMiArIDMgKyBJTkFERFJTWiA+PSAyNTMpCisJCSAgZ290byB0b29iaWc7CisJCQorCQkvKiBCb290IHNlcnZpY2Ugd2l0aCBrbm93biBhZGRyZXNzIC0gZ2l2ZSBpdCAqLworCQkqKHErKykgPSBzZXJ2aWNlLT50eXBlID4+IDg7CisJCSoocSsrKSA9IHNlcnZpY2UtPnR5cGU7CisJCSoocSsrKSA9IDE7CisJCS8qIGRlc3QgbWlzYWxpZ25lZCAqLworCQltZW1jcHkocSwgJnNlcnZpY2UtPnNlcnZlci5zX2FkZHIsIElOQUREUlNaKTsKKwkJcSArPSBJTkFERFJTWjsKKwkgICAgICB9CisJICAgIGVsc2UgaWYgKHNlcnZpY2UtPnR5cGUgIT0gMCkKKwkgICAgICAvKiBXZSdyZSBub3Qgc3VwcGx5aW5nIGEgc2VydmVyLCBzbyBsZXQgdGhlIGNsaWVudCBtdWx0aWNhc3QuCisJCSB0eXBlIHplcm8gaXMgImxvY2FsIGJvb3QiIHNvIG5vIG5lZWQgZm9yIE0vQyBvbiB0aGF0LiAqLworCSAgICAgIGRpc2NvdmVyeV9jb250cm9sID0gMDsKKwkgIH0JICAKKyAgICAgIH0KKworICAvKiBpZiBubyBwcm9tcHQsIHdhaXQgZm9yZXZlciBpZiB0aGVyZSdzIGEgY2hvaWNlICovCisgIGZha2VfcHJvbXB0WzBdID0gKGkgPiAxKSA/IDI1NSA6IDA7CisgIAorICBpZiAoaSA9PSAwKQorICAgIGRpc2NvdmVyeV9jb250cm9sID0gODsgLyogbm8gbWVudSAtIGp1c3QgdXNlIHVzZSBtZXNzLT5maWxlbmFtZSAqLworICBlbHNlCisgICAgeworICAgICAgcmV0ID0gJmZha2Vfb3B0c1tqLS1dOworICAgICAgcmV0LT5sZW4gPSBwIC0gKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjsKKyAgICAgIHJldC0+dmFsID0gKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjsKKyAgICAgIHJldC0+b3B0ID0gU1VCT1BUX1BYRV9NRU5VOworCisgICAgICBpZiAocSAtICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYyICE9IDApCisJeworCSAgcmV0ID0gJmZha2Vfb3B0c1tqLS1dOyAKKwkgIHJldC0+bGVuID0gcSAtICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYyOworCSAgcmV0LT52YWwgPSAodW5zaWduZWQgY2hhciAqKWRhZW1vbi0+ZGhjcF9idWZmMjsKKwkgIHJldC0+b3B0ID0gU1VCT1BUX1BYRV9TRVJWRVJTOworCX0KKyAgICB9CisKKyAgZm9yIChvID0gZGFlbW9uLT5kaGNwX29wdHM7IG87IG8gPSBvLT5uZXh0KQorICAgIGlmICgoby0+ZmxhZ3MgJiBESE9QVF9WRU5ET1JfTUFUQ0gpICYmIG8tPm9wdCA9PSBTVUJPUFRfUFhFX01FTlVfUFJPTVBUKQorICAgICAgYnJlYWs7CisgIAorICBpZiAoIW8pCisgICAgeworICAgICAgcmV0ID0gJmZha2Vfb3B0c1tqLS1dOyAKKyAgICAgIHJldC0+bGVuID0gc2l6ZW9mKGZha2VfcHJvbXB0KTsKKyAgICAgIHJldC0+dmFsID0gZmFrZV9wcm9tcHQ7CisgICAgICByZXQtPm9wdCA9IFNVQk9QVF9QWEVfTUVOVV9QUk9NUFQ7CisgICAgfQorICAKKyAgaWYgKGRpc2NvdmVyeV9jb250cm9sICE9IDApCisgICAgeworICAgICAgcmV0ID0gJmZha2Vfb3B0c1tqLS1dOyAKKyAgICAgIHJldC0+bGVuID0gMTsKKyAgICAgIHJldC0+b3B0ID0gU1VCT1BUX1BYRV9ESVNDT1ZFUlk7CisgICAgICByZXQtPnZhbD0gJmRpc2NvdmVyeV9jb250cm9sOworICAgIH0KKworICByZXR1cm4gcmV0OworfQorICAKK3N0YXRpYyB2b2lkIGNsZWFyX3BhY2tldChzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCkKK3sKKyAgbWVtc2V0KG1lc3MtPnNuYW1lLCAwLCBzaXplb2YobWVzcy0+c25hbWUpKTsKKyAgbWVtc2V0KG1lc3MtPmZpbGUsIDAsIHNpemVvZihtZXNzLT5maWxlKSk7CisgIG1lbXNldCgmbWVzcy0+b3B0aW9uc1swXSArIHNpemVvZih1MzIpLCAwLCBlbmQgLSAoJm1lc3MtPm9wdGlvbnNbMF0gKyBzaXplb2YodTMyKSkpOworICBtZXNzLT5zaWFkZHIuc19hZGRyID0gMDsKK30KKworc3RydWN0IGRoY3BfYm9vdCAqZmluZF9ib290KHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZCkKK3sKKyAgc3RydWN0IGRoY3BfYm9vdCAqYm9vdDsKKworICAvKiBkZWNpZGUgd2hpY2ggZGhjcC1ib290IG9wdGlvbiB3ZSdyZSB1c2luZyAqLworICBmb3IgKGJvb3QgPSBkYWVtb24tPmJvb3RfY29uZmlnOyBib290OyBib290ID0gYm9vdC0+bmV4dCkKKyAgICBpZiAobWF0Y2hfbmV0aWQoYm9vdC0+bmV0aWQsIG5ldGlkLCAwKSkKKyAgICAgIGJyZWFrOworICBpZiAoIWJvb3QpCisgICAgLyogTm8gbWF0Y2gsIGxvb2sgZm9yIG9uZSB3aXRob3V0IGEgbmV0aWQgKi8KKyAgICBmb3IgKGJvb3QgPSBkYWVtb24tPmJvb3RfY29uZmlnOyBib290OyBib290ID0gYm9vdC0+bmV4dCkKKyAgICAgIGlmIChtYXRjaF9uZXRpZChib290LT5uZXRpZCwgbmV0aWQsIDEpKQorCWJyZWFrOworCisgIHJldHVybiBib290OworfQorCitzdGF0aWMgdm9pZCBkb19vcHRpb25zKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsCisJCSAgICAgICBzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICplbmQsIAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqcmVxX29wdGlvbnMsCisJCSAgICAgICBjaGFyICpob3N0bmFtZSwgCisJCSAgICAgICBjaGFyICpkb21haW4sIGNoYXIgKmNvbmZpZ19kb21haW4sCisJCSAgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQsCisJCSAgICAgICBzdHJ1Y3QgaW5fYWRkciBzdWJuZXRfYWRkciwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgZnFkbl9mbGFncywKKwkJICAgICAgIGludCBudWxsX3Rlcm0sIGludCBweGVfYXJjaCwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnV1aWQpCit7CisgIHN0cnVjdCBkaGNwX29wdCAqb3B0LCAqY29uZmlnX29wdHMgPSBkYWVtb24tPmRoY3Bfb3B0czsKKyAgc3RydWN0IGRoY3BfYm9vdCAqYm9vdDsKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgaW50IGksIGxlbiwgZm9yY2VfZW5jYXAgPSAwOworICB1bnNpZ25lZCBjaGFyIGYwID0gMCwgczAgPSAwOworICBpbnQgZG9uZV9maWxlID0gMCwgZG9uZV9zZXJ2ZXIgPSAwOworCisgIGlmIChjb25maWdfZG9tYWluICYmICghZG9tYWluIHx8ICFob3N0bmFtZV9pc2VxdWFsKGRvbWFpbiwgY29uZmlnX2RvbWFpbikpKQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oIklnbm9yaW5nIGRvbWFpbiAlcyBmb3IgREhDUCBob3N0IG5hbWUgJXMiKSwgY29uZmlnX2RvbWFpbiwgaG9zdG5hbWUpOworICAKKyAgLyogbG9nZ2luZyAqLworICBpZiAoKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9MT0dfT1BUUykgJiYgcmVxX29wdGlvbnMpCisgICAgeworICAgICAgY2hhciAqcSA9IGRhZW1vbi0+bmFtZWJ1ZmY7CisgICAgICBmb3IgKGkgPSAwOyByZXFfb3B0aW9uc1tpXSAhPSBPUFRJT05fRU5EOyBpKyspCisJeworCSAgY2hhciAqcyA9IG9wdGlvbl9zdHJpbmcocmVxX29wdGlvbnNbaV0sIE5VTEwsIE5VTEwpOworCSAgcSArPSBzbnByaW50ZihxLCBNQVhETkFNRSAtIChxIC0gZGFlbW9uLT5uYW1lYnVmZiksCisJCQkiJWQlcyVzJXMiLCAKKwkJCXJlcV9vcHRpb25zW2ldLAorCQkJcyA/ICI6IiA6ICIiLAorCQkJcyA/IHMgOiAiIiwgCisJCQlyZXFfb3B0aW9uc1tpKzFdID09IE9QVElPTl9FTkQgPyAiIiA6ICIsICIpOworCSAgaWYgKHJlcV9vcHRpb25zW2krMV0gPT0gT1BUSU9OX0VORCB8fCAocSAtIGRhZW1vbi0+bmFtZWJ1ZmYpID4gNDApCisJICAgIHsKKwkgICAgICBxID0gZGFlbW9uLT5uYW1lYnVmZjsKKwkgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSByZXF1ZXN0ZWQgb3B0aW9uczogJXMiKSwgbnRvaGwobWVzcy0+eGlkKSwgZGFlbW9uLT5uYW1lYnVmZik7CisJICAgIH0KKwl9CisgICAgfQorICAgICAgCisgIGlmIChjb250ZXh0KQorICAgIG1lc3MtPnNpYWRkciA9IGNvbnRleHQtPmxvY2FsOworICAKKyAgLyogU2VlIGlmIHdlIGNhbiBzZW5kIHRoZSBib290IHN0dWZmIGFzIG9wdGlvbnMuCisgICAgIFRvIGRvIHRoaXMgd2UgbmVlZCBhIHJlcXVlc3RlZCBvcHRpb24gbGlzdCwgQk9PVFAKKyAgICAgYW5kIHZlcnkgb2xkIERIQ1AgY2xpZW50cyB3b24ndCBoYXZlIHRoaXMsIHdlIGFsc28gCisgICAgIHByb3ZpZGUgYW4gbWFudWFsIG9wdGlvbiB0byBkaXNhYmxlIGl0LgorICAgICBTb21lIFBYRSBST01zIGhhdmUgYnVncyAoc3VycHJpc2UhKSBhbmQgbmVlZCB6ZXJvLXRlcm1pbmF0ZWQgCisgICAgIG5hbWVzLCBzbyB3ZSBhbHdheXMgc2VuZCB0aG9zZS4gICovCisgIGlmICgoYm9vdCA9IGZpbmRfYm9vdChuZXRpZCkpKQorICAgIHsKKyAgICAgIGlmIChib290LT5zbmFtZSkKKwl7CSAgCisJICBpZiAoIShkYWVtb24tPm9wdGlvbnMgJiBPUFRfTk9fT1ZFUlJJREUpICYmCisJICAgICAgcmVxX29wdGlvbnMgJiYgCisJICAgICAgaW5fbGlzdChyZXFfb3B0aW9ucywgT1BUSU9OX1NOQU1FKSkKKwkgICAgb3B0aW9uX3B1dF9zdHJpbmcobWVzcywgZW5kLCBPUFRJT05fU05BTUUsIGJvb3QtPnNuYW1lLCAxKTsKKwkgIGVsc2UKKwkgICAgc3RybmNweSgoY2hhciAqKW1lc3MtPnNuYW1lLCBib290LT5zbmFtZSwgc2l6ZW9mKG1lc3MtPnNuYW1lKS0xKTsKKwl9CisgICAgICAKKyAgICAgIGlmIChib290LT5maWxlKQorCXsKKwkgIGlmICghKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT19PVkVSUklERSkgJiYKKwkgICAgICByZXFfb3B0aW9ucyAmJiAKKwkgICAgICBpbl9saXN0KHJlcV9vcHRpb25zLCBPUFRJT05fRklMRU5BTUUpKQorCSAgICBvcHRpb25fcHV0X3N0cmluZyhtZXNzLCBlbmQsIE9QVElPTl9GSUxFTkFNRSwgYm9vdC0+ZmlsZSwgMSk7CisJICBlbHNlCisJICAgIHN0cm5jcHkoKGNoYXIgKiltZXNzLT5maWxlLCBib290LT5maWxlLCBzaXplb2YobWVzcy0+ZmlsZSktMSk7CisJfQorICAgICAgCisgICAgICBpZiAoYm9vdC0+bmV4dF9zZXJ2ZXIuc19hZGRyKQorCW1lc3MtPnNpYWRkciA9IGJvb3QtPm5leHRfc2VydmVyOworICAgIH0KKyAgZWxzZQorICAgIC8qIFVzZSB0aGUgdmFsdWVzIG9mIHRoZSByZWxldmFudCBvcHRpb25zIGlmIG5vIGRoY3AtYm9vdCBnaXZlbiBhbmQKKyAgICAgICB0aGV5J3JlIG5vdCBleHBsaWNpdGx5IGFza2VkIGZvciBhcyBvcHRpb25zLiBPUFRJT05fRU5EIGlzIHVzZWQKKyAgICAgICBhcyBhbiBpbnRlcm5hbCB3YXkgdG8gc3BlY2lmeSBzaWFkZHIgd2l0aG91dCB1c2luZyBkaGNwLWJvb3QsIGZvciB1c2UgaW4KKyAgICAgICBkaGNwLW9wdHNmaWxlLiAqLworICAgIHsKKyAgICAgIGlmICgoIXJlcV9vcHRpb25zIHx8ICFpbl9saXN0KHJlcV9vcHRpb25zLCBPUFRJT05fRklMRU5BTUUpKSAmJiBtZXNzLT5maWxlWzBdID09IDAgJiYKKwkgIChvcHQgPSBvcHRpb25fZmluZDIobmV0aWQsIGNvbmZpZ19vcHRzLCBPUFRJT05fRklMRU5BTUUpKSAmJiAhKG9wdC0+ZmxhZ3MgJiBESE9QVF9GT1JDRSkpCisJeworCSAgc3RybmNweSgoY2hhciAqKW1lc3MtPmZpbGUsIChjaGFyICopb3B0LT52YWwsIHNpemVvZihtZXNzLT5maWxlKS0xKTsKKwkgIGRvbmVfZmlsZSA9IDE7CisJfQorICAgICAgCisgICAgICBpZiAoKCFyZXFfb3B0aW9ucyB8fCAhaW5fbGlzdChyZXFfb3B0aW9ucywgT1BUSU9OX1NOQU1FKSkgJiYKKwkgIChvcHQgPSBvcHRpb25fZmluZDIobmV0aWQsIGNvbmZpZ19vcHRzLCBPUFRJT05fU05BTUUpKSAmJiAhKG9wdC0+ZmxhZ3MgJiBESE9QVF9GT1JDRSkpCisJeworCSAgc3RybmNweSgoY2hhciAqKW1lc3MtPnNuYW1lLCAoY2hhciAqKW9wdC0+dmFsLCBzaXplb2YobWVzcy0+c25hbWUpLTEpOworCSAgZG9uZV9zZXJ2ZXIgPSAxOworCX0KKyAgICAgIAorICAgICAgaWYgKChvcHQgPSBvcHRpb25fZmluZDIobmV0aWQsIGNvbmZpZ19vcHRzLCBPUFRJT05fRU5EKSkpCisJbWVzcy0+c2lhZGRyLnNfYWRkciA9ICgoc3RydWN0IGluX2FkZHIgKilvcHQtPnZhbCktPnNfYWRkcjsJCisgICAgfQorICAgICAgICAKKyAgLyogV2UgZG9uJ3Qgd2FudCB0byBkbyBvcHRpb24tb3ZlcmxvYWQgZm9yIEJPT1RQLCBzbyBtYWtlIHRoZSBmaWxlIGFuZCBzbmFtZQorICAgICBmaWVsZHMgbG9vayBsaWtlIHRoZXkgYXJlIGluIHVzZSwgZXZlbiB3aGVuIHRoZXkgYXJlbid0LiBUaGlzIGdldHMgcmVzdG9yZWQKKyAgICAgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLiAqLworCisgIGlmICghcmVxX29wdGlvbnMgfHwgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT19PVkVSUklERSkpCisgICAgeworICAgICAgZjAgPSBtZXNzLT5maWxlWzBdOworICAgICAgbWVzcy0+ZmlsZVswXSA9IDE7CisgICAgICBzMCA9IG1lc3MtPnNuYW1lWzBdOworICAgICAgbWVzcy0+c25hbWVbMF0gPSAxOworICAgIH0KKyAgICAgIAorICAvKiBBdCB0aGlzIHBvaW50LCBpZiBtZXNzLT5zbmFtZSBvciBtZXNzLT5maWxlIGFyZSB6ZXJvZWQsIHRoZXkgYXJlIGF2YWlsYWJsZQorICAgICBmb3Igb3B0aW9uIG92ZXJsb2FkLCByZXNlcnZlIHNwYWNlIGZvciB0aGUgb3ZlcmxvYWQgb3B0aW9uLiAqLworICBpZiAobWVzcy0+ZmlsZVswXSA9PSAwIHx8IG1lc3MtPnNuYW1lWzBdID09IDApCisgICAgZW5kIC09IDM7CisKKyAgLyogcmZjMzAxMSBzYXlzIHRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGluIHRoZSByZXF1ZXN0ZWQgb3B0aW9ucyBsaXN0LiAqLworICBpZiAoc3VibmV0X2FkZHIuc19hZGRyKQorICAgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fU1VCTkVUX1NFTEVDVCwgSU5BRERSU1osIG50b2hsKHN1Ym5ldF9hZGRyLnNfYWRkcikpOworICAKKyAgLyogcmVwbGllcyB0byBESENQSU5GT1JNIG1heSBub3QgaGF2ZSBhIHZhbGlkIGNvbnRleHQgKi8KKyAgaWYgKGNvbnRleHQpCisgICAgeworICAgICAgaWYgKCFvcHRpb25fZmluZDIobmV0aWQsIGNvbmZpZ19vcHRzLCBPUFRJT05fTkVUTUFTSykpCisJb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9ORVRNQVNLLCBJTkFERFJTWiwgbnRvaGwoY29udGV4dC0+bmV0bWFzay5zX2FkZHIpKTsKKyAgCisgICAgICAvKiBNYXkgbm90IGhhdmUgYSAiZ3Vlc3NlZCIgYnJvYWRjYXN0IGFkZHJlc3MgaWYgd2UgZ290IG5vIHBhY2tldHMgdmlhIGEgcmVsYXkKKwkgZnJvbSB0aGlzIG5ldCB5ZXQgKGllIGp1c3QgdW5pY2FzdCByZW5ld2FscyBhZnRlciBhIHJlc3RhcnQgKi8KKyAgICAgIGlmIChjb250ZXh0LT5icm9hZGNhc3Quc19hZGRyICYmCisJICAhb3B0aW9uX2ZpbmQyKG5ldGlkLCBjb25maWdfb3B0cywgT1BUSU9OX0JST0FEQ0FTVCkpCisJb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9CUk9BRENBU1QsIElOQUREUlNaLCBudG9obChjb250ZXh0LT5icm9hZGNhc3Quc19hZGRyKSk7CisgICAgICAKKyAgICAgIC8qIFNhbWUgY29tbWVudHMgYXMgYnJvYWRjYXN0IGFwcGx5LCBhbmQgYWxzbyBtYXkgbm90IGJlIGFibGUgdG8gZ2V0IGEgc2Vuc2libGUKKwkgZGVmYXVsdCB3aGVuIHVzaW5nIHN1Ym5ldCBzZWxlY3QuICBVc2VyIG11c3QgY29uZmlndXJlIGJ5IHN0ZWFtIGluIHRoYXQgY2FzZS4gKi8KKyAgICAgIGlmIChjb250ZXh0LT5yb3V0ZXIuc19hZGRyICYmCisJICBpbl9saXN0KHJlcV9vcHRpb25zLCBPUFRJT05fUk9VVEVSKSAmJgorCSAgIW9wdGlvbl9maW5kMihuZXRpZCwgY29uZmlnX29wdHMsIE9QVElPTl9ST1VURVIpKQorCW9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fUk9VVEVSLCBJTkFERFJTWiwgbnRvaGwoY29udGV4dC0+cm91dGVyLnNfYWRkcikpOworICAgICAgCisgICAgICBpZiAoaW5fbGlzdChyZXFfb3B0aW9ucywgT1BUSU9OX0ROU1NFUlZFUikgJiYKKwkgICFvcHRpb25fZmluZDIobmV0aWQsIGNvbmZpZ19vcHRzLCBPUFRJT05fRE5TU0VSVkVSKSkKKwlvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX0ROU1NFUlZFUiwgSU5BRERSU1osIG50b2hsKGNvbnRleHQtPmxvY2FsLnNfYWRkcikpOworICAgIH0KKworICBpZiAoZG9tYWluICYmIGluX2xpc3QocmVxX29wdGlvbnMsIE9QVElPTl9ET01BSU5OQU1FKSAmJiAKKyAgICAgICFvcHRpb25fZmluZDIobmV0aWQsIGNvbmZpZ19vcHRzLCBPUFRJT05fRE9NQUlOTkFNRSkpCisgICAgb3B0aW9uX3B1dF9zdHJpbmcobWVzcywgZW5kLCBPUFRJT05fRE9NQUlOTkFNRSwgZG9tYWluLCBudWxsX3Rlcm0pOworIAorICAvKiBOb3RlIHRoYXQgd2UgaWdub3JlIGF0dGVtcHRzIHRvIHNldCB0aGUgZnFkbiB1c2luZyAtLWRoYy1vcHRpb249ODEsPG5hbWU+ICovCisgIGlmIChob3N0bmFtZSkKKyAgICB7CisgICAgICBpZiAoaW5fbGlzdChyZXFfb3B0aW9ucywgT1BUSU9OX0hPU1ROQU1FKSAmJgorCSAgIW9wdGlvbl9maW5kMihuZXRpZCwgY29uZmlnX29wdHMsIE9QVElPTl9IT1NUTkFNRSkpCisJb3B0aW9uX3B1dF9zdHJpbmcobWVzcywgZW5kLCBPUFRJT05fSE9TVE5BTUUsIGhvc3RuYW1lLCBudWxsX3Rlcm0pOworICAgICAgCisgICAgICBpZiAoZnFkbl9mbGFncyAhPSAwKQorCXsKKwkgIGxlbiA9IHN0cmxlbihob3N0bmFtZSkgKyAzOworCSAgCisJICBpZiAoZnFkbl9mbGFncyAmIDB4MDQpCisJICAgIGxlbiArPSAyOworCSAgZWxzZSBpZiAobnVsbF90ZXJtKQorCSAgICBsZW4rKzsKKworCSAgaWYgKGRvbWFpbikKKwkgICAgbGVuICs9IHN0cmxlbihkb21haW4pICsgMTsKKwkgIAorCSAgaWYgKChwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsIE9QVElPTl9DTElFTlRfRlFETiwgbGVuKSkpCisJICAgIHsKKwkgICAgICAqKHArKykgPSBmcWRuX2ZsYWdzOworCSAgICAgICoocCsrKSA9IDI1NTsKKwkgICAgICAqKHArKykgPSAyNTU7CisKKwkgICAgICBpZiAoZnFkbl9mbGFncyAmIDB4MDQpCisJCXsKKwkJICBwID0gZG9fcmZjMTAzNV9uYW1lKHAsIGhvc3RuYW1lKTsKKwkJICBpZiAoZG9tYWluKQorCQkgICAgcCA9IGRvX3JmYzEwMzVfbmFtZShwLCBkb21haW4pOworCQkgICpwKysgPSAwOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgbWVtY3B5KHAsIGhvc3RuYW1lLCBzdHJsZW4oaG9zdG5hbWUpKTsKKwkJICBwICs9IHN0cmxlbihob3N0bmFtZSk7CisJCSAgaWYgKGRvbWFpbikKKwkJICAgIHsKKwkJICAgICAgKihwKyspID0gJy4nOworCQkgICAgICBtZW1jcHkocCwgZG9tYWluLCBzdHJsZW4oZG9tYWluKSk7CisJCSAgICAgIHAgKz0gc3RybGVuKGRvbWFpbik7CisJCSAgICB9CisJCSAgaWYgKG51bGxfdGVybSkKKwkJICAgICoocCsrKSA9IDA7CisJCX0KKwkgICAgfQorCX0KKyAgICB9ICAgICAgCisKKyAgZm9yIChvcHQgPSBjb25maWdfb3B0czsgb3B0OyBvcHQgPSBvcHQtPm5leHQpCisgICAgeworICAgICAgaW50IG9wdG5vID0gb3B0LT5vcHQ7CisKKyAgICAgIC8qIHdhcyBpdCBhc2tlZCBmb3IsIG9yIGFyZSB3ZSBzZW5kaW5nIGl0IGFueXdheT8gKi8KKyAgICAgIGlmICghKG9wdC0+ZmxhZ3MgJiBESE9QVF9GT1JDRSkgJiYgIWluX2xpc3QocmVxX29wdGlvbnMsIG9wdG5vKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgLyogcHJvaGliaXQgc29tZSB1c2VkLWludGVybmFsbHkgb3B0aW9ucyAqLworICAgICAgaWYgKG9wdG5vID09IE9QVElPTl9DTElFTlRfRlFETiB8fAorCSAgb3B0bm8gPT0gT1BUSU9OX01BWE1FU1NBR0UgfHwKKwkgIG9wdG5vID09IE9QVElPTl9PVkVSTE9BRCB8fAorCSAgb3B0bm8gPT0gT1BUSU9OX1BBRCB8fAorCSAgb3B0bm8gPT0gT1BUSU9OX0VORCkKKwljb250aW51ZTsKKworICAgICAgaWYgKG9wdG5vID09IE9QVElPTl9TTkFNRSAmJiBkb25lX3NlcnZlcikKKwljb250aW51ZTsKKworICAgICAgaWYgKG9wdG5vID09IE9QVElPTl9GSUxFTkFNRSAmJiBkb25lX2ZpbGUpCisJY29udGludWU7CisgICAgICAKKyAgICAgIC8qIG5ldGlkcyBtYXRjaCBhbmQgbm90IGVuY2Fwc3VsYXRlZD8gKi8KKyAgICAgIGlmIChvcHQgIT0gb3B0aW9uX2ZpbmQyKG5ldGlkLCBjb25maWdfb3B0cywgb3B0bm8pKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICAvKiBGb3IgdGhlIG9wdGlvbnMgd2UgaGF2ZSBkZWZhdWx0IHZhbHVlcyBvbgorCSBkaGMtb3B0aW9uPTxvcHRpb25ubz4gbWVhbnMgImRvbid0IGluY2x1ZGUgdGhpcyBvcHRpb24iCisJIG5vdCAiaW5jbHVkZSBhIHplcm8tbGVuZ3RoIG9wdGlvbiIgKi8KKyAgICAgIGlmIChvcHQtPmxlbiA9PSAwICYmIAorCSAgKG9wdG5vID09IE9QVElPTl9ORVRNQVNLIHx8CisJICAgb3B0bm8gPT0gT1BUSU9OX0JST0FEQ0FTVCB8fAorCSAgIG9wdG5vID09IE9QVElPTl9ST1VURVIgfHwKKwkgICBvcHRubyA9PSBPUFRJT05fRE5TU0VSVkVSIHx8IAorCSAgIG9wdG5vID09IE9QVElPTl9ET01BSU5OQU1FIHx8CisJICAgb3B0bm8gPT0gT1BUSU9OX0hPU1ROQU1FKSkKKwljb250aW51ZTsKKworICAgICAgLyogdmVuZG9yLWNsYXNzIGNvbWVzIGZyb20gZWxzZXdoZXJlIGZvciBQWEUgKi8KKyAgICAgIGlmIChweGVfYXJjaCAhPSAtMSAmJiBvcHRubyA9PSBPUFRJT05fVkVORE9SX0lEKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICAvKiBhbHdheXMgZm9yY2UgbnVsbC10ZXJtIGZvciBmaWxlbmFtZSBhbmQgc2VydmVybmFtZSAtIGJ1Z2d5IFBYRSBhZ2Fpbi4gKi8KKyAgICAgIGxlbiA9IGRvX29wdChvcHQsIE5VTEwsIGNvbnRleHQsIAorCQkgICAob3B0bm8gPT0gT1BUSU9OX1NOQU1FIHx8IG9wdG5vID09IE9QVElPTl9GSUxFTkFNRSkgPyAxIDogbnVsbF90ZXJtKTsKKworICAgICAgaWYgKChwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsIG9wdG5vLCBsZW4pKSkKKwl7CisJICBkb19vcHQob3B0LCBwLCBjb250ZXh0LCAKKwkJIChvcHRubyA9PSBPUFRJT05fU05BTUUgfHwgb3B0bm8gPT0gT1BUSU9OX0ZJTEVOQU1FKSA/IDEgOiBudWxsX3Rlcm0pOworCSAgCisJICAvKiBJZiB3ZSBzZW5kIGEgdmVuZG9yLWlkLCByZXZpc2l0IHdoaWNoIHZlbmRvci1vcHMgd2UgY29uc2lkZXIgCisJICAgICBpdCBhcHByb3ByaWF0ZSB0byBzZW5kLiAqLworCSAgaWYgKG9wdG5vID09IE9QVElPTl9WRU5ET1JfSUQpCisJICAgIG1hdGNoX3ZlbmRvcl9vcHRzKHAgLSAyLCBjb25maWdfb3B0cyk7CisJfSAgCisgICAgfQorCisgIC8qIE5vdyBzZW5kIG9wdGlvbnMgdG8gYmUgZW5jYXBzdWxhdGVkIGluIGFyYml0cmFyeSBvcHRpb25zLCAKKyAgICAgZWcgZGhjcC1vcHRpb249ZW5jYXA6MTcyLDE3LC4uLi4uLi4KKyAgICAgVGhlIG1heSBiZSBtb3JlIHRoYXQgb25lICJvdXRlciIgdG8gZG8sIHNvIGdyb3VwCisgICAgIGFsbCB0aGUgb3B0aW9ucyB3aGljaCBtYXRjaCBlYWNoIG91dGVyIGluIHR1cm4uICovCisgIGZvciAob3B0ID0gY29uZmlnX29wdHM7IG9wdDsgb3B0ID0gb3B0LT5uZXh0KQorICAgIG9wdC0+ZmxhZ3MgJj0gfkRIT1BUX0VOQ0FQX0RPTkU7CisgIAorICBmb3IgKG9wdCA9IGNvbmZpZ19vcHRzOyBvcHQ7IG9wdCA9IG9wdC0+bmV4dCkKKyAgICBpZiAoKG9wdC0+ZmxhZ3MgJiAoREhPUFRfRU5DQVBTVUxBVEUgfCBESE9QVF9FTkNBUF9ET05FKSkgPT0gIERIT1BUX0VOQ0FQU1VMQVRFKQorICAgICAgeworCXN0cnVjdCBkaGNwX29wdCAqbzsKKwlpbnQgZm91bmQgPSAwOworCQorCWZvciAobyA9IGNvbmZpZ19vcHRzOyBvOyBvID0gby0+bmV4dCkKKwkgIHsKKwkgICAgby0+ZmxhZ3MgJj0gfkRIT1BUX0VOQ0FQX01BVENIOworCSAgICBpZiAoKG8tPmZsYWdzICYgREhPUFRfRU5DQVBTVUxBVEUpICYmIG9wdC0+dS5lbmNhcCA9PSBvLT51LmVuY2FwKQorCSAgICAgIHsKKwkJby0+ZmxhZ3MgfD0gREhPUFRfRU5DQVBfRE9ORTsKKwkJaWYgKG1hdGNoX25ldGlkKG8tPm5ldGlkLCBuZXRpZCwgMSkgJiYKKwkJICAgIChvLT5mbGFncyAmIERIT1BUX0ZPUkNFIHx8IGluX2xpc3QocmVxX29wdGlvbnMsIG8tPnUuZW5jYXApKSkKKwkJICB7CisJCSAgICBvLT5mbGFncyB8PSBESE9QVF9FTkNBUF9NQVRDSDsKKwkJICAgIGZvdW5kID0gMTsKKwkJICB9CisJICAgICAgfQorCSAgfQorCQorCWlmIChmb3VuZCkKKwkgIGRvX2VuY2FwX29wdHMoY29uZmlnX29wdHMsIG9wdC0+dS5lbmNhcCwgREhPUFRfRU5DQVBfTUFUQ0gsIG1lc3MsIGVuZCwgbnVsbF90ZXJtKTsKKyAgICAgIH0KKworICAvKiBNdXN0IHByZWNlZGUgcHhlX29wdHMsIHNpbmNlIGl0IG92ZXJ3cml0ZXMgcmVxX29wdGlvbnMgKi8KKyAgZm9yY2VfZW5jYXAgPSBwcnVuZV92ZW5kb3Jfb3B0cyhuZXRpZCk7CisgIGlmIChpbl9saXN0KHJlcV9vcHRpb25zLCBPUFRJT05fVkVORE9SX0NMQVNTX09QVCkpCisgICAgZm9yY2VfZW5jYXAgPSAxOworCisgIGlmIChweGVfYXJjaCAhPSAtMSkKKyAgICB7CisgICAgICBweGVfbWlzYyhtZXNzLCBlbmQsIHV1aWQpOworICAgICAgY29uZmlnX29wdHMgPSBweGVfb3B0cyhweGVfYXJjaCwgbmV0aWQpOworICAgIH0KKworICBpZiAoZm9yY2VfZW5jYXApCisgICAgZG9fZW5jYXBfb3B0cyhjb25maWdfb3B0cywgT1BUSU9OX1ZFTkRPUl9DTEFTU19PUFQsIERIT1BUX1ZFTkRPUl9NQVRDSCwgbWVzcywgZW5kLCBudWxsX3Rlcm0pOworICAKKyAgIC8qIHJlc3RvcmUgQk9PVFAgYW50aS1vdmVybG9hZCBoYWNrICovCisgIGlmICghcmVxX29wdGlvbnMgfHwgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9OT19PVkVSUklERSkpCisgICAgeworICAgICAgbWVzcy0+ZmlsZVswXSA9IGYwOworICAgICAgbWVzcy0+c25hbWVbMF0gPSBzMDsKKyAgICB9Cit9CisKKyNlbmRpZgorICAKKworICAKKyAgCisKKworICAKZGlmZiAtLWdpdCBhL3NyYy90ZnRwLmMgYi9zcmMvdGZ0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxZGRiMTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGZ0cC5jCkBAIC0wLDAgKzEsNjAwIEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDA5IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfVEZUUAorCitzdGF0aWMgc3RydWN0IHRmdHBfZmlsZSAqY2hlY2tfdGZ0cF9maWxlcGVybShzc2l6ZV90ICpsZW4pOworc3RhdGljIHZvaWQgZnJlZV90cmFuc2ZlcihzdHJ1Y3QgdGZ0cF90cmFuc2ZlciAqdHJhbnNmZXIpOworc3RhdGljIHNzaXplX3QgdGZ0cF9lcnIoaW50IGVyciwgY2hhciAqcGFja2V0LCBjaGFyICptZXNzLCBjaGFyICpmaWxlKTsKK3N0YXRpYyBzc2l6ZV90IHRmdHBfZXJyX29vcHMoY2hhciAqcGFja2V0LCBjaGFyICpmaWxlKTsKK3N0YXRpYyBzc2l6ZV90IGdldF9ibG9jayhjaGFyICpwYWNrZXQsIHN0cnVjdCB0ZnRwX3RyYW5zZmVyICp0cmFuc2Zlcik7CitzdGF0aWMgY2hhciAqbmV4dChjaGFyICoqcCwgY2hhciAqZW5kKTsKKworI2RlZmluZSBPUF9SUlEgIDEKKyNkZWZpbmUgT1BfV1JRICAyCisjZGVmaW5lIE9QX0RBVEEgMworI2RlZmluZSBPUF9BQ0sgIDQKKyNkZWZpbmUgT1BfRVJSICA1CisjZGVmaW5lIE9QX09BQ0sgNgorCisjZGVmaW5lIEVSUl9OT1RERUYgMAorI2RlZmluZSBFUlJfRk5GICAgIDEKKyNkZWZpbmUgRVJSX1BFUk0gICAyCisjZGVmaW5lIEVSUl9GVUxMICAgMworI2RlZmluZSBFUlJfSUxMICAgIDQKKwordm9pZCB0ZnRwX3JlcXVlc3Qoc3RydWN0IGxpc3RlbmVyICpsaXN0ZW4sIHRpbWVfdCBub3cpCit7CisgIHNzaXplX3QgbGVuOworICBjaGFyICpwYWNrZXQgPSBkYWVtb24tPnBhY2tldDsKKyAgY2hhciAqZmlsZW5hbWUsICptb2RlLCAqcCwgKmVuZCwgKm9wdDsKKyAgc3RydWN0IHNvY2thZGRyX2luIGFkZHIsIHBlZXI7CisgIHN0cnVjdCBtc2doZHIgbXNnOworICBzdHJ1Y3QgaW92ZWMgaW92OworICBzdHJ1Y3QgaWZyZXEgaWZyOworICBpbnQgaXNfZXJyID0gMSwgaWZfaW5kZXggPSAwLCBtdHUgPSAwOworICBzdHJ1Y3QgaW5hbWUgKnRtcDsKKyAgc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyOworICBpbnQgcG9ydCA9IGRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0OyAvKiBtYXkgYmUgemVybyB0byB1c2UgZXBoZW1lcmFsIHBvcnQgKi8KKyNpZiBkZWZpbmVkKElQX01UVV9ESVNDT1ZFUikgJiYgZGVmaW5lZChJUF9QTVRVRElTQ19ET05UKQorICBpbnQgbXR1ZmxhZyA9IElQX1BNVFVESVNDX0RPTlQ7CisjZW5kaWYKKyAgCisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgY21zZ2hkciBhbGlnbjsgLyogdGhpcyBlbnN1cmVzIGFsaWdubWVudCAqLworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpXTsKKyNlbGlmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHVuc2lnbmVkIGludCkpXTsKKyNlbGlmIGRlZmluZWQoSVBfUkVDVkRTVEFERFIpICYmIGRlZmluZWQoSVBfUkVDVklGKQorICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfZGwpKV07CisjZW5kaWYKKyAgfSBjb250cm9sX3U7IAorCisgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sX3UpOworICBtc2cubXNnX2NvbnRyb2wgPSBjb250cm9sX3UuY29udHJvbDsKKyAgbXNnLm1zZ19mbGFncyA9IDA7CisgIG1zZy5tc2dfbmFtZSA9ICZwZWVyOworICBtc2cubXNnX25hbWVsZW4gPSBzaXplb2YocGVlcik7CisgIG1zZy5tc2dfaW92ID0gJmlvdjsKKyAgbXNnLm1zZ19pb3ZsZW4gPSAxOworCisgIGlvdi5pb3ZfYmFzZSA9IHBhY2tldDsKKyAgaW92Lmlvdl9sZW4gPSBkYWVtb24tPnBhY2tldF9idWZmX3N6OworCisgIC8qIHdlIG92ZXJ3cm90ZSB0aGUgYnVmZmVyLi4uICovCisgIGRhZW1vbi0+c3J2X3NhdmUgPSBOVUxMOworCisgIGlmICgobGVuID0gcmVjdm1zZyhsaXN0ZW4tPnRmdHBmZCwgJm1zZywgMCkpIDwgMikKKyAgICByZXR1cm47CisgIAorICBpZiAoZGFlbW9uLT5vcHRpb25zICYgT1BUX05PV0lMRCkKKyAgICB7CisgICAgICBhZGRyID0gbGlzdGVuLT5pZmFjZS0+YWRkci5pbjsKKyAgICAgIG10dSA9IGxpc3Rlbi0+aWZhY2UtPm10dTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjaGFyIG5hbWVbSUZfTkFNRVNJWkVdOworICAgICAgc3RydWN0IGNtc2doZHIgKmNtcHRyOworICAgICAgCisgICAgICBhZGRyLnNpbl9hZGRyLnNfYWRkciA9IDA7CisgICAgICAKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgICAgIGZvciAoY21wdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXB0cjsgY21wdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXB0cikpCisJaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IFNPTF9JUCAmJiBjbXB0ci0+Y21zZ190eXBlID09IElQX1BLVElORk8pCisJICB7CisJICAgIGFkZHIuc2luX2FkZHIgPSAoKHN0cnVjdCBpbl9wa3RpbmZvICopQ01TR19EQVRBKGNtcHRyKSktPmlwaV9zcGVjX2RzdDsKKwkgICAgaWZfaW5kZXggPSAoKHN0cnVjdCBpbl9wa3RpbmZvICopQ01TR19EQVRBKGNtcHRyKSktPmlwaV9pZmluZGV4OworCSAgfQorICAgICAgCisjZWxpZiBkZWZpbmVkKEhBVkVfU09MQVJJU19ORVRXT1JLKQorICAgICAgZm9yIChjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtcHRyOyBjbXB0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtcHRyKSkKKwlpZiAoY21wdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbXB0ci0+Y21zZ190eXBlID09IElQX1JFQ1ZEU1RBRERSKQorCSAgYWRkci5zaW5fYWRkciA9ICooKHN0cnVjdCBpbl9hZGRyICopQ01TR19EQVRBKGNtcHRyKSk7CisJZWxzZSBpZiAoY21wdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbXB0ci0+Y21zZ190eXBlID09IElQX1JFQ1ZJRikKKwkgIGlmX2luZGV4ID0gKigodW5zaWduZWQgaW50ICopQ01TR19EQVRBKGNtcHRyKSk7CisKKworI2VsaWYgZGVmaW5lZChJUF9SRUNWRFNUQUREUikgJiYgZGVmaW5lZChJUF9SRUNWSUYpCisgICAgICBmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorCWlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtcHRyLT5jbXNnX3R5cGUgPT0gSVBfUkVDVkRTVEFERFIpCisJICBhZGRyLnNpbl9hZGRyID0gKigoc3RydWN0IGluX2FkZHIgKilDTVNHX0RBVEEoY21wdHIpKTsKKwllbHNlIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtcHRyLT5jbXNnX3R5cGUgPT0gSVBfUkVDVklGKQorCSAgaWZfaW5kZXggPSAoKHN0cnVjdCBzb2NrYWRkcl9kbCAqKUNNU0dfREFUQShjbXB0cikpLT5zZGxfaW5kZXg7CisgICAgICAgICAgIAorI2VuZGlmCisgICAgICAKKyAgICAgIGlmICghaW5kZXh0b25hbWUobGlzdGVuLT50ZnRwZmQsIGlmX2luZGV4LCBuYW1lKSB8fAorCSAgYWRkci5zaW5fYWRkci5zX2FkZHIgPT0gMCB8fAorCSAgIWlmYWNlX2NoZWNrKEFGX0lORVQsIChzdHJ1Y3QgYWxsX2FkZHIgKikmYWRkci5zaW5fYWRkciwgbmFtZSwgJmlmX2luZGV4KSkKKwlyZXR1cm47CisgICAgICAKKyAgICAgIC8qIGFsbG93ZWQgaW50ZXJmYWNlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIERIQ1AgKi8KKyAgICAgIGZvciAodG1wID0gZGFlbW9uLT5kaGNwX2V4Y2VwdDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJaWYgKHRtcC0+bmFtZSAmJiAoc3RyY21wKHRtcC0+bmFtZSwgbmFtZSkgPT0gMCkpCisJICByZXR1cm47CisgICAgIAorICAgICAgc3RybmNweShuYW1lLCBpZnIuaWZyX25hbWUsIElGX05BTUVTSVpFKTsKKyAgICAgIGlmIChpb2N0bChsaXN0ZW4tPnRmdHBmZCwgU0lPQ0dJRk1UVSwgJmlmcikgIT0gLTEpCisJbXR1ID0gaWZyLmlmcl9tdHU7ICAgICAgCisgICAgfQorICAKKyAgYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIGFkZHIuc2luX2xlbiA9IHNpemVvZihhZGRyKTsKKyNlbmRpZgorICAKKyAgaWYgKCEodHJhbnNmZXIgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCB0ZnRwX3RyYW5zZmVyKSkpKQorICAgIHJldHVybjsKKyAgCisgIGlmICgodHJhbnNmZXItPnNvY2tmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPT0gLTEpCisgICAgeworICAgICAgZnJlZSh0cmFuc2Zlcik7CisgICAgICByZXR1cm47CisgICAgfQorICAKKyAgdHJhbnNmZXItPnBlZXIgPSBwZWVyOworICB0cmFuc2Zlci0+dGltZW91dCA9IG5vdyArIDI7CisgIHRyYW5zZmVyLT5iYWNrb2ZmID0gMTsKKyAgdHJhbnNmZXItPmJsb2NrID0gMTsKKyAgdHJhbnNmZXItPmJsb2Nrc2l6ZSA9IDUxMjsKKyAgdHJhbnNmZXItPm9mZnNldCA9IDA7CisgIHRyYW5zZmVyLT5maWxlID0gTlVMTDsKKyAgdHJhbnNmZXItPm9wdF9ibG9ja3NpemUgPSB0cmFuc2Zlci0+b3B0X3RyYW5zaXplID0gMDsKKyAgdHJhbnNmZXItPm5ldGFzY2lpID0gdHJhbnNmZXItPmNhcnJ5bGYgPSAwOworCisgIC8qIGlmIHdlIGhhdmUgYSBuYWlsZWQtZG93biByYW5nZSwgaXRlcmF0ZSB1bnRpbCB3ZSBmaW5kIGEgZnJlZSBvbmUuICovCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmIChiaW5kKHRyYW5zZmVyLT5zb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKGFkZHIpKSA9PSAtMSB8fAorI2lmIGRlZmluZWQoSVBfTVRVX0RJU0NPVkVSKSAmJiBkZWZpbmVkKElQX1BNVFVESVNDX0RPTlQpCisJICBzZXRzb2Nrb3B0KHRyYW5zZmVyLT5zb2NrZmQsIFNPTF9JUCwgSVBfTVRVX0RJU0NPVkVSLCAmbXR1ZmxhZywgc2l6ZW9mKG10dWZsYWcpKSA9PSAtMSB8fAorI2VuZGlmCisJICAhZml4X2ZkKHRyYW5zZmVyLT5zb2NrZmQpKQorCXsKKwkgIGlmIChlcnJubyA9PSBFQUREUklOVVNFICYmIGRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0ICE9IDApCisJICAgIHsKKwkgICAgICBpZiAoKytwb3J0IDw9IGRhZW1vbi0+ZW5kX3RmdHBfcG9ydCkKKwkJeyAKKwkJICBhZGRyLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisJCSAgY29udGludWU7CisJCX0KKwkgICAgICBteV9zeXNsb2coTVNfVEZUUCB8IExPR19FUlIsIF8oInVuYWJsZSB0byBnZXQgZnJlZSBwb3J0IGZvciBURlRQIikpOworCSAgICB9CisJICBmcmVlX3RyYW5zZmVyKHRyYW5zZmVyKTsKKwkgIHJldHVybjsKKwl9CisgICAgICBicmVhazsKKyAgICB9CisgIAorICBwID0gcGFja2V0ICsgMjsKKyAgZW5kID0gcGFja2V0ICsgbGVuOworCisgIGlmIChudG9ocygqKCh1bnNpZ25lZCBzaG9ydCAqKXBhY2tldCkpICE9IE9QX1JSUSB8fAorICAgICAgIShmaWxlbmFtZSA9IG5leHQoJnAsIGVuZCkpIHx8CisgICAgICAhKG1vZGUgPSBuZXh0KCZwLCBlbmQpKSB8fAorICAgICAgKHN0cmNhc2VjbXAobW9kZSwgIm9jdGV0IikgIT0gMCAmJiBzdHJjYXNlY21wKG1vZGUsICJuZXRhc2NpaSIpICE9IDApKQorICAgIGxlbiA9IHRmdHBfZXJyKEVSUl9JTEwsIHBhY2tldCwgXygidW5zdXBwb3J0ZWQgcmVxdWVzdCBmcm9tICVzIiksIGluZXRfbnRvYShwZWVyLnNpbl9hZGRyKSk7CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoc3RyY2FzZWNtcChtb2RlLCAibmV0YXNjaWkiKSA9PSAwKQorCXRyYW5zZmVyLT5uZXRhc2NpaSA9IDE7CisgICAgICAKKyAgICAgIHdoaWxlICgob3B0ID0gbmV4dCgmcCwgZW5kKSkpCisJeworCSAgaWYgKHN0cmNhc2VjbXAob3B0LCAiYmxrc2l6ZSIpID09IDApCisJICAgIHsKKwkgICAgICBpZiAoKG9wdCA9IG5leHQoJnAsIGVuZCkpICYmCisJCSAgIShkYWVtb24tPm9wdGlvbnMgJiBPUFRfVEZUUF9OT0JMT0NLKSkKKwkJeworCQkgIHRyYW5zZmVyLT5ibG9ja3NpemUgPSBhdG9pKG9wdCk7CisJCSAgaWYgKHRyYW5zZmVyLT5ibG9ja3NpemUgPCAxKQorCQkgICAgdHJhbnNmZXItPmJsb2Nrc2l6ZSA9IDE7CisJCSAgaWYgKHRyYW5zZmVyLT5ibG9ja3NpemUgPiAodW5zaWduZWQpZGFlbW9uLT5wYWNrZXRfYnVmZl9zeiAtIDQpCisJCSAgICB0cmFuc2Zlci0+YmxvY2tzaXplID0gKHVuc2lnbmVkKWRhZW1vbi0+cGFja2V0X2J1ZmZfc3ogLSA0OworCQkgIC8qIDMyIGJ5dGVzIGZvciBJUCwgVURQIGFuZCBURlRQIGhlYWRlcnMgKi8KKwkJICBpZiAobXR1ICE9IDAgJiYgdHJhbnNmZXItPmJsb2Nrc2l6ZSA+ICh1bnNpZ25lZCltdHUgLSAzMikKKwkJICAgIHRyYW5zZmVyLT5ibG9ja3NpemUgPSAodW5zaWduZWQpbXR1IC0gMzI7CisJCSAgdHJhbnNmZXItPm9wdF9ibG9ja3NpemUgPSAxOworCQkgIHRyYW5zZmVyLT5ibG9jayA9IDA7CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoc3RyY2FzZWNtcChvcHQsICJ0c2l6ZSIpID09IDAgJiYgbmV4dCgmcCwgZW5kKSAmJiAhdHJhbnNmZXItPm5ldGFzY2lpKQorCSAgICB7CisJICAgICAgdHJhbnNmZXItPm9wdF90cmFuc2l6ZSA9IDE7CisJICAgICAgdHJhbnNmZXItPmJsb2NrID0gMDsKKwkgICAgfQorCX0KKworICAgICAgLyogY29wZSB3aXRoIGJhY2tzbGFzaGVzIGZyb20gd2luZG93cyBib3hlbi4gKi8KKyAgICAgIHdoaWxlICgocCA9IHN0cmNocihmaWxlbmFtZSwgJ1xcJykpKQorCSpwID0gJy8nOworCisgICAgICBzdHJjcHkoZGFlbW9uLT5uYW1lYnVmZiwgIi8iKTsKKyAgICAgIGlmIChkYWVtb24tPnRmdHBfcHJlZml4KQorCXsKKwkgIGlmIChkYWVtb24tPnRmdHBfcHJlZml4WzBdID09ICcvJykKKwkgICAgZGFlbW9uLT5uYW1lYnVmZlswXSA9IDA7CisJICBzdHJuY2F0KGRhZW1vbi0+bmFtZWJ1ZmYsIGRhZW1vbi0+dGZ0cF9wcmVmaXgsIChNQVhETkFNRS0xKSAtIHN0cmxlbihkYWVtb24tPm5hbWVidWZmKSk7CisJICBpZiAoZGFlbW9uLT50ZnRwX3ByZWZpeFtzdHJsZW4oZGFlbW9uLT50ZnRwX3ByZWZpeCktMV0gIT0gJy8nKQorCSAgICBzdHJuY2F0KGRhZW1vbi0+bmFtZWJ1ZmYsICIvIiwgKE1BWEROQU1FLTEpIC0gc3RybGVuKGRhZW1vbi0+bmFtZWJ1ZmYpKTsKKworCSAgaWYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9URlRQX0FQUkVGKQorCSAgICB7CisJICAgICAgc2l6ZV90IG9sZGxlbiA9IHN0cmxlbihkYWVtb24tPm5hbWVidWZmKTsKKwkgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCSAgICAgIAorCSAgICAgIHN0cm5jYXQoZGFlbW9uLT5uYW1lYnVmZiwgaW5ldF9udG9hKHBlZXIuc2luX2FkZHIpLCAoTUFYRE5BTUUtMSkgLSBzdHJsZW4oZGFlbW9uLT5uYW1lYnVmZikpOworCSAgICAgIHN0cm5jYXQoZGFlbW9uLT5uYW1lYnVmZiwgIi8iLCAoTUFYRE5BTUUtMSkgLSBzdHJsZW4oZGFlbW9uLT5uYW1lYnVmZikpOworCSAgICAgIAorCSAgICAgIC8qIHJlbW92ZSB1bmlxdWUtZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3QgKi8KKwkgICAgICBpZiAoc3RhdChkYWVtb24tPm5hbWVidWZmLCAmc3RhdGJ1ZikgPT0gLTEgfHwgIVNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSkKKwkJZGFlbW9uLT5uYW1lYnVmZltvbGRsZW5dID0gMDsKKwkgICAgfQorCQkKKwkgIC8qIEFic29sdXRlIHBhdGhuYW1lcyBPSyBpZiB0aGV5IG1hdGNoIHByZWZpeCAqLworCSAgaWYgKGZpbGVuYW1lWzBdID09ICcvJykKKwkgICAgeworCSAgICAgIGlmIChzdHJzdHIoZmlsZW5hbWUsIGRhZW1vbi0+bmFtZWJ1ZmYpID09IGZpbGVuYW1lKQorCQlkYWVtb24tPm5hbWVidWZmWzBdID0gMDsKKwkgICAgICBlbHNlCisJCWZpbGVuYW1lKys7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChmaWxlbmFtZVswXSA9PSAnLycpCisJZGFlbW9uLT5uYW1lYnVmZlswXSA9IDA7CisgICAgICBzdHJuY2F0KGRhZW1vbi0+bmFtZWJ1ZmYsIGZpbGVuYW1lLCAoTUFYRE5BTUUtMSkgLSBzdHJsZW4oZGFlbW9uLT5uYW1lYnVmZikpOworCisgICAgICAvKiBjaGVjayBwZXJtaXNzaW9ucyBhbmQgb3BlbiBmaWxlICovCisgICAgICBpZiAoKHRyYW5zZmVyLT5maWxlID0gY2hlY2tfdGZ0cF9maWxlcGVybSgmbGVuKSkpCisJeworCSAgaWYgKChsZW4gPSBnZXRfYmxvY2socGFja2V0LCB0cmFuc2ZlcikpID09IC0xKQorCSAgICBsZW4gPSB0ZnRwX2Vycl9vb3BzKHBhY2tldCwgZGFlbW9uLT5uYW1lYnVmZik7CisJICBlbHNlCisJICAgIGlzX2VyciA9IDA7CisJfQorICAgIH0KKyAgCisgIHdoaWxlIChzZW5kdG8odHJhbnNmZXItPnNvY2tmZCwgcGFja2V0LCBsZW4sIDAsIAorCQkoc3RydWN0IHNvY2thZGRyICopJnBlZXIsIHNpemVvZihwZWVyKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworICAKKyAgaWYgKGlzX2VycikKKyAgICBmcmVlX3RyYW5zZmVyKHRyYW5zZmVyKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIG15X3N5c2xvZyhNU19URlRQIHwgTE9HX0lORk8sIF8oIlRGVFAgc2VudCAlcyB0byAlcyIpLCBkYWVtb24tPm5hbWVidWZmLCBpbmV0X250b2EocGVlci5zaW5fYWRkcikpOworICAgICAgdHJhbnNmZXItPm5leHQgPSBkYWVtb24tPnRmdHBfdHJhbnM7CisgICAgICBkYWVtb24tPnRmdHBfdHJhbnMgPSB0cmFuc2ZlcjsKKyAgICB9Cit9CisgCitzdGF0aWMgc3RydWN0IHRmdHBfZmlsZSAqY2hlY2tfdGZ0cF9maWxlcGVybShzc2l6ZV90ICpsZW4pCit7CisgIGNoYXIgKnBhY2tldCA9IGRhZW1vbi0+cGFja2V0LCAqbmFtZWJ1ZmYgPSBkYWVtb24tPm5hbWVidWZmOworICBzdHJ1Y3QgdGZ0cF9maWxlICpmaWxlOworICBzdHJ1Y3QgdGZ0cF90cmFuc2ZlciAqdDsKKyAgdWlkX3QgdWlkID0gZ2V0ZXVpZCgpOworICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworICBpbnQgZmQgPSAtMTsKKworICAvKiB0cmljayB0byBiYW4gbW92aW5nIG91dCBvZiB0aGUgc3VidHJlZSAqLworICBpZiAoZGFlbW9uLT50ZnRwX3ByZWZpeCAmJiBzdHJzdHIobmFtZWJ1ZmYsICIvLi4vIikpCisgICAgZ290byBwZXJtOworICAKKyAgaWYgKChmZCA9IG9wZW4obmFtZWJ1ZmYsIE9fUkRPTkxZKSkgPT0gLTEpCisgICAgeworICAgICAgaWYgKGVycm5vID09IEVOT0VOVCkKKwl7CisJICAqbGVuID0gdGZ0cF9lcnIoRVJSX0ZORiwgcGFja2V0LCBfKCJmaWxlICVzIG5vdCBmb3VuZCIpLCBuYW1lYnVmZik7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICBlbHNlIGlmIChlcnJubyA9PSBFQUNDRVMpCisJZ290byBwZXJtOworICAgICAgZWxzZQorCWdvdG8gb29wczsKKyAgICB9CisgIAorICAvKiBzdGF0IHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gYXZvaWQgc3RhdC0+b3BlbiByYWNlcyAqLworICBpZiAoZnN0YXQoZmQsICZzdGF0YnVmKSA9PSAtMSkKKyAgICBnb3RvIG9vcHM7CisgIAorICAvKiBydW5uaW5nIGFzIHJvb3QsIG11c3QgYmUgd29ybGQtcmVhZGFibGUgKi8KKyAgaWYgKHVpZCA9PSAwKQorICAgIHsKKyAgICAgIGlmICghKHN0YXRidWYuc3RfbW9kZSAmIFNfSVJPVEgpKQorCWdvdG8gcGVybTsKKyAgICB9CisgIC8qIGluIHNlY3VyZSBtb2RlLCBtdXN0IGJlIG93bmVkIGJ5IHVzZXIgcnVubmluZyBkbnNtYXNxICovCisgIGVsc2UgaWYgKChkYWVtb24tPm9wdGlvbnMgJiBPUFRfVEZUUF9TRUNVUkUpICYmIHVpZCAhPSBzdGF0YnVmLnN0X3VpZCkKKyAgICBnb3RvIHBlcm07CisgICAgICAKKyAgLyogSWYgd2UncmUgZG9pbmcgbWFueSB0cmFuZmVycyBmcm9tIHRoZSBzYW1lIGZpbGUsIG9ubHkgCisgICAgIG9wZW4gaXQgb25jZSB0aGlzIHNhdmVzIGxvdHMgb2YgZmlsZSBkZXNjcmlwdG9ycyAKKyAgICAgd2hlbiBtYXNzLWJvb3RpbmcgYSBiaWcgY2x1c3RlciwgZm9yIGluc3RhbmNlLiAKKyAgICAgQmUgY29uc2VydmF0aXZlIGFuZCBvbmx5IHNoYXJlIHdoZW4gaW5vZGUgYW5kIG5hbWUgbWF0Y2gKKyAgICAgdGhpcyBrZWVwcyBlcnJvciBtZXNzYWdlcyBzYW5lLiAqLworICBmb3IgKHQgPSBkYWVtb24tPnRmdHBfdHJhbnM7IHQ7IHQgPSB0LT5uZXh0KQorICAgIGlmICh0LT5maWxlLT5kZXYgPT0gc3RhdGJ1Zi5zdF9kZXYgJiYgCisJdC0+ZmlsZS0+aW5vZGUgPT0gc3RhdGJ1Zi5zdF9pbm8gJiYKKwlzdHJjbXAodC0+ZmlsZS0+ZmlsZW5hbWUsIG5hbWVidWZmKSA9PSAwKQorICAgICAgeworCWNsb3NlKGZkKTsKKwl0LT5maWxlLT5yZWZjb3VudCsrOworCXJldHVybiB0LT5maWxlOworICAgICAgfQorICAKKyAgaWYgKCEoZmlsZSA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IHRmdHBfZmlsZSkgKyBzdHJsZW4obmFtZWJ1ZmYpICsgMSkpKQorICAgIHsKKyAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgZ290byBvb3BzOworICAgIH0KKworICBmaWxlLT5mZCA9IGZkOworICBmaWxlLT5zaXplID0gc3RhdGJ1Zi5zdF9zaXplOworICBmaWxlLT5kZXYgPSBzdGF0YnVmLnN0X2RldjsKKyAgZmlsZS0+aW5vZGUgPSBzdGF0YnVmLnN0X2lubzsKKyAgZmlsZS0+cmVmY291bnQgPSAxOworICBzdHJjcHkoZmlsZS0+ZmlsZW5hbWUsIG5hbWVidWZmKTsKKyAgcmV0dXJuIGZpbGU7CisgIAorIHBlcm06CisgIGVycm5vID0gRUFDQ0VTOworICAqbGVuID0gIHRmdHBfZXJyKEVSUl9QRVJNLCBwYWNrZXQsIF8oImNhbm5vdCBhY2Nlc3MgJXM6ICVzIiksIG5hbWVidWZmKTsKKyAgaWYgKGZkICE9IC0xKQorICAgIGNsb3NlKGZkKTsKKyAgcmV0dXJuIE5VTEw7CisKKyBvb3BzOgorICAqbGVuID0gIHRmdHBfZXJyX29vcHMocGFja2V0LCBuYW1lYnVmZik7CisgIGlmIChmZCAhPSAtMSkKKyAgICBjbG9zZShmZCk7CisgIHJldHVybiBOVUxMOworfQorCit2b2lkIGNoZWNrX3RmdHBfbGlzdGVuZXJzKGZkX3NldCAqcnNldCwgdGltZV90IG5vdykKK3sKKyAgc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyLCAqdG1wLCAqKnVwOworICBzc2l6ZV90IGxlbjsKKyAgCisgIHN0cnVjdCBhY2sgeworICAgIHVuc2lnbmVkIHNob3J0IG9wLCBibG9jazsKKyAgfSAqbWVzcyA9IChzdHJ1Y3QgYWNrICopZGFlbW9uLT5wYWNrZXQ7CisgIAorICAvKiBDaGVjayBmb3IgYWN0aXZpdHkgb24gYW55IGV4aXN0aW5nIHRyYW5zZmVycyAqLworICBmb3IgKHRyYW5zZmVyID0gZGFlbW9uLT50ZnRwX3RyYW5zLCB1cCA9ICZkYWVtb24tPnRmdHBfdHJhbnM7IHRyYW5zZmVyOyB0cmFuc2ZlciA9IHRtcCkKKyAgICB7CisgICAgICB0bXAgPSB0cmFuc2Zlci0+bmV4dDsKKyAgICAgIAorICAgICAgaWYgKEZEX0lTU0VUKHRyYW5zZmVyLT5zb2NrZmQsIHJzZXQpKQorCXsKKwkgIC8qIHdlIG92ZXJ3cm90ZSB0aGUgYnVmZmVyLi4uICovCisJICBkYWVtb24tPnNydl9zYXZlID0gTlVMTDsKKwkgIAorCSAgaWYgKChsZW4gPSByZWN2KHRyYW5zZmVyLT5zb2NrZmQsIGRhZW1vbi0+cGFja2V0LCBkYWVtb24tPnBhY2tldF9idWZmX3N6LCAwKSkgPj0gKHNzaXplX3Qpc2l6ZW9mKHN0cnVjdCBhY2spKQorCSAgICB7CisJICAgICAgaWYgKG50b2hzKG1lc3MtPm9wKSA9PSBPUF9BQ0sgJiYgbnRvaHMobWVzcy0+YmxvY2spID09ICh1bnNpZ25lZCBzaG9ydCl0cmFuc2Zlci0+YmxvY2spIAorCQl7CisJCSAgLyogR290IGFjaywgZW5zdXJlIHdlIHRha2UgdGhlIChyZSl0cmFuc21pdCBwYXRoICovCisJCSAgdHJhbnNmZXItPnRpbWVvdXQgPSBub3c7CisJCSAgdHJhbnNmZXItPmJhY2tvZmYgPSAwOworCQkgIGlmICh0cmFuc2Zlci0+YmxvY2srKyAhPSAwKQorCQkgICAgdHJhbnNmZXItPm9mZnNldCArPSB0cmFuc2Zlci0+YmxvY2tzaXplIC0gdHJhbnNmZXItPmV4cGFuc2lvbjsKKwkJfQorCSAgICAgIGVsc2UgaWYgKG50b2hzKG1lc3MtPm9wKSA9PSBPUF9FUlIpCisJCXsKKwkJICBjaGFyICpwID0gZGFlbW9uLT5wYWNrZXQgKyBzaXplb2Yoc3RydWN0IGFjayk7CisJCSAgY2hhciAqZW5kID0gZGFlbW9uLT5wYWNrZXQgKyBsZW47CisJCSAgY2hhciAqZXJyID0gbmV4dCgmcCwgZW5kKTsKKwkJICAvKiBTYW5pdGlzZSBlcnJvciBtZXNzYWdlICovCisJCSAgaWYgKCFlcnIpCisJCSAgICBlcnIgPSAiIjsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGNoYXIgKnEsICpyOworCQkgICAgICBmb3IgKHEgPSByID0gZXJyOyAqcjsgcisrKQorCQkJaWYgKGlzcHJpbnQoKGludCkqcikpCisJCQkgICoocSsrKSA9ICpyOworCQkgICAgICAqcSA9IDA7CisJCSAgICB9CisJCSAgbXlfc3lzbG9nKE1TX1RGVFAgfCBMT0dfRVJSLCBfKCJURlRQIGVycm9yICVkICVzIHJlY2VpdmVkIGZyb20gJXMiKSwKKwkJCSAgICAoaW50KW50b2hzKG1lc3MtPmJsb2NrKSwgZXJyLCAKKwkJCSAgICBpbmV0X250b2EodHJhbnNmZXItPnBlZXIuc2luX2FkZHIpKTsJCisJCSAgCisJCSAgLyogR290IGVyciwgZW5zdXJlIHdlIHRha2UgYWJvcnQgKi8KKwkJICB0cmFuc2Zlci0+dGltZW91dCA9IG5vdzsKKwkJICB0cmFuc2Zlci0+YmFja29mZiA9IDEwMDsKKwkJfQorCSAgICB9CisJfQorICAgICAgCisgICAgICBpZiAoZGlmZnRpbWUobm93LCB0cmFuc2Zlci0+dGltZW91dCkgPj0gMC4wKQorCXsKKwkgIGludCBlbmRjb24gPSAwOworCisJICAvKiB0aW1lb3V0LCByZXRyYW5zbWl0ICovCisJICB0cmFuc2Zlci0+dGltZW91dCArPSAxICsgKDE8PHRyYW5zZmVyLT5iYWNrb2ZmKTsKKwkgIAkgIAorCSAgLyogd2Ugb3Zlcndyb3RlIHRoZSBidWZmZXIuLi4gKi8KKwkgIGRhZW1vbi0+c3J2X3NhdmUgPSBOVUxMOworCSAKKwkgIGlmICgobGVuID0gZ2V0X2Jsb2NrKGRhZW1vbi0+cGFja2V0LCB0cmFuc2ZlcikpID09IC0xKQorCSAgICB7CisJICAgICAgbGVuID0gdGZ0cF9lcnJfb29wcyhkYWVtb24tPnBhY2tldCwgdHJhbnNmZXItPmZpbGUtPmZpbGVuYW1lKTsKKwkgICAgICBlbmRjb24gPSAxOworCSAgICB9CisJICBlbHNlIGlmICgrK3RyYW5zZmVyLT5iYWNrb2ZmID4gNSkKKwkgICAgeworCSAgICAgIC8qIGRvbid0IGNvbXBsYWluIGFib3V0IHRpbWVvdXQgd2hlbiB3ZSdyZSBhd2FpdGluZyB0aGUgbGFzdAorCQkgQUNLLCBzb21lIGNsaWVudHMgbmV2ZXIgc2VuZCBpdCAqLworCSAgICAgIGlmIChsZW4gIT0gMCkKKwkJbXlfc3lzbG9nKE1TX1RGVFAgfCBMT0dfRVJSLCBfKCJURlRQIGZhaWxlZCBzZW5kaW5nICVzIHRvICVzIiksIAorCQkJICB0cmFuc2Zlci0+ZmlsZS0+ZmlsZW5hbWUsIGluZXRfbnRvYSh0cmFuc2Zlci0+cGVlci5zaW5fYWRkcikpOworCSAgICAgIGxlbiA9IDA7CisJICAgIH0KKwkgIAorCSAgaWYgKGxlbiAhPSAwKQorCSAgICB3aGlsZShzZW5kdG8odHJhbnNmZXItPnNvY2tmZCwgZGFlbW9uLT5wYWNrZXQsIGxlbiwgMCwgCisJCQkgKHN0cnVjdCBzb2NrYWRkciAqKSZ0cmFuc2Zlci0+cGVlciwgc2l6ZW9mKHRyYW5zZmVyLT5wZWVyKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworCSAgCisJICBpZiAoZW5kY29uIHx8IGxlbiA9PSAwKQorCSAgICB7CisJICAgICAgLyogdW5saW5rICovCisJICAgICAgKnVwID0gdG1wOworCSAgICAgIGZyZWVfdHJhbnNmZXIodHJhbnNmZXIpOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJfQorCisgICAgICB1cCA9ICZ0cmFuc2Zlci0+bmV4dDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfdHJhbnNmZXIoc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyKQoreworICBjbG9zZSh0cmFuc2Zlci0+c29ja2ZkKTsKKyAgaWYgKHRyYW5zZmVyLT5maWxlICYmICgtLXRyYW5zZmVyLT5maWxlLT5yZWZjb3VudCkgPT0gMCkKKyAgICB7CisgICAgICBjbG9zZSh0cmFuc2Zlci0+ZmlsZS0+ZmQpOworICAgICAgZnJlZSh0cmFuc2Zlci0+ZmlsZSk7CisgICAgfQorICBmcmVlKHRyYW5zZmVyKTsKK30KKworc3RhdGljIGNoYXIgKm5leHQoY2hhciAqKnAsIGNoYXIgKmVuZCkKK3sKKyAgY2hhciAqcmV0ID0gKnA7CisgIHNpemVfdCBsZW47CisKKyAgaWYgKCooZW5kLTEpICE9IDAgfHwgCisgICAgICAqcCA9PSBlbmQgfHwKKyAgICAgIChsZW4gPSBzdHJsZW4ocmV0KSkgPT0gMCkKKyAgICByZXR1cm4gTlVMTDsKKworICAqcCArPSBsZW4gKyAxOworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCB0ZnRwX2VycihpbnQgZXJyLCBjaGFyICpwYWNrZXQsIGNoYXIgKm1lc3NhZ2UsIGNoYXIgKmZpbGUpCit7CisgIHN0cnVjdCBlcnJtZXNzIHsKKyAgICB1bnNpZ25lZCBzaG9ydCBvcCwgZXJyOworICAgIGNoYXIgbWVzc2FnZVtdOworICB9ICptZXNzID0gKHN0cnVjdCBlcnJtZXNzICopcGFja2V0OworICBzc2l6ZV90IHJldCA9IDQ7CisgIGNoYXIgKmVycnN0ciA9IHN0cmVycm9yKGVycm5vKTsKKyAKKyAgbWVzcy0+b3AgPSBodG9ucyhPUF9FUlIpOworICBtZXNzLT5lcnIgPSBodG9ucyhlcnIpOworICByZXQgKz0gKHNucHJpbnRmKG1lc3MtPm1lc3NhZ2UsIDUwMCwgIG1lc3NhZ2UsIGZpbGUsIGVycnN0cikgKyAxKTsKKyAgbXlfc3lzbG9nKE1TX1RGVFAgfCBMT0dfRVJSLCAiVEZUUCAlcyIsIG1lc3MtPm1lc3NhZ2UpOworICAKKyAgcmV0dXJuICByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRmdHBfZXJyX29vcHMoY2hhciAqcGFja2V0LCBjaGFyICpmaWxlKQoreworICByZXR1cm4gdGZ0cF9lcnIoRVJSX05PVERFRiwgcGFja2V0LCBfKCJjYW5ub3QgcmVhZCAlczogJXMiKSwgZmlsZSk7Cit9CisKKy8qIHJldHVybiAtMSBmb3IgZXJyb3IsIHplcm8gZm9yIGRvbmUuICovCitzdGF0aWMgc3NpemVfdCBnZXRfYmxvY2soY2hhciAqcGFja2V0LCBzdHJ1Y3QgdGZ0cF90cmFuc2ZlciAqdHJhbnNmZXIpCit7CisgIGlmICh0cmFuc2Zlci0+YmxvY2sgPT0gMCkKKyAgICB7CisgICAgICAvKiBzZW5kIE9BQ0sgKi8KKyAgICAgIGNoYXIgKnA7CisgICAgICBzdHJ1Y3Qgb2Fja21lc3MgeworCXVuc2lnbmVkIHNob3J0IG9wOworCWNoYXIgZGF0YVtdOworICAgICAgfSAqbWVzcyA9IChzdHJ1Y3Qgb2Fja21lc3MgKilwYWNrZXQ7CisgICAgICAKKyAgICAgIHAgPSBtZXNzLT5kYXRhOworICAgICAgbWVzcy0+b3AgPSBodG9ucyhPUF9PQUNLKTsKKyAgICAgIGlmICh0cmFuc2Zlci0+b3B0X2Jsb2Nrc2l6ZSkKKwl7CisJICBwICs9IChzcHJpbnRmKHAsICJibGtzaXplIikgKyAxKTsKKwkgIHAgKz0gKHNwcmludGYocCwgIiVkIiwgdHJhbnNmZXItPmJsb2Nrc2l6ZSkgKyAxKTsKKwl9CisgICAgICBpZiAodHJhbnNmZXItPm9wdF90cmFuc2l6ZSkKKwl7CisJICBwICs9IChzcHJpbnRmKHAsInRzaXplIikgKyAxKTsKKwkgIHAgKz0gKHNwcmludGYocCwgIiV1IiwgKHVuc2lnbmVkIGludCl0cmFuc2Zlci0+ZmlsZS0+c2l6ZSkgKyAxKTsKKwl9CisKKyAgICAgIHJldHVybiBwIC0gcGFja2V0OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIHNlbmQgZGF0YSBwYWNrZXQgKi8KKyAgICAgIHN0cnVjdCBkYXRhbWVzcyB7CisJdW5zaWduZWQgc2hvcnQgb3AsIGJsb2NrOworCXVuc2lnbmVkIGNoYXIgZGF0YVtdOworICAgICAgfSAqbWVzcyA9IChzdHJ1Y3QgZGF0YW1lc3MgKilwYWNrZXQ7CisgICAgICAKKyAgICAgIHNpemVfdCBzaXplID0gdHJhbnNmZXItPmZpbGUtPnNpemUgLSB0cmFuc2Zlci0+b2Zmc2V0OyAKKyAgICAgIAorICAgICAgaWYgKHRyYW5zZmVyLT5vZmZzZXQgPiB0cmFuc2Zlci0+ZmlsZS0+c2l6ZSkKKwlyZXR1cm4gMDsgLyogZmluaXNoZWQgKi8KKyAgICAgIAorICAgICAgaWYgKHNpemUgPiB0cmFuc2Zlci0+YmxvY2tzaXplKQorCXNpemUgPSB0cmFuc2Zlci0+YmxvY2tzaXplOworICAgICAgCisgICAgICBtZXNzLT5vcCA9IGh0b25zKE9QX0RBVEEpOworICAgICAgbWVzcy0+YmxvY2sgPSBodG9ucygodW5zaWduZWQgc2hvcnQpKHRyYW5zZmVyLT5ibG9jaykpOworICAgICAgCisgICAgICBpZiAobHNlZWsodHJhbnNmZXItPmZpbGUtPmZkLCB0cmFuc2Zlci0+b2Zmc2V0LCBTRUVLX1NFVCkgPT0gKG9mZl90KS0xIHx8CisJICAhcmVhZF93cml0ZSh0cmFuc2Zlci0+ZmlsZS0+ZmQsIG1lc3MtPmRhdGEsIHNpemUsIDEpKQorCXJldHVybiAtMTsKKyAgICAgIAorICAgICAgdHJhbnNmZXItPmV4cGFuc2lvbiA9IDA7CisgICAgICAKKyAgICAgIC8qIE1hcCAnXG4nIHRvIENSLUxGIGluIG5ldGFzY2lpIG1vZGUgKi8KKyAgICAgIGlmICh0cmFuc2Zlci0+bmV0YXNjaWkpCisJeworCSAgc2l6ZV90IGk7CisJICBpbnQgbmV3Y2FycnlsZjsKKworCSAgZm9yIChpID0gMCwgbmV3Y2FycnlsZiA9IDA7IGkgPCBzaXplOyBpKyspCisJICAgIGlmIChtZXNzLT5kYXRhW2ldID09ICdcbicgJiYgKCBpICE9IDAgfHwgIXRyYW5zZmVyLT5jYXJyeWxmKSkKKwkgICAgICB7CisJCWlmIChzaXplID09IHRyYW5zZmVyLT5ibG9ja3NpemUpCisJCSAgeworCQkgICAgdHJhbnNmZXItPmV4cGFuc2lvbisrOworCQkgICAgaWYgKGkgPT0gc2l6ZSAtIDEpCisJCSAgICAgIG5ld2NhcnJ5bGYgPSAxOyAvKiBkb24ndCBleHBhbmQgTEYgYWdhaW4gaWYgaXQgbW92ZXMgdG8gdGhlIG5leHQgYmxvY2sgKi8KKwkJICB9CisJCWVsc2UKKwkJICBzaXplKys7IC8qIHJvb20gaW4gdGhpcyBibG9jayAqLworCSAgICAgIAorCQkvKiBtYWtlIHNwYWNlIGFuZCBpbnNlcnQgQ1IgKi8KKwkJbWVtbW92ZSgmbWVzcy0+ZGF0YVtpKzFdLCAmbWVzcy0+ZGF0YVtpXSwgc2l6ZSAtIChpICsgMSkpOworCQltZXNzLT5kYXRhW2ldID0gJ1xyJzsKKwkJCisJCWkrKzsKKwkgICAgICB9CisJICB0cmFuc2Zlci0+Y2FycnlsZiA9IG5ld2NhcnJ5bGY7CisJICAKKwl9CisKKyAgICAgIHJldHVybiBzaXplICsgNDsKKyAgICB9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwuYyBiL3NyYy91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2U3N2YwNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy91dGlsLmMKQEAgLTAsMCArMSw1MTQgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworLyogVGhlIFNVUkYgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igd2FzIHRha2VuIGZyb20gZGpiZG5zLTEuMDUsIGJ5IAorICAgRGFuaWVsIEogQmVybnN0ZWluLCB3aGljaCBpcyBwdWJsaWMgZG9tYWluLiAqLworCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0JST0tFTl9SVEMKKyNpbmNsdWRlIDxzeXMvdGltZXMuaD4KKyNlbmRpZgorCisjaWZkZWYgTE9DQUxFRElSCisjaW5jbHVkZSA8aWRuYS5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0FSQzRSQU5ET00KK3ZvaWQgcmFuZF9pbml0KHZvaWQpCit7CisgIHJldHVybjsKK30KKwordW5zaWduZWQgc2hvcnQgcmFuZDE2KHZvaWQpCit7CisgICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KSAoYXJjNHJhbmRvbSgpID4+IDE1KTsKK30KKworI2Vsc2UKKworLyogU1VSRiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworCit0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzI7CisKK3N0YXRpYyB1aW50MzIgc2VlZFszMl07CitzdGF0aWMgdWludDMyIGluWzEyXTsKK3N0YXRpYyB1aW50MzIgb3V0WzhdOworCit2b2lkIHJhbmRfaW5pdCgpCit7CisgIGludCBmZCA9IG9wZW4oUkFOREZJTEUsIE9fUkRPTkxZKTsKKyAgCisgIGlmIChmZCA9PSAtMSB8fAorICAgICAgIXJlYWRfd3JpdGUoZmQsICh1bnNpZ25lZCBjaGFyICopJnNlZWQsIHNpemVvZihzZWVkKSwgMSkgfHwKKyAgICAgICFyZWFkX3dyaXRlKGZkLCAodW5zaWduZWQgY2hhciAqKSZpbiwgc2l6ZW9mKGluKSwgMSkpCisgICAgZGllKF8oImZhaWxlZCB0byBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogJXMiKSwgTlVMTCwgRUNfTUlTQyk7CisgIAorICBjbG9zZShmZCk7Cit9CisKKyNkZWZpbmUgUk9UQVRFKHgsYikgKCgoeCkgPDwgKGIpKSB8ICgoeCkgPj4gKDMyIC0gKGIpKSkpCisjZGVmaW5lIE1VU0goaSxiKSB4ID0gdFtpXSArPSAoKCh4IF4gc2VlZFtpXSkgKyBzdW0pIF4gUk9UQVRFKHgsYikpOworCitzdGF0aWMgdm9pZCBzdXJmKHZvaWQpCit7CisgIHVpbnQzMiB0WzEyXTsgdWludDMyIHg7IHVpbnQzMiBzdW0gPSAwOworICBpbnQgcjsgaW50IGk7IGludCBsb29wOworCisgIGZvciAoaSA9IDA7aSA8IDEyOysraSkgdFtpXSA9IGluW2ldIF4gc2VlZFsxMiArIGldOworICBmb3IgKGkgPSAwO2kgPCA4OysraSkgb3V0W2ldID0gc2VlZFsyNCArIGldOworICB4ID0gdFsxMV07CisgIGZvciAobG9vcCA9IDA7bG9vcCA8IDI7Kytsb29wKSB7CisgICAgZm9yIChyID0gMDtyIDwgMTY7KytyKSB7CisgICAgICBzdW0gKz0gMHg5ZTM3NzliOTsKKyAgICAgIE1VU0goMCw1KSBNVVNIKDEsNykgTVVTSCgyLDkpIE1VU0goMywxMykKKyAgICAgIE1VU0goNCw1KSBNVVNIKDUsNykgTVVTSCg2LDkpIE1VU0goNywxMykKKyAgICAgIE1VU0goOCw1KSBNVVNIKDksNykgTVVTSCgxMCw5KSBNVVNIKDExLDEzKQorICAgIH0KKyAgICBmb3IgKGkgPSAwO2kgPCA4OysraSkgb3V0W2ldIF49IHRbaSArIDRdOworICB9Cit9CisKK3Vuc2lnbmVkIHNob3J0IHJhbmQxNih2b2lkKQoreworICBzdGF0aWMgaW50IG91dGxlZnQgPSAwOworCisgIGlmICghb3V0bGVmdCkgeworICAgIGlmICghKytpblswXSkgaWYgKCErK2luWzFdKSBpZiAoISsraW5bMl0pICsraW5bM107CisgICAgc3VyZigpOworICAgIG91dGxlZnQgPSA4OworICB9CisKKyAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydCkgb3V0Wy0tb3V0bGVmdF07Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50IGNoZWNrX25hbWUoY2hhciAqaW4pCit7CisgIC8qIHJlbW92ZSB0cmFpbGluZyAuIAorICAgICBhbHNvIGZhaWwgZW1wdHkgc3RyaW5nIGFuZCBsYWJlbCA+IDYzIGNoYXJzICovCisgIHNpemVfdCBkb3RnYXAgPSAwLCBsID0gc3RybGVuKGluKTsKKyAgY2hhciBjOworICBpbnQgbm93aGl0ZSA9IDA7CisgIAorICBpZiAobCA9PSAwIHx8IGwgPiBNQVhETkFNRSkgcmV0dXJuIDA7CisgIAorICBpZiAoaW5bbC0xXSA9PSAnLicpCisgICAgeworICAgICAgaWYgKGwgPT0gMSkgcmV0dXJuIDA7CisgICAgICBpbltsLTFdID0gMDsKKyAgICB9CisgIAorICBmb3IgKDsgKGMgPSAqaW4pOyBpbisrKQorICAgIHsKKyAgICAgIGlmIChjID09ICcuJykKKwlkb3RnYXAgPSAwOworICAgICAgZWxzZSBpZiAoKytkb3RnYXAgPiBNQVhMQUJFTCkKKwlyZXR1cm4gMDsKKyAgICAgIGVsc2UgaWYgKGlzYXNjaWkoYykgJiYgaXNjbnRybChjKSkgCisJLyogaXNjbnRybCBvbmx5IGdpdmVzIGV4cGVjdGVkIHJlc3VsdHMgZm9yIGFzY2lpICovCisJcmV0dXJuIDA7CisjaWZuZGVmIExPQ0FMRURJUgorICAgICAgZWxzZSBpZiAoIWlzYXNjaWkoYykpCisJcmV0dXJuIDA7CisjZW5kaWYKKyAgICAgIGVsc2UgaWYgKGMgIT0gJyAnKQorCW5vd2hpdGUgPSAxOworICAgIH0KKworICBpZiAoIW5vd2hpdGUpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIEhvc3RuYW1lcyBoYXZlIGEgbW9yZSBsaW1pdGVkIHZhbGlkIGNoYXJzZXQgdGhhbiBkb21haW4gbmFtZXMKKyAgIHNvIGNoZWNrIGZvciBsZWdhbCBjaGFyIGEteiBBLVogMC05IC0gXyAKKyAgIE5vdGUgdGhhdCB0aGlzIG1heSByZWNlaXZlIGEgRlFETiwgc28gb25seSBjaGVjayB0aGUgZmlyc3QgbGFiZWwgCisgICBmb3IgdGhlIHRpZ2h0ZXIgY3JpdGVyaWEuICovCitpbnQgbGVnYWxfaG9zdG5hbWUoY2hhciAqbmFtZSkKK3sKKyAgY2hhciBjOworCisgIGlmICghY2hlY2tfbmFtZShuYW1lKSkKKyAgICByZXR1cm4gMDsKKworICBmb3IgKDsgKGMgPSAqbmFtZSk7IG5hbWUrKykKKyAgICAvKiBjaGVjayBmb3IgbGVnYWwgY2hhciBhLXogQS1aIDAtOSAtIF8gLiAqLworICAgIHsKKyAgICAgIGlmICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8CisJICAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8CisJICAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8CisJICBjID09ICctJyB8fCBjID09ICdfJykKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgLyogZW5kIG9mIGhvc3RuYW1lIHBhcnQgKi8KKyAgICAgIGlmIChjID09ICcuJykKKwlyZXR1cm4gMTsKKyAgICAgIAorICAgICAgcmV0dXJuIDA7CisgICAgfQorICAKKyAgcmV0dXJuIDE7Cit9CisgIAorY2hhciAqY2Fub25pY2FsaXNlKGNoYXIgKmluLCBpbnQgKm5vbWVtKQoreworICBjaGFyICpyZXQgPSBOVUxMOworI2lmZGVmIExPQ0FMRURJUgorICBpbnQgcmM7CisjZW5kaWYKKworICBpZiAobm9tZW0pCisgICAgKm5vbWVtID0gMDsKKyAgCisgIGlmICghY2hlY2tfbmFtZShpbikpCisgICAgcmV0dXJuIE5VTEw7CisgIAorI2lmZGVmIExPQ0FMRURJUgorICBpZiAoKHJjID0gaWRuYV90b19hc2NpaV9seihpbiwgJnJldCwgMCkpICE9IElETkFfU1VDQ0VTUykKKyAgICB7CisgICAgICBpZiAocmV0KQorCWZyZWUocmV0KTsKKworICAgICAgaWYgKG5vbWVtICYmIChyYyA9PSBJRE5BX01BTExPQ19FUlJPUiB8fCByYyA9PSBJRE5BX0RMT1BFTl9FUlJPUikpCisJeworCSAgbXlfc3lzbG9nKExPR19FUlIsIF8oImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiKSk7CisJICAqbm9tZW0gPSAxOworCX0KKyAgICAKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbHNlCisgIGlmICgocmV0ID0gd2hpbmVfbWFsbG9jKHN0cmxlbihpbikrMSkpKQorICAgIHN0cmNweShyZXQsIGluKTsKKyAgZWxzZSBpZiAobm9tZW0pCisgICAgKm5vbWVtID0gMTsgICAgCisjZW5kaWYKKworICByZXR1cm4gcmV0OworfQorCit1bnNpZ25lZCBjaGFyICpkb19yZmMxMDM1X25hbWUodW5zaWduZWQgY2hhciAqcCwgY2hhciAqc3ZhbCkKK3sKKyAgaW50IGo7CisgIAorICB3aGlsZSAoc3ZhbCAmJiAqc3ZhbCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICpjcCA9IHArKzsKKyAgICAgIGZvciAoaiA9IDA7ICpzdmFsICYmICgqc3ZhbCAhPSAnLicpOyBzdmFsKyssIGorKykKKwkqcCsrID0gKnN2YWw7CisgICAgICAqY3AgID0gajsKKyAgICAgIGlmICgqc3ZhbCkKKwlzdmFsKys7CisgICAgfQorICByZXR1cm4gcDsKK30KKworLyogZm9yIHVzZSBkdXJpbmcgc3RhcnR1cCAqLwordm9pZCAqc2FmZV9tYWxsb2Moc2l6ZV90IHNpemUpCit7CisgIHZvaWQgKnJldCA9IG1hbGxvYyhzaXplKTsKKyAgCisgIGlmICghcmV0KQorICAgIGRpZShfKCJjb3VsZCBub3QgZ2V0IG1lbW9yeSIpLCBOVUxMLCBFQ19OT01FTSk7CisgICAgIAorICByZXR1cm4gcmV0OworfSAgICAKKwordm9pZCBzYWZlX3BpcGUoaW50ICpmZCwgaW50IHJlYWRfbm9ibG9jaykKK3sKKyAgaWYgKHBpcGUoZmQpID09IC0xIHx8IAorICAgICAgIWZpeF9mZChmZFsxXSkgfHwKKyAgICAgIChyZWFkX25vYmxvY2sgJiYgIWZpeF9mZChmZFswXSkpKQorICAgIGRpZShfKCJjYW5ub3QgY3JlYXRlIHBpcGU6ICVzIiksIE5VTEwsIEVDX01JU0MpOworfQorCit2b2lkICp3aGluZV9tYWxsb2Moc2l6ZV90IHNpemUpCit7CisgIHZvaWQgKnJldCA9IG1hbGxvYyhzaXplKTsKKworICBpZiAoIXJldCkKKyAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiZmFpbGVkIHRvIGFsbG9jYXRlICVkIGJ5dGVzIiksIChpbnQpIHNpemUpOworCisgIHJldHVybiByZXQ7Cit9CisKK2ludCBzb2NrYWRkcl9pc2VxdWFsKHVuaW9uIG15c29ja2FkZHIgKnMxLCB1bmlvbiBteXNvY2thZGRyICpzMikKK3sKKyAgaWYgKHMxLT5zYS5zYV9mYW1pbHkgPT0gczItPnNhLnNhX2ZhbWlseSkKKyAgICB7IAorICAgICAgaWYgKHMxLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgorCSAgczEtPmluLnNpbl9wb3J0ID09IHMyLT5pbi5zaW5fcG9ydCAmJgorCSAgczEtPmluLnNpbl9hZGRyLnNfYWRkciA9PSBzMi0+aW4uc2luX2FkZHIuc19hZGRyKQorCXJldHVybiAxOworI2lmZGVmIEhBVkVfSVBWNiAgICAgIAorICAgICAgaWYgKHMxLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYKKwkgIHMxLT5pbjYuc2luNl9wb3J0ID09IHMyLT5pbjYuc2luNl9wb3J0ICYmCisJICBJTjZfQVJFX0FERFJfRVFVQUwoJnMxLT5pbjYuc2luNl9hZGRyLCAmczItPmluNi5zaW42X2FkZHIpKQorCXJldHVybiAxOworI2VuZGlmCisgICAgfQorICByZXR1cm4gMDsKK30KKworaW50IHNhX2xlbih1bmlvbiBteXNvY2thZGRyICphZGRyKQoreworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIHJldHVybiBhZGRyLT5zYS5zYV9sZW47CisjZWxzZQorI2lmZGVmIEhBVkVfSVBWNgorICBpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorICAgIHJldHVybiBzaXplb2YoYWRkci0+aW42KTsKKyAgZWxzZQorI2VuZGlmCisgICAgcmV0dXJuIHNpemVvZihhZGRyLT5pbik7IAorI2VuZGlmCit9CisKKy8qIGRvbid0IHVzZSBzdHJjYXNlY21wIGFuZCBmcmllbmRzIGhlcmUgLSB0aGV5IG1heSBiZSBtZXNzZWQgdXAgYnkgTE9DQUxFICovCitpbnQgaG9zdG5hbWVfaXNlcXVhbChjaGFyICphLCBjaGFyICpiKQoreworICB1bnNpZ25lZCBpbnQgYzEsIGMyOworICAKKyAgZG8geworICAgIGMxID0gKHVuc2lnbmVkIGNoYXIpICphKys7CisgICAgYzIgPSAodW5zaWduZWQgY2hhcikgKmIrKzsKKyAgICAKKyAgICBpZiAoYzEgPj0gJ0EnICYmIGMxIDw9ICdaJykKKyAgICAgIGMxICs9ICdhJyAtICdBJzsKKyAgICBpZiAoYzIgPj0gJ0EnICYmIGMyIDw9ICdaJykKKyAgICAgIGMyICs9ICdhJyAtICdBJzsKKyAgICAKKyAgICBpZiAoYzEgIT0gYzIpCisgICAgICByZXR1cm4gMDsKKyAgfSB3aGlsZSAoYzEpOworICAKKyAgcmV0dXJuIDE7Cit9CisgICAgCit0aW1lX3QgZG5zbWFzcV90aW1lKHZvaWQpCit7CisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDCisgIHN0cnVjdCB0bXMgZHVtbXk7CisgIHN0YXRpYyBsb25nIHRwcyA9IDA7CisKKyAgaWYgKHRwcyA9PSAwKQorICAgIHRwcyA9IHN5c2NvbmYoX1NDX0NMS19UQ0spOworCisgIHJldHVybiAodGltZV90KSh0aW1lcygmZHVtbXkpL3Rwcyk7CisjZWxzZQorICByZXR1cm4gdGltZShOVUxMKTsKKyNlbmRpZgorfQorCitpbnQgaXNfc2FtZV9uZXQoc3RydWN0IGluX2FkZHIgYSwgc3RydWN0IGluX2FkZHIgYiwgc3RydWN0IGluX2FkZHIgbWFzaykKK3sKKyAgcmV0dXJuIChhLnNfYWRkciAmIG1hc2suc19hZGRyKSA9PSAoYi5zX2FkZHIgJiBtYXNrLnNfYWRkcik7Cit9IAorCisvKiByZXR1cm5zIHBvcnQgbnVtYmVyIGZyb20gYWRkcmVzcyAqLworaW50IHByZXR0eXByaW50X2FkZHIodW5pb24gbXlzb2NrYWRkciAqYWRkciwgY2hhciAqYnVmKQoreworICBpbnQgcG9ydCA9IDA7CisgIAorI2lmZGVmIEhBVkVfSVBWNgorICBpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisgICAgeworICAgICAgaW5ldF9udG9wKEFGX0lORVQsICZhZGRyLT5pbi5zaW5fYWRkciwgYnVmLCBBRERSU1RSTEVOKTsKKyAgICAgIHBvcnQgPSBudG9ocyhhZGRyLT5pbi5zaW5fcG9ydCk7CisgICAgfQorICBlbHNlIGlmIChhZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisgICAgeworICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmYWRkci0+aW42LnNpbjZfYWRkciwgYnVmLCBBRERSU1RSTEVOKTsKKyAgICAgIHBvcnQgPSBudG9ocyhhZGRyLT5pbjYuc2luNl9wb3J0KTsKKyAgICB9CisjZWxzZQorICBzdHJjcHkoYnVmLCBpbmV0X250b2EoYWRkci0+aW4uc2luX2FkZHIpKTsKKyAgcG9ydCA9IG50b2hzKGFkZHItPmluLnNpbl9wb3J0KTsgCisjZW5kaWYKKyAgCisgIHJldHVybiBwb3J0OworfQorCit2b2lkIHByZXR0eXByaW50X3RpbWUoY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgdCkKK3sKKyAgaWYgKHQgPT0gMHhmZmZmZmZmZikKKyAgICBzcHJpbnRmKGJ1ZiwgXygiaW5maW5pdGUiKSk7CisgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgeCwgcCA9IDA7CisgICAgICAgaWYgKCh4ID0gdC84NjQwMCkpCisJcCArPSBzcHJpbnRmKCZidWZbcF0sICIlZGQiLCB4KTsKKyAgICAgICBpZiAoKHggPSAodC8zNjAwKSUyNCkpCisJcCArPSBzcHJpbnRmKCZidWZbcF0sICIlZGgiLCB4KTsKKyAgICAgIGlmICgoeCA9ICh0LzYwKSU2MCkpCisJcCArPSBzcHJpbnRmKCZidWZbcF0sICIlZG0iLCB4KTsKKyAgICAgIGlmICgoeCA9IHQlNjApKQorCXAgKz0gc3ByaW50ZigmYnVmW3BdLCAiJWRzIiwgeCk7CisgICAgfQorfQorCisKKy8qIGluIG1heSBlcXVhbCBvdXQsIHdoZW4gbWF4bGVuIG1heSBiZSAtMSAoTm8gbWF4IGxlbikuICovCitpbnQgcGFyc2VfaGV4KGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsIGludCBtYXhsZW4sIAorCSAgICAgIHVuc2lnbmVkIGludCAqd2lsZGNhcmRfbWFzaywgaW50ICptYWNfdHlwZSkKK3sKKyAgaW50IG1hc2sgPSAwLCBpID0gMDsKKyAgY2hhciAqcjsKKyAgICAKKyAgaWYgKG1hY190eXBlKQorICAgICptYWNfdHlwZSA9IDA7CisgIAorICB3aGlsZSAobWF4bGVuID09IC0xIHx8IGkgPCBtYXhsZW4pCisgICAgeworICAgICAgZm9yIChyID0gaW47ICpyICE9IDAgJiYgKnIgIT0gJzonICYmICpyICE9ICctJzsgcisrKTsKKyAgICAgIGlmICgqciA9PSAwKQorCW1heGxlbiA9IGk7CisgICAgICAKKyAgICAgIGlmIChyICE9IGluICkKKwl7CisJICBpZiAoKnIgPT0gJy0nICYmIGkgPT0gMCAmJiBtYWNfdHlwZSkKKwkgICB7CisJICAgICAgKnIgPSAwOworCSAgICAgICptYWNfdHlwZSA9IHN0cnRvbChpbiwgTlVMTCwgMTYpOworCSAgICAgIG1hY190eXBlID0gTlVMTDsKKwkgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqciA9IDA7CisJICAgICAgbWFzayA9IG1hc2sgPDwgMTsKKwkgICAgICBpZiAoc3RyY21wKGluLCAiKiIpID09IDApCisJCW1hc2sgfD0gMTsKKwkgICAgICBlbHNlCisJCW91dFtpXSA9IHN0cnRvbChpbiwgTlVMTCwgMTYpOworCSAgICAgIGkrKzsKKwkgICAgfQorCX0KKyAgICAgIGluID0gcisxOworICAgIH0KKyAgCisgIGlmICh3aWxkY2FyZF9tYXNrKQorICAgICp3aWxkY2FyZF9tYXNrID0gbWFzazsKKworICByZXR1cm4gaTsKK30KKworLyogcmV0dXJuIDAgZm9yIG5vIG1hdGNoLCBvciAobm8gbWF0Y2hlZCBvY3RldHMpICsgMSAqLworaW50IG1lbWNtcF9tYXNrZWQodW5zaWduZWQgY2hhciAqYSwgdW5zaWduZWQgY2hhciAqYiwgaW50IGxlbiwgdW5zaWduZWQgaW50IG1hc2spCit7CisgIGludCBpLCBjb3VudDsKKyAgZm9yIChjb3VudCA9IDEsIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSwgbWFzayA9IG1hc2sgPj4gMSkKKyAgICBpZiAoIShtYXNrICYgMSkpCisgICAgICB7CisJaWYgKGFbaV0gPT0gYltpXSkKKwkgIGNvdW50Kys7CisJZWxzZQorCSAgcmV0dXJuIDA7CisgICAgICB9CisgIHJldHVybiBjb3VudDsKK30KKworLyogX25vdGVfIG1heSBjb3B5IGJ1ZmZlciAqLworaW50IGV4cGFuZF9idWYoc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBzaXplKQoreworICB2b2lkICpuZXc7CisKKyAgaWYgKHNpemUgPD0gKHNpemVfdClpb3YtPmlvdl9sZW4pCisgICAgcmV0dXJuIDE7CisKKyAgaWYgKCEobmV3ID0gd2hpbmVfbWFsbG9jKHNpemUpKSkKKyAgICB7CisgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBpZiAoaW92LT5pb3ZfYmFzZSkKKyAgICB7CisgICAgICBtZW1jcHkobmV3LCBpb3YtPmlvdl9iYXNlLCBpb3YtPmlvdl9sZW4pOworICAgICAgZnJlZShpb3YtPmlvdl9iYXNlKTsKKyAgICB9CisKKyAgaW92LT5pb3ZfYmFzZSA9IG5ldzsKKyAgaW92LT5pb3ZfbGVuID0gc2l6ZTsKKworICByZXR1cm4gMTsKK30KKworY2hhciAqcHJpbnRfbWFjKGNoYXIgKmJ1ZmYsIHVuc2lnbmVkIGNoYXIgKm1hYywgaW50IGxlbikKK3sKKyAgY2hhciAqcCA9IGJ1ZmY7CisgIGludCBpOworICAgCisgIGlmIChsZW4gPT0gMCkKKyAgICBzcHJpbnRmKHAsICI8bnVsbD4iKTsKKyAgZWxzZQorICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICAgIHAgKz0gc3ByaW50ZihwLCAiJS4yeCVzIiwgbWFjW2ldLCAoaSA9PSBsZW4gLSAxKSA/ICIiIDogIjoiKTsKKyAgCisgIHJldHVybiBidWZmOworfQorCit2b2lkIGJ1bXBfbWF4ZmQoaW50IGZkLCBpbnQgKm1heCkKK3sKKyAgaWYgKGZkID4gKm1heCkKKyAgICAqbWF4ID0gZmQ7Cit9CisKK2ludCByZXRyeV9zZW5kKHZvaWQpCit7CisgICBzdHJ1Y3QgdGltZXNwZWMgd2FpdGVyOworICAgaWYgKGVycm5vID09IEVBR0FJTikKKyAgICAgeworICAgICAgIHdhaXRlci50dl9zZWMgPSAwOworICAgICAgIHdhaXRlci50dl9uc2VjID0gMTAwMDA7CisgICAgICAgbmFub3NsZWVwKCZ3YWl0ZXIsIE5VTEwpOworICAgICAgIHJldHVybiAxOworICAgICB9CisgICAKKyAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgcmV0dXJuIDE7CisKKyAgIHJldHVybiAwOworfQorCitpbnQgcmVhZF93cml0ZShpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHNpemUsIGludCBydykKK3sKKyAgc3NpemVfdCBuLCBkb25lOworICAKKyAgZm9yIChkb25lID0gMDsgZG9uZSA8IHNpemU7IGRvbmUgKz0gbikKKyAgICB7CisgICAgcmV0cnk6CisgICAgICBpZiAocncpCisgICAgICAgIG4gPSByZWFkKGZkLCAmcGFja2V0W2RvbmVdLCAoc2l6ZV90KShzaXplIC0gZG9uZSkpOworICAgICAgZWxzZQorICAgICAgICBuID0gd3JpdGUoZmQsICZwYWNrZXRbZG9uZV0sIChzaXplX3QpKHNpemUgLSBkb25lKSk7CisKKyAgICAgIGlmIChuID09IDApCisgICAgICAgIHJldHVybiAwOworICAgICAgZWxzZSBpZiAobiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChyZXRyeV9zZW5kKCkgfHwgZXJybm8gPT0gRU5PTUVNIHx8IGVycm5vID09IEVOT0JVRlMpCisgICAgICAgICAgICBnb3RvIHJldHJ5OworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICByZXR1cm4gMTsKK30KKwo=