simp-module-repoclosure 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +7 -0
  2. data/.document +3 -0
  3. data/.gitignore +20 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +6 -0
  6. data/.yardopts +1 -0
  7. data/ChangeLog.md +4 -0
  8. data/Gemfile +13 -0
  9. data/Guardfile +78 -0
  10. data/LICENSE +27 -0
  11. data/LICENSE.txt +202 -0
  12. data/NOTICE.txt +5 -0
  13. data/README.md +99 -0
  14. data/Rakefile +32 -0
  15. data/docs/img/simp-module-repoclosure design.png +0 -0
  16. data/docs/img/simp-module-repoclosure design.svg +2430 -0
  17. data/docs/img/simp-module-repoclosure tests.png +0 -0
  18. data/docs/img/simp-module-repoclosure tests.svg +1 -0
  19. data/docs/simp-module-repoclosure design.gliffy +1 -0
  20. data/docs/simp-module-repoclosure tests.gliffy +1 -0
  21. data/lib/simp/module/repoclosure.rb +207 -0
  22. data/lib/simp/module/repoclosure/version.rb +27 -0
  23. data/simp-module-repoclosure.gemspec +40 -0
  24. data/spec/files/modules/dep1/Gemfile +14 -0
  25. data/spec/files/modules/dep1/README.md +83 -0
  26. data/spec/files/modules/dep1/Rakefile +17 -0
  27. data/spec/files/modules/dep1/manifests/init.pp +48 -0
  28. data/spec/files/modules/dep1/metadata.json +15 -0
  29. data/spec/files/modules/dep1/spec/classes/init_spec.rb +7 -0
  30. data/spec/files/modules/dep1/spec/spec_helper.rb +1 -0
  31. data/spec/files/modules/dep1/tests/init.pp +12 -0
  32. data/spec/files/modules/dep2/Gemfile +14 -0
  33. data/spec/files/modules/dep2/README.md +83 -0
  34. data/spec/files/modules/dep2/Rakefile +17 -0
  35. data/spec/files/modules/dep2/manifests/init.pp +48 -0
  36. data/spec/files/modules/dep2/metadata.json +14 -0
  37. data/spec/files/modules/dep2/spec/classes/init_spec.rb +7 -0
  38. data/spec/files/modules/dep2/spec/spec_helper.rb +1 -0
  39. data/spec/files/modules/dep2/tests/init.pp +12 -0
  40. data/spec/files/modules/dep3/Gemfile +14 -0
  41. data/spec/files/modules/dep3/README.md +83 -0
  42. data/spec/files/modules/dep3/Rakefile +17 -0
  43. data/spec/files/modules/dep3/manifests/init.pp +48 -0
  44. data/spec/files/modules/dep3/metadata.json +14 -0
  45. data/spec/files/modules/dep3/spec/classes/init_spec.rb +7 -0
  46. data/spec/files/modules/dep3/spec/spec_helper.rb +1 -0
  47. data/spec/files/modules/dep3/tests/init.pp +12 -0
  48. data/spec/files/modules/dep3a/Gemfile +14 -0
  49. data/spec/files/modules/dep3a/README.md +83 -0
  50. data/spec/files/modules/dep3a/Rakefile +17 -0
  51. data/spec/files/modules/dep3a/manifests/init.pp +48 -0
  52. data/spec/files/modules/dep3a/metadata.json +14 -0
  53. data/spec/files/modules/dep3a/spec/classes/init_spec.rb +7 -0
  54. data/spec/files/modules/dep3a/spec/spec_helper.rb +1 -0
  55. data/spec/files/modules/dep3a/tests/init.pp +12 -0
  56. data/spec/files/modules/dep4/Gemfile +14 -0
  57. data/spec/files/modules/dep4/README.md +83 -0
  58. data/spec/files/modules/dep4/Rakefile +17 -0
  59. data/spec/files/modules/dep4/manifests/init.pp +48 -0
  60. data/spec/files/modules/dep4/metadata.json +15 -0
  61. data/spec/files/modules/dep4/spec/classes/init_spec.rb +7 -0
  62. data/spec/files/modules/dep4/spec/spec_helper.rb +1 -0
  63. data/spec/files/modules/dep4/tests/init.pp +12 -0
  64. data/spec/files/modules/module01/Gemfile +14 -0
  65. data/spec/files/modules/module01/README.md +83 -0
  66. data/spec/files/modules/module01/Rakefile +17 -0
  67. data/spec/files/modules/module01/manifests/init.pp +48 -0
  68. data/spec/files/modules/module01/metadata.json +15 -0
  69. data/spec/files/modules/module01/spec/classes/init_spec.rb +7 -0
  70. data/spec/files/modules/module01/spec/spec_helper.rb +1 -0
  71. data/spec/files/modules/module01/tests/init.pp +12 -0
  72. data/spec/files/modules/module02/.fixtures.yml +8 -0
  73. data/spec/files/modules/module02/Gemfile +14 -0
  74. data/spec/files/modules/module02/README.md +83 -0
  75. data/spec/files/modules/module02/Rakefile +17 -0
  76. data/spec/files/modules/module02/manifests/init.pp +48 -0
  77. data/spec/files/modules/module02/metadata.json +15 -0
  78. data/spec/files/modules/module02/spec/classes/init_spec.rb +7 -0
  79. data/spec/files/modules/module02/spec/spec_helper.rb +1 -0
  80. data/spec/files/modules/module02/tests/init.pp +12 -0
  81. data/spec/files/modules/module03/.fixtures.yml +6 -0
  82. data/spec/files/modules/module03/Gemfile +14 -0
  83. data/spec/files/modules/module03/README.md +83 -0
  84. data/spec/files/modules/module03/Rakefile +17 -0
  85. data/spec/files/modules/module03/manifests/init.pp +48 -0
  86. data/spec/files/modules/module03/metadata.json +15 -0
  87. data/spec/files/modules/module03/spec/classes/init_spec.rb +7 -0
  88. data/spec/files/modules/module03/spec/spec_helper.rb +1 -0
  89. data/spec/files/modules/module03/tests/init.pp +12 -0
  90. data/spec/files/modules/mut1/Gemfile +14 -0
  91. data/spec/files/modules/mut1/README.md +83 -0
  92. data/spec/files/modules/mut1/Rakefile +17 -0
  93. data/spec/files/modules/mut1/manifests/init.pp +48 -0
  94. data/spec/files/modules/mut1/metadata.json +15 -0
  95. data/spec/files/modules/mut1/spec/classes/init_spec.rb +7 -0
  96. data/spec/files/modules/mut1/spec/spec_helper.rb +1 -0
  97. data/spec/files/modules/mut1/tests/init.pp +12 -0
  98. data/spec/files/modules/mut2/Gemfile +14 -0
  99. data/spec/files/modules/mut2/README.md +83 -0
  100. data/spec/files/modules/mut2/Rakefile +17 -0
  101. data/spec/files/modules/mut2/manifests/init.pp +48 -0
  102. data/spec/files/modules/mut2/metadata.json +16 -0
  103. data/spec/files/modules/mut2/spec/classes/init_spec.rb +7 -0
  104. data/spec/files/modules/mut2/spec/spec_helper.rb +1 -0
  105. data/spec/files/modules/mut2/tests/init.pp +12 -0
  106. data/spec/lib/simp/module/repoclosure_spec.rb +119 -0
  107. data/spec/spec_helper.rb +23 -0
  108. metadata +345 -0
