[Fwd: GLPK CMake build configuration (Windows)]
Andrew Makhorin <[email protected]> Sat, 27 Jan 2024 15:56:43 +0300
| Newsgroups | gmane.comp.gnu.glpk |
|---|---|
| Message-ID | <[email protected]> |
--=-U8NgfZfZuB08f38kYF8x Content-Type: multipart/alternative; boundary="=-38+XTDWDC0R3m4PhPIXG" --=-38+XTDWDC0R3m4PhPIXG Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit -------- Forwarded Message -------- Date: Sat, 27 Jan 2024 00:30:37 -0500 Subject: GLPK CMake build configuration (Windows) To: [email protected] From: Derek Huang <[email protected]> > Hi, > My name is Derek Huang; I am currently a quant [developer] at TD > Securities. I needed to use GLPK at work on Windows but found the > NMake Makefiles not sufficient for my purpose as I wanted the > following: > > 1. Ability to link against C runtime statically or dynamically > 2. Build more of the example programs (except netgen, got error > saying glp_netgen disabled for licensing reasons) > 3. Provide installation rule for Windows distinguishing debug/release > config + C runtime linking > 4. Build PE32 (32-bit) or PE32+ (64-bit) on Windows from the same > Developer Command Prompt > > CMake makes this relatively straightforward to do so I spent some time > at home today in the evening to write a CMakeLists.txt (attached). I > am not sure what is the best way to make contributions upstream, hence > why I have attached it to the email. It contains explanations on a few > ways one can build, run tests, and install using CMake, and I have > verified all example programs run properly for 32-bit and 64-bit Debug > + Release static and dynamic builds. The CMake generator (underlying > build tool) used is Visual Studio 2022. Unfortunately, however, I have > not yet added any formal documentation outside of the CMakeLists.txt. > > Please let me know if this could be accepted as part of the GLPK > source base as an alternative method to build on Windows and if so, if > there are any specific steps I should take to introduce it to the > source tree. Thank you. > > Best, > Derek > --=-38+XTDWDC0R3m4PhPIXG Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable <html><head></head><body><div>-------- Forwarded Message --------</div><div= ><br></div><div><b>Date</b>: Sat, 27 Jan 2024 00:30:37 -0500</div><div><b>S= ubject</b>: GLPK CMake build configuration (Windows)</div><div><b>To</b>: <= a href=3D"mailto:[email protected]">[email protected]</a></div><div><b>From= </b>: Derek Huang <<a href=3D"mailto:Derek%20Huang%20%[email protected]= .edu%3e">[email protected]</a>></div><blockquote type=3D"cite"><!-- t= ext/html --><div dir=3D"ltr">Hi,<div><br></div><div>My name is Derek Huang;= I am currently a quant [developer] at TD Securities. I needed to use GLPK = at work on Windows but found the NMake Makefiles not sufficient for my purp= ose as I wanted the following:</div><div><br></div><div>1. Ability to link&= nbsp;against C runtime statically or dynamically</div><div>2. Build more of= the example programs (except netgen, got error saying glp_netgen disa= bled for licensing reasons)</div><div>3. Provide installation rule for Wind= ows distinguishing debug/release config + C runtime linking</div><div>= 4. Build PE32 (32-bit) or PE32+ (64-bit) on Windows from the same Developer= Command Prompt</div><div><br></div><div>CMake makes this relatively straig= htforward to do so I spent some time at home today in the evening to write = a CMakeLists.txt (attached). I am not sure what is the best way to make con= tributions upstream, hence why I have attached it to the email. It contains= explanations on a few ways one can build, run tests, and install using CMa= ke, and I have verified all example programs run properly for 32-bit a= nd 64-bit Debug + Release static and dynamic builds. The CMake generator (u= nderlying build tool) used is Visual Studio 2022. Unfortunately, however, I= have not yet added any formal documentation outside of the CMakeLists.txt.= </div><div><br></div><div>Please let me know if this could be accepted as p= art of the GLPK source base as an alternative method to build on Windows an= d if so, if there are any specific steps I should take to introduce it to t= he source tree. Thank you.</div><div><br></div><div>Best,</div><div>Derek</= div></div> </blockquote></body></html> --=-38+XTDWDC0R3m4PhPIXG-- --=-U8NgfZfZuB08f38kYF8x Content-Type: text/plain; charset="US-ASCII"; name="CMakeLists.txt" Content-Disposition: attachment; filename="CMakeLists.txt" Content-ID: <f_lrvmpix30> X-Attachment-Id: f_lrvmpix30 Content-Transfer-Encoding: base64 Y21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTUpCgojIwojIFVzYWdlCiMgPT09PT0K IwojIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIGJyaWVmIGluc3RydWN0aW9ucyBvbiBob3cg dG8gY29tcGlsZSwgdGVzdCwgYW5kCiMgaW5zdGFsbCBHTFBLIHVzaW5nIENNYWtlLiBBbHRob3Vn aCBjdXJyZW50bHkgY29uZmlndXJlZCBvbmx5IGZvciB1c2Ugb24KIyBXaW5kb3dzLCB0aGUgY29u ZmlnIGNhbiBiZSBleHRlbmRlZCB0byBzdXBwb3J0ICpuaXggc3lzdGVtcyBhcyB3ZWxsLgojCiMg Tm90ZToKIwojIFRoaXMgZmlsZSBjYW4gYmUgc3BsaXQgdXAgaW50byBzbWFsbGVyIC5jbWFrZSBm aWxlcyBpZiBkZXNpcmVkLiBJdCBpcyBhIGZldwojIGh1bmRyZWQgbGluZXMgbG9uZyB1bmZvcnR1 bmF0ZWx5IGluIGxhcmdlIHBhcnQgc2luY2UgdGhlIHNvdXJjZXMgYXJlIGFsbAojIGxpc3RlZCBl eHBsaWNpdGx5IGluc3RlYWQgb2YgdXNpbmcgZ2xvYnMgYW5kIGJlY2F1c2Ugb2YgdGhlIGluc3Rh bGwgbG9naWMuCiMKIyBXaW5kb3dzCiMgLS0tLS0tLQojCiMgVGhlIGZvbGxvd2luZyBpdGVtcyBh cmUgdmFsdWVzIHRvIGJlIGRldGVybWluZWQgYnkgdGhlIHVzZXIuIFRoZXkgYXJlIHVzZWQgaW4K IyB0aGUgYnVpbGQgY29tbWFuZHMgZW5jbG9zZWQgaW4gYnJhY2tldHMgdG8gZGlzdGluZ3Vpc2gg dGhlbS4KIwojIEFyY2g6IFdpbjMyLCB4NjQKIyBDb25maWc6IERlYnVnLCBSZWxlYXNlCiMgUHJl Zml4OiAoZGVzaXJlZCBpbnN0YWxsIHJvb3QpCiMKIyBCdWlsZGluZwojIH5+fn5+fn5+CiMKIyBC dWlsZCBzdGF0aWMgbGlua2luZyBhZ2FpbnN0IEMgcnVudGltZSBkeW5hbWljYWxseSArIGFsc28g YnVpbGQgZXhhbXBsZXM6CiMKIyAgIGNtYWtlIC1TIC4gLUIgYnVpbGRfd2luZG93c19bQXJjaF0g LUEgW0FyY2hdCiMgICBjbWFrZSAtLWJ1aWxkIGJ1aWxkX3dpbmRvd3NfW0FyY2hdIC0tY29uZmln IFtDb25maWddIC1qCiMKIyBCdWlsZCBkeW5hbWljIGxpbmtpbmcgYWdhaW5zdCBDIHJ1bnRpbWUg c3RhdGljYWxseSArIG5vIGV4YW1wbGVzOgojCiMgICBjbWFrZSAtUyAuIC1CIGJ1aWxkX3dpbmRv d3NfW0FyY2hdIC1BIFtBcmNoXSAtREJVSUxEX1NIQVJFRF9MSUJTPU9OIF4KIyAgICAgICAtREdM UEtfVVNFX1NUQVRJQ19DUlQ9T04gLURHTFBLX0JVSUxEX0VYQU1QTEVTPU9GRgojICAgY21ha2Ug LS1idWlsZCBidWlsZF93aW5kb3dzX1tBcmNoXSAtLWNvbmZpZyBbQ29uZmlnXSAtagojCiMgQnVp bGQgZHluYW1pYyBsaW5raW5nIGFnYWluc3QgQyBydW50aW1lIGR5bmFtaWNhbGx5ICsgYWxzbyBi dWlsZCBleGFtcGxlcwojIHdoaWxlIGluc3RhbGxpbmcgd2l0aCBtdWx0aS1jb25maWd1cmF0aW9u IGluc3RhbGwgdHJlZToKIwojICAgY21ha2UgLVMgLiAtQiBidWlsZF93aW5kb3dzX1tBcmNoXSAt QSBbQXJjaF0gLURCVUlMRF9TSEFSRURfTElCUz1PTiBeCiMgICAgICAgLURHTFBLX0lOU1RBTExf TVVMVElfQ09ORklHPU9OCiMgICBjbWFrZSAtLWJ1aWxkIGJ1aWxkX3dpbmRvd3NfW0FyY2hdIC0t Y29uZmlnIFtDb25maWddIC1qCiMKIyBUZXN0aW5nCiMgfn5+fn5+fgojCiMgICBjdGVzdCAtLXRl c3QtZGlyIGJ1aWxkX3dpbmRvd3NfW0FyY2hdIC1DIFtDb25maWddIC1qCiMKIyBJbnN0YWxsCiMg fn5+fn5+fgojCiMgICBjbWFrZSAtLWluc3RhbGwgYnVpbGRfd2luZG93c19bQXJjaF0gLS1wcmVm aXggW1ByZWZpeF0gLS1jb25maWcgW0NvbmZpZ10KIwojIElmIEdMUEtfSU5TVEFMTF9NVUxUSV9D T05GSUcgaXMgc3BlY2lmaWVkLCBhbmQgYXNzdW1pbmcgdGhhdCB3ZSBhcmUgYnVpbGRpbmcKIyBz aGFyZWQgbGlicmFyaWVzLCB0aGUgaW5zdGFsbCB0cmVlIGxvb2tzIGxpa2UgdGhpczoKIwojIGlu c3RhbGxfcm9vdC8KIyAgIGJpbi8KIyAgICAgRGVidWcvCiMgICAgICAgZ2xway5kbGwKIyAgICAg ICBnbHBzb2wuZXhlCiMgICAgIFJlbGVhc2UvCiMgICAgICAgZ2xway5kbGwKIyAgICAgICBnbHBz b2wuZXhlCiMgICBpbmNsdWRlLwojICAgICBnbHBrLmgKIyAgIGxpYi8KIyAgICAgRGVidWcvCiMg ICAgICAgZ2xway5saWIKIyAgICAgICBnbHBrLnBkYgojICAgICBSZWxlYXNlLwojICAgICAgIGds cGsubGliCiMKIyBPdGhlcndpc2UsIHdlIGhhdmUgYSBmbGF0IGluc3RhbGwgd2l0aCAiZCIgc3Vm ZmljZXMsIGUuZy4KIwojIGluc3RhbGxfcm9vdC8KIyAgIGJpbi8KIyAgICAgZ2xway5kbGwKIyAg ICAgZ2xwa2QuZGxsCiMgICAgIGdscHNvbC5leGUKIyAgICAgZ2xwc29sZC5leGUKIyAgIGluY2x1 ZGUvCiMgICAgIGdscGsuaAojICAgbGliLwojICAgICBnbHBrLmxpYgojICAgICBnbHBrZC5saWIK IyAgICAgZ2xwa2QucGRiCiMKCiMgR0xQSyB2ZXJzaW9uCnNldChHTFBLX1ZFUlNJT05fTUFKT1Ig NSkKc2V0KEdMUEtfVkVSU0lPTl9NSU5PUiAwKQpzZXQoR0xQS19WRVJTSU9OICR7R0xQS19WRVJT SU9OX01BSk9SfS4ke0dMUEtfVkVSU0lPTl9NSU5PUn0pCgpwcm9qZWN0KAogICAgZ2xwawogICAg VkVSU0lPTiA1LjAKICAgIERFU0NSSVBUSU9OICJHTlUgTGluZWFyIFByb2dyYW1taW5nIEtpdCIK ICAgIEhPTUVQQUdFX1VSTCAiaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nbHBrLyIKICAg IExBTkdVQUdFUyBDCikKCiMgc2VsZWN0IHN0YXRpYy9zaGFyZWQgbGlicmFyeSBjb21waWxhdGlv bgpvcHRpb24oQlVJTERfU0hBUkVEX0xJQlMgIkJ1aWxkIEdMUEsgbGlicmFyeSBhcyBzaGFyZWQi IE9GRikKIyB1c2Ugc3RhdGljIEMgcnVudGltZSBsaWJyYXJ5LiBkZWZhdWx0ZWQgdG8gT0ZGIHRv IG1hdGNoIHRoZSBDTWFrZSBkZWZhdWx0IG9mCiMgdXNpbmcgTXVsdGlUaHJlYWRlZCQ8JDxDT05G SUc6RGVidWc+OkRlYnVnPkRMTCB0byBzZWxlY3QgZHluYW1pYyBDIHJ1bnRpbWUuCiMgc2VlIGh0 dHBzOi8vY21ha2Uub3JnL2NtYWtlL2hlbHAvbGF0ZXN0L3Byb3BfdGd0L01TVkNfUlVOVElNRV9M SUJSQVJZLmh0bWwsCiMgaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2NwcC9jLXJ1 bnRpbWUtbGlicmFyeS9jcnQtbGlicmFyeS1mZWF0dXJlcwpvcHRpb24oR0xQS19VU0VfU1RBVElD X0NSVCAiTGluayBhZ2FpbnN0IEMgcnVudGltZSBzdGF0aWNhbGx5IiBPRkYpCiMgdG8gc2VwYXJh dGUgRGVidWcgYW5kIFJlbGVhc2UgbGlicmFyaWVzLCB3aGljaCBhbHNvIGxpbmsgYWdhaW5zdCBk ZWJ1ZyBhbmQKIyByZWxlYXNlIEMgcnVudGltZXMgcmVzcGVjdGl2ZWx5IChzaG91bGQgbmV2ZXIg YmUgbWl4ZWQpLCBhZGQgYW4gZXh0cmEgbGF5ZXIKIyBvZiBuYW1lc3BhY2luZyB0byBsaWIgYW5k IGJpbiwgZS5nLiBsaWIvRGVidWcsIGJpbi9SZWxlYXNlLCBldGMuIGZvciBNU1ZDLCBpZgojIHRo aXMgaXMgbm90IHNwZWNpZmllZCwgZGVidWcgbGlicmFyaWVzICsgUERCIGlzIHN1ZmZpeGVkIHdp dGggImQiCm9wdGlvbihHTFBLX0lOU1RBTExfTVVMVElfQ09ORklHIE9GRikKIyBidWlsZCBleGFt cGxlIHByb2dyYW1zCm9wdGlvbihHTFBLX0JVSUxEX0VYQU1QTEVTICJCdWlsZCB0aGUgR0xQSyBl eGFtcGxlIHByb2dyYW1zIiBPTikKCiMgb25seSBhdmFpbGFibGUgZm9yIFdpbmRvd3MgY3VycmVu dGx5CmlmKE5PVCBXSU4zMikKICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNNYWtlIGNvbmZpZyBp cyBjdXJyZW50bHkgb25seSB1c2FibGUgZm9yIFdpbmRvd3MiKQplbmRpZigpCgojIGVuYWJsZSB0 ZXN0aW5nIHZpYSBjdGVzdAppbmNsdWRlKENUZXN0KQoKIyBjaGVjayBpZiBtdWx0aS1jb25maWcg b3Igbm90CmdldF9wcm9wZXJ0eShHTFBLX0JVSUxEX01VTFRJX0NPTkZJRyBHTE9CQUwgUFJPUEVS VFkgR0VORVJBVE9SX0lTX01VTFRJX0NPTkZJRykKaWYoR0xQS19CVUlMRF9NVUxUSV9DT05GSUcp CiAgICBtZXNzYWdlKFNUQVRVUyAiQnVpbGQgZ2VuZXJhdG9yOiBNdWx0aS1jb25maWciKQplbHNl KCkKICAgIG1lc3NhZ2UoU1RBVFVTICJCdWlsZCBnZW5lcmF0b3I6IFNpbmdsZS1jb25maWciKQpl bmRpZigpCgojIHN0YXRpYy9zaGFyZWQgbGlicmFyeSBidWlsZAppZihCVUlMRF9TSEFSRURfTElC UykKICAgIG1lc3NhZ2UoU1RBVFVTICJHTFBLIGJ1aWxkOiBTaGFyZWQiKQplbHNlKCkKICAgIG1l c3NhZ2UoU1RBVFVTICJHTFBLIGJ1aWxkOiBTdGF0aWMiKQplbmRpZigpCiMgbGluayBzdGF0aWNh bGx5IGFnYWluc3QgQyBydW50aW1lIGxpYnJhcnkgaWYgcmVxdWVzdGVkCmlmKFdJTjMyKQogICAg aWYoR0xQS19VU0VfU1RBVElDX0NSVCkKICAgICAgICBzZXQoQ01BS0VfTVNWQ19SVU5USU1FX0xJ QlJBUlkgIk11bHRpVGhyZWFkZWQkPCQ8Q09ORklHOkRlYnVnPjpEZWJ1Zz4iKQogICAgICAgIG1l c3NhZ2UoU1RBVFVTICJVQ1JUIGxpbmthZ2U6IFN0YXRpYyIpCiAgICAjIGxpbmsgZHluYW1pY2Fs bHkuIHRoaXMgaXMgdGhlIGRlZmF1bHQgYnV0IHdlIHNldCB0aGlzIGV4cGxpY2l0bHkKICAgIGVs c2UoKQogICAgICAgIHNldChDTUFLRV9NU1ZDX1JVTlRJTUVfTElCUkFSWSAiTXVsdGlUaHJlYWRl ZCQ8JDxDT05GSUc6RGVidWc+OkRlYnVnPkRMTCIpCiAgICAgICAgbWVzc2FnZShTVEFUVVMgIlVD UlQgbGlua2FnZTogU2hhcmVkIikKICAgIGVuZGlmKCkKZW5kaWYoKQojIG11bHRpLWNvbmZpZyBp bnN0YWxsYXRpb24gKG9ubHkgZm9yIE1TVkMpCmlmKE1TVkMgQU5EIEdMUEtfSU5TVEFMTF9NVUxU SV9DT05GSUcpCiAgICBtZXNzYWdlKFNUQVRVUyAiSW5zdGFsbGF0aW9uOiBNdWx0aSIpCmVsc2Uo KQogICAgbWVzc2FnZShTVEFUVVMgIkluc3RhbGxhdGlvbjogRmxhdCIpCmVuZGlmKCkKIyBleGFt cGxlIHByb2dyYW1zCmlmKEdMUEtfQlVJTERfRVhBTVBMRVMpCiAgICBtZXNzYWdlKFNUQVRVUyAi QnVpbGQgZXhhbXBsZXM6IE5vIikKZWxzZSgpCiAgICBtZXNzYWdlKFNUQVRVUyAiQnVpbGQgZXhh bXBsZXM6IFllcyIpCmVuZGlmKCkKCiMgZXhhbXBsZXMgZGlyZWN0b3J5IGFic29sdXRlIHBhdGgK c2V0KEdMUEtfRVhBTVBMRVNfRElSICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9leGFtcGxl cykKCiMgY2hlY2sgaWYgZ2VuZXJhdGluZyAzMi0gb3IgNjQtYml0IGNvZGUKaWYoQ01BS0VfU0la RU9GX1ZPSURfUCBFUVVBTCA4KQogICAgc2V0KEdMUEtfVEFSR0VUXzY0IE9OKQogICAgc2V0KEdM UEtfVEFSR0VUXzMyIE9GRikKICAgIG1lc3NhZ2UoU1RBVFVTICJBcmNoaXRlY3R1cmU6IDY0LWJp dCIpCmVsc2VpZihDTUFLRV9TSVpFT0ZfVk9JRF9QIEVRVUFMIDQpCiAgICBzZXQoR0xQS19UQVJH RVRfNjQgT0ZGKQogICAgc2V0KEdMUEtfVEFSR0VUXzMyIE9OKQogICAgbWVzc2FnZShTVEFUVVMg IkFyY2hpdGVjdHVyZTogMzItYml0IikKZWxzZSgpCiAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJJ bmNvbXBhdGlibGUgcG9pbnRlciBzaXplLCBtdXN0IGJlIDggb3IgNCBieXRlcyIpCmVuZGlmKCkK CiMgY29tcGlsZSBmbGFncwppZihNU1ZDKQogICAgIyBUT0RPOiBpbmNyZWFzZSB3YXJuaW5nIGxl dmVsIGxhdGVyPyBlLmcuIC9XNCwgL1dhbGwKICAgIGFkZF9jb21waWxlX2RlZmluaXRpb25zKEhB VkVfQ09ORklHX0ggX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MpCiAgICBhZGRfY29tcGlsZV9vcHRp b25zKC9XMykKZWxzZSgpCiAgICAjIFRPRE86IGZpbGwgaW4gZm9yICpuaXgKZW5kaWYoKQoKIyBp bmNsdWRlIGRpcmVjdG9yaWVzCmluY2x1ZGVfZGlyZWN0b3JpZXMoCiAgICBzcmMKICAgIHNyYy9h bWQKICAgIHNyYy9hcGkKICAgIHNyYy9iZmxpYgogICAgc3JjL2NvbGFtZAogICAgc3JjL2RyYWZ0 CiAgICBzcmMvZW52CiAgICBzcmMvaW50b3B0CiAgICBzcmMvbWluaXNhdAogICAgc3JjL21pc2MK ICAgIHNyYy9tcGwKICAgIHNyYy9ucHAKICAgIHNyYy9wcm94eQogICAgc3JjL3NpbXBsZXgKICAg IHNyYy96bGliCikKIyBhZGQgdzMyIG9yIHc2NCBhcyBpbmNsdWRlIGZvciBjb25maWcuaCBhcHBy b3ByaWF0ZWx5CmlmKEdMUEtfVEFSR0VUXzY0KQogICAgaW5jbHVkZV9kaXJlY3Rvcmllcyh3NjQp CiAgICBzZXQoR0xQS19DT05GSUdfSF9ESVIgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3c2 NCkKICAgIG1lc3NhZ2UoU1RBVFVTICJjb25maWcuaCBmcm9tOiB3NjQiKQplbHNlKCkKICAgIGlu Y2x1ZGVfZGlyZWN0b3JpZXModzMyKQogICAgc2V0KEdMUEtfQ09ORklHX0hfRElSICR7Q01BS0Vf Q1VSUkVOVF9TT1VSQ0VfRElSfS93MzIpCiAgICBtZXNzYWdlKFNUQVRVUyAiY29uZmlnLmggZnJv bTogdzMyIikKZW5kaWYoKQoKIyBidWlsZCBHTFBLIGxpYnJhcnkuIG1heWJlIHVzZSB3aWxkY2Fy ZHM/CmFkZF9saWJyYXJ5KAogICAgZ2xwawogICAgc3JjL2FtZC9hbWRfMS5jCiAgICBzcmMvYW1k L2FtZF8yLmMKICAgIHNyYy9hbWQvYW1kX2FhdC5jCiAgICBzcmMvYW1kL2FtZF9jb250cm9sLmMK ICAgIHNyYy9hbWQvYW1kX2RlZmF1bHRzLmMKICAgIHNyYy9hbWQvYW1kX2R1bXAuYwogICAgc3Jj L2FtZC9hbWRfaW5mby5jCiAgICBzcmMvYW1kL2FtZF9vcmRlci5jCiAgICBzcmMvYW1kL2FtZF9w b3N0X3RyZWUuYwogICAgc3JjL2FtZC9hbWRfcG9zdG9yZGVyLmMKICAgIHNyYy9hbWQvYW1kX3By ZXByb2Nlc3MuYwogICAgc3JjL2FtZC9hbWRfdmFsaWQuYwogICAgc3JjL2FwaS9hZHZiYXMuYwog ICAgc3JjL2FwaS9hc25oYWxsLmMKICAgIHNyYy9hcGkvYXNubHAuYwogICAgc3JjL2FwaS9hc25v a2FsZy5jCiAgICBzcmMvYXBpL2NrYXNuLmMKICAgIHNyYy9hcGkvY2tjbmYuYwogICAgc3JjL2Fw aS9jcGxleC5jCiAgICBzcmMvYXBpL2NwcC5jCiAgICBzcmMvYXBpL2NweGJhcy5jCiAgICBzcmMv YXBpL2dyYXBoLmMKICAgIHNyYy9hcGkvZ3JpZGdlbi5jCiAgICBzcmMvYXBpL2ludGZlYXMxLmMK ICAgIHNyYy9hcGkvbWF4ZmZhbGcuYwogICAgc3JjL2FwaS9tYXhmbHAuYwogICAgc3JjL2FwaS9t Y2ZscC5jCiAgICBzcmMvYXBpL21jZm9rYWxnLmMKICAgIHNyYy9hcGkvbWNmcmVsYXguYwogICAg c3JjL2FwaS9taW5pc2F0MS5jCiAgICBzcmMvYXBpL21wbC5jCiAgICBzcmMvYXBpL21wcy5jCiAg ICBzcmMvYXBpL25ldGdlbi5jCiAgICBzcmMvYXBpL25wcC5jCiAgICBzcmMvYXBpL3ByaXB0LmMK ICAgIHNyYy9hcGkvcHJtaXAuYwogICAgc3JjL2FwaS9wcm9iMS5jCiAgICBzcmMvYXBpL3Byb2Iy LmMKICAgIHNyYy9hcGkvcHJvYjMuYwogICAgc3JjL2FwaS9wcm9iNC5jCiAgICBzcmMvYXBpL3By b2I1LmMKICAgIHNyYy9hcGkvcHJybmdzLmMKICAgIHNyYy9hcGkvcHJzb2wuYwogICAgc3JjL2Fw aS9yZGFzbi5jCiAgICBzcmMvYXBpL3JkY2MuYwogICAgc3JjL2FwaS9yZGNuZi5jCiAgICBzcmMv YXBpL3JkaXB0LmMKICAgIHNyYy9hcGkvcmRtYXhmLmMKICAgIHNyYy9hcGkvcmRtY2YuYwogICAg c3JjL2FwaS9yZG1pcC5jCiAgICBzcmMvYXBpL3JkcHJvYi5jCiAgICBzcmMvYXBpL3Jkc29sLmMK ICAgIHNyYy9hcGkvcm1mZ2VuLmMKICAgIHNyYy9hcGkvc3Ryb25nLmMKICAgIHNyYy9hcGkvdG9w c29ydC5jCiAgICBzcmMvYXBpL3dlYWsuYwogICAgc3JjL2FwaS93Y2xpcWV4LmMKICAgIHNyYy9h cGkvd3Jhc24uYwogICAgc3JjL2FwaS93cmNjLmMKICAgIHNyYy9hcGkvd3JjbmYuYwogICAgc3Jj L2FwaS93cmlwdC5jCiAgICBzcmMvYXBpL3dybWF4Zi5jCiAgICBzcmMvYXBpL3dybWNmLmMKICAg IHNyYy9hcGkvd3JtaXAuYwogICAgc3JjL2FwaS93cnByb2IuYwogICAgc3JjL2FwaS93cnNvbC5j CiAgICBzcmMvYmZsaWIvYnRmLmMKICAgIHNyYy9iZmxpYi9idGZpbnQuYwogICAgc3JjL2JmbGli L2Zodi5jCiAgICBzcmMvYmZsaWIvZmh2aW50LmMKICAgIHNyYy9iZmxpYi9pZnUuYwogICAgc3Jj L2JmbGliL2x1Zi5jCiAgICBzcmMvYmZsaWIvbHVmaW50LmMKICAgIHNyYy9iZmxpYi9zY2YuYwog ICAgc3JjL2JmbGliL3NjZmludC5jCiAgICBzcmMvYmZsaWIvc2dmLmMKICAgIHNyYy9iZmxpYi9z dmEuYwogICAgc3JjL2NvbGFtZC9jb2xhbWQuYwogICAgc3JjL2RyYWZ0L2JmZC5jCiAgICBzcmMv ZHJhZnQvYmZ4LmMKICAgIHNyYy9kcmFmdC9nbHBhcGkwNi5jCiAgICBzcmMvZHJhZnQvZ2xwYXBp MDcuYwogICAgc3JjL2RyYWZ0L2dscGFwaTA4LmMKICAgIHNyYy9kcmFmdC9nbHBhcGkwOS5jCiAg ICBzcmMvZHJhZnQvZ2xwYXBpMTAuYwogICAgc3JjL2RyYWZ0L2dscGFwaTEyLmMKICAgIHNyYy9k cmFmdC9nbHBhcGkxMy5jCiAgICBzcmMvZHJhZnQvZ2xwaW9zMDEuYwogICAgc3JjL2RyYWZ0L2ds cGlvczAyLmMKICAgIHNyYy9kcmFmdC9nbHBpb3MwMy5jCiAgICBzcmMvZHJhZnQvZ2xwaW9zMDcu YwogICAgc3JjL2RyYWZ0L2dscGlvczA5LmMKICAgIHNyYy9kcmFmdC9nbHBpb3MxMS5jCiAgICBz cmMvZHJhZnQvZ2xwaW9zMTIuYwogICAgc3JjL2RyYWZ0L2dscGlwbS5jCiAgICBzcmMvZHJhZnQv Z2xwbWF0LmMKICAgIHNyYy9kcmFmdC9nbHBzY2wuYwogICAgc3JjL2RyYWZ0L2dscHNzeDAxLmMK ICAgIHNyYy9kcmFmdC9nbHBzc3gwMi5jCiAgICBzcmMvZHJhZnQvbHV4LmMKICAgIHNyYy9lbnYv YWxsb2MuYwogICAgc3JjL2Vudi9kbHN1cC5jCiAgICBzcmMvZW52L2Vudi5jCiAgICBzcmMvZW52 L2Vycm9yLmMKICAgIHNyYy9lbnYvc3RkYy5jCiAgICBzcmMvZW52L3N0ZG91dC5jCiAgICBzcmMv ZW52L3N0cmVhbS5jCiAgICBzcmMvZW52L3RpbWUuYwogICAgc3JjL2Vudi90bHMuYwogICAgc3Jj L2ludG9wdC9jZmcuYwogICAgc3JjL2ludG9wdC9jZmcxLmMKICAgIHNyYy9pbnRvcHQvY2ZnMi5j CiAgICBzcmMvaW50b3B0L2NscWN1dC5jCiAgICBzcmMvaW50b3B0L2Nvdmdlbi5jCiAgICBzcmMv aW50b3B0L2ZwdW1wLmMKICAgIHNyYy9pbnRvcHQvZ21pY3V0LmMKICAgIHNyYy9pbnRvcHQvZ21p Z2VuLmMKICAgIHNyYy9pbnRvcHQvbWlyZ2VuLmMKICAgIHNyYy9pbnRvcHQvc3B2LmMKICAgIHNy Yy9taW5pc2F0L21pbmlzYXQuYwogICAgc3JjL21pc2MvYXZsLmMKICAgIHNyYy9taXNjL2JpZ251 bS5jCiAgICBzcmMvbWlzYy9kaW1hY3MuYwogICAgc3JjL21pc2MvZG1wLmMKICAgIHNyYy9taXNj L2ZmYWxnLmMKICAgIHNyYy9taXNjL2ZwMnJhdC5jCiAgICBzcmMvbWlzYy9mdnMuYwogICAgc3Jj L21pc2MvZ2NkLmMKICAgIHNyYy9taXNjL2hibS5jCiAgICBzcmMvbWlzYy9qZC5jCiAgICBzcmMv bWlzYy9rZWxsZXIuYwogICAgc3JjL21pc2Mva3MuYwogICAgc3JjL21pc2MvbWMxM2QuYwogICAg c3JjL21pc2MvbWMyMWEuYwogICAgc3JjL21pc2MvbXQxLmMKICAgIHNyYy9taXNjL215Z21wLmMK ICAgIHNyYy9taXNjL29rYWxnLmMKICAgIHNyYy9taXNjL3FtZC5jCiAgICBzcmMvbWlzYy9yZWxh eDQuYwogICAgc3JjL21pc2MvcmdyLmMKICAgIHNyYy9taXNjL3JuZy5jCiAgICBzcmMvbWlzYy9y bmcxLmMKICAgIHNyYy9taXNjL3JvdW5kMm4uYwogICAgc3JjL21pc2Mvc3BtLmMKICAgIHNyYy9t aXNjL3N0cjJpbnQuYwogICAgc3JjL21pc2Mvc3RyMm51bS5jCiAgICBzcmMvbWlzYy9zdHJzcHgu YwogICAgc3JjL21pc2Mvc3RydHJpbS5jCiAgICBzcmMvbWlzYy90cmlhbmcuYwogICAgc3JjL21p c2Mvd2NsaXF1ZS5jCiAgICBzcmMvbWlzYy93Y2xpcXVlMS5jCiAgICBzcmMvbXBsL21wbDEuYwog ICAgc3JjL21wbC9tcGwyLmMKICAgIHNyYy9tcGwvbXBsMy5jCiAgICBzcmMvbXBsL21wbDQuYwog ICAgc3JjL21wbC9tcGw1LmMKICAgIHNyYy9tcGwvbXBsNi5jCiAgICBzcmMvbXBsL21wbHNxbC5j CiAgICBzcmMvbnBwL25wcDEuYwogICAgc3JjL25wcC9ucHAyLmMKICAgIHNyYy9ucHAvbnBwMy5j CiAgICBzcmMvbnBwL25wcDQuYwogICAgc3JjL25wcC9ucHA1LmMKICAgIHNyYy9ucHAvbnBwNi5j CiAgICBzcmMvcHJveHkvcHJveHkuYwogICAgc3JjL3Byb3h5L3Byb3h5MS5jCiAgICBzcmMvc2lt cGxleC9zcHhhdC5jCiAgICBzcmMvc2ltcGxleC9zcHhjaHV6Yy5jCiAgICBzcmMvc2ltcGxleC9z cHhjaHV6ci5jCiAgICBzcmMvc2ltcGxleC9zcHhscC5jCiAgICBzcmMvc2ltcGxleC9zcHhudC5j CiAgICBzcmMvc2ltcGxleC9zcHhwcmltLmMKICAgIHNyYy9zaW1wbGV4L3NweHByb2IuYwogICAg c3JjL3NpbXBsZXgvc3B5Y2h1emMuYwogICAgc3JjL3NpbXBsZXgvc3B5Y2h1enIuYwogICAgc3Jj L3NpbXBsZXgvc3B5ZHVhbC5jCiAgICBzcmMvemxpYi9hZGxlcjMyLmMKICAgIHNyYy96bGliL2Nv bXByZXNzLmMKICAgIHNyYy96bGliL2NyYzMyLmMKICAgIHNyYy96bGliL2RlZmxhdGUuYwogICAg c3JjL3psaWIvZ3pjbG9zZS5jCiAgICBzcmMvemxpYi9nemxpYi5jCiAgICBzcmMvemxpYi9nenJl YWQuYwogICAgc3JjL3psaWIvZ3p3cml0ZS5jCiAgICBzcmMvemxpYi9pbmZmYXN0LmMKICAgIHNy Yy96bGliL2luZmxhdGUuYwogICAgc3JjL3psaWIvaW5mdHJlZXMuYwogICAgc3JjL3psaWIvdHJl ZXMuYwogICAgc3JjL3psaWIvdW5jb21wci5jCiAgICBzcmMvemxpYi96aW8uYwogICAgc3JjL3ps aWIvenV0aWwuYwopCiMgY29uZmlnLmggY29weWluZyBmcm9tIGNvbmZpZ19WQy4gdzMyIGFuZCB3 NjQgYXJlIHNhbWUgYnV0IHdlIGNob29zZQphZGRfY3VzdG9tX2NvbW1hbmQoCiAgICBUQVJHRVQg Z2xwayBQUkVfQlVJTEQKICAgIENPTU1BTkQKICAgICAgICAke0NNQUtFX0NPTU1BTkR9IC1FIGNv cHlfaWZfZGlmZmVyZW50ICR7R0xQS19DT05GSUdfSF9ESVJ9L2NvbmZpZ19WQwogICAgICAgICAg ICAke0dMUEtfQ09ORklHX0hfRElSfS9jb25maWcuaAogICAgQ09NTUVOVCAiQ29weWluZyBjb25m aWdfVkMgdG8gY29uZmlnLmgiCiAgICBWRVJCQVRJTQopCiMgZ2xway5oIGlzIHRoZSBwdWJsaWMg aGVhZGVyCnNldF90YXJnZXRfcHJvcGVydGllcyhnbHBrIFBST1BFUlRJRVMgUFVCTElDX0hFQURF UiBzcmMvZ2xway5oKQojIGlmIG5vdCB1c2luZyBtdWx0aS1jb25maWcgaW5zdGFsbCwgc3VmZml4 ICJkIiB0byBnbHBrCmlmKE1TVkMgQU5EIE5PVCBHTFBLX0lOU1RBTExfTVVMVElfQ09ORklHKQog ICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGdscGsgUFJPUEVSVElFUyBPVVRQVVRfTkFNRSBnbHBr JDwkPENPTkZJRzpEZWJ1Zz46ZD4pCmVuZGlmKCkKCiMgYnVpbGQgZ2xwc29sCmFkZF9leGVjdXRh YmxlKGdscHNvbCBleGFtcGxlcy9nbHBzb2wuYykKdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGdscHNv bCBQUklWQVRFIGdscGspCiMgaWYgbm90IHVzaW5nIG11bHRpLWNvbmZpZyBpbnN0YWxsLCBzdWZm aXggImQiIHRvIGdscHNvbAppZihNU1ZDIEFORCBOT1QgR0xQS19JTlNUQUxMX01VTFRJX0NPTkZJ RykKICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhnbHBzb2wgUFJPUEVSVElFUyBPVVRQVVRfTkFN RSBnbHBzb2wkPCQ8Q09ORklHOkRlYnVnPjpkPikKZW5kaWYoKQoKIyBidWlsZCBleGFtcGxlcwpp ZihHTFBLX0JVSUxEX0VYQU1QTEVTKQogICAgYWRkX2V4ZWN1dGFibGUoaXB0c2FtcCBleGFtcGxl cy9pcHRzYW1wLmMpCiAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoaXB0c2FtcCBQUklWQVRFIGds cGspCiAgICBhZGRfZXhlY3V0YWJsZShtcGxzYW1wMSBleGFtcGxlcy9tcGxzYW1wMS5jKQogICAg dGFyZ2V0X2xpbmtfbGlicmFyaWVzKG1wbHNhbXAxIFBSSVZBVEUgZ2xwaykKICAgIGFkZF9leGVj dXRhYmxlKG1wbHNhbXAyIGV4YW1wbGVzL21wbHNhbXAyLmMpCiAgICB0YXJnZXRfbGlua19saWJy YXJpZXMobXBsc2FtcDIgUFJJVkFURSBnbHBrKQogICAgIyBhYm9ydHMgc2luY2UgZ2xwX25ldGdl biBkaXNhYmxlZCBkdWUgdG8gbGljZW5zaW5nIHByb2JsZW1zCiAgICAjIGFkZF9leGVjdXRhYmxl KG5ldGdlbiBleGFtcGxlcy9uZXRnZW4uYykKICAgICMgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKG5l dGdlbiBQUklWQVRFIGdscGspCiAgICBhZGRfZXhlY3V0YWJsZShucHBzYW1wIGV4YW1wbGVzL25w cHNhbXAuYykKICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhucHBzYW1wIFBSSVZBVEUgZ2xwaykK ICAgIGFkZF9leGVjdXRhYmxlKHNhbXBsZSBleGFtcGxlcy9zYW1wbGUuYykKICAgIHRhcmdldF9s aW5rX2xpYnJhcmllcyhzYW1wbGUgUFJJVkFURSBnbHBrKQogICAgYWRkX2V4ZWN1dGFibGUoc3B4 c2FtcDEgZXhhbXBsZXMvc3B4c2FtcDEuYykKICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhzcHhz YW1wMSBQUklWQVRFIGdscGspCiAgICBhZGRfZXhlY3V0YWJsZShzcHhzYW1wMiBleGFtcGxlcy9z cHhzYW1wMi5jKQogICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHNweHNhbXAyIFBSSVZBVEUgZ2xw aykKZW5kaWYoKQoKIyBhZGQgZ2xwc29sIGFzIGN0ZXN0IHRlc3QKYWRkX3Rlc3QoTkFNRSAiZ2xw c29sX3ZlcnNpb24iIENPTU1BTkQgZ2xwc29sIC0tdmVyc2lvbikKYWRkX3Rlc3QoCiAgICBOQU1F ICJnbHBzb2xfbXVydGFnaCIKICAgIENPTU1BTkQgZ2xwc29sIC0tbXBzICR7Q01BS0VfQ1VSUkVO VF9TT1VSQ0VfRElSfS9leGFtcGxlcy9tdXJ0YWdoLm1wcyAtLW1heAopCiMgYWRkIGV4YW1wbGVz IGFzIGFkZGl0aW9uYWwgdGVzdHMKaWYoR0xQS19CVUlMRF9FWEFNUExFUykKICAgIGFkZF90ZXN0 KE5BTUUgaXB0c2FtcCBDT01NQU5EIGlwdHNhbXAgV09SS0lOR19ESVJFQ1RPUlkgJHtHTFBLX0VY QU1QTEVTX0RJUn0pCiAgICBhZGRfdGVzdChOQU1FIG1wbHNhbXAxIENPTU1BTkQgbXBsc2FtcDEg V09SS0lOR19ESVJFQ1RPUlkgJHtHTFBLX0VYQU1QTEVTX0RJUn0pCiAgICBhZGRfdGVzdChOQU1F IG1wbHNhbXAyIENPTU1BTkQgbXBsc2FtcDIgV09SS0lOR19ESVJFQ1RPUlkgJHtHTFBLX0VYQU1Q TEVTX0RJUn0pCiAgICAjIGFkZF90ZXN0KE5BTUUgbmV0Z2VuIENPTU1BTkQgbmV0Z2VuIFdPUktJ TkdfRElSRUNUT1JZICR7R0xQS19FWEFNUExFU19ESVJ9KQogICAgYWRkX3Rlc3QoTkFNRSBucHBz YW1wIENPTU1BTkQgbnBwc2FtcCBXT1JLSU5HX0RJUkVDVE9SWSAke0dMUEtfRVhBTVBMRVNfRElS fSkKICAgIGFkZF90ZXN0KE5BTUUgc2FtcGxlIENPTU1BTkQgc2FtcGxlIFdPUktJTkdfRElSRUNU T1JZICR7R0xQS19FWEFNUExFU19ESVJ9KQogICAgYWRkX3Rlc3QoTkFNRSBzcHhzYW1wMSBDT01N QU5EIHNweHNhbXAxIFdPUktJTkdfRElSRUNUT1JZICR7R0xQS19FWEFNUExFU19ESVJ9KQogICAg YWRkX3Rlc3QoTkFNRSBzcHhzYW1wMiBDT01NQU5EIHNweHNhbXAyIFdPUktJTkdfRElSRUNUT1JZ ICR7R0xQS19FWEFNUExFU19ESVJ9KQplbmRpZigpCgojIHRhcmdldHMgdG8gaW5zdGFsbC4gZ2xw ayBpbmNsdWRlcyB0aGUgZ2xway5oIGhlYWRlcgpzZXQoR0xQS19JTlNUQUxMX1RBUkdFVFMgZ2xw ayBnbHBzb2wpCiMgaW5zdGFsbCBsaWJyYXJ5IGFuZCBnbHBzb2wgd2hlbiBjbWFrZSAtLWluc3Rh bGwgaXMgaW52b2tlZAppZihNU1ZDKQogICAgIyBEZWJ1ZyBjb25maWcgc2hvdWxkIGFsc28gaW5z dGFsbCBQREIgZmlsZXMuIHRoZXkgZ28gdG8gbGliIGlmIGxpYnJhcmllcwogICAgIyBhcmUgc3Rh dGljLCBiaW4gaWYgbGlicmFyaWVzIGFyZSBETEwgZm9yIGRlYnVnZ2luZyBjb252ZW5pZW5jZQog ICAgaWYoQlVJTERfU0hBUkVEX0xJQlMpCiAgICAgICAgc2V0KEdMUEtfUERCX0lOU1RBTExfU1VC RElSIGJpbikKICAgIGVsc2UoKQogICAgICAgIHNldChHTFBLX1BEQl9JTlNUQUxMX1NVQkRJUiBs aWIpCiAgICBlbmRpZigpCiAgICAjIG11bHRpLWNvbmZpZyBpbnN0YWxsYXRpb24KICAgIGlmKEdM UEtfSU5TVEFMTF9NVUxUSV9DT05GSUcpCiAgICAgICAgaW5zdGFsbCgKICAgICAgICAgICAgVEFS R0VUUyAke0dMUEtfSU5TVEFMTF9UQVJHRVRTfQogICAgICAgICAgICBSVU5USU1FIERFU1RJTkFU SU9OIGJpbi8kPENPTkZJRz4KICAgICAgICAgICAgTElCUkFSWSBERVNUSU5BVElPTiBsaWIvJDxD T05GSUc+CiAgICAgICAgICAgIEFSQ0hJVkUgREVTVElOQVRJT04gbGliLyQ8Q09ORklHPgogICAg ICAgICAgICBQVUJMSUNfSEVBREVSIERFU1RJTkFUSU9OIGluY2x1ZGUKICAgICAgICAgICAgQ09N UE9ORU5UIGdscGsKICAgICAgICApCiAgICAgICAgIyBEZWJ1ZyBjb25maWcgc2hvdWxkIGFsc28g aW5zdGFsbCBQREIgZmlsZXMuIHRoZXkgZ28gdG8gbGliIGlmCiAgICAgICAgIyBsaWJyYXJpZXMg YXJlIHN0YXRpYywgYmluIGlmIGxpYnJhcmllcyBhcmUgRExMCiAgICAgICAgaWYoQlVJTERfU0hB UkVEX0xJQlMpCiAgICAgICAgICAgIHNldChHTFBLX1BEQl9JTlNUQUxMX1NVQkRJUiBiaW4pCiAg ICAgICAgZWxzZSgpCiAgICAgICAgICAgIHNldChHTFBLX1BEQl9JTlNUQUxMX1NVQkRJUiBsaWIp CiAgICAgICAgZW5kaWYoKQogICAgICAgICMgaW5zdGFsbCBQREIgZmlsZSBmb3IgRGVidWcgY29u ZmlnIG9ubHkKICAgICAgICBpbnN0YWxsKAogICAgICAgICAgICBGSUxFUyAke0NNQUtFX0NVUlJF TlRfQklOQVJZX0RJUn0vRGVidWcvZ2xway5wZGIKICAgICAgICAgICAgQ09ORklHVVJBVElPTlMg RGVidWcKICAgICAgICAgICAgREVTVElOQVRJT04gJHtHTFBLX1BEQl9JTlNUQUxMX1NVQkRJUn0v RGVidWcKICAgICAgICAgICAgQ09NUE9ORU5UIGdscGsKICAgICAgICApCiAgICAjIGZsYXQgaW5z dGFsbGF0aW9uIHdoZXJlIGFydGlmYWN0cyBhcmUgc3VmZml4ZWQgd2l0aCAiZCIKICAgIGVsc2Uo KQogICAgICAgIGluc3RhbGwoCiAgICAgICAgICAgIFRBUkdFVFMgJHtHTFBLX0lOU1RBTExfVEFS R0VUU30KICAgICAgICAgICAgUlVOVElNRSBERVNUSU5BVElPTiBiaW4KICAgICAgICAgICAgTElC UkFSWSBERVNUSU5BVElPTiBsaWIKICAgICAgICAgICAgQVJDSElWRSBERVNUSU5BVElPTiBsaWIK ICAgICAgICAgICAgUFVCTElDX0hFQURFUiBERVNUSU5BVElPTiBpbmNsdWRlCiAgICAgICAgICAg IENPTVBPTkVOVCBnbHBrCiAgICAgICAgKQogICAgICAgIGluc3RhbGwoCiAgICAgICAgICAgIEZJ TEVTICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9EZWJ1Zy9nbHBrZC5wZGIKICAgICAgICAg ICAgQ09ORklHVVJBVElPTlMgRGVidWcKICAgICAgICAgICAgREVTVElOQVRJT04gJHtHTFBLX1BE Ql9JTlNUQUxMX1NVQkRJUn0KICAgICAgICAgICAgQ09NUE9ORU5UIGdscGsKICAgICAgICApCiAg ICBlbmRpZigpCiMgdHlwaWNhbCBmbGF0ICpuaXggaW5zdGFsbGF0aW9uCiMgVE9ETzogZm9yICpu aXgsIG5lZWQgcGtnLWNvbmZpZyBzdHVmZiB0b28sIGV0Yy4KZWxzZSgpCiAgICBpbnN0YWxsKAog ICAgICAgIFRBUkdFVFMgJHtHTFBLX0lOU1RBTExfVEFSR0VUU30KICAgICAgICBSVU5USU1FIERF U1RJTkFUSU9OIGJpbgogICAgICAgIExJQlJBUlkgREVTVElOQVRJT04gbGliCiAgICAgICAgQVJD SElWRSBERVNUSU5BVElPTiBsaWIKICAgICAgICBQVUJMSUNfSEVBREVSIERFU1RJTkFUSU9OIGlu Y2x1ZGUKICAgICAgICBDT01QT05FTlQgZ2xwawogICAgKQplbmRpZigpCg== --=-U8NgfZfZuB08f38kYF8x--