iv-npm 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iv-npm",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "公共通用包",
5
5
  "author": "Mr.Cong",
6
6
  "license": "ISC",
@@ -21,7 +21,11 @@ declare function findTree<T extends {
21
21
  /**
22
22
  * 检查对象是否为普通对象(使用“{}”或“new Object”创建)
23
23
  * */
24
- declare function isPlainObject(obj: object): boolean;
24
+ declare function isPlainObject(obj: object): boolean;
25
+ /**
26
+ * 是否是一个对象
27
+ * */
28
+ declare const isObject: (val: unknown) => val is Record<any, any>;
25
29
 
26
30
  declare const assign: {
27
31
  <T extends {}, U>(target: T, source: U): T & U;
@@ -30,4 +34,4 @@ declare const assign: {
30
34
  (target: object, ...sources: any[]): any;
31
35
  };
32
36
 
33
- export { arrToTree, assign, findTree, isPlainObject, tranListToTreeData };
37
+ export { arrToTree, assign, findTree, isObject, isPlainObject, tranListToTreeData };
@@ -58,6 +58,7 @@ function isPlainObject(obj) {
58
58
  Ctor = {}.hasOwnProperty.call(proto, "constructor") && proto.constructor;
59
59
  return typeof Ctor === "function" && {}.hasOwnProperty.toString.call(Ctor) === {}.hasOwnProperty.toString.call(Object);
60
60
  }
61
+ var isObject = (val) => val !== null && typeof val === "object";
61
62
 
62
63
  // utils/obj/cache.ts
63
64
  var assign = Object.assign;
@@ -65,6 +66,7 @@ export {
65
66
  arrToTree,
66
67
  assign,
67
68
  findTree,
69
+ isObject,
68
70
  isPlainObject,
69
71
  tranListToTreeData
70
72
  };
@@ -453,6 +453,16 @@ function _regeneratorRuntime() {
453
453
  }, exports;
454
454
  }
455
455
 
456
+ function _typeof(obj) {
457
+ "@babel/helpers - typeof";
458
+
459
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
460
+ return typeof obj;
461
+ } : function (obj) {
462
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
463
+ }, _typeof(obj);
464
+ }
465
+
456
466
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
457
467
  try {
458
468
  var info = gen[key](arg);
@@ -504,11 +514,31 @@ function _defineProperty(obj, key, value) {
504
514
  return obj;
505
515
  }
506
516
 
507
- /*
508
- * @Author: Mr.Cong Wei
509
- * @Date: 2022-08-10 10:13:38
510
- * @LastEditTime: 2022-08-10 16:13:56
511
- */
517
+ function _loadChildren(obj, list) {
518
+ var arr = list.filter(function (x) {
519
+ return x.parentId == obj.id;
520
+ });
521
+ if (!arr.length) return;
522
+ obj.children = arr;
523
+ obj.children.forEach(function (x) {
524
+ _loadChildren(x, list);
525
+ });
526
+ return obj;
527
+ }
528
+ function tranListToTreeData(list) {
529
+ var results = list.filter(function (x) {
530
+ return x.parentId == null;
531
+ });
532
+ results.forEach(function (x) {
533
+ return _loadChildren(x, list);
534
+ });
535
+ return results;
536
+ }
537
+ var isObject = function isObject(val) {
538
+ return val !== null && _typeof(val) === "object";
539
+ };
540
+ var assign = Object.assign;
541
+
512
542
  var BASE_URL = "https://basis.nacho.cn";
513
543
  var DEFIND_OPTION = {
514
544
  headers: {
@@ -549,6 +579,7 @@ var formatHTTP = function formatHTTP(fetch) {
549
579
  });
550
580
  };
551
581
  var formatUrl = function formatUrl(base, api, params) {
582
+ if (!isObject(params)) return base + api;
552
583
  if (Object.keys(params).length === 0) return base + api;
553
584
  var urlTemparr = [];
554
585
 
@@ -559,28 +590,6 @@ var formatUrl = function formatUrl(base, api, params) {
559
590
  return base + api + "?" + urlTemparr.join("&");
560
591
  };
561
592
 
562
- function _loadChildren(obj, list) {
563
- var arr = list.filter(function (x) {
564
- return x.parentId == obj.id;
565
- });
566
- if (!arr.length) return;
567
- obj.children = arr;
568
- obj.children.forEach(function (x) {
569
- _loadChildren(x, list);
570
- });
571
- return obj;
572
- }
573
- function tranListToTreeData(list) {
574
- var results = list.filter(function (x) {
575
- return x.parentId == null;
576
- });
577
- results.forEach(function (x) {
578
- return _loadChildren(x, list);
579
- });
580
- return results;
581
- }
582
- var assign = Object.assign;
583
-
584
593
  var _hoisted_1$1 = /*#__PURE__*/vue.createElementVNode("div", {
585
594
  "class": "text-[#0000006D] text-[14px]"
586
595
  }, "所属组织", -1
@@ -449,6 +449,16 @@ function _regeneratorRuntime() {
449
449
  }, exports;
450
450
  }
451
451
 
452
+ function _typeof(obj) {
453
+ "@babel/helpers - typeof";
454
+
455
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
456
+ return typeof obj;
457
+ } : function (obj) {
458
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
459
+ }, _typeof(obj);
460
+ }
461
+
452
462
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
453
463
  try {
454
464
  var info = gen[key](arg);
@@ -500,11 +510,31 @@ function _defineProperty(obj, key, value) {
500
510
  return obj;
501
511
  }
502
512
 
503
- /*
504
- * @Author: Mr.Cong Wei
505
- * @Date: 2022-08-10 10:13:38
506
- * @LastEditTime: 2022-08-10 16:13:56
507
- */
513
+ function _loadChildren(obj, list) {
514
+ var arr = list.filter(function (x) {
515
+ return x.parentId == obj.id;
516
+ });
517
+ if (!arr.length) return;
518
+ obj.children = arr;
519
+ obj.children.forEach(function (x) {
520
+ _loadChildren(x, list);
521
+ });
522
+ return obj;
523
+ }
524
+ function tranListToTreeData(list) {
525
+ var results = list.filter(function (x) {
526
+ return x.parentId == null;
527
+ });
528
+ results.forEach(function (x) {
529
+ return _loadChildren(x, list);
530
+ });
531
+ return results;
532
+ }
533
+ var isObject = function isObject(val) {
534
+ return val !== null && _typeof(val) === "object";
535
+ };
536
+ var assign = Object.assign;
537
+
508
538
  var BASE_URL = "https://basis.nacho.cn";
509
539
  var DEFIND_OPTION = {
510
540
  headers: {
@@ -545,6 +575,7 @@ var formatHTTP = function formatHTTP(fetch) {
545
575
  });
546
576
  };
547
577
  var formatUrl = function formatUrl(base, api, params) {
578
+ if (!isObject(params)) return base + api;
548
579
  if (Object.keys(params).length === 0) return base + api;
549
580
  var urlTemparr = [];
550
581
 
@@ -555,28 +586,6 @@ var formatUrl = function formatUrl(base, api, params) {
555
586
  return base + api + "?" + urlTemparr.join("&");
556
587
  };
557
588
 
558
- function _loadChildren(obj, list) {
559
- var arr = list.filter(function (x) {
560
- return x.parentId == obj.id;
561
- });
562
- if (!arr.length) return;
563
- obj.children = arr;
564
- obj.children.forEach(function (x) {
565
- _loadChildren(x, list);
566
- });
567
- return obj;
568
- }
569
- function tranListToTreeData(list) {
570
- var results = list.filter(function (x) {
571
- return x.parentId == null;
572
- });
573
- results.forEach(function (x) {
574
- return _loadChildren(x, list);
575
- });
576
- return results;
577
- }
578
- var assign = Object.assign;
579
-
580
589
  var _hoisted_1$1 = /*#__PURE__*/createElementVNode("div", {
581
590
  "class": "text-[#0000006D] text-[14px]"
582
591
  }, "所属组织", -1
@@ -453,6 +453,16 @@
453
453
  }, exports;
454
454
  }
455
455
 
456
+ function _typeof(obj) {
457
+ "@babel/helpers - typeof";
458
+
459
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
460
+ return typeof obj;
461
+ } : function (obj) {
462
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
463
+ }, _typeof(obj);
464
+ }
465
+
456
466
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
457
467
  try {
458
468
  var info = gen[key](arg);
@@ -504,11 +514,31 @@
504
514
  return obj;
505
515
  }
506
516
 
507
- /*
508
- * @Author: Mr.Cong Wei
509
- * @Date: 2022-08-10 10:13:38
510
- * @LastEditTime: 2022-08-10 16:13:56
511
- */
517
+ function _loadChildren(obj, list) {
518
+ var arr = list.filter(function (x) {
519
+ return x.parentId == obj.id;
520
+ });
521
+ if (!arr.length) return;
522
+ obj.children = arr;
523
+ obj.children.forEach(function (x) {
524
+ _loadChildren(x, list);
525
+ });
526
+ return obj;
527
+ }
528
+ function tranListToTreeData(list) {
529
+ var results = list.filter(function (x) {
530
+ return x.parentId == null;
531
+ });
532
+ results.forEach(function (x) {
533
+ return _loadChildren(x, list);
534
+ });
535
+ return results;
536
+ }
537
+ var isObject = function isObject(val) {
538
+ return val !== null && _typeof(val) === "object";
539
+ };
540
+ var assign = Object.assign;
541
+
512
542
  var BASE_URL = "https://basis.nacho.cn";
513
543
  var DEFIND_OPTION = {
514
544
  headers: {
@@ -549,6 +579,7 @@
549
579
  });
550
580
  };
