From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7609 invoked by alias); 4 Oct 2015 05:24:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 7492 invoked by uid 89); 4 Oct 2015 05:23:56 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-qk0-f179.google.com Received: from mail-qk0-f179.google.com (HELO mail-qk0-f179.google.com) (209.85.220.179) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sun, 04 Oct 2015 05:23:54 +0000 Received: by qkas79 with SMTP id s79so58292758qka.0 for ; Sat, 03 Oct 2015 22:23:51 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.55.27.66 with SMTP id b63mr31854045qkb.4.1443936231369; Sat, 03 Oct 2015 22:23:51 -0700 (PDT) Received: by 10.55.91.6 with HTTP; Sat, 3 Oct 2015 22:23:51 -0700 (PDT) In-Reply-To: References: <2AB9494F-91EC-4CF6-945B-0CB03A583513@comcast.net> <1D91C2C8-833D-4F6D-9C57-C22D61662A83@comcast.net> Date: Sun, 04 Oct 2015 05:24:00 -0000 Message-ID: Subject: Re: [PATCH] x86 interrupt attribute From: Yulia Koval To: Uros Bizjak Cc: "H.J. Lu" , Mike Stump , GCC Patches Content-Type: multipart/mixed; boundary=001a1147f45c2673ef0521409a33 X-SW-Source: 2015-10/txt/msg00333.txt.bz2 --001a1147f45c2673ef0521409a33 Content-Type: text/plain; charset=UTF-8 Content-length: 9711 Hi, Here is the last version of the patch. Regtested/bootstraped for Linux/i686 and Linux/x86_64. Date: Fri, 4 Sep 2015 08:53:23 -0700 Subject: [PATCH] Implement x86 interrupt attribute The interrupt and exception handlers are called by x86 processors. X86 hardware pushes information onto stack and calls the handler. The requirements are 1. Both interrupt and exception handlers must use the 'IRET' instruction, instead of the 'RET' instruction, to return from the handlers. 2. All registers are callee-saved in interrupt and exception handlers. 3. The difference between interrupt and exception handlers is the exception handler must pop 'ERROR_CODE' off the stack before the 'IRET' instruction. The design goals of interrupt and exception handlers for x86 processors are: 1. Support both 32-bit and 64-bit modes. 2. Flexible for compilers to optimize. 3. Easy to use by programmers. To implement interrupt and exception handlers for x86 processors, a compiler should support: 'interrupt' attribute Use this attribute to indicate that the specified function with mandatory arguments is an interrupt or exception handler. The compiler generates function entry and exit sequences suitable for use in an interrupt handler when this attribute is present. The 'IRET' instruction, instead of the 'RET' instruction, is used to return from interrupt or exception handlers. All registers, except for the EFLAGS register which is restored by the 'IRET' instruction, are preserved by the compiler. Any interruptible-without-stack-switch code must be compiled with -mno-red-zone since interrupt handlers can and will, because of the hardware design, touch the red zone. 1. interrupt handler must be declared with a mandatory pointer argument: struct interrupt_frame; __attribute__ ((interrupt)) void f (struct interrupt_frame *frame) { ... } and user must properly define the structure the pointer pointing to. 2. exception handler: The exception handler is very similar to the interrupt handler with a different mandatory function signature: typedef unsigned long long int uword_t; typedef unsigned int uword_t; struct interrupt_frame; __attribute__ ((interrupt)) void f (struct interrupt_frame *frame, uword_t error_code) { ... } and compiler pops the error code off stack before the 'IRET' instruction. The exception handler should only be used for exceptions which push an error code and all other exceptions must use the interrupt handler. The system will crash if the wrong handler is used. To be feature complete, compiler may implement the optional 'no_caller_saved_registers' attribute: Use this attribute to indicate that the specified function has no caller-saved registers. That is, all registers are callee-saved. The compiler generates proper function entry and exit sequences to save and restore any modified registers. The user can call functions specified with 'no_caller_saved_registers' attribute from an interrupt handler without saving and restoring all call clobbered registers. PR target/66960 PR target/67630 PR target/67634 * config/i386/i386-protos.h (ix86_epilogue_uses): New prototype. * config/i386/i386.c (ix86_frame): Add nbndregs and nmaskregs. (ix86_conditional_register_usage): Preserve all registers if there are no caller-saved registers. (ix86_set_current_function): Set no_caller_saved_registers and func_type. Mark arguments in interrupt handler as used. (ix86_function_ok_for_sibcall): Return false if there are no caller-saved registers. (ix86_maybe_switch_abi): Call reinit_regs if AX register usage isn't consistent. (type_natural_mode): Don't warn ABI change for MMX in interrupt handler. (ix86_function_arg_advance): Skip for callee in interrupt handler. (ix86_function_arg): Handle arguments for callee in interrupt handler. (ix86_can_use_return_insn_p): Don't use `ret' instruction in interrupt handler. (ix86_hard_regno_scratch_ok): New function. (ix86_epilogue_uses): Likewise. (ix86_reg_ever_defined_p): Likewise. (ix86_nsaved_bndregs): Likewise. (ix86_nsaved_maskregs): Likewise. (ix86_reg_save_area_size): Likewise. (ix86_handle_no_caller_saved_registers_attribute): Likewise. (ix86_handle_interrupt_attribute): Likewise. (ix86_save_reg): Preserve all registers if there are no caller-saved registers after reload. (ix86_nsaved_sseregs): Don't return 0 if there are no caller-saved registers. (ix86_compute_frame_layout): Set nbndregs and nmaskregs. Set save_regs_using_mov to true to save bound and mask registers. Call ix86_reg_save_area_size to get register save area size. Allocate space to save full vector registers if there are no caller-saved registers. (ix86_emit_save_reg_using_mov): Set alignment to word_mode alignment when saving full vector registers if there are no caller-saved registers. (ix86_emit_save_regs_using_mov): Use regno_reg_rtx to get register size. (ix86_emit_restore_regs_using_mov): Likewise. (ix86_emit_save_sse_regs_using_mov): Save full vector registers if there are no caller-saved registers. (ix86_emit_restore_sse_regs_using_mov): Restore full vector registers if there are no caller-saved registers. (ix86_expand_epilogue): Use move to restore bound registers. Generate interrupt return for interrupt handler and pop the 'ERROR_CODE' off the stack before interrupt return in exception handler. (ix86_expand_move): Disallow 80387 instructions in exception handler. (ix86_expand_vector_move): Disallow MMX/3Dnow instructions in exception handler. (ix86_expand_call): Disallow calling interrupt handler directly. If there are no caller-saved registers, mark all registers that are clobbered by the call as clobbered. (ix86_attribute_table): Add interrupt and no_caller_saved_registers attributes. (TARGET_HARD_REGNO_SCRATCH_OK): New. * config/i386/i386.h (EPILOGUE_USES): New. (function_type): New enum. * config/i386/i386.h (machine_function): Add func_type and no_caller_saved_registers. * config/i386/i386.md (UNSPEC_INTERRUPT_RETURN): New. (interrupt_return): New pattern. * config/i386/sse.md (*mov_internal): Handle misaligned SSE load and store if there are no caller-saved registers. * doc/extend.texi: Document x86 interrupt and no_caller_saved_registers attributes. gcc/testsuite/ PR target/66960 PR target/67630 PR target/67634 * gcc.target/i386/interrupt-1.c: New test. * gcc.target/i386/interrupt-2.c: Likewise. * gcc.target/i386/interrupt-3.c: Likewise. * gcc.target/i386/interrupt-4.c: Likewise. * gcc.target/i386/interrupt-5.c: Likewise. * gcc.target/i386/interrupt-6.c: Likewise. * gcc.target/i386/interrupt-7.c: Likewise. * gcc.target/i386/interrupt-8.c: Likewise. * gcc.target/i386/interrupt-9.c: Likewise. * gcc.target/i386/interrupt-10.c: Likewise. * gcc.target/i386/interrupt-11.c: Likewise. * gcc.target/i386/interrupt-12.c: Likewise. * gcc.target/i386/interrupt-13.c: Likewise. * gcc.target/i386/interrupt-14.c: Likewise. * gcc.target/i386/interrupt-15.c: Likewise. * gcc.target/i386/interrupt-16.c: Likewise. * gcc.target/i386/interrupt-17.c: Likewise. * gcc.target/i386/interrupt-18.c: Likewise. * gcc.target/i386/interrupt-19.c: Likewise. * gcc.target/i386/interrupt-20.c: Likewise. * gcc.target/i386/interrupt-21.c: Likewise. * gcc.target/i386/interrupt-22.c: Likewise. * gcc.target/i386/interrupt-23.c: Likewise. * gcc.target/i386/interrupt-24.c: Likewise. * gcc.target/i386/interrupt-25.c: Likewise. * gcc.target/i386/interrupt-387-err.c: Likewise. * gcc.target/i386/interrupt-bnd.c: Likewise. * gcc.target/i386/interrupt-iamcu.c: Likewise. * gcc.target/i386/interrupt-mmx-err.c: Likewise. * gcc.target/i386/interrupt-redzone-1.c: Likewise. * gcc.target/i386/interrupt-redzone-2.c: Likewise. * gcc.target/i386/interrupt-sibcall.c: Likewise. * gcc.target/i386/interrupt-switch-abi.c: Likewise. * gcc.target/i386/interrupt-xmm.c: Likewise. * gcc.target/i386/interrupt-ymm.c: Likewise. * gcc.target/i386/interrupt-zmm.c: Likewise. On Fri, Oct 2, 2015 at 8:48 PM, Yulia Koval wrote: > Fixed it. Thanks. > > On Fri, Oct 2, 2015 at 6:45 PM, Uros Bizjak wrote: >> On Fri, Oct 2, 2015 at 2:51 PM, Yulia Koval wrote: >>> Hi, >>> Here is a new patch. Added HJ's changes and review changes. >>> >>> Implement x86 interrupt attribute >> >> + incoming_stack_boundary >> + = (crtl->parm_stack_boundary > ix86_incoming_stack_boundary >> + ? crtl->parm_stack_boundary : ix86_incoming_stack_boundary); >> >> MAX (crtl->parm_stack_boundary, ix86_incoming_stack_boundary); >> >> +bool >> +ix86_epilogue_uses (int regno) >> +{ >> + /* If there are no caller-saved registers, we preserve all registers, >> + except for MMX and x87 registers which aren't supported when saving >> + and restoring registers. Don't explicitly save SP register since >> + it is always preserved. */ >> + return (cfun->machine->no_caller_saved_registers >> + && reg_names[regno][0] >> + && !fixed_regs[regno] >> + && !STACK_REGNO_P (regno) >> + && !MMX_REGNO_P (regno)); >> >> There is still a redundant check for reg_names with !fixed_regs. When >> member of fixed_regs is 0, we are sure that corresponding reg_names is >> non-null. As can be seen in ix86_conditional_register_usage, register >> names are squashed depending on target for non-existent registers in >> order to prevent their usage in "asm" statements. >> >> + /* If there are no caller-saved registers, add all registers >> + that are clobbered by the call. */ >> + for (int i = 0; i < FIRST_PSEUDO_REGISTER; i++) >> + if (reg_names[i][0] >> + && !fixed_regs[i] >> + && (ix86_call_used_regs[i] == 1 >> + || (ix86_call_used_regs[i] & c_mask)) >> + && !STACK_REGNO_P (i) >> + && !MMX_REGNO_P (i)) >> >> And here. >> >> Uros. --001a1147f45c2673ef0521409a33 Content-Type: application/octet-stream; name="patch_04.10" Content-Disposition: attachment; filename="patch_04.10" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ifc2cjta0 Content-length: 103257 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LXByb3Rvcy5oIGIv Z2NjL2NvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmgKaW5kZXggNmExN2VmNC4u YzdmZjM5MyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYtcHJv dG9zLmgKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmgKQEAg LTI3OCw2ICsyNzgsOCBAQCBleHRlcm4gcnR4IG1heWJlX2dldF9wb29sX2Nv bnN0YW50IChydHgpOwogZXh0ZXJuIGNoYXIgaW50ZXJuYWxfbGFiZWxfcHJl Zml4WzE2XTsKIGV4dGVybiBpbnQgaW50ZXJuYWxfbGFiZWxfcHJlZml4X2xl bjsKIAorZXh0ZXJuIGJvb2wgaXg4Nl9lcGlsb2d1ZV91c2VzIChpbnQpOwor CiBlbnVtIGl4ODZfYWRkcmVzc19zZWcgeyBTRUdfREVGQVVMVCwgU0VHX0ZT LCBTRUdfR1MgfTsKIHN0cnVjdCBpeDg2X2FkZHJlc3MKIHsKZGlmZiAtLWdp dCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmMgYi9nY2MvY29uZmlnL2kzODYv aTM4Ni5jCmluZGV4IGY1Yzk2NTcuLjBhYWIyMTEgMTAwNjQ0Ci0tLSBhL2dj Yy9jb25maWcvaTM4Ni9pMzg2LmMKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kz ODYuYwpAQCAtMjM4MSw2ICsyMzgxLDggQEAgc3RydWN0IGl4ODZfZnJhbWUK IHsKICAgaW50IG5zc2VyZWdzOwogICBpbnQgbnJlZ3M7CisgIGludCBuYm5k cmVnczsKKyAgaW50IG5tYXNrcmVnczsKICAgaW50IHZhX2FyZ19zaXplOwog ICBpbnQgcmVkX3pvbmVfc2l6ZTsKICAgaW50IG91dGdvaW5nX2FyZ3VtZW50 c19zaXplOwpAQCAtNTQ2NCw2ICs1NDY2LDEzIEBAIGl4ODZfY29uZGl0aW9u YWxfcmVnaXN0ZXJfdXNhZ2UgKHZvaWQpCiB7CiAgIGludCBpLCBjX21hc2s7 CiAKKyAgLyogSWYgdGhlcmUgYXJlIG5vIGNhbGxlci1zYXZlZCByZWdpc3Rl cnMsIHByZXNlcnZlIGFsbCByZWdpc3RlcnMuCisgICAgIGV4Y2VwdCBmaXhl ZF9yZWdzLiAgKi8KKyAgaWYgKGNmdW4gJiYgY2Z1bi0+bWFjaGluZS0+bm9f Y2FsbGVyX3NhdmVkX3JlZ2lzdGVycykKKyAgICBmb3IgKGkgPSAwOyBpIDwg RklSU1RfUFNFVURPX1JFR0lTVEVSOyBpKyspCisgICAgICBpZiAoIWZpeGVk X3JlZ3NbaV0pCisJY2FsbF91c2VkX3JlZ3NbaV0gPSAwOworCiAgIC8qIEZv ciAzMi1iaXQgdGFyZ2V0cywgc3F1YXNoIHRoZSBSRVggcmVnaXN0ZXJzLiAg Ki8KICAgaWYgKCEgVEFSR0VUXzY0QklUKQogICAgIHsKQEAgLTYyNDUsNiAr NjI1NCwyNyBAQCBpeDg2X3NldF9jdXJyZW50X2Z1bmN0aW9uICh0cmVlIGZu ZGVjbCkKICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgaWYgKGxvb2t1cF9h dHRyaWJ1dGUgKCJpbnRlcnJ1cHQiLCBERUNMX0FUVFJJQlVURVMgKGZuZGVj bCkpKQorICAgIHsKKyAgICAgIGludCBuYXJncyA9IDA7CisgICAgICBmb3Ig KHRyZWUgYXJnID0gREVDTF9BUkdVTUVOVFMgKGZuZGVjbCk7CisJICAgYXJn OworCSAgIGFyZyA9IFRSRUVfQ0hBSU4gKGFyZykpCisJeworCSAgLyogTWFy ayBhcmd1bWVudHMgaW4gaW50ZXJydXB0IGhhbmRsZXIgYXMgdXNlZCB0byBz aWxlbmNlCisJICAgICBjb21waWxlciB3YXJuaW5nIHNpbmNlIGFyZ3VtZW50 cyBpbiBpbnRlcnJ1cHQgaGFuZGxlcgorCSAgICAgYXJlIG1hbmRhdG9yeSBl dmVuIGlmIHRoZXkgYXJlbid0IHVzZWQuICAqLworCSAgVFJFRV9VU0VEIChh cmcpID0gMTsKKwkgIG5hcmdzKys7CisJfQorICAgICAgY2Z1bi0+bWFjaGlu ZS0+bm9fY2FsbGVyX3NhdmVkX3JlZ2lzdGVycyA9IHRydWU7CisgICAgICBj ZnVuLT5tYWNoaW5lLT5mdW5jX3R5cGUKKwk9IG5hcmdzID09IDIgPyBUWVBF X0VYQ0VQVElPTiA6IFRZUEVfSU5URVJSVVBUOworICAgIH0KKyAgZWxzZSBp ZiAobG9va3VwX2F0dHJpYnV0ZSAoIm5vX2NhbGxlcl9zYXZlZF9yZWdpc3Rl cnMiLAorCQkJICAgICBERUNMX0FUVFJJQlVURVMgKGZuZGVjbCkpKQorICAg IGNmdW4tPm1hY2hpbmUtPm5vX2NhbGxlcl9zYXZlZF9yZWdpc3RlcnMgPSB0 cnVlOworCiAgIHRyZWUgbmV3X3RyZWUgPSBERUNMX0ZVTkNUSU9OX1NQRUNJ RklDX1RBUkdFVCAoZm5kZWNsKTsKICAgaWYgKG5ld190cmVlID09IE5VTExf VFJFRSkKICAgICBuZXdfdHJlZSA9IHRhcmdldF9vcHRpb25fZGVmYXVsdF9u b2RlOwpAQCAtNjUyMyw2ICs2NTUzLDEwIEBAIGl4ODZfZnVuY3Rpb25fb2tf Zm9yX3NpYmNhbGwgKHRyZWUgZGVjbCwgdHJlZSBleHApCiAgIHRyZWUgdHlw ZSwgZGVjbF9vcl90eXBlOwogICBydHggYSwgYjsKIAorICAvKiBTaWJsaW5n IGNhbGwgaXNuJ3QgT0sgaWYgdGhlcmUgYXJlIG5vIGNhbGxlci1zYXZlZCBy ZWdpc3RlcnMuICAqLworICBpZiAoY2Z1bi0+bWFjaGluZS0+bm9fY2FsbGVy X3NhdmVkX3JlZ2lzdGVycykKKyAgICByZXR1cm4gZmFsc2U7CisKICAgLyog SWYgd2UgYXJlIGdlbmVyYXRpbmcgcG9zaXRpb24taW5kZXBlbmRlbnQgY29k ZSwgd2UgY2Fubm90IHNpYmNhbGwKICAgICAgb3B0aW1pemUgZGlyZWN0IGNh bGxzIHRvIGdsb2JhbCBmdW5jdGlvbnMsIGFzIHRoZSBQTFQgcmVxdWlyZXMK ICAgICAgJWVieCBiZSBsaXZlLiAoRGFyd2luIGRvZXMgbm90IGhhdmUgYSBQ TFQuKSAgKi8KQEAgLTc0MDEsOCArNzQzNSwxNyBAQCBpeDg2X2NhbGxfYWJp X292ZXJyaWRlIChjb25zdF90cmVlIGZuZGVjbCkKIHN0YXRpYyB2b2lkCiBp eDg2X21heWJlX3N3aXRjaF9hYmkgKHZvaWQpCiB7Ci0gIGlmIChUQVJHRVRf NjRCSVQgJiYKLSAgICAgIGNhbGxfdXNlZF9yZWdzW1NJX1JFR10gPT0gKGNm dW4tPm1hY2hpbmUtPmNhbGxfYWJpID09IE1TX0FCSSkpCisgIGlmIChUQVJH RVRfNjRCSVQKKwkmJiAoY2FsbF91c2VkX3JlZ3NbU0lfUkVHXQorCSAgPT0g KGNmdW4tPm1hY2hpbmUtPmNhbGxfYWJpID09IE1TX0FCSSkpKQorICAgIHsK KyAgICAgIHJlaW5pdF9yZWdzICgpOworICAgICAgcmV0dXJuOworICAgIH0K KyAgLyogQVggcmVnaXN0ZXIgaXMgb25seSBwcmVzZXJ2ZWQgaWYgdGhlcmUg YXJlIG5vIGNhbGxlci1zYXZlZAorICAgICByZWdpc3RlcnMuICAqLworICBp ZiAoY2Z1bi0+bWFjaGluZS0+bm9fY2FsbGVyX3NhdmVkX3JlZ2lzdGVycwor ICAgICAgICE9IGNhbGxfdXNlZF9yZWdzW0FYX1JFR10pCiAgICAgcmVpbml0 X3JlZ3MgKCk7CiB9CiAKQEAgLTc3MDcsNiArNzc1MCw4IEBAIHR5cGVfbmF0 dXJhbF9tb2RlIChjb25zdF90cmVlIHR5cGUsIGNvbnN0IENVTVVMQVRJVkVf QVJHUyAqY3VtLAogCQkgICAgICB9CiAJCSAgfQogCQllbHNlIGlmICgoc2l6 ZSA9PSA4ICYmICFUQVJHRVRfNjRCSVQpCisJCQkgJiYgKCFjZnVuCisJCQkg ICAgIHx8IGNmdW4tPm1hY2hpbmUtPmZ1bmNfdHlwZSA9PSBUWVBFX05PUk1B TCkKIAkJCSAmJiAhVEFSR0VUX01NWAogCQkJICYmICFUQVJHRVRfSUFNQ1Up CiAJCSAgewpAQCAtODY4Niw2ICs4NzMxLDExIEBAIGl4ODZfZnVuY3Rpb25f YXJnX2FkdmFuY2UgKGN1bXVsYXRpdmVfYXJnc190IGN1bV92LCBtYWNoaW5l X21vZGUgbW9kZSwKICAgSE9TVF9XSURFX0lOVCBieXRlcywgd29yZHM7CiAg IGludCBucmVnczsKIAorICAvKiBUaGUgYXJndW1lbnQgb2YgaW50ZXJydXB0 IGhhbmRsZXIgaXMgYSBzcGVjaWFsIGNhc2UgYW5kIGlzCisgICAgIGhhbmRs ZWQgaW4gaXg4Nl9mdW5jdGlvbl9hcmcuICAqLworICBpZiAoIWN1bS0+Y2Fs bGVyICYmIGNmdW4tPm1hY2hpbmUtPmZ1bmNfdHlwZSAhPSBUWVBFX05PUk1B TCkKKyAgICByZXR1cm47CisKICAgaWYgKG1vZGUgPT0gQkxLbW9kZSkKICAg ICBieXRlcyA9IGludF9zaXplX2luX2J5dGVzICh0eXBlKTsKICAgZWxzZQpA QCAtOTAwMiw2ICs5MDUyLDM5IEBAIGl4ODZfZnVuY3Rpb25fYXJnIChjdW11 bGF0aXZlX2FyZ3NfdCBjdW1fdiwgbWFjaGluZV9tb2RlIG9tb2RlLAogICBI T1NUX1dJREVfSU5UIGJ5dGVzLCB3b3JkczsKICAgcnR4IGFyZzsKIAorICBp ZiAoIWN1bS0+Y2FsbGVyICYmIGNmdW4tPm1hY2hpbmUtPmZ1bmNfdHlwZSAh PSBUWVBFX05PUk1BTCkKKyAgICB7CisgICAgICAvKiBUaGUgZmlyc3QgYXJn dW1lbnQgb2YgaW50ZXJydXB0IGhhbmRsZXIgaXMgYSBwb2ludGVyIGFuZAor CSBwb2ludHMgdG8gdGhlIHJldHVybiBhZGRyZXNzIG9uIHN0YWNrLiAgVGhl IG9wdGlvbmFsIHNlY29uZAorCSBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIGZv ciBlcnJvciBjb2RlIG9uIHN0YWNrLiAgKi8KKyAgICAgIGdjY19hc3NlcnQg KHR5cGUgIT0gTlVMTF9UUkVFKTsKKyAgICAgIGlmIChQT0lOVEVSX1RZUEVf UCAodHlwZSkpCisJeworCSAgaWYgKGNmdW4tPm1hY2hpbmUtPmZ1bmNfdHlw ZSA9PSBUWVBFX0VYQ0VQVElPTikKKwkgICAgLyogKEFQKSBpbiB0aGUgY3Vy cmVudCBmcmFtZSBpbiBleGNlcHRpb24gaGFuZGxlci4gICovCisJICAgIGFy ZyA9IGFyZ19wb2ludGVyX3J0eDsKKwkgIGVsc2UKKwkgICAgLyogLVdPUkQo QVApIGluIHRoZSBjdXJyZW50IGZyYW1lIGluIGludGVycnVwdCBoYW5kbGVy LiAgKi8KKwkgICAgYXJnID0gcGx1c19jb25zdGFudCAoUG1vZGUsIGFyZ19w b2ludGVyX3J0eCwKKwkJCQkgLVVOSVRTX1BFUl9XT1JEKTsKKwkgIGlmICht b2RlICE9IFBtb2RlKQorCSAgICBhcmcgPSBjb252ZXJ0X3RvX21vZGUgKG1v ZGUsIGFyZywgMSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGdjY19hc3Nl cnQgKFRSRUVfQ09ERSAodHlwZSkgPT0gSU5URUdFUl9UWVBFCisJCSAgICAg ICYmIGNmdW4tPm1hY2hpbmUtPmZ1bmNfdHlwZSA9PSBUWVBFX0VYQ0VQVElP TgorCQkgICAgICAmJiBtb2RlID09IHdvcmRfbW9kZSk7CisJICAvKiBUaGUg ZXJyb3IgY29kZSBpcyBhdCAtV09SRChBUCkgaW4gdGhlIGN1cnJlbnQgZnJh bWUgaW4KKwkgICAgIGV4Y2VwdGlvbiBoYW5kbGVyLiAgKi8KKwkgIGFyZyA9 IGdlbl9ydHhfTUVNICh3b3JkX21vZGUsCisJCQkgICAgIHBsdXNfY29uc3Rh bnQgKFBtb2RlLCBhcmdfcG9pbnRlcl9ydHgsCisJCQkJCSAgICAtVU5JVFNf UEVSX1dPUkQpKTsKKwl9CisKKyAgICAgIHJldHVybiBhcmc7CisgICAgfQor CiAgIC8qIEFsbCBwb2ludGVyIGJvdW5kcyBhcmd1bWVudHMgYXJlIGhhbmRs ZWQgc2VwYXJhdGVseSBoZXJlLiAgKi8KICAgaWYgKCh0eXBlICYmIFBPSU5U RVJfQk9VTkRTX1RZUEVfUCAodHlwZSkpCiAgICAgICB8fCBQT0lOVEVSX0JP VU5EU19NT0RFX1AgKG1vZGUpKQpAQCAtMTA3MTcsNyArMTA4MDAsMTAgQEAg aXg4Nl9jYW5fdXNlX3JldHVybl9pbnNuX3AgKHZvaWQpCiB7CiAgIHN0cnVj dCBpeDg2X2ZyYW1lIGZyYW1lOwogCi0gIGlmICghIHJlbG9hZF9jb21wbGV0 ZWQgfHwgZnJhbWVfcG9pbnRlcl9uZWVkZWQpCisgIC8qIERvbid0IHVzZSBg cmV0JyBpbnN0cnVjdGlvbiBpbiBpbnRlcnJ1cHQgaGFuZGxlci4gICovCisg IGlmICghIHJlbG9hZF9jb21wbGV0ZWQKKyAgICAgIHx8IGZyYW1lX3BvaW50 ZXJfbmVlZGVkCisgICAgICB8fCBjZnVuLT5tYWNoaW5lLT5mdW5jX3R5cGUg IT0gVFlQRV9OT1JNQUwpCiAgICAgcmV0dXJuIDA7CiAKICAgLyogRG9uJ3Qg YWxsb3cgbW9yZSB0aGFuIDMyayBwb3AsIHNpbmNlIHRoYXQncyBhbGwgd2Ug Y2FuIGRvCkBAIC0xMTAyNywxMSArMTExMTMsNjUgQEAgaXg4Nl9zZWxlY3Rf YWx0X3BpY19yZWdudW0gKHZvaWQpCiAgIHJldHVybiBJTlZBTElEX1JFR05V TTsKIH0KIAorLyogUmV0dXJuIG5vbnplcm8gaWYgcmVnaXN0ZXIgUkVHTk8g Y2FuIGJlIHVzZWQgYXMgYSBzY3JhdGNoIHJlZ2lzdGVyCisgICBpbiBwZWVw aG9sZTIuICAqLworCitib29sCitpeDg2X2hhcmRfcmVnbm9fc2NyYXRjaF9v ayAodW5zaWduZWQgaW50IHJlZ25vIEFUVFJJQlVURV9VTlVTRUQpCit7Cisg IC8qIE5vIHNjcmF0Y2ggcmVnaXN0ZXJzIGlmIHRoZXJlIGFyZSBubyBjYWxs ZXItc2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKyAgcmV0dXJuICFjZnVuLT5tYWNo aW5lLT5ub19jYWxsZXJfc2F2ZWRfcmVnaXN0ZXJzOworfQorCisvKiBSZXR1 cm4gdHJ1ZSBpZiBSRUdOTyBpcyB1c2VkIGJ5IHRoZSBlcGlsb2d1ZS4gICov CisKK2Jvb2wKK2l4ODZfZXBpbG9ndWVfdXNlcyAoaW50IHJlZ25vKQorewor ICAvKiBJZiB0aGVyZSBhcmUgbm8gY2FsbGVyLXNhdmVkIHJlZ2lzdGVycywg d2UgcHJlc2VydmUgYWxsIHJlZ2lzdGVycywKKyAgICAgZXhjZXB0IGZvciBN TVggYW5kIHg4NyByZWdpc3RlcnMgd2hpY2ggYXJlbid0IHN1cHBvcnRlZCB3 aGVuIHNhdmluZworICAgICBhbmQgcmVzdG9yaW5nIHJlZ2lzdGVycy4gIERv bid0IGV4cGxpY2l0bHkgc2F2ZSBTUCByZWdpc3RlciBzaW5jZQorICAgICBp dCBpcyBhbHdheXMgcHJlc2VydmVkLiAgKi8KKyAgcmV0dXJuIChjZnVuLT5t YWNoaW5lLT5ub19jYWxsZXJfc2F2ZWRfcmVnaXN0ZXJzCisJICAmJiAhZml4 ZWRfcmVnc1tyZWdub10KKwkgICYmICFTVEFDS19SRUdOT19QIChyZWdubykK KwkgICYmICFNTVhfUkVHTk9fUCAocmVnbm8pKTsKK30KKworLyogUmV0dXJu IFRSVUUgaWYgcmVnaXN0ZXIgUkVHTk8gaXMgZXZlciBkZWZpbmVkLi4gICov CisKK3N0YXRpYyBib29sCitpeDg2X3JlZ19ldmVyX2RlZmluZWRfcCAodW5z aWduZWQgaW50IHJlZ25vKQoreworICBkZl9yZWYgZGVmOworCisgIGZvciAo ZGVmID0gREZfUkVHX0RFRl9DSEFJTiAocmVnbm8pOyBkZWY7IGRlZiA9IERG X1JFRl9ORVhUX1JFRyAoZGVmKSkKKyAgICBpZiAoIURGX1JFRl9JU19BUlRJ RklDSUFMIChkZWYpKQorICAgICAgcmV0dXJuIHRydWU7CisKKyAgcmV0dXJu IGZhbHNlOworfQorCiAvKiBSZXR1cm4gVFJVRSBpZiB3ZSBuZWVkIHRvIHNh dmUgUkVHTk8uICAqLwogCiBzdGF0aWMgYm9vbAogaXg4Nl9zYXZlX3JlZyAo dW5zaWduZWQgaW50IHJlZ25vLCBib29sIG1heWJlX2VoX3JldHVybikKIHsK KyAgLyogSWYgdGhlcmUgYXJlIG5vIGNhbGxlci1zYXZlZCByZWdpc3RlcnMs IHdlIHByZXNlcnZlIGFsbCByZWdpc3RlcnMsCisgICAgIGV4Y2VwdCBmb3Ig TU1YIGFuZCB4ODcgcmVnaXN0ZXJzIHdoaWNoIGFyZW4ndCBzdXBwb3J0ZWQg d2hlbiBzYXZpbmcKKyAgICAgYW5kIHJlc3RvcmluZyByZWdpc3RlcnMuICBE b24ndCBleHBsaWNpdGx5IHNhdmUgU1AgcmVnaXN0ZXIgc2luY2UKKyAgICAg aXQgaXMgYWx3YXlzIHByZXNlcnZlZC4gICovCisgIGlmIChjZnVuLT5tYWNo aW5lLT5ub19jYWxsZXJfc2F2ZWRfcmVnaXN0ZXJzICYmIHJlbG9hZF9jb21w bGV0ZWQpCisgICAgcmV0dXJuIChkZl9yZWdzX2V2ZXJfbGl2ZV9wIChyZWdu bykKKwkgICAgJiYgaXg4Nl9yZWdfZXZlcl9kZWZpbmVkX3AgKHJlZ25vKQor CSAgICAmJiAhZml4ZWRfcmVnc1tyZWdub10KKwkgICAgJiYgKCFjcnRsLT5y ZXR1cm5fcnR4CisJCXx8ICFyZWZlcnNfdG9fcmVnbm9fcCAocmVnbm8sIGNy dGwtPnJldHVybl9ydHgpKQorCSAgICAmJiAoIWNydGwtPnJldHVybl9ibmQK KwkJfHwgIXJlZmVyc190b19yZWdub19wIChyZWdubywgY3J0bC0+cmV0dXJu X2JuZCkpCisJICAgICYmICFTVEFDS19SRUdOT19QIChyZWdubykKKwkgICAg JiYgIU1NWF9SRUdOT19QIChyZWdubykpOworCiAgIGlmIChyZWdubyA9PSBS RUFMX1BJQ19PRkZTRVRfVEFCTEVfUkVHTlVNCiAgICAgICAmJiBwaWNfb2Zm c2V0X3RhYmxlX3J0eCkKICAgICB7CkBAIC0xMTA4OCw2ICsxMTIyOCwzNCBA QCBpeDg2X25zYXZlZF9yZWdzICh2b2lkKQogICByZXR1cm4gbnJlZ3M7CiB9 CiAKKy8qIFJldHVybiBudW1iZXIgb2Ygc2F2ZWQgYm91bmQgcmVnaXN0ZXJz LiAgKi8KKworc3RhdGljIGludAoraXg4Nl9uc2F2ZWRfYm5kcmVncyAodm9p ZCkKK3sKKyAgaW50IG5yZWdzID0gMDsKKyAgaW50IHJlZ25vOworCisgIGZv ciAocmVnbm8gPSAwOyByZWdubyA8IEZJUlNUX1BTRVVET19SRUdJU1RFUjsg cmVnbm8rKykKKyAgICBpZiAoQk5EX1JFR05PX1AgKHJlZ25vKSAmJiBpeDg2 X3NhdmVfcmVnIChyZWdubywgdHJ1ZSkpCisgICAgICBucmVncyArKzsKKyAg cmV0dXJuIG5yZWdzOworfQorCisvKiBSZXR1cm4gbnVtYmVyIG9mIHNhdmVk IG1hc2sgcmVnaXN0ZXJzLiAgKi8KKworc3RhdGljIGludAoraXg4Nl9uc2F2 ZWRfbWFza3JlZ3MgKHZvaWQpCit7CisgIGludCBucmVncyA9IDA7CisgIGlu dCByZWdubzsKKworICBmb3IgKHJlZ25vID0gMDsgcmVnbm8gPCBGSVJTVF9Q U0VVRE9fUkVHSVNURVI7IHJlZ25vKyspCisgICAgaWYgKE1BU0tfUkVHTk9f UCAocmVnbm8pICYmIGl4ODZfc2F2ZV9yZWcgKHJlZ25vLCB0cnVlKSkKKyAg ICAgIG5yZWdzICsrOworICByZXR1cm4gbnJlZ3M7Cit9CisKIC8qIFJldHVy biBudW1iZXIgb2Ygc2F2ZWQgU1NFIHJlZ2lzdGVycy4gICovCiAKIHN0YXRp YyBpbnQKQEAgLTExMDk2LDcgKzExMjY0LDEwIEBAIGl4ODZfbnNhdmVkX3Nz ZXJlZ3MgKHZvaWQpCiAgIGludCBucmVncyA9IDA7CiAgIGludCByZWdubzsK IAotICBpZiAoIVRBUkdFVF82NEJJVF9NU19BQkkpCisgIC8qIEFsd2F5cyBu ZWVkIHRvIHNhdmUgU1NFIHJlZ2lzdGVycyBpZiB0aGVyZSBhcmUgbm8gY2Fs bGVyLXNhdmVkCisgICAgIHJlZ2lzdGVycy4gICovCisgIGlmICghVEFSR0VU XzY0QklUX01TX0FCSQorICAgICAgJiYgIWNmdW4tPm1hY2hpbmUtPm5vX2Nh bGxlcl9zYXZlZF9yZWdpc3RlcnMpCiAgICAgcmV0dXJuIDA7CiAgIGZvciAo cmVnbm8gPSAwOyByZWdubyA8IEZJUlNUX1BTRVVET19SRUdJU1RFUjsgcmVn bm8rKykKICAgICBpZiAoU1NFX1JFR05PX1AgKHJlZ25vKSAmJiBpeDg2X3Nh dmVfcmVnIChyZWdubywgdHJ1ZSkpCkBAIC0xMTE2NSw2ICsxMTMzNiwxOCBA QCBpeDg2X2J1aWx0aW5fc2V0am1wX2ZyYW1lX3ZhbHVlICh2b2lkKQogCiAj ZGVmaW5lIFNQTElUX1NUQUNLX0FWQUlMQUJMRSAyNTYKIAorLyogUmVnaXN0 ZXIgc2F2ZSBhcmVhIHNpemUuICAqLworCitzdGF0aWMgdW5zaWduZWQgaW50 CitpeDg2X3JlZ19zYXZlX2FyZWFfc2l6ZSAoc3RydWN0IGl4ODZfZnJhbWUg KmZyYW1lKQoreworICB1bnNpZ25lZCBpbnQgc2l6ZSA9ICgoZnJhbWUtPm5y ZWdzIC0gZnJhbWUtPm5ibmRyZWdzCisJCQktIGZyYW1lLT5ubWFza3JlZ3Mp ICogVU5JVFNfUEVSX1dPUkQpOworICBzaXplICs9IGZyYW1lLT5uYm5kcmVn cyAqIChpeDg2X3Btb2RlID09IFBNT0RFX0RJID8gMTYgOiA4KTsKKyAgc2l6 ZSArPSBmcmFtZS0+bm1hc2tyZWdzICogKFRBUkdFVF9BVlg1MTJCVyA/IDgg OiAyKTsKKyAgcmV0dXJuIHNpemU7Cit9CisKIC8qIEZpbGwgc3RydWN0dXJl IGl4ODZfZnJhbWUgYWJvdXQgZnJhbWUgb2YgY3VycmVudGx5IGNvbXB1dGVk IGZ1bmN0aW9uLiAgKi8KIAogc3RhdGljIHZvaWQKQEAgLTExMTc3LDYgKzEx MzYwLDggQEAgaXg4Nl9jb21wdXRlX2ZyYW1lX2xheW91dCAoc3RydWN0IGl4 ODZfZnJhbWUgKmZyYW1lKQogICBIT1NUX1dJREVfSU5UIHRvX2FsbG9jYXRl OwogCiAgIGZyYW1lLT5ucmVncyA9IGl4ODZfbnNhdmVkX3JlZ3MgKCk7Cisg IGZyYW1lLT5uYm5kcmVncyA9IGl4ODZfbnNhdmVkX2JuZHJlZ3MgKCk7Cisg IGZyYW1lLT5ubWFza3JlZ3MgPSBpeDg2X25zYXZlZF9tYXNrcmVncyAoKTsK ICAgZnJhbWUtPm5zc2VyZWdzID0gaXg4Nl9uc2F2ZWRfc3NlcmVncyAoKTsK IAogICAvKiA2NC1iaXQgTVMgQUJJIHNlZW0gdG8gcmVxdWlyZSBzdGFjayBh bGlnbm1lbnQgdG8gYmUgYWx3YXlzIDE2IGV4Y2VwdCBmb3IKQEAgLTExMjQ4 LDExICsxMTQzMywxNiBAQCBpeDg2X2NvbXB1dGVfZnJhbWVfbGF5b3V0IChz dHJ1Y3QgaXg4Nl9mcmFtZSAqZnJhbWUpCiAJICAgPSAhZXhwZW5zaXZlX2Z1 bmN0aW9uX3AgKGNvdW50KTsKICAgICB9CiAKKyAgLyogV2UgbXVzdCB1c2Ug bW92ZSB0byBzYXZlIGJvdW5kIGFuZCBtYXNrIHJlZ2lzdGVycy4gICovCiAg IGZyYW1lLT5zYXZlX3JlZ3NfdXNpbmdfbW92Ci0gICAgPSAoVEFSR0VUX1BS T0xPR1VFX1VTSU5HX01PVkUgJiYgY2Z1bi0+bWFjaGluZS0+dXNlX2Zhc3Rf cHJvbG9ndWVfZXBpbG9ndWUKLSAgICAgICAvKiBJZiBzdGF0aWMgc3RhY2sg Y2hlY2tpbmcgaXMgZW5hYmxlZCBhbmQgZG9uZSB3aXRoIHByb2JlcywKLQkg IHRoZSByZWdpc3RlcnMgbmVlZCB0byBiZSBzYXZlZCBiZWZvcmUgYWxsb2Nh dGluZyB0aGUgZnJhbWUuICAqLwotICAgICAgICYmIGZsYWdfc3RhY2tfY2hl Y2sgIT0gU1RBVElDX0JVSUxUSU5fU1RBQ0tfQ0hFQ0spOworICAgID0gKGZy YW1lLT5uYm5kcmVncyA+IDAKKyAgICAgICB8fCBmcmFtZS0+bm1hc2tyZWdz ID4gMAorICAgICAgIHx8IChUQVJHRVRfUFJPTE9HVUVfVVNJTkdfTU9WRQor CSAgICYmIGNmdW4tPm1hY2hpbmUtPnVzZV9mYXN0X3Byb2xvZ3VlX2VwaWxv Z3VlCisJICAgLyogSWYgc3RhdGljIHN0YWNrIGNoZWNraW5nIGlzIGVuYWJs ZWQgYW5kIGRvbmUgd2l0aCBwcm9iZXMsCisJICAgICAgdGhlIHJlZ2lzdGVy cyBuZWVkIHRvIGJlIHNhdmVkIGJlZm9yZSBhbGxvY2F0aW5nIHRoZQorCSAg ICAgIGZyYW1lLiAgKi8KKwkgICAmJiBmbGFnX3N0YWNrX2NoZWNrICE9IFNU QVRJQ19CVUlMVElOX1NUQUNLX0NIRUNLKSk7CiAKICAgLyogU2tpcCByZXR1 cm4gYWRkcmVzcy4gICovCiAgIG9mZnNldCA9IFVOSVRTX1BFUl9XT1JEOwpA QCAtMTEyNzAsNyArMTE0NjAsNyBAQCBpeDg2X2NvbXB1dGVfZnJhbWVfbGF5 b3V0IChzdHJ1Y3QgaXg4Nl9mcmFtZSAqZnJhbWUpCiAgIGZyYW1lLT5oYXJk X2ZyYW1lX3BvaW50ZXJfb2Zmc2V0ID0gb2Zmc2V0OwogCiAgIC8qIFJlZ2lz dGVyIHNhdmUgYXJlYSAqLwotICBvZmZzZXQgKz0gZnJhbWUtPm5yZWdzICog VU5JVFNfUEVSX1dPUkQ7CisgIG9mZnNldCArPSBpeDg2X3JlZ19zYXZlX2Fy ZWFfc2l6ZSAoZnJhbWUpOwogICBmcmFtZS0+cmVnX3NhdmVfb2Zmc2V0ID0g b2Zmc2V0OwogCiAgIC8qIE9uIFNFSCB0YXJnZXQsIHJlZ2lzdGVycyBhcmUg cHVzaGVkIGp1c3QgYmVmb3JlIHRoZSBmcmFtZSBwb2ludGVyCkBAIC0xMTI4 NCw5ICsxMTQ3NCwyOSBAQCBpeDg2X2NvbXB1dGVfZnJhbWVfbGF5b3V0IChz dHJ1Y3QgaXg4Nl9mcmFtZSAqZnJhbWUpCiAgICAgICAvKiBUaGUgb25seSBB QkkgdGhhdCBoYXMgc2F2ZWQgU1NFIHJlZ2lzdGVycyAoV2luNjQpIGFsc28g aGFzIGEKICAgICAgICAgIDE2LWJ5dGUgYWxpZ25lZCBkZWZhdWx0IHN0YWNr LCBhbmQgdGh1cyB3ZSBkb24ndCBuZWVkIHRvIGJlCiAJIHdpdGhpbiB0aGUg cmUtYWxpZ25lZCBsb2NhbCBzdGFjayBmcmFtZSB0byBzYXZlIHRoZW0uICAq LwotICAgICAgZ2NjX2Fzc2VydCAoSU5DT01JTkdfU1RBQ0tfQk9VTkRBUlkg Pj0gMTI4KTsKLSAgICAgIG9mZnNldCA9IFJPVU5EX1VQIChvZmZzZXQsIDE2 KTsKLSAgICAgIG9mZnNldCArPSBmcmFtZS0+bnNzZXJlZ3MgKiAxNjsKKyAg ICAgIHVuc2lnbmVkIGludCBpbmNvbWluZ19zdGFja19ib3VuZGFyeQorCT0g TUFYIChjcnRsLT5wYXJtX3N0YWNrX2JvdW5kYXJ5LCBpeDg2X2luY29taW5n X3N0YWNrX2JvdW5kYXJ5KTsKKyAgICAgIHVuc2lnbmVkIGludCB2ZWNfcmVn c2l6ZTsKKworICAgICAgLyogV2UgbXVzdCBzYXZlIGZ1bGwgdmVjdG9yIHJl Z2lzdGVycyBpZiB0aGVyZSBhcmUgbm8KKwkgY2FsbGVyLXNhdmVkIHJlZ2lz dGVycy4gICovCisgICAgICBpZiAoY2Z1bi0+bWFjaGluZS0+bm9fY2FsbGVy X3NhdmVkX3JlZ2lzdGVycykKKwl2ZWNfcmVnc2l6ZSA9IChUQVJHRVRfQVZY NTEyRiA/IDY0IDogKFRBUkdFVF9BVlggPyAzMiA6IDE2KSk7CisgICAgICBl bHNlCisJdmVjX3JlZ3NpemUgPSAxNjsKKworICAgICAgaWYgKGNmdW4tPm1h Y2hpbmUtPmZ1bmNfdHlwZSA9PSBUWVBFX05PUk1BTCkKKwl7CisJICAvKiBJ bmNvbWluZyBzdGFjayBtYXkgYmUgMzItYml0IGFsaWduZWQgaW4gMzItYml0 IG1vZGUuICAqLworCSAgZ2NjX2Fzc2VydCAoIVRBUkdFVF82NEJJVCB8fCBp bmNvbWluZ19zdGFja19ib3VuZGFyeSA+PSAxMjgpOworCSAgLyogRG9uJ3Qg b3Zlci1hbGlnbiB2ZWN0b3IgcmVnaXN0ZXIgc2F2ZSBhcmVhLiAgKi8KKwkg IGluY29taW5nX3N0YWNrX2JvdW5kYXJ5IC89IEJJVFNfUEVSX1VOSVQ7CisJ ICBpZiAoaW5jb21pbmdfc3RhY2tfYm91bmRhcnkgPiB2ZWNfcmVnc2l6ZSkK KwkgICAgaW5jb21pbmdfc3RhY2tfYm91bmRhcnkgPSB2ZWNfcmVnc2l6ZTsK KwkgIG9mZnNldCA9IFJPVU5EX1VQIChvZmZzZXQsIGluY29taW5nX3N0YWNr X2JvdW5kYXJ5KTsKKwl9CisKKyAgICAgIG9mZnNldCArPSBmcmFtZS0+bnNz ZXJlZ3MgKiB2ZWNfcmVnc2l6ZTsKICAgICB9CiAgIGZyYW1lLT5zc2VfcmVn X3NhdmVfb2Zmc2V0ID0gb2Zmc2V0OwogCkBAIC0xMTM0Miw4ICsxMTU1Miwx MiBAQCBpeDg2X2NvbXB1dGVfZnJhbWVfbGF5b3V0IChzdHJ1Y3QgaXg4Nl9m cmFtZSAqZnJhbWUpCiAgIC8qIFNpemUgcHJvbG9ndWUgbmVlZHMgdG8gYWxs b2NhdGUuICAqLwogICB0b19hbGxvY2F0ZSA9IG9mZnNldCAtIGZyYW1lLT5z c2VfcmVnX3NhdmVfb2Zmc2V0OwogCi0gIGlmICgoIXRvX2FsbG9jYXRlICYm IGZyYW1lLT5ucmVncyA8PSAxKQotICAgICAgfHwgKFRBUkdFVF82NEJJVCAm JiB0b19hbGxvY2F0ZSA+PSAoSE9TVF9XSURFX0lOVCkgMHg4MDAwMDAwMCkp CisgIC8qIFdlIG11c3QgdXNlIG1vdmUgdG8gc2F2ZSBib3VuZCBhbmQgbWFz ayByZWdpc3RlcnMuICAqLworICBpZiAoZnJhbWUtPm5ibmRyZWdzID09IDAK KyAgICAgICYmIGZyYW1lLT5ubWFza3JlZ3MgPT0gMAorICAgICAgJiYgKCgh dG9fYWxsb2NhdGUgJiYgZnJhbWUtPm5yZWdzIDw9IDEpCisJICAgfHwgKFRB UkdFVF82NEJJVAorCSAgICAgICAmJiB0b19hbGxvY2F0ZSA+PSAoSE9TVF9X SURFX0lOVCkgMHg4MDAwMDAwMCkpKQogICAgIGZyYW1lLT5zYXZlX3JlZ3Nf dXNpbmdfbW92ID0gZmFsc2U7CiAKICAgaWYgKGl4ODZfdXNpbmdfcmVkX3pv bmUgKCkKQEAgLTExMzUzLDcgKzExNTY3LDcgQEAgaXg4Nl9jb21wdXRlX2Zy YW1lX2xheW91dCAoc3RydWN0IGl4ODZfZnJhbWUgKmZyYW1lKQogICAgIHsK ICAgICAgIGZyYW1lLT5yZWRfem9uZV9zaXplID0gdG9fYWxsb2NhdGU7CiAg ICAgICBpZiAoZnJhbWUtPnNhdmVfcmVnc191c2luZ19tb3YpCi0JZnJhbWUt PnJlZF96b25lX3NpemUgKz0gZnJhbWUtPm5yZWdzICogVU5JVFNfUEVSX1dP UkQ7CisJZnJhbWUtPnJlZF96b25lX3NpemUgKz0gaXg4Nl9yZWdfc2F2ZV9h cmVhX3NpemUgKGZyYW1lKTsKICAgICAgIGlmIChmcmFtZS0+cmVkX3pvbmVf c2l6ZSA+IFJFRF9aT05FX1NJWkUgLSBSRURfWk9ORV9SRVNFUlZFKQogCWZy YW1lLT5yZWRfem9uZV9zaXplID0gUkVEX1pPTkVfU0laRSAtIFJFRF9aT05F X1JFU0VSVkU7CiAgICAgfQpAQCAtMTE1MTMsOCArMTE3MjcsMjggQEAgaXg4 Nl9lbWl0X3NhdmVfcmVnX3VzaW5nX21vdiAobWFjaGluZV9tb2RlIG1vZGUs IHVuc2lnbmVkIGludCByZWdubywKICAgYWRkciA9IGNob29zZV9iYXNlYWRk ciAoY2ZhX29mZnNldCk7CiAgIG1lbSA9IGdlbl9mcmFtZV9tZW0gKG1vZGUs IGFkZHIpOwogCi0gIC8qIEZvciBTU0Ugc2F2ZXMsIHdlIG5lZWQgdG8gaW5k aWNhdGUgdGhlIDEyOC1iaXQgYWxpZ25tZW50LiAgKi8KLSAgc2V0X21lbV9h bGlnbiAobWVtLCBHRVRfTU9ERV9BTElHTk1FTlQgKG1vZGUpKTsKKyAgLyog Rm9yIFNTRSBzYXZlcywgd2UgbmVlZCB0byBpbmRpY2F0ZSB0aGUgMTI4LWJp dCBhbGlnbm1lbnQuICBJbgorICAgICBpbnRlcnJ1cHQgaGFuZGxlciwgc3Rh Y2sgaXMgYWxpZ25lZCB0byB3b3JkX21vZGUuICBXZSBjYW4ndCB1c2UKKyAg ICAgZ2VuX3NzZV9zdG9yZXVwcyBzaW5jZSBSVFhfRlJBTUVfUkVMQVRFRF9Q IGlzIHNldCBhbmQKKyAgICAgZHdhcmYyb3V0X2ZsdXNoX3F1ZXVlZF9yZWdf c2F2ZXMgZG9lc24ndCBsaWtlIFVOU1BFQ19TVE9SRVUuCisgICAgIEFsc28g Z2VuX3NzZV9zdG9yZXVwcyBkb2Vzbid0IGNvdmVyIEFWWCBub3IgQVZYNTEy LiAgKi8KKyAgdW5zaWduZWQgaW50IGluY29taW5nX3N0YWNrX2JvdW5kYXJ5 OworICBpZiAoY2Z1bi0+bWFjaGluZS0+ZnVuY190eXBlID09IFRZUEVfTk9S TUFMKQorICAgIHsKKyAgICAgIGluY29taW5nX3N0YWNrX2JvdW5kYXJ5CisJ PSBNQVggKGNydGwtPnBhcm1fc3RhY2tfYm91bmRhcnksIGl4ODZfaW5jb21p bmdfc3RhY2tfYm91bmRhcnkpOworICAgICAgaWYgKCFUQVJHRVRfNjRCSVQg fHwgaW5jb21pbmdfc3RhY2tfYm91bmRhcnkgPj0gMTI4KQorCXsKKwkgIC8q IERvbid0IG92ZXItYWxpZ24gdmVjdG9yIHJlZ2lzdGVyIHNhdmUgc2xvdC4g ICovCisJICBpZiAoaW5jb21pbmdfc3RhY2tfYm91bmRhcnkgPiBHRVRfTU9E RV9BTElHTk1FTlQgKG1vZGUpKQorCSAgICBpbmNvbWluZ19zdGFja19ib3Vu ZGFyeSA9IEdFVF9NT0RFX0FMSUdOTUVOVCAobW9kZSk7CisJfQorICAgICAg ZWxzZQorCWdjY191bnJlYWNoYWJsZSAoKTsKKyAgICB9CisgIGVsc2UKKyAg ICBpbmNvbWluZ19zdGFja19ib3VuZGFyeSA9IEdFVF9NT0RFX0FMSUdOTUVO VCAod29yZF9tb2RlKTsKKyAgc2V0X21lbV9hbGlnbiAobWVtLCBpbmNvbWlu Z19zdGFja19ib3VuZGFyeSk7CiAKICAgaW5zbiA9IGVtaXRfbW92ZV9pbnNu IChtZW0sIHJlZyk7CiAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0g MTsKQEAgLTExNTc1LDggKzExODA5LDkgQEAgaXg4Nl9lbWl0X3NhdmVfcmVn c191c2luZ19tb3YgKEhPU1RfV0lERV9JTlQgY2ZhX29mZnNldCkKICAgZm9y IChyZWdubyA9IDA7IHJlZ25vIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSOyBy ZWdubysrKQogICAgIGlmICghU1NFX1JFR05PX1AgKHJlZ25vKSAmJiBpeDg2 X3NhdmVfcmVnIChyZWdubywgdHJ1ZSkpCiAgICAgICB7Ci0gICAgICAgIGl4 ODZfZW1pdF9zYXZlX3JlZ191c2luZ19tb3YgKHdvcmRfbW9kZSwgcmVnbm8s IGNmYV9vZmZzZXQpOwotCWNmYV9vZmZzZXQgLT0gVU5JVFNfUEVSX1dPUkQ7 CisJZW51bSBtYWNoaW5lX21vZGUgcmVnX21vZGUgPSBHRVRfTU9ERSAocmVn bm9fcmVnX3J0eFtyZWdub10pOworCWl4ODZfZW1pdF9zYXZlX3JlZ191c2lu Z19tb3YgKHJlZ19tb2RlLCByZWdubywgY2ZhX29mZnNldCk7CisJY2ZhX29m ZnNldCAtPSBHRVRfTU9ERV9TSVpFIChyZWdfbW9kZSk7CiAgICAgICB9CiB9 CiAKQEAgLTExNTg2LDEyICsxMTgyMSwyNyBAQCBzdGF0aWMgdm9pZAogaXg4 Nl9lbWl0X3NhdmVfc3NlX3JlZ3NfdXNpbmdfbW92IChIT1NUX1dJREVfSU5U IGNmYV9vZmZzZXQpCiB7CiAgIHVuc2lnbmVkIGludCByZWdubzsKKyAgZW51 bSBtYWNoaW5lX21vZGUgdmVjdG9yX3JlZ19tb2RlOworCisgIGlmIChjZnVu LT5tYWNoaW5lLT5ub19jYWxsZXJfc2F2ZWRfcmVnaXN0ZXJzKQorICAgIHsK KyAgICAgIC8qIFdlIG11c3Qgc2F2ZSBmdWxsIHZlY3RvciByZWdpc3RlcnMg aWYgdGhlcmUgYXJlIG5vCisJIGNhbGxlci1zYXZlZCByZWdpc3RlcnMuICAq LworICAgICAgaWYgKFRBUkdFVF9BVlg1MTJGKQorCXZlY3Rvcl9yZWdfbW9k ZSA9IFYxNlNGbW9kZTsKKyAgICAgIGVsc2UgaWYgKFRBUkdFVF9BVlgpCisJ dmVjdG9yX3JlZ19tb2RlID0gVjhTRm1vZGU7CisgICAgICBlbHNlCisJdmVj dG9yX3JlZ19tb2RlID0gVjRTRm1vZGU7CisgICAgfQorICBlbHNlCisgICAg dmVjdG9yX3JlZ19tb2RlID0gVjRTRm1vZGU7CiAKICAgZm9yIChyZWdubyA9 IDA7IHJlZ25vIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSOyByZWdubysrKQog ICAgIGlmIChTU0VfUkVHTk9fUCAocmVnbm8pICYmIGl4ODZfc2F2ZV9yZWcg KHJlZ25vLCB0cnVlKSkKICAgICAgIHsKLQlpeDg2X2VtaXRfc2F2ZV9yZWdf dXNpbmdfbW92IChWNFNGbW9kZSwgcmVnbm8sIGNmYV9vZmZzZXQpOwotCWNm YV9vZmZzZXQgLT0gMTY7CisJaXg4Nl9lbWl0X3NhdmVfcmVnX3VzaW5nX21v diAodmVjdG9yX3JlZ19tb2RlLCByZWdubywgY2ZhX29mZnNldCk7CisJY2Zh X29mZnNldCAtPSBHRVRfTU9ERV9TSVpFICh2ZWN0b3JfcmVnX21vZGUpOwog ICAgICAgfQogfQogCkBAIC0xMzAzNiwxMiArMTMyODYsMTMgQEAgaXg4Nl9l bWl0X3Jlc3RvcmVfcmVnc191c2luZ19tb3YgKEhPU1RfV0lERV9JTlQgY2Zh X29mZnNldCwKICAgZm9yIChyZWdubyA9IDA7IHJlZ25vIDwgRklSU1RfUFNF VURPX1JFR0lTVEVSOyByZWdubysrKQogICAgIGlmICghU1NFX1JFR05PX1Ag KHJlZ25vKSAmJiBpeDg2X3NhdmVfcmVnIChyZWdubywgbWF5YmVfZWhfcmV0 dXJuKSkKICAgICAgIHsKLQlydHggcmVnID0gZ2VuX3J0eF9SRUcgKHdvcmRf bW9kZSwgcmVnbm8pOworCWVudW0gbWFjaGluZV9tb2RlIHJlZ19tb2RlID0g R0VUX01PREUgKHJlZ25vX3JlZ19ydHhbcmVnbm9dKTsKKwlydHggcmVnID0g Z2VuX3J0eF9SRUcgKHJlZ19tb2RlLCByZWdubyk7CiAJcnR4IG1lbTsKIAly dHhfaW5zbiAqaW5zbjsKIAogCW1lbSA9IGNob29zZV9iYXNlYWRkciAoY2Zh X29mZnNldCk7Ci0JbWVtID0gZ2VuX2ZyYW1lX21lbSAod29yZF9tb2RlLCBt ZW0pOworCW1lbSA9IGdlbl9mcmFtZV9tZW0gKHJlZ19tb2RlLCBtZW0pOwog CWluc24gPSBlbWl0X21vdmVfaW5zbiAocmVnLCBtZW0pOwogCiAgICAgICAg IGlmIChtLT5mcy5jZmFfcmVnID09IGNydGwtPmRyYXBfcmVnICYmIHJlZ25v ID09IFJFR05PIChjcnRsLT5kcmFwX3JlZykpCkBAIC0xMzA2MCw3ICsxMzMx MSw3IEBAIGl4ODZfZW1pdF9yZXN0b3JlX3JlZ3NfdXNpbmdfbW92IChIT1NU X1dJREVfSU5UIGNmYV9vZmZzZXQsCiAJZWxzZQogCSAgaXg4Nl9hZGRfY2Zh X3Jlc3RvcmVfbm90ZSAoTlVMTCwgcmVnLCBjZmFfb2Zmc2V0KTsKIAotCWNm YV9vZmZzZXQgLT0gVU5JVFNfUEVSX1dPUkQ7CisJY2ZhX29mZnNldCAtPSBH RVRfTU9ERV9TSVpFIChyZWdfbW9kZSk7CiAgICAgICB9CiB9CiAKQEAgLTEz MDcxLDIxICsxMzMyMiw1NiBAQCBpeDg2X2VtaXRfcmVzdG9yZV9zc2VfcmVn c191c2luZ19tb3YgKEhPU1RfV0lERV9JTlQgY2ZhX29mZnNldCwKIAkJCQkg ICAgICBib29sIG1heWJlX2VoX3JldHVybikKIHsKICAgdW5zaWduZWQgaW50 IHJlZ25vOworICBlbnVtIG1hY2hpbmVfbW9kZSB2ZWN0b3JfcmVnX21vZGU7 CisKKyAgaWYgKGNmdW4tPm1hY2hpbmUtPm5vX2NhbGxlcl9zYXZlZF9yZWdp c3RlcnMpCisgICAgeworICAgICAgLyogV2UgbXVzdCByZXN0b3JlIGZ1bGwg dmVjdG9yIHJlZ2lzdGVycyBpZiB0aGVyZSBhcmUgbm8KKwkgY2FsbGVyLXNh dmVkIHJlZ2lzdGVycy4gICovCisgICAgICBpZiAoVEFSR0VUX0FWWDUxMkYp CisJdmVjdG9yX3JlZ19tb2RlID0gVjE2U0Ztb2RlOworICAgICAgZWxzZSBp ZiAoVEFSR0VUX0FWWCkKKwl2ZWN0b3JfcmVnX21vZGUgPSBWOFNGbW9kZTsK KyAgICAgIGVsc2UKKwl2ZWN0b3JfcmVnX21vZGUgPSBWNFNGbW9kZTsKKyAg ICB9CisgIGVsc2UKKyAgICB2ZWN0b3JfcmVnX21vZGUgPSBWNFNGbW9kZTsK KworICAvKiBJbiBpbnRlcnJ1cHQgaGFuZGxlciwgc3RhY2sgaXMgYWxpZ25l ZCB0byB3b3JkX21vZGUuICAqLworICB1bnNpZ25lZCBpbnQgaW5jb21pbmdf c3RhY2tfYm91bmRhcnk7CisgIGlmIChjZnVuLT5tYWNoaW5lLT5mdW5jX3R5 cGUgPT0gVFlQRV9OT1JNQUwpCisgICAgeworICAgICAgaW5jb21pbmdfc3Rh Y2tfYm91bmRhcnkKKwk9IE1BWCAoY3J0bC0+cGFybV9zdGFja19ib3VuZGFy eSwgaXg4Nl9pbmNvbWluZ19zdGFja19ib3VuZGFyeSk7CisgICAgICBpZiAo IVRBUkdFVF82NEJJVCB8fCBpbmNvbWluZ19zdGFja19ib3VuZGFyeSA+PSAx MjgpCisJeworCSAgLyogRG9uJ3Qgb3Zlci1hbGlnbiB2ZWN0b3IgcmVnaXN0 ZXIgc2F2ZSBzbG90LiAgKi8KKwkgIGlmIChpbmNvbWluZ19zdGFja19ib3Vu ZGFyeQorCSAgICAgID4gR0VUX01PREVfQUxJR05NRU5UICh2ZWN0b3JfcmVn X21vZGUpKQorCSAgICBpbmNvbWluZ19zdGFja19ib3VuZGFyeQorCSAgICAg ID0gR0VUX01PREVfQUxJR05NRU5UICh2ZWN0b3JfcmVnX21vZGUpOworCX0K KyAgICAgIGVsc2UKKwlnY2NfdW5yZWFjaGFibGUgKCk7CisgICAgfQorICBl bHNlCisgICAgaW5jb21pbmdfc3RhY2tfYm91bmRhcnkgPSBHRVRfTU9ERV9B TElHTk1FTlQgKHdvcmRfbW9kZSk7CiAKICAgZm9yIChyZWdubyA9IDA7IHJl Z25vIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSOyByZWdubysrKQogICAgIGlm IChTU0VfUkVHTk9fUCAocmVnbm8pICYmIGl4ODZfc2F2ZV9yZWcgKHJlZ25v LCBtYXliZV9laF9yZXR1cm4pKQogICAgICAgewotCXJ0eCByZWcgPSBnZW5f cnR4X1JFRyAoVjRTRm1vZGUsIHJlZ25vKTsKKwlydHggcmVnID0gZ2VuX3J0 eF9SRUcgKHZlY3Rvcl9yZWdfbW9kZSwgcmVnbm8pOwogCXJ0eCBtZW07CiAK IAltZW0gPSBjaG9vc2VfYmFzZWFkZHIgKGNmYV9vZmZzZXQpOwotCW1lbSA9 IGdlbl9ydHhfTUVNIChWNFNGbW9kZSwgbWVtKTsKLQlzZXRfbWVtX2FsaWdu IChtZW0sIDEyOCk7CisJbWVtID0gZ2VuX3J0eF9NRU0gKHZlY3Rvcl9yZWdf bW9kZSwgbWVtKTsKKwlzZXRfbWVtX2FsaWduIChtZW0sIGluY29taW5nX3N0 YWNrX2JvdW5kYXJ5KTsKIAllbWl0X21vdmVfaW5zbiAocmVnLCBtZW0pOwog CiAJaXg4Nl9hZGRfY2ZhX3Jlc3RvcmVfbm90ZSAoTlVMTCwgcmVnLCBjZmFf b2Zmc2V0KTsKIAotCWNmYV9vZmZzZXQgLT0gMTY7CisJY2ZhX29mZnNldCAt PSBHRVRfTU9ERV9TSVpFICh2ZWN0b3JfcmVnX21vZGUpOwogICAgICAgfQog fQogCkBAIC0xMzE0OSw4ICsxMzQzNSw5IEBAIGl4ODZfZXhwYW5kX2VwaWxv Z3VlIChpbnQgc3R5bGUpCiAgIGlmIChjcnRsLT5jYWxsc19laF9yZXR1cm4g JiYgc3R5bGUgIT0gMikKICAgICBmcmFtZS5yZWdfc2F2ZV9vZmZzZXQgLT0g MiAqIFVOSVRTX1BFUl9XT1JEOwogCi0gIC8qIEVIX1JFVFVSTiByZXF1aXJl cyB0aGUgdXNlIG9mIG1vdmVzIHRvIGZ1bmN0aW9uIHByb3Blcmx5LiAgKi8K LSAgaWYgKGNydGwtPmNhbGxzX2VoX3JldHVybikKKyAgLyogRUhfUkVUVVJO IHJlcXVpcmVzIHRoZSB1c2Ugb2YgbW92ZXMgdG8gZnVuY3Rpb24gcHJvcGVy bHkuICBXZSBtdXN0CisgICAgIHVzZSBtb3ZlIHRvIHJlc3RvcmUgYm91bmQg YW5kIG1hc2sgcmVnaXN0ZXJzLiAgKi8KKyAgaWYgKGNydGwtPmNhbGxzX2Vo X3JldHVybiB8fCBmcmFtZS5uYm5kcmVncyA+IDAgfHwgZnJhbWUubm1hc2ty ZWdzID4gMCkKICAgICByZXN0b3JlX3JlZ3NfdmlhX21vdiA9IHRydWU7CiAg IC8qIFNFSCByZXF1aXJlcyB0aGUgdXNlIG9mIHBvcHMgdG8gaWRlbnRpZnkg dGhlIGVwaWxvZ3VlLiAgKi8KICAgZWxzZSBpZiAoVEFSR0VUX1NFSCkKQEAg LTEzMzkxLDcgKzEzNjc4LDIwIEBAIGl4ODZfZXhwYW5kX2VwaWxvZ3VlIChp bnQgc3R5bGUpCiAgICAgICByZXR1cm47CiAgICAgfQogCi0gIGlmIChjcnRs LT5hcmdzLnBvcHNfYXJncyAmJiBjcnRsLT5hcmdzLnNpemUpCisgIGlmIChj ZnVuLT5tYWNoaW5lLT5mdW5jX3R5cGUgIT0gVFlQRV9OT1JNQUwpCisgICAg eworICAgICAgLyogUmV0dXJuIHdpdGggdGhlICJJUkVUIiBpbnN0cnVjdGlv biBmcm9tIGludGVycnVwdCBoYW5kbGVyLgorCSBQb3AgdGhlICdFUlJPUl9D T0RFJyBvZmYgdGhlIHN0YWNrIGJlZm9yZSB0aGUgJ0lSRVQnCisJIGluc3Ry dWN0aW9uIGluIGV4Y2VwdGlvbiBoYW5kbGVyLiAgKi8KKyAgICAgIGlmIChj ZnVuLT5tYWNoaW5lLT5mdW5jX3R5cGUgPT0gVFlQRV9FWENFUFRJT04pCisJ eworCSAgcnR4IHIgPSBwbHVzX2NvbnN0YW50IChQbW9kZSwgc3RhY2tfcG9p bnRlcl9ydHgsCisJCQkJIFVOSVRTX1BFUl9XT1JEKTsKKwkgIGVtaXRfaW5z biAoZ2VuX3J0eF9TRVQgKHN0YWNrX3BvaW50ZXJfcnR4LCByKSk7CisJfQor ICAgICAgZW1pdF9qdW1wX2luc24gKGdlbl9pbnRlcnJ1cHRfcmV0dXJuICgp KTsKKyAgICB9CisgIGVsc2UgaWYgKGNydGwtPmFyZ3MucG9wc19hcmdzICYm IGNydGwtPmFyZ3Muc2l6ZSkKICAgICB7CiAgICAgICBydHggcG9wYyA9IEdF Tl9JTlQgKGNydGwtPmFyZ3MucG9wc19hcmdzKTsKIApAQCAtMTgzNjQsNiAr MTg2NjQsMTQgQEAgaXg4Nl9leHBhbmRfbW92ZSAobWFjaGluZV9tb2RlIG1v ZGUsIHJ0eCBvcGVyYW5kc1tdKQogICBydHggb3AwLCBvcDE7CiAgIGVudW0g dGxzX21vZGVsIG1vZGVsOwogCisgIGlmIChjZnVuLT5tYWNoaW5lLT5mdW5j X3R5cGUgIT0gVFlQRV9OT1JNQUwgJiYgSVNfU1RBQ0tfTU9ERSAobW9kZSkp CisgICAgeworICAgICAgZXJyb3IgKCI4MDM4NyBpbnN0cnVjdGlvbnMgYXJl bid0IGFsbG93ZWQgaW4gJXMgc2VydmljZSByb3V0aW5lIiwKKwkgICAgIChj ZnVuLT5tYWNoaW5lLT5mdW5jX3R5cGUgPT0gVFlQRV9FWENFUFRJT04KKwkg ICAgICA/ICJleGNlcHRpb24iIDogImludGVycnVwdCIpKTsKKyAgICAgIHJl dHVybjsKKyAgICB9CisKICAgb3AwID0gb3BlcmFuZHNbMF07CiAgIG9wMSA9 IG9wZXJhbmRzWzFdOwogCkBAIC0xODUwOCw2ICsxODgxNiwxNSBAQCBpeDg2 X2V4cGFuZF92ZWN0b3JfbW92ZSAobWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBv cGVyYW5kc1tdKQogICBydHggb3AwID0gb3BlcmFuZHNbMF0sIG9wMSA9IG9w ZXJhbmRzWzFdOwogICB1bnNpZ25lZCBpbnQgYWxpZ24gPSBHRVRfTU9ERV9B TElHTk1FTlQgKG1vZGUpOwogCisgIGlmIChjZnVuLT5tYWNoaW5lLT5mdW5j X3R5cGUgIT0gVFlQRV9OT1JNQUwKKyAgICAgICYmIFZBTElEX01NWF9SRUdf TU9ERSAobW9kZSkpCisgICAgeworICAgICAgZXJyb3IgKCJNTVgvM0Rub3cg aW5zdHJ1Y3Rpb25zIGFyZW4ndCBhbGxvd2VkIGluICVzIHNlcnZpY2Ugcm91 dGluZSIsCisJICAgICAoY2Z1bi0+bWFjaGluZS0+ZnVuY190eXBlID09IFRZ UEVfRVhDRVBUSU9OCisJICAgICAgPyAiZXhjZXB0aW9uIiA6ICJpbnRlcnJ1 cHQiKSk7CisgICAgICByZXR1cm47CisgICAgfQorCiAgIGlmIChwdXNoX29w ZXJhbmQgKG9wMCwgVk9JRG1vZGUpKQogICAgIG9wMCA9IGVtaXRfbW92ZV9y ZXNvbHZlX3B1c2ggKG1vZGUsIG9wMCk7CiAKQEAgLTI2NTkzLDYgKzI2OTEw LDE3IEBAIGl4ODZfZXhwYW5kX2NhbGwgKHJ0eCByZXR2YWwsIHJ0eCBmbmFk ZHIsIHJ0eCBjYWxsYXJnMSwKICAgcnR4IHZlY1szXTsKICAgcnR4IHVzZSA9 IE5VTEwsIGNhbGw7CiAgIHVuc2lnbmVkIGludCB2ZWNfbGVuID0gMDsKKyAg dHJlZSBmbmRlY2w7CisKKyAgaWYgKEdFVF9DT0RFIChYRVhQIChmbmFkZHIs IDApKSA9PSBTWU1CT0xfUkVGKQorICAgIHsKKyAgICAgIGZuZGVjbCA9IFNZ TUJPTF9SRUZfREVDTCAoWEVYUCAoZm5hZGRyLCAwKSk7CisgICAgICBpZiAo Zm5kZWNsCisJICAmJiAobG9va3VwX2F0dHJpYnV0ZSAoImludGVycnVwdCIs IERFQ0xfQVRUUklCVVRFUyAoZm5kZWNsKSkpKQorCWVycm9yICgiaW50ZXJy dXB0IHNlcnZpY2Ugcm91dGluZSBjYW4ndCBiZSBjYWxsZWQgZGlyZWN0bHki KTsKKyAgICB9CisgIGVsc2UKKyAgICBmbmRlY2wgPSBOVUxMX1RSRUU7CiAK ICAgaWYgKHBvcCA9PSBjb25zdDBfcnR4KQogICAgIHBvcCA9IE5VTEw7CkBA IC0yNjY5MCw4ICsyNzAxOCwzMCBAQCBpeDg2X2V4cGFuZF9jYWxsIChydHgg cmV0dmFsLCBydHggZm5hZGRyLCBydHggY2FsbGFyZzEsCiAgICAgICB2ZWNb dmVjX2xlbisrXSA9IHBvcDsKICAgICB9CiAKLSAgaWYgKFRBUkdFVF82NEJJ VF9NU19BQkkKLSAgICAgICYmICghY2FsbGFyZzIgfHwgSU5UVkFMIChjYWxs YXJnMikgIT0gLTIpKQorICBpZiAoY2Z1bi0+bWFjaGluZS0+bm9fY2FsbGVy X3NhdmVkX3JlZ2lzdGVycworICAgICAgJiYgKCFmbmRlY2wKKwkgIHx8ICFs b29rdXBfYXR0cmlidXRlICgibm9fY2FsbGVyX3NhdmVkX3JlZ2lzdGVycyIs CisJCQkJREVDTF9BVFRSSUJVVEVTIChmbmRlY2wpKSkpCisgICAgeworICAg ICAgc3RhdGljIGNvbnN0IGNoYXIgaXg4Nl9jYWxsX3VzZWRfcmVnc1tdID0g Q0FMTF9VU0VEX1JFR0lTVEVSUzsKKyAgICAgIGNoYXIgY19tYXNrID0gKChU QVJHRVRfNjRCSVQKKwkJICAgICAgJiYgaXg4Nl9mdW5jdGlvbl9hYmkgKGZu ZGVjbCkgPT0gTVNfQUJJKQorCQkgICAgID8gKDEgPDwgMykKKwkJICAgICA6 IFRBUkdFVF82NEJJVCA/ICgxIDw8IDIpIDogKDEgPDwgMSkpOworCisgICAg ICAvKiBJZiB0aGVyZSBhcmUgbm8gY2FsbGVyLXNhdmVkIHJlZ2lzdGVycywg YWRkIGFsbCByZWdpc3RlcnMKKwkgdGhhdCBhcmUgY2xvYmJlcmVkIGJ5IHRo ZSBjYWxsLiAgKi8KKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRklSU1Rf UFNFVURPX1JFR0lTVEVSOyBpKyspCisJaWYgKCFmaXhlZF9yZWdzW2ldCisJ ICAgICYmIChpeDg2X2NhbGxfdXNlZF9yZWdzW2ldID09IDEKKwkJfHwgKGl4 ODZfY2FsbF91c2VkX3JlZ3NbaV0gJiBjX21hc2spKQorCSAgICAmJiAhU1RB Q0tfUkVHTk9fUCAoaSkKKwkgICAgJiYgIU1NWF9SRUdOT19QIChpKSkKKwkg IGNsb2JiZXJfcmVnICgmdXNlLAorCQkgICAgICAgZ2VuX3J0eF9SRUcgKEdF VF9NT0RFIChyZWdub19yZWdfcnR4W2ldKSwgaSkpOworICAgIH0KKyAgZWxz ZSBpZiAoVEFSR0VUXzY0QklUX01TX0FCSQorCSAgICYmICghY2FsbGFyZzIg fHwgSU5UVkFMIChjYWxsYXJnMikgIT0gLTIpKQogICAgIHsKICAgICAgIGlu dCBjb25zdCBjcmVnc19zaXplCiAJPSBBUlJBWV9TSVpFICh4ODZfNjRfbXNf c3lzdl9leHRyYV9jbG9iYmVyZWRfcmVnaXN0ZXJzKTsKQEAgLTQ0MDc2LDYg KzQ0NDI2LDY5IEBAIGl4ODZfaGFuZGxlX2ZuZGVjbF9hdHRyaWJ1dGUgKHRy ZWUgKm5vZGUsIHRyZWUgbmFtZSwgdHJlZSwgaW50LAogICByZXR1cm4gTlVM TF9UUkVFOwogfQogCitzdGF0aWMgdHJlZQoraXg4Nl9oYW5kbGVfbm9fY2Fs bGVyX3NhdmVkX3JlZ2lzdGVyc19hdHRyaWJ1dGUgKHRyZWUgKm5vZGUsCisJ CQkJCQkgdHJlZSBuYW1lLCB0cmVlLCBpbnQsCisJCQkJCQkgYm9vbCAqbm9f YWRkX2F0dHJzKQoreworICBpZiAoVFJFRV9DT0RFICgqbm9kZSkgIT0gRlVO Q1RJT05fREVDTCkKKyAgICB7CisgICAgICB3YXJuaW5nIChPUFRfV2F0dHJp YnV0ZXMsICIlcUUgYXR0cmlidXRlIG9ubHkgYXBwbGllcyB0byBmdW5jdGlv bnMiLAorCSAgICAgICBuYW1lKTsKKyAgICAgICpub19hZGRfYXR0cnMgPSB0 cnVlOworICAgIH0KKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworc3RhdGlj IHRyZWUKK2l4ODZfaGFuZGxlX2ludGVycnVwdF9hdHRyaWJ1dGUgKHRyZWUg Km5vZGUsIHRyZWUgbmFtZSwgdHJlZSwgaW50LAorCQkJCSBib29sICpub19h ZGRfYXR0cnMpCit7CisgIGlmIChUUkVFX0NPREUgKCpub2RlKSAhPSBGVU5D VElPTl9ERUNMKQorICAgIHsKKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmli dXRlcywgIiVxRSBhdHRyaWJ1dGUgb25seSBhcHBsaWVzIHRvIGZ1bmN0aW9u cyIsCisJICAgICAgIG5hbWUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRy dWU7CisgICAgfQorCisgIC8qIERFQ0xfUkVTVUxUIGFuZCBERUNMX0FSR1VN RU5UUyBkbyBub3QgZXhpc3QgdGhlcmUgeWV0LAorICAgICBidXQgdGhlIGZ1 bmN0aW9uIHR5cGUgY29udGFpbnMgYXJncyBhbmQgcmV0dXJuIHR5cGUgZGF0 YS4gICovCisgIHRyZWUgZnVuY190eXBlID0gVFJFRV9UWVBFICgqbm9kZSk7 CisgIHRyZWUgcmV0dXJuX3R5cGUgPSBUUkVFX1RZUEUgKGZ1bmNfdHlwZSk7 CisKKyAgaW50IG5hcmdzID0gMDsKKyAgdHJlZSBjdXJyZW50X2FyZ190eXBl ID0gVFlQRV9BUkdfVFlQRVMgKGZ1bmNfdHlwZSk7CisgIHdoaWxlIChjdXJy ZW50X2FyZ190eXBlCisJICYmICEgVk9JRF9UWVBFX1AgKFRSRUVfVkFMVUUg KGN1cnJlbnRfYXJnX3R5cGUpKSkKKyAgICB7CisgICAgICBpZiAobmFyZ3Mg PT0gMCkKKwl7CisJICBpZiAoISBQT0lOVEVSX1RZUEVfUCAoVFJFRV9WQUxV RSAoY3VycmVudF9hcmdfdHlwZSkpKQorCSAgICBlcnJvciAoImludGVycnVw dCBzZXJ2aWNlIHJvdXRpbmUgc2hvdWxkIGhhdmUgYSBwb2ludGVyICIKKwkJ ICAgImFzIHRoZSBmaXJzdCBhcmd1bWVudCIpOworCX0KKyAgICAgIGVsc2Ug aWYgKG5hcmdzID09IDEpCisJeworCSAgaWYgKFRSRUVfQ09ERSAoVFJFRV9W QUxVRSAoY3VycmVudF9hcmdfdHlwZSkpICE9IElOVEVHRVJfVFlQRQorCSAg ICAgIHx8IFRZUEVfTU9ERSAoVFJFRV9WQUxVRSAoY3VycmVudF9hcmdfdHlw ZSkpICE9IHdvcmRfbW9kZSkKKwkgICAgZXJyb3IgKCJpbnRlcnJ1cHQgc2Vy dmljZSByb3V0aW5lIHNob3VsZCBoYXZlIHVuc2lnbmVkICVzIgorCQkgICAi aW50IGFzIHRoZSBzZWNvbmQgYXJndW1lbnQiLAorCQkgICBUQVJHRVRfNjRC SVQKKwkJICAgPyAoVEFSR0VUX1gzMiA/ICJsb25nIGxvbmcgIiA6ICJsb25n ICIpCisJCSAgIDogIiIpOworCX0KKyAgICAgIG5hcmdzKys7CisgICAgICBj dXJyZW50X2FyZ190eXBlID0gVFJFRV9DSEFJTiAoY3VycmVudF9hcmdfdHlw ZSk7CisgICAgfQorICBpZiAoIW5hcmdzIHx8IG5hcmdzID4gMikKKyAgICBl cnJvciAoImludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgY2FuIG9ubHkgaGF2 ZSBhIHBvaW50ZXIgYXJndW1lbnQgIgorCSAgICJhbmQgYW4gb3B0aW9uYWwg aW50ZWdlciBhcmd1bWVudCIpOworICBpZiAoISBWT0lEX1RZUEVfUCAocmV0 dXJuX3R5cGUpKQorICAgIGVycm9yICgiaW50ZXJydXB0IHNlcnZpY2Ugcm91 dGluZSBjYW4ndCBoYXZlIG5vbi12b2lkIHJldHVybiB2YWx1ZSIpOworCisg IHJldHVybiBOVUxMX1RSRUU7Cit9CisKIHN0YXRpYyBib29sCiBpeDg2X21z X2JpdGZpZWxkX2xheW91dF9wIChjb25zdF90cmVlIHJlY29yZF90eXBlKQog ewpAQCAtNDgwNzcsNiArNDg0OTAsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBhdHRyaWJ1dGVfc3BlYyBpeDg2X2F0dHJpYnV0ZV90YWJsZVtdID0KICAg ICBmYWxzZSB9LAogICB7ICJjYWxsZWVfcG9wX2FnZ3JlZ2F0ZV9yZXR1cm4i LCAxLCAxLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwKICAgICBpeDg2X2hhbmRsZV9j YWxsZWVfcG9wX2FnZ3JlZ2F0ZV9yZXR1cm4sIHRydWUgfSwKKyAgeyAiaW50 ZXJydXB0IiwgMCwgMCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLAorICAgIGl4ODZf aGFuZGxlX2ludGVycnVwdF9hdHRyaWJ1dGUsIGZhbHNlIH0sCisgIHsgIm5v X2NhbGxlcl9zYXZlZF9yZWdpc3RlcnMiLCAwLCAwLCB0cnVlLCBmYWxzZSwg ZmFsc2UsCisgICAgaXg4Nl9oYW5kbGVfbm9fY2FsbGVyX3NhdmVkX3JlZ2lz dGVyc19hdHRyaWJ1dGUsIGZhbHNlIH0sCisKICAgLyogRW5kIGVsZW1lbnQu ICAqLwogICB7IE5VTEwsICAgICAgICAwLCAwLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBOVUxMLCBmYWxzZSB9CiB9OwpAQCAtNTM5MjYsNiArNTQzNDQsOSBA QCBpeDg2X29wZXJhbmRzX29rX2Zvcl9tb3ZlX211bHRpcGxlIChydHggKm9w ZXJhbmRzLCBib29sIGxvYWQsCiAjdW5kZWYgVEFSR0VUX0FCU09MVVRFX0JJ R0dFU1RfQUxJR05NRU5UCiAjZGVmaW5lIFRBUkdFVF9BQlNPTFVURV9CSUdH RVNUX0FMSUdOTUVOVCA1MTIKIAorI3VuZGVmIFRBUkdFVF9IQVJEX1JFR05P X1NDUkFUQ0hfT0sKKyNkZWZpbmUgVEFSR0VUX0hBUkRfUkVHTk9fU0NSQVRD SF9PSyBpeDg2X2hhcmRfcmVnbm9fc2NyYXRjaF9vaworCiBzdHJ1Y3QgZ2Nj X3RhcmdldCB0YXJnZXRtID0gVEFSR0VUX0lOSVRJQUxJWkVSOwogDAogI2lu Y2x1ZGUgImd0LWkzODYuaCIKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4 Ni9pMzg2LmggYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5oCmluZGV4IGM1OWUz Y2MuLjdhMTg2MzQgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9pMzg2 LmgKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuaApAQCAtMTcyOSw2ICsx NzI5LDExIEBAIHR5cGVkZWYgc3RydWN0IGl4ODZfYXJncyB7CiAKICNkZWZp bmUgRVhJVF9JR05PUkVfU1RBQ0sgMQogCisvKiBEZWZpbmUgdGhpcyBtYWNy byBhcyBhIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gZm9yIHJlZ2lz dGVycworICAgdXNlZCBieSB0aGUgZXBpbG9ndWUgb3IgdGhlIGByZXR1cm4n IHBhdHRlcm4uICAqLworCisjZGVmaW5lIEVQSUxPR1VFX1VTRVMoUkVHTk8p IGl4ODZfZXBpbG9ndWVfdXNlcyAoUkVHTk8pCisKIC8qIE91dHB1dCBhc3Nl bWJsZXIgY29kZSBmb3IgYSBibG9jayBjb250YWluaW5nIHRoZSBjb25zdGFu dCBwYXJ0cwogICAgb2YgYSB0cmFtcG9saW5lLCBsZWF2aW5nIHNwYWNlIGZv ciB0aGUgdmFyaWFibGUgcGFydHMuICAqLwogCkBAIC0yNDQzLDYgKzI0NDgs MTggQEAgc3RydWN0IEdUWSgoKSkgbWFjaGluZV9mcmFtZV9zdGF0ZQogLyog UHJpdmF0ZSB0byB3aW5udC5jLiAgKi8KIHN0cnVjdCBzZWhfZnJhbWVfc3Rh dGU7CiAKK2VudW0gZnVuY3Rpb25fdHlwZQoreworICBUWVBFX05PUk1BTCA9 IDAsCisgIC8qIFRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzIGFuIGludGVycnVw dCBzZXJ2aWNlIHJvdXRpbmUgd2l0aCBhCisgICAgIHBvaW50ZXIgYXJndW1l bnQgYXMgc3BlY2lmaWVkIGJ5IHRoZSAiaW50ZXJydXB0IiBhdHRyaWJ1dGUu ICAqLworICBUWVBFX0lOVEVSUlVQVCwKKyAgLyogVGhlIGN1cnJlbnQgZnVu Y3Rpb24gaXMgYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB3aXRoIGEK KyAgICAgcG9pbnRlciBhcmd1bWVudCBhbmQgYW4gaW50ZWdlciBhcmd1bWVu dCBhcyBzcGVjaWZpZWQgYnkgdGhlCisgICAgICJpbnRlcnJ1cHQiIGF0dHJp YnV0ZS4gICovCisgIFRZUEVfRVhDRVBUSU9OCit9OworCiBzdHJ1Y3QgR1RZ KCgpKSBtYWNoaW5lX2Z1bmN0aW9uIHsKICAgc3RydWN0IHN0YWNrX2xvY2Fs X2VudHJ5ICpzdGFja19sb2NhbHM7CiAgIGNvbnN0IGNoYXIgKnNvbWVfbGRf bmFtZTsKQEAgLTI0OTMsNiArMjUxMCwxMyBAQCBzdHJ1Y3QgR1RZKCgpKSBt YWNoaW5lX2Z1bmN0aW9uIHsKICAgLyogSWYgdHJ1ZSwgaXQgaXMgc2FmZSB0 byBub3Qgc2F2ZS9yZXN0b3JlIERSQVAgcmVnaXN0ZXIuICAqLwogICBCT09M X0JJVEZJRUxEIG5vX2RyYXBfc2F2ZV9yZXN0b3JlIDogMTsKIAorICAvKiBG dW5jdGlvbiB0eXBlLiAgKi8KKyAgRU5VTV9CSVRGSUVMRChmdW5jdGlvbl90 eXBlKSBmdW5jX3R5cGUgOiAyOworCisgIC8qIElmIHRydWUsIHRoZSBjdXJy ZW50IGZ1bmN0aW9uIGlzIGEgZnVuY3Rpb24gc3BlY2lmaWVkIHdpdGgKKyAg ICAgdGhlICJpbnRlcnJ1cHQiIG9yICJub19jYWxsZXJfc2F2ZWRfcmVnaXN0 ZXJzIiBhdHRyaWJ1dGUuICAqLworICBCT09MX0JJVEZJRUxEIG5vX2NhbGxl cl9zYXZlZF9yZWdpc3RlcnMgOiAxOworCiAgIC8qIElmIHRydWUsIHRoZXJl IGlzIHJlZ2lzdGVyIGF2YWlsYWJsZSBmb3IgYXJndW1lbnQgcGFzc2luZy4g IFRoaXMKICAgICAgaXMgdXNlZCBvbmx5IGluIGl4ODZfZnVuY3Rpb25fb2tf Zm9yX3NpYmNhbGwgYnkgMzItYml0IHRvIGRldGVybWluZQogICAgICBpZiB0 aGVyZSBpcyBzY3JhdGNoIHJlZ2lzdGVyIGF2YWlsYWJsZSBmb3IgaW5kaXJl Y3Qgc2liY2FsbC4gIEluCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYv aTM4Ni5tZCBiL2djYy9jb25maWcvaTM4Ni9pMzg2Lm1kCmluZGV4IDhjMmVk NjAuLjhiMjJiZTQgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9pMzg2 Lm1kCisrKyBiL2djYy9jb25maWcvaTM4Ni9pMzg2Lm1kCkBAIC0xOTMsNiAr MTkzLDkgQEAKICAgVU5TUEVDX0JORENVCiAgIFVOU1BFQ19CTkRDTgogICBV TlNQRUNfTVBYX0ZFTkNFCisKKyAgOzsgSVJFVCBzdXBwb3J0CisgIFVOU1BF Q19JTlRFUlJVUFRfUkVUVVJOCiBdKQogCiAoZGVmaW5lX2NfZW51bSAidW5z cGVjdiIgWwpAQCAtMTIxNzksNiArMTIxODIsMTIgQEAKICAgIChzZXRfYXR0 ciAibW9kcm0iICIwIikKICAgIChzZXRfYXR0ciAibWF5YmVfcHJlZml4X2Ju ZCIgIjEiKV0pCiAKKyhkZWZpbmVfaW5zbiAiaW50ZXJydXB0X3JldHVybiIK KyAgWyhzaW1wbGVfcmV0dXJuKQorICAgKHVuc3BlYyBbKGNvbnN0X2ludCAw KV0gVU5TUEVDX0lOVEVSUlVQVF9SRVRVUk4pXQorICAicmVsb2FkX2NvbXBs ZXRlZCIKKyAgImlyZXQiKQorCiA7OyBVc2VkIGJ5IHg4Nl9tYWNoaW5lX2Rl cGVuZGVudF9yZW9yZyB0byBhdm9pZCBwZW5hbHR5IG9uIHNpbmdsZSBieXRl IFJFVAogOzsgaW5zdHJ1Y3Rpb24gQXRobG9uIGFuZCBLOCBoYXZlLgogCmRp ZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvc3NlLm1kIGIvZ2NjL2NvbmZp Zy9pMzg2L3NzZS5tZAppbmRleCAwMTM2ODFjLi5hZTliZmVhIDEwMDY0NAot LS0gYS9nY2MvY29uZmlnL2kzODYvc3NlLm1kCisrKyBiL2djYy9jb25maWcv aTM4Ni9zc2UubWQKQEAgLTg3NSwxMCArODc1LDE4IEBACiAJY2FzZSBNT0RF X1YxNlNGOgogCWNhc2UgTU9ERV9WOFNGOgogCWNhc2UgTU9ERV9WNFNGOgot CSAgaWYgKFRBUkdFVF9BVlgKKwkgIC8qIFdlIG11c3Qgc3VwcG9ydCBtaXNh bGlnbmVkIFNTRSBsb2FkIGFuZCBzdG9yZSBpbiBpbnRlcnJ1cHQKKwkgICAg IGhhbmRsZXIgb3IgdGhlcmUgYXJlIG5vIGNhbGxlci1zYXZlZCByZWdpc3Rl cnMgYW5kIHdlIGFyZQorCSAgICAgaW4gMzItYml0IG1vZGUgc2luY2UgaXg4 Nl9lbWl0X3NhdmVfcmVnX3VzaW5nX21vdiBnZW5lcmF0ZXMKKwkgICAgIHRo ZSBub3JtYWwgKm1vdjxtb2RlPl9pbnRlcm5hbCBwYXR0ZXJuIHRvIHNhdmUg YW5kIHJlc3RvcmUKKwkgICAgIFNTRSByZWdpc3RlcnMgd2l0aCBtaXNhbGln bmVkIHN0YWNrLiAgKi8KKwkgIGlmICgoVEFSR0VUX0FWWAorCSAgICAgICB8 fCBjZnVuLT5tYWNoaW5lLT5mdW5jX3R5cGUgIT0gVFlQRV9OT1JNQUwKKwkg ICAgICAgfHwgKCFUQVJHRVRfNjRCSVQKKwkJICAgJiYgY2Z1bi0+bWFjaGlu ZS0+bm9fY2FsbGVyX3NhdmVkX3JlZ2lzdGVycykpCiAJICAgICAgJiYgKG1p c2FsaWduZWRfb3BlcmFuZCAob3BlcmFuZHNbMF0sIDxNT0RFPm1vZGUpCiAJ CSAgfHwgbWlzYWxpZ25lZF9vcGVyYW5kIChvcGVyYW5kc1sxXSwgPE1PREU+ bW9kZSkpKQotCSAgICByZXR1cm4gInZtb3Z1cHNcdHslMSwgJTB8JTAsICUx fSI7CisJICAgIHJldHVybiAiJXZtb3Z1cHNcdHslMSwgJTB8JTAsICUxfSI7 CiAJICBlbHNlCiAJICAgIHJldHVybiAiJXZtb3ZhcHNcdHslMSwgJTB8JTAs ICUxfSI7CiAKZGlmZiAtLWdpdCBhL2djYy9kb2MvZXh0ZW5kLnRleGkgYi9n Y2MvZG9jL2V4dGVuZC50ZXhpCmluZGV4IDg0MDY5NDUuLjhjNjIyMTggMTAw NjQ0Ci0tLSBhL2djYy9kb2MvZXh0ZW5kLnRleGkKKysrIGIvZ2NjL2RvYy9l eHRlbmQudGV4aQpAQCAtNTA2MSw2ICs1MDYxLDY5IEBAIE9uIHg4Ni0zMiB0 YXJnZXRzLCB0aGUgQGNvZGV7c3RkY2FsbH0gYXR0cmlidXRlIGNhdXNlcyB0 aGUgY29tcGlsZXIgdG8KIGFzc3VtZSB0aGF0IHRoZSBjYWxsZWQgZnVuY3Rp b24gcG9wcyBvZmYgdGhlIHN0YWNrIHNwYWNlIHVzZWQgdG8KIHBhc3MgYXJn dW1lbnRzLCB1bmxlc3MgaXQgdGFrZXMgYSB2YXJpYWJsZSBudW1iZXIgb2Yg YXJndW1lbnRzLgogCitAaXRlbSBub19jYWxsZXJfc2F2ZWRfcmVnaXN0ZXJz CitAY2luZGV4IEBjb2Rle25vX2NhbGxlcl9zYXZlZF9yZWdpc3RlcnN9IGZ1 bmN0aW9uIGF0dHJpYnV0ZSwgeDg2CitVc2UgdGhpcyBhdHRyaWJ1dGUgdG8g aW5kaWNhdGUgdGhhdCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIGhhcyBubwor Y2FsbGVyLXNhdmVkIHJlZ2lzdGVycy4gIFRoYXQgaXMsIGFsbCByZWdpc3Rl cnMgYXJlIGNhbGxlZS1zYXZlZC4KK1RoZSBjb21waWxlciBnZW5lcmF0ZXMg cHJvcGVyIGZ1bmN0aW9uIGVudHJ5IGFuZCBleGl0IHNlcXVlbmNlcyB0bwor c2F2ZSBhbmQgcmVzdG9yZSBhbnkgbW9kaWZpZWQgcmVnaXN0ZXJzLgorCitA aXRlbSBpbnRlcnJ1cHQKK0BjaW5kZXggQGNvZGV7aW50ZXJydXB0fSBmdW5j dGlvbiBhdHRyaWJ1dGUsIHg4NgorVXNlIHRoaXMgYXR0cmlidXRlIHRvIGlu ZGljYXRlIHRoYXQgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBpcyBhbgoraW50 ZXJydXB0IGhhbmRsZXIuICBUaGUgY29tcGlsZXIgZ2VuZXJhdGVzIGZ1bmN0 aW9uCitlbnRyeSBhbmQgZXhpdCBzZXF1ZW5jZXMgc3VpdGFibGUgZm9yIHVz ZSBpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciB3aGVuCit0aGlzIGF0dHJpYnV0 ZSBpcyBwcmVzZW50LiAgVGhlIEBjb2Rle0lSRVR9IGluc3RydWN0aW9uLCBp bnN0ZWFkIG9mIHRoZQorQGNvZGV7UkVUfSBpbnN0cnVjdGlvbiwgaXMgdXNl ZCB0byByZXR1cm4gZnJvbSBpbnRlcnJ1cHQgaGFuZGxlcnMuICBBbGwKK3Jl Z2lzdGVycywgZXhjZXB0IGZvciB0aGUgRUZMQUdTIHJlZ2lzdGVyIHdoaWNo IGlzIHJlc3RvcmVkIGJ5IHRoZQorQGNvZGV7SVJFVH0gaW5zdHJ1Y3Rpb24s IGFyZSBwcmVzZXJ2ZWQgYnkgdGhlIGNvbXBpbGVyLgorCitBbnkgaW50ZXJy dXB0aWJsZS13aXRob3V0LXN0YWNrLXN3aXRjaCBjb2RlIG11c3QgYmUgY29t cGlsZWQgd2l0aAorQG9wdGlvbnstbW5vLXJlZC16b25lfSBzaW5jZSBpbnRl cnJ1cHQgaGFuZGxlcnMgY2FuIGFuZCB3aWxsLCBiZWNhdXNlCitvZiB0aGUg aGFyZHdhcmUgZGVzaWduLCB0b3VjaCB0aGUgcmVkIHpvbmUuCisKK0FuIGlu dGVycnVwdCBoYW5kbGVyIG11c3QgYmUgZGVjbGFyZWQgd2l0aCBhIG1hbmRh dG9yeSBwb2ludGVyCithcmd1bWVudDoKKworQHNtYWxsZXhhbXBsZQorc3Ry dWN0IGludGVycnVwdF9mcmFtZTsKKworX19hdHRyaWJ1dGVfXyAoKGludGVy cnVwdCkpCit2b2lkCitmIChzdHJ1Y3QgaW50ZXJydXB0X2ZyYW1lICpmcmFt ZSkKK0B7CitAfQorQGVuZCBzbWFsbGV4YW1wbGUKKworYW5kIHVzZXIgbXVz dCBwcm9wZXJseSBkZWZpbmUgdGhlIHN0cnVjdHVyZSB0aGUgcG9pbnRlciBw b2ludGluZyB0by4KKworVGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIHZlcnkg c2ltaWxhciB0byB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2l0aAorYSBkaWZm ZXJlbnQgbWFuZGF0b3J5IGZ1bmN0aW9uIHNpZ25hdHVyZToKKworQHNtYWxs ZXhhbXBsZQorI2lmZGVmIF9feDg2XzY0X18KK3R5cGVkZWYgdW5zaWduZWQg bG9uZyBsb25nIGludCB1d29yZF90OworI2Vsc2UKK3R5cGVkZWYgdW5zaWdu ZWQgaW50IHV3b3JkX3Q7CisjZW5kaWYKKworc3RydWN0IGludGVycnVwdF9m cmFtZTsKKworX19hdHRyaWJ1dGVfXyAoKGludGVycnVwdCkpCit2b2lkCitm IChzdHJ1Y3QgaW50ZXJydXB0X2ZyYW1lICpmcmFtZSwgdXdvcmRfdCBlcnJv cl9jb2RlKQorQHsKKyAgLi4uCitAfQorQGVuZCBzbWFsbGV4YW1wbGUKKwor YW5kIGNvbXBpbGVyIHBvcHMgdGhlIGVycm9yIGNvZGUgb2ZmIHRoZSBzdGFj ayBiZWZvcmUgdGhlIEBjb2Rle0lSRVR9CitpbnN0cnVjdGlvbi4KKworVGhl IGV4Y2VwdGlvbiBoYW5kbGVyIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGV4 Y2VwdGlvbnMgd2hpY2ggcHVzaCBhbgorZXJyb3IgY29kZSBhbmQgYWxsIG90 aGVyIGV4Y2VwdGlvbnMgbXVzdCB1c2UgdGhlIGludGVycnVwdCBoYW5kbGVy LgorVGhlIHN5c3RlbSB3aWxsIGNyYXNoIGlmIHRoZSB3cm9uZyBoYW5kbGVy IGlzIHVzZWQuCisKIEBpdGVtIHRhcmdldCAoQHZhcntvcHRpb25zfSkKIEBj aW5kZXggQGNvZGV7dGFyZ2V0fSBmdW5jdGlvbiBhdHRyaWJ1dGUKIEFzIGRp c2N1c3NlZCBpbiBAcmVme0NvbW1vbiBGdW5jdGlvbiBBdHRyaWJ1dGVzfSwg dGhpcyBhdHRyaWJ1dGUgCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTEuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5lYTJmMWU0Ci0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTEu YwpAQCAtMCwwICsxLDQ2IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwor LyogeyBkZy1vcHRpb25zICItTzIgLW1uby1wdXNoLWFyZ3MiIH0gKi8KKwor ZXh0ZXJuIHZvaWQgZm9vICh2b2lkICopIF9fYXR0cmlidXRlX18gKChpbnRl cnJ1cHQpKTsKK2V4dGVybiBpbnQgYmFyIChpbnQpOworCit2b2lkIGZvbyAo dm9pZCAqZnJhbWUpCit7CisgIGludCBhLGIsYyxkLGUsZixpOworICBhID0g YmFyICg1KTsKKyAgYiA9IGJhciAoYSk7CisgIGMgPSBiYXIgKGIpOworICBk ID0gYmFyIChjKTsKKyAgZSA9IGJhciAoZCk7CisgIGYgPSBiYXIgKGUpOwor ICBmb3IgKGkgPSAxOyBpIDwgMTA7IGkrKykKKyAgeworICAgIGEgKz0gYmFy IChhICsgaSkgKyBiYXIgKGIgKyBpKSArCisJIGJhciAoYyArIGkpICsgYmFy IChkICsgaSkgKworCSBiYXIgKGUgKyBpKSArIGJhciAoZiArIGkpOworICB9 Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInB1 c2hxXFtcXHQgXF0qJXJieCIgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAicHVzaHFc W1xcdCBcXSolcjFcWzItNVxdKyIgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0g fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAicHVz aGxcW1xcdCBcXSolZWJ4IiB7IHRhcmdldCBpYTMyIH0gfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJwdXNobFxbXFx0IFxd KiVlKHN8ZClpIiB7IHRhcmdldCBpYTMyIH0gfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInB1c2goPzpsfHEpXFtcXHQg XF0qJSg/OmV8cilheCIgMSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyAicHVzaCg/Omx8cSlcW1xcdCBcXSolKD86ZXxy KWN4IiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzICJwdXNoKD86bHxxKVxbXFx0IFxdKiUoPzplfHIpZHgiIDEgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInB1 c2hxXFtcXHQgXF0qJXJkaSIgMSB7IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInB1 c2hxXFtcXHQgXF0qJXJzaSIgMSB7IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInB1 c2hxXFtcXHQgXF0qJXI4IiAxIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAicHVz aHFcW1xcdCBcXSolcjkiIDEgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJwdXNo cVxbXFx0IFxdKiVyMTAiIDEgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJwdXNo cVxbXFx0IFxdKiVyMTEiIDEgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJwb3Ao PzpsfHEpXFtcXHQgXF0qJSg/OmV8cilheCIgMSB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAicG9wKD86bHxxKVxbXFx0 IFxdKiUoPzplfHIpY3giIDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMgInBvcCg/Omx8cSlcW1xcdCBcXSolKD86ZXxy KWR4IiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzICJwb3BxXFtcXHQgXF0qJXJkaSIgMSB7IHRhcmdldCB7ICEgaWEz MiB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMgInBvcHFcW1xcdCBcXSolcnNpIiAxIHsgdGFyZ2V0IHsgISBpYTMy IH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10 aW1lcyAicG9wcVxbXFx0IFxdKiVyOCIgMSB7IHRhcmdldCB7ICEgaWEzMiB9 IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMgInBvcHFcW1xcdCBcXSolcjkiIDEgeyB0YXJnZXQgeyAhIGlhMzIgfSB9 IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz ICJwb3BxXFtcXHQgXF0qJXIxMCIgMSB7IHRhcmdldCB7ICEgaWEzMiB9IH0g fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg InBvcHFcW1xcdCBcXSolcjExIiAxIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiaXJldCIg fSB9Ki8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L2ludGVycnVwdC0xMC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvaW50ZXJydXB0LTEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uYTQzOWQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC0xMC5jCkBAIC0w LDAgKzEsMjQgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCAqLSot bGludXgqIH0gfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1hdng1MTJi dyAtbW5vLWlhbWN1IiB9ICovCisKK2V4dGVybiB2b2lkIGJhciAodm9pZCk7 CisKK3N0cnVjdCBpbnRlcnJ1cHRfZnJhbWU7CisKK3ZvaWQKKyBfX2F0dHJp YnV0ZV9fICgoaW50ZXJydXB0KSkKK2ZvbyAoc3RydWN0IGludGVycnVwdF9m cmFtZSAqZnJhbWUpCit7CisgIGJhciAoKTsKK30KKworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJtb3Z1cHNcW1xcdCBcXSolem1t XFswLTlcXSssXFtcXHQgXF0qXFswLTlcXSpcXCglXFtyZVxdP3NwXFwpIiAz MiB7IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIm1vdnVwc1xbXFx0IFxdKlxbMC05 XF0qXFwoJVxbcmVcXT9zcFxcKSxcW1xcdCBcXSolem1tXFswLTlcXSsiIDMy IHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyAibW92dXBzXFtcXHQgXF0qJXptbVxb MC05XF0rLFxbXFx0IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9zcFxcKSIgOCB7 IHRhcmdldCBpYTMyIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMgIm1vdnVwc1xbXFx0IFxdKlxbMC05XF0qXFwoJVxb cmVcXT9zcFxcKSxcW1xcdCBcXSolem1tXFswLTlcXSsiIDggeyB0YXJnZXQg aWEzMiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzICJrbW92cVxbXFx0IFxdKiVrXFswLTdcXSssXFtcXHQgXF0qXFtc XC1dP1xbMC05XF0qXFwoJVxbcmVcXT9zcFxcKSIgOCB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAia21vdnFcW1xcdCBc XSpcWzAtOVxdKlxcKCVcW3JlXF0/c3BcXCksXFtcXHQgXF0qJWtcWzAtN1xd KyIgOCB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1u b3QgInB1c2hxXFtcXHQgXF0qJXJieCIgeyB0YXJnZXQgeyAhIGlhMzIgfSB9 IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAi cHVzaHFcW1xcdCBcXSolcjFcWzItNVxdKyIgeyB0YXJnZXQgeyAhIGlhMzIg fSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5v dCAicHVzaGxcW1xcdCBcXSolZWJ4IiB7IHRhcmdldCBpYTMyIH0gfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJwdXNobFxb XFx0IFxdKiVlKHN8ZClpIiB7IHRhcmdldCBpYTMyIH0gfSB9ICovCmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1 cHQtMTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVy cnVwdC0xMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjY1NTZjNDQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtMTEuYwpAQCAtMCwwICsxLDM4IEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgKi0qLWxpbnV4KiB9IH0g Ki8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tbm8tc3NlIC1tbm8taWFtY3Ui IH0gKi8KKworZXh0ZXJuIHZvaWQgYmFyICh2b2lkKTsKKwordm9pZAorIF9f YXR0cmlidXRlX18gKChpbnRlcnJ1cHQpKQorZm9vICh2b2lkICpmcmFtZSkK K3sKKyAgYmFyICgpOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItbm90ICJtb3Z1cHNcW1xcdCBcXSolKHh8eXx6KW1tXFswLTlcXSss XFtcXHQgXF0qXFswLTlcXSpcXCglXFtyZVxdP3NwXFwpIiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIm1vdnVwc1xbXFx0 IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9zcFxcKSxcW1xcdCBcXSolKHh8eXx6 KW1tXFswLTlcXSsiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLW5vdCAia21vdi5cW1xcdCBcXSola1xbMC03XF0rLFxbXFx0IFxd KlxbXFwtXT9cWzAtOVxdKlxcKCVcW3JlXF0/c3BcXCkiIH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAia21vdi5cW1xcdCBc XSpcWzAtOVxdKlxcKCVcW3JlXF0/c3BcXCksXFtcXHQgXF0qJWtcWzAtN1xd KyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90 ICJwdXNocVxbXFx0IFxdKiVyYngiIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInB1 c2hxXFtcXHQgXF0qJXIxXFsyLTVcXSsiIHsgdGFyZ2V0IHsgISBpYTMyIH0g fSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qg InB1c2hsXFtcXHQgXF0qJWVieCIgeyB0YXJnZXQgaWEzMiB9IH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAicHVzaGxcW1xc dCBcXSolZShzfGQpaSIgeyB0YXJnZXQgaWEzMiB9IH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJwdXNoKD86bHxxKVxb XFx0IFxdKiUoPzplfHIpYXgiIDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMgInB1c2goPzpsfHEpXFtcXHQgXF0qJSg/ OmV8ciljeCIgMSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci10aW1lcyAicHVzaCg/Omx8cSlcW1xcdCBcXSolKD86ZXxyKWR4IiAx IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz ICJwdXNocVxbXFx0IFxdKiVyZGkiIDEgeyB0YXJnZXQgeyAhIGlhMzIgfSB9 IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz ICJwdXNocVxbXFx0IFxdKiVyc2kiIDEgeyB0YXJnZXQgeyAhIGlhMzIgfSB9 IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz ICJwdXNocVxbXFx0IFxdKiVyOCIgMSB7IHRhcmdldCB7ICEgaWEzMiB9IH0g fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg InB1c2hxXFtcXHQgXF0qJXI5IiAxIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi cHVzaHFcW1xcdCBcXSolcjEwIiAxIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi cHVzaHFcW1xcdCBcXSolcjExIiAxIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi cG9wKD86bHxxKVxbXFx0IFxdKiUoPzplfHIpYXgiIDEgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInBvcCg/Omx8cSlc W1xcdCBcXSolKD86ZXxyKWN4IiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJwb3AoPzpsfHEpXFtcXHQgXF0qJSg/ OmV8cilkeCIgMSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci10aW1lcyAicG9wcVxbXFx0IFxdKiVyZGkiIDEgeyB0YXJnZXQgeyAh IGlhMzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLXRpbWVzICJwb3BxXFtcXHQgXF0qJXJzaSIgMSB7IHRhcmdldCB7ICEg aWEzMiB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMgInBvcHFcW1xcdCBcXSolcjgiIDEgeyB0YXJnZXQgeyAhIGlh MzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzICJwb3BxXFtcXHQgXF0qJXI5IiAxIHsgdGFyZ2V0IHsgISBpYTMy IH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10 aW1lcyAicG9wcVxbXFx0IFxdKiVyMTAiIDEgeyB0YXJnZXQgeyAhIGlhMzIg fSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzICJwb3BxXFtcXHQgXF0qJXIxMSIgMSB7IHRhcmdldCB7ICEgaWEzMiB9 IH0gfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9pbnRlcnJ1cHQtMTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L2ludGVycnVwdC0xMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjVjOWViNzQKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtMTIuYwpA QCAtMCwwICsxLDIwIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyog eyBkZy1vcHRpb25zICItTzIiIH0gKi8KKworZXh0ZXJuIGludCBjaGVja19p bnQgKGludCAqaSwgdm9pZCAqLCBpbnQgYWxpZ24pOwordHlwZWRlZiBpbnQg YWxpZ25lZCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpOwordHlwZWRl ZiB1bnNpZ25lZCBpbnQgdXdvcmRfdCBfX2F0dHJpYnV0ZV9fICgobW9kZSAo X193b3JkX18pKSk7CisKK19fYXR0cmlidXRlX18oKGludGVycnVwdCkpCit2 b2lkCitmb28gKHZvaWQgKmZyYW1lLCB1d29yZF90IGVycm9yX2NvZGUpCit7 CisgIGFsaWduZWQgajsKKyAgaWYgKGNoZWNrX2ludCAoZnJhbWUsICZqLCBf X2FsaWdub2ZfXyhqKSkpCisgICAgX19idWlsdGluX2Fib3J0ICgpOworfQor CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgImFuZFxb bHFcXT9cW15cXG5cXSotNjQsXFteXFxuXF0qc3AiIDEgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgImFkZCg/Omx8cSlc W1xcdCBcXSpcXFwkOCxcW1xcdCBcXSolXFtyZVxdP3NwIiAxIHsgdGFyZ2V0 IHsgISBpYTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyAiYWRkbFxbXFx0IFxdKlxcXCQ0LFxbXFx0IFxdKiVl c3AiIDEgeyB0YXJnZXQgaWEzMiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJpcmV0IiB9IH0qLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTEzLmMgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtMTMuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2YwYjI1Ci0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvaW50ZXJydXB0LTEzLmMKQEAgLTAsMCArMSwxNyBAQAorLyogeyBkZy1k byBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIiB9ICovCisK K2V4dGVybiBpbnQgY2hlY2tfaW50IChpbnQgKmksIHZvaWQgKiwgaW50IGFs aWduKTsKK3R5cGVkZWYgaW50IGFsaWduZWQgX19hdHRyaWJ1dGVfXygoYWxp Z25lZCg2NCkpKTsKKworX19hdHRyaWJ1dGVfXygoaW50ZXJydXB0KSkKK3Zv aWQKK2ZvbyAodm9pZCAqZnJhbWUpCit7CisgIGFsaWduZWQgajsKKyAgaWYg KGNoZWNrX2ludCAoZnJhbWUsICZqLCBfX2FsaWdub2ZfXyhqKSkpCisgICAg X19idWlsdGluX2Fib3J0ICgpOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMgImFuZFxbbHFcXT9cW15cXG5cXSotNjQsXFte XFxuXF0qc3AiIDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXIgImlyZXQiIH0gfSovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtMTQuYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC0xNC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOTQyMDcKLS0tIC9kZXYvbnVs bAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1 cHQtMTQuYwpAQCAtMCwwICsxLDM5IEBACisvKiB7IGRnLWRvIGNvbXBpbGUg eyB0YXJnZXQgKi0qLWxpbnV4KiB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LU8yIC1tbm8tc3NlIC1tbm8taWFtY3UgLW1uby1zc2U0IC1tbm8tcG9wY250 IiB9ICovCisKK2V4dGVybiBpbnQgaSwgY250OworCit2b2lkCisgX19hdHRy aWJ1dGVfXyAoKGludGVycnVwdCkpCitmb28gKHZvaWQgKmZyYW1lKQorewor ICBjbnQgPSBfX2J1aWx0aW5fcG9wY291bnQgKGkpOworfQorCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3Z1cHNcW1xcdCBcXSol KHh8eXx6KW1tXFswLTlcXSssXFtcXHQgXF0qXFswLTlcXSpcXCglXFtyZVxd P3NwXFwpIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci1ub3QgIm1vdnVwc1xbXFx0IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9zcFxc KSxcW1xcdCBcXSolKHh8eXx6KW1tXFswLTlcXSsiIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAia21vdi5cW1xcdCBcXSol a1xbMC03XF0rLFxbXFx0IFxdKlxbXFwtXT9cWzAtOVxdKlxcKCVcW3JlXF0/ c3BcXCkiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LW5vdCAia21vdi5cW1xcdCBcXSpcWzAtOVxdKlxcKCVcW3JlXF0/c3BcXCks XFtcXHQgXF0qJWtcWzAtN1xdKyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItbm90ICJwdXNocVxbXFx0IFxdKiVyYngiIHsgdGFy Z2V0IHsgISBpYTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci1ub3QgInB1c2hxXFtcXHQgXF0qJXIxXFsyLTVcXSsiIHsg dGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci1ub3QgInB1c2hsXFtcXHQgXF0qJWVieCIgeyB0YXJn ZXQgaWEzMiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLW5vdCAicHVzaGxcW1xcdCBcXSolZShzfGQpaSIgeyB0YXJnZXQgaWEz MiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzICJwdXNoKD86bHxxKVxbXFx0IFxdKiUoPzplfHIpYXgiIDEgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInB1c2go PzpsfHEpXFtcXHQgXF0qJSg/OmV8ciljeCIgMSB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAicHVzaCg/Omx8cSlcW1xc dCBcXSolKD86ZXxyKWR4IiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLXRpbWVzICJwdXNocVxbXFx0IFxdKiVyZGkiIDEgeyB0 YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLXRpbWVzICJwdXNocVxbXFx0IFxdKiVyc2kiIDEgeyB0 YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLXRpbWVzICJwdXNocVxbXFx0IFxdKiVyOCIgMSB7IHRh cmdldCB7ICEgaWEzMiB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMgInB1c2hxXFtcXHQgXF0qJXI5IiAxIHsgdGFy Z2V0IHsgISBpYTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyAicHVzaHFcW1xcdCBcXSolcjEwIiAxIHsgdGFy Z2V0IHsgISBpYTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyAicHVzaHFcW1xcdCBcXSolcjExIiAxIHsgdGFy Z2V0IHsgISBpYTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyAicG9wKD86bHxxKVxbXFx0IFxdKiUoPzplfHIp YXgiIDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMgInBvcCg/Omx8cSlcW1xcdCBcXSolKD86ZXxyKWN4IiAxIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJwb3Ao PzpsfHEpXFtcXHQgXF0qJSg/OmV8cilkeCIgMSB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAicG9wcVxbXFx0IFxdKiVy ZGkiIDEgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJwb3BxXFtcXHQgXF0qJXJz aSIgMSB7IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInBvcHFcW1xcdCBcXSolcjgi IDEgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJwb3BxXFtcXHQgXF0qJXI5IiAx IHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyAicG9wcVxbXFx0IFxdKiVyMTAiIDEg eyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJwb3BxXFtcXHQgXF0qJXIxMSIgMSB7 IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMgImlyZXQiIDEgfSB9Ki8KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC0x NS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0 LTE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJi OWNkZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L2ludGVycnVwdC0xNS5jCkBAIC0wLDAgKzEsMjQgQEAKKy8q IHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCAqLSotbGludXgqIH0gfSAqLwor LyogeyBkZy1vcHRpb25zICItTzIgLW1uby1hdng1MTJmIC1tbm8taWFtY3Ug LW1hdnggLW1wdXNoLWFyZ3MiIH0gKi8KKwordHlwZWRlZiB1bnNpZ25lZCBp bnQgdXdvcmRfdCBfX2F0dHJpYnV0ZV9fICgobW9kZSAoX193b3JkX18pKSk7 CitleHRlcm4gdm9pZCBiYXIgKGludCkgX19hdHRyaWJ1dGVfXyAoKG5vX2Nh bGxlcl9zYXZlZF9yZWdpc3RlcnMpKTsKKwordm9pZAorIF9fYXR0cmlidXRl X18gKChpbnRlcnJ1cHQpKQorZm4xICh2b2lkICpmcmFtZSwgdXdvcmRfdCBl cnJvcikKK3sKKyAgYmFyIChlcnJvcik7Cit9CisKKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci1ub3QgIm1vdnVwc1xbXFx0IFxdKiUoeHx5fHop bW1cWzAtOVxdKyxcW1xcdCBcXSpcWzAtOVxdKlxcKCVcW3JlXF0/c3BcXCki IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAi bW92dXBzXFtcXHQgXF0qXFswLTlcXSpcXCglXFtyZVxdP3NwXFwpLFxbXFx0 IFxdKiUoeHx5fHopbW1cWzAtOVxdKyIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICIocHVzaHxwb3ApKGx8cSlcW1xcdCBc XSolKHJ8ZSkoYXxifGN8ZCl4IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci1ub3QgIihwdXNofHBvcCkobHxxKVxbXFx0IFxdKiUo cnxlKXNpIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci1ub3QgIihwdXNofHBvcCkobHxxKVxbXFx0IFxdKiUocnxlKWJwIiB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIihwdXNo fHBvcClsXFtcXHQgXF0qJWVkaSIgeyB0YXJnZXQgaWEzMiB9IH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiKHB1c2h8cG9w KXFcW1xcdCBcXSolclxbMC05XF0rIiB7IHRhcmdldCB7ICEgaWEzMiB9IH0g fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg InB1c2hxXFtcXHQgXF0qJXJkaSIgMSB7IHRhcmdldCB7ICEgaWEzMiB9IH0g fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg InBvcHFcW1xcdCBcXSolcmRpIiAxIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi YWRkKD86bHxxKVxbXFx0IFxdKlxcXCQ4LFxbXFx0IFxdKiVcW3JlXF0/c3Ai IDEgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJpcmV0IiAxIH0gfSovCmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1 cHQtMTYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVy cnVwdC0xNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu Ljc5NGE4NDYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtMTYuYwpAQCAtMCwwICsxLDI3IEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgKi0qLWxpbnV4KiB9IH0g Ki8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tbm8tYXZ4NTEyZiAtbW5vLWlh bWN1IC1tYXZ4IC1tbm8tcHVzaC1hcmdzIiB9ICovCisKK3R5cGVkZWYgdW5z aWduZWQgaW50IHV3b3JkX3QgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKF9fd29y ZF9fKSkpOworZXh0ZXJuIHZvaWQgYmFyIChpbnQpIF9fYXR0cmlidXRlX18g KChub19jYWxsZXJfc2F2ZWRfcmVnaXN0ZXJzKSk7CisKK3ZvaWQKKyBfX2F0 dHJpYnV0ZV9fICgoaW50ZXJydXB0KSkKK2ZuMSAodm9pZCAqZnJhbWUsIHV3 b3JkX3QgZXJyb3IpCit7CisgIGJhciAoZXJyb3IpOworfQorCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3Z1cHNcW1xcdCBcXSol KHh8eXx6KW1tXFswLTlcXSssXFtcXHQgXF0qXFswLTlcXSpcXCglXFtyZVxd P3NwXFwpIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci1ub3QgIm1vdnVwc1xbXFx0IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9zcFxc KSxcW1xcdCBcXSolKHh8eXx6KW1tXFswLTlcXSsiIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiKHB1c2h8cG9wKShsfHEp XFtcXHQgXF0qJShyfGUpKGF8YnxjfGQpeCIgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICIocHVzaHxwb3ApKGx8cSlcW1xc dCBcXSolKHJ8ZSlzaSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItbm90ICIocHVzaHxwb3ApbFxbXFx0IFxdKiVlZGkiIHsgdGFy Z2V0IGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci1ub3QgIihwdXNofHBvcClxXFtcXHQgXF0qJXJicCIgeyB0YXJnZXQg eyAhIGlhMzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLW5vdCAiKHB1c2h8cG9wKXFcW1xcdCBcXSolclxbMC05XF0rIiB7 IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMgInB1c2hsXFtcXHQgXF0qJWVicCIgMSB7 IHRhcmdldCBpYTMyIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMgInBvcGxcW1xcdCBcXSolZWJwIiAxIHsgdGFyZ2V0 IGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci10aW1lcyAicHVzaHFcW1xcdCBcXSolcmRpIiAxIHsgdGFyZ2V0IHsgISBp YTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci10aW1lcyAicG9wcVxbXFx0IFxdKiVyZGkiIDEgeyB0YXJnZXQgeyAhIGlh MzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzICJhZGRsXFtcXHQgXF0qXFxcJDQsXFtcXHQgXF0qJWVzcCIgMSB7 IHRhcmdldCBpYTMyIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMgImFkZCg/Omx8cSlcW1xcdCBcXSpcXFwkOCxcW1xc dCBcXSolXFtyZVxdP3NwIiAxIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAiaXJl dCIgMSB9IH0qLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvaW50ZXJydXB0LTE3LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtMTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi42NTk2YTY4Ci0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTE3LmMK QEAgLTAsMCArMSwyOSBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0 ICotKi1saW51eCogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbW5v LWF2eDUxMmYgLW1uby1pYW1jdSAtbWF2eCAtbXB1c2gtYXJncyIgfSAqLwor CitleHRlcm4gdm9pZCBiYXIgKGludCkgX19hdHRyaWJ1dGVfXyAoKG5vX2Nh bGxlcl9zYXZlZF9yZWdpc3RlcnMpKTsKKwordm9pZAorIF9fYXR0cmlidXRl X18gKChpbnRlcnJ1cHQpKQorZm4xICh2b2lkICpmcmFtZSkKK3sKKyAgYmFy ICgzKTsKK30KKwordm9pZAorIF9fYXR0cmlidXRlX18gKChpbnRlcnJ1cHQp KQorZm4yICh2b2lkICpmcmFtZSkKK3sKKyAgYmFyICgzKTsKK30KKworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAibW92dXBzXFtcXHQg XF0qJSh4fHl8eiltbVxbMC05XF0rLFxbXFx0IFxdKlxbMC05XF0qXFwoJVxb cmVcXT9zcFxcKSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItbm90ICJtb3Z1cHNcW1xcdCBcXSpcWzAtOVxdKlxcKCVcW3JlXF0/ c3BcXCksXFtcXHQgXF0qJSh4fHl8eiltbVxbMC05XF0rIiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIihwdXNofHBvcCko bHxxKVxbXFx0IFxdKiUocnxlKShhfGJ8Y3xkKXgiIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiKHB1c2h8cG9wKShsfHEp XFtcXHQgXF0qJShyfGUpc2kiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLW5vdCAiKHB1c2h8cG9wKShsfHEpXFtcXHQgXF0qJShy fGUpYnAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LW5vdCAiKHB1c2h8cG9wKWxcW1xcdCBcXSolZWRpIiB7IHRhcmdldCBpYTMy IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90 ICIocHVzaHxwb3ApcVxbXFx0IFxdKiVyXFswLTlcXSsiIHsgdGFyZ2V0IHsg ISBpYTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci10aW1lcyAicHVzaHFcW1xcdCBcXSolcmRpIiAyIHsgdGFyZ2V0IHsg ISBpYTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci10aW1lcyAicG9wcVxbXFx0IFxdKiVyZGkiIDIgeyB0YXJnZXQgeyAh IGlhMzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLXRpbWVzICJpcmV0IiAyIH0gfSovCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtMTguYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC0xOC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NjdhZWUKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9p bnRlcnJ1cHQtMTguYwpAQCAtMCwwICsxLDMxIEBACisvKiB7IGRnLWRvIGNv bXBpbGUgeyB0YXJnZXQgKi0qLWxpbnV4KiB9IH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLU8yIC1tbm8tYXZ4NTEyZiAtbW5vLWlhbWN1IC1tYXZ4IC1tcHVz aC1hcmdzIiB9ICovCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IHV3b3JkX3Qg X19hdHRyaWJ1dGVfXyAoKG1vZGUgKF9fd29yZF9fKSkpOworZXh0ZXJuIHZv aWQgYmFyIChpbnQpIF9fYXR0cmlidXRlX18gKChub19jYWxsZXJfc2F2ZWRf cmVnaXN0ZXJzKSk7CisKK3ZvaWQKKyBfX2F0dHJpYnV0ZV9fICgoaW50ZXJy dXB0KSkKK2ZuMSAodm9pZCAqZnJhbWUsIHV3b3JkX3QgZXJyb3IpCit7Cisg IGJhciAoZXJyb3IpOworfQorCit2b2lkCisgX19hdHRyaWJ1dGVfXyAoKGlu dGVycnVwdCkpCitmbjIgKHZvaWQgKmZyYW1lLCB1d29yZF90IGVycm9yKQor eworICBiYXIgKGVycm9yKTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLW5vdCAibW92dXBzXFtcXHQgXF0qJSh4fHl8eiltbVxbMC05 XF0rLFxbXFx0IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9zcFxcKSIgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3Z1cHNc W1xcdCBcXSpcWzAtOVxdKlxcKCVcW3JlXF0/c3BcXCksXFtcXHQgXF0qJSh4 fHl8eiltbVxbMC05XF0rIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci1ub3QgIihwdXNofHBvcCkobHxxKVxbXFx0IFxdKiUocnxl KShhfGJ8Y3xkKXgiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLW5vdCAiKHB1c2h8cG9wKShsfHEpXFtcXHQgXF0qJShyfGUpc2ki IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAi KHB1c2h8cG9wKShsfHEpXFtcXHQgXF0qJShyfGUpYnAiIH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiKHB1c2h8cG9wKWxc W1xcdCBcXSolZWRpIiB7IHRhcmdldCBpYTMyIH0gfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICIocHVzaHxwb3ApcVxbXFx0 IFxdKiVyXFswLTlcXSsiIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAicHVzaHFc W1xcdCBcXSolcmRpIiAyIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAicG9wcVxb XFx0IFxdKiVyZGkiIDIgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJhZGQoPzps fHEpXFtcXHQgXF0qXFxcJDgsXFtcXHQgXF0qJVxbcmVcXT9zcCIgMiB7IHRh cmdldCB7ICEgaWEzMiB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMgImlyZXQiIDIgfSB9Ki8KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC0xOS5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTE5 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZjYTA3 NwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2ludGVycnVwdC0xOS5jCkBAIC0wLDAgKzEsMjQgQEAKKy8qIHsg ZGctZG8gY29tcGlsZSB7IHRhcmdldCAqLSotbGludXgqIH0gfSAqLworLyog eyBkZy1vcHRpb25zICItTzIgLW1uby1hdng1MTJmIC1tbm8taWFtY3UgLW1h dnggLW1uby1wdXNoLWFyZ3MiIH0gKi8KKworZXh0ZXJuIGludCBmb28gKGlu dCkgX19hdHRyaWJ1dGVfXyAoKG5vX2NhbGxlcl9zYXZlZF9yZWdpc3RlcnMp KTsKK2V4dGVybiBpbnQgYmFyIChpbnQpIF9fYXR0cmlidXRlX18gKChub19j YWxsZXJfc2F2ZWRfcmVnaXN0ZXJzKSk7CisKK2ludAorZm9vIChpbnQgaSkK K3sKKyAgcmV0dXJuIGJhciAoaSkgKyBpOworfQorCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3Z1cHNcW1xcdCBcXSolKHh8eXx6 KW1tXFswLTlcXSssXFtcXHQgXF0qXFswLTlcXSpcXCglXFtyZVxdP3NwXFwp IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qg Im1vdnVwc1xbXFx0IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9zcFxcKSxcW1xc dCBcXSolKHh8eXx6KW1tXFswLTlcXSsiIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiKHB1c2h8cG9wKShsfHEpXFtcXHQg XF0qJShyfGUpKGF8YnxjfGQpeCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItbm90ICIocHVzaHxwb3ApKGx8cSlcW1xcdCBcXSol KHJ8ZSlzaSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItbm90ICIocHVzaHxwb3ApbFxbXFx0IFxdKiVlZGkiIHsgdGFyZ2V0IGlh MzIgfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1u b3QgIihwdXNofHBvcClxXFtcXHQgXF0qJXJcWzAtOVxdKyIgeyB0YXJnZXQg eyAhIGlhMzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLXRpbWVzICJwdXNobFxbXFx0IFxdKiVlYnAiIDEgeyB0YXJnZXQg aWEzMiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzICJwb3BsXFtcXHQgXF0qJWVicCIgMSB7IHRhcmdldCBpYTMyIH0g fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg InB1c2hxXFtcXHQgXF0qJXJicCIgMSB7IHRhcmdldCB7ICEgaWEzMiB9IH0g fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg InBvcHFcW1xcdCBcXSolcmJwIiAxIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi cHVzaHFcW1xcdCBcXSolcmRpIiAxIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi cG9wcVxbXFx0IFxdKiVyZGkiIDEgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0g fSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvaW50ZXJydXB0LTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L2ludGVycnVwdC0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMjAwM2ZiYgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC0yLmMKQEAgLTAsMCAr MSwxMSBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLU8yIC1XYWxsIC1XdW51c2VkLXBhcmFtZXRlciIgfSAqLworCit2 b2lkCitfX2F0dHJpYnV0ZV9fKChpbnRlcnJ1cHQpKQorZm4gKHZvaWQgKmZy YW1lKQoreworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt bm90ICJhZGQobHxxKVxbXFx0IFxdKlxcJFxbMC05XF0qLFxbXFx0IFxdKiVc W3JlXF0/c3AiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyICJpcmV0IiB9IH0qLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTIwLmMgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtMjAuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWI2ZDMyCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0 LTIwLmMKQEAgLTAsMCArMSwyMiBAQAorLyogeyBkZy1kbyBjb21waWxlIHsg dGFyZ2V0ICotKi1saW51eCogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P MiAtbW5vLWF2eDUxMmYgLW1uby1pYW1jdSAtbWF2eCAtbW5vLXB1c2gtYXJn cyIgfSAqLworCitleHRlcm4gaW50IGZvbyAoaW50KSBfX2F0dHJpYnV0ZV9f ICgobm9fY2FsbGVyX3NhdmVkX3JlZ2lzdGVycykpOworZXh0ZXJuIGludCBi YXIgKGludCkgX19hdHRyaWJ1dGVfXyAoKG5vX2NhbGxlcl9zYXZlZF9yZWdp c3RlcnMpKTsKKworaW50Citmb28gKGludCBpKQoreworICByZXR1cm4gYmFy IChpICsgaSk7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci1ub3QgIm1vdnVwc1xbXFx0IFxdKiUoeHx5fHopbW1cWzAtOVxdKyxcW1xc dCBcXSpcWzAtOVxdKlxcKCVcW3JlXF0/c3BcXCkiIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAibW92dXBzXFtcXHQgXF0q XFswLTlcXSpcXCglXFtyZVxdP3NwXFwpLFxbXFx0IFxdKiUoeHx5fHopbW1c WzAtOVxdKyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItbm90ICIocHVzaHxwb3ApKGx8cSlcW1xcdCBcXSolKHJ8ZSkoYXxifGN8 ZCl4IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1u b3QgIihwdXNofHBvcCkobHxxKVxbXFx0IFxdKiUocnxlKXNpIiB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIihwdXNofHBv cCkobHxxKVxbXFx0IFxdKiUocnxlKWJwIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIihwdXNofHBvcClsXFtcXHQgXF0q JWVkaSIgeyB0YXJnZXQgaWEzMiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLW5vdCAiKHB1c2h8cG9wKXFcW1xcdCBcXSolclxb MC05XF0rIiB7IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJqbXAiIH0gfSovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInB1c2hxXFtcXHQg XF0qJXJkaSIgMSB7IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInBvcHFcW1xcdCBc XSolcmRpIiAxIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0gKi8KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVw dC0yMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJy dXB0LTIxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MzBjMzg5MwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L2ludGVycnVwdC0yMS5jCkBAIC0wLDAgKzEsMjUgQEAK Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P MiAtbW5vLWF2eCAtbW5vLWlhbWN1IC1tc3NlIiB9ICovCisKK3ZvaWQKK19f YXR0cmlidXRlX18oKG5vX2NhbGxlcl9zYXZlZF9yZWdpc3RlcnMpKQorZm4g KHZvaWQpCit7CisgIGFzbSAoIiMiCisgICAgICAgOgorICAgICAgIDoKKyAg ICAgICA6ICJ4bW0zIik7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyAibW92YXBzXFtcXHQgXF0qJXhtbTMsXFtcXHQgXF0q XFswLTlcXSpcXCglXFtyZVxdP3NwXFwpIiAxIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJtb3ZhcHNcW1xcdCBcXSpc WzAtOVxdKlxcKCVcW3JlXF0/c3BcXCksXFtcXHQgXF0qJXhtbTMiIDEgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3Yo YXx1KXBzXFtcXHQgXF0qJSh4fHl8eiltbVxbMC0yXF0rLFxbXFx0IFxdKlxb MC05XF0qXFwoJVxbcmVcXT9zcFxcKSIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3YoYXx1KXBzXFtcXHQgXF0qXFsw LTlcXSpcXCglXFtyZVxdP3NwXFwpLFxbXFx0IFxdKiUoeHx5fHopbW1cWzAt MlxdKyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt bm90ICJtb3YoYXx1KXBzXFtcXHQgXF0qJSh4fHl8eiltbVxbNC05XF0rLFxb XFx0IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9zcFxcKSIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3YoYXx1KXBzXFtc XHQgXF0qXFswLTlcXSpcXCglXFtyZVxdP3NwXFwpLFxbXFx0IFxdKiUoeHx5 fHopbW1cWzQtOVxdKyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItbm90ICJtb3YoYXx1KXBzXFtcXHQgXF0qJSh4fHl8eiltbTFc WzAtOVxdKyxcW1xcdCBcXSpcWzAtOVxdKlxcKCVcW3JlXF0/c3BcXCkiIH0g fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAibW92 KGF8dSlwc1xbXFx0IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9zcFxcKSxcW1xc dCBcXSolKHh8eXx6KW1tMVxbMC05XF0rIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIihwdXNofHBvcCkobHxxKVxbXFx0 IFxdKiUocnxlKShhfGJ8Y3xkKXgiIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLW5vdCAiKHB1c2h8cG9wKShsfHEpXFtcXHQgXF0q JShyfGUpKHN8ZClpIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci1ub3QgIihwdXNofHBvcCkobHxxKVxbXFx0IFxdKiUocnxlKWJw IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qg IihwdXNofHBvcClxXFtcXHQgXF0qJXJcWzAtOVxdKyIgeyB0YXJnZXQgeyAh IGlhMzIgfSB9IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTIyLmMgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtMjIuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE1NDdkCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0 LTIyLmMKQEAgLTAsMCArMSwyNSBAQAorLyogeyBkZy1kbyBjb21waWxlIH0g Ki8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tbm8tYXZ4NTEyZiAtbW5vLWlh bWN1IC1tYXZ4IiB9ICovCisKK3ZvaWQKK19fYXR0cmlidXRlX18oKG5vX2Nh bGxlcl9zYXZlZF9yZWdpc3RlcnMpKQorZm4gKHZvaWQpCit7CisgIGFzbSAo IiMiCisgICAgICAgOgorICAgICAgIDoKKyAgICAgICA6ICJ4bW0zIik7Cit9 CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAibW92 dXBzXFtcXHQgXF0qJXltbTMsXFtcXHQgXF0qXFswLTlcXSpcXCglXFtyZVxd P3NwXFwpIiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLXRpbWVzICJtb3Z1cHNcW1xcdCBcXSpcWzAtOVxdKlxcKCVcW3JlXF0/ c3BcXCksXFtcXHQgXF0qJXltbTMiIDEgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3YoYXx1KXBzXFtcXHQgXF0qJSh4 fHl8eiltbVxbMC0yXF0rLFxbXFx0IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9z cFxcKSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt bm90ICJtb3YoYXx1KXBzXFtcXHQgXF0qXFswLTlcXSpcXCglXFtyZVxdP3Nw XFwpLFxbXFx0IFxdKiUoeHx5fHopbW1cWzAtMlxdKyIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3YoYXx1KXBzXFtc XHQgXF0qJSh4fHl8eiltbVxbNC05XF0rLFxbXFx0IFxdKlxbMC05XF0qXFwo JVxbcmVcXT9zcFxcKSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItbm90ICJtb3YoYXx1KXBzXFtcXHQgXF0qXFswLTlcXSpcXCgl XFtyZVxdP3NwXFwpLFxbXFx0IFxdKiUoeHx5fHopbW1cWzQtOVxdKyIgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3Yo YXx1KXBzXFtcXHQgXF0qJSh4fHl8eiltbTFcWzAtOVxdKyxcW1xcdCBcXSpc WzAtOVxdKlxcKCVcW3JlXF0/c3BcXCkiIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAibW92KGF8dSlwc1xbXFx0IFxdKlxb MC05XF0qXFwoJVxbcmVcXT9zcFxcKSxcW1xcdCBcXSolKHh8eXx6KW1tMVxb MC05XF0rIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci1ub3QgIihwdXNofHBvcCkobHxxKVxbXFx0IFxdKiUocnxlKShhfGJ8Y3xk KXgiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5v dCAiKHB1c2h8cG9wKShsfHEpXFtcXHQgXF0qJShyfGUpKHN8ZClpIiB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIihwdXNo fHBvcCkobHxxKVxbXFx0IFxdKiUocnxlKWJwIiB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIihwdXNofHBvcClxXFtcXHQg XF0qJXJcWzAtOVxdKyIgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAqLwpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50 ZXJydXB0LTIzLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9p bnRlcnJ1cHQtMjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5jNTNmY2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTIzLmMKQEAgLTAsMCArMSwy NSBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLU8yIC1tYXZ4NTEyZiAtbW5vLWlhbWN1IiB9ICovCisKK3ZvaWQKK19f YXR0cmlidXRlX18oKG5vX2NhbGxlcl9zYXZlZF9yZWdpc3RlcnMpKQorZm4g KHZvaWQpCit7CisgIGFzbSAoIiMiCisgICAgICAgOgorICAgICAgIDoKKyAg ICAgICA6ICJ4bW0zIik7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyAibW92dXBzXFtcXHQgXF0qJXptbTMsXFtcXHQgXF0q XFswLTlcXSpcXCglXFtyZVxdP3NwXFwpIiAxIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJtb3Z1cHNcW1xcdCBcXSpc WzAtOVxdKlxcKCVcW3JlXF0/c3BcXCksXFtcXHQgXF0qJXptbTMiIDEgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3Yo YXx1KXBzXFtcXHQgXF0qJSh4fHl8eiltbVxbMC0yXF0rLFxbXFx0IFxdKlxb MC05XF0qXFwoJVxbcmVcXT9zcFxcKSIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3YoYXx1KXBzXFtcXHQgXF0qXFsw LTlcXSpcXCglXFtyZVxdP3NwXFwpLFxbXFx0IFxdKiUoeHx5fHopbW1cWzAt MlxdKyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt bm90ICJtb3YoYXx1KXBzXFtcXHQgXF0qJSh4fHl8eiltbVxbNC05XF0rLFxb XFx0IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9zcFxcKSIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3YoYXx1KXBzXFtc XHQgXF0qXFswLTlcXSpcXCglXFtyZVxdP3NwXFwpLFxbXFx0IFxdKiUoeHx5 fHopbW1cWzQtOVxdKyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItbm90ICJtb3YoYXx1KXBzXFtcXHQgXF0qJSh4fHl8eiltbTFc WzAtOVxdKyxcW1xcdCBcXSpcWzAtOVxdKlxcKCVcW3JlXF0/c3BcXCkiIH0g fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAibW92 KGF8dSlwc1xbXFx0IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9zcFxcKSxcW1xc dCBcXSolKHh8eXx6KW1tMVxbMC05XF0rIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIihwdXNofHBvcCkobHxxKVxbXFx0 IFxdKiUocnxlKShhfGJ8Y3xkKXgiIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLW5vdCAiKHB1c2h8cG9wKShsfHEpXFtcXHQgXF0q JShyfGUpKHN8ZClpIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci1ub3QgIihwdXNofHBvcCkobHxxKVxbXFx0IFxdKiUocnxlKWJw IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qg IihwdXNofHBvcClxXFtcXHQgXF0qJXJcWzAtOVxdKyIgeyB0YXJnZXQgeyAh IGlhMzIgfSB9IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTI0LmMgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtMjQuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWI1YmZjCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0 LTI0LmMKQEAgLTAsMCArMSwyMSBAQAorLyogeyBkZy1kbyBjb21waWxlIH0g Ki8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tbm8taWFtY3UgLW1tcHgiIH0g Ki8KKwordm9pZAorX19hdHRyaWJ1dGVfXygobm9fY2FsbGVyX3NhdmVkX3Jl Z2lzdGVycykpCitmbiAodm9pZCkKK3sKKyAgYXNtICgiIyIKKyAgICAgICA6 CisgICAgICAgOgorICAgICAgIDogImJuZDMiKTsKK30KKworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJibmRtb3ZcW1xcdCBcXSol Ym5kMyxcW1xcdCBcXSpcW1xcLVxdP1xbMC05XF0qXFwoJVxbcmVcXT9zcFxc KSIgMSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10 aW1lcyAiYm5kbW92XFtcXHQgXF0qXFtcXC1cXT9cWzAtOVxdKlxcKCVcW3Jl XF0/c3BcXCksXFtcXHQgXF0qJWJuZDMiIDEgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3YoYXx1KXBzXFtcXHQgXF0q JSh4fHl8eiltbVxbMC05XF0rLFxbXFx0IFxdKlxbMC05XF0qXFwoJVxbcmVc XT9zcFxcKSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItbm90ICJtb3YoYXx1KXBzXFtcXHQgXF0qXFswLTlcXSpcXCglXFtyZVxd P3NwXFwpLFxbXFx0IFxdKiUoeHx5fHopbW1cWzAtOVxdKyIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICIocHVzaHxwb3Ap KGx8cSlcW1xcdCBcXSolKHJ8ZSkoYXxifGN8ZCl4IiB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIihwdXNofHBvcCkobHxx KVxbXFx0IFxdKiUocnxlKShzfGQpaSIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICIocHVzaHxwb3ApKGx8cSlcW1xcdCBc XSolKHJ8ZSlicCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItbm90ICIocHVzaHxwb3ApcVxbXFx0IFxdKiVyXFswLTlcXSsiIHsg dGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC0yNS5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTI1LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5ZmQzYQotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2ludGVycnVwdC0yNS5jCkBAIC0wLDAgKzEsMjQgQEAKKy8qIHsgZGctZG8g Y29tcGlsZSB7IHRhcmdldCBpYTMyIH0gfSAqLworLyogeyBkZy1vcHRpb25z ICItTzIgLW1uby1hdnggLW1uby1pYW1jdSAtbXNzZSAtbWluY29taW5nLXN0 YWNrLWJvdW5kYXJ5PTIiIH0gKi8KKwordm9pZAorX19hdHRyaWJ1dGVfXygo bm9fY2FsbGVyX3NhdmVkX3JlZ2lzdGVycykpCitmbiAodm9pZCkKK3sKKyAg YXNtICgiIyIKKyAgICAgICA6CisgICAgICAgOgorICAgICAgIDogInhtbTMi KTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz ICJtb3Z1cHNcW1xcdCBcXSoleG1tMyxcW1xcdCBcXSpcWzAtOVxdKlxcKCVc W3JlXF0/c3BcXCkiIDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMgIm1vdnVwc1xbXFx0IFxdKlxbMC05XF0qXFwoJVxb cmVcXT9zcFxcKSxcW1xcdCBcXSoleG1tMyIgMSB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIm1vdihhfHUpcHNcW1xcdCBc XSolKHh8eXx6KW1tXFswLTJcXSssXFtcXHQgXF0qXFswLTlcXSpcXCglXFty ZVxdP3NwXFwpIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci1ub3QgIm1vdihhfHUpcHNcW1xcdCBcXSpcWzAtOVxdKlxcKCVcW3Jl XF0/c3BcXCksXFtcXHQgXF0qJSh4fHl8eiltbVxbMC0yXF0rIiB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIm1vdihhfHUp cHNcW1xcdCBcXSolKHh8eXx6KW1tXFs0LTlcXSssXFtcXHQgXF0qXFswLTlc XSpcXCglXFtyZVxdP3NwXFwpIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci1ub3QgIm1vdihhfHUpcHNcW1xcdCBcXSpcWzAtOVxd KlxcKCVcW3JlXF0/c3BcXCksXFtcXHQgXF0qJSh4fHl8eiltbVxbNC05XF0r IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qg Im1vdihhfHUpcHNcW1xcdCBcXSolKHh8eXx6KW1tMVxbMC05XF0rLFxbXFx0 IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9zcFxcKSIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3YoYXx1KXBzXFtcXHQg XF0qXFswLTlcXSpcXCglXFtyZVxdP3NwXFwpLFxbXFx0IFxdKiUoeHx5fHop bW0xXFswLTlcXSsiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLW5vdCAiKHB1c2h8cG9wKWxcW1xcdCBcXSolZShhfGJ8Y3xkKXgi IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAi KHB1c2h8cG9wKWxcW1xcdCBcXSolZShzfGQpaSIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICIocHVzaHxwb3ApbFxbXFx0 IFxdKiVlYnAiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTMuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC0zLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uYTg3ZTU5NAotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC0z LmMKQEAgLTAsMCArMSwxNCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLU8yIiB9ICovCisKK3R5cGVkZWYgdW5zaWdu ZWQgaW50IHV3b3JkX3QgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKF9fd29yZF9f KSkpOworCit2b2lkCitfX2F0dHJpYnV0ZV9fKChpbnRlcnJ1cHQpKQorZm4g KHZvaWQqIGZyYW1lLCB1d29yZF90IGVycm9yKQoreworfQorCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgImFkZCg/Omx8cSlcW1xc dCBcXSpcXFwkOCxcW1xcdCBcXSolXFtyZVxdP3NwIiAxIHsgdGFyZ2V0IHsg ISBpYTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci10aW1lcyAiYWRkbFxbXFx0IFxdKlxcXCQ0LFxbXFx0IFxdKiVlc3Ai IDEgeyB0YXJnZXQgaWEzMiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyICJpcmV0IiB9IH0qLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTM4Ny1lcnIuYyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC0zODct ZXJyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYw OTRmMgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L2ludGVycnVwdC0zODctZXJyLmMKQEAgLTAsMCArMSwyNyBA QAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LU8yIC1tODAzODcgLW1sb25nLWRvdWJsZS04MCAtbW5vLWlhbWN1IC1tbm8t c3NlIiB9ICovCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IHV3b3JkX3QgX19h dHRyaWJ1dGVfXyAoKG1vZGUgKF9fd29yZF9fKSkpOworCitleHRlcm4gbG9u ZyBkb3VibGUgeSwgeDsKKwordm9pZAorZm4wICh2b2lkKQoreworICB4ID0g eTsKKyAgeSA9IDA7Cit9CisKK3ZvaWQKK19fYXR0cmlidXRlX18oKGludGVy cnVwdCkpCitmbjEgKHZvaWQgKmZyYW1lLCB1d29yZF90IGVycm9yKQorewor ICB4ID0gMDsgLyogeyBkZy1lcnJvciAiODAzODcgaW5zdHJ1Y3Rpb25zIGFy ZW4ndCBhbGxvd2VkIGluIGV4Y2VwdGlvbiBzZXJ2aWNlIHJvdXRpbmUiIH0g Ki8KK30KKwordm9pZAorX19hdHRyaWJ1dGVfXygoaW50ZXJydXB0KSkKK2Zu MiAodm9pZCAqZnJhbWUpCit7CisgIHggPSB5OyAvKiB7IGRnLWVycm9yICI4 MDM4NyBpbnN0cnVjdGlvbnMgYXJlbid0IGFsbG93ZWQgaW4gaW50ZXJydXB0 IHNlcnZpY2Ugcm91dGluZSIgfSAqLworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTQuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC00LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyMzBjZAotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2lu dGVycnVwdC00LmMKQEAgLTAsMCArMSwzMiBAQAorLyogeyBkZy1kbyBsaW5r IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8iIH0gKi8KKworI2luY2x1ZGUg PHN0ZGludC5oPgorCitleHRlcm4gdm9pZCBsaW5rX2Vycm9yICh2b2lkKTsK KwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdXdvcmRfdCBfX2F0dHJpYnV0ZV9f ICgobW9kZSAoX193b3JkX18pKSk7CisKK3N0cnVjdCBpbnRlcnJ1cHRfZnJh bWUKK3sKKyAgdXdvcmRfdCBpcDsKKyAgdXdvcmRfdCBjczsKKyAgdXdvcmRf dCBmbGFnczsKKyAgdXdvcmRfdCBzcDsKKyAgdXdvcmRfdCBzczsKK307CisK K19fYXR0cmlidXRlX18gKCh1c2VkLCBpbnRlcnJ1cHQpKQordm9pZAorZm9v IChzdHJ1Y3QgaW50ZXJydXB0X2ZyYW1lICpmcmFtZSkKK3sKKyAgdm9pZCAq cmEgPSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MgKDApOworICBpZiAoKHVp bnRwdHJfdCkgcmEgIT0gKHVpbnRwdHJfdCkgZnJhbWUtPmlwKQorICAgIGxp bmtfZXJyb3IgKCk7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgcmV0 dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9pbnRlcnJ1cHQtNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvaW50ZXJydXB0LTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi41M2Q2NjU2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTUuYwpAQCAt MCwwICsxLDIzIEBACisvKiB7IGRnLWRvIGxpbmsgfSAqLworLyogeyBkZy1v cHRpb25zICItTyIgfSAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK2V4 dGVybiB2b2lkIGxpbmtfZXJyb3IgKHZvaWQpOworCit0eXBlZGVmIHVuc2ln bmVkIGludCB1d29yZF90IF9fYXR0cmlidXRlX18gKChtb2RlIChfX3dvcmRf XykpKTsKKworX19hdHRyaWJ1dGVfXyAoKHVzZWQsIGludGVycnVwdCkpCit2 b2lkCitmb28gKHZvaWQgKmZyYW1lLCB1d29yZF90IGVycm9yKQoreworICB2 b2lkICpyYSA9IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyAoMCk7CisgIGlm ICgodWludHB0cl90KSByYSAhPSAodWludHB0cl90KSBlcnJvcikKKyAgICBs aW5rX2Vycm9yICgpOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHJl dHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvaW50ZXJydXB0LTYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L2ludGVycnVwdC02LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYTFhM2QwZQotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC02LmMKQEAg LTAsMCArMSw0MCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsg ZGctb3B0aW9ucyAiLU8yIiB9ICovCisKK3R5cGVkZWYgdW5zaWduZWQgaW50 IHV3b3JkX3QgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKF9fd29yZF9fKSkpOwor CitleHRlcm4gaW50IGVycm9yOworCitfX2F0dHJpYnV0ZV9fKChpbnRlcnJ1 cHQpKQordm9pZAorZm4xICh2b2lkICpwLCBzaG9ydCBlcnJvcl9jb2RlKQor eyAvKiB7IGRnLWVycm9yICJpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIHNo b3VsZCBoYXZlIHVuc2lnbmVkIFwobG9uZyBsb25nIHxsb25nIHxcKWludCBh cyB0aGUgc2Vjb25kIGFyZ3VtZW50IiB9ICovCit9CisKK19fYXR0cmlidXRl X18oKGludGVycnVwdCkpCit2b2lkCitmbjIgKHZvaWQpCit7IC8qIHsgZGct ZXJyb3IgImludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgY2FuIG9ubHkgaGF2 ZSBhIHBvaW50ZXIgYXJndW1lbnQgYW5kIGFuIG9wdGlvbmFsIGludGVnZXIg YXJndW1lbnQiIH0gKi8KK30KKworX19hdHRyaWJ1dGVfXygoaW50ZXJydXB0 KSkKK3ZvaWQKK2ZuMyAodXdvcmRfdCBlcnJvcl9jb2RlKQoreyAvKiB7IGRn LWVycm9yICJpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIHNob3VsZCBoYXZl IGEgcG9pbnRlciBhcyB0aGUgZmlyc3QgYXJndW1lbnQiIH0gKi8KKyAgZXJy b3IgPSBlcnJvcl9jb2RlOworfQorCitfX2F0dHJpYnV0ZV9fKChpbnRlcnJ1 cHQpKQordm9pZAorZm40ICh1d29yZF90IGVycm9yX2NvZGUsIHZvaWQgKmZy YW1lKQoreyAvKiB7IGRnLWVycm9yICJpbnRlcnJ1cHQgc2VydmljZSByb3V0 aW5lIHNob3VsZCBoYXZlIC4qIHRoZSAuKiBhcmd1bWVudCIgfSAqLworICBl cnJvciA9IGVycm9yX2NvZGU7Cit9CisKK2V4dGVybiBpbnQgZm41ICh2b2lk ICopIF9fYXR0cmlidXRlX18gKChpbnRlcnJ1cHQpKTsgLyogeyBkZy1lcnJv ciAiaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBjYW4ndCBoYXZlIG5vbi12 b2lkIHJldHVybiB2YWx1ZSIgfSAqLworCitpbnQKK2ZuNSAodm9pZCAqZnJh bWUpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LTcuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC03LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0NDFhMgotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVy cnVwdC03LmMKQEAgLTAsMCArMSwxMiBAQAorLyogeyBkZy1kbyBjb21waWxl IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIiB9ICovCisKK2V4dGVybiBp bnQgZXJyb3I7CisKK2V4dGVybiB2b2lkIGZuICh2b2lkICopIF9fYXR0cmli dXRlX18oKGludGVycnVwdCkpOworCit2b2lkCitmb28gKHZvaWQpCit7Cisg IGZuICgmZXJyb3IpOyAvKiB7IGRnLWVycm9yICJpbnRlcnJ1cHQgc2Vydmlj ZSByb3V0aW5lIGNhbid0IGJlIGNhbGxlZCBkaXJlY3RseSIgfSAqLworfQpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50 ZXJydXB0LTguYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2lu dGVycnVwdC04LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMGE4MzQ3MwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC04LmMKQEAgLTAsMCArMSwyMCBA QAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0ICotKi1saW51eCogfSB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbW5vLWF2eDUxMmYgLW1uby1p YW1jdSAtbWF2eCIgfSAqLworCitleHRlcm4gdm9pZCBiYXIgKHZvaWQpOwor Cit2b2lkCisgX19hdHRyaWJ1dGVfXyAoKGludGVycnVwdCkpCitmb28gKHZv aWQgKmZyYW1lKQoreworICBiYXIgKCk7Cit9CisKKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyAibW92dXBzXFtcXHQgXF0qJXltbVxb MC05XF0rLFxbXFx0IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9zcFxcKSIgMTYg eyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJtb3Z1cHNcW1xcdCBcXSpcWzAtOVxd KlxcKCVcW3JlXF0/c3BcXCksXFtcXHQgXF0qJXltbVxbMC05XF0rIiAxNiB7 IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMgIm1vdnVwc1xbXFx0IFxdKiV5bW1cWzAt OVxdKyxcW1xcdCBcXSpcWzAtOVxdKlxcKCVcW3JlXF0/c3BcXCkiIDggeyB0 YXJnZXQgaWEzMiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLXRpbWVzICJtb3Z1cHNcW1xcdCBcXSpcWzAtOVxdKlxcKCVcW3Jl XF0/c3BcXCksXFtcXHQgXF0qJXltbVxbMC05XF0rIiA4IHsgdGFyZ2V0IGlh MzIgfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1u b3QgInB1c2hxXFtcXHQgXF0qJXJieCIgeyB0YXJnZXQgeyAhIGlhMzIgfSB9 IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAi cHVzaHFcW1xcdCBcXSolcjFcWzItNVxdKyIgeyB0YXJnZXQgeyAhIGlhMzIg fSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5v dCAicHVzaGxcW1xcdCBcXSolZWJ4IiB7IHRhcmdldCBpYTMyIH0gfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJwdXNobFxb XFx0IFxdKiVlKHN8ZClpIiB7IHRhcmdldCBpYTMyIH0gfSB9ICovCmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1 cHQtOS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJy dXB0LTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45 ZDBjNzc2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvaW50ZXJydXB0LTkuYwpAQCAtMCwwICsxLDIyIEBACisv KiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgKi0qLWxpbnV4KiB9IH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLU8yIC1tbm8tYXZ4NTEyYncgLW1uby1pYW1j dSAtbWF2eDUxMmYiIH0gKi8KKworZXh0ZXJuIHZvaWQgYmFyICh2b2lkKTsK Kwordm9pZAorIF9fYXR0cmlidXRlX18gKChpbnRlcnJ1cHQpKQorZm9vICh2 b2lkICpmcmFtZSkKK3sKKyAgYmFyICgpOworfQorCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIm1vdnVwc1xbXFx0IFxdKiV6bW1c WzAtOVxdKyxcW1xcdCBcXSpcWzAtOVxdKlxcKCVcW3JlXF0/c3BcXCkiIDMy IHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyAibW92dXBzXFtcXHQgXF0qXFswLTlc XSpcXCglXFtyZVxdP3NwXFwpLFxbXFx0IFxdKiV6bW1cWzAtOVxdKyIgMzIg eyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJtb3Z1cHNcW1xcdCBcXSolem1tXFsw LTlcXSssXFtcXHQgXF0qXFswLTlcXSpcXCglXFtyZVxdP3NwXFwpIiA4IHsg dGFyZ2V0IGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyAibW92dXBzXFtcXHQgXF0qXFswLTlcXSpcXCglXFty ZVxdP3NwXFwpLFxbXFx0IFxdKiV6bW1cWzAtOVxdKyIgOCB7IHRhcmdldCBp YTMyIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMgImttb3Z3XFtcXHQgXF0qJWtcWzAtN1xdKyxcW1xcdCBcXSpcW1xc LV0/XFswLTlcXSpcXCglXFtyZVxdP3NwXFwpIiA4IH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJrbW92d1xbXFx0IFxd KlxbMC05XF0qXFwoJVxbcmVcXT9zcFxcKSxcW1xcdCBcXSola1xbMC03XF0r IiA4IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5v dCAicHVzaHFcW1xcdCBcXSolcmJ4IiB7IHRhcmdldCB7ICEgaWEzMiB9IH0g fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJw dXNocVxbXFx0IFxdKiVyMVxbMi01XF0rIiB7IHRhcmdldCB7ICEgaWEzMiB9 IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90 ICJwdXNobFxbXFx0IFxdKiVlYngiIHsgdGFyZ2V0IGlhMzIgfSB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInB1c2hsXFtc XHQgXF0qJWUoc3xkKWkiIHsgdGFyZ2V0IGlhMzIgfSB9IH0gKi8KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVw dC1ibmQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVy cnVwdC1ibmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li45ZjUwNjYxCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LWJuZC5jCkBAIC0wLDAgKzEsMTYg QEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB7ICEgeDMyIH0gfSB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbW5vLWlhbWN1IC1tbXB4IiB9 ICovCisKK3ZvaWQKK19fYXR0cmlidXRlX18oKGludGVycnVwdCkpCitmbiAo dm9pZCAqZnJhbWUpCit7CisgIGFzbSAoIiMiCisgICAgICAgOgorICAgICAg IDoKKyAgICAgICA6ICJibmQzIik7Cit9CisKKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci10aW1lcyAiYm5kbW92XFtcXHQgXF0qJWJuZDMsXFtc XHQgXF0qXFtcXC1cXT9cWzAtOVxdKlxcKCVcW3JlXF0/c3BcXCkiIDEgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgImJu ZG1vdlxbXFx0IFxdKlxbXFwtXF0/XFswLTlcXSpcXCglXFtyZVxdP3NwXFwp LFxbXFx0IFxdKiVibmQzIiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyICJpcmV0IiB9IH0qLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LWlhbWN1LmMgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtaWFtY3Uu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2E5NDYz Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvaW50ZXJydXB0LWlhbWN1LmMKQEAgLTAsMCArMSwzMCBAQAorLyog eyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IGlhMzIgfSB9ICovCisvKiB7IGRn LW9wdGlvbnMgIi1PMiAtbWlhbWN1IiB9ICovCisKK2V4dGVybiB2b2lkIGZv byAodm9pZCAqKSBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0KSk7CitleHRl cm4gaW50IGJhciAoaW50KTsKKwordm9pZCBmb28gKHZvaWQgKmZyYW1lKQor eworICBpbnQgYSxiLGMsZCxlLGYsaTsKKyAgYSA9IGJhciAoNSk7CisgIGIg PSBiYXIgKGEpOworICBjID0gYmFyIChiKTsKKyAgZCA9IGJhciAoYyk7Cisg IGUgPSBiYXIgKGQpOworICBmID0gYmFyIChlKTsKKyAgZm9yIChpID0gMTsg aSA8IDEwOyBpKyspCisgICAgYSArPSBiYXIgKGEgKyBpKSArIGJhciAoYiAr IGkpICsKKwkgYmFyIChjICsgaSkgKyBiYXIgKGQgKyBpKSArCisJIGJhciAo ZSArIGkpICsgYmFyIChmK2kpOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItbm90ICJwdXNobFxbXFx0IFxdKiVlYngiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAicHVzaGxcW1xc dCBcXSolZShzfGQpaSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMgInB1c2hsXFtcXHQgXF0qJWVheCIgMSB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAicHVzaGxc W1xcdCBcXSolZWN4IiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLXRpbWVzICJwdXNobFxbXFx0IFxdKiVlZHgiIDEgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInBvcGxc W1xcdCBcXSolZWF4IiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLXRpbWVzICJwb3BsXFtcXHQgXF0qJWVjeCIgMSB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAicG9wbFxb XFx0IFxdKiVlZHgiIDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXIgImlyZXQiIH0gfSovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtbW14LWVyci5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LW1teC1lcnIu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzRmMzY3 Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvaW50ZXJydXB0LW1teC1lcnIuYwpAQCAtMCwwICsxLDM3IEBACisv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIg LW1tbXggLW1uby1pYW1jdSIgfSAqLworCit0eXBlZGVmIHVuc2lnbmVkIGlu dCB1d29yZF90IF9fYXR0cmlidXRlX18gKChtb2RlIChfX3dvcmRfXykpKTsK K3R5cGVkZWYgc2hvcnQgX192NGhpIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rv cl9zaXplX18gKDgpKSk7Cit0eXBlZGVmIGludCBfX202NCBfX2F0dHJpYnV0 ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICg4KSwgX19tYXlfYWxpYXNfXykpOwor CitleHRlcm4gX19tNjQgeSwgeDsKKwordm9pZAorZm4wICh2b2lkKQorewor ICB4ID0gX19leHRlbnNpb25fXyAoX19tNjQpeyAwIH07CisgIHggPSAoX19t NjQpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc3diICgoX192NGhpKSB4LCAoX192 NGhpKSB5KTsKKyAgeSA9IHg7Cit9CisKK3ZvaWQKK19fYXR0cmlidXRlX18o KGludGVycnVwdCkpCitmbjEgKHZvaWQgKmZyYW1lKQoreworICB4ID0gKF9f bTY0KSBfX2J1aWx0aW5faWEzMl9wYWNrc3N3YiAoKF9fdjRoaSkgeCwgKF9f djRoaSkgeSk7IC8qIHsgZGctZXJyb3IgIk1NWC8zRG5vdyAoaW5zdHJ1Y3Rp b25zfGludHJpbnNpY3MpIGFyZW4ndCBhbGxvd2VkIGluIGludGVycnVwdCBz ZXJ2aWNlIHJvdXRpbmUiIH0gKi8KK30KKwordm9pZAorX19hdHRyaWJ1dGVf XygoaW50ZXJydXB0KSkKK2ZuMiAodm9pZCAqZnJhbWUpCit7CisgIHggPSB5 OyAvKiB7IGRnLWVycm9yICJNTVgvM0Rub3cgaW5zdHJ1Y3Rpb25zIGFyZW4n dCBhbGxvd2VkIGluIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUiIH0gKi8K K30KKwordm9pZAorX19hdHRyaWJ1dGVfXygoaW50ZXJydXB0KSkKK2ZuMyAo dm9pZCAqZnJhbWUsIHV3b3JkX3QgZXJyb3IpCit7CisgIHggPSBfX2V4dGVu c2lvbl9fIChfX202NCl7IDAgfTsgLyogeyBkZy1lcnJvciAiTU1YLzNEbm93 IGluc3RydWN0aW9ucyBhcmVuJ3QgYWxsb3dlZCBpbiBleGNlcHRpb24gc2Vy dmljZSByb3V0aW5lIiB9ICovCit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtcmVkem9uZS0xLmMgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtcmVkem9u ZS0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2 YjgxYgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L2ludGVycnVwdC1yZWR6b25lLTEuYwpAQCAtMCwwICsxLDE2 IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyAhIGlhMzIgfSB9 IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tcmVkLXpvbmUiIH0gKi8K Kwordm9pZAorX19hdHRyaWJ1dGVfXygoaW50ZXJydXB0KSkKK2ZuICh2b2lk ICpmcmFtZSkKK3sKKyAgLyogTm8gbmVlZCB0byBhZGp1c3Qgc3RhY2sgaWYg bGVzcyB0aGFuIDEyOCBieXRlcyBhcmUgdXNlZCBvbiBzdGFjaworICAgICB3 aXRoIGEgMTI4LWJ5dGUgcmVkIHpvbmUuICAqLworICBjaGFyIGFycmF5WzEx Ml07CisgIGFzbSAoIiMgJTAgIgorICAgICAgIDoKKyAgICAgICA6ICJyIiAo YXJyYXkpKTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LW5vdCAiKHN1YnxhZGQpKGx8cSlcW1xcdCBcXSpcXCRcWzAtOVxdKixcW1xc dCBcXSolXFtyZVxdP3NwIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC1yZWR6b25lLTIuYyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC1yZWR6 b25lLTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j NmEyODIyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvaW50ZXJydXB0LXJlZHpvbmUtMi5jCkBAIC0wLDAgKzEs MTYgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB7ICEgaWEzMiB9 IH0gfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1yZWQtem9uZSIgfSAq LworCit2b2lkCitfX2F0dHJpYnV0ZV9fKChpbnRlcnJ1cHQpKQorZm4gKHZv aWQgKmZyYW1lKQoreworICAvKiBOZWVkIHRvIGFkanVzdCBzdGFjayBpZiBt b3JlIHRoYW4gMTI4IGJ5dGVzIGFyZSB1c2VkIG9uIHN0YWNrCisgICAgIHdp dGggYSAxMjgtYnl0ZSByZWQgem9uZS4gICovCisgIGNoYXIgYXJyYXlbMTEz XTsKKyAgYXNtICgiIyAlMCAiCisgICAgICAgOgorICAgICAgIDogInIiIChh cnJheSkpOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMgIig/OnN1YnxhZGQpKD86bHxxKVxbXFx0IFxdKlxcXCRcWzAtOVxd KixcW1xcdCBcXSolXFtyZVxdP3NwIiAyIH0gfSAqLwpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LXNpYmNh bGwuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVw dC1zaWJjYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZTIyMmFjZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC1zaWJjYWxsLmMKQEAgLTAsMCAr MSwxMiBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLU8zIiB9ICovCisKK2V4dGVybiB2b2lkIGZvbyAodm9pZCAqKSBf X2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0KSk7CitleHRlcm4gdm9pZCBiYXIg KHZvaWQpOworCit2b2lkIGZvbyAodm9pZCAqZnJhbWUpCit7CisgIGJhciAo KTsKK30KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgImpt cCIgfSB9Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiaXJl dCIgfSB9Ki8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2ludGVycnVwdC1zd2l0Y2gtYWJpLmMgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtc3dpdGNoLWFiaS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYjBhYmUKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9p bnRlcnJ1cHQtc3dpdGNoLWFiaS5jCkBAIC0wLDAgKzEsMTYgQEAKKy8qIHsg ZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiIgfSAq LworCitleHRlcm4gdm9pZCBiYXIgKGludCk7CisKK3ZvaWQgZjEgKHZvaWQp eyAgYmFyICgxKTsgfQorX19hdHRyaWJ1dGVfXygoaW50ZXJydXB0KSkKK3Zv aWQgZjIgKHZvaWQgKmZyYW1lKXsgIGJhciAoMik7IH0KK3ZvaWQgZjMgKHZv aWQpeyAgYmFyICgzKTsgfQorX19hdHRyaWJ1dGVfXygoaW50ZXJydXB0KSkK K3ZvaWQgZjQgKHZvaWQgKmZyYW1lKXsgIGJhciAoNCk7IH0KK3ZvaWQgZjUg KHZvaWQpeyAgYmFyICg1KTsgfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMgInB1c2guXHQlLmF4IiAyIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJwb3AuXHQlLmF4IiAy IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz ICJpcmV0IiAyIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LXhtbS5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvaW50ZXJydXB0LXhtbS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYWZiMTAKLS0tIC9kZXYvbnVs bAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1 cHQteG1tLmMKQEAgLTAsMCArMSwxNiBAQAorLyogeyBkZy1kbyBjb21waWxl IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tbm8tYXZ4IC1tbm8taWFt Y3UgLW1zc2UiIH0gKi8KKwordm9pZAorX19hdHRyaWJ1dGVfXygoaW50ZXJy dXB0KSkKK2ZuICh2b2lkICpmcmFtZSkKK3sKKyAgYXNtICgiIyIKKyAgICAg ICA6CisgICAgICAgOgorICAgICAgIDogInhtbTMiKTsKK30KKworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJtb3Z1cHNcW1xcdCBc XSoleG1tMyxcW1xcdCBcXSpcWzAtOVxdKlxcKCVcW3JlXF0/c3BcXCkiIDEg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg Im1vdnVwc1xbXFx0IFxdKlxbMC05XF0qXFwoJVxbcmVcXT9zcFxcKSxcW1xc dCBcXSoleG1tMyIgMSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlciAiaXJldCIgfSB9Ki8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC15bW0uYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ludGVycnVwdC15bW0uYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2I1ZmM3Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvaW50 ZXJydXB0LXltbS5jCkBAIC0wLDAgKzEsMTYgQEAKKy8qIHsgZGctZG8gY29t cGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbW5vLWF2eDUxMmYg LW1uby1pYW1jdSAtbWF2eCIgfSAqLworCit2b2lkCitfX2F0dHJpYnV0ZV9f KChpbnRlcnJ1cHQpKQorZm4gKHZvaWQgKmZyYW1lKQoreworICBhc20gKCIj IgorICAgICAgIDoKKyAgICAgICA6CisgICAgICAgOiAieG1tMyIpOworfQor CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZtb3Z1 cHNcW1xcdCBcXSoleW1tMyxcW1xcdCBcXSpcWzAtOVxdKlxcKCVcW3JlXF0/ c3BcXCkiIDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMgInZtb3Z1cHNcW1xcdCBcXSpcWzAtOVxdKlxcKCVcW3JlXF0/ c3BcXCksXFtcXHQgXF0qJXltbTMiIDEgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXIgImlyZXQiIH0gfSovCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtem1tLmMg Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pbnRlcnJ1cHQtem1t LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQyM2I1 ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2ludGVycnVwdC16bW0uYwpAQCAtMCwwICsxLDE2IEBACisvKiB7 IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1h dng1MTJmIC1tbm8taWFtY3UiIH0gKi8KKwordm9pZAorX19hdHRyaWJ1dGVf XygoaW50ZXJydXB0KSkKK2ZuICh2b2lkICpmcmFtZSkKK3sKKyAgYXNtICgi IyIKKyAgICAgICA6CisgICAgICAgOgorICAgICAgIDogInhtbTMiKTsKK30K KworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2bW92 dXBzXFtcXHQgXF0qJXptbTMsXFtcXHQgXF0qXFswLTlcXSpcXCglXFtyZVxd P3NwXFwpIiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLXRpbWVzICJ2bW92dXBzXFtcXHQgXF0qXFswLTlcXSpcXCglXFtyZVxd P3NwXFwpLFxbXFx0IFxdKiV6bW0zIiAxIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyICJpcmV0IiB9IH0qLwo= --001a1147f45c2673ef0521409a33--