X-Authentication-Warning: acp3bf.physik.rwth-aachen.de: broeker owned process doing -bs Date: Thu, 26 Apr 2001 14:30:45 +0200 (MET DST) From: Hans-Bernhard Broeker X-Sender: broeker AT acp3bf To: djgpp workers list Subject: sbrk() storing the size of memory blocks Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-494318816-847437528-988288245=:592" Reply-To: djgpp-workers AT delorie DOT com This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime AT docserver DOT cac DOT washington DOT edu for more info. ---494318816-847437528-988288245=:592 Content-Type: TEXT/PLAIN; charset=US-ASCII Hello, everyone. After all this discussion about how sbrk() makes life for the core dumping code unnecessarily hard by not storing the size of the memory blocks it got from DPMI, I decided to put on my hacker hat and do something about it. So, here is the set of patches needed to do this. Sorry about not respecting recommended patch style --- this is more of a discussion basis, not a patch that should be applied to the CVS tree as-is. With these changes in use, I got a working and apparently correct core dump while, in the same DOS box, the original code would crash (with progress==12, for a change. I.e. it crashed while dumping the first memory block, at address 0x0000). [Attached, you'll find another patch that adds lots of comments to crt0.S. I wrote those as I dug my way through all this assembly, I could see what's happening. May be useful for others who want to work on this, later...] The first hunk shows how this change can be put to use, in the core-dumping dpmiexcp.c: --- nimrod.c Wed Apr 11 00:48:06 2001 +++ dpmiexcp.c Thu Apr 26 04:05:12 2001 @@ -248,6 +248,13 @@ if (mem_block_list[j].address - mem_block_list[i].address < mem_block_list[i].size) mem_block_list[i].size = mem_block_list[j].address - mem_block_list[i].address; +#ifndef DONT_STORE_BLOCKSIZES + /* Get the base addresses, and size */ + for (i = 0; i < num_mem_blocks; i++) + { + mem_block_list[i].size = __djgpp_memory_handle_list[i].size; + } +#else /* Now try the DPMI call; if it works, we can override the previous * data; however, I have yet to find a DPMI server that supports it */ @@ -258,7 +265,7 @@ if (__dpmi_get_memory_block_size_and_base (&info) != -1) if (info.size) mem_block_list[i].size = info.size; } - +#endif /* DONT_STORE_BLOCKSIZES */ return num_mem_blocks; } Nice and crisp. Next, the extension to the __djgpp_sbrk_handle struct itself: --- crt0.h~ Mon Jul 12 16:59:04 1999 +++ crt0.h Thu Apr 26 03:15:30 2001 @@ -172,6 +172,9 @@ extern int _crt0_startup_flags; typedef struct { long handle; unsigned address; +#ifndef DONT_STORE_BLOCKSIZES + unsigned size; +#endif } __djgpp_sbrk_handle; extern __djgpp_sbrk_handle __djgpp_memory_handle_list[256]; A side remark: Debugging is a bit hard in this area, since gdb doesn't know what the type __djgpp_memory_handle_list is. Probably because the actual variable is defined in an assembly module, without any type information. Couldn't we move the definition into some C module, and let the asm just reference it? Anyway, here's the core modification. I used some more preprocessor magic than the original code to make this a bit easier to handle. Also note that I spotted what feels like a potential bug, in the code that clears the handle list. It would stop as soon as it finds any block with handle *or* address equal to zero. OTOH, it does not make sure it doesn't run pase the end of the array of 256 handles. See the FIXME comment. --- mycrt0.S.commented Thu Apr 26 03:12:26 2001 +++ mycrt0.S Thu Apr 26 04:11:56 2001 @@ -45,7 +45,11 @@ #ifdef MULTIBLOCK -#define MEMORY_HANDLE_SIZE 8 /* Size of a mem. handle, in bytes */ +#ifndef DONT_STORE_BLOCKSIZES /* HBB 20010425: new variant */ +# define MEMORY_HANDLE_SIZE 12 /* Size of a mem. handle, in bytes */ +#else +# define MEMORY_HANDLE_SIZE 8 +#endif #define NUMBER_OF_MEMHANDLES 256 /* number of handles we allow */ ___djgpp_memory_handle_pointer: @@ -242,7 +246,16 @@ dos_alloc_ok: 9: cmpl %eax, (%edi) /* handle unused (==0)? */ je 10f /* break out loop */ mov %eax, (%edi) /* otherwise: make it zero! */ +#if 0 addl $4, %edi /* FIXME: checks stored *base* ??? */ +#else + mov %eax, 4(%edi) /* zero out base address */ +#ifndef DONT_STORE_BLOCKSIZES + mov %eax, 8(%edi) /* zero out size */ +#endif + addl $MEMORY_HANDLE_SIZE, %edi /* move on to next handle */ + /* FIXME: doesn't make sure we don't overrun the array */ +#endif /* 0/1 */ jmp 9b /* loop on */ 10: movw %cs, %bx /* about code segment */ @@ -258,6 +271,9 @@ dos_alloc_ok: .byte 0x64 /* fs: */ movl STUBINFO_INITIAL_SIZE, %eax movl %eax, __what_size_dpmi_thinks_we_are +#ifndef DONT_SAVE_BLOCKSIZES + movl %eax, ___djgpp_memory_handle_list+8 +#endif /* Maybe lock the initial block, expects BX:CX */ movl %ecx,%ebx /* move CX:DX to BX:CX */ @@ -522,6 +538,9 @@ brk_common: movl %edi, ___djgpp_memory_handle_list /* store new handle */ movw %si, ___djgpp_memory_handle_list+2 +#ifndef DONT_SAVE_BLOCKSIZES + movl %edx, ___djgpp_memory_handle_list+8 /* store new size */ +#endif movl %ecx, ___djgpp_base_address /* store new base address */ movw %bx, ___djgpp_base_address+2 @@ -580,6 +599,9 @@ brk_common: movl %edi, (%ebx) /* store block infos to free handle */ movw %si, 2(%ebx) /* handle is SI:DI */ movl %ecx, 4(%ebx) /* block address (was BX:CX) */ +#ifndef DONT_STORE_BLOCKSIZES + movl %edx, 8(%ebx) /* store block size, too */ +#endif addl $MEMORY_HANDLE_SIZE, %ebx /* point to next free handle */ cmpl $(___djgpp_memory_handle_list+ \ (NUMBER_OF_MEMHANDLES-1)*MEMORY_HANDLE_SIZE) \ -- Hans-Bernhard Broeker (broeker AT physik DOT rwth-aachen DOT de) Even if all the snow were burnt, ashes would remain. ---494318816-847437528-988288245=:592 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="crt0.S.commenting.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Comments for crt0.S Content-Disposition: attachment; filename="crt0.S.commenting.diff" LS0tIGNydDAuUwlUaHUgTWFyICAxIDE0OjU1OjEyIDIwMDENCisrKyBteWNy dDAuUy5jb21tZW50ZWQJVGh1IEFwciAyNiAwMzoxMjoyNiAyMDAxDQpAQCAt MzcsMTQgKzM3LDI2IEBADQogCS5sY29tbQlzZWxfYnVmLCA4DQogCS8qIF9f X2RqZ3BwX2RzX2FsaWFzIGRlZmluZWQgaW4gZ28zMi9leGNlcHRuLlMgKi8N CiANCisvKiBUaGlzICNpZmRlZiBlbmNsb3NlcyBhbGwgdGhlIGNvZGUgZm9y IHRoZSBtdWx0aWJsb2NrIGEuay5hLiBub24tbW92aW5nDQorICogc2Jyaygp IGFsZ29yaXRobSAqLyANCiAjZGVmaW5lIE1VTFRJQkxPQ0sgMQ0KIA0KIAku ZGF0YQ0KIA0KICNpZmRlZiBNVUxUSUJMT0NLDQorDQorI2RlZmluZSBNRU1P UllfSEFORExFX1NJWkUgOAkJLyogU2l6ZSBvZiBhIG1lbS4gaGFuZGxlLCBp biBieXRlcyAqLw0KKyNkZWZpbmUgTlVNQkVSX09GX01FTUhBTkRMRVMgMjU2 CS8qIG51bWJlciBvZiBoYW5kbGVzIHdlIGFsbG93ICovDQorDQogX19fZGpn cHBfbWVtb3J5X2hhbmRsZV9wb2ludGVyOg0KLQkubG9uZwlfX19kamdwcF9t ZW1vcnlfaGFuZGxlX2xpc3QrOAkJLyogTmV4dCBmcmVlLCBmaXJzdCBmb3Ig c3R1YiAqLw0KLQkuY29tbQlfX19kamdwcF9tZW1vcnlfaGFuZGxlX2xpc3Qs IDIwNDgJLyogRW5vdWdoIGZvciAyNTYgaGFuZGxlcyAqLw0KKy8qIFBvaW50 IHRvIG5leHQgZnJlZSBlbnRyeSBpbiB0aGUgbGlzdCBvZiBoYW5kbGVzIChm aXJzdCBpcyB1c2VkIGJ5IHN0dWIpICovDQorCS5sb25nCV9fX2RqZ3BwX21l bW9yeV9oYW5kbGVfbGlzdCtNRU1PUllfSEFORExFX1NJWkUNCisNCisvKiBU aGUgbGlzdCBvZiBtZW1vcnkgaGFuZGxlcyBpdHNlbGYuICovDQorCS5jb21t CV9fX2RqZ3BwX21lbW9yeV9oYW5kbGVfbGlzdCwgXA0KKwkJKE5VTUJFUl9P Rl9NRU1IQU5ETEVTKk1FTU9SWV9IQU5ETEVfU0laRSkNCisNCisJDQogI2Vu ZGlmDQogDQogc2JyazE2X2ZpcnN0X2J5dGU6DQpAQCAtMTEzLDMxICsxMjUs MzMgQEAgc3RhcnQ6DQogI2VuZGlmDQogDQogLyogRW5hYmxlIE5VTEwgcG9p bnRlciBwcm90ZWN0aW9uIGlmIERQTUkgc3VwcG9ydHMgaXQgKi8NCi0JdGVz dGIJJDB4MSwgX19jcnQwX3N0YXJ0dXBfZmxhZ3MrMQkJLyogaW5jbHVkZS9j cnQwLmggKi8NCi0Jam56CTFmDQotCW1vdmwJJHN0YXJ0LCAlZWF4DQorCXRl c3RiCSQweDEsIF9fY3J0MF9zdGFydHVwX2ZsYWdzKzEgLyogX0NSVDBfRkxB R19OVUxMT0sgKi8NCisJam56CTFmCQkJLyogZGlzYWJsZWQgYnkgZmxhZz8g Ki8NCisJbW92bAkkc3RhcnQsICVlYXgJLyogc3RhcnQgc3ltYm9sIHdpdGhp biBOVUxMIHBhZ2U/ICovDQogCWNtcGwJJDB4MTAwMCwgJWVheA0KLQlqbAkx Zg0KLQltb3Z3CSQweDUwNywgJWF4DQorCWpsCTFmCQkvKiAtLT4gZG9uJ3Qg cHJvdGVjdCAqLw0KKwltb3Z3CSQweDUwNywgJWF4CQkvKiBEUE1JIDEuMCBz ZXRfcGFnZV9hdHRyaWJ1dGVzICovDQogCS5ieXRlIDB4NjQgLyogZnM6ICov DQogCW1vdmwJU1RVQklORk9fTUVNT1JZX0hBTkRMRSwgJWVzaQ0KIAl4b3Js CSVlYngsICVlYngJCQkvKiBPZmZzZXQgMCBpbiBtZW0gYmxvY2sgKi8NCiAJ bW92bAkkMSwgJWVjeAkJCS8qIFNldCBvbmUgcGFnZSAqLw0KIAltb3ZsCSR6 ZXJvLCAlZWR4DQogCWludAkkMHgzMQkJCS8qIE1ha2UgbnVsbCBwYWdlIHVu Y29tbWl0dGVkICovDQorDQogMToNCi0vKiBDcmVhdGUgYW4gYWxpYXMgZm9y IERTIHRvIGJlIHVzZWQgYnkgcmVhbC1tb2RlIGNhbGxiYWNrcyAoZXhjZXB0 aW9uIGhhbmRsZXIgbWVzc2VzIHdpdGggRFMgaXRzZWxmKSAqLw0KKwkvKiBD cmVhdGUgYW4gYWxpYXMgZm9yIERTIHRvIGJlIHVzZWQgYnkgcmVhbC1tb2Rl IGNhbGxiYWNrcw0KKyAgICAgICAgICogKGV4Y2VwdGlvbiBoYW5kbGVyIG1l c3NlcyB3aXRoIERTIGl0c2VsZikgKi8NCiANCiAJbW92dwklZHMsICVieA0K LQltb3Z3CSQweDAwMGEsICVheA0KKwltb3Z3CSQweDAwMGEsICVheAkJLyog RFBNSSBjcmVhdGVfYWxpYXNfc2VsZWN0b3IgKi8NCiAJaW50CSQweDMxDQog CWpuYwlkc19hbGlhc19vaw0KLQltb3ZiCSQweDRjLCAlYWgNCisJbW92Ygkk MHg0YywgJWFoCQkvKiBET1MgX2V4aXQgKi8NCiAJaW50CSQweDIxDQogZHNf YWxpYXNfb2s6DQogCW1vdncJJWF4LCBfX19kamdwcF9kc19hbGlhcw0KIAlt b3ZsCSVlYXgsICVlYngNCi0JbW92dwkkMHgwMDA5LCAlYXgNCisJbW92dwkk MHgwMDA5LCAlYXgJCS8qIERQTUkgc2V0X2Rlc2NyaXB0b3JfYWNjZXNzX3Jp Z2h0cyAqLw0KIAltb3Z3CSVjcywgJWN4CS8qIGdldCBDUEwgZnJvbSAlY3Mg Ki8NCiAJYW5kbAkkMywgJWVjeA0KIAlzaGxsCSQ1LCAlZWN4CQkvKiBtb3Zl IGl0IGludG8gcGxhY2UgKi8NCkBAIC0xNDUsODkgKzE1OSwxMDAgQEAgZHNf YWxpYXNfb2s6DQogCWludAkkMHgzMQkJLyogc2V0IGFjY2VzcyByaWdodHMg Zm9yIGFsaWFzICovDQogDQogLyogTWF5YmUgc2V0IG91ciBEUyBsaW1pdCB0 byA0R2IgaW4gc2l6ZSBpZiBmbGFnIHNldCAqLw0KLQl0ZXN0YgkkMHg4MCwg X19jcnQwX3N0YXJ0dXBfZmxhZ3MJCS8qIGluY2x1ZGUvY3J0MC5oICovDQot CWp6CTJmDQorCXRlc3RiCSQweDgwLCBfX2NydDBfc3RhcnR1cF9mbGFncyAv KiBfQ1JUMF9GTEFHX05FQVJQVFIgKi8NCisJanoJMmYJCQkvKiBqdW1wIG92 ZXIgaXQgaWYgdW53YW50ZWQgKi8NCiAJbW92dwkkMHhmZmZmLCAlY3gNCi0J bW92bAklZWN4LCAlZWR4DQotCW1vdncJJDB4MDAwOCwgJWF4CQkJCS8qIHJl c2V0IGFsaWFzIGxpbWl0IHRvIC0xICovDQorCW1vdmwJJWVjeCwgJWVkeAkJ LyogcmVzZXQgYWxpYXMgbGltaXQgdG8gLTEgKi8NCisJbW92dwkkMHgwMDA4 LCAlYXgJCS8qIERQTUkgc2V0X3NlZ21lbnRfbGltaXQgKi8NCiAJaW50CSQw eDMxDQotCW1vdncJJWNzLCAlYngNCi0JbW92dwkkMHgwMDA4LCAlYXgJCQkJ LyogcmVzZXQgQ1MgbGltaXQgdG8gLTEgKi8NCisJbW92dwklY3MsICVieAkJ LyogcmVzZXQgQ1MgbGltaXQgdG8gLTEgKi8NCisJbW92dwkkMHgwMDA4LCAl YXgJCS8qIERQTUkgc2V0X3NlZ21lbnRfbGltaXQgKi8NCiAJaW50CSQweDMx DQotCW1vdncJJWRzLCAlYngNCi0JbW92dwkkMHgwMDA4LCAlYXgJCQkJLyog cmVzZXQgRFMgbGltaXQgdG8gLTEgKi8NCisJbW92dwklZHMsICVieAkJLyog cmVzZXQgRFMgbGltaXQgdG8gLTEgKi8NCisJbW92dwkkMHgwMDA4LCAlYXgJ CS8qIERQTUkgc2V0X3NlZ21lbnRfbGltaXQgKi8NCiAJaW50CSQweDMxDQog CWxzbAklZWJ4LCAlZWJ4CQkJCS8qIFNob3VsZCBiZSAtMSAqLw0KLQlpbmNs CSVlYngNCi0JanoJMmYNCi0JYW5kYgkkMHg3ZiwgX19jcnQwX3N0YXJ0dXBf ZmxhZ3MJCS8qIGNsZWFyIGl0IGlmIGZhaWx1cmUgKi8NCisJaW5jbAklZWJ4 CQkJLyogLTEgKyAxID09IDAgKi8NCisJanoJMmYJCQkvKiBqdW1wIGlmIGFs bCBPSyAqLw0KKwlhbmRiCSQweDdmLCBfX2NydDBfc3RhcnR1cF9mbGFncyAv KiBfQ1JUMF9GTEFHX05FQVJQVFIgb2ZmISovDQorDQogMjoNCiAjaWZkZWYg TVVMVElCTE9DSw0KLQl0ZXN0YgkkMHg4LCBfX2NydDBfc3RhcnR1cF9mbGFn cysxCQkvKiBpbmNsdWRlL2NydDAuaCAqLw0KLQlqegk4Zg0KKwl0ZXN0Ygkk MHg4LCBfX2NydDBfc3RhcnR1cF9mbGFncysxIC8qIF9DUlQwX0ZMQUdfVU5J WF9TQlJLICovDQorCWp6CThmCQkJLyogZG9uJ3QgZG8gVU5JWHkgc2JyayBp bml0ICovDQogI2VuZGlmDQotLyogQWxsb2NhdGUgc29tZSBET1MgbWVtb3J5 IGFuZCBjb3B5IG91ciBzYnJrIGhlbHBlciBpbnRvIGl0LiAqLw0KLQltb3Zs CSRzYnJrMTZfZmlyc3RfYnl0ZSwgJWVzaQ0KKw0KKy8qIC0tLS0tLS0tLSBT ZXQgdXAgZm9yIHRoZSBVTklYeSBzYnJrIGFsZ29yaXRobSAtLS0tLS0tLSAq Lw0KKy8qIEFsbG9jYXRlIHNvbWUgRE9TIG1lbW9yeSBhbmQgY29weSBvdXIg c2JyayBoZWxwZXIgMTZiaXQgY29kZSBmcmFnbWVudCANCisgKiBpbnRvIGl0 LiAqLw0KKwltb3ZsCSRzYnJrMTZfZmlyc3RfYnl0ZSwgJWVzaQkvKiB0YWtl IGFkZHJlc3Mgb2YgaXQgKi8NCiAJbW92endsCTgoJWVzaSksICVlYngNCi0J c2hybAkkNCwgJWVieA0KLQltb3Z3CSQweDAxMDAsICVheA0KKwlzaHJsCSQ0 LCAlZWJ4CQkvKiBjb252ZXJ0IGludG8gcGFyYWdyYXBocyAqLw0KKwltb3Z3 CSQweDAxMDAsICVheAkJLyogRFBNSSBhbGxvY2F0ZV9kb3NfbWVtb3J5ICov DQogCWludAkkMHgzMQ0KLQlqbmMJZG9zX2FsbG9jX29rDQotCW1vdmIJJDB4 NGMsICVhaA0KKwlqbmMJZG9zX2FsbG9jX29rCQkvKiBpZiBjYWxsIGZhaWxl ZDogKi8NCisJbW92YgkkMHg0YywgJWFoCQkvKiBET1M6CV9leGl0ICovDQog CWludAkkMHgyMQ0KIGRvc19hbGxvY19vazoNCisJLyogcGF0Y2ggY29kZSBi ZWZvcmUgY29weWluZyBpdCAqLw0KIAltb3Z3CSVjcywgMiglZXNpKQkJCS8q IHN0b3JlIEFQSSBpbmZvcm1hdGlvbiAqLw0KIAltb3Z3CSVkcywgNCglZXNp KQ0KIAltb3Z3CSVkeCwgNiglZXNpKQkJCS8qIHNlbGVjdG9yIGZvciBhbGxv Y2F0ZWQgYmxvY2sgKi8NCiANCiAJbW92endsCSglZXNpKSwgJWVheAkJCS8q IGNhbGN1bGF0ZSBBUEkgYWRkcmVzcyAqLw0KLQltb3ZsCSVlYXgsIHNicmsx Nl9hcGlfb2ZzDQorCW1vdmwJJWVheCwgc2JyazE2X2FwaV9vZnMJLyogYW5k IG1lbW9yaXplIGl0ICovDQogDQotCXB1c2hsCSVlcwkJCQkvKiBtb3ZlIHRo ZSBkYXRhICovDQotCW1vdncJJWR4LCAlZXMNCi0JbW92bAkkKHNicmsxNl9s YXN0X2J5dGUgLSBzYnJrMTZfZmlyc3RfYnl0ZSksICVlY3gNCi0Jc2hybAkk MiwlZWN4DQotCXhvcmwJJWVkaSwgJWVkaQ0KLQljbGQNCi0JcmVwDQorCXB1 c2hsCSVlcwkJCS8qIG1vdmUgdGhlIGNvZGUgZnJhZ21lbnQ6ICovDQorCW1v dncJJWR4LCAlZXMJCS8qIHRhcmdldCBzZWdtZW50ICovDQorCW1vdmwJJChz YnJrMTZfbGFzdF9ieXRlIC0gc2JyazE2X2ZpcnN0X2J5dGUpLCAlZWN4CS8q IHNpemUgKi8NCisJc2hybAkkMiwlZWN4CQkJLyogdHJhbnNsYXRlIGludG8g d29yZCBjb3VudCAqLw0KKwl4b3JsCSVlZGksICVlZGkJCS8qIHRhcmdldCBv ZmZzZXQgPSAwICovDQorCWNsZAkJCQkvKiBmb3J3YXJkIGNvcHkgKi8NCisJ cmVwCQkJCS8qIG1vb292ZSBpdCAqLw0KIAltb3ZzbA0KLQlwb3BsCSVlcw0K Kwlwb3BsCSVlcwkJCS8qIHJlc3RvcmUgZXMgKi8NCiANCisJLyogVHVybiBE T1MgbWVtb3J5IGludG8gYSAiY29kZTE2IiBzZWdtZW50ICovDQogCW1vdmwJ JWVkeCwgJWVieAkJCS8qIGRvcyBtZW1vcnkgc2VsZWN0b3IgKi8NCi0JbW92 dwkkMHgwMDBiLCAlYXgJCQkvKiBnZXQgZGVzY3JpcHRvciAqLw0KLQltb3Zs CSRzZWxfYnVmLCAlZWRpDQorCW1vdncJJDB4MDAwYiwgJWF4CQkvKiBEUE1J IGdldF9kZXNjcmlwdG9yICovDQorCW1vdmwJJHNlbF9idWYsICVlZGkJCS8q IHN0b3JhZ2UgZm9yIHRoaXMgc2VsZWN0b3IgKi8NCiAJaW50CSQweDMxDQog DQogCWFuZGIJJDB4YmYsIHNlbF9idWYrNgkJLyogbWFrZSAxNi1iaXQgKi8N CiAJYW5kYgkkMHhmMCwgc2VsX2J1Zis1CQkvKiByZW1vdmUgb2xkIHR5cGUg Ki8NCiAJb3JiCSQweDBhLCBzZWxfYnVmKzUJCS8qIHNldCBuZXcgdHlwZSB0 byBjb2RlL3JlYWQgKi8NCiANCi0JeG9ybAklZWF4LCAlZWF4CQkJLyogYWxs b2NhdGUgbmV3IHNlbGVjdG9yICovDQotCW1vdncJJDB4MDAwMSwgJWN4DQor CXhvcmwJJWVheCwgJWVheAkJLyogRFBNSSBhbGxvY2F0ZV9sZHRfZGVzY3Jp cHRvcnMgKi8NCisJbW92dwkkMHgwMDAxLCAlY3gJCS8qIG9uZSBzZWxlY3Rv ciB3YW50ZWQgKi8NCiAJaW50CSQweDMxDQotCW1vdncJJWF4LCBzYnJrMTZf YXBpX3NlZw0KKwltb3Z3CSVheCwgc2JyazE2X2FwaV9zZWcJLyogbWVtb3Jp emUgaXQgZm9yIGxhdGVyICovDQogDQotCW1vdmwJJWVheCwgJWVieA0KLQlt b3Z3CSQweDAwMGMsICVheAkJCS8qIHNldCBkZXNjcmlwdG9yICovDQorCW1v dmwJJWVheCwgJWVieAkJLyogYW5kIHNldCB1cCBjb2RlMTYgc2VnbWVudCAq Lw0KKwltb3Z3CSQweDAwMGMsICVheAkJLyogRFBNSSBzZXRfZGVzY3JpcHRv ciAqLw0KIAltb3ZsCSRzZWxfYnVmLCAlZWRpDQogCWludAkkMHgzMQ0KKw0K ICNpZmRlZiBNVUxUSUJMT0NLDQotODoJbW92bAkkX19fZGpncHBfbWVtb3J5 X2hhbmRsZV9saXN0KzgsICVlZGkNCisJLyogSW5pdGlhbGl6ZSBwb2ludGVy IHRvIG5leHQgZnJlZSBtZW1vcnkgYmxvY2sgaGFuZGxlLiBQb2ludHMNCisJ ICogYXQgbWVtb3J5X2hhbmRsZV9saXN0WzFdICovDQorODoJbW92bAkkX19f ZGpncHBfbWVtb3J5X2hhbmRsZV9saXN0K01FTU9SWV9IQU5ETEVfU0laRSwg JWVkaQ0KIAltb3ZsCSVlZGksIF9fX2RqZ3BwX21lbW9yeV9oYW5kbGVfcG9p bnRlcg0KKwkvKiBDbGVhbiB1cCBtZW1vcnlfaGFuZGxlX2xpc3RbXSAqLw0K IAl4b3JsCSVlYXgsICVlYXgNCi05OgljbXBsCSVlYXgsICglZWRpKQ0KLQlq ZQkxMGYNCi0JbW92CSVlYXgsICglZWRpKQ0KLQlhZGRsCSQ0LCAlZWRpDQot CWptcAk5Yg0KLTEwOgltb3Z3CSVjcywgJWJ4DQotCW1vdncJJDB4MDAwNiwl YXgNCis5OgljbXBsCSVlYXgsICglZWRpKQkJLyogaGFuZGxlIHVudXNlZCAo PT0wKT8gKi8NCisJamUJMTBmCQkJLyogYnJlYWsgb3V0IGxvb3AgKi8NCisJ bW92CSVlYXgsICglZWRpKQkJLyogb3RoZXJ3aXNlOiBtYWtlIGl0IHplcm8h ICovDQorCWFkZGwJJDQsICVlZGkJCS8qIEZJWE1FOiBjaGVja3Mgc3RvcmVk ICpiYXNlKiA/Pz8gKi8NCisJam1wCTliCQkJLyogbG9vcCBvbiAqLw0KKw0K KzEwOgltb3Z3CSVjcywgJWJ4CQkvKiBhYm91dCBjb2RlIHNlZ21lbnQgKi8N CisJbW92dwkkMHgwMDA2LCVheAkJLyogRFBNSSBnZXRfc2VnbWVudF9iYXNl X2FkZHJlc3MgKi8NCiAJaW50CSQweDMxDQotCW1vdmwJJWVkeCxfX19kamdw cF9iYXNlX2FkZHJlc3MNCisJbW92bAklZWR4LF9fX2RqZ3BwX2Jhc2VfYWRk cmVzcyAvKiBtZW1vcml6ZSBpdCBmb3IgbGF0ZXIgKi8NCiAJbW92dwklY3gs X19fZGpncHBfYmFzZV9hZGRyZXNzKzINCiAjZW5kaWYJLyogTVVMVElCTE9D SyAqLw0KIA0KLS8qIEluaXRpYWxpemUgdGhlIGJyay9zYnJrIHZhcmlhYmxl cyAqLw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gSW5pdGlhbGl6ZSB0aGUg YnJrL3NicmsgdmFyaWFibGVzICovDQogDQogLyoJbW92bAkkZW5kLCBfX3do YXRfc2l6ZV9hcHBfdGhpbmtzX2l0X2lzICovDQogCS5ieXRlIDB4NjQgLyog ZnM6ICovDQpAQCAtMjM1LDM4ICsyNjAsNDEgQEAgZG9zX2FsbG9jX29rOg0K IAltb3ZsCSVlYXgsIF9fd2hhdF9zaXplX2RwbWlfdGhpbmtzX3dlX2FyZQ0K IA0KIC8qIE1heWJlIGxvY2sgdGhlIGluaXRpYWwgYmxvY2ssIGV4cGVjdHMg Qlg6Q1ggKi8NCi0JbW92bAklZWN4LCVlYngNCisJbW92bAklZWN4LCVlYngJ CS8qIG1vdmUgQ1g6RFggdG8gQlg6Q1ggKi8NCiAJbW92bAklZWR4LCVlY3gN CiAJYWRkdwkkNDA5NiwlY3gJCQkvKiBTa2lwIG51bGwgcGFnZSAqLw0KIAlh ZGNsCSQwLCVlYngNCi0Jc3VibAkkNDA5NiwlZWF4DQorCXN1YmwJJDQwOTYs JWVheAkJLyogcmVkdWNlIHNpemUgYWNjb3JkaW5nbHkgKi8NCiAJcHVzaGwJ JWVheA0KIAljYWxsCWxvY2tfbWVtb3J5DQogDQorCS8qIFN0b3JlIHRoZSBz dHViJ3MgaGFuZGxlIGFzIHRoZSBtZW1vcnlfaGFuZGxlX2xpc3RbMF0gKi8N CiAJLmJ5dGUgMHg2NCAvKiBmczogKi8NCiAJbW92bAlTVFVCSU5GT19NRU1P UllfSEFORExFLCAlZWF4DQogCW1vdmwJJWVheCwgX19fZGpncHBfbWVtb3J5 X2hhbmRsZV9saXN0DQogDQotCS5ieXRlIDB4NjQgLyogZnM6ICovCQkJLyog Y29weSBzdHViaW5mbyBpbnRvIGxvY2FsIG1lbW9yeSAqLw0KKwkvKiBjb3B5 IHN0dWJpbmZvIGludG8gbG9jYWwgbWVtb3J5ICovDQorCS5ieXRlIDB4NjQg LyogZnM6ICovDQogCW1vdmwJU1RVQklORk9fU0laRSwgJWVheA0KIAlwdXNo bAklZWF4DQotCWNhbGwJX19fc2Jyaw0KLQltb3ZsCSVlYXgsIF9fc3R1Ymlu Zm8NCi0JbW92bAklZWF4LCAlZWRpDQorCWNhbGwJX19fc2JyawkJCS8qIGFs bG9jYXRlIHNwYWNlIGZvciBpdCAqLw0KKwltb3ZsCSVlYXgsIF9fc3R1Ymlu Zm8JLyogbWVtb3JpemUgaXRzIHBvc2l0aW9uICovDQorCW1vdmwJJWVheCwg JWVkaQkJLyogbWVtY29weSgpICovDQogCS5ieXRlIDB4NjQgLyogZnM6ICov DQotCW1vdmwJU1RVQklORk9fU0laRSwgJWVjeA0KLQlzaHJsCSQyLCAlZWN4 DQotCXhvcmwJJWVzaSwgJWVzaQkJCS8qIFplcm8gKi8NCi0JcHVzaGwJJWRz DQorCW1vdmwJU1RVQklORk9fU0laRSwgJWVjeAkvKiBnZXQgc2l6ZSAqLw0K KwlzaHJsCSQyLCAlZWN4CQkvKiBhZGp1c3Qgc2l6ZSB0byAzMmJpdCB3b3Jk cyAqLw0KKwl4b3JsCSVlc2ksICVlc2kJCS8qIHNvdXJjZSBvZmZzZXQ6IDAg Ki8NCisJcHVzaGwJJWRzCQkJLyogc2F2ZSBkcyAqLw0KIAlwdXNobAklZnMN Ci0JcG9wbAklZHMNCisJcG9wbAklZHMJCQkvKiBzb3VyY2Ugc2VnbWVudDog c3R1YiBzZWdtZW50ICovDQogCWNsZA0KIAlyZXANCi0JbW92c2wNCi0JcG9w bAklZHMNCisJbW92c2wJCQkJLyogbW9vdmUgaXQgKi8NCisJcG9wbAklZHMJ CQkvKiByZXN0b3JlIGRzICovDQogDQotI2lmIDAJCQkJCQkvKiBkb25lIGlu IGNydDEuYyAqLw0KLQkuYnl0ZSAweDY0IC8qIGZzOiAqLwkJCS8qIHNldCB1 cCBfZ28zMl9pbmZvX2Jsb2NrIHN0cnVjdHVyZSAqLw0KKyNpZiAwCQkJCQkv KiBub3cgZG9uZSBpbiBjcnQxLmMgKi8NCisJLyogc2V0IHVwIF9nbzMyX2lu Zm9fYmxvY2sgc3RydWN0dXJlOiAqLw0KKwkuYnl0ZSAweDY0IC8qIGZzOiAq LwkJCQ0KIAltb3Z6d2wJU1RVQklORk9fTUlOS0VFUCwgJWVheA0KIAltb3Zs CSVlYXgsIF9fZ28zMl9pbmZvX2Jsb2NrKzE2CS8qIC5zaXplX29mX3RyYW5z ZmVyX2J1ZmZlciAqLw0KIAkuYnl0ZSAweDY0IC8qIGZzOiAqLw0KQEAgLTI5 NiwxNyArMzI0LDE3IEBAIG5vX3NlbGVjdG9yOg0KIHVzZV9zdHViaW5mb19z dGFja19zaXplOg0KIAlwdXNobAklZWF4DQogCWNhbGwJX19fc2JyawkJCS8q IGFsbG9jYXRlIHRoZSBtZW1vcnkgKi8NCi0JY21wbAkkLTEsICVlYXgNCisJ Y21wbAkkLTEsICVlYXgJCS8qIGJhaWwgb3V0IGlmIHNicmsoKSBmYWlsZWQg Ki8NCiAJamUJbm9fbWVtb3J5DQogCW1vdmwJJWVheCwgX19fZGpncHBfc3Rh Y2tfbGltaXQJLyogQm90dG9tIG9mIHN0YWNrICovDQotCWFkZGwJX19zdGts ZW4sICVlYXgNCi0JbW92dwklZHMsICVkeAkJLyogc2V0IHN0YWNrICovDQor CWFkZGwJX19zdGtsZW4sICVlYXgJCS8qIHBsdXMgbGVuZ3RoIC0tPiB0b3Ag b2Ygc3RhY2sgKi8NCisJbW92dwklZHMsICVkeAkJLyogc2V0IHN0YWNrIHNl Z21lbnQgKi8NCiAJbW92dwklZHgsICVzcw0KLQlhbmRiCSQweGY4LCAlYWwJ CS8qIGFsaWduIHRvIDgtYnl0ZSBib3VuZGFyeSAqLw0KLQltb3ZsCSVlYXgs ICVlc3ANCisJYW5kYgkkMHhmOCwgJWFsCQkvKiBhbGlnbiBTUCB0byA4LWJ5 dGUgYm91bmRhcnkgKi8NCisJbW92bAklZWF4LCAlZXNwCQkvKiAuLi4gYW5k IHNldCBpdCAqLw0KIA0KLQl4b3JsCSVlYnAsICVlYnANCi0gICAgICAgIHB1 c2hsICAgJF9mcmFtZV9zdHJ1Y3QNCisJeG9ybAklZWJwLCAlZWJwCQkvKiBz dGFydCB3aXRoIGZyYW1lIHBvaW50ZXIgPSAwICovDQorICAgICAgICBwdXNo bCAgICRfZnJhbWVfc3RydWN0CQkvKiBzZXQgdXAgYSB0b3Atb2Ytc3RhY2sg Y2FsbCBmcmFtZSAqLw0KICAgICAgICAgcHVzaGwgICAkX0NSVDBfRUhfRlJB TUVfQkVHSU5fDQogICAgICAgICBjYWxsICAgIF9fX3JlZ2lzdGVyX2ZyYW1l X2luZm8NCiAgICAgICAgIGFkZGwgICAgJDgsICVlc3ANCkBAIC0zMTcsOCAr MzQ1LDkgQEAgbm9fbWVtb3J5Og0KIAltb3ZiCSQweGZmLCAlYWwNCiAJam1w CWV4aXQNCiANCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiANCisv KiBtYWNybyBlcXVpdmFsZW50IG9mIF9fZHBtaV9mcmVlX2xkdF9kZXNjcmlw dG9yKCkgKi8NCiAjZGVmaW5lIEZSRUVTRUwoeCkgbW92dyB4LCAlYng7IG1v dncgJDB4MDAwMSwgJWF4OyBpbnQgJDB4MzENCiANCiAJLmdsb2JhbAlfX19l eGl0DQpAQCAtMzMxLDEyICszNjAsMTQgQEAgZXhpdDoNCiAJbW92dwklYXgs JWZzDQogCW1vdncJJWF4LCVncw0KIAljbGkJCQkJLyogSnVzdCBpbiBjYXNl IHRoZXkgZGlkbid0IHVuaG9vayBpbnRzICovDQorCQ0KIAlGUkVFU0VMKF9f Z28zMl9pbmZvX2Jsb2NrKzI2KQkvKiBzZWxlY3RvciBmb3IgbGluZWFyIG1l bW9yeSAqLw0KIAlGUkVFU0VMKF9fX2RqZ3BwX2RzX2FsaWFzKQkvKiBEUyBh bGlhcyBmb3Igcm1jYiBleGNlcHRpb25zICovDQogI2lmZGVmIE1VTFRJQkxP Q0sNCi0JdGVzdGIJJDB4OCwgX19jcnQwX3N0YXJ0dXBfZmxhZ3MrMQkJLyog aW5jbHVkZS9jcnQwLmggKi8NCi0JanoJOWYNCisJdGVzdGIJJDB4OCwgX19j cnQwX3N0YXJ0dXBfZmxhZ3MrMSAvKiBfQ1JUMF9GTEFHX1VOSVhfU0JSSyAq Lw0KKwlqegk5ZgkJLyoganVtcCBpZiBVTklYeSBzYnJrIG5vdCBpbiB1c2Ug Ki8NCiAjZW5kaWYNCisJLyogRnJlZSBjb2RlMTYgc2VnbWVudCB1c2VkIGJ5 IHNicmsgMTZiaXQgaGVscGVyIGNvZGUgKi8NCiAJRlJFRVNFTChzYnJrMTZf YXBpX3NlZykJCS8qIHNicmsgY3MgKi8NCiAJbW92dwlzYnJrMTZfZmlyc3Rf Ynl0ZSs2LCVkeCAvKiBzZWxlY3RvciBmb3IgYWxsb2NhdGVkIERPUyBtZW0g Ki8NCiAJbW92dwkkMHgxMDEsICVheA0KQEAgLTM2MiwxNCArMzkzLDE0IEBA IGV4aXQ6DQogDQogI2lmZGVmIE1VTFRJQkxPQ0sNCiAJbW92bAlfX19kamdw cF9tZW1vcnlfaGFuZGxlX3BvaW50ZXIsICVlYngNCi0Jam1wCTdmDQotNjoJ c3VibAkkOCwgJWVieA0KLQltb3ZsCSglZWJ4KSwgJWVkaQ0KKwlqbXAJN2YJ CQkvKiBkbyB7ICovDQorNjoJc3VibAkkTUVNT1JZX0hBTkRMRV9TSVpFLCAl ZWJ4IC8qIGhhbmRsZV9wb2ludGVyIG1vdmVzIGJhY2t3YXJkcyAqLw0KKwlt b3ZsCSglZWJ4KSwgJWVkaQkJLyogc3RvcmVkIGhhbmRsZSAtLT4gU0k6REkg Ki8NCiAJbW92dwkyKCVlYngpLCAlc2kNCi0JbW92dwkkMHg1MDIsICVheA0K Kwltb3Z3CSQweDUwMiwgJWF4CQkvKiBEUE1JIGZyZWVfbWVtb3J5X2Jsb2Nr ICovDQogCWludAkkMHgzMQ0KLTc6CWNtcGwJJF9fX2RqZ3BwX21lbW9yeV9o YW5kbGVfbGlzdCs4LCAlZWJ4DQotCWpuZQk2Yg0KKzc6CWNtcGwJJF9fX2Rq Z3BwX21lbW9yeV9oYW5kbGVfbGlzdCtNRU1PUllfSEFORExFX1NJWkUsICVl YngNCisJam5lCTZiCQkJLyogfXdoaWxlKG5vdCBmaXJzdCBibG9jaykgKi8N CiAjZW5kaWYgLyogTVVMVElCTE9DSyAqLw0KIAl4b3JsCSVlYnAsICVlYnAJ CQkJLyogVjEuMTAgYnVnIGZpeCAqLw0KIAltb3ZsCV9fX2RqZ3BwX21lbW9y eV9oYW5kbGVfbGlzdCwgJWVkaQ0KQEAgLTM3NywxMSArNDA4LDEyIEBAIGV4 aXQ6DQogDQogCUZSRUVTRUwoJWRzKQ0KIAltb3Z3CSVjcywgJWJ4DQotLyog Q2FsbCBleGl0IHByb2NlZHVyZSB3aXRoIEJYPTMyLWJpdCBDUzsgU0krREk9 MzItYml0IGhhbmRsZTsgREw9ZXhpdCBzdGF0dXMgKi8NCisvKiBDYWxsIGV4 aXQgcHJvY2VkdXJlIHdpdGggQlg9MzItYml0IENTOyBTSStEST0zMi1iaXQg aGFuZGxlOyANCisgKiBETD1leGl0IHN0YXR1cyAqLw0KIAkuYnl0ZSAweDJl DQogCUxKTVAoc2JyazE2X2FwaV9vZnMpDQogDQotLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0qLw0KIA0KIC8qCS5sY29tbQlfX3doYXRfc2l6ZV9hcHBf dGhpbmtzX2l0X2lzLCA0ICovDQogLmRhdGENCkBAIC0zOTMsMTYgKzQyNSwx NiBAQCBfX3doYXRfc2l6ZV9hcHBfdGhpbmtzX2l0X2lzOg0KIA0KIGxvY2tf bWVtb3J5Og0KIAkvKiBCWDpDWCBzaG91bGQgYmUgbGluZWFyIGFkZHJlc3M7 IHNpemUgaXMgcHVzaGVkIG9uIHN0YWNrICovDQotCXRlc3RiCSQweDEwLCBf X2NydDBfc3RhcnR1cF9mbGFncysxCQkvKiBpbmNsdWRlL2NydDAuaCAqLw0K LQlqegkxM2YNCi0JcHVzaGwJJWVzaQ0KKwl0ZXN0YgkkMHgxMCwgX19jcnQw X3N0YXJ0dXBfZmxhZ3MrMSAvKiBfQ1JUMF9GTEFHX0xPQ0tfTUVNT1JZICov DQorCWp6CTEzZgkJCS8qIG5vIGxvY2tpbmcgd2FudGVkPyAtLT4gcmV0dXJu ICovDQorCXB1c2hsCSVlc2kJCQkvKiBzYXZlIHNvbWUgcmVnaXN0ZXJzICov DQogCXB1c2hsCSVlZGkNCiAJcHVzaGwJJWVheA0KLQltb3ZsCTE2KCVlc3Ap LCVlZGkNCisJbW92bAkxNiglZXNwKSwlZWRpCQkvKiBhcmc6CXNpemUgdG8g YmUgbG9ja2VkICovDQogCW1vdncJMTgoJWVzcCksJXNpDQotCW1vdncJJDB4 NjAwLCVheA0KKwltb3Z3CSQweDYwMCwlYXgJCS8qIERQTUkgbG9ja19saW5l YXJfcmVnaW9uICovDQogCWludAkkMHgzMQ0KLQlwb3BsCSVlYXgNCisJcG9w bAklZWF4CQkJLyogcmVzdG9yZSBzYXZlZCByZWdzICovDQogCXBvcGwJJWVk aQ0KIAlwb3BsCSVlc2kNCiAxMzoJcmV0CSQ0CQkJLyogUG9wIHRoZSBhcmd1 bWVudCAqLw0KQEAgLTQyMiwxNyArNDU0LDE5IEBAIF9fX3Nicms6DQogCW1v dmwJX193aGF0X3NpemVfYXBwX3RoaW5rc19pdF9pcywgJWVheA0KIAltb3Zs CTQoJWVzcCksICVlY3gJCQkvKiBJbmNyZW1lbnQgc2l6ZSAqLw0KIAlhZGRs CSVlY3gsICVlYXgNCi0Jam5jCWJya19jb21tb24NCisJam5jCWJya19jb21t b24JCS8qIHJlbWFpbnMgYmVsb3cgNEdCPyBPSywgZG8gaXQgKi8NCiAJLyog Q2FycnkgaXMgb25seSBzZXQgaWYgYSBuZWdhdGl2ZSBpbmNyZW1lbnQgb3Ig d3JhcCBoYXBwZW5zLiAgTmVnYXRpdmUNCi0JICAgaW5jcmVtZW50IGlzIHNl bWktT0ssIHdyYXAgKG9ubHkgZm9yIG11bHRpcGxlIHpvbmUgc2JyaykgaXNu J3QuICovDQorICogaW5jcmVtZW50IGlzIHNlbWktT0ssIHdyYXAgKG9ubHkg Zm9yIG11bHRpcGxlIHpvbmUgc2JyaykgaXNuJ3QuICovDQogCXRlc3QJJDB4 ODAwMDAwMDAsICVlY3gJCS8qIENsZWFycyBjYXJyeSAqLw0KLQlqbnoJYnJr X2NvbW1vbg0KLQlzdGMJCQkJCS8qIFB1dCBjYXJyeSBiYWNrICovDQotCWpt cAlicmtfY29tbW9uDQorCWpueglicmtfY29tbW9uCQkvKiBpbmNyZW1lbnQg PDA/IE9LLCBkbyBpdCAqLw0KKwlzdGMJCQkJLyogUmFpc2UgY2FycnkgdG8g c2lnbmFsIHdyYXBhcm91bmQgKi8NCisJam1wCWJya19jb21tb24JCS8qIC4u LiBhbmQgZG8gaXQgYW55d2F5ICovDQogDQogCS5nbG9ibAlfX19icmsNCiAJ LmJhbGlnbgkxNiwsNw0KIF9fX2JyazoNCisvKiBGSVhNRSBIQkIgMjAwMTA0 MjU6IHNob3VsZG4ndCB3ZSB6ZXJvIG91dCAlZWN4PyBOb24tbW92aW5nIHNi cmsgYXNzdW1lcw0KKyAqIHRoYXQgJWVjeCBob2xkcyB0aGUgc2l6ZSwgYnV0 IGNhbGxpbmcgYnJrKCkgZGlyZWN0bHkgZG9lc24ndCBzZXQgaXQhICovDQog CW1vdmwJNCglZXNwKSwgJWVheA0KIAljbGMNCiANCkBAIC00NDYsMTQgKzQ4 MCwyMSBAQCBicmtfY29tbW9uOg0KIAltb3ZsCSVlZHgsIF9fd2hhdF93ZV9y ZXR1cm5fdG9fYXBwX2FzX29sZF9zaXplDQogCW1vdmwJJWVheCwgX193aGF0 X3NpemVfYXBwX3RoaW5rc19pdF9pcw0KIA0KKy8qIEZJWE1FIEhCQiAyMDAx MDQyNToganVtcHMgZnJvbSBvdXRzaWRlIGludG8gYW4gI2lmZGVmIE1VTFRJ QkxPQ0sgY29kZQ0KKyAqIGFyZWEuLi4gKi8JDQogCWpjCTEwZgkJCQkJCS8q IFdyYXAgZm9yIG11bHRpLXpvbmUgKi8NCi0JY21wbAlfX3doYXRfc2l6ZV9k cG1pX3RoaW5rc193ZV9hcmUsICVlYXgJCS8qIGRvbid0IGJvdGhlciBzaHJp bmtpbmcgKi8NCi0JamJlCWJya19ub2NoYW5nZQ0KKwljbXBsCV9fd2hhdF9z aXplX2RwbWlfdGhpbmtzX3dlX2FyZSwgJWVheCAvKiBpcyBuZXcgc2l6ZSBz bWFsbGVyPyAqLw0KKwlqYmUJYnJrX25vY2hhbmdlCQkJLyogZG9uJ3QgYm90 aGVyIHNocmlua2luZyAqLw0KIA0KICNpZmRlZiBNVUxUSUJMT0NLDQotCXRl c3RiCSQweDgsIF9fY3J0MF9zdGFydHVwX2ZsYWdzKzEJCS8qIGluY2x1ZGUv Y3J0MC5oICovDQotCWp6CTEwZg0KKwl0ZXN0YgkkMHg4LCBfX2NydDBfc3Rh cnR1cF9mbGFncysxCS8qIF9DUlQwX0ZMQUdfVU5JWF9TQlJLICovDQorCWp6 CTEwZgkJCQkvKiBqdW1wIGlmIG5vdCBVTklYeSBzYnJrICovDQogI2VuZGlm DQorLyogLS0tLS0tLS0tLS0tLS0gVU5JWHkgc2JyayBhbGdvcml0aG0gLS0t LS0tLS0tLS0gKi8NCisJLyogUmVhbGxvY2F0ZSBibG9jayB0byBuZXcgc2l6 ZS4gSXQgbWF5IG1vdmUgdG8gYSBuZXcgYmFzZSANCisJICogYWRkcmVzcyB3 aGlsZSBkb2luZyBzbyAtLT4gaGF2ZSB0byBnbyBpbnRvIDE2Yml0IG1vZGUg Zm9yIGENCisJICogd2hpbGUsIGFuZCBvbmx5IHJldHVybiBpbnRvIHBtb2Rl IGFmdGVyIGFsbCBpcyBzZXQgdXAgDQorCSAqIGNvcnJlY3RseSwgYWdhaW4g Ki8NCiAJYWRkbAkkMHgwMDAwZmZmZiwgJWVheAkJCQkvKiByb3VuZCB1cCB0 byA2NEsgYmxvY2sgKi8NCiAJYW5kbAkkMHhmZmZmMDAwMCwgJWVheA0KIAlw dXNoCSVlYXgJCQkJCQkvKiBzaXplIC0gc2F2ZSBmb3IgbGF0ZXIgKi8NCkBA IC00NjQsMTI3ICs1MDUsMTQ0IEBAIGJya19jb21tb246DQogCW1vdmwJJWVh eCwgJWVieAkJCQkJLyogc2l6ZSBub3QgbGltaXQgKi8NCiAJc2hybAkkMTYs ICVlYngJCQkJCS8qIEJYOkNYIHNpemUgKi8NCiANCi0JbW92dwkkMHgwOTAw LCAlYXgJCQkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLw0KKwltb3Z3CSQw eDA5MDAsICVheAkJLyogRFBNSSBkaXNhYmxlX3ZpcnR1YWxfaW50ZXJydXB0 cyAqLw0KIAlpbnQJJDB4MzENCi0JcHVzaGwJJWVheA0KKwlwdXNobAklZWF4 CQkJCS8qIHNhdmUgb2xkIGludGVycnVwdCBzdGF0dXMgKi8NCiANCi0JTENB TEwoc2JyazE2X2FwaV9vZnMpDQorCUxDQUxMKHNicmsxNl9hcGlfb2ZzKQkJ CS8qIGNhbGwgdGhlIDE2Yml0IGhlbHBlciAqLw0KIA0KIAlzZXRjCSVkbAkJ CQkJCS8qIFNhdmUgY2FycnkgKi8NCiANCi0JcG9wbAklZWF4CQkJCQkvKiBy ZXN0b3JlIGludGVycnVwdHMgKi8NCisJcG9wbAklZWF4CQkJCS8qIERQTUk6 IHJlc3RvcmUgaW50ZXJydXB0cyAqLw0KIAlpbnQJJDB4MzENCiANCi0JdGVz dAklZGwsJWRsDQotCXBvcGwJJWVkeA0KLQlqbmUJYnJrX2Vycm9yDQorCXRl c3QJJWRsLCVkbAkJCQkvKiBzYnJrMTYgZmFpbGVkPyAqLw0KKwlwb3BsCSVl ZHgJCQkJLyogcG9wIHNhdmVkIG5ldyBzaXplICovDQorCWpuZQlicmtfZXJy b3IJCQkvKiBicmFuY2ggaWYgc2JyazE2IGZhaWxlZCAqLw0KIA0KIAltb3Zs CSVlZGksIF9fX2RqZ3BwX21lbW9yeV9oYW5kbGVfbGlzdAkJLyogc3RvcmUg bmV3IGhhbmRsZSAqLw0KIAltb3Z3CSVzaSwgX19fZGpncHBfbWVtb3J5X2hh bmRsZV9saXN0KzINCiAJbW92bAklZWN4LCBfX19kamdwcF9iYXNlX2FkZHJl c3MJCQkvKiBzdG9yZSBuZXcgYmFzZSBhZGRyZXNzICovDQogCW1vdncJJWJ4 LCBfX19kamdwcF9iYXNlX2FkZHJlc3MrMg0KIA0KLQltb3ZsCSVlZHgsICVl YXgNCisJLyogTG9jayBtZW1vcnkgYmV0d2VlbiBvbGQgYW5kIG5ldyBlbmQg Ki8NCisJbW92bAklZWR4LCAlZWF4CQkJLyogbmV3IHNpemUgLSBvbGQgc2l6 ZSAqLw0KIAltb3ZsCV9fd2hhdF9zaXplX2RwbWlfdGhpbmtzX3dlX2FyZSwg JWVjeA0KIAlzdWJsCSVlY3gsICVlYXgNCi0NCi0JYWRkbAlfX19kamdwcF9i YXNlX2FkZHJlc3MsICVlY3gNCisJYWRkbAlfX19kamdwcF9iYXNlX2FkZHJl c3MsICVlY3gJLyogc3RhcnQ6IG9sZF9zdGFydCtvbGRfc2l6ZSAqLw0KIAlt b3ZsCSVlY3gsICVlYngNCi0Jc2hybAkkMTYsICVlYngJCQkJCS8qIEJYOkNY IGFkZHIgKi8NCi0JcHVzaGwJJWVheAkJCQkJCS8qIFNpemUgKi8NCi0JY2Fs bAlsb2NrX21lbW9yeQ0KKwlzaHJsCSQxNiwgJWVieAkJCS8qIGhpZ2h3b3Jk IHRvIEJYICovDQorCXB1c2hsCSVlYXgJCQkJLyogc2l6ZSBvZiByZWdpb24g dG8gbG9jayAqLw0KKwljYWxsCWxvY2tfbWVtb3J5CQkJLyogbG9jayBpZiBh Y3RpdmF0ZWQgKi8NCiANCiAJZGVjbAklZWR4CQkJCQkJLyogbGltaXQgbm93 LCBub3Qgc2l6ZSAqLw0KICNpZmRlZiBNVUxUSUJMT0NLDQotCWptcAk1Zg0K KwlqbXAJNWYJCQkvKiBqdW1wIG92ZXIgbm9uLW1vdmluZyBzYnJrKCkgY29k ZSAqLw0KKw0KKy8qIC0tLS0tLS0tLSBub24tbW92aW5nIC8gTVVMVElCTE9D SyBzYnJrIGFsZ29yaXRobSAtLS0tLS0tLSAqLwkNCiAvKiBDdXJyZW50IGFs bG9jYXRpb24gbm90IGxhcmdlIGVub3VnaCwgZ2V0IGFub3RoZXIgYmxvY2sg Ki8NCi0xMDoJbW92bAklZWN4LCAlZWF4CQkJCQkvKiBBZGQgYW10ICovDQot CXB1c2hsCSVlYXgJCQkJCQkvKiBTYXZlIG9yaWcgKi8NCisxMDoJbW92bAkl ZWN4LCAlZWF4CQkvKiBUYWtlIHJlcXVlc3RlZCBjaGFuZ2UgKi8NCisJcHVz aGwJJWVheAkJCS8qIFNhdmUgaXQgKi8NCiAJYWRkbAkkMHgwMDAwZmZmZiwg JWVheAkJCQkvKiByb3VuZCB1cCB0byA2NEsgYmxvY2sgKi8NCiAJYW5kbAkk MHhmZmZmMDAwMCwgJWVheA0KIAltb3ZsCSVlYXgsICVlZHgJCQkJCS8qIFNh dmUgc2l6ZSAqLw0KIAltb3ZsCSVlYXgsICVlY3gNCi0JbW92bAklZWF4LCAl ZWJ4DQotCXNocmwJJDE2LCAlZWJ4CQkJCQkvKiBCWDpDWCBzaXplICovDQot CW1vdncJJDB4NTAxLCVheA0KKwltb3ZsCSVlYXgsICVlYngJCS8qIGhpZ2h3 b3JkIHRvIEJYICovDQorCXNocmwJJDE2LCAlZWJ4CQkJDQorCW1vdncJJDB4 NTAxLCVheAkJLyogRFBNSTogYWxsb2NhdGVfbWVtb3J5X2Jsb2NrICovDQog CWludAkkMHgzMQ0KLQlwb3BsCSVlYXgJCQkJCQkvKiBPcmlnIHNpemUgKi8N Ci0JamMJYnJrX2Vycm9yDQorCXBvcGwJJWVheAkJCS8qIHBvcCBvcmlnaW5h bCByZXF1ZXN0ZWQgc2l6ZSAqLw0KKwlqYwlicmtfZXJyb3IJCS8qIGJhaWwg b3V0IGlmIERQTUkgZmFpbGVkICovDQogDQotCXB1c2hsCSVlZHgJCQkJCQkv KiBTaXplICovDQotCWNhbGwJbG9ja19tZW1vcnkNCisJcHVzaGwJJWVkeAkJ CS8qIHJvdW5kZWQgc2l6ZSAqLw0KKwljYWxsCWxvY2tfbWVtb3J5CQkvKiBM b2NrIG5ldyByZWdpb24gKi8NCiANCi0JcHVzaHcJJWJ4DQorLyogSWYgbmV3 IGJsb2NrIGlzIG5vdCBjb25uZWN0ZWQgdG8gdXBwZXIgZW5kIG9mIGV4aXN0 aW5nIGFyZW5hLA0KKyAqIG1vdmUgdGhlIGFyZW5hJ3MgZW5kIGFjY29yZGlu Z2x5ICovDQorCXB1c2h3CSVieAkJCS8qIHB1c2ggYWRkcmVzcyBvZiBmcmVz aCBibG9jayAqLw0KIAlwdXNodwklY3gNCi0JcG9wbAklZWN4CQkJCQkJLyog TGluZWFyIGFkZHJlc3MgKi8NCisJcG9wbAklZWN4CQkJLyogcG9wIGJhY2sg YXMgb25lIGxpbmVhciBhZGRyZXNzICovDQogCXN1YmwJX19fZGpncHBfYmFz ZV9hZGRyZXNzLCAlZWN4CQkJLyogTmV3IGRwbWkgc2l6ZSAqLw0KLQljbXBs CSVlY3gsIF9fd2hhdF9zaXplX2RwbWlfdGhpbmtzX3dlX2FyZQkJLyogQmFj ayB0byBiYWNrID8gKi8NCi0JamUJNGYNCi0JbW92bAklZWN4LCBfX3doYXRf c2l6ZV9kcG1pX3RoaW5rc193ZV9hcmUNCisJY21wbAklZWN4LCBfX3doYXRf c2l6ZV9kcG1pX3RoaW5rc193ZV9hcmUJLyogY29tcGFyZSBvbGQgZW5kICov DQorCWplCTRmCQkJCS8qIEJhY2sgdG8gYmFjayA/IC0tPiBPSyAqLw0KKy8q IEhCQiAyMDAxMDQyNTogPlRISVM8IGlzIHRoZSBwbGFjZSB3aGVyZSBob2xl cyBhcmUgZHJpbGxlZCBpbnRvIGFkZHJlc3MNCisgKiBzcGFjZS4gVGhleSBh cmUgYmV0d2VlbiB0aGUgcHJldmlvdXMgYW5kIG5ldyB2YWx1ZXMgb2YgdGhl c2UgdHdvDQorICogcGFyYW1ldGVycywgZWZmZWN0aXZlbHkgKi8NCisJbW92 bAklZWN4LCBfX3doYXRfc2l6ZV9kcG1pX3RoaW5rc193ZV9hcmUJLyogbm8g LS0+IGNoYW5nZSAqLw0KIAltb3ZsCSVlY3gsIF9fd2hhdF93ZV9yZXR1cm5f dG9fYXBwX2FzX29sZF9zaXplDQorDQogNDoNCiAJbW92bAlfX3doYXRfd2Vf cmV0dXJuX3RvX2FwcF9hc19vbGRfc2l6ZSwgJWVieAkvKiBCYXNlIGZvciBu ZXcgYmxvY2sgKi8NCi0JYWRkbAklZWJ4LCAlZWF4CQkJCQkvKiBGaW5hbCBh ZGRyZXNzICovDQotCW1vdmwJJWVheCwgX193aGF0X3NpemVfYXBwX3RoaW5r c19pdF9pcw0KKwlhZGRsCSVlYngsICVlYXgJCQkJLyogYWRkIHJlcXVlc3Rl ZCAqLw0KKwltb3ZsCSVlYXgsIF9fd2hhdF9zaXplX2FwcF90aGlua3NfaXRf aXMJLyogc3RvcmUgYXMgbmV3IHNpemUgKi8NCiAvKiBOb3RlIC0gc2F2ZSBh ZGp1c3RlZCBtZW1vcnkgYmFzZSBhbmQgbWVtb3J5IGhhbmRsZSBTSTpESSBo ZXJlICovDQogCW1vdmwJX19fZGpncHBfbWVtb3J5X2hhbmRsZV9wb2ludGVy LCAlZWJ4DQotCW1vdmwJJWVkaSwgKCVlYngpDQotCW1vdncJJXNpLCAyKCVl YngpDQotCW1vdmwJJWVjeCwgNCglZWJ4KQ0KLQlhZGRsCSQ4LCAlZWJ4DQot CWNtcGwJJF9fX2RqZ3BwX21lbW9yeV9oYW5kbGVfbGlzdCsyMDQwLCAlZWJ4 CQkvKiBBdCBlbmQ/ICovDQotCWplCTExZg0KLQltb3ZsCSVlYngsIF9fX2Rq Z3BwX21lbW9yeV9oYW5kbGVfcG9pbnRlcgkJLyogT25seSBpZiBub3QgYXQg ZW5kICovDQorCW1vdmwJJWVkaSwgKCVlYngpCQkvKiBzdG9yZSBibG9jayBp bmZvcyB0byBmcmVlIGhhbmRsZSAqLw0KKwltb3Z3CSVzaSwgMiglZWJ4KQkJ CS8qIGhhbmRsZSBpcyBTSTpESSAqLw0KKwltb3ZsCSVlY3gsIDQoJWVieCkJ CQkvKiBibG9jayBhZGRyZXNzICh3YXMgQlg6Q1gpICovDQorCWFkZGwJJE1F TU9SWV9IQU5ETEVfU0laRSwgJWVieAkvKiBwb2ludCB0byBuZXh0IGZyZWUg aGFuZGxlICovDQorCWNtcGwJJChfX19kamdwcF9tZW1vcnlfaGFuZGxlX2xp c3QrIFwNCisJCShOVU1CRVJfT0ZfTUVNSEFORExFUy0xKSpNRU1PUllfSEFO RExFX1NJWkUpIFwNCisJCSwgJWVieAkJLyogQXQgZW5kIG9mIGhhbmRsZV9s aXN0W10/ICovDQorCWplCTExZgkJCS8qIE9ubHkgaWYgbm90IGF0IGVuZCAq Lw0KKwltb3ZsCSVlYngsIF9fX2RqZ3BwX21lbW9yeV9oYW5kbGVfcG9pbnRl ciAvKiB3cml0ZSBiYWNrIHBvaW50ZXIgKi8NCisNCiAxMToNCiAJYWRkbAkl ZWN4LCAlZWR4CQkJCQkvKiBGaW5hbCBhZGRyZXNzICovDQogCWRlY2wJJWVk eAkJCQkJCS8qIExpbWl0IHRvIGVuZCAqLw0KIC8qIElmIHdlIGdldCBhIGJs b2NrIGF0IGEgbG93ZXIgYWRkcmVzcyB3ZSBtdXN0IHNraXAgdGhlIGxpbWl0 IGNoYW5nZSAqLw0KLQljbXBsCV9fX2RqZ3BwX3NlbGVjdG9yX2xpbWl0LCAl ZWR4DQorCWNtcGwJX19fZGpncHBfc2VsZWN0b3JfbGltaXQsICVlZHgJLyog Y29tcGFyZSBvbGQgdG8gbmV3IGxpbWl0ICovDQogCWpiZQkxMmYNCi0jZW5k aWYNCi01Ogltb3ZsCSVlZHgsIF9fX2RqZ3BwX3NlbGVjdG9yX2xpbWl0DQor I2VuZGlmIC8qIE1VTFRJQkxPQ0sgKi8NCisNCisvKiBDaGFuZ2UgdmFyaW91 cyBzZXR0aW5ncyBhbmQgdmFyaWFibGVzIHRvIHJlZmxlY3QgbmV3IG92ZXJh bGwgc2l6ZSBvZg0KKyAqIHRoZSBwcm9ncmFtJ3MgYXJlbmEuIEV4cGVjdHMg bmV3IGxpbWl0IGluICVlZHggICovDQorNToJbW92bAklZWR4LCBfX19kamdw cF9zZWxlY3Rvcl9saW1pdAkvKiBjaGFuZ2UgdXNlciB2YXJpYWJsZSAqLw0K IAlvcncJJDB4MGZmZiwgJWR4CQkJCQkvKiBsb3cgYml0cyBzZXQgKi8NCi0J bW92dwkkMHgwMDA4LCAlYXgJCQkJCS8qIHJlc2V0IENTIGxpbWl0ICovDQot CW1vdncJJWNzLCAlYngNCi0JbW92bAklZWR4LCAlZWN4DQorCW1vdncJJDB4 MDAwOCwgJWF4CQkJLyogRFBNSSBzZXRfc2VnbWVudF9saW1pdCAqLw0KKwlt b3Z3CSVjcywgJWJ4CQkJLyogcmVzZXQgQ1MgbGltaXQgKi8NCisJbW92bAkl ZWR4LCAlZWN4CQkJLyogaGlnaHdvcmQgdG8gQ1ggKi8NCiAJc2hybAkkMTYs ICVlY3gNCiAJaW50CSQweDMxCQkJCQkJLyogQ1g6RFggaXMgbGltaXQgKi8N CiANCi0JdGVzdGIJJDB4ODAsIF9fY3J0MF9zdGFydHVwX2ZsYWdzCQkJLyog aW5jbHVkZS9jcnQwLmggKi8NCi0Jam56CTNmDQotCW1vdncJJDB4MDAwOCwg JWF4CQkJCQkvKiByZXNldCBEUyBsaW1pdCAqLw0KLQltb3Z3CSVkcywgJWJ4 DQorCXRlc3RiCSQweDgwLCBfX2NydDBfc3RhcnR1cF9mbGFncwkvKiBfQ1JU MF9GTEFHX05FQVJQVFIgKi8NCisJam56CTNmCQkJCS8qIGRvbid0IHRvdWNo IGRzIGlmIG5lYXJwdHIgKi8NCisJbW92dwkkMHgwMDA4LCAlYXgJCQkvKiBE UE1JIHNldF9zZWdtZW50X2xpbWl0ICovDQorCW1vdncJJWRzLCAlYngJCQkv KiByZXNldCBEUyBsaW1pdCAqLw0KIAlpbnQJJDB4MzENCiANCi0JbW92dwkk MHgwMDA4LCAlYXgJCQkJCS8qIHJlc2V0IERTIGFsaWFzIGxpbWl0ICovDQot CW1vdmwJX19fZGpncHBfZHNfYWxpYXMsICVlYngNCisJbW92dwkkMHgwMDA4 LCAlYXgJCQkvKiBEUE1JIHNldF9zZWdtZW50X2xpbWl0ICovDQorCW1vdmwJ X19fZGpncHBfZHNfYWxpYXMsICVlYngJCS8qIHJlc2V0IERTIGFsaWFzIGxp bWl0ICovDQogCWludAkkMHgzMQ0KIDM6DQotCW1vdncJJDB4MDAwNywgJWF4 CQkJCQkvKiByZXNldCBEUyBhbGlhcyBiYXNlICovDQotCW1vdmwJX19fZGpn cHBfZHNfYWxpYXMsICVlYngNCi0JbW92bAlfX19kamdwcF9iYXNlX2FkZHJl c3MsICVlZHgNCisJbW92dwkkMHgwMDA3LCAlYXgJCS8qIERQTUkgc2V0X3Nl Z21lbnRfYmFzZV9hZGRyZXNzICovDQorCW1vdmwJX19fZGpncHBfZHNfYWxp YXMsICVlYngJCS8qIHJlc2V0IERTIGFsaWFzIGJhc2UgKi8NCisJbW92bAlf X19kamdwcF9iYXNlX2FkZHJlc3MsICVlZHgJLyogbmV3IGJhc2UgYWRkcmVz cyAqLw0KIAltb3Z3CV9fX2RqZ3BwX2Jhc2VfYWRkcmVzcysyLCAlY3gNCiAJ aW50CSQweDMxDQogDQogCW1vdmwJX19fZGpncHBfc2VsZWN0b3JfbGltaXQs ICVlZHgNCisNCiAxMjoJaW5jbAklZWR4CQkJCQkJLyogU2l6ZSBub3QgbGlt aXQgKi8NCi0JdGVzdGIJJDB4NjAsIF9fY3J0MF9zdGFydHVwX2ZsYWdzCS8q IGluY2x1ZGUvY3J0MC5oICovDQotCWp6CW5vX2ZpbGxfc2Jya19tZW1vcnkN CisJLyogX0NSVDBfRkxBR19GSUxMX1NCUktfTUVNT1JZIHwgX0NSVDBfRkxB R19GSUxMX0RFQURCRUVGICovDQorCXRlc3RiCSQweDYwLCBfX2NydDBfc3Rh cnR1cF9mbGFncyANCisJanoJbm9fZmlsbF9zYnJrX21lbW9yeQkJLyogYnJh bmNoIGlmIG5vIGZpbGxpbmcgKi8NCiAJcHVzaGwJJWRzDQogCXBvcGwJJWVz DQogDQotCW1vdmwJX193aGF0X3NpemVfZHBtaV90aGlua3Nfd2VfYXJlLCAl ZWRpCQkvKiBzZXQgYWxsIG5ld2x5IHJlc2l6ZWQgYnl0ZXMgemVybyAqLw0K KwkvKiBzZXQgYWxsIG5ld2x5IHJlc2l6ZWQgYnl0ZXMgemVybyAqLw0KKwlt b3ZsCV9fd2hhdF9zaXplX2RwbWlfdGhpbmtzX3dlX2FyZSwgJWVkaQkJDQog CW1vdmwJJWVkeCwgJWVjeAkJCQkJLyogTGltaXQgKi8NCiAJc3VibAklZWRp LCAlZWN4CQkJLyogQWRqdXN0IGNvdW50IGZvciBiYXNlICovDQogCXhvcmwJ JWVheCwgJWVheA0KLQl0ZXN0YgkkMHg0MCwgX19jcnQwX3N0YXJ0dXBfZmxh Z3MNCi0JanoJbm9fZGVhZGJlZWYNCi0JbW92bAkkMHhkZWFkYmVlZiwgJWVh eAkJLyogc29tZXRoaW5nIHJlYWxseSBlYXN5IHRvIHNwb3QgKi8NCisJdGVz dGIJJDB4NDAsIF9fY3J0MF9zdGFydHVwX2ZsYWdzCS8qIF9DUlQwX0ZMQUdf RklMTF9ERUFEQkVFRiAqLw0KKwlqeglub19kZWFkYmVlZgkJCS8qIGZpbGwg d2l0aCAwIG9yIERFQURCRUVGID8gKi8NCisJbW92bAkkMHhkZWFkYmVlZiwg JWVheAkJLyogbmljZWx5IHNwb3R0YWJsZSBwYXR0ZXJuICovDQogbm9fZGVh ZGJlZWY6DQogCXNocmwJJDIsICVlY3gJCQkvKiBkaXYgNCBMb25nd29yZHMg bm90IGJ5dGVzICovDQogCWNsZA0KIAlyZXANCi0Jc3Rvc2wNCisJc3Rvc2wJ CQkJCS8qIGZpbGxsbGwgaXQgKi8NCiBub19maWxsX3NicmtfbWVtb3J5Og0K IAltb3ZsCSVlZHgsIF9fd2hhdF9zaXplX2RwbWlfdGhpbmtzX3dlX2FyZQ0K IA0K ---494318816-847437528-988288245=:592--