@@ -0,0 +1 @@
1
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="666" height="469.24999999999994"><style xmlns="http://www.w3.org/1999/xhtml"></style><defs/><g transform="translate(0,0)"><g><rect fill="#FFFFFF" stroke="none" x="0" y="0" width="666" height="469.24999999999994"/></g><g transform="matrix(1,0,0,1,12,69)"><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="117" height="44" fill-opacity="0"/></g></g><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="117" height="16" fill-opacity="0"/></g></g><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="27" y="0" width="63" height="16" fill-opacity="0"/></g></g><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="27" y="0" width="63" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="27" y="13">Success</text><rect fill="rgb(8, 35, 63)" stroke="none" x="27" y="14" width="59" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="86" y="14" width="0" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="86" y="13">:</text><rect fill="rgb(8, 35, 63)" stroke="none" x="86" y="14" width="4" height="1"/></g><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="16" width="117" height="28" fill-opacity="0"/></g></g><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="26" y="16" width="101" height="28" fill-opacity="0"/></g></g><g transform="translate(106,48) matrix(1,0,0,1,0,0) translate(-106,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="26" y="16" width="101" height="28" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="26" y="27">Module</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="69" y="27">with</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="9" y="41">dependency</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="79" y="41">chain</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,160,179.24999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#DDE6F1" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#0B599F" d="M 0 0 M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,170,201)"><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="24" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="24" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="24" y="13">mut1</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,350,179.24999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#f4cccc" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#ff0000" d="M 0 0 M 0 0 L 8 0 M 8 0 M 10 0 L 18 0 M 18 0 M 20 0 L 28 0 M 28 0 M 30 0 L 38 0 M 38 0 M 40 0 L 48 0 M 48 0 M 50 0 L 58 0 M 58 0 M 60 0 L 68 0 M 68 0 M 70 0 L 78 0 M 78 0 M 80 0 L 88 0 M 88 0 M 90 0 L 98 0 M 98 0 M 100 0 L 100 0 Q 100 0 100 0 L 100 8 M 100 8 M 100 10 L 100 18 M 100 18 M 100 20 L 100 28 M 100 28 M 100 30 L 100 38 M 100 38 M 100 40 L 100 48 M 100 48 M 100 50 L 100 58 M 100 58 M 100 60 L 100 60 Q 100 60 100 60 L 92 60 M 92 60 M 90 60 L 82 60 M 82 60 M 80 60 L 72 60 M 72 60 M 70 60 L 62 60 M 62 60 M 60 60 L 52 60 M 52 60 M 50 60 L 42 60 M 42 60 M 40 60 L 32 60 M 32 60 M 30 60 L 22 60 M 22 60 M 20 60 L 12 60 M 12 60 M 10 60 L 2 60 M 2 60 M 0 60 L 0 60 Q 0 60 0 60 L 0 52 M 0 52 M 0 50 L 0 42 M 0 42 M 0 40 L 0 32 M 0 32 M 0 30 L 0 22 M 0 22 M 0 20 L 0 12 M 0 12 M 0 10 L 0 2 M 0 2 M 0 0 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,360,201)"><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="23" y="13">dep1</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,350,389.24999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#DDE6F1" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#0B599F" d="M 0 0 M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,360,411)"><g transform="translate(154,0) matrix(1,0,0,1,0,0) translate(-154,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(154,0) matrix(1,0,0,1,0,0) translate(-154,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(154,0) matrix(1,0,0,1,0,0) translate(-154,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="21" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(154,0) matrix(1,0,0,1,0,0) translate(-154,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="21" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="21" y="13">dep4</text></g><g transform="translate(154,0) matrix(1,0,0,1,0,0) translate(-154,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="56" y="0" width="4" height="16" fill-opacity="0"/></g></g><g transform="translate(154,0) matrix(1,0,0,1,0,0) translate(-154,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="56" y="0" width="4" height="16" fill-opacity="0"/></g></g></g><g transform="matrix(1,0,0,1,255.5,62.74999999999994)"><image width="124" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAA8CAYAAACkRt7SAAACJElEQVR4Xu3bzVECAQwF4JerFmUbeFwrwApcO9AGEE5yxA6wArED7IALzF4gDj+ruDgeSJDN5Hny4iN5HwFHRgG/UjUgqbblsiB4sicBwQmerIFk6/LCCZ6sgWTr8sIJnqyBZOvywgmerIFk6/LCCZ6sgWTr8sIJnqyBZOvywgmerIFk6/LCCZ6sgWTr8sIJnqyBZOvywgmerIFk6/LCHcAvOr0RIG+LCo8YFTOHyJNFENyh2svr3hiQKwAzQLvz55uBQ+xJIgjuUOse+CZNFVMRLdsIT/ATgNeRCkxWittqWIwdHsYlguAONe5fuEIhzf/vUIyXwH0b4AnuDa7f9y3SqHcLX1TDYurwsEdFHIBfdJ5KEdwdlZb0h/avWhWondffQw4vXhX91fbi/x2e4A5P0j/B1+bNQ1cdrCBlK8Ad9k8X8eM9/Osl/VfolxWkew7oGoXv4Q5PzyZ486IBfV3q5qLP/ts6wZ3B9+NU9X130WeH5oU7QNcRB394gX6ISjkfFn3Hh3GJ4oU71FiDa4uheeEO0HXE7sOTyaLCAz88cSyWUfYG+JJu7zBUAsFDcdmHJbi9w1AJBA/FZR+W4PYOQyUQPBSXfViC2zsMlUDwUFz2YQlu7zBUAsFDcdmHJbi9w1AJBA/FZR+W4PYOQyUQPBSXfViC2zsMlUDwUFz2YQlu7zBUAsFDcdmHJbi9w1AJBA/FZR+W4PYOQyUQPBSXfdhPCxyPPQ1RrQ0AAAAASUVORK5CYII=" transform="translate(0,0)"/></g><g transform="translate(0,0) matrix(1,0,0,1,160,62.74999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#DDE6F1" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#0B599F" d="M 0 0 M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,170,85)"><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="24" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="24" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="24" y="13">mut1</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,350,62.74999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#DDE6F1" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#0B599F" d="M 0 0 M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,360,85)"><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(46,0) matrix(1,0,0,1,0,0) translate(-46,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="23" y="13">dep1</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,540,62.74999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#DDE6F1" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#0B599F" d="M 0 0 M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,550,85)"><g transform="translate(128,0) matrix(1,0,0,1,0,0) translate(-128,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(128,0) matrix(1,0,0,1,0,0) translate(-128,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(128,0) matrix(1,0,0,1,0,0) translate(-128,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="18" height="16" fill-opacity="0"/></g></g><g transform="translate(128,0) matrix(1,0,0,1,0,0) translate(-128,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="18" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="23" y="13">de</text></g><g transform="translate(128,0) matrix(1,0,0,1,0,0) translate(-128,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="41" y="0" width="17" height="16" fill-opacity="0"/></g></g><g transform="translate(128,0) matrix(1,0,0,1,0,0) translate(-128,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="41" y="0" width="17" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="41" y="13">p2</text></g></g><g transform="matrix(1,0,0,1,445.5,62.74999999999994)"><image width="124" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAA8CAYAAACkRt7SAAACJElEQVR4Xu3bzVECAQwF4JerFmUbeFwrwApcO9AGEE5yxA6wArED7IALzF4gDj+ruDgeSJDN5Hny4iN5HwFHRgG/UjUgqbblsiB4sicBwQmerIFk6/LCCZ6sgWTr8sIJnqyBZOvywgmerIFk6/LCCZ6sgWTr8sIJnqyBZOvywgmerIFk6/LCCZ6sgWTr8sIJnqyBZOvywgmerIFk6/LCHcAvOr0RIG+LCo8YFTOHyJNFENyh2svr3hiQKwAzQLvz55uBQ+xJIgjuUOse+CZNFVMRLdsIT/ATgNeRCkxWittqWIwdHsYlguAONe5fuEIhzf/vUIyXwH0b4AnuDa7f9y3SqHcLX1TDYurwsEdFHIBfdJ5KEdwdlZb0h/avWhWondffQw4vXhX91fbi/x2e4A5P0j/B1+bNQ1cdrCBlK8Ad9k8X8eM9/Osl/VfolxWkew7oGoXv4Q5PzyZ486IBfV3q5qLP/ts6wZ3B9+NU9X130WeH5oU7QNcRB394gX6ISjkfFn3Hh3GJ4oU71FiDa4uheeEO0HXE7sOTyaLCAz88cSyWUfYG+JJu7zBUAsFDcdmHJbi9w1AJBA/FZR+W4PYOQyUQPBSXfViC2zsMlUDwUFz2YQlu7zBUAsFDcdmHJbi9w1AJBA/FZR+W4PYOQyUQPBSXfViC2zsMlUDwUFz2YQlu7zBUAsFDcdmHJbi9w1AJBA/FZR+W4PYOQyUQPBSXfdhPCxyPPQ1RrQ0AAAAASUVORK5CYII=" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,255.5,179.24999999999994)"><image width="124" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAA8CAYAAACkRt7SAAAB50lEQVR4Xu3Z7U3DQBCE4bnKqIUOoAJCB9ABdAAdQAVAB9ABHRidYkuWsVDInj9W897vsNmdx+uYpIhjlUCxmpZhBbjZRQA44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGx4A/BOepL0Jum+SN8NSi5WAvAG0XbSi6QLHbGvivTYoOwiJQBvEOsIfKj2KemwR3jAlwEfqr5Lui7HO8AuDuANGGY2fFq1gt/uAR7wdcCHd6nwl0Wqt/xNzi/wTjpIuvmjm3ql1tfMHse/P2HDp1k99Bu/OjzgE4pzLtgzwOtTfH2o2x58k/tM8jf9B/hz/2/b6tBDxHyGN7jYTgB/7Td686d1wJcF/+g3enNoNrwB9FBiZsO/+o2uD2e7Omx4A44R+G6h2fAG0KMNrz+e1G/V7vjxpGGwlIonwC09nmGqCoCn4oo3C3g8w1QVAE/FFW8W8HiGqSoAnoor3izg8QxTVQA8FVe8WcDjGaaqAHgqrnizgMczTFUB8FRc8WYBj2eYqgLgqbjizQIezzBVBcBTccWbBTyeYaoKgKfiijcLeDzDVBUAT8UVbxbweIapKgCeiive7A9cAFY9MzwSKwAAAABJRU5ErkJggg==" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,293,196)"><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 22 0 L 22 27 L 0 27 Z"/><g><rect fill="rgb(255, 255, 255)" stroke="none" x="0" y="0" width="22" height="27"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 22 0 L 22 27 L 0 27 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="22" height="27" fill-opacity="0"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 3 0 L 19 0 L 19 27 L 3 27 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="3" y="0" width="16" height="27" fill-opacity="0"/></g><text fill="rgb(255, 0, 0)" stroke="none" font-family="Arial" font-size="24px" font-style="normal" font-weight="bold" text-decoration="" line-height="27px" x="3" y="22">X</text></g></g><g transform="matrix(1,0,0,1,452,195)"><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="87" height="28" fill-opacity="0"/></g></g><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="87" height="28" fill-opacity="0"/></g></g><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="8" y="0" width="71" height="28" fill-opacity="0"/></g></g><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="8" y="0" width="64" height="14" fill-opacity="0"/></g></g><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="8" y="0" width="64" height="14" fill-opacity="0"/></g><text fill="rgb(152, 0, 0)" stroke="none" font-family="Arial" font-size="12px" font-style="italic" font-weight="normal" text-decoration="" line-height="14px" x="8" y="11">not</text><text fill="rgb(152, 0, 0)" stroke="none" font-family="Arial" font-size="12px" font-style="italic" font-weight="normal" text-decoration="" line-height="14px" x="28" y="11">availabl</text></g><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="72" y="0" width="58" height="28" fill-opacity="0"/></g></g><g transform="translate(168,0) matrix(1,0,0,1,0,0) translate(-168,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="72" y="0" width="58" height="28" fill-opacity="0"/></g><text fill="rgb(152, 0, 0)" stroke="none" font-family="Arial" font-size="12px" font-style="italic" font-weight="normal" text-decoration="" line-height="14px" x="72" y="11">e</text><text fill="rgb(152, 0, 0)" stroke="none" font-family="Arial" font-size="12px" font-style="italic" font-weight="normal" text-decoration="" line-height="14px" x="21" y="25">on</text><text fill="rgb(152, 0, 0)" stroke="none" font-family="Arial" font-size="12px" font-style="italic" font-weight="normal" text-decoration="" line-height="14px" x="38" y="25">forge</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,160,303.24999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#DDE6F1" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#0B599F" d="M 0 0 M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,170,325)"><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="24" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(48,0) matrix(1,0,0,1,0,0) translate(-48,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="24" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="24" y="13">mut2</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,350,303.24999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#f4cccc" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#ff0000" d="M 0 0 M 0 0 L 8 0 M 8 0 M 10 0 L 18 0 M 18 0 M 20 0 L 28 0 M 28 0 M 30 0 L 38 0 M 38 0 M 40 0 L 48 0 M 48 0 M 50 0 L 58 0 M 58 0 M 60 0 L 68 0 M 68 0 M 70 0 L 78 0 M 78 0 M 80 0 L 88 0 M 88 0 M 90 0 L 98 0 M 98 0 M 100 0 L 100 0 Q 100 0 100 0 L 100 8 M 100 8 M 100 10 L 100 18 M 100 18 M 100 20 L 100 28 M 100 28 M 100 30 L 100 38 M 100 38 M 100 40 L 100 48 M 100 48 M 100 50 L 100 58 M 100 58 M 100 60 L 100 60 Q 100 60 100 60 L 92 60 M 92 60 M 90 60 L 82 60 M 82 60 M 80 60 L 72 60 M 72 60 M 70 60 L 62 60 M 62 60 M 60 60 L 52 60 M 52 60 M 50 60 L 42 60 M 42 60 M 40 60 L 32 60 M 32 60 M 30 60 L 22 60 M 22 60 M 20 60 L 12 60 M 12 60 M 10 60 L 2 60 M 2 60 M 0 60 L 0 60 Q 0 60 0 60 L 0 52 M 0 52 M 0 50 L 0 42 M 0 42 M 0 40 L 0 32 M 0 32 M 0 30 L 0 22 M 0 22 M 0 20 L 0 12 M 0 12 M 0 10 L 0 2 M 0 2 M 0 0 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,360,318)"><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="30" fill-opacity="0"/></g></g><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="23" y="13">dep3</text></g><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="16" width="81" height="14" fill-opacity="0"/></g></g><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="19" y="16" width="45" height="14" fill-opacity="0"/></g></g><g transform="translate(84,48) matrix(1,0,0,1,0,0) translate(-84,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="19" y="16" width="45" height="14" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="19" y="27">~&gt;</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="36" y="27">0</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="43" y="27">.</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="46" y="27">2</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="53" y="27">.</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="56" y="27">0</text></g></g><g transform="matrix(1,0,0,1,255.5,290.8235931288071)"><image width="124" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAA8CAYAAACkRt7SAAAB50lEQVR4Xu3Z7U3DQBCE4bnKqIUOoAJCB9ABdAAdQAVAB9ABHRidYkuWsVDInj9W897vsNmdx+uYpIhjlUCxmpZhBbjZRQA44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGw44GYJmI3LhgNuloDZuGx4A/BOepL0Jum+SN8NSi5WAvAG0XbSi6QLHbGvivTYoOwiJQBvEOsIfKj2KemwR3jAlwEfqr5Lui7HO8AuDuANGGY2fFq1gt/uAR7wdcCHd6nwl0Wqt/xNzi/wTjpIuvmjm3ql1tfMHse/P2HDp1k99Bu/OjzgE4pzLtgzwOtTfH2o2x58k/tM8jf9B/hz/2/b6tBDxHyGN7jYTgB/7Td686d1wJcF/+g3enNoNrwB9FBiZsO/+o2uD2e7Omx4A44R+G6h2fAG0KMNrz+e1G/V7vjxpGGwlIonwC09nmGqCoCn4oo3C3g8w1QVAE/FFW8W8HiGqSoAnoor3izg8QxTVQA8FVe8WcDjGaaqAHgqrnizgMczTFUB8FRc8WYBj2eYqgLgqbjizQIezzBVBcBTccWbBTyeYaoKgKfiijcLeDzDVBUAT8UVbxbweIapKgCeiive7A9cAFY9MzwSKwAAAABJRU5ErkJggg==" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,293,307)"><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 22 0 L 22 27 L 0 27 Z"/><g><rect fill="rgb(255, 255, 255)" stroke="none" x="0" y="0" width="22" height="27"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 22 0 L 22 27 L 0 27 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="22" height="27" fill-opacity="0"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 3 0 L 19 0 L 19 27 L 3 27 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="3" y="0" width="16" height="27" fill-opacity="0"/></g><text fill="rgb(255, 0, 0)" stroke="none" font-family="Arial" font-size="24px" font-style="normal" font-weight="bold" text-decoration="" line-height="27px" x="3" y="22">X</text></g></g><g transform="matrix(1,0,0,1,482,309)"><g transform="translate(66,0) matrix(1,0,0,1,0,0) translate(-66,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="87" height="14" fill-opacity="0"/></g></g><g transform="translate(66,0) matrix(1,0,0,1,0,0) translate(-66,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="87" height="14" fill-opacity="0"/></g></g><g transform="translate(66,0) matrix(1,0,0,1,0,0) translate(-66,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="45" height="14" fill-opacity="0"/></g></g><g transform="translate(66,0) matrix(1,0,0,1,0,0) translate(-66,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="45" height="14" fill-opacity="0"/></g></g><g transform="translate(66,0) matrix(1,0,0,1,0,0) translate(-66,0)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="45" height="14" fill-opacity="0"/></g><text fill="rgb(152, 0, 0)" stroke="none" font-family="Arial" font-size="12px" font-style="italic" font-weight="normal" text-decoration="" line-height="14px" x="22" y="11">conflicts</text></g></g><g transform="translate(0,0) matrix(1,0,0,1,530,389.24999999999994)"><g><g transform="translate(0,0) scale(1,0.6)"><g><path fill="#f4cccc" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 100 Q 100 100 100 100 L 0 100 Q 0 100 0 100 L 0 0 Q 0 0 0 0 Z"/><g transform="scale(1,1.6666666666666667)"><path fill="none" stroke="none" d="M 0 0 L 100 0 Q 100 0 100 0 L 100 60 Q 100 60 100 60 L 0 60 Q 0 60 0 60 L 0 0 Q 0 0 0 0 Z"/><path fill="none" stroke="#ff0000" d="M 0 0 M 0 0 L 8 0 M 8 0 M 10 0 L 18 0 M 18 0 M 20 0 L 28 0 M 28 0 M 30 0 L 38 0 M 38 0 M 40 0 L 48 0 M 48 0 M 50 0 L 58 0 M 58 0 M 60 0 L 68 0 M 68 0 M 70 0 L 78 0 M 78 0 M 80 0 L 88 0 M 88 0 M 90 0 L 98 0 M 98 0 M 100 0 L 100 0 Q 100 0 100 0 L 100 8 M 100 8 M 100 10 L 100 18 M 100 18 M 100 20 L 100 28 M 100 28 M 100 30 L 100 38 M 100 38 M 100 40 L 100 48 M 100 48 M 100 50 L 100 58 M 100 58 M 100 60 L 100 60 Q 100 60 100 60 L 92 60 M 92 60 M 90 60 L 82 60 M 82 60 M 80 60 L 72 60 M 72 60 M 70 60 L 62 60 M 62 60 M 60 60 L 52 60 M 52 60 M 50 60 L 42 60 M 42 60 M 40 60 L 32 60 M 32 60 M 30 60 L 22 60 M 22 60 M 20 60 L 12 60 M 12 60 M 10 60 L 2 60 M 2 60 M 0 60 L 0 60 Q 0 60 0 60 L 0 52 M 0 52 M 0 50 L 0 42 M 0 42 M 0 40 L 0 32 M 0 32 M 0 30 L 0 22 M 0 22 M 0 20 L 0 12 M 0 12 M 0 10 L 0 2 M 0 2 M 0 0 L 0 0 Q 0 0 0 0 Z" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g></g><g transform="matrix(1,0,0,1,540,404)"><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="30" fill-opacity="0"/></g></g><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="81" height="16" fill-opacity="0"/></g></g><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g></g><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="23" y="0" width="35" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="23" y="13">dep3</text></g><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="16" width="81" height="14" fill-opacity="0"/></g></g><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="16" width="37" height="14" fill-opacity="0"/></g></g><g transform="translate(90,48) matrix(1,0,0,1,0,0) translate(-90,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="16" width="37" height="14" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="22" y="27">=</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="32" y="27">0</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="39" y="27">.</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="42" y="27">1</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="49" y="27">.</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="52" y="27">0</text></g></g><g transform="matrix(1,0,0,1,255.5,341.1764068711928)"><image width="124" height="108" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAABsCAYAAACoyNYlAAADjElEQVR4Xu3XQVbScRTF8fdr1LFJO9IlNKRZtAJbQbgD24DaKIbuINxB7cB2kAM9TOR1wDAFPXHhKVz5chw+Hr97P/7+aAteW9VA26q0hA3At+yXYA78ded471XErlsPo4izYb87cDv3c593Dnync9xrLT4/90FW/bzMOLjqd3ur7nnp73/shu+5BG8t9yLaLuCLidl/h0+fSIADvlgDWzbFDQfcqwEe6ZoXN1zry34acHtCLQDgWl/204DbE2oBANf6sp8G3J5QCwC41pf9NOD2hFoAwLW+7KcBtyfUAgCu9WU/Dbg9oRYAcK0v+2nA7Qm1AIBrfdlPA25PqAUAXOvLfhpwe0ItAOBaX/bTgNsTagEA1/qynwbcnlALALjWl/004PaEWgDAtb7spwG3J9QCAK71ZT8NuD2hFgBwrS/7acDtCbUAgGt92U8Dbk+oBQBc68t+GnB7Qi0A4Fpf9tOA2xNqAQDX+rKfBtyeUAsAuNaX/TTg9oRaAMC1vuynAbcn1AIArvVlPw24PaEWAHCtL/tpwO0JtQCAa33ZTwNuT6gFAFzry34acHtCLQDgWl/204DbE2oBANf6sp8G3J5QCwC41pf9NOD2hFoAwLW+7KcBtyfUAgCu9WU/Dbg9oRYAcK0v+2nACwh3OkcnrcX3y28fvxase9IVgBfU++b90SCi7WbGeWvZ22R4wAvBb1dlDK4jDob97qBgfekKwAvqnN7wuVUbCA94MXhmRmv3a82I01HGp2G/e17wcSutAHyl+m7efPeGZ/5d2DJazMBnnIxuHvVrg38x4AVuS6/I+Ic7Bp9e8In9Qzc+o3c1jC9x2v299Icu+UbAlyzu7tseBR+Lt8nPzCvPrrN9WMdNtwcv8Fp5xYOP9LH1XLsT6N46/3oHfGXume/wm0t975WZP0fR9tcJPT0Q4MXgM4/6Xy1b77LfPSn4mJIVgBfUOPd/eOZFRNvfJGhueAH0dMUteOZFRju8GsbhOv4CXyQSN3yRlv4zs9M5Oo1oPzYZmhteAH274t3x20290bMxueGV8Aa7ADdAqjwi4JVtGuwC3ACp8oiAV7ZpsAtwA6TKIwJe2abBLsANkCqPCHhlmwa7ADdAqjwi4JVtGuwC3ACp8oiAV7ZpsAtwA6TKIwJe2abBLsANkCqPCHhlmwa7ADdAqjwi4JVtGuwC3ACp8oiAV7ZpsAtwA6TKI/4Bs+uXiyYg+O8AAAAASUVORK5CYII=" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,445.5,389.24999999999994)"><image width="114" height="60" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHIAAAA8CAYAAAC6j+5hAAAB00lEQVR4Xu3Y0U3DQBCE4bnKqIUOoAJCB9ABdAAdQAVAB9ABHQSdcpYQRI7JSPFo+e/ZuezO5704bmKVSKCV6IImBGSRmwBIIIskUKQNJhLIIgkUaYOJBLJIAkXaYCKBLJJAkTaYSCCLJFCkDSYSyCIJFGmDiQSySAJF2mAigSySQJE2mEggiyRQpA0mEsgiCRRpg4mcgdxKD5JeJN026TPZHMh5yCdJZ9ohXjTpPhUTyGWQ01XvkjaJoED+DXK6+lXSZZP6xEYsII+DnD7VIa8TQIH0IL+DnjepH72rrF+QW2kj6Wqmmn4H9mv2rn/w+TmouzGhJwcF8gfLghtxDrI/1faHofUhVzkXQr90u3uY6X8/Dq3H8ffk5IBTYfxGer+Rz2MCV396BfI4yLcxgasDMpGHDktJe47WjzGB/aEmajGRyyYyFpCJXDBP46V5f4tzw0vzBYFxiZ8AR6ufYcQOQEYw+EUA6WcYsQOQEQx+EUD6GUbsAGQEg18EkH6GETsAGcHgFwGkn2HEDkBGMPhFAOlnGLEDkBEMfhFA+hlG7ABkBINfBJB+hhE7ABnB4BcBpJ9hxA5ARjD4RQDpZxixA5ARDH4RQPoZRuwAZASDX8QXK7JQPRTFSgoAAAAASUVORK5CYII=" transform="translate(0,0)"/></g><g transform="matrix(1,0,0,1,478,406)"><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 22 0 L 22 27 L 0 27 Z"/><g><rect fill="rgb(255, 255, 255)" stroke="none" x="0" y="0" width="22" height="27"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 22 0 L 22 27 L 0 27 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="22" height="27" fill-opacity="0"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 3 0 L 19 0 L 19 27 L 3 27 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="3" y="0" width="16" height="27" fill-opacity="0"/></g><text fill="rgb(255, 0, 0)" stroke="none" font-family="Arial" font-size="24px" font-style="normal" font-weight="bold" text-decoration="" line-height="27px" x="3" y="22">X</text></g></g><g transform="matrix(1,0,0,1,12,180)"><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="117" height="58" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="117" height="16" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="75" height="16" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="75" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="22" y="13">Fail</text><rect fill="rgb(8, 35, 63)" stroke="none" x="22" y="14" width="26" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="47" y="14" width="1" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="47" y="14" width="5" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="51" y="14" width="1" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="51" y="13">Test</text><rect fill="rgb(8, 35, 63)" stroke="none" x="51" y="14" width="30" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="79" y="14" width="1" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="79" y="14" width="5" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="83" y="14" width="1" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="83" y="13">1</text><rect fill="rgb(8, 35, 63)" stroke="none" x="83" y="14" width="9" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="91" y="14" width="1" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="91" y="13">:</text><rect fill="rgb(8, 35, 63)" stroke="none" x="91" y="14" width="5" height="1"/></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="16" width="117" height="42" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="26" y="16" width="115" height="42" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="26" y="16" width="115" height="42" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="26" y="27">Module</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="69" y="27">with</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="1" y="41">dependency</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="71" y="41">missing</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="29" y="55">from</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="57" y="55">Forge</text></g></g><g transform="matrix(1,0,0,1,12,307)"><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="117" height="44" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="117" height="16" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="75" height="16" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="22" y="0" width="75" height="16" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="22" y="13">Fail</text><rect fill="rgb(8, 35, 63)" stroke="none" x="22" y="14" width="26" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="47" y="14" width="1" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="47" y="14" width="5" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="51" y="14" width="1" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="51" y="13">Test</text><rect fill="rgb(8, 35, 63)" stroke="none" x="51" y="14" width="30" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="79" y="14" width="1" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="79" y="14" width="5" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="83" y="14" width="1" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="83" y="13">2</text><rect fill="rgb(8, 35, 63)" stroke="none" x="83" y="14" width="9" height="1"/><rect fill="rgb(8, 35, 63)" stroke="none" x="91" y="14" width="1" height="1"/><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="14px" font-style="normal" font-weight="bold" text-decoration="" line-height="16.5px" x="91" y="13">:</text><rect fill="rgb(8, 35, 63)" stroke="none" x="91" y="14" width="5" height="1"/></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="16" width="117" height="28" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="26" y="16" width="115" height="28" fill-opacity="0"/></g></g><g transform="translate(96,48) matrix(1,0,0,1,0,0) translate(-96,-48)"><g><rect fill="rgb(0,0,0)" stroke="none" x="26" y="16" width="115" height="28" fill-opacity="0"/></g><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="26" y="27">Module</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="69" y="27">with</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="1" y="41">dependency</text><text fill="rgb(8, 35, 63)" stroke="none" font-family="Arial" font-size="12px" font-style="normal" font-weight="normal" text-decoration="" line-height="14px" x="71" y="41">conflicts</text></g></g><g transform="matrix(1,0,0,1,445.5,328.74999999999994)"><g transform="translate(0,0)"><g transform="translate(-422,-313.74999999999994) translate(-23.5,-15) matrix(1,0,0,1,0,0)"><g><path fill="none" stroke="#ff0000" d="M 450 333.24999999999994 M 450 333.24999999999994 Q 454.063378287578 333.24999999999994 457.9997485512487 333.3047111487601 M 457.9997485512487 333.3047111487601 M 465.9978329372105 333.4761573919479 Q 470.06760488460657 333.5951284301314 473.992089736761 333.7766846785729 M 473.992089736761 333.7766846785729 M 481.97963120412373 334.2208217202674 Q 486.05272582155794 334.48686874850887 489.9565688847859 334.8258241385623 M 489.9565688847859 334.8258241385623 M 497.9176095195963 335.6123925680132 Q 501.98742589230244 336.0655490409182 505.85545226826747 336.6056304354963 M 505.85545226826747 336.6056304354963 M 513.7598698476555 337.8363330154004 Q 517.812014541533 338.536141955715 521.6162751116572 339.3427317493387 M 521.6162751116572 339.3427317493387 M 529.4034311667831 341.17284891956007 Q 533.4047912973158 342.2120752263464 537.0897093594745 343.38761503950934 M 537.0897093594745 343.38761503950934 M 544.6268647960334 346.06475651522163 Q 548.4947160560014 347.592711305943 551.9396397670548 349.3028502715814 M 551.9396397670548 349.3028502715814 M 558.9089120489939 353.2230015485133 Q 562.420519978524 355.4658531265732 565.3474548803097 357.9605638550461 M 565.3474548803097 357.9605638550461 M 570.9772938558666 363.6304042226656 Q 573.5899714358021 366.7769678867692 575.446103914118 370.2494279023398 M 575.446103914118 370.2494279023398 M 578.4396805018445 377.6518960221522 Q 579.5166408042464 381.42254428872474 579.850263928384 385.5133993397804 M 579.850263928384 385.5133993397804" stroke-miterlimit="10" stroke-width="2"/></g></g></g></g><g transform="matrix(1,0,0,1,506,320)"><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 38 0 L 38 41 L 0 41 Z"/><g><rect fill="rgb(255, 255, 255)" stroke="none" x="0" y="0" width="38" height="41"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 0 0 L 38 0 L 38 41 L 0 41 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="0" y="0" width="38" height="41" fill-opacity="0"/></g></g><g transform="translate(3,0) matrix(1,0,0,1,0,0) translate(-3,0)"><path fill="none" stroke="none" d="M 3 0 L 35 0 L 35 41 L 3 41 Z"/><g><rect fill="rgb(0,0,0)" stroke="none" x="3" y="0" width="32" height="41" fill-opacity="0"/></g><text fill="rgb(255, 0, 0)" stroke="none" font-family="Arial" font-size="36px" font-style="normal" font-weight="normal" text-decoration="" line-height="41px" x="3" y="33">☠</text></g></g></g></svg>
@@ -0,0 +1 @@
1
+ {"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":698,"height":277,"nodeIndex":290,"autoFit":true,"exportBorder":false,"gridOn":true,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":null,"printShrinkToFit":false,"printPortrait":false,"maxWidth":5000,"maxHeight":5000,"themeData":{"uid":"com.gliffy.theme.blueprint","name":"Blueprint","shape":{"primary":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#08233F"}},"secondary":{"strokeWidth":2,"strokeColor":"#08233F","fillColor":"#424D76","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}},"tertiary":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"#FFFFFF","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#08233F"}},"highlight":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"#0B599F","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#ffffff"}}},"line":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"none","arrowType":2,"interpolationType":"linear","cornerRadius":0,"text":{"color":"#08233F"}},"text":{"color":"#08233F"},"stage":{"color":"#FFFFFF"}},"viewportType":"default","fitBB":{"min":{"x":22,"y":20},"max":{"x":698,"y":261.5}},"printModel":{"pageSize":"a4","portrait":false,"fitToOnePage":false,"displayPageBreaks":false},"objects":[{"x":211.0,"y":342.0479797979797,"rotation":0.0,"id":187,"width":114.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":0,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":192,"py":0.29289321881345237,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":109,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-51.0,-142.4743866691726],[263.5,-142.4743866691726],[263.5,-246.61111111111103],[359.0,-246.61111111111103]],"lockSegments":{"1":true},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":550.0,"y":44.0,"rotation":0.0,"id":182,"width":130.0,"height":197.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":1,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":3.0,"strokeColor":"#0B599F","fillColor":"#dde6f1","gradient":false,"dashStyle":"4,4","dropShadow":false,"state":0,"opacity":0.52,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":40.0,"y":60.75,"rotation":0.0,"id":86,"width":130.0,"height":70.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":25,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.5999999999999996,"y":0.0,"rotation":0.0,"id":87,"width":124.8,"height":32.0,"uid":null,"order":27,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"color:#08233f;\"><span style=\"font-size:14px;\"><span style=\"font-weight:bold;\">Upstream</span></span></span></p><p style=\"text-align:center;\"><span style=\"color:#08233f;\"><span style=\"font-size:14px;\"><span style=\"font-weight:bold;\">Puppet&nbsp;</span></span></span><span style=\"color:#08233f;\"><span style=\"font-size:14px;\"><span style=\"font-weight:bold;\">Forge</span></span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":190.0,"y":317.0479797979797,"rotation":0.0,"id":92,"width":114.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":33,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":86,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":101,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[-20.0,-221.29797979797968],[28.333875616030326,-221.29797979797968],[76.66775123206065,-221.29797979797968],[125.00162684809095,-221.29797979797968]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":95,"width":58.0,"height":28.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.3103413456674089,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;font-size:12px;color:#08233f;font-style:italic;\">download</span></p><p style=\"text-align:center;\"><span style=\"font-family:Arial;font-size:12px;color:#08233f;font-style:italic;\">deps into</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":315.0,"y":51.75,"rotation":0.0,"id":105,"width":90.0,"height":78.99999999999994,"uid":"com.gliffy.shape.basic.basic_v1.default.group","order":41,"lockAspectRatio":false,"lockShape":false,"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":99,"width":90.00000000000003,"height":78.20202020202028,"uid":"com.gliffy.shape.iphone.iphone_ios7.icons_glyphs.glyph_folder","order":37,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.iphone.iphone_ios7.icons_glyphs.glyph_folder","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"#0b5394","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":104,"width":86.00000000000003,"height":32.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;\"><span style=\"text-decoration:none;\">&nbsp;</span></span></p><p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;\"><span style=\"text-decoration:none;\">mods_dir/</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":0.0,"y":10.373737373737356,"rotation":0.0,"id":101,"width":89.95626822157442,"height":68.6262626262626,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":3,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#dde6f1","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":570.0,"y":50.75,"rotation":0.0,"id":106,"width":90.0,"height":78.99999999999994,"uid":"com.gliffy.shape.basic.basic_v1.default.group","order":44,"lockAspectRatio":false,"lockShape":false,"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":107,"width":90.00000000000003,"height":78.20202020202028,"uid":"com.gliffy.shape.iphone.iphone_ios7.icons_glyphs.glyph_folder","order":46,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.iphone.iphone_ios7.icons_glyphs.glyph_folder","strokeWidth":1.0,"strokeColor":"#000000","fillColor":"#0b5394","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":108,"width":86.00000000000003,"height":32.0,"uid":null,"order":49,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;\"><span style=\"text-decoration:none;\">&nbsp;</span></span></p><p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;\"><span style=\"text-decoration:none;\">tars_dir/</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":0.0,"y":10.373737373737356,"rotation":0.0,"id":109,"width":89.95626822157442,"height":68.6262626262626,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":43,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#dde6f1","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":527.0,"y":277.5479797979797,"rotation":0.0,"id":110,"width":1.0,"height":70.0,"uid":"com.gliffy.shape.basic.basic_v1.default.line","order":50,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":101,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":109,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-122.04676125071,-182.11111111111103],[-67.03117416714002,-182.11111111111103],[-12.01558708357004,-182.11111111111103],[43.0,-182.11111111111103]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":157,"width":56.0,"height":42.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.3998328425104944,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-style:italic;\">build</span></p><p style=\"text-align:center;\"><span style=\"font-style:italic;\">&nbsp;modules</span></p><p style=\"text-align:center;\"><span style=\"font-style:italic;\">&nbsp;into</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":280.0,"y":22.0,"rotation":0.0,"id":164,"width":170.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":63,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:&#39;Droid Sans Mono&#39;;font-size:14px;color:#980000;\"><span style=\"\">TEST_FORGE_mods_dir&#61;</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":530.0,"y":22.0,"rotation":0.0,"id":167,"width":170.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":64,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:&#39;Droid Sans Mono&#39;;font-size:14px;color:#980000;\"><span style=\"\">TEST_FORGE_tars_dir&#61;</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":20.0,"y":20.0,"rotation":0.0,"id":168,"width":180.0,"height":16.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":65,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:&#39;Droid Sans Mono&#39;;font-size:14px;color:#980000;\"><span style=\"\">TEST_FORGE_deps_forge&#61;</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":570.0,"y":152.5,"rotation":0.0,"id":174,"width":90.0,"height":70.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":66,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":0.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":"4,4","dropShadow":false,"state":0,"opacity":0.05,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.7999999999999998,"y":0.0,"rotation":0.0,"id":175,"width":86.4,"height":60.0,"uid":null,"order":68,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-size:18px;color:#08233f;\"><span style=\"font-weight:bold;\">Test</span></span></p><p style=\"text-align:center;\"><span style=\"font-size:18px;color:#08233f;\"><span style=\"font-weight:bold;\"> Puppet </span></span></p><p style=\"text-align:center;\"><span style=\"font-size:18px;color:#08233f;\"><span style=\"font-weight:bold;\">Forge</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":543.0,"y":237.5,"rotation":0.0,"id":176,"width":140.0,"height":32.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":69,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:&#39;Droid Sans Mono&#39;;font-size:14px;color:#980000;\"><span style=\"\">TEST_FORGE_port&#61;</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":40.0,"y":161.99999999999994,"rotation":0.0,"id":194,"width":120.0,"height":80.0,"uid":"com.gliffy.shape.basic.basic_v1.default.group","order":80,"lockAspectRatio":false,"lockShape":false,"children":[{"x":20.0,"y":20.0,"rotation":0.0,"id":192,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":76,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.9999999999999993,"y":0.0,"rotation":0.0,"id":193,"width":95.99999999999999,"height":32.0,"uid":null,"order":79,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"color:#08233f;\"><span style=\"font-size:14px;\"><span style=\"font-weight:bold;\">Modules Under Test</span></span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":10.0,"y":10.0,"rotation":0.0,"id":190,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":71,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.9999999999999993,"y":0.0,"rotation":0.0,"id":191,"width":95.99999999999999,"height":32.0,"uid":null,"order":74,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"color:#08233f;\"><span style=\"font-size:14px;\"><span style=\"font-weight:bold;\">Modules Under Test</span></span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":0.0,"y":0.0,"rotation":0.0,"id":89,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":29,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":1.9999999999999993,"y":0.0,"rotation":0.0,"id":90,"width":95.99999999999999,"height":32.0,"uid":null,"order":32,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"color:#08233f;\"><span style=\"font-size:14px;\"><span style=\"font-weight:bold;\">Modules Under Test</span></span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":221.0,"y":352.0479797979797,"rotation":0.0,"id":223,"width":114.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":97,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":182,"py":0.9225888324873096,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":null,"controlPath":[[-61.0018686189278,-129.29797979797974],[69.00260033257291,-129.29797979797974],[199.00706928407362,-129.29797979797974],[329.01153823557433,-129.29797979797974]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":226,"width":160.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.4666583842671357,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:&#39;Droid Sans Mono&#39;;font-size:12px;color:#08233f;font-style:italic;\">&#96;puppet module install &lt;MUT&gt;&#96;</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":260.0,"y":81.43686868686865,"rotation":0.0,"id":227,"width":30.0,"height":30.0,"uid":"com.gliffy.shape.uml.uml_v2.activity.jump_node","order":100,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2.0,"strokeColor":"#0b5a9f","fillColor":"#0b5a9f","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":228,"width":26.0,"height":16.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;color:#dde6f1;\"><span style=\"text-decoration:none;\">1</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":510.0,"y":79.43686868686865,"rotation":0.0,"id":233,"width":30.0,"height":30.0,"uid":"com.gliffy.shape.uml.uml_v2.activity.jump_node","order":103,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2.0,"strokeColor":"#0b5a9f","fillColor":"#0b5a9f","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":234,"width":26.0,"height":16.0,"uid":null,"order":105,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;color:#dde6f1;\"><span style=\"text-decoration:none;\">2</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":491.0,"y":208.99999999999994,"rotation":0.0,"id":235,"width":30.0,"height":30.0,"uid":"com.gliffy.shape.uml.uml_v2.activity.jump_node","order":106,"lockAspectRatio":true,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2.0,"strokeColor":"#0b5a9f","fillColor":"#0b5a9f","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":236,"width":26.0,"height":16.0,"uid":null,"order":108,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;text-decoration:none;font-weight:bold;font-size:14px;color:#dde6f1;\"><span style=\"text-decoration:none;\">3</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"}],"layers":[{"guid":"SvrSpaBCATJT","order":0,"name":"Layer 0","active":true,"locked":false,"visible":true,"nodeIndex":117}],"shapeStyles":{},"lineStyles":{"global":{"fill":"none","stroke":"#ff0000","strokeWidth":2,"dashStyle":"4.0,4.0","startArrow":2,"orthoMode":2}},"textStyles":{"global":{"bold":true,"italic":true,"underline":true,"face":"Droid Sans Mono","size":"14px","color":"#dde6f1"}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default"],"lastSerialized":1461295719641,"analyticsProduct":"GJC"},"embeddedResources":{"index":0,"resources":[]}}
@@ -0,0 +1 @@
1
+ {"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":646,"height":450,"nodeIndex":215,"autoFit":true,"exportBorder":false,"gridOn":true,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":null,"printShrinkToFit":false,"printPortrait":false,"maxWidth":5000,"maxHeight":5000,"themeData":{"uid":"com.gliffy.theme.blueprint","name":"Blueprint","shape":{"primary":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#08233F"}},"secondary":{"strokeWidth":2,"strokeColor":"#08233F","fillColor":"#424D76","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}},"tertiary":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"#FFFFFF","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#08233F"}},"highlight":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"#0B599F","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#ffffff"}}},"line":{"strokeWidth":2,"strokeColor":"#0B599F","fillColor":"none","arrowType":2,"interpolationType":"linear","cornerRadius":0,"text":{"color":"#08233F"}},"text":{"color":"#08233F"},"stage":{"color":"#FFFFFF"}},"viewportType":"default","fitBB":{"min":{"x":12,"y":62.74999999999994},"max":{"x":646,"y":449.24999999999994}},"printModel":{"pageSize":"a4","portrait":false,"fitToOnePage":false,"displayPageBreaks":false},"objects":[{"x":10.0,"y":69.25,"rotation":0.0,"id":14,"width":120.0,"height":44.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":0,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:underline;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"\">Success:</span></span></p><p style=\"text-align:center;\"><span style=\"font-family:Arial;font-size:12px;color:#08233f;\"><span style=\"\">Module with dependency chain</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":139.0,"y":154.74999999999994,"rotation":0.0,"id":75,"width":114.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":10,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":71,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":69,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[121.0,-62.0],[151.0,-62.0],[181.0,-62.0],[211.0,-62.0]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":160.0,"y":62.74999999999994,"rotation":0.0,"id":71,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":11,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":72,"width":96.0,"height":16.0,"uid":null,"order":13,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">mut1</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":350.0,"y":62.74999999999994,"rotation":0.0,"id":69,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":14,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":70,"width":96.0,"height":16.0,"uid":null,"order":16,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">dep1</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":540.0,"y":62.74999999999994,"rotation":0.0,"id":67,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":17,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":68,"width":96.0,"height":16.0,"uid":null,"order":19,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">de</span></span><span style=\"font-weight:bold;font-size:14px;color:#08233f;\"><span style=\"\">p2</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":149.0,"y":164.74999999999994,"rotation":0.0,"id":77,"width":114.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":20,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":69,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":67,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[301.0,-72.0],[331.0,-72.0],[361.0,-72.0],[391.0,-72.0]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":160.0,"y":179.24999999999994,"rotation":0.0,"id":35,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":1,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":37,"width":96.0,"height":16.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">mut1</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":350.0,"y":179.24999999999994,"rotation":0.0,"id":38,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":4,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"#f4cccc","gradient":false,"dashStyle":"8,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":39,"width":96.0,"height":16.0,"uid":null,"order":6,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">dep1</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":350.0,"y":389.24999999999994,"rotation":0.0,"id":40,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":7,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":41,"width":96.0,"height":16.0,"uid":null,"order":9,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">dep4</span></span><span style=\"font-weight:bold;text-decoration:none;font-size:14px;color:rgb(8, 35, 63);\"><span style=\"text-decoration:none;\">&nbsp;</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":162.0,"y":188.74999999999994,"rotation":0.0,"id":131,"width":67.0,"height":48.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":21,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":35,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":38,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[98.0,20.5],[128.0,20.5],[158.0,20.5],[188.0,20.5]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":132,"width":21.0,"height":27.0,"uid":null,"order":23,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.4842105263157895,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;font-family:Arial;font-size:24px;color:rgb(255, 0, 0);\">X</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":450.0,"y":195.24999999999994,"rotation":0.0,"id":130,"width":90.0,"height":28.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":24,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-style:italic;\"><span style=\"font-family:Arial;font-size:12px;color:#980000;\"><span style=\"\">not availabl</span></span><span style=\"color:#980000;\"><span style=\"\">e on forge</span></span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":160.0,"y":303.24999999999994,"rotation":0.0,"id":151,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":25,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"#DDE6F1","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":152,"width":96.0,"height":16.0,"uid":null,"order":27,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">mut2</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":350.0,"y":303.24999999999994,"rotation":0.0,"id":149,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":28,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"#f4cccc","gradient":false,"dashStyle":"8,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":150,"width":96.0,"height":30.0,"uid":null,"order":30,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">dep3 </span></span></p><p style=\"text-align:center;\"><span style=\"text-decoration:none;font-family:Arial;font-size:12px;color:#08233f;\"><span style=\"text-decoration:none;\">~&gt; 0.2.0</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":162.0,"y":312.74999999999994,"rotation":0.0,"id":147,"width":67.0,"height":48.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":31,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":151,"py":0.29289321881345237,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":149,"py":0.2928932188134525,"px":1.1102230246251563E-16}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[98.0,8.073593128807147],[128.0,8.073593128807147],[158.0,8.073593128807147],[188.0,8.073593128807147]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":148,"width":21.0,"height":27.0,"uid":null,"order":33,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.4842105263157895,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;font-family:Arial;font-size:24px;color:rgb(255, 0, 0);\">X</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":480.0,"y":308.75,"rotation":0.0,"id":146,"width":90.0,"height":14.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":34,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"color:#980000;\"><span style=\"font-style:italic;\">conflicts</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":530.0,"y":389.24999999999994,"rotation":0.0,"id":201,"width":100.0,"height":60.0,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","order":35,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"#f4cccc","gradient":false,"dashStyle":"8,2","dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":202,"width":96.0,"height":30.0,"uid":null,"order":37,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:none;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"text-decoration:none;\">dep3 </span></span></p><p style=\"text-align:center;\"><span style=\"text-decoration:none;font-family:Arial;font-size:12px;color:#08233f;\"><span style=\"text-decoration:none;\">&#61; 0.1.0</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":149.0,"y":154.74999999999994,"rotation":0.0,"id":203,"width":114.0,"height":60.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":38,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":151,"py":0.7071067811865475,"px":0.9999999999999998}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":40,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#0B599F","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[111.0,190.92640687119285],[156.0,190.92640687119285],[156.0,264.5],[201.0,264.5]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":384.0,"y":354.74999999999994,"rotation":0.0,"id":204,"width":67.0,"height":48.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":39,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":40,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":201,"py":0.5,"px":0.0}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","interpolationType":"linear","cornerRadius":0.0,"controlPath":[[66.0,64.5],[92.66666666666669,64.5],[119.33333333333331,64.5],[146.0,64.5]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":205,"width":21.0,"height":27.0,"uid":null,"order":41,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.4842105263157895,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;font-family:Arial;font-size:24px;color:rgb(255, 0, 0);\">X</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":10.0,"y":180.24999999999994,"rotation":0.0,"id":209,"width":120.0,"height":58.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":42,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:underline;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"\">Fail Test 1:</span></span></p><p style=\"text-align:center;\"><span style=\"font-family:Arial;font-size:12px;color:#08233f;\"><span style=\"\">Module with dependency missing from Forge</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":10.0,"y":306.75,"rotation":0.0,"id":210,"width":120.0,"height":44.0,"uid":"com.gliffy.shape.basic.basic_v1.default.text","order":43,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-weight:bold;text-decoration:underline;font-family:Arial;font-size:14px;color:#08233f;\"><span style=\"\">Fail Test 2:</span></span></p><p style=\"text-align:center;\"><span style=\"font-family:Arial;font-size:12px;color:#08233f;\"><span style=\"\">Module with dependency conflicts</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"linkMap":[],"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"},{"x":422.0,"y":313.74999999999994,"rotation":0.0,"id":212,"width":67.0,"height":48.0,"uid":"com.gliffy.shape.uml.uml_v2.class.association","order":44,"lockAspectRatio":false,"lockShape":false,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":149,"py":0.5,"px":1.0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":201,"py":0.0,"px":0.5}}},"graphic":{"type":"Line","Line":{"strokeWidth":2.0,"strokeColor":"#ff0000","fillColor":"none","dashStyle":"4.0,4.0","startArrow":0,"endArrow":0,"startArrowRotation":0.4937848525479958,"endArrowRotation":83.55342581703539,"interpolationType":"quadratic","cornerRadius":null,"controlPath":[[28.0,19.5],[158.0,19.5],[158.0,75.5]],"lockSegments":{},"ortho":true}},"linkMap":[],"children":[{"x":0.0,"y":0.0,"rotation":0.0,"id":213,"width":28.0,"height":41.0,"uid":null,"order":46,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"both","paddingTop":2,"paddingRight":2,"paddingBottom":2,"paddingLeft":2,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":0.4842105263157895,"linePerpValue":0.0,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-family:Arial;font-size:36px;color:#ff0000;\">X</span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"children":[],"hidden":false,"layerId":"SvrSpaBCATJT"}],"hidden":false,"layerId":"SvrSpaBCATJT"}],"layers":[{"guid":"SvrSpaBCATJT","order":0,"name":"Layer 0","active":true,"locked":false,"visible":true,"nodeIndex":47}],"shapeStyles":{},"lineStyles":{"global":{"fill":"none","stroke":"#6589a8","strokeWidth":2,"dashStyle":"4.0,4.0","orthoMode":2}},"textStyles":{"global":{"bold":true,"underline":true,"face":"Droid Sans Mono","size":"36px","color":"#980000"}}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default"],"lastSerialized":1461296023550,"analyticsProduct":"GJC"},"embeddedResources":{"index":0,"resources":[]}}
@@ -0,0 +1,207 @@
1
+ require 'simp/module/repoclosure/version'
2
+ require 'json'
3
+ require 'yaml'
4
+ require 'pry'
5
+ require 'tmpdir'
6
+ require 'fileutils'
7
+ require 'puppet_forge_server'
8
+ require 'parallel'
9
+ require 'colorize'
10
+
11
+ module Simp
12
+ module Module
13
+ class Repoclosure
14
+ attr_accessor :verbose, :port, :upstream_puppet_forge
15
+ def initialize( tars_dir = nil, mods_dir = nil )
16
+
17
+ # URL of upstream Puppet Forge to provide deps served by the test forge
18
+ #
19
+ # NOTE: The upstream forge will not be used if either of the env vars
20
+ # `TEST_FORGE_mods_dir` or `TEST_FORGE_tars_dir` are present.
21
+ @upstream_puppet_forge= ENV.fetch('TEST_FORGE_deps_forge',
22
+ 'https://forgeapi.puppetlabs.com')
23
+ @verbose = ENV.fetch('VERBOSE', 0).to_i
24
+ @port = ENV['TEST_FORGE_port'] || 8080
25
+
26
+ # directory of tarballs for local forge
27
+ @tars_dir = tars_dir || ENV.fetch('TEST_FORGE_tars_dir', nil)
28
+
29
+ # directory to keep unarchived module dependencies
30
+ @mods_dir = mods_dir || ENV.fetch('TEST_FORGE_mods_dir', nil)
31
+
32
+ @startup_delay = 5 # seconds to wait for forge to start before testing
33
+ @parallel_timeout = 300 # seconds to wait before killing all processes
34
+ end
35
+
36
+ def verbose?( level = 1 )
37
+ @verbose >= level
38
+ end
39
+
40
+ def v1( msg, level = 1 )
41
+ puts msg.colorize( :blue ) if verbose? 1
42
+ end
43
+
44
+
45
+ # mut_dirs = Array of (String) diectory paths to each module-to-test
46
+ def test_modules( mut_dirs )
47
+ Dir.chdir '/tmp' # ensure we start in a real directory
48
+ tmp_dirs = [] # a list of directories we need to ensure are removed
49
+ muts = [] # a list of forge names for MUTs
50
+ success = false
51
+
52
+ begin
53
+ if @tars_dir.nil?
54
+ tmp_dirs << @tars_dir = Dir.mktmpdir('fakeforge_tars_dir_')
55
+ if @mods_dir.nil?
56
+ tmp_dirs << @mods_dir = Dir.mktmpdir('fakeforge_mods_dir_')
57
+ end
58
+ end
59
+
60
+ # prepare a local forge to test against
61
+ # -------------------------------------------------------------------
62
+ # gather each module's forge name
63
+ mut_dirs.each do |module_dir|
64
+ mj_path = File.expand_path('metadata.json', module_dir)
65
+ metadata = JSON.parse(File.read(mj_path))
66
+ muts << metadata.fetch('name')
67
+ end
68
+
69
+ # - download deps for each MUT (unless provided with a mods_dir)
70
+ # - build tars from each MUT/dep (unless provided with a tars_dir)
71
+ if @mods_dir
72
+ if tmp_dirs.include?( @mods_dir )
73
+ mut_dirs.each do |module_dir|
74
+ download_mut_deps( module_dir )
75
+ end
76
+ end
77
+ mod_dirs = Dir[File.join(@mods_dir,'*')].select{|x| File.directory? x}
78
+ package_tarballs( mod_dirs )
79
+ end
80
+
81
+ # test the puppet modules in `mut_dirs` against local forge
82
+ # -------------------------------------------------------------------
83
+ Dir.mktmpdir('fakeforge_pupmod_inst_dir_') do |pupmod_install_dir|
84
+ success = test_with_local_forge( muts, pupmod_install_dir )
85
+ end
86
+
87
+ ensure
88
+ tmp_dirs.each do |dir|
89
+ Dir.chdir '/tmp'
90
+ FileUtils.remove_entry dir, :verbose => verbose?
91
+ end
92
+ end
93
+ success
94
+ end
95
+
96
+
97
+ def test_with_local_forge( muts, pupmod_install_dir )
98
+ pidfile = File.join(pupmod_install_dir,'fakeforge.pidfile')
99
+ success = false
100
+
101
+ Parallel.map([:forge,:mut_installer,:process_timeout], in_processes: 3) do |x|
102
+ Dir.chdir '/tmp'
103
+ if x == :forge
104
+ start_local_forge(pidfile)
105
+ elsif x == :mut_installer
106
+ sleep @startup_delay # safety wait for forge to spin up (never needed yet)
107
+ success = test_install(muts, pupmod_install_dir)
108
+ raise Parallel::Kill # stops both Parallels
109
+ elsif x == :process_timeout
110
+ sleep @parallel_timeout
111
+ raise Parallel::Kill # stops both Parallels
112
+ end
113
+ end
114
+ report_files = Dir[File.join( pupmod_install_dir, "*.result.yaml")]
115
+
116
+ reports = []
117
+ report_files.each do |report_file|
118
+ report = YAML.load_file report_file
119
+ reports << report.fetch(:success)
120
+ end
121
+ reports.uniq!
122
+ if reports.size == 1 && reports.first == true
123
+ success = true
124
+ end
125
+
126
+ if report_files.empty?
127
+ warn "WARNING: no test reports were generated in '#{pupmod_install_dir}'"
128
+ warn "WARNING: (cont'd) marking test as `failed`"
129
+ success = false
130
+ end
131
+
132
+ return success
133
+ end
134
+
135
+ # Starts a local puppet forge on port `@port`.
136
+ def start_local_forge(pidfile)
137
+ puts "Starting fake forge (module-dir: '#{@tars_dir}' pidfile: '#{pidfile}'"
138
+ PuppetForgeServer::Server.new.go([
139
+ '--port', @port,
140
+ '--bind', 'localhost',
141
+ '--module-dir', @tars_dir,
142
+ '--pidfile', pidfile
143
+ ])
144
+ end
145
+
146
+ def test_install( muts, pupmod_install_dir )
147
+ success = false
148
+ muts.each do |mut|
149
+ report_file = File.join( pupmod_install_dir, "#{mut}.result.yaml" )
150
+ cmd = "puppet module install #{mut} " +
151
+ "--module_repository=http://localhost:#{@port} " +
152
+ "--modulepath=#{pupmod_install_dir} " +
153
+ "--target-dir=#{pupmod_install_dir}"
154
+ v1 "RUNNING TEST: `#{cmd}`"
155
+ success = system(cmd)
156
+ puts "$? = '#{$?}'"; puts "xxx success='#{success}'"
157
+ unless success
158
+ puts ("mods_dir: " + @mods_dir.rjust(79)).colorize(:background => :red)
159
+ puts `ls -la "#{@tars_dir}"`
160
+ puts ("tars_dir: " + @tars_dir.rjust(79)).colorize(:background => :red)
161
+ puts `ls -la "#{@tars_dir}"`
162
+ end
163
+ report = {:success => success, :cmd=>cmd, :output=>'tbd'}
164
+ File.open(report_file,'w'){|f| f.puts report.to_yaml }
165
+ end
166
+ success
167
+ end
168
+
169
+ # download all of the MUT's (declared) dependencies from an upstream
170
+ # puppet forge into `@mods_dir/`
171
+ def download_mut_deps( mut_dir )
172
+ FileUtils.chdir mut_dir, :verbose => verbose?
173
+ cmd = "puppet module build --render-as=json"
174
+ puts cmd if verbose?
175
+ tgz = `#{cmd}`.split("\n").last.gsub('"','')
176
+ puts "built module archive: #{tgz}" if verbose?
177
+ cmd = "puppet module install #{tgz} " +
178
+ "--module_repository=#{@upstream_puppet_forge} " +
179
+ "--modulepath=#{@mods_dir} --target-dir=#{@mods_dir}"
180
+ v1 cmd
181
+ out = `#{cmd}`
182
+ v1 out
183
+
184
+ # add the
185
+ FileUtils.cp tgz, @tars_dir, :verbose => verbose?
186
+ end
187
+
188
+
189
+ # build a tarball of each module (in a directory of modules)
190
+ # mods_dirs = Array of paths to directories of modules
191
+ def package_tarballs( mods_dirs )
192
+ pwd = Dir.pwd
193
+ mods_dirs.each do |module_dir|
194
+ next unless File.directory? module_dir
195
+ FileUtils.chdir module_dir, :verbose => (verbose?)
196
+
197
+ cmd = "puppet module build --render-as=json"
198
+ puts cmd if verbose?
199
+ tgz = `#{cmd}`.split("\n").last.gsub('"','')
200
+ puts "--[tgz] built module archive: #{tgz}" if verbose?
201
+ FileUtils.cp tgz, @tars_dir, :verbose => verbose?
202
+ end
203
+ FileUtils.chdir pwd, :verbose => verbose?
204
+ end
205
+ end
206
+ end
207
+ end
@@ -0,0 +1,27 @@
1
+ #
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing,
13
+ # software distributed under the License is distributed on an
14
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ # KIND, either express or implied. See the License for the
16
+ # specific language governing permissions and limitations
17
+ # under the License.
18
+ #
19
+
20
+ module Simp
21
+ module Module
22
+ class Repoclosure
23
+ # simp-module-repoclosure version
24
+ VERSION = "0.1.0"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,40 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'simp/module/repoclosure/version'
6
+
7
+ Gem::Specification.new do |gem|
8
+ gem.name = "simp-module-repoclosure"
9
+ gem.version = Simp::Module::Repoclosure::VERSION
10
+ gem.summary = %q{Test Puppet modules' dependency declarations with a local Puppet Forge}
11
+ gem.description = %q{~~Stupidly~~ Admirably direct repoclosure for a Puppet module's `metadata.json`}
12
+ gem.license = "Apache-2.0"
13
+ gem.authors = ["Chris Tessmer"]
14
+ gem.email = "simp@simp-project.org"
15
+ gem.homepage = "https://github.com/simp/rubygem-simp-module-repoclosure"
16
+
17
+ gem.files = `git ls-files`.split($/)
18
+
19
+ `git submodule --quiet foreach --recursive pwd`.split($/).each do |submodule|
20
+ submodule.sub!("#{Dir.pwd}/",'')
21
+
22
+ Dir.chdir(submodule) do
23
+ `git ls-files`.split($/).map do |subpath|
24
+ gem.files << File.join(submodule,subpath)
25
+ end
26
+ end
27
+ end
28
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
29
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
30
+ gem.require_paths = ['lib']
31
+
32
+ gem.add_development_dependency 'bundler', '~> 1.7'
33
+ gem.add_development_dependency 'rake', '~> 10.0'
34
+ gem.add_development_dependency 'rspec', '~> 3.0'
35
+ gem.add_development_dependency 'yard', '~> 0.8'
36
+ gem.add_runtime_dependency 'puppet'
37
+ gem.add_runtime_dependency 'parallel', '~> 1.8'
38
+ gem.add_runtime_dependency 'puppet-forge-server', '~> 1.9'
39
+ gem.add_runtime_dependency 'colorize', '~> 0.7'
40
+ end
@@ -0,0 +1,14 @@
1
+ source ENV['GEM_SOURCE'] || 'https://rubygems.org'
2
+
3
+ puppetversion = ENV.key?('PUPPET_VERSION') ? "#{ENV['PUPPET_VERSION']}" : ['>= 3.3']
4
+ gem 'metadata-json-lint'
5
+ gem 'puppet', puppetversion
6
+ gem 'puppetlabs_spec_helper', '>= 1.0.0'
7
+ gem 'puppet-lint', '>= 1.0.0'
8
+ gem 'facter', '>= 1.7.0'
9
+ gem 'rspec-puppet'
10
+
11
+ # rspec must be v2 for ruby 1.8.7
12
+ if RUBY_VERSION >= '1.8.7' and RUBY_VERSION < '1.9'
13
+ gem 'rspec', '~> 2.0'
14
+ end
@@ -0,0 +1,83 @@
1
+ # dep1
2
+
3
+ #### Table of Contents
4
+
5
+ 1. [Description](#description)
6
+ 1. [Setup - The basics of getting started with dep1](#setup)
7
+ * [What dep1 affects](#what-dep1-affects)
8
+ * [Setup requirements](#setup-requirements)
9
+ * [Beginning with dep1](#beginning-with-dep1)
10
+ 1. [Usage - Configuration options and additional functionality](#usage)
11
+ 1. [Reference - An under-the-hood peek at what the module is doing and how](#reference)
12
+ 1. [Limitations - OS compatibility, etc.](#limitations)
13
+ 1. [Development - Guide for contributing to the module](#development)
14
+
15
+ ## Description
16
+
17
+ Start with a one- or two-sentence summary of what the module does and/or what
18
+ problem it solves. This is your 30-second elevator pitch for your module.
19
+ Consider including OS/Puppet version it works with.
20
+
21
+ You can give more descriptive information in a second paragraph. This paragraph
22
+ should answer the questions: "What does this module *do*?" and "Why would I use
23
+ it?" If your module has a range of functionality (installation, configuration,
24
+ management, etc.), this is the time to mention it.
25
+
26
+ ## Setup
27
+
28
+ ### What dep1 affects **OPTIONAL**
29
+
30
+ If it's obvious what your module touches, you can skip this section. For
31
+ example, folks can probably figure out that your mysql_instance module affects
32
+ their MySQL instances.
33
+
34
+ If there's more that they should know about, though, this is the place to mention:
35
+
36
+ * A list of files, packages, services, or operations that the module will alter,
37
+ impact, or execute.
38
+ * Dependencies that your module automatically installs.
39
+ * Warnings or other important notices.
40
+
41
+ ### Setup Requirements **OPTIONAL**
42
+
43
+ If your module requires anything extra before setting up (pluginsync enabled,
44
+ etc.), mention it here.
45
+
46
+ If your most recent release breaks compatibility or requires particular steps
47
+ for upgrading, you might want to include an additional "Upgrading" section
48
+ here.
49
+
50
+ ### Beginning with dep1
51
+
52
+ The very basic steps needed for a user to get the module up and running. This
53
+ can include setup steps, if necessary, or it can be an example of the most
54
+ basic use of the module.
55
+
56
+ ## Usage
57
+
58
+ This section is where you describe how to customize, configure, and do the
59
+ fancy stuff with your module here. It's especially helpful if you include usage
60
+ examples and code samples for doing things with your module.
61
+
62
+ ## Reference
63
+
64
+ Here, include a complete list of your module's classes, types, providers,
65
+ facts, along with the parameters for each. Users refer to this section (thus
66
+ the name "Reference") to find specific details; most users don't read it per
67
+ se.
68
+
69
+ ## Limitations
70
+
71
+ This is where you list OS compatibility, version compatibility, etc. If there
72
+ are Known Issues, you might want to include them under their own heading here.
73
+
74
+ ## Development
75
+
76
+ Since your module is awesome, other users will want to play with it. Let them
77
+ know what the ground rules for contributing are.
78
+
79
+ ## Release Notes/Contributors/Etc. **Optional**
80
+
81
+ If you aren't using changelog, put your release notes here (though you should
82
+ consider using changelog). You can also add any additional sections you feel
83
+ are necessary or important to include here. Please use the `## ` header.
@@ -0,0 +1,17 @@
1
+ require 'puppetlabs_spec_helper/rake_tasks'
2
+ require 'puppet-lint/tasks/puppet-lint'
3
+ PuppetLint.configuration.send('disable_80chars')
4
+ PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp"]
5
+
6
+ desc "Validate manifests, templates, and ruby files"
7
+ task :validate do
8
+ Dir['manifests/**/*.pp'].each do |manifest|
9
+ sh "puppet parser validate --noop #{manifest}"
10
+ end
11
+ Dir['spec/**/*.rb','lib/**/*.rb'].each do |ruby_file|
12
+ sh "ruby -c #{ruby_file}" unless ruby_file =~ /spec\/fixtures/
13
+ end
14
+ Dir['templates/**/*.erb'].each do |template|
15
+ sh "erb -P -x -T '-' #{template} | ruby -c"
16
+ end
17
+ end
@@ -0,0 +1,48 @@
1
+ # Class: dep1
2
+ # ===========================
3
+ #
4
+ # Full description of class dep1 here.
5
+ #
6
+ # Parameters
7
+ # ----------
8
+ #
9
+ # Document parameters here.
10
+ #
11
+ # * `sample parameter`
12
+ # Explanation of what this parameter affects and what it defaults to.
13
+ # e.g. "Specify one or more upstream ntp servers as an array."
14
+ #
15
+ # Variables
16
+ # ----------
17
+ #
18
+ # Here you should define a list of variables that this module would require.
19
+ #
20
+ # * `sample variable`
21
+ # Explanation of how this variable affects the function of this class and if
22
+ # it has a default. e.g. "The parameter enc_ntp_servers must be set by the
23
+ # External Node Classifier as a comma separated list of hostnames." (Note,
24
+ # global variables should be avoided in favor of class parameters as
25
+ # of Puppet 2.6.)
26
+ #
27
+ # Examples
28
+ # --------
29
+ #
30
+ # @example
31
+ # class { 'dep1':
32
+ # servers => [ 'pool.ntp.org', 'ntp.local.company.com' ],
33
+ # }
34
+ #
35
+ # Authors
36
+ # -------
37
+ #
38
+ # Author Name <author@domain.com>
39
+ #
40
+ # Copyright
41
+ # ---------
42
+ #
43
+ # Copyright 2016 Your name here, unless otherwise noted.
44
+ #
45
+ class dep1 {
46
+
47
+
48
+ }