From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id D66573858C50; Thu, 9 Feb 2023 14:46:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D66573858C50 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.97,283,1669104000"; d="diff'?scan'208";a="97543488" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa2.mentor.iphmx.com with ESMTP; 09 Feb 2023 06:46:42 -0800 IronPort-SDR: dm/LwEKQ1EdrGYBogYzKP95nmEm7cs9lS4JIahHhZDM6gZO3BssnhkUZm/9G2GcoxQuBI7v0q2 fAzp04W/rHOlD3SDqavwUaezgzY50FRRy7cCpRnBOxN1Yq9xfQkdaXwcd1DMJ7gTnZnF9vp5AN 8Jf9ydIzEUHO14bkuzTo3QpOFLfTtnwAqt7DzoqdWYnLF8ZjG7zmqJUdgoWAKdh06PjG8ywMbs IHr9BA8aDQd0qfde9zuJNP4YwIGdCOqfy5CpXguE/oEO3GAKBpbKcGKe4EwQJDEoN4Yf3pZVpR R9c= Content-Type: multipart/mixed; boundary="------------RDrqHLajB0993hUbiAzUNRbG" Message-ID: Date: Thu, 9 Feb 2023 15:46:35 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Subject: Re: [Patch][v2] OpenMP/Fortran: Partially fix non-rect loop nests [PR107424] Content-Language: en-US To: Jakub Jelinek CC: gcc-patches , fortran References: <18c3aed8-71dd-9b7f-6c7c-da529876d3f5@codesourcery.com> From: Tobias Burnus In-Reply-To: X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-13.mgc.mentorg.com (139.181.222.13) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_ASCII_DIVIDERS,KAM_DMARC_STATUS,NICE_REPLY_A,RCVD_IN_MSPIKE_H2,SCC_10_SHORT_WORD_LINES,SCC_20_SHORT_WORD_LINES,SCC_35_SHORT_WORD_LINES,SCC_5_SHORT_WORD_LINES,SPF_HELO_PASS,SPF_PASS,TXREP 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: --------------RDrqHLajB0993hUbiAzUNRbG Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Updated patch. Changes: the canonic(al) and the if/else(if) cosmetic formatting changes. Testcases: Additionally, I checked for the value of a zero-loop trip in libgomp.fortran/non-rectangular-loop-1.f90 and added lastprivate to all of .../non-rectangular-loop-{3,4}.f90 (unless the loop-iteration variable is a pointer). At least those three files pass with and without -fopenmp, implying that there the lastprivate check is correct. ('1a' and '5' also use lastprivate, but those fail with a 'sorry' before a value test can be done.) In '1' there are also several tests with 'parallel do', but only SIMD has been tested more extensively (in general and for lastprivate). I think the test coverage should be sufficient. Any further test idea? Otherwise, I would commit it now. Tobias PS: Next planned by me: revising the 'omp loop' patch and a longer pending 'map(alloc:' patch. And at some point supporting at least some non-=C2=B11 increments with non-rect loop nests. On 31.01.23 12:37, Jakub Jelinek wrote: > On Wed, Jan 25, 2023 at 03:47:18PM +0100, Tobias Burnus wrote: >> updated patch included, i.e. avoiding 'count' for 'j' when a 'j.0' would >> do (i.e. only local var without the different step calculation). I also >> now reject if there is a non-unit step on the loop using an outer var. >> >> Eventually still to be done: replace the 'sorry' by working code, i.e. >> implement the suggestions to handle some/all non-unit iteration steps as >> proposed in this thread. >> >> On 20.01.23 18:39, Jakub Jelinek wrote: >>> I think instead of non-unity etc. it is better to talk about constant >>> step 1 or -1. >> I concur. >> >> >>> The actual problem with non-simple loops for non-rectangular loops is >>> both in case it is an inner loop which uses some outer loop's iterator, >>> or if it is outer loop whose iterator is used, both of those cases >>> will not be handled properly. >> I have now added a check for the other case as well. >> >> Just to confirm, the following is fine, isn't it? >> >> !$omp simd collapse(4) >> do i =3D 1, 10, 2 >> do outer_var =3D 1, 10 ! step =3D + 1 >> do j =3D 1, 10, 2 >> do inner_var =3D 1, outer_var ! step =3D 1 >> >> i.e. both the inner_var and outer_var have 'step =3D 1', >> even if other loops in the 'collapse' have step !=3D 1. >> I think it should be fine. > Yes, the loops which don't define outer_var for other loops nor > use outer_var from other loops can be in any form, we can compute > their number of iterations before the whole loop nest for them, > so for the non-rectangular iterations computations we can ignore > those except for multiplication by the pre-computed count. > >> OpenMP/Fortran: Partially fix non-rect loop nests [PR107424] >> >> This patch ensures that loop bounds depending on outer loop vars use the >> proper TREE_VEC format. It additionally gives a sorry if such an outer >> var has a non-one/non-minus-one increment as currently a count variable >> is used in this case (see PR). >> >> Finally, it avoids 'count' and just uses a local loop variable if the >> step increment is +/-1. >> >> PR fortran/107424 >> >> gcc/fortran/ChangeLog: >> >> * trans-openmp.cc (struct dovar_init_d): Add 'sym' and >> 'non_unit_incr' members. >> (gfc_nonrect_loop_expr): New. >> (gfc_trans_omp_do): Call it; use normal loop bounds >> for unit stride - and only create local loop var. >> >> libgomp/ChangeLog: >> >> * testsuite/libgomp.fortran/non-rectangular-loop-1.f90: New test. >> * testsuite/libgomp.fortran/non-rectangular-loop-1a.f90: New test. >> * testsuite/libgomp.fortran/non-rectangular-loop-2.f90: New test. >> * testsuite/libgomp.fortran/non-rectangular-loop-3.f90: New test. >> * testsuite/libgomp.fortran/non-rectangular-loop-4.f90: New test. >> * testsuite/libgomp.fortran/non-rectangular-loop-5.f90: New test. >> >> gcc/testsuite/ChangeLog: >> >> * gfortran.dg/goacc/privatization-1-compute-loop.f90: Update dg-not= e. >> * gfortran.dg/goacc/privatization-1-routine_gang-loop.f90: Likewise= . >> >> +static bool >> +gfc_nonrect_loop_expr (stmtblock_t *pblock, gfc_se *sep, int loop_n, >> + gfc_code *code, gfc_expr *expr, vec *ini= ts, >> + int simple, gfc_expr *curr_loop_var) >> +{ >> + int i; >> + for (i =3D 0; i < loop_n; i++) >> + { >> + gcc_assert (code->ext.iterator->var->expr_type =3D=3D EXPR_VARIAB= LE); >> + if (gfc_find_sym_in_expr (code->ext.iterator->var->symtree->n.sym= , expr)) >> + break; >> + code =3D code->block->next; >> + } >> + if (i >=3D loop_n) >> + return false; >> + >> + /* Canonic format: TREE_VEC with [var, multiplier, offset]. */ > I think we use everywhere Canonical rather than Canonic > >> + gfc_symbol *var =3D code->ext.iterator->var->symtree->n.sym; >> + >> + tree tree_var =3D NULL_TREE; >> + tree a1 =3D integer_one_node; >> + tree a2 =3D integer_zero_node; >> + >> + if (!simple) >> + { >> + /* FIXME: Handle non-unit iter steps, cf. PR fortran/107424. */ >> + sorry_at (gfc_get_location (&curr_loop_var->where), >> + "non-rectangular loop nest with step other than constant 1 = " >> + "or -1 for %qs", curr_loop_var->symtree->n.sym->name); >> + return false; >> + } >> + >> + dovar_init *di; >> + unsigned ix; >> + FOR_EACH_VEC_ELT (*inits, ix, di) >> + if (di->sym =3D=3D var && !di->non_unit_iter) >> + { >> + tree_var =3D di->init; >> + gcc_assert (DECL_P (tree_var)); >> + break; >> + } >> + else if (di->sym =3D=3D var) >> + { >> + /* FIXME: Handle non-unit iter steps, cf. PR fortran/107424. */ >> + sorry_at (gfc_get_location (&code->loc), >> + "non-rectangular loop nest with step other than constant 1 = " >> + "or -1 for %qs", var->name); >> + inform (gfc_get_location (&expr->where), "Used here"); >> + return false; >> + } > I think it would be better formatted as > if (di->sym =3D=3D var) > { > if (!di->non_unit_iter) > { > ... > } > else > { > ... > } > } > >> + if (simple && !DECL_P (dovar)) >> + { >> + const char *name =3D code->ext.iterator->var->symtree->n.sym->nam= e; >> + local_dovar =3D gfc_create_var (type, name); >> + dovar_init e =3D {code->ext.iterator->var->symtree->n.sym, >> + dovar, local_dovar, false}; >> + inits.safe_push (e); >> + } > For the separate local_dovar case, I'd be worried if we handle lastprivat= e > right. From quick skimming I see some lastprivate clauses in some of > the tests, so if they verify the right value has been computed (say the > same as one would get with -fno-openmp), then fine. Tobias ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------RDrqHLajB0993hUbiAzUNRbG Content-Type: text/x-patch; charset="UTF-8"; name="omp-non-rect-v3.diff" Content-Disposition: attachment; filename="omp-non-rect-v3.diff" Content-Transfer-Encoding: base64 T3Blbk1QL0ZvcnRyYW46IFBhcnRpYWxseSBmaXggbm9uLXJlY3QgbG9vcCBuZXN0cyBbUFIx MDc0MjRdCgpUaGlzIHBhdGNoIGVuc3VyZXMgdGhhdCBsb29wIGJvdW5kcyBkZXBlbmRpbmcg b24gb3V0ZXIgbG9vcCB2YXJzIHVzZSB0aGUKcHJvcGVyIFRSRUVfVkVDIGZvcm1hdC4gSXQg YWRkaXRpb25hbGx5IGdpdmVzIGEgc29ycnkgaWYgc3VjaCBhbiBvdXRlcgp2YXIgaGFzIGEg bm9uLW9uZS9ub24tbWludXMtb25lIGluY3JlbWVudCBhcyBjdXJyZW50bHkgYSBjb3VudCB2 YXJpYWJsZQppcyB1c2VkIGluIHRoaXMgY2FzZSAoc2VlIFBSKS4KCkZpbmFsbHksIGl0IGF2 b2lkcyAnY291bnQnIGFuZCBqdXN0IHVzZXMgYSBsb2NhbCBsb29wIHZhcmlhYmxlIGlmIHRo ZQpzdGVwIGluY3JlbWVudCBpcyArLy0xLgoKCVBSIGZvcnRyYW4vMTA3NDI0CgpnY2MvZm9y dHJhbi9DaGFuZ2VMb2c6CgoJKiB0cmFucy1vcGVubXAuY2MgKHN0cnVjdCBkb3Zhcl9pbml0 X2QpOiBBZGQgJ3N5bScgYW5kCgknbm9uX3VuaXRfaW5jcicgbWVtYmVycy4KCShnZmNfbm9u cmVjdF9sb29wX2V4cHIpOiBOZXcuCgkoZ2ZjX3RyYW5zX29tcF9kbyk6IENhbGwgaXQ7IHVz ZSBub3JtYWwgbG9vcCBib3VuZHMKCWZvciB1bml0IHN0cmlkZSAtIGFuZCBvbmx5IGNyZWF0 ZSBsb2NhbCBsb29wIHZhci4KCmxpYmdvbXAvQ2hhbmdlTG9nOgoKCSogdGVzdHN1aXRlL2xp YmdvbXAuZm9ydHJhbi9ub24tcmVjdGFuZ3VsYXItbG9vcC0xLmY5MDogTmV3IHRlc3QuCgkq IHRlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbm9uLXJlY3Rhbmd1bGFyLWxvb3AtMWEuZjkw OiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9ub24tcmVjdGFuZ3Vs YXItbG9vcC0yLmY5MDogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4v bm9uLXJlY3Rhbmd1bGFyLWxvb3AtMy5mOTA6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGli Z29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTQuZjkwOiBOZXcgdGVzdC4KCSog dGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9ub24tcmVjdGFuZ3VsYXItbG9vcC01LmY5MDog TmV3IHRlc3QuCgpnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoKCgkqIGdmb3J0cmFuLmRnL2dv YWNjL3ByaXZhdGl6YXRpb24tMS1jb21wdXRlLWxvb3AuZjkwOiBVcGRhdGUgZGctbm90ZS4K CSogZ2ZvcnRyYW4uZGcvZ29hY2MvcHJpdmF0aXphdGlvbi0xLXJvdXRpbmVfZ2FuZy1sb29w LmY5MDogTGlrZXdpc2UuCgogZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjICAgICAgICAg ICAgICAgICAgICAgICAgfCAyNDEgKysrKysrLS0KIC4uLi9nb2FjYy9wcml2YXRpemF0aW9u LTEtY29tcHV0ZS1sb29wLmY5MCAgICAgICAgIHwgICA2ICstCiAuLi4vZ29hY2MvcHJpdmF0 aXphdGlvbi0xLXJvdXRpbmVfZ2FuZy1sb29wLmY5MCAgICB8ICAgMyArLQogLi4uL2xpYmdv bXAuZm9ydHJhbi9ub24tcmVjdGFuZ3VsYXItbG9vcC0xLmY5MCAgICAgfCA2NjggKysrKysr KysrKysrKysrKysrKysrCiAuLi4vbGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1s b29wLTFhLmY5MCAgICB8IDM3NCArKysrKysrKysrKysKIC4uLi9saWJnb21wLmZvcnRyYW4v bm9uLXJlY3Rhbmd1bGFyLWxvb3AtMi5mOTAgICAgIHwgMjQzICsrKysrKysrCiAuLi4vbGli Z29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTMuZjkwICAgICB8IDIxMiArKysr KysrCiAuLi4vbGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTQuZjkwICAg ICB8IDIxNSArKysrKysrCiAuLi4vbGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1s b29wLTUuZjkwICAgICB8ICAyOCArCiA5IGZpbGVzIGNoYW5nZWQsIDE5NDEgaW5zZXJ0aW9u cygrKSwgNDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMt b3Blbm1wLmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjCmluZGV4IDUyODNkMGNl NWYzLi4yZDE2ZjNiZThlYSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1w LmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYwpAQCAtNTExNiwxMCArNTEx NiwxMzggQEAgZ2ZjX3RyYW5zX29tcF9jcml0aWNhbCAoZ2ZjX2NvZGUgKmNvZGUpCiB9CiAK IHR5cGVkZWYgc3RydWN0IGRvdmFyX2luaXRfZCB7CisgIGdmY19zeW1ib2wgKnN5bTsKICAg dHJlZSB2YXI7CiAgIHRyZWUgaW5pdDsKKyAgYm9vbCBub25fdW5pdF9pdGVyOwogfSBkb3Zh cl9pbml0OwogCitzdGF0aWMgYm9vbAorZ2ZjX25vbnJlY3RfbG9vcF9leHByIChzdG10Ymxv Y2tfdCAqcGJsb2NrLCBnZmNfc2UgKnNlcCwgaW50IGxvb3BfbiwKKwkJICAgICAgIGdmY19j b2RlICpjb2RlLCBnZmNfZXhwciAqZXhwciwgdmVjPGRvdmFyX2luaXQ+ICppbml0cywKKwkJ ICAgICAgIGludCBzaW1wbGUsIGdmY19leHByICpjdXJyX2xvb3BfdmFyKQoreworICBpbnQg aTsKKyAgZm9yIChpID0gMDsgaSA8IGxvb3BfbjsgaSsrKQorICAgIHsKKyAgICAgIGdjY19h c3NlcnQgKGNvZGUtPmV4dC5pdGVyYXRvci0+dmFyLT5leHByX3R5cGUgPT0gRVhQUl9WQVJJ QUJMRSk7CisgICAgICBpZiAoZ2ZjX2ZpbmRfc3ltX2luX2V4cHIgKGNvZGUtPmV4dC5pdGVy YXRvci0+dmFyLT5zeW10cmVlLT5uLnN5bSwgZXhwcikpCisJYnJlYWs7CisgICAgICBjb2Rl ID0gY29kZS0+YmxvY2stPm5leHQ7CisgICAgfQorICBpZiAoaSA+PSBsb29wX24pCisgICAg cmV0dXJuIGZhbHNlOworCisgIC8qIENhbm9uaWNhbCBmb3JtYXQ6IFRSRUVfVkVDIHdpdGgg W3ZhciwgbXVsdGlwbGllciwgb2Zmc2V0XS4gICovCisgIGdmY19zeW1ib2wgKnZhciA9IGNv ZGUtPmV4dC5pdGVyYXRvci0+dmFyLT5zeW10cmVlLT5uLnN5bTsKKworICB0cmVlIHRyZWVf dmFyID0gTlVMTF9UUkVFOworICB0cmVlIGExID0gaW50ZWdlcl9vbmVfbm9kZTsKKyAgdHJl ZSBhMiA9IGludGVnZXJfemVyb19ub2RlOworCisgIGlmICghc2ltcGxlKQorICAgIHsKKyAg ICAgIC8qIEZJWE1FOiBIYW5kbGUgbm9uLXVuaXQgaXRlciBzdGVwcywgY2YuIFBSIGZvcnRy YW4vMTA3NDI0LiAgKi8KKyAgICAgIHNvcnJ5X2F0IChnZmNfZ2V0X2xvY2F0aW9uICgmY3Vy cl9sb29wX3Zhci0+d2hlcmUpLAorCQkibm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRo IHN0ZXAgb3RoZXIgdGhhbiBjb25zdGFudCAxICIKKwkJIm9yIC0xIGZvciAlcXMiLCBjdXJy X2xvb3BfdmFyLT5zeW10cmVlLT5uLnN5bS0+bmFtZSk7CisgICAgICByZXR1cm4gZmFsc2U7 CisgICAgfQorCisgIGRvdmFyX2luaXQgKmRpOworICB1bnNpZ25lZCBpeDsKKyAgRk9SX0VB Q0hfVkVDX0VMVCAoKmluaXRzLCBpeCwgZGkpCisgICAgaWYgKGRpLT5zeW0gPT0gdmFyKQor ICAgICAgeworCWlmICghZGktPm5vbl91bml0X2l0ZXIpCisJICB7CisJICAgIHRyZWVfdmFy ID0gZGktPmluaXQ7CisJICAgIGdjY19hc3NlcnQgKERFQ0xfUCAodHJlZV92YXIpKTsKKwkg ICAgYnJlYWs7CisJICB9CisJZWxzZQorCSAgeworCSAgICAvKiBGSVhNRTogSGFuZGxlIG5v bi11bml0IGl0ZXIgc3RlcHMsIGNmLiBQUiBmb3J0cmFuLzEwNzQyNC4gICovCisJICAgIHNv cnJ5X2F0IChnZmNfZ2V0X2xvY2F0aW9uICgmY29kZS0+bG9jKSwKKwkJICAgICAgIm5vbi1y ZWN0YW5ndWxhciBsb29wIG5lc3Qgd2l0aCBzdGVwIG90aGVyIHRoYW4gY29uc3RhbnQgIgor CQkgICAgICAiMSBvciAtMSBmb3IgJXFzIiwgdmFyLT5uYW1lKTsKKwkgICAgaW5mb3JtIChn ZmNfZ2V0X2xvY2F0aW9uICgmZXhwci0+d2hlcmUpLCAiVXNlZCBoZXJlIik7CisJICAgIHJl dHVybiBmYWxzZTsKKwkgIH0KKyAgICAgIH0KKyAgaWYgKHRyZWVfdmFyID09IE5VTExfVFJF RSkKKyAgICB0cmVlX3ZhciA9IHZhci0+YmFja2VuZF9kZWNsOworCisgIGlmIChleHByLT5l eHByX3R5cGUgPT0gRVhQUl9WQVJJQUJMRSkKKyAgICBnY2NfYXNzZXJ0IChleHByLT5zeW10 cmVlLT5uLnN5bSA9PSB2YXIpOworICBlbHNlIGlmIChleHByLT5leHByX3R5cGUgIT0gRVhQ Ul9PUAorCSAgIHx8IChleHByLT52YWx1ZS5vcC5vcCAhPSBJTlRSSU5TSUNfVElNRVMKKwkg ICAgICAgJiYgZXhwci0+dmFsdWUub3Aub3AgIT0gSU5UUklOU0lDX1BMVVMKKwkgICAgICAg JiYgZXhwci0+dmFsdWUub3Aub3AgIT0gSU5UUklOU0lDX01JTlVTKSkKKyAgICBnY2NfdW5y ZWFjaGFibGUgKCk7CisgIGVsc2UKKyAgICB7CisgICAgICBnZmNfc2Ugc2U7CisgICAgICBn ZmNfZXhwciAqZXQgPSBOVUxMLCAqZW8gPSBOVUxMLCAqZSA9IGV4cHI7CisgICAgICBpZiAo ZXhwci0+dmFsdWUub3Aub3AgIT0gSU5UUklOU0lDX1RJTUVTKQorCXsKKwkgIGlmIChnZmNf ZmluZF9zeW1faW5fZXhwciAodmFyLCBleHByLT52YWx1ZS5vcC5vcDEpKQorCSAgICB7CisJ ICAgICAgZSA9IGV4cHItPnZhbHVlLm9wLm9wMTsKKwkgICAgICBlbyA9IGV4cHItPnZhbHVl Lm9wLm9wMjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgZW8gPSBleHByLT52 YWx1ZS5vcC5vcDE7CisJICAgICAgZSA9IGV4cHItPnZhbHVlLm9wLm9wMjsKKwkgICAgfQor CX0KKyAgICAgIGlmIChlLT52YWx1ZS5vcC5vcCA9PSBJTlRSSU5TSUNfVElNRVMpCisJewor CSAgaWYgKGUtPnZhbHVlLm9wLm9wMS0+ZXhwcl90eXBlID09IEVYUFJfVkFSSUFCTEUKKwkg ICAgICAmJiBlLT52YWx1ZS5vcC5vcDEtPnN5bXRyZWUtPm4uc3ltID09IHZhcikKKwkgICAg ZXQgPSBlLT52YWx1ZS5vcC5vcDI7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBldCA9IGUt PnZhbHVlLm9wLm9wMTsKKwkgICAgICBnY2NfYXNzZXJ0IChlLT52YWx1ZS5vcC5vcDItPmV4 cHJfdHlwZSA9PSBFWFBSX1ZBUklBQkxFCisJCQkgICYmIGUtPnZhbHVlLm9wLm9wMi0+c3lt dHJlZS0+bi5zeW0gPT0gdmFyKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwlnY2NfYXNz ZXJ0IChlLT5leHByX3R5cGUgPT0gRVhQUl9WQVJJQUJMRSAmJiBlLT5zeW10cmVlLT5uLnN5 bSA9PSB2YXIpOworICAgICAgaWYgKGV0ICE9IE5VTEwpCisJeworCSAgZ2ZjX2luaXRfc2Ug KCZzZSwgTlVMTCk7CisJICBnZmNfY29udl9leHByX3ZhbCAoJnNlLCBldCk7CisJICBnZmNf YWRkX2Jsb2NrX3RvX2Jsb2NrIChwYmxvY2ssICZzZS5wcmUpOworCSAgYTEgPSBzZS5leHBy OworCX0KKyAgICAgIGlmIChlbyAhPSBOVUxMKQorCXsKKwkgIGdmY19pbml0X3NlICgmc2Us IE5VTEwpOworCSAgZ2ZjX2NvbnZfZXhwcl92YWwgKCZzZSwgZW8pOworCSAgZ2ZjX2FkZF9i bG9ja190b19ibG9jayAocGJsb2NrLCAmc2UucHJlKTsKKwkgIGEyID0gc2UuZXhwcjsKKwkg IGlmIChleHByLT52YWx1ZS5vcC5vcCA9PSBJTlRSSU5TSUNfTUlOVVMgJiYgZXhwci0+dmFs dWUub3Aub3AyID09IGVvKQorCSAgICAvKiBvdXRlci12YXIgLSBhMi4gICovCisJICAgIGEy ID0gZm9sZF9idWlsZDEgKE5FR0FURV9FWFBSLCBUUkVFX1RZUEUgKGEyKSwgYTIpOworCSAg ZWxzZSBpZiAoZXhwci0+dmFsdWUub3Aub3AgPT0gSU5UUklOU0lDX01JTlVTKQorCSAgICAv KiBhMiAtIG91dGVyLXZhci4gICovCisJICAgIGExID0gZm9sZF9idWlsZDEgKE5FR0FURV9F WFBSLCBUUkVFX1RZUEUgKGExKSwgYTEpOworCX0KKyAgICAgIGExID0gREVDTF9QIChhMSkg PyBhMSA6IGdmY19ldmFsdWF0ZV9ub3cgKGExLCBwYmxvY2spOworICAgICAgYTIgPSBERUNM X1AgKGEyKSA/IGEyIDogZ2ZjX2V2YWx1YXRlX25vdyAoYTIsIHBibG9jayk7CisgICAgfQor CisgIGdmY19pbml0X3NlIChzZXAsIE5VTEwpOworICBzZXAtPmV4cHIgPSBtYWtlX3RyZWVf dmVjICgzKTsKKyAgVFJFRV9WRUNfRUxUIChzZXAtPmV4cHIsIDApID0gdHJlZV92YXI7Cisg IFRSRUVfVkVDX0VMVCAoc2VwLT5leHByLCAxKSA9IGZvbGRfY29udmVydCAoVFJFRV9UWVBF ICh0cmVlX3ZhciksIGExKTsKKyAgVFJFRV9WRUNfRUxUIChzZXAtPmV4cHIsIDIpID0gZm9s ZF9jb252ZXJ0IChUUkVFX1RZUEUgKHRyZWVfdmFyKSwgYTIpOworCisgIHJldHVybiB0cnVl OworfQogCiBzdGF0aWMgdHJlZQogZ2ZjX3RyYW5zX29tcF9kbyAoZ2ZjX2NvZGUgKmNvZGUs IGdmY19leGVjX29wIG9wLCBzdG10YmxvY2tfdCAqcGJsb2NrLApAQCAtNTEyNyw3ICs1MjU1 LDcgQEAgZ2ZjX3RyYW5zX29tcF9kbyAoZ2ZjX2NvZGUgKmNvZGUsIGdmY19leGVjX29wIG9w LCBzdG10YmxvY2tfdCAqcGJsb2NrLAogewogICBnZmNfc2Ugc2U7CiAgIHRyZWUgZG92YXIs IHN0bXQsIGZyb20sIHRvLCBzdGVwLCB0eXBlLCBpbml0LCBjb25kLCBpbmNyLCBvcmlnX2Rl Y2xzOwotICB0cmVlIGNvdW50ID0gTlVMTF9UUkVFLCBjeWNsZV9sYWJlbCwgdG1wLCBvbXBf Y2xhdXNlczsKKyAgdHJlZSBsb2NhbF9kb3ZhciA9IE5VTExfVFJFRSwgY3ljbGVfbGFiZWws IHRtcCwgb21wX2NsYXVzZXM7CiAgIHN0bXRibG9ja190IGJsb2NrOwogICBzdG10YmxvY2tf dCBib2R5OwogICBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMgPSBjb2RlLT5leHQub21wX2Ns YXVzZXM7CkBAIC01MjE0LDUyICs1MzQyLDcyIEBAIGdmY190cmFuc19vbXBfZG8gKGdmY19j b2RlICpjb2RlLCBnZmNfZXhlY19vcCBvcCwgc3RtdGJsb2NrX3QgKnBibG9jaywKICAgICAg IGdmY19pbml0X3NlICgmc2UsIE5VTEwpOwogICAgICAgZ2ZjX2NvbnZfZXhwcl9saHMgKCZz ZSwgY29kZS0+ZXh0Lml0ZXJhdG9yLT52YXIpOwogICAgICAgZ2ZjX2FkZF9ibG9ja190b19i bG9jayAocGJsb2NrLCAmc2UucHJlKTsKLSAgICAgIGRvdmFyID0gc2UuZXhwcjsKKyAgICAg IGxvY2FsX2RvdmFyID0gZG92YXJfZGVjbCA9IGRvdmFyID0gc2UuZXhwcjsKICAgICAgIHR5 cGUgPSBUUkVFX1RZUEUgKGRvdmFyKTsKICAgICAgIGdjY19hc3NlcnQgKFRSRUVfQ09ERSAo dHlwZSkgPT0gSU5URUdFUl9UWVBFKTsKIAogICAgICAgZ2ZjX2luaXRfc2UgKCZzZSwgTlVM TCk7Ci0gICAgICBnZmNfY29udl9leHByX3ZhbCAoJnNlLCBjb2RlLT5leHQuaXRlcmF0b3It PnN0YXJ0KTsKKyAgICAgIGdmY19jb252X2V4cHJfdmFsICgmc2UsIGNvZGUtPmV4dC5pdGVy YXRvci0+c3RlcCk7CiAgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChwYmxvY2ssICZz ZS5wcmUpOwotICAgICAgZnJvbSA9IGdmY19ldmFsdWF0ZV9ub3cgKHNlLmV4cHIsIHBibG9j ayk7CisgICAgICBzdGVwID0gZ2ZjX2V2YWx1YXRlX25vdyAoc2UuZXhwciwgcGJsb2NrKTsK IAotICAgICAgZ2ZjX2luaXRfc2UgKCZzZSwgTlVMTCk7Ci0gICAgICBnZmNfY29udl9leHBy X3ZhbCAoJnNlLCBjb2RlLT5leHQuaXRlcmF0b3ItPmVuZCk7Ci0gICAgICBnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrIChwYmxvY2ssICZzZS5wcmUpOwotICAgICAgdG8gPSBnZmNfZXZhbHVh dGVfbm93IChzZS5leHByLCBwYmxvY2spOworICAgICAgaWYgKGludGVnZXJfb25lcCAoc3Rl cCkpCisJc2ltcGxlID0gMTsKKyAgICAgIGVsc2UgaWYgKHRyZWVfaW50X2NzdF9lcXVhbCAo c3RlcCwgaW50ZWdlcl9taW51c19vbmVfbm9kZSkpCisJc2ltcGxlID0gLTE7CiAKICAgICAg IGdmY19pbml0X3NlICgmc2UsIE5VTEwpOwotICAgICAgZ2ZjX2NvbnZfZXhwcl92YWwgKCZz ZSwgY29kZS0+ZXh0Lml0ZXJhdG9yLT5zdGVwKTsKLSAgICAgIGdmY19hZGRfYmxvY2tfdG9f YmxvY2sgKHBibG9jaywgJnNlLnByZSk7Ci0gICAgICBzdGVwID0gZ2ZjX2V2YWx1YXRlX25v dyAoc2UuZXhwciwgcGJsb2NrKTsKLSAgICAgIGRvdmFyX2RlY2wgPSBkb3ZhcjsKKyAgICAg IGlmICghY2xhdXNlcy0+bm9uX3JlY3Rhbmd1bGFyCisJICB8fCAhZ2ZjX25vbnJlY3RfbG9v cF9leHByIChwYmxvY2ssICZzZSwgaSwgb3JpZ19jb2RlLT5ibG9jay0+bmV4dCwKKwkJCQkg ICAgIGNvZGUtPmV4dC5pdGVyYXRvci0+c3RhcnQsICZpbml0cywgc2ltcGxlLAorCQkJCSAg ICAgY29kZS0+ZXh0Lml0ZXJhdG9yLT52YXIpKQorCXsKKwkgIGdmY19jb252X2V4cHJfdmFs ICgmc2UsIGNvZGUtPmV4dC5pdGVyYXRvci0+c3RhcnQpOworCSAgZ2ZjX2FkZF9ibG9ja190 b19ibG9jayAocGJsb2NrLCAmc2UucHJlKTsKKwkgIGlmICghREVDTF9QIChzZS5leHByKSkK KwkgICAgc2UuZXhwciA9IGdmY19ldmFsdWF0ZV9ub3cgKHNlLmV4cHIsIHBibG9jayk7CisJ fQorICAgICAgZnJvbSA9IHNlLmV4cHI7CiAKLSAgICAgIC8qIFNwZWNpYWwgY2FzZSBzaW1w bGUgbG9vcHMuICAqLwotICAgICAgaWYgKFZBUl9QIChkb3ZhcikpCisgICAgICBnZmNfaW5p dF9zZSAoJnNlLCBOVUxMKTsKKyAgICAgIGlmICghY2xhdXNlcy0+bm9uX3JlY3Rhbmd1bGFy CisJICB8fCAhZ2ZjX25vbnJlY3RfbG9vcF9leHByIChwYmxvY2ssICZzZSwgaSwgb3JpZ19j b2RlLT5ibG9jay0+bmV4dCwKKwkJCQkgICAgIGNvZGUtPmV4dC5pdGVyYXRvci0+ZW5kLCAm aW5pdHMsIHNpbXBsZSwKKwkJCQkgICAgIGNvZGUtPmV4dC5pdGVyYXRvci0+dmFyKSkKIAl7 Ci0JICBpZiAoaW50ZWdlcl9vbmVwIChzdGVwKSkKLQkgICAgc2ltcGxlID0gMTsKLQkgIGVs c2UgaWYgKHRyZWVfaW50X2NzdF9lcXVhbCAoc3RlcCwgaW50ZWdlcl9taW51c19vbmVfbm9k ZSkpCi0JICAgIHNpbXBsZSA9IC0xOworCSAgZ2ZjX2NvbnZfZXhwcl92YWwgKCZzZSwgY29k ZS0+ZXh0Lml0ZXJhdG9yLT5lbmQpOworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAocGJs b2NrLCAmc2UucHJlKTsKKwkgIGlmICghREVDTF9QIChzZS5leHByKSkKKwkgICAgc2UuZXhw ciA9IGdmY19ldmFsdWF0ZV9ub3cgKHNlLmV4cHIsIHBibG9jayk7CiAJfQotICAgICAgZWxz ZQorICAgICAgdG8gPSBzZS5leHByOworCisgICAgICBpZiAoIURFQ0xfUCAoZG92YXIpKQog CWRvdmFyX2RlY2wKIAkgID0gZ2ZjX3RyYW5zX29tcF92YXJpYWJsZSAoY29kZS0+ZXh0Lml0 ZXJhdG9yLT52YXItPnN5bXRyZWUtPm4uc3ltLAogCQkJCSAgICBmYWxzZSk7Ci0KKyAgICAg IGlmIChzaW1wbGUgJiYgIURFQ0xfUCAoZG92YXIpKQorCXsKKwkgIGNvbnN0IGNoYXIgKm5h bWUgPSBjb2RlLT5leHQuaXRlcmF0b3ItPnZhci0+c3ltdHJlZS0+bi5zeW0tPm5hbWU7CisJ ICBsb2NhbF9kb3ZhciA9IGdmY19jcmVhdGVfdmFyICh0eXBlLCBuYW1lKTsKKwkgIGRvdmFy X2luaXQgZSA9IHtjb2RlLT5leHQuaXRlcmF0b3ItPnZhci0+c3ltdHJlZS0+bi5zeW0sCisJ CQkgIGRvdmFyLCBsb2NhbF9kb3ZhciwgZmFsc2V9OworCSAgaW5pdHMuc2FmZV9wdXNoIChl KTsKKwl9CiAgICAgICAvKiBMb29wIGJvZHkuICAqLwogICAgICAgaWYgKHNpbXBsZSkKIAl7 Ci0JICBUUkVFX1ZFQ19FTFQgKGluaXQsIGkpID0gYnVpbGQyX3YgKE1PRElGWV9FWFBSLCBk b3ZhciwgZnJvbSk7CisJICBUUkVFX1ZFQ19FTFQgKGluaXQsIGkpID0gYnVpbGQyX3YgKE1P RElGWV9FWFBSLCBsb2NhbF9kb3ZhciwgZnJvbSk7CiAJICAvKiBUaGUgY29uZGl0aW9uIHNo b3VsZCBub3QgYmUgZm9sZGVkLiAgKi8KIAkgIFRSRUVfVkVDX0VMVCAoY29uZCwgaSkgPSBi dWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgc2ltcGxlID4gMAogCQkJCQkgICAgICAgPyBM RV9FWFBSIDogR0VfRVhQUiwKLQkJCQkJICAgICAgIGxvZ2ljYWxfdHlwZV9ub2RlLCBkb3Zh ciwgdG8pOworCQkJCQkgICAgICAgbG9naWNhbF90eXBlX25vZGUsIGxvY2FsX2RvdmFyLAor CQkJCQkgICAgICAgdG8pOwogCSAgVFJFRV9WRUNfRUxUIChpbmNyLCBpKSA9IGZvbGRfYnVp bGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIFBMVVNfRVhQUiwKLQkJCQkJCSAgICB0eXBlLCBk b3Zhciwgc3RlcCk7CisJCQkJCQkgICAgdHlwZSwgbG9jYWxfZG92YXIsIHN0ZXApOwogCSAg VFJFRV9WRUNfRUxUIChpbmNyLCBpKSA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRp b24sCiAJCQkJCQkgICAgTU9ESUZZX0VYUFIsCi0JCQkJCQkgICAgdHlwZSwgZG92YXIsCisJ CQkJCQkgICAgdHlwZSwgbG9jYWxfZG92YXIsCiAJCQkJCQkgICAgVFJFRV9WRUNfRUxUIChp bmNyLCBpKSk7CiAJICBpZiAob3JpZ19kZWNscyAmJiAhY2xhdXNlcy0+b3JkZXJlZGMpCiAJ ICAgIG9yaWdfZGVjbHMgPSBOVUxMOwpAQCAtNTI4MCwyNCArNTQyOCwyNyBAQCBnZmNfdHJh bnNfb21wX2RvIChnZmNfY29kZSAqY29kZSwgZ2ZjX2V4ZWNfb3Agb3AsIHN0bXRibG9ja190 ICpwYmxvY2ssCiAJICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBU UlVOQ19ESVZfRVhQUiwgdHlwZSwgdG1wLAogCQkJCSBzdGVwKTsKIAkgIHRtcCA9IGdmY19l dmFsdWF0ZV9ub3cgKHRtcCwgcGJsb2NrKTsKLQkgIGNvdW50ID0gZ2ZjX2NyZWF0ZV92YXIg KHR5cGUsICJjb3VudCIpOwotCSAgVFJFRV9WRUNfRUxUIChpbml0LCBpKSA9IGJ1aWxkMl92 IChNT0RJRllfRVhQUiwgY291bnQsCisJICBsb2NhbF9kb3ZhciA9IGdmY19jcmVhdGVfdmFy ICh0eXBlLCAiY291bnQiKTsKKwkgIFRSRUVfVkVDX0VMVCAoaW5pdCwgaSkgPSBidWlsZDJf diAoTU9ESUZZX0VYUFIsIGxvY2FsX2RvdmFyLAogCQkJCQkgICAgIGJ1aWxkX2ludF9jc3Qg KHR5cGUsIDApKTsKIAkgIC8qIFRoZSBjb25kaXRpb24gc2hvdWxkIG5vdCBiZSBmb2xkZWQu ICAqLwogCSAgVFJFRV9WRUNfRUxUIChjb25kLCBpKSA9IGJ1aWxkMl9sb2MgKGlucHV0X2xv Y2F0aW9uLCBMVF9FWFBSLAogCQkJCQkgICAgICAgbG9naWNhbF90eXBlX25vZGUsCi0JCQkJ CSAgICAgICBjb3VudCwgdG1wKTsKKwkJCQkJICAgICAgIGxvY2FsX2RvdmFyLCB0bXApOwog CSAgVFJFRV9WRUNfRUxUIChpbmNyLCBpKSA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9j YXRpb24sIFBMVVNfRVhQUiwKLQkJCQkJCSAgICB0eXBlLCBjb3VudCwKKwkJCQkJCSAgICB0 eXBlLCBsb2NhbF9kb3ZhciwKIAkJCQkJCSAgICBidWlsZF9pbnRfY3N0ICh0eXBlLCAxKSk7 CiAJICBUUkVFX1ZFQ19FTFQgKGluY3IsIGkpID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9s b2NhdGlvbiwKLQkJCQkJCSAgICBNT0RJRllfRVhQUiwgdHlwZSwgY291bnQsCisJCQkJCQkg ICAgTU9ESUZZX0VYUFIsIHR5cGUsCisJCQkJCQkgICAgbG9jYWxfZG92YXIsCiAJCQkJCQkg ICAgVFJFRV9WRUNfRUxUIChpbmNyLCBpKSk7CiAKIAkgIC8qIEluaXRpYWxpemUgRE9WQVIu ICAqLwotCSAgdG1wID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTVVMVF9F WFBSLCB0eXBlLCBjb3VudCwgc3RlcCk7CisJICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlu cHV0X2xvY2F0aW9uLCBNVUxUX0VYUFIsIHR5cGUsIGxvY2FsX2RvdmFyLAorCQkJCSBzdGVw KTsKIAkgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIFBMVVNfRVhQ UiwgdHlwZSwgZnJvbSwgdG1wKTsKLQkgIGRvdmFyX2luaXQgZSA9IHtkb3ZhciwgdG1wfTsK KwkgIGRvdmFyX2luaXQgZSA9IHtjb2RlLT5leHQuaXRlcmF0b3ItPnZhci0+c3ltdHJlZS0+ bi5zeW0sCisJCQkgIGRvdmFyLCB0bXAsIHRydWV9OwogCSAgaW5pdHMuc2FmZV9wdXNoIChl KTsKIAkgIGlmIChjbGF1c2VzLT5vcmRlcmVkYykKIAkgICAgewpAQCAtNTMxMiw3ICs1NDYz LDcgQEAgZ2ZjX3RyYW5zX29tcF9kbyAoZ2ZjX2NvZGUgKmNvZGUsIGdmY19leGVjX29wIG9w LCBzdG10YmxvY2tfdCAqcGJsb2NrLAogICAgICAgaWYgKGRvdmFyX2ZvdW5kID09IDMKIAkg ICYmIG9wID09IEVYRUNfT01QX1NJTUQKIAkgICYmIGNvbGxhcHNlID09IDEKLQkgICYmICFz aW1wbGUpCisJICAmJiBsb2NhbF9kb3ZhciAhPSBkb3ZhcikKIAl7CiAJICBmb3IgKHRtcCA9 IG9tcF9jbGF1c2VzOyB0bXA7IHRtcCA9IE9NUF9DTEFVU0VfQ0hBSU4gKHRtcCkpCiAJICAg IGlmIChPTVBfQ0xBVVNFX0NPREUgKHRtcCkgPT0gT01QX0NMQVVTRV9MSU5FQVIKQEAgLTUz MzEsMTEgKzU0ODIsMTEgQEAgZ2ZjX3RyYW5zX29tcF9kbyAoZ2ZjX2NvZGUgKmNvZGUsIGdm Y19leGVjX29wIG9wLCBzdG10YmxvY2tfdCAqcGJsb2NrLAogCSAgICAgIE9NUF9DTEFVU0Vf TElORUFSX05PX0NPUFlJTiAodG1wKSA9IDE7CiAJICAgICAgT01QX0NMQVVTRV9ERUNMICh0 bXApID0gZG92YXJfZGVjbDsKIAkgICAgICBvbXBfY2xhdXNlcyA9IGdmY190cmFuc19hZGRf Y2xhdXNlICh0bXAsIG9tcF9jbGF1c2VzKTsKKwkgICAgICBpZiAobG9jYWxfZG92YXIgIT0g ZG92YXIpCisJCWRvdmFyX2ZvdW5kID0gMzsKIAkgICAgfQotCSAgaWYgKCFzaW1wbGUpCi0J ICAgIGRvdmFyX2ZvdW5kID0gMzsKIAl9Ci0gICAgICBlbHNlIGlmICghZG92YXJfZm91bmQg JiYgIXNpbXBsZSkKKyAgICAgIGVsc2UgaWYgKCFkb3Zhcl9mb3VuZCAmJiBsb2NhbF9kb3Zh ciAhPSBkb3ZhcikKIAl7CiAJICB0bXAgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2Nh dGlvbiwgT01QX0NMQVVTRV9QUklWQVRFKTsKIAkgIE9NUF9DTEFVU0VfREVDTCAodG1wKSA9 IGRvdmFyX2RlY2w7CkBAIC01MzQ2LDcgKzU0OTcsNyBAQCBnZmNfdHJhbnNfb21wX2RvIChn ZmNfY29kZSAqY29kZSwgZ2ZjX2V4ZWNfb3Agb3AsIHN0bXRibG9ja190ICpwYmxvY2ssCiAJ ICB0cmVlIGMgPSBOVUxMOwogCiAJICB0bXAgPSBOVUxMOwotCSAgaWYgKCFzaW1wbGUpCisJ ICBpZiAobG9jYWxfZG92YXIgIT0gZG92YXIpCiAJICAgIHsKIAkgICAgICAvKiBJZiBkb3Zh ciBpcyBsYXN0cHJpdmF0ZSwgYnV0IGRpZmZlcmVudCBjb3VudGVyIGlzIHVzZWQsCiAJCSBk b3ZhciArPSBzdGVwIG5lZWRzIHRvIGJlIGFkZGVkIHRvCkBAIC01MzU2LDIxICs1NTA3LDE5 IEBAIGdmY190cmFuc19vbXBfZG8gKGdmY19jb2RlICpjb2RlLCBnZmNfZXhlY19vcCBvcCwg c3RtdGJsb2NrX3QgKnBibG9jaywKIAkgICAgICBpZiAoY2xhdXNlcy0+b3JkZXJlZGMpCiAJ CXsKIAkJICBpZiAoY2xhdXNlcy0+Y29sbGFwc2UgPD0gMSB8fCBpID49IGNsYXVzZXMtPmNv bGxhcHNlKQotCQkgICAgdG1wID0gY291bnQ7CisJCSAgICB0bXAgPSBsb2NhbF9kb3ZhcjsK IAkJICBlbHNlCiAJCSAgICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9u LCBQTFVTX0VYUFIsCi0JCQkJCSAgIHR5cGUsIGNvdW50LCBidWlsZF9vbmVfY3N0ICh0eXBl KSk7CisJCQkJCSAgIHR5cGUsIGxvY2FsX2RvdmFyLAorCQkJCQkgICBidWlsZF9vbmVfY3N0 ICh0eXBlKSk7CiAJCSAgdG1wID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwg TVVMVF9FWFBSLCB0eXBlLAogCQkJCQkgdG1wLCBzdGVwKTsKIAkJICB0bXAgPSBmb2xkX2J1 aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBQTFVTX0VYUFIsIHR5cGUsCiAJCQkJCSBmcm9t LCB0bXApOwogCQl9CiAJICAgICAgZWxzZQotCQl7Ci0JCSAgdG1wID0gZ2ZjX2V2YWx1YXRl X25vdyAoc3RlcCwgcGJsb2NrKTsKLQkJICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0 X2xvY2F0aW9uLCBQTFVTX0VYUFIsIHR5cGUsCi0JCQkJCSBkb3ZhciwgdG1wKTsKLQkJfQor CQl0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBQTFVTX0VYUFIsIHR5 cGUsCisJCQkJICAgICAgIGRvdmFyLCBzdGVwKTsKIAkgICAgICB0bXAgPSBmb2xkX2J1aWxk Ml9sb2MgKGlucHV0X2xvY2F0aW9uLCBNT0RJRllfRVhQUiwgdHlwZSwKIAkJCQkgICAgIGRv dmFyLCB0bXApOwogCSAgICAgIGZvciAoYyA9IG9tcF9jbGF1c2VzOyBjIDsgYyA9IE9NUF9D TEFVU0VfQ0hBSU4gKGMpKQpAQCAtNTQwNSw5ICs1NTU0LDkgQEAgZ2ZjX3RyYW5zX29tcF9k byAoZ2ZjX2NvZGUgKmNvZGUsIGdmY19leGVjX29wIG9wLCBzdG10YmxvY2tfdCAqcGJsb2Nr LAogCQkgICAgYnJlYWs7CiAJCSAgfQogCSAgICB9Ci0JICBnY2NfYXNzZXJ0IChzaW1wbGUg fHwgYyAhPSBOVUxMKTsKKwkgIGdjY19hc3NlcnQgKGxvY2FsX2RvdmFyID09IGRvdmFyIHx8 IGMgIT0gTlVMTCk7CiAJfQotICAgICAgaWYgKCFzaW1wbGUpCisgICAgICBpZiAobG9jYWxf ZG92YXIgIT0gZG92YXIpCiAJewogCSAgaWYgKG9wICE9IEVYRUNfT01QX1NJTUQgfHwgZG92 YXJfZm91bmQgPT0gMSkKIAkgICAgdG1wID0gYnVpbGRfb21wX2NsYXVzZSAoaW5wdXRfbG9j YXRpb24sIE9NUF9DTEFVU0VfUFJJVkFURSk7CkBAIC01NDIwLDcgKzU1NjksNyBAQCBnZmNf dHJhbnNfb21wX2RvIChnZmNfY29kZSAqY29kZSwgZ2ZjX2V4ZWNfb3Agb3AsIHN0bXRibG9j a190ICpwYmxvY2ssCiAJICAgIH0KIAkgIGVsc2UKIAkgICAgdG1wID0gYnVpbGRfb21wX2Ns YXVzZSAoaW5wdXRfbG9jYXRpb24sIE9NUF9DTEFVU0VfTEFTVFBSSVZBVEUpOwotCSAgT01Q X0NMQVVTRV9ERUNMICh0bXApID0gY291bnQ7CisJICBPTVBfQ0xBVVNFX0RFQ0wgKHRtcCkg PSBsb2NhbF9kb3ZhcjsKIAkgIG9tcF9jbGF1c2VzID0gZ2ZjX3RyYW5zX2FkZF9jbGF1c2Ug KHRtcCwgb21wX2NsYXVzZXMpOwogCX0KIApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy9nb2FjYy9wcml2YXRpemF0aW9uLTEtY29tcHV0ZS1sb29wLmY5MCBiL2dj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcHJpdmF0aXphdGlvbi0xLWNvbXB1dGUt bG9vcC5mOTAKaW5kZXggMTM3NzJjMTg1Y2UuLmFkNWUxMWFiZjkxIDEwMDY0NAotLS0gYS9n Y2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvYWNjL3ByaXZhdGl6YXRpb24tMS1jb21wdXRl LWxvb3AuZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcHJpdmF0 aXphdGlvbi0xLWNvbXB1dGUtbG9vcC5mOTAKQEAgLTQ3LDggKzQ3LDEwIEBAIGNvbnRhaW5z CiAgICAgICAgZW5kIGRvCiAgICAgZW5kIGRvCiAgICAgISRhY2MgZW5kIHBhcmFsbGVsCi0g ICAgISB7IGRnLW5vdGUge3ZhcmlhYmxlICdjb3VudFwuWzAtOV0rJyBkZWNsYXJlZCBpbiBi bG9jayBpc24ndCBjYW5kaWRhdGUgZm9yIGFkanVzdGluZyBPcGVuQUNDIHByaXZhdGl6YXRp b24gbGV2ZWw6IG5vdCBhZGRyZXNzYWJsZX0gIiIgeyB0YXJnZXQgKi0qLSogfSBsX2NvbXB1 dGUkY19jb21wdXRlIH0KLSAgICAhIHsgZGctbm90ZSB7dmFyaWFibGUgJ2NvdW50XC5bMC05 XSsnIGluICdwcml2YXRlJyBjbGF1c2UgaXNuJ3QgY2FuZGlkYXRlIGZvciBhZGp1c3Rpbmcg T3BlbkFDQyBwcml2YXRpemF0aW9uIGxldmVsOiBub3QgYWRkcmVzc2FibGV9ICIiIHsgdGFy Z2V0ICotKi0qIH0gbF9sb29wJGNfbG9vcCB9CisgICAgISB7IGRnLW5vdGUge3ZhcmlhYmxl ICdpXC5bMC05XSsnIGRlY2xhcmVkIGluIGJsb2NrIGlzbid0IGNhbmRpZGF0ZSBmb3IgYWRq dXN0aW5nIE9wZW5BQ0MgcHJpdmF0aXphdGlvbiBsZXZlbDogbm90IGFkZHJlc3NhYmxlfSAi IiB7IHRhcmdldCAqLSotKiB9IGxfY29tcHV0ZSRjX2NvbXB1dGUgfQorICAgICEgeyBkZy1u b3RlIHt2YXJpYWJsZSAnalwuWzAtOV0rJyBkZWNsYXJlZCBpbiBibG9jayBpc24ndCBjYW5k aWRhdGUgZm9yIGFkanVzdGluZyBPcGVuQUNDIHByaXZhdGl6YXRpb24gbGV2ZWw6IG5vdCBh ZGRyZXNzYWJsZX0gIiIgeyB0YXJnZXQgKi0qLSogfSBsX2NvbXB1dGUkY19jb21wdXRlIH0K KyAgICAhIHsgZGctbm90ZSB7dmFyaWFibGUgJ2lcLlswLTldKycgaW4gJ3ByaXZhdGUnIGNs YXVzZSBpc24ndCBjYW5kaWRhdGUgZm9yIGFkanVzdGluZyBPcGVuQUNDIHByaXZhdGl6YXRp b24gbGV2ZWw6IG5vdCBhZGRyZXNzYWJsZX0gIiIgeyB0YXJnZXQgKi0qLSogfSBsX2xvb3Ak Y19sb29wIH0KKyAgICAhIHsgZGctbm90ZSB7dmFyaWFibGUgJ2pcLlswLTldKycgaW4gJ3By aXZhdGUnIGNsYXVzZSBpc24ndCBjYW5kaWRhdGUgZm9yIGFkanVzdGluZyBPcGVuQUNDIHBy aXZhdGl6YXRpb24gbGV2ZWw6IG5vdCBhZGRyZXNzYWJsZX0gIiIgeyB0YXJnZXQgKi0qLSog fSBsX2xvb3AkY19sb29wIH0KICAgICAhIHsgZGctbm90ZSB7dmFyaWFibGUgJ2knIGluICdw cml2YXRlJyBjbGF1c2UgaXNuJ3QgY2FuZGlkYXRlIGZvciBhZGp1c3RpbmcgT3BlbkFDQyBw cml2YXRpemF0aW9uIGxldmVsOiBub3QgYWRkcmVzc2FibGV9ICIiIHsgdGFyZ2V0ICotKi0q IH0gbF9sb29wJGNfbG9vcCB9CiAgICAgISB7IGRnLW5vdGUge3ZhcmlhYmxlICdqJyBpbiAn cHJpdmF0ZScgY2xhdXNlIGlzbid0IGNhbmRpZGF0ZSBmb3IgYWRqdXN0aW5nIE9wZW5BQ0Mg cHJpdmF0aXphdGlvbiBsZXZlbDogbm90IGFkZHJlc3NhYmxlfSAiIiB7IHRhcmdldCAqLSot KiB9IGxfbG9vcCRjX2xvb3AgfQogICAgICEgeyBkZy1ub3RlIHt2YXJpYWJsZSAnYScgaW4g J3ByaXZhdGUnIGNsYXVzZSBpc24ndCBjYW5kaWRhdGUgZm9yIGFkanVzdGluZyBPcGVuQUND IHByaXZhdGl6YXRpb24gbGV2ZWw6IG5vdCBhZGRyZXNzYWJsZX0gIiIgeyB0YXJnZXQgKi0q LSogfSBsX2xvb3AkY19sb29wIH0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvZ29hY2MvcHJpdmF0aXphdGlvbi0xLXJvdXRpbmVfZ2FuZy1sb29wLmY5MCBiL2dj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcHJpdmF0aXphdGlvbi0xLXJvdXRpbmVf Z2FuZy1sb29wLmY5MAppbmRleCA2ODc4ZDg1NjkxOS4uYzVjMmYyYjk4NDUgMTAwNjQ0Ci0t LSBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcHJpdmF0aXphdGlvbi0xLXJv dXRpbmVfZ2FuZy1sb29wLmY5MAorKysgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dv YWNjL3ByaXZhdGl6YXRpb24tMS1yb3V0aW5lX2dhbmctbG9vcC5mOTAKQEAgLTQ2LDcgKzQ2 LDggQEAgY29udGFpbnMKICAgICAgICAgICB5ID0gYQogICAgICAgIGVuZCBkbwogICAgIGVu ZCBkbwotICAgICEgeyBkZy1ub3RlIHt2YXJpYWJsZSAnY291bnRcLlswLTldKycgaW4gJ3By aXZhdGUnIGNsYXVzZSBpc24ndCBjYW5kaWRhdGUgZm9yIGFkanVzdGluZyBPcGVuQUNDIHBy aXZhdGl6YXRpb24gbGV2ZWw6IG5vdCBhZGRyZXNzYWJsZX0gIiIgeyB0YXJnZXQgKi0qLSog fSBsX2xvb3AkY19sb29wIH0KKyAgICAhIHsgZGctbm90ZSB7dmFyaWFibGUgJ2lcLlswLTld KycgaW4gJ3ByaXZhdGUnIGNsYXVzZSBpc24ndCBjYW5kaWRhdGUgZm9yIGFkanVzdGluZyBP cGVuQUNDIHByaXZhdGl6YXRpb24gbGV2ZWw6IG5vdCBhZGRyZXNzYWJsZX0gIiIgeyB0YXJn ZXQgKi0qLSogfSBsX2xvb3AkY19sb29wIH0KKyAgICAhIHsgZGctbm90ZSB7dmFyaWFibGUg J2pcLlswLTldKycgaW4gJ3ByaXZhdGUnIGNsYXVzZSBpc24ndCBjYW5kaWRhdGUgZm9yIGFk anVzdGluZyBPcGVuQUNDIHByaXZhdGl6YXRpb24gbGV2ZWw6IG5vdCBhZGRyZXNzYWJsZX0g IiIgeyB0YXJnZXQgKi0qLSogfSBsX2xvb3AkY19sb29wIH0KICAgICAhIHsgZGctbm90ZSB7 dmFyaWFibGUgJ2knIGluICdwcml2YXRlJyBjbGF1c2UgaXNuJ3QgY2FuZGlkYXRlIGZvciBh ZGp1c3RpbmcgT3BlbkFDQyBwcml2YXRpemF0aW9uIGxldmVsOiBub3QgYWRkcmVzc2FibGV9 ICIiIHsgdGFyZ2V0ICotKi0qIH0gbF9sb29wJGNfbG9vcCB9CiAgICAgISB7IGRnLW5vdGUg e3ZhcmlhYmxlICdqJyBpbiAncHJpdmF0ZScgY2xhdXNlIGlzbid0IGNhbmRpZGF0ZSBmb3Ig YWRqdXN0aW5nIE9wZW5BQ0MgcHJpdmF0aXphdGlvbiBsZXZlbDogbm90IGFkZHJlc3NhYmxl fSAiIiB7IHRhcmdldCAqLSotKiB9IGxfbG9vcCRjX2xvb3AgfQogICAgICEgeyBkZy1ub3Rl IHt2YXJpYWJsZSAnYScgaW4gJ3ByaXZhdGUnIGNsYXVzZSBpc24ndCBjYW5kaWRhdGUgZm9y IGFkanVzdGluZyBPcGVuQUNDIHByaXZhdGl6YXRpb24gbGV2ZWw6IG5vdCBhZGRyZXNzYWJs ZX0gIiIgeyB0YXJnZXQgKi0qLSogfSBsX2xvb3AkY19sb29wIH0KZGlmZiAtLWdpdCBhL2xp YmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9ub24tcmVjdGFuZ3VsYXItbG9vcC0x LmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9ub24tcmVjdGFuZ3Vs YXItbG9vcC0xLmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u ZGJiZDE4YTE0NDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJn b21wLmZvcnRyYW4vbm9uLXJlY3Rhbmd1bGFyLWxvb3AtMS5mOTAKQEAgLTAsMCArMSw2Njgg QEAKKyEgeyBkZy1kbyBydW4gfQorISB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLW1zc2Uy IiB7IHRhcmdldCBzc2UyX3J1bnRpbWUgfSB9CishIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItbWF2eCIgeyB0YXJnZXQgYXZ4X3J1bnRpbWUgfSB9CisKKyEgUFIgZm9ydHJhbi8xMDc0 MjQKKworISBOb25yZWN0YW5ndWxhciBsb29wIG5lc3RzIGNoZWNrcworCishIFNlZSBQUiBv ciBub24tcmVjdGFuZ3VsYXItbG9vcC0xYS5mOTAgZm9yIHRoZSBjb21tZW50ZWQgdGVzdHMK KyEgSGludDogVGhvc2UgdXNlIHN0ZXAgZm9yIGxvb3AgdmFycyBwYXJ0IG9mIG5vbnJlY3Rh bmd1bGFyIGxvb3AgbmVzdHMKKworbW9kdWxlIG0KKyAgaW1wbGljaXQgbm9uZSAodHlwZSwg ZXh0ZXJuYWwpCitjb250YWlucworCishIFRoZSAnaycgbG9vcCB1c2VzIGkgb3IgaiBhcyBz dGFydCB2YWx1ZQorISBidXQgYSBjb25zdGFudCBlbmQgdmFsdWUgc3VjaCB0aGF0ICdsYXN0 cHJpdmF0ZScKKyEgc2hvdWxkIGJlIHdlbGwtZGVmaW5lZAorc3Vicm91dGluZSBsYXN0cHJp dmF0ZV9jaGVja19zaW1kXzEKKyAgaW50ZWdlciA6OiBuLG0scCwgaSxqLGsKKworICBuID0g MTEKKyAgbSA9IDIzCisgIHAgPSAyNworCisgICEgVXNlICdpJyBvciAnaicsIHVuaXQgc3Rl cCBvbiAnaScgb3Igb24gJ2onIC0+IDQgbG9vcHMKKyAgISBUaGVuIHNhbWUsIGV4Y2VwdCB1 c2Ugbm9uLXVuaXQgc3RlcCBmb3IgJ2snCisKKyEgICEkb21wIHNpbWQgY29sbGFwc2UoMykg bGFzdHByaXZhdGUoaykKKyEgIGRvIGkgPSAxLCBuCishICAgIGRvIGogPSAxLCBtLCAyCish ICAgICAgZG8gayA9IGogLSA0MSwgcAorISAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBr ID4gcCkgZXJyb3Igc3RvcAorISAgICAgIGVuZCBkbworISAgICBlbmQgZG8KKyEgIGVuZCBk bworISAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKworISAgISRvbXAgc2ltZCBjb2xs YXBzZSgzKSBsYXN0cHJpdmF0ZShrKQorISAgZG8gaSA9IDEsIG4sIDIKKyEgICAgZG8gaiA9 IDEsIG0KKyEgICAgICBkbyBrID0gaSAtIDQxLCBwCishICAgICAgICBpZiAoayA8IDEgLSA0 MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCishICAgICAgZW5kIGRvCishICAgIGVuZCBkbwor ISAgZW5kIGRvCishICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorCisgICEkb21wIHNp bWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykKKyAgZG8gaSA9IDEsIG4sIDIKKyAgICBk byBqID0gMSwgbQorICAgICAgZG8gayA9IGogLSA0MSwgcAorICAgICAgICBpZiAoayA8IDEg LSA0MSAub3IuIGsgPiBwKSB0aGVuCisgICAgICAgICAgcHJpbnQgKiwgaSwgaiwgayxwLCAi IC0+IGksIGosIGssIHAgICAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSIKKyAgICAgICAgICBl cnJvciBzdG9wCisgICAgICAgIGVuZCBpZgorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisg IGVuZCBkbworICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorCisgIGsgPSAtNDMKKyAg bSA9IDAKKyAgISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKQorICBkbyBp ID0gMSwgbiwgMgorICAgIGRvIGogPSAxLCBtCisgICAgICBkbyBrID0gaiAtIDQxLCBwCisg ICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIHRoZW4KKyAgICAgICAgICBwcmlu dCAqLCBpLCBqLCBrLHAsICIgLT4gaSwgaiwgaywgcCAgIChrIDwgMSAtIDQxIC5vci4gayA+ IHApIgorICAgICAgICAgIGVycm9yIHN0b3AKKyAgICAgICAgZW5kIGlmCisgICAgICBlbmQg ZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IC00MykgZXJyb3Igc3RvcAor CisgIG0gPSAyMworCisgICEkb21wIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykK KyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbSwgMgorICAgICAgZG8gayA9IGkgLSA0 MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisg ICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBl cnJvciBzdG9wCisKKyAgbiA9IC01CisgIGsgPSAtIDcwCisgICEkb21wIHNpbWQgY29sbGFw c2UoMykgbGFzdHByaXZhdGUoaykKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbSwg MgorICAgICAgZG8gayA9IGkgLSA0MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3Iu IGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRv CisgIGlmIChrIC89IC03MCkgZXJyb3Igc3RvcAorCisgIG4gPSAxMQorCisgICEgU2FtZSBi dXQgJ3ByaXZhdGUnIGZvciBhbGwgKGksaikgdmFycworCishICAhJG9tcCBzaW1kIGNvbGxh cHNlKDMpIGxhc3Rwcml2YXRlKGspIHByaXZhdGUoaSxqKQorISAgZG8gaSA9IDEsIG4KKyEg ICAgZG8gaiA9IDEsIG0sIDIKKyEgICAgICBkbyBrID0gaiAtIDQxLCBwCishICAgICAgICBp ZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCishICAgICAgZW5kIGRvCish ICAgIGVuZCBkbworISAgZW5kIGRvCishICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAor IQorISAgISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKSBwcml2YXRlKGks aikKKyEgIGRvIGkgPSAxLCBuLCAyCishICAgIGRvIGogPSAxLCBtCishICAgICAgZG8gayA9 IGkgLSA0MSwgcAorISAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Ig c3RvcAorISAgICAgIGVuZCBkbworISAgICBlbmQgZG8KKyEgIGVuZCBkbworISAgaWYgKGsg Lz0gcCArIDEpIGVycm9yIHN0b3AKKworICAhJG9tcCBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rw cml2YXRlKGspIHByaXZhdGUoaSxqKQorICBkbyBpID0gMSwgbiwgMgorICAgIGRvIGogPSAx LCBtCisgICAgICBkbyBrID0gaiAtIDQxLCBwCisgICAgICAgIGlmIChrIDwgMSAtIDQxIC5v ci4gayA+IHApIGVycm9yIHN0b3AKKyAgICAgIGVuZCBkbworICAgIGVuZCBkbworICBlbmQg ZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKworICAhJG9tcCBzaW1kIGNvbGxh cHNlKDMpIGxhc3Rwcml2YXRlKGspIHByaXZhdGUoaSxqKQorICBkbyBpID0gMSwgbgorICAg IGRvIGogPSAxLCBtLCAyCisgICAgICBkbyBrID0gaSAtIDQxLCBwCisgICAgICAgIGlmIChr IDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAgICAgIGVuZCBkbworICAgIGVu ZCBkbworICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKworICAhIFNh bWUgLSBidXQgd2l0aCBsYXN0cHJpdmF0ZShpLGopCisKKyEgICEkb21wIHNpbWQgY29sbGFw c2UoMykgbGFzdHByaXZhdGUoaykgbGFzdHByaXZhdGUoaSxqKQorISAgZG8gaSA9IDEsIG4K KyEgICAgZG8gaiA9IDEsIG0sIDIKKyEgICAgICBkbyBrID0gaiAtIDQxLCBwCishICAgICAg ICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCishICAgICAgZW5kIGRv CishICAgIGVuZCBkbworISAgZW5kIGRvCishICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3Rv cAorISAgaWYgKGkgLz0gbiArIDEgLm9yLiBqIC89IG0gKyAyKSBlcnJvciBzdG9wCisKKyEg ICEkb21wIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykgbGFzdHByaXZhdGUoaSxq KQorISAgZG8gaSA9IDEsIG4sIDIKKyEgICAgZG8gaiA9IDEsIG0KKyEgICAgICBkbyBrID0g aSAtIDQxLCBwCishICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBz dG9wCishICAgICAgZW5kIGRvCishICAgIGVuZCBkbworISAgZW5kIGRvCishICBpZiAoayAv PSBwICsgMSkgZXJyb3Igc3RvcAorISAgaWYgKGkgLz0gbiArIDIgLm9yLiBqIC89IG0gKyAx KSBlcnJvciBzdG9wCisKKyAgISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShr KSBsYXN0cHJpdmF0ZShpLGopCisgIGRvIGkgPSAxLCBuLCAyCisgICAgZG8gaiA9IDEsIG0K KyAgICAgIGRvIGsgPSBqIC0gNDEsIHAKKyAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBr ID4gcCkgZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVuZCBkbwor ICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorICBpZiAoaSAvPSBuICsgMiAub3IuIGog Lz0gbSArIDEpIGVycm9yIHN0b3AKKworICAhJG9tcCBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rw cml2YXRlKGspIGxhc3Rwcml2YXRlKGksaikKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0g MSwgbSwgMgorICAgICAgZG8gayA9IGkgLSA0MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0 MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAg ZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisgIGlmIChpIC89IG4gKyAx IC5vci4gaiAvPSBtICsgMikgZXJyb3Igc3RvcAorZW5kIHN1YnJvdXRpbmUgbGFzdHByaXZh dGVfY2hlY2tfc2ltZF8xCisKKworISBTYW1lIGJ1dCB3aXRoIGRvIHNpbWQKK3N1YnJvdXRp bmUgbGFzdHByaXZhdGVfY2hlY2tfZG9fc2ltZF8xCisgIGludGVnZXIgOjogbixtLHAsIGks aixrCisKKyAgbiA9IDExCisgIG0gPSAyMworICBwID0gMjcKKworICAhIFVzZSAnaScgb3Ig J2onLCB1bml0IHN0ZXAgb24gJ2knIG9yIG9uICdqJyAtPiA0IGxvb3BzCisgICEgVGhlbiBz YW1lLCBleGNlcHQgdXNlIG5vbi11bml0IHN0ZXAgZm9yICdrJworCishICAhJG9tcCBwYXJh bGxlbCBkbyBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspCishICBkbyBpID0gMSwg bgorISAgICBkbyBqID0gMSwgbSwgMgorISAgICAgIGRvIGsgPSBqIC0gNDEsIHAKKyEgICAg ICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyEgICAgICBlbmQg ZG8KKyEgICAgZW5kIGRvCishICBlbmQgZG8KKyEgIGlmIChrIC89IHAgKyAxKSBlcnJvciBz dG9wCisKKyEgICEkb21wIHBhcmFsbGVsIGRvIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZh dGUoaykKKyEgIGRvIGkgPSAxLCBuLCAyCishICAgIGRvIGogPSAxLCBtCishICAgICAgZG8g ayA9IGkgLSA0MSwgcAorISAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJy b3Igc3RvcAorISAgICAgIGVuZCBkbworISAgICBlbmQgZG8KKyEgIGVuZCBkbworISAgaWYg KGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKworICAhJG9tcCBwYXJhbGxlbCBkbyBzaW1kIGNv bGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspCisgIGRvIGkgPSAxLCBuLCAyCisgICAgZG8gaiA9 IDEsIG0KKyAgICAgIGRvIGsgPSBqIC0gNDEsIHAKKyAgICAgICAgaWYgKGsgPCAxIC0gNDEg Lm9yLiBrID4gcCkgZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVu ZCBkbworICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorCisgICEkb21wIHBhcmFsbGVs IGRvIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykKKyAgZG8gaSA9IDEsIG4KKyAg ICBkbyBqID0gMSwgbSwgMgorICAgICAgZG8gayA9IGkgLSA0MSwgcAorICAgICAgICBpZiAo ayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBl bmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISBT YW1lIGJ1dCAncHJpdmF0ZScgZm9yIGFsbCAoaSxqKSB2YXJzCisKKyEgICEkb21wIHBhcmFs bGVsIGRvIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykgcHJpdmF0ZShpLGopCish ICBkbyBpID0gMSwgbgorISAgICBkbyBqID0gMSwgbSwgMgorISAgICAgIGRvIGsgPSBqIC0g NDEsIHAKKyEgICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AK KyEgICAgICBlbmQgZG8KKyEgICAgZW5kIGRvCishICBlbmQgZG8KKyEgIGlmIChrIC89IHAg KyAxKSBlcnJvciBzdG9wCisKKyEgICEkb21wIHBhcmFsbGVsIGRvIHNpbWQgY29sbGFwc2Uo MykgbGFzdHByaXZhdGUoaykgcHJpdmF0ZShpLGopCishICBkbyBpID0gMSwgbiwgMgorISAg ICBkbyBqID0gMSwgbQorISAgICAgIGRvIGsgPSBpIC0gNDEsIHAKKyEgICAgICAgIGlmIChr IDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyEgICAgICBlbmQgZG8KKyEgICAg ZW5kIGRvCishICBlbmQgZG8KKyEgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyAg ISRvbXAgcGFyYWxsZWwgZG8gc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKSBwcml2 YXRlKGksaikKKyAgZG8gaSA9IDEsIG4sIDIKKyAgICBkbyBqID0gMSwgbQorICAgICAgZG8g ayA9IGogLSA0MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJv ciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89 IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISRvbXAgcGFyYWxsZWwgZG8gc2ltZCBjb2xsYXBz ZSgzKSBsYXN0cHJpdmF0ZShrKSBwcml2YXRlKGksaikKKyAgZG8gaSA9IDEsIG4KKyAgICBk byBqID0gMSwgbSwgMgorICAgICAgZG8gayA9IGkgLSA0MSwgcAorICAgICAgICBpZiAoayA8 IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQg ZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISBTYW1l IC0gYnV0IHdpdGggbGFzdHByaXZhdGUoaSxqKQorCishICAhJG9tcCBwYXJhbGxlbCBkbyBz aW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIGxhc3Rwcml2YXRlKGksaikKKyEgIGRv IGkgPSAxLCBuCishICAgIGRvIGogPSAxLCBtLCAyCishICAgICAgZG8gayA9IGogLSA0MSwg cAorISAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorISAg ICAgIGVuZCBkbworISAgICBlbmQgZG8KKyEgIGVuZCBkbworISAgaWYgKGsgLz0gcCArIDEp IGVycm9yIHN0b3AKKyEgIGlmIChpIC89IG4gKyAxIC5vci4gaiAvPSBtICsgMikgZXJyb3Ig c3RvcAorCishICAhJG9tcCBwYXJhbGxlbCBkbyBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2 YXRlKGspIGxhc3Rwcml2YXRlKGksaikKKyEgIGRvIGkgPSAxLCBuLCAyCishICAgIGRvIGog PSAxLCBtCishICAgICAgZG8gayA9IGkgLSA0MSwgcAorISAgICAgICAgaWYgKGsgPCAxIC0g NDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorISAgICAgIGVuZCBkbworISAgICBlbmQgZG8K KyEgIGVuZCBkbworISAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKyEgIGlmIChpIC89 IG4gKyAyIC5vci4gaiAvPSBtICsgMSkgZXJyb3Igc3RvcAorCisgICEkb21wIHBhcmFsbGVs IGRvIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykgbGFzdHByaXZhdGUoaSxqKQor ICBkbyBpID0gMSwgbiwgMgorICAgIGRvIGogPSAxLCBtCisgICAgICBkbyBrID0gaiAtIDQx LCBwCisgICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAg ICAgIGVuZCBkbworICAgIGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVy cm9yIHN0b3AKKyAgaWYgKGkgLz0gbiArIDIgLm9yLiBqIC89IG0gKyAxKSBlcnJvciBzdG9w CisKKyAgISRvbXAgcGFyYWxsZWwgZG8gc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShr KSBsYXN0cHJpdmF0ZShpLGopCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG0sIDIK KyAgICAgIGRvIGsgPSBpIC0gNDEsIHAKKyAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBr ID4gcCkgZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVuZCBkbwor ICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorICBpZiAoaSAvPSBuICsgMSAub3IuIGog Lz0gbSArIDIpIGVycm9yIHN0b3AKK2VuZCBzdWJyb3V0aW5lIGxhc3Rwcml2YXRlX2NoZWNr X2RvX3NpbWRfMQorCisKKworISBTYW1lIGJ1dCB3aXRoIGRvCitzdWJyb3V0aW5lIGxhc3Rw cml2YXRlX2NoZWNrX2RvXzEKKyAgaW50ZWdlciA6OiBuLG0scCwgaSxqLGsKKworICBuID0g MTEKKyAgbSA9IDIzCisgIHAgPSAyNworCisgICEgVXNlICdpJyBvciAnaicsIHVuaXQgc3Rl cCBvbiAnaScgb3Igb24gJ2onIC0+IDQgbG9vcHMKKyAgISBUaGVuIHNhbWUsIGV4Y2VwdCB1 c2Ugbm9uLXVuaXQgc3RlcCBmb3IgJ2snCisKKyEgICEkb21wIHBhcmFsbGVsIGRvIGNvbGxh cHNlKDMpIGxhc3Rwcml2YXRlKGspCishICBkbyBpID0gMSwgbgorISAgICBkbyBqID0gMSwg bSwgMgorISAgICAgIGRvIGsgPSBqIC0gNDEsIHAKKyEgICAgICAgIGlmIChrIDwgMSAtIDQx IC5vci4gayA+IHApIGVycm9yIHN0b3AKKyEgICAgICBlbmQgZG8KKyEgICAgZW5kIGRvCish ICBlbmQgZG8KKyEgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyEgICEkb21wIHBh cmFsbGVsIGRvIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspCishICBkbyBpID0gMSwgbiwg MgorISAgICBkbyBqID0gMSwgbQorISAgICAgIGRvIGsgPSBpIC0gNDEsIHAKKyEgICAgICAg IGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyEgICAgICBlbmQgZG8K KyEgICAgZW5kIGRvCishICBlbmQgZG8KKyEgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9w CisKKyAgISRvbXAgcGFyYWxsZWwgZG8gY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykKKyAg ZG8gaSA9IDEsIG4sIDIKKyAgICBkbyBqID0gMSwgbQorICAgICAgZG8gayA9IGogLSA0MSwg cAorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAg ICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJv ciBzdG9wCisKKyAgISRvbXAgcGFyYWxsZWwgZG8gY29sbGFwc2UoMykgbGFzdHByaXZhdGUo aykKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbSwgMgorICAgICAgZG8gayA9IGkg LSA0MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9w CisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAx KSBlcnJvciBzdG9wCisKKyAgISBTYW1lIGJ1dCAncHJpdmF0ZScgZm9yIGFsbCAoaSxqKSB2 YXJzCisKKyEgICEkb21wIHBhcmFsbGVsIGRvIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGsp IHByaXZhdGUoaSxqKQorISAgZG8gaSA9IDEsIG4KKyEgICAgZG8gaiA9IDEsIG0sIDIKKyEg ICAgICBkbyBrID0gaiAtIDQxLCBwCishICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsg PiBwKSBlcnJvciBzdG9wCishICAgICAgZW5kIGRvCishICAgIGVuZCBkbworISAgZW5kIGRv CishICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorCishICAhJG9tcCBwYXJhbGxlbCBk byBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKSBwcml2YXRlKGksaikKKyEgIGRvIGkgPSAx LCBuLCAyCishICAgIGRvIGogPSAxLCBtCishICAgICAgZG8gayA9IGkgLSA0MSwgcAorISAg ICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorISAgICAgIGVu ZCBkbworISAgICBlbmQgZG8KKyEgIGVuZCBkbworISAgaWYgKGsgLz0gcCArIDEpIGVycm9y IHN0b3AKKworICAhJG9tcCBwYXJhbGxlbCBkbyBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShr KSBwcml2YXRlKGksaikKKyAgZG8gaSA9IDEsIG4sIDIKKyAgICBkbyBqID0gMSwgbQorICAg ICAgZG8gayA9IGogLSA0MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBw KSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlm IChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISRvbXAgcGFyYWxsZWwgZG8gY29sbGFw c2UoMykgbGFzdHByaXZhdGUoaykgcHJpdmF0ZShpLGopCisgIGRvIGkgPSAxLCBuCisgICAg ZG8gaiA9IDEsIG0sIDIKKyAgICAgIGRvIGsgPSBpIC0gNDEsIHAKKyAgICAgICAgaWYgKGsg PCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisgICAgZW5k IGRvCisgIGVuZCBkbworICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorCisgICEgU2Ft ZSAtIGJ1dCB3aXRoIGxhc3Rwcml2YXRlKGksaikKKworISAgISRvbXAgcGFyYWxsZWwgZG8g Y29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykgbGFzdHByaXZhdGUoaSxqKQorISAgZG8gaSA9 IDEsIG4KKyEgICAgZG8gaiA9IDEsIG0sIDIKKyEgICAgICBkbyBrID0gaiAtIDQxLCBwCish ICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCishICAgICAg ZW5kIGRvCishICAgIGVuZCBkbworISAgZW5kIGRvCishICBpZiAoayAvPSBwICsgMSkgZXJy b3Igc3RvcAorISAgaWYgKGkgLz0gbiArIDEgLm9yLiBqIC89IG0gKyAyKSBlcnJvciBzdG9w CisKKyEgICEkb21wIHBhcmFsbGVsIGRvIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIGxh c3Rwcml2YXRlKGksaikKKyEgIGRvIGkgPSAxLCBuLCAyCishICAgIGRvIGogPSAxLCBtCish ICAgICAgZG8gayA9IGkgLSA0MSwgcAorISAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBr ID4gcCkgZXJyb3Igc3RvcAorISAgICAgIGVuZCBkbworISAgICBlbmQgZG8KKyEgIGVuZCBk bworISAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKyEgIGlmIChpIC89IG4gKyAyIC5v ci4gaiAvPSBtICsgMSkgZXJyb3Igc3RvcAorCisgICEkb21wIHBhcmFsbGVsIGRvIGNvbGxh cHNlKDMpIGxhc3Rwcml2YXRlKGspIGxhc3Rwcml2YXRlKGksaikKKyAgZG8gaSA9IDEsIG4s IDIKKyAgICBkbyBqID0gMSwgbQorICAgICAgZG8gayA9IGogLSA0MSwgcAorICAgICAgICBp ZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAg ICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisgIGlm IChpIC89IG4gKyAyIC5vci4gaiAvPSBtICsgMSkgZXJyb3Igc3RvcAorCisgICEkb21wIHBh cmFsbGVsIGRvIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIGxhc3Rwcml2YXRlKGksaikK KyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbSwgMgorICAgICAgZG8gayA9IGkgLSA0 MSwgcAorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisg ICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBl cnJvciBzdG9wCisgIGlmIChpIC89IG4gKyAxIC5vci4gaiAvPSBtICsgMikgZXJyb3Igc3Rv cAorZW5kIHN1YnJvdXRpbmUgbGFzdHByaXZhdGVfY2hlY2tfZG9fMQorCisKKworc3Vicm91 dGluZSBsYXN0cHJpdmF0ZV9jaGVja18yCisgIGludGVnZXIgOjogbixtLHAsIGksaixrLGxs CisKKyAgbiA9IDExCisgIG0gPSAyMworICBwID0gMjcKKworISAgISRvbXAgcGFyYWxsZWwg ZG8gc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShwKQorISAgZG8gaSA9IDEsIG4KKyEg ICAgZG8gaiA9IDEsIG0sMgorISAgICAgIGRvIGsgPSAxLCBqICsgNDEKKyEgICAgICAgIGRv IGxsID0gMSwgcCwgMgorISAgICAgICAgICBpZiAoayA+IDIzICsgNDEgLm9yLiBrIDwgMSkg ZXJyb3Igc3RvcAorISAgICAgICAgZW5kIGRvCishICAgICAgZW5kIGRvCishICAgIGVuZCBk bworISAgZW5kIGRvCishICBpZiAobGwgLz0gMjkpIGVycm9yIHN0b3AKKworISAgISRvbXAg c2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShwKQorISAgZG8gaSA9IDEsIG4KKyEgICAg ZG8gaiA9IDEsIG0sMgorISAgICAgIGRvIGsgPSAxLCBqICsgNDEKKyEgICAgICAgIGRvIGxs ID0gMSwgcCwgMgorISAgICAgICAgICBpZiAoayA+IDIzICsgNDEgLm9yLiBrIDwgMSkgZXJy b3Igc3RvcAorISAgICAgICAgZW5kIGRvCishICAgICAgZW5kIGRvCishICAgIGVuZCBkbwor ISAgZW5kIGRvCishICBpZiAobGwgLz0gMjkpIGVycm9yIHN0b3AKKworISAgISRvbXAgc2lt ZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKQorISAgZG8gaSA9IDEsIG4sMgorISAgICBk byBqID0gMSwgbQorISAgICAgIGRvIGsgPSAxLCBpICsgNDEKKyEgICAgICAgIGlmIChrID4g MTEgKyA0MSAub3IuIGsgPCAxKSBlcnJvciBzdG9wCishICAgICAgZW5kIGRvCishICAgIGVu ZCBkbworISAgZW5kIGRvCishaWYgKGsgLz0gNTMpIHRoZW4KKyEgIHByaW50ICosIGssIDUz CishICBlcnJvciBzdG9wCishZW5kaWYKKworISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0 cHJpdmF0ZShrKQorZG8gaSA9IDEsIG4sMgorICBkbyBqID0gMSwgbQorICAgIGRvIGsgPSAx LCBqICsgNDEKKyAgICAgIGlmIChrID4gMjMgKyA0MSAub3IuIGsgPCAxKSBlcnJvciBzdG9w CisgICAgZW5kIGRvCisgIGVuZCBkbworZW5kIGRvCitpZiAoayAvPSA2NSkgdGhlbgorICBw cmludCAqLCBrLCA2NQorICBlcnJvciBzdG9wCitlbmRpZgorCisKKyEkb21wIHNpbWQgY29s bGFwc2UoMykgbGFzdHByaXZhdGUoaykKK2RvIGkgPSAxLCBuCisgIGRvIGogPSAxLCBtLDIK KyAgICBkbyBrID0gMSwgaSArIDQxCisgICAgICBpZiAoayA+IDExICsgNDEgLm9yLiBrIDwg MSkgZXJyb3Igc3RvcAorICAgIGVuZCBkbworICBlbmQgZG8KK2VuZCBkbworaWYgKGsgLz0g NTMpIHRoZW4KKyAgcHJpbnQgKiwgaywgNTMKKyAgZXJyb3Igc3RvcAorZW5kaWYKKworISAt IFNhbWUgYnV0IHdpdGhvdXQgJ3ByaXZhdGUnOgorISEkb21wIHNpbWQgY29sbGFwc2UoMykg bGFzdHByaXZhdGUoaykKKyFkbyBpID0gMSwgbgorISAgZG8gaiA9IDEsIG0sMgorISAgICBk byBrID0gMSwgaiArIDQxCishICAgICAgaWYgKGsgPiAyMyArIDQxIC5vci4gayA8IDEpIGVy cm9yIHN0b3AKKyEgICAgZW5kIGRvCishICBlbmQgZG8KKyFlbmQgZG8KKyFpZiAoayAvPSA2 NSkgdGhlbgorISAgcHJpbnQgKiwgaywgNjUKKyEgIGVycm9yIHN0b3AKKyFlbmRpZgorCisK KyEhJG9tcCBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspCishZG8gaSA9IDEsIG4s MgorISAgZG8gaiA9IDEsIG0KKyEgICAgZG8gayA9IDEsIGkgKyA0MQorISAgICAgIGlmIChr ID4gMTEgKyA0MSAub3IuIGsgPCAxKSBlcnJvciBzdG9wCishICAgIGVuZCBkbworISAgZW5k IGRvCishZW5kIGRvCishaWYgKGsgLz0gNTMpIHRoZW4KKyEgIHByaW50ICosIGssIDUzCish ICBlcnJvciBzdG9wCishZW5kaWYKKworISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJp dmF0ZShrKQorZG8gaSA9IDEsIG4sMgorICBkbyBqID0gMSwgbQorICAgIGRvIGsgPSAxLCBq ICsgNDEKKyAgICAgIGlmIChrID4gMjMgKyA0MSAub3IuIGsgPCAxKSBlcnJvciBzdG9wCisg ICAgZW5kIGRvCisgIGVuZCBkbworZW5kIGRvCitpZiAoayAvPSA2NSkgdGhlbgorICBwcmlu dCAqLCBrLCA2NQorICBlcnJvciBzdG9wCitlbmRpZgorCisKKyEkb21wIHNpbWQgY29sbGFw c2UoMykgbGFzdHByaXZhdGUoaykKK2RvIGkgPSAxLCBuCisgIGRvIGogPSAxLCBtLDIKKyAg ICBkbyBrID0gMSwgaSArIDQxCisgICAgICBpZiAoayA+IDExICsgNDEgLm9yLiBrIDwgMSkg ZXJyb3Igc3RvcAorICAgIGVuZCBkbworICBlbmQgZG8KK2VuZCBkbworaWYgKGsgLz0gNTMp IHRoZW4KKyAgcHJpbnQgKiwgaywgNTMKKyAgZXJyb3Igc3RvcAorZW5kaWYKKworISAtIGFs bCB3aXRoIGxhc3Rwcml2YXRlCishISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0 ZShrKSBsYXN0cHJpdmF0ZShpLCBqKQorIWRvIGkgPSAxLCBuCishICBkbyBqID0gMSwgbSwy CishICAgIGRvIGsgPSAxLCBqICsgNDEKKyEgICAgICBpZiAoayA+IDIzICsgNDEgLm9yLiBr IDwgMSkgZXJyb3Igc3RvcAorISAgICBlbmQgZG8KKyEgIGVuZCBkbworIWVuZCBkbworIWlm IChrIC89IDY1KSB0aGVuCishICBwcmludCAqLCBrLCA2NQorISAgZXJyb3Igc3RvcAorIWVu ZGlmCisKKworISEkb21wIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykgbGFzdHBy aXZhdGUoaSwgaikKKyFkbyBpID0gMSwgbiwyCishICBkbyBqID0gMSwgbQorISAgICBkbyBr ID0gMSwgaSArIDQxCishICAgICAgaWYgKGsgPiAxMSArIDQxIC5vci4gayA8IDEpIGVycm9y IHN0b3AKKyEgICAgZW5kIGRvCishICBlbmQgZG8KKyFlbmQgZG8KKyFpZiAoayAvPSA1Mykg dGhlbgorISAgcHJpbnQgKiwgaywgNTMKKyEgIGVycm9yIHN0b3AKKyFlbmRpZgorCishJG9t cCBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIGxhc3Rwcml2YXRlKGksIGopCitk byBpID0gMSwgbiwyCisgIGRvIGogPSAxLCBtCisgICAgZG8gayA9IDEsIGogKyA0MQorICAg ICAgaWYgKGsgPiAyMyArIDQxIC5vci4gayA8IDEpIGVycm9yIHN0b3AKKyAgICBlbmQgZG8K KyAgZW5kIGRvCitlbmQgZG8KK2lmIChrIC89IDY1KSB0aGVuCisgIHByaW50ICosIGssIDY1 CisgIGVycm9yIHN0b3AKK2VuZGlmCisKKworISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0 cHJpdmF0ZShrKSBsYXN0cHJpdmF0ZShpLCBqKQorZG8gaSA9IDEsIG4KKyAgZG8gaiA9IDEs IG0sMgorICAgIGRvIGsgPSAxLCBpICsgNDEKKyAgICAgIGlmIChrID4gMTEgKyA0MSAub3Iu IGsgPCAxKSBlcnJvciBzdG9wCisgICAgZW5kIGRvCisgIGVuZCBkbworZW5kIGRvCitpZiAo ayAvPSA1MykgdGhlbgorICBwcmludCAqLCBrLCA1MworICBlcnJvciBzdG9wCitlbmRpZgor CitlbmQKK2VuZCBtb2R1bGUgbQorCitwcm9ncmFtIG1haW4KKyAgdXNlIG0KKyAgaW1wbGlj aXQgbm9uZSAodHlwZSwgZXh0ZXJuYWwpCisgIGNhbGwgbGFzdHByaXZhdGVfY2hlY2tfc2lt ZF8xCisgIGNhbGwgbGFzdHByaXZhdGVfY2hlY2tfZG9fc2ltZF8xCisgIGNhbGwgbGFzdHBy aXZhdGVfY2hlY2tfZG9fMQorICBjYWxsIGxhc3Rwcml2YXRlX2NoZWNrXzIKK2VuZApkaWZm IC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5n dWxhci1sb29wLTFhLmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9u b24tcmVjdGFuZ3VsYXItbG9vcC0xYS5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjc3YWE4ODc5NDJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTFhLmY5MApA QCAtMCwwICsxLDM3NCBAQAorISB7IGRnLWRvIGNvbXBpbGUgfQorISB7IGRnLWFkZGl0aW9u YWwtb3B0aW9ucyAiLW1zc2UyIiB7IHRhcmdldCBzc2UyX3J1bnRpbWUgfSB9CishIHsgZGct YWRkaXRpb25hbC1vcHRpb25zICItbWF2eCIgeyB0YXJnZXQgYXZ4X3J1bnRpbWUgfSB9CisK KyEgUFIgZm9ydHJhbi8xMDc0MjQKKworISBOb25yZWN0YW5ndWxhciBsb29wIG5lc3RzIGNo ZWNrcworCishID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CishIE5PVEU6IFRoZSB0ZXN0Y2FzZXMgYXJlIGZyb20gbm9uLXJlY3Rh bmd1bGFyLWxvb3AtMS5mOTAsCishIGJ1dCBjb21tZW50ZWQgdGhlcmUuIEZlZWwgZnJlZSB0 byByZW1vdmUgdGhpcworISBmaWxlICsgdW5jb21tZW50IHRoZW0gaW4gbm9uLXJlY3Rhbmd1 bGFyLWxvb3AtMS5mOTAKKyEgT3RoZXJ3aXNlLCB5b3UgbmVlZCB0byBjaGFuZ2UgaXQgdG8g J2RnLWRvIHJ1bichCishID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisKK21vZHVsZSBtCisgIGltcGxpY2l0IG5vbmUgKHR5cGUs IGV4dGVybmFsKQorY29udGFpbnMKKworISBUaGUgJ2snIGxvb3AgdXNlcyBpIG9yIGogYXMg c3RhcnQgdmFsdWUKKyEgYnV0IGEgY29uc3RhbnQgZW5kIHZhbHVlIHN1Y2ggdGhhdCAnbGFz dHByaXZhdGUnCishIHNob3VsZCBiZSB3ZWxsLWRlZmluZWQKK3N1YnJvdXRpbmUgbGFzdHBy aXZhdGVfY2hlY2tfc2ltZF8xCisgIGludGVnZXIgOjogbixtLHAsIGksaixrCisKKyAgbiA9 IDExCisgIG0gPSAyMworICBwID0gMjcKKworICAhIFVzZSAnaScgb3IgJ2onLCB1bml0IHN0 ZXAgb24gJ2knIG9yIG9uICdqJyAtPiA0IGxvb3BzCisgICEgVGhlbiBzYW1lLCBleGNlcHQg dXNlIG5vbi11bml0IHN0ZXAgZm9yICdrJworCisgICEkb21wIHNpbWQgY29sbGFwc2UoMykg bGFzdHByaXZhdGUoaykKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbSwgMiAgISB7 IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9v cCBuZXN0IHdpdGggc3RlcCBvdGhlciB0aGFuIGNvbnN0YW50IDEgb3IgLTEgZm9yICdqJyIg fQorICAgICAgZG8gayA9IGogLSA0MSwgcCAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQor ICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBl bmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBz dG9wCisKKyAgISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKQorICBkbyBp ID0gMSwgbiwgMiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiBub24t cmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggc3RlcCBvdGhlciB0aGFuIGNvbnN0YW50IDEg b3IgLTEgZm9yICdpJyIgfQorICAgIGRvIGogPSAxLCBtCisgICAgICBkbyBrID0gaSAtIDQx LCBwICAhIHsgZGctbm90ZSAiVXNlZCBoZXJlIiB9CisgICAgICAgIGlmIChrIDwgMSAtIDQx IC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAgICAgIGVuZCBkbworICAgIGVuZCBkbworICBl bmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKworICAhIFNhbWUgYnV0ICdw cml2YXRlJyBmb3IgYWxsIChpLGopIHZhcnMKKworICAhJG9tcCBzaW1kIGNvbGxhcHNlKDMp IGxhc3Rwcml2YXRlKGspIHByaXZhdGUoaSxqKQorICBkbyBpID0gMSwgbgorICAgIGRvIGog PSAxLCBtLCAyICAhIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6IG5vbi1y ZWN0YW5ndWxhciBsb29wIG5lc3Qgd2l0aCBzdGVwIG90aGVyIHRoYW4gY29uc3RhbnQgMSBv ciAtMSBmb3IgJ2onIiB9CisgICAgICBkbyBrID0gaiAtIDQxLCBwICAhIHsgZGctbm90ZSAi VXNlZCBoZXJlIiB9CisgICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9y IHN0b3AKKyAgICAgIGVuZCBkbworICAgIGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGsgLz0g cCArIDEpIGVycm9yIHN0b3AKKworICAhJG9tcCBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2 YXRlKGspIHByaXZhdGUoaSxqKQorICBkbyBpID0gMSwgbiwgMiAgISB7IGRnLW1lc3NhZ2Ug InNvcnJ5LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGgg c3RlcCBvdGhlciB0aGFuIGNvbnN0YW50IDEgb3IgLTEgZm9yICdpJyIgfQorICAgIGRvIGog PSAxLCBtCisgICAgICBkbyBrID0gaSAtIDQxLCBwICAhIHsgZGctbm90ZSAiVXNlZCBoZXJl IiB9CisgICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAg ICAgIGVuZCBkbworICAgIGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVy cm9yIHN0b3AKKworICAhIFNhbWUgLSBidXQgd2l0aCBsYXN0cHJpdmF0ZShpLGopCisKKyAg ISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKSBsYXN0cHJpdmF0ZShpLGop CisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG0sIDIgICEgeyBkZy1tZXNzYWdlICJz b3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIHN0 ZXAgb3RoZXIgdGhhbiBjb25zdGFudCAxIG9yIC0xIGZvciAnaiciIH0KKyAgICAgIGRvIGsg PSBqIC0gNDEsIHAgICEgeyBkZy1ub3RlICJVc2VkIGhlcmUiIH0KKyAgICAgICAgaWYgKGsg PCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisgICAgZW5k IGRvCisgIGVuZCBkbworICBpZiAoayAvPSBwICsgMSkgZXJyb3Igc3RvcAorICBpZiAoaSAv PSBuICsgMSAub3IuIGogLz0gbSArIDIpIGVycm9yIHN0b3AKKworICAhJG9tcCBzaW1kIGNv bGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIGxhc3Rwcml2YXRlKGksaikKKyAgZG8gaSA9IDEs IG4sIDIgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rh bmd1bGFyIGxvb3AgbmVzdCB3aXRoIHN0ZXAgb3RoZXIgdGhhbiBjb25zdGFudCAxIG9yIC0x IGZvciAnaSciIH0KKyAgICBkbyBqID0gMSwgbQorICAgICAgZG8gayA9IGkgLSA0MSwgcCAg ISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3Iu IGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRv CisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisgIGlmIChpIC89IG4gKyAyIC5vci4g aiAvPSBtICsgMSkgZXJyb3Igc3RvcAorCitlbmQgc3Vicm91dGluZSBsYXN0cHJpdmF0ZV9j aGVja19zaW1kXzEKKworCishIFNhbWUgYnV0IHdpdGggZG8gc2ltZAorc3Vicm91dGluZSBs YXN0cHJpdmF0ZV9jaGVja19kb19zaW1kXzEKKyAgaW50ZWdlciA6OiBuLG0scCwgaSxqLGsK KworICBuID0gMTEKKyAgbSA9IDIzCisgIHAgPSAyNworCisgICEgVXNlICdpJyBvciAnaics IHVuaXQgc3RlcCBvbiAnaScgb3Igb24gJ2onIC0+IDQgbG9vcHMKKyAgISBUaGVuIHNhbWUs IGV4Y2VwdCB1c2Ugbm9uLXVuaXQgc3RlcCBmb3IgJ2snCisKKyAgISRvbXAgcGFyYWxsZWwg ZG8gc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKQorICBkbyBpID0gMSwgbgorICAg IGRvIGogPSAxLCBtLCAyICAhIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6 IG5vbi1yZWN0YW5ndWxhciBsb29wIG5lc3Qgd2l0aCBzdGVwIG90aGVyIHRoYW4gY29uc3Rh bnQgMSBvciAtMSBmb3IgJ2onIiB9CisgICAgICBkbyBrID0gaiAtIDQxLCBwICAhIHsgZGct bm90ZSAiVXNlZCBoZXJlIiB9CisgICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHAp IGVycm9yIHN0b3AKKyAgICAgIGVuZCBkbworICAgIGVuZCBkbworICBlbmQgZG8KKyAgaWYg KGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKworICAhJG9tcCBwYXJhbGxlbCBkbyBzaW1kIGNv bGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspCisgIGRvIGkgPSAxLCBuLCAyICAhIHsgZGctbWVz c2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6IG5vbi1yZWN0YW5ndWxhciBsb29wIG5lc3Qg d2l0aCBzdGVwIG90aGVyIHRoYW4gY29uc3RhbnQgMSBvciAtMSBmb3IgJ2knIiB9CisgICAg ZG8gaiA9IDEsIG0KKyAgICAgIGRvIGsgPSBpIC0gNDEsIHAgICEgeyBkZy1ub3RlICJVc2Vk IGhlcmUiIH0KKyAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3Rv cAorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVuZCBkbworICBpZiAoayAvPSBwICsg MSkgZXJyb3Igc3RvcAorCisgICEgU2FtZSBidXQgJ3ByaXZhdGUnIGZvciBhbGwgKGksaikg dmFycworCisgICEkb21wIHBhcmFsbGVsIGRvIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZh dGUoaykgcHJpdmF0ZShpLGopCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG0sIDIg ICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFy IGxvb3AgbmVzdCB3aXRoIHN0ZXAgb3RoZXIgdGhhbiBjb25zdGFudCAxIG9yIC0xIGZvciAn aiciIH0KKyAgICAgIGRvIGsgPSBqIC0gNDEsIHAgICEgeyBkZy1ub3RlICJVc2VkIGhlcmUi IH0KKyAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAorICAg ICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVuZCBkbworICBpZiAoayAvPSBwICsgMSkgZXJy b3Igc3RvcAorCisgICEkb21wIHBhcmFsbGVsIGRvIHNpbWQgY29sbGFwc2UoMykgbGFzdHBy aXZhdGUoaykgcHJpdmF0ZShpLGopCisgIGRvIGkgPSAxLCBuLCAyICAhIHsgZGctbWVzc2Fn ZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6IG5vbi1yZWN0YW5ndWxhciBsb29wIG5lc3Qgd2l0 aCBzdGVwIG90aGVyIHRoYW4gY29uc3RhbnQgMSBvciAtMSBmb3IgJ2knIiB9CisgICAgZG8g aiA9IDEsIG0KKyAgICAgIGRvIGsgPSBpIC0gNDEsIHAgICEgeyBkZy1ub3RlICJVc2VkIGhl cmUiIH0KKyAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3RvcAor ICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVuZCBkbworICBpZiAoayAvPSBwICsgMSkg ZXJyb3Igc3RvcAorCisgICEgU2FtZSAtIGJ1dCB3aXRoIGxhc3Rwcml2YXRlKGksaikKKwor ICAhJG9tcCBwYXJhbGxlbCBkbyBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIGxh c3Rwcml2YXRlKGksaikKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbSwgMiAgISB7 IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9v cCBuZXN0IHdpdGggc3RlcCBvdGhlciB0aGFuIGNvbnN0YW50IDEgb3IgLTEgZm9yICdqJyIg fQorICAgICAgZG8gayA9IGogLSA0MSwgcCAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQor ICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBl bmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBz dG9wCisgIGlmIChpIC89IG4gKyAxIC5vci4gaiAvPSBtICsgMikgZXJyb3Igc3RvcAorCisg ICEkb21wIHBhcmFsbGVsIGRvIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykgbGFz dHByaXZhdGUoaSxqKQorICBkbyBpID0gMSwgbiwgMiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5 LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggc3RlcCBv dGhlciB0aGFuIGNvbnN0YW50IDEgb3IgLTEgZm9yICdpJyIgfQorICAgIGRvIGogPSAxLCBt CisgICAgICBkbyBrID0gaSAtIDQxLCBwICAhIHsgZGctbm90ZSAiVXNlZCBoZXJlIiB9Cisg ICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAgICAgIGVu ZCBkbworICAgIGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0 b3AKKyAgaWYgKGkgLz0gbiArIDIgLm9yLiBqIC89IG0gKyAxKSBlcnJvciBzdG9wCisKK2Vu ZCBzdWJyb3V0aW5lIGxhc3Rwcml2YXRlX2NoZWNrX2RvX3NpbWRfMQorCisKKworISBTYW1l IGJ1dCB3aXRoIGRvCitzdWJyb3V0aW5lIGxhc3Rwcml2YXRlX2NoZWNrX2RvXzEKKyAgaW50 ZWdlciA6OiBuLG0scCwgaSxqLGsKKworICBuID0gMTEKKyAgbSA9IDIzCisgIHAgPSAyNwor CisgICEgVXNlICdpJyBvciAnaicsIHVuaXQgc3RlcCBvbiAnaScgb3Igb24gJ2onIC0+IDQg bG9vcHMKKyAgISBUaGVuIHNhbWUsIGV4Y2VwdCB1c2Ugbm9uLXVuaXQgc3RlcCBmb3IgJ2sn CisKKyAgISRvbXAgcGFyYWxsZWwgZG8gY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykKKyAg ZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbSwgMiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5 LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggc3RlcCBv dGhlciB0aGFuIGNvbnN0YW50IDEgb3IgLTEgZm9yICdqJyIgfQorICAgICAgZG8gayA9IGog LSA0MSwgcCAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQorICAgICAgICBpZiAoayA8IDEg LSA0MSAub3IuIGsgPiBwKSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8K KyAgZW5kIGRvCisgIGlmIChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISRvbXAgcGFy YWxsZWwgZG8gY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykKKyAgZG8gaSA9IDEsIG4sIDIg ICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFy IGxvb3AgbmVzdCB3aXRoIHN0ZXAgb3RoZXIgdGhhbiBjb25zdGFudCAxIG9yIC0xIGZvciAn aSciIH0KKyAgICBkbyBqID0gMSwgbQorICAgICAgZG8gayA9IGkgLSA0MSwgcCAgISB7IGRn LW5vdGUgIlVzZWQgaGVyZSIgfQorICAgICAgICBpZiAoayA8IDEgLSA0MSAub3IuIGsgPiBw KSBlcnJvciBzdG9wCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlm IChrIC89IHAgKyAxKSBlcnJvciBzdG9wCisKKyAgISBTYW1lIGJ1dCAncHJpdmF0ZScgZm9y IGFsbCAoaSxqKSB2YXJzCisKKyAgISRvbXAgcGFyYWxsZWwgZG8gY29sbGFwc2UoMykgbGFz dHByaXZhdGUoaykgcHJpdmF0ZShpLGopCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEs IG0sIDIgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rh bmd1bGFyIGxvb3AgbmVzdCB3aXRoIHN0ZXAgb3RoZXIgdGhhbiBjb25zdGFudCAxIG9yIC0x IGZvciAnaiciIH0KKyAgICAgIGRvIGsgPSBqIC0gNDEsIHAgICEgeyBkZy1ub3RlICJVc2Vk IGhlcmUiIH0KKyAgICAgICAgaWYgKGsgPCAxIC0gNDEgLm9yLiBrID4gcCkgZXJyb3Igc3Rv cAorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVuZCBkbworICBpZiAoayAvPSBwICsg MSkgZXJyb3Igc3RvcAorCisgICEkb21wIHBhcmFsbGVsIGRvIGNvbGxhcHNlKDMpIGxhc3Rw cml2YXRlKGspIHByaXZhdGUoaSxqKQorICBkbyBpID0gMSwgbiwgMiAgISB7IGRnLW1lc3Nh Z2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdp dGggc3RlcCBvdGhlciB0aGFuIGNvbnN0YW50IDEgb3IgLTEgZm9yICdpJyIgfQorICAgIGRv IGogPSAxLCBtCisgICAgICBkbyBrID0gaSAtIDQxLCBwICAhIHsgZGctbm90ZSAiVXNlZCBo ZXJlIiB9CisgICAgICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AK KyAgICAgIGVuZCBkbworICAgIGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEp IGVycm9yIHN0b3AKKworICAhIFNhbWUgLSBidXQgd2l0aCBsYXN0cHJpdmF0ZShpLGopCisK KyAgISRvbXAgcGFyYWxsZWwgZG8gY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykgbGFzdHBy aXZhdGUoaSxqKQorICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBtLCAyICAhIHsgZGct bWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6IG5vbi1yZWN0YW5ndWxhciBsb29wIG5l c3Qgd2l0aCBzdGVwIG90aGVyIHRoYW4gY29uc3RhbnQgMSBvciAtMSBmb3IgJ2onIiB9Cisg ICAgICBkbyBrID0gaiAtIDQxLCBwICAhIHsgZGctbm90ZSAiVXNlZCBoZXJlIiB9CisgICAg ICAgIGlmIChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAgICAgIGVuZCBk bworICAgIGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AK KyAgaWYgKGkgLz0gbiArIDEgLm9yLiBqIC89IG0gKyAyKSBlcnJvciBzdG9wCisKKyAgISRv bXAgcGFyYWxsZWwgZG8gY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykgbGFzdHByaXZhdGUo aSxqKQorICBkbyBpID0gMSwgbiwgMiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxl bWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggc3RlcCBvdGhlciB0aGFu IGNvbnN0YW50IDEgb3IgLTEgZm9yICdpJyIgfQorICAgIGRvIGogPSAxLCBtCisgICAgICBk byBrID0gaSAtIDQxLCBwICAhIHsgZGctbm90ZSAiVXNlZCBoZXJlIiB9CisgICAgICAgIGlm IChrIDwgMSAtIDQxIC5vci4gayA+IHApIGVycm9yIHN0b3AKKyAgICAgIGVuZCBkbworICAg IGVuZCBkbworICBlbmQgZG8KKyAgaWYgKGsgLz0gcCArIDEpIGVycm9yIHN0b3AKKyAgaWYg KGkgLz0gbiArIDIgLm9yLiBqIC89IG0gKyAxKSBlcnJvciBzdG9wCisKK2VuZCBzdWJyb3V0 aW5lIGxhc3Rwcml2YXRlX2NoZWNrX2RvXzEKKworCisKK3N1YnJvdXRpbmUgbGFzdHByaXZh dGVfY2hlY2tfMgorICBpbnRlZ2VyIDo6IG4sbSxwLCBpLGosayxsbAorCisgIG4gPSAxMQor ICBtID0gMjMKKyAgcCA9IDI3CisKKyAgISRvbXAgcGFyYWxsZWwgZG8gc2ltZCBjb2xsYXBz ZSgzKSBsYXN0cHJpdmF0ZShwKQorICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBtLDIg ICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFy IGxvb3AgbmVzdCB3aXRoIHN0ZXAgb3RoZXIgdGhhbiBjb25zdGFudCAxIG9yIC0xIGZvciAn aiciIH0KKyAgICAgIGRvIGsgPSAxLCBqICsgNDEgICEgeyBkZy1ub3RlICJVc2VkIGhlcmUi IH0KKyAgICAgICAgZG8gbGwgPSAxLCBwLCAyCisgICAgICAgICAgaWYgKGsgPiAyMyArIDQx IC5vci4gayA8IDEpIGVycm9yIHN0b3AKKyAgICAgICAgZW5kIGRvCisgICAgICBlbmQgZG8K KyAgICBlbmQgZG8KKyAgZW5kIGRvCisgIGlmIChsbCAvPSAyOSkgZXJyb3Igc3RvcAorCisg ICEkb21wIHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUocCkKKyAgZG8gaSA9IDEsIG4K KyAgICBkbyBqID0gMSwgbSwyICAhIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50 ZWQ6IG5vbi1yZWN0YW5ndWxhciBsb29wIG5lc3Qgd2l0aCBzdGVwIG90aGVyIHRoYW4gY29u c3RhbnQgMSBvciAtMSBmb3IgJ2onIiB9CisgICAgICBkbyBrID0gMSwgaiArIDQxICAhIHsg ZGctbm90ZSAiVXNlZCBoZXJlIiB9CisgICAgICAgIGRvIGxsID0gMSwgcCwgMgorICAgICAg ICAgIGlmIChrID4gMjMgKyA0MSAub3IuIGsgPCAxKSBlcnJvciBzdG9wCisgICAgICAgIGVu ZCBkbworICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisgIGVuZCBkbworICBpZiAobGwgLz0g MjkpIGVycm9yIHN0b3AKKworICAhJG9tcCBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRl KGspCisgIGRvIGkgPSAxLCBuLDIgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1l bnRlZDogbm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIHN0ZXAgb3RoZXIgdGhhbiBj b25zdGFudCAxIG9yIC0xIGZvciAnaSciIH0KKyAgICBkbyBqID0gMSwgbQorICAgICAgZG8g ayA9IDEsIGkgKyA0MSAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQorICAgICAgICBpZiAo ayA+IDExICsgNDEgLm9yLiBrIDwgMSkgZXJyb3Igc3RvcAorICAgICAgZW5kIGRvCisgICAg ZW5kIGRvCisgIGVuZCBkbworaWYgKGsgLz0gNTMpIHRoZW4KKyAgcHJpbnQgKiwgaywgNTMK KyAgZXJyb3Igc3RvcAorZW5kaWYKKworISAtIFNhbWUgYnV0IHdpdGhvdXQgJ3ByaXZhdGUn OgorISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0ZShrKQorZG8gaSA9IDEsIG4K KyAgZG8gaiA9IDEsIG0sMiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVk OiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggc3RlcCBvdGhlciB0aGFuIGNvbnN0 YW50IDEgb3IgLTEgZm9yICdqJyIgfQorICAgIGRvIGsgPSAxLCBqICsgNDEgICEgeyBkZy1u b3RlICJVc2VkIGhlcmUiIH0KKyAgICAgIGlmIChrID4gMjMgKyA0MSAub3IuIGsgPCAxKSBl cnJvciBzdG9wCisgICAgZW5kIGRvCisgIGVuZCBkbworZW5kIGRvCitpZiAoayAvPSA2NSkg dGhlbgorICBwcmludCAqLCBrLCA2NQorICBlcnJvciBzdG9wCitlbmRpZgorCisKKyEkb21w IHNpbWQgY29sbGFwc2UoMykgbGFzdHByaXZhdGUoaykKK2RvIGkgPSAxLCBuLDIgICEgeyBk Zy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFyIGxvb3Ag bmVzdCB3aXRoIHN0ZXAgb3RoZXIgdGhhbiBjb25zdGFudCAxIG9yIC0xIGZvciAnaSciIH0K KyAgZG8gaiA9IDEsIG0KKyAgICBkbyBrID0gMSwgaSArIDQxICAhIHsgZGctbm90ZSAiVXNl ZCBoZXJlIiB9CisgICAgICBpZiAoayA+IDExICsgNDEgLm9yLiBrIDwgMSkgZXJyb3Igc3Rv cAorICAgIGVuZCBkbworICBlbmQgZG8KK2VuZCBkbworaWYgKGsgLz0gNTMpIHRoZW4KKyAg cHJpbnQgKiwgaywgNTMKKyAgZXJyb3Igc3RvcAorZW5kaWYKKworISAtIGFsbCB3aXRoIGxh c3Rwcml2YXRlCishJG9tcCBzaW1kIGNvbGxhcHNlKDMpIGxhc3Rwcml2YXRlKGspIGxhc3Rw cml2YXRlKGksIGopCitkbyBpID0gMSwgbgorICBkbyBqID0gMSwgbSwyICAhIHsgZGctbWVz c2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6IG5vbi1yZWN0YW5ndWxhciBsb29wIG5lc3Qg d2l0aCBzdGVwIG90aGVyIHRoYW4gY29uc3RhbnQgMSBvciAtMSBmb3IgJ2onIiB9CisgICAg ZG8gayA9IDEsIGogKyA0MSAgISB7IGRnLW5vdGUgIlVzZWQgaGVyZSIgfQorICAgICAgaWYg KGsgPiAyMyArIDQxIC5vci4gayA8IDEpIGVycm9yIHN0b3AKKyAgICBlbmQgZG8KKyAgZW5k IGRvCitlbmQgZG8KK2lmIChrIC89IDY1KSB0aGVuCisgIHByaW50ICosIGssIDY1CisgIGVy cm9yIHN0b3AKK2VuZGlmCisKKworISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBsYXN0cHJpdmF0 ZShrKSBsYXN0cHJpdmF0ZShpLCBqKQorZG8gaSA9IDEsIG4sMiAgISB7IGRnLW1lc3NhZ2Ug InNvcnJ5LCB1bmltcGxlbWVudGVkOiBub24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGgg c3RlcCBvdGhlciB0aGFuIGNvbnN0YW50IDEgb3IgLTEgZm9yICdpJyIgfQorICBkbyBqID0g MSwgbQorICAgIGRvIGsgPSAxLCBpICsgNDEgICEgeyBkZy1ub3RlICJVc2VkIGhlcmUiIH0K KyAgICAgIGlmIChrID4gMTEgKyA0MSAub3IuIGsgPCAxKSBlcnJvciBzdG9wCisgICAgZW5k IGRvCisgIGVuZCBkbworZW5kIGRvCitpZiAoayAvPSA1MykgdGhlbgorICBwcmludCAqLCBr LCA1MworICBlcnJvciBzdG9wCitlbmRpZgorCitlbmQKK2VuZCBtb2R1bGUgbQorCitwcm9n cmFtIG1haW4KKyAgdXNlIG0KKyAgaW1wbGljaXQgbm9uZSAodHlwZSwgZXh0ZXJuYWwpCisg IGNhbGwgbGFzdHByaXZhdGVfY2hlY2tfc2ltZF8xCisgIGNhbGwgbGFzdHByaXZhdGVfY2hl Y2tfZG9fc2ltZF8xCisgIGNhbGwgbGFzdHByaXZhdGVfY2hlY2tfZG9fMQorICBjYWxsIGxh c3Rwcml2YXRlX2NoZWNrXzIKK2VuZApkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUv bGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTIuZjkwIGIvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTIuZjkwCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wY2VhNjFlNWYwZAotLS0g L2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9ub24t cmVjdGFuZ3VsYXItbG9vcC0yLmY5MApAQCAtMCwwICsxLDI0MyBAQAorISB7IGRnLWRvIHJ1 biB9CishIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZmR1bXAtdHJlZS1vcmlnaW5hbCAt ZmNoZWNrPWFsbCIgfQorCishIFBSIGZvcnRyYW4vMTA3NDI0CisKKyEgTm9ucmVjdGFuZ3Vs YXIgbG9vcCBuZXN0cyBjaGVja3MKKworISBWYWxpZCBwYXR0ZXJucyBhcmU6CishICAoMSkg IGEyIC0gdmFyLW91dGVyCishICAoMikgIGExICogdmFyLW91dGVyCishICAoMykgIGExICog dmFyLW91dGVyICsgYTIKKyEgICg0KSAgYTIgKyBhMSAqIHZhci1vdXRlcgorISAgKDUpICBh MSAqIHZhci1vdXRlciAtIGEyCishICAoNikgIGEyIC0gYTEgKiB2YXItb3V0ZXIKKyEgICg3 KSAgdmFyLW91dGVyICogYTEKKyEgICg4KSAgdmFyLW91dGVyICogYTEgKyBhMgorISAgKDkp ICBhMiArIHZhci1vdXRlciAqIGExCishICgxMCkgIHZhci1vdXRlciAqIGExIC0gYTIKKyEg KDExKSAgYTIgLSB2YXItb3V0ZXIgKiBhMQorCittb2R1bGUgbQorY29udGFpbnMKKworCish IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxcKG9uZV90d29faW5u ZXIgPSBvbmVfdHdvX291dGVyIFxcKiAtMSBcXCsgb25lX2EyOyBvbmVfdHdvX2lubmVyIDw9 IG9uZV90d29fb3V0ZXIgXFwqIHR3b19hMSBcXCsgMDsgb25lX3R3b19pbm5lciA9IG9uZV90 d29faW5uZXIgXFwrIDFcXCkiIDEgb3JpZ2luYWwgfSB9CisKKyEgICgxKSAgYTIgLSB2YXIt b3V0ZXIKKyEgICgyKSAgYTEgKiB2YXItb3V0ZXIKK3N1YnJvdXRpbmUgb25lX3R3bygpCisg IGltcGxpY2l0IG5vbmUKKyAgaW50ZWdlciA6OiBvbmVfYTIKKyAgaW50ZWdlciA6OiB0d29f YTEKKyAgaW50ZWdlciA6OiBvbmVfdHdvX291dGVyLCBvbmVfdHdvX2lubmVyCisgIGludGVn ZXIgOjogaSwgagorICBpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiB2YXIoOiw6KQorCisgIG9u ZV9hMiA9IDEzCisgIHR3b19hMSA9IDUKKyAgYWxsb2NhdGUodmFyKDE6MTAsIG9uZV9hMiAt IDEwOnR3b19hMSAqIDEwKSwgJgorICAgICAgICAgICBzb3VyY2U9MCkKKyAgaWYgKHNpemUo dmFyKSA8PSA0KSBlcnJvciBzdG9wCisKKyAgISRvbXAgc2ltZCBjb2xsYXBzZSgyKQorICBk byBvbmVfdHdvX291dGVyID0gMSwgMTAKKyAgICBkbyBvbmVfdHdvX2lubmVyID0gb25lX2Ey IC0gb25lX3R3b19vdXRlciwgdHdvX2ExICogb25lX3R3b19vdXRlcgorICAgICAgISRvbXAg YXRvbWljIHVwZGF0ZQorICAgICAgdmFyKG9uZV90d29fb3V0ZXIsb25lX3R3b19pbm5lcikg PSB2YXIob25lX3R3b19vdXRlcixvbmVfdHdvX2lubmVyKSArIDIKKyAgICBlbmQgZG8KKyAg ZW5kIGRvCisKKyAgZG8gaSA9IDEsIDEwCisgICAgZG8gaiA9IG9uZV9hMiAtIGksIHR3b19h MSAqIGkKKyAgICAgIGlmICh2YXIoaSxqKSAvPSAyKSBlcnJvciBzdG9wCisgICAgZW5kIGRv CisgIGVuZCBkbworZW5kCisKKworISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgImZvciBcXCh0aHJlZV9mb3VyX2lubmVyID0gdGhyZWVfZm91cl9vdXRlciBcXCogdGhy ZWVfYTEgXFwrIHRocmVlX2EyOyB0aHJlZV9mb3VyX2lubmVyIDw9IHRocmVlX2ZvdXJfb3V0 ZXIgXFwqIGZvdXJfYTEgXFwrIGZvdXJfYTI7IHRocmVlX2ZvdXJfaW5uZXIgPSB0aHJlZV9m b3VyX2lubmVyIFxcKyAxXFwpIiAxIG9yaWdpbmFsIH0gfQorCishICAoMykgIGExICogdmFy LW91dGVyICsgYTIKKyEgICg0KSAgYTIgKyBhMSAqIHZhci1vdXRlcgorc3Vicm91dGluZSB0 aHJlZV9mb3VyKCkKKyAgaW1wbGljaXQgbm9uZQorICBpbnRlZ2VyIDo6IHRocmVlX2ExLCB0 aHJlZV9hMgorICBpbnRlZ2VyIDo6IGZvdXJfYTEsIGZvdXJfYTIKKyAgaW50ZWdlciA6OiB0 aHJlZV9mb3VyX291dGVyLCB0aHJlZV9mb3VyX2lubmVyCisgIGludGVnZXIgOjogaSwgagor ICBpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiB2YXIoOiw6KQorCisgIHRocmVlX2ExID0gMgor ICB0aHJlZV9hMiA9IDMKKyAgZm91cl9hMSA9IDMKKyAgZm91cl9hMiA9IDUKKyAgYWxsb2Nh dGUodmFyKDE6MTAsIHRocmVlX2ExICogMSArIHRocmVlX2EyOmZvdXJfYTIgKyBmb3VyX2Ex ICogMTApLCAmCisgICAgICAgICAgIHNvdXJjZT0wKQorICBpZiAoc2l6ZSh2YXIpIDw9IDQp IGVycm9yIHN0b3AKKworICAhJG9tcCBzaW1kIGNvbGxhcHNlKDIpCisgIGRvIHRocmVlX2Zv dXJfb3V0ZXIgPSAxLCAxMAorICAgIGRvIHRocmVlX2ZvdXJfaW5uZXIgPSB0aHJlZV9hMSAq IHRocmVlX2ZvdXJfb3V0ZXIgKyB0aHJlZV9hMiwgZm91cl9hMiArIGZvdXJfYTEgKiB0aHJl ZV9mb3VyX291dGVyCisgICAgICAhJG9tcCBhdG9taWMgdXBkYXRlCisgICAgICB2YXIodGhy ZWVfZm91cl9vdXRlciwgdGhyZWVfZm91cl9pbm5lcikgPSB2YXIodGhyZWVfZm91cl9vdXRl ciwgdGhyZWVfZm91cl9pbm5lcikgKyAyCisgICAgZW5kIGRvCisgIGVuZCBkbworICBkbyBp ID0gMSwgMTAKKyAgICBkbyBqID0gdGhyZWVfYTEgKiBpICsgdGhyZWVfYTIsIGZvdXJfYTIg KyBmb3VyX2ExICogaQorICAgICAgaWYgKHZhcihpLGopIC89IDIpIGVycm9yIHN0b3AKKyAg ICBlbmQgZG8KKyAgZW5kIGRvCitlbmQKKworCishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAiZm9yIFxcKGZpdmVfc2l4X2lubmVyID0gZml2ZV9zaXhfb3V0ZXIgXFwq IGZpdmVfYTEgXFwrIERcXC5cWzAtOVxdKzsgZml2ZV9zaXhfaW5uZXIgPD0gZml2ZV9zaXhf b3V0ZXIgXFwqIERcXC5cWzAtOVxdKyBcXCsgc2l4X2EyOyBmaXZlX3NpeF9pbm5lciA9IGZp dmVfc2l4X2lubmVyIFxcKyAxXFwpIiAxIG9yaWdpbmFsIH0gfQorCishICAoNSkgIGExICog dmFyLW91dGVyIC0gYTIKKyEgICg2KSAgYTIgLSBhMSAqIHZhci1vdXRlcgorc3Vicm91dGlu ZSBmaXZlX3NpeCgpCisgIGltcGxpY2l0IG5vbmUKKyAgaW50ZWdlciA6OiBmaXZlX2ExLCBm aXZlX2EyCisgIGludGVnZXIgOjogc2l4X2ExLCBzaXhfYTIKKyAgaW50ZWdlciA6OiBmaXZl X3NpeF9vdXRlciwgZml2ZV9zaXhfaW5uZXIKKyAgaW50ZWdlciA6OiBpLCBqCisgIGludGVn ZXIsIGFsbG9jYXRhYmxlIDo6IHZhcig6LDopCisKKyAgZml2ZV9hMSA9IDIKKyAgZml2ZV9h MiA9IC0zCisgIHNpeF9hMSA9IDMKKyAgc2l4X2EyID0gMjAKKyAgYWxsb2NhdGUodmFyKDE6 MTAsIGZpdmVfYTEgKiAxIC0gZml2ZV9hMjpzaXhfYTIgLSBzaXhfYTEgKiAxKSwgJgorICAg ICAgICAgICBzb3VyY2U9MCkKKyAgaWYgKHNpemUodmFyKSA8PSA0KSBlcnJvciBzdG9wCisK KyAgISRvbXAgc2ltZCBjb2xsYXBzZSgyKQorICBkbyBmaXZlX3NpeF9vdXRlciA9IDEsIDEw CisgICAgZG8gZml2ZV9zaXhfaW5uZXIgPSBmaXZlX2ExICogZml2ZV9zaXhfb3V0ZXIgLSBm aXZlX2EyLCBzaXhfYTIgLSBzaXhfYTEgKiBmaXZlX3NpeF9vdXRlcgorICAgICAgISRvbXAg YXRvbWljIHVwZGF0ZQorICAgICAgdmFyKGZpdmVfc2l4X291dGVyLCBmaXZlX3NpeF9pbm5l cikgPSB2YXIoZml2ZV9zaXhfb3V0ZXIsIGZpdmVfc2l4X2lubmVyKSArIDIKKyAgICBlbmQg ZG8KKyAgZW5kIGRvCisKKyAgZG8gaSA9IDEsIDEwCisgICAgZG8gaiA9IGZpdmVfYTEgKiBp IC0gZml2ZV9hMiwgc2l4X2EyIC0gc2l4X2ExICogaQorICAgICAgaWYgKHZhcihpLGopIC89 IDIpIGVycm9yIHN0b3AKKyAgICBlbmQgZG8KKyAgZW5kIGRvCitlbmQKKworCishIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxcKHNldmVuX2VpZ2h0X2lubmVy ID0gc2V2ZW5fZWlnaHRfb3V0ZXIgXFwqIHNldmVuX2ExIFxcKyAwOyBzZXZlbl9laWdodF9p bm5lciA8PSBzZXZlbl9laWdodF9vdXRlciBcXCogZWlnaHRfYTEgXFwrIGVpZ2h0X2EyOyBz ZXZlbl9laWdodF9pbm5lciA9IHNldmVuX2VpZ2h0X2lubmVyIFxcKyAxXFwpIiAxIG9yaWdp bmFsIH0gfQorCishICAoNykgIHZhci1vdXRlciAqIGExCishICAoOCkgIHZhci1vdXRlciAq IGExICsgYTIKK3N1YnJvdXRpbmUgc2V2ZW5fZWlnaHQoKQorICBpbXBsaWNpdCBub25lCisg IGludGVnZXIgOjogc2V2ZW5fYTEKKyAgaW50ZWdlciA6OiBlaWdodF9hMSwgZWlnaHRfYTIK KyAgaW50ZWdlciA6OiBzZXZlbl9laWdodF9vdXRlciwgc2V2ZW5fZWlnaHRfaW5uZXIKKyAg aW50ZWdlciA6OiBpLCBqCisgIGludGVnZXIsIGFsbG9jYXRhYmxlIDo6IHZhcig6LDopCisK KyAgc2V2ZW5fYTEgPSAzCisgIGVpZ2h0X2ExID0gMgorICBlaWdodF9hMiA9IC00CisgIGFs bG9jYXRlKHZhcigxOjEwLCAxICogc2V2ZW5fYTEgOiAxMCAqIGVpZ2h0X2ExICsgZWlnaHRf YTIpLCAmCisgICAgICAgICAgIHNvdXJjZT0wKQorICBpZiAoc2l6ZSh2YXIpIDw9IDQpIGVy cm9yIHN0b3AKKworICAhJG9tcCBzaW1kIGNvbGxhcHNlKDIpCisgIGRvIHNldmVuX2VpZ2h0 X291dGVyID0gMSwgMTAKKyAgICBkbyBzZXZlbl9laWdodF9pbm5lciA9IHNldmVuX2VpZ2h0 X291dGVyICogc2V2ZW5fYTEsIHNldmVuX2VpZ2h0X291dGVyICogZWlnaHRfYTEgKyBlaWdo dF9hMgorICAgICAgISRvbXAgYXRvbWljIHVwZGF0ZQorICAgICAgdmFyKHNldmVuX2VpZ2h0 X291dGVyLCBzZXZlbl9laWdodF9pbm5lcikgPSB2YXIoc2V2ZW5fZWlnaHRfb3V0ZXIsIHNl dmVuX2VpZ2h0X2lubmVyKSArIDIKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisKKyAgZG8gaSA9 IDEsIDEwCisgICAgZG8gaiA9IGkgKiBzZXZlbl9hMSwgaSAqIGVpZ2h0X2ExICsgZWlnaHRf YTIKKyAgICAgIGlmICh2YXIoaSxqKSAvPSAyKSBlcnJvciBzdG9wCisgICAgZW5kIGRvCisg IGVuZCBkbworZW5kCisKKworISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMg ImZvciBcXChuaW5lX3Rlbl9pbm5lciA9IG5pbmVfdGVuX291dGVyIFxcKiBuaW5lX2ExIFxc KyBuaW5lX2EyOyBuaW5lX3Rlbl9pbm5lciA8PSBuaW5lX3Rlbl9vdXRlciBcXCogdGVuX2Ex IFxcKyBEXFwuXFswLTlcXSs7IG5pbmVfdGVuX2lubmVyID0gbmluZV90ZW5faW5uZXIgXFwr IDFcXCkiIDEgb3JpZ2luYWwgfSB9CisKKyEgICg5KSAgYTIgKyB2YXItb3V0ZXIgKiBhMQor ISAoMTApICB2YXItb3V0ZXIgKiBhMSAtIGEyCitzdWJyb3V0aW5lIG5pbmVfdGVuKCkKKyAg aW1wbGljaXQgbm9uZQorICBpbnRlZ2VyIDo6IG5pbmVfYTEsIG5pbmVfYTIKKyAgaW50ZWdl ciA6OiB0ZW5fYTEsIHRlbl9hMgorICBpbnRlZ2VyIDo6IG5pbmVfdGVuX291dGVyLCBuaW5l X3Rlbl9pbm5lcgorICBpbnRlZ2VyIDo6IGksIGoKKyAgaW50ZWdlciwgYWxsb2NhdGFibGUg OjogdmFyKDosOikKKworICBuaW5lX2ExID0gMworICBuaW5lX2EyID0gNQorICB0ZW5fYTEg PSAyCisgIHRlbl9hMiA9IDMKKyAgYWxsb2NhdGUodmFyKDE6MTAsIG5pbmVfYTIgKyAxICog bmluZV9hMToxMCAqIHRlbl9hMSAtIHRlbl9hMiksICYKKyAgICAgICAgICAgc291cmNlPTAp CisgIGlmIChzaXplKHZhcikgPD0gNCkgZXJyb3Igc3RvcAorCisgICEkb21wIHNpbWQgY29s bGFwc2UoMikKKyAgZG8gbmluZV90ZW5fb3V0ZXIgPSAxLCAxMAorICAgIGRvIG5pbmVfdGVu X2lubmVyID0gbmluZV9hMiArIG5pbmVfdGVuX291dGVyICogbmluZV9hMSwgbmluZV90ZW5f b3V0ZXIgKiB0ZW5fYTEgLSB0ZW5fYTIKKyAgICAgICEkb21wIGF0b21pYyB1cGRhdGUKKyAg ICAgIHZhcihuaW5lX3Rlbl9vdXRlciwgbmluZV90ZW5faW5uZXIpID0gdmFyKG5pbmVfdGVu X291dGVyLCBuaW5lX3Rlbl9pbm5lcikgKyAyCisgICAgZW5kIGRvCisgIGVuZCBkbworCisg IGRvIGkgPSAxLCAxMAorICAgIGRvIGogPSBuaW5lX2EyICsgaSAqIG5pbmVfYTEsIGkgKiB0 ZW5fYTEgLSB0ZW5fYTIKKyAgICAgIGlmICh2YXIoaSxqKSAvPSAyKSBlcnJvciBzdG9wCisg ICAgZW5kIGRvCisgIGVuZCBkbworZW5kCisKKworISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAtdGltZXMgImZvciBcXChlbGV2ZW5faW5uZXIgPSBlbGV2ZW5fb3V0ZXIgXFwqIERc XC5cWzAtOVxdKyBcXCsgZWxldmVuX2EyOyBlbGV2ZW5faW5uZXIgPD0gMTA7IGVsZXZlbl9p bm5lciA9IGVsZXZlbl9pbm5lciBcXCsgMVxcKSIgMSBvcmlnaW5hbCB9IH0KKworISAoMTEp ICBhMiAtIHZhci1vdXRlciAqIGExCisKK3N1YnJvdXRpbmUgZWxldmVuKCkKKyAgaW1wbGlj aXQgbm9uZQorICBpbnRlZ2VyIDo6IGVsZXZlbl9hMSwgZWxldmVuX2EyCisgIGludGVnZXIg OjogZWxldmVuX291dGVyLCBlbGV2ZW5faW5uZXIKKyAgaW50ZWdlciA6OiBpLCBqCisgIGlu dGVnZXIsIGFsbG9jYXRhYmxlIDo6IHZhcig6LDopCisKKyAgZWxldmVuX2ExID0gMgorICBl bGV2ZW5fYTIgPSAzCisgIGFsbG9jYXRlKHZhcigxOjEwLCBlbGV2ZW5fYTIgLSAxMCAqIGVs ZXZlbl9hMSA6IDEwKSwgJgorICAgICAgICAgICBzb3VyY2U9MCkKKyAgaWYgKHNpemUodmFy KSA8PSA0KSBlcnJvciBzdG9wCisKKyAgISRvbXAgc2ltZCBjb2xsYXBzZSgyKQorICBkbyBl bGV2ZW5fb3V0ZXIgPSAxLCAxMAorICAgIGRvIGVsZXZlbl9pbm5lciA9IGVsZXZlbl9hMiAt IGVsZXZlbl9vdXRlciAqIGVsZXZlbl9hMSwgMTAKKyAgICAgICEkb21wIGF0b21pYyB1cGRh dGUKKyAgICAgIHZhcihlbGV2ZW5fb3V0ZXIsIGVsZXZlbl9pbm5lcikgPSB2YXIoZWxldmVu X291dGVyLCBlbGV2ZW5faW5uZXIpICsgMgorICAgIGVuZCBkbworICBlbmQgZG8KKworICBk byBpID0gMSwgMTAKKyAgICBkbyBqID0gZWxldmVuX2EyIC0gaSAqIGVsZXZlbl9hMSwgMTAK KyAgICAgIGlmICh2YXIoaSxqKSAvPSAyKSBlcnJvciBzdG9wCisgICAgZW5kIGRvCisgIGVu ZCBkbworZW5kCitlbmQgbW9kdWxlIG0KKworcHJvZ3JhbSBtYWluCit1c2UgbQoraW1wbGlj aXQgbm9uZQorY2FsbCBvbmVfdHdvKCkKK2NhbGwgdGhyZWVfZm91cigpCitjYWxsIGZpdmVf c2l4KCkKK2NhbGwgc2V2ZW5fZWlnaHQoKQorY2FsbCBuaW5lX3RlbigpCitjYWxsIGVsZXZl bigpCitlbmQKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJh bi9ub24tcmVjdGFuZ3VsYXItbG9vcC0zLmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdv bXAuZm9ydHJhbi9ub24tcmVjdGFuZ3VsYXItbG9vcC0zLmY5MApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzk3Y2Q5OWY3MWMKLS0tIC9kZXYvbnVsbAorKysg Yi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbm9uLXJlY3Rhbmd1bGFyLWxv b3AtMy5mOTAKQEAgLTAsMCArMSwyMTIgQEAKKyEgeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMg Ii1mZHVtcC10cmVlLW9yaWdpbmFsIiB9CishIFBSIGZvcnRyYW4vMTA3NDI0CisKK21vZHVs ZSBtCitjb250YWlucworc3Vicm91dGluZSBmb28gKGF2LCBhdm8sIGEwLCBhMG8sIGExLCBh MiwgYTMsIGE0KQoraW1wbGljaXQgbm9uZQorCitpbnRlZ2VyLCB2YWx1ZSA6OiBhdgoraW50 ZWdlciwgdmFsdWUsIG9wdGlvbmFsIDo6IGF2bworaW50ZWdlciA6OiBhMAoraW50ZWdlciwg b3B0aW9uYWwgOjogYTBvCitpbnRlZ2VyLCBwb2ludGVyIDo6IGExCitpbnRlZ2VyLCBwb2lu dGVyLCBvcHRpb25hbCA6OiBhMgoraW50ZWdlciwgYWxsb2NhdGFibGUgOjogYTMKK2ludGVn ZXIsIGFsbG9jYXRhYmxlLCBvcHRpb25hbCA6OiBhNAoraW50ZWdlciA6OiBhNQoraW50ZWdl ciwgcG9pbnRlciA6OiBhNgoraW50ZWdlciwgYWxsb2NhdGFibGUgOjogYTcKK2ludGVnZXIg OjogYXJyKDIwLDEwKSwgcmVmKDIwLDEwKQorCitpbnRlZ2VyIDo6IGosIGkKKworYWxsb2Nh dGUoYTYsIGE3KQorCityZWYgPSA0NAorZG8gaSA9IDEsIDEwCisgIGRvIGogPSBpLCAyMAor ICAgIHJlZihqLCBpKSA9IGogKyAxMDAgKiBpCisgIGVuZCBkbworZW5kIGRvCisKKyEgeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJmb3IgXFwoYXYgPSAxOyBhdiA8PSAx MDsgYXYgPSBhdiBcXCsgMVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgImZvciBcXChqID0gYXYgXFwqIDEgXFwrIDA7IGogPD0g MjA7IGogPSBqIFxcKyAxXFwpIiAxICJvcmlnaW5hbCIgfSB9CishIC0+IG5vIHRlbXAgdmFy CithcnIgPSA0NAorYXYgPSA5OTsgaiA9IDk5CishJG9tcCBzaW1kIGNvbGxhcHNlKDIpIGxh c3Rwcml2YXRlKGF2LGopCitkbyBhdiA9IDEsIDEwCisgIGRvIGogPSBhdiwgMjAKKyAgICBh cnIoaiwgYXYpID0gaiArIDEwMCAqIGF2CisgIGVuZCBkbworZW5kIGRvCitpZiAoYW55IChy ZWYgLz0gYXJyKSkgZXJyb3Igc3RvcAoraWYgKGF2IC89IDExIC5vci4gaiAvPSAyMSkgZXJy b3Igc3RvcAorCishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxc KGF2byA9IDE7IGF2byA8PSAxMDsgYXZvID0gYXZvIFxcKyAxXFwpIiAxICJvcmlnaW5hbCIg fSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxcKGogPSBh dm8gXFwqIDEgXFwrIDA7IGogPD0gMjA7IGogPSBqIFxcKyAxXFwpIiAxICJvcmlnaW5hbCIg fSB9CishIC0+IG5vIHRlbXAgdmFyCithcnIgPSA0NAorYXZvID0gOTk7IGogPSA5OQorISRv bXAgc2ltZCBjb2xsYXBzZSgyKSBsYXN0cHJpdmF0ZShhdm8sIGopCitkbyBhdm8gPSAxLCAx MAorICBkbyBqID0gYXZvLCAyMAorICAgIGFycihqLCBhdm8pID0gaiArIDEwMCAqIGF2bwor ICBlbmQgZG8KK2VuZCBkbworaWYgKGFueSAocmVmIC89IGFycikpIGVycm9yIHN0b3AKK2lm IChhdm8gLz0gMTEgLm9yLiBqIC89IDIxKSBlcnJvciBzdG9wCisKKyEgeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJmb3IgXFwoYTBcXC5cWzAtOVxdKyA9IDE7IGEwXFwu XFswLTlcXSsgPD0gMTA7IGEwXFwuXFswLTlcXSsgPSBhMFxcLlxbMC05XF0rIFxcKyAxXFwp IiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1l cyAiZm9yIFxcKGogPSBhMFxcLlxbMC05XF0rIFxcKiAxIFxcKyAwOyBqIDw9IDIwOyBqID0g aiBcXCsgMVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAtdGltZXMgIlxcKmEwID0gYTBcXC5cWzAtOVxdKzsiIDEgIm9yaWdpbmFsIiB9IH0K K2FyciA9IDQ0CithMCA9IDk5OyBqID0gOTkKKyEkb21wIHNpbWQgY29sbGFwc2UoMikgbGFz dHByaXZhdGUoYTAsaikKK2RvIGEwID0gMSwgMTAKKyAgZG8gaiA9IGEwLCAyMAorICAgIGFy cihqLCBhMCkgPSBqICsgMTAwICogYTAKKyAgZW5kIGRvCitlbmQgZG8KK2lmIChhbnkgKHJl ZiAvPSBhcnIpKSBlcnJvciBzdG9wCitpZiAoYTAgLz0gMTEgLm9yLiBqIC89IDIxKSBlcnJv ciBzdG9wCisKKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJmb3IgXFwo YTBvXFwuXFswLTlcXSsgPSAxOyBhMG9cXC5cWzAtOVxdKyA8PSAxMDsgYTBvXFwuXFswLTlc XSsgPSBhMG9cXC5cWzAtOVxdKyBcXCsgMVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImZvciBcXChqID0gYTBvXFwuXFswLTlc XSsgXFwqIDEgXFwrIDA7IGogPD0gMjA7IGogPSBqIFxcKyAxXFwpIiAxICJvcmlnaW5hbCIg fSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiXFwqYTBvID0gYTBv XFwuXFswLTlcXSs7IiAxICJvcmlnaW5hbCIgfSB9CithcnIgPSA0NAorYTBvID0gOTk7IGog PSA5OQorISRvbXAgc2ltZCBjb2xsYXBzZSgyKSBsYXN0cHJpdmF0ZShhMG8saikKK2RvIGEw byA9IDEsIDEwCisgIGRvIGogPSBhMG8sIDIwCisgICAgYXJyKGosIGEwbykgPSBqICsgMTAw ICogYTBvCisgIGVuZCBkbworZW5kIGRvCitpZiAoYW55IChyZWYgLz0gYXJyKSkgZXJyb3Ig c3RvcAoraWYgKGEwbyAvPSAxMSAub3IuIGogLz0gMjEpIGVycm9yIHN0b3AKKworISB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImZvciBcXChhMVxcLlxbMC05XF0rID0g MTsgYTFcXC5cWzAtOVxdKyA8PSAxMDsgYTFcXC5cWzAtOVxdKyA9IGExXFwuXFswLTlcXSsg XFwrIDFcXCkiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wLXRpbWVzICJmb3IgXFwoaiA9IGExXFwuXFswLTlcXSsgXFwqIDEgXFwrIDA7IGogPD0g MjA7IGogPSBqIFxcKyAxXFwpIiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAiXFwqXFwqYTEgPSBhMVxcLlxbMC05XF0rOyIgMSAib3Jp Z2luYWwiIH0gfQorYXJyID0gNDQKK2ExID0gOTk7IGogPSA5OQorISBubyBsYXN0IHByaXZh dGUgZm9yICdhMScgYXMgIlRoZSBpbml0aWFsIHN0YXR1cyBvZiBhIHByaXZhdGUgcG9pbnRl ciBpcyB1bmRlZmluZWQuIgorISRvbXAgc2ltZCBjb2xsYXBzZSgyKSBsYXN0cHJpdmF0ZShq KQorZG8gYTEgPSAxLCAxMAorICBkbyBqID0gYTEsIDIwCisgICAgYXJyKGosIGExKSA9IGog KyAxMDAgKiBhMQorICBlbmQgZG8KK2VuZCBkbworaWYgKGFueSAocmVmIC89IGFycikpIGVy cm9yIHN0b3AKK2lmIChqIC89IDIxKSBlcnJvciBzdG9wCisKKyEgeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wLXRpbWVzICJmb3IgXFwoYTJcXC5cWzAtOVxdKyA9IDE7IGEyXFwuXFsw LTlcXSsgPD0gMTA7IGEyXFwuXFswLTlcXSsgPSBhMlxcLlxbMC05XF0rIFxcKyAxXFwpIiAx ICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi Zm9yIFxcKGogPSBhMlxcLlxbMC05XF0rIFxcKiAxIFxcKyAwOyBqIDw9IDIwOyBqID0gaiBc XCsgMVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtdGltZXMgIlxcKlxcKmEyID0gYTJcXC5cWzAtOVxdKzsiIDEgIm9yaWdpbmFsIiB9IH0K K2FyciA9IDQ0CithMiA9IDk5OyBqID0gOTkKKyEgbm8gbGFzdCBwcml2YXRlIGZvciAnYTIn IGFzICJUaGUgaW5pdGlhbCBzdGF0dXMgb2YgYSBwcml2YXRlIHBvaW50ZXIgaXMgdW5kZWZp bmVkLiIKKyEkb21wIHNpbWQgY29sbGFwc2UoMikgbGFzdHByaXZhdGUoaikKK2RvIGEyID0g MSwgMTAKKyAgZG8gaiA9IGEyLCAyMAorICAgIGFycihqLCBhMikgPSBqICsgMTAwICogYTIK KyAgZW5kIGRvCitlbmQgZG8KK2lmIChhbnkgKHJlZiAvPSBhcnIpKSBlcnJvciBzdG9wCitp ZiAoaiAvPSAyMSkgZXJyb3Igc3RvcAorCishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAiZm9yIFxcKGEzXFwuXFswLTlcXSsgPSAxOyBhM1xcLlxbMC05XF0rIDw9IDEw OyBhM1xcLlxbMC05XF0rID0gYTNcXC5cWzAtOVxdKyBcXCsgMVxcKSIgMSAib3JpZ2luYWwi IH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImZvciBcXChqID0g YTNcXC5cWzAtOVxdKyBcXCogMSBcXCsgMDsgaiA8PSAyMDsgaiA9IGogXFwrIDFcXCkiIDEg Im9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJc XCpcXCphMyA9IGEzXFwuXFswLTlcXSs7IiAxICJvcmlnaW5hbCIgfSB9CithcnIgPSA0NAor YTMgPSA5OTsgaiA9IDk5CishJG9tcCBzaW1kIGNvbGxhcHNlKDIpIGxhc3Rwcml2YXRlKGEz LGopCitkbyBhMyA9IDEsIDEwCisgIGRvIGogPSBhMywgMjAKKyAgICBhcnIoaiwgYTMpID0g aiArIDEwMCAqIGEzCisgIGVuZCBkbworZW5kIGRvCitpZiAoYW55IChyZWYgLz0gYXJyKSkg ZXJyb3Igc3RvcAoraWYgKGEzIC89IDExIC5vci4gaiAvPSAyMSkgZXJyb3Igc3RvcAorCish IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxcKGE0XFwuXFswLTlc XSsgPSAxOyBhNFxcLlxbMC05XF0rIDw9IDEwOyBhNFxcLlxbMC05XF0rID0gYTRcXC5cWzAt OVxdKyBcXCsgMVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAtdGltZXMgImZvciBcXChqID0gYTRcXC5cWzAtOVxdKyBcXCogMSBcXCsgMDsg aiA8PSAyMDsgaiA9IGogXFwrIDFcXCkiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJcXCpcXCphNCA9IGE0XFwuXFswLTlcXSs7IiAx ICJvcmlnaW5hbCIgfSB9CithcnIgPSA0NAorYTQgPSA5OTsgaiA9IDk5CishJG9tcCBzaW1k IGNvbGxhcHNlKDIpIGxhc3Rwcml2YXRlKGE0LGopCitkbyBhNCA9IDEsIDEwCisgIGRvIGog PSBhNCwgMjAKKyAgICBhcnIoaiwgYTQpID0gaiArIDEwMCAqIGE0CisgIGVuZCBkbworZW5k IGRvCitpZiAoYW55IChyZWYgLz0gYXJyKSkgZXJyb3Igc3RvcAoraWYgKGE0IC89IDExIC5v ci4gaiAvPSAyMSkgZXJyb3Igc3RvcAorCishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAiZm9yIFxcKGE1ID0gMTsgYTUgPD0gMTA7IGE1ID0gYTUgXFwrIDFcXCkiIDEg Im9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJm b3IgXFwoaiA9IGE1IFxcKiAxIFxcKyAwOyBqIDw9IDIwOyBqID0gaiBcXCsgMVxcKSIgMSAi b3JpZ2luYWwiIH0gfQorISAtPiBubyB0ZW1wIHZhcgorYXJyID0gNDQKK2E1ID0gOTk7IGog PSA5OQorISRvbXAgc2ltZCBjb2xsYXBzZSgyKSBsYXN0cHJpdmF0ZShhNSxqKQorZG8gYTUg PSAxLCAxMAorICBkbyBqID0gYTUsIDIwCisgICAgYXJyKGosIGE1KSA9IGogKyAxMDAgKiBh NQorICBlbmQgZG8KK2VuZCBkbworaWYgKGFueSAocmVmIC89IGFycikpIGVycm9yIHN0b3AK K2lmIChhNSAvPSAxMSAub3IuIGogLz0gMjEpIGVycm9yIHN0b3AKKworISB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImZvciBcXChhNlxcLlxbMC05XF0rID0gMTsgYTZc XC5cWzAtOVxdKyA8PSAxMDsgYTZcXC5cWzAtOVxdKyA9IGE2XFwuXFswLTlcXSsgXFwrIDFc XCkiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJmb3IgXFwoaiA9IGE2XFwuXFswLTlcXSsgXFwqIDEgXFwrIDA7IGogPD0gMjA7IGog PSBqIFxcKyAxXFwpIiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAiXFwqYTYgPSBhNlxcLlxbMC05XF0rOyIgMSAib3JpZ2luYWwiIH0g fQorYXJyID0gNDQKK2E2ID0gOTk7IGogPSA5OQorISBubyBsYXN0IHByaXZhdGUgZm9yICdh NicgYXMgIlRoZSBpbml0aWFsIHN0YXR1cyBvZiBhIHByaXZhdGUgcG9pbnRlciBpcyB1bmRl ZmluZWQuIgorISRvbXAgc2ltZCBjb2xsYXBzZSgyKSBsYXN0cHJpdmF0ZShqKQorZG8gYTYg PSAxLCAxMAorICBkbyBqID0gYTYsIDIwCisgICAgYXJyKGosIGE2KSA9IGogKyAxMDAgKiBh NgorICBlbmQgZG8KK2VuZCBkbworaWYgKGFueSAocmVmIC89IGFycikpIGVycm9yIHN0b3AK K2lmIChqIC89IDIxKSBlcnJvciBzdG9wCisKKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wLXRpbWVzICJmb3IgXFwoYTdcXC5cWzAtOVxdKyA9IDE7IGE3XFwuXFswLTlcXSsgPD0g MTA7IGE3XFwuXFswLTlcXSsgPSBhN1xcLlxbMC05XF0rIFxcKyAxXFwpIiAxICJvcmlnaW5h bCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxcKGog PSBhN1xcLlxbMC05XF0rIFxcKiAxIFxcKyAwOyBqIDw9IDIwOyBqID0gaiBcXCsgMVxcKSIg MSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMg IlxcKmE3ID0gYTdcXC5cWzAtOVxdKzsiIDEgIm9yaWdpbmFsIiB9IH0KK2FyciA9IDQ0Cith NyA9IDk5OyBqID0gOTkKKyEkb21wIHNpbWQgY29sbGFwc2UoMikgbGFzdHByaXZhdGUoYTcs aikKK2RvIGE3ID0gMSwgMTAKKyAgZG8gaiA9IGE3LCAyMAorICAgIGFycihqLCBhNykgPSBq ICsgMTAwICogYTcKKyAgZW5kIGRvCitlbmQgZG8KK2lmIChhbnkgKHJlZiAvPSBhcnIpKSBl cnJvciBzdG9wCitpZiAoYTcgLz0gMTEgLm9yLiBqIC89IDIxKSBlcnJvciBzdG9wCisKK2Rl YWxsb2NhdGUoYTYsIGE3KQorZW5kCisKK2VuZCBtb2R1bGUgbQorCisKK3VzZSBtCitpbXBs aWNpdCBub25lCisKK2ludGVnZXIgOjogYXYKK2ludGVnZXIgOjogYXZvCitpbnRlZ2VyIDo6 IGEwCitpbnRlZ2VyIDo6IGEwbworaW50ZWdlciwgcG9pbnRlciA6OiBhMQoraW50ZWdlciwg cG9pbnRlciA6OiBhMgoraW50ZWdlciwgYWxsb2NhdGFibGUgOjogYTMKK2ludGVnZXIsIGFs bG9jYXRhYmxlIDo6IGE0CisKK2F2ID0gLTk5OyBhdm8gPSAtOTkKK2FsbG9jYXRlKGExLGEy LGEzLGE0KQorY2FsbCBmb28gKGF2LCBhdm8sIGEwLCBhMG8sIGExLCBhMiwgYTMsIGE0KQor ZGVhbGxvY2F0ZShhMSxhMixhMyxhNCkKK2VuZApkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTQuZjkwIGIvbGli Z29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTQu ZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lZjJiZDYxZjE4 MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJh bi9ub24tcmVjdGFuZ3VsYXItbG9vcC00LmY5MApAQCAtMCwwICsxLDIxNSBAQAorISB7IGRn LWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZkdW1wLXRyZWUtb3JpZ2luYWwiIH0KKyEgUFIgZm9y dHJhbi8xMDc0MjQKKworISBTYW1lIGFzIG5vbi1yZWN0YW5ndWxhci1sb29wLTQuZjkwIGJ1 dCBleHByIGluIHVwcGVyIGJvdW5kIAorCittb2R1bGUgbQorY29udGFpbnMKK3N1YnJvdXRp bmUgZm9vIChhdiwgYXZvLCBhMCwgYTBvLCBhMSwgYTIsIGEzLCBhNCkKK2ltcGxpY2l0IG5v bmUKKworaW50ZWdlciwgdmFsdWUgOjogYXYKK2ludGVnZXIsIHZhbHVlLCBvcHRpb25hbCA6 OiBhdm8KK2ludGVnZXIgOjogYTAKK2ludGVnZXIsIG9wdGlvbmFsIDo6IGEwbworaW50ZWdl ciwgcG9pbnRlciA6OiBhMQoraW50ZWdlciwgcG9pbnRlciwgb3B0aW9uYWwgOjogYTIKK2lu dGVnZXIsIGFsbG9jYXRhYmxlIDo6IGEzCitpbnRlZ2VyLCBhbGxvY2F0YWJsZSwgb3B0aW9u YWwgOjogYTQKK2ludGVnZXIgOjogYTUKK2ludGVnZXIsIHBvaW50ZXIgOjogYTYKK2ludGVn ZXIsIGFsbG9jYXRhYmxlIDo6IGE3CitpbnRlZ2VyIDo6IGFycigyMCwxMCksIHJlZigyMCwx MCkKKworaW50ZWdlciA6OiBqLCBpLCBscF9pLCBscF9qCisKK2FsbG9jYXRlKGE2LCBhNykK KworcmVmID0gNDQKK2RvIGkgPSAxLCAxMAorICBkbyBqID0gMSwgaSoyLTEKKyAgICByZWYo aiwgaSkgPSBqICsgMTAwICogaQorICBlbmQgZG8KK2VuZCBkbworbHBfaSA9IGk7IGxwX2og PSBqCisKKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJmb3IgXFwoYXYg PSAxOyBhdiA8PSAxMDsgYXYgPSBhdiBcXCsgMVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImZvciBcXChqID0gMTsgaiA8PSBh diBcXCogMiBcXCsgLTE7IGogPSBqIFxcKyAxXFwpIiAxICJvcmlnaW5hbCIgfSB9CishIC0+ IG5vIHRlbXAgdmFyCithcnIgPSA0NAorYXYgPSA5OTsgaiA9IDk5CishJG9tcCBzaW1kIGNv bGxhcHNlKDIpIGxhc3Rwcml2YXRlKGF2LGopCitkbyBhdiA9IDEsIDEwCisgIGRvIGogPSAx LCBhdioyLTEKKyAgICBhcnIoaiwgYXYpID0gaiArIDEwMCAqIGF2CisgIGVuZCBkbworZW5k IGRvCitpZiAoYW55IChyZWYgLz0gYXJyKSkgZXJyb3Igc3RvcAoraWYgKGF2IC89IGxwX2kg Lm9yLiBqIC89IGxwX2opIGVycm9yIHN0b3AKKworISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAtdGltZXMgImZvciBcXChhdm8gPSAxOyBhdm8gPD0gMTA7IGF2byA9IGF2byBcXCsg MVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgImZvciBcXChqID0gMTsgaiA8PSBhdm8gXFwqIDIgXFwrIC0xOyBqID0gaiBcXCsg MVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISAtPiBubyB0ZW1wIHZhcgorYXJyID0gNDQKK2F2 byA9IDk5OyBqID0gOTkKKyEkb21wIHNpbWQgY29sbGFwc2UoMikgbGFzdHByaXZhdGUoYXZv LCBqKQorZG8gYXZvID0gMSwgMTAKKyAgZG8gaiA9IDEsIGF2byoyLTEKKyAgICBhcnIoaiwg YXZvKSA9IGogKyAxMDAgKiBhdm8KKyAgZW5kIGRvCitlbmQgZG8KK2lmIChhbnkgKHJlZiAv PSBhcnIpKSBlcnJvciBzdG9wCitpZiAoYXZvIC89IGxwX2kgLm9yLiBqIC89IGxwX2opIGVy cm9yIHN0b3AKKworISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImZvciBc XChhMFxcLlxbMC05XF0rID0gMTsgYTBcXC5cWzAtOVxdKyA8PSAxMDsgYTBcXC5cWzAtOVxd KyA9IGEwXFwuXFswLTlcXSsgXFwrIDFcXCkiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJmb3IgXFwoaiA9IDE7IGogPD0gYTBcXC5c WzAtOVxdKyBcXCogMiBcXCsgLTE7IGogPSBqIFxcKyAxXFwpIiAxICJvcmlnaW5hbCIgfSB9 CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiXFwqYTAgPSBhMFxcLlxb MC05XF0rOyIgMSAib3JpZ2luYWwiIH0gfQorYXJyID0gNDQKK2EwID0gOTk7IGogPSA5OQor ISRvbXAgc2ltZCBjb2xsYXBzZSgyKSBsYXN0cHJpdmF0ZShhMCxqKQorZG8gYTAgPSAxLCAx MAorICBkbyBqID0gMSwgYTAqMi0xCisgICAgYXJyKGosIGEwKSA9IGogKyAxMDAgKiBhMAor ICBlbmQgZG8KK2VuZCBkbworaWYgKGFueSAocmVmIC89IGFycikpIGVycm9yIHN0b3AKK2lm IChhMCAvPSBscF9pIC5vci4gaiAvPSBscF9qKSBlcnJvciBzdG9wCisKKyEgeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJmb3IgXFwoYTBvXFwuXFswLTlcXSsgPSAxOyBh MG9cXC5cWzAtOVxdKyA8PSAxMDsgYTBvXFwuXFswLTlcXSsgPSBhMG9cXC5cWzAtOVxdKyBc XCsgMVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtdGltZXMgImZvciBcXChqID0gMTsgaiA8PSBhMG9cXC5cWzAtOVxdKyBcXCogMiBcXCsg LTE7IGogPSBqIFxcKyAxXFwpIiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAiXFwqYTBvID0gYTBvXFwuXFswLTlcXSs7IiAxICJvcmln aW5hbCIgfSB9CithcnIgPSA0NAorYTBvID0gOTk7IGogPSA5OQorISRvbXAgc2ltZCBjb2xs YXBzZSgyKSBsYXN0cHJpdmF0ZShhMG8saikKK2RvIGEwbyA9IDEsIDEwCisgIGRvIGogPSAx LCBhMG8qMi0xCisgICAgYXJyKGosIGEwbykgPSBqICsgMTAwICogYTBvCisgIGVuZCBkbwor ZW5kIGRvCitpZiAoYW55IChyZWYgLz0gYXJyKSkgZXJyb3Igc3RvcAoraWYgKGEwbyAvPSBs cF9pIC5vci4gaiAvPSBscF9qKSBlcnJvciBzdG9wCisKKyEgeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wLXRpbWVzICJmb3IgXFwoYTFcXC5cWzAtOVxdKyA9IDE7IGExXFwuXFswLTlc XSsgPD0gMTA7IGExXFwuXFswLTlcXSsgPSBhMVxcLlxbMC05XF0rIFxcKyAxXFwpIiAxICJv cmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9y IFxcKGogPSAxOyBqIDw9IGExXFwuXFswLTlcXSsgXFwqIDIgXFwrIC0xOyBqID0gaiBcXCsg MVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgIlxcKlxcKmExID0gYTFcXC5cWzAtOVxdKzsiIDEgIm9yaWdpbmFsIiB9IH0KK2Fy ciA9IDQ0CithMSA9IDk5OyBqID0gOTkKKyEgbm8gbGFzdCBwcml2YXRlIGZvciAnYTEnIGFz ICJUaGUgaW5pdGlhbCBzdGF0dXMgb2YgYSBwcml2YXRlIHBvaW50ZXIgaXMgdW5kZWZpbmVk LiIKKyEkb21wIHNpbWQgY29sbGFwc2UoMikgbGFzdHByaXZhdGUoaikKK2RvIGExID0gMSwg MTAKKyAgZG8gaiA9IDEsIGExKjItMQorICAgIGFycihqLCBhMSkgPSBqICsgMTAwICogYTEK KyAgZW5kIGRvCitlbmQgZG8KK2lmIChhbnkgKHJlZiAvPSBhcnIpKSBlcnJvciBzdG9wCitp ZiAoaiAvPSBscF9qKSBlcnJvciBzdG9wCisKKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wLXRpbWVzICJmb3IgXFwoYTJcXC5cWzAtOVxdKyA9IDE7IGEyXFwuXFswLTlcXSsgPD0g MTA7IGEyXFwuXFswLTlcXSsgPSBhMlxcLlxbMC05XF0rIFxcKyAxXFwpIiAxICJvcmlnaW5h bCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxcKGog PSAxOyBqIDw9IGEyXFwuXFswLTlcXSsgXFwqIDIgXFwrIC0xOyBqID0gaiBcXCsgMVxcKSIg MSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMg IlxcKlxcKmEyID0gYTJcXC5cWzAtOVxdKzsiIDEgIm9yaWdpbmFsIiB9IH0KK2FyciA9IDQ0 CithMiA9IDk5OyBqID0gOTkKKyEgbm8gbGFzdCBwcml2YXRlIGZvciAnYTInIGFzICJUaGUg aW5pdGlhbCBzdGF0dXMgb2YgYSBwcml2YXRlIHBvaW50ZXIgaXMgdW5kZWZpbmVkLiIKKyEk b21wIHNpbWQgY29sbGFwc2UoMikgbGFzdHByaXZhdGUoaikKK2RvIGEyID0gMSwgMTAKKyAg ZG8gaiA9IDEsIGEyKjItMQorICAgIGFycihqLCBhMikgPSBqICsgMTAwICogYTIKKyAgZW5k IGRvCitlbmQgZG8KK2lmIChhbnkgKHJlZiAvPSBhcnIpKSBlcnJvciBzdG9wCitpZiAoaiAv PSBscF9qKSBlcnJvciBzdG9wCisKKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJmb3IgXFwoYTNcXC5cWzAtOVxdKyA9IDE7IGEzXFwuXFswLTlcXSsgPD0gMTA7IGEz XFwuXFswLTlcXSsgPSBhM1xcLlxbMC05XF0rIFxcKyAxXFwpIiAxICJvcmlnaW5hbCIgfSB9 CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxcKGogPSAxOyBq IDw9IGEzXFwuXFswLTlcXSsgXFwqIDIgXFwrIC0xOyBqID0gaiBcXCsgMVxcKSIgMSAib3Jp Z2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIlxcKlxc KmEzID0gYTNcXC5cWzAtOVxdKzsiIDEgIm9yaWdpbmFsIiB9IH0KK2FyciA9IDQ0CithMyA9 IDk5OyBqID0gOTkKKyEkb21wIHNpbWQgY29sbGFwc2UoMikgbGFzdHByaXZhdGUoYTMsaikK K2RvIGEzID0gMSwgMTAKKyAgZG8gaiA9IDEsIGEzKjItMQorICAgIGFycihqLCBhMykgPSBq ICsgMTAwICogYTMKKyAgZW5kIGRvCitlbmQgZG8KK2lmIChhbnkgKHJlZiAvPSBhcnIpKSBl cnJvciBzdG9wCitpZiAoYTMgLz0gbHBfaSAub3IuIGogLz0gbHBfaikgZXJyb3Igc3RvcAor CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxcKGE0XFwuXFsw LTlcXSsgPSAxOyBhNFxcLlxbMC05XF0rIDw9IDEwOyBhNFxcLlxbMC05XF0rID0gYTRcXC5c WzAtOVxdKyBcXCsgMVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgImZvciBcXChqID0gMTsgaiA8PSBhNFxcLlxbMC05XF0rIFxc KiAyIFxcKyAtMTsgaiA9IGogXFwrIDFcXCkiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJcXCpcXCphNCA9IGE0XFwuXFswLTlcXSs7 IiAxICJvcmlnaW5hbCIgfSB9CithcnIgPSA0NAorYTQgPSA5OTsgaiA9IDk5CishJG9tcCBz aW1kIGNvbGxhcHNlKDIpIGxhc3Rwcml2YXRlKGE0LGopCitkbyBhNCA9IDEsIDEwCisgIGRv IGogPSAxLCBhNCoyLTEKKyAgICBhcnIoaiwgYTQpID0gaiArIDEwMCAqIGE0CisgIGVuZCBk bworZW5kIGRvCitpZiAoYW55IChyZWYgLz0gYXJyKSkgZXJyb3Igc3RvcAoraWYgKGE0IC89 IGxwX2kgLm9yLiBqIC89IGxwX2opIGVycm9yIHN0b3AKKworISB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgImZvciBcXChhNSA9IDE7IGE1IDw9IDEwOyBhNSA9IGE1IFxc KyAxXFwpIiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAiZm9yIFxcKGogPSAxOyBqIDw9IGE1IFxcKiAyIFxcKyAtMTsgaiA9IGogXFwr IDFcXCkiIDEgIm9yaWdpbmFsIiB9IH0KKyEgLT4gbm8gdGVtcCB2YXIKK2FyciA9IDQ0Cith NSA9IDk5OyBqID0gOTkKKyEkb21wIHNpbWQgY29sbGFwc2UoMikgbGFzdHByaXZhdGUoYTUs aikKK2RvIGE1ID0gMSwgMTAKKyAgZG8gaiA9IDEsIGE1KjItMQorICAgIGFycihqLCBhNSkg PSBqICsgMTAwICogYTUKKyAgZW5kIGRvCitlbmQgZG8KK2lmIChhbnkgKHJlZiAvPSBhcnIp KSBlcnJvciBzdG9wCitpZiAoYTUgLz0gbHBfaSAub3IuIGogLz0gbHBfaikgZXJyb3Igc3Rv cAorCishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxcKGE2XFwu XFswLTlcXSsgPSAxOyBhNlxcLlxbMC05XF0rIDw9IDEwOyBhNlxcLlxbMC05XF0rID0gYTZc XC5cWzAtOVxdKyBcXCsgMVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgImZvciBcXChqID0gMTsgaiA8PSBhNlxcLlxbMC05XF0r IFxcKiAyIFxcKyAtMTsgaiA9IGogXFwrIDFcXCkiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJcXCphNiA9IGE2XFwuXFswLTlcXSs7 IiAxICJvcmlnaW5hbCIgfSB9CithcnIgPSA0NAorYTYgPSA5OTsgaiA9IDk5CishIG5vIGxh c3QgcHJpdmF0ZSBmb3IgJ2E2JyBhcyAiVGhlIGluaXRpYWwgc3RhdHVzIG9mIGEgcHJpdmF0 ZSBwb2ludGVyIGlzIHVuZGVmaW5lZC4iCishJG9tcCBzaW1kIGNvbGxhcHNlKDIpIGxhc3Rw cml2YXRlKGopCitkbyBhNiA9IDEsIDEwCisgIGRvIGogPSAxLCBhNioyLTEKKyAgICBhcnIo aiwgYTYpID0gaiArIDEwMCAqIGE2CisgIGVuZCBkbworZW5kIGRvCitpZiAoYW55IChyZWYg Lz0gYXJyKSkgZXJyb3Igc3RvcAoraWYgKGogLz0gbHBfaikgZXJyb3Igc3RvcAorCishIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9yIFxcKGE3XFwuXFswLTlcXSsg PSAxOyBhN1xcLlxbMC05XF0rIDw9IDEwOyBhN1xcLlxbMC05XF0rID0gYTdcXC5cWzAtOVxd KyBcXCsgMVxcKSIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAtdGltZXMgImZvciBcXChqID0gMTsgaiA8PSBhN1xcLlxbMC05XF0rIFxcKiAyIFxc KyAtMTsgaiA9IGogXFwrIDFcXCkiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJcXCphNyA9IGE3XFwuXFswLTlcXSs7IiAxICJvcmln aW5hbCIgfSB9CithcnIgPSA0NAorYTcgPSA5OTsgaiA9IDk5CishJG9tcCBzaW1kIGNvbGxh cHNlKDIpIGxhc3Rwcml2YXRlKGE3LGopCitkbyBhNyA9IDEsIDEwCisgIGRvIGogPSAxLCBh NyoyLTEKKyAgICBhcnIoaiwgYTcpID0gaiArIDEwMCAqIGE3CisgIGVuZCBkbworZW5kIGRv CitpZiAoYW55IChyZWYgLz0gYXJyKSkgZXJyb3Igc3RvcAoraWYgKGE3IC89IGxwX2kgLm9y LiBqIC89IGxwX2opIGVycm9yIHN0b3AKKworZGVhbGxvY2F0ZShhNiwgYTcpCitlbmQKKwor ZW5kIG1vZHVsZSBtCisKKwordXNlIG0KK2ltcGxpY2l0IG5vbmUKKworaW50ZWdlciA6OiBh dgoraW50ZWdlciA6OiBhdm8KK2ludGVnZXIgOjogYTAKK2ludGVnZXIgOjogYTBvCitpbnRl Z2VyLCBwb2ludGVyIDo6IGExCitpbnRlZ2VyLCBwb2ludGVyIDo6IGEyCitpbnRlZ2VyLCBh bGxvY2F0YWJsZSA6OiBhMworaW50ZWdlciwgYWxsb2NhdGFibGUgOjogYTQKKworYXYgPSAt OTk7IGF2byA9IC05OQorYWxsb2NhdGUoYTEsYTIsYTMsYTQpCitjYWxsIGZvbyAoYXYsIGF2 bywgYTAsIGEwbywgYTEsIGEyLCBhMywgYTQpCitkZWFsbG9jYXRlKGExLGEyLGEzLGE0KQor ZW5kCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbm9u LXJlY3Rhbmd1bGFyLWxvb3AtNS5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZv cnRyYW4vbm9uLXJlY3Rhbmd1bGFyLWxvb3AtNS5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjY0M2FiNzk2YTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbGli Z29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL25vbi1yZWN0YW5ndWxhci1sb29wLTUu ZjkwCkBAIC0wLDAgKzEsMjggQEAKKyEgeyBkZy1kbyBjb21waWxlIH0KKyEgeyBkZy1hZGRp dGlvbmFsLW9wdGlvbnMgIi1tc3NlMiIgeyB0YXJnZXQgc3NlMl9ydW50aW1lIH0gfQorISB7 IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLW1hdngiIHsgdGFyZ2V0IGF2eF9ydW50aW1lIH0g fQorCishIFBSIGZvcnRyYW4vMTA3NDI0CisKKyEgTm9ucmVjdGFuZ3VsYXIgbG9vcCBuZXN0 cyBjaGVja3MKKworISRvbXAgc2ltZCBjb2xsYXBzZSgyKQorZG8gaSA9IDEsIDEwCisgIGRv IGogPSBpLCAxMCwgMiAgISB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiBu b24tcmVjdGFuZ3VsYXIgbG9vcCBuZXN0IHdpdGggc3RlcCBvdGhlciB0aGFuIGNvbnN0YW50 IDEgb3IgLTEgZm9yICdqJyIgfQorICBlbmQgZG8KK2VuZCBkbworCishJG9tcCBkbyBjb2xs YXBzZSgyKSBsYXN0cHJpdmF0ZShqKSAgISB7IGRnLWVycm9yICJsYXN0cHJpdmF0ZSB2YXJp YWJsZSAnaicgaXMgcHJpdmF0ZSBpbiBvdXRlciBjb250ZXh0IiB9CitkbyBpID0gMSwgMTAK KyAgZG8gaiA9IGksIDEwLCAyICAhIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50 ZWQ6IG5vbi1yZWN0YW5ndWxhciBsb29wIG5lc3Qgd2l0aCBzdGVwIG90aGVyIHRoYW4gY29u c3RhbnQgMSBvciAtMSBmb3IgJ2onIiB9CisgIGVuZCBkbworZW5kIGRvCitpZiAoaSAvPSAx MSkgc3RvcCAxCisKKyEkb21wIHNpbWQgY29sbGFwc2UoMikgbGFzdHByaXZhdGUoaikKK2Rv IGkgPSAxLCAxMAorICBkbyBqID0gaSwgMTAsIDIgICEgeyBkZy1tZXNzYWdlICJzb3JyeSwg dW5pbXBsZW1lbnRlZDogbm9uLXJlY3Rhbmd1bGFyIGxvb3AgbmVzdCB3aXRoIHN0ZXAgb3Ro ZXIgdGhhbiBjb25zdGFudCAxIG9yIC0xIGZvciAnaiciIH0KKyAgZW5kIGRvCitlbmQgZG8K K2lmIChpIC89IDExKSBzdG9wIDEKK2VuZAo= --------------RDrqHLajB0993hUbiAzUNRbG--