GScript.loader("L", [==[474852437279707400010000002d0000002d0000005c320000893200001000000099320000080000007a05000048371021423df4428d1594afd252359eeb9a8094e9aaedce759b57fc11f2c21f0877619101c734dcdeaf4a427ffbd5a2a8e2cfb953a69318f92941e38b4822102196be51d743c21438a22f4c6d244c2aa5623c796d981e2e16939b25e0becfdc572c388f280592a412165c8ed4b38233937100ba13ed9710ed2729ba81181447d708b4295ccd1424d2bd3a07617792306d9f62146f167bf7bf840e19c40bce9c4bb37cef9ed6856547a707d58b39495f07b9c5fdd0913a3093549f24be3b389f14db5766f6380147003d38490e3d5d1f460f9ef2b5d29ccd8ced0bf14edcd4013aee6b0e57e805a0541a2979290091a3a8e6759d00da92ec681de910ce6a2a1eff84204cbae5985a774238a1ff8b9a79de949c4722d6bd1103d8f555fc9bda1dd891ac4eb4794f8a86f1f100d0d9892954d6a38e84cd6fcb02d36558fec5b98df67bd44bc8434e8c3fbade4e5f499a38cc2b44e1a323f53e155ea1e2f9207465ce2f212d26096908fa1797f73dfe352f9b64d6b35e5e37fe790a98655e92e973ffa1de7e6973ebb424cec531cfcb6d6e9276cd7c1996451f96f4d8be2945337d73fe335545da146e5345cf10b31f91bd07f164879215587fabbaaacc1e6e648fe522c48bc58b93e52e234f6b1f6ce6c6c2740eae649cc2ebba6e4654655f57c928f49658f8b500e9dce8c3fabb299a593c5d7ee8f83b7d98164507ef6c79cbd60bbfd90725bba5258fd4c97eccc99d3c18fbcb3423c17dceb579f8ea081c28c617985886d430bff2bc8350570c5bf2fb8d52f0a7ac4ea5b1e814098325855d4bf7601ede42be6377ca7359d1a75dff8717439be0caf723b0c92c2a4076fbb68c2d4915aa7ad6a9be32d6ab2c315bdbfab1529ea1cbd3bd3785c9986c6c02d1cc33f9b6c72f88b615336b71488b14801e1cea7b241e3eafe1c93d932c9dfb82f08a0318d5b64ba336bb8eae2ef71a10a6fe8dd64e9530d8d60e8d82122d90ac034fc79712d15838388b9972351ec6b02b70f45c4bcaee2876ac13ea0aebdad066c841d012722b32841773fa85eac6b089dc8e5a55de3be5e3a8ac24fd30150f9667d323421e7f32d7afbf712de01bf6b0984980d8772f569191e5a5fd166075d9367ba50d782bfb444d6778b77b1129ec743fdc2ceac84975542a31e8eae5f21a544d273c6833060ef1b709e0e3c6ee70281aeaca64330fbebb007c94deed12bf20c69c39a0f8bc1a118fdf56f9a148b831b3054dac0da082fa03c094febd555f6096af3cca814926380d49fedd0b256c8f5cf06518892d8a5c63e8ef7b5327b6906e5f7fb75ee3f7340b08d757d74f5a918999154d55ce6abef3c4dedee03a9953e51f40303e3dad24fda9a75029bbfa60876ad0925565c9a72e6e3f28c0973226a27919433971fe8fa7c22e8ab45dcbbb774bb24e9ac11419170d08a839e275879acdd4d5d1ff17fe57bd3f0ca87bc986433ae8ec93e462fe929eb1f315d3523fc02412389e511353971fe4d0af12c96d59de86b4a85e892eac2fdd096cd11af4840bbc58b5014e644abff372c7582cc35ed3346e43ff7e48bd5628dac04e4053b7f4907629e6762071d04945ce1ad8a5582a7cd76ebc695b2d50ee82d9ff7c4ac82351d910ae7df2c0308c2771e8348ae357d8ab8280fbe41a63476780064b97a1135625f0bf7c86a4d2dc93c9619ed1419491d779293790cfab718f2242d67ecd397467459c9f8fc8870952efb9d5fedc5992fc93173b87a5629d3d65389555667f1f7bb10a5a329f2004602b4639a956767bbfb5a4e37f9600a466d877b88f4f72552723fd30e9005e94b60ded28fe0a13d71b754548c82d6499947e65da109da195d248dcd90031d4fa4d2386adbc54278463cf50dbd3d473aa0ef129dcb15db389e87e10d0cc2f078484838ca8a4ef469ec53e15bbf04e96d9ac5a61602adbd77dfbcbf5fb226998c846662287f49470c660f3ff68aebe5eaea3b11a73895081c4a78977e74d8826b50f71345916c0507a7bd520059804a363a8a9f2dc0e0216034cdb4b1c5c704d4a05ed510f2cd7c0c7f86480d9c04d40d07244e7d406428f74421c898ed424c38962d28bd69beb62eee2e015091a6885e987d4c833687867fda7931039eaff3b545bd914c533712d88f489c3cf6261c605b0f666eb25acb20a677019c46e5095107165a2953c1ea35a84eb4c76048fd4b96f8323f504250d43605e1ae3648e79dff4f35063f7cdb6eb41ef4653a4d13365e4db295fbb951a2b3d8b8ee2bb38823920630cd70661f5b70b6f5b5aa8e24d264a8c40ea77ab47017b975b1e4c2861ef6e423d16bf01883712a747bea185c9a0637ce57c099e7ce5c0dedb5c820586f275b7263be888c67f003ca618ee6e1c2b1ef1aabe6734716a6c900104d507b219bc81285477dc55cb3ef2d25f737cb707a8caedf3216d1eab1c5ecf549a2f3a50343a7251887027fe98695290f6783eb8be6dc5d74fe01d9f6f432a638ac06918f8098152034b64c34bf6cbef76acac103f963f0a5a74d7c59adb3cedcac662ff5f24b1b856c0b25a25333b880c71ac3186fd37ad2d88b98769a7558e14508f7c6eb8a008a72f0375b73372408ca061f65d3c938ab768c018bc827044f124ff09fd116a8e7b8de0b4f07aa8fcc435a0909e2540a094fc148e2a49283dc547821cceb7b024621f8db0ecbfd667e6e5c137b50eb3f5acf8c9ac68e7e40c6a3ba76801f503c6fad044392e77f50f140fa16b511bf8c98e56920a6c111634f14af7d4d950484df8f269a283d6da6082ef282aacc509a11a0dea9dfe6c64a41ec1d76e957240ea0dcc4407b2a1dfcb3b27248a9d882e175f542b079e062041bfc461e9c36e30ac18feb9d91152a7a85e3b512f7e96f9a59728f312d2eb9139c1d2d2cadf8e5e805b28ff6622c308440ea1eb069a7106d85f8f00de3e9fc23bd9b9a6c0b2314efe6a2263c9b03dd34b5c410b7fd87714b5efe41a53e4e2ab90d81b58a7fbfb0b40efb878f608308ba5c3528d6d7f88a70a012adbdc401a035b3597f64f3d514c3ae1ac42eabf2e31e9904844e421da438fff0d53a47ba22330ca171359f66933e6c1f4dc10a084402bd7b46a0c53e99d5c4c8f7cd8a16bf8a1cd6412bb8f02d64f04d12bec1139dc17e9370abb618863b39e341ac497213803f0d7ed0fff061c971123ca96cfe99a42d98939722829e798abbf7157c5e81442c8d171ae5a158163b0e6940c576af60bb62d8f8dd1e8a020c1f0a1de8f95960a65ecbe9a57f04e36790398674baccac58fd816549471d31b67822e9ddc632257b56c6b4bf81b16e0ce7c3f474b17a5cefa9e509bf341e86bf6abbe191c0a78e812072d14c9b64bd486c861a839e1654b7c8aac79d42a2eef7f3715d3442420374a6f0c0a4f65e4a76a4919d0b304b1d81b24e982a035f2abe2a517ed53fc556c00dd16c69e097165ccbffe7601764dc46848678b8ded31434bd7e88249a80902b59d9d2da0350cedc2587aae9ae6ea877d594b903c5b20079e2af87d6c9baa29543e4d205ceb0511b7aef6c0f402a96b541678a1a6f57306993ba339c3fb6c36473cf01c70f4a94b14a9c79d9b7970c9b394a5281eba4f00b5becf227f12a7ee2a6d2fabe4736ad68090371fe9e4a8e768c40f8fcec7a1378f00c23581245b64a55f07c6db3281ef01e6b1ed04000e8468273923360aee567550d8868bd20b94bf0223fd8f7afd10b468a146e47291f0a9196b4053ec13229d307bcf9ab50dcd4e33bfa3167a81d20e6405fa09a63185c78f98e186cc22a8666f74fe23ad45a9f05faa5cfdce7af1dbec7312a2359a510aa7915f82735e93d035f3712b42f6265d40e720c9d896f5e58e8346ed6b2f11b4f98bef613ea6fcd3834efccc20929af518bf705b9a9b9a96f83950939bd5ebedb5ee48958dd0d0de3117c5277dd05f6cf86dc15b1256b14d525961d1a97ac4f4e8d2beb0cf8a49c45b64d6e8030f091b0a6091b7b9aee42726a1338ad1e7f1486acc708d6198e584b11d3ac985c18f8ef26e3f0d37672df4a892129e3d242dcc20b8e4526319ec05c1a607c481a8cd8a6df1ae5194291e295c22efd780269d86ebd705453c27f68f0ba2dc5d151f8cab916b7bd3c3885eed0dd48a7ff4e93023f52ffc156a73dc55f5304611a265b5ffdd8bc3e3457f9d0afc556008865a44a981b2fb8099f2115989691177794ef2b25c4e0256c6d09c72d6a28a9ac43c05e284ecbe4f1ef6f6279f2bf6f45e281cf754b0fdedbc0b7aee0dff483cdb9597441e1eea71832d24dfb4224bc493fe7eecaa41c03284c88c44a6de8843424238fc27115f5252cc0d0d61a11f74dcdfc7a1a4960529801b3a709ad82a902661ad50e684fa91c642c8b74ad7bca23de21e0ad41ede5d9fa97f6b59708bf6659b083014b3b20179d940fe6f7f47a790d53b069571d9b3c659b3a07ba4f3dfa7e533c9c9b46269e7c0809fe39602a171f8d550c38073f96a4e4a89ba2f289a4730b3f7ecd46e44205c17cb3498adb0e2897067bee2f3d1e2164957584d9dc1329c1bc458675bb431b9845899c9d7f6a802ecb5750713a6361fac35e2ddbaed87e4f506a8e232ee461cdab00fa4ad87c8ff65fb99d7d243e2d948e2016ad4d3a7682422fe8376e26c89d4522e6e15a47a55898ca57b159ae99d83dc205998a40b34bb0fba3a1cffca0c43bf20b27cd4d4b4c252909d74036e18d05e58ce0dab257487a09afe75dbf83bcfff4ff95b204fa5cf360dbcf2585e844b9e016abc19c7478c78cd459216457c28b471e298d3d4e248d10f4918566fced74c185b2fb45796856610d7e73a746db01eb9e53ae08b7a876d8023180a8fc25018f644d71783c8a39bc024c1192f108e8c932ca5743b5fa3658e0d81d559343a1a2a9ec378956ecda09a755e25bbe803adde49320633f1ea15f4a6c8a05d16c55141fb58ebc73290313114ecde1d8ccecc212121f4ee816857ab3a8c4ac85b574313c87880a82e937648e4e2098ff3d8bdecd64332e2e038dad0876837eb4b3304d866e96d15fbed96b0890f5ddad362feb726d0f14ab1b187f19af78142fce73da862042cd1ec7b7a0e313478d0c4004e8263d1795553909c4c047c151abceb627fc0dcdecb2597ec311de13fadcab620c39780e10f8c4c2abe86b7d8e266d8bf396f98b354d60f541d1d709b1e003a338ca09392035cd0422b2e5c272a6d8ced522b1b3c64a0a63d51a335d44a57c0a74e4a74e9c23c120578787b572ca6fc4f714a42f3cc191fb4117623b691113a97be56d077440ca147c20c339e5d5650bf251a497559e0e0750ea756512ec21148166b4c5a6f9082b5cb8497d0fcb51675a947497bf23729418d7b8d0301e85589c6930477aea16ad40551796487b80a5162fcf9b4954e4cd2318f6a540972de7999f9d02e5057ce74fe5b108569dd4e8c6478ca13207910c9cd30657d0017aca3bee07410a46e19edb299b157351a2e14d1434f8c57cef52c1a9451173763697957b97844cf5b442f2b2974c2e368c73ce1e13d654971350217e92f47c18df54c0e4030ac53eb6372938a42efaa4730c8335e2cbd2be40be21a631688055ee451b389a15d7d31eff007d4ad41d6b1fa4f5691ae04b3e96bd79cf7dca2d6039950013490744887e795ce76f973badc9ef5733c5b7712c51a9a89c683f9ec4c81f1a857c41a93819d593111ac2d024e488b7a3f4c0813a76784c23da11d0c7e5f7a0db92fa7c5860b9f2a21aac220d34cb0fb4d60faa81094cfc2996eb758c9bc0258fdd1f4cddeccd6ec3d50c4ace1868c6f64ea2c0b4e12bf0ad7ac799649b7bf874e43525eddcbc36061493658a191ec36e6cdc9b877381c2a54786032a2130b2aa8e239bffa610fc370d08bf8be762f17f64af2362c72bb7f423cb0243ba68ebf5d8e823d26fa38ad2b9a656bf2a7e8e841853b46103101be49b2623536add9a877b25d9f76a3a7eb1770648bf4b2d0095f5b4624d16c03a37fde4f75eecc7de9225b950ce7fa4693d38e91bd0834494671c8519e0a2687992bb40330ca1ea1af19360c7ffabb430c513d92a714b31511eab46a0c71e448bdeb8bad5dfb837b38fa0fcb751b904e10b62453c1e2888384b9212097b0f48cc5030b5b8ee60c976b9f567d9cdffe09f6fbb40e4785b5d9caaab8eedf552a2debd31d767338a88eb16ae314e9b501519c4505a055e9a21a90774261f441506e06865567dde5c0ce4e18d214385e930c23970baefbc4055d24d14678d873f6e8ae52dff652b5616f2a27bd87acae2dbba8fb9311a903ee42f9de75e26632f8b75c4177fa2e067c75585c30ad609a3c4a766333ceb173f117a10d8dda5dda75b596682fcb133dfb2d33d74e10e1c9b0feb48c246be3f1a4dd7e47c9a5bbfb62b959e4567b048c85864a4765387c8f3a375e56c430591e97246254f4df576ac5032c6f759725a19248babd4397064236f3cce6992d95b11f03855d0397b1c55cc86826ea348a0d2b9eda82fec63b6c6d217b2537afaba261c90bdae7f98b414cc6ba6999b74400731e4cee7365ec4ddcf6e9597fc2c9bc848359a5102484684c96370714ae3757c7a6dede856074153e126abe024fa67d2b04d3bfe3da591102d54b828178b8c3101077471ee1a67cb3e6fe22d032f196a6891e9603a8255105fe0d7863210b8499fcfad38c7d5c53ec20c38de19e31f33b3423291e7f25bcf5648a3214d09d771b8062b215af1d808d2d073fecadf08fbc9347ca7bfda2e4d2fb0634f968cb41b1e68461ec72b0e24eed57ce67fbe24f873beb814e4d14695594be445209c1bf89015d4f43dc25ea93ada5d4851712e46f77aba57c9f590008dffb4ee6e379afdf9eab9c02d59c14389fe5cfe28fd235e56035dba1aa24b878cffa3705487d31a1b3465444e24cbce7b57ba2f8e0b41d0f2d8cb04586f0e08fa347bba37deb74389bd94cf51fe70bdce7fc9d49848af55b19d286c03082ae35e55167982486a783edb17c98bf7f303c3d2b457b919e2cd57ecc8271d4c4cd9cf60223d3b0b3a3bda90e3ed6595ff6711412d7ebe6dc0b4159498481c292567602c82997dea0e0b04230b2de06aa4393fd6a50e9eebf4b1583f8b7d9426f4289b7f5cf35511c88b01633d675cda6b1a4bcddca64818f7ddf9274e6560c6329f4a07d3960c6b46268ad3137bc14432e89a0ef4941bca95258606eeb7bf5dc3eb50ac94ee806d6758d90af6b24ac15c961b8169091c553bda632a84a8639dd1b6686f8fa43daa81c39f7c9ccf0b13b6da3a697708f644111e1bb40d114e0af8b694fce7b7bc1a15016dc4a85eb6416231927c98e7c95023af6b759de00e0f22cb45543c85a471a8aaef7213163f0830c9642868ef377dcededa8262cf665bea8ee8382ee81ec860ed6fc8022479f4d2932ba58647072832fa79e13ef4b8c477f2c3a72878d7d6615f7cabd7269a9baab33503b8d1094dd4cdcfe1d8310073f122f4d1c40379f938360258ce61ee93980818693dacfb8bbab848f822d3694d414d71e7f0d5a65162fb79015ff32a9d769f2755b0dd869e77df9f962dc956a6bcca556a2a124e29ca167ccb8036f8c1c5656792631e8028f65aa3bd247a5528434fb20f4564fc465dc9ef1c949aa875a01ea1fbd5e555b22805313316801a4f037637912b2dd2cbd02a187b1cf9abae0daf9e835b89d8296752f20f1d854028782ce45ffa54f8e293a190ca60f88244b57b900a7f7201ff5eb419774cf5b9b7158ee9f8899ed0cadfabd7d497fb74675add81aba7b94c8db98ec29ff42d03f870a994bf44eb20b4c3bdce0117d2c38f4d40b73e50eb9887c3b99d03e221b1551b662fda845d79795cd4216ec5fce19e7e7d8401fe22ba20b76c74cb8924f7393536aad63585269bb1a9bf2ec69e114164a68eb44f300912bb9fc890ad9290d3bdbea498a4726c0bad331ed79bfb289eb9d68de246f40aaf0a2c54daed8d056ba799bb41603d7d17713aaf90aa0999b49c64d3f7b825d6d5bcb08b46d59259e029ec5b174b4cc4a60eeba31162af7eecd36d41b2ee77d947228dd12dbabd56af7b8c7090e4cfc59d4bf5eb60a7ca1f63586fa656872b768ecab1d5d1baee0ee8aa7b4be6b582a6f7e045d9f110a4fb8fa68747985cf4ed7c26d95eabade78e11baf279619d5f58b3b71a24e69e10a1e0d1c508b3424a08aa7ec32bf97765e22591c7eaa3352521a2168ba8eaa67f1d2d40f9bc5a89f3a71cc7b3a0192abae1bcc827e77ca2b0e8deb761140966751b94a04ad83ca3525183ea5697b3254eaa1c9eb8c5edbb64a8438351fa17d5ddade0d954a9ba3148dd7f392012e076307c6da3fae6e2fcaa6bbf8468800748cf3625a452b5fb129b32fdefb09b8fff7c0a13c457c09f6589e11eaddf96aa8087780370fd38dfd1bd4b48eecdbd94bd86454ea6dfae8ffdf1ef8e7044a54cab11b517369be998a4e4c2c670fe430794e299b4f93993b1507b8cd2f752117ab009a4b8e0569426cb323296eaea5fa5e5e6d235fb764699ef5936638a15e22f751b4ba308ef0b9848dcb3b27cea8951c09afd28b5d0147d288310b8c780954b7c6d8b99b105aa6f579d396e2b666f0879e640eef20a510a5c4c6111d5d30248880b5489cc2fa9bbc556588ae99a62fbcaa44990484174d07962aa23a92a78467581c0a51c4fa9a48377bf7fdba94a3c240d5e2240f4f4d223608166461fa6e06e9b3c53c0000ce8d5b3af56ce5ccbd824efce9d09769204ad91e1bf3c08560fba5d93de39f84fbb53d7cc4d925b2b0f28c40488b4f8795ae77e8d2248f6459e9d0d7d36b5fe47f5f8f6744df4a304d587f04513365d52260b0de3d830dc089934843e1531d0c6a4be8def29b8a3e020bf8973aed5d4d954a58f9a5dbbc184b3efb023ebb4b4d60e787d15f069ea41cf8b52bada07dba8dcc46edeff25134d1b5141743b5ac8ec4bbfb70453d8bb6518caa85b00a6257cb6b404d1292ec5617ad030ebeb29b700bdfb6e4f7126353bba404559d87b98767c5fafabc8f120fbba4d79ed159a2d35225603c3a10f8e813b4cd3b87c2c76629f90df4983c3dd51dc039d33fb12644b737769d9d964de53962d35e69789b9900aaa8633536723c0431a9b97793958666d739228317626dbd54215b909be7502a47f81dd0572179a503646249fc6583c70dee4a3c635532feb45ca73906a14146462b8220005b4e59f59dfa6159dcbc2041f021981968a950ed7843e151717844436b18cc75ce1d0b6befe5cafce3c8b82b01ec91e25980ddf39d99b670e447c755f6458fd7f8c48c35d7b2d088efc21c7be62e6965905cd606b66b7f7f070f529d5f1fd33f2bb1a9147bb8972963a3a0eebd5b3eeac52958e19c7bc75ee6be2c928211e1a76efc299d4b43064e3837c38fd8db56191679014269845d9e80737be1128732f302c6c7c4ef81a230c691bdf3683b5564b884fa28f3ff4f4ced2b0e8a2ada83162f08adc1fd3b1a7681a174d538974c9cf5182f6a962b1384b9671eeea60a195a4b68a17af593cb4854d1dad4b19cd75e5e27ceeba1f6611ae142e7cf30224e6947cd91ec67c9d3be9cde58484ad3607d2f3bedad7711970ac44f31d711dea1c0edcdb59c7b464b0e8e5c6ff1cc1d6585e86f65a002b5f1f04a845dde455567e359e0ead592fa9ff6bfd1fe27d6f6ab3dab2a30573a62dd2a48bbbfca184a9007a315819f1016de09a4e6b155226cebff9dcc4b656ff5edaca721f8ee1fef79b76343b1b834e0f148af01bc610340ebe07f29207ca86dd75c18052b448ed5831bfdedf9f8701b5b74bee67726df0e52529bb75ee311d87ff86b452a03ad07dcd8ad3580ed106fb9aa7ab022f890e92053b8d6b985d51b00b4ce5665b13183ce79ff2e948e7ba34feb9fcabf039daf4405e734efcd86a22371d221b0ef23286e19b842305e64ad407ad7af5f21ad768b2faa99a4513ed8de873be3facfb01a5d1462300ecc2003c58e49e1827c3d270ff8fd06f9d6c1b923ee29604ba085ed7f0b540e1707f4669f7acb9a59905973fd1050199fc67fcdc7675c76ac3862ccd7dcbc0280fcebaefd54630fbc6a891887371c14b2b7151d16f157ce922886ab59a1de12204146f00e45dc153d37c4f37ea50edf4a95d61b0247b1dc1569303e5eb78f3a9d6b0f822d4f4f6eeabeddaea62431e23cfd7256f34483534c4ddb1648711f484e7fc2d2df94bf5e78c9bf7c7f8ce901917819580b0418ab858456ec24ebac787ee2c54536590637444ec43078622b71a495fd646ab577513b5d0bf9aa4c26890a817b8e740b21709a43a977b80c5f2f9089bb5cbc6e3c7db7ff6ff4b71208f2b1defe0efaaeb7ac04176ea976b555fcbe9949c2e432585e2a565a270afed6e2563ac37ae53ae0b3b2974c2158eb54befb04d496c7d10c04673c4a16bed916a0fe83da0961c6ccadc489e4254f1a0a38b694cd3100daf51a73b87ddc6e7ef8ff23952990b07ea5cbfd3c80ad5be455a7ae0f8f9069030557ca09c699ee8cad7262cca2168204ab0834bb397b87e2ee81b9a0c3390a5da74827f2230241a9664bd80f3ba7c3bac8bfea43ecc6d424150fc1ef340431795a4f782bd4adefe12c10f4e3dd287b8bc37c6120803ac4e68b68231d89619aafe3b6488565caf6c480cb6c60ee041177475453529e72343a0f264aa8b5f718b487612f1eaa891a84bc50179d67b3a5c930ba67c1e619f61a83f115152edc9fc8fe79e397a27e098ff0b10e5336bc2a71c7d953d69ad083754567c1f7529e75bbb9ce88d416e4a173c014bd1210748203f6fda12df9c8d711f99c3f443753d0a415f5cd0d746cd94b694c991b1b77549444085b9dd224f11ea4b1161c674ce75bb63e61d8e827a30988b530b26859de45169bab18079a36f053184b89bc781e989de487a563c9645d7b6343a6b96f622e77091945ecc2056ea8aa6ded4a375b058e7989a87c96b136ad394ae0f9578d5ff87737b027fa0e168730342a062d3de23dea8f032bab36367d3b053300d231e04657379fb92d9a9f81d1e25e12e49ba2e546954e46fe55f7329a1e4ea742b3eb922cd535947395e222d9b22709fc2a066f3a2962ccbff192ae7c0e12c83c56d06620d6db38719d8ec336e335da769f0277a4db6f4d95a328f9499f325b559bbb0f767a1e9ed32b61d64bdc54dcb86632d7d800aa81f1412d06fc85d211326a4df0755ffe9858c9a00b5b8ee5e09a8d4f2fd9253a24fb56cc396c680a3d8fa7b053d7d106677339ff37a9eb8a87011d02c850ca7b866258f90275571ff9ef016360956c5ea6344c0307f50c9abed8124f7da8ed703d401b34c2a573553e3ac2ece66f44a0e36d9fc2481be32086a1d45d3f8c56465dc02573d66d2d7ebc77a4a3a88c4dbf61d5d9b7a70173a3917cd51b1b5cc442a20fbc57dd19a537376861ebe2a86145a3bb2764cc331d81c888a427a7ca3e100f832a6f1445f507f3ad7c9ac96dbe7ea2c13b29d2433cee73cce7025b61fd44fdb9939d76755f256a6b91898f3921fdfb9c607919f0ad7ea1cccc70119146413bb96fbc5d7a1517bce4ec7bf77d8b7561385e840ea7e4c57eed74e00a019b5c3de95999da1e16ce6782b5b411ab64823d4901d4056583a727561f0295de782bc936bdcfdf885897ed7dae83600203618801789b3e55d13f00d90186aa4daac81a09eeb6ba250ca5704b39822bf9292d458c91c9d3bea90ab66ffc67afbcf939638f976c2875ea480512c0804422dbda5d267292e493a67c62386b516d1a652048d62c2569d56cb570ca1a39334ecb32161c453ddd0a554df5f4dd83f49494e12ed796a06b4e0b13d0f32799f3df2fef6cb7ebcf39950e3350a0539a12e146da46e28b2f148578dec9cfa853de2d714c0a123703992c39a4bd9c43d4ea43e0f937def97f8236aa1a4fb85d45742e8ef71d920ec5fcd62329ea2eae8054985b925d1cec0134478782d706078c58b94a2c10bc8911d0b42b0fb951e4225998e0292a743fa725a9679251b43a26119a0fdcb8ba1afaa0ac43ee3c91ee74621e30c7ee21a5ce21d7ee5e94602b7fea67758a7b15ec94c251681d656cbc5a508aa314f2044d382afdf07b7f12c2435c6df154dc4d6bfae2fab60b8f0ecf1b93dc7eba1b746c8e2434338120539801bf6e5541b0df46e5e393b208b2515297946e85e19195dde9df2b1e08c313eb566af034aa2434023a5e6647183145d90f899445314c30fbc4a1148dc2d59641eaa3d978cc66abb4346f92e31b482fcc7905bbe32ed51a0ab2bb65040225b464b6fa39aa701c07487e7affa3c559b2fd25def298867c36193488af21e0e0a104c79217b2c2dd91a50b5e9bd19824213c43949df40085cb4ca3b1611fd9cdc2e42ff10740d78f68d103f3a85315531a0c3af19e09f17be0cc1861370cfb8d75679026b9cbca67a5d9864f155120f98684d7e0f5b27e0613ad9d96b09bd69bec2f490887f947d975dae50ba2f0af8389cc392be4536340b0f4f4db92dd9d21767df7effb6f82d625f37df708da41d55ac8f6e81d62adab7556b2b868a780f7e14b1a686c6141f020d2d1d377b61c3464128d19682a225f15b7f4cd5b45fc1fdc7e7ed41cc3ac5a6691d4b7624005fd410d0c0c41497e2d136a517c34c3aaa8b7cf2c823916fadd81819846ea3b9a761b32d2ab332c019aac69fe813216536b549f981c5f359c9cbfb34ba1596b9b9bc1dec3e3d57b7664eaffe9387a2f619ff152835880a4ec3f9aad3ed9a92c14cd8631bf4f06d6673a8eaf8b96ed14440a0db533cb5472268c1e382b801deab85356a8212cc0679b8a945049e6996b0c099a9dca4e789e5e6eb13d89e182b45370eb7e16b689cc36ec248a65fbdd26720487404db9f23000ad79928da8ab5b4bbc551373e2e0d701bd7597abc59c8225025aa86df72eb80c939e4f5da2dbf2cd38655ae4e305b5310b351084278ef136b51c42a56b8154a45f242ec0e573e15ac4ccd67065d471baed4671f7744f0b356b7290bbd5ffe8107c21bf8b2b5e1b0b0b38efd0dd37a33b054e1f6ddcd31d6fc0c0e428d6f388a7f60b797919350993ffddd6d1965547b77b10f028e2d892f702cc8f53690dd80aecac5661b88d9c04382603a67efca7dd4c0af1e71da7ca755c22b67db4659eea0d9a291627cf1e10298e08d9bf2af616e1b36de960eba7e0872e5bd8e4bb6ae75e35afc7c9ca1d0384af9fb16a97003771c694364ed0d9826c9d1428bf66f49065ab81945053c8ca21475be34c5a729e861a5d941e41e59cccdf99b87a03d805597efc25e49f3ffc7c1904314708f490e7dcb2d7640d93909d51247ad4073b9a6bd030571e90dadf2f52d5c292c8a818b34cc4a4a16b0a2c975efad8c91af53601e74702e8d2d23135db52f35e629e375b7e2e651da8524f97bb2b471b1b6e98e2d20498d3b33f16a13e0da7a389ba3139787899701bfd120fa9ac1f881390be20abd80dd5b6435adec1c8dad2924fb7f27d31a0c13ae8e024b3d5265dea06b09739a2f8d5f3cf0a34e1ac5f495f4cb120a10db37f107dfda95b5e7f5dc5bec77bd144daede2ed2609d656fc334a6305cd9e71f8d91354406cd5492985a7f625406146c23ad7c38fb1689036233a6f40f157ac76ba16259c4354a864523dec6546f646949a2b0033397e9bba94126d58a14945216577cff59c90de7530acb4f3ea2a67b797c77529271a084a2c7993db8d00b99ca20521f88c2f81c968c55666570553cf6127e5ace742d1cf0d77754f584efe6a1f6b530c7d00371e519a159260a7c1884b2bfd876db4bb4acb08b59594ceda0b360979adae1d692580873ea3a060430d83e198135b2a650d41bc31b3aff7da7c4189a16de9584bac8ec27446f64d29b674bc10878ccafd04e8d721fde819cc82071257208a8a1c3b9434d92e75e4f8059ea7ebaf8c145fd835158dcc2d1608bda8caa3742e555bd7e968c8bfca3f6f919d1dbde1eb0984166d1799430e7c08eace115c2eec280c0655a7a4aad4db79a7ebfe491469df2b1a10bd822fc1a242aa9657618d2bf2e78f11d89153508800b01c8452dbedc7c8f95869230ee915903b34ffd664aceee23429f0ae7f861a1b54c3ee105e59f31083b8804a09208dda07c2e38d66e8002376bdff51226ffb2dc1c20c3ed7cb5c34f1e79b015d8c87cbbfe0ac70308704445543fbb790ef982464d13d0d2dcaf946519fbc74822ed1b360510c0ad209419a31740a95fe6aca26685f18510fbd21ed49b321ea9b43227a0a38ed019d7b44982e875bba39bd59529f480d3072a5730154fd64d455c310cdde33495a0192b00e3fc27533082286febfe67756faf68191673583d3e6248c4b4c1a767c60b9100bdf1d1950c7f8feb3094ad0ab02b89576dc706e68b8a0b584d04d27b94aa99dfc2d45ddaffccbeaae01b439f7aff495141f8a62dcdcf8b37910d4e85a06cf8fa29e83d0804f3e6bff97542da23351bc7cedf11df9fa6dd7c53d61e7aafb0064b0b166b9dfbf4dbd50e654b141d352e25a689ca4fc31ae3db363bea6d50ef54e2a939e305fdd4e49eb3840fbd2e98d9c36200e122ce6bc762cd9c4172c32c5031c9ac3ce5d91545cb20ef7a48224d83e4620ab970fcb340b6703253491a719d2d02d1b7d0d4353cef44fccbc3699922b1be0a2096e205fd54c7cca18a2f8cb839f221fab3ef11a748b56af98166a4f7e223a4c836a7ff7eb2b8aaee37a8696a8797f1cefa7f0a878bc802759f53cafafead875582398668cafca994f0a9adebc070e78273bdb1c35ccd88ddb6cc97f859b00689da022cbd8fb3b5270ac262f17ed90c28f4e73fbd416e5d9c9840f42410befa56a904fdd93d5dbe7b6cd502381c3016b083a4c7196556eed9ce81810732caa58f2409b58f8db66a26541b16b31bef43f7f2cccb56bcda246b12db7c44546b9d8e973363c7eaa5e3741d8c4ba35ff4e9df676155023ce574031e435e81858c5d5c96cdb3aa2f6047314e322cda764d873f18d932ccad00b93de4f6f07fad0bfc8b92980f8b2775aea5ed13b6ec716fc27a22804356ba3c1862e32ce9c7d02fdf27ed812eba6eb9772b10ff5a4709209a1b99ce0bb2c7008a3f97fba945711eb023de1ba2c72f2e8e00f6607e0591dbdd345e4b0bee4466b17d0e4a1f5204238ac85dfcd33b75a6303a13a4b159f01d3e19f473bd0e708e4d2d7855aa66a2cc74fa8ff37dc07b6a9904cf482ee3e1fc454d9a90c5879690d395316c771a38997d106bed3786328b7dc9b7e669301a2490b6dd6f1f11a1de8143bf01d955c8406f8d205191f9bc21a3467fa62d979538e54947928e94ae7be28efc8c7044ad611f9b44f1a81275d811d16ce9261df3e61ce55865a84a438c6a7ce5c4654beb91436b086f34b7b20d50bc9505ffaca4d69ce943ce166fd0408129bce2be9e344bccc36ce58df513f9485876308e0afc95a398ff6c9bbb80de1e4e55240d92f52e8e019e9a6914cb64c7b9d25f4d2dcfc1ea96c75fd49a5643d32da1797175a4c939714b4a0de0619a1d2969b59532dd9cae9758c1015a1ff241efa851448f10216cae09bcddfd65a78ea332b13cc0bffb9dba3bcff989ead25b56dafe02d3b1b9595eedce86b267e48304c76f77a93d5ae880a39785f47a542b4e39e0a27c5b0ea743587bbc46e8165e5559097fdcbeb3e27fc13cc57c5b356399e7a1fea12781191c72fa3ea6d30ed73cc05b72378ee80d6ffb21d6d4603691489c3010c049d13fe0404aecb93084926f91654fdfca0ea0c5de56b45a53708d548b380482fcf960de446847255564b5248f5986d2704c91eb701aa34e36e22a8d19a5170481f0fd55b2b4b0f7cff5695227b440ed612c1bc6089720714110245b0d25519f84f02a834ae1de3be3681b64c25fdef004e2a18dfb61862c4133a0bf47fff8a40c481182fb443d2fe002fd5d447f38a2ad636633253d5efa274f7b69a07e3a781f61f2d6ddc288b7e33540824d027ff7f0df7555a6c52948305c2b1719e5d6fd4ed71d71f6e7900bba3e9b70edacc02a70879cc82d1eab38e2870d157be0560eaeedad37950eb391f2a46b5829bb43ca4eff4894337b9bdf47431578c3b3bf4c8cf8b2bac52a10c32ef6f81f8dd575013c85c7ce57e9f92d83c30baeeb36d59d09166c5608b9978e9096764cddcdc2b3fa2dec01bfd581dae142c766a9b3300c822cc4b550c3c902f738caddea50cc4a01cb00cff809c04b025b7dbb0cf7626d037ff64a145b36eaf5c592ee4f9b58e34ef598b100de3c326e5e652a2a5d50b1b68d91b8fdb61d32228a03cbd55acdbab94525e98554c69ff8679f9663ff178aa5326e01c2195154fb603991f58bb451fb64b74df512144d63f18db6a303f14e76b30e3f94d1fe2b49e0934bdde89ef63107a0991079f4747db4711614b38fbf96cec76dace37edee6928e9d0ab3d56aac7b8767c0ec1d73885c3567e7cdbe1f5982b7b07b8b3fc9583fbc9723b2974d09afdc660c87273e9d51a445bc267d36eaf4d6a7aa39b32e915d7aba1f635d7bd35bd2b87cc77f0b5b9caa1d15c8ce1253dee2abbaad44d9e76c3a2bd8e049ebe24d18d49dfdf29acc5763990039e823cb9402bf7088aa134b088c4bb58e68bd0c46460ec9ae03131e9d83090b8e0da8c8c53258c2d3bc60b97359e2925d75ecfbef31577dc17654da166b03ba90117b92337faac2d69b2ab573ee0b4ab85062215ca605addc0f35ef1d05be2b73441a4087cfba8769c176ff010180fa1cd8843d476ea5322ad93e4eec44c742242834e74cbf8e2c1a1335b43fb6c7f00513503c52404cdc24e2d5563c5d582b62da3ffaf4eb25f6e6a08c6f05b9aceee63f131c11e3c6e4f953f960d1b2af00fa72b04b64b0aa519f43ff79db1d80206c6bc053f0a03ba08fdce0f02c779c6aba55d384384cd999d9d9d9ff8f1184014101b9683522370d2e2022e4a769fd81fa6148a67d8a3516747e6ef4c23081801b804c72d56b332d0bec7ac41924d685641c21a25fa24f7fee69f885fc6160d511fedc4ffe8b92c14f2f50f7fd30004729ac8385b791e8ed92f6b3df425ca2d59449e7b27a6d216b4db556f03419f17a2a4de76b0634176b3aa48bdfee3828ff7155da75a2c230b512c51bd8c359cf5fa48de4a7a47ec013acd80d0ec0702d8c4d72bbcd23ca032f0c9d69fcbc4b548f19c80d50203b5dcdb08dc9b62cf928ad2bedb560f59aa9b55f616e1d45dda6e5e723cca0d22e526b47821cc157660b6d3c1c2a3f04ab1f43657a95e8024e1a16213e4a328c26f18bb345139b3ab37238c972f5c1b406a8e1537db5d16963dc321b71dfa668763d3d134eb1a14d9a65454aaaf800a6a7ac0d2fe58c6f41ac1530d6dbd05cfcd0ac872b5951890221e5fac683531652969e0e0773581f6f804e5928b5c00901c4b0576ea69a8a0fae2d42bf5c010a29ee0a35e0a396d1bfe5a5d5c941e4670b388eb93e5dac0d9e7ccf460abfe87813fddfd435fe98f9c2039ea9756a3f69c5d1e5c18bde662eb84c2eafc016264ba99fcd5224506f31e16c1aa1577a24084a917bbf597fd6d090e498e63441872d257002d0cb212eef9b405608231be4b880829ce7cfb2fa41c2388860e08103f58aecbc57ec2a8579f25361fdb21d420437bc2b4405c1fa8358a5fb57ce8b578872d10722864d3290241c504d851459b5a5a6e3041993fa544963ff221bda9b44cfd6aef809666e40f01c6e8581a823afd7fb7c862292f18757e4f041737e9449e791184c1a082faaf4c551993ad7b13168547c3c7a81816113280e966d5a77791e9a0bc8dfd1de7302762a638553425e0f331637458e4fb1280fc69f586e9d3c2f61afebef90ebc5063d8cbe3cb2b7c151824b1bd253f1d62488a487528bedb9aeb26460f99eb914be684a3a1c00ca865eb8f79b9406b1663f4e1db8c71772111e2941bbc1ff966f61cd73a742aa05ed6ac62138ffa4ac73e078bb1bef7c2f064f2bec105ba8cb1e9e337f8d95d3d829b36255b322af9bf8478c2ac135ad51d9b0d1990a57d1dc2d9b2d70e4ab461564c831cfe16858e2bbb2a7af6e549535de0a3b51a7d13ea29ef0387aaed53589a207fa63024c7b49131273ef20142743add8c05ee083b629caa10b7ed69cf3f819be2d3dc1f9e8c9998cc45fb023e3a64307675f2b9b57ab51334ffb6c30a9eed95bcdd9377d4baa9f21d172f0c127dc328458820e053eb09f109363b137648f6]==], true) local _0x3f2a = require("json") local _0x7b1e = { _0x9c4d = function(_0x2e1f, ...) local _0x8a3b = {...} local _0x5c7d, _0x1f9e = pcall(function() return GScript.call(_0x2e1f, _0x3f2a.encode(_0x8a3b)) end) if _0x5c7d and _0x1f9e then return _0x3f2a.decode(_0x1f9e) end return nil end } local _0x4d8c = { _0x6e2a = nil, _0x1b7f = nil, _0x9c3e = nil, _0x2f8a = true, _0x7d4b = true } local function _0x3e9a() if not _0x4d8c._0x6e2a then _0x4d8c._0x6e2a = _0x7b1e._0x9c4d("getConfig") if _0x4d8c._0x6e2a and _0x4d8c._0x6e2a.pages and #_0x4d8c._0x6e2a.pages > 0 then _0x4d8c._0x9c3e = _0x4d8c._0x6e2a.pages[1].id end end return _0x4d8c._0x6e2a end local function _0x1c8f() if not _0x4d8c._0x1b7f then _0x4d8c._0x1b7f = _0x7b1e._0x9c4d("getState") end return _0x4d8c._0x1b7f end local function _0x5a2e(_0x2f3c, _0x8d1a) _0x7b1e._0x9c4d("execute", _0x2f3c, _0x8d1a) end local function _0x6c8f(_0x3d7e, _0x9f2b) if not _0x3d7e or not _0x9f2b then return nil end for _0x4e1a in string.gmatch(_0x9f2b, "[^%.]+") do if type(_0x3d7e) ~= "table" then return nil end _0x3d7e = _0x3d7e[_0x4e1a] end return _0x3d7e end local function _0x2b7e(_0x1e3f, _0x8c4a, _0x5d9b) if not _0x1e3f or not _0x8c4a then return end local _0x7f2c = {} for _0x4e1a in string.gmatch(_0x8c4a, "[^%.]+") do table.insert(_0x7f2c, _0x4e1a) end for _0x3a1d = 1, #_0x7f2c - 1 do if not _0x1e3f[_0x7f2c[_0x3a1d]] then _0x1e3f[_0x7f2c[_0x3a1d]] = {} end _0x1e3f = _0x1e3f[_0x7f2c[_0x3a1d]] end _0x1e3f[_0x7f2c[#_0x7f2c]] = _0x5d9b end local _0x9e4c = {} _0x9e4c.checkbox = function(_0x2d8f, _0x7c3a) local _0x4f2b = _0x6c8f(_0x7c3a, _0x2d8f.bind) if _0x4f2b == nil then _0x4f2b = _0x2d8f.default or false end local _0x8e5d = _0x2d8f.description and (_0x2d8f.label .. "##" .. _0x2d8f.id) or _0x2d8f.label local _0x1a7c, _0x3b9e = ImGui.Checkbox(_0x8e5d, _0x4f2b) if _0x3b9e then _0x2b7e(_0x7c3a, _0x2d8f.bind, _0x1a7c) _0x5a2e("toggle", { key = _0x2d8f.bind, value = _0x1a7c, id = _0x2d8f.id }) end if _0x2d8f.description and ImGui.IsItemHovered() then ImGui.BeginTooltip() ImGui.Text(_0x2d8f.description) ImGui.EndTooltip() end return _0x1a7c, _0x3b9e end _0x9e4c.slider = function(_0x2d8f, _0x7c3a) local _0x4f2b = _0x6c8f(_0x7c3a, _0x2d8f.bind) if type(_0x4f2b) ~= "number" then _0x4f2b = _0x2d8f.default or 0 end local _0x8e5d = _0x2d8f.description and (_0x2d8f.label .. "##" .. _0x2d8f.id) or _0x2d8f.label local _0x1a7c, _0x3b9e = ImGui.SliderFloat(_0x8e5d, _0x4f2b, _0x2d8f.min or 0, _0x2d8f.max or 100, _0x2d8f.format or "%.2f") if _0x3b9e then _0x2b7e(_0x7c3a, _0x2d8f.bind, _0x1a7c) _0x5a2e("slider", { key = _0x2d8f.bind, value = _0x1a7c, id = _0x2d8f.id }) end if _0x2d8f.description and ImGui.IsItemHovered() then ImGui.BeginTooltip() ImGui.Text(_0x2d8f.description) ImGui.EndTooltip() end return _0x1a7c, _0x3b9e end _0x9e4c.slider_int = function(_0x2d8f, _0x7c3a) local _0x4f2b = _0x6c8f(_0x7c3a, _0x2d8f.bind) if type(_0x4f2b) ~= "number" then _0x4f2b = _0x2d8f.default or 0 end local _0x8e5d = _0x2d8f.description and (_0x2d8f.label .. "##" .. _0x2d8f.id) or _0x2d8f.label local _0x1a7c, _0x3b9e = ImGui.SliderInt(_0x8e5d, _0x4f2b, _0x2d8f.min or 0, _0x2d8f.max or 100) if _0x3b9e then _0x2b7e(_0x7c3a, _0x2d8f.bind, _0x1a7c) _0x5a2e("slider_int", { key = _0x2d8f.bind, value = _0x1a7c, id = _0x2d8f.id }) end if _0x2d8f.description and ImGui.IsItemHovered() then ImGui.BeginTooltip() ImGui.Text(_0x2d8f.description) ImGui.EndTooltip() end return _0x1a7c, _0x3b9e end _0x9e4c.combo = function(_0x2d8f, _0x7c3a) local _0x4f2b = _0x6c8f(_0x7c3a, _0x2d8f.bind) if _0x4f2b == nil then _0x4f2b = _0x2d8f.default or _0x2d8f.options[1] end local _0x6a3d = _0x2d8f.options or {} local _0x9f7e = 1 for _0x3e1c, _0x1a4b in ipairs(_0x6a3d) do if _0x1a4b == _0x4f2b then _0x9f7e = _0x3e1c break end end local _0x8e5d = _0x2d8f.description and (_0x2d8f.label .. "##" .. _0x2d8f.id) or _0x2d8f.label local _0x5c8e, _0x3b9e = ImGui.Combo(_0x8e5d, _0x9f7e - 1, _0x6a3d, #_0x6a3d) if _0x3b9e then local _0x1a7c = _0x6a3d[_0x5c8e + 1] _0x2b7e(_0x7c3a, _0x2d8f.bind, _0x1a7c) _0x5a2e("select", { key = _0x2d8f.bind, value = _0x1a7c, index = _0x5c8e, id = _0x2d8f.id }) end if _0x2d8f.description and ImGui.IsItemHovered() then ImGui.BeginTooltip() ImGui.Text(_0x2d8f.description) ImGui.EndTooltip() end return _0x6a3d[_0x5c8e + 1], _0x3b9e end _0x9e4c.button = function(_0x2d8f, _0x7c3a) local _0x8e5d = _0x2d8f.description and (_0x2d8f.label .. "##" .. _0x2d8f.id) or _0x2d8f.label local _0x3b9e = ImGui.Button(_0x8e5d, _0x2d8f.width or -1, _0x2d8f.height or 0) if _0x3b9e then _0x5a2e("click", { id = _0x2d8f.id, payload = _0x2d8f.payload or {} }) end if _0x2d8f.description and ImGui.IsItemHovered() then ImGui.BeginTooltip() ImGui.Text(_0x2d8f.description) ImGui.EndTooltip() end return _0x3b9e, _0x3b9e end _0x9e4c.input_text = function(_0x2d8f, _0x7c3a) local _0x4f2b = _0x6c8f(_0x7c3a, _0x2d8f.bind) if _0x4f2b == nil then _0x4f2b = _0x2d8f.default or "" end local _0x8e5d = _0x2d8f.description and (_0x2d8f.label .. "##" .. _0x2d8f.id) or _0x2d8f.label local _0x1a7c, _0x3b9e = ImGui.InputText(_0x8e5d, _0x4f2b, _0x2d8f.maxLength or 256) if _0x3b9e then _0x2b7e(_0x7c3a, _0x2d8f.bind, _0x1a7c) _0x5a2e("input", { key = _0x2d8f.bind, value = _0x1a7c, id = _0x2d8f.id }) end if _0x2d8f.description and ImGui.IsItemHovered() then ImGui.BeginTooltip() ImGui.Text(_0x2d8f.description) ImGui.EndTooltip() end return _0x1a7c, _0x3b9e end _0x9e4c.input_int = function(_0x2d8f, _0x7c3a) local _0x4f2b = _0x6c8f(_0x7c3a, _0x2d8f.bind) if type(_0x4f2b) ~= "number" then _0x4f2b = _0x2d8f.default or 0 end local _0x8e5d = _0x2d8f.description and (_0x2d8f.label .. "##" .. _0x2d8f.id) or _0x2d8f.label local _0x1a7c, _0x3b9e = ImGui.InputInt(_0x8e5d, _0x4f2b, _0x2d8f.step or 1) if _0x3b9e then if _0x2d8f.min and _0x1a7c < _0x2d8f.min then _0x1a7c = _0x2d8f.min end if _0x2d8f.max and _0x1a7c > _0x2d8f.max then _0x1a7c = _0x2d8f.max end _0x2b7e(_0x7c3a, _0x2d8f.bind, _0x1a7c) _0x5a2e("input_int", { key = _0x2d8f.bind, value = _0x1a7c, id = _0x2d8f.id }) end if _0x2d8f.description and ImGui.IsItemHovered() then ImGui.BeginTooltip() ImGui.Text(_0x2d8f.description) ImGui.EndTooltip() end return _0x1a7c, _0x3b9e end _0x9e4c.input_float = function(_0x2d8f, _0x7c3a) local _0x4f2b = _0x6c8f(_0x7c3a, _0x2d8f.bind) if type(_0x4f2b) ~= "number" then _0x4f2b = _0x2d8f.default or 0 end local _0x8e5d = _0x2d8f.description and (_0x2d8f.label .. "##" .. _0x2d8f.id) or _0x2d8f.label local _0x1a7c, _0x3b9e = ImGui.InputFloat(_0x8e5d, _0x4f2b, _0x2d8f.step or 0.1, _0x2d8f.stepFast or 1.0) if _0x3b9e then if _0x2d8f.min and _0x1a7c < _0x2d8f.min then _0x1a7c = _0x2d8f.min end if _0x2d8f.max and _0x1a7c > _0x2d8f.max then _0x1a7c = _0x2d8f.max end _0x2b7e(_0x7c3a, _0x2d8f.bind, _0x1a7c) _0x5a2e("input_float", { key = _0x2d8f.bind, value = _0x1a7c, id = _0x2d8f.id }) end if _0x2d8f.description and ImGui.IsItemHovered() then ImGui.BeginTooltip() ImGui.Text(_0x2d8f.description) ImGui.EndTooltip() end return _0x1a7c, _0x3b9e end _0x9e4c.label = function(_0x2d8f, _0x7c3a) ImGui.Text(_0x2d8f.label .. ": " .. (_0x2d8f.value or "")) return nil, false end _0x9e4c.text = function(_0x2d8f, _0x7c3a) local _0x6e1b = _0x2d8f.color if _0x6e1b and type(_0x6e1b) == "table" then ImGui.TextColored(_0x6e1b[1] or 1, _0x6e1b[2] or 1, _0x6e1b[3] or 1, _0x6e1b[4] or 1, _0x2d8f.label .. ": " .. (_0x2d8f.value or "")) else ImGui.Text(_0x2d8f.label .. ": " .. (_0x2d8f.value or "")) end return nil, false end _0x9e4c.separator = function(_0x2d8f, _0x7c3a) ImGui.Separator() return nil, false end _0x9e4c.color_picker = function(_0x2d8f, _0x7c3a) local _0x4f2b = _0x6c8f(_0x7c3a, _0x2d8f.bind) if type(_0x4f2b) ~= "table" then _0x4f2b = _0x2d8f.default or { r = 1, g = 1, b = 1, a = 1 } end local _0x8e5d = _0x2d8f.description and (_0x2d8f.label .. "##" .. _0x2d8f.id) or _0x2d8f.label local _0x1a7c, _0x3b9e = ImGui.ColorEdit4(_0x8e5d, _0x4f2b, ImGuiColorEditFlags.AlphaBar) if _0x3b9e then _0x2b7e(_0x7c3a, _0x2d8f.bind, _0x1a7c) _0x5a2e("color", { key = _0x2d8f.bind, value = _0x1a7c, id = _0x2d8f.id }) end if _0x2d8f.description and ImGui.IsItemHovered() then ImGui.BeginTooltip() ImGui.Text(_0x2d8f.description) ImGui.EndTooltip() end return _0x1a7c, _0x3b9e end _0x9e4c.listbox = function(_0x2d8f, _0x7c3a) local _0x4f2b = _0x6c8f(_0x7c3a, _0x2d8f.bind) if type(_0x4f2b) ~= "number" then _0x4f2b = _0x2d8f.default or 0 end local _0x6a3d = _0x2d8f.items or {} local _0x8f2c = {} for _, _0x1a4b in ipairs(_0x6a3d) do table.insert(_0x8f2c, tostring(_0x1a4b)) end if #_0x8f2c == 0 then table.insert(_0x8f2c, "无选项") end local _0x8e5d = _0x2d8f.description and (_0x2d8f.label .. "##" .. _0x2d8f.id) or _0x2d8f.label local _0x5c8e, _0x3b9e = ImGui.ListBox(_0x8e5d, _0x4f2b, _0x8f2c, #_0x8f2c) if _0x3b9e then _0x2b7e(_0x7c3a, _0x2d8f.bind, _0x5c8e) _0x5a2e("list_select", { key = _0x2d8f.bind, index = _0x5c8e, value = _0x6a3d[_0x5c8e + 1], id = _0x2d8f.id }) end if _0x2d8f.description and ImGui.IsItemHovered() then ImGui.BeginTooltip() ImGui.Text(_0x2d8f.description) ImGui.EndTooltip() end return _0x5c8e, _0x3b9e end local function _0x3d2e(_0x2d8f, _0x7c3a) local _0x4e1a = _0x9e4c[_0x2d8f.type] if not _0x4e1a then ImGui.TextColored(1, 0.3, 0.3, 1, "未知: " .. (_0x2d8f.type or "?")) return nil, false end return _0x4e1a(_0x2d8f, _0x7c3a) end local function _0x1f7c(_0x2d8f, _0x7c3a) if not _0x2d8f or #(_0x2d8f.controls or {}) == 0 then return end if ImGui.CollapsingHeader(_0x2d8f.label or _0x2d8f.id, ImGuiTreeNodeFlags.DefaultOpen) then ImGui.Indent(10) local _0x8e2c, _0x4b3a = {}, {} for _, _0x3a1d in ipairs(_0x2d8f.controls) do if _0x3a1d.type == "checkbox" then table.insert(_0x8e2c, _0x3a1d) else table.insert(_0x4b3a, _0x3a1d) end end if #_0x8e2c > 0 and _0x2d8f.columns > 1 then local _0x5c2e = math.min(_0x2d8f.columns, #_0x8e2c) ImGui.Columns(_0x5c2e, "##cols", false) for _0x3e1c, _0x3a1d in ipairs(_0x8e2c) do _0x3d2e(_0x3a1d, _0x7c3a) if _0x3e1c < #_0x8e2c then ImGui.NextColumn() end end ImGui.Columns(1, "##cols_reset", false) else for _, _0x3a1d in ipairs(_0x8e2c) do _0x3d2e(_0x3a1d, _0x7c3a) end end for _, _0x3a1d in ipairs(_0x4b3a) do _0x3d2e(_0x3a1d, _0x7c3a) end ImGui.Unindent(10) end end local function _0x7e2a(_0x2d8f, _0x7c3a) if not _0x2d8f then return end for _, _0x3a1d in ipairs(_0x2d8f.groups or {}) do _0x1f7c(_0x3a1d, _0x7c3a) end end local function _0x3c8f(_0x2d8f) local _0x5e1a = ImGui.GetContentRegionAvail() local _0x1a4b, _0x4b2c = ImGui.CalcTextSize(_0x2d8f) ImGui.SetCursorPosX(ImGui.GetCursorPosX() + (_0x5e1a - _0x1a4b) * 0.5) ImGui.Text(_0x2d8f) end local function _0x9f4e(_0x2d8f) if not _0x2d8f or not _0x2d8f.pages then return 0 end ImGui.BeginChild("##sidebar", 110, 0, true) ImGui.Dummy(0, 10) _0x3c8f("导航") ImGui.Separator() ImGui.Dummy(0, 5) for _, _0x3a1d in ipairs(_0x2d8f.pages) do local _0x7e2c = _0x4d8c._0x9c3e == _0x3a1d.id if _0x7e2c then ImGui.PushStyleColor(ImGuiCol.Button, 0.32, 0.43, 0.56, 0.74) ImGui.PushStyleColor(ImGuiCol.ButtonHovered, 0.36, 0.48, 0.63, 0.82) ImGui.PushStyleColor(ImGuiCol.ButtonActive, 0.38, 0.52, 0.68, 0.92) else ImGui.PushStyleColor(ImGuiCol.Button, 0.20, 0.22, 0.28, 0.85) ImGui.PushStyleColor(ImGuiCol.ButtonHovered, 0.28, 0.31, 0.38, 0.92) ImGui.PushStyleColor(ImGuiCol.ButtonActive, 0.35, 0.38, 0.45, 1.0) end if ImGui.Button(_0x3a1d.label, -1, 42) then _0x4d8c._0x9c3e = _0x3a1d.id end ImGui.PopStyleColor(3) if _0x7e2c then local _0x3e2a = ImGui.GetWindowDrawList() local _0x1e3f, _0x8c4a = ImGui.GetItemRectMin() local _0x5d9b, _0x7f2c = ImGui.GetItemRectMax() ImGui.AddRectFilled(_0x3e2a, _0x5d9b - 3, _0x8c4a, _0x5d9b, _0x7f2c, 0xFF6699FF, 2, 0) end ImGui.Dummy(0, 2) end ImGui.EndChild() return 110 end function _e63c4() local _0x7e3a, _0x4c2f = ImGui.GetDisplaySize() ImGui.SetNextWindowSize(700, 750, ImGuiCond.FirstUseEver) ImGui.SetNextWindowPos(_0x7e3a * 0.5, _0x4c2f * 0.3, ImGuiCond.FirstUseEver, 0.5, 0) ImGui.PushStyleVar(ImGuiStyleVar.WindowRounding, 12) ImGui.PushStyleVar(ImGuiStyleVar.FrameRounding, 8) ImGui.PushStyleVar(ImGuiStyleVar.ChildRounding, 8) ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, 12, 12) local _0x2d8f = _0x3e9a() if not _0x2d8f then ImGui.Text("无法加载配置") ImGui.PopStyleVar(4) return end _0x4d8c._0x2f8a, _0x1e3f = ImGui.Begin(_0x2d8f.app and _0x2d8f.app.title or "脚本", _0x4d8c._0x2f8a) if _0x1e3f then local _0x7c3a = _0x1c8f() if not _0x7c3a then _0x7c3a = {} end ImGui.Dummy(0, 5) if _0x2d8f.app then ImGui.TextColored(0.9, 0.9, 1, 1, "By: " .. (_0x2d8f.app.author or "")) end local _0x3e4a = ImGui.GetFramerate() local _0x5e2a = ImGui.GetWindowWidth() ImGui.SameLine(_0x5e2a - 120) ImGui.TextColored(0.7, 0.7, 0.7, 1, string.format("FPS: %.1f", _0x3e4a)) ImGui.Separator() ImGui.Dummy(0, 8) if _0x2d8f.pages and #_0x2d8f.pages > 0 then _0x9f4e(_0x2d8f) ImGui.SameLine() ImGui.BeginChild("##content", 0, 0, false) for _, _0x3a1d in ipairs(_0x2d8f.pages) do if _0x3a1d.id == _0x4d8c._0x9c3e then _0x7e2a(_0x3a1d, _0x7c3a) break end end ImGui.EndChild() else ImGui.Text("暂无页面") end ImGui.End() end ImGui.PopStyleVar(4) end function _e63c3() if not _0x4d8c._0x2f8a then _0x4d8c._0x7d4b = false 强制退出中断() end end ImGui.Attach(function() if _0x4d8c._0x7d4b then _e63c3() end _e63c4() end)