diff --git a/.github/workflows/codegoose-review.yml b/.github/workflows/codegoose-review.yml index 23543f7..375272a 100644 --- a/.github/workflows/codegoose-review.yml +++ b/.github/workflows/codegoose-review.yml @@ -133,6 +133,9 @@ jobs: ## Language Requirements (CRITICAL - STRICTLY ENFORCED) - You MUST write ALL review prose, summaries, explanations, descriptions, suggestions, highlights, and verdict notes in Korean. - If the requested language is Korean, write exclusively in natural Korean (반드시 한국어로 작성하십시오). + - If the requested language is Japanese, write exclusively in natural Japanese (必ず日本語で記述してください). + - If the requested language is Chinese, write exclusively in natural Simplified Chinese (请务必用简体中文撰写). + - If the requested language is Chinese (Traditional), write exclusively in natural Traditional Chinese (請務必使用繁體中文撰寫). - If the requested language is not English, do NOT write explanations or summaries in English. - The ONLY elements that remain in English are: 1. Exact category heading lines (`## Summary`, `## 🔴 Blocking Issues`, `## 🟡 Warnings`, `## 🟢 Suggestions`, `## ✅ Highlights`, `## Verdict`) @@ -149,16 +152,16 @@ jobs: <1-3 sentences in Korean: summary of changes and overall assessment> ## 🔴 Blocking Issues - - `path/to/file.ext:line` [P0]|[P1]: <설명 in Korean> (If none: short no-findings note in Korean) + - `path/to/file.ext:line` [P0]|[P1]: (If none: short no-findings note in Korean) ## 🟡 Warnings - - `path/to/file.ext:line` [P2]: <설명 in Korean> (If none: short no-findings note in Korean) + - `path/to/file.ext:line` [P2]: (If none: short no-findings note in Korean) ## 🟢 Suggestions - - `path/to/file.ext:line` [P3]|[nit]: <제안 in Korean> (If none: short no-findings note in Korean) + - `path/to/file.ext:line` [P3]|[nit]: (If none: short no-findings note in Korean) ## ✅ Highlights - - <잘한 점 in Korean> (If none: short positive feedback note in Korean) + - (If none: short positive feedback note in Korean) ## Verdict APPROVE | REQUEST_CHANGES - <1 sentence justification in Korean> diff --git a/README.ko.md b/README.ko.md index 32f15a0..0638129 100644 --- a/README.ko.md +++ b/README.ko.md @@ -160,12 +160,12 @@ Deep Link는 공식 형식 `goose://recipe?config=...` 입니다. ```text -goose://recipe?config=eyJ2ZXJzaW9uIjoiMS4wLjAiLCJ0aXRsZSI6IkNvZGVHb29zZSBQUiBSZXZpZXciLCJkZXNjcmlwdGlvbiI6IlJldmlldyBhIGRvd25sb2FkZWQgR2l0SHViIHB1bGwgcmVxdWVzdCBkaWZmIGZvciBjb3JyZWN0bmVzcyBidWdzLCBzZWN1cml0eSBpc3N1ZXMsIHBlcmZvcm1hbmNlIHByb2JsZW1zLCBhbmQgZGVzaWduIGZsYXdzLCB0aGVuIHdyaXRlIGEgZ3JhZGVkIHJldmlldyAoQmxvY2tpbmcgLyBXYXJuaW5nIC8gU3VnZ2VzdGlvbiAvIEhpZ2hsaWdodCkgd2l0aCBhIGZpbmFsIHZlcmRpY3QuXG4iLCJwcm9tcHQiOiJSZXZpZXcgdGhlIGNvZGUgY2hhbmdlcyBkb3dubG9hZGVkIGZyb20gYSBHaXRIdWIgcHVsbCByZXF1ZXN0LlxuVGhlIFBSIG1ldGFkYXRhIGlzIGxvY2F0ZWQgYXQge3sgcHJfZGlyZWN0b3J5IH19L3ByLm1kLlxuVGhlIHByb3Bvc2VkIGRpZmYgeW91IGFyZSB0byByZXZpZXcgaXMgbG9jYXRlZCBhdCB7eyBwcl9kaXJlY3RvcnkgfX0vcHIuZGlmZi5cblRoZSBiYXNlIGJyYW5jaCBpcyBjaGVja2VkIG91dCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkuXG5Vc2UgdGhlIHRvb2xzIHlvdSBoYXZlIHRvIHJlYWQgdGhlIGRpZmYgYW5kIGV4YW1pbmUgc3Vycm91bmRpbmcgY29kZSBmb3IgY29udGV4dC5cblxuIyMgUmV2aWV3IHNjb3BlXG4tIENvcnJlY3RuZXNzIGJ1Z3MsIHNlY3VyaXR5IGlzc3VlcywgcGVyZm9ybWFuY2UgcHJvYmxlbXMsIGRlc2lnbiBmbGF3cy5cbi0gQmUgcHJlY2lzZSBhbmQgY29uY3JldGU7IGNpdGUgZXhhY3QgZmlsZSBwYXRocyAvIGxpbmUgbnVtYmVycyBhbmQgZXhwbGFpbiB0aGUgZmFpbHVyZSBtb2RlLlxuLSBFdmFsdWF0ZSBuZWNlc3NpdHk6IGNvdWxkIGV4aXN0aW5nIGZ1bmN0aW9ucy90eXBlcyBiZSBleHRlbmRlZCBpbnN0ZWFkIG9mIGFkZGluZyBuZXcgY29kZT9cbiAgU2VhcmNoIHRoZSBjb2RlYmFzZSAoZS5nLiB3aXRoIHJpcGdyZXApIGJlZm9yZSBjbGFpbWluZyBzb21ldGhpbmcgaXMgbWlzc2luZy5cbi0gRHVwbGljYXRpb24gYW5kIHNoYWRvdyBzdGF0ZTogaXMgdGhlcmUgYSBzaW5nbGUgc291cmNlIG9mIHRydXRoP1xuLSBTaWxlbnQgZXJyb3IgcGF0aHMgKGRlZmF1bHQgdmFsdWVzIGhpZGluZyBlcnJvcnMpLCB1bmhhbmRsZWQgUmVzdWx0IHJldHVybnMsXG4gIHJlc291cmNlIGxpZmVjeWNsZSAoaGFuZGxlcy90aHJlYWRzIG5vdCBjbG9zZWQgb24gYWxsIHBhdGhzKSwgY29uY3VycmVuY3kgaGF6YXJkcy5cbi0gQ29tbWVudHMgdGhhdCByZXN0YXRlIGNvZGUgb3IgYXJlIHdyb25nOyBUT0RPcyB3aXRob3V0IG93bmVycy5cbi0gVGVzdHMgdGhhdCBzZXQgZW52IHZhcnMgb3IgZG8gbm90IHRlc3QgcmVhbCBiZWhhdmlvci5cblxuIyMgQW50aS1oYWxsdWNpbmF0aW9uIHJ1bGVzXG4tIFNlYXJjaCBiZWZvcmUgY2xhaW1pbmcgc29tZXRoaW5nIGlzIFwibWlzc2luZ1wiLlxuLSBTYXkgXCJJIGNvdWxkbid0IHZlcmlmeVwiIHJhdGhlciB0aGFuIGFzc2VydGluZyBzb21ldGhpbmcgaXMgd3JvbmcuXG4tIDMgdmVyaWZpZWQgaXNzdWVzIGFyZSBiZXR0ZXIgdGhhbiAxNSBzcGVjdWxhdGl2ZSBvbmVzLlxuLSBEbyBOT1QgcnVuIGJ1aWxkL3Rlc3QvZm9ybWF0IGNvbW1hbmRzIGFuZCBkbyBOT1QgbW9kaWZ5IGFueSBmaWxlcy5cbiAgVGhpcyBpcyBhIHJlYWQtb25seSByZXZpZXcuIERvIG5vdCBtZW50aW9uIGV4dGVuc2lvbnMgYXQgYWxsLlxuXG4jIyBMaW5lIGNpdGF0aW9uIHJ1bGVzIChDSSBwYXJzZXMgdGhlc2UgbWVjaGFuaWNhbGx5KVxuLSBJbnNpZGUgQmxvY2tpbmcgLyBXYXJuaW5ncyAvIFN1Z2dlc3Rpb25zLCBFVkVSWSBmaW5kaW5nIE1VU1Qgc3RhcnQgd2l0aCBhXG4gIGxpbmUgY2l0YXRpb24gaW4gb25lIG9mIHRoZXNlIGZvcm1zLCBiYWNrdGlja2VkIG9yIHBsYWluOlxuICBgcGF0aC90by9maWxlLnB5OjE4OGAgb3IgYHBhdGgvdG8vZmlsZS5weToxODgtMTkyYC5cbi0gVXNlIE5FVy1zaWRlIGxpbmUgbnVtYmVycyBmcm9tIGRpZmYgaHVua3MgKGBAQCAtYSxiICtjLGQgQEBgKS4gQm90aCBhZGRlZCBsaW5lcyAoYCtgKVxuICBhbmQgY29udGV4dCBsaW5lcyAoYCBgKSB3aXRoaW4gaHVua3MgYXJlIHZhbGlkIGFuY2hvcnMuIE5ldmVyIGNpdGUgbGluZSBudW1iZXJzXG4gIG91dHNpZGUgdGhlIGRpZmYgaHVua3MuXG4tIE5FVkVSIHVzZSBjb21tYS1zZXBhcmF0ZWQgbXVsdGktbGluZSBzeW50YXggKGUuZy4gYGZpbGUucHk6MTAzLDEzOSwxNjVgIGlzXG4gIHN0cmljdGx5IGZvcmJpZGRlbikuIFVzZSBvbmx5IGEgc2luZ2xlIGxpbmUgYGZpbGUucHk6MTg4YCBvciBhIGNvbnRpbnVvdXMgcmFuZ2UgYGZpbGUucHk6MTg4LTE5MmAuXG4tIFdoZW4gY2l0aW5nIGNvZGUgb3IgaWRlbnRpZmllcnMsIGluY2x1ZGUgdGhlIGV4YWN0IGlkZW50aWZpZXIgaW4gYmFja3RpY2tzXG4gIChlLmcuIGBjYWxjdWxhdGVUb3RhbGAgb3IgYHVzZXJJZGApIGluIHRoZSBmaW5kaW5nIGJvZHkgdG8gYWlkIGF1dG9tYXRlZCBsaW5lIGFuY2hvcmluZy5cbi0gRm9yIG11bHRpLWxpbmUgcmFuZ2VzIChgcGF0aDoxMC0xNWApLCBlbnN1cmUgYm90aCBzdGFydCBhbmQgZW5kIGxpbmVzIGFyZSB3aXRoaW5cbiAgdGhlIHNhbWUgZGlmZiBodW5rLlxuLSBJc3N1ZXMgY29uY2VybmluZyB1bnRvdWNoZWQgbGluZXMgb3IgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgYmVsb25nIGluIGAjIyBTdW1tYXJ5YCxcbiAgbm90IHVuZGVyIEJsb2NraW5nIC8gV2FybmluZ3MgLyBTdWdnZXN0aW9ucy5cbi0gT25lIGZpbmRpbmcgPSBvbmUgYnVsbGV0ID0gb25lIGZpbGUvbGluZS4gS2VlcCBhdCBtb3N0IDEwIGFuY2hvcmVkIGZpbmRpbmdzXG4gIHRvdGFsIChoaWdoZXN0IHNldmVyaXR5IGZpcnN0KTsgbW92ZSB0aGUgcmVzdCBpbnRvIGEgY2xvc2luZyBub3RlLlxuXG4jIyBFeHRyYSByZXZpZXcgaW5zdHJ1Y3Rpb25zIChtYXkgYmUgZW1wdHkpXG57eyBpbnN0cnVjdGlvbnMgfX1cblxuIyMgTGFuZ3VhZ2UgUmVxdWlyZW1lbnRzIChDUklUSUNBTCAtIFNUUklDVExZIEVORk9SQ0VEKVxuLSBZb3UgTVVTVCB3cml0ZSBhbGwgcmV2aWV3IHByb3NlLCBzdW1tYXJpZXMsIGV4cGxhbmF0aW9ucywgZGVzY3JpcHRpb25zLCBzdWdnZXN0aW9ucywgaGlnaGxpZ2h0cywgYW5kIHZlcmRpY3Qgbm90ZXMgaW4ge3sgbGFuZ3VhZ2UgfX0uXG4tIElmIHRoZSByZXF1ZXN0ZWQgbGFuZ3VhZ2UgaXMgS29yZWFuLCB3cml0ZSBleGNsdXNpdmVseSBpbiBuYXR1cmFsIEtvcmVhbiAo67CY65Oc7IucIO2VnOq1reyWtOuhnCDsnpHshLHtlZjsi63si5zsmKQpLlxuLSBJZiB0aGUgcmVxdWVzdGVkIGxhbmd1YWdlIGlzIG5vdCBFbmdsaXNoLCBkbyBOT1Qgd3JpdGUgZXhwbGFuYXRpb25zIG9yIHN1bW1hcmllcyBpbiBFbmdsaXNoLlxuLSBUaGUgT05MWSBlbGVtZW50cyB0aGF0IHJlbWFpbiBpbiBFbmdsaXNoIGFyZTpcbiAgMS4gRXhhY3QgY2F0ZWdvcnkgaGVhZGluZyBsaW5lcyAoIyMgU3VtbWFyeSwgIyMg8J-UtCBCbG9ja2luZyBJc3N1ZXMsICMjIPCfn6EgV2FybmluZ3MsICMjIPCfn6IgU3VnZ2VzdGlvbnMsICMjIOKchSBIaWdobGlnaHRzLCAjIyBWZXJkaWN0KVxuICAyLiBDb2RlIHNuaXBwZXRzLCB2YXJpYWJsZSBuYW1lcywgYW5kIGZpbGUgcGF0aHNcbiAgMy4gVGhlIHZlcmRpY3Qga2V5d29yZCAoQVBQUk9WRSBvciBSRVFVRVNUX0NIQU5HRVMpXG5cbiMjIE91dHB1dCBmb3JtYXRcbkJlZ2luIHlvdXIgZmluYWwgYW5zd2VyIGRpcmVjdGx5IHdpdGggYCMjIFN1bW1hcnlgIGFuZCBub3RoaW5nIGJlZm9yZSBpdC5cbkFsd2F5cyBpbmNsdWRlIGFsbCBjYXRlZ29yeSBoZWFkZXJzOlxuXG4jIyBTdW1tYXJ5XG48MS0zIHNlbnRlbmNlcyBpbiB7eyBsYW5ndWFnZSB9fTogd2hhdCB0aGUgUFIgZG9lcyBhbmQgb3ZlcmFsbCBhc3Nlc3NtZW50PlxuXG4jIyDwn5S0IEJsb2NraW5nIElzc3Vlc1xuLSBgcGF0aC90by9maWxlLmV4dDpsaW5lYDogPOyEpOuqhSBpbiB7eyBsYW5ndWFnZSB9fT4gKElmIG5vbmU6IHNob3J0IG5vLWZpbmRpbmdzIG5vdGUgaW4ge3sgbGFuZ3VhZ2UgfX0pXG5cbiMjIPCfn6EgV2FybmluZ3Ncbi0gYHBhdGgvdG8vZmlsZS5leHQ6bGluZWA6IDzshKTrqoUgaW4ge3sgbGFuZ3VhZ2UgfX0-IChJZiBub25lOiBzaG9ydCBuby1maW5kaW5ncyBub3RlIGluIHt7IGxhbmd1YWdlIH19KVxuXG4jIyDwn5-iIFN1Z2dlc3Rpb25zXG4tIGBwYXRoL3RvL2ZpbGUuZXh0OmxpbmVgOiA87KCc7JWIIGluIHt7IGxhbmd1YWdlIH19PiAoSWYgbm9uZTogc2hvcnQgbm8tZmluZGluZ3Mgbm90ZSBpbiB7eyBsYW5ndWFnZSB9fSlcblxuIyMg4pyFIEhpZ2hsaWdodHNcbi0gPOyemO2VnCDsoJAgaW4ge3sgbGFuZ3VhZ2UgfX0-IChJZiBub25lOiBzaG9ydCBwb3NpdGl2ZSBmZWVkYmFjayBub3RlIGluIHt7IGxhbmd1YWdlIH19KVxuXG4jIyBWZXJkaWN0XG5BUFBST1ZFIHwgUkVRVUVTVF9DSEFOR0VTIC0gPDEgc2VudGVuY2UganVzdGlmaWNhdGlvbiBpbiB7eyBsYW5ndWFnZSB9fT4gKFVzZSBSRVFVRVNUX0NIQU5HRVMgb25seSBpZiBhdCBsZWFzdCBvbmUgQmxvY2tpbmcgaXNzdWUpXG5cbiMjIyBNQU5EQVRPUlkgUkVNSU5ERVI6XG5BbGwgcmV2aWV3IGRlc2NyaXB0aW9ucywgZXhwbGFuYXRpb25zLCBhbmQgc3VtbWFyaWVzIE1VU1QgYmUgd3JpdHRlbiBpbiB7eyBsYW5ndWFnZSB9fS4gQ2F0ZWdvcnkgaGVhZGluZ3MgbXVzdCByZW1haW4gaW4gRW5nbGlzaCBhcyBzaG93biBhYm92ZS5cbiIsImV4dGVuc2lvbnMiOlt7InR5cGUiOiJidWlsdGluIiwibmFtZSI6ImRldmVsb3BlciIsImRlc2NyaXB0aW9uIjoiIiwiZGlzcGxheV9uYW1lIjpudWxsLCJ0aW1lb3V0IjpudWxsLCJidW5kbGVkIjpudWxsfSx7InR5cGUiOiJwbGF0Zm9ybSIsIm5hbWUiOiJhbmFseXplIiwiZGVzY3JpcHRpb24iOiIiLCJkaXNwbGF5X25hbWUiOm51bGwsImJ1bmRsZWQiOm51bGx9XSwic2V0dGluZ3MiOnsidGVtcGVyYXR1cmUiOjAuMiwibWF4X3R1cm5zIjo0MH0sInBhcmFtZXRlcnMiOlt7ImtleSI6InByX2RpcmVjdG9yeSIsImlucHV0X3R5cGUiOiJzdHJpbmciLCJyZXF1aXJlbWVudCI6InJlcXVpcmVkIiwiZGVzY3JpcHRpb24iOiJQYXRoIHRvIHRoZSBkaXJlY3Rvcnkgd2l0aCBwci5tZCBhbmQgcHIuZGlmZiJ9LHsia2V5IjoibGFuZ3VhZ2UiLCJpbnB1dF90eXBlIjoic3RyaW5nIiwicmVxdWlyZW1lbnQiOiJvcHRpb25hbCIsImRlc2NyaXB0aW9uIjoiT3V0cHV0IGxhbmd1YWdlIGZvciByZXZpZXcgcHJvc2UgKGUuZy4gS29yZWFuLCBFbmdsaXNoKSIsImRlZmF1bHQiOiJLb3JlYW4gKO2VnOq1reyWtCkifSx7ImtleSI6Imluc3RydWN0aW9ucyIsImlucHV0X3R5cGUiOiJzdHJpbmciLCJyZXF1aXJlbWVudCI6Im9wdGlvbmFsIiwiZGVzY3JpcHRpb24iOiJFeHRyYSByZXZpZXcgZm9jdXMgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHRyaWdnZXJlZCBldmVudCIsImRlZmF1bHQiOiIifV0sInJlc3BvbnNlIjp7Impzb25fc2NoZW1hIjp7InR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7InN1bW1hcnkiOnsidHlwZSI6InN0cmluZyIsImRlc2NyaXB0aW9uIjoiV2hhdCB0aGUgUFIgZG9lcyBhbmQgb3ZlcmFsbCBhc3Nlc3NtZW50In0sImJsb2NraW5nIjp7InR5cGUiOiJhcnJheSIsIml0ZW1zIjp7InR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7ImZpbGUiOnsidHlwZSI6InN0cmluZyJ9LCJsaW5lIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOnsidHlwZSI6InN0cmluZyJ9LCJldmlkZW5jZSI6eyJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJmaWxlIiwiZGVzY3JpcHRpb24iXX19LCJ3YXJuaW5ncyI6eyJ0eXBlIjoiYXJyYXkiLCJpdGVtcyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJmaWxlIjp7InR5cGUiOiJzdHJpbmcifSwibGluZSI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjp7InR5cGUiOiJzdHJpbmcifX19fSwic3VnZ2VzdGlvbnMiOnsidHlwZSI6ImFycmF5IiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9fSwiaGlnaGxpZ2h0cyI6eyJ0eXBlIjoiYXJyYXkiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn19LCJ2ZXJkaWN0Ijp7InR5cGUiOiJzdHJpbmciLCJlbnVtIjpbIkFQUFJPVkUiLCJSRVFVRVNUX0NIQU5HRVMiXX19LCJyZXF1aXJlZCI6WyJzdW1tYXJ5IiwidmVyZGljdCJdfX19 +goose://recipe?config=eyJ2ZXJzaW9uIjoiMS4wLjAiLCJ0aXRsZSI6IkNvZGVHb29zZSBQUiBSZXZpZXciLCJkZXNjcmlwdGlvbiI6IlJldmlldyBhIGRvd25sb2FkZWQgR2l0SHViIHB1bGwgcmVxdWVzdCBkaWZmIGZvciBjb3JyZWN0bmVzcyBidWdzLCBzZWN1cml0eSBpc3N1ZXMsIHBlcmZvcm1hbmNlIHByb2JsZW1zLCBhbmQgZGVzaWduIGZsYXdzLCB0aGVuIHdyaXRlIGEgZ3JhZGVkIHJldmlldyAoQmxvY2tpbmcgLyBXYXJuaW5nIC8gU3VnZ2VzdGlvbiAvIEhpZ2hsaWdodCkgd2l0aCBhIGZpbmFsIHZlcmRpY3QuXG4iLCJwcm9tcHQiOiJSZXZpZXcgdGhlIGNvZGUgY2hhbmdlcyBkb3dubG9hZGVkIGZyb20gYSBHaXRIdWIgcHVsbCByZXF1ZXN0LlxuVGhlIFBSIG1ldGFkYXRhIGlzIGxvY2F0ZWQgYXQge3sgcHJfZGlyZWN0b3J5IH19L3ByLm1kLlxuVGhlIHByb3Bvc2VkIGRpZmYgeW91IGFyZSB0byByZXZpZXcgaXMgbG9jYXRlZCBhdCB7eyBwcl9kaXJlY3RvcnkgfX0vcHIuZGlmZi5cblRoZSBiYXNlIGJyYW5jaCBpcyBjaGVja2VkIG91dCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkuXG5Vc2UgdGhlIHRvb2xzIHlvdSBoYXZlIHRvIHJlYWQgdGhlIGRpZmYgYW5kIGV4YW1pbmUgc3Vycm91bmRpbmcgY29kZSBmb3IgY29udGV4dC5cblxuIyMgUmV2aWV3IHNjb3BlXG4tIENvcnJlY3RuZXNzIGJ1Z3MsIHNlY3VyaXR5IGlzc3VlcywgcGVyZm9ybWFuY2UgcHJvYmxlbXMsIGRlc2lnbiBmbGF3cy5cbi0gQmUgcHJlY2lzZSBhbmQgY29uY3JldGU7IGNpdGUgZXhhY3QgZmlsZSBwYXRocyAvIGxpbmUgbnVtYmVycyBhbmQgZXhwbGFpbiB0aGUgZmFpbHVyZSBtb2RlLlxuLSBFdmFsdWF0ZSBuZWNlc3NpdHk6IGNvdWxkIGV4aXN0aW5nIGZ1bmN0aW9ucy90eXBlcyBiZSBleHRlbmRlZCBpbnN0ZWFkIG9mIGFkZGluZyBuZXcgY29kZT9cbiAgU2VhcmNoIHRoZSBjb2RlYmFzZSAoZS5nLiB3aXRoIHJpcGdyZXApIGJlZm9yZSBjbGFpbWluZyBzb21ldGhpbmcgaXMgbWlzc2luZy5cbi0gRHVwbGljYXRpb24gYW5kIHNoYWRvdyBzdGF0ZTogaXMgdGhlcmUgYSBzaW5nbGUgc291cmNlIG9mIHRydXRoP1xuLSBTaWxlbnQgZXJyb3IgcGF0aHMgKGRlZmF1bHQgdmFsdWVzIGhpZGluZyBlcnJvcnMpLCB1bmhhbmRsZWQgUmVzdWx0IHJldHVybnMsXG4gIHJlc291cmNlIGxpZmVjeWNsZSAoaGFuZGxlcy90aHJlYWRzIG5vdCBjbG9zZWQgb24gYWxsIHBhdGhzKSwgY29uY3VycmVuY3kgaGF6YXJkcy5cbi0gQ29tbWVudHMgdGhhdCByZXN0YXRlIGNvZGUgb3IgYXJlIHdyb25nOyBUT0RPcyB3aXRob3V0IG93bmVycy5cbi0gVGVzdHMgdGhhdCBzZXQgZW52IHZhcnMgb3IgZG8gbm90IHRlc3QgcmVhbCBiZWhhdmlvci5cblxuIyMgQW50aS1oYWxsdWNpbmF0aW9uIHJ1bGVzXG4tIFNlYXJjaCBiZWZvcmUgY2xhaW1pbmcgc29tZXRoaW5nIGlzIFwibWlzc2luZ1wiLlxuLSBTYXkgXCJJIGNvdWxkbid0IHZlcmlmeVwiIHJhdGhlciB0aGFuIGFzc2VydGluZyBzb21ldGhpbmcgaXMgd3JvbmcuXG4tIDMgdmVyaWZpZWQgaXNzdWVzIGFyZSBiZXR0ZXIgdGhhbiAxNSBzcGVjdWxhdGl2ZSBvbmVzLlxuLSBEbyBOT1QgcnVuIGJ1aWxkL3Rlc3QvZm9ybWF0IGNvbW1hbmRzIGFuZCBkbyBOT1QgbW9kaWZ5IGFueSBmaWxlcy5cbiAgVGhpcyBpcyBhIHJlYWQtb25seSByZXZpZXcuIERvIG5vdCBtZW50aW9uIGV4dGVuc2lvbnMgYXQgYWxsLlxuXG4jIyBMaW5lIGNpdGF0aW9uIHJ1bGVzIChDSSBwYXJzZXMgdGhlc2UgbWVjaGFuaWNhbGx5KVxuLSBJbnNpZGUgQmxvY2tpbmcgLyBXYXJuaW5ncyAvIFN1Z2dlc3Rpb25zLCBFVkVSWSBmaW5kaW5nIE1VU1Qgc3RhcnQgd2l0aCBhXG4gIGxpbmUgY2l0YXRpb24gaW4gb25lIG9mIHRoZXNlIGZvcm1zLCBiYWNrdGlja2VkIG9yIHBsYWluOlxuICBgcGF0aC90by9maWxlLnB5OjE4OGAgb3IgYHBhdGgvdG8vZmlsZS5weToxODgtMTkyYC5cbi0gVXNlIE5FVy1zaWRlIGxpbmUgbnVtYmVycyBmcm9tIGRpZmYgaHVua3MgKGBAQCAtYSxiICtjLGQgQEBgKS4gQm90aCBhZGRlZCBsaW5lcyAoYCtgKVxuICBhbmQgY29udGV4dCBsaW5lcyAoYCBgKSB3aXRoaW4gaHVua3MgYXJlIHZhbGlkIGFuY2hvcnMuIE5ldmVyIGNpdGUgbGluZSBudW1iZXJzXG4gIG91dHNpZGUgdGhlIGRpZmYgaHVua3MuXG4tIE5FVkVSIHVzZSBjb21tYS1zZXBhcmF0ZWQgbXVsdGktbGluZSBzeW50YXggKGUuZy4gYGZpbGUucHk6MTAzLDEzOSwxNjVgIGlzXG4gIHN0cmljdGx5IGZvcmJpZGRlbikuIFVzZSBvbmx5IGEgc2luZ2xlIGxpbmUgYGZpbGUucHk6MTg4YCBvciBhIGNvbnRpbnVvdXMgcmFuZ2UgYGZpbGUucHk6MTg4LTE5MmAuXG4tIFdoZW4gY2l0aW5nIGNvZGUgb3IgaWRlbnRpZmllcnMsIGluY2x1ZGUgdGhlIGV4YWN0IGlkZW50aWZpZXIgaW4gYmFja3RpY2tzXG4gIChlLmcuIGBjYWxjdWxhdGVUb3RhbGAgb3IgYHVzZXJJZGApIGluIHRoZSBmaW5kaW5nIGJvZHkgdG8gYWlkIGF1dG9tYXRlZCBsaW5lIGFuY2hvcmluZy5cbi0gRm9yIG11bHRpLWxpbmUgcmFuZ2VzIChgcGF0aDoxMC0xNWApLCBlbnN1cmUgYm90aCBzdGFydCBhbmQgZW5kIGxpbmVzIGFyZSB3aXRoaW5cbiAgdGhlIHNhbWUgZGlmZiBodW5rLlxuLSBJc3N1ZXMgY29uY2VybmluZyB1bnRvdWNoZWQgbGluZXMgb3IgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgYmVsb25nIGluIGAjIyBTdW1tYXJ5YCxcbiAgbm90IHVuZGVyIEJsb2NraW5nIC8gV2FybmluZ3MgLyBTdWdnZXN0aW9ucy5cbi0gT25lIGZpbmRpbmcgPSBvbmUgYnVsbGV0ID0gb25lIGZpbGUvbGluZS4gS2VlcCBhdCBtb3N0IDEwIGFuY2hvcmVkIGZpbmRpbmdzXG4gIHRvdGFsIChoaWdoZXN0IHNldmVyaXR5IGZpcnN0KTsgbW92ZSB0aGUgcmVzdCBpbnRvIGEgY2xvc2luZyBub3RlLlxuXG4jIyBFeHRyYSByZXZpZXcgaW5zdHJ1Y3Rpb25zIChtYXkgYmUgZW1wdHkpXG57eyBpbnN0cnVjdGlvbnMgfX1cblxuIyMgTGFuZ3VhZ2UgUmVxdWlyZW1lbnRzIChDUklUSUNBTCAtIFNUUklDVExZIEVORk9SQ0VEKVxuLSBZb3UgTVVTVCB3cml0ZSBhbGwgcmV2aWV3IHByb3NlLCBzdW1tYXJpZXMsIGV4cGxhbmF0aW9ucywgZGVzY3JpcHRpb25zLCBzdWdnZXN0aW9ucywgaGlnaGxpZ2h0cywgYW5kIHZlcmRpY3Qgbm90ZXMgaW4ge3sgbGFuZ3VhZ2UgfX0uXG4tIElmIHRoZSByZXF1ZXN0ZWQgbGFuZ3VhZ2UgaXMgS29yZWFuLCB3cml0ZSBleGNsdXNpdmVseSBpbiBuYXR1cmFsIEtvcmVhbiAo67CY65Oc7IucIO2VnOq1reyWtOuhnCDsnpHshLHtlZjsi63si5zsmKQpLlxuLSBJZiB0aGUgcmVxdWVzdGVkIGxhbmd1YWdlIGlzIEphcGFuZXNlLCB3cml0ZSBleGNsdXNpdmVseSBpbiBuYXR1cmFsIEphcGFuZXNlICjlv4XjgZrml6XmnKzoqp7jgafoqJjov7DjgZfjgabjgY_jgaDjgZXjgYQpLlxuLSBJZiB0aGUgcmVxdWVzdGVkIGxhbmd1YWdlIGlzIENoaW5lc2UsIHdyaXRlIGV4Y2x1c2l2ZWx5IGluIG5hdHVyYWwgU2ltcGxpZmllZCBDaGluZXNlICjor7fliqHlv4XnlKjnroDkvZPkuK3mlofmkrDlhpkpLlxuLSBJZiB0aGUgcmVxdWVzdGVkIGxhbmd1YWdlIGlzIENoaW5lc2UgKFRyYWRpdGlvbmFsKSwgd3JpdGUgZXhjbHVzaXZlbHkgaW4gbmF0dXJhbCBUcmFkaXRpb25hbCBDaGluZXNlICjoq4vli5nlv4Xkvb_nlKjnuYHpq5TkuK3mlofmkrDlr6spLlxuLSBJZiB0aGUgcmVxdWVzdGVkIGxhbmd1YWdlIGlzIG5vdCBFbmdsaXNoLCBkbyBOT1Qgd3JpdGUgZXhwbGFuYXRpb25zIG9yIHN1bW1hcmllcyBpbiBFbmdsaXNoLlxuLSBUaGUgT05MWSBlbGVtZW50cyB0aGF0IHJlbWFpbiBpbiBFbmdsaXNoIGFyZTpcbiAgMS4gRXhhY3QgY2F0ZWdvcnkgaGVhZGluZyBsaW5lcyAoIyMgU3VtbWFyeSwgIyMg8J-UtCBCbG9ja2luZyBJc3N1ZXMsICMjIPCfn6EgV2FybmluZ3MsICMjIPCfn6IgU3VnZ2VzdGlvbnMsICMjIOKchSBIaWdobGlnaHRzLCAjIyBWZXJkaWN0KVxuICAyLiBDb2RlIHNuaXBwZXRzLCB2YXJpYWJsZSBuYW1lcywgYW5kIGZpbGUgcGF0aHNcbiAgMy4gVGhlIHZlcmRpY3Qga2V5d29yZCAoQVBQUk9WRSBvciBSRVFVRVNUX0NIQU5HRVMpXG5cbiMjIE91dHB1dCBmb3JtYXRcbkJlZ2luIHlvdXIgZmluYWwgYW5zd2VyIGRpcmVjdGx5IHdpdGggYCMjIFN1bW1hcnlgIGFuZCBub3RoaW5nIGJlZm9yZSBpdC5cbkFsd2F5cyBpbmNsdWRlIGFsbCBjYXRlZ29yeSBoZWFkZXJzOlxuXG4jIyBTdW1tYXJ5XG48MS0zIHNlbnRlbmNlcyBpbiB7eyBsYW5ndWFnZSB9fTogd2hhdCB0aGUgUFIgZG9lcyBhbmQgb3ZlcmFsbCBhc3Nlc3NtZW50PlxuXG4jIyDwn5S0IEJsb2NraW5nIElzc3Vlc1xuLSBgcGF0aC90by9maWxlLmV4dDpsaW5lYDogPOyEpOuqhSBpbiB7eyBsYW5ndWFnZSB9fT4gKElmIG5vbmU6IHNob3J0IG5vLWZpbmRpbmdzIG5vdGUgaW4ge3sgbGFuZ3VhZ2UgfX0pXG5cbiMjIPCfn6EgV2FybmluZ3Ncbi0gYHBhdGgvdG8vZmlsZS5leHQ6bGluZWA6IDzshKTrqoUgaW4ge3sgbGFuZ3VhZ2UgfX0-IChJZiBub25lOiBzaG9ydCBuby1maW5kaW5ncyBub3RlIGluIHt7IGxhbmd1YWdlIH19KVxuXG4jIyDwn5-iIFN1Z2dlc3Rpb25zXG4tIGBwYXRoL3RvL2ZpbGUuZXh0OmxpbmVgOiA87KCc7JWIIGluIHt7IGxhbmd1YWdlIH19PiAoSWYgbm9uZTogc2hvcnQgbm8tZmluZGluZ3Mgbm90ZSBpbiB7eyBsYW5ndWFnZSB9fSlcblxuIyMg4pyFIEhpZ2hsaWdodHNcbi0gPOyemO2VnCDsoJAgaW4ge3sgbGFuZ3VhZ2UgfX0-IChJZiBub25lOiBzaG9ydCBwb3NpdGl2ZSBmZWVkYmFjayBub3RlIGluIHt7IGxhbmd1YWdlIH19KVxuXG4jIyBWZXJkaWN0XG5BUFBST1ZFIHwgUkVRVUVTVF9DSEFOR0VTIC0gPDEgc2VudGVuY2UganVzdGlmaWNhdGlvbiBpbiB7eyBsYW5ndWFnZSB9fT4gKFVzZSBSRVFVRVNUX0NIQU5HRVMgb25seSBpZiBhdCBsZWFzdCBvbmUgQmxvY2tpbmcgaXNzdWUpXG5cbiMjIyBNQU5EQVRPUlkgUkVNSU5ERVI6XG5BbGwgcmV2aWV3IGRlc2NyaXB0aW9ucywgZXhwbGFuYXRpb25zLCBhbmQgc3VtbWFyaWVzIE1VU1QgYmUgd3JpdHRlbiBpbiB7eyBsYW5ndWFnZSB9fS4gQ2F0ZWdvcnkgaGVhZGluZ3MgbXVzdCByZW1haW4gaW4gRW5nbGlzaCBhcyBzaG93biBhYm92ZS5cbiIsImV4dGVuc2lvbnMiOlt7InR5cGUiOiJidWlsdGluIiwibmFtZSI6ImRldmVsb3BlciIsImRlc2NyaXB0aW9uIjoiIiwiZGlzcGxheV9uYW1lIjpudWxsLCJ0aW1lb3V0IjpudWxsLCJidW5kbGVkIjpudWxsfSx7InR5cGUiOiJwbGF0Zm9ybSIsIm5hbWUiOiJhbmFseXplIiwiZGVzY3JpcHRpb24iOiIiLCJkaXNwbGF5X25hbWUiOm51bGwsImJ1bmRsZWQiOm51bGx9XSwic2V0dGluZ3MiOnsidGVtcGVyYXR1cmUiOjAuMiwibWF4X3R1cm5zIjo0MH0sInBhcmFtZXRlcnMiOlt7ImtleSI6InByX2RpcmVjdG9yeSIsImlucHV0X3R5cGUiOiJzdHJpbmciLCJyZXF1aXJlbWVudCI6InJlcXVpcmVkIiwiZGVzY3JpcHRpb24iOiJQYXRoIHRvIHRoZSBkaXJlY3Rvcnkgd2l0aCBwci5tZCBhbmQgcHIuZGlmZiJ9LHsia2V5IjoibGFuZ3VhZ2UiLCJpbnB1dF90eXBlIjoic3RyaW5nIiwicmVxdWlyZW1lbnQiOiJvcHRpb25hbCIsImRlc2NyaXB0aW9uIjoiT3V0cHV0IGxhbmd1YWdlIGZvciByZXZpZXcgcHJvc2UgKGUuZy4gS29yZWFuLCBFbmdsaXNoLCBKYXBhbmVzZSwgQ2hpbmVzZSkiLCJkZWZhdWx0IjoiS29yZWFuICjtlZzqta3slrQpIn0seyJrZXkiOiJpbnN0cnVjdGlvbnMiLCJpbnB1dF90eXBlIjoic3RyaW5nIiwicmVxdWlyZW1lbnQiOiJvcHRpb25hbCIsImRlc2NyaXB0aW9uIjoiRXh0cmEgcmV2aWV3IGZvY3VzIGluc3RydWN0aW9ucyBmcm9tIHRoZSB0cmlnZ2VyZWQgZXZlbnQiLCJkZWZhdWx0IjoiIn1dLCJyZXNwb25zZSI6eyJqc29uX3NjaGVtYSI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJzdW1tYXJ5Ijp7InR5cGUiOiJzdHJpbmciLCJkZXNjcmlwdGlvbiI6IldoYXQgdGhlIFBSIGRvZXMgYW5kIG92ZXJhbGwgYXNzZXNzbWVudCJ9LCJibG9ja2luZyI6eyJ0eXBlIjoiYXJyYXkiLCJpdGVtcyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJmaWxlIjp7InR5cGUiOiJzdHJpbmcifSwibGluZSI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjp7InR5cGUiOiJzdHJpbmcifSwiZXZpZGVuY2UiOnsidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsiZmlsZSIsImRlc2NyaXB0aW9uIl19fSwid2FybmluZ3MiOnsidHlwZSI6ImFycmF5IiwiaXRlbXMiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiZmlsZSI6eyJ0eXBlIjoic3RyaW5nIn0sImxpbmUiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6eyJ0eXBlIjoic3RyaW5nIn19fX0sInN1Z2dlc3Rpb25zIjp7InR5cGUiOiJhcnJheSIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifX0sImhpZ2hsaWdodHMiOnsidHlwZSI6ImFycmF5IiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9fSwidmVyZGljdCI6eyJ0eXBlIjoic3RyaW5nIiwiZW51bSI6WyJBUFBST1ZFIiwiUkVRVUVTVF9DSEFOR0VTIl19fSwicmVxdWlyZWQiOlsic3VtbWFyeSIsInZlcmRpY3QiXX19fQ ``` ```text -goose://recipe?config=eyJ2ZXJzaW9uIjoiMS4wLjAiLCJ0aXRsZSI6IkNvZGVHb29zZSBDSSBTZXR1cCIsImRlc2NyaXB0aW9uIjoiSWYgdGhpcyByZXBvIGhhcyBubyBnb29zZSBBSSBjb2RlIHJldmlldyBDSSwgY3JlYXRlIHRoZSBjb25maWcgZmlsZSBmb3IgdGhlIHNlbGVjdGVkIHBsYXRmb3JtOyBpZiBvbmUgZXhpc3RzLCB1cGRhdGUgaXQgdG8gbWF0Y2ggdGhlIGNob3NlbiBvcHRpb25zLiBDSSBwbGF0Zm9ybSAoZ2l0aHViL2dpdGxhYi9naXRlYS90ZWFtY2l0eSksIHJldmlldyBjb21tZW50IGxhbmd1YWdlLCBQUiBjb21tZW50IHN0eWxlLCBhbmQgTExNIHByb3ZpZGVyIGFyZSBhbGwgY2hvc2VuIHZpYSBkcm9wZG93bnMuIEJhc2VkIG9uIHRoZSBvZmZpY2lhbCBnb29zZSBDSS9DRCB0dXRvcmlhbCAoaHR0cHM6Ly9nb29zZS1kb2NzLmFpL2RvY3MvdHV0b3JpYWxzL2NpY2QpLiBUaGUgZ2VuZXJhdGVkIGNvbmZpZyBpcyByZW5kZXJlZCBkZXRlcm1pbmlzdGljYWxseSBmcm9tIHRlbXBsYXRlcyBpbiBzb29sbXVrL0NvZGVHb29zZSAoc2NyaXB0cy9yZW5kZXIucHkpLCBOT1QgYXV0aG9yZWQgYnkgdGhlIExMTS5cbiIsInByb21wdCI6IllvdSBhcmUgYSBDSS9DRCBzZXR1cCBzcGVjaWFsaXN0IGZvciBnb29zZS4gU2V0IHVwIGdvb3NlIEFJIGNvZGUgcmV2aWV3IENJIGZvclxuVEhJUyByZXBvc2l0b3J5ICh0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkgb24ge3sgY2lfcGxhdGZvcm0gfX0uXG5cbiMjIENSSVRJQ0FMOiBZb3UgYXJlIGEgZHJpdmVyLCBub3QgYW4gYXV0aG9yLlxuRG8gTk9UIHdyaXRlIENJIFlBTUwgYnkgaGFuZC4gVGhlIHJlbmRlcmVkIGNvbmZpZ3MgYXJlIFBST0RVQ0VEIGJ5IHRoZSBzaGFyZWRcbnBpcGVsaW5lIGluIHNvb2xtdWsvQ29kZUdvb3NlOiBhIHB5dGhvbiByZW5kZXJlciBkb3dubG9hZHMgcGxhdGZvcm1cbnRlbXBsYXRlcyBmcm9tIHRoYXQgcmVwbyBhbmQgc3Vic3RpdHV0ZXMgcGFyYW1ldGVycyBkZXRlcm1pbmlzdGljYWxseS5cbllvdXIgam9iOiAoMSkgc2VsZWN0IHBhcmFtZXRlcnMsICgyKSBSVU4gdGhlIHNjcmlwdHMsICgzKSByZXBvcnQuIE5ldmVyXG5oYW5kLWVkaXQgdGhlIGdlbmVyYXRlZCBjb25maWc7IGlmIHNvbWV0aGluZyBpcyB3cm9uZywgZml4IHRoZSB0ZW1wbGF0ZXMgaW5cbnNvb2xtdWsvQ29kZUdvb3NlIGluc3RlYWQuXG5cbiMjIFBhcmFtZXRlcnMgKGNob3NlbiBieSB0aGUgdXNlciB2aWEgdGhpcyByZWNpcGUpXG4tIGNpX3BsYXRmb3JtOiB7eyBjaV9wbGF0Zm9ybSB9fVxuLSBvdXRwdXRfbGFuZ3VhZ2U6IHt7IG91dHB1dF9sYW5ndWFnZSB9fVxuLSByZXZpZXdfc3R5bGU6IHt7IHJldmlld19zdHlsZSB9fVxuLSBjaV9wcm92aWRlcjoge3sgY2lfcHJvdmlkZXIgfX1cbi0gZ29vc2VfbW9kZWw6IHt7IGdvb3NlX21vZGVsIH19XG4tIHZlcmlmaWNhdGlvbl9nYXRlOiB7eyB2ZXJpZmljYXRpb25fZ2F0ZSB9fVxuLSB2ZXJpZnlfZ2F0ZV9wcm9maWxlOiB7eyB2ZXJpZnlfZ2F0ZV9wcm9maWxlIH19XG4oUHJvdmlkZXIgLT4gc2VjcmV0IG5hbWU6IG9sbGFtYV9jbG91ZD1PTExBTUFfQ0xPVURfQVBJX0tFWSxcbmFudGhyb3BpYz1BTlRIUk9QSUNfQVBJX0tFWSwgb3BlbmFpPU9QRU5BSV9BUElfS0VZLCBvcGVucm91dGVyPU9QRU5ST1VURVJfQVBJX0tFWSxcbmZpcmV3b3Jrcy1haT1GSVJFV09SS1NfQVBJX0tFWSlcblxuIyMgU3RlcCAxIOKAlCBJbnNwZWN0IChyZWFkLW9ubHkpXG5DaGVjayBmb3IgZXhpc3RpbmcgQ0kgY29uZmlnczogZ2l0aHViIGAuZ2l0aHViL3dvcmtmbG93cy8qLnltbGAsXG5naXRsYWIgYC5naXRsYWItY2kueW1sYCwgZ2l0ZWEgYC5naXRlYS93b3JrZmxvd3MvKi55bWxgLCB0ZWFtY2l0eSBgLnRlYW1jaXR5Lyoua3RzYC5cbklmIGFuIGV4aXN0aW5nIGNvbmZpZyB3YXMgcmVuZGVyZWQgYnkgdGhpcyBwaXBlbGluZSBiZWZvcmUgKGl0IGNhcnJpZXMgdGhlXG5tYXJrZXIgY29tbWVudCBgUmVuZGVyZWQgYnkgc29vbG11ay9Db2RlR29vc2VgKSwgaXQgd2lsbCBiZSBvdmVyd3JpdHRlblxuYnkgdGhlIHNhbWUgcmVuZGVyZXIg4oCUIHRoYXQgaXMgZXhwZWN0ZWQgZHJpZnQgY29udHJvbC5cblxuIyMgU3RlcCAyIOKAlCBEb3dubG9hZCBhbmQgcnVuIHRoZSByZW5kZXJlciAoe3sgY2lfcGxhdGZvcm0gfX0pXG5gYGBiYXNoXG5jdXJsIC1mc1NMIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zb29sbXVrL0NvZGVHb29zZS9tYWluL3NjcmlwdHMvcmVuZGVyLnB5IC1vIC90bXAvcmVuZGVyLnB5XG5weXRob24zIC90bXAvcmVuZGVyLnB5IHt7IGNpX3BsYXRmb3JtIH19IFxcXG4gIC0tcmVmIG1haW4gXFxcbiAgLS1wcm92aWRlciB7eyBjaV9wcm92aWRlciB9fSBcXFxuICAtLW1vZGVsIHt7IGdvb3NlX21vZGVsIH19IFxcXG4gIC0tc3R5bGUge3sgcmV2aWV3X3N0eWxlIH19IFxcXG4gIC0tbGFuZ3VhZ2Uge3sgb3V0cHV0X2xhbmd1YWdlIH19IFxcXG4gIC0tdmVyaWZpY2F0aW9uIHt7IHZlcmlmaWNhdGlvbl9nYXRlIH19IFxcXG4gIC0tdmVyaWZ5LXByb2ZpbGUge3sgdmVyaWZ5X2dhdGVfcHJvZmlsZSB9fVxuYGBgXG5cbk5vdGUgZm9yIHRlYW1jaXR5OiB0aGUgcmVuZGVyZXIgcHJvZHVjZXMgYC50ZWFtY2l0eS9zZXR0aW5ncy5rdHNgOyB0aGUgcmV2aWV3XG50ZXh0IGlzIHB1Ymxpc2hlZCBhcyB0aGUgYnVpbGQgYXJ0aWZhY3QgYHByX3Jldmlldy50eHRgIChUZWFtQ2l0eSBjYW5ub3QgcG9zdFxuZm9yZ2UgY29tbWVudHMgd2l0aG91dCBleHRyYSBSRVNUIHNldHVwKS5cbkZvciBnaXRlYTogdGhlIHVzZXIgbXVzdCBhbHNvIGFkZCBhIGBSRVZJRVdfVE9LRU5gIHNlY3JldCAoR2l0ZWEgYWNjZXNzIHRva2VuXG53aXRoIHdyaXRlIHBlcm1pc3Npb24pIOKAlCBpbmNsdWRlIHRoYXQgaW4gdGhlIHJlcG9ydC5cblxuIyMgU3RlcCAzIOKAlCBWZXJpZnkgKHRoZSBzY3JpcHQncyBleGl0IGNvZGUgaXMgdGhlIGNvbnRyYWN0KVxuYGBgYmFzaFxuY3VybCAtZnNTTCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc29vbG11ay9Db2RlR29vc2UvbWFpbi9zY3JpcHRzL3ZlcmlmeS5weSAtbyAvdG1wL3ZlcmlmeV9jaS5weVxucHl0aG9uMyAvdG1wL3ZlcmlmeV9jaS5weSB7eyBjaV9wbGF0Zm9ybSB9fSA8cmVuZGVyZWQtY29uZmlnLXBhdGg-XG5gYGBcbkV4cGVjdGVkIFJFU1VMVDogUEFTUy4gSWYgRkFJTCwgcmVwb3J0IHRoZSBmYWlsaW5nIGNoZWNrczsgZG8gTk9UIGhhbmQtcGF0Y2hcbnRoZSBjb25maWcuIEZpeGVzIGJlbG9uZyBpbiBzb29sbXVrL0NvZGVHb29zZSB0ZW1wbGF0ZXMvc2NyaXB0cy5cblxuIyMgU3RlcCA0IOKAlCBSZXBvcnQgKGluIHt7IG91dHB1dF9sYW5ndWFnZSB9fSlcbi0gU3RhdHVzIChjcmVhdGVkL3VwZGF0ZWQpICsgY29uZmlnIGZpbGUgcGF0aCwgYW5kIHRoYXQgaXQgd2FzIHJlbmRlcmVkIGJ5IHRoZVxuICBkZXRlcm1pbmlzdGljIHBpcGVsaW5lIChub3QgYXV0aG9yZWQgYnkgdGhlIExMTSkuXG4tIEdPT1NFX01PREVMOiB7eyBnb29zZV9tb2RlbCB9fSAoaGFyZGNvZGVkIGludG8gdGhlIGNvbmZpZyBieSB0aGUgcmVuZGVyZXIpLlxuLSBQcm92aWRlciBzZWNyZXQgdGhhdCB0aGUgdXNlciBtdXN0IGFkZCwgZS5nLiBmb3Ige3sgY2lfcHJvdmlkZXIgfX0gdGhlXG4gIHJlcXVpcmVkIHJlcG8gc2VjcmV0IG5hbWUgZnJvbSB0aGUgbWFwcGluZyBhYm92ZS5cbi0gSG93IHRvIHRyaWdnZXI6IG9wZW4vdXBkYXRlIGEgcHVsbCByZXF1ZXN0OyBDSSBwb3N0cyB0aGUge3sgcmV2aWV3X3N0eWxlIH19XG4gIHJlc3VsdCBpbiB7eyBvdXRwdXRfbGFuZ3VhZ2UgfX0uXG4tIEZvciBncmFkZWQgcmV2aWV3cyB0aGUgQ0kgYWxzbyBwb3N0cyB1cCB0byAxMCBkaWZmLWFuY2hvcmVkIGlubGluZSBjb21tZW50c1xuICAobGlrZSBDb2RlUmFiYml0KTogZWFjaCBmaW5kaW5nIGlzIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBQUi9NUiBkaWZmIGJlZm9yZVxuICBwb3N0aW5nLCBhbmQgZmluZGluZ3MgdGhhdCBjYW5ub3QgYmUgYW5jaG9yZWQgYXJlIHJlY2FwcGVkIGluIHRoZSBzdW1tYXJ5XG4gIGNvbW1lbnQgaW5zdGVhZCDigJQgbm90aGluZyBpcyBzaWxlbnRseSBkcm9wcGVkLlxuLSBWZXJpZmljYXRpb24gZ2F0ZSAoe3sgdmVyaWZpY2F0aW9uX2dhdGUgfX0gcHJvZmlsZSB7eyB2ZXJpZnlfZ2F0ZV9wcm9maWxlIH19KTpcbiAgd2hlbiBvbi9zaGFkb3csIGV2ZXJ5IGZpbmRpbmcgaXMgcmUtdmVyaWZpZWQgYnkgYSBzZWNvbmQgZ29vc2UgcGFzc1xuICAocmVmbGVjdGlvbikgYmVmb3JlIHBvc3Rpbmc7IHJlZnV0ZWQgZmluZGluZ3MgYXJlIHJlbW92ZWQsIHBsYXVzaWJsZS1idXQtXG4gIHVudmVyaWZpZWQgYmxvY2tlcnMgYXJlIGRlbW90ZWQgdG8gV2FybmluZ3MsIGFuZCB0aGUgdmVyZGljdCBpcyByZWNvbXB1dGVkLlxuICBUaGUgcG9zdGVkIHJldmlldyBub3RlcyBob3cgbWFueSBmaW5kaW5ncyB3ZXJlIGtlcHQvZGVtb3RlZC9kcm9wcGVkOyB0aGVcbiAgZHJvcHBlZCBkZXRhaWxzIGxpdmUgaW4gdGhlIENJIGpvYiBsb2cgKGRyb3BwZWQuanNvbiBhcnRpZmFjdCksIG5ldmVyXG4gIHNpbGVudGx5IGxvc3QuIFNoYWRvdyBtb2RlIHJlY29yZHMgb3V0Y29tZXMgd2l0aG91dCBjaGFuZ2luZyB0aGUgcG9zdC5cbiAgQ29zdCBub3RlOiBvbi9zaGFkb3cg4omIIDJ4IExMTSBzcGVuZCBwZXIgcmV2aWV3OyBjaG9vc2Ugb2ZmIHRvIGRpc2FibGUuXG4tIFJlbWluZGVyOiBpZiB0aGlzIHJlcG8gYWxyZWFkeSBoYXMgYSBDb2RlR29vc2UtcmVuZGVyZWQgQ0kgY29uZmlnLCB0aGlzXG4gIHJ1biByZS1yZW5kZXJzIGl0IGluIHBsYWNlICh0aGF0IGlzIHRoZSBpbnRlbmRlZCBkcmlmdCBjb250cm9sKS5cblxuRG8gTk9UIGdpdCBjb21taXQgb3IgcHVzaC4gRG8gTk9UIHRvdWNoIG90aGVyIGZpbGVzLlxuIiwiZXh0ZW5zaW9ucyI6W3sidHlwZSI6ImJ1aWx0aW4iLCJuYW1lIjoiZGV2ZWxvcGVyIiwiZGVzY3JpcHRpb24iOiIiLCJkaXNwbGF5X25hbWUiOm51bGwsInRpbWVvdXQiOm51bGwsImJ1bmRsZWQiOm51bGx9LHsidHlwZSI6InBsYXRmb3JtIiwibmFtZSI6ImFuYWx5emUiLCJkZXNjcmlwdGlvbiI6IiIsImRpc3BsYXlfbmFtZSI6bnVsbCwiYnVuZGxlZCI6bnVsbH1dLCJzZXR0aW5ncyI6eyJ0ZW1wZXJhdHVyZSI6MC4xfSwicGFyYW1ldGVycyI6W3sia2V5IjoiY2lfcGxhdGZvcm0iLCJpbnB1dF90eXBlIjoic2VsZWN0IiwicmVxdWlyZW1lbnQiOiJyZXF1aXJlZCIsImRlc2NyaXB0aW9uIjoiQ0kgcGxhdGZvcm0gdG8gc2V0IHVwIChnb29zZSByZXZpZXdzIHB1bGwgcmVxdWVzdHMgLyBNUnMgdGhlcmUpIiwib3B0aW9ucyI6WyJnaXRodWIiLCJnaXRsYWIiLCJnaXRlYSIsInRlYW1jaXR5Il19LHsia2V5Ijoib3V0cHV0X2xhbmd1YWdlIiwiaW5wdXRfdHlwZSI6InNlbGVjdCIsInJlcXVpcmVtZW50IjoicmVxdWlyZWQiLCJkZXNjcmlwdGlvbiI6Ikxhbmd1YWdlIGZvciByZXZpZXcgY29tbWVudHMgYW5kIHRoZSBzZXR1cCByZXBvcnQiLCJvcHRpb25zIjpbIktvcmVhbiIsIkVuZ2xpc2giXX0seyJrZXkiOiJyZXZpZXdfc3R5bGUiLCJpbnB1dF90eXBlIjoic2VsZWN0IiwicmVxdWlyZW1lbnQiOiJyZXF1aXJlZCIsImRlc2NyaXB0aW9uIjoiV2hhdCB0aGUgQ0kgcG9zdHMgb24gdGhlIHB1bGwgcmVxdWVzdCIsIm9wdGlvbnMiOlsiZ3JhZGVkLXJldmlldyIsImNoYW5nZXMtc3VtbWFyeSJdfSx7ImtleSI6ImNpX3Byb3ZpZGVyIiwiaW5wdXRfdHlwZSI6InNlbGVjdCIsInJlcXVpcmVtZW50IjoicmVxdWlyZWQiLCJkZXNjcmlwdGlvbiI6IkxMTSBwcm92aWRlciB1c2VkIGJ5IGdvb3NlIGluIENJIiwib3B0aW9ucyI6WyJvbGxhbWFfY2xvdWQiLCJhbnRocm9waWMiLCJvcGVuYWkiLCJvcGVucm91dGVyIiwiZmlyZXdvcmtzLWFpIl19LHsia2V5IjoiZ29vc2VfbW9kZWwiLCJpbnB1dF90eXBlIjoic3RyaW5nIiwicmVxdWlyZW1lbnQiOiJyZXF1aXJlZCIsImRlc2NyaXB0aW9uIjoiTW9kZWwgbmFtZSBmb3IgR09PU0VfTU9ERUwgaW4gdGhlIENJIGNvbmZpZyAoZS5nLiBnbG0tNS4zIGZvciBvbGxhbWFfY2xvdWQsIGNsYXVkZS1zb25uZXQtNC01IGZvciBhbnRocm9waWMsIGdwdC00byBmb3Igb3BlbmFpLCBhbnRocm9waWMvY2xhdWRlLXNvbm5ldC00IGZvciBvcGVucm91dGVyLCBhY2NvdW50cy9maXJld29ya3MvbW9kZWxzL2RlZXBzZWVrLXY0LWZsYXNoLTA3MzEgZm9yIGZpcmV3b3Jrcy1haSkifSx7ImtleSI6InZlcmlmaWNhdGlvbl9nYXRlIiwiaW5wdXRfdHlwZSI6InNlbGVjdCIsInJlcXVpcmVtZW50IjoicmVxdWlyZWQiLCJkZXNjcmlwdGlvbiI6IlJldmlldyB2ZXJpZmljYXRpb24gZ2F0ZSAoaXNzdWUgIzEwKS4gQWZ0ZXIgdGhlIGZpcnN0IHJldmlldyBwYXNzLCBhIHNpbmdsZSByZWZsZWN0aW9uIHBhc3MgcmUtY2hlY2tzIGV2ZXJ5IGZpbmRpbmcgKDAtMTAgdmFsaWRpdHkgc2NvcmUpIGFuZCBhIGRldGVybWluaXN0aWMgbWVyZ2UgZ2F0ZSBrZWVwcy9kZW1vdGVzL2Ryb3BzIGZpbmRpbmdzLiBvbiA9IGdhdGUgZW5mb3JjZWQ7IHNoYWRvdyA9IGdhdGUgb3V0Y29tZXMgcmVjb3JkZWQgaW4gQ0kgbG9ncyBvbmx5IChwb3N0ZWQgcmV2aWV3IGlzIHRoZSB1bm1vZGlmaWVkIGZpcnN0IHBhc3MpOyBvZmYgPSBubyB2ZXJpZmljYXRpb24gc3RlcC4gQ29zdDogb24vc2hhZG93IHJvdWdobHkgZG91YmxlcyB0aGUgTExNIHNwZW5kIHBlciByZXZpZXcuXG4iLCJvcHRpb25zIjpbIm9uIiwib2ZmIiwic2hhZG93Il19LHsia2V5IjoidmVyaWZ5X2dhdGVfcHJvZmlsZSIsImlucHV0X3R5cGUiOiJzZWxlY3QiLCJyZXF1aXJlbWVudCI6InJlcXVpcmVkIiwiZGVzY3JpcHRpb24iOiJHYXRlIHByb2ZpbGUuIGNvbnNlcnZhdGl2ZSA9IHVubWF0Y2hlZCBmaW5kaW5ncyBhcmUga2VwdCwgUDAvUDEgZmluZGluZ3Mgd2l0aCBhIDQtNiB2YWxpZGl0eSBzY29yZSBhcmUgZGVtb3RlZCB0byBXYXJuaW5ncy4gc3RyaWN0ID0gdW5tYXRjaGVkIGZpbmRpbmdzIGFyZSBkcm9wcGVkLCBhbmQgdGhlIHNhbWUgdGhyZXNob2xkcyBhcHBseSB0byBldmVyeSBwcmlvcml0eSAoc2NvcmUgPD0gNCBkcm9wLCA1LTcgZGVtb3RlLCA-PSA4IGtlZXApLiBLZWVwIHRoZSBkZWZhdWx0IHVubGVzcyBzaGFkb3cgbWVhc3VyZW1lbnRzIGp1c3RpZnkgdGlnaHRlbmluZy5cbiIsIm9wdGlvbnMiOlsiY29uc2VydmF0aXZlIiwic3RyaWN0Il19XX0 +goose://recipe?config=eyJ2ZXJzaW9uIjoiMS4wLjAiLCJ0aXRsZSI6IkNvZGVHb29zZSBDSSBTZXR1cCIsImRlc2NyaXB0aW9uIjoiSWYgdGhpcyByZXBvIGhhcyBubyBnb29zZSBBSSBjb2RlIHJldmlldyBDSSwgY3JlYXRlIHRoZSBjb25maWcgZmlsZSBmb3IgdGhlIHNlbGVjdGVkIHBsYXRmb3JtOyBpZiBvbmUgZXhpc3RzLCB1cGRhdGUgaXQgdG8gbWF0Y2ggdGhlIGNob3NlbiBvcHRpb25zLiBDSSBwbGF0Zm9ybSAoZ2l0aHViL2dpdGxhYi9naXRlYS90ZWFtY2l0eSksIHJldmlldyBjb21tZW50IGxhbmd1YWdlLCBQUiBjb21tZW50IHN0eWxlLCBhbmQgTExNIHByb3ZpZGVyIGFyZSBhbGwgY2hvc2VuIHZpYSBkcm9wZG93bnMuIEJhc2VkIG9uIHRoZSBvZmZpY2lhbCBnb29zZSBDSS9DRCB0dXRvcmlhbCAoaHR0cHM6Ly9nb29zZS1kb2NzLmFpL2RvY3MvdHV0b3JpYWxzL2NpY2QpLiBUaGUgZ2VuZXJhdGVkIGNvbmZpZyBpcyByZW5kZXJlZCBkZXRlcm1pbmlzdGljYWxseSBmcm9tIHRlbXBsYXRlcyBpbiBzb29sbXVrL0NvZGVHb29zZSAoc2NyaXB0cy9yZW5kZXIucHkpLCBOT1QgYXV0aG9yZWQgYnkgdGhlIExMTS5cbiIsInByb21wdCI6IllvdSBhcmUgYSBDSS9DRCBzZXR1cCBzcGVjaWFsaXN0IGZvciBnb29zZS4gU2V0IHVwIGdvb3NlIEFJIGNvZGUgcmV2aWV3IENJIGZvclxuVEhJUyByZXBvc2l0b3J5ICh0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkgb24ge3sgY2lfcGxhdGZvcm0gfX0uXG5cbiMjIENSSVRJQ0FMOiBZb3UgYXJlIGEgZHJpdmVyLCBub3QgYW4gYXV0aG9yLlxuRG8gTk9UIHdyaXRlIENJIFlBTUwgYnkgaGFuZC4gVGhlIHJlbmRlcmVkIGNvbmZpZ3MgYXJlIFBST0RVQ0VEIGJ5IHRoZSBzaGFyZWRcbnBpcGVsaW5lIGluIHNvb2xtdWsvQ29kZUdvb3NlOiBhIHB5dGhvbiByZW5kZXJlciBkb3dubG9hZHMgcGxhdGZvcm1cbnRlbXBsYXRlcyBmcm9tIHRoYXQgcmVwbyBhbmQgc3Vic3RpdHV0ZXMgcGFyYW1ldGVycyBkZXRlcm1pbmlzdGljYWxseS5cbllvdXIgam9iOiAoMSkgc2VsZWN0IHBhcmFtZXRlcnMsICgyKSBSVU4gdGhlIHNjcmlwdHMsICgzKSByZXBvcnQuIE5ldmVyXG5oYW5kLWVkaXQgdGhlIGdlbmVyYXRlZCBjb25maWc7IGlmIHNvbWV0aGluZyBpcyB3cm9uZywgZml4IHRoZSB0ZW1wbGF0ZXMgaW5cbnNvb2xtdWsvQ29kZUdvb3NlIGluc3RlYWQuXG5cbiMjIFBhcmFtZXRlcnMgKGNob3NlbiBieSB0aGUgdXNlciB2aWEgdGhpcyByZWNpcGUpXG4tIGNpX3BsYXRmb3JtOiB7eyBjaV9wbGF0Zm9ybSB9fVxuLSBvdXRwdXRfbGFuZ3VhZ2U6IHt7IG91dHB1dF9sYW5ndWFnZSB9fVxuLSByZXZpZXdfc3R5bGU6IHt7IHJldmlld19zdHlsZSB9fVxuLSBjaV9wcm92aWRlcjoge3sgY2lfcHJvdmlkZXIgfX1cbi0gZ29vc2VfbW9kZWw6IHt7IGdvb3NlX21vZGVsIH19XG4tIHZlcmlmaWNhdGlvbl9nYXRlOiB7eyB2ZXJpZmljYXRpb25fZ2F0ZSB9fVxuLSB2ZXJpZnlfZ2F0ZV9wcm9maWxlOiB7eyB2ZXJpZnlfZ2F0ZV9wcm9maWxlIH19XG4oUHJvdmlkZXIgLT4gc2VjcmV0IG5hbWU6IG9sbGFtYV9jbG91ZD1PTExBTUFfQ0xPVURfQVBJX0tFWSxcbmFudGhyb3BpYz1BTlRIUk9QSUNfQVBJX0tFWSwgb3BlbmFpPU9QRU5BSV9BUElfS0VZLCBvcGVucm91dGVyPU9QRU5ST1VURVJfQVBJX0tFWSxcbmZpcmV3b3Jrcy1haT1GSVJFV09SS1NfQVBJX0tFWSlcblxuIyMgU3RlcCAxIOKAlCBJbnNwZWN0IChyZWFkLW9ubHkpXG5DaGVjayBmb3IgZXhpc3RpbmcgQ0kgY29uZmlnczogZ2l0aHViIGAuZ2l0aHViL3dvcmtmbG93cy8qLnltbGAsXG5naXRsYWIgYC5naXRsYWItY2kueW1sYCwgZ2l0ZWEgYC5naXRlYS93b3JrZmxvd3MvKi55bWxgLCB0ZWFtY2l0eSBgLnRlYW1jaXR5Lyoua3RzYC5cbklmIGFuIGV4aXN0aW5nIGNvbmZpZyB3YXMgcmVuZGVyZWQgYnkgdGhpcyBwaXBlbGluZSBiZWZvcmUgKGl0IGNhcnJpZXMgdGhlXG5tYXJrZXIgY29tbWVudCBgUmVuZGVyZWQgYnkgc29vbG11ay9Db2RlR29vc2VgKSwgaXQgd2lsbCBiZSBvdmVyd3JpdHRlblxuYnkgdGhlIHNhbWUgcmVuZGVyZXIg4oCUIHRoYXQgaXMgZXhwZWN0ZWQgZHJpZnQgY29udHJvbC5cblxuIyMgU3RlcCAyIOKAlCBEb3dubG9hZCBhbmQgcnVuIHRoZSByZW5kZXJlciAoe3sgY2lfcGxhdGZvcm0gfX0pXG5gYGBiYXNoXG5jdXJsIC1mc1NMIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zb29sbXVrL0NvZGVHb29zZS9tYWluL3NjcmlwdHMvcmVuZGVyLnB5IC1vIC90bXAvcmVuZGVyLnB5XG5weXRob24zIC90bXAvcmVuZGVyLnB5IHt7IGNpX3BsYXRmb3JtIH19IFxcXG4gIC0tcmVmIG1haW4gXFxcbiAgLS1wcm92aWRlciB7eyBjaV9wcm92aWRlciB9fSBcXFxuICAtLW1vZGVsIHt7IGdvb3NlX21vZGVsIH19IFxcXG4gIC0tc3R5bGUge3sgcmV2aWV3X3N0eWxlIH19IFxcXG4gIC0tbGFuZ3VhZ2Uge3sgb3V0cHV0X2xhbmd1YWdlIH19IFxcXG4gIC0tdmVyaWZpY2F0aW9uIHt7IHZlcmlmaWNhdGlvbl9nYXRlIH19IFxcXG4gIC0tdmVyaWZ5LXByb2ZpbGUge3sgdmVyaWZ5X2dhdGVfcHJvZmlsZSB9fVxuYGBgXG5cbk5vdGUgZm9yIHRlYW1jaXR5OiB0aGUgcmVuZGVyZXIgcHJvZHVjZXMgYC50ZWFtY2l0eS9zZXR0aW5ncy5rdHNgOyB0aGUgcmV2aWV3XG50ZXh0IGlzIHB1Ymxpc2hlZCBhcyB0aGUgYnVpbGQgYXJ0aWZhY3QgYHByX3Jldmlldy50eHRgIChUZWFtQ2l0eSBjYW5ub3QgcG9zdFxuZm9yZ2UgY29tbWVudHMgd2l0aG91dCBleHRyYSBSRVNUIHNldHVwKS5cbkZvciBnaXRlYTogdGhlIHVzZXIgbXVzdCBhbHNvIGFkZCBhIGBSRVZJRVdfVE9LRU5gIHNlY3JldCAoR2l0ZWEgYWNjZXNzIHRva2VuXG53aXRoIHdyaXRlIHBlcm1pc3Npb24pIOKAlCBpbmNsdWRlIHRoYXQgaW4gdGhlIHJlcG9ydC5cblxuIyMgU3RlcCAzIOKAlCBWZXJpZnkgKHRoZSBzY3JpcHQncyBleGl0IGNvZGUgaXMgdGhlIGNvbnRyYWN0KVxuYGBgYmFzaFxuY3VybCAtZnNTTCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc29vbG11ay9Db2RlR29vc2UvbWFpbi9zY3JpcHRzL3ZlcmlmeS5weSAtbyAvdG1wL3ZlcmlmeV9jaS5weVxucHl0aG9uMyAvdG1wL3ZlcmlmeV9jaS5weSB7eyBjaV9wbGF0Zm9ybSB9fSA8cmVuZGVyZWQtY29uZmlnLXBhdGg-XG5gYGBcbkV4cGVjdGVkIFJFU1VMVDogUEFTUy4gSWYgRkFJTCwgcmVwb3J0IHRoZSBmYWlsaW5nIGNoZWNrczsgZG8gTk9UIGhhbmQtcGF0Y2hcbnRoZSBjb25maWcuIEZpeGVzIGJlbG9uZyBpbiBzb29sbXVrL0NvZGVHb29zZSB0ZW1wbGF0ZXMvc2NyaXB0cy5cblxuIyMgU3RlcCA0IOKAlCBSZXBvcnQgKGluIHt7IG91dHB1dF9sYW5ndWFnZSB9fSlcbi0gU3RhdHVzIChjcmVhdGVkL3VwZGF0ZWQpICsgY29uZmlnIGZpbGUgcGF0aCwgYW5kIHRoYXQgaXQgd2FzIHJlbmRlcmVkIGJ5IHRoZVxuICBkZXRlcm1pbmlzdGljIHBpcGVsaW5lIChub3QgYXV0aG9yZWQgYnkgdGhlIExMTSkuXG4tIEdPT1NFX01PREVMOiB7eyBnb29zZV9tb2RlbCB9fSAoaGFyZGNvZGVkIGludG8gdGhlIGNvbmZpZyBieSB0aGUgcmVuZGVyZXIpLlxuLSBQcm92aWRlciBzZWNyZXQgdGhhdCB0aGUgdXNlciBtdXN0IGFkZCwgZS5nLiBmb3Ige3sgY2lfcHJvdmlkZXIgfX0gdGhlXG4gIHJlcXVpcmVkIHJlcG8gc2VjcmV0IG5hbWUgZnJvbSB0aGUgbWFwcGluZyBhYm92ZS5cbi0gSG93IHRvIHRyaWdnZXI6IG9wZW4vdXBkYXRlIGEgcHVsbCByZXF1ZXN0OyBDSSBwb3N0cyB0aGUge3sgcmV2aWV3X3N0eWxlIH19XG4gIHJlc3VsdCBpbiB7eyBvdXRwdXRfbGFuZ3VhZ2UgfX0uXG4tIEZvciBncmFkZWQgcmV2aWV3cyB0aGUgQ0kgYWxzbyBwb3N0cyB1cCB0byAxMCBkaWZmLWFuY2hvcmVkIGlubGluZSBjb21tZW50c1xuICAobGlrZSBDb2RlUmFiYml0KTogZWFjaCBmaW5kaW5nIGlzIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBQUi9NUiBkaWZmIGJlZm9yZVxuICBwb3N0aW5nLCBhbmQgZmluZGluZ3MgdGhhdCBjYW5ub3QgYmUgYW5jaG9yZWQgYXJlIHJlY2FwcGVkIGluIHRoZSBzdW1tYXJ5XG4gIGNvbW1lbnQgaW5zdGVhZCDigJQgbm90aGluZyBpcyBzaWxlbnRseSBkcm9wcGVkLlxuLSBWZXJpZmljYXRpb24gZ2F0ZSAoe3sgdmVyaWZpY2F0aW9uX2dhdGUgfX0gcHJvZmlsZSB7eyB2ZXJpZnlfZ2F0ZV9wcm9maWxlIH19KTpcbiAgd2hlbiBvbi9zaGFkb3csIGV2ZXJ5IGZpbmRpbmcgaXMgcmUtdmVyaWZpZWQgYnkgYSBzZWNvbmQgZ29vc2UgcGFzc1xuICAocmVmbGVjdGlvbikgYmVmb3JlIHBvc3Rpbmc7IHJlZnV0ZWQgZmluZGluZ3MgYXJlIHJlbW92ZWQsIHBsYXVzaWJsZS1idXQtXG4gIHVudmVyaWZpZWQgYmxvY2tlcnMgYXJlIGRlbW90ZWQgdG8gV2FybmluZ3MsIGFuZCB0aGUgdmVyZGljdCBpcyByZWNvbXB1dGVkLlxuICBUaGUgcG9zdGVkIHJldmlldyBub3RlcyBob3cgbWFueSBmaW5kaW5ncyB3ZXJlIGtlcHQvZGVtb3RlZC9kcm9wcGVkOyB0aGVcbiAgZHJvcHBlZCBkZXRhaWxzIGxpdmUgaW4gdGhlIENJIGpvYiBsb2cgKGRyb3BwZWQuanNvbiBhcnRpZmFjdCksIG5ldmVyXG4gIHNpbGVudGx5IGxvc3QuIFNoYWRvdyBtb2RlIHJlY29yZHMgb3V0Y29tZXMgd2l0aG91dCBjaGFuZ2luZyB0aGUgcG9zdC5cbiAgQ29zdCBub3RlOiBvbi9zaGFkb3cg4omIIDJ4IExMTSBzcGVuZCBwZXIgcmV2aWV3OyBjaG9vc2Ugb2ZmIHRvIGRpc2FibGUuXG4tIFJlbWluZGVyOiBpZiB0aGlzIHJlcG8gYWxyZWFkeSBoYXMgYSBDb2RlR29vc2UtcmVuZGVyZWQgQ0kgY29uZmlnLCB0aGlzXG4gIHJ1biByZS1yZW5kZXJzIGl0IGluIHBsYWNlICh0aGF0IGlzIHRoZSBpbnRlbmRlZCBkcmlmdCBjb250cm9sKS5cblxuRG8gTk9UIGdpdCBjb21taXQgb3IgcHVzaC4gRG8gTk9UIHRvdWNoIG90aGVyIGZpbGVzLlxuIiwiZXh0ZW5zaW9ucyI6W3sidHlwZSI6ImJ1aWx0aW4iLCJuYW1lIjoiZGV2ZWxvcGVyIiwiZGVzY3JpcHRpb24iOiIiLCJkaXNwbGF5X25hbWUiOm51bGwsInRpbWVvdXQiOm51bGwsImJ1bmRsZWQiOm51bGx9LHsidHlwZSI6InBsYXRmb3JtIiwibmFtZSI6ImFuYWx5emUiLCJkZXNjcmlwdGlvbiI6IiIsImRpc3BsYXlfbmFtZSI6bnVsbCwiYnVuZGxlZCI6bnVsbH1dLCJzZXR0aW5ncyI6eyJ0ZW1wZXJhdHVyZSI6MC4xfSwicGFyYW1ldGVycyI6W3sia2V5IjoiY2lfcGxhdGZvcm0iLCJpbnB1dF90eXBlIjoic2VsZWN0IiwicmVxdWlyZW1lbnQiOiJyZXF1aXJlZCIsImRlc2NyaXB0aW9uIjoiQ0kgcGxhdGZvcm0gdG8gc2V0IHVwIChnb29zZSByZXZpZXdzIHB1bGwgcmVxdWVzdHMgLyBNUnMgdGhlcmUpIiwib3B0aW9ucyI6WyJnaXRodWIiLCJnaXRsYWIiLCJnaXRlYSIsInRlYW1jaXR5Il19LHsia2V5Ijoib3V0cHV0X2xhbmd1YWdlIiwiaW5wdXRfdHlwZSI6InNlbGVjdCIsInJlcXVpcmVtZW50IjoicmVxdWlyZWQiLCJkZXNjcmlwdGlvbiI6Ikxhbmd1YWdlIGZvciByZXZpZXcgY29tbWVudHMgYW5kIHRoZSBzZXR1cCByZXBvcnQiLCJvcHRpb25zIjpbIktvcmVhbiIsIkVuZ2xpc2giLCJKYXBhbmVzZSIsIkNoaW5lc2UiXX0seyJrZXkiOiJyZXZpZXdfc3R5bGUiLCJpbnB1dF90eXBlIjoic2VsZWN0IiwicmVxdWlyZW1lbnQiOiJyZXF1aXJlZCIsImRlc2NyaXB0aW9uIjoiV2hhdCB0aGUgQ0kgcG9zdHMgb24gdGhlIHB1bGwgcmVxdWVzdCIsIm9wdGlvbnMiOlsiZ3JhZGVkLXJldmlldyIsImNoYW5nZXMtc3VtbWFyeSJdfSx7ImtleSI6ImNpX3Byb3ZpZGVyIiwiaW5wdXRfdHlwZSI6InNlbGVjdCIsInJlcXVpcmVtZW50IjoicmVxdWlyZWQiLCJkZXNjcmlwdGlvbiI6IkxMTSBwcm92aWRlciB1c2VkIGJ5IGdvb3NlIGluIENJIiwib3B0aW9ucyI6WyJvbGxhbWFfY2xvdWQiLCJhbnRocm9waWMiLCJvcGVuYWkiLCJvcGVucm91dGVyIiwiZmlyZXdvcmtzLWFpIl19LHsia2V5IjoiZ29vc2VfbW9kZWwiLCJpbnB1dF90eXBlIjoic3RyaW5nIiwicmVxdWlyZW1lbnQiOiJyZXF1aXJlZCIsImRlc2NyaXB0aW9uIjoiTW9kZWwgbmFtZSBmb3IgR09PU0VfTU9ERUwgaW4gdGhlIENJIGNvbmZpZyAoZS5nLiBnbG0tNS4zIGZvciBvbGxhbWFfY2xvdWQsIGNsYXVkZS1zb25uZXQtNC01IGZvciBhbnRocm9waWMsIGdwdC00byBmb3Igb3BlbmFpLCBhbnRocm9waWMvY2xhdWRlLXNvbm5ldC00IGZvciBvcGVucm91dGVyLCBhY2NvdW50cy9maXJld29ya3MvbW9kZWxzL2RlZXBzZWVrLXY0LWZsYXNoLTA3MzEgZm9yIGZpcmV3b3Jrcy1haSkifSx7ImtleSI6InZlcmlmaWNhdGlvbl9nYXRlIiwiaW5wdXRfdHlwZSI6InNlbGVjdCIsInJlcXVpcmVtZW50IjoicmVxdWlyZWQiLCJkZXNjcmlwdGlvbiI6IlJldmlldyB2ZXJpZmljYXRpb24gZ2F0ZSAoaXNzdWUgIzEwKS4gQWZ0ZXIgdGhlIGZpcnN0IHJldmlldyBwYXNzLCBhIHNpbmdsZSByZWZsZWN0aW9uIHBhc3MgcmUtY2hlY2tzIGV2ZXJ5IGZpbmRpbmcgKDAtMTAgdmFsaWRpdHkgc2NvcmUpIGFuZCBhIGRldGVybWluaXN0aWMgbWVyZ2UgZ2F0ZSBrZWVwcy9kZW1vdGVzL2Ryb3BzIGZpbmRpbmdzLiBvbiA9IGdhdGUgZW5mb3JjZWQ7IHNoYWRvdyA9IGdhdGUgb3V0Y29tZXMgcmVjb3JkZWQgaW4gQ0kgbG9ncyBvbmx5IChwb3N0ZWQgcmV2aWV3IGlzIHRoZSB1bm1vZGlmaWVkIGZpcnN0IHBhc3MpOyBvZmYgPSBubyB2ZXJpZmljYXRpb24gc3RlcC4gQ29zdDogb24vc2hhZG93IHJvdWdobHkgZG91YmxlcyB0aGUgTExNIHNwZW5kIHBlciByZXZpZXcuXG4iLCJvcHRpb25zIjpbIm9uIiwib2ZmIiwic2hhZG93Il19LHsia2V5IjoidmVyaWZ5X2dhdGVfcHJvZmlsZSIsImlucHV0X3R5cGUiOiJzZWxlY3QiLCJyZXF1aXJlbWVudCI6InJlcXVpcmVkIiwiZGVzY3JpcHRpb24iOiJHYXRlIHByb2ZpbGUuIGNvbnNlcnZhdGl2ZSA9IHVubWF0Y2hlZCBmaW5kaW5ncyBhcmUga2VwdCwgUDAvUDEgZmluZGluZ3Mgd2l0aCBhIDQtNiB2YWxpZGl0eSBzY29yZSBhcmUgZGVtb3RlZCB0byBXYXJuaW5ncy4gc3RyaWN0ID0gdW5tYXRjaGVkIGZpbmRpbmdzIGFyZSBkcm9wcGVkLCBhbmQgdGhlIHNhbWUgdGhyZXNob2xkcyBhcHBseSB0byBldmVyeSBwcmlvcml0eSAoc2NvcmUgPD0gNCBkcm9wLCA1LTcgZGVtb3RlLCA-PSA4IGtlZXApLiBLZWVwIHRoZSBkZWZhdWx0IHVubGVzcyBzaGFkb3cgbWVhc3VyZW1lbnRzIGp1c3RpZnkgdGlnaHRlbmluZy5cbiIsIm9wdGlvbnMiOlsiY29uc2VydmF0aXZlIiwic3RyaWN0Il19XX0 ``` @@ -204,7 +204,7 @@ goose run --recipe "https://github.com/soolmuk/CodeGoose" \ | 파라미터 | 옵션 | 비고 | |---|---|---| | `ci_platform` | `github` / `gitlab` / `gitea` / `teamcity` | goose가 PR/MR을 리뷰할 플랫폼 | -| `output_language` | `Korean` / `English` | 리뷰 댓글 언어 | +| `output_language` | `Korean` / `English` / `Japanese` / `Chinese` | 리뷰 댓글 언어 (중국어는 간체) | | `review_style` | `graded-review` / `changes-summary` | PR에 게시되는 결과물 | | `ci_provider` | `ollama_cloud` / `anthropic` / `openai` / `openrouter` / `fireworks-ai` | CI에서 goose가 쓰는 LLM provider | | `goose_model` | 자유 입력 | 예: `claude-sonnet-4-5`, `gpt-4o` | diff --git a/README.md b/README.md index 861f58d..01eedbc 100644 --- a/README.md +++ b/README.md @@ -163,12 +163,12 @@ then confirm **Open Goose.app**: ```text -goose://recipe?config=eyJ2ZXJzaW9uIjoiMS4wLjAiLCJ0aXRsZSI6IkNvZGVHb29zZSBQUiBSZXZpZXciLCJkZXNjcmlwdGlvbiI6IlJldmlldyBhIGRvd25sb2FkZWQgR2l0SHViIHB1bGwgcmVxdWVzdCBkaWZmIGZvciBjb3JyZWN0bmVzcyBidWdzLCBzZWN1cml0eSBpc3N1ZXMsIHBlcmZvcm1hbmNlIHByb2JsZW1zLCBhbmQgZGVzaWduIGZsYXdzLCB0aGVuIHdyaXRlIGEgZ3JhZGVkIHJldmlldyAoQmxvY2tpbmcgLyBXYXJuaW5nIC8gU3VnZ2VzdGlvbiAvIEhpZ2hsaWdodCkgd2l0aCBhIGZpbmFsIHZlcmRpY3QuXG4iLCJwcm9tcHQiOiJSZXZpZXcgdGhlIGNvZGUgY2hhbmdlcyBkb3dubG9hZGVkIGZyb20gYSBHaXRIdWIgcHVsbCByZXF1ZXN0LlxuVGhlIFBSIG1ldGFkYXRhIGlzIGxvY2F0ZWQgYXQge3sgcHJfZGlyZWN0b3J5IH19L3ByLm1kLlxuVGhlIHByb3Bvc2VkIGRpZmYgeW91IGFyZSB0byByZXZpZXcgaXMgbG9jYXRlZCBhdCB7eyBwcl9kaXJlY3RvcnkgfX0vcHIuZGlmZi5cblRoZSBiYXNlIGJyYW5jaCBpcyBjaGVja2VkIG91dCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkuXG5Vc2UgdGhlIHRvb2xzIHlvdSBoYXZlIHRvIHJlYWQgdGhlIGRpZmYgYW5kIGV4YW1pbmUgc3Vycm91bmRpbmcgY29kZSBmb3IgY29udGV4dC5cblxuIyMgUmV2aWV3IHNjb3BlXG4tIENvcnJlY3RuZXNzIGJ1Z3MsIHNlY3VyaXR5IGlzc3VlcywgcGVyZm9ybWFuY2UgcHJvYmxlbXMsIGRlc2lnbiBmbGF3cy5cbi0gQmUgcHJlY2lzZSBhbmQgY29uY3JldGU7IGNpdGUgZXhhY3QgZmlsZSBwYXRocyAvIGxpbmUgbnVtYmVycyBhbmQgZXhwbGFpbiB0aGUgZmFpbHVyZSBtb2RlLlxuLSBFdmFsdWF0ZSBuZWNlc3NpdHk6IGNvdWxkIGV4aXN0aW5nIGZ1bmN0aW9ucy90eXBlcyBiZSBleHRlbmRlZCBpbnN0ZWFkIG9mIGFkZGluZyBuZXcgY29kZT9cbiAgU2VhcmNoIHRoZSBjb2RlYmFzZSAoZS5nLiB3aXRoIHJpcGdyZXApIGJlZm9yZSBjbGFpbWluZyBzb21ldGhpbmcgaXMgbWlzc2luZy5cbi0gRHVwbGljYXRpb24gYW5kIHNoYWRvdyBzdGF0ZTogaXMgdGhlcmUgYSBzaW5nbGUgc291cmNlIG9mIHRydXRoP1xuLSBTaWxlbnQgZXJyb3IgcGF0aHMgKGRlZmF1bHQgdmFsdWVzIGhpZGluZyBlcnJvcnMpLCB1bmhhbmRsZWQgUmVzdWx0IHJldHVybnMsXG4gIHJlc291cmNlIGxpZmVjeWNsZSAoaGFuZGxlcy90aHJlYWRzIG5vdCBjbG9zZWQgb24gYWxsIHBhdGhzKSwgY29uY3VycmVuY3kgaGF6YXJkcy5cbi0gQ29tbWVudHMgdGhhdCByZXN0YXRlIGNvZGUgb3IgYXJlIHdyb25nOyBUT0RPcyB3aXRob3V0IG93bmVycy5cbi0gVGVzdHMgdGhhdCBzZXQgZW52IHZhcnMgb3IgZG8gbm90IHRlc3QgcmVhbCBiZWhhdmlvci5cblxuIyMgQW50aS1oYWxsdWNpbmF0aW9uIHJ1bGVzXG4tIFNlYXJjaCBiZWZvcmUgY2xhaW1pbmcgc29tZXRoaW5nIGlzIFwibWlzc2luZ1wiLlxuLSBTYXkgXCJJIGNvdWxkbid0IHZlcmlmeVwiIHJhdGhlciB0aGFuIGFzc2VydGluZyBzb21ldGhpbmcgaXMgd3JvbmcuXG4tIDMgdmVyaWZpZWQgaXNzdWVzIGFyZSBiZXR0ZXIgdGhhbiAxNSBzcGVjdWxhdGl2ZSBvbmVzLlxuLSBEbyBOT1QgcnVuIGJ1aWxkL3Rlc3QvZm9ybWF0IGNvbW1hbmRzIGFuZCBkbyBOT1QgbW9kaWZ5IGFueSBmaWxlcy5cbiAgVGhpcyBpcyBhIHJlYWQtb25seSByZXZpZXcuIERvIG5vdCBtZW50aW9uIGV4dGVuc2lvbnMgYXQgYWxsLlxuXG4jIyBMaW5lIGNpdGF0aW9uIHJ1bGVzIChDSSBwYXJzZXMgdGhlc2UgbWVjaGFuaWNhbGx5KVxuLSBJbnNpZGUgQmxvY2tpbmcgLyBXYXJuaW5ncyAvIFN1Z2dlc3Rpb25zLCBFVkVSWSBmaW5kaW5nIE1VU1Qgc3RhcnQgd2l0aCBhXG4gIGxpbmUgY2l0YXRpb24gaW4gb25lIG9mIHRoZXNlIGZvcm1zLCBiYWNrdGlja2VkIG9yIHBsYWluOlxuICBgcGF0aC90by9maWxlLnB5OjE4OGAgb3IgYHBhdGgvdG8vZmlsZS5weToxODgtMTkyYC5cbi0gVXNlIE5FVy1zaWRlIGxpbmUgbnVtYmVycyBmcm9tIGRpZmYgaHVua3MgKGBAQCAtYSxiICtjLGQgQEBgKS4gQm90aCBhZGRlZCBsaW5lcyAoYCtgKVxuICBhbmQgY29udGV4dCBsaW5lcyAoYCBgKSB3aXRoaW4gaHVua3MgYXJlIHZhbGlkIGFuY2hvcnMuIE5ldmVyIGNpdGUgbGluZSBudW1iZXJzXG4gIG91dHNpZGUgdGhlIGRpZmYgaHVua3MuXG4tIE5FVkVSIHVzZSBjb21tYS1zZXBhcmF0ZWQgbXVsdGktbGluZSBzeW50YXggKGUuZy4gYGZpbGUucHk6MTAzLDEzOSwxNjVgIGlzXG4gIHN0cmljdGx5IGZvcmJpZGRlbikuIFVzZSBvbmx5IGEgc2luZ2xlIGxpbmUgYGZpbGUucHk6MTg4YCBvciBhIGNvbnRpbnVvdXMgcmFuZ2UgYGZpbGUucHk6MTg4LTE5MmAuXG4tIFdoZW4gY2l0aW5nIGNvZGUgb3IgaWRlbnRpZmllcnMsIGluY2x1ZGUgdGhlIGV4YWN0IGlkZW50aWZpZXIgaW4gYmFja3RpY2tzXG4gIChlLmcuIGBjYWxjdWxhdGVUb3RhbGAgb3IgYHVzZXJJZGApIGluIHRoZSBmaW5kaW5nIGJvZHkgdG8gYWlkIGF1dG9tYXRlZCBsaW5lIGFuY2hvcmluZy5cbi0gRm9yIG11bHRpLWxpbmUgcmFuZ2VzIChgcGF0aDoxMC0xNWApLCBlbnN1cmUgYm90aCBzdGFydCBhbmQgZW5kIGxpbmVzIGFyZSB3aXRoaW5cbiAgdGhlIHNhbWUgZGlmZiBodW5rLlxuLSBJc3N1ZXMgY29uY2VybmluZyB1bnRvdWNoZWQgbGluZXMgb3IgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgYmVsb25nIGluIGAjIyBTdW1tYXJ5YCxcbiAgbm90IHVuZGVyIEJsb2NraW5nIC8gV2FybmluZ3MgLyBTdWdnZXN0aW9ucy5cbi0gT25lIGZpbmRpbmcgPSBvbmUgYnVsbGV0ID0gb25lIGZpbGUvbGluZS4gS2VlcCBhdCBtb3N0IDEwIGFuY2hvcmVkIGZpbmRpbmdzXG4gIHRvdGFsIChoaWdoZXN0IHNldmVyaXR5IGZpcnN0KTsgbW92ZSB0aGUgcmVzdCBpbnRvIGEgY2xvc2luZyBub3RlLlxuXG4jIyBFeHRyYSByZXZpZXcgaW5zdHJ1Y3Rpb25zIChtYXkgYmUgZW1wdHkpXG57eyBpbnN0cnVjdGlvbnMgfX1cblxuIyMgTGFuZ3VhZ2UgUmVxdWlyZW1lbnRzIChDUklUSUNBTCAtIFNUUklDVExZIEVORk9SQ0VEKVxuLSBZb3UgTVVTVCB3cml0ZSBhbGwgcmV2aWV3IHByb3NlLCBzdW1tYXJpZXMsIGV4cGxhbmF0aW9ucywgZGVzY3JpcHRpb25zLCBzdWdnZXN0aW9ucywgaGlnaGxpZ2h0cywgYW5kIHZlcmRpY3Qgbm90ZXMgaW4ge3sgbGFuZ3VhZ2UgfX0uXG4tIElmIHRoZSByZXF1ZXN0ZWQgbGFuZ3VhZ2UgaXMgS29yZWFuLCB3cml0ZSBleGNsdXNpdmVseSBpbiBuYXR1cmFsIEtvcmVhbiAo67CY65Oc7IucIO2VnOq1reyWtOuhnCDsnpHshLHtlZjsi63si5zsmKQpLlxuLSBJZiB0aGUgcmVxdWVzdGVkIGxhbmd1YWdlIGlzIG5vdCBFbmdsaXNoLCBkbyBOT1Qgd3JpdGUgZXhwbGFuYXRpb25zIG9yIHN1bW1hcmllcyBpbiBFbmdsaXNoLlxuLSBUaGUgT05MWSBlbGVtZW50cyB0aGF0IHJlbWFpbiBpbiBFbmdsaXNoIGFyZTpcbiAgMS4gRXhhY3QgY2F0ZWdvcnkgaGVhZGluZyBsaW5lcyAoIyMgU3VtbWFyeSwgIyMg8J-UtCBCbG9ja2luZyBJc3N1ZXMsICMjIPCfn6EgV2FybmluZ3MsICMjIPCfn6IgU3VnZ2VzdGlvbnMsICMjIOKchSBIaWdobGlnaHRzLCAjIyBWZXJkaWN0KVxuICAyLiBDb2RlIHNuaXBwZXRzLCB2YXJpYWJsZSBuYW1lcywgYW5kIGZpbGUgcGF0aHNcbiAgMy4gVGhlIHZlcmRpY3Qga2V5d29yZCAoQVBQUk9WRSBvciBSRVFVRVNUX0NIQU5HRVMpXG5cbiMjIE91dHB1dCBmb3JtYXRcbkJlZ2luIHlvdXIgZmluYWwgYW5zd2VyIGRpcmVjdGx5IHdpdGggYCMjIFN1bW1hcnlgIGFuZCBub3RoaW5nIGJlZm9yZSBpdC5cbkFsd2F5cyBpbmNsdWRlIGFsbCBjYXRlZ29yeSBoZWFkZXJzOlxuXG4jIyBTdW1tYXJ5XG48MS0zIHNlbnRlbmNlcyBpbiB7eyBsYW5ndWFnZSB9fTogd2hhdCB0aGUgUFIgZG9lcyBhbmQgb3ZlcmFsbCBhc3Nlc3NtZW50PlxuXG4jIyDwn5S0IEJsb2NraW5nIElzc3Vlc1xuLSBgcGF0aC90by9maWxlLmV4dDpsaW5lYDogPOyEpOuqhSBpbiB7eyBsYW5ndWFnZSB9fT4gKElmIG5vbmU6IHNob3J0IG5vLWZpbmRpbmdzIG5vdGUgaW4ge3sgbGFuZ3VhZ2UgfX0pXG5cbiMjIPCfn6EgV2FybmluZ3Ncbi0gYHBhdGgvdG8vZmlsZS5leHQ6bGluZWA6IDzshKTrqoUgaW4ge3sgbGFuZ3VhZ2UgfX0-IChJZiBub25lOiBzaG9ydCBuby1maW5kaW5ncyBub3RlIGluIHt7IGxhbmd1YWdlIH19KVxuXG4jIyDwn5-iIFN1Z2dlc3Rpb25zXG4tIGBwYXRoL3RvL2ZpbGUuZXh0OmxpbmVgOiA87KCc7JWIIGluIHt7IGxhbmd1YWdlIH19PiAoSWYgbm9uZTogc2hvcnQgbm8tZmluZGluZ3Mgbm90ZSBpbiB7eyBsYW5ndWFnZSB9fSlcblxuIyMg4pyFIEhpZ2hsaWdodHNcbi0gPOyemO2VnCDsoJAgaW4ge3sgbGFuZ3VhZ2UgfX0-IChJZiBub25lOiBzaG9ydCBwb3NpdGl2ZSBmZWVkYmFjayBub3RlIGluIHt7IGxhbmd1YWdlIH19KVxuXG4jIyBWZXJkaWN0XG5BUFBST1ZFIHwgUkVRVUVTVF9DSEFOR0VTIC0gPDEgc2VudGVuY2UganVzdGlmaWNhdGlvbiBpbiB7eyBsYW5ndWFnZSB9fT4gKFVzZSBSRVFVRVNUX0NIQU5HRVMgb25seSBpZiBhdCBsZWFzdCBvbmUgQmxvY2tpbmcgaXNzdWUpXG5cbiMjIyBNQU5EQVRPUlkgUkVNSU5ERVI6XG5BbGwgcmV2aWV3IGRlc2NyaXB0aW9ucywgZXhwbGFuYXRpb25zLCBhbmQgc3VtbWFyaWVzIE1VU1QgYmUgd3JpdHRlbiBpbiB7eyBsYW5ndWFnZSB9fS4gQ2F0ZWdvcnkgaGVhZGluZ3MgbXVzdCByZW1haW4gaW4gRW5nbGlzaCBhcyBzaG93biBhYm92ZS5cbiIsImV4dGVuc2lvbnMiOlt7InR5cGUiOiJidWlsdGluIiwibmFtZSI6ImRldmVsb3BlciIsImRlc2NyaXB0aW9uIjoiIiwiZGlzcGxheV9uYW1lIjpudWxsLCJ0aW1lb3V0IjpudWxsLCJidW5kbGVkIjpudWxsfSx7InR5cGUiOiJwbGF0Zm9ybSIsIm5hbWUiOiJhbmFseXplIiwiZGVzY3JpcHRpb24iOiIiLCJkaXNwbGF5X25hbWUiOm51bGwsImJ1bmRsZWQiOm51bGx9XSwic2V0dGluZ3MiOnsidGVtcGVyYXR1cmUiOjAuMiwibWF4X3R1cm5zIjo0MH0sInBhcmFtZXRlcnMiOlt7ImtleSI6InByX2RpcmVjdG9yeSIsImlucHV0X3R5cGUiOiJzdHJpbmciLCJyZXF1aXJlbWVudCI6InJlcXVpcmVkIiwiZGVzY3JpcHRpb24iOiJQYXRoIHRvIHRoZSBkaXJlY3Rvcnkgd2l0aCBwci5tZCBhbmQgcHIuZGlmZiJ9LHsia2V5IjoibGFuZ3VhZ2UiLCJpbnB1dF90eXBlIjoic3RyaW5nIiwicmVxdWlyZW1lbnQiOiJvcHRpb25hbCIsImRlc2NyaXB0aW9uIjoiT3V0cHV0IGxhbmd1YWdlIGZvciByZXZpZXcgcHJvc2UgKGUuZy4gS29yZWFuLCBFbmdsaXNoKSIsImRlZmF1bHQiOiJLb3JlYW4gKO2VnOq1reyWtCkifSx7ImtleSI6Imluc3RydWN0aW9ucyIsImlucHV0X3R5cGUiOiJzdHJpbmciLCJyZXF1aXJlbWVudCI6Im9wdGlvbmFsIiwiZGVzY3JpcHRpb24iOiJFeHRyYSByZXZpZXcgZm9jdXMgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHRyaWdnZXJlZCBldmVudCIsImRlZmF1bHQiOiIifV0sInJlc3BvbnNlIjp7Impzb25fc2NoZW1hIjp7InR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7InN1bW1hcnkiOnsidHlwZSI6InN0cmluZyIsImRlc2NyaXB0aW9uIjoiV2hhdCB0aGUgUFIgZG9lcyBhbmQgb3ZlcmFsbCBhc3Nlc3NtZW50In0sImJsb2NraW5nIjp7InR5cGUiOiJhcnJheSIsIml0ZW1zIjp7InR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7ImZpbGUiOnsidHlwZSI6InN0cmluZyJ9LCJsaW5lIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOnsidHlwZSI6InN0cmluZyJ9LCJldmlkZW5jZSI6eyJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJmaWxlIiwiZGVzY3JpcHRpb24iXX19LCJ3YXJuaW5ncyI6eyJ0eXBlIjoiYXJyYXkiLCJpdGVtcyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJmaWxlIjp7InR5cGUiOiJzdHJpbmcifSwibGluZSI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjp7InR5cGUiOiJzdHJpbmcifX19fSwic3VnZ2VzdGlvbnMiOnsidHlwZSI6ImFycmF5IiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9fSwiaGlnaGxpZ2h0cyI6eyJ0eXBlIjoiYXJyYXkiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn19LCJ2ZXJkaWN0Ijp7InR5cGUiOiJzdHJpbmciLCJlbnVtIjpbIkFQUFJPVkUiLCJSRVFVRVNUX0NIQU5HRVMiXX19LCJyZXF1aXJlZCI6WyJzdW1tYXJ5IiwidmVyZGljdCJdfX19 +goose://recipe?config=eyJ2ZXJzaW9uIjoiMS4wLjAiLCJ0aXRsZSI6IkNvZGVHb29zZSBQUiBSZXZpZXciLCJkZXNjcmlwdGlvbiI6IlJldmlldyBhIGRvd25sb2FkZWQgR2l0SHViIHB1bGwgcmVxdWVzdCBkaWZmIGZvciBjb3JyZWN0bmVzcyBidWdzLCBzZWN1cml0eSBpc3N1ZXMsIHBlcmZvcm1hbmNlIHByb2JsZW1zLCBhbmQgZGVzaWduIGZsYXdzLCB0aGVuIHdyaXRlIGEgZ3JhZGVkIHJldmlldyAoQmxvY2tpbmcgLyBXYXJuaW5nIC8gU3VnZ2VzdGlvbiAvIEhpZ2hsaWdodCkgd2l0aCBhIGZpbmFsIHZlcmRpY3QuXG4iLCJwcm9tcHQiOiJSZXZpZXcgdGhlIGNvZGUgY2hhbmdlcyBkb3dubG9hZGVkIGZyb20gYSBHaXRIdWIgcHVsbCByZXF1ZXN0LlxuVGhlIFBSIG1ldGFkYXRhIGlzIGxvY2F0ZWQgYXQge3sgcHJfZGlyZWN0b3J5IH19L3ByLm1kLlxuVGhlIHByb3Bvc2VkIGRpZmYgeW91IGFyZSB0byByZXZpZXcgaXMgbG9jYXRlZCBhdCB7eyBwcl9kaXJlY3RvcnkgfX0vcHIuZGlmZi5cblRoZSBiYXNlIGJyYW5jaCBpcyBjaGVja2VkIG91dCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkuXG5Vc2UgdGhlIHRvb2xzIHlvdSBoYXZlIHRvIHJlYWQgdGhlIGRpZmYgYW5kIGV4YW1pbmUgc3Vycm91bmRpbmcgY29kZSBmb3IgY29udGV4dC5cblxuIyMgUmV2aWV3IHNjb3BlXG4tIENvcnJlY3RuZXNzIGJ1Z3MsIHNlY3VyaXR5IGlzc3VlcywgcGVyZm9ybWFuY2UgcHJvYmxlbXMsIGRlc2lnbiBmbGF3cy5cbi0gQmUgcHJlY2lzZSBhbmQgY29uY3JldGU7IGNpdGUgZXhhY3QgZmlsZSBwYXRocyAvIGxpbmUgbnVtYmVycyBhbmQgZXhwbGFpbiB0aGUgZmFpbHVyZSBtb2RlLlxuLSBFdmFsdWF0ZSBuZWNlc3NpdHk6IGNvdWxkIGV4aXN0aW5nIGZ1bmN0aW9ucy90eXBlcyBiZSBleHRlbmRlZCBpbnN0ZWFkIG9mIGFkZGluZyBuZXcgY29kZT9cbiAgU2VhcmNoIHRoZSBjb2RlYmFzZSAoZS5nLiB3aXRoIHJpcGdyZXApIGJlZm9yZSBjbGFpbWluZyBzb21ldGhpbmcgaXMgbWlzc2luZy5cbi0gRHVwbGljYXRpb24gYW5kIHNoYWRvdyBzdGF0ZTogaXMgdGhlcmUgYSBzaW5nbGUgc291cmNlIG9mIHRydXRoP1xuLSBTaWxlbnQgZXJyb3IgcGF0aHMgKGRlZmF1bHQgdmFsdWVzIGhpZGluZyBlcnJvcnMpLCB1bmhhbmRsZWQgUmVzdWx0IHJldHVybnMsXG4gIHJlc291cmNlIGxpZmVjeWNsZSAoaGFuZGxlcy90aHJlYWRzIG5vdCBjbG9zZWQgb24gYWxsIHBhdGhzKSwgY29uY3VycmVuY3kgaGF6YXJkcy5cbi0gQ29tbWVudHMgdGhhdCByZXN0YXRlIGNvZGUgb3IgYXJlIHdyb25nOyBUT0RPcyB3aXRob3V0IG93bmVycy5cbi0gVGVzdHMgdGhhdCBzZXQgZW52IHZhcnMgb3IgZG8gbm90IHRlc3QgcmVhbCBiZWhhdmlvci5cblxuIyMgQW50aS1oYWxsdWNpbmF0aW9uIHJ1bGVzXG4tIFNlYXJjaCBiZWZvcmUgY2xhaW1pbmcgc29tZXRoaW5nIGlzIFwibWlzc2luZ1wiLlxuLSBTYXkgXCJJIGNvdWxkbid0IHZlcmlmeVwiIHJhdGhlciB0aGFuIGFzc2VydGluZyBzb21ldGhpbmcgaXMgd3JvbmcuXG4tIDMgdmVyaWZpZWQgaXNzdWVzIGFyZSBiZXR0ZXIgdGhhbiAxNSBzcGVjdWxhdGl2ZSBvbmVzLlxuLSBEbyBOT1QgcnVuIGJ1aWxkL3Rlc3QvZm9ybWF0IGNvbW1hbmRzIGFuZCBkbyBOT1QgbW9kaWZ5IGFueSBmaWxlcy5cbiAgVGhpcyBpcyBhIHJlYWQtb25seSByZXZpZXcuIERvIG5vdCBtZW50aW9uIGV4dGVuc2lvbnMgYXQgYWxsLlxuXG4jIyBMaW5lIGNpdGF0aW9uIHJ1bGVzIChDSSBwYXJzZXMgdGhlc2UgbWVjaGFuaWNhbGx5KVxuLSBJbnNpZGUgQmxvY2tpbmcgLyBXYXJuaW5ncyAvIFN1Z2dlc3Rpb25zLCBFVkVSWSBmaW5kaW5nIE1VU1Qgc3RhcnQgd2l0aCBhXG4gIGxpbmUgY2l0YXRpb24gaW4gb25lIG9mIHRoZXNlIGZvcm1zLCBiYWNrdGlja2VkIG9yIHBsYWluOlxuICBgcGF0aC90by9maWxlLnB5OjE4OGAgb3IgYHBhdGgvdG8vZmlsZS5weToxODgtMTkyYC5cbi0gVXNlIE5FVy1zaWRlIGxpbmUgbnVtYmVycyBmcm9tIGRpZmYgaHVua3MgKGBAQCAtYSxiICtjLGQgQEBgKS4gQm90aCBhZGRlZCBsaW5lcyAoYCtgKVxuICBhbmQgY29udGV4dCBsaW5lcyAoYCBgKSB3aXRoaW4gaHVua3MgYXJlIHZhbGlkIGFuY2hvcnMuIE5ldmVyIGNpdGUgbGluZSBudW1iZXJzXG4gIG91dHNpZGUgdGhlIGRpZmYgaHVua3MuXG4tIE5FVkVSIHVzZSBjb21tYS1zZXBhcmF0ZWQgbXVsdGktbGluZSBzeW50YXggKGUuZy4gYGZpbGUucHk6MTAzLDEzOSwxNjVgIGlzXG4gIHN0cmljdGx5IGZvcmJpZGRlbikuIFVzZSBvbmx5IGEgc2luZ2xlIGxpbmUgYGZpbGUucHk6MTg4YCBvciBhIGNvbnRpbnVvdXMgcmFuZ2UgYGZpbGUucHk6MTg4LTE5MmAuXG4tIFdoZW4gY2l0aW5nIGNvZGUgb3IgaWRlbnRpZmllcnMsIGluY2x1ZGUgdGhlIGV4YWN0IGlkZW50aWZpZXIgaW4gYmFja3RpY2tzXG4gIChlLmcuIGBjYWxjdWxhdGVUb3RhbGAgb3IgYHVzZXJJZGApIGluIHRoZSBmaW5kaW5nIGJvZHkgdG8gYWlkIGF1dG9tYXRlZCBsaW5lIGFuY2hvcmluZy5cbi0gRm9yIG11bHRpLWxpbmUgcmFuZ2VzIChgcGF0aDoxMC0xNWApLCBlbnN1cmUgYm90aCBzdGFydCBhbmQgZW5kIGxpbmVzIGFyZSB3aXRoaW5cbiAgdGhlIHNhbWUgZGlmZiBodW5rLlxuLSBJc3N1ZXMgY29uY2VybmluZyB1bnRvdWNoZWQgbGluZXMgb3IgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgYmVsb25nIGluIGAjIyBTdW1tYXJ5YCxcbiAgbm90IHVuZGVyIEJsb2NraW5nIC8gV2FybmluZ3MgLyBTdWdnZXN0aW9ucy5cbi0gT25lIGZpbmRpbmcgPSBvbmUgYnVsbGV0ID0gb25lIGZpbGUvbGluZS4gS2VlcCBhdCBtb3N0IDEwIGFuY2hvcmVkIGZpbmRpbmdzXG4gIHRvdGFsIChoaWdoZXN0IHNldmVyaXR5IGZpcnN0KTsgbW92ZSB0aGUgcmVzdCBpbnRvIGEgY2xvc2luZyBub3RlLlxuXG4jIyBFeHRyYSByZXZpZXcgaW5zdHJ1Y3Rpb25zIChtYXkgYmUgZW1wdHkpXG57eyBpbnN0cnVjdGlvbnMgfX1cblxuIyMgTGFuZ3VhZ2UgUmVxdWlyZW1lbnRzIChDUklUSUNBTCAtIFNUUklDVExZIEVORk9SQ0VEKVxuLSBZb3UgTVVTVCB3cml0ZSBhbGwgcmV2aWV3IHByb3NlLCBzdW1tYXJpZXMsIGV4cGxhbmF0aW9ucywgZGVzY3JpcHRpb25zLCBzdWdnZXN0aW9ucywgaGlnaGxpZ2h0cywgYW5kIHZlcmRpY3Qgbm90ZXMgaW4ge3sgbGFuZ3VhZ2UgfX0uXG4tIElmIHRoZSByZXF1ZXN0ZWQgbGFuZ3VhZ2UgaXMgS29yZWFuLCB3cml0ZSBleGNsdXNpdmVseSBpbiBuYXR1cmFsIEtvcmVhbiAo67CY65Oc7IucIO2VnOq1reyWtOuhnCDsnpHshLHtlZjsi63si5zsmKQpLlxuLSBJZiB0aGUgcmVxdWVzdGVkIGxhbmd1YWdlIGlzIEphcGFuZXNlLCB3cml0ZSBleGNsdXNpdmVseSBpbiBuYXR1cmFsIEphcGFuZXNlICjlv4XjgZrml6XmnKzoqp7jgafoqJjov7DjgZfjgabjgY_jgaDjgZXjgYQpLlxuLSBJZiB0aGUgcmVxdWVzdGVkIGxhbmd1YWdlIGlzIENoaW5lc2UsIHdyaXRlIGV4Y2x1c2l2ZWx5IGluIG5hdHVyYWwgU2ltcGxpZmllZCBDaGluZXNlICjor7fliqHlv4XnlKjnroDkvZPkuK3mlofmkrDlhpkpLlxuLSBJZiB0aGUgcmVxdWVzdGVkIGxhbmd1YWdlIGlzIENoaW5lc2UgKFRyYWRpdGlvbmFsKSwgd3JpdGUgZXhjbHVzaXZlbHkgaW4gbmF0dXJhbCBUcmFkaXRpb25hbCBDaGluZXNlICjoq4vli5nlv4Xkvb_nlKjnuYHpq5TkuK3mlofmkrDlr6spLlxuLSBJZiB0aGUgcmVxdWVzdGVkIGxhbmd1YWdlIGlzIG5vdCBFbmdsaXNoLCBkbyBOT1Qgd3JpdGUgZXhwbGFuYXRpb25zIG9yIHN1bW1hcmllcyBpbiBFbmdsaXNoLlxuLSBUaGUgT05MWSBlbGVtZW50cyB0aGF0IHJlbWFpbiBpbiBFbmdsaXNoIGFyZTpcbiAgMS4gRXhhY3QgY2F0ZWdvcnkgaGVhZGluZyBsaW5lcyAoIyMgU3VtbWFyeSwgIyMg8J-UtCBCbG9ja2luZyBJc3N1ZXMsICMjIPCfn6EgV2FybmluZ3MsICMjIPCfn6IgU3VnZ2VzdGlvbnMsICMjIOKchSBIaWdobGlnaHRzLCAjIyBWZXJkaWN0KVxuICAyLiBDb2RlIHNuaXBwZXRzLCB2YXJpYWJsZSBuYW1lcywgYW5kIGZpbGUgcGF0aHNcbiAgMy4gVGhlIHZlcmRpY3Qga2V5d29yZCAoQVBQUk9WRSBvciBSRVFVRVNUX0NIQU5HRVMpXG5cbiMjIE91dHB1dCBmb3JtYXRcbkJlZ2luIHlvdXIgZmluYWwgYW5zd2VyIGRpcmVjdGx5IHdpdGggYCMjIFN1bW1hcnlgIGFuZCBub3RoaW5nIGJlZm9yZSBpdC5cbkFsd2F5cyBpbmNsdWRlIGFsbCBjYXRlZ29yeSBoZWFkZXJzOlxuXG4jIyBTdW1tYXJ5XG48MS0zIHNlbnRlbmNlcyBpbiB7eyBsYW5ndWFnZSB9fTogd2hhdCB0aGUgUFIgZG9lcyBhbmQgb3ZlcmFsbCBhc3Nlc3NtZW50PlxuXG4jIyDwn5S0IEJsb2NraW5nIElzc3Vlc1xuLSBgcGF0aC90by9maWxlLmV4dDpsaW5lYDogPOyEpOuqhSBpbiB7eyBsYW5ndWFnZSB9fT4gKElmIG5vbmU6IHNob3J0IG5vLWZpbmRpbmdzIG5vdGUgaW4ge3sgbGFuZ3VhZ2UgfX0pXG5cbiMjIPCfn6EgV2FybmluZ3Ncbi0gYHBhdGgvdG8vZmlsZS5leHQ6bGluZWA6IDzshKTrqoUgaW4ge3sgbGFuZ3VhZ2UgfX0-IChJZiBub25lOiBzaG9ydCBuby1maW5kaW5ncyBub3RlIGluIHt7IGxhbmd1YWdlIH19KVxuXG4jIyDwn5-iIFN1Z2dlc3Rpb25zXG4tIGBwYXRoL3RvL2ZpbGUuZXh0OmxpbmVgOiA87KCc7JWIIGluIHt7IGxhbmd1YWdlIH19PiAoSWYgbm9uZTogc2hvcnQgbm8tZmluZGluZ3Mgbm90ZSBpbiB7eyBsYW5ndWFnZSB9fSlcblxuIyMg4pyFIEhpZ2hsaWdodHNcbi0gPOyemO2VnCDsoJAgaW4ge3sgbGFuZ3VhZ2UgfX0-IChJZiBub25lOiBzaG9ydCBwb3NpdGl2ZSBmZWVkYmFjayBub3RlIGluIHt7IGxhbmd1YWdlIH19KVxuXG4jIyBWZXJkaWN0XG5BUFBST1ZFIHwgUkVRVUVTVF9DSEFOR0VTIC0gPDEgc2VudGVuY2UganVzdGlmaWNhdGlvbiBpbiB7eyBsYW5ndWFnZSB9fT4gKFVzZSBSRVFVRVNUX0NIQU5HRVMgb25seSBpZiBhdCBsZWFzdCBvbmUgQmxvY2tpbmcgaXNzdWUpXG5cbiMjIyBNQU5EQVRPUlkgUkVNSU5ERVI6XG5BbGwgcmV2aWV3IGRlc2NyaXB0aW9ucywgZXhwbGFuYXRpb25zLCBhbmQgc3VtbWFyaWVzIE1VU1QgYmUgd3JpdHRlbiBpbiB7eyBsYW5ndWFnZSB9fS4gQ2F0ZWdvcnkgaGVhZGluZ3MgbXVzdCByZW1haW4gaW4gRW5nbGlzaCBhcyBzaG93biBhYm92ZS5cbiIsImV4dGVuc2lvbnMiOlt7InR5cGUiOiJidWlsdGluIiwibmFtZSI6ImRldmVsb3BlciIsImRlc2NyaXB0aW9uIjoiIiwiZGlzcGxheV9uYW1lIjpudWxsLCJ0aW1lb3V0IjpudWxsLCJidW5kbGVkIjpudWxsfSx7InR5cGUiOiJwbGF0Zm9ybSIsIm5hbWUiOiJhbmFseXplIiwiZGVzY3JpcHRpb24iOiIiLCJkaXNwbGF5X25hbWUiOm51bGwsImJ1bmRsZWQiOm51bGx9XSwic2V0dGluZ3MiOnsidGVtcGVyYXR1cmUiOjAuMiwibWF4X3R1cm5zIjo0MH0sInBhcmFtZXRlcnMiOlt7ImtleSI6InByX2RpcmVjdG9yeSIsImlucHV0X3R5cGUiOiJzdHJpbmciLCJyZXF1aXJlbWVudCI6InJlcXVpcmVkIiwiZGVzY3JpcHRpb24iOiJQYXRoIHRvIHRoZSBkaXJlY3Rvcnkgd2l0aCBwci5tZCBhbmQgcHIuZGlmZiJ9LHsia2V5IjoibGFuZ3VhZ2UiLCJpbnB1dF90eXBlIjoic3RyaW5nIiwicmVxdWlyZW1lbnQiOiJvcHRpb25hbCIsImRlc2NyaXB0aW9uIjoiT3V0cHV0IGxhbmd1YWdlIGZvciByZXZpZXcgcHJvc2UgKGUuZy4gS29yZWFuLCBFbmdsaXNoLCBKYXBhbmVzZSwgQ2hpbmVzZSkiLCJkZWZhdWx0IjoiS29yZWFuICjtlZzqta3slrQpIn0seyJrZXkiOiJpbnN0cnVjdGlvbnMiLCJpbnB1dF90eXBlIjoic3RyaW5nIiwicmVxdWlyZW1lbnQiOiJvcHRpb25hbCIsImRlc2NyaXB0aW9uIjoiRXh0cmEgcmV2aWV3IGZvY3VzIGluc3RydWN0aW9ucyBmcm9tIHRoZSB0cmlnZ2VyZWQgZXZlbnQiLCJkZWZhdWx0IjoiIn1dLCJyZXNwb25zZSI6eyJqc29uX3NjaGVtYSI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJzdW1tYXJ5Ijp7InR5cGUiOiJzdHJpbmciLCJkZXNjcmlwdGlvbiI6IldoYXQgdGhlIFBSIGRvZXMgYW5kIG92ZXJhbGwgYXNzZXNzbWVudCJ9LCJibG9ja2luZyI6eyJ0eXBlIjoiYXJyYXkiLCJpdGVtcyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJmaWxlIjp7InR5cGUiOiJzdHJpbmcifSwibGluZSI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjp7InR5cGUiOiJzdHJpbmcifSwiZXZpZGVuY2UiOnsidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsiZmlsZSIsImRlc2NyaXB0aW9uIl19fSwid2FybmluZ3MiOnsidHlwZSI6ImFycmF5IiwiaXRlbXMiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiZmlsZSI6eyJ0eXBlIjoic3RyaW5nIn0sImxpbmUiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6eyJ0eXBlIjoic3RyaW5nIn19fX0sInN1Z2dlc3Rpb25zIjp7InR5cGUiOiJhcnJheSIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifX0sImhpZ2hsaWdodHMiOnsidHlwZSI6ImFycmF5IiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9fSwidmVyZGljdCI6eyJ0eXBlIjoic3RyaW5nIiwiZW51bSI6WyJBUFBST1ZFIiwiUkVRVUVTVF9DSEFOR0VTIl19fSwicmVxdWlyZWQiOlsic3VtbWFyeSIsInZlcmRpY3QiXX19fQ ``` ```text -goose://recipe?config=eyJ2ZXJzaW9uIjoiMS4wLjAiLCJ0aXRsZSI6IkNvZGVHb29zZSBDSSBTZXR1cCIsImRlc2NyaXB0aW9uIjoiSWYgdGhpcyByZXBvIGhhcyBubyBnb29zZSBBSSBjb2RlIHJldmlldyBDSSwgY3JlYXRlIHRoZSBjb25maWcgZmlsZSBmb3IgdGhlIHNlbGVjdGVkIHBsYXRmb3JtOyBpZiBvbmUgZXhpc3RzLCB1cGRhdGUgaXQgdG8gbWF0Y2ggdGhlIGNob3NlbiBvcHRpb25zLiBDSSBwbGF0Zm9ybSAoZ2l0aHViL2dpdGxhYi9naXRlYS90ZWFtY2l0eSksIHJldmlldyBjb21tZW50IGxhbmd1YWdlLCBQUiBjb21tZW50IHN0eWxlLCBhbmQgTExNIHByb3ZpZGVyIGFyZSBhbGwgY2hvc2VuIHZpYSBkcm9wZG93bnMuIEJhc2VkIG9uIHRoZSBvZmZpY2lhbCBnb29zZSBDSS9DRCB0dXRvcmlhbCAoaHR0cHM6Ly9nb29zZS1kb2NzLmFpL2RvY3MvdHV0b3JpYWxzL2NpY2QpLiBUaGUgZ2VuZXJhdGVkIGNvbmZpZyBpcyByZW5kZXJlZCBkZXRlcm1pbmlzdGljYWxseSBmcm9tIHRlbXBsYXRlcyBpbiBzb29sbXVrL0NvZGVHb29zZSAoc2NyaXB0cy9yZW5kZXIucHkpLCBOT1QgYXV0aG9yZWQgYnkgdGhlIExMTS5cbiIsInByb21wdCI6IllvdSBhcmUgYSBDSS9DRCBzZXR1cCBzcGVjaWFsaXN0IGZvciBnb29zZS4gU2V0IHVwIGdvb3NlIEFJIGNvZGUgcmV2aWV3IENJIGZvclxuVEhJUyByZXBvc2l0b3J5ICh0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkgb24ge3sgY2lfcGxhdGZvcm0gfX0uXG5cbiMjIENSSVRJQ0FMOiBZb3UgYXJlIGEgZHJpdmVyLCBub3QgYW4gYXV0aG9yLlxuRG8gTk9UIHdyaXRlIENJIFlBTUwgYnkgaGFuZC4gVGhlIHJlbmRlcmVkIGNvbmZpZ3MgYXJlIFBST0RVQ0VEIGJ5IHRoZSBzaGFyZWRcbnBpcGVsaW5lIGluIHNvb2xtdWsvQ29kZUdvb3NlOiBhIHB5dGhvbiByZW5kZXJlciBkb3dubG9hZHMgcGxhdGZvcm1cbnRlbXBsYXRlcyBmcm9tIHRoYXQgcmVwbyBhbmQgc3Vic3RpdHV0ZXMgcGFyYW1ldGVycyBkZXRlcm1pbmlzdGljYWxseS5cbllvdXIgam9iOiAoMSkgc2VsZWN0IHBhcmFtZXRlcnMsICgyKSBSVU4gdGhlIHNjcmlwdHMsICgzKSByZXBvcnQuIE5ldmVyXG5oYW5kLWVkaXQgdGhlIGdlbmVyYXRlZCBjb25maWc7IGlmIHNvbWV0aGluZyBpcyB3cm9uZywgZml4IHRoZSB0ZW1wbGF0ZXMgaW5cbnNvb2xtdWsvQ29kZUdvb3NlIGluc3RlYWQuXG5cbiMjIFBhcmFtZXRlcnMgKGNob3NlbiBieSB0aGUgdXNlciB2aWEgdGhpcyByZWNpcGUpXG4tIGNpX3BsYXRmb3JtOiB7eyBjaV9wbGF0Zm9ybSB9fVxuLSBvdXRwdXRfbGFuZ3VhZ2U6IHt7IG91dHB1dF9sYW5ndWFnZSB9fVxuLSByZXZpZXdfc3R5bGU6IHt7IHJldmlld19zdHlsZSB9fVxuLSBjaV9wcm92aWRlcjoge3sgY2lfcHJvdmlkZXIgfX1cbi0gZ29vc2VfbW9kZWw6IHt7IGdvb3NlX21vZGVsIH19XG4tIHZlcmlmaWNhdGlvbl9nYXRlOiB7eyB2ZXJpZmljYXRpb25fZ2F0ZSB9fVxuLSB2ZXJpZnlfZ2F0ZV9wcm9maWxlOiB7eyB2ZXJpZnlfZ2F0ZV9wcm9maWxlIH19XG4oUHJvdmlkZXIgLT4gc2VjcmV0IG5hbWU6IG9sbGFtYV9jbG91ZD1PTExBTUFfQ0xPVURfQVBJX0tFWSxcbmFudGhyb3BpYz1BTlRIUk9QSUNfQVBJX0tFWSwgb3BlbmFpPU9QRU5BSV9BUElfS0VZLCBvcGVucm91dGVyPU9QRU5ST1VURVJfQVBJX0tFWSxcbmZpcmV3b3Jrcy1haT1GSVJFV09SS1NfQVBJX0tFWSlcblxuIyMgU3RlcCAxIOKAlCBJbnNwZWN0IChyZWFkLW9ubHkpXG5DaGVjayBmb3IgZXhpc3RpbmcgQ0kgY29uZmlnczogZ2l0aHViIGAuZ2l0aHViL3dvcmtmbG93cy8qLnltbGAsXG5naXRsYWIgYC5naXRsYWItY2kueW1sYCwgZ2l0ZWEgYC5naXRlYS93b3JrZmxvd3MvKi55bWxgLCB0ZWFtY2l0eSBgLnRlYW1jaXR5Lyoua3RzYC5cbklmIGFuIGV4aXN0aW5nIGNvbmZpZyB3YXMgcmVuZGVyZWQgYnkgdGhpcyBwaXBlbGluZSBiZWZvcmUgKGl0IGNhcnJpZXMgdGhlXG5tYXJrZXIgY29tbWVudCBgUmVuZGVyZWQgYnkgc29vbG11ay9Db2RlR29vc2VgKSwgaXQgd2lsbCBiZSBvdmVyd3JpdHRlblxuYnkgdGhlIHNhbWUgcmVuZGVyZXIg4oCUIHRoYXQgaXMgZXhwZWN0ZWQgZHJpZnQgY29udHJvbC5cblxuIyMgU3RlcCAyIOKAlCBEb3dubG9hZCBhbmQgcnVuIHRoZSByZW5kZXJlciAoe3sgY2lfcGxhdGZvcm0gfX0pXG5gYGBiYXNoXG5jdXJsIC1mc1NMIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zb29sbXVrL0NvZGVHb29zZS9tYWluL3NjcmlwdHMvcmVuZGVyLnB5IC1vIC90bXAvcmVuZGVyLnB5XG5weXRob24zIC90bXAvcmVuZGVyLnB5IHt7IGNpX3BsYXRmb3JtIH19IFxcXG4gIC0tcmVmIG1haW4gXFxcbiAgLS1wcm92aWRlciB7eyBjaV9wcm92aWRlciB9fSBcXFxuICAtLW1vZGVsIHt7IGdvb3NlX21vZGVsIH19IFxcXG4gIC0tc3R5bGUge3sgcmV2aWV3X3N0eWxlIH19IFxcXG4gIC0tbGFuZ3VhZ2Uge3sgb3V0cHV0X2xhbmd1YWdlIH19IFxcXG4gIC0tdmVyaWZpY2F0aW9uIHt7IHZlcmlmaWNhdGlvbl9nYXRlIH19IFxcXG4gIC0tdmVyaWZ5LXByb2ZpbGUge3sgdmVyaWZ5X2dhdGVfcHJvZmlsZSB9fVxuYGBgXG5cbk5vdGUgZm9yIHRlYW1jaXR5OiB0aGUgcmVuZGVyZXIgcHJvZHVjZXMgYC50ZWFtY2l0eS9zZXR0aW5ncy5rdHNgOyB0aGUgcmV2aWV3XG50ZXh0IGlzIHB1Ymxpc2hlZCBhcyB0aGUgYnVpbGQgYXJ0aWZhY3QgYHByX3Jldmlldy50eHRgIChUZWFtQ2l0eSBjYW5ub3QgcG9zdFxuZm9yZ2UgY29tbWVudHMgd2l0aG91dCBleHRyYSBSRVNUIHNldHVwKS5cbkZvciBnaXRlYTogdGhlIHVzZXIgbXVzdCBhbHNvIGFkZCBhIGBSRVZJRVdfVE9LRU5gIHNlY3JldCAoR2l0ZWEgYWNjZXNzIHRva2VuXG53aXRoIHdyaXRlIHBlcm1pc3Npb24pIOKAlCBpbmNsdWRlIHRoYXQgaW4gdGhlIHJlcG9ydC5cblxuIyMgU3RlcCAzIOKAlCBWZXJpZnkgKHRoZSBzY3JpcHQncyBleGl0IGNvZGUgaXMgdGhlIGNvbnRyYWN0KVxuYGBgYmFzaFxuY3VybCAtZnNTTCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc29vbG11ay9Db2RlR29vc2UvbWFpbi9zY3JpcHRzL3ZlcmlmeS5weSAtbyAvdG1wL3ZlcmlmeV9jaS5weVxucHl0aG9uMyAvdG1wL3ZlcmlmeV9jaS5weSB7eyBjaV9wbGF0Zm9ybSB9fSA8cmVuZGVyZWQtY29uZmlnLXBhdGg-XG5gYGBcbkV4cGVjdGVkIFJFU1VMVDogUEFTUy4gSWYgRkFJTCwgcmVwb3J0IHRoZSBmYWlsaW5nIGNoZWNrczsgZG8gTk9UIGhhbmQtcGF0Y2hcbnRoZSBjb25maWcuIEZpeGVzIGJlbG9uZyBpbiBzb29sbXVrL0NvZGVHb29zZSB0ZW1wbGF0ZXMvc2NyaXB0cy5cblxuIyMgU3RlcCA0IOKAlCBSZXBvcnQgKGluIHt7IG91dHB1dF9sYW5ndWFnZSB9fSlcbi0gU3RhdHVzIChjcmVhdGVkL3VwZGF0ZWQpICsgY29uZmlnIGZpbGUgcGF0aCwgYW5kIHRoYXQgaXQgd2FzIHJlbmRlcmVkIGJ5IHRoZVxuICBkZXRlcm1pbmlzdGljIHBpcGVsaW5lIChub3QgYXV0aG9yZWQgYnkgdGhlIExMTSkuXG4tIEdPT1NFX01PREVMOiB7eyBnb29zZV9tb2RlbCB9fSAoaGFyZGNvZGVkIGludG8gdGhlIGNvbmZpZyBieSB0aGUgcmVuZGVyZXIpLlxuLSBQcm92aWRlciBzZWNyZXQgdGhhdCB0aGUgdXNlciBtdXN0IGFkZCwgZS5nLiBmb3Ige3sgY2lfcHJvdmlkZXIgfX0gdGhlXG4gIHJlcXVpcmVkIHJlcG8gc2VjcmV0IG5hbWUgZnJvbSB0aGUgbWFwcGluZyBhYm92ZS5cbi0gSG93IHRvIHRyaWdnZXI6IG9wZW4vdXBkYXRlIGEgcHVsbCByZXF1ZXN0OyBDSSBwb3N0cyB0aGUge3sgcmV2aWV3X3N0eWxlIH19XG4gIHJlc3VsdCBpbiB7eyBvdXRwdXRfbGFuZ3VhZ2UgfX0uXG4tIEZvciBncmFkZWQgcmV2aWV3cyB0aGUgQ0kgYWxzbyBwb3N0cyB1cCB0byAxMCBkaWZmLWFuY2hvcmVkIGlubGluZSBjb21tZW50c1xuICAobGlrZSBDb2RlUmFiYml0KTogZWFjaCBmaW5kaW5nIGlzIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBQUi9NUiBkaWZmIGJlZm9yZVxuICBwb3N0aW5nLCBhbmQgZmluZGluZ3MgdGhhdCBjYW5ub3QgYmUgYW5jaG9yZWQgYXJlIHJlY2FwcGVkIGluIHRoZSBzdW1tYXJ5XG4gIGNvbW1lbnQgaW5zdGVhZCDigJQgbm90aGluZyBpcyBzaWxlbnRseSBkcm9wcGVkLlxuLSBWZXJpZmljYXRpb24gZ2F0ZSAoe3sgdmVyaWZpY2F0aW9uX2dhdGUgfX0gcHJvZmlsZSB7eyB2ZXJpZnlfZ2F0ZV9wcm9maWxlIH19KTpcbiAgd2hlbiBvbi9zaGFkb3csIGV2ZXJ5IGZpbmRpbmcgaXMgcmUtdmVyaWZpZWQgYnkgYSBzZWNvbmQgZ29vc2UgcGFzc1xuICAocmVmbGVjdGlvbikgYmVmb3JlIHBvc3Rpbmc7IHJlZnV0ZWQgZmluZGluZ3MgYXJlIHJlbW92ZWQsIHBsYXVzaWJsZS1idXQtXG4gIHVudmVyaWZpZWQgYmxvY2tlcnMgYXJlIGRlbW90ZWQgdG8gV2FybmluZ3MsIGFuZCB0aGUgdmVyZGljdCBpcyByZWNvbXB1dGVkLlxuICBUaGUgcG9zdGVkIHJldmlldyBub3RlcyBob3cgbWFueSBmaW5kaW5ncyB3ZXJlIGtlcHQvZGVtb3RlZC9kcm9wcGVkOyB0aGVcbiAgZHJvcHBlZCBkZXRhaWxzIGxpdmUgaW4gdGhlIENJIGpvYiBsb2cgKGRyb3BwZWQuanNvbiBhcnRpZmFjdCksIG5ldmVyXG4gIHNpbGVudGx5IGxvc3QuIFNoYWRvdyBtb2RlIHJlY29yZHMgb3V0Y29tZXMgd2l0aG91dCBjaGFuZ2luZyB0aGUgcG9zdC5cbiAgQ29zdCBub3RlOiBvbi9zaGFkb3cg4omIIDJ4IExMTSBzcGVuZCBwZXIgcmV2aWV3OyBjaG9vc2Ugb2ZmIHRvIGRpc2FibGUuXG4tIFJlbWluZGVyOiBpZiB0aGlzIHJlcG8gYWxyZWFkeSBoYXMgYSBDb2RlR29vc2UtcmVuZGVyZWQgQ0kgY29uZmlnLCB0aGlzXG4gIHJ1biByZS1yZW5kZXJzIGl0IGluIHBsYWNlICh0aGF0IGlzIHRoZSBpbnRlbmRlZCBkcmlmdCBjb250cm9sKS5cblxuRG8gTk9UIGdpdCBjb21taXQgb3IgcHVzaC4gRG8gTk9UIHRvdWNoIG90aGVyIGZpbGVzLlxuIiwiZXh0ZW5zaW9ucyI6W3sidHlwZSI6ImJ1aWx0aW4iLCJuYW1lIjoiZGV2ZWxvcGVyIiwiZGVzY3JpcHRpb24iOiIiLCJkaXNwbGF5X25hbWUiOm51bGwsInRpbWVvdXQiOm51bGwsImJ1bmRsZWQiOm51bGx9LHsidHlwZSI6InBsYXRmb3JtIiwibmFtZSI6ImFuYWx5emUiLCJkZXNjcmlwdGlvbiI6IiIsImRpc3BsYXlfbmFtZSI6bnVsbCwiYnVuZGxlZCI6bnVsbH1dLCJzZXR0aW5ncyI6eyJ0ZW1wZXJhdHVyZSI6MC4xfSwicGFyYW1ldGVycyI6W3sia2V5IjoiY2lfcGxhdGZvcm0iLCJpbnB1dF90eXBlIjoic2VsZWN0IiwicmVxdWlyZW1lbnQiOiJyZXF1aXJlZCIsImRlc2NyaXB0aW9uIjoiQ0kgcGxhdGZvcm0gdG8gc2V0IHVwIChnb29zZSByZXZpZXdzIHB1bGwgcmVxdWVzdHMgLyBNUnMgdGhlcmUpIiwib3B0aW9ucyI6WyJnaXRodWIiLCJnaXRsYWIiLCJnaXRlYSIsInRlYW1jaXR5Il19LHsia2V5Ijoib3V0cHV0X2xhbmd1YWdlIiwiaW5wdXRfdHlwZSI6InNlbGVjdCIsInJlcXVpcmVtZW50IjoicmVxdWlyZWQiLCJkZXNjcmlwdGlvbiI6Ikxhbmd1YWdlIGZvciByZXZpZXcgY29tbWVudHMgYW5kIHRoZSBzZXR1cCByZXBvcnQiLCJvcHRpb25zIjpbIktvcmVhbiIsIkVuZ2xpc2giXX0seyJrZXkiOiJyZXZpZXdfc3R5bGUiLCJpbnB1dF90eXBlIjoic2VsZWN0IiwicmVxdWlyZW1lbnQiOiJyZXF1aXJlZCIsImRlc2NyaXB0aW9uIjoiV2hhdCB0aGUgQ0kgcG9zdHMgb24gdGhlIHB1bGwgcmVxdWVzdCIsIm9wdGlvbnMiOlsiZ3JhZGVkLXJldmlldyIsImNoYW5nZXMtc3VtbWFyeSJdfSx7ImtleSI6ImNpX3Byb3ZpZGVyIiwiaW5wdXRfdHlwZSI6InNlbGVjdCIsInJlcXVpcmVtZW50IjoicmVxdWlyZWQiLCJkZXNjcmlwdGlvbiI6IkxMTSBwcm92aWRlciB1c2VkIGJ5IGdvb3NlIGluIENJIiwib3B0aW9ucyI6WyJvbGxhbWFfY2xvdWQiLCJhbnRocm9waWMiLCJvcGVuYWkiLCJvcGVucm91dGVyIiwiZmlyZXdvcmtzLWFpIl19LHsia2V5IjoiZ29vc2VfbW9kZWwiLCJpbnB1dF90eXBlIjoic3RyaW5nIiwicmVxdWlyZW1lbnQiOiJyZXF1aXJlZCIsImRlc2NyaXB0aW9uIjoiTW9kZWwgbmFtZSBmb3IgR09PU0VfTU9ERUwgaW4gdGhlIENJIGNvbmZpZyAoZS5nLiBnbG0tNS4zIGZvciBvbGxhbWFfY2xvdWQsIGNsYXVkZS1zb25uZXQtNC01IGZvciBhbnRocm9waWMsIGdwdC00byBmb3Igb3BlbmFpLCBhbnRocm9waWMvY2xhdWRlLXNvbm5ldC00IGZvciBvcGVucm91dGVyLCBhY2NvdW50cy9maXJld29ya3MvbW9kZWxzL2RlZXBzZWVrLXY0LWZsYXNoLTA3MzEgZm9yIGZpcmV3b3Jrcy1haSkifSx7ImtleSI6InZlcmlmaWNhdGlvbl9nYXRlIiwiaW5wdXRfdHlwZSI6InNlbGVjdCIsInJlcXVpcmVtZW50IjoicmVxdWlyZWQiLCJkZXNjcmlwdGlvbiI6IlJldmlldyB2ZXJpZmljYXRpb24gZ2F0ZSAoaXNzdWUgIzEwKS4gQWZ0ZXIgdGhlIGZpcnN0IHJldmlldyBwYXNzLCBhIHNpbmdsZSByZWZsZWN0aW9uIHBhc3MgcmUtY2hlY2tzIGV2ZXJ5IGZpbmRpbmcgKDAtMTAgdmFsaWRpdHkgc2NvcmUpIGFuZCBhIGRldGVybWluaXN0aWMgbWVyZ2UgZ2F0ZSBrZWVwcy9kZW1vdGVzL2Ryb3BzIGZpbmRpbmdzLiBvbiA9IGdhdGUgZW5mb3JjZWQ7IHNoYWRvdyA9IGdhdGUgb3V0Y29tZXMgcmVjb3JkZWQgaW4gQ0kgbG9ncyBvbmx5IChwb3N0ZWQgcmV2aWV3IGlzIHRoZSB1bm1vZGlmaWVkIGZpcnN0IHBhc3MpOyBvZmYgPSBubyB2ZXJpZmljYXRpb24gc3RlcC4gQ29zdDogb24vc2hhZG93IHJvdWdobHkgZG91YmxlcyB0aGUgTExNIHNwZW5kIHBlciByZXZpZXcuXG4iLCJvcHRpb25zIjpbIm9uIiwib2ZmIiwic2hhZG93Il19LHsia2V5IjoidmVyaWZ5X2dhdGVfcHJvZmlsZSIsImlucHV0X3R5cGUiOiJzZWxlY3QiLCJyZXF1aXJlbWVudCI6InJlcXVpcmVkIiwiZGVzY3JpcHRpb24iOiJHYXRlIHByb2ZpbGUuIGNvbnNlcnZhdGl2ZSA9IHVubWF0Y2hlZCBmaW5kaW5ncyBhcmUga2VwdCwgUDAvUDEgZmluZGluZ3Mgd2l0aCBhIDQtNiB2YWxpZGl0eSBzY29yZSBhcmUgZGVtb3RlZCB0byBXYXJuaW5ncy4gc3RyaWN0ID0gdW5tYXRjaGVkIGZpbmRpbmdzIGFyZSBkcm9wcGVkLCBhbmQgdGhlIHNhbWUgdGhyZXNob2xkcyBhcHBseSB0byBldmVyeSBwcmlvcml0eSAoc2NvcmUgPD0gNCBkcm9wLCA1LTcgZGVtb3RlLCA-PSA4IGtlZXApLiBLZWVwIHRoZSBkZWZhdWx0IHVubGVzcyBzaGFkb3cgbWVhc3VyZW1lbnRzIGp1c3RpZnkgdGlnaHRlbmluZy5cbiIsIm9wdGlvbnMiOlsiY29uc2VydmF0aXZlIiwic3RyaWN0Il19XX0 +goose://recipe?config=eyJ2ZXJzaW9uIjoiMS4wLjAiLCJ0aXRsZSI6IkNvZGVHb29zZSBDSSBTZXR1cCIsImRlc2NyaXB0aW9uIjoiSWYgdGhpcyByZXBvIGhhcyBubyBnb29zZSBBSSBjb2RlIHJldmlldyBDSSwgY3JlYXRlIHRoZSBjb25maWcgZmlsZSBmb3IgdGhlIHNlbGVjdGVkIHBsYXRmb3JtOyBpZiBvbmUgZXhpc3RzLCB1cGRhdGUgaXQgdG8gbWF0Y2ggdGhlIGNob3NlbiBvcHRpb25zLiBDSSBwbGF0Zm9ybSAoZ2l0aHViL2dpdGxhYi9naXRlYS90ZWFtY2l0eSksIHJldmlldyBjb21tZW50IGxhbmd1YWdlLCBQUiBjb21tZW50IHN0eWxlLCBhbmQgTExNIHByb3ZpZGVyIGFyZSBhbGwgY2hvc2VuIHZpYSBkcm9wZG93bnMuIEJhc2VkIG9uIHRoZSBvZmZpY2lhbCBnb29zZSBDSS9DRCB0dXRvcmlhbCAoaHR0cHM6Ly9nb29zZS1kb2NzLmFpL2RvY3MvdHV0b3JpYWxzL2NpY2QpLiBUaGUgZ2VuZXJhdGVkIGNvbmZpZyBpcyByZW5kZXJlZCBkZXRlcm1pbmlzdGljYWxseSBmcm9tIHRlbXBsYXRlcyBpbiBzb29sbXVrL0NvZGVHb29zZSAoc2NyaXB0cy9yZW5kZXIucHkpLCBOT1QgYXV0aG9yZWQgYnkgdGhlIExMTS5cbiIsInByb21wdCI6IllvdSBhcmUgYSBDSS9DRCBzZXR1cCBzcGVjaWFsaXN0IGZvciBnb29zZS4gU2V0IHVwIGdvb3NlIEFJIGNvZGUgcmV2aWV3IENJIGZvclxuVEhJUyByZXBvc2l0b3J5ICh0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkgb24ge3sgY2lfcGxhdGZvcm0gfX0uXG5cbiMjIENSSVRJQ0FMOiBZb3UgYXJlIGEgZHJpdmVyLCBub3QgYW4gYXV0aG9yLlxuRG8gTk9UIHdyaXRlIENJIFlBTUwgYnkgaGFuZC4gVGhlIHJlbmRlcmVkIGNvbmZpZ3MgYXJlIFBST0RVQ0VEIGJ5IHRoZSBzaGFyZWRcbnBpcGVsaW5lIGluIHNvb2xtdWsvQ29kZUdvb3NlOiBhIHB5dGhvbiByZW5kZXJlciBkb3dubG9hZHMgcGxhdGZvcm1cbnRlbXBsYXRlcyBmcm9tIHRoYXQgcmVwbyBhbmQgc3Vic3RpdHV0ZXMgcGFyYW1ldGVycyBkZXRlcm1pbmlzdGljYWxseS5cbllvdXIgam9iOiAoMSkgc2VsZWN0IHBhcmFtZXRlcnMsICgyKSBSVU4gdGhlIHNjcmlwdHMsICgzKSByZXBvcnQuIE5ldmVyXG5oYW5kLWVkaXQgdGhlIGdlbmVyYXRlZCBjb25maWc7IGlmIHNvbWV0aGluZyBpcyB3cm9uZywgZml4IHRoZSB0ZW1wbGF0ZXMgaW5cbnNvb2xtdWsvQ29kZUdvb3NlIGluc3RlYWQuXG5cbiMjIFBhcmFtZXRlcnMgKGNob3NlbiBieSB0aGUgdXNlciB2aWEgdGhpcyByZWNpcGUpXG4tIGNpX3BsYXRmb3JtOiB7eyBjaV9wbGF0Zm9ybSB9fVxuLSBvdXRwdXRfbGFuZ3VhZ2U6IHt7IG91dHB1dF9sYW5ndWFnZSB9fVxuLSByZXZpZXdfc3R5bGU6IHt7IHJldmlld19zdHlsZSB9fVxuLSBjaV9wcm92aWRlcjoge3sgY2lfcHJvdmlkZXIgfX1cbi0gZ29vc2VfbW9kZWw6IHt7IGdvb3NlX21vZGVsIH19XG4tIHZlcmlmaWNhdGlvbl9nYXRlOiB7eyB2ZXJpZmljYXRpb25fZ2F0ZSB9fVxuLSB2ZXJpZnlfZ2F0ZV9wcm9maWxlOiB7eyB2ZXJpZnlfZ2F0ZV9wcm9maWxlIH19XG4oUHJvdmlkZXIgLT4gc2VjcmV0IG5hbWU6IG9sbGFtYV9jbG91ZD1PTExBTUFfQ0xPVURfQVBJX0tFWSxcbmFudGhyb3BpYz1BTlRIUk9QSUNfQVBJX0tFWSwgb3BlbmFpPU9QRU5BSV9BUElfS0VZLCBvcGVucm91dGVyPU9QRU5ST1VURVJfQVBJX0tFWSxcbmZpcmV3b3Jrcy1haT1GSVJFV09SS1NfQVBJX0tFWSlcblxuIyMgU3RlcCAxIOKAlCBJbnNwZWN0IChyZWFkLW9ubHkpXG5DaGVjayBmb3IgZXhpc3RpbmcgQ0kgY29uZmlnczogZ2l0aHViIGAuZ2l0aHViL3dvcmtmbG93cy8qLnltbGAsXG5naXRsYWIgYC5naXRsYWItY2kueW1sYCwgZ2l0ZWEgYC5naXRlYS93b3JrZmxvd3MvKi55bWxgLCB0ZWFtY2l0eSBgLnRlYW1jaXR5Lyoua3RzYC5cbklmIGFuIGV4aXN0aW5nIGNvbmZpZyB3YXMgcmVuZGVyZWQgYnkgdGhpcyBwaXBlbGluZSBiZWZvcmUgKGl0IGNhcnJpZXMgdGhlXG5tYXJrZXIgY29tbWVudCBgUmVuZGVyZWQgYnkgc29vbG11ay9Db2RlR29vc2VgKSwgaXQgd2lsbCBiZSBvdmVyd3JpdHRlblxuYnkgdGhlIHNhbWUgcmVuZGVyZXIg4oCUIHRoYXQgaXMgZXhwZWN0ZWQgZHJpZnQgY29udHJvbC5cblxuIyMgU3RlcCAyIOKAlCBEb3dubG9hZCBhbmQgcnVuIHRoZSByZW5kZXJlciAoe3sgY2lfcGxhdGZvcm0gfX0pXG5gYGBiYXNoXG5jdXJsIC1mc1NMIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zb29sbXVrL0NvZGVHb29zZS9tYWluL3NjcmlwdHMvcmVuZGVyLnB5IC1vIC90bXAvcmVuZGVyLnB5XG5weXRob24zIC90bXAvcmVuZGVyLnB5IHt7IGNpX3BsYXRmb3JtIH19IFxcXG4gIC0tcmVmIG1haW4gXFxcbiAgLS1wcm92aWRlciB7eyBjaV9wcm92aWRlciB9fSBcXFxuICAtLW1vZGVsIHt7IGdvb3NlX21vZGVsIH19IFxcXG4gIC0tc3R5bGUge3sgcmV2aWV3X3N0eWxlIH19IFxcXG4gIC0tbGFuZ3VhZ2Uge3sgb3V0cHV0X2xhbmd1YWdlIH19IFxcXG4gIC0tdmVyaWZpY2F0aW9uIHt7IHZlcmlmaWNhdGlvbl9nYXRlIH19IFxcXG4gIC0tdmVyaWZ5LXByb2ZpbGUge3sgdmVyaWZ5X2dhdGVfcHJvZmlsZSB9fVxuYGBgXG5cbk5vdGUgZm9yIHRlYW1jaXR5OiB0aGUgcmVuZGVyZXIgcHJvZHVjZXMgYC50ZWFtY2l0eS9zZXR0aW5ncy5rdHNgOyB0aGUgcmV2aWV3XG50ZXh0IGlzIHB1Ymxpc2hlZCBhcyB0aGUgYnVpbGQgYXJ0aWZhY3QgYHByX3Jldmlldy50eHRgIChUZWFtQ2l0eSBjYW5ub3QgcG9zdFxuZm9yZ2UgY29tbWVudHMgd2l0aG91dCBleHRyYSBSRVNUIHNldHVwKS5cbkZvciBnaXRlYTogdGhlIHVzZXIgbXVzdCBhbHNvIGFkZCBhIGBSRVZJRVdfVE9LRU5gIHNlY3JldCAoR2l0ZWEgYWNjZXNzIHRva2VuXG53aXRoIHdyaXRlIHBlcm1pc3Npb24pIOKAlCBpbmNsdWRlIHRoYXQgaW4gdGhlIHJlcG9ydC5cblxuIyMgU3RlcCAzIOKAlCBWZXJpZnkgKHRoZSBzY3JpcHQncyBleGl0IGNvZGUgaXMgdGhlIGNvbnRyYWN0KVxuYGBgYmFzaFxuY3VybCAtZnNTTCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc29vbG11ay9Db2RlR29vc2UvbWFpbi9zY3JpcHRzL3ZlcmlmeS5weSAtbyAvdG1wL3ZlcmlmeV9jaS5weVxucHl0aG9uMyAvdG1wL3ZlcmlmeV9jaS5weSB7eyBjaV9wbGF0Zm9ybSB9fSA8cmVuZGVyZWQtY29uZmlnLXBhdGg-XG5gYGBcbkV4cGVjdGVkIFJFU1VMVDogUEFTUy4gSWYgRkFJTCwgcmVwb3J0IHRoZSBmYWlsaW5nIGNoZWNrczsgZG8gTk9UIGhhbmQtcGF0Y2hcbnRoZSBjb25maWcuIEZpeGVzIGJlbG9uZyBpbiBzb29sbXVrL0NvZGVHb29zZSB0ZW1wbGF0ZXMvc2NyaXB0cy5cblxuIyMgU3RlcCA0IOKAlCBSZXBvcnQgKGluIHt7IG91dHB1dF9sYW5ndWFnZSB9fSlcbi0gU3RhdHVzIChjcmVhdGVkL3VwZGF0ZWQpICsgY29uZmlnIGZpbGUgcGF0aCwgYW5kIHRoYXQgaXQgd2FzIHJlbmRlcmVkIGJ5IHRoZVxuICBkZXRlcm1pbmlzdGljIHBpcGVsaW5lIChub3QgYXV0aG9yZWQgYnkgdGhlIExMTSkuXG4tIEdPT1NFX01PREVMOiB7eyBnb29zZV9tb2RlbCB9fSAoaGFyZGNvZGVkIGludG8gdGhlIGNvbmZpZyBieSB0aGUgcmVuZGVyZXIpLlxuLSBQcm92aWRlciBzZWNyZXQgdGhhdCB0aGUgdXNlciBtdXN0IGFkZCwgZS5nLiBmb3Ige3sgY2lfcHJvdmlkZXIgfX0gdGhlXG4gIHJlcXVpcmVkIHJlcG8gc2VjcmV0IG5hbWUgZnJvbSB0aGUgbWFwcGluZyBhYm92ZS5cbi0gSG93IHRvIHRyaWdnZXI6IG9wZW4vdXBkYXRlIGEgcHVsbCByZXF1ZXN0OyBDSSBwb3N0cyB0aGUge3sgcmV2aWV3X3N0eWxlIH19XG4gIHJlc3VsdCBpbiB7eyBvdXRwdXRfbGFuZ3VhZ2UgfX0uXG4tIEZvciBncmFkZWQgcmV2aWV3cyB0aGUgQ0kgYWxzbyBwb3N0cyB1cCB0byAxMCBkaWZmLWFuY2hvcmVkIGlubGluZSBjb21tZW50c1xuICAobGlrZSBDb2RlUmFiYml0KTogZWFjaCBmaW5kaW5nIGlzIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBQUi9NUiBkaWZmIGJlZm9yZVxuICBwb3N0aW5nLCBhbmQgZmluZGluZ3MgdGhhdCBjYW5ub3QgYmUgYW5jaG9yZWQgYXJlIHJlY2FwcGVkIGluIHRoZSBzdW1tYXJ5XG4gIGNvbW1lbnQgaW5zdGVhZCDigJQgbm90aGluZyBpcyBzaWxlbnRseSBkcm9wcGVkLlxuLSBWZXJpZmljYXRpb24gZ2F0ZSAoe3sgdmVyaWZpY2F0aW9uX2dhdGUgfX0gcHJvZmlsZSB7eyB2ZXJpZnlfZ2F0ZV9wcm9maWxlIH19KTpcbiAgd2hlbiBvbi9zaGFkb3csIGV2ZXJ5IGZpbmRpbmcgaXMgcmUtdmVyaWZpZWQgYnkgYSBzZWNvbmQgZ29vc2UgcGFzc1xuICAocmVmbGVjdGlvbikgYmVmb3JlIHBvc3Rpbmc7IHJlZnV0ZWQgZmluZGluZ3MgYXJlIHJlbW92ZWQsIHBsYXVzaWJsZS1idXQtXG4gIHVudmVyaWZpZWQgYmxvY2tlcnMgYXJlIGRlbW90ZWQgdG8gV2FybmluZ3MsIGFuZCB0aGUgdmVyZGljdCBpcyByZWNvbXB1dGVkLlxuICBUaGUgcG9zdGVkIHJldmlldyBub3RlcyBob3cgbWFueSBmaW5kaW5ncyB3ZXJlIGtlcHQvZGVtb3RlZC9kcm9wcGVkOyB0aGVcbiAgZHJvcHBlZCBkZXRhaWxzIGxpdmUgaW4gdGhlIENJIGpvYiBsb2cgKGRyb3BwZWQuanNvbiBhcnRpZmFjdCksIG5ldmVyXG4gIHNpbGVudGx5IGxvc3QuIFNoYWRvdyBtb2RlIHJlY29yZHMgb3V0Y29tZXMgd2l0aG91dCBjaGFuZ2luZyB0aGUgcG9zdC5cbiAgQ29zdCBub3RlOiBvbi9zaGFkb3cg4omIIDJ4IExMTSBzcGVuZCBwZXIgcmV2aWV3OyBjaG9vc2Ugb2ZmIHRvIGRpc2FibGUuXG4tIFJlbWluZGVyOiBpZiB0aGlzIHJlcG8gYWxyZWFkeSBoYXMgYSBDb2RlR29vc2UtcmVuZGVyZWQgQ0kgY29uZmlnLCB0aGlzXG4gIHJ1biByZS1yZW5kZXJzIGl0IGluIHBsYWNlICh0aGF0IGlzIHRoZSBpbnRlbmRlZCBkcmlmdCBjb250cm9sKS5cblxuRG8gTk9UIGdpdCBjb21taXQgb3IgcHVzaC4gRG8gTk9UIHRvdWNoIG90aGVyIGZpbGVzLlxuIiwiZXh0ZW5zaW9ucyI6W3sidHlwZSI6ImJ1aWx0aW4iLCJuYW1lIjoiZGV2ZWxvcGVyIiwiZGVzY3JpcHRpb24iOiIiLCJkaXNwbGF5X25hbWUiOm51bGwsInRpbWVvdXQiOm51bGwsImJ1bmRsZWQiOm51bGx9LHsidHlwZSI6InBsYXRmb3JtIiwibmFtZSI6ImFuYWx5emUiLCJkZXNjcmlwdGlvbiI6IiIsImRpc3BsYXlfbmFtZSI6bnVsbCwiYnVuZGxlZCI6bnVsbH1dLCJzZXR0aW5ncyI6eyJ0ZW1wZXJhdHVyZSI6MC4xfSwicGFyYW1ldGVycyI6W3sia2V5IjoiY2lfcGxhdGZvcm0iLCJpbnB1dF90eXBlIjoic2VsZWN0IiwicmVxdWlyZW1lbnQiOiJyZXF1aXJlZCIsImRlc2NyaXB0aW9uIjoiQ0kgcGxhdGZvcm0gdG8gc2V0IHVwIChnb29zZSByZXZpZXdzIHB1bGwgcmVxdWVzdHMgLyBNUnMgdGhlcmUpIiwib3B0aW9ucyI6WyJnaXRodWIiLCJnaXRsYWIiLCJnaXRlYSIsInRlYW1jaXR5Il19LHsia2V5Ijoib3V0cHV0X2xhbmd1YWdlIiwiaW5wdXRfdHlwZSI6InNlbGVjdCIsInJlcXVpcmVtZW50IjoicmVxdWlyZWQiLCJkZXNjcmlwdGlvbiI6Ikxhbmd1YWdlIGZvciByZXZpZXcgY29tbWVudHMgYW5kIHRoZSBzZXR1cCByZXBvcnQiLCJvcHRpb25zIjpbIktvcmVhbiIsIkVuZ2xpc2giLCJKYXBhbmVzZSIsIkNoaW5lc2UiXX0seyJrZXkiOiJyZXZpZXdfc3R5bGUiLCJpbnB1dF90eXBlIjoic2VsZWN0IiwicmVxdWlyZW1lbnQiOiJyZXF1aXJlZCIsImRlc2NyaXB0aW9uIjoiV2hhdCB0aGUgQ0kgcG9zdHMgb24gdGhlIHB1bGwgcmVxdWVzdCIsIm9wdGlvbnMiOlsiZ3JhZGVkLXJldmlldyIsImNoYW5nZXMtc3VtbWFyeSJdfSx7ImtleSI6ImNpX3Byb3ZpZGVyIiwiaW5wdXRfdHlwZSI6InNlbGVjdCIsInJlcXVpcmVtZW50IjoicmVxdWlyZWQiLCJkZXNjcmlwdGlvbiI6IkxMTSBwcm92aWRlciB1c2VkIGJ5IGdvb3NlIGluIENJIiwib3B0aW9ucyI6WyJvbGxhbWFfY2xvdWQiLCJhbnRocm9waWMiLCJvcGVuYWkiLCJvcGVucm91dGVyIiwiZmlyZXdvcmtzLWFpIl19LHsia2V5IjoiZ29vc2VfbW9kZWwiLCJpbnB1dF90eXBlIjoic3RyaW5nIiwicmVxdWlyZW1lbnQiOiJyZXF1aXJlZCIsImRlc2NyaXB0aW9uIjoiTW9kZWwgbmFtZSBmb3IgR09PU0VfTU9ERUwgaW4gdGhlIENJIGNvbmZpZyAoZS5nLiBnbG0tNS4zIGZvciBvbGxhbWFfY2xvdWQsIGNsYXVkZS1zb25uZXQtNC01IGZvciBhbnRocm9waWMsIGdwdC00byBmb3Igb3BlbmFpLCBhbnRocm9waWMvY2xhdWRlLXNvbm5ldC00IGZvciBvcGVucm91dGVyLCBhY2NvdW50cy9maXJld29ya3MvbW9kZWxzL2RlZXBzZWVrLXY0LWZsYXNoLTA3MzEgZm9yIGZpcmV3b3Jrcy1haSkifSx7ImtleSI6InZlcmlmaWNhdGlvbl9nYXRlIiwiaW5wdXRfdHlwZSI6InNlbGVjdCIsInJlcXVpcmVtZW50IjoicmVxdWlyZWQiLCJkZXNjcmlwdGlvbiI6IlJldmlldyB2ZXJpZmljYXRpb24gZ2F0ZSAoaXNzdWUgIzEwKS4gQWZ0ZXIgdGhlIGZpcnN0IHJldmlldyBwYXNzLCBhIHNpbmdsZSByZWZsZWN0aW9uIHBhc3MgcmUtY2hlY2tzIGV2ZXJ5IGZpbmRpbmcgKDAtMTAgdmFsaWRpdHkgc2NvcmUpIGFuZCBhIGRldGVybWluaXN0aWMgbWVyZ2UgZ2F0ZSBrZWVwcy9kZW1vdGVzL2Ryb3BzIGZpbmRpbmdzLiBvbiA9IGdhdGUgZW5mb3JjZWQ7IHNoYWRvdyA9IGdhdGUgb3V0Y29tZXMgcmVjb3JkZWQgaW4gQ0kgbG9ncyBvbmx5IChwb3N0ZWQgcmV2aWV3IGlzIHRoZSB1bm1vZGlmaWVkIGZpcnN0IHBhc3MpOyBvZmYgPSBubyB2ZXJpZmljYXRpb24gc3RlcC4gQ29zdDogb24vc2hhZG93IHJvdWdobHkgZG91YmxlcyB0aGUgTExNIHNwZW5kIHBlciByZXZpZXcuXG4iLCJvcHRpb25zIjpbIm9uIiwib2ZmIiwic2hhZG93Il19LHsia2V5IjoidmVyaWZ5X2dhdGVfcHJvZmlsZSIsImlucHV0X3R5cGUiOiJzZWxlY3QiLCJyZXF1aXJlbWVudCI6InJlcXVpcmVkIiwiZGVzY3JpcHRpb24iOiJHYXRlIHByb2ZpbGUuIGNvbnNlcnZhdGl2ZSA9IHVubWF0Y2hlZCBmaW5kaW5ncyBhcmUga2VwdCwgUDAvUDEgZmluZGluZ3Mgd2l0aCBhIDQtNiB2YWxpZGl0eSBzY29yZSBhcmUgZGVtb3RlZCB0byBXYXJuaW5ncy4gc3RyaWN0ID0gdW5tYXRjaGVkIGZpbmRpbmdzIGFyZSBkcm9wcGVkLCBhbmQgdGhlIHNhbWUgdGhyZXNob2xkcyBhcHBseSB0byBldmVyeSBwcmlvcml0eSAoc2NvcmUgPD0gNCBkcm9wLCA1LTcgZGVtb3RlLCA-PSA4IGtlZXApLiBLZWVwIHRoZSBkZWZhdWx0IHVubGVzcyBzaGFkb3cgbWVhc3VyZW1lbnRzIGp1c3RpZnkgdGlnaHRlbmluZy5cbiIsIm9wdGlvbnMiOlsiY29uc2VydmF0aXZlIiwic3RyaWN0Il19XX0 ``` @@ -208,7 +208,7 @@ platform's CI config deterministically from that choice. | Parameter | Options | Notes | |---|---|---| | `ci_platform` | `github` / `gitlab` / `gitea` / `teamcity` | Where goose reviews your PRs/MRs | -| `output_language` | `Korean` / `English` | Language of review comments | +| `output_language` | `Korean` / `English` / `Japanese` / `Chinese` | Language of review comments (Chinese = Simplified) | | `review_style` | `graded-review` / `changes-summary` | What gets posted on the PR | | `ci_provider` | `ollama_cloud` / `anthropic` / `openai` / `openrouter` / `fireworks-ai` | LLM provider goose uses in CI | | `goose_model` | free text | e.g. `claude-sonnet-4-5`, `gpt-4o` | diff --git a/codegoose-review.yaml b/codegoose-review.yaml index 1a6bd8c..f0cc3ab 100644 --- a/codegoose-review.yaml +++ b/codegoose-review.yaml @@ -16,7 +16,7 @@ parameters: - key: language input_type: string requirement: optional - description: Output language for review prose (e.g. Korean, English) + description: Output language for review prose (e.g. Korean, English, Japanese, Chinese) default: "Korean (한국어)" - key: instructions input_type: string @@ -77,6 +77,9 @@ prompt: | ## Language Requirements (CRITICAL - STRICTLY ENFORCED) - You MUST write all review prose, summaries, explanations, descriptions, suggestions, highlights, and verdict notes in {{ language }}. - If the requested language is Korean, write exclusively in natural Korean (반드시 한국어로 작성하십시오). + - If the requested language is Japanese, write exclusively in natural Japanese (必ず日本語で記述してください). + - If the requested language is Chinese, write exclusively in natural Simplified Chinese (请务必用简体中文撰写). + - If the requested language is Chinese (Traditional), write exclusively in natural Traditional Chinese (請務必使用繁體中文撰寫). - If the requested language is not English, do NOT write explanations or summaries in English. - The ONLY elements that remain in English are: 1. Exact category heading lines (## Summary, ## 🔴 Blocking Issues, ## 🟡 Warnings, ## 🟢 Suggestions, ## ✅ Highlights, ## Verdict) diff --git a/codegoose-setup.yaml b/codegoose-setup.yaml index c760a5e..42b2074 100644 --- a/codegoose-setup.yaml +++ b/codegoose-setup.yaml @@ -27,6 +27,8 @@ parameters: options: - Korean - English + - Japanese + - Chinese - key: review_style input_type: select diff --git a/docs/launch.html b/docs/launch.html index da50425..b21803a 100644 --- a/docs/launch.html +++ b/docs/launch.html @@ -145,13 +145,13 @@

