From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MhOc6-0002IR-5f for qemu-devel@nongnu.org; Sat, 29 Aug 2009 10:09:06 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MhOc1-0002Gb-43 for qemu-devel@nongnu.org; Sat, 29 Aug 2009 10:09:05 -0400 Received: from [199.232.76.173] (port=47303 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MhOc0-0002GS-Uh for qemu-devel@nongnu.org; Sat, 29 Aug 2009 10:09:01 -0400 Received: from mail-ew0-f223.google.com ([209.85.219.223]:56390) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MhObz-0003lq-DF for qemu-devel@nongnu.org; Sat, 29 Aug 2009 10:09:00 -0400 Received: by ewy23 with SMTP id 23so3203536ewy.8 for ; Sat, 29 Aug 2009 07:08:58 -0700 (PDT) MIME-Version: 1.0 From: Blue Swirl Date: Sat, 29 Aug 2009 17:08:38 +0300 Message-ID: Content-Type: multipart/mixed; boundary=0015174c0ffa80ba9c047248573a Subject: [Qemu-devel] [PATCH, RFC 2/5] x86/Sparc32: use device info for pic and irq List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel --0015174c0ffa80ba9c047248573a Content-Type: text/plain; charset=UTF-8 Signed-off-by: Blue Swirl --- hw/an5206.c | 9 --------- hw/arm_pic.c | 10 ---------- hw/cris_pic_cpu.c | 5 ----- hw/i8259.c | 41 ++++++++++++++++++++++------------------- hw/microblaze_pic_cpu.c | 5 ----- hw/pc.h | 2 -- hw/shix.c | 10 ---------- hw/slavio_intctl.c | 16 ++++++---------- hw/sun4c_intctl.c | 6 ++++-- hw/sun4m.c | 15 +-------------- hw/sun4m.h | 8 -------- hw/sun4u.c | 8 -------- monitor.c | 4 ---- qemu-monitor.hx | 4 ---- 14 files changed, 33 insertions(+), 110 deletions(-) diff --git a/hw/an5206.c b/hw/an5206.c index d417d92..f2cf8ba 100644 --- a/hw/an5206.c +++ b/hw/an5206.c @@ -16,15 +16,6 @@ #define AN5206_MBAR_ADDR 0x10000000 #define AN5206_RAMBAR_ADDR 0x20000000 -/* Stub functions for hardware that doesn't exist. */ -void pic_info(Monitor *mon) -{ -} - -void irq_info(Monitor *mon) -{ -} - /* Board init. */ static void an5206_init(ram_addr_t ram_size, diff --git a/hw/arm_pic.c b/hw/arm_pic.c index f44568c..e4822f0 100644 --- a/hw/arm_pic.c +++ b/hw/arm_pic.c @@ -11,16 +11,6 @@ #include "pc.h" #include "arm-misc.h" -/* Stub functions for hardware that doesn't exist. */ -void pic_info(Monitor *mon) -{ -} - -void irq_info(Monitor *mon) -{ -} - - /* Input 0 is IRQ and input 1 is FIQ. */ static void arm_pic_cpu_handler(void *opaque, int irq, int level) { diff --git a/hw/cris_pic_cpu.c b/hw/cris_pic_cpu.c index a92d445..e4d7d1a 100644 --- a/hw/cris_pic_cpu.c +++ b/hw/cris_pic_cpu.c @@ -28,11 +28,6 @@ #define D(x) -void pic_info(Monitor *mon) -{} -void irq_info(Monitor *mon) -{} - static void cris_pic_cpu_handler(void *opaque, int irq, int level) { CPUState *env = (CPUState *)opaque; diff --git a/hw/i8259.c b/hw/i8259.c index 74acc39..5521c73 100644 --- a/hw/i8259.c +++ b/hw/i8259.c @@ -52,6 +52,13 @@ typedef struct PicState { uint8_t elcr; /* PIIX edge/trigger selection*/ uint8_t elcr_mask; PicState2 *pics_state; +#if defined(DEBUG_PIC) || defined (DEBUG_IRQ_COUNT) + int irq_level[16]; +#endif +#ifdef DEBUG_IRQ_COUNT + uint64_t irq_count[16]; +#endif + } PicState; struct PicState2 { @@ -62,13 +69,6 @@ struct PicState2 { void *irq_request_opaque; }; -#if defined(DEBUG_PIC) || defined (DEBUG_IRQ_COUNT) -static int irq_level[16]; -#endif -#ifdef DEBUG_IRQ_COUNT -static uint64_t irq_count[16]; -#endif - /* set irq level. If an edge is detected, then the IRR is set to 1 */ static inline void pic_set_irq1(PicState *s, int irq, int level) { @@ -183,14 +183,15 @@ static void i8259_set_irq(void *opaque, int irq, int level) PicState2 *s = opaque; #if defined(DEBUG_PIC) || defined(DEBUG_IRQ_COUNT) - if (level != irq_level[irq]) { + if (level != s->irq_level[irq]) { #if defined(DEBUG_PIC) printf("i8259_set_irq: irq=%d level=%d\n", irq, level); #endif - irq_level[irq] = level; + s->irq_level[irq] = level; #ifdef DEBUG_IRQ_COUNT - if (level == 1) - irq_count[irq]++; + if (level == 1) { + s->irq_count[irq]++; + } #endif } #endif @@ -506,16 +507,14 @@ static void pic_init1(int io_addr, int elcr_addr, PicState *s) qemu_register_reset(pic_reset, s); } -void pic_info(Monitor *mon) +static void pic_info(Monitor *mon, void *opaque) { + PicState2 *pic = opaque; int i; PicState *s; - if (!isa_pic) - return; - for(i=0;i<2;i++) { - s = &isa_pic->pics[i]; + s = &pic->pics[i]; monitor_printf(mon, "pic%d: irr=%02x imr=%02x isr=%02x hprio=%d " "irq_base=%02x rr_sel=%d elcr=%02x fnm=%d\n", i, s->irr, s->imr, s->isr, s->priority_add, @@ -524,19 +523,21 @@ void pic_info(Monitor *mon) } } -void irq_info(Monitor *mon) +static void irq_info(Monitor *mon, void *opaque) { #ifndef DEBUG_IRQ_COUNT monitor_printf(mon, "irq statistic code not compiled.\n"); #else int i; int64_t count; + PicState2 *pic = opaque; monitor_printf(mon, "IRQ statistics:\n"); for (i = 0; i < 16; i++) { - count = irq_count[i]; - if (count > 0) + count = pic->irq_count[i]; + if (count > 0) { monitor_printf(mon, "%2d: %" PRId64 "\n", i, count); + } } #endif } @@ -554,5 +555,7 @@ qemu_irq *i8259_init(qemu_irq parent_irq) s->pics[0].pics_state = s; s->pics[1].pics_state = s; isa_pic = s; + monitor_register_device_info("i8259.state", pic_info, s); + monitor_register_device_info("i8259.stats", irq_info, s); return qemu_allocate_irqs(i8259_set_irq, s, 16); } diff --git a/hw/microblaze_pic_cpu.c b/hw/microblaze_pic_cpu.c index 7c59382..cfd1a46 100644 --- a/hw/microblaze_pic_cpu.c +++ b/hw/microblaze_pic_cpu.c @@ -27,11 +27,6 @@ #define D(x) -void pic_info(Monitor *mon) -{} -void irq_info(Monitor *mon) -{} - static void microblaze_pic_cpu_handler(void *opaque, int irq, int level) { CPUState *env = (CPUState *)opaque; diff --git a/hw/pc.h b/hw/pc.h index 7ac2849..845f3e1 100644 --- a/hw/pc.h +++ b/hw/pc.h @@ -29,8 +29,6 @@ qemu_irq *i8259_init(qemu_irq parent_irq); int pic_read_irq(PicState2 *s); void pic_update_irq(PicState2 *s); uint32_t pic_intack_read(PicState2 *s); -void pic_info(Monitor *mon); -void irq_info(Monitor *mon); /* APIC */ typedef struct IOAPICState IOAPICState; diff --git a/hw/shix.c b/hw/shix.c index 19b0155..3c1212f 100644 --- a/hw/shix.c +++ b/hw/shix.c @@ -36,16 +36,6 @@ #define BIOS_FILENAME "shix_bios.bin" #define BIOS_ADDRESS 0xA0000000 -void irq_info(Monitor *mon) -{ - /* XXXXX */ -} - -void pic_info(Monitor *mon) -{ - /* XXXXX */ -} - static void shix_init(ram_addr_t ram_size, const char *boot_device, const char *kernel_filename, const char *kernel_cmdline, diff --git a/hw/slavio_intctl.c b/hw/slavio_intctl.c index 259e45e..df3c9ac 100644 --- a/hw/slavio_intctl.c +++ b/hw/slavio_intctl.c @@ -216,14 +216,11 @@ static CPUWriteMemoryFunc * const slavio_intctlm_mem_write[3] = { slavio_intctlm_mem_writel, }; -void slavio_pic_info(Monitor *mon, DeviceState *dev) +static void slavio_pic_info(Monitor *mon, void *opaque) { - SysBusDevice *sd; - SLAVIO_INTCTLState *s; + SLAVIO_INTCTLState *s = opaque; int i; - sd = sysbus_from_qdev(dev); - s = FROM_SYSBUS(SLAVIO_INTCTLState, sd); for (i = 0; i < MAX_CPUS; i++) { monitor_printf(mon, "per-cpu %d: pending 0x%08x\n", i, s->slaves[i].intreg_pending); @@ -232,18 +229,15 @@ void slavio_pic_info(Monitor *mon, DeviceState *dev) s->intregm_pending, s->intregm_disabled); } -void slavio_irq_info(Monitor *mon, DeviceState *dev) +static void slavio_irq_info(Monitor *mon, void *opaque) { #ifndef DEBUG_IRQ_COUNT monitor_printf(mon, "irq statistic code not compiled.\n"); #else - SysBusDevice *sd; - SLAVIO_INTCTLState *s; + SLAVIO_INTCTLState *s = opaque; int i; int64_t count; - sd = sysbus_from_qdev(dev); - s = FROM_SYSBUS(SLAVIO_INTCTLState, sd); monitor_printf(mon, "IRQ statistics:\n"); for (i = 0; i < 32; i++) { count = s->irq_count[i]; @@ -447,6 +441,8 @@ static int slavio_intctl_init1(SysBusDevice *dev) s->slaves[i].master = s; } vmstate_register(-1, &vmstate_intctl, s); + monitor_register_device_info("intctl.state", slavio_pic_info, s); + monitor_register_device_info("intctl.stats", slavio_irq_info, s); qemu_register_reset(slavio_intctl_reset, s); slavio_intctl_reset(s); return 0; diff --git a/hw/sun4c_intctl.c b/hw/sun4c_intctl.c index a0d0e97..729f29d 100644 --- a/hw/sun4c_intctl.c +++ b/hw/sun4c_intctl.c @@ -94,7 +94,7 @@ static CPUWriteMemoryFunc * const sun4c_intctl_mem_write[3] = { NULL, }; -void sun4c_pic_info(Monitor *mon, void *opaque) +static void sun4c_pic_info(Monitor *mon, void *opaque) { Sun4c_INTCTLState *s = opaque; @@ -102,7 +102,7 @@ void sun4c_pic_info(Monitor *mon, void *opaque) s->pending, s->reg); } -void sun4c_irq_info(Monitor *mon, void *opaque) +static void sun4c_irq_info(Monitor *mon, void *opaque) { #ifndef DEBUG_IRQ_COUNT monitor_printf(mon, "irq statistic code not compiled.\n"); @@ -214,6 +214,8 @@ static int sun4c_intctl_init1(SysBusDevice *dev) } register_savevm("sun4c_intctl", -1, 1, sun4c_intctl_save, sun4c_intctl_load, s); + monitor_register_device_info("intctl.state", sun4c_pic_info, s); + monitor_register_device_info("intctl.stats", sun4c_irq_info, s); qemu_register_reset(sun4c_intctl_reset, s); sun4c_intctl_reset(s); return 0; diff --git a/hw/sun4m.c b/hw/sun4m.c index d970723..d1237a6 100644 --- a/hw/sun4m.c +++ b/hw/sun4m.c @@ -209,20 +209,6 @@ static void nvram_init(m48t59_t *nvram, uint8_t *macaddr, const char *cmdline, m48t59_write(nvram, i, image[i]); } -static DeviceState *slavio_intctl; - -void pic_info(Monitor *mon) -{ - if (slavio_intctl) - slavio_pic_info(mon, slavio_intctl); -} - -void irq_info(Monitor *mon) -{ - if (slavio_intctl) - slavio_irq_info(mon, slavio_intctl); -} - void cpu_check_irqs(CPUState *env) { if (env->pil_in && (env->interrupt_index == 0 || @@ -750,6 +736,7 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size, BlockDriverState *fd[MAX_FD]; void *fw_cfg; DriveInfo *dinfo; + DeviceState *slavio_intctl; /* init CPUs */ if (!cpu_model) diff --git a/hw/sun4m.h b/hw/sun4m.h index ce97ee5..b204cc1 100644 --- a/hw/sun4m.h +++ b/hw/sun4m.h @@ -22,14 +22,6 @@ static inline void sparc_iommu_memory_write(void *opaque, sparc_iommu_memory_rw(opaque, addr, buf, len, 1); } -/* slavio_intctl.c */ -void slavio_pic_info(Monitor *mon, DeviceState *dev); -void slavio_irq_info(Monitor *mon, DeviceState *dev); - -/* sun4c_intctl.c */ -void sun4c_pic_info(Monitor *mon, void *opaque); -void sun4c_irq_info(Monitor *mon, void *opaque); - /* sparc32_dma.c */ #include "sparc32_dma.h" diff --git a/hw/sun4u.c b/hw/sun4u.c index ece83e6..9cf4fdc 100644 --- a/hw/sun4u.c +++ b/hw/sun4u.c @@ -203,14 +203,6 @@ static unsigned long sun4u_load_kernel(const char *kernel_filename, return kernel_size; } -void pic_info(Monitor *mon) -{ -} - -void irq_info(Monitor *mon) -{ -} - void cpu_check_irqs(CPUState *env) { uint32_t pil = env->pil_in | (env->softint & ~SOFTINT_TIMER) | diff --git a/monitor.c b/monitor.c index 24e817f..d5b39eb 100644 --- a/monitor.c +++ b/monitor.c @@ -1799,10 +1799,6 @@ static const mon_cmd_t info_cmds[] = { "", "show infos for each CPU" }, { "history", "", do_info_history, "", "show the command line history", }, - { "irq", "", irq_info, - "", "show the interrupts statistics (if available)", }, - { "pic", "", pic_info, - "", "show i8259 (PIC) state", }, { "pci", "", pci_info, "", "show PCI info", }, #if defined(TARGET_I386) || defined(TARGET_SH4) diff --git a/qemu-monitor.hx b/qemu-monitor.hx index 80d07b5..2026921 100644 --- a/qemu-monitor.hx +++ b/qemu-monitor.hx @@ -45,10 +45,6 @@ show the cpu registers show infos for each CPU @item info history show the command line history -@item info irq -show the interrupts statistics (if available) -@item info pic -show i8259 (PIC) state @item info pci show emulated PCI device info @item info tlb -- 1.6.2.4 --0015174c0ffa80ba9c047248573a Content-Type: application/mbox; name="0002-x86-Sparc32-use-device-info-for-pic-and-irq.patch" Content-Disposition: attachment; filename="0002-x86-Sparc32-use-device-info-for-pic-and-irq.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fyyfgfxk0 RnJvbSBlNmFjNTJiZjlmMTUxNWIzMmY4ZjUzMTBhMzYyZWE1YzI3NjdiNTQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCbHVlIFN3aXJsIDxibGF1d2lyYmVsQGdtYWlsLmNvbT4KRGF0 ZTogU2F0LCAyOSBBdWcgMjAwOSAxNDowMTo0MSArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIHg4Ni9T cGFyYzMyOiB1c2UgZGV2aWNlIGluZm8gZm9yIHBpYyBhbmQgaXJxCgpTaWduZWQtb2ZmLWJ5OiBC bHVlIFN3aXJsIDxibGF1d2lyYmVsQGdtYWlsLmNvbT4KLS0tCiBody9hbjUyMDYuYyAgICAgICAg ICAgICB8ICAgIDkgLS0tLS0tLS0tCiBody9hcm1fcGljLmMgICAgICAgICAgICB8ICAgMTAgLS0t LS0tLS0tLQogaHcvY3Jpc19waWNfY3B1LmMgICAgICAgfCAgICA1IC0tLS0tCiBody9pODI1OS5j ICAgICAgICAgICAgICB8ICAgNDEgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0KIGh3L21pY3JvYmxhemVfcGljX2NwdS5jIHwgICAgNSAtLS0tLQogaHcvcGMuaCAgICAg ICAgICAgICAgICAgfCAgICAyIC0tCiBody9zaGl4LmMgICAgICAgICAgICAgICB8ICAgMTAgLS0t LS0tLS0tLQogaHcvc2xhdmlvX2ludGN0bC5jICAgICAgfCAgIDE2ICsrKysrKy0tLS0tLS0tLS0K IGh3L3N1bjRjX2ludGN0bC5jICAgICAgIHwgICAgNiArKysrLS0KIGh3L3N1bjRtLmMgICAgICAg ICAgICAgIHwgICAxNSArLS0tLS0tLS0tLS0tLS0KIGh3L3N1bjRtLmggICAgICAgICAgICAgIHwg ICAgOCAtLS0tLS0tLQogaHcvc3VuNHUuYyAgICAgICAgICAgICAgfCAgICA4IC0tLS0tLS0tCiBt b25pdG9yLmMgICAgICAgICAgICAgICB8ICAgIDQgLS0tLQogcWVtdS1tb25pdG9yLmh4ICAgICAg ICAgfCAgICA0IC0tLS0KIDE0IGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDExMCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9ody9hbjUyMDYuYyBiL2h3L2FuNTIwNi5jCmluZGV4 IGQ0MTdkOTIuLmYyY2Y4YmEgMTAwNjQ0Ci0tLSBhL2h3L2FuNTIwNi5jCisrKyBiL2h3L2FuNTIw Ni5jCkBAIC0xNiwxNSArMTYsNiBAQAogI2RlZmluZSBBTjUyMDZfTUJBUl9BRERSIDB4MTAwMDAw MDAKICNkZWZpbmUgQU41MjA2X1JBTUJBUl9BRERSIDB4MjAwMDAwMDAKIAotLyogU3R1YiBmdW5j dGlvbnMgZm9yIGhhcmR3YXJlIHRoYXQgZG9lc24ndCBleGlzdC4gICovCi12b2lkIHBpY19pbmZv KE1vbml0b3IgKm1vbikKLXsKLX0KLQotdm9pZCBpcnFfaW5mbyhNb25pdG9yICptb24pCi17Ci19 Ci0KIC8qIEJvYXJkIGluaXQuICAqLwogCiBzdGF0aWMgdm9pZCBhbjUyMDZfaW5pdChyYW1fYWRk cl90IHJhbV9zaXplLApkaWZmIC0tZ2l0IGEvaHcvYXJtX3BpYy5jIGIvaHcvYXJtX3BpYy5jCmlu ZGV4IGY0NDU2OGMuLmU0ODIyZjAgMTAwNjQ0Ci0tLSBhL2h3L2FybV9waWMuYworKysgYi9ody9h cm1fcGljLmMKQEAgLTExLDE2ICsxMSw2IEBACiAjaW5jbHVkZSAicGMuaCIKICNpbmNsdWRlICJh cm0tbWlzYy5oIgogCi0vKiBTdHViIGZ1bmN0aW9ucyBmb3IgaGFyZHdhcmUgdGhhdCBkb2Vzbid0 IGV4aXN0LiAgKi8KLXZvaWQgcGljX2luZm8oTW9uaXRvciAqbW9uKQotewotfQotCi12b2lkIGly cV9pbmZvKE1vbml0b3IgKm1vbikKLXsKLX0KLQotCiAvKiBJbnB1dCAwIGlzIElSUSBhbmQgaW5w dXQgMSBpcyBGSVEuICAqLwogc3RhdGljIHZvaWQgYXJtX3BpY19jcHVfaGFuZGxlcih2b2lkICpv cGFxdWUsIGludCBpcnEsIGludCBsZXZlbCkKIHsKZGlmZiAtLWdpdCBhL2h3L2NyaXNfcGljX2Nw dS5jIGIvaHcvY3Jpc19waWNfY3B1LmMKaW5kZXggYTkyZDQ0NS4uZTRkN2QxYSAxMDA2NDQKLS0t IGEvaHcvY3Jpc19waWNfY3B1LmMKKysrIGIvaHcvY3Jpc19waWNfY3B1LmMKQEAgLTI4LDExICsy OCw2IEBACiAKICNkZWZpbmUgRCh4KQogCi12b2lkIHBpY19pbmZvKE1vbml0b3IgKm1vbikKLXt9 Ci12b2lkIGlycV9pbmZvKE1vbml0b3IgKm1vbikKLXt9Ci0KIHN0YXRpYyB2b2lkIGNyaXNfcGlj X2NwdV9oYW5kbGVyKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKQogewogICAgIENQ VVN0YXRlICplbnYgPSAoQ1BVU3RhdGUgKilvcGFxdWU7CmRpZmYgLS1naXQgYS9ody9pODI1OS5j IGIvaHcvaTgyNTkuYwppbmRleCA3NGFjYzM5Li41NTIxYzczIDEwMDY0NAotLS0gYS9ody9pODI1 OS5jCisrKyBiL2h3L2k4MjU5LmMKQEAgLTUyLDYgKzUyLDEzIEBAIHR5cGVkZWYgc3RydWN0IFBp Y1N0YXRlIHsKICAgICB1aW50OF90IGVsY3I7IC8qIFBJSVggZWRnZS90cmlnZ2VyIHNlbGVjdGlv biovCiAgICAgdWludDhfdCBlbGNyX21hc2s7CiAgICAgUGljU3RhdGUyICpwaWNzX3N0YXRlOwor I2lmIGRlZmluZWQoREVCVUdfUElDKSB8fCBkZWZpbmVkIChERUJVR19JUlFfQ09VTlQpCisgICAg aW50IGlycV9sZXZlbFsxNl07CisjZW5kaWYKKyNpZmRlZiBERUJVR19JUlFfQ09VTlQKKyAgICB1 aW50NjRfdCBpcnFfY291bnRbMTZdOworI2VuZGlmCisKIH0gUGljU3RhdGU7CiAKIHN0cnVjdCBQ aWNTdGF0ZTIgewpAQCAtNjIsMTMgKzY5LDYgQEAgc3RydWN0IFBpY1N0YXRlMiB7CiAgICAgdm9p ZCAqaXJxX3JlcXVlc3Rfb3BhcXVlOwogfTsKIAotI2lmIGRlZmluZWQoREVCVUdfUElDKSB8fCBk ZWZpbmVkIChERUJVR19JUlFfQ09VTlQpCi1zdGF0aWMgaW50IGlycV9sZXZlbFsxNl07Ci0jZW5k aWYKLSNpZmRlZiBERUJVR19JUlFfQ09VTlQKLXN0YXRpYyB1aW50NjRfdCBpcnFfY291bnRbMTZd OwotI2VuZGlmCi0KIC8qIHNldCBpcnEgbGV2ZWwuIElmIGFuIGVkZ2UgaXMgZGV0ZWN0ZWQsIHRo ZW4gdGhlIElSUiBpcyBzZXQgdG8gMSAqLwogc3RhdGljIGlubGluZSB2b2lkIHBpY19zZXRfaXJx MShQaWNTdGF0ZSAqcywgaW50IGlycSwgaW50IGxldmVsKQogewpAQCAtMTgzLDE0ICsxODMsMTUg QEAgc3RhdGljIHZvaWQgaTgyNTlfc2V0X2lycSh2b2lkICpvcGFxdWUsIGludCBpcnEsIGludCBs ZXZlbCkKICAgICBQaWNTdGF0ZTIgKnMgPSBvcGFxdWU7CiAKICNpZiBkZWZpbmVkKERFQlVHX1BJ QykgfHwgZGVmaW5lZChERUJVR19JUlFfQ09VTlQpCi0gICAgaWYgKGxldmVsICE9IGlycV9sZXZl bFtpcnFdKSB7CisgICAgaWYgKGxldmVsICE9IHMtPmlycV9sZXZlbFtpcnFdKSB7CiAjaWYgZGVm aW5lZChERUJVR19QSUMpCiAgICAgICAgIHByaW50ZigiaTgyNTlfc2V0X2lycTogaXJxPSVkIGxl dmVsPSVkXG4iLCBpcnEsIGxldmVsKTsKICNlbmRpZgotICAgICAgICBpcnFfbGV2ZWxbaXJxXSA9 IGxldmVsOworICAgICAgICBzLT5pcnFfbGV2ZWxbaXJxXSA9IGxldmVsOwogI2lmZGVmIERFQlVH X0lSUV9DT1VOVAotCWlmIChsZXZlbCA9PSAxKQotCSAgICBpcnFfY291bnRbaXJxXSsrOworICAg ICAgICBpZiAobGV2ZWwgPT0gMSkgeworICAgICAgICAgICAgcy0+aXJxX2NvdW50W2lycV0rKzsK KyAgICAgICAgfQogI2VuZGlmCiAgICAgfQogI2VuZGlmCkBAIC01MDYsMTYgKzUwNywxNCBAQCBz dGF0aWMgdm9pZCBwaWNfaW5pdDEoaW50IGlvX2FkZHIsIGludCBlbGNyX2FkZHIsIFBpY1N0YXRl ICpzKQogICAgIHFlbXVfcmVnaXN0ZXJfcmVzZXQocGljX3Jlc2V0LCBzKTsKIH0KIAotdm9pZCBw aWNfaW5mbyhNb25pdG9yICptb24pCitzdGF0aWMgdm9pZCBwaWNfaW5mbyhNb25pdG9yICptb24s IHZvaWQgKm9wYXF1ZSkKIHsKKyAgICBQaWNTdGF0ZTIgKnBpYyA9IG9wYXF1ZTsKICAgICBpbnQg aTsKICAgICBQaWNTdGF0ZSAqczsKIAotICAgIGlmICghaXNhX3BpYykKLSAgICAgICAgcmV0dXJu OwotCiAgICAgZm9yKGk9MDtpPDI7aSsrKSB7Ci0gICAgICAgIHMgPSAmaXNhX3BpYy0+cGljc1tp XTsKKyAgICAgICAgcyA9ICZwaWMtPnBpY3NbaV07CiAgICAgICAgIG1vbml0b3JfcHJpbnRmKG1v biwgInBpYyVkOiBpcnI9JTAyeCBpbXI9JTAyeCBpc3I9JTAyeCBocHJpbz0lZCAiCiAgICAgICAg ICAgICAgICAgICAgICAgICJpcnFfYmFzZT0lMDJ4IHJyX3NlbD0lZCBlbGNyPSUwMnggZm5tPSVk XG4iLAogICAgICAgICAgICAgICAgICAgICAgICBpLCBzLT5pcnIsIHMtPmltciwgcy0+aXNyLCBz LT5wcmlvcml0eV9hZGQsCkBAIC01MjQsMTkgKzUyMywyMSBAQCB2b2lkIHBpY19pbmZvKE1vbml0 b3IgKm1vbikKICAgICB9CiB9CiAKLXZvaWQgaXJxX2luZm8oTW9uaXRvciAqbW9uKQorc3RhdGlj IHZvaWQgaXJxX2luZm8oTW9uaXRvciAqbW9uLCB2b2lkICpvcGFxdWUpCiB7CiAjaWZuZGVmIERF QlVHX0lSUV9DT1VOVAogICAgIG1vbml0b3JfcHJpbnRmKG1vbiwgImlycSBzdGF0aXN0aWMgY29k ZSBub3QgY29tcGlsZWQuXG4iKTsKICNlbHNlCiAgICAgaW50IGk7CiAgICAgaW50NjRfdCBjb3Vu dDsKKyAgICBQaWNTdGF0ZTIgKnBpYyA9IG9wYXF1ZTsKIAogICAgIG1vbml0b3JfcHJpbnRmKG1v biwgIklSUSBzdGF0aXN0aWNzOlxuIik7CiAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsK LSAgICAgICAgY291bnQgPSBpcnFfY291bnRbaV07Ci0gICAgICAgIGlmIChjb3VudCA+IDApCisg ICAgICAgIGNvdW50ID0gcGljLT5pcnFfY291bnRbaV07CisgICAgICAgIGlmIChjb3VudCA+IDAp IHsKICAgICAgICAgICAgIG1vbml0b3JfcHJpbnRmKG1vbiwgIiUyZDogJSIgUFJJZDY0ICJcbiIs IGksIGNvdW50KTsKKyAgICAgICAgfQogICAgIH0KICNlbmRpZgogfQpAQCAtNTU0LDUgKzU1NSw3 IEBAIHFlbXVfaXJxICppODI1OV9pbml0KHFlbXVfaXJxIHBhcmVudF9pcnEpCiAgICAgcy0+cGlj c1swXS5waWNzX3N0YXRlID0gczsKICAgICBzLT5waWNzWzFdLnBpY3Nfc3RhdGUgPSBzOwogICAg IGlzYV9waWMgPSBzOworICAgIG1vbml0b3JfcmVnaXN0ZXJfZGV2aWNlX2luZm8oImk4MjU5LnN0 YXRlIiwgcGljX2luZm8sIHMpOworICAgIG1vbml0b3JfcmVnaXN0ZXJfZGV2aWNlX2luZm8oImk4 MjU5LnN0YXRzIiwgaXJxX2luZm8sIHMpOwogICAgIHJldHVybiBxZW11X2FsbG9jYXRlX2lycXMo aTgyNTlfc2V0X2lycSwgcywgMTYpOwogfQpkaWZmIC0tZ2l0IGEvaHcvbWljcm9ibGF6ZV9waWNf Y3B1LmMgYi9ody9taWNyb2JsYXplX3BpY19jcHUuYwppbmRleCA3YzU5MzgyLi5jZmQxYTQ2IDEw MDY0NAotLS0gYS9ody9taWNyb2JsYXplX3BpY19jcHUuYworKysgYi9ody9taWNyb2JsYXplX3Bp Y19jcHUuYwpAQCAtMjcsMTEgKzI3LDYgQEAKIAogI2RlZmluZSBEKHgpCiAKLXZvaWQgcGljX2lu Zm8oTW9uaXRvciAqbW9uKQote30KLXZvaWQgaXJxX2luZm8oTW9uaXRvciAqbW9uKQote30KLQog c3RhdGljIHZvaWQgbWljcm9ibGF6ZV9waWNfY3B1X2hhbmRsZXIodm9pZCAqb3BhcXVlLCBpbnQg aXJxLCBpbnQgbGV2ZWwpCiB7CiAgICAgQ1BVU3RhdGUgKmVudiA9IChDUFVTdGF0ZSAqKW9wYXF1 ZTsKZGlmZiAtLWdpdCBhL2h3L3BjLmggYi9ody9wYy5oCmluZGV4IDdhYzI4NDkuLjg0NWYzZTEg MTAwNjQ0Ci0tLSBhL2h3L3BjLmgKKysrIGIvaHcvcGMuaApAQCAtMjksOCArMjksNiBAQCBxZW11 X2lycSAqaTgyNTlfaW5pdChxZW11X2lycSBwYXJlbnRfaXJxKTsKIGludCBwaWNfcmVhZF9pcnEo UGljU3RhdGUyICpzKTsKIHZvaWQgcGljX3VwZGF0ZV9pcnEoUGljU3RhdGUyICpzKTsKIHVpbnQz Ml90IHBpY19pbnRhY2tfcmVhZChQaWNTdGF0ZTIgKnMpOwotdm9pZCBwaWNfaW5mbyhNb25pdG9y ICptb24pOwotdm9pZCBpcnFfaW5mbyhNb25pdG9yICptb24pOwogCiAvKiBBUElDICovCiB0eXBl ZGVmIHN0cnVjdCBJT0FQSUNTdGF0ZSBJT0FQSUNTdGF0ZTsKZGlmZiAtLWdpdCBhL2h3L3NoaXgu YyBiL2h3L3NoaXguYwppbmRleCAxOWIwMTU1Li4zYzEyMTJmIDEwMDY0NAotLS0gYS9ody9zaGl4 LmMKKysrIGIvaHcvc2hpeC5jCkBAIC0zNiwxNiArMzYsNiBAQAogI2RlZmluZSBCSU9TX0ZJTEVO QU1FICJzaGl4X2Jpb3MuYmluIgogI2RlZmluZSBCSU9TX0FERFJFU1MgMHhBMDAwMDAwMAogCi12 b2lkIGlycV9pbmZvKE1vbml0b3IgKm1vbikKLXsKLSAgICAvKiBYWFhYWCAqLwotfQotCi12b2lk IHBpY19pbmZvKE1vbml0b3IgKm1vbikKLXsKLSAgICAvKiBYWFhYWCAqLwotfQotCiBzdGF0aWMg dm9pZCBzaGl4X2luaXQocmFtX2FkZHJfdCByYW1fc2l6ZSwKICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmJvb3RfZGV2aWNlLAogCSAgICAgICBjb25zdCBjaGFyICprZXJuZWxfZmlsZW5hbWUs IGNvbnN0IGNoYXIgKmtlcm5lbF9jbWRsaW5lLApkaWZmIC0tZ2l0IGEvaHcvc2xhdmlvX2ludGN0 bC5jIGIvaHcvc2xhdmlvX2ludGN0bC5jCmluZGV4IDI1OWU0NWUuLmRmM2M5YWMgMTAwNjQ0Ci0t LSBhL2h3L3NsYXZpb19pbnRjdGwuYworKysgYi9ody9zbGF2aW9faW50Y3RsLmMKQEAgLTIxNiwx NCArMjE2LDExIEBAIHN0YXRpYyBDUFVXcml0ZU1lbW9yeUZ1bmMgKiBjb25zdCBzbGF2aW9faW50 Y3RsbV9tZW1fd3JpdGVbM10gPSB7CiAgICAgc2xhdmlvX2ludGN0bG1fbWVtX3dyaXRlbCwKIH07 CiAKLXZvaWQgc2xhdmlvX3BpY19pbmZvKE1vbml0b3IgKm1vbiwgRGV2aWNlU3RhdGUgKmRldikK K3N0YXRpYyB2b2lkIHNsYXZpb19waWNfaW5mbyhNb25pdG9yICptb24sIHZvaWQgKm9wYXF1ZSkK IHsKLSAgICBTeXNCdXNEZXZpY2UgKnNkOwotICAgIFNMQVZJT19JTlRDVExTdGF0ZSAqczsKKyAg ICBTTEFWSU9fSU5UQ1RMU3RhdGUgKnMgPSBvcGFxdWU7CiAgICAgaW50IGk7CiAKLSAgICBzZCA9 IHN5c2J1c19mcm9tX3FkZXYoZGV2KTsKLSAgICBzID0gRlJPTV9TWVNCVVMoU0xBVklPX0lOVENU TFN0YXRlLCBzZCk7CiAgICAgZm9yIChpID0gMDsgaSA8IE1BWF9DUFVTOyBpKyspIHsKICAgICAg ICAgbW9uaXRvcl9wcmludGYobW9uLCAicGVyLWNwdSAlZDogcGVuZGluZyAweCUwOHhcbiIsIGks CiAgICAgICAgICAgICAgICAgICAgICAgIHMtPnNsYXZlc1tpXS5pbnRyZWdfcGVuZGluZyk7CkBA IC0yMzIsMTggKzIyOSwxNSBAQCB2b2lkIHNsYXZpb19waWNfaW5mbyhNb25pdG9yICptb24sIERl dmljZVN0YXRlICpkZXYpCiAgICAgICAgICAgICAgICAgICAgcy0+aW50cmVnbV9wZW5kaW5nLCBz LT5pbnRyZWdtX2Rpc2FibGVkKTsKIH0KIAotdm9pZCBzbGF2aW9faXJxX2luZm8oTW9uaXRvciAq bW9uLCBEZXZpY2VTdGF0ZSAqZGV2KQorc3RhdGljIHZvaWQgc2xhdmlvX2lycV9pbmZvKE1vbml0 b3IgKm1vbiwgdm9pZCAqb3BhcXVlKQogewogI2lmbmRlZiBERUJVR19JUlFfQ09VTlQKICAgICBt b25pdG9yX3ByaW50Zihtb24sICJpcnEgc3RhdGlzdGljIGNvZGUgbm90IGNvbXBpbGVkLlxuIik7 CiAjZWxzZQotICAgIFN5c0J1c0RldmljZSAqc2Q7Ci0gICAgU0xBVklPX0lOVENUTFN0YXRlICpz OworICAgIFNMQVZJT19JTlRDVExTdGF0ZSAqcyA9IG9wYXF1ZTsKICAgICBpbnQgaTsKICAgICBp bnQ2NF90IGNvdW50OwogCi0gICAgc2QgPSBzeXNidXNfZnJvbV9xZGV2KGRldik7Ci0gICAgcyA9 IEZST01fU1lTQlVTKFNMQVZJT19JTlRDVExTdGF0ZSwgc2QpOwogICAgIG1vbml0b3JfcHJpbnRm KG1vbiwgIklSUSBzdGF0aXN0aWNzOlxuIik7CiAgICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKysp IHsKICAgICAgICAgY291bnQgPSBzLT5pcnFfY291bnRbaV07CkBAIC00NDcsNiArNDQxLDggQEAg c3RhdGljIGludCBzbGF2aW9faW50Y3RsX2luaXQxKFN5c0J1c0RldmljZSAqZGV2KQogICAgICAg ICBzLT5zbGF2ZXNbaV0ubWFzdGVyID0gczsKICAgICB9CiAgICAgdm1zdGF0ZV9yZWdpc3Rlcigt MSwgJnZtc3RhdGVfaW50Y3RsLCBzKTsKKyAgICBtb25pdG9yX3JlZ2lzdGVyX2RldmljZV9pbmZv KCJpbnRjdGwuc3RhdGUiLCBzbGF2aW9fcGljX2luZm8sIHMpOworICAgIG1vbml0b3JfcmVnaXN0 ZXJfZGV2aWNlX2luZm8oImludGN0bC5zdGF0cyIsIHNsYXZpb19pcnFfaW5mbywgcyk7CiAgICAg cWVtdV9yZWdpc3Rlcl9yZXNldChzbGF2aW9faW50Y3RsX3Jlc2V0LCBzKTsKICAgICBzbGF2aW9f aW50Y3RsX3Jlc2V0KHMpOwogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaHcvc3VuNGNfaW50 Y3RsLmMgYi9ody9zdW40Y19pbnRjdGwuYwppbmRleCBhMGQwZTk3Li43MjlmMjlkIDEwMDY0NAot LS0gYS9ody9zdW40Y19pbnRjdGwuYworKysgYi9ody9zdW40Y19pbnRjdGwuYwpAQCAtOTQsNyAr OTQsNyBAQCBzdGF0aWMgQ1BVV3JpdGVNZW1vcnlGdW5jICogY29uc3Qgc3VuNGNfaW50Y3RsX21l bV93cml0ZVszXSA9IHsKICAgICBOVUxMLAogfTsKIAotdm9pZCBzdW40Y19waWNfaW5mbyhNb25p dG9yICptb24sIHZvaWQgKm9wYXF1ZSkKK3N0YXRpYyB2b2lkIHN1bjRjX3BpY19pbmZvKE1vbml0 b3IgKm1vbiwgdm9pZCAqb3BhcXVlKQogewogICAgIFN1bjRjX0lOVENUTFN0YXRlICpzID0gb3Bh cXVlOwogCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBzdW40Y19waWNfaW5mbyhNb25pdG9yICpt b24sIHZvaWQgKm9wYXF1ZSkKICAgICAgICAgICAgICAgICAgICBzLT5wZW5kaW5nLCBzLT5yZWcp OwogfQogCi12b2lkIHN1bjRjX2lycV9pbmZvKE1vbml0b3IgKm1vbiwgdm9pZCAqb3BhcXVlKQor c3RhdGljIHZvaWQgc3VuNGNfaXJxX2luZm8oTW9uaXRvciAqbW9uLCB2b2lkICpvcGFxdWUpCiB7 CiAjaWZuZGVmIERFQlVHX0lSUV9DT1VOVAogICAgIG1vbml0b3JfcHJpbnRmKG1vbiwgImlycSBz dGF0aXN0aWMgY29kZSBub3QgY29tcGlsZWQuXG4iKTsKQEAgLTIxNCw2ICsyMTQsOCBAQCBzdGF0 aWMgaW50IHN1bjRjX2ludGN0bF9pbml0MShTeXNCdXNEZXZpY2UgKmRldikKICAgICB9CiAgICAg cmVnaXN0ZXJfc2F2ZXZtKCJzdW40Y19pbnRjdGwiLCAtMSwgMSwgc3VuNGNfaW50Y3RsX3NhdmUs CiAgICAgICAgICAgICAgICAgICAgIHN1bjRjX2ludGN0bF9sb2FkLCBzKTsKKyAgICBtb25pdG9y X3JlZ2lzdGVyX2RldmljZV9pbmZvKCJpbnRjdGwuc3RhdGUiLCBzdW40Y19waWNfaW5mbywgcyk7 CisgICAgbW9uaXRvcl9yZWdpc3Rlcl9kZXZpY2VfaW5mbygiaW50Y3RsLnN0YXRzIiwgc3VuNGNf aXJxX2luZm8sIHMpOwogICAgIHFlbXVfcmVnaXN0ZXJfcmVzZXQoc3VuNGNfaW50Y3RsX3Jlc2V0 LCBzKTsKICAgICBzdW40Y19pbnRjdGxfcmVzZXQocyk7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1n aXQgYS9ody9zdW40bS5jIGIvaHcvc3VuNG0uYwppbmRleCBkOTcwNzIzLi5kMTIzN2E2IDEwMDY0 NAotLS0gYS9ody9zdW40bS5jCisrKyBiL2h3L3N1bjRtLmMKQEAgLTIwOSwyMCArMjA5LDYgQEAg c3RhdGljIHZvaWQgbnZyYW1faW5pdChtNDh0NTlfdCAqbnZyYW0sIHVpbnQ4X3QgKm1hY2FkZHIs IGNvbnN0IGNoYXIgKmNtZGxpbmUsCiAgICAgICAgIG00OHQ1OV93cml0ZShudnJhbSwgaSwgaW1h Z2VbaV0pOwogfQogCi1zdGF0aWMgRGV2aWNlU3RhdGUgKnNsYXZpb19pbnRjdGw7Ci0KLXZvaWQg cGljX2luZm8oTW9uaXRvciAqbW9uKQotewotICAgIGlmIChzbGF2aW9faW50Y3RsKQotICAgICAg ICBzbGF2aW9fcGljX2luZm8obW9uLCBzbGF2aW9faW50Y3RsKTsKLX0KLQotdm9pZCBpcnFfaW5m byhNb25pdG9yICptb24pCi17Ci0gICAgaWYgKHNsYXZpb19pbnRjdGwpCi0gICAgICAgIHNsYXZp b19pcnFfaW5mbyhtb24sIHNsYXZpb19pbnRjdGwpOwotfQotCiB2b2lkIGNwdV9jaGVja19pcnFz KENQVVN0YXRlICplbnYpCiB7CiAgICAgaWYgKGVudi0+cGlsX2luICYmIChlbnYtPmludGVycnVw dF9pbmRleCA9PSAwIHx8CkBAIC03NTAsNiArNzM2LDcgQEAgc3RhdGljIHZvaWQgc3VuNG1faHdf aW5pdChjb25zdCBzdHJ1Y3Qgc3VuNG1faHdkZWYgKmh3ZGVmLCByYW1fYWRkcl90IFJBTV9zaXpl LAogICAgIEJsb2NrRHJpdmVyU3RhdGUgKmZkW01BWF9GRF07CiAgICAgdm9pZCAqZndfY2ZnOwog ICAgIERyaXZlSW5mbyAqZGluZm87CisgICAgRGV2aWNlU3RhdGUgKnNsYXZpb19pbnRjdGw7CiAK ICAgICAvKiBpbml0IENQVXMgKi8KICAgICBpZiAoIWNwdV9tb2RlbCkKZGlmZiAtLWdpdCBhL2h3 L3N1bjRtLmggYi9ody9zdW40bS5oCmluZGV4IGNlOTdlZTUuLmIyMDRjYzEgMTAwNjQ0Ci0tLSBh L2h3L3N1bjRtLmgKKysrIGIvaHcvc3VuNG0uaApAQCAtMjIsMTQgKzIyLDYgQEAgc3RhdGljIGlu bGluZSB2b2lkIHNwYXJjX2lvbW11X21lbW9yeV93cml0ZSh2b2lkICpvcGFxdWUsCiAgICAgc3Bh cmNfaW9tbXVfbWVtb3J5X3J3KG9wYXF1ZSwgYWRkciwgYnVmLCBsZW4sIDEpOwogfQogCi0vKiBz bGF2aW9faW50Y3RsLmMgKi8KLXZvaWQgc2xhdmlvX3BpY19pbmZvKE1vbml0b3IgKm1vbiwgRGV2 aWNlU3RhdGUgKmRldik7Ci12b2lkIHNsYXZpb19pcnFfaW5mbyhNb25pdG9yICptb24sIERldmlj ZVN0YXRlICpkZXYpOwotCi0vKiBzdW40Y19pbnRjdGwuYyAqLwotdm9pZCBzdW40Y19waWNfaW5m byhNb25pdG9yICptb24sIHZvaWQgKm9wYXF1ZSk7Ci12b2lkIHN1bjRjX2lycV9pbmZvKE1vbml0 b3IgKm1vbiwgdm9pZCAqb3BhcXVlKTsKLQogLyogc3BhcmMzMl9kbWEuYyAqLwogI2luY2x1ZGUg InNwYXJjMzJfZG1hLmgiCiAKZGlmZiAtLWdpdCBhL2h3L3N1bjR1LmMgYi9ody9zdW40dS5jCmlu ZGV4IGVjZTgzZTYuLjljZjRmZGMgMTAwNjQ0Ci0tLSBhL2h3L3N1bjR1LmMKKysrIGIvaHcvc3Vu NHUuYwpAQCAtMjAzLDE0ICsyMDMsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdW40dV9sb2Fk X2tlcm5lbChjb25zdCBjaGFyICprZXJuZWxfZmlsZW5hbWUsCiAgICAgcmV0dXJuIGtlcm5lbF9z aXplOwogfQogCi12b2lkIHBpY19pbmZvKE1vbml0b3IgKm1vbikKLXsKLX0KLQotdm9pZCBpcnFf aW5mbyhNb25pdG9yICptb24pCi17Ci19Ci0KIHZvaWQgY3B1X2NoZWNrX2lycXMoQ1BVU3RhdGUg KmVudikKIHsKICAgICB1aW50MzJfdCBwaWwgPSBlbnYtPnBpbF9pbiB8IChlbnYtPnNvZnRpbnQg JiB+U09GVElOVF9USU1FUikgfApkaWZmIC0tZ2l0IGEvbW9uaXRvci5jIGIvbW9uaXRvci5jCmlu ZGV4IDI0ZTgxN2YuLmQ1YjM5ZWIgMTAwNjQ0Ci0tLSBhL21vbml0b3IuYworKysgYi9tb25pdG9y LmMKQEAgLTE3OTksMTAgKzE3OTksNiBAQCBzdGF0aWMgY29uc3QgbW9uX2NtZF90IGluZm9fY21k c1tdID0gewogICAgICAgIiIsICJzaG93IGluZm9zIGZvciBlYWNoIENQVSIgfSwKICAgICB7ICJo aXN0b3J5IiwgIiIsIGRvX2luZm9faGlzdG9yeSwKICAgICAgICIiLCAic2hvdyB0aGUgY29tbWFu ZCBsaW5lIGhpc3RvcnkiLCB9LAotICAgIHsgImlycSIsICIiLCBpcnFfaW5mbywKLSAgICAgICIi LCAic2hvdyB0aGUgaW50ZXJydXB0cyBzdGF0aXN0aWNzIChpZiBhdmFpbGFibGUpIiwgfSwKLSAg ICB7ICJwaWMiLCAiIiwgcGljX2luZm8sCi0gICAgICAiIiwgInNob3cgaTgyNTkgKFBJQykgc3Rh dGUiLCB9LAogICAgIHsgInBjaSIsICIiLCBwY2lfaW5mbywKICAgICAgICIiLCAic2hvdyBQQ0kg aW5mbyIsIH0sCiAjaWYgZGVmaW5lZChUQVJHRVRfSTM4NikgfHwgZGVmaW5lZChUQVJHRVRfU0g0 KQpkaWZmIC0tZ2l0IGEvcWVtdS1tb25pdG9yLmh4IGIvcWVtdS1tb25pdG9yLmh4CmluZGV4IDgw ZDA3YjUuLjIwMjY5MjEgMTAwNjQ0Ci0tLSBhL3FlbXUtbW9uaXRvci5oeAorKysgYi9xZW11LW1v bml0b3IuaHgKQEAgLTQ1LDEwICs0NSw2IEBAIHNob3cgdGhlIGNwdSByZWdpc3RlcnMKIHNob3cg aW5mb3MgZm9yIGVhY2ggQ1BVCiBAaXRlbSBpbmZvIGhpc3RvcnkKIHNob3cgdGhlIGNvbW1hbmQg bGluZSBoaXN0b3J5Ci1AaXRlbSBpbmZvIGlycQotc2hvdyB0aGUgaW50ZXJydXB0cyBzdGF0aXN0 aWNzIChpZiBhdmFpbGFibGUpCi1AaXRlbSBpbmZvIHBpYwotc2hvdyBpODI1OSAoUElDKSBzdGF0 ZQogQGl0ZW0gaW5mbyBwY2kKIHNob3cgZW11bGF0ZWQgUENJIGRldmljZSBpbmZvCiBAaXRlbSBp bmZvIHRsYgotLSAKMS41LjYuNQoK --0015174c0ffa80ba9c047248573a--