From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 40835 invoked by alias); 9 Jan 2016 19:33:18 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 40816 invoked by uid 89); 9 Jan 2016 19:33:17 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=1.3 required=5.0 tests=AWL,BAYES_99,BAYES_999,FREEMAIL_FROM,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 spammy=Assigned, 173, posible, trim X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-ob0-f173.google.com Received: from mail-ob0-f173.google.com (HELO mail-ob0-f173.google.com) (209.85.214.173) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sat, 09 Jan 2016 19:33:14 +0000 Received: by mail-ob0-f173.google.com with SMTP id wp13so243887609obc.1; Sat, 09 Jan 2016 11:33:13 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.60.124.83 with SMTP id mg19mr14822550oeb.14.1452367991808; Sat, 09 Jan 2016 11:33:11 -0800 (PST) Received: by 10.202.175.19 with HTTP; Sat, 9 Jan 2016 11:33:11 -0800 (PST) Date: Sat, 09 Jan 2016 19:33:00 -0000 Message-ID: Subject: [Patch, fortran] Bug 68241 - [meta-bug] Deferred-length character - PRs49630, 54070, 60593, 60795, 61147, 63232 and 64324 From: Paul Richard Thomas To: "fortran@gcc.gnu.org" , gcc-patches Cc: Steve Kargl , Damian Rouson , Dominique Dhumieres Content-Type: multipart/mixed; boundary=047d7b5d2fd23c82860528ebc6f8 X-SW-Source: 2016-01/txt/msg00513.txt.bz2 --047d7b5d2fd23c82860528ebc6f8 Content-Type: text/plain; charset=UTF-8 Content-length: 3719 Dear All, This is a further instalment of deferred character length fixes. I have listed the status of all the deferred length PRs that I know of in an attachment. As far as I can see, there are five left that are really concerned with deferred character length functionality. In terms of the number of PRs fixed, this patch is rather less impressive than it looks. Essentially four things have been fixed: (i) Deferred character length results are passed by reference and so, within the procedure itself, they are consistently indirectly referenced; (ii) The deferred character types are made correctly by indirectly referencing the character length; (iii) Array references to deferred character arrays use pointer arithmetic; and (iv) Scalar assignments to unallocated arrays are trapped at runtime with -fcheck=mem. A minor tweak was required to fix PR64324 because deferred length characters were being misidentified as assumed length. The ChangeLog is clear as to what has been done. The only point on which I am uncertain is that of making the length parameter of deferred character length procedure results TREE_STATIC. This was required to make the patch function correctly at any level of optimization. Is this the best and/or only way of doing this? Bootstrapped and regtested on FC21/x86_64 - OK for trunk and, after a decent interval, 5 branch? Cheers Paul 2016-01-09 Paul Thomas PR fortran/64324 * resolve.c (check_uop_procedure): Prevent deferred length characters from being trapped by assumed length error. PR fortran/49630 PR fortran/54070 PR fortran/60593 PR fortran/60795 PR fortran/61147 PR fortran/64324 * trans-array.c (gfc_conv_scalarized_array_ref): Pass decl for function as well as variable expressions. * trans.c (gfc_build_array_ref): Expand logic for setting span to include indirect references to character lengths. * trans-decl.c (gfc_get_symbol_decl): Ensure that deferred result char lengths that are PARM_DECLs are indirectly referenced both for directly passed and by reference. (create_function_arglist): If the length type is a pointer type then store the length as the 'passed_length' and make the char length an indirect reference to it. (gfc_trans_deferred_vars): If a character length has escaped being set as an indirect reference, return it via the 'passed length'. * trans-expr.c (gfc_conv_procedure_call): The length of deferred character length results is set TREE_STATIC and set to zero. (gfc_trans_assignment_1): Do not fix the rse string_length if it is a variable, a parameter or an indirect reference. Add the code to trap assignment of scalars to unallocated arrays. * trans-stmt.c (gfc_trans_allocate): Remove 'def_str_len' and all references to it. Instead, replicate the code to obtain a explicitly defined string length and provide a value before array allocation so that the dtype is correctly set. trans-types.c (gfc_get_character_type): If the character length is a pointer, use the indirect reference. 2016-01-09 Paul Thomas PR fortran/49630 * gfortran.dg/deferred_character_13.f90: New test for the fix of comment 3 of the PR. PR fortran/54070 * gfortran.dg/deferred_character_8.f90: New test * gfortran.dg/allocate_error_5.f90: New test PR fortran/60593 * gfortran.dg/deferred_character_10.f90: New test PR fortran/60795 * gfortran.dg/deferred_character_14.f90: New test PR fortran/61147 * gfortran.dg/deferred_character_11.f90: New test PR fortran/64324 * gfortran.dg/deferred_character_9.f90: New test --047d7b5d2fd23c82860528ebc6f8 Content-Type: text/plain; charset=US-ASCII; name="submit.diff" Content-Disposition: attachment; filename="submit.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ij7gsblz1 Content-length: 31891 SW5kZXg6IGdjYy9mb3J0cmFuL3Jlc29sdmUuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CioqKiBnY2MvZm9ydHJhbi9yZXNvbHZlLmMJKHJldmlzaW9uIDIz MjE2MykKLS0tIGdjYy9mb3J0cmFuL3Jlc29sdmUuYwkod29ya2luZyBjb3B5 KQoqKioqKioqKioqKioqKiogY2hlY2tfdW9wX3Byb2NlZHVyZSAoZ2ZjX3N5 bWJvbCAqc3ltLCBsbwoqKiogMTUzMjAsMTUzMjggKioqKgogICAgICB9CiAg CiAgICBpZiAoc3ltLT50cy50eXBlID09IEJUX0NIQVJBQ1RFUgohICAgICAg ICYmICEoc3ltLT50cy51LmNsICYmIHN5bS0+dHMudS5jbC0+bGVuZ3RoKQoh ICAgICAgICYmICEoc3ltLT5yZXN1bHQgJiYgc3ltLT5yZXN1bHQtPnRzLnUu Y2wKISAJICAgJiYgc3ltLT5yZXN1bHQtPnRzLnUuY2wtPmxlbmd0aCkpCiAg ICAgIHsKICAgICAgICBnZmNfZXJyb3IgKCJVc2VyIG9wZXJhdG9yIHByb2Nl ZHVyZSAlcXMgYXQgJUwgY2Fubm90IGJlIGFzc3VtZWQgIgogIAkJICJjaGFy YWN0ZXIgbGVuZ3RoIiwgc3ltLT5uYW1lLCAmd2hlcmUpOwotLS0gMTUzMjAs MTUzMjggLS0tLQogICAgICB9CiAgCiAgICBpZiAoc3ltLT50cy50eXBlID09 IEJUX0NIQVJBQ1RFUgohICAgICAgICYmICEoKHN5bS0+dHMudS5jbCAmJiBz eW0tPnRzLnUuY2wtPmxlbmd0aCkgfHwgc3ltLT50cy5kZWZlcnJlZCkKISAg ICAgICAmJiAhKHN5bS0+cmVzdWx0ICYmICgoc3ltLT5yZXN1bHQtPnRzLnUu Y2wKISAJICAgJiYgc3ltLT5yZXN1bHQtPnRzLnUuY2wtPmxlbmd0aCkgfHwg c3ltLT5yZXN1bHQtPnRzLmRlZmVycmVkKSkpCiAgICAgIHsKICAgICAgICBn ZmNfZXJyb3IgKCJVc2VyIG9wZXJhdG9yIHByb2NlZHVyZSAlcXMgYXQgJUwg Y2Fubm90IGJlIGFzc3VtZWQgIgogIAkJICJjaGFyYWN0ZXIgbGVuZ3RoIiwg c3ltLT5uYW1lLCAmd2hlcmUpOwpJbmRleDogZ2NjL2ZvcnRyYW4vdHJhbnMt YXJyYXkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2MvZm9ydHJh bi90cmFucy1hcnJheS5jCShyZXZpc2lvbiAyMzIxNjMpCi0tLSBnY2MvZm9y dHJhbi90cmFucy1hcnJheS5jCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioq KioqKiBnZmNfY29udl9zY2FsYXJpemVkX2FycmF5X3JlZiAoZ2ZjX3NlICoK KioqIDMxNjUsMzE3MSAqKioqCiAgCQkJICAgICBpbmRleCwgaW5mby0+b2Zm c2V0KTsKICAKICAgIGlmIChleHByICYmIChpc19zdWJyZWZfYXJyYXkgKGV4 cHIpCiEgCSAgICAgICB8fCAoZXhwci0+dHMuZGVmZXJyZWQgJiYgZXhwci0+ ZXhwcl90eXBlID09IEVYUFJfVkFSSUFCTEUpKSkKICAgICAgZGVjbCA9IGV4 cHItPnN5bXRyZWUtPm4uc3ltLT5iYWNrZW5kX2RlY2w7CiAgCiAgICB0bXAg PSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xvY2F0aW9u LCBpbmZvLT5kYXRhKTsKLS0tIDMxNjUsMzE3MiAtLS0tCiAgCQkJICAgICBp bmRleCwgaW5mby0+b2Zmc2V0KTsKICAKICAgIGlmIChleHByICYmIChpc19z dWJyZWZfYXJyYXkgKGV4cHIpCiEgCSAgICAgICB8fCAoZXhwci0+dHMuZGVm ZXJyZWQgJiYgKGV4cHItPmV4cHJfdHlwZSA9PSBFWFBSX1ZBUklBQkxFCiEg CQkJCQkgfHwgZXhwci0+ZXhwcl90eXBlID09IEVYUFJfRlVOQ1RJT04pKSkp CiAgICAgIGRlY2wgPSBleHByLT5zeW10cmVlLT5uLnN5bS0+YmFja2VuZF9k ZWNsOwogIAogICAgdG1wID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9j IChpbnB1dF9sb2NhdGlvbiwgaW5mby0+ZGF0YSk7CkluZGV4OiBnY2MvZm9y dHJhbi90cmFucy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9m b3J0cmFuL3RyYW5zLmMJKHJldmlzaW9uIDIzMjE2MykKLS0tIGdjYy9mb3J0 cmFuL3RyYW5zLmMJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqIGdm Y19idWlsZF9hcnJheV9yZWYgKHRyZWUgYmFzZSwgdHJlZSBvZmYKKioqIDMz NSwzNDQgKioqKgogICAgICAgcmVmZXJlbmNlcy4gICovCiAgICBpZiAodHlw ZSAmJiBUUkVFX0NPREUgKHR5cGUpID09IEFSUkFZX1RZUEUKICAgICAgICAm JiBUWVBFX01BWFZBTCAoVFlQRV9ET01BSU4gKHR5cGUpKSAhPSBOVUxMX1RS RUUKISAgICAgICAmJiBUUkVFX0NPREUgKFRZUEVfTUFYVkFMIChUWVBFX0RP TUFJTiAodHlwZSkpKSA9PSBWQVJfREVDTAogICAgICAgICYmIGRlY2wKISAg ICAgICAmJiBERUNMX0NPTlRFWFQgKFRZUEVfTUFYVkFMIChUWVBFX0RPTUFJ TiAodHlwZSkpKQohIAkJCQkJPT0gREVDTF9DT05URVhUIChkZWNsKSkKICAg ICAgc3BhbiA9IFRZUEVfTUFYVkFMIChUWVBFX0RPTUFJTiAodHlwZSkpOwog ICAgZWxzZQogICAgICBzcGFuID0gTlVMTF9UUkVFOwotLS0gMzM1LDM0NyAt LS0tCiAgICAgICByZWZlcmVuY2VzLiAgKi8KICAgIGlmICh0eXBlICYmIFRS RUVfQ09ERSAodHlwZSkgPT0gQVJSQVlfVFlQRQogICAgICAgICYmIFRZUEVf TUFYVkFMIChUWVBFX0RPTUFJTiAodHlwZSkpICE9IE5VTExfVFJFRQohICAg ICAgICYmIChUUkVFX0NPREUgKFRZUEVfTUFYVkFMIChUWVBFX0RPTUFJTiAo dHlwZSkpKSA9PSBWQVJfREVDTAohIAkgIHx8IFRSRUVfQ09ERSAoVFlQRV9N QVhWQUwgKFRZUEVfRE9NQUlOICh0eXBlKSkpID09IElORElSRUNUX1JFRikK ICAgICAgICAmJiBkZWNsCiEgICAgICAgJiYgKFRSRUVfQ09ERSAoVFlQRV9N QVhWQUwgKFRZUEVfRE9NQUlOICh0eXBlKSkpID09IElORElSRUNUX1JFRgoh IAkgIHx8IFRSRUVfQ09ERSAoZGVjbCkgPT0gRlVOQ1RJT05fREVDTAohIAkg IHx8IERFQ0xfQ09OVEVYVCAoVFlQRV9NQVhWQUwgKFRZUEVfRE9NQUlOICh0 eXBlKSkpCiEgCQkJCQk9PSBERUNMX0NPTlRFWFQgKGRlY2wpKSkKICAgICAg c3BhbiA9IFRZUEVfTUFYVkFMIChUWVBFX0RPTUFJTiAodHlwZSkpOwogICAg ZWxzZQogICAgICBzcGFuID0gTlVMTF9UUkVFOwoqKioqKioqKioqKioqKiog Z2ZjX2J1aWxkX2FycmF5X3JlZiAodHJlZSBiYXNlLCB0cmVlIG9mZgoqKiog MzU0LDM2MCAqKioqCiAgICAgICBhbmQgcmVmZXJlbmNlIHRoZSBlbGVtZW50 IHdpdGggcG9pbnRlciBhcml0aG1ldGljLiAgKi8KICAgIGlmICgoZGVjbCAm JiAoVFJFRV9DT0RFIChkZWNsKSA9PSBGSUVMRF9ERUNMCiAgCQl8fCBUUkVF X0NPREUgKGRlY2wpID09IFZBUl9ERUNMCiEgCQl8fCBUUkVFX0NPREUgKGRl Y2wpID09IFBBUk1fREVDTCkKICAgICAgICAgJiYgKChHRkNfREVDTF9TVUJS RUZfQVJSQVlfUCAoZGVjbCkKICAJICAgICYmICFpbnRlZ2VyX3plcm9wIChH RkNfREVDTF9TUEFOIChkZWNsKSkpCiAgCSAgIHx8IEdGQ19ERUNMX0NMQVNT IChkZWNsKQotLS0gMzU3LDM2NCAtLS0tCiAgICAgICBhbmQgcmVmZXJlbmNl IHRoZSBlbGVtZW50IHdpdGggcG9pbnRlciBhcml0aG1ldGljLiAgKi8KICAg IGlmICgoZGVjbCAmJiAoVFJFRV9DT0RFIChkZWNsKSA9PSBGSUVMRF9ERUNM CiAgCQl8fCBUUkVFX0NPREUgKGRlY2wpID09IFZBUl9ERUNMCiEgCQl8fCBU UkVFX0NPREUgKGRlY2wpID09IFBBUk1fREVDTAohIAkJfHwgVFJFRV9DT0RF IChkZWNsKSA9PSBGVU5DVElPTl9ERUNMKQogICAgICAgICAmJiAoKEdGQ19E RUNMX1NVQlJFRl9BUlJBWV9QIChkZWNsKQogIAkgICAgJiYgIWludGVnZXJf emVyb3AgKEdGQ19ERUNMX1NQQU4gKGRlY2wpKSkKICAJICAgfHwgR0ZDX0RF Q0xfQ0xBU1MgKGRlY2wpCkluZGV4OiBnY2MvZm9ydHJhbi90cmFucy1kZWNs LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL2ZvcnRyYW4vdHJh bnMtZGVjbC5jCShyZXZpc2lvbiAyMzIxNjMpCi0tLSBnY2MvZm9ydHJhbi90 cmFucy1kZWNsLmMJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqIGdm Y19nZXRfc3ltYm9sX2RlY2wgKGdmY19zeW1ib2wgKiBzeW0pCioqKiAxMzc3 LDEzODQgKioqKgogIAkmJiBUUkVFX0NPREUgKHN5bS0+dHMudS5jbC0+YmFj a2VuZF9kZWNsKSA9PSBQQVJNX0RFQ0wpCiAgICAgIHsKICAgICAgICBzeW0t PnRzLnUuY2wtPnBhc3NlZF9sZW5ndGggPSBzeW0tPnRzLnUuY2wtPmJhY2tl bmRfZGVjbDsKISAgICAgICBzeW0tPnRzLnUuY2wtPmJhY2tlbmRfZGVjbCA9 IE5VTExfVFJFRTsKISAgICAgICBsZW5ndGggPSBnZmNfY3JlYXRlX3N0cmlu Z19sZW5ndGggKHN5bSk7CiAgICAgIH0KICAKICAgIGZ1bl9vcl9yZXMgPSBi eXJlZiAmJiAoc3ltLT5hdHRyLnJlc3VsdAotLS0gMTM3NywxMzg0IC0tLS0K ICAJJiYgVFJFRV9DT0RFIChzeW0tPnRzLnUuY2wtPmJhY2tlbmRfZGVjbCkg PT0gUEFSTV9ERUNMKQogICAgICB7CiAgICAgICAgc3ltLT50cy51LmNsLT5w YXNzZWRfbGVuZ3RoID0gc3ltLT50cy51LmNsLT5iYWNrZW5kX2RlY2w7CiEg ICAgICAgZ2NjX2Fzc2VydCAoUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAo c3ltLT50cy51LmNsLT5wYXNzZWRfbGVuZ3RoKSkpOwohICAgICAgIHN5bS0+ dHMudS5jbC0+YmFja2VuZF9kZWNsID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9y ZWYgKHN5bS0+dHMudS5jbC0+YmFja2VuZF9kZWNsKTsKICAgICAgfQogIAog ICAgZnVuX29yX3JlcyA9IGJ5cmVmICYmIChzeW0tPmF0dHIucmVzdWx0Cioq KioqKioqKioqKioqKiBnZmNfZ2V0X3N5bWJvbF9kZWNsIChnZmNfc3ltYm9s ICogc3ltKQoqKiogMTQyMCwxNDI4ICoqKioKLS0tIDE0MjAsMTQzMSAtLS0t CiAgCQkgIC8qIFdlIG5lZWQgdG8gaW5zZXJ0IGEgaW5kaXJlY3QgcmVmIGZv ciBwYXJhbSBkZWNscy4gICovCiAgCQkgIGlmIChzeW0tPnRzLnUuY2wtPmJh Y2tlbmRfZGVjbAogIAkJICAgICAgJiYgVFJFRV9DT0RFIChzeW0tPnRzLnUu Y2wtPmJhY2tlbmRfZGVjbCkgPT0gUEFSTV9ERUNMKQorIAkJICAgIHsKKyAJ CSAgICAgIHN5bS0+dHMudS5jbC0+cGFzc2VkX2xlbmd0aCA9IHN5bS0+dHMu dS5jbC0+YmFja2VuZF9kZWNsOwogIAkJICAgICAgc3ltLT50cy51LmNsLT5i YWNrZW5kX2RlY2wgPQogIAkJCWJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmIChz eW0tPnRzLnUuY2wtPmJhY2tlbmRfZGVjbCk7CiAgCQkgICAgfQorIAkJfQog IAkgICAgICAvKiBGb3IgYWxsIG90aGVyIHBhcmFtZXRlcnMgbWFrZSBzdXJl LCB0aGF0IHRoZXkgYXJlIGNvcGllZCBzbwogIAkJIHRoYXQgdGhlIHZhbHVl IGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBhcmUgbG9jYWwgdG8gdGhlIHJvdXRp bmUKICAJCSBieSBnZW5lcmF0aW5nIGEgdGVtcG9yYXJ5IHZhcmlhYmxlLiAg Ki8KKioqKioqKioqKioqKioqIGdmY19nZXRfc3ltYm9sX2RlY2wgKGdmY19z eW1ib2wgKiBzeW0pCioqKiAxNDMxLDE0MzYgKioqKgotLS0gMTQzNCwxNDQz IC0tLS0KICAJCSAgICAgICAmJiBzeW0tPnRzLnUuY2wtPmJhY2tlbmRfZGVj bCkKICAJCXsKICAJCSAgc3ltLT50cy51LmNsLT5wYXNzZWRfbGVuZ3RoID0g c3ltLT50cy51LmNsLT5iYWNrZW5kX2RlY2w7CisgCQkgIGlmIChQT0lOVEVS X1RZUEVfUCAoVFJFRV9UWVBFIChzeW0tPnRzLnUuY2wtPnBhc3NlZF9sZW5n dGgpKSkKKyAJCSAgICBzeW0tPnRzLnUuY2wtPmJhY2tlbmRfZGVjbAorIAkJ CT0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWYgKHN5bS0+dHMudS5jbC0+YmFj a2VuZF9kZWNsKTsKKyAJCSAgZWxzZQogIAkJICBzeW0tPnRzLnUuY2wtPmJh Y2tlbmRfZGVjbCA9IE5VTExfVFJFRTsKICAJCX0KICAJICAgIH0KKioqKioq KioqKioqKioqIGNyZWF0ZV9mdW5jdGlvbl9hcmdsaXN0IChnZmNfc3ltYm9s ICogc3kKKioqIDIyNjQsMjI2OSAqKioqCi0tLSAyMjcxLDIyODMgLS0tLQog IAkgICAgICB0eXBlID0gZ2ZjX3N5bV90eXBlIChhcmcpOwogIAkgICAgICBh cmctPmJhY2tlbmRfZGVjbCA9IGJhY2tlbmRfZGVjbDsKICAJICAgICAgdHlw ZSA9IGJ1aWxkX3JlZmVyZW5jZV90eXBlICh0eXBlKTsKKyAKKyAJICAgICAg aWYgKFBPSU5URVJfVFlQRV9QIChsZW5fdHlwZSkpCisgCQl7CisgCQkgIHN5 bS0+dHMudS5jbC0+cGFzc2VkX2xlbmd0aCA9IGxlbmd0aDsKKyAJCSAgc3lt LT50cy51LmNsLT5iYWNrZW5kX2RlY2wgPQorIAkJICAgIGJ1aWxkX2ZvbGRf aW5kaXJlY3RfcmVmX2xvYyAoaW5wdXRfbG9jYXRpb24sIGxlbmd0aCk7Cisg CQl9CiAgCSAgICB9CiAgCX0KICAKKioqKioqKioqKioqKioqIGNyZWF0ZV9m dW5jdGlvbl9hcmdsaXN0IChnZmNfc3ltYm9sICogc3kKKioqIDIzNDcsMjM1 MyAqKioqCiAgCSAgaWYgKGYtPnN5bS0+dHMudS5jbC0+YmFja2VuZF9kZWNs ID09IE5VTEwKICAJICAgICAgfHwgZi0+c3ltLT50cy51LmNsLT5iYWNrZW5k X2RlY2wgPT0gbGVuZ3RoKQogIAkgICAgewohIAkgICAgICBpZiAoZi0+c3lt LT50cy51LmNsLT5iYWNrZW5kX2RlY2wgPT0gTlVMTCkKICAJCWdmY19jcmVh dGVfc3RyaW5nX2xlbmd0aCAoZi0+c3ltKTsKICAKICAJICAgICAgLyogTWFr ZSBzdXJlIFBBUk1fREVDTCB0eXBlIGRvZXNuJ3QgcG9pbnQgdG8gaW5jb21w bGV0ZSB0eXBlLiAgKi8KLS0tIDIzNjEsMjM3MCAtLS0tCiAgCSAgaWYgKGYt PnN5bS0+dHMudS5jbC0+YmFja2VuZF9kZWNsID09IE5VTEwKICAJICAgICAg fHwgZi0+c3ltLT50cy51LmNsLT5iYWNrZW5kX2RlY2wgPT0gbGVuZ3RoKQog IAkgICAgewohIAkgICAgICBpZiAoUE9JTlRFUl9UWVBFX1AgKGxlbl90eXBl KSkKISAJCWYtPnN5bS0+dHMudS5jbC0+YmFja2VuZF9kZWNsID0KISAJCQli dWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xvY2F0aW9uLCBs ZW5ndGgpOwohIAkgICAgICBlbHNlIGlmIChmLT5zeW0tPnRzLnUuY2wtPmJh Y2tlbmRfZGVjbCA9PSBOVUxMKQogIAkJZ2ZjX2NyZWF0ZV9zdHJpbmdfbGVu Z3RoIChmLT5zeW0pOwogIAogIAkgICAgICAvKiBNYWtlIHN1cmUgUEFSTV9E RUNMIHR5cGUgZG9lc24ndCBwb2ludCB0byBpbmNvbXBsZXRlIHR5cGUuICAq LwoqKioqKioqKioqKioqKiogZ2ZjX3RyYW5zX2RlZmVycmVkX3ZhcnMgKGdm Y19zeW1ib2wgKiBwcgoqKiogMzk3NSwzOTg2ICoqKioKLS0tIDM5OTIsNDAx MCAtLS0tCiAgCSAgICAgIGdmY19yZXN0b3JlX2JhY2tlbmRfbG9jdXMgKCZs b2MpOwogIAogIAkgICAgICAvKiBQYXNzIGJhY2sgdGhlIHN0cmluZyBsZW5n dGggb24gZXhpdC4gICovCisgCSAgICAgIHRtcCA9IHByb2Nfc3ltLT50cy51 LmNsLT5iYWNrZW5kX2RlY2w7CisgCSAgICAgIGlmIChUUkVFX0NPREUgKHRt cCkgIT0gSU5ESVJFQ1RfUkVGKQorIAkJewogIAkJICB0bXAgPSBwcm9jX3N5 bS0+dHMudS5jbC0+cGFzc2VkX2xlbmd0aDsKICAJCSAgdG1wID0gYnVpbGRf Zm9sZF9pbmRpcmVjdF9yZWZfbG9jIChpbnB1dF9sb2NhdGlvbiwgdG1wKTsK ICAJCSAgdG1wID0gZm9sZF9jb252ZXJ0IChnZmNfY2hhcmxlbl90eXBlX25v ZGUsIHRtcCk7CiAgCQkgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRf bG9jYXRpb24sIE1PRElGWV9FWFBSLAogIAkJCQkJIGdmY19jaGFybGVuX3R5 cGVfbm9kZSwgdG1wLAogIAkJCQkJIHByb2Nfc3ltLT50cy51LmNsLT5iYWNr ZW5kX2RlY2wpOworIAkJfQorIAkgICAgICBlbHNlCisgCQl0bXAgPSBOVUxM X1RSRUU7CisgCiAgCSAgICAgIGdmY19hZGRfaW5pdF9jbGVhbnVwIChibG9j aywgZ2ZjX2ZpbmlzaF9ibG9jayAoJmluaXQpLCB0bXApOwogIAkgICAgfQog IAkgIGVsc2UgaWYgKFRSRUVfQ09ERSAocHJvY19zeW0tPnRzLnUuY2wtPmJh Y2tlbmRfZGVjbCkgPT0gVkFSX0RFQ0wpCkluZGV4OiBnY2MvZm9ydHJhbi90 cmFucy1leHByLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL2Zv cnRyYW4vdHJhbnMtZXhwci5jCShyZXZpc2lvbiAyMzIxNjMpCi0tLSBnY2Mv Zm9ydHJhbi90cmFucy1leHByLmMJKHdvcmtpbmcgY29weSkKKioqKioqKioq KioqKioqIGdmY19jb252X3Byb2NlZHVyZV9jYWxsIChnZmNfc2UgKiBzZSwg Z2YKKioqIDU5NDIsNTk0NyAqKioqCi0tLSA1OTQyLDU5NTAgLS0tLQogIAkg IHRtcCA9IGxlbjsKICAJICBpZiAoVFJFRV9DT0RFICh0bXApICE9IFZBUl9E RUNMKQogIAkgICAgdG1wID0gZ2ZjX2V2YWx1YXRlX25vdyAobGVuLCAmc2Ut PnByZSk7CisgCSAgVFJFRV9TVEFUSUMgKHRtcCkgPSAxOworIAkgIGdmY19h ZGRfbW9kaWZ5ICgmc2UtPnByZSwgdG1wLAorIAkJCSAgYnVpbGRfaW50X2Nz dCAoVFJFRV9UWVBFICh0bXApLCAwKSk7CiAgCSAgdG1wID0gZ2ZjX2J1aWxk X2FkZHJfZXhwciAoTlVMTF9UUkVFLCB0bXApOwogIAkgIHZlY19zYWZlX3B1 c2ggKHJldGFyZ3MsIHRtcCk7CiAgCX0KKioqKioqKioqKioqKioqIGdmY190 cmFuc19hc3NpZ25tZW50XzEgKGdmY19leHByICogZXhwcjEKKioqIDkyNjMs OTI2OSAqKioqCiAgICAgIH0KICAKICAgIC8qIFN0YWJpbGl6ZSBhIHN0cmlu ZyBsZW5ndGggZm9yIHRlbXBvcmFyaWVzLiAgKi8KISAgIGlmIChleHByMi0+ dHMudHlwZSA9PSBCVF9DSEFSQUNURVIgJiYgIWV4cHIyLT50cy5kZWZlcnJl ZCkKICAgICAgc3RyaW5nX2xlbmd0aCA9IGdmY19ldmFsdWF0ZV9ub3cgKHJz ZS5zdHJpbmdfbGVuZ3RoLCAmcnNlLnByZSk7CiAgICBlbHNlIGlmIChleHBy Mi0+dHMudHlwZSA9PSBCVF9DSEFSQUNURVIpCiAgICAgIHN0cmluZ19sZW5n dGggPSByc2Uuc3RyaW5nX2xlbmd0aDsKLS0tIDkyNjYsOTI3NSAtLS0tCiAg ICAgIH0KICAKICAgIC8qIFN0YWJpbGl6ZSBhIHN0cmluZyBsZW5ndGggZm9y IHRlbXBvcmFyaWVzLiAgKi8KISAgIGlmIChleHByMi0+dHMudHlwZSA9PSBC VF9DSEFSQUNURVIgJiYgIWV4cHIxLT50cy5kZWZlcnJlZAohICAgICAgICYm ICEoVFJFRV9DT0RFIChyc2Uuc3RyaW5nX2xlbmd0aCkgPT0gVkFSX0RFQ0wK ISAJICAgfHwgVFJFRV9DT0RFIChyc2Uuc3RyaW5nX2xlbmd0aCkgPT0gUEFS TV9ERUNMCiEgCSAgIHx8IFRSRUVfQ09ERSAocnNlLnN0cmluZ19sZW5ndGgp ID09IElORElSRUNUX1JFRikpCiAgICAgIHN0cmluZ19sZW5ndGggPSBnZmNf ZXZhbHVhdGVfbm93IChyc2Uuc3RyaW5nX2xlbmd0aCwgJnJzZS5wcmUpOwog ICAgZWxzZSBpZiAoZXhwcjItPnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSKQog ICAgICBzdHJpbmdfbGVuZ3RoID0gcnNlLnN0cmluZ19sZW5ndGg7CioqKioq KioqKioqKioqKiBnZmNfdHJhbnNfYXNzaWdubWVudF8xIChnZmNfZXhwciAq IGV4cHIxCioqKiA5Mjc3LDkyODMgKioqKgotLS0gOTI4Myw5MzE0IC0tLS0K ICAJbHNlLnN0cmluZ19sZW5ndGggPSBzdHJpbmdfbGVuZ3RoOwogICAgICB9 CiAgICBlbHNlCisgICAgIHsKICAgICAgICBnZmNfY29udl9leHByICgmbHNl LCBleHByMSk7CisgICAgICAgaWYgKGdmY19vcHRpb24ucnRjaGVjayAmIEdG Q19SVENIRUNLX01FTQorIAkgICYmIGdmY19leHByX2F0dHIgKGV4cHIxKS5h bGxvY2F0YWJsZQorIAkgICYmIGV4cHIxLT5yYW5rCisgCSAgJiYgIWV4cHIy LT5yYW5rKQorIAl7CisgCSAgdHJlZSBjb25kOworIAkgIGNvbnN0IGNoYXIq IG1zZzsKKyAKKyAJICB0bXAgPSBleHByMS0+c3ltdHJlZS0+bi5zeW0tPmJh Y2tlbmRfZGVjbDsKKyAJICBpZiAoUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQ RSAodG1wKSkpCisgCSAgICB0bXAgPSBidWlsZF9mb2xkX2luZGlyZWN0X3Jl Zl9sb2MgKGlucHV0X2xvY2F0aW9uLCB0bXApOworIAorIAkgIGlmIChHRkNf REVTQ1JJUFRPUl9UWVBFX1AgKFRSRUVfVFlQRSAodG1wKSkpCisgCSAgICB0 bXAgPSBnZmNfY29udl9kZXNjcmlwdG9yX2RhdGFfZ2V0ICh0bXApOworIAkg IGVsc2UKKyAJICAgIHRtcCA9IFRSRUVfT1BFUkFORCAobHNlLmV4cHIsIDAp OworIAorIAkgIGNvbmQgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0 aW9uLCBFUV9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwKKyAJCQkJICB0bXAs IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAodG1wKSwgMCkpOworIAkgIG1z ZyA9IF8oIkFzc2lnbm1lbnQgb2Ygc2NhbGFyIHRvIHVuYWxsb2NhdGVkIGFy cmF5Iik7CisgCSAgZ2ZjX3RyYW5zX3J1bnRpbWVfY2hlY2sgKHRydWUsIGZh bHNlLCBjb25kLCAmbG9vcC5wcmUsCisgCQkJCSAgICZleHByMS0+d2hlcmUs IG1zZyk7CisgCX0KKyAgICAgfQogIAogICAgLyogQXNzaWdubWVudHMgb2Yg c2NhbGFyIGRlcml2ZWQgdHlwZXMgd2l0aCBhbGxvY2F0YWJsZSBjb21wb25l bnRzCiAgICAgICB0byBhcnJheXMgbXVzdCBiZSBkb25lIHdpdGggYSBkZWVw IGNvcHkgYW5kIHRoZSByaHMgdGVtcG9yYXJ5CkluZGV4OiBnY2MvZm9ydHJh bi90cmFucy1zdG10LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2Nj L2ZvcnRyYW4vdHJhbnMtc3RtdC5jCShyZXZpc2lvbiAyMzIxNjMpCi0tLSBn Y2MvZm9ydHJhbi90cmFucy1zdG10LmMJKHdvcmtpbmcgY29weSkKKioqKioq KioqKioqKioqIGdmY190cmFuc19hbGxvY2F0ZSAoZ2ZjX2NvZGUgKiBjb2Rl KQoqKiogNTI5OCw1MzA0ICoqKioKICAgIHRyZWUgbGFiZWxfZmluaXNoOwog ICAgdHJlZSBtZW1zejsKICAgIHRyZWUgYWxfdnB0ciwgYWxfbGVuOwotICAg dHJlZSBkZWZfc3RyX2xlbiA9IE5VTExfVFJFRTsKICAgIC8qIElmIGFuIGV4 cHIzIGlzIHByZXNlbnQsIHRoZW4gc3RvcmUgdGhlIHRyZWUgZm9yIGFjY2Vz c2luZyBpdHMKICAgICAgIF92cHRyLCBhbmQgX2xlbiBjb21wb25lbnRzIGlu IHRoZSB2YXJpYWJsZXMsIHJlc3BlY3RpdmVseS4gIFRoZQogICAgICAgZWxl bWVudCBzaXplLCBpLmUuIF92cHRyJXNpemUsIGlzIHN0b3JlZCBpbiBleHBy M19lc2l6ZS4gIEFueSBvZgotLS0gNTI5OCw1MzAzIC0tLS0KKioqKioqKioq KioqKioqIGdmY190cmFuc19hbGxvY2F0ZSAoZ2ZjX2NvZGUgKiBjb2RlKQoq KiogNTY4OCw1Njk0ICoqKioKICAJICBleHByM19lc2l6ZSA9IGZvbGRfYnVp bGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE1VTFRfRVhQUiwKICAJCQkJCSBU UkVFX1RZUEUgKHNlX3N6LmV4cHIpLAogIAkJCQkJIHRtcCwgc2Vfc3ouZXhw cik7Ci0gCSAgZGVmX3N0cl9sZW4gPSBnZmNfZXZhbHVhdGVfbm93IChzZV9z ei5leHByLCAmYmxvY2spOwogIAl9CiAgICAgIH0KICAKLS0tIDU2ODcsNTY5 MiAtLS0tCioqKioqKioqKioqKioqKiBnZmNfdHJhbnNfYWxsb2NhdGUgKGdm Y19jb2RlICogY29kZSkKKioqIDU3NDEsNTc1NiAqKioqCiAgICAgICAgc2Uu d2FudF9wb2ludGVyID0gMTsKICAgICAgICBzZS5kZXNjcmlwdG9yX29ubHkg PSAxOwogIAotICAgICAgIGlmIChleHByLT50cy50eXBlID09IEJUX0NIQVJB Q1RFUgotIAkgICYmIGV4cHItPnRzLmRlZmVycmVkCi0gCSAgJiYgVFJFRV9D T0RFIChleHByLT50cy51LmNsLT5iYWNrZW5kX2RlY2wpID09IFZBUl9ERUNM Ci0gCSAgJiYgZGVmX3N0cl9sZW4gIT0gTlVMTF9UUkVFKQotIAl7Ci0gCSAg dG1wID0gZXhwci0+dHMudS5jbC0+YmFja2VuZF9kZWNsOwotIAkgIGdmY19h ZGRfbW9kaWZ5ICgmYmxvY2ssIHRtcCwKLSAJCQkgIGZvbGRfY29udmVydCAo VFJFRV9UWVBFICh0bXApLCBkZWZfc3RyX2xlbikpOwotIAl9Ci0gCiAgICAg ICAgZ2ZjX2NvbnZfZXhwciAoJnNlLCBleHByKTsKICAgICAgICBpZiAoZXhw ci0+dHMudHlwZSA9PSBCVF9DSEFSQUNURVIgJiYgZXhwci0+dHMuZGVmZXJy ZWQpCiAgCS8qIHNlLnN0cmluZ19sZW5ndGggbm93IHN0b3JlcyB0aGUgLnN0 cmluZ19sZW5ndGggdmFyaWFibGUgb2YgZXhwcgotLS0gNTczOSw1NzQ0IC0t LS0KKioqKioqKioqKioqKioqIGdmY190cmFuc19hbGxvY2F0ZSAoZ2ZjX2Nv ZGUgKiBjb2RlKQoqKiogNTg4OCw1ODkzICoqKioKLS0tIDU4NzYsNTg5NSAt LS0tCiAgCSAgICAgIC8qIFByZXZlbnQgc2V0dGluZyB0aGUgbGVuZ3RoIHR3 aWNlLiAgKi8KICAJICAgICAgYWxfbGVuX25lZWRzX3NldCA9IGZhbHNlOwog IAkgICAgfQorIAkgIGVsc2UgaWYgKGV4cHItPnRzLnR5cGUgPT0gQlRfQ0hB UkFDVEVSICYmIGFsX2xlbiAhPSBOVUxMX1RSRUUKKyAJCSAgICYmIGNvZGUt PmV4dC5hbGxvYy50cy51LmNsLT5sZW5ndGgpCisgCSAgICB7CisgCSAgICAg IC8qIENvdmVyIHRoZSBjYXNlcyB3aGVyZSBhIHN0cmluZyBsZW5ndGggaXMg ZXhwbGljaXRseQorIAkJIHNwZWNpZmllZCBieSBhIHR5cGUgc3BlYyBmb3Ig ZGVmZXJyZWQgbGVuZ3RoIGNoYXJhY3RlcgorIAkJIGFycmF5cyBvciB1bmxp bWl0ZWQgcG9seW1vcnBoaWMgb2JqZWN0cyB3aXRob3V0IGEKKyAJCSBzb3Vy Y2U9IG9yIG1vbGQ9IGV4cHJlc3Npb24uICAqLworIAkgICAgICBnZmNfaW5p dF9zZSAoJnNlX3N6LCBOVUxMKTsKKyAJICAgICAgZ2ZjX2NvbnZfZXhwciAo JnNlX3N6LCBjb2RlLT5leHQuYWxsb2MudHMudS5jbC0+bGVuZ3RoKTsKKyAJ ICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZibG9jaywgYWxfbGVuLAorIAkJCSAg ICAgIGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChhbF9sZW4pLAorIAkJCQkJ ICAgIHNlX3N6LmV4cHIpKTsKKyAJICAgICAgYWxfbGVuX25lZWRzX3NldCA9 IGZhbHNlOworIAkgICAgfQogIAl9CiAgCiAgICAgICAgZ2ZjX2FkZF9ibG9j a190b19ibG9jayAoJmJsb2NrLCAmc2UucHJlKTsKSW5kZXg6IGdjYy9mb3J0 cmFuL3RyYW5zLXR5cGVzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiog Z2NjL2ZvcnRyYW4vdHJhbnMtdHlwZXMuYwkocmV2aXNpb24gMjMyMTYzKQot LS0gZ2NjL2ZvcnRyYW4vdHJhbnMtdHlwZXMuYwkod29ya2luZyBjb3B5KQoq KioqKioqKioqKioqKiogZ2ZjX2dldF9jaGFyYWN0ZXJfdHlwZSAoaW50IGtp bmQsIGdmY19jaAoqKiogMTA0NSwxMDUwICoqKioKLS0tIDEwNDUsMTA1MiAt LS0tCiAgICB0cmVlIGxlbjsKICAKICAgIGxlbiA9IChjbCA9PSBOVUxMKSA/ IE5VTExfVFJFRSA6IGNsLT5iYWNrZW5kX2RlY2w7CisgICBpZiAobGVuICYm IFBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKGxlbikpKQorICAgICBsZW4g PSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZiAobGVuKTsKICAKICAgIHJldHVy biBnZmNfZ2V0X2NoYXJhY3Rlcl90eXBlX2xlbiAoa2luZCwgbGVuKTsKICB9 CkluZGV4OiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2RlZmVycmVkX2No YXJhY3Rlcl8xMC5mOTAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2Nj L3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9kZWZlcnJlZF9jaGFyYWN0ZXJfMTAu ZjkwCShyZXZpc2lvbiAwKQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy9kZWZlcnJlZF9jaGFyYWN0ZXJfMTAuZjkwCSh3b3JraW5nIGNvcHkpCioq KioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDUyIC0tLS0KKyAhIHsg ZGctZG8gcnVuIH0KKyAhCisgISBDaGVja3MgdGhhdCBQUjYwNTkzIGlzIGZp eGVkIChSZXZpc2lvbjogMjE0NzU3KQorICEKKyAhIENvbnRyaWJ1dGVkIGJ5 IFN0ZXZlIEthcmdsICA8a2FyZ2xAZ2NjLmdudS5vcmc+CisgIQorICEgTWFp biBwcm9ncmFtIGFkZGVkIGZvciB0aGlzIHRlc3QuCisgIQorIG1vZHVsZSBz dHJpbmdoZWxwZXJfbQorIAorICAgaW1wbGljaXQgbm9uZQorIAorICAgdHlw ZSA6OiBzdHJpbmdfdAorICAgICAgY2hhcmFjdGVyKDopLCBhbGxvY2F0YWJs ZSA6OiBzdHJpbmcKKyAgIGVuZCB0eXBlCisgCisgICBpbnRlcmZhY2UgbGVu CisgICAgICBmdW5jdGlvbiBzdHJsZW4ocykgYmluZChjLG5hbWU9J3N0cmxl bicpCisgICAgICAgIHVzZSBpc29fY19iaW5kaW5nCisgICAgICAgIGltcGxp Y2l0IG5vbmUKKyAgICAgICAgdHlwZShjX3B0ciksIGludGVudChpbiksIHZh bHVlIDo6IHMKKyAgICAgICAgaW50ZWdlcihjX3NpemVfdCkgOjogc3RybGVu CisgICAgICBlbmQgZnVuY3Rpb24KKyAgIGVuZCBpbnRlcmZhY2UKKyAKKyAg IGNvbnRhaW5zCisgCisgICAgIGZ1bmN0aW9uIEMyRkNoYXIoY19jaGFycHRy KSByZXN1bHQocmVzKQorICAgICAgIHVzZSBpc29fY19iaW5kaW5nCisgICAg ICAgdHlwZShjX3B0ciksIGludGVudChpbikgOjogY19jaGFycHRyCisgICAg ICAgY2hhcmFjdGVyKDopLCBhbGxvY2F0YWJsZSA6OiByZXMKKyAgICAgICBj aGFyYWN0ZXIoa2luZD1jX2NoYXIsbGVuPTEpLCBwb2ludGVyIDo6IHN0cmlu Z19wKDopCisgICAgICAgaW50ZWdlciBpLCBjX3N0cl9sZW4KKyAgICAgICBj X3N0cl9sZW4gPSBpbnQobGVuKGNfY2hhcnB0cikpCisgICAgICAgY2FsbCBj X2ZfcG9pbnRlcihjX2NoYXJwdHIsIHN0cmluZ19wLCBbY19zdHJfbGVuXSkK KyAgICAgICBhbGxvY2F0ZShjaGFyYWN0ZXIoY19zdHJfbGVuKSA6OiByZXMp CisgICAgICAgZm9yYWxsIChpID0gMTpjX3N0cl9sZW4pIHJlcyhpOmkpID0g c3RyaW5nX3AoaSkKKyAgICAgZW5kIGZ1bmN0aW9uCisgCisgZW5kIG1vZHVs ZQorIAorICAgdXNlIHN0cmluZ2hlbHBlcl9tCisgICB1c2UgaXNvX2NfYmlu ZGluZworICAgaW1wbGljaXQgbm9uZQorICAgdHlwZShjX3B0cikgOjogY3B0 cgorICAgY2hhcmFjdGVyKDIwKSwgdGFyZ2V0IDo6IHN0cgorIAorICAgc3Ry ID0gImFiY2RlZmdoaWoiLy9jaGFyKDApCisgICBjcHRyID0gY19sb2MgKHN0 cikKKyAgIGlmIChsZW4gKEMyRkNoYXIgKGNwdHIpKSAubmUuIDEwKSBjYWxs IGFib3J0CisgICBpZiAoQzJGQ2hhciAoY3B0cikgLm5lLiAiYWJjZGVmZ2hp aiIpIGNhbGwgYWJvcnQKKyBlbmQKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvZGVmZXJyZWRfY2hhcmFjdGVyXzExLmY5MAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CioqKiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2Rl ZmVycmVkX2NoYXJhY3Rlcl8xMS5mOTAJKHJldmlzaW9uIDApCi0tLSBnY2Mv dGVzdHN1aXRlL2dmb3J0cmFuLmRnL2RlZmVycmVkX2NoYXJhY3Rlcl8xMS5m OTAJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqCioqKiAwICoqKioK LS0tIDEsMzkgLS0tLQorICEgeyBkZy1kbyBydW4gfQorICEKKyAhIFRlc3Qg dGhlIGZpeCBmb3IgUFI2MTE0Ny4KKyAhCisgISBDb250cmlidXRlZCBieSBU aG9tYXMgQ2x1bmUgIDxUaG9tYXMuTC5DbHVuZUBuYXNhLmdvdj4KKyAhCisg bW9kdWxlIEJfbW9kCisgCisgICAgdHlwZSA6OiBCCisgICAgICAgY2hhcmFj dGVyKDopLCBhbGxvY2F0YWJsZSA6OiBzdHJpbmcKKyAgICBlbmQgdHlwZSBC CisgCisgY29udGFpbnMKKyAKKyAgICBmdW5jdGlvbiB0b1BvaW50ZXIodGhp cykgcmVzdWx0KHB0cikKKyAgICAgICBjaGFyYWN0ZXIoOiksIHBvaW50ZXIg OjogcHRyCisgICAgICAgY2xhc3MgKEIpLCBpbnRlbnQoaW4pLCB0YXJnZXQg OjogdGhpcworIAorICAgICAgICAgIHB0ciA9PiB0aGlzJXN0cmluZworIAor ICAgIGVuZCBmdW5jdGlvbiB0b1BvaW50ZXIKKyAKKyBlbmQgbW9kdWxlIEJf bW9kCisgCisgcHJvZ3JhbSBtYWluCisgICAgdXNlIEJfbW9kCisgCisgICAg dHlwZSAoQikgOjogb2JqCisgICAgY2hhcmFjdGVyKDopLCBwb2ludGVyIDo6 IHAKKyAKKyAgICBvYmolc3RyaW5nID0gJ2ZvbycKKyAgICBwID0+IHRvUG9p bnRlcihvYmopCisgCisgICAgSWYgKGxlbiAocCkgLm5lLiAzKSBjYWxsIGFi b3J0CisgICAgSWYgKHAgLm5lLiAiZm9vIikgY2FsbCBhYm9ydAorIAorIGVu ZCBwcm9ncmFtIG1haW4KKyAKKyAKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvZGVmZXJyZWRfY2hhcmFjdGVyXzEyLmY5MAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CioqKiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2Rl ZmVycmVkX2NoYXJhY3Rlcl8xMi5mOTAJKHJldmlzaW9uIDApCi0tLSBnY2Mv dGVzdHN1aXRlL2dmb3J0cmFuLmRnL2RlZmVycmVkX2NoYXJhY3Rlcl8xMi5m OTAJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqCioqKiAwICoqKioK LS0tIDEsMzcgLS0tLQorICEgeyBkZy1kbyBydW4gfQorICEKKyAhIFRlc3Rz IHRoZSBmaXggZm9yIFBSNjMyMzIKKyAhCisgISBDb250cmlidXRlZCBieSBC YWxpbnQgQXJhZGkgIDxiYXJhZGkwOUBnbWFpbC5jb20+CisgIQorIG1vZHVs ZSBteW1vZAorICAgaW1wbGljaXQgbm9uZQorIAorICAgdHlwZSA6OiB3cmFw cGVyCisgICAgIGNoYXJhY3Rlcig6KSwgYWxsb2NhdGFibGUgOjogc3RyaW5n CisgICBlbmQgdHlwZSB3cmFwcGVyCisgCisgY29udGFpbnMKKyAKKyAKKyAg IHN1YnJvdXRpbmUgc3ViMihteXN0cmluZykKKyAgICAgY2hhcmFjdGVyKDop LCBhbGxvY2F0YWJsZSwgaW50ZW50KG91dCkgOjogbXlzdHJpbmcKKyAKKyAg ICAgbXlzdHJpbmcgPSAidGVzdCIKKyAKKyAgIGVuZCBzdWJyb3V0aW5lIHN1 YjIKKyAKKyBlbmQgbW9kdWxlIG15bW9kCisgCisgCisgcHJvZ3JhbSB0ZXN0 CisgICB1c2UgbXltb2QKKyAgIGltcGxpY2l0IG5vbmUKKyAKKyAgIHR5cGUo d3JhcHBlcikgOjogbXl3cmFwcGVyCisgCisgICBjYWxsIHN1YjIobXl3cmFw cGVyJXN0cmluZykKKyAgIGlmICgubm90LiBhbGxvY2F0ZWQobXl3cmFwcGVy JXN0cmluZykpIGNhbGwgYWJvcnQKKyAgIGlmICh0cmltKG15d3JhcHBlciVz dHJpbmcpIC5uZS4gInRlc3QiKSBjYWxsIGFib3J0CisgCisgZW5kIHByb2dy YW0gdGVzdApJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9kZWZl cnJlZF9jaGFyYWN0ZXJfMTMuZjkwCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KioqIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZGVmZXJyZWRfY2hhcmFj dGVyXzEzLmY5MAkocmV2aXNpb24gMCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvZGVmZXJyZWRfY2hhcmFjdGVyXzEzLmY5MAkod29ya2luZyBj b3B5KQoqKioqKioqKioqKioqKioKKioqIDAgKioqKgotLS0gMSwzNCAtLS0t CisgISB7IGRnLWRvIHJ1biB9CisgIQorICEgVGVzdHMgdGhlIGZpeCBmb3Ig UFI0OTYzMCBjb21tZW50ICMzLgorICEKKyAhIENvbnRyaWJ1dGVkIGJ5IEph bnVzIFdlaWwgIDxqYW51c0BnY2MuZ251Lm9yZz4KKyAhCisgbW9kdWxlIGFi YworICAgaW1wbGljaXQgbm9uZQorIAorICAgdHlwZTo6YWJjX3R5cGUKKyAg ICBjb250YWlucworICAgICAgcHJvY2VkdXJlOjphYmNfZnVuY3Rpb24KKyAg IGVuZCB0eXBlIGFiY190eXBlCisgCisgY29udGFpbnMKKyAKKyAgIGZ1bmN0 aW9uIGFiY19mdW5jdGlvbih0aGlzKQorICAgICBjbGFzcyhhYmNfdHlwZSks aW50ZW50KGluKTo6dGhpcworICAgICBjaGFyYWN0ZXIoOiksYWxsb2NhdGFi bGU6OmFiY19mdW5jdGlvbgorICAgICBhbGxvY2F0ZShhYmNfZnVuY3Rpb24s c291cmNlPSJoZWxsbyIpCisgICBlbmQgZnVuY3Rpb24gYWJjX2Z1bmN0aW9u CisgCisgICBzdWJyb3V0aW5lIGRvX3NvbWV0aGluZyh0aGlzKQorICAgICBj bGFzcyhhYmNfdHlwZSksaW50ZW50KGluKTo6dGhpcworICAgICBpZiAodGhp cyVhYmNfZnVuY3Rpb24oKSAubmUuICJoZWxsbyIpIGNhbGwgYWJvcnQKKyAg IGVuZCBzdWJyb3V0aW5lIGRvX3NvbWV0aGluZworIAorIGVuZCBtb2R1bGUg YWJjCisgCisgCisgICB1c2UgYWJjCisgICB0eXBlKGFiY190eXBlKSA6OiBh CisgICBjYWxsIGRvX3NvbWV0aGluZyhhKQorIGVuZApJbmRleDogZ2NjL3Rl c3RzdWl0ZS9nZm9ydHJhbi5kZy9kZWZlcnJlZF9jaGFyYWN0ZXJfMTQuZjkw Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvZGVmZXJyZWRfY2hhcmFjdGVyXzE0LmY5MAkocmV2aXNpb24g MCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZGVmZXJyZWRfY2hh cmFjdGVyXzE0LmY5MAkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKioK KioqIDAgKioqKgotLS0gMSwzMCAtLS0tCisgISB7IGRnLWRvIHJ1biB9Cisg IQorICEgVGVzdCBmaXggZm9yIFBSNjA3OTUgY29tbWVudHMgIzEgYW5kICAj NAorICEKKyAhIENvbnRyaWJ1dGVkIGJ5IEtlcmdvbmF0aCAgPGtlcmdvbmF0 aEBtZS5jb20+CisgIQorIG1vZHVsZSBtCisgY29udGFpbnMKKyAgICAgc3Vi cm91dGluZSBhbGxvY2F0ZV9hcnJheShzX2FycmF5KQorICAgICAgICAgY2hh cmFjdGVyKDopLCBkaW1lbnNpb24oOiksIGFsbG9jYXRhYmxlLCBpbnRlbnQo b3V0KSA6OiBzX2FycmF5CisgCisgICAgICAgICBhbGxvY2F0ZShjaGFyYWN0 ZXIoMikgOjogc19hcnJheSgyKSkKKyAgICAgICAgIHNfYXJyYXkgPSBbImFi IiwiY2QiXQorICAgICBlbmQgc3Vicm91dGluZQorIGVuZCBtb2R1bGUKKyAK KyBwcm9ncmFtIHN0cmluZ3Rlc3QKKyAgICAgdXNlIG0KKyAgICAgY2hhcmFj dGVyKDopLCBkaW1lbnNpb24oOiksIGFsbG9jYXRhYmxlIDo6IHM0CisgICAg IGNoYXJhY3Rlcig6KSwgZGltZW5zaW9uKDopLCBhbGxvY2F0YWJsZSA6OiBz CisgISBDb21tZW50ICMxCisgICAgIGFsbG9jYXRlKGNoYXJhY3RlcigxKSA6 OiBzKDEwKSkKKyAgICAgaWYgKHNpemUgKHMpIC5uZS4gMTApIGNhbGwgYWJv cnQKKyAgICAgaWYgKGxlbiAocykgLm5lLiAxKSBjYWxsIGFib3J0CisgISBD b21tZW50ICM0CisgICAgIGNhbGwgYWxsb2NhdGVfYXJyYXkoczQpCisgICAg IGlmIChzaXplIChzNCkgLm5lLiAyKSBjYWxsIGFib3J0CisgICAgIGlmIChs ZW4gKHM0KSAubmUuIDIpIGNhbGwgYWJvcnQKKyAgICAgaWYgKGFueSAoczQg Lm5lLiBbImFiIiwgImNkIl0pKSBjYWxsIGFib3J0CisgIGVuZCBwcm9ncmFt CkluZGV4OiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2RlZmVycmVkX2No YXJhY3Rlcl84LmY5MAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2Mv dGVzdHN1aXRlL2dmb3J0cmFuLmRnL2RlZmVycmVkX2NoYXJhY3Rlcl84LmY5 MAkocmV2aXNpb24gMCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcv ZGVmZXJyZWRfY2hhcmFjdGVyXzguZjkwCSh3b3JraW5nIGNvcHkpCioqKioq KioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDczIC0tLS0KKyAhIHsgZGct ZG8gcnVuIH0KKyAhCisgISBUZXN0IHRoZSBmaXggZm9yIGFsbCB0aGUgcmVt YWluaW5nIGlzc3VlcyBpbiBQUjU0MDcwLiBUaGVzZSB3ZXJlIGFsbAorICEg Y29uY2VybmVkIHdpdGggZGVmZXJyZWQgbGVuZ3RoIGNoYXJhY3RlcnMgYmVp bmcgcmV0dXJuZWQgYXMgZnVuY3Rpb24gcmVzdWx0cy4KKyAhCisgISBDb250 cmlidXRlZCBieSBUb2JpYXMgQnVybnVzICA8YnVybnVzQGdjYy5nbnUub3Jn PgorICEKKyAhIFRoZSBvcmlnaW5hbCBjb21tZW50ICMxIHdpdGggYW4gYWxs b2NhdGUgc3RhdGVtZW50LgorICEgQWxsb2NhdGFibGUsIGRlZmVycmVkIGxl bmd0aCBzY2FsYXIgcmVzdWwuCisgZnVuY3Rpb24gZigpCisgICBjaGFyYWN0 ZXIobGVuPTopLGFsbG9jYXRhYmxlIDo6IGYKKyAgIGFsbG9jYXRlIChmLCBz b3VyY2UgPSAiYWJjIikKKyAgIGYgPSJBQkMiCisgZW5kIGZ1bmN0aW9uCisg IQorICEgQWxsb2NhdGFibGUsIGRlZmVycmVkIGxlbmd0aCwgZXhwbGljaXQs IGFycmF5IHJlc3VsdAorIGZ1bmN0aW9uIGcoYSkgcmVzdWx0IChyZXMpCisg ICBjaGFyYWN0ZXIobGVuPSopIDo6IGEoOikKKyAgIGNoYXJhY3RlcihsZW4g KGEpKSA6OiBiKHNpemUgKGEpKQorICAgY2hhcmFjdGVyKGxlbj06KSxhbGxv Y2F0YWJsZSA6OiByZXMoOikKKyAgIGludGVnZXIgOjogaQorICAgYWxsb2Nh dGUgKGNoYXJhY3RlcihsZW4oYSkpIDo6IHJlcygyKnNpemUoYSkpKQorICAg ZG8gaSA9IDEsIGxlbiAoYSkKKyAgICAgYig6KShpOmkpID0gY2hhciAoaWNo YXIgKGEoOikoaTppKSkgKyA0KQorICAgZW5kIGRvCisgICByZXMgPSBbYSwg Yl0KKyBlbmQgZnVuY3Rpb24KKyAhCisgISBBbGxvY2F0YWJsZSwgZGVmZXJy ZWQgbGVuZ3RoLCBhcnJheSByZXN1bHQKKyBmdW5jdGlvbiBoKGEpCisgICBj aGFyYWN0ZXIobGVuPSopIDo6IGEoOikKKyAgIGNoYXJhY3RlcihsZW4oYSkp IDo6IGIgKHNpemUoYSkpCisgICBjaGFyYWN0ZXIobGVuPTopLGFsbG9jYXRh YmxlIDo6IGgoOikKKyAgIGludGVnZXIgOjogaQorICAgYWxsb2NhdGUgKGNo YXJhY3RlcihsZW4oYSkpIDo6IGgoc2l6ZShhKSkpCisgICBkbyBpID0gMSwg bGVuIChhKQorICAgICBiKDopKGk6aSkgPSBjaGFyIChpY2hhciAoYSg6KShp OmkpKSArIDMyKQorICAgZW5kIGRvCisgICBoID0gYgorIGVuZCBmdW5jdGlv bgorIAorIG1vZHVsZSBkZWZlcnJlZF9sZW5ndGhfY2hhcl9hcnJheQorIGNv bnRhaW5zCisgICBmdW5jdGlvbiByZXR1cm5fc3RyaW5nKGFyZ3VtZW50KQor ICAgICBjaGFyYWN0ZXIoKikgOjogYXJndW1lbnQKKyAgICAgY2hhcmFjdGVy KDopLCBkaW1lbnNpb24oOiksIGFsbG9jYXRhYmxlIDo6IHJldHVybl9zdHJp bmcKKyAgICAgYWxsb2NhdGUgKGNoYXJhY3RlciAobGVuKGFyZ3VtZW50KSkg OjogcmV0dXJuX3N0cmluZygyKSkKKyAgICAgcmV0dXJuX3N0cmluZyA9IGFy Z3VtZW50CisgICBlbmQgZnVuY3Rpb24KKyBlbmQgbW9kdWxlCisgCisgICB1 c2UgZGVmZXJyZWRfbGVuZ3RoX2NoYXJfYXJyYXkKKyAgIGNoYXJhY3Rlcihs ZW49MykgOjogY2hyKDMpCisgICBpbnRlcmZhY2UKKyAgICAgZnVuY3Rpb24g ZigpCisgICAgICAgY2hhcmFjdGVyKGxlbj06KSxhbGxvY2F0YWJsZSA6OiBm CisgICAgIGVuZCBmdW5jdGlvbgorICAgICBmdW5jdGlvbiBnKGEpIHJlc3Vs dChyZXMpCisgICAgICAgY2hhcmFjdGVyKGxlbj0qKSA6OiBhKDopCisgICAg ICAgY2hhcmFjdGVyKGxlbj06KSxhbGxvY2F0YWJsZSA6OiByZXMoOikKKyAg ICAgZW5kIGZ1bmN0aW9uCisgICAgIGZ1bmN0aW9uIGgoYSkKKyAgICAgICBj aGFyYWN0ZXIobGVuPSopIDo6IGEoOikKKyAgICAgICBjaGFyYWN0ZXIobGVu PTopLGFsbG9jYXRhYmxlIDo6IGgoOikKKyAgICAgZW5kIGZ1bmN0aW9uCisg ICBlbmQgaW50ZXJmYWNlCisgCisgICBpZiAoZiAoKSAubmUuICJBQkMiKSBj YWxsIGFib3J0CisgICBpZiAoYW55IChnIChbImFiIiwiY2QiXSkgLm5lLiBb ImFiIiwiY2QiLCJlZiIsImdoIl0pKSBjYWxsIGFib3J0CisgICBjaHIgPSBo IChbIkFCQyIsIkRFRiIsIkdISSJdKQorICAgaWYgKGFueSAoY2hyIC5uZS4g WyJhYmMiLCJkZWYiLCJnaGkiXSkpIGNhbGwgYWJvcnQKKyAgIGlmIChhbnkg KHJldHVybl9zdHJpbmcgKCJhYmNkZWZnIikgLm5lLiBbImFiY2RlZmciLCJh YmNkZWZnIl0pKSBjYWxsIGFib3J0CisgZW5kCkluZGV4OiBnY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL2RlZmVycmVkX2NoYXJhY3Rlcl85LmY5MAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CioqKiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFu LmRnL2RlZmVycmVkX2NoYXJhY3Rlcl85LmY5MAkocmV2aXNpb24gMCkKLS0t IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZGVmZXJyZWRfY2hhcmFjdGVy XzkuZjkwCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAq KioqCi0tLSAxLDI4IC0tLS0KKyAhIHsgZGctZG8gcnVuIH0KKyAhCisgISBU ZXN0IHRoZSBmaXggZm9yIFBSNjQzMjQgaW4gd2hpY2ggZGVmZXJyZWQgbGVu Z3RoIHVzZXIgb3BzCisgISB3ZXJlIGJlaW5nIG1pc3Rha2VuIGFzIGFzc3Vt ZWQgbGVuZ3RoIGFuZCBzbyByZWplY3RlZC4KKyAhCisgISBDb250cmlidXRl ZCBieSBJYW4gSGFydmV5ICA8aWFuX2hhcnZleUBiaWdwb25kLmNvbT4KKyAh CisgTU9EVUxFIG0KKyAgIElNUExJQ0lUIE5PTkUKKyAgIElOVEVSRkFDRSBP UEVSQVRPUiguVG9TdHJpbmcuKQorICAgICBNT0RVTEUgUFJPQ0VEVVJFIHRv c3RyaW5nCisgICBFTkQgSU5URVJGQUNFIE9QRVJBVE9SKC5Ub1N0cmluZy4p CisgQ09OVEFJTlMKKyAgIEZVTkNUSU9OIHRvc3RyaW5nKGFyZykKKyAgICAg SU5URUdFUiwgSU5URU5UKElOKSA6OiBhcmcKKyAgICAgQ0hBUkFDVEVSKDop LCBBTExPQ0FUQUJMRSA6OiB0b3N0cmluZworICAgICBhbGxvY2F0ZSAoY2hh cmFjdGVyKDUpIDo6IHRvc3RyaW5nKQorICAgICB3cml0ZSAodG9zdHJpbmcs ICIoSTUpIikgYXJnCisgICBFTkQgRlVOQ1RJT04gdG9zdHJpbmcKKyBFTkQg TU9EVUxFIG0KKyAKKyAgIHVzZSBtCisgICBjaGFyYWN0ZXIoOiksIGFsbG9j YXRhYmxlIDo6IHN0cgorICAgaW50ZWdlciA6OiBpID0gOTk5CisgICBzdHIg PSAuVG9TdHJpbmcuIGkKKyAgIGlmIChzdHIgLm5lLiAiICA5OTkiKSBjYWxs IGFib3J0CisgZW5kCisgCkluZGV4OiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFu LmRnL2FsbG9jYXRlX2Vycm9yXzUuZjkwCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKioqIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYWxsb2NhdGVfZXJy b3JfNS5mOTAJKHJldmlzaW9uIDApCi0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL2FsbG9jYXRlX2Vycm9yXzUuZjkwCSh3b3JraW5nIGNvcHkpCioq KioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDIzIC0tLS0KKyAhIHsg ZGctZG8gcnVuIH0KKyAhIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZmNo ZWNrPW1lbSIgfQorICEgeyBkZy1zaG91bGRmYWlsICJGb3J0cmFuIHJ1bnRp bWUgZXJyb3I6IEFzc2lnbm1lbnQgb2Ygc2NhbGFyIHRvIHVuYWxsb2NhdGVk IGFycmF5IiB9CisgIQorICEgVGhpcyBvbWlzc2lvbiB3YXMgZW5jb3VudGVy ZWQgaW4gdGhlIGNvdXJzZSBvZiBmaXhpbmcgUFI1NDA3MC4gV2hpbHN0IHRo aXMgaXMgYQorICEgdmVyeSBzcGVjaWZpYyBjYXNlLCBvdGhlcnMgc3VjaCBh cyBhbGxvY2F0YWJsZSBjb21wb25lbnRzIGhhdmUgYmVlbiB0ZXN0ZWQuCisg IQorICEgQ29udHJpYnV0ZWQgYnkgVG9iaWFzIEJ1cm51cyAgPGJ1cm51c0Bn Y2MuZ251Lm9yZz4KKyAhCisgZnVuY3Rpb24gZyhhKSByZXN1bHQgKHJlcykK KyAgIGNoYXJhY3RlcihsZW49KikgOjogYQorICAgY2hhcmFjdGVyKGxlbj06 KSxhbGxvY2F0YWJsZSA6OiByZXMoOikKKyAgIHJlcyA9IGEgICEgU2luY2Ug J3JlcycgaXMgbm90IGFsbG9jYXRlZCwgYSBydW50aW1lIGVycm9yIHNob3Vs ZCBvY2N1ci4KKyBlbmQgZnVuY3Rpb24KKyAKKyAgIGludGVyZmFjZQorICAg ICBmdW5jdGlvbiBnKGEpIHJlc3VsdChyZXMpCisgICAgICAgY2hhcmFjdGVy KGxlbj0qKSA6OiBhCisgICAgICAgY2hhcmFjdGVyKGxlbj06KSxhbGxvY2F0 YWJsZSA6OiByZXMoOikKKyAgICAgZW5kIGZ1bmN0aW9uCisgICBlbmQgaW50 ZXJmYWNlCisgICBwcmludCAqLCBnKCJBQkMiKQorIGVuZAo= --047d7b5d2fd23c82860528ebc6f8 Content-Type: text/plain; charset=US-ASCII; name="status.txt" Content-Disposition: attachment; filename="status.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ij7gw5582 Content-length: 4181 NTQwNzAgICAgWzQuOS81LzYgUmVncmVzc2lvbl0gV3JvbmcgY29kZSB3aXRo IGFsbG9jYXRhYmxlIGRlZmVycmVkLWxlbmd0aCAoYXJyYXkpIGZ1bmN0aW9u IHJlc3VsdHMKCiAgICAgICAgICAgICAgIFdvcmtpbmcgcGF0Y2gsIG9yaWdp bmFsIHByb2JsZW0gbm93IGZpeGVkLiBkZWZlcnJlZF9jaGFyYWN0ZXJfOC5m OTAKICAgICAgICAgICAgICAgYW5kIGFsbG9jYXRlX2Vycm9yXzUuZjkwCgo2 NjQwOCAgICBkZWZlcnJlZC1sZW5ndGggY2hhcmFjdGVyICYgb3ZlcmxvYWRl ZCBhc3NpZ25tZW50CgogICAgICAgICAgICAgICBBc3NpZ25lZCB0byBtZSBh bmQgZml4ZWQgb24gdHJ1bmsuIFBhcnQgb2YgZmlyc3QgY29tbWl0IC0gYXBw bHkgdG8gNS1icmFuY2gKCjQ2Mjk5ICAgIERpYWdub3NlIHNwZWNpZmljYXRp b24gZXhwcmVzc2lvbnMgaW52b2x2aW5nIGhvc3QtYXNzb2NpYXRlZCB2YXJz IHdpdGggZGVmZXJyZWQgYm91bmRzCgpOT1QgWUVUIEZJWEVEICBPZmYgc3Vi amVjdCBidXQgcGlja2VkIHVwIGJlY2F1c2Ugb2YgImRlZmVycmVkIgoKNDk2 MzAgICAgW09PUF0gSUNFIG9uIG9ic29sZXNjZW50IGRlZmVycmVkLWxlbmd0 aCB0eXBlIGJvdW5kIGNoYXJhY3RlciBmdW5jdGlvbgoKICAgICAgICAgICAg ICAgQ2hlY2sgdGhhdCB0aGUgdGVzdCBpbiBjb21tZW50ICMzIHdvcmtzIC0g ZGVmZXJyZWRfY2hhcmFjdGVyXzEzLmY5MAoKNDk5NTQgICAgSUNFIGFzc2ln bmluZyBjb25jYXQgZXhwcmVzc2lvbiB0byBhbiBhcnJheSBkZWZlcnJlZC1s ZW5ndGggc3RyaW5nIChyZWFsbG9jIG9uIGFzc2lnbm1lbnQpCgogICAgICAg ICAgICAgICBBc3NpZ25lZCB0byBtZSBhbmQgZml4ZWQgb24gdHJ1bmsuIFBh cnQgb2YgZmlyc3QgY29tbWl0IC0gYXBwbHkgdG8gNS1icmFuY2gKCjU1NzM1 ICAgIElDRSB3aXRoIGRlZmVycmVkLWxlbmd0aCBzdHJpbmdzIGluIENPTU1P TgoKTk9UIFlFVCBGSVhFRCAgVGhpcyBzaG91bGQgYmUgZml4YWJsZSByZWxh dGl2ZWx5IGVhc2lseS4gV2lsbCBuZWVkIHBvaW50ZXIvZGVzY3JpcHRvciAr IHN0cmluZ19sZW5ndGggY29tYmluYXRpb24uCgo1NzkxMCAgICBJQ0UgKHNl Z2ZhdWx0KSB3aXRoIGRlZmVycmVkLWxlbmd0aCBzdHJpbmdzICAgICAgICAg ICAyMDE1LTExLTA2CgpOT1QgWUVUIEZJWEVEICBBIHZpY2lvdXMgbG9va2lu ZyB0aGluZyBpbnZvbHZpbmcgYSBtaXh0aXJlIG9mIElTTy1DLUJpbmRpbmcg YW5kIGRlZmVycmVkIGxlbmd0aCBjaGFyYWN0ZXJzCiAgICAgICAgICAgICAg ICBTdGlsbCBmYWlscy4KCjYwNDU4ICAgIEVycm9yIG1lc3NhZ2Ugb24gYXNz b2NpYXRlOiBkZWZlcnJlZCB0eXBlIHBhcmFtZXRlciBhbmQgcmVxdWlyZXMg ZWl0aGVyIHRoZSBwb2ludGVyIG9yIGFsbG9jYXRhYmxlIGF0dHJpYnV0ZQoK Tk9UIFlFVCBGSVhFRCAgV29ydGggZml4aW5nIGlmIHBvc3NpYmxlLiBOZWVk cyB3b3JrIGluIHRyYW5zLWRlY2wuYwoKNjA1OTMgICAgSUNFIHdpdGggZGVm ZXJyZWQgbGVuZ3RoIHZhcmlhYmxlIGluIEZPUkFMTAoKICAgICAgICAgICAg ICAgU2VlIGNvbW1lbnQgIzIgZm9yIHNpbXBsaWZpZWQgdGVzdGNhc2UgLSBk ZWZlcnJlZF9jaGFyYWN0ZXJfMTAuZjkwCgo2MTE0NyAgICBJbmNvcnJlY3Qg YmVoYXZpb3IgdXNpbmcgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGRlZmVycmVk IGxlbmd0aCBjaGFyYWN0ZXIgcG9pbnRlcgoKICAgICAgICAgICAgICAgU2hv dWxkIGhhdmUgYmVlbiBmaXhlZCAtIGRlZmVycmVkX2NoYXJhY3Rlcl8xMS5m OTAKCjYzMjMyICAgIERlZmVycmVkIGxlbmd0aCBjaGFyYWN0ZXIgZmllbGQg b2YgZGVyaXZlZCB0eXBlIGxvb3NlcyBpdHMgdmFsdWUgd2hlbiB1c2VkIGlu IHN1YnJvdXRpbmUgY2FsbAoKICAgICAgICAgICAgICAgSGlnaCBwcmlvcml0 eSAtIGRlZmVycmVkX2NoYXJhY3Rlcl8xMi5mOTAKCjYzNjY3ICAgIElDRSB3 aXRoIERFRkVSUkVEIHByb2NlZHVyZQoKTk9UIFlFVCBGSVhFRCAgRml4ZWQ/ Pz8/IE5vLiBDb3JyZWN0IGVycm9yIHRoZW4gSUNFLiBBZGRpbmcgcG9pbnRl ciBhdHRyaWJ1dGUgYWxsb3dzIGNvbXBpbGF0aW9uCgo2NDMyNCAgICBEZWZl cnJlZCBjaGFyYWN0ZXIgc3BlY2lmaWMgZnVuY3Rpb25zIG5vdCBwZXJtaXR0 ZWQgaW4gZ2VuZXJpYyBvcGVyYXRvciBpbnRlcmZhY2UKCiAgICAgICAgICAg ICAgIFNob3VsZCBiZSBmaXhhYmxlIC0gZGVmZXJyZWRfY2hhcmFjdGVyXzku ZjkwCgo2NTY3NyAgICBJbmNvbXBsZXRlIGFzc2lnbm1lbnQgb24gZGVmZXJy ZWQtbGVuZ3RoIGNoYXJhY3RlciB2YXJpYWJsZQoKTk9UIFlFVCBGSVhFRCAg UHJvYmxlbSB3aXRoIEFESlVTVEw/IFBvc3Qgd29ya2Fyb3VuZHMKCjY3Njc0 ICAgIEluY29ycmVjdCByZXN1bHQgb3IgSUNFIGZvciBkZWZlcnJlZC1sZW5n dGggY2hhcmFjdGVyIGNvbXBvbmVudAoKICAgICAgICAgICAgICAgQXNzaWdu ZWQgdG8gbWUgYW5kIGZpeGVkIG9uIHRydW5rLiBQYXJ0IG9mIGZpcnN0IGNv bW1pdCAtIGFwcGx5IHRvIDUtYnJhbmNoCgo2ODIxNiAgICBbRjIwMDNdIElP IHByb2JsZW0gd2l0aCBhbGxvY2F0YWJsZSwgZGVmZXJyZWQgY2hhcmFjdGVy IGxlbmd0aCBhcnJheXMKCiAgICAgICAgICAgICAgIEFzc2lnbmVkIHRvIG1l IGFuZCBmaXhlZCBvbiB0cnVuay4gUGFydCBvZiBmaXJzdCBjb21taXQgLSBh cHBseSB0byA1LWJyYW5jaAoKNjgyNDEgICAgW21ldGEtYnVnXSBEZWZlcnJl ZC1sZW5ndGggY2hhcmFjdGVyIDIwMTUtMTEtMDYKCjE3IGJ1Z3MgZm91bmQu ICBJbiBhZGRpdGlvbiwgUFI2ODI0MSBjb250YWluczoKCjUwMjIxICAgIEFs bG9jYXRhYmxlIHN0cmluZyBsZW5ndGggZmFpbHMgd2l0aCBhcnJheSBhc3Np Z25tZW50CgogICAgICAgICAgICAgICAgQXNzaWduZWQgdG8gbWUgYW5kIGZp eGVkIG9uIHRydW5rLiBQYXJ0IG9mIGZpcnN0IGNvbW1pdCAtIGFwcGx5IHRv IDUtYnJhbmNoCgo2MzkzMiAgICBwb3NpYmxlIHByb2JsZW0gd2l0aCBhbGxv Y2F0YWJsZSBjaGFyYWN0ZXIoOikKCiAgICAgICAgICAgICAgICBBc3NpZ25l ZCB0byBtZSBhbmQgZml4ZWQgb24gdHJ1bmsuIFBhcnQgb2YgZmlyc3QgY29t bWl0IC0gYXBwbHkgdG8gNS1icmFuY2g= --047d7b5d2fd23c82860528ebc6f8--