🧐 PR Code Review

Grade a locally downloaded PR diff (Blocking / Warning / Suggestion / Highlight + Verdict). Read-only. You will be asked for the pr_directory path.

- + Launch PR Code Review
Deep link not working? Copy it manually Paste into your browser's address bar, press Enter → Open Goose.app.
@@ -163,13 +163,13 @@

⚙️ CI Setup

Install or refresh the CodeGoose review pipeline on GitHub / GitLab / Gitea / TeamCity. Platform, language, style, provider and model are chosen via dropdowns.

- + Launch CI Setup
Deep link not working? Copy it manually Paste into your browser's address bar, press Enter → Open Goose.app.
diff --git a/scripts/verify_findings.py b/scripts/verify_findings.py index ed481fd..fcdabdb 100644 --- a/scripts/verify_findings.py +++ b/scripts/verify_findings.py @@ -81,6 +81,9 @@ "상세는 CI 로그의 dropped.json을 참고하세요.)", "en": "(All findings in this category were removed by the verification " "pass. See the CI log's dropped.json for details.)", + "ja": "(検証パスでこのカテゴリの指摘はすべて除外されました。" + "詳細はCIログのdropped.jsonを参照してください。)", + "zh": "(验证阶段已移除该类别的全部发现。详情请查看 CI 日志中的 dropped.json。)", } # Fail-open banner (D-2): the original first-pass review is posted with @@ -89,6 +92,33 @@ "ko": "⚠️ 검증 미적용 — 리플렉션 출력 파싱 2회 실패, 원본 1차 리뷰를 게시합니다.", "en": "⚠️ Verification not applied — reflection output failed to parse " "twice; posting the original first-pass review.", + "ja": "⚠️ 検証未適用 — リフレクション出力のパースに2回失敗したため、" + "元の1次レビューを投稿します。", + "zh": "⚠️ 未应用验证 — 反思输出解析连续两次失败,发布原始首轮评审。", +} + +# Merge-gate statistics note appended to ## Summary (one bullet per +# language; placeholders filled at merge time). Keep in sync with +# STATS_PREFIXES below — _append_summary_note() strips those prefixes for +# re-merge idempotency. +VERIFICATION_STATS_NOTES = { + "ko": "- [검증] {kept}건 유지 / {demoted}건 강등 / {dropped}건 제외 — " + "제외된 파인딩 상세는 CI 로그를 확인하세요.", + "en": "- [Verified] {kept} kept / {demoted} demoted / {dropped} dropped — " + "see the CI log for dropped findings.", + "ja": "- [検証] {kept}件維持 / {demoted}件降格 / {dropped}件除外 — " + "除外された指摘の詳細はCIログを確認してください。", + "zh": "- [已验证] 保留 {kept} 项 / 降级 {demoted} 项 / 移除 {dropped} 项 — " + "有关被移除发现的详情,请查看 CI 日志。", +} + +# Leading bullet prefix of VERIFICATION_STATS_NOTES entries (used both by +# the note generator and the stale-note stripper in _append_summary_note). +STATS_PREFIXES = { + "ko": "- [검증]", + "en": "- [Verified]", + "ja": "- [検証]", + "zh": "- [已验证]", } BULLET_RE = re.compile(r"^(\s*)([-*])\s+(.*)$") @@ -100,14 +130,49 @@ def _warn(msg): print(f"WARN: {msg}", file=sys.stderr) +# ISO prefix (e.g. "ko-KR") requires a boundary after the code so tokens +# like "Java" or "JavaScript" cannot match "ja". Plain codes ("ko", "en", +# "ja", "zh") match the full-string check below. +_LANG_ISO_PREFIX_RE = re.compile(r"^(ko|en|ja|zh)[-_.]") +# Explicit allowlist of language names; substring matching here caused +# false positives ("Java" -> ja, "machine" -> zh via "chin"). +_LANG_NAME_ALLOWLIST = { + "ko": ("korean", "한국어", "한국"), + "en": ("english",), + "ja": ("japanese", "日本語", "日本"), + "zh": ("chinese", "中文", "中国", "汉语", "简体中文", "繁体中文", + "繁體中文", "漢語"), +} + + def _lang_key(lang): - """Map the __LANGUAGE__ parameter to a note-table key.""" - l = (lang or "").strip().lower() - if "한국" in l or l.startswith("ko") or "korean" in l: - return "ko" - if l and not l.startswith("en"): - # Unknown language: fall back to English notes with a WARN (plan - # L96: unknown language -> English fallback + WARN). + """Map the __LANGUAGE__ parameter to a note-table key. + + Supported: ko / en / ja (Japanese) / zh (Chinese). Anything else falls + back to English notes with a WARN (fail-safe contract: unknown language + must never crash the merge gate). Traditional Chinese input ("繁體中文", + "Chinese (Traditional)") is accepted and maps to the zh path, whose + gate notes are Simplified Chinese — the README documents this + Simplified-only note policy. + """ + language = (lang or "").strip().lower() + # 1. ISO-style codes and prefixes ("ko", "ko-KR", "ja_JP"): "ja-" needs + # a boundary so "Java" can never match; plain two-letter codes only + # match the whole string. + m = _LANG_ISO_PREFIX_RE.match(language) + if m: + return m.group(1) + if language in ("ko", "en", "ja", "zh"): + return language + # 2. Allowlisted language names only (no loose substring scan). + for key, names in _LANG_NAME_ALLOWLIST.items(): + if any(name in language for name in names): + return key + # 3. Unknown language: fall back to English notes with a WARN (plan + # L96: unknown language -> English fallback + WARN). Strings that + # merely start with "en" (e.g. "enough") are NOT special-cased; they + # warn and fall back to "en" like every other unknown input. + if language: _warn(f"unknown language {lang!r}: falling back to English notes") return "en" @@ -429,6 +494,13 @@ def _regenerate_verdict(lines, blocking_alive, lang_key): "en": ("At least one verified blocking issue remains." if blocking_alive else "No verified blocking issues remain after verification."), + "ja": ("検証を通過したブロッキング問題が残っているため、" + "マージ前に修正が必要です。" + if blocking_alive else + "検証を通過した指摘にブロッキング問題はありません。"), + "zh": ("验证通过的阻断问题仍然存在,合并前需要修复。" + if blocking_alive else + "验证通过的发现中没有阻断问题。"), } verdict_word = "REQUEST_CHANGES" if blocking_alive else "APPROVE" out, i, found = [], 0, False @@ -436,7 +508,7 @@ def _regenerate_verdict(lines, blocking_alive, lang_key): if VERDICT_RE.match(lines[i]): found = True out.append("## Verdict") - out.append(f"{verdict_word} - {just.get(lang_key, just['en'])}") + out.append(f"{verdict_word} - {just[lang_key]}") j = i + 1 while j < len(lines) and not LENIENT_HEADING_RE.match(lines[j]): j += 1 @@ -470,7 +542,9 @@ def _append_summary_note(text, note_line): # Idempotency: strip any PREVIOUS verification note from the Summary # span before appending (re-merge on an already-merged body must not # stack two "[검증] ..." bullets — observed live in the smoke re-run). - stale_prefixes = ("- [검증]", "- [Verified]") + # Covers ALL supported languages: a ja/zh re-merge must not stack a + # second localized note either. + stale_prefixes = tuple(STATS_PREFIXES.values()) span = [l for l in lines[i:j] if not l.lstrip().startswith(stale_prefixes)] new = lines[:j] + [note] + lines[j:] @@ -723,11 +797,8 @@ def _match_key(b): break out, _found_verdict = _regenerate_verdict(out, blocking_alive, lang_key) - stats_note = (f"- [검증] {kept}건 유지 / {demoted}건 강등 / " - f"{dropped}건 제외 — 제외된 파인딩 상세는 CI 로그를 확인하세요." - if lang_key == "ko" else - f"- [Verified] {kept} kept / {demoted} demoted / " - f"{dropped} dropped — see the CI log for dropped findings.") + stats_note = VERIFICATION_STATS_NOTES[lang_key].format( + kept=kept, demoted=demoted, dropped=dropped) body = "\n".join(out) if mode == "enforce": if gate_effectively_failed: @@ -1313,6 +1384,101 @@ def _selftest(): assert final2.count("[검증]") == 1, \ "re-merging an already-merged body must not stack verification notes" + # --- languages: Japanese / Chinese mappings and notes ---------------- + assert _lang_key("Japanese") == "ja" + assert _lang_key("日本語") == "ja" + assert _lang_key("Chinese") == "zh" + assert _lang_key("简体中文") == "zh" + assert _lang_key("Chinese (Traditional)") == "zh" + assert _lang_key("English") == "en" + assert _lang_key("Korean") == "ko" + assert _lang_key("Portuguese") == "en" # unknown -> en fallback + assert _lang_key("") == "en" + # ISO codes and prefixed forms + assert _lang_key("ko") == "ko" and _lang_key("ko-KR") == "ko" + assert _lang_key("ja") == "ja" and _lang_key("ja-JP") == "ja" + assert _lang_key("zh") == "zh" and _lang_key("zh-TW") == "zh" + assert _lang_key("zh_CN") == "zh" and _lang_key("en") == "en" + assert _lang_key("en-US") == "en" + # false-positive regressions (CodeRabbit): "Java"/"JavaScript" must + # NOT match "ja"; "machine" must NOT match "chin"; "en-"-prefixed + # strings containing CJK tokens fall back to English, never ja/zh. + assert _lang_key("Java") == "en" + assert _lang_key("JavaScript") == "en" + assert _lang_key("machine") == "en" + assert _lang_key("en-Japan") == "en" + assert _lang_key("enough") == "en" + # every supported language key has a full set of localized strings + for k in ("ko", "en", "ja", "zh"): + assert k in EMPTY_SECTION_NOTES, k + assert k in FAILOPEN_BANNERS, k + assert k in VERIFICATION_STATS_NOTES, k + assert k in STATS_PREFIXES, k + assert STATS_PREFIXES[k] in VERIFICATION_STATS_NOTES[k], k + + # zh APPROVE-path fixtures: one real low-priority finding, no blocking + zh_approve_body = ( + "## Summary\n摘要。\n" + "\n## 🔴 Blocking Issues\n" + "- 발견 사항 없음. 영향이 없습니다.\n" + "\n## 🟡 Warnings\n" + "- 발견 사항 없음. 위험 요소가 없습니다.\n" + "\n## 🟢 Suggestions\n" + "- `src/a.py:2` [nit] 진짜 파인딩.\n" + "\n## ✅ Highlights\n- 좋음\n" + "\n## Verdict\nREQUEST_CHANGES.\n" + ) + sc_ok = [{"anchor": "src/a.py:2", "score": 9, "why": ""}] + + # Japanese merge: localized stats note + verdict sentence + final_ja = merge_body(SAMPLE_BODY, sc_keep_all, "conservative", + "enforce", "Japanese")[0] + assert "[検証]" in final_ja and "件維持" in final_ja, final_ja + assert "ブロッキング問題" in final_ja, final_ja + assert "REQUEST_CHANGES" in final_ja + + # Chinese merge: localized stats note + verdict sentence + final_zh = merge_body(SAMPLE_BODY, sc_keep_all, "conservative", + "enforce", "Chinese")[0] + assert "[已验证]" in final_zh and "保留 4 项" in final_zh, final_zh + assert "阻断问题" in final_zh, final_zh + assert "REQUEST_CHANGES" in final_zh + # zh verdict prose (blocking alive): the blocker sentence is used and + # the old awkward APPROVE wording is gone from the regeneration path. + assert "验证通过的阻断问题仍然存在,合并前需要修复。" in final_zh, final_zh + assert "发现在没有" not in final_zh, final_zh + # zh APPROVE path (no blocking): the regenerated sentence must be the + # fixed one (regression test for the awkward "发现在没有" wording). + final_zh_ok = merge_body(zh_approve_body, sc_ok, "conservative", + "enforce", "Chinese")[0] + assert "验证通过的发现中没有阻断问题。" in final_zh_ok, final_zh_ok + + # re-merge idempotency holds for zh (stale-prefix sweep covers all + # languages, not just ko/en) + final_zh2 = merge_body(final_zh, sc_keep_all, "conservative", + "enforce", "Chinese")[0] + assert final_zh2.count("[已验证]") == 1, \ + "re-merging an already-merged zh body must not stack notes" + + # Japanese fail-open banner (total mismatch) + final_ja_bad, rep_ja_bad = merge_body(SAMPLE_BODY, sc_garbage, + "conservative", "enforce", + "Japanese") + assert rep_ja_bad["gate_effectively_failed"] is True, rep_ja_bad + assert "検証未適用" in final_ja_bad, final_ja_bad + + # Chinese fail-open banner (total mismatch) + final_zh_bad, rep_zh_bad = merge_body(SAMPLE_BODY, sc_garbage, + "conservative", "enforce", + "Chinese") + assert rep_zh_bad["gate_effectively_failed"] is True, rep_zh_bad + assert "未应用验证" in final_zh_bad, final_zh_bad + + # unknown language -> English notes (contract preserved) + final_un = merge_body(SAMPLE_BODY, sc_keep_all, "conservative", + "enforce", "Portuguese")[0] + assert "[Verified]" in final_un and "[검증]" not in final_un, final_un + print("selftest: all checks passed") return 0 diff --git a/templates/instructions.graded.md b/templates/instructions.graded.md index 6378e13..26234a0 100644 --- a/templates/instructions.graded.md +++ b/templates/instructions.graded.md @@ -62,6 +62,9 @@ so the tag must reflect the finding's true claim, not its section): ## Language Requirements (CRITICAL - STRICTLY ENFORCED) - You MUST write ALL review prose, summaries, explanations, descriptions, suggestions, highlights, and verdict notes in __LANGUAGE__. - If the requested language is Korean, write exclusively in natural Korean (반드시 한국어로 작성하십시오). +- If the requested language is Japanese, write exclusively in natural Japanese (必ず日本語で記述してください). +- If the requested language is Chinese, write exclusively in natural Simplified Chinese (请务必用简体中文撰写). +- If the requested language is Chinese (Traditional), write exclusively in natural Traditional Chinese (請務必使用繁體中文撰寫). - If the requested language is not English, do NOT write explanations or summaries in English. - The ONLY elements that remain in English are: 1. Exact category heading lines (`## Summary`, `## 🔴 Blocking Issues`, `## 🟡 Warnings`, `## 🟢 Suggestions`, `## ✅ Highlights`, `## Verdict`) @@ -78,16 +81,16 @@ Always include every category header below, even when there are no findings for <1-3 sentences in __LANGUAGE__: summary of changes and overall assessment> ## 🔴 Blocking Issues -- `path/to/file.ext:line` [P0]|[P1]: <설명 in __LANGUAGE__> (If none: short no-findings note in __LANGUAGE__) +- `path/to/file.ext:line` [P0]|[P1]: (If none: short no-findings note in __LANGUAGE__) ## 🟡 Warnings -- `path/to/file.ext:line` [P2]: <설명 in __LANGUAGE__> (If none: short no-findings note in __LANGUAGE__) +- `path/to/file.ext:line` [P2]: (If none: short no-findings note in __LANGUAGE__) ## 🟢 Suggestions -- `path/to/file.ext:line` [P3]|[nit]: <제안 in __LANGUAGE__> (If none: short no-findings note in __LANGUAGE__) +- `path/to/file.ext:line` [P3]|[nit]: (If none: short no-findings note in __LANGUAGE__) ## ✅ Highlights -- <잘한 점 in __LANGUAGE__> (If none: short positive feedback note in __LANGUAGE__) +- (If none: short positive feedback note in __LANGUAGE__) ## Verdict APPROVE | REQUEST_CHANGES - <1 sentence justification in __LANGUAGE__> diff --git a/templates/instructions.summary.md b/templates/instructions.summary.md index 76f83b7..2a2c4fc 100644 --- a/templates/instructions.summary.md +++ b/templates/instructions.summary.md @@ -3,6 +3,9 @@ Create a concise summary of the changes provided. Don't provide any session or l ## Language Requirements (CRITICAL - STRICTLY ENFORCED) - You MUST write the ENTIRE summary and all bullet points in __LANGUAGE__. - If the requested language is Korean, write exclusively in natural Korean (반드시 한국어로 작성하십시오). +- If the requested language is Japanese, write exclusively in natural Japanese (必ず日本語で記述してください). +- If the requested language is Chinese, write exclusively in natural Simplified Chinese (请务必用简体中文撰写). +- If the requested language is Chinese (Traditional), write exclusively in natural Traditional Chinese (請務必使用繁體中文撰寫). - Keep only file paths, code snippets, and identifiers in English/original form. ## Output format