From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com [IPv6:2a00:1450:4864:20::52f]) by sourceware.org (Postfix) with ESMTPS id 415733858C33 for ; Wed, 26 Jul 2023 10:22:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 415733858C33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-522382c4840so3992170a12.2 for ; Wed, 26 Jul 2023 03:22:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690366922; x=1690971722; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=KJ3RjjaLCS+AIH3lr0yUCMuIxbdmZaxaZhQ44J/C2q8=; b=BlQ2UN8+Xs81ITz0eZTQGIvIm05cc7cqnXaWQzrhm+/0ogy4og9HPtWNrhWaMAC8Rx +GiRUxHprfw36C17+/Qgx12AyVJ6d4YjNmwx/xaWanHxfDopXI+CtFn5RaOdW6cVN92Z RikE6L7B/Pi09QmunLW+K/C6i/Z2eTy1YnoN60NxsAOgiTRVrwSSLCZDAwvnxtIxFAz9 K3FHIJTgByGeAmuCYGcRtsG7aVLYo2fj/cxo/9uIN1K+PbAY7scgtoRsfGwSafJWeRIR NDTZNIZM390yXjEs2fJERx2l+EUcv3Osxc9F2fthpGJhNvuMrGtuhcqFTcVbcNLsQXBy 1Ung== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690366922; x=1690971722; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=KJ3RjjaLCS+AIH3lr0yUCMuIxbdmZaxaZhQ44J/C2q8=; b=c85PPrOFMaxVa+XPfPgLMCTv6ngrZ7PIu7nGlvc5mJXR6+4qusM5HC1Lzr0U+Ic2rr krbKyJQpl1+MLoNT4+h134r6L15J2i0ZAe1yo1TUoxKzlk9lleNUHbHPOfClGKdwx0bJ 96RxSNKmGpx+0I8atOaJpOCc6Gh5gr6xoLAi9MBRZGB8c/evzXOAIMjGEKUeX59yDlQ2 qyMAZywSQ5cQ2/b+zW7eK7qqlZesz6YE85ySIut275uDY5Ip1wc9ylekdVF+pV9tiids nEtPLmxTljbPwKn6/892s49Hohj4ThvTQ2B4Xxx0FMtdWwYq1U/VVHd1ifAILJBU+b+y UeAg== X-Gm-Message-State: ABy/qLYHGr+Z8bYDTWn7p9+XMrQyIhiP2FWBb9tIqTyXhdnASq9WChKH lNAtHO9xTwLxyFN3amZQDHWf/UST66oxtc+R8rMZQYs8xKI= X-Google-Smtp-Source: APBJJlGxNKasf1eI1ShNMl5yJH2z3v82CzWMI1ts7ORQQkNMhRozXSZ9FVcp3Bphk0RJ2Ebemolf+fbVtRAh+4Cq4i4= X-Received: by 2002:a05:6402:2043:b0:522:216a:28d4 with SMTP id bc3-20020a056402204300b00522216a28d4mr1331216edb.7.1690366922195; Wed, 26 Jul 2023 03:22:02 -0700 (PDT) MIME-Version: 1.0 From: Uros Bizjak Date: Wed, 26 Jul 2023 12:21:51 +0200 Message-ID: Subject: [committed] i386: Clear upper half of XMM register for V2SFmode operations [PR110762] To: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary="000000000000f1083406016137bf" X-Spam-Status: No, score=-8.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000f1083406016137bf Content-Type: text/plain; charset="UTF-8" Clear the upper half of a V4SFmode operand register in front of all potentially trapping instructions. The testcase: --cut here-- typedef float v2sf __attribute__((vector_size(8))); typedef float v4sf __attribute__((vector_size(16))); v2sf test(v4sf x, v4sf y) { v2sf x2, y2; x2 = __builtin_shufflevector (x, x, 0, 1); y2 = __builtin_shufflevector (y, y, 0, 1); return x2 + y2; } --cut here-- now compiles to: movq %xmm1, %xmm1 # 9 [c=4 l=4] *vec_concatv4sf_0 movq %xmm0, %xmm0 # 10 [c=4 l=4] *vec_concatv4sf_0 addps %xmm1, %xmm0 # 11 [c=12 l=3] *addv4sf3/0 This approach addresses issues with exceptions, as well as issues with denormal/invalid values. An obvious exception to the rule is a division, where the value != 0.0 should be loaded into the upper half of the denominator to avoid division by zero exception. The patch effectively tightens the solution from PR95046 by clearing upper halves of all operand registers before every potentially trapping instruction. The testcase: --cut here-- typedef float __attribute__((vector_size(8))) v2sf; v2sf test (v2sf a, v2sf b, v2sf c) { return a * b - c; } --cut here-- compiles to: movq %xmm1, %xmm1 # 8 [c=4 l=4] *vec_concatv4sf_0 movq %xmm0, %xmm0 # 9 [c=4 l=4] *vec_concatv4sf_0 movq %xmm2, %xmm2 # 12 [c=4 l=4] *vec_concatv4sf_0 mulps %xmm1, %xmm0 # 10 [c=16 l=3] *mulv4sf3/0 movq %xmm0, %xmm0 # 13 [c=4 l=4] *vec_concatv4sf_0 subps %xmm2, %xmm0 # 14 [c=12 l=3] *subv4sf3/0 The implementation emits V4SFmode operation, so we can remove all "emulated" SSE2 V2SFmode trapping instructions and remove "emulated" SSE2 V2SFmode alternatives from 3dNOW! insn patterns. PR target/110762 gcc/ChangeLog: * config/i386/i386.md (plusminusmult): New code iterator. * config/i386/mmx.md (mmxdoublevecmode): New mode attribute. (movq__to_sse): New expander. (v2sf3): Macroize expander from addv2sf3, subv2sf3 and mulv2sf3 using plusminusmult code iterator. Rewrite as a wrapper around V4SFmode operation. (mmx_addv2sf3): Change operand 1 and operand 2 predicates to nonimmediate_operand. (*mmx_addv2sf3): Remove SSE alternatives. Change operand 1 and operand 2 predicates to nonimmediate_operand. (mmx_subv2sf3): Change operand 2 predicate to nonimmediate_operand. (mmx_subrv2sf3): Change operand 1 predicate to nonimmediate_operand. (*mmx_subv2sf3): Remove SSE alternatives. Change operand 1 and operand 2 predicates to nonimmediate_operand. (mmx_mulv2sf3): Change operand 1 and operand 2 predicates to nonimmediate_operand. (*mmx_mulv2sf3): Remove SSE alternatives. Change operand 1 and operand 2 predicates to nonimmediate_operand. (divv2sf3): Rewrite as a wrapper around V4SFmode operation. (v2sf3): Ditto. (mmx_v2sf3): Change operand 1 and operand 2 predicates to nonimmediate_operand. (*mmx_v2sf3): Remove SSE alternatives. Change operand 1 and operand 2 predicates to nonimmediate_operand. (mmx_ieee_v2sf3): Ditto. (sqrtv2sf2): Rewrite as a wrapper around V4SFmode operation. (*mmx_haddv2sf3_low): Ditto. (*mmx_hsubv2sf3_low): Ditto. (vec_addsubv2sf3): Ditto. (*mmx_maskcmpv2sf3_comm): Remove. (*mmx_maskcmpv2sf3): Remove. (vec_cmpv2sfv2si): Rewrite as a wrapper around V4SFmode operation. (vcondv2sf): Ditto. (fmav2sf4): Ditto. (fmsv2sf4): Ditto. (fnmav2sf4): Ditto. (fnmsv2sf4): Ditto. (fix_truncv2sfv2si2): Ditto. (fixuns_truncv2sfv2si2): Ditto. (mmx_fix_truncv2sfv2si2): Remove SSE alternatives. Change operand 1 predicate to nonimmediate_operand. (floatv2siv2sf2): Rewrite as a wrapper around V4SFmode operation. (floatunsv2siv2sf2): Ditto. (mmx_floatv2siv2sf2): Remove SSE alternatives. Change operand 1 predicate to nonimmediate_operand. (nearbyintv2sf2): Rewrite as a wrapper around V4SFmode operation. (rintv2sf2): Ditto. (lrintv2sfv2si2): Ditto. (ceilv2sf2): Ditto. (lceilv2sfv2si2): Ditto. (floorv2sf2): Ditto. (lfloorv2sfv2si2): Ditto. (btruncv2sf2): Ditto. (roundv2sf2): Ditto. (lroundv2sfv2si2): Ditto. (*mmx_roundv2sf2): Remove. gcc/testsuite/ChangeLog: * gcc.target/i386/pr110762.c: New test. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Uros. --000000000000f1083406016137bf Content-Type: text/plain; charset="US-ASCII"; name="p.diff.txt" Content-Disposition: attachment; filename="p.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lkjkt8ee0 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2Lm1kIGIvZ2NjL2NvbmZpZy9pMzg2L2kz ODYubWQKaW5kZXggNGRiMjEwY2M3OTUuLmNlZGJhM2I5MGYwIDEwMDY0NAotLS0gYS9nY2MvY29u ZmlnL2kzODYvaTM4Ni5tZAorKysgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5tZApAQCAtOTMzLDYg KzkzMyw3IEBAIChkZWZpbmVfYXNtX2F0dHJpYnV0ZXMKICAgIChzZXRfYXR0ciAidHlwZSIgIm11 bHRpIildKQogCiAoZGVmaW5lX2NvZGVfaXRlcmF0b3IgcGx1c21pbnVzIFtwbHVzIG1pbnVzXSkK KyhkZWZpbmVfY29kZV9pdGVyYXRvciBwbHVzbWludXNtdWx0IFtwbHVzIG1pbnVzIG11bHRdKQog KGRlZmluZV9jb2RlX2l0ZXJhdG9yIHBsdXNtaW51c211bHRkaXYgW3BsdXMgbWludXMgbXVsdCBk aXZdKQogCiAoZGVmaW5lX2NvZGVfaXRlcmF0b3Igc2F0X3BsdXNtaW51cyBbc3NfcGx1cyB1c19w bHVzIHNzX21pbnVzIHVzX21pbnVzXSkKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9tbXgu bWQgYi9nY2MvY29uZmlnL2kzODYvbW14Lm1kCmluZGV4IDEyYjEwM2EwNmE3Li44OTZhZjc2YTMz ZiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L21teC5tZAorKysgYi9nY2MvY29uZmlnL2kz ODYvbW14Lm1kCkBAIC0xMDYsNiArMTA2LDEwIEBAIChkZWZpbmVfbW9kZV9hdHRyIG1teGludHZl Y21vZGUKIChkZWZpbmVfbW9kZV9hdHRyIG1teGludHZlY21vZGVsb3dlcgogICBbKFYyU0YgInYy c2kiKSAoVjJTSSAidjJzaSIpIChWNEhJICJ2NGhpIikgKFY4UUkgInY4cWkiKV0pCiAKKzs7IE1h cHBpbmcgb2YgdmVjdG9yIG1vZGVzIHRvIGEgdmVjdG9yIG1vZGUgb2YgZG91YmxlIHNpemUKKyhk ZWZpbmVfbW9kZV9hdHRyIG1teGRvdWJsZXZlY21vZGUKKyAgWyhWMlNGICJWNFNGIikgKFYyU0kg IlY0U0kiKV0pCisKIDs7IE1hcHBpbmcgb2YgdmVjdG9yIG1vZGVzIGJhY2sgdG8gdGhlIHNjYWxh ciBtb2RlcwogKGRlZmluZV9tb2RlX2F0dHIgbW14c2NhbGFybW9kZQogICBbKFYyU0kgIlNJIikg KFYyU0YgIlNGIildKQpAQCAtNTg3LDYgKzU5MSwxNCBAQCAoZGVmaW5lX2luc24gInNzZV9tb3Zu dHEiCiAgICAoc2V0X2F0dHIgInR5cGUiICJtbXhtb3Ysc3NlbW92IikKICAgIChzZXRfYXR0ciAi bW9kZSIgIkRJIildKQogCisoZGVmaW5lX2V4cGFuZCAibW92cV88bW9kZT5fdG9fc3NlIgorICBb KHNldCAobWF0Y2hfb3BlcmFuZDo8bW14ZG91YmxldmVjbW9kZT4gMCAicmVnaXN0ZXJfb3BlcmFu ZCIpCisJKHZlY19jb25jYXQ6PG1teGRvdWJsZXZlY21vZGU+CisJICAobWF0Y2hfb3BlcmFuZDpW MkZJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikKKwkgIChtYXRjaF9kdXAgMikpKV0KKyAgIlRB UkdFVF9TU0UyIgorICAib3BlcmFuZHNbMl0gPSBDT05TVDBfUlRYICg8TU9ERT5tb2RlKTsiKQor CiA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7OzsKIDs7CiA7OyBQYXJhbGxlbCBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5n IHBvaW50IGFyaXRobWV0aWMKQEAgLTYzMywxMDkgKzY0NSw4NCBAQCAoZGVmaW5lX2luc25fYW5k X3NwbGl0ICIqbW14X25hYnN2MnNmMiIKIH0KICAgWyhzZXRfYXR0ciAiaXNhIiAibm9hdngsbm9h dngsYXZ4IildKQogCisoZGVmaW5lX2V4cGFuZCAiPGluc24+djJzZjMiCisgIFsoc2V0IChtYXRj aF9vcGVyYW5kOlYyU0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJKHBsdXNtaW51c211bHQ6VjJT RgorCSAgKG1hdGNoX29wZXJhbmQ6VjJTRiAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIpCisJICAo bWF0Y2hfb3BlcmFuZDpWMlNGIDIgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikpKV0KKyAgIlRBUkdF VF9NTVhfV0lUSF9TU0UiCit7CisgIHJ0eCBvcDIgPSBnZW5fcmVnX3J0eCAoVjRTRm1vZGUpOwor ICBydHggb3AxID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsKKyAgcnR4IG9wMCA9IGdlbl9yZWdf cnR4IChWNFNGbW9kZSk7CisKKyAgZW1pdF9pbnNuIChnZW5fbW92cV92MnNmX3RvX3NzZSAob3Ay LCBvcGVyYW5kc1syXSkpOworICBlbWl0X2luc24gKGdlbl9tb3ZxX3Yyc2ZfdG9fc3NlIChvcDEs IG9wZXJhbmRzWzFdKSk7CisKKyAgZW1pdF9pbnNuIChnZW5fPGluc24+djRzZjMgKG9wMCwgb3Ax LCBvcDIpKTsKKworICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIGxvd3BhcnRfc3VicmVn IChWMlNGbW9kZSwgb3AwLCBWNFNGbW9kZSkpOworICBET05FOworfSkKKwogKGRlZmluZV9leHBh bmQgIm1teF9hZGR2MnNmMyIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rl cl9vcGVyYW5kIikKIAkocGx1czpWMlNGCi0JICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgInJlZ2lz dGVyX21teG1lbV9vcGVyYW5kIikKLQkgIChtYXRjaF9vcGVyYW5kOlYyU0YgMiAicmVnaXN0ZXJf bW14bWVtX29wZXJhbmQiKSkpXQorCSAgKG1hdGNoX29wZXJhbmQ6VjJTRiAxICJub25pbW1lZGlh dGVfb3BlcmFuZCIpCisJICAobWF0Y2hfb3BlcmFuZDpWMlNGIDIgIm5vbmltbWVkaWF0ZV9vcGVy YW5kIikpKV0KICAgIlRBUkdFVF8zRE5PVyIKICAgIml4ODZfZml4dXBfYmluYXJ5X29wZXJhbmRz X25vX2NvcHkgKFBMVVMsIFYyU0Ztb2RlLCBvcGVyYW5kcyk7IikKIAotKGRlZmluZV9leHBhbmQg ImFkZHYyc2YzIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAgInJlZ2lzdGVyX29wZXJh bmQiKQotCShwbHVzOlYyU0YKLQkgIChtYXRjaF9vcGVyYW5kOlYyU0YgMSAicmVnaXN0ZXJfb3Bl cmFuZCIpCi0JICAobWF0Y2hfb3BlcmFuZDpWMlNGIDIgInJlZ2lzdGVyX29wZXJhbmQiKSkpXQot ICAiVEFSR0VUX01NWF9XSVRIX1NTRSIpCi0KIChkZWZpbmVfaW5zbiAiKm1teF9hZGR2MnNmMyIK LSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXkseCx2 IikKLQkocGx1czpWMlNGCi0JICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgInJlZ2lzdGVyX21teG1l bV9vcGVyYW5kIiAiJTAsMCx2IikKLQkgIChtYXRjaF9vcGVyYW5kOlYyU0YgMiAicmVnaXN0ZXJf bW14bWVtX29wZXJhbmQiICJ5bSx4LHYiKSkpXQotICAiKFRBUkdFVF8zRE5PVyB8fCBUQVJHRVRf TU1YX1dJVEhfU1NFKQotICAgJiYgaXg4Nl9iaW5hcnlfb3BlcmF0b3Jfb2sgKFBMVVMsIFYyU0Zt b2RlLCBvcGVyYW5kcykiCi0gICJACi0gICBwZmFkZFx0eyUyLCAlMHwlMCwgJTJ9Ci0gICBhZGRw c1x0eyUyLCAlMHwlMCwgJTJ9Ci0gICB2YWRkcHNcdHslMiwgJTEsICUwfCUwLCAlMSwgJTJ9Igot ICBbKHNldF9hdHRyICJpc2EiICIqLHNzZTJfbm9hdngsYXZ4IikKLSAgIChzZXRfYXR0ciAibW14 X2lzYSIgIm5hdGl2ZSwqLCoiKQotICAgKHNldF9hdHRyICJ0eXBlIiAibW14YWRkLHNzZWFkZCxz c2VhZGQiKQotICAgKHNldF9hdHRyICJwcmVmaXhfZXh0cmEiICIxLCosKiIpCi0gICAoc2V0X2F0 dHIgInByZWZpeCIgIiosb3JpZyx2ZXgiKQotICAgKHNldF9hdHRyICJtb2RlIiAiVjJTRixWNFNG LFY0U0YiKV0pCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyU0YgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgIj15IikKKwkocGx1czpWMlNGIChtYXRjaF9vcGVyYW5kOlYyU0YgMSAibm9uaW1tZWRpYXRl X29wZXJhbmQiICIlMCIpCisJCSAgIChtYXRjaF9vcGVyYW5kOlYyU0YgMiAibm9uaW1tZWRpYXRl X29wZXJhbmQiICJ5bSIpKSldCisgICJUQVJHRVRfM0ROT1cgJiYgaXg4Nl9iaW5hcnlfb3BlcmF0 b3Jfb2sgKFBMVVMsIFYyU0Ztb2RlLCBvcGVyYW5kcykiCisgICJwZmFkZFx0eyUyLCAlMHwlMCwg JTJ9IgorICBbKHNldF9hdHRyICJ0eXBlIiAibW14YWRkIikKKyAgIChzZXRfYXR0ciAicHJlZml4 X2V4dHJhIiAiMSIpCisgICAoc2V0X2F0dHIgIm1vZGUiICJWMlNGIildKQogCiAoZGVmaW5lX2V4 cGFuZCAibW14X3N1YnYyc2YzIgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAgInJlZ2lz dGVyX29wZXJhbmQiKQogICAgICAgICAobWludXM6VjJTRiAobWF0Y2hfb3BlcmFuZDpWMlNGIDEg InJlZ2lzdGVyX29wZXJhbmQiKQotCQkgICAgKG1hdGNoX29wZXJhbmQ6VjJTRiAyICJyZWdpc3Rl cl9tbXhtZW1fb3BlcmFuZCIpKSldCisJCSAgICAobWF0Y2hfb3BlcmFuZDpWMlNGIDIgIm5vbmlt bWVkaWF0ZV9vcGVyYW5kIikpKV0KICAgIlRBUkdFVF8zRE5PVyIpCiAKIChkZWZpbmVfZXhwYW5k ICJtbXhfc3VicnYyc2YzIgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAgInJlZ2lzdGVy X29wZXJhbmQiKQogICAgICAgICAobWludXM6VjJTRiAobWF0Y2hfb3BlcmFuZDpWMlNGIDIgInJl Z2lzdGVyX29wZXJhbmQiKQotCQkgICAgKG1hdGNoX29wZXJhbmQ6VjJTRiAxICJyZWdpc3Rlcl9t bXhtZW1fb3BlcmFuZCIpKSldCisJCSAgICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgIm5vbmltbWVk aWF0ZV9vcGVyYW5kIikpKV0KICAgIlRBUkdFVF8zRE5PVyIpCiAKLShkZWZpbmVfZXhwYW5kICJz dWJ2MnNmMyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rlcl9vcGVyYW5k IikKLQkobWludXM6VjJTRgotCSAgKG1hdGNoX29wZXJhbmQ6VjJTRiAxICJyZWdpc3Rlcl9vcGVy YW5kIikKLQkgIChtYXRjaF9vcGVyYW5kOlYyU0YgMiAicmVnaXN0ZXJfb3BlcmFuZCIpKSldCi0g ICJUQVJHRVRfTU1YX1dJVEhfU1NFIikKLQogKGRlZmluZV9pbnNuICIqbW14X3N1YnYyc2YzIgot ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9eSx5LHgs diIpCi0gICAgICAgIChtaW51czpWMlNGCi0JICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgInJlZ2lz dGVyX21teG1lbV9vcGVyYW5kIiAiMCx5bSwwLHYiKQotCSAgKG1hdGNoX29wZXJhbmQ6VjJTRiAy ICJyZWdpc3Rlcl9tbXhtZW1fb3BlcmFuZCIgInltLDAseCx2IikpKV0KLSAgIihUQVJHRVRfM0RO T1cgfHwgVEFSR0VUX01NWF9XSVRIX1NTRSkKLSAgICYmICEoTUVNX1AgKG9wZXJhbmRzWzBdKSAm JiBNRU1fUCAob3BlcmFuZHNbMV0pKSIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJTRiAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPXkseSIpCisgICAgICAgIChtaW51czpWMlNGIChtYXRjaF9vcGVy YW5kOlYyU0YgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIwLHltIikKKwkJICAgIChtYXRjaF9v cGVyYW5kOlYyU0YgMiAibm9uaW1tZWRpYXRlX29wZXJhbmQiICJ5bSwwIikpKV0KKyAgIlRBUkdF VF8zRE5PVyAmJiAhKE1FTV9QIChvcGVyYW5kc1swXSkgJiYgTUVNX1AgKG9wZXJhbmRzWzFdKSki CiAgICJACiAgICBwZnN1Ylx0eyUyLCAlMHwlMCwgJTJ9Ci0gICBwZnN1YnJcdHslMSwgJTB8JTAs ICUxfQotICAgc3VicHNcdHslMiwgJTB8JTAsICUyfQotICAgdnN1YnBzXHR7JTIsICUxLCAlMHwl MCwgJTEsICUyfSIKLSAgWyhzZXRfYXR0ciAiaXNhIiAiKiwqLHNzZTJfbm9hdngsYXZ4IikKLSAg IChzZXRfYXR0ciAibW14X2lzYSIgIm5hdGl2ZSxuYXRpdmUsKiwqIikKLSAgIChzZXRfYXR0ciAi dHlwZSIgIm1teGFkZCxtbXhhZGQsc3NlYWRkLHNzZWFkZCIpCi0gICAoc2V0X2F0dHIgInByZWZp eF9leHRyYSIgIjEsMSwqLCoiKQotICAgKHNldF9hdHRyICJwcmVmaXgiICIqLCosb3JpZyx2ZXgi KQotICAgKHNldF9hdHRyICJtb2RlIiAiVjJTRixWMlNGLFY0U0YsVjRTRiIpXSkKKyAgIHBmc3Vi clx0eyUxLCAlMHwlMCwgJTF9IgorICBbKHNldF9hdHRyICJ0eXBlIiAibW14YWRkIikKKyAgIChz ZXRfYXR0ciAicHJlZml4X2V4dHJhIiAiMSIpCisgICAoc2V0X2F0dHIgIm1vZGUiICJWMlNGIild KQogCiAoZGVmaW5lX2V4cGFuZCAibW14X211bHYyc2YzIgogICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpWMlNGIDAgInJlZ2lzdGVyX29wZXJhbmQiKQotCShtdWx0OlYyU0YgKG1hdGNoX29wZXJhbmQ6 VjJTRiAxICJyZWdpc3Rlcl9tbXhtZW1fb3BlcmFuZCIpCi0JCSAgIChtYXRjaF9vcGVyYW5kOlYy U0YgMiAicmVnaXN0ZXJfbW14bWVtX29wZXJhbmQiKSkpXQorCShtdWx0OlYyU0YgKG1hdGNoX29w ZXJhbmQ6VjJTRiAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIpCisJCSAgIChtYXRjaF9vcGVyYW5k OlYyU0YgMiAibm9uaW1tZWRpYXRlX29wZXJhbmQiKSkpXQogICAiVEFSR0VUXzNETk9XIgogICAi aXg4Nl9maXh1cF9iaW5hcnlfb3BlcmFuZHNfbm9fY29weSAoTVVMVCwgVjJTRm1vZGUsIG9wZXJh bmRzKTsiKQogCi0oZGVmaW5lX2V4cGFuZCAibXVsdjJzZjMiCi0gIFsoc2V0IChtYXRjaF9vcGVy YW5kOlYyU0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCi0JKG11bHQ6VjJTRgotCSAgKG1hdGNoX29w ZXJhbmQ6VjJTRiAxICJyZWdpc3Rlcl9vcGVyYW5kIikKLQkgIChtYXRjaF9vcGVyYW5kOlYyU0Yg MiAicmVnaXN0ZXJfb3BlcmFuZCIpKSldCi0gICJUQVJHRVRfTU1YX1dJVEhfU1NFIikKLQogKGRl ZmluZV9pbnNuICIqbW14X211bHYyc2YzIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAg InJlZ2lzdGVyX29wZXJhbmQiICI9eSx4LHYiKQotCShtdWx0OlYyU0YKLQkgIChtYXRjaF9vcGVy YW5kOlYyU0YgMSAicmVnaXN0ZXJfbW14bWVtX29wZXJhbmQiICIlMCwwLHYiKQotCSAgKG1hdGNo X29wZXJhbmQ6VjJTRiAyICJyZWdpc3Rlcl9tbXhtZW1fb3BlcmFuZCIgInltLHgsdiIpKSldCi0g ICIoVEFSR0VUXzNETk9XIHx8IFRBUkdFVF9NTVhfV0lUSF9TU0UpCi0gICAmJiBpeDg2X2JpbmFy eV9vcGVyYXRvcl9vayAoTVVMVCwgVjJTRm1vZGUsIG9wZXJhbmRzKSIKLSAgIkAKLSAgIHBmbXVs XHR7JTIsICUwfCUwLCAlMn0KLSAgIG11bHBzXHR7JTIsICUwfCUwLCAlMn0KLSAgIHZtdWxwc1x0 eyUyLCAlMSwgJTB8JTAsICUxLCAlMn0iCi0gIFsoc2V0X2F0dHIgImlzYSIgIiosc3NlMl9ub2F2 eCxhdngiKQotICAgKHNldF9hdHRyICJtbXhfaXNhIiAibmF0aXZlLCosKiIpCi0gICAoc2V0X2F0 dHIgInR5cGUiICJtbXhtdWwsc3NlbXVsLHNzZW11bCIpCi0gICAoc2V0X2F0dHIgImJ0dmVyMl9k ZWNvZGUiICIqLGRpcmVjdCxkb3VibGUiKQotICAgKHNldF9hdHRyICJwcmVmaXhfZXh0cmEiICIx LCosKiIpCi0gICAoc2V0X2F0dHIgInByZWZpeCIgIiosb3JpZyx2ZXgiKQotICAgKHNldF9hdHRy ICJtb2RlIiAiVjJTRixWNFNGLFY0U0YiKV0pCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyU0Yg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj15IikKKwkobXVsdDpWMlNGIChtYXRjaF9vcGVyYW5kOlYy U0YgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIlMCIpCisJCSAgIChtYXRjaF9vcGVyYW5kOlYy U0YgMiAibm9uaW1tZWRpYXRlX29wZXJhbmQiICJ5bSIpKSldCisgICJUQVJHRVRfM0ROT1cgJiYg aXg4Nl9iaW5hcnlfb3BlcmF0b3Jfb2sgKE1VTFQsIFYyU0Ztb2RlLCBvcGVyYW5kcykiCisgICJw Zm11bFx0eyUyLCAlMHwlMCwgJTJ9IgorICBbKHNldF9hdHRyICJ0eXBlIiAibW14bXVsIikKKyAg IChzZXRfYXR0ciAicHJlZml4X2V4dHJhIiAiMSIpCisgICAoc2V0X2F0dHIgIm1vZGUiICJWMlNG IildKQogCiAoZGVmaW5lX2V4cGFuZCAiZGl2djJzZjMiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5k OlYyU0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCkBAIC03NDMsMTcgKzczMCwzNiBAQCAoZGVmaW5l X2V4cGFuZCAiZGl2djJzZjMiCiAJCSAgKG1hdGNoX29wZXJhbmQ6VjJTRiAyICJyZWdpc3Rlcl9v cGVyYW5kIikpKV0KICAgIlRBUkdFVF9NTVhfV0lUSF9TU0UiCiB7Ci0gIHJ0eCBvcDEgPSBsb3dw YXJ0X3N1YnJlZyAoVjRTRm1vZGUsIGZvcmNlX3JlZyAoVjJTRm1vZGUsIG9wZXJhbmRzWzFdKSwK LQkJCSAgICBWMlNGbW9kZSk7Ci0gIHJ0eCBvcDIgPSBnZW5fcnR4X1ZFQ19DT05DQVQgKFY0U0Zt b2RlLCBvcGVyYW5kc1syXSwKKyAgcnR4IG9wMiA9IGdlbl9yZWdfcnR4IChWNFNGbW9kZSk7Cisg IHJ0eCBvcDEgPSBnZW5fcmVnX3J0eCAoVjRTRm1vZGUpOworICBydHggb3AwID0gZ2VuX3JlZ19y dHggKFY0U0Ztb2RlKTsKKworICBydHggdG1wID0gZ2VuX3J0eF9WRUNfQ09OQ0FUIChWNFNGbW9k ZSwgb3BlcmFuZHNbMl0sCiAJCQkJZm9yY2VfcmVnIChWMlNGbW9kZSwgQ09OU1QxX1JUWCAoVjJT Rm1vZGUpKSk7Ci0gIHJ0eCB0bXAgPSBnZW5fcmVnX3J0eCAoVjRTRm1vZGUpOworICBlbWl0X2lu c24gKGdlbl9ydHhfU0VUIChvcDIsIHRtcCkpOworICBlbWl0X2luc24gKGdlbl9tb3ZxX3Yyc2Zf dG9fc3NlIChvcDEsIG9wZXJhbmRzWzFdKSk7CisKKyAgZW1pdF9pbnNuIChnZW5fZGl2djRzZjMg KG9wMCwgb3AxLCBvcDIpKTsKIAotICBlbWl0X2luc24gKGdlbl9ydHhfU0VUICh0bXAsIG9wMikp OworICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIGxvd3BhcnRfc3VicmVnIChWMlNGbW9k ZSwgb3AwLCBWNFNGbW9kZSkpOworICBET05FOworfSkKIAorKGRlZmluZV9leHBhbmQgIjxjb2Rl PnYyc2YzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAgInJlZ2lzdGVyX29wZXJhbmQi KQorICAgICAgICAoc21heG1pbjpWMlNGCisJICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgInJlZ2lz dGVyX29wZXJhbmQiKQorCSAgKG1hdGNoX29wZXJhbmQ6VjJTRiAyICJyZWdpc3Rlcl9vcGVyYW5k IikpKV0KKyAgIlRBUkdFVF9NTVhfV0lUSF9TU0UiCit7CisgIHJ0eCBvcDIgPSBnZW5fcmVnX3J0 eCAoVjRTRm1vZGUpOworICBydHggb3AxID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsKICAgcnR4 IG9wMCA9IGdlbl9yZWdfcnR4IChWNFNGbW9kZSk7CiAKLSAgZW1pdF9pbnNuIChnZW5fZGl2djRz ZjMgKG9wMCwgb3AxLCB0bXApKTsKKyAgZW1pdF9pbnNuIChnZW5fbW92cV92MnNmX3RvX3NzZSAo b3AyLCBvcGVyYW5kc1syXSkpOworICBlbWl0X2luc24gKGdlbl9tb3ZxX3Yyc2ZfdG9fc3NlIChv cDEsIG9wZXJhbmRzWzFdKSk7CisKKyAgZW1pdF9pbnNuIChnZW5fPGNvZGU+djRzZjMgKG9wMCwg b3AxLCBvcDIpKTsKIAogICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIGxvd3BhcnRfc3Vi cmVnIChWMlNGbW9kZSwgb3AwLCBWNFNGbW9kZSkpOwogICBET05FOwpAQCAtNzYyLDggKzc2OCw4 IEBAIChkZWZpbmVfZXhwYW5kICJkaXZ2MnNmMyIKIChkZWZpbmVfZXhwYW5kICJtbXhfPGNvZGU+ djJzZjMiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyU0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIp CiAgICAgICAgIChzbWF4bWluOlYyU0YKLQkgIChtYXRjaF9vcGVyYW5kOlYyU0YgMSAicmVnaXN0 ZXJfbW14bWVtX29wZXJhbmQiKQotCSAgKG1hdGNoX29wZXJhbmQ6VjJTRiAyICJyZWdpc3Rlcl9t bXhtZW1fb3BlcmFuZCIpKSldCisJICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgIm5vbmltbWVkaWF0 ZV9vcGVyYW5kIikKKwkgIChtYXRjaF9vcGVyYW5kOlYyU0YgMiAibm9uaW1tZWRpYXRlX29wZXJh bmQiKSkpXQogICAiVEFSR0VUXzNETk9XIgogewogICBpZiAoIWZsYWdfZmluaXRlX21hdGhfb25s eSB8fCBmbGFnX3NpZ25lZF96ZXJvcykKQEAgLTc3Nyw0NCArNzgzLDIxIEBAIChkZWZpbmVfZXhw YW5kICJtbXhfPGNvZGU+djJzZjMiCiAgICAgaXg4Nl9maXh1cF9iaW5hcnlfb3BlcmFuZHNfbm9f Y29weSAoPENPREU+LCBWMlNGbW9kZSwgb3BlcmFuZHMpOwogfSkKIAotKGRlZmluZV9leHBhbmQg Ijxjb2RlPnYyc2YzIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAgInJlZ2lzdGVyX29w ZXJhbmQiKQotICAgICAgICAoc21heG1pbjpWMlNGCi0JICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEg InJlZ2lzdGVyX29wZXJhbmQiKQotCSAgKG1hdGNoX29wZXJhbmQ6VjJTRiAyICJyZWdpc3Rlcl9v cGVyYW5kIikpKV0KLSAgIlRBUkdFVF9NTVhfV0lUSF9TU0UiCi17Ci0gIGlmICghZmxhZ19maW5p dGVfbWF0aF9vbmx5IHx8IGZsYWdfc2lnbmVkX3plcm9zKQotICAgIHsKLSAgICAgIGVtaXRfaW5z biAoZ2VuX21teF9pZWVlXzxtYXhtaW5fZmxvYXQ+djJzZjMKLQkJIChvcGVyYW5kc1swXSwgb3Bl cmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7Ci0gICAgICBET05FOwotICAgIH0KLX0pCi0KIDs7IFRo ZXNlIHZlcnNpb25zIG9mIHRoZSBtaW4vbWF4IHBhdHRlcm5zIGFyZSBpbnRlbnRpb25hbGx5IGln bm9yYW50IG9mCiA7OyB0aGVpciBiZWhhdmlvciB3cnQgLTAuMCBhbmQgTmFOICh2aWEgdGhlIGNv bW11dGF0aXZlIG9wZXJhbmQgbWFyaykuCiA7OyBTaW5jZSBib3RoIHRoZSB0cmVlLWxldmVsIE1B WF9FWFBSIGFuZCB0aGUgcnRsLWxldmVsIFNNQVggb3BlcmF0b3IKIDs7IGFyZSB1bmRlZmluZWQg aW4gdGhpcyBjb25kaXRpb24sIHdlJ3JlIGNlcnRhaW4gdGhpcyBpcyBjb3JyZWN0LgogCiAoZGVm aW5lX2luc24gIiptbXhfPGNvZGU+djJzZjMiCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyU0Yg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj15LHgsdiIpCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYy U0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj15IikKICAgICAgICAgKHNtYXhtaW46VjJTRgotCSAg KG1hdGNoX29wZXJhbmQ6VjJTRiAxICJyZWdpc3Rlcl9tbXhtZW1fb3BlcmFuZCIgIiUwLDAsdiIp Ci0JICAobWF0Y2hfb3BlcmFuZDpWMlNGIDIgInJlZ2lzdGVyX21teG1lbV9vcGVyYW5kIiAieW0s eCx2IikpKV0KLSAgIihUQVJHRVRfM0ROT1cgfHwgVEFSR0VUX01NWF9XSVRIX1NTRSkKLSAgICYm IGl4ODZfYmluYXJ5X29wZXJhdG9yX29rICg8Q09ERT4sIFYyU0Ztb2RlLCBvcGVyYW5kcykiCi0g ICJACi0gICBwZjxtYXhtaW5fZmxvYXQ+XHR7JTIsICUwfCUwLCAlMn0KLSAgIDxtYXhtaW5fZmxv YXQ+cHNcdHslMiwgJTB8JTAsICUyfQotICAgdjxtYXhtaW5fZmxvYXQ+cHNcdHslMiwgJTEsICUw fCUwLCAlMSwgJTJ9IgotICBbKHNldF9hdHRyICJpc2EiICIqLHNzZTJfbm9hdngsYXZ4IikKLSAg IChzZXRfYXR0ciAibW14X2lzYSIgIm5hdGl2ZSwqLCoiKQotICAgKHNldF9hdHRyICJ0eXBlIiAi bW14YWRkLHNzZWFkZCxzc2VhZGQiKQotICAgKHNldF9hdHRyICJidHZlcjJfc3NlX2F0dHIiICIq LG1heG1pbixtYXhtaW4iKQotICAgKHNldF9hdHRyICJwcmVmaXhfZXh0cmEiICIxLCosKiIpCi0g ICAoc2V0X2F0dHIgInByZWZpeCIgIiosb3JpZyx2ZXgiKQotICAgKHNldF9hdHRyICJtb2RlIiAi VjJTRixWNFNGLFY0U0YiKV0pCisJICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgIm5vbmltbWVkaWF0 ZV9vcGVyYW5kIiAiJTAiKQorCSAgKG1hdGNoX29wZXJhbmQ6VjJTRiAyICJub25pbW1lZGlhdGVf b3BlcmFuZCIgInltIikpKV0KKyAgIlRBUkdFVF8zRE5PVyAmJiBpeDg2X2JpbmFyeV9vcGVyYXRv cl9vayAoPENPREU+LCBWMlNGbW9kZSwgb3BlcmFuZHMpIgorICAicGY8bWF4bWluX2Zsb2F0Plx0 eyUyLCAlMHwlMCwgJTJ9IgorICBbKHNldF9hdHRyICJ0eXBlIiAibW14YWRkIikKKyAgIChzZXRf YXR0ciAicHJlZml4X2V4dHJhIiAiMSIpCisgICAoc2V0X2F0dHIgIm1vZGUiICJWMlNGIildKQog CiA7OyBUaGVzZSB2ZXJzaW9ucyBvZiB0aGUgbWluL21heCBwYXR0ZXJucyBpbXBsZW1lbnQgZXhh Y3RseSB0aGUgb3BlcmF0aW9ucwogOzsgICBtaW4gPSAob3AxIDwgb3AyID8gb3AxIDogb3AyKQpA QCAtODIzLDIzICs4MDYsMTYgQEAgKGRlZmluZV9pbnNuICIqbW14Xzxjb2RlPnYyc2YzIgogOzsg cHJlc2VuY2Ugb2YgLTAuMCBhbmQgTmFOLgogCiAoZGVmaW5lX2luc24gIm1teF9pZWVlXzxpZWVl X21heG1pbj52MnNmMyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiPXkseCx2IikKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPXkiKQogICAgICAgICAodW5zcGVjOlYyU0YKLQkgIFsobWF0Y2hfb3BlcmFu ZDpWMlNGIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwLDAsdiIpCi0JICAgKG1hdGNoX29wZXJhbmQ6 VjJTRiAyICJyZWdpc3Rlcl9tbXhtZW1fb3BlcmFuZCIgInltLHgsdiIpXQorCSAgWyhtYXRjaF9v cGVyYW5kOlYyU0YgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKQorCSAgIChtYXRjaF9vcGVyYW5k OlYyU0YgMiAibm9uaW1tZWRpYXRlX29wZXJhbmQiICJ5bSIpXQogCSAgSUVFRV9NQVhNSU4pKV0K LSAgIlRBUkdFVF8zRE5PVyB8fCBUQVJHRVRfTU1YX1dJVEhfU1NFIgotICAiQAotICAgcGY8aWVl ZV9tYXhtaW4+XHR7JTIsICUwfCUwLCAlMn0KLSAgIDxpZWVlX21heG1pbj5wc1x0eyUyLCAlMHwl MCwgJTJ9Ci0gICB2PGllZWVfbWF4bWluPnBzXHR7JTIsICUxLCAlMHwlMCwgJTEsICUyfSIKLSAg WyhzZXRfYXR0ciAiaXNhIiAiKixzc2UyX25vYXZ4LGF2eCIpCi0gICAoc2V0X2F0dHIgIm1teF9p c2EiICJuYXRpdmUsKiwqIikKLSAgIChzZXRfYXR0ciAidHlwZSIgIm1teGFkZCxzc2VhZGQsc3Nl YWRkIikKLSAgIChzZXRfYXR0ciAiYnR2ZXIyX3NzZV9hdHRyIiAiKixtYXhtaW4sbWF4bWluIikK LSAgIChzZXRfYXR0ciAicHJlZml4X2V4dHJhIiAiMSwqLCoiKQotICAgKHNldF9hdHRyICJwcmVm aXgiICIqLG9yaWcsdmV4IikKLSAgIChzZXRfYXR0ciAibW9kZSIgIlYyU0YsVjRTRixWNFNGIild KQorICAiVEFSR0VUXzNETk9XIgorICAicGY8aWVlZV9tYXhtaW4+XHR7JTIsICUwfCUwLCAlMn0i CisgIFsoc2V0X2F0dHIgInR5cGUiICJtbXhhZGQiKQorICAgKHNldF9hdHRyICJwcmVmaXhfZXh0 cmEiICIxIikKKyAgIChzZXRfYXR0ciAibW9kZSIgIlYyU0YiKV0pCiAKIChkZWZpbmVfaW5zbiAi bW14X3JjcHYyc2YyIgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAgInJlZ2lzdGVyX29w ZXJhbmQiICI9eSIpCkBAIC04NzMsMTkgKzg0OSwyMSBAQCAoZGVmaW5lX2luc24gIm1teF9yY3Bp dDJ2MnNmMyIKICAgIChzZXRfYXR0ciAicHJlZml4X2V4dHJhIiAiMSIpCiAgICAoc2V0X2F0dHIg Im1vZGUiICJWMlNGIildKQogCi0oZGVmaW5lX2luc24gInNxcnR2MnNmMiIKLSAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXgsdiIpCi0JKHNxcnQ6VjJT RiAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwLHYiKSkpXQorKGRl ZmluZV9leHBhbmQgInNxcnR2MnNmMiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJTRiAwICJy ZWdpc3Rlcl9vcGVyYW5kIikKKwkoc3FydDpWMlNGIChtYXRjaF9vcGVyYW5kOlYyU0YgMSAibm9u aW1tZWRpYXRlX29wZXJhbmQiKSkpXQogICAiVEFSR0VUX01NWF9XSVRIX1NTRSIKLSAgIkAKLSAg IHNxcnRwc1x0eyUxLCAlMHwlMCwgJTF9Ci0gICB2c3FydHBzXHR7JTEsICUwfCUwLCAlMX0iCi0g IFsoc2V0X2F0dHIgImlzYSIgIm5vYXZ4LGF2eCIpCi0gICAoc2V0X2F0dHIgInR5cGUiICJzc2Ui KQotICAgKHNldF9hdHRyICJhdG9tX3NzZV9hdHRyIiAic3FydCIpCi0gICAoc2V0X2F0dHIgImJ0 dmVyMl9zc2VfYXR0ciIgInNxcnQiKQotICAgKHNldF9hdHRyICJwcmVmaXgiICJvcmlnLHZleCIp Ci0gICAoc2V0X2F0dHIgIm1vZGUiICJWNFNGIildKQoreworICBydHggb3AxID0gZ2VuX3JlZ19y dHggKFY0U0Ztb2RlKTsKKyAgcnR4IG9wMCA9IGdlbl9yZWdfcnR4IChWNFNGbW9kZSk7CisKKyAg ZW1pdF9pbnNuIChnZW5fbW92cV92MnNmX3RvX3NzZSAob3AxLCBvcGVyYW5kc1sxXSkpOworCisg IGVtaXRfaW5zbiAoZ2VuX3NxcnR2NHNmMiAob3AwLCBvcDEpKTsKKworICBlbWl0X21vdmVfaW5z biAob3BlcmFuZHNbMF0sIGxvd3BhcnRfc3VicmVnIChWMlNGbW9kZSwgb3AwLCBWNFNGbW9kZSkp OworICBET05FOworfSkKIAogKGRlZmluZV9pbnNuICJtbXhfcnNxcnR2MnNmMiIKICAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXkiKQpAQCAtOTQ2LDI0 ICs5MjQsMzIgQEAgKGRlZmluZV9pbnNuICIqbW14X2hhZGR2MnNmMyIKICAgIChzZXRfYXR0ciAi cHJlZml4X2V4dHJhIiAiMSIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICJWMlNGIildKQogCi0oZGVm aW5lX2luc24gIiptbXhfaGFkZHYyc2YzX2xvdyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0Yg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14LHgiKQorKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKm1t eF9oYWRkdjJzZjNfbG93IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAwICJyZWdpc3Rlcl9v cGVyYW5kIikKIAkocGx1czpTRgogCSAgKHZlY19zZWxlY3Q6U0YKLQkgICAgKG1hdGNoX29wZXJh bmQ6VjJTRiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCx4IikKKwkgICAgKG1hdGNoX29wZXJhbmQ6 VjJTRiAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIpCiAJICAgIChwYXJhbGxlbCBbKG1hdGNoX29w ZXJhbmQ6U0kgMiAiY29uc3RfMF90b18xX29wZXJhbmQiKV0pKQogCSAgKHZlY19zZWxlY3Q6U0YK IAkgICAgKG1hdGNoX2R1cCAxKQogCSAgICAocGFyYWxsZWwgWyhtYXRjaF9vcGVyYW5kOlNJIDMg ImNvbnN0XzBfdG9fMV9vcGVyYW5kIildKSkpKV0KICAgIlRBUkdFVF9TU0UzICYmIFRBUkdFVF9N TVhfV0lUSF9TU0UKLSAgICYmIElOVFZBTCAob3BlcmFuZHNbMl0pICE9IElOVFZBTCAob3BlcmFu ZHNbM10pIgotICAiQAotICAgaGFkZHBzXHR7JTAsICUwfCUwLCAlMH0KLSAgIHZoYWRkcHNcdHsl MSwgJTEsICUwfCUwLCAlMSwgJTF9IgotICBbKHNldF9hdHRyICJpc2EiICJub2F2eCxhdngiKQot ICAgKHNldF9hdHRyICJ0eXBlIiAic3NlYWRkMSIpCi0gICAoc2V0X2F0dHIgInByZWZpeCIgIm9y aWcsdmV4IikKLSAgIChzZXRfYXR0ciAibW9kZSIgIlY0U0YiKV0pCisgICAmJiBJTlRWQUwgKG9w ZXJhbmRzWzJdKSAhPSBJTlRWQUwgKG9wZXJhbmRzWzNdKQorICAgJiYgaXg4Nl9wcmVfcmVsb2Fk X3NwbGl0ICgpIgorICAiIyIKKyAgIiYmIDEiCisgIFsoY29uc3RfaW50IDApXQoreworICBydHgg b3AxID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsKKyAgcnR4IG9wMCA9IGdlbl9yZWdfcnR4IChW NFNGbW9kZSk7CisKKyAgZW1pdF9pbnNuIChnZW5fbW92cV92MnNmX3RvX3NzZSAob3AxLCBvcGVy YW5kc1sxXSkpOworCisgIGVtaXRfaW5zbiAoZ2VuX3NzZTNfaGFkZHY0c2YzIChvcDAsIG9wMSwg b3AxKSk7CisKKyAgZW1pdF9tb3ZlX2luc24gKG9wZXJhbmRzWzBdLCBsb3dwYXJ0X3N1YnJlZyAo U0Ztb2RlLCBvcDAsIFY0U0Ztb2RlKSk7CisgIERPTkU7Cit9KQogCiAoZGVmaW5lX2luc24gIm1t eF9oc3VidjJzZjMiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyU0YgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIj15IikKQEAgLTk4NCwyMyArOTcwLDMxIEBAIChkZWZpbmVfaW5zbiAibW14X2hzdWJ2 MnNmMyIKICAgIChzZXRfYXR0ciAicHJlZml4X2V4dHJhIiAiMSIpCiAgICAoc2V0X2F0dHIgIm1v ZGUiICJWMlNGIildKQogCi0oZGVmaW5lX2luc24gIiptbXhfaHN1YnYyc2YzX2xvdyIKLSAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6U0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14LHgiKQorKGRlZmlu ZV9pbnNuX2FuZF9zcGxpdCAiKm1teF9oc3VidjJzZjNfbG93IgorICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKIAkobWludXM6U0YKIAkgICh2ZWNfc2VsZWN0 OlNGCi0JICAgIChtYXRjaF9vcGVyYW5kOlYyU0YgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAseCIp CisJICAgIChtYXRjaF9vcGVyYW5kOlYyU0YgMSAicmVnaXN0ZXJfb3BlcmFuZCIpCiAJICAgIChw YXJhbGxlbCBbKGNvbnN0X2ludCAwKV0pKQogCSAgKHZlY19zZWxlY3Q6U0YKIAkgICAgKG1hdGNo X2R1cCAxKQogCSAgICAocGFyYWxsZWwgWyhjb25zdF9pbnQgMSldKSkpKV0KLSAgIlRBUkdFVF9T U0UzICYmIFRBUkdFVF9NTVhfV0lUSF9TU0UiCi0gICJACi0gICBoc3VicHNcdHslMCwgJTB8JTAs ICUwfQotICAgdmhzdWJwc1x0eyUxLCAlMSwgJTB8JTAsICUxLCAlMX0iCi0gIFsoc2V0X2F0dHIg ImlzYSIgIm5vYXZ4LGF2eCIpCi0gICAoc2V0X2F0dHIgInR5cGUiICJzc2VhZGQxIikKLSAgIChz ZXRfYXR0ciAicHJlZml4IiAib3JpZyx2ZXgiKQotICAgKHNldF9hdHRyICJtb2RlIiAiVjRTRiIp XSkKKyAgIlRBUkdFVF9TU0UzICYmIFRBUkdFVF9NTVhfV0lUSF9TU0UKKyAgICYmIGl4ODZfcHJl X3JlbG9hZF9zcGxpdCAoKSIKKyAgIiMiCisgICImJiAxIgorICBbKGNvbnN0X2ludCAwKV0KK3sK KyAgcnR4IG9wMSA9IGdlbl9yZWdfcnR4IChWNFNGbW9kZSk7CisgIHJ0eCBvcDAgPSBnZW5fcmVn X3J0eCAoVjRTRm1vZGUpOworCisgIGVtaXRfaW5zbiAoZ2VuX21vdnFfdjJzZl90b19zc2UgKG9w MSwgb3BlcmFuZHNbMV0pKTsKKworICBlbWl0X2luc24gKGdlbl9zc2UzX2hzdWJ2NHNmMyAob3Aw LCBvcDEsIG9wMSkpOworCisgIGVtaXRfbW92ZV9pbnNuIChvcGVyYW5kc1swXSwgbG93cGFydF9z dWJyZWcgKFNGbW9kZSwgb3AwLCBWNFNGbW9kZSkpOworICBET05FOworfSkKIAogKGRlZmluZV9l eHBhbmQgIm1teF9oYWRkc3VidjJzZjMiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyU0YgMCAi cmVnaXN0ZXJfb3BlcmFuZCIpCkBAIC0xMDM5LDIzICsxMDMzLDI4IEBAIChkZWZpbmVfaW5zbiAi Km1teF9oYWRkc3VidjJzZjMiCiAgICAoc2V0X2F0dHIgInByZWZpeF9leHRyYSIgIjEiKQogICAg KHNldF9hdHRyICJtb2RlIiAiVjJTRiIpXSkKIAotKGRlZmluZV9pbnNuICJ2ZWNfYWRkc3VidjJz ZjMiCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyU0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14 LHgiKQorKGRlZmluZV9leHBhbmQgInZlY19hZGRzdWJ2MnNmMyIKKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6VjJTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKIAkodmVjX21lcmdlOlYyU0YKIAkgICht aW51czpWMlNGCi0JICAgIChtYXRjaF9vcGVyYW5kOlYyU0YgMSAicmVnaXN0ZXJfb3BlcmFuZCIg IjAseCIpCi0JICAgIChtYXRjaF9vcGVyYW5kOlYyU0YgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIngs eCIpKQorCSAgICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikK KwkgICAgKG1hdGNoX29wZXJhbmQ6VjJTRiAyICJub25pbW1lZGlhdGVfb3BlcmFuZCIpKQogCSAg KHBsdXM6VjJTRiAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikpCiAJICAoY29uc3RfaW50IDEp KSldCiAgICJUQVJHRVRfU1NFMyAmJiBUQVJHRVRfTU1YX1dJVEhfU1NFIgotICAiQAotICAgYWRk c3VicHNcdHslMiwgJTB8JTAsICUyfQotICAgdmFkZHN1YnBzXHR7JTIsICUxLCAlMHwlMCwgJTEs ICUyfSIKLSAgWyhzZXRfYXR0ciAiaXNhIiAibm9hdngsYXZ4IikKLSAgIChzZXRfYXR0ciAidHlw ZSIgInNzZWFkZCIpCi0gICAoc2V0X2F0dHIgInByZWZpeCIgIm9yaWcsdmV4IikKLSAgIChzZXRf YXR0ciAicHJlZml4X3JlcCIgIjEsKiIpCi0gICAoc2V0X2F0dHIgIm1vZGUiICJWNFNGIildKQor eworICBydHggb3AyID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsKKyAgcnR4IG9wMSA9IGdlbl9y ZWdfcnR4IChWNFNGbW9kZSk7CisgIHJ0eCBvcDAgPSBnZW5fcmVnX3J0eCAoVjRTRm1vZGUpOwor CisgIGVtaXRfaW5zbiAoZ2VuX21vdnFfdjJzZl90b19zc2UgKG9wMiwgb3BlcmFuZHNbMl0pKTsK KyAgZW1pdF9pbnNuIChnZW5fbW92cV92MnNmX3RvX3NzZSAob3AxLCBvcGVyYW5kc1sxXSkpOwor CisgIGVtaXRfaW5zbiAoZ2VuX3ZlY19hZGRzdWJ2NHNmMyAob3AwLCBvcDEsIG9wMikpOworCisg IGVtaXRfbW92ZV9pbnNuIChvcGVyYW5kc1swXSwgbG93cGFydF9zdWJyZWcgKFYyU0Ztb2RlLCBv cDAsIFY0U0Ztb2RlKSk7CisgIERPTkU7Cit9KQogCiA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKIDs7CkBAIC0xMTAw LDQ2ICsxMDk5LDI2IEBAIChkZWZpbmVfaW5zbiAibW14X2dldjJzZjMiCiAgICAoc2V0X2F0dHIg InByZWZpeF9leHRyYSIgIjEiKQogICAgKHNldF9hdHRyICJtb2RlIiAiVjJTRiIpXSkKIAotKGRl ZmluZV9pbnNuICIqbW14X21hc2tjbXB2MnNmM19jb21tIgotICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpWMlNGIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9eCx4IikKLQkobWF0Y2hfb3BlcmF0b3I6VjJT RiAzICJzc2VfY29tcGFyaXNvbl9vcGVyYXRvciIKLQkgIFsobWF0Y2hfb3BlcmFuZDpWMlNGIDEg InJlZ2lzdGVyX29wZXJhbmQiICIlMCx4IikKLQkgICAobWF0Y2hfb3BlcmFuZDpWMlNGIDIgInJl Z2lzdGVyX29wZXJhbmQiICJ4LHgiKV0pKV0KLSAgIlRBUkdFVF9NTVhfV0lUSF9TU0UKLSAgICYm IEdFVF9SVFhfQ0xBU1MgKEdFVF9DT0RFIChvcGVyYW5kc1szXSkpID09IFJUWF9DT01NX0NPTVBB UkUiCi0gICJACi0gICBjbXAlRDNwc1x0eyUyLCAlMHwlMCwgJTJ9Ci0gICB2Y21wJUQzcHNcdHsl MiwgJTEsICUwfCUwLCAlMSwgJTJ9IgotICBbKHNldF9hdHRyICJpc2EiICJub2F2eCxhdngiKQot ICAgKHNldF9hdHRyICJ0eXBlIiAic3NlY21wIikKLSAgIChzZXRfYXR0ciAibGVuZ3RoX2ltbWVk aWF0ZSIgIjEiKQotICAgKHNldF9hdHRyICJwcmVmaXgiICJvcmlnLHZleCIpCi0gICAoc2V0X2F0 dHIgIm1vZGUiICJWNFNGIildKQotCi0oZGVmaW5lX2luc24gIiptbXhfbWFza2NtcHYyc2YzIgot ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9eCx4IikK LQkobWF0Y2hfb3BlcmF0b3I6VjJTRiAzICJzc2VfY29tcGFyaXNvbl9vcGVyYXRvciIKLQkgIFso bWF0Y2hfb3BlcmFuZDpWMlNGIDEgInJlZ2lzdGVyX29wZXJhbmQiICIwLHgiKQotCSAgIChtYXRj aF9vcGVyYW5kOlYyU0YgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIngseCIpXSkpXQotICAiVEFSR0VU X01NWF9XSVRIX1NTRSIKLSAgIkAKLSAgIGNtcCVEM3BzXHR7JTIsICUwfCUwLCAlMn0KLSAgIHZj bXAlRDNwc1x0eyUyLCAlMSwgJTB8JTAsICUxLCAlMn0iCi0gIFsoc2V0X2F0dHIgImlzYSIgIm5v YXZ4LGF2eCIpCi0gICAoc2V0X2F0dHIgInR5cGUiICJzc2VjbXAiKQotICAgKHNldF9hdHRyICJs ZW5ndGhfaW1tZWRpYXRlIiAiMSIpCi0gICAoc2V0X2F0dHIgInByZWZpeCIgIm9yaWcsdmV4IikK LSAgIChzZXRfYXR0ciAibW9kZSIgIlY0U0YiKV0pCi0KIChkZWZpbmVfZXhwYW5kICJ2ZWNfY21w djJzZnYyc2kiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyU0kgMCAicmVnaXN0ZXJfb3BlcmFu ZCIpCiAJKG1hdGNoX29wZXJhdG9yOlYyU0kgMSAiIgotCSAgWyhtYXRjaF9vcGVyYW5kOlYyU0Yg MiAicmVnaXN0ZXJfb3BlcmFuZCIpCi0JICAgKG1hdGNoX29wZXJhbmQ6VjJTRiAzICJyZWdpc3Rl cl9vcGVyYW5kIildKSldCisJICBbKG1hdGNoX29wZXJhbmQ6VjJTRiAyICJub25pbW1lZGlhdGVf b3BlcmFuZCIpCisJICAgKG1hdGNoX29wZXJhbmQ6VjJTRiAzICJub25pbW1lZGlhdGVfb3BlcmFu ZCIpXSkpXQogICAiVEFSR0VUX01NWF9XSVRIX1NTRSIKIHsKLSAgYm9vbCBvayA9IGl4ODZfZXhw YW5kX2ZwX3ZlY19jbXAgKG9wZXJhbmRzKTsKKyAgcnR4IG9wc1s0XTsKKyAgb3BzWzNdID0gZ2Vu X3JlZ19ydHggKFY0U0Ztb2RlKTsKKyAgb3BzWzJdID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsK KyAgb3BzWzFdID0gZ2VuX3J0eF9mbXRfZWUgKEdFVF9DT0RFIChvcGVyYW5kc1sxXSksIFY0U0lt b2RlLCBvcHNbMl0sIG9wc1szXSk7CisgIG9wc1swXSA9IGdlbl9yZWdfcnR4IChWNFNJbW9kZSk7 CisKKyAgZW1pdF9pbnNuIChnZW5fbW92cV92MnNmX3RvX3NzZSAob3BzWzNdLCBvcGVyYW5kc1sz XSkpOworICBlbWl0X2luc24gKGdlbl9tb3ZxX3Yyc2ZfdG9fc3NlIChvcHNbMl0sIG9wZXJhbmRz WzJdKSk7CisKKyAgYm9vbCBvayA9IGl4ODZfZXhwYW5kX2ZwX3ZlY19jbXAgKG9wcyk7CiAgIGdj Y19hc3NlcnQgKG9rKTsKKworICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIGxvd3BhcnRf c3VicmVnIChWMlNJbW9kZSwgb3BzWzBdLCBWNFNJbW9kZSkpOwogICBET05FOwogfSkKIApAQCAt MTE0NywxNCArMTEyNiwzMiBAQCAoZGVmaW5lX2V4cGFuZCAidmNvbmQ8bW9kZT52MnNmIgogICBb KHNldCAobWF0Y2hfb3BlcmFuZDpWMkZJIDAgInJlZ2lzdGVyX29wZXJhbmQiKQogCShpZl90aGVu X2Vsc2U6VjJGSQogCSAgKG1hdGNoX29wZXJhdG9yIDMgIiIKLQkgICAgWyhtYXRjaF9vcGVyYW5k OlYyU0YgNCAicmVnaXN0ZXJfb3BlcmFuZCIpCi0JICAgICAobWF0Y2hfb3BlcmFuZDpWMlNGIDUg InJlZ2lzdGVyX29wZXJhbmQiKV0pCi0JICAobWF0Y2hfb3BlcmFuZDpWMkZJIDEpCi0JICAobWF0 Y2hfb3BlcmFuZDpWMkZJIDIpKSldCisJICAgIFsobWF0Y2hfb3BlcmFuZDpWMlNGIDQgIm5vbmlt bWVkaWF0ZV9vcGVyYW5kIikKKwkgICAgIChtYXRjaF9vcGVyYW5kOlYyU0YgNSAibm9uaW1tZWRp YXRlX29wZXJhbmQiKV0pCisJICAobWF0Y2hfb3BlcmFuZDpWMkZJIDEgImdlbmVyYWxfb3BlcmFu ZCIpCisJICAobWF0Y2hfb3BlcmFuZDpWMkZJIDIgImdlbmVyYWxfb3BlcmFuZCIpKSldCiAgICJU QVJHRVRfTU1YX1dJVEhfU1NFIgogewotICBib29sIG9rID0gaXg4Nl9leHBhbmRfZnBfdmNvbmQg KG9wZXJhbmRzKTsKKyAgcnR4IG9wc1s2XTsKKyAgb3BzWzVdID0gZ2VuX3JlZ19ydHggKFY0U0Zt b2RlKTsKKyAgb3BzWzRdID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsKKyAgb3BzWzNdID0gZ2Vu X3J0eF9mbXRfZWUgKEdFVF9DT0RFIChvcGVyYW5kc1szXSksIFZPSURtb2RlLCBvcHNbNF0sIG9w c1s1XSk7CisgIG9wc1syXSA9IGxvd3BhcnRfc3VicmVnICg8bW14ZG91YmxldmVjbW9kZT5tb2Rl LAorCQkJICAgZm9yY2VfcmVnICg8TU9ERT5tb2RlLCBvcGVyYW5kc1syXSksCisJCQkgICA8TU9E RT5tb2RlKTsKKyAgb3BzWzFdID0gbG93cGFydF9zdWJyZWcgKDxtbXhkb3VibGV2ZWNtb2RlPm1v ZGUsCisJCQkgICBmb3JjZV9yZWcgKDxNT0RFPm1vZGUsIG9wZXJhbmRzWzFdKSwKKwkJCSAgIDxN T0RFPm1vZGUpOworICBvcHNbMF0gPSBnZW5fcmVnX3J0eCAoPG1teGRvdWJsZXZlY21vZGU+bW9k ZSk7CisKKyAgZW1pdF9pbnNuIChnZW5fbW92cV92MnNmX3RvX3NzZSAob3BzWzVdLCBvcGVyYW5k c1s1XSkpOworICBlbWl0X2luc24gKGdlbl9tb3ZxX3Yyc2ZfdG9fc3NlIChvcHNbNF0sIG9wZXJh bmRzWzRdKSk7CisKKyAgYm9vbCBvayA9IGl4ODZfZXhwYW5kX2ZwX3Zjb25kIChvcHMpOwogICBn Y2NfYXNzZXJ0IChvayk7CisKKyAgZW1pdF9tb3ZlX2luc24gKG9wZXJhbmRzWzBdLCBsb3dwYXJ0 X3N1YnJlZyAoPE1PREU+bW9kZSwgb3BzWzBdLAorCQkJCQkgICAgICAgPG1teGRvdWJsZXZlY21v ZGU+bW9kZSkpOwogICBET05FOwogfSkKIApAQCAtMTMxNiw3MyArMTMxMywxMDUgQEAgKGRlZmlu ZV9leHBhbmQgInNpZ25iaXR2MnNmMiIKIDs7CiA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKIAotKGRlZmluZV9pbnNu ICJmbWF2MnNmNCIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPXYsdix4IikKKyhkZWZpbmVfZXhwYW5kICJmbWF2MnNmNCIKKyAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKIAkoZm1hOlYyU0YKLQkgIChtYXRj aF9vcGVyYW5kOlYyU0YgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLHYseCIpCi0JICAobWF0Y2hf b3BlcmFuZDpWMlNGIDIgInJlZ2lzdGVyX29wZXJhbmQiICJ2LHYseCIpCi0JICAobWF0Y2hfb3Bl cmFuZDpWMlNGIDMgInJlZ2lzdGVyX29wZXJhbmQiICJ2LDAseCIpKSldCisJICAobWF0Y2hfb3Bl cmFuZDpWMlNGIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikKKwkgIChtYXRjaF9vcGVyYW5kOlYy U0YgMiAibm9uaW1tZWRpYXRlX29wZXJhbmQiKQorCSAgKG1hdGNoX29wZXJhbmQ6VjJTRiAzICJu b25pbW1lZGlhdGVfb3BlcmFuZCIpKSldCiAgICIoVEFSR0VUX0ZNQSB8fCBUQVJHRVRfRk1BNCB8 fCBUQVJHRVRfQVZYNTEyVkwpCiAgICAmJiBUQVJHRVRfTU1YX1dJVEhfU1NFIgotICAiQAotICAg dmZtYWRkMTMycHNcdHslMiwgJTMsICUwfCUwLCAlMywgJTJ9Ci0gICB2Zm1hZGQyMzFwc1x0eyUy LCAlMSwgJTB8JTAsICUxLCAlMn0KLSAgIHZmbWFkZHBzXHR7JTMsICUyLCAlMSwgJTB8JTAsICUx LCAlMiwgJTN9IgotICBbKHNldF9hdHRyICJpc2EiICJmbWFfb3JfYXZ4NTEydmwsZm1hX29yX2F2 eDUxMnZsLGZtYTQiKQotICAgKHNldF9hdHRyICJ0eXBlIiAic3NlbXVsYWRkIikKLSAgIChzZXRf YXR0ciAibW9kZSIgIlY0U0YiKV0pCit7CisgIHJ0eCBvcDMgPSBnZW5fcmVnX3J0eCAoVjRTRm1v ZGUpOworICBydHggb3AyID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsKKyAgcnR4IG9wMSA9IGdl bl9yZWdfcnR4IChWNFNGbW9kZSk7CisgIHJ0eCBvcDAgPSBnZW5fcmVnX3J0eCAoVjRTRm1vZGUp OwogCi0oZGVmaW5lX2luc24gImZtc3Yyc2Y0IgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNG IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9dix2LHgiKQorICBlbWl0X2luc24gKGdlbl9tb3ZxX3Yy c2ZfdG9fc3NlIChvcDMsIG9wZXJhbmRzWzNdKSk7CisgIGVtaXRfaW5zbiAoZ2VuX21vdnFfdjJz Zl90b19zc2UgKG9wMiwgb3BlcmFuZHNbMl0pKTsKKyAgZW1pdF9pbnNuIChnZW5fbW92cV92MnNm X3RvX3NzZSAob3AxLCBvcGVyYW5kc1sxXSkpOworCisgIGVtaXRfaW5zbiAoZ2VuX2ZtYXY0c2Y0 IChvcDAsIG9wMSwgb3AyLCBvcDMpKTsKKworICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0s IGxvd3BhcnRfc3VicmVnIChWMlNGbW9kZSwgb3AwLCBWNFNGbW9kZSkpOworICBET05FOworfSkK KworKGRlZmluZV9leHBhbmQgImZtc3Yyc2Y0IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNG IDAgInJlZ2lzdGVyX29wZXJhbmQiKQogCShmbWE6VjJTRgotCSAgKG1hdGNoX29wZXJhbmQ6VjJT RiAgIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCx2LHgiKQotCSAgKG1hdGNoX29wZXJhbmQ6VjJT RiAgIDIgInJlZ2lzdGVyX29wZXJhbmQiICJ2LHYseCIpCisJICAobWF0Y2hfb3BlcmFuZDpWMlNG ICAgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiKQorCSAgKG1hdGNoX29wZXJhbmQ6VjJTRiAgIDIg Im5vbmltbWVkaWF0ZV9vcGVyYW5kIikKIAkgIChuZWc6VjJTRgotCSAgICAobWF0Y2hfb3BlcmFu ZDpWMlNGIDMgInJlZ2lzdGVyX29wZXJhbmQiICJ2LDAseCIpKSkpXQorCSAgICAobWF0Y2hfb3Bl cmFuZDpWMlNGIDMgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikpKSldCiAgICIoVEFSR0VUX0ZNQSB8 fCBUQVJHRVRfRk1BNCB8fCBUQVJHRVRfQVZYNTEyVkwpCiAgICAmJiBUQVJHRVRfTU1YX1dJVEhf U1NFIgotICAiQAotICAgdmZtc3ViMTMycHNcdHslMiwgJTMsICUwfCUwLCAlMywgJTJ9Ci0gICB2 Zm1zdWIyMzFwc1x0eyUyLCAlMSwgJTB8JTAsICUxLCAlMn0KLSAgIHZmbXN1YnBzXHR7JTMsICUy LCAlMSwgJTB8JTAsICUxLCAlMiwgJTN9IgotICBbKHNldF9hdHRyICJpc2EiICJmbWFfb3JfYXZ4 NTEydmwsZm1hX29yX2F2eDUxMnZsLGZtYTQiKQotICAgKHNldF9hdHRyICJ0eXBlIiAic3NlbXVs YWRkIikKLSAgIChzZXRfYXR0ciAibW9kZSIgIlY0U0YiKV0pCit7CisgIHJ0eCBvcDMgPSBnZW5f cmVnX3J0eCAoVjRTRm1vZGUpOworICBydHggb3AyID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsK KyAgcnR4IG9wMSA9IGdlbl9yZWdfcnR4IChWNFNGbW9kZSk7CisgIHJ0eCBvcDAgPSBnZW5fcmVn X3J0eCAoVjRTRm1vZGUpOwogCi0oZGVmaW5lX2luc24gImZubWF2MnNmNCIKLSAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXYsdix4IikKKyAgZW1pdF9p bnNuIChnZW5fbW92cV92MnNmX3RvX3NzZSAob3AzLCBvcGVyYW5kc1szXSkpOworICBlbWl0X2lu c24gKGdlbl9tb3ZxX3Yyc2ZfdG9fc3NlIChvcDIsIG9wZXJhbmRzWzJdKSk7CisgIGVtaXRfaW5z biAoZ2VuX21vdnFfdjJzZl90b19zc2UgKG9wMSwgb3BlcmFuZHNbMV0pKTsKKworICBlbWl0X2lu c24gKGdlbl9mbXN2NHNmNCAob3AwLCBvcDEsIG9wMiwgb3AzKSk7CisKKyAgZW1pdF9tb3ZlX2lu c24gKG9wZXJhbmRzWzBdLCBsb3dwYXJ0X3N1YnJlZyAoVjJTRm1vZGUsIG9wMCwgVjRTRm1vZGUp KTsKKyAgRE9ORTsKK30pCisKKyhkZWZpbmVfZXhwYW5kICJmbm1hdjJzZjQiCisgIFsoc2V0ICht YXRjaF9vcGVyYW5kOlYyU0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCiAJKGZtYTpWMlNGCiAJICAo bmVnOlYyU0YKLQkgICAgKG1hdGNoX29wZXJhbmQ6VjJTRiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAi JTAsdix4IikpCi0JICAobWF0Y2hfb3BlcmFuZDpWMlNGICAgMiAicmVnaXN0ZXJfb3BlcmFuZCIg InYsdix4IikKLQkgIChtYXRjaF9vcGVyYW5kOlYyU0YgICAzICJyZWdpc3Rlcl9vcGVyYW5kIiAi diwwLHgiKSkpXQorCSAgICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgIm5vbmltbWVkaWF0ZV9vcGVy YW5kIikpCisJICAobWF0Y2hfb3BlcmFuZDpWMlNGICAgMiAibm9uaW1tZWRpYXRlX29wZXJhbmQi KQorCSAgKG1hdGNoX29wZXJhbmQ6VjJTRiAgIDMgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikpKV0K ICAgIihUQVJHRVRfRk1BIHx8IFRBUkdFVF9GTUE0IHx8IFRBUkdFVF9BVlg1MTJWTCkKICAgICYm IFRBUkdFVF9NTVhfV0lUSF9TU0UiCi0gICJACi0gICB2Zm5tYWRkMTMycHNcdHslMiwgJTMsICUw fCUwLCAlMywgJTJ9Ci0gICB2Zm5tYWRkMjMxcHNcdHslMiwgJTEsICUwfCUwLCAlMSwgJTJ9Ci0g ICB2Zm5tYWRkcHNcdHslMywgJTIsICUxLCAlMHwlMCwgJTEsICUyLCAlM30iCi0gIFsoc2V0X2F0 dHIgImlzYSIgImZtYV9vcl9hdng1MTJ2bCxmbWFfb3JfYXZ4NTEydmwsZm1hNCIpCi0gICAoc2V0 X2F0dHIgInR5cGUiICJzc2VtdWxhZGQiKQotICAgKHNldF9hdHRyICJtb2RlIiAiVjRTRiIpXSkK K3sKKyAgcnR4IG9wMyA9IGdlbl9yZWdfcnR4IChWNFNGbW9kZSk7CisgIHJ0eCBvcDIgPSBnZW5f cmVnX3J0eCAoVjRTRm1vZGUpOworICBydHggb3AxID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsK KyAgcnR4IG9wMCA9IGdlbl9yZWdfcnR4IChWNFNGbW9kZSk7CisKKyAgZW1pdF9pbnNuIChnZW5f bW92cV92MnNmX3RvX3NzZSAob3AzLCBvcGVyYW5kc1szXSkpOworICBlbWl0X2luc24gKGdlbl9t b3ZxX3Yyc2ZfdG9fc3NlIChvcDIsIG9wZXJhbmRzWzJdKSk7CisgIGVtaXRfaW5zbiAoZ2VuX21v dnFfdjJzZl90b19zc2UgKG9wMSwgb3BlcmFuZHNbMV0pKTsKKworICBlbWl0X2luc24gKGdlbl9m bm1hdjRzZjQgKG9wMCwgb3AxLCBvcDIsIG9wMykpOwogCi0oZGVmaW5lX2luc24gImZubXN2MnNm NCIKKyAgZW1pdF9tb3ZlX2luc24gKG9wZXJhbmRzWzBdLCBsb3dwYXJ0X3N1YnJlZyAoVjJTRm1v ZGUsIG9wMCwgVjRTRm1vZGUpKTsKKyAgRE9ORTsKK30pCisKKyhkZWZpbmVfZXhwYW5kICJmbm1z djJzZjQiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyU0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIg Ij12LHYseCIpCiAJKGZtYTpWMlNGCiAJICAobmVnOlYyU0YKLQkgICAgKG1hdGNoX29wZXJhbmQ6 VjJTRiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAsdix4IikpCi0JICAobWF0Y2hfb3BlcmFuZDpW MlNGICAgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInYsdix4IikKKwkgICAgKG1hdGNoX29wZXJhbmQ6 VjJTRiAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIpKQorCSAgKG1hdGNoX29wZXJhbmQ6VjJTRiAg IDIgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikKIAkgIChuZWc6VjJTRgotCSAgICAobWF0Y2hfb3Bl cmFuZDpWMlNGIDMgInJlZ2lzdGVyX29wZXJhbmQiICJ2LDAseCIpKSkpXQorCSAgICAobWF0Y2hf b3BlcmFuZDpWMlNGIDMgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikpKSldCiAgICIoVEFSR0VUX0ZN QSB8fCBUQVJHRVRfRk1BNCB8fCBUQVJHRVRfQVZYNTEyVkwpCiAgICAmJiBUQVJHRVRfTU1YX1dJ VEhfU1NFIgotICAiQAotICAgdmZubXN1YjEzMnBzXHR7JTIsICUzLCAlMHwlMCwgJTMsICUyfQot ICAgdmZubXN1YjIzMXBzXHR7JTIsICUxLCAlMHwlMCwgJTEsICUyfQotICAgdmZubXN1YnBzXHR7 JTMsICUyLCAlMSwgJTB8JTAsICUxLCAlMiwgJTN9IgotICBbKHNldF9hdHRyICJpc2EiICJmbWFf b3JfYXZ4NTEydmwsZm1hX29yX2F2eDUxMnZsLGZtYTQiKQotICAgKHNldF9hdHRyICJ0eXBlIiAi c3NlbXVsYWRkIikKLSAgIChzZXRfYXR0ciAibW9kZSIgIlY0U0YiKV0pCit7CisgIHJ0eCBvcDMg PSBnZW5fcmVnX3J0eCAoVjRTRm1vZGUpOworICBydHggb3AyID0gZ2VuX3JlZ19ydHggKFY0U0Zt b2RlKTsKKyAgcnR4IG9wMSA9IGdlbl9yZWdfcnR4IChWNFNGbW9kZSk7CisgIHJ0eCBvcDAgPSBn ZW5fcmVnX3J0eCAoVjRTRm1vZGUpOworCisgIGVtaXRfaW5zbiAoZ2VuX21vdnFfdjJzZl90b19z c2UgKG9wMywgb3BlcmFuZHNbM10pKTsKKyAgZW1pdF9pbnNuIChnZW5fbW92cV92MnNmX3RvX3Nz ZSAob3AyLCBvcGVyYW5kc1syXSkpOworICBlbWl0X2luc24gKGdlbl9tb3ZxX3Yyc2ZfdG9fc3Nl IChvcDEsIG9wZXJhbmRzWzFdKSk7CisKKyAgZW1pdF9pbnNuIChnZW5fZm5tc3Y0c2Y0IChvcDAs IG9wMSwgb3AyLCBvcDMpKTsKKworICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIGxvd3Bh cnRfc3VicmVnIChWMlNGbW9kZSwgb3AwLCBWNFNGbW9kZSkpOworICBET05FOworfSkKIAogOzs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7CiA7OwpAQCAtMTM5MCw2MyArMTQxOSw4NyBAQCAoZGVmaW5lX2luc24gImZubXN2 MnNmNCIKIDs7CiA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKIAotKGRlZmluZV9pbnNuICJtbXhfZml4X3RydW5jdjJz ZnYyc2kyIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICI9eSxZdiIpCi0JKGZpeDpWMlNJIChtYXRjaF9vcGVyYW5kOlYyU0YgMSAicmVnaXN0ZXJfbW14 bWVtX29wZXJhbmQiICJ5bSxZdiIpKSldCi0gICJUQVJHRVRfM0ROT1cgfHwgVEFSR0VUX01NWF9X SVRIX1NTRSIKLSAgIkAKLSAgIHBmMmlkXHR7JTEsICUwfCUwLCAlMX0KLSAgICV2Y3Z0dHBzMmRx XHR7JTEsICUwfCUwLCAlMX0iCi0gIFsoc2V0X2F0dHIgImlzYSIgIiosc3NlMiIpCi0gICAoc2V0 X2F0dHIgIm1teF9pc2EiICJuYXRpdmUsKiIpCi0gICAoc2V0X2F0dHIgInR5cGUiICJtbXhjdnQs c3NlY3Z0IikKLSAgIChzZXRfYXR0ciAicHJlZml4X2V4dHJhIiAiMSwqIikKLSAgIChzZXRfYXR0 ciAicHJlZml4X3JlcCIgIiosMSIpCi0gICAoc2V0X2F0dHIgInByZWZpeF9kYXRhMTYiICIqLDAi KQotICAgKHNldF9hdHRyICJwcmVmaXgiICIqLG1heWJlX3ZleCIpCi0gICAoc2V0X2F0dHIgIm1v ZGUiICJWMlNGLFRJIildKQotCiAoZGVmaW5lX2V4cGFuZCAiZml4X3RydW5jdjJzZnYyc2kyIgog ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiKQotCShmaXg6 VjJTSSAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgInJlZ2lzdGVyX29wZXJhbmQiKSkpXQotICAiVEFS R0VUX01NWF9XSVRIX1NTRSIpCisJKGZpeDpWMlNJIChtYXRjaF9vcGVyYW5kOlYyU0YgMSAibm9u aW1tZWRpYXRlX29wZXJhbmQiKSkpXQorICAiVEFSR0VUX01NWF9XSVRIX1NTRSIKK3sKKyAgcnR4 IG9wMSA9IGdlbl9yZWdfcnR4IChWNFNGbW9kZSk7CisgIHJ0eCBvcDAgPSBnZW5fcmVnX3J0eCAo VjRTSW1vZGUpOwogCi0oZGVmaW5lX2luc24gImZpeHVuc190cnVuY3Yyc2Z2MnNpMiIKLSAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6VjJTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXYiKQotCSh1bnNp Z25lZF9maXg6VjJTSSAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgInJlZ2lzdGVyX29wZXJhbmQiICJ2 IikpKV0KKyAgZW1pdF9pbnNuIChnZW5fbW92cV92MnNmX3RvX3NzZSAob3AxLCBvcGVyYW5kc1sx XSkpOworCisgIGVtaXRfaW5zbiAoZ2VuX2ZpeF90cnVuY3Y0c2Z2NHNpMiAob3AwLCBvcDEpKTsK KworICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIGxvd3BhcnRfc3VicmVnIChWMlNJbW9k ZSwgb3AwLCBWNFNJbW9kZSkpOworICBET05FOworfSkKKworKGRlZmluZV9leHBhbmQgImZpeHVu c190cnVuY3Yyc2Z2MnNpMiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJTSSAwICJyZWdpc3Rl cl9vcGVyYW5kIikKKwkodW5zaWduZWRfZml4OlYyU0kgKG1hdGNoX29wZXJhbmQ6VjJTRiAxICJu b25pbW1lZGlhdGVfb3BlcmFuZCIpKSldCiAgICJUQVJHRVRfQVZYNTEyVkwgJiYgVEFSR0VUX01N WF9XSVRIX1NTRSIKLSAgInZjdnR0cHMydWRxXHR7JTEsICUwfCUwLCAlMX0iCi0gIFsoc2V0X2F0 dHIgInR5cGUiICJzc2VjdnQiKQotICAgKHNldF9hdHRyICJwcmVmaXgiICJldmV4IikKLSAgIChz ZXRfYXR0ciAibW9kZSIgIlRJIildKQoreworICBydHggb3AxID0gZ2VuX3JlZ19ydHggKFY0U0Zt b2RlKTsKKyAgcnR4IG9wMCA9IGdlbl9yZWdfcnR4IChWNFNJbW9kZSk7CiAKLShkZWZpbmVfaW5z biAibW14X2Zsb2F0djJzaXYyc2YyIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAgInJl Z2lzdGVyX29wZXJhbmQiICI9eSxZdiIpCi0JKGZsb2F0OlYyU0YgKG1hdGNoX29wZXJhbmQ6VjJT SSAxICJyZWdpc3Rlcl9tbXhtZW1fb3BlcmFuZCIgInltLFl2IikpKV0KLSAgIlRBUkdFVF8zRE5P VyB8fCBUQVJHRVRfTU1YX1dJVEhfU1NFIgotICAiQAotICAgcGkyZmRcdHslMSwgJTB8JTAsICUx fQotICAgJXZjdnRkcTJwc1x0eyUxLCAlMHwlMCwgJTF9IgotICBbKHNldF9hdHRyICJpc2EiICIq LHNzZTIiKQotICAgKHNldF9hdHRyICJtbXhfaXNhIiAibmF0aXZlLCoiKQotICAgKHNldF9hdHRy ICJ0eXBlIiAibW14Y3Z0LHNzZWN2dCIpCisgIGVtaXRfaW5zbiAoZ2VuX21vdnFfdjJzZl90b19z c2UgKG9wMSwgb3BlcmFuZHNbMV0pKTsKKworICBlbWl0X2luc24gKGdlbl9maXh1bnNfdHJ1bmN2 NHNmdjRzaTIgKG9wMCwgb3AxKSk7CisKKyAgZW1pdF9tb3ZlX2luc24gKG9wZXJhbmRzWzBdLCBs b3dwYXJ0X3N1YnJlZyAoVjJTSW1vZGUsIG9wMCwgVjRTSW1vZGUpKTsKKyAgRE9ORTsKK30pCisK KyhkZWZpbmVfaW5zbiAibW14X2ZpeF90cnVuY3Yyc2Z2MnNpMiIKKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6VjJTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXkiKQorCShmaXg6VjJTSSAobWF0Y2hf b3BlcmFuZDpWMlNGIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAieW0iKSkpXQorICAiVEFSR0VU XzNETk9XIgorICAicGYyaWRcdHslMSwgJTB8JTAsICUxfSIKKyAgWyhzZXRfYXR0ciAidHlwZSIg Im1teGN2dCIpCiAgICAoc2V0X2F0dHIgInByZWZpeF9leHRyYSIgIjEiKQotICAgKHNldF9hdHRy ICJwcmVmaXgiICIqLG1heWJlX3ZleCIpCi0gICAoc2V0X2F0dHIgIm1vZGUiICJWMlNGLFY0U0Yi KV0pCisgICAoc2V0X2F0dHIgIm1vZGUiICJWMlNGIildKQogCiAoZGVmaW5lX2V4cGFuZCAiZmxv YXR2MnNpdjJzZjIiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyU0YgMCAicmVnaXN0ZXJfb3Bl cmFuZCIpCi0JKGZsb2F0OlYyU0YgKG1hdGNoX29wZXJhbmQ6VjJTSSAxICJyZWdpc3Rlcl9vcGVy YW5kIikpKV0KLSAgIlRBUkdFVF9NTVhfV0lUSF9TU0UiKQorCShmbG9hdDpWMlNGIChtYXRjaF9v cGVyYW5kOlYyU0kgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiKSkpXQorICAiVEFSR0VUX01NWF9X SVRIX1NTRSIKK3sKKyAgcnR4IG9wMSA9IGdlbl9yZWdfcnR4IChWNFNJbW9kZSk7CisgIHJ0eCBv cDAgPSBnZW5fcmVnX3J0eCAoVjRTRm1vZGUpOworCisgIGVtaXRfaW5zbiAoZ2VuX21vdnFfdjJz aV90b19zc2UgKG9wMSwgb3BlcmFuZHNbMV0pKTsKKworICBlbWl0X2luc24gKGdlbl9mbG9hdHY0 c2l2NHNmMiAob3AwLCBvcDEpKTsKKworICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIGxv d3BhcnRfc3VicmVnIChWMlNGbW9kZSwgb3AwLCBWNFNGbW9kZSkpOworICBET05FOworfSkKIAot KGRlZmluZV9pbnNuICJmbG9hdHVuc3Yyc2l2MnNmMiIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 VjJTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXYiKQotCSh1bnNpZ25lZF9mbG9hdDpWMlNGICht YXRjaF9vcGVyYW5kOlYyU0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInYiKSkpXQorKGRlZmluZV9l eHBhbmQgImZsb2F0dW5zdjJzaXYyc2YyIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAg InJlZ2lzdGVyX29wZXJhbmQiKQorCSh1bnNpZ25lZF9mbG9hdDpWMlNGIChtYXRjaF9vcGVyYW5k OlYyU0kgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiKSkpXQogICAiVEFSR0VUX0FWWDUxMlZMICYm IFRBUkdFVF9NTVhfV0lUSF9TU0UiCi0gICJ2Y3Z0dWRxMnBzXHR7JTEsICUwfCUwLCAlMX0iCi0g IFsoc2V0X2F0dHIgInR5cGUiICJzc2VjdnQiKQotICAgKHNldF9hdHRyICJwcmVmaXgiICJldmV4 IikKLSAgIChzZXRfYXR0ciAibW9kZSIgIlY0U0YiKV0pCit7CisgIHJ0eCBvcDEgPSBnZW5fcmVn X3J0eCAoVjRTSW1vZGUpOworICBydHggb3AwID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsKKwor ICBlbWl0X2luc24gKGdlbl9tb3ZxX3Yyc2lfdG9fc3NlIChvcDEsIG9wZXJhbmRzWzFdKSk7CisK KyAgZW1pdF9pbnNuIChnZW5fZmxvYXR1bnN2NHNpdjRzZjIgKG9wMCwgb3AxKSk7CisKKyAgZW1p dF9tb3ZlX2luc24gKG9wZXJhbmRzWzBdLCBsb3dwYXJ0X3N1YnJlZyAoVjJTRm1vZGUsIG9wMCwg VjRTRm1vZGUpKTsKKyAgRE9ORTsKK30pCisKKyhkZWZpbmVfaW5zbiAibW14X2Zsb2F0djJzaXYy c2YyIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 eSIpCisJKGZsb2F0OlYyU0YgKG1hdGNoX29wZXJhbmQ6VjJTSSAxICJub25pbW1lZGlhdGVfb3Bl cmFuZCIgInltIikpKV0KKyAgIlRBUkdFVF8zRE5PVyIKKyAgInBpMmZkXHR7JTEsICUwfCUwLCAl MX0iCisgIFsoc2V0X2F0dHIgInR5cGUiICJtbXhjdnQiKQorICAgKHNldF9hdHRyICJwcmVmaXhf ZXh0cmEiICIxIikKKyAgIChzZXRfYXR0ciAibW9kZSIgIlYyU0YiKV0pCiAKIChkZWZpbmVfaW5z biAibW14X3BmMml3IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNJIDAgInJlZ2lzdGVyX29w ZXJhbmQiICI9eSIpCkBAIC0xNzAxLDE1NCArMTc1NCwxNzMgQEAgKGRlZmluZV9leHBhbmQgInZl Y19pbml0djJzZnNmIgogOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CiAKIChkZWZpbmVfZXhwYW5kICJuZWFyYnlpbnR2 MnNmMiIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIikK LQkodW5zcGVjOlYyU0YKLQkgIFsobWF0Y2hfb3BlcmFuZDpWMlNGIDEgInJlZ2lzdGVyX29wZXJh bmQiKQotCSAgIChtYXRjaF9kdXAgMildCi0JICBVTlNQRUNfUk9VTkQpKV0KKyAgWyhtYXRjaF9v cGVyYW5kOlYyU0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAobWF0Y2hfb3BlcmFuZDpWMlNG IDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIildCiAgICJUQVJHRVRfU1NFNF8xICYmIFRBUkdFVF9N TVhfV0lUSF9TU0UiCi0gICJvcGVyYW5kc1syXSA9IEdFTl9JTlQgKFJPVU5EX01YQ1NSIHwgUk9V TkRfTk9fRVhDKTsiKQoreworICBydHggb3AxID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsKKyAg cnR4IG9wMCA9IGdlbl9yZWdfcnR4IChWNFNGbW9kZSk7CisKKyAgZW1pdF9pbnNuIChnZW5fbW92 cV92MnNmX3RvX3NzZSAob3AxLCBvcGVyYW5kc1sxXSkpOworCisgIGVtaXRfaW5zbiAoZ2VuX25l YXJieWludHY0c2YyIChvcDAsIG9wMSkpOworCisgIGVtaXRfbW92ZV9pbnNuIChvcGVyYW5kc1sw XSwgbG93cGFydF9zdWJyZWcgKFYyU0Ztb2RlLCBvcDAsIFY0U0Ztb2RlKSk7CisgIERPTkU7Cit9 KQogCiAoZGVmaW5lX2V4cGFuZCAicmludHYyc2YyIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpW MlNGIDAgInJlZ2lzdGVyX29wZXJhbmQiKQotCSh1bnNwZWM6VjJTRgotCSAgWyhtYXRjaF9vcGVy YW5kOlYyU0YgMSAicmVnaXN0ZXJfb3BlcmFuZCIpCi0JICAgKG1hdGNoX2R1cCAyKV0KLQkgIFVO U1BFQ19ST1VORCkpXQorICBbKG1hdGNoX29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rlcl9vcGVyYW5k IikKKyAgIChtYXRjaF9vcGVyYW5kOlYyU0YgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiKV0KICAg IlRBUkdFVF9TU0U0XzEgJiYgVEFSR0VUX01NWF9XSVRIX1NTRSIKLSAgIm9wZXJhbmRzWzJdID0g R0VOX0lOVCAoUk9VTkRfTVhDU1IpOyIpCit7CisgIHJ0eCBvcDEgPSBnZW5fcmVnX3J0eCAoVjRT Rm1vZGUpOworICBydHggb3AwID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsKKworICBlbWl0X2lu c24gKGdlbl9tb3ZxX3Yyc2ZfdG9fc3NlIChvcDEsIG9wZXJhbmRzWzFdKSk7CisKKyAgZW1pdF9p bnNuIChnZW5fcmludHY0c2YyIChvcDAsIG9wMSkpOworCisgIGVtaXRfbW92ZV9pbnNuIChvcGVy YW5kc1swXSwgbG93cGFydF9zdWJyZWcgKFYyU0Ztb2RlLCBvcDAsIFY0U0Ztb2RlKSk7CisgIERP TkU7Cit9KQorCisoZGVmaW5lX2V4cGFuZCAibHJpbnR2MnNmdjJzaTIiCisgIFsobWF0Y2hfb3Bl cmFuZDpWMlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiKQorICAgKG1hdGNoX29wZXJhbmQ6VjJTRiAx ICJub25pbW1lZGlhdGVfb3BlcmFuZCIpXQorICJUQVJHRVRfU1NFNF8xICYmICFmbGFnX3RyYXBw aW5nX21hdGgKKyAgJiYgVEFSR0VUX01NWF9XSVRIX1NTRSIKK3sKKyAgcnR4IG9wMSA9IGdlbl9y ZWdfcnR4IChWNFNGbW9kZSk7CisgIHJ0eCBvcDAgPSBnZW5fcmVnX3J0eCAoVjRTSW1vZGUpOwor CisgIGVtaXRfaW5zbiAoZ2VuX21vdnFfdjJzZl90b19zc2UgKG9wMSwgb3BlcmFuZHNbMV0pKTsK KworICBlbWl0X2luc24gKGdlbl9scmludHY0c2Z2NHNpMiAob3AwLCBvcDEpKTsKKworICBlbWl0 X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIGxvd3BhcnRfc3VicmVnIChWMlNJbW9kZSwgb3AwLCBW NFNJbW9kZSkpOworICBET05FOworfSkKIAogKGRlZmluZV9leHBhbmQgImNlaWx2MnNmMiIKLSAg WyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKLQkodW5zcGVj OlYyU0YKLQkgIFsobWF0Y2hfb3BlcmFuZDpWMlNGIDEgInJlZ2lzdGVyX29wZXJhbmQiKQotCSAg IChtYXRjaF9kdXAgMildCi0JICBVTlNQRUNfUk9VTkQpKV0KKyAgWyhtYXRjaF9vcGVyYW5kOlYy U0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgIm5vbmlt bWVkaWF0ZV9vcGVyYW5kIildCiAgICJUQVJHRVRfU1NFNF8xICYmICFmbGFnX3RyYXBwaW5nX21h dGgKICAgICYmIFRBUkdFVF9NTVhfV0lUSF9TU0UiCi0gICJvcGVyYW5kc1syXSA9IEdFTl9JTlQg KFJPVU5EX0NFSUwgfCBST1VORF9OT19FWEMpOyIpCit7CisgIHJ0eCBvcDEgPSBnZW5fcmVnX3J0 eCAoVjRTRm1vZGUpOworICBydHggb3AwID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsKKworICBl bWl0X2luc24gKGdlbl9tb3ZxX3Yyc2ZfdG9fc3NlIChvcDEsIG9wZXJhbmRzWzFdKSk7CisKKyAg ZW1pdF9pbnNuIChnZW5fY2VpbHY0c2YyIChvcDAsIG9wMSkpOworCisgIGVtaXRfbW92ZV9pbnNu IChvcGVyYW5kc1swXSwgbG93cGFydF9zdWJyZWcgKFYyU0Ztb2RlLCBvcDAsIFY0U0Ztb2RlKSk7 CisgIERPTkU7Cit9KQogCiAoZGVmaW5lX2V4cGFuZCAibGNlaWx2MnNmdjJzaTIiCiAgIFsobWF0 Y2hfb3BlcmFuZDpWMlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiKQotICAgKG1hdGNoX29wZXJhbmQ6 VjJTRiAxICJyZWdpc3Rlcl9vcGVyYW5kIildCisgICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgIm5v bmltbWVkaWF0ZV9vcGVyYW5kIildCiAgIlRBUkdFVF9TU0U0XzEgJiYgIWZsYWdfdHJhcHBpbmdf bWF0aAogICAmJiBUQVJHRVRfTU1YX1dJVEhfU1NFIgogewotICBydHggdG1wID0gZ2VuX3JlZ19y dHggKFYyU0Ztb2RlKTsKLSAgZW1pdF9pbnNuIChnZW5fY2VpbHYyc2YyICh0bXAsIG9wZXJhbmRz WzFdKSk7Ci0gIGVtaXRfaW5zbiAoZ2VuX2ZpeF90cnVuY3Yyc2Z2MnNpMiAob3BlcmFuZHNbMF0s IHRtcCkpOworICBydHggb3AxID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2RlKTsKKyAgcnR4IG9wMCA9 IGdlbl9yZWdfcnR4IChWNFNJbW9kZSk7CisKKyAgZW1pdF9pbnNuIChnZW5fbW92cV92MnNmX3Rv X3NzZSAob3AxLCBvcGVyYW5kc1sxXSkpOworCisgIGVtaXRfaW5zbiAoZ2VuX2xjZWlsdjRzZnY0 c2kyIChvcDAsIG9wMSkpOworCisgIGVtaXRfbW92ZV9pbnNuIChvcGVyYW5kc1swXSwgbG93cGFy dF9zdWJyZWcgKFYyU0ltb2RlLCBvcDAsIFY0U0ltb2RlKSk7CiAgIERPTkU7CiB9KQogCiAoZGVm aW5lX2V4cGFuZCAiZmxvb3J2MnNmMiIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJTRiAwICJy ZWdpc3Rlcl9vcGVyYW5kIikKLQkodW5zcGVjOlYyU0YKLQkgIFsobWF0Y2hfb3BlcmFuZDpWMlNG IDEgInJlZ2lzdGVyX29wZXJhbmQiKQotCSAgIChtYXRjaF9kdXAgMildCi0JICBVTlNQRUNfUk9V TkQpKV0KKyAgWyhtYXRjaF9vcGVyYW5kOlYyU0YgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAo bWF0Y2hfb3BlcmFuZDpWMlNGIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIildCiAgICJUQVJHRVRf U1NFNF8xICYmICFmbGFnX3RyYXBwaW5nX21hdGgKICAgJiYgVEFSR0VUX01NWF9XSVRIX1NTRSIK LSAgIm9wZXJhbmRzWzJdID0gR0VOX0lOVCAoUk9VTkRfRkxPT1IgfCBST1VORF9OT19FWEMpOyIp Cit7CisgIHJ0eCBvcDEgPSBnZW5fcmVnX3J0eCAoVjRTRm1vZGUpOworICBydHggb3AwID0gZ2Vu X3JlZ19ydHggKFY0U0Ztb2RlKTsKKworICBlbWl0X2luc24gKGdlbl9tb3ZxX3Yyc2ZfdG9fc3Nl IChvcDEsIG9wZXJhbmRzWzFdKSk7CisKKyAgZW1pdF9pbnNuIChnZW5fZmxvb3J2NHNmMiAob3Aw LCBvcDEpKTsKKworICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIGxvd3BhcnRfc3VicmVn IChWMlNGbW9kZSwgb3AwLCBWNFNGbW9kZSkpOworICBET05FOworfSkKIAogKGRlZmluZV9leHBh bmQgImxmbG9vcnYyc2Z2MnNpMiIKICAgWyhtYXRjaF9vcGVyYW5kOlYyU0kgMCAicmVnaXN0ZXJf b3BlcmFuZCIpCi0gICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgInJlZ2lzdGVyX29wZXJhbmQiKV0K KyAgIChtYXRjaF9vcGVyYW5kOlYyU0YgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiKV0KICAiVEFS R0VUX1NTRTRfMSAmJiAhZmxhZ190cmFwcGluZ19tYXRoCiAgICYmIFRBUkdFVF9NTVhfV0lUSF9T U0UiCiB7Ci0gIHJ0eCB0bXAgPSBnZW5fcmVnX3J0eCAoVjJTRm1vZGUpOwotICBlbWl0X2luc24g KGdlbl9mbG9vcnYyc2YyICh0bXAsIG9wZXJhbmRzWzFdKSk7Ci0gIGVtaXRfaW5zbiAoZ2VuX2Zp eF90cnVuY3Yyc2Z2MnNpMiAob3BlcmFuZHNbMF0sIHRtcCkpOworICBydHggb3AxID0gZ2VuX3Jl Z19ydHggKFY0U0Ztb2RlKTsKKyAgcnR4IG9wMCA9IGdlbl9yZWdfcnR4IChWNFNJbW9kZSk7CisK KyAgZW1pdF9pbnNuIChnZW5fbW92cV92MnNmX3RvX3NzZSAob3AxLCBvcGVyYW5kc1sxXSkpOwor CisgIGVtaXRfaW5zbiAoZ2VuX2xmbG9vcnY0c2Z2NHNpMiAob3AwLCBvcDEpKTsKKworICBlbWl0 X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIGxvd3BhcnRfc3VicmVnIChWMlNJbW9kZSwgb3AwLCBW NFNJbW9kZSkpOwogICBET05FOwogfSkKIAogKGRlZmluZV9leHBhbmQgImJ0cnVuY3Yyc2YyIgot ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAgInJlZ2lzdGVyX29wZXJhbmQiKQotCSh1bnNw ZWM6VjJTRgotCSAgWyhtYXRjaF9vcGVyYW5kOlYyU0YgMSAicmVnaXN0ZXJfb3BlcmFuZCIpCi0J ICAgKG1hdGNoX2R1cCAyKV0KLQkgIFVOU1BFQ19ST1VORCkpXQorICBbKG1hdGNoX29wZXJhbmQ6 VjJTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgIChtYXRjaF9vcGVyYW5kOlYyU0YgMSAibm9u aW1tZWRpYXRlX29wZXJhbmQiKV0KICAgIlRBUkdFVF9TU0U0XzEgJiYgIWZsYWdfdHJhcHBpbmdf bWF0aAogICAmJiBUQVJHRVRfTU1YX1dJVEhfU1NFIgotICAib3BlcmFuZHNbMl0gPSBHRU5fSU5U IChST1VORF9UUlVOQyB8IFJPVU5EX05PX0VYQyk7IikKK3sKKyAgcnR4IG9wMSA9IGdlbl9yZWdf cnR4IChWNFNGbW9kZSk7CisgIHJ0eCBvcDAgPSBnZW5fcmVnX3J0eCAoVjRTRm1vZGUpOwogCi0o ZGVmaW5lX2luc24gIiptbXhfcm91bmR2MnNmMiIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJT RiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPVlyLCp4LHYiKQotCSh1bnNwZWM6VjJTRgotCSAgWyht YXRjaF9vcGVyYW5kOlYyU0YgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIllyLHgsdiIpCi0JICAgKG1h dGNoX29wZXJhbmQ6U0kgMiAiY29uc3RfMF90b18xNV9vcGVyYW5kIildCi0JICBVTlNQRUNfUk9V TkQpKV0KLSAgIlRBUkdFVF9TU0U0XzEgJiYgVEFSR0VUX01NWF9XSVRIX1NTRSIKLSAgIiV2cm91 bmRwc1x0eyUyLCAlMSwgJTB8JTAsICUxLCAlMn0iCi0gIFsoc2V0X2F0dHIgImlzYSIgIm5vYXZ4 LG5vYXZ4LGF2eCIpCi0gICAoc2V0X2F0dHIgInR5cGUiICJzc2VjdnQiKQotICAgKHNldF9hdHRy ICJwcmVmaXhfZGF0YTE2IiAiMSwxLCoiKQotICAgKHNldF9hdHRyICJwcmVmaXhfZXh0cmEiICIx IikKLSAgIChzZXRfYXR0ciAibGVuZ3RoX2ltbWVkaWF0ZSIgIjEiKQotICAgKHNldF9hdHRyICJw cmVmaXgiICJvcmlnLG9yaWcsdmV4IikKLSAgIChzZXRfYXR0ciAibW9kZSIgIlY0U0YiKV0pCisg IGVtaXRfaW5zbiAoZ2VuX21vdnFfdjJzZl90b19zc2UgKG9wMSwgb3BlcmFuZHNbMV0pKTsKIAot KGRlZmluZV9pbnNuICJscmludHYyc2Z2MnNpMiIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJT SSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXYiKQotCSh1bnNwZWM6VjJTSQotCSAgWyhtYXRjaF9v cGVyYW5kOlYyU0YgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInYiKV0KLQkgIFVOU1BFQ19GSVhfTk9U UlVOQykpXQotICAiVEFSR0VUX01NWF9XSVRIX1NTRSIKLSAgIiV2Y3Z0cHMyZHFcdHslMSwgJTB8 JTAsICUxfSIKLSAgWyhzZXRfYXR0ciAidHlwZSIgInNzZWN2dCIpCi0gICAoc2V0IChhdHRyICJw cmVmaXhfZGF0YTE2IikKLSAgICAgKGlmX3RoZW5fZWxzZQotICAgICAgIChtYXRjaF90ZXN0ICJU QVJHRVRfQVZYIikKLSAgICAgKGNvbnN0X3N0cmluZyAiKiIpCi0gICAgIChjb25zdF9zdHJpbmcg IjEiKSkpCi0gICAoc2V0X2F0dHIgInByZWZpeCIgIm1heWJlX3ZleCIpCi0gICAoc2V0X2F0dHIg Im1vZGUiICJUSSIpXSkKKyAgZW1pdF9pbnNuIChnZW5fYnRydW5jdjRzZjIgKG9wMCwgb3AxKSk7 CisKKyAgZW1pdF9tb3ZlX2luc24gKG9wZXJhbmRzWzBdLCBsb3dwYXJ0X3N1YnJlZyAoVjJTRm1v ZGUsIG9wMCwgVjRTRm1vZGUpKTsKKyAgRE9ORTsKK30pCiAKIChkZWZpbmVfZXhwYW5kICJyb3Vu ZHYyc2YyIgotICBbKHNldCAobWF0Y2hfZHVwIDMpCi0JKHBsdXM6VjJTRgotCSAgKG1hdGNoX29w ZXJhbmQ6VjJTRiAxICJyZWdpc3Rlcl9vcGVyYW5kIikKLQkgIChtYXRjaF9kdXAgMikpKQotICAg KHNldCAobWF0Y2hfb3BlcmFuZDpWMlNGIDAgInJlZ2lzdGVyX29wZXJhbmQiKQotCSh1bnNwZWM6 VjJTRgotCSAgWyhtYXRjaF9kdXAgMykgKG1hdGNoX2R1cCA0KV0KLQkgIFVOU1BFQ19ST1VORCkp XQorICBbKG1hdGNoX29wZXJhbmQ6VjJTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKyAgIChtYXRj aF9vcGVyYW5kOlYyU0YgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiKV0KICAgIlRBUkdFVF9TU0U0 XzEgJiYgIWZsYWdfdHJhcHBpbmdfbWF0aAogICAgJiYgVEFSR0VUX01NWF9XSVRIX1NTRSIKIHsK LSAgY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0ICpmbXQ7Ci0gIFJFQUxfVkFMVUVfVFlQRSBwcmVk X2hhbGYsIGhhbGZfbWludXNfcHJlZF9oYWxmOwotICBydHggaGFsZiwgdmVjX2hhbGY7Ci0KLSAg LyogbG9hZCBuZXh0YWZ0ZXIgKDAuNSwgMC4wKSAqLwotICBmbXQgPSBSRUFMX01PREVfRk9STUFU IChTRm1vZGUpOwotICByZWFsXzJleHBOICgmaGFsZl9taW51c19wcmVkX2hhbGYsIC0oZm10LT5w KSAtIDEsIFNGbW9kZSk7Ci0gIHJlYWxfYXJpdGhtZXRpYyAoJnByZWRfaGFsZiwgTUlOVVNfRVhQ UiwgJmRjb25zdGhhbGYsICZoYWxmX21pbnVzX3ByZWRfaGFsZik7Ci0gIGhhbGYgPSBjb25zdF9k b3VibGVfZnJvbV9yZWFsX3ZhbHVlIChwcmVkX2hhbGYsIFNGbW9kZSk7CisgIHJ0eCBvcDEgPSBn ZW5fcmVnX3J0eCAoVjRTRm1vZGUpOworICBydHggb3AwID0gZ2VuX3JlZ19ydHggKFY0U0Ztb2Rl KTsKIAotICB2ZWNfaGFsZiA9IGl4ODZfYnVpbGRfY29uc3RfdmVjdG9yIChWMlNGbW9kZSwgdHJ1 ZSwgaGFsZik7Ci0gIHZlY19oYWxmID0gZm9yY2VfcmVnIChWMlNGbW9kZSwgdmVjX2hhbGYpOwor ICBlbWl0X2luc24gKGdlbl9tb3ZxX3Yyc2ZfdG9fc3NlIChvcDEsIG9wZXJhbmRzWzFdKSk7CiAK LSAgb3BlcmFuZHNbMl0gPSBnZW5fcmVnX3J0eCAoVjJTRm1vZGUpOwotICBlbWl0X2luc24gKGdl bl9jb3B5c2lnbnYyc2YzIChvcGVyYW5kc1syXSwgdmVjX2hhbGYsIG9wZXJhbmRzWzFdKSk7Cisg IGVtaXRfaW5zbiAoZ2VuX3JvdW5kdjRzZjIgKG9wMCwgb3AxKSk7CiAKLSAgb3BlcmFuZHNbM10g PSBnZW5fcmVnX3J0eCAoVjJTRm1vZGUpOwotICBvcGVyYW5kc1s0XSA9IEdFTl9JTlQgKFJPVU5E X1RSVU5DKTsKKyAgZW1pdF9tb3ZlX2luc24gKG9wZXJhbmRzWzBdLCBsb3dwYXJ0X3N1YnJlZyAo VjJTRm1vZGUsIG9wMCwgVjRTRm1vZGUpKTsKKyAgRE9ORTsKIH0pCiAKIChkZWZpbmVfZXhwYW5k ICJscm91bmR2MnNmdjJzaTIiCiAgIFsobWF0Y2hfb3BlcmFuZDpWMlNJIDAgInJlZ2lzdGVyX29w ZXJhbmQiKQotICAgKG1hdGNoX29wZXJhbmQ6VjJTRiAxICJyZWdpc3Rlcl9vcGVyYW5kIildCisg ICAobWF0Y2hfb3BlcmFuZDpWMlNGIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIildCiAgIlRBUkdF VF9TU0U0XzEgJiYgIWZsYWdfdHJhcHBpbmdfbWF0aAogICAmJiBUQVJHRVRfTU1YX1dJVEhfU1NF IgogewotICBydHggdG1wID0gZ2VuX3JlZ19ydHggKFYyU0Ztb2RlKTsKLSAgZW1pdF9pbnNuIChn ZW5fcm91bmR2MnNmMiAodG1wLCBvcGVyYW5kc1sxXSkpOwotICBlbWl0X2luc24gKGdlbl9maXhf dHJ1bmN2MnNmdjJzaTIgKG9wZXJhbmRzWzBdLCB0bXApKTsKKyAgcnR4IG9wMSA9IGdlbl9yZWdf cnR4IChWNFNGbW9kZSk7CisgIHJ0eCBvcDAgPSBnZW5fcmVnX3J0eCAoVjRTSW1vZGUpOworCisg IGVtaXRfaW5zbiAoZ2VuX21vdnFfdjJzZl90b19zc2UgKG9wMSwgb3BlcmFuZHNbMV0pKTsKKwor ICBlbWl0X2luc24gKGdlbl9scm91bmR2NHNmdjRzaTIgKG9wMCwgb3AxKSk7CisKKyAgZW1pdF9t b3ZlX2luc24gKG9wZXJhbmRzWzBdLCBsb3dwYXJ0X3N1YnJlZyAoVjJTSW1vZGUsIG9wMCwgVjRT SW1vZGUpKTsKICAgRE9ORTsKIH0pCiAKLQogOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CiA7OwogOzsgUGFyYWxsZWwg aGFsZi1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHIxMTA3NjIuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L3ByMTEwNzYyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjIzNjZiZTI4YWViCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHIxMTA3NjIuYwpAQCAtMCwwICsxLDE4IEBACisvKiBQUiB0YXJnZXQvMTEw NzYyICovCisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8yIC1tc3NlMiAtZHAiIH0gKi8KKwordHlwZWRlZiBmbG9hdCB2MnNm IF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDgpKSk7Cit0eXBlZGVmIGZsb2F0IHY0c2YgX19h dHRyaWJ1dGVfXygodmVjdG9yX3NpemUoMTYpKSk7CisKK3Yyc2YgdGVzdCh2NHNmIHgsIHY0c2Yg eSkKK3sKKyAgdjJzZiB4MiwgeTI7CisKKyAgeDIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciAo eCwgeCwgMCwgMSk7CisgIHkyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IgKHksIHksIDAsIDEp OworCisgIHJldHVybiB4MiArIHkyOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMgIlxcKnZlY19jb25jYXR2NHNmXzAiIDIgfSB9ICovCg== --000000000000f1083406016137bf--