From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by sourceware.org (Postfix) with ESMTPS id AD458386F000 for ; Mon, 21 Sep 2020 23:55:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org AD458386F000 Received: by mail-qk1-x741.google.com with SMTP id v123so17219217qkd.9 for ; Mon, 21 Sep 2020 16:55:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=/ACj4gI3H8tkglHVK7fuvjJ6SjcYChV2eLKhgNuq7ho=; b=SQ3zIHPmK5NZz8Auelod+W9tZL5sRyjYwrLvMAGfOOZsUdWPMla4Uo0h0ytBTenlSG HA0eo0gj2vkfgI68bXYHS80L+4JDzV9LHm6Xzx8RaOCIh46HvKbLfdhx2kooAWdI0HXB n+lT9QWOMg4HArFadF+Vv3CsciYTivwsIiW5ZrMjbToJpwnOMfSYzrlnsqS5JGR5GaQZ Tl3bUDIdAwjTllNw/WXKEPCw/93nck28wpue7e2SVXH5nhuxlkn5g+suJaq9gWXiPCsn KeBNOjF9bTxsa5hEUBxtRvxssKdjnK7FEA5RV6bBXXvv8zwlgZCa1WuWMd39p7V15LCq yG1Q== X-Gm-Message-State: AOAM53027ppWRZs8HYrDJbE9hR9BlZ0/8winZxiDbeeZYGy52OyhYdVO mn9hpqjugJoGn7BOCccdOiwFJP31wtusvPFQ2vJ4kuIx68w= X-Google-Smtp-Source: ABdhPJxo4f2vRzv5HQe8b7xGz22aqjX/tfX8sFjuOyFAjlrvQBrrhfJVU4Ff7xmE2RxNk3048TjU059mHMqJEtSNfco= X-Received: by 2002:a37:4c10:: with SMTP id z16mr2151209qka.160.1600732554850; Mon, 21 Sep 2020 16:55:54 -0700 (PDT) MIME-Version: 1.0 From: Randy Geyer Date: Mon, 21 Sep 2020 16:55:43 -0700 Message-ID: Subject: I Need some Advice/Help getting libff1-3.3 to build on Windows. To: libffi-discuss@sourceware.org Content-Type: multipart/mixed; boundary="00000000000050180a05afdb97d0" X-Spam-Status: No, score=-0.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: libffi-discuss@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libffi-discuss mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Sep 2020 23:55:57 -0000 --00000000000050180a05afdb97d0 Content-Type: text/plain; charset="UTF-8" I have a requirement to upgrade libffi from 3.2.1 to 3.3. Currently we build 3.2.1 via a Visual Studio solution someone pulled from the web before my time. The command we use to build within our infrastructure is devenv.com /ps:abi:x86_64 "libffi\\ms\\libffi.sln" /build "Debug|x64" /project "libffi". This doesn't seem to be an option with 3.3 as they removed the #ifdef _MSC_VER from libffi/src/x86/win64.S. So, the generated win64.asm fails to compile. So I am investigating if I can just build libffi the way it is recommended to be built. I found/followed these instructions from https://github.com/libffi/libffi This command fails: I:\libffi-3.3>sh ./configure CC="I:\libffi-3.3\msvcc.sh -m64" CXX="I:\libffi-3.3\msvcc.sh -m64" CPP="cl -nologo -EP" CPPFLAGS="-DFFI_BUILDING_DLL" --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 ... configure: error: in `/cygdrive/i/libffi-3.3/x86_64-w64-mingw32': configure: error: C compiler cannot create executables See `config.log' for more details (attached) This command gets farther but still fails (removed CC= and CXX= parms): I:\libffi-3.3>sh ./configure CPP="cl -nologo -EP" CPPFLAGS="-DFFI_BUILDING_DLL" --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw configure: error: in `/cygdrive/i/libffi-3.3/x86_64-w64-mingw32': configure: error: C preprocessor "cl -nologo -EP" fails sanity check See `config.log' for more details This command completes successfully (removed CPP= parm): I:\libffi-3.3>sh ./configure CPPFLAGS="-DFFI_BUILDING_DLL" --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw ... So then I run Make and it fails: I:\libffi-3.3>make ... the process then hangs with this the last echoed command: /bin/sh ./libtool --tag=CC --mode=link gcc -O3 -fomit-frame-pointer -fstrict-aliasing -ffast-math -march=core-avx2 -Wall -fexceptions -o libffi_convenience.la src/prep_cif.lo src/types.lo src/raw_api.lo src/java_raw_api.lo src/closures.lo src/x86/ffi.lo src/x86/sysv.lo I left it in this state for 24hrs before canceling it, at which time it echoed this: Makefile:1071: recipe for target 'libffi_convenience.la' failed make[3]: *** [libffi_convenience.la] Interrupt Makefile:1347: recipe for target 'all-recursive' failed make[2]: *** [all-recursive] Interrupt Makefile:622: recipe for target 'all' failed make[1]: *** [all] Interrupt Makefile:592: recipe for target 'all-all' failed make: *** [all-all] Interrupt I found another set of instructions for compiling on windows https://proj.goldencode.com/projects/p2j/wiki/Building_and_Installing_libffi_on_Windows. When I followed those instructions, the configure step completed without issue. However, the make ended with an error similar to the one above (the highlighted line is different - so is probably the line that was hanging above): /bin/sh ./libtool --tag=CC --mode=link gcc -O3 -fomit-frame-pointer -fstrict-aliasing -ffast-math -march=core-aWall -fexceptions -o libffi_convenience.la src/prep_cif.lo src/types.lo src/raw_api.lo src/java_raw_api.lo src/ces.lo src/x86/ffi.lo src/x86/sysv.lo libtool: link: lib -OUT:.libs/libffi_convenience.lib src/.libs/prep_cif.o src/.libs/types.o src/.libs/raw_api.o srcs/java_raw_api.o src/.libs/closures.o src/x86/.libs/ffi.o src/x86/.libs/sysv.o ./libtool: line 1741: lib: command not found make[3]: *** [libffi_convenience.la] Error 127 make[3]: Leaving directory `/i/libffi-3.3/x86_64-w64-mingw32' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/i/libffi-3.3/x86_64-w64-mingw32' make[1]: *** [all] Error 2 make[1]: Leaving directory `/i/libffi-3.3/x86_64-w64-mingw32' make: *** [all-all] Error 2 --00000000000050180a05afdb97d0 Content-Type: application/octet-stream; name="config.log" Content-Disposition: attachment; filename="config.log" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kfd6t3we0 VGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hp bGUKcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2Vz IGEgbWlzdGFrZS4KCkl0IHdhcyBjcmVhdGVkIGJ5IGxpYmZmaSBjb25maWd1cmUgMy4zLCB3aGlj aCB3YXMKZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5k IGxpbmUgd2FzCgogICQgLi4vLi9jb25maWd1cmUgLS1zcmNkaXI9Li4gLS1lbmFibGUtYnVpbGRk aXI9eDg2XzY0LXc2NC1taW5ndzMyIENDPUk6XGxpYmZmaS0zLjNcbXN2Y2Muc2ggLW02NCBDWFg9 STpcbGliZmZpLTMuM1xtc3ZjYy5zaCAtbTY0IENQUD1jbCAtbm9sb2dvIC1FUCBDUFBGTEFHUz0t REZGSV9CVUlMRElOR19ETEwgLS1idWlsZD14ODZfNjQtdzY0LW1pbmd3MzIgLS1ob3N0PXg4Nl82 NC13NjQtbWluZ3czMiBidWlsZF9hbGlhcz14ODZfNjQtdzY0LW1pbmd3MzIgaG9zdF9hbGlhcz14 ODZfNjQtdzY0LW1pbmd3MzIKCiMjIC0tLS0tLS0tLSAjIwojIyBQbGF0Zm9ybS4gIyMKIyMgLS0t LS0tLS0tICMjCgpob3N0bmFtZSA9IHNsYzEwdHhmCnVuYW1lIC1tID0gaTY4Ngp1bmFtZSAtciA9 IDEuNy4zMSgwLjI3My81LzMpCnVuYW1lIC1zID0gQ1lHV0lOX05ULTYuMy1XT1c2NAp1bmFtZSAt diA9IDIwMTQtMDUtMjYgMTI6MTgKCi91c3IvYmluL3VuYW1lIC1wID0gdW5rbm93bgovYmluL3Vu YW1lIC1YICAgICA9IHVua25vd24KCi9iaW4vYXJjaCAgICAgICAgICAgICAgPSBpNjg2Ci91c3Iv YmluL2FyY2ggLWsgICAgICAgPSB1bmtub3duCi91c3IvY29udmV4L2dldHN5c2luZm8gPSB1bmtu b3duCi91c3IvYmluL2hvc3RpbmZvICAgICAgPSB1bmtub3duCi9iaW4vbWFjaGluZSAgICAgICAg ICAgPSB1bmtub3duCi91c3IvYmluL29zbGV2ZWwgICAgICAgPSB1bmtub3duCi9iaW4vdW5pdmVy c2UgICAgICAgICAgPSB1bmtub3duCgpQQVRIOiAvY3lnZHJpdmUvYi9yZ2V5ZXJfcHQ4NTlfYnVn XzMxNTU3NDczX3R1eGd0X3NsYzEwdHhmL3Blb3BsZXRvb2xzL2J1aWxkL2JhdApQQVRIOiAvY3ln ZHJpdmUvYi9yZ2V5ZXJfcHQ4NTlfYnVnXzMxNTU3NDczX3R1eGd0X3NsYzEwdHhmL3Blb3BsZXRv b2xzL2J1aWxkL2JpbgpQQVRIOiAvY3lnZHJpdmUvYi9yZ2V5ZXJfcHQ4NTlfYnVnXzMxNTU3NDcz X3R1eGd0X3NsYzEwdHhmL3B0X2FkbWluL1BUQWRtClBBVEg6IFBTX1ZTUEFUSApQQVRIOiAvY3ln ZHJpdmUvYy9PcmFjbGUxL3R1eGVkbzEyLjIuMi4wLjBfVlMyMDE3L2JpbgpQQVRIOiAvY3lnZHJp dmUvYy9BcHBzL0R2bHAvamRrMTFfNjQvYmluClBBVEg6IC9jeWdkcml2ZS9jL0FwcHMvRHZscC9q ZGsxMV82NC9iaW4KUEFUSDogL2N5Z2RyaXZlL2IvcmdleWVyX3B0ODU5X2J1Z18zMTU1NzQ3M190 dXhndF9zbGMxMHR4Zi9wZW9wbGV0b29scy9BcHBzL2dyYWRsZS9iaW4KUEFUSDogL2N5Z2RyaXZl L2IvcmdleWVyX3B0ODU5X2J1Z18zMTU1NzQ3M190dXhndF9zbGMxMHR4Zi9wZW9wbGV0b29scy9B cHBzL3dpbng4Ni9hcGFjaGUtYW50L2JpbgpQQVRIOiAvL3BzYmxkZnMudXMub3JhY2xlLmNvbS9k ZnMvcGVybC9iaW4KUEFUSDogL2N5Z2RyaXZlL2MvQXBwcy9QeXRob24zNwpQQVRIOiAvdXNyL2Jp bgpQQVRIOiAvY3lnZHJpdmUvYy9Qcm9ncmFtIEZpbGVzICh4ODYpL0NvbW1vbiBGaWxlcy9PcmFj bGUvSmF2YS9qYXZhcGF0aApQQVRIOiAvY3lnZHJpdmUvYy9BcHBzL0lCTS9JTS9SYXRpb25hbFNE TEMvY29tbW9uClBBVEg6IC9jeWdkcml2ZS9jL0FwcHMvUHl0aG9uMjcKUEFUSDogL2N5Z2RyaXZl L2MvQXBwcy9QeXRob24yNy9TY3JpcHRzClBBVEg6IC9jeWdkcml2ZS9jL29yYWNsZTMyYml0Y2xp ZW50L3Byb2R1Y3QvMTIuMS4wL2NsaWVudF8xL2JpbgpQQVRIOiAvY3lnZHJpdmUvYy9BcHBzL1B5 dGhvbjM2ClBBVEg6IC9jeWdkcml2ZS9jL0FwcHMvUHl0aG9uMzYvU2NyaXB0cwpQQVRIOiAvY3ln ZHJpdmUvYy9hcHBzL3BlcmwvYmluClBBVEg6IC91c3IvYmluClBBVEg6IC9jeWdkcml2ZS9jL29y YWNsZTEyYy9wcm9kdWN0LzEyLjEuMC9kYmhvbWVfMS9iaW4KUEFUSDogL2N5Z2RyaXZlL2MvQXBw cy9QZXJsClBBVEg6IC9jeWdkcml2ZS9jL1dpbmRvd3Mvc3lzdGVtMzIKUEFUSDogL2N5Z2RyaXZl L2MvV2luZG93cwpQQVRIOiAvY3lnZHJpdmUvYy9XaW5kb3dzL1N5c3RlbTMyL1diZW0KUEFUSDog L2N5Z2RyaXZlL2MvV2luZG93cy9TeXN0ZW0zMi9XaW5kb3dzUG93ZXJTaGVsbC92MS4wClBBVEg6 IC9jeWdkcml2ZS9jL1Byb2dyYW0gRmlsZXMvY1VSTC9iaW4KUEFUSDogL2N5Z2RyaXZlL2MvYXBw cy9wZXJsL2JpbgpQQVRIOiAvY3lnZHJpdmUvYy93aW5kb3dzL3N5c3RlbTMyClBBVEg6IC9jeWdk cml2ZS9jL3dpbmRvd3MKUEFUSDogL2N5Z2RyaXZlL2Mvd2luZG93cy9zeXN0ZW0zMi93YmVtClBB VEg6IC9jeWdkcml2ZS9jL1Byb2dyYW0gRmlsZXMgKHg4NikvTWljcm9zb2Z0IFNRTCBTZXJ2ZXIv MTAwL1Rvb2xzL0Jpbm4KUEFUSDogL2N5Z2RyaXZlL2MvUHJvZ3JhbSBGaWxlcy9NaWNyb3NvZnQg U1FMIFNlcnZlci8xMDAvVG9vbHMvQmlubgpQQVRIOiAvY3lnZHJpdmUvYy9Qcm9ncmFtIEZpbGVz L01pY3Jvc29mdCBTUUwgU2VydmVyLzEwMC9EVFMvQmlubgpQQVRIOiAvY3lnZHJpdmUvYy9Qcm9n cmFtIEZpbGVzL01pY3Jvc29mdCBTUUwgU2VydmVyLzExMC9Ub29scy9CaW5uClBBVEg6IC9jeWdk cml2ZS9jL09yYWNsZS90dXhlZG8xMWdSMV9WUzIwMTAvYmluClBBVEg6IC9jeWdkcml2ZS9jL09y YWNsZS90dXhlZG8xMWdSMV9WUzIwMTAvanJlL2Jpbi9zZXJ2ZXIKUEFUSDogL2N5Z2RyaXZlL2Mv T3JhY2xlL3R1eGVkbzExZ1IxX1ZTMjAxMC9qcmUvYmluClBBVEg6IC9jeWdkcml2ZS9jL09yYWNs ZS90dXhlZG8xMi4xLjEuMF9WUzIwMTIvYmluClBBVEg6IC9jeWdkcml2ZS9jL09yYWNsZS90dXhl ZG8xMi4xLjEuMF9WUzIwMTIvanJlL2Jpbi9zZXJ2ZXIKUEFUSDogL2N5Z2RyaXZlL2MvT3JhY2xl L3R1eGVkbzEyLjEuMS4wX1ZTMjAxMi9qcmUvYmluClBBVEg6IC9jeWdkcml2ZS9jL09yYWNsZS90 dXhlZG8xMi4xLjMuMC4wX1ZTMjAxMi9iaW4KUEFUSDogL2N5Z2RyaXZlL2MvT3JhY2xlL3R1eGVk bzEyLjEuMy4wLjBfVlMyMDEyL2pyZS9iaW4vc2VydmVyClBBVEg6IC9jeWdkcml2ZS9jL09yYWNs ZS90dXhlZG8xMi4xLjMuMC4wX1ZTMjAxMi9qcmUvYmluClBBVEg6IC9jeWdkcml2ZS9jL2FwcHMv ZGIvREIyQ1NFfjEvQklOClBBVEg6IC9jeWdkcml2ZS9jL2FwcHMvZGIvREIyQ1NFfjEvRlVOQ1RJ T04KUEFUSDogL2N5Z2RyaXZlL2MvcGRpdC9SdWJ5MTkzL2JpbgpQQVRIOiAvY3lnZHJpdmUvYy9w ZGl0L21jb2xsZWN0aXZlL2JpbgpQQVRIOiAvY3lnZHJpdmUvYy9Qcm9ncmFtIEZpbGVzL01pY3Jv c29mdCBTUUwgU2VydmVyLzEyMC9Ub29scy9CaW5uClBBVEg6IC9jeWdkcml2ZS9jL0FwcHMvRHZs cC9qZGsxLjguMC9qcmUvYmluL3NlcnZlcgpQQVRIOiAvY3lnZHJpdmUvYy9BcHBzL0R2bHAvamRr MS44LjAvanJlL2JpbgpQQVRIOiAvY3lnZHJpdmUvYy9PcmFjbGVWUzIwMTUvdHV4ZWRvMTIuMi4y LjAuMF9WUzIwMTUvYmluClBBVEg6IC9jeWdkcml2ZS9jL0FwcHMvRHZscC9qZGsxLjguMF82NC9q cmUvYmluL3NlcnZlcgpQQVRIOiAvY3lnZHJpdmUvYy9BcHBzL0R2bHAvamRrMS44LjBfNjQvanJl L2JpbgpQQVRIOiAvY3lnZHJpdmUvYy9BcHBzL0lCTS9JTS9SYXRpb25hbFNETEMvQ2xlYXJDYXNl L2JpbgpQQVRIOiAvY3lnZHJpdmUvYy9Qcm9ncmFtIEZpbGVzICh4ODYpL0lCTS9nc2s4L2xpYgpQ QVRIOiAvY3lnZHJpdmUvYy9Qcm9ncmFtIEZpbGVzICh4ODYpL0lCTS9nc2s4L2JpbgpQQVRIOiAv Y3lnZHJpdmUvYy9BcHBzL0lCTS9JTS9SYXRpb25hbFNETEMvQ2xlYXJDYXNlL1JlbW90ZUNsaWVu dC9jdGVhcGlzClBBVEg6IC9jeWdkcml2ZS9jL09yYWNsZTEvdHV4ZWRvMTIuMi4yLjAuMF9WUzIw MTcvYmluClBBVEg6IC9jeWdkcml2ZS9jL1Byb2dyYW0gRmlsZXMvTWljcm9zb2Z0IFNRTCBTZXJ2 ZXIvMTMwL1Rvb2xzL0Jpbm4KUEFUSDogL2N5Z2RyaXZlL2MvUHJvZ3JhbSBGaWxlcy9kb3RuZXQK UEFUSDogL2N5Z2RyaXZlL2MvZ251d2luMzIvYmluClBBVEg6IC9jeWdkcml2ZS9jL1VzZXIvQmF0 ClBBVEg6IC9jeWdkcml2ZS9jL3VzZXIvYmF0L3Byb3ZpZGUKUEFUSDogL2N5Z2RyaXZlL2MvdXNl ci9iYXQvcHNtc2NhbgpQQVRIOiAvY3lnZHJpdmUvYy9Qcm9ncmFtIEZpbGVzICh4ODYpLzctWmlw ClBBVEg6IC9jeWdkcml2ZS9jL1VzZXJzL3JnZXllci8uZG90bmV0L3Rvb2xzClBBVEg6IC9jeWdk cml2ZS9jL1Byb2dyYW0gRmlsZXMgKHg4NikvNy1aaXAKUEFUSDogL2N5Z2RyaXZlL2IvcmdleWVy X3B0ODU5X2J1Z18zMTU1NzQ3M190dXhndF9zbGMxMHR4Zi9wZW9wbGV0b29scy9CSU4vQ0xJRU5U L1dJTlg4NlUKCgojIyAtLS0tLS0tLS0tLSAjIwojIyBDb3JlIHRlc3RzLiAjIwojIyAtLS0tLS0t LS0tLSAjIwoKY29uZmlndXJlOjI2OTI6IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlCmNvbmZp Z3VyZToyNzA2OiByZXN1bHQ6IHg4Nl82NC13NjQtbWluZ3czMgpjb25maWd1cmU6MjcyNjogY2hl Y2tpbmcgaG9zdCBzeXN0ZW0gdHlwZQpjb25maWd1cmU6MjczOTogcmVzdWx0OiB4ODZfNjQtdzY0 LW1pbmd3MzIKY29uZmlndXJlOjI3NTk6IGNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZQpjb25m aWd1cmU6Mjc3MjogcmVzdWx0OiB4ODZfNjQtdzY0LW1pbmd3MzIKY29uZmlndXJlOjI4Njk6IGNo ZWNraW5nIGZvciBnc2VkCmNvbmZpZ3VyZToyOTAwOiByZXN1bHQ6IHNlZApjb25maWd1cmU6Mjky ODogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbApjb25maWd1cmU6Mjk5Njog cmVzdWx0OiAvdXNyL2Jpbi9pbnN0YWxsIC1jCmNvbmZpZ3VyZTozMDA3OiBjaGVja2luZyB3aGV0 aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUKY29uZmlndXJlOjMwNjI6IHJlc3VsdDogeWVz CmNvbmZpZ3VyZTozMjEwOiBjaGVja2luZyBmb3IgYSB0aHJlYWQtc2FmZSBta2RpciAtcApjb25m aWd1cmU6MzI0OTogcmVzdWx0OiAvdXNyL2Jpbi9ta2RpciAtcApjb25maWd1cmU6MzI1NjogY2hl Y2tpbmcgZm9yIGdhd2sKY29uZmlndXJlOjMyNzI6IGZvdW5kIC91c3IvYmluL2dhd2sKY29uZmln dXJlOjMyODM6IHJlc3VsdDogZ2F3awpjb25maWd1cmU6MzI5NDogY2hlY2tpbmcgd2hldGhlciBt YWtlIHNldHMgJChNQUtFKQpjb25maWd1cmU6MzMxNjogcmVzdWx0OiB5ZXMKY29uZmlndXJlOjMz NDU6IGNoZWNraW5nIHdoZXRoZXIgbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzCmNvbmZp Z3VyZTozMzYyOiByZXN1bHQ6IHllcwpjb25maWd1cmU6MzUwNzogY2hlY2tpbmcgZm9yIHg4Nl82 NC13NjQtbWluZ3czMi1nY2MKY29uZmlndXJlOjM1MzQ6IHJlc3VsdDogSTpcbGliZmZpLTMuM1xt c3ZjYy5zaCAtbTY0CmNvbmZpZ3VyZTozODAzOiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJz aW9uCmNvbmZpZ3VyZTozODEyOiBJOlxsaWJmZmktMy4zXG1zdmNjLnNoIC1tNjQgLS12ZXJzaW9u ID4mNQouLi8uL2NvbmZpZ3VyZTogbGluZSAzODE0OiBJOlxsaWJmZmktMy4zXG1zdmNjLnNoOiBj b21tYW5kIG5vdCBmb3VuZApjb25maWd1cmU6MzgyMzogJD8gPSAxMjcKY29uZmlndXJlOjM4MTI6 IEk6XGxpYmZmaS0zLjNcbXN2Y2Muc2ggLW02NCAtdiA+JjUKLi4vLi9jb25maWd1cmU6IGxpbmUg MzgxNDogSTpcbGliZmZpLTMuM1xtc3ZjYy5zaDogY29tbWFuZCBub3QgZm91bmQKY29uZmlndXJl OjM4MjM6ICQ/ID0gMTI3CmNvbmZpZ3VyZTozODEyOiBJOlxsaWJmZmktMy4zXG1zdmNjLnNoIC1t NjQgLVYgPiY1Ci4uLy4vY29uZmlndXJlOiBsaW5lIDM4MTQ6IEk6XGxpYmZmaS0zLjNcbXN2Y2Mu c2g6IGNvbW1hbmQgbm90IGZvdW5kCmNvbmZpZ3VyZTozODIzOiAkPyA9IDEyNwpjb25maWd1cmU6 MzgxMjogSTpcbGliZmZpLTMuM1xtc3ZjYy5zaCAtbTY0IC1xdmVyc2lvbiA+JjUKLi4vLi9jb25m aWd1cmU6IGxpbmUgMzgxNDogSTpcbGliZmZpLTMuM1xtc3ZjYy5zaDogY29tbWFuZCBub3QgZm91 bmQKY29uZmlndXJlOjM4MjM6ICQ/ID0gMTI3CmNvbmZpZ3VyZTozODQzOiBjaGVja2luZyB3aGV0 aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzCmNvbmZpZ3VyZTozODY1OiBJOlxsaWJmZmktMy4zXG1z dmNjLnNoIC1tNjQgIC1ERkZJX0JVSUxESU5HX0RMTCAgY29uZnRlc3QuYyAgPiY1Ci4uLy4vY29u ZmlndXJlOiBsaW5lIDM4Njc6IEk6XGxpYmZmaS0zLjNcbXN2Y2Muc2g6IGNvbW1hbmQgbm90IGZv dW5kCmNvbmZpZ3VyZTozODY5OiAkPyA9IDEyNwpjb25maWd1cmU6MzkwNzogcmVzdWx0OiBubwpj b25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKfCAvKiBjb25mZGVmcy5oICovCnwgI2RlZmlu ZSBQQUNLQUdFX05BTUUgImxpYmZmaSIKfCAjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAibGliZmZp Igp8ICNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIzLjMiCnwgI2RlZmluZSBQQUNLQUdFX1NUUklO RyAibGliZmZpIDMuMyIKfCAjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJodHRwOi8vZ2l0aHVi LmNvbS9saWJmZmkvbGliZmZpL2lzc3VlcyIKfCAjZGVmaW5lIFBBQ0tBR0VfVVJMICIiCnwgI2Rl ZmluZSBQQUNLQUdFICJsaWJmZmkiCnwgI2RlZmluZSBWRVJTSU9OICIzLjMiCnwgLyogZW5kIGNv bmZkZWZzLmguICAqLwp8IAp8IGludAp8IG1haW4gKCkKfCB7CnwgCnwgICA7CnwgICByZXR1cm4g MDsKfCB9CmNvbmZpZ3VyZTozOTEyOiBlcnJvcjogaW4gYC9jeWdkcml2ZS9pL2xpYmZmaS0zLjMv eDg2XzY0LXc2NC1taW5ndzMyJzoKY29uZmlndXJlOjM5MTQ6IGVycm9yOiBDIGNvbXBpbGVyIGNh bm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKU2VlIGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxz CgojIyAtLS0tLS0tLS0tLS0tLS0tICMjCiMjIENhY2hlIHZhcmlhYmxlcy4gIyMKIyMgLS0tLS0t LS0tLS0tLS0tLSAjIwoKYWNfY3ZfYnVpbGQ9eDg2XzY0LXc2NC1taW5ndzMyCmFjX2N2X2Vudl9D Q0FTRkxBR1Nfc2V0PQphY19jdl9lbnZfQ0NBU0ZMQUdTX3ZhbHVlPQphY19jdl9lbnZfQ0NBU19z ZXQ9CmFjX2N2X2Vudl9DQ0FTX3ZhbHVlPQphY19jdl9lbnZfQ1BQRkxBR1Nfc2V0PXNldAphY19j dl9lbnZfQ1BQRkxBR1NfdmFsdWU9LURGRklfQlVJTERJTkdfRExMCmFjX2N2X2Vudl9DUFBfc2V0 PXNldAphY19jdl9lbnZfQ1BQX3ZhbHVlPSdjbCAtbm9sb2dvIC1FUCcKYWNfY3ZfZW52X0NYWENQ UF9zZXQ9CmFjX2N2X2Vudl9DWFhDUFBfdmFsdWU9CmFjX2N2X2Vudl9MVF9TWVNfTElCUkFSWV9Q QVRIX3NldD0KYWNfY3ZfZW52X0xUX1NZU19MSUJSQVJZX1BBVEhfdmFsdWU9CmFjX2N2X2Vudl9i dWlsZF9hbGlhc19zZXQ9c2V0CmFjX2N2X2Vudl9idWlsZF9hbGlhc192YWx1ZT14ODZfNjQtdzY0 LW1pbmd3MzIKYWNfY3ZfZW52X2hvc3RfYWxpYXNfc2V0PXNldAphY19jdl9lbnZfaG9zdF9hbGlh c192YWx1ZT14ODZfNjQtdzY0LW1pbmd3MzIKYWNfY3ZfZW52X3RhcmdldF9hbGlhc19zZXQ9CmFj X2N2X2Vudl90YXJnZXRfYWxpYXNfdmFsdWU9CmFjX2N2X2hvc3Q9eDg2XzY0LXc2NC1taW5ndzMy CmFjX2N2X3BhdGhfYXhfZW5hYmxlX2J1aWxkZGlyX3NlZD1zZWQKYWNfY3ZfcGF0aF9pbnN0YWxs PScvdXNyL2Jpbi9pbnN0YWxsIC1jJwphY19jdl9wYXRoX21rZGlyPS91c3IvYmluL21rZGlyCmFj X2N2X3Byb2dfQVdLPWdhd2sKYWNfY3ZfcHJvZ19DQz0nSTpcbGliZmZpLTMuM1xtc3ZjYy5zaCAt bTY0JwphY19jdl9wcm9nX21ha2VfbWFrZV9zZXQ9eWVzCmFjX2N2X3RhcmdldD14ODZfNjQtdzY0 LW1pbmd3MzIKYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9eWVzCgojIyAtLS0t LS0tLS0tLS0tLS0tLSAjIwojIyBPdXRwdXQgdmFyaWFibGVzLiAjIwojIyAtLS0tLS0tLS0tLS0t LS0tLSAjIwoKQUNMT0NBTD0nJHtTSEVMTH0gL2N5Z2RyaXZlL2kvbGliZmZpLTMuMy9taXNzaW5n IGFjbG9jYWwtMS4xNicKQUxMT0NBPScnCkFNREVQQkFDS1NMQVNIPScnCkFNREVQX0ZBTFNFPScn CkFNREVQX1RSVUU9JycKQU1UQVI9JyQke1RBUi10YXJ9JwpBTV9CQUNLU0xBU0g9J1wnCkFNX0RF RkFVTFRfVj0nJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSknCkFNX0RFRkFVTFRfVkVSQk9TSVRZPScx JwpBTV9MVExERkxBR1M9JycKQU1fUlVOVEVTVEZMQUdTPScnCkFNX1Y9JyQoViknCkFSPScnCkFV VE9DT05GPScke1NIRUxMfSAvY3lnZHJpdmUvaS9saWJmZmktMy4zL21pc3NpbmcgYXV0b2NvbmYn CkFVVE9IRUFERVI9JyR7U0hFTEx9IC9jeWdkcml2ZS9pL2xpYmZmaS0zLjMvbWlzc2luZyBhdXRv aGVhZGVyJwpBVVRPTUFLRT0nJHtTSEVMTH0gL2N5Z2RyaXZlL2kvbGliZmZpLTMuMy9taXNzaW5n IGF1dG9tYWtlLTEuMTYnCkFXSz0nZ2F3aycKQlVJTERfRE9DU19GQUxTRT0nJwpCVUlMRF9ET0NT X1RSVUU9JycKQ0M9J0k6XGxpYmZmaS0zLjNcbXN2Y2Muc2ggLW02NCcKQ0NBUz0nJwpDQ0FTREVQ TU9ERT0nJwpDQ0FTRkxBR1M9JycKQ0NERVBNT0RFPScnCkNGTEFHUz0nJwpDUFA9J2NsIC1ub2xv Z28gLUVQJwpDUFBGTEFHUz0nLURGRklfQlVJTERJTkdfRExMJwpDWFg9J0k6XGxpYmZmaS0zLjNc bXN2Y2Muc2ggLW02NCcKQ1hYQ1BQPScnCkNYWERFUE1PREU9JycKQ1hYRkxBR1M9JycKQ1lHUEFU SF9XPSdjeWdwYXRoIC13JwpERUZTPScnCkRFUERJUj0nJwpETExUT09MPScnCkRTWU1VVElMPScn CkRVTVBCSU49JycKRUNIT19DPScnCkVDSE9fTj0nLW4nCkVDSE9fVD0nJwpFR1JFUD0nJwpFWEVF WFQ9JycKRkZJX0RFQlVHX0ZBTFNFPScnCkZGSV9ERUJVR19UUlVFPScnCkZGSV9FWEVDX1RSQU1Q T0xJTkVfVEFCTEU9JycKRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRV9GQUxTRT0nJwpGRklfRVhF Q19UUkFNUE9MSU5FX1RBQkxFX1RSVUU9JycKRkdSRVA9JycKR1JFUD0nJwpIQVZFX0xPTkdfRE9V QkxFPScnCkhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVD0nJwpJTlNUQUxMX0RBVEE9JyR7SU5TVEFM TH0gLW0gNjQ0JwpJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nCklOU1RBTExfU0NSSVBUPSck e0lOU1RBTEx9JwpJTlNUQUxMX1NUUklQX1BST0dSQU09JyQoaW5zdGFsbF9zaCkgLWMgLXMnCkxE PScnCkxERkxBR1M9JycKTElCRkZJX0JVSUxEX1ZFUlNJT05FRF9TSExJQl9GQUxTRT0nJwpMSUJG RklfQlVJTERfVkVSU0lPTkVEX1NITElCX0dOVV9GQUxTRT0nJwpMSUJGRklfQlVJTERfVkVSU0lP TkVEX1NITElCX0dOVV9UUlVFPScnCkxJQkZGSV9CVUlMRF9WRVJTSU9ORURfU0hMSUJfU1VOX0ZB TFNFPScnCkxJQkZGSV9CVUlMRF9WRVJTSU9ORURfU0hMSUJfU1VOX1RSVUU9JycKTElCRkZJX0JV SUxEX1ZFUlNJT05FRF9TSExJQl9UUlVFPScnCkxJQk9CSlM9JycKTElCUz0nJwpMSUJUT09MPScn CkxJUE89JycKTE5fUz0nJwpMVExJQk9CSlM9JycKTFRfU1lTX0xJQlJBUllfUEFUSD0nJwpNQUlO VD0nJwpNQUlOVEFJTkVSX01PREVfRkFMU0U9JycKTUFJTlRBSU5FUl9NT0RFX1RSVUU9JycKTUFL RUlORk89JyR7U0hFTEx9IC9jeWdkcml2ZS9pL2xpYmZmaS0zLjMvbWlzc2luZyBtYWtlaW5mbycK TUFOSUZFU1RfVE9PTD0nJwpNS0RJUl9QPScvdXNyL2Jpbi9ta2RpciAtcCcKTk09JycKTk1FRElU PScnCk9CSkRVTVA9JycKT0JKRVhUPScnCk9QVF9MREZMQUdTPScnCk9UT09MNjQ9JycKT1RPT0w9 JycKUEFDS0FHRT0nbGliZmZpJwpQQUNLQUdFX0JVR1JFUE9SVD0naHR0cDovL2dpdGh1Yi5jb20v bGliZmZpL2xpYmZmaS9pc3N1ZXMnClBBQ0tBR0VfTkFNRT0nbGliZmZpJwpQQUNLQUdFX1NUUklO Rz0nbGliZmZpIDMuMycKUEFDS0FHRV9UQVJOQU1FPSdsaWJmZmknClBBQ0tBR0VfVVJMPScnClBB Q0tBR0VfVkVSU0lPTj0nMy4zJwpQQVRIX1NFUEFSQVRPUj0nOicKUFJURElBRz0nJwpSQU5MSUI9 JycKU0VDVElPTl9MREZMQUdTPScnClNFRD0nJwpTRVRfTUFLRT0nJwpTSEVMTD0nL2Jpbi9zaCcK U1RSSVA9JycKVEFSR0VUPScnClRBUkdFVERJUj0nJwpUQVJHRVRfT0JKPScnClRFU1RTVUJESVJf RkFMU0U9JycKVEVTVFNVQkRJUl9UUlVFPScnClZFUlNJT049JzMuMycKYWNfY3RfQVI9JycKYWNf Y3RfQ0M9JycKYWNfY3RfQ1hYPScnCmFjX2N0X0RVTVBCSU49JycKYW1fX0VYRUVYVF9GQUxTRT0n JwphbV9fRVhFRVhUX1RSVUU9JycKYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFPScnCmFtX19mYXN0ZGVw Q0NBU19UUlVFPScnCmFtX19mYXN0ZGVwQ0NfRkFMU0U9JycKYW1fX2Zhc3RkZXBDQ19UUlVFPScn CmFtX19mYXN0ZGVwQ1hYX0ZBTFNFPScnCmFtX19mYXN0ZGVwQ1hYX1RSVUU9JycKYW1fX2luY2x1 ZGU9JycKYW1fX2lzcmM9JyAtSSQoc3JjZGlyKScKYW1fX2xlYWRpbmdfZG90PScuJwphbV9fbm9k ZXA9JycKYW1fX3F1b3RlPScnCmFtX190YXI9JyQke1RBUi10YXJ9IGNob2YgLSAiJCR0YXJkaXIi JwphbV9fdW50YXI9JyQke1RBUi10YXJ9IHhmIC0nCmF4X2VuYWJsZV9idWlsZGRpcl9zZWQ9J3Nl ZCcKYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCmJ1aWxkPSd4ODZfNjQtdzY0LW1pbmd3MzIn CmJ1aWxkX2FsaWFzPSd4ODZfNjQtdzY0LW1pbmd3MzInCmJ1aWxkX2NwdT0neDg2XzY0JwpidWls ZF9vcz0nbWluZ3czMicKYnVpbGRfdmVuZG9yPSd3NjQnCmRhdGFkaXI9JyR7ZGF0YXJvb3RkaXJ9 JwpkYXRhcm9vdGRpcj0nJHtwcmVmaXh9L3NoYXJlJwpkb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2Rv Yy8ke1BBQ0tBR0VfVEFSTkFNRX0nCmR2aWRpcj0nJHtkb2NkaXJ9JwpleGVjX3ByZWZpeD0nTk9O RScKaG9zdD0neDg2XzY0LXc2NC1taW5ndzMyJwpob3N0X2FsaWFzPSd4ODZfNjQtdzY0LW1pbmd3 MzInCmhvc3RfY3B1PSd4ODZfNjQnCmhvc3Rfb3M9J21pbmd3MzInCmhvc3RfdmVuZG9yPSd3NjQn Cmh0bWxkaXI9JyR7ZG9jZGlyfScKaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCmluZm9k aXI9JyR7ZGF0YXJvb3RkaXJ9L2luZm8nCmluc3RhbGxfc2g9JyR7U0hFTEx9IC9jeWdkcml2ZS9p L2xpYmZmaS0zLjMvaW5zdGFsbC1zaCcKbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCmxpYmV4 ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMnCmxvY2FsZWRpcj0nJHtkYXRhcm9vdGRpcn0v bG9jYWxlJwpsb2NhbHN0YXRlZGlyPScke3ByZWZpeH0vdmFyJwptYW5kaXI9JyR7ZGF0YXJvb3Rk aXJ9L21hbicKbWtkaXJfcD0nJChNS0RJUl9QKScKb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRl JwpwZGZkaXI9JyR7ZG9jZGlyfScKcHJlZml4PSdOT05FJwpwcm9ncmFtX3RyYW5zZm9ybV9uYW1l PSdzLHgseCwnCnBzZGlyPScke2RvY2Rpcn0nCnNiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4n CnNoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJwpzeXNfc3ltYm9sX3VuZGVyc2NvcmU9JycK c3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKdGFyZ2V0PSd4ODZfNjQtdzY0LW1pbmd3MzInCnRh cmdldF9hbGlhcz0neDg2XzY0LXc2NC1taW5ndzMyJwp0YXJnZXRfY3B1PSd4ODZfNjQnCnRhcmdl dF9vcz0nbWluZ3czMicKdGFyZ2V0X3ZlbmRvcj0ndzY0Jwp0b29sZXhlY2Rpcj0nJwp0b29sZXhl Y2xpYmRpcj0nJwoKIyMgLS0tLS0tLS0tLS0gIyMKIyMgY29uZmRlZnMuaC4gIyMKIyMgLS0tLS0t LS0tLS0gIyMKCi8qIGNvbmZkZWZzLmggKi8KI2RlZmluZSBQQUNLQUdFX05BTUUgImxpYmZmaSIK I2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImxpYmZmaSIKI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04g IjMuMyIKI2RlZmluZSBQQUNLQUdFX1NUUklORyAibGliZmZpIDMuMyIKI2RlZmluZSBQQUNLQUdF X0JVR1JFUE9SVCAiaHR0cDovL2dpdGh1Yi5jb20vbGliZmZpL2xpYmZmaS9pc3N1ZXMiCiNkZWZp bmUgUEFDS0FHRV9VUkwgIiIKI2RlZmluZSBQQUNLQUdFICJsaWJmZmkiCiNkZWZpbmUgVkVSU0lP TiAiMy4zIgoKY29uZmlndXJlOiBleGl0IDc3CgojIyAtLS0tLS0tLS0tLS0tLS0tICMjCiMjIENh Y2hlIHZhcmlhYmxlcy4gIyMKIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwoKYWNfY3ZfYnVpbGQ9eDg2 XzY0LXc2NC1taW5ndzMyCmFjX2N2X2Vudl9DQ0FTRkxBR1Nfc2V0PQphY19jdl9lbnZfQ0NBU0ZM QUdTX3ZhbHVlPQphY19jdl9lbnZfQ0NBU19zZXQ9CmFjX2N2X2Vudl9DQ0FTX3ZhbHVlPQphY19j dl9lbnZfQ1BQRkxBR1Nfc2V0PXNldAphY19jdl9lbnZfQ1BQRkxBR1NfdmFsdWU9LURGRklfQlVJ TERJTkdfRExMCmFjX2N2X2Vudl9DUFBfc2V0PXNldAphY19jdl9lbnZfQ1BQX3ZhbHVlPSdjbCAt bm9sb2dvIC1FUCcKYWNfY3ZfZW52X0NYWENQUF9zZXQ9CmFjX2N2X2Vudl9DWFhDUFBfdmFsdWU9 CmFjX2N2X2Vudl9MVF9TWVNfTElCUkFSWV9QQVRIX3NldD0KYWNfY3ZfZW52X0xUX1NZU19MSUJS QVJZX1BBVEhfdmFsdWU9CmFjX2N2X2Vudl9idWlsZF9hbGlhc19zZXQ9c2V0CmFjX2N2X2Vudl9i dWlsZF9hbGlhc192YWx1ZT14ODZfNjQtdzY0LW1pbmd3MzIKYWNfY3ZfZW52X2hvc3RfYWxpYXNf c2V0PXNldAphY19jdl9lbnZfaG9zdF9hbGlhc192YWx1ZT14ODZfNjQtdzY0LW1pbmd3MzIKYWNf Y3ZfZW52X3RhcmdldF9hbGlhc19zZXQ9CmFjX2N2X2Vudl90YXJnZXRfYWxpYXNfdmFsdWU9CmFj X2N2X2hvc3Q9eDg2XzY0LXc2NC1taW5ndzMyCmFjX2N2X3RhcmdldD14ODZfNjQtdzY0LW1pbmd3 MzIKCiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCiMjIE91dHB1dCB2YXJpYWJsZXMuICMjCiMjIC0t LS0tLS0tLS0tLS0tLS0tICMjCgpBQ0xPQ0FMPScnCkFMTE9DQT0nJwpBTURFUEJBQ0tTTEFTSD0n JwpBTURFUF9GQUxTRT0nJwpBTURFUF9UUlVFPScnCkFNVEFSPScnCkFNX0JBQ0tTTEFTSD0nJwpB TV9ERUZBVUxUX1Y9JycKQU1fREVGQVVMVF9WRVJCT1NJVFk9JycKQU1fTFRMREZMQUdTPScnCkFN X1JVTlRFU1RGTEFHUz0nJwpBTV9WPScnCkFSPScnCkFVVE9DT05GPScnCkFVVE9IRUFERVI9JycK QVVUT01BS0U9JycKQVdLPScnCkJVSUxEX0RPQ1NfRkFMU0U9JycKQlVJTERfRE9DU19UUlVFPScn CkNDPSdJOlxsaWJmZmktMy4zXG1zdmNjLnNoIC1tNjQnCkNDQVM9JycKQ0NBU0RFUE1PREU9JycK Q0NBU0ZMQUdTPScnCkNDREVQTU9ERT0nJwpDRkxBR1M9JycKQ1BQPSdjbCAtbm9sb2dvIC1FUCcK Q1BQRkxBR1M9Jy1ERkZJX0JVSUxESU5HX0RMTCcKQ1hYPSdJOlxsaWJmZmktMy4zXG1zdmNjLnNo IC1tNjQnCkNYWENQUD0nJwpDWFhERVBNT0RFPScnCkNYWEZMQUdTPScnCkNZR1BBVEhfVz0nJwpE RUZTPScnCkRFUERJUj0nJwpETExUT09MPScnCkRTWU1VVElMPScnCkRVTVBCSU49JycKRUNIT19D PScnCkVDSE9fTj0nLW4nCkVDSE9fVD0nJwpFR1JFUD0nJwpFWEVFWFQ9JycKRkZJX0RFQlVHX0ZB TFNFPScnCkZGSV9ERUJVR19UUlVFPScnCkZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEU9JycKRkZJ X0VYRUNfVFJBTVBPTElORV9UQUJMRV9GQUxTRT0nJwpGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxF X1RSVUU9JycKRkdSRVA9JycKR1JFUD0nJwpIQVZFX0xPTkdfRE9VQkxFPScnCkhBVkVfTE9OR19E T1VCTEVfVkFSSUFOVD0nJwpJTlNUQUxMX0RBVEE9JycKSU5TVEFMTF9QUk9HUkFNPScnCklOU1RB TExfU0NSSVBUPScnCklOU1RBTExfU1RSSVBfUFJPR1JBTT0nJwpMRD0nJwpMREZMQUdTPScnCkxJ QkZGSV9CVUlMRF9WRVJTSU9ORURfU0hMSUJfRkFMU0U9JycKTElCRkZJX0JVSUxEX1ZFUlNJT05F RF9TSExJQl9HTlVfRkFMU0U9JycKTElCRkZJX0JVSUxEX1ZFUlNJT05FRF9TSExJQl9HTlVfVFJV RT0nJwpMSUJGRklfQlVJTERfVkVSU0lPTkVEX1NITElCX1NVTl9GQUxTRT0nJwpMSUJGRklfQlVJ TERfVkVSU0lPTkVEX1NITElCX1NVTl9UUlVFPScnCkxJQkZGSV9CVUlMRF9WRVJTSU9ORURfU0hM SUJfVFJVRT0nJwpMSUJPQkpTPScnCkxJQlM9JycKTElCVE9PTD0nJwpMSVBPPScnCkxOX1M9JycK TFRMSUJPQkpTPScnCkxUX1NZU19MSUJSQVJZX1BBVEg9JycKTUFJTlQ9JycKTUFJTlRBSU5FUl9N T0RFX0ZBTFNFPScnCk1BSU5UQUlORVJfTU9ERV9UUlVFPScnCk1BS0VJTkZPPScnCk1BTklGRVNU X1RPT0w9JycKTUtESVJfUD0nJwpOTT0nJwpOTUVESVQ9JycKT0JKRFVNUD0nJwpPQkpFWFQ9JycK T1BUX0xERkxBR1M9JycKT1RPT0w2ND0nJwpPVE9PTD0nJwpQQUNLQUdFPScnClBBQ0tBR0VfQlVH UkVQT1JUPSdodHRwOi8vZ2l0aHViLmNvbS9saWJmZmkvbGliZmZpL2lzc3VlcycKUEFDS0FHRV9O QU1FPSdsaWJmZmknClBBQ0tBR0VfU1RSSU5HPSdsaWJmZmkgMy4zJwpQQUNLQUdFX1RBUk5BTUU9 J2xpYmZmaScKUEFDS0FHRV9VUkw9JycKUEFDS0FHRV9WRVJTSU9OPSczLjMnClBBVEhfU0VQQVJB VE9SPSc6JwpQUlRESUFHPScnClJBTkxJQj0nJwpTRUNUSU9OX0xERkxBR1M9JycKU0VEPScnClNF VF9NQUtFPScnClNIRUxMPScvYmluL3NoJwpTVFJJUD0nJwpUQVJHRVQ9J3g4Nl82NC13NjQtbWlu Z3czMicKVEFSR0VURElSPScnClRBUkdFVF9PQko9JycKVEVTVFNVQkRJUl9GQUxTRT0nJwpURVNU U1VCRElSX1RSVUU9JycKVkVSU0lPTj0nJwphY19jdF9BUj0nJwphY19jdF9DQz0nJwphY19jdF9D WFg9JycKYWNfY3RfRFVNUEJJTj0nJwphbV9fRVhFRVhUX0ZBTFNFPScnCmFtX19FWEVFWFRfVFJV RT0nJwphbV9fZmFzdGRlcENDQVNfRkFMU0U9JycKYW1fX2Zhc3RkZXBDQ0FTX1RSVUU9JycKYW1f X2Zhc3RkZXBDQ19GQUxTRT0nJwphbV9fZmFzdGRlcENDX1RSVUU9JycKYW1fX2Zhc3RkZXBDWFhf RkFMU0U9JycKYW1fX2Zhc3RkZXBDWFhfVFJVRT0nJwphbV9faW5jbHVkZT0nJwphbV9faXNyYz0n JwphbV9fbGVhZGluZ19kb3Q9JycKYW1fX25vZGVwPScnCmFtX19xdW90ZT0nJwphbV9fdGFyPScn CmFtX191bnRhcj0nJwpheF9lbmFibGVfYnVpbGRkaXJfc2VkPScnCmJpbmRpcj0nJHtleGVjX3By ZWZpeH0vYmluJwpidWlsZD0neDg2XzY0LXc2NC1taW5ndzMyJwpidWlsZF9hbGlhcz0neDg2XzY0 LXc2NC1taW5ndzMyJwpidWlsZF9jcHU9J3g4Nl82NCcKYnVpbGRfb3M9J21pbmd3MzInCmJ1aWxk X3ZlbmRvcj0ndzY0JwpkYXRhZGlyPScke2RhdGFyb290ZGlyfScKZGF0YXJvb3RkaXI9JyR7cHJl Zml4fS9zaGFyZScKZG9jZGlyPScke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFX1RBUk5BTUV9 JwpkdmlkaXI9JyR7ZG9jZGlyfScKZXhlY19wcmVmaXg9J05PTkUnCmhvc3Q9J3g4Nl82NC13NjQt bWluZ3czMicKaG9zdF9hbGlhcz0neDg2XzY0LXc2NC1taW5ndzMyJwpob3N0X2NwdT0neDg2XzY0 Jwpob3N0X29zPSdtaW5ndzMyJwpob3N0X3ZlbmRvcj0ndzY0JwpodG1sZGlyPScke2RvY2Rpcn0n CmluY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlJwppbmZvZGlyPScke2RhdGFyb290ZGlyfS9p bmZvJwppbnN0YWxsX3NoPScnCmxpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJwpsaWJleGVjZGly PScke2V4ZWNfcHJlZml4fS9saWJleGVjJwpsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2Fs ZScKbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKbWFuZGlyPScke2RhdGFyb290ZGlyfS9t YW4nCm1rZGlyX3A9JycKb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJwpwZGZkaXI9JyR7ZG9j ZGlyfScKcHJlZml4PSdOT05FJwpwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSdzLHgseCwnCnBzZGly PScke2RvY2Rpcn0nCnNiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCnNoYXJlZHN0YXRlZGly PScke3ByZWZpeH0vY29tJwpzeXNfc3ltYm9sX3VuZGVyc2NvcmU9JycKc3lzY29uZmRpcj0nJHtw cmVmaXh9L2V0YycKdGFyZ2V0PSd4ODZfNjQtdzY0LW1pbmd3MzInCnRhcmdldF9hbGlhcz0neDg2 XzY0LXc2NC1taW5ndzMyJwp0YXJnZXRfY3B1PSd4ODZfNjQnCnRhcmdldF9vcz0nbWluZ3czMicK dGFyZ2V0X3ZlbmRvcj0ndzY0Jwp0b29sZXhlY2Rpcj0nJwp0b29sZXhlY2xpYmRpcj0nJwoKY29u ZmlndXJlOiBleGl0IDc3Cg== --00000000000050180a05afdb97d0 Content-Type: application/x-zip-compressed; name="ms.zip" Content-Disposition: attachment; filename="ms.zip" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kfd6tjul1 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 AAAAAAIAAgB6AAAAwAkAAAAA --00000000000050180a05afdb97d0--