From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH v2 1/2] drm/radeon: refactor CIK tiling table initialization Date: Fri, 11 Mar 2016 15:43:32 +0100 Message-ID: <56E2D994.8090005@amd.com> References: <20160309174752.GF21308@treble.redhat.com> <69296ff946936ecc40e52ed3e56959417d48d68b.1457705773.git.jpoimboe@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from na01-bl2-obe.outbound.protection.outlook.com (mail-bl2on0067.outbound.protection.outlook.com [65.55.169.67]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1F7256E19B for ; Fri, 11 Mar 2016 14:43:53 +0000 (UTC) In-Reply-To: <69296ff946936ecc40e52ed3e56959417d48d68b.1457705773.git.jpoimboe@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Josh Poimboeuf , Alexander Deucher Cc: fengguang.wu@intel.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Ingo Molnar List-Id: dri-devel@lists.freedesktop.org QW0gMTEuMDMuMjAxNiB1bSAxNToxOCBzY2hyaWViIEpvc2ggUG9pbWJvZXVmOgo+IFNpbXBsaWZ5 IHRoZSBjb250cm9sIGZsb3cgb2YgY2lrX3RpbGluZ19tb2RlX3RhYmxlX2luaXQoKSBzaW1pbGFy IHRvIGhvdwo+IGl0IHdhcyBkb25lIGluIGdmeF92N18wLmMgYW5kIGdmeF92OF8wLmMuCj4KPiBT aWduZWQtb2ZmLWJ5OiBKb3NoIFBvaW1ib2V1ZiA8anBvaW1ib2VAcmVkaGF0LmNvbT4KCkknbSBu b3Qgc28gZGVlcCBpbnRvIHRoZSB0aWxsaW5nIGNvbmZpZyBzdHVmZiwgYnV0IGJyaWVmbHkgc2tp bW1pbmcgb3ZlciAKaXQgaXQgY2xlYXJseSBsb29rcyBnb29kIHRvIG1lLgoKUGF0Y2ggaXMgQWNr ZWQtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KClRoYW5r cyBmb3IgdGhlIGhlbHAsCkNocmlzdGlhbi4KCj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vcmFk ZW9uL2Npay5jIHwgMTY5MSArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KPiAgIDEgZmlsZSBjaGFuZ2VkLCA2NjYgaW5zZXJ0aW9ucygrKSwgMTAyNSBkZWxldGlvbnMo LSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npay5jIGIvZHJpdmVy cy9ncHUvZHJtL3JhZGVvbi9jaWsuYwo+IGluZGV4IDA2MDAxNDAuLjFhOTJjZTcgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWsuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vY2lrLmMKPiBAQCAtMjM0Myw5ICsyMzQzLDEzIEBAIG91dDoKPiAgICAqLwo+ICAg c3RhdGljIHZvaWQgY2lrX3RpbGluZ19tb2RlX3RhYmxlX2luaXQoc3RydWN0IHJhZGVvbl9kZXZp Y2UgKnJkZXYpCj4gICB7Cj4gLQljb25zdCB1MzIgbnVtX3RpbGVfbW9kZV9zdGF0ZXMgPSAzMjsK PiAtCWNvbnN0IHUzMiBudW1fc2Vjb25kYXJ5X3RpbGVfbW9kZV9zdGF0ZXMgPSAxNjsKPiAtCXUz MiByZWdfb2Zmc2V0LCBnYl90aWxlX21vZGVuLCBzcGxpdF9lcXVhbF90b19yb3dfc2l6ZTsKPiAr CXUzMiAqdGlsZSA9IHJkZXYtPmNvbmZpZy5jaWsudGlsZV9tb2RlX2FycmF5Owo+ICsJdTMyICpt YWNyb3RpbGUgPSByZGV2LT5jb25maWcuY2lrLm1hY3JvdGlsZV9tb2RlX2FycmF5Owo+ICsJY29u c3QgdTMyIG51bV90aWxlX21vZGVfc3RhdGVzID0KPiArCQkJQVJSQVlfU0laRShyZGV2LT5jb25m aWcuY2lrLnRpbGVfbW9kZV9hcnJheSk7Cj4gKwljb25zdCB1MzIgbnVtX3NlY29uZGFyeV90aWxl X21vZGVfc3RhdGVzID0KPiArCQkJQVJSQVlfU0laRShyZGV2LT5jb25maWcuY2lrLm1hY3JvdGls ZV9tb2RlX2FycmF5KTsKPiArCXUzMiByZWdfb2Zmc2V0LCBzcGxpdF9lcXVhbF90b19yb3dfc2l6 ZTsKPiAgIAl1MzIgbnVtX3BpcGVfY29uZmlnczsKPiAgIAl1MzIgbnVtX3JicyA9IHJkZXYtPmNv bmZpZy5jaWsubWF4X2JhY2tlbmRzX3Blcl9zZSAqCj4gICAJCXJkZXYtPmNvbmZpZy5jaWsubWF4 X3NoYWRlcl9lbmdpbmVzOwo+IEBAIC0yMzY3LDEwMzIgKzIzNzEsNjY5IEBAIHN0YXRpYyB2b2lk IGNpa190aWxpbmdfbW9kZV90YWJsZV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQo+ ICAgCWlmIChudW1fcGlwZV9jb25maWdzID4gOCkKPiAgIAkJbnVtX3BpcGVfY29uZmlncyA9IDE2 Owo+ICAgCj4gLQlpZiAobnVtX3BpcGVfY29uZmlncyA9PSAxNikgewo+IC0JCWZvciAocmVnX29m ZnNldCA9IDA7IHJlZ19vZmZzZXQgPCBudW1fdGlsZV9tb2RlX3N0YXRlczsgcmVnX29mZnNldCsr KSB7Cj4gLQkJCXN3aXRjaCAocmVnX29mZnNldCkgewo+IC0JCQljYXNlIDA6Cj4gLQkJCQlnYl90 aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJ IE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+IC0J CQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAo+IC0JCQkJCQkg VElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF82NEIpKTsKPiAtCQkJCWJyZWFrOwo+IC0J CQljYXNlIDE6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElM RURfVEhJTjEpIHwKPiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRI X01JQ1JPX1RJTElORykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngz Ml8xNngxNikgfAo+IC0JCQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF8xMjhC KSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAyOgo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChB UlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01P REVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09O RklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKPiAtCQkJCQkJIFRJTEVfU1BMSVQoQURE Ul9TVVJGX1RJTEVfU1BMSVRfMjU2QikpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMzoKPiAt CQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+ IC0JCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5H KSB8Cj4gLQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDE2XzMyeDMyXzE2eDE2KSB8Cj4g LQkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzUxMkIpKTsKPiAtCQkJCWJy ZWFrOwo+IC0JCQljYXNlIDQ6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJS QVlfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9T VVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJG X1AxNl8zMngzMl8xNngxNikgfAo+IC0JCQkJCQkgVElMRV9TUExJVChzcGxpdF9lcXVhbF90b19y b3dfc2l6ZSkpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgNToKPiAtCQkJCWdiX3RpbGVfbW9k ZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8xRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkgUElQRV9D T05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAo+IC0JCQkJCQkgTUlDUk9fVElMRV9N T0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSk7Cj4gLQkJCQlicmVhazsKPiAt CQkJY2FzZSA2Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF8y RF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZf REVQVEhfTUlDUk9fVElMSU5HKSB8Cj4gLQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDE2 XzMyeDMyXzE2eDE2KSB8Cj4gLQkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElU XzI1NkIpKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDc6Cj4gLQkJCQlnYl90aWxlX21vZGVu ID0gKEFSUkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCSBNSUNS T19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJ IFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKPiAtCQkJCQkJIFRJTEVf U1BMSVQoc3BsaXRfZXF1YWxfdG9fcm93X3NpemUpKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNl IDg6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfTElORUFSX0FMSUdO RUQpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpKTsK PiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDk6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZ X01PREUoQVJSQVlfMURfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJf U1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKPiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQURE Ul9TVVJGX0RJU1BMQVlfTUlDUk9fVElMSU5HKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAx MDoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElO MSkgfAo+IC0JCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfRElTUExBWV9NSUNS T19USUxJTkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4 MTYpIHwKPiAtCQkJCQkJIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsK PiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDExOgo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJB WV9NT0RFKEFSUkFZX1BSVF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkgTUlDUk9fVElMRV9NT0RF X05FVyhBRERSX1NVUkZfRElTUExBWV9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09O RklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfOHgxNikgfAo+IC0JCQkJCQkgU0FNUExFX1NQTElUKEFE RFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMTI6Cj4g LQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RISU4x KSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ESVNQTEFZX01JQ1JP X1RJTElORykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngx NikgfAo+IC0JCQkJCQkgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+ IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMTM6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZ X01PREUoQVJSQVlfMURfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJf U1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKPiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQURE Ul9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAxNDoK PiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkg fAo+IC0JCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfVEhJTl9NSUNST19USUxJ TkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwK PiAtCQkJCQkJIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiAtCQkJ CWJyZWFrOwo+IC0JCQljYXNlIDE2Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RF KEFSUkFZX1BSVF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhB RERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJf U1VSRl9QMTZfMzJ4MzJfOHgxNikgfAo+IC0JCQkJCQkgU0FNUExFX1NQTElUKEFERFJfU1VSRl9T QU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMTc6Cj4gLQkJCQlnYl90 aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJ CQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9USElOX01JQ1JPX1RJTElORykgfAo+ IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAo+IC0JCQkJ CQkgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJYnJlYWs7 Cj4gLQkJCWNhc2UgMjc6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlf MURfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4 MzJfMTZ4MTYpIHwKPiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1JPVEFU RURfTUlDUk9fVElMSU5HKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAyODoKPiAtCQkJCWdi X3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+IC0JCQkJ CQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfUk9UQVRFRF9NSUNST19USUxJTkcpIHwK PiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKPiAtCQkJ CQkJIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiAtCQkJCWJyZWFr Owo+IC0JCQljYXNlIDI5Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZ X1BSVF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NV UkZfUk9UQVRFRF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VS Rl9QMTZfMzJ4MzJfOHgxNikgfAo+IC0JCQkJCQkgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1Q TEVfU1BMSVRfMikpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMzA6Cj4gLQkJCQlnYl90aWxl X21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJ CSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORykgfAo+ IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAo+IC0JCQkJ CQkgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJYnJlYWs7 Cj4gLQkJCWRlZmF1bHQ6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gMDsKPiAtCQkJCWJyZWFrOwo+ IC0JCQl9Cj4gLQkJCXJkZXYtPmNvbmZpZy5jaWsudGlsZV9tb2RlX2FycmF5W3JlZ19vZmZzZXRd ID0gZ2JfdGlsZV9tb2RlbjsKPiAtCQkJV1JFRzMyKEdCX1RJTEVfTU9ERTAgKyAocmVnX29mZnNl dCAqIDQpLCBnYl90aWxlX21vZGVuKTsKPiAtCQl9Cj4gLQkJZm9yIChyZWdfb2Zmc2V0ID0gMDsg cmVnX29mZnNldCA8IG51bV9zZWNvbmRhcnlfdGlsZV9tb2RlX3N0YXRlczsgcmVnX29mZnNldCsr KSB7Cj4gLQkJCXN3aXRjaCAocmVnX29mZnNldCkgewo+IC0JCQljYXNlIDA6Cj4gLQkJCQlnYl90 aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAo+IC0JCQkJ CQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzQpIHwKPiAtCQkJCQkJIE1BQ1JP X1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikgfAo+IC0JCQkJCQkgTlVNX0JB TktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAxOgo+IC0J CQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwK PiAtCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8yKSB8Cj4gLQkJCQkJ CSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzIpIHwKPiAtCQkJCQkJ IE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2Ug MjoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURU SF8xKSB8Cj4gLQkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+ IC0JCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8xKSB8Cj4g LQkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+IC0J CQljYXNlIDM6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JB TktfV0lEVEhfMSkgfAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hU XzEpIHwKPiAtCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1Rf MSkgfAo+IC0JCQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4gLQkJCQlicmVh azsKPiAtCQkJY2FzZSA0Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJRFRIKEFERFJf U1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAtCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5L X0hFSUdIVF8xKSB8Cj4gLQkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9f QVNQRUNUXzEpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfOF9CQU5LKSk7Cj4gLQkJ CQlicmVhazsKPiAtCQkJY2FzZSA1Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJRFRI KEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAtCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VS Rl9CQU5LX0hFSUdIVF8xKSB8Cj4gLQkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZf TUFDUk9fQVNQRUNUXzEpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfNF9CQU5LKSk7 Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSA2Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5L X1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAtCQkJCQkJIEJBTktfSEVJR0hUKEFE RFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gLQkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERS X1NVUkZfTUFDUk9fQVNQRUNUXzEpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMl9C QU5LKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSA4Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9 IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAtCQkJCQkJIEJBTktfSEVJ R0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF80KSB8Cj4gLQkJCQkJCSBNQUNST19USUxFX0FTUEVD VChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzIpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NV UkZfMTZfQkFOSykpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgOToKPiAtCQkJCWdiX3RpbGVf bW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gLQkJCQkJCSBC QU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMikgfAo+IC0JCQkJCQkgTUFDUk9fVElM RV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSB8Cj4gLQkJCQkJCSBOVU1fQkFOS1Mo QUREUl9TVVJGXzE2X0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDEwOgo+IC0JCQkJ Z2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAt CQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gLQkJCQkJCSBN QUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzEpIHwKPiAtCQkJCQkJIE5V TV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMTE6 Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhf MSkgfAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzEpIHwKPiAt CQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMSkgfAo+IC0J CQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl84X0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQlj YXNlIDEyOgo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5L X1dJRFRIXzEpIHwKPiAtCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8x KSB8Cj4gLQkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzEp IHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfNF9CQU5LKSk7Cj4gLQkJCQlicmVhazsK PiAtCQkJY2FzZSAxMzoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NV UkZfQkFOS19XSURUSF8xKSB8Cj4gLQkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19I RUlHSFRfMSkgfAo+IC0JCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FT UEVDVF8xKSB8Cj4gLQkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzJfQkFOSykpOwo+IC0JCQkJ YnJlYWs7Cj4gLQkJCWNhc2UgMTQ6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgo QUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJG X0JBTktfSEVJR0hUXzEpIHwKPiAtCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9N QUNST19BU1BFQ1RfMSkgfAo+IC0JCQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl8yX0JBTkspKTsK PiAtCQkJCWJyZWFrOwo+IC0JCQlkZWZhdWx0Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IDA7Cj4g LQkJCQlicmVhazsKPiAtCQkJfQo+IC0JCQlyZGV2LT5jb25maWcuY2lrLm1hY3JvdGlsZV9tb2Rl X2FycmF5W3JlZ19vZmZzZXRdID0gZ2JfdGlsZV9tb2RlbjsKPiAtCQkJV1JFRzMyKEdCX01BQ1JP VElMRV9NT0RFMCArIChyZWdfb2Zmc2V0ICogNCksIGdiX3RpbGVfbW9kZW4pOwo+IC0JCX0KPiAt CX0gZWxzZSBpZiAobnVtX3BpcGVfY29uZmlncyA9PSA4KSB7Cj4gLQkJZm9yIChyZWdfb2Zmc2V0 ID0gMDsgcmVnX29mZnNldCA8IG51bV90aWxlX21vZGVfc3RhdGVzOyByZWdfb2Zmc2V0KyspIHsK PiAtCQkJc3dpdGNoIChyZWdfb2Zmc2V0KSB7Cj4gLQkJCWNhc2UgMDoKPiAtCQkJCWdiX3RpbGVf bW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkgTUlD Uk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSB8Cj4gLQkJCQkJ CSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfMTZ4MTYpIHwKPiAtCQkJCQkJIFRJTEVf U1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfNjRCKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2Fz ZSAxOgo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RI SU4xKSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNS T19USUxJTkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngzMl8xNngx NikgfAo+IC0JCQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF8xMjhCKSk7Cj4g LQkJCQlicmVhazsKPiAtCQkJY2FzZSAyOgo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9N T0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVX KEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFE RFJfU1VSRl9QOF8zMngzMl8xNngxNikgfAo+IC0JCQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZf VElMRV9TUExJVF8yNTZCKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAzOgo+IC0JCQkJZ2Jf dGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJ CSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiAt CQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngzMl8xNngxNikgfAo+IC0JCQkJCQkg VElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF81MTJCKSk7Cj4gLQkJCQlicmVhazsKPiAt CQkJY2FzZSA0Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJ TEVEX1RISU4xKSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBU SF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngz Ml8xNngxNikgfAo+IC0JCQkJCQkgVElMRV9TUExJVChzcGxpdF9lcXVhbF90b19yb3dfc2l6ZSkp Owo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgNToKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJS QVlfTU9ERShBUlJBWV8xRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQURE Ul9TVVJGX1A4XzMyeDMyXzE2eDE2KSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFE RFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDY6 Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RI SU4xKSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNS T19USUxJTkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngzMl8xNngx NikgfAo+IC0JCQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF8yNTZCKSk7Cj4g LQkJCQlicmVhazsKPiAtCQkJY2FzZSA3Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9N T0RFKEFSUkFZX1BSVF8yRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkgTUlDUk9fVElMRV9NT0RF X05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSB8Cj4gLQkJCQkJCSBQSVBFX0NPTkZJ RyhBRERSX1NVUkZfUDhfMzJ4MzJfMTZ4MTYpIHwKPiAtCQkJCQkJIFRJTEVfU1BMSVQoc3BsaXRf ZXF1YWxfdG9fcm93X3NpemUpKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDg6Cj4gLQkJCQln Yl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfTElORUFSX0FMSUdORUQpIHwKPiAtCQkJ CQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngzMl8xNngxNikpOwo+IC0JCQkJYnJlYWs7 Cj4gLQkJCWNhc2UgOToKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8x RF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A4XzMyeDMy XzE2eDE2KSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ESVNQTEFZ X01JQ1JPX1RJTElORykpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMTA6Cj4gLQkJCQlnYl90 aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJ IE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RJU1BMQVlfTUlDUk9fVElMSU5HKSB8Cj4g LQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfMTZ4MTYpIHwKPiAtCQkJCQkJ IFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiAtCQkJCWJyZWFrOwo+ IC0JCQljYXNlIDExOgo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZX1BS VF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZf RElTUExBWV9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9Q OF8zMngzMl84eDE2KSB8Cj4gLQkJCQkJCSBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9T UExJVF8yKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAxMjoKPiAtCQkJCWdiX3RpbGVfbW9k ZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJIE1J Q1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RJU1BMQVlfTUlDUk9fVElMSU5HKSB8Cj4gLQkJ CQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfMTZ4MTYpIHwKPiAtCQkJCQkJIFNB TVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiAtCQkJCWJyZWFrOwo+IC0J CQljYXNlIDEzOgo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzFEX1RJ TEVEX1RISU4xKSB8Cj4gLQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfMTZ4 MTYpIHwKPiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5fTUlDUk9f VElMSU5HKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAxNDoKPiAtCQkJCWdiX3RpbGVfbW9k ZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkgTUlDUk9f VElMRV9NT0RFX05FVyhBRERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJIFBJ UEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngzMl8xNngxNikgfAo+IC0JCQkJCQkgU0FNUExFX1NQ TElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2Ug MTY6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfUFJUX1RJTEVEX1RI SU4xKSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9USElOX01JQ1JP X1RJTElORykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A4XzMyeDMyXzh4MTYp IHwKPiAtCQkJCQkJIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiAt CQkJCWJyZWFrOwo+IC0JCQljYXNlIDE3Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9N T0RFKEFSUkFZX1BSVF8yRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkgTUlDUk9fVElMRV9NT0RF X05FVyhBRERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklH KEFERFJfU1VSRl9QOF8zMngzMl8xNngxNikgfAo+IC0JCQkJCQkgU0FNUExFX1NQTElUKEFERFJf U1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMjc6Cj4gLQkJ CQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMURfVElMRURfVEhJTjEpIHwKPiAt CQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngzMl8xNngxNikgfAo+IC0JCQkJCQkg TUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfUk9UQVRFRF9NSUNST19USUxJTkcpKTsKPiAt CQkJCWJyZWFrOwo+IC0JCQljYXNlIDI4Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9N T0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVX KEFERFJfU1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUco QUREUl9TVVJGX1A4XzMyeDMyXzE2eDE2KSB8Cj4gLQkJCQkJCSBTQU1QTEVfU1BMSVQoQUREUl9T VVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAyOToKPiAtCQkJ CWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfVElMRURfVEhJTjEpIHwKPiAt CQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1JPVEFURURfTUlDUk9fVElMSU5H KSB8Cj4gLQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfOHgxNikgfAo+IC0J CQkJCQkgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJYnJl YWs7Cj4gLQkJCWNhc2UgMzA6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJS QVlfUFJUXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFE RFJfU1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQURE Ul9TVVJGX1A4XzMyeDMyXzE2eDE2KSB8Cj4gLQkJCQkJCSBTQU1QTEVfU1BMSVQoQUREUl9TVVJG X1NBTVBMRV9TUExJVF8yKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJZGVmYXVsdDoKPiAtCQkJCWdi X3RpbGVfbW9kZW4gPSAwOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCX0KPiAtCQkJcmRldi0+Y29uZmln LmNpay50aWxlX21vZGVfYXJyYXlbcmVnX29mZnNldF0gPSBnYl90aWxlX21vZGVuOwo+IC0JCQlX UkVHMzIoR0JfVElMRV9NT0RFMCArIChyZWdfb2Zmc2V0ICogNCksIGdiX3RpbGVfbW9kZW4pOwo+ IC0JCX0KPiAtCQlmb3IgKHJlZ19vZmZzZXQgPSAwOyByZWdfb2Zmc2V0IDwgbnVtX3NlY29uZGFy eV90aWxlX21vZGVfc3RhdGVzOyByZWdfb2Zmc2V0KyspIHsKPiAtCQkJc3dpdGNoIChyZWdfb2Zm c2V0KSB7Cj4gLQkJCWNhc2UgMDoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQkFOS19XSURUSChB RERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gLQkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZf QkFOS19IRUlHSFRfNCkgfAo+IC0JCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01B Q1JPX0FTUEVDVF80KSB8Cj4gLQkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsK PiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDE6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktf V0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQURE Ul9TVVJGX0JBTktfSEVJR0hUXzIpIHwKPiAtCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJf U1VSRl9NQUNST19BU1BFQ1RfMikgfAo+IC0JCQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9C QU5LKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAyOgo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9 IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAtCQkJCQkJIEJBTktfSEVJ R0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gLQkJCQkJCSBNQUNST19USUxFX0FTUEVD VChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzIpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NV UkZfMTZfQkFOSykpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMzoKPiAtCQkJCWdiX3RpbGVf bW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gLQkJCQkJCSBC QU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+IC0JCQkJCQkgTUFDUk9fVElM RV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSB8Cj4gLQkJCQkJCSBOVU1fQkFOS1Mo QUREUl9TVVJGXzE2X0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDQ6Cj4gLQkJCQln Yl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAo+IC0J CQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzEpIHwKPiAtCQkJCQkJIE1B Q1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMSkgfAo+IC0JCQkJCQkgTlVN X0JBTktTKEFERFJfU1VSRl84X0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDU6Cj4g LQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkg fAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzEpIHwKPiAtCQkJ CQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMSkgfAo+IC0JCQkJ CQkgTlVNX0JBTktTKEFERFJfU1VSRl80X0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNl IDY6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lE VEhfMSkgfAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzEpIHwK PiAtCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMSkgfAo+ IC0JCQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl8yX0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+IC0J CQljYXNlIDg6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JB TktfV0lEVEhfMSkgfAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hU XzgpIHwKPiAtCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1Rf NCkgfAo+IC0JCQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4gLQkJCQlicmVh azsKPiAtCQkJY2FzZSA5Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJRFRIKEFERFJf U1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAtCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5L X0hFSUdIVF80KSB8Cj4gLQkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9f QVNQRUNUXzQpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+IC0J CQkJYnJlYWs7Cj4gLQkJCWNhc2UgMTA6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lE VEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQUREUl9T VVJGX0JBTktfSEVJR0hUXzIpIHwKPiAtCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VS Rl9NQUNST19BU1BFQ1RfMikgfAo+IC0JCQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5L KSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAxMToKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAo QkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gLQkJCQkJCSBCQU5LX0hFSUdI VChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+IC0JCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1Qo QUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSB8Cj4gLQkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJG XzE2X0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDEyOgo+IC0JCQkJZ2JfdGlsZV9t b2RlbiA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAtCQkJCQkJIEJB TktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gLQkJCQkJCSBNQUNST19USUxF X0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzEpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhB RERSX1NVUkZfOF9CQU5LKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAxMzoKPiAtCQkJCWdi X3RpbGVfbW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gLQkJ CQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+IC0JCQkJCQkgTUFD Uk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8xKSB8Cj4gLQkJCQkJCSBOVU1f QkFOS1MoQUREUl9TVVJGXzRfQkFOSykpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMTQ6Cj4g LQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkg fAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzEpIHwKPiAtCQkJ CQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMSkgfAo+IC0JCQkJ CQkgTlVNX0JBTktTKEFERFJfU1VSRl8yX0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQlkZWZh dWx0Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IDA7Cj4gLQkJCQlicmVhazsKPiAtCQkJfQo+IC0J CQlyZGV2LT5jb25maWcuY2lrLm1hY3JvdGlsZV9tb2RlX2FycmF5W3JlZ19vZmZzZXRdID0gZ2Jf dGlsZV9tb2RlbjsKPiAtCQkJV1JFRzMyKEdCX01BQ1JPVElMRV9NT0RFMCArIChyZWdfb2Zmc2V0 ICogNCksIGdiX3RpbGVfbW9kZW4pOwo+IC0JCX0KPiAtCX0gZWxzZSBpZiAobnVtX3BpcGVfY29u ZmlncyA9PSA0KSB7Cj4gKwlmb3IgKHJlZ19vZmZzZXQgPSAwOyByZWdfb2Zmc2V0IDwgbnVtX3Rp bGVfbW9kZV9zdGF0ZXM7IHJlZ19vZmZzZXQrKykKPiArCQl0aWxlW3JlZ19vZmZzZXRdID0gMDsK PiArCWZvciAocmVnX29mZnNldCA9IDA7IHJlZ19vZmZzZXQgPCBudW1fc2Vjb25kYXJ5X3RpbGVf bW9kZV9zdGF0ZXM7IHJlZ19vZmZzZXQrKykKPiArCQltYWNyb3RpbGVbcmVnX29mZnNldF0gPSAw Owo+ICsKPiArCXN3aXRjaChudW1fcGlwZV9jb25maWdzKSB7Cj4gKwljYXNlIDE2Ogo+ICsJCXRp bGVbMF0gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICBNSUNS T19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiArCQkJICAg UElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAo+ICsJCQkgICBUSUxFX1NQ TElUKEFERFJfU1VSRl9USUxFX1NQTElUXzY0QikpOwo+ICsJCXRpbGVbMV0gPSAoQVJSQVlfTU9E RShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICBNSUNST19USUxFX01PREVfTkVXKEFE RFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiArCQkJICAgUElQRV9DT05GSUcoQUREUl9T VVJGX1AxNl8zMngzMl8xNngxNikgfAo+ICsJCQkgICBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxF X1NQTElUXzEyOEIpKTsKPiArCQl0aWxlWzJdID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURf VEhJTjEpIHwKPiArCQkJICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlD Uk9fVElMSU5HKSB8Cj4gKwkJCSAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4 MTYpIHwKPiArCQkJICAgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF8yNTZCKSk7Cj4g KwkJdGlsZVszXSA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAg IE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+ICsJ CQkgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDE2XzMyeDMyXzE2eDE2KSB8Cj4gKwkJCSAgIFRJ TEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfNTEyQikpOwo+ICsJCXRpbGVbNF0gPSAoQVJS QVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICBNSUNST19USUxFX01PREVf TkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiArCQkJICAgUElQRV9DT05GSUco QUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAo+ICsJCQkgICBUSUxFX1NQTElUKHNwbGl0X2Vx dWFsX3RvX3Jvd19zaXplKSk7Cj4gKwkJdGlsZVs1XSA9IChBUlJBWV9NT0RFKEFSUkFZXzFEX1RJ TEVEX1RISU4xKSB8Cj4gKwkJCSAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4 MTYpIHwKPiArCQkJICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9f VElMSU5HKSk7Cj4gKwkJdGlsZVs2XSA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF8yRF9USUxFRF9U SElOMSkgfAo+ICsJCQkgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNS T19USUxJTkcpIHwKPiArCQkJICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngx NikgfAo+ICsJCQkgICBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzI1NkIpKTsKPiAr CQl0aWxlWzddID0gKEFSUkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJ CSAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+ ICsJCQkgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDE2XzMyeDMyXzE2eDE2KSB8Cj4gKwkJCSAg IFRJTEVfU1BMSVQoc3BsaXRfZXF1YWxfdG9fcm93X3NpemUpKTsKPiArCQl0aWxlWzhdID0gKEFS UkFZX01PREUoQVJSQVlfTElORUFSX0FMSUdORUQpIHwKPiArCQkJICAgUElQRV9DT05GSUcoQURE Ul9TVVJGX1AxNl8zMngzMl8xNngxNikpOwo+ICsJCXRpbGVbOV0gPSAoQVJSQVlfTU9ERShBUlJB WV8xRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDE2XzMy eDMyXzE2eDE2KSB8Cj4gKwkJCSAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RJU1BM QVlfTUlDUk9fVElMSU5HKSk7Cj4gKwkJdGlsZVsxMF0gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9U SUxFRF9USElOMSkgfAo+ICsJCQkgICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfRElT UExBWV9NSUNST19USUxJTkcpIHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZf MzJ4MzJfMTZ4MTYpIHwKPiArCQkJICAgIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQ TElUXzIpKTsKPiArCQl0aWxlWzExXSA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF9USUxFRF9USElO MSkgfAo+ICsJCQkgICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfRElTUExBWV9NSUNS T19USUxJTkcpIHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfOHgx NikgfAo+ICsJCQkgICAgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+ ICsJCXRpbGVbMTJdID0gKEFSUkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RISU4xKSB8Cj4g KwkJCSAgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJTElO RykgfAo+ICsJCQkgICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAo+ ICsJCQkgICAgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+ICsJCXRp bGVbMTNdID0gKEFSUkFZX01PREUoQVJSQVlfMURfVElMRURfVEhJTjEpIHwKPiArCQkJICAgIFBJ UEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKPiArCQkJICAgIE1JQ1JPX1RJ TEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSk7Cj4gKwkJdGlsZVsxNF0g PSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICAgTUlDUk9fVElM RV9NT0RFX05FVyhBRERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKPiArCQkJICAgIFBJUEVf Q09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKPiArCQkJICAgIFNBTVBMRV9TUExJ VChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiArCQl0aWxlWzE2XSA9IChBUlJBWV9NT0RF KEFSUkFZX1BSVF9USUxFRF9USElOMSkgfAo+ICsJCQkgICAgTUlDUk9fVElMRV9NT0RFX05FVyhB RERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJf U1VSRl9QMTZfMzJ4MzJfOHgxNikgfAo+ICsJCQkgICAgU0FNUExFX1NQTElUKEFERFJfU1VSRl9T QU1QTEVfU1BMSVRfMikpOwo+ICsJCXRpbGVbMTddID0gKEFSUkFZX01PREUoQVJSQVlfUFJUXzJE X1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9U SElOX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8z MngzMl8xNngxNikgfAo+ICsJCQkgICAgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BM SVRfMikpOwo+ICsJCXRpbGVbMjddID0gKEFSUkFZX01PREUoQVJSQVlfMURfVElMRURfVEhJTjEp IHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKPiAr CQkJICAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1JPVEFURURfTUlDUk9fVElMSU5H KSk7Cj4gKwkJdGlsZVsyOF0gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+ ICsJCQkgICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfUk9UQVRFRF9NSUNST19USUxJ TkcpIHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwK PiArCQkJICAgIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiArCQl0 aWxlWzI5XSA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF9USUxFRF9USElOMSkgfAo+ICsJCQkgICAg TUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfUk9UQVRFRF9NSUNST19USUxJTkcpIHwKPiAr CQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfOHgxNikgfAo+ICsJCQkgICAg U0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+ICsJCXRpbGVbMzBdID0g KEFSUkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgICBNSUNST19U SUxFX01PREVfTkVXKEFERFJfU1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICAg UElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAo+ICsJCQkgICAgU0FNUExF X1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+ICsKPiArCQltYWNyb3RpbGVbMF0g PSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCSAgIEJBTktfSEVJ R0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF80KSB8Cj4gKwkJCSAgIE1BQ1JPX1RJTEVfQVNQRUNU KEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikgfAo+ICsJCQkgICBOVU1fQkFOS1MoQUREUl9TVVJG XzE2X0JBTkspKTsKPiArCQltYWNyb3RpbGVbMV0gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFO S19XSURUSF8xKSB8Cj4gKwkJCSAgIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8y KSB8Cj4gKwkJCSAgIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikg fAo+ICsJCQkgICBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiArCQltYWNyb3RpbGVb Ml0gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCSAgIEJBTktf SEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCSAgIE1BQ1JPX1RJTEVfQVNQ RUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMSkgfAo+ICsJCQkgICBOVU1fQkFOS1MoQUREUl9T VVJGXzE2X0JBTkspKTsKPiArCQltYWNyb3RpbGVbM10gPSAoQkFOS19XSURUSChBRERSX1NVUkZf QkFOS19XSURUSF8xKSB8Cj4gKwkJCSAgIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdI VF8xKSB8Cj4gKwkJCSAgIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1Rf MSkgfAo+ICsJCQkgICBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiArCQltYWNyb3Rp bGVbNF0gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCSAgIEJB TktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCSAgIE1BQ1JPX1RJTEVf QVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMSkgfAo+ICsJCQkgICBOVU1fQkFOS1MoQURE Ul9TVVJGXzhfQkFOSykpOwo+ICsJCW1hY3JvdGlsZVs1XSA9IChCQU5LX1dJRFRIKEFERFJfU1VS Rl9CQU5LX1dJRFRIXzEpIHwKPiArCQkJICAgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJ R0hUXzEpIHwKPiArCQkJICAgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVD VF8xKSB8Cj4gKwkJCSAgIE5VTV9CQU5LUyhBRERSX1NVUkZfNF9CQU5LKSk7Cj4gKwkJbWFjcm90 aWxlWzZdID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAo+ICsJCQkgICBC QU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+ICsJCQkgICBNQUNST19USUxF X0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzEpIHwKPiArCQkJICAgTlVNX0JBTktTKEFE RFJfU1VSRl8yX0JBTkspKTsKPiArCQltYWNyb3RpbGVbOF0gPSAoQkFOS19XSURUSChBRERSX1NV UkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCSAgIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hF SUdIVF80KSB8Cj4gKwkJCSAgIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BF Q1RfMikgfAo+ICsJCQkgICBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiArCQltYWNy b3RpbGVbOV0gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCSAg IEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8yKSB8Cj4gKwkJCSAgIE1BQ1JPX1RJ TEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikgfAo+ICsJCQkgICBOVU1fQkFOS1Mo QUREUl9TVVJGXzE2X0JBTkspKTsKPiArCQltYWNyb3RpbGVbMTBdID0gKEJBTktfV0lEVEgoQURE Ul9TVVJGX0JBTktfV0lEVEhfMSkgfAo+ICsJCQkgICAgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JB TktfSEVJR0hUXzEpIHwKPiArCQkJICAgIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNS T19BU1BFQ1RfMSkgfAo+ICsJCQkgICAgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4g KwkJbWFjcm90aWxlWzExXSA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwK PiArCQkJICAgIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCSAg ICBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzEpIHwKPiArCQkJICAg IE5VTV9CQU5LUyhBRERSX1NVUkZfOF9CQU5LKSk7Cj4gKwkJbWFjcm90aWxlWzEyXSA9IChCQU5L X1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiArCQkJICAgIEJBTktfSEVJR0hUKEFE RFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCSAgICBNQUNST19USUxFX0FTUEVDVChBRERS X1NVUkZfTUFDUk9fQVNQRUNUXzEpIHwKPiArCQkJICAgIE5VTV9CQU5LUyhBRERSX1NVUkZfNF9C QU5LKSk7Cj4gKwkJbWFjcm90aWxlWzEzXSA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJ RFRIXzEpIHwKPiArCQkJICAgIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8 Cj4gKwkJCSAgICBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzEpIHwK PiArCQkJICAgIE5VTV9CQU5LUyhBRERSX1NVUkZfMl9CQU5LKSk7Cj4gKwkJbWFjcm90aWxlWzE0 XSA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiArCQkJICAgIEJBTktf SEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCSAgICBNQUNST19USUxFX0FT UEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzEpIHwKPiArCQkJICAgIE5VTV9CQU5LUyhBRERS X1NVUkZfMl9CQU5LKSk7Cj4gKwo+ICsJCWZvciAocmVnX29mZnNldCA9IDA7IHJlZ19vZmZzZXQg PCBudW1fdGlsZV9tb2RlX3N0YXRlczsgcmVnX29mZnNldCsrKQo+ICsJCQlXUkVHMzIoR0JfVElM RV9NT0RFMCArIChyZWdfb2Zmc2V0ICogNCksIHRpbGVbcmVnX29mZnNldF0pOwo+ICsJCWZvciAo cmVnX29mZnNldCA9IDA7IHJlZ19vZmZzZXQgPCBudW1fc2Vjb25kYXJ5X3RpbGVfbW9kZV9zdGF0 ZXM7IHJlZ19vZmZzZXQrKykKPiArCQkJV1JFRzMyKEdCX01BQ1JPVElMRV9NT0RFMCArIChyZWdf b2Zmc2V0ICogNCksIG1hY3JvdGlsZVtyZWdfb2Zmc2V0XSk7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJ Y2FzZSA4Ogo+ICsJCXRpbGVbMF0gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkg fAo+ICsJCQkgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJ TkcpIHwKPiArCQkJICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1A4XzMyeDMyXzE2eDE2KSB8Cj4g KwkJCSAgIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfNjRCKSk7Cj4gKwkJdGlsZVsx XSA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgIE1JQ1JPX1RJ TEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICBQSVBF X0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfMTZ4MTYpIHwKPiArCQkJICAgVElMRV9TUExJVChB RERSX1NVUkZfVElMRV9TUExJVF8xMjhCKSk7Cj4gKwkJdGlsZVsyXSA9IChBUlJBWV9NT0RFKEFS UkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9T VVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZf UDhfMzJ4MzJfMTZ4MTYpIHwKPiArCQkJICAgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJ VF8yNTZCKSk7Cj4gKwkJdGlsZVszXSA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4x KSB8Cj4gKwkJCSAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJ TElORykgfAo+ICsJCQkgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfMTZ4MTYpIHwK PiArCQkJICAgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF81MTJCKSk7Cj4gKwkJdGls ZVs0XSA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgIE1JQ1JP X1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICBQ SVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfMTZ4MTYpIHwKPiArCQkJICAgVElMRV9TUExJ VChzcGxpdF9lcXVhbF90b19yb3dfc2l6ZSkpOwo+ICsJCXRpbGVbNV0gPSAoQVJSQVlfTU9ERShB UlJBWV8xRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhf MzJ4MzJfMTZ4MTYpIHwKPiArCQkJICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQ VEhfTUlDUk9fVElMSU5HKSk7Cj4gKwkJdGlsZVs2XSA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF8y RF9USUxFRF9USElOMSkgfAo+ICsJCQkgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9E RVBUSF9NSUNST19USUxJTkcpIHwKPiArCQkJICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1A4XzMy eDMyXzE2eDE2KSB8Cj4gKwkJCSAgIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfMjU2 QikpOwo+ICsJCXRpbGVbN10gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEp IHwKPiArCQkJICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElM SU5HKSB8Cj4gKwkJCSAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngzMl8xNngxNikgfAo+ ICsJCQkgICBUSUxFX1NQTElUKHNwbGl0X2VxdWFsX3RvX3Jvd19zaXplKSk7Cj4gKwkJdGlsZVs4 XSA9IChBUlJBWV9NT0RFKEFSUkFZX0xJTkVBUl9BTElHTkVEKSB8Cj4gKwkJCSAgIFBJUEVfQ09O RklHKEFERFJfU1VSRl9QOF8zMngzMl8xNngxNikpOwo+ICsJCXRpbGVbOV0gPSAoQVJSQVlfTU9E RShBUlJBWV8xRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZf UDhfMzJ4MzJfMTZ4MTYpIHwKPiArCQkJICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZf RElTUExBWV9NSUNST19USUxJTkcpKTsKPiArCQl0aWxlWzEwXSA9IChBUlJBWV9NT0RFKEFSUkFZ XzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VS Rl9ESVNQTEFZX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICAgUElQRV9DT05GSUcoQUREUl9TVVJG X1A4XzMyeDMyXzE2eDE2KSB8Cj4gKwkJCSAgICBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBM RV9TUExJVF8yKSk7Cj4gKwkJdGlsZVsxMV0gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfVElMRURf VEhJTjEpIHwKPiArCQkJICAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RJU1BMQVlf TUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJf OHgxNikgfAo+ICsJCQkgICAgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikp Owo+ICsJCXRpbGVbMTJdID0gKEFSUkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RISU4xKSB8 Cj4gKwkJCSAgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJ TElORykgfAo+ICsJCQkgICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1A4XzMyeDMyXzE2eDE2KSB8 Cj4gKwkJCSAgICBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gKwkJ dGlsZVsxM10gPSAoQVJSQVlfTU9ERShBUlJBWV8xRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICAg UElQRV9DT05GSUcoQUREUl9TVVJGX1A4XzMyeDMyXzE2eDE2KSB8Cj4gKwkJCSAgICBNSUNST19U SUxFX01PREVfTkVXKEFERFJfU1VSRl9USElOX01JQ1JPX1RJTElORykpOwo+ICsJCXRpbGVbMTRd ID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKPiArCQkJICAgIE1JQ1JPX1RJ TEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgICBQSVBF X0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfMTZ4MTYpIHwKPiArCQkJICAgIFNBTVBMRV9TUExJ VChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiArCQl0aWxlWzE2XSA9IChBUlJBWV9NT0RF KEFSUkFZX1BSVF9USUxFRF9USElOMSkgfAo+ICsJCQkgICAgTUlDUk9fVElMRV9NT0RFX05FVyhB RERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJf U1VSRl9QOF8zMngzMl84eDE2KSB8Cj4gKwkJCSAgICBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NB TVBMRV9TUExJVF8yKSk7Cj4gKwkJdGlsZVsxN10gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRf VElMRURfVEhJTjEpIHwKPiArCQkJICAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RI SU5fTUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4 MzJfMTZ4MTYpIHwKPiArCQkJICAgIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElU XzIpKTsKPiArCQl0aWxlWzI3XSA9IChBUlJBWV9NT0RFKEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8 Cj4gKwkJCSAgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDhfMzJ4MzJfMTZ4MTYpIHwKPiArCQkJ ICAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1JPVEFURURfTUlDUk9fVElMSU5HKSk7 Cj4gKwkJdGlsZVsyOF0gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+ICsJ CQkgICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfUk9UQVRFRF9NSUNST19USUxJTkcp IHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QOF8zMngzMl8xNngxNikgfAo+ICsJ CQkgICAgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+ICsJCXRpbGVb MjldID0gKEFSUkFZX01PREUoQVJSQVlfUFJUX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgICBNSUNS T19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORykgfAo+ICsJCQkg ICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1A4XzMyeDMyXzh4MTYpIHwKPiArCQkJICAgIFNBTVBM RV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiArCQl0aWxlWzMwXSA9IChBUlJB WV9NT0RFKEFSUkFZX1BSVF8yRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICAgTUlDUk9fVElMRV9N T0RFX05FVyhBRERSX1NVUkZfUk9UQVRFRF9NSUNST19USUxJTkcpIHwKPiArCQkJICAgIFBJUEVf Q09ORklHKEFERFJfU1VSRl9QOF8zMngzMl8xNngxNikgfAo+ICsJCQkgICAgU0FNUExFX1NQTElU KEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+ICsKPiArCQltYWNyb3RpbGVbMF0gPSAoQkFO S19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCQlCQU5LX0hFSUdIVChBRERS X1NVUkZfQkFOS19IRUlHSFRfNCkgfAo+ICsJCQkJTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJG X01BQ1JPX0FTUEVDVF80KSB8Cj4gKwkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsK PiArCQltYWNyb3RpbGVbMV0gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8 Cj4gKwkJCQlCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMikgfAo+ICsJCQkJTUFD Uk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSB8Cj4gKwkJCQlOVU1fQkFO S1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiArCQltYWNyb3RpbGVbMl0gPSAoQkFOS19XSURUSChB RERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCQlCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFO S19IRUlHSFRfMSkgfAo+ICsJCQkJTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FT UEVDVF8yKSB8Cj4gKwkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiArCQltYWNy b3RpbGVbM10gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCQlC QU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+ICsJCQkJTUFDUk9fVElMRV9B U1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSB8Cj4gKwkJCQlOVU1fQkFOS1MoQUREUl9T VVJGXzE2X0JBTkspKTsKPiArCQltYWNyb3RpbGVbNF0gPSAoQkFOS19XSURUSChBRERSX1NVUkZf QkFOS19XSURUSF8xKSB8Cj4gKwkJCQlCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRf MSkgfAo+ICsJCQkJTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8xKSB8 Cj4gKwkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzhfQkFOSykpOwo+ICsJCW1hY3JvdGlsZVs1XSA9 IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiArCQkJCUJBTktfSEVJR0hU KEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCQlNQUNST19USUxFX0FTUEVDVChBRERS X1NVUkZfTUFDUk9fQVNQRUNUXzEpIHwKPiArCQkJCU5VTV9CQU5LUyhBRERSX1NVUkZfNF9CQU5L KSk7Cj4gKwkJbWFjcm90aWxlWzZdID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhf MSkgfAo+ICsJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzEpIHwKPiArCQkJ CU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMSkgfAo+ICsJCQkJTlVN X0JBTktTKEFERFJfU1VSRl8yX0JBTkspKTsKPiArCQltYWNyb3RpbGVbOF0gPSAoQkFOS19XSURU SChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCQlCQU5LX0hFSUdIVChBRERSX1NVUkZf QkFOS19IRUlHSFRfOCkgfAo+ICsJCQkJTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JP X0FTUEVDVF80KSB8Cj4gKwkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiArCQlt YWNyb3RpbGVbOV0gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJ CQlCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfNCkgfAo+ICsJCQkJTUFDUk9fVElM RV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF80KSB8Cj4gKwkJCQlOVU1fQkFOS1MoQURE Ul9TVVJGXzE2X0JBTkspKTsKPiArCQltYWNyb3RpbGVbMTBdID0gKEJBTktfV0lEVEgoQUREUl9T VVJGX0JBTktfV0lEVEhfMSkgfAo+ICsJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJ R0hUXzIpIHwKPiArCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1Rf MikgfAo+ICsJCQkJTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4gKwkJbWFjcm90aWxl WzExXSA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiArCQkJCUJBTktf SEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCQlNQUNST19USUxFX0FTUEVD VChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzIpIHwKPiArCQkJCU5VTV9CQU5LUyhBRERSX1NVUkZf MTZfQkFOSykpOwo+ICsJCW1hY3JvdGlsZVsxMl0gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFO S19XSURUSF8xKSB8Cj4gKwkJCQlCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkg fAo+ICsJCQkJTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8xKSB8Cj4g KwkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzhfQkFOSykpOwo+ICsJCW1hY3JvdGlsZVsxM10gPSAo QkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCQlCQU5LX0hFSUdIVChB RERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+ICsJCQkJTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9T VVJGX01BQ1JPX0FTUEVDVF8xKSB8Cj4gKwkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzRfQkFOSykp Owo+ICsJCW1hY3JvdGlsZVsxNF0gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8x KSB8Cj4gKwkJCQlCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+ICsJCQkJ TUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8xKSB8Cj4gKwkJCQlOVU1f QkFOS1MoQUREUl9TVVJGXzJfQkFOSykpOwo+ICsKPiArCQlmb3IgKHJlZ19vZmZzZXQgPSAwOyBy ZWdfb2Zmc2V0IDwgbnVtX3RpbGVfbW9kZV9zdGF0ZXM7IHJlZ19vZmZzZXQrKykKPiArCQkJV1JF RzMyKEdCX1RJTEVfTU9ERTAgKyAocmVnX29mZnNldCAqIDQpLCB0aWxlW3JlZ19vZmZzZXRdKTsK PiArCQlmb3IgKHJlZ19vZmZzZXQgPSAwOyByZWdfb2Zmc2V0IDwgbnVtX3NlY29uZGFyeV90aWxl X21vZGVfc3RhdGVzOyByZWdfb2Zmc2V0KyspCj4gKwkJCVdSRUczMihHQl9NQUNST1RJTEVfTU9E RTAgKyAocmVnX29mZnNldCAqIDQpLCBtYWNyb3RpbGVbcmVnX29mZnNldF0pOwo+ICsJCWJyZWFr Owo+ICsKPiArCWNhc2UgNDoKPiAgIAkJaWYgKG51bV9yYnMgPT0gNCkgewo+IC0JCQlmb3IgKHJl Z19vZmZzZXQgPSAwOyByZWdfb2Zmc2V0IDwgbnVtX3RpbGVfbW9kZV9zdGF0ZXM7IHJlZ19vZmZz ZXQrKykgewo+IC0JCQkJc3dpdGNoIChyZWdfb2Zmc2V0KSB7Cj4gLQkJCQljYXNlIDA6Cj4gLQkJ CQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4g LQkJCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5H KSB8Cj4gLQkJCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0XzE2eDE2KSB8Cj4gLQkJCQkJ CQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF82NEIpKTsKPiAtCQkJCQlicmVhazsK PiAtCQkJCWNhc2UgMToKPiAtCQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlf MkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VS Rl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZf UDRfMTZ4MTYpIHwKPiAtCQkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzEy OEIpKTsKPiAtCQkJCQlicmVhazsKPiAtCQkJCWNhc2UgMjoKPiAtCQkJCQlnYl90aWxlX21vZGVu ID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJCSBNSUNST19U SUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJCSBQ SVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiAtCQkJCQkJCSBUSUxFX1NQTElUKEFE RFJfU1VSRl9USUxFX1NQTElUXzI1NkIpKTsKPiAtCQkJCQlicmVhazsKPiAtCQkJCWNhc2UgMzoK PiAtCQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEp IHwKPiAtCQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19U SUxJTkcpIHwKPiAtCQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiAt CQkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzUxMkIpKTsKPiAtCQkJCQli cmVhazsKPiAtCQkJCWNhc2UgNDoKPiAtCQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUo QVJSQVlfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFE RFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJCSBQSVBFX0NPTkZJRyhBRERS X1NVUkZfUDRfMTZ4MTYpIHwKPiAtCQkJCQkJCSBUSUxFX1NQTElUKHNwbGl0X2VxdWFsX3RvX3Jv d19zaXplKSk7Cj4gLQkJCQkJYnJlYWs7Cj4gLQkJCQljYXNlIDU6Cj4gLQkJCQkJZ2JfdGlsZV9t b2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCQkgUElQ RV9DT05GSUcoQUREUl9TVVJGX1A0XzE2eDE2KSB8Cj4gLQkJCQkJCQkgTUlDUk9fVElMRV9NT0RF X05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSk7Cj4gLQkJCQkJYnJlYWs7Cj4gLQkJ CQljYXNlIDY6Cj4gLQkJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF8y RF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJG X0RFUFRIX01JQ1JPX1RJTElORykgfAo+IC0JCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9Q NF8xNngxNikgfAo+IC0JCQkJCQkJIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfMjU2 QikpOwo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJY2FzZSA3Ogo+IC0JCQkJCWdiX3RpbGVfbW9kZW4g PSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJCSBNSUNS T19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJ CSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiAtCQkJCQkJCSBUSUxFX1NQTElU KHNwbGl0X2VxdWFsX3RvX3Jvd19zaXplKSk7Cj4gLQkJCQkJYnJlYWs7Cj4gLQkJCQljYXNlIDg6 Cj4gLQkJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZX0xJTkVBUl9BTElHTkVE KSB8Cj4gLQkJCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0XzE2eDE2KSk7Cj4gLQkJCQkJ YnJlYWs7Cj4gLQkJCQljYXNlIDk6Cj4gLQkJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RF KEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJG X1A0XzE2eDE2KSB8Cj4gLQkJCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfRElT UExBWV9NSUNST19USUxJTkcpKTsKPiAtCQkJCQlicmVhazsKPiAtCQkJCWNhc2UgMTA6Cj4gLQkJ CQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4g LQkJCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfRElTUExBWV9NSUNST19USUxJ TkcpIHwKPiAtCQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiAtCQkJ CQkJCSBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gLQkJCQkJYnJl YWs7Cj4gLQkJCQljYXNlIDExOgo+IC0JCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShB UlJBWV9QUlRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFE RFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJTElORykgfAo+IC0JCQkJCQkJIFBJUEVfQ09ORklHKEFE RFJfU1VSRl9QNF84eDE2KSB8Cj4gLQkJCQkJCQkgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1Q TEVfU1BMSVRfMikpOwo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJY2FzZSAxMjoKPiAtCQkJCQlnYl90 aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJ CQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfRElTUExBWV9NSUNST19USUxJTkcp IHwKPiAtCQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiAtCQkJCQkJ CSBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gLQkJCQkJYnJlYWs7 Cj4gLQkJCQljYXNlIDEzOgo+IC0JCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJB WV8xRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF8x NngxNikgfAo+IC0JCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5fTUlD Uk9fVElMSU5HKSk7Cj4gLQkJCQkJYnJlYWs7Cj4gLQkJCQljYXNlIDE0Ogo+IC0JCQkJCWdiX3Rp bGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkJ IE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8Cj4gLQkJ CQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0XzE2eDE2KSB8Cj4gLQkJCQkJCQkgU0FNUExF X1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJ Y2FzZSAxNjoKPiAtCQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfUFJUX1RJ TEVEX1RISU4xKSB8Cj4gLQkJCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfVEhJ Tl9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgx NikgfAo+IC0JCQkJCQkJIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsK PiAtCQkJCQlicmVhazsKPiAtCQkJCWNhc2UgMTc6Cj4gLQkJCQkJZ2JfdGlsZV9tb2RlbiA9IChB UlJBWV9NT0RFKEFSUkFZX1BSVF8yRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkJIE1JQ1JPX1RJ TEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8Cj4gLQkJCQkJCQkgUElQ RV9DT05GSUcoQUREUl9TVVJGX1A0XzE2eDE2KSB8Cj4gLQkJCQkJCQkgU0FNUExFX1NQTElUKEFE RFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJY2FzZSAyNzoK PiAtCQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMURfVElMRURfVEhJTjEp IHwKPiAtCQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiAtCQkJCQkJ CSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORykpOwo+ IC0JCQkJCWJyZWFrOwo+IC0JCQkJY2FzZSAyODoKPiAtCQkJCQlnYl90aWxlX21vZGVuID0gKEFS UkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCQkgTUlDUk9fVElM RV9NT0RFX05FVyhBRERSX1NVUkZfUk9UQVRFRF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJCSBQ SVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiAtCQkJCQkJCSBTQU1QTEVfU1BMSVQo QUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gLQkJCQkJYnJlYWs7Cj4gLQkJCQljYXNlIDI5 Ogo+IC0JCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfVElMRURfVEhJ TjEpIHwKPiAtCQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ST1RBVEVEX01J Q1JPX1RJTElORykgfAo+IC0JCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2KSB8 Cj4gLQkJCQkJCQkgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0J CQkJCWJyZWFrOwo+IC0JCQkJY2FzZSAzMDoKPiAtCQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZ X01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCQkgTUlDUk9fVElMRV9N T0RFX05FVyhBRERSX1NVUkZfUk9UQVRFRF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJCSBQSVBF X0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiAtCQkJCQkJCSBTQU1QTEVfU1BMSVQoQURE Ul9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gLQkJCQkJYnJlYWs7Cj4gLQkJCQlkZWZhdWx0Ogo+ IC0JCQkJCWdiX3RpbGVfbW9kZW4gPSAwOwo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJfQo+IC0JCQkJ cmRldi0+Y29uZmlnLmNpay50aWxlX21vZGVfYXJyYXlbcmVnX29mZnNldF0gPSBnYl90aWxlX21v ZGVuOwo+IC0JCQkJV1JFRzMyKEdCX1RJTEVfTU9ERTAgKyAocmVnX29mZnNldCAqIDQpLCBnYl90 aWxlX21vZGVuKTsKPiAtCQkJfQo+ICsJCXRpbGVbMF0gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9U SUxFRF9USElOMSkgfAo+ICsJCQkgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBU SF9NSUNST19USUxJTkcpIHwKPiArCQkJICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0XzE2eDE2 KSB8Cj4gKwkJCSAgIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfNjRCKSk7Cj4gKwkJ dGlsZVsxXSA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgIE1J Q1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+ICsJCQkg ICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiArCQkJICAgVElMRV9TUExJVChB RERSX1NVUkZfVElMRV9TUExJVF8xMjhCKSk7Cj4gKwkJdGlsZVsyXSA9IChBUlJBWV9NT0RFKEFS UkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9T VVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZf UDRfMTZ4MTYpIHwKPiArCQkJICAgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF8yNTZC KSk7Cj4gKwkJdGlsZVszXSA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4g KwkJCSAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykg fAo+ICsJCQkgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiArCQkJICAgVElM RV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF81MTJCKSk7Cj4gKwkJdGlsZVs0XSA9IChBUlJB WV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgIE1JQ1JPX1RJTEVfTU9ERV9O RVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICBQSVBFX0NPTkZJRyhB RERSX1NVUkZfUDRfMTZ4MTYpIHwKPiArCQkJICAgVElMRV9TUExJVChzcGxpdF9lcXVhbF90b19y b3dfc2l6ZSkpOwo+ICsJCXRpbGVbNV0gPSAoQVJSQVlfTU9ERShBUlJBWV8xRF9USUxFRF9USElO MSkgfAo+ICsJCQkgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiArCQkJICAg TUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSk7Cj4gKwkJ dGlsZVs2XSA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF8yRF9USUxFRF9USElOMSkgfAo+ICsJCQkg ICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiAr CQkJICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0XzE2eDE2KSB8Cj4gKwkJCSAgIFRJTEVfU1BM SVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfMjU2QikpOwo+ICsJCXRpbGVbN10gPSAoQVJSQVlfTU9E RShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiArCQkJICAgTUlDUk9fVElMRV9NT0RFX05F VyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgIFBJUEVfQ09ORklHKEFE RFJfU1VSRl9QNF8xNngxNikgfAo+ICsJCQkgICBUSUxFX1NQTElUKHNwbGl0X2VxdWFsX3RvX3Jv d19zaXplKSk7Cj4gKwkJdGlsZVs4XSA9IChBUlJBWV9NT0RFKEFSUkFZX0xJTkVBUl9BTElHTkVE KSB8Cj4gKwkJCSAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF8xNngxNikpOwo+ICsJCXRpbGVb OV0gPSAoQVJSQVlfTU9ERShBUlJBWV8xRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICBQSVBFX0NP TkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiArCQkJICAgTUlDUk9fVElMRV9NT0RFX05FVyhB RERSX1NVUkZfRElTUExBWV9NSUNST19USUxJTkcpKTsKPiArCQl0aWxlWzEwXSA9IChBUlJBWV9N T0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgICBNSUNST19USUxFX01PREVfTkVX KEFERFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICAgUElQRV9DT05GSUco QUREUl9TVVJGX1A0XzE2eDE2KSB8Cj4gKwkJCSAgICBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NB TVBMRV9TUExJVF8yKSk7Cj4gKwkJdGlsZVsxMV0gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfVElM RURfVEhJTjEpIHwKPiArCQkJICAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RJU1BM QVlfTUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgx NikgfAo+ICsJCQkgICAgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+ ICsJCXRpbGVbMTJdID0gKEFSUkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RISU4xKSB8Cj4g KwkJCSAgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJTElO RykgfAo+ICsJCQkgICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0XzE2eDE2KSB8Cj4gKwkJCSAg ICBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gKwkJdGlsZVsxM10g PSAoQVJSQVlfTU9ERShBUlJBWV8xRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICAgUElQRV9DT05G SUcoQUREUl9TVVJGX1A0XzE2eDE2KSB8Cj4gKwkJCSAgICBNSUNST19USUxFX01PREVfTkVXKEFE RFJfU1VSRl9USElOX01JQ1JPX1RJTElORykpOwo+ICsJCXRpbGVbMTRdID0gKEFSUkFZX01PREUo QVJSQVlfMkRfVElMRURfVEhJTjEpIHwKPiArCQkJICAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQURE Ul9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgICBQSVBFX0NPTkZJRyhBRERSX1NV UkZfUDRfMTZ4MTYpIHwKPiArCQkJICAgIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQ TElUXzIpKTsKPiArCQl0aWxlWzE2XSA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF9USUxFRF9USElO MSkgfAo+ICsJCQkgICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfVEhJTl9NSUNST19U SUxJTkcpIHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2KSB8Cj4gKwkJ CSAgICBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gKwkJdGlsZVsx N10gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiArCQkJICAgIE1J Q1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAg ICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiArCQkJICAgIFNBTVBMRV9TUExJ VChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiArCQl0aWxlWzI3XSA9IChBUlJBWV9NT0RF KEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZf UDRfMTZ4MTYpIHwKPiArCQkJICAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1JPVEFU RURfTUlDUk9fVElMSU5HKSk7Cj4gKwkJdGlsZVsyOF0gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRf MkRfVElMRURfVEhJTjEpIHwKPiArCQkJICAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJG X1JPVEFURURfTUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZf UDRfMTZ4MTYpIHwKPiArCQkJICAgIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElU XzIpKTsKPiArCQl0aWxlWzI5XSA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF9USUxFRF9USElOMSkg fAo+ICsJCQkgICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfUk9UQVRFRF9NSUNST19U SUxJTkcpIHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2KSB8Cj4gKwkJ CSAgICBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gKwkJdGlsZVsz MF0gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiArCQkJICAgIE1J Q1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1JPVEFURURfTUlDUk9fVElMSU5HKSB8Cj4gKwkJ CSAgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKPiArCQkJICAgIFNBTVBMRV9T UExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiArCj4gICAJCX0gZWxzZSBpZiAobnVt X3JicyA8IDQpIHsKPiAtCQkJZm9yIChyZWdfb2Zmc2V0ID0gMDsgcmVnX29mZnNldCA8IG51bV90 aWxlX21vZGVfc3RhdGVzOyByZWdfb2Zmc2V0KyspIHsKPiAtCQkJCXN3aXRjaCAocmVnX29mZnNl dCkgewo+IC0JCQkJY2FzZSAwOgo+IC0JCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShB UlJBWV8yRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQURE Ul9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+IC0JCQkJCQkJIFBJUEVfQ09ORklHKEFERFJf U1VSRl9QNF84eDE2KSB8Cj4gLQkJCQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJ VF82NEIpKTsKPiAtCQkJCQlicmVhazsKPiAtCQkJCWNhc2UgMToKPiAtCQkJCQlnYl90aWxlX21v ZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJCSBNSUNS T19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJ CSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAo+IC0JCQkJCQkJIFRJTEVfU1BMSVQo QUREUl9TVVJGX1RJTEVfU1BMSVRfMTI4QikpOwo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJY2FzZSAy Ogo+IC0JCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElO MSkgfAo+IC0JCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JP X1RJTElORykgfAo+IC0JCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2KSB8Cj4g LQkJCQkJCQkgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF8yNTZCKSk7Cj4gLQkJCQkJ YnJlYWs7Cj4gLQkJCQljYXNlIDM6Cj4gLQkJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RF KEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhB RERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSB8Cj4gLQkJCQkJCQkgUElQRV9DT05GSUcoQURE Ul9TVVJGX1A0Xzh4MTYpIHwKPiAtCQkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQ TElUXzUxMkIpKTsKPiAtCQkJCQlicmVhazsKPiAtCQkJCWNhc2UgNDoKPiAtCQkJCQlnYl90aWxl X21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJCSBN SUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiAtCQkJ CQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAo+IC0JCQkJCQkJIFRJTEVfU1BM SVQoc3BsaXRfZXF1YWxfdG9fcm93X3NpemUpKTsKPiAtCQkJCQlicmVhazsKPiAtCQkJCWNhc2Ug NToKPiAtCQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMURfVElMRURfVEhJ TjEpIHwKPiAtCQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAo+IC0JCQkJ CQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykpOwo+ IC0JCQkJCWJyZWFrOwo+IC0JCQkJY2FzZSA2Ogo+IC0JCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJS QVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJCSBNSUNST19USUxF X01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJCSBQSVBF X0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAo+IC0JCQkJCQkJIFRJTEVfU1BMSVQoQUREUl9T VVJGX1RJTEVfU1BMSVRfMjU2QikpOwo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJY2FzZSA3Ogo+IC0J CQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEp IHwKPiAtCQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19U SUxJTkcpIHwKPiAtCQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAo+IC0J CQkJCQkJIFRJTEVfU1BMSVQoc3BsaXRfZXF1YWxfdG9fcm93X3NpemUpKTsKPiAtCQkJCQlicmVh azsKPiAtCQkJCWNhc2UgODoKPiAtCQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJS QVlfTElORUFSX0FMSUdORUQpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84 eDE2KSk7Cj4gLQkJCQkJYnJlYWs7Cj4gLQkJCQljYXNlIDk6Cj4gLQkJCQkJZ2JfdGlsZV9tb2Rl biA9IChBUlJBWV9NT0RFKEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCQkgUElQRV9D T05GSUcoQUREUl9TVVJGX1A0Xzh4MTYpIHwKPiAtCQkJCQkJCSBNSUNST19USUxFX01PREVfTkVX KEFERFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJTElORykpOwo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJ Y2FzZSAxMDoKPiAtCQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElM RURfVEhJTjEpIHwKPiAtCQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ESVNQ TEFZX01JQ1JPX1RJTElORykgfAo+IC0JCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84 eDE2KSB8Cj4gLQkJCQkJCQkgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikp Owo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJY2FzZSAxMToKPiAtCQkJCQlnYl90aWxlX21vZGVuID0g KEFSUkFZX01PREUoQVJSQVlfUFJUX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCQkgTUlDUk9fVElM RV9NT0RFX05FVyhBRERSX1NVUkZfRElTUExBWV9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJCSBQ SVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAo+IC0JCQkJCQkJIFNBTVBMRV9TUExJVChB RERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiAtCQkJCQlicmVhazsKPiAtCQkJCWNhc2UgMTI6 Cj4gLQkJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF8yRF9USUxFRF9U SElOMSkgfAo+IC0JCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RJU1BMQVlf TUlDUk9fVElMSU5HKSB8Cj4gLQkJCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0Xzh4MTYp IHwKPiAtCQkJCQkJCSBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4g LQkJCQkJYnJlYWs7Cj4gLQkJCQljYXNlIDEzOgo+IC0JCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJS QVlfTU9ERShBUlJBWV8xRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkJIFBJUEVfQ09ORklHKEFE RFJfU1VSRl9QNF84eDE2KSB8Cj4gLQkJCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NV UkZfVEhJTl9NSUNST19USUxJTkcpKTsKPiAtCQkJCQlicmVhazsKPiAtCQkJCWNhc2UgMTQ6Cj4g LQkJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8 Cj4gLQkJCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfVEhJTl9NSUNST19USUxJ TkcpIHwKPiAtCQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAo+IC0JCQkJ CQkJIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiAtCQkJCQlicmVh azsKPiAtCQkJCWNhc2UgMTY6Cj4gLQkJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFS UkFZX1BSVF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQURE Ul9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8Cj4gLQkJCQkJCQkgUElQRV9DT05GSUcoQUREUl9T VVJGX1A0Xzh4MTYpIHwKPiAtCQkJCQkJCSBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9T UExJVF8yKSk7Cj4gLQkJCQkJYnJlYWs7Cj4gLQkJCQljYXNlIDE3Ogo+IC0JCQkJCWdiX3RpbGVf bW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJ CSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9USElOX01JQ1JPX1RJTElORykgfAo+IC0J CQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2KSB8Cj4gLQkJCQkJCQkgU0FNUExF X1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJ Y2FzZSAyNzoKPiAtCQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMURfVElM RURfVEhJTjEpIHwKPiAtCQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAo+ IC0JCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1JPVEFURURfTUlDUk9fVElM SU5HKSk7Cj4gLQkJCQkJYnJlYWs7Cj4gLQkJCQljYXNlIDI4Ogo+IC0JCQkJCWdiX3RpbGVfbW9k ZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJCSBN SUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORykgfAo+IC0J CQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2KSB8Cj4gLQkJCQkJCQkgU0FNUExF X1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJ Y2FzZSAyOToKPiAtCQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfUFJUX1RJ TEVEX1RISU4xKSB8Cj4gLQkJCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfUk9U QVRFRF9NSUNST19USUxJTkcpIHwKPiAtCQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRf OHgxNikgfAo+IC0JCQkJCQkJIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIp KTsKPiAtCQkJCQlicmVhazsKPiAtCQkJCWNhc2UgMzA6Cj4gLQkJCQkJZ2JfdGlsZV9tb2RlbiA9 IChBUlJBWV9NT0RFKEFSUkFZX1BSVF8yRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkJIE1JQ1JP X1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1JPVEFURURfTUlDUk9fVElMSU5HKSB8Cj4gLQkJCQkJ CQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0Xzh4MTYpIHwKPiAtCQkJCQkJCSBTQU1QTEVfU1BM SVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gLQkJCQkJYnJlYWs7Cj4gLQkJCQlkZWZh dWx0Ogo+IC0JCQkJCWdiX3RpbGVfbW9kZW4gPSAwOwo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJfQo+ IC0JCQkJcmRldi0+Y29uZmlnLmNpay50aWxlX21vZGVfYXJyYXlbcmVnX29mZnNldF0gPSBnYl90 aWxlX21vZGVuOwo+IC0JCQkJV1JFRzMyKEdCX1RJTEVfTU9ERTAgKyAocmVnX29mZnNldCAqIDQp LCBnYl90aWxlX21vZGVuKTsKPiAtCQkJfQo+IC0JCX0KPiAtCQlmb3IgKHJlZ19vZmZzZXQgPSAw OyByZWdfb2Zmc2V0IDwgbnVtX3NlY29uZGFyeV90aWxlX21vZGVfc3RhdGVzOyByZWdfb2Zmc2V0 KyspIHsKPiAtCQkJc3dpdGNoIChyZWdfb2Zmc2V0KSB7Cj4gLQkJCWNhc2UgMDoKPiAtCQkJCWdi X3RpbGVfbW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gLQkJ CQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfNCkgfAo+IC0JCQkJCQkgTUFD Uk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF80KSB8Cj4gLQkJCQkJCSBOVU1f QkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDE6Cj4g LQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkg fAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzIpIHwKPiAtCQkJ CQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfNCkgfAo+IC0JCQkJ CQkgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2Fz ZSAyOgo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJ RFRIXzEpIHwKPiAtCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8 Cj4gLQkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzIpIHwK PiAtCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+IC0JCQkJYnJlYWs7Cj4g LQkJCWNhc2UgMzoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZf QkFOS19XSURUSF8xKSB8Cj4gLQkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlH SFRfMSkgfAo+IC0JCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVD VF8yKSB8Cj4gLQkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiAtCQkJCWJy ZWFrOwo+IC0JCQljYXNlIDQ6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQURE Ul9TVVJGX0JBTktfV0lEVEhfMSkgfAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JB TktfSEVJR0hUXzEpIHwKPiAtCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNS T19BU1BFQ1RfMikgfAo+IC0JCQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4g LQkJCQlicmVhazsKPiAtCQkJY2FzZSA1Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJ RFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAtCQkJCQkJIEJBTktfSEVJR0hUKEFERFJf U1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gLQkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NV UkZfTUFDUk9fQVNQRUNUXzIpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfOF9CQU5L KSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSA2Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChC QU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAtCQkJCQkJIEJBTktfSEVJR0hU KEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gLQkJCQkJCSBNQUNST19USUxFX0FTUEVDVChB RERSX1NVUkZfTUFDUk9fQVNQRUNUXzEpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZf NF9CQU5LKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSA4Ogo+IC0JCQkJZ2JfdGlsZV9tb2Rl biA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzIpIHwKPiAtCQkJCQkJIEJBTktf SEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF84KSB8Cj4gLQkJCQkJCSBNQUNST19USUxFX0FT UEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzQpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhBRERS X1NVUkZfMTZfQkFOSykpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgOToKPiAtCQkJCWdiX3Rp bGVfbW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8yKSB8Cj4gLQkJCQkJ CSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfNCkgfAo+IC0JCQkJCQkgTUFDUk9f VElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF80KSB8Cj4gLQkJCQkJCSBOVU1fQkFO S1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDEwOgo+IC0J CQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwK PiAtCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF80KSB8Cj4gLQkJCQkJ CSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzQpIHwKPiAtCQkJCQkJ IE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2Ug MTE6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lE VEhfMSkgfAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzIpIHwK PiAtCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfNCkgfAo+ IC0JCQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4gLQkJCQlicmVhazsKPiAt CQkJY2FzZSAxMjoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZf QkFOS19XSURUSF8xKSB8Cj4gLQkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlH SFRfMSkgfAo+IC0JCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVD VF8yKSB8Cj4gLQkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiAtCQkJCWJy ZWFrOwo+IC0JCQljYXNlIDEzOgo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJRFRIKEFE RFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAtCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9C QU5LX0hFSUdIVF8xKSB8Cj4gLQkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFD Uk9fQVNQRUNUXzIpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfOF9CQU5LKSk7Cj4g LQkJCQlicmVhazsKPiAtCQkJY2FzZSAxNDoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQkFOS19X SURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gLQkJCQkJCSBCQU5LX0hFSUdIVChBRERS X1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+IC0JCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9T VVJGX01BQ1JPX0FTUEVDVF8xKSB8Cj4gLQkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzRfQkFO SykpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWRlZmF1bHQ6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0g MDsKPiAtCQkJCWJyZWFrOwo+IC0JCQl9Cj4gLQkJCXJkZXYtPmNvbmZpZy5jaWsubWFjcm90aWxl X21vZGVfYXJyYXlbcmVnX29mZnNldF0gPSBnYl90aWxlX21vZGVuOwo+IC0JCQlXUkVHMzIoR0Jf TUFDUk9USUxFX01PREUwICsgKHJlZ19vZmZzZXQgKiA0KSwgZ2JfdGlsZV9tb2Rlbik7Cj4gLQkJ fQo+IC0JfSBlbHNlIGlmIChudW1fcGlwZV9jb25maWdzID09IDIpIHsKPiAtCQlmb3IgKHJlZ19v ZmZzZXQgPSAwOyByZWdfb2Zmc2V0IDwgbnVtX3RpbGVfbW9kZV9zdGF0ZXM7IHJlZ19vZmZzZXQr Kykgewo+IC0JCQlzd2l0Y2ggKHJlZ19vZmZzZXQpIHsKPiAtCQkJY2FzZSAwOgo+IC0JCQkJZ2Jf dGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJ CSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiAt CQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMikgfAo+IC0JCQkJCQkgVElMRV9TUExJVChB RERSX1NVUkZfVElMRV9TUExJVF82NEIpKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDE6Cj4g LQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwK PiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElO RykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1AyKSB8Cj4gLQkJCQkJCSBUSUxF X1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzEyOEIpKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQlj YXNlIDI6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURf VEhJTjEpIHwKPiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01J Q1JPX1RJTElORykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1AyKSB8Cj4gLQkJ CQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzI1NkIpKTsKPiAtCQkJCWJyZWFr Owo+IC0JCQljYXNlIDM6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlf MkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJG X0RFUFRIX01JQ1JPX1RJTElORykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1Ay KSB8Cj4gLQkJCQkJCSBUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzUxMkIpKTsKPiAt CQkJCWJyZWFrOwo+IC0JCQljYXNlIDQ6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01P REUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVco QUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQURE Ul9TVVJGX1AyKSB8Cj4gLQkJCQkJCSBUSUxFX1NQTElUKHNwbGl0X2VxdWFsX3RvX3Jvd19zaXpl KSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSA1Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChB UlJBWV9NT0RFKEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCSBQSVBFX0NPTkZJRyhB RERSX1NVUkZfUDIpIHwKPiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RF UFRIX01JQ1JPX1RJTElORykpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgNjoKPiAtCQkJCWdi X3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiAt CQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykg fAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1AyKSB8Cj4gLQkJCQkJCSBUSUxFX1NQ TElUKEFERFJfU1VSRl9USUxFX1NQTElUXzI1NkIpKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNl IDc6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVE X1RISU4xKSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9N SUNST19USUxJTkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMikgfAo+IC0J CQkJCQkgVElMRV9TUExJVChzcGxpdF9lcXVhbF90b19yb3dfc2l6ZSkpOwo+IC0JCQkJYnJlYWs7 Cj4gLQkJCWNhc2UgODoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSBBUlJBWV9NT0RFKEFSUkFZX0xJ TkVBUl9BTElHTkVEKSB8Cj4gLQkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMik7Cj4gLQkJ CQlicmVhazsKPiAtCQkJY2FzZSA5Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RF KEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFE RFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJTElORykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQURE Ul9TVVJGX1AyKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAxMDoKPiAtCQkJCWdiX3RpbGVf bW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkgTUlD Uk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfRElTUExBWV9NSUNST19USUxJTkcpIHwKPiAtCQkJ CQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMikgfAo+IC0JCQkJCQkgU0FNUExFX1NQTElUKEFE RFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMTE6Cj4g LQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfUFJUX1RJTEVEX1RISU4xKSB8 Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJ TElORykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1AyKSB8Cj4gLQkJCQkJCSBT QU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gLQkJCQlicmVhazsKPiAt CQkJY2FzZSAxMjoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRf MkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJG X0RJU1BMQVlfTUlDUk9fVElMSU5HKSB8Cj4gLQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZf UDIpIHwKPiAtCQkJCQkJIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsK PiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDEzOgo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJB WV9NT0RFKEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCSBQSVBFX0NPTkZJRyhBRERS X1NVUkZfUDIpIHwKPiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5f TUlDUk9fVElMSU5HKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAxNDoKPiAtCQkJCWdiX3Rp bGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+IC0JCQkJCQkg TUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKPiAtCQkJ CQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMikgfAo+IC0JCQkJCQkgU0FNUExFX1NQTElUKEFE RFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMTY6Cj4g LQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfUFJUX1RJTEVEX1RISU4xKSB8 Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9USElOX01JQ1JPX1RJTElO RykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9TVVJGX1AyKSB8Cj4gLQkJCQkJCSBTQU1Q TEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJ Y2FzZSAxNzoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRf VElMRURfVEhJTjEpIHwKPiAtCQkJCQkJIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RI SU5fTUlDUk9fVElMSU5HKSB8Cj4gLQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDIpIHwK PiAtCQkJCQkJIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiAtCQkJ CWJyZWFrOwo+IC0JCQljYXNlIDI3Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RF KEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFE RFJfU1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQURE Ul9TVVJGX1AyKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAyODoKPiAtCQkJCWdiX3RpbGVf bW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiAtCQkJCQkJ IE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1JPVEFURURfTUlDUk9fVElMSU5HKSB8Cj4g LQkJCQkJCSBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDIpIHwKPiAtCQkJCQkJIFNBTVBMRV9TUExJ VChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDI5 Ogo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF9USUxFRF9USElO MSkgfAo+IC0JCQkJCQkgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfUk9UQVRFRF9NSUNS T19USUxJTkcpIHwKPiAtCQkJCQkJIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMikgfAo+IC0JCQkJ CQkgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+IC0JCQkJYnJlYWs7 Cj4gLQkJCWNhc2UgMzA6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlf UFJUXzJEX1RJTEVEX1RISU4xKSB8Cj4gLQkJCQkJCSBNSUNST19USUxFX01PREVfTkVXKEFERFJf U1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORykgfAo+IC0JCQkJCQkgUElQRV9DT05GSUcoQUREUl9T VVJGX1AyKSB8Cj4gLQkJCQkJCSBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8y KSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJZGVmYXVsdDoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAw Owo+IC0JCQkJYnJlYWs7Cj4gLQkJCX0KPiAtCQkJcmRldi0+Y29uZmlnLmNpay50aWxlX21vZGVf YXJyYXlbcmVnX29mZnNldF0gPSBnYl90aWxlX21vZGVuOwo+IC0JCQlXUkVHMzIoR0JfVElMRV9N T0RFMCArIChyZWdfb2Zmc2V0ICogNCksIGdiX3RpbGVfbW9kZW4pOwo+IC0JCX0KPiAtCQlmb3Ig KHJlZ19vZmZzZXQgPSAwOyByZWdfb2Zmc2V0IDwgbnVtX3NlY29uZGFyeV90aWxlX21vZGVfc3Rh dGVzOyByZWdfb2Zmc2V0KyspIHsKPiAtCQkJc3dpdGNoIChyZWdfb2Zmc2V0KSB7Cj4gLQkJCWNh c2UgMDoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19X SURUSF8yKSB8Cj4gLQkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfNCkg fAo+IC0JCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF80KSB8 Cj4gLQkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+ IC0JCQljYXNlIDE6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJG X0JBTktfV0lEVEhfMikgfAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJ R0hUXzIpIHwKPiAtCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BF Q1RfNCkgfAo+IC0JCQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4gLQkJCQli cmVhazsKPiAtCQkJY2FzZSAyOgo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJRFRIKEFE RFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAtCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9C QU5LX0hFSUdIVF8yKSB8Cj4gLQkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFD Uk9fQVNQRUNUXzQpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+ IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMzoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQkFOS19X SURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gLQkJCQkJCSBCQU5LX0hFSUdIVChBRERS X1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+IC0JCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9T VVJGX01BQ1JPX0FTUEVDVF80KSB8Cj4gLQkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JB TkspKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDQ6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0g KEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAo+IC0JCQkJCQkgQkFOS19IRUlH SFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzEpIHwKPiAtCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNU KEFERFJfU1VSRl9NQUNST19BU1BFQ1RfNCkgfAo+IC0JCQkJCQkgTlVNX0JBTktTKEFERFJfU1VS Rl8xNl9CQU5LKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSA1Ogo+IC0JCQkJZ2JfdGlsZV9t b2RlbiA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAtCQkJCQkJIEJB TktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gLQkJCQkJCSBNQUNST19USUxF X0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzQpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhB RERSX1NVUkZfMTZfQkFOSykpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgNjoKPiAtCQkJCWdi X3RpbGVfbW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gLQkJ CQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+IC0JCQkJCQkgTUFD Uk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSB8Cj4gLQkJCQkJCSBOVU1f QkFOS1MoQUREUl9TVVJGXzhfQkFOSykpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgODoKPiAt CQkJCWdiX3RpbGVfbW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF80KSB8 Cj4gLQkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfOCkgfAo+IC0JCQkJ CQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF80KSB8Cj4gLQkJCQkJ CSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNl IDk6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lE VEhfNCkgfAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzQpIHwK PiAtCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfNCkgfAo+ IC0JCQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4gLQkJCQlicmVhazsKPiAt CQkJY2FzZSAxMDoKPiAtCQkJCWdiX3RpbGVfbW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZf QkFOS19XSURUSF8yKSB8Cj4gLQkJCQkJCSBCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlH SFRfNCkgfAo+IC0JCQkJCQkgTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVD VF80KSB8Cj4gLQkJCQkJCSBOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiAtCQkJCWJy ZWFrOwo+IC0JCQljYXNlIDExOgo+IC0JCQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJRFRIKEFE RFJfU1VSRl9CQU5LX1dJRFRIXzIpIHwKPiAtCQkJCQkJIEJBTktfSEVJR0hUKEFERFJfU1VSRl9C QU5LX0hFSUdIVF8yKSB8Cj4gLQkJCQkJCSBNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFD Uk9fQVNQRUNUXzQpIHwKPiAtCQkJCQkJIE5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+ IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgMTI6Cj4gLQkJCQlnYl90aWxlX21vZGVuID0gKEJBTktf V0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAo+IC0JCQkJCQkgQkFOS19IRUlHSFQoQURE Ul9TVVJGX0JBTktfSEVJR0hUXzIpIHwKPiAtCQkJCQkJIE1BQ1JPX1RJTEVfQVNQRUNUKEFERFJf U1VSRl9NQUNST19BU1BFQ1RfNCkgfAo+IC0JCQkJCQkgTlVNX0JBTktTKEFERFJfU1VSRl8xNl9C QU5LKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAxMzoKPiAtCQkJCWdiX3RpbGVfbW9kZW4g PSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gLQkJCQkJCSBCQU5LX0hF SUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+IC0JCQkJCQkgTUFDUk9fVElMRV9BU1BF Q1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF80KSB8Cj4gLQkJCQkJCSBOVU1fQkFOS1MoQUREUl9T VVJGXzE2X0JBTkspKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIDE0Ogo+IC0JCQkJZ2JfdGls ZV9tb2RlbiA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAtCQkJCQkJ IEJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gLQkJCQkJCSBNQUNST19U SUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzIpIHwKPiAtCQkJCQkJIE5VTV9CQU5L UyhBRERSX1NVUkZfOF9CQU5LKSk7Cj4gLQkJCQlicmVhazsKPiAtCQkJZGVmYXVsdDoKPiAtCQkJ CWdiX3RpbGVfbW9kZW4gPSAwOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCX0KPiAtCQkJcmRldi0+Y29u ZmlnLmNpay5tYWNyb3RpbGVfbW9kZV9hcnJheVtyZWdfb2Zmc2V0XSA9IGdiX3RpbGVfbW9kZW47 Cj4gLQkJCVdSRUczMihHQl9NQUNST1RJTEVfTU9ERTAgKyAocmVnX29mZnNldCAqIDQpLCBnYl90 aWxlX21vZGVuKTsKPiArCQl0aWxlWzBdID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJ TjEpIHwKPiArCQkJICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9f VElMSU5HKSB8Cj4gKwkJCSAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2KSB8Cj4gKwkJ CSAgIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfNjRCKSk7Cj4gKwkJdGlsZVsxXSA9 IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgIE1JQ1JPX1RJTEVf TU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICBQSVBFX0NP TkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAo+ICsJCQkgICBUSUxFX1NQTElUKEFERFJfU1VSRl9U SUxFX1NQTElUXzEyOEIpKTsKPiArCQl0aWxlWzJdID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElM RURfVEhJTjEpIHwKPiArCQkJICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhf TUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2KSB8 Cj4gKwkJCSAgIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfMjU2QikpOwo+ICsJCXRp bGVbM10gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICBNSUNS T19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpIHwKPiArCQkJICAg UElQRV9DT05GSUcoQUREUl9TVVJGX1A0Xzh4MTYpIHwKPiArCQkJICAgVElMRV9TUExJVChBRERS X1NVUkZfVElMRV9TUExJVF81MTJCKSk7Cj4gKwkJdGlsZVs0XSA9IChBUlJBWV9NT0RFKEFSUkFZ XzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJG X0RFUFRIX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRf OHgxNikgfAo+ICsJCQkgICBUSUxFX1NQTElUKHNwbGl0X2VxdWFsX3RvX3Jvd19zaXplKSk7Cj4g KwkJdGlsZVs1XSA9IChBUlJBWV9NT0RFKEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAg IFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2KSB8Cj4gKwkJCSAgIE1JQ1JPX1RJTEVfTU9E RV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykpOwo+ICsJCXRpbGVbNl0gPSAoQVJS QVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiArCQkJICAgTUlDUk9fVElMRV9N T0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgIFBJUEVfQ09O RklHKEFERFJfU1VSRl9QNF84eDE2KSB8Cj4gKwkJCSAgIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJ TEVfU1BMSVRfMjU2QikpOwo+ICsJCXRpbGVbN10gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRf VElMRURfVEhJTjEpIHwKPiArCQkJICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQ VEhfTUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2 KSB8Cj4gKwkJCSAgIFRJTEVfU1BMSVQoc3BsaXRfZXF1YWxfdG9fcm93X3NpemUpKTsKPiArCQl0 aWxlWzhdID0gKEFSUkFZX01PREUoQVJSQVlfTElORUFSX0FMSUdORUQpIHwKPiArCQkJICAgUElQ RV9DT05GSUcoQUREUl9TVVJGX1A0Xzh4MTYpKTsKPiArCQl0aWxlWzldID0gKEFSUkFZX01PREUo QVJSQVlfMURfVElMRURfVEhJTjEpIHwKPiArCQkJICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0 Xzh4MTYpIHwKPiArCQkJICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfRElTUExBWV9N SUNST19USUxJTkcpKTsKPiArCQl0aWxlWzEwXSA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVE X1RISU4xKSB8Cj4gKwkJCSAgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ESVNQTEFZ X01JQ1JPX1RJTElORykgfAo+ICsJCQkgICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0Xzh4MTYp IHwKPiArCQkJICAgIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiAr CQl0aWxlWzExXSA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF9USUxFRF9USElOMSkgfAo+ICsJCQkg ICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfRElTUExBWV9NSUNST19USUxJTkcpIHwK PiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2KSB8Cj4gKwkJCSAgICBTQU1Q TEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gKwkJdGlsZVsxMl0gPSAoQVJS QVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiArCQkJICAgIE1JQ1JPX1RJTEVf TU9ERV9ORVcoQUREUl9TVVJGX0RJU1BMQVlfTUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgICBQSVBF X0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAo+ICsJCQkgICAgU0FNUExFX1NQTElUKEFERFJf U1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+ICsJCXRpbGVbMTNdID0gKEFSUkFZX01PREUoQVJSQVlf MURfVElMRURfVEhJTjEpIHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF84eDE2 KSB8Cj4gKwkJCSAgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9USElOX01JQ1JPX1RJ TElORykpOwo+ICsJCXRpbGVbMTRdID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEp IHwKPiArCQkJICAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5fTUlDUk9fVElM SU5HKSB8Cj4gKwkJCSAgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAo+ICsJCQkg ICAgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+ICsJCXRpbGVbMTZd ID0gKEFSUkFZX01PREUoQVJSQVlfUFJUX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgICBNSUNST19U SUxFX01PREVfTkVXKEFERFJfU1VSRl9USElOX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICAgUElQ RV9DT05GSUcoQUREUl9TVVJGX1A0Xzh4MTYpIHwKPiArCQkJICAgIFNBTVBMRV9TUExJVChBRERS X1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiArCQl0aWxlWzE3XSA9IChBUlJBWV9NT0RFKEFSUkFZ X1BSVF8yRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERS X1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VS Rl9QNF84eDE2KSB8Cj4gKwkJCSAgICBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJ VF8yKSk7Cj4gKwkJdGlsZVsyN10gPSAoQVJSQVlfTU9ERShBUlJBWV8xRF9USUxFRF9USElOMSkg fAo+ICsJCQkgICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1A0Xzh4MTYpIHwKPiArCQkJICAgIE1J Q1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1JPVEFURURfTUlDUk9fVElMSU5HKSk7Cj4gKwkJ dGlsZVsyOF0gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiArCQkJ ICAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1JPVEFURURfTUlDUk9fVElMSU5HKSB8 Cj4gKwkJCSAgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfOHgxNikgfAo+ICsJCQkgICAgU0FN UExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+ICsJCXRpbGVbMjldID0gKEFS UkFZX01PREUoQVJSQVlfUFJUX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgICBNSUNST19USUxFX01P REVfTkVXKEFERFJfU1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICAgUElQRV9D T05GSUcoQUREUl9TVVJGX1A0Xzh4MTYpIHwKPiArCQkJICAgIFNBTVBMRV9TUExJVChBRERSX1NV UkZfU0FNUExFX1NQTElUXzIpKTsKPiArCQl0aWxlWzMwXSA9IChBUlJBWV9NT0RFKEFSUkFZX1BS VF8yRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NV UkZfUk9UQVRFRF9NSUNST19USUxJTkcpIHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VS Rl9QNF84eDE2KSB8Cj4gKwkJCSAgICBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJ VF8yKSk7Cj4gICAJCX0KPiAtCX0gZWxzZQo+ICsKPiArCQltYWNyb3RpbGVbMF0gPSAoQkFOS19X SURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCQlCQU5LX0hFSUdIVChBRERSX1NV UkZfQkFOS19IRUlHSFRfNCkgfAo+ICsJCQkJTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01B Q1JPX0FTUEVDVF80KSB8Cj4gKwkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiAr CQltYWNyb3RpbGVbMV0gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4g KwkJCQlCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMikgfAo+ICsJCQkJTUFDUk9f VElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF80KSB8Cj4gKwkJCQlOVU1fQkFOS1Mo QUREUl9TVVJGXzE2X0JBTkspKTsKPiArCQltYWNyb3RpbGVbMl0gPSAoQkFOS19XSURUSChBRERS X1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCQlCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19I RUlHSFRfMSkgfAo+ICsJCQkJTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVD VF8yKSB8Cj4gKwkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiArCQltYWNyb3Rp bGVbM10gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCQlCQU5L X0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+ICsJCQkJTUFDUk9fVElMRV9BU1BF Q1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSB8Cj4gKwkJCQlOVU1fQkFOS1MoQUREUl9TVVJG XzE2X0JBTkspKTsKPiArCQltYWNyb3RpbGVbNF0gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFO S19XSURUSF8xKSB8Cj4gKwkJCQlCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkg fAo+ICsJCQkJTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSB8Cj4g KwkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTkspKTsKPiArCQltYWNyb3RpbGVbNV0gPSAo QkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCQlCQU5LX0hFSUdIVChB RERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+ICsJCQkJTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9T VVJGX01BQ1JPX0FTUEVDVF8yKSB8Cj4gKwkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzhfQkFOSykp Owo+ICsJCW1hY3JvdGlsZVs2XSA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEp IHwKPiArCQkJCUJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCQlN QUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzEpIHwKPiArCQkJCU5VTV9C QU5LUyhBRERSX1NVUkZfNF9CQU5LKSk7Cj4gKwkJbWFjcm90aWxlWzhdID0gKEJBTktfV0lEVEgo QUREUl9TVVJGX0JBTktfV0lEVEhfMikgfAo+ICsJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JB TktfSEVJR0hUXzgpIHwKPiArCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19B U1BFQ1RfNCkgfAo+ICsJCQkJTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4gKwkJbWFj cm90aWxlWzldID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMikgfAo+ICsJCQkJ QkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzQpIHwKPiArCQkJCU1BQ1JPX1RJTEVf QVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfNCkgfAo+ICsJCQkJTlVNX0JBTktTKEFERFJf U1VSRl8xNl9CQU5LKSk7Cj4gKwkJbWFjcm90aWxlWzEwXSA9IChCQU5LX1dJRFRIKEFERFJfU1VS Rl9CQU5LX1dJRFRIXzEpIHwKPiArCQkJCUJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdI VF80KSB8Cj4gKwkJCQlNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzQp IHwKPiArCQkJCU5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+ICsJCW1hY3JvdGlsZVsx MV0gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4gKwkJCQlCQU5LX0hF SUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMikgfAo+ICsJCQkJTUFDUk9fVElMRV9BU1BFQ1Qo QUREUl9TVVJGX01BQ1JPX0FTUEVDVF80KSB8Cj4gKwkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzE2 X0JBTkspKTsKPiArCQltYWNyb3RpbGVbMTJdID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktf V0lEVEhfMSkgfAo+ICsJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzEpIHwK PiArCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikgfAo+ICsJ CQkJTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4gKwkJbWFjcm90aWxlWzEzXSA9IChC QU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiArCQkJCUJBTktfSEVJR0hUKEFE RFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCQlNQUNST19USUxFX0FTUEVDVChBRERSX1NV UkZfTUFDUk9fQVNQRUNUXzIpIHwKPiArCQkJCU5VTV9CQU5LUyhBRERSX1NVUkZfOF9CQU5LKSk7 Cj4gKwkJbWFjcm90aWxlWzE0XSA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEp IHwKPiArCQkJCUJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCQlN QUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzEpIHwKPiArCQkJCU5VTV9C QU5LUyhBRERSX1NVUkZfNF9CQU5LKSk7Cj4gKwo+ICsJCWZvciAocmVnX29mZnNldCA9IDA7IHJl Z19vZmZzZXQgPCBudW1fdGlsZV9tb2RlX3N0YXRlczsgcmVnX29mZnNldCsrKQo+ICsJCQlXUkVH MzIoR0JfVElMRV9NT0RFMCArIChyZWdfb2Zmc2V0ICogNCksIHRpbGVbcmVnX29mZnNldF0pOwo+ ICsJCWZvciAocmVnX29mZnNldCA9IDA7IHJlZ19vZmZzZXQgPCBudW1fc2Vjb25kYXJ5X3RpbGVf bW9kZV9zdGF0ZXM7IHJlZ19vZmZzZXQrKykKPiArCQkJV1JFRzMyKEdCX01BQ1JPVElMRV9NT0RF MCArIChyZWdfb2Zmc2V0ICogNCksIG1hY3JvdGlsZVtyZWdfb2Zmc2V0XSk7Cj4gKwkJYnJlYWs7 Cj4gKwo+ICsJY2FzZSAyOgo+ICsJCXRpbGVbMF0gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxF RF9USElOMSkgfAo+ICsJCQkgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9N SUNST19USUxJTkcpIHwKPiArCQkJICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1AyKSB8Cj4gKwkJ CSAgIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfNjRCKSk7Cj4gKwkJdGlsZVsxXSA9 IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgIE1JQ1JPX1RJTEVf TU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICBQSVBFX0NP TkZJRyhBRERSX1NVUkZfUDIpIHwKPiArCQkJICAgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9T UExJVF8xMjhCKSk7Cj4gKwkJdGlsZVsyXSA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RI SU4xKSB8Cj4gKwkJCSAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JP X1RJTElORykgfAo+ICsJCQkgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDIpIHwKPiArCQkJICAg VElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF8yNTZCKSk7Cj4gKwkJdGlsZVszXSA9IChB UlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgIE1JQ1JPX1RJTEVfTU9E RV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICBQSVBFX0NPTkZJ RyhBRERSX1NVUkZfUDIpIHwKPiArCQkJICAgVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJ VF81MTJCKSk7Cj4gKwkJdGlsZVs0XSA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4x KSB8Cj4gKwkJCSAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJ TElORykgfAo+ICsJCQkgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDIpIHwKPiArCQkJICAgVElM RV9TUExJVChzcGxpdF9lcXVhbF90b19yb3dfc2l6ZSkpOwo+ICsJCXRpbGVbNV0gPSAoQVJSQVlf TU9ERShBUlJBWV8xRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICBQSVBFX0NPTkZJRyhBRERSX1NV UkZfUDIpIHwKPiArCQkJICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlD Uk9fVElMSU5HKSk7Cj4gKwkJdGlsZVs2XSA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF8yRF9USUxF RF9USElOMSkgfAo+ICsJCQkgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9N SUNST19USUxJTkcpIHwKPiArCQkJICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1AyKSB8Cj4gKwkJ CSAgIFRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfMjU2QikpOwo+ICsJCXRpbGVbN10g PSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiArCQkJICAgTUlDUk9f VElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgIFBJ UEVfQ09ORklHKEFERFJfU1VSRl9QMikgfAo+ICsJCQkgICBUSUxFX1NQTElUKHNwbGl0X2VxdWFs X3RvX3Jvd19zaXplKSk7Cj4gKwkJdGlsZVs4XSA9IEFSUkFZX01PREUoQVJSQVlfTElORUFSX0FM SUdORUQpIHwKPiArCQkJICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1AyKTsKPiArCQl0aWxlWzld ID0gKEFSUkFZX01PREUoQVJSQVlfMURfVElMRURfVEhJTjEpIHwKPiArCQkJICAgTUlDUk9fVElM RV9NT0RFX05FVyhBRERSX1NVUkZfRElTUExBWV9NSUNST19USUxJTkcpIHwKPiArCQkJICAgUElQ RV9DT05GSUcoQUREUl9TVVJGX1AyKSk7Cj4gKwkJdGlsZVsxMF0gPSAoQVJSQVlfTU9ERShBUlJB WV8yRF9USUxFRF9USElOMSkgfAo+ICsJCQkgICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NV UkZfRElTUExBWV9NSUNST19USUxJTkcpIHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VS Rl9QMikgfAo+ICsJCQkgICAgU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikp Owo+ICsJCXRpbGVbMTFdID0gKEFSUkFZX01PREUoQVJSQVlfUFJUX1RJTEVEX1RISU4xKSB8Cj4g KwkJCSAgICBNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJTElO RykgfAo+ICsJCQkgICAgUElQRV9DT05GSUcoQUREUl9TVVJGX1AyKSB8Cj4gKwkJCSAgICBTQU1Q TEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7Cj4gKwkJdGlsZVsxMl0gPSAoQVJS QVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEpIHwKPiArCQkJICAgIE1JQ1JPX1RJTEVf TU9ERV9ORVcoQUREUl9TVVJGX0RJU1BMQVlfTUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgICBQSVBF X0NPTkZJRyhBRERSX1NVUkZfUDIpIHwKPiArCQkJICAgIFNBTVBMRV9TUExJVChBRERSX1NVUkZf U0FNUExFX1NQTElUXzIpKTsKPiArCQl0aWxlWzEzXSA9IChBUlJBWV9NT0RFKEFSUkFZXzFEX1RJ TEVEX1RISU4xKSB8Cj4gKwkJCSAgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDIpIHwKPiArCQkJ ICAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSk7Cj4g KwkJdGlsZVsxNF0gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAo+ICsJCQkg ICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKPiAr CQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMikgfAo+ICsJCQkgICAgU0FNUExFX1NQTElU KEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+ICsJCXRpbGVbMTZdID0gKEFSUkFZX01PREUo QVJSQVlfUFJUX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgICBNSUNST19USUxFX01PREVfTkVXKEFE RFJfU1VSRl9USElOX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICAgUElQRV9DT05GSUcoQUREUl9T VVJGX1AyKSB8Cj4gKwkJCSAgICBTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8y KSk7Cj4gKwkJdGlsZVsxN10gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEp IHwKPiArCQkJICAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5fTUlDUk9fVElM SU5HKSB8Cj4gKwkJCSAgICBQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDIpIHwKPiArCQkJICAgIFNB TVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKPiArCQl0aWxlWzI3XSA9IChB UlJBWV9NT0RFKEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgICBNSUNST19USUxFX01P REVfTkVXKEFERFJfU1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICAgUElQRV9D T05GSUcoQUREUl9TVVJGX1AyKSk7Cj4gKwkJdGlsZVsyOF0gPSAoQVJSQVlfTU9ERShBUlJBWV9Q UlRfMkRfVElMRURfVEhJTjEpIHwKPiArCQkJICAgIE1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9T VVJGX1JPVEFURURfTUlDUk9fVElMSU5HKSB8Cj4gKwkJCSAgICBQSVBFX0NPTkZJRyhBRERSX1NV UkZfUDIpIHwKPiArCQkJICAgIFNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIp KTsKPiArCQl0aWxlWzI5XSA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF9USUxFRF9USElOMSkgfAo+ ICsJCQkgICAgTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfUk9UQVRFRF9NSUNST19USUxJ TkcpIHwKPiArCQkJICAgIFBJUEVfQ09ORklHKEFERFJfU1VSRl9QMikgfAo+ICsJCQkgICAgU0FN UExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOwo+ICsJCXRpbGVbMzBdID0gKEFS UkFZX01PREUoQVJSQVlfUFJUXzJEX1RJTEVEX1RISU4xKSB8Cj4gKwkJCSAgICBNSUNST19USUxF X01PREVfTkVXKEFERFJfU1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORykgfAo+ICsJCQkgICAgUElQ RV9DT05GSUcoQUREUl9TVVJGX1AyKSB8Cj4gKwkJCSAgICBTQU1QTEVfU1BMSVQoQUREUl9TVVJG X1NBTVBMRV9TUExJVF8yKSk7Cj4gKwo+ICsJCW1hY3JvdGlsZVswXSA9IChCQU5LX1dJRFRIKEFE RFJfU1VSRl9CQU5LX1dJRFRIXzIpIHwKPiArCQkJCUJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5L X0hFSUdIVF80KSB8Cj4gKwkJCQlNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQ RUNUXzQpIHwKPiArCQkJCU5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+ICsJCW1hY3Jv dGlsZVsxXSA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzIpIHwKPiArCQkJCUJB TktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8yKSB8Cj4gKwkJCQlNQUNST19USUxFX0FT UEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzQpIHwKPiArCQkJCU5VTV9CQU5LUyhBRERSX1NV UkZfMTZfQkFOSykpOwo+ICsJCW1hY3JvdGlsZVsyXSA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9C QU5LX1dJRFRIXzEpIHwKPiArCQkJCUJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8y KSB8Cj4gKwkJCQlNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzQpIHwK PiArCQkJCU5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+ICsJCW1hY3JvdGlsZVszXSA9 IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiArCQkJCUJBTktfSEVJR0hU KEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCQlNQUNST19USUxFX0FTUEVDVChBRERS X1NVUkZfTUFDUk9fQVNQRUNUXzQpIHwKPiArCQkJCU5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFO SykpOwo+ICsJCW1hY3JvdGlsZVs0XSA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRI XzEpIHwKPiArCQkJCUJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJ CQlNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzQpIHwKPiArCQkJCU5V TV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+ICsJCW1hY3JvdGlsZVs1XSA9IChCQU5LX1dJ RFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiArCQkJCUJBTktfSEVJR0hUKEFERFJfU1VS Rl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCQlNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFD Uk9fQVNQRUNUXzQpIHwKPiArCQkJCU5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+ICsJ CW1hY3JvdGlsZVs2XSA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiAr CQkJCUJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCQlNQUNST19U SUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzIpIHwKPiArCQkJCU5VTV9CQU5LUyhB RERSX1NVUkZfOF9CQU5LKSk7Cj4gKwkJbWFjcm90aWxlWzhdID0gKEJBTktfV0lEVEgoQUREUl9T VVJGX0JBTktfV0lEVEhfNCkgfAo+ICsJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJ R0hUXzgpIHwKPiArCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1Rf NCkgfAo+ICsJCQkJTlVNX0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4gKwkJbWFjcm90aWxl WzldID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfNCkgfAo+ICsJCQkJQkFOS19I RUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzQpIHwKPiArCQkJCU1BQ1JPX1RJTEVfQVNQRUNU KEFERFJfU1VSRl9NQUNST19BU1BFQ1RfNCkgfAo+ICsJCQkJTlVNX0JBTktTKEFERFJfU1VSRl8x Nl9CQU5LKSk7Cj4gKwkJbWFjcm90aWxlWzEwXSA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5L X1dJRFRIXzIpIHwKPiArCQkJCUJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF80KSB8 Cj4gKwkJCQlNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzQpIHwKPiAr CQkJCU5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+ICsJCW1hY3JvdGlsZVsxMV0gPSAo QkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8yKSB8Cj4gKwkJCQlCQU5LX0hFSUdIVChB RERSX1NVUkZfQkFOS19IRUlHSFRfMikgfAo+ICsJCQkJTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9T VVJGX01BQ1JPX0FTUEVDVF80KSB8Cj4gKwkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzE2X0JBTksp KTsKPiArCQltYWNyb3RpbGVbMTJdID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhf MSkgfAo+ICsJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzIpIHwKPiArCQkJ CU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfNCkgfAo+ICsJCQkJTlVN X0JBTktTKEFERFJfU1VSRl8xNl9CQU5LKSk7Cj4gKwkJbWFjcm90aWxlWzEzXSA9IChCQU5LX1dJ RFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKPiArCQkJCUJBTktfSEVJR0hUKEFERFJfU1VS Rl9CQU5LX0hFSUdIVF8xKSB8Cj4gKwkJCQlNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFD Uk9fQVNQRUNUXzQpIHwKPiArCQkJCU5VTV9CQU5LUyhBRERSX1NVUkZfMTZfQkFOSykpOwo+ICsJ CW1hY3JvdGlsZVsxNF0gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8Cj4g KwkJCQlCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAo+ICsJCQkJTUFDUk9f VElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yKSB8Cj4gKwkJCQlOVU1fQkFOS1Mo QUREUl9TVVJGXzhfQkFOSykpOwo+ICsKPiArCQlmb3IgKHJlZ19vZmZzZXQgPSAwOyByZWdfb2Zm c2V0IDwgbnVtX3RpbGVfbW9kZV9zdGF0ZXM7IHJlZ19vZmZzZXQrKykKPiArCQkJV1JFRzMyKEdC X1RJTEVfTU9ERTAgKyAocmVnX29mZnNldCAqIDQpLCB0aWxlW3JlZ19vZmZzZXRdKTsKPiArCQlm b3IgKHJlZ19vZmZzZXQgPSAwOyByZWdfb2Zmc2V0IDwgbnVtX3NlY29uZGFyeV90aWxlX21vZGVf c3RhdGVzOyByZWdfb2Zmc2V0KyspCj4gKwkJCVdSRUczMihHQl9NQUNST1RJTEVfTU9ERTAgKyAo cmVnX29mZnNldCAqIDQpLCBtYWNyb3RpbGVbcmVnX29mZnNldF0pOwo+ICsJCWJyZWFrOwo+ICsK PiArCWRlZmF1bHQ6Cj4gICAJCURSTV9FUlJPUigidW5rbm93biBudW0gcGlwZSBjb25maWc6IDB4 JXhcbiIsIG51bV9waXBlX2NvbmZpZ3MpOwo+ICsJfQo+ICAgfQo+ICAgCj4gICAvKioKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932534AbcCKO7Y (ORCPT ); Fri, 11 Mar 2016 09:59:24 -0500 Received: from mail-bl2on0086.outbound.protection.outlook.com ([65.55.169.86]:5536 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932119AbcCKO7P (ORCPT ); Fri, 11 Mar 2016 09:59:15 -0500 X-Greylist: delayed 921 seconds by postgrey-1.27 at vger.kernel.org; Fri, 11 Mar 2016 09:59:14 EST Authentication-Results: kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=none action=none header.from=amd.com; Subject: Re: [PATCH v2 1/2] drm/radeon: refactor CIK tiling table initialization To: Josh Poimboeuf , Alexander Deucher References: <20160309174752.GF21308@treble.redhat.com> <69296ff946936ecc40e52ed3e56959417d48d68b.1457705773.git.jpoimboe@redhat.com> CC: , , , Ingo Molnar From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <56E2D994.8090005@amd.com> Date: Fri, 11 Mar 2016 15:43:32 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <69296ff946936ecc40e52ed3e56959417d48d68b.1457705773.git.jpoimboe@redhat.com> Content-Type: text/plain; charset="iso-8859-15"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [2a02:908:1254:a521:c4d4:7ace:ff3d:7017] X-ClientProxiedBy: DB4PR07CA042.eurprd07.prod.outlook.com (10.242.229.52) To CY1PR12MB0135.namprd12.prod.outlook.com (25.161.173.17) X-MS-Office365-Filtering-Correlation-Id: 6f4cb26d-2f5a-4558-2515-08d349bb8cf4 X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0135;2:mBZOf4c//hDkQ9nuWzPgISXhkuEDWWGG9Z3DWa8qYUvcTQDvuGQZ0fC7swq4zO1LC4yIVEUQ9nZL+ZFm3xVv8iPtc2hBNYr0tvg/wzVgkZRjA6+jY1ZkIsjXs6JXpV8FsX+wed+U+9mxSvdIQZ1DKF25z2D64okyuaJBvOQcumKrrNi8FSbcfERz3U5069YH;3:yK7X33JsEViDCaTkKqchVBRPDVxj5JI30SOwnpKV/qWFdB2vJybAgv7PAF7MlnfNOZOLzunAXg1U9dPYjtv9Pl3n0Huwi0T1o1lB7Kh8Q5vzkapkvabYeYleBzj6sbH0;25:PdDVO7QuvU2u7p4brvW0+zMNlTN+YhJdKMYaAkns846KgoZqmSA3aQv7MK6+rFgPj2Ne/aHIH3PUy9kcxtcN9JPgZI8Dubn091NyxSe3g7Ok6DPkpKtV0pzSsLviNXE/ZFUneML+Vljpg05LCgVL+3MJFOA5siljb737N3U7TsQe2aYkatu2lbvzs+UVkcNuUgWUxzUiohn/92WuTY264IbKBTuW1CSaeN/+vyeW0OW8z20z7jpqxlJ9bKX6dXJFX1AX++rVMBvpJMXRSIq8oGgSJCtuVThjgWBzfX9IwimPlqfDM527k48yiBILVv8KAKPRdK4CSONyohfN2HvWcQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR12MB0135; X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0135;20:V55KSxTELM5RLPAIFnQGvw8i6okDtMmv/0saZ1fY5mjfyDZDUOuZ1Hkj5HvLmbqVy9L6Ju+5av3JPZpJ3R/j7tKqAy+GeH+zKy2NlpQ1pYbuFdBkITBip+v9F9Gqm80R1GvIwiYA4LQIeMGcMUiv2HC3w32vyFODoNswabNSrjPKLxhROvkcs9FW54WYf+9rInB0ZOPxR/Px6mf/asLj/CpQe3fXIEYQPFWcEZBNJnOsM7Hu1/BaAVGJmJAwH8zqBbA7EWTRP/+FSzUUwhx+YDiKvZ0qVfPPcTxiq7h8wDECVF60N6MHBPzVXvrAs0wo5/SSEuY27CJ+bmfnIugGnDRYWLyWd3JzQKFVkO9stqTTwgEEeV6DLsxg+dGgLmaM8YJJebYL+GqHYnSReMQNS73uy/jLQZxhFGLR2nnWN4nstYfn9kzuHnW4zAMQzU1sZJgUyyOTBkx5XCT6lbjHbmzq1UL2USHb0kd7JCVSLTlBwmI2aghzA5tl3LUdqoac;4:fskgMTaCIAUS0mASOOSdefLKXvQmMHhVboef0PtLpdzDiqbDmpT4RgO8y0rw7z2rK9YVkNZWiQui2+ZLOWUNcaxL3zD/D3+s3jG2iwZTguJ9CLEKexGIL7I40tkax0cBNgObByT3xVYywz3xxB2fSkxElWsPGUoriYZhQnTGgzG3fMalu3P4k5I4SBG242+SVFcrCKwVu+CVDzKTn4ZbhGblxETLZSBdbg1yaEn3T+/HsP+fqJEzvkSoetwr2qa0rRQssLCE9jU2q1yuPX8APAv8IB1TBDHwpSQOczjd+K9+keU0wGlcT7dA5Rxrfk+akhzij4kgELIJ/QjAgnk1LcN7MGWJEU/whe8YTjw2iknswAeppqLY+aVbmCEPEAS4 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:CY1PR12MB0135;BCL:0;PCL:0;RULEID:;SRVR:CY1PR12MB0135; X-Forefront-PRVS: 087894CD3C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(80316001)(64126003)(19580395003)(1096002)(5004730100002)(23756003)(50466002)(92566002)(83506001)(81166005)(86362001)(19580405001)(586003)(6116002)(189998001)(2906002)(42186005)(4326007)(5008740100001)(36756003)(47776003)(54356999)(76176999)(4001350100001)(33656002)(2870700001)(65806001)(65816999)(2950100001)(50986999)(77096005)(5001770100001)(579004)(559001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR12MB0135;H:[IPv6:2a02:908:1254:a521:c4d4:7ace:ff3d:7017];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?iso-8859-15?Q?1;CY1PR12MB0135;23:S+VNDCpClSpNMyWrYLZlych8OTd3qJK+G3IfnC?= =?iso-8859-15?Q?pFIt3Rbm9M1KwC1sYlgzeihf81pOQknGqtZRoT+BqRIHVaTjNjk67DhHr?= =?iso-8859-15?Q?4j5NC1t7OD3bZv7rB6CcuN4Pt+twu0AYoCf0YWagT1mDsSY6j4nvNuJiZ?= =?iso-8859-15?Q?T5anO5HrZj5B1PokmuKXyaHISCG2LoA1ATzf1Fs/lb6K9wLaEgeiTZteL?= =?iso-8859-15?Q?lC0G5jqWB15TfRwqwWmMDjUbtEnojyvpDdiwHAdKpoARe2B1kaeDDazf+?= =?iso-8859-15?Q?3rxAn6yJjXrbMgMNhrkChkgWVlcW+MLZD0LOfDw8unhE14qo5U5QzK13a?= =?iso-8859-15?Q?6iLTtL9fio6eXCyXV5x1qlAWycTw/G1ZptBi/mQbPIYQ425qN3DKVy2bT?= =?iso-8859-15?Q?s6MACiV8Ssb0cKZVwVMJVu4NKJOs0vau2JcAd4DWRAJydiGZGlpc0Soq8?= =?iso-8859-15?Q?i4SwzV0qluC/lBEYqxo6EsTLbqkerJdDIxEeSusZh5mispWZeUk6Fu7C9?= =?iso-8859-15?Q?lxDoE19rCYXWPsjiTQJERSX3XTO5WtpsdrR6reOQWbyLDgGmYB9j+myDS?= =?iso-8859-15?Q?sFGk/kRXESiKfuRBv5XpTpcKkjYjsAJwALCv5D8JOSIliF7oDF+t/53Dk?= =?iso-8859-15?Q?Qh00f/WEK1tHeuSmET604Qf+rY2sOMFv/CKWqECPTTna1rEBqAmLfk3AK?= =?iso-8859-15?Q?qvwLB8CSEOU8ocI643GuHP/MD43Jb3ynCxSL9BhpPbFFS3fy1Gzg6fiVj?= =?iso-8859-15?Q?vAWPrzZugKeyRSPDu0LGbw6Q/FL7juWDqjBFRiQdKWphzcfB5JIeRRoSb?= =?iso-8859-15?Q?rXYOKB0+sysp78rkoLHki0a0NkpRM/kTM3s79KaDH0R1Xo6oUDE2tWAB0?= =?iso-8859-15?Q?rm0lVBmAECAcnReHX6G02AxsGpcR7v8Xdud5LftJlu1tdH06p2ptFnIpP?= =?iso-8859-15?Q?5Cu4pN6YQ3350i9ojAglIJrzLXn38qxPxSQmNd8WGWmOnviR/cx7Mi2am?= =?iso-8859-15?Q?c+yBWN3S7dfc5Djr8UOk65f3H+QlJHZqa9aLCfOJ2moB6Kd7cA8R0=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0135;5:9ahdHUQpzHCMNKjepTKmVuKZHWdAqW3ufaIVJ/27IjnVA4w+X3FHSBnI53a8ARXj7PPZQ6wtMHNNho2j3PYcsjqZPQ8KArnkEiEFscRBxUTcmSmE3fZGc0R06KA5RnCvvwvqmS28DvNRHfOtqvn91Q==;24:dcH/yo08862QuOM1l+IbbZeQPrYQquXk+j3rO7NThXNAoNICgKjjaVww26aZcOU6tVNqpINvlGAPZFbP34uQ4MyvX7sqg/KfPANMimZ7N6o=;20:hlSHPfY/U6i5uftN97YAethszxZbYnL6HlO3lzIIc+jTl7ysWAB6dJlFRiC+ffsMK8w2Yiwr24aNBcydtsGjvBi+vcl6zsRVlix8N4j9Z2jt8AFBUYauZQMmoiRRXWRNJ4aXEl8zKDzA0tg0u/y/3I0CfvY6ttxe7psBC+l29aFae53sei1iJdUmzYZnpd+jKMqxYTQOHtA3T6JcAW1yIDEiLW8ZmiJ673FdR9ELiV4mfiOCbcS2yBCFWuBAa5/p X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Mar 2016 14:43:44.9706 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB0135 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Am 11.03.2016 um 15:18 schrieb Josh Poimboeuf: > Simplify the control flow of cik_tiling_mode_table_init() similar to how > it was done in gfx_v7_0.c and gfx_v8_0.c. > > Signed-off-by: Josh Poimboeuf I'm not so deep into the tilling config stuff, but briefly skimming over it it clearly looks good to me. Patch is Acked-by: Christian König Thanks for the help, Christian. > --- > drivers/gpu/drm/radeon/cik.c | 1691 +++++++++++++++++------------------------- > 1 file changed, 666 insertions(+), 1025 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c > index 0600140..1a92ce7 100644 > --- a/drivers/gpu/drm/radeon/cik.c > +++ b/drivers/gpu/drm/radeon/cik.c > @@ -2343,9 +2343,13 @@ out: > */ > static void cik_tiling_mode_table_init(struct radeon_device *rdev) > { > - const u32 num_tile_mode_states = 32; > - const u32 num_secondary_tile_mode_states = 16; > - u32 reg_offset, gb_tile_moden, split_equal_to_row_size; > + u32 *tile = rdev->config.cik.tile_mode_array; > + u32 *macrotile = rdev->config.cik.macrotile_mode_array; > + const u32 num_tile_mode_states = > + ARRAY_SIZE(rdev->config.cik.tile_mode_array); > + const u32 num_secondary_tile_mode_states = > + ARRAY_SIZE(rdev->config.cik.macrotile_mode_array); > + u32 reg_offset, split_equal_to_row_size; > u32 num_pipe_configs; > u32 num_rbs = rdev->config.cik.max_backends_per_se * > rdev->config.cik.max_shader_engines; > @@ -2367,1032 +2371,669 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) > if (num_pipe_configs > 8) > num_pipe_configs = 16; > > - if (num_pipe_configs == 16) { > - for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) { > - switch (reg_offset) { > - case 0: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B)); > - break; > - case 1: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B)); > - break; > - case 2: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > - break; > - case 3: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B)); > - break; > - case 4: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - TILE_SPLIT(split_equal_to_row_size)); > - break; > - case 5: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); > - break; > - case 6: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > - break; > - case 7: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - TILE_SPLIT(split_equal_to_row_size)); > - break; > - case 8: > - gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16)); > - break; > - case 9: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); > - break; > - case 10: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 11: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 12: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 13: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); > - break; > - case 14: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 16: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 17: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 27: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); > - break; > - case 28: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 29: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 30: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - default: > - gb_tile_moden = 0; > - break; > - } > - rdev->config.cik.tile_mode_array[reg_offset] = gb_tile_moden; > - WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden); > - } > - for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) { > - switch (reg_offset) { > - case 0: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 1: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 2: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 3: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 4: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_8_BANK)); > - break; > - case 5: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_4_BANK)); > - break; > - case 6: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_2_BANK)); > - break; > - case 8: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 9: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 10: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 11: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_8_BANK)); > - break; > - case 12: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_4_BANK)); > - break; > - case 13: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_2_BANK)); > - break; > - case 14: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_2_BANK)); > - break; > - default: > - gb_tile_moden = 0; > - break; > - } > - rdev->config.cik.macrotile_mode_array[reg_offset] = gb_tile_moden; > - WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden); > - } > - } else if (num_pipe_configs == 8) { > - for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) { > - switch (reg_offset) { > - case 0: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B)); > - break; > - case 1: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B)); > - break; > - case 2: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > - break; > - case 3: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B)); > - break; > - case 4: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - TILE_SPLIT(split_equal_to_row_size)); > - break; > - case 5: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); > - break; > - case 6: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > - break; > - case 7: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - TILE_SPLIT(split_equal_to_row_size)); > - break; > - case 8: > - gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16)); > - break; > - case 9: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); > - break; > - case 10: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 11: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 12: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 13: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); > - break; > - case 14: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 16: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 17: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 27: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); > - break; > - case 28: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 29: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 30: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - default: > - gb_tile_moden = 0; > - break; > - } > - rdev->config.cik.tile_mode_array[reg_offset] = gb_tile_moden; > - WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden); > - } > - for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) { > - switch (reg_offset) { > - case 0: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 1: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 2: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 3: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 4: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_8_BANK)); > - break; > - case 5: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_4_BANK)); > - break; > - case 6: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_2_BANK)); > - break; > - case 8: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 9: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 10: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 11: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 12: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_8_BANK)); > - break; > - case 13: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_4_BANK)); > - break; > - case 14: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_2_BANK)); > - break; > - default: > - gb_tile_moden = 0; > - break; > - } > - rdev->config.cik.macrotile_mode_array[reg_offset] = gb_tile_moden; > - WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden); > - } > - } else if (num_pipe_configs == 4) { > + for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) > + tile[reg_offset] = 0; > + for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) > + macrotile[reg_offset] = 0; > + > + switch(num_pipe_configs) { > + case 16: > + tile[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B)); > + tile[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B)); > + tile[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > + tile[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B)); > + tile[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + TILE_SPLIT(split_equal_to_row_size)); > + tile[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); > + tile[6] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > + tile[7] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + TILE_SPLIT(split_equal_to_row_size)); > + tile[8] = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16)); > + tile[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); > + tile[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[12] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); > + tile[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[17] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); > + tile[28] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[30] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + > + macrotile[0] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[1] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[2] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[3] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[4] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_8_BANK)); > + macrotile[5] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_4_BANK)); > + macrotile[6] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_2_BANK)); > + macrotile[8] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[9] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[10] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[11] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_8_BANK)); > + macrotile[12] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_4_BANK)); > + macrotile[13] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_2_BANK)); > + macrotile[14] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_2_BANK)); > + > + for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) > + WREG32(GB_TILE_MODE0 + (reg_offset * 4), tile[reg_offset]); > + for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) > + WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), macrotile[reg_offset]); > + break; > + > + case 8: > + tile[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B)); > + tile[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B)); > + tile[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > + tile[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B)); > + tile[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + TILE_SPLIT(split_equal_to_row_size)); > + tile[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); > + tile[6] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > + tile[7] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + TILE_SPLIT(split_equal_to_row_size)); > + tile[8] = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16)); > + tile[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); > + tile[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[12] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); > + tile[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[17] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); > + tile[28] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[30] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + > + macrotile[0] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[1] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[2] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[3] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[4] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_8_BANK)); > + macrotile[5] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_4_BANK)); > + macrotile[6] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_2_BANK)); > + macrotile[8] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[9] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[10] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[11] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[12] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_8_BANK)); > + macrotile[13] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_4_BANK)); > + macrotile[14] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_2_BANK)); > + > + for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) > + WREG32(GB_TILE_MODE0 + (reg_offset * 4), tile[reg_offset]); > + for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) > + WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), macrotile[reg_offset]); > + break; > + > + case 4: > if (num_rbs == 4) { > - for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) { > - switch (reg_offset) { > - case 0: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B)); > - break; > - case 1: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B)); > - break; > - case 2: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > - break; > - case 3: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B)); > - break; > - case 4: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - TILE_SPLIT(split_equal_to_row_size)); > - break; > - case 5: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); > - break; > - case 6: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > - break; > - case 7: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - TILE_SPLIT(split_equal_to_row_size)); > - break; > - case 8: > - gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16)); > - break; > - case 9: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); > - break; > - case 10: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 11: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 12: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 13: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); > - break; > - case 14: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 16: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 17: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 27: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); > - break; > - case 28: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 29: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 30: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_16x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - default: > - gb_tile_moden = 0; > - break; > - } > - rdev->config.cik.tile_mode_array[reg_offset] = gb_tile_moden; > - WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden); > - } > + tile[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B)); > + tile[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B)); > + tile[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > + tile[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B)); > + tile[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + TILE_SPLIT(split_equal_to_row_size)); > + tile[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); > + tile[6] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > + tile[7] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + TILE_SPLIT(split_equal_to_row_size)); > + tile[8] = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16)); > + tile[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); > + tile[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[12] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); > + tile[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[17] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); > + tile[28] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[30] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_16x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + > } else if (num_rbs < 4) { > - for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) { > - switch (reg_offset) { > - case 0: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B)); > - break; > - case 1: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B)); > - break; > - case 2: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > - break; > - case 3: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B)); > - break; > - case 4: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - TILE_SPLIT(split_equal_to_row_size)); > - break; > - case 5: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); > - break; > - case 6: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > - break; > - case 7: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - TILE_SPLIT(split_equal_to_row_size)); > - break; > - case 8: > - gb_tile_moden = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16)); > - break; > - case 9: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); > - break; > - case 10: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 11: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 12: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 13: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); > - break; > - case 14: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 16: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 17: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 27: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); > - break; > - case 28: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 29: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 30: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P4_8x16) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - default: > - gb_tile_moden = 0; > - break; > - } > - rdev->config.cik.tile_mode_array[reg_offset] = gb_tile_moden; > - WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden); > - } > - } > - for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) { > - switch (reg_offset) { > - case 0: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 1: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 2: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 3: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 4: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 5: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_8_BANK)); > - break; > - case 6: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_4_BANK)); > - break; > - case 8: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 9: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 10: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 11: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 12: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 13: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_8_BANK)); > - break; > - case 14: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > - NUM_BANKS(ADDR_SURF_4_BANK)); > - break; > - default: > - gb_tile_moden = 0; > - break; > - } > - rdev->config.cik.macrotile_mode_array[reg_offset] = gb_tile_moden; > - WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden); > - } > - } else if (num_pipe_configs == 2) { > - for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) { > - switch (reg_offset) { > - case 0: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B)); > - break; > - case 1: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B)); > - break; > - case 2: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > - break; > - case 3: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B)); > - break; > - case 4: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - TILE_SPLIT(split_equal_to_row_size)); > - break; > - case 5: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); > - break; > - case 6: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > - break; > - case 7: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - TILE_SPLIT(split_equal_to_row_size)); > - break; > - case 8: > - gb_tile_moden = ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | > - PIPE_CONFIG(ADDR_SURF_P2); > - break; > - case 9: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2)); > - break; > - case 10: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 11: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 12: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 13: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); > - break; > - case 14: > - gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 16: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 17: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 27: > - gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2)); > - break; > - case 28: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 29: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - case 30: > - gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > - MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > - PIPE_CONFIG(ADDR_SURF_P2) | > - SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > - break; > - default: > - gb_tile_moden = 0; > - break; > - } > - rdev->config.cik.tile_mode_array[reg_offset] = gb_tile_moden; > - WREG32(GB_TILE_MODE0 + (reg_offset * 4), gb_tile_moden); > - } > - for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) { > - switch (reg_offset) { > - case 0: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 1: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 2: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 3: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 4: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 5: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 6: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_8_BANK)); > - break; > - case 8: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 9: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 10: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 11: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 12: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 13: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > - NUM_BANKS(ADDR_SURF_16_BANK)); > - break; > - case 14: > - gb_tile_moden = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > - BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > - MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > - NUM_BANKS(ADDR_SURF_8_BANK)); > - break; > - default: > - gb_tile_moden = 0; > - break; > - } > - rdev->config.cik.macrotile_mode_array[reg_offset] = gb_tile_moden; > - WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden); > + tile[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B)); > + tile[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B)); > + tile[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > + tile[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B)); > + tile[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + TILE_SPLIT(split_equal_to_row_size)); > + tile[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); > + tile[6] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > + tile[7] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + TILE_SPLIT(split_equal_to_row_size)); > + tile[8] = (ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16)); > + tile[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); > + tile[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[12] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); > + tile[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[17] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); > + tile[28] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[30] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P4_8x16) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > } > - } else > + > + macrotile[0] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[1] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[2] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[3] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[4] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[5] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_8_BANK)); > + macrotile[6] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_4_BANK)); > + macrotile[8] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[9] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[10] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[11] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[12] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[13] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_8_BANK)); > + macrotile[14] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_1) | > + NUM_BANKS(ADDR_SURF_4_BANK)); > + > + for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) > + WREG32(GB_TILE_MODE0 + (reg_offset * 4), tile[reg_offset]); > + for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) > + WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), macrotile[reg_offset]); > + break; > + > + case 2: > + tile[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B)); > + tile[1] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B)); > + tile[2] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > + tile[3] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_512B)); > + tile[4] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + TILE_SPLIT(split_equal_to_row_size)); > + tile[5] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); > + tile[6] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + TILE_SPLIT(ADDR_SURF_TILE_SPLIT_256B)); > + tile[7] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + TILE_SPLIT(split_equal_to_row_size)); > + tile[8] = ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | > + PIPE_CONFIG(ADDR_SURF_P2); > + tile[9] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2)); > + tile[10] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[11] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[12] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[13] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); > + tile[14] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[16] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[17] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[27] = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2)); > + tile[28] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[29] = (ARRAY_MODE(ARRAY_PRT_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + tile[30] = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | > + MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | > + PIPE_CONFIG(ADDR_SURF_P2) | > + SAMPLE_SPLIT(ADDR_SURF_SAMPLE_SPLIT_2)); > + > + macrotile[0] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[1] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[2] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[3] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[4] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[5] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[6] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_8_BANK)); > + macrotile[8] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_8) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[9] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_4) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[10] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_4) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[11] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_2) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[12] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_2) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[13] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_4) | > + NUM_BANKS(ADDR_SURF_16_BANK)); > + macrotile[14] = (BANK_WIDTH(ADDR_SURF_BANK_WIDTH_1) | > + BANK_HEIGHT(ADDR_SURF_BANK_HEIGHT_1) | > + MACRO_TILE_ASPECT(ADDR_SURF_MACRO_ASPECT_2) | > + NUM_BANKS(ADDR_SURF_8_BANK)); > + > + for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) > + WREG32(GB_TILE_MODE0 + (reg_offset * 4), tile[reg_offset]); > + for (reg_offset = 0; reg_offset < num_secondary_tile_mode_states; reg_offset++) > + WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), macrotile[reg_offset]); > + break; > + > + default: > DRM_ERROR("unknown num pipe config: 0x%x\n", num_pipe_configs); > + } > } > > /**