@simpleangularcontrols/sac-common 10.0.0-rc.29 → 10.0.0-rc.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/bundles/simpleangularcontrols-sac-common.umd.js +1848 -1249
  2. package/bundles/simpleangularcontrols-sac-common.umd.js.map +1 -1
  3. package/bundles/simpleangularcontrols-sac-common.umd.min.js +1 -1
  4. package/bundles/simpleangularcontrols-sac-common.umd.min.js.map +1 -1
  5. package/common/basedatetimecontrol.d.ts +47 -21
  6. package/common/baseinputcontrol.d.ts +10 -8
  7. package/common/baselistcontrol.d.ts +15 -15
  8. package/common/basemodelcontrol.d.ts +59 -43
  9. package/common/baseselectcontrol.d.ts +5 -5
  10. package/common/baseuploadcontrol.d.ts +77 -57
  11. package/components/browser/browser.d.ts +86 -89
  12. package/components/browser/models/browserfile.d.ts +6 -6
  13. package/components/browser/models/browserfiledeleterequest.d.ts +7 -7
  14. package/components/browser/models/browserfilerenamerequest.d.ts +10 -10
  15. package/components/browser/models/browserfileresponse.d.ts +2 -2
  16. package/components/browser/models/browserfilesaverequest.d.ts +7 -7
  17. package/components/browser/models/browsernode.d.ts +13 -13
  18. package/components/browser/models/browsernodedeleterequest.d.ts +6 -6
  19. package/components/browser/models/browsernodenewrequest.d.ts +7 -7
  20. package/components/browser/models/browsernoderenamerequest.d.ts +7 -7
  21. package/components/browser/models/browsernoderequest.d.ts +7 -7
  22. package/components/browser/models/browsernoderesponse.d.ts +1 -1
  23. package/controls/buttons/button.d.ts +25 -19
  24. package/controls/checkbox/checkbox.d.ts +3 -3
  25. package/controls/checkbox/radiobutton.d.ts +19 -13
  26. package/controls/checkbox/radiobuttons.d.ts +13 -10
  27. package/controls/confirm/confirm.button.d.ts +3 -3
  28. package/controls/confirm/confirm.d.ts +13 -12
  29. package/controls/confirm/confirm.service.d.ts +14 -14
  30. package/controls/contextmenu/contextmenu.d.ts +33 -27
  31. package/controls/contextmenu/contextmenu.interface.d.ts +6 -0
  32. package/controls/contextmenu/contextmenuanchor.d.ts +4 -4
  33. package/controls/contextmenu/contextmenucontainer.d.ts +4 -4
  34. package/controls/contextmenu/contextmenuitembutton.d.ts +12 -12
  35. package/controls/datetime/date.d.ts +11 -11
  36. package/controls/datetime/dateselector.d.ts +47 -40
  37. package/controls/datetime/datetime.d.ts +15 -14
  38. package/controls/datetime/time.d.ts +22 -12
  39. package/controls/dialog/dialog.d.ts +28 -22
  40. package/controls/form/form.d.ts +17 -12
  41. package/controls/grid/grid.d.ts +1 -0
  42. package/controls/grid/gridbutton.d.ts +1 -0
  43. package/controls/grid/gridcolumn.d.ts +5 -1
  44. package/controls/grid/gridcolumnaction.d.ts +1 -1
  45. package/controls/grid/gridcolumnbase.d.ts +8 -3
  46. package/controls/grid/model.d.ts +5 -2
  47. package/controls/grid/paging.d.ts +2 -3
  48. package/controls/input/input.d.ts +7 -7
  49. package/controls/input/inputarea.d.ts +8 -6
  50. package/controls/input/inputcurrency.d.ts +4 -1
  51. package/controls/input/inputdecimal.d.ts +14 -14
  52. package/controls/input/inputemail.d.ts +4 -4
  53. package/controls/input/inputinteger.d.ts +14 -14
  54. package/controls/input/inputpassword.d.ts +3 -3
  55. package/controls/input/inputsearch.d.ts +8 -5
  56. package/controls/layout/formlayout.d.ts +8 -5
  57. package/controls/list/buildvaluestring.d.ts +2 -2
  58. package/controls/list/dropdown.d.ts +23 -22
  59. package/controls/list/dropdownoptions.d.ts +10 -10
  60. package/controls/list/listbox.d.ts +25 -23
  61. package/controls/multilanguage/multilanguageinput.d.ts +25 -25
  62. package/controls/multilanguage/multilanguageinputarea.d.ts +27 -27
  63. package/controls/static/formcontainer.d.ts +8 -8
  64. package/controls/static/staticlabel.d.ts +5 -5
  65. package/controls/tabs/tab.d.ts +2 -2
  66. package/controls/tabs/tabitem.d.ts +7 -7
  67. package/controls/tinymce/tinymce.d.ts +37 -37
  68. package/controls/tinymce/tinymcedialogsettings.d.ts +6 -6
  69. package/controls/tinymce/tinymcedialogsettingsmeta.d.ts +2 -2
  70. package/controls/tinymce/tinymceinstance.d.ts +2 -2
  71. package/controls/tooltip/tooltip.d.ts +10 -5
  72. package/controls/treeview/treeview.d.ts +50 -5
  73. package/controls/upload/dropzonemultiple.d.ts +16 -16
  74. package/controls/upload/dropzonesingle.d.ts +11 -11
  75. package/controls/upload/uploadmultiple.d.ts +12 -12
  76. package/controls/upload/uploadsingle.d.ts +7 -7
  77. package/controls/validation/validationsummary.d.ts +12 -11
  78. package/controls/wizard/wizard.d.ts +25 -18
  79. package/controls/wizard/wizarditem.d.ts +5 -5
  80. package/enums/ButtonRoleType.d.ts +26 -1
  81. package/enums/ControlHeight.d.ts +1 -1
  82. package/enums/IconType.d.ts +1 -1
  83. package/esm2015/common/basedatetimecontrol.js +47 -22
  84. package/esm2015/common/baseinputcontrol.js +13 -11
  85. package/esm2015/common/baselistcontrol.js +21 -17
  86. package/esm2015/common/basemodelcontrol.js +72 -49
  87. package/esm2015/common/baseselectcontrol.js +11 -9
  88. package/esm2015/common/baseuploadcontrol.js +69 -49
  89. package/esm2015/components/browser/browser.js +93 -105
  90. package/esm2015/components/browser/models/browserfile.js +1 -1
  91. package/esm2015/components/browser/models/browserfiledeleterequest.js +6 -4
  92. package/esm2015/components/browser/models/browserfilerenamerequest.js +6 -4
  93. package/esm2015/components/browser/models/browserfileresponse.js +1 -1
  94. package/esm2015/components/browser/models/browserfilesaverequest.js +5 -3
  95. package/esm2015/components/browser/models/browsernode.js +1 -1
  96. package/esm2015/components/browser/models/browsernodedeleterequest.js +6 -4
  97. package/esm2015/components/browser/models/browsernodenewrequest.js +6 -4
  98. package/esm2015/components/browser/models/browsernoderenamerequest.js +6 -4
  99. package/esm2015/components/browser/models/browsernoderequest.js +6 -4
  100. package/esm2015/components/browser/models/browsernoderesponse.js +1 -1
  101. package/esm2015/controls/buttons/button.js +26 -20
  102. package/esm2015/controls/checkbox/checkbox.js +3 -3
  103. package/esm2015/controls/checkbox/radiobutton.js +21 -15
  104. package/esm2015/controls/checkbox/radiobuttons.js +14 -11
  105. package/esm2015/controls/confirm/confirm.button.js +4 -4
  106. package/esm2015/controls/confirm/confirm.js +14 -13
  107. package/esm2015/controls/confirm/confirm.service.js +21 -21
  108. package/esm2015/controls/contextmenu/contextmenu.interface.js +1 -1
  109. package/esm2015/controls/contextmenu/contextmenu.js +29 -23
  110. package/esm2015/controls/contextmenu/contextmenuanchor.js +4 -4
  111. package/esm2015/controls/contextmenu/contextmenucontainer.js +4 -4
  112. package/esm2015/controls/contextmenu/contextmenuitembutton.js +10 -10
  113. package/esm2015/controls/datetime/date.js +13 -13
  114. package/esm2015/controls/datetime/dateselector.js +55 -54
  115. package/esm2015/controls/datetime/datetime.js +17 -16
  116. package/esm2015/controls/datetime/time.js +24 -14
  117. package/esm2015/controls/dialog/dialog.js +31 -24
  118. package/esm2015/controls/form/form.js +18 -13
  119. package/esm2015/controls/grid/grid.js +2 -1
  120. package/esm2015/controls/grid/gridbutton.js +2 -1
  121. package/esm2015/controls/grid/gridcolumn.js +6 -2
  122. package/esm2015/controls/grid/gridcolumnaction.js +2 -2
  123. package/esm2015/controls/grid/gridcolumnbase.js +9 -4
  124. package/esm2015/controls/grid/model.js +5 -2
  125. package/esm2015/controls/grid/paging.js +6 -7
  126. package/esm2015/controls/input/input.js +8 -8
  127. package/esm2015/controls/input/inputarea.js +9 -7
  128. package/esm2015/controls/input/inputcurrency.js +6 -3
  129. package/esm2015/controls/input/inputdecimal.js +21 -27
  130. package/esm2015/controls/input/inputemail.js +5 -5
  131. package/esm2015/controls/input/inputinteger.js +19 -23
  132. package/esm2015/controls/input/inputpassword.js +4 -4
  133. package/esm2015/controls/input/inputsearch.js +9 -6
  134. package/esm2015/controls/layout/formlayout.js +10 -7
  135. package/esm2015/controls/list/buildvaluestring.js +6 -6
  136. package/esm2015/controls/list/dropdown.js +28 -27
  137. package/esm2015/controls/list/dropdownoptions.js +12 -12
  138. package/esm2015/controls/list/listbox.js +26 -24
  139. package/esm2015/controls/multilanguage/multilanguageinput.js +29 -29
  140. package/esm2015/controls/multilanguage/multilanguageinputarea.js +31 -31
  141. package/esm2015/controls/static/formcontainer.js +10 -10
  142. package/esm2015/controls/static/staticlabel.js +7 -7
  143. package/esm2015/controls/tabs/tab.js +2 -2
  144. package/esm2015/controls/tabs/tabitem.js +5 -5
  145. package/esm2015/controls/tinymce/tinymce.js +35 -35
  146. package/esm2015/controls/tinymce/tinymcedialogsettings.js +4 -4
  147. package/esm2015/controls/tinymce/tinymcedialogsettingsmeta.js +1 -1
  148. package/esm2015/controls/tinymce/tinymceinstance.js +1 -1
  149. package/esm2015/controls/tooltip/tooltip.js +13 -8
  150. package/esm2015/controls/treeview/treeview.js +52 -7
  151. package/esm2015/controls/upload/dropzonemultiple.js +18 -18
  152. package/esm2015/controls/upload/dropzonesingle.js +12 -12
  153. package/esm2015/controls/upload/uploadmultiple.js +14 -14
  154. package/esm2015/controls/upload/uploadsingle.js +8 -8
  155. package/esm2015/controls/validation/validationsummary.js +14 -13
  156. package/esm2015/controls/wizard/wizard.js +24 -17
  157. package/esm2015/controls/wizard/wizarditem.js +4 -4
  158. package/esm2015/enums/ButtonRoleType.js +1 -1
  159. package/esm2015/enums/ControlHeight.js +2 -2
  160. package/esm2015/enums/IconType.js +2 -2
  161. package/esm2015/interfaces/ISacConfigurationService.js +1 -1
  162. package/esm2015/interfaces/ISacFileBrowserService.js +1 -1
  163. package/esm2015/interfaces/ISacLabelSizes.js +1 -1
  164. package/esm2015/interfaces/ISacLanguageService.js +1 -1
  165. package/esm2015/interfaces/ISacLocalisationService.js +1 -1
  166. package/esm2015/interfaces/ISacUploadEventCompleteState.js +1 -1
  167. package/esm2015/interfaces/iabstractcontrollabel.js +1 -1
  168. package/esm2015/interfaces/iconfirmcomponent.js +1 -1
  169. package/esm2015/interfaces/idatetimecontrol.js +1 -1
  170. package/esm2015/interfaces/iuploadcontrol.js +1 -1
  171. package/esm2015/interfaces/treeviewaction.interface.js +1 -1
  172. package/esm2015/models/languagemodel.js +5 -3
  173. package/esm2015/public_api.js +3 -2
  174. package/esm2015/services/index.js +4 -4
  175. package/esm2015/services/sac-configuration.service.js +7 -1
  176. package/esm2015/services/sac-filebrowser.service.js +46 -38
  177. package/esm2015/services/sac-localisation.service.js +11 -7
  178. package/esm2015/services/sac-validationkey.service.js +148 -1
  179. package/esm2015/utilities/convertion.js +7 -5
  180. package/esm2015/utilities/datatypes.js +6 -4
  181. package/esm2015/utilities/enums.js +9 -8
  182. package/esm2015/utilities/guid.js +2 -2
  183. package/esm2015/utilities/interpolation.js +16 -9
  184. package/esm2015/utilities/popuphelper.js +62 -25
  185. package/esm2015/utilities/positioncalculator.js +209 -0
  186. package/esm2015/utilities/positioncalculator.ngfactory.js +7 -0
  187. package/esm2015/utilities/positionelements.js +108 -0
  188. package/esm2015/utilities/positionelements.ngfactory.js +7 -0
  189. package/esm2015/utilities/testingattribute.pipe.js +17 -2
  190. package/esm2015/validation/email.validator.js +11 -2
  191. package/esm2015/validation/equals.validator.js +11 -1
  192. package/esm2015/validation/index.js +1 -1
  193. package/esm2015/validation/invaliddate.validator.js +11 -2
  194. package/esm2015/validation/isDateValid.js +11 -10
  195. package/esm2015/validation/maxdate.validator.js +14 -4
  196. package/esm2015/validation/maxtime.validator.js +14 -4
  197. package/esm2015/validation/maxvalue.validator.js +12 -2
  198. package/esm2015/validation/mindate.validator.js +14 -4
  199. package/esm2015/validation/minfiles.validator.js +12 -2
  200. package/esm2015/validation/mintextlength.validator.js +9 -1
  201. package/esm2015/validation/mintime.validator.js +14 -4
  202. package/esm2015/validation/minvalue.validator.js +12 -2
  203. package/esm2015/validation/multilanguagerequired.validator.js +11 -1
  204. package/esm2015/validation/multilanguagerequiredany.validator.js +11 -1
  205. package/esm2015/validation/notequals.validator.js +11 -1
  206. package/esm2015/validation/pattern.validator.js +12 -2
  207. package/esm2015/validation/required.validator.js +11 -2
  208. package/esm2015/validation/validation.class.js +84 -101
  209. package/esm2015/validation/validationerrorcreator.js +12 -1
  210. package/esm2015/validation/validationerroritem.js +11 -9
  211. package/fesm2015/simpleangularcontrols-sac-common.js +1823 -1226
  212. package/fesm2015/simpleangularcontrols-sac-common.js.map +1 -1
  213. package/interfaces/ISacConfigurationService.d.ts +9 -1
  214. package/interfaces/ISacFileBrowserService.d.ts +43 -43
  215. package/interfaces/ISacLabelSizes.d.ts +15 -12
  216. package/interfaces/ISacLanguageService.d.ts +3 -3
  217. package/interfaces/ISacLocalisationService.d.ts +2 -2
  218. package/interfaces/ISacUploadEventCompleteState.d.ts +6 -0
  219. package/interfaces/iabstractcontrollabel.d.ts +4 -1
  220. package/interfaces/iconfirmcomponent.d.ts +6 -6
  221. package/interfaces/idatetimecontrol.d.ts +10 -1
  222. package/interfaces/treeviewaction.interface.d.ts +9 -0
  223. package/models/languagemodel.d.ts +9 -9
  224. package/package.json +1 -1
  225. package/public_api.d.ts +2 -1
  226. package/services/index.d.ts +3 -3
  227. package/services/sac-configuration.service.d.ts +8 -0
  228. package/services/sac-filebrowser.service.d.ts +78 -70
  229. package/services/sac-localisation.service.d.ts +11 -7
  230. package/services/sac-validationkey.service.d.ts +147 -0
  231. package/simpleangularcontrols-sac-common-10.0.0-rc.30.tgz +0 -0
  232. package/simpleangularcontrols-sac-common.metadata.json +1 -1
  233. package/utilities/convertion.d.ts +4 -4
  234. package/utilities/datatypes.d.ts +3 -3
  235. package/utilities/enums.d.ts +8 -1
  236. package/utilities/guid.d.ts +1 -1
  237. package/utilities/interpolation.d.ts +9 -8
  238. package/utilities/popuphelper.d.ts +47 -10
  239. package/utilities/positioncalculator.d.ts +82 -0
  240. package/utilities/positionelements.d.ts +30 -0
  241. package/utilities/positionelements.ngfactory.d.ts +1 -0
  242. package/utilities/testingattribute.pipe.d.ts +16 -1
  243. package/validation/email.validator.d.ts +7 -0
  244. package/validation/equals.validator.d.ts +8 -0
  245. package/validation/invaliddate.validator.d.ts +7 -0
  246. package/validation/isDateValid.d.ts +5 -2
  247. package/validation/maxdate.validator.d.ts +8 -0
  248. package/validation/maxtime.validator.d.ts +8 -0
  249. package/validation/maxvalue.validator.d.ts +8 -0
  250. package/validation/mindate.validator.d.ts +8 -0
  251. package/validation/minfiles.validator.d.ts +8 -0
  252. package/validation/mintextlength.validator.d.ts +8 -0
  253. package/validation/mintime.validator.d.ts +8 -0
  254. package/validation/minvalue.validator.d.ts +8 -0
  255. package/validation/multilanguagerequired.validator.d.ts +9 -1
  256. package/validation/multilanguagerequiredany.validator.d.ts +9 -1
  257. package/validation/notequals.validator.d.ts +8 -0
  258. package/validation/pattern.validator.d.ts +8 -0
  259. package/validation/required.validator.d.ts +7 -0
  260. package/validation/validation.class.d.ts +83 -100
  261. package/validation/validationerrorcreator.d.ts +9 -0
  262. package/validation/validationerroritem.d.ts +16 -16
  263. package/esm2015/utilities/positioning.js +0 -301
  264. package/esm2015/utilities/positioning.ngfactory.js +0 -7
  265. package/simpleangularcontrols-sac-common-10.0.0-rc.29.tgz +0 -0
  266. package/utilities/positioning.d.ts +0 -82
  267. /package/utilities/{positioning.ngfactory.d.ts → positioncalculator.ngfactory.d.ts} +0 -0
