@precisa-saude/fhir 0.32.0 → 0.34.0

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 (76) hide show
  1. package/README.md +11 -9
  2. package/dist/biomarkers.cjs +2 -2
  3. package/dist/biomarkers.js +1 -1
  4. package/dist/{chunk-44QMNDOI.cjs → chunk-376KM7IL.cjs} +18 -11
  5. package/dist/chunk-376KM7IL.cjs.map +1 -0
  6. package/dist/{chunk-WDDW2WCY.js → chunk-4FKZG5GZ.js} +116 -25
  7. package/dist/chunk-4FKZG5GZ.js.map +1 -0
  8. package/dist/{chunk-AZTZYOAV.cjs → chunk-5RC7C7HJ.cjs} +199 -57
  9. package/dist/chunk-5RC7C7HJ.cjs.map +1 -0
  10. package/dist/{chunk-N3ZCOLG2.js → chunk-E6MXDQXW.js} +19 -1
  11. package/dist/chunk-E6MXDQXW.js.map +1 -0
  12. package/dist/{chunk-MNUQ57JR.js → chunk-K3VZ3F5Z.js} +21 -21
  13. package/dist/chunk-K3VZ3F5Z.js.map +1 -0
  14. package/dist/{chunk-4Y43MQQK.js → chunk-NJM45WAH.js} +10 -3
  15. package/dist/chunk-NJM45WAH.js.map +1 -0
  16. package/dist/{chunk-OTVCOSCK.cjs → chunk-NKDUVSDK.cjs} +21 -21
  17. package/dist/chunk-NKDUVSDK.cjs.map +1 -0
  18. package/dist/{chunk-3ILBFLVQ.cjs → chunk-OAFAERDY.cjs} +20 -2
  19. package/dist/chunk-OAFAERDY.cjs.map +1 -0
  20. package/dist/{chunk-PLR54334.js → chunk-P4G534AQ.js} +445 -61
  21. package/dist/chunk-P4G534AQ.js.map +1 -0
  22. package/dist/{chunk-3XIMPALK.js → chunk-Q3H5C6UR.js} +198 -56
  23. package/dist/chunk-Q3H5C6UR.js.map +1 -0
  24. package/dist/{chunk-MKH4Q735.cjs → chunk-T75NZM56.cjs} +116 -25
  25. package/dist/chunk-T75NZM56.cjs.map +1 -0
  26. package/dist/{chunk-555WKD6J.cjs → chunk-VKLWTTUO.cjs} +447 -63
  27. package/dist/chunk-VKLWTTUO.cjs.map +1 -0
  28. package/dist/cli.js +1547 -933
  29. package/dist/{converter-D1Q84Oc9.d.ts → converter-DP8VkkO3.d.cts} +9 -1
  30. package/dist/{converter-DZH9x52r.d.cts → converter-UygMzWlL.d.ts} +9 -1
  31. package/dist/converter.cjs +5 -4
  32. package/dist/converter.cjs.map +1 -1
  33. package/dist/converter.d.cts +3 -2
  34. package/dist/converter.d.ts +3 -2
  35. package/dist/converter.js +4 -3
  36. package/dist/{fhir-types-B1KQmlRb.d.ts → fhir-types-Cn5WFbOI.d.cts} +5 -0
  37. package/dist/{fhir-types-B1KQmlRb.d.cts → fhir-types-Cn5WFbOI.d.ts} +5 -0
  38. package/dist/importer.cjs +5 -4
  39. package/dist/importer.cjs.map +1 -1
  40. package/dist/importer.d.cts +3 -1
  41. package/dist/importer.d.ts +3 -1
  42. package/dist/importer.js +4 -3
  43. package/dist/index.cjs +19 -11
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.d.cts +6 -6
  46. package/dist/index.d.ts +6 -6
  47. package/dist/index.js +34 -26
  48. package/dist/index.js.map +1 -1
  49. package/dist/reference-ranges.cjs +8 -3
  50. package/dist/reference-ranges.cjs.map +1 -1
  51. package/dist/reference-ranges.d.cts +83 -1
  52. package/dist/reference-ranges.d.ts +83 -1
  53. package/dist/reference-ranges.js +9 -4
  54. package/dist/units.cjs +7 -2
  55. package/dist/units.cjs.map +1 -1
  56. package/dist/units.d.cts +53 -5
  57. package/dist/units.d.ts +53 -5
  58. package/dist/units.js +6 -1
  59. package/dist/validators.cjs +4 -2
  60. package/dist/validators.cjs.map +1 -1
  61. package/dist/validators.d.cts +1 -1
  62. package/dist/validators.d.ts +1 -1
  63. package/dist/validators.js +3 -1
  64. package/package.json +1 -1
  65. package/dist/chunk-3ILBFLVQ.cjs.map +0 -1
  66. package/dist/chunk-3XIMPALK.js.map +0 -1
  67. package/dist/chunk-44QMNDOI.cjs.map +0 -1
  68. package/dist/chunk-4Y43MQQK.js.map +0 -1
  69. package/dist/chunk-555WKD6J.cjs.map +0 -1
  70. package/dist/chunk-AZTZYOAV.cjs.map +0 -1
  71. package/dist/chunk-MKH4Q735.cjs.map +0 -1
  72. package/dist/chunk-MNUQ57JR.js.map +0 -1
  73. package/dist/chunk-N3ZCOLG2.js.map +0 -1
  74. package/dist/chunk-OTVCOSCK.cjs.map +0 -1
  75. package/dist/chunk-PLR54334.js.map +0 -1
  76. package/dist/chunk-WDDW2WCY.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-MKH4Q735.cjs","../src/biomarkers.ts"],"names":[],"mappings":"AAAA;ACmCO,IAAM,sBAAA,EAA+C;AAAA;AAAA;AAAA;AAAA,EAI1D;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,kBAAA,EAAoB,MAAM,CAAA;AAAA,MAC/B,EAAA,EAAI,CAAC,sBAAA,EAAqB,MAAM;AAAA,IAClC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,iBAAA,EAAmB,KAAA,EAAO,0BAA0B,CAAA;AAAA,MACzD,EAAA,EAAI,CAAC,gBAAA,EAAkB,KAAA,EAAO,gBAAgB;AAAA,IAChD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,qBAAqB,CAAA;AAAA,MACvC,EAAA,EAAI,CAAC,YAAA,EAAc,2BAAwB;AAAA,IAC7C,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,oBAAA,EAAsB,KAAA,EAAO,QAAA,EAAU,sBAAsB,CAAA;AAAA,MAClE,EAAA,EAAI,CAAC,uBAAA,EAAsB,KAAA,EAAO,QAAA,EAAU,uBAAoB;AAAA,IAClE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,iBAAA,EAAmB,KAAA,EAAO,yBAAyB,CAAA;AAAA,MACxD,EAAA,EAAI,CAAC,gBAAA,EAAkB,KAAA,EAAO,gBAAgB;AAAA,IAChD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,YAAA,EAAc,sBAAsB,CAAA;AAAA,MACzC,EAAA,EAAI,CAAC,cAAA,EAAa,6BAAuB;AAAA,IAC3C,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EAAa,CAAC,qBAAqB,CAAA;AAAA,IACnC,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,qBAAA,EAAuB,OAAO,CAAA;AAAA,MACnC,EAAA,EAAI,CAAC,gCAAA,EAA4B,OAAO;AAAA,IAC1C,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,aAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,aAAA,EAAe,sBAAsB,CAAA;AAAA,MAC1C,EAAA,EAAI,CAAC,eAAA,EAAc,gCAA0B;AAAA,IAC/C;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,mBAAmB,CAAA;AAAA,MACzC,EAAA,EAAI,CAAC,qBAAA,EAAuB,6BAA0B;AAAA,IACxD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,iBAAiB,CAAA;AAAA,MACnC,EAAA,EAAI,CAAC,aAAA,EAAe,mBAAmB;AAAA,IACzC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,iBAAA,EAAmB,OAAO,CAAA;AAAA,MAC/B,EAAA,EAAI,CAAC,qBAAA,EAAoB,OAAO;AAAA,IAClC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EAAa,CAAC,2BAAA,EAA6B,2BAA2B,CAAA;AAAA,IACtE,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,qBAAA,EAAuB,qBAAA,EAAuB,oBAAA,EAAsB,WAAW,CAAA;AAAA,MACpF,EAAA,EAAI,CAAC,uBAAA,EAAsB,mBAAA,EAAqB,uBAAA,EAAsB,oBAAoB;AAAA,IAC5F,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,aAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,mBAAA,EAAqB,aAAa,CAAA;AAAA,MACvC,EAAA,EAAI,CAAC,kBAAA,EAAoB,YAAY;AAAA,IACvC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EAAa,CAAC,eAAe,CAAA;AAAA,IAC7B,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,+BAAA;AAAA,QACA,uBAAA;AAAA,QACA,gBAAA;AAAA,QACA,eAAA;AAAA,QACA,uBAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,iCAAA,EAAgC,yBAAsB;AAAA,IAC7D,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAe,CAAA;AAAA,MACpB,EAAA,EAAI,CAAC,mBAAA,EAAkB,kBAAe;AAAA,IACxC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,WAAA,EAAa,CAAC,kBAAkB,CAAA;AAAA,IAChC,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,kBAAA,EAAoB,MAAM,CAAA;AAAA,MAC/B,EAAA,EAAI,CAAC,iBAAA,EAAmB,MAAM;AAAA,IAChC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,+BAAA;AAAA,QACA,WAAA;AAAA,QACA,eAAA;AAAA,QACA,gBAAA;AAAA,QACA,sBAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,iCAAA;AAAA,QACA,qBAAA;AAAA,QACA,YAAA;AAAA,QACA,iBAAA;AAAA,QACA,2BAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,0BAAA,EAA4B,mBAAA,EAAqB,mBAAmB,CAAA;AAAA,MACzE,EAAA,EAAI,CAAC,wCAAA,EAAoC,eAAA,EAAc,4CAAmC;AAAA,IAC5F,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,kCAAA,EAAoC,mBAAA,EAAqB,aAAa,CAAA;AAAA,MAC3E,EAAA,EAAI;AAAA,QACF,yCAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,yBAAA,EAA2B,mBAAA,EAAqB,aAAA,EAAe,oBAAoB,CAAA;AAAA,MACxF,EAAA,EAAI,CAAC,uBAAA,EAAsB,cAAA,EAAa,kCAA4B;AAAA,IACtE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,+BAAA,EAAiC,mBAAA,EAAqB,aAAa,CAAA;AAAA,MACxE,EAAA,EAAI,CAAC,gCAAA,EAA4B,cAAA,EAAa,2CAAkC;AAAA,IAClF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,gBAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,gBAAA;AAAA,QACA,iBAAA;AAAA,QACA,0BAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,eAAA,EAAiB,gBAAA,EAAkB,kCAA+B;AAAA,IACzE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,4BAAA,EAA8B,sBAAA,EAAwB,WAAW,CAAA;AAAA,MACtE,EAAA,EAAI,CAAC,4BAAA,EAAwB,sCAAA,EAAkC,iCAAwB;AAAA,IACzF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EAEA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,CAAC,mBAAmB,CAAA;AAAA,IACjC,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,oBAAA,EAAsB,OAAA,EAAS,SAAA,EAAW,mBAAmB,CAAA;AAAA,MAClE,EAAA,EAAI,CAAC,wBAAA,EAAuB,OAAA,EAAS,SAAS;AAAA,IAChD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAM,mBAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,0BAAA;AAAA,QACA,WAAA;AAAA,QACA,MAAA;AAAA,QACA,6BAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,gCAAA;AAAA,QACA,SAAA;AAAA,QACA,MAAA;AAAA,QACA,oBAAA;AAAA,QACA,0BAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,+BAAA,EAAiC,gBAAA,EAAkB,UAAU,CAAA;AAAA,MAClE,EAAA,EAAI,CAAC,wCAAA,EAA0C,UAAA,EAAY,KAAK;AAAA,IAClE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,6BAAA,EAA+B,KAAA,EAAO,aAAa,CAAA;AAAA,MACxD,EAAA,EAAI,CAAC,8BAAA,EAA6B,KAAA,EAAO,cAAc;AAAA,IACzD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,gBAAA,EAAkB,SAAA,EAAW,SAAA,EAAW,UAAA,EAAY,SAAS,CAAA;AAAA,MAClE,EAAA,EAAI,CAAC,gBAAA,EAAkB,UAAU;AAAA,IACnC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA;AAAA;AAAA,IAGN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,IAAI,CAAA;AAAA,MAC1B,EAAA,EAAI,CAAC,gBAAA,EAAkB,IAAI;AAAA,IAC7B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,uBAAA,EAAyB,SAAA,EAAW,SAAA,EAAW,UAAA,EAAY,SAAS,CAAA;AAAA,MACzE,EAAA,EAAI,CAAC,uBAAA,EAAyB,UAAU;AAAA,IAC1C,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,CAAC,aAAA,EAAe,oBAAoB,CAAA;AAAA,IACjD,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,UAAA,EAAY,UAAA,EAAY,gBAAA,EAAkB,uBAAuB,CAAA;AAAA,MACnF,EAAA,EAAI,CAAC,UAAA,EAAY,UAAA,EAAY,gBAAA,EAAkB,eAAe;AAAA,IAChE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,eAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,+BAAA,EAAiC,YAAY,CAAA;AAAA,MAClD,EAAA,EAAI,CAAC,qCAAA,EAAuC,aAAa;AAAA,IAC3D;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,eAAA;AAAA,IACV,IAAA,EAAM,kBAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,mBAAA,EAAqB,IAAI,CAAA;AAAA,MAC9B,EAAA,EAAI,CAAC,kBAAA,EAAoB,IAAI;AAAA,IAC/B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,aAAa,CAAA;AAAA,MAC/B,EAAA,EAAI,CAAC,cAAA,EAAa,gBAAa;AAAA,IACjC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,oBAAA,EAAsB,oBAAoB,CAAA;AAAA,MAC/C,EAAA,EAAI,CAAC,wBAAqB;AAAA,IAC5B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,aAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,aAAA,EAAe,eAAe,CAAA;AAAA,MACnC,EAAA,EAAI,CAAC,gBAAA,EAAe,kBAAe;AAAA,IACrC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,sBAAA,EAAwB,sBAAsB,CAAA;AAAA,MACnD,EAAA,EAAI,CAAC,0BAAuB;AAAA,IAC9B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,aAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,aAAA,EAAe,eAAe,CAAA;AAAA,MACnC,EAAA,EAAI,CAAC,eAAA,EAAc,iBAAc;AAAA,IACnC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,sBAAA,EAAwB,sBAAsB,CAAA;AAAA,MACnD,EAAA,EAAI,CAAC,yBAAsB;AAAA,IAC7B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,aAAa,CAAA;AAAA,MAC/B,EAAA,EAAI,CAAC,cAAA,EAAa,gBAAa;AAAA,IACjC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,oBAAA,EAAsB,oBAAoB,CAAA;AAAA,MAC/C,EAAA,EAAI,CAAC,wBAAqB;AAAA,IAC5B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,aAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,aAAA,EAAe,eAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMnC,EAAA,EAAI,CAAC,gBAAA,EAAe,kBAAA,EAAiB,4BAAA,EAA2B,aAAa;AAAA,IAC/E,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,sBAAA,EAAwB,sBAAsB,CAAA;AAAA,MACnD,EAAA,EAAI,CAAC,0BAAuB;AAAA,IAC9B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,wBAAA,EAA0B,KAAA,EAAO,YAAY,CAAA;AAAA,MAClD,EAAA,EAAI,CAAC,2BAAA,EAA0B,eAAA,EAAc,qBAAkB;AAAA,IACjE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,kBAAA,EAAoB,KAAA,EAAO,WAAW,CAAA;AAAA,MAC3C,EAAA,EAAI,CAAC,kBAAA,EAAoB,KAAK;AAAA,IAChC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAa,CAAC,oBAAA,EAAsB,kBAAkB,CAAA;AAAA,IACtD,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,kBAAA,EAAoB,KAAA,EAAO,WAAW,CAAA;AAAA,MAC3C,EAAA,EAAI,CAAC,kBAAA,EAAoB,KAAK;AAAA,IAChC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAa,CAAC,oBAAA,EAAsB,WAAW,CAAA;AAAA,IAC/C,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,KAAA,EAAO,kBAAA,EAAoB,WAAW,CAAA;AAAA,MACxD,EAAA,EAAI,CAAC,WAAA,EAAa,kBAAA,EAAoB,KAAK;AAAA,IAC7C,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa,CAAC,gBAAA,EAAkB,QAAA,EAAU,6BAA6B,CAAA;AAAA,IACvE,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,mBAAA,EAAqB,gBAAA,EAAkB,iBAAA,EAAmB,oBAAoB,CAAA;AAAA,MACnF,EAAA,EAAI,CAAC,4BAAA,EAA2B,UAAA,EAAY,oBAAoB;AAAA,IAClE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,uBAAA;AAAA,IACV,IAAA,EAAM,iBAAA;AAAA,IACN,WAAA,EAAa,CAAC,SAAA,EAAW,kBAAA,EAAoB,2BAA2B,CAAA;AAAA,IACxE,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,iBAAA,EAAmB,kBAAA,EAAoB,eAAA,EAAiB,0BAA0B,CAAA;AAAA,MACvF,EAAA,EAAI,CAAC,sBAAA,EAAqB,8BAAA,EAA0B,4BAAyB;AAAA,IAC/E,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,gBAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,wBAAA,EAA0B,KAAK,CAAA;AAAA,MACpC,EAAA,EAAI,CAAC,gCAAA,EAA4B,KAAK;AAAA,IACxC,CAAA;AAAA,IACA,GAAA,EAAK,QAAA;AAAA,IACL,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,CAAC,gBAAA,EAAkB,iBAAiB,CAAA;AAAA,IAC9C,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,cAAA,EAAgB,OAAA,EAAS,QAAA,EAAU,cAAc,CAAA;AAAA,MACtD,EAAA,EAAI,CAAC,cAAA,EAAgB,OAAA,EAAS,iBAAiB;AAAA,IACjD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,CAAC,gBAAA,EAAkB,iBAAiB,CAAA;AAAA,IAC9C,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,IAAI,CAAA;AAAA,MACtB,EAAA,EAAI,CAAC,WAAA,EAAa,IAAI;AAAA,IACxB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,CAAC,gBAAA,EAAkB,iBAAiB,CAAA;AAAA,IAC9C,IAAA,EAAM,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,SAAA,EAAW,IAAI,CAAA;AAAA,MACpB,EAAA,EAAI,CAAC,SAAA,EAAW,IAAI;AAAA,IACtB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,CAAC,gBAAA,EAAkB,iBAAiB,CAAA;AAAA,IAC9C,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,8BAAA,EAAgC,KAAK,CAAA;AAAA,MAC1C,EAAA,EAAI,CAAC,qCAAA,EAAiC,KAAA,EAAO,aAAa;AAAA,IAC5D,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,CAAC,gBAAA,EAAkB,iBAAiB,CAAA;AAAA,IAC9C,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,qBAAA,EAAuB,IAAI,CAAA;AAAA,MAChC,EAAA,EAAI,CAAC,0BAAA,EAAyB,IAAA,EAAM,WAAW;AAAA,IACjD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,CAAC,gBAAA,EAAkB,iBAAiB,CAAA;AAAA,IAC9C,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAW,CAAA;AAAA,MAChB,EAAA,EAAI,CAAC,YAAY;AAAA,IACnB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,CAAC,gBAAA,EAAkB,iBAAiB,CAAA;AAAA,IAC9C,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,8BAAA,EAAgC,MAAM,CAAA;AAAA,MAC3C,EAAA,EAAI,CAAC,4CAAA,EAA2C,MAAM;AAAA,IACxD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,CAAC,gBAAA,EAAkB,iBAAiB,CAAA;AAAA,IAC9C,IAAA,EAAM,kBAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,mBAAA;AAAA,QACA,mBAAA;AAAA,QACA,oBAAA;AAAA,QACA,qBAAA;AAAA,QACA,4BAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,oBAAoB;AAAA,IAC3B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,CAAC,gBAAA,EAAkB,iBAAiB,CAAA;AAAA,IAC9C,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,oBAAA,EAAsB,cAAc,CAAA;AAAA,MACzC,EAAA,EAAI,CAAC,oBAAA,EAAsB,cAAc;AAAA,IAC3C,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,gBAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,cAAc,CAAA;AAAA,MACnB,EAAA,EAAI,CAAC,cAAc;AAAA,IACrB,CAAA;AAAA,IACA,GAAA,EAAK,QAAA;AAAA,IACL,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,iBAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,2BAAA,EAA6B,KAAA,EAAO,WAAW,CAAA;AAAA,MACpD,EAAA,EAAI,CAAC,yCAAA,EAAkC,KAAA,EAAO,WAAW;AAAA,IAC3D,CAAA;AAAA,IACA,GAAA,EAAK,MAAA;AAAA,IACL,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,iBAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,gCAAA,EAAkC,UAAA,EAAY,UAAU,CAAA;AAAA,MAC7D,EAAA,EAAI,CAAC,WAAA,EAAa,+CAAsC;AAAA,IAC1D,CAAA;AAAA,IACA,GAAA,EAAK,MAAA;AAAA,IACL,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,iBAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,sBAAA,EAAwB,YAAA,EAAc,gBAAA,EAAkB,aAAa,CAAA;AAAA,MAC1E,EAAA,EAAI,CAAC,+BAAA,EAA2B,aAAA,EAAe,oBAAiB;AAAA,IAClE,CAAA;AAAA,IACA,GAAA,EAAK,MAAA;AAAA,IACL,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,WAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAa,CAAC,qBAAqB,CAAA;AAAA,IACnC,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,qBAAA,EAAuB,KAAA,EAAO,gBAAgB,CAAA;AAAA,MACnD,EAAA,EAAI,CAAC,oBAAA,EAAsB,KAAK;AAAA,IAClC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,SAAA,EAAW,eAAA,EAAiB,gBAAgB,CAAA;AAAA,MACjD,EAAA,EAAI,CAAC,SAAA,EAAW,UAAU;AAAA,IAC5B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,iBAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,iBAAA,EAAmB,uBAAA,EAAyB,kBAAkB,CAAA;AAAA,MACnE,EAAA,EAAI,CAAC,mBAAA,EAAqB,kBAAA,EAAoB,mBAAmB;AAAA,IACnE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,gBAAA,EAAkB,OAAA,EAAS,qBAAqB,CAAA;AAAA,MACrD,EAAA,EAAI,CAAC,qBAAA,EAAuB,OAAA,EAAS,yBAAyB;AAAA,IAChE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAa,CAAC,2BAA2B,CAAA;AAAA,IACzC,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,2BAAA,EAA6B,KAAA,EAAO,cAAc,CAAA;AAAA,MACvD,EAAA,EAAI,CAAC,4BAAA,EAA2B,KAAA,EAAO,2BAAwB;AAAA,IACjE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,SAAA,EAAW,iBAAiB,CAAA;AAAA,MACjC,EAAA,EAAI,CAAC,UAAA,EAAY,mBAAmB;AAAA,IACtC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,SAAA,EAAW,qDAAqD,CAAA;AAAA,MACrE,EAAA,EAAI,CAAC,SAAA,EAAW,gBAAa;AAAA,IAC/B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,QAAQ,CAAA;AAAA,MACb,EAAA,EAAI,CAAC,SAAS;AAAA,IAChB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,OAAO,CAAA;AAAA,MACzB,EAAA,EAAI,CAAC,mBAAa;AAAA,IACpB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,IAAA;AAAA,IACN,WAAA,EAAa,CAAC,iBAAA,EAAmB,UAAU,CAAA;AAAA,IAC3C,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,iBAAA,EAAmB,IAAA,EAAM,KAAA,EAAO,UAAA,EAAY,wBAAwB,CAAA;AAAA,MACzE,EAAA,EAAI,CAAC,kBAAA,EAAoB,IAAA,EAAM,KAAA,EAAO,iBAAA,EAAmB,UAAU;AAAA,IACrE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,oBAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,MACzB,EAAA,EAAI,CAAC,QAAA,EAAU,kBAAkB;AAAA,IACnC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,oBAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,SAAA,EAAW,eAAe,CAAA;AAAA,MAC/B,EAAA,EAAI,CAAC,aAAA,EAAY,uBAAoB;AAAA,IACvC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,CAAC,2BAA2B,CAAA;AAAA,IACzC,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,4BAAA,EAA8B,cAAA,EAAgB,4BAA4B,CAAA;AAAA,MAC/E,EAAA,EAAI,CAAC,uCAAA,EAAgC,iBAAc;AAAA,IACrD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,SAAA,EAAW,eAAe,CAAA;AAAA,MAC/B,EAAA,EAAI,CAAC,WAAA,EAAU,qBAAe;AAAA,IAChC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,UAAU,CAAA;AAAA,MACf,EAAA,EAAI,CAAC,WAAW;AAAA,IAClB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,QAAA,EAAU,YAAA,EAAc,cAAc,CAAA;AAAA,MAC3C,EAAA,EAAI,CAAC,QAAA,EAAU,oBAAA,EAAgB,kBAAA,EAAiB,eAAA,EAAc,+BAAyB;AAAA,IACzF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,cAAc,CAAA;AAAA,MACnB,EAAA,EAAI,CAAC,iBAAc;AAAA,IACrB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,MACzB,EAAA,EAAI,CAAC,OAAA,EAAS,iBAAc;AAAA,IAC9B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EAAa,CAAC,2BAA2B,CAAA;AAAA,IACzC,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,iBAAA;AAAA,QACA,wBAAA;AAAA,QACA,MAAA;AAAA,QACA,cAAA;AAAA,QACA,mBAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,0BAAA;AAAA,QACA,iCAAA;AAAA,QACA,KAAA;AAAA,QACA,mBAAA;AAAA,QACA,iCAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,uBAAA,EAAyB,MAAA,EAAQ,6BAA6B,CAAA;AAAA,MACnE,EAAA,EAAI;AAAA,QACF,sCAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,4CAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,eAAA;AAAA,QACA,2BAAA;AAAA,QACA,eAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,iBAAA,EAAgB,8BAAA,EAA0B,mCAA6B;AAAA,IAC9E,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA;AAAA;AAAA,IAGN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,iBAAA,EAAmB,kBAAA,EAAoB,iBAAiB,CAAA;AAAA,MAC1E,EAAA,EAAI,CAAC,aAAA,EAAY,uBAAA,EAAmB,mBAAgB;AAAA,IACtD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,oBAAA,EAAsB,KAAK,CAAA;AAAA,MAChC,EAAA,EAAI,CAAC,2BAAA,EAAuB,KAAK;AAAA,IACnC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,eAAe,CAAA;AAAA,MACrC,EAAA,EAAI,CAAC,kBAAe;AAAA,IACtB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,CAAC,KAAK,CAAA;AAAA,IACnB,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,aAAA,EAAe,KAAA,EAAO,sBAAsB,CAAA;AAAA,MACjD,EAAA,EAAI,CAAC,iBAAA,EAAgB,KAAA,EAAO,2BAAwB;AAAA,IACtD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,CAAC,KAAK,CAAA;AAAA,IACnB,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,aAAA,EAAe,KAAA,EAAO,uBAAuB,CAAA;AAAA,MAClD,EAAA,EAAI,CAAC,iBAAA,EAAgB,KAAA,EAAO,4BAAyB;AAAA,IACvD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,CAAC,KAAK,CAAA;AAAA,IACnB,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,aAAA,EAAe,KAAA,EAAO,uBAAuB,CAAA;AAAA,MAClD,EAAA,EAAI,CAAC,iBAAA,EAAgB,KAAA,EAAO,4BAAyB;AAAA,IACvD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,qBAAA,EAAuB,aAAa,CAAA;AAAA,MACzC,EAAA,EAAI,CAAC,yBAAsB;AAAA,IAC7B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,qBAAA;AAAA,IACN,WAAA,EAAa,CAAC,oBAAoB,CAAA;AAAA,IAClC,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,uBAAuB,CAAA;AAAA,MAC5B,EAAA,EAAI,CAAC,kCAAyB;AAAA,IAChC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,eAAe,CAAA;AAAA,MACrC,EAAA,EAAI,CAAC,kBAAe;AAAA,IACtB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAa,CAAC,kBAAkB,CAAA;AAAA,IAChC,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,0BAAA,EAA4B,kBAAA,EAAoB,IAAI,CAAA;AAAA,MACzD,EAAA,EAAI,CAAC,sCAAA,EAA+B,0BAAA,EAAsB,IAAI;AAAA,IAChE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAa,CAAC,eAAe,CAAA;AAAA,IAC7B,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,uBAAA,EAAyB,eAAA,EAAiB,IAAI,CAAA;AAAA,MACnD,EAAA,EAAI,CAAC,gCAAA,EAA4B,oBAAA,EAAmB,IAAI;AAAA,IAC1D,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,SAAA,EAAW,eAAe,CAAA;AAAA,MAC5C,EAAA,EAAI,CAAC,YAAA,EAAc,SAAA,EAAW,mBAAA,EAAkB,OAAA,EAAS,QAAA,EAAU,uBAAuB;AAAA,IAC5F,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,aAAA,EAAe,WAAA,EAAa,KAAA,EAAO,gBAAgB,CAAA;AAAA,MACxD,EAAA,EAAI;AAAA,QACF,cAAA;AAAA,QACA,eAAA;AAAA,QACA,YAAA;AAAA,QACA,KAAA;AAAA,QACA,iBAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,eAAe,CAAA;AAAA,MACjC,EAAA,EAAI;AAAA,QACF,YAAA;AAAA,QACA,uBAAA;AAAA,QACA,OAAA;AAAA,QACA,QAAA;AAAA,QACA,uBAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA;AAAA;AAAA;AAAA,IAIN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,WAAA;AAAA,QACA,sBAAA;AAAA,QACA,iBAAA;AAAA,QACA,uBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,YAAA;AAAA,QACA,sBAAA;AAAA,QACA,kBAAA;AAAA,QACA,wBAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,MACzB,EAAA,EAAI,CAAC,OAAO;AAAA,IACd,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,yBAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,UAAA,EAAY,gBAAgB,CAAA;AAAA,MACjC,EAAA,EAAI,CAAC,UAAU;AAAA,IACjB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,sBAAA,EAAwB,KAAA,EAAO,MAAM,CAAA;AAAA,MAC1C,EAAA,EAAI;AAAA,QACF,0BAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,uCAAA;AAAA,QACA,0BAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,SAAA,EAAW,eAAe,CAAA;AAAA,MAC/B,EAAA,EAAI,CAAC,UAAU;AAAA,IACjB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,wBAAA;AAAA,IACN,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,IACxB,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,wBAAA,EAA0B,WAAW,CAAA;AAAA,MAC1C,EAAA,EAAI,CAAC,+BAAA,EAA8B,cAAW;AAAA,IAChD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,qBAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,sBAAA,EAAwB,KAAK,CAAA;AAAA,MAClC,EAAA,EAAI,CAAC,oBAAA,EAAsB,KAAK;AAAA,IAClC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,4BAAA,EAA8B,KAAA,EAAO,MAAM,CAAA;AAAA,MAChD,EAAA,EAAI;AAAA,QACF,4BAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,0CAAA;AAAA,QACA,6BAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,4BAAA,EAA8B,KAAA,EAAO,UAAU,CAAA;AAAA,MACpD,EAAA,EAAI,CAAC,2BAAA,EAA6B,KAAA,EAAO,SAAA,EAAW,0BAAA,EAA4B,SAAS;AAAA,IAC3F,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,UAAA,EAAY,gBAAgB,CAAA;AAAA,MACjC,EAAA,EAAI,CAAC,WAAW;AAAA,IAClB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,eAAe,CAAA;AAAA,MACrC,EAAA,EAAI,CAAC,mBAAA,EAAkB,qBAAkB;AAAA,IAC3C,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,gBAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,iBAAA,EAAmB,iBAAA,EAAmB,kBAAA,EAAoB,iBAAiB,CAAA;AAAA,MAChF,EAAA,EAAI,CAAC,mBAAmB;AAAA,IAC1B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,iBAAA;AAAA,IACN,WAAA,EAAa,CAAC,kBAAA,EAAoB,kBAAA,EAAoB,oBAAoB,CAAA;AAAA,IAC1E,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,kBAAA,EAAoB,kBAAA,EAAoB,sBAAsB,CAAA;AAAA,MACnE,EAAA,EAAI,CAAC,oBAAA,EAAsB,uBAAuB;AAAA,IACpD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,mBAAA;AAAA,IACN,WAAA,EAAa,CAAC,oBAAA,EAAsB,oBAAA,EAAsB,sBAAsB,CAAA;AAAA,IAChF,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,oBAAA,EAAsB,oBAAA,EAAsB,wBAAwB,CAAA;AAAA,MACzE,EAAA,EAAI,CAAC,sBAAA,EAAwB,8BAA2B;AAAA,IAC1D,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,YAAA,EAAc,KAAA,EAAO,KAAK,CAAA;AAAA,MAC/B,EAAA,EAAI,CAAC,gBAAA,EAAe,KAAK;AAAA,IAC3B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,YAAA,EAAc,KAAA,EAAO,KAAK,CAAA;AAAA,MAC/B,EAAA,EAAI,CAAC,aAAA,EAAe,KAAK;AAAA,IAC3B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,6BAAA,EAA+B,KAAK,CAAA;AAAA,MACzC,EAAA,EAAI,CAAC,kCAAA,EAAiC,KAAK;AAAA,IAC7C,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,2CAAA,EAA6C,MAAM,CAAA;AAAA,MACxD,EAAA,EAAI,CAAC,wDAAA,EAAiD,MAAM;AAAA,IAC9D,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,yBAAA,EAA2B,KAAK,CAAA;AAAA,MACrC,EAAA,EAAI,CAAC,6BAAA,EAA4B,KAAK;AAAA,IACxC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,sBAAA,EAAwB,KAAK,CAAA;AAAA,MAClC,EAAA,EAAI,CAAC,gCAAA,EAA4B,KAAK;AAAA,IACxC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,gBAAA,EAAkB,WAAW,CAAA;AAAA,MAClC,EAAA,EAAI,CAAC,uBAAA,EAAyB,WAAW;AAAA,IAC3C,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,sBAAA,EAAwB,KAAA,EAAO,cAAc,CAAA;AAAA,MAClD,EAAA,EAAI,CAAC,yBAAA,EAAwB,aAAA,EAAY,gBAAa;AAAA,IACxD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,6BAAA,EAA+B,KAAK,CAAA;AAAA,MACzC,EAAA,EAAI;AAAA,QACF,oDAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,iBAAA,EAAmB,gBAAgB,CAAA;AAAA,MACrD,EAAA,EAAI,CAAC,WAAA,EAAa,uBAAA,EAAsB,wBAAqB;AAAA,IAC/D;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,SAAA,EAAW,WAAA,EAAa,eAAe,CAAA;AAAA,MAC5C,EAAA,EAAI,CAAC,SAAA,EAAW,UAAA,EAAY,cAAc;AAAA,IAC5C;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAa,CAAC,gCAAA,EAAkC,KAAK,CAAA;AAAA,IACrD,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,gCAAA,EAAkC,KAAA,EAAO,UAAU,CAAA;AAAA,MACxD,EAAA,EAAI,CAAC,uCAAA,EAAmC,KAAA,EAAO,KAAK;AAAA,IACtD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAa,CAAC,gCAAgC,CAAA;AAAA,IAC9C,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,gCAAA,EAAkC,KAAK,CAAA;AAAA,MAC5C,EAAA,EAAI,CAAC,oCAAA,EAAmC,KAAA,EAAO,KAAK;AAAA,IACtD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,iBAAA;AAAA,IACN,WAAA,EAAa,CAAC,kBAAA,EAAoB,SAAS,CAAA;AAAA,IAC3C,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,kBAAA,EAAoB,IAAA,EAAM,UAAU,CAAA;AAAA,MACzC,EAAA,EAAI,CAAC,sBAAA,EAAwB,IAAA,EAAM,KAAK;AAAA,IAC1C,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,CAAC,oBAAA,EAAsB,uBAAuB,CAAA;AAAA,IAC3D,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,oBAAA,EAAsB,uBAAA,EAAyB,aAAa,CAAA;AAAA,MAClF,EAAA,EAAI,CAAC,kBAAA,EAAiB,8BAA2B;AAAA,IACnD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,MAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EAAa,CAAC,oBAAoB,CAAA;AAAA,IAClC,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,oBAAA;AAAA,QACA,eAAA;AAAA,QACA,oBAAA;AAAA,QACA,cAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAuBA,EAAA,EAAI;AAAA,QACF,sBAAA;AAAA,QACA,gBAAA;AAAA,QACA,eAAA;AAAA,QACA,qBAAA;AAAA,QACA,qBAAA;AAAA,QACA,wBAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAME,QAAA,EAAU,MAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,MAAM,CAAA;AAAA,MACX,EAAA,EAAI,CAAC,OAAA,EAAS,UAAO;AAAA,IACvB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,MAAA;AAAA,IACV,IAAA,EAAM,sBAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,sBAAA,EAAwB,uBAAuB,CAAA;AAAA,MACpD,EAAA,EAAI,CAAC,6BAA0B;AAAA,IACjC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,MAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,YAAA,EAAc,kBAAkB,CAAA;AAAA,MACrC,EAAA,EAAI,CAAC,YAAA,EAAc,sBAAmB;AAAA,IACxC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,MAAA;AAAA,IACV,IAAA,EAAM,MAAA;AAAA,IACN,WAAA,EAAa,CAAC,aAAA,EAAe,kBAAA,EAAoB,kBAAA,EAAoB,WAAW,CAAA;AAAA,IAChF,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,sCAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,cAAA;AAAA,QACA,mBAAA;AAAA,QACA,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA,kBAAA;AAAA,QACA,mBAAA;AAAA,QACA,qBAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,6CAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,cAAA;AAAA,QACA,4BAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,MAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,GAAG,CAAA;AAAA,MACrB,EAAA,EAAI,CAAC,aAAA,EAAY,GAAG;AAAA,IACtB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,MAAA;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,QAAA,EAAU,IAAI,CAAA;AAAA,MACnB,EAAA,EAAI,CAAC,UAAA,EAAS,IAAI;AAAA,IACpB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,MAAA;AAAA,IACV,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa,CAAC,kBAAkB,CAAA;AAAA,IAChC,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,kBAAA,EAAoB,kBAAA,EAAoB,yBAAyB,CAAA;AAAA,MACtE,EAAA,EAAI,CAAC,wBAAA,EAAuB,qBAAqB;AAAA,IACnD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,MAAA;AAAA,IACV,IAAA,EAAM,0BAAA;AAAA,IACN,WAAA,EAAa,CAAC,KAAK,CAAA;AAAA,IACnB,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,0BAAA;AAAA,QACA,0BAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,8BAAA;AAAA,QACA,mCAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,SAAA,EAAW,eAAe,CAAA;AAAA,MAC/B,EAAA,EAAI,CAAC,SAAS;AAAA,IAChB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,QAAA,EAAU,cAAc,CAAA;AAAA,MAC7B,EAAA,EAAI,CAAC,QAAQ;AAAA,IACf,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,aAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,gBAAA,EAAkB,KAAA,EAAO,aAAa,CAAA;AAAA,MAC3C,EAAA,EAAI,CAAC,uBAAA,EAAsB,KAAA,EAAO,aAAa;AAAA,IACjD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,aAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,UAAA,EAAY,IAAI,CAAA;AAAA,MACrB,EAAA,EAAI,CAAC,SAAA,EAAW,UAAA,EAAY,IAAI;AAAA,IAClC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa,CAAC,iBAAiB,CAAA;AAAA,IAC/B,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,kBAAA,EAAoB,YAAY,CAAA;AAAA,MACrC,EAAA,EAAI,CAAC,uBAAA,EAAsB,cAAW;AAAA,IACxC;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,gBAAA;AAAA,IACN,WAAA,EAAa,CAAC,eAAe,CAAA;AAAA,IAC7B,KAAA,EAAO,OAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,gBAAA,EAAkB,gBAAA,EAAkB,iBAAA,EAAmB,UAAU,CAAA;AAAA,MACtE,EAAA,EAAI,CAAC,uBAAA,EAAsB,cAAW;AAAA,IACxC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,iBAAA;AAAA,IACN,WAAA,EAAa,CAAC,gBAAgB,CAAA;AAAA,IAC9B,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,iBAAA,EAAmB,iBAAA,EAAmB,kBAAA,EAAoB,WAAW,CAAA;AAAA,MAC1E,EAAA,EAAI,CAAC,sBAAA,EAAwB,mBAAA,EAAqB,aAAa;AAAA,IACjE;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EAAa,CAAC,YAAY,CAAA;AAAA,IAC1B,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,aAAA,EAAe,uBAAA,EAAyB,cAAA,EAAgB,OAAO,CAAA;AAAA,MACpE,EAAA,EAAI,CAAC,wBAAA,EAA0B,eAAe;AAAA,IAChD;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EAAa,CAAC,YAAY,CAAA;AAAA,IAC1B,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,aAAA,EAAe,OAAO,CAAA;AAAA,MAC3B,EAAA,EAAI,CAAC,cAAA,EAAgB,KAAK;AAAA,IAC5B;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,eAAA,EAAiB,gBAAgB,CAAA;AAAA,MACvD,EAAA,EAAI,CAAC,kBAAA,EAAoB,eAAe;AAAA,IAC1C;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EAAa,CAAC,kBAAkB,CAAA;AAAA,IAChC,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,qBAAA,EAAuB,cAAA,EAAgB,eAAe,CAAA;AAAA,MAC3D,EAAA,EAAI,CAAC,6BAAA,EAA+B,kBAAkB;AAAA,IACxD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,CAAC,cAAc,CAAA;AAAA,IAC5B,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,eAAA,EAAiB,gBAAA,EAAkB,SAAS,CAAA;AAAA,MAClE,EAAA,EAAI,CAAC,kBAAA,EAAoB,SAAS;AAAA,IACpC;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,yBAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,0BAAA,EAA4B,oBAAA,EAAsB,eAAe,CAAA;AAAA,MACtE,EAAA,EAAI,CAAC,mCAAA,EAAkC,0BAAuB;AAAA,IAChE;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa,CAAC,iBAAiB,CAAA;AAAA,IAC/B,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,kBAAA,EAAoB,WAAA,EAAa,4BAAA,EAA8B,WAAW,CAAA;AAAA,MAC/E,EAAA,EAAI,CAAC,wBAAA,EAAuB,4BAAsB;AAAA,IACpD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,CAAC,cAAc,CAAA;AAAA,IAC5B,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,eAAA,EAAiB,gBAAA,EAAkB,SAAS,CAAA;AAAA,MAClE,EAAA,EAAI,CAAC,kBAAA,EAAoB,eAAA,EAAiB,SAAS;AAAA,IACrD;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAa,CAAC,WAAW,CAAA;AAAA,IACzB,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,UAAA,EAAY,UAAA,EAAY,WAAW,CAAA;AAAA,MACxC,EAAA,EAAI,CAAC,gBAAA,EAAe,aAAa;AAAA,IACnC;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,eAAA,EAAiB,gBAAA,EAAkB,SAAS,CAAA;AAAA,MAClE,EAAA,EAAI,CAAC,sBAAA,EAAqB,aAAU;AAAA,IACtC;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,0BAAA,EAA4B,WAAA,EAAa,YAAY,CAAA;AAAA,MACvE,EAAA,EAAI,CAAC,sBAAmB;AAAA,IAC1B,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EAAa,CAAC,iBAAiB,CAAA;AAAA,IAC/B,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,wBAAA;AAAA,QACA,wBAAA;AAAA,QACA,yBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,oBAAA,EAAsB,yBAAsB;AAAA,IACnD;AAAA,EACF,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,0BAAA;AAAA,IACN,WAAA,EAAa,CAAC,yBAAyB,CAAA;AAAA,IACvC,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,iCAAA;AAAA,QACA,kCAAA;AAAA,QACA,2BAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,0CAAuC;AAAA,IAC9C,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EAAa,CAAC,oBAAoB,CAAA;AAAA,IAClC,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,oBAAA,EAAsB,oBAAA,EAAsB,cAAc,CAAA;AAAA,MAC/D,EAAA,EAAI,CAAC,+BAAA,EAA2B,4BAAyB;AAAA,IAC3D,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAa,CAAC,kBAAA,EAAoB,kBAAkB,CAAA;AAAA,IACpD,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,mBAAA,EAAqB,KAAA,EAAO,kBAAkB,CAAA;AAAA,MACnD,EAAA,EAAI,CAAC,sBAAA,EAAqB,KAAA,EAAO,qBAAkB;AAAA,IACrD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAa,CAAC,QAAQ,CAAA;AAAA,IACtB,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,QAAA,EAAU,QAAA,EAAU,oBAAoB,CAAA;AAAA,MAC7C,EAAA,EAAI,CAAC,QAAA,EAAU,QAAA,EAAU,oBAAiB;AAAA,IAC5C,CAAA;AAAA,IACA,GAAA,EAAK,QAAA;AAAA,IACL,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAa,CAAC,oCAAoC,CAAA;AAAA,IAClD,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,0BAAA,EAA4B,KAAK,CAAA;AAAA,MACtC,EAAA,EAAI,CAAC,mCAAA,EAA+B,KAAK;AAAA,IAC3C,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA;AAAA,IACE,QAAA,EAAU,eAAA;AAAA,IACV,IAAA,EAAM,wBAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,qCAAA;AAAA,QACA,SAAA;AAAA,QACA,gCAAA;AAAA,QACA,2BAAA;AAAA,QACA,4BAAA;AAAA,QACA,+BAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,wCAAA,EAA0C,SAAS;AAAA,IAC1D,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,eAAA;AAAA,IACV,IAAA,EAAM,wBAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,qCAAA;AAAA,QACA,SAAA;AAAA,QACA,gCAAA;AAAA,QACA,2BAAA;AAAA,QACA,4BAAA;AAAA,QACA,+BAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,wCAAA,EAA0C,SAAS;AAAA,IAC1D,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,eAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,6BAAA;AAAA,QACA,SAAA;AAAA,QACA,cAAA;AAAA,QACA,iCAAA;AAAA,QACA,gCAAA;AAAA,QACA,YAAA;AAAA,QACA,wBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,+BAAA,EAAiC,SAAA,EAAW,cAAc;AAAA,IACjE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,eAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,6BAAA;AAAA,QACA,SAAA;AAAA,QACA,cAAA;AAAA,QACA,iCAAA;AAAA,QACA,gCAAA;AAAA,QACA,YAAA;AAAA,QACA,wBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,+BAAA,EAAiC,SAAA,EAAW,cAAc;AAAA,IACjE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,eAAA;AAAA,QACA,2BAAA;AAAA,QACA,WAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,kBAAA,EAAiB,kCAA4B;AAAA,IACpD;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,aAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,aAAA,EAAe,mBAAmB,CAAA;AAAA,MACvC,EAAA,EAAI,CAAC,cAAc;AAAA,IACrB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAa,CAAC,iBAAiB,CAAA;AAAA,IAC/B,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,iBAAA,EAAmB,KAAK,CAAA;AAAA,MAC7B,EAAA,EAAI,CAAC,6BAAA,EAA4B,KAAK;AAAA,IACxC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,qBAAA;AAAA,QACA,YAAA;AAAA,QACA,kBAAA;AAAA,QACA,UAAA;AAAA,QACA,gBAAA;AAAA,QACA,kBAAA;AAAA,QACA,YAAA;AAAA,QACA,kBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,aAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,gCAAA;AAAA,QACA,oBAAA;AAAA,QACA,0BAAA;AAAA,QACA,uBAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA;AAAA;AAAA;AAAA,MAIL,EAAA,EAAI,CAAC,UAAA,EAAY,gBAAA,EAAkB,eAAA,EAAiB,iBAAA,EAAmB,WAAW,CAAA;AAAA,MAClF,EAAA,EAAI,CAAC,kBAAA,EAAoB,aAAA,EAAe,wBAAA,EAA0B,gBAAgB;AAAA,IACpF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKL,EAAA,EAAI;AAAA,QACF,WAAA;AAAA,QACA,gBAAA;AAAA,QACA,kBAAA;AAAA,QACA,iBAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,aAAA,EAAe,sBAAA,EAAwB,cAAA,EAAgB,mBAAmB;AAAA,IACjF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA;AAAA,IAEN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,sBAAA;AAAA,QACA,KAAA;AAAA,QACA,gBAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,8BAAA;AAAA,QACA,KAAA;AAAA,QACA,gBAAA;AAAA,QACA,oCAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,aAAA;AAAA;AAAA,IAEN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,eAAA,EAAiB,UAAA,EAAY,KAAA,EAAO,cAAc,CAAA;AAAA,MACxE,EAAA,EAAI,CAAC,wBAAA,EAA0B,yBAAA,EAA2B,KAAK;AAAA,IACjE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMN,WAAA,EAAa,CAAC,4CAA4C,CAAA;AAAA;AAAA,IAE1D,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,qBAAA;AAAA,QACA,YAAA;AAAA,QACA,WAAA;AAAA,QACA,gCAAA;AAAA,QACA,sCAAA;AAAA,QACA,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA,cAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,4BAAA;AAAA,QACA,YAAA;AAAA,QACA,gCAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA;AAAA;AAAA,IAGN,WAAA,EAAa,CAAC,8CAA8C,CAAA;AAAA;AAAA,IAE5D,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,mBAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAA;AAAA,QACA,8BAAA;AAAA,QACA,wCAAA;AAAA,QACA,kCAAA;AAAA,QACA,cAAA;AAAA,QACA,yBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,2BAAA;AAAA,QACA,WAAA;AAAA,QACA,+BAAA;AAAA,QACA,yBAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA;AAAA,IAEN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,sBAAA;AAAA,QACA,WAAA;AAAA,QACA,sBAAA;AAAA,QACA,oBAAA;AAAA,QACA,UAAA;AAAA,QACA,yBAAA;AAAA,QACA,sBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,2BAAA;AAAA,QACA,cAAA;AAAA,QACA,gCAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA;AAAA,IAEN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,wBAAA;AAAA,QACA,eAAA;AAAA,QACA,eAAA;AAAA,QACA,mBAAA;AAAA,QACA,sBAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,gCAAA;AAAA,QACA,oBAAA;AAAA,QACA,8BAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA;AAAA,IAEN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,uBAAA;AAAA,QACA,cAAA;AAAA,QACA,cAAA;AAAA,QACA,kBAAA;AAAA,QACA,mBAAA;AAAA,QACA,qBAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,+BAAA;AAAA,QACA,mBAAA;AAAA,QACA,6BAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,YAAA,EAAc,iBAAA,EAAmB,aAAA,EAAe,QAAQ,CAAA;AAAA,MAC7D,EAAA,EAAI,CAAC,aAAA,EAAe,sBAAA,EAAwB,eAAA,EAAiB,MAAM;AAAA,IACrE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmDA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,gBAAA;AAAA,IACN,KAAA,EAAO,UAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,kBAAA,EAAoB,YAAA,EAAc,KAAA,EAAO,aAAa,CAAA;AAAA,MAC3D,EAAA,EAAI,CAAC,wBAAA,EAAuB,kBAAA,EAAiB,KAAA,EAAO,eAAY;AAAA,IAClE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO,UAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,uBAAA,EAAyB,0BAAA,EAA4B,cAAA,EAAgB,SAAS,CAAA;AAAA,MACnF,EAAA,EAAI,CAAC,gCAAA,EAA+B,oBAAA,EAAmB,oBAAiB;AAAA,IAC1E,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,aAAA,EAAe,sBAAA,EAAwB,KAAA,EAAO,kBAAkB,CAAA;AAAA,MACrE,EAAA,EAAI;AAAA,QACF,gBAAA;AAAA,QACA,+BAAA;AAAA,QACA,KAAA;AAAA,QACA,yBAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,iBAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,mBAAA,EAAqB,4BAAA,EAA8B,KAAA,EAAO,MAAM,CAAA;AAAA,MACrE,EAAA,EAAI,CAAC,6BAAA,EAA4B,KAAA,EAAO,4CAAsC;AAAA,IAChF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,UAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,aAAA,EAAe,wBAAA,EAA0B,KAAA,EAAO,YAAY,CAAA;AAAA,MACjE,EAAA,EAAI,CAAC,mBAAA,EAAkB,4BAAyB;AAAA,IAClD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,kBAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,oBAAA,EAAsB,oBAAA,EAAsB,KAAA,EAAO,cAAc,CAAA;AAAA,MACtE,EAAA,EAAI;AAAA,QACF,8BAAA;AAAA,QACA,+BAAA;AAAA,QACA,2BAAA;AAAA;AAAA;AAAA,QAGA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAIA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,qBAAA,EAAuB,KAAK,CAAA;AAAA,MACjC,EAAA,EAAI,CAAC,sBAAA,EAAqB,KAAK;AAAA,IACjC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,qBAAA,EAAuB,KAAK,CAAA;AAAA,MACjC,EAAA,EAAI,CAAC,sBAAA,EAAqB,KAAK;AAAA,IACjC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAIA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,SAAA,EAAW,SAAA,EAAW,kBAAA,EAAoB,2BAA2B,CAAA;AAAA,MAC1E,EAAA,EAAI,CAAC,uBAAA,EAAmB,+BAAyB;AAAA,IACnD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,iBAAiB,CAAA;AAAA,MACvC,EAAA,EAAI,CAAC,gBAAA,EAAkB,eAAe;AAAA,IACxC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,sBAAA,EAAwB,KAAK,CAAA;AAAA,MAClC,EAAA,EAAI,CAAC,0BAAA,EAAyB,KAAA,EAAO,mBAAA,EAAqB,2BAAwB;AAAA,IACpF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA,EAGA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA;AAAA;AAAA;AAAA,IAIN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,qBAAA,EAAuB,yBAAA,EAA2B,OAAO,CAAA;AAAA,MAC9D,EAAA,EAAI;AAAA,QACF,8BAAA;AAAA,QACA,6BAAA;AAAA,QACA,wBAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA,EAGA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,mBAAA;AAAA,IACN,KAAA,EAAO,UAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,oBAAA,EAAsB,YAAY,CAAA;AAAA,MACvC,EAAA,EAAI,CAAC,kCAAA,EAAiC,6BAAA,EAA4B,aAAa;AAAA,IACjF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,uBAAA,EAAyB,uBAAA,EAAyB,MAAM,CAAA;AAAA,MAC7D,EAAA,EAAI,CAAC,yBAAA,EAAwB,gCAAA,EAA4B,OAAO;AAAA,IAClE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,gBAAA,EAAkB,SAAS,CAAA;AAAA,MAChC,EAAA,EAAI,CAAC,yBAAA,EAAwB,aAAU;AAAA,IACzC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,iBAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,kBAAA,EAAoB,qBAAA,EAAuB,6BAAA,EAA+B,SAAS,CAAA;AAAA,MACxF,EAAA,EAAI,CAAC,kBAAA,EAAoB,6BAAA,EAA4B,YAAA,EAAc,KAAK;AAAA,IAC1E,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,gBAAA,EAAkB,2BAAA,EAA6B,OAAO,CAAA;AAAA,MAC3D,EAAA,EAAI,CAAC,eAAA,EAAiB,uBAAA,EAAsB,MAAM;AAAA,IACpD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,mBAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,oBAAA,EAAsB,gBAAA,EAAkB,2BAA2B,CAAA;AAAA,MACxE,EAAA,EAAI,CAAC,iBAAA,EAAmB,4BAAA,EAA2B,WAAW;AAAA,IAChE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,qBAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,sBAAA,EAAwB,aAAa,CAAA;AAAA,MAC1C,EAAA,EAAI,CAAC,oBAAA,EAAsB,+BAAA,EAA8B,cAAc;AAAA,IACzE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,oBAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,qBAAA,EAAuB,sBAAA,EAAwB,YAAY,CAAA;AAAA,MAChE,EAAA,EAAI,CAAC,uBAAA,EAAsB,kCAAA,EAA8B,iBAAA,EAAgB,aAAa;AAAA,IACxF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,gBAAA,EAAkB,mBAAA,EAAqB,OAAO,CAAA;AAAA,MACnD,EAAA,EAAI,CAAC,gBAAA,EAAkB,2BAAA,EAA0B,UAAA,EAAY,mBAAgB;AAAA,IAC/E,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,qBAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,sBAAA,EAAwB,uBAAA,EAAyB,aAAA,EAAe,WAAW,CAAA;AAAA,MAChF,EAAA,EAAI,CAAC,uBAAA,EAAsB,kCAAA,EAA8B,iBAAc;AAAA,IACzE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,CAAC,8BAA8B,CAAA;AAAA,IAC5C,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,gBAAA;AAAA,QACA,sBAAA;AAAA,QACA,WAAA;AAAA,QACA,kBAAA;AAAA,QACA,eAAA;AAAA,QACA,UAAA;AAAA,QACA,sBAAA;AAAA,QACA,uBAAA;AAAA,QACA,2BAAA;AAAA,QACA,WAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,uBAAA;AAAA,QACA,wBAAA;AAAA,QACA,gCAAA;AAAA,QACA,uBAAA;AAAA,QACA,2BAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EAAa,CAAC,6BAA6B,CAAA;AAAA,IAC3C,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,eAAA;AAAA,QACA,qBAAA;AAAA,QACA,UAAA;AAAA,QACA,iBAAA;AAAA,QACA,cAAA;AAAA,QACA,SAAA;AAAA,QACA,qBAAA;AAAA,QACA,sBAAA;AAAA,QACA,0BAAA;AAAA,QACA,UAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,4BAAA;AAAA,QACA,0BAAA;AAAA,QACA,4BAAA;AAAA,QACA,mBAAA;AAAA,QACA,uBAAA;AAAA,QACA,uBAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,CAAC,8BAA8B,CAAA;AAAA,IAC5C,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,gBAAA;AAAA,QACA,sBAAA;AAAA,QACA,WAAA;AAAA,QACA,kBAAA;AAAA,QACA,eAAA;AAAA,QACA,UAAA;AAAA,QACA,sBAAA;AAAA,QACA,uBAAA;AAAA,QACA,2BAAA;AAAA,QACA,WAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,oBAAA;AAAA,QACA,qBAAA;AAAA,QACA,gCAAA;AAAA,QACA,oBAAA;AAAA,QACA,wBAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EAAa,CAAC,6BAA6B,CAAA;AAAA,IAC3C,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,eAAA;AAAA,QACA,qBAAA;AAAA,QACA,UAAA;AAAA,QACA,iBAAA;AAAA,QACA,cAAA;AAAA,QACA,SAAA;AAAA,QACA,qBAAA;AAAA,QACA,sBAAA;AAAA,QACA,0BAAA;AAAA,QACA,UAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,yBAAA;AAAA,QACA,uBAAA;AAAA,QACA,4BAAA;AAAA,QACA,gBAAA;AAAA,QACA,oBAAA;AAAA,QACA,oBAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,iBAAA;AAAA,QACA,YAAA;AAAA,QACA,mBAAA;AAAA,QACA,iBAAA;AAAA,QACA,gBAAA;AAAA,QACA,YAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,oBAAA;AAAA,QACA,qBAAA;AAAA,QACA,kBAAA;AAAA,QACA,oBAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,gBAAA;AAAA,QACA,WAAA;AAAA,QACA,kBAAA;AAAA,QACA,gBAAA;AAAA,QACA,eAAA;AAAA,QACA,WAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,yBAAA;AAAA,QACA,uBAAA;AAAA,QACA,cAAA;AAAA,QACA,gBAAA;AAAA,QACA,mBAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,iBAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA;AAAA,IAEN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,gBAAA;AAAA,QACA,WAAA;AAAA,QACA,KAAA;AAAA,QACA,cAAA;AAAA,QACA,sBAAA;AAAA,QACA,WAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,iBAAA;AAAA,QACA,WAAA;AAAA,QACA,KAAA;AAAA,QACA,4BAAA;AAAA,QACA,0BAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,iBAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA;AAAA,IAEN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,oBAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAA;AAAA,QACA,iBAAA;AAAA,QACA,aAAA;AAAA,QACA,sBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,qBAAA,EAAuB,SAAA,EAAW,UAAA,EAAY,aAAA,EAAe,4BAAyB;AAAA,IAC7F,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,iBAAA;AAAA,IACV,IAAA,EAAM,cAAA;AAAA;AAAA,IAEN,KAAA,EAAO;AAAA,MACL,EAAA,EAAI;AAAA,QACF,oBAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAA;AAAA,QACA,iBAAA;AAAA,QACA,aAAA;AAAA,QACA,sBAAA;AAAA,QACA;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,CAAC,qBAAA,EAAuB,SAAA,EAAW,UAAA,EAAY,aAAA,EAAe,4BAAyB;AAAA,IAC7F,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,WAAA,EAAa,2CAAA,EAA6C,YAAY,CAAA;AAAA,MAC3E,EAAA,EAAI,CAAC,WAAA,EAAa,+CAAA,EAA2C,uBAAoB;AAAA,IACnF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,KAAA,EAAO,4BAAA,EAA8B,2BAA2B,CAAA;AAAA,MACrE,EAAA,EAAI,CAAC,KAAA,EAAO,oCAAA,EAAgC,sCAAgC;AAAA,IAC9E,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,YAAA,EAAc,MAAA,EAAQ,oBAAA,EAAsB,QAAA,EAAU,6BAA6B,CAAA;AAAA,MACxF,EAAA,EAAI,CAAC,aAAA,EAAe,MAAA,EAAQ,yBAAA,EAAwB,+BAA4B;AAAA,IAClF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,YAAA,EAAc,MAAA,EAAQ,oBAAA,EAAsB,QAAA,EAAU,6BAA6B,CAAA;AAAA,MACxF,EAAA,EAAI,CAAC,aAAA,EAAe,MAAA,EAAQ,yBAAA,EAAwB,+BAA4B;AAAA,IAClF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,SAAA,EAAW,SAAA,EAAW,gBAAgB,CAAA;AAAA,MAC3C,EAAA,EAAI,CAAC,aAAA,EAAY,aAAA,EAAY,aAAU;AAAA,IACzC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,YAAA,EAAc,qBAAqB,CAAA;AAAA,MACxC,EAAA,EAAI,CAAC,iBAAA,EAAgB,8BAA2B;AAAA,IAClD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP,YAAA,EAAc,CAAC,QAAQ,CAAA;AAAA,IACvB,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,uBAAA,EAAyB,KAAA,EAAO,IAAI,CAAA;AAAA,MACzC,EAAA,EAAI,CAAC,yBAAA,EAAwB,KAAA,EAAO,KAAA,EAAO,uBAAuB;AAAA,IACpE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,WAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,qBAAA,EAAuB,KAAA,EAAO,YAAY,CAAA;AAAA,MAC/C,EAAA,EAAI,CAAC,iBAAA,EAAgB,KAAA,EAAO,6BAAA,EAA4B,aAAa;AAAA,IACvE,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,eAAA;AAAA,IACV,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,kBAAA,EAAoB,KAAA,EAAO,WAAW,CAAA;AAAA,MAC3C,EAAA,EAAI,CAAC,kBAAA,EAAoB,KAAA,EAAO,WAAW;AAAA,IAC7C,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,eAAA;AAAA,IACV,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,IAAI,CAAA;AAAA,MAC1B,EAAA,EAAI,CAAC,gBAAA,EAAkB,IAAA,EAAM,gCAA0B;AAAA,IACzD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,eAAA;AAAA,IACV,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,eAAA,EAAiB,IAAI,CAAA;AAAA,MAC1B,EAAA,EAAI,CAAC,gBAAA,EAAkB,IAAA,EAAM,gCAA0B;AAAA,IACzD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,SAAA,EAAW,2BAAA,EAA6B,QAAQ,CAAA;AAAA,MACrD,EAAA,EAAI,CAAC,SAAA,EAAW,8BAAA,EAA6B,QAAQ;AAAA,IACvD,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,qBAAA;AAAA,IACV,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,SAAA,EAAW,qBAAA,EAAuB,QAAQ,CAAA;AAAA,MAC/C,EAAA,EAAI,CAAC,SAAA,EAAW,4BAAA,EAAwB,QAAQ;AAAA,IAClD,CAAA;AAAA,IACA,GAAA,EAAK,QAAA;AAAA,IACL,IAAA,EAAM;AAAA,EACR,CAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU,CAAC,gBAAA,EAAkB,qBAAqB,CAAA;AAAA,IAClD,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,UAAA,EAAY,mCAAA,EAAqC,yBAAA,EAAsB,KAAK,CAAA;AAAA,MACjF,EAAA,EAAI;AAAA,QACF,UAAA;AAAA,QACA,wCAAA;AAAA,QACA,yBAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,MAAA;AAAA,IACV,IAAA,EAAM,WAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,YAAA,EAAc,YAAY,CAAA;AAAA,MAC/B,EAAA,EAAI,CAAC,aAAA,EAAe,aAAa;AAAA,IACnC,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,UAAA,EAAY,IAAI,CAAA;AAAA,MACrB,EAAA,EAAI,CAAC,YAAA,EAAW,IAAI;AAAA,IACtB,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,QAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAM,qBAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACL,EAAA,EAAI,CAAC,sBAAA,EAAwB,wBAAA,EAAqB,KAAA,EAAO,eAAe,CAAA;AAAA,MACxE,EAAA,EAAI,CAAC,sBAAA,EAAwB,wBAAA,EAAqB,KAAA,EAAO,qBAAkB;AAAA,IAC7E,CAAA;AAAA,IACA,IAAA,EAAM;AAAA,EACR;AACF,CAAA;AAOA,IAAM,eAAA,kBAAiB,IAAI,GAAA,CAAoB,CAAA;AAG/C,IAAM,eAAA,kBAAiB,IAAI,GAAA,CAAoB,CAAA;AAG/C,IAAM,oBAAA,kBAAsB,IAAI,GAAA,CAAiC,CAAA;AAGjE,IAAM,cAAA,kBAAgB,IAAI,GAAA,CAAY,CAAA;AAGtC,IAAM,wBAAA,kBAA0B,IAAI,GAAA,CAAoB,CAAA;AAGxD,IAAM,aAAA,kBAAe,IAAI,GAAA,CAAY,CAAA;AAGrC,IAAA,CAAA,MAAW,IAAA,GAAO,qBAAA,EAAuB;AAEvC,EAAA,GAAA,CAAI,GAAA,CAAI,KAAA,EAAO;AACb,IAAA,cAAA,CAAe,GAAA,CAAI,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,IAAI,CAAA;AACtC,IAAA,cAAA,CAAe,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,KAAK,CAAA;AACtC,IAAA,aAAA,CAAc,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA;AAAA,EAC7B;AAEA,EAAA,mBAAA,CAAoB,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACrC,EAAA,YAAA,CAAa,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA;AAGzB,EAAA,GAAA,CAAI,GAAA,CAAI,YAAA,EAAc;AACpB,IAAA,IAAA,CAAA,MAAW,MAAA,GAAS,GAAA,CAAI,YAAA,EAAc;AACpC,MAAA,cAAA,CAAe,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,IAAI,CAAA;AAClC,MAAA,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAAA,IACzB;AAAA,EACF;AAGA,EAAA,GAAA,CAAI,GAAA,CAAI,WAAA,EAAa;AACnB,IAAA,IAAA,CAAA,MAAW,MAAA,GAAS,GAAA,CAAI,WAAA,EAAa;AACnC,MAAA,uBAAA,CAAwB,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,IAAI,CAAA;AAC3C,MAAA,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA;AAEtB,MAAA,mBAAA,CAAoB,GAAA,CAAI,KAAA,EAAO,GAAG,CAAA;AAAA,IACpC;AAAA,EACF;AACF;AASO,SAAS,WAAA,CAAY,KAAA,EAAmC;AAC7D,EAAA,OAAO,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AACjC;AAKO,SAAS,WAAA,CAAY,IAAA,EAAkC;AAC5D,EAAA,OAAO,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAChC;AAKO,SAAS,YAAA,CAAa,KAAA,EAAwB;AACnD,EAAA,OAAO,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAChC;AAKO,SAAS,WAAA,CAAY,IAAA,EAAuB;AACjD,EAAA,OAAO,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AAC9B;AAUO,SAAS,aAAA,CAAc,IAAA,EAAsB;AAClD,EAAA,wBAAO,uBAAA,CAAwB,GAAA,CAAI,IAAI,CAAA,UAAK,MAAA;AAC9C;AAMO,SAAS,aAAA,CAAc,IAAA,EAA0C;AACtE,EAAA,MAAM,IAAA,EAAM,mBAAA,CAAoB,GAAA,CAAI,IAAI,CAAA;AACxC,EAAA,wCAAO,GAAA,2BAAK,KAAA,UAAO,QAAA;AACrB;AAMO,SAAS,mBAAA,CAAoB,GAAA,EAAwD;AAC1F,EAAA,GAAA,CAAI,IAAA,IAAQ,MAAA,EAAQ;AAClB,IAAA,OAAO,qBAAA;AAAA,EACT;AACA,EAAA,OAAO,qBAAA,CAAsB,MAAA;AAAA,IAC3B,CAAC,GAAA,EAAA,GAAQ,GAAA,CAAI,IAAA,IAAQ,IAAA,GAAO,GAAA,CAAI,IAAA,IAAQ,KAAA,EAAA,GAAa,GAAA,CAAI,IAAA,IAAQ;AAAA,EACnE,CAAA;AACF;AAKO,SAAS,mBAAA,CAAoB,IAAA,EAA+C;AACjF,EAAA,OAAO,mBAAA,CAAoB,GAAA,CAAI,IAAI,CAAA;AACrC;AAKO,SAAS,oBAAA,CAAqB,KAAA,EAAgD;AACnF,EAAA,MAAM,KAAA,EAAO,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AACrC,EAAA,OAAO,KAAA,EAAO,mBAAA,CAAoB,GAAA,CAAI,IAAI,EAAA,EAAI,KAAA,CAAA;AAChD;AAKO,SAAS,iBAAA,CAAA,EAA2C;AACzD,EAAA,OAAO,qBAAA;AACT;AAKO,SAAS,qBAAA,CAAA,EAA+C;AAC7D,EAAA,OAAO,qBAAA,CAAsB,MAAA,CAAO,CAAC,GAAA,EAAA,GAAQ,CAAC,GAAA,CAAI,MAAM,CAAA;AAC1D;AAKO,SAAS,WAAA,CAAA,EAAwB;AACtC,EAAA,OAAO,qBAAA,CAAsB,GAAA,CAAI,CAAC,GAAA,EAAA,GAAQ,GAAA,CAAI,IAAI,CAAA;AACpD;AAKO,SAAS,gBAAA,CAAA,EAA6B;AAC3C,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,aAAa,CAAA;AACjC;AAgBA,SAAS,uBAAA,CAAwB,KAAA,EAAiB,GAAA,EAAgC;AAChF,EAAA,MAAM,QAAA,EAAU,GAAA,CAAI,KAAA,CAAM,EAAA,CAAG,IAAA,CAAK,IAAI,CAAA;AACtC,EAAA,MAAM,QAAA,EAAU,GAAA,CAAI,KAAA,CAAM,EAAA,CAAG,IAAA,CAAK,IAAI,CAAA;AACtC,EAAA,GAAA,CAAI,GAAA,CAAI,KAAA,EAAO;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,GAAA,CAAI,KAAK,CAAA,SAAA,EAAY,GAAA,CAAI,IAAI,CAAA,CAAA;AACvB,IAAA;AACA,IAAA;AAC7B,IAAA;AACF,EAAA;AAC8B,EAAA;AAChC;AAM+C;AACrB,EAAA;AACtB,IAAA;AACA,IAAA;AACF,EAAA;AAG0D,EAAA;AACjB,EAAA;AACc,IAAA;AACvB,IAAA;AACa,MAAA;AACxB,MAAA;AACW,MAAA;AAC9B,IAAA;AACF,EAAA;AAE2C,EAAA;AACD,IAAA;AAChB,IAAA;AACY,MAAA;AACpC,IAAA;AACa,IAAA;AACf,EAAA;AAEsB,EAAA;AACxB;AAUE;AACiF,EAAA;AAExC,EAAA;AAEvB,IAAA;AAEqC,IAAA;AACf,IAAA;AACA,IAAA;AACH,IAAA;AACV,MAAA;AACD,QAAA;AACtB,MAAA;AACuB,MAAA;AACX,QAAA;AACN,QAAA;AACA,QAAA;AACL,MAAA;AACH,IAAA;AACF,EAAA;AAEO,EAAA;AACT;AAqBiE;AACpB,EAAA;AAC3B,IAAA;AACJ,IAAA;AAC0B,IAAA;AACI,IAAA;AACP,IAAA;AACjC,EAAA;AACJ;AAMsE;AACvC,EAAA;AACsB,EAAA;AAEpB,EAAA;AACtB,IAAA;AACT,EAAA;AAEwB,EAAA;AACtB,IAAA;AACA,IAAA;AACF,EAAA;AAG0D,EAAA;AAC1B,EAAA;AACuB,IAAA;AACvB,IAAA;AACa,MAAA;AACxB,MAAA;AACW,MAAA;AAC9B,IAAA;AACF,EAAA;AAE2C,EAAA;AACD,IAAA;AAChB,IAAA;AACY,MAAA;AACpC,IAAA;AACa,IAAA;AACf,EAAA;AAEsB,EAAA;AACxB;AAkBoC;AAAA;AAElC,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AAAA;AAEA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AAAA;AAEA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AAAA;AAEA,EAAA;AACA,EAAA;AACF;AAKuD;AAUH;AACF,EAAA;AACO,IAAA;AACnC,IAAA;AACgD,MAAA;AAClE,IAAA;AACsB,EAAA;AAEqB,EAAA;AAC/C;AAKgE;AACnB,EAAA;AAC7C;AAMmC;AACjC,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACF;AAMmD;AACM,EAAA;AACJ,IAAA;AAC3B,EAAA;AAEoB,EAAA;AAC9C;AAK+D;AACN,EAAA;AACzD;AAS6C;AAM9B,EAAA;AAUf;AAawC;AAG3B,EAAA;AAKb;AAGwD;AAIG;AAClB;AACgB,EAAA;AACA,IAAA;AACzB,IAAA;AACgB,IAAA;AACW,IAAA;AACzD,EAAA;AACF;AAQiE;AAE5B,EAAA;AACK,IAAA;AACxC,EAAA;AAGkD,EAAA;AACnC,EAAA;AACN,IAAA;AACT,EAAA;AAE+C,EAAA;AAC/B,EAAA;AACP,IAAA;AACT,EAAA;AACkD,EAAA;AACpD;AAaoD;AACf,EAAA;AACC,EAAA;AAGiB,EAAA;AAEV,IAAA;AAC3C,EAAA;AAGe,EAAA;AAC8B,IAAA;AAC7C,EAAA;AAG+C,EAAA;AACjD;AAY0D;AAED,EAAA;AAC9C,IAAA;AACT,EAAA;AAG+C,EAAA;AACvB,EAAA;AACf,IAAA;AACT,EAAA;AAEO,EAAA;AACT;AAQ0F;AACnC,EAAA;AACvD;AAiByB;AACyB,EAAA;AAEH,EAAA;AACU,IAAA;AACV,IAAA;AACF,IAAA;AACrB,IAAA;AAE4B,MAAA;AAChD,IAAA;AACO,IAAA;AACR,EAAA;AACH;AAeyC;AACgB,EAAA;AAEpB,EAAA;AACoB,IAAA;AAC1B,IAAA;AACN,MAAA;AACrB,IAAA;AACF,EAAA;AAEO,EAAA;AACT;ADxZyD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-MKH4Q735.cjs","sourcesContent":[null,"/**\n * Biomarker Definitions - Single Source of Truth\n *\n * This file defines all supported biomarkers with:\n * - LOINC codes (canonical identifier for cross-language matching)\n * - Internal codes (for UI display)\n * - Portuguese and English names\n * - Categories\n * - Default units\n *\n * The LLM extraction prompt includes these definitions so it can output\n * LOINC codes directly, eliminating the need for name-matching logic.\n */\n\nexport interface BiomarkerDefinition {\n category: string | string[];\n code: string;\n codeAliases?: string[];\n hidden?: boolean; // If true, biomarker is extracted but not shown in UI\n loinc?: string; // Optional - some DEXA regional metrics don't have official LOINC codes\n loincAliases?: string[];\n names: {\n en: string[];\n pt: string[];\n };\n sex?: 'male' | 'female' | 'both';\n unit?: string;\n}\n\n/** @deprecated Use `BiomarkerDefinition` instead */\nexport type SupportedBiomarker = BiomarkerDefinition;\n\n/**\n * All supported biomarker definitions\n */\nexport const BIOMARKER_DEFINITIONS: BiomarkerDefinition[] = [\n // ============================================================================\n // HEART / CORACAO\n // ============================================================================\n {\n category: 'coracao',\n code: 'ApoB',\n loinc: '1884-6',\n names: {\n en: ['Apolipoprotein B', 'ApoB'],\n pt: ['Apolipoproteína B', 'ApoB'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'coracao',\n code: 'HDL',\n loinc: '2085-9',\n names: {\n en: ['HDL Cholesterol', 'HDL', 'High-Density Lipoprotein'],\n pt: ['Colesterol HDL', 'HDL', 'HDL-Colesterol'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'coracao',\n code: 'HDL_Large',\n loinc: '43729-3',\n names: {\n en: ['HDL Large', 'Large HDL Particles'],\n pt: ['HDL Grande', 'Partículas HDL Grandes'],\n },\n unit: 'nmol/L',\n },\n {\n category: 'coracao',\n code: 'CRP',\n loinc: '1988-5',\n names: {\n en: ['C-Reactive Protein', 'CRP', 'hs-CRP', 'High-Sensitivity CRP'],\n pt: ['Proteína C-Reativa', 'PCR', 'PCR-as', 'PCR Ultrassensível'],\n },\n unit: 'mg/L',\n },\n {\n category: 'coracao',\n code: 'LDL',\n loinc: '2089-1',\n names: {\n en: ['LDL Cholesterol', 'LDL', 'Low-Density Lipoprotein'],\n pt: ['Colesterol LDL', 'LDL', 'LDL-Colesterol'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'coracao',\n code: 'LDL_Medium',\n loinc: '96735-6',\n names: {\n en: ['LDL Medium', 'Medium LDL Particles'],\n pt: ['LDL Médio', 'Partículas LDL Médias'],\n },\n unit: 'nmol/L',\n },\n {\n category: 'coracao',\n code: 'LDL_ParticleNumber',\n codeAliases: ['LDL_Particle_Number'],\n loinc: '54434-6',\n names: {\n en: ['LDL Particle Number', 'LDL-P'],\n pt: ['Número de Partículas LDL', 'LDL-P'],\n },\n unit: 'nmol/L',\n },\n {\n category: 'coracao',\n code: 'LDL_Pattern',\n loinc: '35505-7',\n names: {\n en: ['LDL Pattern', 'LDL Particle Pattern'],\n pt: ['Padrão LDL', 'Padrão de Partículas LDL'],\n },\n },\n {\n category: 'coracao',\n code: 'LDL_Peak_Size',\n loinc: '17782-4',\n names: {\n en: ['LDL Peak Size', 'LDL Particle Size'],\n pt: ['Tamanho de Pico LDL', 'Tamanho de Partícula LDL'],\n },\n unit: 'Angstrom',\n },\n {\n category: 'coracao',\n code: 'LDL_Small',\n loinc: '43727-7',\n names: {\n en: ['LDL Small', 'Small Dense LDL'],\n pt: ['LDL Pequeno', 'LDL Denso Pequeno'],\n },\n unit: 'nmol/L',\n },\n {\n // LOINC 43583-4 = \"Lipoprotein a [Moles/volume] in Serum or Plasma\" (nmol/L).\n // Anteriormente 10835-7 (\"Lipoprotein a [Mass/volume]\", mg/dL),\n // incompatível com a unidade nmol/L declarada. SBC 2025 recomenda\n // ensaio independente de isoforma reportado em nmol/L.\n category: 'coracao',\n code: 'Lipoprotein_a',\n loinc: '43583-4',\n names: {\n en: ['Lipoprotein (a)', 'Lp(a)'],\n pt: ['Lipoproteína (a)', 'Lp(a)'],\n },\n unit: 'nmol/L',\n },\n {\n category: 'coracao',\n code: 'NonHDL_Cholesterol',\n codeAliases: ['UNKNOWN_Colesterol_no_HDL', 'UNKNOWN_Colesterol_No_HDL'],\n loinc: '43396-1',\n names: {\n en: ['Non-HDL Cholesterol', 'Non HDL Cholesterol', 'NonHDL Cholesterol', 'Non-HDL-C'],\n pt: ['Colesterol Não-HDL', 'Colesterol no HDL', 'Colesterol não HDL', 'Colesterol Non-HDL'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'coracao',\n code: 'Cholesterol',\n loinc: '2093-3',\n names: {\n en: ['Total Cholesterol', 'Cholesterol'],\n pt: ['Colesterol Total', 'Colesterol'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'coracao',\n code: 'Cholesterol_HDL_Ratio',\n codeAliases: ['CholHDL_Ratio'],\n loinc: '9830-1',\n names: {\n en: [\n 'Total Cholesterol / HDL Ratio',\n 'Cholesterol/HDL Ratio',\n 'Chol/HDL Ratio',\n 'CholHDL Ratio',\n 'Cholesterol HDL Ratio',\n 'Chol/HDLC Ratio',\n 'CHOL/HDLC RATIO',\n ],\n pt: ['Razão Colesterol Total / HDL', 'Razão Colesterol/HDL'],\n },\n unit: 'razão',\n },\n {\n category: 'coracao',\n code: 'Triglycerides',\n loinc: '2571-8',\n names: {\n en: ['Triglycerides'],\n pt: ['Triglicerídeos', 'Triglicérides'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'coracao',\n code: 'VLDL',\n codeAliases: ['VLDL_Cholesterol'],\n loinc: '13458-5',\n names: {\n en: ['VLDL Cholesterol', 'VLDL'],\n pt: ['Colesterol VLDL', 'VLDL'],\n },\n unit: 'mg/dL',\n },\n\n // ============================================================================\n // CORONARY ARTERY CALCIUM (CAC) SCORE\n // ============================================================================\n {\n category: 'coracao',\n code: 'CAC',\n hidden: true,\n names: {\n en: [\n 'Coronary Artery Calcium Score',\n 'CAC Score',\n 'Calcium Score',\n 'Agatston Score',\n 'Total Agatston Score',\n 'CT Calcium Score',\n 'Total Coronary Calcium Score',\n ],\n pt: [\n 'Escore de Cálcio Coronariano',\n 'Escore de Cálcio',\n 'Escore CAC',\n 'Escore Agatston',\n 'Escore de Cálcio Total',\n 'Cálcio Coronariano',\n ],\n },\n unit: 'AU',\n },\n {\n category: 'coracao',\n code: 'CAC_LMA',\n hidden: true,\n names: {\n en: ['Left Main Artery Calcium', 'LMA Calcium Score', 'Left Main Calcium'],\n pt: ['Cálcio Tronco Coronária Esquerda', 'Cálcio TCE', 'Cálcio Artéria Coronária Esquerda'],\n },\n unit: 'AU',\n },\n {\n category: 'coracao',\n code: 'CAC_LAD',\n hidden: true,\n names: {\n en: ['Left Anterior Descending Calcium', 'LAD Calcium Score', 'LAD Calcium'],\n pt: [\n 'Cálcio Descendente Anterior Esquerda',\n 'Cálcio DA',\n 'Cálcio Artéria Descendente Anterior',\n ],\n },\n unit: 'AU',\n },\n {\n category: 'coracao',\n code: 'CAC_LCX',\n hidden: true,\n names: {\n en: ['Left Circumflex Calcium', 'LCX Calcium Score', 'LCX Calcium', 'Circumflex Calcium'],\n pt: ['Cálcio Circunflexa', 'Cálcio CX', 'Cálcio Artéria Circunflexa'],\n },\n unit: 'AU',\n },\n {\n category: 'coracao',\n code: 'CAC_RCA',\n hidden: true,\n names: {\n en: ['Right Coronary Artery Calcium', 'RCA Calcium Score', 'RCA Calcium'],\n pt: ['Cálcio Coronária Direita', 'Cálcio CD', 'Cálcio Artéria Coronária Direita'],\n },\n unit: 'AU',\n },\n {\n category: 'coracao',\n code: 'CAC_Percentile',\n names: {\n en: [\n 'CAC Percentile',\n 'MESA Percentile',\n 'Calcium Score Percentile',\n 'Age-Sex-Ethnicity Percentile',\n ],\n pt: ['Percentil CAC', 'Percentil MESA', 'Percentil do Escore de Cálcio'],\n },\n unit: '%',\n },\n {\n category: 'coracao',\n code: 'AorticValveCalcium',\n hidden: true,\n names: {\n en: ['Aortic Valve Calcium Score', 'Aortic Valve Calcium', 'AVC Score'],\n pt: ['Cálcio Valva Aórtica', 'Escore de Cálcio Valva Aórtica', 'Cálcio Válvula Aórtica'],\n },\n unit: 'AU',\n },\n\n {\n category: 'coracao',\n code: 'ApoA1',\n codeAliases: ['Apolipoprotein_A1'],\n loinc: '1869-7',\n names: {\n en: ['Apolipoprotein A-1', 'ApoA1', 'Apo A-I', 'Apolipoprotein A1'],\n pt: ['Apolipoproteína A-1', 'ApoA1', 'Apo A-I'],\n },\n unit: 'mg/dL',\n },\n\n // ============================================================================\n // THYROID / TIREOIDE\n // ============================================================================\n {\n category: 'tireoide',\n code: 'AntiThyroglobulin',\n loinc: '8098-6',\n names: {\n en: [\n 'Thyroglobulin Antibodies',\n 'Anti-TgAb',\n 'TgAb',\n 'Anti-Thyroglobulin Antibody',\n 'Anti-Thyroglobulin Antibodies',\n ],\n pt: [\n 'Anticorpos Anti-Tireoglobulina',\n 'Anti-Tg',\n 'TgAb',\n 'Anti-Tiroglobulina',\n 'Antic anti-tiroglobulina',\n 'Anticorpos Antitireoglobulina',\n ],\n },\n unit: 'IU/mL',\n },\n {\n category: 'tireoide',\n code: 'AntiTPO',\n loinc: '8099-4',\n names: {\n en: ['Thyroid Peroxidase Antibodies', 'TPO Antibodies', 'Anti-TPO'],\n pt: ['Anticorpos Anti-Peroxidase Tireoidiana', 'Anti-TPO', 'TPO'],\n },\n unit: 'IU/mL',\n },\n {\n category: 'tireoide',\n code: 'TSH',\n loinc: '3016-3',\n names: {\n en: ['Thyroid-Stimulating Hormone', 'TSH', 'Thyrotropin'],\n pt: ['Hormônio Tireoestimulante', 'TSH', 'Tireotrofina'],\n },\n unit: 'uIU/mL',\n },\n {\n category: 'tireoide',\n code: 'T4Free',\n loinc: '3024-7',\n names: {\n en: ['Thyroxine Free', 'Free T4', 'T4 Free', 'T4, Free', 'T4 FREE'],\n pt: ['Tiroxina Livre', 'T4 Livre'],\n },\n unit: 'ng/dL',\n },\n {\n category: 'tireoide',\n code: 'Thyroglobulin',\n // 3013-0 é a tireoglobulina sérica em massa/volume (ng/mL), a forma que o\n // laboratório reporta. Não a de moles/volume (14918-7) nem os painéis.\n loinc: '3013-0',\n names: {\n en: ['Thyroglobulin', 'Tg'],\n pt: ['Tireoglobulina', 'Tg'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'tireoide',\n code: 'T3Free',\n loinc: '3051-0',\n names: {\n en: ['Triiodothyronine Free', 'Free T3', 'T3 Free', 'T3, Free', 'T3 FREE'],\n pt: ['Triiodotironina Livre', 'T3 Livre'],\n },\n unit: 'pg/mL',\n },\n {\n category: 'tireoide',\n code: 'T4Total',\n codeAliases: ['Tiroxina_T4', 'Thyroxine_T4_serum'],\n loinc: '3026-2',\n names: {\n en: ['Thyroxine', 'T4 Total', 'Total T4', 'Thyroxine (T4)', 'Thyroxine (T4), serum'],\n pt: ['Tiroxina', 'T4 Total', 'Tiroxina Total', 'Tiroxina (T4)'],\n },\n unit: 'ug/dL',\n },\n\n // ============================================================================\n // AUTOIMMUNITY / AUTOIMUNIDADE\n // ============================================================================\n {\n category: 'autoimunidade',\n code: 'ANA_Screen',\n loinc: '8061-4',\n names: {\n en: ['Antinuclear Antibodies Screen', 'ANA Screen'],\n pt: ['Triagem de Anticorpos Antinucleares', 'FAN Triagem'],\n },\n },\n {\n category: 'autoimunidade',\n code: 'RheumatoidFactor',\n loinc: '11572-5',\n names: {\n en: ['Rheumatoid Factor', 'RF'],\n pt: ['Fator Reumatoide', 'FR'],\n },\n unit: 'IU/mL',\n },\n\n // ============================================================================\n // IMMUNE REGULATION / REGULACAO-IMUNOLOGICA\n // ============================================================================\n {\n category: 'regulacao-imunologica',\n code: 'Basophils',\n loinc: '706-2',\n names: {\n en: ['Basophils', 'Basophils %'],\n pt: ['Basófilos', 'Basófilos %'],\n },\n unit: '%',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Basophils_Abs',\n hidden: true,\n loinc: '704-7',\n names: {\n en: ['Absolute Basophils', 'Basophils Absolute'],\n pt: ['Basófilos Absolutos'],\n },\n unit: 'K/uL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Eosinophils',\n loinc: '713-8',\n names: {\n en: ['Eosinophils', 'Eosinophils %'],\n pt: ['Eosinófilos', 'Eosinófilos %'],\n },\n unit: '%',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Eosinophils_Abs',\n hidden: true,\n loinc: '711-2',\n names: {\n en: ['Absolute Eosinophils', 'Eosinophils Absolute'],\n pt: ['Eosinófilos Absolutos'],\n },\n unit: 'K/uL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Lymphocytes',\n loinc: '736-9',\n names: {\n en: ['Lymphocytes', 'Lymphocytes %'],\n pt: ['Linfócitos', 'Linfócitos %'],\n },\n unit: '%',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Lymphocytes_Abs',\n hidden: true,\n loinc: '731-0',\n names: {\n en: ['Absolute Lymphocytes', 'Lymphocytes Absolute'],\n pt: ['Linfócitos Absolutos'],\n },\n unit: 'K/uL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Monocytes',\n loinc: '5905-5',\n names: {\n en: ['Monocytes', 'Monocytes %'],\n pt: ['Monócitos', 'Monócitos %'],\n },\n unit: '%',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Monocytes_Abs',\n hidden: true,\n loinc: '742-7',\n names: {\n en: ['Absolute Monocytes', 'Monocytes Absolute'],\n pt: ['Monócitos Absolutos'],\n },\n unit: 'K/uL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Neutrophils',\n loinc: '770-8',\n names: {\n en: ['Neutrophils', 'Neutrophils %'],\n // \"Segmentados\" é como o hemograma brasileiro automatizado imprime os\n // neutrófilos: o bastonete só aparece quando passa de um limiar (o\n // Weinmann informa acima de 5%), e a linha \"Segmentados\" carrega a\n // contagem. Sem o nome, a leitura de histórico do laudo evolutivo saía\n // `UNKNOWN_Segmentados`. A unidade (/µL) é que separa o absoluto.\n pt: ['Neutrófilos', 'Neutrófilos %', 'Neutrófilos Segmentados', 'Segmentados'],\n },\n unit: '%',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Neutrophils_Abs',\n hidden: true,\n loinc: '751-8',\n names: {\n en: ['Absolute Neutrophils', 'Neutrophils Absolute'],\n pt: ['Neutrófilos Absolutos'],\n },\n unit: 'K/uL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'WBC',\n loinc: '6690-2',\n names: {\n en: ['White Blood Cell Count', 'WBC', 'Leukocytes'],\n pt: ['Contagem de Leucócitos', 'Leucócitos', 'Glóbulos Brancos'],\n },\n unit: 'K/uL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'IgA',\n loinc: '2458-8',\n names: {\n en: ['Immunoglobulin A', 'IgA', 'Serum IgA'],\n pt: ['Imunoglobulina A', 'IgA'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'IgG',\n codeAliases: ['IgG_Immunoglobulin', 'Immunoglobulin_G'],\n loinc: '2465-3',\n names: {\n en: ['Immunoglobulin G', 'IgG', 'Serum IgG'],\n pt: ['Imunoglobulina G', 'IgG'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'IgE_Total',\n codeAliases: ['IgE_Immunoglobulin', 'Total_IgE'],\n loinc: '19113-0',\n names: {\n en: ['Total IgE', 'IgE', 'Immunoglobulin E', 'IgE Total'],\n pt: ['IgE Total', 'Imunoglobulina E', 'IgE'],\n },\n unit: 'IU/mL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'IgE_E1_CatDander',\n codeAliases: ['IgE_Cat_Dander', 'IgE_E1', 'IgE_Specific_E1__Cat_Dander'],\n loinc: '6833-8',\n names: {\n en: ['IgE E1 Cat Dander', 'Cat Dander IgE', 'Cat Allergy IgE', 'IgE Cat Epithelium'],\n pt: ['IgE E1 Epitélio de Gato', 'IgE Gato', 'Alergia a Gato IgE'],\n },\n unit: 'kU/L',\n },\n {\n category: 'regulacao-imunologica',\n code: 'IgE_GX1_Grasses',\n codeAliases: ['IgE_GX1', 'IgE_Grass_Pollen', 'IgE_Specific_GX1__Grasses'],\n loinc: '30189-5',\n names: {\n en: ['IgE GX1 Grasses', 'Grass Pollen IgE', 'Grass Mix IgE', 'IgE GX1 Grass Pollen Mix'],\n pt: ['IgE GX1 Gramíneas', 'IgE Pólen de Gramíneas', 'Painel de Gramíneas IgE'],\n },\n unit: 'kU/L',\n },\n\n // ============================================================================\n // WOMEN'S HEALTH / SAUDE-FEMININA\n // ============================================================================\n {\n category: 'saude-feminina',\n code: 'AMH',\n loinc: '38476-8',\n names: {\n en: ['Anti-Mullerian Hormone', 'AMH'],\n pt: ['Hormônio Anti-Mülleriano', 'AMH'],\n },\n sex: 'female',\n unit: 'ng/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'DHEAS',\n loinc: '2191-5',\n names: {\n en: ['DHEA-Sulfate', 'DHEAS', 'DHEA-S', 'DHEA Sulfate'],\n pt: ['DHEA-Sulfato', 'DHEAS', 'Sulfato de DHEA'],\n },\n unit: 'mcg/dL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'Estradiol',\n loinc: '2243-4',\n names: {\n en: ['Estradiol', 'E2'],\n pt: ['Estradiol', 'E2'],\n },\n unit: 'pg/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'Estrone',\n // Sem loinc de propósito. Em soro/massa-volume a LOINC só tem a forma\n // \"unconjugated\" (2261-6) e razões; não há conceito de estrona total\n // sérica. Atribuir a não-conjugada a um laudo de estrona total mediria\n // outra fração — o mesmo tipo de erro que descartou candidatos nas 22\n // primeiras. Entra sem código, política já usada em FatFreeMass e BMC.\n names: {\n en: ['Estrone', 'E1'],\n pt: ['Estrona', 'E1'],\n },\n unit: 'pg/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'FSH',\n loinc: '15067-2',\n names: {\n en: ['Follicle Stimulating Hormone', 'FSH'],\n pt: ['Hormônio Folículo-Estimulante', 'FSH', 'Folitropina'],\n },\n unit: 'mIU/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'LH',\n loinc: '10501-5',\n names: {\n en: ['Luteinizing Hormone', 'LH'],\n pt: ['Hormônio Luteinizante', 'LH', 'Lutropina'],\n },\n unit: 'mIU/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'Prolactin',\n loinc: '2842-3',\n names: {\n en: ['Prolactin'],\n pt: ['Prolactina'],\n },\n unit: 'ng/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'SHBG',\n loinc: '13967-5',\n names: {\n en: ['Sex Hormone Binding Globulin', 'SHBG'],\n pt: ['Globulina Ligadora de Hormônios Sexuais', 'SHBG'],\n },\n unit: 'nmol/L',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'TestosteroneFree',\n loinc: '2991-8',\n names: {\n en: [\n 'Testosterone Free',\n 'Free Testosterone',\n 'Testosterone, Free',\n 'Testosterone (Free)',\n 'Testosterone Free (Direct)',\n 'Free Testosterone (Direct)',\n ],\n pt: ['Testosterona Livre'],\n },\n unit: 'pg/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'Testosterone',\n loinc: '2986-8',\n names: {\n en: ['Testosterone Total', 'Testosterone'],\n pt: ['Testosterona Total', 'Testosterona'],\n },\n unit: 'ng/dL',\n },\n {\n category: 'saude-feminina',\n code: 'Progesterone',\n loinc: '2839-9',\n names: {\n en: ['Progesterone'],\n pt: ['Progesterona'],\n },\n sex: 'female',\n unit: 'ng/mL',\n },\n\n // ============================================================================\n // MEN'S HEALTH / SAUDE-MASCULINA\n // ============================================================================\n {\n category: 'saude-masculina',\n code: 'PSA',\n loinc: '2857-1',\n names: {\n en: ['Prostate Specific Antigen', 'PSA', 'PSA Total'],\n pt: ['Antígeno Prostático Específico', 'PSA', 'PSA Total'],\n },\n sex: 'male',\n unit: 'ng/mL',\n },\n {\n category: 'saude-masculina',\n code: 'PSA_Free',\n loinc: '10886-0',\n names: {\n en: ['Prostate Specific Antigen Free', 'PSA Free', 'Free PSA'],\n pt: ['PSA Livre', 'Antígeno Prostático Específico Livre'],\n },\n sex: 'male',\n unit: 'ng/mL',\n },\n {\n category: 'saude-masculina',\n code: 'PSA_FreeRatio',\n loinc: '12841-3',\n names: {\n en: ['PSA Free/Total Ratio', 'PSA % Free', 'Free PSA Ratio', 'PSA, % Free'],\n pt: ['Relação PSA Livre/Total', 'PSA % Livre', 'Razão PSA Livre'],\n },\n sex: 'male',\n unit: '%',\n },\n {\n category: 'hormonios',\n code: 'DHT',\n codeAliases: ['Dihydrotestosterone'],\n loinc: '1848-1',\n names: {\n en: ['Dihydrotestosterone', 'DHT', 'Androstanolone'],\n pt: ['Diidrotestosterona', 'DHT'],\n },\n unit: 'ng/dL',\n },\n\n // ============================================================================\n // METABOLIC / METABOLICO\n // ============================================================================\n // Glicose e glicemia de jejum são duas definições, e a linha entre elas é o\n // que o laudo **afirma**, não o que provavelmente aconteceu.\n //\n // No LOINC a diferença está no eixo do componente: `2345-7` é `Glucose` e\n // `1558-6` é `Glucose^post CFst`, com o desafio de jejum declarado. Laudo que\n // imprime só \"Glicose\" não afirma jejum nenhum, mesmo quando a faixa impressa\n // ao lado é de jejum e mesmo sendo jejum na esmagadora maioria dos painéis\n // ambulatoriais brasileiros. Codificar essa linha como `1558-6` afirmaria um\n // jejum de oito horas que ninguém declarou.\n //\n // As duas estavam fundidas numa definição só, que carregava `2345-7` e uma\n // faixa `fastingRequired: 'strict'`: o código dizia genérico e a faixa dizia\n // jejum. A grafia é que decide agora.\n {\n category: 'metabolico',\n code: 'Glucose',\n loinc: '2345-7',\n names: {\n en: ['Glucose', 'Blood Glucose', 'Random Glucose'],\n pt: ['Glicose', 'Glicemia'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'metabolico',\n code: 'Glucose_Fasting',\n loinc: '1558-6',\n names: {\n en: ['Fasting Glucose', 'Fasting Blood Glucose', 'Glucose, Fasting'],\n pt: ['Glicemia de Jejum', 'Glicose de Jejum', 'Glicemia em Jejum'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'metabolico',\n code: 'HbA1c',\n loinc: '4548-4',\n names: {\n en: ['Hemoglobin A1c', 'HbA1c', 'Glycated Hemoglobin'],\n pt: ['Hemoglobina Glicada', 'HbA1c', 'Hemoglobina Glicosilada'],\n },\n unit: '%',\n },\n {\n category: 'metabolico',\n code: 'eAG',\n codeAliases: ['Estimated_Average_Glucose'],\n loinc: '27353-2',\n names: {\n en: ['Estimated Average Glucose', 'eAG', 'Mean Glucose'],\n pt: ['Glicemia Média Estimada', 'GME', 'Glicose Média Estimada'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'metabolico',\n code: 'Insulin',\n loinc: '20448-7',\n names: {\n en: ['Insulin', 'Fasting Insulin'],\n pt: ['Insulina', 'Insulina de Jejum'],\n },\n unit: 'uIU/mL',\n },\n {\n category: 'metabolico',\n code: 'HOMA_IR',\n loinc: '47214-2',\n names: {\n en: ['HOMA-IR', 'Homeostatic Model Assessment for Insulin Resistance'],\n pt: ['HOMA-IR', 'Índice HOMA'],\n },\n unit: 'índice',\n },\n {\n category: 'metabolico',\n code: 'Leptin',\n loinc: '21365-2',\n names: {\n en: ['Leptin'],\n pt: ['Leptina'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'metabolico',\n code: 'UricAcid',\n loinc: '3084-1',\n names: {\n en: ['Uric Acid', 'Urate'],\n pt: ['Ácido Úrico'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'metabolico',\n code: 'CK',\n codeAliases: ['Creatine_Kinase', 'CK_Total'],\n loinc: '2157-6',\n names: {\n en: ['Creatine Kinase', 'CK', 'CPK', 'CK Total', 'Creatine Phosphokinase'],\n pt: ['Creatina Quinase', 'CK', 'CPK', 'Creatinoquinase', 'CK Total'],\n },\n unit: 'U/L',\n },\n\n // ============================================================================\n // ENVIRONMENTAL TOXINS / TOXINAS-AMBIENTAIS\n // ============================================================================\n {\n category: 'toxinas-ambientais',\n code: 'Lead',\n loinc: '77307-7',\n names: {\n en: ['Lead', 'Blood Lead'],\n pt: ['Chumbo', 'Chumbo no Sangue'],\n },\n unit: 'mcg/dL',\n },\n {\n category: 'toxinas-ambientais',\n code: 'Mercury',\n loinc: '5685-3',\n names: {\n en: ['Mercury', 'Blood Mercury'],\n pt: ['Mercúrio', 'Mercúrio no Sangue'],\n },\n unit: 'mcg/L',\n },\n\n // ============================================================================\n // NUTRIENTS / NUTRIENTES\n // ============================================================================\n {\n category: 'nutrientes',\n code: 'AA_EPA_Ratio',\n codeAliases: ['Arachidonic_AcidEPA_Ratio'],\n loinc: '90909-3',\n names: {\n en: ['Arachidonic Acid/EPA Ratio', 'AA/EPA Ratio', 'Arachidonic Acid EPA Ratio'],\n pt: ['Razão Ácido Araquidônico/EPA', 'Razão AA/EPA'],\n },\n unit: 'razão',\n },\n {\n category: 'nutrientes',\n code: 'Calcium',\n loinc: '17861-6',\n names: {\n en: ['Calcium', 'Serum Calcium'],\n pt: ['Cálcio', 'Cálcio Sérico'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'nutrientes',\n code: 'Ferritin',\n loinc: '2276-4',\n names: {\n en: ['Ferritin'],\n pt: ['Ferritina'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'nutrientes',\n code: 'Folate',\n loinc: '2284-8',\n names: {\n en: ['Folate', 'Folic Acid', 'Serum Folate'],\n pt: ['Folato', 'Ácido Fólico', 'Folato Sérico', 'Ac. Fólico', 'Dosagem de Ácido Fólico'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'nutrientes',\n code: 'Homocysteine',\n loinc: '13965-9',\n names: {\n en: ['Homocysteine'],\n pt: ['Homocisteína'],\n },\n unit: 'umol/L',\n },\n {\n category: 'nutrientes',\n code: 'Iron',\n loinc: '2498-4',\n names: {\n en: ['Iron', 'Serum Iron'],\n pt: ['Ferro', 'Ferro Sérico'],\n },\n unit: 'mcg/dL',\n },\n {\n category: 'nutrientes',\n code: 'TransferrinSaturation',\n codeAliases: ['Saturation_of_Transferrin'],\n loinc: '2502-3',\n names: {\n en: [\n 'Iron Saturation',\n 'Transferrin Saturation',\n 'TSAT',\n '% Saturation',\n 'Iron % Saturation',\n 'Saturation',\n 'Saturation of Transferrin',\n ],\n pt: [\n 'Saturação de Ferro',\n 'Saturação de Transferrina',\n 'IST',\n '% Saturação',\n 'Ferro - Grau de Saturação',\n 'Grau de Saturação do Ferro',\n ],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'TIBC',\n loinc: '2500-7',\n names: {\n en: ['Iron Binding Capacity', 'TIBC', 'Total Iron Binding Capacity'],\n pt: [\n 'Capacidade de Ligação do Ferro',\n 'TIBC',\n 'CTLFe',\n 'Capacidade Total de Ligação do Ferro',\n 'Ferro - Capac Total ligação',\n ],\n },\n unit: 'mcg/dL',\n },\n {\n category: 'nutrientes',\n code: 'Magnesium_RBC',\n loinc: '26746-8',\n names: {\n en: [\n 'Magnesium RBC',\n 'Magnesium Red Blood Cells',\n 'RBC Magnesium',\n 'Magnesium, RBC',\n 'Magnesium (RBC)',\n ],\n pt: ['Magnésio RBC', 'Magnésio Eritrocitário', 'Magnésio Intraeritrocitário'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'nutrientes',\n code: 'Magnesium',\n // Magnésio sérico em massa/volume. Distinto do Magnesium_RBC (26746-8),\n // que mede a fração intraeritrocitária.\n loinc: '19123-9',\n names: {\n en: ['Magnesium', 'Serum Magnesium', 'Magnesium, Serum', 'Magnesium Total'],\n pt: ['Magnésio', 'Magnésio Sérico', 'Magnésio Total'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'nutrientes',\n code: 'MMA',\n loinc: '13964-2',\n names: {\n en: ['Methylmalonic Acid', 'MMA'],\n pt: ['Ácido Metilmalônico', 'MMA'],\n },\n unit: 'nmol/L',\n },\n {\n // LOINC 99620-7 = \"Omega 3 fatty acids (w3) [Moles/volume] in RBC.lysate\".\n // Alinha à matriz das entradas irmãs Omega3_EPA (75097-6) e Omega3_DHA\n // (75095-0), ambas em hemácias. Anteriormente 35178-3 (mesmo analito em\n // Ser/Plas), incompatível com o uso clínico do Índice Ômega-3 (Harris &\n // von Schacky 2004), que é definido em membranas de hemácias.\n // Ressalva: LOINC declara moles/volume; o biomarcador armazena %.\n // Não há LOINC vigente para \"Omega 3 total em % em RBC\" — o `Omega3_Index`\n // (88998-0) cobre apenas EPA+DHA. Mantemos `unit: '%'` por consistência\n // com EPA/DHA (75095-0/75097-6 são [Entitic substance], também não-%).\n category: 'nutrientes',\n code: 'Omega3_Total',\n loinc: '99620-7',\n names: {\n en: ['Omega-3 Total', 'Total Omega-3'],\n pt: ['Ômega-3 Total'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'Omega3_DHA',\n codeAliases: ['DHA'],\n loinc: '75095-0',\n names: {\n en: ['Omega-3 DHA', 'DHA', 'Docosahexaenoic Acid'],\n pt: ['Ômega-3: DHA', 'DHA', 'Ácido Docosahexaenoico'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'Omega3_DPA',\n codeAliases: ['DPA'],\n loinc: '48371-9',\n names: {\n en: ['Omega-3 DPA', 'DPA', 'Docosapentaenoic Acid'],\n pt: ['Ômega-3: DPA', 'DPA', 'Ácido Docosapentaenoico'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'Omega3_EPA',\n codeAliases: ['EPA'],\n loinc: '75097-6',\n names: {\n en: ['Omega-3 EPA', 'EPA', 'Eicosapentaenoic Acid'],\n pt: ['Ômega-3: EPA', 'EPA', 'Ácido Eicosapentaenoico'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'EPADPADHA',\n loinc: '90908-5',\n names: {\n en: ['Omega-3 EPA+DPA+DHA', 'EPA+DPA+DHA'],\n pt: ['Ômega-3: EPA+DPA+DHA'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'Omega6_Omega3_Ratio',\n codeAliases: ['Omega6Omega3_Ratio'],\n loinc: '90910-1',\n names: {\n en: ['Omega-6/Omega-3 Ratio'],\n pt: ['Razão Ômega-6 / Ômega-3'],\n },\n unit: 'razão',\n },\n {\n category: 'nutrientes',\n code: 'Omega6_Total',\n loinc: '35177-5',\n names: {\n en: ['Omega-6 Total', 'Total Omega-6'],\n pt: ['Ômega-6 Total'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'Omega6_AA',\n codeAliases: ['Arachidonic_Acid'],\n loinc: '75110-7',\n names: {\n en: ['Omega-6 Arachidonic Acid', 'Arachidonic Acid', 'AA'],\n pt: ['Ômega-6: Ácido Araquidônico', 'Ácido Araquidônico', 'AA'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'Omega6_LA',\n codeAliases: ['Linoleic_Acid'],\n loinc: '75117-2',\n names: {\n en: ['Omega-6 Linoleic Acid', 'Linoleic Acid', 'LA'],\n pt: ['Ômega-6: Ácido Linoleico', 'Ácido Linoleico', 'LA'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'VitaminA',\n loinc: '2923-1',\n names: {\n en: ['Vitamin A', 'Retinol', 'Serum Retinol'],\n pt: ['Vitamina A', 'Retinol', 'Retinol Sérico', 'Vit A', 'Vit. A', 'Dosagem de Vitamina A'],\n },\n unit: 'mcg/dL',\n },\n {\n category: 'nutrientes',\n code: 'VitaminB12',\n loinc: '2132-9',\n names: {\n en: ['Vitamin B12', 'Cobalamin', 'B12', 'Cyanocobalamin'],\n pt: [\n 'Vitamina B12',\n 'Vitamina B-12',\n 'Cobalamina',\n 'B12',\n 'Cianocobalamina',\n 'Vit B12',\n 'Vit. B12',\n 'Dosagem de Vitamina B12',\n ],\n },\n unit: 'pg/mL',\n },\n {\n category: 'nutrientes',\n code: 'VitaminC',\n loinc: '1903-4',\n names: {\n en: ['Vitamin C', 'Ascorbic Acid'],\n pt: [\n 'Vitamina C',\n 'Ácido Ascórbico',\n 'Vit C',\n 'Vit. C',\n 'Dosagem de Vitamina C',\n 'Dosagem de Ácido Ascórbico',\n ],\n },\n unit: 'mg/dL',\n },\n {\n category: 'nutrientes',\n code: 'VitaminD',\n // 62292-8 é 25(OH)D2 + 25(OH)D3, o total que os imunoensaios reportam\n // como \"Vitamina D 25-OH\". Até set/2026 apontava para 1989-3, que é só\n // a fração D3: nome parecido, analito diferente.\n loinc: '62292-8',\n names: {\n en: [\n 'Vitamin D',\n '25-Hydroxy Vitamin D',\n '25-OH Vitamin D',\n 'Vitamin D, 25-Hydroxy',\n '25-Hydroxy Vitamin D, Total',\n ],\n pt: [\n 'Vitamina D',\n '25-Hidroxivitamina D',\n '25-OH Vitamina D',\n 'Vitamina D, 25-Hidroxi',\n '25-Hidroxi Vitamina D',\n ],\n },\n unit: 'ng/mL',\n },\n {\n category: 'nutrientes',\n code: 'Zinc',\n loinc: '8245-3',\n names: {\n en: ['Zinc', 'Serum Zinc'],\n pt: ['Zinco'],\n },\n unit: 'mcg/dL',\n },\n\n // ============================================================================\n // STRESS & AGING / ESTRESSE-ENVELHECIMENTO\n // ============================================================================\n {\n category: 'estresse-envelhecimento',\n code: 'Cortisol',\n loinc: '2143-6',\n names: {\n en: ['Cortisol', 'Serum Cortisol'],\n pt: ['Cortisol'],\n },\n unit: 'mcg/dL',\n },\n\n // ============================================================================\n // LIVER / FIGADO\n // ============================================================================\n {\n category: 'figado',\n code: 'ALT',\n loinc: '1742-6',\n names: {\n en: ['Alanine Transaminase', 'ALT', 'SGPT'],\n pt: [\n 'Alanina Aminotransferase',\n 'ALT',\n 'TGP',\n 'Transaminase Glutâmico-Pirúvica',\n 'Transaminase Pirúvica',\n 'TGP/ALT',\n ],\n },\n unit: 'U/L',\n },\n {\n category: 'figado',\n code: 'Albumin',\n loinc: '1751-7',\n names: {\n en: ['Albumin', 'Serum Albumin'],\n pt: ['Albumina'],\n },\n unit: 'g/dL',\n },\n {\n category: 'figado',\n code: 'Albumin_Globulin_Ratio',\n codeAliases: ['AG_Ratio'],\n loinc: '1759-0',\n names: {\n en: ['Albumin/Globulin Ratio', 'A/G Ratio'],\n pt: ['Razão Albumina / Globulina', 'Razão A/G'],\n },\n unit: 'razão',\n },\n {\n category: 'figado',\n code: 'AlkalinePhosphatase',\n loinc: '6768-6',\n names: {\n en: ['Alkaline Phosphatase', 'ALP'],\n pt: ['Fosfatase Alcalina', 'ALP'],\n },\n unit: 'U/L',\n },\n {\n category: 'figado',\n code: 'AST',\n loinc: '1920-8',\n names: {\n en: ['Aspartate Aminotransferase', 'AST', 'SGOT'],\n pt: [\n 'Aspartato Aminotransferase',\n 'AST',\n 'TGO',\n 'Transaminase Glutâmico-Oxalacética',\n 'Transaminase Oxalacética',\n 'TGO/AST',\n ],\n },\n unit: 'U/L',\n },\n {\n category: 'figado',\n code: 'GGT',\n loinc: '2324-2',\n names: {\n en: ['Gamma-glutamyl Transferase', 'GGT', 'Gamma GT'],\n pt: ['Gama-Glutamil Transferase', 'GGT', 'Gama GT', 'Gama Glutamiltransferase', 'Gama-GT'],\n },\n unit: 'U/L',\n },\n {\n category: 'figado',\n code: 'Globulin',\n loinc: '2336-6',\n names: {\n en: ['Globulin', 'Serum Globulin'],\n pt: ['Globulina'],\n },\n unit: 'g/dL',\n },\n {\n category: 'figado',\n code: 'TotalProtein',\n loinc: '2885-2',\n names: {\n en: ['Total Protein', 'Serum Protein'],\n pt: ['Proteína Total', 'Proteínas Totais'],\n },\n unit: 'g/dL',\n },\n {\n category: 'figado',\n code: 'BilirubinTotal',\n loinc: '1975-2',\n names: {\n en: ['Total Bilirubin', 'Bilirubin Total', 'Bilirubin, Total', 'BILIRUBIN TOTAL'],\n pt: ['Bilirrubina Total'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'figado',\n code: 'BilirubinDirect',\n codeAliases: ['Bilirubin_Direct', 'Direct_Bilirubin', 'Bilirrubina_Direta'],\n loinc: '1968-7',\n names: {\n en: ['Direct Bilirubin', 'Bilirubin Direct', 'Conjugated Bilirubin'],\n pt: ['Bilirrubina Direta', 'Bilirrubina Conjugada'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'figado',\n code: 'BilirubinIndirect',\n codeAliases: ['Bilirubin_Indirect', 'Indirect_Bilirubin', 'Bilirrubina_Indireta'],\n loinc: '1971-1',\n names: {\n en: ['Indirect Bilirubin', 'Bilirubin Indirect', 'Unconjugated Bilirubin'],\n pt: ['Bilirrubina Indireta', 'Bilirrubina Não Conjugada'],\n },\n unit: 'mg/dL',\n },\n\n // ============================================================================\n // BLOOD / SANGUE\n // ============================================================================\n {\n category: 'sangue',\n code: 'Hct',\n loinc: '4544-3',\n names: {\n en: ['Hematocrit', 'Hct', 'HCT'],\n pt: ['Hematócrito', 'Hct'],\n },\n unit: '%',\n },\n {\n category: 'sangue',\n code: 'Hgb',\n loinc: '718-7',\n names: {\n en: ['Hemoglobin', 'Hgb', 'HGB'],\n pt: ['Hemoglobina', 'Hgb'],\n },\n unit: 'g/dL',\n },\n {\n category: 'sangue',\n code: 'MCH',\n loinc: '785-6',\n names: {\n en: ['Mean Corpuscular Hemoglobin', 'MCH'],\n pt: ['Hemoglobina Corpuscular Média', 'HCM'],\n },\n unit: 'pg',\n },\n {\n category: 'sangue',\n code: 'MCHC',\n loinc: '786-4',\n names: {\n en: ['Mean Corpuscular Hemoglobin Concentration', 'MCHC'],\n pt: ['Concentração de Hemoglobina Corpuscular Média', 'CHCM'],\n },\n unit: 'g/dL',\n },\n {\n category: 'sangue',\n code: 'MCV',\n loinc: '787-2',\n names: {\n en: ['Mean Corpuscular Volume', 'MCV'],\n pt: ['Volume Corpuscular Médio', 'VCM'],\n },\n unit: 'fL',\n },\n {\n category: 'sangue',\n code: 'MPV',\n loinc: '32623-1',\n names: {\n en: ['Mean Platelet Volume', 'MPV'],\n pt: ['Volume Plaquetário Médio', 'VPM'],\n },\n unit: 'fL',\n },\n {\n category: 'sangue',\n code: 'Platelets',\n loinc: '777-3',\n names: {\n en: ['Platelet Count', 'Platelets'],\n pt: ['Contagem de Plaquetas', 'Plaquetas'],\n },\n unit: 'K/uL',\n },\n {\n category: 'sangue',\n code: 'RBC',\n loinc: '789-8',\n names: {\n en: ['Red Blood Cell Count', 'RBC', 'Erythrocytes'],\n pt: ['Contagem de Hemácias', 'Hemácias', 'Eritrócitos'],\n },\n unit: 'M/uL',\n },\n {\n category: 'sangue',\n code: 'RDW',\n loinc: '788-0',\n names: {\n en: ['Red Cell Distribution Width', 'RDW'],\n pt: [\n 'Amplitude de Distribuição dos Eritrócitos',\n 'RDW',\n 'Coeficiente de Variação do Volume Eritrocitário',\n ],\n },\n unit: '%',\n },\n {\n category: 'sangue',\n code: 'ABO_Group',\n hidden: true,\n loinc: '883-9',\n names: {\n en: ['ABO Group', 'ABO Blood Group', 'Blood Type ABO'],\n pt: ['Grupo ABO', 'Tipo Sanguíneo ABO', 'Grupo Sanguíneo ABO'],\n },\n },\n {\n category: 'sangue',\n code: 'Rh_Type',\n hidden: true,\n loinc: '10331-7',\n names: {\n en: ['Rh Type', 'Rh Factor', 'Rhesus Factor'],\n pt: ['Tipo Rh', 'Fator Rh', 'Fator Rhesus'],\n },\n },\n {\n category: 'sangue',\n code: 'ESR',\n codeAliases: ['Erythrocyte_Sedimentation_Rate', 'VHS'],\n loinc: '30341-2',\n names: {\n en: ['Erythrocyte Sedimentation Rate', 'ESR', 'Sed Rate'],\n pt: ['Velocidade de Hemossedimentação', 'VHS', 'VSG'],\n },\n unit: 'mm/hr',\n },\n {\n category: 'sangue',\n code: 'INR',\n codeAliases: ['International_Normalized_Ratio'],\n loinc: '6301-6',\n names: {\n en: ['International Normalized Ratio', 'INR'],\n pt: ['Razão Normalizada Internacional', 'INR', 'RNI'],\n },\n unit: 'razão',\n },\n {\n category: 'sangue',\n code: 'ProthrombinTime',\n codeAliases: ['Prothrombin_Time', 'PT_Time'],\n loinc: '5902-2',\n names: {\n en: ['Prothrombin Time', 'PT', 'Pro Time'],\n pt: ['Tempo de Protrombina', 'TP', 'TAP'],\n },\n unit: 'segundos',\n },\n {\n category: 'sangue',\n code: 'Reticulocytes',\n codeAliases: ['Reticulocyte_Count', 'Reticulocyte_Fraction'],\n loinc: '4679-7',\n names: {\n en: ['Reticulocytes', 'Reticulocyte Count', 'Reticulocyte Fraction', 'Retic Count'],\n pt: ['Reticulócitos', 'Contagem de Reticulócitos'],\n },\n unit: '%',\n },\n\n // ============================================================================\n // KIDNEYS / RINS\n // ============================================================================\n {\n category: 'rins',\n code: 'Microalbumin_Urine',\n codeAliases: ['Urine_Microalbumin'],\n loinc: '14957-5',\n names: {\n en: [\n 'Microalbumin Urine',\n 'Urine Albumin',\n 'Urine Microalbumin',\n 'Microalbumin',\n 'Microalbuminuria',\n 'Albumin, Urine',\n ],\n // Todas as formas abaixo, em pt e en, nomeiam o MESMO analito: albumina\n // dosada na urina. Não são exames diferentes.\n //\n // \"Microalbumina\" e \"microalbuminúria\" são herança de nomenclatura: o\n // prefixo micro nunca se referiu a uma molécula menor, e sim a uma\n // faixa de excreção. O analito é o mesmo, e por isso as duas formas\n // pertencem a esta entrada e não a uma separada.\n //\n // \"Albumina Urinária\" vem primeiro de propósito. O gerador do ValueSet\n // do IG usa o primeiro nome pt como display, então a ordem decide o\n // rótulo publicado — e essa é a forma que os laboratórios brasileiros\n // de fato imprimem.\n //\n // As formas foram tiradas de dado real, não inventadas: \"Albumin,\n // Urine\" e \"Albumina Urinária\" aparecem como rótulos `UNKNOWN_` na\n // auditoria de cobertura da plataforma, ou seja, chegaram em laudo e\n // não casaram com nada.\n //\n // Sem elas o pré-scan casava \"Albumina Urinária\" com `Albumin`, a\n // albumina sérica. A troca não é cosmética: albumina na urina é\n // marcador de lesão renal precoce, medida em mg/L, e a sérica é de\n // função hepática e estado nutricional, medida em g/dL.\n pt: [\n 'Albumina Urinária',\n 'Albumina Urina',\n 'Microalbumina',\n 'Microalbuminúria',\n 'Microalbumina Urina',\n 'Microalbumina na Urina',\n 'Albumina na Urina',\n ],\n },\n unit: 'mg/L',\n },\n {\n // LOINC 3091-6 = \"Urea [Mass/volume] in Serum or Plasma\" (mg/dL).\n // Anteriormente 3094-0 (\"Urea nitrogen\", BUN), inconsistente com a faixa\n // de referência brasileira (15-50 mg/dL) e com os nomes pt-BR (Ureia).\n // Aliases 'BUN' e 'Blood Urea Nitrogen' removidos para evitar matching\n // de relatórios de BUN contra faixas de Ureia (BUN ≈ Ureia / 2,14).\n category: 'rins',\n code: 'Urea',\n loinc: '3091-6',\n names: {\n en: ['Urea'],\n pt: ['Ureia', 'Uréia'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'rins',\n code: 'BUN_Creatinine_Ratio',\n loinc: '3097-3',\n names: {\n en: ['BUN/Creatinine Ratio', 'Urea/Creatinine Ratio'],\n pt: ['Razão Ureia / Creatinina'],\n },\n unit: 'razão',\n },\n {\n category: 'rins',\n code: 'Creatinine',\n loinc: '2160-0',\n names: {\n en: ['Creatinine', 'Serum Creatinine'],\n pt: ['Creatinina', 'Creatinina Sérica'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'rins',\n code: 'eGFR',\n codeAliases: ['CKDEPI_2021', 'CKDEPI_eGFR_2021', 'eGFR_CKDEPI_2021', 'eGFR_MDRD'],\n loinc: '98979-8',\n names: {\n en: [\n 'Estimated Glomerular Filtration Rate',\n 'eGFR',\n 'GFR',\n 'eGFR CKD-EPI',\n 'eGFR CKD-EPI 2021',\n 'CKD-EPI 2021',\n // O laudo imprime só \"CKD-EPI 2021\", e a extração devolve o nome com o\n // \"GFR\" na frente. Sem esta entrada o exame virava\n // `UNKNOWN_GFR_CKD_EPI_2021` num laudo do Fleury, com valor medido e\n // tudo, porque a resolução por nome não achava a forma composta.\n 'GFR CKD-EPI 2021',\n 'CKD-EPI eGFR 2021',\n 'eGFR (CKD-EPI 2021)',\n 'eGFR (MDRD)',\n 'Glomerular Filtration Rate',\n ],\n pt: [\n 'Taxa de Filtração Glomerular Estimada',\n 'TFGe',\n 'TFG',\n 'TFGe CKD-EPI',\n 'Filtração Glomerular',\n 'CKD-EPI 2021',\n 'TFGe CKD-EPI 2021',\n ],\n },\n unit: 'mL/min/1.73m²',\n },\n {\n category: 'rins',\n code: 'Potassium',\n loinc: '2823-3',\n names: {\n en: ['Potassium', 'K'],\n pt: ['Potássio', 'K'],\n },\n unit: 'mEq/L',\n },\n {\n category: 'rins',\n code: 'Sodium',\n loinc: '2951-2',\n names: {\n en: ['Sodium', 'Na'],\n pt: ['Sódio', 'Na'],\n },\n unit: 'mEq/L',\n },\n {\n category: 'rins',\n code: 'Creatinine_Urine',\n codeAliases: ['Urine_Creatinine'],\n loinc: '2161-8',\n names: {\n en: ['Creatinine Urine', 'Urine Creatinine', 'Creatinine Random Urine'],\n pt: ['Creatinina Urinária', 'Creatinina na Urina'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'rins',\n code: 'Albumin_Creatinine_Ratio',\n codeAliases: ['ACR'],\n loinc: '9318-7',\n names: {\n en: [\n 'Albumin/Creatinine Ratio',\n 'Albumin Creatinine Ratio',\n 'ACR',\n 'Urine Albumin to Creatinine Ratio',\n ],\n pt: [\n 'Razão Albumina/Creatinina',\n 'Relação Albumina Creatinina',\n 'RAC',\n 'Razão Albumina Creatinina Urinária',\n ],\n },\n unit: 'mg/g',\n },\n\n // ============================================================================\n // PANCREAS\n // ============================================================================\n {\n category: 'pancreas',\n code: 'Amylase',\n loinc: '1798-8',\n names: {\n en: ['Amylase', 'Serum Amylase'],\n pt: ['Amilase'],\n },\n unit: 'U/L',\n },\n {\n category: 'pancreas',\n code: 'Lipase',\n loinc: '3040-3',\n names: {\n en: ['Lipase', 'Serum Lipase'],\n pt: ['Lipase'],\n },\n unit: 'U/L',\n },\n\n // ============================================================================\n // ELECTROLYTES / ELETROLITOS\n // ============================================================================\n {\n category: 'eletrolitos',\n code: 'CO2',\n loinc: '2028-9',\n names: {\n en: ['Carbon Dioxide', 'CO2', 'Bicarbonate'],\n pt: ['Dióxido de Carbono', 'CO2', 'Bicarbonato'],\n },\n unit: 'mEq/L',\n },\n {\n category: 'eletrolitos',\n code: 'Chloride',\n loinc: '2075-0',\n names: {\n en: ['Chloride', 'Cl'],\n pt: ['Cloreto', 'Cloretos', 'Cl'],\n },\n unit: 'mEq/L',\n },\n\n // ============================================================================\n // URINE / URINA\n // ============================================================================\n {\n category: 'urina',\n code: 'Appearance_Urine',\n codeAliases: ['UrineAppearance'],\n loinc: '5767-9',\n names: {\n en: ['Urine Appearance', 'Appearance'],\n pt: ['Aparência da Urina', 'Aparência'],\n },\n },\n {\n category: 'urina',\n code: 'Bacteria_Urine',\n codeAliases: ['UrineBacteria'],\n loinc: '630-4',\n names: {\n en: ['Urine Bacteria', 'Bacteria Urine', 'Bacteria, Urine', 'Bacteria'],\n pt: ['Bactérias na Urina', 'Bactérias'],\n },\n unit: '/HPF',\n },\n {\n category: 'urina',\n code: 'Bilirubin_Urine',\n codeAliases: ['UrineBilirubin'],\n loinc: '5770-3',\n names: {\n en: ['Urine Bilirubin', 'Bilirubin Urine', 'Bilirubin, Urine', 'Bilirubin'],\n pt: ['Bilirrubina na Urina', 'Bilirrubina Urina', 'Bilirrubina'],\n },\n },\n {\n category: 'urina',\n code: 'Blood_Urine',\n codeAliases: ['UrineBlood'],\n loinc: '5794-3',\n names: {\n en: ['Urine Blood', 'Occult Blood in Urine', 'Occult Blood', 'Blood'],\n pt: ['Sangue Oculto na Urina', 'Sangue Oculto'],\n },\n },\n {\n category: 'urina',\n code: 'Color_Urine',\n codeAliases: ['UrineColor'],\n loinc: '5778-6',\n names: {\n en: ['Urine Color', 'Color'],\n pt: ['Cor da Urina', 'Cor'],\n },\n },\n {\n category: 'urina',\n code: 'Glucose_Urine',\n loinc: '5792-7',\n names: {\n en: ['Urine Glucose', 'Glucose Urine', 'Glucose, Urine'],\n pt: ['Glicose na Urina', 'Glicose Urina'],\n },\n },\n {\n category: 'urina',\n code: 'HyalineCasts_Urine',\n codeAliases: ['UrineHyalineCast'],\n loinc: '5796-8',\n names: {\n en: ['Hyaline Casts Urine', 'Hyaline Cast', 'Hyaline Casts'],\n pt: ['Cilindros Hialinos na Urina', 'Cilindro Hialino'],\n },\n unit: '/LPF',\n },\n {\n category: 'urina',\n code: 'Ketones_Urine',\n codeAliases: ['UrineKetones'],\n loinc: '5797-6',\n names: {\n en: ['Urine Ketones', 'Ketones Urine', 'Ketones, Urine', 'Ketones'],\n pt: ['Cetonas na Urina', 'Cetonas'],\n },\n },\n {\n category: 'urina',\n code: 'LeukocyteEsterase_Urine',\n loinc: '5799-2',\n names: {\n en: ['Leukocyte Esterase Urine', 'Leukocyte Esterase', 'Leuk Esterase'],\n pt: ['Esterase Leucocitária na Urina', 'Esterase Leucocitária'],\n },\n },\n {\n category: 'urina',\n code: 'Leukocytes_Urine',\n codeAliases: ['UrineLeukocytes'],\n loinc: '5821-4',\n names: {\n en: ['Urine Leukocytes', 'Urine WBC', 'White Blood Cells in Urine', 'WBC Urine'],\n pt: ['Leucócitos na Urina', 'Leucócitos Urinários'],\n },\n unit: '/HPF',\n },\n {\n category: 'urina',\n code: 'Nitrite_Urine',\n codeAliases: ['UrineNitrite'],\n loinc: '5802-4',\n names: {\n en: ['Urine Nitrite', 'Nitrite Urine', 'Nitrite, Urine', 'Nitrite'],\n pt: ['Nitrito na Urina', 'Nitrito Urina', 'Nitrito'],\n },\n },\n {\n category: 'urina',\n code: 'pH_Urine',\n codeAliases: ['UrinaryPH'],\n loinc: '5803-2',\n names: {\n en: ['Urine pH', 'pH Urine', 'pH, Urine'],\n pt: ['pH Urinário', 'pH da Urina'],\n },\n },\n {\n category: 'urina',\n code: 'Protein_Urine',\n loinc: '5804-0',\n names: {\n en: ['Urine Protein', 'Protein Urine', 'Protein, Urine', 'Protein'],\n pt: ['Proteína na Urina', 'Proteína'],\n },\n },\n {\n category: 'urina',\n code: 'RBC_Urine',\n loinc: '5808-1',\n names: {\n en: ['Urine RBC', 'Red Blood Cells in Urine', 'RBC Urine', 'RBC, Urine'],\n pt: ['Hemácias na Urina'],\n },\n unit: '/HPF',\n },\n {\n category: 'urina',\n code: 'SpecificGravity_Urine',\n codeAliases: ['SpecificGravity'],\n loinc: '5811-5',\n names: {\n en: [\n 'Urine Specific Gravity',\n 'Specific Gravity Urine',\n 'Specific Gravity, Urine',\n 'Specific Gravity',\n ],\n pt: ['Densidade da Urina', 'Gravidade Específica'],\n },\n },\n {\n category: 'urina',\n code: 'SquamousEpithelial_Urine',\n codeAliases: ['UrineSquamousEpithelial'],\n loinc: '11277-1',\n names: {\n en: [\n 'Squamous Epithelial Cells Urine',\n 'Squamous Epithelial Cells, Urine',\n 'Squamous Epithelial Urine',\n 'Squamous Epithelial Cells',\n ],\n pt: ['Células Epiteliais Escamosas na Urina'],\n },\n unit: '/HPF',\n },\n {\n category: 'urina',\n code: 'Urobilinogen_Urine',\n codeAliases: ['Urine_Urobilinogen'],\n loinc: '20405-7',\n names: {\n en: ['Urobilinogen Urine', 'Urine Urobilinogen', 'Urobilinogen'],\n pt: ['Urobilinogênio Urinário', 'Urobilinogênio na Urina'],\n },\n unit: 'mg/dL',\n },\n\n // ============================================================================\n // TUMOR MARKERS / MARCADORES TUMORAIS\n // ============================================================================\n {\n category: 'marcadores-tumorais',\n code: 'AFP',\n codeAliases: ['AlfaFetoproteina', 'Alfa_Fetoprotena'],\n loinc: '1834-1',\n names: {\n en: ['Alpha-Fetoprotein', 'AFP', 'Alfa-Fetoprotein'],\n pt: ['Alfa-Fetoproteína', 'AFP', 'Alfafetoproteína'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'marcadores-tumorais',\n code: 'CA125',\n codeAliases: ['CA_125'],\n loinc: '10334-1',\n names: {\n en: ['CA-125', 'CA 125', 'Cancer Antigen 125'],\n pt: ['CA-125', 'CA 125', 'Antígeno CA-125'],\n },\n sex: 'female',\n unit: 'U/mL',\n },\n {\n category: 'marcadores-tumorais',\n code: 'CEA',\n codeAliases: ['Carcinoembryonic_Antigen_CEA_Serum'],\n loinc: '2039-6',\n names: {\n en: ['Carcinoembryonic Antigen', 'CEA'],\n pt: ['Antígeno Carcinoembrionário', 'CEA'],\n },\n unit: 'ng/mL',\n },\n\n // ============================================================================\n // ADD-ON TESTS (Commented out for future use)\n // These are specialized tests available as add-ons in Function Health.\n // Uncomment when ready to support in the UI.\n // ============================================================================\n\n // --- CELIAC / GLUTEN INTOLERANCE (Add-on) ---\n {\n category: 'autoimunidade',\n code: 'Gliadin_Deamidated_IgA',\n loinc: '63453-5',\n names: {\n en: [\n 'Gliadin (Deamidated) Antibodies IgA',\n 'DGP IgA',\n 'Deamidated Gliadin Peptide IgA',\n 'Gliadin Deamidated AB IgA',\n 'Gliadin Deamidated AB, IgA',\n 'Gliadin (Deamidated) AB (IgA)',\n 'Gliadin (Deamidated) AB (IGA)',\n ],\n pt: ['Anticorpos Anti-Gliadina Deamidada IgA', 'DGP IgA'],\n },\n unit: 'U',\n },\n {\n category: 'autoimunidade',\n code: 'Gliadin_Deamidated_IgG',\n loinc: '63459-2',\n names: {\n en: [\n 'Gliadin (Deamidated) Antibodies IgG',\n 'DGP IgG',\n 'Deamidated Gliadin Peptide IgG',\n 'Gliadin Deamidated AB IgG',\n 'Gliadin Deamidated AB, IgG',\n 'Gliadin (Deamidated) AB (IgG)',\n 'Gliadin (Deamidated) AB (IGG)',\n ],\n pt: ['Anticorpos Anti-Gliadina Deamidada IgG', 'DGP IgG'],\n },\n unit: 'U',\n },\n {\n category: 'autoimunidade',\n code: 'tTG_IgA',\n loinc: '31017-7',\n names: {\n en: [\n 'Tissue Transglutaminase IgA',\n 'tTG IgA',\n 'Anti-tTG IgA',\n 'Tissue Transglutaminase AB, IGA',\n 'Tissue Transglutaminase AB IgA',\n 'TTG AB IGA',\n 'T-Transglutaminase IgA',\n 'Transglutaminase IgA',\n ],\n pt: ['Transglutaminase Tecidual IgA', 'tTG IgA', 'Anti-tTG IgA'],\n },\n unit: 'U/mL',\n },\n {\n category: 'autoimunidade',\n code: 'tTG_IgG',\n loinc: '32998-7',\n names: {\n en: [\n 'Tissue Transglutaminase IgG',\n 'tTG IgG',\n 'Anti-tTG IgG',\n 'Tissue Transglutaminase AB, IGG',\n 'Tissue Transglutaminase AB IgG',\n 'TTG AB IGG',\n 'T-Transglutaminase IgG',\n 'Transglutaminase IgG',\n ],\n pt: ['Transglutaminase Tecidual IgG', 'tTG IgG', 'Anti-tTG IgG'],\n },\n unit: 'U/mL',\n },\n\n // ============================================================================\n // CARDIOVASCULAR GENETICS / GENÉTICA CARDIOVASCULAR\n // ============================================================================\n {\n category: 'coracao',\n code: 'APOE_Genotype',\n loinc: '21619-2',\n names: {\n en: [\n 'APOE Genotype',\n 'Apolipoprotein E Genotype',\n 'ApoE Gene',\n 'APO E Genotype',\n 'Cardio IQ APOE Genotype',\n ],\n pt: ['Genótipo APOE', 'Genótipo Apolipoproteína E'],\n },\n },\n\n // ============================================================================\n // METABOLIC ADD-ONS / MARCADORES METABÓLICOS ADICIONAIS\n // ============================================================================\n {\n category: 'metabolico',\n code: 'Adiponectin',\n loinc: '47828-9',\n names: {\n en: ['Adiponectin', 'Serum Adiponectin'],\n pt: ['Adiponectina'],\n },\n unit: 'mcg/mL',\n },\n\n // ============================================================================\n // BODY COMPOSITION / COMPOSIÇÃO CORPORAL (DEXA Scan)\n // ============================================================================\n {\n category: 'composicao-corporal',\n code: 'BMI',\n codeAliases: ['Body_Mass_Index'],\n loinc: '39156-5',\n names: {\n en: ['Body Mass Index', 'BMI'],\n pt: ['Índice de Massa Corporal', 'IMC'],\n },\n unit: 'kg/m2',\n },\n {\n category: 'composicao-corporal',\n code: 'BodyFatPct',\n loinc: '41982-0',\n names: {\n en: [\n 'Body Fat Percentage',\n 'Body Fat %',\n 'Total Body Fat %',\n 'Body Fat',\n 'Fat Percentage',\n 'Percent Body Fat',\n '% Body Fat',\n 'Total Body % Fat',\n // A Live Lean imprime \"Total Fat %\" na tabela regional da página 1 (a\n // linha \"Total\" é o percentual do corpo inteiro) e \"Total Fat (%)\" na\n // tabela de tendência. Os dois são o \"Total Body Fat %\" da mesma data.\n // Sem eles, o \"Total Fat\" da massa de gordura, logo abaixo, ancorava\n // `FatMass` na citação do percentual.\n 'Total Fat %',\n 'Total Fat (%)',\n ],\n pt: [\n 'Percentual de Gordura Corporal',\n '% Gordura Corporal',\n 'Gordura Corporal Total %',\n 'Percentual de Gordura',\n '% Gordura Total',\n 'Gordura Corporal',\n ],\n },\n unit: '%',\n },\n {\n category: 'composicao-corporal',\n code: 'FatMass',\n loinc: '73708-0',\n names: {\n // \"Total Fat\" é a coluna \"Total Fat (lbs)\" da tabela de tendência da\n // densitometria Live Lean, e traz o mesmo número do \"Fat Mass\" da página\n // 1 em todas as datas que as duas tabelas imprimem.\n en: ['Fat Mass', 'Total Fat Mass', 'Body Fat Mass', 'Fat Tissue Mass', 'Total Fat'],\n pt: ['Massa de Gordura', 'Massa Gorda', 'Massa de Gordura Total', 'Tecido Adiposo'],\n },\n unit: 'kg',\n },\n // Sem `loinc` de propósito. A entrada apontava para 73964-9, cujo nome\n // oficial é \"Body muscle mass Calculated\", e massa magra não é massa\n // muscular: em DEXA, massa magra é tudo que não é gordura nem mineral\n // ósseo, incluindo órgãos, água e tecido conjuntivo. Massa muscular é um\n // subconjunto dela.\n //\n // O campo sai em bundle FHIR, então a aproximação não ficava só aqui — um\n // consumidor externo leria massa muscular onde escrevemos massa magra. Não\n // há LOINC para massa magra (busca por \"lean body mass\" só devolve códigos\n // de urina ajustados por LBM), então o certo é não ter código, como já se\n // faz com FatFreeMass. Quem quer massa muscular usa MuscleMass, abaixo.\n {\n category: 'composicao-corporal',\n code: 'LeanMass',\n names: {\n // \"Total Lean\" é a coluna \"Total Lean (lbs)\" da mesma tabela de\n // tendência: tecido magro, igual ao \"Lean Mass\" da página 1, e não a\n // massa livre de gordura, que soma o mineral ósseo e fica em\n // `FatFreeMass`.\n en: [\n 'Lean Mass',\n 'Lean Body Mass',\n 'Lean Tissue Mass',\n 'Total Lean Mass',\n 'LBM',\n 'Total Lean',\n ],\n pt: ['Massa Magra', 'Massa Corporal Magra', 'Tecido Magro', 'Massa Magra Total'],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'BMC',\n // No official LOINC code exists for total body BMC from DEXA\n names: {\n en: [\n 'Bone Mineral Content',\n 'BMC',\n 'Total Body BMC',\n 'Bone Mass',\n 'Total Bone Mineral Content',\n ],\n pt: [\n 'Conteúdo Mineral Ósseo',\n 'CMO',\n 'Massa Óssea',\n 'Conteúdo Mineral Ósseo Total',\n 'CMO Total',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'FatFreeMass',\n // No official LOINC code exists for fat-free mass from DEXA\n names: {\n en: ['Fat-Free Mass', 'Fat Free Mass', 'Fat Free', 'FFM', 'Non-Fat Mass'],\n pt: ['Massa Livre de Gordura', 'Massa Isenta de Gordura', 'MLG'],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'VATVolume',\n // A tabela de tendência do DEXA traz a seção \"Visceral Adipose Tissue (VAT)\"\n // com as colunas \"Fat Mass\" e \"Volume\", e o modelo nomeia a linha com o\n // prefixo da seção. Antes do nome abaixo, o valor era gravado com o código\n // `UNKNOWN_` que fica aqui como alias, e o `normalizeCode` na leitura\n // devolve as observações já gravadas para este código.\n codeAliases: ['UNKNOWN_Visceral_Adipose_Tissue_VAT_Volume'],\n // No official LOINC code exists for visceral adipose tissue volume\n names: {\n en: [\n 'Visceral Fat Volume',\n 'VAT Volume',\n 'VATVolume',\n 'Visceral Adipose Tissue Volume',\n 'Visceral Adipose Tissue (VAT) Volume',\n 'VAT',\n // \"Visceral Fat\" e \"Gordura Visceral\" nus não dizem qual das duas\n // medidas o laudo traz, então também estão no `VisceralFatLevel`. O\n // pré-scan devolve os dois candidatos e o modelo decide pela unidade e\n // pela ordem de grandeza, que é o que separa um índice 9 de 120 cm³.\n 'Visceral Fat',\n 'Visceral Volume',\n ],\n pt: [\n 'Volume de Gordura Visceral',\n 'Volume TAV',\n 'Tecido Adiposo Visceral Volume',\n 'Gordura Visceral',\n 'Volume Visceral',\n ],\n },\n unit: 'cm³',\n },\n {\n category: 'composicao-corporal',\n code: 'VATMass',\n // Mesmo caso do `VATVolume`: a coluna da tendência do DEXA é \"Fat Mass\", e\n // o nome chega como \"Visceral Adipose Tissue (VAT) Fat Mass\".\n codeAliases: ['UNKNOWN_Visceral_Adipose_Tissue_VAT_Fat_Mass'],\n // No official LOINC code exists for visceral adipose tissue mass\n names: {\n en: [\n 'Visceral Fat Mass',\n 'VAT Mass',\n 'VATMass',\n 'Visceral Adipose Tissue Mass',\n 'Visceral Adipose Tissue (VAT) Fat Mass',\n 'Visceral Adipose Tissue Fat Mass',\n 'VAT Fat Mass',\n 'Visceral Adipose Tissue',\n 'Visceral Mass',\n ],\n pt: [\n 'Massa de Gordura Visceral',\n 'Massa TAV',\n 'Tecido Adiposo Visceral Massa',\n 'Tecido Adiposo Visceral',\n 'Massa Visceral',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'AndroidGynoidRatio',\n // No official LOINC code exists for android/gynoid ratio\n names: {\n en: [\n 'Android/Gynoid Ratio',\n 'A/G Ratio',\n 'Android Gynoid Ratio',\n 'AndroidGynoidRatio',\n 'AG Ratio',\n 'Android to Gynoid Ratio',\n 'AndrogenGynoindRatio',\n 'Androgen Gynoid Ratio',\n ],\n pt: [\n 'Razão Androide/Ginoide',\n 'Razão A/G',\n 'Relação Androide Ginoide',\n 'Razão AG',\n 'Índice Androide/Ginoide',\n ],\n },\n unit: 'razão',\n },\n {\n category: 'composicao-corporal',\n code: 'AndroidFatPct',\n // No official LOINC code exists for android region fat percentage\n names: {\n en: [\n 'Android Fat Percentage',\n 'Android Fat %',\n 'AndroidFatPct',\n 'AndroidFatPercent',\n 'Android Region Fat %',\n 'Abdominal Fat %',\n 'Android % Fat',\n ],\n pt: [\n 'Percentual de Gordura Androide',\n '% Gordura Androide',\n 'Gordura Região Androide %',\n '% Gordura Abdominal',\n ],\n },\n unit: '%',\n },\n {\n category: 'composicao-corporal',\n code: 'GynoidFatPct',\n // No official LOINC code exists for gynoid region fat percentage\n names: {\n en: [\n 'Gynoid Fat Percentage',\n 'Gynoid Fat %',\n 'GynoidFatPct',\n 'GynoidFatPercent',\n 'GynoindFatPercent',\n 'Gynoid Region Fat %',\n 'Hip Fat %',\n 'Gynoid % Fat',\n ],\n pt: [\n 'Percentual de Gordura Ginoide',\n '% Gordura Ginoide',\n 'Gordura Região Ginoide %',\n '% Gordura Quadril',\n ],\n },\n unit: '%',\n },\n {\n category: 'composicao-corporal',\n code: 'TotalMass',\n loinc: '29463-7',\n names: {\n en: ['Total Mass', 'Total Body Mass', 'Body Weight', 'Weight'],\n pt: ['Massa Total', 'Massa Corporal Total', 'Peso Corporal', 'Peso'],\n },\n unit: 'kg',\n },\n\n // ===========================================================================\n // Composição corporal por bioimpedância, adipometria e antropometria\n // ===========================================================================\n //\n // POLÍTICA DE `loinc` AUSENTE, e o que ela custa\n //\n // Várias entradas abaixo não têm `loinc`. Isso não é pendência esquecida: é\n // o resultado de procurar e não achar, e a decisão tem consequência que\n // vale enunciar uma vez.\n //\n // O que muda sem o código: a observação continua sendo exportada em FHIR e\n // continua aparecendo para o usuário, mas o `Observation.code` sai só com o\n // nosso código interno, sem identificador interoperável. Um consumidor\n // externo consegue ler o valor e a unidade, e não consegue mapear a medida\n // para o vocabulário dele sem acordo bilateral. Na prática: exibível\n // sempre, comparável entre sistemas só quando há LOINC.\n //\n // Por que ainda assim é o certo: código errado é pior que código ausente.\n // Ausente o consumidor sabe que precisa perguntar; errado ele integra com\n // confiança e erra em silêncio. Esta mesma PR corrige um caso desses, em\n // que `LeanMass` apontava para \"Body muscle mass\" e o IG publicava massa\n // muscular sob o rótulo de massa magra.\n //\n // Como preencher depois: quando a LOINC publicar o conceito, basta somar o\n // campo `loinc` — o código interno não muda, e as observações já gravadas\n // não precisam ser reescritas, porque a chave é o nosso código.\n //\n // Todos os códigos aqui foram conferidos na API pública da NLM (Clinical\n // Table Search Service), e a ausência só foi registrada depois de tentar\n // múltiplas formulações: \"total body water\" não devolve nada, \"body water\"\n // devolve os dois códigos abaixo.\n //\n // As 13 entradas sem código, e o motivo de cada uma:\n //\n // MuscleMassIndex corte publicado é sobre massa apendicular, não total\n // VisceralFatLevel índice de 1 a 20; 73707-2 é área, outra grandeza\n // ResidualMass conceito de fracionamento antropométrico, não LOINC\n // BasalMetabolicRate candidatos são índice ou RMR medido, ver nota local\n // ExtracellularWater \"extracellular water\" não devolve nada\n // IntracellularWater \"intracellular water\" não devolve nada\n // ECWToTBWRatio razão derivada, sem conceito próprio\n // WaistToHeightRatio \"waist to height\" não devolve nada\n // ConicityIndex índice derivado, sem conceito próprio\n // SkinfoldSubscapular LOINC só tem tríceps, coxa e cintura\n // SkinfoldSuprailiac idem\n // SkinfoldChest idem\n // SkinfoldMidaxillary idem\n\n // Bioimpedância (BIA)\n {\n category: 'composicao-corporal',\n code: 'TotalBodyWater',\n loinc: '101683-1',\n names: {\n en: ['Total Body Water', 'Body Water', 'TBW', 'Total Water'],\n pt: ['Água Corporal Total', 'Água Corporal', 'ACT', 'Água Total'],\n },\n unit: 'L',\n },\n {\n category: 'composicao-corporal',\n code: 'BodyWaterPct',\n loinc: '101684-9',\n names: {\n en: ['Body Water Percentage', 'Percentage of Body Water', '% Body Water', 'Water %'],\n pt: ['Percentual de Água Corporal', '% Água Corporal', 'Água Corporal %'],\n },\n unit: '%',\n },\n {\n category: 'composicao-corporal',\n code: 'MuscleMass',\n loinc: '73964-9',\n names: {\n en: ['Muscle Mass', 'Skeletal Muscle Mass', 'SMM', 'Body Muscle Mass'],\n pt: [\n 'Massa Muscular',\n 'Massa Muscular Esquelética',\n 'MME',\n 'Massa Muscular Corporal',\n 'Músculo',\n ],\n },\n unit: 'kg',\n },\n // Derivado, não extraído: `MuscleMass / altura²`, calculado pelo\n // `calculadoras-clinicas` a partir da altura que o usuário informa no\n // cadastro. Mesmo ajuste que o IMC faz com o peso, e serve para a medida\n // ser comparável entre estaturas diferentes e ao longo do tempo.\n //\n // Sem `loinc` e sem faixa, e agora com fonte para a decisão em vez de só\n // cautela. O EWGSOP2 (Age and Ageing, 2019, DOI 10.1093/ageing/afy169)\n // separa explicitamente \"total body Skeletal Muscle Mass (SMM)\" de\n // \"Appendicular Skeletal Muscle Mass (ASM)\", e os cortes publicados são\n // sobre ASM. `MuscleMass` aqui é total, então o corte não se aplica.\n //\n // O mesmo consenso ainda diz, sobre ajustar por tamanho corporal: \"The\n // authors make no recommendation to adjust for body size, but adjustment\n // can be made if data are available for a relevant normative population.\"\n // Não temos população normativa brasileira para bioimpedância, e o\n // consenso registra que a equação de Sergi, padrão do método, foi\n // derivada em europeus idosos.\n //\n // Por isso o índice existe para acompanhar a própria evolução, e não para\n // classificar.\n {\n category: 'composicao-corporal',\n code: 'MuscleMassIndex',\n names: {\n en: ['Muscle Mass Index', 'Skeletal Muscle Mass Index', 'SMI', 'SMMI'],\n pt: ['Índice de Massa Muscular', 'IMM', 'Índice de Massa Muscular Esquelética'],\n },\n unit: 'kg/m2',\n },\n {\n category: 'composicao-corporal',\n code: 'PhaseAngle',\n loinc: '107160-4',\n names: {\n en: ['Phase Angle', 'Whole Body Phase Angle', 'PhA', 'AnglePhase'],\n pt: ['Ângulo de Fase', 'Ângulo de Fase Corporal'],\n },\n unit: 'deg',\n },\n // O nível de gordura visceral do InBody e similares é um índice\n // adimensional de 1 a 20, e NÃO é o mesmo que VATMass ou VATVolume, que\n // vêm de DEXA em massa e volume. LOINC 73707-2 é \"Visceral fat [Area]\", em\n // área, então também não serve. Fica sem código, com unidade vazia, para\n // não ser confundido com nenhum dos três.\n {\n category: 'composicao-corporal',\n code: 'VisceralFatLevel',\n names: {\n en: ['Visceral Fat Level', 'Visceral Fat Index', 'VFL', 'Visceral Fat'],\n pt: [\n 'Nível de Gordura Visceral',\n 'Índice de Gordura Visceral',\n 'Gordura Visceral Nível',\n // Termo nu, compartilhado com o `VATVolume` de propósito. Ver o\n // comentário lá.\n 'Gordura Visceral',\n ],\n },\n unit: '',\n },\n // Compartimentos de água. Sem LOINC: busca por \"extracellular water\" e\n // \"intracellular water\" não devolve nada, ao contrário de \"body water\",\n // que rendeu os dois códigos usados acima.\n {\n category: 'composicao-corporal',\n code: 'ExtracellularWater',\n names: {\n en: ['Extracellular Water', 'ECW'],\n pt: ['Água Extracelular', 'AEC'],\n },\n unit: 'L',\n },\n {\n category: 'composicao-corporal',\n code: 'IntracellularWater',\n names: {\n en: ['Intracellular Water', 'ICW'],\n pt: ['Água Intracelular', 'AIC'],\n },\n unit: 'L',\n },\n // Razão entre água extracelular e total. É o marcador de retenção hídrica\n // e de estado inflamatório que os aparelhos de bioimpedância reportam, e\n // vem adimensional.\n {\n category: 'composicao-corporal',\n code: 'ECWToTBWRatio',\n names: {\n en: ['ECW/TBW', 'ECW_TBW', 'ECW to TBW Ratio', 'Extracellular Water Ratio'],\n pt: ['Relação AEC/ACT', 'Razão Água Extracelular'],\n },\n unit: '',\n },\n {\n category: 'composicao-corporal',\n code: 'ResidualMass',\n names: {\n en: ['Residual Mass', 'Residual Weight'],\n pt: ['Massa Residual', 'Peso Residual'],\n },\n unit: 'kg',\n },\n // Sem `loinc` até alguém decidir com a definição completa em mãos. Os\n // candidatos não servem como estão: 50042-1 é \"Basal metabolic rate\n // index\", um índice e não kcal/dia; 82278-3 é \"Measured RMR\", medido por\n // calorimetria indireta, enquanto o aparelho de bioimpedância *estima* a\n // partir da massa magra; 82286-6 \"Predicted RMR\" é o mais próximo, mas\n // ainda é RMR e não TMB. Colocar qualquer um deles repetiria o erro que\n // esta mesma PR corrige em LeanMass.\n {\n category: 'composicao-corporal',\n code: 'BasalMetabolicRate',\n names: {\n en: ['Basal Metabolic Rate', 'BMR'],\n pt: ['Taxa Metabólica Basal', 'TMB', 'Metabolismo Basal', 'Gasto Energético Basal'],\n },\n unit: 'kcal/d',\n },\n\n // Antropometria\n {\n category: 'composicao-corporal',\n code: 'WaistCircumference',\n // 8280-0 é a medida em si. 56086-2, que parecia o óbvio pela busca, é\n // \"Adult Waist Circumference Protocol\", um protocolo PhenX e não um\n // resultado.\n loinc: '8280-0',\n names: {\n en: ['Waist Circumference', 'Abdominal Circumference', 'Waist'],\n pt: [\n 'Circunferência de Cintura',\n 'Circunferência Abdominal',\n 'Perímetro Abdominal',\n 'Cintura',\n ],\n },\n unit: 'cm',\n },\n // O EWGSOP2 usa a panturrilha como proxy de massa muscular onde não há\n // outro método disponível, o que a torna útil em consulta sem aparelho.\n {\n category: 'composicao-corporal',\n code: 'CalfCircumference',\n loinc: '107112-5',\n names: {\n en: ['Calf Circumference', 'Calf Girth'],\n pt: ['Circunferência da Panturrilha', 'Perímetro da Panturrilha', 'Panturrilha'],\n },\n unit: 'cm',\n },\n {\n category: 'composicao-corporal',\n code: 'WaistToHeightRatio',\n names: {\n en: ['Waist to Height Ratio', 'Waist-to-Height Ratio', 'WHtR'],\n pt: ['Razão Cintura-Altura', 'Relação Cintura-Estatura', 'RCEst'],\n },\n unit: '',\n },\n {\n category: 'composicao-corporal',\n code: 'ConicityIndex',\n names: {\n en: ['Conicity Index', 'C Index'],\n pt: ['Índice de Conicidade', 'Índice C'],\n },\n unit: '',\n },\n\n // Dobras cutâneas (adipometria)\n //\n // A LOINC tem apenas três sítios: tríceps, coxa e cintura. Os outros quatro\n // que os protocolos brasileiros medem ficam sem código, e é por ausência\n // confirmada, não por falta de busca. Entram individualmente porque o\n // protocolo de somatório varia (Pollock 3 ou 7 dobras, Faulkner, Guedes) e\n // guardar só a soma perderia o dado de origem.\n {\n category: 'composicao-corporal',\n code: 'SkinfoldTriceps',\n loinc: '8354-3',\n names: {\n en: ['Triceps Skinfold', 'Tricipital Skinfold', 'Skin Fold Thickness Triceps', 'Triceps'],\n pt: ['Dobra Tricipital', 'Dobra Cutânea Tricipital', 'Tricipital', 'DCT'],\n },\n unit: 'mm',\n },\n {\n category: 'composicao-corporal',\n code: 'SkinfoldThigh',\n loinc: '8353-5',\n names: {\n en: ['Thigh Skinfold', 'Skin Fold Thickness Thigh', 'Thigh'],\n pt: ['Dobra da Coxa', 'Dobra Cutânea Coxa', 'Coxa'],\n },\n unit: 'mm',\n },\n {\n category: 'composicao-corporal',\n code: 'SkinfoldAbdominal',\n loinc: '8355-0',\n names: {\n en: ['Abdominal Skinfold', 'Waist Skinfold', 'Skin Fold Thickness Waist'],\n pt: ['Dobra Abdominal', 'Dobra Cutânea Abdominal', 'Abdominal'],\n },\n unit: 'mm',\n },\n {\n category: 'composicao-corporal',\n code: 'SkinfoldSubscapular',\n names: {\n en: ['Subscapular Skinfold', 'Subscapular'],\n pt: ['Dobra Subescapular', 'Dobra Cutânea Subescapular', 'Subescapular'],\n },\n unit: 'mm',\n },\n {\n category: 'composicao-corporal',\n code: 'SkinfoldSuprailiac',\n names: {\n en: ['Suprailiac Skinfold', 'Supra-iliac Skinfold', 'Suprailiac'],\n pt: ['Dobra Supra-ilíaca', 'Dobra Cutânea Supra-ilíaca', 'Supra-ilíaca', 'Suprailiaca'],\n },\n unit: 'mm',\n },\n {\n category: 'composicao-corporal',\n code: 'SkinfoldChest',\n names: {\n en: ['Chest Skinfold', 'Pectoral Skinfold', 'Chest'],\n pt: ['Dobra Peitoral', 'Dobra Cutânea Peitoral', 'Peitoral', 'Dobra Torácica'],\n },\n unit: 'mm',\n },\n {\n category: 'composicao-corporal',\n code: 'SkinfoldMidaxillary',\n names: {\n en: ['Midaxillary Skinfold', 'Mid-axillary Skinfold', 'Midaxillary', 'MidAxilla'],\n pt: ['Dobra Axilar Média', 'Dobra Cutânea Axilar Média', 'Axilar Média'],\n },\n unit: 'mm',\n },\n\n // Regional Body Composition (DEXA)\n // Note: No official LOINC codes exist for regional lean/fat mass measurements\n // Hidden from UI for now - may be shown in future regional breakdown view\n //\n // \"Arms Total\" e \"Legs Total\" são a linha dos dois membros somados na tabela\n // de equilíbrio muscular do laudo da Live Lean (GE Lunar Prodigy). Conferido\n // em cinco laudos: a massa gorda e a magra dessa linha são a soma do lado\n // direito com o esquerdo, e são o mesmo número das colunas \"Arms Fat\" e\n // \"Arms Lean\" da tabela de tendência e da linha \"Arms\" da tabela regional.\n // O modelo nomeia a linha \"Arms Total Fat Mass\", e sem o nome ela virava\n // `UNKNOWN_`, enquanto a mesma medida em outra página ia para `ArmsFatMass`:\n // a série do gráfico partia em dois códigos. O `codeAliases` cobre o que já\n // foi gravado assim.\n //\n // As outras colunas da mesma linha ficam sem código de propósito. \"Fat %\" e\n // \"Lean %\" são percentual do membro, e \"Total Mass\" é a massa do membro;\n // o catálogo não tem código regional para nenhum dos dois. \"Right Arm\" e\n // \"Left Arm\" são um lado só, e \"Arms Difference\" é direito menos esquerdo.\n {\n category: 'composicao-corporal',\n code: 'ArmsLeanMass',\n codeAliases: ['UNKNOWN_Arms_Total_Lean_Mass'],\n hidden: true,\n names: {\n en: [\n 'Arms Lean Mass',\n 'Arms Total Lean Mass',\n 'Arms Lean',\n 'Arms Lean Tissue',\n 'Arm Lean Mass',\n 'Arm Lean',\n 'Upper Limb Lean Mass',\n 'Upper Limbs Lean Mass',\n 'Upper Extremity Lean Mass',\n 'Lean Arms',\n 'Lean Mass Arms',\n 'Lean Mass Bracos',\n ],\n pt: [\n 'Massa Magra Braços',\n 'Tecido Magro Braços',\n 'Massa Magra Membros Superiores',\n 'Braços Massa Magra',\n 'Massa Magra dos Braços',\n 'MMSS Massa Magra',\n 'Membros Superiores Magro',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'ArmsFatMass',\n codeAliases: ['UNKNOWN_Arms_Total_Fat_Mass'],\n hidden: true,\n names: {\n en: [\n 'Arms Fat Mass',\n 'Arms Total Fat Mass',\n 'Arms Fat',\n 'Arms Fat Tissue',\n 'Arm Fat Mass',\n 'Arm Fat',\n 'Upper Limb Fat Mass',\n 'Upper Limbs Fat Mass',\n 'Upper Extremity Fat Mass',\n 'Fat Arms',\n 'Fat Mass Arms',\n 'Fat Mass Bracos',\n ],\n pt: [\n 'Massa de Gordura Braços',\n 'Tecido Adiposo Braços',\n 'Gordura Membros Superiores',\n 'Braços Gordura',\n 'Gordura dos Braços',\n 'Braços Massa Gorda',\n 'MMSS Gordura',\n 'Membros Superiores Gordura',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'LegsLeanMass',\n codeAliases: ['UNKNOWN_Legs_Total_Lean_Mass'],\n hidden: true,\n names: {\n en: [\n 'Legs Lean Mass',\n 'Legs Total Lean Mass',\n 'Legs Lean',\n 'Legs Lean Tissue',\n 'Leg Lean Mass',\n 'Leg Lean',\n 'Lower Limb Lean Mass',\n 'Lower Limbs Lean Mass',\n 'Lower Extremity Lean Mass',\n 'Lean Legs',\n 'Lean Mass Legs',\n 'Lean Mass Pernas',\n ],\n pt: [\n 'Massa Magra Pernas',\n 'Tecido Magro Pernas',\n 'Massa Magra Membros Inferiores',\n 'Pernas Massa Magra',\n 'Massa Magra das Pernas',\n 'MMII Massa Magra',\n 'Membros Inferiores Magro',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'LegsFatMass',\n codeAliases: ['UNKNOWN_Legs_Total_Fat_Mass'],\n hidden: true,\n names: {\n en: [\n 'Legs Fat Mass',\n 'Legs Total Fat Mass',\n 'Legs Fat',\n 'Legs Fat Tissue',\n 'Leg Fat Mass',\n 'Leg Fat',\n 'Lower Limb Fat Mass',\n 'Lower Limbs Fat Mass',\n 'Lower Extremity Fat Mass',\n 'Fat Legs',\n 'Fat Mass Legs',\n 'Fat Mass Pernas',\n ],\n pt: [\n 'Massa de Gordura Pernas',\n 'Tecido Adiposo Pernas',\n 'Gordura Membros Inferiores',\n 'Pernas Gordura',\n 'Gordura das Pernas',\n 'Pernas Massa Gorda',\n 'MMII Gordura',\n 'Membros Inferiores Gordura',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'TrunkLeanMass',\n hidden: true,\n names: {\n en: [\n 'Trunk Lean Mass',\n 'Trunk Lean',\n 'Trunk Lean Tissue',\n 'Torso Lean Mass',\n 'Core Lean Mass',\n 'Lean Trunk',\n 'Lean Mass Trunk',\n 'Lean Mass Tronco',\n ],\n pt: [\n 'Massa Magra Tronco',\n 'Tecido Magro Tronco',\n 'Massa Magra Core',\n 'Tronco Massa Magra',\n 'Massa Magra do Tronco',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'TrunkFatMass',\n hidden: true,\n names: {\n en: [\n 'Trunk Fat Mass',\n 'Trunk Fat',\n 'Trunk Fat Tissue',\n 'Torso Fat Mass',\n 'Core Fat Mass',\n 'Fat Trunk',\n 'Fat Mass Trunk',\n 'Fat Mass Tronco',\n ],\n pt: [\n 'Massa de Gordura Tronco',\n 'Tecido Adiposo Tronco',\n 'Gordura Core',\n 'Tronco Gordura',\n 'Gordura do Tronco',\n 'Tronco Massa Gorda',\n ],\n },\n unit: 'kg',\n },\n\n // ============================================================================\n // BONE DENSITY / DENSIDADE ÓSSEA (DEXA Scan)\n // ============================================================================\n {\n category: 'densidade-ossea',\n code: 'BMD_Total',\n // No official LOINC code exists for total body BMD (only site-specific)\n names: {\n en: [\n 'Total Body BMD',\n 'BMD Total',\n 'BMD',\n 'TotalBodyBMD',\n 'Bone Mineral Density',\n 'Total BMD',\n 'Bone Density',\n 'Total Body Bone Density',\n ],\n pt: [\n 'DMO Corpo Total',\n 'DMO Total',\n 'DMO',\n 'Densidade Mineral Óssea',\n 'Densidade Óssea Total',\n 'Densidade Óssea',\n ],\n },\n unit: 'g/cm²',\n },\n {\n category: 'densidade-ossea',\n code: 'TScore_Total',\n // No official LOINC code exists for total body T-score (only site-specific)\n names: {\n en: [\n 'Total Body T-Score',\n 'T-Score',\n 'T Score',\n 'TScore',\n 'TScore_Total',\n 'TotalBodyTScore',\n 'BMD T-Score',\n 'Bone Density T-Score',\n 'T-Score Total Body',\n ],\n pt: ['T-Score Corpo Total', 'T-Score', 'Escore T', 'T-Score DMO', 'T-Score Densidade Óssea'],\n },\n unit: 'score',\n },\n {\n category: 'densidade-ossea',\n code: 'ZScore_Total',\n // No official LOINC code exists for total body Z-score (only site-specific)\n names: {\n en: [\n 'Total Body Z-Score',\n 'Z-Score',\n 'Z Score',\n 'ZScore',\n 'ZScore_Total',\n 'TotalBodyZScore',\n 'BMD Z-Score',\n 'Bone Density Z-Score',\n 'Z-Score Total Body',\n ],\n pt: ['Z-Score Corpo Total', 'Z-Score', 'Escore Z', 'Z-Score DMO', 'Z-Score Densidade Óssea'],\n },\n unit: 'score',\n },\n\n // ============================================================================\n // CARDIOVASCULAR MARKERS — Insuficiência cardíaca e dano miocárdico\n // ============================================================================\n {\n category: 'coracao',\n code: 'NTproBNP',\n loinc: '33762-6',\n names: {\n en: ['NT-proBNP', 'N-Terminal pro B-Type Natriuretic Peptide', 'NT-pro-BNP'],\n pt: ['NT-proBNP', 'Peptídeo Natriurético Tipo B N-Terminal', 'Pró-BNP N-Terminal'],\n },\n unit: 'pg/mL',\n },\n {\n category: 'coracao',\n code: 'BNP',\n loinc: '30934-4',\n names: {\n en: ['BNP', 'B-Type Natriuretic Peptide', 'Brain Natriuretic Peptide'],\n pt: ['BNP', 'Peptídeo Natriurético Tipo B', 'Peptídeo Natriurético Cerebral'],\n },\n unit: 'pg/mL',\n },\n {\n category: 'coracao',\n code: 'TroponinI',\n loinc: '49563-0',\n names: {\n en: ['Troponin I', 'cTnI', 'Cardiac Troponin I', 'hs-TnI', 'High-Sensitivity Troponin I'],\n pt: ['Troponina I', 'cTnI', 'Troponina I Cardíaca', 'Troponina I Ultrassensível'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'coracao',\n code: 'TroponinT',\n loinc: '6598-7',\n names: {\n en: ['Troponin T', 'cTnT', 'Cardiac Troponin T', 'hs-TnT', 'High-Sensitivity Troponin T'],\n pt: ['Troponina T', 'cTnT', 'Troponina T Cardíaca', 'Troponina T Ultrassensível'],\n },\n unit: 'ng/L',\n },\n\n // ============================================================================\n // COAGULATION — Coagulação\n // ============================================================================\n {\n category: 'sangue',\n code: 'DDimer',\n loinc: '48066-5',\n names: {\n en: ['D-Dimer', 'D Dimer', 'Fibrin D-Dimer'],\n pt: ['Dímero-D', 'Dímero D', 'D-Dímero'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'sangue',\n code: 'Fibrinogen',\n loinc: '3255-7',\n names: {\n en: ['Fibrinogen', 'Fibrinogen Activity'],\n pt: ['Fibrinogênio', 'Atividade do Fibrinogênio'],\n },\n unit: 'mg/dL',\n },\n\n // ============================================================================\n // HEMATOLOGY — Hematologia adicional\n // ============================================================================\n {\n category: 'figado',\n code: 'LDH',\n loinc: '14804-9',\n // 2532-0 é o código genérico anterior, que o LOINC marca como DISCOURAGED.\n // Fica como alias para que laudo antigo e dado já armazenado continuem\n // resolvendo em LDH — a troca do código canônico não pode quebrar leitura\n // de histórico.\n loincAliases: ['2532-0'],\n names: {\n en: ['Lactate Dehydrogenase', 'LDH', 'LD'],\n pt: ['Desidrogenase Lática', 'DHL', 'LDH', 'Lactato Desidrogenase'],\n },\n unit: 'U/L',\n },\n\n // ============================================================================\n // ENDOCRINE — Eixo cálcio/fósforo\n // ============================================================================\n {\n category: 'hormonios',\n code: 'PTH',\n loinc: '2731-8',\n names: {\n en: ['Parathyroid Hormone', 'PTH', 'Intact PTH'],\n pt: ['Paratormônio', 'PTH', 'Hormônio da Paratireoide', 'PTH Intacto'],\n },\n unit: 'pg/mL',\n },\n\n // ============================================================================\n // IMMUNOLOGY — Complemento e imunoglobulinas\n // ============================================================================\n {\n category: 'autoimunidade',\n code: 'IgM',\n loinc: '2472-9',\n names: {\n en: ['Immunoglobulin M', 'IgM', 'Total IgM'],\n pt: ['Imunoglobulina M', 'IgM', 'IgM Total'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'autoimunidade',\n code: 'C3',\n loinc: '4485-9',\n names: {\n en: ['Complement C3', 'C3'],\n pt: ['Complemento C3', 'C3', 'Fração C3 do Complemento'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'autoimunidade',\n code: 'C4',\n loinc: '4498-2',\n names: {\n en: ['Complement C4', 'C4'],\n pt: ['Complemento C4', 'C4', 'Fração C4 do Complemento'],\n },\n unit: 'mg/dL',\n },\n\n // ============================================================================\n // TUMOR MARKERS — Marcadores tumorais adicionais\n // ============================================================================\n {\n category: 'marcadores-tumorais',\n code: 'CA199',\n loinc: '24108-3',\n names: {\n en: ['CA 19-9', 'Carbohydrate Antigen 19-9', 'CA19-9'],\n pt: ['CA 19-9', 'Antígeno Carboidrato 19-9', 'CA19-9'],\n },\n unit: 'U/mL',\n },\n {\n category: 'marcadores-tumorais',\n code: 'CA153',\n loinc: '6875-9',\n names: {\n en: ['CA 15-3', 'Cancer Antigen 15-3', 'CA15-3'],\n pt: ['CA 15-3', 'Antígeno Câncer 15-3', 'CA15-3'],\n },\n sex: 'female',\n unit: 'U/mL',\n },\n {\n category: ['saude-feminina', 'marcadores-tumorais'],\n code: 'BetaHCG',\n loinc: '19080-1',\n names: {\n en: ['Beta-hCG', 'Beta Human Chorionic Gonadotropin', 'β-hCG Quantitative', 'hCG'],\n pt: [\n 'Beta-hCG',\n 'Beta Gonadotrofina Coriônica Humana',\n 'β-hCG Quantitativo',\n 'hCG',\n 'Gonadotrofina Coriônica',\n ],\n },\n unit: 'mIU/mL',\n },\n\n // ============================================================================\n // RENAL — Filtração glomerular alternativa\n // ============================================================================\n {\n category: 'rins',\n code: 'CystatinC',\n loinc: '33863-2',\n names: {\n en: ['Cystatin C', 'Cystatin-C'],\n pt: ['Cistatina C', 'Cistatina-C'],\n },\n unit: 'mg/L',\n },\n\n // ============================================================================\n // NUTRIENTS — Oligoelementos adicionais\n // ============================================================================\n {\n category: 'nutrientes',\n code: 'Selenium',\n loinc: '5724-0',\n names: {\n en: ['Selenium', 'Se'],\n pt: ['Selênio', 'Se'],\n },\n unit: 'µg/L',\n },\n\n // ============================================================================\n // METABOLIC — Cetonas séricas\n // ============================================================================\n {\n category: 'pancreas',\n code: 'BetaHydroxybutyrate',\n loinc: '53060-0',\n names: {\n en: ['Beta-Hydroxybutyrate', 'β-Hydroxybutyrate', 'BHB', 'Ketone Bodies'],\n pt: ['Beta-Hidroxibutirato', 'β-Hidroxibutirato', 'BHB', 'Corpos Cetônicos'],\n },\n unit: 'mmol/L',\n },\n];\n\n// ============================================================================\n// LOOKUP MAPS (Generated from definitions)\n// ============================================================================\n\n/** Map LOINC code to internal code */\nconst loincToCodeMap = new Map<string, string>();\n\n/** Map internal code to LOINC */\nconst codeToLoincMap = new Map<string, string>();\n\n/** Map internal code to definition */\nconst codeToDefinitionMap = new Map<string, BiomarkerDefinition>();\n\n/** Set of all valid LOINC codes */\nconst validLoincSet = new Set<string>();\n\n/** Map code alias to canonical code */\nconst codeAliasToCanonicalMap = new Map<string, string>();\n\n/** Set of all valid codes (canonical + aliases) */\nconst validCodeSet = new Set<string>();\n\n// Initialize maps\nfor (const def of BIOMARKER_DEFINITIONS) {\n // Only add to LOINC maps if loinc is defined\n if (def.loinc) {\n loincToCodeMap.set(def.loinc, def.code);\n codeToLoincMap.set(def.code, def.loinc);\n validLoincSet.add(def.loinc);\n }\n\n codeToDefinitionMap.set(def.code, def);\n validCodeSet.add(def.code);\n\n // Handle LOINC aliases\n if (def.loincAliases) {\n for (const alias of def.loincAliases) {\n loincToCodeMap.set(alias, def.code);\n validLoincSet.add(alias);\n }\n }\n\n // Handle code aliases\n if (def.codeAliases) {\n for (const alias of def.codeAliases) {\n codeAliasToCanonicalMap.set(alias, def.code);\n validCodeSet.add(alias);\n // Also add alias to definition map for easy lookup\n codeToDefinitionMap.set(alias, def);\n }\n }\n}\n\n// ============================================================================\n// EXPORTED FUNCTIONS\n// ============================================================================\n\n/**\n * Convert LOINC code to internal code\n */\nexport function loincToCode(loinc: string): string | undefined {\n return loincToCodeMap.get(loinc);\n}\n\n/**\n * Convert internal code to LOINC\n */\nexport function codeToLoinc(code: string): string | undefined {\n return codeToLoincMap.get(code);\n}\n\n/**\n * Check if a LOINC code is in our supported list\n */\nexport function isValidLoinc(loinc: string): boolean {\n return validLoincSet.has(loinc);\n}\n\n/**\n * Check if a code is valid (canonical or alias)\n */\nexport function isValidCode(code: string): boolean {\n return validCodeSet.has(code);\n}\n\n/**\n * Normalize a code alias to its canonical form.\n * Returns the canonical code if input is an alias, otherwise returns the input unchanged.\n *\n * Use this at data boundaries (e.g. parsing lab results) to map incoming aliases\n * to canonical codes. Do NOT use this as a fallback inside lookup functions —\n * dictionary keys (e.g. biomarkerRangeDefinitions) must use canonical codes directly.\n */\nexport function normalizeCode(code: string): string {\n return codeAliasToCanonicalMap.get(code) ?? code;\n}\n\n/**\n * Get the sex relevance for a biomarker code\n * @returns 'male', 'female', or 'both' (default)\n */\nexport function getSexForCode(code: string): 'male' | 'female' | 'both' {\n const def = codeToDefinitionMap.get(code);\n return def?.sex ?? 'both';\n}\n\n/**\n * Get all biomarker definitions filtered by sex\n * @param sex - 'male', 'female', or 'both' (returns all)\n */\nexport function getDefinitionsBySex(sex: 'male' | 'female' | 'both'): BiomarkerDefinition[] {\n if (sex === 'both') {\n return BIOMARKER_DEFINITIONS;\n }\n return BIOMARKER_DEFINITIONS.filter(\n (def) => def.sex === sex || def.sex === undefined || def.sex === 'both',\n );\n}\n\n/**\n * Get biomarker definition by code\n */\nexport function getDefinitionByCode(code: string): BiomarkerDefinition | undefined {\n return codeToDefinitionMap.get(code);\n}\n\n/**\n * Get biomarker definition by LOINC\n */\nexport function getDefinitionByLoinc(loinc: string): BiomarkerDefinition | undefined {\n const code = loincToCodeMap.get(loinc);\n return code ? codeToDefinitionMap.get(code) : undefined;\n}\n\n/**\n * Get all biomarker definitions\n */\nexport function getAllDefinitions(): BiomarkerDefinition[] {\n return BIOMARKER_DEFINITIONS;\n}\n\n/**\n * Get all visible biomarker definitions (excludes hidden biomarkers)\n */\nexport function getVisibleDefinitions(): BiomarkerDefinition[] {\n return BIOMARKER_DEFINITIONS.filter((def) => !def.hidden);\n}\n\n/**\n * Get all supported internal codes (canonical codes only, not aliases)\n */\nexport function getAllCodes(): string[] {\n return BIOMARKER_DEFINITIONS.map((def) => def.code);\n}\n\n/**\n * Get all supported LOINC codes\n */\nexport function getAllLoincCodes(): string[] {\n return Array.from(validLoincSet);\n}\n\n/**\n * Imprime o bloco de um biomarcador na referência entregue ao modelo de\n * extração. Compartilhado por generateLLMReference e\n * generateFilteredLLMReference, que antes duplicavam este trecho.\n *\n * Com LOINC, o bloco mantém três linhas (LOINC | Code, EN, PT). Sem LOINC,\n * tudo vai em uma linha só. Medido em produção (PRE-391): 20 observações de\n * 4 usuários gravadas com biomarkerName igual à linha \"EN:\" inteira, por\n * exemplo \"Subscapular Skinfold, Subscapular\". O modelo copiava a linha\n * como nome do analito, o code nunca resolvia e a medida se perdia. Só as\n * entradas sem LOINC eram afetadas, então só elas mudam de formato: sem uma\n * linha que comece com \"EN:\" ou \"PT:\", não há o que copiar por engano, e os\n * nomes continuam disponíveis para casar com o texto do PDF.\n */\nfunction pushDefinitionReference(lines: string[], def: BiomarkerDefinition): void {\n const ptNames = def.names.pt.join(', ');\n const enNames = def.names.en.join(', ');\n if (def.loinc) {\n lines.push(`- LOINC: ${def.loinc} | Code: ${def.code}`);\n lines.push(` EN: ${enNames}`);\n lines.push(` PT: ${ptNames}`);\n return;\n }\n lines.push(`- Code: ${def.code} (no LOINC, use the Code) | EN: ${enNames} | PT: ${ptNames}`);\n}\n\n/**\n * Generate LLM reference prompt for biomarker extraction\n * This is included in the extraction prompt so the LLM can output LOINC codes directly\n */\nexport function generateLLMReference(): string {\n const lines: string[] = [\n 'SUPPORTED BIOMARKERS (output the LOINC code or internal Code for each matched biomarker):',\n '',\n ];\n\n // Group by category for better organization\n const byCategory = new Map<string, BiomarkerDefinition[]>();\n for (const def of BIOMARKER_DEFINITIONS) {\n const categories = Array.isArray(def.category) ? def.category : [def.category];\n for (const cat of categories) {\n const existing = byCategory.get(cat) || [];\n existing.push(def);\n byCategory.set(cat, existing);\n }\n }\n\n for (const [category, defs] of byCategory) {\n lines.push(`[${category.toUpperCase()}]`);\n for (const def of defs) {\n pushDefinitionReference(lines, def);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Generate biomarkerTests format for UI compatibility\n * This replaces the old hardcoded biomarkerTests.ts\n * Excludes hidden biomarkers from the output\n */\nexport function toBiomarkerTests(): Record<\n string,\n Array<{ pt: string; en: string; code: string }>\n> {\n const result: Record<string, Array<{ pt: string; en: string; code: string }>> = {};\n\n for (const def of BIOMARKER_DEFINITIONS) {\n // Skip hidden biomarkers\n if (def.hidden) continue;\n\n const categories = Array.isArray(def.category) ? def.category : [def.category];\n const ptName = def.names.pt[0] ?? def.code;\n const enName = def.names.en[0] ?? def.code;\n for (const category of categories) {\n if (!result[category]) {\n result[category] = [];\n }\n result[category]!.push({\n code: def.code,\n en: enName,\n pt: ptName,\n });\n }\n }\n\n return result;\n}\n\n/**\n * Biomarker search pattern for OCR text anchoring\n */\nexport interface BiomarkerSearchPattern {\n category: string | string[];\n code: string;\n loinc?: string;\n names: string[]; // All names (EN + PT) for this biomarker\n unit?: string; // Absent for qualitative biomarkers (urine dipstick, etc.)\n}\n\n/**\n * Get all biomarker search patterns for OCR text anchoring\n * Returns a flat list of all biomarker codes with their searchable names\n *\n * `category` and `unit` are exposed so anchoring consumers can tell\n * quantitative biomarkers from qualitative ones (which need different\n * matching rules — a qualitative marker has no number next to it).\n */\nexport function getAllSearchPatterns(): BiomarkerSearchPattern[] {\n return BIOMARKER_DEFINITIONS.map((def) => ({\n category: def.category,\n code: def.code,\n ...(def.loinc && { loinc: def.loinc }),\n names: [...def.names.en, ...def.names.pt],\n ...(def.unit && { unit: def.unit }),\n }));\n}\n\n/**\n * Generate filtered LLM reference for specific biomarker codes\n * Only includes biomarkers that were found in the OCR text\n */\nexport function generateFilteredLLMReference(codes: string[]): string {\n const codeSet = new Set(codes);\n const filteredDefs = BIOMARKER_DEFINITIONS.filter((def) => codeSet.has(def.code));\n\n if (filteredDefs.length === 0) {\n return 'NO MATCHING BIOMARKERS FOUND IN TEXT - Return empty biomarkers array.';\n }\n\n const lines: string[] = [\n 'ALLOWED BIOMARKERS (ONLY extract these - they were found in the document):',\n '',\n ];\n\n // Group by category for organization\n const byCategory = new Map<string, BiomarkerDefinition[]>();\n for (const def of filteredDefs) {\n const categories = Array.isArray(def.category) ? def.category : [def.category];\n for (const cat of categories) {\n const existing = byCategory.get(cat) || [];\n existing.push(def);\n byCategory.set(cat, existing);\n }\n }\n\n for (const [category, defs] of byCategory) {\n lines.push(`[${category.toUpperCase()}]`);\n for (const def of defs) {\n pushDefinitionReference(lines, def);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Códigos que identificam um documento de composição corporal.\n *\n * O nome diz DEXA por herança: quando a lista foi escrita, densitometria era a\n * única fonte desse tipo de laudo. Hoje ela decide o caminho para\n * bioimpedância e adipometria também, e a lista tinha ficado para trás.\n *\n * Medido em produção: um laudo de adipometria com sete dobras cutâneas,\n * circunferência de cintura e IMC não casava nenhum indicador e caía no\n * caminho genérico, perdendo a referência filtrada e a extração de tendência.\n * As dobras e as circunferências não aparecem em DEXA, então só elas\n * identificam esse aparelho.\n *\n * Massa muscular e os compartimentos de água entram pela mesma razão: são o\n * que a bioimpedância imprime e o DEXA não.\n */\nexport const DEXA_INDICATOR_CODES = [\n // Densitometria e composição corporal clássica\n 'BodyFatPct',\n 'FatMass',\n 'LeanMass',\n 'BMC',\n 'FatFreeMass',\n 'TotalMass',\n // Bioimpedância\n 'MuscleMass',\n 'TotalBodyWater',\n 'BodyWaterPct',\n 'PhaseAngle',\n 'ExtracellularWater',\n 'IntracellularWater',\n // Adipometria: sete sítios, e nenhum aparece em laudo de DEXA\n 'SkinfoldTriceps',\n 'SkinfoldSubscapular',\n 'SkinfoldSuprailiac',\n 'SkinfoldAbdominal',\n 'SkinfoldThigh',\n 'SkinfoldChest',\n 'SkinfoldMidaxillary',\n // Antropometria\n 'WaistCircumference',\n 'CalfCircumference',\n] as const;\n\n/**\n * DEXA-related categories that should be included when a DEXA document is detected\n */\nexport const DEXA_CATEGORIES = ['composicao-corporal', 'densidade-ossea'] as const;\n\n/**\n * Generate full DEXA/body composition reference for LLM extraction\n * This includes ALL body composition biomarkers (regional metrics, VAT, bone density)\n * that may not be detected by OCR anchoring due to table layouts\n *\n * Use this when DEXA indicator biomarkers (BodyFatPct, FatMass, LeanMass, etc.)\n * are detected in the document\n */\nexport function generateDexaFullReference(): string {\n const dexaCodes = BIOMARKER_DEFINITIONS.filter((def) => {\n const categories = Array.isArray(def.category) ? def.category : [def.category];\n return categories.some((cat) =>\n DEXA_CATEGORIES.includes(cat as (typeof DEXA_CATEGORIES)[number]),\n );\n }).map((def) => def.code);\n\n return generateFilteredLLMReference(dexaCodes);\n}\n\n/**\n * Check if a list of biomarker codes indicates a DEXA/body composition document\n */\nexport function isDexaDocument(matchedCodes: string[]): boolean {\n return DEXA_INDICATOR_CODES.some((code) => matchedCodes.includes(code));\n}\n\n/**\n * CAC (Coronary Artery Calcium) indicator biomarker codes\n * When these are found in OCR text, the document is likely a CAC scoring report\n */\nexport const CAC_INDICATOR_CODES = [\n 'CAC',\n 'CAC_LAD',\n 'CAC_LCX',\n 'CAC_RCA',\n 'CAC_Percentile',\n] as const;\n\n/**\n * Generate full CAC reference for LLM extraction\n * This includes all CAC-related biomarkers (total score, per-vessel, percentile, aortic valve)\n */\nexport function generateCacFullReference(): string {\n const cacCodes = BIOMARKER_DEFINITIONS.filter((def) => {\n return def.code === 'CAC' || def.code.startsWith('CAC_') || def.code === 'AorticValveCalcium';\n }).map((def) => def.code);\n\n return generateFilteredLLMReference(cacCodes);\n}\n\n/**\n * Check if a list of biomarker codes indicates a CAC scoring document\n */\nexport function isCacDocument(matchedCodes: string[]): boolean {\n return CAC_INDICATOR_CODES.some((code) => matchedCodes.includes(code));\n}\n\n/**\n * Normalize text for comparison\n * - Splits camelCase/PascalCase into words (e.g., \"ArmsLeanMass\" → \"arms lean mass\")\n * - Removes diacritics\n * - Lowercases\n * - Normalizes whitespace\n */\nfunction normalizeText(text: string): string {\n return (\n text\n // Replace underscores, hyphens, and slashes with spaces (BMD_Total → BMD Total, LDL-Cholesterol → LDL Cholesterol, Omega6/Omega3 → Omega6 Omega3)\n .replace(/[_\\-/]/g, ' ')\n // Split camelCase/PascalCase into words (ArmsLeanMass → Arms Lean Mass)\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n // Split uppercase sequences followed by lowercase (VATVolume → VAT Volume)\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n // Remove diacritics\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/\\s+/g, ' ')\n .trim()\n );\n}\n\n/**\n * Chave sem distinção de caixa, para a segunda tentativa do `findCodeByName`.\n *\n * O `normalizeText` separa camelCase antes de baixar a caixa, e por isso a\n * mesma sigla em caixas diferentes vira chaves diferentes: \"IgA\" vira \"ig a\",\n * \"IGA\" vira \"iga\". Um nome correto escrito na caixa que o catálogo não usa\n * deixava de resolver, e um LOINC errado decidia o código. Aqui a caixa cai\n * primeiro, então \"IgA\", \"IGA\" e \"iga\" dão a mesma chave. A vírgula entre\n * palavras também cai, porque o laudo imprime \"PSA, FREE\" onde o catálogo\n * tem \"PSA Free\".\n */\nfunction foldText(text: string): string {\n return text\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[_\\-/,]/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\n// Build a normalized name map for fast lookups\nconst normalizedNameToCodeMap = new Map<string, string>();\n// Mesma coisa pela chave sem caixa. Quando dois exames dão a mesma chave, ela\n// fica `null`: a busca devolve nada em vez de escolher um pela ordem do\n// catálogo.\nconst foldedNameToCodeMap = new Map<string, string | null>();\nfor (const def of BIOMARKER_DEFINITIONS) {\n for (const name of [...def.names.en, ...def.names.pt]) {\n normalizedNameToCodeMap.set(normalizeText(name), def.code);\n const folded = foldText(name);\n const owner = foldedNameToCodeMap.get(folded);\n foldedNameToCodeMap.set(folded, owner === undefined || owner === def.code ? def.code : null);\n }\n}\n\n/**\n * Find a biomarker code by name (with normalization)\n * This is a fallback when LOINC lookup fails\n * @param name - The biomarker name from the LLM output\n * @returns The internal code if found, undefined otherwise\n */\nexport function findCodeByName(name: string): string | undefined {\n // Check if the input is already a valid biomarker code (e.g., \"Omega3_DHA\")\n if (codeToDefinitionMap.has(name)) {\n return codeToDefinitionMap.get(name)!.code;\n }\n\n // Check code aliases (e.g., alias → canonical code)\n const canonical = codeAliasToCanonicalMap.get(name);\n if (canonical) {\n return canonical;\n }\n\n const normalized = normalizedNameToCodeMap.get(normalizeText(name));\n if (normalized) {\n return normalized;\n }\n return foldedNameToCodeMap.get(foldText(name)) ?? undefined;\n}\n\n/**\n * Validate that a LOINC code matches a given name\n * Returns the correct code if they match, or the name-based code if they don't\n * This catches cases where LLM provides a valid-but-wrong LOINC\n * @param loinc - The LOINC code provided by LLM\n * @param name - The biomarker name provided by LLM\n * @returns Object with code and whether a correction was made\n */\nexport function validateLoincNameMatch(\n loinc: string,\n name: string,\n): { code: string | undefined; corrected: boolean } {\n const loincCode = loincToCode(loinc);\n const nameCode = findCodeByName(name);\n\n // If LOINC maps to a code, check if it matches the name-based code\n if (loincCode && nameCode && loincCode !== nameCode) {\n // LOINC and name disagree - trust the name since it's what the LLM saw in the document\n return { code: nameCode, corrected: true };\n }\n\n // If LOINC is valid, use it\n if (loincCode) {\n return { code: loincCode, corrected: false };\n }\n\n // Fallback to name-based lookup\n return { code: nameCode, corrected: !!nameCode };\n}\n\n/**\n * Check if a biomarker code should be displayed in the UI\n *\n * Returns false for:\n * - UNKNOWN_ codes (unrecognized biomarkers)\n * - Biomarkers marked as hidden in their definition\n *\n * @param code - The biomarker code to check\n * @returns true if the biomarker should be displayed\n */\nexport function isBiomarkerVisible(code: string): boolean {\n // Filter out UNKNOWN codes\n if (code.startsWith('UNKNOWN_') || code === 'UNKNOWN') {\n return false;\n }\n\n // Check if the biomarker is marked as hidden\n const definition = codeToDefinitionMap.get(code);\n if (definition?.hidden) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Filter an array of biomarkers to only include visible ones\n *\n * @param biomarkers - Array of objects with a `code` property\n * @returns Filtered array with only visible biomarkers\n */\nexport function filterVisibleBiomarkers<T extends { code: string }>(biomarkers: T[]): T[] {\n return biomarkers.filter((b) => isBiomarkerVisible(b.code));\n}\n\n/**\n * Get all biomarkers for a specific category\n *\n * @param category - The category slug (e.g., 'coracao', 'tireoide')\n * @param options - Optional filters\n * @param options.includeHidden - Include hidden biomarkers (default: false)\n * @param options.sex - Filter by sex ('male', 'female', or 'both' for all)\n * @returns Array of biomarker definitions for the category\n */\nexport function getBiomarkersByCategory(\n category: string,\n options?: {\n includeHidden?: boolean;\n sex?: 'male' | 'female' | 'both';\n },\n): BiomarkerDefinition[] {\n const { includeHidden = false, sex = 'both' } = options ?? {};\n\n return BIOMARKER_DEFINITIONS.filter((def) => {\n const categories = Array.isArray(def.category) ? def.category : [def.category];\n if (!categories.includes(category)) return false;\n if (!includeHidden && def.hidden) return false;\n if (sex !== 'both') {\n // Include biomarkers that are for this sex or for 'both' (undefined)\n if (def.sex && def.sex !== sex && def.sex !== 'both') return false;\n }\n return true;\n });\n}\n\n/**\n * Get all biomarkers for multiple categories\n *\n * @param categories - Array of category slugs\n * @param options - Optional filters (same as getBiomarkersByCategory)\n * @returns Array of biomarker definitions grouped by category\n */\nexport function getBiomarkersForCategories(\n categories: string[],\n options?: {\n includeHidden?: boolean;\n sex?: 'male' | 'female' | 'both';\n },\n): Record<string, BiomarkerDefinition[]> {\n const result: Record<string, BiomarkerDefinition[]> = {};\n\n for (const category of categories) {\n const biomarkers = getBiomarkersByCategory(category, options);\n if (biomarkers.length > 0) {\n result[category] = biomarkers;\n }\n }\n\n return result;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/bundle-urls.ts","../src/converter.ts"],"sourcesContent":["/**\n * Endereço das entradas de um Bundle.\n *\n * O `fullUrl` identifica a entrada, e é contra ele que o validador resolve as\n * referências entre os recursos. Um Bundle com `subject.reference` valendo\n * `Patient/abc` só resolve se alguma entrada tiver `fullUrl` terminando em\n * `/Patient/abc`: a referência relativa é lida contra a base do `fullUrl` da\n * entrada, que é como os exemplos da própria HL7 montam Bundle de coleção.\n *\n * Antes o `fullUrl` era `urn:uuid:observation-<laudo>-<código>`, que erra duas\n * vezes. `urn:uuid:` exige a sintaxe de UUID e aquilo não era um UUID, e num\n * Bundle de entradas `urn:uuid:` a referência precisa repetir a URN inteira,\n * então nenhuma das relativas resolvia. Um laudo de 22 marcadores saía com 24\n * erros de URN e 22 referências perdidas.\n */\n/**\n * Recurso que já tem id, e por isso pode ser endereçado numa entrada.\n *\n * No FHIR o `id` é opcional, porque um recurso pode viajar sem identidade\n * própria. Numa entrada de Bundle ele não pode: sem id não há `fullUrl`, e sem\n * `fullUrl` nenhuma referência chega ao recurso. Os conversores daqui sempre\n * atribuem um, e o tipo passa a dizer isso em vez de deixar `undefined` chegar\n * até a montagem da URL.\n */\nexport type Addressable<T> = T & { id: string };\n\n/**\n * Base dos `fullUrl`.\n *\n * Não precisa responder a uma requisição: no FHIR o `fullUrl` é identidade, não\n * endereço de download. Fica sob um domínio nosso para não colidir com a\n * identidade de recurso de outra instituição, que é o risco real de usar\n * `example.org` em dado que sai da máquina.\n */\nexport const BUNDLE_BASE_URL = 'https://precisa-saude.com.br/fhir';\n\n/**\n * Monta o `fullUrl` a partir do próprio recurso.\n *\n * Recebe o recurso em vez do tipo e do id soltos de propósito. O defeito que\n * isto substitui nasceu de montar os dois lados em separado: o `fullUrl` dizia\n * `observation-demo-Hgb` enquanto o recurso tinha id `demo-Hgb`, e ninguém\n * percebeu porque nada obrigava os dois a concordarem.\n *\n * O parâmetro pede o mínimo que a URL consome, e não a união de recursos que\n * este pacote converte. Um Bundle pode carregar qualquer recurso do R4, e quem\n * acrescenta uma entrada de um tipo que não está nessa união (um `Specimen`,\n * por exemplo) precisa do mesmo endereço, senão monta o dele e as duas formas\n * divergem outra vez.\n */\nexport const entryFullUrl = (resource: Addressable<{ resourceType: string }>): string =>\n `${BUNDLE_BASE_URL}/${resource.resourceType}/${resource.id}`;\n","/**\n * FHIR Converter\n *\n * Converts lab results to FHIR R4 DiagnosticReport and Observation resources.\n * See: https://hl7.org/fhir/diagnosticreport.html\n */\n\nimport { codeToLoinc } from './biomarkers';\nimport { type Addressable, entryFullUrl } from './bundle-urls';\nimport { BIOMARKER_CODE_SYSTEM, LOINC_SYSTEM } from './code-systems';\nimport type {\n FHIRBundle,\n FHIRDiagnosticReport,\n FHIRObservation,\n FHIRPatient,\n FHIRQuantity,\n FHIRReferenceRange,\n} from './fhir-types';\nimport type { Flag, LabObservationData, LabReportData, UserProfileData } from './types';\nimport { getDefaultUnit, unitToUCUM } from './units';\n\n// Re-export all types and functions\nexport * from './fhir-types';\n\n/**\n * Convert Flag to FHIR interpretation code\n */\nfunction interpretationCode(flag: Flag): string {\n switch (flag) {\n case 'H':\n return 'H'; // High\n case 'L':\n return 'L'; // Low\n default:\n return 'N'; // Normal\n }\n}\n\n/**\n * Convert Flag to FHIR interpretation display\n */\nfunction interpretationDisplay(flag: Flag): string {\n switch (flag) {\n case 'H':\n return 'High';\n case 'L':\n return 'Low';\n default:\n return 'Normal';\n }\n}\n\n/**\n * O `coding` do sexo, que vai **dentro** do CodeableConcept do `appliesTo`.\n *\n * O nome diz `CODING` e não `APPLIES_TO` de propósito: isto não é o valor do\n * campo, é uma entrada da lista de codificações dele. O embrulho acontece no\n * uso, em `{ coding: [SEX_CODING[sex]] }`.\n *\n * É o `AdministrativeGender`, e não o v3-ObservationInterpretation nem um\n * sistema nosso: um consumidor que já lê `Patient.gender` compara os dois sem\n * tabela de tradução no meio.\n */\nconst SEX_CODING = {\n female: {\n code: 'female',\n display: 'Female',\n system: 'http://hl7.org/fhir/administrative-gender',\n },\n male: { code: 'male', display: 'Male', system: 'http://hl7.org/fhir/administrative-gender' },\n} as const;\n\n/**\n * Monta as faixas de referência do `Observation`.\n *\n * Duas mudanças em relação ao que existia, e as duas são sobre não perder o que\n * o laudo imprimiu.\n *\n * **Um limite só já basta.** Antes a faixa só saía com os dois, e um laudo que\n * publica \"inferior a 190 mg/dL\" ou \"superior a 60 mL/min/1,73m²\" perdia o\n * campo inteiro. O R4 trata `low` e `high` como opcionais independentes e\n * documenta o caso de um lado só, e o importador deste mesmo pacote já lia\n * `low?.value` e `high?.value` com acesso opcional: a assimetria era só do\n * escritor. Ver PRE-430.\n *\n * **Mais de uma faixa, anotada.** Laudo com uma coluna de referência por sexo\n * passa a sair com as duas, cada uma com o seu `appliesTo`, em vez de o\n * pipeline escolher uma sem saber de quem é o exame. Ver PRE-424 e PRE-425.\n */\nconst buildReferenceRanges = (\n observation: LabObservationData,\n sourceUnit: string,\n ucumUnit: string,\n): FHIRReferenceRange[] => {\n const quantity = (value: number): FHIRQuantity => ({\n code: ucumUnit,\n system: 'http://unitsofmeasure.org',\n unit: sourceUnit,\n value,\n });\n\n // Devolve lista, e não uma faixa: o caso sem limite nenhum vira lista vazia\n // em vez de `undefined`, e aí os dois caminhos abaixo se compõem com\n // `flatMap` sem ninguém precisar filtrar nada depois.\n const toRanges = (low?: number, high?: number, sex?: 'female' | 'male'): FHIRReferenceRange[] => {\n if (low === undefined && high === undefined) return [];\n\n return [\n {\n ...(sex === undefined ? {} : { appliesTo: [{ coding: [SEX_CODING[sex]] }] }),\n ...(high === undefined ? {} : { high: quantity(high) }),\n ...(low === undefined ? {} : { low: quantity(low) }),\n },\n ];\n };\n\n // A lista anotada tem precedência: quando ela existe, o par simples é o\n // resumo de uma das colunas e repeti-lo publicaria a mesma faixa duas vezes,\n // uma delas sem dizer a quem se aplica.\n //\n // Lista vazia cai no par simples, igual a ausente, e isso é escolha: as duas\n // dizem \"não tenho faixa anotada\", e tratá-las diferente faria um `[]` vindo\n // de um `.filter()` apagar em silêncio a faixa que o chamador também mandou\n // em `referenceMin` e `referenceMax`.\n if (observation.referenceRanges && observation.referenceRanges.length > 0) {\n return observation.referenceRanges.flatMap((r) => toRanges(r.low, r.high, r.appliesTo));\n }\n\n return toRanges(observation.referenceMin, observation.referenceMax);\n};\n\n/**\n * Convert generic lab observation to FHIR Observation\n */\nexport function labObservationToFHIR(\n observation: LabObservationData,\n patientId: string,\n laboratoryName?: string,\n): Addressable<FHIRObservation> {\n const loincCode = codeToLoinc(observation.biomarkerCode);\n // Use default unit if source unit is empty\n const sourceUnit =\n observation.unit || getDefaultUnit(observation.biomarkerCode) || observation.unit;\n const ucumUnit = unitToUCUM(sourceUnit);\n const isQualitative = observation.isQualitative || typeof observation.value === 'string';\n\n // Base observation structure\n const fhirObs: Addressable<FHIRObservation> = {\n category: [\n {\n coding: [\n {\n code: 'laboratory',\n display: 'Laboratory',\n system: 'http://terminology.hl7.org/CodeSystem/observation-category',\n },\n ],\n },\n ],\n code: {\n // Sem LOINC, o coding LOINC simplesmente não sai. Antes ia `99999-9`,\n // que não é código LOINC nenhum: publicava sob `http://loinc.org` uma\n // afirmação falsa, e quem consumisse o bundle confiando no system\n // trataria aquilo como código de verdade. Composição corporal, densidade\n // óssea e escore de cálcio não têm LOINC, e o certo é a lacuna explícita.\n coding: [\n ...(loincCode\n ? [\n {\n code: loincCode,\n display: observation.biomarkerName,\n system: LOINC_SYSTEM,\n },\n ]\n : []),\n {\n code: observation.biomarkerCode,\n display: observation.biomarkerName,\n system: BIOMARKER_CODE_SYSTEM,\n },\n ],\n text: observation.biomarkerName,\n },\n effectiveDateTime: observation.collectionDate,\n id: `${observation.reportId}-${observation.biomarkerCode}`,\n interpretation: [\n {\n coding: [\n {\n code: interpretationCode(observation.flag),\n display: interpretationDisplay(observation.flag),\n system: 'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation',\n },\n ],\n },\n ],\n performer: laboratoryName ? [{ display: laboratoryName }] : undefined,\n resourceType: 'Observation',\n status: 'final',\n subject: {\n reference: `Patient/${patientId}`,\n },\n };\n\n // Add value based on type (qualitative = string, quantitative = number)\n if (isQualitative) {\n fhirObs.valueString = String(observation.value);\n } else {\n fhirObs.valueQuantity = {\n code: ucumUnit,\n system: 'http://unitsofmeasure.org',\n unit: sourceUnit,\n value: observation.value as number,\n };\n\n // Reference range only applies to quantitative values\n const referenceRange = buildReferenceRanges(observation, sourceUnit, ucumUnit);\n if (referenceRange.length > 0) fhirObs.referenceRange = referenceRange;\n }\n\n return fhirObs;\n}\n\n/**\n * Convert generic lab report to FHIR DiagnosticReport\n */\nexport function labReportToFHIR(\n report: LabReportData,\n patientId: string,\n observationIds: string[],\n): Addressable<FHIRDiagnosticReport> {\n // Map processing status to FHIR status\n let status: FHIRDiagnosticReport['status'];\n switch (report.processingStatus) {\n case 'complete':\n status = 'final';\n break;\n case 'partial':\n status = 'partial';\n break;\n case 'pending_review':\n status = 'preliminary';\n break;\n default:\n status = 'final';\n }\n\n return {\n category: [\n {\n coding: [\n {\n code: 'LAB',\n display: 'Laboratory',\n system: 'http://terminology.hl7.org/CodeSystem/v2-0074',\n },\n ],\n },\n ],\n code: {\n coding: [\n {\n code: '11502-2', // Laboratory report\n display: 'Laboratory report',\n system: 'http://loinc.org',\n },\n ],\n text: 'Laboratory Results',\n },\n conclusion:\n report.overallStatus === 'NORMAL'\n ? 'All results within normal limits'\n : 'One or more abnormal results detected',\n conclusionCode:\n report.overallStatus === 'ANORMAL'\n ? [\n {\n coding: [\n {\n code: 'A',\n display: 'Abnormal',\n system: 'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation',\n },\n ],\n },\n ]\n : undefined,\n effectiveDateTime: report.collectionDate,\n id: report.reportId,\n issued: report.createdAt,\n performer: report.laboratoryName ? [{ display: report.laboratoryName }] : undefined,\n resourceType: 'DiagnosticReport',\n result: observationIds.map((id) => ({ reference: `Observation/${id}` })),\n status,\n subject: {\n reference: `Patient/${patientId}`,\n },\n };\n}\n\n/**\n * Convert user profile to FHIR Patient\n * NOTE: CPF is intentionally excluded for privacy (LGPD compliance)\n */\nexport function userProfileToFHIR(profile: UserProfileData): Addressable<FHIRPatient> {\n const nameParts = profile.name.split(' ');\n const given = nameParts.slice(0, -1);\n const family = nameParts[nameParts.length - 1] || '';\n\n return {\n address: profile.address\n ? [\n {\n city: profile.address.city,\n country: profile.address.country || 'BR',\n line: [\n profile.address.street && profile.address.number\n ? `${profile.address.street}, ${profile.address.number}`\n : profile.address.street,\n profile.address.complement,\n ].filter(Boolean) as string[],\n postalCode: profile.address.postalCode,\n state: profile.address.state,\n },\n ]\n : undefined,\n birthDate: profile.birthDate,\n gender: profile.gender,\n id: profile.userId,\n name: [\n {\n family,\n given: given.length > 0 ? given : undefined,\n text: profile.name,\n },\n ],\n resourceType: 'Patient',\n telecom:\n [\n ...(profile.email ? [{ system: 'email' as const, value: profile.email }] : []),\n ...(profile.phone ? [{ system: 'phone' as const, value: profile.phone }] : []),\n ].length > 0\n ? [\n ...(profile.email ? [{ system: 'email' as const, value: profile.email }] : []),\n ...(profile.phone ? [{ system: 'phone' as const, value: profile.phone }] : []),\n ]\n : undefined,\n };\n}\n\n/**\n * Convert complete lab result to FHIR Bundle\n * This is the main function for exporting lab results to FHIR R4 format\n */\nexport function labResultToFHIRBundle(\n report: LabReportData,\n observations: LabObservationData[],\n userProfile: UserProfileData,\n): FHIRBundle {\n const patientId = userProfile.userId;\n\n // Convert observations\n const fhirObservations = observations.map((obs) => {\n const resource = labObservationToFHIR(\n { ...obs, collectionDate: report.collectionDate },\n patientId,\n report.laboratoryName,\n );\n\n return { fullUrl: entryFullUrl(resource), resource };\n });\n\n // Os ids vêm dos recursos já montados, e não de uma segunda montagem da mesma\n // regra. O `DiagnosticReport.result` aponta para eles, e era aqui que a\n // referência se separava do recurso.\n const observationIds = fhirObservations.map((entry) => entry.resource.id);\n\n // Convert report\n const diagnosticReport = labReportToFHIR(report, patientId, observationIds);\n\n // Convert patient\n const fhirPatient = userProfileToFHIR(userProfile);\n\n return {\n entry: [\n { fullUrl: entryFullUrl(fhirPatient), resource: fhirPatient },\n { fullUrl: entryFullUrl(diagnosticReport), resource: diagnosticReport },\n ...fhirObservations,\n ],\n resourceType: 'Bundle',\n type: 'collection',\n };\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/validators.ts"],"sourcesContent":["/**\n * FHIR Validators\n *\n * Validation functions for FHIR R4 resources.\n */\n\nimport type { FHIRDiagnosticReport, FHIRObservation } from './fhir-types';\nimport type { ImportError } from './importer';\n\n/**\n * Validate FHIR DiagnosticReport\n */\nexport function validateFHIRDiagnosticReport(report: FHIRDiagnosticReport): string[] {\n const errors: string[] = [];\n\n if (!report.resourceType || report.resourceType !== 'DiagnosticReport') {\n errors.push('Invalid resourceType');\n }\n\n if (!report.status) {\n errors.push('Missing status');\n }\n\n if (!report.code || !report.code.coding || report.code.coding.length === 0) {\n errors.push('Missing or invalid code');\n }\n\n if (!report.subject || !report.subject.reference) {\n errors.push('Missing subject reference');\n }\n\n return errors;\n}\n\n/**\n * Validate FHIR Observation\n */\nexport function validateFHIRObservation(observation: FHIRObservation): string[] {\n const errors: string[] = [];\n\n if (!observation.resourceType || observation.resourceType !== 'Observation') {\n errors.push('Invalid resourceType');\n }\n\n if (!observation.status) {\n errors.push('Missing status');\n }\n\n if (!observation.code || !observation.code.coding || observation.code.coding.length === 0) {\n errors.push('Missing or invalid code');\n }\n\n if (!observation.subject || !observation.subject.reference) {\n errors.push('Missing subject reference');\n }\n\n if (!observation.valueQuantity && !observation.valueString) {\n errors.push('Missing value (valueQuantity or valueString)');\n }\n\n return errors;\n}\n\n/**\n * Validate that the input is a structurally valid FHIR Bundle\n */\nexport function validateFHIRImportBundle(data: unknown): ImportError[] {\n const errors: ImportError[] = [];\n\n if (!data || typeof data !== 'object') {\n errors.push({ details: 'Input must be a JSON object', field: 'root' });\n return errors;\n }\n\n const bundle = data as Record<string, unknown>;\n\n if (bundle.resourceType !== 'Bundle') {\n errors.push({\n details: `Expected resourceType \"Bundle\", got \"${String(bundle.resourceType)}\"`,\n field: 'resourceType',\n });\n }\n\n if (!Array.isArray(bundle.entry)) {\n errors.push({ details: 'Bundle must contain an \"entry\" array', field: 'entry' });\n } else if (bundle.entry.length === 0) {\n errors.push({ details: 'Bundle entry array is empty', field: 'entry' });\n }\n\n return errors;\n}\n"],"mappings":";AAYO,SAAS,6BAA6B,QAAwC;AACnF,QAAM,SAAmB,CAAC;AAE1B,MAAI,CAAC,OAAO,gBAAgB,OAAO,iBAAiB,oBAAoB;AACtE,WAAO,KAAK,sBAAsB;AAAA,EACpC;AAEA,MAAI,CAAC,OAAO,QAAQ;AAClB,WAAO,KAAK,gBAAgB;AAAA,EAC9B;AAEA,MAAI,CAAC,OAAO,QAAQ,CAAC,OAAO,KAAK,UAAU,OAAO,KAAK,OAAO,WAAW,GAAG;AAC1E,WAAO,KAAK,yBAAyB;AAAA,EACvC;AAEA,MAAI,CAAC,OAAO,WAAW,CAAC,OAAO,QAAQ,WAAW;AAChD,WAAO,KAAK,2BAA2B;AAAA,EACzC;AAEA,SAAO;AACT;AAKO,SAAS,wBAAwB,aAAwC;AAC9E,QAAM,SAAmB,CAAC;AAE1B,MAAI,CAAC,YAAY,gBAAgB,YAAY,iBAAiB,eAAe;AAC3E,WAAO,KAAK,sBAAsB;AAAA,EACpC;AAEA,MAAI,CAAC,YAAY,QAAQ;AACvB,WAAO,KAAK,gBAAgB;AAAA,EAC9B;AAEA,MAAI,CAAC,YAAY,QAAQ,CAAC,YAAY,KAAK,UAAU,YAAY,KAAK,OAAO,WAAW,GAAG;AACzF,WAAO,KAAK,yBAAyB;AAAA,EACvC;AAEA,MAAI,CAAC,YAAY,WAAW,CAAC,YAAY,QAAQ,WAAW;AAC1D,WAAO,KAAK,2BAA2B;AAAA,EACzC;AAEA,MAAI,CAAC,YAAY,iBAAiB,CAAC,YAAY,aAAa;AAC1D,WAAO,KAAK,8CAA8C;AAAA,EAC5D;AAEA,SAAO;AACT;AAKO,SAAS,yBAAyB,MAA8B;AACrE,QAAM,SAAwB,CAAC;AAE/B,MAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,WAAO,KAAK,EAAE,SAAS,+BAA+B,OAAO,OAAO,CAAC;AACrE,WAAO;AAAA,EACT;AAEA,QAAM,SAAS;AAEf,MAAI,OAAO,iBAAiB,UAAU;AACpC,WAAO,KAAK;AAAA,MACV,SAAS,wCAAwC,OAAO,OAAO,YAAY,CAAC;AAAA,MAC5E,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,MAAM,QAAQ,OAAO,KAAK,GAAG;AAChC,WAAO,KAAK,EAAE,SAAS,wCAAwC,OAAO,QAAQ,CAAC;AAAA,EACjF,WAAW,OAAO,MAAM,WAAW,GAAG;AACpC,WAAO,KAAK,EAAE,SAAS,+BAA+B,OAAO,QAAQ,CAAC;AAAA,EACxE;AAEA,SAAO;AACT;","names":[]}