551
581
  var formatUrl = function formatUrl(base, api, params) {
582
+ if (!isObject(params)) return base + api;
552
583
  if (Object.keys(params).length === 0) return base + api;
553
584
  var urlTemparr = [];
554
585
 
@@ -559,28 +590,6 @@
559
590
  return base + api + "?" + urlTemparr.join("&");
560
591
  };
561
592
 
562
- function _loadChildren(obj, list) {
563
- var arr = list.filter(function (x) {
564
- return x.parentId == obj.id;
565
- });
566
- if (!arr.length) return;
567
- obj.children = arr;
568
- obj.children.forEach(function (x) {
569
- _loadChildren(x, list);
570
- });
571
- return obj;
572
- }
573
- function tranListToTreeData(list) {
574
- var results = list.filter(function (x) {
575
- return x.parentId == null;
576
- });
577
- results.forEach(function (x) {
578
- return _loadChildren(x, list);
579
- });
580
- return results;
581
- }
582
- var assign = Object.assign;
583
-
584
593
  var _hoisted_1$1 = /*#__PURE__*/vue.createElementVNode("div", {
585
594
  "class": "text-[#0000006D] text-[14px]"
586
595
  }, "所属组织", -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../../shared/dist/utils/index.mjs"],"sourcesContent":["// utils/arr/tree.ts\nfunction arrToTree(list, parentMark, childrenMark) {\n let result = [], temp;\n for (let i = 0; i < list.length; i++) {\n if (!list[i][parentMark]) {\n temp = list.filter(\n (item) => item[parentMark] === list[i][childrenMark]\n );\n if (temp.length > 0) {\n list[i].children = temp;\n }\n result.push(list[i]);\n }\n }\n return result;\n}\nfunction _loadChildren(obj, list) {\n const arr = list.filter((x) => x.parentId == obj.id);\n if (!arr.length)\n return;\n obj.children = arr;\n obj.children.forEach((x) => {\n _loadChildren(x, list);\n });\n return obj;\n}\nfunction tranListToTreeData(list) {\n const results = list.filter((x) => x.parentId == null);\n results.forEach((x) => _loadChildren(x, list));\n return results;\n}\nfunction findTree(id, list, idName) {\n let result;\n if (!list.length)\n return;\n const fn = (id2, list2, idName2) => {\n list2.find((_e) => {\n if (_e[idName2] === id2) {\n result = _e;\n } else if (_e.children && _e.children.length !== 0)\n return fn(id2, _e.children, idName2);\n });\n };\n fn(id, list, idName);\n return result;\n}\n\n// utils/obj/judge.ts\nfunction isPlainObject(obj) {\n let proto, Ctor;\n if (!obj || toString.call(obj) !== \"[object Object]\") {\n return false;\n }\n proto = Object.getPrototypeOf(obj);\n if (!proto) {\n return true;\n }\n Ctor = {}.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && {}.hasOwnProperty.toString.call(Ctor) === {}.hasOwnProperty.toString.call(Object);\n}\n\n// utils/obj/cache.ts\nvar assign = Object.assign;\nexport {\n arrToTree,\n assign,\n findTree,\n isPlainObject,\n tranListToTreeData\n};\n"],"names":["_loadChildren","obj","list","arr","filter","x","parentId","id","length","children","forEach","tranListToTreeData","results","assign","Object"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBA,SAASA,aAAT,CAAuBC,GAAvB,EAA4BC,IAA5B,EAAkC;EAChC,EAAA,IAAMC,GAAG,GAAGD,IAAI,CAACE,MAAL,CAAY,UAACC,CAAD,EAAA;EAAA,IAAA,OAAOA,CAAC,CAACC,QAAF,IAAcL,GAAG,CAACM,EAAzB,CAAA;EAAA,GAAZ,CAAZ,CAAA;EACA,EAAA,IAAI,CAACJ,GAAG,CAACK,MAAT,EACE,OAAA;IACFP,GAAG,CAACQ,QAAJ,GAAeN,GAAf,CAAA;EACAF,EAAAA,GAAG,CAACQ,QAAJ,CAAaC,OAAb,CAAqB,UAACL,CAAD,EAAO;EAC1BL,IAAAA,aAAa,CAACK,CAAD,EAAIH,IAAJ,CAAb,CAAA;KADF,CAAA,CAAA;EAGA,EAAA,OAAOD,GAAP,CAAA;EACD,CAAA;EACD,SAASU,kBAAT,CAA4BT,IAA5B,EAAkC;EAChC,EAAA,IAAMU,OAAO,GAAGV,IAAI,CAACE,MAAL,CAAY,UAACC,CAAD,EAAA;EAAA,IAAA,OAAOA,CAAC,CAACC,QAAF,IAAc,IAArB,CAAA;EAAA,GAAZ,CAAhB,CAAA;EACAM,EAAAA,OAAO,CAACF,OAAR,CAAgB,UAACL,CAAD,EAAA;EAAA,IAAA,OAAOL,aAAa,CAACK,CAAD,EAAIH,IAAJ,CAApB,CAAA;KAAhB,CAAA,CAAA;EACA,EAAA,OAAOU,OAAP,CAAA;EACD,CAAA;EAgCD,IAAIC,MAAM,GAAGC,MAAM,CAACD,MAApB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.umd.js","sources":["../../shared/dist/utils/index.mjs"],"sourcesContent":["// utils/arr/tree.ts\nfunction arrToTree(list, parentMark, childrenMark) {\n let result = [], temp;\n for (let i = 0; i < list.length; i++) {\n if (!list[i][parentMark]) {\n temp = list.filter(\n (item) => item[parentMark] === list[i][childrenMark]\n );\n if (temp.length > 0) {\n list[i].children = temp;\n }\n result.push(list[i]);\n }\n }\n return result;\n}\nfunction _loadChildren(obj, list) {\n const arr = list.filter((x) => x.parentId == obj.id);\n if (!arr.length)\n return;\n obj.children = arr;\n obj.children.forEach((x) => {\n _loadChildren(x, list);\n });\n return obj;\n}\nfunction tranListToTreeData(list) {\n const results = list.filter((x) => x.parentId == null);\n results.forEach((x) => _loadChildren(x, list));\n return results;\n}\nfunction findTree(id, list, idName) {\n let result;\n if (!list.length)\n return;\n const fn = (id2, list2, idName2) => {\n list2.find((_e) => {\n if (_e[idName2] === id2) {\n result = _e;\n } else if (_e.children && _e.children.length !== 0)\n return fn(id2, _e.children, idName2);\n });\n };\n fn(id, list, idName);\n return result;\n}\n\n// utils/obj/judge.ts\nfunction isPlainObject(obj) {\n let proto, Ctor;\n if (!obj || toString.call(obj) !== \"[object Object]\") {\n return false;\n }\n proto = Object.getPrototypeOf(obj);\n if (!proto) {\n return true;\n }\n Ctor = {}.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && {}.hasOwnProperty.toString.call(Ctor) === {}.hasOwnProperty.toString.call(Object);\n}\nvar isObject = (val) => val !== null && typeof val === \"object\";\n\n// utils/obj/cache.ts\nvar assign = Object.assign;\nexport {\n arrToTree,\n assign,\n findTree,\n isObject,\n isPlainObject,\n tranListToTreeData\n};\n"],"names":["_loadChildren","obj","list","arr","filter","x","parentId","id","length","children","forEach","tranListToTreeData","results","isObject","val","assign","Object"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBA,SAASA,aAAT,CAAuBC,GAAvB,EAA4BC,IAA5B,EAAkC;EAChC,EAAA,IAAMC,GAAG,GAAGD,IAAI,CAACE,MAAL,CAAY,UAACC,CAAD,EAAA;EAAA,IAAA,OAAOA,CAAC,CAACC,QAAF,IAAcL,GAAG,CAACM,EAAzB,CAAA;EAAA,GAAZ,CAAZ,CAAA;EACA,EAAA,IAAI,CAACJ,GAAG,CAACK,MAAT,EACE,OAAA;IACFP,GAAG,CAACQ,QAAJ,GAAeN,GAAf,CAAA;EACAF,EAAAA,GAAG,CAACQ,QAAJ,CAAaC,OAAb,CAAqB,UAACL,CAAD,EAAO;EAC1BL,IAAAA,aAAa,CAACK,CAAD,EAAIH,IAAJ,CAAb,CAAA;KADF,CAAA,CAAA;EAGA,EAAA,OAAOD,GAAP,CAAA;EACD,CAAA;EACD,SAASU,kBAAT,CAA4BT,IAA5B,EAAkC;EAChC,EAAA,IAAMU,OAAO,GAAGV,IAAI,CAACE,MAAL,CAAY,UAACC,CAAD,EAAA;EAAA,IAAA,OAAOA,CAAC,CAACC,QAAF,IAAc,IAArB,CAAA;EAAA,GAAZ,CAAhB,CAAA;EACAM,EAAAA,OAAO,CAACF,OAAR,CAAgB,UAACL,CAAD,EAAA;EAAA,IAAA,OAAOL,aAAa,CAACK,CAAD,EAAIH,IAAJ,CAApB,CAAA;KAAhB,CAAA,CAAA;EACA,EAAA,OAAOU,OAAP,CAAA;EACD,CAAA;EA8BD,IAAIC,QAAQ,GAAG,SAAXA,QAAW,CAACC,GAAD,EAAA;EAAA,EAAA,OAASA,GAAG,KAAK,IAAR,IAAgB,OAAOA,CAAAA,GAAP,MAAe,QAAxC,CAAA;EAAA,CAAf;EAGA,IAAIC,MAAM,GAAGC,MAAM,CAACD,MAApB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}