@@ -1,7 +1,8 @@
1
1
  /**
2
- * Erzeugt ein Boolean
2
+ * Creates a boolean
3
3
  * @param value
4
4
  */
5
+ // #region Exported Functions
5
6
  export function convertToBoolean(value) {
6
7
  if (value === null || value === undefined || typeof value === 'boolean') {
7
8
  return value;
@@ -9,7 +10,7 @@ export function convertToBoolean(value) {
9
10
  return value.toString() === 'true';
10
11
  }
11
12
  /**
12
- * Erzeugt ein Number
13
+ * Creates a number
13
14
  * @param value
14
15
  */
15
16
  export function convertToNumber(value) {
@@ -19,8 +20,8 @@ export function convertToNumber(value) {
19
20
  return parseFloat(value.toString());
20
21
  }
21
22
  /**
22
- * Erzeugt aus einer Map ein Objekt
23
- * @param map Map mit Key und Values. Key ist ein String. Value kann ein Objekt sein.
23
+ * Creates an object from a Map
24
+ * @param map Map with keys and values. Key is a string. Value can be an object.
24
25
  */
25
26
  export function mapToObject(map) {
26
27
  const obj = {};
@@ -29,4 +30,5 @@ export function mapToObject(map) {
29
30
  });
30
31
  return obj;
31
32
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGlvbi5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9zaW1wbGVhbmd1bGFyY29udHJvbHMvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbInV0aWxpdGllcy9jb252ZXJ0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFVO0lBQ3pDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUN2RSxPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQVU7SUFDeEMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQ3RFLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBR0Q7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFxQjtJQUMvQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDZixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXJ6ZXVndCBlaW4gQm9vbGVhblxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKSA9PT0gJ3RydWUnO1xufVxuXG4vKipcbiAqIEVyemV1Z3QgZWluIE51bWJlclxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9OdW1iZXIodmFsdWU6IGFueSk6IG51bWJlciB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS50b1N0cmluZygpKTtcbn1cblxuXG4vKipcbiAqIEVyemV1Z3QgYXVzIGVpbmVyIE1hcCBlaW4gT2JqZWt0XG4gKiBAcGFyYW0gbWFwIE1hcCBtaXQgS2V5IHVuZCBWYWx1ZXMuIEtleSBpc3QgZWluIFN0cmluZy4gVmFsdWUga2FubiBlaW4gT2JqZWt0IHNlaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb09iamVjdChtYXA6IE1hcDxzdHJpbmcsIGFueT4pOiBhbnkge1xuICBjb25zdCBvYmogPSB7fTtcbiAgbWFwLmZvckVhY2goKHYsIGspID0+IHtcbiAgICBvYmpba10gPSB2O1xuICB9KTtcbiAgcmV0dXJuIG9iajtcbn1cbiJdfQ==
33
+ // #endregion Exported Functions
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGlvbi5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9zaW1wbGVhbmd1bGFyY29udHJvbHMvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbInV0aWxpdGllcy9jb252ZXJ0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILDZCQUE2QjtBQUU3QixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBVTtJQUN2QyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDckUsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxNQUFNLENBQUM7QUFDdkMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBVTtJQUN0QyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDcEUsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFxQjtJQUM3QyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDZixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUVELGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JlYXRlcyBhIGJvb2xlYW5cbiAqIEBwYXJhbSB2YWx1ZVxuICovXG4vLyAjcmVnaW9uIEV4cG9ydGVkIEZ1bmN0aW9uc1xuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvQm9vbGVhbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpID09PSAndHJ1ZSc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG51bWJlclxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9OdW1iZXIodmFsdWU6IGFueSk6IG51bWJlciB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUudG9TdHJpbmcoKSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgZnJvbSBhIE1hcFxuICogQHBhcmFtIG1hcCBNYXAgd2l0aCBrZXlzIGFuZCB2YWx1ZXMuIEtleSBpcyBhIHN0cmluZy4gVmFsdWUgY2FuIGJlIGFuIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvT2JqZWN0KG1hcDogTWFwPHN0cmluZywgYW55Pik6IGFueSB7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgbWFwLmZvckVhY2goKHYsIGspID0+IHtcbiAgICAgICAgb2JqW2tdID0gdjtcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xufVxuXG4vLyAjZW5kcmVnaW9uIEV4cG9ydGVkIEZ1bmN0aW9uc1xuIl19
@@ -1,9 +1,11 @@
1
1
  /**
2
- * Prüft ob ein Objekt Defined ist
3
- * @param value Objekt
4
- * @return Objekt ist definied. TRUE wenn Objekt definied. FALSE wenn Objekt NULL oder UNDEFINED.
2
+ * Checks if an object is defined
3
+ * @param value Object
4
+ * @return Object is defined. TRUE if object is defined. FALSE if object is NULL or UNDEFINED.
5
5
  */
6
+ // #region Exported Functions
6
7
  export function isDefined(value) {
7
8
  return typeof value !== 'undefined' && value !== null;
8
9
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXR5cGVzLmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL3NpbXBsZWFuZ3VsYXJjb250cm9scy9zaW1wbGVhbmd1bGFyY29udHJvbHMvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsidXRpbGl0aWVzL2RhdGF0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFVO0lBQ2xDLE9BQU8sT0FBTyxLQUFLLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHLDvGZ0IG9iIGVpbiBPYmpla3QgRGVmaW5lZCBpc3RcbiAqIEBwYXJhbSB2YWx1ZSBPYmpla3RcbiAqIEByZXR1cm4gT2JqZWt0IGlzdCBkZWZpbmllZC4gVFJVRSB3ZW5uIE9iamVrdCBkZWZpbmllZC4gRkFMU0Ugd2VubiBPYmpla3QgTlVMTCBvZGVyIFVOREVGSU5FRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlICE9PSBudWxsO1xufVxuIl19
10
+ // #endregion Exported Functions
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXR5cGVzLmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL3NpbXBsZWFuZ3VsYXJjb250cm9scy9zaW1wbGVhbmd1bGFyY29udHJvbHMvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsidXRpbGl0aWVzL2RhdGF0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsNkJBQTZCO0FBRTdCLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBVTtJQUNoQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFdBQVcsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQzFELENBQUM7QUFFRCxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrcyBpZiBhbiBvYmplY3QgaXMgZGVmaW5lZFxuICogQHBhcmFtIHZhbHVlIE9iamVjdFxuICogQHJldHVybiBPYmplY3QgaXMgZGVmaW5lZC4gVFJVRSBpZiBvYmplY3QgaXMgZGVmaW5lZC4gRkFMU0UgaWYgb2JqZWN0IGlzIE5VTEwgb3IgVU5ERUZJTkVELlxuICovXG4vLyAjcmVnaW9uIEV4cG9ydGVkIEZ1bmN0aW9uc1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuLy8gI2VuZHJlZ2lvbiBFeHBvcnRlZCBGdW5jdGlvbnNcbiJdfQ==
@@ -1,20 +1,21 @@
1
1
  /**
2
- * Enum für Tooltip Positionen
2
+ * Enum for tooltip positions.
3
3
  */
4
4
  export var TooltipPosition;
5
5
  (function (TooltipPosition) {
6
+ /** No position / not displayed. */
6
7
  TooltipPosition[TooltipPosition["none"] = 0] = "none";
7
- // tslint:disable-next-line:no-bitwise
8
+ /** Positioned above the reference element. */
8
9
  TooltipPosition[TooltipPosition["top"] = 1] = "top";
9
- // tslint:disable-next-line:no-bitwise
10
+ /** Positioned to the right of the reference element. */
10
11
  TooltipPosition[TooltipPosition["right"] = 2] = "right";
11
- // tslint:disable-next-line:no-bitwise
12
+ /** Positioned below the reference element. */
12
13
  TooltipPosition[TooltipPosition["bottom"] = 4] = "bottom";
13
- // tslint:disable-next-line:no-bitwise
14
+ /** Positioned to the left of the reference element. */
14
15
  TooltipPosition[TooltipPosition["left"] = 8] = "left";
15
- // tslint:disable-next-line:no-bitwise
16
+ /** Positioned at top-end (top aligned with end/RTL-aware). */
16
17
  TooltipPosition[TooltipPosition["topend"] = 16] = "topend";
17
- // tslint:disable-next-line:no-bitwise
18
+ /** Positioned at bottom-end (bottom aligned with end/RTL-aware). */
18
19
  TooltipPosition[TooltipPosition["bottomend"] = 32] = "bottomend";
19
20
  })(TooltipPosition || (TooltipPosition = {}));
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bXMuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NpbXBsZWFuZ3VsYXJjb250cm9scy9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJ1dGlsaXRpZXMvZW51bXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxlQWNYO0FBZEQsV0FBWSxlQUFlO0lBQ3ZCLHFEQUFRLENBQUE7SUFDUixzQ0FBc0M7SUFDdEMsbURBQVksQ0FBQTtJQUNaLHNDQUFzQztJQUN0Qyx1REFBYyxDQUFBO0lBQ2Qsc0NBQXNDO0lBQ3RDLHlEQUFlLENBQUE7SUFDZixzQ0FBc0M7SUFDdEMscURBQWEsQ0FBQTtJQUNiLHNDQUFzQztJQUN0QywwREFBZSxDQUFBO0lBQ2Ysc0NBQXNDO0lBQ3RDLGdFQUFrQixDQUFBO0FBQ3RCLENBQUMsRUFkVyxlQUFlLEtBQWYsZUFBZSxRQWMxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRW51bSBmw7xyIFRvb2x0aXAgUG9zaXRpb25lblxuICovXG5leHBvcnQgZW51bSBUb29sdGlwUG9zaXRpb24ge1xuICAgIG5vbmUgPSAwLFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgdG9wID0gMSA8PCAwLFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgcmlnaHQgPSAxIDw8IDEsXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICBib3R0b20gPSAxIDw8IDIsXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICBsZWZ0ID0gMSA8PCAzLFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgdG9wZW5kID0gMSA8PCA0LFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgYm90dG9tZW5kID0gMSA8PCA1LFxufVxuIl19
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bXMuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NpbXBsZWFuZ3VsYXJjb250cm9scy9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJ1dGlsaXRpZXMvZW51bXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxlQXFCWDtBQXJCRCxXQUFZLGVBQWU7SUFDdkIsbUNBQW1DO0lBQ25DLHFEQUFRLENBQUE7SUFFUiw4Q0FBOEM7SUFDOUMsbURBQVksQ0FBQTtJQUVaLHdEQUF3RDtJQUN4RCx1REFBYyxDQUFBO0lBRWQsOENBQThDO0lBQzlDLHlEQUFlLENBQUE7SUFFZix1REFBdUQ7SUFDdkQscURBQWEsQ0FBQTtJQUViLDhEQUE4RDtJQUM5RCwwREFBZSxDQUFBO0lBRWYsb0VBQW9FO0lBQ3BFLGdFQUFrQixDQUFBO0FBQ3RCLENBQUMsRUFyQlcsZUFBZSxLQUFmLGVBQWUsUUFxQjFCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbnVtIGZvciB0b29sdGlwIHBvc2l0aW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gVG9vbHRpcFBvc2l0aW9uIHtcbiAgICAvKiogTm8gcG9zaXRpb24gLyBub3QgZGlzcGxheWVkLiAqL1xuICAgIG5vbmUgPSAwLFxuXG4gICAgLyoqIFBvc2l0aW9uZWQgYWJvdmUgdGhlIHJlZmVyZW5jZSBlbGVtZW50LiAqL1xuICAgIHRvcCA9IDEgPDwgMCxcblxuICAgIC8qKiBQb3NpdGlvbmVkIHRvIHRoZSByaWdodCBvZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuICovXG4gICAgcmlnaHQgPSAxIDw8IDEsXG5cbiAgICAvKiogUG9zaXRpb25lZCBiZWxvdyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuICovXG4gICAgYm90dG9tID0gMSA8PCAyLFxuXG4gICAgLyoqIFBvc2l0aW9uZWQgdG8gdGhlIGxlZnQgb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LiAqL1xuICAgIGxlZnQgPSAxIDw8IDMsXG5cbiAgICAvKiogUG9zaXRpb25lZCBhdCB0b3AtZW5kICh0b3AgYWxpZ25lZCB3aXRoIGVuZC9SVEwtYXdhcmUpLiAqL1xuICAgIHRvcGVuZCA9IDEgPDwgNCxcblxuICAgIC8qKiBQb3NpdGlvbmVkIGF0IGJvdHRvbS1lbmQgKGJvdHRvbSBhbGlnbmVkIHdpdGggZW5kL1JUTC1hd2FyZSkuICovXG4gICAgYm90dG9tZW5kID0gMSA8PCA1LFxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  /**
2
- * create a guid with crypto library if availabe and a fallback to Math.Random implementation
2
+ * Create a GUID with crypto library if available and a fallback to Math.Random implementation
3
3
  */
4
4
  // #region Exported Functions
5
5
  export function createGuid() {
@@ -15,4 +15,4 @@ export function createGuid() {
15
15
  }
16
16
  }
17
17
  // #endregion Exported Functions
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VpZC5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9zaW1wbGVhbmd1bGFyY29udHJvbHMvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbInV0aWxpdGllcy9ndWlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsNkJBQTZCO0FBRTdCLE1BQU0sVUFBVSxVQUFVO0lBQ3RCLElBQUksT0FBTyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxTQUFTLEVBQUU7UUFDbkUsNkJBQTZCO1FBQzdCLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNyRDtTQUFNO1FBQ0gsT0FBTyxrQ0FBa0MsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQztZQUNsRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQzlCLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUN4QyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7S0FDTjtBQUNMLENBQUM7QUFFRCxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNyZWF0ZSBhIGd1aWQgd2l0aCBjcnlwdG8gbGlicmFyeSBpZiBhdmFpbGFiZSBhbmQgYSBmYWxsYmFjayB0byBNYXRoLlJhbmRvbSBpbXBsZW1lbnRhdGlvblxuICovXG4vLyAjcmVnaW9uIEV4cG9ydGVkIEZ1bmN0aW9uc1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR3VpZCgpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgY3J5cHRvICE9PSB1bmRlZmluZWQgJiYgY3J5cHRvWydyYW5kb21VVUlEJ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyByZXR1cm4gZ3VpZCB3aXRob3V0IGh5cGhlblxuICAgICAgICByZXR1cm4gY3J5cHRvWydyYW5kb21VVUlEJ10oKS5yZXBsYWNlKC9cXC0vZ2ksICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ3h4eHh4eHh4eHh4eDR4eHh5eHh4eHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICBjb25zdCByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwLFxuICAgICAgICAgICAgICAgIHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMpIHwgMHg4O1xuICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vICNlbmRyZWdpb24gRXhwb3J0ZWQgRnVuY3Rpb25zXG4iXX0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VpZC5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9zaW1wbGVhbmd1bGFyY29udHJvbHMvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbInV0aWxpdGllcy9ndWlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsNkJBQTZCO0FBRTdCLE1BQU0sVUFBVSxVQUFVO0lBQ3RCLElBQUksT0FBTyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxTQUFTLEVBQUU7UUFDbkUsNkJBQTZCO1FBQzdCLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNyRDtTQUFNO1FBQ0gsT0FBTyxrQ0FBa0MsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQztZQUNsRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQzlCLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUN4QyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7S0FDTjtBQUNMLENBQUM7QUFFRCxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZSBhIEdVSUQgd2l0aCBjcnlwdG8gbGlicmFyeSBpZiBhdmFpbGFibGUgYW5kIGEgZmFsbGJhY2sgdG8gTWF0aC5SYW5kb20gaW1wbGVtZW50YXRpb25cbiAqL1xuLy8gI3JlZ2lvbiBFeHBvcnRlZCBGdW5jdGlvbnNcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUd1aWQoKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGNyeXB0byAhPT0gdW5kZWZpbmVkICYmIGNyeXB0b1sncmFuZG9tVVVJRCddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gcmV0dXJuIGd1aWQgd2l0aG91dCBoeXBoZW5cbiAgICAgICAgcmV0dXJuIGNyeXB0b1sncmFuZG9tVVVJRCddKCkucmVwbGFjZSgvXFwtL2dpLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICd4eHh4eHh4eHh4eHg0eHh4eXh4eHh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgY29uc3QgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMCxcbiAgICAgICAgICAgICAgICB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4ODtcbiAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyAjZW5kcmVnaW9uIEV4cG9ydGVkIEZ1bmN0aW9uc1xuIl19
@@ -1,18 +1,23 @@
1
1
  import { isDefined } from './datatypes';
2
2
  /**
3
- * Klasse zum ersetzen von Platzhaltern in Strings
3
+ * Class for replacing placeholders in strings
4
4
  */
5
5
  export class Interpolation {
6
6
  constructor() {
7
+ // #region Properties
7
8
  /**
8
- * Template zum Parsen der Platzhalter
9
+ * Template for parsing placeholders
9
10
  */
10
11
  this.templateMatcher = /{{\s?([^{}\s]*)\s?}}/g;
12
+ // #endregion Private Methods
11
13
  }
14
+ // #endregion Properties
15
+ // #region Public Methods
12
16
  /**
13
- * Platzhalter in String ersetzen
14
- * @param text Text in welchem die Platzhalter ersetzt werden
15
- * @param params Objekt mit Parameter.
17
+ * Replace placeholders in string
18
+ * @param text Text in which placeholders are replaced
19
+ * @param params Object with parameters
20
+ * @returns The interpolated string with placeholders replaced
16
21
  */
17
22
  interpolateString(text, params) {
18
23
  if (!params) {
@@ -23,10 +28,12 @@ export class Interpolation {
23
28
  return isDefined(r) ? r : substring;
24
29
  });
25
30
  }
31
+ // #endregion Public Methods
32
+ // #region Private Methods
26
33
  /**
27
- * Wert aus Objekt in Objekt oder Objektstruktur lesen
28
- * @param target Objekt das zu parsen ist.
29
- * @param key Key nach welchem gesucht wird. Navigation in Properties des Objekt mit einem Punkt.
34
+ * Read value from object in object or object structure
35
+ * @param target Object to be parsed.
36
+ * @param key Key to search for. Navigation in object properties with a dot.
30
37
  */
31
38
  getValue(target, key) {
32
39
  const keys = key.split('.');
@@ -47,4 +54,4 @@ export class Interpolation {
47
54
  return target;
48
55
  }
49
56
  }
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJwb2xhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9zaW1wbGVhbmd1bGFyY29udHJvbHMvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbInV0aWxpdGllcy9pbnRlcnBvbGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQUExQjtRQUVFOztXQUVHO1FBQ0ssb0JBQWUsR0FBVyx1QkFBdUIsQ0FBQztJQXlDNUQsQ0FBQztJQXZDQzs7OztPQUlHO0lBQ0ksaUJBQWlCLENBQUMsSUFBWSxFQUFFLE1BQVk7UUFDakQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLFNBQWlCLEVBQUUsQ0FBUyxFQUFFLEVBQUU7WUFDekUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkMsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxRQUFRLENBQUMsTUFBVyxFQUFFLEdBQVc7UUFDdkMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1QsR0FBRztZQUNELEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEIsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNwRyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixHQUFHLEdBQUcsRUFBRSxDQUFDO2FBQ1Y7aUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZCLE1BQU0sR0FBRyxTQUFTLENBQUM7YUFDcEI7aUJBQU07Z0JBQ0wsR0FBRyxJQUFJLEdBQUcsQ0FBQzthQUNaO1NBQ0YsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBRXRCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRGVmaW5lZCB9IGZyb20gJy4vZGF0YXR5cGVzJztcblxuLyoqXG4gKiAgS2xhc3NlIHp1bSBlcnNldHplbiB2b24gUGxhdHpoYWx0ZXJuIGluIFN0cmluZ3NcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVycG9sYXRpb24ge1xuXG4gIC8qKlxuICAgKiAgVGVtcGxhdGUgenVtIFBhcnNlbiBkZXIgUGxhdHpoYWx0ZXJcbiAgICovXG4gIHByaXZhdGUgdGVtcGxhdGVNYXRjaGVyOiBSZWdFeHAgPSAve3tcXHM/KFtee31cXHNdKilcXHM/fX0vZztcblxuICAvKipcbiAgICogUGxhdHpoYWx0ZXIgaW4gU3RyaW5nIGVyc2V0emVuXG4gICAqIEBwYXJhbSB0ZXh0IFRleHQgaW4gd2VsY2hlbSBkaWUgUGxhdHpoYWx0ZXIgZXJzZXR6dCB3ZXJkZW5cbiAgICogQHBhcmFtIHBhcmFtcyBPYmpla3QgbWl0IFBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyBpbnRlcnBvbGF0ZVN0cmluZyh0ZXh0OiBzdHJpbmcsIHBhcmFtcz86IGFueSkge1xuICAgIGlmICghcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKHRoaXMudGVtcGxhdGVNYXRjaGVyLCAoc3Vic3RyaW5nOiBzdHJpbmcsIGI6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgciA9IHRoaXMuZ2V0VmFsdWUocGFyYW1zLCBiKTtcbiAgICAgIHJldHVybiBpc0RlZmluZWQocikgPyByIDogc3Vic3RyaW5nO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdlcnQgYXVzIE9iamVrdCBpbiBPYmpla3Qgb2RlciBPYmpla3RzdHJ1a3R1ciBsZXNlblxuICAgKiBAcGFyYW0gdGFyZ2V0IE9iamVrdCBkYXMgenUgcGFyc2VuIGlzdC5cbiAgICogQHBhcmFtIGtleSBLZXkgbmFjaCB3ZWxjaGVtIGdlc3VjaHQgd2lyZC4gTmF2aWdhdGlvbiBpbiBQcm9wZXJ0aWVzIGRlcyBPYmpla3QgbWl0IGVpbmVtIFB1bmt0LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRWYWx1ZSh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICBrZXkgPSAnJztcbiAgICBkbyB7XG4gICAgICBrZXkgKz0ga2V5cy5zaGlmdCgpO1xuICAgICAgaWYgKGlzRGVmaW5lZCh0YXJnZXQpICYmIGlzRGVmaW5lZCh0YXJnZXRba2V5XSkgJiYgKHR5cGVvZiB0YXJnZXRba2V5XSA9PT0gJ29iamVjdCcgfHwgIWtleXMubGVuZ3RoKSkge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXRba2V5XTtcbiAgICAgICAga2V5ID0gJyc7XG4gICAgICB9IGVsc2UgaWYgKCFrZXlzLmxlbmd0aCkge1xuICAgICAgICB0YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXkgKz0gJy4nO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGtleXMubGVuZ3RoKTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxufVxuIl19
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJwb2xhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9zaW1wbGVhbmd1bGFyY29udHJvbHMvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbInV0aWxpdGllcy9pbnRlcnBvbGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQUExQjtRQUNJLHFCQUFxQjtRQUVyQjs7V0FFRztRQUNLLG9CQUFlLEdBQUcsdUJBQXVCLENBQUM7UUFrRGxELDZCQUE2QjtJQUNqQyxDQUFDO0lBakRHLHdCQUF3QjtJQUV4Qix5QkFBeUI7SUFFekI7Ozs7O09BS0c7SUFDSSxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsTUFBWTtRQUMvQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsU0FBaUIsRUFBRSxDQUFTLEVBQUUsRUFBRTtZQUN2RSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuQyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsNEJBQTRCO0lBRTVCLDBCQUEwQjtJQUUxQjs7OztPQUlHO0lBQ0ssUUFBUSxDQUFDLE1BQVcsRUFBRSxHQUFXO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNULEdBQUc7WUFDQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BCLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDbEcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQzthQUNaO2lCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNyQixNQUFNLEdBQUcsU0FBUyxDQUFDO2FBQ3RCO2lCQUFNO2dCQUNILEdBQUcsSUFBSSxHQUFHLENBQUM7YUFDZDtTQUNKLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUV0QixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0RlZmluZWQgfSBmcm9tICcuL2RhdGF0eXBlcyc7XG5cbi8qKlxuICogQ2xhc3MgZm9yIHJlcGxhY2luZyBwbGFjZWhvbGRlcnMgaW4gc3RyaW5nc1xuICovXG5leHBvcnQgY2xhc3MgSW50ZXJwb2xhdGlvbiB7XG4gICAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvKipcbiAgICAgKiBUZW1wbGF0ZSBmb3IgcGFyc2luZyBwbGFjZWhvbGRlcnNcbiAgICAgKi9cbiAgICBwcml2YXRlIHRlbXBsYXRlTWF0Y2hlciA9IC97e1xccz8oW157fVxcc10qKVxccz99fS9nO1xuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlIHBsYWNlaG9sZGVycyBpbiBzdHJpbmdcbiAgICAgKiBAcGFyYW0gdGV4dCBUZXh0IGluIHdoaWNoIHBsYWNlaG9sZGVycyBhcmUgcmVwbGFjZWRcbiAgICAgKiBAcGFyYW0gcGFyYW1zIE9iamVjdCB3aXRoIHBhcmFtZXRlcnNcbiAgICAgKiBAcmV0dXJucyBUaGUgaW50ZXJwb2xhdGVkIHN0cmluZyB3aXRoIHBsYWNlaG9sZGVycyByZXBsYWNlZFxuICAgICAqL1xuICAgIHB1YmxpYyBpbnRlcnBvbGF0ZVN0cmluZyh0ZXh0OiBzdHJpbmcsIHBhcmFtcz86IGFueSkge1xuICAgICAgICBpZiAoIXBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKHRoaXMudGVtcGxhdGVNYXRjaGVyLCAoc3Vic3RyaW5nOiBzdHJpbmcsIGI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgciA9IHRoaXMuZ2V0VmFsdWUocGFyYW1zLCBiKTtcbiAgICAgICAgICAgIHJldHVybiBpc0RlZmluZWQocikgPyByIDogc3Vic3RyaW5nO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICAvLyAjcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xuXG4gICAgLyoqXG4gICAgICogUmVhZCB2YWx1ZSBmcm9tIG9iamVjdCBpbiBvYmplY3Qgb3Igb2JqZWN0IHN0cnVjdHVyZVxuICAgICAqIEBwYXJhbSB0YXJnZXQgT2JqZWN0IHRvIGJlIHBhcnNlZC5cbiAgICAgKiBAcGFyYW0ga2V5IEtleSB0byBzZWFyY2ggZm9yLiBOYXZpZ2F0aW9uIGluIG9iamVjdCBwcm9wZXJ0aWVzIHdpdGggYSBkb3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZSh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgIGtleSA9ICcnO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBrZXkgKz0ga2V5cy5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh0YXJnZXQpICYmIGlzRGVmaW5lZCh0YXJnZXRba2V5XSkgJiYgKHR5cGVvZiB0YXJnZXRba2V5XSA9PT0gJ29iamVjdCcgfHwgIWtleXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldFtrZXldO1xuICAgICAgICAgICAgICAgIGtleSA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgha2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGtleSArPSAnLic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGtleXMubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gUHJpdmF0ZSBNZXRob2RzXG59XG4iXX0=
@@ -1,6 +1,18 @@
1
1
  import { TooltipPosition } from './enums';
2
+ /**
3
+ * Utility for positioning popup elements relative to anchor elements.
4
+ *
5
+ * Provides functions for measuring container dimensions, validating available positions,
6
+ * and computing translated positions for tooltip/popups in various placements.
7
+ */
2
8
  export class PopUpHelper {
3
9
  // #region Public Methods
10
+ /**
11
+ * Get the height of the reference container element
12
+ * @param referenceContainer Element Reference to HTML Element
13
+ * @param referenceIsContainer Boolean indicating if reference is the container itself
14
+ * @returns The height in pixels
15
+ */
4
16
  getContainerHeight(referenceContainer, referenceIsContainer) {
5
17
  if (referenceContainer) {
6
18
  return referenceIsContainer
@@ -11,6 +23,12 @@ export class PopUpHelper {
11
23
  return 0;
12
24
  }
13
25
  }
26
+ /**
27
+ * Get the width of the reference container element
28
+ * @param referenceContainer Element Reference to HTML Element
29
+ * @param referenceIsContainer Boolean indicating if reference is the container itself
30
+ * @returns The width in pixels
31
+ */
14
32
  getContainerWidth(referenceContainer, referenceIsContainer) {
15
33
  if (referenceContainer) {
16
34
  return referenceIsContainer
@@ -22,29 +40,31 @@ export class PopUpHelper {
22
40
  }
23
41
  }
24
42
  /**
25
- * Get Position who the popup would be positioned
43
+ * Get Position where the popup would be positioned
26
44
  *
27
45
  * @param referenceContainer Element Reference to HTML Element which is the reference to positioning the popup
28
46
  * @param popupcontentcontainer Element Reference to container of popup
29
- * @param popupOffset Offset for popup positioning
47
+ * @param arrowWidth Width of the arrow element
48
+ * @param arrowHeight Height of the arrow element
30
49
  * @param allowedPositions Allowed Positions for the popup
50
+ * @param referenceIsContainer Boolean indicating if reference is the container itself
31
51
  * @returns Returns the position where the popup should be displayed
32
52
  */
33
53
  getDisplayPosition(referenceContainer, popupcontentcontainer, arrowWidth, arrowHeight, allowedPositions, referenceIsContainer) {
34
54
  const validPositions = this.validatePositions(referenceContainer, popupcontentcontainer, arrowWidth, arrowHeight, referenceIsContainer);
35
- // tslint:disable-next-line:no-bitwise
55
+ // eslint-disable-next-line no-bitwise
36
56
  if (this.hasPosition(allowedPositions, TooltipPosition.right) && validPositions & TooltipPosition.right) {
37
57
  return TooltipPosition.right;
38
58
  }
39
- // tslint:disable-next-line:no-bitwise
59
+ // eslint-disable-next-line no-bitwise
40
60
  if (this.hasPosition(allowedPositions, TooltipPosition.top) && validPositions & TooltipPosition.top) {
41
61
  return TooltipPosition.top;
42
62
  }
43
- // tslint:disable-next-line:no-bitwise
63
+ // eslint-disable-next-line no-bitwise
44
64
  if (this.hasPosition(allowedPositions, TooltipPosition.left) && validPositions & TooltipPosition.left) {
45
65
  return TooltipPosition.left;
46
66
  }
47
- // tslint:disable-next-line:no-bitwise
67
+ // eslint-disable-next-line no-bitwise
48
68
  if (this.hasPosition(allowedPositions, TooltipPosition.bottom) && validPositions & TooltipPosition.bottom) {
49
69
  return TooltipPosition.bottom;
50
70
  }
@@ -57,19 +77,19 @@ export class PopUpHelper {
57
77
  }
58
78
  // Get Auto Position or Default
59
79
  if (this.isAutoPosition(allowedPositions)) {
60
- // tslint:disable-next-line:no-bitwise
80
+ // eslint-disable-next-line no-bitwise
61
81
  if (validPositions & TooltipPosition.right) {
62
82
  return TooltipPosition.right;
63
83
  }
64
- // tslint:disable-next-line:no-bitwise
84
+ // eslint-disable-next-line no-bitwise
65
85
  if (validPositions & TooltipPosition.top) {
66
86
  return TooltipPosition.top;
67
87
  }
68
- // tslint:disable-next-line:no-bitwise
88
+ // eslint-disable-next-line no-bitwise
69
89
  if (validPositions & TooltipPosition.left) {
70
90
  return TooltipPosition.left;
71
91
  }
72
- // tslint:disable-next-line:no-bitwise
92
+ // eslint-disable-next-line no-bitwise
73
93
  if (validPositions & TooltipPosition.bottom) {
74
94
  return TooltipPosition.bottom;
75
95
  }
@@ -83,6 +103,7 @@ export class PopUpHelper {
83
103
  * Calculates the height of the popup
84
104
  *
85
105
  * @param container Element Reference to container of popup
106
+ * @returns The height of the popup in pixels
86
107
  */
87
108
  getPopupHeight(container) {
88
109
  var _a;
@@ -97,6 +118,7 @@ export class PopUpHelper {
97
118
  * Calculates the width of the popup
98
119
  *
99
120
  * @param container Element Reference to container of popup
121
+ * @returns The width of the popup in pixels
100
122
  */
101
123
  getPopupWidth(container) {
102
124
  if (container) {
@@ -110,6 +132,7 @@ export class PopUpHelper {
110
132
  * Returns the defined position for the tooltip
111
133
  *
112
134
  * @param allowedPositions Allowed positions defined in markup for popup
135
+ * @returns The calculated tooltip position
113
136
  */
114
137
  getPosition(allowedPositions) {
115
138
  if (this.hasPosition(allowedPositions, TooltipPosition.left)) {
@@ -134,13 +157,16 @@ export class PopUpHelper {
134
157
  return TooltipPosition.right;
135
158
  }
136
159
  /**
137
- * Calculates the position of the tooltip from links
160
+ * Calculates the left position of the tooltip/popup
138
161
  *
139
- * @param controlReference Element Reference to angular component
140
- * @param popupContainer Element Reference to container of popup
141
162
  * @param referenceContainer Element Reference to HTML Element which is the reference to positioning the popup
142
- * @param popupOffset Offset for popup positioning
163
+ * @param popupContainer Element Reference to container of popup
164
+ * @param controlReference Element Reference to the control element
165
+ * @param arrowWidth Width of the arrow element
166
+ * @param arrowHeight Height of the arrow element
143
167
  * @param requestedPosition Requested Position by Control
168
+ * @param referenceIsContainer Boolean indicating if reference is the container itself
169
+ * @returns The left position in pixels
144
170
  */
145
171
  getPositionLeft(referenceContainer, popupContainer, controlReference, arrowWidth, arrowHeight, requestedPosition, referenceIsContainer) {
146
172
  if (referenceContainer !== null && referenceContainer !== undefined) {
@@ -171,13 +197,16 @@ export class PopUpHelper {
171
197
  }
172
198
  }
173
199
  /**
174
- * Calculates the position of the tooltip from the top
200
+ * Calculates the top position of the tooltip/popup
175
201
  *
176
- * @param controlReference Element Reference to angular component
177
- * @param popupContainer Element Reference to container of popup
178
202
  * @param referenceContainer Element Reference to HTML Element which is the reference to positioning the popup
179
- * @param popupOffset Offset for popup positioning
203
+ * @param popupContainer Element Reference to container of popup
204
+ * @param controlReference Element Reference to the control element
205
+ * @param arrowWidth Width of the arrow element
206
+ * @param arrowHeight Height of the arrow element
180
207
  * @param requestedPosition Requested Position by Control
208
+ * @param referenceIsContainer Boolean indicating if reference is the container itself
209
+ * @returns The top position in pixels
181
210
  */
182
211
  getPositionTop(referenceContainer, popupContainer, controlReference, arrowWidth, arrowHeight, requestedPosition, referenceIsContainer) {
183
212
  if (referenceContainer !== null && referenceContainer !== undefined) {
@@ -217,6 +246,7 @@ export class PopUpHelper {
217
246
  *
218
247
  * @param allowedPositions Positions that allowed by control
219
248
  * @param requestedPosition Position to be checked
249
+ * @returns Boolean indicating if the requested position is configured
220
250
  */
221
251
  hasPosition(allowedPositions, requestedPosition) {
222
252
  const positions = allowedPositions.split('|');
@@ -243,6 +273,7 @@ export class PopUpHelper {
243
273
  /**
244
274
  * Defines whether AutoPosition is active
245
275
  * @param positionProperty List of allowed positions
276
+ * @returns Boolean indicating if auto positioning is enabled
246
277
  */
247
278
  isAutoPosition(positionProperty) {
248
279
  const positions = positionProperty.split('|');
@@ -250,6 +281,12 @@ export class PopUpHelper {
250
281
  }
251
282
  /**
252
283
  * Checks whether the position is valid or whether the tooltip on the position has space
284
+ * @param referenceContainer Element Reference to HTML Element which is the reference
285
+ * @param popupcontentcontainer Element Reference to container of popup
286
+ * @param arrowWidth Width of the arrow element
287
+ * @param arrowHeight Height of the arrow element
288
+ * @param referenceIsContainer Boolean indicating if reference is the container itself
289
+ * @returns The valid tooltip position
253
290
  */
254
291
  validatePositions(referenceContainer, popupcontentcontainer, arrowWidth, arrowHeight, referenceIsContainer) {
255
292
  // Check if Container is false
@@ -270,27 +307,27 @@ export class PopUpHelper {
270
307
  const topHalfPosOk = basePosition.top - tooltipRect.height / 2 > 0;
271
308
  const bottomHalfPosOk = basePosition.bottom + tooltipRect.height / 2 < window.innerHeight;
272
309
  if (topPosOk) {
273
- // tslint:disable-next-line:no-bitwise
310
+ // eslint-disable-next-line no-bitwise
274
311
  allowedPositions = allowedPositions | TooltipPosition.topend;
275
312
  }
276
313
  if (bottomPosOk) {
277
- // tslint:disable-next-line:no-bitwise
314
+ // eslint-disable-next-line no-bitwise
278
315
  allowedPositions = allowedPositions | TooltipPosition.bottomend;
279
316
  }
280
317
  if (leftPosOk && topHalfPosOk && bottomHalfPosOk) {
281
- // tslint:disable-next-line:no-bitwise
318
+ // eslint-disable-next-line no-bitwise
282
319
  allowedPositions = allowedPositions | TooltipPosition.left;
283
320
  }
284
321
  if (rightPosOk && topHalfPosOk && bottomHalfPosOk) {
285
- // tslint:disable-next-line:no-bitwise
322
+ // eslint-disable-next-line no-bitwise
286
323
  allowedPositions = allowedPositions | TooltipPosition.right;
287
324
  }
288
325
  if (topPosOk && leftHalfPosOk && rightHalfPosOk) {
289
- // tslint:disable-next-line:no-bitwise
326
+ // eslint-disable-next-line no-bitwise
290
327
  allowedPositions = allowedPositions | TooltipPosition.top;
291
328
  }
292
329
  if (bottomPosOk && leftHalfPosOk && rightHalfPosOk) {
293
- // tslint:disable-next-line:no-bitwise
330
+ // eslint-disable-next-line no-bitwise
294
331
  allowedPositions = allowedPositions | TooltipPosition.bottom;
295
332
  }
296
333
  return allowedPositions;
@@ -340,4 +377,4 @@ export class PopUpHelper {
340
377
  }
341
378
  }
342
379
  }
343
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXBoZWxwZXIuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NpbXBsZWFuZ3VsYXJjb250cm9scy9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJ1dGlsaXRpZXMvcG9wdXBoZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUcxQyxNQUFNLE9BQU8sV0FBVztJQUNwQix5QkFBeUI7SUFFbEIsa0JBQWtCLENBQUMsa0JBQTJDLEVBQUUsb0JBQTZCO1FBQ2hHLElBQUksa0JBQWtCLEVBQUU7WUFDcEIsT0FBTyxvQkFBb0I7Z0JBQ3ZCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsWUFBWTtnQkFDakUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7U0FDdkQ7YUFBTTtZQUNILE9BQU8sQ0FBQyxDQUFDO1NBQ1o7SUFDTCxDQUFDO0lBRU0saUJBQWlCLENBQUMsa0JBQTJDLEVBQUUsb0JBQTZCO1FBQy9GLElBQUksa0JBQWtCLEVBQUU7WUFDcEIsT0FBTyxvQkFBb0I7Z0JBQ3ZCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsV0FBVztnQkFDaEUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7U0FDdEQ7YUFBTTtZQUNILE9BQU8sQ0FBQyxDQUFDO1NBQ1o7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxrQkFBa0IsQ0FDckIsa0JBQTJDLEVBQzNDLHFCQUE4QyxFQUM5QyxVQUFrQixFQUNsQixXQUFtQixFQUNuQixnQkFBd0IsRUFDeEIsb0JBQTZCO1FBRTdCLE1BQU0sY0FBYyxHQUFvQixJQUFJLENBQUMsaUJBQWlCLENBQzFELGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsVUFBVSxFQUNWLFdBQVcsRUFDWCxvQkFBb0IsQ0FDdkIsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFO1lBQ3JHLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQztTQUNoQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFO1lBQ2pHLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQztTQUM5QjtRQUVELHNDQUFzQztRQUN0QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFO1lBQ25HLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQztTQUMvQjtRQUVELHNDQUFzQztRQUN0QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQ3ZHLE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQztTQUNqQztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksY0FBYyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDdkcsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDO1NBQ2pDO1FBRUQsSUFDSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxTQUFTLENBQUM7WUFDN0QsY0FBYyxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQzVDO1lBQ0UsT0FBTyxlQUFlLENBQUMsU0FBUyxDQUFDO1NBQ3BDO1FBRUQsK0JBQStCO1FBQy9CLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3ZDLHNDQUFzQztZQUN0QyxJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFO2dCQUN4QyxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUM7YUFDaEM7WUFFRCxzQ0FBc0M7WUFDdEMsSUFBSSxjQUFjLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRTtnQkFDdEMsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDO2FBQzlCO1lBRUQsc0NBQXNDO1lBQ3RDLElBQUksY0FBYyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZDLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQzthQUMvQjtZQUVELHNDQUFzQztZQUN0QyxJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFO2dCQUN6QyxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUM7YUFDakM7WUFFRCxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUM7U0FDaEM7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzdDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxjQUFjLENBQUMsU0FBa0M7O1FBQ3BELElBQUksU0FBUyxFQUFFO1lBQ1gsYUFBTyxTQUFTLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFlBQVksbUNBQUksQ0FBQyxDQUFDO1NBQ3RFO2FBQU07WUFDSCxPQUFPLENBQUMsQ0FBQztTQUNaO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxhQUFhLENBQUMsU0FBa0M7UUFDbkQsSUFBSSxTQUFTLEVBQUU7WUFDWCxPQUFPLFNBQVMsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDO1NBQ2hFO2FBQU07WUFDSCxPQUFPLENBQUMsQ0FBQztTQUNaO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsZ0JBQXdCO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDO1NBQy9CO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6RCxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUM7U0FDOUI7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNELE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQztTQUNoQztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDNUQsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM1RCxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUM7U0FDakM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQy9ELE9BQU8sZUFBZSxDQUFDLFNBQVMsQ0FBQztTQUNwQztRQUVELDRCQUE0QjtRQUM1QixPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksZUFBZSxDQUNsQixrQkFBMkMsRUFDM0MsY0FBdUMsRUFDdkMsZ0JBQTRCLEVBQzVCLFVBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLGlCQUF5QixFQUN6QixvQkFBNkI7UUFFN0IsSUFBSSxrQkFBa0IsS0FBSyxJQUFJLElBQUksa0JBQWtCLEtBQUssU0FBUyxFQUFFO1lBQ2pFLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLGFBQWEsQ0FBQztZQUU5QyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxpQkFBaUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN4RixNQUFNLGVBQWUsR0FBWSxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFFbkUsUUFDSSxJQUFJLENBQUMsa0JBQWtCLENBQ25CLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsVUFBVSxFQUNWLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsb0JBQW9CLENBQ3ZCLEVBQ0g7b0JBQ0UsS0FBSyxlQUFlLENBQUMsR0FBRyxDQUFDO29CQUN6QixLQUFLLGVBQWUsQ0FBQyxNQUFNO3dCQUN2QixPQUFPLENBQ0gsZUFBZSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FDNUYsQ0FBQztvQkFDTixLQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUM7b0JBQzVCLEtBQUssZUFBZSxDQUFDLFNBQVM7d0JBQzFCLE9BQU8sZUFBZSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQzdGLEtBQUssZUFBZSxDQUFDLEtBQUs7d0JBQ3RCLE9BQU8sZUFBZSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7b0JBQ3pFLEtBQUssZUFBZSxDQUFDLElBQUk7d0JBQ3JCLE9BQU8sZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNoRztnQkFFRCxPQUFPLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7YUFDckQ7aUJBQU07Z0JBQ0gsT0FBTyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO2FBQ3JEO1NBQ0o7YUFBTTtZQUNILE9BQU8sZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztTQUNwRDtJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLGNBQWMsQ0FDakIsa0JBQTJDLEVBQzNDLGNBQXVDLEVBQ3ZDLGdCQUE0QixFQUM1QixVQUFrQixFQUNsQixXQUFtQixFQUNuQixpQkFBeUIsRUFDekIsb0JBQTZCO1FBRTdCLElBQUksa0JBQWtCLEtBQUssSUFBSSxJQUFJLGtCQUFrQixLQUFLLFNBQVMsRUFBRTtZQUNqRSxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7WUFDOUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsaUJBQWlDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDeEYsTUFBTSxlQUFlLEdBQVksU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBRW5FLDBFQUEwRTtnQkFDMUUsTUFBTSxrQkFBa0IsR0FDcEIsU0FBUyxDQUFDLFNBQVM7b0JBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsWUFBMkIsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFckQsUUFDSSxJQUFJLENBQUMsa0JBQWtCLENBQ25CLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsVUFBVSxFQUNWLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsb0JBQW9CLENBQ3ZCLEVBQ0g7b0JBQ0UsS0FBSyxlQUFlLENBQUMsR0FBRyxDQUFDO29CQUN6QixLQUFLLGVBQWUsQ0FBQyxNQUFNO3dCQUN2QixPQUFPLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzdGLEtBQUssZUFBZSxDQUFDLEtBQUssQ0FBQztvQkFDM0IsS0FBSyxlQUFlLENBQUMsSUFBSTt3QkFDckIsT0FBTyxDQUNILGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUM1RixDQUFDO29CQUNOLEtBQUssZUFBZSxDQUFDLE1BQU0sQ0FBQztvQkFDNUIsS0FBSyxlQUFlLENBQUMsU0FBUzt3QkFDMUIsT0FBTyxrQkFBa0IsR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7aUJBQzVFO2dCQUVELE9BQU8sQ0FDSCxTQUFTLENBQUMsU0FBUztvQkFDbkIsU0FBUyxDQUFDLFNBQVM7b0JBQ25CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FDekUsQ0FBQzthQUNMO2lCQUFNO2dCQUNILE9BQU8sa0JBQWtCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQzthQUNyRDtTQUNKO2FBQU07WUFDSCxPQUFPLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7U0FDbkQ7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxXQUFXLENBQUMsZ0JBQXdCLEVBQUUsaUJBQWtDO1FBQzNFLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU5QyxJQUFJLGlCQUFpQixLQUFLLGVBQWUsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEYsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksaUJBQWlCLEtBQUssZUFBZSxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM1RSxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxpQkFBaUIsS0FBSyxlQUFlLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzlFLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLGlCQUFpQixLQUFLLGVBQWUsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEYsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksaUJBQWlCLEtBQUssZUFBZSxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsRixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsSUFBSSxpQkFBaUIsS0FBSyxlQUFlLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hGLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYyxDQUFDLGdCQUF3QjtRQUMxQyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FDcEIsa0JBQTJDLEVBQzNDLHFCQUE4QyxFQUM5QyxVQUFrQixFQUNsQixXQUFtQixFQUNuQixvQkFBNkI7UUFFN0IsOEJBQThCO1FBQzlCLElBQUkscUJBQXFCLEtBQUssU0FBUyxFQUFFO1lBQ3JDLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQztTQUNoQztRQUVELElBQUksZ0JBQWdCLEdBQW9CLGVBQWUsQ0FBQyxJQUFJLENBQUM7UUFDN0QsTUFBTSxZQUFZLEdBQVksb0JBQW9CO1lBQzlDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLEVBQUU7WUFDNUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9ELE1BQU0sV0FBVyxHQUFZLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRTNHLE1BQU0sU0FBUyxHQUFZLFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RixNQUFNLFVBQVUsR0FBWSxZQUFZLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDcEcsTUFBTSxRQUFRLEdBQVksWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sV0FBVyxHQUFZLFlBQVksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUV6RyxNQUFNLGFBQWEsR0FBWSxZQUFZLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3RSxNQUFNLGNBQWMsR0FBWSxZQUFZLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDL0YsTUFBTSxZQUFZLEdBQVksWUFBWSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUUsTUFBTSxlQUFlLEdBQVksWUFBWSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBRW5HLElBQUksUUFBUSxFQUFFO1lBQ1Ysc0NBQXNDO1lBQ3RDLGdCQUFnQixHQUFHLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7U0FDaEU7UUFFRCxJQUFJLFdBQVcsRUFBRTtZQUNiLHNDQUFzQztZQUN0QyxnQkFBZ0IsR0FBRyxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO1NBQ25FO1FBRUQsSUFBSSxTQUFTLElBQUksWUFBWSxJQUFJLGVBQWUsRUFBRTtZQUM5QyxzQ0FBc0M7WUFDdEMsZ0JBQWdCLEdBQUcsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQztTQUM5RDtRQUVELElBQUksVUFBVSxJQUFJLFlBQVksSUFBSSxlQUFlLEVBQUU7WUFDL0Msc0NBQXNDO1lBQ3RDLGdCQUFnQixHQUFHLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7U0FDL0Q7UUFFRCxJQUFJLFFBQVEsSUFBSSxhQUFhLElBQUksY0FBYyxFQUFFO1lBQzdDLHNDQUFzQztZQUN0QyxnQkFBZ0IsR0FBRyxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDO1NBQzdEO1FBRUQsSUFBSSxXQUFXLElBQUksYUFBYSxJQUFJLGNBQWMsRUFBRTtZQUNoRCxzQ0FBc0M7WUFDdEMsZ0JBQWdCLEdBQUcsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztTQUNoRTtRQUVELE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUVELDRCQUE0QjtJQUU1QiwwQkFBMEI7SUFFMUI7Ozs7T0FJRztJQUNLLGtCQUFrQixDQUFDLE9BQW9CO1FBQzNDLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtZQUNsQixPQUFPLENBQUMsQ0FBQztTQUNaO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDdkIsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDO1NBQzVCO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxZQUEyQixDQUFDLENBQUM7UUFDakYsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNqQyxPQUFPLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssa0JBQWtCLENBQUMsT0FBb0IsRUFBRSxPQUFPLEdBQUcsS0FBSztRQUM1RCxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFDbEIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUVELHVDQUF1QztRQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUN4QixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFDO1FBRUQsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxLQUFLLE9BQU8sRUFBRTtZQUMzRSxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxJQUFJLGNBQWMsQ0FBQyxDQUFDO1FBRTlGLElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztTQUMxQzthQUFNO1lBQ0gsT0FBTyxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztJQUNMLENBQUM7Q0FHSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgUG9wVXBIZWxwZXIge1xuICAgIC8vICNyZWdpb24gUHVibGljIE1ldGhvZHNcblxuICAgIHB1YmxpYyBnZXRDb250YWluZXJIZWlnaHQocmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcmVmZXJlbmNlSXNDb250YWluZXI6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICBpZiAocmVmZXJlbmNlQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlSXNDb250YWluZXJcbiAgICAgICAgICAgICAgICA/IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICAgIDogcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udGFpbmVyV2lkdGgocmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcmVmZXJlbmNlSXNDb250YWluZXI6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICBpZiAocmVmZXJlbmNlQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlSXNDb250YWluZXJcbiAgICAgICAgICAgICAgICA/IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudFdpZHRoXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IFBvc2l0aW9uIHdobyB0aGUgcG9wdXAgd291bGQgYmUgcG9zaXRpb25lZFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnQgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSB0byBwb3NpdGlvbmluZyB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcG9wdXBjb250ZW50Y29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGNvbnRhaW5lciBvZiBwb3B1cFxuICAgICAqIEBwYXJhbSBwb3B1cE9mZnNldCBPZmZzZXQgZm9yIHBvcHVwIHBvc2l0aW9uaW5nXG4gICAgICogQHBhcmFtIGFsbG93ZWRQb3NpdGlvbnMgQWxsb3dlZCBQb3NpdGlvbnMgZm9yIHRoZSBwb3B1cFxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBwb3B1cCBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAgICovXG4gICAgcHVibGljIGdldERpc3BsYXlQb3NpdGlvbihcbiAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcG9wdXBjb250ZW50Y29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgYXJyb3dXaWR0aDogbnVtYmVyLFxuICAgICAgICBhcnJvd0hlaWdodDogbnVtYmVyLFxuICAgICAgICBhbGxvd2VkUG9zaXRpb25zOiBzdHJpbmcsXG4gICAgICAgIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuXG4gICAgKTogVG9vbHRpcFBvc2l0aW9uIHtcbiAgICAgICAgY29uc3QgdmFsaWRQb3NpdGlvbnM6IFRvb2x0aXBQb3NpdGlvbiA9IHRoaXMudmFsaWRhdGVQb3NpdGlvbnMoXG4gICAgICAgICAgICByZWZlcmVuY2VDb250YWluZXIsXG4gICAgICAgICAgICBwb3B1cGNvbnRlbnRjb250YWluZXIsXG4gICAgICAgICAgICBhcnJvd1dpZHRoLFxuICAgICAgICAgICAgYXJyb3dIZWlnaHQsXG4gICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5yaWdodCkgJiYgdmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24ucmlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wKSAmJiB2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3ApIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24udG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucywgVG9vbHRpcFBvc2l0aW9uLmxlZnQpICYmIHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmxlZnQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ubGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5ib3R0b20pICYmIHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wZW5kKSAmJiB2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3BlbmQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24udG9wZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kKSAmJlxuICAgICAgICAgICAgdmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgQXV0byBQb3NpdGlvbiBvciBEZWZhdWx0XG4gICAgICAgIGlmICh0aGlzLmlzQXV0b1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMpKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICAgICAgaWYgKHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLnJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5yaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi5sZWZ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5sZWZ0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICAgICAgaWYgKHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24uYm90dG9tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBoZWlnaHQgb2YgdGhlIHBvcHVwXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGNvbnRhaW5lciBvZiBwb3B1cFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3B1cEhlaWdodChjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudEhlaWdodCA/PyAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSB3aWR0aCBvZiB0aGUgcG9wdXBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXG4gICAgICovXG4gICAgcHVibGljIGdldFBvcHVwV2lkdGgoY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik6IG51bWJlciB7XG4gICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGllbnRXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGVmaW5lZCBwb3NpdGlvbiBmb3IgdGhlIHRvb2x0aXBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBhbGxvd2VkUG9zaXRpb25zIEFsbG93ZWQgcG9zaXRpb25zIGRlZmluZWQgaW4gbWFya3VwIGZvciBwb3B1cFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zOiBzdHJpbmcpOiBUb29sdGlwUG9zaXRpb24ge1xuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24ubGVmdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ubGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi50b3ApKSB7XG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5yaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wZW5kKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi50b3BlbmQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IFBvc2l0aW9uIGlmIGVtcHR5XG4gICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAgZnJvbSBsaW5rc1xuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRyb2xSZWZlcmVuY2UgRWxlbWVudCBSZWZlcmVuY2UgdG8gYW5ndWxhciBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gcG9wdXBDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnQgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSB0byBwb3NpdGlvbmluZyB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcG9wdXBPZmZzZXQgT2Zmc2V0IGZvciBwb3B1cCBwb3NpdGlvbmluZ1xuICAgICAqIEBwYXJhbSByZXF1ZXN0ZWRQb3NpdGlvbiBSZXF1ZXN0ZWQgUG9zaXRpb24gYnkgQ29udHJvbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3NpdGlvbkxlZnQoXG4gICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHBvcHVwQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgY29udHJvbFJlZmVyZW5jZTogRWxlbWVudFJlZixcbiAgICAgICAgYXJyb3dXaWR0aDogbnVtYmVyLFxuICAgICAgICBhcnJvd0hlaWdodDogbnVtYmVyLFxuICAgICAgICByZXF1ZXN0ZWRQb3NpdGlvbjogc3RyaW5nLFxuICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lcjogYm9vbGVhblxuICAgICk6IG51bWJlciB7XG4gICAgICAgIGlmIChyZWZlcmVuY2VDb250YWluZXIgIT09IG51bGwgJiYgcmVmZXJlbmNlQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEl0ZW0gPSByZWZlcmVuY2VJc0NvbnRhaW5lciA/IChpdGVtLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KSA6IGl0ZW07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFBvc2l0aW9uOiBET01SZWN0ID0gY2hpbGRJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREaXNwbGF5UG9zaXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1cENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycm93V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJvd0hlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZFBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSXNDb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi50b3A6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFBvc2l0aW9uLmxlZnQgKyBjb250ZW50UG9zaXRpb24ud2lkdGggLyAyIC0gdGhpcy5nZXRQb3B1cFdpZHRoKHBvcHVwQ29udGFpbmVyKSAvIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcGVuZDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvbi5sZWZ0ICsgY29udGVudFBvc2l0aW9uLndpZHRoIC0gdGhpcy5nZXRQb3B1cFdpZHRoKHBvcHVwQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24ucmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudFBvc2l0aW9uLmxlZnQgKyBjb250ZW50UG9zaXRpb24ud2lkdGggKyBhcnJvd1dpZHRoIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24ubGVmdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb24ubGVmdCAtIHRoaXMuZ2V0UG9wdXBXaWR0aChwb3B1cENvbnRhaW5lcikgKyAoYXJyb3dXaWR0aCAvIDIpICogLTE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sUmVmZXJlbmNlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwIGZyb20gdGhlIHRvcFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRyb2xSZWZlcmVuY2UgRWxlbWVudCBSZWZlcmVuY2UgdG8gYW5ndWxhciBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gcG9wdXBDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnQgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSB0byBwb3NpdGlvbmluZyB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcG9wdXBPZmZzZXQgT2Zmc2V0IGZvciBwb3B1cCBwb3NpdGlvbmluZ1xuICAgICAqIEBwYXJhbSByZXF1ZXN0ZWRQb3NpdGlvbiBSZXF1ZXN0ZWQgUG9zaXRpb24gYnkgQ29udHJvbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3NpdGlvblRvcChcbiAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcG9wdXBDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBjb250cm9sUmVmZXJlbmNlOiBFbGVtZW50UmVmLFxuICAgICAgICBhcnJvd1dpZHRoOiBudW1iZXIsXG4gICAgICAgIGFycm93SGVpZ2h0OiBudW1iZXIsXG4gICAgICAgIHJlcXVlc3RlZFBvc2l0aW9uOiBzdHJpbmcsXG4gICAgICAgIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuXG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlZmVyZW5jZUNvbnRhaW5lciAhPT0gbnVsbCAmJiByZWZlcmVuY2VDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEl0ZW0gPSByZWZlcmVuY2VJc0NvbnRhaW5lciA/IChpdGVtLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KSA6IGl0ZW07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFBvc2l0aW9uOiBET01SZWN0ID0gY2hpbGRJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gR2V0IFBvc2l0aW9uIHdpdGggU2Nyb2xsIChTY3JvbGxiYXJzIGluc2lkZSBwYWdlIHNob3VsZCBiZSBzdWJzdHJhY3RlZClcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50UG9zaXRpb25Ub3AgPVxuICAgICAgICAgICAgICAgICAgICBjaGlsZEl0ZW0ub2Zmc2V0VG9wICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPZmZzZXRUb3BQYXJlbnQoY2hpbGRJdGVtLm9mZnNldFBhcmVudCBhcyBIVE1MRWxlbWVudCkgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNjcm9sbFRvcFBhcmVudChjaGlsZEl0ZW0ucGFyZW50RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERpc3BsYXlQb3NpdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycm93SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24udG9wZW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvblRvcCAtIHRoaXMuZ2V0UG9wdXBIZWlnaHQocG9wdXBDb250YWluZXIpICsgKGFycm93SGVpZ2h0IC8gMikgKiAtMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24ucmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmxlZnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRQb3NpdGlvblRvcCArIGNvbnRlbnRQb3NpdGlvbi5oZWlnaHQgLyAyIC0gdGhpcy5nZXRQb3B1cEhlaWdodChwb3B1cENvbnRhaW5lcikgLyAyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5ib3R0b206XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb25Ub3AgKyBjb250ZW50UG9zaXRpb24uaGVpZ2h0ICsgYXJyb3dIZWlnaHQgLyAyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkSXRlbS5jbGllbnRUb3AgK1xuICAgICAgICAgICAgICAgICAgICBjaGlsZEl0ZW0ub2Zmc2V0VG9wIC1cbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZ2V0UG9wdXBIZWlnaHQocG9wdXBDb250YWluZXIpIC8gMiAtIGNoaWxkSXRlbS5vZmZzZXRIZWlnaHQgLyAyKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcG9zaXRpb24gaGFzIGJlZW4gY29uZmlndXJlZFxuICAgICAqXG4gICAgICogQHBhcmFtIGFsbG93ZWRQb3NpdGlvbnMgUG9zaXRpb25zIHRoYXQgYWxsb3dlZCBieSBjb250cm9sXG4gICAgICogQHBhcmFtIHJlcXVlc3RlZFBvc2l0aW9uIFBvc2l0aW9uIHRvIGJlIGNoZWNrZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzUG9zaXRpb24oYWxsb3dlZFBvc2l0aW9uczogc3RyaW5nLCByZXF1ZXN0ZWRQb3NpdGlvbjogVG9vbHRpcFBvc2l0aW9uKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMuc3BsaXQoJ3wnKTtcblxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5yaWdodCAmJiBwb3NpdGlvbnMuaW5kZXhPZigncmlnaHQnKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRQb3NpdGlvbiA9PT0gVG9vbHRpcFBvc2l0aW9uLnRvcCAmJiBwb3NpdGlvbnMuaW5kZXhPZigndG9wJykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5sZWZ0ICYmIHBvc2l0aW9ucy5pbmRleE9mKCdsZWZ0JykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5ib3R0b20gJiYgcG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbScpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24udG9wZW5kICYmIHBvc2l0aW9ucy5pbmRleE9mKCd0b3BlbmQnKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQgJiYgcG9zaXRpb25zLmluZGV4T2YoJ2JvdHRvbWVuZCcpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgd2hldGhlciBBdXRvUG9zaXRpb24gaXMgYWN0aXZlXG4gICAgICogQHBhcmFtIHBvc2l0aW9uUHJvcGVydHkgTGlzdCBvZiBhbGxvd2VkIHBvc2l0aW9uc1xuICAgICAqL1xuICAgIHB1YmxpYyBpc0F1dG9Qb3NpdGlvbihwb3NpdGlvblByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gcG9zaXRpb25Qcm9wZXJ0eS5zcGxpdCgnfCcpO1xuICAgICAgICByZXR1cm4gcG9zaXRpb25zLmluZGV4T2YoJ2F1dG8nKSA+PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBwb3NpdGlvbiBpcyB2YWxpZCBvciB3aGV0aGVyIHRoZSB0b29sdGlwIG9uIHRoZSBwb3NpdGlvbiBoYXMgc3BhY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGVQb3NpdGlvbnMoXG4gICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHBvcHVwY29udGVudGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIGFycm93V2lkdGg6IG51bWJlcixcbiAgICAgICAgYXJyb3dIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgcmVmZXJlbmNlSXNDb250YWluZXI6IGJvb2xlYW5cbiAgICApOiBUb29sdGlwUG9zaXRpb24ge1xuICAgICAgICAvLyBDaGVjayBpZiBDb250YWluZXIgaXMgZmFsc2VcbiAgICAgICAgaWYgKHBvcHVwY29udGVudGNvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFsbG93ZWRQb3NpdGlvbnM6IFRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbi5ub25lO1xuICAgICAgICBjb25zdCBiYXNlUG9zaXRpb246IERPTVJlY3QgPSByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgPyByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgICAgOiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgdG9vbHRpcFJlY3Q6IERPTVJlY3QgPSBwb3B1cGNvbnRlbnRjb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBsZWZ0UG9zT2s6IGJvb2xlYW4gPSBiYXNlUG9zaXRpb24ubGVmdCAtICh0b29sdGlwUmVjdC53aWR0aCArIGFycm93V2lkdGggKiAtMSkgPiAwO1xuICAgICAgICBjb25zdCByaWdodFBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLnJpZ2h0ICsgdG9vbHRpcFJlY3Qud2lkdGggKyBhcnJvd1dpZHRoIDwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIGNvbnN0IHRvcFBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLnRvcCAtICh0b29sdGlwUmVjdC5oZWlnaHQgKyBhcnJvd0hlaWdodCkgPiAwO1xuICAgICAgICBjb25zdCBib3R0b21Qb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5ib3R0b20gKyB0b29sdGlwUmVjdC5oZWlnaHQgKyBhcnJvd0hlaWdodCA8IHdpbmRvdy5pbm5lckhlaWdodDtcblxuICAgICAgICBjb25zdCBsZWZ0SGFsZlBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLmxlZnQgLSB0b29sdGlwUmVjdC53aWR0aCAvIDIgPiAwO1xuICAgICAgICBjb25zdCByaWdodEhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5yaWdodCArIHRvb2x0aXBSZWN0LndpZHRoIC8gMiA8IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICBjb25zdCB0b3BIYWxmUG9zT2s6IGJvb2xlYW4gPSBiYXNlUG9zaXRpb24udG9wIC0gdG9vbHRpcFJlY3QuaGVpZ2h0IC8gMiA+IDA7XG4gICAgICAgIGNvbnN0IGJvdHRvbUhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5ib3R0b20gKyB0b29sdGlwUmVjdC5oZWlnaHQgLyAyIDwgd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgICAgIGlmICh0b3BQb3NPaykge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLnRvcGVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3R0b21Qb3NPaykge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsZWZ0UG9zT2sgJiYgdG9wSGFsZlBvc09rICYmIGJvdHRvbUhhbGZQb3NPaykge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLmxlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmlnaHRQb3NPayAmJiB0b3BIYWxmUG9zT2sgJiYgYm90dG9tSGFsZlBvc09rKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICAgICAgYWxsb3dlZFBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMgfCBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9wUG9zT2sgJiYgbGVmdEhhbGZQb3NPayAmJiByaWdodEhhbGZQb3NPaykge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3R0b21Qb3NPayAmJiBsZWZ0SGFsZlBvc09rICYmIHJpZ2h0SGFsZlBvc09rKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICAgICAgYWxsb3dlZFBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMgfCBUb29sdGlwUG9zaXRpb24uYm90dG9tO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsbG93ZWRQb3NpdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHRvcCBvZiB0aGUgcGFnZSBpbnNpZGUgYWxsIGVsZW1lbnRzXG4gICAgICogQHBhcmFtIGVsZW1lbnQgSFRNTCBFbGVtZW50XG4gICAgICogQHJldHVybnMgc3VtbWFyaXplZCB0b3AgdmFsdWUgZm9yIGFic29sdXRlIHBvc2l0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRPZmZzZXRUb3BQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWVsZW1lbnQub2Zmc2V0UGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IHRoaXMuZ2V0T2Zmc2V0VG9wUGFyZW50KGVsZW1lbnQub2Zmc2V0UGFyZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIHJldHVybiBwYXJlbnRWYWx1ZSArIG9mZnNldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWNsdWxhdGUgU2Nyb2xsYmFycyBpbnNpZGUgdHJlZVxuICAgICAqIEBwYXJhbSBlbGVtZW50IEhUTUwgRWxlbWVudFxuICAgICAqIEBwYXJhbSBbaXNGaXhlZD1mYWxzZV0gSW52ZXJ0IFNjcm9sbCBQb3NpdGlvbiB2YWx1ZSB3aGVuIHN0eWxlIGlzIGZpeGVkIHRvIHByZXNlcnZlIG5lZ2F0aXZlIHZhbHVlc1xuICAgICAqIEByZXR1cm5zIFNjcm9sbCB0b3AgdmFsdWUgb2YgZWxlbWVudCB3aXRoIGFsbCBjaGlsZHNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFNjcm9sbFRvcFBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgaXNGaXhlZCA9IGZhbHNlKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQm9keSBTY3JvbGwgc2hvdWxkIG5vdCBiZSBjYWxjdWxhdGVkXG4gICAgICAgIGlmICghZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gaXNGaXhlZCA/IGVsZW1lbnQuc2Nyb2xsVG9wIDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpc0N1cnJlbnRGaXhlZCA9IGZhbHNlO1xuICAgICAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJykge1xuICAgICAgICAgICAgaXNDdXJyZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50VmFsdWUgPSB0aGlzLmdldFNjcm9sbFRvcFBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQsIGlzRml4ZWQgfHwgaXNDdXJyZW50Rml4ZWQpO1xuXG4gICAgICAgIGlmIChpc0ZpeGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsdWUgKyBlbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRWYWx1ZSArIGVsZW1lbnQuc2Nyb2xsVG9wICogLTE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xufVxuIl19
380
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXBoZWxwZXIuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NpbXBsZWFuZ3VsYXJjb250cm9scy9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJ1dGlsaXRpZXMvcG9wdXBoZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUcxQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBQ3BCLHlCQUF5QjtJQUV6Qjs7Ozs7T0FLRztJQUNJLGtCQUFrQixDQUFDLGtCQUEyQyxFQUFFLG9CQUE2QjtRQUNoRyxJQUFJLGtCQUFrQixFQUFFO1lBQ3BCLE9BQU8sb0JBQW9CO2dCQUN2QixDQUFDLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFlBQVk7Z0JBQ2pFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1NBQ3ZEO2FBQU07WUFDSCxPQUFPLENBQUMsQ0FBQztTQUNaO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksaUJBQWlCLENBQUMsa0JBQTJDLEVBQUUsb0JBQTZCO1FBQy9GLElBQUksa0JBQWtCLEVBQUU7WUFDcEIsT0FBTyxvQkFBb0I7Z0JBQ3ZCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsV0FBVztnQkFDaEUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7U0FDdEQ7YUFBTTtZQUNILE9BQU8sQ0FBQyxDQUFDO1NBQ1o7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLGtCQUFrQixDQUNyQixrQkFBMkMsRUFDM0MscUJBQThDLEVBQzlDLFVBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLGdCQUF3QixFQUN4Qixv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bmltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBVdGlsaXR5IGZvciBwb3NpdGlvbmluZyBwb3B1cCBlbGVtZW50cyByZWxhdGl2ZSB0byBhbmNob3IgZWxlbWVudHMuXG4gKlxuICogUHJvdmlkZXMgZnVuY3Rpb25zIGZvciBtZWFzdXJpbmcgY29udGFpbmVyIGRpbWVuc2lvbnMsIHZhbGlkYXRpbmcgYXZhaWxhYmxlIHBvc2l0aW9ucyxcbiAqIGFuZCBjb21wdXRpbmcgdHJhbnNsYXRlZCBwb3NpdGlvbnMgZm9yIHRvb2x0aXAvcG9wdXBzIGluIHZhcmlvdXMgcGxhY2VtZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBvcFVwSGVscGVyIHtcbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGhlaWdodCBvZiB0aGUgcmVmZXJlbmNlIGNvbnRhaW5lciBlbGVtZW50XG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnRcbiAgICAgKiBAcGFyYW0gcmVmZXJlbmNlSXNDb250YWluZXIgQm9vbGVhbiBpbmRpY2F0aW5nIGlmIHJlZmVyZW5jZSBpcyB0aGUgY29udGFpbmVyIGl0c2VsZlxuICAgICAqIEByZXR1cm5zIFRoZSBoZWlnaHQgaW4gcGl4ZWxzXG4gICAgICovXG4gICAgcHVibGljIGdldENvbnRhaW5lckhlaWdodChyZWZlcmVuY2VDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCByZWZlcmVuY2VJc0NvbnRhaW5lcjogYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIGlmIChyZWZlcmVuY2VDb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgICAgID8gcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuY2xpZW50SGVpZ2h0XG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBjb250YWluZXIgZWxlbWVudFxuICAgICAqIEBwYXJhbSByZWZlcmVuY2VDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gSFRNTCBFbGVtZW50XG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUlzQ29udGFpbmVyIEJvb2xlYW4gaW5kaWNhdGluZyBpZiByZWZlcmVuY2UgaXMgdGhlIGNvbnRhaW5lciBpdHNlbGZcbiAgICAgKiBAcmV0dXJucyBUaGUgd2lkdGggaW4gcGl4ZWxzXG4gICAgICovXG4gICAgcHVibGljIGdldENvbnRhaW5lcldpZHRoKHJlZmVyZW5jZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlZmVyZW5jZUNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUlzQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgPyByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGllbnRXaWR0aFxuICAgICAgICAgICAgICAgIDogcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBQb3NpdGlvbiB3aGVyZSB0aGUgcG9wdXAgd291bGQgYmUgcG9zaXRpb25lZFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnQgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSB0byBwb3NpdGlvbmluZyB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcG9wdXBjb250ZW50Y29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGNvbnRhaW5lciBvZiBwb3B1cFxuICAgICAqIEBwYXJhbSBhcnJvd1dpZHRoIFdpZHRoIG9mIHRoZSBhcnJvdyBlbGVtZW50XG4gICAgICogQHBhcmFtIGFycm93SGVpZ2h0IEhlaWdodCBvZiB0aGUgYXJyb3cgZWxlbWVudFxuICAgICAqIEBwYXJhbSBhbGxvd2VkUG9zaXRpb25zIEFsbG93ZWQgUG9zaXRpb25zIGZvciB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcmVmZXJlbmNlSXNDb250YWluZXIgQm9vbGVhbiBpbmRpY2F0aW5nIGlmIHJlZmVyZW5jZSBpcyB0aGUgY29udGFpbmVyIGl0c2VsZlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBwb3B1cCBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAgICovXG4gICAgcHVibGljIGdldERpc3BsYXlQb3NpdGlvbihcbiAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcG9wdXBjb250ZW50Y29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgYXJyb3dXaWR0aDogbnVtYmVyLFxuICAgICAgICBhcnJvd0hlaWdodDogbnVtYmVyLFxuICAgICAgICBhbGxvd2VkUG9zaXRpb25zOiBzdHJpbmcsXG4gICAgICAgIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuXG4gICAgKTogVG9vbHRpcFBvc2l0aW9uIHtcbiAgICAgICAgY29uc3QgdmFsaWRQb3NpdGlvbnM6IFRvb2x0aXBQb3NpdGlvbiA9IHRoaXMudmFsaWRhdGVQb3NpdGlvbnMoXG4gICAgICAgICAgICByZWZlcmVuY2VDb250YWluZXIsXG4gICAgICAgICAgICBwb3B1cGNvbnRlbnRjb250YWluZXIsXG4gICAgICAgICAgICBhcnJvd1dpZHRoLFxuICAgICAgICAgICAgYXJyb3dIZWlnaHQsXG4gICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5yaWdodCkgJiYgdmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24ucmlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wKSAmJiB2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3ApIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24udG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucywgVG9vbHRpcFBvc2l0aW9uLmxlZnQpICYmIHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmxlZnQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ubGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5ib3R0b20pICYmIHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wZW5kKSAmJiB2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3BlbmQpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24udG9wZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kKSAmJlxuICAgICAgICAgICAgdmFsaWRQb3NpdGlvbnMgJiBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgQXV0byBQb3NpdGlvbiBvciBEZWZhdWx0XG4gICAgICAgIGlmICh0aGlzLmlzQXV0b1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICAgICAgaWYgKHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLnJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5yaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi50b3ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgIGlmICh2YWxpZFBvc2l0aW9ucyAmIFRvb2x0aXBQb3NpdGlvbi5sZWZ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5sZWZ0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICAgICAgaWYgKHZhbGlkUG9zaXRpb25zICYgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24uYm90dG9tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oYWxsb3dlZFBvc2l0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBoZWlnaHQgb2YgdGhlIHBvcHVwXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGNvbnRhaW5lciBvZiBwb3B1cFxuICAgICAqIEByZXR1cm5zIFRoZSBoZWlnaHQgb2YgdGhlIHBvcHVwIGluIHBpeGVsc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3B1cEhlaWdodChjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudEhlaWdodCA/PyAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSB3aWR0aCBvZiB0aGUgcG9wdXBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXG4gICAgICogQHJldHVybnMgVGhlIHdpZHRoIG9mIHRoZSBwb3B1cCBpbiBwaXhlbHNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UG9wdXBXaWR0aChjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNsaWVudFdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkZWZpbmVkIHBvc2l0aW9uIGZvciB0aGUgdG9vbHRpcFxuICAgICAqXG4gICAgICogQHBhcmFtIGFsbG93ZWRQb3NpdGlvbnMgQWxsb3dlZCBwb3NpdGlvbnMgZGVmaW5lZCBpbiBtYXJrdXAgZm9yIHBvcHVwXG4gICAgICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgdG9vbHRpcCBwb3NpdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zOiBzdHJpbmcpOiBUb29sdGlwUG9zaXRpb24ge1xuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24ubGVmdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ubGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi50b3ApKSB7XG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnMsIFRvb2x0aXBQb3NpdGlvbi5yaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24udG9wZW5kKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi50b3BlbmQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNQb3NpdGlvbihhbGxvd2VkUG9zaXRpb25zLCBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kKSkge1xuICAgICAgICAgICAgcmV0dXJuIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IFBvc2l0aW9uIGlmIGVtcHR5XG4gICAgICAgIHJldHVybiBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgbGVmdCBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcC9wb3B1cFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUNvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBIVE1MIEVsZW1lbnQgd2hpY2ggaXMgdGhlIHJlZmVyZW5jZSB0byBwb3NpdGlvbmluZyB0aGUgcG9wdXBcbiAgICAgKiBAcGFyYW0gcG9wdXBDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gY29udGFpbmVyIG9mIHBvcHVwXG4gICAgICogQHBhcmFtIGNvbnRyb2xSZWZlcmVuY2UgRWxlbWVudCBSZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2wgZWxlbWVudFxuICAgICAqIEBwYXJhbSBhcnJvd1dpZHRoIFdpZHRoIG9mIHRoZSBhcnJvdyBlbGVtZW50XG4gICAgICogQHBhcmFtIGFycm93SGVpZ2h0IEhlaWdodCBvZiB0aGUgYXJyb3cgZWxlbWVudFxuICAgICAqIEBwYXJhbSByZXF1ZXN0ZWRQb3NpdGlvbiBSZXF1ZXN0ZWQgUG9zaXRpb24gYnkgQ29udHJvbFxuICAgICAqIEBwYXJhbSByZWZlcmVuY2VJc0NvbnRhaW5lciBCb29sZWFuIGluZGljYXRpbmcgaWYgcmVmZXJlbmNlIGlzIHRoZSBjb250YWluZXIgaXRzZWxmXG4gICAgICogQHJldHVybnMgVGhlIGxlZnQgcG9zaXRpb24gaW4gcGl4ZWxzXG4gICAgICovXG4gICAgcHVibGljIGdldFBvc2l0aW9uTGVmdChcbiAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcG9wdXBDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBjb250cm9sUmVmZXJlbmNlOiBFbGVtZW50UmVmLFxuICAgICAgICBhcnJvd1dpZHRoOiBudW1iZXIsXG4gICAgICAgIGFycm93SGVpZ2h0OiBudW1iZXIsXG4gICAgICAgIHJlcXVlc3RlZFBvc2l0aW9uOiBzdHJpbmcsXG4gICAgICAgIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuXG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlZmVyZW5jZUNvbnRhaW5lciAhPT0gbnVsbCAmJiByZWZlcmVuY2VDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbi5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkSXRlbSA9IHJlZmVyZW5jZUlzQ29udGFpbmVyID8gKGl0ZW0uZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQpIDogaXRlbTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50UG9zaXRpb246IERPTVJlY3QgPSBjaGlsZEl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERpc3BsYXlQb3NpdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycm93SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24uYm90dG9tOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50UG9zaXRpb24ubGVmdCArIGNvbnRlbnRQb3NpdGlvbi53aWR0aCAvIDIgLSB0aGlzLmdldFBvcHVwV2lkdGgocG9wdXBDb250YWluZXIpIC8gMlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24udG9wZW5kOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5ib3R0b21lbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudFBvc2l0aW9uLmxlZnQgKyBjb250ZW50UG9zaXRpb24ud2lkdGggLSB0aGlzLmdldFBvcHVwV2lkdGgocG9wdXBDb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5yaWdodDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb24ubGVmdCArIGNvbnRlbnRQb3NpdGlvbi53aWR0aCArIGFycm93V2lkdGggLyAyO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5sZWZ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvbi5sZWZ0IC0gdGhpcy5nZXRQb3B1cFdpZHRoKHBvcHVwQ29udGFpbmVyKSArIChhcnJvd1dpZHRoIC8gMikgKiAtMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xSZWZlcmVuY2UubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwL3BvcHVwXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVmZXJlbmNlQ29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIEhUTUwgRWxlbWVudCB3aGljaCBpcyB0aGUgcmVmZXJlbmNlIHRvIHBvc2l0aW9uaW5nIHRoZSBwb3B1cFxuICAgICAqIEBwYXJhbSBwb3B1cENvbnRhaW5lciBFbGVtZW50IFJlZmVyZW5jZSB0byBjb250YWluZXIgb2YgcG9wdXBcbiAgICAgKiBAcGFyYW0gY29udHJvbFJlZmVyZW5jZSBFbGVtZW50IFJlZmVyZW5jZSB0byB0aGUgY29udHJvbCBlbGVtZW50XG4gICAgICogQHBhcmFtIGFycm93V2lkdGggV2lkdGggb2YgdGhlIGFycm93IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gYXJyb3dIZWlnaHQgSGVpZ2h0IG9mIHRoZSBhcnJvdyBlbGVtZW50XG4gICAgICogQHBhcmFtIHJlcXVlc3RlZFBvc2l0aW9uIFJlcXVlc3RlZCBQb3NpdGlvbiBieSBDb250cm9sXG4gICAgICogQHBhcmFtIHJlZmVyZW5jZUlzQ29udGFpbmVyIEJvb2xlYW4gaW5kaWNhdGluZyBpZiByZWZlcmVuY2UgaXMgdGhlIGNvbnRhaW5lciBpdHNlbGZcbiAgICAgKiBAcmV0dXJucyBUaGUgdG9wIHBvc2l0aW9uIGluIHBpeGVsc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQb3NpdGlvblRvcChcbiAgICAgICAgcmVmZXJlbmNlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcG9wdXBDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBjb250cm9sUmVmZXJlbmNlOiBFbGVtZW50UmVmLFxuICAgICAgICBhcnJvd1dpZHRoOiBudW1iZXIsXG4gICAgICAgIGFycm93SGVpZ2h0OiBudW1iZXIsXG4gICAgICAgIHJlcXVlc3RlZFBvc2l0aW9uOiBzdHJpbmcsXG4gICAgICAgIHJlZmVyZW5jZUlzQ29udGFpbmVyOiBib29sZWFuXG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlZmVyZW5jZUNvbnRhaW5lciAhPT0gbnVsbCAmJiByZWZlcmVuY2VDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlZmVyZW5jZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEl0ZW0gPSByZWZlcmVuY2VJc0NvbnRhaW5lciA/IChpdGVtLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KSA6IGl0ZW07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFBvc2l0aW9uOiBET01SZWN0ID0gY2hpbGRJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gR2V0IFBvc2l0aW9uIHdpdGggU2Nyb2xsIChTY3JvbGxiYXJzIGluc2lkZSBwYWdlIHNob3VsZCBiZSBzdWJzdHJhY3RlZClcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50UG9zaXRpb25Ub3AgPVxuICAgICAgICAgICAgICAgICAgICBjaGlsZEl0ZW0ub2Zmc2V0VG9wICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPZmZzZXRUb3BQYXJlbnQoY2hpbGRJdGVtLm9mZnNldFBhcmVudCBhcyBIVE1MRWxlbWVudCkgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNjcm9sbFRvcFBhcmVudChjaGlsZEl0ZW0ucGFyZW50RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERpc3BsYXlQb3NpdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycm93SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLnRvcDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24udG9wZW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRQb3NpdGlvblRvcCAtIHRoaXMuZ2V0UG9wdXBIZWlnaHQocG9wdXBDb250YWluZXIpICsgKGFycm93SGVpZ2h0IC8gMikgKiAtMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24ucmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmxlZnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRQb3NpdGlvblRvcCArIGNvbnRlbnRQb3NpdGlvbi5oZWlnaHQgLyAyIC0gdGhpcy5nZXRQb3B1cEhlaWdodChwb3B1cENvbnRhaW5lcikgLyAyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5ib3R0b206XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50UG9zaXRpb25Ub3AgKyBjb250ZW50UG9zaXRpb24uaGVpZ2h0ICsgYXJyb3dIZWlnaHQgLyAyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkSXRlbS5jbGllbnRUb3AgK1xuICAgICAgICAgICAgICAgICAgICBjaGlsZEl0ZW0ub2Zmc2V0VG9wIC1cbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZ2V0UG9wdXBIZWlnaHQocG9wdXBDb250YWluZXIpIC8gMiAtIGNoaWxkSXRlbS5vZmZzZXRIZWlnaHQgLyAyKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcG9zaXRpb24gaGFzIGJlZW4gY29uZmlndXJlZFxuICAgICAqXG4gICAgICogQHBhcmFtIGFsbG93ZWRQb3NpdGlvbnMgUG9zaXRpb25zIHRoYXQgYWxsb3dlZCBieSBjb250cm9sXG4gICAgICogQHBhcmFtIHJlcXVlc3RlZFBvc2l0aW9uIFBvc2l0aW9uIHRvIGJlIGNoZWNrZWRcbiAgICAgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiBpcyBjb25maWd1cmVkXG4gICAgICovXG4gICAgcHVibGljIGhhc1Bvc2l0aW9uKGFsbG93ZWRQb3NpdGlvbnM6IHN0cmluZywgcmVxdWVzdGVkUG9zaXRpb246IFRvb2x0aXBQb3NpdGlvbik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zLnNwbGl0KCd8Jyk7XG5cbiAgICAgICAgaWYgKHJlcXVlc3RlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24ucmlnaHQgJiYgcG9zaXRpb25zLmluZGV4T2YoJ3JpZ2h0JykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdGVkUG9zaXRpb24gPT09IFRvb2x0aXBQb3NpdGlvbi50b3AgJiYgcG9zaXRpb25zLmluZGV4T2YoJ3RvcCcpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24ubGVmdCAmJiBwb3NpdGlvbnMuaW5kZXhPZignbGVmdCcpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24uYm90dG9tICYmIHBvc2l0aW9ucy5pbmRleE9mKCdib3R0b20nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRQb3NpdGlvbiA9PT0gVG9vbHRpcFBvc2l0aW9uLnRvcGVuZCAmJiBwb3NpdGlvbnMuaW5kZXhPZigndG9wZW5kJykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3RlZFBvc2l0aW9uID09PSBUb29sdGlwUG9zaXRpb24uYm90dG9tZW5kICYmIHBvc2l0aW9ucy5pbmRleE9mKCdib3R0b21lbmQnKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHdoZXRoZXIgQXV0b1Bvc2l0aW9uIGlzIGFjdGl2ZVxuICAgICAqIEBwYXJhbSBwb3NpdGlvblByb3BlcnR5IExpc3Qgb2YgYWxsb3dlZCBwb3NpdGlvbnNcbiAgICAgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgaWYgYXV0byBwb3NpdGlvbmluZyBpcyBlbmFibGVkXG4gICAgICovXG4gICAgcHVibGljIGlzQXV0b1Bvc2l0aW9uKHBvc2l0aW9uUHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBwb3NpdGlvblByb3BlcnR5LnNwbGl0KCd8Jyk7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbnMuaW5kZXhPZignYXV0bycpID49IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHBvc2l0aW9uIGlzIHZhbGlkIG9yIHdoZXRoZXIgdGhlIHRvb2x0aXAgb24gdGhlIHBvc2l0aW9uIGhhcyBzcGFjZVxuICAgICAqIEBwYXJhbSByZWZlcmVuY2VDb250YWluZXIgRWxlbWVudCBSZWZlcmVuY2UgdG8gSFRNTCBFbGVtZW50IHdoaWNoIGlzIHRoZSByZWZlcmVuY2VcbiAgICAgKiBAcGFyYW0gcG9wdXBjb250ZW50Y29udGFpbmVyIEVsZW1lbnQgUmVmZXJlbmNlIHRvIGNvbnRhaW5lciBvZiBwb3B1cFxuICAgICAqIEBwYXJhbSBhcnJvd1dpZHRoIFdpZHRoIG9mIHRoZSBhcnJvdyBlbGVtZW50XG4gICAgICogQHBhcmFtIGFycm93SGVpZ2h0IEhlaWdodCBvZiB0aGUgYXJyb3cgZWxlbWVudFxuICAgICAqIEBwYXJhbSByZWZlcmVuY2VJc0NvbnRhaW5lciBCb29sZWFuIGluZGljYXRpbmcgaWYgcmVmZXJlbmNlIGlzIHRoZSBjb250YWluZXIgaXRzZWxmXG4gICAgICogQHJldHVybnMgVGhlIHZhbGlkIHRvb2x0aXAgcG9zaXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGVQb3NpdGlvbnMoXG4gICAgICAgIHJlZmVyZW5jZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHBvcHVwY29udGVudGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIGFycm93V2lkdGg6IG51bWJlcixcbiAgICAgICAgYXJyb3dIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgcmVmZXJlbmNlSXNDb250YWluZXI6IGJvb2xlYW5cbiAgICApOiBUb29sdGlwUG9zaXRpb24ge1xuICAgICAgICAvLyBDaGVjayBpZiBDb250YWluZXIgaXMgZmFsc2VcbiAgICAgICAgaWYgKHBvcHVwY29udGVudGNvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gVG9vbHRpcFBvc2l0aW9uLnJpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFsbG93ZWRQb3NpdGlvbnM6IFRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbi5ub25lO1xuICAgICAgICBjb25zdCBiYXNlUG9zaXRpb246IERPTVJlY3QgPSByZWZlcmVuY2VJc0NvbnRhaW5lclxuICAgICAgICAgICAgPyByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgICAgOiByZWZlcmVuY2VDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgdG9vbHRpcFJlY3Q6IERPTVJlY3QgPSBwb3B1cGNvbnRlbnRjb250YWluZXIubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBsZWZ0UG9zT2s6IGJvb2xlYW4gPSBiYXNlUG9zaXRpb24ubGVmdCAtICh0b29sdGlwUmVjdC53aWR0aCArIGFycm93V2lkdGggKiAtMSkgPiAwO1xuICAgICAgICBjb25zdCByaWdodFBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLnJpZ2h0ICsgdG9vbHRpcFJlY3Qud2lkdGggKyBhcnJvd1dpZHRoIDwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIGNvbnN0IHRvcFBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLnRvcCAtICh0b29sdGlwUmVjdC5oZWlnaHQgKyBhcnJvd0hlaWdodCkgPiAwO1xuICAgICAgICBjb25zdCBib3R0b21Qb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5ib3R0b20gKyB0b29sdGlwUmVjdC5oZWlnaHQgKyBhcnJvd0hlaWdodCA8IHdpbmRvdy5pbm5lckhlaWdodDtcblxuICAgICAgICBjb25zdCBsZWZ0SGFsZlBvc09rOiBib29sZWFuID0gYmFzZVBvc2l0aW9uLmxlZnQgLSB0b29sdGlwUmVjdC53aWR0aCAvIDIgPiAwO1xuICAgICAgICBjb25zdCByaWdodEhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5yaWdodCArIHRvb2x0aXBSZWN0LndpZHRoIC8gMiA8IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICBjb25zdCB0b3BIYWxmUG9zT2s6IGJvb2xlYW4gPSBiYXNlUG9zaXRpb24udG9wIC0gdG9vbHRpcFJlY3QuaGVpZ2h0IC8gMiA+IDA7XG4gICAgICAgIGNvbnN0IGJvdHRvbUhhbGZQb3NPazogYm9vbGVhbiA9IGJhc2VQb3NpdGlvbi5ib3R0b20gKyB0b29sdGlwUmVjdC5oZWlnaHQgLyAyIDwgd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgICAgIGlmICh0b3BQb3NPaykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLnRvcGVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3R0b21Qb3NPaykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLmJvdHRvbWVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsZWZ0UG9zT2sgJiYgdG9wSGFsZlBvc09rICYmIGJvdHRvbUhhbGZQb3NPaykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLmxlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmlnaHRQb3NPayAmJiB0b3BIYWxmUG9zT2sgJiYgYm90dG9tSGFsZlBvc09rKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICAgICAgYWxsb3dlZFBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMgfCBUb29sdGlwUG9zaXRpb24ucmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9wUG9zT2sgJiYgbGVmdEhhbGZQb3NPayAmJiByaWdodEhhbGZQb3NPaykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgIGFsbG93ZWRQb3NpdGlvbnMgPSBhbGxvd2VkUG9zaXRpb25zIHwgVG9vbHRpcFBvc2l0aW9uLnRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3R0b21Qb3NPayAmJiBsZWZ0SGFsZlBvc09rICYmIHJpZ2h0SGFsZlBvc09rKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICAgICAgYWxsb3dlZFBvc2l0aW9ucyA9IGFsbG93ZWRQb3NpdGlvbnMgfCBUb29sdGlwUG9zaXRpb24uYm90dG9tO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsbG93ZWRQb3NpdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHRvcCBvZiB0aGUgcGFnZSBpbnNpZGUgYWxsIGVsZW1lbnRzXG4gICAgICogQHBhcmFtIGVsZW1lbnQgSFRNTCBFbGVtZW50XG4gICAgICogQHJldHVybnMgc3VtbWFyaXplZCB0b3AgdmFsdWUgZm9yIGFic29sdXRlIHBvc2l0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRPZmZzZXRUb3BQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWVsZW1lbnQub2Zmc2V0UGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IHRoaXMuZ2V0T2Zmc2V0VG9wUGFyZW50KGVsZW1lbnQub2Zmc2V0UGFyZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIHJldHVybiBwYXJlbnRWYWx1ZSArIG9mZnNldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWNsdWxhdGUgU2Nyb2xsYmFycyBpbnNpZGUgdHJlZVxuICAgICAqIEBwYXJhbSBlbGVtZW50IEhUTUwgRWxlbWVudFxuICAgICAqIEBwYXJhbSBbaXNGaXhlZD1mYWxzZV0gSW52ZXJ0IFNjcm9sbCBQb3NpdGlvbiB2YWx1ZSB3aGVuIHN0eWxlIGlzIGZpeGVkIHRvIHByZXNlcnZlIG5lZ2F0aXZlIHZhbHVlc1xuICAgICAqIEByZXR1cm5zIFNjcm9sbCB0b3AgdmFsdWUgb2YgZWxlbWVudCB3aXRoIGFsbCBjaGlsZHNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFNjcm9sbFRvcFBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgaXNGaXhlZCA9IGZhbHNlKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQm9keSBTY3JvbGwgc2hvdWxkIG5vdCBiZSBjYWxjdWxhdGVkXG4gICAgICAgIGlmICghZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gaXNGaXhlZCA/IGVsZW1lbnQuc2Nyb2xsVG9wIDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpc0N1cnJlbnRGaXhlZCA9IGZhbHNlO1xuICAgICAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJykge1xuICAgICAgICAgICAgaXNDdXJyZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50VmFsdWUgPSB0aGlzLmdldFNjcm9sbFRvcFBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQsIGlzRml4ZWQgfHwgaXNDdXJyZW50Rml4ZWQpO1xuXG4gICAgICAgIGlmIChpc0ZpeGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsdWUgKyBlbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRWYWx1ZSArIGVsZW1lbnQuc2Nyb2xsVG9wICogLTE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xufVxuIl19