From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Rex Dieter To: git-commits@fedoraproject.org Subject: [rpms/opencv] opencv5: backport support for GStreamer 1 (#1123078) Date: Fri, 28 Aug 2026 13:30:24 GMT Message-ID: <178792382470.1.8970455005798766005.rpms-opencv-053e3d73adc3@fedoraproject.org> List-ID: X-Git-Repo: rpms/opencv X-Git-Branch: opencv5 X-Git-Rev: 053e3d73adc3de04632b6c23b2e0e1668a05ca7e QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbmN2CkJyYW5j aCA6IG9wZW5jdjUKQ29tbWl0IDogMDUzZTNkNzNhZGMzZGUwNDYzMmI2YzIzYjJlMGUxNjY4YTA1 Y2E3ZQpBdXRob3IgOiBSZXggRGlldGVyIDxyZGlldGVyQG1hdGgudW5sLmVkdT4KRGF0ZSAgIDog MjAxNC0wNy0yNVQwNzowOTo1Ni0wNTowMApTdGF0cyAgOiArMjI0Ny8tMSBpbiA2IGZpbGUocykK VVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9vcGVuY3YvYy8wNTNl M2Q3M2FkYzNkZTA0NjMyYjZjMjNiMmUwZTE2NjhhMDVjYTdlP2JyYW5jaD1vcGVuY3Y1CgpMb2c6 CmJhY2twb3J0IHN1cHBvcnQgZm9yIEdTdHJlYW1lciAxICgjMTEyMzA3OCkKCi0tLQpkaWZmIC0t Z2l0IGEvMDU1MC1ib21iLWNvbW1pdC1vZi1nc3RyZWFtZXItdmlkZW9jYXB0dXJlLWFuZC12aWRl b3dyaXRlLnBhdGNoIGIvMDU1MC1ib21iLWNvbW1pdC1vZi1nc3RyZWFtZXItdmlkZW9jYXB0dXJl LWFuZC12aWRlb3dyaXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmNkYTQxZTQKLS0tIC9kZXYvbnVsbAorKysgYi8wNTUwLWJvbWItY29tbWl0LW9mLWdzdHJlYW1l ci12aWRlb2NhcHR1cmUtYW5kLXZpZGVvd3JpdGUucGF0Y2gKQEAgLTAsMCArMSwxODQ0IEBACitk aWZmIC11cCBvcGVuY3YtMi40LjkvQ01ha2VMaXN0cy50eHQuMTAgb3BlbmN2LTIuNC45L0NNYWtl TGlzdHMudHh0CistLS0gb3BlbmN2LTIuNC45L0NNYWtlTGlzdHMudHh0LjEwCTIwMTQtMDQtMTEg MDU6MTU6MjYuMDAwMDAwMDAwIC0wNTAwCisrKysgb3BlbmN2LTIuNC45L0NNYWtlTGlzdHMudHh0 CTIwMTQtMDctMjQgMTY6MzQ6MjkuNTI4NDQwMjE3IC0wNTAwCitAQCAtMTM2LDYgKzEzNiw3IEBA IE9DVl9PUFRJT04oV0lUSF9FSUdFTiAgICAgICAgICAiSW5jbHVkZQorIE9DVl9PUFRJT04oV0lU SF9WRlcgICAgICAgICAgICAiSW5jbHVkZSBWaWRlbyBmb3IgV2luZG93cyBzdXBwb3J0IiAgICAg ICAgICAgT04gICBJRiBXSU4zMiApCisgT0NWX09QVElPTihXSVRIX0ZGTVBFRyAgICAgICAgICJJ bmNsdWRlIEZGTVBFRyBzdXBwb3J0IiAgICAgICAgICAgICAgICAgICAgICBPTiAgIElGIChOT1Qg QU5EUk9JRCBBTkQgTk9UIElPUykpCisgT0NWX09QVElPTihXSVRIX0dTVFJFQU1FUiAgICAgICJJ bmNsdWRlIEdzdHJlYW1lciBzdXBwb3J0IiAgICAgICAgICAgICAgICAgICBPTiAgIElGIChVTklY IEFORCBOT1QgQVBQTEUgQU5EIE5PVCBBTkRST0lEKSApCisrT0NWX09QVElPTihXSVRIX0dTVFJF QU1FUl8xX1ggICJJbmNsdWRlIEdzdHJlYW1lciAxLnggc3VwcG9ydCIgICAgICAgICAgICAgICBP RkYpCisgT0NWX09QVElPTihXSVRIX0dUSyAgICAgICAgICAgICJJbmNsdWRlIEdUSyBzdXBwb3J0 IiAgICAgICAgICAgICAgICAgICAgICAgICBPTiAgIElGIChVTklYIEFORCBOT1QgQVBQTEUgQU5E IE5PVCBBTkRST0lEKSApCisgT0NWX09QVElPTihXSVRIX0lNQUdFSU8gICAgICAgICJJbWFnZUlP IHN1cHBvcnQgZm9yIE9TIFgiICAgICAgICAgICAgICAgICAgICBPRkYgIElGIEFQUExFICkKKyBP Q1ZfT1BUSU9OKFdJVEhfSVBQICAgICAgICAgICAgIkluY2x1ZGUgSW50ZWwgSVBQIHN1cHBvcnQi ICAgICAgICAgICAgICAgICAgIE9GRiAgSUYgKE1TVkMgT1IgWDg2IE9SIFg4Nl82NCkgKQorQEAg LTg2MSwxMCArODYyLDEyIEBAIGVuZGlmKERFRklORUQgV0lUSF9GRk1QRUcpCisgaWYoREVGSU5F RCBXSVRIX0dTVFJFQU1FUikKKyAgIHN0YXR1cygiICAgIEdTdHJlYW1lcjoiICAgICAgSEFWRV9H U1RSRUFNRVIgICAgICBUSEVOICIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBFTFNFIE5PKQorICAgaWYoSEFWRV9HU1RSRUFNRVIpCistICAgIHN0YXR1cygiICAgICAg YmFzZToiICAgICAgICJZRVMgKHZlciAke0FMSUFTT0ZfZ3N0cmVhbWVyLWJhc2UtMC4xMF9WRVJT SU9OfSkiKQorLSAgICBzdGF0dXMoIiAgICAgIGFwcDoiICAgICAgICAiWUVTICh2ZXIgJHtBTElB U09GX2dzdHJlYW1lci1hcHAtMC4xMF9WRVJTSU9OfSkiKQorLSAgICBzdGF0dXMoIiAgICAgIHZp ZGVvOiIgICAgICAiWUVTICh2ZXIgJHtBTElBU09GX2dzdHJlYW1lci12aWRlby0wLjEwX1ZFUlNJ T059KSIpCistICBlbmRpZigpCisrICAgIHN0YXR1cygiICAgICAgYmFzZToiICAgICAgICJZRVMg KHZlciAke0dTVFJFQU1FUl9CQVNFX1ZFUlNJT059KSIpCisrICAgIHN0YXR1cygiICAgICAgdmlk ZW86IiAgICAgICJZRVMgKHZlciAke0dTVFJFQU1FUl9WSURFT19WRVJTSU9OfSkiKQorKyAgICBz dGF0dXMoIiAgICAgIGFwcDoiICAgICAgICAiWUVTICh2ZXIgJHtHU1RSRUFNRVJfQVBQX1ZFUlNJ T059KSIpCisrICAgIHN0YXR1cygiICAgICAgcmlmZjoiICAgICAgICJZRVMgKHZlciAke0dTVFJF QU1FUl9SSUZGX1ZFUlNJT059KSIpCisrICAgIHN0YXR1cygiICAgICAgcGJ1dGlsczoiICAgICJZ RVMgKHZlciAke0dTVFJFQU1FUl9QQlVUSUxTX1ZFUlNJT059KSIpCisrICBlbmRpZihIQVZFX0dT VFJFQU1FUikKKyBlbmRpZihERUZJTkVEIFdJVEhfR1NUUkVBTUVSKQorIAorIGlmKERFRklORUQg V0lUSF9PUEVOTkkpCitkaWZmIC11cCBvcGVuY3YtMi40LjkvY21ha2UvT3BlbkNWRmluZExpYnNW aWRlby5jbWFrZS4xMCBvcGVuY3YtMi40LjkvY21ha2UvT3BlbkNWRmluZExpYnNWaWRlby5jbWFr ZQorLS0tIG9wZW5jdi0yLjQuOS9jbWFrZS9PcGVuQ1ZGaW5kTGlic1ZpZGVvLmNtYWtlLjEwCTIw MTQtMDQtMTEgMDU6MTU6MjYuMDAwMDAwMDAwIC0wNTAwCisrKysgb3BlbmN2LTIuNC45L2NtYWtl L09wZW5DVkZpbmRMaWJzVmlkZW8uY21ha2UJMjAxNC0wNy0yNCAxNjozMDo1My4yNzIwODczODQg LTA1MDAKK0BAIC0xMiwxNSArMTIsNDQgQEAgZW5kaWYoV0lUSF9WRlcpCisgCisgIyAtLS0gR1N0 cmVhbWVyIC0tLQorIG9jdl9jbGVhcl92YXJzKEhBVkVfR1NUUkVBTUVSKQorLWlmKFdJVEhfR1NU UkVBTUVSKQorLSAgQ0hFQ0tfTU9EVUxFKGdzdHJlYW1lci1iYXNlLTAuMTAgSEFWRV9HU1RSRUFN RVIpCistICBpZihIQVZFX0dTVFJFQU1FUikKKy0gICAgQ0hFQ0tfTU9EVUxFKGdzdHJlYW1lci1h cHAtMC4xMCBIQVZFX0dTVFJFQU1FUikKKysjIHRyeSB0byBmaW5kIGdzdHJlYW1lciAwLjEwIGZp cnN0CisraWYoV0lUSF9HU1RSRUFNRVIgQU5EIE5PVCBXSVRIX0dTVFJFQU1FUl8xX1gpCisrICBD SEVDS19NT0RVTEUoZ3N0cmVhbWVyLWJhc2UtMC4xMCBIQVZFX0dTVFJFQU1FUl9CQVNFKQorKyAg Q0hFQ0tfTU9EVUxFKGdzdHJlYW1lci12aWRlby0wLjEwIEhBVkVfR1NUUkVBTUVSX1ZJREVPKQor KyAgQ0hFQ0tfTU9EVUxFKGdzdHJlYW1lci1hcHAtMC4xMCBIQVZFX0dTVFJFQU1FUl9BUFApCisr ICBDSEVDS19NT0RVTEUoZ3N0cmVhbWVyLXJpZmYtMC4xMCBIQVZFX0dTVFJFQU1FUl9SSUZGKQor KyAgQ0hFQ0tfTU9EVUxFKGdzdHJlYW1lci1wYnV0aWxzLTAuMTAgSEFWRV9HU1RSRUFNRVJfUEJV VElMUykKKysKKysgIGlmKEhBVkVfR1NUUkVBTUVSX0JBU0UgQU5EIEhBVkVfR1NUUkVBTUVSX1ZJ REVPIEFORCBIQVZFX0dTVFJFQU1FUl9BUFAgQU5EIEhBVkVfR1NUUkVBTUVSX1JJRkYgQU5EIEhB VkVfR1NUUkVBTUVSX1BCVVRJTFMpCisrICAgICAgc2V0KEhBVkVfR1NUUkVBTUVSIFRSVUUpCisr ICAgICAgc2V0KEdTVFJFQU1FUl9CQVNFX1ZFUlNJT04gJHtBTElBU09GX2dzdHJlYW1lci1iYXNl LTAuMTBfVkVSU0lPTn0pCisrICAgICAgc2V0KEdTVFJFQU1FUl9WSURFT19WRVJTSU9OICR7QUxJ QVNPRl9nc3RyZWFtZXItdmlkZW8tMC4xMF9WRVJTSU9OfSkKKysgICAgICBzZXQoR1NUUkVBTUVS X0FQUF9WRVJTSU9OICR7QUxJQVNPRl9nc3RyZWFtZXItYXBwLTAuMTBfVkVSU0lPTn0pCisrICAg ICAgc2V0KEdTVFJFQU1FUl9SSUZGX1ZFUlNJT04gJHtBTElBU09GX2dzdHJlYW1lci1yaWZmLTAu MTBfVkVSU0lPTn0pCisrICAgICAgc2V0KEdTVFJFQU1FUl9QQlVUSUxTX1ZFUlNJT04gJHtBTElB U09GX2dzdHJlYW1lci1wYnV0aWxzLTAuMTBfVkVSU0lPTn0pCisgICBlbmRpZigpCistICBpZihI QVZFX0dTVFJFQU1FUikKKy0gICAgQ0hFQ0tfTU9EVUxFKGdzdHJlYW1lci12aWRlby0wLjEwIEhB VkVfR1NUUkVBTUVSKQorKyAgCisrZW5kaWYoV0lUSF9HU1RSRUFNRVIgQU5EIE5PVCBXSVRIX0dT VFJFQU1FUl8xX1gpCisrCisrIyBpZiBnc3RyZWFtZXIgMC4xMCB3YXMgbm90IGZvdW5kLCBvciB3 ZSBzcGVjaWZpZWQgd2Ugd2FudGVkIDEueCwgdHJ5IHRvIGZpbmQgaXQKKytpZihXSVRIX0dTVFJF QU1FUl8xX1ggT1IgTk9UIEhBVkVfR1NUUkVBTUVSKQorKyAgI2NoZWNrIGZvciAxLngKKysgIENI RUNLX01PRFVMRShnc3RyZWFtZXItYmFzZS0xLjAgSEFWRV9HU1RSRUFNRVJfQkFTRSkKKysgIENI RUNLX01PRFVMRShnc3RyZWFtZXItdmlkZW8tMS4wIEhBVkVfR1NUUkVBTUVSX1ZJREVPKQorKyAg Q0hFQ0tfTU9EVUxFKGdzdHJlYW1lci1hcHAtMS4wIEhBVkVfR1NUUkVBTUVSX0FQUCkKKysgIENI RUNLX01PRFVMRShnc3RyZWFtZXItcmlmZi0xLjAgSEFWRV9HU1RSRUFNRVJfUklGRikKKysgIENI RUNLX01PRFVMRShnc3RyZWFtZXItcGJ1dGlscy0xLjAgSEFWRV9HU1RSRUFNRVJfUEJVVElMUykK KysgIAorKyAgaWYoSEFWRV9HU1RSRUFNRVJfQkFTRSBBTkQgSEFWRV9HU1RSRUFNRVJfVklERU8g QU5EIEhBVkVfR1NUUkVBTUVSX0FQUCBBTkQgSEFWRV9HU1RSRUFNRVJfUklGRiBBTkQgSEFWRV9H U1RSRUFNRVJfUEJVVElMUykKKysgICAgICBzZXQoSEFWRV9HU1RSRUFNRVIgVFJVRSkKKysgICAg ICBzZXQoR1NUUkVBTUVSX0JBU0VfVkVSU0lPTiAke0FMSUFTT0ZfZ3N0cmVhbWVyLWJhc2UtMS4w X1ZFUlNJT059KQorKyAgICAgIHNldChHU1RSRUFNRVJfVklERU9fVkVSU0lPTiAke0FMSUFTT0Zf Z3N0cmVhbWVyLXZpZGVvLTEuMF9WRVJTSU9OfSkKKysgICAgICBzZXQoR1NUUkVBTUVSX0FQUF9W RVJTSU9OICR7QUxJQVNPRl9nc3RyZWFtZXItYXBwLTEuMF9WRVJTSU9OfSkKKysgICAgICBzZXQo R1NUUkVBTUVSX1JJRkZfVkVSU0lPTiAke0FMSUFTT0ZfZ3N0cmVhbWVyLXJpZmYtMS4wX1ZFUlNJ T059KQorKyAgICAgIHNldChHU1RSRUFNRVJfUEJVVElMU19WRVJTSU9OICR7QUxJQVNPRl9nc3Ry ZWFtZXItcGJ1dGlscy0xLjBfVkVSU0lPTn0pCisgICBlbmRpZigpCistZW5kaWYoV0lUSF9HU1RS RUFNRVIpCisrICAKKytlbmRpZihXSVRIX0dTVFJFQU1FUl8xX1ggT1IgTk9UIEhBVkVfR1NUUkVB TUVSKQorIAorICMgLS0tIHVuaWNhcCAtLS0KKyBvY3ZfY2xlYXJfdmFycyhIQVZFX1VOSUNBUCkK K2RpZmYgLXVwIG9wZW5jdi0yLjQuOS9tb2R1bGVzL2hpZ2hndWkvc3JjL2NhcF9nc3RyZWFtZXIu Y3BwLjEwIG9wZW5jdi0yLjQuOS9tb2R1bGVzL2hpZ2hndWkvc3JjL2NhcF9nc3RyZWFtZXIuY3Bw CistLS0gb3BlbmN2LTIuNC45L21vZHVsZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAu MTAJMjAxNC0wNC0xMSAwNToxNToyNi4wMDAwMDAwMDAgLTA1MDAKKysrKyBvcGVuY3YtMi40Ljkv bW9kdWxlcy9oaWdoZ3VpL3NyYy9jYXBfZ3N0cmVhbWVyLmNwcAkyMDE0LTA3LTI0IDE2OjMwOjUz LjI3MzA4NzM3MSAtMDUwMAorQEAgLTM5LDI1ICszOSwyNyBAQAorIC8vCisgLy9NKi8KKyAKKy0v LyBBdXRob3I6IE5pbHMgSGFzbGVyIDxoYXNsZXJAbXBpLWluZi5tcGcuZGU+CistLy8KKy0vLyAg ICAgICAgIE1heC1QbGFuY2stSW5zdGl0dXQgSW5mb3JtYXRpaworLS8vCistLy8gdGhpcyBpbXBs ZW1lbnRhdGlvbiB3YXMgaW5zcGlyZWQgYnkgZ25hc2gncyBnc3RyZWFtZXIgaW50ZXJmYWNlCist CistLy8KKy0vLyB1c2UgR1N0cmVhbWVyIHRvIHJlYWQgYSB2aWRlbworLS8vCistCisrLyohCisr ICogXGZpbGUgY2FwX2dzdHJlYW1lci5jcHAKKysgKiBcYXV0aG9yIE5pbHMgSGFzbGVyIDxoYXNs ZXJAbXBpLWluZi5tcGcuZGU+CisrICogICAgICAgICBNYXgtUGxhbmNrLUluc3RpdHV0IEluZm9y bWF0aWsKKysgKiBcYXV0aG9yIERpcmsgVmFuIEhhZXJlbmJvcmdoIDx2aGRpcmtAZ21haWwuY29t PgorKyAqCisrICogXGJyaWVmIFVzZSBHU3RyZWFtZXIgdG8gcmVhZC93cml0ZSB2aWRlbworKyAq LworICNpbmNsdWRlICJwcmVjb21wLmhwcCIKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1 ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlIDxtYXA+CisgI2luY2x1ZGUgPGdzdC9nc3QuaD4KKysj aW5jbHVkZSA8Z3N0L2dzdGJ1ZmZlci5oPgorICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4K KyAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisgI2luY2x1ZGUgPGdzdC9hcHAvZ3N0 YXBwc3JjLmg+CisgI2luY2x1ZGUgPGdzdC9yaWZmL3JpZmYtbWVkaWEuaD4KKysjaW5jbHVkZSA8 Z3N0L3BidXRpbHMvZW5jb2RpbmctcHJvZmlsZS5oPgorKyNpbmNsdWRlIDxnc3QvcGJ1dGlscy9t aXNzaW5nLXBsdWdpbnMuaD4KKysvLyNpbmNsdWRlIDxnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBl ci5oPgorKworIAorICNpZmRlZiBOREVCVUcKKyAjZGVmaW5lIENWX1dBUk4obWVzc2FnZSkKK0BA IC02NSw5ICs2NywyMyBAQAorICNkZWZpbmUgQ1ZfV0FSTihtZXNzYWdlKSBmcHJpbnRmKHN0ZGVy ciwgIndhcm5pbmc6ICVzICglczolZClcbiIsIG1lc3NhZ2UsIF9fRklMRV9fLCBfX0xJTkVfXykK KyAjZW5kaWYKKyAKKysjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPiAwCisrI2RlZmluZSBDT0xPUl9F TEVNICJ2aWRlb2NvbnZlcnQiCisrI2Vsc2UKKysjZGVmaW5lIENPTE9SX0VMRU0gImZmbXBlZ2Nv bG9yc3BhY2UiCisrI2VuZGlmCisrCisrCisrdm9pZCB0b0ZyYWN0aW9uKGRvdWJsZSBkZWNpbWFs LCBkb3VibGUgJm51bWVyYXRvciwgZG91YmxlICZkZW5vbWluYXRvcik7Cisrdm9pZCBoYW5kbGVN ZXNzYWdlKEdzdEVsZW1lbnQgKiBwaXBlbGluZSk7CisrCisrCisgc3RhdGljIGN2OjpNdXRleCBn c3RfaW5pdGlhbGl6ZXJfbXV0ZXg7CisgCistY2xhc3MgZ3N0X2luaXRpYWxpemVyCisrLyohCisr ICogXGJyaWVmIFRoZSBnc3RfaW5pdGlhbGl6ZXIgY2xhc3MKKysgKiBJbml0aWFsaXplcyBnc3Ry ZWFtZXIgb25jZSBpbiB0aGUgd2hvbGUgcHJvY2VzcworKyAqL2NsYXNzIGdzdF9pbml0aWFsaXpl cgorIHsKKyBwdWJsaWM6CisgICAgIHN0YXRpYyB2b2lkIGluaXQoKQorQEAgLTgwLDkgKzk2LDE2 IEBAIHByaXZhdGU6CisgICAgIGdzdF9pbml0aWFsaXplcigpCisgICAgIHsKKyAgICAgICAgIGdz dF9pbml0KE5VTEwsIE5VTEwpOworKy8vICAgICAgICBnc3RfZGVidWdfc2V0X2FjdGl2ZShUUlVF KTsKKysvLyAgICAgICAgZ3N0X2RlYnVnX3NldF9jb2xvcmVkKFRSVUUpOworKy8vICAgICAgICBn c3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkKEdTVF9MRVZFTF9JTkZPKTsKKyAgICAgfQor IH07CisgCisrLyohCisrICogXGJyaWVmIFRoZSBDdkNhcHR1cmVfR1N0cmVhbWVyIGNsYXNzCisr ICogVXNlIEdTdHJlYW1lciB0byBjYXB0dXJlIHZpZGVvCisrICovCisgY2xhc3MgQ3ZDYXB0dXJl X0dTdHJlYW1lciA6IHB1YmxpYyBDdkNhcHR1cmUKKyB7CisgcHVibGljOgorQEAgLTEwMCwyNTkg KzEyMyw0ODYgQEAgcHVibGljOgorIHByb3RlY3RlZDoKKyAgICAgdm9pZCBpbml0KCk7CisgICAg IGJvb2wgcmVvcGVuKCk7CistICAgIHZvaWQgaGFuZGxlTWVzc2FnZSgpOworKyAgICBib29sIGlz UGlwZWxpbmVQbGF5aW5nKCk7CisrICAgIHZvaWQgc3RhcnRQaXBlbGluZSgpOworKyAgICB2b2lk IHN0b3BQaXBlbGluZSgpOworICAgICB2b2lkIHJlc3RhcnRQaXBlbGluZSgpOworLSAgICB2b2lk IHNldEZpbHRlcihjb25zdCBjaGFyKiwgaW50LCBpbnQsIGludCk7CisrICAgIHZvaWQgc2V0Rmls dGVyKGNvbnN0IGNoYXIqIHByb3AsIGludCB0eXBlLCBpbnQgdjEsIGludCB2MiA9IE5VTEwpOwor ICAgICB2b2lkIHJlbW92ZUZpbHRlcihjb25zdCBjaGFyICpmaWx0ZXIpOworLSAgICB2b2lkIHN0 YXRpYyBuZXdQYWQoR3N0RWxlbWVudCAqbXllbGVtZW50LAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR3N0UGFkICAgICAqcGFkLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3BvaW50ZXIgICAgZGF0YSk7CistICAgIEdzdEVsZW1lbnQgICAgICAgICAgICpwaXBlbGluZTsK Ky0gICAgR3N0RWxlbWVudCAgICAgICAgICAgKnVyaWRlY29kZWJpbjsKKy0gICAgR3N0RWxlbWVu dCAgICAgICAgICAgKmNvbG9yOworLSAgICBHc3RFbGVtZW50ICAgICAgICAgICAqc2luazsKKy0K Ky0gICAgR3N0QnVmZmVyICAgICAgICAgICAqYnVmZmVyOworLSAgICBHc3RDYXBzICAgICAgICAg ICAgKmNhcHM7CistICAgIElwbEltYWdlICAgICAgICAgICAqZnJhbWU7CisrICAgIHN0YXRpYyB2 b2lkIG5ld1BhZChHc3RFbGVtZW50ICpteWVsZW1lbnQsCisrICAgICAgICAgICAgICAgICAgICAg ICBHc3RQYWQgICAgICpwYWQsCisrICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICBk YXRhKTsKKysgICAgR3N0RWxlbWVudCogICBwaXBlbGluZTsKKysgICAgR3N0RWxlbWVudCogICB1 cmlkZWNvZGViaW47CisrICAgIEdzdEVsZW1lbnQqICAgY29sb3I7CisrICAgIEdzdEVsZW1lbnQq ICAgc2luazsKKysjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPiAwCisrICAgIEdzdFNhbXBsZSogICAg c2FtcGxlOworKyAgICBHc3RNYXBJbmZvKiAgIGluZm87CisrI2VuZGlmCisrICAgIEdzdEJ1ZmZl ciogICAgYnVmZmVyOworKyAgICBHc3RDYXBzKiAgICAgIGNhcHM7CisrICAgIEdzdENhcHMqICAg ICAgYnVmZmVyX2NhcHM7CisrICAgIElwbEltYWdlKiAgICAgZnJhbWU7CisgfTsKKyAKKysvKiEK KysgKiBcYnJpZWYgQ3ZDYXB0dXJlX0dTdHJlYW1lcjo6aW5pdAorKyAqIGluaXRzIHRoZSBjbGFz cworKyAqLworIHZvaWQgQ3ZDYXB0dXJlX0dTdHJlYW1lcjo6aW5pdCgpCisgeworLSAgICBwaXBl bGluZT0wOworLSAgICBmcmFtZT0wOworLSAgICBidWZmZXI9MDsKKy0gICAgZnJhbWU9MDsKKy0K KysgICAgcGlwZWxpbmUgPSBOVUxMOworKyAgICBmcmFtZSA9IE5VTEw7CisrICAgIGJ1ZmZlciA9 IE5VTEw7CisrICAgIGJ1ZmZlcl9jYXBzID0gTlVMTDsKKysjaWYgR1NUX1ZFUlNJT05fTUFKT1Ig PiAwCisrICAgIHNhbXBsZSA9IE5VTEw7CisrICAgIGluZm8gPSBuZXcgR3N0TWFwSW5mbzsKKysj ZW5kaWYKKyB9CisgCistdm9pZCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKCkK KysvKiEKKysgKiBcYnJpZWYgQ3ZDYXB0dXJlX0dTdHJlYW1lcjo6Y2xvc2UKKysgKiBDbG9zZXMg dGhlIHBpcGVsaW5lIGFuZCBkZXN0cm95cyBhbGwgaW5zdGFuY2VzCisrICovCisrdm9pZCBDdkNh cHR1cmVfR1N0cmVhbWVyOjpjbG9zZSgpCisgeworLSAgICBHc3RCdXMqIGJ1cyA9IGdzdF9lbGVt ZW50X2dldF9idXMocGlwZWxpbmUpOworLQorLSAgICB3aGlsZShnc3RfYnVzX2hhdmVfcGVuZGlu ZyhidXMpKSB7CistICAgICAgICBHc3RNZXNzYWdlKiBtc2cgPSBnc3RfYnVzX3BvcChidXMpOwor LQorLS8vICAgICAgICBwcmludGYoIkdvdCAlcyBtZXNzYWdlXG4iLCBHU1RfTUVTU0FHRV9UWVBF X05BTUUobXNnKSk7CistCistICAgICAgICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykp IHsKKy0gICAgICAgIGNhc2UgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRDoKKy0gICAgICAgICAg ICBHc3RTdGF0ZSBvbGRzdGF0ZSwgbmV3c3RhdGUsIHBlbmRzdGF0ZTsKKy0gICAgICAgICAgICBn c3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkKG1zZywgJm9sZHN0YXRlLCAmbmV3c3RhdGUs ICZwZW5kc3RhdGUpOworLS8vICAgICAgICAgICAgcHJpbnRmKCJzdGF0ZSBjaGFuZ2VkIGZyb20g JWQgdG8gJWQgKCVkKVxuIiwgb2xkc3RhdGUsIG5ld3N0YXRlLCBwZW5kc3RhdGUpOworLSAgICAg ICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjogeworLSAgICAg ICAgICAgIEdFcnJvciAqZXJyOworLSAgICAgICAgICAgIGdjaGFyICpkZWJ1ZzsKKy0gICAgICAg ICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvcihtc2csICZlcnIsICZkZWJ1Zyk7CistCistICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJHU3RyZWFtZXIgUGx1Z2luOiBFbWJlZGRlZCB2aWRl byBwbGF5YmFjayBoYWx0ZWQ7IG1vZHVsZSAlcyByZXBvcnRlZDogJXNcbiIsCistICAgICAgICAg ICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X25hbWUoR1NUX01FU1NBR0VfU1JDIChtc2cpKSwgZXJy LT5tZXNzYWdlKTsKKy0KKy0gICAgICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyKTsKKy0gICAgICAg ICAgICBnX2ZyZWUoZGVidWcpOworLQorLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0 ZShwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworLQorLSAgICAgICAgICAgIGJyZWFrOworLSAg ICAgICAgICAgIH0KKy0gICAgICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgorLS8vICAgICAgICAg ICAgQ1ZfV0FSTigiTmV0U3RyZWFtIGhhcyByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4i KTsKKy0KKy0gICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6CistLy8gICAgICAg ICAgICBDVl9XQVJOKCJ1bmhhbmRsZWQgbWVzc2FnZVxuIik7CistICAgICAgICAgICAgYnJlYWs7 CistICAgICAgICB9CisrICAgIGlmIChpc1BpcGVsaW5lUGxheWluZygpKQorKyAgICAgICAgdGhp cy0+c3RvcFBpcGVsaW5lKCk7CisgCistICAgICAgICBnc3RfbWVzc2FnZV91bnJlZihtc2cpOwor KyAgICBpZihwaXBlbGluZSkgeworKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKEdTVF9F TEVNRU5UKHBpcGVsaW5lKSwgR1NUX1NUQVRFX05VTEwpOworKyAgICAgICAgZ3N0X29iamVjdF91 bnJlZihHU1RfT0JKRUNUKHBpcGVsaW5lKSk7CisrICAgIH0KKysgICAgaWYodXJpZGVjb2RlYmlu KXsKKysgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoR1NUX09CSkVDVCh1cmlkZWNvZGViaW4pKTsK KysgICAgfQorKyAgICBpZihjb2xvcil7CisrICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKEdTVF9P QkpFQ1QoY29sb3IpKTsKKysgICAgfQorKyAgICBpZihzaW5rKXsKKysgICAgICAgIGdzdF9vYmpl Y3RfdW5yZWYoR1NUX09CSkVDVChzaW5rKSk7CisrICAgIH0KKysgICAgaWYoYnVmZmVyKQorKyAg ICAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworKyAgICBpZihmcmFtZSkgeworKyAgICAg ICAgZnJhbWUtPmltYWdlRGF0YSA9IDA7CisrICAgICAgICBjdlJlbGVhc2VJbWFnZSgmZnJhbWUp OworKyAgICB9CisrICAgIGlmKGNhcHMpeworKyAgICAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7 CisgICAgIH0KKysgICAgaWYoYnVmZmVyX2NhcHMpeworKyAgICAgICAgZ3N0X2NhcHNfdW5yZWYo YnVmZmVyX2NhcHMpOworKyAgICB9CisrI2lmIEdTVF9WRVJTSU9OX01BSk9SID4gMAorKyAgICBp ZihzYW1wbGUpeworKyAgICAgICAgZ3N0X3NhbXBsZV91bnJlZihzYW1wbGUpOworKyAgICB9Cisr I2VuZGlmCisgCistICAgIGdzdF9vYmplY3RfdW5yZWYoR1NUX09CSkVDVChidXMpKTsKKyB9Cisg CistLy8KKy0vLyBzdGFydCB0aGUgcGlwZWxpbmUsIGdyYWIgYSBidWZmZXIsIGFuZCBwYXVzZSBh Z2FpbgorLS8vCisrLyohCisrICogXGJyaWVmIEN2Q2FwdHVyZV9HU3RyZWFtZXI6OmdyYWJGcmFt ZQorKyAqIFxyZXR1cm4KKysgKiBHcmFicyBhIHNhbXBsZSBmcm9tIHRoZSBwaXBlbGluZSwgYXdh aXRpbmcgY29uc3VtYXRpb24gYnkgcmV0cmVpdmVGcmFtZS4KKysgKiBUaGUgcGlwZWxpbmUgaXMg c3RhcnRlZCBpZiBpdCB3YXMgbm90IHJ1bm5pbmcgeWV0CisrICovCisgYm9vbCBDdkNhcHR1cmVf R1N0cmVhbWVyOjpncmFiRnJhbWUoKQorIHsKKy0KKyAgICAgaWYoIXBpcGVsaW5lKQorICAgICAg ICAgcmV0dXJuIGZhbHNlOworIAorKyAgICAvLyBzdGFydCB0aGUgcGlwZWxpbmUgaWYgaXQgd2Fz IG5vdCBpbiBwbGF5aW5nIHN0YXRlIHlldAorKyAgICBpZighdGhpcy0+aXNQaXBlbGluZVBsYXlp bmcoKSkKKysgICAgICAgIHRoaXMtPnN0YXJ0UGlwZWxpbmUoKTsKKysKKysgICAgLy8gYmFpbCBv dXQgaWYgRU9TCisgICAgIGlmKGdzdF9hcHBfc2lua19pc19lb3MoR1NUX0FQUF9TSU5LKHNpbmsp KSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsKKyAKKysjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPT0g MAorICAgICBpZihidWZmZXIpCisgICAgICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZlcik7Cist ICAgIGhhbmRsZU1lc3NhZ2UoKTsKKyAKKyAgICAgYnVmZmVyID0gZ3N0X2FwcF9zaW5rX3B1bGxf YnVmZmVyKEdTVF9BUFBfU0lOSyhzaW5rKSk7CisrI2Vsc2UKKysgICAgaWYoc2FtcGxlKQorKyAg ICAgICAgZ3N0X3NhbXBsZV91bnJlZihzYW1wbGUpOworKworKyAgICBzYW1wbGUgPSBnc3RfYXBw X3NpbmtfcHVsbF9zYW1wbGUoR1NUX0FQUF9TSU5LKHNpbmspKTsKKysKKysgICAgaWYoIXNhbXBs ZSkKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysKKysgICAgYnVmZmVyID0gZ3N0X3NhbXBsZV9n ZXRfYnVmZmVyKHNhbXBsZSk7CisrI2VuZGlmCisrCisgICAgIGlmKCFidWZmZXIpCisgICAgICAg ICByZXR1cm4gZmFsc2U7CisgCisgICAgIHJldHVybiB0cnVlOworIH0KKyAKKy0vLworLS8vIGRl Y29kZSBidWZmZXIKKy0vLworKy8qIQorKyAqIFxicmllZiBDdkNhcHR1cmVfR1N0cmVhbWVyOjpy ZXRyaWV2ZUZyYW1lCisrICogXHJldHVybiBJcGxJbWFnZSBwb2ludGVyLiBbVHJhbnNmZXIgRnVs bF0KKysgKiAgUmV0cmVpdmUgdGhlIHByZXZpb3VzbHkgZ3JhYmJlZCBidWZmZXIsIGFuZCB3cmFw IGl0IGluIGFuIElQTEltYWdlIHN0cnVjdHVyZQorKyAqLworIElwbEltYWdlICogQ3ZDYXB0dXJl X0dTdHJlYW1lcjo6cmV0cmlldmVGcmFtZShpbnQpCisgeworICAgICBpZighYnVmZmVyKQorICAg ICAgICAgcmV0dXJuIDA7CisgCistICAgIGlmKCFmcmFtZSkgeworKyAgICAvL2NvbnN0cnVjdCBh IGZyYW1lIGhlYWRlciBpZiB3ZSBkaWQgbm90IGhhdmUgYW55IHlldAorKyAgICBpZighZnJhbWUp CisrICAgIHsKKyAgICAgICAgIGdpbnQgaGVpZ2h0LCB3aWR0aDsKKy0gICAgICAgIEdzdENhcHMg KmJ1ZmZfY2FwcyA9IGdzdF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsKKy0gICAgICAgIGFzc2Vy dChnc3RfY2Fwc19nZXRfc2l6ZShidWZmX2NhcHMpID09IDEpOworLSAgICAgICAgR3N0U3RydWN0 dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGJ1ZmZfY2FwcywgMCk7Cisg CisrICAgICAgICAvL3JldXNlIHRoZSBjYXBzIHB0cgorKyAgICAgICAgaWYgKGJ1ZmZlcl9jYXBz KQorKyAgICAgICAgICAgIGdzdF9jYXBzX3VucmVmKGJ1ZmZlcl9jYXBzKTsKKysKKysjaWYgR1NU X1ZFUlNJT05fTUFKT1IgPT0gMAorKyAgICAgICAgYnVmZmVyX2NhcHMgPSBnc3RfYnVmZmVyX2dl dF9jYXBzKGJ1ZmZlcik7CisrI2Vsc2UKKysgICAgICAgIGJ1ZmZlcl9jYXBzID0gZ3N0X3NhbXBs ZV9nZXRfY2FwcyhzYW1wbGUpOworKyNlbmRpZgorKyAgICAgICAgLy8gYmFpbCBvdXQgaW4gbm8g Y2FwcworKyAgICAgICAgYXNzZXJ0KGdzdF9jYXBzX2dldF9zaXplKGJ1ZmZlcl9jYXBzKSA9PSAx KTsKKysgICAgICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVj dHVyZShidWZmZXJfY2FwcywgMCk7CisrCisrICAgICAgICAvLyBiYWlsIG91dCBpZiB3aWR0aCBv ciBoZWlnaHQgYXJlIDAKKyAgICAgICAgIGlmKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0 dXJlLCAid2lkdGgiLCAmd2lkdGgpIHx8CistICAgICAgICAgICAhZ3N0X3N0cnVjdHVyZV9nZXRf aW50KHN0cnVjdHVyZSwgImhlaWdodCIsICZoZWlnaHQpKQorKyAgICAgICAgICAgICAgICAhZ3N0 X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgImhlaWdodCIsICZoZWlnaHQpKQorKyAgICAg ICAgeworKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQorKworKworKyAgICAgICAg aW50IGRlcHRoID0gMzsKKysjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPiAwCisrICAgICAgICBkZXB0 aCA9IDA7CisrICAgICAgICBjb25zdCBnY2hhciogbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25h bWUoc3RydWN0dXJlKTsKKysgICAgICAgIGNvbnN0IGdjaGFyKiBmb3JtYXQgPSBnc3Rfc3RydWN0 dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAiZm9ybWF0Iik7CisrCisrICAgICAgICBpZiAoIW5h bWUgfHwgIWZvcm1hdCkKKyAgICAgICAgICAgICByZXR1cm4gMDsKKyAKKy0gICAgICAgIGZyYW1l ID0gY3ZDcmVhdGVJbWFnZUhlYWRlcihjdlNpemUod2lkdGgsIGhlaWdodCksIElQTF9ERVBUSF84 VSwgMyk7CistICAgICAgICBnc3RfY2Fwc191bnJlZihidWZmX2NhcHMpOworKyAgICAgICAgLy8g d2Ugc3VwcG9ydCAzIHR5cGVzIG9mIGRhdGE6CisrICAgICAgICAvLyAgICAgdmlkZW8veC1yYXcs IGZvcm1hdD1CR1IgICAtPiA4Yml0LCAzIGNoYW5uZWxzCisrICAgICAgICAvLyAgICAgdmlkZW8v eC1yYXcsIGZvcm1hdD1HUkFZOCAtPiA4Yml0LCAxIGNoYW5uZWwKKysgICAgICAgIC8vICAgICB2 aWRlby94LWJheWVyICAgICAgICAgICAgIC0+IDhiaXQsIDEgY2hhbm5lbAorKyAgICAgICAgLy8g YmF5ZXIgZGF0YSBpcyBuZXZlciBkZWNvZGVkLCB0aGUgdXNlciBpcyByZXNwb25zaWJsZSBmb3Ig dGhhdAorKyAgICAgICAgLy8gZXZlcnl0aGluZyBpcyA4IGJpdCwgc28gd2UganVzdCB0ZXN0IHRo ZSBjYXBzIGZvciBiaXQgZGVwdGgKKysKKysgICAgICAgIGlmIChzdHJjYXNlY21wKG5hbWUsICJ2 aWRlby94LXJhdyIpID09IDApCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKHN0cmNhc2Vj bXAoZm9ybWF0LCAiQkdSIikgPT0gMCkgeworKyAgICAgICAgICAgICAgICBkZXB0aCA9IDM7Cisr ICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYoc3RyY2FzZWNtcChmb3JtYXQsICJH UkFZOCIpID09IDApeworKyAgICAgICAgICAgICAgICBkZXB0aCA9IDE7CisrICAgICAgICAgICAg fQorKyAgICAgICAgfQorKyAgICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChuYW1lLCAidmlkZW8v eC1iYXllciIpID09IDApCisrICAgICAgICB7CisrICAgICAgICAgICAgZGVwdGggPSAxOworKyAg ICAgICAgfQorKyNlbmRpZgorKyAgICAgICAgaWYgKGRlcHRoID4gMCkgeworKyAgICAgICAgICAg IGZyYW1lID0gY3ZDcmVhdGVJbWFnZUhlYWRlcihjdlNpemUod2lkdGgsIGhlaWdodCksIElQTF9E RVBUSF84VSwgZGVwdGgpOworKyAgICAgICAgfWVsc2V7CisrICAgICAgICAgICAgcmV0dXJuIDA7 CisrICAgICAgICB9CisgICAgIH0KKyAKKy0gICAgLy8gbm8gbmVlZCB0byBtZW1jcHksIGp1c3Qg dXNlIGdzdHJlYW1lcidzIGJ1ZmZlciA6LSkKKysgICAgLy8gZ3N0cmVhbWVyIGV4cGVjdHMgdXMg dG8gaGFuZGxlIHRoZSBtZW1vcnkgYXQgdGhpcyBwb2ludAorKyAgICAvLyBzbyB3ZSBjYW4ganVz dCB3cmFwIHRoZSByYXcgYnVmZmVyIGFuZCBiZSBkb25lIHdpdGggaXQKKysjaWYgR1NUX1ZFUlNJ T05fTUFKT1IgPT0gMAorICAgICBmcmFtZS0+aW1hZ2VEYXRhID0gKGNoYXIgKilHU1RfQlVGRkVS X0RBVEEoYnVmZmVyKTsKKy0gICAgLy9tZW1jcHkgKGZyYW1lLT5pbWFnZURhdGEsIEdTVF9CVUZG RVJfREFUQShidWZmZXIpLCBHU1RfQlVGRkVSX1NJWkUgKGJ1ZmZlcikpOworLSAgICAvL2dzdF9i dWZmZXJfdW5yZWYoYnVmZmVyKTsKKy0gICAgLy9idWZmZXIgPSAwOworKyNlbHNlCisrICAgIC8v IHRoZSBkYXRhIHB0ciBpbiBHc3RNYXBJbmZvIGlzIG9ubHkgdmFsaWQgdGhyb3VnaG91dCB0aGUg bWFwaWZvIG9iamVjdHMgbGlmZS4KKysgICAgLy8gVE9ETzogY2hlY2sgaWYgcmV1c2luZyB0aGUg bWFwaW5mbyBvYmplY3QgaXMgb2suCisrCisrICAgIGdib29sZWFuIHN1Y2Nlc3MgPSBnc3RfYnVm ZmVyX21hcChidWZmZXIsaW5mbywgKEdzdE1hcEZsYWdzKUdTVF9NQVBfUkVBRCk7CisrICAgIGlm ICghc3VjY2Vzcyl7CisrICAgICAgICAvL3NvbWV0aGluZyB3ZWlyZCB3ZW50IHdyb25nIGhlcmUu IGFib3J0LiBhYm9ydC4KKysgICAgICAgIC8vZnByaW50ZihzdGRlcnIsIkdTdHJlYW1lcjogdW5h YmxlIHRvIG1hcCBidWZmZXIiKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIGZy YW1lLT5pbWFnZURhdGEgPSAoY2hhciopaW5mby0+ZGF0YTsKKysgICAgZ3N0X2J1ZmZlcl91bm1h cChidWZmZXIsaW5mbyk7CisrI2VuZGlmCisrCisgICAgIHJldHVybiBmcmFtZTsKKyB9CisgCist dm9pZCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpyZXN0YXJ0UGlwZWxpbmUoKQorKworKy8qIQorKyAq IFxicmllZiBDdkNhcHR1cmVfR1N0cmVhbWVyOjppc1BpcGVsaW5lUGxheWluZworKyAqIFxyZXR1 cm4gaWYgdGhlIHBpcGVsaW5lIGlzIGN1cnJlbnRseSBwbGF5aW5nLgorKyAqLworK2Jvb2wgQ3ZD YXB0dXJlX0dTdHJlYW1lcjo6aXNQaXBlbGluZVBsYXlpbmcoKQorK3sKKysgICAgR3N0U3RhdGUg Y3VycmVudCwgcGVuZGluZzsKKysgICAgR3N0Q2xvY2tUaW1lIHRpbWVvdXQgPSA1KkdTVF9TRUNP TkQ7CisrICAgIGlmKCFHU1RfSVNfRUxFTUVOVChwaXBlbGluZSkpeworKyAgICAgICAgcmV0dXJu IGZhbHNlOworKyAgICB9CisrCisrICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCA9IGdzdF9l bGVtZW50X2dldF9zdGF0ZShHU1RfRUxFTUVOVChwaXBlbGluZSksJmN1cnJlbnQsICZwZW5kaW5n LCB0aW1lb3V0KTsKKysgICAgaWYgKCFyZXQpeworKyAgICAgICAgLy9mcHJpbnRmKHN0ZGVyciwg IkdTdHJlYW1lcjogdW5hYmxlIHRvIHF1ZXJ5IHBpcGVsaW5lIHN0YXRlXG4iKTsKKysgICAgICAg IHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICByZXR1cm4gY3VycmVudCA9PSBHU1RfU1RB VEVfUExBWUlORzsKKyt9CisrCisrLyohCisrICogXGJyaWVmIEN2Q2FwdHVyZV9HU3RyZWFtZXI6 OnN0YXJ0UGlwZWxpbmUKKysgKiBTdGFydCB0aGUgcGlwZWxpbmUgYnkgc2V0dGluZyBpdCB0byB0 aGUgcGxheWluZyBzdGF0ZQorKyAqLworK3ZvaWQgQ3ZDYXB0dXJlX0dTdHJlYW1lcjo6c3RhcnRQ aXBlbGluZSgpCisgeworLSAgICBDVl9GVU5DTkFNRSgiaWN2UmVzdGFydFBpcGVsaW5lIik7Cisr ICAgIENWX0ZVTkNOQU1FKCJpY3ZTdGFydFBpcGVsaW5lIik7CisgCisgICAgIF9fQkVHSU5fXzsK KyAKKy0gICAgcHJpbnRmKCJyZXN0YXJ0aW5nIHBpcGVsaW5lLCBnb2luZyB0byByZWFkeVxuIik7 CistCistICAgIGlmKGdzdF9lbGVtZW50X3NldF9zdGF0ZShHU1RfRUxFTUVOVChwaXBlbGluZSks IEdTVF9TVEFURV9SRUFEWSkgPT0KKy0gICAgICAgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7 CisrICAgIC8vZnByaW50ZihzdGRlcnIsICJyZWxpbmtlZCwgcGF1c2luZ1xuIik7CisrICAgIGlm KGdzdF9lbGVtZW50X3NldF9zdGF0ZShHU1RfRUxFTUVOVChwaXBlbGluZSksIEdTVF9TVEFURV9Q TEFZSU5HKSA9PQorKyAgICAgICAgICAgIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkgeworICAg ICAgICAgQ1ZfRVJST1IoQ1ZfU3RzRXJyb3IsICJHU3RyZWFtZXI6IHVuYWJsZSB0byBzdGFydCBw aXBlbGluZVxuIik7CisrICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHBpcGVsaW5lKTsKKyAgICAg ICAgIHJldHVybjsKKyAgICAgfQorIAorLSAgICBwcmludGYoInJlYWR5LCByZWxpbmtpbmdcbiIp OworKyAgICAvL3ByaW50Zigic3RhdGUgbm93IHBsYXlpbmdcbiIpOworKyAgICBoYW5kbGVNZXNz YWdlKHBpcGVsaW5lKTsKKysgICAgX19FTkRfXzsKKyt9CisrCisgCistICAgIGdzdF9lbGVtZW50 X3VubGluayh1cmlkZWNvZGViaW4sIGNvbG9yKTsKKy0gICAgcHJpbnRmKCJmaWx0ZXJpbmcgd2l0 aCAlc1xuIiwgZ3N0X2NhcHNfdG9fc3RyaW5nKGNhcHMpKTsKKy0gICAgZ3N0X2VsZW1lbnRfbGlu a19maWx0ZXJlZCh1cmlkZWNvZGViaW4sIGNvbG9yLCBjYXBzKTsKKysvKiEKKysgKiBcYnJpZWYg Q3ZDYXB0dXJlX0dTdHJlYW1lcjo6c3RvcFBpcGVsaW5lCisrICogU3RvcCB0aGUgcGlwZWxpbmUg Ynkgc2V0dGluZyBpdCB0byBOVUxMCisrICovCisrdm9pZCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpz dG9wUGlwZWxpbmUoKQorK3sKKysgICAgQ1ZfRlVOQ05BTUUoImljdlN0b3BQaXBlbGluZSIpOwor IAorLSAgICBwcmludGYoInJlbGlua2VkLCBwYXVzaW5nXG4iKTsKKysgICAgX19CRUdJTl9fOwor IAorLSAgICBpZihnc3RfZWxlbWVudF9zZXRfc3RhdGUoR1NUX0VMRU1FTlQocGlwZWxpbmUpLCBH U1RfU1RBVEVfUExBWUlORykgPT0KKy0gICAgICAgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7 CistICAgICAgICBDVl9FUlJPUihDVl9TdHNFcnJvciwgIkdTdHJlYW1lcjogdW5hYmxlIHRvIHN0 YXJ0IHBpcGVsaW5lXG4iKTsKKysgICAgLy9mcHJpbnRmKHN0ZGVyciwgInJlc3RhcnRpbmcgcGlw ZWxpbmUsIGdvaW5nIHRvIHJlYWR5XG4iKTsKKysgICAgaWYoZ3N0X2VsZW1lbnRfc2V0X3N0YXRl KEdTVF9FTEVNRU5UKHBpcGVsaW5lKSwgR1NUX1NUQVRFX05VTEwpID09CisrICAgICAgICAgICAg R1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7CisrICAgICAgICBDVl9FUlJPUihDVl9TdHNFcnJv ciwgIkdTdHJlYW1lcjogdW5hYmxlIHRvIHN0b3AgcGlwZWxpbmVcbiIpOworKyAgICAgICAgZ3N0 X29iamVjdF91bnJlZihwaXBlbGluZSk7CisgICAgICAgICByZXR1cm47CisgICAgIH0KKysgICAg X19FTkRfXzsKKyt9CisgCistICAgIHByaW50Zigic3RhdGUgbm93IHBhdXNlZFxuIik7CisrLyoh CisrICogXGJyaWVmIEN2Q2FwdHVyZV9HU3RyZWFtZXI6OnJlc3RhcnRQaXBlbGluZQorKyAqIFJl c3RhcnQgdGhlIHBpcGVsaW5lCisrICovCisrdm9pZCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpyZXN0 YXJ0UGlwZWxpbmUoKQorK3sKKysgICAgaGFuZGxlTWVzc2FnZShwaXBlbGluZSk7CisgCistICAg ICBfX0VORF9fOworKyAgICB0aGlzLT5zdG9wUGlwZWxpbmUoKTsKKysgICAgdGhpcy0+c3RhcnRQ aXBlbGluZSgpOworIH0KKyAKKy12b2lkIEN2Q2FwdHVyZV9HU3RyZWFtZXI6OnNldEZpbHRlcihj b25zdCBjaGFyICpwcm9wZXJ0eSwgaW50IHR5cGUsIGludCB2MSwgaW50IHYyKQorLXsKKyAKKy0g ICAgaWYoIWNhcHMpIHsKKy0gICAgICAgIGlmKHR5cGUgPT0gR19UWVBFX0lOVCkKKy0gICAgICAg ICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXctcmdiIiwgcHJvcGVy dHksIHR5cGUsIHYxLCBOVUxMKTsKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgICBjYXBzID0g Z3N0X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXctcmdiIiwgcHJvcGVydHksIHR5cGUsIHYx LCB2MiwgTlVMTCk7CistICAgIH0gZWxzZSB7CistICAgICAgICAvL3ByaW50ZigiY2FwcyBiZWZv cmUgc2V0dGluZyAlc1xuIiwgZ3N0X2NhcHNfdG9fc3RyaW5nKGNhcHMpKTsKKysvKiEKKysgKiBc YnJpZWYgQ3ZDYXB0dXJlX0dTdHJlYW1lcjo6c2V0RmlsdGVyCisrICogXHBhcmFtIHByb3AgdGhl IHByb3BlcnR5IG5hbWUKKysgKiBccGFyYW0gdHlwZSBnbGliIHByb3BlcnR5IHR5cGUKKysgKiBc cGFyYW0gdjEgdGhlIHZhbHVlCisrICogXHBhcmFtIHYyIHNlY29uZCB2YWx1ZSBvZiBwcm9wZXJ0 eSB0eXBlIHJlcXVpcmVzIGl0LCBlbHNlIE5VTEwKKysgKiBGaWx0ZXIgdGhlIG91dHB1dCBmb3Jt YXRzIGJ5IHNldHRpbmcgYXBwc2luayBjYXBzIHByb3BlcnRpZXMKKysgKi8KKyt2b2lkIEN2Q2Fw dHVyZV9HU3RyZWFtZXI6OnNldEZpbHRlcihjb25zdCBjaGFyICpwcm9wLCBpbnQgdHlwZSwgaW50 IHYxLCBpbnQgdjIpCisreworKyAgICAvL3ByaW50ZigiR1N0cmVhbWVyOiBzZXRGaWx0ZXIgXG4i KTsKKysgICAgaWYoIWNhcHMgfHwgISggR1NUX0lTX0NBUFMgKGNhcHMpICkpCisrICAgIHsKKyAg ICAgICAgIGlmKHR5cGUgPT0gR19UWVBFX0lOVCkKKy0gICAgICAgICAgICBnc3RfY2Fwc19zZXRf c2ltcGxlKGNhcHMsICJ2aWRlby94LXJhdy1yZ2IiLCBwcm9wZXJ0eSwgdHlwZSwgdjEsIE5VTEwp OworKyAgICAgICAgeworKyNpZiBHU1RfVkVSU0lPTl9NQUpPUiA9PSAwCisrICAgICAgICAgICAg Y2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3LXJnYiIsIHByb3AsIHR5cGUs IHYxLCBOVUxMKTsKKysjZWxzZQorKyAgICAgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2lt cGxlKCJ2aWRlby94LXJhdyIsImZvcm1hdCIsR19UWVBFX1NUUklORywiQkdSIiwgcHJvcCwgdHlw ZSwgdjEsIE5VTEwpOworKyNlbmRpZgorKyAgICAgICAgfQorICAgICAgICAgZWxzZQorLSAgICAg ICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUoY2FwcywgInZpZGVvL3gtcmF3LXJnYiIsIHByb3Bl cnR5LCB0eXBlLCB2MSwgdjIsIE5VTEwpOworKyAgICAgICAgeworKyNpZiBHU1RfVkVSU0lPTl9N QUpPUiA9PSAwCisrICAgICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVv L3gtcmF3LXJnYiIsIHByb3AsIHR5cGUsIHYxLCB2MiwgTlVMTCk7CisrI2Vsc2UKKysgICAgICAg ICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXciLCJmb3JtYXQiLEdf VFlQRV9TVFJJTkcsIkJHUiIsIHByb3AsIHR5cGUsIHYxLCB2MiwgTlVMTCk7CisrI2VuZGlmCisr ICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrI2lmIEdTVF9WRVJTSU9OX01B Sk9SID4gMAorKyAgICAgICAgaWYgKCEgZ3N0X2NhcHNfaXNfd3JpdGFibGUoY2FwcykpCisrICAg ICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKGNhcHMpOworKyNlbmRpZgor KyAgICAgICAgaWYodHlwZSA9PSBHX1RZUEVfSU5UKXsKKysgICAgICAgICAgICBnc3RfY2Fwc19z ZXRfc2ltcGxlKGNhcHMsIHByb3AsIHR5cGUsIHYxLCBOVUxMKTsKKysgICAgICAgIH1lbHNlewor KyAgICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUoY2FwcywgcHJvcCwgdHlwZSwgdjEsIHYy LCBOVUxMKTsKKysgICAgICAgIH0KKyAgICAgfQorIAorLSAgICByZXN0YXJ0UGlwZWxpbmUoKTsK KysjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPiAwCisrICAgIGNhcHMgPSBnc3RfY2Fwc19maXhhdGUo Y2Fwcyk7CisrI2VuZGlmCisrCisrICAgIGdzdF9hcHBfc2lua19zZXRfY2FwcyhHU1RfQVBQX1NJ Tksoc2luayksIGNhcHMpOworKyAgICAvL3ByaW50ZigiZmlsdGVyaW5nIHdpdGggJXNcbiIsIGdz dF9jYXBzX3RvX3N0cmluZyhjYXBzKSk7CisgfQorIAorKworKy8qIQorKyAqIFxicmllZiBDdkNh cHR1cmVfR1N0cmVhbWVyOjpyZW1vdmVGaWx0ZXIKKysgKiBccGFyYW0gZmlsdGVyIGZpbHRlciB0 byByZW1vdmUKKysgKiByZW1vdmUgdGhlIHNwZWNpZmllZCBmaWx0ZXIgZnJvbSB0aGUgYXBwc2lu ayB0ZW1wbGF0ZSBjYXBzCisrICovCisgdm9pZCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpyZW1vdmVG aWx0ZXIoY29uc3QgY2hhciAqZmlsdGVyKQorIHsKKyAgICAgaWYoIWNhcHMpCisgICAgICAgICBy ZXR1cm47CisgCisrI2lmIEdTVF9WRVJTSU9OX01BSk9SID4gMAorKyAgICBpZiAoISBnc3RfY2Fw c19pc193cml0YWJsZShjYXBzKSkKKysgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRh YmxlIChjYXBzKTsKKysjZW5kaWYKKysKKyAgICAgR3N0U3RydWN0dXJlICpzID0gZ3N0X2NhcHNf Z2V0X3N0cnVjdHVyZShjYXBzLCAwKTsKKyAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQo cywgZmlsdGVyKTsKKyAKKy0gICAgcmVzdGFydFBpcGVsaW5lKCk7CisrICAgIGdzdF9hcHBfc2lu a19zZXRfY2FwcyhHU1RfQVBQX1NJTksoc2luayksIGNhcHMpOworIH0KKyAKKy0KKy0vLworLS8v IGNvbm5lY3QgdXJpZGVjb2RlYmluIGR5bmFtaWNhbGx5IGNyZWF0ZWQgc291cmNlIHBhZHMgdG8g Y29sb3VyY29udmVydGVyCistLy8KKy12b2lkIEN2Q2FwdHVyZV9HU3RyZWFtZXI6Om5ld1BhZChH c3RFbGVtZW50ICogLyp1cmlkZWNvZGViaW4qLywKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdzdFBhZCAgICAgKnBhZCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2lu dGVyICAgIGRhdGEpCisrLyohCisrICogXGJyaWVmIEN2Q2FwdHVyZV9HU3RyZWFtZXI6Om5ld1Bh ZCBsaW5rIGR5bmFtaWMgcGFkZAorKyAqIFxwYXJhbSBwYWQKKysgKiBccGFyYW0gZGF0YQorKyAq IGRlY29kZWJpbiBjcmVhdGVzIHBhZHMgYmFzZWQgb24gc3RyZWFtIGluZm9ybWF0aW9uLCB3aGlj aCBpcyBub3Qga25vd24gdXBmcm9udAorKyAqIG9uIHJlY2VpdmluZyB0aGUgcGFkLWFkZGVkIHNp Z25hbCwgd2UgY29ubmVjdCBpdCB0byB0aGUgY29sb3JzcGFjZSBjb252ZXJzaW9uIGVsZW1lbnQK KysgKi8KKyt2b2lkIEN2Q2FwdHVyZV9HU3RyZWFtZXI6Om5ld1BhZChHc3RFbGVtZW50ICogLypl bGVtKi8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkICAgICAqcGFk LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgIGRhdGEpCisg eworICAgICBHc3RQYWQgKnNpbmtwYWQ7CisgICAgIEdzdEVsZW1lbnQgKmNvbG9yID0gKEdzdEVs ZW1lbnQgKikgZGF0YTsKKyAKKy0KKyAgICAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0 aWNfcGFkIChjb2xvciwgInNpbmsiKTsKKy0KKy0vLyAgcHJpbnRmKCJsaW5raW5nIGR5bmFtaWMg cGFkIHRvIGNvbG91cmNvbnZlcnRlciAlcCAlcFxuIiwgdXJpZGVjb2RlYmluLCBwYWQpOworKyAg ICBpZiAoIXNpbmtwYWQpeworKyAgICAgICAgLy9mcHJpbnRmKHN0ZGVyciwgIkdzdHJlYW1lcjog bm8gcGFkIG5hbWVkIHNpbmtcbiIpOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisgCisgICAg IGdzdF9wYWRfbGluayAocGFkLCBzaW5rcGFkKTsKKy0KKyAgICAgZ3N0X29iamVjdF91bnJlZiAo c2lua3BhZCk7CisgfQorIAorKy8qIQorKyAqIFxicmllZiBDdkNhcHR1cmVfR1N0cmVhbWVyOjpv cGVuIE9wZW4gdGhlIGdpdmVuIGZpbGUgd2l0aCBnc3RyZWFtZXIKKysgKiBccGFyYW0gdHlwZSBD dkNhcHR1cmUgdHlwZS4gT25lIG9mIENWX0NBUF9HU1RSRUFNRVJfKgorKyAqIFxwYXJhbSBmaWxl bmFtZSBGaWxlbmFtZSB0byBvcGVuIGluIGNhc2Ugb2YgQ1ZfQ0FQX0dTVFJFQU1FUl9GSUxFCisr ICogXHJldHVybiBib29sZWFuLiBTcGVjaWZpZXMgaWYgb3BlbmluZyB3YXMgc3VjY2VzZnVsLgor KyAqCisrICogSW4gY2FzZSBvZiBDVl9DQVBfR1NUUkVBTUVSX1Y0TCgyKSwgYSBwaXBlbGluIGlz IGNvbnN0cnVjdGVkIGFzIGZvbGxvd3M6CisrICogICAgdjRsMnNyYyAhIGF1dG9jb252ZXJ0ICEg YXBwc2luaworKyAqCisrICoKKysgKiBUaGUgJ2ZpbGVuYW1lJyBwYXJhbWV0ZXIgaXMgbm90IGxp bWl0ZWQgdG8gZmlsZXN5c3RlbSBwYXRocywgYW5kIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2lu ZzoKKysgKgorKyAqICAtIGEgbm9ybWFsIGZpbGVzeXN0ZW0gcGF0aDoKKysgKiAgICAgICAgZS5n LiB2aWRlby5hdmkgb3IgL3BhdGgvdG8vdmlkZW8uYXZpIG9yIEM6XFx2aWRlby5hdmkKKysgKiAg LSBhbiB1cmk6CisrICogICAgICAgIGUuZy4gZmlsZTovLy9wYXRoL3RvL3ZpZGVvLmF2aSBvciBy dHNwOi8vL3BhdGgvdG8vc3RyZWFtLmFzZgorKyAqICAtIGEgZ3N0cmVhbWVyIHBpcGVsaW5lIGRl c2NyaXB0aW9uOgorKyAqICAgICAgICBlLmcuIHZpZGVvdGVzdHNyYyAhIHZpZGVvY29udmVydCAh IGFwcHNpbmsKKysgKiAgICAgICAgdGhlIGFwcHNpbmsgbmFtZSBzaG91bGQgYmUgZWl0aGVyICdh cHBzaW5rMCcgKHRoZSBkZWZhdWx0KSBvciAnb3BlbmN2c2luaycKKysgKgorKyAqICBXaGVuIGRl YWxpbmcgd2l0aCBhIGZpbGUsIEN2Q2FwdHVyZV9HU3RyZWFtZXIgd2lsbCBub3QgZHJvcCBmcmFt ZXMgaWYgdGhlIGdyYWJiaW5nIGludGVydmFsCisrICogIGxhcmdlciB0aGFuIHRoZSBmcmFtZXJh dGUgcGVyaW9kLiAoVW5saWtlIHRoZSB1cmkgb3IgbWFudWFsIHBpcGVsaW5lIGRlc2NyaXB0aW9u LCB3aGljaCBhc3N1bWUKKysgKiAgYSBsaXZlIHNvdXJjZSkKKysgKgorKyAqICBUaGUgcGlwZWxp bmUgd2lsbCBvbmx5IGJlIHN0YXJ0ZWQgd2hlbmV2ZXIgdGhlIGZpcnN0IGZyYW1lIGlzIGdyYWJi ZWQuIFNldHRpbmcgcGlwZWxpbmUgcHJvcGVydGllcworKyAqICBpcyByZWFsbHkgc2xvdyBpZiB3 ZSBuZWVkIHRvIHJlc3RhcnQgdGhlIHBpcGVsaW5lIG92ZXIgYW5kIG92ZXIgYWdhaW4uCisrICoK KysgKiAgVE9ETzogdGhlICd0eXBlJyBwYXJhbWV0ZXIgaXMgaW1vIHVubmVlZGVkLiBmb3IgdjRs MiwgZmlsZW5hbWUgJ3Y0bDI6Ly8vZGV2L3ZpZGVvMCcgY2FuIGJlIHVzZWQuCisrICogIEkgZXhw ZWN0IHRoaXMgdG8gYmUgdGhlIHNhbWUgZm9yIENWX0NBUF9HU1RSRUFNRVJfMTM5NC4gSXMgYW55 b25lIGFjdHVhbGx5IHN0aWxsIHVzaW5nIHY0bCAodjEpPworKyAqCisrICovCisgYm9vbCBDdkNh cHR1cmVfR1N0cmVhbWVyOjpvcGVuKCBpbnQgdHlwZSwgY29uc3QgY2hhciogZmlsZW5hbWUgKQor IHsKKy0gICAgY2xvc2UoKTsKKyAgICAgQ1ZfRlVOQ05BTUUoImN2Q2FwdHVyZUZyb21DQU1fR1N0 cmVhbWVyIik7CisgCisgICAgIF9fQkVHSU5fXzsKKyAKKyAgICAgZ3N0X2luaXRpYWxpemVyOjpp bml0KCk7CisgCistLy8gICAgaWYoIWlzSW5pdGVkKSB7CistLy8gICAgICAgIHByaW50ZigiZ3N0 X2luaXRcbiIpOworLS8vICAgICAgICBnc3RfaW5pdCAoTlVMTCwgTlVMTCk7CistCistLy8gICAg ICAgIGdzdF9kZWJ1Z19zZXRfYWN0aXZlKFRSVUUpOworLS8vICAgICAgICBnc3RfZGVidWdfc2V0 X2NvbG9yZWQoVFJVRSk7CistLy8gICAgICAgIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hv bGQoR1NUX0xFVkVMX1dBUk5JTkcpOworLQorLS8vICAgICAgICBpc0luaXRlZCA9IHRydWU7Cist Ly8gICAgfQorICAgICBib29sIHN0cmVhbSA9IGZhbHNlOworICAgICBib29sIG1hbnVhbHBpcGVs aW5lID0gZmFsc2U7CisgICAgIGNoYXIgKnVyaSA9IE5VTEw7CisgICAgIHVyaWRlY29kZWJpbiA9 IE5VTEw7CistICAgIGlmKHR5cGUgIT0gQ1ZfQ0FQX0dTVFJFQU1FUl9GSUxFKSB7CistICAgICAg ICBjbG9zZSgpOworLSAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICBHc3RFbGVtZW50RmFjdG9y eSAqIHRlc3RmYWM7CisrCisrICAgIGlmICh0eXBlID09IENWX0NBUF9HU1RSRUFNRVJfVjRMKXsK KysgICAgICAgIHRlc3RmYWMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQoInY0bHNyYyIpOwor KyAgICAgICAgaWYgKCF0ZXN0ZmFjKXsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg ICAgICB9CisrICAgICAgICBnX29iamVjdF91bnJlZihHX09CSkVDVCh0ZXN0ZmFjKSk7CisrICAg ICAgICBmaWxlbmFtZSA9ICJ2NGxzcmMgISAiQ09MT1JfRUxFTSIgISBhcHBzaW5rIjsKKyAgICAg fQorKyAgICBpZiAodHlwZSA9PSBDVl9DQVBfR1NUUkVBTUVSX1Y0TDIpeworKyAgICAgICAgdGVz dGZhYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCgidjRsMnNyYyIpOworKyAgICAgICAgaWYg KCF0ZXN0ZmFjKXsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAg ICAgICBnX29iamVjdF91bnJlZihHX09CSkVDVCh0ZXN0ZmFjKSk7CisrICAgICAgICBmaWxlbmFt ZSA9ICJ2NGwyc3JjICEgIkNPTE9SX0VMRU0iICEgYXBwc2luayI7CisrICAgIH0KKysKKyAKKy0g ICAgaWYoIWdzdF91cmlfaXNfdmFsaWQoZmlsZW5hbWUpKSB7CisrICAgIC8vIHRlc3QgaWYgd2Ug aGF2ZSBhIHZhbGlkIHVyaS4gSWYgc28sIG9wZW4gaXQgd2l0aCBhbiB1cmlkZWNvZGViaW4KKysg ICAgLy8gZWxzZSwgd2UgbWlnaHQgaGF2ZSBhIGZpbGUgb3IgYSBtYW51YWwgcGlwZWxpbmUuCisr ICAgIC8vIGlmIGdzdHJlYW1lciBjYW5ub3QgcGFyc2UgdGhlIG1hbnVhbCBwaXBlbGluZSwgd2Ug YXNzdW1lIHdlIHdlcmUgZ2l2ZW4gYW5kCisrICAgIC8vIG9yZGluYXJ5IGZpbGUgcGF0aC4KKysg ICAgaWYoIWdzdF91cmlfaXNfdmFsaWQoZmlsZW5hbWUpKQorKyAgICB7CisgICAgICAgICB1cmkg PSByZWFscGF0aChmaWxlbmFtZSwgTlVMTCk7CistICAgICAgICBzdHJlYW09ZmFsc2U7CistICAg ICAgICBpZih1cmkpIHsKKysgICAgICAgIHN0cmVhbSA9IGZhbHNlOworKyAgICAgICAgaWYodXJp KQorKyAgICAgICAgeworICAgICAgICAgICAgIHVyaSA9IGdfZmlsZW5hbWVfdG9fdXJpKHVyaSwg TlVMTCwgTlVMTCk7CisgICAgICAgICAgICAgaWYoIXVyaSkgeworICAgICAgICAgICAgICAgICBD Vl9XQVJOKCJHU3RyZWFtZXI6IEVycm9yIG9wZW5pbmcgZmlsZVxuIik7CisgICAgICAgICAgICAg ICAgIGNsb3NlKCk7CisgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg ICB9CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAg ICAgeworICAgICAgICAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKKy0gICAgICAgICAgICAvL3Vy aWRlY29kZWJpbiA9IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbihmaWxlbmFtZSwgRkFM U0UsICZlcnIpOworICAgICAgICAgICAgIHVyaWRlY29kZWJpbiA9IGdzdF9wYXJzZV9sYXVuY2go ZmlsZW5hbWUsICZlcnIpOworICAgICAgICAgICAgIGlmKCF1cmlkZWNvZGViaW4pIHsKKy0gICAg ICAgICAgICAgICAgQ1ZfV0FSTigiR1N0cmVhbWVyOiBFcnJvciBvcGVuaW5nIGJpblxuIik7Cist ICAgICAgICAgICAgICAgIGNsb3NlKCk7CisrICAgICAgICAgICAgICAgIC8vZnByaW50ZihzdGRl cnIsICJHU3RyZWFtZXI6IEVycm9yIG9wZW5pbmcgYmluOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsK KysgICAgICAgICAgICAgICAgLy9jbG9zZSgpOworICAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIHN0cmVhbSA9IHRydWU7CitAQCAtMzYz LDMyICs2MTMsNzUgQEAgYm9vbCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpvcGVuKCBpbnQgdHlwZQor ICAgICAgICAgdXJpID0gZ19zdHJkdXAoZmlsZW5hbWUpOworICAgICB9CisgCistICAgIGlmKCF1 cmlkZWNvZGViaW4pIHsKKy0gICAgICAgIHVyaWRlY29kZWJpbiA9IGdzdF9lbGVtZW50X2ZhY3Rv cnlfbWFrZSAoInVyaWRlY29kZWJpbiIsIE5VTEwpOworLSAgICAgICAgZ19vYmplY3Rfc2V0KEdf T0JKRUNUKHVyaWRlY29kZWJpbiksInVyaSIsdXJpLCBOVUxMKTsKKysgICAgYm9vbCBlbGVtZW50 X2Zyb21fdXJpID0gZmFsc2U7CisrICAgIGlmKCF1cmlkZWNvZGViaW4pCisrICAgIHsKKysgICAg ICAgIC8vIEF0IHRoaXMgd3JpdGluZywgdGhlIHY0bDIgZWxlbWVudCAoYW5kIG1heWJlIG90aGVy cyB0b28pIGRvZXMgbm90IHN1cHBvcnQgY2FwcyByZW5lZ290aWF0aW9uLgorKyAgICAgICAgLy8g VGhpcyBtZWFucyB0aGF0IHdlIGNhbm5vdCB1c2UgYW4gdXJpZGVjb2RlYmluIHdoZW4gZGVhbGlu ZyB3aXRoIHY0bDIsIHNpbmNlIHNldHRpbmcKKysgICAgICAgIC8vIGNhcHR1cmUgcHJvcGVydGll cyB3aWxsIG5vdCB3b3JrLgorKyAgICAgICAgLy8gVGhlIHNvbHV0aW9uIChwcm9iYWJseSBvbmx5 IHVudGlsIGdzdHJlYW1lciAxLjIpIGlzIHRvIG1ha2UgYW4gZWxlbWVudCBmcm9tIHVyaSB3aGVu IGRlYWxpbmcgd2l0aCB2NGwyLgorKyAgICAgICAgZ2NoYXIgKiBwcm90b2NvbCA9IGdzdF91cmlf Z2V0X3Byb3RvY29sKHVyaSk7CisrICAgICAgICBpZiAoIXN0cmNhc2VjbXAocHJvdG9jb2wgLCAi djRsMiIpKQorKyAgICAgICAgeworKyNpZiBHU1RfVkVSU0lPTl9NQUpPUiA9PSAwCisrICAgICAg ICAgICAgdXJpZGVjb2RlYmluID0gZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaShHU1RfVVJJX1NS QywgdXJpLCAic3JjIik7CisrI2Vsc2UKKysgICAgICAgICAgICB1cmlkZWNvZGViaW4gPSBnc3Rf ZWxlbWVudF9tYWtlX2Zyb21fdXJpKEdTVF9VUklfU1JDLCB1cmksICJzcmMiLCBOVUxMKTsKKysj ZW5kaWYKKysgICAgICAgICAgICBlbGVtZW50X2Zyb21fdXJpID0gdHJ1ZTsKKysgICAgICAgIH1l bHNleworKyAgICAgICAgICAgIHVyaWRlY29kZWJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFr ZSAoInVyaWRlY29kZWJpbiIsIE5VTEwpOworKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChHX09C SkVDVCh1cmlkZWNvZGViaW4pLCJ1cmkiLHVyaSwgTlVMTCk7CisrICAgICAgICB9CisrICAgICAg ICBnX2ZyZWUocHJvdG9jb2wpOworKworICAgICAgICAgaWYoIXVyaWRlY29kZWJpbikgeworLSAg ICAgICAgICAgIENWX1dBUk4oIkdTdHJlYW1lcjogRmFpbGVkIHRvIGNyZWF0ZSB1cmlkZWNvZGVi aW5cbiIpOworKyAgICAgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJHU3RyZWFtZXI6IEVycm9y IG9wZW5pbmcgYmluOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKKyAgICAgICAgICAgICBjbG9zZSgp OworICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgIH0KKyAgICAgfQorIAorLSAg ICBpZihtYW51YWxwaXBlbGluZSkgeworKyAgICBpZihtYW51YWxwaXBlbGluZSkKKysgICAgewor KyNpZiBHU1RfVkVSU0lPTl9NQUpPUiA9PSAwCisgICAgICAgICBHc3RJdGVyYXRvciAqaXQgPSBn c3RfYmluX2l0ZXJhdGVfc2lua3MoR1NUX0JJTih1cmlkZWNvZGViaW4pKTsKKyAgICAgICAgIGlm KGdzdF9pdGVyYXRvcl9uZXh0KGl0LCAoZ3BvaW50ZXIgKikmc2luaykgIT0gR1NUX0lURVJBVE9S X09LKSB7CistICAgICAgICBDVl9FUlJPUihDVl9TdHNFcnJvciwgIkdTdHJlYW1lcjogY2Fubm90 IGZpbmQgYXBwc2luayBpbiBtYW51YWwgcGlwZWxpbmVcbiIpOworLSAgICAgICAgcmV0dXJuIGZh bHNlOworKyAgICAgICAgICAgIENWX0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0cmVhbWVyOiBjYW5u b3QgZmluZCBhcHBzaW5rIGluIG1hbnVhbCBwaXBlbGluZVxuIik7CisrICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOworKyAgICAgICAgfQorKyNlbHNlCisrICAgICAgICBzaW5rID0gZ3N0X2Jpbl9n ZXRfYnlfbmFtZShHU1RfQklOKHVyaWRlY29kZWJpbiksICJvcGVuY3ZzaW5rIik7CisrICAgICAg ICBpZiAoIXNpbmspeworKyAgICAgICAgICAgIHNpbmsgPSBnc3RfYmluX2dldF9ieV9uYW1lKEdT VF9CSU4odXJpZGVjb2RlYmluKSwgImFwcHNpbmswIik7CisgICAgICAgICB9CisgCistICAgIHBp cGVsaW5lID0gdXJpZGVjb2RlYmluOworLSAgICB9IGVsc2UgeworLSAgICBwaXBlbGluZSA9IGdz dF9waXBlbGluZV9uZXcgKE5VTEwpOworLQorLSAgICAgICAgY29sb3IgPSBnc3RfZWxlbWVudF9m YWN0b3J5X21ha2UoImZmbXBlZ2NvbG9yc3BhY2UiLCBOVUxMKTsKKysgICAgICAgIGlmICghc2lu ayl7CisrICAgICAgICAgICAgQ1ZfRVJST1IoQ1ZfU3RzRXJyb3IsICJHU3RyZWFtZXI6IGNhbm5v dCBmaW5kIGFwcHNpbmsgaW4gbWFudWFsIHBpcGVsaW5lXG4iKTsKKysgICAgICAgICAgICByZXR1 cm4gZmFsc2U7CisrICAgICAgICB9CisrI2VuZGlmCisrICAgICAgICBwaXBlbGluZSA9IHVyaWRl Y29kZWJpbjsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIHBpcGVsaW5lID0g Z3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7CisrICAgICAgICAvLyB2aWRlb2NvbnZlcnQgKGluIDAu MTA6IGZmbXBlZ2NvbG9yc3BhY2UpIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyB0aGUgY29ycmVjdCBj b2xvcnNwYWNlCisrICAgICAgICAvLyBjb252ZXJzaW9uIGJhc2VkIG9uIGNhcHMuCisrICAgICAg ICBjb2xvciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZShDT0xPUl9FTEVNLCBOVUxMKTsKKyAg ICAgICAgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNpbmsiLCBOVUxMKTsK KyAKKyAgICAgICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihwaXBlbGluZSksIHVyaWRlY29k ZWJpbiwgY29sb3IsIHNpbmssIE5VTEwpOworLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCh1cmlk ZWNvZGViaW4sICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLKG5ld1BhZCksIGNvbG9yKTsKKysKKysg ICAgICAgIGlmKGVsZW1lbnRfZnJvbV91cmkpIHsKKysgICAgICAgICAgICBpZighZ3N0X2VsZW1l bnRfbGluayh1cmlkZWNvZGViaW4sIGNvbG9yKSkgeworKyAgICAgICAgICAgICAgICBDVl9FUlJP UihDVl9TdHNFcnJvciwgIkdTdHJlYW1lcjogY2Fubm90IGxpbmsgY29sb3IgLT4gc2lua1xuIik7 CisrICAgICAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocGlwZWxpbmUpOworKyAgICAgICAg ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfWVsc2V7Cisr ICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdCh1cmlkZWNvZGViaW4sICJwYWQtYWRkZWQiLCBH X0NBTExCQUNLKG5ld1BhZCksIGNvbG9yKTsKKysgICAgICAgIH0KKyAKKyAgICAgICAgIGlmKCFn c3RfZWxlbWVudF9saW5rKGNvbG9yLCBzaW5rKSkgeworICAgICAgICAgICAgIENWX0VSUk9SKENW X1N0c0Vycm9yLCAiR1N0cmVhbWVyOiBjYW5ub3QgbGluayBjb2xvciAtPiBzaW5rXG4iKTsKK0BA IC0zOTcsMjY2ICs2OTAsMTMxIEBAIGJvb2wgQ3ZDYXB0dXJlX0dTdHJlYW1lcjo6b3BlbiggaW50 IHR5cGUKKyAgICAgICAgIH0KKyAgICAgfQorIAorKyAgICAvL1RPRE86IGlzIDEgc2luZ2xlIGJ1 ZmZlciByZWFsbHkgaGlnaCBlbm91Z2g/CisgICAgIGdzdF9hcHBfc2lua19zZXRfbWF4X2J1ZmZl cnMgKEdTVF9BUFBfU0lOSyhzaW5rKSwgMSk7CisgICAgIGdzdF9hcHBfc2lua19zZXRfZHJvcCAo R1NUX0FQUF9TSU5LKHNpbmspLCBzdHJlYW0pOworKyAgICAvL2RvIG5vdCBlbWl0IHNpZ25hbHM6 IGFsbCBjYWxscyB3aWxsIGJlIHN5bmNocm9ub3VzIGFuZCBibG9ja2luZworKyAgICBnc3RfYXBw X3Npbmtfc2V0X2VtaXRfc2lnbmFscyAoR1NUX0FQUF9TSU5LKHNpbmspLCBGQUxTRSk7CisrCisr I2lmIEdTVF9WRVJTSU9OX01BSk9SID09IDAKKyAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1w bGUoInZpZGVvL3gtcmF3LXJnYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJy ZWRfbWFzayIsICAgR19UWVBFX0lOVCwgMHgwMDAwRkYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJncmVlbl9tYXNrIiwgR19UWVBFX0lOVCwgMHgwMEZGMDAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJibHVlX21hc2siLCAgR19UWVBFX0lOVCwgMHhGRjAwMDAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworKyNlbHNlCisrICAgIC8v IHN1cHBvcnQgMSBhbmQgMyBjaGFubmVsIDggYml0IGRhdGEsIGFzIHdlbGwgYXMgYmF5ZXIgKGFs c28gIDEgY2hhbm5lbCwgOGJpdCkKKysgICAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nKCJ2 aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpe0JHUiwgR1JBWTh9OyB2aWRlby94LWJheWVyLGZv cm1hdD0oc3RyaW5nKXtyZ2diLGJnZ3IsZ3JiZyxnYnJnfSIpOworKyNlbmRpZgorICAgICBnc3Rf YXBwX3Npbmtfc2V0X2NhcHMoR1NUX0FQUF9TSU5LKHNpbmspLCBjYXBzKTsKKyAgICAgZ3N0X2Nh cHNfdW5yZWYoY2Fwcyk7CisgCistICAgIGlmKGdzdF9lbGVtZW50X3NldF9zdGF0ZShHU1RfRUxF TUVOVChwaXBlbGluZSksIEdTVF9TVEFURV9SRUFEWSkgPT0KKy0gICAgICAgR1NUX1NUQVRFX0NI QU5HRV9GQUlMVVJFKSB7CistICAgICAgICBDVl9XQVJOKCJHU3RyZWFtZXI6IHVuYWJsZSB0byBz ZXQgcGlwZWxpbmUgdG8gcmVhZHlcbiIpOworLSAgICAgICAgZ3N0X29iamVjdF91bnJlZihwaXBl bGluZSk7CistICAgICAgICByZXR1cm4gZmFsc2U7CistICAgIH0KKy0KKy0gICAgaWYoZ3N0X2Vs ZW1lbnRfc2V0X3N0YXRlKEdTVF9FTEVNRU5UKHBpcGVsaW5lKSwgR1NUX1NUQVRFX1BMQVlJTkcp ID09CistICAgICAgIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkgeworLSAgICAgICAgZ3N0X2Vs ZW1lbnRfc2V0X3N0YXRlKEdTVF9FTEVNRU5UKHBpcGVsaW5lKSwgR1NUX1NUQVRFX05VTEwpOwor LSAgICAgICAgQ1ZfV0FSTigiR1N0cmVhbWVyOiB1bmFibGUgdG8gc2V0IHBpcGVsaW5lIHRvIHBs YXlpbmdcbiIpOworLSAgICAgICAgZ3N0X29iamVjdF91bnJlZihwaXBlbGluZSk7CistICAgICAg ICByZXR1cm4gZmFsc2U7CistICAgIH0KKy0KKy0KKy0KKy0gICAgaGFuZGxlTWVzc2FnZSgpOwor LQorKyAgICAvL3dlIGRvIG5vdCBzdGFydCByZWNvcmRpbmcgaGVyZSBqdXN0IHlldC4KKysgICAg Ly8gdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gc2V0IGNhcHR1cmUgcHJvcGVydGllcyBmaXJz dCwgc28gc3RhcnQgcmVjb3JkaW5nIHdoZW5ldmVyIHRoZSBmaXJzdCBmcmFtZSBpcyByZXF1ZXN0 ZWQKKyAgICAgX19FTkRfXzsKKyAKKyAgICAgcmV0dXJuIHRydWU7CisgfQorIAorLS8vCistLy8K Ky0vLyBnc3RyZWFtZXIgaW1hZ2Ugc2VxdWVuY2Ugd3JpdGVyCistLy8KKy0vLworLWNsYXNzIEN2 VmlkZW9Xcml0ZXJfR1N0cmVhbWVyIDogcHVibGljIEN2VmlkZW9Xcml0ZXIKKysvKiEKKysgKiBc YnJpZWYgQ3ZDYXB0dXJlX0dTdHJlYW1lcjo6Z2V0UHJvcGVydHkgcmV0cmVpdmUgdGhlIHJlcXVl c3RlZCBwcm9wZXJ0eSBmcm9tIHRoZSBwaXBlbGluZQorKyAqIFxwYXJhbSBwcm9wSWQgcmVxdWVz dGVkIHByb3BlcnR5CisrICogXHJldHVybiBwcm9wZXJ0eSB2YWx1ZQorKyAqCisrICogVGhlcmUg YXJlIHR3byB3YXlzIHRoZSBwcm9wZXJ0aWVzIGNhbiBiZSByZXRyZWl2ZWQuIEZvciBzZWVrLWJh c2VkIHByb3BlcnRpZXMgd2UgY2FuIHF1ZXJ5IHRoZSBwaXBlbGluZS4KKysgKiBGb3IgZnJhbWUt YmFzZWQgcHJvcGVydGllcywgd2UgdXNlIHRoZSBjYXBzIG9mIHRoZSBsYXNzdCByZWNlaXZlZiBz YW1wbGUuIFRoaXMgbWVhbnMgdGhhdCBzb21lIHByb3BlcnRpZXMKKysgKiBhcmUgbm90IGF2YWls YWJsZSB1bnRpbCBhIGZpcnN0IGZyYW1lIHdhcyByZWNlaXZlZAorKyAqLworK2RvdWJsZSBDdkNh cHR1cmVfR1N0cmVhbWVyOjpnZXRQcm9wZXJ0eSggaW50IHByb3BJZCApCisgeworLXB1YmxpYzoK Ky0gICAgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXIoKSB7IGluaXQoKTsgfQorLSAgICB2aXJ0dWFs IH5DdlZpZGVvV3JpdGVyX0dTdHJlYW1lcigpIHsgY2xvc2UoKTsgfQorKyAgICBHc3RGb3JtYXQg Zm9ybWF0OworKyAgICBnaW50NjQgdmFsdWU7CisrICAgIGdib29sZWFuIHN0YXR1czsKKyAKKy0g ICAgdmlydHVhbCBib29sIG9wZW4oIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgZm91cmNjLAor LSAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGZwcywgQ3ZTaXplIGZyYW1lU2l6ZSwgYm9v bCBpc0NvbG9yICk7CistICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOworLSAgICB2aXJ0dWFsIGJv b2wgd3JpdGVGcmFtZSggY29uc3QgSXBsSW1hZ2UqIGltYWdlICk7CistcHJvdGVjdGVkOgorLSAg ICB2b2lkIGluaXQoKTsKKy0gICAgc3RkOjptYXA8aW50LCBjaGFyKj4gZW5jczsKKy0gICAgR3N0 RWxlbWVudCogc291cmNlOworLSAgICBHc3RFbGVtZW50KiBmaWxlOworLSAgICBHc3RFbGVtZW50 KiBlbmM7CistICAgIEdzdEVsZW1lbnQqIG11eDsKKy0gICAgR3N0RWxlbWVudCogY29sb3I7Cist ICAgIEdzdEJ1ZmZlciogYnVmZmVyOworLSAgICBHc3RFbGVtZW50KiBwaXBlbGluZTsKKy0gICAg aW50IGlucHV0X3BpeF9mbXQ7CistfTsKKysjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPT0gMAorKyNk ZWZpbmUgRk9STUFUICZmb3JtYXQKKysjZWxzZQorKyNkZWZpbmUgRk9STUFUIGZvcm1hdAorKyNl bmRpZgorIAorLXZvaWQgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6OmluaXQoKQorLXsKKy0gICAg ZW5jc1tDVl9GT1VSQ0MoJ0QnLCdSJywnQScsJ0MnKV09KGNoYXIqKSJkaXJhY2VuYyI7CistICAg IGVuY3NbQ1ZfRk9VUkNDKCdIJywnRicsJ1knLCdVJyldPShjaGFyKikiZmZlbmNfaHVmZnl1diI7 CistICAgIGVuY3NbQ1ZfRk9VUkNDKCdKJywnUCcsJ0UnLCdHJyldPShjaGFyKikianBlZ2VuYyI7 CistICAgIGVuY3NbQ1ZfRk9VUkNDKCdNJywnSicsJ1AnLCdHJyldPShjaGFyKikianBlZ2VuYyI7 CistICAgIGVuY3NbQ1ZfRk9VUkNDKCdNJywnUCcsJzEnLCdWJyldPShjaGFyKikibXBlZzJlbmMi OworLSAgICBlbmNzW0NWX0ZPVVJDQygnTScsJ1AnLCcyJywnVicpXT0oY2hhciopIm1wZWcyZW5j IjsKKy0gICAgZW5jc1tDVl9GT1VSQ0MoJ1QnLCdIJywnRScsJ08nKV09KGNoYXIqKSJ0aGVvcmFl bmMiOworLSAgICBlbmNzW0NWX0ZPVVJDQygnVicsJ1AnLCc4JywnMCcpXT0oY2hhciopInZwOGVu YyI7CistICAgIGVuY3NbQ1ZfRk9VUkNDKCdIJywnMicsJzYnLCc0JyldPShjaGFyKikieDI2NGVu YyI7CistICAgIGVuY3NbQ1ZfRk9VUkNDKCdYJywnMicsJzYnLCc0JyldPShjaGFyKikieDI2NGVu YyI7CistICAgIGVuY3NbQ1ZfRk9VUkNDKCdYJywnVicsJ0knLCdEJyldPShjaGFyKikieHZpZGVu YyI7CistICAgIGVuY3NbQ1ZfRk9VUkNDKCdGJywnRicsJ1knLCdVJyldPShjaGFyKikieTRtZW5j IjsKKy0gICAgLy9lbmNzW0NWX0ZPVVJDQygnSCcsJ0YnLCdZJywnVScpXT0oY2hhciopInk0bWVu YyI7CistICAgIHBpcGVsaW5lPTA7CistICAgIGJ1ZmZlcj0wOworLX0KKy12b2lkIEN2VmlkZW9X cml0ZXJfR1N0cmVhbWVyOjpjbG9zZSgpCisteworLSAgICBpZiAocGlwZWxpbmUpIHsKKy0gICAg ICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0oR1NUX0FQUF9TUkMoc291cmNlKSk7CistICAg ICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Cist ICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwaXBlbGluZSkpOworKyAgICBp ZighcGlwZWxpbmUpIHsKKysgICAgICAgIENWX1dBUk4oIkdTdHJlYW1lcjogbm8gcGlwZWxpbmUi KTsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQorLX0KKy1ib29sIEN2VmlkZW9Xcml0 ZXJfR1N0cmVhbWVyOjpvcGVuKCBjb25zdCBjaGFyICogZmlsZW5hbWUsIGludCBmb3VyY2MsCist ICAgICAgICBkb3VibGUgZnBzLCBDdlNpemUgZnJhbWVTaXplLCBib29sIGlzX2NvbG9yICkKKy17 CistICAgIENWX0ZVTkNOQU1FKCJDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6b3BlbiIpOworLQor LSAgICBfX0JFR0lOX187CistICAgIC8vYWN0dWFsbHkgZG9lc24ndCBzdXBwb3J0IGZvdXJjYyBw YXJhbWV0ZXIgYW5kIGVuY29kZSBhbiBhdmkgd2l0aCBqcGVnZW5jCistICAgIC8vd2UgbmVlZCB0 byBmaW5kIGEgY29tbW9uIGFwaSBiZXR3ZWVuIGJhY2tlbmQgdG8gc3VwcG9ydCBmb3VyY2MgZm9y IGF2aQorLSAgICAvL2J1dCBhbHNvIHRvIGNob29zZSBpbiBhIGNvbW1vbiB3YXkgY29kZWMgYW5k IGNvbnRhaW5lciBmb3JtYXQgKG9nZyxkaXJhYyxtYXRyb3NrYSkKKy0gICAgLy8gY2hlY2sgYXJn dW1lbnRzCisgCistICAgIGFzc2VydCAoZmlsZW5hbWUpOworLSAgICBhc3NlcnQgKGZwcyA+IDAp OworLSAgICBhc3NlcnQgKGZyYW1lU2l6ZS53aWR0aCA+IDAgICYmICBmcmFtZVNpemUuaGVpZ2h0 ID4gMCk7CistICAgIHN0ZDo6bWFwPGludCxjaGFyKj46Oml0ZXJhdG9yIGVuY2l0OworLSAgICBl bmNpdD1lbmNzLmZpbmQoZm91cmNjKTsKKy0gICAgaWYgKGVuY2l0PT1lbmNzLmVuZCgpKQorLSAg ICAgICAgQ1ZfRVJST1IoIENWX1N0c1Vuc3VwcG9ydGVkRm9ybWF0LCJHc3RyZWFtZXIgT3BlbmN2 IGJhY2tlbmQgZG9lc24ndCBzdXBwb3J0IHRoaXMgY29kZWMgYWN1dGFsbHkuIik7CistLy8gICAg aWYoIWlzSW5pdGVkKSB7CistLy8gICAgICAgIGdzdF9pbml0IChOVUxMLCBOVUxMKTsKKy0vLyAg ICAgICAgaXNJbml0ZWQgPSB0cnVlOworLS8vICAgIH0KKy0gICAgZ3N0X2luaXRpYWxpemVyOjpp bml0KCk7CistICAgIGNsb3NlKCk7CistICAgIHNvdXJjZT1nc3RfZWxlbWVudF9mYWN0b3J5X21h a2UoImFwcHNyYyIsTlVMTCk7CistICAgIGZpbGU9Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJm aWxlc2luayIsIE5VTEwpOworLSAgICBlbmM9Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKGVuY2l0 LT5zZWNvbmQsIE5VTEwpOworLSAgICBtdXg9Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdmlt dXgiLCBOVUxMKTsKKy0gICAgY29sb3IgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImZmbXBl Z2NvbG9yc3BhY2UiLCBOVUxMKTsKKy0gICAgaWYgKCFlbmMpCistICAgICAgICBDVl9FUlJPUigg Q1ZfU3RzVW5zdXBwb3J0ZWRGb3JtYXQsICJZb3VyIHZlcnNpb24gb2YgR3N0cmVhbWVyIGRvZXNu J3Qgc3VwcG9ydCB0aGlzIGNvZGVjIGFjdXRhbGx5IG9yIG5lZWRlZCBwbHVnaW4gbWlzc2luZy4i KTsKKy0gICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKGZpbGUpLCAibG9jYXRpb24iLCBmaWxlbmFt ZSwgTlVMTCk7CistICAgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7CistICAg IEdzdENhcHMqIGNhcHM7CistICAgIGlmIChpc19jb2xvcikgeworLSAgICAgICAgaW5wdXRfcGl4 X2ZtdD0xOworLSAgICAgICAgY2Fwcz0gZ3N0X3ZpZGVvX2Zvcm1hdF9uZXdfY2FwcyhHU1RfVklE RU9fRk9STUFUX0JHUiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnJhbWVTaXplLndpZHRoLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmcmFtZVNpemUuaGVpZ2h0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoaW50KSAoZnBzICogMTAwMCksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEwMDAsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDEsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOworLSAgICB9 CistICAgIGVsc2UgIHsKKy0gICAgICAgIGlucHV0X3BpeF9mbXQ9MDsKKy0gICAgICAgIGNhcHM9 IGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3LWdyYXkiLAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCBmcmFtZVNpemUud2lkdGgs CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5U LCBmcmFtZVNpemUuaGVpZ2h0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi ZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIGludChmcHMpLDEsCistICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJicHAiLEdfVFlQRV9JTlQsOCwKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImRlcHRoIixHX1RZUEVfSU5ULDgsCistICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworLSAgICB9CistICAgIGdzdF9hcHBfc3JjX3Nl dF9jYXBzKEdTVF9BUFBfU1JDKHNvdXJjZSksIGNhcHMpOworLSAgICBpZiAoZm91cmNjPT1DVl9G T1VSQ0NfREVGQVVMVCkgeworLSAgICAgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKHBpcGVs aW5lKSwgc291cmNlLCBjb2xvcixtdXgsIGZpbGUsIE5VTEwpOworLSAgICAgICAgaWYoIWdzdF9l bGVtZW50X2xpbmtfbWFueShzb3VyY2UsY29sb3IsZW5jLG11eCxmaWxlLE5VTEwpKSB7CistICAg ICAgICAgICAgQ1ZfRVJST1IoQ1ZfU3RzRXJyb3IsICJHU3RyZWFtZXI6IGNhbm5vdCBsaW5rIGVs ZW1lbnRzXG4iKTsKKy0gICAgICAgIH0KKy0gICAgfQorLSAgICBlbHNlIHsKKy0gICAgICAgIGdz dF9iaW5fYWRkX21hbnkoR1NUX0JJTihwaXBlbGluZSksIHNvdXJjZSwgY29sb3IsZW5jLG11eCwg ZmlsZSwgTlVMTCk7CistICAgICAgICBpZighZ3N0X2VsZW1lbnRfbGlua19tYW55KHNvdXJjZSxj b2xvcixlbmMsbXV4LGZpbGUsTlVMTCkpIHsKKy0gICAgICAgICAgICBDVl9FUlJPUihDVl9TdHNF cnJvciwgIkdTdHJlYW1lcjogY2Fubm90IGxpbmsgZWxlbWVudHNcbiIpOworLSAgICAgICAgfQor LSAgICB9CistCistCistICAgIGlmKGdzdF9lbGVtZW50X3NldF9zdGF0ZShHU1RfRUxFTUVOVChw aXBlbGluZSksIEdTVF9TVEFURV9QTEFZSU5HKSA9PQorLSAgICAgICAgR1NUX1NUQVRFX0NIQU5H RV9GQUlMVVJFKSB7CistICAgICAgICAgICAgQ1ZfRVJST1IoQ1ZfU3RzRXJyb3IsICJHU3RyZWFt ZXI6IGNhbm5vdCBwdXQgcGlwZWxpbmUgdG8gcGxheVxuIik7CistICAgIH0KKy0gICAgX19FTkRf XzsKKy0gICAgcmV0dXJuIHRydWU7CistfQorLWJvb2wgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6 OndyaXRlRnJhbWUoIGNvbnN0IElwbEltYWdlICogaW1hZ2UgKQorLXsKKy0KKy0gICAgQ1ZfRlVO Q05BTUUoIkN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyOjp3cml0ZXJGcmFtZSIpOworLQorLSAgICBf X0JFR0lOX187CistICAgIGlmIChpbnB1dF9waXhfZm10ID09IDEpIHsKKy0gICAgICAgIGlmIChp bWFnZS0+bkNoYW5uZWxzICE9IDMgfHwgaW1hZ2UtPmRlcHRoICE9IElQTF9ERVBUSF84VSkgewor LSAgICAgICAgICAgIENWX0VSUk9SKENWX1N0c1Vuc3VwcG9ydGVkRm9ybWF0LCAiY3ZXcml0ZUZy YW1lKCkgbmVlZHMgaW1hZ2VzIHdpdGggZGVwdGggPSBJUExfREVQVEhfOFUgYW5kIG5DaGFubmVs cyA9IDMuIik7CistICAgICAgICB9CistICAgIH0KKy0gICAgZWxzZSBpZiAoaW5wdXRfcGl4X2Zt dCA9PSAwKSB7CistICAgICAgICBpZiAoaW1hZ2UtPm5DaGFubmVscyAhPSAxIHx8IGltYWdlLT5k ZXB0aCAhPSBJUExfREVQVEhfOFUpIHsKKy0gICAgICAgICAgICBDVl9FUlJPUihDVl9TdHNVbnN1 cHBvcnRlZEZvcm1hdCwgImN2V3JpdGVGcmFtZSgpIG5lZWRzIGltYWdlcyB3aXRoIGRlcHRoID0g SVBMX0RFUFRIXzhVIGFuZCBuQ2hhbm5lbHMgPSAxLiIpOworLSAgICAgICAgfQorLSAgICB9Cist ICAgIGVsc2UgeworLSAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKy0gICAgfQorLSAgICBpbnQgc2l6 ZTsKKy0gICAgc2l6ZSA9IGltYWdlLT5pbWFnZVNpemU7CistICAgIGJ1ZmZlciA9IGdzdF9idWZm ZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZSk7CistICAgIC8vZ3N0X2J1ZmZlcl9zZXRfZGF0YSAoYnVm ZmVyLChndWludDgqKWltYWdlLT5pbWFnZURhdGEsIHNpemUpOworLSAgICBtZW1jcHkgKEdTVF9C VUZGRVJfREFUQShidWZmZXIpLGltYWdlLT5pbWFnZURhdGEsIHNpemUpOworLSAgICBnc3RfYXBw X3NyY19wdXNoX2J1ZmZlcihHU1RfQVBQX1NSQyhzb3VyY2UpLGJ1ZmZlcik7CistICAgIC8vZ3N0 X2J1ZmZlcl91bnJlZihidWZmZXIpOworLSAgICAvL2J1ZmZlciA9IDA7CistICAgIF9fRU5EX187 CistICAgIHJldHVybiB0cnVlOworLX0KKy1DdlZpZGVvV3JpdGVyKiBjdkNyZWF0ZVZpZGVvV3Jp dGVyX0dTdHJlYW1lcihjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGZvdXJjYywgZG91YmxlIGZw cywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3ZTaXplIGZy YW1lU2l6ZSwgaW50IGlzQ29sb3IgKQorLXsKKy0gICAgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXIq IHdydCA9IG5ldyBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjsKKy0gICAgaWYoIHdydC0+b3Blbihm aWxlbmFtZSwgZm91cmNjLCBmcHMsZnJhbWVTaXplLCBpc0NvbG9yKSkKKy0gICAgICAgIHJldHVy biB3cnQ7CistCistICAgIGRlbGV0ZSB3cnQ7CistICAgIHJldHVybiAwOworLX0KKy0KKy12b2lk IEN2Q2FwdHVyZV9HU3RyZWFtZXI6OmNsb3NlKCkKKy17CistICAgIGlmKHBpcGVsaW5lKSB7Cist ICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoR1NUX0VMRU1FTlQocGlwZWxpbmUpLCBHU1Rf U1RBVEVfTlVMTCk7CistICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKEdTVF9PQkpFQ1QocGlwZWxp bmUpKTsKKy0gICAgfQorLSAgICBpZihidWZmZXIpCistICAgICAgICBnc3RfYnVmZmVyX3VucmVm KGJ1ZmZlcik7CistICAgIGlmKGZyYW1lKSB7CistICAgICAgICBmcmFtZS0+aW1hZ2VEYXRhID0g MDsKKy0gICAgICAgIGN2UmVsZWFzZUltYWdlKCZmcmFtZSk7CistICAgIH0KKy19CistCistZG91 YmxlIEN2Q2FwdHVyZV9HU3RyZWFtZXI6OmdldFByb3BlcnR5KCBpbnQgcHJvcElkICkKKy17Cist ICAgIEdzdEZvcm1hdCBmb3JtYXQ7CistICAgIC8vR3N0UXVlcnkgcTsKKy0gICAgZ2ludDY0IHZh bHVlOworLQorLSAgICBpZighcGlwZWxpbmUpIHsKKy0gICAgICAgIENWX1dBUk4oIkdTdHJlYW1l cjogbm8gcGlwZWxpbmUiKTsKKy0gICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgfQorLQorLSAg ICBzd2l0Y2gocHJvcElkKSB7CistICAgIGNhc2UgQ1ZfQ0FQX1BST1BfUE9TX01TRUM6CistICAg ICAgICBmb3JtYXQgPSBHU1RfRk9STUFUX1RJTUU7CistICAgICAgICBpZighZ3N0X2VsZW1lbnRf cXVlcnlfcG9zaXRpb24oc2luaywgJmZvcm1hdCwgJnZhbHVlKSkgeworLSAgICAgICAgICAgIENW X1dBUk4oIkdTdHJlYW1lcjogdW5hYmxlIHRvIHF1ZXJ5IHBvc2l0aW9uIG9mIHN0cmVhbSIpOwor LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgc3dpdGNoKHByb3BJZCkgeworKyAgICBj YXNlIENWX0NBUF9QUk9QX1BPU19NU0VDOgorKyAgICAgICAgZm9ybWF0ID0gR1NUX0ZPUk1BVF9U SU1FOworKyAgICAgICAgc3RhdHVzID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24oc2luaywg Rk9STUFULCAmdmFsdWUpOworKyAgICAgICAgaWYoIXN0YXR1cykgeworKyAgICAgICAgICAgIENW X1dBUk4oIkdTdHJlYW1lcjogdW5hYmxlIHRvIHF1ZXJ5IHBvc2l0aW9uIG9mIHN0cmVhbSIpOwor KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgIH0KKyAgICAgICAgIHJldHVybiB2 YWx1ZSAqIDFlLTY7IC8vIG5hbm8gc2Vjb25kcyB0byBtaWxsaSBzZWNvbmRzCisgICAgIGNhc2Ug Q1ZfQ0FQX1BST1BfUE9TX0ZSQU1FUzoKKyAgICAgICAgIGZvcm1hdCA9IEdTVF9GT1JNQVRfREVG QVVMVDsKKy0gICAgICAgIGlmKCFnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbihzaW5rLCAmZm9y bWF0LCAmdmFsdWUpKSB7CisrICAgICAgICBzdGF0dXMgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3Np dGlvbihzaW5rLCBGT1JNQVQsICZ2YWx1ZSk7CisrICAgICAgICBpZighc3RhdHVzKSB7CisgICAg ICAgICAgICAgQ1ZfV0FSTigiR1N0cmVhbWVyOiB1bmFibGUgdG8gcXVlcnkgcG9zaXRpb24gb2Yg c3RyZWFtIik7CisgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgfQorICAgICAg ICAgcmV0dXJuIHZhbHVlOworICAgICBjYXNlIENWX0NBUF9QUk9QX1BPU19BVklfUkFUSU86Cisg ICAgICAgICBmb3JtYXQgPSBHU1RfRk9STUFUX1BFUkNFTlQ7CistICAgICAgICBpZighZ3N0X2Vs ZW1lbnRfcXVlcnlfcG9zaXRpb24ocGlwZWxpbmUsICZmb3JtYXQsICZ2YWx1ZSkpIHsKKysgICAg ICAgIHN0YXR1cyA9IGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uKHNpbmssIEZPUk1BVCwgJnZh bHVlKTsKKysgICAgICAgIGlmKCFzdGF0dXMpIHsKKyAgICAgICAgICAgICBDVl9XQVJOKCJHU3Ry ZWFtZXI6IHVuYWJsZSB0byBxdWVyeSBwb3NpdGlvbiBvZiBzdHJlYW0iKTsKKyAgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgICAgICAgICByZXR1cm4gKChkb3VibGUpIHZh bHVlKSAvIEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVg7CistICAgIGNhc2UgQ1ZfQ0FQX1BST1BfRlJB TUVfV0lEVEg6CistICAgIGNhc2UgQ1ZfQ0FQX1BST1BfRlJBTUVfSEVJR0hUOgorLSAgICBjYXNl IENWX0NBUF9QUk9QX0ZQUzoKKysgICAgY2FzZSBDVl9DQVBfUFJPUF9GUkFNRV9XSURUSDogewor KyAgICAgICAgaWYgKCFidWZmZXJfY2Fwcyl7CisrICAgICAgICAgICAgQ1ZfV0FSTigiR1N0cmVh bWVyOiB1bmFibGUgdG8gcXVlcnkgd2lkdGggb2YgZnJhbWU7IG5vIGZyYW1lIGdyYWJiZWQgeWV0 Iik7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgICAgICBHc3RTdHJ1 Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoYnVmZmVyX2NhcHMsIDAp OworKyAgICAgICAgZ2ludCB3aWR0aCA9IDA7CisrICAgICAgICBpZighZ3N0X3N0cnVjdHVyZV9n ZXRfaW50KHN0cnVjdHVyZSwgIndpZHRoIiwgJndpZHRoKSl7CisrICAgICAgICAgICAgQ1ZfV0FS TigiR1N0cmVhbWVyOiB1bmFibGUgdG8gcXVlcnkgd2lkdGggb2YgZnJhbWUiKTsKKysgICAgICAg ICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiB3aWR0aDsKKysgICAg ICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgQ1ZfQ0FQX1BST1BfRlJBTUVfSEVJR0hUOiB7 CisrICAgICAgICBpZiAoIWJ1ZmZlcl9jYXBzKXsKKysgICAgICAgICAgICBDVl9XQVJOKCJHU3Ry ZWFtZXI6IHVuYWJsZSB0byBxdWVyeSBoZWlnaHQgb2YgZnJhbWU7IG5vIGZyYW1lIGdyYWJiZWQg eWV0Iik7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgICAgICBHc3RT dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoYnVmZmVyX2NhcHMs IDApOworKyAgICAgICAgZ2ludCBoZWlnaHQgPSAwOworKyAgICAgICAgaWYoIWdzdF9zdHJ1Y3R1 cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJoZWlnaHQiLCAmaGVpZ2h0KSl7CisrICAgICAgICAgICAg Q1ZfV0FSTigiR1N0cmVhbWVyOiB1bmFibGUgdG8gcXVlcnkgaGVpZ2h0IG9mIGZyYW1lIik7Cisr ICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gaGVpZ2h0 OworKyAgICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSBDVl9DQVBfUFJPUF9GUFM6IHsK KysgICAgICAgIGlmICghYnVmZmVyX2NhcHMpeworKyAgICAgICAgICAgIENWX1dBUk4oIkdTdHJl YW1lcjogdW5hYmxlIHRvIHF1ZXJ5IGZyYW1lcmF0ZSBvZiBzdHJlYW07IG5vIGZyYW1lIGdyYWJi ZWQgeWV0Iik7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgICAgICBH c3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoYnVmZmVyX2Nh cHMsIDApOworKyAgICAgICAgZ2ludCBudW0gPSAwLCBkZW5vbT0xOworKyAgICAgICAgaWYoIWdz dF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uKHN0cnVjdHVyZSwgImZyYW1lcmF0ZSIsICZudW0sICZk ZW5vbSkpeworKyAgICAgICAgICAgIENWX1dBUk4oIkdTdHJlYW1lcjogdW5hYmxlIHRvIHF1ZXJ5 IGZyYW1lcmF0ZSBvZiBzdHJlYW0iKTsKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAg IH0KKysgICAgICAgIHJldHVybiAoZG91YmxlKW51bS8oZG91YmxlKWRlbm9tOworKyAgICAgICAg YnJlYWs7CisrICAgIH0KKyAgICAgY2FzZSBDVl9DQVBfUFJPUF9GT1VSQ0M6CisgICAgICAgICBi cmVhazsKKyAgICAgY2FzZSBDVl9DQVBfUFJPUF9GUkFNRV9DT1VOVDoKKyAgICAgICAgIGZvcm1h dCA9IEdTVF9GT1JNQVRfREVGQVVMVDsKKy0gICAgICAgIGlmKCFnc3RfZWxlbWVudF9xdWVyeV9k dXJhdGlvbihwaXBlbGluZSwgJmZvcm1hdCwgJnZhbHVlKSkgeworKyAgICAgICAgc3RhdHVzID0g Z3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24oc2luaywgRk9STUFULCAmdmFsdWUpOworKyAgICAg ICAgaWYoIXN0YXR1cykgeworICAgICAgICAgICAgIENWX1dBUk4oIkdTdHJlYW1lcjogdW5hYmxl IHRvIHF1ZXJ5IHBvc2l0aW9uIG9mIHN0cmVhbSIpOworICAgICAgICAgICAgIHJldHVybiBmYWxz ZTsKKyAgICAgICAgIH0KK0BAIC02NzIsMjAgKzgzMCwzMSBAQCBkb3VibGUgQ3ZDYXB0dXJlX0dT dHJlYW1lcjo6Z2V0UHJvcGVydHkoCisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSBDVl9DQVBf R1NUUkVBTUVSX1FVRVVFX0xFTkdUSDoKKyAgICAgICAgIGlmKCFzaW5rKSB7CistICAgICAgICAg ICAgICAgIENWX1dBUk4oIkdTdHJlYW1lcjogdGhlcmUgaXMgbm8gc2luayB5ZXQiKTsKKy0gICAg ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIENWX1dBUk4oIkdTdHJlYW1l cjogdGhlcmUgaXMgbm8gc2luayB5ZXQiKTsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg ICAgICAgICB9CisgICAgICAgICByZXR1cm4gZ3N0X2FwcF9zaW5rX2dldF9tYXhfYnVmZmVycyhH U1RfQVBQX1NJTksoc2luaykpOworICAgICBkZWZhdWx0OgorICAgICAgICAgQ1ZfV0FSTigiR1N0 cmVhbWVyOiB1bmhhbmRsZWQgcHJvcGVydHkiKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9Cisr CisrI3VuZGVmIEZPUk1BVAorKworICAgICByZXR1cm4gZmFsc2U7CisgfQorIAorKy8qIQorKyAq IFxicmllZiBDdkNhcHR1cmVfR1N0cmVhbWVyOjpzZXRQcm9wZXJ0eQorKyAqIFxwYXJhbSBwcm9w SWQKKysgKiBccGFyYW0gdmFsdWUKKysgKiBccmV0dXJuIHN1Y2Nlc3MKKysgKiBTZXRzIHRoZSBk ZXNpcmVkIHByb3BlcnR5IGlkIHdpdGggdmFsLiBJZiB0aGUgcGlwZWxpbmUgaXMgcnVubmluZywK KysgKiBpdCBpcyBicmllZmx5IHN0b3BwZWQgYW5kIHN0YXJ0ZWQgYWdhaW4gYWZ0ZXIgdGhlIHBy b3BlcnR5IHdhcyBzZXQKKysgKi8KKyBib29sIEN2Q2FwdHVyZV9HU3RyZWFtZXI6OnNldFByb3Bl cnR5KCBpbnQgcHJvcElkLCBkb3VibGUgdmFsdWUgKQorIHsKKy0gICAgICAgR3N0Rm9ybWF0IGZv cm1hdDsKKysgICAgR3N0Rm9ybWF0IGZvcm1hdDsKKyAgICAgR3N0U2Vla0ZsYWdzIGZsYWdzOwor IAorICAgICBpZighcGlwZWxpbmUpIHsKK0BAIC02OTMsMTIgKzg2MiwxNyBAQCBib29sIEN2Q2Fw dHVyZV9HU3RyZWFtZXI6OnNldFByb3BlcnR5KCBpCisgICAgICAgICByZXR1cm4gZmFsc2U7Cisg ICAgIH0KKyAKKysgICAgYm9vbCB3YXNQbGF5aW5nID0gdGhpcy0+aXNQaXBlbGluZVBsYXlpbmco KTsKKysgICAgaWYgKHdhc1BsYXlpbmcpCisrICAgICAgICB0aGlzLT5zdG9wUGlwZWxpbmUoKTsK KysKKysKKyAgICAgc3dpdGNoKHByb3BJZCkgeworICAgICBjYXNlIENWX0NBUF9QUk9QX1BPU19N U0VDOgorICAgICAgICAgZm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOworICAgICAgICAgZmxhZ3Mg PSAoR3N0U2Vla0ZsYWdzKSAoR1NUX1NFRUtfRkxBR19GTFVTSHxHU1RfU0VFS19GTEFHX0FDQ1VS QVRFKTsKKyAgICAgICAgIGlmKCFnc3RfZWxlbWVudF9zZWVrX3NpbXBsZShHU1RfRUxFTUVOVChw aXBlbGluZSksIGZvcm1hdCwKKy0gICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgKGdpbnQ2 NCkgKHZhbHVlICogR1NUX01TRUNPTkQpKSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZsYWdzLCAoZ2ludDY0KSAodmFsdWUgKiBHU1RfTVNFQ09ORCkpKSB7CisgICAg ICAgICAgICAgQ1ZfV0FSTigiR1N0cmVhbWVyOiB1bmFibGUgdG8gc2VlayIpOworICAgICAgICAg fQorICAgICAgICAgYnJlYWs7CitAQCAtNzA2LDcgKzg4MCw3IEBAIGJvb2wgQ3ZDYXB0dXJlX0dT dHJlYW1lcjo6c2V0UHJvcGVydHkoIGkKKyAgICAgICAgIGZvcm1hdCA9IEdTVF9GT1JNQVRfREVG QVVMVDsKKyAgICAgICAgIGZsYWdzID0gKEdzdFNlZWtGbGFncykgKEdTVF9TRUVLX0ZMQUdfRkxV U0h8R1NUX1NFRUtfRkxBR19BQ0NVUkFURSk7CisgICAgICAgICBpZighZ3N0X2VsZW1lbnRfc2Vl a19zaW1wbGUoR1NUX0VMRU1FTlQocGlwZWxpbmUpLCBmb3JtYXQsCistICAgICAgICAgICAgICAg ICAgICAgICAgZmxhZ3MsIChnaW50NjQpIHZhbHVlKSkgeworKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZsYWdzLCAoZ2ludDY0KSB2YWx1ZSkpIHsKKyAgICAgICAgICAgICBD Vl9XQVJOKCJHU3RyZWFtZXI6IHVuYWJsZSB0byBzZWVrIik7CisgICAgICAgICB9CisgICAgICAg ICBicmVhazsKK0BAIC03MTQsNyArODg4LDcgQEAgYm9vbCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpz ZXRQcm9wZXJ0eSggaQorICAgICAgICAgZm9ybWF0ID0gR1NUX0ZPUk1BVF9QRVJDRU5UOworICAg ICAgICAgZmxhZ3MgPSAoR3N0U2Vla0ZsYWdzKSAoR1NUX1NFRUtfRkxBR19GTFVTSHxHU1RfU0VF S19GTEFHX0FDQ1VSQVRFKTsKKyAgICAgICAgIGlmKCFnc3RfZWxlbWVudF9zZWVrX3NpbXBsZShH U1RfRUxFTUVOVChwaXBlbGluZSksIGZvcm1hdCwKKy0gICAgICAgICAgICAgICAgICAgICAgICBm bGFncywgKGdpbnQ2NCkgKHZhbHVlICogR1NUX0ZPUk1BVF9QRVJDRU5UX01BWCkpKSB7CisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIChnaW50NjQpICh2YWx1ZSAq IEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVgpKSkgeworICAgICAgICAgICAgIENWX1dBUk4oIkdTdHJl YW1lcjogdW5hYmxlIHRvIHNlZWsiKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAg LTczMiwxNSArOTA2LDkgQEAgYm9vbCBDdkNhcHR1cmVfR1N0cmVhbWVyOjpzZXRQcm9wZXJ0eSgg aQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgQ1ZfQ0FQX1BST1BfRlBTOgorICAgICAgICAg aWYodmFsdWUgPiAwKSB7CistICAgICAgICAgICAgaW50IG51bSwgZGVub207CistICAgICAgICAg ICAgbnVtID0gKGludCkgdmFsdWU7CistICAgICAgICAgICAgaWYodmFsdWUgIT0gbnVtKSB7IC8v IEZJWE1FIHRoaXMgc3VwcG9ydHMgb25seSBmcmFjdGlvbnMgeC8xIGFuZCB4LzIKKy0gICAgICAg ICAgICAgICAgbnVtID0gKGludCkgKHZhbHVlICogMik7CistICAgICAgICAgICAgICAgIGRlbm9t ID0gMjsKKy0gICAgICAgICAgICB9IGVsc2UKKy0gICAgICAgICAgICAgICAgZGVub20gPSAxOwor LQorLSAgICAgICAgICAgIHNldEZpbHRlcigiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04s IG51bSwgZGVub20pOworKyAgICAgICAgICAgIGRvdWJsZSBudW09MCwgZGVub20gPSAxOworKyAg ICAgICAgICAgIHRvRnJhY3Rpb24odmFsdWUsIG51bSwgIGRlbm9tKTsKKysgICAgICAgICAgICBz ZXRGaWx0ZXIoImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCB2YWx1ZSwgZGVub20pOwor ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgcmVtb3ZlRmlsdGVyKCJmcmFtZXJhdGUiKTsK KyAgICAgICAgIGJyZWFrOworQEAgLTc2Myw4ICs5MzEsMTkgQEAgYm9vbCBDdkNhcHR1cmVfR1N0 cmVhbWVyOjpzZXRQcm9wZXJ0eSggaQorICAgICBkZWZhdWx0OgorICAgICAgICAgQ1ZfV0FSTigi R1N0cmVhbWVyOiB1bmhhbmRsZWQgcHJvcGVydHkiKTsKKyAgICAgfQorKworKyAgICBpZiAod2Fz UGxheWluZykKKysgICAgICAgIHRoaXMtPnN0YXJ0UGlwZWxpbmUoKTsKKysKKyAgICAgcmV0dXJu IGZhbHNlOworIH0KKysKKysvKiEKKysgKiBcYnJpZWYgY3ZDcmVhdGVDYXB0dXJlX0dTdHJlYW1l cgorKyAqIFxwYXJhbSB0eXBlCisrICogXHBhcmFtIGZpbGVuYW1lCisrICogXHJldHVybgorKyAq LworIEN2Q2FwdHVyZSogY3ZDcmVhdGVDYXB0dXJlX0dTdHJlYW1lcihpbnQgdHlwZSwgY29uc3Qg Y2hhciogZmlsZW5hbWUgKQorIHsKKyAgICAgQ3ZDYXB0dXJlX0dTdHJlYW1lciogY2FwdHVyZSA9 IG5ldyBDdkNhcHR1cmVfR1N0cmVhbWVyOworQEAgLTc3NSwzICs5NTQsNDk4IEBAIEN2Q2FwdHVy ZSogY3ZDcmVhdGVDYXB0dXJlX0dTdHJlYW1lcihpbnQKKyAgICAgZGVsZXRlIGNhcHR1cmU7Cisg ICAgIHJldHVybiAwOworIH0KKysKKysKKysvKiEKKysgKiBcYnJpZWYgVGhlIEN2VmlkZW9Xcml0 ZXJfR1N0cmVhbWVyIGNsYXNzCisrICogVXNlIEdzdHJlYW1lciB0byB3cml0ZSB2aWRlbworKyAq LworK2NsYXNzIEN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyIDogcHVibGljIEN2VmlkZW9Xcml0ZXIK Kyt7CisrcHVibGljOgorKyAgICBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcigpIHsgaW5pdCgpOyB9 CisrICAgIHZpcnR1YWwgfkN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyKCkgeyBjbG9zZSgpOyB9Cisr CisrICAgIHZpcnR1YWwgYm9vbCBvcGVuKCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGZvdXJj YywKKysgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBmcHMsIEN2U2l6ZSBmcmFtZVNpemUs IGJvb2wgaXNDb2xvciApOworKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKKysgICAgdmlydHVh bCBib29sIHdyaXRlRnJhbWUoIGNvbnN0IElwbEltYWdlKiBpbWFnZSApOworK3Byb3RlY3RlZDoK KysgICAgdm9pZCBpbml0KCk7CisrICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lVG9NaW1ldHlwZShj b25zdCBjaGFyKiBmaWxlbmFtZSk7CisrICAgIEdzdEVsZW1lbnQqIHBpcGVsaW5lOworKyAgICBH c3RFbGVtZW50KiBzb3VyY2U7CisrICAgIEdzdEVsZW1lbnQqIGVuY29kZWJpbjsKKysgICAgR3N0 RWxlbWVudCogZmlsZTsKKysKKysgICAgR3N0QnVmZmVyKiBidWZmZXI7CisrICAgIGludCBpbnB1 dF9waXhfZm10OworKyAgICBpbnQgbnVtX2ZyYW1lczsKKysgICAgZG91YmxlIGZyYW1lcmF0ZTsK Kyt9OworKworKy8qIQorKyAqIFxicmllZiBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6aW5pdAor KyAqIGluaXRpYWxpc2UgYWxsIHZhcmlhYmxlcworKyAqLworK3ZvaWQgQ3ZWaWRlb1dyaXRlcl9H U3RyZWFtZXI6OmluaXQoKQorK3sKKysgICAgcGlwZWxpbmUgPSBOVUxMOworKyAgICBzb3VyY2Ug PSBOVUxMOworKyAgICBlbmNvZGViaW4gPSBOVUxMOworKyAgICBmaWxlID0gTlVMTDsKKysgICAg YnVmZmVyID0gTlVMTDsKKysKKysgICAgbnVtX2ZyYW1lcyA9IDA7CisrICAgIGZyYW1lcmF0ZSA9 IDA7CisrfQorKworKy8qIQorKyAqIFxicmllZiBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6Y2xv c2UKKysgKiBlbmRzIHRoZSBwaXBlbGluZSBieSBzZW5kaW5nIEVPUyBhbmQgZGVzdHJveXMgdGhl IHBpcGVsaW5lIGFuZCBhbGwKKysgKiBlbGVtZW50cyBhZnRlcndhcmRzCisrICovCisrdm9pZCBD dlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6Y2xvc2UoKQorK3sKKysgICAgaWYgKHBpcGVsaW5lKSB7 CisrICAgICAgICBHc3RGbG93UmV0dXJuIHJldDsKKysgICAgICAgIHJldCA9IGdzdF9hcHBfc3Jj X2VuZF9vZl9zdHJlYW0oR1NUX0FQUF9TUkMoc291cmNlKSk7CisrCisrICAgICAgICAvL3dhaXQg Zm9yIEVPUyB0byB0cmlja2xlIGRvd24gdGhlIHBpcGVsaW5lLiBUaGlzIHdpbGwgbGV0IGFsbCBl bGVtZW50cyBmaW5pc2ggcHJvcGVybHkKKysgICAgICAgIEdzdEJ1cyogYnVzID0gZ3N0X2VsZW1l bnRfZ2V0X2J1cyhwaXBlbGluZSk7CisrICAgICAgICBHc3RNZXNzYWdlICptc2cgPSBnc3RfYnVz X3RpbWVkX3BvcF9maWx0ZXJlZChidXMsIEdTVF9DTE9DS19USU1FX05PTkUsIChHc3RNZXNzYWdl VHlwZSkoR1NUX01FU1NBR0VfRVJST1IgfCBHU1RfTUVTU0FHRV9FT1MpKTsKKysgICAgICAgIGlm KG1zZyAhPSBOVUxMKXsKKysgICAgICAgICAgICBnc3RfbWVzc2FnZV91bnJlZihtc2cpOworKyAg ICAgICAgICAgIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKGJ1cykpOworKyAgICAgICAgfQorKwor KyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwp OworKyAgICAgICAgaGFuZGxlTWVzc2FnZShwaXBlbGluZSk7CisrCisrICAgICAgICBnc3Rfb2Jq ZWN0X3VucmVmIChHU1RfT0JKRUNUIChwaXBlbGluZSkpOworKyAgICB9CisrfQorKworKworKy8q IQorKyAqIFxicmllZiBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6ZmlsZW5hbWVUb01pbWV0eXBl CisrICogXHBhcmFtIGZpbGVuYW1lCisrICogXHJldHVybiBtaW1ldHlwZQorKyAqIFJlc3R1cm5z IGEgY29udGFpbmVyIG1pbWUgdHlwZSBmb3IgYSBnaXZlbiBmaWxlbmFtZSBieSBsb29raW5nIGF0 IGl0J3MgZXh0ZW5zaW9uCisrICovCisrY29uc3QgY2hhciogQ3ZWaWRlb1dyaXRlcl9HU3RyZWFt ZXI6OmZpbGVuYW1lVG9NaW1ldHlwZShjb25zdCBjaGFyICpmaWxlbmFtZSkKKyt7CisrICAgIC8v Z2V0IGV4dGVuc2lvbgorKyAgICBjb25zdCBjaGFyICpleHQgPSBzdHJyY2hyKGZpbGVuYW1lLCAn LicpOworKyAgICBpZighZXh0IHx8IGV4dCA9PSBmaWxlbmFtZSkgcmV0dXJuIE5VTEw7CisrICAg IGV4dCArPSAxOyAvL2V4Y2x1ZGUgdGhlIGRvdAorKworKyAgICAvLyByZXR1cm4gYSBjb250YWlu ZXIgbWltZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZXh0ZW5zaW9uLgorKyAgICAvLyBnc3RyZWFtZXIn cyBmdW5jdGlvbiByZXR1cm5zIHRvbyBtdWNoIHBvc3NpYmlsaXRpZXMsIHdoaWNoIGlzIG5vdCB1 c2VmdWwgdG8gdXMKKysKKysgICAgLy9yZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG1pbWUKKysgICAg aWYgKHN0cm5jYXNlY21wKGV4dCwiYXZpIiwgMykgPT0gMCkKKysgICAgICAgIHJldHVybiAoY29u c3QgY2hhciopInZpZGVvL3gtbXN2aWRlbyI7CisrCisrICAgIGlmIChzdHJuY2FzZWNtcChleHQs Im1rdiIsIDMpID09IDAgfHwgc3RybmNhc2VjbXAoZXh0LCJtazNkIiw0KSA9PSAwICB8fCBzdHJu Y2FzZWNtcChleHQsIndlYm0iLDQpID09IDAgKQorKyAgICAgICAgcmV0dXJuIChjb25zdCBjaGFy KikidmlkZW8veC1tYXRyb3NrYSI7CisrCisrICAgIGlmIChzdHJuY2FzZWNtcChleHQsIndtdiIs IDMpID09IDApCisrICAgICAgICByZXR1cm4gKGNvbnN0IGNoYXIqKSJ2aWRlby94LW1zLWFzZiI7 CisrCisrICAgIGlmIChzdHJuY2FzZWNtcChleHQsIm1vdiIsIDMpID09IDApCisrICAgICAgICBy ZXR1cm4gKGNvbnN0IGNoYXIqKSJ2aWRlby94LXF1aWNrdGltZSI7CisrCisrICAgIGlmIChzdHJu Y2FzZWNtcChleHQsIm9nZyIsIDMpID09IDAgfHwgc3RybmNhc2VjbXAoZXh0LCJvZ3YiLCAzKSA9 PSAwKQorKyAgICAgICAgcmV0dXJuIChjb25zdCBjaGFyKikiYXBwbGljYXRpb24vb2dnIjsKKysK KysgICAgaWYgKHN0cm5jYXNlY21wKGV4dCwicm0iLCAzKSA9PSAwKQorKyAgICAgICAgcmV0dXJu IChjb25zdCBjaGFyKikidm5kLnJuLXJlYWxtZWRpYSI7CisrCisrICAgIGlmIChzdHJuY2FzZWNt cChleHQsInN3ZiIsIDMpID09IDApCisrICAgICAgICByZXR1cm4gKGNvbnN0IGNoYXIqKSJhcHBs aWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCI7CisrCisrICAgIGlmIChzdHJuY2FzZWNtcChleHQs Im1wNCIsIDMpID09IDApCisrICAgICAgICByZXR1cm4gKGNvbnN0IGNoYXIqKSJ2aWRlby94LXF1 aWNrdGltZSwgdmFyaWFudD0oc3RyaW5nKWlzbyI7CisrCisrICAgIC8vZGVmYXVsdCB0byBhdmkK KysgICAgcmV0dXJuIChjb25zdCBjaGFyKikidmlkZW8veC1tc3ZpZGVvIjsKKyt9CisrCisrCisr LyohCisrICogXGJyaWVmIEN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyOjpvcGVuCisrICogXHBhcmFt IGZpbGVuYW1lIGZpbGVuYW1lIHRvIG91dHB1dCB0bworKyAqIFxwYXJhbSBmb3VyY2MgZGVzaXJl ZCBjb2RlYyBmb3VyY2MKKysgKiBccGFyYW0gZnBzIGRlc2lyZWQgZnJhbWVyYXRlCisrICogXHBh cmFtIGZyYW1lU2l6ZSB0aGUgc2l6ZSBvZiB0aGUgZXhwZWN0ZWQgZnJhbWVzCisrICogXHBhcmFt IGlzX2NvbG9yIGNvbG9yIG9yIGdyYXlzY2FsZQorKyAqIFxyZXR1cm4gc3VjY2VzcworKyAqCisr ICogV2Ugc3VwcG9ydCAyIG1vZGVzIG9mIG9wZXJhdGlvbi4gRWl0aGVyIHRoZSB1c2VyIGVudGVy cyBhIGZpbGVuYW1lIGFuZCBhIGZvdXJjYworKyAqIGNvZGUsIG9yIGVudGVycyBhIG1hbnVhbCBw aXBlbGluZSBkZXNjcmlwdGlvbiBsaWtlIGluIEN2VmlkZW9DYXB0dXJlX0dzdHJlYW1lci4KKysg KiBJbiB0aGUgbGF0dGVyIGNhc2UsIHdlIGp1c3QgcHVzaCBmcmFtZXMgb24gdGhlIGFwcHNpbmsg d2l0aCBhcHByb3ByaWF0ZSBjYXBzLgorKyAqIEluIHRoZSBmb3JtZXIgY2FzZSwgd2UgdHJ5IHRv IGRlZHVjZSB0aGUgY29ycmVjdCBjb250YWluZXIgZnJvbSB0aGUgZmlsZW5hbWUsCisrICogYW5k IHRoZSBjb3JyZWN0IGVuY29kZXIgZnJvbSB0aGUgZm91cmNjIHByb2ZpbGUuCisrICoKKysgKiBJ ZiB0aGUgZmlsZSBleHRlbnNpb24gZGlkIHdhcyBub3QgcmVjb2duaXplLCBhbiBhdmkgY29udGFp bmVyIGlzIHVzZWQKKysgKgorKyAqLworK2Jvb2wgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6Om9w ZW4oIGNvbnN0IGNoYXIgKiBmaWxlbmFtZSwgaW50IGZvdXJjYywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkb3VibGUgZnBzLCBDdlNpemUgZnJhbWVTaXplLCBib29sIGlz X2NvbG9yICkKKyt7CisrICAgIENWX0ZVTkNOQU1FKCJDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6 b3BlbiIpOworKworKyAgICAvLyBjaGVjayBhcmd1bWVudHMKKysgICAgYXNzZXJ0IChmaWxlbmFt ZSk7CisrICAgIGFzc2VydCAoZnBzID4gMCk7CisrICAgIGFzc2VydCAoZnJhbWVTaXplLndpZHRo ID4gMCAgJiYgIGZyYW1lU2l6ZS5oZWlnaHQgPiAwKTsKKysKKysgICAgLy8gaW5pdCBnc3RyZWFt ZXIKKysgICAgZ3N0X2luaXRpYWxpemVyOjppbml0KCk7CisrCisrICAgIC8vIGluaXQgdmFycwor KyAgICBib29sIG1hbnVhbHBpcGVsaW5lID0gdHJ1ZTsKKysgICAgaW50ICBidWZzaXplID0gMDsK KysgICAgR0Vycm9yICplcnIgPSBOVUxMOworKyAgICBjb25zdCBjaGFyKiBtaW1lID0gTlVMTDsK KysgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVyZXQ7CisrCisrICAgIEdzdENhcHMqIGNh cHMgPSBOVUxMOworKyAgICBHc3RDYXBzKiB2aWRlb2NhcHMgPSBOVUxMOworKyAgICBHc3RDYXBz KiBjb250YWluZXJjYXBzID0gTlVMTDsKKysgICAgR3N0RW5jb2RpbmdDb250YWluZXJQcm9maWxl KiBjb250YWluZXJwcm9maWxlID0gTlVMTDsKKysgICAgR3N0RW5jb2RpbmdWaWRlb1Byb2ZpbGUq IHZpZGVvcHJvZmlsZSA9IE5VTEw7CisrCisrI2lmIEdTVF9WRVJTSU9OX01BSk9SID09IDAKKysg ICAgR3N0SXRlcmF0b3IgKml0ID0gTlVMTDsKKysjZW5kaWYKKysKKysgICAgLy8gd2UgZmlyc3Qg dHJ5IHRvIGNvbnN0cnVjdCBhIHBpcGVsaW5lIGZyb20gdGhlIGdpdmVuIHN0cmluZy4KKysgICAg Ly8gaWYgdGhhdCBmYWlscywgd2UgYXNzdW1lIGl0IGlzIGFuIG9yZGluYXJ5IGZpbGVuYW1lCisr CisrICAgIF9fQkVHSU5fXzsKKysKKysgICAgZW5jb2RlYmluID0gZ3N0X3BhcnNlX2xhdW5jaChm aWxlbmFtZSwgJmVycik7CisrICAgIGlmKCFlbmNvZGViaW4pIHsKKysgICAgICAgIG1hbnVhbHBp cGVsaW5lID0gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYobWFudWFscGlwZWxpbmUpCisrICAg IHsKKysjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPT0gMAorKyAgICAgICAgaXQgPSBnc3RfYmluX2l0 ZXJhdGVfc291cmNlcyhHU1RfQklOKGVuY29kZWJpbikpOworKyAgICAgICAgaWYoZ3N0X2l0ZXJh dG9yX25leHQoaXQsIChncG9pbnRlciAqKSZzb3VyY2UpICE9IEdTVF9JVEVSQVRPUl9PSykgewor KyAgICAgICAgICAgIENWX0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0cmVhbWVyOiBjYW5ub3QgZmlu ZCBhcHBzaW5rIGluIG1hbnVhbCBwaXBlbGluZVxuIik7CisrICAgICAgICAgICAgcmV0dXJuIGZh bHNlOworKyAgICAgICAgfQorKyNlbHNlCisrICAgICAgICBzb3VyY2UgPSBnc3RfYmluX2dldF9i eV9uYW1lKEdTVF9CSU4oZW5jb2RlYmluKSwgIm9wZW5jdnNyYyIpOworKyAgICAgICAgaWYgKCFz b3VyY2UpeworKyAgICAgICAgICAgIHNvdXJjZSA9IGdzdF9iaW5fZ2V0X2J5X25hbWUoR1NUX0JJ TihlbmNvZGViaW4pLCAiYXBwc3JjMCIpOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKCFz b3VyY2UpeworKyAgICAgICAgICAgIENWX0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0cmVhbWVyOiBj YW5ub3QgZmluZCBhcHBzcmMgaW4gbWFudWFsIHBpcGVsaW5lXG4iKTsKKysgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrI2VuZGlmCisrICAgICAgICBwaXBlbGluZSA9IGVu Y29kZWJpbjsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIHBpcGVsaW5lID0g Z3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7CisrCisrICAgICAgICAvLyB3ZSBqdXN0IGdvdCBhIGZp bGVuYW1lIGFuZCBhIGZvdXJjYyBjb2RlLgorKyAgICAgICAgLy8gZmlyc3QsIHRyeSB0byBndWVz cyB0aGUgY29udGFpbmVyIGZyb20gdGhlIGZpbGVuYW1lCisrICAgICAgICAvL2VuY29kZWJpbiA9 IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZW5jb2RlYmluIiwgTlVMTCk7CisrCisrICAgICAg ICAvL3Byb3h5IG9sZCBub24gZXhpc3RpbmcgZm91cmNjIGlkcy4gVGhlc2Ugd2VyZSB1c2VkIGlu IHByZXZpb3VzIG9wZW5jdiB2ZXJzaW9ucywKKysgICAgICAgIC8vYnV0IGRvIG5vdCBldmVuIGV4 aXN0IGluIGdzdHJlYW1lciBhbnkgbW9yZQorKyAgICAgICAgaWYgKGZvdXJjYyA9PSBDVl9GT1VS Q0MoJ00nLCdQJywnMScsJ1YnKSkgZm91cmNjID0gQ1ZfRk9VUkNDKCdNJywgJ1AnLCAnRycgLCcx Jyk7CisrICAgICAgICBpZiAoZm91cmNjID09IENWX0ZPVVJDQygnTScsJ1AnLCcyJywnVicpKSBm b3VyY2MgPSBDVl9GT1VSQ0MoJ00nLCAnUCcsICdHJyAsJzInKTsKKysgICAgICAgIGlmIChmb3Vy Y2MgPT0gQ1ZfRk9VUkNDKCdEJywnUicsJ0EnLCdDJykpIGZvdXJjYyA9IENWX0ZPVVJDQygnZCcs ICdyJywgJ2EnICwnYycpOworKworKyAgICAgICAgLy9jcmVhdGUgZW5jb2RlciBjYXBzIGZyb20g Zm91cmNjCisrICAgICAgICB2aWRlb2NhcHMgPSBnc3RfcmlmZl9jcmVhdGVfdmlkZW9fY2Fwcyhm b3VyY2MsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworKyAgICAgICAgaWYgKCF2aWRl b2NhcHMpeworKyAgICAgICAgICAgIENWX0VSUk9SKCBDVl9TdHNVbnN1cHBvcnRlZEZvcm1hdCwg IkdzdHJlYW1lciBPcGVuY3YgYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgY29kZWMuIik7 CisrICAgICAgICB9CisrCisrICAgICAgICAvL2NyZWF0ZSBjb250YWluZXIgY2FwcyBmcm9tIGZp bGUgZXh0ZW5zaW9uCisrICAgICAgICBtaW1lID0gZmlsZW5hbWVUb01pbWV0eXBlKGZpbGVuYW1l KTsKKysgICAgICAgIGlmICghbWltZSkgeworKyAgICAgICAgICAgIENWX0VSUk9SKCBDVl9TdHNV bnN1cHBvcnRlZEZvcm1hdCwgIkdzdHJlYW1lciBPcGVuY3YgYmFja2VuZCBkb2VzIG5vdCBzdXBw b3J0IHRoaXMgZmlsZSB0eXBlLiIpOworKyAgICAgICAgfQorKyAgICAgICAgY29udGFpbmVyY2Fw cyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nKG1pbWUpOworKworKyAgICAgICAgLy9jcmVhdGUgZW5j b2RlYmluIHByb2ZpbGUKKysgICAgICAgIGNvbnRhaW5lcnByb2ZpbGUgPSBnc3RfZW5jb2Rpbmdf Y29udGFpbmVyX3Byb2ZpbGVfbmV3KCJjb250YWluZXIiLCAiY29udGFpbmVyIiwgY29udGFpbmVy Y2FwcywgTlVMTCk7CisrICAgICAgICB2aWRlb3Byb2ZpbGUgPSBnc3RfZW5jb2RpbmdfdmlkZW9f cHJvZmlsZV9uZXcodmlkZW9jYXBzLCBOVUxMLCBOVUxMLCAxKTsKKysgICAgICAgIGdzdF9lbmNv ZGluZ19jb250YWluZXJfcHJvZmlsZV9hZGRfcHJvZmlsZShjb250YWluZXJwcm9maWxlLCAoR3N0 RW5jb2RpbmdQcm9maWxlICopIHZpZGVvcHJvZmlsZSk7CisrCisrICAgICAgICAvL2NyZWF0ZSBw aXBlbGluZSBlbGVtZW50cworKyAgICAgICAgZW5jb2RlYmluID0gZ3N0X2VsZW1lbnRfZmFjdG9y eV9tYWtlKCJlbmNvZGViaW4iLCBOVUxMKTsKKysgICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVD VChlbmNvZGViaW4pLCAicHJvZmlsZSIsIGNvbnRhaW5lcnByb2ZpbGUsIE5VTEwpOworKyAgICAg ICAgc291cmNlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMiLCBOVUxMKTsKKysg ICAgICAgIGZpbGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImZpbGVzaW5rIiwgTlVMTCk7 CisrICAgICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1QoZmlsZSksICJsb2NhdGlvbiIsIGZpbGVu YW1lLCBOVUxMKTsKKysgICAgfQorKworKyAgICBpZiAoaXNfY29sb3IpCisrICAgIHsKKysgICAg ICAgIGlucHV0X3BpeF9mbXQgPSBHU1RfVklERU9fRk9STUFUX0JHUjsKKysgICAgICAgIGJ1ZnNp emUgPSBmcmFtZVNpemUud2lkdGggKiBmcmFtZVNpemUuaGVpZ2h0ICogMzsKKysKKysjaWYgR1NU X1ZFUlNJT05fTUFKT1IgPT0gMAorKyAgICAgICAgY2FwcyA9IGdzdF92aWRlb19mb3JtYXRfbmV3 X2NhcHMoR1NUX1ZJREVPX0ZPUk1BVF9CR1IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmcmFtZVNpemUud2lkdGgsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmcmFtZVNpemUuaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50KGZwcyksIDEsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxLCAxKTsKKysjZWxzZQorKyAgICAgICAgY2FwcyA9IGdzdF9j YXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3IiwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiQkdSIiwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIGZyYW1lU2l6ZS53aWR0 aCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWlnaHQiLCBHX1RZUEVf SU5ULCBmcmFtZVNpemUuaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCBpbnQoZnBzKSwgMSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworKyAgICAgICAgY2FwcyA9IGdzdF9j YXBzX2ZpeGF0ZShjYXBzKTsKKysKKysjZW5kaWYKKysKKysgICAgfQorKyAgICBlbHNlCisrICAg IHsKKysgICAgICAgIGlucHV0X3BpeF9mbXQgPSBHU1RfVklERU9fRk9STUFUX0dSQVk4OworKyAg ICAgICAgYnVmc2l6ZSA9IGZyYW1lU2l6ZS53aWR0aCAqIGZyYW1lU2l6ZS5oZWlnaHQ7CisrCisr I2lmIEdTVF9WRVJTSU9OX01BSk9SID09IDAKKysgICAgICAgIGNhcHMgPSBnc3RfdmlkZW9fZm9y bWF0X25ld19jYXBzKEdTVF9WSURFT19GT1JNQVRfR1JBWTgsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVNpemUud2lkdGgsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVNpemUuaGVpZ2h0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KGZwcyksIDEsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxKTsKKysjZWxzZQorKyAgICAgICAgY2Fw cyA9IGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3IiwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiR1JBWTgiLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgZnJh bWVTaXplLndpZHRoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlaWdo dCIsIEdfVFlQRV9JTlQsIGZyYW1lU2l6ZS5oZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIGludChmcHMpLCAx LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisrICAgICAgICBj YXBzID0gZ3N0X2NhcHNfZml4YXRlKGNhcHMpOworKyNlbmRpZgorKyAgICB9CisrCisrICAgIGdz dF9hcHBfc3JjX3NldF9jYXBzKEdTVF9BUFBfU1JDKHNvdXJjZSksIGNhcHMpOworKyAgICBnc3Rf YXBwX3NyY19zZXRfc3RyZWFtX3R5cGUoR1NUX0FQUF9TUkMoc291cmNlKSwgR1NUX0FQUF9TVFJF QU1fVFlQRV9TVFJFQU0pOworKyAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZSAoR1NUX0FQUF9TUkMo c291cmNlKSwgLTEpOworKworKyAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc291cmNlKSwgImZv cm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgTlVMTCk7CisrICAgIGdfb2JqZWN0X3NldChHX09CSkVD VChzb3VyY2UpLCAiYmxvY2siLCBUUlVFLCBOVUxMKTsKKysgICAgZ19vYmplY3Rfc2V0KEdfT0JK RUNUKHNvdXJjZSksICJpcy1saXZlIiwgRkFMU0UsIE5VTEwpOworKyAgICBnX29iamVjdF9zZXQo R19PQkpFQ1Qoc291cmNlKSwgImVtaXQtc2lnbmFscyIsIFRSVUUsIE5VTEwpOworKworKyAgICBp ZighbWFudWFscGlwZWxpbmUpCisrICAgIHsKKysgICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVD VChmaWxlKSwgImJ1ZmZlci1zaXplIiwgYnVmc2l6ZSwgTlVMTCk7CisrICAgICAgICBnc3RfYmlu X2FkZF9tYW55KEdTVF9CSU4ocGlwZWxpbmUpLCBzb3VyY2UsIGVuY29kZWJpbiwgZmlsZSwgTlVM TCk7CisrICAgICAgICBpZighZ3N0X2VsZW1lbnRfbGlua19tYW55KHNvdXJjZSwgZW5jb2RlYmlu LCBmaWxlLCBOVUxMKSkgeworKyAgICAgICAgICAgIENWX0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0 cmVhbWVyOiBjYW5ub3QgbGluayBlbGVtZW50c1xuIik7CisrICAgICAgICB9CisrICAgIH0KKysK KysgICAgc3RhdGVyZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUoR1NUX0VMRU1FTlQocGlwZWxp bmUpLCBHU1RfU1RBVEVfUExBWUlORyk7CisrICAgIGlmKHN0YXRlcmV0ICA9PSBHU1RfU1RBVEVf Q0hBTkdFX0ZBSUxVUkUpIHsKKysgICAgICAgIENWX0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0cmVh bWVyOiBjYW5ub3QgcHV0IHBpcGVsaW5lIHRvIHBsYXlcbiIpOworKyAgICB9CisrICAgIGhhbmRs ZU1lc3NhZ2UocGlwZWxpbmUpOworKworKyAgICBmcmFtZXJhdGUgPSBmcHM7CisrICAgIG51bV9m cmFtZXMgPSAwOworKworKyAgICBfX0VORF9fOworKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9Cisr CisrCisrLyohCisrICogXGJyaWVmIEN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyOjp3cml0ZUZyYW1l CisrICogXHBhcmFtIGltYWdlCisrICogXHJldHVybgorKyAqIFB1c2hlcyB0aGUgZ2l2ZW4gZnJh bWUgb24gdGhlIHBpcGVsaW5lLgorKyAqIFRoZSB0aW1lc3RhbXAgZm9yIHRoZSBidWZmZXIgaXMg Z2VuZXJhdGVkIGZyb20gdGhlIGZyYW1lcmF0ZSBzZXQgaW4gb3BlbgorKyAqIGFuZCBlbnN1cmVz IGEgc21vb3RoIHZpZGVvCisrICovCisrYm9vbCBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6d3Jp dGVGcmFtZSggY29uc3QgSXBsSW1hZ2UgKiBpbWFnZSApCisreworKworKyAgICBDVl9GVU5DTkFN RSgiQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6OndyaXRlckZyYW1lIik7CisrCisrICAgIEdzdENs b2NrVGltZSBkdXJhdGlvbiwgdGltZXN0YW1wOworKyAgICBHc3RGbG93UmV0dXJuIHJldDsKKysg ICAgaW50IHNpemU7CisrCisrICAgIF9fQkVHSU5fXzsKKysgICAgaGFuZGxlTWVzc2FnZShwaXBl bGluZSk7CisrCisrICAgIGlmIChpbnB1dF9waXhfZm10ID09IEdTVF9WSURFT19GT1JNQVRfQkdS KSB7CisrICAgICAgICBpZiAoaW1hZ2UtPm5DaGFubmVscyAhPSAzIHx8IGltYWdlLT5kZXB0aCAh PSBJUExfREVQVEhfOFUpIHsKKysgICAgICAgICAgICBDVl9FUlJPUihDVl9TdHNVbnN1cHBvcnRl ZEZvcm1hdCwgImN2V3JpdGVGcmFtZSgpIG5lZWRzIGltYWdlcyB3aXRoIGRlcHRoID0gSVBMX0RF UFRIXzhVIGFuZCBuQ2hhbm5lbHMgPSAzLiIpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVs c2UgaWYgKGlucHV0X3BpeF9mbXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9HUkFZOCkgeworKyAgICAg ICAgaWYgKGltYWdlLT5uQ2hhbm5lbHMgIT0gMSB8fCBpbWFnZS0+ZGVwdGggIT0gSVBMX0RFUFRI XzhVKSB7CisrICAgICAgICAgICAgQ1ZfRVJST1IoQ1ZfU3RzVW5zdXBwb3J0ZWRGb3JtYXQsICJj dldyaXRlRnJhbWUoKSBuZWVkcyBpbWFnZXMgd2l0aCBkZXB0aCA9IElQTF9ERVBUSF84VSBhbmQg bkNoYW5uZWxzID0gMS4iKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlIHsKKysgICAg ICAgIGFzc2VydChmYWxzZSk7CisrICAgIH0KKysKKysgICAgc2l6ZSA9IGltYWdlLT5pbWFnZVNp emU7CisrICAgIGR1cmF0aW9uID0gKChkb3VibGUpMS9mcmFtZXJhdGUpICogR1NUX1NFQ09ORDsK KysgICAgdGltZXN0YW1wID0gbnVtX2ZyYW1lcyAqIGR1cmF0aW9uOworKworKyAgICAvL2dzdF9h cHBfc3JjX3B1c2hfYnVmZmVyIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyLCBzbyB3ZSBu ZWVkIHRvIHN1cHBseSBpdCBhIGNvcHkKKysjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPT0gMAorKyAg ICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUpOworKyAgICBtZW1jcHko R1NUX0JVRkZFUl9EQVRBIChidWZmZXIpLCAoZ3VpbnQ4KilpbWFnZS0+aW1hZ2VEYXRhLCBzaXpl KTsKKysgICAgR1NUX0JVRkZFUl9EVVJBVElPTihidWZmZXIpID0gZHVyYXRpb247CisrICAgIEdT VF9CVUZGRVJfVElNRVNUQU1QKGJ1ZmZlcikgPSB0aW1lc3RhbXA7CisrI2Vsc2UKKysgICAgYnVm ZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIHNpemUsIE5VTEwpOworKyAgICBH c3RNYXBJbmZvIGluZm87CisrICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgJmluZm8sIChHc3RN YXBGbGFncylHU1RfTUFQX1JFQUQpOworKyAgICBtZW1jcHkoaW5mby5kYXRhLCAoZ3VpbnQ4Kilp bWFnZS0+aW1hZ2VEYXRhLCBzaXplKTsKKysgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZp bmZvKTsKKysgICAgR1NUX0JVRkZFUl9EVVJBVElPTihidWZmZXIpID0gZHVyYXRpb247CisrICAg IEdTVF9CVUZGRVJfUFRTKGJ1ZmZlcikgPSB0aW1lc3RhbXA7CisrICAgIEdTVF9CVUZGRVJfRFRT KGJ1ZmZlcikgPSB0aW1lc3RhbXA7CisrI2VuZGlmCisrICAgIC8vc2V0IHRoZSBjdXJyZW50IG51 bWJlciBpbiB0aGUgZnJhbWUKKysgICAgR1NUX0JVRkZFUl9PRkZTRVQoYnVmZmVyKSA9ICBudW1f ZnJhbWVzOworKworKyAgICByZXQgPSBnc3RfYXBwX3NyY19wdXNoX2J1ZmZlcihHU1RfQVBQX1NS Qyhzb3VyY2UpLCBidWZmZXIpOworKyAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7CisrICAg ICAgICAvKiBzb21ldGhpbmcgd3JvbmcsIHN0b3AgcHVzaGluZyAqLworKyAgICAgICAgYXNzZXJ0 KGZhbHNlKTsKKysgICAgfQorKyAgICAvL2dzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGUgKEdTVF9C SU4ocGlwZWxpbmUpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsICJwaXBlbGluZSIpOworKyAg ICArK251bV9mcmFtZXM7CisrCisrICAgIF9fRU5EX187CisrICAgIHJldHVybiB0cnVlOworK30K KysKKysvKiEKKysgKiBcYnJpZWYgY3ZDcmVhdGVWaWRlb1dyaXRlcl9HU3RyZWFtZXIKKysgKiBc cGFyYW0gZmlsZW5hbWUKKysgKiBccGFyYW0gZm91cmNjCisrICogXHBhcmFtIGZwcworKyAqIFxw YXJhbSBmcmFtZVNpemUKKysgKiBccGFyYW0gaXNDb2xvcgorKyAqIFxyZXR1cm4KKysgKiBDb25z dHJ1Y3RvcgorKyAqLworK0N2VmlkZW9Xcml0ZXIqIGN2Q3JlYXRlVmlkZW9Xcml0ZXJfR1N0cmVh bWVyKGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgZm91cmNjLCBkb3VibGUgZnBzLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN2U2l6ZSBmcmFtZVNpemUs IGludCBpc0NvbG9yICkKKyt7CisrICAgIEN2VmlkZW9Xcml0ZXJfR1N0cmVhbWVyKiB3cnQgPSBu ZXcgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI7CisrICAgIGlmKCB3cnQtPm9wZW4oZmlsZW5hbWUs IGZvdXJjYywgZnBzLGZyYW1lU2l6ZSwgaXNDb2xvcikpCisrICAgICAgICByZXR1cm4gd3J0Owor KworKyAgICBkZWxldGUgd3J0OworKyAgICByZXR1cm4gMDsKKyt9CisrCisrLy8gdXRpbGl0eSBm dW5jdGlvbnMKKysKKysvKiEKKysgKiBcYnJpZWYgdG9GcmFjdGlvbgorKyAqIFxwYXJhbSBkZWNp bWFsCisrICogXHBhcmFtIG51bWVyYXRvcgorKyAqIFxwYXJhbSBkZW5vbWluYXRvcgorKyAqIFNw bGl0IGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9y CisrICovCisrdm9pZCB0b0ZyYWN0aW9uKGRvdWJsZSBkZWNpbWFsLCBkb3VibGUgJm51bWVyYXRv ciwgZG91YmxlICZkZW5vbWluYXRvcikKKyt7CisrICAgIGRvdWJsZSBkdW1teTsKKysgICAgZG91 YmxlIHdob2xlOworKyAgICBkZWNpbWFsID0gbW9kZiAoZGVjaW1hbCwgJndob2xlKTsKKysgICAg Zm9yIChkZW5vbWluYXRvciA9IDE7IGRlbm9taW5hdG9yPD0xMDA7IGRlbm9taW5hdG9yKyspewor KyAgICAgICAgaWYgKG1vZGYoZGVub21pbmF0b3IgKiBkZWNpbWFsLCAmZHVtbXkpIDwgMC4wMDFm KQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICB9CisrICAgIG51bWVyYXRvciA9IGRlbm9taW5h dG9yICogZGVjaW1hbDsKKyt9CisrCisrCisrLyohCisrICogXGJyaWVmIGhhbmRsZU1lc3NhZ2UK KysgKiBIYW5kbGVzIGdzdHJlYW1lciBidXMgbWVzc2FnZXMuIE1haW5seSBmb3IgZGVidWdnaW5n IHB1cnBvc2VzIGFuZCBlbnN1cmluZyBjbGVhbiBzaHV0ZG93biBvbiBlcnJvcgorKyAqLworK3Zv aWQgaGFuZGxlTWVzc2FnZShHc3RFbGVtZW50ICogcGlwZWxpbmUpCisreworKyAgICBDVl9GVU5D TkFNRSgiaGFuZGxlbWVzc2FnZSIpOworKworKyAgICBHRXJyb3IgKmVyciA9IE5VTEw7CisrICAg IGdjaGFyICpkZWJ1ZyA9IE5VTEw7CisrICAgIEdzdEJ1cyogYnVzID0gTlVMTDsKKysgICAgR3N0 U3RyZWFtU3RhdHVzVHlwZSB0cDsKKysgICAgR3N0RWxlbWVudCAqIGVsZW0gPSBOVUxMOworKyAg ICBHc3RNZXNzYWdlKiBtc2cgID0gTlVMTDsKKysKKysgICAgX19CRUdJTl9fOworKyAgICBidXMg PSBnc3RfZWxlbWVudF9nZXRfYnVzKHBpcGVsaW5lKTsKKysKKysgICAgd2hpbGUoZ3N0X2J1c19o YXZlX3BlbmRpbmcoYnVzKSkgeworKyAgICAgICAgbXNnID0gZ3N0X2J1c19wb3AoYnVzKTsKKysK KysgICAgICAgIC8vcHJpbnRmKCJHb3QgJXMgbWVzc2FnZVxuIiwgR1NUX01FU1NBR0VfVFlQRV9O QU1FKG1zZykpOworKworKyAgICAgICAgaWYoZ3N0X2lzX21pc3NpbmdfcGx1Z2luX21lc3NhZ2Uo bXNnKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBDVl9FUlJPUihDVl9TdHNFcnJvciwgIkdT dHJlYW1lcjogeW91ciBnc3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSByZXF1aXJl ZCBwbHVnaW5cbiIpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAg ICAgICAgICAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgeworKyAgICAgICAgICAg IGNhc2UgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRDoKKysgICAgICAgICAgICAgICAgR3N0U3Rh dGUgb2xkc3RhdGUsIG5ld3N0YXRlLCBwZW5kc3RhdGU7CisrICAgICAgICAgICAgICAgIGdzdF9t ZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQobXNnLCAmb2xkc3RhdGUsICZuZXdzdGF0ZSwgJnBl bmRzdGF0ZSk7CisrICAgICAgICAgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJzdGF0ZSBjaGFu Z2VkIGZyb20gJXMgdG8gJXMgKHBlbmRpbmc6ICVzKVxuIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0 X25hbWUob2xkc3RhdGUpLAorKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBnc3Rf ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdzdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9u YW1lKHBlbmRzdGF0ZSkpOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBj YXNlIEdTVF9NRVNTQUdFX0VSUk9SOgorKyAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJz ZV9lcnJvcihtc2csICZlcnIsICZkZWJ1Zyk7CisrCisrICAgICAgICAgICAgICAgIC8vZnByaW50 ZihzdGRlcnIsICJHU3RyZWFtZXIgUGx1Z2luOiBFbWJlZGRlZCB2aWRlbyBwbGF5YmFjayBoYWx0 ZWQ7IG1vZHVsZSAlcyByZXBvcnRlZDogJXNcbiIsCisrICAgICAgICAgICAgICAgIC8vICAgICAg ICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9uYW1lKEdTVF9NRVNTQUdFX1NSQyAobXNnKSksIGVy ci0+bWVzc2FnZSk7CisrCisrICAgICAgICAgICAgICAgIGdfZXJyb3JfZnJlZShlcnIpOworKyAg ICAgICAgICAgICAgICBnX2ZyZWUoZGVidWcpOworKworKyAgICAgICAgICAgICAgICBnc3RfZWxl bWVudF9zZXRfc3RhdGUoR1NUX0VMRU1FTlQocGlwZWxpbmUpLCBHU1RfU1RBVEVfTlVMTCk7Cisr ICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgR1NUX01FU1NBR0VfRU9T OgorKyAgICAgICAgICAgICAgICAvL2ZwcmludGYoc3RkZXJyLCAicmVhY2hlZCB0aGUgZW5kIG9m IHRoZSBzdHJlYW0uIik7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNh c2UgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUzoKKysKKysgICAgICAgICAgICAgICAgZ3N0X21l c3NhZ2VfcGFyc2Vfc3RyZWFtX3N0YXR1cyhtc2csJnRwLCZlbGVtKTsKKysgICAgICAgICAgICAg ICAgLy9mcHJpbnRmKHN0ZGVyciwgInN0cmVhbSBzdGF0dXM6IGVsZW0gJXMsICVpXG4iLCBHU1Rf RUxFTUVOVF9OQU1FKGVsZW0pLCB0cCk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAg ICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJ1bmhh bmRsZWQgbWVzc2FnZVxuIik7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAg IH0KKysgICAgICAgIH0KKysgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmKG1zZyk7CisrICAgIH0K KysKKysgICAgZ3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNUKGJ1cykpOworKworKyAgICBfX0VO RF9fCisrfQoKZGlmZiAtLWdpdCBhLzA1NTItZWxpbWluYXRlZC13YXJuaW5ncy5wYXRjaCBiLzA1 NTItZWxpbWluYXRlZC13YXJuaW5ncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4yMTA5N2RmCi0tLSAvZGV2L251bGwKKysrIGIvMDU1Mi1lbGltaW5hdGVkLXdhcm5p bmdzLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gOTIxNjc1YzRlMjMzZDhmOWU3ODc4NjU1 MGQ1NDllOWUwNWZmZWIyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERpcmsgVmFu IEhhZXJlbmJvcmdoIDx2aGRpcmtAZ21haWwuY29tPgorRGF0ZTogVGh1LCAyMSBNYXIgMjAxMyAx NjoxMTo1MyArMDEwMAorU3ViamVjdDogW1BBVENIIDA1NTIvMzE1Ml0gZWxpbWluYXRlZCB3YXJu aW5ncworCistLS0KKyBtb2R1bGVzL2hpZ2hndWkvc3JjL2NhcF9nc3RyZWFtZXIuY3BwIHwgOSAr KysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygt KQorCitkaWZmIC0tZ2l0IGEvbW9kdWxlcy9oaWdoZ3VpL3NyYy9jYXBfZ3N0cmVhbWVyLmNwcCBi L21vZHVsZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAKK2luZGV4IGIxYTJjYTAuLjll ZjBhM2YgMTAwNjQ0CistLS0gYS9tb2R1bGVzL2hpZ2hndWkvc3JjL2NhcF9nc3RyZWFtZXIuY3Bw CisrKysgYi9tb2R1bGVzL2hpZ2hndWkvc3JjL2NhcF9nc3RyZWFtZXIuY3BwCitAQCAtODMsNyAr ODMsOCBAQCBzdGF0aWMgY3Y6Ok11dGV4IGdzdF9pbml0aWFsaXplcl9tdXRleDsKKyAvKiEKKyAg KiBcYnJpZWYgVGhlIGdzdF9pbml0aWFsaXplciBjbGFzcworICAqIEluaXRpYWxpemVzIGdzdHJl YW1lciBvbmNlIGluIHRoZSB3aG9sZSBwcm9jZXNzCistICovY2xhc3MgZ3N0X2luaXRpYWxpemVy CisrICovCisrY2xhc3MgZ3N0X2luaXRpYWxpemVyCisgeworIHB1YmxpYzoKKyAgICAgc3RhdGlj IHZvaWQgaW5pdCgpCitAQCAtMTAwNyw5ICsxMDA4LDkgQEAgdm9pZCBDdlZpZGVvV3JpdGVyX0dT dHJlYW1lcjo6aW5pdCgpCisgICovCisgdm9pZCBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6Y2xv c2UoKQorIHsKKy0gICAgaWYgKHBpcGVsaW5lKSB7CistICAgICAgICBHc3RGbG93UmV0dXJuIHJl dDsKKy0gICAgICAgIHJldCA9IGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0oR1NUX0FQUF9TUkMo c291cmNlKSk7CisrICAgIGlmIChwaXBlbGluZSkKKysgICAgeworKyAgICAgICAgZ3N0X2FwcF9z cmNfZW5kX29mX3N0cmVhbShHU1RfQVBQX1NSQyhzb3VyY2UpKTsKKyAKKyAgICAgICAgIC8vd2Fp dCBmb3IgRU9TIHRvIHRyaWNrbGUgZG93biB0aGUgcGlwZWxpbmUuIFRoaXMgd2lsbCBsZXQgYWxs IGVsZW1lbnRzIGZpbmlzaCBwcm9wZXJseQorICAgICAgICAgR3N0QnVzKiBidXMgPSBnc3RfZWxl bWVudF9nZXRfYnVzKHBpcGVsaW5lKTsKKy0tIAorMS45LjMKKwoKZGlmZiAtLWdpdCBhLzA1ODct Rml4LWJ1aWxkLXdpdGgtZ3N0cmVhbWVyLTAuMTAuMjgucGF0Y2ggYi8wNTg3LUZpeC1idWlsZC13 aXRoLWdzdHJlYW1lci0wLjEwLjI4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmViOGQ2MjcKLS0tIC9kZXYvbnVsbAorKysgYi8wNTg3LUZpeC1idWlsZC13aXRoLWdz dHJlYW1lci0wLjEwLjI4LnBhdGNoCkBAIC0wLDAgKzEsMTAwIEBACitGcm9tIDYzNzc5MjI3MTZm MzdiMDBlNGY4ZjVlYWI4N2E4ZmJjYjE2NDIyZTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitG cm9tOiBBbmRyZXkgS2FtYWV2IDxhbmRyZXkua2FtYWV2QGl0c2Vlei5jb20+CitEYXRlOiBUdWUs IDI2IE1hciAyMDEzIDEyOjI3OjM5ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDU4Ny8zMTUyXSBG aXggYnVpbGQgd2l0aCBnc3RyZWFtZXIgMC4xMC4yOAorCistLS0KKyBtb2R1bGVzL2hpZ2hndWkv c3JjL2NhcF9nc3RyZWFtZXIuY3BwIHwgMjIgKysrKysrKysrKysrKysrKysrKysrLQorIDEgZmls ZSBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQg YS9tb2R1bGVzL2hpZ2hndWkvc3JjL2NhcF9nc3RyZWFtZXIuY3BwIGIvbW9kdWxlcy9oaWdoZ3Vp L3NyYy9jYXBfZ3N0cmVhbWVyLmNwcAoraW5kZXggOWVmMGEzZi4uYjhjN2Y0ZiAxMDA2NDQKKy0t LSBhL21vZHVsZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAKKysrKyBiL21vZHVsZXMv aGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAKK0BAIC01Niw5ICs1NiwxNSBAQAorICNpbmNs dWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KKyAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMu aD4KKyAjaW5jbHVkZSA8Z3N0L3JpZmYvcmlmZi1tZWRpYS5oPgorLSNpbmNsdWRlIDxnc3QvcGJ1 dGlscy9lbmNvZGluZy1wcm9maWxlLmg+CisgI2luY2x1ZGUgPGdzdC9wYnV0aWxzL21pc3Npbmct cGx1Z2lucy5oPgorKworKyNkZWZpbmUgVkVSU0lPTl9OVU0obWFqb3IsIG1pbm9yLCBtaWNybykg KG1ham9yICogMTAwMDAwMCArIG1pbm9yICogMTAwMCArIG1pY3JvKQorKyNkZWZpbmUgRlVMTF9H U1RfVkVSU0lPTiBWRVJTSU9OX05VTShHU1RfVkVSU0lPTl9NQUpPUiwgR1NUX1ZFUlNJT05fTUlO T1IsIEdTVF9WRVJTSU9OX01JQ1JPKQorKworKyNpZiBGVUxMX0dTVF9WRVJTSU9OID49IFZFUlNJ T05fTlVNKDAsMTAsMzIpCisrI2luY2x1ZGUgPGdzdC9wYnV0aWxzL2VuY29kaW5nLXByb2ZpbGUu aD4KKyAvLyNpbmNsdWRlIDxnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oPgorKyNlbmRpZgor IAorIAorICNpZmRlZiBOREVCVUcKK0BAIC0xMTE0LDkgKzExMjAsMTIgQEAgYm9vbCBDdlZpZGVv V3JpdGVyX0dTdHJlYW1lcjo6b3BlbiggY29uc3QgY2hhciAqIGZpbGVuYW1lLCBpbnQgZm91cmNj LAorIAorICAgICBHc3RDYXBzKiBjYXBzID0gTlVMTDsKKyAgICAgR3N0Q2FwcyogdmlkZW9jYXBz ID0gTlVMTDsKKysKKysjaWYgRlVMTF9HU1RfVkVSU0lPTiA+PSBWRVJTSU9OX05VTSgwLDEwLDMy KQorICAgICBHc3RDYXBzKiBjb250YWluZXJjYXBzID0gTlVMTDsKKyAgICAgR3N0RW5jb2RpbmdD b250YWluZXJQcm9maWxlKiBjb250YWluZXJwcm9maWxlID0gTlVMTDsKKyAgICAgR3N0RW5jb2Rp bmdWaWRlb1Byb2ZpbGUqIHZpZGVvcHJvZmlsZSA9IE5VTEw7CisrI2VuZGlmCisgCisgI2lmIEdT VF9WRVJTSU9OX01BSk9SID09IDAKKyAgICAgR3N0SXRlcmF0b3IgKml0ID0gTlVMTDsKK0BAIC0x MTc4LDE2ICsxMTg3LDIxIEBAIGJvb2wgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6Om9wZW4oIGNv bnN0IGNoYXIgKiBmaWxlbmFtZSwgaW50IGZvdXJjYywKKyAgICAgICAgIGlmICghbWltZSkgewor ICAgICAgICAgICAgIENWX0VSUk9SKCBDVl9TdHNVbnN1cHBvcnRlZEZvcm1hdCwgIkdzdHJlYW1l ciBPcGVuY3YgYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmlsZSB0eXBlLiIpOworICAg ICAgICAgfQorKworKyNpZiBGVUxMX0dTVF9WRVJTSU9OID49IFZFUlNJT05fTlVNKDAsMTAsMzIp CisgICAgICAgICBjb250YWluZXJjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcobWltZSk7Cisg CisgICAgICAgICAvL2NyZWF0ZSBlbmNvZGViaW4gcHJvZmlsZQorICAgICAgICAgY29udGFpbmVy cHJvZmlsZSA9IGdzdF9lbmNvZGluZ19jb250YWluZXJfcHJvZmlsZV9uZXcoImNvbnRhaW5lciIs ICJjb250YWluZXIiLCBjb250YWluZXJjYXBzLCBOVUxMKTsKKyAgICAgICAgIHZpZGVvcHJvZmls ZSA9IGdzdF9lbmNvZGluZ192aWRlb19wcm9maWxlX25ldyh2aWRlb2NhcHMsIE5VTEwsIE5VTEws IDEpOworICAgICAgICAgZ3N0X2VuY29kaW5nX2NvbnRhaW5lcl9wcm9maWxlX2FkZF9wcm9maWxl KGNvbnRhaW5lcnByb2ZpbGUsIChHc3RFbmNvZGluZ1Byb2ZpbGUgKikgdmlkZW9wcm9maWxlKTsK KysjZW5kaWYKKyAKKyAgICAgICAgIC8vY3JlYXRlIHBpcGVsaW5lIGVsZW1lbnRzCisgICAgICAg ICBlbmNvZGViaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImVuY29kZWJpbiIsIE5VTEwp OworKyNpZiBGVUxMX0dTVF9WRVJTSU9OID49IFZFUlNJT05fTlVNKDAsMTAsMzIpCisgICAgICAg ICBnX29iamVjdF9zZXQoR19PQkpFQ1QoZW5jb2RlYmluKSwgInByb2ZpbGUiLCBjb250YWluZXJw cm9maWxlLCBOVUxMKTsKKysjZW5kaWYKKyAgICAgICAgIHNvdXJjZSA9IGdzdF9lbGVtZW50X2Zh Y3RvcnlfbWFrZSgiYXBwc3JjIiwgTlVMTCk7CisgICAgICAgICBmaWxlID0gZ3N0X2VsZW1lbnRf ZmFjdG9yeV9tYWtlKCJmaWxlc2luayIsIE5VTEwpOworICAgICAgICAgZ19vYmplY3Rfc2V0KEdf T0JKRUNUKGZpbGUpLCAibG9jYXRpb24iLCBmaWxlbmFtZSwgTlVMTCk7CitAQCAtMTIxOCw2ICsx MjMyLDcgQEAgYm9vbCBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6b3BlbiggY29uc3QgY2hhciAq IGZpbGVuYW1lLCBpbnQgZm91cmNjLAorICAgICB9CisgICAgIGVsc2UKKyAgICAgeworKyNpZiBG VUxMX0dTVF9WRVJTSU9OID49IFZFUlNJT05fTlVNKDAsMTAsMjkpCisgICAgICAgICBpbnB1dF9w aXhfZm10ID0gR1NUX1ZJREVPX0ZPUk1BVF9HUkFZODsKKyAgICAgICAgIGJ1ZnNpemUgPSBmcmFt ZVNpemUud2lkdGggKiBmcmFtZVNpemUuaGVpZ2h0OworIAorQEAgLTEyMzYsNiArMTI1MSw5IEBA IGJvb2wgQ3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6Om9wZW4oIGNvbnN0IGNoYXIgKiBmaWxlbmFt ZSwgaW50IGZvdXJjYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwp OworICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX2ZpeGF0ZShjYXBzKTsKKyAjZW5kaWYKKysjZWxz ZQorKyAgICAgICAgQ1ZfQXNzZXJ0KCEiR3N0cmVhbWVyIDAuMTAuMjkgb3IgbmV3ZXIgaXMgcmVx dWlyZWQgZm9yIGdyYXlzY2FsZSBpbnB1dCIpOworKyNlbmRpZgorICAgICB9CisgCisgICAgIGdz dF9hcHBfc3JjX3NldF9jYXBzKEdTVF9BUFBfU1JDKHNvdXJjZSksIGNhcHMpOworQEAgLTEyOTYs MTEgKzEzMTQsMTMgQEAgYm9vbCBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6d3JpdGVGcmFtZSgg Y29uc3QgSXBsSW1hZ2UgKiBpbWFnZSApCisgICAgICAgICAgICAgQ1ZfRVJST1IoQ1ZfU3RzVW5z dXBwb3J0ZWRGb3JtYXQsICJjdldyaXRlRnJhbWUoKSBuZWVkcyBpbWFnZXMgd2l0aCBkZXB0aCA9 IElQTF9ERVBUSF84VSBhbmQgbkNoYW5uZWxzID0gMy4iKTsKKyAgICAgICAgIH0KKyAgICAgfQor KyNpZiBGVUxMX0dTVF9WRVJTSU9OID49IFZFUlNJT05fTlVNKDAsMTAsMjkpCisgICAgIGVsc2Ug aWYgKGlucHV0X3BpeF9mbXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9HUkFZOCkgeworICAgICAgICAg aWYgKGltYWdlLT5uQ2hhbm5lbHMgIT0gMSB8fCBpbWFnZS0+ZGVwdGggIT0gSVBMX0RFUFRIXzhV KSB7CisgICAgICAgICAgICAgQ1ZfRVJST1IoQ1ZfU3RzVW5zdXBwb3J0ZWRGb3JtYXQsICJjdldy aXRlRnJhbWUoKSBuZWVkcyBpbWFnZXMgd2l0aCBkZXB0aCA9IElQTF9ERVBUSF84VSBhbmQgbkNo YW5uZWxzID0gMS4iKTsKKyAgICAgICAgIH0KKyAgICAgfQorKyNlbmRpZgorICAgICBlbHNlIHsK KyAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgIH0KKy0tIAorMS45LjMKKwoKZGlmZiAtLWdp dCBhLzA4NjUtZ3N0cmVhbWVyLWNsZWFuaW5nLXVwLXJlc291cmNlcy5wYXRjaCBiLzA4NjUtZ3N0 cmVhbWVyLWNsZWFuaW5nLXVwLXJlc291cmNlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi44ZWYwN2VjCi0tLSAvZGV2L251bGwKKysrIGIvMDg2NS1nc3RyZWFtZXIt Y2xlYW5pbmctdXAtcmVzb3VyY2VzLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK0Zyb20gNmQ2NmQx MTA0NmJiNTI2ZDUwOGU5NTQzZWNjMzdjZmVlOTFmNDQzNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIw MDEKK0Zyb206IERpcmsgVmFuIEhhZXJlbmJvcmdoIDxkaXJrLnZhbmhhZXJlbmJvcmdoQGhvZ2Vu dC5iZT4KK0RhdGU6IFdlZCwgMTIgSnVuIDIwMTMgMTY6NTg6MTYgKzAyMDAKK1N1YmplY3Q6IFtQ QVRDSCAwODY1LzMxNTJdIGdzdHJlYW1lcjogY2xlYW5pbmcgdXAgcmVzb3VyY2VzCisKKy0tLQor IG1vZHVsZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAgfCA0MiArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCsp CisKK2RpZmYgLS1naXQgYS9tb2R1bGVzL2hpZ2hndWkvc3JjL2NhcF9nc3RyZWFtZXIuY3BwIGIv bW9kdWxlcy9oaWdoZ3VpL3NyYy9jYXBfZ3N0cmVhbWVyLmNwcAoraW5kZXggYjhmNGViOC4uYTM0 N2E3NCAxMDA2NDQKKy0tLSBhL21vZHVsZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAK KysrKyBiL21vZHVsZXMvaGlnaGd1aS9zcmMvY2FwX2dzdHJlYW1lci5jcHAKK0BAIC0xMDMwLDYg KzEwMzAsMTkgQEAgdm9pZCBDdlZpZGVvV3JpdGVyX0dTdHJlYW1lcjo6Y2xvc2UoKQorICAgICAg ICAgaGFuZGxlTWVzc2FnZShwaXBlbGluZSk7CisgCisgICAgICAgICBnc3Rfb2JqZWN0X3VucmVm IChHU1RfT0JKRUNUIChwaXBlbGluZSkpOworKworKyAgICAgICAgaWYgKHNvdXJjZSkKKysgICAg ICAgICAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoc291cmNlKSk7CisrCisrICAgICAg ICBpZiAoZW5jb2RlYmluKQorKyAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNU IChlbmNvZGViaW4pKTsKKysKKysgICAgICAgIGlmIChmaWxlKQorKyAgICAgICAgICBnc3Rfb2Jq ZWN0X3VucmVmIChHU1RfT0JKRUNUIChmaWxlKSk7CisrCisrICAgICAgICBpZiAoYnVmZmVyKQor KyAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChidWZmZXIpKTsKKysKKyAg ICAgfQorIH0KKyAKK0BAIC0xMTU1LDYgKzExNjgsMzUgQEAgYm9vbCBDdlZpZGVvV3JpdGVyX0dT dHJlYW1lcjo6b3BlbiggY29uc3QgY2hhciAqIGZpbGVuYW1lLCBpbnQgZm91cmNjLAorICAgICAg ICAgICAgIHNvdXJjZSA9IGdzdF9iaW5fZ2V0X2J5X25hbWUoR1NUX0JJTihlbmNvZGViaW4pLCAi YXBwc3JjMCIpOworICAgICAgICAgfQorIAorKy8vICAgICAgICBHc3RJdGVyYXRvciAqaXQgPSBn c3RfYmluX2l0ZXJhdGVfc291cmNlcyAoR1NUX0JJTihlbmNvZGViaW4pKTsKKysKKysKKysvLyAg ICAgICAgZ2Jvb2xlYW4gZG9uZSA9IEZBTFNFOworKy8vICAgICAgICBHc3RFbGVtZW50ICppdGVt ID0gTlVMTDsKKysKKysvLyAgICAgICAgd2hpbGUgKCFkb25lKSB7CisrLy8gICAgICAgICAgc3dp dGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSkgeworKy8vICAgICAgICAgICAgY2Fz ZSBHU1RfSVRFUkFUT1JfT0s6CisrLy8gICAgICAgICAgICAgIHNvdXJjZSA9IGl0ZW07CisrLy8g ICAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGl0ZW0pOworKy8vICAgICAgICAgICAgICBk b25lID0gVFJVRTsKKysvLyAgICAgICAgICAgICAgYnJlYWs7CisrLy8gICAgICAgICAgICBjYXNl IEdTVF9JVEVSQVRPUl9SRVNZTkM6CisrLy8gICAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5 bmMgKGl0KTsKKysvLyAgICAgICAgICAgICAgYnJlYWs7CisrLy8gICAgICAgICAgICBjYXNlIEdT VF9JVEVSQVRPUl9FUlJPUjoKKysvLyAgICAgICAgICAgICAgZG9uZSA9IFRSVUU7CisrLy8gICAg ICAgICAgICAgIGJyZWFrOworKy8vICAgICAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToK KysvLyAgICAgICAgICAgICAgZG9uZSA9IFRSVUU7CisrLy8gICAgICAgICAgICAgIGJyZWFrOwor Ky8vICAgICAgICAgIH0KKysvLyAgICAgICAgfQorKy8vICAgICAgICBnc3RfaXRlcmF0b3JfZnJl ZSAoaXQpOworKworKworKworKworICAgICAgICAgaWYgKCFzb3VyY2UpeworICAgICAgICAgICAg IENWX0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0cmVhbWVyOiBjYW5ub3QgZmluZCBhcHBzcmMgaW4g bWFudWFsIHBpcGVsaW5lXG4iKTsKKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CistLSAKKzEu OS4zCisKCmRpZmYgLS1naXQgYS8wODcxLWFsbG93LWZvci1hcmJpdHJhdHktbnVtYmVyLW9mLXNv dXJjZXMtYW5kLXNpbmtzLnBhdGNoIGIvMDg3MS1hbGxvdy1mb3ItYXJiaXRyYXR5LW51bWJlci1v Zi1zb3VyY2VzLWFuZC1zaW5rcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5hMjY0YTExCi0tLSAvZGV2L251bGwKKysrIGIvMDg3MS1hbGxvdy1mb3ItYXJiaXRyYXR5 LW51bWJlci1vZi1zb3VyY2VzLWFuZC1zaW5rcy5wYXRjaApAQCAtMCwwICsxLDE2NSBAQAorRnJv bSAzMGY3Zjk3MTdmMWYwYThjMTFiYTg4ZDRmMDRiMGM3Y2YyNmJiYTcwIE1vbiBTZXAgMTcgMDA6 MDA6MDAgMjAwMQorRnJvbTogRGlyayBWYW4gSGFlcmVuYm9yZ2ggPGRpcmsudmFuaGFlcmVuYm9y Z2hAaG9nZW50LmJlPgorRGF0ZTogVGh1LCAxMyBKdW4gMjAxMyAxMToxNjozMyArMDIwMAorU3Vi amVjdDogW1BBVENIIDA4NzEvMzE1Ml0gYWxsb3cgZm9yIGFyYml0cmF0eSBudW1iZXIgb2Ygc291 cmNlcyBhbmQgc2lua3MKKworLS0tCisgbW9kdWxlcy9oaWdoZ3VpL3NyYy9jYXBfZ3N0cmVhbWVy LmNwcCB8IDExMCArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNo YW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDQ1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEv bW9kdWxlcy9oaWdoZ3VpL3NyYy9jYXBfZ3N0cmVhbWVyLmNwcCBiL21vZHVsZXMvaGlnaGd1aS9z cmMvY2FwX2dzdHJlYW1lci5jcHAKK2luZGV4IGEzNDdhNzQuLjRkNGRjNzEgMTAwNjQ0CistLS0g YS9tb2R1bGVzL2hpZ2hndWkvc3JjL2NhcF9nc3RyZWFtZXIuY3BwCisrKysgYi9tb2R1bGVzL2hp Z2hndWkvc3JjL2NhcF9nc3RyZWFtZXIuY3BwCitAQCAtNjUxLDE3ICs2NTEsNDcgQEAgYm9vbCBD dkNhcHR1cmVfR1N0cmVhbWVyOjpvcGVuKCBpbnQgdHlwZSwgY29uc3QgY2hhciogZmlsZW5hbWUg KQorIAorICAgICBpZihtYW51YWxwaXBlbGluZSkKKyAgICAgeworKyAgICAgICAgR3N0SXRlcmF0 b3IgKml0ID0gTlVMTDsKKyAjaWYgR1NUX1ZFUlNJT05fTUFKT1IgPT0gMAorLSAgICAgICAgR3N0 SXRlcmF0b3IgKml0ID0gZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzKEdTVF9CSU4odXJpZGVjb2RlYmlu KSk7CisrICAgICAgICBpdCA9IGdzdF9iaW5faXRlcmF0ZV9zaW5rcyhHU1RfQklOKHVyaWRlY29k ZWJpbikpOworICAgICAgICAgaWYoZ3N0X2l0ZXJhdG9yX25leHQoaXQsIChncG9pbnRlciAqKSZz aW5rKSAhPSBHU1RfSVRFUkFUT1JfT0spIHsKKyAgICAgICAgICAgICBDVl9FUlJPUihDVl9TdHNF cnJvciwgIkdTdHJlYW1lcjogY2Fubm90IGZpbmQgYXBwc2luayBpbiBtYW51YWwgcGlwZWxpbmVc biIpOworICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgIH0KKyAjZWxzZQorLSAg ICAgICAgc2luayA9IGdzdF9iaW5fZ2V0X2J5X25hbWUoR1NUX0JJTih1cmlkZWNvZGViaW4pLCAi b3BlbmN2c2luayIpOworLSAgICAgICAgaWYgKCFzaW5rKXsKKy0gICAgICAgICAgICBzaW5rID0g Z3N0X2Jpbl9nZXRfYnlfbmFtZShHU1RfQklOKHVyaWRlY29kZWJpbiksICJhcHBzaW5rMCIpOwor KyAgICAgICAgaXQgPSBnc3RfYmluX2l0ZXJhdGVfc2lua3MgKEdTVF9CSU4odXJpZGVjb2RlYmlu KSk7CisrCisrICAgICAgICBnYm9vbGVhbiBkb25lID0gRkFMU0U7CisrICAgICAgICBHc3RFbGVt ZW50ICplbGVtZW50ID0gTlVMTDsKKysgICAgICAgIGdjaGFyKiBuYW1lID0gTlVMTDsKKysgICAg ICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsKKysKKysgICAgICAgIHdoaWxlICghZG9u ZSkgeworKyAgICAgICAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJnZhbHVlKSkg eworKyAgICAgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgorKyAgICAgICAgICAgICAgZWxl bWVudCA9IEdTVF9FTEVNRU5UIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWx1ZSkpOworKyAgICAg ICAgICAgICAgbmFtZSA9IGdzdF9lbGVtZW50X2dldF9uYW1lKGVsZW1lbnQpOworKyAgICAgICAg ICAgICAgaWYgKG5hbWUpeworKyAgICAgICAgICAgICAgICBpZihzdHJzdHIobmFtZSwgIm9wZW5j dnNpbmsiKSAhPSBOVUxMIHx8IHN0cnN0cihuYW1lLCAiYXBwc2luayIpICE9IE5VTEwpIHsKKysg ICAgICAgICAgICAgICAgICBzaW5rID0gR1NUX0VMRU1FTlQgKCBnc3Rfb2JqZWN0X3JlZiAoZWxl bWVudCkgKTsKKysgICAgICAgICAgICAgICAgICBkb25lID0gVFJVRTsKKysgICAgICAgICAgICAg ICAgfQorKyAgICAgICAgICAgICAgICBnX2ZyZWUobmFtZSk7CisrICAgICAgICAgICAgICB9Cisr ICAgICAgICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOworKworKyAgICAgICAgICAgICAg YnJlYWs7CisrICAgICAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgorKyAgICAgICAg ICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOworKyAgICAgICAgICAgICAgYnJlYWs7Cisr ICAgICAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6CisrICAgICAgICAgICAgY2FzZSBH U1RfSVRFUkFUT1JfRE9ORToKKysgICAgICAgICAgICAgIGRvbmUgPSBUUlVFOworKyAgICAgICAg ICAgICAgYnJlYWs7CisrICAgICAgICAgIH0KKyAgICAgICAgIH0KKysgICAgICAgIGdzdF9pdGVy YXRvcl9mcmVlIChpdCk7CisrCisgCisgICAgICAgICBpZiAoIXNpbmspeworICAgICAgICAgICAg IENWX0VSUk9SKENWX1N0c0Vycm9yLCAiR1N0cmVhbWVyOiBjYW5ub3QgZmluZCBhcHBzaW5rIGlu IG1hbnVhbCBwaXBlbGluZVxuIik7CitAQCAtMTAzNCwxNSArMTA2NCw4IEBAIHZvaWQgQ3ZWaWRl b1dyaXRlcl9HU3RyZWFtZXI6OmNsb3NlKCkKKyAgICAgICAgIGlmIChzb3VyY2UpCisgICAgICAg ICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHNvdXJjZSkpOworIAorLSAgICAgICAg aWYgKGVuY29kZWJpbikKKy0gICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAo ZW5jb2RlYmluKSk7CistCisgICAgICAgICBpZiAoZmlsZSkKKyAgICAgICAgICAgZ3N0X29iamVj dF91bnJlZiAoR1NUX09CSkVDVCAoZmlsZSkpOworLQorLSAgICAgICAgaWYgKGJ1ZmZlcikKKy0g ICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoYnVmZmVyKSk7CistCisgICAg IH0KKyB9CisgCitAQCAtMTE0MCw5ICsxMTYzLDcgQEAgYm9vbCBDdlZpZGVvV3JpdGVyX0dTdHJl YW1lcjo6b3BlbiggY29uc3QgY2hhciAqIGZpbGVuYW1lLCBpbnQgZm91cmNjLAorICAgICBHc3RF bmNvZGluZ1ZpZGVvUHJvZmlsZSogdmlkZW9wcm9maWxlID0gTlVMTDsKKyAjZW5kaWYKKyAKKy0j aWYgR1NUX1ZFUlNJT05fTUFKT1IgPT0gMAorICAgICBHc3RJdGVyYXRvciAqaXQgPSBOVUxMOwor LSNlbmRpZgorIAorICAgICAvLyB3ZSBmaXJzdCB0cnkgdG8gY29uc3RydWN0IGEgcGlwZWxpbmUg ZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nLgorICAgICAvLyBpZiB0aGF0IGZhaWxzLCB3ZSBhc3N1bWUg aXQgaXMgYW4gb3JkaW5hcnkgZmlsZW5hbWUKK0BAIC0xMTYzLDM5ICsxMTg0LDM4IEBAIGJvb2wg Q3ZWaWRlb1dyaXRlcl9HU3RyZWFtZXI6Om9wZW4oIGNvbnN0IGNoYXIgKiBmaWxlbmFtZSwgaW50 IGZvdXJjYywKKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgI2Vsc2UK Ky0gICAgICAgIHNvdXJjZSA9IGdzdF9iaW5fZ2V0X2J5X25hbWUoR1NUX0JJTihlbmNvZGViaW4p LCAib3BlbmN2c3JjIik7CistICAgICAgICBpZiAoIXNvdXJjZSl7CistICAgICAgICAgICAgc291 cmNlID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZShHU1RfQklOKGVuY29kZWJpbiksICJhcHBzcmMwIik7 CisrICAgICAgICBpdCA9IGdzdF9iaW5faXRlcmF0ZV9zb3VyY2VzIChHU1RfQklOKGVuY29kZWJp bikpOworKworKyAgICAgICAgZ2Jvb2xlYW4gZG9uZSA9IEZBTFNFOworKyAgICAgICAgR3N0RWxl bWVudCAqZWxlbWVudCA9IE5VTEw7CisrICAgICAgICBnY2hhciogbmFtZSA9IE5VTEw7CisrICAg ICAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisrCisrICAgICAgICB3aGlsZSAoIWRv bmUpIHsKKysgICAgICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2YWx1ZSkp IHsKKysgICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKKysgICAgICAgICAgICAgIGVs ZW1lbnQgPSBHU1RfRUxFTUVOVCAoZ192YWx1ZV9nZXRfb2JqZWN0ICgmdmFsdWUpKTsKKysgICAg ICAgICAgICAgIG5hbWUgPSBnc3RfZWxlbWVudF9nZXRfbmFtZShlbGVtZW50KTsKKysgICAgICAg ICAgICAgIGlmIChuYW1lKXsKKysgICAgICAgICAgICAgICAgaWYoc3Ryc3RyKG5hbWUsICJvcGVu Y3ZzcmMiKSAhPSBOVUxMIHx8IHN0cnN0cihuYW1lLCAiYXBwc3JjIikgIT0gTlVMTCkgeworKyAg ICAgICAgICAgICAgICAgIHNvdXJjZSA9IEdTVF9FTEVNRU5UICggZ3N0X29iamVjdF9yZWYgKGVs ZW1lbnQpICk7CisrICAgICAgICAgICAgICAgICAgZG9uZSA9IFRSVUU7CisrICAgICAgICAgICAg ICAgIH0KKysgICAgICAgICAgICAgICAgZ19mcmVlKG5hbWUpOworKyAgICAgICAgICAgICAgfQor KyAgICAgICAgICAgICAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKKysKKysgICAgICAgICAgICAg IGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKysgICAgICAg ICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKKysgICAgICAgICAgICAgIGJyZWFrOwor KyAgICAgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgorKyAgICAgICAgICAgIGNhc2Ug R1NUX0lURVJBVE9SX0RPTkU6CisrICAgICAgICAgICAgICBkb25lID0gVFJVRTsKKysgICAgICAg ICAgICAgIGJyZWFrOworKyAgICAgICAgICB9CisgICAgICAgICB9CistCistLy8gICAgICAgIEdz dEl0ZXJhdG9yICppdCA9IGdzdF9iaW5faXRlcmF0ZV9zb3VyY2VzIChHU1RfQklOKGVuY29kZWJp bikpOworLQorLQorLS8vICAgICAgICBnYm9vbGVhbiBkb25lID0gRkFMU0U7CistLy8gICAgICAg IEdzdEVsZW1lbnQgKml0ZW0gPSBOVUxMOworLQorLS8vICAgICAgICB3aGlsZSAoIWRvbmUpIHsK Ky0vLyAgICAgICAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJml0ZW0pKSB7Cist Ly8gICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKKy0vLyAgICAgICAgICAgICAgc291 cmNlID0gaXRlbTsKKy0vLyAgICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoaXRlbSk7Cist Ly8gICAgICAgICAgICAgIGRvbmUgPSBUUlVFOworLS8vICAgICAgICAgICAgICBicmVhazsKKy0v LyAgICAgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKy0vLyAgICAgICAgICAgICAg Z3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOworLS8vICAgICAgICAgICAgICBicmVhazsKKy0vLyAg ICAgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgorLS8vICAgICAgICAgICAgICBkb25l ID0gVFJVRTsKKy0vLyAgICAgICAgICAgICAgYnJlYWs7CistLy8gICAgICAgICAgICBjYXNlIEdT VF9JVEVSQVRPUl9ET05FOgorLS8vICAgICAgICAgICAgICBkb25lID0gVFJVRTsKKy0vLyAgICAg ICAgICAgICAgYnJlYWs7CistLy8gICAgICAgICAgfQorLS8vICAgICAgICB9CistLy8gICAgICAg IGdzdF9pdGVyYXRvcl9mcmVlIChpdCk7CistCistCistCisrICAgICAgICBnc3RfaXRlcmF0b3Jf ZnJlZSAoaXQpOworIAorICAgICAgICAgaWYgKCFzb3VyY2UpeworICAgICAgICAgICAgIENWX0VS Uk9SKENWX1N0c0Vycm9yLCAiR1N0cmVhbWVyOiBjYW5ub3QgZmluZCBhcHBzcmMgaW4gbWFudWFs IHBpcGVsaW5lXG4iKTsKKy0tIAorMS45LjMKKwoKZGlmZiAtLWdpdCBhL29wZW5jdi5zcGVjIGIv b3BlbmN2LnNwZWMKaW5kZXggM2U4YTFjMy4uMGJlYzk3MCAxMDA2NDQKLS0tIGEvb3BlbmN2LnNw ZWMKKysrIGIvb3BlbmN2LnNwZWMKQEAgLTIsNyArMiw3IEBACiAKIE5hbWU6ICAgICAgICAgICBv cGVuY3YKIFZlcnNpb246ICAgICAgICAyLjQuOQotUmVsZWFzZTogICAgICAgIDElez9kaXN0fQor UmVsZWFzZTogICAgICAgIDIlez9kaXN0fQogU3VtbWFyeTogICAgICAgIENvbGxlY3Rpb24gb2Yg YWxnb3JpdGhtcyBmb3IgY29tcHV0ZXIgdmlzaW9uCiBHcm91cDogICAgICAgICAgRGV2ZWxvcG1l bnQvTGlicmFyaWVzCiAjIFRoaXMgaXMgbm9ybWFsIHRocmVlIGNsYXVzZSBCU0QuCkBAIC0yNCw2 ICsyNCwxNyBAQCBQYXRjaDM6ICAgICAgICAgb3BlbmN2LTIuNC45LXRzX3N0YXRpYy5wYXRjaAog IyBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vMTAzMTMxMgogUGF0Y2g0OiAgICAgICAgIG9w ZW5jdi0yLjQuNy1jbWFrZV9wYXRocy5wYXRjaAogCisjIHJlbGV2YW50IGdzdDEtcmVsYXRlZCBw YXRjaGVzIGZyb20gdXBzdHJlYW0gbWFzdGVyIGJyYW5jaAorJWlmIDAlez9mZWRvcmF9ID4gMjAK KyVnbG9iYWwgZ3N0MSAxCislZW5kaWYKKyMgMDU1MCBuZWVkZWQgc2xpZ2h0IHJlYmFzaW5nIC0t IHJleAorUGF0Y2gxMDogMDU1MC1ib21iLWNvbW1pdC1vZi1nc3RyZWFtZXItdmlkZW9jYXB0dXJl LWFuZC12aWRlb3dyaXRlLnBhdGNoCitQYXRjaDExOiAwNTUyLWVsaW1pbmF0ZWQtd2FybmluZ3Mu cGF0Y2gKK1BhdGNoMTI6IDA1ODctRml4LWJ1aWxkLXdpdGgtZ3N0cmVhbWVyLTAuMTAuMjgucGF0 Y2gKK1BhdGNoMTM6IDA4NjUtZ3N0cmVhbWVyLWNsZWFuaW5nLXVwLXJlc291cmNlcy5wYXRjaAor UGF0Y2gxNDogMDg3MS1hbGxvdy1mb3ItYXJiaXRyYXR5LW51bWJlci1vZi1zb3VyY2VzLWFuZC1z aW5rcy5wYXRjaAorCiBCdWlsZFJlcXVpcmVzOiAgbGlidG9vbAogQnVpbGRSZXF1aXJlczogIGNt YWtlID49IDIuNi4zCiBCdWlsZFJlcXVpcmVzOiAgY2hycGF0aApAQCAtNjMsNyArNzQsMTEgQEAg QnVpbGRSZXF1aXJlczogIHB5dGhvbjItZGV2ZWwKIEJ1aWxkUmVxdWlyZXM6ICBudW1weSwgc3dp ZyA+PSAxLjMuMjQKIEJ1aWxkUmVxdWlyZXM6ICBweXRob24tc3BoaW54CiAlez9fd2l0aF9mZm1w ZWc6QnVpbGRSZXF1aXJlczogIGZmbXBlZy1kZXZlbCA+PSAwLjQuOX0KKyVpZiAwJXs/Z3N0MX0K KyV7IT9fd2l0aG91dF9nc3RyZWFtZXI6QnVpbGRSZXF1aXJlczogIGdzdHJlYW1lcjEtZGV2ZWwg Z3N0cmVhbWVyMS1wbHVnaW5zLWJhc2UtZGV2ZWx9CislZWxzZQogJXshP193aXRob3V0X2dzdHJl YW1lcjpCdWlsZFJlcXVpcmVzOiAgZ3N0cmVhbWVyLWRldmVsIGdzdHJlYW1lci1wbHVnaW5zLWJh c2UtZGV2ZWx9CislZW5kaWYKICV7P193aXRoX3hpbmU6QnVpbGRSZXF1aXJlczogIHhpbmUtbGli LWRldmVsfQogQnVpbGRSZXF1aXJlczogIG9wZW5jbC1oZWFkZXJzCiAKQEAgLTEyMCw2ICsxMzUs MTQgQEAgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIFB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIE9wZW5D ViBsaWJyYXJ5LgogJXBhdGNoMyAtcDEgLWIgLnRzX3N0YXRpYwogJXBhdGNoNCAtcDEgLWIgLmNt YWtlX3BhdGhzCiAKKyVpZiAwJXs/Z3N0MX0KKyVwYXRjaDEwIC1wMSAtYiAuMTAKKyVwYXRjaDEx IC1wMSAtYiAuMTEKKyVwYXRjaDEyIC1wMSAtYiAuMTIKKyVwYXRjaDEzIC1wMSAtYiAuMTMKKyVw YXRjaDE0IC1wMSAtYiAuMTQKKyVlbmRpZgorCiAjIGZpeCBkb3MgZW5kIG9mIGxpbmVzCiBzZWQg LWkgJ3N8XHJ8fGcnICBzYW1wbGVzL2MvYWRhcHRpdmVza2luZGV0ZWN0b3IuY3BwCiAKQEAgLTI1 MCw2ICsyNzMsOSBAQCBwb3BkCiAle3B5dGhvbjJfc2l0ZWFyY2h9L2N2Mi5zbwogCiAlY2hhbmdl bG9nCisqIEZyaSBKdWwgMjUgMjAxNCBSZXggRGlldGVyIDxyZGlldGVyQGZlZG9yYXByb2plY3Qu b3JnPiAyLjQuOS0yCistIGJhY2twb3J0IHN1cHBvcnQgZm9yIEdTdHJlYW1lciAxICgjMTEyMzA3 OCkKKwogKiBUaHUgSnVsIDAzIDIwMTQgTmljb2xhcyBDaGF1dmV0IDxrd2l6YXJ0QGdtYWlsLmNv bT4gLSAyLjQuOS0xCiAtIFVwZGF0ZSB0byAyLjQuOQogCg==