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 ESMTPS id A11B94A994 for ; Thu, 20 Feb 2025 13:07:01 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5CA1B68C2BE; Thu, 20 Feb 2025 15:06:57 +0200 (EET) Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6F50768C27A for ; Thu, 20 Feb 2025 15:06:50 +0200 (EET) Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-38f3486062eso765683f8f.0 for ; Thu, 20 Feb 2025 05:06:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740056809; x=1740661609; darn=ffmpeg.org; h=content-transfer-encoding:subject:from:to:content-language :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=x+GpPhEDI8x4OkvMc5OWffFl91hnEJ6kKQrqw0Zn5/E=; b=V4XclNq9gXGL3VdH9RF4f+AOQl3KF8Y4wrOInmITmziUOj1r23VL8N9HJXUOCfpnhO 9enPYakFqXIKDCvWFojZWGOEqvk6OVsrFEQHyK7Cw3Wc60tMPjBeTotE00jVlycBEJQj 2zVGxhXZi2T6gbKfOHb9VrRUbkhkOYC8kMHvxZfs91AjFQMp8jvb+0dT9LLfUReHPNvj omL3tn1+YbvFadG5mQCrlfnHKx2V3/evaKxV9hHPJ21GgLZliAOwE3tISu9zcHd/VAW1 SupkUUsjZ+ALmaJXA1fJbycdQsVasOAamL1n4o/py1ARd8wRw99/2wJ4QzUxx/ONrQTa 3UDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740056809; x=1740661609; h=content-transfer-encoding:subject:from:to:content-language :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=x+GpPhEDI8x4OkvMc5OWffFl91hnEJ6kKQrqw0Zn5/E=; b=kCrZSM2qnJ4EqmjhJpba552uo95Y5cA4MgjnvVs3KoUSdCBEhGsmVlxXtTcW43J0Zp ccttrna4me/5r21nDpRfyMNKmWW6+bPCHl/xKib8kRwU36ufAZaVuvjKblbVECRpiqCn SAkQoSAS80CMeQRkTt4aOz2oHORWwjQN0kwAKCcVAxAW7J++cfY+fVbu4/c6aG944m+N ekd32ynvlw2gbQHcoVxuAz7PVhhHU/gNK5vPfWhL7Tj2tXdwbAhopyRIxWjie9PREI/x 8FBE7l1m+j2LqhCEbUYKENws5YtVo69HvHkxjcA1/g0w5jMg0Dag1YVKCZQ7617qgdie veDQ== X-Gm-Message-State: AOJu0YyoXXs4e4py8I0FXA5lDRZWRJHQfLsBF1jqC76mLekKcw8Mbe/F jgj8fSCZ+ScXbGmNZjbHU24aruBySLRUc7iMxSLm5oZZiFlXS9rLeSRhNw== X-Gm-Gg: ASbGncvPi9SSvFzoszAL8tiKz7U4ewoFgs0heMAwsTM04iDYUI5nu6Dsyx7vO0rSQWx 5Mk/v1aerHiwJ+wkcCKud4wULc60CxkiEH11iwzQNqPwqbNCSrzOyQP6k0tij1s3ge1O9Ebi+iJ XpNfEGEpq/tJ6vz6MdSvAa5QtFjhttTSVQKbxA+Eyjs3aPUkZg7Pk7tWYoWzQa6ObM/918sPc3D /j7JCGhY4nWnlNyvgbeT+pxsnQ6kCXFXF1n8zAwd95cjGAONjhnAmxfHUbMTJnLpw20mEYf0Eqf Nonypw1jhE6FAOb46Q0FZ38C1P15gTG3XX75AjoRauTQselRqas2xa2uboSI/XI3 X-Google-Smtp-Source: AGHT+IHh1uboN2k9r3gHQFLaqmOKJuHYxT1VFNrOtA4E682mlhWahJnkHco4QwiRpk/hxSFQJHCHUg== X-Received: by 2002:a05:6000:401e:b0:385:fc70:7f6 with SMTP id ffacd0b85a97d-38f587812e9mr5520257f8f.7.1740056809003; Thu, 20 Feb 2025 05:06:49 -0800 (PST) Received: from ?IPV6:2001:9e8:1da4:5800:d7d:c5d:fa71:e27c? ([2001:9e8:1da4:5800:d7d:c5d:fa71:e27c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4399c4df982sm40975555e9.1.2025.02.20.05.06.48 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 20 Feb 2025 05:06:48 -0800 (PST) Message-ID: <418474f4-5b38-4a44-822a-8e3c367e673c@gmail.com> Date: Thu, 20 Feb 2025 14:06:47 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: FFmpeg development discussions and patches From: Leandro Santiago Subject: [FFmpeg-devel] I've written a filter in Rust 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: W2luc2VydCBtZW1lIGhlcmVdCgoodGhpcyB3aWxsIGJlIGEgbG9uZyBlLW1haWwpCgpEZWFyIEZG bXBlZyBkZXZzLAoKaW4gdGhlIHBhc3QgZGF5cyBJJ3ZlIGJlZW4gZXhwZXJpbWVudGluZyBoYWNr aW5nIEZGbXBlZyB1c2luZyBSdXN0LgoKQXMgSSBhbSBiZWNvbWluZyBtb3JlIGZhbWlsaWFyIHdp dGggdGhlIGxpYmF2ZmlsdGVyLCBhbmQgaXQgaXMgbm90IGEgZGVwZW5kZW5jeSBmb3IgYW55IG90 aGVyIG9mIHRoZSBsaWJhdiogbGlicywgSSBkZWNpZGVkIHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0 ZS4KCkl0J3MgYWxzbyBjb252ZW5pZW50IGFzIEkgdXNlIEZGbXBlZyBsaWJzIGhlYXZpbHkgaW4g YSBjb21tZXJjaWFsIHByb2R1Y3QsIGFuZCBvbmUgb2YgdGhlIGZlYXR1cmVzIEkndmUgYmVlbiB3 b3JraW5nIG9uIGludm9sdmVzIGEgYmFzaWMgbXVsdGkgb2JqZWN0IHRyYWNraW5nLgoKSW4gbXkg Y2FzZSwgaXQgZG9lcyBub3QgbmVlZCB0byBiZSBhICJwZXJmZWN0IiB0cmFja2luZyBhbGdvcml0 aG0sIGFzIEkgbmVlZCB0byBjb21wcm9taXNlIHF1YWxpdHkgb2YgdGhlIHJlc3VsdCBpbiBleGNo YW5nZSBvZiBwZXJmb3JtYW5jZSBleGVjdXRpbmcgaW4gdGhlIENQVSBvbmx5LCBzbyBtb3N0IG9m IHRoZSBhbGdvcml0aG1zIG91dCB0aGVyZSB0aGF0IG5lZWQgYSBHUFUgYXJlIG91dCBvZiBteSBy YW5nZS4KCkkgZGVjaWRlZCB0aGVuIHVzZSBhcyBmaXJzdCBleHBlcmltZW50IGEgZmlsdGVyIGNh bGxlZCBgdHJhY2tfc29ydGAgdGhhdCBpbXBsZW1lbnRzIHRoZSAyMDE2IHBhcGVyIFNJTVBMRSBP TkxJTkUgQU5EIFJFQUxUSU1FIFRSQUNLSU5HIFdJVEggQSBERUVQIEFTU09DSUFUSU9OIE1FVFJJ QywgYXMga25vd24gYXMgU09SVCBbMV0uCgpUaGUgZmlsdGVyIGFscmVhZHkgd29ya3Mgd2VsbCBi YXNlZCBvbiB0aGUgYG1hc3RlcmAgYnJhbmNoLCBidXQgdGhlIGNvZGUgaXRzZWxmIGlzIGluIHZl cnkgZWFybHkgc3RhZ2VzIGFuZCBmYXIgZnJvbSBiZWluZyAicHJvZHVjdGlvbiByZWFkeSIsIHNv IHBsZWFzZSBkbyBub3QgcmVhZCB0aGUgY29kZSBhc3N1bWluZyBpdCdzIGluIGl0cyBmaW5hbCBm b3JtLiBJdCdzIHVnbHkgYW5kIG5lZWRzIGxvdHMgb2YgcmVmYWN0b3JpbmcuCgpJJ3ZlIGNyZWF0 ZWQgYSBQUiBvbiBmb3JnZWpvIFs0XSB0byBtYWtlIGl0IGVhc2llciBmb3Igb3RoZXJzIHRvIHRy YWNrIHByb2dyZXNzLCBhbHRob3VnaCBJIHVzZSBnaXRsYWIuY29tIGFzIG15IG1haW4gZm9yZ2Uu CgpIZXJlIGlzIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZpbHRlcjoKCi0gSXQgcGVyZm9ybSBvbmx5 IG9iamVjdCB0cmFja2luZywgbmVlZGluZyB0aGUgb2JqZWN0IGRldGVjdGlvbiB0byBiZSBwZXJm b3JtZWQgZWxzZXdoZXJlLiBJdCBmZWVkcyBmcm9tIHRoZSBkZXRlY3Rpb24gYm94ZXMgZ2VuZXJh dGVkIGJ5IGBkbm5fZGV0ZWN0YC4gVGhhdCBtZWFucyB0aGF0IHRoZSBxdWFsaXR5IG9mIHRoZSB0 aGUgdHJhY2tpbmcgaXMgY2xvc2VseSByZWxhdGVkIHRvIHRoZSBxdWFsaXR5IG9mIHRoZSBkZXRl Y3Rpb24uCgotIFNPUlQgaXMgYSBzaW1wbGUgYWxnb3JpdGhtIHRoYXQgdXNlcyBzcGF0aWFsIGRh dGEgb25seSwgYW5kIGl0IG5vdCBhYmxlIHRvIGhhbmRsZSBjYXNlcyBzdWNoIGFzIG9iamVjdCBv Y2NsdXNpb24uIEl0J3MgZ29vZCBlbm91Z2ggZm9yIG15IHVzZSBjYXNlLCBhcyBJIG1lbnRpb25l ZCBlYXJsaWVyLgoKLSBUaGUgZmlsdGVyIHdvcmtzIHdpdGggdGhlIGRlZmF1bHQgb3B0aW9ucywg c28geW91IGNhbiBwYXNzIGl0IHdpdGhvdXQgYW55IGFyZ3VtZW50cy4gSW4gdGhpcyBtb2RlLCBp dCB3aWxsIHRyeSB0byB0cmFjayBhbnkgb2JqZWN0cyBmcm9tIHRoZSBib3hlcyBhdmFpbGFibGUu IFlvdSBjYW4gY2hhbmdlIHRoaXMgYmVoYXZpb3VyIGJ5IHNwZWNpZnlpbmcgdGhlIGxpc3Qgb2Yg bGFiZWxzIHRvIHRyYWNrLCBmb3IgZXhhbXBsZTogYHRyYWNrX3NvcnQ9bGFiZWxzPXBlcnNvbnxk b2d8Y2F0YC4gU3VjaCBsYWJlbHMgY29tZSBmcm9tIHRoZSBNTCBtb2RlbCB5b3UgdXNlZCBpbiB0 aGUgZGV0ZWN0aW9uIGZpbHRlci4gSXQgYWxzbyBoYXMgdGhlIG9wdGlvbnMgYHRocmVzaG9sZGAs IGBtaW5faGl0c2AgYW5kIGBtYXhfYWdlYCwgd2hpY2ggY29udHJvbCBob3cgdGhlIHRyYWNraW5n IGFsZ29yaXRobSB3b3JrcywgYnV0IHRoZSBkZWZhdWx0IHZhbHVlcyBzaG91bGQgd29yayB3ZWxs IG9uIG1vc3QgY2FzZXMuCgotIFRoZSBmaWx0ZXIgd2lsbCBhZGQgdGhlIHRyYWNraW5nIGluZm9y bWF0aW9uIGFzIGxhYmVsIG9uIGEgbmV3IGZyYW1lIHNpZGUgZGF0YSBlbnRyeSBvZiB0eXBlIGBB Vl9GUkFNRV9EQVRBX0RFVEVDVElPTl9CQk9YRVNgLiBJdCAqKldJTEwgTk9UKiogb3ZlcnJpZGUg dGhlIHNpZGUgZGF0YSBmcm9tIGBkbm5fZGV0ZWN0YCwsIG1lYW5pbmcgdGhhdCB0aGUgZnJhbWUg d2lsbCBoYXZlIHNpZGUgZGF0YSB0d28gZW50cmllcyBvZiB0aGlzIHR5cGUuIEkndmUgY3JlYXRl ZCBhIFBSIHRoYXQgbWFrZSBpdCBwb3NzaWJsZSB0byBmZXRjaCBzdWNoIGVudHJ5IFsyXS4KCi0g VGhlIGxhYmVscyBpbiB0aGUgZGV0ZWN0aW9uIGJveGVzIGhhdmUgdGhlIGZvcm1hdCAidHJhY2s6 PHRyYWNrX251bT46PHRyYWNrX2FnZT4iLCBhbmQgdGhpcyBpcyBub3QgdGhlIGZpbmFsIGZvcm1h dC4gSSBkaWQgdGhpcyB3YXkgYXMgYSBxdWljayBoYWNrIHRvIGhhdmUgc29tZSB2aXN1YWwgaW5m b3JtYXRpb24gd2hlbiBkcmF3aW5nIHRoZSBib3hlcyBhbmQgbGFiZWxzIHdpdGggdGhlIGBkcmF3 dGV4dGAgYW5kIGBkcmF3Ym94YCBmaWx0ZXJzLiBJIGJlbGlldmUgdGhpcyBjYW4gYmUgaW1wcm92 ZWQgYnkgcHV0dGluZyB0aGUgdHJhY2tpbmcgaW5mb3JtYXRpb24gYXMgbWV0YWRhdGEgb2YgdGhl IGBBVkRldGVjdGlvbkJCb3hgZXMsIGJ1dCB0aGlzIHdvdWxkIG9uIEFQSSBhbmQgQUJJIGJyZWFr aW5nLCBzbyB0aGlzIGlzIHN0aWxsIGFuIG9wZW4gcXVlc3Rpb24uCgpXaGF0IGhhcyBub3QgYmVl biBkb25lIHNvIGZhcjoKCkkgaGFkIHF1aXRlIGEgZmV3IGdvYWxzIGluIHRoaXMgdGFzazoKCi0g MTogZ2V0IGEgd29ya2luZyBhbmQgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTT1JU IGFsZ29yaXRobS4KLSAyOiBzdGFydCBsZWFybmluZyBSdXN0IGFnYWluIChpdCdzIGJlZW4gfjUg eWVhcnMgc2luY2UgSSB1c2VkIGl0KQotIDM6IGxlYXJuIG1vcmUgYWJvdXQgdGhlIGxpYmF2Zmls dGVyIGNvZGViYXNlCi0gNDogZXZhbHVhdGUgd2hldGhlciBSdXN0IGNvdWxkIHdvcmsgYXMgYSBz ZWNvbmQgbGFuZ3VhZ2UgZm9yIGhhY2tpbmcgRkZNcGVnLgoKUmVzdWx0czoKCi0gMTogSSBtYW5h Z2VkIHRvIHJldXNlIGxvdHMgb2YgaGlnaCBxdWFsaXR5IGNvZGUsIGF2YWlsYWJsZSBvbiBjcmF0 ZXMgKHRoZSByZXBvc2l0b3J5IG9mIFJ1c3QgcGFja2FnZXMpLCBwcmV2ZW50aW5nIG1lIG9mIG5l ZWRpbmcgdG8gd3JpdGUgaGFpcnkgbWF0aCBoZWF2eSBjb2RlLiBJIHBlcnNvbmFsbHkgc3VjayBp biBtYXRocywgZXNwZWNpYWxseSBsaW5lYXIgYWxnZWJyYS4gVXNpbmcgdGhlIHBhcGVyIGFuZCB0 aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIFszXSB3YXMgZW5vdWdoLCBhbHRob3VnaCBJIGRv IG5vdCB1bmRlcnN0YW5kIGFsbCB0aGUgbWF0aCBtYWdpYy4gRm9yIGluc3RhbmNlLCBJIHJldXNl ZCBhbiBleGlzdGluZyBjcmF0ZSBmb3IgS2FsbWFuIGZpbHRlcnMgdGhhdCBJIHByb2JhYmx5IHdv dWxkIG5lZWQgdG8gaW1wbGVtZW50IGJ5IGhhbmQsIGFzIHRoZSBhbHRlcm5hdGl2ZSBpbiBDIHdv dWxkIHByb2JhYmx5IGJlIHVzaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGF0IE9wZW5DViBvZmZl cnMuIEFuZCBJIGFtIGF3YXJlIHRoYXQgaXQncyBub3QgcHJhY3RpY2FsIHRvIG1ha2UgT3BlbkNW IGEgZGVwZW5kZW5jeSBvZiBGRm1wZWcuCgotIDI6IHlheSEgQmFjayB0byBSdXN0IQoKLSAzOiBJ J3ZlIGxlYXJuZWQgbW9yZSBub3Qgb25seSBhYm91dCBhdmZpbHRlciwgYnV0IGEgYml0IGFib3V0 IG90aGVyIGNvbXBvbmVudHMgYXMgd2VsbC4KCi0gNDogSSBoYXZlIG1vcmUgbm90ZXMgb24gdGhh dCBsYXRlciwgYnV0IGl0IGZlZWxzIGZvciBtZSB0aGF0IFJ1c3QgaXMgbmF0dXJhbCBjYW5kaWRh dGUgZm9yIG5ldyBjb2RlIGluIGxhcmdlIEMgY29kZWJhc2VzLCBhcyBpdCBpbnRlZ3JhdGVzIHF1 aXRlIHRlbGwsIHdpdGggc29tZSB3YXJ0cy4gSSBhbHNvIGhhdmUgbm8gaWRlYSB3aGV0aGVyIHRo ZSBGRm1wZWcgY29tbXVuaXR5IGhhcyBkaXNjdXNzZWQgYWJvdXQgUnVzdCBpbiB0aGUgY29kZWJh c2UgaW4gdGhlIHBhc3QgYW5kLCBpZiwgbm90LCB3aHkgbm90IG5vdz8KClNvbWUgbm90ZXMgb24g dXNpbmcgUnVzdDoKCkluIGdlbmVyYWwgSSBlbmpveWVkIHVzaW5nIFJ1c3QgaW4gdGhlIHByb2pl Y3QsIGFuZCBpZiB5b3UgaGF2ZSBhIGxvb2sgYXQgdGhlIGNvZGUsIHlvdSdsbCBub3RpY2UgdGhh dCBJIGFtIG5vdCByZXVzaW5nIGFueSBvZiB0aGUgbmljZSBDIG1hY3JvcyB0aGF0IG1ha2UgYSBs b3Qgb2Ygc3R1ZmYgZWFzaWVyIG9uIHdyaXRpbmcgbmV3IGZpbHRlcnMuIFRoYXQgbWVhbnMgdGhh dCB0aGUgUnVzdCBjb2RlIGxvb2tzIGxpa2UgdGhlIGV4cGFuZGVkIG1hY3JvIHZlcnNpb25zIGZy b20gQy4gQW5kIHRoYXQncyBhIGxvdCBvZiBib2lsZXJwbGF0ZSBhbmQgdWdseSBjb2RlLgoKVGhl cmUgd2VyZSBzb21lIHJlYXNvbnMgZm9yIHRoYXQ6IE9uZSBpcyB0aGF0IEkgYW0gc3RpbGwgbGVh cm5pbmcgUnVzdCBtYWNyb3MsIGFuZCB3YW50ZWQgdG8gZm9jdXMgb24gZ2V0dGluZyBzdHVmZiBk b25lIGZvciBub3cuIFNlY29uZCBpcyB0aGF0IFJ1c3QgaGFzIGEgbXVjaCBtb3JlIHBvd2VyZnVs IG1hY3JvIHN5c3RlbSB0aGFuIEMgZG9lcywgYW5kIGF2b2lkaW5nIG1hY3JvcyBub3cgYWxsb3cg bWUgdG8gZmVlbCBhbGwgdGhlIHBhaW4gb2Ygd3JpdGluZyB0aGUgbWFudWFsIGNvZGUuIFN1Y2gg cGFpbiwgSSBiZWxpZXZlLCBjYW4gaGVscCBhIHNldCBvZiBSdXN0IG1hY3JvcyB0byAiZW1lcmdl IiBmcm9tIHRoZSBjb2RlYmFzZSwgcmF0aGVyIHRoYW4gb25lIGRlc2lnbmluZyBhIHNldCBvZiBt YWNyb3MgdGhhdCB3aWxsIHByb2JhYmx5IGxvb2sgbGlrZSB0aGUgQyBvbmVzLCB3aGljaCBtaWdo dCBub3QgYmUgInJ1c3R5IiBlbm91Z2guIEFuZCBJIGRvbid0IGZpbmQgYSBnb29kIHByYWN0aXNl IHRvIGRlc2lnbiBBUElzIGJlZm9yZSBoYXZpbmcgc29tZSBpbXBsZW1lbnRhdGlvbiAobG9va2lu ZyBhdCB5b3UsIEMrKyBjb21taXR0ZWUpLgoKSSd2ZSBiZWVuIGRldmVsb3Bpbmcgb24gTWFuamFy byBMaW51eCBhbmQgZm9yIG5vdyBidWlsZGluZyBGRm1wZWcgc3RhdGljYWxseSB3aXRoIGAtLWRp c2FibGUtc3RyaXBwaW5nIC0tZW5hYmxlLWRlYnVnPTMgLS1kaXNhYmxlLW9wdGltaXphdGlvbnNg IGFuZCB0aGUgUnVzdCBjb2RlIGluIGBEZWJ1Z2AgbW9kZS4gVGhhdCBtZWFucyBzbG93IGNvZGUg YW5kIHN0YXRpYyBidWlsZHMsIHdoaWNoIGFyZSBlYXN5IHRvIGRlYnVnIGEgcHJvZmlsZS4KCkRl YnVnZ2luZyBpcyBlYXN5LCBhcyBJIGNhbiBzaW1wbHkgdXNlIEdEQiBhbmQgaXQgc2ltcGx5IHdv cmtzIHdpdGggdGhlIFJ1c3QgYW5kIEMgY29kZSBtaXhlZC4gSSBzdGlsIGRvbid0IGhhdmUgcHJl dHR5LXByaW50ZXIgZm9yIHRoZSBSdXN0IHBhcnQsIGJ1dCB0aGlzIGlzIHByb2JhYmx5IGFuIGlz c3VlIG9uIG15IHNldHVwLgoKUHJvZmlsaW5nIGFsc28gd29ya3Mgd2VsbC4gRXZlbiB0aG91Z2gg dGhlIFJ1c3QgY29kZSBpcyBpbiBEZWJ1ZyBtb2RlLCBwcm9maWxpbmcgd2l0aCBIb3RzcG90L1Bl cmYgc2hvd3MgdGhhdCB0aGUgdHJhY2tpbmcgY29kZSBpcyB2ZXJ5IGVmZmljaWVudCAoeW91IGFs bW9zdCBjYW5ub3Qgc2VlIGl0IGluIHRoZSBmbGFtZWdyYXBoISkuCgpNZW1vcnkgbWFuYWdlbWVu dCBpcyBhIGJyZWV6ZSwgYXMgdGhlIHN0YW5kYXJkIGxpYnJhcnkgaGFzIGdlbmVyaWMgdmVyc2lv bnMgb2YgbWFueSB1c2VmdWwgY29udGFpbmVycywgc3VjaCBhcyBWZWN0b3JzIGFuZCBCVHJlZXMu IFRoZSBhbGdvcml0aG1zIHRoZXJlIGFsc28gbWFrZSB0cmFuc2Zvcm1pbmcgYW5kIGZpbHRlcmlu ZyB2ZXJ5IGNvbnZlbmllbnQgYW5kIHR5cGUgc2FmZS4KCllvdSBnZXQgc3VwcG9ydCBmb3IgdW5p dCB0ZXN0cyBmb3IgZnJlZS4gTm8gaGFzc2xlLCBubyBjb21wbGV4IHNldHVwLiBTaW1wbHkgd3Jp dGUgdW5pdCB0ZXN0cyBhbnl3aGVyZSBhbmQgcnVuIHRoZW0gd2l0aCBgY2FyZ28gdGVzdGAuCgpJ dCBmZWVscyB2ZXJ5IGdvb2QgdG8gZ2V0IHRoZSBjb2RlIHRvIHdvcmsgYW5kIG5vdCBiZWluZyBh ZnJhaWQgb2YgdGhpbmdzIGdvaW5nIGJhZGx5IChpbiB0aGUgY29kZSB3aGljaCBpcyBub3QgdW5z YWZlLCBvZiBjb3Vyc2UhKS4KCldBUlRTCgpJIGRpZCBub3QgaW1wbGVtZW50IGFueSB3cmFwcGVy IG9uIHRvcCBvZiB0aGUgYXZmaWx0ZXIgcHJpdmF0ZSBBUEkgKHlheSBgYmluZGdlbmAhKSwgc28g aXQncyB1c2VkIGRpcmVjdGx5IG9uIHRoZSBSdXN0IGNvZGUuIEl0IGZvcmNlcyB5b3UgdG8gd3Jp dGUgdGhlIGNvZGUgYXMgYHVuc2FmZWAgb24gYW55IGludGVyYWN0aW9uIHdpdGggbGliYXYqIEFQ SS4gTmV2ZXJ0aGVsZXNzLCBldmVuIG9uIHVuc2FmZSBjb2RlLCB3b3JraW5nIG9uIG5vbiBvd25l ZCBkYXRhIGlzIHZlcnkgY29udmVuaWVudCwgYXMgeW91IGNhbiB0dXJuIGFsbW9zdCBhbnl0aGlu ZyBpbnRvIHNsaWNlcywgd2hpY2ggcHJvdmlkZSB5b3Ugd2l0aCBsb3RzIG9mIGNvbnZlbmllbnQg YWxnb3JpdGhtcyAobWFwLCBmaWx0ZXIsIHppcCwgZXRjLikuCgpXb3JraW5nIHdpdGggQyBwb2lu dGVycyBpcyBhIHZlcnkgcGFpbmZ1bCBhbmQgdWdseS4gRXNwZWNpYWxseSBgKipgIGFuZCBgKioq YC4gUnVzdCBpcyB2ZXJ5IHZlcmJvc2Ugb24gdXNpbmcgdGhlbSBpbiB0aGUgcnVzdCBzaWRlICh0 aGV5IGJlY29tZSB0aGluZ3MgbGlrZSBgJiptdXQgKm11dCAqbXV0YCwgbm90IHJlYWxseSBlYXN5 IHRvIHJlYXNvbiBhYm91dCkuIFJ1c3QgYWxzbyBkb2VzIG5vdCBoYXZlIHRoZSBgLT5gIG9wZXJh dG9yLCBmb3JjaW5nIHlvdSBkbyBkbyBzdHVmZiBsaWtlIGBgKCpmb28pLmJhcmAsIHdoaWNoIGlz IHNpbXBseSB1Z2x5LgoKSW50ZXJhY3Rpbmcgd2l0aCB0aGUgQyBBUEkgaXMgYWxzbyBub3QgdHJp dmlhbCwgYXMgaW4gUnVzdCBvbmUgbXVzdCBiZSBleHBsaWNpdCBhYm91dCBvd25lcnNoaXAgYW5k IGxpZmV0aW1lcywgc29tZXRoaW5nIHdoaWNoIGlzIGRvbmUgaW1wbGljaXRlbHkgKGFuZCBvZnRl biB3cm9uZ2x5KSBpbiBDLgoKU3RydWN0IG1lbWJlcnMgaW4gUnVzdCBtdXN0IGFsd2F5cyBiZSBl eHBsaWNpdGVseSBpbml0aWFsaXplZCwgZXZlbiBmb3IgZ2xvYmFsIHN0YXRpYyB2YXJpYWJsZXMs IHdoaWNoIEMgaW5pdGlhbGl6ZXMgd2l0aCB6ZXJvIGltcGxpY2l0ZWx5LgoKQyB1bmlvbnMuIEx1 Y2tpbHkgUnVzdCBzdXBwb3J0cyB0aGVtLCBidXQgdGhleSBhcmUgYWx3YXlzIHVuc2FmZS4KCmBi aW5kZ2VuYCBkb2VzIG5vdCBnZW5lcmF0ZSB3cmFwcGVycyBmb3IgYHN0YXRpYyBhdl9hbHdheXNf aW5saW5lIGJsYWgoKWAgZnVuY3Rpb25zLCBhcyB0aG9zZSBhcmUuLi4gaW5saW5lZCwgc28gd2hl biBpbiB0aGUgbmVlZCBvZiB1c2luZyB0aG9zZSwgSSBoYWQgdG8gc2ltcGx5IHJlaW1wbGVtZW50 IHRoZW0gaW4gUnVzdC4KCkluIGdlbmVyYWwgbXkgaW1wcmVzc2lvbiBpcyB0aGF0IFJ1c3QgY29k ZSBpcyBtb3JlIHZlcmJvc2UgdGhhbiBDIGluICJkYW5nZXJvdXMiIGNvZGUsIGJ1dCB3YXkgbGVz cyB2ZXJib3NlIGluIHNhZmUgY29kZSwgZHVlIHRvIHRoZSBjb21waWxlciBjaGVja3MuCgpXSFk/ IFdIWT8gV0hZPz8/Pz8KCk9rLCB3aHkgZG8gSSwgd2hvIG5ldmVyIHJlYWxseSB0b29rIHBhcnQg b24gdGhlIEZGbXBlZyBjb21tdW5pdHkgY29tZSBhcHBhcmVudGx5IG5vdyB0aHJvd2luZyBSdXN0 IG9uIHlvdXIgZmFjZXM/IEFtIEkgc2F5aW5nIHlvdSBmb2xrcyBzaG91bGQgcmV3cml0ZSBmZm1w ZWcgaW4gcnVzdD8gSSBrbm93IHRoYXQgZXNwZWNpYWxseSB0aGUgUnVzdCBjb21tdW5pdHkgaGF2 ZSBiZWVuIGludm9sdmVkIHJlY2VudGx5IGluIGEgbG90IG9mIGNvbmZsaWN0cyBpbnZvbHZpbmcg bGFyZ2UgQyBjb2RlYmFzZXMsIGFuZCBpdCdzIG5vdCBteSBpbnRlbnRpb24gdG8gdGVsbCB5b3Ug d2hhdCBvciBub3QgdG8gZG8uIEkgcmVjb2duaXplIGhhdmluZyBubyBhdXRob3JpdHkgaW4gdGhp cyBncm91cCBmb3IgdGhhdCBhbmQgSSBhbSBlc3NlbnRpYWxseSBqdXN0IGEgRkZtcGVnIHVzZXIu CgpNeSBpbnRlbnRpb24sIGZpcnN0IG9mIGFsbCwgd2FzIHRvIGdldCBzb21lIHN0dWZmIEkgbmVl ZGVkIGRvbmUuIEknbSB3b3JraW5nIG9uIGEgY29tbWVyY2lhbCBwcm9kdWN0LCBhbmQgZGV2ZWxv cGluZyBpbiBSdXN0IHdhcyB0aGUgcXVpY2tlc3Qgd2F5IEkgY291bGQgZ2V0IGl0IGRvbmUgKGNv bnNpZGVyaW5nIG15IHJlcXVpcmVtZW50cykuIEkndmUgZW5qb3llZCBhIGxvdCB3b3JraW5nIGlu IHRoaXMgcHJvamVjdCwgYW5kIEkgYmVsaWV2ZSBteSBsZWFybmluZ3MgY2FuIGJlIHVzZWZ1bCBm b3IgdGhlIEZGbXBlZyBjb21tdW5pdHkgYXMgYSB3aG9sZS4KCkRlbW8gdGltZQoKUmVxdWlyZW1l bnRzOiBDYXJnby9SdXN0IGluc3RhbGxlZC4gSSBhbSB1c2luZyBgMS44NC4wYCwgdGhlIGxhdGVz dCBzdGFibGUsIHZpYSBgcnVzdHVwYC4KCllvdSdsbCBuZWVkIG9wZW52aW5vLCBoYXJmYnV6eiBh bmQgZnJlZXR5cGUgaW5zdGFsbGVkLgoKRmlyc3Qgb2YgYWxsLCBjaGVjayBvdXQgdGhlIGNvZGUg ZnJvbSB0aGUgUFIgYXQgWzRdIGFuZCBjb21waWxlIEZGbXBlZyB3aXRoOgoKYGBgc2gKLi9jb25m aWd1cmUgLi9jb25maWd1cmUgLS1kaXNhYmxlLXN0cmlwcGluZyAtLWVuYWJsZS1kZWJ1Zz0zIC0t ZGlzYWJsZS1vcHRpbWl6YXRpb25zIC0tZW5hYmxlLWxpYm9wZW52aW5vIC0tZW5hYmxlLWxpYmhh cmZidXp6IC0tZW5hYmxlLWxpYmZyZWV0eXBlIC0tZW5hYmxlLW9wZW5zc2wKY2FyZ28gYnVpbGQg JiYgbWFrZQpgYGAKCkkgYWRkZWQgYSBgLS1lbmFibGUtcnVzdGAgZmxhZyB0byB0aGUgUFIsIGJ1 dCBhdCB0aGUgbW9tZW50IGl0IGRvZXMgbm90aGluZyA6LSkKCk5leHQgeW91IHNob3VsZCBkb3du bG9hZCBhIHByZS10cmFpbmVkIFlPTE80IG1vZGVsIGFuZCBhc3NvY2lhdGVkIGZpbGVzLCBmb3Ig cGVyZm9ybSB0aGUgb2JqZWN0IGRldGVjdGlvbnM6CgpgYGBzaApwaXAgaW5zdGFsbCBvcGVudmlu by1kZXYgdGVuc29yZmxvdwpvbXpfZG93bmxvYWRlciAtLW5hbWUgeW9sby12NC10aW55LXRmCm9t el9jb252ZXJ0ZXIgLS1uYW1lIHlvbG8tdjQtdGlueS10Zgp3Z2V0IGh0dHBzOi8vcmF3LmdpdGh1 YnVzZXJjb250ZW50LmNvbS9vcGVudmlub3Rvb2xraXQvb3Blbl9tb2RlbF96b28vcmVmcy9oZWFk cy9tYXN0ZXIvZGF0YS9kYXRhc2V0X2NsYXNzZXMvY29jb184MGNsLnR4dApgYGAKCkhlcmUgd2Un bGwgdXNlIGEgdmlkZW8gZnJvbSBNT1QgQ2hhbGxlbmdlIDIwMTYsIFs1XSB3aGljaCBpcyB0aGUg b25lIHNob3duIGluIHRoZSBvcmlnaW5hbCBTT1JUIHBhcGVyLiBZb3UgY2FuIHVzZSBpdCB3aXRo IHRoZSBjb21tYW5kOgoKYGBgc2gKLi9mZnBsYXkgaHR0cHM6Ly9tb3RjaGFsbGVuZ2UubmV0L3Nl cXVlbmNlVmlkZW9zL01PVDE2LTA2LXJhdy53ZWJtIC12ZiAnZG5uX2RldGVjdD1kbm5fYmFja2Vu ZD1vcGVudmlubzptb2RlbD1wdWJsaWMveW9sby12NC10aW55LXRmL0ZQMTYveW9sby12NC10aW55 LXRmLnhtbDppbnB1dD1pbWFnZV9pbnB1dDpjb25maWRlbmNlPTAuMTptb2RlbF90eXBlPXlvbG92 NDphbmNob3JzPTgxJjgyJjEzNSYxNjkmMzQ0JjMxOTpsYWJlbHM9Y29jb184MGNsLnR4dDphc3lu Yz0wOm5iX2NsYXNzZXM9ODAsdHJhY2tfc29ydD1sYWJlbHM9cGVyc29uLGRyYXdib3g9Ym94X3Nv dXJjZT1zaWRlX2RhdGFfZGV0ZWN0aW9uX2Jib3hlczpjb2xvcj1yZWQ6c2tpcD0xLGRyYXd0ZXh0 PXRleHRfc291cmNlPXNpZGVfZGF0YV9kZXRlY3Rpb25fYmJveGVzOmZvbnRjb2xvcj15ZWxsb3c6 Ym9yZGVyY29sb3I9eWVsbG93OmZvbnRzaXplPTIwOmZvbnRmaWxlPURyb2lkU2Fucy1Cb2xkLnR0 Zjpza2lwPTEnCmBgYAoKVGhlIGBkbm5fZGV0ZWN0YCBvcHRpb25zIHdlcmUgb2J0YWluZWQgZnJv bSB0aGUgWU9MTzQgbW9kZWwgYXQgWzZdLgoKUGxlYXNlIGFsc28gbm90aWNlZCBJIHBhc3NlZCB0 aGUgZXh0cmEgb3B0aW9uIGBza2lwPTFgIHRvIGJvdGggdGhlIGBkcmF3dGV4dGAgYW5kIHRoZSBg ZHJhd2JveGAgZmlsdGVycy4gVGhpcyBpcyB0byBtYWtlIHRoZW0gcmVuZGVyIHRoZSBib3hlcyBp bmZvcm1hdGlvbiBmcm9twqAgYHRyYWNrX3NvcnRgICwgaW5zdGVhZCBvZiB0aGUgb25lcyBmcm9t IGBkbm5fZGV0ZWN0YC4gTW9yZSBhdCBbMl0uCgpJIGFsc28gcmVjb3JkZWQgYSB2aWRlbyBzaG93 aW5nIHRoZSBmaWx0ZXIgaW4gYWN0aW9uIFs3XS4KCkNoZWVycywKCkxlYW5kcm8KCgpbMV0gaHR0 cHM6Ly9hcnhpdi5vcmcvcGRmLzE3MDMuMDc0MDIKWzJdIGh0dHBzOi8vY29kZS5mZm1wZWcub3Jn L0ZGbXBlZy9GRm1wZWcvcHVsbHMvMTAKWzNdIGh0dHBzOi8vZ2l0aHViLmNvbS9hYmV3bGV5L3Nv cnQKWzRdIGh0dHBzOi8vY29kZS5mZm1wZWcub3JnL0ZGbXBlZy9GRm1wZWcvcHVsbHMvMTEKWzVd IGh0dHBzOi8vbW90Y2hhbGxlbmdlLm5ldC92aXMvTU9UMTYtMDYKWzZdIGh0dHBzOi8vZ2l0aHVi LmNvbS9vcGVudmlub3Rvb2xraXQvb3Blbl9tb2RlbF96b28vYmxvYi9tYXN0ZXIvbW9kZWxzL3B1 YmxpYy95b2xvLXY0LXRpbnktdGYvUkVBRE1FLm1kCls3XSBodHRwczovL3lvdXR1LmJlL1VfeTQt Tm5hSU5nCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpm Zm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8v ZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUs IHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5v cmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==