sonamu 0.7.47 → 0.7.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.js +5 -4
- package/package.json +3 -4
- package/src/bin/cli.ts +4 -3
package/dist/bin/cli.js
CHANGED
|
@@ -530,9 +530,10 @@ async function scaffold_model_test(entityId) {
|
|
|
530
530
|
const workspaceRoot = await findWorkspaceRoot();
|
|
531
531
|
const claudeDir = path.join(workspaceRoot, ".claude");
|
|
532
532
|
const targetSkillsDir = path.join(claudeDir, "skills", "sonamu");
|
|
533
|
-
//
|
|
534
|
-
|
|
535
|
-
|
|
533
|
+
// ✅ 수정: sonamu 패키지 기준 상대 경로로 skills 찾기
|
|
534
|
+
// cli.ts 위치: sonamu/modules/sonamu/src/bin/cli.ts
|
|
535
|
+
// skills 위치: sonamu/modules/skills/
|
|
536
|
+
const sourceBase = path.resolve(import.meta.dirname, "..", "..", "..", "skills");
|
|
536
537
|
const sourceSkillsDir = path.join(sourceBase, "sonamu");
|
|
537
538
|
const sourceClaudeMd = path.join(sourceBase, "CLAUDE.md");
|
|
538
539
|
if (!await exists(sourceSkillsDir)) {
|
|
@@ -645,4 +646,4 @@ status: draft
|
|
|
645
646
|
return findAppRootPath();
|
|
646
647
|
}
|
|
647
648
|
|
|
648
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgZXhlY1N5bmMsIHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGNwLCBta2RpciwgcmVhZGRpciwgcmVhZEZpbGUsIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGtuZXgsIHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIjtcbmltcG9ydCB7IHRzaWNsaSB9IGZyb20gXCJ0c2ljbGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBleGVjV2l0aExpbmVQcmVmaXgsXG4gIHByaW50QnVpbGRTdW1tYXJ5LFxuICBwcmludFRhc2tGYWlsZWQsXG4gIHByaW50VGFza0hlYWRlcixcbiAgcHJpbnRUYXNrU3RhcnQsXG4gIHByaW50VGFza1N1Y2Nlc3MsXG59IGZyb20gXCIuLi91dGlscy9jb25zb2xlLXV0aWxcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgZmluZEFwaVJvb3RQYXRoLCBmaW5kQXBwUm9vdFBhdGggfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IEFQSV9BUlRJRkFDVFMsIHR5cGUgQnVpbGRBcnRpZmFjdCwgV0VCX0FSVElGQUNUUyB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG5hc3luYyBmdW5jdGlvbiBib290c3RyYXAoKSB7XG4gIGNvbnN0IG5vdFRvSW5pdCA9IFtcImRldlwiLCBcImJ1aWxkXCIsIFwic3RhcnRcIiwgXCJza2lsbHNcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHRzaWNsaShwcm9jZXNzLmFyZ3YsIHtcbiAgICAgIHR5cGVzOiB7XG4gICAgICAgIFwiI2VudGl0eUlkXCI6IHtcbiAgICAgICAgICB0eXBlOiBcImF1dG9jb21wbGV0ZVwiLFxuICAgICAgICAgIG5hbWU6IFwiI2VudGl0eUlkXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI2VudGl0eUlkXCIsXG4gICAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxQYXJlbnRJZHMoKS5tYXAoKGVudGl0eUlkKSA9PiAoe1xuICAgICAgICAgICAgdGl0bGU6IGVudGl0eUlkLFxuICAgICAgICAgICAgdmFsdWU6IGVudGl0eUlkLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAgXCIjcmVjb3JkSWRzXCI6IFwibnVtYmVyW11cIixcbiAgICAgICAgXCIjbmFtZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICBcIiN0YXJnZXRzXCI6IHtcbiAgICAgICAgICB0eXBlOiBcIm11bHRpc2VsZWN0XCIsXG4gICAgICAgICAgbmFtZTogXCIjdGFyZ2V0c1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiUGxlYXNlIGlucHV0ICN0YXJnZXRzXCIsXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyB0aXRsZTogXCJEZXZlbG9wbWVudFwiLCB2YWx1ZTogXCJkZXZlbG9wbWVudF9tYXN0ZXJcIiB9LFxuICAgICAgICAgICAgeyB0aXRsZTogXCJQcm9kdWN0aW9uXCIsIHZhbHVlOiBcInByb2R1Y3Rpb25fbWFzdGVyXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiRml4dHVyZVwiLCB2YWx1ZTogXCJmaXh0dXJlXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiVGVzdFwiLCB2YWx1ZTogXCJ0ZXN0XCIgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImluaXRcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJpbXBvcnRcIiwgXCIjZW50aXR5SWRcIiwgXCIjcmVjb3JkSWRzXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInJ1blwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImFwcGx5XCIsIFwiI3RhcmdldHNcIl0sXG4gICAgICAgIFtcIm1pZ3JhdGVcIiwgXCJzdGF0dXNcIl0sXG4gICAgICAgIFtcInN0dWJcIiwgXCJwcmFjdGljZVwiLCBcIiNuYW1lXCJdLFxuICAgICAgICBbXCJzdHViXCIsIFwiZW50aXR5XCIsIFwiI25hbWVcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwibW9kZWxcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwibW9kZWxfdGVzdFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJ2aWV3X2xpc3RcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwidmlld19mb3JtXCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzeW5jXCJdLFxuICAgICAgICBbXCJkZXZcIl0sXG4gICAgICAgIFtcImJ1aWxkXCJdLFxuICAgICAgICBbXCJzdGFydFwiXSxcbiAgICAgICAgW1wic2tpbGxzXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wic2tpbGxzXCIsIFwiY3JlYXRlXCIsIFwiI25hbWVcIl0sXG4gICAgICBdLFxuICAgICAgcnVubmVyczoge1xuICAgICAgICBtaWdyYXRlX3N0YXR1cyxcbiAgICAgICAgbWlncmF0ZV9ydW4sXG4gICAgICAgIG1pZ3JhdGVfYXBwbHksXG4gICAgICAgIGZpeHR1cmVfaW5pdCxcbiAgICAgICAgZml4dHVyZV9pbXBvcnQsXG4gICAgICAgIGZpeHR1cmVfc3luYyxcbiAgICAgICAgc3R1Yl9wcmFjdGljZSxcbiAgICAgICAgc3R1Yl9lbnRpdHksXG4gICAgICAgIHNjYWZmb2xkX21vZGVsLFxuICAgICAgICBzY2FmZm9sZF9tb2RlbF90ZXN0LFxuICAgICAgICAvLyBzY2FmZm9sZF92aWV3X2xpc3QsXG4gICAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfZm9ybSxcbiAgICAgICAgc3luYyxcbiAgICAgICAgZGV2LFxuICAgICAgICBidWlsZCxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHNraWxsc19zeW5jLFxuICAgICAgICBza2lsbHNfY3JlYXRlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBTb25hbXUuZGVzdHJveSgpO1xuICB9XG59XG5cbmJvb3RzdHJhcCgpLmZpbmFsbHkoYXN5bmMgKCkgPT4ge1xuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5kZXN0cm95KCk7XG59KTtcblxuLyoqXG4gKiBwbnBtIHN5bmMg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrpbwg7Iux7YGs7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jKCkge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLnN5bmMoKTtcbn1cblxuLyoqXG4gKiBwbnBtIGRldiDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIO2UhOuhnOygne2KuOyXkCDrjIDtlbQgSE1SIOyngOybkO2VmOuKlCDqsJzrsJwg7ISc67KE66W8IOudhOybjOykjeuLiOuLpC5cbiAqXG4gKiBUeXBlU2NyaXB066W8IOuwlOuhnCDsi6TtlontlaAg7IiYIOyeiOuPhOuhnSBAc29uYW11LWtpdC90cy1sb2FkZXLrpbwsXG4gKiBITVLsnYQg7KeA7JuQ7ZWY6riwIOychO2VtCBAc29uYW11LWtpdC9obXItaG9va+ydhCBpbXBvcnTtlZjrqbAsXG4gKiDshozsiqTrp7Ug7KeA7JuQ7J2EIOychO2VtCAtLWVuYWJsZS1zb3VyY2UtbWFwcyDtlIzrnpjqt7jrpbwg7Y+s7ZWo7ZWY7JesIOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiDsnbTrlYwgQHNvbmFtdS1raXQvdHMtbG9hZGVy7JmAIEBzb25hbXUta2l0L2htci1ob29r64qUIHNvbmFtdeqwgCDsnpDssrTsoIHsnLzroZwg6rCA7KeA6rOgIOyeiOuKlCBkZXBlbmRlbmN57J6F64uI64ukLlxuICog65iQ7ZWcIOyLpO2WieyXkCDsgqzsmqntlZjripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuuPhCDrp4jssKzqsIDsp4DroZwgc29uYW116rCAIOyekOyytOyggeycvOuhnCDqsIDsp4Dqs6Ag7J6I64qUIGRlcGVuZGVuY3nsnoXri4jri6QuXG4gKiDrlLDrnbzshJwg7IKs7Jqp7J6QIO2UhOuhnOygne2KuOyXkOyEnOuKlCDsnbQg7IS4IO2MqO2CpOyngOulvCDsp4HsoJEg7ISk7LmY7ZWgIO2VhOyalOqwgCDsl4bsirXri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV2KCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcInNyYy9pbmRleC50c1wiO1xuXG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKFwi8J+agCBTdGFydGluZyBTb25hbXUgZGV2IHNlcnZlci4uLlxcblwiKSk7XG5cbiAgLy8g7J20IHNvbmFtdSDtjKjtgqTsp4DqsIAgZGVwZW5kZW5jaWVz66GcIOqwgOyngOqzoCDsnojripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuydmCBiaW4vcnVuLmpz66W8IOyCrOyaqe2VqeuLiOuLpC5cbiAgLy8g7J20IOqyveuhnCgvYmluL3J1bi5qcynripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuydmCBwYWNrYWdlLmpzb27snZggYmluIO2VhOuTnOyXkCDrqoXsi5zrkJjslrQg7J6I64qUIOq3uOqyg+qzvCDqsJnsirXri4jri6QuXG4gIGNvbnN0IGhvdFJ1bm5lckJpblBhdGggPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCkucmVzb2x2ZShcbiAgICBcIkBzb25hbXUta2l0L2htci1ydW5uZXIvYmluL3J1bi5qc1wiLFxuICApO1xuXG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLCAvLyBub2RlXG4gICAgW1xuICAgICAgaG90UnVubmVyQmluUGF0aCwgLy8g7J2066CH6rKMIO2VtOyEnCBob3QtcnVubmVy66W8IOyLpO2Wie2VmOq1rOyalFxuICAgICAgXCItLWNsZWFyLXNjcmVlbj1mYWxzZVwiLCAvLyDsnbTtlZggaG90LXJ1bm5lcuyXkOqyjCDrhJjqsqjspIQg7J247J6Q65Ok7J6F64uI64ukLlxuICAgICAgXCItLW5vZGUtYXJncz0tLWltcG9ydD1zb25hbXUvdHMtbG9hZGVyLXJlZ2lzdGVyXCIsIC8vIFR5cGVTY3JpcHQg7ISc7Y+s7Yq466W8IOychO2VnCDroZzrjZQsXG4gICAgICBcIi0tbm9kZS1hcmdzPS0taW1wb3J0PXNvbmFtdS9obXItaG9vay1yZWdpc3RlclwiLCAvLyBITVLsnYQg7KeA7JuQ7ZWY6riwIOychO2VnCBob29rLFxuICAgICAgXCItLW5vZGUtYXJncz0tLWVuYWJsZS1zb3VyY2UtbWFwc1wiLCAvLyDqt7jrpqzqs6Ag7IaM7Iqk66e1IOyngOybkOydhCDsnITtlZwg7ZSM656Y6re47J6F64uI64ukLlxuICAgICAgXCItLW9uLWtleT1yOnJlc3RhcnQ6UmVzdGFydCBzZXJ2ZXJcIiwgLy8gciDriITrpbTrqbQg7ISc67KEIOyerOyLnOyeke2VmOqyjCDtlbTspJjsmpQuXG4gICAgICBgLS1vbi1rZXk9ZjpzaGVsbChybSAke3BhdGguam9pbihhcGlSb290LCBcInNvbmFtdS5sb2NrXCIpfSk6cmVzdGFydDpGb3JjZSByZXN0YXJ0YCwgLy8gZiDriITrpbTrqbQgc29uYW11LmxvY2sg7YyM7J287J2EIOyngOyasOqzoCDshJzrsoQg7J6s7Iuc7J6R7ZWY6rKMIO2VtOykmOyalC5cblxuICAgICAgXCItLW9uLWtleT1lbnRlcjpzaGVsbChlY2hvIGhpKTpLZXkgYmluZGluZyB0ZXN0XCIsIC8vIGVudGVy66W8IGtleeuhnCDsk7gg7IiYIOyeiOydjOydhCDrs7TsnbTquLAg7JyE7ZWcIO2FjOyKpO2KuOyeheuLiOuLpC5cbiAgICAgIFwiLS1vbi1rZXk9Y3RybCtmIGN0cmwrZjpzaGVsbChnaXQgcHVsbCAmJiBwbnBtIGluc3RhbGwgJiYgcG5wbSAtLWZpbHRlciBzb25hbXUgYnVpbGQgJiYgZWNobyAnU29uYW11IGlzIG5vdyB1cC10by1kYXRlIScpOnJlc3RhcnQ6UHVsbCAmIGluc3RhbGwgJiBidWlsZCAmIHJlc3RhcnRcIiwgLy8gbW9kaWZpZXLsmYDsnZgg7KGw7ZWpLCDqt7jrpqzqs6Ag65GQIOqwnOydmCBjaG9yZOulvCDsgqzsmqntlaAg7IiYIOyeiOydjOydhCDrs7TsnbTquLAg7JyE7ZWcIO2FjOyKpO2KuOyeheuLiOuLpC5cbiAgICAgIGVudHJ5UG9pbnQsIC8vIOuniOyngOunieycvOuhnCDsi6TsoJwg7Iuk7ZaJ7ZWgIOyKpO2BrOumve2KuOydmCDqsr3roZzrpbwg64SY6rKo7KSN64uI64ukLlxuICAgIF0sXG4gICAge1xuICAgICAgY3dkOiBhcGlSb290LFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICBOT0RFX0VOVjogXCJkZXZlbG9wbWVudFwiLFxuICAgICAgICBIT1Q6IFwieWVzXCIsIC8vIOyWmOqwgCDsnojslrTslbwgSE1S7J20IO2ZnOyEse2ZlOuQqeuLiOuLpC5cbiAgICAgICAgQVBJX1JPT1RfUEFUSDogYXBpUm9vdCwgLy8g7J20IOqyveuhnOqwgCBobXItaG9va+ydmCDro6jtirgg65SU66CJ7Yag66as6rCAIOuQqeuLiOuLpC5cbiAgICAgIH0sXG4gICAgfSxcbiAgKTtcblxuICAvLyDsooXro4wg7LKY66asXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwiXFxuXFxu8J+RiyBTaHV0dGluZyBkb3duLi4uXCIpKTtcbiAgICBzZXJ2ZXJQcm9jZXNzLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfTtcblxuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIGNsZWFudXApO1xuICBwcm9jZXNzLm9uKFwiU0lHVEVSTVwiLCBjbGVhbnVwKTtcblxuICBzZXJ2ZXJQcm9jZXNzLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChg4p2MIFNlcnZlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoY29kZSB8fCAxKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIHBucG0gYnVpbGQg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrpbwg67mM65Oc7ZWp64uI64ukLlxuICpcbiAqIOu5jOuTnOyXkCDtlYTsmpTtlZwgLnN3Y3Jj64qUIO2UhOuhnOygne2KuCDro6jtirjsl5DshJwg7LC+6rOgLCDsl4bsnLzrqbQgc29uYW116rCAIOq0gOumrO2VmOuKlCAuc3djcmMucHJvamVjdC1kZWZhdWx066W8IOyCrOyaqe2VqeuLiOuLpC5cbiAqXG4gKiDsi6TsoJwg67mM65OcIO2DgOqynyjslYTti7DtjKntirgp6rO8IOuPmeyekeydgCBidWlsZC1jb25maWcudHPsl5Ag7KCV7J2Y65CY7Ja0IOyeiOyKteuLiOuLpC5cbiAqIOydtCDtlajsiJjripQgYnVpbGQtY29uZmlnLnRz7JeQIOygleydmOuQnCDrj5nsnpHrk6TsnYQg7Iuk7ZaJ7ZW07KO864qUIOyXre2VoOunjCDtlanri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGQoKSB7XG4gIGNvbnN0IGFwcFJvb3QgPSBmaW5kQXBwUm9vdFBhdGgoKTtcblxuICAvLyAuc3djcmMg7YyM7J287J2EIOyngOygle2VqeuLiOuLpC5cbiAgbGV0IHN3Y0ZpbGVQYXRoID0gXCIuc3djcmNcIjtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKHN3Y0ZpbGVQYXRoKSkge1xuICAgICAgLy8g7IKs7Jqp7J6QIO2UhOuhnOygne2KuOyXkCAuc3djcmPqsIAg7J6I7Jy866m0IOyasOyEoOycvOuhnCDsgqzsmqntlanri4jri6QuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oXCJVc2luZyAuc3djcmMgZnJvbSBwcm9qZWN0IHJvb3QuLi5cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDslYTri4jrnbzrqbQgc29uYW116rCAIOq0gOumrO2VmOuKlCAuc3djcmMucHJvamVjdC1kZWZhdWx066W8IOqwgOyguOuLpCDslIHri4jri6QuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oXCJVc2luZyBkZWZhdWx0IC5zd2NyYyBmcm9tIHNvbmFtdSBwYWNrYWdlLi4uXCIpKTtcbiAgICAgIHN3Y0ZpbGVQYXRoID0gcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcIi5zd2NyYy5wcm9qZWN0LWRlZmF1bHRcIik7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwiU2V0dGluZyB1cCBzd2MgY29uZmlnIGZpbGUgZmFpbGVkLlwiKSwgZXJyb3IpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIEFQSSDtlITroZzsoJ3tirjrpbwg67mM65Oc7ZWp64uI64ukLlxuICBjb25zdCBhcGlTdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB0cnkge1xuICAgIGZvciAoY29uc3QgYXJ0aWZhY3Qgb2YgQVBJX0FSVElGQUNUUykge1xuICAgICAgY29uc3QgY3dkID0gcGF0aC5qb2luKGFwcFJvb3QsIGFydGlmYWN0LnByb2plY3RQYXRoKTtcbiAgICAgIHByaW50VGFza0hlYWRlcihhcnRpZmFjdC5uYW1lLCBhcnRpZmFjdC5kZXNjcmlwdGlvbiwgY3dkKTtcblxuICAgICAgYXdhaXQgcnVuQnVpbGRTdGVwcyhhcnRpZmFjdCwgeyBjd2QsIGJ1aWxkQ29tbWFuZEFyZ3M6IHsgY29uZmlnRmlsZVBhdGg6IHN3Y0ZpbGVQYXRoIH0gfSk7XG4gICAgfVxuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiQVBJXCIsIHRydWUsIERhdGUubm93KCkgLSBhcGlTdGFydGVkQXQpO1xuICB9IGNhdGNoIHtcbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIkFQSVwiLCBmYWxzZSwgRGF0ZS5ub3coKSAtIGFwaVN0YXJ0ZWRBdCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8gV2ViIO2UhOuhnOygne2KuOulvCDruYzrk5ztlanri4jri6QuXG4gIGNvbnN0IHdlYlN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBXRUJfQVJUSUZBQ1RTKSB7XG4gICAgICBjb25zdCBjd2QgPSBwYXRoLmpvaW4oYXBwUm9vdCwgYXJ0aWZhY3QucHJvamVjdFBhdGgpO1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBjd2QpO1xuXG4gICAgICBhd2FpdCBydW5CdWlsZFN0ZXBzKGFydGlmYWN0LCB7IGN3ZCwgYnVpbGRDb21tYW5kQXJnczoge30gfSk7XG4gICAgfVxuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiV2ViXCIsIHRydWUsIERhdGUubm93KCkgLSB3ZWJTdGFydGVkQXQpO1xuICB9IGNhdGNoIHtcbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIldlYlwiLCBmYWxzZSwgRGF0ZS5ub3coKSAtIHdlYlN0YXJ0ZWRBdCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogcHJlLWJ1aWxkLCBidWlsZCwgcG9zdC1idWlsZCDri6jqs4Trpbwg7Iic7LCo7KCB7Jy866GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuQnVpbGRTdGVwczxUPihcbiAgYXJ0aWZhY3Q6IEJ1aWxkQXJ0aWZhY3Q8VD4sXG4gIG9wdGlvbnM6IHsgY3dkOiBzdHJpbmc7IGJ1aWxkQ29tbWFuZEFyZ3M6IFQgfSxcbikge1xuICBjb25zdCBzdGVwcyA9IFtcbiAgICB7IG5hbWU6IFwicHJlLWJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QucHJlQnVpbGRDb21tYW5kPy4oKSB9LFxuICAgIHsgbmFtZTogXCJidWlsZFwiLCBjbWQ6IGFydGlmYWN0LmJ1aWxkQ29tbWFuZChvcHRpb25zLmJ1aWxkQ29tbWFuZEFyZ3MpIH0sXG4gICAgeyBuYW1lOiBcInBvc3QtYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5wb3N0QnVpbGRDb21tYW5kPy4oKSB9LFxuICBdLmZpbHRlcigoc3RlcCkgPT4gc3RlcC5jbWQpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdGVwID0gc3RlcHNbaV07XG4gICAgY29uc3QgaXNMYXN0ID0gaSA9PT0gc3RlcHMubGVuZ3RoIC0gMTtcblxuICAgIHRyeSB7XG4gICAgICBhc3NlcnQoc3RlcC5jbWQpO1xuICAgICAgcHJpbnRUYXNrU3RhcnQoc3RlcC5uYW1lLCBzdGVwLmNtZCwgaXNMYXN0KTtcbiAgICAgIGF3YWl0IGV4ZWNXaXRoTGluZVByZWZpeChzdGVwLmNtZCwgeyBjd2Q6IG9wdGlvbnMuY3dkIH0pO1xuICAgICAgcHJpbnRUYXNrU3VjY2VzcyhzdGVwLm5hbWUsIGlzTGFzdCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBwcmludFRhc2tGYWlsZWQoc3RlcC5uYW1lLCBpc0xhc3QpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3N0ZXAubmFtZX0gZmFpbGVkYCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogcG5wbSBzdGFydCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOu5jOuTnOuQnCDtlITroZzsoJ3tirjrpbwg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIOu5jOuTnOuQnCDqsrDqs7zrrLwoZGlzdCDrlJTroInthqDrpqzsnZggaW5kZXguanMg7JeU7Yq466as7Y+s7J247Yq4KeydtCDsl4bri6TrqbQg7Iuk7ZaJ7J2EIOykkeuLqO2VqeuLiOuLpC5cbiAqIOyGjOyKpOuntSDsp4Dsm5Dqs7wgZG90ZW52IOyngOybkOydhCDtj6ztlajtlZjsl6wg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcImRpc3QvaW5kZXguanNcIjtcblxuICBpZiAoIShhd2FpdCBleGlzdHMoZW50cnlQb2ludCkpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2VudHJ5UG9pbnR9IG5vdCBmb3VuZC4gUGxlYXNlIGJ1aWxkIHlvdXIgcHJvamVjdCBmaXJzdC5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJ1bjogeWFybiBzb25hbXUgYnVpbGRcIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcImNoaWxkX3Byb2Nlc3NcIik7XG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgIFtcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIFwiLXJcIiwgXCJkb3RlbnYvY29uZmlnXCIsIGVudHJ5UG9pbnRdLFxuICAgIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICB9LFxuICApO1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgKCkgPT4ge1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBNaWdyYXRvcigpIHtcbiAgLy8gbWlncmF0b3JcbiAgbWlncmF0b3IgPSBuZXcgTWlncmF0b3IoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBGaXh0dXJlTWFuYWdlcigpIHtcbiAgRml4dHVyZU1hbmFnZXIuaW5pdCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX2FwcGx5KHRhcmdldHM6IChrZXlvZiBTb25hbXVEQkNvbmZpZylbXSkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG4gIGF3YWl0IG1pZ3JhdG9yLnJ1bkFjdGlvbihcImFwcGx5XCIsIHRhcmdldHMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3J1bigpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuICBjb25zdCBsb2NhbEhvc3RzID0gW1wibG9jYWxob3N0XCIsIFwiMTI3LjAuMC4xXCIsIFwiMC4wLjAuMFwiLCBcIjo6MVwiXTtcbiAgY29uc3QgdGFyZ2V0cyA9IE9iamVjdC5rZXlzKFNvbmFtdS5kYkNvbmZpZykuZmlsdGVyKCh0YXJnZXQpID0+IHtcbiAgICBjb25zdCB0YXJnZXRDb25maWcgPSBTb25hbXUuZGJDb25maWdbdGFyZ2V0IGFzIGtleW9mIFNvbmFtdURCQ29uZmlnXTtcbiAgICBjb25zdCBob3N0ID0gKHRhcmdldENvbmZpZz8uY29ubmVjdGlvbiBhcyB7IGhvc3Q/OiBzdHJpbmcgfSk/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIjtcbiAgICByZXR1cm4gbG9jYWxIb3N0cy5pbmNsdWRlcyhob3N0LnRvTG93ZXJDYXNlKCkpO1xuICB9KTtcblxuICAvLyDroZzsu6wg642w7J207YSw67Kg7J207Iqk7JeQIOuMgO2VtOyEnOunjCDsoITssrQg66eI7J206re466CI7J207IWY7JeQ7IScIOuPmeyekVxuICBhd2FpdCBtaWdyYXRvci5ydW5BY3Rpb24oXCJhcHBseVwiLCB0YXJnZXRzIGFzIChrZXlvZiBTb25hbXVEQkNvbmZpZylbXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1pZ3JhdGVfc3RhdHVzKCkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG5cbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgbWlncmF0b3IuZ2V0U3RhdHVzKCk7XG4gIC8vIHN0YXR1cztcbiAgY29uc29sZS5sb2coc3RhdHVzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbml0KCkge1xuICBjb25zdCBzcmNDb25maWcgPSBTb25hbXUuZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyO1xuICBjb25zdCB0YXJnZXRzID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBcIihSRU1PVEUpIEZpeHR1cmUgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLmZpeHR1cmUsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogXCIoTE9DQUwpIFRlc3RpbmcgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLnRlc3QsXG4gICAgICB0b1NraXA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbW90ZUNvbm4gPSBTb25hbXUuZGJDb25maWcuZml4dHVyZS5jb25uZWN0aW9uIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZztcbiAgICAgICAgY29uc3QgbG9jYWxDb25uID0gU29uYW11LmRiQ29uZmlnLnRlc3QuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIHJldHVybiByZW1vdGVDb25uLmhvc3QgPT09IGxvY2FsQ29ubi5ob3N0ICYmIHJlbW90ZUNvbm4uZGF0YWJhc2UgPT09IGxvY2FsQ29ubi5kYXRhYmFzZTtcbiAgICAgIH0pKCksXG4gICAgfSxcbiAgXSBhcyB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBjb25maWc6IEtuZXguQ29uZmlnO1xuICAgIHRvU2tpcD86IGJvb2xlYW47XG4gIH1bXTtcblxuICAvLyAxLiDquLDspIBEQiDsiqTtgqTrp4jrpbwg642k7ZSEXG4gIGNvbnNvbGUubG9nKFwiRFVNUC4uLlwiKTtcbiAgY29uc3QgZHVtcEZpbGVuYW1lID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGNvbnN0IHNyY0Nvbm4gPSBzcmNDb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gIGNvbnN0IG1pZ3JhdGlvbnNEdW1wID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC1taWdyYXRpb25zLSR7RGF0ZS5ub3coKX0uc3FsYDtcbiAgZXhlY1N5bmMoXG4gICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLWQgLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9ID4gJHtkdW1wRmlsZW5hbWV9YCxcbiAgKTtcbiAgY29uc3QgX2RiID0ga25leChzcmNDb25maWcpO1xuICBjb25zdCBbW21pZ3JhdGlvbnNdXSA9IGF3YWl0IF9kYi5yYXcoXG4gICAgXCJTRUxFQ1QgQ09VTlQoKikgYXMgY291bnQgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX3NjaGVtYSA9ID8gQU5EIHRhYmxlX25hbWUgPSAna25leF9taWdyYXRpb25zJ1wiLFxuICAgIFtzcmNDb25uLmRhdGFiYXNlXSxcbiAgKTtcbiAgaWYgKG1pZ3JhdGlvbnMuY291bnQgPiAwKSB7XG4gICAgZXhlY1N5bmMoXG4gICAgICBgbXlzcWxkdW1wIC1oJHtzcmNDb25uLmhvc3R9IC11JHtzcmNDb25uLnVzZXJ9IC1wJHtzcmNDb25uLnBhc3N3b3JkfSAtLXNpbmdsZS10cmFuc2FjdGlvbiAtLW5vLWNyZWF0ZS1kYiAtLXRyaWdnZXJzICR7c3JjQ29ubi5kYXRhYmFzZX0ga25leF9taWdyYXRpb25zIGtuZXhfbWlncmF0aW9uc19sb2NrID4gJHttaWdyYXRpb25zRHVtcH1gLFxuICAgICk7XG4gIH1cblxuICAvLyAyLiDrjIDsg4FEQiDqsIHqsIHsl5Ag64yA7ZWY7JesIOyhtOyerOyXrOu2gCDtmZXsnbgg7ZuEIOu2k+q4sFxuICBmb3IgYXdhaXQgKGNvbnN0IHsgbGFiZWwsIGNvbmZpZywgdG9Ta2lwIH0gb2YgdGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbm4gPSBjb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG5cbiAgICBpZiAodG9Ta2lwID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCR7bGFiZWx9OiBTa2lwcGVkIWApKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGRiID0ga25leCh7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgIC4uLigoY29uZmlnLmNvbm5lY3Rpb24gPz8ge30pIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZyksXG4gICAgICAgIGRhdGFiYXNlOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IFtbcm93XV0gPSBhd2FpdCBkYi5yYXcoYFNIT1cgREFUQUJBU0VTIExJS0UgXCIke2Nvbm4uZGF0YWJhc2V9XCJgKTtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCR7bGFiZWx9OiBEYXRhYmFzZSBcIiR7Y29ubi5kYXRhYmFzZX1cIiBBbHJlYWR5IGV4aXN0c2ApKTtcbiAgICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBTWU5DIHRvICR7bGFiZWx9Li4uYCk7XG4gICAgY29uc3QgbXlzcWxDbWQgPSBgbXlzcWwgLWgke2Nvbm4uaG9zdH0gLXUke2Nvbm4udXNlcn0gLXAke2Nvbm4ucGFzc3dvcmR9YDtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gLWUgJ0RST1AgREFUQUJBU0UgSUYgRVhJU1RTIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdDUkVBVEUgREFUQUJBU0UgXFxgJHtjb25uLmRhdGFiYXNlfVxcYCdgKTtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7ZHVtcEZpbGVuYW1lfWApO1xuICAgIGlmIChhd2FpdCBleGlzdHMobWlncmF0aW9uc0R1bXApKSB7XG4gICAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7bWlncmF0aW9uc0R1bXB9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXdhaXQgX2RiLmRlc3Ryb3koKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgcmVjb3JkSWRzOiBudW1iZXJbXSkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuaW1wb3J0Rml4dHVyZShlbnRpdHlJZCwgcmVjb3JkSWRzKTtcbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX3N5bmMoKSB7XG4gIGF3YWl0IHNldHVwRml4dHVyZU1hbmFnZXIoKTtcblxuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5zeW5jKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfcHJhY3RpY2UobmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHByYWN0aWNlRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJwcmFjdGljZXNcIik7XG4gIGNvbnN0IGZpbGVOYW1lcyA9IGF3YWl0IHJlYWRkaXIocHJhY3RpY2VEaXIpO1xuXG4gIGNvbnN0IG1heFNlcU5vID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIShhd2FpdCBleGlzdHMocHJhY3RpY2VEaXIpKSkge1xuICAgICAgYXdhaXQgbWtkaXIocHJhY3RpY2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkU2VxcyA9IGZpbGVOYW1lc1xuICAgICAgLmZpbHRlcigoZmlsZU5hbWUpID0+IGZpbGVOYW1lLnN0YXJ0c1dpdGgoXCJwXCIpICYmIGZpbGVOYW1lLmVuZHNXaXRoKFwiLnRzXCIpKVxuICAgICAgLm1hcCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgWywgc2VxTm9dID0gZmlsZU5hbWUubWF0Y2goL15wKFswLTldKyktLykgPz8gW1wiMFwiLCBcIjBcIl07XG4gICAgICAgIHJldHVybiBwYXJzZUludChzZXFObyk7XG4gICAgICB9KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcblxuICAgIGlmIChmaWx0ZXJlZFNlcXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGZpbHRlcmVkU2Vxc1swXTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSkoKTtcblxuICBjb25zdCBjdXJyZW50U2VxTm8gPSBtYXhTZXFObyArIDE7XG4gIGNvbnN0IGZpbGVOYW1lID0gYHAke2N1cnJlbnRTZXFOb30tJHtuYW1lfS50c2A7XG4gIGNvbnN0IGRzdFBhdGggPSBwYXRoLmpvaW4ocHJhY3RpY2VEaXIsIGZpbGVOYW1lKTtcblxuICBjb25zdCBjb2RlID0gW1xuICAgIGBpbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICBcIlwiLFxuICAgIGBjb25zb2xlLmNsZWFyKCk7YCxcbiAgICBgY29uc29sZS5sb2coXCIke2ZpbGVOYW1lfVwiKTtgLFxuICAgIFwiXCIsXG4gICAgYFNvbmFtdS5ydW5TY3JpcHQoYXN5bmMgKCkgPT4ge2AsXG4gICAgYCAvLyBUT0RPYCxcbiAgICBgfSk7YCxcbiAgICBcIlwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG4gIGF3YWl0IHdyaXRlRmlsZShkc3RQYXRoLCBjb2RlKTtcblxuICBleGVjU3luYyhgY29kZSAke2RzdFBhdGh9YCk7XG5cbiAgY29uc3QgcnVuQ29kZSA9IGB5YXJuIG5vZGUgLXIgZG90ZW52L2NvbmZpZyAtLWVuYWJsZS1zb3VyY2UtbWFwcyBkaXN0L3ByYWN0aWNlcy8ke2ZpbGVOYW1lLnJlcGxhY2UoXG4gICAgXCIudHNcIixcbiAgICBcIi5qc1wiLFxuICApfWA7XG4gIGNvbnNvbGUubG9nKGAke2NoYWxrLmJsdWUocnVuQ29kZSl9IGNvcGllZCB0byBjbGlwYm9hcmQuYCk7XG4gIGV4ZWNTeW5jKGBlY2hvIFwiJHtydW5Db2RlfVwiIHwgcGJjb3B5YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfZW50aXR5KGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5jcmVhdGVFbnRpdHkoeyBlbnRpdHlJZCwgdGl0bGU6IGVudGl0eUlkIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF9tb2RlbChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcIm1vZGVsXCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX21vZGVsX3Rlc3QoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJtb2RlbF90ZXN0XCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgc2tpbGxzIHN5bmMg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDqs7Xsi50gU2tpbGxz66W8IOuhnOy7rCDtlITroZzsoJ3tirjroZwg64+Z6riw7ZmU7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBza2lsbHNfc3luYygpIHtcbiAgY29uc3Qgd29ya3NwYWNlUm9vdCA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VSb290KCk7XG4gIGNvbnN0IGNsYXVkZURpciA9IHBhdGguam9pbih3b3Jrc3BhY2VSb290LCBcIi5jbGF1ZGVcIik7XG4gIGNvbnN0IHRhcmdldFNraWxsc0RpciA9IHBhdGguam9pbihjbGF1ZGVEaXIsIFwic2tpbGxzXCIsIFwic29uYW11XCIpO1xuXG4gIC8vIEBzb25hbXUta2l0L3NraWxscyDtjKjtgqTsp4Ag6rK966GcXG4gIGNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG4gIGNvbnN0IHNvdXJjZUJhc2UgPSBwYXRoLmRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwiQHNvbmFtdS1raXQvc2tpbGxzL0NMQVVERS5tZFwiKSk7XG4gIGNvbnN0IHNvdXJjZVNraWxsc0RpciA9IHBhdGguam9pbihzb3VyY2VCYXNlLCBcInNvbmFtdVwiKTtcbiAgY29uc3Qgc291cmNlQ2xhdWRlTWQgPSBwYXRoLmpvaW4oc291cmNlQmFzZSwgXCJDTEFVREUubWRcIik7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHNvdXJjZVNraWxsc0RpcikpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwiU2tpbGxzIHNvdXJjZSBub3QgZm91bmQgaW4gc29uYW11IHBhY2thZ2UuXCIpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDrjIDsg4Eg65SU66CJ7Yag66asIOyDneyEsVxuICBhd2FpdCBta2Rpcih0YXJnZXRTa2lsbHNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIC8vIOuzteyCrCAocmVjdXJzaXZlLCDrja7slrTsk7DquLApXG4gIGF3YWl0IGNwKHNvdXJjZVNraWxsc0RpciwgdGFyZ2V0U2tpbGxzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgU2tpbGxzIHN5bmNlZCB0byAke3RhcmdldFNraWxsc0Rpcn1gKSk7XG5cbiAgLy8gQ0xBVURFLm1kIOuzteyCrC/sl4XrjbDsnbTtirhcbiAgaWYgKGF3YWl0IGV4aXN0cyhzb3VyY2VDbGF1ZGVNZCkpIHtcbiAgICBjb25zdCB0YXJnZXRDbGF1ZGVNZCA9IHBhdGguam9pbihjbGF1ZGVEaXIsIFwiQ0xBVURFLm1kXCIpO1xuICAgIGNvbnN0IHNvdXJjZUNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShzb3VyY2VDbGF1ZGVNZCwgXCJ1dGYtOFwiKTtcblxuICAgIGlmIChhd2FpdCBleGlzdHModGFyZ2V0Q2xhdWRlTWQpKSB7XG4gICAgICBjb25zdCB0YXJnZXRDb250ZW50ID0gYXdhaXQgcmVhZEZpbGUodGFyZ2V0Q2xhdWRlTWQsIFwidXRmLThcIik7XG4gICAgICBjb25zdCBzdGFydE1hcmtlciA9IFwiPCEtLSBTT05BTVU6U1RBUlQgLS0+XCI7XG4gICAgICBjb25zdCBlbmRNYXJrZXIgPSBcIjwhLS0gU09OQU1VOkVORCAtLT5cIjtcbiAgICAgIGlmICh0YXJnZXRDb250ZW50LmluY2x1ZGVzKHN0YXJ0TWFya2VyKSAmJiB0YXJnZXRDb250ZW50LmluY2x1ZGVzKGVuZE1hcmtlcikpIHtcbiAgICAgICAgLy8gbWFya2VyIOyYgeyXreunjCDqtZDssrTtlanri4jri6QuXG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IHRhcmdldENvbnRlbnQuc3BsaXQoc3RhcnRNYXJrZXIpWzBdO1xuICAgICAgICBjb25zdCBhZnRlciA9IHRhcmdldENvbnRlbnQuc3BsaXQoZW5kTWFya2VyKVsxXTtcbiAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGAke2JlZm9yZX0ke3NvdXJjZUNvbnRlbnR9JHthZnRlcn1gO1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGFyZ2V0Q2xhdWRlTWQsIG5ld0NvbnRlbnQpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIENMQVVERS5tZCB1cGRhdGVkIChtYXJrZXIgcmVnaW9uKWApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhg4o+tIENMQVVERS5tZCBleGlzdHMgYnV0IG5vIG1hcmtlcnMsIHNraXBwZWRgKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZSh0YXJnZXRDbGF1ZGVNZCwgc291cmNlQ29udGVudCk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIENMQVVERS5tZCBjcmVhdGVkYCkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIHBucG0gc29uYW11IHNraWxscyBjcmVhdGUgPG5hbWU+IO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog66Gc7LusIHNraWxsIOy0iOyViOydhCDsg53shLHtlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNraWxsc19jcmVhdGUobmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHdvcmtzcGFjZVJvb3QgPSBhd2FpdCBmaW5kV29ya3NwYWNlUm9vdCgpO1xuICBjb25zdCBsb2NhbERpciA9IHBhdGguam9pbih3b3Jrc3BhY2VSb290LCBcIi5jbGF1ZGVcIiwgXCJza2lsbHNcIiwgXCJsb2NhbFwiKTtcbiAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4obG9jYWxEaXIsIGAke25hbWV9Lm1kYCk7XG5cbiAgaWYgKGF3YWl0IGV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYFNraWxsIFwiJHtuYW1lfVwiIGFscmVhZHkgZXhpc3RzLmApKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBta2Rpcihsb2NhbERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBgLS0tXG5uYW1lOiAke25hbWV9XG5jYXRlZ29yeTogb3RoZXJcbmNyZWF0ZWRfYXQ6ICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXX1cbnN0YXR1czogZHJhZnRcbi0tLVxuXG4jIFvsoJzrqqldXG5cbiMjIOyDge2ZqVxuXG5b7Ja065akIOusuOygnOyYgOuKlOyngF1cblxuIyMg7ZW06rKwIOuwqeuylVxuXG5b7Ja065a76rKMIO2VtOqysO2WiOuKlOyngF1cblxuIyMg7L2U65OcIOyYiOyLnFxuXG5cXGBcXGBcXGB0eXBlc2NyaXB0XG4vLyDsmIjsi5wg7L2U65OcXG5cXGBcXGBcXGBcbmA7XG5cbiAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCB0ZW1wbGF0ZSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgQ3JlYXRlZCAuY2xhdWRlL3NraWxscy9sb2NhbC8ke25hbWV9Lm1kYCkpO1xufVxuXG4vKipcbiAqIOybjO2BrOyKpO2OmOydtOyKpCDro6jtirjrpbwg7LC+7Iq164uI64ukLlxuICog7Jqw7ISg7Iic7JyEOiBwbnBtLXdvcmtzcGFjZS55YW1sID4gQ0xBVURFLm1kID4g66Oo7Yq4IHBhY2thZ2UuanNvbiAod29ya3NwYWNlcyDtlYTrk5wpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpbmRXb3Jrc3BhY2VSb290KCkge1xuICBsZXQgZGlyID0gcHJvY2Vzcy5jd2QoKTtcblxuICB3aGlsZSAoZGlyICE9PSBwYXRoLmRpcm5hbWUoZGlyKSkge1xuICAgIC8vIDEuIHBucG0td29ya3NwYWNlLnlhbWwg7YyM7J287J20IOyeiOuKlOyngCDtmZXsnbguIOyeiOycvOuptCDtmZXsi6TtlZwgbW9ub3JlcG8g66Oo7Yq4LlxuICAgIGlmIChhd2FpdCBleGlzdHMocGF0aC5qb2luKGRpciwgXCJwbnBtLXdvcmtzcGFjZS55YW1sXCIpKSkge1xuICAgICAgcmV0dXJuIGRpcjtcbiAgICB9XG5cbiAgICAvLyAyLiBDTEFVREUubWQg7YyM7J287J20IOyeiOuKlOyngCDtmZXsnbguIOyeiOycvOuptCDtlITroZzsoJ3tirgg66Oo7Yq466GcIOqwhOyjvO2VqC5cbiAgICBpZiAoYXdhaXQgZXhpc3RzKHBhdGguam9pbihkaXIsIFwiQ0xBVURFLm1kXCIpKSkge1xuICAgICAgcmV0dXJuIGRpcjtcbiAgICB9XG5cbiAgICAvLyAzLiBwYWNrYWdlLmpzb27sl5Agd29ya3NwYWNlcyDtlYTrk5zqsIAg7J6I7Jy866m0IOujqO2KuC5cbiAgICBjb25zdCBwYWNrYWdlUGF0aCA9IHBhdGguam9pbihkaXIsIFwicGFja2FnZS5qc29uXCIpO1xuICAgIGlmIChhd2FpdCBleGlzdHMocGFja2FnZVBhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUocGFja2FnZVBhdGgsIFwidXRmLThcIikpO1xuICAgICAgICBpZiAocGFja2FnZUpzb24ud29ya3NwYWNlcykge1xuICAgICAgICAgIHJldHVybiBkaXI7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyDtjIzsi7Eg7Iuk7Yyo7IucIOustOyLnFxuICAgICAgfVxuICAgIH1cbiAgICBkaXIgPSBwYXRoLmRpcm5hbWUoZGlyKTtcbiAgfVxuXG4gIC8vIOywvuyngCDrqrvtlZjrqbQgYXBpIO2PtOuNlOydmCDrtoDrqqgg7IKs7JqpXG4gIHJldHVybiBmaW5kQXBwUm9vdFBhdGgoKTtcbn1cbiJdLCJuYW1lcyI6WyJjaGFsayIsImRvdGVudiIsImNvbmZpZyIsImFzc2VydCIsImV4ZWNTeW5jIiwic3Bhd24iLCJjcCIsIm1rZGlyIiwicmVhZGRpciIsInJlYWRGaWxlIiwid3JpdGVGaWxlIiwia25leCIsImNyZWF0ZVJlcXVpcmUiLCJwYXRoIiwicHJvY2VzcyIsInRzaWNsaSIsIlNvbmFtdSIsIkVudGl0eU1hbmFnZXIiLCJNaWdyYXRvciIsIkZpeHR1cmVNYW5hZ2VyIiwiZXhlY1dpdGhMaW5lUHJlZml4IiwicHJpbnRCdWlsZFN1bW1hcnkiLCJwcmludFRhc2tGYWlsZWQiLCJwcmludFRhc2tIZWFkZXIiLCJwcmludFRhc2tTdGFydCIsInByaW50VGFza1N1Y2Nlc3MiLCJleGlzdHMiLCJmaW5kQXBpUm9vdFBhdGgiLCJmaW5kQXBwUm9vdFBhdGgiLCJBUElfQVJUSUZBQ1RTIiwiV0VCX0FSVElGQUNUUyIsIm1pZ3JhdG9yIiwiYm9vdHN0cmFwIiwibm90VG9Jbml0IiwiaW5jbHVkZXMiLCJhcmd2IiwiaW5pdCIsInR5cGVzIiwidHlwZSIsIm5hbWUiLCJtZXNzYWdlIiwiY2hvaWNlcyIsImdldEFsbFBhcmVudElkcyIsIm1hcCIsImVudGl0eUlkIiwidGl0bGUiLCJ2YWx1ZSIsImFyZ3MiLCJydW5uZXJzIiwibWlncmF0ZV9zdGF0dXMiLCJtaWdyYXRlX3J1biIsIm1pZ3JhdGVfYXBwbHkiLCJmaXh0dXJlX2luaXQiLCJmaXh0dXJlX2ltcG9ydCIsImZpeHR1cmVfc3luYyIsInN0dWJfcHJhY3RpY2UiLCJzdHViX2VudGl0eSIsInNjYWZmb2xkX21vZGVsIiwic2NhZmZvbGRfbW9kZWxfdGVzdCIsInN5bmMiLCJkZXYiLCJidWlsZCIsInN0YXJ0Iiwic2tpbGxzX3N5bmMiLCJza2lsbHNfY3JlYXRlIiwiZGVzdHJveSIsImZpbmFsbHkiLCJzeW5jZXIiLCJhcGlSb290IiwiZW50cnlQb2ludCIsImNvbnNvbGUiLCJsb2ciLCJ5ZWxsb3ciLCJib2xkIiwiaG90UnVubmVyQmluUGF0aCIsInVybCIsInJlc29sdmUiLCJzZXJ2ZXJQcm9jZXNzIiwiZXhlY1BhdGgiLCJqb2luIiwiY3dkIiwic3RkaW8iLCJlbnYiLCJOT0RFX0VOViIsIkhPVCIsIkFQSV9ST09UX1BBVEgiLCJjbGVhbnVwIiwia2lsbCIsImV4aXQiLCJvbiIsImNvZGUiLCJlcnJvciIsInJlZCIsImFwcFJvb3QiLCJzd2NGaWxlUGF0aCIsImRpbSIsImRpcm5hbWUiLCJhcGlTdGFydGVkQXQiLCJEYXRlIiwibm93IiwiYXJ0aWZhY3QiLCJwcm9qZWN0UGF0aCIsImRlc2NyaXB0aW9uIiwicnVuQnVpbGRTdGVwcyIsImJ1aWxkQ29tbWFuZEFyZ3MiLCJjb25maWdGaWxlUGF0aCIsIndlYlN0YXJ0ZWRBdCIsIm9wdGlvbnMiLCJzdGVwcyIsImNtZCIsInByZUJ1aWxkQ29tbWFuZCIsImJ1aWxkQ29tbWFuZCIsInBvc3RCdWlsZENvbW1hbmQiLCJmaWx0ZXIiLCJzdGVwIiwiaSIsImxlbmd0aCIsImlzTGFzdCIsIkVycm9yIiwiYmx1ZSIsInNldHVwTWlncmF0b3IiLCJzZXR1cEZpeHR1cmVNYW5hZ2VyIiwidGFyZ2V0cyIsInJ1bkFjdGlvbiIsImxvY2FsSG9zdHMiLCJPYmplY3QiLCJrZXlzIiwiZGJDb25maWciLCJ0YXJnZXQiLCJ0YXJnZXRDb25maWciLCJob3N0IiwiY29ubmVjdGlvbiIsInRvTG93ZXJDYXNlIiwic3RhdHVzIiwiZ2V0U3RhdHVzIiwic3JjQ29uZmlnIiwiZGV2ZWxvcG1lbnRfbWFzdGVyIiwibGFiZWwiLCJmaXh0dXJlIiwidGVzdCIsInRvU2tpcCIsInJlbW90ZUNvbm4iLCJsb2NhbENvbm4iLCJkYXRhYmFzZSIsImR1bXBGaWxlbmFtZSIsInNyY0Nvbm4iLCJtaWdyYXRpb25zRHVtcCIsInVzZXIiLCJwYXNzd29yZCIsIl9kYiIsIm1pZ3JhdGlvbnMiLCJyYXciLCJjb3VudCIsImNvbm4iLCJkYiIsInVuZGVmaW5lZCIsInJvdyIsIm15c3FsQ21kIiwicmVjb3JkSWRzIiwiaW1wb3J0Rml4dHVyZSIsInByYWN0aWNlRGlyIiwiYXBpUm9vdFBhdGgiLCJmaWxlTmFtZXMiLCJtYXhTZXFObyIsInJlY3Vyc2l2ZSIsImZpbHRlcmVkU2VxcyIsImZpbGVOYW1lIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwic2VxTm8iLCJtYXRjaCIsInBhcnNlSW50Iiwic29ydCIsImEiLCJiIiwiY3VycmVudFNlcU5vIiwiZHN0UGF0aCIsInJ1bkNvZGUiLCJyZXBsYWNlIiwiY3JlYXRlRW50aXR5IiwiZ2VuZXJhdGVUZW1wbGF0ZSIsIndvcmtzcGFjZVJvb3QiLCJmaW5kV29ya3NwYWNlUm9vdCIsImNsYXVkZURpciIsInRhcmdldFNraWxsc0RpciIsInJlcXVpcmUiLCJzb3VyY2VCYXNlIiwic291cmNlU2tpbGxzRGlyIiwic291cmNlQ2xhdWRlTWQiLCJmb3JjZSIsImdyZWVuIiwidGFyZ2V0Q2xhdWRlTWQiLCJzb3VyY2VDb250ZW50IiwidGFyZ2V0Q29udGVudCIsInN0YXJ0TWFya2VyIiwiZW5kTWFya2VyIiwiYmVmb3JlIiwic3BsaXQiLCJhZnRlciIsIm5ld0NvbnRlbnQiLCJsb2NhbERpciIsImZpbGVQYXRoIiwidGVtcGxhdGUiLCJ0b0lTT1N0cmluZyIsImRpciIsInBhY2thZ2VQYXRoIiwi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
|
|
649
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgZXhlY1N5bmMsIHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGNwLCBta2RpciwgcmVhZGRpciwgcmVhZEZpbGUsIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGtuZXgsIHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIjtcbmltcG9ydCB7IHRzaWNsaSB9IGZyb20gXCJ0c2ljbGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBleGVjV2l0aExpbmVQcmVmaXgsXG4gIHByaW50QnVpbGRTdW1tYXJ5LFxuICBwcmludFRhc2tGYWlsZWQsXG4gIHByaW50VGFza0hlYWRlcixcbiAgcHJpbnRUYXNrU3RhcnQsXG4gIHByaW50VGFza1N1Y2Nlc3MsXG59IGZyb20gXCIuLi91dGlscy9jb25zb2xlLXV0aWxcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgZmluZEFwaVJvb3RQYXRoLCBmaW5kQXBwUm9vdFBhdGggfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IEFQSV9BUlRJRkFDVFMsIHR5cGUgQnVpbGRBcnRpZmFjdCwgV0VCX0FSVElGQUNUUyB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG5hc3luYyBmdW5jdGlvbiBib290c3RyYXAoKSB7XG4gIGNvbnN0IG5vdFRvSW5pdCA9IFtcImRldlwiLCBcImJ1aWxkXCIsIFwic3RhcnRcIiwgXCJza2lsbHNcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHRzaWNsaShwcm9jZXNzLmFyZ3YsIHtcbiAgICAgIHR5cGVzOiB7XG4gICAgICAgIFwiI2VudGl0eUlkXCI6IHtcbiAgICAgICAgICB0eXBlOiBcImF1dG9jb21wbGV0ZVwiLFxuICAgICAgICAgIG5hbWU6IFwiI2VudGl0eUlkXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI2VudGl0eUlkXCIsXG4gICAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxQYXJlbnRJZHMoKS5tYXAoKGVudGl0eUlkKSA9PiAoe1xuICAgICAgICAgICAgdGl0bGU6IGVudGl0eUlkLFxuICAgICAgICAgICAgdmFsdWU6IGVudGl0eUlkLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAgXCIjcmVjb3JkSWRzXCI6IFwibnVtYmVyW11cIixcbiAgICAgICAgXCIjbmFtZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICBcIiN0YXJnZXRzXCI6IHtcbiAgICAgICAgICB0eXBlOiBcIm11bHRpc2VsZWN0XCIsXG4gICAgICAgICAgbmFtZTogXCIjdGFyZ2V0c1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiUGxlYXNlIGlucHV0ICN0YXJnZXRzXCIsXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyB0aXRsZTogXCJEZXZlbG9wbWVudFwiLCB2YWx1ZTogXCJkZXZlbG9wbWVudF9tYXN0ZXJcIiB9LFxuICAgICAgICAgICAgeyB0aXRsZTogXCJQcm9kdWN0aW9uXCIsIHZhbHVlOiBcInByb2R1Y3Rpb25fbWFzdGVyXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiRml4dHVyZVwiLCB2YWx1ZTogXCJmaXh0dXJlXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiVGVzdFwiLCB2YWx1ZTogXCJ0ZXN0XCIgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImluaXRcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJpbXBvcnRcIiwgXCIjZW50aXR5SWRcIiwgXCIjcmVjb3JkSWRzXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInJ1blwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImFwcGx5XCIsIFwiI3RhcmdldHNcIl0sXG4gICAgICAgIFtcIm1pZ3JhdGVcIiwgXCJzdGF0dXNcIl0sXG4gICAgICAgIFtcInN0dWJcIiwgXCJwcmFjdGljZVwiLCBcIiNuYW1lXCJdLFxuICAgICAgICBbXCJzdHViXCIsIFwiZW50aXR5XCIsIFwiI25hbWVcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwibW9kZWxcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwibW9kZWxfdGVzdFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJ2aWV3X2xpc3RcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwidmlld19mb3JtXCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzeW5jXCJdLFxuICAgICAgICBbXCJkZXZcIl0sXG4gICAgICAgIFtcImJ1aWxkXCJdLFxuICAgICAgICBbXCJzdGFydFwiXSxcbiAgICAgICAgW1wic2tpbGxzXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wic2tpbGxzXCIsIFwiY3JlYXRlXCIsIFwiI25hbWVcIl0sXG4gICAgICBdLFxuICAgICAgcnVubmVyczoge1xuICAgICAgICBtaWdyYXRlX3N0YXR1cyxcbiAgICAgICAgbWlncmF0ZV9ydW4sXG4gICAgICAgIG1pZ3JhdGVfYXBwbHksXG4gICAgICAgIGZpeHR1cmVfaW5pdCxcbiAgICAgICAgZml4dHVyZV9pbXBvcnQsXG4gICAgICAgIGZpeHR1cmVfc3luYyxcbiAgICAgICAgc3R1Yl9wcmFjdGljZSxcbiAgICAgICAgc3R1Yl9lbnRpdHksXG4gICAgICAgIHNjYWZmb2xkX21vZGVsLFxuICAgICAgICBzY2FmZm9sZF9tb2RlbF90ZXN0LFxuICAgICAgICAvLyBzY2FmZm9sZF92aWV3X2xpc3QsXG4gICAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfZm9ybSxcbiAgICAgICAgc3luYyxcbiAgICAgICAgZGV2LFxuICAgICAgICBidWlsZCxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHNraWxsc19zeW5jLFxuICAgICAgICBza2lsbHNfY3JlYXRlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBTb25hbXUuZGVzdHJveSgpO1xuICB9XG59XG5cbmJvb3RzdHJhcCgpLmZpbmFsbHkoYXN5bmMgKCkgPT4ge1xuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5kZXN0cm95KCk7XG59KTtcblxuLyoqXG4gKiBwbnBtIHN5bmMg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrpbwg7Iux7YGs7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jKCkge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLnN5bmMoKTtcbn1cblxuLyoqXG4gKiBwbnBtIGRldiDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIO2UhOuhnOygne2KuOyXkCDrjIDtlbQgSE1SIOyngOybkO2VmOuKlCDqsJzrsJwg7ISc67KE66W8IOudhOybjOykjeuLiOuLpC5cbiAqXG4gKiBUeXBlU2NyaXB066W8IOuwlOuhnCDsi6TtlontlaAg7IiYIOyeiOuPhOuhnSBAc29uYW11LWtpdC90cy1sb2FkZXLrpbwsXG4gKiBITVLsnYQg7KeA7JuQ7ZWY6riwIOychO2VtCBAc29uYW11LWtpdC9obXItaG9va+ydhCBpbXBvcnTtlZjrqbAsXG4gKiDshozsiqTrp7Ug7KeA7JuQ7J2EIOychO2VtCAtLWVuYWJsZS1zb3VyY2UtbWFwcyDtlIzrnpjqt7jrpbwg7Y+s7ZWo7ZWY7JesIOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiDsnbTrlYwgQHNvbmFtdS1raXQvdHMtbG9hZGVy7JmAIEBzb25hbXUta2l0L2htci1ob29r64qUIHNvbmFtdeqwgCDsnpDssrTsoIHsnLzroZwg6rCA7KeA6rOgIOyeiOuKlCBkZXBlbmRlbmN57J6F64uI64ukLlxuICog65iQ7ZWcIOyLpO2WieyXkCDsgqzsmqntlZjripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuuPhCDrp4jssKzqsIDsp4DroZwgc29uYW116rCAIOyekOyytOyggeycvOuhnCDqsIDsp4Dqs6Ag7J6I64qUIGRlcGVuZGVuY3nsnoXri4jri6QuXG4gKiDrlLDrnbzshJwg7IKs7Jqp7J6QIO2UhOuhnOygne2KuOyXkOyEnOuKlCDsnbQg7IS4IO2MqO2CpOyngOulvCDsp4HsoJEg7ISk7LmY7ZWgIO2VhOyalOqwgCDsl4bsirXri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV2KCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcInNyYy9pbmRleC50c1wiO1xuXG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKFwi8J+agCBTdGFydGluZyBTb25hbXUgZGV2IHNlcnZlci4uLlxcblwiKSk7XG5cbiAgLy8g7J20IHNvbmFtdSDtjKjtgqTsp4DqsIAgZGVwZW5kZW5jaWVz66GcIOqwgOyngOqzoCDsnojripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuydmCBiaW4vcnVuLmpz66W8IOyCrOyaqe2VqeuLiOuLpC5cbiAgLy8g7J20IOqyveuhnCgvYmluL3J1bi5qcynripQgQHNvbmFtdS1raXQvaG1yLXJ1bm5lcuydmCBwYWNrYWdlLmpzb27snZggYmluIO2VhOuTnOyXkCDrqoXsi5zrkJjslrQg7J6I64qUIOq3uOqyg+qzvCDqsJnsirXri4jri6QuXG4gIGNvbnN0IGhvdFJ1bm5lckJpblBhdGggPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCkucmVzb2x2ZShcbiAgICBcIkBzb25hbXUta2l0L2htci1ydW5uZXIvYmluL3J1bi5qc1wiLFxuICApO1xuXG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLCAvLyBub2RlXG4gICAgW1xuICAgICAgaG90UnVubmVyQmluUGF0aCwgLy8g7J2066CH6rKMIO2VtOyEnCBob3QtcnVubmVy66W8IOyLpO2Wie2VmOq1rOyalFxuICAgICAgXCItLWNsZWFyLXNjcmVlbj1mYWxzZVwiLCAvLyDsnbTtlZggaG90LXJ1bm5lcuyXkOqyjCDrhJjqsqjspIQg7J247J6Q65Ok7J6F64uI64ukLlxuICAgICAgXCItLW5vZGUtYXJncz0tLWltcG9ydD1zb25hbXUvdHMtbG9hZGVyLXJlZ2lzdGVyXCIsIC8vIFR5cGVTY3JpcHQg7ISc7Y+s7Yq466W8IOychO2VnCDroZzrjZQsXG4gICAgICBcIi0tbm9kZS1hcmdzPS0taW1wb3J0PXNvbmFtdS9obXItaG9vay1yZWdpc3RlclwiLCAvLyBITVLsnYQg7KeA7JuQ7ZWY6riwIOychO2VnCBob29rLFxuICAgICAgXCItLW5vZGUtYXJncz0tLWVuYWJsZS1zb3VyY2UtbWFwc1wiLCAvLyDqt7jrpqzqs6Ag7IaM7Iqk66e1IOyngOybkOydhCDsnITtlZwg7ZSM656Y6re47J6F64uI64ukLlxuICAgICAgXCItLW9uLWtleT1yOnJlc3RhcnQ6UmVzdGFydCBzZXJ2ZXJcIiwgLy8gciDriITrpbTrqbQg7ISc67KEIOyerOyLnOyeke2VmOqyjCDtlbTspJjsmpQuXG4gICAgICBgLS1vbi1rZXk9ZjpzaGVsbChybSAke3BhdGguam9pbihhcGlSb290LCBcInNvbmFtdS5sb2NrXCIpfSk6cmVzdGFydDpGb3JjZSByZXN0YXJ0YCwgLy8gZiDriITrpbTrqbQgc29uYW11LmxvY2sg7YyM7J287J2EIOyngOyasOqzoCDshJzrsoQg7J6s7Iuc7J6R7ZWY6rKMIO2VtOykmOyalC5cblxuICAgICAgXCItLW9uLWtleT1lbnRlcjpzaGVsbChlY2hvIGhpKTpLZXkgYmluZGluZyB0ZXN0XCIsIC8vIGVudGVy66W8IGtleeuhnCDsk7gg7IiYIOyeiOydjOydhCDrs7TsnbTquLAg7JyE7ZWcIO2FjOyKpO2KuOyeheuLiOuLpC5cbiAgICAgIFwiLS1vbi1rZXk9Y3RybCtmIGN0cmwrZjpzaGVsbChnaXQgcHVsbCAmJiBwbnBtIGluc3RhbGwgJiYgcG5wbSAtLWZpbHRlciBzb25hbXUgYnVpbGQgJiYgZWNobyAnU29uYW11IGlzIG5vdyB1cC10by1kYXRlIScpOnJlc3RhcnQ6UHVsbCAmIGluc3RhbGwgJiBidWlsZCAmIHJlc3RhcnRcIiwgLy8gbW9kaWZpZXLsmYDsnZgg7KGw7ZWpLCDqt7jrpqzqs6Ag65GQIOqwnOydmCBjaG9yZOulvCDsgqzsmqntlaAg7IiYIOyeiOydjOydhCDrs7TsnbTquLAg7JyE7ZWcIO2FjOyKpO2KuOyeheuLiOuLpC5cbiAgICAgIGVudHJ5UG9pbnQsIC8vIOuniOyngOunieycvOuhnCDsi6TsoJwg7Iuk7ZaJ7ZWgIOyKpO2BrOumve2KuOydmCDqsr3roZzrpbwg64SY6rKo7KSN64uI64ukLlxuICAgIF0sXG4gICAge1xuICAgICAgY3dkOiBhcGlSb290LFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICBOT0RFX0VOVjogXCJkZXZlbG9wbWVudFwiLFxuICAgICAgICBIT1Q6IFwieWVzXCIsIC8vIOyWmOqwgCDsnojslrTslbwgSE1S7J20IO2ZnOyEse2ZlOuQqeuLiOuLpC5cbiAgICAgICAgQVBJX1JPT1RfUEFUSDogYXBpUm9vdCwgLy8g7J20IOqyveuhnOqwgCBobXItaG9va+ydmCDro6jtirgg65SU66CJ7Yag66as6rCAIOuQqeuLiOuLpC5cbiAgICAgIH0sXG4gICAgfSxcbiAgKTtcblxuICAvLyDsooXro4wg7LKY66asXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwiXFxuXFxu8J+RiyBTaHV0dGluZyBkb3duLi4uXCIpKTtcbiAgICBzZXJ2ZXJQcm9jZXNzLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfTtcblxuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIGNsZWFudXApO1xuICBwcm9jZXNzLm9uKFwiU0lHVEVSTVwiLCBjbGVhbnVwKTtcblxuICBzZXJ2ZXJQcm9jZXNzLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChg4p2MIFNlcnZlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoY29kZSB8fCAxKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIHBucG0gYnVpbGQg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrpbwg67mM65Oc7ZWp64uI64ukLlxuICpcbiAqIOu5jOuTnOyXkCDtlYTsmpTtlZwgLnN3Y3Jj64qUIO2UhOuhnOygne2KuCDro6jtirjsl5DshJwg7LC+6rOgLCDsl4bsnLzrqbQgc29uYW116rCAIOq0gOumrO2VmOuKlCAuc3djcmMucHJvamVjdC1kZWZhdWx066W8IOyCrOyaqe2VqeuLiOuLpC5cbiAqXG4gKiDsi6TsoJwg67mM65OcIO2DgOqynyjslYTti7DtjKntirgp6rO8IOuPmeyekeydgCBidWlsZC1jb25maWcudHPsl5Ag7KCV7J2Y65CY7Ja0IOyeiOyKteuLiOuLpC5cbiAqIOydtCDtlajsiJjripQgYnVpbGQtY29uZmlnLnRz7JeQIOygleydmOuQnCDrj5nsnpHrk6TsnYQg7Iuk7ZaJ7ZW07KO864qUIOyXre2VoOunjCDtlanri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGQoKSB7XG4gIGNvbnN0IGFwcFJvb3QgPSBmaW5kQXBwUm9vdFBhdGgoKTtcblxuICAvLyAuc3djcmMg7YyM7J287J2EIOyngOygle2VqeuLiOuLpC5cbiAgbGV0IHN3Y0ZpbGVQYXRoID0gXCIuc3djcmNcIjtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKHN3Y0ZpbGVQYXRoKSkge1xuICAgICAgLy8g7IKs7Jqp7J6QIO2UhOuhnOygne2KuOyXkCAuc3djcmPqsIAg7J6I7Jy866m0IOyasOyEoOycvOuhnCDsgqzsmqntlanri4jri6QuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oXCJVc2luZyAuc3djcmMgZnJvbSBwcm9qZWN0IHJvb3QuLi5cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDslYTri4jrnbzrqbQgc29uYW116rCAIOq0gOumrO2VmOuKlCAuc3djcmMucHJvamVjdC1kZWZhdWx066W8IOqwgOyguOuLpCDslIHri4jri6QuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oXCJVc2luZyBkZWZhdWx0IC5zd2NyYyBmcm9tIHNvbmFtdSBwYWNrYWdlLi4uXCIpKTtcbiAgICAgIHN3Y0ZpbGVQYXRoID0gcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcIi5zd2NyYy5wcm9qZWN0LWRlZmF1bHRcIik7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwiU2V0dGluZyB1cCBzd2MgY29uZmlnIGZpbGUgZmFpbGVkLlwiKSwgZXJyb3IpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIEFQSSDtlITroZzsoJ3tirjrpbwg67mM65Oc7ZWp64uI64ukLlxuICBjb25zdCBhcGlTdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB0cnkge1xuICAgIGZvciAoY29uc3QgYXJ0aWZhY3Qgb2YgQVBJX0FSVElGQUNUUykge1xuICAgICAgY29uc3QgY3dkID0gcGF0aC5qb2luKGFwcFJvb3QsIGFydGlmYWN0LnByb2plY3RQYXRoKTtcbiAgICAgIHByaW50VGFza0hlYWRlcihhcnRpZmFjdC5uYW1lLCBhcnRpZmFjdC5kZXNjcmlwdGlvbiwgY3dkKTtcblxuICAgICAgYXdhaXQgcnVuQnVpbGRTdGVwcyhhcnRpZmFjdCwgeyBjd2QsIGJ1aWxkQ29tbWFuZEFyZ3M6IHsgY29uZmlnRmlsZVBhdGg6IHN3Y0ZpbGVQYXRoIH0gfSk7XG4gICAgfVxuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiQVBJXCIsIHRydWUsIERhdGUubm93KCkgLSBhcGlTdGFydGVkQXQpO1xuICB9IGNhdGNoIHtcbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIkFQSVwiLCBmYWxzZSwgRGF0ZS5ub3coKSAtIGFwaVN0YXJ0ZWRBdCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8gV2ViIO2UhOuhnOygne2KuOulvCDruYzrk5ztlanri4jri6QuXG4gIGNvbnN0IHdlYlN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBXRUJfQVJUSUZBQ1RTKSB7XG4gICAgICBjb25zdCBjd2QgPSBwYXRoLmpvaW4oYXBwUm9vdCwgYXJ0aWZhY3QucHJvamVjdFBhdGgpO1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBjd2QpO1xuXG4gICAgICBhd2FpdCBydW5CdWlsZFN0ZXBzKGFydGlmYWN0LCB7IGN3ZCwgYnVpbGRDb21tYW5kQXJnczoge30gfSk7XG4gICAgfVxuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiV2ViXCIsIHRydWUsIERhdGUubm93KCkgLSB3ZWJTdGFydGVkQXQpO1xuICB9IGNhdGNoIHtcbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIldlYlwiLCBmYWxzZSwgRGF0ZS5ub3coKSAtIHdlYlN0YXJ0ZWRBdCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogcHJlLWJ1aWxkLCBidWlsZCwgcG9zdC1idWlsZCDri6jqs4Trpbwg7Iic7LCo7KCB7Jy866GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuQnVpbGRTdGVwczxUPihcbiAgYXJ0aWZhY3Q6IEJ1aWxkQXJ0aWZhY3Q8VD4sXG4gIG9wdGlvbnM6IHsgY3dkOiBzdHJpbmc7IGJ1aWxkQ29tbWFuZEFyZ3M6IFQgfSxcbikge1xuICBjb25zdCBzdGVwcyA9IFtcbiAgICB7IG5hbWU6IFwicHJlLWJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QucHJlQnVpbGRDb21tYW5kPy4oKSB9LFxuICAgIHsgbmFtZTogXCJidWlsZFwiLCBjbWQ6IGFydGlmYWN0LmJ1aWxkQ29tbWFuZChvcHRpb25zLmJ1aWxkQ29tbWFuZEFyZ3MpIH0sXG4gICAgeyBuYW1lOiBcInBvc3QtYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5wb3N0QnVpbGRDb21tYW5kPy4oKSB9LFxuICBdLmZpbHRlcigoc3RlcCkgPT4gc3RlcC5jbWQpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdGVwID0gc3RlcHNbaV07XG4gICAgY29uc3QgaXNMYXN0ID0gaSA9PT0gc3RlcHMubGVuZ3RoIC0gMTtcblxuICAgIHRyeSB7XG4gICAgICBhc3NlcnQoc3RlcC5jbWQpO1xuICAgICAgcHJpbnRUYXNrU3RhcnQoc3RlcC5uYW1lLCBzdGVwLmNtZCwgaXNMYXN0KTtcbiAgICAgIGF3YWl0IGV4ZWNXaXRoTGluZVByZWZpeChzdGVwLmNtZCwgeyBjd2Q6IG9wdGlvbnMuY3dkIH0pO1xuICAgICAgcHJpbnRUYXNrU3VjY2VzcyhzdGVwLm5hbWUsIGlzTGFzdCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBwcmludFRhc2tGYWlsZWQoc3RlcC5uYW1lLCBpc0xhc3QpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3N0ZXAubmFtZX0gZmFpbGVkYCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogcG5wbSBzdGFydCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOu5jOuTnOuQnCDtlITroZzsoJ3tirjrpbwg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIOu5jOuTnOuQnCDqsrDqs7zrrLwoZGlzdCDrlJTroInthqDrpqzsnZggaW5kZXguanMg7JeU7Yq466as7Y+s7J247Yq4KeydtCDsl4bri6TrqbQg7Iuk7ZaJ7J2EIOykkeuLqO2VqeuLiOuLpC5cbiAqIOyGjOyKpOuntSDsp4Dsm5Dqs7wgZG90ZW52IOyngOybkOydhCDtj6ztlajtlZjsl6wg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcImRpc3QvaW5kZXguanNcIjtcblxuICBpZiAoIShhd2FpdCBleGlzdHMoZW50cnlQb2ludCkpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2VudHJ5UG9pbnR9IG5vdCBmb3VuZC4gUGxlYXNlIGJ1aWxkIHlvdXIgcHJvamVjdCBmaXJzdC5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJ1bjogeWFybiBzb25hbXUgYnVpbGRcIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcImNoaWxkX3Byb2Nlc3NcIik7XG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgIFtcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIFwiLXJcIiwgXCJkb3RlbnYvY29uZmlnXCIsIGVudHJ5UG9pbnRdLFxuICAgIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICB9LFxuICApO1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgKCkgPT4ge1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBNaWdyYXRvcigpIHtcbiAgLy8gbWlncmF0b3JcbiAgbWlncmF0b3IgPSBuZXcgTWlncmF0b3IoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBGaXh0dXJlTWFuYWdlcigpIHtcbiAgRml4dHVyZU1hbmFnZXIuaW5pdCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX2FwcGx5KHRhcmdldHM6IChrZXlvZiBTb25hbXVEQkNvbmZpZylbXSkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG4gIGF3YWl0IG1pZ3JhdG9yLnJ1bkFjdGlvbihcImFwcGx5XCIsIHRhcmdldHMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3J1bigpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuICBjb25zdCBsb2NhbEhvc3RzID0gW1wibG9jYWxob3N0XCIsIFwiMTI3LjAuMC4xXCIsIFwiMC4wLjAuMFwiLCBcIjo6MVwiXTtcbiAgY29uc3QgdGFyZ2V0cyA9IE9iamVjdC5rZXlzKFNvbmFtdS5kYkNvbmZpZykuZmlsdGVyKCh0YXJnZXQpID0+IHtcbiAgICBjb25zdCB0YXJnZXRDb25maWcgPSBTb25hbXUuZGJDb25maWdbdGFyZ2V0IGFzIGtleW9mIFNvbmFtdURCQ29uZmlnXTtcbiAgICBjb25zdCBob3N0ID0gKHRhcmdldENvbmZpZz8uY29ubmVjdGlvbiBhcyB7IGhvc3Q/OiBzdHJpbmcgfSk/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIjtcbiAgICByZXR1cm4gbG9jYWxIb3N0cy5pbmNsdWRlcyhob3N0LnRvTG93ZXJDYXNlKCkpO1xuICB9KTtcblxuICAvLyDroZzsu6wg642w7J207YSw67Kg7J207Iqk7JeQIOuMgO2VtOyEnOunjCDsoITssrQg66eI7J206re466CI7J207IWY7JeQ7IScIOuPmeyekVxuICBhd2FpdCBtaWdyYXRvci5ydW5BY3Rpb24oXCJhcHBseVwiLCB0YXJnZXRzIGFzIChrZXlvZiBTb25hbXVEQkNvbmZpZylbXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1pZ3JhdGVfc3RhdHVzKCkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG5cbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgbWlncmF0b3IuZ2V0U3RhdHVzKCk7XG4gIC8vIHN0YXR1cztcbiAgY29uc29sZS5sb2coc3RhdHVzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbml0KCkge1xuICBjb25zdCBzcmNDb25maWcgPSBTb25hbXUuZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyO1xuICBjb25zdCB0YXJnZXRzID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBcIihSRU1PVEUpIEZpeHR1cmUgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLmZpeHR1cmUsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogXCIoTE9DQUwpIFRlc3RpbmcgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLnRlc3QsXG4gICAgICB0b1NraXA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbW90ZUNvbm4gPSBTb25hbXUuZGJDb25maWcuZml4dHVyZS5jb25uZWN0aW9uIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZztcbiAgICAgICAgY29uc3QgbG9jYWxDb25uID0gU29uYW11LmRiQ29uZmlnLnRlc3QuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIHJldHVybiByZW1vdGVDb25uLmhvc3QgPT09IGxvY2FsQ29ubi5ob3N0ICYmIHJlbW90ZUNvbm4uZGF0YWJhc2UgPT09IGxvY2FsQ29ubi5kYXRhYmFzZTtcbiAgICAgIH0pKCksXG4gICAgfSxcbiAgXSBhcyB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBjb25maWc6IEtuZXguQ29uZmlnO1xuICAgIHRvU2tpcD86IGJvb2xlYW47XG4gIH1bXTtcblxuICAvLyAxLiDquLDspIBEQiDsiqTtgqTrp4jrpbwg642k7ZSEXG4gIGNvbnNvbGUubG9nKFwiRFVNUC4uLlwiKTtcbiAgY29uc3QgZHVtcEZpbGVuYW1lID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGNvbnN0IHNyY0Nvbm4gPSBzcmNDb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gIGNvbnN0IG1pZ3JhdGlvbnNEdW1wID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC1taWdyYXRpb25zLSR7RGF0ZS5ub3coKX0uc3FsYDtcbiAgZXhlY1N5bmMoXG4gICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLWQgLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9ID4gJHtkdW1wRmlsZW5hbWV9YCxcbiAgKTtcbiAgY29uc3QgX2RiID0ga25leChzcmNDb25maWcpO1xuICBjb25zdCBbW21pZ3JhdGlvbnNdXSA9IGF3YWl0IF9kYi5yYXcoXG4gICAgXCJTRUxFQ1QgQ09VTlQoKikgYXMgY291bnQgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX3NjaGVtYSA9ID8gQU5EIHRhYmxlX25hbWUgPSAna25leF9taWdyYXRpb25zJ1wiLFxuICAgIFtzcmNDb25uLmRhdGFiYXNlXSxcbiAgKTtcbiAgaWYgKG1pZ3JhdGlvbnMuY291bnQgPiAwKSB7XG4gICAgZXhlY1N5bmMoXG4gICAgICBgbXlzcWxkdW1wIC1oJHtzcmNDb25uLmhvc3R9IC11JHtzcmNDb25uLnVzZXJ9IC1wJHtzcmNDb25uLnBhc3N3b3JkfSAtLXNpbmdsZS10cmFuc2FjdGlvbiAtLW5vLWNyZWF0ZS1kYiAtLXRyaWdnZXJzICR7c3JjQ29ubi5kYXRhYmFzZX0ga25leF9taWdyYXRpb25zIGtuZXhfbWlncmF0aW9uc19sb2NrID4gJHttaWdyYXRpb25zRHVtcH1gLFxuICAgICk7XG4gIH1cblxuICAvLyAyLiDrjIDsg4FEQiDqsIHqsIHsl5Ag64yA7ZWY7JesIOyhtOyerOyXrOu2gCDtmZXsnbgg7ZuEIOu2k+q4sFxuICBmb3IgYXdhaXQgKGNvbnN0IHsgbGFiZWwsIGNvbmZpZywgdG9Ta2lwIH0gb2YgdGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbm4gPSBjb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG5cbiAgICBpZiAodG9Ta2lwID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCR7bGFiZWx9OiBTa2lwcGVkIWApKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGRiID0ga25leCh7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgIC4uLigoY29uZmlnLmNvbm5lY3Rpb24gPz8ge30pIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZyksXG4gICAgICAgIGRhdGFiYXNlOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IFtbcm93XV0gPSBhd2FpdCBkYi5yYXcoYFNIT1cgREFUQUJBU0VTIExJS0UgXCIke2Nvbm4uZGF0YWJhc2V9XCJgKTtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCR7bGFiZWx9OiBEYXRhYmFzZSBcIiR7Y29ubi5kYXRhYmFzZX1cIiBBbHJlYWR5IGV4aXN0c2ApKTtcbiAgICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBTWU5DIHRvICR7bGFiZWx9Li4uYCk7XG4gICAgY29uc3QgbXlzcWxDbWQgPSBgbXlzcWwgLWgke2Nvbm4uaG9zdH0gLXUke2Nvbm4udXNlcn0gLXAke2Nvbm4ucGFzc3dvcmR9YDtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gLWUgJ0RST1AgREFUQUJBU0UgSUYgRVhJU1RTIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdDUkVBVEUgREFUQUJBU0UgXFxgJHtjb25uLmRhdGFiYXNlfVxcYCdgKTtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7ZHVtcEZpbGVuYW1lfWApO1xuICAgIGlmIChhd2FpdCBleGlzdHMobWlncmF0aW9uc0R1bXApKSB7XG4gICAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7bWlncmF0aW9uc0R1bXB9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXdhaXQgX2RiLmRlc3Ryb3koKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgcmVjb3JkSWRzOiBudW1iZXJbXSkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuaW1wb3J0Rml4dHVyZShlbnRpdHlJZCwgcmVjb3JkSWRzKTtcbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX3N5bmMoKSB7XG4gIGF3YWl0IHNldHVwRml4dHVyZU1hbmFnZXIoKTtcblxuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5zeW5jKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfcHJhY3RpY2UobmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHByYWN0aWNlRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJwcmFjdGljZXNcIik7XG4gIGNvbnN0IGZpbGVOYW1lcyA9IGF3YWl0IHJlYWRkaXIocHJhY3RpY2VEaXIpO1xuXG4gIGNvbnN0IG1heFNlcU5vID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIShhd2FpdCBleGlzdHMocHJhY3RpY2VEaXIpKSkge1xuICAgICAgYXdhaXQgbWtkaXIocHJhY3RpY2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkU2VxcyA9IGZpbGVOYW1lc1xuICAgICAgLmZpbHRlcigoZmlsZU5hbWUpID0+IGZpbGVOYW1lLnN0YXJ0c1dpdGgoXCJwXCIpICYmIGZpbGVOYW1lLmVuZHNXaXRoKFwiLnRzXCIpKVxuICAgICAgLm1hcCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgWywgc2VxTm9dID0gZmlsZU5hbWUubWF0Y2goL15wKFswLTldKyktLykgPz8gW1wiMFwiLCBcIjBcIl07XG4gICAgICAgIHJldHVybiBwYXJzZUludChzZXFObyk7XG4gICAgICB9KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcblxuICAgIGlmIChmaWx0ZXJlZFNlcXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGZpbHRlcmVkU2Vxc1swXTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSkoKTtcblxuICBjb25zdCBjdXJyZW50U2VxTm8gPSBtYXhTZXFObyArIDE7XG4gIGNvbnN0IGZpbGVOYW1lID0gYHAke2N1cnJlbnRTZXFOb30tJHtuYW1lfS50c2A7XG4gIGNvbnN0IGRzdFBhdGggPSBwYXRoLmpvaW4ocHJhY3RpY2VEaXIsIGZpbGVOYW1lKTtcblxuICBjb25zdCBjb2RlID0gW1xuICAgIGBpbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICBcIlwiLFxuICAgIGBjb25zb2xlLmNsZWFyKCk7YCxcbiAgICBgY29uc29sZS5sb2coXCIke2ZpbGVOYW1lfVwiKTtgLFxuICAgIFwiXCIsXG4gICAgYFNvbmFtdS5ydW5TY3JpcHQoYXN5bmMgKCkgPT4ge2AsXG4gICAgYCAvLyBUT0RPYCxcbiAgICBgfSk7YCxcbiAgICBcIlwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG4gIGF3YWl0IHdyaXRlRmlsZShkc3RQYXRoLCBjb2RlKTtcblxuICBleGVjU3luYyhgY29kZSAke2RzdFBhdGh9YCk7XG5cbiAgY29uc3QgcnVuQ29kZSA9IGB5YXJuIG5vZGUgLXIgZG90ZW52L2NvbmZpZyAtLWVuYWJsZS1zb3VyY2UtbWFwcyBkaXN0L3ByYWN0aWNlcy8ke2ZpbGVOYW1lLnJlcGxhY2UoXG4gICAgXCIudHNcIixcbiAgICBcIi5qc1wiLFxuICApfWA7XG4gIGNvbnNvbGUubG9nKGAke2NoYWxrLmJsdWUocnVuQ29kZSl9IGNvcGllZCB0byBjbGlwYm9hcmQuYCk7XG4gIGV4ZWNTeW5jKGBlY2hvIFwiJHtydW5Db2RlfVwiIHwgcGJjb3B5YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfZW50aXR5KGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5jcmVhdGVFbnRpdHkoeyBlbnRpdHlJZCwgdGl0bGU6IGVudGl0eUlkIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF9tb2RlbChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcIm1vZGVsXCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX21vZGVsX3Rlc3QoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJtb2RlbF90ZXN0XCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgc2tpbGxzIHN5bmMg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDqs7Xsi50gU2tpbGxz66W8IOuhnOy7rCDtlITroZzsoJ3tirjroZwg64+Z6riw7ZmU7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBza2lsbHNfc3luYygpIHtcbiAgY29uc3Qgd29ya3NwYWNlUm9vdCA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VSb290KCk7XG4gIGNvbnN0IGNsYXVkZURpciA9IHBhdGguam9pbih3b3Jrc3BhY2VSb290LCBcIi5jbGF1ZGVcIik7XG4gIGNvbnN0IHRhcmdldFNraWxsc0RpciA9IHBhdGguam9pbihjbGF1ZGVEaXIsIFwic2tpbGxzXCIsIFwic29uYW11XCIpO1xuXG4gIC8vIOKchSDsiJjsoJU6IHNvbmFtdSDtjKjtgqTsp4Ag6riw7KSAIOyDgeuMgCDqsr3roZzroZwgc2tpbGxzIOywvuq4sFxuICAvLyBjbGkudHMg7JyE7LmYOiBzb25hbXUvbW9kdWxlcy9zb25hbXUvc3JjL2Jpbi9jbGkudHNcbiAgLy8gc2tpbGxzIOychOy5mDogc29uYW11L21vZHVsZXMvc2tpbGxzL1xuICBjb25zdCBzb3VyY2VCYXNlID0gcGF0aC5yZXNvbHZlKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcIi4uXCIsIFwic2tpbGxzXCIpO1xuICBjb25zdCBzb3VyY2VTa2lsbHNEaXIgPSBwYXRoLmpvaW4oc291cmNlQmFzZSwgXCJzb25hbXVcIik7XG4gIGNvbnN0IHNvdXJjZUNsYXVkZU1kID0gcGF0aC5qb2luKHNvdXJjZUJhc2UsIFwiQ0xBVURFLm1kXCIpO1xuXG4gIGlmICghKGF3YWl0IGV4aXN0cyhzb3VyY2VTa2lsbHNEaXIpKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIlNraWxscyBzb3VyY2Ugbm90IGZvdW5kIGluIHNvbmFtdSBwYWNrYWdlLlwiKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8g64yA7IOBIOuUlOugie2GoOumrCDsg53shLFcbiAgYXdhaXQgbWtkaXIodGFyZ2V0U2tpbGxzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAvLyDrs7XsgqwgKHJlY3Vyc2l2ZSwg642u7Ja07JOw6riwKVxuICBhd2FpdCBjcChzb3VyY2VTa2lsbHNEaXIsIHRhcmdldFNraWxsc0RpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIFNraWxscyBzeW5jZWQgdG8gJHt0YXJnZXRTa2lsbHNEaXJ9YCkpO1xuXG4gIC8vIENMQVVERS5tZCDrs7Xsgqwv7JeF642w7J207Yq4XG4gIGlmIChhd2FpdCBleGlzdHMoc291cmNlQ2xhdWRlTWQpKSB7XG4gICAgY29uc3QgdGFyZ2V0Q2xhdWRlTWQgPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcIkNMQVVERS5tZFwiKTtcbiAgICBjb25zdCBzb3VyY2VDb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoc291cmNlQ2xhdWRlTWQsIFwidXRmLThcIik7XG5cbiAgICBpZiAoYXdhaXQgZXhpc3RzKHRhcmdldENsYXVkZU1kKSkge1xuICAgICAgY29uc3QgdGFyZ2V0Q29udGVudCA9IGF3YWl0IHJlYWRGaWxlKHRhcmdldENsYXVkZU1kLCBcInV0Zi04XCIpO1xuICAgICAgY29uc3Qgc3RhcnRNYXJrZXIgPSBcIjwhLS0gU09OQU1VOlNUQVJUIC0tPlwiO1xuICAgICAgY29uc3QgZW5kTWFya2VyID0gXCI8IS0tIFNPTkFNVTpFTkQgLS0+XCI7XG4gICAgICBpZiAodGFyZ2V0Q29udGVudC5pbmNsdWRlcyhzdGFydE1hcmtlcikgJiYgdGFyZ2V0Q29udGVudC5pbmNsdWRlcyhlbmRNYXJrZXIpKSB7XG4gICAgICAgIC8vIG1hcmtlciDsmIHsl63rp4wg6rWQ7LK07ZWp64uI64ukLlxuICAgICAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXRDb250ZW50LnNwbGl0KHN0YXJ0TWFya2VyKVswXTtcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXRDb250ZW50LnNwbGl0KGVuZE1hcmtlcilbMV07XG4gICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBgJHtiZWZvcmV9JHtzb3VyY2VDb250ZW50fSR7YWZ0ZXJ9YDtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHRhcmdldENsYXVkZU1kLCBuZXdDb250ZW50KTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBDTEFVREUubWQgdXBkYXRlZCAobWFya2VyIHJlZ2lvbilgKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYOKPrSBDTEFVREUubWQgZXhpc3RzIGJ1dCBubyBtYXJrZXJzLCBza2lwcGVkYCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUodGFyZ2V0Q2xhdWRlTWQsIHNvdXJjZUNvbnRlbnQpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBDTEFVREUubWQgY3JlYXRlZGApKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwbnBtIHNvbmFtdSBza2lsbHMgY3JlYXRlIDxuYW1lPiDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOuhnOy7rCBza2lsbCDstIjslYjsnYQg7IOd7ISx7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBza2lsbHNfY3JlYXRlKG5hbWU6IHN0cmluZykge1xuICBjb25zdCB3b3Jrc3BhY2VSb290ID0gYXdhaXQgZmluZFdvcmtzcGFjZVJvb3QoKTtcbiAgY29uc3QgbG9jYWxEaXIgPSBwYXRoLmpvaW4od29ya3NwYWNlUm9vdCwgXCIuY2xhdWRlXCIsIFwic2tpbGxzXCIsIFwibG9jYWxcIik7XG4gIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGxvY2FsRGlyLCBgJHtuYW1lfS5tZGApO1xuXG4gIGlmIChhd2FpdCBleGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGBTa2lsbCBcIiR7bmFtZX1cIiBhbHJlYWR5IGV4aXN0cy5gKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgbWtkaXIobG9jYWxEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gYC0tLVxubmFtZTogJHtuYW1lfVxuY2F0ZWdvcnk6IG90aGVyXG5jcmVhdGVkX2F0OiAke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF19XG5zdGF0dXM6IGRyYWZ0XG4tLS1cblxuIyBb7KCc66qpXVxuXG4jIyDsg4HtmalcblxuW+yWtOuWpCDrrLjsoJzsmIDripTsp4BdXG5cbiMjIO2VtOqysCDrsKnrspVcblxuW+yWtOuWu+qyjCDtlbTqsrDtlojripTsp4BdXG5cbiMjIOy9lOuTnCDsmIjsi5xcblxuXFxgXFxgXFxgdHlwZXNjcmlwdFxuLy8g7JiI7IucIOy9lOuTnFxuXFxgXFxgXFxgXG5gO1xuXG4gIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgdGVtcGxhdGUpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIENyZWF0ZWQgLmNsYXVkZS9za2lsbHMvbG9jYWwvJHtuYW1lfS5tZGApKTtcbn1cblxuLyoqXG4gKiDsm4ztgazsiqTtjpjsnbTsiqQg66Oo7Yq466W8IOywvuyKteuLiOuLpC5cbiAqIOyasOyEoOyInOychDogcG5wbS13b3Jrc3BhY2UueWFtbCA+IENMQVVERS5tZCA+IOujqO2KuCBwYWNrYWdlLmpzb24gKHdvcmtzcGFjZXMg7ZWE65OcKVxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kV29ya3NwYWNlUm9vdCgpIHtcbiAgbGV0IGRpciA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgd2hpbGUgKGRpciAhPT0gcGF0aC5kaXJuYW1lKGRpcikpIHtcbiAgICAvLyAxLiBwbnBtLXdvcmtzcGFjZS55YW1sIO2MjOydvOydtCDsnojripTsp4Ag7ZmV7J24LiDsnojsnLzrqbQg7ZmV7Iuk7ZWcIG1vbm9yZXBvIOujqO2KuC5cbiAgICBpZiAoYXdhaXQgZXhpc3RzKHBhdGguam9pbihkaXIsIFwicG5wbS13b3Jrc3BhY2UueWFtbFwiKSkpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuXG4gICAgLy8gMi4gQ0xBVURFLm1kIO2MjOydvOydtCDsnojripTsp4Ag7ZmV7J24LiDsnojsnLzrqbQg7ZSE66Gc7KCd7Yq4IOujqO2KuOuhnCDqsITso7ztlaguXG4gICAgaWYgKGF3YWl0IGV4aXN0cyhwYXRoLmpvaW4oZGlyLCBcIkNMQVVERS5tZFwiKSkpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuXG4gICAgLy8gMy4gcGFja2FnZS5qc29u7JeQIHdvcmtzcGFjZXMg7ZWE65Oc6rCAIOyeiOycvOuptCDro6jtirguXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBcInBhY2thZ2UuanNvblwiKTtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKHBhY2thZ2VQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKHBhY2thZ2VQYXRoLCBcInV0Zi04XCIpKTtcbiAgICAgICAgaWYgKHBhY2thZ2VKc29uLndvcmtzcGFjZXMpIHtcbiAgICAgICAgICByZXR1cm4gZGlyO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8g7YyM7IuxIOyLpO2MqOyLnCDrrLTsi5xcbiAgICAgIH1cbiAgICB9XG4gICAgZGlyID0gcGF0aC5kaXJuYW1lKGRpcik7XG4gIH1cblxuICAvLyDssL7sp4Ag66q77ZWY66m0IGFwaSDtj7TrjZTsnZgg67aA66qoIOyCrOyaqVxuICByZXR1cm4gZmluZEFwcFJvb3RQYXRoKCk7XG59XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJkb3RlbnYiLCJjb25maWciLCJhc3NlcnQiLCJleGVjU3luYyIsInNwYXduIiwiY3AiLCJta2RpciIsInJlYWRkaXIiLCJyZWFkRmlsZSIsIndyaXRlRmlsZSIsImtuZXgiLCJjcmVhdGVSZXF1aXJlIiwicGF0aCIsInByb2Nlc3MiLCJ0c2ljbGkiLCJTb25hbXUiLCJFbnRpdHlNYW5hZ2VyIiwiTWlncmF0b3IiLCJGaXh0dXJlTWFuYWdlciIsImV4ZWNXaXRoTGluZVByZWZpeCIsInByaW50QnVpbGRTdW1tYXJ5IiwicHJpbnRUYXNrRmFpbGVkIiwicHJpbnRUYXNrSGVhZGVyIiwicHJpbnRUYXNrU3RhcnQiLCJwcmludFRhc2tTdWNjZXNzIiwiZXhpc3RzIiwiZmluZEFwaVJvb3RQYXRoIiwiZmluZEFwcFJvb3RQYXRoIiwiQVBJX0FSVElGQUNUUyIsIldFQl9BUlRJRkFDVFMiLCJtaWdyYXRvciIsImJvb3RzdHJhcCIsIm5vdFRvSW5pdCIsImluY2x1ZGVzIiwiYXJndiIsImluaXQiLCJ0eXBlcyIsInR5cGUiLCJuYW1lIiwibWVzc2FnZSIsImNob2ljZXMiLCJnZXRBbGxQYXJlbnRJZHMiLCJtYXAiLCJlbnRpdHlJZCIsInRpdGxlIiwidmFsdWUiLCJhcmdzIiwicnVubmVycyIsIm1pZ3JhdGVfc3RhdHVzIiwibWlncmF0ZV9ydW4iLCJtaWdyYXRlX2FwcGx5IiwiZml4dHVyZV9pbml0IiwiZml4dHVyZV9pbXBvcnQiLCJmaXh0dXJlX3N5bmMiLCJzdHViX3ByYWN0aWNlIiwic3R1Yl9lbnRpdHkiLCJzY2FmZm9sZF9tb2RlbCIsInNjYWZmb2xkX21vZGVsX3Rlc3QiLCJzeW5jIiwiZGV2IiwiYnVpbGQiLCJzdGFydCIsInNraWxsc19zeW5jIiwic2tpbGxzX2NyZWF0ZSIsImRlc3Ryb3kiLCJmaW5hbGx5Iiwic3luY2VyIiwiYXBpUm9vdCIsImVudHJ5UG9pbnQiLCJjb25zb2xlIiwibG9nIiwieWVsbG93IiwiYm9sZCIsImhvdFJ1bm5lckJpblBhdGgiLCJ1cmwiLCJyZXNvbHZlIiwic2VydmVyUHJvY2VzcyIsImV4ZWNQYXRoIiwiam9pbiIsImN3ZCIsInN0ZGlvIiwiZW52IiwiTk9ERV9FTlYiLCJIT1QiLCJBUElfUk9PVF9QQVRIIiwiY2xlYW51cCIsImtpbGwiLCJleGl0Iiwib24iLCJjb2RlIiwiZXJyb3IiLCJyZWQiLCJhcHBSb290Iiwic3djRmlsZVBhdGgiLCJkaW0iLCJkaXJuYW1lIiwiYXBpU3RhcnRlZEF0IiwiRGF0ZSIsIm5vdyIsImFydGlmYWN0IiwicHJvamVjdFBhdGgiLCJkZXNjcmlwdGlvbiIsInJ1bkJ1aWxkU3RlcHMiLCJidWlsZENvbW1hbmRBcmdzIiwiY29uZmlnRmlsZVBhdGgiLCJ3ZWJTdGFydGVkQXQiLCJvcHRpb25zIiwic3RlcHMiLCJjbWQiLCJwcmVCdWlsZENvbW1hbmQiLCJidWlsZENvbW1hbmQiLCJwb3N0QnVpbGRDb21tYW5kIiwiZmlsdGVyIiwic3RlcCIsImkiLCJsZW5ndGgiLCJpc0xhc3QiLCJFcnJvciIsImJsdWUiLCJzZXR1cE1pZ3JhdG9yIiwic2V0dXBGaXh0dXJlTWFuYWdlciIsInRhcmdldHMiLCJydW5BY3Rpb24iLCJsb2NhbEhvc3RzIiwiT2JqZWN0Iiwia2V5cyIsImRiQ29uZmlnIiwidGFyZ2V0IiwidGFyZ2V0Q29uZmlnIiwiaG9zdCIsImNvbm5lY3Rpb24iLCJ0b0xvd2VyQ2FzZSIsInN0YXR1cyIsImdldFN0YXR1cyIsInNyY0NvbmZpZyIsImRldmVsb3BtZW50X21hc3RlciIsImxhYmVsIiwiZml4dHVyZSIsInRlc3QiLCJ0b1NraXAiLCJyZW1vdGVDb25uIiwibG9jYWxDb25uIiwiZGF0YWJhc2UiLCJkdW1wRmlsZW5hbWUiLCJzcmNDb25uIiwibWlncmF0aW9uc0R1bXAiLCJ1c2VyIiwicGFzc3dvcmQiLCJfZGIiLCJtaWdyYXRpb25zIiwicmF3IiwiY291bnQiLCJjb25uIiwiZGIiLCJ1bmRlZmluZWQiLCJyb3ciLCJteXNxbENtZCIsInJlY29yZElkcyIsImltcG9ydEZpeHR1cmUiLCJwcmFjdGljZURpciIsImFwaVJvb3RQYXRoIiwiZmlsZU5hbWVzIiwibWF4U2VxTm8iLCJyZWN1cnNpdmUiLCJmaWx0ZXJlZFNlcXMiLCJmaWxlTmFtZSIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInNlcU5vIiwibWF0Y2giLCJwYXJzZUludCIsInNvcnQiLCJhIiwiYiIsImN1cnJlbnRTZXFObyIsImRzdFBhdGgiLCJydW5Db2RlIiwicmVwbGFjZSIsImNyZWF0ZUVudGl0eSIsImdlbmVyYXRlVGVtcGxhdGUiLCJ3b3Jrc3BhY2VSb290IiwiZmluZFdvcmtzcGFjZVJvb3QiLCJjbGF1ZGVEaXIiLCJ0YXJnZXRTa2lsbHNEaXIiLCJzb3VyY2VCYXNlIiwic291cmNlU2tpbGxzRGlyIiwic291cmNlQ2xhdWRlTWQiLCJmb3JjZSIsImdyZWVuIiwidGFyZ2V0Q2xhdWRlTWQiLCJzb3VyY2VDb250ZW50IiwidGFyZ2V0Q29udGVudCIsInN0YXJ0TWFya2VyIiwiZW5kTWFya2VyIiwiYmVmb3JlIiwic3BsaXQiLCJhZnRlciIsIm5ld0NvbnRlbnQiLCJsb2NhbERpciIsImZpbGVQYXRoIiwidGVtcGxhdGUiLCJ0b0lTT1N0cmluZyIsImRpciIsInBhY2thZ2VQYXRoIiwicGFja2FnZUpzb24iLCJKU09OIiwicGFyc2UiLCJ3b3Jrc3BhY2VzIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsT0FBT0MsWUFBWSxTQUFTO0FBRTVCQSxPQUFPQyxNQUFNO0FBRWIsT0FBT0MsWUFBWSxTQUFTO0FBQzVCLFNBQVNDLFFBQVEsRUFBRUMsS0FBSyxRQUFRLGdCQUFnQjtBQUNoRCxTQUFTQyxFQUFFLEVBQUVDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLFNBQVMsUUFBUSxtQkFBYztBQUN0RSxPQUFPQyxVQUF5QixPQUFPO0FBQ3ZDLFNBQVNDLGFBQWEsUUFBUSxTQUFTO0FBQ3ZDLE9BQU9DLFVBQVUsT0FBTztBQUN4QixPQUFPQyxhQUFhLFVBQVU7QUFDOUIsU0FBU0MsTUFBTSxRQUFRLFNBQVM7QUFDaEMsU0FBU0MsTUFBTSxRQUFRLGtCQUFTO0FBRWhDLFNBQVNDLGFBQWEsUUFBUSw4QkFBMkI7QUFDekQsU0FBU0MsUUFBUSxRQUFRLDJCQUF3QjtBQUNqRCxTQUFTQyxjQUFjLFFBQVEsZ0NBQTZCO0FBQzVELFNBQ0VDLGtCQUFrQixFQUNsQkMsaUJBQWlCLEVBQ2pCQyxlQUFlLEVBQ2ZDLGVBQWUsRUFDZkMsY0FBYyxFQUNkQyxnQkFBZ0IsUUFDWCwyQkFBd0I7QUFDL0IsU0FBU0MsTUFBTSxRQUFRLHVCQUFvQjtBQUMzQyxTQUFTQyxlQUFlLEVBQUVDLGVBQWUsUUFBUSxvQkFBaUI7QUFDbEUsU0FBU0MsYUFBYSxFQUFzQkMsYUFBYSxRQUFRLG9CQUFpQjtBQUVsRixJQUFJQztBQUVKLGVBQWVDO0lBQ2IsTUFBTUMsWUFBWTtRQUFDO1FBQU87UUFBUztRQUFTO0tBQVMsQ0FBQ0MsUUFBUSxDQUFDcEIsUUFBUXFCLElBQUksQ0FBQyxFQUFFLElBQUk7SUFDbEYsSUFBSSxDQUFDRixXQUFXO1FBQ2Qs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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sonamu",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.48",
|
|
4
4
|
"description": "Sonamu — TypeScript Fullstack API Framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -117,10 +117,9 @@
|
|
|
117
117
|
"exceljs": "^4.4.0",
|
|
118
118
|
"zod": "^4.1.12",
|
|
119
119
|
"@sonamu-kit/hmr-hook": "^0.4.1",
|
|
120
|
-
"@sonamu-kit/tasks": "^0.2.0",
|
|
121
|
-
"@sonamu-kit/hmr-runner": "^0.1.1",
|
|
122
120
|
"@sonamu-kit/ts-loader": "^2.1.3",
|
|
123
|
-
"@sonamu-kit/
|
|
121
|
+
"@sonamu-kit/tasks": "^0.2.0",
|
|
122
|
+
"@sonamu-kit/hmr-runner": "^0.1.1"
|
|
124
123
|
},
|
|
125
124
|
"devDependencies": {
|
|
126
125
|
"@biomejs/biome": "^2.3.10",
|
package/src/bin/cli.ts
CHANGED
|
@@ -519,9 +519,10 @@ async function skills_sync() {
|
|
|
519
519
|
const claudeDir = path.join(workspaceRoot, ".claude");
|
|
520
520
|
const targetSkillsDir = path.join(claudeDir, "skills", "sonamu");
|
|
521
521
|
|
|
522
|
-
//
|
|
523
|
-
|
|
524
|
-
|
|
522
|
+
// ✅ 수정: sonamu 패키지 기준 상대 경로로 skills 찾기
|
|
523
|
+
// cli.ts 위치: sonamu/modules/sonamu/src/bin/cli.ts
|
|
524
|
+
// skills 위치: sonamu/modules/skills/
|
|
525
|
+
const sourceBase = path.resolve(import.meta.dirname, "..", "..", "..", "skills");
|
|
525
526
|
const sourceSkillsDir = path.join(sourceBase, "sonamu");
|
|
526
527
|
const sourceClaudeMd = path.join(sourceBase, "CLAUDE.md");
|
|
527
528
|
|