<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram program="umlet" version="14.3.0">
  <zoom_level>10</zoom_level>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>330</x>
      <y>90</y>
      <w>220</w>
      <h>310</h>
    </coordinates>
    <panel_attributes>lt=.
bg=#99FF99
&lt;&lt;api&gt;&gt;</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>340</x>
      <y>200</y>
      <w>200</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
lt=.
/ITypeConverter/</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>340</x>
      <y>160</y>
      <w>200</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
lt=.
/IVersionProvider/</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>630</x>
      <y>90</y>
      <w>220</w>
      <h>360</h>
    </coordinates>
    <panel_attributes>&lt;&lt;internal&gt;&gt;
bg=light_gray</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>660</x>
      <y>230</y>
      <w>170</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=4
IntegerConverter
group=11</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>660</x>
      <y>270</y>
      <w>170</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=4
DoubleConverter
group=11</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>660</x>
      <y>310</y>
      <w>170</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=4
FileConverter
group=11</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>660</x>
      <y>350</y>
      <w>170</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=4
ISO8601DateConverter
group=11</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>660</x>
      <y>390</y>
      <w>170</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>lt=.
bg=white
layer=4
... and many more
group=11</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>530</x>
      <y>200</y>
      <w>150</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>lt=&lt;&lt;.</panel_attributes>
    <additional_attributes>10.0;10.0;80.0;10.0;80.0;40.0;130.0;40.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>530</x>
      <y>200</y>
      <w>150</w>
      <h>100</h>
    </coordinates>
    <panel_attributes>lt=&lt;&lt;.</panel_attributes>
    <additional_attributes>10.0;10.0;80.0;10.0;80.0;80.0;130.0;80.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>530</x>
      <y>200</y>
      <w>150</w>
      <h>140</h>
    </coordinates>
    <panel_attributes>lt=&lt;&lt;.</panel_attributes>
    <additional_attributes>10.0;10.0;80.0;10.0;80.0;120.0;130.0;120.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>530</x>
      <y>200</y>
      <w>150</w>
      <h>180</h>
    </coordinates>
    <panel_attributes>lt=&lt;&lt;.</panel_attributes>
    <additional_attributes>10.0;10.0;80.0;10.0;80.0;160.0;130.0;160.0</additional_attributes>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>650</x>
      <y>160</y>
      <w>140</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
NoVersionProvider</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>530</x>
      <y>120</y>
      <w>140</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>lt=&lt;&lt;.</panel_attributes>
    <additional_attributes>10.0;10.0;120.0;10.0</additional_attributes>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>390</x>
      <y>510</y>
      <w>140</w>
      <h>240</h>
    </coordinates>
    <panel_attributes>&lt;&lt;internal&gt;&gt;
bg=light_gray
lt=.
group=10</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>400</x>
      <y>540</y>
      <w>120</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
Interpreter
group=10</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>400</x>
      <y>580</y>
      <w>120</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
LookBehind
group=10</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>400</x>
      <y>620</y>
      <w>120</w>
      <h>40</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
PositionalPara-
metersSorter
group=10</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>400</x>
      <y>670</y>
      <w>120</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
Assert
group=10</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>400</x>
      <y>710</y>
      <w>120</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
Tracer
group=10</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>20</x>
      <y>0</y>
      <w>850</w>
      <h>780</h>
    </coordinates>
    <panel_attributes>&lt;&lt;facade&gt;&gt;
CommandLine</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>70</x>
      <y>90</y>
      <w>230</w>
      <h>420</h>
    </coordinates>
    <panel_attributes>bg=#99FF99
&lt;&lt;api&gt;&gt;
lt=.
group=9</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>90</x>
      <y>120</y>
      <w>200</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
lt=.
/IExecutionStrategy/

group=9</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>140</x>
      <y>170</y>
      <w>70</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
RunFirst

group=9</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>140</x>
      <y>210</y>
      <w>70</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
RunAll

group=9</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>140</x>
      <y>250</y>
      <w>70</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
RunLast

group=9</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>100</x>
      <y>140</y>
      <w>60</w>
      <h>140</h>
    </coordinates>
    <panel_attributes>lt=&lt;&lt;.
group=9</panel_attributes>
    <additional_attributes>10.0;10.0;10.0;120.0;40.0;120.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>100</x>
      <y>140</y>
      <w>60</w>
      <h>100</h>
    </coordinates>
    <panel_attributes>lt=&lt;&lt;.
group=9</panel_attributes>
    <additional_attributes>10.0;10.0;10.0;80.0;40.0;80.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>100</x>
      <y>140</y>
      <w>60</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>lt=&lt;&lt;.
group=9</panel_attributes>
    <additional_attributes>10.0;10.0;10.0;40.0;40.0;40.0</additional_attributes>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>90</x>
      <y>300</y>
      <w>200</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
lt=.
/IParameterExceptionHandler/
group=9</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>90</x>
      <y>340</y>
      <w>200</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
