Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Feb 2012 14:50:08 GMT
From:      Gavin Mu <gavin.mu@gmail.com>
To:        freebsd-sparc64@FreeBSD.org
Subject:   Re: sparc64/165025: [PATCH] zfsboot support for sparc64
Message-ID:  <201202271450.q1REo80o002752@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR sparc64/165025; it has been noted by GNATS.

From: Gavin Mu <gavin.mu@gmail.com>
To: bug-followup@freebsd.org
Cc: Kurt Lidl <lidl@pix.net>, Marius Strobl <marius@alchemy.franken.de>
Subject: Re: sparc64/165025: [PATCH] zfsboot support for sparc64
Date: Mon, 27 Feb 2012 22:46:22 +0800

 --f46d0446316891d03404b9f32c5d
 Content-Type: text/plain; charset=UTF-8
 
 Here is the updated patch to support zfs boot fully. Now boot from
 mirror/raidz pool are also supported.
 
 zfsboot is the enhancement of boot1. Instead of reading "/boot/loader"
 from UFS filesystem, it loads the ELF "zfsloader" program from the
 3.5MB Boot Block of zpool in current vtoc8 partition (slice).
 
 zfsloader tries to probe the zpool in current vtoc8 partition and if
 it is valid, it records the guid, then search all disks to find all
 zpools in the vtoc8 partitions with freebsd-zfs tag. zfsloader uses
 devalias "disk<n>" to find the disks, so devalias must be defined for
 all your bootable disks by OBP (aka. {ok} mode). then it boots from
 the zpool with the same guid.
 
 If you use the whole disk as zpool, you can allocate all disk space
 into the first vtoc8 partition (for example, ada0a in FreeBSD) tag
 with freebsd-zfs to create zpool. It is same with creating zpool on
 the whole disk (ada0).
 
 For reading from multiple disks, some ofw code are changed. The former
 code does not work when reading from multiple disks and I am not sure
 if it is possible and how to do this. (I googled but did not find more
 useful things). So I changed the code to close the current disk before
 a new disk is opened, and there will be only one disk opened
 simultaneously. I am not sure if this will slow the disk reading for
 booting from raidz pool. (It is several minutes slow on my V100
 machine to boot from raidz zpool).
 
 Steps to use zfs boot:
 1. create vtoc8
 # gpart create -s vtoc8 ada0
 
 2. add partitions, for example
 # gpart add -t freebsd-swap -s 4g ada0
 # gpart add -t freebsd-zfs ada0
 the disk will be:
 # gpart show
 =>       0  78156480  ada0  VTOC8  (37G)
          0   8388480     1  freebsd-swap  (4G)
    8388480   69768000     2  freebsd-zfs  (33G)
 
 3. create zpool
 # zpool create tank ada0b
 or if you use mirrored/raidz type:
 # zpool create tank mirror ada0b ada1b
 # zpool create tank raidz ada0b ada1b ada2b....
 
 4. write boot1
 # gpart bootcode -p /boot/boot1 -i 1 ada0
 
 5. write zfsloader into ZFS Boot Block, currently there is no dedicate
 program to do this, so use dd instead.
 # dd if=./zfsloader of=/dev/ada0b bs=512 oseek=1024 conv=notrunc
 only one copy of boot1 and zfsloader is needed to boot even if you use
 mirror/raidz pool. surely you can write copies on each disk then you
 can boot from another disk when disk failure.
 
 6. install system on the zpool...
 
 7. now the system can be booted with:
 {1} ok boot disk0:b
 if you defined devalias
 {1} ok devalias disk0
 disk0                    /pci@1c,600000/ide@2/disk@0,0
 
 If you use mirrored or raidz type of zpool, do not forget to define
 devalias for all used disks.
 
 
 The only flaw of this zfs boot support for sparc64 is the lack of a
 dedicate program to write zfsloader into ZFS Boot Block. Surely we
 still can use dd to do this simply.
 I do not think gpart is suitable to do such thing. Maybe it is
 reasonable to have a command like:
 # zpool installboot ./zfsloader tank
 
 But such a command will be used only by sparc64 architecture since
 other architectures does not use ZFS Boot Block.
 
 Cheers,
 Gavin Mu
 
 --f46d0446316891d03404b9f32c5d
 Content-Type: text/plain; charset=US-ASCII; name="zfsboot.v2.diff.txt"
 Content-Disposition: attachment; filename="zfsboot.v2.diff.txt"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_gz5m2kxb0
 
 ZGlmZiAtLWdpdCBhL3N5cy9ib290L2NvbW1vbi9ib290c3RyYXAuaCBiL3N5cy9ib290L2NvbW1v
 bi9ib290c3RyYXAuaA0KaW5kZXggZDhiNDU1MS4uZmVhNzE5MiAxMDA2NDQNCi0tLSBhL3N5cy9i
 b290L2NvbW1vbi9ib290c3RyYXAuaA0KKysrIGIvc3lzL2Jvb3QvY29tbW9uL2Jvb3RzdHJhcC5o
 DQpAQCAtMjUsNiArMjUsOCBAQA0KICAqDQogICogJEZyZWVCU0QkDQogICovDQorI2lmbmRlZiBf
 Qk9PVFNUUkFQX0hfDQorI2RlZmluZSBfQk9PVFNUUkFQX0hfDQogDQogI2luY2x1ZGUgPHN5cy90
 eXBlcy5oPg0KICNpbmNsdWRlIDxzeXMvcXVldWUuaD4NCkBAIC0zMjMsMyArMzI1LDYgQEAgdm9p
 ZAlkZWxheShpbnQgZGVsYXkpOw0KIHZvaWQJZGV2X2NsZWFudXAodm9pZCk7DQogDQogdGltZV90
 CXRpbWUodGltZV90ICp0bG9jKTsNCisNCisjZW5kaWYgLyogIV9CT09UU1RSQVBfSF8gKi8NCisN
 CmRpZmYgLS1naXQgYS9zeXMvYm9vdC9vZncvbGlib2Z3L2RldmljZW5hbWUuYyBiL3N5cy9ib290
 L29mdy9saWJvZncvZGV2aWNlbmFtZS5jDQppbmRleCAzY2FlMjNjLi42NTViODdhIDEwMDY0NA0K
 LS0tIGEvc3lzL2Jvb3Qvb2Z3L2xpYm9mdy9kZXZpY2VuYW1lLmMNCisrKyBiL3N5cy9ib290L29m
 dy9saWJvZncvZGV2aWNlbmFtZS5jDQpAQCAtMjgsNiArMjgsNyBAQA0KIF9fRkJTRElEKCIkRnJl
 ZUJTRCQiKTsNCiANCiAjaW5jbHVkZSA8c3RhbmQuaD4NCisjaW5jbHVkZSAiYm9vdHN0cmFwLmgi
 DQogI2luY2x1ZGUgImxpYm9mdy5oIg0KIA0KIHN0YXRpYyBpbnQgb2Z3X3BhcnNlZGV2KHN0cnVj
 dCBvZndfZGV2ZGVzYyAqKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICoqKTsNCkBAIC03NSw2
 ICs3Niw3IEBAIG9md19wYXJzZWRldihzdHJ1Y3Qgb2Z3X2RldmRlc2MgKipkZXYsIGNvbnN0IGNo
 YXIgKmRldnNwZWMsIGNvbnN0IGNoYXIgKipwYXRoKQ0KICAgICBzdHJ1Y3QgZGV2c3cJKmR2Ow0K
 ICAgICBwaGFuZGxlX3QJCWhhbmRsZTsNCiAgICAgY29uc3QgY2hhcgkJKnA7DQorICAgIGNoYXIJ
 CSplcDsNCiAgICAgY29uc3QgY2hhcgkJKnM7DQogICAgIGNoYXIJCW5hbWVbMjU2XTsNCiAgICAg
 Y2hhcgkJdHlwZVs2NF07DQpAQCAtODcsMTAgKzg5LDEyIEBAIG9md19wYXJzZWRldihzdHJ1Y3Qg
 b2Z3X2RldmRlc2MgKipkZXYsIGNvbnN0IGNoYXIgKmRldnNwZWMsIGNvbnN0IGNoYXIgKipwYXRo
 KQ0KIAlsZW4gPSBzIC0gZGV2c3BlYzsNCiAJYmNvcHkoZGV2c3BlYywgbmFtZSwgbGVuKTsNCiAJ
 bmFtZVtsZW5dID0gJ1wwJzsNCi0JaWYgKChoYW5kbGUgPSBPRl9maW5kZGV2aWNlKG5hbWUpKSA9
 PSAtMSkNCi0JICAgIGJyZWFrOw0KLQlpZiAoT0ZfZ2V0cHJvcChoYW5kbGUsICJkZXZpY2VfdHlw
 ZSIsIHR5cGUsIHNpemVvZih0eXBlKSkgPT0gLTEpDQorCWlmICgoaGFuZGxlID0gT0ZfZmluZGRl
 dmljZShuYW1lKSkgPT0gLTEpIHsNCisJICAgIGJjb3B5KG5hbWUsIHR5cGUsIGxlbik7DQorCSAg
 ICB0eXBlW2xlbl0gPSAnXDAnOw0KKwl9IGVsc2UgaWYgKE9GX2dldHByb3AoaGFuZGxlLCAiZGV2
 aWNlX3R5cGUiLCB0eXBlLCBzaXplb2YodHlwZSkpID09IC0xKSB7DQogCSAgICBjb250aW51ZTsN
 CisgICAgICAgIH0NCiAJZm9yIChpID0gMDsgKGR2ID0gZGV2c3dbaV0pICE9IE5VTEw7IGkrKykg
 ew0KIAkgICAgaWYgKHN0cm5jbXAoZHYtPmR2X25hbWUsIHR5cGUsIHN0cmxlbihkdi0+ZHZfbmFt
 ZSkpID09IDApDQogCQlnb3RvIGZvdW5kOw0KQEAgLTEwOSw2ICsxMTMsMTggQEAgZm91bmQ6DQog
 ICAgIHN0cmNweShpZGV2LT5kX3BhdGgsIG5hbWUpOw0KICAgICBpZGV2LT5kX2RldiA9IGR2Ow0K
 ICAgICBpZGV2LT5kX3R5cGUgPSBkdi0+ZHZfdHlwZTsNCisgICAgaWYgKGlkZXYtPmRfdHlwZSA9
 PSBERVZUX1pGUykgew0KKwlpZGV2LT5kX3VuaXQgPSAwOw0KKwlwID0gbmFtZSArIHN0cmxlbihk
 di0+ZHZfbmFtZSk7DQorCWlmICgqcCAmJiAoKnAgIT0gJzonKSkgew0KKwkgICAgaWRldi0+ZF91
 bml0ID0gc3RydG9sKHAsICZlcCwgMCk7DQorCSAgICBpZiAoZXAgPT0gcCkgew0KKwkJZnJlZShp
 ZGV2KTsNCisJCXJldHVybiBFVU5JVDsNCisJICAgIH0NCisJfQ0KKyAgICB9DQorDQogICAgIGlm
 IChkZXYgPT0gTlVMTCkgew0KIAlmcmVlKGlkZXYpOw0KICAgICB9IGVsc2Ugew0KZGlmZiAtLWdp
 dCBhL3N5cy9ib290L29mdy9saWJvZncvb2Z3X2Rpc2suYyBiL3N5cy9ib290L29mdy9saWJvZncv
 b2Z3X2Rpc2suYw0KaW5kZXggYWFhZDE5Ni4uMDY3YmQ2YiAxMDA2NDQNCi0tLSBhL3N5cy9ib290
 L29mdy9saWJvZncvb2Z3X2Rpc2suYw0KKysrIGIvc3lzL2Jvb3Qvb2Z3L2xpYm9mdy9vZndfZGlz
 ay5jDQpAQCAtMzEsNyArMzEsNiBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7DQogICovDQogDQog
 I2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4NCiANCiAjaW5j
 bHVkZSA8bmV0aW5ldC9pbi5oPg0KIA0KQEAgLTYxLDE4ICs2MCwxMiBAQCBzdHJ1Y3QgZGV2c3cg
 b2Z3ZGlzayA9IHsNCiAJb2Z3ZF9wcmludA0KIH07DQogDQotc3RydWN0IG9wZW5lZF9kZXYgew0K
 LQlpaGFuZGxlX3QJCWhhbmRsZTsNCi0JdV9pbnQJCQljb3VudDsNCi0JU0xJU1RfRU5UUlkob3Bl
 bmVkX2RldikJbGluazsNCi19Ow0KLQ0KLVNMSVNUX0hFQUQoLCBvcGVuZWRfZGV2KSBvcGVuZWRf
 ZGV2cyA9IFNMSVNUX0hFQURfSU5JVElBTElaRVIob3BlbmVkX2RldnMpOw0KK3N0YXRpYyBzdHJ1
 Y3Qgb2Z3X2RldmRlc2MgKmtkcDsNCiANCiBzdGF0aWMgaW50DQogb2Z3ZF9pbml0KHZvaWQpDQog
 ew0KLQ0KKwlrZHAgPSBOVUxMOw0KIAlyZXR1cm4gMDsNCiB9DQogDQpAQCAtODQsMTMgKzc3LDI5
 IEBAIG9md2Rfc3RyYXRlZ3kodm9pZCAqZGV2ZGF0YSwgaW50IGZsYWcsIGRhZGRyX3QgZGJsaywg
 c2l6ZV90IHNpemUsIGNoYXIgKmJ1ZiwNCiAJZGFkZHJfdCBwb3M7DQogCWludCBuOw0KIA0KKwlp
 ZiAoZHAgIT0ga2RwKSB7DQorCQlpZiAoa2RwICE9IE5VTEwpIHsNCisJCQlPRl9jbG9zZShrZHAt
 PmRfaGFuZGxlKTsNCisJCQlrZHAtPmRfaGFuZGxlID0gMDsNCisJCQlrZHAgPSBOVUxMOw0KKwkJ
 fQ0KKwkJaWYgKChkcC0+ZF9oYW5kbGUgPSBPRl9vcGVuKGRwLT5kX3BhdGgpKSA9PSAtMSkgew0K
 KwkJCXJldHVybiBFTk9FTlQ7DQorCQl9DQorCQlrZHAgPSBkcDsNCisJfQ0KKw0KIAlwb3MgPSBk
 YmxrICogNTEyOw0KIAlkbyB7DQotCQlpZiAoT0Zfc2VlayhkcC0+ZF9oYW5kbGUsIHBvcykgPCAw
 KQ0KKwkJaWYgKE9GX3NlZWsoZHAtPmRfaGFuZGxlLCBwb3MpIDwgMCkgew0KKwkJCXByaW50Zigi
 b3V0IG9md2Rfc3RyYXRlZ3kgRUlPXG4iKTsNCiAJCQlyZXR1cm4gRUlPOw0KKwkJfQ0KIAkJbiA9
 IE9GX3JlYWQoZHAtPmRfaGFuZGxlLCBidWYsIHNpemUpOw0KLQkJaWYgKG4gPCAwICYmIG4gIT0g
 LTIpDQorCQlpZiAobiA8IDAgJiYgbiAhPSAtMikgew0KKwkJCXByaW50Zigib3V0IG9md2Rfc3Ry
 YXRlZ3kgRUlPIDJcbiIpOw0KIAkJCXJldHVybiBFSU87DQorCQl9DQogCX0gd2hpbGUgKG4gPT0g
 LTIpOw0KIAkqcnNpemUgPSBzaXplOw0KIAlyZXR1cm4gMDsNCkBAIC05OSw0NyArMTA4LDI2IEBA
 IG9md2Rfc3RyYXRlZ3kodm9pZCAqZGV2ZGF0YSwgaW50IGZsYWcsIGRhZGRyX3QgZGJsaywgc2l6
 ZV90IHNpemUsIGNoYXIgKmJ1ZiwNCiBzdGF0aWMgaW50DQogb2Z3ZF9vcGVuKHN0cnVjdCBvcGVu
 X2ZpbGUgKmYsIC4uLikNCiB7DQotCWNoYXIgcGF0aFsyNTZdOw0KIAlzdHJ1Y3Qgb2Z3X2RldmRl
 c2MgKmRwOw0KLQlzdHJ1Y3Qgb3BlbmVkX2RldiAqb2RwOw0KIAl2YV9saXN0IHZsOw0KIA0KIAl2
 YV9zdGFydCh2bCwgZik7DQogCWRwID0gdmFfYXJnKHZsLCBzdHJ1Y3Qgb2Z3X2RldmRlc2MgKik7
 DQogCXZhX2VuZCh2bCk7DQotCS8qDQotCSAqIFdlJ3JlIG5vdCBndWFyYW50ZWVkIHRvIGJlIGFi
 bGUgdG8gb3BlbiBhIGRldmljZSBtb3JlIHRoYW4gb25jZQ0KLQkgKiBzaW11bHRhbmVvdXNseSBh
 bmQgdGhlcmUgaXMgbm8gT0ZXIHN0YW5kYXJkIG1ldGhvZCB0byBkZXRlcm1pbmUNCi0JICogd2hl
 dGhlciBhIGRldmljZSBpcyBhbHJlYWR5IG9wZW5lZC4gT3BlbmluZyBhIGRldmljZSBtb3JlIHRo
 YW4NCi0JICogb25jZSBoYXBwZW5zIHRvIHdvcmsgd2l0aCBtb3N0IE9GVyBibG9jayBkZXZpY2Ug
 ZHJpdmVycyBidXQNCi0JICogdHJpZ2dlcnMgYSB0cmFwIHdpdGggYXQgbGVhc3QgdGhlIGRyaXZl
 ciBmb3IgdGhlIG9uLWJvYXJkIFNDU0kNCi0JICogY29udHJvbGxlciBpbiBTdW4gVWx0cmEgMS4g
 VXBwZXIgbGF5ZXJzIGFuZCBNSSBjb2RlIGV4cGVjdCB0bw0KLQkgKiBiZSBhYmxlIHRvIG9wZW4g
 YSBkZXZpY2UgbW9yZSB0aGFuIG9uY2UgaG93ZXZlci4gQXMgYSB3b3JrYXJvdW5kDQotCSAqIGtl
 ZXAgdHJhY2sgb2YgdGhlIG9wZW5lZCBkZXZpY2VzIGFuZCByZXVzZSB0aGUgaW5zdGFuY2UgaGFu
 ZGxlDQotCSAqIHdoZW4gYXNrZWQgdG8gb3BlbiBhbiBhbHJlYWR5IG9wZW5lZCBkZXZpY2UuDQot
 CSAqLw0KLQlTTElTVF9GT1JFQUNIKG9kcCwgJm9wZW5lZF9kZXZzLCBsaW5rKSB7DQotCQlpZiAo
 T0ZfaW5zdGFuY2VfdG9fcGF0aChvZHAtPmhhbmRsZSwgcGF0aCwgc2l6ZW9mKHBhdGgpKSA9PSAt
 MSkNCi0JCQljb250aW51ZTsNCi0JCWlmIChzdHJjbXAocGF0aCwgZHAtPmRfcGF0aCkgPT0gMCkg
 ew0KLQkJCW9kcC0+Y291bnQrKzsNCi0JCQlkcC0+ZF9oYW5kbGUgPSBvZHAtPmhhbmRsZTsNCi0J
 CQlyZXR1cm4gMDsNCisNCisJaWYgKGRwICE9IGtkcCkgew0KKwkJaWYgKGtkcCAhPSBOVUxMKSB7
 DQorCQkJT0ZfY2xvc2Uoa2RwLT5kX2hhbmRsZSk7DQorCQkJa2RwLT5kX2hhbmRsZSA9IDA7DQor
 CQkJa2RwID0gTlVMTDsNCiAJCX0NCisJCWlmICgoZHAtPmRfaGFuZGxlID0gT0Zfb3BlbihkcC0+
 ZF9wYXRoKSkgPT0gLTEpIHsNCisJCQlwcmludGYoIm9md2Rfb3BlbjogQ291bGQgbm90IG9wZW4g
 JXNcbiIsIGRwLT5kX3BhdGgpOw0KKwkJCXJldHVybiBFTk9FTlQ7DQorCQl9DQorCQlrZHAgPSBk
 cDsNCiAJfQ0KLQlvZHAgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvcGVuZWRfZGV2KSk7DQotCWlm
 IChvZHAgPT0gTlVMTCkgew0KLQkJcHJpbnRmKCJvZndkX29wZW46IG1hbGxvYyBmYWlsZWRcbiIp
 Ow0KLQkJcmV0dXJuIEVOT01FTTsNCi0JfQ0KLQlpZiAoKG9kcC0+aGFuZGxlID0gT0Zfb3Blbihk
 cC0+ZF9wYXRoKSkgPT0gLTEpIHsNCi0JCXByaW50Zigib2Z3ZF9vcGVuOiBDb3VsZCBub3Qgb3Bl
 biAlc1xuIiwgZHAtPmRfcGF0aCk7DQotCQlmcmVlKG9kcCk7DQotCQlyZXR1cm4gRU5PRU5UOw0K
 LQl9DQotCW9kcC0+Y291bnQgPSAxOw0KLQlTTElTVF9JTlNFUlRfSEVBRCgmb3BlbmVkX2RldnMs
 IG9kcCwgbGluayk7DQotCWRwLT5kX2hhbmRsZSA9IG9kcC0+aGFuZGxlOw0KKw0KIAlyZXR1cm4g
 MDsNCiB9DQogDQpAQCAtMTQ3LDIyICsxMzUsMTUgQEAgc3RhdGljIGludA0KIG9md2RfY2xvc2Uo
 c3RydWN0IG9wZW5fZmlsZSAqZikNCiB7DQogCXN0cnVjdCBvZndfZGV2ZGVzYyAqZGV2ID0gZi0+
 Zl9kZXZkYXRhOw0KLQlzdHJ1Y3Qgb3BlbmVkX2RldiAqb2RwOw0KLQ0KLQlTTElTVF9GT1JFQUNI
 KG9kcCwgJm9wZW5lZF9kZXZzLCBsaW5rKSB7DQotCQlpZiAob2RwLT5oYW5kbGUgPT0gZGV2LT5k
 X2hhbmRsZSkgew0KLQkJCW9kcC0+Y291bnQtLTsNCi0JCQlpZiAob2RwLT5jb3VudCA9PSAwKSB7
 DQotCQkJCVNMSVNUX1JFTU9WRSgmb3BlbmVkX2RldnMsIG9kcCwgb3BlbmVkX2RldiwNCi0JCQkJ
 ICAgIGxpbmspOw0KLQkJCSNpZiAhZGVmaW5lZChfX3Bvd2VycGNfXykNCi0JCQkJT0ZfY2xvc2Uo
 b2RwLT5oYW5kbGUpOw0KLQkJCSNlbmRpZg0KLQkJCQlmcmVlKG9kcCk7DQotCQkJfQ0KLQkJCWJy
 ZWFrOw0KLQkJfQ0KKw0KKwlpZiAoZGV2ID09IGtkcCkgew0KKyNpZiAhZGVmaW5lZChfX3Bvd2Vy
 cGNfXykNCisJCU9GX2Nsb3NlKGtkcC0+ZF9oYW5kbGUpOw0KKwkJa2RwLT5kX2hhbmRsZSA9IDA7
 DQorI2VuZGlmDQorCQlrZHAgPSBOVUxMOw0KIAl9DQorDQogCXJldHVybiAwOw0KIH0NCiANCmRp
 ZmYgLS1naXQgYS9zeXMvYm9vdC9zcGFyYzY0L01ha2VmaWxlIGIvc3lzL2Jvb3Qvc3BhcmM2NC9N
 YWtlZmlsZQ0KaW5kZXggZmRjODdmZC4uMGM0ZGQwYyAxMDA2NDQNCi0tLSBhL3N5cy9ib290L3Nw
 YXJjNjQvTWFrZWZpbGUNCisrKyBiL3N5cy9ib290L3NwYXJjNjQvTWFrZWZpbGUNCkBAIC0xLDUg
 KzEsNSBAQA0KICMgJEZyZWVCU0QkDQogDQotU1VCRElSPQlib290MSBsb2FkZXINCitTVUJESVI9
 CWJvb3QxIHpmc2Jvb3QgbG9hZGVyIHpmc2xvYWRlcg0KIA0KIC5pbmNsdWRlIDxic2Quc3ViZGly
 Lm1rPg0KZGlmZiAtLWdpdCBhL3N5cy9ib290L3NwYXJjNjQvYm9vdDEvTWFrZWZpbGUgYi9zeXMv
 Ym9vdC9zcGFyYzY0L2Jvb3QxL01ha2VmaWxlDQppbmRleCBkZWMzZTA5Li44ZTlhN2I1IDEwMDY0
 NA0KLS0tIGEvc3lzL2Jvb3Qvc3BhcmM2NC9ib290MS9NYWtlZmlsZQ0KKysrIGIvc3lzL2Jvb3Qv
 c3BhcmM2NC9ib290MS9NYWtlZmlsZQ0KQEAgLTgsOSArOCwxNSBAQCBTUkNTPQlfc3RhcnQucyBi
 b290MS5jDQogDQogQk9PVEJMT0NLQkFTRT0gMHg0MDAwDQogDQorWkZTQk9PVD89CW5vDQogQ0ZM
 QUdTPQktbWNtb2RlbD1tZWRsb3cgLU9zIC1JJHsuQ1VSRElSfS8uLi8uLi9jb21tb24NCiBMREZM
 QUdTPS1UdGV4dCAke0JPT1RCTE9DS0JBU0V9IC1XbCwtTg0KIA0KKy5pZiAke1pGU0JPT1R9ID09
 ICJ5ZXMiDQorQ0ZMQUdTKz0gICAgICAgIC1EWkZTQk9PVA0KKy5lbmRpZg0KKw0KKw0KICMgQ29u
 c3RydWN0IGJvb3QxLiBzdW5sYWJlbCBleHBlY3RzIGl0IHRvIGNvbnRhaW4gemVyb2VkLW91dCBz
 cGFjZSBmb3IgdGhlDQogIyBsYWJlbCwgYW5kIHRvIGJlIG9mIHRoZSBjb3JyZWN0IHNpemUuDQog
 Ym9vdDE6IGJvb3QxLmFvdXQNCmRpZmYgLS1naXQgYS9zeXMvYm9vdC9zcGFyYzY0L2Jvb3QxL2Jv
 b3QxLmMgYi9zeXMvYm9vdC9zcGFyYzY0L2Jvb3QxL2Jvb3QxLmMNCmluZGV4IDZiOWZhMzAuLjk1
 ZTM2ZTUgMTAwNjQ0DQotLS0gYS9zeXMvYm9vdC9zcGFyYzY0L2Jvb3QxL2Jvb3QxLmMNCisrKyBi
 L3N5cy9ib290L3NwYXJjNjQvYm9vdDEvYm9vdDEuYw0KQEAgLTI1LDYgKzI1LDcgQEAgX19GQlNE
 SUQoIiRGcmVlQlNEJCIpOw0KIA0KICNkZWZpbmUgX1BBVEhfTE9BREVSCSIvYm9vdC9sb2FkZXIi
 DQogI2RlZmluZSBfUEFUSF9LRVJORUwJIi9ib290L2tlcm5lbC9rZXJuZWwiDQorI2RlZmluZSBS
 RUFEX0JVRl9TSVpFIDgxOTINCiANCiB0eXBlZGVmIGludCBwdXRjX2Z1bmNfdChjaGFyIGMsIHZv
 aWQgKmFyZyk7DQogdHlwZWRlZiBpbnQzMl90IG9md2hfdDsNCkBAIC00OCw2ICs0OSw5IEBAIGlu
 dCBtYWluKGludCBhYywgY2hhciAqKmF2KTsNCiANCiBzdGF0aWMgdm9pZCBleGl0KGludCkgX19k
 ZWFkMjsNCiBzdGF0aWMgdm9pZCBsb2FkKGNvbnN0IGNoYXIgKik7DQorI2lmZGVmIFpGU0JPT1QN
 CitzdGF0aWMgdm9pZCBsb2FkemZzKHZvaWQpOw0KKyNlbmRpZg0KIHN0YXRpYyBpbnQgZHNrcmVh
 ZCh2b2lkICosIHVfaW50NjRfdCwgaW50KTsNCiANCiBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKTsN
 CkBAIC0zMzUsNiArMzM5LDE3IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpDQogCQl9DQogCX0N
 CiANCisjaWZkZWYgWkZTQk9PVA0KKwlwcmludGYoIiBcbj4+IEZyZWVCU0Qvc3BhcmM2NCBaRlMg
 Ym9vdCBibG9ja1xuIg0KKwkiICAgQm9vdCBwYXRoOiAgICVzXG4iDQorCSIgICBCb290IGxvYWRl
 ciBvbiBaRlMgYm9vdCBibG9ja1xuIiwgYm9vdHBhdGgsIHBhdGgpOw0KKw0KKwlpZiAoKGJvb3Rk
 ZXYgPSBvZndfb3Blbihib290cGF0aCkpID09IC0xKSB7DQorCQlwcmludGYoImNhbid0IG9wZW4g
 ZGV2aWNlXG4iKTsNCisJCXJldHVybiAoLTEpOw0KKwl9DQorCWxvYWR6ZnMoKTsNCisjZWxzZQ0K
 IAlwcmludGYoIiBcbj4+IEZyZWVCU0Qvc3BhcmM2NCBib290IGJsb2NrXG4iDQogCSIgICBCb290
 IHBhdGg6ICAgJXNcbiINCiAJIiAgIEJvb3QgbG9hZGVyOiAlc1xuIiwgYm9vdHBhdGgsIHBhdGgp
 Ow0KQEAgLTM0Myw2ICszNTgsNyBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQ0KIAkJcGFuaWMo
 Im1vdW50Iik7DQogDQogCWxvYWQocGF0aCk7DQorI2VuZGlmDQogCXJldHVybiAoMSk7DQogfQ0K
 IA0KQEAgLTM3OSw2ICszOTUsODAgQEAgbW91bnQoY29uc3QgY2hhciAqZGV2aWNlKQ0KIAlyZXR1
 cm4gKDApOw0KIH0NCiANCisjaWZkZWYgWkZTQk9PVA0KKyNkZWZpbmUgVkRFVl9CT09UX09GRlNF
 VCAoMiAqIDI1NiAqIDEwMjQpDQorc3RhdGljIGNoYXIgemJ1ZltSRUFEX0JVRl9TSVpFXTsNCisN
 CitzdGF0aWMgaW50DQoremJyZWFkKGNoYXIgKmJ1Ziwgb2ZmX3Qgb2ZmLCBzaXplX3QgYnl0ZXMp
 DQorew0KKwljaGFyICpwOw0KKwl1bnNpZ25lZCBpbnQgbmI7DQorCXVuc2lnbmVkIGludCBsYjsN
 CisJc2l6ZV90IGxlbjsNCisJb2ZmX3Qgc29mZjsNCisJb2ZmX3QgcG9mZjsNCisNCisJcCA9IGJ1
 ZjsNCisJc29mZiA9IFZERVZfQk9PVF9PRkZTRVQgKyBvZmY7DQorCWxiID0gKHNvZmYgKyBieXRl
 cyArIERFVl9CU0laRSAtIDEpIC8gREVWX0JTSVpFOw0KKwlwb2ZmID0gc29mZjsNCisJd2hpbGUg
 KHBvZmYgPCBzb2ZmICsgYnl0ZXMpIHsNCisJCW5iID0gbGIgLSBwb2ZmIC8gREVWX0JTSVpFOw0K
 KwkJaWYgKG5iID4gUkVBRF9CVUZfU0laRSAvIERFVl9CU0laRSkNCisJCQluYiA9IFJFQURfQlVG
 X1NJWkUgLyBERVZfQlNJWkU7DQorCQlpZiAoZHNrcmVhZCh6YnVmLCBwb2ZmIC8gREVWX0JTSVpF
 LCBuYikpDQorCQkJYnJlYWs7DQorCQlpZiAoKHBvZmYgLyBERVZfQlNJWkUgKyBuYikgKiBERVZf
 QlNJWkUgPiBzb2ZmICsgYnl0ZXMpDQorCQkJbGVuID0gc29mZiArIGJ5dGVzIC0gcG9mZjsNCisJ
 CWVsc2UNCisJCQlsZW4gPSAocG9mZiAvIERFVl9CU0laRSArIG5iKSAqIERFVl9CU0laRSAtIHBv
 ZmY7DQorCQltZW1jcHkocCwgemJ1ZiArIHBvZmYgJSBERVZfQlNJWkUsIGxlbik7DQorCQlwICs9
 IGxlbjsNCisJCXBvZmYgKz0gbGVuOw0KKwl9DQorDQorCXJldHVybiAocG9mZiAtIHNvZmYpOw0K
 K30NCisNCitzdGF0aWMgdm9pZCBsb2FkemZzKHZvaWQpDQorew0KKwlFbGY2NF9FaGRyIGVoOw0K
 KwlFbGY2NF9QaGRyIHBoOw0KKwljYWRkcl90IHA7DQorCWlub190IGlubzsNCisJaW50IGk7DQor
 DQorCWlmICh6YnJlYWQoKGNoYXIgKikmZWgsIDAsIHNpemVvZihlaCkpICE9IHNpemVvZihlaCkp
 IHsNCisJCXByaW50ZigiQ2FuJ3QgcmVhZCBlbGYgaGVhZGVyXG4iKTsNCisJCXJldHVybjsNCisJ
 fQ0KKwlpZiAoIUlTX0VMRihlaCkpIHsNCisJCXByaW50ZigiTm90IGFuIEVMRiBmaWxlXG4iKTsN
 CisJCXJldHVybjsNCisJfQ0KKwlmb3IgKGkgPSAwOyBpIDwgZWguZV9waG51bTsgaSsrKSB7DQor
 CQlmc19vZmYgPSBlaC5lX3Bob2ZmICsgaSAqIGVoLmVfcGhlbnRzaXplOw0KKwkJaWYgKHpicmVh
 ZCgoY2hhciAqKSZwaCwgZnNfb2ZmLCBzaXplb2YocGgpKSAhPSBzaXplb2YocGgpKSB7DQorCQkJ
 cHJpbnRmKCJDYW4ndCByZWFkIHByb2dyYW0gaGVhZGVyICVkXG4iLCBpKTsNCisJCQlyZXR1cm47
 DQorCQl9DQorCQlpZiAocGgucF90eXBlICE9IFBUX0xPQUQpDQorCQkJY29udGludWU7DQorCQlm
 c19vZmYgPSBwaC5wX29mZnNldDsNCisJCXAgPSAoY2FkZHJfdClwaC5wX3ZhZGRyOw0KKwkJaWYg
 KHpicmVhZChwLCBmc19vZmYsIHBoLnBfZmlsZXN6KSAhPSBwaC5wX2ZpbGVzeikgew0KKwkJCXBy
 aW50ZigiQ2FuJ3QgcmVhZCBjb250ZW50IG9mIHNlY3Rpb24gJWRcbiIsIGkpOw0KKwkJCXJldHVy
 bjsNCisJCX0NCisJCWlmIChwaC5wX2ZpbGVzeiAhPSBwaC5wX21lbXN6KQ0KKwkJCWJ6ZXJvKHAg
 KyBwaC5wX2ZpbGVzeiwgcGgucF9tZW1zeiAtIHBoLnBfZmlsZXN6KTsNCisJfQ0KKwlvZndfY2xv
 c2UoYm9vdGRldik7DQorCSgqKHZvaWQgKCopKGludCwgaW50LCBpbnQsIGludCwgb2Z3ZnBfdCkp
 ZWguZV9lbnRyeSkoMCwgMCwgMCwgMCwgb2Z3KTsNCit9DQorI2VuZGlmIC8qIFpGU0JPT1QgKi8N
 CisNCiBzdGF0aWMgdm9pZA0KIGxvYWQoY29uc3QgY2hhciAqZm5hbWUpDQogew0KZGlmZiAtLWdp
 dCBhL3N5cy9ib290L3NwYXJjNjQvbG9hZGVyL01ha2VmaWxlIGIvc3lzL2Jvb3Qvc3BhcmM2NC9s
 b2FkZXIvTWFrZWZpbGUNCmluZGV4IGQzMmZiYWIuLmY0ZjFjMTIgMTAwNjQ0DQotLS0gYS9zeXMv
 Ym9vdC9zcGFyYzY0L2xvYWRlci9NYWtlZmlsZQ0KKysrIGIvc3lzL2Jvb3Qvc3BhcmM2NC9sb2Fk
 ZXIvTWFrZWZpbGUNCkBAIC0zLDggKzMsOCBAQA0KIC5pbmNsdWRlIDxic2Qub3duLm1rPg0KIE1L
 X1NTUD0JCW5vDQogDQotUFJPRz0JCWxvYWRlcg0KLU5FV1ZFUlNXSEFUPQkiYm9vdHN0cmFwIGxv
 YWRlciIgc3BhcmM2NA0KK1BST0c/PQkJbG9hZGVyDQorTkVXVkVSU1dIQVQ/PQkiYm9vdHN0cmFw
 IGxvYWRlciIgc3BhcmM2NA0KIElOU1RBTExGTEFHUz0JLWINCiANCiAjIEFyY2hpdGVjdHVyZS1z
 cGVjaWZpYyBsb2FkZXIgY29kZQ0KQEAgLTEzLDEyICsxMywxNyBAQCBTUkNTPQkJbG9jb3JlLlMg
 bWFpbi5jIG1ldGFkYXRhLmMgdmVycy5jDQogTE9BREVSX0RJU0tfU1VQUE9SVD89CXllcw0KIExP
 QURFUl9VRlNfU1VQUE9SVD89CXllcw0KIExPQURFUl9DRDk2NjBfU1VQUE9SVD89CXllcw0KK0xP
 QURFUl9aRlNfU1VQUE9SVD89CW5vDQogTE9BREVSX05FVF9TVVBQT1JUPz0JeWVzDQogTE9BREVS
 X05GU19TVVBQT1JUPz0JeWVzDQogTE9BREVSX1RGVFBfU1VQUE9SVD89CXllcw0KIExPQURFUl9H
 WklQX1NVUFBPUlQ/PQl5ZXMNCiBMT0FERVJfQlpJUDJfU1VQUE9SVD89CW5vDQorTE9BREVSX0RF
 QlVHPz0JCW5vDQogDQorLmlmICR7TE9BREVSX0RFQlVHfSA9PSAieWVzIg0KK0NGTEFHUys9CS1E
 TE9BREVSX0RFQlVHDQorLmVuZGlmDQogLmlmICR7TE9BREVSX0RJU0tfU1VQUE9SVH0gPT0gInll
 cyINCiBDRkxBR1MrPQktRExPQURFUl9ESVNLX1NVUFBPUlQNCiAuZW5kaWYNCkBAIC0yOCw2ICsz
 MywxMSBAQCBDRkxBR1MrPQktRExPQURFUl9VRlNfU1VQUE9SVA0KIC5pZiAke0xPQURFUl9DRDk2
 NjBfU1VQUE9SVH0gPT0gInllcyINCiBDRkxBR1MrPQktRExPQURFUl9DRDk2NjBfU1VQUE9SVA0K
 IC5lbmRpZg0KKy5pZiAke0xPQURFUl9aRlNfU1VQUE9SVH0gPT0gInllcyINCitDRkxBR1MrPQkt
 RExPQURFUl9aRlNfU1VQUE9SVA0KK0NGTEFHUys9CS1JJHsuQ1VSRElSfS8uLi8uLi96ZnMNCitD
 RkxBR1MrPQktSSR7LkNVUkRJUn0vLi4vLi4vLi4vY2RkbC9ib290L3pmcw0KKy5lbmRpZg0KIC5p
 ZiAke0xPQURFUl9HWklQX1NVUFBPUlR9ID09ICJ5ZXMiDQogQ0ZMQUdTKz0JLURMT0FERVJfR1pJ
 UF9TVVBQT1JUDQogLmVuZGlmDQpAQCAtNzUsOCArODUsOCBAQCBDRkxBR1MrPQktSSR7LkNVUkRJ
 Un0vLi4vLi4vLi4vLi4vbGliL2xpYnN0YW5kLw0KIERQQUREPQkJJHtMSUJGSUNMfSAke0xJQk9G
 V30gJHtMSUJTVEFORH0NCiBMREFERD0JCSR7TElCRklDTH0gJHtMSUJPRld9IC1sc3RhbmQNCiAN
 Ci12ZXJzLmM6CSR7LkNVUkRJUn0vLi4vLi4vY29tbW9uL25ld3ZlcnMuc2ggJHsuQ1VSRElSfS92
 ZXJzaW9uDQotCXNoICR7LkNVUkRJUn0vLi4vLi4vY29tbW9uL25ld3ZlcnMuc2ggJHsuQ1VSRElS
 fS92ZXJzaW9uICR7TkVXVkVSU1dIQVR9DQordmVycy5jOgkkey5DVVJESVJ9Ly4uLy4uL2NvbW1v
 bi9uZXd2ZXJzLnNoICR7LkNVUkRJUn0vLi4vbG9hZGVyL3ZlcnNpb24NCisJc2ggJHsuQ1VSRElS
 fS8uLi8uLi9jb21tb24vbmV3dmVycy5zaCAkey5DVVJESVJ9Ly4uL2xvYWRlci92ZXJzaW9uICR7
 TkVXVkVSU1dIQVR9DQogDQogbG9hZGVyLmhlbHA6IGhlbHAuY29tbW9uIGhlbHAuc3BhcmM2NA0K
 IAljYXQgJHsuQUxMU1JDfSB8IFwNCmRpZmYgLS1naXQgYS9zeXMvYm9vdC9zcGFyYzY0L2xvYWRl
 ci9tYWluLmMgYi9zeXMvYm9vdC9zcGFyYzY0L2xvYWRlci9tYWluLmMNCmluZGV4IGJlMDgxOWYu
 LmZmNzYwMjEgMTAwNjQ0DQotLS0gYS9zeXMvYm9vdC9zcGFyYzY0L2xvYWRlci9tYWluLmMNCisr
 KyBiL3N5cy9ib290L3NwYXJjNjQvbG9hZGVyL21haW4uYw0KQEAgLTE0Myw2ICsxNDMsMTAgQEAg
 c3RhdGljIHZtX29mZnNldF90IGhlYXB2YTsNCiANCiBzdGF0aWMgcGhhbmRsZV90IHJvb3Q7DQog
 DQorI2lmIGRlZmluZWQoTE9BREVSX1pGU19TVVBQT1JUKQ0KKyNpbmNsdWRlICJ6ZnMuYyINCitz
 dGF0aWMgaW50IHNwYXJjX3pmc19kZXZfaW5pdCh2b2lkKTsNCisjZW5kaWYNCiAvKg0KICAqIE1h
 Y2hpbmUgZGVwZW5kZW50IHN0cnVjdHVyZXMgdGhhdCB0aGUgbWFjaGluZSBpbmRlcGVuZGVudA0K
 ICAqIGxvYWRlciBwYXJ0IHVzZXMuDQpAQCAtMTU0LDYgKzE1OCw5IEBAIHN0cnVjdCBkZXZzdyAq
 ZGV2c3dbXSA9IHsNCiAjaWZkZWYgTE9BREVSX05FVF9TVVBQT1JUDQogCSZuZXRkZXYsDQogI2Vu
 ZGlmDQorI2lmZGVmIExPQURFUl9aRlNfU1VQUE9SVA0KKwkmemZzX2RldiwNCisjZW5kaWYNCiAJ
 MA0KIH07DQogc3RydWN0IGFyY2hfc3dpdGNoIGFyY2hzdzsNCkBAIC0xNjYsNiArMTczLDExIEBA
 IHN0cnVjdCBmaWxlX2Zvcm1hdCAqZmlsZV9mb3JtYXRzW10gPSB7DQogCSZzcGFyYzY0X2VsZiwN
 CiAJMA0KIH07DQorDQorI2lmIGRlZmluZWQoTE9BREVSX1pGU19TVVBQT1JUKQ0KK2V4dGVybiBz
 dHJ1Y3QgZnNfb3BzIHpmc19mc29wczsNCisjZW5kaWYNCisNCiBzdHJ1Y3QgZnNfb3BzICpmaWxl
 X3N5c3RlbVtdID0gew0KICNpZmRlZiBMT0FERVJfVUZTX1NVUFBPUlQNCiAJJnVmc19mc29wcywN
 CkBAIC0xNzMsNiArMTg1LDkgQEAgc3RydWN0IGZzX29wcyAqZmlsZV9zeXN0ZW1bXSA9IHsNCiAj
 aWZkZWYgTE9BREVSX0NEOTY2MF9TVVBQT1JUDQogCSZjZDk2NjBfZnNvcHMsDQogI2VuZGlmDQor
 I2lmZGVmIExPQURFUl9aRlNfU1VQUE9SVA0KKwkmemZzX2Zzb3BzLA0KKyNlbmRpZg0KICNpZmRl
 ZiBMT0FERVJfWklQX1NVUFBPUlQNCiAJJnppcGZzX2Zzb3BzLA0KICNlbmRpZg0KQEAgLTcyMSw2
 ICs3MzYsODQgQEAgdGxiX2luaXRfc3VuNHUodm9pZCkNCiAJCXBhbmljKCIlczogY2FuJ3QgYWxs
 b2NhdGUgVExCIHN0b3JlIiwgX19mdW5jX18pOw0KIH0NCiANCisjaWZkZWYgTE9BREVSX1pGU19T
 VVBQT1JUDQorI2luY2x1ZGUgPHN5cy92dG9jLmg+DQorc3RhdGljIGludA0KK3NwYXJjX3pmc19k
 ZXZfaW5pdCh2b2lkKQ0KK3sNCisJY2hhciBkZXZuYW1lWzUxMl07DQorCWludCB1bml0Ow0KKwlp
 bnQgcGFydDsNCisJaW50IGZkOw0KKwl2ZGV2X3QgKnZkZXY7DQorCXNwYV90ICpzcGE7DQorCXVp
 bnQ2NF90IGd1aWQ7DQorCXN0cnVjdCB2dG9jOCB2dG9jOw0KKwl6ZnNfaW5pdCgpOw0KKw0KKwln
 dWlkID0gMDsNCisJLyogZ2V0IHRoZSBndWlkIG9mIHpmcyBwb29sIG9uIGJvb3QgZGV2aWNlICov
 DQorCWZkID0gb3BlbihnZXRlbnYoImN1cnJkZXYiKSwgT19SRE9OTFkpOw0KKwlpZiAoZmQgIT0g
 LTEpIHsNCisJCWlmICh2ZGV2X3Byb2JlKHZkZXZfcmVhZCwgKHZvaWQgKikodWludHB0cl90KSBm
 ZCwgJnNwYSkgPT0gMCkgew0KKwkJCWd1aWQgPSBzcGEtPnNwYV9ndWlkOw0KKwkJfQ0KKwkJY2xv
 c2UoZmQpOw0KKwl9DQorDQorCS8qIGNsZWFudXAgdGhlIGVudiB0byBsZXQgemZzIHdvcmsgKi8N
 CisJd2hpbGUgKCh2ZGV2ID0gU1RBSUxRX0ZJUlNUKCZ6ZnNfdmRldnMpKSAhPSBOVUxMKSB7DQor
 CQlTVEFJTFFfUkVNT1ZFX0hFQUQoJnpmc192ZGV2cywgdl9hbGxsaW5rKTsNCisJCWZyZWUodmRl
 dik7DQorCX0NCisNCisJd2hpbGUgKChzcGEgPSBTVEFJTFFfRklSU1QoJnpmc19wb29scykpICE9
 IE5VTEwpIHsNCisJCVNUQUlMUV9SRU1PVkVfSEVBRCgmemZzX3Bvb2xzLCBzcGFfbGluayk7DQor
 CQlmcmVlKHNwYSk7DQorCX0NCisNCisJZm9yICh1bml0ID0gMDsgdW5pdCA8IE1BWEJEREVWOyB1
 bml0KyspIHsNCisJCS8qIGZpbmQgZnJlZWJzZC16ZnMgc2xpY2VzIGluIHZ0b2MgKi8NCisJCXNw
 cmludGYoZGV2bmFtZSwgImRpc2slZDoiLCB1bml0KTsNCisJCWZkID0gb3BlbihkZXZuYW1lLCBP
 X1JET05MWSk7DQorCQlpZiAoZmQgPT0gLTEpDQorCQkJY29udGludWU7DQorCQlsc2VlayhmZCwg
 MCwgU0VFS19TRVQpOw0KKwkJaWYgKHJlYWQoZmQsICZ2dG9jLCBzaXplb2YodnRvYykpICE9IHNp
 emVvZih2dG9jKSkgew0KKwkJCWNsb3NlKGZkKTsNCisJCQljb250aW51ZTsNCisJCX0NCisJCWNs
 b3NlKGZkKTsNCisNCisJCWZvciAocGFydCA9IDA7IHBhcnQgPCA4OyBwYXJ0KyspIHsNCisJCQlp
 ZiAocGFydCA9PSAyIHx8IHZ0b2MucGFydFtwYXJ0XS50YWcgIT0gVlRPQ19UQUdfRlJFRUJTRF9a
 RlMpDQorCQkJCWNvbnRpbnVlOw0KKwkJCXNwcmludGYoZGV2bmFtZSwgImRpc2slZDolYyIsIHVu
 aXQsIHBhcnQgKyAnYScpOw0KKwkJCWZkID0gb3BlbihkZXZuYW1lLCBPX1JET05MWSk7DQorCQkJ
 aWYgKGZkID09IC0xKQ0KKwkJCQlicmVhazsNCisNCisJCQlpZiAodmRldl9wcm9iZSh2ZGV2X3Jl
 YWQsICh2b2lkKikgKHVpbnRwdHJfdCkgZmQsIDApKQ0KKwkJCQljbG9zZShmZCk7DQorCQl9DQor
 CX0NCisNCisJaWYgKGd1aWQgIT0gMCkgew0KKwkJdW5pdCA9IHpmc19ndWlkX3RvX3VuaXQoZ3Vp
 ZCk7DQorCQlpZiAodW5pdCA+PSAwKSB7DQorCQkJc3ByaW50ZihkZXZuYW1lLCAiemZzJWQiLCB1
 bml0KTsNCisJCQllbnZfc2V0ZW52KCJjdXJyZGV2IiwgRVZfVk9MQVRJTEUsIGRldm5hbWUsDQor
 CQkJCSAgIG9md19zZXRjdXJyZGV2LCBlbnZfbm91bnNldCk7DQorCQkJZW52X3NldGVudigibG9h
 ZGRldiIsIEVWX1ZPTEFUSUxFLCBkZXZuYW1lLA0KKwkJCQkgICBlbnZfbm9zZXQsIGVudl9ub3Vu
 c2V0KTsNCisJCX0NCisJfQ0KKw0KKwlyZXR1cm4gKDApOw0KK30NCisNCisjZW5kaWYgLyogTE9B
 REVSX1pGU19TVVBQT1JUICovDQorDQogaW50DQogbWFpbihpbnQgKCpvcGVuZmlybSkodm9pZCAq
 KSkNCiB7DQpAQCAtNzU2LDE0ICs4NDksNiBAQCBtYWluKGludCAoKm9wZW5maXJtKSh2b2lkICop
 KQ0KIAltbXVfb3BzLT50bGJfaW5pdCgpOw0KIA0KIAkvKg0KLQkgKiBJbml0aWFsaXplIGRldmlj
 ZXMuDQotCSAqLw0KLQlmb3IgKGRwID0gZGV2c3c7ICpkcCAhPSAwOyBkcCsrKSB7DQotCQlpZiAo
 KCpkcCktPmR2X2luaXQgIT0gMCkNCi0JCQkoKmRwKS0+ZHZfaW5pdCgpOw0KLQl9DQotDQotCS8q
 DQogCSAqIFNldCB1cCB0aGUgY3VycmVudCBkZXZpY2UuDQogCSAqLw0KIAlPRl9nZXRwcm9wKGNo
 b3NlbiwgImJvb3RwYXRoIiwgYm9vdHBhdGgsIHNpemVvZihib290cGF0aCkpOw0KQEAgLTc4MCw3
 ICs4NjUsOCBAQCBtYWluKGludCAoKm9wZW5maXJtKSh2b2lkICopKQ0KIAkgKiBuZWVkcyB0byBi
 ZSBhbHRlcmVkLg0KIAkgKi8NCiAJaWYgKGJvb3RwYXRoW3N0cmxlbihib290cGF0aCkgLSAyXSA9
 PSAnOicgJiYNCi0JICAgIGJvb3RwYXRoW3N0cmxlbihib290cGF0aCkgLSAxXSA9PSAnZicpIHsN
 CisJICAgIGJvb3RwYXRoW3N0cmxlbihib290cGF0aCkgLSAxXSA9PSAnZicgJiYNCisJICAgIHN0
 cnN0cihib290cGF0aCwgImNkcm9tIikpIHsNCiAJCWJvb3RwYXRoW3N0cmxlbihib290cGF0aCkg
 LSAxXSA9ICdhJzsNCiAJCXByaW50ZigiQm9vdCBwYXRoIHNldCB0byAlc1xuIiwgYm9vdHBhdGgp
 Ow0KIAl9DQpAQCAtNzkwLDYgKzg3NiwyMCBAQCBtYWluKGludCAoKm9wZW5maXJtKSh2b2lkICop
 KQ0KIAllbnZfc2V0ZW52KCJsb2FkZGV2IiwgRVZfVk9MQVRJTEUsIGJvb3RwYXRoLA0KIAkgICAg
 ZW52X25vc2V0LCBlbnZfbm91bnNldCk7DQogDQorI2lmZGVmIExPQURFUl9aRlNfU1VQUE9SVA0K
 KwkvKg0KKwkgKiBvdmVyd3JpdGUgdG8gdXNlIG91ciBzcGVjaWZpYyBzcGFyYyB2ZXJzaW9uDQor
 CSAqLw0KKwl6ZnNfZGV2LmR2X2luaXQgPSBzcGFyY196ZnNfZGV2X2luaXQ7DQorI2VuZGlmDQor
 CS8qDQorCSAqIEluaXRpYWxpemUgZGV2aWNlcy4NCisJICovDQorCWZvciAoZHAgPSBkZXZzdzsg
 KmRwICE9IDA7IGRwKyspIHsNCisJCWlmICgoKmRwKS0+ZHZfaW5pdCAhPSAwKQ0KKwkJCSgqZHAp
 LT5kdl9pbml0KCk7DQorCX0NCisNCiAJcHJpbnRmKCJcbiIpOw0KIAlwcmludGYoIiVzLCBSZXZp
 c2lvbiAlc1xuIiwgYm9vdHByb2dfbmFtZSwgYm9vdHByb2dfcmV2KTsNCiAJcHJpbnRmKCIoJXMs
 ICVzKVxuIiwgYm9vdHByb2dfbWFrZXIsIGJvb3Rwcm9nX2RhdGUpOw0KQEAgLTgwMCw2ICs5MDAs
 MTggQEAgbWFpbihpbnQgKCpvcGVuZmlybSkodm9pZCAqKSkNCiAJcmV0dXJuICgxKTsNCiB9DQog
 DQorQ09NTUFORF9TRVQoaGVhcCwgImhlYXAiLCAic2hvdyBoZWFwIHVzYWdlIiwgY29tbWFuZF9o
 ZWFwKTsNCisNCitzdGF0aWMgaW50DQorY29tbWFuZF9oZWFwKGludCBhcmdjLCBjaGFyICphcmd2
 W10pDQorew0KKwltYWxsb2NzdGF0cygpOw0KKwlwcmludGYoImhlYXAgYmFzZSBhdCAlcCwgdG9w
 IGF0ICVwLCB1cHBlciBsaW1pdCBhdCAlcFxuIiwgaGVhcHZhLA0KKwkgICAgICAgc2JyaygwKSwg
 aGVhcHZhICsgSEVBUFNaKTsNCisJcmV0dXJuKENNRF9PSyk7DQorfQ0KKw0KKw0KIENPTU1BTkRf
 U0VUKHJlYm9vdCwgInJlYm9vdCIsICJyZWJvb3QgdGhlIHN5c3RlbSIsIGNvbW1hbmRfcmVib290
 KTsNCiANCiBzdGF0aWMgaW50DQpkaWZmIC0tZ2l0IGEvc3lzL2Jvb3Qvc3BhcmM2NC96ZnNib290
 L01ha2VmaWxlIGIvc3lzL2Jvb3Qvc3BhcmM2NC96ZnNib290L01ha2VmaWxlDQpuZXcgZmlsZSBt
 b2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNDVjNDA5ZA0KLS0tIC9kZXYvbnVsbA0KKysrIGIv
 c3lzL2Jvb3Qvc3BhcmM2NC96ZnNib290L01ha2VmaWxlDQpAQCAtMCwwICsxLDkgQEANCisjICRG
 cmVlQlNEJA0KKw0KKy5QQVRIOiAgJHsuQ1VSRElSfS8uLi9ib290MQ0KKw0KK05FV1ZFUlNXSEFU
 PSAgICAiWkZTIGVuYWJsZWQgYm9vdHN0cmFwIGxvYWRlciIgc3BhcmM2NA0KK1pGU0JPT1Q9eWVz
 DQorDQorLmluY2x1ZGUgIiR7LkNVUkRJUn0vLi4vYm9vdDEvTWFrZWZpbGUiDQorDQpkaWZmIC0t
 Z2l0IGEvc3lzL2Jvb3Qvc3BhcmM2NC96ZnNsb2FkZXIvTWFrZWZpbGUgYi9zeXMvYm9vdC9zcGFy
 YzY0L3pmc2xvYWRlci9NYWtlZmlsZQ0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAw
 MDAuLjY2ODQzOTUNCi0tLSAvZGV2L251bGwNCisrKyBiL3N5cy9ib290L3NwYXJjNjQvemZzbG9h
 ZGVyL01ha2VmaWxlDQpAQCAtMCwwICsxLDExIEBADQorIyAkRnJlZUJTRCQNCisNCisuUEFUSDoJ
 JHsuQ1VSRElSfS8uLi9sb2FkZXINCisNCitQUk9HPQkJemZzbG9hZGVyDQorTkVXVkVSU1dIQVQ9
 CSJaRlMgZW5hYmxlZCBib290c3RyYXAgbG9hZGVyIiBzcGFyYzY0DQorTE9BREVSX1pGU19TVVBQ
 T1JUPXllcw0KK05PX01BTj15ZXMNCisNCisuaW5jbHVkZSAiJHsuQ1VSRElSfS8uLi9sb2FkZXIv
 TWFrZWZpbGUiDQorDQo=
 --f46d0446316891d03404b9f32c5d--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201202271450.q1REo80o002752>