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 2DD394A934 for ; Fri, 24 May 2024 13:03:35 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 52F8168D545; Fri, 24 May 2024 16:03:33 +0300 (EEST) Received: from mail-lf1-f43.google.com (mail-lf1-f43.google.com [209.85.167.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F177968D518 for ; Fri, 24 May 2024 16:03:25 +0300 (EEST) Received: by mail-lf1-f43.google.com with SMTP id 2adb3069b0e04-52389c1308dso8922799e87.3 for ; Fri, 24 May 2024 06:03:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716555805; x=1717160605; darn=ffmpeg.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=1ODUYP+1lgqeJMNtdEwGeScW/JJbl0emOfUfLZi8Hwc=; b=RlHRGtA/QILmBGt4cEH/DNFfboIxapjr4eG1osg3WvtgD5p2rQeoPYGr2qXn2aJ6Z6 PQuIfdWjglZmsEAZzWb/zrdtbjsCJJkQwoe8eP/jJbvM8RiEMSHfbHNvHW1CTFxtzmoX upZH6zG1nVlTpCFuzERGW/mHsxbCVWMGWenmK3QByD6JJhtUUFf+B6W8NF6fN5pxXiG2 DdsCRe75uankGC4vccmxAKyu84JNLNz7HqJPNd1sLsKy/xCZYsTVk8LzArdfdvSPIOjO 8f0XcFaMe+RsnQ55hTV158A/F7QUkw954EMW+1t0mywkkBW0lAyh7UkGoFGGVrc2NJ4V tYog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716555805; x=1717160605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=1ODUYP+1lgqeJMNtdEwGeScW/JJbl0emOfUfLZi8Hwc=; b=s0FkNf2yuFSRexpqBbfjgEmoyB0koRT+taqJxIqt+pCZ8JClzuV5/wDmWDugEZbv2U AHToZQcr/Xbpu5iZht+Cs0nHXkszXyC4pjVIuaKOhGkntGQZIO3yUhsvoAZ1y4snAPxO mPwrU6OAIoWzodfbfVm8RAk/+SveouZTZp3OBygOJ6EHLLIwDA5TqERsnYB/YWKo/BSv B3lMbFfiICEC6Jl+uMy0V1U7fJfleA46CzDb/eIiqSywGSDd9AuBpRh7065LMHa7vEbo pJ0pFfrh+C/y7M3lUY5wJsNEhYr4tLwpXHvSNDcW9kFKnFoxauzbpdUELqlGm2gkK4MM pGpQ== X-Gm-Message-State: AOJu0YwMtWSXbXhDVVlfdwE86h9/FCpAIZti0zq+E62raIRevHcjnXcK QG6gbMtVQpOJIPGO+GN8MOn80s7X3h86+gWjOJmuRj2luzRQiQEpEqGaekfRtJbCzZopmqjkofa J8XHqPXcu849fOCPOdQj3Sqb75g6OhtAI X-Google-Smtp-Source: AGHT+IF8MMsHSSS3LTJhJyH/XKetBwl8D1isGTTG5x6QMcc4GbP1jZKb+SoXjXYyb3adZ7tRllqIDF0Aw6aTdWePh3s= X-Received: by 2002:a05:6512:3e1c:b0:51a:c913:a9ce with SMTP id 2adb3069b0e04-529664dacc2mr1666947e87.50.1716555804312; Fri, 24 May 2024 06:03:24 -0700 (PDT) MIME-Version: 1.0 References: <20240514150936.39657-1-chris10317h5@gmail.com> <20240514150936.39657-2-chris10317h5@gmail.com> <45BCC231-7E46-4AE9-9DC5-41E588E8015E@gmail.com> In-Reply-To: <45BCC231-7E46-4AE9-9DC5-41E588E8015E@gmail.com> From: Nuo Mi Date: Fri, 24 May 2024 21:03:12 +0800 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v3 1/2] avcodec: add external enc libvvenc for H266/VVC 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: SGkgQEFuZHJlYXMsClRoYW5rIHlvdSBmb3IgdGhlIHJldmlldy4KU2VlbXMgQ2hyaXN0aWFuIHN0 aWxsIG5lZWRzIHNvbWUgZ3VpZGFuY2UgZnJvbSB5b3UsIHNlZSAxLCAyLCAzCk9uIFRodSwgTWF5 IDE2LCAyMDI0IGF0IDExOjIy4oCvUE0gQ2hyaXN0aWFuIDxjaHJpczEwMzE3aDVAZ21haWwuY29t PiB3cm90ZToKCj4KPgo+ID4gT24gMTQuIE1heSAyMDI0LCBhdCAxODo0OSwgQW5kcmVhcyBSaGVp bmhhcmR0IDwKPiBhbmRyZWFzLnJoZWluaGFyZHRAb3V0bG9vay5jb20+IHdyb3RlOgo+ID4KPiA+ IENocmlzdGlhbiBCYXJ0bmlrOgo+ID4+IEZyb206IFRob21hcyBTaWVkZWwgPHRob21hcy5mZkBz cGluLWRpZ2l0YWwuY29tPgo+ID4+Cj4gPj4gQWRkIGV4dGVybmFsIGVuY29kZXIgVlZlbkMgZm9y IEgyNjYvVlZDIGVuY29kaW5nLgo+ID4+IFJlZ2lzdGVyIG5ldyBlbmNvZGVyIGxpYnZ2ZW5jLgo+ ID4+IEFkZCBsaWJ2dmVuYyB0byB3cmFwIHRoZSB2dmVuYyBpbnRlcmZhY2UuCj4gPj4gbGlidnZl bmMgaW1wbGVtZW50cyBlbmNvZGVyIG9wdGlvbjogcHJlc2V0LHFwLHBlcmlvZCxzdWJqb3B0LAo+ ID4+IHZ2ZW5jLXBhcmFtcyxsZXZlbGlkYyx0aWVyLgo+ID4+IEVuYWJsZSBlbmNvZGVyIGJ5IGFk ZGluZyAtLWVuYWJsZS1saWJ2dmVuYyBpbiBjb25maWd1cmUgc3RlcC4KPiA+Pgo+ID4+IENvLWF1 dGhvcmVkLWJ5OiBDaHJpc3RpYW4gQmFydG5payBjaHJpczEwMzE3aDVAZ21haWwuY29tCj4gPj4g U2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFuIEJhcnRuaWsgPGNocmlzMTAzMTdoNUBnbWFpbC5jb20+ Cj4gPj4gLS0tCj4gPj4gY29uZmlndXJlICAgICAgICAgICAgICB8ICAgNCArCj4gPj4gZG9jL2Vu Y29kZXJzLnRleGkgICAgICB8ICA2NSArKysrKwo+ID4+IGxpYmF2Y29kZWMvTWFrZWZpbGUgICAg fCAgIDEgKwo+ID4+IGxpYmF2Y29kZWMvYWxsY29kZWNzLmMgfCAgIDEgKwo+ID4+IGxpYmF2Y29k ZWMvbGlidnZlbmMuYyAgfCA1NjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiA+PiA1IGZpbGVzIGNoYW5nZWQsIDYzNyBpbnNlcnRpb25zKCspCj4gPj4gY3JlYXRl IG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlidnZlbmMuYwo+ID4+Cj4gPj4gZGlmZiAtLWdpdCBh L2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+ID4+IGluZGV4IGE5MDliMDY4OWMuLjVkOWExNDgyMWIg MTAwNzU1Cj4gPj4gLS0tIGEvY29uZmlndXJlCj4gPj4gKysrIGIvY29uZmlndXJlCj4gPj4gQEAg LTI5Myw2ICsyOTMsNyBAQCBFeHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6Cj4gPj4gICAtLWVuYWJs ZS1saWJ2b3JiaXMgICAgICAgZW5hYmxlIFZvcmJpcyBlbi9kZWNvZGluZyB2aWEgbGlidm9yYmlz LAo+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBl eGlzdHMgW25vXQo+ID4+ICAgLS1lbmFibGUtbGlidnB4ICAgICAgICAgIGVuYWJsZSBWUDggYW5k IFZQOSBkZS9lbmNvZGluZyB2aWEgbGlidnB4Cj4gW25vXQo+ID4+ICsgIC0tZW5hYmxlLWxpYnZ2 ZW5jICAgICAgICBlbmFibGUgSC4yNjYvVlZDIGVuY29kaW5nIHZpYSB2dmVuYyBbbm9dCj4gPj4g ICAtLWVuYWJsZS1saWJ3ZWJwICAgICAgICAgZW5hYmxlIFdlYlAgZW5jb2RpbmcgdmlhIGxpYndl YnAgW25vXQo+ID4+ICAgLS1lbmFibGUtbGlieDI2NCAgICAgICAgIGVuYWJsZSBILjI2NCBlbmNv ZGluZyB2aWEgeDI2NCBbbm9dCj4gPj4gICAtLWVuYWJsZS1saWJ4MjY1ICAgICAgICAgZW5hYmxl IEhFVkMgZW5jb2RpbmcgdmlhIHgyNjUgW25vXQo+ID4+IEBAIC0xOTY2LDYgKzE5NjcsNyBAQCBF WFRFUk5BTF9MSUJSQVJZX0xJU1Q9Igo+ID4+ICAgICBsaWJ2bWFmCj4gPj4gICAgIGxpYnZvcmJp cwo+ID4+ICAgICBsaWJ2cHgKPiA+PiArICAgIGxpYnZ2ZW5jCj4gPj4gICAgIGxpYndlYnAKPiA+ PiAgICAgbGlieGV2ZAo+ID4+ICAgICBsaWJ4ZXZlCj4gPj4gQEAgLTM1NTgsNiArMzU2MCw3IEBA IGxpYnZweF92cDhfZGVjb2Rlcl9kZXBzPSJsaWJ2cHgiCj4gPj4gbGlidnB4X3ZwOF9lbmNvZGVy X2RlcHM9ImxpYnZweCIKPiA+PiBsaWJ2cHhfdnA5X2RlY29kZXJfZGVwcz0ibGlidnB4Igo+ID4+ IGxpYnZweF92cDlfZW5jb2Rlcl9kZXBzPSJsaWJ2cHgiCj4gPj4gK2xpYnZ2ZW5jX2VuY29kZXJf ZGVwcz0ibGlidnZlbmMiCj4gPj4gbGlid2VicF9lbmNvZGVyX2RlcHM9ImxpYndlYnAiCj4gPj4g bGlid2VicF9hbmltX2VuY29kZXJfZGVwcz0ibGlid2VicCIKPiA+PiBsaWJ4MjYyX2VuY29kZXJf ZGVwcz0ibGlieDI2MiIKPiA+PiBAQCAtNzAyNSw2ICs3MDI4LDcgQEAgZW5hYmxlZCBsaWJ2cHgg ICAgICAgICAgICAmJiB7Cj4gPj4gICAgICAgICBkaWUgImxpYnZweCBlbmFibGVkIGJ1dCBubyBz dXBwb3J0ZWQgZGVjb2RlcnMgZm91bmQiCj4gPj4gICAgIGZpCj4gPj4gfQo+ID4+ICtlbmFibGVk IGxpYnZ2ZW5jICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ2dmVuYyAibGlidnZl bmMgPj0KPiAxLjYuMSIgInZ2ZW5jL3Z2ZW5jLmgiIHZ2ZW5jX2dldF92ZXJzaW9uCj4gPj4KPiA+ PiBlbmFibGVkIGxpYndlYnAgICAgICAgICAgICYmIHsKPiA+PiAgICAgZW5hYmxlZCBsaWJ3ZWJw X2VuY29kZXIgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGlid2VicCAibGlid2VicAo+ID49 IDAuMi4wIiB3ZWJwL2VuY29kZS5oIFdlYlBHZXRFbmNvZGVyVmVyc2lvbgo+ID4+IGRpZmYgLS1n aXQgYS9kb2MvZW5jb2RlcnMudGV4aSBiL2RvYy9lbmNvZGVycy50ZXhpCj4gPj4gaW5kZXggYzgy ZjMxNmY5NC4uOTJhYWIxN2M0OSAxMDA2NDQKPiA+PiAtLS0gYS9kb2MvZW5jb2RlcnMudGV4aQo+ ID4+ICsrKyBiL2RvYy9lbmNvZGVycy50ZXhpCj4gPj4gQEAgLTIzNzgsNiArMjM3OCw3MSBAQCBJ bmRpY2F0ZXMgZnJhbWUgZHVyYXRpb24KPiA+PiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBs aWJ2cHggc2VlOgo+ID4+IEB1cmx7aHR0cDovL3d3dy53ZWJtcHJvamVjdC5vcmcvfQo+ID4+Cj4g Pj4gK0BzZWN0aW9uIGxpYnZ2ZW5jCj4gPj4gKwo+ID4+ICtWVmVuQyBILjI2Ni9WVkMgZW5jb2Rl ciB3cmFwcGVyLgo+ID4+ICsKPiA+PiArVGhpcyBlbmNvZGVyIHJlcXVpcmVzIHRoZSBwcmVzZW5j ZSBvZiB0aGUgbGlidnZlbmMgaGVhZGVycyBhbmQgbGlicmFyeQo+ID4+ICtkdXJpbmcgY29uZmln dXJhdGlvbi4gWW91IG5lZWQgdG8gZXhwbGljaXRseSBjb25maWd1cmUgdGhlIGJ1aWxkIHdpdGgK PiA+PiArQG9wdGlvbnstLWVuYWJsZS1saWJ2dmVuY30uCj4gPj4gKwo+ID4+ICtUaGUgVlZlbkMg cHJvamVjdCB3ZWJzaXRlIGlzIGF0Cj4gPj4gK0B1cmx7aHR0cHM6Ly9naXRodWIuY29tL2ZyYXVu aG9mZXJoaGkvdnZlbmN9Lgo+ID4+ICsKPiA+PiArQHN1YnNlY3Rpb24gU3VwcG9ydGVkIFBpeGVs IEZvcm1hdHMKPiA+PiArCj4gPj4gK1ZWZW5DIHN1cHBvcnRzIG9ubHkgMTAtYml0IGNvbG9yIHNw YWNlcyBhcyBpbnB1dC4gQnV0IHRoZSBpbnRlcm5hbAo+IChlbmNvZGVkKQo+ID4+ICtiaXQgZGVw dGggY2FuIGJlIHNldCB0byA4LWJpdCBvciAxMC1iaXQgYXQgcnVudGltZS4KPiA+PiArCj4gPj4g K0BzdWJzZWN0aW9uIE9wdGlvbnMKPiA+PiArCj4gPj4gK0B0YWJsZSBAb3B0aW9uCj4gPj4gK0Bp dGVtIGIKPiA+PiArU2V0cyB0YXJnZXQgdmlkZW8gYml0cmF0ZS4KPiA+PiArCj4gPj4gK0BpdGVt IGcKPiA+PiArU2V0IHRoZSBHT1Agc2l6ZS4gQ3VycmVudGx5IHN1cHBvcnQgZm9yIGc9MSAoSW50 cmEgb25seSkgb3IgZGVmYXVsdC4KPiA+PiArCj4gPj4gK0BpdGVtIHByZXNldAo+ID4+ICtTZXQg dGhlIFZWZW5DIHByZXNldC4KPiA+PiArCj4gPj4gK0BpdGVtIGxldmVsaWRjCj4gPj4gK1NldCBs ZXZlbCBpZGMuCj4gPj4gKwo+ID4+ICtAaXRlbSB0aWVyCj4gPj4gK1NldCB2dmMgdGllci4KPiA+ PiArCj4gPj4gK0BpdGVtIHFwCj4gPj4gK1NldCBjb25zdGFudCBxdWFudGl6YXRpb24gcGFyYW1l dGVyLgo+ID4+ICsKPiA+PiArQGl0ZW0gc3Vib3B0IEB2YXJ7Ym9vbGVhbn0KPiA+PiArU2V0IHN1 YmplY3RpdmUgKHBlcmNlcHR1YWxseSBtb3RpdmF0ZWQpIG9wdGltaXphdGlvbi4gRGVmYXVsdCBp cyAxCj4gKG9uKS4KPiA+PiArCj4gPj4gK0BpdGVtIGJpdGRlcHRoOCBAdmFye2Jvb2xlYW59Cj4g Pj4gK1NldCA4Yml0IGNvZGluZyBtb2RlIGluc3RlYWQgb2YgdXNpbmcgMTBiaXQuIERlZmF1bHQg aXMgMCAob2ZmKS4KPiA+PiArCj4gPj4gK0BpdGVtIHBlcmlvZAo+ID4+ICtzZXQgKGludHJhKSBy ZWZyZXNoIHBlcmlvZCBpbiBzZWNvbmRzLgo+ID4+ICsKPiA+PiArQGl0ZW0gdnZlbmMtcGFyYW1z Cj4gPj4gK1NldCB2dmVuYyBvcHRpb25zIHVzaW5nIGEgbGlzdCBvZiBAdmFye2tleX09QHZhcnt2 YWx1ZX0gY291cGxlcwo+IHNlcGFyYXRlZAo+ID4+ICtieSAiOiIuIFNlZSBAY29tbWFuZHt2dmVu Y2FwcCAtLWZ1bGxoZWxwfSBvciBAY29tbWFuZHt2dmVuY0ZGYXBwCj4gLS1mdWxsaGVscH0gZm9y IGEgbGlzdCBvZiBvcHRpb25zLgo+ID4+ICsKPiA+PiArRm9yIGV4YW1wbGUsIHRoZSBvcHRpb25z IG1pZ2h0IGJlIHByb3ZpZGVkIGFzOgo+ID4+ICsKPiA+PiArQGV4YW1wbGUKPiA+PiAraW50cmFw ZXJpb2Q9NjQ6ZGVjb2RpbmdyZWZyZXNodHlwZT1pZHI6cG9jMGlkcj0xOmludGVybmFsYml0ZGVw dGg9OAo+ID4+ICtAZW5kIGV4YW1wbGUKPiA+PiArCj4gPj4gK0ZvciBleGFtcGxlIHRoZSBlbmNv ZGluZyBvcHRpb25zIGZvciAyLXBhc3MgZW5jb2RpbmcgbWlnaHQgYmUgcHJvdmlkZWQKPiB3aXRo IEBvcHRpb257LXZ2ZW5jLXBhcmFtc306Cj4gPj4gKwo+ID4+ICtAZXhhbXBsZQo+ID4+ICtmZm1w ZWcgLWkgaW5wdXQgLWM6diBsaWJ2dmVuYyAtYiAxTSAtdnZlbmMtcGFyYW1zCj4gcGFzc2VzPTI6 cGFzcz0xOnJjc3RhdHNmaWxlPXN0YXRzLmpzb24gb3V0cHV0Lm1wNAo+ID4+ICtmZm1wZWcgLWkg aW5wdXQgLWM6diBsaWJ2dmVuYyAtYiAxTSAtdnZlbmMtcGFyYW1zCj4gcGFzc2VzPTI6cGFzcz0y OnJjc3RhdHNmaWxlPXN0YXRzLmpzb24gb3V0cHV0Lm1wNAo+ID4+ICtAZW5kIGV4YW1wbGUKPiA+ PiArCj4gPj4gK0BlbmQgdGFibGUKPiA+PiArCj4gPj4gQHNlY3Rpb24gbGlid2VicAo+ID4+Cj4g Pj4gbGlid2VicCBXZWJQIEltYWdlIGVuY29kZXIgd3JhcHBlcgo+ID4+IGRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+ID4+IGluZGV4IDI0NDNk MmM2ZmQuLjVkNzM0OTA5MGUgMTAwNjQ0Cj4gPj4gLS0tIGEvbGliYXZjb2RlYy9NYWtlZmlsZQo+ ID4+ICsrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiA+PiBAQCAtMTE1Myw2ICsxMTUzLDcgQEAg T0JKUy0kKENPTkZJR19MSUJWUFhfVlA4X0RFQ09ERVIpICAgICAgICAgKz0KPiBsaWJ2cHhkZWMu bwo+ID4+IE9CSlMtJChDT05GSUdfTElCVlBYX1ZQOF9FTkNPREVSKSAgICAgICAgICs9IGxpYnZw eGVuYy5vCj4gPj4gT0JKUy0kKENPTkZJR19MSUJWUFhfVlA5X0RFQ09ERVIpICAgICAgICAgKz0g bGlidnB4ZGVjLm8KPiA+PiBPQkpTLSQoQ09ORklHX0xJQlZQWF9WUDlfRU5DT0RFUikgICAgICAg ICArPSBsaWJ2cHhlbmMubwo+ID4+ICtPQkpTLSQoQ09ORklHX0xJQlZWRU5DX0VOQ09ERVIpICAg ICAgICAgICArPSBsaWJ2dmVuYy5vCj4gPj4gT0JKUy0kKENPTkZJR19MSUJXRUJQX0VOQ09ERVIp ICAgICAgICAgICAgKz0gbGlid2VicGVuY19jb21tb24ubwo+IGxpYndlYnBlbmMubwo+ID4+IE9C SlMtJChDT05GSUdfTElCV0VCUF9BTklNX0VOQ09ERVIpICAgICAgICs9IGxpYndlYnBlbmNfY29t bW9uLm8KPiBsaWJ3ZWJwZW5jX2FuaW1lbmNvZGVyLm8KPiA+PiBPQkpTLSQoQ09ORklHX0xJQlgy NjJfRU5DT0RFUikgICAgICAgICAgICArPSBsaWJ4MjY0Lm8KPiA+PiBkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy9hbGxjb2RlY3MuYyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPiA+PiBpbmRleCBi MTAyYTgwNjllLi41OWQzNmRiZDU2IDEwMDY0NAo+ID4+IC0tLSBhL2xpYmF2Y29kZWMvYWxsY29k ZWNzLmMKPiA+PiArKysgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4gPj4gQEAgLTgwMCw2ICs4 MDAsNyBAQCBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJ2cHhfdnA4X2VuY29kZXI7Cj4gPj4g ZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlidnB4X3ZwOF9kZWNvZGVyOwo+ID4+IGV4dGVybiBG RkNvZGVjIGZmX2xpYnZweF92cDlfZW5jb2RlcjsKPiA+PiBleHRlcm4gY29uc3QgRkZDb2RlYyBm Zl9saWJ2cHhfdnA5X2RlY29kZXI7Cj4gPj4gK2V4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYnZ2 ZW5jX2VuY29kZXI7Cj4gPj4gLyogcHJlZmVycmVkIG92ZXIgbGlid2VicCAqLwo+ID4+IGV4dGVy biBjb25zdCBGRkNvZGVjIGZmX2xpYndlYnBfYW5pbV9lbmNvZGVyOwo+ID4+IGV4dGVybiBjb25z dCBGRkNvZGVjIGZmX2xpYndlYnBfZW5jb2RlcjsKPiA+PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2Rl Yy9saWJ2dmVuYy5jIGIvbGliYXZjb2RlYy9saWJ2dmVuYy5jCj4gPj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiA+PiBpbmRleCAwMDAwMDAwMDAwLi43OGQ0ZjU1YTJhCj4gPj4gLS0tIC9kZXYvbnVs bAo+ID4+ICsrKyBiL2xpYmF2Y29kZWMvbGlidnZlbmMuYwo+ID4+IEBAIC0wLDAgKzEsNTY2IEBA Cj4gPj4gKy8qCj4gPj4gKyAqIEguMjY2IGVuY29kaW5nIHVzaW5nIHRoZSBWVmVuQyBsaWJyYXJ5 Cj4gPj4gKyAqCj4gPj4gKyAqIENvcHlyaWdodCAoQykgMjAyMiwgVGhvbWFzIFNpZWRlbAo+ID4+ ICsgKgo+ID4+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gPj4gKyAqCj4gPj4g KyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IKPiA+PiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYwo+ID4+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiA+PiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gPj4gKyAqCj4g Pj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAo+ID4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ID4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ID4+ICsgKiBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ID4+ICsgKgo+ID4+ICsg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCj4gPj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiA+PiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQo+IDAyMTEwLTEzMDEgVVNBCj4g Pj4gKyAqLwo+ID4+ICsKPiA+PiArI2luY2x1ZGUgImNvbmZpZ19jb21wb25lbnRzLmgiCj4gPgo+ ID4gU2VlbXMgdW5uZWVkZWQuCj4gPgo+IFRoYW5rcywgSSB3aWxsIHJlbW92ZSBpdC4KPgo+ID4+ ICsKPiA+PiArI2luY2x1ZGUgPHZ2ZW5jL3Z2ZW5jLmg+Cj4gPj4gKyNpbmNsdWRlIDx2dmVuYy92 dmVuY0NmZy5oPgo+ID4+ICsjaW5jbHVkZSA8dnZlbmMvdmVyc2lvbi5oPgo+ID4+ICsKPiA+PiAr I2luY2x1ZGUgImF2Y29kZWMuaCIKPiA+PiArI2luY2x1ZGUgImNvZGVjX2ludGVybmFsLmgiCj4g Pj4gKyNpbmNsdWRlICJlbmNvZGUuaCIKPiA+PiArI2luY2x1ZGUgImludGVybmFsLmgiCj4gPj4g KyNpbmNsdWRlICJwYWNrZXRfaW50ZXJuYWwuaCIKPiA+PiArI2luY2x1ZGUgInByb2ZpbGVzLmgi Cj4gPj4gKwo+ID4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2dXRpbC5oIgo+ID4+ICsjaW5jbHVk ZSAibGliYXZ1dGlsL21lbS5oIgo+ID4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIK PiA+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiA+PiArI2luY2x1ZGUgImxpYmF2dXRp bC9jb21tb24uaCIKPiA+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9pbWd1dGlscy5oIgo+ID4+ICsj aW5jbHVkZSAibGliYXZ1dGlsL2ZyYW1lLmgiCj4gPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbG9n LmgiCj4gPj4gKwo+ID4+ICt0eXBlZGVmIHN0cnVjdCBWVmVuQ09wdGlvbnMgewo+ID4+ICsgICAg aW50IHByZXNldDsgICAgICAgICAgICAgICAgIC8vIHByZXNldCAwOiBmYXN0ZXIgIDQ6IHNsb3dl cgo+ID4+ICsgICAgaW50IHFwOyAgICAgICAgICAgICAgICAgICAgIC8vIHF1YW50aXphdGlvbiBw YXJhbWV0ZXIgMC02Mwo+ID4+ICsgICAgaW50IHN1YmplY3RpdmVPcHRpbWl6YXRpb247IC8vIHBl cmNlcHR1YWxseSBtb3RpdmF0ZWQgUVAKPiBhZGFwdGF0aW9uLCBYUFNOUiBiYXNlZAo+ID4+ICsg ICAgaW50IGZsYWc4Yml0Q29kaW5nOyAgICAgICAgIC8vIGVuY29kZSBpbiA4Yml0IGluc3RlYWQg b2YgMTBiaXQKPiA+PiArICAgIGludCBpbnRyYVJlZnJlc2hTZWM7ICAgICAgICAvLyBpbnRyYSBw ZXJpb2QvcmVmcmVzaCBpbiBzZWNvbmRzCj4gPj4gKyAgICBpbnQgbGV2ZWxJZGM7ICAgICAgICAg ICAgICAgLy8gdnZjIGxldmVsX2lkYwo+ID4+ICsgICAgaW50IHRpZXI7ICAgICAgICAgICAgICAg ICAgIC8vIHZ2YyB0aWVyCj4gPj4gKyAgICBBVkRpY3Rpb25hcnkgKnZ2ZW5jX29wdHM7Cj4gPj4g K30gVlZlbkNPcHRpb25zOwo+ID4+ICsKPiA+PiArdHlwZWRlZiBzdHJ1Y3QgVlZlbkNDb250ZXh0 IHsKPiA+PiArICAgIEFWQ2xhc3MgICAgICAgICAqYXZfY2xhc3M7Cj4gPj4gKyAgICBWVmVuQ09w dGlvbnMgICAgb3B0aW9uczsgICAgICAvLyBlbmNvZGVyIG9wdGlvbnMKPiA+PiArICAgIHZ2ZW5j RW5jb2RlciAgICAqdnZlbmNFbmM7Cj4gPj4gKyAgICB2dmVuY0FjY2Vzc1VuaXQgKnBBVTsKPiA+ PiArICAgIGJvb2wgICAgICAgICAgICBlbmNvZGVEb25lOwo+ID4KPiA+IFdlIGRvIG5vdCB1c2Ug Q2FtZWxDYXNlIGZvciB2YXJpYWJsZSBhbmQgc3RydWN0IG1lbWJlciBuYW1lcy4KPiA+Cj4gVGhh bmtzLCBJIHdpbGwgY2hhbmdlIHRoZSBtZW1iZXJzLgo+Cj4gPj4gK30gVlZlbkNDb250ZXh0Owo+ ID4+ICsKPiA+PiArCj4gPj4gK3N0YXRpYyBhdl9jb2xkIHZvaWQgZmZfdnZlbmNfbG9nX2NhbGxi YWNrKHZvaWQgKmN0eCwgaW50IGxldmVsLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QKPiBhcmdzKQo+ID4KPiA+ IFJlbW92ZSB0aGUgZmZfIHByZWZpeCBmcm9tIHN0YXRpYyBmdW5jdGlvbnMgKHRoaXMgaXMgdGhl IHByZWZpeCBmb3IKPiA+IG5vbi1zdGF0aWMgZnVuY3Rpb25zKS4KPiA+Cj4gVGhhbmtzLiBJIHdh cyBub3QgYXdhcmUgb2YgdGhpcy4KPgo+ID4+ICt7Cj4gPj4gKyAgICB2dmVuY19jb25maWcgcGFy YW1zOwo+ID4+ICsgICAgdnZlbmNFbmNvZGVyICp2dmVuY0VuYyA9ICh2dmVuY0VuY29kZXIgKilj dHg7Cj4gPj4gKyAgICBpZiAodnZlbmNFbmMpewo+ID4+ICsgICAgICAgIHZ2ZW5jX2NvbmZpZ19k ZWZhdWx0KCZwYXJhbXMpOwo+ID4+ICsgICAgICAgIHZ2ZW5jX2dldF9jb25maWcodnZlbmNFbmMs ICZwYXJhbXMpOwo+ID4+ICsgICAgICAgIGlmICgoaW50KXBhcmFtcy5tX3ZlcmJvc2l0eSA+PSBs ZXZlbCkKPiA+PiArICAgICAgICAgICAgdmZwcmludGYobGV2ZWwgPT0gMSA/IHN0ZGVyciA6IHN0 ZG91dCwgZm10LCBhcmdzKTsKPiA+PiArICAgIH0KPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGlj IHZvaWQgZmZfdnZlbmNfc2V0X3ZlcmJvc2l0b3J5KHZ2ZW5jX2NvbmZpZyogcGFyYW1zICkKPiA+ Cj4gPiBXaGF0J3MgdGhlIHJlYXNvbiBmb3IgdGhlIHNwYWNlIGJlZm9yZSB0aGUgY2xvc2luZyBw YXJlbnRoZXNlcz8KPiA+IE1vcmVvdmVyLCB3ZSBwcmVmZXIgdG8gcHV0IHRoZSAqIHRvIHRoZSBw YXJhbWV0ZXIsIG5vdCB0aGUgdHlwZS4KPiA+Cj4gVGhhbmtzLCBpdMK0cyBhIHR5cGUuIEnCtGxs IGZpeCBpdC4KPgo+ID4+ICt7Cj4gPj4gKyAgICBwYXJhbXMtPm1fdmVyYm9zaXR5ID0gVlZFTkNf VkVSQk9TRTsKPiA+PiArICAgIGlmIChhdl9sb2dfZ2V0X2xldmVsKCkgPj0gQVZfTE9HX0RFQlVH KQo+ID4KPiA+IGF2X2xvZ19nZXRfbGV2ZWwoKSBjYW4gYmUgY2hhbmdlZCBhdCBhbnkgdGltZSBi eSBzb21lb25lIGVsc2UuIFNvIGJldHRlcgo+ID4ganVzdCBjYWxsIGl0IG9uY2UgYW5kIGNhY2hl IHRoZSB2YWx1ZSBmb3Igc2ltcGxpY2l0eSBhbmQgY29uc2lzdGVuY3kuCj4gPgo+IEdvb2QgcG9p bnQuIEnCtGxsIGNoYW5nZSBpdC4KPgo+ID4+ICsgICAgICAgIHBhcmFtcy0+bV92ZXJib3NpdHkg PSBWVkVOQ19ERVRBSUxTOwo+ID4+ICsgICAgZWxzZSBpZiAoYXZfbG9nX2dldF9sZXZlbCgpID49 IEFWX0xPR19WRVJCT1NFKQo+ID4+ICsgICAgICAgIHBhcmFtcy0+bV92ZXJib3NpdHkgPSBWVkVO Q19OT1RJQ0U7ICAgICAgLy8gb3V0cHV0IHBlciBwaWN0dXJlCj4gaW5mbwo+ID4+ICsgICAgZWxz ZSBpZiAoYXZfbG9nX2dldF9sZXZlbCgpID49IEFWX0xPR19JTkZPKQo+ID4+ICsgICAgICAgIHBh cmFtcy0+bV92ZXJib3NpdHkgPSBWVkVOQ19XQVJOSU5HOyAgICAgLy8gZmZtcGVnIGRlZmF1bHQK PiBmZm1wZWcgbG9nbGV2ZWwKPiA+PiArICAgIGVsc2UKPiA+PiArICAgICAgICBwYXJhbXMtPm1f dmVyYm9zaXR5ID0gVlZFTkNfU0lMRU5UOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50 IGZmX3Z2ZW5jX3NldF9waWNfZm9ybWF0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiB2dmVuY19j b25maWcqIHBhcmFtcyApCj4gPj4gK3sKPiA+PiArICAgIFZWZW5DQ29udGV4dCAqcyA9KFZWZW5D Q29udGV4dCAqKSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4KPiA+IFRoaXMgY2FzdCBpcyB1bm5lY2Vz c2FyeSBpbiBDLgo+ID4KPiBUaGFua3MuIEnCtGxsIHJlbW92ZSBpdC4KPgo+ID4+ICsKPiA+PiAr ICAgIHBhcmFtcy0+bV9pbnRlcm5DaHJvbWFGb3JtYXQgPSBWVkVOQ19DSFJPTUFfNDIwOwo+ID4+ ICsgICAgcGFyYW1zLT5tX2lucHV0Qml0RGVwdGhbMF0gICA9IDEwOwo+ID4+ICsKPiA+PiArICAg IGlmIChhdmN0eC0+cGl4X2ZtdCAhPSBBVl9QSVhfRk1UX1lVVjQyMFAxMExFKXsKPiA+PiArICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwKPiA+PiArICAgICAgICAgICAgICAgInVu c3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAlcywgY3VycmVudGx5IG9ubHkgc3VwcG9ydAo+IGZvciB5 dXY0MjBwMTBsZVxuIiwKPiA+PiArICAgICAgICAgICAgICAgIGF2X2dldF9waXhfZm10X25hbWUo YXZjdHgtPnBpeF9mbXQpKTsKPiA+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ ID4KPiA+IDEuIFRoaXMgd2hvbGUgYmxvY2sgb2YgY29kZSBpcyBkZWFkOiBGb3IgZW5jb2RlcnMg dGhhdCBzZXQKPiA+IEFWQ29kZWMucGl4X2ZtdHMsIGl0IGlzIGNoZWNrZWQgZ2VuZXJpY2FsbHkg dGhhdCB0aGUgcGl4ZWwgZm9ybWF0IHNldCBpcwo+ID4gb25lIG9mIHRoZSBwaXhlbCBmb3JtYXRz IGluIEFWQ29kZWMucGl4X2ZtdHMuCj4gPiAyLiBXaHkgb25seSBMRT8gSXMgdGhpcyBhbHNvIHRy dWUgb24gQkUgc3lzdGVtcz8KPiA+Cj4gSXQgd2FzIGp1c3QgZm9yIGRvdWJsZSBjaGVjay4gSSBj aGFuZ2UgaXQgdG8gQVZfUElYX0ZNVF9ZVVY0MjBQMTAKPiBhbmQgcmVtb3ZlIHRoZSBjaGVjay4K Pgo+ID4+ICsgICAgfQo+ID4+ICsKPiA+PiArICAgIGlmIChzLT5vcHRpb25zLmZsYWc4Yml0Q29k aW5nKSB7Cj4gPj4gKyNpZiBWVkVOQ19WRVJTSU9OX01BSk9SID4gMSB8fCAoVlZFTkNfVkVSU0lP Tl9NQUpPUiA9PSAxICYmCj4gVlZFTkNfVkVSU0lPTl9NSU5PUiA+IDkpIHx8IChWVkVOQ19WRVJT SU9OX01BSk9SID09IDEgJiYKPiBWVkVOQ19WRVJTSU9OX01JTk9SID49IDkgJiYgVlZFTkNfVkVS U0lPTl9QQVRDSCA+PSAxKQo+ID4+ICsgICAgICAgICAgICBwYXJhbXMtPm1faW50ZXJuYWxCaXRE ZXB0aFswXSA9IDg7Cj4gPj4gKyNlbHNlCj4gPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLAo+ID4+ICsgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIDhiaXQgY29k aW5nIG1vZGUuIDhiaXQgY29kaW5nIG5lZWRzIGF0Cj4gbGVhc3QgdnZlbmMgdmVyc2lvbiA+PSAx LjkuMSAiCj4gPj4gKyAgICAgICAgICAgICAgICAiKGN1cnJlbnQgdmVyc2lvbiAlcylcbiIsIHZ2 ZW5jX2dldF92ZXJzaW9uKCkgKTsKPiA+PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsKPiA+PiArI2VuZGlmCj4gPj4gKyAgICB9Cj4gPj4gKyAgICByZXR1cm4gMDsKPiA+PiAr fQo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQgZmZfdnZlbmNfc2V0X2NvbG9yX2Zvcm1hdChBVkNv ZGVjQ29udGV4dCAqYXZjdHgsCj4gdnZlbmNfY29uZmlnKiBwYXJhbXMgKQo+ID4+ICt7Cj4gPj4g KyAgICBpZiAoYXZjdHgtPmNvbG9yX3ByaW1hcmllcyAhPSBBVkNPTF9QUklfVU5TUEVDSUZJRUQp Cj4gPj4gKyAgICAgICAgcGFyYW1zLT5tX2NvbG91clByaW1hcmllcyA9IChpbnQpIGF2Y3R4LT5j b2xvcl9wcmltYXJpZXM7Cj4gPj4gKyAgICBpZiAoYXZjdHgtPmNvbG9yc3BhY2UgIT0gQVZDT0xf U1BDX1VOU1BFQ0lGSUVEKQo+ID4+ICsgICAgICAgIHBhcmFtcy0+bV9tYXRyaXhDb2VmZmljaWVu dHMgPSAoaW50KSBhdmN0eC0+Y29sb3JzcGFjZTsKPiA+PiArICAgIGlmIChhdmN0eC0+Y29sb3Jf dHJjICE9IEFWQ09MX1RSQ19VTlNQRUNJRklFRCkgewo+ID4+ICsgICAgICAgIHBhcmFtcy0+bV90 cmFuc2ZlckNoYXJhY3RlcmlzdGljcyA9IChpbnQpIGF2Y3R4LT5jb2xvcl90cmM7Cj4gPj4gKwo+ ID4+ICsgICAgICAgIGlmIChhdmN0eC0+Y29sb3JfdHJjID09IEFWQ09MX1RSQ19TTVBURTIwODQp Cj4gPj4gKyAgICAgICAgICAgIHBhcmFtcy0+bV9IZHJNb2RlID0gKGF2Y3R4LT5jb2xvcl9wcmlt YXJpZXMgPT0KPiBBVkNPTF9QUklfQlQyMDIwKSA/Cj4gPj4gKyAgICAgICAgICAgICAgICBWVkVO Q19IRFJfUFFfQlQyMDIwIDogVlZFTkNfSERSX1BROwo+ID4+ICsgICAgICAgIGVsc2UgaWYgKGF2 Y3R4LT5jb2xvcl90cmMgPT0gQVZDT0xfVFJDX0JUMjAyMF8xMAo+ID4+ICsgICAgICAgICAgICAg ICAgIHx8IGF2Y3R4LT5jb2xvcl90cmMgPT0gQVZDT0xfVFJDX0FSSUJfU1REX0I2NykKPiA+PiAr ICAgICAgICAgICAgcGFyYW1zLT5tX0hkck1vZGUgPSAoYXZjdHgtPmNvbG9yX3RyYyA9PQo+IEFW Q09MX1RSQ19CVDIwMjBfMTAgfHwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhdmN0eC0+Y29sb3JfcHJpbWFyaWVzID09Cj4gQVZDT0xfUFJJX0JUMjAyMCB8fAo+ID4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5jb2xvcnNwYWNlID09Cj4gQVZD T0xfU1BDX0JUMjAyMF9OQ0wgfHwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhdmN0eC0+Y29sb3JzcGFjZSA9PQo+IEFWQ09MX1NQQ19CVDIwMjBfQ0wpID8KPiA+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWRU5DX0hEUl9ITEdfQlQyMDIwIDogVlZFTkNf SERSX0hMRzsKPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICBpZiAocGFyYW1zLT5tX0hkck1v ZGUgPT0gVlZFTkNfSERSX09GRgo+ID4+ICsgICAgICAgICYmIChhdmN0eC0+Y29sb3JfcHJpbWFy aWVzICE9IEFWQ09MX1BSSV9VTlNQRUNJRklFRAo+ID4+ICsgICAgICAgICAgICB8fCBhdmN0eC0+ Y29sb3JzcGFjZSAhPSBBVkNPTF9TUENfVU5TUEVDSUZJRUQpKSB7Cj4gPj4gKyAgICAgICAgcGFy YW1zLT5tX3Z1aVBhcmFtZXRlcnNQcmVzZW50ID0gMTsKPiA+PiArICAgICAgICBwYXJhbXMtPm1f Y29sb3VyRGVzY3JpcHRpb25QcmVzZW50ID0gdHJ1ZTsKPiA+PiArICAgIH0KPiA+PiArfQo+ID4+ ICsKPiA+PiArc3RhdGljIHZvaWQgZmZfdnZlbmNfc2V0X2ZyYW1lcmF0ZShBVkNvZGVjQ29udGV4 dCAqYXZjdHgsCj4gdnZlbmNfY29uZmlnKiBwYXJhbXMgKQo+ID4+ICt7Cj4gPj4gKyAgICBwYXJh bXMtPm1fRnJhbWVSYXRlID0gYXZjdHgtPnRpbWVfYmFzZS5kZW47Cj4gPj4gKyAgICBwYXJhbXMt Pm1fRnJhbWVTY2FsZSA9IGF2Y3R4LT50aW1lX2Jhc2UubnVtOwo+ID4+ICsKPiA+PiArRkZfRElT QUJMRV9ERVBSRUNBVElPTl9XQVJOSU5HUwo+ID4+ICsKPiA+PiArI2lmIEZGX0FQSV9USUNLU19Q RVJfRlJBTUUKPiA+PiArICAgIGlmIChhdmN0eC0+dGlja3NfcGVyX2ZyYW1lID09IDEpIHsKPiA+ PiArI2VuZGlmCj4gPj4gKyAgICAgICAgcGFyYW1zLT5tX1RpY2tzUGVyU2Vjb25kID0gLTE7ICAg Ly8gYXV0byBtb2RlIGZvciB0aWNrcyBwZXIKPiBmcmFtZSA9IDEKPiA+PiArI2lmIEZGX0FQSV9U SUNLU19QRVJfRlJBTUUKPiA+PiArICAgIH0gZWxzZSB7Cj4gPj4gKyAgICAgICAgcGFyYW1zLT5t X1RpY2tzUGVyU2Vjb25kID0KPiA+PiArICAgICAgICAgICAgY2VpbCgoYXZjdHgtPnRpbWVfYmFz ZS5kZW4gLyAoZG91YmxlKQo+IGF2Y3R4LT50aW1lX2Jhc2UubnVtKSAqCj4gPj4gKyAgICAgICAg ICAgICAgICAgKGRvdWJsZSkgYXZjdHgtPnRpY2tzX3Blcl9mcmFtZSk7Cj4gPj4gKyAgICB9Cj4g Pj4gKyNlbmRpZgo+ID4+ICtGRl9FTkFCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKPiA+PiArfQo+ ID4+ICsKPiA+PiArc3RhdGljIGludCBmZl92dmVuY19wYXJzZV92dmVuY19wYXJhbXMoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LAo+IHZ2ZW5jX2NvbmZpZyogcGFyYW1zLCBjaGFyKiBzdGF0c2ZpbGUg KQo+ID4+ICt7Cj4gPj4gKyAgICBpbnQgcGFyc2VfcmV0LCByZXQ7Cj4gPj4gKyAgICBWVmVuQ0Nv bnRleHQgKnM7Cj4gPj4gKyAgICBBVkRpY3Rpb25hcnlFbnRyeSAqZW4gPSBOVUxMOwo+ID4KPiA+ IGNvbnN0Cj4gPgo+ID4+ICsgICAgcyA9KFZWZW5DQ29udGV4dCAqKSBhdmN0eC0+cHJpdl9kYXRh Owo+ID4KPiA+IENhbiBiZSBpbml0aWFsaXplZCBkaXJlY3RseSBhbmQgd2l0aG91dCB0aGUgY2Fz dC4KPiA+Cj4gVGhhbmtzLiBJwrRsbCByZW1vdmUgaXQuCj4KPiA+PiArICAgIHJldCA9IDA7Cj4g Pj4gKwo+ID4+ICsgICAgd2hpbGUgKChlbiA9IGF2X2RpY3RfZ2V0KHMtPm9wdGlvbnMudnZlbmNf b3B0cywgIiIsIGVuLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX0RJQ1Rf SUdOT1JFX1NVRkZJWCkpKSB7Cj4gPgo+ID4gYXZfZGljdF9pdGVyYXRlKCkKPgo+IEkgd2FzIHVz aW5nIGxpYngyNjQsbGlieDI2NSxsaWJhb21lbmMgYXMgcmVmZXJlbmNlIGFuZCBhbGlnbmVkIHRv Cj4gdGhlIGV4aXN0aW5nIGNvZGUuCj4gSSB3aWxsIGNoYW5nZSBpdCB0byBhdl9kaWN0X2l0ZXJh dGUoKQo+Cj4gPgo+ID4+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAidnZl bmNfc2V0X3BhcmFtOiAnJXM6JXMnXG4iLAo+IGVuLT5rZXksCj4gPj4gKyAgICAgICAgICAgICAg IGVuLT52YWx1ZSk7Cj4gPj4gKyAgICAgICAgcGFyc2VfcmV0ID0gdnZlbmNfc2V0X3BhcmFtKHBh cmFtcywgZW4tPmtleSwgZW4tPnZhbHVlKTsKPiA+PiArICAgICAgICBzd2l0Y2ggKHBhcnNlX3Jl dCkgewo+ID4+ICsgICAgICAgIGNhc2UgVlZFTkNfUEFSQU1fQkFEX05BTUU6Cj4gPj4gKyAgICAg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biB2dmVuYyBvcHRpb246 ICVzLlxuIiwKPiA+PiArICAgICAgICAgICAgICAgICAgIGVuLT5rZXkpOwo+ID4+ICsgICAgICAg ICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4gPj4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4+ ICsgICAgICAgIGNhc2UgVlZFTkNfUEFSQU1fQkFEX1ZBTFVFOgo+ID4+ICsgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwKPiA+PiArICAgICAgICAgICAgICAgICAgICJJbnZh bGlkIHZ2ZW5jIHZhbHVlIGZvciAlczogJXMuXG4iLCBlbi0+a2V5LAo+IGVuLT52YWx1ZSk7Cj4g Pj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiA+PiArICAgICAgICAgICAg YnJlYWs7Cj4gPj4gKyAgICAgICAgZGVmYXVsdDoKPiA+PiArICAgICAgICAgICAgYnJlYWs7Cj4g Pj4gKyAgICAgICAgfQo+ID4+ICsKPiA+PiArICAgICAgICBpZiAobWVtY21wKGVuLT5rZXksICJy Y3N0YXRzZmlsZSIsIDExKSA9PSAwIHx8Cj4gPj4gKyAgICAgICAgICAgIG1lbWNtcChlbi0+a2V5 LCAiUkNTdGF0c0ZpbGUiLCAxMSkgPT0gMCkgewo+ID4KPiA+IFRoaXMgcHJlc3VtZXMgdGhhdCBl bi0+a2V5IGlzIGF0IGxlYXN0IDExIGJ5dGUgbG9uZyAoYW5kIGl0IHdvdWxkIGFjY2VwdAo+ID4g a2V5cyBvbmx5IHByZWZpeGVkIGJ5IHJjc3RhdHNmaWxlKTsgdGhpcyBuZWVkIG5vdCBiZSB0cnVl IGF0IGFsbC4gSG93Cj4gPiBhYm91dCB1c2luZyBhdl9zdHJjYXNlY21wKCk/Cj4KPiBHb29kIHBv aW50LiBJwrRsbCByZW1vdmUgdGhlIG1lbWNtcC4KPgo+ID4KPiA+PiArICAgICAgICAgICAgc3Ry bmNweShzdGF0c2ZpbGUsIGVuLT52YWx1ZSwgc3RybGVuKHN0YXRzZmlsZSkpOwo+ID4+ICsgICAg ICAgICAgICBzdGF0c2ZpbGVbc3RybGVuKHN0YXRzZmlsZSldID0gJ1wwJzsKPiA+Cj4gPiBEaWQg eW91IHRlc3QgdGhpcyBhdCBhbGw/Cj4gPiAxLiBVc2luZyBzdHJsZW4oc3RhdHNmaWxlKSBtZWFu cyB0aGF0IHRoZSBmaWxlbmFtZSBvZiB0aGUgc3RhdHNmaWxlIGlzCj4gPiBib3VuZGVkIGJ5IHN0 cmxlbigidnZlbmMtcmNzdGF0cy5qc29uIik7IG1vcmUgcHJlY2lzZWx5LCBldmVyeSBpdGVyYXRp b24KPiA+IG9mIHRoaXMgY29kZSBibG9jayBjYW4gZ3JvdyBzdHJsZW4oKSBvZiB0aGUgYnVmZmVy IGJ5IG9uZSBhbmQgdGhlcmUgaXMKPiA+IG5vIHJlYWwgYm91bmRzIGNoZWNrLCBzbyB0aGlzIGNv dWxkIGxlYWQgdG8gYSBzdGFjayBidWZmZXIgb3ZlcmZsb3cKPiA+ICh3aGVuIHVzaW5nIGEgZGlj dGlvbmFyeSB0aGF0IGNvbnRhaW5zIHJjc3RhdHNmaWxlIGVudHJpZXMgbXVsdGlwbGUKPiB0aW1l cykuCj4gPiAyLiBXZSBoYXZlIGF2X3N0cmxjcHkoKSBmb3IgdGhpcy4KPiA+IDMuIEJ1dCBhIGJl dHRlciBhcHByb2FjaCBpcyB0byBqdXN0IG5vdCBjb3B5IHRoZSBzdHJpbmcgYXQgYWxsLCBhdm9p ZGluZwo+ID4gYW55IGxlbmd0aCByZXN0cmljdGlvbiBvbiB0aGUgc3RhdHNmaWxlOiBVc2UgY29u c3QgY2hhciAqKnN0YXRzZmlsZQo+ID4gaW5zdGVhZCBvZiB0aGUgY2hhciAqc3RhdHNmaWxlIHBh cmFtZXRlcjsgaW4gZW5jb2RlX2luaXQgYmVsb3cgeW91IGp1c3QKPiA+IGluaXRpYWxpemUgc3Rh dHNmaWxlIHZpYSAnY29uc3QgY2hhciAqc3RhdHNmaWxlID0gInZ2ZW5jLXJjc3RhdHMuanNvbiI7 Jy4KPiA+Cj4gPiBUaGUgdHlwaWNhbCB3YXkgdG8gcGFzcyB0aGUgc3RhdGlzdGljcyBvZiBhIGZp cnN0IHBhc3MgdG8gYW4gZW5jb2RlciBpcwo+ID4gdmlhIGFuIGFsbG9jYXRlZCBidWZmZXIsIG5v dCB2aWEgYSBmaWxlbmFtZSBmb3IgdGhlIGVuY29kZXIgdG8gcmVhZAo+ID4gZnJvbS93cml0ZSB0 byAoc2VlIEFWQ29kZWNDb250ZXh0LnN0YXRzX291dCwgc3RhdHNfaW4pLiBJcyB0aGlzIHBvc3Np YmxlCj4gPiB3aXRoIGxpYnZ2ZW5jPwo+ID4KPiBUaGUgMnBhc3MgYXBwcm9hY2ggd2FzIHF1aXRl IHNvbWUgb2YgYSBoYWNrIGJ5IHVzaW5nIHRoZSB2dmVuYy0KPiBwYXJhbXMuCj4gVGhhbmtzIGZv ciB0aGUgcmV2aWV3IGFuZCBoaW50cyB0byBpbXByb3ZlIGl0Lgo+IEkgd2lsbCBjaGFuZ2UgdGhl IGNvZGUgYW5kIGFsaWduIHRvIHgyNjQgYmVoYXZpb3IgYnkgdXNpbmcgdGhlCj4gJ3Bhc3Nsb2dm aWxlJy8nc3RhdHMnIG9wdGlvbnMgYW5kIHVzZSAycGFzcyBmbGFncyBBVl9DT0RFQ19GTEFHX1BB U1MxIHwKPiBBVl9DT0RFQ19GTEFHX1BBU1MyIGluc3RlYWQgb2YgdXNpbmcgdnZlbmMtcGFyYW1z Lgo+IEkgYWxzbyB3aWxsIHVzZSB0aGUgZGVmYXVsdCBmZm1wZWcgMnBhc3MgbG9nZmlsZSAnZmZt cGVnMnBhc3MtMC5sb2cnIGFzCj4gZGVmYXVsdCBhcyBsaWJ4MjY0IGlzIHVzaW5nIGl0Lgo+IEN1 cnJlbnRseSB0aGVyZSBpcyBubyB3YXkgaW4gdnZlbmMgdG8gdXNlIGFuIGFsbG9jYXRlZCBidWZm ZXIgZm9yCj4gd3JpdGUvcmVhZCBzdGF0aXN0aWNzLgo+Cj4gPj4gKyAgICAgICAgfQo+ID4+ICsg ICAgfQo+ID4+ICsgICAgcmV0dXJuIHJldDsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGlu dCBmZl92dmVuY19zZXRfcmNfbW9kZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIHZ2ZW5jX2NvbmZp ZyoKPiBwYXJhbXMpCj4gPj4gK3sKPiA+PiArICAgIGlmIChwYXJhbXMtPm1fUkNQYXNzICE9IC0x ICYmIHBhcmFtcy0+bV9SQ051bVBhc3NlcyA9PSAxKQo+ID4+ICsgICAgICAgIHBhcmFtcy0+bV9S Q051bVBhc3NlcyA9IDI7ICAgICAgIC8qIGVuYWJsZSAycGFzcyBtb2RlICovCj4gPgo+ID4gV2Ug YWN0dWFsbHkgaGF2ZSBBVl9DT0RFQ19GTEFHX1BBU1MxIGFuZCBBVl9DT0RFQ19GTEFHX1BBU1My IHRoYXQgeW91Cj4gPiBjb21wbGV0ZWx5IGlnbm9yZS4KPiA+Cj4gIEnCtGxsIGNoYW5nZSB0aGUg MnBhc3MgYmVoYXZpb3IgYXMgbWVudGlvbmVkIGFib3ZlLgo+Cj4gPj4gKwo+ID4+ICsgICAgaWYo YXZjdHgtPnJjX21heF9yYXRlKSB7Cj4gPj4gKyNpZiBWVkVOQ19WRVJTSU9OX01BSk9SID4gMSB8 fCAoVlZFTkNfVkVSU0lPTl9NQUpPUiA9PSAxICYmCj4gVlZFTkNfVkVSU0lPTl9NSU5PUiA+IDgp Cj4gPgo+ID4gTWF5YmUgeW91IHNob3VsZCBtYXAgYWxsIG9mIHRoZSBtYWpvciwgbWlub3IgYW5k IHBhdGNoIHZlcnNpb25zIHRvIG9uZQo+ID4gVlZFTkNfVkVSU0lPTj8KPiA+Cj4gVGhhbmtzIEkg d2lsbCB1c2UgYSBpbnRlZ2VyIHZlcnNpb24gZm9yIGJldHRlciByZWFkYWJpbGl0eS4KPgo+ID4+ ICsgICAgICAgIHBhcmFtcy0+bV9SQ01heEJpdHJhdGUgPSBhdmN0eC0+cmNfbWF4X3JhdGU7Cj4g Pj4gKyNlbmRpZgo+ID4+ICsKPiA+PiArI2lmIFZWRU5DX1ZFUlNJT05fTUFKT1IgPT0gMSAmJiBW VkVOQ19WRVJTSU9OX01JTk9SIDwgMTEKPiA+PiArICAgICAgICAvKiByY19tYXhfcmF0ZSB3aXRo b3V0IGEgYml0X3JhdGUgZW5hYmxlcyBjYXBwZWQgQ1FGIG1vZGUuCj4gPj4gKyAgICAgICAgKFFQ ICsgc3Viai4gb3B0aW1pemF0aW9uICsgbWF4LiBiaXRyYXRlKSAqLwo+ID4+ICsgICAgICAgIGlm KCFhdmN0eC0+Yml0X3JhdGUpIHsKPiA+PiArICAgICAgICAgICAgYXZfbG9nKCBhdmN0eCwgQVZf TE9HX0VSUk9SLAo+ID4+ICsgICAgICAgICAgICAgICAgIkNhcHBlZCBDb25zdGFudCBRdWFsaXR5 IEZhY3RvciBtb2RlIChjYXBwZWQgQ1FGKQo+IG5lZWRzIGF0ICIKPiA+PiArICAgICAgICAgICAg ICAgICJsZWFzdCB2dmVuYyB2ZXJzaW9uID49IDEuMTEuMCAoY3VycmVudCB2ZXJzaW9uICVzKVxu IiwKPiA+PiArICAgICAgICAgICAgICAgIHZ2ZW5jX2dldF92ZXJzaW9uKCkpOwo+ID4+ICsgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ID4+ICsgICAgICAgIH0KPiA+PiArI2Vu ZGlmCj4gPj4gKyAgICB9Cj4gPj4gKyAgICByZXR1cm4gMDsKPiA+PiArfQo+ID4+ICsKPiA+PiAr c3RhdGljIGludCBmZl92dmVuY19pbml0X2V4dHJhZGF0YShBVkNvZGVjQ29udGV4dCAqYXZjdHgs IFZWZW5DQ29udGV4dAo+ICpzKQo+ID4+ICt7Cj4gPj4gKyAgICBpbnQgcmV0Owo+ID4+ICsgICAg aWYgKGF2Y3R4LT5mbGFncyAmIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUikgewo+ID4+ICsg ICAgICAgIHJldCA9IHZ2ZW5jX2dldF9oZWFkZXJzKHMtPnZ2ZW5jRW5jLCBzLT5wQVUpOwo+ID4+ ICsgICAgICAgIGlmICgwICE9IHJldCkgewo+ID4+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwKPiA+PiArICAgICAgICAgICAgICAgICAgICJjYW5ub3QgZ2V0IGhlYWRl cnMgKFNQUyxQUFMpIGZyb20gdnZjCj4gZW5jb2Rlcih2dmVuYyk6ICVzXG4iLAo+ID4+ICsgICAg ICAgICAgICAgICAgICAgdnZlbmNfZ2V0X2xhc3RfZXJyb3Iocy0+dnZlbmNFbmMpKTsKPiA+PiAr ICAgICAgICAgICAgdnZlbmNfZW5jb2Rlcl9jbG9zZShzLT52dmVuY0VuYyk7Cj4gPj4gKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gPj4gKyAgICAgICAgfQo+ID4+ICsKPiA+ PiArICAgICAgICBpZiAocy0+cEFVLT5wYXlsb2FkVXNlZFNpemUgPD0gMCkgewo+ID4+ICsgICAg ICAgICAgICB2dmVuY19lbmNvZGVyX2Nsb3NlKHMtPnZ2ZW5jRW5jKTsKPiA+PiArICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPj4gKyAgICAgICAgfQo+ID4+ICsKPiA+ PiArICAgICAgICBhdmN0eC0+ZXh0cmFkYXRhX3NpemUgPSBzLT5wQVUtPnBheWxvYWRVc2VkU2l6 ZTsKPiA+PiArICAgICAgICBhdmN0eC0+ZXh0cmFkYXRhID0KPiA+PiArICAgICAgICAgICAgYXZf bWFsbG9jeihhdmN0eC0+ZXh0cmFkYXRhX3NpemUgKwo+IEFWX0lOUFVUX0JVRkZFUl9QQURESU5H X1NJWkUpOwo+ID4+ICsgICAgICAgIGlmICghYXZjdHgtPmV4dHJhZGF0YSkgewo+ID4+ICsgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwKPiA+PiArICAgICAgICAgICAgICAg ICAgICJDYW5ub3QgYWxsb2NhdGUgVlZDIGhlYWRlciBvZiBzaXplICVkLlxuIiwKPiA+PiArICAg ICAgICAgICAgICAgICAgIGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSk7Cj4gPgo+ID4gUG9pbnRsZXNz IGVycm9yIG1lc3NhZ2UsIGxpa2Ugc28gbWFueSBvZiB5b3VyIGFsbG9jYXRpb24gZXJyb3JzLgo+ ID4KPiBTb3JyeSwgYnV0IEkgd2FzIHVzaW5nIGxpYngyNjUgYXMgcmVmZXJlbmNlIHdoZXJlIGFs bCB0aGVzZSBlcnJvcgo+IG1lc3NhZ2VzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgc2FtZSB3YXku Cj4gU2hvdWxkIEkganVzdCByZW1vdmUgdGhlIGVycm9yIG1lc3NhZ2VzIGFuZCByZXR1cm4gYW4g ZXJyb3I/Cj4KMS4KCj4KPiA+PiArICAgICAgICAgICAgdnZlbmNfZW5jb2Rlcl9jbG9zZShzLT52 dmVuY0VuYyk7Cj4gPj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPj4g KyAgICAgICAgfQo+ID4+ICsKPiA+PiArICAgICAgICBtZW1jcHkoYXZjdHgtPmV4dHJhZGF0YSwg cy0+cEFVLT5wYXlsb2FkLAo+IGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSk7Cj4gPj4gKyAgICAgICAg bWVtc2V0KGF2Y3R4LT5leHRyYWRhdGEgKyBhdmN0eC0+ZXh0cmFkYXRhX3NpemUsIDAsCj4gPj4g KyAgICAgICAgICAgICAgIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpOwo+ID4KPiA+IFVu bmVjZXNzYXJ5IGdpdmVuIHRoYXQgeW91IHVzZSBhdl9tYWxsb2N6KCkuCj4gPgo+IEluZGVlZC4g ScK0bGwgcmVtb3ZlIGl0Lgo+Cj4gPj4gKyAgICB9Cj4gPj4gKyAgICByZXR1cm4gMDsKPiA+PiAr fQo+ID4+ICsKPiA+PiArc3RhdGljIGF2X2NvbGQgaW50IGZmX3Z2ZW5jX2VuY29kZV9pbml0KEFW Q29kZWNDb250ZXh0ICphdmN0eCkKPiA+PiArewo+ID4+ICsgICAgaW50IHJldDsKPiA+PiArICAg IGludCBmcmFtZXJhdGUsIHFwOwo+ID4+ICsgICAgVlZlbkNDb250ZXh0ICpzOwo+ID4+ICsgICAg dnZlbmNfY29uZmlnIHBhcmFtczsKPiA+PiArICAgIHZ2ZW5jUHJlc2V0TW9kZSBwcmVzZXQ7Cj4g Pj4gKyAgICBjaGFyIHN0YXRzZmlsZVsxMDI0XSA9ICJ2dmVuYy1yY3N0YXRzLmpzb24iOwo+ID4+ ICsKPiA+PiArICAgIHMgPSAoVlZlbkNDb250ZXh0ICopIGF2Y3R4LT5wcml2X2RhdGE7Cj4gPj4g KyAgICBxcCA9IHMtPm9wdGlvbnMucXA7Cj4gPj4gKyAgICBwcmVzZXQgPSAodnZlbmNQcmVzZXRN b2RlKSBzLT5vcHRpb25zLnByZXNldDsKPiA+PiArCj4gPj4gKyAgICBpZiAoYXZjdHgtPmZsYWdz ICYgQVZfQ09ERUNfRkxBR19JTlRFUkxBQ0VEX0RDVCkgewo+ID4+ICsgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLAo+ID4+ICsgICAgICAgICAgICAgICAiZmZfdnZlbmNfZW5jb2Rl X2luaXQ6OmluaXQoKSBpbnRlcmxhY2VkIGVuY29kaW5nIG5vdAo+IHN1cHBvcnRlZCB5ZXRcbiIp Owo+ID4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4KPiA+IFRoaXMg aXMgbm90IGludmFsaWQgZGF0YTsgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gYWRkIHRoZSBuYW1l IG9mIHRoZQo+ID4gZnVuY3Rpb24gdG8gdGhlIGVycm9yIG1lc3NhZ2UuCj4gPiAoQW5kIHdoYXQg ZG9lcyAibm90IHN1cHBvcnRlZCB5ZXQiIGV2ZW4gbWVhbj8gRG9lcyBWVkMgZXZlbiBoYXZlCj4g PiBzcGVjaWZpYyBpbnRlcmxhY2VkIGNvZGluZyBtZXRob2RzPyBXaWxsIHRoaXMgZXZlciBiZSBz dXBwb3J0ZWQ/KQo+ID4KPiBWVkMgaGFzIGludGVybGFjZXMgc3VwcG9ydCBhcyBIRVZDIGRvZXMu IFRoZXJlIGFyZSBubyBzcGVjaWFsIHRvb2xzCj4gYnV0IG9ubHkgc2lnbmFsaXppbmcgaW4gaGln aC1sZXZlbCBzeW50YXguCj4gQ3VycmVudGx5IHRoZXJlIGlzIG5vIHN1cHBvcnQgaW4gdnZlbmMg dG8gc2lnbmFsaXplIGZpZWxkcywgc28gSSBhZGRlZAo+IGFuIGVycm9yLgo+IFdoYXQgd291bGQg YmUgdGhlIGJlc3Qgd2F5IHRvIGRvIGl0Pwo+IEp1c3QgdGhyb3cgYSB3YXJuaW5nIG9yIHVzaW5n IGFuIGVycm9yIGFuZCByZXR1cm4/Cj4gSSB3b3VsZCBjaGFuZ2UgaXQgdG86Cj4gYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJpbnRlcmxhY2VkIGVuY29kaW5nIG5vdCBzdXBwb3J0ZWRcbiIp Owo+IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4KMi4KCj4KPiA+PiArICAgIH0KPiA+PiArCj4g Pj4gKyAgICB2dmVuY19jb25maWdfZGVmYXVsdCgmcGFyYW1zKTsKPiA+PiArCj4gPj4gKyAgICBm cmFtZXJhdGUgPSBhdmN0eC0+dGltZV9iYXNlLmRlbiAvIGF2Y3R4LT50aW1lX2Jhc2UubnVtOwo+ ID4KPiA+IFlvdSBhcmUgYXdhcmUgdGhhdCB0aGUgZGl2aXNpb24gcGVyZm9ybWVkIGhlcmUgaXMg YW4gaW50ZWdlciBkaXZpc2lvbj8KPiA+IEFuZCBhcmUgeW91IGF3YXJlIHRoYXQgbm9uLWNmciBj b250ZW50IGRvZXMgbm90IHJlYWxseSBoYXZlIGEgZnJhbWVyYXRlPwo+ID4gQW5kIHRoYXQgZm9y IGNmciBjb250ZW50LCBBVkNvZGVjQ29udGV4dC5mcmFtZXJhdGUgY29udGFpbnMgdGhlCj4gZnJh bWVyYXRlPwo+ID4KPiAgVGhlIGludGVyZmFjZSBjYWxsICd2dmVuY19pbml0X2RlZmF1bHQnIGlz IGV4cGVjdGluZyBhbiBpbnQKPiBmcmFtZXJhdGUgYW5kIGlzIHNldHRpbmcgdGhlIHRoZSBudHNj IHRpbWluZyBkZXBlbmRpbmcgIG9uIHRoZQo+IGZyYW1lcmF0ZSBpbnRlcm5hbGx5IChlLmcuIDU5 IGlzIG1hcHBlZCB0byA2MDAwMC8xMDAxKS4KPiBUaGUgY29ycmVjdCB0aW1lIGJhc2UgaXMgc2V0 IGxhdGVyIGluIHRoZSBpbml0IGNhbGwgaW4gZnVuY3Rpb24KPiAndnZlbmNfc2V0X2ZyYW1lcmF0 ZScKPiAuLgo+ICAgICAncGFyYW1zLT5tX0ZyYW1lUmF0ZSA9IGF2Y3R4LT50aW1lX2Jhc2UuZGVu OycKPiAgICAgJ3BhcmFtcy0+bV9GcmFtZVNjYWxlID0gYXZjdHgtPnRpbWVfYmFzZS5udW07Jwo+ Cj4gQnV0IGluZGVlZCBJIHdhcyBhd2FyZSB0aGF0IEFWQ29kZWNDb250ZXh0LmZyYW1lcmF0ZSBh bmQKPiBBVkNvZGVjQ29udGV4dC50aW1lX2Jhc2UgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkuCj4g SSB3aWxsIGNoYW5nZSBpdCwgdGhhbmtzLgo+Cj4gPj4gKyAgICB2dmVuY19pbml0X2RlZmF1bHQo JnBhcmFtcywgYXZjdHgtPndpZHRoLCBhdmN0eC0+aGVpZ2h0LCBmcmFtZXJhdGUsCj4gPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgKHFwID49IDApID8gMCA6IGF2Y3R4LT5iaXRfcmF0ZSwgKHFw IDwgMCkgPyAzMgo+IDogcXAsIHByZXNldCk7Cj4gPj4gKwo+ID4+ICsgICAgZmZfdnZlbmNfc2V0 X3ZlcmJvc2l0b3J5KCZwYXJhbXMpOwo+ID4+ICsKPiA+PiArICAgIGlmIChhdmN0eC0+dGhyZWFk X2NvdW50ID4gMCkKPiA+PiArICAgICAgICBwYXJhbXMubV9udW1UaHJlYWRzID0gYXZjdHgtPnRo cmVhZF9jb3VudDsKPiA+PiArCj4gPj4gKyAgICAvKiBHT1Agc2V0dGluZ3MgKElEUi9DUkEpICov Cj4gPj4gKyAgICBpZiAoYXZjdHgtPmZsYWdzICYgQVZfQ09ERUNfRkxBR19DTE9TRURfR09QKQo+ ID4+ICsgICAgICAgIHBhcmFtcy5tX0RlY29kaW5nUmVmcmVzaFR5cGUgPSBWVkVOQ19EUlRfSURS Owo+ID4+ICsKPiA+PiArICAgIGlmIChhdmN0eC0+Z29wX3NpemUgPT0gMSkgewo+ID4+ICsgICAg ICAgIHBhcmFtcy5tX0dPUFNpemUgPSAxOwo+ID4+ICsgICAgICAgIHBhcmFtcy5tX0ludHJhUGVy aW9kID0gMTsKPiA+PiArICAgIH0gZWxzZSB7Cj4gPj4gKyAgICAgICAgcGFyYW1zLm1fSW50cmFQ ZXJpb2RTZWMgPSBzLT5vcHRpb25zLmludHJhUmVmcmVzaFNlYzsKPiA+PiArICAgIH0KPiA+PiAr Cj4gPj4gKyAgICBwYXJhbXMubV9BY2Nlc3NVbml0RGVsaW1pdGVyID0gdHJ1ZTsKPiA+PiArICAg IHBhcmFtcy5tX1JDTnVtUGFzc2VzID0gMTsKPiA+PiArCj4gPj4gKyAgICBwYXJhbXMubV91c2VQ ZXJjZXB0UVBBID0gcy0+b3B0aW9ucy5zdWJqZWN0aXZlT3B0aW1pemF0aW9uOwo+ID4+ICsgICAg cGFyYW1zLm1fbGV2ZWwgICAgICAgICA9ICh2dmVuY0xldmVsKSBzLT5vcHRpb25zLmxldmVsSWRj Owo+ID4+ICsgICAgcGFyYW1zLm1fbGV2ZWxUaWVyICAgICA9ICh2dmVuY1RpZXIpIHMtPm9wdGlv bnMudGllcjsKPiA+PiArCj4gPj4gKyAgICBmZl92dmVuY19zZXRfZnJhbWVyYXRlKGF2Y3R4LCAm cGFyYW1zKTsKPiA+PiArCj4gPj4gKyAgICByZXQgPSBmZl92dmVuY19zZXRfcGljX2Zvcm1hdChh dmN0eCwgJnBhcmFtcyk7Cj4gPj4gKyAgICBpZiggcmV0ICE9IDAgKQo+ID4+ICsgICAgICAgIHJl dHVybiByZXQ7Cj4gPj4gKwo+ID4+ICsgICAgZmZfdnZlbmNfc2V0X2NvbG9yX2Zvcm1hdChhdmN0 eCwgJnBhcmFtcyk7Cj4gPj4gKwo+ID4+ICsgICAgcmV0ID0gZmZfdnZlbmNfcGFyc2VfdnZlbmNf cGFyYW1zKGF2Y3R4LCAmcGFyYW1zLCAmc3RhdHNmaWxlWzBdKTsKPiA+PiArICAgIGlmKCByZXQg IT0gMCApCj4gPj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiA+PiArCj4gPj4gKwo+ID4+ICsgICAg cmV0ID0gZmZfdnZlbmNfc2V0X3JjX21vZGUoYXZjdHgsICZwYXJhbXMpOwo+ID4+ICsgICAgaWYo IHJldCAhPSAwICkKPiA+PiArICAgICAgICByZXR1cm4gcmV0Owo+ID4+ICsKPiA+PiArICAgIHMt PnZ2ZW5jRW5jID0gdnZlbmNfZW5jb2Rlcl9jcmVhdGUoKTsKPiA+PiArICAgIGlmIChOVUxMID09 IHMtPnZ2ZW5jRW5jKSB7Cj4gPgo+ID4gaWYgKCFzLT52dmVuY0VuYykgaXMgdGhlIGNvbW1vbiBj aGVjayBoZXJlLgo+ID4KPiBUaGFua3MuCj4KPiA+PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgImNhbm5vdCBjcmVhdGUgdnZjIGVuY29kZXIKPiAodnZlbmMpXG4iKTsKPiA+ PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4+ICsgICAgfQo+ID4+ICsKPiA+ PiArICAgIHZ2ZW5jX3NldF9tc2dfY2FsbGJhY2soJnBhcmFtcywgcy0+dnZlbmNFbmMsCj4gZmZf dnZlbmNfbG9nX2NhbGxiYWNrKTsKPiA+PiArICAgIHJldCA9IHZ2ZW5jX2VuY29kZXJfb3Blbihz LT52dmVuY0VuYywgJnBhcmFtcyk7Cj4gPj4gKyAgICBpZiAoMCAhPSByZXQpIHsKPiA+PiArICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgImNhbm5vdCBvcGVuIHZ2YyBlbmNvZGVy ICh2dmVuYyk6Cj4gJXNcbiIsCj4gPj4gKyAgICAgICAgICAgICAgIHZ2ZW5jX2dldF9sYXN0X2Vy cm9yKHMtPnZ2ZW5jRW5jKSk7Cj4gPj4gKyAgICAgICAgdnZlbmNfZW5jb2Rlcl9jbG9zZShzLT52 dmVuY0VuYyk7Cj4gPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiA+PiArICAg IH0KPiA+PiArCj4gPj4gKyAgICB2dmVuY19nZXRfY29uZmlnKHMtPnZ2ZW5jRW5jLCAmcGFyYW1z KTsgICAgIC8qIGdldCB0aGUgYWRhcHRlZAo+IGNvbmZpZyAqLwo+ID4+ICsKPiA+PiArICAgIGF2 X2xvZyhhdmN0eCwgYXZfbG9nX2dldF9sZXZlbCgpLCAidnZlbmMgdmVyc2lvbjogJXNcbiIsCj4g dnZlbmNfZ2V0X3ZlcnNpb24oKSk7Cj4gPj4gKyAgICBhdl9sb2coYXZjdHgsIGF2X2xvZ19nZXRf bGV2ZWwoKSwgIiVzXG4iLAo+ID4+ICsgICAgICAgICAgICB2dmVuY19nZXRfY29uZmlnX2FzX3N0 cmluZygmcGFyYW1zLCBwYXJhbXMubV92ZXJib3NpdHkpKTsKPiA+PiArCj4gPj4gKyAgICBpZiAo cGFyYW1zLm1fUkNOdW1QYXNzZXMgPT0gMikgewo+ID4+ICsgICAgICAgIHJldCA9IHZ2ZW5jX2lu aXRfcGFzcyhzLT52dmVuY0VuYywgcGFyYW1zLm1fUkNQYXNzIC0gMSwKPiAmc3RhdHNmaWxlWzBd KTsKPiA+PiArICAgICAgICBpZiAoMCAhPSByZXQpIHsKPiA+PiArICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAiY2Fubm90IGlu aXQgcGFzcyAlZCBmb3IgdnZjIGVuY29kZXIgKHZ2ZW5jKTogJXNcbiIsCj4gPj4gKyAgICAgICAg ICAgICAgICAgICBwYXJhbXMubV9SQ1Bhc3MsIHZ2ZW5jX2dldF9sYXN0X2Vycm9yKHMtPnZ2ZW5j RW5jKSk7Cj4gPj4gKyAgICAgICAgICAgIHZ2ZW5jX2VuY29kZXJfY2xvc2Uocy0+dnZlbmNFbmMp Owo+ID4+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ID4+ICsgICAgICAg IH0KPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICBzLT5wQVUgPSB2dmVuY19hY2Nlc3NVbml0 X2FsbG9jKCk7Cj4gPj4gKyAgICBpZiggIXMtPnBBVSApewo+ID4+ICsgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0ZBVEFMLCAiY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgQVUKPiBwYXls b2FkXG4iKTsKPiA+Cj4gPiAxLiBUaGVyZSBpcyBhIG1lbW9yeSBsZWFrIGhlcmUsIGFzIHlvdSBk b24ndCBjbG9zZSB0aGUgZW5jb2Rlci4KPiA+IDIuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ5IHNl dHRpbmcgdGhlIEZGX0NPREVDX0NBUF9JTklUX0NMRUFOVVAKPiA+IGNhcF9pbnRlcm5hbDsgdGhl biB5b3Ugc2hvdWxkIChpbiBmYWN0LCBuZWVkIHRvKSByZW1vdmUgYWxsIHRoZQo+ID4gdnZlbmNf ZW5jb2Rlcl9jbG9zZSgpIGNhbGxzLgo+ID4gKFRoaXMgYWxzbyBmaXhlcyBsZWFrcyBvZiBwQVUg KGl0IGdldHMgbmV2ZXIgZnJlZWQgb24gaW5pdCBlcnJvcnMgYXQgYWxsCj4gPiBhbmQgbGVha3Mg ZS5nLiBvbiBmZl92dmVuY19pbml0X2V4dHJhZGF0YSgpIGVycm9ycy4pCj4gPgo+IFRoYW5rcy4g SSB3aWxsIHJldHVybiBhbiBlcnJvci4KPiBJwrRsbCBhZGQgRkZfQ09ERUNfQ0FQX0lOSVRfQ0xF QU5VUCBhbmQgcmVtb3ZlIGFsbCB2dmVuY19lbmNvZGVyX2Nsb3NlKCkKPiBjYWxscy4KPgo+ID4+ ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPj4gKyAgICB9Cj4gPj4gKyAgICB2 dmVuY19hY2Nlc3NVbml0X2FsbG9jX3BheWxvYWQocy0+cEFVLCBhdmN0eC0+d2lkdGggKgo+IGF2 Y3R4LT5oZWlnaHQpOwo+ID4+ICsgICAgaWYoICFzLT5wQVUgKXsKPiA+Cj4gPiBUaGlzIGlzIGEg bm9uc2Vuc2UgY2hlY2s6IHMtPnBBVSBpcyBhbHJlYWR5IHNldCBhbmQgY2FuJ3QgYmUgdW5zZXQg YnkKPiA+IHRoZSBjYWxsLCBzbyBvbmUgaGFzIHRvIGNoZWNrIHRoaXMgc29tZWhvdyBlbHNlLgo+ ID4KPiBUaGFua3MgZm9yIHNlZWluZyB0aGlzLiBJdCBoYXZlIHRvIGJlCj4gICAgIGlmICghcy0+ cEFVLT5wYXlsb2FkKXsKPiBJwrRsbCBjaGFuZ2UgaXQuCj4KPiA+PiArICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19GQVRBTCwgImNhbm5vdCBhbGxvY2F0ZSBwYXlsb2FkIG1lbW9yeSBvZgo+ IHNpemUgJWRcbiIsCj4gPgo+ID4gQVZfTE9HX0VSUk9SLCBub3QgQVZfTE9HX0ZBVEFMCj4gPgo+ ID4+ICsgICAgICAgICAgICAgICAgYXZjdHgtPndpZHRoICogYXZjdHgtPmhlaWdodCApOwo+ID4+ ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ ICsgICAgcmV0ID0gZmZfdnZlbmNfaW5pdF9leHRyYWRhdGEoYXZjdHgsIHMpOwo+ID4+ICsgICAg aWYoIHJldCAhPSAwICkKPiA+PiArICAgICAgICByZXR1cm4gcmV0Owo+ID4+ICsKPiA+PiArICAg IHMtPmVuY29kZURvbmUgPSBmYWxzZTsKPiA+PiArICAgIHJldHVybiAwOwo+ID4+ICt9Cj4gPj4g Kwo+ID4+ICtzdGF0aWMgYXZfY29sZCBpbnQgZmZfdnZlbmNfZW5jb2RlX2Nsb3NlKEFWQ29kZWND b250ZXh0ICogYXZjdHgpCj4gPj4gK3sKPiA+PiArICAgIFZWZW5DQ29udGV4dCAqcyA9IChWVmVu Q0NvbnRleHQgKikgYXZjdHgtPnByaXZfZGF0YTsKPiA+PiArICAgIGlmIChzLT52dmVuY0VuYykg ewo+ID4+ICsgICAgICAgIGlmIChhdl9sb2dfZ2V0X2xldmVsKCkgPj0gQVZfTE9HX1ZFUkJPU0Up Cj4gPj4gKyAgICAgICAgICAgIHZ2ZW5jX3ByaW50X3N1bW1hcnkocy0+dnZlbmNFbmMpOwo+ID4+ ICsKPiA+PiArICAgICAgICBpZiAoMCAhPSB2dmVuY19lbmNvZGVyX2Nsb3NlKHMtPnZ2ZW5jRW5j KSkgewo+ID4+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgImNhbm5v dCBjbG9zZSB2dmVuY1xuIik7Cj4gPj4gKyAgICAgICAgICAgIHJldHVybiAtMTsKPiA+Cj4gPiBZ b3Ugc2hvdWxkIGZyZWUgdGhlIGFjY2VzcyB1bml0IGV2ZW4gaWYgdnZlbmNfZW5jb2Rlcl9jbG9z ZSgpIHJldHVybmVkCj4gPiBhbiBlcnJvci4KPgo+IFRoYW5rcy4gScK0bGwgbW92ZSB0aGUgdnZl bmNfYWNjZXNzVW5pdF9mcmVlIHRvIHRoZSB0b3AgYmVmb3JlCj4gY2FsbGluZyB2dmVuY19lbmNv ZGVyX2Nsb3NlLgo+Cj4gPgo+ID4+ICsgICAgICAgIH0KPiA+PiArICAgIH0KPiA+PiArCj4gPj4g KyAgICB2dmVuY19hY2Nlc3NVbml0X2ZyZWUocy0+cEFVLCB0cnVlKTsKPiA+Cj4gPiBDYW4gdGhp cyBoYW5kbGUgdGhlIGNhc2UgaW4gd2hpY2ggcy0+cEFVIGlzIE5VTEw/Cj4gPgo+IFllcywgdGhl IGZ1bmN0aW9uIHZ2ZW5jX2FjY2Vzc1VuaXRfZnJlZSB3aWxsIGNoZWNrIHRoaXMgaW50ZXJuYWxs eQo+IGFzIHdlbGwuIEhvd2V2ZXIgSSBhZGQgYSBudWxsLWNoZWNrIHRvIG1ha2UgaXQgY2xlYXIu Cj4KPiA+PiArCj4gPj4gKyAgICByZXR1cm4gMDsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGlj IGF2X2NvbGQgaW50IGZmX3Z2ZW5jX2VuY29kZV9mcmFtZShBVkNvZGVjQ29udGV4dCAqYXZjdHgs Cj4gQVZQYWNrZXQgKnBrdCwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBBVkZyYW1lICpmcmFtZSwgaW50Cj4gKmdvdF9wYWNrZXQpCj4gPj4gK3sK PiA+PiArICAgIFZWZW5DQ29udGV4dCAqcyA9IChWVmVuQ0NvbnRleHQgKikgYXZjdHgtPnByaXZf ZGF0YTsKPiA+PiArICAgIHZ2ZW5jWVVWQnVmZmVyICpweXV2YnVmOwo+ID4+ICsgICAgdnZlbmNZ VVZCdWZmZXIgeXV2YnVmOwo+ID4+ICsgICAgaW50IHBpY3RfdHlwZTsKPiA+PiArICAgIGludCBy ZXQ7Cj4gPj4gKwo+ID4+ICsgICAgcHl1dmJ1ZiA9IE5VTEw7Cj4gPj4gKyAgICBpZiAoZnJhbWUp IHsKPiA+PiArICAgICAgICBpZiAoYXZjdHgtPnBpeF9mbXQgPT0gQVZfUElYX0ZNVF9ZVVY0MjBQ MTBMRSkgewo+ID4+ICsgICAgICAgICAgICB2dmVuY19ZVVZCdWZmZXJfZGVmYXVsdCgmeXV2YnVm KTsKPiA+PiArICAgICAgICAgICAgeXV2YnVmLnBsYW5lc1swXS5wdHIgPSAoaW50MTZfdCAqKSBm cmFtZS0+ZGF0YVswXTsKPiA+PiArICAgICAgICAgICAgeXV2YnVmLnBsYW5lc1sxXS5wdHIgPSAo aW50MTZfdCAqKSBmcmFtZS0+ZGF0YVsxXTsKPiA+PiArICAgICAgICAgICAgeXV2YnVmLnBsYW5l c1syXS5wdHIgPSAoaW50MTZfdCAqKSBmcmFtZS0+ZGF0YVsyXTsKPiA+PiArCj4gPj4gKyAgICAg ICAgICAgIHl1dmJ1Zi5wbGFuZXNbMF0ud2lkdGggPSBmcmFtZS0+d2lkdGg7Cj4gPj4gKyAgICAg ICAgICAgIHl1dmJ1Zi5wbGFuZXNbMF0uaGVpZ2h0ID0gZnJhbWUtPmhlaWdodDsKPiA+PiArICAg ICAgICAgICAgLyogc3RyaWRlIGlzIHVzZWQgaW4gMTZiaXRzYW1wbGVzICgxNmJpdCkgaW4gdnZl bmMsIGZmbXBlZwo+IHVzZXMgc3RyaWRlIGluIGJ5dGVzICovCj4gPj4gKyAgICAgICAgICAgIHl1 dmJ1Zi5wbGFuZXNbMF0uc3RyaWRlID0gZnJhbWUtPmxpbmVzaXplWzBdID4+IDE7Cj4gPj4gKwo+ ID4+ICsgICAgICAgICAgICB5dXZidWYucGxhbmVzWzFdLndpZHRoID0gZnJhbWUtPndpZHRoID4+ IDE7Cj4gPj4gKyAgICAgICAgICAgIHl1dmJ1Zi5wbGFuZXNbMV0uaGVpZ2h0ID0gZnJhbWUtPmhl aWdodCA+PiAxOwo+ID4+ICsgICAgICAgICAgICB5dXZidWYucGxhbmVzWzFdLnN0cmlkZSA9IGZy YW1lLT5saW5lc2l6ZVsxXSA+PiAxOwo+ID4+ICsKPiA+PiArICAgICAgICAgICAgeXV2YnVmLnBs YW5lc1syXS53aWR0aCA9IGZyYW1lLT53aWR0aCA+PiAxOwo+ID4+ICsgICAgICAgICAgICB5dXZi dWYucGxhbmVzWzJdLmhlaWdodCA9IGZyYW1lLT5oZWlnaHQgPj4gMTsKPiA+PiArICAgICAgICAg ICAgeXV2YnVmLnBsYW5lc1syXS5zdHJpZGUgPSBmcmFtZS0+bGluZXNpemVbMl0gPj4gMTsKPiA+ PiArCj4gPj4gKyAgICAgICAgICAgIHl1dmJ1Zi5jdHMgPSBmcmFtZS0+cHRzOwo+ID4+ICsgICAg ICAgICAgICB5dXZidWYuY3RzVmFsaWQgPSB0cnVlOwo+ID4+ICsgICAgICAgICAgICBweXV2YnVm ID0gJnl1dmJ1ZjsKPiA+PiArICAgICAgICB9IGVsc2Ugewo+ID4+ICsgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwKPiA+PiArICAgICAgICAgICAgICAgICAgICJ1bnN1cHBv cnRlZCBpbnB1dCBjb2xvcnNwYWNlISBpbnB1dCBtdXN0IGJlCj4geXV2NDIwcDEwbGUiKTsKPiA+ PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiA+Cj4gPiBDaGVja3MgbGlr ZSB0aGVzZSBkbyBub3QgYmVsb25nIGluIGEgc2luZ2xlIGVuY29kZXI7IHRoZXkgYXJlIHNpbXBs eQo+ID4gYWxsb3dlZCB0byBwcmVzdW1lIHRoYXQgYXZjdHgtPnBpeF9mbXQgZG9lcyBub3QgY2hh bmdlIGR1cmluZyBhbiBlbmNvZGUKPiA+IHNlc3Npb24gYW5kIHRoYXQgYWxsIGZyYW1lcyByZWFj aGluZyB0aGUgZGVjb2RlciBhY3R1YWxseSBoYXZlIHRoaXMKPiA+IHBpeGVsIGZvcm1hdC4KPiA+ Cj4gVGhhbmtzLCBJIHdpbGwgcmVtb3ZlIHRoZSBjaGVjay4KPgo+ID4+ICsgICAgICAgIH0KPiA+ PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICBpZiAoIXMtPmVuY29kZURvbmUpIHsKPiA+PiArICAg ICAgICByZXQgPSB2dmVuY19lbmNvZGUocy0+dnZlbmNFbmMsIHB5dXZidWYsIHMtPnBBVSwKPiAm cy0+ZW5jb2RlRG9uZSk7Cj4gPj4gKyAgICAgICAgaWYgKHJldCAhPSAwKSB7Cj4gPj4gKyAgICAg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiZXJyb3IgaW4gdnZlbmM6OmVuY29k ZSAtCj4gcmV0OiVkXG4iLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgcmV0KTsKPiA+PiArICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiA+Cj4gPiBUaGlzIGlzIG5vdCBFSU5W QUwuIEl0IGlzIEFWRVJST1JfRVhURVJOQUwuCj4gPgo+IFRoYW5rcy4gScK0bGwgY2hhbmdlIGl0 Lgo+Cj4gPj4gKyAgICAgICAgfQo+ID4+ICsgICAgfSBlbHNlIHsKPiA+PiArICAgICAgICAqZ290 X3BhY2tldCA9IDA7Cj4gPgo+ID4gVW5lY2Vzc2FyeTogKmdvdF9wYWNrZXQgaXMgYWxyZWFkeSB6 ZXJvIGJlZm9yZSB3ZSBlbnRlciB0aGlzIGZ1bmN0aW9uLgo+ID4KPiBnb29kIHBvaW50LiBJwrRs bCByZW1vdmUgaXQuCj4KPiA+PiArICAgICAgICByZXR1cm4gMDsKPiA+PiArICAgIH0KPiA+PiAr Cj4gPj4gKyAgICBpZiAocy0+cEFVLT5wYXlsb2FkVXNlZFNpemUgPiAwKSB7Cj4gPj4gKyAgICAg ICAgcmV0ID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZjdHgsIHBrdCwKPiBzLT5wQVUtPnBheWxv YWRVc2VkU2l6ZSwgMCk7Cj4gPj4gKyAgICAgICAgaWYgKHJldCA8IDApIHsKPiA+PiArICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBnZXR0aW5nIG91dHB1dAo+ IHBhY2tldC5cbiIpOwo+ID4KPiA+IFVubmVjZXNzYXJ5LCBhcyBmZl9nZXRfZW5jb2RlX2J1ZmZl cigpIGFscmVhZHkgZW1pdHMgaXRzIG93biBlcnJvcgo+IG1lc3NhZ2VzLgo+ID4KPiBHb29kIHRv IGtub3cuIEnCtGxsIHJlbW92ZSBpdC4KPgo+ID4+ICsgICAgICAgICAgICByZXR1cm4gcmV0Owo+ ID4+ICsgICAgICAgIH0KPiA+PiArCj4gPj4gKyAgICAgICAgbWVtY3B5KHBrdC0+ZGF0YSwgcy0+ cEFVLT5wYXlsb2FkLCBzLT5wQVUtPnBheWxvYWRVc2VkU2l6ZSk7Cj4gPj4gKwo+ID4+ICsgICAg ICAgIGlmIChzLT5wQVUtPmN0c1ZhbGlkKQo+ID4+ICsgICAgICAgICAgICBwa3QtPnB0cyA9IHMt PnBBVS0+Y3RzOwo+ID4+ICsgICAgICAgIGlmIChzLT5wQVUtPmR0c1ZhbGlkKQo+ID4+ICsgICAg ICAgICAgICBwa3QtPmR0cyA9IHMtPnBBVS0+ZHRzOwo+ID4+ICsgICAgICAgIHBrdC0+ZmxhZ3Mg fD0gQVZfUEtUX0ZMQUdfS0VZICogcy0+cEFVLT5yYXA7Cj4gPj4gKwo+ID4+ICsgICAgICAgIHN3 aXRjaCAocy0+cEFVLT5zbGljZVR5cGUpIHsKPiA+PiArICAgICAgICBjYXNlIFZWRU5DX0lfU0xJ Q0U6Cj4gPj4gKyAgICAgICAgICAgIHBpY3RfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9JOwo+ID4+ ICsgICAgICAgICAgICBicmVhazsKPiA+PiArICAgICAgICBjYXNlIFZWRU5DX1BfU0xJQ0U6Cj4g Pj4gKyAgICAgICAgICAgIHBpY3RfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9QOwo+ID4+ICsgICAg ICAgICAgICBicmVhazsKPiA+PiArICAgICAgICBjYXNlIFZWRU5DX0JfU0xJQ0U6Cj4gPj4gKyAg ICAgICAgICAgIHBpY3RfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9COwo+ID4+ICsgICAgICAgICAg ICBicmVhazsKPiA+PiArICAgICAgICBkZWZhdWx0Ogo+ID4+ICsgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIlVua25vd24gcGljdHVyZSB0eXBlCj4gZW5jb3VudGVyZWQu XG4iKTsKPiA+PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gPj4gKyAg ICAgICAgfQo+ID4+ICsKPiA+PiArICAgICAgICBmZl9zaWRlX2RhdGFfc2V0X2VuY29kZXJfc3Rh dHMocGt0LCAwLCBOVUxMLCAwLCBwaWN0X3R5cGUpOwo+ID4KPiA+IFBvaW50bGVzcyBnaXZlbiB0 aGF0IHlvdSBkbyBub3QgcmVhbGx5IGhhdmUgbWVhbmluZ2Z1bCBzdGF0aXN0aWNzIHRvIHNldC4K PiA+Cj4gdnZlbmMgY3VycmVudGx5IG9ubHkgcmV0dXJucyB0aGUgcGljdHVyZSB0eXBlIGFzIHN0 YXRpc3RpY3MuCj4gSSBhZGRlZCB0aGlzIGNvZGUgdG8gY2FsbCBhbGwgYmFzaWMgZmZtcGVnIHJv dXRpbmVzIGR1cmluZyBhbiBlbmNvZGluZwo+IHN0ZXAuCj4gSG93ZXZlciBhIHBpY3R1cmUgdHlw ZSBpcyBhbHNvIGEgc3RhdGlzdGljIHZhbHVlLgo+IFNoYWxsIEkgcmVtb3ZlIHRoaXMgY29kZSBi bG9jayBvciBsZWF2ZSBpdCB0byBhZGQgbW9yZSBzdGF0aXN0aWNzIGluCj4gdXBjb21pbmcgdmVy c2lvbnM/Cj4KMy4KCj4KPiA+PiArCj4gPj4gKyAgICAgICAgKmdvdF9wYWNrZXQgPSAxOwo+ID4+ ICsKPiA+PiArICAgICAgICByZXR1cm4gMDsKPiA+PiArICAgIH0gZWxzZSB7Cj4gPj4gKyAgICAg ICAgKmdvdF9wYWNrZXQgPSAwOwo+ID4+ICsgICAgICAgIHJldHVybiAwOwo+ID4+ICsgICAgfQo+ ID4+ICsKPiA+PiArICAgIHJldHVybiAwOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgY29u c3QgZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXRzX3Z2ZW5jW10gPSB7Cj4gPj4gKyAgICBBVl9Q SVhfRk1UX1lVVjQyMFAxMExFLAo+ID4+ICsgICAgQVZfUElYX0ZNVF9OT05FCj4gPj4gK307Cj4g Pj4gKwo+ID4+ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihWVmVuQ0NvbnRleHQsIHgpCj4g Pj4gKyNkZWZpbmUgVkUgQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0gfCBBVl9PUFRfRkxBR19FTkNP RElOR19QQVJBTQo+ID4+ICtzdGF0aWMgY29uc3QgQVZPcHRpb24gbGlidnZlbmNfb3B0aW9uc1td ID0gewo+ID4+ICsgICAgeyJwcmVzZXQiLCAic2V0IGVuY29kaW5nIHByZXNldCgwOiBmYXN0ZXIg LSA0OiBzbG93ZXIiLCBPRkZTRVQoCj4gb3B0aW9ucy5wcmVzZXQpLCBBVl9PUFRfVFlQRV9JTlQs IHsuaTY0ID0gMn0gLCAwICwgNCAsIFZFLCAicHJlc2V0In0sCj4gPj4gKyAgICAgICAgeyAiZmFz dGVyIiwgIjAiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSBWVkVOQ19GQVNURVJ9LAo+ IElOVF9NSU4sIElOVF9NQVgsIFZFLCAicHJlc2V0IiB9LAo+ID4+ICsgICAgICAgIHsgImZhc3Qi LCAgICIxIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gVlZFTkNfRkFTVH0sCj4gIElO VF9NSU4sIElOVF9NQVgsIFZFLCAicHJlc2V0IiB9LAo+ID4+ICsgICAgICAgIHsgIm1lZGl1bSIs ICIyIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gVlZFTkNfTUVESVVNfSwKPiBJTlRf TUlOLCBJTlRfTUFYLCBWRSwgInByZXNldCIgfSwKPiA+PiArICAgICAgICB7ICJzbG93IiwgICAi MyIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IFZWRU5DX1NMT1d9LAo+ICBJTlRfTUlO LCBJTlRfTUFYLCBWRSwgInByZXNldCIgfSwKPiA+PiArICAgICAgICB7ICJzbG93ZXIiLCAiNCIs IDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IFZWRU5DX1NMT1dFUn0sCj4gSU5UX01JTiwg SU5UX01BWCwgVkUsICJwcmVzZXQiIH0sCj4gPj4gKyAgICB7ICJxcCIgICAgICwgInNldCBxdWFu dGl6YXRpb24iLCBPRkZTRVQob3B0aW9ucy5xcCksCj4gQVZfT1BUX1RZUEVfSU5ULCAgey5pNjQg PSAtMX0sIC0xICwgNjMgLFZFLCAicXBfbW9kZSIgfSwKPiA+Cj4gPiBUaGUgInFwX21vZGUiIGlz IHVubmVjZXNzYXJ5OiBBVk9wdGlvbi51bml0IGV4aXN0cyB0byBsaW5rCj4gPiBBVl9PUFRfVFlQ RV9DT05TVCBvcHRpb25zIHRvIHRoZSBhY3R1YWwgb3B0aW9ucy4KPiA+Cj4gVGhhbmtzLCBJIHdp bGwgcmVtb3ZlIGl0Lgo+Cj4gPj4gKyAgICB7ICJwZXJpb2QiICwgInNldCAoaW50cmEpIHJlZnJl c2ggcGVyaW9kIGluIHNlY29uZHMiLAo+IE9GRlNFVChvcHRpb25zLmludHJhUmVmcmVzaFNlYyks IEFWX09QVF9UWVBFX0lOVCwgIHsuaTY0ID0gMX0sICAxICwgSU5UX01BWAo+ICxWRSwiaXJlZnJl c2hzZWMiIH0sCj4gPgo+ID4gV2UgYWN0dWFsbHkgaGF2ZSBBVkNvZGVjQ29udGV4dC5nb3Bfc2l6 ZSwgd2hpY2ggaXMgaW4gZnJhbWVzCj4KPiBJIGtub3csIGJ1dCAncGVyaW9kJyBpcyBpbiBzZWNv bmRzIGZvciBjb252ZW5pZW5jZSBhbmQgbm90IGluCj4gZnJhbWVzLgo+IEluIHZ2ZW5jIEdPUCBp cyBhIGhpZXJhcmNoaWNhbGx5IGdyb3VwIG9mIHBpY3R1cmVzIChzaXplIDE2IG9yIDMyKS4KPiBU aGUgZGVjb2RpbmcgcmVmcmVzaCAod2hpY2ggeW91IGFyZSBjYWxsaW5nIGdvcCkgaXMgaW5kZXBl bmRlbnQgYW5kIGNhbgo+IGJlIHNldCBieSB1c2luZyB2dmVuYy1wYXJhbXMgaW50cmFwZXJpb2Q9 Tiwgd2hlcmUgTj1mcmFtZXMKPgo+ID4KPiA+PiArICAgIHsgInN1YmpvcHQiLCAic2V0IHN1Ympl Y3RpdmUgKHBlcmNlcHR1YWxseSBtb3RpdmF0ZWQpCj4gb3B0aW1pemF0aW9uIiwgT0ZGU0VUKG9w dGlvbnMuc3ViamVjdGl2ZU9wdGltaXphdGlvbiksIEFWX09QVF9UWVBFX0JPT0wsCj4gey5pNjQg PSAxfSwgIDAgLCAxLCBWRX0sCj4gPj4gKyAgICB7ICJiaXRkZXB0aDgiLCAic2V0IDhiaXQgY29k aW5nIG1vZGUiLAo+IE9GRlNFVChvcHRpb25zLmZsYWc4Yml0Q29kaW5nKSwgQVZfT1BUX1RZUEVf Qk9PTCwgey5pNjQgPSAwfSwgIDAgLCAxLCBWRX0sCj4gPgo+ID4gV2h5IGFyZSB0aGVzZSBzZXBh cmF0ZSBvcHRpb25zIGFuZCBub3Qgc2ltcGx5IHBhcnQgb2YgdnZlbmMtcGFyYW1zPwo+ID4KPiBU aGVyZSBhcmUgdnZlbmMtcGFyYW1zIG9wdGlvbnMuIEl0wrRzIGp1c3QgZm9yIGNvbnZlbmllbmNl LiBJdMK0cwo+IGFsc28gcG9zc2libGUgdG8gdXNlCj4gLXZ2ZW5jLXBhcmFtcyBxcGE9MTppbnRl cm5hbGJpdGRlcHRoPTgKPgo+IFNoYWxsIEkgcmVtb3ZlIHRoZXNlIG9wdGlvbnM/Cj4KWWVzLCBw bGVhc2UgcmVtb3ZlIGl0LiBJdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCB0aGF0IG1heSBi ZSByZW1vdmVkIGluCnRoZSBmdXR1cmUuIFRoZXJlJ3Mgbm8gbmVlZCB0byBleHBvc2UgaXQgZXhw bGljaXRseQoKPgo+ID4+ICsgICAgeyAidnZlbmMtcGFyYW1zIiwgInNldCB0aGUgdnZlbmMgY29u ZmlndXJhdGlvbiB1c2luZyBhIDotc2VwYXJhdGVkCj4gbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1l dGVycyIsIE9GRlNFVChvcHRpb25zLnZ2ZW5jX29wdHMpLAo+IEFWX09QVF9UWVBFX0RJQ1QsIHsg MCB9LCAwLCAwLCBWRSB9LAo+ID4+ICsgICAgeyAibGV2ZWxpZGMiLCAidnZjIGxldmVsX2lkYyIs IE9GRlNFVCggb3B0aW9ucy5sZXZlbElkYyksCj4gQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDB9 LCAwLCAxMDUsIFZFLCAibGV2ZWxpZGMifSwKPiA+PiArICAgICAgICB7ICIwIiwgICAiYXV0byIs IDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDB9LCAgSU5UX01JTiwKPiBJTlRfTUFYLCBW RSwgImxldmVsaWRjIn0sCj4gPj4gKyAgICAgICAgeyAiMSIsICAgIjEiICAgLCAwLCBBVl9PUFRf VFlQRV9DT05TVCwgey5pNjQgPSAxNn0sIElOVF9NSU4sCj4gSU5UX01BWCwgVkUsICJsZXZlbGlk YyJ9LAo+ID4+ICsgICAgICAgIHsgIjIiLCAgICIyIiAgICwgMCwgQVZfT1BUX1RZUEVfQ09OU1Qs IHsuaTY0ID0gMzJ9LCBJTlRfTUlOLAo+IElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPiA+PiAr ICAgICAgICB7ICIyLjEiLCAiMi4xIiAsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDM1 fSwgSU5UX01JTiwKPiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4gPj4gKyAgICAgICAgeyAi MyIsICAgIjMiICAgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSA0OH0sIElOVF9NSU4s Cj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+ID4+ICsgICAgICAgIHsgIjMuMSIsICIzLjEi ICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gNTF9LCBJTlRfTUlOLAo+IElOVF9NQVgs IFZFLCAibGV2ZWxpZGMifSwKPiA+PiArICAgICAgICB7ICI0IiwgICAiNCIgICAsIDAsIEFWX09Q VF9UWVBFX0NPTlNULCB7Lmk2NCA9IDY0fSwgSU5UX01JTiwKPiBJTlRfTUFYLCBWRSwgImxldmVs aWRjIn0sCj4gPj4gKyAgICAgICAgeyAiNC4xIiwgIjQuMSIgLCAwLCBBVl9PUFRfVFlQRV9DT05T VCwgey5pNjQgPSA2N30sIElOVF9NSU4sCj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+ID4+ ICsgICAgICAgIHsgIjUiLCAgICI1IiAgICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0g ODB9LCBJTlRfTUlOLAo+IElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPiA+PiArICAgICAgICB7 ICI1LjEiLCAiNS4xIiAsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDgzfSwgSU5UX01J TiwKPiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4gPj4gKyAgICAgICAgeyAiNS4yIiwgIjUu MiIgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSA4Nn0sIElOVF9NSU4sCj4gSU5UX01B WCwgVkUsICJsZXZlbGlkYyJ9LAo+ID4+ICsgICAgICAgIHsgIjYiLCAgICI2IiAgICwgMCwgQVZf T1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gOTZ9LCBJTlRfTUlOLAo+IElOVF9NQVgsIFZFLCAibGV2 ZWxpZGMifSwKPiA+PiArICAgICAgICB7ICI2LjEiLCAiNi4xIiAsIDAsIEFWX09QVF9UWVBFX0NP TlNULCB7Lmk2NCA9IDk5fSwgSU5UX01JTiwKPiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4g Pj4gKyAgICAgICAgeyAiNi4yIiwgIjYuMiIgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQg PSAxMDJ9LCBJTlRfTUlOLAo+IElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPiA+PiArICAgICAg ICB7ICI2LjMiLCAiNi4zIiAsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDEwNX0sIElO VF9NSU4sCj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+ID4KPiA+IFdlIGhhdmUgYSBnZW5l cmljIGxldmVsIG9wdGlvbiwgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhpcyBsaXN0IGFib3Zl Lgo+ID4KPiBUaGFua3MsIEkgd2lsbCBoYXZlIGEgbG9vayBpbnRvIHRoYXQuCj4KPiA+PiArICAg IHsgInRpZXIiLCAic2V0IHZ2YyB0aWVyIiwgT0ZGU0VUKCBvcHRpb25zLnRpZXIpLCBBVl9PUFRf VFlQRV9JTlQsCj4gey5pNjQgPSAwfSwgIDAgLCAxICwgVkUsICJ0aWVyIn0sCj4gPj4gKyAgICAg ICAgeyAibWFpbiIsICJtYWluIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gMH0sIElO VF9NSU4sCj4gSU5UX01BWCwgVkUsICJ0aWVyIn0sCj4gPj4gKyAgICAgICAgeyAiaGlnaCIsICJo aWdoIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gMX0sIElOVF9NSU4sCj4gSU5UX01B WCwgVkUsICJ0aWVyIn0sCj4gPj4gKyAgICB7TlVMTH0KPiA+PiArfTsKPiA+PiArCj4gPj4gK3N0 YXRpYyBjb25zdCBBVkNsYXNzIGNsYXNzX2xpYnZ2ZW5jID0gewo+ID4+ICsgICAgLmNsYXNzX25h bWUgPSAibGlidnZlbmMtdnZjIGVuY29kZXIiLAo+ID4+ICsgICAgLml0ZW1fbmFtZSAgPSBhdl9k ZWZhdWx0X2l0ZW1fbmFtZSwKPiA+PiArICAgIC5vcHRpb24gICAgID0gbGlidnZlbmNfb3B0aW9u cywKPiA+PiArICAgIC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAo+ID4+ICt9 Owo+ID4+ICsKPiA+PiArc3RhdGljIGNvbnN0IEZGQ29kZWNEZWZhdWx0IHZ2ZW5jX2RlZmF1bHRz W10gPSB7Cj4gPj4gKyAgICB7ICJiIiwgIjAiIH0sCj4gPj4gKyAgICB7ICJnIiwgIi0xIiB9LAo+ ID4+ICsgICAgeyBOVUxMIH0sCj4gPj4gK307Cj4gPj4gKwo+ID4+ICtGRkNvZGVjIGZmX2xpYnZ2 ZW5jX2VuY29kZXIgPSB7Cj4gPgo+ID4gTWlzc2luZyBjb25zdAo+Cj4gSXTCtHMgbm90IGNvbnNp c3RlbnQgYXMgc29tZSBjb2RlY3MgYXJlIGNvbnN0IG90aGVyIG5vdC4KPiBlLmcuIGZmX2xpYmFv bV9hdjFfZW5jb2RlciwgZmZfbGlieDI2NV9lbmNvZGVyCj4KPiBJwrRsbCBmaXggaXQuCj4KPiA+ Cj4gPj4gKyAgICAucC5uYW1lICAgICAgICAgPSAibGlidnZlbmMiLAo+ID4+ICsgICAgQ09ERUNf TE9OR19OQU1FKCJILjI2NiAvIFZWQyBFbmNvZGVyIFZWZW5DIiksCj4gPj4gKyAgICAucC50eXBl ICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCj4gPj4gKyAgICAucC5pZCA8aHR0cDovL3Au aWQvPiAgICAgICAgICAgPSBBVl9DT0RFQ19JRF9WVkMsCj4gPj4gKyAgICAucC5jYXBhYmlsaXRp ZXMgPSBBVl9DT0RFQ19DQVBfREVMQVkgfCBBVl9DT0RFQ19DQVBfT1RIRVJfVEhSRUFEUywKPiA+ Cj4gPiBZb3UgY2FuIGFkZCBBVl9DT0RFQ19DQVBfRFIxCj4gPgo+IFRoYW5rcy4gScK0bGwgYWRk IGl0Lgo+Cj4gPj4gKyAgICAucC5wcm9maWxlcyAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTChm Zl92dmNfcHJvZmlsZXMpLAo+ID4+ICsgICAgLnAucHJpdl9jbGFzcyAgID0gJmNsYXNzX2xpYnZ2 ZW5jLAo+ID4+ICsgICAgLnAud3JhcHBlcl9uYW1lID0gImxpYnZ2ZW5jIiwKPiA+PiArICAgIC5w cml2X2RhdGFfc2l6ZSA9IHNpemVvZihWVmVuQ0NvbnRleHQpLAo+ID4+ICsgICAgLnAucGl4X2Zt dHMgICAgID0gcGl4X2ZtdHNfdnZlbmMsCj4gPj4gKyAgICAuaW5pdCAgICAgICAgICAgPSBmZl92 dmVuY19lbmNvZGVfaW5pdCwKPiA+PiArICAgIEZGX0NPREVDX0VOQ09ERV9DQihmZl92dmVuY19l bmNvZGVfZnJhbWUpLAo+ID4+ICsgICAgLmNsb3NlICAgICAgICAgID0gZmZfdnZlbmNfZW5jb2Rl X2Nsb3NlLAo+ID4+ICsgICAgLmRlZmF1bHRzICAgICAgICAgPSB2dmVuY19kZWZhdWx0cywKPiA+ PiArICAgIC5jYXBzX2ludGVybmFsICA9IEZGX0NPREVDX0NBUF9BVVRPX1RIUkVBRFMsCj4gPj4g K307Cj4gPgo+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KPiA+IGZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKPiA+IGZmbXBlZy1kZXZlbEBmZm1wZWcu b3JnIDxtYWlsdG86ZmZtcGVnLWRldmVsQGZmbXBlZy5vcmc+Cj4gPiBodHRwczovL2ZmbXBlZy5v cmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKPiA+Cj4gPiBUbyB1bnN1YnNjcmliZSwg dmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKPiA+IGZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBl Zy5vcmcgPG1haWx0bzpmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnPgo+IHdpdGggc3Vi amVjdCAidW5zdWJzY3JpYmUiLgo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KPiBmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZmZtcGVnLWRldmVs QGZmbXBlZy5vcmcKPiBodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWct ZGV2ZWwKPgo+IFRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbAo+IGZm bXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIu Cj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVn LWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBl Zy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNp dCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdp dGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=