lt=.
/IExecutionExceptionHandler/
group=9</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLNote</id>
    <coordinates>
      <x>740</x>
      <y>10</y>
      <w>110</w>
      <h>40</h>
    </coordinates>
    <panel_attributes>picocli 4.0
2019-07-15
bg=#FFFF66</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>340</x>
      <y>120</y>
      <w>200</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
lt=.
/IDefaultValueProvider/</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>650</x>
      <y>120</y>
      <w>140</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
NoDefaultProvider</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>530</x>
      <y>160</y>
      <w>140</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>lt=&lt;&lt;.</panel_attributes>
    <additional_attributes>10.0;10.0;120.0;10.0</additional_attributes>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>390</x>
      <y>460</y>
      <w>140</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=#99FF99
layer=3
ParseResult</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLNote</id>
    <coordinates>
      <x>70</x>
      <y>10</y>
      <w>230</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>Classes and interfaces used
to parse command line arguments
and execute commands.
bg=#FFFF66</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLNote</id>
    <coordinates>
      <x>50</x>
      <y>570</y>
      <w>310</w>
      <h>180</h>
    </coordinates>
    <panel_attributes>Use the CommandLine `execute` method
with @Command methods or @Command
classes implementing Runnable or Callable
to do all of the below with one line of code:
* parse user input
* handle invalid arguments
* handle requests for help or version info
* invoke the business logic
* get an exit code
bg=#FFFF66</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>510</x>
      <y>540</y>
      <w>140</w>
      <h>190</h>
    </coordinates>
    <panel_attributes>lt=.</panel_attributes>
    <additional_attributes>10.0;10.0;120.0;170.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>170</x>
      <y>500</y>
      <w>50</w>
      <h>90</h>
    </coordinates>
    <panel_attributes>lt=.</panel_attributes>
    <additional_attributes>10.0;10.0;30.0;70.0</additional_attributes>
  </element>
  <element>
    <id>UMLNote</id>
    <coordinates>
      <x>630</x>
      <y>690</y>
      <w>220</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>Internally, the Interpreter
class is responsible for parsing
the input.
bg=#FFFF66</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLNote</id>
    <coordinates>
      <x>630</x>
      <y>460</y>
      <w>220</w>
      <h>80</h>
    </coordinates>
    <panel_attributes>When options and positional
parameters are matched, the
input is converted to the ArgSpec
type with a ITypeConverter.


bg=#FFFF66</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>710</x>
      <y>420</y>
      <w>50</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>lt=.</panel_attributes>
    <additional_attributes>10.0;10.0;30.0;40.0</additional_attributes>
  </element>
  <element>
    <id>UMLNote</id>
    <coordinates>
      <x>630</x>
      <y>620</y>
      <w>220</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>Use the ParseResult class to
interrogate the parse results
via the programmatic API.


bg=#FFFF66</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>520</x>
      <y>470</y>
      <w>130</w>
      <h>190</h>
    </coordinates>
    <panel_attributes>lt=.</panel_attributes>
    <additional_attributes>10.0;10.0;110.0;170.0</additional_attributes>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>90</x>
      <y>380</y>
      <w>200</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
lt=.
/IExitCodeGenerator/
group=9</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>90</x>
      <y>420</y>
      <w>200</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
lt=.
/IExitCodeExceptionMapper/
group=9</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>90</x>
      <y>460</y>
      <w>200</w>
      <h>40</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
&lt;&lt;constants&gt;&gt;
ExitCode

group=9</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>650</x>
      <y>200</y>
      <w>190</w>
      <h>230</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
Built In Type Converters
group=11</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>340</x>
      <y>250</y>
      <w>200</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
lt=.
/INegatableOptionTransformer/</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>390</x>
      <y>300</y>
      <w>150</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
RegexTransformer</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>350</x>
      <y>270</y>
      <w>60</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>lt=&lt;&lt;.</panel_attributes>
    <additional_attributes>10.0;10.0;10.0;40.0;40.0;40.0</additional_attributes>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>340</x>
      <y>350</y>
      <w>200</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>bg=white
layer=3
lt=.
/IParameterConsumer/</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>350</x>
      <y>370</y>
      <w>120</w>
      <h>200</h>
    </coordinates>
    <panel_attributes>lt=&lt;.
&lt;&lt;delegates to&gt;&gt;





</panel_attributes>
    <additional_attributes>10.0;10.0;10.0;180.0;50.0;180.0</additional_attributes>
  </element>
  <element>
    <id>UMLNote</id>
    <coordinates>
      <x>630</x>
      <y>550</y>
      <w>220</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>Applications may optionally take
responsibility for consuming
parameters.


bg=#FFFF66</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>450</x>
      <y>410</y>
      <w>200</w>
      <h>180</h>
    </coordinates>
    <panel_attributes>lt=.</panel_attributes>
    <additional_attributes>10.0;10.0;90.0;10.0;180.0;160.0</additional_attributes>
  </element>
</diagram>
