From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id BC67A465CD for ; Thu, 22 Jun 2023 01:06:34 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F3E4268C0C9; Thu, 22 Jun 2023 04:06:31 +0300 (EEST) Received: from mail-qk1-f171.google.com (mail-qk1-f171.google.com [209.85.222.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9F53B68A531 for ; Thu, 22 Jun 2023 04:06:25 +0300 (EEST) Received: by mail-qk1-f171.google.com with SMTP id af79cd13be357-763c0989d45so22521885a.0 for ; Wed, 21 Jun 2023 18:06:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687395984; x=1689987984; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=fIJdPHZYW8IcAQRAUK9ExlYLNU/rf9sGi8gdpg6tJMo=; b=HePro1oURRHpFVKJuGgD8Rxse61ZA5ZeA4TMFrdgGAR+SsQ62jr9NNZyE+Id1gT8+u kOxzmzDIADetdyKbpNAAKH7UAn4wNG1G4H8izGPzcIQheRMsy3eGSHiV9bbtWNMZAJG1 urOpo/GZHaIV6V3Ur7osqikMj+r4vNabT/CWAsEhXs0mBMfm+J1PdNcy9l9LEbXmxCmZ P/wSM1c8n8H23/27MMDQIOV20Lfpp3FWWjGbe25fHb75Dy+MCk/VbFpIqD6MqI9HBFv9 UvhDqf0+gatA+dlzHuAiCsX9mtueE/QZnukPzmDyVnNDySiAVhZWInih6DeEPLdBjXx3 cM6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687395984; x=1689987984; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=fIJdPHZYW8IcAQRAUK9ExlYLNU/rf9sGi8gdpg6tJMo=; b=RAu8pdLtLSrX4edoYk0WkJwXRHibXHPU7BZY0WmCWmF6zPhbTZyoI2JD2CIUUi/Xqy BAFhH7T/jtQ5wQwTAbx866E9rpBHg/aN2Xg9euhDKgrq9GBCf58R/2qV921On+jBB334 7HKrplr42gp1i0nnEjapYbUmiWZKKHArbIYyf5Dt3GTH/aJFGeL6/rXj6dtWgAw7XHyC s3rqWSONamqawZHF4cMYh+yP0hPlKF0p12lsm+csD6JlOnBT8xea2NqBse49VnnhoJyL HJfAtF+4UoTfb5k1wMoJkSNUTy+4lX+S1800frNXqwqYXF/kUDrTuathS2k/RnjagafI Ft1g== X-Gm-Message-State: AC+VfDyOA2n/rspvoB9lXWRg8HxFX8C/0v2gLNWfJz0Sr9vJSBiES0fy ilGpZgZYNaS5GW4RxhQxCY1ntTNJKM4= X-Google-Smtp-Source: ACHHUZ4rdfSC3JU2JKhwlQVzXrkrlkvCFONRgA8LtAx+DCstVxSb7JWLS/fUnane0fcUJ+3hgBSmIw== X-Received: by 2002:a05:620a:444c:b0:763:a1d3:196d with SMTP id w12-20020a05620a444c00b00763a1d3196dmr12573292qkp.0.1687395984106; Wed, 21 Jun 2023 18:06:24 -0700 (PDT) Received: from [192.168.1.35] (c-98-224-219-15.hsd1.mi.comcast.net. [98.224.219.15]) by smtp.gmail.com with ESMTPSA id y191-20020a81a1c8000000b0056d31a089e9sm1478226ywg.126.2023.06.21.18.06.23 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 21 Jun 2023 18:06:23 -0700 (PDT) Message-ID: <4c842347-9cec-5205-36f4-9da7355d6c28@gmail.com> Date: Wed, 21 Jun 2023 21:06:23 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 To: ffmpeg-devel@ffmpeg.org References: <20230622004313.69697-1-leo.izen@gmail.com> <20230622004313.69697-2-leo.izen@gmail.com> <1828a416-62ca-9cf2-d774-845574a88796@gmail.com> Content-Language: en-US-large From: Leo Izen In-Reply-To: <1828a416-62ca-9cf2-d774-845574a88796@gmail.com> Subject: Re: [FFmpeg-devel] [PATCH v2 1/3] avcodec/jpegxl_parser: add JPEG XL parser X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gNi8yMS8yMyAyMDo1OSwgSmFtZXMgQWxtZXIgd3JvdGU6Cj4gT24gNi8yMS8yMDIzIDk6NDMg UE0sIExlbyBJemVuIHdyb3RlOgo+PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9qcGVneGxfcGFy c2UuYyBiL2xpYmF2Y29kZWMvanBlZ3hsX3BhcnNlLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK Pj4gaW5kZXggMDAwMDAwMDAwMC4uYmUzNjBhY2IwOAo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBi L2xpYmF2Y29kZWMvanBlZ3hsX3BhcnNlLmMKPj4gQEAgLTAsMCArMSwyMiBAQAo+PiArLyoKPj4g KyAqIEpQRUcgWEwgSGVhZGVyIFBhcnNlcgo+PiArICogQ29weXJpZ2h0IChjKSAyMDIzIExlbyBJ emVuPGxlby5pemVuQGdtYWlsLmNvbT4KPj4gKyAqCj4+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiBGRm1wZWcuCj4+ICsgKgo+PiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+PiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+PiArICogTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4+ICsgKiB2ZXJzaW9u IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KPj4gKyAqCj4+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZSBHTlUKPj4gKyAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiAr ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwo+PiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+PiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAKPj4gMDIxMTAtMTMwMSBVU0EKPj4g KyAqLwo+PiArCj4+ICsjaW5jbHVkZSAianBlZ3hsX3BhcnNlLmgiCj4gCj4gVGhpcyBpcyBhIHJl YWxseSB3ZWlyZCB3YXkgdG8gYWNoaWV2ZSBjb2RlIHNoYXJpbmcgYmV0d2VlbiBsaWJyYXJpZXMu Cj4gV2hhdCB5b3UgbmFtZWQganBlZ3hsX3BhcnNlLmggc2hvdWxkIGJlIGpwZWd4bF9wYXJzZS5j IGluc3RlYWQsIGFuZCAKPiBqcGVneGxfcGFyc2UuaCBzaG91bGQgb25seSBoYXZlIHRoZSBwcm90 b3R5cGVzIGZvciAKPiBmZl9qcGVneGxfY29sbGVjdF9jb2Rlc3RyZWFtX2hlYWRlcigpIGFuZCAK PiBmZl9qcGVneGxfcGFyc2VfY29kZXN0cmVhbV9oZWFkZXIoKSwgcGx1cyB0aGUgZGVmaW5pdGlv biBvZiAKPiBGRkpYTE1ldGFkYXRhLiBUaGUgZW51bXMgY2FuIHN0YXkgaW4ganBlZ3hsLmgsIGFu ZCB0aGV5IGZvciB0aGF0IG1hdHRlciAKPiBkb24ndCBuZWVkIHRoZSBGRl8gcHJlZml4LgoKClRo aXMgaXMgYmFzZWQgb24gSkVFQidzIHJlY29tbWVuZGF0aW9uLiBIZSBwcm92aWRlZCB0aGVzZSBh cyBleGFtcGxlczoKCmh0dHBzOi8vZ2l0aHViLmNvbS9qZWViL2ZmbXBlZy9jb21taXQvYjc0ZTQ3 YzRmZjViY2E5OTg5MzZjMGQ4YjlhMDg5MjEwNGE3NDAzZApodHRwczovL2dpdGh1Yi5jb20vamVl Yi9mZm1wZWcvY29tbWl0L2Q3YTc1ZDIxNjM1ZWFiNGY0YTFlZmVhMjI5NDU5MzMwNTljMmUzNmYK CkhvdyBlbHNlIHNob3VsZCBJIGRvIGl0PyBJZiBJIGRvIHRoZSB1c3VhbCB0aGluZyB3aGVyZSBJ IHB1dCBwcm90b3R5cGVzIAphbmQgc3RydWN0cyBpbiB0aGUgaGVhZGVyIGZpbGUgYW5kIHRoZSBp bXBsZW1lbnRhdGlvbiBpbiB0aGUgQyBmaWxlLCAKdGhlbiBJIHdvbid0IGJlIGFibGUgdG8gY29t cGlsZSB0aGVtIGludG8gYXZmb3JtYXQgYXMgd2VsbCwgYXMgaXQgd2lsbCAKanVzdCBncmFiIHRo ZSBzdHVicywgYW5kIHRoZSBmZl9mdW5jcyB3b24ndCBiZSBleHBvcnRlZCBmcm9tIGF2Y29kZWMu Cgo+IAo+PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9qcGVneGxfcGFyc2VyLmMgYi9saWJhdmNv ZGVjL2pwZWd4bF9wYXJzZXIuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAw MDAwMDAwLi4wOTZiMjJiZTBmCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvbGliYXZjb2RlYy9q cGVneGxfcGFyc2VyLmMKPj4gQEAgLTAsMCArMSwxNjUgQEAKPj4gKy8qCj4+ICsgKiBKUEVHIFhM IENvZGVjIFBhcnNlcgo+PiArICogQ29weXJpZ2h0IChjKSAyMDIzIExlbyBJemVuIDxsZW8uaXpl bkBnbWFpbC5jb20+Cj4+ICsgKgo+PiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ PiArICoKPj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKPj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+PiArICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ICsgKgo+ PiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgIFNlZSB0aGUgR05VCj4+ICsgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK Pj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKPj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgCj4+IDAyMTEwLTEzMDEgVVNBCj4+ICsgKi8KPj4gKwo+ PiArI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUuaCIKPj4gKwo+PiArI2luY2x1ZGUg ImNvZGVjX2lkLmgiCj4+ICsjaW5jbHVkZSAianBlZ3hsLmgiCj4+ICsjaW5jbHVkZSAicGFyc2Vy LmgiCj4+ICsKPj4gK3R5cGVkZWYgc3RydWN0IEpYTFBhcnNlQ29udGV4dCB7Cj4+ICvCoMKgwqAg UGFyc2VDb250ZXh0IHBjOwo+IAo+IFlvdSBkb24ndCBuZWVkIHRoaXMuIFlvdSdyZSBub3QgYXNz ZW1ibGluZyBhIHBhY2tldC4KPiAKPj4gK8KgwqDCoCBGRkpYTE1ldGFkYXRhIG1ldGE7Cj4+ICvC oMKgwqAgaW50IHBhcnNlZF9oZWFkZXI7Cj4+ICt9IEpYTFBhcnNlQ29udGV4dDsKPj4gKwo+PiAr c3RhdGljIGludCBqcGVneGxfcGFyc2UoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMsIEFWQ29kZWND b250ZXh0ICphdmN0eCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY29uc3QgdWludDhfdCAqKnBvdXRidWYsIGludCAqcG91dGJ1Zl9zaXplLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCB1aW50 OF90ICpidWYsIGludCBidWZfc2l6ZSkKPj4gK3sKPj4gK8KgwqDCoCBKWExQYXJzZUNvbnRleHQg KmN0eCA9IHMtPnByaXZfZGF0YTsKPj4gK8KgwqDCoCBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqAg KnBvdXRidWZfc2l6ZSA9IDA7Cj4+ICvCoMKgwqAgKnBvdXRidWYgPSBOVUxMOwo+PiArCj4+ICvC oMKgwqAgaWYgKCFjdHgtPnBhcnNlZF9oZWFkZXIpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChB Vl9STDY0KGJ1ZikgPT0gRkZfSlBFR1hMX0NPTlRBSU5FUl9TSUdOQVRVUkVfTEUpIHsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGNvcGllZDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdWludDhfdCBjb2Rlc3RyZWFtX2hlYWRlcls0MDk2XTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0ID0gZmZfanBlZ3hsX2NvbGxlY3RfY29kZXN0cmVhbV9oZWFkZXIoYnVmLCBidWZf c2l6ZSwgCj4+IGNvZGVzdHJlYW1faGVhZGVyLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCj4+IHNpemVvZihjb2Rlc3RyZWFtX2hlYWRl ciksICZjb3BpZWQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAvKiBjb3BpZWQgbWF5IGJlIGxhcmdlciB0aGFuIHRoZSBidWZzaXplIGlm IHN0dWZmIHdhcyAKPj4gc2tpcHBlZCAqLwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb3Bp ZWQgPSBGRk1JTihjb3BpZWQsIHNpemVvZihjb2Rlc3RyZWFtX2hlYWRlcikpOwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXQgPSAKPj4gZmZfanBlZ3hsX3BhcnNlX2NvZGVzdHJlYW1faGVh ZGVyKGNvZGVzdHJlYW1faGVhZGVyLCBjb3BpZWQsIDAsIAo+PiAmY3R4LT5tZXRhKTsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IGZmX2pwZWd4bF9wYXJzZV9jb2Rlc3RyZWFtX2hl YWRlcihidWYsIGJ1Zl9zaXplLCAxLCAKPj4gJmN0eC0+bWV0YSk7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlmIChyZXQgPCAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiByZXQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoCBhdmN0 eC0+d2lkdGggPSBjdHgtPm1ldGEud2lkdGg7Cj4+ICvCoMKgwqDCoMKgwqDCoCBhdmN0eC0+aGVp Z2h0ID0gY3R4LT5tZXRhLmhlaWdodDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgc3dpdGNoIChj dHgtPm1ldGEuY3NwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIEZGX0pQRUdYTF9DU19SR0I6 Cj4+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIEZGX0pQRUdYTF9DU19YWUI6Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGF2Y3R4LT5jb2xvcnNwYWNlID0gQVZDT0xfU1BDX1JHQjsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZWZhdWx0Ogo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdmN0eC0+Y29sb3JzcGFjZSA9IEFWQ09MX1NQQ19VTlNQ RUNJRklFRDsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWYg KGN0eC0+bWV0YS53cCA9PSBGRl9KUEVHWExfV1BfRDY1KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN3aXRjaCAoY3R4LT5tZXRhLnByaW1hcmllcykgewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjYXNlIEZGX0pQRUdYTF9QUl9TUkdCOgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMgPSBBVkNPTF9QUklfQlQ3MDk7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNhc2UgRkZfSlBFR1hMX1BSX1AzOgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMgPSBBVkNPTF9QUklfU01QVEU0MzI7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNhc2UgRkZfSlBFR1hMX1BSXzIxMDA6Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYXZjdHgtPmNvbG9yX3ByaW1hcmllcyA9IEFWQ09MX1BSSV9CVDIwMjA7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGRlZmF1bHQ6Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZjdHgt PmNvbG9yX3ByaW1hcmllcyA9IEFWQ09MX1BSSV9VTlNQRUNJRklFRDsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlIGlmIChjdHgtPm1ldGEud3Ag PT0gRkZfSlBFR1hMX1dQX0RDSSAmJiAKPj4gY3R4LT5tZXRhLnByaW1hcmllcyA9PSBGRl9KUEVH WExfUFJfUDMpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZjdHgtPmNvbG9yX3ByaW1h cmllcyA9IEFWQ09MX1BSSV9TTVBURTQzMTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2Y3R4LT5jb2xvcl9wcmltYXJpZXMgPSBBVkNPTF9Q UklfVU5TUEVDSUZJRUQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDC oMKgIGlmIChjdHgtPm1ldGEudHJjID4gRkZfSlBFR1hMX1RSX0dBTU1BKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIEZGSlhMVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyB0cmMgPSBjdHgtPm1l dGEudHJjIC0gCj4+IEZGX0pQRUdYTF9UUl9HQU1NQTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3dpdGNoICh0cmMpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2FzZSBGRl9KUEVH WExfVFJfQlQ3MDk6Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZjdHgtPmNv bG9yX3RyYyA9IEFWQ09MX1RSQ19CVDcwOTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBicmVhazsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2FzZSBGRl9KUEVHWExfVFJf TElORUFSOgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2Y3R4LT5jb2xvcl90 cmMgPSBBVkNPTF9UUkNfTElORUFSOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGJyZWFrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjYXNlIEZGX0pQRUdYTF9UUl9TUkdC Ogo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2Y3R4LT5jb2xvcl90cmMgPSBB VkNPTF9UUkNfSUVDNjE5NjZfMl8xOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGJyZWFrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjYXNlIEZGX0pQRUdYTF9UUl9QUToK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdmN0eC0+Y29sb3JfdHJjID0gQVZD T0xfVFJDX1NNUFRFU1QyMDg0Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJy ZWFrOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjYXNlIEZGX0pQRUdYTF9UUl9EQ0k6Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZjdHgtPmNvbG9yX3RyYyA9IEFWQ09M X1RSQ19TTVBURTQyODsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2FzZSBGRl9KUEVHWExfVFJfSExHOgo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2Y3R4LT5jb2xvcl90cmMgPSBBVkNPTF9UUkNf QVJJQl9TVERfQjY3Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZWZhdWx0Ogo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGF2Y3R4LT5jb2xvcl90cmMgPSBBVkNPTF9UUkNfVU5TUEVDSUZJRUQ7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAo Y3R4LT5tZXRhLnRyYyA+IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGN0eC0+ bWV0YS50cmMgPiA0NTM1NSAmJiBjdHgtPm1ldGEudHJjIDwgNDU1NTUpCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZjdHgtPmNvbG9yX3RyYyA9IEFWQ09MX1RSQ19HQU1NQTIy Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlIGlmIChjdHgtPm1ldGEudHJjID4gMzU2 MTQgJiYgY3R4LT5tZXRhLnRyYyA8IDM1ODE0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGF2Y3R4LT5jb2xvcl90cmMgPSBBVkNPTF9UUkNfR0FNTUEyODsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2 Y3R4LT5jb2xvcl90cmMgPSBBVkNPTF9UUkNfVU5TUEVDSUZJRUQ7Cj4+ICvCoMKgwqDCoMKgwqDC oCB9IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdmN0eC0+Y29sb3JfdHJjID0g QVZDT0xfVFJDX1VOU1BFQ0lGSUVEOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAoY3R4LT5tZXRhLmNzcCA9PSBGRl9KUEVHWExfQ1NfR1JBWSkgewo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoY3R4LT5tZXRhLmJpdF9kZXB0aCA8PSA4KQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2Y3R4LT5waXhfZm10ID0gY3R4LT5tZXRh LmhhdmVfYWxwaGEgPyAKPj4gQVZfUElYX0ZNVF9ZQTggOiBBVl9QSVhfRk1UX0dSQVk4Oy4KPiAK PiBTZXQgcy0+Zm9ybWF0LCBub3QgYXZjdHgtPnBpeF9mbXQuIFRoZSBmb3JtYXQgaW4gYW4gQVZD b2RlY0NvbnRleHQgaXMgCj4gc2V0IGJ5IGEgZGVjb2Rlciwgd2hpY2ggbWF5IG5vdCBtYXRjaCB3 aGF0IHRoZSBwYXJzZXIgc2V0cy4KPiAKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZSBp ZiAoY3R4LT5tZXRhLmJpdF9kZXB0aCA8PSAxNikKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBhdmN0eC0+cGl4X2ZtdCA9IGN0eC0+bWV0YS5oYXZlX2FscGhhID8gCj4+IEFWX1BJ WF9GTVRfWUExNiA6IEFWX1BJWF9GTVRfR1JBWTE2Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZjdHgtPnBpeF9mbXQg PSBjdHgtPm1ldGEuaGF2ZV9hbHBoYSA/IAo+PiBBVl9QSVhfRk1UX05PTkUgOiBBVl9QSVhfRk1U X0dSQVlGMzI7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoY3R4LT5tZXRhLmJpdF9kZXB0aCA8PSA4KQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGF2Y3R4LT5waXhfZm10ID0gY3R4LT5tZXRhLmhhdmVfYWxwaGEgPyAK Pj4gQVZfUElYX0ZNVF9SR0JBIDogQVZfUElYX0ZNVF9SR0IyNDsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZWxzZSBpZiAoY3R4LT5tZXRhLmJpdF9kZXB0aCA8PSAxNikKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdmN0eC0+cGl4X2ZtdCA9IGN0eC0+bWV0YS5oYXZlX2Fs cGhhID8gCj4+IEFWX1BJWF9GTVRfUkdCQTY0IDogQVZfUElYX0ZNVF9SR0I0ODsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGF2Y3R4LT5waXhfZm10ID0gY3R4LT5tZXRhLmhhdmVfYWxwaGEgPyAKPj4gQVZfUElYX0ZNVF9S R0JBRjMyIDogQVZfUElYX0ZNVF9SR0JGMzI7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4g K8KgwqDCoMKgwqDCoMKgIGN0eC0+cGFyc2VkX2hlYWRlciA9IDE7Cj4gCj4gU28gdGhpcyBpcyBk b25lIG9uY2UgZm9yIHRoZSBlbnRpcmUgc3RyZWFtPwoKVGhhdCdzIHRoZSBpbnRlbnRpb24uCgo+ IAo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGN0eC0+cGMuZnJhbWVfc3RhcnRfZm91bmQg PSAxOwo+IAo+IFVubmVjZXNzYXJ5Lgo+IAo+PiArCj4+ICvCoMKgwqAgcmV0ID0gZmZfY29tYmlu ZV9mcmFtZSgmY3R4LT5wYywgRU5EX05PVF9GT1VORCwgJmJ1ZiwgJmJ1Zl9zaXplKTsKPiAKPiBB bHNvIHVubmVjZXNzYXJ5Lgo+IAo+PiArwqDCoMKgIGlmIChyZXQgPCAwKQo+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIGJ1Zl9zaXplOwo+PiArCj4+ICvCoMKgwqAgKnBvdXRidWYgPSBidWY7Cj4+ ICvCoMKgwqAgKnBvdXRidWZfc2l6ZSA9IGJ1Zl9zaXplOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJu IEVORF9OT1RfRk9VTkQ7Cj4gCj4gPz8/Cj4gCj4gVGhlIHByb2Nlc3Mgc3VjY2VlZGVkLiBSZXR1 cm4gMC4KCklmIEknbSBub3QgcGFja2V0aXppbmcsIEkgd2Fzbid0IHN1cmUgaWYgSSBjb3VsZCBy ZXR1cm4gYW55IG90aGVyIHZhbHVlLCAKYnV0IEkgY2FuIGNoYW5nZSBpdCB0byByZXR1cm4gMC4K Cj4gCj4+ICt9Cj4+ICsKPj4gK2NvbnN0IEFWQ29kZWNQYXJzZXIgZmZfanBlZ3hsX3BhcnNlciA9 IHsKPj4gK8KgwqDCoCAuY29kZWNfaWRzwqDCoMKgwqDCoCA9IHsgQVZfQ09ERUNfSURfSlBFR1hM IH0sCj4+ICvCoMKgwqAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKEpYTFBhcnNlQ29udGV4dCks Cj4+ICvCoMKgwqAgLnBhcnNlcl9wYXJzZcKgwqAgPSBqcGVneGxfcGFyc2UsCj4+ICvCoMKgwqAg LnBhcnNlcl9jbG9zZcKgwqAgPSBmZl9wYXJzZV9jbG9zZSwKPj4gK307Cj4gCj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBmZm1wZWctZGV2ZWwgbWFp bGluZyBsaXN0Cj4gZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKPiBodHRwczovL2ZmbXBlZy5vcmcv bWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKPiAKPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQg bGluayBhYm92ZSwgb3IgZW1haWwKPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdp dGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBm Zm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZl bAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZl bC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==