@restforgejs/platform 4.3.5 → 5.0.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.
- package/bin/sdf-tools.exe +0 -0
- package/build-info.json +2 -2
- package/cli/consumer-deploy.js +1 -1
- package/cli/consumer.js +1 -1
- package/generators/cli/payload/migrate.js +96 -0
- package/generators/lib/dbschema-kit/apply-engine.js +211 -46
- package/generators/lib/dbschema-kit/diff-engine.js +14 -2
- package/generators/lib/dbschema-kit/emitters/alter-table.js +96 -2
- package/generators/lib/dbschema-kit/introspect-mapper.js +9 -0
- package/generators/lib/migrate/backend-payload-migrator.js +221 -0
- package/generators/lib/migrate/field-type-resolver.js +319 -0
- package/generators/lib/migrate/label-generator.js +38 -0
- package/generators/lib/migrate/migrate-runner.js +187 -0
- package/generators/lib/migrate/naming.js +43 -0
- package/generators/lib/migrate/sql-parser.js +124 -0
- package/generators/lib/payload/payload-runner.js +106 -11
- package/generators/lib/templates/dashboard-catalog.js +1 -1
- package/generators/lib/templates/db-connection-env.js +1 -1
- package/generators/lib/templates/dbschema-catalog.js +1 -1
- package/generators/lib/templates/field-validation-catalog.js +1 -1
- package/generators/lib/templates/mysql-template.js +1 -1
- package/generators/lib/templates/oracle-template.js +1 -1
- package/generators/lib/templates/postgres-template.js +1 -1
- package/generators/lib/templates/query-declarative-catalog.js +1 -1
- package/generators/lib/templates/sqlite-template.js +1 -1
- package/integrity-manifest.json +18 -18
- package/node_modules/brace-expansion/index.js +1 -1
- package/node_modules/brace-expansion/package.json +1 -1
- package/node_modules/dayjs/CHANGELOG.md +7 -0
- package/node_modules/dayjs/README.md +12 -10
- package/node_modules/dayjs/dayjs.min.js +1 -1
- package/node_modules/dayjs/esm/constant.js +1 -1
- package/node_modules/dayjs/esm/plugin/duration/index.js +5 -4
- package/node_modules/dayjs/locale.json +1 -1
- package/node_modules/dayjs/package.json +2 -2
- package/node_modules/dayjs/plugin/duration.js +1 -1
- package/node_modules/tmp/lib/tmp.js +37 -7
- package/node_modules/tmp/package.json +4 -16
- package/package.json +1 -1
- package/scripts/verify-integrity.js +1 -1
- package/server.js +1 -1
- package/src/components/handlers/adjust_handler.js +1 -1
- package/src/components/handlers/audit_handler.js +1 -1
- package/src/components/handlers/delete_handler.js +1 -1
- package/src/components/handlers/export_handler.js +1 -1
- package/src/components/handlers/import_handler.js +1 -1
- package/src/components/handlers/insert_handler.js +1 -1
- package/src/components/handlers/update_handler.js +1 -1
- package/src/components/handlers/upload_handler.js +1 -1
- package/src/components/handlers/workflow_handler.js +1 -1
- package/src/components/integrations/webhook.js +1 -1
- package/src/consumers/baseConsumer.js +1 -1
- package/src/consumers/declarativeMapper.js +1 -1
- package/src/consumers/handlers/apiHandler.js +1 -1
- package/src/consumers/handlers/consoleHandler.js +1 -1
- package/src/consumers/handlers/databaseHandler.js +1 -1
- package/src/consumers/handlers/index.js +1 -1
- package/src/consumers/handlers/kafkaHandler.js +1 -1
- package/src/consumers/index.js +1 -1
- package/src/consumers/messageTransformer.js +1 -1
- package/src/consumers/validator.js +1 -1
- package/src/core/db/dialect/base-dialect.js +1 -1
- package/src/core/db/dialect/index.js +1 -1
- package/src/core/db/dialect/mysql-dialect.js +1 -1
- package/src/core/db/dialect/oracle-dialect.js +1 -1
- package/src/core/db/dialect/postgres-dialect.js +1 -1
- package/src/core/db/dialect/sqlite-dialect.js +1 -1
- package/src/core/db/flatten-helper.js +1 -1
- package/src/core/db/query-builder-error.js +1 -1
- package/src/core/db/query-builder.js +1 -1
- package/src/core/db/relation-helper.js +1 -1
- package/src/core/handlers/delete_handler.js +1 -1
- package/src/core/handlers/insert_handler.js +1 -1
- package/src/core/handlers/update_handler.js +1 -1
- package/src/core/models/base-model.js +1 -1
- package/src/core/utils/cache-manager.js +1 -1
- package/src/core/utils/component-engine.js +1 -1
- package/src/core/utils/context-builder.js +1 -1
- package/src/core/utils/datetime-formatter.js +1 -1
- package/src/core/utils/datetime-parser.js +1 -1
- package/src/core/utils/db.js +1 -1
- package/src/core/utils/logger.js +1 -1
- package/src/core/utils/payload-loader.js +1 -1
- package/src/core/utils/security-checks.js +1 -1
- package/src/middleware/body-options.js +1 -1
- package/src/middleware/cors.js +1 -1
- package/src/middleware/idempotency.js +1 -1
- package/src/middleware/rate-limiter.js +1 -1
- package/src/middleware/request-logger.js +1 -1
- package/src/middleware/security-headers.js +1 -1
- package/src/models/base-model-mysql.js +1 -1
- package/src/models/base-model-oracle.js +1 -1
- package/src/models/base-model-sqlite.js +1 -1
- package/src/models/base-model.js +1 -1
- package/src/pro/caching/redis-client.js +1 -1
- package/src/pro/caching/redis-helper.js +1 -1
- package/src/pro/consumers/baseConsumer.js +1 -1
- package/src/pro/consumers/declarativeMapper.js +1 -1
- package/src/pro/consumers/handlers/apiHandler.js +1 -1
- package/src/pro/consumers/handlers/consoleHandler.js +1 -1
- package/src/pro/consumers/handlers/databaseHandler.js +1 -1
- package/src/pro/consumers/handlers/index.js +1 -1
- package/src/pro/consumers/handlers/kafkaHandler.js +1 -1
- package/src/pro/consumers/index.js +1 -1
- package/src/pro/consumers/messageTransformer.js +1 -1
- package/src/pro/consumers/validator.js +1 -1
- package/src/pro/database/base-model-mysql.js +1 -1
- package/src/pro/database/base-model-oracle.js +1 -1
- package/src/pro/database/base-model-sqlite.js +1 -1
- package/src/pro/database/db-mysql.js +1 -1
- package/src/pro/database/db-oracle.js +1 -1
- package/src/pro/database/db-sqlite.js +1 -1
- package/src/pro/excel/excel-generator.js +1 -1
- package/src/pro/excel/excel-parser.js +1 -1
- package/src/pro/excel/export-service.js +1 -1
- package/src/pro/excel/export_handler.js +1 -1
- package/src/pro/excel/import-service.js +1 -1
- package/src/pro/excel/import-validator.js +1 -1
- package/src/pro/excel/import_handler.js +1 -1
- package/src/pro/excel/upsert-builder.js +1 -1
- package/src/pro/idgen/idgen-routes.js +1 -1
- package/src/pro/integrations/lookup-resolver.js +1 -1
- package/src/pro/integrations/upload-handler-v2.js +1 -1
- package/src/pro/integrations/upload-handler.js +1 -1
- package/src/pro/integrations/webhook.js +1 -1
- package/src/pro/locking/lock-routes.js +1 -1
- package/src/pro/locking/resource-lock-manager.js +1 -1
- package/src/pro/messaging/kafkaConsumerService.js +1 -1
- package/src/pro/messaging/kafkaService.js +1 -1
- package/src/pro/messaging/messagehubService.js +1 -1
- package/src/pro/messaging/rabbitmqService.js +1 -1
- package/src/pro/scheduler/job-manager.js +1 -1
- package/src/pro/scheduler/job-routes.js +1 -1
- package/src/pro/scheduler/job-validator.js +1 -1
- package/src/pro/storage/base-storage-provider.js +1 -1
- package/src/pro/storage/file-metadata-helper.js +1 -1
- package/src/pro/storage/index.js +1 -1
- package/src/pro/storage/local-storage-provider.js +1 -1
- package/src/pro/storage/s3-storage-provider.js +1 -1
- package/src/pro/storage/upload-cleanup-job.js +1 -1
- package/src/pro/storage/upload-cleanup-scheduler.js +1 -1
- package/src/pro/storage/upload-pending-tracker.js +1 -1
- package/src/pro/websocket/broadcast-helper.js +1 -1
- package/src/pro/websocket/index.js +1 -1
- package/src/pro/websocket/livesync-server.js +1 -1
- package/src/pro/websocket/ws-broadcaster.js +1 -1
- package/src/services/export-service.js +1 -1
- package/src/services/import-service.js +1 -1
- package/src/services/kafkaConsumerService.js +1 -1
- package/src/services/kafkaService.js +1 -1
- package/src/services/messagehubService.js +1 -1
- package/src/services/rabbitmqService.js +1 -1
- package/src/utils/cache-invalidation-registry.js +1 -1
- package/src/utils/cache-manager.js +1 -1
- package/src/utils/component-engine.js +1 -1
- package/src/utils/config-extractor.js +1 -1
- package/src/utils/consumerLogger.js +1 -1
- package/src/utils/context-builder.js +1 -1
- package/src/utils/dashboard-helpers.js +1 -1
- package/src/utils/dateHelper.js +1 -1
- package/src/utils/datetime-formatter.js +1 -1
- package/src/utils/datetime-parser.js +1 -1
- package/src/utils/db-bootstrap.js +1 -1
- package/src/utils/db-mysql.js +1 -1
- package/src/utils/db-oracle.js +1 -1
- package/src/utils/db-sqlite.js +1 -1
- package/src/utils/db.js +1 -1
- package/src/utils/demo-generator.js +1 -1
- package/src/utils/excel-generator.js +1 -1
- package/src/utils/excel-parser.js +1 -1
- package/src/utils/file-watcher.js +1 -1
- package/src/utils/id-generator.js +1 -1
- package/src/utils/idempotency-manager.js +1 -1
- package/src/utils/import-validator.js +1 -1
- package/src/utils/license-client.js +1 -1
- package/src/utils/lock-manager.js +1 -1
- package/src/utils/logger.js +1 -1
- package/src/utils/lookup-resolver.js +1 -1
- package/src/utils/payload-loader.js +1 -1
- package/src/utils/processor-response.js +1 -1
- package/src/utils/rabbitmq.js +1 -1
- package/src/utils/redis-client.js +1 -1
- package/src/utils/redis-helper.js +1 -1
- package/src/utils/request-scope.js +1 -1
- package/src/utils/security-checks.js +1 -1
- package/src/utils/service-resolver.js +1 -1
- package/src/utils/shutdown-coordinator.js +1 -1
- package/src/utils/trusted-keys.js +1 -1
- package/src/utils/upload-handler.js +1 -1
- package/src/utils/upsert-builder.js +1 -1
- package/src/utils/workflow-hook-executor.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
function a0_0x59b1(_0x8537ca,_0x233e03){_0x8537ca=_0x8537ca-0xad;const _0xe32ca9=a0_0xe32c();let _0x59b179=_0xe32ca9[_0x8537ca];if(a0_0x59b1['cQbkBt']===undefined){var _0x43f1d2=function(_0x1937bb){const _0x44443e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x917392='',_0x5ad82e='';for(let _0x27909d=0x0,_0x5a93ad,_0x5ce065,_0x496a9d=0x0;_0x5ce065=_0x1937bb['charAt'](_0x496a9d++);~_0x5ce065&&(_0x5a93ad=_0x27909d%0x4?_0x5a93ad*0x40+_0x5ce065:_0x5ce065,_0x27909d++%0x4)?_0x917392+=String['fromCharCode'](0xff&_0x5a93ad>>(-0x2*_0x27909d&0x6)):0x0){_0x5ce065=_0x44443e['indexOf'](_0x5ce065);}for(let _0x36e721=0x0,_0x58bd19=_0x917392['length'];_0x36e721<_0x58bd19;_0x36e721++){_0x5ad82e+='%'+('00'+_0x917392['charCodeAt'](_0x36e721)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5ad82e);};a0_0x59b1['dXrmoX']=_0x43f1d2,a0_0x59b1['Mbzxwr']={},a0_0x59b1['cQbkBt']=!![];}const _0x557579=_0xe32ca9[0x0],_0x45ef1b=_0x8537ca+_0x557579,_0x290f9d=a0_0x59b1['Mbzxwr'][_0x45ef1b];return!_0x290f9d?(_0x59b179=a0_0x59b1['dXrmoX'](_0x59b179),a0_0x59b1['Mbzxwr'][_0x45ef1b]=_0x59b179):_0x59b179=_0x290f9d,_0x59b179;}const a0_0x3ab12f=a0_0x59b1;(function(_0x17c801,_0x2d7d08){const _0x374364=a0_0x59b1,_0x2190ea=_0x17c801();while(!![]){try{const _0x394fbb=-parseInt(_0x374364(0x153))/0x1*(-parseInt(_0x374364(0x1cf))/0x2)+-parseInt(_0x374364(0x21a))/0x3+-parseInt(_0x374364(0x196))/0x4+parseInt(_0x374364(0x124))/0x5*(parseInt(_0x374364(0x20f))/0x6)+-parseInt(_0x374364(0xe9))/0x7*(parseInt(_0x374364(0x107))/0x8)+parseInt(_0x374364(0x177))/0x9+-parseInt(_0x374364(0xcb))/0xa*(-parseInt(_0x374364(0xb7))/0xb);if(_0x394fbb===_0x2d7d08)break;else _0x2190ea['push'](_0x2190ea['shift']());}catch(_0x5cadc2){_0x2190ea['push'](_0x2190ea['shift']());}}}(a0_0xe32c,0xd298a));const FileUtils=require('../utils/file-utils');function assertNoFileReferenceLeftover(_0x1c9557){const _0x23a0ab=a0_0x59b1,_0x413ee2={'iIufY':_0x23a0ab(0x14d),'gwlht':function(_0x53d73d,_0x46c74c){return _0x53d73d===_0x46c74c;}},_0x19cc0a=[['datatablesQuery',_0x1c9557['datatablesQuery']],[_0x23a0ab(0xd7),_0x1c9557[_0x23a0ab(0xd7)]],[_0x413ee2['iIufY'],_0x1c9557[_0x23a0ab(0x103)]&&_0x1c9557[_0x23a0ab(0x103)][_0x23a0ab(0x113)]&&_0x1c9557['masterDetail']['detailConfig']['detailQuery']]];for(const [_0x409bef,_0x1747bd]of _0x19cc0a){if(_0x413ee2[_0x23a0ab(0x148)](typeof _0x1747bd,_0x23a0ab(0x200))&&_0x1747bd[_0x23a0ab(0x1fb)]('file:'))throw new Error('Codegen\x20invariant\x20violation:\x20'+_0x409bef+'\x20still\x20contains\x20\x22file:\x22\x20reference\x20('+_0x1747bd+').\x20'+_0x23a0ab(0x12e));}}function buildValidFieldsString(_0x416b87){const _0x868791=a0_0x59b1,_0x2c084d={'Zkbeg':_0x868791(0x176)},_0x12c0fa=_0x416b87['fieldName']||[];return _0x12c0fa[_0x868791(0x1f5)](_0x5f0971=>'\x27'+_0x5f0971+'\x27')['join'](_0x2c084d[_0x868791(0x156)]);}function buildAuditColumnsSection(_0x25b450,_0x27bdd4){const _0x21f6cf=a0_0x59b1,_0x2d3fdf={'AspaX':function(_0xb541cc,_0x272b72){return _0xb541cc!==_0x272b72;},'gaLPD':function(_0x2072db,_0x15a942){return _0x2072db in _0x15a942;},'iZFRq':function(_0x17bf33,_0x113896){return _0x17bf33===_0x113896;},'xQhRs':_0x21f6cf(0x1d5),'yrYBO':'updatedBy'};if(!_0x2d3fdf['gaLPD'](_0x21f6cf(0x183),_0x25b450))return'';const _0x30e777=_0x25b450[_0x21f6cf(0x183)];if(_0x30e777===![]||_0x2d3fdf[_0x21f6cf(0x135)](_0x30e777,null))return'\x0a'+_0x27bdd4+'//\x20Tabel\x20tanpa\x20audit\x20columns:\x20disable\x20injection\x20helper\x0a'+_0x27bdd4+'this.auditColumns\x20=\x20null;\x0a';if(_0x2d3fdf['iZFRq'](typeof _0x30e777,_0x2d3fdf[_0x21f6cf(0xf3)])&&!Array['isArray'](_0x30e777)){const _0x5203ed=[_0x21f6cf(0xb8),_0x21f6cf(0x18b),'updatedAt',_0x2d3fdf['yrYBO']],_0x4690e6={};_0x5203ed[_0x21f6cf(0x120)](_0x1f5456=>{const _0x3618cc=_0x21f6cf;if(_0x2d3fdf[_0x3618cc(0xff)](_0x30e777[_0x1f5456],undefined))_0x4690e6[_0x1f5456]=_0x30e777[_0x1f5456];});const _0x3f739f=JSON[_0x21f6cf(0x212)](_0x4690e6,null,0x2)[_0x21f6cf(0x1d8)]('\x0a')[_0x21f6cf(0x1f5)]((_0x5a90bf,_0x3b82c2)=>_0x3b82c2===0x0?_0x5a90bf:_0x27bdd4+_0x5a90bf)['join']('\x0a');return'\x0a'+_0x27bdd4+'//\x20Custom\x20audit\x20columns\x20mapping\x20dari\x20payload\x0a'+_0x27bdd4+'this.auditColumns\x20=\x20'+_0x3f739f+';\x0a';}throw new Error('Invalid\x20auditColumns\x20value\x20for\x20'+_0x25b450[_0x21f6cf(0x1aa)]+_0x21f6cf(0x18f));}function buildSearchColumnsCode(_0x4b193d){const _0x5378f9=a0_0x59b1;if(!_0x4b193d['searchColumns']||!Array[_0x5378f9(0x11c)](_0x4b193d['searchColumns']))return'';return _0x5378f9(0x13d)+JSON[_0x5378f9(0x212)](_0x4b193d['searchColumns'],null,0x4)+';\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Build\x20search\x20WHERE\x20clause\x20berdasarkan\x20searchable\x20columns\x0a\x20\x20\x20*\x20@param\x20{string}\x20searchValue\x20-\x20Nilai\x20pencarian\x0a\x20\x20\x20*\x20@param\x20{string}\x20searchBy\x20-\x20Kolom\x20yang\x20dicari\x0a\x20\x20\x20*\x20@returns\x20{string}\x20WHERE\x20clause\x0a\x20\x20\x20*/\x0a\x20\x20buildSearchWhereClause(searchValue,\x20searchBy\x20=\x20\x27all\x27)\x20{\x0a\x20\x20\x20\x20if\x20(!searchValue\x20||\x20searchValue.trim()\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27\x27;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20searchableColumns\x20=\x20this.getSearchableColumns();\x0a\x20\x20\x20\x20const\x20escapedSearchValue\x20=\x20searchValue.replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20const\x20likeValue\x20=\x20`%${escapedSearchValue}%`;\x0a\x0a\x20\x20\x20\x20if\x20(searchBy\x20&&\x20searchBy\x20!==\x20\x27all\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Cari\x20di\x20kolom\x20spesifik\x0a\x20\x20\x20\x20\x20\x20const\x20column\x20=\x20searchableColumns.find(col\x20=>\x20col.name\x20===\x20searchBy);\x0a\x20\x20\x20\x20\x20\x20if\x20(column\x20&&\x20column.searchable)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20`WHERE\x20UPPER(${searchBy})\x20LIKE\x20UPPER(\x27${likeValue}\x27)`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Cari\x20di\x20semua\x20kolom\x20searchable\x0a\x20\x20\x20\x20const\x20conditions\x20=\x20searchableColumns\x0a\x20\x20\x20\x20\x20\x20.filter(col\x20=>\x20col.searchable)\x0a\x20\x20\x20\x20\x20\x20.map(col\x20=>\x20`UPPER(${col.name})\x20LIKE\x20UPPER(\x27${likeValue}\x27)`);\x0a\x0a\x20\x20\x20\x20if\x20(conditions.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20`WHERE\x20(${conditions.join(\x27\x20OR\x20\x27)})`;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20\x27\x27;\x0a\x20\x20}';}function buildFiltersCode(_0xd24400){const _0x274cfa=a0_0x59b1;if(!_0xd24400[_0x274cfa(0x154)]||!Array[_0x274cfa(0x11c)](_0xd24400['filters']))return'';return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Mendapatkan\x20definisi\x20filter\x20yang\x20tersedia\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Filter\x20yang\x20tersedia\x0a\x20\x20\x20*/\x0a\x20\x20getAvailableFilters()\x20{\x0a\x20\x20\x20\x20return\x20'+JSON['stringify'](_0xd24400[_0x274cfa(0x154)],null,0x4)+_0x274cfa(0x1a5);}function buildDefaultScopeSQL(_0x48d162,_0x245a2c='a.'){const _0x5334ec=a0_0x59b1,_0x355d8d={'XEyld':'object','ULWjq':function(_0x561ecc,_0x24b1f1){return _0x561ecc===_0x24b1f1;},'WoyAb':_0x5334ec(0x1a0),'kwYqh':function(_0xb1373e,_0x3783d3){return _0xb1373e===_0x3783d3;},'ANnby':_0x5334ec(0x200),'rLKUV':_0x5334ec(0xfe),'CjSSF':'\x20AND\x20'};if(!_0x48d162||typeof _0x48d162!==_0x355d8d[_0x5334ec(0xce)])return'';const _0x4a0a67=[];for(const [_0x4a7ec6,_0x5739f7]of Object['entries'](_0x48d162)){if(_0x355d8d['ULWjq'](typeof _0x5739f7,_0x355d8d[_0x5334ec(0xca)]))_0x4a0a67[_0x5334ec(0xbe)](''+_0x245a2c+_0x4a7ec6+'\x20=\x20'+_0x5739f7);else{if(_0x355d8d[_0x5334ec(0x15d)](typeof _0x5739f7,_0x355d8d[_0x5334ec(0xf2)]))_0x4a0a67[_0x5334ec(0xbe)](''+_0x245a2c+_0x4a7ec6+_0x5334ec(0x111)+_0x5739f7[_0x5334ec(0x20e)](/'/g,'\x27\x27')+'\x27');else _0x355d8d['ULWjq'](typeof _0x5739f7,_0x355d8d['rLKUV'])&&_0x4a0a67['push'](''+_0x245a2c+_0x4a7ec6+'\x20=\x20'+_0x5739f7);}}return _0x4a0a67[_0x5334ec(0x18e)](_0x355d8d[_0x5334ec(0xef)]);}function buildRequestScopeMiddleware(_0x2c6aee,_0x217f22){const _0x1f5f0d=a0_0x59b1;if(!_0x2c6aee[_0x1f5f0d(0xc0)])return'';const {column:_0x589936,source:_0xcae3dd,bypassRoles:_0x366398}=_0x2c6aee['requestScope'],_0x376f93=JSON['stringify'](_0x366398||[]),_0x54abfb=(_0x217f22||'')['replace'](/-/g,'_');return'\x0a//\x20───\x20Request\x20Scope\x20Middleware\x20(Layer\x201\x20RLS)\x20──────────────────────────\x0a//\x20Dynamic\x20per-request\x20filtering\x20by\x20\x27'+_0x589936+_0x1f5f0d(0x108)+_0xcae3dd+'\x0a//\x20Generated\x20from\x20requestScope\x20configuration\x20in\x20payload\x20JSON\x0arouter.use((req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20if\x20(req.method\x20!==\x20\x27POST\x27)\x20return\x20next();\x0a\x0a\x20\x20//\x20Skip\x20when\x20no\x20auth\x20context\x20(endpoint\x20without\x20auth\x20middleware)\x0a\x20\x20if\x20(!req.user)\x20return\x20next();\x0a\x0a\x20\x20//\x20Skip\x20when\x20user\x20has\x20bypass\x20role\x0a\x20\x20const\x20userRoles\x20=\x20req.user.roles\x20||\x20[];\x0a\x20\x20const\x20bypassRoles\x20=\x20'+_0x376f93+';\x0a\x20\x20if\x20(bypassRoles.length\x20>\x200\x20&&\x20bypassRoles.some(role\x20=>\x20userRoles.includes(role)))\x20{\x0a\x20\x20\x20\x20return\x20next();\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Read\x20scope\x20value\x20from\x20user\x20context\x0a\x20\x20const\x20scopeValue\x20=\x20'+_0xcae3dd+';\x0a\x20\x20if\x20(scopeValue\x20===\x20undefined\x20||\x20scopeValue\x20===\x20null)\x20{\x0a\x20\x20\x20\x20return\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27Request\x20scope\x20value\x20not\x20available\x20in\x20user\x20context\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Expose\x20scope\x20info\x20for\x20route\x20handlers\x20(ownership\x20verification\x20in\x20/first,\x20/update,\x20/update-composite)\x0a\x20\x20req._requestScope\x20=\x20{\x20column:\x20\x27'+_0x589936+'\x27,\x20value:\x20scopeValue\x20};\x0a\x0a\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x0a\x20\x20const\x20scopeCondition\x20=\x20{\x20key:\x20\x27'+_0x589936+'\x27,\x20value:\x20scopeValue\x20};\x0a\x0a\x20\x20//\x20READ\x20operations:\x20inject\x20scope\x20into\x20req.body.where\x0a\x20\x20if\x20([\x27datatables\x27,\x20\x27read\x27,\x20\x27lookup\x27,\x20\x27read-composite\x27].includes(endpoint))\x20{\x0a\x20\x20\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20[scopeCondition];\x0a\x20\x20\x20\x20}\x20else\x20if\x20(Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where.unshift(scopeCondition);\x0a\x20\x20\x20\x20}\x20else\x20if\x20(req.body.where.conditions\x20&&\x20Array.isArray(req.body.where.conditions))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20originalLogic\x20=\x20req.body.where.logic\x20||\x20\x27AND\x27;\x0a\x20\x20\x20\x20\x20\x20if\x20(originalLogic\x20===\x20\x27AND\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20req.body.where.conditions.unshift(scopeCondition);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logic:\x20\x27AND\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20scopeCondition,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20logic:\x20originalLogic,\x20conditions:\x20req.body.where.conditions\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20//\x20DELETE:\x20prepend\x20scope\x20condition\x20to\x20where\x20array\x0a\x20\x20if\x20(endpoint\x20===\x20\x27delete\x27)\x20{\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20req.body.where.unshift(scopeCondition);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20//\x20CREATE\x20/\x20ADD:\x20force\x20scope\x20column\x20value\x0a\x20\x20if\x20(endpoint\x20===\x20\x27add\x27\x20||\x20endpoint\x20===\x20\x27create\x27)\x20{\x0a\x20\x20\x20\x20req.body[\x27'+_0x589936+'\x27]\x20=\x20scopeValue;\x0a\x20\x20}\x0a\x0a\x20\x20//\x20UPDATE:\x20force\x20scope\x20column\x20value\x20(ownership\x20verified\x20in\x20/update\x20handler)\x0a\x20\x20if\x20(endpoint\x20===\x20\x27update\x27)\x20{\x0a\x20\x20\x20\x20req.body[\x27'+_0x589936+_0x1f5f0d(0x16d)+_0x54abfb+_0x1f5f0d(0x1e7)+_0x589936+'\x27]\x20=\x20scopeValue;\x0a\x20\x20}\x0a\x0a\x20\x20next();\x0a});\x0a';}function buildLookupOverrideCode(_0x2629f4,_0x10b8e){const _0x3e6a36=a0_0x59b1,_0x3d814e={'qswIR':function(_0x35c53e,_0x35ed44){return _0x35c53e(_0x35ed44);},'XARMC':_0x3e6a36(0x14e)},_0xd07ffd=FileUtils[_0x3e6a36(0x10b)](_0x10b8e['fieldName']||[]),_0x3bebd6=FileUtils['toPascalCase'](_0x2629f4),_0x362b0f=_0x10b8e['_extendedFields']||{'all':_0x10b8e[_0x3e6a36(0x218)]||[]},_0x1e1270=_0x10b8e['primaryKey']||_0x10b8e[_0x3e6a36(0x218)]&&_0x10b8e['fieldName'][0x0]||'id',_0x3eeddf=_0x10b8e[_0x3e6a36(0xd1)]&&_0x10b8e[_0x3e6a36(0xd1)]['lookup']?_0x3d814e['qswIR'](buildDefaultScopeSQL,_0x10b8e[_0x3e6a36(0xd1)]['lookup']):'';return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Mendapatkan\x20FROM\x20clause\x20untuk\x20lookup\x20berdasarkan\x20prioritas\x20resolusi\x20sumber\x20data\x0a\x20\x20\x20*\x20Prioritas:\x20viewName\x20→\x20viewQuery\x20→\x20tableName\x20(konsisten\x20dengan\x20/read\x20dan\x20/first)\x0a\x20\x20\x20*\x20@returns\x20{string}\x20FROM\x20clause\x20dengan\x20alias\x20\x27a\x27\x0a\x20\x20\x20*/\x0a\x20\x20getLookupSource()\x20{\x0a\x20\x20\x20\x20const\x20readQuery\x20=\x20this.getReadQuery();\x0a\x20\x20\x20\x20const\x20simpleQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20if\x20(readQuery.trim()\x20!==\x20simpleQuery)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20viewName\x20atau\x20viewQuery\x20aktif\x20—\x20bungkus\x20sebagai\x20subquery\x0a\x20\x20\x20\x20\x20\x20return\x20\x27(\x27\x20+\x20readQuery\x20+\x20\x27)\x20a\x27;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20this.readSource\x20+\x20\x27\x20a\x27;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getLookupData\x20untuk\x20menggunakan\x20kolom\x20\x27'+_0xd07ffd+_0x3e6a36(0x1bf)+_0x1e1270+',\x20'+_0xd07ffd+'\x20FROM\x20\x27\x20+\x20this.getLookupSource()\x20+\x20\x27\x20WHERE\x20upper(a.'+_0xd07ffd+')\x20LIKE\x20upper($1)'+(_0x3eeddf?_0x3e6a36(0x114)+_0x3eeddf:'')+'\x20ORDER\x20BY\x20a.'+_0xd07ffd+'\x27;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20params\x20=\x20[`%${search\x20||\x20\x27\x27}%`];\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x1e1270+_0x3e6a36(0x1ed)+_0xd07ffd+'\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupData\x20('+_0x3bebd6+_0x3e6a36(0x21c)+JSON[_0x3e6a36(0x212)](_0x10b8e['_lookupConfig']||null)+';\x0a\x20\x20\x20\x20\x20\x20const\x20textFields\x20=\x20lookupConfig\x20&&\x20lookupConfig.searchFields.length\x20>\x200\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20lookupConfig.searchFields\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20'+JSON['stringify'](_0x362b0f['textFields']||[_0xd07ffd])+_0x3e6a36(0x140)+(_0x3eeddf?_0x3e6a36(0xb5)+_0x3eeddf+_0x3e6a36(0x175):'')+_0x3e6a36(0xb2)+JSON[_0x3e6a36(0x212)](_0x10b8e['fieldName']||[])+_0x3e6a36(0x1db)+_0x1e1270+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20textField\x20=\x20lookupConfig\x20&&\x20lookupConfig.hasCustomText\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20lookupConfig.textField\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20textFields[0];\x0a\x0a\x20\x20\x20\x20\x20\x20let\x20query\x20=\x20`SELECT\x20${idField},\x20${textField}\x20FROM\x20${this.getLookupSource()}`;\x0a\x20\x20\x20\x20\x20\x20if\x20(whereConditions.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`\x20WHERE\x20${whereConditions.join(\x27\x20AND\x20\x27)}`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20query\x20+=\x20`\x20ORDER\x20BY\x20${lookupConfig\x20&&\x20lookupConfig.hasCustomText\x20?\x20\x272\x27\x20:\x20\x27a.\x27\x20+\x20textFields[0]}`;\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27===\x20DEBUG\x20DYNAMIC\x20LOOKUP\x20===\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Query:\x27,\x20query);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Params:\x27,\x20params);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Extra\x20filters:\x27,\x20extraFilters);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Lookup\x20config:\x27,\x20lookupConfig);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27===\x20END\x20DEBUG\x20===\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item[idField]\x20||\x20item.'+_0x1e1270+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item[lookupConfig\x20&&\x20lookupConfig.hasCustomText\x20?\x20\x27display_text\x27\x20:\x20textFields[0]]\x20||\x20\x27\x27\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupDataDynamic\x20('+_0x3bebd6+'Model):\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getStaticLookupData\x20untuk\x20menggunakan\x20kolom\x20\x27'+_0xd07ffd+_0x3e6a36(0xe3)+_0x1e1270+',\x20'+_0xd07ffd+'\x20FROM\x20\x27\x20+\x20this.getLookupSource()\x20+\x20\x27'+(_0x3eeddf?'\x20WHERE\x20'+_0x3eeddf:'')+_0x3e6a36(0x1d7)+_0xd07ffd+'\x27;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache\x20result\x20tanpa\x20selected\x20flag\x0a\x20\x20\x20\x20\x20\x20const\x20cacheData\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x1e1270+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item.'+_0xd07ffd+'\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedLookup(cacheOptions,\x20cacheData,\x20\x27static\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Return\x20dengan\x20selected\x20flag\x0a\x20\x20\x20\x20\x20\x20return\x20data.map(item\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x1e1270+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item.'+_0xd07ffd+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(item.'+_0x1e1270+'\x20===\x20selectedTag)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.selected\x20=\x20\x27true\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getStaticLookupData\x20('+_0x3bebd6+_0x3e6a36(0xc2)+_0x1e1270+'\x27,\x20\x27'+_0xd07ffd+'\x27];\x0a\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Parse\x20dan\x20validasi\x20select\x20columns\x20untuk\x20support\x20SQL\x20expressions\x0a\x20\x20\x20\x20\x20\x20const\x20validTextFields\x20=\x20'+JSON['stringify'](_0x362b0f['textFields']||[])+_0x3e6a36(0x187)+_0x1e1270+'\x27;\x0a\x20\x20\x20\x20\x20\x20let\x20textField\x20=\x20\x27'+_0xd07ffd+'\x27;\x0a\x20\x20\x20\x20\x20\x20let\x20aliasField\x20=\x20null;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Proses\x20setiap\x20column\x20dalam\x20select\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20column\x20of\x20selectColumns)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(column.toLowerCase()\x20===\x20\x27'+_0x1e1270+_0x3e6a36(0x10e)+_0xd07ffd+_0x3e6a36(0x208)+(_0x3eeddf?'WHERE\x20'+_0x3eeddf+'\x20':'')+_0x3e6a36(0x217)+(_0x3eeddf?_0x3d814e[_0x3e6a36(0x17a)]:_0x3e6a36(0x15f))+_0x3e6a36(0x112)+(_0x3eeddf?')':'')+_0x3e6a36(0x188)+_0x1e1270+'\x27)\x20return\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(direction\x20!==\x20\x27ASC\x27\x20&&\x20direction\x20!==\x20\x27DESC\x27)\x20return\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20`${column}\x20${direction}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}).filter(Boolean);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(orderParts.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27No\x20valid\x20sort\x20columns\x20provided\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`ORDER\x20BY\x20${orderParts.join(\x27,\x20\x27)}`;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Order\x20by\x20text\x20field\x20(gunakan\x20alias\x20jika\x20ada)\x20-\x20default\x20behavior\x0a\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`ORDER\x20BY\x20${aliasField\x20||\x20textField}`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27===\x20DEBUG\x20'+_0x2629f4['toUpperCase']()+'\x20LOOKUP\x20WITH\x20FILTER\x20===\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Final\x20SQL:\x27,\x20query);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Parameters:\x27,\x20params);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Selected\x20columns:\x27,\x20selectColumns);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Sort\x20columns:\x27,\x20options.sort_columns\x20||\x20\x27none\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Valid\x20fields\x20for\x20ordering:\x27,\x20this.validFields);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Text\x20field:\x27,\x20textField);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Alias\x20field:\x27,\x20aliasField);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27===\x20END\x20DEBUG\x20===\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Eksekusi\x20query\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Format\x20hasil\x20untuk\x20lookup\x20(id\x20dan\x20text)\x20-\x20gunakan\x20alias\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20textFieldName\x20=\x20aliasField\x20||\x20textField;\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20data.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x1e1270+_0x3e6a36(0x16c)+_0xd07ffd+_0x3e6a36(0x126)+_0x3bebd6+_0x3e6a36(0x18d);}function buildAdvancedQuerySection(_0x202d40){const _0x4fac18=a0_0x59b1,_0x453a2e=_0x202d40[_0x4fac18(0x13c)]||{};if(Object['keys'](_0x453a2e)[_0x4fac18(0x201)]===0x0)return _0x4fac18(0x1c5);return'\x0a\x20\x20\x20\x20//\x20Load\x20advanced\x20query\x20templates\x0a\x20\x20\x20\x20const\x20queryDefinitions\x20=\x20{\x0a'+Object['entries'](_0x453a2e)['map'](([_0x47a66a,_0x1bb649])=>_0x4fac18(0x1f6)+_0x47a66a+_0x4fac18(0x1f0)+JSON[_0x4fac18(0x212)](_0x1bb649))['join'](',\x0a')+'\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20for\x20(const\x20[queryName,\x20querySource]\x20of\x20Object.entries(queryDefinitions))\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Cek\x20apakah\x20string\x20dimulai\x20dengan\x20\x22file:\x22\x20untuk\x20menentukan\x20apakah\x20ini\x20path\x20file\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(typeof\x20querySource\x20===\x20\x27string\x27\x20&&\x20querySource.startsWith(\x27file:\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Ambil\x20path\x20relatif\x20dari\x20querySource\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20relativePath\x20=\x20querySource.replace(\x27file:\x27,\x20\x27\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20filePath\x20=\x20path.join(__dirname,\x20relativePath);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Attempting\x20to\x20read\x20template\x20file\x20${queryName}\x20from\x20path:\x20${filePath}`);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(fs.existsSync(filePath))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20templates[queryName]\x20=\x20fs.readFileSync(filePath,\x20\x27utf8\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`SQL\x20template\x20${queryName}\x20loaded\x20successfully\x20from\x20file:\x20${relativePath}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`SQL\x20template\x20file\x20${queryName}\x20not\x20found:\x20${filePath}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20templates[queryName]\x20=\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Jika\x20bukan\x20path\x20file,\x20gunakan\x20string\x20SQL\x20langsung\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20templates[queryName]\x20=\x20querySource;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`SQL\x20template\x20${queryName}\x20loaded\x20successfully\x20from\x20SQL\x20string`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20loading\x20SQL\x20template\x20${queryName}:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20\x20\x20templates[queryName]\x20=\x20null;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}';}function buildQueryLoadingCode(_0x44c230,_0x3f26ef){const _0x3d2af6=a0_0x59b1,_0x4f5f73={'FvpDA':'${payload.tableName\x20||\x20\x22undefined_table\x22}'};if(!_0x44c230)return'let\x20baseQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;';const _0xde25d0=_0x44c230['replace'](/\$\{tableName\}/g,'${payload.tableName\x20||\x20\x22undefined_table\x22}')[_0x3d2af6(0x20e)](/\$\{this\.table\}/g,_0x4f5f73['FvpDA']);return _0x3d2af6(0xe2)+_0xde25d0+'`.trim();';}function buildFieldMappingCode(_0x465e32){const _0x42c8c2=a0_0x59b1,_0x440d10={'MyIPw':_0x42c8c2(0x1be)},_0x3bc68d=_0x465e32['_extendedFields']||{};return _0x42c8c2(0x1da)+JSON[_0x42c8c2(0x212)](_0x3bc68d[_0x42c8c2(0xe8)]||[])+_0x42c8c2(0x1af)+JSON['stringify'](_0x3bc68d['dateFields']||[])+_0x42c8c2(0x189)+JSON['stringify'](_0x3bc68d['requiredFields']||[])+_0x42c8c2(0x21d)+(_0x3bc68d['primaryTextField']||_0x440d10[_0x42c8c2(0x15b)])+_0x42c8c2(0x165);}function _generateValidationConfig(_0x364b80){const _0x195e12=a0_0x59b1,_0x590280={'CvGWj':function(_0x2e01d9,_0x23c40f){return _0x2e01d9===_0x23c40f;}};if(!_0x364b80||!Array['isArray'](_0x364b80)||_0x590280['CvGWj'](_0x364b80['length'],0x0))return _0x195e12(0x1c7);const _0x23e013=_0x364b80[_0x195e12(0x1f5)](_0x4d3df6=>{const _0x286e68=_0x195e12,_0x20aba8=JSON[_0x286e68(0x212)](_0x4d3df6[_0x286e68(0x204)]||{},null,0x6)['replace'](/\n/g,'\x0a\x20\x20\x20\x20\x20\x20');return _0x286e68(0x11e)+_0x4d3df6[_0x286e68(0x1be)]+'\x27:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20type:\x20\x27'+_0x4d3df6['type']+_0x286e68(0x194)+_0x20aba8+_0x286e68(0x1b9);})[_0x195e12(0x18e)](',\x0a');return'\x20\x20\x20\x20//\x20Field\x20validation\x20configuration\x0a\x20\x20\x20\x20this.validationConfig\x20=\x20{\x0a'+_0x23e013+_0x195e12(0x155);}function _generateValidateFieldConstraints(){return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20field\x20dengan\x20constraints\x0a\x20\x20\x20*\x20@param\x20{string}\x20fieldName\x20-\x20Nama\x20field\x0a\x20\x20\x20*\x20@param\x20{*}\x20value\x20-\x20Nilai\x20field\x0a\x20\x20\x20*\x20@param\x20{string}\x20operation\x20-\x20Operation\x20(insert/update)\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Validation\x20result\x20{valid,\x20errors,\x20warnings,\x20sanitized}\x0a\x20\x20\x20*/\x0a\x20\x20async\x20validateFieldConstraints(fieldName,\x20value,\x20operation\x20=\x20\x27insert\x27)\x20{\x0a\x20\x20\x20\x20const\x20config\x20=\x20this.validationConfig[fieldName];\x0a\x20\x20\x20\x20if\x20(!config)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20{valid:\x20true,\x20sanitized:\x20value,\x20errors:\x20[],\x20warnings:\x20[]};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20true,\x0a\x20\x20\x20\x20\x20\x20errors:\x20[],\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20value\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20const\x20constraints\x20=\x20config.constraints\x20||\x20{};\x0a\x20\x20\x20\x20const\x20fieldType\x20=\x20config.type\x20||\x20\x27string\x27;\x0a\x0a\x20\x20\x20\x20//\x201.\x20Check\x20required\x0a\x20\x20\x20\x20if\x20(constraints.required\x20&&\x20(value\x20===\x20undefined\x20||\x20value\x20===\x20null\x20||\x20value\x20===\x20\x27\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Skip:\x20autoGenerate\x20atau\x20primaryKey\x20di\x20insert\x0a\x20\x20\x20\x20\x20\x20if\x20(operation\x20===\x20\x27insert\x27\x20&&\x20(constraints.autoGenerate\x20||\x20constraints.primaryKey))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20akan\x20di-generate\x20otomatis\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20//\x20Skip:\x20update\x20partial\x20—\x20field\x20tidak\x20dikirim\x20berarti\x20tidak\x20diubah\x0a\x20\x20\x20\x20\x20\x20else\x20if\x20(operation\x20===\x20\x27update\x27\x20&&\x20value\x20===\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20OK\x20—\x20field\x20tidak\x20sedang\x20di-update\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.requiredMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20is\x20required`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.valid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Skip\x20validation\x20jika\x20value\x20kosong\x20dan\x20tidak\x20required\x0a\x20\x20\x20\x20if\x20(value\x20===\x20undefined\x20||\x20value\x20===\x20null\x20||\x20value\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x202.\x20Type-specific\x20validation\x0a\x20\x20\x20\x20switch\x20(fieldType)\x20{\x0a\x20\x20\x20\x20\x20\x20case\x20\x27string\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20await\x20this._validateStringConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27integer\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27decimal\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27number\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateNumberConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27date\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27datetime\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27timestamp\x27:\x0a\x20\x20\x20\x20\x20\x20case\x20\x27time\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateDateConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27boolean\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateBooleanConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27uuid\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateUuidConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27array\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateArrayConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20case\x20\x27json\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20this._validateJsonConstraints(fieldName,\x20value,\x20constraints);\x0a\x20\x20\x20\x20\x20\x20default:\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20string\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20async\x20_validateStringConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20String(value);\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20const\x20isHashField\x20=\x20constraints.hash\x20===\x20\x27bcrypt\x27;\x0a\x0a\x20\x20\x20\x20//\x20Trim\x0a\x20\x20\x20\x20if\x20(constraints.trim)\x20{\x0a\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.trim();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Case\x20transformation\x20(skip\x20jika\x20hash\x20field\x20—\x20tidak\x20relevan\x20untuk\x20password)\x0a\x20\x20\x20\x20if\x20(!isHashField)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(constraints.lowercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toLowerCase();\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(constraints.uppercase)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20sanitized.toUpperCase();\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Length\x20validation\x20(validasi\x20plaintext\x20sebelum\x20hash)\x0a\x20\x20\x20\x20if\x20(constraints.minLength\x20&&\x20sanitized.length\x20<\x20constraints.minLength)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.minLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20at\x20least\x20${constraints.minLength}\x20characters`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(constraints.maxLength\x20&&\x20!isHashField\x20&&\x20sanitized.length\x20>\x20constraints.maxLength)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.maxLengthMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20not\x20exceed\x20${constraints.maxLength}\x20characters`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Pattern\x20validation\x20(validasi\x20plaintext\x20sebelum\x20hash)\x0a\x20\x20\x20\x20if\x20(constraints.pattern)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20regex\x20=\x20new\x20RegExp(constraints.pattern);\x0a\x20\x20\x20\x20\x20\x20if\x20(!regex.test(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.patternMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20does\x20not\x20match\x20required\x20pattern`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Format\x20validation\x20(email,\x20phone,\x20url,\x20uuid)\x0a\x20\x20\x20\x20if\x20(constraints.format)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20formatValid\x20=\x20this._validateFormat(sanitized,\x20constraints.format);\x0a\x20\x20\x20\x20\x20\x20if\x20(!formatValid.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.formatMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20has\x20invalid\x20${constraints.format}\x20format`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Enum\x20validation\x0a\x20\x20\x20\x20if\x20(constraints.enum\x20&&\x20Array.isArray(constraints.enum))\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(!constraints.enum.includes(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.enumMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20one\x20of:\x20${constraints.enum.join(\x27,\x20\x27)}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Skip\x20unique\x20constraint\x20-\x20database\x20akan\x20handle\x20via\x20UNIQUE\x20index\x0a\x20\x20\x20\x20//\x20if\x20(constraints.unique)\x20{\x20/*\x20handled\x20by\x20database\x20*/\x20}\x0a\x0a\x20\x20\x20\x20//\x20Hash\x20transformation\x20(setelah\x20semua\x20validation\x20pass,\x20sebelum\x20return)\x0a\x20\x20\x20\x20if\x20(isHashField\x20&&\x20errors.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20bcrypt\x20=\x20require(\x27bcrypt\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20cost\x20=\x20constraints.hashCost\x20||\x2010;\x0a\x20\x20\x20\x20\x20\x20sanitized\x20=\x20await\x20bcrypt.hash(sanitized,\x20cost);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20number\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateNumberConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x0a\x20\x20\x20\x20//\x20Parse\x20to\x20number\x0a\x20\x20\x20\x20if\x20(typeof\x20sanitized\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20sanitized\x20=\x20parseFloat(sanitized);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(isNaN(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20valid\x20number`);\x0a\x20\x20\x20\x20\x20\x20return\x20{valid:\x20false,\x20errors:\x20errors,\x20warnings:\x20[],\x20sanitized:\x20value};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Min/Max\x0a\x20\x20\x20\x20if\x20(constraints.min\x20!==\x20undefined\x20&&\x20sanitized\x20<\x20constraints.min)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.minMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20at\x20least\x20${constraints.min}`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(constraints.max\x20!==\x20undefined\x20&&\x20sanitized\x20>\x20constraints.max)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.maxMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20not\x20exceed\x20${constraints.max}`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Positive/Negative\x0a\x20\x20\x20\x20if\x20(constraints.positive\x20&&\x20sanitized\x20<=\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.positiveMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20positive`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(constraints.negative\x20&&\x20sanitized\x20>=\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.negativeMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20negative`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Integer\x20check\x0a\x20\x20\x20\x20if\x20(constraints.integer\x20&&\x20!Number.isInteger(sanitized))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.integerMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20an\x20integer`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Precision/Scale\x20for\x20decimal\x0a\x20\x20\x20\x20if\x20(constraints.precision\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20decimals\x20=\x20(sanitized.toString().split(\x27.\x27)[1]\x20||\x20\x27\x27).length;\x0a\x20\x20\x20\x20\x20\x20if\x20(decimals\x20>\x20constraints.precision)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.precisionMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20have\x20at\x20most\x20${constraints.precision}\x20decimal\x20places`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20date\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateDateConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x0a\x20\x20\x20\x20//\x20Basic\x20date\x20validation\x20(more\x20complex\x20parsing\x20handled\x20by\x20DateTimeParser\x20in\x20basemodel)\x0a\x20\x20\x20\x20//\x20Min/Max\x20date\x20range\x0a\x20\x20\x20\x20if\x20(constraints.min\x20||\x20constraints.max)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20dateValue\x20=\x20new\x20Date(sanitized);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(isNaN(dateValue.getTime()))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20valid\x20date`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.min)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20minDate\x20=\x20new\x20Date(constraints.min);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(dateValue\x20<\x20minDate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.minMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20on\x20or\x20after\x20${constraints.min}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(constraints.max)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20maxDate\x20=\x20new\x20Date(constraints.max);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(dateValue\x20>\x20maxDate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.maxMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20on\x20or\x20before\x20${constraints.max}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20valid\x20date`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Before/After\x20relasi\x20akan\x20divalidasi\x20di\x20_validateCrossFieldConstraints\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20boolean\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateBooleanConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x0a\x20\x20\x20\x20if\x20(constraints.strict)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(typeof\x20sanitized\x20!==\x20\x27boolean\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20boolean\x20(true/false)`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Convert\x20truthy/falsy\x0a\x20\x20\x20\x20\x20\x20if\x20(sanitized\x20===\x20\x27true\x27\x20||\x20sanitized\x20===\x20\x271\x27\x20||\x20sanitized\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20true;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(sanitized\x20===\x20\x27false\x27\x20||\x20sanitized\x20===\x20\x270\x27\x20||\x20sanitized\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(typeof\x20sanitized\x20!==\x20\x27boolean\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20Boolean(sanitized);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20UUID\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateUuidConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20const\x20uuidRegex\x20=\x20/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\x0a\x0a\x20\x20\x20\x20if\x20(!uuidRegex.test(value))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.formatMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20a\x20valid\x20UUID`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20value\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20array\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateArrayConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x0a\x20\x20\x20\x20if\x20(!Array.isArray(value))\x20{\x0a\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20an\x20array`);\x0a\x20\x20\x20\x20\x20\x20return\x20{valid:\x20false,\x20errors:\x20errors,\x20warnings:\x20[],\x20sanitized:\x20value};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20minItems/maxItems\x0a\x20\x20\x20\x20if\x20(constraints.minItems\x20&&\x20value.length\x20<\x20constraints.minItems)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.minItemsMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20have\x20at\x20least\x20${constraints.minItems}\x20items`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(constraints.maxItems\x20&&\x20value.length\x20>\x20constraints.maxItems)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.maxItemsMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20not\x20exceed\x20${constraints.maxItems}\x20items`;\x0a\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20uniqueItems\x0a\x20\x20\x20\x20if\x20(constraints.uniqueItems)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20unique\x20=\x20[...new\x20Set(value)];\x0a\x20\x20\x20\x20\x20\x20if\x20(unique.length\x20!==\x20value.length)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.uniqueItemsMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20have\x20unique\x20items`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20value\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20JSON\x20constraints\x0a\x20\x20\x20*/\x0a\x20\x20_validateJsonConstraints(fieldName,\x20value,\x20constraints)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x20\x20\x20\x20let\x20sanitized\x20=\x20value;\x0a\x0a\x20\x20\x20\x20//\x20Parse\x20jika\x20string\x0a\x20\x20\x20\x20if\x20(typeof\x20sanitized\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sanitized\x20=\x20JSON.parse(sanitized);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Field\x20\x27${fieldName}\x27\x20must\x20be\x20valid\x20JSON`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20{valid:\x20false,\x20errors:\x20errors,\x20warnings:\x20[],\x20sanitized:\x20value};\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20JSON\x20Schema\x20validation\x20bisa\x20ditambahkan\x20di\x20sini\x20jika\x20diperlukan\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors,\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitized:\x20sanitized\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20format\x20(email,\x20phone,\x20url,\x20uuid)\x0a\x20\x20\x20*/\x0a\x20\x20_validateFormat(value,\x20format)\x20{\x0a\x20\x20\x20\x20const\x20patterns\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20email:\x20/^[^\x5cs@]+@[^\x5cs@]+\x5c.[^\x5cs@]+$/,\x0a\x20\x20\x20\x20\x20\x20phone:\x20/^[\x5cd\x5cs\x5c-\x5c+\x5c(\x5c)]+$/,\x0a\x20\x20\x20\x20\x20\x20url:\x20/^https?:\x5c/\x5c/.+/,\x0a\x20\x20\x20\x20\x20\x20uuid:\x20/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20const\x20pattern\x20=\x20patterns[format];\x0a\x20\x20\x20\x20if\x20(!pattern)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20{valid:\x20true};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{valid:\x20pattern.test(value)};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20cross-field\x20constraints\x20(before/after\x20date)\x0a\x20\x20\x20*/\x0a\x20\x20async\x20_validateCrossFieldConstraints(data,\x20operation)\x20{\x0a\x20\x20\x20\x20const\x20errors\x20=\x20[];\x0a\x0a\x20\x20\x20\x20for\x20(const\x20fieldName\x20in\x20this.validationConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20config\x20=\x20this.validationConfig[fieldName];\x0a\x20\x20\x20\x20\x20\x20const\x20constraints\x20=\x20config.constraints\x20||\x20{};\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(constraints.before)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeField\x20=\x20constraints.before;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(data[fieldName]\x20&&\x20data[beforeField])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(new\x20Date(data[fieldName])\x20>=\x20new\x20Date(data[beforeField]))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.beforeMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20before\x20\x27${beforeField}\x27`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Invalid\x20date\x20format\x20for\x20field\x20\x27${fieldName}\x27:\x20cannot\x20compare\x20dates`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(constraints.after)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20afterField\x20=\x20constraints.after;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(data[fieldName]\x20&&\x20data[afterField])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(new\x20Date(data[fieldName])\x20<=\x20new\x20Date(data[afterField]))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20message\x20=\x20constraints.afterMessage\x20||\x20`Field\x20\x27${fieldName}\x27\x20must\x20be\x20after\x20\x27${afterField}\x27`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors.push(`Invalid\x20date\x20format\x20for\x20field\x20\x27${fieldName}\x27:\x20cannot\x20compare\x20dates`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20valid:\x20errors.length\x20===\x200,\x0a\x20\x20\x20\x20\x20\x20errors:\x20errors\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a';}function generateCompositeMethods(_0x3ce1ed){const _0x5da6d4=a0_0x59b1,_0x49bd6d={'zpeDY':function(_0x9d0473,_0x5357df){return _0x9d0473===_0x5357df;},'huGYJ':_0x5da6d4(0x11f),'MzPwj':function(_0x1b65b0,_0x4b65c8){return _0x1b65b0>_0x4b65c8;},'qlbxD':function(_0x7ffcae,_0x486127){return _0x7ffcae>_0x486127;},'yMxlE':_0x5da6d4(0x1d1),'MhsJi':function(_0x43e50d,_0xd7542b){return _0x43e50d+_0xd7542b;},'wyPQa':function(_0x3a7c17,_0x14f23b){return _0x3a7c17+_0x14f23b;},'jdNJU':function(_0x44e894,_0x416f7b){return _0x44e894>_0x416f7b;},'XgDWv':_0x5da6d4(0xf8)},_0x455b7c=_0x3ce1ed['action']||{},_0x234e2e=_0x3ce1ed[_0x5da6d4(0x103)]&&_0x3ce1ed[_0x5da6d4(0x103)][_0x5da6d4(0x10a)];if(!_0x234e2e||!_0x455b7c[_0x5da6d4(0x1c1)]&&!_0x455b7c[_0x5da6d4(0x131)]&&!_0x455b7c['readComposite'])return'';const _0x5611d6=_0x3ce1ed['masterDetail'][_0x5da6d4(0x1a2)],_0x5dd61c=_0x3ce1ed['masterDetail']['foreignKey'],_0x195c0f=_0x3ce1ed['primaryKey']||'id';let _0x420d83='\x0a';if(_0x455b7c[_0x5da6d4(0x1c1)]){const _0x277c52=_0x3ce1ed['masterDetail']?.[_0x5da6d4(0x113)]?.['primaryKey']||_0x5611d6[_0x5da6d4(0x1d8)]('.')['pop']()+_0x5da6d4(0x173),_0x3a56ec=_0x3ce1ed['masterDetail']?.[_0x5da6d4(0x113)]?.['autoCalculateFields']||{},_0x43b5d=[],_0x140481=[];for(const [_0x1886a8,_0x70bdd6]of Object['entries'](_0x3a56ec)){if(_0x49bd6d[_0x5da6d4(0xc5)](_0x70bdd6[_0x5da6d4(0x142)],_0x49bd6d['huGYJ']))_0x43b5d[_0x5da6d4(0xbe)](_0x1886a8);else{const _0x2dbef8=(_0x70bdd6['formula']||'')[_0x5da6d4(0x1d8)]('*')['map'](_0x5bd3a7=>_0x5bd3a7['trim']());_0x140481[_0x5da6d4(0xbe)]({'fieldName':_0x1886a8,'qtyField':_0x2dbef8[0x0],'priceField':_0x2dbef8[0x1]});}}const _0x948cc7=_0x140481['map'](_0x2cd652=>{const _0x49bc3a=_0x5da6d4;return'\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-calculate\x20'+_0x2cd652['fieldName']+_0x49bc3a(0x117)+_0x2cd652[_0x49bc3a(0x121)]+_0x49bc3a(0x1b2)+_0x2cd652['priceField']+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20item.'+_0x2cd652['fieldName']+'\x20=\x20(Number(item.'+_0x2cd652['qtyField']+')\x20||\x200)\x20*\x20(Number(item.'+_0x2cd652[_0x49bc3a(0xba)]+_0x49bc3a(0x168);})[_0x5da6d4(0x18e)]('\x0a');_0x420d83+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Composite\x20create\x20-\x20Create\x20header\x20with\x20detail\x20items\x20in\x20a\x20single\x20transaction\x0a\x20\x20\x20*\x20@param\x20{Object}\x20data\x20-\x20Data\x20containing\x20header\x20and\x20detail\x20items\x20array\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Created\x20record\x20with\x20items\x0a\x20\x20\x20*/\x0a\x20\x20async\x20createComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20header\x20data\x20(exclude\x20detail\x20items)\x0a\x20\x20\x20\x20\x20\x20const\x20headerData\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x5611d6[_0x5da6d4(0x1d8)]('.')[_0x5da6d4(0x13e)]()+_0x5da6d4(0xe0)+_0x3ce1ed[_0x5da6d4(0x1aa)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x5611d6+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x5dd61c+_0x5da6d4(0x207)+_0x5611d6+_0x5da6d4(0x167)+_0x5dd61c+'\x27;\x0a\x20\x20\x20\x20\x20\x20'+(_0x49bd6d['MzPwj'](_0x43b5d['length'],0x0)?'const\x20generatedFields\x20=\x20'+JSON['stringify'](_0x43b5d)+';':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20detailPrimaryKey\x20=\x20\x27'+_0x277c52+_0x5da6d4(0x1b8)+(_0x948cc7?'\x0a'+_0x948cc7+'\x0a':'')+_0x5da6d4(0x13b)+(_0x49bd6d['qlbxD'](_0x43b5d[_0x5da6d4(0x201)],0x0)?_0x5da6d4(0x128):'')+_0x5da6d4(0xfd)+_0x3ce1ed[_0x5da6d4(0x1aa)]+_0x5da6d4(0xcf)+_0x5611d6+_0x5da6d4(0xc4)+_0x5dd61c+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20afterResult\x20=\x20await\x20ce.executeOnAfterComposite(\x27insert\x27,\x20afterCtx);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!afterResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`onAfterCompositeInsert\x20failed:\x20${afterResult.error}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27COMMIT\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Transaction\x20committed\x20successfully\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Invalidate\x20cache\x20setelah\x20write\x20operation\x20berhasil\x0a\x20\x20\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20...insertedHeader,\x0a\x20\x20\x20\x20\x20\x20\x20\x20[detailKey]:\x20insertedItems\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20createComposite:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a';}if(_0x455b7c['updateComposite']){const _0x586943=_0x3ce1ed['masterDetail']?.[_0x5da6d4(0x113)]?.['primaryKey']||_0x5611d6[_0x5da6d4(0x1d8)]('.')[_0x5da6d4(0x13e)]()+'_id',_0x1b4c02=_0x3ce1ed['masterDetail']?.['headerCalculations']||null,_0x43f01a=_0x3ce1ed[_0x5da6d4(0x103)]?.['detailConfig']?.[_0x5da6d4(0x1dd)]||{},_0x5e6b1a=[],_0x3ee47d=[];for(const [_0x378a84,_0x8db896]of Object[_0x5da6d4(0x101)](_0x43f01a)){if(_0x49bd6d[_0x5da6d4(0xc5)](_0x8db896['type'],_0x49bd6d['huGYJ']))_0x5e6b1a[_0x5da6d4(0xbe)](_0x378a84);else{const _0xa41b6=(_0x8db896[_0x5da6d4(0x186)]||'')['split']('*')['map'](_0x4346dc=>_0x4346dc['trim']());_0x3ee47d[_0x5da6d4(0xbe)]({'fieldName':_0x378a84,'qtyField':_0xa41b6[0x0],'priceField':_0xa41b6[0x1]});}}const _0x5f31ba=_0x3ee47d[_0x5da6d4(0x1f5)](_0x4e7939=>{const _0x197132=_0x5da6d4;return'\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-calculate\x20'+_0x4e7939['fieldName']+_0x197132(0x117)+_0x4e7939['qtyField']+_0x197132(0x1b2)+_0x4e7939['priceField']+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20item.'+_0x4e7939[_0x197132(0x218)]+_0x197132(0x105)+_0x4e7939['qtyField']+_0x197132(0x1c9)+_0x4e7939[_0x197132(0xba)]+')\x20||\x200);';})[_0x5da6d4(0x18e)]('\x0a'),_0x77d035=_0x3ce1ed['masterDetail']?.[_0x5da6d4(0x113)]?.[_0x5da6d4(0x1dd)]?.['total_amount']?.[_0x5da6d4(0x186)]||'',_0x1c8585=_0x77d035['split']('*')[_0x5da6d4(0x1f5)](_0x2e025e=>_0x2e025e['trim']()),_0xdc1d6b=_0x3ce1ed['masterDetail']?.[_0x5da6d4(0x118)]?.[_0x5da6d4(0x1bd)]?.['source']?.['replace']('items.','')||'',_0x29d22a=_0x1c8585[0x0]||_0xdc1d6b,_0x15338c=_0x1c8585[0x1]||_0x49bd6d['yMxlE'];_0x420d83+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Composite\x20update\x20-\x20Update\x20header\x20with\x20granular\x20detail\x20operations\x20(insert/update/delete)\x0a\x20\x20\x20*\x20@param\x20{Object}\x20data\x20-\x20Data\x20containing\x20header\x20and\x20detail_lines\x20with\x20insert/update/delete\x20arrays\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Updated\x20record\x20with\x20items\x0a\x20\x20\x20*/\x0a\x20\x20async\x20updateComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20primary\x20key\x20value\x0a\x20\x20\x20\x20\x20\x20const\x20primaryKeyValue\x20=\x20data[this.primaryKey];\x0a\x20\x20\x20\x20\x20\x20if\x20(!primaryKeyValue)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`Primary\x20key\x20${this.primaryKey}\x20is\x20required\x20for\x20update`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20if\x20record\x20exists\x20(also\x20serves\x20as\x20prefetch\x20oldData\x20for\x20hooks)\x0a\x20\x20\x20\x20\x20\x20const\x20checkQuery\x20=\x20`SELECT\x20*\x20FROM\x20${this.writeSource}\x20WHERE\x20${this.primaryKey}\x20=\x20$1`;\x0a\x20\x20\x20\x20\x20\x20const\x20checkResult\x20=\x20await\x20client.query(checkQuery,\x20[primaryKeyValue]);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(checkResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20oldData\x20=\x20checkResult.rows[0];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20header\x20data\x20(exclude\x20detail\x20items\x20and\x20primary\x20key)\x0a\x20\x20\x20\x20\x20\x20const\x20headerData\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x5611d6['split']('.')[_0x5da6d4(0x13e)]()+'\x27;\x0a\x20\x20\x20\x20\x20\x20delete\x20headerData[detailKey];\x0a\x20\x20\x20\x20\x20\x20delete\x20headerData[this.primaryKey];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20---\x20Hook:\x20onBeforeCompositeUpdate\x20---\x0a\x20\x20\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20componentEngine:\x20ce,\x20ContextBuilder:\x20CB\x20}\x20=\x20eventContext;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailOps\x20=\x20data[detailKey]\x20||\x20{};\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeCtx\x20=\x20CB.buildCompositeUpdateBeforeContext(headerData,\x20oldData,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20insert:\x20detailOps.insert\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20update:\x20detailOps.update\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20delete:\x20detailOps.delete\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x3ce1ed['tableName']+_0x5da6d4(0xcf)+_0x5611d6+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x5dd61c+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeResult\x20=\x20await\x20ce.executeOnBeforeComposite(\x27update\x27,\x20beforeCtx);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!beforeResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`onBeforeCompositeUpdate\x20failed:\x20${beforeResult.error}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20header\x20UPDATE\x20query\x0a\x20\x20\x20\x20\x20\x20const\x20headerFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20headerValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20placeholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(headerData))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerFields.push(`${key}\x20=\x20$${placeholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20placeholderIndex\x20=\x20this._appendUpdateAuditColumns(headerFields,\x20headerValues,\x20headerData,\x20eventContext,\x20placeholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20headerValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20\x20\x20const\x20headerUpdateQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20UPDATE\x20${this.writeSource}\x0a\x20\x20\x20\x20\x20\x20\x20\x20SET\x20${headerFields.join(\x27,\x20\x27)}\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20${this.primaryKey}\x20=\x20$${placeholderIndex}\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Executing\x20header\x20UPDATE:\x27,\x20{\x20query:\x20headerUpdateQuery,\x20values:\x20headerValues\x20});\x0a\x20\x20\x20\x20\x20\x20const\x20headerResult\x20=\x20await\x20client.query(headerUpdateQuery,\x20headerValues);\x0a\x20\x20\x20\x20\x20\x20const\x20updatedHeader\x20=\x20headerResult.rows[0];\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Header\x20updated\x20successfully:\x20${this.primaryKey}=${primaryKeyValue}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Process\x20detail\x20items\x20with\x20insert/update/delete\x20pattern\x0a\x20\x20\x20\x20\x20\x20const\x20detailTableName\x20=\x20\x27'+_0x5611d6+_0x5da6d4(0x167)+_0x5dd61c+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20detailPrimaryKey\x20=\x20\x27'+_0x586943+'\x27;\x0a\x20\x20\x20\x20\x20\x20'+(_0x5e6b1a['length']>0x0?'const\x20generatedFields\x20=\x20'+JSON[_0x5da6d4(0x212)](_0x5e6b1a)+';':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20detailOperations\x20=\x20data[detailKey]\x20||\x20{};\x0a\x20\x20\x20\x20\x20\x20const\x20{\x20insert:\x20insertItems\x20=\x20[],\x20update:\x20updateItems\x20=\x20[],\x20delete:\x20deleteItems\x20=\x20[]\x20}\x20=\x20detailOperations;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20deletedItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20updatedItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20insertedItems\x20=\x20[];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Process\x20DELETE\x20operations\x20first\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20item\x20of\x20deleteItems)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!item[detailPrimaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`Missing\x20${detailPrimaryKey}\x20in\x20delete\x20operation`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20deleteQuery\x20=\x20`DELETE\x20FROM\x20${detailTableName}\x20WHERE\x20${detailPrimaryKey}\x20=\x20$1\x20RETURNING\x20*`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20deleteResult\x20=\x20await\x20client.query(deleteQuery,\x20[item[detailPrimaryKey]]);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(deleteResult.rows.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20deletedItems.push(deleteResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Deleted\x20${deletedItems.length}\x20detail\x20item(s)`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Process\x20UPDATE\x20operations\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20item\x20of\x20updateItems)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!item[detailPrimaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`Missing\x20${detailPrimaryKey}\x20in\x20update\x20operation`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a'+(_0x5f31ba?_0x49bd6d['MhsJi'](_0x49bd6d['wyPQa']('\x0a',_0x5f31ba),'\x0a'):'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Build\x20detail\x20UPDATE\x20query\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20detailPlaceholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(key\x20===\x20detailPrimaryKey)\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x49bd6d['jdNJU'](_0x5e6b1a[_0x5da6d4(0x201)],0x0)?_0x5da6d4(0x128):'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailFields.push(`${key}\x20=\x20$${detailPlaceholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20ke\x20detail\x20UPDATE\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholderIndex\x20=\x20this._appendUpdateAuditColumns(detailFields,\x20detailValues,\x20item,\x20eventContext,\x20detailPlaceholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailValues.push(item[detailPrimaryKey]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailUpdateQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UPDATE\x20${detailTableName}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20${detailFields.join(\x27,\x20\x27)}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20${detailPrimaryKey}\x20=\x20$${detailPlaceholderIndex}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailResult\x20=\x20await\x20client.query(detailUpdateQuery,\x20detailValues);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(detailResult.rows.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updatedItems.push(detailResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Updated\x20${updatedItems.length}\x20detail\x20item(s)`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x203.\x20Process\x20INSERT\x20operations\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20item\x20of\x20insertItems)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Add\x20foreign\x20key\x20to\x20item\x0a\x20\x20\x20\x20\x20\x20\x20\x20item[foreignKey]\x20=\x20primaryKeyValue;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20UUID\x20untuk\x20detail\x20PK\x20bila\x20client\x20tidak\x20menyupply\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(konsisten\x20dengan\x20createComposite\x20dan\x20konvensi\x20autoGenerate)\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(item[detailPrimaryKey]\x20===\x20undefined\x20||\x20item[detailPrimaryKey]\x20===\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20item[detailPrimaryKey]\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a'+(_0x5f31ba?'\x0a'+_0x5f31ba+'\x0a':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Build\x20detail\x20INSERT\x20query\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20detailPlaceholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(item))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x5e6b1a[_0x5da6d4(0x201)]>0x0?'//\x20Skip\x20GENERATED\x20ALWAYS\x20columns\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(generatedFields.includes(key))\x20continue;':'')+_0x5da6d4(0x1df)+(_0x1b4c02?_0x5da6d4(0xbf)+JSON[_0x5da6d4(0x212)](_0x1b4c02)+_0x5da6d4(0x17f)+(_0x29d22a?_0x5da6d4(0xd4)+_0x29d22a+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20price\x20=\x20Number(item.'+_0x15338c+_0x5da6d4(0x1e5):_0x49bd6d['XgDWv'])+'\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(recalculatedFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20ke\x20recalc\x20UPDATE\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalcPlaceholder\x20=\x20this._appendUpdateAuditColumns(recalculatedFields,\x20recalculatedValues,\x20data,\x20eventContext,\x20recalcPlaceholder);\x0a\x20\x20\x20\x20\x20\x20\x20\x20recalculatedValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20recalcQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UPDATE\x20${this.writeSource}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SET\x20${recalculatedFields.join(\x27,\x20\x27)}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20${this.primaryKey}\x20=\x20$${recalcPlaceholder}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20\x20\x20`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Recalculating\x20header\x20totals:\x27,\x20{\x20query:\x20recalcQuery,\x20values:\x20recalculatedValues\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20recalcResult\x20=\x20await\x20client.query(recalcQuery,\x20recalculatedValues);\x0a\x20\x20\x20\x20\x20\x20\x20\x20Object.assign(updatedHeader,\x20recalcResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20---\x20Hook:\x20onAfterCompositeUpdate\x20---\x0a\x20\x20\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20componentEngine:\x20ce,\x20ContextBuilder:\x20CB\x20}\x20=\x20eventContext;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20afterCtx\x20=\x20CB.buildCompositeUpdateAfterContext(headerData,\x20oldData,\x20updatedHeader,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20inserted:\x20insertedItems,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updated:\x20updatedItems,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20deleted:\x20deletedItems\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x3ce1ed[_0x5da6d4(0x1aa)]+_0x5da6d4(0xcf)+_0x5611d6+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x5dd61c+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20afterResult\x20=\x20await\x20ce.executeOnAfterComposite(\x27update\x27,\x20afterCtx);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!afterResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`onAfterCompositeUpdate\x20failed:\x20${afterResult.error}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27COMMIT\x27);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Transaction\x20committed\x20successfully\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Invalidate\x20cache\x20setelah\x20write\x20operation\x20berhasil\x0a\x20\x20\x20\x20\x20\x20await\x20this.invalidateCache();\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20...updatedHeader,\x0a\x20\x20\x20\x20\x20\x20\x20\x20[detailKey]:\x20allItems,\x0a\x20\x20\x20\x20\x20\x20\x20\x20_operations:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20deleted:\x20deletedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updated:\x20updatedItems.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20inserted:\x20insertedItems.length\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20updateComposite:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a';}if(_0x455b7c['readComposite']){const _0x3b4b2b=_0x3ce1ed['masterDetail']?.['detailConfig']?.['detailQuery']||null;let _0x35d444;_0x3b4b2b?_0x35d444=_0x5da6d4(0xf6)+_0x3b4b2b+'`;':_0x35d444='const\x20detailQuery\x20=\x20`SELECT\x20*\x20FROM\x20'+_0x5611d6+'\x20WHERE\x20'+_0x5dd61c+_0x5da6d4(0x134),_0x420d83+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Composite\x20read\x20-\x20Read\x20header\x20with\x20detail\x20items\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Options\x20with\x20where\x20clause\x20(same\x20format\x20as\x20getData)\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Records\x20with\x20detail\x20items\x0a\x20\x20\x20*/\x0a\x20\x20async\x20readComposite(options)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20WHERE\x20clause\x0a\x20\x20\x20\x20\x20\x20if\x20(!options.where)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x20\x20\x20\x20\x20\x20let\x20whereClauseSql;\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereClauseSql\x20=\x20this.buildComplexWhereClause(options.where,\x20params,\x20paramIndex);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Query\x20header\x20records\x0a\x20\x20\x20\x20\x20\x20const\x20headerQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.getTableSource(\x27read\x27)\x20+\x20\x27\x20WHERE\x20\x27\x20+\x20whereClauseSql.sql;\x0a\x20\x20\x20\x20\x20\x20params\x20=\x20whereClauseSql.params;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20headerResults\x20=\x20await\x20db.executeQuery(headerQuery,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(headerResults.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20count:\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data:\x20[]\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20For\x20each\x20header,\x20fetch\x20detail\x20items\x0a\x20\x20\x20\x20\x20\x20const\x20compositeResults\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x5611d6['split']('.')[_0x5da6d4(0x13e)]()+_0x5da6d4(0x136)+_0x35d444+'\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20header\x20of\x20headerResults)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailResults\x20=\x20await\x20db.executeQuery(detailQuery,\x20[header[this.primaryKey]]);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20compositeResults.push({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...header,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20[detailKey]:\x20detailResults\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20compositeResults.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20compositeResults\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20readComposite:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a';}return _0x420d83;}function generateDeleteMethod(_0x32ae94){const _0x754b03=a0_0x59b1,_0x919671=_0x32ae94['action']||{},_0x3ea826=_0x32ae94[_0x754b03(0x103)]&&_0x32ae94[_0x754b03(0x103)]['enabled'],_0x31d9e5=_0x32ae94['masterDetail']?.['cascadeDelete']||![];if(!_0x919671['delete'])return'';const _0x9e0e3=_0x32ae94[_0x754b03(0xbb)]||'id';if(!_0x3ea826)return'';const _0x313f9f=_0x32ae94['masterDetail'][_0x754b03(0x1a2)],_0x144987=_0x32ae94[_0x754b03(0x103)]['foreignKey'];let _0x18c7fa='\x0a';return _0x18c7fa+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Delete\x20data\x20with\x20cascadeDelete\x20support\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Delete\x20options\x20with\x20where\x20clause\x0a\x20\x20\x20*\x20@param\x20{Object}\x20eventContext\x20-\x20Event\x20lifecycle\x20context\x20(optional)\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Delete\x20result\x0a\x20\x20\x20*/\x0a\x20\x20async\x20deleteData(options,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20where\x20clause\x0a\x20\x20\x20\x20\x20\x20const\x20where\x20=\x20options.where\x20||\x20[];\x0a\x20\x20\x20\x20\x20\x20if\x20(!where\x20||\x20where.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Where\x20clause\x20is\x20required\x20for\x20delete\x20operation\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20WHERE\x20clause\x0a\x20\x20\x20\x20\x20\x20let\x20whereClause\x20=\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20conditions\x20=\x20where.map(condition\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(condition.value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20`${condition.key}\x20=\x20$${paramIndex++}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20=\x20conditions.join(\x27\x20AND\x20\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20complex\x20where\x20format\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20conditions\x20=\x20where.conditions.map(condition\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(condition.value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20operator\x20=\x20condition.operator\x20||\x20\x27=\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20`${condition.key}\x20${operator}\x20$${paramIndex++}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20logic\x20=\x20where.logic\x20||\x20\x27AND\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20=\x20conditions.join(`\x20${logic}\x20`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(!whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Invalid\x20where\x20clause\x20format\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20'+(_0x31d9e5?_0x754b03(0x1f2)+_0x313f9f+_0x754b03(0x160)+_0x9e0e3+_0x754b03(0x11a)+_0x9e0e3+'\x27];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20DELETE\x20child\x20records\x20menggunakan\x20foreignKey\x0a\x20\x20\x20\x20\x20\x20const\x20deleteChildQuery\x20=\x20`DELETE\x20FROM\x20'+_0x313f9f+'\x20WHERE\x20'+_0x144987+'\x20=\x20$1`;\x0a\x20\x20\x20\x20\x20\x20const\x20deleteChildResult\x20=\x20await\x20client.query(deleteChildQuery,\x20[headerPrimaryKeyValue]);\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Deleted\x20${deleteChildResult.rowCount}\x20child\x20record(s)\x20from\x20'+_0x313f9f+'`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20DELETE\x20header\x20record\x0a\x20\x20\x20\x20\x20\x20const\x20deleteHeaderQuery\x20=\x20`DELETE\x20FROM\x20${this.writeSource}\x20WHERE\x20${whereClause}\x20RETURNING\x20*`;\x0a\x20\x20\x20\x20\x20\x20const\x20deleteHeaderResult\x20=\x20await\x20client.query(deleteHeaderQuery,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(deleteHeaderResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20deletedData\x20=\x20deleteHeaderResult.rows[0];\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Header\x20record\x20deleted\x20successfully\x27);\x0a\x20\x20\x20\x20\x20\x20':_0x754b03(0x21e))+_0x754b03(0x213)+(_0x31d9e5?',\x0a\x20\x20\x20\x20\x20\x20\x20\x20deletedChildRecords:\x20deleteChildResult.rowCount':'')+_0x754b03(0x1b4),_0x18c7fa;}function createPostgresModelTemplate(_0x1e89e2,_0x1fb342,_0x5976b6){const _0x544777=a0_0x59b1,_0x19ceb6={'wlUqC':function(_0x3f16e5,_0x4c48c4){return _0x3f16e5(_0x4c48c4);},'kgykM':function(_0x3ddcc4,_0x3109ab){return _0x3ddcc4(_0x3109ab);},'zgrHV':function(_0x160753,_0x19a4c8,_0x30549f){return _0x160753(_0x19a4c8,_0x30549f);},'ycsUp':'\x20\x20\x20\x20','PGozh':function(_0x537b48,_0x50aa78,_0xdbe2d7){return _0x537b48(_0x50aa78,_0xdbe2d7);},'hhXqJ':function(_0x59dbb5,_0xf6db94){return _0x59dbb5>_0xf6db94;},'FsunE':'datatablesQuery'};_0x19ceb6['wlUqC'](assertNoFileReferenceLeftover,_0x5976b6);const _0xfa42cc=FileUtils[_0x544777(0x1b3)](_0x1fb342),_0x3ed8b5=new Date()['toISOString']()['replace']('T','\x20')['replace'](/\.\d{3}Z$/,''),_0x2485b4=buildValidFieldsString(_0x5976b6),_0x4076d7=buildSearchColumnsCode(_0x5976b6),_0x487608=_0x19ceb6['kgykM'](buildFiltersCode,_0x5976b6),_0xa43950=_0x19ceb6[_0x544777(0x1d9)](buildLookupOverrideCode,_0x1fb342,_0x5976b6),_0x3f6506=_0x19ceb6['wlUqC'](buildAdvancedQuerySection,_0x5976b6),_0x3cd64b=buildFieldMappingCode(_0x5976b6),_0x3613d3=buildAuditColumnsSection(_0x5976b6,_0x19ceb6[_0x544777(0x1b7)]),_0x3d14e5=_0x5976b6['defaultScope']&&_0x5976b6[_0x544777(0xd1)][_0x544777(0x1e1)]?_0x19ceb6['PGozh'](buildDefaultScopeSQL,_0x5976b6[_0x544777(0xd1)][_0x544777(0x1e1)],''):'',_0x24714d=_0x5976b6['viewName']||_0x5976b6[_0x544777(0x1aa)],_0x22f3f6=_0x5976b6['tableName'];return'const\x20BaseModel\x20=\x20require(\x27@restforgejs/platform/src/models/base-model\x27);\x0aconst\x20db\x20=\x20require(\x27@restforgejs/platform/src/utils/db\x27);\x0aconst\x20fs\x20=\x20require(\x27fs\x27);\x0aconst\x20path\x20=\x20require(\x27path\x27);\x0a//\x20AdvancedFilterHelper\x20dihapus\x20—\x20semua\x20filtering\x20ditangani\x20oleh\x20buildObjectFilterClause\x20dan\x20buildComplexWhereClause\x0a\x0a/**\x0a\x20*\x20'+_0xfa42cc+_0x544777(0x202)+_0x3ed8b5+'\x0a\x20*\x0a\x20*\x20Model\x20untuk\x20'+_0x1fb342+'\x20yang\x20mewarisi\x20fungsi-fungsi\x20dari\x20BaseModel\x0a\x20*\x20Table:\x20'+_0x5976b6['tableName']+(_0x5976b6['viewName']?'\x0a\x20*\x20View:\x20'+_0x5976b6[_0x544777(0x219)]:'')+_0x544777(0x185)+(_0x5976b6[_0x544777(0x218)]?_0x5976b6['fieldName']['length']:0x0)+_0x544777(0x184)+_0xfa42cc+'Model\x20extends\x20BaseModel\x20{\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Constructor\x0a\x20\x20\x20*/\x0a\x20\x20constructor()\x20{\x0a\x20\x20\x20\x20//\x20Definisikan\x20validFields\x20-\x20semua\x20field\x20yang\x20valid\x20untuk\x20tabel\x20'+_0x1fb342+_0x544777(0x13a)+_0x2485b4+'\x0a\x20\x20\x20\x20];\x0a\x0a\x20\x20\x20\x20//\x20Definisikan\x20datatablesWhere\x20sesuai\x20payload\x0a\x20\x20\x20\x20const\x20datatablesWhere\x20=\x20'+(_0x5976b6['datatablesWhere']?JSON[_0x544777(0x212)](_0x5976b6[_0x544777(0x138)]):'[\x27name\x27,\x20\x27nama\x27,\x20\x27code\x27,\x20\x27kode\x27,\x20\x27all\x27]')+';\x0a\x0a\x20\x20\x20\x20//\x20Panggil\x20constructor\x20parent\x20dengan\x20nama\x20tabel,\x20validFields,\x20dan\x20datatablesWhere\x0a\x20\x20\x20\x20super(\x27'+_0x5976b6[_0x544777(0x1aa)]+'\x27,\x20validFields,\x20datatablesWhere);\x0a\x0a\x20\x20\x20\x20//\x20Setup\x20primary\x20key\x20dari\x20payload\x20atau\x20fallback\x20ke\x20fieldName\x20pertama\x0a\x20\x20\x20\x20this.primaryKey\x20=\x20\x27'+(_0x5976b6[_0x544777(0xbb)]||_0x5976b6['fieldName']&&_0x5976b6['fieldName'][0x0]||'id')+_0x544777(0xc8)+_0x24714d+_0x544777(0xb0)+_0x24714d+'\x27;\x20//\x20Source\x20untuk\x20operasi\x20read\x20(get,\x20list,\x20lookup,\x20datatables)\x0a\x20\x20\x20\x20this.writeSource\x20=\x20\x27'+_0x22f3f6+'\x27;\x20//\x20Source\x20untuk\x20operasi\x20write\x20(add,\x20update,\x20delete)\x0a'+_0x3613d3+_0x544777(0x197)+!!_0x5976b6[_0x544777(0xd7)]+';\x0a\x20\x20\x20\x20this.hasExportQuery\x20=\x20'+!!_0x5976b6['exportQuery']+_0x544777(0x1bb)+(_0x5976b6[_0x544777(0x20b)]&&_0x19ceb6[_0x544777(0x1e4)](Object[_0x544777(0x192)](_0x5976b6['dateTimeFields'])[_0x544777(0x201)],0x0)?'\x0a\x20\x20\x20\x20//\x20DateTime\x20fields\x20configuration\x0a\x20\x20\x20\x20this.dateTimeFields\x20=\x20'+JSON['stringify'](_0x5976b6['dateTimeFields'],null,0x6)+';\x0a\x20\x20\x20\x20':'')+(_0x5976b6[_0x544777(0xfb)]&&_0x5976b6['uploadConfig'][_0x544777(0xae)]?'\x0a\x20\x20\x20\x20//\x20File\x20upload\x20fields\x20(JSONB\x20columns)\x0a\x20\x20\x20\x20this.fileFields\x20=\x20'+JSON['stringify'](Object[_0x544777(0x192)](_0x5976b6['uploadConfig'][_0x544777(0xae)]))+';\x0a\x20\x20\x20\x20':'')+'\x0a'+_generateValidationConfig(_0x5976b6['fieldValidation'])+_0x544777(0x12c)+_0x1fb342+_0x544777(0x158)+_0x1e89e2+'\x27,\x0a\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x5976b6['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20viewName:\x20\x27'+_0x24714d+_0x544777(0x1a8)+(_0x5976b6['fieldName']?_0x5976b6['fieldName'][_0x544777(0x201)]:0x0)+',\x0a\x20\x20\x20\x20\x20\x20databaseType:\x20\x27postgres\x27,\x0a\x20\x20\x20\x20\x20\x20generated:\x20\x27'+_0x3ed8b5+'\x27,\x0a\x20\x20\x20\x20\x20\x20features:\x20'+JSON['stringify'](_0x5976b6['_metadata']?.['features']||[])+'\x0a\x20\x20\x20\x20};\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Load\x20advanced\x20query\x20templates\x20dari\x20file\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Templates\x20SQL\x20untuk\x20advanced\x20queries\x0a\x20\x20\x20*/\x0a\x20\x20loadAdvancedQueryTemplates()\x20{\x0a\x20\x20\x20\x20const\x20templates\x20=\x20{};\x0a\x20\x20\x20\x20'+_0x3f6506+_0x544777(0x205)+_0x1fb342+_0x544777(0x19b)+_0x1fb342+'\x0a\x20\x20\x20*/\x0a\x20\x20getListQuery(options\x20=\x20{})\x20{\x0a\x20\x20\x20\x20//\x20Load\x20query\x20dasar\x20dengan\x20placeholder\x20replacement\x0a\x20\x20\x20\x20'+buildQueryLoadingCode(_0x5976b6['datatablesQuery'],_0x19ceb6['FsunE'])+'\x0a\x0a\x20\x20\x20\x20//\x20Replace\x20any\x20remaining\x20placeholders\x20-\x20gunakan\x20readSource\x20untuk\x20operasi\x20read\x0a\x20\x20\x20\x20baseQuery\x20=\x20baseQuery.replace(/${tableName}/g,\x20this.readSource);\x0a\x20\x20\x20\x20baseQuery\x20=\x20baseQuery.replace(/${this.table}/g,\x20this.readSource);\x0a\x0a\x20\x20\x20\x20return\x20baseQuery;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getReadQuery\x20untuk\x20endpoint\x20/read\x0a\x20\x20\x20*\x20Prioritas:\x20viewName\x20->\x20viewQuery\x20->\x20tableName\x20(SELECT\x20*\x20FROM\x20readSource)\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Query\x20options\x0a\x20\x20\x20*\x20@returns\x20{string}\x20SQL\x20query\x20dasar\x20untuk\x20/read\x0a\x20\x20\x20*/\x0a\x20\x20getReadQuery(options\x20=\x20{})\x20{\x0a\x20\x20\x20\x20//\x20Priority\x201:\x20viewName\x20(real\x20database\x20view)\x0a\x20\x20\x20\x20if\x20(this.viewName\x20&&\x20this.viewName\x20!==\x20this.table)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.viewName;\x0a\x20\x20\x20\x20}\x0a'+(_0x5976b6[_0x544777(0xd7)]?'\x20\x20\x20\x20//\x20Priority\x202:\x20viewQuery\x20(virtual\x20view\x20dari\x20payload)\x0a\x20\x20\x20\x20'+buildQueryLoadingCode(_0x5976b6['viewQuery'],_0x544777(0xd7))+_0x544777(0x1f9):_0x544777(0x203))+'\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getDatatables\x20untuk\x20mendukung\x20filter\x20object\x20format\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Parameter\x20dari\x20request\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Hasil\x20query\x20dengan\x20format\x20DataTables\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getDatatables(options)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20cache\x20first\x20(if\x20enabled)\x0a\x20\x20\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedDatatables(options);\x0a\x20\x20\x20\x20\x20\x20if\x20(cachedResult)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20cachedResult;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchValue\x20=\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchBy\x20=\x20\x27all\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20perPage\x20=\x2010,\x0a\x20\x20\x20\x20\x20\x20\x20\x20start\x20=\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20sort_columns\x20=\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20filters\x20=\x20{},\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20where\x20=\x20null\x0a\x20\x20\x20\x20\x20\x20}\x20=\x20options;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Resolve\x20sort\x20columns\x20dengan\x20prioritas:\x20sort_columns\x20>\x20order[0][column]\x20>\x20default\x0a\x20\x20\x20\x20\x20\x20let\x20resolvedSortColumns\x20=\x20sort_columns;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20cek\x20format\x20DataTables\x20bawaan\x20(order[0][column]\x20dan\x20order[0][dir])\x0a\x20\x20\x20\x20\x20\x20if\x20((!resolvedSortColumns\x20||\x20resolvedSortColumns.length\x20===\x200)\x20&&\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options[\x27order[0][column]\x27]\x20!==\x20undefined\x20&&\x20options[\x27order[0][dir]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20columnIndex\x20=\x20parseInt(options[\x27order[0][column]\x27]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20direction\x20=\x20options[\x27order[0][dir]\x27];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(columnIndex\x20>=\x200\x20&&\x20columnIndex\x20<\x20this.validFields.length)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resolvedSortColumns\x20=\x20[{\x20column:\x20this.validFields[columnIndex],\x20direction:\x20direction.toUpperCase()\x20}];\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Mendapatkan\x20query\x20dasar\x0a\x20\x20\x20\x20\x20\x20const\x20baseQuery\x20=\x20this.getListQuery(options);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Membuat\x20where\x20clause\x20berdasarkan\x20search\x20dan\x20filter\x0a\x20\x20\x20\x20\x20\x20let\x20whereClause\x20=\x20this.buildWhereClause(searchValue,\x20searchBy);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x203.\x20Tambahkan\x20filter\x20object\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20filterClause\x20=\x20this.buildObjectFilterClause(filters);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(filterClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20+=\x20\x27\x20AND\x20\x27\x20+\x20filterClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20=\x20\x27WHERE\x20\x27\x20+\x20filterClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x204.\x20Proses\x20parameter\x20where\x20dengan\x20format\x20advanced\x20conditions\x0a\x20\x20\x20\x20\x20\x20let\x20whereParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20if\x20(where\x20&&\x20(Array.isArray(where)\x20||\x20(where.conditions\x20&&\x20Array.isArray(where.conditions))))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20whereResult\x20=\x20this.buildComplexWhereClause(where,\x20params,\x20paramIndex);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereResult.sql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20+=\x20\x27\x20AND\x20(\x27\x20+\x20whereResult.sql\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20=\x20\x27WHERE\x20\x27\x20+\x20whereResult.sql;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereParams\x20=\x20whereResult.params;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20if\x20query\x20needs\x20subquery\x20wrapping\x20(CTE\x20or\x20JOIN)\x0a\x20\x20\x20\x20\x20\x20const\x20isCteQuery\x20=\x20baseQuery.toLowerCase().trim().startsWith(\x27with\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20hasJoin\x20=\x20/\x5cb(inner|left|right|cross|full)\x5cs+join\x5cb/i.test(baseQuery)\x20||\x20/\x5cbjoin\x5cb/i.test(baseQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20needsSubquery\x20=\x20isCteQuery\x20||\x20hasJoin;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x204.\x20Menghitung\x20total\x20data\x20keseluruhan\x20-\x20gunakan\x20readSource\x20untuk\x20read\x20operations\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalQuery\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x27\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalResult\x20=\x20await\x20db.executeQuery(countTotalQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20totalRecords\x20=\x20countTotalResult\x20&&\x20countTotalResult[0]\x20?\x20parseInt(countTotalResult[0].total)\x20:\x200;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x205.\x20Menghitung\x20jumlah\x20data\x20terfilter\x20-\x20gunakan\x20readSource\x20untuk\x20read\x20operations\x0a\x20\x20\x20\x20\x20\x20let\x20filteredRecords\x20=\x20totalRecords;\x0a\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Always\x20wrap\x20CTE/JOIN\x20query\x20for\x20counting\x20with\x20filters\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredQuery\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20whereClause\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource\x20+\x20\x27\x20\x27\x20+\x20whereClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Count\x20Filtered\x20Query:\x27,\x20countFilteredQuery);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Count\x20Filtered\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredResult\x20=\x20await\x20db.executeQuery(countFilteredQuery,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20filteredRecords\x20=\x20countFilteredResult\x20&&\x20countFilteredResult[0]\x20?\x20parseInt(countFilteredResult[0].total)\x20:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x206.\x20Membuat\x20order\x20clause\x20menggunakan\x20buildSortColumnsClause\x0a\x20\x20\x20\x20\x20\x20const\x20orderClause\x20=\x20this.buildSortColumnsClause(resolvedSortColumns);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x207.\x20Menambahkan\x20pagination\x0a\x20\x20\x20\x20\x20\x20const\x20limitClause\x20=\x20`\x20LIMIT\x20${perPage}\x20OFFSET\x20${start}`;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x208.\x20Menjalankan\x20query\x20final\x20-\x20wrap\x20CTE/JOIN\x20query\x20to\x20avoid\x20column\x20ambiguity\x0a\x20\x20\x20\x20\x20\x20const\x20query\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20*\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20(whereClause\x20||\x20\x27\x27)\x20+\x20orderClause\x20+\x20limitClause\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20+\x20\x22\x20\x22\x20+\x20whereClause\x20+\x20orderClause\x20+\x20limitClause;\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Final\x20Query:\x27,\x20query);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Query\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20whereParams);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20draw:\x20parseInt(options.draw\x20||\x20\x271\x27,\x2010),\x0a\x20\x20\x20\x20\x20\x20\x20\x20recordsTotal:\x20totalRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20recordsFiltered:\x20filteredRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20data\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache\x20the\x20result\x20(if\x20enabled)\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedDatatables(options,\x20result);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getDatatables:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Get\x20data\x20list\x20dengan\x20manual\x20pagination\x20untuk\x20endpoint\x20/list\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Parameter\x20dari\x20request\x20list\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Hasil\x20query\x20dengan\x20format\x20list\x20pagination\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getList(options)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20page\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20perPage\x20=\x2010,\x0a\x20\x20\x20\x20\x20\x20\x20\x20offset\x20=\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchValue\x20=\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchBy\x20=\x20\x27code\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20sort_columns\x20=\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20where\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20select\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20limit\x20=\x201000\x0a\x20\x20\x20\x20\x20\x20}\x20=\x20options;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20paginate\x20=\x20page\x20!==\x20null;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache:\x20Check\x20if\x20data\x20exists\x20in\x20cache\x0a\x20\x20\x20\x20\x20\x20const\x20scInfo\x20=\x20sort_columns\x20&&\x20sort_columns.length\x20>\x200\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20sort_columns.map(s\x20=>\x20`${s.column}:${s.direction}`).join(\x27,\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27default\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20cacheInfo\x20=\x20`page:${page},\x20perPage:${perPage},\x20sort:${scInfo},\x20search:${searchValue\x20||\x20\x27none\x27}${where\x20?\x20\x27,\x20where:yes\x27\x20:\x20\x27\x27}`;\x0a\x20\x20\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedList(options);\x0a\x20\x20\x20\x20\x20\x20if\x20(cachedResult)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20HIT\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20cachedResult;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20MISS\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Mendapatkan\x20query\x20dasar\x0a\x20\x20\x20\x20\x20\x20let\x20baseQuery;\x0a\x20\x20\x20\x20\x20\x20if\x20(select\x20&&\x20Array.isArray(select)\x20&&\x20select.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20selectedValidColumns\x20=\x20select.filter(col\x20=>\x20this.validFields.includes(col));\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(selectedValidColumns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20\x27SELECT\x20\x27\x20+\x20selectedValidColumns.join(\x27,\x20\x27)\x20+\x20\x27\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20this.getReadQuery(options);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201b.\x20Deteksi\x20apakah\x20query\x20mengandung\x20JOIN\x20atau\x20CTE\x20(perlu\x20subquery\x20wrapping)\x0a\x20\x20\x20\x20\x20\x20const\x20isCteQuery\x20=\x20baseQuery.toLowerCase().trim().startsWith(\x27with\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20hasJoin\x20=\x20/\x5cb(inner|left|right|cross|full)\x5cs+join\x5cb/i.test(baseQuery)\x20||\x20/\x5cbjoin\x5cb/i.test(baseQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20needsSubquery\x20=\x20isCteQuery\x20||\x20hasJoin;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Build\x20WHERE\x20clause\x20untuk\x20search\x0a\x20\x20\x20\x20\x20\x20let\x20whereClause\x20=\x20\x27'+(_0x3d14e5?_0x544777(0x15f)+_0x3d14e5:'')+_0x544777(0x198)+(_0x3d14e5?_0x544777(0x12d):'whereClause\x20=\x20`WHERE\x20UPPER(${searchBy})\x20LIKE\x20UPPER(\x27${likeValue}\x27)`;')+'\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x203.\x20Proses\x20parameter\x20where\x20dengan\x20format\x20advanced\x20conditions\x0a\x20\x20\x20\x20\x20\x20let\x20whereParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20if\x20(where\x20&&\x20(Array.isArray(where)\x20||\x20(where.conditions\x20&&\x20Array.isArray(where.conditions))))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20whereResult\x20=\x20this.buildComplexWhereClause(where,\x20params,\x20paramIndex);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereResult.sql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20+=\x20\x27\x20AND\x20(\x27\x20+\x20whereResult.sql\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20=\x20\x27WHERE\x20\x27\x20+\x20whereResult.sql;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereParams\x20=\x20whereResult.params;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x204.\x20Menghitung\x20total\x20data\x20keseluruhan\x20(tanpa\x20filter)\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalQuery\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalResult\x20=\x20await\x20db.executeQuery(countTotalQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20totalRecords\x20=\x20countTotalResult\x20&&\x20countTotalResult[0]\x20?\x20parseInt(countTotalResult[0].total)\x20:\x200;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x205.\x20Menghitung\x20jumlah\x20data\x20terfilter\x20(jika\x20ada\x20where/search)\x0a\x20\x20\x20\x20\x20\x20let\x20filteredRecords\x20=\x20totalRecords;\x0a\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredQuery\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20whereClause\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource\x20+\x20\x27\x20\x27\x20+\x20whereClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredResult\x20=\x20await\x20db.executeQuery(countFilteredQuery,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x20\x20\x20\x20\x20\x20\x20\x20filteredRecords\x20=\x20countFilteredResult\x20&&\x20countFilteredResult[0]\x20?\x20parseInt(countFilteredResult[0].total)\x20:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x206.\x20Build\x20ORDER\x20BY\x20clause\x0a\x20\x20\x20\x20\x20\x20const\x20orderClause\x20=\x20this.buildSortColumnsClause(sort_columns);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x207.\x20Build\x20LIMIT\x20dan\x20OFFSET\x20clause\x20(kondisional\x20berdasarkan\x20mode)\x0a\x20\x20\x20\x20\x20\x20let\x20limitClause;\x0a\x20\x20\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20limitClause\x20=\x20`\x20LIMIT\x20${perPage}\x20OFFSET\x20${offset}`;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20limitClause\x20=\x20`\x20LIMIT\x20${limit}`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x208.\x20Menjalankan\x20query\x20final\x20untuk\x20data\x20(subquery\x20wrapping\x20untuk\x20JOIN/CTE)\x0a\x20\x20\x20\x20\x20\x20const\x20query\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20*\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20whereClause\x20+\x20orderClause\x20+\x20limitClause\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20baseQuery\x20+\x20\x27\x20\x27\x20+\x20whereClause\x20+\x20orderClause\x20+\x20limitClause;\x0a\x20\x20\x20\x20\x20\x20console.log(`List\x20SQL\x20Query:\x20${query}`);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27List\x20Query\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20data\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20totalRecords:\x20filteredRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20totalUnfiltered:\x20totalRecords\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.page\x20=\x20page;\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.perPage\x20=\x20perPage;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache:\x20Store\x20result\x20in\x20cache\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedList(options,\x20result);\x0a\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20SET\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getList:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Membangun\x20WHERE\x20clause\x20dari\x20filter\x20object\x0a\x20\x20\x20*\x20@param\x20{Object}\x20filters\x20-\x20Object\x20filter\x20dengan\x20format\x20{column:\x20value}\x0a\x20\x20\x20*\x20@returns\x20{string}\x20WHERE\x20clause\x20SQL\x20atau\x20empty\x20string\x0a\x20\x20\x20*/\x0a\x20\x20buildObjectFilterClause(filters)\x20{\x0a\x20\x20\x20\x20if\x20(!filters\x20||\x20typeof\x20filters\x20!==\x20\x27object\x27\x20||\x20Object.keys(filters).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27\x27;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20conditions\x20=\x20[];\x0a\x0a\x20\x20\x20\x20for\x20(const\x20[column,\x20value]\x20of\x20Object.entries(filters))\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20kolom\x20harus\x20ada\x20dalam\x20validFields\x0a\x20\x20\x20\x20\x20\x20if\x20(this.validFields.includes(column)\x20&&\x20value\x20!==\x20null\x20&&\x20value\x20!==\x20undefined\x20&&\x20value\x20!==\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Escape\x20value\x20untuk\x20mencegah\x20SQL\x20injection\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20escapedValue\x20=\x20value.toString().replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20=\x20\x27${escapedValue}\x27`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20conditions.length\x20>\x200\x20?\x20conditions.join(\x27\x20AND\x20\x27)\x20:\x20\x27\x27;\x0a\x20\x20}\x0a\x0a'+_0x4076d7+'\x0a\x0a'+_0x487608+'\x0a\x0a'+_0xa43950+'\x0a\x0a'+_0x3cd64b+_0x544777(0x1ef)+_0x1fb342+'\x0a\x20\x20\x20*\x20@param\x20{Object}\x20data\x20-\x20Data\x20dari\x20database\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Data\x20yang\x20sudah\x20diformat\x20untuk\x20response\x20'+_0x1fb342+_0x544777(0x1c8)+_generateValidateFieldConstraints()+'\x0a\x20\x20'+generateCompositeMethods(_0x5976b6)+generateDeleteMethod(_0x5976b6)+_0x544777(0x170)+_0xfa42cc+'Model();';}function getEnabledActions(_0x2fd22b){const _0x2b4503=a0_0x59b1,_0xac935a={'uUHzC':function(_0x155503,_0x1cbe68){return _0x155503!==_0x1cbe68;},'elolO':'object'};if(!_0x2fd22b['action']||_0xac935a[_0x2b4503(0x15a)](typeof _0x2fd22b['action'],_0xac935a['elolO']))return[];return Object[_0x2b4503(0x101)](_0x2fd22b[_0x2b4503(0x1fd)])[_0x2b4503(0x1e8)](([,_0x58fdec])=>_0x58fdec)[_0x2b4503(0x1f5)](([_0x2b3089])=>_0x2b3089);}function buildEndpointFunctions(_0x2d0822,_0x45244d,_0x2b6e4a,_0x3501e1,_0x32a12c,_0x52fa55=null,_0x36dee9=![]){const _0x24dd40=a0_0x59b1,_0x17b401={'EUNih':function(_0x3cda96,_0x13fcbf,_0x56f6a3,_0x1d4cc4,_0xd9593c,_0x2c0029){return _0x3cda96(_0x13fcbf,_0x56f6a3,_0x1d4cc4,_0xd9593c,_0x2c0029);},'dpcsr':function(_0x17e06d,_0x5a96fa,_0x1a9952,_0x25eea0,_0x43cafa){return _0x17e06d(_0x5a96fa,_0x1a9952,_0x25eea0,_0x43cafa);},'MDljf':function(_0x30b786,_0x349003,_0x39ea82,_0x1599c6,_0x1e7e72,_0x35e5e4,_0x3d3f2d){return _0x30b786(_0x349003,_0x39ea82,_0x1599c6,_0x1e7e72,_0x35e5e4,_0x3d3f2d);},'dHKpx':function(_0x12fe77,_0x4f9718,_0xa771f6,_0x476b9a,_0x1f4ebd){return _0x12fe77(_0x4f9718,_0xa771f6,_0x476b9a,_0x1f4ebd);},'eTCcp':function(_0x69c132,_0x505760){return _0x69c132===_0x505760;}},_0x33607c=_0x2b6e4a[_0x24dd40(0x1fd)]||{},_0x5f59de=getEnabledActions(_0x2b6e4a);let _0x4f9d60='';if(!_0x52fa55){const _0x35d510=FileUtils['toCamelCase'](_0x45244d);_0x52fa55=_0x35d510+_0x24dd40(0x144);}return _0x33607c[_0x24dd40(0x1b0)]&&(_0x4f9d60+=generateDatatablesFunction(_0x2d0822,_0x45244d,_0x2b6e4a,_0x52fa55)),_0x33607c[_0x24dd40(0xd6)]&&(_0x4f9d60+=_0x17b401[_0x24dd40(0x1f3)](generateCreateFunction,_0x2d0822,_0x45244d,_0x2b6e4a,_0x52fa55,_0x36dee9)),_0x33607c[_0x24dd40(0x149)]&&(_0x4f9d60+=_0x17b401[_0x24dd40(0x1f3)](generateUpdateFunction,_0x2d0822,_0x45244d,_0x2b6e4a,_0x52fa55,_0x36dee9)),_0x33607c[_0x24dd40(0xcd)]&&(_0x4f9d60+=_0x17b401['dpcsr'](generateAdjustFunction,_0x2d0822,_0x45244d,_0x2b6e4a,_0x52fa55)),_0x33607c['aggregate']&&(_0x4f9d60+=generateAggregateFunction(_0x2d0822,_0x45244d,_0x2b6e4a,_0x52fa55)),_0x33607c[_0x24dd40(0xe5)]&&(_0x4f9d60+=generateDeleteFunction(_0x2d0822,_0x45244d,_0x2b6e4a,_0x52fa55,_0x36dee9)),_0x33607c['first']&&(_0x4f9d60+=_0x17b401[_0x24dd40(0x127)](generateFirstFunction,_0x2d0822,_0x45244d,_0x2b6e4a,_0x3501e1,_0x32a12c,_0x52fa55)),_0x33607c[_0x24dd40(0x1fe)]&&(_0x4f9d60+=generateLookupFunction(_0x2d0822,_0x45244d,_0x2b6e4a,_0x3501e1,_0x32a12c,_0x52fa55)),_0x33607c['read']&&(_0x4f9d60+=generateReadFunction(_0x2d0822,_0x45244d,_0x2b6e4a,_0x52fa55)),_0x33607c[_0x24dd40(0x1c1)]&&(_0x4f9d60+=_0x17b401['dHKpx'](generateCreateCompositeFunction,_0x2d0822,_0x45244d,_0x2b6e4a,_0x52fa55)),_0x33607c['updateComposite']&&(_0x4f9d60+=generateUpdateCompositeFunction(_0x2d0822,_0x45244d,_0x2b6e4a,_0x52fa55)),_0x33607c[_0x24dd40(0x130)]&&(_0x4f9d60+=generateReadCompositeFunction(_0x2d0822,_0x45244d,_0x2b6e4a,_0x52fa55)),_0x33607c['workflow']&&(_0x4f9d60+=generateWorkflowFunction(_0x2d0822,_0x45244d,_0x2b6e4a,_0x52fa55)),_0x17b401['eTCcp'](_0x5f59de[_0x24dd40(0x201)],0x0)&&(_0x4f9d60+=_0x24dd40(0xdf)),_0x4f9d60;}function generateDatatablesFunction(_0x25e762,_0x214580,_0x544973,_0x19c9d3=null){const _0x14e69c=a0_0x59b1;if(!_0x19c9d3){const _0x10489e=FileUtils[_0x14e69c(0x222)](_0x214580);_0x19c9d3=_0x10489e+'Model';}return _0x14e69c(0xb4)+_0x25e762+'/'+_0x214580+'/datatables\x20-\x20Data\x20untuk\x20DataTables\x0arouter.post(\x27/datatables\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x214580+'/datatables:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Extract\x20parameters\x20dari\x20request\x0a\x20\x20\x20\x20const\x20options\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20searchValue:\x20req.body.search?.value\x20||\x20req.body.searchValue\x20||\x20req.body.search_value\x20||\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20searchBy:\x20req.body.searchBy\x20||\x20req.body.search_by\x20||\x20\x27all\x27,\x0a\x20\x20\x20\x20\x20\x20perPage:\x20parseInt(req.body.length\x20||\x20req.body.pagination?.perpage\x20||\x2010,\x2010),\x0a\x20\x20\x20\x20\x20\x20start:\x20parseInt(req.body.start\x20||\x200,\x2010),\x0a\x20\x20\x20\x20\x20\x20draw:\x20req.body.draw\x20||\x20\x271\x27\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20sort_columns\x0a\x20\x20\x20\x20if\x20(req.body.sort_columns\x20&&\x20Array.isArray(req.body.sort_columns)\x20&&\x20req.body.sort_columns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20options.sort_columns\x20=\x20req.body.sort_columns.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20column:\x20item.column,\x0a\x20\x20\x20\x20\x20\x20\x20\x20direction:\x20(item.direction\x20||\x20\x27ASC\x27).toUpperCase()\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Pass\x20format\x20DataTables\x20parameters\x20jika\x20ada\x20(fallback)\x0a\x20\x20\x20\x20if\x20(req.body[\x27order[0][column]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20options[\x27order[0][column]\x27]\x20=\x20req.body[\x27order[0][column]\x27];\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(req.body[\x27order[0][dir]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20options[\x27order[0][dir]\x27]\x20=\x20req.body[\x27order[0][dir]\x27];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20filter\x20dalam\x20format\x20filters\x20object\x0a\x20\x20\x20\x20if\x20(req.body.filters\x20&&\x20typeof\x20req.body.filters\x20===\x20\x27object\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Filter\x20out\x20values\x20that\x20should\x20be\x20ignored\x20(\x22all\x22,\x20\x22-\x22,\x20\x22\x22,\x20null,\x20undefined)\x0a\x20\x20\x20\x20\x20\x20const\x20filteredFilters\x20=\x20{};\x0a\x20\x20\x20\x20\x20\x20Object.keys(req.body.filters).forEach(key\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20value\x20=\x20req.body.filters[key];\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Ignore\x20filter\x20if\x20value\x20is\x20\x22all\x22,\x20\x22-\x22,\x20empty\x20string,\x20null,\x20or\x20undefined\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20\x22all\x22\x20&&\x20value\x20!==\x20\x22-\x22\x20&&\x20value\x20!==\x20\x22\x22\x20&&\x20value\x20!==\x20null\x20&&\x20value\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20filteredFilters[key]\x20=\x20value;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Only\x20set\x20filters\x20if\x20there\x20are\x20valid\x20filters\x20remaining\x0a\x20\x20\x20\x20\x20\x20if\x20(Object.keys(filteredFilters).length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20options.filters\x20=\x20filteredFilters;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Applied\x20filters\x20(ignoring\x20\x22all\x22,\x20\x22-\x22,\x20empty\x20values):\x27,\x20JSON.stringify(filteredFilters,\x20null,\x202));\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27All\x20filters\x20ignored\x20due\x20to\x20\x22all\x22,\x20\x22-\x22,\x20or\x20empty\x20values\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20parameter\x20where\x20dengan\x20format\x20advanced\x20conditions\x0a\x20\x20\x20\x20if\x20(req.body.where\x20&&\x20typeof\x20req.body.where\x20===\x20\x27object\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x20(mendukung\x20format\x20array\x20legacy\x20dan\x20format\x20object\x20baru)\x0a\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20||\x20(req.body.where.conditions\x20&&\x20Array.isArray(req.body.where.conditions)))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20options.where\x20=\x20req.body.where;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Applied\x20where\x20conditions:\x27,\x20JSON.stringify(req.body.where,\x20null,\x202));\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Invalid\x20where\x20format,\x20ignoring\x20where\x20parameter\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20parameters\x0a\x20\x20\x20\x20if\x20(options.perPage\x20>\x201000)\x20{\x0a\x20\x20\x20\x20\x20\x20options.perPage\x20=\x201000;\x20//\x20Limit\x20untuk\x20mencegah\x20overload\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(options.perPage\x20<\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20options.perPage\x20=\x2010;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Gunakan\x20model\x20untuk\x20mendapatkan\x20data\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x19c9d3+_0x14e69c(0x17d)+_0x214580+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20options:\x20options,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.json(result);\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x214580+'\x20datatables:\x27,\x20error);\x0a\x20\x20\x20\x20const\x20statusCode\x20=\x20error.statusCode\x20||\x20500;\x0a\x20\x20\x20\x20return\x20res.status(statusCode).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20statusCode\x20===\x20400\x20?\x20\x27Bad\x20Request\x27\x20:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20statusCode\x20===\x20400\x20?\x20error.message\x20:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x214580+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateCreateFunction(_0x5c6696,_0x1d56ba,_0x2b6ba0,_0x1967c3=null,_0x3d57c9=![]){const _0x52c5e3=a0_0x59b1;if(!_0x1967c3){const _0x383230=FileUtils[_0x52c5e3(0x222)](_0x1d56ba);_0x1967c3=_0x383230+_0x52c5e3(0x144);}const _0x21e81b=_0x3d57c9?'\x0a\x20\x20\x20\x20//\x20===\x20KAFKA\x20PUBLISH:\x20INSERT\x20EVENT\x20===\x0a\x20\x20\x20\x20//\x20Check\x20both\x20runtime\x20env\x20(KAFKA_ENABLED)\x20and\x20payload\x20config\x0a\x20\x20\x20\x20const\x20kafkaRuntimeEnabled\x20=\x20process.env.KAFKA_ENABLED\x20===\x20\x27true\x27;\x0a\x20\x20\x20\x20if\x20(kafkaRuntimeEnabled\x20&&\x20kafkaService\x20&&\x20kafkaConfig\x20&&\x20kafkaConfig.enabled\x20&&\x20kafkaConfig.publishOn\x20&&\x20kafkaConfig.publishOn.insert)\x20{\x0a\x20\x20\x20\x20\x20\x20kafkaService.publishInsert(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x5c6696+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x1d56ba+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20topic:\x20kafkaConfig.topic\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20keyField:\x20kafkaConfig.keyField\x20||\x20\x27'+(_0x2b6ba0['primaryKey']||'id')+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x2b6ba0[_0x52c5e3(0x1aa)]+_0x52c5e3(0xec):'',_0x572053=_0x3d57c9?'\x0a\x20\x20\x20\x20//\x20Validasi\x20x-correlation-id\x20header\x20(MANDATORY\x20jika\x20Kafka\x20enabled)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27];\x0a\x20\x20\x20\x20if\x20(!correlationId)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20header\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27x-correlation-id\x20header\x20is\x20required\x20when\x20Kafka\x20publishing\x20is\x20enabled\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':_0x52c5e3(0x1c6);return'\x0a//\x20POST\x20/api/'+_0x5c6696+'/'+_0x1d56ba+_0x52c5e3(0x106)+_0x1d56ba+_0x52c5e3(0xdc)+_0x1d56ba+_0x52c5e3(0xf4)+_0x572053+_0x52c5e3(0x191)+_0x1967c3+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x1967c3+_0x52c5e3(0x16f)+_0x2b6ba0[_0x52c5e3(0x1aa)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x1967c3+_0x52c5e3(0x119)+_0x1967c3+'.addData(req.body,\x20{\x20additionalContext:\x20{\x20requestId:\x20req.id\x20||\x20null\x20}\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20INSERT\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20INSERT\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x1d56ba+'\x20data\x20added\x20successfully:\x20${responseData.'+(_0x2b6ba0['primaryKey']||'id')+_0x52c5e3(0x182)+_0x21e81b+_0x52c5e3(0x1a9)+_0x1d56ba+'\x20data\x20successfully\x20added\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20menambahkan\x20data\x20'+_0x1d56ba+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20error\x20types\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x20//\x20PostgreSQL\x20unique\x20violation\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723503\x27)\x20{\x20//\x20PostgreSQL\x20foreign\x20key\x20violation\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20adding\x20'+_0x1d56ba+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateUpdateFunction(_0x400161,_0xc8548c,_0x1a4db1,_0x3727ef=null,_0x4f5706=![]){const _0xa114d8=a0_0x59b1;if(!_0x3727ef){const _0x10adca=FileUtils['toCamelCase'](_0xc8548c);_0x3727ef=_0x10adca+_0xa114d8(0x144);}const _0x57bade=_0x1a4db1['fieldPolicy']?',\x20'+JSON['stringify'](_0x1a4db1['fieldPolicy']):'',_0xecf67e=_0x1a4db1[_0xa114d8(0xc0)]?_0xa114d8(0x102)+_0x3727ef+_0xa114d8(0x157)+_0xc8548c+'\x20data\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'',_0x40901d=_0x4f5706?_0xa114d8(0x11b)+_0x400161+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0xc8548c+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20oldData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20topic:\x20kafkaConfig.topic\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20keyField:\x20kafkaConfig.keyField\x20||\x20\x27'+(_0x1a4db1[_0xa114d8(0xbb)]||'id')+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x1a4db1['tableName']+_0xa114d8(0xec):'',_0x1f628d=_0x4f5706?'\x0a\x20\x20\x20\x20//\x20Validasi\x20x-correlation-id\x20header\x20(MANDATORY\x20jika\x20Kafka\x20enabled)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27];\x0a\x20\x20\x20\x20if\x20(!correlationId)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20header\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27x-correlation-id\x20header\x20is\x20required\x20when\x20Kafka\x20publishing\x20is\x20enabled\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':_0xa114d8(0x1c6);return _0xa114d8(0xb4)+_0x400161+'/'+_0xc8548c+_0xa114d8(0x123)+_0xc8548c+_0xa114d8(0x211)+_0xc8548c+_0xa114d8(0x1ad)+_0x1f628d+_0xa114d8(0x146)+(_0x1a4db1['primaryKey']||'id')+_0xa114d8(0xc9)+_0xecf67e+_0xa114d8(0x122)+_0x3727ef+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x3727ef+'.validateData(req.body,\x20\x27update\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20sanitized\x20data\x0a\x20\x20\x20\x20\x20\x20req.body\x20=\x20{\x20...req.body,\x20...validation.sanitizedData\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Event\x20lifecycle\x20variables\x0a\x20\x20\x20\x20let\x20oldData\x20=\x20null;\x0a\x20\x20\x20\x20let\x20newData\x20=\x20null;\x0a\x20\x20\x20\x20const\x20requestData\x20=\x20req.body;\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20===\x20Integrated\x20Transaction\x20dengan\x20Event\x20Lifecycle\x20===\x0a\x20\x20\x20\x20//\x20oldData\x20fetch\x20+\x20onBefore\x20+\x20main\x20operation\x20+\x20onAfter\x20dieksekusi\x20dalam\x20satu\x20transaction\x20scope\x0a\x20\x20\x20\x20//\x20di\x20dalam\x20model.executeTransactionWithEvents()\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20integrated\x20transaction\x20model\x20dengan\x20event\x20lifecycle\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x1a4db1[_0xa114d8(0x1aa)]+_0xa114d8(0x14a)+_0x3727ef+_0xa114d8(0x221)+_0x57bade+_0xa114d8(0x16b)+_0x3727ef+_0xa114d8(0x162)+_0x57bade+');\x0a\x20\x20\x20\x20\x20\x20\x20\x20newData\x20=\x20responseData;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20UPDATE\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20UPDATE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0xc8548c+'\x20data\x20updated\x20successfully:\x20${primaryKey}=${req.body[primaryKey]}`);\x0a'+_0x40901d+_0xa114d8(0x150)+_0xc8548c+_0xa114d8(0x174)+_0xc8548c+_0xa114d8(0x172)+_0xc8548c+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20database\x20errors\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x20//\x20PostgreSQL\x20unique\x20violation\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20updating\x20'+_0xc8548c+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateAdjustFunction(_0x47b351,_0x56c9aa,_0x445177,_0x97d48c=null){const _0xc3931a=a0_0x59b1;if(!_0x97d48c){const _0x132930=FileUtils['toCamelCase'](_0x56c9aa);_0x97d48c=_0x132930+_0xc3931a(0x144);}const _0x320c74=_0x445177['adjustConfig']?JSON[_0xc3931a(0x212)](_0x445177['adjustConfig']):'{}',_0x3bfc44=_0x445177[_0xc3931a(0x193)]?',\x20'+JSON[_0xc3931a(0x212)](_0x445177['fieldPolicy']):'',_0x2b46cc=_0x445177['fieldPolicy']?',\x20null,\x20'+JSON[_0xc3931a(0x212)](_0x445177[_0xc3931a(0x193)]):'',_0x406380=_0x445177[_0xc3931a(0xc0)]?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x97d48c+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20primaryKey,\x20value:\x20req.body[primaryKey]\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20req._requestScope.column,\x20value:\x20req._requestScope.value\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!scopeCheck.success\x20||\x20!scopeCheck.data\x20||\x20scopeCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x56c9aa+_0xc3931a(0x210):'';return _0xc3931a(0xb4)+_0x47b351+'/'+_0x56c9aa+'/adjust\x20-\x20Adjust\x20data\x20'+_0x56c9aa+_0xc3931a(0xf0)+(_0x445177[_0xc3931a(0xbb)]||'id')+_0xc3931a(0x20a)+_0x406380+'\x0a\x20\x20\x20\x20const\x20adjustConfig\x20=\x20'+_0x320c74+';\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20===\x20Integrated\x20Transaction\x20dengan\x20Event\x20Lifecycle\x20===\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x445177['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x97d48c+'.adjustData(req.body,\x20adjustConfig,\x20eventContext'+_0x3bfc44+');\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20ADJUST\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20ADJUST\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20tanpa\x20events\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x97d48c+_0xc3931a(0x143)+_0x2b46cc+');\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20ADJUST\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20ADJUST\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x56c9aa+'\x20data\x20adjusted\x20successfully:\x20${primaryKey}=${req.body[primaryKey]}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x56c9aa+'\x20data\x20successfully\x20adjusted\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengadjust\x20data\x20'+_0x56c9aa+_0xc3931a(0xd9)+_0x56c9aa+_0xc3931a(0x169)+_0x56c9aa+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function a0_0xe32c(){const _0x420a65=['laOGicaGicbHzgP1C3rdB25MAwC6ia','jYWkicaGicaGzMLLBgroyw1LoIa','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbmB2nRigfJCxvPC2L0Aw9UigzHAwXLzaOGicaGAwyGkgvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj0zHAwXLzcb0BYbHy3f1AxjLigXVy2SNksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdKPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNuMvZB3vYy2uGyNvZEsCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGy2HHBMDPBMCGC3rHDhvZjYWkicaGicaGzgv0ywLSCZOGChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCGpYbLCNjVCI5TzxnZywDLidOGDw5KzwzPBMvKlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktSk','B2jQzwn0','psr7zgf0ys4','ie9srevsiejzigeU','C3bSAxq','EMDYsfy','cIaGlYOQcIaGicOGr2v0igzPzwXKig1HChbPBMCGDw50DwSGyMvYyMfNywKGB3bLCMfZAqOGicaQiebYzxr1CM5ZihTpyMPLy3r9iezPzwXKig1HChbPBMCGB2jQzwn0cIaGicOVcIaGz2v0rMLLBgrnyxbWAw5NkcKGEWOGicaGCMv0DxjUihSkicaGicaGywXSrMLLBgrZoIb0AgLZlNzHBgLKrMLLBgrZlaOGicaGicb0zxH0rMLLBgrZoIa','lMLUy2X1zgvZkgTLEsKPihSkicaGicaGicaGihDOzxjLq29UzgL0Aw9UCY5WDxnOkgbHlIr7A2v5Fsa9icqKE3bHCMfTsw5KzxGRk31GktSkicaGicaGicaGihbHCMfTCY5WDxnOkhzHBhvLktSkicaGicaGicb9cIaGicaGih0kcIaGicaGic8Viej1AwXKigzPBMfSihf1zxj5ic0Gz3vUywTHBIbJDxn0B20GC2vSzwn0igPPA2eGywrHcIaGicaGignVBNn0igLKrMLLBgqGpsbSB29RDxbdB25MAwCGpYbSB29RDxbdB25MAwCUAwrgAwvSzca6icC','l2zPCNn0ic0GtwvUzgfWyxrRyw4Gzgf0ysa','yxv0B0nHBgn1Bgf0zuzPzwXKCW','lMfNz3jLz2f0zurHDgeOCMvXlMjVzhKGFhWGE30SigfNz3jLz2f0zunVBMzPzYK7cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGzgf0ytOGCMvZDwX0laOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGBwvUz2fNCMvNyxnPigrHDgeG','cGOGicaGicaGicaGAwyGkhzHBhvLice9psb1BMrLzMLUzwqGjIyGDMfSDwuGit09ig51BgWPihSkicaGicaGicaGicaGzgv0ywLSrMLLBgrZlNb1C2GOA2v5ktSkicaGicaGicaGicaGzgv0ywLSvMfSDwvZlNb1C2GODMfSDwuPoWOGicaGicaGicaGicbKzxrHAwXqBgfJzwHVBgrLCNmUChvZAcHGjcr7zgv0ywLSugXHy2vOB2XKzxjjBMrLEcSRFwaPoWOGicaGicaGicaGFqOGicaGicaGih0kcIaGicaGicaGlY8Gsw5Qzwn0igf1zgL0ignVBhvTBNmGA2uGzgv0ywLSieLou0vsvcb2AweGAgvSCgvYcIaGicaGicaGzgv0ywLSugXHy2vOB2XKzxjjBMrLEca9ihrOAxmUx2fWCgvUzenYzwf0zuf1zgL0q29SDw1UCYHKzxrHAwXgAwvSzhmSigrLDgfPBfzHBhvLCYWGzgv0ywLSugXHy2vOB2XKzxjZlcbPDgvTlcbLDMvUDenVBNrLEhqSigrLDgfPBfbSywnLAg9SzgvYsw5KzxGPoWOkicaGicaGicbJB25ZDcbKzxrHAwXjBNnLCNrrDwvYEsa9igakicaGicaGicaGieLou0vsvcbjtLrpicr7zgv0ywLSvgfIBgvoyw1LFsaOjhTKzxrHAwXgAwvSzhmUAM9PBIGNlcaNkx0PcIaGicaGicaGicbwquXvrvmGkcr7zgv0ywLSugXHy2vOB2XKzxjZlMPVAw4OjYWGjYL9kqOGicaGicaGicaGuKvuvvjosu5hicOkicaGicaGicbGoWOkicaGicaGicbJB25ZDcbKzxrHAwXszxn1BhqGpsbHD2fPDcbJBgLLBNqUCxvLCNKOzgv0ywLSsw5Zzxj0uxvLCNKSigrLDgfPBfzHBhvLCYK7cIaGicaGicaGAw5Zzxj0zwrjDgvTCY5WDxnOkgrLDgfPBfjLC3vSDc5YB3DZwZbDktSkicaGicaGFqOkicaGicaGy29UC29Szs5SB2COyeLUC2vYDgvKicr7Aw5Zzxj0zwrjDgvTCY5Szw5NDgH9ig5LDYbKzxrHAwWGAxrLBsHZkwaPoWOkicaGicaGlY8Gr2v0igfSBcbJDxjYzw50igrLDgfPBcbPDgvTCWOGicaGicbJB25ZDcbHBgXjDgvTC1f1zxj5id0GyfnftevdvcaQiezst00GjhTKzxrHAwXuywjSzu5HBwv9ifDirvjficr7zM9YzwLNBKTLEx0GpsaKmsbpuKrfuIbcwsbSAw5Lx251BwjLCMa7cIaGicaGignVBNn0igfSBeL0zw1ZuMvZDwX0id0GyxDHAxqGy2XPzw50lNf1zxj5kgfSBeL0zw1ZuxvLCNKSifTWCMLTyxj5s2v5vMfSDwvDktSkicaGicaGy29UC3qGywXSsxrLBxmGpsbHBgXjDgvTC1jLC3vSDc5YB3DZoWOkicaGicaGlY8GuMvJywXJDwXHDguGAgvHzgvYihrVDgfSCYbMCM9TigzPBMfSigL0zw1ZcIaGicaGia','oWOkicaGignVBNn0ig1VzgvSsw5MBYa9igf3ywL0ia','CMvHza','cIaGicaVlYa9pt0Gs0fgs0eGufvcteLtsdOGrevmrvrfievwru5uid09pqOGicaGlY8Gq2HLy2SGyM90AcbYDw50Aw1LigvUDIaOs0fgs0fFru5bqKXfrcKGyw5KihbHEwXVywqGy29UzMLNcIaGicbJB25ZDcbRywzRyvj1BNrPBwvfBMfIBgvKrgvSzxrLid0GChjVy2vZCY5LBNyUs0fgs0fFru5bqKXfrca9pt0Gj3rYDwuNoWOGicaGAwyGkgTHzMTHuNvUDgLTzuvUywjSzwrezwXLDguGjIyGA2fMA2ftzxj2AwnLicyMigTHzMTHq29UzMLNicyMigTHzMTHq29UzMLNlMvUywjSzwqGjIyGA2fMA2fdB25MAwCUChvIBgLZAe9UicyMigTHzMTHq29UzMLNlNb1yMXPC2HpBI5KzwXLDguPihSkicaGicaGA2fMA2ftzxj2AwnLlNb1yMXPC2HezwXLDguOcIaGicaGicaGjW','iIWGiNzHBhvLiJOGiKfqmJuWnI0WmsiGFqOGicaGicaGicaGicbDlaOGicaGicaGicaGicaIC2vSzwn0iJOGwYjPzciSici','AgHyCuO','ksb8FcaWoWOGicaGicaGicaGCMv0DxjUihn1BsaRicHXDhKGkIbWCMLJzsK7cIaGicaGicaGFsWGmcK7cIaGicaGicaGCMvJywXJDwXHDgvKrMLLBgrZlNb1C2GOyhrVDgfSx2fTB3vUDca9icqKE3jLy2fSy1bSywnLAg9SzgvYkYT9ycK7cIaGicaGicaGCMvJywXJDwXHDgvKvMfSDwvZlNb1C2GODg90ywXbBw91BNqPoWOGicaGicb9','kg1HC3rLCI1KzxrHAwWGDhjHBNnHy3rPB24P','j10GFhWGCMvXlMjVzhK7cIaGicbTyxn0zxjcB2r5wYC','zMLSDgvY','lMDLDe1VzgvSsw5MBYHHy3rPB25ZktSkcIaGicbYzxmUANnVBIH7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGigvUzhbVAw50oIaN','jZSkicaGigXLDcbYzxn1BhqGpsbUDwXSoWOkicaGic8Vid09psbjBNrLz3jHDgvKifrYyw5Zywn0Aw9UigrLBMDHBIbfDMvUDcbmAwzLy3LJBguGpt09cIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGihrYEsb7cIaGicaGicaGy29UC3qGzxzLBNrdB250zxH0id0GEWOGicaGicaGicaGy29TCg9Uzw50rw5NAw5LoIbJB21WB25LBNrfBMDPBMuScIaGicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGicb0ywjSzu5HBwu6icC','lYr7zw5KCg9PBNroyw1LFwa7cIaGicaGicaGicaGigfWCc51C2uOzw5KCg9PBNrqCMvMAxGSigvUzhbVAw50uM91DgvYktSkcIaGicaGicaGicaGigXVz0vUzhbVAw50uMvNAxn0zxjLzcHLBMrWB2LUDe5HBwuSigvUzhbVAw50uhjLzML4ktSkcIaGicaGicaGicaGic8VifjLz2LZDgvYigv4Cg9YDcbYB3v0zxmGDw50DwSGzw5KCg9PBNqGAw5PicHHDxrVlwrLDgvJDcbKyxjPigvTyMvKzgvKignVBMzPzYKkicaGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGicbJB25ZDcbLEhbVCNrdB25MAwCGpsbLEhrYywn0rxHWB3j0q29UzMLNrNjVBuvUzhbVAw50kgvUzhbVAw50ugf0AcK7cIaGicaGicaGicaGicaGAwyGkgv4Cg9YDenVBMzPzYKGEWOGicaGicaGicaGicaGicaGrxHWB3j0sgfUzgXLCI5YzwDPC3rLCLjVDxrLCYHHChaSicC','zxHWB3j0uxvLCNK','laOGicaGicaGihrLEhq6igL0zw0U','laOGicaGicbLEhbVCNrrDwvYEtOG','cGOGic8QkGOGicaQie92zxjYAwrLigzVCM1HDfjLC3bVBNnLrgf0ysb1BNr1AYa','iJOG','igrHDgeGC3vJy2vZC2z1BgX5ignYzwf0zwq','cIaGicaGic8VignHC2nHzgvezwXLDguGpsb0CNvLoIberuXfveuGy2HPBgqGCMvJB3jKCYbMAxjZDcWGDgHLBIbOzwfKzxikicaGicaGy29UC29Szs5SB2COj0rLBgv0Aw5NignOAwXKihjLy29YzhmGzNjVBsa','rvvoAwG','y29UC3qGzxHWCMvZCYa9ihjLCxvPCMuOj2v4ChjLC3mNktSky29UC3qGyM9KEvbHCNnLCIa9ihjLCxvPCMuOj2jVzhKTCgfYC2vYjYK7cMnVBNn0ihbHDgGGpsbYzxf1AxjLkcDWyxrOjYK7cMnVBNn0igzZid0GCMvXDwLYzsGNzNmNktSky29UC3qGEYb2nZOGDxvPzhy3ih0GpsbYzxf1AxjLkcD1DwLKjYK7cMnVBNn0ihSGBg9Nz2vYlcbSB2Dtzxj2zxjszwfKEsWGBg9Nrw5KCg9PBNrszwDPC3rLCMvKlcbJCMvHDgvszxf1zxn0tg9Nz2vYlcbSB2Dszxf1zxn0ih0GpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl3v0AwXZl2XVz2DLCICPoWPJB25ZDcbfEhbVCNriyw5KBgvYid0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY9JB21WB25LBNrZl2HHBMrSzxjZl2v4Cg9YDf9Oyw5KBgvYjYK7cMnVBNn0ieLTCg9YDeHHBMrSzxiGpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl2nVBxbVBMvUDhmVAgfUzgXLCNmVAw1WB3j0x2HHBMrSzxiNktSky29UC3qGvxbSB2fKsgfUzgXLCIa9ihjLCxvPCMuOj0bYzxn0zM9Yz2vQCY9WBgf0zM9YBs9ZCMmVy29TCg9Uzw50CY9Oyw5KBgvYCY91CgXVywrFAgfUzgXLCICPoWPJB25ZDcb7igv4DhjHy3rfEhbVCNrdB25MAwDgCM9Trw5KCg9PBNqSigv4DhjHy3rjBxbVCNrdB25MAwDgCM9Trw5KCg9PBNqSigv4DhjHy3rvCgXVywrdB25MAwDgCM9Trw5KCg9PBNqGFsa9ihjLCxvPCMuOj0bYzxn0zM9Yz2vQCY9WBgf0zM9YBs9ZCMmVDxrPBhmVy29UzMLNlwv4DhjHy3rVCICPoWPJB25ZDcbYyxrLtgLTAxrLCIa9ihjLCxvPCMuOj0bYzxn0zM9Yz2vQCY9WBgf0zM9YBs9ZCMmVBwLKzgXLD2fYzs9YyxrLlwXPBwL0zxiNktSky29UC3qGAwrLBxbVDgvUy3LnAwrKBgv3yxjLid0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY9TAwrKBgv3yxjLl2LKzw1WB3rLBMn5jYK7cMnVBNn0igjVzhLpChrPB25ZtwLKzgXLD2fYzsa9ihjLCxvPCMuOj0bYzxn0zM9Yz2vQCY9WBgf0zM9YBs9ZCMmVBwLKzgXLD2fYzs9IB2r5lw9WDgLVBNmNktSky29UC3qGy29YC01PzgrSzxDHCMuGpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl21PzgrSzxDHCMuVy29YCYCPoWPJB25ZDcbZzwn1CML0EuHLywrLCNmGpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl21PzgrSzxDHCMuVC2vJDxjPDhKTAgvHzgvYCYCPoWOklYOQcIaQia','BwfW','icaGicaGiG','l3jLywqTy29TCg9ZAxrLic0GuMvHzcbOzwfKzxiGD2L0AcbKzxrHAwWGAxrLBxmkCM91DgvYlNbVC3qOjY9YzwfKlwnVBxbVC2L0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZB2XLlMXVzYGNuMvXDwvZDcbIB2r5ia','laOGicaGicbYzxf1zxn0u2nVCgu6ia','cGOGicaGlY8GuMvWBgfJzsbHBNKGCMvTywLUAw5NihbSywnLAg9SzgvYCWOGicaGyMfZzvf1zxj5id0GyMfZzvf1zxj5lNjLCgXHy2uOl1WKxhT0ywjSzu5HBwvCFs9Nlcb0AgLZlNjLywrtB3vYy2uPoWOGicaGyMfZzvf1zxj5id0GyMfZzvf1zxj5lNjLCgXHy2uOl1WKxhT0AgLZxc50ywjSzvX9l2CSihrOAxmUCMvHzfnVDxjJzsK7cGOGicaGCMv0DxjUigjHC2vrDwvYEtS','ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIaNuhjPBwfYEsbRzxKGka','C3rHCNrZv2L0Aa','jYaRihjLCs5WyxrOcIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8VifzHBgLKyxnPihnWzxnPzMLRihvUDhvRigvUzhbVAw50ihrLCNrLBNr1cIaGicaGignVBNn0igvUzhbVAw50id0GCMvXlNbHDgGUC3vIC3rYAw5NkdePoYaVlYbTzw5NAgfWDxmGlYbKAsbHD2fScGOGicaGicaVlYbfBMrWB2LUDcbNzxqGBwvTyNv0DwHRyw4GD2HLCMuGzgfSyw0GzM9YBwf0ihTRzxKSihzHBhvLFsbHDgf1ifT7A2v5lcb2ywX1zx1DicGXigvSzw1LBIKkicaGicaGAwyGkgvUzhbVAw50id09psaNzMLYC3qNksb7cIaGicaGicaGlY8GtM9YBwfSAxPLoIbHCNjHEsaXigvSzw1LBIaTpIbVyMPLy3qkicaGicaGicbPzIaOqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs53AgvYzsKGjIyGCMvXlMjVzhKUD2HLCMuUBgvUz3rOid09psaXksb7cIaGicaGicaGicbYzxeUyM9KEs53AgvYzsa9ihjLCs5IB2r5lNDOzxjLwZbDoWOGicaGicaGih0kicaGicaGicbPzIaOixjLCs5IB2r5lNDOzxjLihX8ihr5CgvVzIbYzxeUyM9KEs53AgvYzsaHpt0Gj29IAMvJDcCGFhWGqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs53AgvYzsKPihSkicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGicaGig1LC3nHz2u6icDxAgvYzsbTDxn0igjLigeGC2LUz2XLignVBMrPDgLVBIb7A2v5lcb2ywX1zx0NlaOGicaGicaGicaGicbLEgfTCgXLoIb7cIaGicaGicaGicaGicaGiNDOzxjLiJOGEYaIA2v5iJOGiMzPzwXKx25HBwuIlcaIDMfSDwuIoIaIzMLLBgrFDMfSDwuIih0ScIaGicaGicaGicaGicaGiNnLBgvJDci6ifSIzMLLBgqXiIWGiMzPzwXKmIjDcIaGicaGicaGicaGih0ScIaGicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGicb9ktSkicaGicaGicb9cIaGicaGicaGAwyGkhjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmGFhWGCMvXlMjVzhKUD2HLCMuUBg9NAwmPihSkicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGicaGig1LC3nHz2u6icDbzhzHBMnLzcb3AgvYzsbMB3jTyxqGAxmGBM90ihn1ChbVCNrLzcbPBIaVzMLYC3qGzw5KCg9PBNqUifvZzsaVCMvHzcbLBMrWB2LUDcbMB3iGy29TCgXLEcbXDwvYAwvZjYWkicaGicaGicaGicaGzxHHBxbSztOGEWOGicaGicaGicaGicaGicj3AgvYzsi6ihSGiMTLEsi6icjMAwvSzf9Uyw1LiIWGiNzHBhvLiJOGiMzPzwXKx3zHBhvLiIb9cIaGicaGicaGicaGih0ScIaGicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGicb9ktSkicaGicaGicb9cIaGicaGih0kcIaGicaGic8VievUzhbVAw50igrLBgv0zsbTzw1IDxr1AgTHBIb3AgvYzqOGicaGicbPzIaOzw5KCg9PBNqGpt09icDKzwXLDguNicyMicGHCMvXlMjVzhKUD2HLCMuPksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGicaGBwvZC2fNztOGj0rftevursbWyxLSB2fKig11C3qGAw5JBhvKzsbHihDOzxjLihbYB3bLCNr5jYWkicaGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicaGiNDOzxjLiJOGw3SGiMTLEsi6icjPzciSicj2ywX1zsi6icj5B3vYlwLKlxzHBhvLiIb9xqOGicaGicaGicaGFsWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8VievUzhbVAw50igfKzcbTzw1IDxr1AgTHBIbKyxrHihLHBMCGDMfSAwqkicaGicaGAwyGkgvUzhbVAw50id09psaNywrKjYKGEWOGicaGicaGic8ViezPBhrLCIbMAwvSzcb5yw5Nig1LBwLSAwTPigf1Dg9hzw5LCMf0zsbKyxjPihjLCxvPCMvKignOzwnRcIaGicaGicaGy29UC3qGyxv0B0DLBMvYyxrLrMLLBgrZid0G','ywn0Aw9U','Bg9VA3vW','zMzsB2K','C3rYAw5N','BgvUz3rO','ie1VzgvSic0Gqxv0BY1Nzw5LCMf0zwqGB24G','icaGic8ViezHBgXIywnRoIbNDw5HA2fUihjLywrtB3vYy2uGBgfUz3n1BMCGkhnLBxvHigTVBg9TihrLCNnLzgLHkqOGicaGCMv0DxjUicDtruXfq1qGkIbguK9nicCGkYb0AgLZlNjLywrtB3vYy2u7','y29UC3rYywLUDhm','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','zgf0zvrPBwvgAwvSzhm','laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGignVBNn0igrHDgeGpsbYzxeUyM9KEs4','BNvSBa','CMvWBgfJzq','mtaYDvfPwxDw','igrHDgeGBM90igzVDw5Kig9YigfJy2vZCYbKzw5PzwqNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqO','cNjVDxrLCI5WB3n0kcCVDxbKyxrLjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGic8VihjLCs5SB2CUzgvIDwCOj1jLCxvLC3qGyM9KEsa','C3rYAw5NAwz5','cGOGicaGicbHD2fPDcbJBgLLBNqUCxvLCNKOj0nptu1jvcCPoWOkicaGicaGlY8Gsw52ywXPzgf0zsbJywnOzsbZzxrLBgfOihDYAxrLig9WzxjHDgLVBIbIzxjOyxnPBaOGicaGicbHD2fPDcb0AgLZlMLUDMfSAwrHDgvdywnOzsGPoWOkicaGicaGCMv0DxjUihSkicaGicaGicbZDwnJzxnZoIb0CNvLlaOGicaGicaGig1LC3nHz2u6icDeyxrHihn1y2nLC3nMDwXSEsbKzwXLDgvKjYWkicaGicaGicbKyxrHoIbKzwXLDgvKrgf0yq','lMDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkhjLCs5IB2r5ktSkcIaGicaGignVBNnVBguUBg9NkgbmB29RDxaGD2L0AcbMAwX0zxiGCMvZDwX0CZOGjhTSAxn0lMXLBMD0Ah0GCMvJB3jKCYbMB3vUzgaPoWOGicaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGy291BNq6igXPC3qUBgvUz3rOlaOGicaGicaGigrHDge6igXPC3qScIaGicaGicaGCxvLCNK6ihjLCs5IB2r5laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOkicaGih0GzwXZzsb7cIaGicaGic8ViezVCM1HDcbSyw1Higf0yxuGCMvXDwvZDcb0yw5WysbxsevsrsbJBgf1C2uGDgv0yxbPigrLBMDHBIbtruXfq1qkicaGicaGy29UC29Szs5SB2COj1vZAw5NigXLz2fJEsbMB3jTyxqGD2L0AcbZzwXLy3rLzf90ywCGB3iGC2vSzwn0lw9UBhKGCMvXDwvZDcCPoWOkicaGicaGy29UC3qGC2vSzwn0zwruywCGpsbYzxeUyM9KEs5ZzwXLy3rLzf90ywCGFhWGjYC7cIaGicaGignVBNnVBguUBg9Nkga','oWOkicaGicaGicbJB25ZDcbYzxf1AxjLzezPzwXKCYa9ifSN','oWOGicaGAwyGkgHLywrLCKnHBgmUDg90ywXFAxrLBxmPihSkicaGicaGzgf0ys50B3rHBf9PDgvTCYa9igrHDgeU','ydSkcIaGicaGic8ViejHBMD1BIbxsevsrsbJBgf1C2uGAMLRysbHzgeGzgfUihrPzgfRigTVC29UzWOGicaGicbPzIaOkg9WDgLVBNmUD2HLCMuGjIyGqxjYyxKUAxnbCNjHEsHVChrPB25ZlNDOzxjLksaMjIbVChrPB25ZlNDOzxjLlMXLBMD0Aca+idaPihX8cIaGicaGicaGicaOB3b0Aw9UCY53AgvYzsaMjIbVChrPB25ZlNDOzxjLlMnVBMrPDgLVBNmGjIyGqxjYyxKUAxnbCNjHEsHVChrPB25ZlNDOzxjLlMnVBMrPDgLVBNmPicyMig9WDgLVBNmUD2HLCMuUy29UzgL0Aw9UCY5Szw5NDgGGpIaWksKGEWOGicaGicaGihrYEsb7cIaGicaGicaGicbJB25ZDcb3AgvYzvjLC3vSDca9ihrOAxmUyNvPBgrdB21WBgv4v2HLCMvdBgf1C2uOB3b0Aw9UCY53AgvYzsWGCgfYyw1ZlcbWyxjHBuLUzgv4ktSkicaGicaGicaGihf1zxj5icS9iga','zMLLBgroyw1L','DMLLD05HBwu','ndy2mdG5m3DxBhHkqW','cIaQiebWyxjHBsb7t2jQzwn0FsbJB25MAwCGlsblB25MAwD1CMfZAsb1BNr1AYbTzw5QywXHBMTHBIbTB2r1BaOGkIbaCgfYyw0GE251BwjLCN0Gy29UzMLNlNbVCNqGlsbqB3j0ihvUDhvRihnLCNzLCGOGkIbaCgfYyw0GE3n0CMLUz30Gy29UzMLNlMTLEsaTiefqssblzxKGkg9WC2LVBMfSkqOGkIbaCgfYyw0GE2jVB2XLyw59ignVBMzPzY5JB3jZic0Grw5HyMXLienpuLmGkgrLzMf1Bhq6ihrYDwuPcIaQiebWyxjHBsb7yM9VBgvHBN0Gy29UzMLNlMXVz2DPBMCGlsbfBMfIBguGCMvXDwvZDcbSB2DNAw5NicHKzwzHDwX0oIb0CNvLkqOGkIbaCMv0DxjUCYb7uhjVBwLZztX2B2LKpN0GuhjVBwLZzsb5yw5NihrPzgfRihbLCM5HAcbYzxnVBhzLigfNyxiGC2vYDMvYihrLDgfWigjLCMPHBgfUcIaQlWPHC3LUyYbMDw5JDgLVBIbLEgvJDxrLkgnVBMzPzYKGEWOGihjLDhvYBIbUzxCGuhjVBwLZzsGOCMvZB2X2zsWGCMvQzwn0ksa9pIb7cIaGicb0CNKGEWOGicaGicbJB25ZDcbHChaGpsbLEhbYzxnZkcK7cIaGicaGignVBNn0ihbVCNqGpsbJB25MAwCUCg9YDcb8FcaZmdaWoWOGicaGicbJB25ZDcbZzxj2zxjbzgrYzxnZid0Gy29UzMLNlNnLCNzLCKfKzhjLC3mGFhWGjZaUmc4WlJaNoYaVlYbezwzHDwX0idaUmc4WlJaGDw50DwSGyMfJA3DHCMqGy29TCgf0AwjPBgL0EqOGicaGicbJB25ZDcbTB2r1Bgvoyw1Lq2fWAxrHBgL6zwqGpsaN','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqOkicaVkIOkicaGkIbeEw5HBwLJigXVB2T1CcbKzw5Nyw4GC3vWCg9YDcbMAwX0zxjPBMCGDgfTyMfOyw4GzgfUihbLBMnHCMLHBIbTDwX0As1MAwvSzaOGicaQiebWyxjHBsb7C3rYAw5NFsbZzwfYy2GGlsblyxrHigT1BMnPihbLBMnHCMLHBGOGicaQiebWyxjHBsb7t2jQzwn0FsbLEhrYyuzPBhrLCNmGlsbgAwX0zxiGDgfTyMfOyw4Gkg1PC2fSoIbJB21Wyw55x2LKkqOGicaQiebYzxr1CM5ZihTbCNjHEx0GqxjYyxKGB2jQzwSGAgfZAwWGBg9VA3vWcIaGicOVcIaGyxn5BMmGz2v0tg9VA3vWrgf0yur5BMfTAwmOC2vHCMnOlcbLEhrYyuzPBhrLCNmGpsb7FsKGEWOGicaGDhj5ihSkicaGicaGlY8Gr3vUywTHBIbJDxn0B20GBg9VA3vWignVBMzPzYbQAwTHigfKysWGzMfSBgjHy2SGA2uGDgv4DezPzwXKCYbKzxrLy3rPB24kicaGicaGy29UC3qGBg9VA3vWq29UzMLNid0G','laOGicaGicbWCMLTyxj5vgv4DezPzwXKoIaN','cIaGicaGic8VignHC2nHzgvezwXLDguGpsbMywXZztOGt25SEsberuXfveuGAgvHzgvYihjLy29YzaOGicaGicaVlYbeyxrHyMfZzsbMB3jLAwDUigTLEsbJB25ZDhjHAw50igfRyw4GAgfUzgXLihzHBgLKyxnPignOAwXKihjLy29YzhmkicaGicaGy29UC29Szs5SB2COj0rLBgv0Aw5NigHLywrLCIbYzwnVCMqGkgnHC2nHzgvezwXLDguGpsbMywXZzsKUlI4NktSkcIaGicaGignVBNn0igrLBgv0zuHLywrLCLf1zxj5id0GyerftevursbguK9nicr7DgHPCY53CML0zvnVDxjJzx0Gv0HfuKuGjhT3AgvYzunSyxvZzx0GuKvuvvjosu5hicPGoWOGicaGicbJB25ZDcbKzwXLDgvizwfKzxjszxn1BhqGpsbHD2fPDcbJBgLLBNqUCxvLCNKOzgvSzxrLsgvHzgvYuxvLCNKSihbHCMfTCYK7cGOGicaGicbPzIaOzgvSzxrLsgvHzgvYuMvZDwX0lNjVD3mUBgvUz3rOid09psaWksb7cIaGicaGicaGDgHYB3CGBMv3ievYCM9YkcDszwnVCMqGBM90igzVDw5KjYK7cIaGicaGih0kcIaGicaGignVBNn0igrLBgv0zwreyxrHid0GzgvSzxrLsgvHzgvYuMvZDwX0lNjVD3nBmf07cIaGicaGignVBNnVBguUBg9NkcDizwfKzxiGCMvJB3jKigrLBgv0zwqGC3vJy2vZC2z1BgX5jYK7cIaGicaGia','jZSkicaGicaGy29UC3qGCgX1z2LUugf0Aca9ihbHDgGUAM9PBIHFx2rPCM5HBwuSicCUlICSicDWBhvNAw5ZjYWGycr7Bw9KDwXLtMfTzx0TCgX1z2LUlMPZycK7cIaGicaGigXLDcbWBhvNAw4GpsbUDwXSoWOGicaGicbPzIaOzNmUzxHPC3rZu3LUyYHWBhvNAw5qyxrOksKGEWOGicaGicaGihrYEsb7cIaGicaGicaGicbWBhvNAw4GpsbYzxf1AxjLkhbSDwDPBLbHDgGPoWOGicaGicaGicaGAwyGkhbSDwDPBI5VBKjLzM9YzuvUzhbVAw50C0XVywqPihSkicaGicaGicaGicaGCgX1z2LUlM9UqMvMB3jLrw5KCg9PBNrZtg9HzcHHChaSignVBMzPzYK7cIaGicaGicaGicb9cIaGicaGicaGicbSB2DNzxiUAw5MBYH7igv2zw50oIaNCgX1z2LUx2XVywrLzcCSihbSDwDPBJOGycr7Bw9KDwXLtMfTzx0TCgX1z2LUycb9lcbGugX1z2LUigXVywrLzdOGjhTTB2r1Bgvoyw1LFs1WBhvNAw4UANnGktSkicaGicaGicb9ignHDgnOicHWBhvNAw5fCNjVCIKGEWOGicaGicaGicaGBg9Nz2vYlMvYCM9YkhSGzxzLBNq6icDWBhvNAw5FBg9Hzf9LCNjVCICSigvYCM9YoIbWBhvNAw5fCNjVCI5TzxnZywDLih0SigbgywLSzwqGDg8GBg9HzcbWBhvNAw46icr7Bw9KDwXLtMfTzx0TCgX1z2LUlMPZycK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYbhBg9IywWGAgvHBhrOignOzwnRigvUzhbVAw50icH0yw5WysbWCMvMAxGGBw9KDwXLkqOGicaGicbHChaUz2v0kcCVAgvHBhrOjYWGkhjLCsWGCMvZksa9pIb7cIaGicaGicaGy29UC3qGAgvHBhrOsw5MBYa9ihSkicaGicaGicaGihn0yxr1CZOGj29RjYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPlNjLCgXHy2uOj1qNlcaNicCPlNjLCgXHy2uOl1WUxgr7m31Ajc8SicCNksWkicaGicaGicaGihnLCNzPy2u6icC','zMLLBgrmywjLBhm','lNvWzgf0zurHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4Da','Dg9dyw1LBenHC2u','lMrLBgv0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0PoWOGicaGicaGignVBNnVBguUBg9NkcDBrKfmtejbq0TDierftevursbJB21WBgv0zwqGD2L0Ag91DcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDierftevursbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kicaGih0kcIaGicaVlYbmB2CGC3vJy2vZC2z1BcbVCgvYyxrPB24kicaGignVBNnVBguUBg9Nkga','oIaKE3jLC3vSDc5JB21WB25LBNrZtg9HzgvKFsbJB21WB25LBNrZycK7cIaGicaGih0kicaGih0PlMnHDgnOkgvYCIa9pIb7cIaGicaGignVBNnVBguUzxjYB3iOyezHAwXLzcb0BYbSB2fKignVBxbVBMvUDcbJB25MAwD1CMf0Aw9UigzVCIa','FhWNic0Gj3X8y29KzsbHCYbKAxnWBgf5x3rLEhqIxqOGicaGicaGih0ScIaGicaGicaGzxHHBxbSzv9JDxn0B21FBg9VA3vWoIbSB29RDxbdB25MAwCGpYb7cIaGicaGicaGicaID2HLCMuIoIbBEYaIA2v5iJOGiMnVBxbHBNLFAwqIlcaIDMfSDwuIoIaIEw91CI1JB21Wyw55lwLKiIb9xsWkicaGicaGicaGicjZzwXLy3qIoIbBBg9VA3vWq29UzMLNlMLKrMLLBgqSigXVB2T1CenVBMzPzY50zxH0rMLLBgrDlaOGicaGicaGicaGiM5VDguIoIaIvxnPBMCGzMLLBgroyw1Ltg9VA3vWignVBMzPz3vYyxrPB24IcIaGicaGicaGFsa6ig51BgWScIaGicaGicaGzxHHBxbSzv9HzhzHBMnLzdOGEWOGicaGicaGicaGiNDOzxjLiJOGEWOGicaGicaGicaGicaIBg9NAwmIoIaIt1iIlaOGicaGicaGicaGicaIy29UzgL0Aw9UCYi6ifSkicaGicaGicaGicaGicb7icjRzxKIoIaI','C3fXvxK','zMLLBgrZ','D29YA2zSB3C','jZSkicaGihrOAxmUCMvHzfnVDxjJzsa9icC','iIWGiM9WzxjHDg9YiJOGiMXPA2uIlcaIDMfSDwuIoIaIjxn5C3rLBsuIlcaIC2vUC2L0AxzLiJOGzMfSC2uGFqOGicaGicaGicaGicaGif0kicaGicaGicaGicaGFsWkicaGicaGicaGicaGiNnLBgvJDci6ifSIAwqIlcaI','cIaGicaGic8ViefKzcbZzwfYy2GGy29UzgL0Aw9UCYb1BNr1AYb0zxH0igzPzwXKCWOGicaGicbPzIaOC2vHCMnOicyMihnLyxjJAc50CMLTkcKPihSkicaGicaGicbJB25ZDcbZzwfYy2HdB25KAxrPB25Zid0GDgv4DezPzwXKCY5TyxaOzMLLBgqGpt4GEWOGicaGicaGicaGCMv0DxjUigb1ChbLCIHHlIr7zMLLBgr9ksbmsuTfihvWCgvYkcqKE3bHCMfTsw5KzxGRk30PydSkicaGicaGicb9ktSkicaGicaGicb3AgvYzunVBMrPDgLVBNmUChvZAcHGkcr7C2vHCMnOq29UzgL0Aw9UCY5QB2LUkcCGt1iGjYL9kwaPoWOkicaGicaGicaVlYbbzgqGC2vHCMnOihbHCMfTzxrLCIbMB3iGzwfJAcb0zxH0igzPzwXKcIaGicaGicaGDgv4DezPzwXKCY5MB3jfywnOkcGPid0+ihSkicaGicaGicaGihbHCMfTCY5WDxnOkgaLjhTZzwfYy2GUDhjPBsGPFsvGktSkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8GqwrKigv4DhjHigzPBhrLCNmkicaGicaGzM9YicHJB25ZDcbBA2v5lcb2ywX1zv0GB2yGt2jQzwn0lMvUDhjPzxmOzxH0CMfgAwX0zxjZksKGEWOGicaGicaGigLMicH2ywX1zsaMjIa','EWOGicaGicaGicaGiG','cI8Vifbpu1qGl2fWAs8','cIaGicaGic8VierLzMf1BhqGC2nVCguGzMLSDgvYcIaGicaGihDOzxjLq29UzgL0Aw9UCY5WDxnOkcC','j10kicaGicaGicaGic5MAwX0zxiOzMLLBgqGpt4Giwf1Dg9hzw5LCMf0zuzPzwXKCY5PBMnSDwrLCYHMAwvSzcKPoWOkicaGicaGicbJB25ZDcbTAxnZAw5NrMLLBgrZid0GCMvXDwLYzwrgAwvSzhmUzMLSDgvYkgzPzwXKid0+icfYzxeUyM9KEvTMAwvSzf0GFhWGCMvXlMjVzhLBzMLLBgrDid09psaNjYK7cGOGicaGicaGigLMicHTAxnZAw5NrMLLBgrZlMXLBMD0Aca+idaPihSkicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgrZjYWkicaGicaGicaGicaGBwvZC2fNztOGyfjLCxvPCMvKigzPzwXKkhmPoIaKE21PC3nPBMDgAwvSzhmUAM9PBIGNlcaNkx1GlaOGicaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGicaGFsK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYbfBMrWB2LUDcb1CgrHDguGBwvTyNv0DwHRyw4GChjPBwfYEsbRzxKkicaGicaGAwyGkgvUzhbVAw50id09psaNDxbKyxrLjYKGEWOGicaGicaGignVBNn0ihbYAw1HCNLlzxKGpsaN','mtfpvNvtvNa','y3jLyxrLzef0','Dg90ywXFyw1VDw50','ChjPy2vgAwvSza','ChjPBwfYEuTLEq','zgvSzxrLigHLywrLCKrHDgfgB3jwywXPzgf0Aw9UlG','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtksddOUkcRokaNsbTyxn0zxiGCMvJB3jKcIaGicbPzIaOCMvXlL9Yzxf1zxn0u2nVCguPihSkicaGicaGy29UC3qGC2nVCgvdAgvJAYa9igf3ywL0ia','ChvZAa','cIaGicaGignVBNn0ignHBgn1Bgf0Aw9UCYa9ia','CMvXDwvZDfnJB3bL','jYWkicaGicaGicbHzgrPDgLVBMfSq29UDgv4DdOGEWOGicaGicaGicaGzgv0ywLSvgfIBgu6icC','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqOkicaVkIOkicaGkIbnzxrOB2qGDw50DwSGBg9VA3vWigrHDgeGzgvUz2fUigzPBhrLCMLUzYaOD2HLCMuGy2XHDxnLksbKyw4Gy3vZDg9TihnLBgvJDaOGicaQiebWyxjHBsb7t2jQzwn0FsbVChrPB25Zic0Gt3b0Aw9UCYbKzw5Nyw4GD2HLCMuGzgfUihnLBgvJDaOGicaQiebYzxr1CM5ZihTbCNjHEx0GqxjYyxKGB2jQzwSGAgfZAwWGBg9VA3vWigrLBMDHBIbMB3jTyxqGE2LKlcb0zxH0FqOGicaQlWOGigfZEw5JigDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkg9WDgLVBNmPihSkicaGihrYEsb7cIaGicaGic8VienOzwnRignHy2HLigzPCNn0icHPzIbLBMfIBgvKkqOGicaGicbJB25ZDcbJywnOzu9WDgLVBNmGpsb7ic4UlM9WDgLVBNmSihr5Cgu6icDMAwX0zxiNih07cIaGicaGignVBNn0ignHy2HLzfjLC3vSDca9igf3ywL0ihrOAxmUz2v0q2fJAgvKtg9VA3vWkgnHy2HLt3b0Aw9UCYWGj2zPBhrLCICPoWOGicaGicbPzIaOy2fJAgvKuMvZDwX0ksb7cIaGicaGicaGCMv0DxjUignHy2HLzfjLC3vSDdSkicaGicaGFqOkicaGicaGy29UC3qGC2vSzwn0q29SDw1UCYa9ig9WDgLVBNmUC2vSzwn0ihX8ifSN','lMXLBMD0AdSkicaGih0kicaGigLMicHOzwfKzxjdywXJlNrVDgfSx3f0EsaMjIbOzwfKzxjdywXJlNrVDgfSx3f0Es5ZB3vYy2uPihSkicaGicaGy29UC3qGCxr5rMLLBgqGpsbOzwfKzxjdywXJlNrVDgfSx3f0Es5ZB3vYy2uUCMvWBgfJzsGNAxrLBxmUjYWGjYCPoWOGicaGicbKyxrHlNrVDgfSx3f0Esa9igrHDgeU','jYWkicaGicaGicaGigzVCMvPz25lzxK6icC','ENbLrfK','cIaGicaVlYbwywXPzgfZAsbKzxrHAwWGAxrLBxmGDw50DwSGBwfZDgvYlwrLDgfPBaOGicaGAwyGkcfKyxrHlG','cIaGicaVlYbwywXPzgfZAsb4lwnVCNjLBgf0Aw9UlwLKigHLywrLCIaOtuforefut1jzigPPA2eGs2fMA2eGzw5HyMXLzcKkicaGignVBNn0ignVCNjLBgf0Aw9UswqGpsbYzxeUAgvHzgvYC1SNEc1JB3jYzwXHDgLVBI1PzcDDoWOGicaGAwyGkcfJB3jYzwXHDgLVBKLKksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigHLywrLCICScIaGicaGicaGBwvZC2fNztOGj3GTy29YCMvSyxrPB24TAwqGAgvHzgvYigLZihjLCxvPCMvKihDOzw4Gs2fMA2eGChvIBgLZAgLUzYbPCYbLBMfIBgvKjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','jZSkcIaGicaVlYbtzxr1Ccb2Awv3tMfTzsb1BNr1AYbVCgvYyxnPihjLywqGAMLRysbIzxjIzwrHigrHCMKGDgfIBgvoyw1LcIaGicb0AgLZlNzPzxDoyw1Lid0GjW','jZSkicaGigLMicGHCMvXlMjVzhLBChjPBwfYEuTLEv0PihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6igbqCMLTyxj5igTLEsaOjhTWCMLTyxj5s2v5FsKGAxmGCMvXDwLYzwqGzM9YihvWzgf0zwaScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','v295qwi','mJm4mZy1mtbPt1vzsgG','lMnYzwf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9Nkga','ywrQDxn0','wev5Bgq','jYWkicaGicaGicaGigrLDgfPBfrHyMXLoIaN','FwaPoWOkicaGihjLDhvYBIbYzxmUC3rHDhvZkdiWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGig1LC3nHz2u6icC','zgvMyxvSDfnJB3bL','igj1DcbJB21WB25LBNrZigfYzsbJB25MAwD1CMvKoMaSiguUBwvZC2fNzsK7cIaGicb0AhjVDYbLoWOGih0kicaVlYbkAwTHihrPzgfRigfKysbJB21WB25LBNrZlcbZAwXLBNqGC2TPCcb3ywPHCGOGignVBNnVBguUBg9NkgboBYbJB21WB25LBNqGzw5NAw5LihjLCxvPCMvKigzVCIa','oWOGicaGicaGignVBNn0igLUDMfSAwrgAwvSzhmGpsbBxtSkcIaGicaGicaGlY8Gq2HLy2SGC2v0AwfWigzPzwXKigrHBgfTihnLBgvJDaOGicaGicaGigzVCIaOy29UC3qGzMLLBgqGB2yGCMvXlMjVzhKUC2vSzwn0ksb7cIaGicaGicaGicaVlYbtA2LWihzHBgLKyxnPihvUDhvRigzPzwXKicDPzcCkicaGicaGicaGigLMicHMAwvSzc50B0XVD2vYq2fZzsGPid09psaNAwqNksb7cIaGicaGicaGicaGignVBNrPBNvLoWOGicaGicaGicaGFqOkicaGicaGicaGic8VifnRAxaGDMfSAwrHC2KGAMLRysbHzgeGu1fmigv4ChjLC3nPB24GzgvUz2fUiefticHHBgLHCYKkicaGicaGicaGigLMicGVxhmRyxnCCYTCDYSKl2KUDgvZDcHMAwvSzcKPihSkicaGicaGicaGicaGy29UDgLUDwu7cIaGicaGicaGicb9cGOGicaGicaGicaGlY8Gu2TPCcb2ywXPzgfZAsbQAwTHigfKysbtuuWGB3bLCMf0B3jZl2z1BMn0Aw9UCYaOFhWSienptKnbvcWGzgXSkqOGicaGicaGicaGAwyGkc9CFfX8FenptKnbvhXdt0fmrvndrxXdqvnfFfDiru4VAs50zxn0kgzPzwXKksKGEWOGicaGicaGicaGicbJB250Aw51ztSkicaGicaGicaGih0kcIaGicaGicaGicaVlYbwywXPzgfZAsbUB3jTywWGzMLLBgqGBMfTzqOGicaGicaGicaGAwyGkcf2ywXPzezPzwXKCY5PBMnSDwrLCYHMAwvSzcKPihSkicaGicaGicaGicaGAw52ywXPzezPzwXKCY5WDxnOkgzPzwXKktSkicaGicaGicaGih0kicaGicaGicb9cGOGicaGicaGigLMicHPBNzHBgLKrMLLBgrZlMXLBMD0Aca+idaPihSkicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGicbLCNjVCJOGj0LUDMfSAwqGC2vSzwn0igzPzwXKCYCScIaGicaGicaGicaGig1LC3nHz2u6igbjBNzHBgLKigzPzwXKkhmPoIaKE2LUDMfSAwrgAwvSzhmUAM9PBIGNlcaNkx1GlaOGicaGicaGicaGicb2ywXPzezPzwXKCZOGDMfSAwrgAwvSzhmScIaGicaGicaGicaGihnXBev4ChjLC3nPB25oB3rLoIaNu1fmigv4ChjLC3nPB25ZigrLBMDHBIbVCgvYyxrVCIb8FcbHDgf1ieftigfSAwfZigrPCgvYyM9SzwHRyw4NlaOGicaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGicaGFsK7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYbhDw5HA2fUig1LDgHVzcbNzxrmB29RDxbeyxrHv2L0AezPBhrLCGOGicaGicbJB25ZDcbSAxn0id0GyxDHAxqG','AwyGkgnHBgn1Bgf0Aw9UCY50B3rHBf9HBw91BNqPihSkicaGicaGicbJB25ZDcb0B3rHBefTB3vUDca9igfSBeL0zw1ZlNjLzhvJzsGOC3vTlcbPDgvTksa9pIb7cIaGicaGicaGicbJB25ZDcbXDhKGpsboDw1IzxiOAxrLBs4','iIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0kicaGicaGicaGif0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifbHBMDNAwWGBw9KzwWGCMvHzenVBxbVC2L0zsbTzxrOB2qkicaGignVBNn0ihjLC3vSDca9igf3ywL0ia','y3jLyxrL','DMLLD1f1zxj5','l2nOyw5Nzs1ZDgf0DxmGlsbdAgfUz2uGC3rHDhvZia','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0GndaZksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmYKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDqCM8GrMvHDhvYzsbszxf1AxjLzcCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb1CgDYywrLoIaNAhr0Chm6lY9Yzxn0zM9Yz2uUzgv2l3bYAwnPBMCNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGigLMicHLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDJB25ZDhjHAw50ihzPB2XHDgLVBICPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj2jLBg93ig1PBMLTDw0NksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdKPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNq29UC3rYywLUDcb2Aw9SyxrPB24NlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGAwyGkgvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj25VDcbJB25MAwD1CMvKigzVCIbHzgP1C3rTzw50jYKGFhWGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNAxmGCMvXDwLYzwqGzM9YigfKANvZDcCPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj211C3qGyMuGysbUB24TEMvYBYbUDw1IzxiNksb8FcbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGysb2ywXPzcbMAwvSzcCPihX8igvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj211C3qGBM90igjLigvTChr5jYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj1zHBgLKyxrPB24GzxjYB3iNlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGAwyGkgvYCM9YlM1LC3nHz2uGpt09icDeyxrHihrPzgfRigrPDgvTDwTHBICGFhWGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNBM90igzVDw5KjYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda0ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0rHDgeGBM90igzVDw5KjYWkicaGicaGicbTzxnZywDLoIaN','ifn1yM1VzhvSzsaTief1Dg8Tz2vUzxjHDgvKig9Uia','oWOGicaGAwyGkcf2ywXPzezPzwXKCY5PBMnSDwrLCYHYzxeUyM9KEs53AgvYzs5RzxKPksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzPzwXKjYWkicaGicaGicbTzxnZywDLoIbGsw52ywXPzcbMAwvSzdOGjhTYzxeUyM9KEs53AgvYzs5RzxL9ycWkicaGicaGicb2ywXPzezPzwXKCZOGDMfSAwrgAwvSzhmScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGC2vSzwn0igzPzwXKCYbQAwTHigfKyqOGicaGAwyGkhjLCs5IB2r5lNnLBgvJDcaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNnLBgvJDcKPihSkicaGicaGy29UC3qGAw52ywXPzezPzwXKCYa9ihjLCs5IB2r5lNnLBgvJDc5MAwX0zxiOzMLLBgqGpt4GixzHBgLKrMLLBgrZlMLUy2X1zgvZkgzPzwXKksK7cGOGicaGicbPzIaOAw52ywXPzezPzwXKCY5Szw5NDgGGpIaWksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDjBNzHBgLKihnLBgvJDcbMAwvSzhmNlaOGicaGicaGicaGBwvZC2fNztOGyeLUDMfSAwqGzMLLBgqOCYK6icr7Aw52ywXPzezPzwXKCY5QB2LUkcCSicCPFwaScIaGicaGicaGicb2ywXPzezPzwXKCZOGDMfSAwrgAwvSzhmScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cIaGicb9cGOGicaGlY8Gq29UDMvYDcbRzsbHCNjHEsbMB3jTyxqGDw50DwSGA29TCgf0AwjPBgL0yxmGzgvUz2fUig1VzgvSlMDLDerHDgeOksaTpIbIDwLSzenVBxbSzxHxAgvYzunSyxvZzsGPcIaGicbJB25ZDcbNzxrqyxLSB2fKid0GEWOGicaGicb3AgvYztOGw3SGA2v5oIbYzxeUyM9KEs53AgvYzs5RzxKSihzHBhvLoIbYzxeUyM9KEs53AgvYzs52ywX1zsb9xsWkicaGicaGC2vSzwn0oIbYzxeUyM9KEs5ZzwXLy3qkicaGih07cIaGicbJB25ZDcbYzxn1BhqGpsbHD2fPDca','igjHCNukCM91DgvYlNbVC3qOjY9JCMvHDguNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGlY8GCMvXlMXVzY5Kzwj1zYGNuMvXDwvZDcbIB2r5ia','iL0ScIaGicaGicaGicaIC29YDf9JB2X1Bw5ZiJOGwWOGicaGicaGicaGicb7cIaGicaGicaGicaGicaGiMnVBhvTBIi6ici','laOGicaGicbJB2X1Bw5gB3jTyxrZoIa','cI8Vie5VigfJDgLVBNmGzw5HyMXLzcbMB3iGDgHPCYbLBMrWB2LUDaOVlYbfBMfIBguGywn0Aw9UCYbPBIbWyxLSB2fKihrVigDLBMvYyxrLigvUzhbVAw50CW','jZSkicaGicaGzgvSzxrLigHLywrLCKrHDgfBzgv0ywLSs2v5xtSkcIaGicaGic8Vic0TlsbiB29RoIbVBKjLzM9YzunVBxbVC2L0zuLUC2vYDcaTls0kicaGicaGAwyGkgv2zw50q29UDgv4DcaMjIbLDMvUDenVBNrLEhqUy29TCg9Uzw50rw5NAw5Lksb7cIaGicaGicaGy29UC3qGEYbJB21WB25LBNrfBMDPBMu6ignLlcbdB250zxH0qNvPBgrLCJOGq0iGFsa9igv2zw50q29UDgv4DdSkicaGicaGicbJB25ZDcbKzxrHAwXjDgvTCYa9igrHDgfBzgv0ywLSs2v5xsb8FcbBxtSkicaGicaGicbJB25ZDcbIzwzVCMvdDhGGpsbdqI5IDwLSzenVBxbVC2L0zuLUC2vYDejLzM9YzunVBNrLEhqOAgvHzgvYrgf0ysWGzgv0ywLSsxrLBxmSihSkicaGicaGicaGihrHyMXLtMfTztOGjW','iJOGiMv4Axn0Aw5NlwLKiIWkicaGicaGicaGicaGiMzPzwXKmsi6icj2ywX1zteIlaOGicaGicaGicaGicaIzMLLBgqYiJOGiNzHBhvLmIiScIaGicaGicaGicaGici','Bgv0igjHC2vrDwvYEsa9iga','jYb5yw5NigjLBMfYcIaGicOGqhbHCMfTihTZDhjPBMD9ihnLBgvJDgvKvgfNic0GsuqGEwfUzYbKAxbPBgLOcIaGicOGqhjLDhvYBNmGE0fYCMf5FsbbCNjHEsbVyMPLAYbOyxnPBcbSB29RDxakicaGkI8kicbHC3LUyYbNzxrtDgf0AwnmB29RDxbeyxrHkhnLBgvJDgvKvgfNksb7cIaGicb0CNKGEWOGicaGicaVlYbdAgvJAYbJywnOzsbMAxjZDcaOAwyGzw5HyMXLzcKGlsbJywnOzsb0yw5WysbZzwXLy3rLzfrHzYbRyxjLBMeGzgf0ysbZyw1HcIaGicaGignVBNn0ignHy2HLt3b0Aw9UCYa9ihSGDhLWztOGj3n0yxrPyYCGFtSkicaGicaGy29UC3qGy2fJAgvKuMvZDwX0id0GyxDHAxqGDgHPCY5NzxrdywnOzwrmB29RDxaOy2fJAgvpChrPB25ZlcaNC3rHDgLJjYK7cIaGicaGigLMicHJywnOzwrszxn1BhqPihSkicaGicaGicaVlYbbChbSEsbZzwXLy3rLzfrHzYb0BYbJywnOzwqGCMvZDwX0cIaGicaGicaGCMv0DxjUignHy2HLzfjLC3vSDc5TyxaOAxrLBsa9pIb7cIaGicaGicaGicbPzIaOAxrLBs5Pzca9pt0GC2vSzwn0zwruywCPihSkicaGicaGicaGicaGCMv0DxjUihSGlI4UAxrLBsWGC2vSzwn0zwq6icD0CNvLjYb9oWOGicaGicaGicaGFqOGicaGicaGicaGCMv0DxjUihSGAwq6igL0zw0UAwqSihrLEhq6igL0zw0UDgv4Dcb9oWOGicaGicaGih0PoWOGicaGicb9cGOGicaGicbJB25ZDcbXDwvYEsa9icDtruXfq1qG','cI8VieTHzMTHifbYB2r1y2vYifnLCNzPy2uGDw50DwSGzxzLBNqGChvIBgLZAgLUzWPSzxqGA2fMA2ftzxj2AwnLid0GBNvSBdSkDhj5ihSkicbRywzRyvnLCNzPy2uGpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl3nLCNzPy2vZl2THzMTHu2vYDMLJzsCPlMDLDeLUC3rHBMnLkcK7cN0Gy2f0y2GGkguPihSkicbJB25ZB2XLlMvYCM9YkcDduKLusunbtdOGs2fMA2eGC2vYDMLJzsbMywLSzwqGDg8GBg9HzcbIDxqGs2fMA2eGChvIBgLZAgLUzYbPCYbJB25MAwD1CMvKoICSiguUBwvZC2fNzsK7cIaGDgHYB3CGztSkFqOklY8Gs2fMA2eGy29UzMLNDxjHDgLVBIbKyxjPihbHEwXVywqky29UC3qGA2fMA2fdB25MAwCGpsa','zgvSzxrL','jYWkicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicb9cIaGicaGih07cIaGicb9cGOGicaGlY8GugfUz2DPBcbTB2rLBcbJB21WB3nPDguGy3jLyxrLig1LDgHVzaOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','igzPzwXKCWOGkIbeyxrHyMfZztOGug9ZDgDYzvnrtaOGkI8kcI8VienpuLmGzgL0yw5Nyw5PigrPigXLDMvSigfWCcbVBgvOignVCNmGBwLKzgXLD2fYzsaOBgLOyxqGA29UzMLNDxjHC2KGq09su19ftKfcteveigrHBIbdt1jtx09ssuDjtLmGzgKGlMvUDIKkcGOklY8GtwLKzgXLD2fYzsb1BNr1AYb2ywXPzgfZAsbWyxLSB2fKihbHzgeGBwv0B2rLifbpu1qkCM91DgvYlNvZzsGOCMvXlcbYzxmSig5LEhqPid0+ihSkicbPzIaOCMvXlM1LDgHVzca9pt0Gj1bpu1qNksb7cIaGicb0CNKGEWOGicaGicaVlYbtA2LWihzHBgLKyxrPB24GDw50DwSGAw1WB3j0ihjVDxrLCYaOBwvUz2D1BMfRyw4GBxvSDgLWyxj0l2zVCM0Tzgf0ysWGyNvRyw4GsLnptIKkicaGicaGAwyGkhjLCs5WyxrOlNn0yxj0C1DPDgGOjY9PBxbVCNqTjYKPihSkicaGicaGicbYzxr1CM4GBMv4DcGPoWOGicaGicb9cGOGicaGicaVlYbwywXPzgfZAsb1BxvTihvUDhvRihbHEwXVywqkicaGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDnAxnZAw5NihbHEwXVywqNlaOGicaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPlaOGicaGicaGicaGzw5KCg9PBNq6icCVyxbPlW','Dgv4DezPzwXKCW','mta5mZrwAfb2qNq','jYWkicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGFsK7cN0PoWOkBw9KDwXLlMv4Cg9YDhmGpsbYB3v0zxi7','lMXLBMD0Aca+ida7cGOGigLMicHOyxndB21WB25LBNrZksb7cIaGicbJB21WB25LBNrfBMDPBMuGpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl3v0AwXZl2nVBxbVBMvUDc1LBMDPBMuNks5JB21WB25LBNrfBMDPBMu7cIaGicbdB250zxH0qNvPBgrLCIa9ihjLCxvPCMuOj0bYzxn0zM9Yz2vQCY9WBgf0zM9YBs9ZCMmVDxrPBhmVy29UDgv4Dc1IDwLSzgvYjYK7cGOGicaGlY8Gtg9HzcbJB21WB25LBNqGy29UzMLNDxjHDgLVBIbKyxjPihbHEwXVywqGEwfUzYbZzwrHBMCGzgLNDw5HA2fUcIaGicbJB25ZDcbJB21WB25LBNrdB25MAwCGpsb7cIaGicaGihrHyMXLtMfTztOGjW','jYWkicaGicaGicaGignVCNjLBgf0Aw9Uswq6ignVCNjLBgf0Aw9UswqkicaGicaGicb9cIaGicaGicKUy2f0y2GOzxjYid0+ignVBNnVBguUzxjYB3iOj1TlywzRyv0Gqxn5BMmGChvIBgLZAcbLCNjVCJONlcbLCNiUBwvZC2fNzsKPoWOGicaGFqO','lMnOyw5Nzvn0yxr1C0rHDgeOCMvXlMjVzhKSihDVCMTMBg93q29UzMLNlcbLDMvUDenVBNrLEhqPoWOGicaGicaGignVBNnVBguUBg9NkcDBsu5uruDsqvrfrcbuuKfou0fdveLptL0Gq0HbtKDflvnuqvrvuYbJB21WBgv0zwqGC3vJy2vZC2z1BgX5ihDPDgGGzxzLBNrZjYK7cIaGicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05Dieniqu5hrs1tvefuvvmGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicb9igvSC2uGEWOGicaGicaVlYbgywXSyMfJAZOGDgfUCgeGy29TCg9Uzw50igvUz2LUzsbLDMvUDhmkicaGicaGDhj5ihSkicaGicaGicbYzxn1BhqGpsbHD2fPDca','jYWkicaGicaGicaGihvWDgLTztOGChjVy2vZCY51ChrPBwuOksWkicaGicaGicaGig1LBw9YEtOGChjVy2vZCY5Tzw1VCNLvC2fNzsGPlaOGicaGicaGicaGC3LZDgvToIb7cIaGicaGicaGicaGihbSyxrMB3jToIbWCM9JzxnZlNbSyxrMB3jTlaOGicaGicaGicaGicbUB2rLvMvYC2LVBJOGChjVy2vZCY52zxjZAw9UlaOGicaGicaGicaGicbWAwq6ihbYB2nLC3mUCgLKcIaGicaGicaGicb9cIaGicaGicaGFtSkcIaGicaGicaGCMvZlMPZB24OAgvHBhrOsw5MBYK7cIaGicaGih0PoWOkicaGicaGlY8Gtw9KDwXLlxnWzwnPzMLJigHLywX0AcbJAgvJAYbLBMrWB2LUDcaOzgvUz2fUihbYzwzPEcbTB2r1BguPcIaGicaGigfWCc5NzxqOjY9HCgKV','q2Ptu0y','icHHDg9TAwmGAw5JCMvTzw50l2rLy3jLBwvUDcKkCM91DgvYlNbVC3qOjY9HzgP1C3qNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGlY8GvMfSAwrHC2KGCgf5Bg9HzaOGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKignHBM5VDcbIzsbLBxb0EsCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGChjPBwfYEsbRzxKkicaGignVBNn0ihbYAw1HCNLlzxKGpsaN','oICSigvYCM9YktSkcIaGicaVlYbiyw5KBguGzM9YzwLNBIbRzxKGy29UC3rYywLUDcbLCNjVCNmkicaGigLMicHLCNjVCI5JB2rLid09psaNmJm1mdmNksb7ic8VifbVC3rNCMvtuuWGzM9YzwLNBIbRzxKGDMLVBgf0Aw9UcIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWosKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDgB3jLAwDUigTLEsbJB25ZDhjHAw50jYWkicaGicaGicbTzxnZywDLoIaNq2fUBM90igrLBgv0ztOGCMvJB3jKigLZihn0AwXSihjLzMvYzw5JzwqGyNKGB3rOzxiGzgf0ysCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigrLBgv0Aw5Nia','qu5UyNK','EffOuNm','l2nYzwf0ztONlcbku09olNn0CMLUz2LMEsHYzxeUyM9KEsWGBNvSBcWGmIKPoWOkicaGic8VifzHBgLKyxnPihbHEwXVywqkicaGigLMicGHCMvXlMjVzhKGFhWGt2jQzwn0lMTLExmOCMvXlMjVzhKPlMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNugf5Bg9HzcbJyw5UB3qGyMuGzw1WDhKNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqO','lMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNuhjVCgvYDhKGiG','y29UC3qGzgv0ywLSuxvLCNKGpsbG','cGOGicaGy29UC29Szs5SB2COj0nHBgn1Bgf0zwqGDg90ywXZoICSihSkicaGicaGDg90ywXFAxrLBxm6igrHDgeUDg90ywXFAxrLBxmScIaGicaGihrVDgfSx3f0EtOGzgf0ys50B3rHBf9XDhKScIaGicaGihrVDgfSx2fTB3vUDdOGzgf0ys50B3rHBf9HBw91BNqkicaGih0PoWOGicaG','lY8Gv0fstKLorZOGAgvHzgvYq2fSy3vSyxrPB25ZlNrVDgfSx2fTB3vUDcbZA2LWCgvKimoI4OkS4OcDig5Vihf0EsbMAwvSzcbJB25MAwD1CMvK','cIaGica','jYWkicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicb9cIaGicaGih07cIaGicb9cGOGicaGlY8GugfUz2DPBcbTB2rLBcbJB21WB3nPDguGDxbKyxrLig1LDgHVzaOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','DxbSB2fKq29UzMLN','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','BNvTyMvY','qxnWyvG','AxrLBxm','zw50CMLLCW','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtkqOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLksb7cIaGicaGignVBNn0ihnJB3bLq2HLy2SGpsbHD2fPDca','BwfZDgvYrgv0ywLS','ignVBxbVC2L0zsbKyxrHjYWkicaGicaGzgv0ywLSCZOGChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCGpYbLCNjVCI5TzxnZywDLidOGDw5KzwzPBMvKlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktSkcG','id0Gke51BwjLCIHPDgvTlG','l2nYzwf0zsaTie1LBMfTyMfOA2fUigrHDgeG','mtGZmMfUDNPRqG','jYbMCM9Tia','laOGicaGicb1CgXVywrdB25MAwC6ia','zw5HyMXLza','zgv0zwn0vgv4DenVBhvTBG','Aw5MBW','laOGicaGicbPBxbVCNrdB25MAwC6ia','jY50B0XVD2vYq2fZzsGPksb7cIaGicaGicaGicbJB250Aw51ztSGlY8GChjPBwfYEsbRzxKGC3vKywGGywrHcIaGicaGicaGFqOkicaGicaGicaVlYbdAgvJAYbQAwTHigfKysbtuuWGzxHWCMvZC2LVBIbKzw5Nyw4GywXPyxmGkg1LBMDNDw5HA2fUieftkqOGicaGicaGignVBNn0igfSAwfZuMvNzxGGpsbUzxCGuMvNrxHWkcCOlISPxfXZk2fZxfXZkYHCxhCRksqNlcaNAsCPoWOGicaGicaGignVBNn0igfSAwfZtwf0y2GGpsbJB2X1Bw4UBwf0y2GOywXPyxnszwDLEcK7cIaGicaGicaGAwyGkgfSAwfZtwf0y2GPihSkicaGicaGicaGignVBNn0igv4ChjLC3nPB24GpsbHBgLHC01HDgnOwZfDlNrYAw0OktSkicaGicaGicaGignVBNn0igfSAwfZid0GywXPyxnnyxrJAfSYxs50CMLTkcK7cIaGicaGicaGicbZzwXLy3rdBgf1C2uGkZ0GycWGjhTLEhbYzxnZAw9UFsbbuYaKE2fSAwfZFwa7cIaGicaGicaGicb0zxH0rMLLBgqGpsbHBgLHCZSkicaGicaGicaGigfSAwfZrMLLBgqGpsbHBgLHCZSkicaGicaGicaGigjYzwfRoYaVlYbNDw5HA2fUihLHBMCGCgvYDgfTysbZzwjHz2fPihrLEhqGzMLLBgqkicaGicaGicb9cGOGicaGicaGic8VienOzwnRigPPA2eGC2LTCgXLigzPzwXKig5HBwukicaGicaGicbPzIaODMfSAwruzxH0rMLLBgrZlMLUy2X1zgvZkgnVBhvTBIKGFhWGy29SDw1Uid09psaN','iJOGEWOGicaGicaGicaGicaIzMLLBgqXiJOGiNzHBhvLmsiScIaGicaGicaGicaGicjMAwvSzdiIoIaIDMfSDwuYiIWkicaGicaGicaGicaGiG','icH3AxrOigrLDgfPBcbPDgvTCYK','id0GjW','jhT3AgvYzvjLC3vSDc5ZCwX9','zgv0ywLSq29UzMLN','ieforca','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtkqOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLicyMihjLC3vSDc5KyxrHicyMihjLC3vSDc5KyxrHlMXLBMD0Aca+idaPihSkicaGicaGy29UC3qGCMvJB3jKid0GCMvZDwX0lMrHDgfBmf07cIaGicaGigLMicHYzwnVCMrBCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1UxsaHpt0GDw5KzwzPBMvKicyMcIaGicaGicaGicbtDhjPBMCOCMvJB3jKw3jLCs5FCMvXDwvZDfnJB3bLlMnVBhvTBL0Pice9psbtDhjPBMCOCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuPksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda0ks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGicbTzxnZywDLoIaN','lMDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkg1VzgLMAwvKqM9KEsK7cGOGicaGicaGignVBNnVBguUBg9NkgbtDgf0AwmGBg9VA3vWihDPDgGGC2vSzwn0l29YzgvYihjLC3vSDhm6icr7BgLZDc5Szw5NDgH9ihjLy29YzhmGzM91BMrGktSkicaGicaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGicaGignVDw50oIbSAxn0lMXLBMD0AcWkicaGicaGicaGigrHDge6igXPC3qScIaGicaGicaGicbZzwXLy3rLzfrHzZOGC2vSzwn0zwruywCScIaGicaGicaGicbXDwvYEtOGBw9KAwzPzwrcB2r5laOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFsbLBhnLihSkicaGicaGicaVlYbhDw5HA2fUig1VzgvSihvUDhvRig1LBMrHCgf0A2fUigrHDgeGzgvUz2fUig1LDgHVzcbSyw1HcIaGicaGicaGy29UC3qGBgLZDca9igf3ywL0ia','id0G','AgvHzgvYq2fSy3vSyxrPB25Z','lMfKzerHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4DcK7cIaGicaGicaGBMv3rgf0ysa9ihjLC3bVBNnLrgf0ytSkcIaGicaGicaGy29UC29Szs5SB2COj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbjtLnfuLqGy29TCgXLDgvKihn1y2nLC3nMDwXSEsb3AxrOigv2zw50CYCPoWOGicaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicaGignVBNnVBguUzxjYB3iOj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbjtLnfuLqGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicb9igvSC2uGEWOGicaGicaVlYbgywXSyMfJAZOGz3vUywTHBIbTB2rLigXHBweGDgfUCgeGzxzLBNrZicH0zxrHCcbWCM9WywDHC2KGCMvXDwvZDeLKihvUDhvRieXPDMuGu3LUyYKkicaGicaGDhj5ihSkicaGicaGicbYzxnWB25ZzurHDgeGpsbHD2fPDca','iezst00GjhT0AgLZlNDYAxrLu291CMnLFsbxsevsrsaKE3DOzxjLq2XHDxnLFwa7cIaGicaGignVBNn0igHLywrLCLjLC3vSDca9igf3ywL0ignSAwvUDc5XDwvYEsHOzwfKzxjrDwvYEsWGCgfYyw1ZktSkcIaGicaGigLMicHOzwfKzxjszxn1BhqUCM93CY5Szw5NDgGGpt09idaPihSkicaGicaGicb0AhjVDYbUzxCGrxjYB3iOj1jLy29YzcbUB3qGzM91BMqNktSkicaGicaGFqOkicaGicaGy29UC3qGAgvHzgvYuhjPBwfYEuTLEvzHBhvLid0GAgvHzgvYuMvZDwX0lNjVD3nBmf1BjW','cIaGicaVlYa9pt0Gs0fgs0eGufvcteLtsdOGvvbeqvrfievwru5uid09pqOGicaGlY8Gq2HLy2SGyM90AcbYDw50Aw1LigvUDIaOs0fgs0fFru5bqKXfrcKGyw5KihbHEwXVywqGy29UzMLNcIaGicbJB25ZDcbRywzRyvj1BNrPBwvfBMfIBgvKvxbKyxrLid0GChjVy2vZCY5LBNyUs0fgs0fFru5bqKXfrca9pt0Gj3rYDwuNoWOGicaGAwyGkgTHzMTHuNvUDgLTzuvUywjSzwrvCgrHDguGjIyGA2fMA2ftzxj2AwnLicyMigTHzMTHq29UzMLNicyMigTHzMTHq29UzMLNlMvUywjSzwqGjIyGA2fMA2fdB25MAwCUChvIBgLZAe9UicyMigTHzMTHq29UzMLNlNb1yMXPC2HpBI51CgrHDguPihSkicaGicaGA2fMA2ftzxj2AwnLlNb1yMXPC2HvCgrHDguOcIaGicaGicaGjW','AxnbCNjHEq','cIaGicaVlYbwywXPzgfZAsbKzxrHAwWGAxrLBxmGDw50DwSGBwfZDgvYlwrLDgfPBcaOB3bZAw9UywWGDw50DwSGDxbKyxrLkqOGicaGlY8Gvw50DwSGDxbKyxrLq29TCg9ZAxrLlcbKzxrHAwWGAxrLBxmGyMvYDxbHig9IAMvJDcbKzw5Nyw4GE2LUC2vYDdOGw10SihvWzgf0ztOGw10SigrLBgv0ztOGw119cIaGicbPzIaOzgf0ys4','icaGicaGjW','z2vUzxjHDgvK','zM9YrwfJAa','Cxr5rMLLBgq','cIaGicaVlYbdzwSGyxbHA2fOihbYAw1HCNKGA2v5igfKywXHAcbvvuLeihLHBMCGDMfSAwqGkgPPA2eGChjPBwfYEsbRzxKGywrHBgfOicDPzcCPcIaGicbJB25ZDcb1DwLKuMvNzxGGpsaVxLSWltLHlwzDEZH9lvSWltLHlwzDEZr9lvSXltvDwZaToweTzL17m30TwZG5ywjDwZaToweTzL17m30TwZaToweTzL17mtj9jc9PoWOGicaGy29UC3qGAxnwywXPzfvvsuqGpsbWCMLTyxj5s2v5id09psaNAwqNicyMihv1AwrszwDLEc50zxn0khjLCs5IB2r5w3bYAw1HCNLlzxLDktSkcIaGicaVlYbwywXPzgfZAsbKyxrHigrLBMDHBIbTB2rLBcbQAwTHihrLCNnLzgLHcIaGicbPzIaODhLWzw9Mia','l3vWzgf0zsaTie1LBMD1CgrHDguGzgf0ysa','mZiXnJbuB3rRB2m','iJOGEWOGicaGicaGicaGicaI','ihX8igL0zw0UBMfTzsb8FcbPDgvTlMnVzguGFhWGAxrLBs5KzxnJCMLWDgLVBIb8FcaNjWOGicaGicb9ksK7cGOGicaGicaVlYbdywnOzsb0AguGCMvZDwX0icHPzIbLBMfIBgvKkqOGicaGicbHD2fPDcb0AgLZlNnLDenHy2HLzeXVB2T1CcHJywnOzu9WDgLVBNmSihjLC3vSDcWGj2zPBhrLCICPoWOkicaGicaGCMv0DxjUihjLC3vSDdSkcIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbNzxrmB29RDxbeyxrHv2L0AezPBhrLCIaO','turSAMy','lY8Gu2TPCcbhru5fuKfuruqGquXxqvLtignVBhvTBNmkicaGicaGicaGigLMicHNzw5LCMf0zwrgAwvSzhmUAw5JBhvKzxmOA2v5ksKGy29UDgLUDwu7','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGjW','jYWkicaGicaGicaGihnLCNzPy2vZoIb7FsWkicaGicaGicaGigfKzgL0Aw9UywXdB250zxH0oIb7cIaGicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8ihjLCs5IB2r5lNvWzgf0zwrFyNKGFhWGj3n5C3rLBsCScIaGicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGicaGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcWkicaGicaGicaGicaGlY8GsLDuigzVCNDHCMrPBMCGkeXHEwvYideGuKXtktOGqxv0Ag9YAxPHDgLVBIbOzwfKzxiGzgfYAsbYzxf1zxn0igfZBgKkicaGicaGicaGicaGlY8GzgKTzM9YD2fYzcbRzsb3B3jRzMXVDYbOB29RignHBgWGywDHCIbLBMrWB2LUDcb0DwP1yw4GEwfUzYbWDw55yqOGicaGicaGicaGicaVlYbYzxf1zxn0u2nVCguGywT0AwyGDgv0yxaGBwvUzxjPBweGCMvXlNvZzxiGzgvUz2fUihnJB3bLihLHBMCGC2fTys4kicaGicaGicaGicaGlY8Gu2vSywX1igrPlxnLDcaOyNvRyw4GA29UzgLZAw9UywWGCgfKysbWyxLSB2fKlNjLCxvLC3rty29WzsKGA2fYzw5HcIaGicaGicaGicaGic8VigHVB2SGvvjmihr1ANvHBIbTDw5NA2LUihb1BNLHihjLCxvLC3rty29WzsbZzw5KAxjPihDHBgf1ChvUig1VzhvSzqOGicaGicaGicaGicaVlYbZDw1IzxiGDgLKywSUcIaGicaGicaGicaGigf1DgHizwfKzxi6ihjLCs5OzwfKzxjZlMf1DgHVCML6yxrPB24GFhWGBNvSBaOGicaGicaGicaGFqOGicaGicaGih07cGOGicaGicaGic8VieLUAMvJDcbZzxj2AwnLCYbQAwTHihrLCNnLzgLHcIaGicaGicaGDhj5ihSkicaGicaGicaGignVBNn0ihSGCMvZB2X2zvnLCNzPy2vZih0GpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl3v0AwXZl3nLCNzPy2uTCMvZB2X2zxiNktSkicaGicaGicaGigv2zw50q29UDgv4Dc5Zzxj2AwnLCYa9ihjLC29SDMvtzxj2AwnLCYGPoWOGicaGicaGih0Gy2f0y2GGkguPihSkicaGicaGicaGic8VifnLCNzPy2uGCMvZB2X2zxiGB3bZAw9UywWkicaGicaGicb9cGOGicaGicaGihjLC3vSDca9igf3ywL0ia','C2XPy2u','cIaGicaVlYbnB2rLBcbTzxrHzgf0yqOGicaGDgHPCY5TB2rLBe1LDgfKyxrHid0GEWOGicaGicbLBMrWB2LUDe5HBwu6icC','D2HLCMvdBgf1C2uGkZ0GycbbtKqGvvbqrviOjhTZzwfYy2HcEx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPydS','rxHWzwn0zwqGzxHWyw5KzwqGu1fmihn0CMLUzY4Gq2HLy2SGugf5Bg9HzfbYB2nLC3nVCI5WCM9JzxnZrMLSzvjLzMvYzw5JzxmGzMXVDY4','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicaVlYbfEhrYywn0igHLywrLCIbKyxrHihnHAMeGkgv4y2X1zguGzgv0ywLSksb1BNr1AYb2ywXPzgf0Aw9UcIaGicaGignVBNn0igHLywrLCKrHDgfgB3jwywXPzgf0Aw9Uid0GEYaUlI5KyxrHih07cIaGicaGia','CMvHzenVBxbVC2L0zq','DxbKyxrLq29TCg9ZAxrL','oWOGicaGicbJB25ZDcbKzwzHDwX0u2vSzwn0id0GBg9VA3vWq29UzMLNicyMigXVB2T1CenVBMzPzY5OyxndDxn0B21uzxH0cIaGicaGicaGpYbBiMLKiIWGBg9VA3vWq29UzMLNlNrLEhrgAwvSzf0kicaGicaGica6ifSIAwqIlcaI','cI8VieDfvcaVyxbPlW','id0GjdeGt1jerviGqLKGBgLUzv9UDw1IzxjGoW','AvPguNe','jZSkicaGicaG','jZSkcIaGicaGic8VienVBMzPz3vYyxrPB24GB3b0Aw9UCWOGicaGicbJB25ZDcbSB2DNAw5Nrw5HyMXLzca9ignVBMzPzY5SB2DNAw5Nice9psbMywXZztSkicaGicaGy29UC3qGyxbPs2v5uMvXDwLYzwqGpsaHiwnVBMzPzY5RzxK7cGOGicaGicbSB2DNzxiUAw5MBYH7cIaGicaGicaGzxzLBNq6icDTB2r1BgvFC3rHCNrPBMCNlaOGicaGicaGig1VzhvSztOGBw9KDwXLtMfTzunHCgL0ywXPEMvKlaOGicaGicaGihbVCNqScIaGicaGicaGy29YCZOGChjVy2vZCY5LBNyUq09su19ftKfcteveice9psaNzMfSC2uNlaOGicaGicaGigHLBg1LDdOGChjVy2vZCY5LBNyUsevmtuvux0voqujmruqGpt09icD0CNvLjYWkicaGicaGicbSB2DNAw5NoIbSB2DNAw5Nrw5HyMXLzcWkicaGicaGicbHCgLlzxK6igfWAuTLEvjLCxvPCMvKcIaGicaGih0SigbtDgfYDgLUzYaKE21VzhvSzu5HBwvdyxbPDgfSAxPLzh0GBw9KDwXLycK7cGOGicaGicaVlYbdt1jtig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbdt1jtx0voqujmruqGzgfUienpuLnFt1jjr0LouYbKAsaUzw52kqOGicaGicbHChaUDxnLkgnVCNnnAwrKBgv3yxjLlM1PzgrSzxDHCMuOksK7cGOGicaGicaVlYbtzwn1CML0EsbOzwfKzxjZig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbiruXnrvrFru5bqKXfrcbKAsaUzw52kqOGicaGicbHChaUDxnLkhnLy3vYAxr5sgvHzgvYCY5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8GsLnptIbWyxjZAw5Nig1PzgrSzxDHCMuGzgvUz2fUigvYCM9YigHHBMrSAw5NcIaGicaGigfWCc51C2uOyM9KEvbHCNnLCI5QC29UkhSkicaGicaGicbSAw1PDdOGjZeWBwiNlaOGicaGicaGihzLCMLMEtOGkhjLCsWGCMvZlcbIDwySigvUy29KAw5Nksa9pIb7cIaGicaGicaGicaVlYbtA2LWihzHBgLKyxrPB24GDw50DwSGzw1WDhKGyNvMzMvYcIaGicaGicaGicbPzIaOyNvMlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGicaGicbYzxr1CM47cIaGicaGicaGicb9cGOGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGsLnptI5WyxjZzsHIDwyPoWOGicaGicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicaGicaGy29UC29Szs5LCNjVCIHGsLnptIbqyxjZzsbfCNjVCIbMCM9Ticr7CMvXlMLWFtOGjhTLCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGicbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDjBNzHBgLKiePtt04GCgf5Bg9HzcCScIaGicaGicaGicaGicaGBwvZC2fNztOGj1rOzsbWyxLSB2fKihnLBNqGAxmGBM90igeGDMfSAwqGsLnptIbMB3jTyxqNlaOGicaGicaGicaGicaGigrLDgfPBhm6igvYCM9YlM1LC3nHz2uScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicaGihrOCM93ig5LDYbfCNjVCIGNsw52ywXPzcbku09ojYK7cIaGicaGicaGicb9cIaGicaGicaGFqOGicaGicb9ksK7cGOGicaGicaVlYbvuKWTzw5JB2rLzcbWyxjZAw5Nig1PzgrSzxDHCMukicaGicaGyxbWlNvZzsHIB2r5ugfYC2vYlNvYBgvUy29KzwqOEWOGicaGicaGigv4DgvUzgvKoIb0CNvLlaOGicaGicaGigXPBwL0oIaNmtbTyICkicaGicaGFsKPoWOkicaGicaGlY8GuMvXDwvZDcbSB2DNAw5Nig1PzgrSzxDHCMuGkfbPBM8TyMfZzwqPcIaGicaGigLMicHSB2DNAw5Nrw5HyMXLzcKGEWOGicaGicaGigfWCc51C2uOkhjLCsWGCMvZlcbUzxH0ksa9pIb7cIaGicaGicaGicaVlYbhzw5LCMf0zsbYzxf1zxn0ieLecIaGicaGicaGicbYzxeUAwqGpsbYzxeUAgvHzgvYC1SNEc1Yzxf1zxn0lwLKj10GFhWGDxvPzhy3kcK7cIaGicaGicaGicbYzxmUC2v0kcDylvjLCxvLC3qTsuqNlcbYzxeUAwqPoWOkicaGicaGicaGic8VienYzwf0zsbZy29WzwqGBg9Nz2vYihvUDhvRihjLCxvLC3qGAw5PcIaGicaGicaGicbYzxeUBg9Nid0Gy3jLyxrLuMvXDwvZDeXVz2DLCIH7cIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKlaOGicaGicaGicaGicbTzxrOB2q6ihjLCs5TzxrOB2qScIaGicaGicaGicaGihbHDgG6ihjLCs5WyxrOlaOGicaGicaGicaGicbPCdOGCMvXlMLWcIaGicaGicaGicb9ktSkcIaGicaGicaGicaVlYbdyxb0DxjLihn0yxj0ihrPBwukicaGicaGicaGignVBNn0ihn0yxj0vgLTzsa9ihbYB2nLC3mUAhj0Aw1LkcK7cGOGicaGicaGicaGlY8Gtg9NihjLC3bVBNnLigTLDgLRysbZzwXLC2fPcIaGicaGicaGicbYzxmUB24Oj2zPBMLZAcCSicGPid0+ihSkicaGicaGicaGicaGy29UC3qGw3nLy29UzhmSig5HBM9ZzwnVBMrZxsa9ihbYB2nLC3mUAhj0Aw1Lkhn0yxj0vgLTzsK7cIaGicaGicaGicaGignVBNn0igr1CMf0Aw9UtxmGpsbWyxjZzuzSB2f0kcHZzwnVBMrZicOGmtaWmcaRig5HBM9ZzwnVBMrZic8Gmwu2ks50B0zPEgvKkdiPktSkicaGicaGicaGicaGBg9NuMvXDwvZDcHYzxeSihjLCYWGzhvYyxrPB25nCYK7cIaGicaGicaGicb9ktSkcIaGicaGicaGicbUzxH0kcK7cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8ViefqssblzxKGDMfSAwrHDgLVBIbTAwrKBgv3yxjLicHJB25ZDgfUDc10Aw1LignVBxbHCMLZB24PcIaGicaGigLMicHHCgLlzxLszxf1AxjLzcKGEWOGicaGicaGignVBNn0ignYExb0BYa9ihjLCxvPCMuOj2nYExb0BYCPoWOGicaGicaGignVBNn0igv4CgvJDgvKs2v5id0GqNvMzMvYlMzYB20Oy29UzMLNlMTLEsK7cGOGicaGicaGigfWCc51C2uOjY9HCgKNlcaOCMvXlcbYzxmSig5LEhqPid0+ihSkicaGicaGicaGignVBNn0igfWAuTLEsa9ihjLCs5OzwfKzxjZwYD4lwfWAs1RzxKNxtSkicaGicaGicaGigLMicGHyxbPs2v5ksb7cIaGicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmsKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDvBMf1DgHVCML6zwqNlaOGicaGicaGicaGicaGig1LC3nHz2u6icDjBNzHBgLKig9Yig1PC3nPBMCGqvbjieTLEsCScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicb9cIaGicaGicaGicbJB25ZDcbWCM92AwrLzeTLEsa9iej1zMzLCI5MCM9TkgfWAuTLEsK7cIaGicaGicaGicbPzIaOzxHWzwn0zwrlzxKUBgvUz3rOice9psbWCM92AwrLzeTLEs5Szw5NDgGGFhWkicaGicaGicaGicaGicaHy3j5ChrVlNrPBwLUz1nHzMvfCxvHBcHLEhbLy3rLzeTLEsWGChjVDMLKzwrlzxKPksb7cIaGicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmsKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDvBMf1DgHVCML6zwqNlaOGicaGicaGicaGicaGig1LC3nHz2u6icDjBNzHBgLKig9Yig1PC3nPBMCGqvbjieTLEsCScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicb9cIaGicaGicaGicbUzxH0kcK7cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8VifjHDguGBgLTAxrPBMCGBwLKzgXLD2fYzsaOC3rVCMu6ig1LBw9YEsb1BNr1AYbZAw5NBguGBw9KzsWGuMvKAxmGDw50DwSGy2X1C3rLCIbTB2rLkqOGicaGicbYyxrLtgLTAxrLCI5ZzxrtDg9YzsHJB25MAwCUy2X1C3rLCIa/icDYzwrPCYCGoIaNBwvTB3j5jYK7cIaGicaGigfWCc51C2uOjY9HCgKNlcbYyxrLtgLTAxrLCI5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8GswrLBxbVDgvUy3KGBwLKzgXLD2fYzsaOChjVDgvJDhmGBxv0yxrPB24Gzw5KCg9PBNrZigzYB20GzhvWBgLJyxrLigv4zwn1DgLVBIKkicaGicaGAwyGkhbYB2nLC3mUzw52lKLeru1qt1rftKnzx0voqujmruqGpt09icD0CNvLjYKGEWOGicaGicaGigfWCc51C2uOjY9HCgKNlcbPzgvTCg90zw5JEu1PzgrSzxDHCMuUBwLKzgXLD2fYzsGPktSkicaGicaGFqOkicaGicaGlY8GqM9KEsbVChrPB25Zig1PzgrSzxDHCMuGkgv4DhjHy3qGE2rHDgeSig9WDgLVBNn9igzVCM1HDcbKyxjPihjLCxvLC3qGyM9KEsKkicaGicaGyxbWlNvZzsGNl2fWAsCSigjVzhLpChrPB25ZtwLKzgXLD2fYzs5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8Gqxv0BY1SB2fKihbSDwDPBIaOAMLRysbHzgePcIaGicaGignVBNn0ig1VzhvSzu5HBwuGpsaN','zgf0yxrHyMXLC1DOzxjL','jYWkicaGicaGicaGigHLywX0AenOzwnRoIbGAhr0CdOVlYr7zgLZCgXHEuHVC3r9oIr7Cg9YDh0VyxbPlW','cIaGicbJB25ZDcb2ywXPzezPzwXKCYa9ifSkicaGicaG','cIaGicaGicaGlY8GqNvPBgqGzgv0ywLSieLou0vsvcbXDwvYEqOGicaGicaGignVBNn0igrLDgfPBezPzwXKCYa9ifTDoWOGicaGicaGignVBNn0igrLDgfPBfzHBhvLCYa9ifTDoWOGicaGicaGignVBNn0igrLDgfPBfbSywnLAg9SzgvYCYa9ifTDoWOGicaGicaGigXLDcbKzxrHAwXqBgfJzwHVBgrLCKLUzgv4id0GmtSkcIaGicaGicaGzM9YicHJB25ZDcbBA2v5lcb2ywX1zv0GB2yGt2jQzwn0lMvUDhjPzxmOAxrLBsKPihSkicaGicaGicaGia','ywr2yw5JzwrrDwvYAwvZ','cIaGlYOQcIaGicOGtwvUzgfWyxrRyw4GzgvMAw5PC2KGA29SB20GEwfUzYbKyxbHDcbKAwnHCMKkicaGkIbaCMv0DxjUCYb7qxjYyxL9ieTVBg9TihLHBMCGzgfWyxqGzgLJyxjPcIaGicOVcIaGz2v0u2vHCMnOywjSzunVBhvTBNmOksb7cIaGicbYzxr1CM4G','Cg9W','oMaSigvYCI5TzxnZywDLktSkicaGih0PoWOGih0kFsbJyxrJAcaOzsKGEWOGigLMicHOyxndB21WB25LBNrZksb7cIaGicaVlYbdB21WB25LBNrZigrPA29UzMLNDxjHC2KGDgfWAsbLBMDPBMuGz2fNywWGBg9HzcddOUkcRokaNsbPBMKGzxjYB3iSigj1A2fUig9WDgLVBMfScIaGicbJB25ZB2XLlMvYCM9YkgbduKLusunbtdOGq29TCg9Uzw50igvUz2LUzsbMywLSzwqGDg8GBg9HzcbMB3iG','oWOkicaGicaGBgv0ihDOzxjLq29UzgL0Aw9UCYa9ifTDoWOGicaGicbSzxqGCgfYyw1Zid0Gw107cIaGicaGigXLDcbWyxjHBuLUzgv4id0GmtSk','iIWGiM9WzxjHDg9YiJOGiMXPA2uIlcaIDMfSDwuIoIaIjvbVCNrHBcuIih0ScIaGicaGicaGicaGicaGEYaIA2v5iJOGiG','DhLWzq','lMfKANvZDerHDgeOCMvXlMjVzhKSigfKANvZDenVBMzPzW','tw9KzwW','l2XVB2T1CcaTie1LBMrHCgf0A2fUigrHDgeG','cIaGicaVlYbwywXPzgfZAsbWCMLTyxj5igTLEqOGicaGy29UC3qGChjPBwfYEuTLEsa9icC','jYWkicaGicaGicaGihrHyMXLtMfTztOGjW','z3DSAhq','DxbKyxrL','jYWkicaGicaGicaGigfKzgL0Aw9UywXdB250zxH0oIb7cIaGicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8icDZExn0zw0NlaOGicaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30ScIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicaGih0kicaGicaGicb9oWOkicaGicaGicbYzxnWB25ZzurHDgeGpsbHD2fPDca','iIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0ScIaGicaGicaGicaIC2vSzwn0iJOGwYjMAwvSzdeIlcaIzMLLBgqYiL0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifzHBgLKyxnPihDOzxjLlMTLEsbKyw4GD2HLCMuUDMfSDwukicaGigLMicGHCMvXlMjVzhKUD2HLCMuUA2v5ihX8ihjLCs5IB2r5lNDOzxjLlNzHBhvLid09psb1BMrLzMLUzwqGFhWGCMvXlMjVzhKUD2HLCMuUDMfSDwuGpt09ig51BgWGFhWGCMvXlMjVzhKUD2HLCMuUDMfSDwuGpt09icCNksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGBwvZC2fNztOGj1DOzxjLigTLEsbHBMqGDMfSDwuGyxjLihjLCxvPCMvKjYWkicaGicaGicbLEgfTCgXLoIb7cIaGicaGicaGicaID2HLCMuIoIb7icjRzxKIoIaI','jWOGicaGicaGih0PoWOGicaGicb9ktSkcIaGicaGic8VieXVywqGzgfUihjLz2LZDgvYigvUzhbVAw50ig1VzhvSzxmkicaGicaGlY8GqMLUyxj5lwnVBxbHDgLIBgu6ifvZzsb3B3jRAw5NigrPCMvJDg9YEsbPBNn0zwfKig9Mif9FzgLYBMfTzqOGicaGicbJB25ZDcbPC0j1BKnVBxbPBgvKid0GDhLWzw9Miej1BIaHpt0Gj3vUzgvMAw5LzcCGjIyGixbYB2nLC3mUyxjNDLSXxtSkicaGicaGy29UC3qGz2v0v29YA2LUz0rPCIa9icGPid0+ihSkicaGicaGicaVlYbdAgvJAYbPzIbYDw5UAw5NigfZignVBxbPBgvKigjPBMfYEqOGicaGicaGigLMicHPC0j1BKnVBxbPBgvKksb7cIaGicaGicaGicaVlYbsDw5UAw5NigfZignVBxbPBgvKigjPBMfYEtOGDxnLigrPCMvJDg9YEsb3AgvYzsbIAw5HCNKGAxmGBg9JyxrLzaOGicaGicaGicaGCMv0DxjUihbHDgGUzgLYBMfTzsHWCM9JzxnZlMv4zwnqyxrOktSkicaGicaGicb9igvSC2uGEWOGicaGicaGicaGlY8GuNvUBMLUzYbHCYboB2rLlMPZl0j1BIbZy3jPChq6if9FzgLYBMfTzsbPCYbHBhjLywr5igLUihnYyY9TB2r1BgvZcIaGicaGicaGicaVlYbtBYb3zsbQDxn0ig5LzwqGDg8GywrKihrOzsbTB2r1BguGBMfTzqOGicaGicaGicaGCMv0DxjUif9FzgLYBMfTztSkicaGicaGicb9cIaGicaGih07cGOGicaGicbJB25ZDcb3B3jRAw5NrgLYid0Gz2v0v29YA2LUz0rPCIGPoWOGicaGicaVlYbgB3iGy29TCgLSzwqGyMLUyxj5oIb3B3jRAw5NrgLYigLZigjPBMfYEsbKAxjLy3rVCNKSig5LzwqGzNvSBcbWyxrOihnYyY9TB2r1BgvZl21VzhvSzu5HBwukicaGicaGlY8GrM9YihnJCMLWDdOGD29YA2LUz0rPCIbPCYbHBhjLywr5ihnYyY9TB2r1BgvZlYWGANvZDcbHzgqGBw9KDwXLtMfTzqOGicaGicbJB25ZDcbTB2r1BgvZrgLYid0GAxncDw5dB21WAwXLzaOGicaGicaGid8GCgf0Ac5QB2LUkhDVCMTPBMDeAxiSicDZCMmNlcaNBw9KDwXLCYCSicC','BwfZDgvYrgv0ywLSlMrLDgfPBenVBMzPzY5KzxrHAwXrDwvYEq','qu5eicG','zxHWB3j0','cIaGicaVlYblAxjPBsbYzxnWB25ZzqOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','cNjVDxrLCI5WB3n0kcCVy3jLyxrLlwnVBxbVC2L0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZB2XLlMXVzYGNuMvXDwvZDcbIB2r5ia','ywDNCMvNyxrLq29UzMLN','mta2BxrYug1Z','zMLSDgvYCW','cIaGicb9oWO','wMTIzwC','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGChjPBwfYEuTLEsWGDMfSDwu6ihjLCs5IB2r5w3bYAw1HCNLlzxLDih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGjW','jYWkicaGicaGBw9KDwXLtMfTztOGjW','lNzHBgLKyxrLrgf0ysa9pt0Gj2z1BMn0Aw9UjYKGEWOGicaGicaVlYbfEhrYywn0igHLywrLCIbKyxrHihnHAMeGkgv4y2X1zguGzgv0ywLSigfYCMf5ksb1BNr1AYb2ywXPzgf0Aw9UcIaGicaGignVBNn0igHLywrLCKrHDgfgB3jwywXPzgf0Aw9Uid0GEYaUlI5KyxrHih07cIaGicaGia','DvviEKm','txLjuhC','ywrQDxn0q29UzMLN','A3DzCwG','A2fMA2e','v0HfuKuG','lI4UjYK7cGOGicaGicaVlYbhzxqGChjPBwfYEsbRzxKGDMfSDwuGDw50DwSGzgvSzxrLignOAwXKihjLy29YzhmkicaGicaGy29UC3qGAgvHzgvYuxvLCNKGpsbGu0vmrunuia','jYWkicaGicaGDgfIBgu6ig1VzgvSsw5MBY50ywjSzsWkicaGicaGzMLLBgrZoIbTB2rLBeLUzM8UzMLLBgrZlaOGicaGicbXDwvYEvnVDxjJzxm6ig1VzgvSsw5MBY5XDwvYEvnVDxjJzxmScIaGicaGigfJDgLVBNm6igfJDgLVBNmScIaGicaGigrHDgfIyxnLvhLWztOGj3bVC3rNCMvZjYWkicaGicaGz2vUzxjHDgvKoIaN','lNvWzgf0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0','cIaGicaVlYbwywXPzgfZAsbKyw4GC2fUAxrHC2KGAgvHzgvYigrHDgeGzgvUz2fUignVBNn0CMfPBNqGkhrLCM1HC3vRigHHC2GPcIaGicbPzIaODhLWzw9Mia','Dg9ju09tDhjPBMC','jYWkicaGicaGC2vHCMnOywjSzuzPzwXKCZOGDgHPCY5NzxrtzwfYy2HHyMXLq29SDw1UCYa/ihrOAxmUz2v0u2vHCMnOywjSzunVBhvTBNmOks5TyxaOy29Sid0+ignVBc5Uyw1Lksa6ifTDcIaGicb9oWOGih0','ksb8FcaWoWOGicaGicaGihjLDhvYBIbZDw0GkYaOCxr5icOGChjPy2uPoWOGicaGicb9lcaWktSkicaGih0','jZSkicaGicaGy29UC3qGzM9YzwLNBKTLEsa9icC','ksb8FcaWktS','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0GjZiZnta1jYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdKPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrhvWBgLJyxrLigvUDhj5jYWkicaGicaGicbTzxnZywDLoIaNqsbYzwnVCMqGD2L0Acb0AgLZihzHBhvLigfSCMvHzhKGzxHPC3rZjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGywrQDxn0Aw5Nia','y29Kzq','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','x2LK','igrHDgeGC3vJy2vZC2z1BgX5ihvWzgf0zwqNlaOGicaGicbKyxrHoIbYzxnWB25ZzurHDgeScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbTzw5NDxbKyxrLigrHDgeG','jYK7cG','laOGicaGica','mti5mtC1mZHKrLvoDMm','jYWGjW','oICSigvYCM9YktSkcIaGicbPzIaOzxjYB3iUC3rHDhvZq29Kzsa9pt0GndaZksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmYKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDqCM8GrMvHDhvYzsbszxf1AxjLzcCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb1CgDYywrLoIaNAhr0Chm6lY9Yzxn0zM9Yz2uUzgv2l3bYAwnPBMCNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGigLMicHLCNjVCI5ZDgf0DxndB2rLid09psa0mdaGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGysb2ywXPzcbMAwvSzcCPihX8cIaGicaGicaGzxjYB3iUBwvZC2fNzs5PBMnSDwrLCYGNsw52ywXPzcbHz2DYzwDHDguGzNvUy3rPB24Nksb8FaOGicaGicaGigvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj0LUDMfSAwqGywXPyxmNksb8FaOGicaGicaGigvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj29UBhKGywXSB3DLzcb3AxrOienpvu5ujYKGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUB3qGzgvMAw5LzcbPBIbHz2DYzwDHDguGy29UzMLNjYKGFhWkicaGicaGicbLCNjVCI5TzxnZywDLlMLUy2X1zgvZkcDUBYbQB2LUigrLzMLUAxrPB25ZigzVDw5KjYKPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj1zHBgLKyxrPB24GzxjYB3iNlaOGicaGicaGig1LC3nHz2u6igvYCM9YlM1LC3nHz2uScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigfNz3jLz2f0Aw5Nia','wefstum','iIWGiG','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CY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGBwvZC2fNztOGj1zHBgLKyxrPB24GzMfPBgvKjYWkicaGicaGicaGigvYCM9YCZOGEWOGicaGicaGicaGicbWzxjFCgfNztOGwYDqzxiGCgfNzsbTDxn0igjLigjLDhDLzw4GmsbHBMqGmtaWj10kicaGicaGicaGih0kicaGicaGicb9ktSkicaGicaGFqOGicaGFqOkicaGigLMicHZzwfYy2HwywX1zs5Szw5NDgGGpIaYntuPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbTzxnZywDLoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGigvYCM9YCZOGEWOGicaGicaGicaGC2vHCMnOx3zHBhvLoIbBj1nLyxjJAcb2ywX1zsbTDxn0ig5VDcbLEgnLzwqGmJu1ignOyxjHy3rLCNmNxqOGicaGicaGih0kicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGA29SB20GC2vHCMnOAw5NcIaGicbPzIaOixzHBgLKrMLLBgrZlMLUy2X1zgvZkhnLyxjJAej5ksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGig1LC3nHz2u6icDwywXPzgf0Aw9UigzHAwXLzcCScIaGicaGicaGzxjYB3jZoIb7cIaGicaGicaGicbZzwfYy2HFyNK6ifTGsw52ywXPzcbZzwfYy2GGzMLLBgqUifzHBgLKigzPzwXKCZOGjhT2ywXPzezPzwXKCY5QB2LUkcCSicCPFwbDcIaGicaGicaGFqOGicaGicb9ktSkicaGih0kcIaGicaVlYbcDwLSzcbVChrPB25ZihvUDhvRig1VzgvScIaGicbJB25ZDcbVChrPB25Zid0GEWOGicaGicbZzwfYy2HwywX1ztOGC2vHCMnOvMfSDwuScIaGicaGihnLyxjJAej5oIbZzwfYy2HcEsWkicaGicaGC29YDf9JB2X1Bw5ZoIbZB3j0x2nVBhvTBNmScIaGicaGihDOzxjLoIb3AgvYzsWkicaGicaGC2vSzwn0oIbZzwXLy3qkicaGih07cGOGicaGAwyGkhbHz2LUyxrLksb7cIaGicaGig9WDgLVBNmUCgfNzsa9ihbHz2u7cIaGicaGig9WDgLVBNmUCgvYugfNzsa9ihbLCLbHz2u7cIaGicaGig9WDgLVBNmUB2zMC2v0id0GkhbHz2uGlsaXksaQihbLCLbHz2u7cIaGicb9igvSC2uGEWOGicaGicbVChrPB25ZlMXPBwL0id0GBgLTAxq7cIaGicb9cGOGicaGlY8Gr3vUywTHBIbTB2rLBcb1BNr1AYbTzw5KyxbHDgTHBIbKyxrHigXPC3qkicaGignVBNn0ihjLC3vSDca9igf3ywL0ia','iJOGwWOGicaGicaGicaGicaGihSGiMXPBMvFBNvTyMvYiJOGmsWGiMzPzwXKiJOGiNzHBhvLiIb9laOGicaGicaGicaGicaGihSGiMXPBMvFBNvTyMvYiJOGmIWGiMzPzwXKiJOGiNzHBhvLiIb9cIaGicaGicaGicaGif0kicaGicaGicaGih0kicaGicaGicb9','ihX8icDUzxCGCMvJB3jKj31GktSk','yxvKAxrdB2X1Bw5Z','igzPzwXKCWOGkIbeyxrHyMfZztOGug9ZDgDYzvnrtaOGkI8ky2XHC3mG','cIaQiezPzwXKCZOG','zM9YBxvSyq','oWOGicaGicbSzxqGC2vSzwn0q2XHDxnLid0GjW','iga7cIaGicaGicaGicbWyxjHBxmGpsb3AgvYzvjLC3vSDc5WyxjHBxm7cIaGicaGicaGFsbJyxrJAcaOzsKGEWOGicaGicaGicaGy29UC3qGzxjYB3iGpsbUzxCGrxjYB3iOj0LUDMfSAwqGD2HLCMuGy29UzgL0Aw9UCZOGjYaRiguUBwvZC2fNzsK7cIaGicaGicaGicbLCNjVCI5ZDgf0DxndB2rLid0GndaWoWOGicaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGicaGFqOGicaGicb9cGOGicaGicaVlYbiyw5KBguGC29YDf9JB2X1Bw5ZigPPA2eGywrHcIaGicaGigLMicHVChrPB25ZlNnVCNrFy29SDw1UCYaMjIbbCNjHEs5PC0fYCMf5kg9WDgLVBNmUC29YDf9JB2X1Bw5ZksaMjIbVChrPB25ZlNnVCNrFy29SDw1UCY5Szw5NDgGGpIaWksb7cIaGicaGicaGy29UC3qGB3jKzxjqyxj0CYa9ig9WDgLVBNmUC29YDf9JB2X1Bw5ZlM1HCcHPDgvTid0+ihSkicaGicaGicaGignVBNn0ignVBhvTBIa9igL0zw0Uy29SDw1UoWOGicaGicaGicaGy29UC3qGzgLYzwn0Aw9Uid0GkgL0zw0UzgLYzwn0Aw9UihX8icDbu0mNks50B1vWCgvYq2fZzsGPoWOGicaGicaGicaGAwyGkcfJB2X1Bw4PihjLDhvYBIbUDwXSoWOGicaGicaGicaGAwyGkcf0AgLZlNzHBgLKrMLLBgrZlMLUy2X1zgvZkgnVBhvTBIKGjIyGy29SDw1Uice9psaN','laOGicaGicbYzxf1AxjLzezPzwXKCZOG','jYWkicaGicaGicbVBgreyxrHlaOGicaGicaGihSkicaGicaGicaGihrVCgLJoIbRywzRyunVBMzPzY50B3bPyYb8FcbUDwXSlaOGicaGicaGicaGA2v5rMLLBgq6igTHzMTHq29UzMLNlMTLEuzPzwXKihX8icC','y3jLyxrLzej5','igrHDgeNlaOGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igvYCM9YlM1LC3nHz2uGoIb1BMrLzMLUzwqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoWOk','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFq','AM9PBG','oIbTDxn0igjLigzHBhnLlcbUDwXSlcbVCIbVyMPLy3q','igXPC3qGzgf0ysCScIaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GzxjYB3iUBwvZC2fNzsa6ihvUzgvMAw5LzcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0kFsK7cGO','cIaGicaVlYbwywXPzgfZAsbKyxrHigrLBMDHBIbTB2rLBcbQAwTHihrLCNnLzgLHcIaGicbPzIaODhLWzw9Mia','A2v5CW','zMLLBgrqB2XPy3K','jYWkicaGicaGicbJB25ZDhjHAw50CZOG','ksb7cIaGicaGigLMicH0ExbLB2yGzgf0ys4','nte4mJe1mNnzAMT6qW','cIaGicaVlYbgBgfNihvUDhvRihnLBgyTzg9JDw1LBNrPBMCGqvbjicHLBMrWB2LUDcaVAw5MBYKkicaGihrOAxmUAgfZvMLLD1f1zxj5id0G','jZSkicaGicaGAwyGkhnLyxjJAfzHBhvLicyMihnLyxjJAfzHBhvLlNrYAw0OksaHpt0GjYCPihSkicaGicaGicbJB25ZDcbLC2nHCgvKu2vHCMnOvMfSDwuGpsbZzwfYy2HwywX1zs5YzxbSywnLkc8Nl2CSiciNjYiPoWOGicaGicaGignVBNn0igXPA2vwywX1zsa9igaLjhTLC2nHCgvKu2vHCMnOvMfSDwv9jwa7cIaGicaGicaG','jYWkicaGicaGicbXDwvYEtOGCMvXlMjVzhKScIaGicaGicaGCMvZDwX0q291BNq6ihjLC3vSDc5KyxrHid8GCMvZDwX0lMrHDgeUBgvUz3rOidOGmcWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9oWOGicaGFqOkicaGihjLDhvYBIbYzxmUANnVBIH7cIaGicaGic4UlNjLC3vSDcWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbZywf0ig1LBMrHCgf0A2fUigrHDgeG','lNvWzgf0zsiGBxvZDcbIzsbHBIbHCNjHEsCScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cIaGicaGigLMicHVCgvYyxrPB25ZlMrLBgv0zsaMjIaHqxjYyxKUAxnbCNjHEsHVCgvYyxrPB25ZlMrLBgv0zsKPihSkicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGicbTzxnZywDLoIaNuhjVCgvYDhKGiG','cIaGicOGqhbHCMfTihTpyMPLy3r9ig9WDgLVBNmGlsbrDwvYEsbVChrPB25ZcIaGicOGqhjLDhvYBNmGE3n0CMLUz30Gu1fmihf1zxj5igrHC2fYihvUDhvRia','ksbPCYbYzxf1AxjLzcbMB3iGDxbKyxrLjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','cIaQifrHyMXLoIa','zM9YzwLNBKTLEq','ihX8icfbCNjHEs5PC0fYCMf5kgrHDgeU','yM9VBgvHBG','l3jLywqTy29TCg9ZAxrLoICSiePtt04UC3rYAw5NAwz5khjLCs5IB2r5lcbUDwXSlcaYksK7cGOGicaGlY8GvMfSAwrHC2KGCMvXDwvZDcbIB2r5cIaGicbPzIaOixjLCs5IB2r5ihX8ie9IAMvJDc5RzxLZkhjLCs5IB2r5ks5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsb3AgvYzsbJBgf1C2ukicaGigLMicGHCMvXlMjVzhKUD2HLCMuPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6icDqCM9Wzxj0Esb3AgvYzsbPCYbYzxf1AxjLzcCScIaGicaGicaGzxHHBxbSztOGEWOGicaGicaGicaGiNDOzxjLiJOGw3SGiMTLEsi6icjMAwvSzf9Uyw1LiIWGiNzHBhvLiJOGiMzPzwXKx3zHBhvLiIb9xqOGicaGicaGih0ScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGzM9YBwf0ihDOzxjLcIaGicbPzIaOiufYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPicyMicfYzxeUyM9KEs53AgvYzs5JB25KAxrPB25Zksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGD2HLCMuGzM9YBwf0jYWkicaGicaGicbLEgfTCgXLoIb7cIaGicaGicaGicaID2HLCMuIoIbBcIaGicaGicaGicaGihSGiMTLEsi6ici','zgv0ywLSvgfIBgu','zxHWB3j0CW','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jZOkicaGicaGicaGigLMicHMAwX0zxjwywX1zsa9pt0Gj2n1C3rVBv9Yyw5NzsCGjIyGB3b0Aw9UC1TMAwX0zxiUC3rHCNrgAwvSzf0GjIyGB3b0Aw9UC1TMAwX0zxiUzw5KrMLLBgrDksb7cIaGicaGicaGicaGignVBNn0ihn0yxj0rgf0zsa9ig9WDgLVBNnBzMLSDgvYlNn0yxj0rMLLBgrDoWOGicaGicaGicaGicbJB25ZDcbLBMreyxrLid0GB3b0Aw9UC1TMAwX0zxiUzw5KrMLLBgrDoWOGicaGicaGicaGicbJB25KAxrPB25ZlNb1C2GOycr7zMLSDgvYlNrHCMDLDezPzwXKFsbcrvrxruvoicCKE3n0yxj0rgf0zx0NieforcaNjhTLBMreyxrLFsDGktSkicaGicaGicaGih0kicaGicaGicaGigjYzwfRoWOkicaGicaGicbJyxnLicD0zxH0jZOkicaGicaGicaGigLMicHMAwX0zxiUDgfYz2v0rMLLBgqPihSkicaGicaGicaGicaGy29UC3qGzxnJyxbLzfzHBhvLid0GzMLSDgvYvMfSDwuUDg9tDhjPBMCOks5YzxbSywnLkc8Nl2CSiciNjYiPoWOGicaGicaGicaGicbJB25KAxrPB25ZlNb1C2GOyfvquevskcr7zMLSDgvYlNrHCMDLDezPzwXKFsKGteLlrsbvufbfuIGNjsr7zxnJyxbLzfzHBhvLFsuNkwaPoWOGicaGicaGicaGFqOGicaGicaGicaGyNjLywS7cGOGicaGicaGignHC2uGj251BwjLCIC6cIaGicaGicaGicbPzIaOzMLSDgvYlNrHCMDLDezPzwXKicyMicfPC05HtIHMAwX0zxjwywX1zsKPihSkicaGicaGicaGicaGy29UzgL0Aw9UCY5WDxnOkgaKE2zPBhrLCI50yxjNzxrgAwvSzh0GpsaKE2zPBhrLCLzHBhvLFwaPoWOGicaGicaGicaGFqOGicaGicaGicaGyNjLywS7cIaGicaGih0kicaGih0kcIaGicbYzxr1CM4Gy29UzgL0Aw9UCY5Szw5NDgGGpIaWid8GyfDirvjficr7y29UzgL0Aw9UCY5QB2LUkcCGqu5eicCPFwaGoIaNjZSkicb9','cGOGicaGlY8GqNvPBgqGzxzLBNrdB250zxH0ihvUDhvRignVBxbVC2L0zsbOB29RCYaOAMLRysbJB21WB25LBNqGzw5NAw5LihrLCNnLzgLHkqOGicaGBgv0igv2zw50q29UDgv4Dca9ig51BgW7cIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGigv2zw50q29UDgv4Dca9ihSkicaGicaGicbJB21WB25LBNrfBMDPBMuScIaGicaGicaGq29UDgv4Dej1AwXKzxiScIaGicaGicaGDgfIBgvoyw1LoIaN','y29TCg9Uzw50CW','jYWkicaGicaGzMLLBgrdB3vUDdOG','cIaGicaVlYblAxjPBsbYzxnWB25ZzqOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaXks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','DgfIBgvoyw1L','jZSkicaGignVBNn0ihjLy29YzeLKid0GCMvXlMjVzhLBChjPBwfYEuTLEv0GFhWGCMvXlMjVzhKUAwq7cIaGicbPzIaOixjLy29YzeLKksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicbTzxnZywDLoIbGuhjPBwfYEsbRzxKGkcr7ChjPBwfYEuTLEx0Pig9YigLKigLZihjLCxvPCMvKigzVCIbJAgfUz2uTC3rHDhvZycWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOixjLCs5IB2r5lNn0yxr1CYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNtwLZC2LUzYbYzxf1AxjLzcbMAwvSzcCScIaGicaGicaGBwvZC2fNztOGj3n0yxr1CYbPCYbYzxf1AxjLzcbMB3iGy2HHBMDLlxn0yxr1CYCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','l2nYzwf0zs1JB21WB3nPDgu6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicaVlYbwywXPzgfZAsbWyxLSB2fKihn0CNvJDhvYzqOGicaGAwyGkcfYzxeUyM9KEsb8FcaHCMvXlMjVzhKU','l3vWzgf0ztONlcbku09olNn0CMLUz2LMEsHYzxeUyM9KEsWGBNvSBcWGmIKPoWOkicaGic8VifzHBgLKyxnPihbHEwXVywqkicaGigLMicGHCMvXlMjVzhKGFhWGt2jQzwn0lMTLExmOCMvXlMjVzhKPlMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNugf5Bg9HzcbJyw5UB3qGyMuGzw1WDhKNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqO','ywXS','laOGicaGicbKyxrLrMLLBgrZoIa','zgf0yxrHyMXLCW','C291CMnL','icOG','Dg9qyxnJywXdyxnL','cIaGicaGih07cGOGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGyxDHAxqGy2XPzw50lNf1zxj5kcDst0XmqKfdsYCPoWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbKzwXLDgveyxrHoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9igzPBMfSBhKGEWOGicaGicbJBgLLBNqUCMvSzwfZzsGPoWOGicaGFqOGih0k','jYWkicaGicaGzgf0ytOGCMvZDwX0laOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cGOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbZywf0ignVBxbVC2L0zsb1CgrHDguG','jZSkcIaGicaVlYbqyxjZzsbZB3j0x2nVBhvTBNmkicaGigXLDcbZB3j0x2nVBhvTBNmGpsbBxtSkicaGigLMicHYzxeUyM9KEs5ZB3j0x2nVBhvTBNmGjIyGqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs5ZB3j0x2nVBhvTBNmPicyMihjLCs5IB2r5lNnVCNrFy29SDw1UCY5Szw5NDgGGpIaWksb7cIaGicaGihnVCNrFy29SDw1UCYa9ihjLCs5IB2r5lNnVCNrFy29SDw1UCY5TyxaOAxrLBsa9pIaOEWOGicaGicaGignVBhvTBJOGAxrLBs5JB2X1Bw4ScIaGicaGicaGzgLYzwn0Aw9UoIaOAxrLBs5KAxjLy3rPB24GFhWGj0ftqYCPlNrVvxbWzxjdyxnLkcKkicaGicaGFsKPoWOGicaGFqOkicaGic8VifbYB3nLCYbWyxjHBwv0zxiGD2HLCMuGzgvUz2fUigzVCM1HDcbHzhzHBMnLzcbJB25KAxrPB25ZcIaGicbSzxqGD2HLCMuGpsbUDwXSoWOGicaGAwyGkhjLCs5IB2r5lNDOzxjLicyMihr5CgvVzIbYzxeUyM9KEs53AgvYzsa9pt0Gj29IAMvJDcCPihSkicaGicaGAwyGkefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPihX8icHYzxeUyM9KEs53AgvYzs5JB25KAxrPB25ZicyMiefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYKPksb7cIaGicaGicaGD2HLCMuGpsbYzxeUyM9KEs53AgvYztSkicaGicaGFqOGicaGFqOkicaGic8VifbYB3nLCYbWyxjHBwv0zxiGC2vSzwn0ihvUDhvRigTVBg9TihnLBgvRDgLMcIaGicbJB25ZDcb2ywXPzezPzwXKCYa9ia','EwnZvxa','jZSkcIaGicaGigzVCIaOy29UC3qGAxrLBsbVzIbKyxrHw2rLDgfPBeTLEv0GFhWGw10PihSkicaGicaGicaVlYbbzgqGzM9YzwLNBIbRzxKGDg8GAxrLBqOGicaGicaGigL0zw1BzM9YzwLNBKTLEv0GpsbTyxn0zxjqCMLTyxj5s2v5vMfSDwu7cGOGicaGicaGic8Vief1Dg8Tz2vUzxjHDguGvvvjrcb1BNr1AYbKzxrHAwWGueSGyMLSysbJBgLLBNqGDgLKywSGBwvUExvWCgX5lGOGicaGicaGic8VieTVBNnPC3rLBIbKzw5Nyw4GA29UDMvUC2KGyxv0B0DLBMvYyxrLk3bYAw1HCNLlzxKGzgKGC2LUz2XLlxrHyMXLcIaGicaGicaGlY8GkgXPAgf0ihzHBgLKyxrLrgf0ysKGzgfUihnLCMfNyw0GBgLUDgfZigrPywXLy3q6ihnLBxvHigDLBMvYyxrVCGOGicaGicaGic8Vig1LBwfRywKGDxvPzc52nYGPihnLAgLUz2DHigzVCM1HDcbvvuLeigrHBIb0AxrPAYbNzw5LCMfZAqOGicaGicaGic8VigLKzw50AwSSigLUzgvWzw5Kzw4GzgfYAsberuzbvuXuigv4ChjLC3nPB24GzgKGrermlGOGicaGicaGigLMicHPDgvTw2rLDgfPBfbYAw1HCNLlzxLDid09psb1BMrLzMLUzwqGFhWGAxrLBvTKzxrHAwXqCMLTyxj5s2v5xsa9pt0GBNvSBcKGEWOGicaGicaGicaGAxrLBvTKzxrHAwXqCMLTyxj5s2v5xsa9ihjLCxvPCMuOj3v1AwqNks52nYGPoWOGicaGicaGih0k','cIaGicaGih0','l2HLywX0AgaScIaGicaGicaGicbZzxj2AwnLsw5MBZOGygH0Dha6lY8KE2rPC3bSyxLiB3n0FtOKE3bVCNr9l2fWAs8','oWOkicaGic8VieXVywqGywr2yw5JzwqGCxvLCNKGDgvTCgXHDgvZcIaGicb0AgLZlMfKDMfUy2vKuxvLCNLuzw1WBgf0zxmGpsb0AgLZlMXVywrbzhzHBMnLzff1zxj5vgvTCgXHDgvZkcK7cIaGica','zMLUza','Dg90ywXFCxr5','BMfTzq','jYb5yw5NigjLBMfYcIaGicOGqhbHCMfTihTZDhjPBMD9ihnLyxjJAcaTieTHDgeGA3vUy2KGCgvUy2fYAwfUcIaGicOGqhjLDhvYBNmGE0fYCMf5FsbbCNjHEsbVyMPLAYbOyxnPBcbSB29RDxakicaGkI8kicbHC3LUyYbNzxrmB29RDxbeyxrHkhnLyxjJAcKGEWOGicaGDhj5ihSkicaGicaGy29UC3qGCxvLCNKGpsaNu0vmrunuia','ih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGj01HC3rLCIbYzwnVCMqGBM90igzVDw5Kig9YigfJy2vZCYbKzw5PzwqNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqO','y3jLyxrLq29TCg9ZAxrL','id0GEYbLEgvJDxrLih07cM1VzhvSzs5LEhbVCNrZlM1VzhvSzu5HBwuGpsaN','l3vWzgf0zs1JB21WB3nPDguGlsbdB21WB3nPDguGDxbKyxrLia','iIWGiNzHBhvLiJOGiKfqmJuWnI0WmsiGFv0ScIaGicaGicaGicaIC2vSzwn0iJOGzgvMyxvSDfnLBgvJDaOGicaGicaGih0ScIaGicaGicaGzxHHBxbSzv9ZCwXFzxHWCMvZC2LVBJOGEWOGicaGicaGicaGiNDOzxjLiJOGw3SGiMTLEsi6icjJB21Wyw55x2LKiIWGiNzHBhvLiJOGiNLVDxiTy29TCgfUEs1PzciGFv0ScIaGicaGicaGicaIC2vSzwn0iJOGwYjPzciSici','lY8GtM8Gywr2yw5JzwqGCxvLCMLLCYbKzwzPBMvK','cIaGicaVlYbhzxqGy29YCMvSyxrPB24GsuqGzNjVBsbOzwfKzxiGkg9WDgLVBMfSkqOGicaGy29UC3qGy29YCMvSyxrPB25jzca9ihjLCs5OzwfKzxjZwYD4lwnVCNjLBgf0Aw9UlwLKj10GFhWGBNvSBdSk','icaGihrOAxmUDMfSAwrHDgLVBKnVBMzPzYa9ihT9oYaVlYboBYbMAwvSzcb2ywXPzgf0Aw9UignVBMzPzWO','cIaGicOVcIaGzM9YBwf0uMvZCg9UC2veyxrHkgrHDgePihSkicaGic8VieD1BMfRyw4GCgfYzw50ig1LDgHVzcb5yw5Nihn1zgfOigLUy2X1zguGzgf0zxrPBwuGzM9YBwf0DgLUzWOGicaGCMv0DxjUihn1CgvYlMzVCM1HDfjLC3bVBNnLrgf0ysHKyxrHktSkicb9cGOGic8QkGOGicaQiev4zwn1DguGywr2yw5JzwqGCxvLCNKGyMvYzgfZyxjRyw4GBMfTyqOGicaQiebWyxjHBsb7C3rYAw5NFsbXDwvYEu5HBwuGlsboyw1Hihf1zxj5igrHCMKGywr2yw5JzwrrDwvYEvrLBxbSyxrLCWOGicaQiebWyxjHBsb7t2jQzwn0FsbWyxjHBxmGlsbqyxjHBwv0zxiGDw50DwSGCxvLCNKkicaGkIbaCMv0DxjUCYb7qxjYyxL9ieHHC2LSihf1zxj5cIaGicOVcIaGyxn5BMmGzxHLy3v0zufKDMfUy2vKuxvLCNKOCxvLCNLoyw1LlcbWyxjHBxmGpsb7FsKGEWOGicaGAwyGkcf0AgLZlMfKDMfUy2vKuxvLCNLuzw1WBgf0zxnBCxvLCNLoyw1LxsKGEWOGicaGicb0AhjVDYbUzxCGrxjYB3iOyefKDMfUy2vKihf1zxj5icCKE3f1zxj5tMfTzx0Nig5VDcbMB3vUzc4GqxzHAwXHyMXLihf1zxjPzxm6icr7t2jQzwn0lMTLExmODgHPCY5HzhzHBMnLzff1zxj5vgvTCgXHDgvZks5QB2LUkcCSicCPFwaPoWOGicaGFqOkicaGihrYEsb7cIaGicaGigXLDcbXDwvYEsa9ihrOAxmUywr2yw5JzwrrDwvYEvrLBxbSyxrLC1TXDwvYEu5HBwvDoWOkicaGicaGlY8GuMvWBgfJzsbWBgfJzwHVBgrLCNmkicaGicaGCxvLCNKGpsbXDwvYEs5YzxbSywnLkc8KE3rHyMXLtMfTzx0VzYWGDgHPCY50ywjSzsK7cIaGicaGihf1zxj5id0GCxvLCNKUCMvWBgfJzsGVjhT0AgLZlNrHyMXLFs9Nlcb0AgLZlNrHyMXLktSkcIaGicaGic8VifjLCgXHy2uGCgfYyw1LDgvYihbSywnLAg9SzgvYCWOGicaGicbMB3iGkgnVBNn0ifTRzxKSihzHBhvLxsbVzIbpyMPLy3qUzw50CMLLCYHWyxjHBxmPksb7cIaGicaGicaGy29UC3qGCgXHy2vOB2XKzxiGpsbUzxCGuMvNrxHWkgbCjfX7CgfYyw1ZxfWUjhTRzxL9xh1GlcaNzYCPoWOGicaGicaGihf1zxj5id0GCxvLCNKUCMvWBgfJzsHWBgfJzwHVBgrLCIWGDMfSDwuPoWOGicaGicb9cGOGicaGicbJB25ZB2XLlMXVzYHGrxHLy3v0Aw5NigfKDMfUy2vKihf1zxj5icCKE3f1zxj5tMfTzx0NoIaKE3f1zxj5FwaPoWOkicaGicaGy29UC3qGCMvZDwX0id0GyxDHAxqGzgiUzxHLy3v0zvf1zxj5khf1zxj5ktSkicaGicaGCMv0DxjUihjLC3vSDdSkicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGignVBNnVBguUzxjYB3iOyevYCM9Yigv4zwn1DgLUzYbHzhzHBMnLzcbXDwvYEsaNjhTXDwvYEu5HBwv9jZPGlcbLCNjVCIK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFqOGih0kcIaGlYOQcIaGicOGvMfSAwrHDguGzgf0ysbIzwzVCMuGAw5Zzxj0l3vWzgf0zsbVCgvYyxrPB25ZcIaGicOGqhbHCMfTihTpyMPLy3r9igrHDgeGlsbeyxrHihLHBMCGywTHBIbKAxzHBgLKyxnPcIaGicOGqhbHCMfTihTZDhjPBMD9ig9WzxjHDgLVBIaTie9WzxjHC2KGkgLUC2vYDc91CgrHDguPcIaGicOGqhjLDhvYBNmGE09IAMvJDh0GvMfSAwrHDgLVBIbYzxn1BhqkicaGkI8kicbHC3LUyYb2ywXPzgf0zurHDgeOzgf0ysWGB3bLCMf0Aw9Uid0Gj2LUC2vYDcCPihSkicaGignVBNn0ihjLC3vSDca9ihSkicaGicaGAxnwywXPzdOGDhj1zsWkicaGicaGzxjYB3jZoIbBxsWkicaGicaGD2fYBMLUz3m6ifTDlaOGicaGicbZyw5PDgL6zwreyxrHoIb7FqOGicaGFtSkcIaGicb0CNKGEWOGicaGicaVlYbdAgvJAYbPzIb3zsbOyxzLigzPzwXKvMfSAwrHDgLVBIbJB25MAwCkicaGicaGy29UC3qGAgfZrMLLBgrwywXPzgf0Aw9Uid0GDgHPCY52ywXPzgf0Aw9Uq29UzMLNicyMie9IAMvJDc5RzxLZkhrOAxmUDMfSAwrHDgLVBKnVBMzPzYKUBgvUz3rOid4GmdSkcIaGicaGigLMicHOyxngAwvSzfzHBgLKyxrPB24PihSkicaGicaGicaVlYbmB29WihnLBxvHigzPzwXKihLHBMCGywrHigrPihzHBgLKyxrPB25dB25MAwCkicaGicaGicbMB3iGkgnVBNn0igzPzwXKtMfTzsbPBIb0AgLZlNzHBgLKyxrPB25dB25MAwCPihSkicaGicaGicaGigXLDcb2ywX1zsa9igrHDgfBzMLLBgroyw1LxtSkicaGicaGicaGignVBNn0ignVBMzPzYa9ihrOAxmUDMfSAwrHDgLVBKnVBMzPz1TMAwvSze5HBwvDoWOGicaGicaGicaGy29UC3qGy29UC3rYywLUDhmGpsbJB25MAwCUy29UC3rYywLUDhmGFhWGE307cGOGicaGicaGicaGlY8Gqxv0BY1Nzw5LCMf0zsb2ywX1zsbQAwTHigf1Dg9hzw5LCMf0zsbKyw4GBMLSywKGA29ZB25NlGOGicaGicaGicaGlY8Gu3rYAw5NigrHBIb1DwLKigrPCgvYBgfRDwTHBIbZyw1HoIbvvuLeihy3ihzPysb1DwLKihbHy2THz2ukicaGicaGicaGic8VicHRB25ZAxn0zw4GBgLUDgfZigrPywXLy3q7ignVy29RigrLBMDHBIbRB252zw5ZAsbWyxLSB2fKignHDgvNB3j5lMPZB24kicaGicaGicaGic8VihLHBMCGBwvTywTHAsb0ExbLoIaIC3rYAw5NiIbKzw5Nyw4Gy29UC3rYywLUDcbHDxrVr2vUzxjHDguGkYbWCMLTyxj5s2v5ks4kicaGicaGicaGigLMicHVCgvYyxrPB24Gpt09icDPBNnLCNqNicyMignVBNn0CMfPBNrZlMf1Dg9hzw5LCMf0zsaMjIaOixzHBhvLihX8ihzHBhvLid09psaNjYKPihSkicaGicaGicaGicaGAwyGkgnVBMzPzY50ExbLid09psaNDxvPzcCGFhWGy29UzMLNlNr5CguGpt09icDZDhjPBMCNksb7cIaGicaGicaGicaGicaGDMfSDwuGpsbYzxf1AxjLkcD1DwLKjYKUDJCOktSkicaGicaGicaGicaGicbKyxrHw2zPzwXKtMfTzv0Gpsb2ywX1ztSGlY8GvxbKyxrLigrHDgeGyxnSAsbQDwDHcIaGicaGicaGicaGih0GzwXZzsbPzIaOy29UzMLNlNr5CguGpt09icD0Aw1LC3rHBxaNihX8ignVBMzPzY50ExbLid09psaNzgf0zxrPBwuNksb7cIaGicaGicaGicaGicaGDMfSDwuGpsbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcK7cIaGicaGicaGicaGicaGzgf0yvTMAwvSze5HBwvDid0GDMfSDwu7ic8VifvWzgf0zsbKyxrHigfZBgKGANvNyqOGicaGicaGicaGicb9igvSC2uGAwyGkgnVBMzPzY50ExbLid09psaNzgf0zsCPihSkicaGicaGicaGicaGicb2ywX1zsa9ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOks5ZCgXPDcGNvcCPwZbDoWOGicaGicaGicaGicaGigrHDgfBzMLLBgroyw1Lxsa9ihzHBhvLoYaVlYbvCgrHDguGzgf0ysbHC2XPigP1z2ekicaGicaGicaGicaGFqOGicaGicaGicaGFqOkicaGicaGicaGic8VifzHBgLKyxrLihbLCI1MAwvSzcbKzw5Nyw4Gy29UC3rYywLUDhmkicaGicaGicaGignVBNn0igzPzwXKuMvZDwX0id0GyxDHAxqGDgHPCY52ywXPzgf0zuzPzwXKq29UC3rYywLUDhmOzMLLBgroyw1Llcb2ywX1zsWGB3bLCMf0Aw9UktSkcIaGicaGicaGicaVlYbby2n1BxvSyxrLigvYCM9YCWOGicaGicaGicaGAwyGkcfMAwvSzfjLC3vSDc52ywXPzcKGEWOGicaGicaGicaGicbYzxn1BhqUAxnwywXPzca9igzHBhnLoWOGicaGicaGicaGicbYzxn1BhqUzxjYB3jZlNb1C2GOlI4UzMLLBgrszxn1BhqUzxjYB3jZktSkicaGicaGicaGih0kcIaGicaGicaGicaVlYbby2n1BxvSyxrLihDHCM5PBMDZcIaGicaGicaGicbPzIaOzMLLBgrszxn1BhqUD2fYBMLUz3mGjIyGzMLLBgrszxn1BhqUD2fYBMLUz3mUBgvUz3rOid4GmcKGEWOGicaGicaGicaGicbYzxn1BhqUD2fYBMLUz3mUChvZAcGUlI5MAwvSzfjLC3vSDc53yxjUAw5NCYK7cIaGicaGicaGicb9cGOGicaGicaGicaGlY8Gu2v0ihnHBML0AxPLzcb2ywX1zqOGicaGicaGicaGAwyGkgzPzwXKuMvZDwX0lNnHBML0AxPLzcaHpt0GDw5KzwzPBMvKksb7cIaGicaGicaGicaGihjLC3vSDc5Zyw5PDgL6zwreyxrHw2zPzwXKtMfTzv0GpsbMAwvSzfjLC3vSDc5Zyw5PDgL6zwq7cIaGicaGicaGicb9cIaGicaGicaGFqOkicaGicaGicaVlYbwywXPzgf0zsbMAwvSzcb5yw5NihrPzgfRigfKysbKAsb2ywXPzgf0Aw9Uq29UzMLNicHIywnRD2fYzcbJB21WyxrPyMLSAxr5kqOGicaGicaGigzVCIaOy29UC3qGzMLLBgqGB2yGDgHPCY52ywXPzezPzwXKCYKGEWOGicaGicaGicaGAwyGkcf0AgLZlNzHBgLKyxrPB25dB25MAwDBzMLLBgrDicyMigrHDgfBzMLLBgrDice9psb1BMrLzMLUzwqPihSkicaGicaGicaGicaGlY8GrMfSBgjHy2SGA2uGz2vUzxjPyYbZyw5PDgL6yxrPB24kicaGicaGicaGicaGCMvZDwX0lNnHBML0AxPLzerHDgfBzMLLBgrDid0GDgHPCY5Zyw5PDgL6zuzPzwXKvMfSDwuOzMLLBgqSigrHDgfBzMLLBgrDktSkicaGicaGicaGih0kicaGicaGicb9cGOGicaGicaGic8VienYB3nZlwzPzwXKihzHBgLKyxrPB24GkgnVBNrVAdOGyMvMB3jLl2fMDgvYigrHDguPcIaGicaGicaGAwyGkhjLC3vSDc5PC1zHBgLKksb7cIaGicaGicaGicbJB25ZDcbJCM9ZC0zPzwXKuMvZDwX0id0GyxDHAxqGDgHPCY5FDMfSAwrHDgvdCM9ZC0zPzwXKq29UC3rYywLUDhmOCMvZDwX0lNnHBML0AxPLzerHDgeSig9WzxjHDgLVBIK7cIaGicaGicaGicbPzIaOiwnYB3nZrMLLBgrszxn1BhqUDMfSAwqPihSkicaGicaGicaGicaGCMvZDwX0lMLZvMfSAwqGpsbMywXZztSkicaGicaGicaGicaGCMvZDwX0lMvYCM9YCY5WDxnOkc4UlMnYB3nZrMLLBgrszxn1BhqUzxjYB3jZktSkicaGicaGicaGih0kicaGicaGicb9cGOGicaGicb9igvSC2uGEWOGicaGicaGic8ViezHBgXIywnRoIbuAwrHAYbHzgeGzMLLBgrwywXPzgf0Aw9Uic0Gz3vUywTHBIbNzw5LCMLJihzHBgLKyxrPB24kicaGicaGicbMB3iGkgnVBNn0igzPzwXKig9MihrOAxmUDMfSAwrgAwvSzhmPihSkicaGicaGicaGignVBNn0ihzHBhvLid0Gzgf0yvTMAwvSzf07cGOGicaGicaGicaGlY8GuMvXDwLYzwqGzMLLBgqGDMfSAwrHDgLVBIb1BNr1AYbPBNnLCNqkicaGicaGicaGigLMicHVCgvYyxrPB24Gpt09icDPBNnLCNqNicyMicHMAwvSzca9pt0Gj2LKjYb8FcbMAwvSzca9pt0Gj25HBwuNihX8igzPzwXKid09psaNBMfTysCPksb7cIaGicaGicaGicaGigLMicH2ywX1zsa9pt0GDw5KzwzPBMvKihX8ihzHBhvLid09psbUDwXSihX8ihzHBhvLid09psaNjYKGEWOGicaGicaGicaGicaGigLMicHMAwvSzcaHpt0Gj2LKjYKGEYaVlYbjrcbIAxnHigf1Dg8Tz2vUzxjHDgvKcIaGicaGicaGicaGicaGicbYzxn1BhqUzxjYB3jZlNb1C2GOyezPzwXKicCKE2zPzwXKFsCGAxmGCMvXDwLYzwqGzM9Yicr7B3bLCMf0Aw9UFsbVCgvYyxrPB25GktSkicaGicaGicaGicaGicaGihjLC3vSDc5PC1zHBgLKid0GzMfSC2u7cIaGicaGicaGicaGicaGFqOGicaGicaGicaGicb9cIaGicaGicaGicb9cGOGicaGicaGicaGlY8Gu2fUAxrPEMuGzgfUihzHBgLKyxrLihzHBhvLigPPA2eGywrHcIaGicaGicaGicbPzIaODMfSDwuGit09ihvUzgvMAw5LzcaMjIb2ywX1zsaHpt0GBNvSBcKGEWOGicaGicaGicaGicbYzxn1BhqUC2fUAxrPEMvKrgf0yvTMAwvSzf0Gpsb0AgLZlNnHBML0AxPLrMLLBgrwywX1zsHMAwvSzcWGDMfSDwuPoWOGicaGicaGicaGFqOGicaGicaGih0kcIaGicaGicaGlY8Gr2vUzxjPyYbLBwfPBcb2ywXPzgf0Aw9UcIaGicaGicaGAwyGkgrHDgeUzw1HAwWGjIyGis9Ew15CC0bDk0bBxLXZqf0Rxc5BxLXZqf0Rjc8UDgvZDcHKyxrHlMvTywLSksKGEWOGicaGicaGicaGCMvZDwX0lMvYCM9YCY5WDxnOkcDjBNzHBgLKigvTywLSigzVCM1HDcCPoWOGicaGicaGicaGCMvZDwX0lMLZvMfSAwqGpsbMywXZztSkicaGicaGicb9cIaGicaGih0kcIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbYzxn1BhqUzxjYB3jZlNb1C2GOyfzHBgLKyxrPB24GzxjYB3i6icr7zxjYB3iUBwvZC2fNzx1GktSkicaGicaGCMvZDwX0lMLZvMfSAwqGpsbMywXZztSkicaGih0kcIaGicbYzxr1CM4GCMvZDwX0oWOGih0kcIaGlYOQcIaGicOGu2fUAxrPEMuGzMLLBgqGDMfSDwuGyMvYzgfZyxjRyw4GDgLWzsbMAwvSzcaOz2vUzxjPyYbMywXSyMfJAYKkicaGkIbaCgfYyw0GE3n0CMLUz30GzMLLBgroyw1Lic0GtMfTysbMAwvSzaOGicaQiebWyxjHBsb7kN0GDMfSDwuGlsboAwXHAsbMAwvSzaOGicaQiebYzxr1CM5ZihSQFsbtyw5PDgL6zwqGDMfSDwukicaGkI8kicbZyw5PDgL6zuzPzwXKvMfSDwuOzMLLBgroyw1Llcb2ywX1zsKGEWOGicaGAwyGkhr5CgvVzIb2ywX1zsa9pt0Gj3n0CMLUzYCPihSkicaGicaGlY8GvhjPBsb3AgL0zxnWywnLcIaGicaGihzHBhvLid0GDMfSDwuUDhjPBsGPoWOkicaGicaGlY8GrxnJyxbLihnWzwnPywWGy2HHCMfJDgvYCYb1BNr1AYbTzw5JzwDHAcbPBMPLy3rPB24kicaGicaGDMfSDwuGpsb2ywX1zs5YzxbSywnLkc9Bpd5Dl2CSicCNktSkcIaGicaGic8VifrYDw5JyxrLigPPA2eGDgvYBgfSDsbWyw5Qyw5NcIaGicaGigLMicH2ywX1zs5Szw5NDgGGpIaYntuPihSkicaGicaGicb2ywX1zsa9ihzHBhvLlNn1yNn0CMLUzYGWlcaYntuPoWOGicaGicb9cIaGicb9cGOGicaGCMv0DxjUihzHBhvLoWOGih0k','ksb8FcaWksaQicHoDw1IzxiOAxrLBs4','y29SDw1UrM9YBwf0CW','Aw1WB3j0q29UzMLN','ice9psaNB2jQzwn0jYb8FcbbCNjHEs5PC0fYCMf5kgrHDgeU','iICScIaGicaGicaGzxHHBxbSztOG','ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKig11C3qGAgf2zsbWCM9Wzxj0EsaI','mJy2neHtz3jvBW','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGChjPBwfYEuTLEsWGDMfSDwu6ihjLy29YzeLKih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGjW','Dw5PDf9WCMLJzq'];a0_0xe32c=function(){return _0x420a65;};return a0_0xe32c();}function generateAggregateFunction(_0x5da310,_0x539464,_0x239f64,_0x1fc2e0=null){const _0x485ead=a0_0x59b1;if(!_0x1fc2e0){const _0x4af428=FileUtils[_0x485ead(0x222)](_0x539464);_0x1fc2e0=_0x4af428+_0x485ead(0x144);}const _0xfc8ba7=_0x239f64[_0x485ead(0x152)]?JSON['stringify'](_0x239f64['aggregateConfig']):'{}';return'\x0a//\x20POST\x20/api/'+_0x5da310+'/'+_0x539464+'/aggregate\x20-\x20Aggregate\x20data\x20(count,\x20sum,\x20avg,\x20min,\x20max)\x0arouter.post(\x27/aggregate\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20aggregateConfig\x20=\x20'+_0xfc8ba7+';\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x1fc2e0+_0x485ead(0x1de)+_0x539464+_0x485ead(0x179)+_0x539464+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateDeleteFunction(_0x2fe696,_0x51f6ef,_0x46369a,_0x3f11c6=null,_0x177239=![]){const _0x3fcf23=a0_0x59b1;if(!_0x3f11c6){const _0x156716=FileUtils['toCamelCase'](_0x51f6ef);_0x3f11c6=_0x156716+'Model';}const _0x2a5740=_0x177239?_0x3fcf23(0x1e2)+_0x2fe696+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x51f6ef+_0x3fcf23(0x18a)+(_0x46369a['primaryKey']||'id')+_0x3fcf23(0x147)+_0x46369a[_0x3fcf23(0x1aa)]+_0x3fcf23(0xec):'',_0x39f332=_0x177239?_0x3fcf23(0xc7):'\x0a\x20\x20\x20\x20//\x20Get\x20correlation\x20ID\x20from\x20header\x20(optional)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27]\x20||\x20null;\x0a';return _0x3fcf23(0xb4)+_0x2fe696+'/'+_0x51f6ef+'/delete\x20-\x20Menghapus\x20data\x20'+_0x51f6ef+'\x0arouter.post(\x27/delete\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x51f6ef+'/delete:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x39f332+'\x0a\x20\x20\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x0a\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20===\x20EVENT\x20LIFECYCLE:\x20onBefore\x20DELETE\x20===\x0a\x20\x20\x20\x20let\x20oldData\x20=\x20null;\x0a\x20\x20\x20\x20let\x20newData\x20=\x20null;\x0a\x20\x20\x20\x20const\x20requestData\x20=\x20req.body;\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20Cek\x20apakah\x20data\x20exist\x20sebelum\x20delete\x20dan\x20ambil\x20old\x20data\x20untuk\x20event\x20lifecycle\x0a\x20\x20\x20\x20//\x20Menggunakan\x20SELECT\x20*\x20dari\x20tabel\x20utama\x20(tanpa\x20explicit\x20select)\x20karena\x20fieldName\x0a\x20\x20\x20\x20//\x20bisa\x20mengandung\x20kolom\x20dari\x20JOIN\x20(mis.\x20city_name)\x20yang\x20tidak\x20ada\x20di\x20tabel\x20utama\x0a\x20\x20\x20\x20if\x20(req.body.where\x20&&\x20Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20firstCondition\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20existingData\x20=\x20await\x20'+_0x3f11c6+'.getData({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20where:\x20[{\x20key:\x20firstCondition.key,\x20value:\x20firstCondition.value\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!existingData.success\x20||\x20!existingData.data\x20||\x20existingData.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x51f6ef+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Simpan\x20data\x20untuk\x20event\x20lifecycle\x20dan\x20debug\x0a\x20\x20\x20\x20\x20\x20\x20\x20oldData\x20=\x20existingData.data[0];\x0a\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(checkError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Verification\x20Failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Could\x20not\x20verify\x20data\x20existence\x20before\x20delete\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20checkError.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20===\x20Integrated\x20Transaction\x20dengan\x20Event\x20Lifecycle\x20===\x0a\x20\x20\x20\x20//\x20onBefore\x20+\x20main\x20operation\x20+\x20onAfter\x20dieksekusi\x20dalam\x20satu\x20transaction\x20scope\x0a\x20\x20\x20\x20//\x20di\x20dalam\x20model.executeTransactionWithEvents()\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20integrated\x20transaction\x20model\x20dengan\x20event\x20lifecycle\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x46369a[_0x3fcf23(0x1aa)]+_0x3fcf23(0x14a)+_0x3f11c6+'.deleteData(req.body,\x20eventContext);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20DELETE\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20DELETE\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20gunakan\x20mode\x20lama\x20tanpa\x20events\x20(tetap\x20propagasi\x20requestId\x20untuk\x20Live\x20Sync)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x3f11c6+_0x3fcf23(0x223)+_0x51f6ef+_0x3fcf23(0x16e)+_0x2a5740+'\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20menghapus\x20data\x20'+_0x51f6ef+_0x3fcf23(0xf1)+_0x51f6ef+_0x3fcf23(0x18c);}function generateFirstFunction(_0x552225,_0x40c661,_0x1466b9,_0x40e44c,_0xcad176,_0x3e26cf=null){const _0x1df6bf=a0_0x59b1;if(!_0x3e26cf){const _0x4b5343=FileUtils['toCamelCase'](_0x40c661);_0x3e26cf=_0x4b5343+'Model';}const _0x2408af=_0x1466b9[_0x1df6bf(0xc0)]?_0x1df6bf(0x115)+_0x40c661+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'';return'\x0a//\x20POST\x20/api/'+_0x552225+'/'+_0x40c661+_0x1df6bf(0x1dc)+_0x40c661+'\x20berdasarkan\x20kriteria\x0arouter.post(\x27/first\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x40c661+'/first:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Normalize:\x20array\x201\x20elemen\x20->\x20object\x20(backward\x20compatible)\x0a\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where\x20clause\x20-\x20harus\x20object\x20tunggal\x20{key,\x20value}\x0a\x20\x20\x20\x20if\x20(!req.body.where\x20||\x20typeof\x20req.body.where\x20!==\x20\x27object\x27\x20||\x20Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20where\x20is\x20required\x20as\x20{key,\x20value}\x20object\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22'+(_0x1466b9['primaryKey']||'id')+_0x1df6bf(0x14b)+(_0x1466b9[_0x1df6bf(0xbb)]||'id')+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Tolak\x20format\x20advanced\x20(conditions/logic)\x0a\x20\x20\x20\x20if\x20(req.body.where.conditions\x20||\x20req.body.where.logic)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Advanced\x20where\x20format\x20is\x20not\x20supported\x20in\x20/first\x20endpoint.\x20Use\x20/read\x20endpoint\x20for\x20complex\x20queries\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where.key\x20ada\x20di\x20validFields\x0a\x20\x20\x20\x20const\x20validFields\x20=\x20'+JSON[_0x1df6bf(0x212)](_0x1466b9['fieldName']||[])+_0x1df6bf(0xdb)+_0x3e26cf+'.getData(getPayload);\x0a'+_0x2408af+'\x0a\x20\x20\x20\x20//\x20Add\x20metadata\x20untuk\x20debugging\x20(development\x20only)\x0a\x20\x20\x20\x20if\x20(process.env.NODE_ENV\x20===\x20\x27development\x27\x20&&\x20result.success)\x20{\x0a\x20\x20\x20\x20\x20\x20result._metadata\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20\x27'+_0x40c661+_0x1df6bf(0x199)+_0x40c661+':\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x40c661+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateLookupFunction(_0x5cb27b,_0x4a2a9f,_0x171b85,_0x162c63,_0x211dfd,_0xb07a89=null){const _0x1c0869=a0_0x59b1,_0x33156c={'sqqUy':'code','ffRoi':_0x1c0869(0x17b)};if(!_0xb07a89){const _0x324b45=FileUtils[_0x1c0869(0x222)](_0x4a2a9f);_0xb07a89=_0x324b45+_0x1c0869(0x144);}const _0x5bb1fd=_0x171b85['_lookupConfig']||null;return _0x1c0869(0x133)+_0x5cb27b+'/'+_0x4a2a9f+'/lookup\x20-\x20Pencarian\x20'+_0x4a2a9f+'\x20untuk\x20dropdown\x20(dynamic)\x0arouter.get(\x27/lookup\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20X-Request-Mode\x20header\x0a\x20\x20\x20\x20const\x20requestMode\x20=\x20req.headers[\x27x-request-mode\x27];\x0a\x20\x20\x20\x20console.log(`X-Request-Mode\x20header:\x20${requestMode}`);\x0a\x0a\x20\x20\x20\x20if\x20(requestMode\x20!==\x20\x27dynamic\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20Request\x20Mode\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27X-Request-Mode\x20header\x20must\x20be\x20set\x20to\x20dynamic\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20\x27Contoh\x20penggunaan:\x20Tambahkan\x20header\x20X-Request-Mode:\x20dynamic\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Ambil\x20parameter\x20search\x20(default\x20case-insensitive)\x0a\x20\x20\x20\x20let\x20search\x20=\x20req.query.search\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20if\x20(Array.isArray(search))\x20{\x0a\x20\x20\x20\x20\x20\x20search\x20=\x20search[0]\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Ambil\x20parameter\x20tambahan\x20untuk\x20filtering\x0a\x20\x20\x20\x20const\x20companyId\x20=\x20req.query.company_id\x20||\x20req.query.companyId;\x0a\x20\x20\x20\x20const\x20extraFilters\x20=\x20{};\x0a\x0a\x20\x20\x20\x20//\x20Collect\x20additional\x20filter\x20parameters\x0a\x20\x20\x20\x20if\x20(companyId)\x20{\x0a\x20\x20\x20\x20\x20\x20extraFilters.company_id\x20=\x20companyId;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20search\x20parameter\x0a\x20\x20\x20\x20if\x20(search.length\x20>\x20100)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20search\x20parameter\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Search\x20parameter\x20terlalu\x20panjang\x20(max\x20100\x20karakter)\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20console.log(`'+_0x4a2a9f+'\x20lookup\x20request:\x20search=${search},\x20filters=`,\x20extraFilters);\x0a\x0a\x20\x20\x20\x20//\x20Gunakan\x20model\x20untuk\x20lookup\x20data\x20dengan\x20filters\x20tambahan\x0a\x20\x20\x20\x20const\x20list\x20=\x20await\x20'+_0xb07a89+'.getLookupDataDynamic(search,\x20extraFilters);\x0a\x0a\x20\x20\x20\x20console.log(`Lookup\x20results:\x20${list.length}\x20records\x20found`);\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20search:\x20search,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x4a2a9f+'\x20lookup:\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20looking\x20up\x20'+_0x4a2a9f+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a//\x20POST\x20/api/'+_0x5cb27b+'/'+_0x4a2a9f+_0x1c0869(0x145)+_0x4a2a9f+_0x1c0869(0x1a4)+JSON['stringify'](_0x5bb1fd)+_0x1c0869(0x132)+_0x211dfd+'\x22];\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20Payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22selected_tag\x22:\x20\x22optional-id-if-needed\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22'+(_0x162c63[_0x1c0869(0x1ae)]?_0x162c63[_0x1c0869(0x1ae)][_0x1c0869(0x1bc)](_0x19120b=>_0x19120b!=='id')||_0x33156c['sqqUy']:_0x33156c[_0x1c0869(0xad)])+_0x1c0869(0x1c4)+_0x211dfd+_0x1c0869(0x225)+_0x211dfd+_0x1c0869(0x141)+_0x211dfd+_0x1c0869(0x209)+(_0x162c63[_0x1c0869(0xe8)]?_0x162c63[_0x1c0869(0xe8)][_0x1c0869(0x12b)](0x0,0x4)[_0x1c0869(0x18e)](_0x33156c['ffRoi']):_0x171b85[_0x1c0869(0x218)]['slice'](0x0,0x4)['join'](_0x33156c[_0x1c0869(0x1ff)]))+'\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_with_ordering:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22id\x22,\x20\x22'+_0x211dfd+_0x1c0869(0xdd)+(_0x171b85[_0x1c0869(0x218)][0x1]||_0x211dfd)+'\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22direction\x22:\x20\x22ASC\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22column\x22:\x20\x22'+_0x211dfd+'\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22direction\x22:\x20\x22ASC\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x4a2a9f+'/lookup:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Cek\x20apakah\x20ada\x20where\x20clause\x20(format\x20baru)\x20atau\x20selected_tag\x20(format\x20lama)\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Format\x20baru\x20dengan\x20where\x20clause\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Using\x20new\x20format\x20with\x20where\x20clause\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x0a\x20\x20\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+(_0x162c63[_0x1c0869(0x1ae)]?_0x162c63['all']['find'](_0x2232bb=>_0x2232bb!=='id')||_0x1c0869(0x16a):_0x1c0869(0x16a))+_0x1c0869(0x1e3)+_0x211dfd+'\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example_advanced:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22logic\x22:\x20\x22OR\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22conditions\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0x211dfd+'\x22,\x20\x22operator\x22:\x20\x22like\x22,\x20\x22value\x22:\x20\x22%Portal%\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0x211dfd+_0x1c0869(0xb1)+(_0x162c63[_0x1c0869(0xe8)]?_0x162c63['textFields']['slice'](0x0,0x4)[_0x1c0869(0x18e)]('\x22,\x20\x22'):_0x171b85['fieldName'][_0x1c0869(0x12b)](0x0,0x4)[_0x1c0869(0x18e)](_0x33156c['ffRoi']))+'\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20select\x20fields\x20jika\x20ada\x20(support\x20SQL\x20expressions)\x0a\x20\x20\x20\x20\x20\x20if\x20(req.body.select\x20&&\x20Array.isArray(req.body.select))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20validFields\x20=\x20'+JSON['stringify'](_0x171b85['fieldName']||[])+_0x1c0869(0xd3)+_0xb07a89+_0x1c0869(0x214)+_0x4a2a9f+_0x1c0869(0x171)+_0xb07a89+_0x1c0869(0x116)+_0xb07a89+'.getStaticLookupData(selectedTag);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Static\x20lookup\x20results:\x20${list.length}\x20records\x20found`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20selectedTag:\x20selectedTag,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x4a2a9f+'\x20static\x20lookup:\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x4a2a9f+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateReadFunction(_0x202917,_0x4cb9c2,_0x54db95,_0x2ee012=null){const _0xe65a39=a0_0x59b1;if(!_0x2ee012){const _0x2374b8=FileUtils['toCamelCase'](_0x4cb9c2);_0x2ee012=_0x2374b8+'Model';}return'\x0a//\x20POST\x20/api/'+_0x202917+'/'+_0x4cb9c2+'/read\x20-\x20Manual\x20pagination\x20endpoint\x0arouter.post(\x27/read\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x4cb9c2+'/read:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Deteksi\x20mode:\x20paginasi\x20(page\x20dikirim)\x20atau\x20non-paginasi\x20(page\x20tidak\x20dikirim)\x0a\x20\x20\x20\x20const\x20paginate\x20=\x20req.body.page\x20!==\x20undefined;\x0a\x20\x20\x20\x20const\x20page\x20=\x20paginate\x20?\x20parseInt(req.body.page,\x2010)\x20:\x20null;\x0a\x20\x20\x20\x20const\x20perPage\x20=\x20paginate\x20?\x20parseInt(req.body.per_page\x20||\x2010,\x2010)\x20:\x20null;\x0a\x20\x20\x20\x20const\x20limit\x20=\x20!paginate\x20?\x20Math.min(Math.max(parseInt(req.body.limit\x20||\x201000,\x2010),\x201),\x205000)\x20:\x20null;\x0a\x20\x20\x20\x20const\x20searchValue\x20=\x20req.body.search_value\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20const\x20searchBy\x20=\x20req.body.search_by\x20||\x20\x27'+(_0x54db95[_0xe65a39(0xbb)]||_0x54db95[_0xe65a39(0x218)][0x0]||'id')+_0xe65a39(0x1b6)+JSON['stringify'](_0x54db95[_0xe65a39(0x218)]||[])+_0xe65a39(0x180)+_0x2ee012+'.getList(options);\x0a\x0a\x20\x20\x20\x20//\x20Format\x20response\x20berdasarkan\x20mode\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20totalPages\x20=\x20Math.ceil(result.totalRecords\x20/\x20perPage);\x0a\x20\x20\x20\x20\x20\x20const\x20hasNext\x20=\x20page\x20<\x20totalPages;\x0a\x20\x20\x20\x20\x20\x20const\x20hasPrevious\x20=\x20page\x20>\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20result.data\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20result.data\x20?\x20result.data.length\x20:\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20pagination:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20current_page:\x20page,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20per_page:\x20perPage,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20total_records:\x20result.totalRecords\x20||\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20total_pages:\x20totalPages,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20has_next:\x20hasNext,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20has_previous:\x20hasPrevious\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20result.data\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20result.data\x20?\x20result.data.length\x20:\x200\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x4cb9c2+'\x20list:\x27,\x20error);\x0a\x20\x20\x20\x20const\x20statusCode\x20=\x20error.statusCode\x20||\x20500;\x0a\x20\x20\x20\x20return\x20res.status(statusCode).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20statusCode\x20===\x20400\x20?\x20\x27Bad\x20Request\x27\x20:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20statusCode\x20===\x20400\x20?\x20error.message\x20:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x4cb9c2+_0xe65a39(0x190);}function generateCreateCompositeFunction(_0x142997,_0x1e8d61,_0x268c91,_0x2fecf3=null){const _0x5d07f6=a0_0x59b1,_0x475d3c={'KApCn':_0x5d07f6(0x100),'MrpxI':_0x5d07f6(0x1d1)};if(!_0x2fecf3){const _0x285e39=FileUtils['toCamelCase'](_0x1e8d61);_0x2fecf3=_0x285e39+_0x5d07f6(0x144);}const _0x2b4a2c=_0x268c91[_0x5d07f6(0x103)]&&_0x268c91[_0x5d07f6(0x103)]['enabled'],_0x49825d=_0x2b4a2c?_0x268c91['masterDetail'][_0x5d07f6(0x1a2)]:null,_0x324d9b=_0x49825d?_0x49825d[_0x5d07f6(0x1d8)]('.')['pop']():_0x475d3c['KApCn'],_0x11d625=_0x1e8d61['replace'](/-/g,'_'),_0x22a2e9=_0x268c91['masterDetail']?.['detailConfig']?.[_0x5d07f6(0x1dd)]?.[_0x5d07f6(0xb9)]?.[_0x5d07f6(0x186)]||'',_0x4a8cf0=_0x22a2e9[_0x5d07f6(0x1d8)]('*')[_0x5d07f6(0x1f5)](_0x4f6e05=>_0x4f6e05['trim']()),_0x13116d=_0x268c91['masterDetail']?.['headerCalculations']?.['total_qty']?.[_0x5d07f6(0x1b1)]?.['replace']('items.','')||'',_0x44a8cd=_0x4a8cf0[0x0]||_0x13116d,_0x409be9=_0x4a8cf0[0x1]||_0x475d3c['MrpxI'];return'\x0a//\x20POST\x20/api/'+_0x142997+'/'+_0x1e8d61+'/create-composite\x20-\x20Composite\x20create\x20'+(_0x2b4a2c?_0x5d07f6(0x1e6):'')+_0x5d07f6(0x151)+_0x1e8d61+_0x5d07f6(0x1ac)+_0x11d625+_0x5d07f6(0x1ce)+_0x11d625+_0x5d07f6(0x1cd)+(_0x2b4a2c?'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x11d625+_0x5d07f6(0x10f)+_0x324d9b+_0x5d07f6(0x181):_0x5d07f6(0xb3)+_0x11d625+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field1\x22:\x20\x22value1\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field2\x22:\x20\x22value2\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}')+_0x5d07f6(0x20c)+_0x11d625+';\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20header\x20data\x20dengan\x20constraint\x20(termasuk\x20hash)\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x2fecf3+_0x5d07f6(0x159)+(_0x2b4a2c?'delete\x20headerDataForValidation.'+_0x324d9b+';':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x2fecf3+_0x5d07f6(0xfc)+(_0x2b4a2c?_0x5d07f6(0xc6)+_0x324d9b+_0x5d07f6(0x19f)+_0x324d9b+')\x20||\x20data.'+_0x324d9b+_0x5d07f6(0xf5)+_0x324d9b+'\x22\x20must\x20be\x20a\x20non-empty\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Auto-calculate\x20totals\x20jika\x20ada\x20konfigurasi\x0a\x20\x20\x20\x20'+(_0x268c91['masterDetail']['headerCalculations']?'\x0a\x20\x20\x20\x20const\x20headerCalc\x20=\x20'+JSON['stringify'](_0x268c91['masterDetail']['headerCalculations'])+_0x5d07f6(0x216)+_0x324d9b+_0x5d07f6(0xc3)+_0x324d9b+'.reduce((sum,\x20item)\x20=>\x20sum\x20+\x20(Number(item[qtyField])\x20||\x200),\x200);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20'+(_0x44a8cd?'if\x20(headerCalc.total_amount)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Calculate\x20total_amount\x20as\x20sum\x20of\x20('+_0x44a8cd+'\x20*\x20'+_0x409be9+')\x20from\x20all\x20items\x0a\x20\x20\x20\x20\x20\x20data.total_amount\x20=\x20data.'+_0x324d9b+'.reduce((sum,\x20item)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20qty\x20=\x20Number(item.'+_0x44a8cd+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20price\x20=\x20Number(item.'+_0x409be9+_0x5d07f6(0x166):'//\x20WARNING:\x20headerCalculations.total_amount\x20skipped\x20—\x20no\x20qty\x20field\x20configured\x20(set\x20autoCalculateFields.total_amount.formula\x20or\x20headerCalculations.total_qty.source)')+_0x5d07f6(0xf9):'')+_0x5d07f6(0xf7):'')+'\x0a\x0a\x20\x20\x20\x20//\x20Build\x20eventContext\x20untuk\x20composite\x20hooks\x20(jika\x20component\x20engine\x20tersedia)\x0a\x20\x20\x20\x20let\x20eventContext\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x268c91[_0x5d07f6(0x1aa)]+_0x5d07f6(0xc1)+_0x49825d+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+(_0x2b4a2c?_0x268c91[_0x5d07f6(0x103)][_0x5d07f6(0x19e)]:'')+_0x5d07f6(0xe6)+_0x2fecf3+_0x5d07f6(0xcc)+_0x1e8d61+'\x20composite\x20create\x20successful`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(201).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x1e8d61+_0x5d07f6(0x1f1)+(_0x2b4a2c?_0x5d07f6(0x110):'')+_0x5d07f6(0x206)+_0x1e8d61+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20database\x20errors\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723503\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20creating\x20'+_0x1e8d61+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateUpdateCompositeFunction(_0x2342db,_0x301c48,_0x4f728d,_0x425f06=null){const _0x963723=a0_0x59b1,_0x58a5cb={'hUuJB':_0x963723(0x100),'cAbFu':_0x963723(0x1e6),'jdvKz':'\x20(with\x20detail\x20items)'};if(!_0x425f06){const _0xe985e3=FileUtils['toCamelCase'](_0x301c48);_0x425f06=_0xe985e3+'Model';}const _0x57fda1=_0x4f728d[_0x963723(0x103)]&&_0x4f728d[_0x963723(0x103)][_0x963723(0x10a)],_0x3f3fcc=_0x57fda1?_0x4f728d['masterDetail'][_0x963723(0x1a2)]:null,_0x166cbb=_0x3f3fcc?_0x3f3fcc['split']('.')['pop']():_0x58a5cb['hUuJB'],_0x429124=_0x301c48['replace'](/-/g,'_'),_0x47cdd5=_0x4f728d[_0x963723(0xbb)]||'id',_0xc47327=_0x4f728d[_0x963723(0xc0)]?_0x963723(0xbd)+_0x425f06+_0x963723(0x129)+_0x47cdd5+'\x27,\x20value:\x20data.'+_0x47cdd5+_0x963723(0x1c0):'';return'\x0a//\x20POST\x20/api/'+_0x2342db+'/'+_0x301c48+_0x963723(0x1c3)+(_0x57fda1?_0x58a5cb['cAbFu']:'')+'\x0arouter.post(\x27/update-composite\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20console.log(\x27Request\x20body\x20'+_0x301c48+'/update-composite:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x20structure\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20!req.body.'+_0x429124+')\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20must\x20have\x20property\x20\x22'+_0x429124+_0x963723(0x1cd)+(_0x57fda1?_0x963723(0xb3)+_0x429124+_0x963723(0x125)+_0x47cdd5+_0x963723(0xe1)+_0x166cbb+'\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x201,\x20\x22field\x22:\x20\x22value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x202,\x20\x22field\x22:\x20\x22value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}':_0x963723(0xb3)+_0x429124+_0x963723(0x125)+_0x47cdd5+'\x22:\x20\x22existing-id\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field1\x22:\x20\x22value1\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field2\x22:\x20\x22value2\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}')+_0x963723(0x20c)+_0x429124+';\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20primary\x20key\x0a\x20\x20\x20\x20if\x20(!data.'+_0x47cdd5+_0x963723(0x1fa)+_0x47cdd5+_0x963723(0x19c)+_0xc47327+_0x963723(0x163)+_0x425f06+_0x963723(0x12f)+(_0x57fda1?_0x963723(0xbc)+_0x166cbb+';':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x425f06+'.validateData(headerDataForValidation,\x20\x27update\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Merge\x20sanitized\x20data\x20(termasuk\x20hash\x20result)\x20kembali\x20ke\x20data\x0a\x20\x20\x20\x20\x20\x20Object.assign(data,\x20validation.sanitizedData);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20'+(_0x57fda1?_0x963723(0x11d)+_0x166cbb+_0x963723(0x195)+_0x166cbb+_0x963723(0x1cc)+_0x166cbb+'))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x166cbb+'\x22\x20must\x20be\x20an\x20object\x20with\x20structure\x20{insert:\x20[],\x20update:\x20[],\x20delete:\x20[]}\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20structure:\x20insert,\x20update,\x20delete\x20harus\x20array\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20operations\x20=\x20data.'+_0x166cbb+';\x0a\x20\x20\x20\x20\x20\x20if\x20(operations.insert\x20&&\x20!Array.isArray(operations.insert))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x166cbb+'.insert\x22\x20must\x20be\x20an\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20if\x20(operations.update\x20&&\x20!Array.isArray(operations.update))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x166cbb+_0x963723(0x19a)+_0x166cbb+'.delete\x22\x20must\x20be\x20an\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20TIDAK\x20melakukan\x20auto-calculation\x20di\x20endpoint\x0a\x20\x20\x20\x20\x20\x20//\x20Calculation\x20akan\x20dilakukan\x20di\x20Model\x20setelah\x20semua\x20operasi\x20database\x20selesai\x0a\x20\x20\x20\x20\x20\x20//\x20Model\x20akan\x20SELECT\x20ulang\x20semua\x20items\x20dan\x20hitung\x20total\x20dari\x20hasil\x20akhir\x0a\x20\x20\x20\x20\x20\x20console.log(\x27CompositeUpdate\x20operations:\x27,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20delete_count:\x20(operations.delete\x20||\x20[]).length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20update_count:\x20(operations.update\x20||\x20[]).length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20insert_count:\x20(operations.insert\x20||\x20[]).length\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20':'')+_0x963723(0x1a6)+_0x4f728d['tableName']+_0x963723(0xc1)+_0x3f3fcc+_0x963723(0xc4)+(_0x57fda1?_0x4f728d['masterDetail'][_0x963723(0x19e)]:'')+_0x963723(0xfa)+_0x425f06+'.updateComposite(data,\x20eventContext);\x0a\x0a\x20\x20\x20\x20console.log(`'+_0x301c48+_0x963723(0x17c)+_0x47cdd5+_0x963723(0x1d6)+_0x47cdd5+_0x963723(0xd0)+_0x301c48+'\x20data\x20successfully\x20updated'+(_0x57fda1?_0x58a5cb['jdvKz']:'')+_0x963723(0x1b5)+_0x301c48+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20\x22Data\x20tidak\x20ditemukan\x22\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Data\x20tidak\x20ditemukan\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x301c48+'\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20database\x20errors\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723503\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20updating\x20'+_0x301c48+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateReadCompositeFunction(_0x339043,_0x241588,_0x241d08,_0x5d33eb=null){const _0x43f53e=a0_0x59b1;if(!_0x5d33eb){const _0x1ae923=FileUtils[_0x43f53e(0x222)](_0x241588);_0x5d33eb=_0x1ae923+_0x43f53e(0x144);}const _0x51033b=JSON[_0x43f53e(0x212)](_0x241d08[_0x43f53e(0x218)]||[]);return'\x0a//\x20POST\x20/api/'+_0x339043+'/'+_0x241588+_0x43f53e(0x1f7)+_0x241588+_0x43f53e(0x1a1)+(_0x241d08[_0x43f53e(0xbb)]||'id')+_0x43f53e(0xd5)+_0x5d33eb+'.readComposite(req.body);\x0a\x0a\x20\x20\x20\x20console.log(`'+_0x241588+'\x20composite\x20read\x20successful:\x20${result.count\x20||\x200}\x20record(s)`);\x0a\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20read\x20'+_0x241588+':\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20reading\x20'+_0x241588+_0x43f53e(0x104);}function generateWorkflowFunction(_0x595c2e,_0x45ccb7,_0xd417f8,_0x4e07a9=null){const _0x5a48dd=a0_0x59b1;if(!_0x4e07a9){const _0x3959c2=FileUtils['toCamelCase'](_0x45ccb7);_0x4e07a9=_0x3959c2+_0x5a48dd(0x144);}const _0x498875=_0xd417f8['workflow']?JSON['stringify'](_0xd417f8['workflow']):'{}',_0x5064d8=_0xd417f8[_0x5a48dd(0xc0)]?_0x5a48dd(0x102)+_0x4e07a9+_0x5a48dd(0x1d0)+_0x45ccb7+_0x5a48dd(0x210):'';return _0x5a48dd(0xb4)+_0x595c2e+'/'+_0x45ccb7+_0x5a48dd(0xd8)+_0x45ccb7+'\x0arouter.post(\x27/change-status\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20required\x20fields:\x20id/primary\x20key\x20dan\x20status\x0a\x20\x20\x20\x20const\x20primaryKey\x20=\x20\x27'+(_0xd417f8[_0x5a48dd(0xbb)]||'id')+_0x5a48dd(0x1ab)+_0x5064d8+'\x0a\x20\x20\x20\x20const\x20workflowConfig\x20=\x20'+_0x498875+';\x0a\x20\x20\x20\x20workflowConfig._project\x20=\x20\x27'+_0x595c2e+_0x5a48dd(0x1ea)+_0xd417f8[_0x5a48dd(0x1aa)]+_0x5a48dd(0x12a)+_0x4e07a9+_0x5a48dd(0xed)+_0x4e07a9+'.changeStatusData(req.body,\x20workflowConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20CHANGE-STATUS\x20completed\x20without\x20component\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20CHANGE-STATUS\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x45ccb7+'\x20status\x20changed:\x20${result.workflow.previousStatus}\x20→\x20${result.workflow.newStatus}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20`Status\x20changed\x20from\x20${result.workflow.previousStatus}\x20to\x20${result.workflow.newStatus}`,\x0a\x20\x20\x20\x20\x20\x20data:\x20result.data,\x0a\x20\x20\x20\x20\x20\x20workflow:\x20result.workflow,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20change-status\x20'+_0x45ccb7+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Status\x20transition\x20not\x20allowed\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20422\x20||\x20error.message.includes(\x27Cannot\x20change\x20status\x27)\x20||\x20error.message.includes(\x27No\x20transitions\x20defined\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(422).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Status\x20transition\x20not\x20allowed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Concurrent\x20modification\x20(optimistic\x20concurrency\x20check\x20via\x20status\x20guard\x20clause)\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x27WORKFLOW_CONCURRENT_MODIFICATION\x27\x20||\x20error.statusCode\x20===\x20409)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Concurrent\x20modification\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validation\x20errors\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27is\x20required\x20for\x27)\x20||\x20error.message.includes(\x27is\x20not\x20a\x20valid\x20field\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Hook\x20execution\x20failed\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27hook\x20failed\x27)\x20||\x20error.message.includes(\x27onBefore\x27)\x20||\x20error.message.includes(\x27onAfter\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(502).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Workflow\x20hook\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Record\x20not\x20found\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Record\x20not\x20found\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x45ccb7+_0x5a48dd(0x1d4);}function createPostgresSubmoduleTemplate(_0x24a14d,_0x31889d,_0x26a881){const _0x1b9c6f=a0_0x59b1,_0x3fa7c4={'qIJUh':function(_0x45d618,_0xfe010c){return _0x45d618===_0xfe010c;},'GXlYq':'null','AHrkv':_0x1b9c6f(0x178),'KtdCs':function(_0x1195fc,_0x32beb5,_0x26ccaa){return _0x1195fc(_0x32beb5,_0x26ccaa);},'xDrcS':function(_0x1ed027,_0x599d8e){return _0x1ed027!==_0x599d8e;}},_0x272736=FileUtils['toPascalCase'](_0x31889d),_0x17d969=new Date()[_0x1b9c6f(0x164)]()[_0x1b9c6f(0x20e)]('T','\x20')['replace'](/\.\d{3}Z$/,''),_0x3b5cda=_0x26a881['_extendedFields']||{'all':_0x26a881[_0x1b9c6f(0x218)]||[]},_0x54cd5d=FileUtils['detectTextColumn'](_0x26a881[_0x1b9c6f(0x218)]||[]),_0x16b0aa=FileUtils['toCamelCase'](_0x31889d),_0x2e8c19=_0x16b0aa+_0x1b9c6f(0x144),_0x322ad6=_0x26a881['kafka']&&_0x3fa7c4['qIJUh'](_0x26a881['kafka'][_0x1b9c6f(0x10a)],!![]),_0xc3bba6=buildEndpointFunctions(_0x24a14d,_0x31889d,_0x26a881,_0x3b5cda,_0x54cd5d,_0x2e8c19,_0x322ad6),_0x58ec79=_0x322ad6?_0x1b9c6f(0xe4)+JSON[_0x1b9c6f(0x212)](_0x26a881[_0x1b9c6f(0x15e)]||{'enabled':![]})+';\x0a':'';return'const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20router\x20=\x20express.Router();\x0aconst\x20'+_0x2e8c19+'\x20=\x20require(\x27../../models/'+_0x24a14d+'/'+_0x31889d+'\x27);\x0a'+_0x58ec79+'\x0a\x0a//\x20Component\x20Engine\x20untuk\x20event\x20lifecycle\x20(optional)\x0alet\x20componentEngine\x20=\x20null;\x0alet\x20ContextBuilder\x20=\x20null;\x0atry\x20{\x0a\x20\x20//\x20Hanya\x20load\x20component\x20engine\x20jika\x20payload\x20memiliki\x20components\x0a\x20\x20const\x20hasComponents\x20=\x20'+JSON['stringify'](_0x26a881[_0x1b9c6f(0x1a7)])+'\x20&&\x20Array.isArray('+JSON['stringify'](_0x26a881['components'])+')\x20&&\x20'+JSON['stringify'](_0x26a881['components'])+_0x1b9c6f(0xeb)+_0x26a881['tableName']+_0x1b9c6f(0x1d3)+JSON['stringify'](_0x26a881[_0x1b9c6f(0x218)])+_0x1b9c6f(0x1ee)+(_0x26a881[_0x1b9c6f(0x1ec)]?'\x27'+_0x26a881[_0x1b9c6f(0x1ec)]+'\x27':_0x1b9c6f(0x20d))+_0x1b9c6f(0xde)+(_0x26a881[_0x1b9c6f(0x1ca)]?JSON[_0x1b9c6f(0x212)](_0x26a881[_0x1b9c6f(0x1ca)]):_0x1b9c6f(0x20d))+',\x0a\x20\x20\x20\x20\x20\x20fieldLabels:\x20'+(_0x26a881[_0x1b9c6f(0x220)]?JSON[_0x1b9c6f(0x212)](_0x26a881[_0x1b9c6f(0x220)]):_0x1b9c6f(0x20d))+',\x0a\x20\x20\x20\x20\x20\x20components:\x20'+JSON[_0x1b9c6f(0x212)](_0x26a881[_0x1b9c6f(0x1a7)])+_0x1b9c6f(0x10d)+(_0x26a881[_0x1b9c6f(0x1cb)]?JSON[_0x1b9c6f(0x212)](_0x26a881['importConfig']):_0x1b9c6f(0x20d))+_0x1b9c6f(0x1d2)+(_0x26a881['adjustConfig']?JSON[_0x1b9c6f(0x212)](_0x26a881[_0x1b9c6f(0x15c)]):_0x3fa7c4['GXlYq'])+',\x0a\x20\x20\x20\x20\x20\x20workflowConfig:\x20'+(_0x26a881[_0x1b9c6f(0xaf)]?JSON['stringify'](_0x26a881[_0x1b9c6f(0xaf)]):_0x1b9c6f(0x20d))+_0x1b9c6f(0x109)+(_0x26a881[_0x1b9c6f(0xfb)]?JSON['stringify'](_0x26a881['uploadConfig']):_0x3fa7c4['GXlYq'])+_0x1b9c6f(0x1f8)+(_0x26a881['requestScope']?JSON['stringify'](_0x26a881['requestScope']):_0x3fa7c4['GXlYq'])+'\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20componentEngine.loadConfigurationFromObject(componentConfig).then(result\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(result.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Component\x20configuration\x20loaded\x20for\x20'+_0x24a14d+'/'+_0x31889d+_0x1b9c6f(0x224)+_0x24a14d+'/'+_0x31889d+_0x1b9c6f(0x13f)+_0x24a14d+'/'+_0x31889d+_0x1b9c6f(0xd2)+_0x24a14d+'/'+_0x31889d+',\x20running\x20without\x20events`);\x0a}\x0a\x0a/**\x0a\x20*\x20'+_0x272736+_0x1b9c6f(0xda)+_0x17d969+'\x0a\x20*\x0a\x20*\x20Endpoints\x20untuk\x20'+_0x31889d+'\x20dengan\x20actions:\x20'+getEnabledActions(_0x26a881)['join'](',\x20')+_0x1b9c6f(0x19d)+_0x26a881['tableName']+_0x1b9c6f(0x185)+(_0x26a881['fieldName']?_0x26a881[_0x1b9c6f(0x218)]['length']:0x0)+_0x1b9c6f(0xe7)+_0x24a14d+'/'+_0x31889d+_0x1b9c6f(0x1fc)+(_0x26a881['fieldValidation']?JSON['stringify'](_0x26a881['fieldValidation']['filter'](_0x2e3b3b=>_0x2e3b3b[_0x1b9c6f(0x204)]&&_0x2e3b3b[_0x1b9c6f(0x204)]['autoGenerate'])[_0x1b9c6f(0x1f5)](_0x9dfaa3=>_0x9dfaa3['name'])):'[]')+_0x1b9c6f(0x215)+_0x26a881['fieldName'][_0x1b9c6f(0x1e8)](_0x235a00=>_0x235a00!=='id')['slice'](0x0,0x1)['join'](_0x3fa7c4['AHrkv'])+_0x1b9c6f(0xb6)+(_0x26a881['primaryKey']||'id')+'\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!req.body[primaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20is\x20required\x20for\x20update`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Error\x20validating\x20payload\x20for\x20${req.path}:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x20\x20next();\x0a});\x0a'+_0x3fa7c4['KtdCs'](buildRequestScopeMiddleware,_0x26a881,_0x31889d)+'\x0a'+_0xc3bba6+'\x0a\x0a'+(_0x26a881[_0x1b9c6f(0x1fd)]?.['info']!==![]?'//\x20Endpoint\x20info\x20—\x20self-documenting\x20API\x0arouter.get(\x27/info\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20actions\x20=\x20'+JSON['stringify']({'datatables':!!_0x26a881[_0x1b9c6f(0x1fd)]?.[_0x1b9c6f(0x1b0)],'read':!!_0x26a881[_0x1b9c6f(0x1fd)]?.[_0x1b9c6f(0x1e1)],'first':!!_0x26a881[_0x1b9c6f(0x1fd)]?.['first'],'create':!!_0x26a881['action']?.['create'],'update':!!_0x26a881[_0x1b9c6f(0x1fd)]?.['update'],'delete':!!_0x26a881['action']?.['delete'],'lookup':!!_0x26a881[_0x1b9c6f(0x1fd)]?.['lookup'],'export':!!_0x26a881[_0x1b9c6f(0x1fd)]?.[_0x1b9c6f(0x14f)],'import':!!_0x26a881[_0x1b9c6f(0x1fd)]?.['import'],'workflow':!!_0x26a881['action']?.['workflow'],'info':_0x3fa7c4['xDrcS'](_0x26a881[_0x1b9c6f(0x1fd)]?.[_0x1b9c6f(0x10c)],![])})+_0x1b9c6f(0x1e0)+_0x2e8c19+_0x1b9c6f(0x1e9)+_0x31889d+'\x27,\x0a\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0x24a14d+_0x1b9c6f(0x161)+_0x17d969+'\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x31889d+'\x20info:\x27,\x20error);\x0a\x20\x20\x20\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20endpoint\x20information\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});':'//\x20Endpoint\x20/info\x20dinonaktifkan\x20via\x20action.info\x20=\x20false')+'\x0a\x0a//\x20Health\x20check\x20endpoint\x0arouter.get(\x27/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20res.json({\x0a\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20endpoint:\x20\x27'+_0x31889d+_0x1b9c6f(0xea);}function createPostgresMainModuleTemplate(_0x2318bf){const _0x19fee2=a0_0x59b1,_0x1321c3=FileUtils['toPascalCase'](_0x2318bf),_0x34da01=FileUtils['toCamelCase'](_0x2318bf),_0x9d9c08=new Date()[_0x19fee2(0x164)]()[_0x19fee2(0x20e)]('T','\x20')[_0x19fee2(0x20e)](/\.\d{3}Z$/,'');return _0x19fee2(0x1f4)+_0x1321c3+'\x20Module\x20-\x20Auto-generated\x20on\x20'+_0x9d9c08+'\x0a\x20*\x0a\x20*\x20Fungsi\x20untuk\x20mengeksekusi\x20modul\x20'+_0x2318bf+_0x19fee2(0x21b)+_0x1321c3+_0x19fee2(0x137)+_0x2318bf+_0x19fee2(0x21f)+_0x2318bf+_0x19fee2(0xee)+_0x2318bf+'/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20healthInfo\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString().replace(\x27T\x27,\x20\x27\x20\x27).replace(/\x5c.\x5cd{3}Z$/,\x20\x27\x27),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20service:\x20\x27'+_0x2318bf+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20uptime:\x20process.uptime(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20memory:\x20process.memoryUsage(),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20system:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20platform:\x20process.platform,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nodeVersion:\x20process.version,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pid:\x20process.pid\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.json(healthInfo);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Service\x20info\x20endpoint\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/api/'+_0x2318bf+'/info\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20name:\x20\x27'+_0x1321c3+'\x20API\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20description:\x20\x27Auto-generated\x20API\x20module\x20for\x20'+_0x2318bf+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20documentation:\x20\x27See\x20individual\x20endpoint\x20documentation\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20generated:\x20\x27'+_0x9d9c08+_0x19fee2(0x14c)+_0x2318bf+'\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20path.join(workingDir,\x20\x27'+_0x2318bf+'\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Ensure\x20modules\x20directory\x20exists\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!fs.existsSync(modulesDir))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fs.mkdirSync(modulesDir,\x20{\x20recursive:\x20true\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Created\x20modules\x20directory:\x20${modulesDir}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Read\x20dan\x20load\x20semua\x20endpoint\x20files\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20files\x20=\x20fs.readdirSync(modulesDir);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointFiles\x20=\x20files.filter(file\x20=>\x20file.endsWith(\x27.js\x27));\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(endpointFiles.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`No\x20endpoint\x20files\x20found\x20in\x20${modulesDir}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Add\x20endpoint\x20files\x20to\x20enable\x20API\x20functionality`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x20event:\x20\x27endpoints_loading\x27,\x20count:\x20endpointFiles.length\x20},\x20`Loading\x20${endpointFiles.length}\x20endpoint(s)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20setiap\x20endpoint\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20file\x20of\x20endpointFiles)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointName\x20=\x20path.basename(file,\x20\x27.js\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointPath\x20=\x20path.join(modulesDir,\x20file);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Clear\x20module\x20cache\x20untuk\x20development\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(require.cache[endpointPath])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20delete\x20require.cache[endpointPath];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointRouter\x20=\x20require(endpointPath);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!endpointRouter)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.warn(`Endpoint\x20${endpointName}\x20did\x20not\x20export\x20a\x20router`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20endpoint\x20dengan\x20prefix\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endpointPrefix\x20=\x20`/api/'+_0x2318bf+_0x19fee2(0x1eb)+_0x2318bf+'\x27,\x20endpointName,\x20exportConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(exportError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27export_registration_error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20exportError.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Export\x20registration\x20failed\x20for\x20${endpointName}:\x20${exportError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20import\x20routes\x20untuk\x20endpoint\x20ini\x20(auto-detect\x20dari\x20embedded\x20config)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20importConfig\x20=\x20extractImportConfigFromEndpoint(endpointPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(importConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ImportHandler.registerRoutes(app,\x20\x27'+_0x2318bf+_0x19fee2(0x17e)+_0x2318bf+'\x27,\x20endpointName,\x20uploadConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27upload_routes_registered\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fields:\x20Object.keys(uploadConfig.fields\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Upload\x20routes\x20registered\x20for\x20${endpointName}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(uploadError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27upload_registration_error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20uploadError.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Upload\x20registration\x20failed\x20for\x20${endpointName}:\x20${uploadError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(endpointError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20loading\x20endpoint\x20${file}:`,\x20endpointError.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Continue\x20loading\x20other\x20endpoints\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(dirError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20reading\x20modules\x20directory\x20${modulesDir}:`,\x20dirError.message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Register\x20cleanup\x20route\x20(optional\x20admin\x20endpoint)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20ExportHandler.registerCleanupRoute(app);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(cleanupError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27cleanup_route_error\x27,\x20error:\x20cleanupError.message\x20},\x20\x27Export\x20cleanup\x20route\x20registration\x20failed\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Default\x20root\x20endpoint\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Hook\x20untuk\x20mount\x20middleware\x20tambahan\x20sebelum\x20404\x20handler\x0a\x20\x20\x20\x20\x20\x20//\x20Digunakan\x20oleh\x20workbench\x20UI\x20dan\x20middleware\x20eksternal\x20lainnya\x0a\x20\x20\x20\x20\x20\x20if\x20(config.onAppReady\x20&&\x20typeof\x20config.onAppReady\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20config.onAppReady(app);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20404\x20handler\x20untuk\x20unknown\x20routes\x0a\x20\x20\x20\x20\x20\x20app.use((req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Global\x20error\x20handling\x20middleware\x0a\x20\x20\x20\x20\x20\x20app.use((err,\x20req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Global\x20Error\x20Handler\x20-\x20${req.method}\x20${req.url}:`,\x20err);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20specific\x20error\x20types\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err\x20instanceof\x20SyntaxError\x20&&\x20err.status\x20===\x20400\x20&&\x20\x27body\x27\x20in\x20err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20JSON\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27The\x20payload\x20sent\x20is\x20not\x20a\x20valid\x20JSON\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20err.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20other\x20errors\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!res.headersSent)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20statusCode\x20=\x20err.statusCode\x20||\x20err.status\x20||\x20500;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20errorResponse\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20err.name\x20||\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20err.message\x20||\x20\x27An\x20error\x20occurred\x20on\x20the\x20server\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Add\x20stack\x20trace\x20in\x20development\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(process.env.NODE_ENV\x20!==\x20\x27production\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errorResponse.stack\x20=\x20err.stack;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(statusCode).json(errorResponse);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20next(err);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Start\x20server\x0a\x20\x20\x20\x20\x20\x20const\x20server\x20=\x20app.listen(port,\x20serverAddress,\x20(err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Failed\x20to\x20start\x20${moduleNameCapitalized}\x20server:`,\x20err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reject(err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Determine\x20display\x20URL\x20based\x20on\x20serverAddress\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20displayHost\x20=\x20(serverAddress\x20===\x20\x270.0.0.0\x27\x20||\x20!serverAddress)\x20?\x20\x27localhost\x27\x20:\x20serverAddress;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20logServerReady({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20port,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0x2318bf+_0x19fee2(0x139)+_0x2318bf+_0x19fee2(0x1ba)+_0x2318bf+'/info`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseUrl:\x20`http://${displayHost}:${port}`\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Execute\x20plugin\x20onAfterServerStart\x20hook\x20(jika\x20ada)\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(plugin\x20&&\x20plugin.onAfterServerStart)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20plugin.onAfterServerStart(app,\x20config);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(pluginError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27plugin_after_start_error\x27,\x20error:\x20pluginError.message\x20},\x20\x27Plugin\x20onAfterServerStart\x20failed\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Graceful\x20shutdown\x20handling\x0a\x20\x20\x20\x20\x20\x20const\x20gracefulShutdown\x20=\x20(signal)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`\x5cnReceived\x20${signal},\x20starting\x20graceful\x20shutdown...`);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20server.close((err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20during\x20server\x20shutdown:\x27,\x20err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(1);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Server\x20closed\x20successfully\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Goodbye!\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Force\x20shutdown\x20after\x2010\x20seconds\x0a\x20\x20\x20\x20\x20\x20\x20\x20setTimeout(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Forced\x20shutdown\x20after\x20timeout\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(1);\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x2010000);\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Handle\x20shutdown\x20signals\x0a\x20\x20\x20\x20\x20\x20process.on(\x27SIGINT\x27,\x20()\x20=>\x20gracefulShutdown(\x27SIGINT\x27));\x0a\x20\x20\x20\x20\x20\x20process.on(\x27SIGTERM\x27,\x20()\x20=>\x20gracefulShutdown(\x27SIGTERM\x27));\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Handle\x20uncaught\x20exceptions\x0a\x20\x20\x20\x20\x20\x20process.on(\x27uncaughtException\x27,\x20(error)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Uncaught\x20Exception:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20\x20\x20gracefulShutdown(\x27uncaughtException\x27);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20process.on(\x27unhandledRejection\x27,\x20(reason,\x20promise)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Unhandled\x20Rejection\x20at:\x27,\x20promise,\x20\x27reason:\x27,\x20reason);\x0a\x20\x20\x20\x20\x20\x20\x20\x20gracefulShutdown(\x27unhandledRejection\x27);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Store\x20server\x20reference\x20untuk\x20testing/management\x0a\x20\x20\x20\x20\x20\x20if\x20(config.onServerReady\x20&&\x20typeof\x20config.onServerReady\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20config.onServerReady(server,\x20app);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Fatal\x20error\x20in\x20${moduleNameCapitalized}\x20module:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20reject(error);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Promise\x20tidak\x20akan\x20pernah\x20resolve\x20untuk\x20menjaga\x20server\x20tetap\x20berjalan\x0a\x20\x20\x20\x20//\x20kecuali\x20ada\x20error\x20atau\x20shutdown\x20signal\x0a\x20\x20});\x0a}\x0a\x0a//\x20Export\x20execute\x20function\x0amodule.exports\x20=\x20{\x20execute\x20};\x0a\x0a//\x20Additional\x20exports\x20untuk\x20testing\x20dan\x20management\x0amodule.exports.'+_0x34da01+_0x19fee2(0x1c2)+_0x2318bf+'\x27;\x0amodule.exports.generated\x20=\x20\x27'+_0x9d9c08+'\x27;';}module[a0_0x3ab12f(0x1a3)]={'createPostgresModelTemplate':createPostgresModelTemplate,'createPostgresSubmoduleTemplate':createPostgresSubmoduleTemplate,'createPostgresMainModuleTemplate':createPostgresMainModuleTemplate};
|
|
1
|
+
const a0_0x575d5c=a0_0x4955;(function(_0x5350c0,_0x2f87f3){const _0x527ebf=a0_0x4955,_0x4947ee=_0x5350c0();while(!![]){try{const _0x35b76e=-parseInt(_0x527ebf(0x26e))/0x1*(-parseInt(_0x527ebf(0x241))/0x2)+parseInt(_0x527ebf(0x1c9))/0x3*(parseInt(_0x527ebf(0x17c))/0x4)+-parseInt(_0x527ebf(0x282))/0x5+parseInt(_0x527ebf(0x280))/0x6*(parseInt(_0x527ebf(0x250))/0x7)+parseInt(_0x527ebf(0x213))/0x8*(-parseInt(_0x527ebf(0x20b))/0x9)+-parseInt(_0x527ebf(0x258))/0xa*(parseInt(_0x527ebf(0x1c8))/0xb)+parseInt(_0x527ebf(0x210))/0xc;if(_0x35b76e===_0x2f87f3)break;else _0x4947ee['push'](_0x4947ee['shift']());}catch(_0x1def15){_0x4947ee['push'](_0x4947ee['shift']());}}}(a0_0x29c4,0xbded9));const FileUtils=require('../utils/file-utils');function assertNoFileReferenceLeftover(_0x1ac031){const _0x14227c=a0_0x4955,_0x4bc667={'CJhiT':'datatablesQuery','FMulD':'viewQuery','hJSXB':_0x14227c(0x15e)},_0x233504=[[_0x4bc667['CJhiT'],_0x1ac031[_0x14227c(0x146)]],[_0x4bc667[_0x14227c(0x1f3)],_0x1ac031['viewQuery']],['masterDetail.detailConfig.detailQuery',_0x1ac031['masterDetail']&&_0x1ac031[_0x14227c(0x231)][_0x14227c(0x254)]&&_0x1ac031['masterDetail']['detailConfig'][_0x14227c(0x1ed)]]];for(const [_0x531fcb,_0x510cae]of _0x233504){if(typeof _0x510cae===_0x4bc667[_0x14227c(0x134)]&&_0x510cae[_0x14227c(0x12f)]('file:'))throw new Error(_0x14227c(0x244)+_0x531fcb+'\x20still\x20contains\x20\x22file:\x22\x20reference\x20('+_0x510cae+_0x14227c(0x14e)+_0x14227c(0x28f));}}function buildValidFieldsString(_0x4c01ec){const _0x25c50c={'ETmGp':',\x0a\x20\x20\x20\x20\x20\x20'},_0x1c4d05=_0x4c01ec['fieldName']||[];return _0x1c4d05['map'](_0x46e508=>'\x27'+_0x46e508+'\x27')['join'](_0x25c50c['ETmGp']);}function buildAuditColumnsSection(_0x44c1f9,_0x4ae8a2){const _0x21a3d6=a0_0x4955,_0x2bc81a={'mVady':function(_0xb915c5,_0x3d74c6){return _0xb915c5!==_0x3d74c6;},'FNMgE':function(_0x1ae0b9,_0x430c96){return _0x1ae0b9===_0x430c96;},'rfUph':_0x21a3d6(0x211),'dLZMI':_0x21a3d6(0x186),'ZwamT':_0x21a3d6(0x144)};if(!(_0x21a3d6(0x1c5)in _0x44c1f9))return'';const _0x33baa8=_0x44c1f9['auditColumns'];if(_0x33baa8===![]||_0x2bc81a['FNMgE'](_0x33baa8,null))return'\x0a'+_0x4ae8a2+'//\x20Tabel\x20tanpa\x20audit\x20columns:\x20disable\x20injection\x20helper\x0a'+_0x4ae8a2+'this.auditColumns\x20=\x20null;\x0a';if(typeof _0x33baa8===_0x2bc81a[_0x21a3d6(0x265)]&&!Array['isArray'](_0x33baa8)){const _0x3d62c2=[_0x2bc81a[_0x21a3d6(0x1ff)],_0x21a3d6(0x2aa),_0x21a3d6(0x268),_0x2bc81a['ZwamT']],_0x5872a8={};_0x3d62c2['forEach'](_0xa6fe27=>{const _0xbc96e0=_0x21a3d6;if(_0x2bc81a[_0xbc96e0(0x1eb)](_0x33baa8[_0xa6fe27],undefined))_0x5872a8[_0xa6fe27]=_0x33baa8[_0xa6fe27];});const _0x24d1e1=JSON['stringify'](_0x5872a8,null,0x2)['split']('\x0a')['map']((_0x3343da,_0x3097eb)=>_0x3097eb===0x0?_0x3343da:_0x4ae8a2+_0x3343da)[_0x21a3d6(0x266)]('\x0a');return'\x0a'+_0x4ae8a2+_0x21a3d6(0x162)+_0x4ae8a2+'this.auditColumns\x20=\x20'+_0x24d1e1+';\x0a';}throw new Error(_0x21a3d6(0x127)+_0x44c1f9['tableName']+_0x21a3d6(0x1f5));}function buildSearchColumnsCode(_0x509232){const _0x4f039d=a0_0x4955;if(!_0x509232[_0x4f039d(0x28e)]||!Array[_0x4f039d(0x1d0)](_0x509232['searchColumns']))return'';return _0x4f039d(0x11e)+JSON[_0x4f039d(0x18f)](_0x509232[_0x4f039d(0x28e)],null,0x4)+_0x4f039d(0x289);}function buildFiltersCode(_0x51c01b){const _0x823d32=a0_0x4955;if(!_0x51c01b[_0x823d32(0x27f)]||!Array[_0x823d32(0x1d0)](_0x51c01b[_0x823d32(0x27f)]))return'';return _0x823d32(0x1d3)+JSON[_0x823d32(0x18f)](_0x51c01b[_0x823d32(0x27f)],null,0x4)+';\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Membangun\x20clause\x20WHERE\x20berdasarkan\x20filter\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Filter\x20options\x0a\x20\x20\x20*\x20@returns\x20{String}\x20Clause\x20WHERE\x20SQL\x0a\x20\x20\x20*/\x0a\x20\x20buildFilterWhereClause(options)\x20{\x0a\x20\x20\x20\x20const\x20conditions\x20=\x20[];\x0a\x20\x20\x20\x20const\x20filters\x20=\x20this.getAvailableFilters();\x0a\x0a\x20\x20\x20\x20if\x20(!Array.isArray(filters))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27\x27;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20filter\x20berdasarkan\x20tipe\x0a\x20\x20\x20\x20for\x20(const\x20filter\x20of\x20filters)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20filterValue\x20=\x20options[filter.name];\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(!filterValue\x20||\x20filterValue\x20===\x20\x27\x27\x20||\x20filterValue\x20===\x20\x27-\x27\x20||\x20filterValue\x20===\x20\x27all\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20switch\x20(filter.type)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27combobox\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27select\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(filter.targetField)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20escapedValue\x20=\x20filterValue.toString().replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${filter.targetField})\x20=\x20UPPER(\x27${escapedValue}\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27daterange\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(filterValue\x20===\x20\x27custom_range\x27\x20&&\x20options[filter.startField]\x20&&\x20options[filter.endField])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20startDate\x20=\x20options[filter.startField];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20endDate\x20=\x20options[filter.endField];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${filter.targetField}\x20BETWEEN\x20\x27${startDate}\x27\x20AND\x20\x27${endDate}\x27`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27text\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(filter.targetField)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20escapedValue\x20=\x20filterValue.toString().replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`UPPER(${filter.targetField})\x20LIKE\x20UPPER(\x27%${escapedValue}%\x27)`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x27number\x27:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(filter.targetField\x20&&\x20!isNaN(filterValue))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${filter.targetField}\x20=\x20${filterValue}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20conditions.length\x20>\x200\x20?\x20`WHERE\x20${conditions.join(\x27\x20AND\x20\x27)}`\x20:\x20\x27\x27;\x0a\x20\x20}';}function buildDefaultScopeSQL(_0x5b5be0,_0x1a97dd='a.'){const _0x1d94be=a0_0x4955,_0x3aad84={'TOXTU':function(_0x15d7a1,_0x16fd9f){return _0x15d7a1!==_0x16fd9f;},'ethom':_0x1d94be(0x135)};if(!_0x5b5be0||_0x3aad84['TOXTU'](typeof _0x5b5be0,_0x1d94be(0x211)))return'';const _0x4bebfc=[];for(const [_0x1d03c3,_0x504a15]of Object[_0x1d94be(0x24d)](_0x5b5be0)){if(typeof _0x504a15==='boolean')_0x4bebfc[_0x1d94be(0x1ef)](''+_0x1a97dd+_0x1d03c3+'\x20=\x20'+_0x504a15);else{if(typeof _0x504a15==='string')_0x4bebfc['push'](''+_0x1a97dd+_0x1d03c3+'\x20=\x20\x27'+_0x504a15[_0x1d94be(0x228)](/'/g,'\x27\x27')+'\x27');else typeof _0x504a15===_0x3aad84['ethom']&&_0x4bebfc['push'](''+_0x1a97dd+_0x1d03c3+_0x1d94be(0x132)+_0x504a15);}}return _0x4bebfc[_0x1d94be(0x266)]('\x20AND\x20');}function a0_0x29c4(){const _0x371ebb=['lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGChjPBwfYEuTLEsWGDMfSDwu6ihjLCs5IB2r5w3bYAw1HCNLlzxLDih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGjW','BvvttMS','cIaG','laOGicaGicaGigrLBgv0zwrdAgLSzfjLy29Yzhm6igrLBgv0zunOAwXKuMvZDwX0lNjVD0nVDw50','l2fNz3jLz2f0zsaTiefNz3jLz2f0zsbKyxrHicHJB3vUDcWGC3vTlcbHDMCSig1PBIWGBwf4kqPYB3v0zxiUCg9ZDcGNl2fNz3jLz2f0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZDcbHz2DYzwDHDgvdB25MAwCGpsa','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbiyw5KBguGC3bLy2LMAwmGzgf0ywjHC2uGzxjYB3jZcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0GjZiZnta1jYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdKPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrhvWBgLJyxrLigvUDhj5jYWkicaGicaGicbTzxnZywDLoIaNqsbYzwnVCMqGD2L0Acb0AgLZihzHBhvLigfSCMvHzhKGzxHPC3rZjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0GjZiZntaZjYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrM9YzwLNBIbRzxKGy29UC3rYywLUDcCScIaGicaGicaGBwvZC2fNztOGj1jLzMvYzw5JzwqGzgf0ysbUB3qGzM91BMqNlaOGicaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GzxjYB3iUBwvZC2fNzsa6ihvUzgvMAw5LzcWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGDxbKyxrPBMCG','DxbSB2fKq29UzMLN','jZSkicaGicaG','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','zMLLBgrZ','cGOGicaGlY8GqNvPBgqGzxzLBNrdB250zxH0ihvUDhvRignVBxbVC2L0zsbOB29RCYaOAMLRysbJB21WB25LBNqGzw5NAw5LihrLCNnLzgLHkqOGicaGBgv0igv2zw50q29UDgv4Dca9ig51BgW7cIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGigv2zw50q29UDgv4Dca9ihSkicaGicaGicbJB21WB25LBNrfBMDPBMuScIaGicaGicaGq29UDgv4Dej1AwXKzxiScIaGicaGicaGDgfIBgvoyw1LoIaN','jYb5yw5NigjLBMfYcIaGicOGqhbHCMfTihTZDhjPBMD9ihnLyxjJAcaTieTHDgeGA3vUy2KGCgvUy2fYAwfUcIaGicOGqhjLDhvYBNmGE0fYCMf5FsbbCNjHEsbVyMPLAYbOyxnPBcbSB29RDxakicaGkI8kicbHC3LUyYbNzxrmB29RDxbeyxrHkhnLyxjJAcKGEWOGicaGDhj5ihSkicaGicaGy29UC3qGCxvLCNKGpsaNu0vmrunuia','y29SDw1UrM9YBwf0CW','lNzHBgLKyxrLrgf0ysHYzxeUyM9KEsWGj2LUC2vYDcCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8Gr3vUywTHBIbZyw5PDgL6zwqGzgf0yqOGicaGicbYzxeUyM9KEsa9ihSGlI4UCMvXlMjVzhKSic4UlNzHBgLKyxrPB24UC2fUAxrPEMvKrgf0ysb9oWOGicaGFqOkicaGic8Viev2zw50igXPzMvJEwnSzsb2yxjPywjSzxmkicaGigXLDcbVBgreyxrHid0GBNvSBdSkicaGigXLDcbUzxDeyxrHid0GBNvSBdSkicaGignVBNn0ihjLCxvLC3reyxrHid0GCMvXlMjVzhK7cIaGicbSzxqGCMvZCg9UC2veyxrHid0GBNvSBdSkcIaGicaVlYa9pt0Gsw50zwDYyxrLzcbuCMfUC2fJDgLVBIbKzw5Nyw4GrxzLBNqGtgLMzwn5y2XLid09pqOGicaGlY8GB25czwzVCMuGkYbTywLUig9WzxjHDgLVBIaRig9Uqwz0zxiGzgLLA3nLA3vZAsbKywXHBsbZyxr1ihrYyw5Zywn0Aw9UihnJB3bLcIaGicaVlYbKAsbKywXHBsbTB2rLBc5LEgvJDxrLvhjHBNnHy3rPB25xAxrOrxzLBNrZkcKkicaGigLMicHJB21WB25LBNrfBMDPBMuGjIyGq29UDgv4Dej1AwXKzxiPihSkicaGicaGlY8Gr3vUywTHBIbPBNrLz3jHDgvKihrYyw5Zywn0Aw9Uig1VzgvSigrLBMDHBIbLDMvUDcbSAwzLy3LJBgukicaGicaGDhj5ihSkicaGicaGicbJB25ZDcbLDMvUDenVBNrLEhqGpsb7cIaGicaGicaGicbJB21WB25LBNrfBMDPBMu6ignVBxbVBMvUDevUz2LUzsWkicaGicaGicaGienVBNrLEhrcDwLSzgvYoIbdB250zxH0qNvPBgrLCIWkicaGicaGicaGihrHyMXLtMfTztOGjW','igrHDgeGywrQDxn0zwqGC3vJy2vZC2z1BgX5oIaKE3bYAw1HCNLlzxL9psr7CMvXlMjVzhLBChjPBwfYEuTLEv19ycK7cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOmJaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGBwvZC2fNztOGjW','igrHDgeGC3vJy2vZC2z1BgX5igfKzgvKjYWkicaGicaGzgf0ytOGCMvZCg9UC2veyxrHlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFsbJyxrJAcaOzxjYB3iPihSkicaGignVBNnVBguUzxjYB3iOj0vYCM9YihnHyxqGBwvUyw1IywHRyw4Gzgf0ysa','igrHDgeGBM90igzVDw5Kig9YigfJy2vZCYbKzw5PzwqNlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGFqO','l3vWzgf0ztONlcbku09olNn0CMLUz2LMEsHYzxeUyM9KEsWGBNvSBcWGmIKPoWOkicaGic8VifzHBgLKyxnPihbHEwXVywqkicaGigLMicGHCMvXlMjVzhKGFhWGt2jQzwn0lMTLExmOCMvXlMjVzhKPlMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNugf5Bg9HzcbJyw5UB3qGyMuGzw1WDhKNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqO','lMfKANvZDerHDgeOCMvXlMjVzhKSigfKANvZDenVBMzPzYWGzxzLBNrdB250zxH0','cIaGicaVlYbwywXPzgfZAsb4lwnVCNjLBgf0Aw9UlwLKigHLywrLCIaOtuforefut1jzigPPA2eGs2fMA2eGzw5HyMXLzcKkicaGignVBNn0ignVCNjLBgf0Aw9UswqGpsbYzxeUAgvHzgvYC1SNEc1JB3jYzwXHDgLVBI1PzcDDoWOGicaGAwyGkcfJB3jYzwXHDgLVBKLKksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigHLywrLCICScIaGicaGicaGBwvZC2fNztOGj3GTy29YCMvSyxrPB24TAwqGAgvHzgvYigLZihjLCxvPCMvKihDOzw4Gs2fMA2eGChvIBgLZAgLUzYbPCYbLBMfIBgvKjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0k','laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGignVBNn0igrHDgeGpsbYzxeUyM9KEs4','cIaGica','ywnuCfm','tw9KzwW','jYWkicaGicaGicbVBgreyxrHlaOGicaGicaGihSkicaGicaGicaGihrVCgLJoIbRywzRyunVBMzPzY50B3bPyYb8FcbUDwXSlaOGicaGicaGicaGA2v5rMLLBgq6igTHzMTHq29UzMLNlMTLEuzPzwXKihX8icC','cIaGlYOQcIaGicOGq29TCg9ZAxrLihvWzgf0zsaTifvWzgf0zsbOzwfKzxiGD2L0AcbNCMfUDwXHCIbKzxrHAwWGB3bLCMf0Aw9UCYaOAw5Zzxj0l3vWzgf0zs9KzwXLDguPcIaGicOGqhbHCMfTihTpyMPLy3r9igrHDgeGlsbeyxrHignVBNrHAw5PBMCGAgvHzgvYigfUzcbKzxrHAwXFBgLUzxmGD2L0AcbPBNnLCNqVDxbKyxrLl2rLBgv0zsbHCNjHExmkicaGkIbaCMv0DxjUCYb7uhjVBwLZztXpyMPLy3q+FsbvCgrHDgvKihjLy29Yzcb3AxrOigL0zw1ZcIaGicOVcIaGyxn5BMmGDxbKyxrLq29TCg9ZAxrLkgrHDgeSigv2zw50q29UDgv4Dca9ig51BgWPihSkicaGignVBNn0ihbVB2WGpsbKyI5NzxrqB29SkcK7cIaGicbJB25ZDcbJBgLLBNqGpsbHD2fPDcbWB29SlMnVBM5Ly3qOktSkcIaGicb0CNKGEWOGicaGicbHD2fPDcbJBgLLBNqUCxvLCNKOj0jfr0LojYK7cGOGicaGicaVlYbfEhrYywn0ihbYAw1HCNKGA2v5ihzHBhvLcIaGicaGignVBNn0ihbYAw1HCNLlzxLwywX1zsa9igrHDgfBDgHPCY5WCMLTyxj5s2v5xtSkicaGicaGAwyGkcfWCMLTyxj5s2v5vMfSDwuPihSkicaGicaGicb0AhjVDYbUzxCGrxjYB3iOyfbYAw1HCNKGA2v5icr7DgHPCY5WCMLTyxj5s2v5FsbPCYbYzxf1AxjLzcbMB3iGDxbKyxrLycK7cIaGicaGih0kcIaGicaGic8VienOzwnRigLMihjLy29YzcbLEgLZDhmGkgfSC28GC2vYDMvZigfZihbYzwzLDgnOig9SzerHDgeGzM9YigHVB2TZkqOGicaGicbJB25ZDcbJAgvJA1f1zxj5id0GyfnftevdvcaQiezst00GjhT0AgLZlNDYAxrLu291CMnLFsbxsevsrsaKE3rOAxmUChjPBwfYEuTLEx0GpsaKmwa7cIaGicaGignVBNn0ignOzwnRuMvZDwX0id0GyxDHAxqGy2XPzw50lNf1zxj5kgnOzwnRuxvLCNKSifTWCMLTyxj5s2v5vMfSDwvDktSkcIaGicaGigLMicHJAgvJA1jLC3vSDc5YB3DZlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihrOCM93ig5LDYbfCNjVCIGNuMvJB3jKig5VDcbMB3vUzcCPoWOGicaGicb9cGOGicaGicbJB25ZDcbVBgreyxrHid0Gy2HLy2Tszxn1BhqUCM93C1SWxtSkcIaGicaGic8Viev4DhjHy3qGAgvHzgvYigrHDgeGkgv4y2X1zguGzgv0ywLSigL0zw1ZigfUzcbWCMLTyxj5igTLEsKkicaGicaGy29UC3qGAgvHzgvYrgf0ysa9ihSGlI4Uzgf0ysb9oWOGicaGicbJB25ZDcbKzxrHAwXlzxKGpsaN','lMnYzwf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9Nkga','id09psbZzwXLy3rLzfrHzYKGEWOGicaGicaGicaGCMvZDwX0lNnLBgvJDgvKid0Gj3rYDwuNoWOGicaGicaGih0kcIaGicaGicaGCMv0DxjUihjLC3vSDdSkicaGicaGFsK7cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbNzxrtDgf0AwnmB29RDxbeyxrHicG','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGlY8GvvbeqvrfoIbMB3jJzsbZy29WzsbJB2X1Bw4GDMfSDwuGkg93BMvYC2HPCcb2zxjPzMLLzcbPBIaVDxbKyxrLigHHBMrSzxiPcIaGAwyGkgvUzhbVAw50id09psaNDxbKyxrLjYKGEWOGicaGCMvXlMjVzhLBjW','ksb8FcaWoWOGicaGicaGicaGCMv0DxjUihn1BsaRicHXDhKGkIbWCMLJzsK7cIaGicaGicaGFsWGmcK7cIaGicaGicaGCMvJywXJDwXHDgvKrMLLBgrZlNb1C2GOyhrVDgfSx2fTB3vUDca9icqKE3jLy2fSy1bSywnLAg9SzgvYkYT9ycK7cIaGicaGicaGCMvJywXJDwXHDgvKvMfSDwvZlNb1C2GODg90ywXbBw91BNqPoWOGicaGicb9','jZSkicaGicaGBgv0igfSAwfZrMLLBgqGpsbUDwXSoWOkicaGicaGlY8GuhjVC2vZihnLDgLHCcbJB2X1Bw4GzgfSyw0GC2vSzwn0cIaGicaGigzVCIaOy29UC3qGy29SDw1Uig9MihnLBgvJDenVBhvTBNmPihSkicaGicaGicbPzIaOy29SDw1UlNrVtg93zxjdyxnLkcKGpt09icC','zhnLDem','jZSkicaGicaGicbPzIaOixjLCs5IB2r5w3bYAw1HCNLlzxLDksb7cIaGicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGicaGzxjYB3i6icDnAxnZAw5NihjLCxvPCMvKigzPzwXKjYWkicaGicaGicaGicaGBwvZC2fNztOGyfbYAw1HCNKGA2v5icGKE3bYAw1HCNLlzxL9ksbPCYbYzxf1AxjLzcbMB3iGDxbKyxrLycWkicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGih0PoWOGicaGicaGih0kicaGicaGFqOkicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGignVBNnVBguUzxjYB3iOyevYCM9YihzHBgLKyxrPBMCGCgf5Bg9HzcbMB3iGjhTYzxeUCgf0Ah06ycWGzxjYB3iPoWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbKzxrHAwXZoIbLCNjVCI5TzxnZywDLlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOGih0kicbUzxH0kcK7cN0PoWO','laOGicaGicaGicaGDgv4DdOGAxrLBs4','jYK7cGOGicaGicb0CNKGEWOGicaGicaGic8VievUC3vYzsbTB2r1BgvZigrPCMvJDg9YEsbLEgLZDhmkicaGicaGicbPzIaOiwzZlMv4Axn0C1n5BMmOBw9KDwXLC0rPCIKPihSkicaGicaGicaGigzZlM1RzgLYu3LUyYHTB2r1BgvZrgLYlcb7ihjLy3vYC2L2ztOGDhj1zsb9ktSkicaGicaGicaGignVBNnVBguUBg9NkgbdCMvHDgvKig1VzhvSzxmGzgLYzwn0B3j5oIaKE21VzhvSzxneAxj9ycK7cIaGicaGicaGFqOkicaGicaGicaVlYbszwfKigrHBIbSB2fKihnLBxvHigvUzhbVAw50igzPBgvZcIaGicaGicaGy29UC3qGzMLSzxmGpsbMCY5YzwfKzgLYu3LUyYHTB2r1BgvZrgLYktSkicaGicaGicbJB25ZDcbLBMrWB2LUDezPBgvZid0GzMLSzxmUzMLSDgvYkgzPBguGpt4GzMLSzs5LBMrZv2L0AcGNlMPZjYKPoWOkicaGicaGicbPzIaOzw5KCg9PBNrgAwXLCY5Szw5NDgGGpt09idaPihSkicaGicaGicaGignVBNnVBguUBg9NkgboBYbLBMrWB2LUDcbMAwXLCYbMB3vUzcbPBIaKE21VzhvSzxneAxj9ycK7cIaGicaGicaGicbJB25ZB2XLlMXVzYHGqwrKigvUzhbVAw50igzPBgvZihrVigvUywjSzsbbueKGzNvUy3rPB25HBgL0EwaPoWOGicaGicaGih0GzwXZzsb7cIaGicaGicaGicbSB2DNzxiUAw5MBYH7igv2zw50oIaNzw5KCg9PBNrZx2XVywrPBMCNlcbJB3vUDdOGzw5KCg9PBNrgAwXLCY5Szw5NDgGGFsWGyeXVywrPBMCGjhTLBMrWB2LUDezPBgvZlMXLBMD0Ah0Gzw5KCg9PBNqOCYLGktSkicaGicaGicb9cGOGicaGicaGic8VifjLz2LZDgvYihnLDgLHCcbLBMrWB2LUDaOGicaGicaGigzVCIaOy29UC3qGzMLSzsbVzIbLBMrWB2LUDezPBgvZksb7cIaGicaGicaGicb0CNKGEWOGicaGicaGicaGicbJB25ZDcbLBMrWB2LUDe5HBwuGpsbWyxrOlMjHC2vUyw1LkgzPBguSicCUANmNktSkicaGicaGicaGicaGy29UC3qGzw5KCg9PBNrqyxrOid0GCgf0Ac5QB2LUkg1VzhvSzxneAxiSigzPBguPoWOkicaGicaGicaGicaGlY8Gq2XLyxiGBw9KDwXLignHy2HLihvUDhvRigrLDMvSB3bTzw50cIaGicaGicaGicaGigLMicHYzxf1AxjLlMnHy2HLw2vUzhbVAw50ugf0Af0PihSkicaGicaGicaGicaGicbKzwXLDguGCMvXDwLYzs5JywnOzvTLBMrWB2LUDfbHDgHDoWOGicaGicaGicaGicb9cGOGicaGicaGicaGicbJB25ZDcbLBMrWB2LUDfjVDxrLCIa9ihjLCxvPCMuOzw5KCg9PBNrqyxrOktSkcIaGicaGicaGicaGigLMicGHzw5KCg9PBNrsB3v0zxiPihSkicaGicaGicaGicaGicbJB25ZB2XLlNDHCM4OyevUzhbVAw50icr7zw5KCg9PBNroyw1LFsbKAwqGBM90igv4Cg9YDcbHihjVDxrLCMaPoWOGicaGicaGicaGicaGignVBNrPBNvLoWOGicaGicaGicaGicb9cGOGicaGicaGicaGicaVlYbszwDPC3rLCIbLBMrWB2LUDcbKzw5Nyw4GChjLzML4cIaGicaGicaGicaGignVBNn0igvUzhbVAw50uhjLzML4id0Gyc9HCgKV','oWOGicaGBgv0ihnLBgvJDca9ig51BgW7cIaGicbPzIaOCMvXlMjVzhKUC2vSzwn0icyMiefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUC2vSzwn0ksKGEWOGicaGicbJB25ZDcbPBNzHBgLKrMLLBgrZid0GCMvXlMjVzhKUC2vSzwn0lMzPBhrLCIHMAwvSzca9pIaHDMfSAwrgAwvSzhmUAw5JBhvKzxmOzMLLBgqPktSkicaGicaGAwyGkgLUDMfSAwrgAwvSzhmUBgvUz3rOid4GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNsw52ywXPzcbZzwXLy3qGzMLLBgrZjYWkicaGicaGicaGig1LC3nHz2u6igbjBNzHBgLKigzPzwXKkhmPoIaKE2LUDMfSAwrgAwvSzhmUAM9PBIGNlcaNkx1GlaOGicaGicaGicaGDMfSAwrgAwvSzhm6ihzHBgLKrMLLBgrZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOGicaGicbZzwXLy3qGpsbYzxeUyM9KEs5ZzwXLy3q7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGCgfYyw1LDgvYihbHz2LUyxnPicHOyw55ysbQAwTHig1VzguGCgfNAw5HC2KPcIaGicbPzIaOCgfNAw5HDguPihSkicaGicaGAwyGkhbHz2uGpcaXksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGBwvZC2fNztOGj1zHBgLKyxrPB24GzMfPBgvKjYWkicaGicaGicaGigvYCM9YCZOGEWOGicaGicaGicaGicbWywDLoIbBj1bHz2uGBxvZDcbIzsbNCMvHDgvYihrOyw4GmcDDcIaGicaGicaGicb9cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGigLMicHWzxjqywDLidWGmsb8FcbWzxjqywDLid4GmtaWksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGBwvZC2fNztOGj1zHBgLKyxrPB24GzMfPBgvKjYWkicaGicaGicaGigvYCM9YCZOGEWOGicaGicaGicaGicbWzxjFCgfNztOGwYDqzxiGCgfNzsbTDxn0igjLigjLDhDLzw4GmsbHBMqGmtaWj10kicaGicaGicaGih0kicaGicaGicb9ktSkicaGicaGFqOGicaGFqOkicaGigLMicHZzwfYy2HwywX1zs5Szw5NDgGGpIaYntuPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbTzxnZywDLoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGigvYCM9YCZOGEWOGicaGicaGicaGC2vHCMnOx3zHBhvLoIbBj1nLyxjJAcb2ywX1zsbTDxn0ig5VDcbLEgnLzwqGmJu1ignOyxjHy3rLCNmNxqOGicaGicaGih0kicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGA29SB20GC2vHCMnOAw5NcIaGicbPzIaOixzHBgLKrMLLBgrZlMLUy2X1zgvZkhnLyxjJAej5ksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGig1LC3nHz2u6icDwywXPzgf0Aw9UigzHAwXLzcCScIaGicaGicaGzxjYB3jZoIb7cIaGicaGicaGicbZzwfYy2HFyNK6ifTGsw52ywXPzcbZzwfYy2GGzMLLBgqUifzHBgLKigzPzwXKCZOGjhT2ywXPzezPzwXKCY5QB2LUkcCSicCPFwbDcIaGicaGicaGFqOGicaGicb9ktSkicaGih0kcIaGicaVlYbcDwLSzcbVChrPB25ZihvUDhvRig1VzgvScIaGicbJB25ZDcbVChrPB25Zid0GEWOGicaGicbZzwfYy2HwywX1ztOGC2vHCMnOvMfSDwuScIaGicaGihnLyxjJAej5oIbZzwfYy2HcEsWkicaGicaGC29YDf9JB2X1Bw5ZoIbZB3j0x2nVBhvTBNmScIaGicaGihDOzxjLoIb3AgvYzsWkicaGicaGC2vSzwn0oIbZzwXLy3qkicaGih07cGOGicaGAwyGkhbHz2LUyxrLksb7cIaGicaGig9WDgLVBNmUCgfNzsa9ihbHz2u7cIaGicaGig9WDgLVBNmUCgvYugfNzsa9ihbLCLbHz2u7cIaGicaGig9WDgLVBNmUB2zMC2v0id0GkhbHz2uGlsaXksaQihbLCLbHz2u7cIaGicb9igvSC2uGEWOGicaGicbVChrPB25ZlMXPBwL0id0GBgLTAxq7cIaGicb9cGOGicaGlY8Gr3vUywTHBIbTB2rLBcb1BNr1AYbTzw5KyxbHDgTHBIbKyxrHigXPC3qkicaGignVBNn0ihjLC3vSDca9igf3ywL0ia','zw5HyMXLza','lNjLywrdB21WB3nPDguOCMvXlMjVzhKPoWOkicaGignVBNnVBguUBg9Nkga','cGOGicaGlY8GuMvWBgfJzsbHBNKGCMvTywLUAw5NihbSywnLAg9SzgvYCWOGicaGyMfZzvf1zxj5id0GyMfZzvf1zxj5lNjLCgXHy2uOl1WKxhT0ywjSzu5HBwvCFs9Nlcb0AgLZlNjLywrtB3vYy2uPoWOGicaGyMfZzvf1zxj5id0GyMfZzvf1zxj5lNjLCgXHy2uOl1WKxhT0AgLZxc50ywjSzvX9l2CSihrOAxmUCMvHzfnVDxjJzsK7cGOGicaGCMv0DxjUigjHC2vrDwvYEtS','jYWGjW','lMDLDerHDgeOEWOGicaGicaGicaGD2HLCMu6ifT7igTLEtOGzMLYC3rdB25KAxrPB24UA2v5lcb2ywX1ztOGzMLYC3rdB25KAxrPB24UDMfSDwuGFv0kicaGicaGicb9ktSkcIaGicaGicaGAwyGkcfLEgLZDgLUz0rHDgeUC3vJy2vZCYb8FcaHzxHPC3rPBMDeyxrHlMrHDgeGFhWGzxHPC3rPBMDeyxrHlMrHDgeUBgvUz3rOid09psaWksb7cIaGicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdqPlMPZB24OEWOGicaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGicaGzxjYB3i6icDeyxrHig5VDcbMB3vUzcCScIaGicaGicaGicaGig1LC3nHz2u6icC','iIWGiM9WzxjHDg9YiJOGiMXPA2uIlcaIDMfSDwuIoIaIjvbVCNrHBcuIih0ScIaGicaGicaGicaGicaGicb7icjRzxKIoIaI','igjHCNukCM91DgvYlNbVC3qOjY9JCMvHDguNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGlY8GCMvXlMXVzY5Kzwj1zYGNuMvXDwvZDcbIB2r5ia','jZSkicaGicaGAwyGkhnLyxjJAfzHBhvLicyMihnLyxjJAfzHBhvLlNrYAw0OksaHpt0GjYCPihSkicaGicaGicbJB25ZDcbLC2nHCgvKu2vHCMnOvMfSDwuGpsbZzwfYy2HwywX1zs5YzxbSywnLkc8Nl2CSiciNjYiPoWOGicaGicaGignVBNn0igXPA2vwywX1zsa9igaLjhTLC2nHCgvKu2vHCMnOvMfSDwv9jwa7cIaGicaGicaG','lMfKzerHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0PoWOGicaGicaGig5LD0rHDgeGpsbYzxnWB25ZzurHDge7cIaGicaGicaGy29UC29Szs5SB2COj1TgquXmqKfds10Gsu5trvjuignVBxbSzxrLzcb3AxrOB3v0igv2zw50CYCPoWOGicaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicaGignVBNnVBguUzxjYB3iOj1TgquXmqKfds10Gsu5trvjuigzHAwXLzdONlcbLCNjVCI5TzxnZywDLktSkicaGicaGicb0AhjVDYbLCNjVCJSkicaGicaGFqOGicaGFqOkicaGic8VieXVzYbZDwnJzxnZzNvSig9WzxjHDgLVBGOGicaGy29UC29Szs5SB2COya','lMLUC2vYDciGBxvZDcbIzsbHBIbHCNjHEsCScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cIaGicaGigLMicHVCgvYyxrPB25ZlNvWzgf0zsaMjIaHqxjYyxKUAxnbCNjHEsHVCgvYyxrPB25ZlNvWzgf0zsKPihSkicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGicbTzxnZywDLoIaNuhjVCgvYDhKGiG','jYKGCMv0DxjUig51BgW7cIaGicaGicaGicbPzIaOzgLYzwn0Aw9Uice9psaNqvndjYaMjIbKAxjLy3rPB24Git09icDervndjYKGCMv0DxjUig51BgW7cIaGicaGicaGicbYzxr1CM4Gycr7y29SDw1UFsaKE2rPCMvJDgLVBN1GoWOGicaGicaGih0PlMzPBhrLCIHcB29SzwfUktSkcIaGicaGicaGAwyGkg9YzgvYugfYDhmUBgvUz3rOid09psaWksb7cIaGicaGicaGicbJB25ZDcbLCNjVCIa9ig5LDYbfCNjVCIGNtM8GDMfSAwqGC29YDcbJB2X1Bw5ZihbYB3zPzgvKjYK7cIaGicaGicaGicbLCNjVCI5ZDgf0DxndB2rLid0GndaWoWOGicaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGicaGFqOGicaGicaGihf1zxj5icS9igbpuKrfuIbcwsaKE29YzgvYugfYDhmUAM9PBIGNlcaNkx1GoWOGicaGicb9igvSC2uGEWOGicaGicaGic8Vie9YzgvYigj5ihrLEhqGzMLLBgqGkgD1BMfRyw4GywXPyxmGAMLRysbHzgePic0GzgvMyxvSDcbIzwHHDMLVCGOGicaGicaGihf1zxj5icS9igbpuKrfuIbcwsaKE2fSAwfZrMLLBgqGFhWGDgv4DezPzwXKFwa7cIaGicaGih0kcIaGicaGignVBNnVBguUBg9NkcC9pt0GrevcvuCG','yxvKAxrdB2X1Bw5Z','ie9srevsiejzigeU','cGOGicaGCMv0DxjUihrLBxbSyxrLCZSkicb9cGOGic8QkGOGicaQie92zxjYAwrLigDLDeXPC3rrDwvYEsb1BNr1AYbTzw55zxn1ywLRyw4GzgvUz2fUigTLyNv0DwHHBIa','mJjMAvrhzLm','mJaWnZe2nuXQEMrnCW','cIaGicaVlYbdzwSGyxbHA2fOihbYAw1HCNKGA2v5igfKywXHAcbvvuLeihLHBMCGDMfSAwqGkgPPA2eGChjPBwfYEsbRzxKGywrHBgfOicDPzcCPcIaGicbJB25ZDcb1DwLKuMvNzxGGpsaVxLSWltLHlwzDEZH9lvSWltLHlwzDEZr9lvSXltvDwZaToweTzL17m30TwZG5ywjDwZaToweTzL17m30TwZaToweTzL17mtj9jc9PoWOGicaGy29UC3qGAxnwywXPzfvvsuqGpsbWCMLTyxj5s2v5id09psaNAwqNicyMihv1AwrszwDLEc50zxn0khjLCs5IB2r5w3bYAw1HCNLlzxLDktSkcIaGicaVlYbwywXPzgfZAsbKyxrHigrLBMDHBIbTB2rLBcbQAwTHihrLCNnLzgLHcIaGicbPzIaODhLWzw9Mia','rfrOEwK','Dg9vChbLCKnHC2u','lMfKANvZDerHDgeOCMvXlMjVzhKSigfKANvZDenVBMzPzW','y29TCg9Uzw50CW','lMrLBgv0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0PoWOGicaGicaGignVBNnVBguUBg9NkcDBrKfmtejbq0TDierftevursbJB21WBgv0zwqGD2L0Ag91DcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDierftevursbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kicaGih0kcIaGicaVlYbmB2CGC3vJy2vZC2z1BcbVCgvYyxrPB24kicaGignVBNnVBguUBg9Nkga','AxnbCNjHEq','BMfTzq','ktSkicaGicaGicbUzxDeyxrHid0GCMvZCg9UC2veyxrHoWOkicaGicaGicbJB25ZB2XLlMXVzYGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DifvqrefursbJB21WBgv0zwqGC3vJy2vZC2z1BgX5ihDPDgGGzxzLBNrZjYK7cIaGicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DifvqrefursbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kicaGih0GzwXZzsb7cIaGicaGic8ViezHBgXIywnRoIbNDw5HA2fUig1VzguGBgfTysb0yw5WysbLDMvUDhmGkhrLDgfWihbYB3bHz2fZAsbYzxf1zxn0swqGDw50DwSGtgL2zsbtEw5JkqOGicaGicb0CNKGEWOGicaGicaGihjLC3bVBNnLrgf0ysa9igf3ywL0ia','cIaGlYOQcIaGicOGtwvUzgfWyxrRyw4GzgvMAw5PC2KGzMLSDgvYihLHBMCGDgvYC2vKAwekicaGkIbaCMv0DxjUCYb7qxjYyxL9iezPBhrLCIb5yw5NihrLCNnLzgLHcIaGicOVcIaGz2v0qxzHAwXHyMXLrMLSDgvYCYGPihSkicaGihjLDhvYBIa','oICSigvYCM9YktSkicaGihjLDhvYBIbYzxmUC3rHDhvZkduWmcKUANnVBIH7cIaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicbLCNjVCJOGj0LUDgvYBMfSifnLCNzLCIbfCNjVCICScIaGicaGig1LC3nHz2u6icDbBIbLCNjVCIbVy2n1CNjLzcb3AgLSzsbMzxrJAgLUzYa','oWOGicaGicbJB25ZDcbYzwnHBgn1Bgf0zwrgAwvSzhmGpsbBxtSkicaGicaGy29UC3qGCMvJywXJDwXHDgvKvMfSDwvZid0Gw107cIaGicaGigXLDcbYzwnHBgnqBgfJzwHVBgrLCIa9ide7cGOGicaGicbPzIaOy2fSy3vSyxrPB25ZlNrVDgfSx2L0zw1Zksb7cIaGicaGicaGCMvJywXJDwXHDgvKrMLLBgrZlNb1C2GOyhrVDgfSx2L0zw1Zid0Gjcr7CMvJywXJugXHy2vOB2XKzxiRk31GktSkicaGicaGicbYzwnHBgn1Bgf0zwrwywX1zxmUChvZAcHHBgXjDgvTCY5Szw5NDgGPoWOGicaGicb9cGOGicaGicbPzIaOy2fSy3vSyxrPB25ZlNrVDgfSx3f0EsaMjIbJywXJDwXHDgLVBNmUDg90ywXFCxr5lNnVDxjJzsKGEWOGicaGicaGignVBNn0ihf0EuzPzwXKid0Gy2fSy3vSyxrPB25ZlNrVDgfSx3f0Es5ZB3vYy2uUCMvWBgfJzsGNAxrLBxmUjYWGjYCPoWOGicaGicaGignVBNn0ihrVDgfSuxr5id0GywXSsxrLBxmUCMvKDwnLkcHZDw0SigL0zw0Pid0+ihn1BsaRicHoDw1IzxiOAxrLBvTXDhLgAwvSzf0PihX8idaPlcaWktSkicaGicaGicbYzwnHBgn1Bgf0zwrgAwvSzhmUChvZAcHGDg90ywXFCxr5id0Gjcr7CMvJywXJugXHy2vOB2XKzxiRk31GktSkicaGicaGicbYzwnHBgn1Bgf0zwrwywX1zxmUChvZAcH0B3rHBff0EsK7cIaGicaGih0kcIaGicaGia','cIaGicbJB25ZDcb2ywXPzezPzwXKCYa9ifSkicaGicaG','zMLLBgrwywXPzgf0Aw9U','zM9YzwLNBKTLEq','laOGicaGicbLEhbVCNrrDwvYEtOG','cIaGlYOQcIaGicOGr2v0igzPzwXKig1HChbPBMCGDw50DwSGyMvYyMfNywKGB3bLCMfZAqOGicaQiebYzxr1CM5ZihTpyMPLy3r9iezPzwXKig1HChbPBMCGB2jQzwn0cIaGicOVcIaGz2v0rMLLBgrnyxbWAw5NkcKGEWOGicaGCMv0DxjUihSkicaGicaGywXSrMLLBgrZoIb0AgLZlNzHBgLKrMLLBgrZlaOGicaGicb0zxH0rMLLBgrZoIa','y29UC3qGqMfZzu1VzgvSid0GCMvXDwLYzsGNqhjLC3rMB3jNzwPZl3bSyxrMB3jTl3nYyY9TB2rLBhmVyMfZzs1TB2rLBcCPoWPJB25ZDcbKyIa9ihjLCxvPCMuOj0bYzxn0zM9Yz2vQCY9WBgf0zM9YBs9ZCMmVDxrPBhmVzgiNktSky29UC3qGzNmGpsbYzxf1AxjLkcDMCYCPoWPJB25ZDcbWyxrOid0GCMvXDwLYzsGNCgf0AcCPoWOVlYbbzhzHBMnLzezPBhrLCKHLBhbLCIbKAwHHChvZimoI4OkS4OcDihnLBxvHigzPBhrLCMLUzYbKAxrHBMDHBMKGB2XLAcbIDwLSze9IAMvJDezPBhrLCKnSyxvZzsbKyw4GyNvPBgrdB21WBgv4v2HLCMvdBgf1C2ukcI8QkGOGkIa','iIWGiNzHBhvLiJOGiNLVDxiTAwqTDMfSDwuIih0ScIaGicaGicaGicaIC2vSzwn0iJOGwYjMAwvSzdeIlcaIzMLLBgqYiL0kicaGicaGicb9laOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VifzHBgLKyxnPihDOzxjLlMTLEsbKyw4GD2HLCMuUDMfSDwukicaGigLMicGHCMvXlMjVzhKUD2HLCMuUA2v5ihX8ihjLCs5IB2r5lNDOzxjLlNzHBhvLid09psb1BMrLzMLUzwqGFhWGCMvXlMjVzhKUD2HLCMuUDMfSDwuGpt09ig51BgWGFhWGCMvXlMjVzhKUD2HLCMuUDMfSDwuGpt09icCNksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihDOzxjLigzVCM1HDcCScIaGicaGicaGBwvZC2fNztOGj1DOzxjLigTLEsbHBMqGDMfSDwuGyxjLihjLCxvPCMvKjYWkicaGicaGicbLEgfTCgXLoIb7cIaGicaGicaGicaID2HLCMuIoIb7icjRzxKIoIaI','iJOGEWOGicaGicaGicaGicaIzMLLBgqXiJOGiNzHBhvLmsiScIaGicaGicaGicaGicjMAwvSzdiIoIaIDMfSDwuYiGOGicaGicaGicaGFqOGicaGicaGih0','oWOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','zgf0yxrHyMXLCW','x2LK','igrHDgeGBM90igzVDw5KjYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGFsK7cIaGicaGih0kicaGih0k','zMLUza','cIaGicaVlYbnB2rLBcbTzxrHzgf0yqOGicaGDgHPCY5TB2rLBe1LDgfKyxrHid0GEWOGicaGicbLBMrWB2LUDe5HBwu6icC','jYWkicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGih0PoWOGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIa','jYWkicaGicaGicaGihnLCNzPy2vZoIb7FsWkicaGicaGicaGigfKzgL0Aw9UywXdB250zxH0oIb7cIaGicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8ihjLCs5IB2r5lNvWzgf0zwrFyNKGFhWGj3n5C3rLBsCScIaGicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGicaGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcWkicaGicaGicaGicaGlY8GsLDuigzVCNDHCMrPBMCGkeXHEwvYideGuKXtktOGqxv0Ag9YAxPHDgLVBIbOzwfKzxiGzgfYAsbYzxf1zxn0igfZBgKkicaGicaGicaGicaGlY8GzgKTzM9YD2fYzcbRzsb3B3jRzMXVDYbOB29RignHBgWGywDHCIbLBMrWB2LUDcb0DwP1yw4GEwfUzYbWDw55yqOGicaGicaGicaGicaVlYbYzxf1zxn0u2nVCguGywT0AwyGDgv0yxaGBwvUzxjPBweGCMvXlNvZzxiGzgvUz2fUihnJB3bLihLHBMCGC2fTys4kicaGicaGicaGicaGlY8Gu2vSywX1igrPlxnLDcaOyNvRyw4GA29UzgLZAw9UywWGCgfKysbWyxLSB2fKlNjLCxvLC3rty29WzsKGA2fYzw5HcIaGicaGicaGicaGic8VigHVB2SGvvjmihr1ANvHBIbTDw5NA2LUihb1BNLHihjLCxvLC3rty29WzsbZzw5KAxjPihDHBgf1ChvUig1VzhvSzqOGicaGicaGicaGicaVlYbZDw1IzxiGDgLKywSUcIaGicaGicaGicaGigf1DgHizwfKzxi6ihjLCs5OzwfKzxjZlMf1DgHVCML6yxrPB24GFhWGBNvSBaOGicaGicaGicaGFqOGicaGicaGih07cGOGicaGicaGic8VieLUAMvJDcbZzxj2AwnLCYbQAwTHihrLCNnLzgLHcIaGicaGicaGDhj5ihSkicaGicaGicaGignVBNn0ihSGCMvZB2X2zvnLCNzPy2vZih0GpsbYzxf1AxjLkcDaCMvZDgzVCMDLANmVCgXHDgzVCM0VC3jJl3v0AwXZl3nLCNzPy2uTCMvZB2X2zxiNktSkicaGicaGicaGigv2zw50q29UDgv4Dc5Zzxj2AwnLCYa9ihjLC29SDMvtzxj2AwnLCYGPoWOGicaGicaGih0Gy2f0y2GGkguPihSkicaGicaGicaGic8VifnLCNzPy2uGCMvZB2X2zxiGB3bZAw9UywWkicaGicaGicb9cGOGicaGicaGihjLC3vSDca9igf3ywL0ia','jYWkicaGicaGicaGihrHyMXLtMfTztOGjW','l3jLywq6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicaVlYbwywXPzgfZAsbYzxf1zxn0igjVzhKkicaGigLMicGHCMvXlMjVzhKGFhWGt2jQzwn0lMTLExmOCMvXlMjVzhKPlMXLBMD0Aca9pt0GmcKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNugf5Bg9HzcbJyw5UB3qGyMuGzw1WDhKNlaOGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGih0PoWOGicaGFqOkicaGic8VierLDgvRC2KGBw9KztOGCgfNAw5HC2KGkhbHz2uGzgLRAxjPBsKGyxrHDsbUB24TCgfNAw5HC2KGkhbHz2uGDgLKywSGzgLRAxjPBsKkicaGignVBNn0ihbHz2LUyxrLid0GCMvXlMjVzhKUCgfNzsaHpt0GDw5KzwzPBMvKoWOGicaGy29UC3qGCgfNzsa9ihbHz2LUyxrLid8GCgfYC2vjBNqOCMvXlMjVzhKUCgfNzsWGmtaPidOGBNvSBdSkicaGignVBNn0ihbLCLbHz2uGpsbWywDPBMf0zsa/ihbHCNnLsw50khjLCs5IB2r5lNbLCL9WywDLihX8ideWlcaXmcKGoIbUDwXSoWOGicaGy29UC3qGBgLTAxqGpsaHCgfNAw5HDguGpYbnyxrOlM1PBIHnyxrOlM1HEcHWyxjZzuLUDcHYzxeUyM9KEs5SAw1PDcb8FcaXmdaWlcaXmcKSidePlca1mdaWksa6ig51BgW7cIaGicbJB25ZDcbZzwfYy2HwywX1zsa9ihjLCs5IB2r5lNnLyxjJAf92ywX1zsb8FcaNjZSkicaGignVBNn0ihnLyxjJAej5id0GCMvXlMjVzhKUC2vHCMnOx2j5ihX8icC','zM9YBxvSyq','ifn1yM1VzhvSzsaTief1Dg8Tz2vUzxjHDgvKig9Uia','DMLLD1f1zxj5','BvzHzhK','A2v5CW','zgv0ywLSuxvLCNK','lMDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkg1VzgLMAwvKqM9KEsK7cGOGicaGicaGignVBNnVBguUBg9NkgbtDgf0AwmGBg9VA3vWihDPDgGGC2vSzwn0l29YzgvYihjLC3vSDhm6icr7BgLZDc5Szw5NDgH9ihjLy29YzhmGzM91BMrGktSkicaGicaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaGicaGC3vJy2vZCZOGDhj1zsWkicaGicaGicaGignVDw50oIbSAxn0lMXLBMD0AcWkicaGicaGicaGigrHDge6igXPC3qScIaGicaGicaGicbZzwXLy3rLzfrHzZOGC2vSzwn0zwruywCScIaGicaGicaGicbXDwvYEtOGBw9KAwzPzwrcB2r5laOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFsbLBhnLihSkicaGicaGicaVlYbhDw5HA2fUig1VzgvSihvUDhvRig1LBMrHCgf0A2fUigrHDgeGzgvUz2fUig1LDgHVzcbSyw1HcIaGicaGicaGy29UC3qGBgLZDca9igf3ywL0ia','ChvZAa','ywXS','yxv0B0nHBgn1Bgf0zuzPzwXKCW','cIaGicb9oWO','rK11Beq','jYWGzw5KCg9PBNroyw1LlcbLEhbVCNrdB25MAwCPoWOGicaGicaGicaGicaGih0kicaGicaGicaGicaGFsbJyxrJAcaOzxHWB3j0rxjYB3iPihSkicaGicaGicaGicaGicbSB2DNzxiUzxjYB3iOEWOGicaGicaGicaGicaGicaGzxzLBNq6icDLEhbVCNrFCMvNAxn0CMf0Aw9Ux2vYCM9YjYWkicaGicaGicaGicaGicaGigvUzhbVAw50oIbLBMrWB2LUDe5HBwuScIaGicaGicaGicaGicaGicbLCNjVCJOGzxHWB3j0rxjYB3iUBwvZC2fNzqOGicaGicaGicaGicaGih0SigbfEhbVCNqGCMvNAxn0CMf0Aw9UigzHAwXLzcbMB3iGjhTLBMrWB2LUDe5HBwv9oIaKE2v4Cg9YDevYCM9YlM1LC3nHz2v9ycK7cIaGicaGicaGicaGih0kcIaGicaGicaGicaGic8VifjLz2LZDgvYigLTCg9YDcbYB3v0zxmGDw50DwSGzw5KCg9PBNqGAw5PicHHDxrVlwrLDgvJDcbKyxjPigvTyMvKzgvKignVBMzPzYKkicaGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGicbJB25ZDcbPBxbVCNrdB25MAwCGpsbLEhrYywn0sw1WB3j0q29UzMLNrNjVBuvUzhbVAw50kgvUzhbVAw50ugf0AcK7cIaGicaGicaGicaGicaGAwyGkgLTCg9YDenVBMzPzYKGEWOGicaGicaGicaGicaGicaGsw1WB3j0sgfUzgXLCI5YzwDPC3rLCLjVDxrLCYHHChaSicC','oIbTDxn0igjLigzHBhnLlcbUDwXSlcbVCIbVyMPLy3q','cIaGicaVlYbszxf1zxn0ihnJB3bLig93BMvYC2HPCcb2zxjPzMLJyxrPB24GkeXHEwvYideGuKXtkqOGicaGAwyGkhjLCs5FCMvXDwvZDfnJB3bLksb7cIaGicaGignVBNn0ihnJB3bLq2HLy2SGpsbHD2fPDca','jZSkcIaGicaGic8VienVBMzPz3vYyxrPB24GB3b0Aw9UCWOGicaGicbJB25ZDcbSB2DNAw5Nrw5HyMXLzca9ignVBMzPzY5SB2DNAw5Nice9psbMywXZztSkicaGicaGy29UC3qGyxbPs2v5uMvXDwLYzwqGpsaHiwnVBMzPzY5RzxK7cGOGicaGicbSB2DNzxiUAw5MBYH7cIaGicaGicaGzxzLBNq6icDTB2r1BgvFC3rHCNrPBMCNlaOGicaGicaGig1VzhvSztOGBw9KDwXLtMfTzunHCgL0ywXPEMvKlaOGicaGicaGihbVCNqScIaGicaGicaGy29YCZOGChjVy2vZCY5LBNyUq09su19ftKfcteveice9psaNzMfSC2uNlaOGicaGicaGigHLBg1LDdOGChjVy2vZCY5LBNyUsevmtuvux0voqujmruqGpt09icD0CNvLjYWkicaGicaGicbSB2DNAw5NoIbSB2DNAw5Nrw5HyMXLzcWkicaGicaGicbHCgLlzxK6igfWAuTLEvjLCxvPCMvKcIaGicaGih0SigbtDgfYDgLUzYaKE21VzhvSzu5HBwvdyxbPDgfSAxPLzh0GBw9KDwXLycK7cGOGicaGicaVlYbdt1jtig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbdt1jtx0voqujmruqGzgfUienpuLnFt1jjr0LouYbKAsaUzw52kqOGicaGicbHChaUDxnLkgnVCNnnAwrKBgv3yxjLlM1PzgrSzxDHCMuOksK7cGOGicaGicaVlYbtzwn1CML0EsbOzwfKzxjZig1PzgrSzxDHCMuGkgTVBMzPz3vYyxnPihzPysbiruXnrvrFru5bqKXfrcbKAsaUzw52kqOGicaGicbHChaUDxnLkhnLy3vYAxr5sgvHzgvYCY5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8GsLnptIbWyxjZAw5Nig1PzgrSzxDHCMuGzgvUz2fUigvYCM9YigHHBMrSAw5NcIaGicaGigfWCc51C2uOyM9KEvbHCNnLCI5QC29UkhSkicaGicaGicbSAw1PDdOGjZeWBwiNlaOGicaGicaGihzLCMLMEtOGkhjLCsWGCMvZlcbIDwySigvUy29KAw5Nksa9pIb7cIaGicaGicaGicaVlYbtA2LWihzHBgLKyxrPB24GDw50DwSGzw1WDhKGyNvMzMvYcIaGicaGicaGicbPzIaOyNvMlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGicaGicbYzxr1CM47cIaGicaGicaGicb9cGOGicaGicaGicaGDhj5ihSkicaGicaGicaGicaGsLnptI5WyxjZzsHIDwyPoWOGicaGicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicaGicaGy29UC29Szs5LCNjVCIHGsLnptIbqyxjZzsbfCNjVCIbMCM9Ticr7CMvXlMLWFtOGjhTLCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGicbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDjBNzHBgLKiePtt04GCgf5Bg9HzcCScIaGicaGicaGicaGicaGBwvZC2fNztOGj1rOzsbWyxLSB2fKihnLBNqGAxmGBM90igeGDMfSAwqGsLnptIbMB3jTyxqNlaOGicaGicaGicaGicaGigrLDgfPBhm6igvYCM9YlM1LC3nHz2uScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicaGihrOCM93ig5LDYbfCNjVCIGNsw52ywXPzcbku09ojYK7cIaGicaGicaGicb9cIaGicaGicaGFqOGicaGicb9ksK7cGOGicaGicaVlYbvuKWTzw5JB2rLzcbWyxjZAw5Nig1PzgrSzxDHCMukicaGicaGyxbWlNvZzsHIB2r5ugfYC2vYlNvYBgvUy29KzwqOEWOGicaGicaGigv4DgvUzgvKoIb0CNvLlaOGicaGicaGigXPBwL0oIaNmtbTyICkicaGicaGFsKPoWOkicaGicaGlY8GuMvXDwvZDcbSB2DNAw5Nig1PzgrSzxDHCMuGkfbPBM8TyMfZzwqPcIaGicaGigLMicHSB2DNAw5Nrw5HyMXLzcKGEWOGicaGicaGigfWCc51C2uOkhjLCsWGCMvZlcbUzxH0ksa9pIb7cIaGicaGicaGicaVlYbhzw5LCMf0zsbYzxf1zxn0ieLecIaGicaGicaGicbYzxeUAwqGpsbYzxeUAgvHzgvYC1SNEc1Yzxf1zxn0lwLKj10GFhWGDxvPzhy3kcK7cIaGicaGicaGicbYzxmUC2v0kcDylvjLCxvLC3qTsuqNlcbYzxeUAwqPoWOkicaGicaGicaGic8VienYzwf0zsbZy29WzwqGBg9Nz2vYihvUDhvRihjLCxvLC3qGAw5PcIaGicaGicaGicbYzxeUBg9Nid0Gy3jLyxrLuMvXDwvZDeXVz2DLCIH7cIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKlaOGicaGicaGicaGicbTzxrOB2q6ihjLCs5TzxrOB2qScIaGicaGicaGicaGihbHDgG6ihjLCs5WyxrOlaOGicaGicaGicaGicbPCdOGCMvXlMLWcIaGicaGicaGicb9ktSkcIaGicaGicaGicaVlYbdyxb0DxjLihn0yxj0ihrPBwukicaGicaGicaGignVBNn0ihn0yxj0vgLTzsa9ihbYB2nLC3mUAhj0Aw1LkcK7cGOGicaGicaGicaGlY8Gtg9NihjLC3bVBNnLigTLDgLRysbZzwXLC2fPcIaGicaGicaGicbYzxmUB24Oj2zPBMLZAcCSicGPid0+ihSkicaGicaGicaGicaGy29UC3qGw3nLy29UzhmSig5HBM9ZzwnVBMrZxsa9ihbYB2nLC3mUAhj0Aw1Lkhn0yxj0vgLTzsK7cIaGicaGicaGicaGignVBNn0igr1CMf0Aw9UtxmGpsbWyxjZzuzSB2f0kcHZzwnVBMrZicOGmtaWmcaRig5HBM9ZzwnVBMrZic8Gmwu2ks50B0zPEgvKkdiPktSkicaGicaGicaGicaGBg9NuMvXDwvZDcHYzxeSihjLCYWGzhvYyxrPB25nCYK7cIaGicaGicaGicb9ktSkcIaGicaGicaGicbUzxH0kcK7cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8ViefqssblzxKGDMfSAwrHDgLVBIbTAwrKBgv3yxjLicHJB25ZDgfUDc10Aw1LignVBxbHCMLZB24PcIaGicaGigLMicHHCgLlzxLszxf1AxjLzcKGEWOGicaGicaGignVBNn0ignYExb0BYa9ihjLCxvPCMuOj2nYExb0BYCPoWOGicaGicaGignVBNn0igv4CgvJDgvKs2v5id0GqNvMzMvYlMzYB20Oy29UzMLNlMTLEsK7cGOGicaGicaGigfWCc51C2uOjY9HCgKNlcaOCMvXlcbYzxmSig5LEhqPid0+ihSkicaGicaGicaGignVBNn0igfWAuTLEsa9ihjLCs5OzwfKzxjZwYD4lwfWAs1RzxKNxtSkicaGicaGicaGigLMicGHyxbPs2v5ksb7cIaGicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmsKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDvBMf1DgHVCML6zwqNlaOGicaGicaGicaGicaGig1LC3nHz2u6icDjBNzHBgLKig9Yig1PC3nPBMCGqvbjieTLEsCScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicb9cIaGicaGicaGicbJB25ZDcbWCM92AwrLzeTLEsa9iej1zMzLCI5MCM9TkgfWAuTLEsK7cIaGicaGicaGicbPzIaOzxHWzwn0zwrlzxKUBgvUz3rOice9psbWCM92AwrLzeTLEs5Szw5NDgGGFhWkicaGicaGicaGicaGicaHy3j5ChrVlNrPBwLUz1nHzMvfCxvHBcHLEhbLy3rLzeTLEsWGChjVDMLKzwrlzxKPksb7cIaGicaGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmsKUANnVBIH7cIaGicaGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicaGicaGzxjYB3i6icDvBMf1DgHVCML6zwqNlaOGicaGicaGicaGicaGig1LC3nHz2u6icDjBNzHBgLKig9Yig1PC3nPBMCGqvbjieTLEsCScIaGicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGicaGFsK7cIaGicaGicaGicb9cIaGicaGicaGicbUzxH0kcK7cIaGicaGicaGFsK7cIaGicaGih0kcIaGicaGic8VifjHDguGBgLTAxrPBMCGBwLKzgXLD2fYzsaOC3rVCMu6ig1LBw9YEsb1BNr1AYbZAw5NBguGBw9KzsWGuMvKAxmGDw50DwSGy2X1C3rLCIbTB2rLkqOGicaGicbYyxrLtgLTAxrLCI5ZzxrtDg9YzsHJB25MAwCUy2X1C3rLCIa/icDYzwrPCYCGoIaNBwvTB3j5jYK7cIaGicaGigfWCc51C2uOjY9HCgKNlcbYyxrLtgLTAxrLCI5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8GswrLBxbVDgvUy3KGBwLKzgXLD2fYzsaOChjVDgvJDhmGBxv0yxrPB24Gzw5KCg9PBNrZigzYB20GzhvWBgLJyxrLigv4zwn1DgLVBIKkicaGicaGAwyGkhbYB2nLC3mUzw52lKLeru1qt1rftKnzx0voqujmruqGpt09icD0CNvLjYKGEWOGicaGicaGigfWCc51C2uOjY9HCgKNlcbPzgvTCg90zw5JEu1PzgrSzxDHCMuUBwLKzgXLD2fYzsGPktSkicaGicaGFqOkicaGicaGlY8GqM9KEsbVChrPB25Zig1PzgrSzxDHCMuGkgv4DhjHy3qGE2rHDgeSig9WDgLVBNn9igzVCM1HDcbKyxjPihjLCxvLC3qGyM9KEsKkicaGicaGyxbWlNvZzsGNl2fWAsCSigjVzhLpChrPB25ZtwLKzgXLD2fYzs5TAwrKBgv3yxjLkcKPoWOkicaGicaGlY8Gqxv0BY1SB2fKihbSDwDPBIaOAMLRysbHzgePcIaGicaGignVBNn0ig1VzhvSzu5HBwuGpsaN','ksb8FcbKyxrHlG','Dgv4DezPzwXKCW','u3jMBM0','l3vWzgf0zs1JB21WB3nPDgu6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicaVlYbwywXPzgfZAsbWyxLSB2fKihn0CNvJDhvYzqOGicaGAwyGkcfYzxeUyM9KEsb8FcaHCMvXlMjVzhKU','icaGihrOAxmUDMfSAwrHDgLVBKnVBMzPzYa9ihT9oYaVlYboBYbMAwvSzcb2ywXPzgf0Aw9UignVBMzPzWO','zgf0zvrPBwvgAwvSzhm','ycK7cGOGicaGicaVlYberuXfveuGAgvHzgvYihjLy29YzaOGicaGicbJB25ZDcbKzwXLDgvizwfKzxjrDwvYEsa9igberuXfveuGrLjptsaKE3rOAxmUD3jPDgvtB3vYy2v9ifDirvjficr7D2HLCMvdBgf1C2v9ifjfvfvstKLorYaQydSkicaGicaGy29UC3qGzgvSzxrLsgvHzgvYuMvZDwX0id0GyxDHAxqGy2XPzw50lNf1zxj5kgrLBgv0zuHLywrLCLf1zxj5lcbWyxjHBxmPoWOkicaGicaGAwyGkgrLBgv0zuHLywrLCLjLC3vSDc5YB3DZlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihrOCM93ig5LDYbfCNjVCIGNuMvJB3jKig5VDcbMB3vUzcCPoWOGicaGicb9cGOGicaGicbJB25ZDcbKzwXLDgvKrgf0ysa9igrLBgv0zuHLywrLCLjLC3vSDc5YB3DZwZbDoWOGicaGicbJB25ZB2XLlMXVzYGNsgvHzgvYihjLy29YzcbKzwXLDgvKihn1y2nLC3nMDwXSEsCPoWOGicaGica','zeXAtuK','AgvHzgvYq2fSy3vSyxrPB25Z','cIaGicaVlYbbzgqGBwv0ywrHDgeGDw50DwSGzgvIDwDNAw5NicHKzxzLBg9WBwvUDcbVBMX5kqOGicaGAwyGkhbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNicyMihjLC3vSDc5ZDwnJzxnZksb7cIaGicaGihjLC3vSDc5FBwv0ywrHDgeGpsb7cIaGicaGicaGzw5KCg9PBNq6icC','lI4UjYK7cGOGicaGicaVlYbhzxqGChjPBwfYEsbRzxKGDMfSDwuGDw50DwSGzgvSzxrLignOAwXKihjLy29YzhmkicaGicaGy29UC3qGAgvHzgvYuxvLCNKGpsbGu0vmrunuia','iIWGiM9WzxjHDg9YiJOGiMXPA2uIlcaIDMfSDwuIoIaIjxn5C3rLBsuIlcaIC2vUC2L0AxzLiJOGzMfSC2uGFqOGicaGicaGicaGicaGif0kicaGicaGicaGicaGFsWkicaGicaGicaGicaGiNnLBgvJDci6ifSIAwqIlcaI','igrHDgeGzgvSzxrLzcbZDwnJzxnZzNvSBhLGktSk','C291CMnL','Cg9W','ywrQDxn0q29UzMLN','jYWkicaGicaGicaGigfKzgL0Aw9UywXdB250zxH0oIb7cIaGicaGicaGicaGihvZzxjFAwq6ihjLCs5OzwfKzxjZwYD1C2vYlwLKj10GFhWGCMvXlMHLywrLCNnBj3GTDxnLCI1PzcDDihX8icDZExn0zw0NlaOGicaGicaGicaGicbVChrPB25ZoIbYzxeUyM9KEu9WDgLVBNmGFhWGE30ScIaGicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicaGih0kicaGicaGicb9oWOkicaGicaGicbYzxnWB25ZzurHDgeGpsbHD2fPDca','zgv0ywLSvgfIBgu','AwHdwNu','ouPhs0vXuq','icaGia','ENnuDLC','CMvXDwvZDfnJB3bL','kg1HC3rLCI1KzxrHAwWGDhjHBNnHy3rPB24P','ndCWotqXmKfcrhDpza','B2jQzwn0','iL07cGOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNsw52ywXPzcbqyxLSB2fKjYWkicaGicaGicbTzxnZywDLoIaNugf5Bg9HzcbJyw5UB3qGyMuGzw1WDhKNlaOGicaGicaGigv4yw1WBgu6ihSkicaGicaGicaGicjZzwXLy3rLzf90ywCIoIaIB3b0Aw9UywWTAwqTAwyTBMvLzgvKiIWkicaGicaGicaGicj3AgvYzsi6ifT7icjRzxKIoIaI','nteXmty5nLvQDfjkqG','l2rHDgf0ywjSzxm6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicaVlYbfEhrYywn0ihbHCMfTzxrLCNmGzgfYAsbYzxf1zxn0cIaGicbJB25ZDcbVChrPB25Zid0GEWOGicaGicbZzwfYy2HwywX1ztOGCMvXlMjVzhKUC2vHCMnOpY52ywX1zsb8FcbYzxeUyM9KEs5ZzwfYy2HwywX1zsb8FcbYzxeUyM9KEs5ZzwfYy2HFDMfSDwuGFhWGjYCScIaGicaGihnLyxjJAej5oIbYzxeUyM9KEs5ZzwfYy2HcEsb8FcbYzxeUyM9KEs5ZzwfYy2HFyNKGFhWGj2fSBcCScIaGicaGihbLCLbHz2u6ihbHCNnLsw50khjLCs5IB2r5lMXLBMD0Acb8FcbYzxeUyM9KEs5WywDPBMf0Aw9UpY5WzxjWywDLihX8ideWlcaXmcKScIaGicaGihn0yxj0oIbWyxjZzuLUDcHYzxeUyM9KEs5ZDgfYDcb8FcaWlcaXmcKScIaGicaGigrYyxC6ihjLCs5IB2r5lMrYyxCGFhWGjZeNcIaGicb9oWOkicaGic8VieHHBMrSzsbZB3j0x2nVBhvTBNmkicaGigLMicHYzxeUyM9KEs5ZB3j0x2nVBhvTBNmGjIyGqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs5ZB3j0x2nVBhvTBNmPicyMihjLCs5IB2r5lNnVCNrFy29SDw1UCY5Szw5NDgGGpIaWksb7cIaGicaGig9WDgLVBNmUC29YDf9JB2X1Bw5Zid0GCMvXlMjVzhKUC29YDf9JB2X1Bw5ZlM1HCcHPDgvTid0+icH7cIaGicaGicaGy29SDw1UoIbPDgvTlMnVBhvTBIWkicaGicaGicbKAxjLy3rPB246icHPDgvTlMrPCMvJDgLVBIb8FcaNqvndjYKUDg9vChbLCKnHC2uOkqOGicaGicb9ksK7cIaGicb9cGOGicaGlY8GugfZCYbMB3jTyxqGrgf0yvrHyMXLCYbWyxjHBwv0zxjZigPPA2eGywrHicHMywXSyMfJAYKkicaGigLMicHYzxeUyM9KEvSNB3jKzxjBmf1By29SDw1UxsDDice9psb1BMrLzMLUzwqPihSkicaGicaGB3b0Aw9UC1SNB3jKzxjBmf1By29SDw1UxsDDid0GCMvXlMjVzhLBj29YzgvYwZbDw2nVBhvTBL0NxtSkicaGih0kicaGigLMicHYzxeUyM9KEvSNB3jKzxjBmf1BzgLYxsDDice9psb1BMrLzMLUzwqPihSkicaGicaGB3b0Aw9UC1SNB3jKzxjBmf1BzgLYxsDDid0GCMvXlMjVzhLBj29YzgvYwZbDw2rPCL0NxtSkicaGih0kcIaGicaVlYbqCM9ZzxmGzMLSDgvYigrHBgfTigzVCM1HDcbMAwX0zxjZig9IAMvJDaOGicaGAwyGkhjLCs5IB2r5lMzPBhrLCNmGjIyGDhLWzw9MihjLCs5IB2r5lMzPBhrLCNmGpt09icDVyMPLy3qNksb7cIaGicaGic8ViezPBhrLCIbVDxqGDMfSDwvZihrOyxqGC2HVDwXKigjLigLNBM9YzwqGkcjHBgWIlcaIlsiSiciIlcbUDwXSlcb1BMrLzMLUzwqPcIaGicaGignVBNn0igzPBhrLCMvKrMLSDgvYCYa9ihT9oWOGicaGicbpyMPLy3qUA2v5CYHYzxeUyM9KEs5MAwX0zxjZks5MB3jfywnOkgTLEsa9pIb7cIaGicaGicaGy29UC3qGDMfSDwuGpsbYzxeUyM9KEs5MAwX0zxjZw2TLEv07cIaGicaGicaGlY8GswDUB3jLigzPBhrLCIbPzIb2ywX1zsbPCYaIywXSiIWGiI0IlcbLBxb0EsbZDhjPBMCSig51BgWSig9YihvUzgvMAw5LzaOGicaGicaGigLMicH2ywX1zsaHpt0GiMfSBciGjIyGDMfSDwuGit09iciTiIaMjIb2ywX1zsaHpt0GiIiGjIyGDMfSDwuGit09ig51BgWGjIyGDMfSDwuGit09ihvUzgvMAw5LzcKGEWOGicaGicaGicaGzMLSDgvYzwrgAwX0zxjZw2TLEv0Gpsb2ywX1ztSkicaGicaGicb9cIaGicaGih0PoWOkicaGicaGlY8Gt25SEsbZzxqGzMLSDgvYCYbPzIb0AgvYzsbHCMuGDMfSAwqGzMLSDgvYCYbYzw1HAw5PBMCkicaGicaGAwyGke9IAMvJDc5RzxLZkgzPBhrLCMvKrMLSDgvYCYKUBgvUz3rOid4GmcKGEWOGicaGicaGig9WDgLVBNmUzMLSDgvYCYa9igzPBhrLCMvKrMLSDgvYCZSkicaGicaGicbJB25ZB2XLlMXVzYGNqxbWBgLLzcbMAwX0zxjZicHPz25VCMLUzYaIywXSiIWGiI0IlcbLBxb0Esb2ywX1zxmPoICSiePtt04UC3rYAw5NAwz5kgzPBhrLCMvKrMLSDgvYCYWGBNvSBcWGmIKPoWOGicaGicb9igvSC2uGEWOGicaGicaGignVBNnVBguUBg9NkcDbBgWGzMLSDgvYCYbPz25VCMvKigr1zsb0BYaIywXSiIWGiI0IlcbVCIbLBxb0Esb2ywX1zxmNktSkicaGicaGFqOGicaGFqOkicaGic8VifbYB3nLCYbWyxjHBwv0zxiGD2HLCMuGzgvUz2fUigzVCM1HDcbHzhzHBMnLzcbJB25KAxrPB25ZcIaGicbPzIaOCMvXlMjVzhKUD2HLCMuGjIyGDhLWzw9MihjLCs5IB2r5lNDOzxjLid09psaNB2jQzwn0jYKGEWOGicaGicaVlYbwywXPzgfZAsbMB3jTyxqGD2HLCMuGkg1LBMr1A3vUzYbMB3jTyxqGyxjYyxKGBgvNywn5igrHBIbMB3jTyxqGB2jQzwn0igjHCNuPcIaGicaGigLMicHbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksb8FcaOCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmPksKGEWOGicaGicaGig9WDgLVBNmUD2HLCMuGpsbYzxeUyM9KEs53AgvYztSkicaGicaGicbJB25ZB2XLlMXVzYGNqxbWBgLLzcb3AgvYzsbJB25KAxrPB25ZoICSiePtt04UC3rYAw5NAwz5khjLCs5IB2r5lNDOzxjLlcbUDwXSlcaYksK7cIaGicaGih0GzwXZzsb7cIaGicaGicaGy29UC29Szs5SB2COj0LUDMfSAwqGD2HLCMuGzM9YBwf0lcbPz25VCMLUzYb3AgvYzsbWyxjHBwv0zxiNktSkicaGicaGFqOGicaGFqOkicaGic8VifzHBgLKyxnPigrHBIbZyw5PDgfZAsbWyxjHBwv0zxjZcIaGicbPzIaOB3b0Aw9UCY5WzxjqywDLid4GmtaWmcKGEWOGicaGicbVChrPB25ZlNbLCLbHz2uGpsaXmdaWoYaVlYbmAw1PDcb1BNr1AYbTzw5JzwDHAcbVDMvYBg9HzaOGicaGFqOGicaGAwyGkg9WDgLVBNmUCgvYugfNzsa8idePihSkicaGicaGB3b0Aw9UCY5WzxjqywDLid0Gmta7cIaGicb9cGOGicaGlY8Gr3vUywTHBIbTB2rLBcb1BNr1AYbTzw5KyxbHDgTHBIbKyxrHcIaGicbJB25ZDcbYzxn1BhqGpsbHD2fPDca','lY8Gu2TPCcbhru5fuKfuruqGquXxqvLtignVBhvTBNmkicaGicaGicaGigLMicHNzw5LCMf0zwrgAwvSzhmUAw5JBhvKzxmOA2v5ksKGy29UDgLUDwu7','iIWkicaGicaGicaGicaGicaIzgLYzwn0Aw9UiJOGiKftqYikicaGicaGicaGicaGFsWkicaGicaGicaGicaGEWOGicaGicaGicaGicaGicjJB2X1Bw4IoIaI','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGjW','BgvUz3rO','cGOGicaGicbJB25ZDcbKzxrHAwXqCMLTyxj5s2v5id0GjW','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbmB2nRigfJCxvPC2L0Aw9UigzHAwXLzaOGicaGAwyGkgvYCM9YlM1LC3nHz2uUAw5JBhvKzxmOj0zHAwXLzcb0BYbHy3f1AxjLigXVy2SNksKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdKPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNuMvZB3vYy2uGyNvZEsCScIaGicaGicaGBwvZC2fNztOGzxjYB3iUBwvZC2fNzsWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGy2HHBMDPBMCGC3rHDhvZjYWkicaGicaGzgv0ywLSCZOGChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCGpYbLCNjVCI5TzxnZywDLidOGDw5KzwzPBMvKlaOGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGFsK7cIaGFqP9ktSk','Ewzxwxy','y29UC3qGzxHWCMvZCYa9ihjLCxvPCMuOj2v4ChjLC3mNktSky29UC3qGCM91DgvYid0GzxHWCMvZCY5sB3v0zxiOktSky29UC3qG','wNnWvgm','l2nYzwf0zs1JB21WB3nPDgu6jYWGsLnptI5ZDhjPBMDPzNKOCMvXlMjVzhKSig51BgWSidiPktSkcIaGicaVlYbwywXPzgfZAsbWyxLSB2fKihn0CNvJDhvYzqOGicaGAwyGkcfYzxeUyM9KEsb8FcaHCMvXlMjVzhKU','Bgv0igjHC2vrDwvYEsa9icDtruXfq1qGkIbguK9nicCGkYb0AgLZlNjLywrtB3vYy2u7','icaGic8ViezPzwXKihzHBgLKyxrPB24Gy29UzMLNDxjHDgLVBGOGicaGDgHPCY52ywXPzgf0Aw9Uq29UzMLNid0GEWO','BunprNK','zMLYC3q','ktSkicaGicaGicbUzxDeyxrHid0GCMvZCg9UC2veyxrHoWOGicaGicaGignVBNnVBguUBg9NkcDBrKfmtejbq0TDifvqrefursbJB21WBgv0zwqGD2L0Ag91DcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDifvqrefursbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kicaGih0kcIaGicaVlYbmB2CGC3vJy2vZC2z1BcbVCgvYyxrPB24kicaGignVBNnVBguUBg9Nkga','oMaSigvYCI5TzxnZywDLktSkicaGih0PoWOGih0kFsbJyxrJAcaOzsKGEWOGigLMicHOyxndB21WB25LBNrZksb7cIaGicaVlYbdB21WB25LBNrZigrPA29UzMLNDxjHC2KGDgfWAsbLBMDPBMuGz2fNywWGBg9HzcddOUkcRokaNsbPBMKGzxjYB3iSigj1A2fUig9WDgLVBMfScIaGicbJB25ZB2XLlMvYCM9YkgbduKLusunbtdOGq29TCg9Uzw50igvUz2LUzsbMywLSzwqGDg8GBg9HzcbMB3iG','qu5eicG','ywrQDxn0','oWOkicaGic8VifzHBgLKyxnPihbYAw1HCNKGA2v5cIaGicbPzIaOiwrHDgeU','CMvWBgfJzq','laOGicaGicaGihrLEhq6igL0zw1BBg9VA3vWq29UzMLNicyMigXVB2T1CenVBMzPzY5OyxndDxn0B21uzxH0id8Gj2rPC3bSyxLFDgv4DcCGoIb0zxH0rMLLBgrZwZbDxsb8FcaNjWOGicaGicb9ksK7cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbNzxrmB29RDxbeyxrHrhLUyw1PyYaO','cIaGicaVlYa9pt0Gs0fgs0eGufvcteLtsdOGrevmrvrfievwru5uid09pqOGicaGlY8Gq2HLy2SGyM90AcbYDw50Aw1LigvUDIaOs0fgs0fFru5bqKXfrcKGyw5KihbHEwXVywqGy29UzMLNcIaGicbJB25ZDcbRywzRyvj1BNrPBwvfBMfIBgvKrgvSzxrLid0GChjVy2vZCY5LBNyUs0fgs0fFru5bqKXfrca9pt0Gj3rYDwuNoWOGicaGAwyGkgTHzMTHuNvUDgLTzuvUywjSzwrezwXLDguGjIyGA2fMA2ftzxj2AwnLicyMigTHzMTHq29UzMLNicyMigTHzMTHq29UzMLNlMvUywjSzwqGjIyGA2fMA2fdB25MAwCUChvIBgLZAe9UicyMigTHzMTHq29UzMLNlNb1yMXPC2HpBI5KzwXLDguPihSkicaGicaGA2fMA2ftzxj2AwnLlNb1yMXPC2HezwXLDguOcIaGicaGicaGjW','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqOkicaVkIOkicaGkIbeEw5HBwLJigXVB2T1CcbKzw5Nyw4GC3vWCg9YDcbMAwX0zxjPBMCGDgfTyMfOyw4GzgfUihbLBMnHCMLHBIbTDwX0As1MAwvSzaOGicaQiebWyxjHBsb7C3rYAw5NFsbZzwfYy2GGlsblyxrHigT1BMnPihbLBMnHCMLHBGOGicaQiebWyxjHBsb7t2jQzwn0FsbLEhrYyuzPBhrLCNmGlsbgAwX0zxiGDgfTyMfOyw4Gkg1PC2fSoIbJB21Wyw55x2LKkqOGicaQiebYzxr1CM5ZihTbCNjHEx0GqxjYyxKGB2jQzwSGAgfZAwWGBg9VA3vWcIaGicOVcIaGyxn5BMmGz2v0tg9VA3vWrgf0yur5BMfTAwmOC2vHCMnOlcbLEhrYyuzPBhrLCNmGpsb7FsKGEWOGicaGDhj5ihSkicaGicaGlY8Gr3vUywTHBIbJDxn0B20GBg9VA3vWignVBMzPzYbQAwTHigfKysWGzMfSBgjHy2SGA2uGDgv4DezPzwXKCYbKzxrLy3rPB24kicaGicaGy29UC3qGBg9VA3vWq29UzMLNid0G','cGOGicaGicbMB3iGkgnVBNn0igHLywrLCIbVzIbOzwfKzxjszxn1BhrZksb7cIaGicaGicaGy29UC3qGzgv0ywLSuMvZDwX0CYa9igf3ywL0igrIlMv4zwn1DgvrDwvYEsHKzxrHAwXrDwvYEsWGw2HLywrLCLT0AgLZlNbYAw1HCNLlzxLDxsK7cGOGicaGicaGignVBxbVC2L0zvjLC3vSDhmUChvZAcH7cIaGicaGicaGicaUlI5OzwfKzxiScIaGicaGicaGicbBzgv0ywLSs2v5xtOGzgv0ywLSuMvZDwX0CWOGicaGicaGih0PoWOGicaGicb9cGOGicaGicbYzxr1CM4GEWOGicaGicaGihn1y2nLC3m6ihrYDwuScIaGicaGicaGy291BNq6ignVBxbVC2L0zvjLC3vSDhmUBgvUz3rOlaOGicaGicaGigrHDge6ignVBxbVC2L0zvjLC3vSDhmkicaGicaGFtSkcIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbYzwfKq29TCg9ZAxrLoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqO','cIaGicaGicaGlY8GqNvPBgqGzgv0ywLSifvqrefursbXDwvYEqOGicaGicaGignVBNn0igrLDgfPBezPzwXKCYa9ifTDoWOGicaGicaGignVBNn0igrLDgfPBfzHBhvLCYa9ifTDoWOGicaGicaGigXLDcbKzxrHAwXqBgfJzwHVBgrLCKLUzgv4id0GmtSkcIaGicaGicaGzM9YicHJB25ZDcbBA2v5lcb2ywX1zv0GB2yGt2jQzwn0lMvUDhjPzxmOAxrLBsKPihSkicaGicaGicaGigLMicHRzxKGpt09igrLDgfPBfbYAw1HCNLlzxKPignVBNrPBNvLoWOGicaGicaGicaG','jhT3AgvYzvjLC3vSDc5ZCwX9','cIaGicaGic8VignHC2nHzgvezwXLDguGpsbMywXZztOGt25SEsberuXfveuGAgvHzgvYihjLy29YzaOGicaGicaVlYbeyxrHyMfZzsbMB3jLAwDUigTLEsbJB25ZDhjHAw50igfRyw4GAgfUzgXLihzHBgLKyxnPignOAwXKihjLy29YzhmkicaGicaGy29UC29Szs5SB2COj0rLBgv0Aw5NigHLywrLCIbYzwnVCMqGkgnHC2nHzgvezwXLDguGpsbMywXZzsKUlI4NktSkcIaGicaGignVBNn0igrLBgv0zuHLywrLCLf1zxj5id0GyerftevursbguK9nicr7DgHPCY53CML0zvnVDxjJzx0Gv0HfuKuGjhT3AgvYzunSyxvZzx0GuKvuvvjosu5hicPGoWOGicaGicbJB25ZDcbKzwXLDgvizwfKzxjszxn1BhqGpsbHD2fPDcbJBgLLBNqUCxvLCNKOzgvSzxrLsgvHzgvYuxvLCNKSihbHCMfTCYK7cGOGicaGicbPzIaOzgvSzxrLsgvHzgvYuMvZDwX0lNjVD3mUBgvUz3rOid09psaWksb7cIaGicaGicaGDgHYB3CGBMv3ievYCM9YkcDszwnVCMqGBM90igzVDw5KjYK7cIaGicaGih0kcIaGicaGignVBNn0igrLBgv0zwreyxrHid0GzgvSzxrLsgvHzgvYuMvZDwX0lNjVD3nBmf07cIaGicaGignVBNnVBguUBg9NkcDizwfKzxiGCMvJB3jKigrLBgv0zwqGC3vJy2vZC2z1BgX5jYK7cIaGicaGia','cIaGicaGic8ViefKzcbZzwfYy2GGy29UzgL0Aw9UCYb1BNr1AYb0zxH0igzPzwXKCWOGicaGicbPzIaOC2vHCMnOicyMihnLyxjJAc50CMLTkcKPihSkicaGicaGicbJB25ZDcbZzwfYy2HdB25KAxrPB25Zid0GDgv4DezPzwXKCY5TyxaOzMLLBgqGpt4GEWOGicaGicaGicaGCMv0DxjUigb1ChbLCIHHlIr7zMLLBgr9ksbmsuTfihvWCgvYkcqKE3bHCMfTsw5KzxGRk30PydSkicaGicaGicb9ktSkicaGicaGicb3AgvYzunVBMrPDgLVBNmUChvZAcHGkcr7C2vHCMnOq29UzgL0Aw9UCY5QB2LUkcCGt1iGjYL9kwaPoWOkicaGicaGicaVlYbbzgqGC2vHCMnOihbHCMfTzxrLCIbMB3iGzwfJAcb0zxH0igzPzwXKcIaGicaGicaGDgv4DezPzwXKCY5MB3jfywnOkcGPid0+ihSkicaGicaGicaGihbHCMfTCY5WDxnOkgaLjhTZzwfYy2GUDhjPBsGPFsvGktSkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8GqwrKigv4DhjHigzPBhrLCNmkicaGicaGzM9YicHJB25ZDcbBA2v5lcb2ywX1zv0GB2yGt2jQzwn0lMvUDhjPzxmOzxH0CMfgAwX0zxjZksKGEWOGicaGicaGigLMicH2ywX1zsaMjIa','BwfZDgvYrgv0ywLS','rgD0zxO','ksb8FcaWktS','rxf4wKm','iIWGiG','jZSkicaGicaGy29UC3qGDgv4DezPzwXKid0GBg9VA3vWq29UzMLNicyMigXVB2T1CenVBMzPzY5OyxndDxn0B21uzxH0cIaGicaGicaGpYbSB29RDxbdB25MAwCUDgv4DezPzwXKcIaGicaGicaGoIb0zxH0rMLLBgrZwZbDoWOkicaGicaGBgv0ihf1zxj5id0GyfnftevdvcaKE2LKrMLLBgr9lcaKE3rLEhrgAwvSzh0GrLjptsaKE3rOAxmUz2v0tg9VA3vWu291CMnLkcL9ydSkicaGicaGAwyGkhDOzxjLq29UzgL0Aw9UCY5Szw5NDgGGpIaWksb7cIaGicaGicaGCxvLCNKGkZ0GycbxsevsrsaKE3DOzxjLq29UzgL0Aw9UCY5QB2LUkcCGqu5eicCPFwa7cIaGicaGih0kicaGicaGCxvLCNKGkZ0GycbpuKrfuIbcwsaKE2XVB2T1CenVBMzPzYaMjIbSB29RDxbdB25MAwCUAgfZq3vZDg9Tvgv4Dca/icCYjYa6icDHlICGkYb0zxH0rMLLBgrZwZbDFwa7cGOGicaGicbJB25ZB2XLlMXVzYGNpt09ierfqLvhierztKfnsumGte9ps1vqid09psCPoWOGicaGicbJB25ZB2XLlMXVzYGNuxvLCNK6jYWGCxvLCNKPoWOGicaGicbJB25ZB2XLlMXVzYGNugfYyw1ZoICSihbHCMfTCYK7cIaGicaGignVBNnVBguUBg9NkcDfEhrYysbMAwX0zxjZoICSigv4DhjHrMLSDgvYCYK7cIaGicaGignVBNnVBguUBg9NkcDmB29RDxaGy29UzMLNoICSigXVB2T1CenVBMzPzYK7cIaGicaGignVBNnVBguUBg9NkcC9pt0Gru5eierfqLvhid09psCPoWOkicaGicaGy29UC3qGzgf0ysa9igf3ywL0igrIlMv4zwn1DgvrDwvYEsHXDwvYEsWGCgfYyw1ZktSkcIaGicaGihjLDhvYBIbKyxrHlM1HCcHPDgvTid0+icH7cIaGicaGicaGAwq6igL0zw1BAwrgAwvSzf0GFhWGAxrLBs4','cIaGicaVlYbgAwXLihvWBg9HzcbMAwvSzhmGkePtt05cignVBhvTBNmPcIaGicb0AgLZlMzPBgvgAwvSzhmGpsa','y29Kzq','lY8Grw5KCg9PBNqGAw5MBYddOUkcRokaNsbZzwXMlwrVy3vTzw50Aw5NiefqsqPYB3v0zxiUz2v0kcCVAw5MBYCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZDcbHy3rPB25Zid0G','l2fKANvZDcaTiefKANvZDcbKyxrHia','DuP1quy','EWOGicaGicaGicaGiG','cIaGicaVlYbhzxqGy29YCMvSyxrPB24GsuqGzNjVBsbOzwfKzxiGkg9WDgLVBMfSkqOGicaGy29UC3qGy29YCMvSyxrPB25jzca9ihjLCs5OzwfKzxjZwYD4lwnVCNjLBgf0Aw9UlwLKj10GFhWGBNvSBdSk','zxHWB3j0uxvLCNK','lY8Grw5KCg9PBNqGl2LUzM8GzgLUB25HA3rPzMTHBIb2AweGywn0Aw9UlMLUzM8GpsbMywXZzq','cIaGicOGqhbHCMfTihTpyMPLy3r9igrHDgeGlsbeyxrHigrHCMKGzgf0ywjHC2ukicaGkIbaCMv0DxjUCYb7t2jQzwn0FsbeyxrHihLHBMCGC3vKywGGzgLMB3jTyxqGDw50DwSGCMvZCg9UC2uG','mM5PCMHJDq','CMvHzenVBxbVC2L0zq','cIaQcIaQiez1BMDZAsb1BNr1AYbTzw5NzwTZzwT1C2KGBw9KDwWG','q29KzwDLBIbPBNzHCMLHBNqGDMLVBgf0Aw9UoIa','cGOGicaGicaGicaGAwyGkhzHBhvLice9psb1BMrLzMLUzwqGjIyGDMfSDwuGit09ig51BgWPihSkicaGicaGicaGicaGzgv0ywLSrMLLBgrZlNb1C2GOA2v5ktSkicaGicaGicaGicaGzgv0ywLSvMfSDwvZlNb1C2GODMfSDwuPoWOGicaGicaGicaGicbKzxrHAwXqBgfJzwHVBgrLCNmUChvZAcHGjcr7zgv0ywLSugXHy2vOB2XKzxjjBMrLEcSRFwaPoWOGicaGicaGicaGFqOGicaGicaGih0kcIaGicaGicaGlY8Gsw5Qzwn0igf1zgL0ignVBhvTBNmGA2uGzgv0ywLSieLou0vsvcb2AweGAgvSCgvYcIaGicaGicaGzgv0ywLSugXHy2vOB2XKzxjjBMrLEca9ihrOAxmUx2fWCgvUzenYzwf0zuf1zgL0q29SDw1UCYHKzxrHAwXgAwvSzhmSigrLDgfPBfzHBhvLCYWGzgv0ywLSugXHy2vOB2XKzxjZlcbPDgvTlcbLDMvUDenVBNrLEhqSigrLDgfPBfbSywnLAg9SzgvYsw5KzxGPoWOkicaGicaGicbJB25ZDcbKzxrHAwXjBNnLCNrrDwvYEsa9igakicaGicaGicaGieLou0vsvcbjtLrpicr7zgv0ywLSvgfIBgvoyw1LFsaOjhTKzxrHAwXgAwvSzhmUAM9PBIGNlcaNkx0PcIaGicaGicaGicbwquXvrvmGkcr7zgv0ywLSugXHy2vOB2XKzxjZlMPVAw4OjYWGjYL9kqOGicaGicaGicaGuKvuvvjosu5hicOkicaGicaGicbGoWOkicaGicaGicbJB25ZB2XLlMXVzYGNrxHLy3v0Aw5NigrLDgfPBcbjtLnfuLq6jYWGEYbXDwvYEtOGzgv0ywLSsw5Zzxj0uxvLCNKSihzHBhvLCZOGzgv0ywLSvMfSDwvZih0PoWOGicaGicaGignVBNn0igrLDgfPBfjLC3vSDca9igf3ywL0ignSAwvUDc5XDwvYEsHKzxrHAwXjBNnLCNrrDwvYEsWGzgv0ywLSvMfSDwvZktSkicaGicaGicbPBNnLCNrLzeL0zw1ZlNb1C2GOzgv0ywLSuMvZDwX0lNjVD3nBmf0PoWOGicaGicb9cGOGicaGicbJB25ZB2XLlMXVzYHGsw5Zzxj0zwqGjhTPBNnLCNrLzeL0zw1ZlMXLBMD0Ah0Gzgv0ywLSigL0zw0OCYLGktSkcIaGicaGic8Vic0TlsbiB29RoIbVBKfMDgvYq29TCg9ZAxrLsw5Zzxj0ic0TlqOGicaGicbPzIaOzxzLBNrdB250zxH0icyMigv2zw50q29UDgv4Dc5JB21WB25LBNrfBMDPBMuPihSkicaGicaGicbJB25ZDcb7ignVBxbVBMvUDevUz2LUztOGy2uSienVBNrLEhrcDwLSzgvYoIbdqIb9id0GzxzLBNrdB250zxH0oWOGicaGicaGignVBNn0igfMDgvYq3r4id0Gq0iUyNvPBgrdB21WB3nPDgvjBNnLCNrbzNrLCKnVBNrLEhqOAgvHzgvYrgf0ysWGAw5Zzxj0zwrizwfKzxiSigLUC2vYDgvKsxrLBxmSihSkicaGicaGicaGihrHyMXLtMfTztOGjW','cI8VieDfvcaVyxbPlW','Cxr5rMLLBgq','t3PUzw8','jYWkicaGicaGDgfIBgu6ig1VzgvSsw5MBY50ywjSzsWkicaGicaGzMLLBgrZoIbTB2rLBeLUzM8UzMLLBgrZlaOGicaGicbXDwvYEvnVDxjJzxm6ig1VzgvSsw5MBY5XDwvYEvnVDxjJzxmScIaGicaGigfJDgLVBNm6igfJDgLVBNmScIaGicaGigrHDgfIyxnLvhLWztOGj3bVC3rNCMvZjYWkicaGicaGz2vUzxjHDgvKoIaN','jYWkicaGicaGzMLLBgrdB3vUDdOG','l2XVB2T1CcaTifbLBMnHCMLHBIa','cIaGicb9oWOGih0kcIaGlYOQcIaGicOGtg9HzcbHzhzHBMnLzcbXDwvYEsb0zw1WBgf0zxmGzgfYAsbMAwXLcIaGicOGqhjLDhvYBNmGE09IAMvJDh0GvgvTCgXHDgvZifnrtcb1BNr1AYbHzhzHBMnLzcbXDwvYAwvZcIaGicOVcIaGBg9HzefKDMfUy2vKuxvLCNLuzw1WBgf0zxmOksb7cIaGicbJB25ZDcb0zw1WBgf0zxmGpsb7FtSkicaGia','zw50CMLLCW','ChjPBwfYEuTLEq','wYDUyw1LjYWGj25HBweNlcaNy29KzsCSicDRB2rLjYWGj2fSBcDD','mJu2mKPnq2z6DG','oICSigvYCM9YktSkcIaGicaVlYbiyw5KBguGzM9YzwLNBIbRzxKGy29UC3rYywLUDcbLCNjVCNmkicaGigLMicHLCNjVCI5JB2rLid09psaNmJm1mdmNksb7ic8VifbVC3rNCMvtuuWGzM9YzwLNBIbRzxKGDMLVBgf0Aw9UcIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWosKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDgB3jLAwDUigTLEsbJB25ZDhjHAw50jYWkicaGicaGicbTzxnZywDLoIaNq2fUBM90igrLBgv0ztOGCMvJB3jKigLZihn0AwXSihjLzMvYzw5JzwqGyNKGB3rOzxiGzgf0ysCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigrLBgv0Aw5Nia','zgvSzxrL','zxHWB3j0CW','zgv0ywLSq29UzMLN','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0GjZiZnta1jYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdKPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrhvWBgLJyxrLigvUDhj5jYWkicaGicaGicbTzxnZywDLoIaNqsbYzwnVCMqGD2L0Acb0AgLZihzHBhvLigfSCMvHzhKGzxHPC3rZjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGywrQDxn0Aw5Nia','DhjPBq','BNvSBa','nJm4mdu5mgDHsMLfDW','wgjurLm','icaGicaGicaVlYbbDxrVlwnHBgn1Bgf0zsa','cNjVDxrLCI5WB3n0kcCVy3jLyxrLlwnVBxbVC2L0zsCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicbJB25ZB2XLlMXVzYGNuMvXDwvZDcbIB2r5ia','cIaGicbJB25ZDcb3B3jRzMXVD0nVBMzPzYa9ia','zMLLBgrqB2XPy3K','y2fZy2fKzurLBgv0zq','cI8Vifbpu1qGl2fWAs8','ChjPBwfYEvrLEhrgAwvSza','jYb5yw5NigjLBMfYcIaGicOGqhbHCMfTihTZDhjPBMD9ihnLBgvJDgvKvgfNic0GsuqGEwfUzYbKAxbPBgLOcIaGicOGqhjLDhvYBNmGE0fYCMf5FsbbCNjHEsbVyMPLAYbOyxnPBcbSB29RDxakicaGkI8kicbHC3LUyYbNzxrtDgf0AwnmB29RDxbeyxrHkhnLBgvJDgvKvgfNksb7cIaGicb0CNKGEWOGicaGicaVlYbdAgvJAYbJywnOzsbMAxjZDcaOAwyGzw5HyMXLzcKGlsbJywnOzsb0yw5WysbZzwXLy3rLzfrHzYbRyxjLBMeGzgf0ysbZyw1HcIaGicaGignVBNn0ignHy2HLt3b0Aw9UCYa9ihSGDhLWztOGj3n0yxrPyYCGFtSkicaGicaGy29UC3qGy2fJAgvKuMvZDwX0id0GyxDHAxqGDgHPCY5NzxrdywnOzwrmB29RDxaOy2fJAgvpChrPB25ZlcaNC3rHDgLJjYK7cIaGicaGigLMicHJywnOzwrszxn1BhqPihSkicaGicaGicaVlYbbChbSEsbZzwXLy3rLzfrHzYb0BYbJywnOzwqGCMvZDwX0cIaGicaGicaGCMv0DxjUignHy2HLzfjLC3vSDc5TyxaOAxrLBsa9pIb7cIaGicaGicaGicbPzIaOAxrLBs5Pzca9pt0GC2vSzwn0zwruywCPihSkicaGicaGicaGicaGCMv0DxjUihSGlI4UAxrLBsWGC2vSzwn0zwq6icD0CNvLjYb9oWOGicaGicaGicaGFqOGicaGicaGicaGCMv0DxjUihSGAwq6igL0zw0UAwqSihrLEhq6igL0zw0UDgv4Dcb9oWOGicaGicaGih0PoWOGicaGicb9cGOGicaGicbJB25ZDcbXDwvYEsa9icDtruXfq1qG','ywDNCMvNyxrL','cIaGicaGic8VignHC2nHzgvezwXLDguGpsb0CNvLoIberuXfveuGy2HPBgqGCMvJB3jKCYbMAxjZDcWGDgHLBIbOzwfKzxikicaGicaGy29UC29Szs5SB2COj0rLBgv0Aw5NignOAwXKihjLy29YzhmGzNjVBsa','ihX8icDUzxCGCMvJB3jKj31GktSk','CMzvCgG','AM9PBG','igrHDgeGBM90igzVDw5KjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbiyw5KBguGC3bLy2LMAwmGzgf0ywjHC2uGzxjYB3jZcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0GjZiZnta1jYKGEYaVlYbqB3n0z3jLu1fmihvUAxf1zsb2Aw9SyxrPB24kicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOnda5ks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0r1CgXPy2f0zsbLBNrYEsCScIaGicaGicaGBwvZC2fNztOGj0eGCMvJB3jKihDPDgGGDgHPCYb2ywX1zsbHBhjLywr5igv4Axn0CYCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLihvWzgf0Aw5Nia','DxbKyxrLzef0','cIaGicb9oWOkicaGigzVCIaOy29UC3qGw3f1zxj5tMfTzsWGCxvLCNLtB3vYy2vDig9Mie9IAMvJDc5LBNrYAwvZkhf1zxj5rgvMAw5PDgLVBNmPksb7cIaGicaGihrYEsb7cIaGicaGicaGlY8Gq2vRigfWywTHAcbZDhjPBMCGzgLTDwXHAsbKzw5Nyw4GiMzPBgu6iIb1BNr1AYbTzw5LBNr1A2fUigfWywTHAcbPBMKGCgf0AcbMAwXLcIaGicaGicaGAwyGkhr5CgvVzIbXDwvYEvnVDxjJzsa9pt0Gj3n0CMLUzYCGjIyGCxvLCNLtB3vYy2uUC3rHCNrZv2L0AcGNzMLSztONksKGEWOGicaGicaGicaGlY8Gqw1IAwWGCgf0AcbYzwXHDgLMigrHCMKGCxvLCNLtB3vYy2ukicaGicaGicaGignVBNn0ihjLBgf0AxzLugf0Aca9ihf1zxj5u291CMnLlNjLCgXHy2uOj2zPBgu6jYWGjYCPoWOGicaGicaGicaGy29UC3qGzMLSzvbHDgGGpsbWyxrOlMPVAw4Ox19KAxjUyw1LlcbYzwXHDgL2zvbHDgGPoWOkicaGicaGicaGignVBNnVBguUBg9NkgbbDhrLBxb0Aw5NihrVihjLywqGDgvTCgXHDguGzMLSzsaKE3f1zxj5tMfTzx0GzNjVBsbWyxrOoIaKE2zPBgvqyxrOFwaPoWOkicaGicaGicaGigLMicHMCY5LEgLZDhntEw5JkgzPBgvqyxrOksKGEWOGicaGicaGicaGicb0zw1WBgf0zxnBCxvLCNLoyw1Lxsa9igzZlNjLywrgAwXLu3LUyYHMAwXLugf0AcWGj3v0zJGNktSkicaGicaGicaGicaGy29UC29Szs5SB2COyfnrtcb0zw1WBgf0zsaKE3f1zxj5tMfTzx0GBg9HzgvKihn1y2nLC3nMDwXSEsbMCM9TigzPBgu6icr7CMvSyxrPDMvqyxrOFwaPoWOGicaGicaGicaGFsbLBhnLihSkicaGicaGicaGicaGy29UC29Szs5LCNjVCIHGu1fmihrLBxbSyxrLigzPBguGjhTXDwvYEu5HBwv9ig5VDcbMB3vUzdOGjhTMAwXLugf0Ah1GktSkicaGicaGicaGicaGDgvTCgXHDgvZw3f1zxj5tMfTzv0GpsbUDwXSoWOGicaGicaGicaGFqOGicaGicaGih0GzwXZzsb7cIaGicaGicaGicaVlYbkAwTHigj1A2fUihbHDgGGzMLSzsWGz3vUywTHBIbZDhjPBMCGu1fmigXHBMDZDw5NcIaGicaGicaGicb0zw1WBgf0zxnBCxvLCNLoyw1Lxsa9ihf1zxj5u291CMnLoWOGicaGicaGicaGy29UC29Szs5SB2COyfnrtcb0zw1WBgf0zsaKE3f1zxj5tMfTzx0GBg9HzgvKihn1y2nLC3nMDwXSEsbMCM9TifnrtcbZDhjPBMDGktSkicaGicaGicb9cIaGicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGicaGy29UC29Szs5LCNjVCIHGrxjYB3iGBg9HzgLUzYbtuuWGDgvTCgXHDguGjhTXDwvYEu5HBwv9oMaSigvYCM9YktSkicaGicaGicb0zw1WBgf0zxnBCxvLCNLoyw1Lxsa9ig51BgW7cIaGicaGih0kicaGih0','oWOkicaGicaGicbJB25ZDcbYzxf1AxjLzezPzwXKCYa9ifSN','jYK7cG','AxrLBxmU','l2nYzwf0zsaTie1LBMfTyMfOA2fUigrHDgeG','mta0mJm0mxjowgrqBG','z2vUzxjHDgvK','ywDNCMvNyxrLq29UzMLN','jY50B0XVD2vYq2fZzsGPksb7cIaGicaGicaGicbJB250Aw51ztSGlY8GChjPBwfYEsbRzxKGC3vKywGGywrHcIaGicaGicaGFqOkicaGicaGicaVlYbdAgvJAYbQAwTHigfKysbtuuWGzxHWCMvZC2LVBIbKzw5Nyw4GywXPyxmGkg1LBMDNDw5HA2fUieftkqOGicaGicaGignVBNn0igfSAwfZuMvNzxGGpsbUzxCGuMvNrxHWkcCOlISPxfXZk2fZxfXZkYHCxhCRksqNlcaNAsCPoWOGicaGicaGignVBNn0igfSAwfZtwf0y2GGpsbJB2X1Bw4UBwf0y2GOywXPyxnszwDLEcK7cIaGicaGicaGAwyGkgfSAwfZtwf0y2GPihSkicaGicaGicaGignVBNn0igv4ChjLC3nPB24GpsbHBgLHC01HDgnOwZfDlNrYAw0OktSkicaGicaGicaGignVBNn0igfSAwfZid0GywXPyxnnyxrJAfSYxs50CMLTkcK7cIaGicaGicaGicbZzwXLy3rdBgf1C2uGkZ0GycWGjhTLEhbYzxnZAw9UFsbbuYaKE2fSAwfZFwa7cIaGicaGicaGicb0zxH0rMLLBgqGpsbHBgLHCZSkicaGicaGicaGigfSAwfZrMLLBgqGpsbHBgLHCZSkicaGicaGicaGigjYzwfRoYaVlYbNDw5HA2fUihLHBMCGCgvYDgfTysbZzwjHz2fPihrLEhqGzMLLBgqkicaGicaGicb9cGOGicaGicaGic8VienOzwnRigPPA2eGC2LTCgXLigzPzwXKig5HBwukicaGicaGicbPzIaODMfSAwruzxH0rMLLBgrZlMLUy2X1zgvZkgnVBhvTBIKGFhWGy29SDw1Uid09psaN','lY8Gv0fstKLorZOGAgvHzgvYq2fSy3vSyxrPB25ZlNrVDgfSx2fTB3vUDcbZA2LWCgvKimoI4OkS4OcDig5Vihf0EsbMAwvSzcbJB25MAwD1CMvKicHZzxqGyxv0B0nHBgn1Bgf0zuzPzwXKCY50B3rHBf9HBw91BNqUzM9YBxvSysbVCIbOzwfKzxjdywXJDwXHDgLVBNmUDg90ywXFCxr5lNnVDxjJzsK','cIaQcIaQie1VzgvSihvUDhvRia','C3bSAxq','DMrUwK4','ignVBxbVC2L0zsb1CgrHDguGC3vJy2vZC2z1BdOG','oWOGicaG','oICSigvYCM9YktSkcIaGicaVlYbiyw5KBguGC3bLy2LMAwmGzgf0ywjHC2uGzxjYB3jZcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0GjZiZnta1jYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdKPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrhvWBgLJyxrLigvUDhj5jYWkicaGicaGicbTzxnZywDLoIaNqsbYzwnVCMqGD2L0Acb0AgLZihzHBhvLigfSCMvHzhKGzxHPC3rZjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbPzIaOzxjYB3iUy29Kzsa9pt0GjZiZntaZjYKGEWOGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG0mdaPlMPZB24OEWOGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGigvYCM9YoIaNrM9YzwLNBIbRzxKGy29UC3rYywLUDcCScIaGicaGicaGBwvZC2fNztOGj1jLzMvYzw5JzwqGzgf0ysbUB3qGzM91BMqNlaOGicaGicaGigrLDgfPBhm6ihbYB2nLC3mUzw52lK5prevFru5wid09psaNzgv2zwXVCg1LBNqNid8GzxjYB3iUBwvZC2fNzsa6ihvUzgvMAw5LzcWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGy3jLyxrPBMCG','ktSkicaGicaGicbJB25ZB2XLlMXVzYGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DiefesLvtvcbJB21WBgv0zwqGC3vJy2vZC2z1BgX5ihDPDgGGzxzLBNrZjYK7cIaGicaGih0Gy2f0y2GGkgvYCM9Yksb7cIaGicaGicaGy29UC29Szs5LCNjVCIGNw0LovevhuKfuruqGvfjbtLnbq1rjt05DiefesLvtvcbMywLSzwq6jYWGzxjYB3iUBwvZC2fNzsK7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kicaGih0GzwXZzsb7cIaGicaGic8ViezHBgXIywnRoIb0yw5WysbLDMvUDhmkicaGicaGDhj5ihSkicaGicaGicbYzxnWB25ZzurHDgeGpsbHD2fPDca','laOGicaGicbKyxrLrMLLBgrZoIa','jZSkicaGigXLDcbYzxn1BhqGpsbUDwXSoWOkicaGic8Vid09psbjBNrLz3jHDgvKifrYyw5Zywn0Aw9UigrLBMDHBIbfDMvUDcbmAwzLy3LJBguGpt09cIaGicbPzIaOy29TCg9Uzw50rw5NAw5LicyMienVBNrLEhrcDwLSzgvYksb7cIaGicaGihrYEsb7cIaGicaGicaGy29UC3qGzxzLBNrdB250zxH0id0GEWOGicaGicaGicaGy29TCg9Uzw50rw5NAw5LoIbJB21WB25LBNrfBMDPBMuScIaGicaGicaGicbdB250zxH0qNvPBgrLCJOGq29UDgv4Dej1AwXKzxiScIaGicaGicaGicb0ywjSzu5HBwu6icC','laOGicaGicbHzgP1C3rdB25MAwC6ia','laOGicaGicbYzxf1AxjLzezPzwXKCZOG','iIWGiM9WzxjHDg9YiJOGiMXPA2uIlcaIDMfSDwuIoIaIjvbVCNrHBcuIih0ScIaGicaGicaGicaGicaGEYaIA2v5iJOGiG','zMLSDgvYCW','mJi3ntHzs2LgANe','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFq','mZK5ntmWmhD2r3zxAq','C2XPy2u','y3jLyxrL','zgvMyxvSDfnJB3bL','yMHuC0m','jYWkicaGicaGicaGihvWDgLTztOGChjVy2vZCY51ChrPBwuOksWkicaGicaGicaGig1LBw9YEtOGChjVy2vZCY5Tzw1VCNLvC2fNzsGPlaOGicaGicaGicaGC3LZDgvToIb7cIaGicaGicaGicaGihbSyxrMB3jToIbWCM9JzxnZlNbSyxrMB3jTlaOGicaGicaGicaGicbUB2rLvMvYC2LVBJOGChjVy2vZCY52zxjZAw9UlaOGicaGicaGicaGicbWAwq6ihbYB2nLC3mUCgLKcIaGicaGicaGicb9cIaGicaGicaGFtSkcIaGicaGicaGCMvZlMPZB24OAgvHBhrOsw5MBYK7cIaGicaGih0PoWOkicaGicaGlY8Gu2vYDMLJzsbPBMzVigvUzhbVAw50cIaGicaGigfWCc5NzxqOjY9HCgKV','jYWGDMfSDwu6ihnJB3bLvMfSDwuGFtSkcIaGlY8GuKvbrcbVCgvYyxrPB25ZoIbPBMPLy3qGC2nVCguGAw50BYbYzxeUyM9KEs53AgvYzqOGigLMicHBj2rHDgf0ywjSzxmNlcaNCMvHzcCSicDSB29RDxaNlcaNCMvHzc1JB21WB3nPDguNxs5PBMnSDwrLCYHLBMrWB2LUDcKPihSkicaGigLMicGHCMvXlMjVzhKUD2HLCMuPihSkicaGicaGCMvXlMjVzhKUD2HLCMuGpsbBC2nVCgvdB25KAxrPB25DoWOGicaGFsbLBhnLigLMicHbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLksKGEWOGicaGicbYzxeUyM9KEs53AgvYzs51BNnOAwz0khnJB3bLq29UzgL0Aw9UktSkicaGih0GzwXZzsbPzIaOCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCYaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmPksb7cIaGicaGignVBNn0ig9YAwDPBMfStg9NAwmGpsbYzxeUyM9KEs53AgvYzs5SB2DPyYb8FcaNqu5ejZSkicaGicaGAwyGkg9YAwDPBMfStg9NAwmGpt09icDbtKqNksb7cIaGicaGicaGCMvXlMjVzhKUD2HLCMuUy29UzgL0Aw9UCY51BNnOAwz0khnJB3bLq29UzgL0Aw9UktSkicaGicaGFsbLBhnLihSkicaGicaGicbYzxeUyM9KEs53AgvYzsa9ihSkicaGicaGicaGigXVz2LJoIaNqu5ejYWkicaGicaGicaGignVBMrPDgLVBNm6ifSkicaGicaGicaGicaGC2nVCgvdB25KAxrPB24ScIaGicaGicaGicaGihSGBg9NAwm6ig9YAwDPBMfStg9NAwmSignVBMrPDgLVBNm6ihjLCs5IB2r5lNDOzxjLlMnVBMrPDgLVBNmGFqOGicaGicaGicaGxqOGicaGicaGih07cIaGicaGih0kicaGih0kicb9cGOGic8VierftevurtOGChjLCgvUzcbZy29WzsbJB25KAxrPB24GDg8GD2HLCMuGyxjYyxKkicbPzIaOzw5KCg9PBNqGpt09icDKzwXLDguNksb7cIaGicbPzIaOCMvXlMjVzhKUD2HLCMuPihSkicaGicaGAwyGkefYCMf5lMLZqxjYyxKOCMvXlMjVzhKUD2HLCMuPksb7cIaGicaGicaGCMvXlMjVzhKUD2HLCMuUDw5ZAgLMDcHZy29WzunVBMrPDgLVBIK7cIaGicaGih0kicaGih0kicb9cGOGic8ViensrufursaVieferdOGzM9Yy2uGC2nVCguGy29SDw1UihzHBhvLcIaGAwyGkgvUzhbVAw50id09psaNywrKjYb8FcbLBMrWB2LUDca9pt0Gj2nYzwf0zsCPihSkicaGihjLCs5IB2r5wYC','oWOGih0kcIaGlYOQcIaGicOGqNvPBgqGC2vHCMnOifDirvjfignSyxvZzsbIzxjKyxnHCMTHBIbZzwfYy2HHyMXLignVBhvTBNmkicaGkIbaCgfYyw0GE3n0CMLUz30GC2vHCMnOvMfSDwuGlsboAwXHAsbWzw5JyxjPyw4kicaGkIbaCgfYyw0GE3n0CMLUz30GC2vHCMnOqNKGlsblB2XVBsb5yw5NigrPy2fYAqOGicaQiebYzxr1CM5ZihTZDhjPBMD9ifDirvjfignSyxvZzqOGicaQlWOGigj1AwXKu2vHCMnOv2HLCMvdBgf1C2uOC2vHCMnOvMfSDwuSihnLyxjJAej5id0Gj2fSBcCPihSkicaGigLMicGHC2vHCMnOvMfSDwuGFhWGC2vHCMnOvMfSDwuUDhjPBsGPid09psaNjYKGEWOGicaGicbYzxr1CM4GjYC7cIaGicb9cGOGicaGy29UC3qGC2vHCMnOywjSzunVBhvTBNmGpsb0AgLZlMDLDfnLyxjJAgfIBgvdB2X1Bw5ZkcK7cIaGicbJB25ZDcbLC2nHCgvKu2vHCMnOvMfSDwuGpsbZzwfYy2HwywX1zs5YzxbSywnLkc8Nl2CSiciNjYiPoWOGicaGy29UC3qGBgLRzvzHBhvLid0GycuKE2vZy2fWzwrtzwfYy2HwywX1zx0LydSkcIaGicbPzIaOC2vHCMnOqNKGjIyGC2vHCMnOqNKGit09icDHBgWNksb7cIaGicaGic8VienHCMKGzgKGA29SB20GC3bLC2LMAwSkicaGicaGy29UC3qGy29SDw1Uid0GC2vHCMnOywjSzunVBhvTBNmUzMLUzcHJB2WGpt4Gy29SlM5HBwuGpt09ihnLyxjJAej5ktSkicaGicaGAwyGkgnVBhvTBIaMjIbJB2X1Bw4UC2vHCMnOywjSzsKGEWOGicaGicaGihjLDhvYBIbGv0HfuKuGvvbqrviOjhTZzwfYy2HcEx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPydSkicaGicaGFqOGicaGFqOkicaGic8VienHCMKGzgKGC2vTDweGA29SB20GC2vHCMnOywjSzqOGicaGy29UC3qGy29UzgL0Aw9UCYa9ihnLyxjJAgfIBgvdB2X1Bw5ZcIaGicaGic5MAwX0zxiOy29Sid0+ignVBc5ZzwfYy2HHyMXLkqOGicaGicaUBwfWkgnVBca9pIbGvvbqrviOjhTJB2WUBMfTzx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPycK7cGOGicaGAwyGkgnVBMrPDgLVBNmUBgvUz3rOid4GmcKGEWOGicaGicbYzxr1CM4GyfDirvjficGKE2nVBMrPDgLVBNmUAM9PBIGNie9sicCPFsLGoWOGicaGFqOkicaGihjLDhvYBIaNjZSkicb9','jYWkicaGicaGBw9KDwXLoIaN','iJOGiMv4Axn0Aw5NlwLKiIWkicaGicaGicaGicaGiMzPzwXKmsi6icj2ywX1zteIlaOGicaGicaGicaGicaIzMLLBgqYiJOGiNzHBhvLmIikicaGicaGicaGih0kicaGicaGicb9','jYWGzw5KCg9PBNroyw1LlcbPBxbVCNrdB25MAwCPoWOGicaGicaGicaGicaGicaGBg9Nz2vYlMLUzM8OEWOGicaGicaGicaGicaGicaGicbLDMvUDdOGj2LTCg9YDf9YB3v0zxnFCMvNAxn0zxjLzcCScIaGicaGicaGicaGicaGicaGigvUzhbVAw50oIbLBMrWB2LUDe5HBwuScIaGicaGicaGicaGicaGicaGihrHyMXLoIbPBxbVCNrdB25MAwCUDgfIBgvoyw1LcIaGicaGicaGicaGicaGicb9lcbGsw1WB3j0ihjVDxrLCYbYzwDPC3rLCMvKigzVCIaKE2vUzhbVAw50tMfTzx1GktSkicaGicaGicaGicaGicb9cIaGicaGicaGicaGih0Gy2f0y2GGkgLTCg9YDevYCM9Yksb7cIaGicaGicaGicaGicaGBg9Nz2vYlMvYCM9YkhSkicaGicaGicaGicaGicaGigv2zw50oIaNAw1WB3j0x3jLz2LZDhjHDgLVBL9LCNjVCICScIaGicaGicaGicaGicaGicbLBMrWB2LUDdOGzw5KCg9PBNroyw1LlaOGicaGicaGicaGicaGicaGzxjYB3i6igLTCg9YDevYCM9YlM1LC3nHz2ukicaGicaGicaGicaGicb9lcbGsw1WB3j0ihjLz2LZDhjHDgLVBIbMywLSzwqGzM9Yicr7zw5KCg9PBNroyw1LFtOGjhTPBxbVCNrfCNjVCI5TzxnZywDLFwaPoWOGicaGicaGicaGicb9cGOGicaGicaGicaGicaVlYbszwDPC3rLCIb1CgXVywqGCM91DgvZihvUDhvRigvUzhbVAw50igLUAsaOyxv0BY1KzxrLy3qGzgfYAsbLBwjLzgrLzcbJB25MAwCPcIaGicaGicaGicaGihrYEsb7cIaGicaGicaGicaGicaGy29UC3qGDxbSB2fKq29UzMLNid0GzxH0CMfJDfvWBg9HzenVBMzPz0zYB21fBMrWB2LUDcHLBMrWB2LUDfbHDgGPoWOGicaGicaGicaGicaGigLMicH1CgXVywrdB25MAwCPihSkicaGicaGicaGicaGicaGifvWBg9HzeHHBMrSzxiUCMvNAxn0zxjsB3v0zxmOyxbWlcaN','jYKGEWOGicaGicaGicaGC2vSzwn0q2XHDxnLicS9igaSicr7y29SDw1UFwa7cIaGicaGicaGicb0zxH0rMLLBgqGpsbJB2X1Bw47cIaGicaGicaGicbICMvHAZSGlY8Gz3vUywTHBIb5yw5NihbLCNrHBweGC2vIywDHAsb0zxH0igzPzwXKcIaGicaGicaGFqOkicaGicaGicaVlYbkAwTHigj1A2fUihjLy29NBML6zwqGzMLLBgqSig1HC2LOihrHBwjHAgTHBIaOBxvUz2TPBIbJB21WDxrLzcbJB2X1Bw4PcIaGicaGicaGC2vSzwn0q2XHDxnLicS9igaSicr7y29SDw1UFwa7cIaGicaGicaGDgv4DezPzwXKid0Gy29SDw1UoWOGicaGicb9cGOGicaGicaVlYbcyw5NDw4GCxvLCNKGu0vmrunuigrLBMDHBIbZDxbWB3j0igv4ChjLC3nPB25ZcIaGicaGigXLDcbXDwvYEsa9igbtruXfq1qGjhTZzwXLy3rdBgf1C2v9iezst00GjhT0AgLZlMDLDeXVB2T1CfnVDxjJzsGPFsa','C2vHCMnOq29SDw1UCW','rxHWzwn0zwqGzxHWyw5KzwqGu1fmihn0CMLUzY4Gq2HLy2SGugf5Bg9HzfbYB2nLC3nVCI5WCM9JzxnZrMLSzvjLzMvYzw5JzxmGzMXVDY4','igXVB2T1CdONlcbLCNjVCIK7cIaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGzxjYB3i6icDjBNrLCM5HBcbtzxj2zxiGrxjYB3iNlaOGicaGicbTzxnZywDLoIaNqw4GzxjYB3iGB2nJDxjYzwqGD2HPBguGBg9VA2LUzYb1Cca','vKfst0W','CMvHza','lMDLDerHDgeOEWOGicaGicaGihDOzxjLoIbBcIaGicaGicaGicb7igTLEtOGChjPBwfYEuTLEsWGDMfSDwu6ihjLy29YzeLKih0ScIaGicaGicaGicb7igTLEtOGCMvXlL9Yzxf1zxn0u2nVCguUy29SDw1Ulcb2ywX1ztOGCMvXlL9Yzxf1zxn0u2nVCguUDMfSDwuGFqOGicaGicaGif0kicaGicaGFsK7cIaGicaGigLMicGHC2nVCgvdAgvJAY5ZDwnJzxnZihX8icfZy29WzunOzwnRlMrHDgeGFhWGC2nVCgvdAgvJAY5KyxrHlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWncKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNrgf0ysbUB3qGzM91BMqNlaOGicaGicaGicaGBwvZC2fNztOGjW','ksbMCM9TigfSBcbPDgvTCWOGicaGicbKyxrHlNrVDgfSx2fTB3vUDca9igrHDgeU','cIaGicaGia','zMLSDgvY','ksb8FcaWoWOGicaGicaGignVBNn0ihbYAwnLid0GtNvTyMvYkgL0zw0U','cIaGlYOQcIaGicOGrgvSzxrLigrHDgeGD2L0AcbJyxnJywrLrgvSzxrLihn1ChbVCNqkicaGkIbaCgfYyw0GE09IAMvJDh0GB3b0Aw9UCYaTierLBgv0zsbVChrPB25ZihDPDgGGD2HLCMuGy2XHDxnLcIaGicOGqhbHCMfTihTpyMPLy3r9igv2zw50q29UDgv4DcaTiev2zw50igXPzMvJEwnSzsbJB250zxH0icHVChrPB25HBcKkicaGkIbaCMv0DxjUCYb7uhjVBwLZztXpyMPLy3q+FsbezwXLDguGCMvZDwX0cIaGicOVcIaGyxn5BMmGzgvSzxrLrgf0ysHVChrPB25ZlcbLDMvUDenVBNrLEhqGpsbUDwXSksb7cIaGicbJB25ZDcbWB29Sid0GzgiUz2v0ug9VBcGPoWOGicaGy29UC3qGy2XPzw50id0GyxDHAxqGCg9VBc5JB25Uzwn0kcK7cGOGicaGDhj5ihSkicaGicaGyxDHAxqGy2XPzw50lNf1zxj5kcDcruDjtICPoWOkicaGicaGlY8GrxH0CMfJDcb3AgvYzsbJBgf1C2ukicaGicaGy29UC3qGD2HLCMuGpsbVChrPB25ZlNDOzxjLihX8ifTDoWOGicaGicbPzIaOixDOzxjLihX8ihDOzxjLlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihrOCM93ig5LDYbfCNjVCIGNv2HLCMuGy2XHDxnLigLZihjLCxvPCMvKigzVCIbKzwXLDguGB3bLCMf0Aw9UjYK7cIaGicaGih0kcIaGicaGic8Viej1AwXKifDirvjfignSyxvZzqOGicaGicbSzxqGD2HLCMvdBgf1C2uGpsaNjZSkicaGicaGy29UC3qGCgfYyw1Zid0Gw107cIaGicaGigXLDcbWyxjHBuLUzgv4id0GmtSkcIaGicaGigLMicHbCNjHEs5PC0fYCMf5khDOzxjLksKGEWOGicaGicaGignVBNn0ignVBMrPDgLVBNmGpsb3AgvYzs5TyxaOy29UzgL0Aw9Uid0+ihSkicaGicaGicaGihbHCMfTCY5WDxnOkgnVBMrPDgLVBI52ywX1zsK7cIaGicaGicaGicbYzxr1CM4Gycr7y29UzgL0Aw9UlMTLEx0GpsaKjhTWyxjHBuLUzgv4kYT9ydSkicaGicaGicb9ktSkicaGicaGicb3AgvYzunSyxvZzsa9ignVBMrPDgLVBNmUAM9PBIGNieforcaNktSkicaGicaGFsbLBhnLigLMicH3AgvYzs5JB25KAxrPB25Zksb7cIaGicaGicaGlY8GsgfUzgXLignVBxbSzxGGD2HLCMuGzM9YBwf0cIaGicaGicaGy29UC3qGy29UzgL0Aw9UCYa9ihDOzxjLlMnVBMrPDgLVBNmUBwfWkgnVBMrPDgLVBIa9pIb7cIaGicaGicaGicbWyxjHBxmUChvZAcHJB25KAxrPB24UDMfSDwuPoWOGicaGicaGicaGy29UC3qGB3bLCMf0B3iGpsbJB25KAxrPB24UB3bLCMf0B3iGFhWGjZ0NoWOGicaGicaGicaGCMv0DxjUigaKE2nVBMrPDgLVBI5RzxL9icr7B3bLCMf0B3j9icqKE3bHCMfTsw5KzxGRk31GoWOGicaGicaGih0PoWOGicaGicaGignVBNn0igXVz2LJid0GD2HLCMuUBg9NAwmGFhWGj0forcC7cIaGicaGicaGD2HLCMvdBgf1C2uGpsbJB25KAxrPB25ZlMPVAw4OycaKE2XVz2LJFsbGktSkicaGicaGFqOkicaGicaGAwyGkcf3AgvYzunSyxvZzsKGEWOGicaGicaGihrOCM93ig5LDYbfCNjVCIGNsw52ywXPzcb3AgvYzsbJBgf1C2uGzM9YBwf0jYK7cIaGicaGih0kcIaGicaGia','laOGicaGicbJB21WB25LBNrZoIa','tw9KzwWGzxH0zw5KCYbcyxnLtw9KzwWGEWOGic8QkGOGicaQienVBNn0CNvJDg9YcIaGicOVcIaGy29UC3rYDwn0B3iOksb7cIaGicaVlYbezwzPBMLZAwTHBIb2ywXPzezPzwXKCYaTihnLBxvHigzPzwXKihLHBMCGDMfSAwqGDw50DwSGDgfIzwWG','oWOGicaGDgHPCY5OyxnfEhbVCNrrDwvYEsa9ia','iIbTDxn0igjLigfUig9IAMvJDcb3AxrOihn0CNvJDhvYzsb7Aw5Zzxj0oIbBxsWGDxbKyxrLoIbBxsWGzgvSzxrLoIbBxx0NlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8GvMfSAwrHC2KGC3rYDwn0DxjLoIbPBNnLCNqSihvWzgf0zsWGzgvSzxrLigHHCNvZigfYCMf5igPPA2eGywrHcIaGicaGignVBNn0ig9WzxjHDgLVBNmGpsbKyxrHlG','j10GpsbZy29WzvzHBhvLoWOGih0kcIaGlY8Gq1jfqvrflunptvbpu0LursaVifvqrefurs1dt01qt1njveu6igzVCMnLihnJB3bLignVBhvTBIbPBNnPzguGBwfZDgvYigjVzhKUcIaGlY8GtwfZDgvYigLZihDYyxbWzwqGyxqGCMvXlMjVzhLBCM9VDeTLEv07igrLDgfPBcbYB3DZigLUAgvYAxqGC2nVCguGDhjHBNnPDgL2zwX5cIaGlY8GDMLHig1HC3rLCIbVD25LCNnOAxaGkg5VigrPCMvJDcbZy29WzsbJB2X1Bw4GB24Gzgv0ywLSihrHyMXLks4kicbPzIaOzw5KCg9PBNqGpt09icDJCMvHDguTy29TCg9ZAxrLjYb8FcbLBMrWB2LUDca9pt0Gj3vWzgf0zs1JB21WB3nPDguNksb7cIaGicbJB25ZDcbTyxn0zxjcB2r5id0GCMvXlMjVzhLBjW','oIaKE3jLC3vSDc5JB21WB25LBNrZtg9HzgvKFsbJB21WB25LBNrZycK7cIaGicaGih0kicaGih0PlMnHDgnOkgvYCIa9pIb7cIaGicaGignVBNnVBguUzxjYB3iOyezHAwXLzcb0BYbSB2fKignVBxbVBMvUDcbJB25MAwD1CMf0Aw9UigzVCIa','y29UC3qGz2vUzxjHDgvKrMLLBgrZid0G','cIaGicaGignVBNn0ignHBgn1Bgf0Aw9UCYa9ia','cNjVDxrLCI5WB3n0kcCVy2HHBMDLlxn0yxr1CYCSigfZEw5JicHYzxeSihjLCYKGpt4GEWOGihrYEsb7cIaGicaVlYbwywXPzgfZAsbWyxLSB2fKcIaGicbPzIaOixjLCs5IB2r5ihX8ie9IAMvJDc5RzxLZkhjLCs5IB2r5ks5Szw5NDgGGpt09idaPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGCgf5Bg9HzcCScIaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsbYzxf1AxjLzcbMAwvSzhm6igLKl3bYAw1HCNKGA2v5igrHBIbZDgf0DxmkicaGignVBNn0ihbYAw1HCNLlzxKGpsaN','ksb8FcaWksaQicHoDw1IzxiOAxrLBs4','EvnrDMe','id0GjdeGt1jerviGqLKGBgLUzv9UDw1IzxjGoW','cIaGicaGicaGlY8GqNvPBgqGzgv0ywLSieLou0vsvcbXDwvYEqOGicaGicaGignVBNn0igrLDgfPBezPzwXKCYa9ifTDoWOGicaGicaGignVBNn0igrLDgfPBfzHBhvLCYa9ifTDoWOGicaGicaGignVBNn0igrLDgfPBfbSywnLAg9SzgvYCYa9ifTDoWOGicaGicaGigXLDcbKzxrHAwXqBgfJzwHVBgrLCKLUzgv4id0GmtSkcIaGicaGicaGzM9YicHJB25ZDcbBA2v5lcb2ywX1zv0GB2yGt2jQzwn0lMvUDhjPzxmOAxrLBsKPihSkicaGicaGicaGia','cIaGicaVlYbwywXPzgfZAsbKyw4GC2fUAxrHC2KGAgvHzgvYigrHDgeGzgvUz2fUignVBNn0CMfPBNqGkhrLCM1HC3vRigHHC2GPcIaGicbPzIaODhLWzw9Mia','rxPZCue','Dg90ywXFyw1VDw50','jZSkcIaGicaGignVBNn0igrHDgeGpsbHD2fPDcbKyI5LEgvJDxrLuxvLCNKOCxvLCNKPoWOkicaGicaGlY8Gq2fJAguGCMvZDwX0ihrHBNbHihnLBgvJDgvKigzSywCkicaGicaGy29UC3qGy2fJAgveyxrHid0Gzgf0ys5TyxaOAxrLBsa9pIaOEWOGicaGicaGigLKoIbPDgvTlG','y3jLyxrLzej5','l2nOyw5Nzs1ZDgf0DxmGlsbdAgfUz2uGC3rHDhvZia','l2XVB2T1CcaTie1LBMrHCgf0A2fUigrHDgeG','lMDLDerHDgf0ywjSzxmOB3b0Aw9UCYK7cGOGicaGlY8GtwvUyw1IywHRyw4GBM9TB3iGyMfYAxmGDw50DwSGrgf0yvrHyMXLCYbQAwTHigrPCgvYBhvRyw4kicaGigLMicHYzxn1BhqUzgf0ysaMjIbbCNjHEs5PC0fYCMf5khjLC3vSDc5KyxrHksKGEWOGicaGicbYzxn1BhqUzgf0ysa9ihjLC3vSDc5KyxrHlM1HCcGOAxrLBsWGAw5KzxGPid0+icH7cIaGicaGicaGlI4UAxrLBsWkicaGicaGicbYB3DUDw1LCMf0B3i6ig9WDgLVBNmUC3rHCNqGkYbPBMrLEcaRidekicaGicaGFsKPoWOGicaGFqOkicaGic8ViefKzcbTzxrHzgf0ysb1BNr1AYbKzwj1z2DPBMCGkgrLDMvSB3bTzw50ig9UBhKPcIaGicbPzIaOChjVy2vZCY5LBNyUtK9erv9ftLyGpt09icDKzxzLBg9WBwvUDcCPihSkicaGicaGCMvZDwX0lL9TzxrHzgf0ysa9ihSkicaGicaGicbLBMrWB2LUDdOGjW','laOGicaGicaGihrLEhq6igL0zw0U','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','zMLLBgroyw1L','sw52ywXPzcbHDwrPDenVBhvTBNmGDMfSDwuGzM9Yia','ksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKig11C3qGAgf2zsbWCM9Wzxj0EsaI','ihn0yxrPyYbSB29RDxa6jYWGzxjYB3iPoWOGicaGCMv0DxjUihjLCY5ZDgf0DxmOntaWks5QC29UkhSkicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGigvYCM9YoIaNsw50zxjUywWGu2vYDMvYievYCM9YjYWkicaGicaGBwvZC2fNztOGj0fUigvYCM9Yig9Jy3vYCMvKihDOAwXLigzLDgnOAw5Nia','l2rHDgf0ywjSzxmGlsbeyxrHihvUDhvRierHDgfuywjSzxmkCM91DgvYlNbVC3qOjY9KyxrHDgfIBgvZjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGic8VihjLCs5SB2CUzgvIDwCOj1jLCxvLC3qGyM9KEsa','ihLHBMCGBwv3yxjPC2KGzNvUz3nPlwz1BMDZAsbKyxjPiejHC2vnB2rLBaOGkIbuywjSztOG','iL0kicaGicaGicb9laOGicaGicaGigv4yw1WBgvFD2L0Af9VCMrLCMLUzZOGEWOGicaGicaGicaGiNnLBgvJDci6ifSIAwqIlcaI','jYWGDMfSAwrgAwvSzhmSigrHDgf0ywjSzxnxAgvYzsK7cGOGicaGlY8Gu2v0DxaGChjPBwfYEsbRzxKGzgfYAsbWyxLSB2fKigf0yxuGzMfSBgjHy2SGA2uGzMLLBgroyw1LihbLCNrHBwekicaGihrOAxmUChjPBwfYEuTLEsa9icC','lNjLzhvJzsGOC3vTlcbPDgvTksa9pIbZDw0GkYaOtNvTyMvYkgL0zw1BCxr5rMLLBgrDksb8FcaWksWGmcK7cIaGicb9cIaGica','C3rHCNrZv2L0Aa','oWOkicaGic8VifbHBMDNAwWGy29UC3rYDwn0B3iGCgfYzw50igrLBMDHBIbUyw1HihrHyMvSlcb2ywXPzezPzwXKCYWGzgfUigrHDgf0ywjSzxnxAgvYzqOGicaGC3vWzxiOjW','cIaGicaGih0','id0G','ksKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNsw52ywXPzcbWyxLSB2fKjYWkicaGicaGicaGig1LC3nHz2u6icDqCM9Wzxj0EsaI','AePtwei','BNvTyMvY','Bg9VA3vW','cGOGicaGicbPzIaOCMvJywXJDwXHDgvKrMLLBgrZlMXLBMD0Aca+idaPihSkicaGicaGicaVlYbjBMPLy3qGyxvKAxqGy29SDw1UCYaODxbKyxrLzf9HDcWGDxbKyxrLzf9IEsKGA2uGCMvJywXJifvqrefursb2AweGAgvSCgvYcIaGicaGicaGCMvJywXJugXHy2vOB2XKzxiGpsb0AgLZlL9HChbLBMrvCgrHDgvbDwrPDenVBhvTBNmOCMvJywXJDwXHDgvKrMLLBgrZlcbYzwnHBgn1Bgf0zwrwywX1zxmSigrHDgeSigv2zw50q29UDgv4DcWGCMvJywXJugXHy2vOB2XKzxiPoWOGicaGicaGihjLy2fSy3vSyxrLzfzHBhvLCY5WDxnOkhbYAw1HCNLlzxLwywX1zsK7cIaGicaGicaGy29UC3qGCMvJywXJuxvLCNKGpsbGcIaGicaGicaGicbvuerbveuGjhT0AgLZlNDYAxrLu291CMnLFqOGicaGicaGicaGu0vuicr7CMvJywXJDwXHDgvKrMLLBgrZlMPVAw4OjYWGjYL9cIaGicaGicaGicbxsevsrsaKE3rOAxmUChjPBwfYEuTLEx0GpsaKjhTYzwnHBgnqBgfJzwHVBgrLCN0kicaGicaGicaGifjfvfvstKLorYaQcIaGicaGicaGydSkicaGicaGicbJB25ZB2XLlMXVzYGNuMvJywXJDwXHDgLUzYbOzwfKzxiGDg90ywXZoICSihSGCxvLCNK6ihjLy2fSy1f1zxj5lcb2ywX1zxm6ihjLy2fSy3vSyxrLzfzHBhvLCYb9ktSkicaGicaGicbJB25ZDcbYzwnHBgnszxn1BhqGpsbHD2fPDcbJBgLLBNqUCxvLCNKOCMvJywXJuxvLCNKSihjLy2fSy3vSyxrLzfzHBhvLCYK7cIaGicaGicaGt2jQzwn0lMfZC2LNBIH1CgrHDgvKsgvHzgvYlcbYzwnHBgnszxn1BhqUCM93C1SWxsK7cIaGicaGih0kicaGicaG','lMnOyw5Nzvn0yxr1C0rHDgeOCMvXlMjVzhKSihDVCMTMBg93q29UzMLNktSkicaGicaGicbJB25ZB2XLlMXVzYGNw0zbteXcqunlxsbdsefor0uTu1rbvfvtignVBxbSzxrLzcb3AxrOB3v0ignVBxbVBMvUDcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBrKfmtejbq0TDieniqu5hrs1tvefuvvmGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicb9cGOGicaGlY8Gtg9Nihn1y2nLC3nMDwWGB3bLCMf0Aw9UcIaGicbJB25ZB2XLlMXVzYHG','cIaGicbJB25ZDcbOzwfKzxjdywXJid0G','D29YA2zSB3C','lMrLBgv0zurHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4DcK7cGOGicaGicaGignVBNnVBguUBg9NkcDBsu5uruDsqvrfrcbuuKfou0fdveLptL0GrevmrvrfignVBxbSzxrLzcbZDwnJzxnZzNvSBhKGD2L0AcbLDMvUDhmNktSkicaGicaGFsbJyxrJAcaOzxjYB3iPihSkicaGicaGicbJB25ZB2XLlMvYCM9YkcDBsu5uruDsqvrfrcbuuKfou0fdveLptL0GrevmrvrfigzHAwXLzdONlcbLCNjVCI5TzxnZywDLktSkicaGicaGicb0AhjVDYbLCNjVCJSkicaGicaGFqOGicaGFsbLBhnLihSkicaGicaGlY8GrMfSBgjHy2S6igD1BMfRyw4GBw9KzsbSyw1HihrHBNbHigv2zw50CYaODgv0yxaGChjVCgfNyxnPihjLCxvLC3rjzcb1BNr1AYbmAxzLifn5BMmPcIaGicaGihrYEsb7cIaGicaGicaGCMvZCg9UC2veyxrHid0GyxDHAxqG','Dg9ju09tDhjPBMC','l2rLBgv0ztONlcbku09olNn0CMLUz2LMEsHYzxeUyM9KEsWGBNvSBcWGmIKPoWOkicaGic8VifzHBgLKyxnPihjLCxvLC3qGyM9KEqOGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKignHBM5VDcbIzsbLBxb0EsCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','Dg9qyxnJywXdyxnL','DgfIBgvoyw1L','igrHDgeGywrKzwqGC3vJy2vZC2z1BgX5oIaKE3jLC3bVBNnLrgf0ys4','ihX8icfbCNjHEs5PC0fYCMf5kgrHDgeU','lMXLBMD0AdSkicaGih0kicaGigLMicHOzwfKzxjdywXJlNrVDgfSx3f0EsaMjIbOzwfKzxjdywXJlNrVDgfSx3f0Es5ZB3vYy2uPihSkicaGicaGy29UC3qGCxr5rMLLBgqGpsbOzwfKzxjdywXJlNrVDgfSx3f0Es5ZB3vYy2uUCMvWBgfJzsGNAxrLBxmUjYWGjYCPoWOGicaGicbKyxrHlNrVDgfSx3f0Esa9igrHDgeU','ksb8FcaWoWOGicaGicaGicaGy29UC3qGChjPy2uGpsboDw1IzxiOAxrLBs4','DxbKyxrLzej5','igrHDgeGBM90igzVDw5KjYWkicaGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicaGih0PoWOGicaGicaGih0kcIaGicaGicaGlY8Gu2LTCgfUigrHDgeGDw50DwSGzxzLBNqGBgLMzwn5y2XLigrHBIbKzwj1zWOGicaGicaGig9SzerHDgeGpsbLEgLZDgLUz0rHDgeUzgf0yvSWxtSkcIaGicaGih0Gy2f0y2GGkgnOzwnRrxjYB3iPihSkicaGicaGicbYzxr1CM4GCMvZlNn0yxr1CYG1mdaPlMPZB24OEWOGicaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGicbLCNjVCJOGj1zLCMLMAwnHDgLVBIbgywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0nVDwXKig5VDcb2zxjPzNKGzgf0ysbLEgLZDgvUy2uGyMvMB3jLigrLBgv0zsCScIaGicaGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/ignOzwnRrxjYB3iUBwvZC2fNzsa6ihvUzgvMAw5LzcWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicaGicaGFsK7cIaGicaGih0kicaGih0kcIaGicaVlYa9pt0Gsw50zwDYyxrLzcbuCMfUC2fJDgLVBIbKzw5Nyw4GrxzLBNqGtgLMzwn5y2XLid09pqOGicaGlY8GB25czwzVCMuGkYbTywLUig9WzxjHDgLVBIaRig9Uqwz0zxiGzgLLA3nLA3vZAsbKywXHBsbZyxr1ihrYyw5Zywn0Aw9UihnJB3bLcIaGicaVlYbKAsbKywXHBsbTB2rLBc5LEgvJDxrLvhjHBNnHy3rPB25xAxrOrxzLBNrZkcKkicaGigLMicHJB21WB25LBNrfBMDPBMuGjIyGq29UDgv4Dej1AwXKzxiPihSkicaGicaGlY8Gr3vUywTHBIbPBNrLz3jHDgvKihrYyw5Zywn0Aw9Uig1VzgvSigrLBMDHBIbLDMvUDcbSAwzLy3LJBgukicaGicaGDhj5ihSkicaGicaGicbJB25ZDcbLDMvUDenVBNrLEhqGpsb7cIaGicaGicaGicbJB21WB25LBNrfBMDPBMu6ignVBxbVBMvUDevUz2LUzsWkicaGicaGicaGienVBNrLEhrcDwLSzgvYoIbdB250zxH0qNvPBgrLCIWkicaGicaGicaGihrHyMXLtMfTztOGjW','zgf0yxrHyMXLC1f1zxj5','ihvUDhvRigXVB2T1CcbKzw5Nyw4GzMLSDgvYAw5NcNjVDxrLCI5WB3n0kcCVBg9VA3vWjYWGyxn5BMmGkhjLCsWGCMvZksa9pIb7cIaGDhj5ihSkicaGic8VifzHBgLKyxnPifGTuMvXDwvZDc1nB2rLigHLywrLCGOGicaGy29UC3qGCMvXDwvZDe1VzguGpsbYzxeUAgvHzgvYC1SNEc1Yzxf1zxn0lw1VzguNxtSkicaGignVBNnVBguUBg9NkgbylvjLCxvLC3qTtw9KzsbOzwfKzxiGzM9Yifbpu1qGBg9VA3vWoIaKE3jLCxvLC3rnB2rLFwaPoWOkicaGigLMicHYzxf1zxn0tw9KzsaHpt0Gj3n0yxrPyYCPihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj0LUDMfSAwqGuMvXDwvZDcbnB2rLjYWkicaGicaGicbTzxnZywDLoIaNwc1szxf1zxn0lu1VzguGAgvHzgvYig11C3qGyMuGC2v0ihrVihn0yxrPyYbMB3iGue9tvcbTzxrOB2qNlaOGicaGicaGigrLDgfPBhm6icDdB250B2GGCgvUz2D1BMfHBJOGvgfTyMfOA2fUigHLywrLCIbylvjLCxvLC3qTtw9KztOGC3rHDgLJjYWkicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicb9ktSkicaGih0kcIaGicaVlYbwywXPzgfZAsbWyxLSB2fKcIaGicbPzIaOixjLCs5IB2r5ksb7cIaGicaGic8Vifn1ChbVCNqGDw50DwSGzMLLBgroyw1Ltg9VA3vWignVBMzPzWOGicaGicbJB25ZDcbSB29RDxbdB25MAwCGpsa','BwfW','Aw5MBW','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','x21LDgfKyxrH','ks4G','l2LUzM8NlcaOCMvXlcbYzxmPid0+ihSkicaGicaGicbYzxmUANnVBIH7cIaGicaGicaGicbUyw1LoIaN','cIaGicb9oWOkicaGignVBxbVBMvUDevUz2LUzs5SB2fKq29UzMLNDxjHDgLVBKzYB21pyMPLy3qOy29TCg9Uzw50q29UzMLNks50AgvUkhjLC3vSDca9pIb7cIaGicaGigLMicHYzxn1BhqUC3vJy2vZCYKGEWOGicaGicaGignVBNnVBguUBg9NkgbdB21WB25LBNqGy29UzMLNDxjHDgLVBIbSB2fKzwqGzM9Yia','tw9KzwWPoICSigvYCM9YktSkicaGicaGDgHYB3CGzxjYB3i7cIaGicb9cIaGFqOkicaVkIOkicaGkIbnzxrOB2qGDw50DwSGBg9VA3vWigrHDgeGzgvUz2fUigzPBhrLCMLUzYaOD2HLCMuGy2XHDxnLksbKyw4Gy3vZDg9TihnLBgvJDaOGicaQiebWyxjHBsb7t2jQzwn0FsbVChrPB25Zic0Gt3b0Aw9UCYbKzw5Nyw4GD2HLCMuGzgfUihnLBgvJDaOGicaQiebYzxr1CM5ZihTbCNjHEx0GqxjYyxKGB2jQzwSGAgfZAwWGBg9VA3vWigrLBMDHBIbMB3jTyxqGE2LKlcb0zxH0FqOGicaQlWOGigfZEw5JigDLDeXVB2T1CerHDgfxAxrOrMLSDgvYkg9WDgLVBNmPihSkicaGihrYEsb7cIaGicaGic8VienOzwnRignHy2HLigzPCNn0icHPzIbLBMfIBgvKkqOGicaGicbJB25ZDcbJywnOzu9WDgLVBNmGpsb7ic4UlM9WDgLVBNmSihr5Cgu6icDMAwX0zxiNih07cIaGicaGignVBNn0ignHy2HLzfjLC3vSDca9igf3ywL0ihrOAxmUz2v0q2fJAgvKtg9VA3vWkgnHy2HLt3b0Aw9UCYWGj2zPBhrLCICPoWOGicaGicbPzIaOy2fJAgvKuMvZDwX0ksb7cIaGicaGicaGCMv0DxjUignHy2HLzfjLC3vSDdSkicaGicaGFqOkicaGicaGy29UC3qGC2vSzwn0q29SDw1UCYa9ig9WDgLVBNmUC2vSzwn0ihX8ifSN','igrHDgeGC3vJy2vZC2z1BgX5ihvWzgf0zwq','ywn0Aw9U','jZSkicaGigLMicGHCMvXlMjVzhLBChjPBwfYEuTLEv0PihSkicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicbLCNjVCJOGj01PC3nPBMCGCMvXDwLYzwqGzMLLBgqNlaOGicaGicaGig1LC3nHz2u6igbqCMLTyxj5igTLEsaOjhTWCMLTyxj5s2v5FsKGAxmGCMvXDwLYzwqGzM9YihvWzgf0zwaScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cG','lMfKzerHDgeOCMvXlMjVzhKSigv2zw50q29UDgv4DcK7cIaGicaGicaGBMv3rgf0ysa9ihjLC3bVBNnLrgf0ytSkcIaGicaGicaGy29UC29Szs5SB2COj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbjtLnfuLqGy29TCgXLDgvKihn1y2nLC3nMDwXSEsb3AxrOigv2zw50CYCPoWOGicaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicaGignVBNnVBguUzxjYB3iOj1TjtLrfr1jbveveifrsqu5tqunusu9oxsbjtLnfuLqGzMfPBgvKoICSigvYCM9YlM1LC3nHz2uPoWOGicaGicaGihrOCM93igvYCM9YoWOGicaGicb9cIaGicb9igvSC2uGEWOGicaGicaVlYbgywXSyMfJAZOGz3vUywTHBIbTB2rLigXHBweGDgfUCgeGzxzLBNrZicH0zxrHCcbWCM9WywDHC2KGCMvXDwvZDeLKihvUDhvRieXPDMuGu3LUyYKkicaGicaGDhj5ihSkicaGicaGicbYzxnWB25ZzurHDgeGpsbHD2fPDca','lNvWzgf0zurHDgeOCMvXlMjVzhKSihSGywrKAxrPB25HBenVBNrLEhq6ihSGCMvXDwvZDeLKoIbYzxeUAwqGFhWGBNvSBcb9ih0','jYWkicaGicaGicaGigHLywX0AenOzwnRoIbGAhr0CdOVlYr7zgLZCgXHEuHVC3r9oIr7Cg9YDh0VyxbPlW','jYWkicaGicaGicaGihbYAw1HCNLlzxK6ihrOAxmUChjPBwfYEuTLEsWkicaGicaGicaGic4UlIHLDMvUDenVBNrLEhqUywrKAxrPB25HBenVBNrLEhqGFhWGE30PcIaGicaGicaGFsK7cIaGicaGicaGy29UC3qGywz0zxjszxn1BhqGpsbHD2fPDcbJzs5LEgvJDxrLt25bzNrLCKnVBxbVC2L0zsGNDxbKyxrLjYWGywz0zxjdDhGPoWOGicaGicaGigLMicGHywz0zxjszxn1BhqUC3vJy2vZCYKGEWOGicaGicaGicaGyxDHAxqGy2XPzw50lNf1zxj5kcDst0XmqKfdsYCPoWOGicaGicaGicaGDgHYB3CGBMv3ievYCM9YkgbVBKfMDgvYq29TCg9ZAxrLvxbKyxrLigzHAwXLzdOGjhTHzNrLCLjLC3vSDc5LCNjVCN1GktSkicaGicaGicb9cIaGicaGih0kcIaGicaGigf3ywL0ignSAwvUDc5XDwvYEsGNq09ntuLujYK7cIaGicaGignVBNnVBguUBg9NkcDuCMfUC2fJDgLVBIbJB21TAxr0zwqGC3vJy2vZC2z1BgX5jYK7cGOGicaGicaVlYbjBNzHBgLKyxrLignHy2HLihnLDgvSywGGD3jPDguGB3bLCMf0Aw9UigjLCMHHC2LScIaGicaGigf3ywL0ihrOAxmUAw52ywXPzgf0zunHy2HLkcK7cGOGicaGicbYzxr1CM4GEWOGicaGicaGic4UlNvWzgf0zwrizwfKzxiScIaGicaGicaGw2rLDgfPBeTLEv06igfSBeL0zw1ZlaOGicaGicaGif9VCgvYyxrPB25ZoIb7cIaGicaGicaGicbKzwXLDgvKoIbKzwXLDgvKsxrLBxmUBgvUz3rOlaOGicaGicaGicaGDxbKyxrLzdOGDxbKyxrLzeL0zw1ZlMXLBMD0AcWkicaGicaGicaGigLUC2vYDgvKoIbPBNnLCNrLzeL0zw1ZlMXLBMD0AaOGicaGicaGih0kicaGicaGFtSkcIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbHD2fPDcbJBgLLBNqUCxvLCNKOj1jpteXcqunljYK7cIaGicaGignVBNnVBguUzxjYB3iOj0vYCM9YigLUihvWzgf0zunVBxbVC2L0ztONlcbLCNjVCIK7cIaGicaGihrOCM93igvYCM9YoWOGicaGFsbMAw5HBgX5ihSkicaGicaGy2XPzw50lNjLBgvHC2uOktSkicaGih0kicb9cG','Dg9dyw1LBenHC2u','ie1VzgvSic0Gqxv0BY1Nzw5LCMf0zwqGB24G','cIaGicaVlYa9pt0Gs0fgs0eGufvcteLtsdOGvvbeqvrfievwru5uid09pqOGicaGlY8Gq2HLy2SGyM90AcbYDw50Aw1LigvUDIaOs0fgs0fFru5bqKXfrcKGyw5KihbHEwXVywqGy29UzMLNcIaGicbJB25ZDcbRywzRyvj1BNrPBwvfBMfIBgvKvxbKyxrLid0GChjVy2vZCY5LBNyUs0fgs0fFru5bqKXfrca9pt0Gj3rYDwuNoWOGicaGAwyGkgTHzMTHuNvUDgLTzuvUywjSzwrvCgrHDguGjIyGA2fMA2ftzxj2AwnLicyMigTHzMTHq29UzMLNicyMigTHzMTHq29UzMLNlMvUywjSzwqGjIyGA2fMA2fdB25MAwCUChvIBgLZAe9UicyMigTHzMTHq29UzMLNlNb1yMXPC2HpBI51CgrHDguPihSkicaGicaGA2fMA2ftzxj2AwnLlNb1yMXPC2HvCgrHDguOcIaGicaGicaGjW','l2zPCNn0ic0GtwvUzgfWyxrRyw4Gzgf0ysa','jYWkicaGicaGicaN','C3rYAw5N','oWOGicaGAwyGkgHLywrLCKnHBgmUDg90ywXFAxrLBxmPihSkicaGicaGzgf0ys50B3rHBf9PDgvTCYa9igrHDgeU','l2rLBgv0zsaTie1LBMDOyxb1CYbKyxrHia','igjLCMrHC2fYA2fUigTYAxrLCMLHcNjVDxrLCI5WB3n0kcCVzMLYC3qNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGlY8GCMvXlMXVzY5Kzwj1zYGNuMvXDwvZDcbIB2r5ia','lY8Gq3vZDg9Tigf1zgL0ignVBhvTBNmGBwfWCgLUzYbKyxjPihbHEwXVywqk','cIaGicaVlYbmB2fKigfKDMfUy2vKihf1zxj5ihrLBxbSyxrLCWOGicaGy29UC3qGCxvLCNLezwzPBML0Aw9UCYa9ihSk','cIaGlYOQcIaGicOGq29TCg9ZAxrLihjLywqGlsbszwfKigHLywrLCIb3AxrOigrLDgfPBcbPDgvTCWOGicaQiebWyxjHBsb7t2jQzwn0FsbVChrPB25Zic0Gt3b0Aw9UCYb3AxrOihDOzxjLignSyxvZzsaOC2fTzsbMB3jTyxqGyxmGz2v0rgf0ysKkicaGkIbaCMv0DxjUCYb7uhjVBwLZztXpyMPLy3q+FsbszwnVCMrZihDPDgGGzgv0ywLSigL0zw1ZcIaGicOVcIaGyxn5BMmGCMvHzenVBxbVC2L0zsHVChrPB25Zksb7cIaGicb0CNKGEWOGicaGicaVlYbcDwLSzcbxsevsrsbJBgf1C2ukicaGicaGAwyGkcfVChrPB25ZlNDOzxjLksb7cIaGicaGicaGDgHYB3CGBMv3ievYCM9YkcDjBNzHBgLKihjLCxvLC3qGzM9YBwf0oIb3AgvYzsbWyxjHBwv0zxiGAxmGCMvXDwLYzwqNktSkicaGicaGFqOkicaGicaGBgv0ihbHCMfTCYa9ifTDoWOGicaGicbSzxqGCgfYyw1jBMrLEca9ide7cIaGicaGigXLDcb3AgvYzunSyxvZzvnXBdSkicaGicaGDhj5ihSkicaGicaGicb3AgvYzunSyxvZzvnXBca9ihrOAxmUyNvPBgrdB21WBgv4v2HLCMvdBgf1C2uOB3b0Aw9UCY53AgvYzsWGCgfYyw1ZlcbWyxjHBuLUzgv4ktSkicaGicaGFsbJyxrJAcaOzsKGEWOGicaGicaGignVBNn0igvYCM9Yid0GBMv3ievYCM9YkcDjBNzHBgLKihDOzxjLignVBMrPDgLVBNm6icCGkYbLlM1LC3nHz2uPoWOGicaGicaGigvYCM9YlNn0yxr1C0nVzguGpsa0mda7cIaGicaGicaGDgHYB3CGzxjYB3i7cIaGicaGih0kcIaGicaGic8Viff1zxj5igHLywrLCIbYzwnVCMrZcIaGicaGignVBNn0igHLywrLCLf1zxj5id0Gj1nftevdvcaQiezst00GjYaRihrOAxmUz2v0vgfIBgvtB3vYy2uOj3jLywqNksaRicCGv0HfuKuGjYaRihDOzxjLq2XHDxnLu3fSlNnXBdSkicaGicaGCgfYyw1Zid0GD2HLCMvdBgf1C2vtCwWUCgfYyw1ZoWOkicaGicaGy29UC3qGAgvHzgvYuMvZDwX0CYa9igf3ywL0igrIlMv4zwn1DgvrDwvYEsHOzwfKzxjrDwvYEsWGCgfYyw1ZktSkcIaGicaGigLMicHOzwfKzxjszxn1BhrZlMXLBMD0Aca9pt0GmcKGEWOGicaGicaGihjLDhvYBIb7cIaGicaGicaGicbZDwnJzxnZoIb0CNvLlaOGicaGicaGicaGy291BNq6idaScIaGicaGicaGicbKyxrHoIbBxqOGicaGicaGih07cIaGicaGih0kcIaGicaGic8ViezVCIbLywnOigHLywrLCIWGzMv0y2GGzgv0ywLSigL0zw1ZcIaGicaGignVBNn0ignVBxbVC2L0zvjLC3vSDhmGpsbBxtSkicaGicaGy29UC3qGzgv0ywLSs2v5id0GjW','cIaGicbYzxr1CM4GCMvZlMPZB24OEWOGicaGicaUlI5YzxnWB25ZzurHDgeScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9ignHDgnOicHLCNjVCIKGEWOGicaGy29UC29Szs5LCNjVCIGNrxjYB3iGC2fHDcbTzw5NAgfWDxmGzgf0ysa','lNvWzgf0zunVBxbVC2L0zsHKyxrHlcbLDMvUDenVBNrLEhqPoWOkicaGignVBNnVBguUBg9Nkga','y29UC3rYywLUDhm','AxrLBxm','ieforca','icaGic8ViezHBgXIywnRoIbNDw5HA2fUihjLywrtB3vYy2uGBgfUz3n1BMCGkhnLBxvHigTVBg9TihrLCNnLzgLHkqOGicaGCMv0DxjUicDtruXfq1qGkIbguK9nicCGkYb0AgLZlNjLywrtB3vYy2u7','y3jLyxrLq29TCg9ZAxrL','DxbKyxrLq29TCg9ZAxrL','ChjPy2vgAwvSza','cIaGicaGih0PktSkcIaGicaGihjLDhvYBIbYzxn1Bhq7cIaGicb9ignHDgnOicHLCNjVCIKGEWOGicaGicbJB25ZB2XLlMvYCM9YkcDfCNjVCIbPBIbNzxrmB29RDxbeyxrHicG','iezst00GjYaRihrOAxmUz2v0tg9VA3vWu291CMnLkcKGkYaN','jYWkicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGFsK7cN0PoWOkBw9KDwXLlMv4Cg9YDhmGpsbYB3v0zxi7','laOGicaGicbPBxbVCNrdB25MAwC6ia','D2HLCMvdBgf1C2uGkZ0GycbbtKqGvvbqrviOjhTZzwfYy2HcEx0PieXjs0uGvvbqrviOjYr7BgLRzvzHBhvLFsCPydS','igrHDgeNlaOGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igvYCM9YlM1LC3nHz2uGoIb1BMrLzMLUzwqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoWOk','x2XVB2T1CenVBMzPzW','jYKkicaGicaGica6ihbHDgGUAM9PBIH3B3jRAw5NrgLYlcaN','jYWkicaGicaGicaGigzVCMvPz25lzxK6icC','ifDirvjfia','jZSGlY8Gu291CMnLihvUDhvRig9WzxjHC2KGCMvHzcaOz2v0lcbSAxn0lcbSB29RDxaSigrHDgf0ywjSzxmPcIaGicb0AgLZlNDYAxrLu291CMnLid0GjW','lMrLBgv0zsiGBxvZDcbIzsbHBIbHCNjHEsCScIaGicaGicaGicb0Aw1LC3rHBxa6ig5LDYbeyxrLkcKUDg9ju09tDhjPBMCOkqOGicaGicaGih0PoWOGicaGicb9cGOGicaGicaVlYbusurbsYbTzwXHA3vRyw4Gyxv0BY1JywXJDwXHDgLVBIbKAsbLBMrWB2LUDaOGicaGicaVlYbdywXJDwXHDgLVBIbHA2fUigrPBgfRDwTHBIbKAsbnB2rLBcbZzxrLBgfOihnLBxvHig9WzxjHC2KGzgf0ywjHC2uGC2vSzxnHAqOGicaGicaVlYbnB2rLBcbHA2fUifnftevdvcb1BgfUzYbZzw11ysbPDgvTCYbKyw4GAgL0Dw5NihrVDgfSigrHCMKGAgfZAwWGywTOAxikicaGicaGy29UC29Szs5SB2COj0nVBxbVC2L0zvvWzgf0zsbVCgvYyxrPB25ZoICSihSkicaGicaGicbKzwXLDgvFy291BNq6icHVCgvYyxrPB25ZlMrLBgv0zsb8FcbBxsKUBgvUz3rOlaOGicaGicaGihvWzgf0zv9JB3vUDdOGkg9WzxjHDgLVBNmUDxbKyxrLihX8ifTDks5Szw5NDgGScIaGicaGicaGAw5Zzxj0x2nVDw50oIaOB3bLCMf0Aw9UCY5PBNnLCNqGFhWGw10PlMXLBMD0AaOGicaGicb9ktSkicaGih0kicaGia','jYWkicaGicaGicaGig9WDgLVBNm6ihjLCs5IB2r5t3b0Aw9UCYb8Fcb7FsWkicaGicaGicaGihjLCxvLC3rjzdOGCMvXlMLKihX8ig51BgWkicaGicaGicb9cIaGicaGih07cIaGicb9cGOGicaGlY8GugfUz2DPBcbTB2rLBcbJB21WB3nPDguGy3jLyxrLig1LDgHVzaOGicaGy29UC3qGCMvZDwX0id0GyxDHAxqG','igrHDgeNlaOGicaGicbKzxrHAwXZoIbWCM9JzxnZlMvUDI5ot0rfx0vovIa9pt0Gj2rLDMvSB3bTzw50jYa/igvYCM9YlM1LC3nHz2uGoIb1BMrLzMLUzwqScIaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPcIaGicb9ktSkicb9cN0PoWOklY8Gue9tvcaVyxbPlW','nffjr3zyBW','cIaGicaVlYa9pt0Gs0fgs0eGufvcteLtsdOGsu5trvjuievwru5uid09pqOGicaGlY8Gq2HLy2SGyM90AcbYDw50Aw1LigvUDIaOs0fgs0fFru5bqKXfrcKGyw5KihbHEwXVywqGy29UzMLNcIaGicbJB25ZDcbRywzRyvj1BNrPBwvfBMfIBgvKid0GChjVy2vZCY5LBNyUs0fgs0fFru5bqKXfrca9pt0Gj3rYDwuNoWOGicaGAwyGkgTHzMTHuNvUDgLTzuvUywjSzwqGjIyGA2fMA2ftzxj2AwnLicyMigTHzMTHq29UzMLNicyMigTHzMTHq29UzMLNlMvUywjSzwqGjIyGA2fMA2fdB25MAwCUChvIBgLZAe9UicyMigTHzMTHq29UzMLNlNb1yMXPC2HpBI5PBNnLCNqPihSkicaGicaGA2fMA2ftzxj2AwnLlNb1yMXPC2HjBNnLCNqOcIaGicaGicaGjW','icHHDg9TAwmGAw5JCMvTzw50l2rLy3jLBwvUDcKkCM91DgvYlNbVC3qOjY9HzgP1C3qNlcbHC3LUyYaOCMvXlcbYzxmPid0+ihSkicb0CNKGEWOGicaGlY8GvMfSAwrHC2KGCgf5Bg9HzaOGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGC3vJy2vZCZOGzMfSC2uScIaGicaGicaGzxjYB3i6icDjBNzHBgLKihbHEwXVywqNlaOGicaGicaGig1LC3nHz2u6icDqyxLSB2fKignHBM5VDcbIzsbLBxb0EsCScIaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGFsK7cIaGicb9cGOGicaGlY8GvMfSAwrHC2KGChjPBwfYEsbRzxKkicaGignVBNn0ihbYAw1HCNLlzxKGpsaN','wK5YqLy','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AwrHDguGzgf0zsbJB25ZDhjHAw50CWOGicaQlWOGif92ywXPzgf0zurHDgvdB25ZDhjHAw50CYHMAwvSze5HBwuSihzHBhvLlcbJB25ZDhjHAw50CYKGEWOGicaGy29UC3qGzxjYB3jZid0Gw107cIaGicbSzxqGC2fUAxrPEMvKid0GDMfSDwu7cGOGicaGlY8GqMfZAwmGzgf0zsb2ywXPzgf0Aw9UicHTB3jLignVBxbSzxGGCgfYC2LUzYbOyw5KBgvKigj5ierHDgvuAw1LugfYC2vYigLUigjHC2vTB2rLBcKkicaGic8Vie1PBI9nyxGGzgf0zsbYyw5NzqOGicaGAwyGkgnVBNn0CMfPBNrZlM1PBIb8FcbJB25ZDhjHAw50CY5TyxGPihSkicaGicaGDhj5ihSkicaGicaGicbJB25ZDcbKyxrLvMfSDwuGpsbUzxCGrgf0zsHZyw5PDgL6zwqPoWOGicaGicaGigLMicHPC05HtIHKyxrLvMfSDwuUz2v0vgLTzsGPksKGEWOGicaGicaGicaGzxjYB3jZlNb1C2GOyezPzwXKicCKE2zPzwXKtMfTzx0Nig11C3qGyMuGysb2ywXPzcbKyxrLycK7cIaGicaGicaGFsbLBhnLihSkicaGicaGicaGigLMicHJB25ZDhjHAw50CY5TAw4PihSkicaGicaGicaGicaGy29UC3qGBwLUrgf0zsa9ig5LDYbeyxrLkgnVBNn0CMfPBNrZlM1PBIK7cIaGicaGicaGicaGigLMicHKyxrLvMfSDwuGpcbTAw5eyxrLksb7cIaGicaGicaGicaGicaGy29UC3qGBwvZC2fNzsa9ignVBNn0CMfPBNrZlM1PBK1LC3nHz2uGFhWGyezPzwXKicCKE2zPzwXKtMfTzx0Nig11C3qGyMuGB24GB3iGywz0zxiGjhTJB25ZDhjHAw50CY5TAw59ydSkicaGicaGicaGicaGicbLCNjVCNmUChvZAcHTzxnZywDLktSkicaGicaGicaGicaGFqOGicaGicaGicaGFqOGicaGicaGicaGAwyGkgnVBNn0CMfPBNrZlM1HEcKGEWOGicaGicaGicaGicbJB25ZDcbTyxHeyxrLid0GBMv3ierHDguOy29UC3rYywLUDhmUBwf4ktSkicaGicaGicaGicaGAwyGkgrHDgvwywX1zsa+ig1HEerHDguPihSkicaGicaGicaGicaGicbJB25ZDcbTzxnZywDLid0Gy29UC3rYywLUDhmUBwf4twvZC2fNzsb8FcbGrMLLBgqGjYr7zMLLBgroyw1LFsCGBxvZDcbIzsbVBIbVCIbIzwzVCMuGjhTJB25ZDhjHAw50CY5TyxH9ydSkicaGicaGicaGicaGicbLCNjVCNmUChvZAcHTzxnZywDLktSkicaGicaGicaGicaGFqOGicaGicaGicaGFqOGicaGicaGih0kicaGicaGFsbJyxrJAcaOzsKGEWOGicaGicaGigvYCM9YCY5WDxnOkgbgAwvSzcaNjhTMAwvSze5HBwv9jYbTDxn0igjLigeGDMfSAwqGzgf0zwaPoWOGicaGicb9cIaGicb9cGOGicaGlY8GqMvMB3jLl0fMDgvYihjLBgfZAsbHA2fUigrPDMfSAwrHC2KGzgKGx3zHBgLKyxrLq3jVC3ngAwvSzenVBNn0CMfPBNrZcGOGicaGCMv0DxjUihSkicaGicaGDMfSAwq6igvYCM9YCY5Szw5NDgGGpt09idaScIaGicaGigvYCM9YCZOGzxjYB3jZlaOGicaGicb3yxjUAw5NCZOGw10ScIaGicaGihnHBML0AxPLzdOGC2fUAxrPEMvKcIaGicb9oWOGih0kcIaGlYOQcIaGicOGvMfSAwrHDguGyM9VBgvHBIbJB25ZDhjHAw50CWOGicaQlWOGif92ywXPzgf0zujVB2XLyw5dB25ZDhjHAw50CYHMAwvSze5HBwuSihzHBhvLlcbJB25ZDhjHAw50CYKGEWOGicaGy29UC3qGzxjYB3jZid0Gw107cIaGicbSzxqGC2fUAxrPEMvKid0GDMfSDwu7cGOGicaGAwyGkgnVBNn0CMfPBNrZlNn0CMLJDcKGEWOGicaGicbPzIaODhLWzw9MihnHBML0AxPLzcaHpt0Gj2jVB2XLyw4Nksb7cIaGicaGicaGzxjYB3jZlNb1C2GOyezPzwXKicCKE2zPzwXKtMfTzx0Nig11C3qGyMuGysbIB29SzwfUicH0CNvLl2zHBhnLkwaPoWOGicaGicb9cIaGicb9igvSC2uGEWOGicaGicaVlYbdB252zxj0ihrYDxrOEs9MywXZEqOGicaGicbPzIaOC2fUAxrPEMvKid09psaNDhj1zsCGFhWGC2fUAxrPEMvKid09psaNmsCGFhWGC2fUAxrPEMvKid09psaXksb7cIaGicaGicaGC2fUAxrPEMvKid0GDhj1ztSkicaGicaGFsbLBhnLigLMicHZyw5PDgL6zwqGpt09icDMywXZzsCGFhWGC2fUAxrPEMvKid09psaNmcCGFhWGC2fUAxrPEMvKid09psaWksb7cIaGicaGicaGC2fUAxrPEMvKid0GzMfSC2u7cIaGicaGih0GzwXZzsbPzIaODhLWzw9MihnHBML0AxPLzcaHpt0Gj2jVB2XLyw4Nksb7cIaGicaGicaGC2fUAxrPEMvKid0GqM9VBgvHBIHZyw5PDgL6zwqPoWOGicaGicb9cIaGicb9cGOGicaGCMv0DxjUihSkicaGicaGDMfSAwq6igvYCM9YCY5Szw5NDgGGpt09idaScIaGicaGigvYCM9YCZOGzxjYB3jZlaOGicaGicb3yxjUAw5NCZOGw10ScIaGicaGihnHBML0AxPLzdOGC2fUAxrPEMvKcIaGicb9oWOGih0kcIaGlYOQcIaGicOGvMfSAwrHDguGvvvjrcbJB25ZDhjHAw50CWOGicaQlWOGif92ywXPzgf0zvv1AwrdB25ZDhjHAw50CYHMAwvSze5HBwuSihzHBhvLlcbJB25ZDhjHAw50CYKGEWOGicaGy29UC3qGzxjYB3jZid0Gw107cIaGicbJB25ZDcb1DwLKuMvNzxGGpsaVxLSWltLHlwzDEZH9lvSWltLHlwzDEZr9lvSWltLHlwzDEZr9lvSWltLHlwzDEZr9lvSWltLHlwzDEZeYFsqVAtSkcIaGicbPzIaOixv1AwrszwDLEc50zxn0khzHBhvLksKGEWOGicaGicbJB25ZDcbTzxnZywDLid0Gy29UC3rYywLUDhmUzM9YBwf0twvZC2fNzsb8FcbGrMLLBgqGjYr7zMLLBgroyw1LFsCGBxvZDcbIzsbHihzHBgLKifvvsurGoWOGicaGicbLCNjVCNmUChvZAcHTzxnZywDLktSkicaGih0kcIaGicbYzxr1CM4GEWOGicaGicb2ywXPzdOGzxjYB3jZlMXLBMD0Aca9pt0GmcWkicaGicaGzxjYB3jZoIbLCNjVCNmScIaGicaGihDHCM5PBMDZoIbBxsWkicaGicaGC2fUAxrPEMvKoIb2ywX1zqOGicaGFtSkicb9cGOGic8QkGOGicaQifzHBgLKyxrLigfYCMf5ignVBNn0CMfPBNrZcIaGicOVcIaGx3zHBgLKyxrLqxjYyxLdB25ZDhjHAw50CYHMAwvSze5HBwuSihzHBhvLlcbJB25ZDhjHAw50CYKGEWOGicaGy29UC3qGzxjYB3jZid0Gw107cGOGicaGAwyGkcfbCNjHEs5PC0fYCMf5khzHBhvLksKGEWOGicaGicbLCNjVCNmUChvZAcHGrMLLBgqGjYr7zMLLBgroyw1LFsCGBxvZDcbIzsbHBIbHCNjHEwaPoWOGicaGicbYzxr1CM4GE3zHBgLKoIbMywXZzsWGzxjYB3jZoIbLCNjVCNmSihDHCM5PBMDZoIbBxsWGC2fUAxrPEMvKoIb2ywX1zx07cIaGicb9cGOGicaGlY8GBwLUsxrLBxmVBwf4sxrLBxmkicaGigLMicHJB25ZDhjHAw50CY5TAw5jDgvTCYaMjIb2ywX1zs5Szw5NDgGGpcbJB25ZDhjHAw50CY5TAw5jDgvTCYKGEWOGicaGicbJB25ZDcbTzxnZywDLid0Gy29UC3rYywLUDhmUBwLUsxrLBxnnzxnZywDLihX8igbgAwvSzcaNjhTMAwvSze5HBwv9jYbTDxn0igHHDMuGyxqGBgvHC3qGjhTJB25ZDhjHAw50CY5TAw5jDgvTC30GAxrLBxnGoWOGicaGicbLCNjVCNmUChvZAcHTzxnZywDLktSkicaGih0kicaGigLMicHJB25ZDhjHAw50CY5TyxHjDgvTCYaMjIb2ywX1zs5Szw5NDgGGpIbJB25ZDhjHAw50CY5TyxHjDgvTCYKGEWOGicaGicbJB25ZDcbTzxnZywDLid0Gy29UC3rYywLUDhmUBwf4sxrLBxnnzxnZywDLihX8igbgAwvSzcaNjhTMAwvSze5HBwv9jYbTDxn0ig5VDcbLEgnLzwqGjhTJB25ZDhjHAw50CY5TyxHjDgvTC30GAxrLBxnGoWOGicaGicbLCNjVCNmUChvZAcHTzxnZywDLktSkicaGih0kcIaGicaVlYb1BMLXDwvjDgvTCWOGicaGAwyGkgnVBNn0CMfPBNrZlNvUAxf1zuL0zw1Zksb7cIaGicaGignVBNn0ihvUAxf1zsa9ifSUlI5UzxCGu2v0khzHBhvLkv07cIaGicaGigLMicH1BMLXDwuUBgvUz3rOice9psb2ywX1zs5Szw5NDgGPihSkicaGicaGicbJB25ZDcbTzxnZywDLid0Gy29UC3rYywLUDhmUDw5PCxvLsxrLBxnnzxnZywDLihX8igbgAwvSzcaNjhTMAwvSze5HBwv9jYbTDxn0igHHDMuGDw5PCxvLigL0zw1ZydSkicaGicaGicbLCNjVCNmUChvZAcHTzxnZywDLktSkicaGicaGFqOGicaGFqOkicaGihjLDhvYBIb7cIaGicaGihzHBgLKoIbLCNjVCNmUBgvUz3rOid09psaWlaOGicaGicbLCNjVCNm6igvYCM9YCYWkicaGicaGD2fYBMLUz3m6ifTDlaOGicaGicbZyw5PDgL6zwq6ihzHBhvLcIaGicb9oWOGih0kcIaGlYOQcIaGicOGvMfSAwrHDguGsLnptIbJB25ZDhjHAw50CWOGicaQlWOGif92ywXPzgf0zuPZB25dB25ZDhjHAw50CYHMAwvSze5HBwuSihzHBhvLlcbJB25ZDhjHAw50CYKGEWOGicaGy29UC3qGzxjYB3jZid0Gw107cIaGicbSzxqGC2fUAxrPEMvKid0GDMfSDwu7cGOGicaGlY8GugfYC2uGAMLRysbZDhjPBMCkicaGigLMicH0ExbLB2yGC2fUAxrPEMvKid09psaNC3rYAw5NjYKGEWOGicaGicb0CNKGEWOGicaGicaGihnHBML0AxPLzca9iePtt04UCgfYC2uOC2fUAxrPEMvKktSkicaGicaGFsbJyxrJAcaOzsKGEWOGicaGicaGigvYCM9YCY5WDxnOkgbgAwvSzcaNjhTMAwvSze5HBwv9jYbTDxn0igjLihzHBgLKiePtt05GktSkicaGicaGicbYzxr1CM4GE3zHBgLKoIbMywXZzsWGzxjYB3jZoIbLCNjVCNmSihDHCM5PBMDZoIbBxsWGC2fUAxrPEMvKoIb2ywX1zx07cIaGicaGih0kicaGih0kcIaGicaVlYbku09oifnJAgvTysb2ywXPzgf0Aw9UigjPC2eGzgL0yw1IywHRyw4GzgKGC2LUAsbQAwTHigrPCgvYBhvRyw4kcIaGicbYzxr1CM4GEWOGicaGicb2ywXPzdOGzxjYB3jZlMXLBMD0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','icOG','y3jLyxrLzef0','icaGicaGiG','DMLLD05HBwu','lNzHBgLKyxrLrgf0ysHOzwfKzxjeyxrHrM9YvMfSAwrHDgLVBIWGj3vWzgf0zsCPoWOGicaGicbPzIaOixzHBgLKyxrPB24UAxnwywXPzcKGEWOGicaGicaGihjLDhvYBIbYzxmUC3rHDhvZkdqWmcKUANnVBIH7cIaGicaGicaGicbZDwnJzxnZoIbMywXZzsWkicaGicaGicaGigvYCM9YoIaNvMfSAwrHDgLVBIbMywLSzwqNlaOGicaGicaGicaGBwvZC2fNztOGj0LUDMfSAwqGzgf0ysCScIaGicaGicaGicbLCNjVCNm6ihzHBgLKyxrPB24UzxjYB3jZlaOGicaGicaGicaGDgLTzxn0yw1WoIbUzxCGrgf0zsGPlNrVsvnpu3rYAw5NkcKkicaGicaGicb9ktSkicaGicaGFqOkicaGicaGlY8GtwvYz2uGC2fUAxrPEMvKigrHDgeGkhrLCM1HC3vRigHHC2GGCMvZDwX0ksbRzw1IywXPigTLigrHDgekicaGicaGt2jQzwn0lMfZC2LNBIHKyxrHlcb2ywXPzgf0Aw9UlNnHBML0AxPLzerHDgePoWOGicaGFqOkicaGia','wKHRqva','jYWkicaGicaGicbHzgrPDgLVBMfSq29UDgv4DdOGEWOGicaGicaGicaGzgv0ywLSvgfIBgu6icC','iICScIaGicaGicaGzxHHBxbSztOG','x2v4DgvUzgvKrMLLBgrZ','ihn0yxrPyYbSB29RDxaGCMvXDwvZDcb3AxrOihnLBgvJDgvKx3rHzZOGjhTZzwXLy3rLzfrHz31GktSkcIaGicaGic8ViePPA2eGywrHigzPzwXKihnLBgvJDcbHDgf1ihnVCNrFy29SDw1UCYWGz3vUywTHBIbNzxrmB29RDxbeyxrHv2L0AezPBhrLCIbKzw5Nyw4GyM9KEsb5yw5NigrPBw9KAwzPA2fZAqOGicaGicbPzIaOkhjLCs5IB2r5lNnLBgvJDcaMjIbbCNjHEs5PC0fYCMf5khjLCs5IB2r5lNnLBgvJDcKPihX8icHYzxeUyM9KEs5ZB3j0x2nVBhvTBNmGjIyGqxjYyxKUAxnbCNjHEsHYzxeUyM9KEs5ZB3j0x2nVBhvTBNmPksKGEWOGicaGicaGignVBNnVBguUBg9NkcDgB3vUzcbZzwXLy3qGzMLLBgrZig9YihnVCNrFy29SDw1UCYWGDxnPBMCGz2v0tg9VA3vWrgf0yvDPDgHgAwX0zxiNktSkcIaGicaGicaGlY8GqNvHDcbIB2r5igjHCNuGzgvUz2fUihDOzxjLigTVC29UzYb1BNr1AYbTzw5Nyw1IAwWGC2vTDweGzgf0yqOGicaGicaGignVBNn0ig1VzgLMAwvKqM9KEsa9ihSkicaGicaGicaGic4UlNjLCs5IB2r5laOGicaGicaGicaGD2HLCMu6ifTDic8VievTChr5ihDOzxjLihvUDhvRig1LBMDHBwjPBcbZzw11ysbKyxrHcIaGicaGicaGFtSkcIaGicaGicaGy29UC3qGBgLZDca9igf3ywL0ia','C3rYAw5NAwz5','DhLWzq','igzPzwXKCWOGkIbeyxrHyMfZztOGug9ZDgDYzvnrtaOGkI8kcI8VienpuLmGzgL0yw5Nyw5PigrPigXLDMvSigfWCcbVBgvOignVCNmGBwLKzgXLD2fYzsaOBgLOyxqGA29UzMLNDxjHC2KGq09su19ftKfcteveigrHBIbdt1jtx09ssuDjtLmGzgKGlMvUDIKkcGOklY8GtwLKzgXLD2fYzsb1BNr1AYb2ywXPzgfZAsbWyxLSB2fKihbHzgeGBwv0B2rLifbpu1qkCM91DgvYlNvZzsGOCMvXlcbYzxmSig5LEhqPid0+ihSkicbPzIaOCMvXlM1LDgHVzca9pt0Gj1bpu1qNksb7cIaGicb0CNKGEWOGicaGicaVlYbtA2LWihzHBgLKyxrPB24GDw50DwSGAw1WB3j0ihjVDxrLCYaOBwvUz2D1BMfRyw4GBxvSDgLWyxj0l2zVCM0Tzgf0ysWGyNvRyw4GsLnptIKkicaGicaGAwyGkhjLCs5WyxrOlNn0yxj0C1DPDgGOjY9PBxbVCNqTjYKPihSkicaGicaGicbYzxr1CM4GBMv4DcGPoWOGicaGicb9cGOGicaGicaVlYbwywXPzgfZAsb1BxvTihvUDhvRihbHEwXVywqkicaGicaGAwyGkcfYzxeUyM9KEsb8FcbpyMPLy3qUA2v5CYHYzxeUyM9KEsKUBgvUz3rOid09psaWksb7cIaGicaGicaGCMv0DxjUihjLCY5ZDgf0DxmOndaWks5QC29UkhSkicaGicaGicaGihn1y2nLC3m6igzHBhnLlaOGicaGicaGicaGzxjYB3i6icDnAxnZAw5NihbHEwXVywqNlaOGicaGicaGicaGBwvZC2fNztOGj1bHEwXVywqGy2fUBM90igjLigvTChr5jYWkicaGicaGicaGihrPBwvZDgfTCdOGBMv3ierHDguOks50B0Ltt1n0CMLUzYGPlaOGicaGicaGicaGzw5KCg9PBNq6icCVyxbPlW','cGOGicaGicbJB25ZDcb2ywXPzgf0Aw9Uid0GyxDHAxqG','rvPgDve'];a0_0x29c4=function(){return _0x371ebb;};return a0_0x29c4();}function buildRequestScopeMiddleware(_0x47d095,_0x4e1dff){const _0x4af579=a0_0x4955,_0x4e8a18={'XbTFS':function(_0x519670,_0x11de01){return _0x519670||_0x11de01;}};if(!_0x47d095[_0x4af579(0x20e)])return'';const {column:_0x447dca,source:_0x174bea,bypassRoles:_0x251fb1}=_0x47d095[_0x4af579(0x20e)],_0x2bb7a5=JSON[_0x4af579(0x18f)](_0x251fb1||[]),_0x3a5fc0=_0x4e8a18[_0x4af579(0x259)](_0x4e1dff,'')['replace'](/-/g,'_');return'\x0a//\x20───\x20Request\x20Scope\x20Middleware\x20(Layer\x201\x20RLS)\x20──────────────────────────\x0a//\x20Dynamic\x20per-request\x20filtering\x20by\x20\x27'+_0x447dca+'\x27\x20from\x20'+_0x174bea+'\x0a//\x20Generated\x20from\x20requestScope\x20configuration\x20in\x20payload\x20JSON\x0arouter.use((req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20if\x20(req.method\x20!==\x20\x27POST\x27)\x20return\x20next();\x0a\x0a\x20\x20//\x20Skip\x20when\x20no\x20auth\x20context\x20(endpoint\x20without\x20auth\x20middleware)\x0a\x20\x20if\x20(!req.user)\x20return\x20next();\x0a\x0a\x20\x20//\x20Skip\x20when\x20user\x20has\x20bypass\x20role\x0a\x20\x20const\x20userRoles\x20=\x20req.user.roles\x20||\x20[];\x0a\x20\x20const\x20bypassRoles\x20=\x20'+_0x2bb7a5+';\x0a\x20\x20if\x20(bypassRoles.length\x20>\x200\x20&&\x20bypassRoles.some(role\x20=>\x20userRoles.includes(role)))\x20{\x0a\x20\x20\x20\x20return\x20next();\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Read\x20scope\x20value\x20from\x20user\x20context\x0a\x20\x20const\x20scopeValue\x20=\x20'+_0x174bea+';\x0a\x20\x20if\x20(scopeValue\x20===\x20undefined\x20||\x20scopeValue\x20===\x20null)\x20{\x0a\x20\x20\x20\x20return\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27Request\x20scope\x20value\x20not\x20available\x20in\x20user\x20context\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a\x0a\x20\x20//\x20Expose\x20scope\x20info\x20for\x20route\x20handlers\x20(ownership\x20verification\x20in\x20/first,\x20/update,\x20/update-composite)\x0a\x20\x20req._requestScope\x20=\x20{\x20column:\x20\x27'+_0x447dca+'\x27,\x20value:\x20scopeValue\x20};\x0a\x0a\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x0a\x20\x20const\x20scopeCondition\x20=\x20{\x20key:\x20\x27'+_0x447dca+_0x4af579(0x288)+_0x447dca+_0x4af579(0x1b2)+_0x447dca+_0x4af579(0x29d)+_0x3a5fc0+'\x27]\x20||\x20req.body;\x0a\x20\x20\x20\x20masterBody[\x27'+_0x447dca+'\x27]\x20=\x20scopeValue;\x0a\x20\x20}\x0a\x0a\x20\x20next();\x0a});\x0a';}function buildLookupOverrideCode(_0x42f609,_0x28eeae){const _0x2b5122=a0_0x4955,_0x1ec428={'zsTvW':function(_0xc4125b,_0x5e0dca){return _0xc4125b(_0x5e0dca);},'bhTsC':_0x2b5122(0x225),'uJuAF':'WHERE\x20'},_0x2ef1b8=FileUtils['detectTextColumn'](_0x28eeae['fieldName']||[]),_0x1ac8ee=FileUtils[_0x2b5122(0x13e)](_0x42f609),_0xb6c7e9=_0x28eeae[_0x2b5122(0x18d)]||{'all':_0x28eeae['fieldName']||[]},_0x511643=_0x28eeae['primaryKey']||_0x28eeae['fieldName']&&_0x28eeae[_0x2b5122(0x126)][0x0]||'id',_0x4cf0c3=_0x28eeae[_0x2b5122(0x285)]&&_0x28eeae['defaultScope'][_0x2b5122(0x136)]?_0x1ec428[_0x2b5122(0x20d)](buildDefaultScopeSQL,_0x28eeae['defaultScope']['lookup']):'';return'\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Mendapatkan\x20FROM\x20clause\x20untuk\x20lookup\x20berdasarkan\x20prioritas\x20resolusi\x20sumber\x20data\x0a\x20\x20\x20*\x20Prioritas:\x20viewName\x20→\x20viewQuery\x20→\x20tableName\x20(konsisten\x20dengan\x20/read\x20dan\x20/first)\x0a\x20\x20\x20*\x20@returns\x20{string}\x20FROM\x20clause\x20dengan\x20alias\x20\x27a\x27\x0a\x20\x20\x20*/\x0a\x20\x20getLookupSource()\x20{\x0a\x20\x20\x20\x20const\x20readQuery\x20=\x20this.getReadQuery();\x0a\x20\x20\x20\x20const\x20simpleQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20if\x20(readQuery.trim()\x20!==\x20simpleQuery)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20viewName\x20atau\x20viewQuery\x20aktif\x20—\x20bungkus\x20sebagai\x20subquery\x0a\x20\x20\x20\x20\x20\x20return\x20\x27(\x27\x20+\x20readQuery\x20+\x20\x27)\x20a\x27;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20this.readSource\x20+\x20\x27\x20a\x27;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getLookupData\x20untuk\x20menggunakan\x20kolom\x20\x27'+_0x2ef1b8+_0x2b5122(0x1a1)+_0x511643+',\x20'+_0x2ef1b8+'\x20FROM\x20\x27\x20+\x20this.getLookupSource()\x20+\x20\x27\x20WHERE\x20upper(a.'+_0x2ef1b8+')\x20LIKE\x20upper($1)'+(_0x4cf0c3?_0x2b5122(0x169)+_0x4cf0c3:'')+'\x20ORDER\x20BY\x20a.'+_0x2ef1b8+_0x2b5122(0x19d)+_0x511643+_0x2b5122(0x11c)+_0x2ef1b8+_0x2b5122(0x16e)+_0x1ac8ee+_0x2b5122(0x22b)+JSON['stringify'](_0x28eeae[_0x2b5122(0x174)]||null)+';\x0a\x20\x20\x20\x20\x20\x20const\x20textFields\x20=\x20lookupConfig\x20&&\x20lookupConfig.searchFields.length\x20>\x200\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20lookupConfig.searchFields\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20'+JSON[_0x2b5122(0x18f)](_0xb6c7e9[_0x2b5122(0x1f9)]||[_0x2ef1b8])+';\x0a\x0a\x20\x20\x20\x20\x20\x20let\x20whereConditions\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a'+(_0x4cf0c3?'\x0a\x20\x20\x20\x20\x20\x20//\x20Default\x20scope\x20filter\x0a\x20\x20\x20\x20\x20\x20whereConditions.push(\x27'+_0x4cf0c3+_0x2b5122(0x26b):'')+_0x2b5122(0x230)+JSON[_0x2b5122(0x18f)](_0x28eeae['fieldName']||[])+'.includes(key))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereConditions.push(`a.${key}\x20=\x20$${paramIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20final\x20query\x20-\x20gunakan\x20custom\x20select\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20idField\x20=\x20lookupConfig\x20?\x20lookupConfig.idField\x20:\x20\x27'+_0x511643+_0x2b5122(0x236)+_0x511643+_0x2b5122(0x229)+_0x1ac8ee+'Model):\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getStaticLookupData\x20untuk\x20menggunakan\x20kolom\x20\x27'+_0x2ef1b8+_0x2b5122(0x261)+_0x511643+',\x20'+_0x2ef1b8+_0x2b5122(0x16f)+(_0x4cf0c3?_0x2b5122(0x177)+_0x4cf0c3:'')+_0x2b5122(0x1c6)+_0x2ef1b8+_0x2b5122(0x2a9)+_0x511643+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item.'+_0x2ef1b8+'\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedLookup(cacheOptions,\x20cacheData,\x20\x27static\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Return\x20dengan\x20selected\x20flag\x0a\x20\x20\x20\x20\x20\x20return\x20data.map(item\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20id:\x20item.'+_0x511643+_0x2b5122(0x1b7)+_0x2ef1b8+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(item.'+_0x511643+_0x2b5122(0x1b1)+_0x1ac8ee+_0x2b5122(0x151)+_0x511643+_0x2b5122(0x1bd)+_0x2ef1b8+'\x27];\x0a\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Parse\x20dan\x20validasi\x20select\x20columns\x20untuk\x20support\x20SQL\x20expressions\x0a\x20\x20\x20\x20\x20\x20const\x20validTextFields\x20=\x20'+JSON[_0x2b5122(0x18f)](_0xb6c7e9['textFields']||[])+';\x0a\x20\x20\x20\x20\x20\x20let\x20selectClause\x20=\x20\x27'+_0x511643+'\x27;\x0a\x20\x20\x20\x20\x20\x20let\x20textField\x20=\x20\x27'+_0x2ef1b8+_0x2b5122(0x1b4)+_0x511643+_0x2b5122(0x271)+_0x2ef1b8+_0x2b5122(0x28d)+(_0x4cf0c3?'WHERE\x20'+_0x4cf0c3+'\x20':'')+'`;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Bangun\x20WHERE\x20clause\x20jika\x20ada\x20dan\x20tidak\x20kosong\x0a\x20\x20\x20\x20\x20\x20if\x20((options.where\x20&&\x20Array.isArray(options.where)\x20&&\x20options.where.length\x20>\x200)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(options.where\x20&&\x20options.where.conditions\x20&&\x20Array.isArray(options.where.conditions)\x20&&\x20options.where.conditions.length\x20>\x200))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20whereResult\x20=\x20this.buildComplexWhereClause(options.where,\x20params,\x20paramIndex);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20query\x20+=\x20`'+(_0x4cf0c3?_0x1ec428[_0x2b5122(0x286)]:_0x1ec428[_0x2b5122(0x23b)])+_0x2b5122(0x22e)+(_0x4cf0c3?')':'')+'\x20`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20params\x20=\x20whereResult.params;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Handle\x20sort_columns\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20if\x20(options.sort_columns\x20&&\x20Array.isArray(options.sort_columns)\x20&&\x20options.sort_columns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20orderParts\x20=\x20options.sort_columns.map(item\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20column\x20=\x20item.column;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20direction\x20=\x20(item.direction\x20||\x20\x27ASC\x27).toUpperCase();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!column)\x20return\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!this.validFields.includes(column)\x20&&\x20column\x20!==\x20\x27'+_0x511643+_0x2b5122(0x1c4)+_0x42f609[_0x2b5122(0x1cc)]()+_0x2b5122(0x14a)+_0x511643+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20text:\x20item[textFieldName]\x20||\x20item.'+_0x2ef1b8+'\x20||\x20item.name\x20||\x20item.code\x20||\x20item.description\x20||\x20\x27\x27\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache\x20the\x20result\x20(if\x20enabled)\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedLookup(cacheOptions,\x20result,\x20\x27filter\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getLookupDataWithFilter\x20('+_0x1ac8ee+_0x2b5122(0x281);}function buildAdvancedQuerySection(_0x3d18bf){const _0x13c06a=a0_0x4955,_0x40d2ae={'Ozneo':function(_0x1754cb,_0x11768c){return _0x1754cb===_0x11768c;}},_0x5d2474=_0x3d18bf['advancedQueries']||{};if(_0x40d2ae[_0x13c06a(0x248)](Object[_0x13c06a(0x1ec)](_0x5d2474)[_0x13c06a(0x218)],0x0))return'//\x20No\x20advanced\x20queries\x20defined';return _0x13c06a(0x163)+Object[_0x13c06a(0x24d)](_0x5d2474)['map'](([_0x7144f9,_0x2e481a])=>_0x13c06a(0x187)+_0x7144f9+'\x22:\x20'+JSON['stringify'](_0x2e481a))['join'](',\x0a')+_0x13c06a(0x269);}function buildQueryLoadingCode(_0x2b6912,_0x1309ec){const _0x2c5cb0=a0_0x4955,_0xc74691={'NmAZA':'${payload.tableName\x20||\x20\x22undefined_table\x22}'};if(!_0x2b6912)return _0x2c5cb0(0x21f);const _0x272658=_0x2b6912[_0x2c5cb0(0x228)](/\$\{tableName\}/g,_0xc74691['NmAZA'])[_0x2c5cb0(0x228)](/\$\{this\.table\}/g,'${payload.tableName\x20||\x20\x22undefined_table\x22}');return'let\x20baseQuery\x20=\x20`'+_0x272658+'`.trim();';}function buildFieldMappingCode(_0x414424){const _0x4507ad=a0_0x4955,_0x10bf8c={'KlKAG':_0x4507ad(0x1d1)},_0x2a3ec0=_0x414424[_0x4507ad(0x18d)]||{};return _0x4507ad(0x1da)+JSON[_0x4507ad(0x18f)](_0x2a3ec0[_0x4507ad(0x1f9)]||[])+_0x4507ad(0x27a)+JSON['stringify'](_0x2a3ec0['dateFields']||[])+_0x4507ad(0x27d)+JSON['stringify'](_0x2a3ec0['requiredFields']||[])+',\x0a\x20\x20\x20\x20\x20\x20primaryTextField:\x20\x27'+(_0x2a3ec0[_0x4507ad(0x260)]||_0x10bf8c['KlKAG'])+'\x27,\x0a\x20\x20\x20\x20\x20\x20searchableFields:\x20this.getSearchableColumns\x20?\x20this.getSearchableColumns().map(col\x20=>\x20col.name)\x20:\x20[]\x0a\x20\x20\x20\x20};\x0a\x20\x20}';}function _generateValidationConfig(_0x252c30){const _0x29ab18=a0_0x4955,_0x4abc5d={'PpBBR':_0x29ab18(0x295),'yfWYv':function(_0x11abe7,_0x404116){return _0x11abe7===_0x404116;},'mCOFy':_0x29ab18(0x1fc)};if(!_0x252c30||!Array['isArray'](_0x252c30)||_0x4abc5d[_0x29ab18(0x21b)](_0x252c30[_0x29ab18(0x218)],0x0))return _0x4abc5d[_0x29ab18(0x221)];const _0x33e280=_0x252c30[_0x29ab18(0x148)](_0x40e688=>{const _0x5d82aa=_0x29ab18,_0x466a27=JSON[_0x5d82aa(0x18f)](_0x40e688[_0x5d82aa(0x167)]||{},null,0x6)['replace'](/\n/g,_0x4abc5d['PpBBR']);return'\x20\x20\x20\x20\x20\x20\x27'+_0x40e688['name']+'\x27:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20type:\x20\x27'+_0x40e688['type']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20constraints:\x20'+_0x466a27+_0x5d82aa(0x131);})['join'](',\x0a');return _0x29ab18(0x220)+_0x33e280+_0x29ab18(0x1f2);}function _generateValidateFieldConstraints(){const _0x3b3156=a0_0x4955;return _0x3b3156(0x180);}function generateCompositeMethods(_0x3d05f6){const _0x223730=a0_0x4955,_0x2f9348={'DzxSB':function(_0x5ee1ef,_0x149c16){return _0x5ee1ef===_0x149c16;},'ZHkAP':_0x223730(0x26f),'Srfnm':function(_0x5b5f83,_0x38e6a7){return _0x5b5f83>_0x38e6a7;},'dsetC':function(_0x3e9231,_0x2c3c71){return _0x3e9231>_0x2c3c71;},'baSBu':function(_0x12ae4a,_0x325f49){return _0x12ae4a===_0x325f49;},'KSLGX':_0x223730(0x26c),'XMYxY':function(_0x331f2a,_0x1521ff){return _0x331f2a+_0x1521ff;}},_0x1257ae=_0x3d05f6['action']||{},_0x15dd6c=_0x3d05f6[_0x223730(0x231)]&&_0x3d05f6[_0x223730(0x231)][_0x223730(0x1ba)];if(!_0x15dd6c||!_0x1257ae[_0x223730(0x16b)]&&!_0x1257ae['updateComposite']&&!_0x1257ae['readComposite'])return'';const _0x41754c=_0x3d05f6['masterDetail'][_0x223730(0x209)],_0x20fc9a=_0x3d05f6[_0x223730(0x231)][_0x223730(0x1d8)],_0x7f03a8=_0x3d05f6[_0x223730(0x24e)]||'id';let _0x35b7ec='\x0a';if(_0x1257ae[_0x223730(0x16b)]){const _0xc0cbe9=_0x3d05f6[_0x223730(0x231)]?.[_0x223730(0x254)]?.[_0x223730(0x24e)]||_0x41754c['split']('.')[_0x223730(0x206)]()+'_id',_0x3bbe6e=_0x3d05f6['masterDetail']?.['detailConfig']?.[_0x223730(0x1f1)]||{},_0x4f35ee=[],_0x1b2b33=[];for(const [_0x1fed2e,_0x491e00]of Object[_0x223730(0x24d)](_0x3bbe6e)){if(_0x2f9348['DzxSB'](_0x491e00[_0x223730(0x190)],_0x2f9348[_0x223730(0x18a)]))_0x4f35ee['push'](_0x1fed2e);else{const _0x2f875a=(_0x491e00['formula']||'')['split']('*')[_0x223730(0x148)](_0x13a5c9=>_0x13a5c9['trim']());_0x1b2b33[_0x223730(0x1ef)]({'fieldName':_0x1fed2e,'qtyField':_0x2f875a[0x0],'priceField':_0x2f875a[0x1]});}}const _0x55cfc8=_0x1b2b33[_0x223730(0x148)](_0x3c43ed=>{const _0x3fee2d=_0x223730;return'\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-calculate\x20'+_0x3c43ed['fieldName']+'\x20=\x20'+_0x3c43ed['qtyField']+'\x20*\x20'+_0x3c43ed[_0x3fee2d(0x16d)]+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20item.'+_0x3c43ed['fieldName']+'\x20=\x20(Number(item.'+_0x3c43ed['qtyField']+_0x3fee2d(0x2a2)+_0x3c43ed[_0x3fee2d(0x16d)]+_0x3fee2d(0x233);})[_0x223730(0x266)]('\x0a');_0x35b7ec+='\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Composite\x20create\x20-\x20Create\x20header\x20with\x20detail\x20items\x20in\x20a\x20single\x20transaction\x0a\x20\x20\x20*\x20@param\x20{Object}\x20data\x20-\x20Data\x20containing\x20header\x20and\x20detail\x20items\x20array\x0a\x20\x20\x20*\x20@returns\x20{Promise<Object>}\x20Created\x20record\x20with\x20items\x0a\x20\x20\x20*/\x0a\x20\x20async\x20createComposite(data,\x20eventContext\x20=\x20null)\x20{\x0a\x20\x20\x20\x20const\x20pool\x20=\x20db.getPool();\x0a\x20\x20\x20\x20const\x20client\x20=\x20await\x20pool.connect();\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27BEGIN\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20header\x20data\x20(exclude\x20detail\x20items)\x0a\x20\x20\x20\x20\x20\x20const\x20headerData\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20\x20\x20const\x20detailKey\x20=\x20\x27'+_0x41754c[_0x223730(0x274)]('.')[_0x223730(0x206)]()+'\x27;\x0a\x20\x20\x20\x20\x20\x20delete\x20headerData[detailKey];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20---\x20Hook:\x20onBeforeCompositeInsert\x20---\x0a\x20\x20\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20componentEngine:\x20ce,\x20ContextBuilder:\x20CB\x20}\x20=\x20eventContext;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailItems\x20=\x20data[detailKey]\x20||\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeCtx\x20=\x20CB.buildCompositeInsertBeforeContext(headerData,\x20detailItems,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x3d05f6[_0x223730(0x13f)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x41754c+_0x223730(0x176)+_0x20fc9a+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeResult\x20=\x20await\x20ce.executeOnBeforeComposite(\x27insert\x27,\x20beforeCtx);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!beforeResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`onBeforeCompositeInsert\x20failed:\x20${beforeResult.error}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20header\x20INSERT\x20query\x0a\x20\x20\x20\x20\x20\x20const\x20headerFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20headerValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20headerPlaceholders\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20placeholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(headerData))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerPlaceholders.push(`$${placeholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(created_at,\x20created_by,\x20updated_at,\x20updated_by)\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20placeholderIndex\x20=\x20this._appendCreateAuditColumns(headerFields,\x20headerValues,\x20headerPlaceholders,\x20headerData,\x20eventContext,\x20placeholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20headerInsertQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20${this.writeSource}\x20(${headerFields.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(${headerPlaceholders.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Executing\x20header\x20INSERT:\x27,\x20{\x20query:\x20headerInsertQuery,\x20values:\x20headerValues\x20});\x0a\x20\x20\x20\x20\x20\x20const\x20headerResult\x20=\x20await\x20client.query(headerInsertQuery,\x20headerValues);\x0a\x20\x20\x20\x20\x20\x20const\x20insertedHeader\x20=\x20headerResult.rows[0];\x0a\x20\x20\x20\x20\x20\x20const\x20masterPrimaryKeyValue\x20=\x20insertedHeader[this.primaryKey];\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Header\x20inserted\x20successfully:\x20${this.primaryKey}=${masterPrimaryKeyValue}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Insert\x20detail\x20items\x0a\x20\x20\x20\x20\x20\x20const\x20insertedItems\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20detailTableName\x20=\x20\x27'+_0x41754c+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20foreignKey\x20=\x20\x27'+_0x20fc9a+'\x27;\x0a\x20\x20\x20\x20\x20\x20'+(_0x2f9348[_0x223730(0x1fa)](_0x4f35ee[_0x223730(0x218)],0x0)?_0x223730(0x29f)+JSON['stringify'](_0x4f35ee)+';':'')+_0x223730(0x219)+_0xc0cbe9+'\x27;\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20item\x20of\x20data[detailKey]\x20||\x20[])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Add\x20foreign\x20key\x20to\x20item\x0a\x20\x20\x20\x20\x20\x20\x20\x20item[foreignKey]\x20=\x20masterPrimaryKeyValue;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20UUID\x20untuk\x20detail\x20PK\x20bila\x20client\x20tidak\x20menyupply.\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Konsisten\x20dengan\x20konvensi\x20autoGenerate+primaryKey\x20di\x20single-table\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20(lihat\x20validateData)\x20dan\x20seragam\x20lintas\x20dialect:\x20semua\x20generator\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20memakai\x20uuid.v7()\x20sehingga\x20format\x20UUID\x20dan\x20titik\x20generasi\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20identik,\x20independen\x20dari\x20DEFAULT\x20expression\x20di\x20DDL.\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(item[detailPrimaryKey]\x20===\x20undefined\x20||\x20item[detailPrimaryKey]\x20===\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20item[detailPrimaryKey]\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a'+(_0x55cfc8?'\x0a'+_0x55cfc8+'\x0a':'')+_0x223730(0x2a5)+(_0x2f9348['dsetC'](_0x4f35ee[_0x223730(0x218)],0x0)?_0x223730(0x215):'')+_0x223730(0x245)+_0x3d05f6[_0x223730(0x13f)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x41754c+_0x223730(0x176)+_0x20fc9a+_0x223730(0x19c);}if(_0x1257ae[_0x223730(0x16c)]){const _0x33d32d=_0x3d05f6['masterDetail']?.['detailConfig']?.['primaryKey']||_0x41754c['split']('.')[_0x223730(0x206)]()+_0x223730(0x1e0),_0x43d186=_0x3d05f6[_0x223730(0x231)]?.[_0x223730(0x200)]||null,_0x581234=_0x3d05f6['masterDetail']?.['detailConfig']?.[_0x223730(0x1f1)]||{},_0x432cd9=[],_0x486db5=[];for(const [_0x549915,_0x17fb29]of Object[_0x223730(0x24d)](_0x581234)){if(_0x2f9348['baSBu'](_0x17fb29[_0x223730(0x190)],'generated'))_0x432cd9['push'](_0x549915);else{const _0x4aa380=(_0x17fb29[_0x223730(0x1e8)]||'')['split']('*')[_0x223730(0x148)](_0x3237dc=>_0x3237dc[_0x223730(0x256)]());_0x486db5['push']({'fieldName':_0x549915,'qtyField':_0x4aa380[0x0],'priceField':_0x4aa380[0x1]});}}const _0x43186c=_0x486db5['map'](_0x22b535=>{const _0x5ec892=_0x223730;return _0x5ec892(0x25a)+_0x22b535['fieldName']+'\x20=\x20'+_0x22b535['qtyField']+'\x20*\x20'+_0x22b535[_0x5ec892(0x16d)]+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20item.'+_0x22b535['fieldName']+'\x20=\x20(Number(item.'+_0x22b535[_0x5ec892(0x247)]+')\x20||\x200)\x20*\x20(Number(item.'+_0x22b535[_0x5ec892(0x16d)]+_0x5ec892(0x233);})['join']('\x0a'),_0x57d2b2=_0x3d05f6['masterDetail']?.['detailConfig']?.[_0x223730(0x1f1)]?.[_0x223730(0x2a8)]?.['formula']||'',_0x544645=_0x57d2b2['split']('*')[_0x223730(0x148)](_0x2ba976=>_0x2ba976[_0x223730(0x256)]()),_0x41701e=_0x3d05f6['masterDetail']?.[_0x223730(0x200)]?.['total_qty']?.[_0x223730(0x205)]?.['replace'](_0x2f9348['KSLGX'],'')||'',_0x2d98da=_0x544645[0x0]||_0x41701e,_0x227170=_0x544645[0x1]||'unit_price';_0x35b7ec+=_0x223730(0x1af)+_0x41754c[_0x223730(0x274)]('.')[_0x223730(0x206)]()+'\x27;\x0a\x20\x20\x20\x20\x20\x20delete\x20headerData[detailKey];\x0a\x20\x20\x20\x20\x20\x20delete\x20headerData[this.primaryKey];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20---\x20Hook:\x20onBeforeCompositeUpdate\x20---\x0a\x20\x20\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20componentEngine:\x20ce,\x20ContextBuilder:\x20CB\x20}\x20=\x20eventContext;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailOps\x20=\x20data[detailKey]\x20||\x20{};\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeCtx\x20=\x20CB.buildCompositeUpdateBeforeContext(headerData,\x20oldData,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20insert:\x20detailOps.insert\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20update:\x20detailOps.update\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20delete:\x20detailOps.delete\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x3d05f6[_0x223730(0x13f)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x41754c+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+_0x20fc9a+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20primaryKey:\x20this.primaryKey,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...(eventContext.additionalContext\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20beforeResult\x20=\x20await\x20ce.executeOnBeforeComposite(\x27update\x27,\x20beforeCtx);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!beforeResult.success)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`onBeforeCompositeUpdate\x20failed:\x20${beforeResult.error}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Build\x20header\x20UPDATE\x20query\x0a\x20\x20\x20\x20\x20\x20const\x20headerFields\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20const\x20headerValues\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20let\x20placeholderIndex\x20=\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(headerData))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerFields.push(`${key}\x20=\x20$${placeholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20headerValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20(updated_at,\x20updated_by)\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20placeholderIndex\x20=\x20this._appendUpdateAuditColumns(headerFields,\x20headerValues,\x20headerData,\x20eventContext,\x20placeholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20headerValues.push(primaryKeyValue);\x0a\x20\x20\x20\x20\x20\x20const\x20headerUpdateQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20UPDATE\x20${this.writeSource}\x0a\x20\x20\x20\x20\x20\x20\x20\x20SET\x20${headerFields.join(\x27,\x20\x27)}\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20${this.primaryKey}\x20=\x20$${placeholderIndex}\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Executing\x20header\x20UPDATE:\x27,\x20{\x20query:\x20headerUpdateQuery,\x20values:\x20headerValues\x20});\x0a\x20\x20\x20\x20\x20\x20const\x20headerResult\x20=\x20await\x20client.query(headerUpdateQuery,\x20headerValues);\x0a\x20\x20\x20\x20\x20\x20const\x20updatedHeader\x20=\x20headerResult.rows[0];\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Header\x20updated\x20successfully:\x20${this.primaryKey}=${primaryKeyValue}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Process\x20detail\x20items\x20with\x20insert/update/delete\x20pattern\x0a\x20\x20\x20\x20\x20\x20const\x20detailTableName\x20=\x20\x27'+_0x41754c+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20foreignKey\x20=\x20\x27'+_0x20fc9a+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20detailPrimaryKey\x20=\x20\x27'+_0x33d32d+'\x27;\x0a\x20\x20\x20\x20\x20\x20'+(_0x2f9348[_0x223730(0x1b5)](_0x432cd9[_0x223730(0x218)],0x0)?'const\x20generatedFields\x20=\x20'+JSON[_0x223730(0x18f)](_0x432cd9)+';':'')+_0x223730(0x182)+(_0x43186c?_0x2f9348['XMYxY']('\x0a'+_0x43186c,'\x0a'):'')+_0x223730(0x22d)+(_0x432cd9[_0x223730(0x218)]>0x0?'//\x20Skip\x20GENERATED\x20ALWAYS\x20columns\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(generatedFields.includes(key))\x20continue;':'')+_0x223730(0x124)+(_0x43186c?'\x0a'+_0x43186c+'\x0a':'')+_0x223730(0x2a5)+(_0x432cd9['length']>0x0?'//\x20Skip\x20GENERATED\x20ALWAYS\x20columns\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(generatedFields.includes(key))\x20continue;':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailFields.push(key);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailValues.push(value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholders.push(`$${detailPlaceholderIndex++}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Inject\x20audit\x20columns\x20ke\x20detail\x20INSERT\x20via\x20helper\x0a\x20\x20\x20\x20\x20\x20\x20\x20detailPlaceholderIndex\x20=\x20this._appendCreateAuditColumns(detailFields,\x20detailValues,\x20detailPlaceholders,\x20item,\x20eventContext,\x20detailPlaceholderIndex);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailInsertQuery\x20=\x20`\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20${detailTableName}\x20(${detailFields.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(${detailPlaceholders.join(\x27,\x20\x27)})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20\x20\x20\x20\x20`;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20detailResult\x20=\x20await\x20client.query(detailInsertQuery,\x20detailValues);\x0a\x20\x20\x20\x20\x20\x20\x20\x20insertedItems.push(detailResult.rows[0]);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Inserted\x20${insertedItems.length}\x20new\x20detail\x20item(s)`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Get\x20all\x20current\x20detail\x20items\x0a\x20\x20\x20\x20\x20\x20const\x20allItemsQuery\x20=\x20`SELECT\x20*\x20FROM\x20${detailTableName}\x20WHERE\x20${foreignKey}\x20=\x20$1\x20ORDER\x20BY\x20line_number`;\x0a\x20\x20\x20\x20\x20\x20const\x20allItemsResult\x20=\x20await\x20client.query(allItemsQuery,\x20[primaryKeyValue]);\x0a\x20\x20\x20\x20\x20\x20const\x20allItems\x20=\x20allItemsResult.rows;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Recalculate\x20header\x20totals\x20from\x20final\x20items\x0a\x20\x20\x20\x20\x20\x20'+(_0x43d186?_0x223730(0x2a0)+JSON['stringify'](_0x43d186)+_0x223730(0x1d5)+(_0x2d98da?'if\x20(calculations.total_amount)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20totalAmount\x20=\x20allItems.reduce((sum,\x20item)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20qty\x20=\x20Number(item.'+_0x2d98da+_0x223730(0x143)+_0x227170+_0x223730(0x1b3):'//\x20WARNING:\x20headerCalculations.total_amount\x20skipped\x20—\x20no\x20qty\x20field\x20configured')+_0x223730(0x137):'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20---\x20Hook:\x20onAfterCompositeUpdate\x20---\x0a\x20\x20\x20\x20\x20\x20if\x20(eventContext\x20&&\x20eventContext.componentEngine)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20{\x20componentEngine:\x20ce,\x20ContextBuilder:\x20CB\x20}\x20=\x20eventContext;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20afterCtx\x20=\x20CB.buildCompositeUpdateAfterContext(headerData,\x20oldData,\x20updatedHeader,\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20inserted:\x20insertedItems,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updated:\x20updatedItems,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20deleted:\x20deletedItems\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x3d05f6[_0x223730(0x13f)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20detailTable:\x20\x27'+_0x41754c+_0x223730(0x176)+_0x20fc9a+_0x223730(0x158);}if(_0x1257ae['readComposite']){const _0x5e6bdf=_0x3d05f6[_0x223730(0x231)]?.[_0x223730(0x254)]?.[_0x223730(0x1ed)]||null;let _0x1028fa;_0x5e6bdf?_0x1028fa='const\x20detailQuery\x20=\x20`'+_0x5e6bdf+'`;':_0x1028fa='const\x20detailQuery\x20=\x20`SELECT\x20*\x20FROM\x20'+_0x41754c+_0x223730(0x177)+_0x20fc9a+_0x223730(0x2a4),_0x35b7ec+=_0x223730(0x164)+_0x41754c[_0x223730(0x274)]('.')[_0x223730(0x206)]()+_0x223730(0x19b)+_0x1028fa+_0x223730(0x22c);}return _0x35b7ec;}function generateDeleteMethod(_0x460e37){const _0x4ad57f=a0_0x4955,_0x48ea76=_0x460e37['action']||{},_0x5e84bf=_0x460e37[_0x4ad57f(0x231)]&&_0x460e37[_0x4ad57f(0x231)]['enabled'],_0x29eee1=_0x460e37['masterDetail']?.[_0x4ad57f(0x25e)]||![];if(!_0x48ea76[_0x4ad57f(0x252)])return'';const _0x41638d=_0x460e37[_0x4ad57f(0x24e)]||'id';if(!_0x5e84bf)return'';const _0xf03fe9=_0x460e37['masterDetail']['detailTable'],_0x2d4785=_0x460e37[_0x4ad57f(0x231)][_0x4ad57f(0x1d8)];let _0x1e2b19='\x0a';return _0x1e2b19+=_0x4ad57f(0x298)+(_0x29eee1?_0x4ad57f(0x263)+_0xf03fe9+_0x4ad57f(0x202)+_0x41638d+'\x20FROM\x20${this.writeSource}\x20WHERE\x20${whereClause}`;\x0a\x20\x20\x20\x20\x20\x20const\x20headerResult\x20=\x20await\x20client.query(headerQuery,\x20params);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(headerResult.rows.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(\x27Record\x20not\x20found\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20headerPrimaryKeyValue\x20=\x20headerResult.rows[0][\x27'+_0x41638d+'\x27];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20DELETE\x20child\x20records\x20menggunakan\x20foreignKey\x0a\x20\x20\x20\x20\x20\x20const\x20deleteChildQuery\x20=\x20`DELETE\x20FROM\x20'+_0xf03fe9+_0x4ad57f(0x177)+_0x2d4785+_0x4ad57f(0x11f)+_0xf03fe9+_0x4ad57f(0x1fe):_0x4ad57f(0x22f))+_0x4ad57f(0x120)+(_0x29eee1?_0x4ad57f(0x197):'')+'\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20await\x20client.query(\x27ROLLBACK\x27);\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20deleteData:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x20finally\x20{\x0a\x20\x20\x20\x20\x20\x20client.release();\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a',_0x1e2b19;}function createPostgresModelTemplate(_0x12c18e,_0x5debf3,_0x49d1ec){const _0x1dd900=a0_0x4955,_0x3223af={'wAzTL':function(_0x248125,_0x5ef977){return _0x248125(_0x5ef977);},'ihCZu':function(_0x316896,_0x2cc856){return _0x316896(_0x2cc856);},'JXIhU':function(_0x3b09c0,_0x146b73,_0x5507fb){return _0x3b09c0(_0x146b73,_0x5507fb);},'VAROL':function(_0x370807,_0x1cb9b5,_0x9384ec){return _0x370807(_0x1cb9b5,_0x9384ec);},'htpNV':_0x1dd900(0x146)};assertNoFileReferenceLeftover(_0x49d1ec);const _0x59586a=FileUtils[_0x1dd900(0x13e)](_0x5debf3),_0x40d3ac=new Date()[_0x1dd900(0x13c)]()[_0x1dd900(0x228)]('T','\x20')[_0x1dd900(0x228)](/\.\d{3}Z$/,''),_0x5aa221=_0x3223af['wAzTL'](buildValidFieldsString,_0x49d1ec),_0x55e445=buildSearchColumnsCode(_0x49d1ec),_0x2cc3f2=_0x3223af[_0x1dd900(0x20a)](buildFiltersCode,_0x49d1ec),_0xf97af2=buildLookupOverrideCode(_0x5debf3,_0x49d1ec),_0xd9a687=buildAdvancedQuerySection(_0x49d1ec),_0x4ed5fb=_0x3223af[_0x1dd900(0x20a)](buildFieldMappingCode,_0x49d1ec),_0x46da1d=_0x3223af['JXIhU'](buildAuditColumnsSection,_0x49d1ec,_0x1dd900(0x20c)),_0xfef8d0=_0x49d1ec[_0x1dd900(0x285)]&&_0x49d1ec[_0x1dd900(0x285)]['read']?_0x3223af[_0x1dd900(0x291)](buildDefaultScopeSQL,_0x49d1ec[_0x1dd900(0x285)][_0x1dd900(0x292)],''):'',_0x18a068=_0x49d1ec['viewName']||_0x49d1ec[_0x1dd900(0x13f)],_0x2da513=_0x49d1ec[_0x1dd900(0x13f)];return _0x1dd900(0x1db)+_0x59586a+_0x1dd900(0x15a)+_0x40d3ac+_0x1dd900(0x273)+_0x5debf3+_0x1dd900(0x12b)+_0x49d1ec[_0x1dd900(0x13f)]+(_0x49d1ec[_0x1dd900(0x188)]?'\x0a\x20*\x20View:\x20'+_0x49d1ec['viewName']:'')+'\x0a\x20*\x20Fields:\x20'+(_0x49d1ec['fieldName']?_0x49d1ec['fieldName']['length']:0x0)+'\x20fields\x0a\x20*\x20Database:\x20PostgreSQL\x0a\x20*/\x0aclass\x20'+_0x59586a+_0x1dd900(0x29a)+_0x5debf3+_0x1dd900(0x1d6)+_0x5aa221+'\x0a\x20\x20\x20\x20];\x0a\x0a\x20\x20\x20\x20//\x20Definisikan\x20datatablesWhere\x20sesuai\x20payload\x0a\x20\x20\x20\x20const\x20datatablesWhere\x20=\x20'+(_0x49d1ec['datatablesWhere']?JSON[_0x1dd900(0x18f)](_0x49d1ec['datatablesWhere']):_0x1dd900(0x24f))+_0x1dd900(0x130)+_0x49d1ec[_0x1dd900(0x13f)]+_0x1dd900(0x12d)+(_0x49d1ec['primaryKey']||_0x49d1ec['fieldName']&&_0x49d1ec['fieldName'][0x0]||'id')+'\x27;\x0a\x0a\x20\x20\x20\x20//\x20Setup\x20viewName\x20untuk\x20operasi\x20read\x20jika\x20berbeda\x20dari\x20tableName\x0a\x20\x20\x20\x20this.viewName\x20=\x20\x27'+_0x18a068+'\x27;\x0a\x20\x20\x20\x20this.readSource\x20=\x20\x27'+_0x18a068+_0x1dd900(0x178)+_0x2da513+'\x27;\x20//\x20Source\x20untuk\x20operasi\x20write\x20(add,\x20update,\x20delete)\x0a'+_0x46da1d+'\x0a\x20\x20\x20\x20//\x20Flag\x20untuk\x20self-documenting\x20API\x20(endpoint\x20/info)\x0a\x20\x20\x20\x20this.hasViewQuery\x20=\x20'+!!_0x49d1ec['viewQuery']+_0x1dd900(0x29b)+!!_0x49d1ec['exportQuery']+';\x0a\x0a\x20\x20\x20\x20//\x20Load\x20advanced\x20query\x20templates\x0a\x20\x20\x20\x20this.advancedQueryTemplates\x20=\x20this.loadAdvancedQueryTemplates();\x0a\x20\x20\x20\x20'+(_0x49d1ec[_0x1dd900(0x1fd)]&&Object['keys'](_0x49d1ec[_0x1dd900(0x1fd)])['length']>0x0?'\x0a\x20\x20\x20\x20//\x20DateTime\x20fields\x20configuration\x0a\x20\x20\x20\x20this.dateTimeFields\x20=\x20'+JSON[_0x1dd900(0x18f)](_0x49d1ec['dateTimeFields'],null,0x6)+_0x1dd900(0x277):'')+(_0x49d1ec[_0x1dd900(0x19a)]&&_0x49d1ec[_0x1dd900(0x19a)]['fields']?_0x1dd900(0x237)+JSON['stringify'](Object['keys'](_0x49d1ec['uploadConfig'][_0x1dd900(0x19f)]))+_0x1dd900(0x277):'')+'\x0a'+_0x3223af['wAzTL'](_generateValidationConfig,_0x49d1ec[_0x1dd900(0x1d7)])+_0x1dd900(0x1e3)+_0x5debf3+'\x27,\x0a\x20\x20\x20\x20\x20\x20moduleName:\x20\x27'+_0x12c18e+'\x27,\x0a\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x49d1ec['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20viewName:\x20\x27'+_0x18a068+_0x1dd900(0x24a)+(_0x49d1ec[_0x1dd900(0x126)]?_0x49d1ec['fieldName'][_0x1dd900(0x218)]:0x0)+',\x0a\x20\x20\x20\x20\x20\x20databaseType:\x20\x27postgres\x27,\x0a\x20\x20\x20\x20\x20\x20generated:\x20\x27'+_0x40d3ac+'\x27,\x0a\x20\x20\x20\x20\x20\x20features:\x20'+JSON['stringify'](_0x49d1ec[_0x1dd900(0x14d)]?.['features']||[])+_0x1dd900(0x24c)+_0xd9a687+_0x1dd900(0x1c7)+_0x5debf3+'\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Query\x20options\x0a\x20\x20\x20*\x20@returns\x20{string}\x20SQL\x20query\x20dasar\x20untuk\x20'+_0x5debf3+'\x0a\x20\x20\x20*/\x0a\x20\x20getListQuery(options\x20=\x20{})\x20{\x0a\x20\x20\x20\x20//\x20Load\x20query\x20dasar\x20dengan\x20placeholder\x20replacement\x0a\x20\x20\x20\x20'+_0x3223af['JXIhU'](buildQueryLoadingCode,_0x49d1ec['datatablesQuery'],_0x3223af['htpNV'])+'\x0a\x0a\x20\x20\x20\x20//\x20Replace\x20any\x20remaining\x20placeholders\x20-\x20gunakan\x20readSource\x20untuk\x20operasi\x20read\x0a\x20\x20\x20\x20baseQuery\x20=\x20baseQuery.replace(/${tableName}/g,\x20this.readSource);\x0a\x20\x20\x20\x20baseQuery\x20=\x20baseQuery.replace(/${this.table}/g,\x20this.readSource);\x0a\x0a\x20\x20\x20\x20return\x20baseQuery;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getReadQuery\x20untuk\x20endpoint\x20/read\x0a\x20\x20\x20*\x20Prioritas:\x20viewName\x20->\x20viewQuery\x20->\x20tableName\x20(SELECT\x20*\x20FROM\x20readSource)\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Query\x20options\x0a\x20\x20\x20*\x20@returns\x20{string}\x20SQL\x20query\x20dasar\x20untuk\x20/read\x0a\x20\x20\x20*/\x0a\x20\x20getReadQuery(options\x20=\x20{})\x20{\x0a\x20\x20\x20\x20//\x20Priority\x201:\x20viewName\x20(real\x20database\x20view)\x0a\x20\x20\x20\x20if\x20(this.viewName\x20&&\x20this.viewName\x20!==\x20this.table)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.viewName;\x0a\x20\x20\x20\x20}\x0a'+(_0x49d1ec['viewQuery']?'\x20\x20\x20\x20//\x20Priority\x202:\x20viewQuery\x20(virtual\x20view\x20dari\x20payload)\x0a\x20\x20\x20\x20'+buildQueryLoadingCode(_0x49d1ec[_0x1dd900(0x1ea)],'viewQuery')+_0x1dd900(0x1bc):_0x1dd900(0x16a))+'\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20getDatatables\x20untuk\x20mendukung\x20filter\x20object\x20format\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Parameter\x20dari\x20request\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Hasil\x20query\x20dengan\x20format\x20DataTables\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getDatatables(options)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20cache\x20first\x20(if\x20enabled)\x0a\x20\x20\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedDatatables(options);\x0a\x20\x20\x20\x20\x20\x20if\x20(cachedResult)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20cachedResult;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchValue\x20=\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchBy\x20=\x20\x27all\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20perPage\x20=\x2010,\x0a\x20\x20\x20\x20\x20\x20\x20\x20start\x20=\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20sort_columns\x20=\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20filters\x20=\x20{},\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20where\x20=\x20null\x0a\x20\x20\x20\x20\x20\x20}\x20=\x20options;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Resolve\x20sort\x20columns\x20dengan\x20prioritas:\x20sort_columns\x20>\x20order[0][column]\x20>\x20default\x0a\x20\x20\x20\x20\x20\x20let\x20resolvedSortColumns\x20=\x20sort_columns;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20cek\x20format\x20DataTables\x20bawaan\x20(order[0][column]\x20dan\x20order[0][dir])\x0a\x20\x20\x20\x20\x20\x20if\x20((!resolvedSortColumns\x20||\x20resolvedSortColumns.length\x20===\x200)\x20&&\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options[\x27order[0][column]\x27]\x20!==\x20undefined\x20&&\x20options[\x27order[0][dir]\x27]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20columnIndex\x20=\x20parseInt(options[\x27order[0][column]\x27]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20direction\x20=\x20options[\x27order[0][dir]\x27];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(columnIndex\x20>=\x200\x20&&\x20columnIndex\x20<\x20this.validFields.length)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resolvedSortColumns\x20=\x20[{\x20column:\x20this.validFields[columnIndex],\x20direction:\x20direction.toUpperCase()\x20}];\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Mendapatkan\x20query\x20dasar\x0a\x20\x20\x20\x20\x20\x20const\x20baseQuery\x20=\x20this.getListQuery(options);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Membuat\x20where\x20clause\x20berdasarkan\x20search\x20dan\x20filter\x0a\x20\x20\x20\x20\x20\x20let\x20whereClause\x20=\x20this.buildWhereClause(searchValue,\x20searchBy);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x203.\x20Tambahkan\x20filter\x20object\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20const\x20filterClause\x20=\x20this.buildObjectFilterClause(filters);\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(filterClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20+=\x20\x27\x20AND\x20\x27\x20+\x20filterClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20=\x20\x27WHERE\x20\x27\x20+\x20filterClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x204.\x20Proses\x20parameter\x20where\x20dengan\x20format\x20advanced\x20conditions\x0a\x20\x20\x20\x20\x20\x20let\x20whereParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20if\x20(where\x20&&\x20(Array.isArray(where)\x20||\x20(where.conditions\x20&&\x20Array.isArray(where.conditions))))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20whereResult\x20=\x20this.buildComplexWhereClause(where,\x20params,\x20paramIndex);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereResult.sql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20+=\x20\x27\x20AND\x20(\x27\x20+\x20whereResult.sql\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20=\x20\x27WHERE\x20\x27\x20+\x20whereResult.sql;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereParams\x20=\x20whereResult.params;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20if\x20query\x20needs\x20subquery\x20wrapping\x20(CTE\x20or\x20JOIN)\x0a\x20\x20\x20\x20\x20\x20const\x20isCteQuery\x20=\x20baseQuery.toLowerCase().trim().startsWith(\x27with\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20hasJoin\x20=\x20/\x5cb(inner|left|right|cross|full)\x5cs+join\x5cb/i.test(baseQuery)\x20||\x20/\x5cbjoin\x5cb/i.test(baseQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20needsSubquery\x20=\x20isCteQuery\x20||\x20hasJoin;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x204.\x20Menghitung\x20total\x20data\x20keseluruhan\x20-\x20gunakan\x20readSource\x20untuk\x20read\x20operations\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalQuery\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x27\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalResult\x20=\x20await\x20db.executeQuery(countTotalQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20totalRecords\x20=\x20countTotalResult\x20&&\x20countTotalResult[0]\x20?\x20parseInt(countTotalResult[0].total)\x20:\x200;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x205.\x20Menghitung\x20jumlah\x20data\x20terfilter\x20-\x20gunakan\x20readSource\x20untuk\x20read\x20operations\x0a\x20\x20\x20\x20\x20\x20let\x20filteredRecords\x20=\x20totalRecords;\x0a\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Always\x20wrap\x20CTE/JOIN\x20query\x20for\x20counting\x20with\x20filters\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredQuery\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20whereClause\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource\x20+\x20\x27\x20\x27\x20+\x20whereClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Count\x20Filtered\x20Query:\x27,\x20countFilteredQuery);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Count\x20Filtered\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredResult\x20=\x20await\x20db.executeQuery(countFilteredQuery,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20\x20\x20filteredRecords\x20=\x20countFilteredResult\x20&&\x20countFilteredResult[0]\x20?\x20parseInt(countFilteredResult[0].total)\x20:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x206.\x20Membuat\x20order\x20clause\x20menggunakan\x20buildSortColumnsClause\x0a\x20\x20\x20\x20\x20\x20const\x20orderClause\x20=\x20this.buildSortColumnsClause(resolvedSortColumns);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x207.\x20Menambahkan\x20pagination\x0a\x20\x20\x20\x20\x20\x20const\x20limitClause\x20=\x20`\x20LIMIT\x20${perPage}\x20OFFSET\x20${start}`;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x208.\x20Menjalankan\x20query\x20final\x20-\x20wrap\x20CTE/JOIN\x20query\x20to\x20avoid\x20column\x20ambiguity\x0a\x20\x20\x20\x20\x20\x20const\x20query\x20=\x20needsSubquery\x20?\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27SELECT\x20*\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20(whereClause\x20||\x20\x27\x27)\x20+\x20orderClause\x20+\x20limitClause\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20+\x20\x22\x20\x22\x20+\x20whereClause\x20+\x20orderClause\x20+\x20limitClause;\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Final\x20Query:\x27,\x20query);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Query\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20whereParams);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20draw:\x20parseInt(options.draw\x20||\x20\x271\x27,\x2010),\x0a\x20\x20\x20\x20\x20\x20\x20\x20recordsTotal:\x20totalRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20recordsFiltered:\x20filteredRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20data\x20||\x20[]\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache\x20the\x20result\x20(if\x20enabled)\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedDatatables(options,\x20result);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getDatatables:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Get\x20data\x20list\x20dengan\x20manual\x20pagination\x20untuk\x20endpoint\x20/list\x0a\x20\x20\x20*\x20@param\x20{Object}\x20options\x20-\x20Parameter\x20dari\x20request\x20list\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Hasil\x20query\x20dengan\x20format\x20list\x20pagination\x0a\x20\x20\x20*/\x0a\x20\x20async\x20getList(options)\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20page\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20perPage\x20=\x2010,\x0a\x20\x20\x20\x20\x20\x20\x20\x20offset\x20=\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchValue\x20=\x20\x27\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20searchBy\x20=\x20\x27code\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20sort_columns\x20=\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20where\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20select\x20=\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20limit\x20=\x201000\x0a\x20\x20\x20\x20\x20\x20}\x20=\x20options;\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20paginate\x20=\x20page\x20!==\x20null;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache:\x20Check\x20if\x20data\x20exists\x20in\x20cache\x0a\x20\x20\x20\x20\x20\x20const\x20scInfo\x20=\x20sort_columns\x20&&\x20sort_columns.length\x20>\x200\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20sort_columns.map(s\x20=>\x20`${s.column}:${s.direction}`).join(\x27,\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27default\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20cacheInfo\x20=\x20`page:${page},\x20perPage:${perPage},\x20sort:${scInfo},\x20search:${searchValue\x20||\x20\x27none\x27}${where\x20?\x20\x27,\x20where:yes\x27\x20:\x20\x27\x27}`;\x0a\x20\x20\x20\x20\x20\x20const\x20cachedResult\x20=\x20await\x20this.getCachedList(options);\x0a\x20\x20\x20\x20\x20\x20if\x20(cachedResult)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20HIT\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20cachedResult;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20MISS\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201.\x20Mendapatkan\x20query\x20dasar\x0a\x20\x20\x20\x20\x20\x20let\x20baseQuery;\x0a\x20\x20\x20\x20\x20\x20if\x20(select\x20&&\x20Array.isArray(select)\x20&&\x20select.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20selectedValidColumns\x20=\x20select.filter(col\x20=>\x20this.validFields.includes(col));\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(selectedValidColumns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20\x27SELECT\x20\x27\x20+\x20selectedValidColumns.join(\x27,\x20\x27)\x20+\x20\x27\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20\x27SELECT\x20*\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20baseQuery\x20=\x20this.getReadQuery(options);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x201b.\x20Deteksi\x20apakah\x20query\x20mengandung\x20JOIN\x20atau\x20CTE\x20(perlu\x20subquery\x20wrapping)\x0a\x20\x20\x20\x20\x20\x20const\x20isCteQuery\x20=\x20baseQuery.toLowerCase().trim().startsWith(\x27with\x27);\x0a\x20\x20\x20\x20\x20\x20const\x20hasJoin\x20=\x20/\x5cb(inner|left|right|cross|full)\x5cs+join\x5cb/i.test(baseQuery)\x20||\x20/\x5cbjoin\x5cb/i.test(baseQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20needsSubquery\x20=\x20isCteQuery\x20||\x20hasJoin;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x202.\x20Build\x20WHERE\x20clause\x20untuk\x20search\x0a\x20\x20\x20\x20\x20\x20let\x20whereClause\x20=\x20\x27'+(_0xfef8d0?'WHERE\x20'+_0xfef8d0:'')+_0x1dd900(0x1c1)+(_0xfef8d0?_0x1dd900(0x172):'whereClause\x20=\x20`WHERE\x20UPPER(${searchBy})\x20LIKE\x20UPPER(\x27${likeValue}\x27)`;')+'\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x203.\x20Proses\x20parameter\x20where\x20dengan\x20format\x20advanced\x20conditions\x0a\x20\x20\x20\x20\x20\x20let\x20whereParams\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20if\x20(where\x20&&\x20(Array.isArray(where)\x20||\x20(where.conditions\x20&&\x20Array.isArray(where.conditions))))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20params\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20paramIndex\x20=\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20whereResult\x20=\x20this.buildComplexWhereClause(where,\x20params,\x20paramIndex);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereResult.sql)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20+=\x20\x27\x20AND\x20(\x27\x20+\x20whereResult.sql\x20+\x20\x27)\x27;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereClause\x20=\x20\x27WHERE\x20\x27\x20+\x20whereResult.sql;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20whereParams\x20=\x20whereResult.params;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(e)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20error\x20=\x20new\x20Error(\x27Invalid\x20where\x20conditions:\x20\x27\x20+\x20e.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error.statusCode\x20=\x20400;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x204.\x20Menghitung\x20total\x20data\x20keseluruhan\x20(tanpa\x20filter)\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalQuery\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource;\x0a\x20\x20\x20\x20\x20\x20const\x20countTotalResult\x20=\x20await\x20db.executeQuery(countTotalQuery);\x0a\x20\x20\x20\x20\x20\x20const\x20totalRecords\x20=\x20countTotalResult\x20&&\x20countTotalResult[0]\x20?\x20parseInt(countTotalResult[0].total)\x20:\x200;\x0a\x0a\x20\x20\x20\x20\x20\x20//\x205.\x20Menghitung\x20jumlah\x20data\x20terfilter\x20(jika\x20ada\x20where/search)\x0a\x20\x20\x20\x20\x20\x20let\x20filteredRecords\x20=\x20totalRecords;\x0a\x20\x20\x20\x20\x20\x20if\x20(whereClause)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredQuery\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20whereClause\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27SELECT\x20COUNT(*)\x20as\x20total\x20FROM\x20\x27\x20+\x20this.readSource\x20+\x20\x27\x20\x27\x20+\x20whereClause;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20countFilteredResult\x20=\x20await\x20db.executeQuery(countFilteredQuery,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x20\x20\x20\x20\x20\x20\x20\x20filteredRecords\x20=\x20countFilteredResult\x20&&\x20countFilteredResult[0]\x20?\x20parseInt(countFilteredResult[0].total)\x20:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x206.\x20Build\x20ORDER\x20BY\x20clause\x0a\x20\x20\x20\x20\x20\x20const\x20orderClause\x20=\x20this.buildSortColumnsClause(sort_columns);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x207.\x20Build\x20LIMIT\x20dan\x20OFFSET\x20clause\x20(kondisional\x20berdasarkan\x20mode)\x0a\x20\x20\x20\x20\x20\x20let\x20limitClause;\x0a\x20\x20\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20limitClause\x20=\x20`\x20LIMIT\x20${perPage}\x20OFFSET\x20${offset}`;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20limitClause\x20=\x20`\x20LIMIT\x20${limit}`;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x208.\x20Menjalankan\x20query\x20final\x20untuk\x20data\x20(subquery\x20wrapping\x20untuk\x20JOIN/CTE)\x0a\x20\x20\x20\x20\x20\x20const\x20query\x20=\x20needsSubquery\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27SELECT\x20*\x20FROM\x20(\x27\x20+\x20baseQuery\x20+\x20\x27)\x20base_query\x20\x27\x20+\x20whereClause\x20+\x20orderClause\x20+\x20limitClause\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20baseQuery\x20+\x20\x27\x20\x27\x20+\x20whereClause\x20+\x20orderClause\x20+\x20limitClause;\x0a\x20\x20\x20\x20\x20\x20console.log(`List\x20SQL\x20Query:\x20${query}`);\x0a\x20\x20\x20\x20\x20\x20console.log(\x27List\x20Query\x20Parameters:\x27,\x20whereParams);\x0a\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20db.executeQuery(query,\x20whereParams.length\x20>\x200\x20?\x20whereParams\x20:\x20undefined);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20data\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20totalRecords:\x20filteredRecords,\x0a\x20\x20\x20\x20\x20\x20\x20\x20totalUnfiltered:\x20totalRecords\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.page\x20=\x20page;\x0a\x20\x20\x20\x20\x20\x20\x20\x20result.perPage\x20=\x20perPage;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Cache:\x20Store\x20result\x20in\x20cache\x0a\x20\x20\x20\x20\x20\x20await\x20this.setCachedList(options,\x20result);\x0a\x20\x20\x20\x20\x20\x20console.log(`[Cache]\x20SET\x20for\x20list\x20-\x20${cacheInfo}`);\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20in\x20getList:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Membangun\x20WHERE\x20clause\x20dari\x20filter\x20object\x0a\x20\x20\x20*\x20@param\x20{Object}\x20filters\x20-\x20Object\x20filter\x20dengan\x20format\x20{column:\x20value}\x0a\x20\x20\x20*\x20@returns\x20{string}\x20WHERE\x20clause\x20SQL\x20atau\x20empty\x20string\x0a\x20\x20\x20*/\x0a\x20\x20buildObjectFilterClause(filters)\x20{\x0a\x20\x20\x20\x20if\x20(!filters\x20||\x20typeof\x20filters\x20!==\x20\x27object\x27\x20||\x20Object.keys(filters).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20\x27\x27;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20conditions\x20=\x20[];\x0a\x0a\x20\x20\x20\x20for\x20(const\x20[column,\x20value]\x20of\x20Object.entries(filters))\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20kolom\x20harus\x20ada\x20dalam\x20validFields\x0a\x20\x20\x20\x20\x20\x20if\x20(this.validFields.includes(column)\x20&&\x20value\x20!==\x20null\x20&&\x20value\x20!==\x20undefined\x20&&\x20value\x20!==\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Escape\x20value\x20untuk\x20mencegah\x20SQL\x20injection\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20escapedValue\x20=\x20value.toString().replace(/\x27/g,\x20\x22\x27\x27\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20conditions.push(`${column}\x20=\x20\x27${escapedValue}\x27`);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20conditions.length\x20>\x200\x20?\x20conditions.join(\x27\x20AND\x20\x27)\x20:\x20\x27\x27;\x0a\x20\x20}\x0a\x0a'+_0x55e445+'\x0a\x0a'+_0x2cc3f2+'\x0a\x0a'+_0xf97af2+'\x0a\x0a'+_0x4ed5fb+'\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Override\x20formatResponseData\x20untuk\x20'+_0x5debf3+_0x1dd900(0x240)+_0x5debf3+'\x0a\x20\x20\x20*/\x0a\x20\x20formatResponseData(data)\x20{\x0a\x20\x20\x20\x20//\x20Gunakan\x20parent\x20method\x20yang\x20sudah\x20include\x20datetime\x20formatting\x0a\x20\x20\x20\x20return\x20super.formatResponseData(data);\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Execute\x20advanced\x20query\x20berdasarkan\x20nama\x0a\x20\x20\x20*\x20@param\x20{string}\x20queryName\x20-\x20Nama\x20query\x20dari\x20advancedQueryTemplates\x0a\x20\x20\x20*\x20@param\x20{Object}\x20params\x20-\x20Parameter\x20untuk\x20query\x0a\x20\x20\x20*\x20@returns\x20{Array}\x20Hasil\x20query\x0a\x20\x20\x20*/\x0a\x20\x20async\x20executeAdvancedQuery(queryName,\x20params\x20=\x20{})\x20{\x0a\x20\x20\x20\x20if\x20(!this.advancedQueryTemplates[queryName])\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20new\x20Error(`Advanced\x20query\x20\x27${queryName}\x27\x20not\x20found.\x20Available\x20queries:\x20${Object.keys(this.advancedQueryTemplates).join(\x27,\x20\x27)}`);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20let\x20query\x20=\x20this.advancedQueryTemplates[queryName];\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Replace\x20placeholders\x0a\x20\x20\x20\x20\x20\x20query\x20=\x20query.replace(/${tableName}/g,\x20this.table);\x0a\x20\x20\x20\x20\x20\x20query\x20=\x20query.replace(/${this.table}/g,\x20this.table);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Replace\x20parameter\x20placeholders\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20Object.entries(params))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20placeholder\x20=\x20new\x20RegExp(`\x5c$\x5c{params\x5c\x5c.${key}\x5c}`,\x20\x27g\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20query\x20=\x20query.replace(placeholder,\x20value);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Executing\x20advanced\x20query\x20\x27${queryName}\x27:\x20${query}`);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20result\x20=\x20await\x20db.executeQuery(query);\x0a\x20\x20\x20\x20\x20\x20return\x20result;\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Error\x20executing\x20advanced\x20query\x20\x27${queryName}\x27:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Validate\x20data\x20before\x20insert/update\x20operations\x0a\x20\x20\x20*\x20@param\x20{Object}\x20data\x20-\x20Data\x20yang\x20akan\x20divalidasi\x0a\x20\x20\x20*\x20@param\x20{string}\x20operation\x20-\x20Operasi\x20(insert/update)\x0a\x20\x20\x20*\x20@returns\x20{Object}\x20Validation\x20result\x0a\x20\x20\x20*/\x0a\x20\x20async\x20validateData(data,\x20operation\x20=\x20\x27insert\x27)\x20{\x0a\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20isValid:\x20true,\x0a\x20\x20\x20\x20\x20\x20errors:\x20[],\x0a\x20\x20\x20\x20\x20\x20warnings:\x20[],\x0a\x20\x20\x20\x20\x20\x20sanitizedData:\x20{}\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Check\x20if\x20we\x20have\x20fieldValidation\x20config\x0a\x20\x20\x20\x20\x20\x20const\x20hasFieldValidation\x20=\x20this.validationConfig\x20&&\x20Object.keys(this.validationConfig).length\x20>\x200;\x0a\x0a\x20\x20\x20\x20\x20\x20if\x20(hasFieldValidation)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Loop\x20semua\x20field\x20yang\x20ada\x20di\x20validationConfig\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20fieldName\x20in\x20this.validationConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20value\x20=\x20data[fieldName];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20config\x20=\x20this.validationConfig[fieldName];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20constraints\x20=\x20config.constraints\x20||\x20{};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Auto-generate\x20value\x20jika\x20autoGenerate\x20dan\x20nilai\x20kosong.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20String\x20dan\x20uuid\x20diperlakukan\x20sama:\x20UUID\x20v7\x20via\x20uuid\x20package\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20(konsisten\x20lintas\x20dialect;\x20cocok\x20dengan\x20konvensi\x20payload\x20category.json\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20yang\x20memakai\x20type:\x20\x22string\x22\x20dengan\x20constraint\x20autoGenerate\x20+\x20primaryKey).\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(operation\x20===\x20\x27insert\x27\x20&&\x20constraints.autoGenerate\x20&&\x20(!value\x20||\x20value\x20===\x20\x27\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(config.type\x20===\x20\x27uuid\x27\x20||\x20config.type\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20value\x20=\x20require(\x27uuid\x27).v7();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data[fieldName]\x20=\x20value;\x20//\x20Update\x20data\x20asli\x20juga\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(config.type\x20===\x20\x27timestamp\x27\x20||\x20config.type\x20===\x20\x27datetime\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20value\x20=\x20new\x20Date().toISOString();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data[fieldName]\x20=\x20value;\x20//\x20Update\x20data\x20asli\x20juga\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(config.type\x20===\x20\x27date\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20value\x20=\x20new\x20Date().toISOString().split(\x27T\x27)[0];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data[fieldName]\x20=\x20value;\x20//\x20Update\x20data\x20asli\x20juga\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Validate\x20per-field\x20dengan\x20constraints\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20fieldResult\x20=\x20await\x20this.validateFieldConstraints(fieldName,\x20value,\x20operation);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Accumulate\x20errors\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!fieldResult.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(...fieldResult.errors);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Accumulate\x20warnings\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(fieldResult.warnings\x20&&\x20fieldResult.warnings.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.warnings.push(...fieldResult.warnings);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Set\x20sanitized\x20value\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(fieldResult.sanitized\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[fieldName]\x20=\x20fieldResult.sanitized;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Validate\x20field\x20yang\x20tidak\x20ada\x20di\x20validationConfig\x20(backward\x20compatibility)\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20this.validFields)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!this.validationConfig[field]\x20&&\x20data[field]\x20!==\x20undefined)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Fallback\x20ke\x20generic\x20sanitization\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20this.sanitizeFieldValue(field,\x20data[field]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Cross-field\x20validation\x20(contoh:\x20before/after\x20date)\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(result.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20crossFieldResult\x20=\x20await\x20this._validateCrossFieldConstraints(result.sanitizedData,\x20operation);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!crossFieldResult.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(...crossFieldResult.errors);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20Tidak\x20ada\x20fieldValidation\x20-\x20gunakan\x20generic\x20validation\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20this.validFields)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20value\x20=\x20data[field];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Required\x20field\x20validation\x20untuk\x20insert\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(operation\x20===\x20\x27insert\x27\x20&&\x20(field\x20===\x20\x27id\x27\x20||\x20field\x20===\x20\x27name\x27\x20||\x20field\x20===\x20\x27nama\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20===\x20undefined\x20||\x20value\x20===\x20null\x20||\x20value\x20===\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(field\x20!==\x20\x27id\x27)\x20{\x20//\x20ID\x20bisa\x20auto-generated\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(`Field\x20\x27${field}\x27\x20is\x20required\x20for\x20${operation}\x20operation`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Sanitize\x20dan\x20validate\x20value\x20jika\x20ada\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20!==\x20undefined\x20&&\x20value\x20!==\x20null)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.sanitizedData[field]\x20=\x20this.sanitizeFieldValue(field,\x20value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Generic\x20email\x20validation\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(data.email\x20&&\x20!/^[^\x5cs@]+@[^\x5cs@]+\x5c.[^\x5cs@]+$/.test(data.email))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.errors.push(\x27Invalid\x20email\x20format\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20result.errors.push(`Validation\x20error:\x20${error.message}`);\x0a\x20\x20\x20\x20\x20\x20result.isValid\x20=\x20false;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Sanitize\x20field\x20value\x20berdasarkan\x20tipe\x20field\x20(generic\x20fallback)\x0a\x20\x20\x20*\x20@param\x20{string}\x20fieldName\x20-\x20Nama\x20field\x0a\x20\x20\x20*\x20@param\x20{*}\x20value\x20-\x20Nilai\x20field\x0a\x20\x20\x20*\x20@returns\x20{*}\x20Sanitized\x20value\x0a\x20\x20\x20*/\x0a\x20\x20sanitizeFieldValue(fieldName,\x20value)\x20{\x0a\x20\x20\x20\x20if\x20(typeof\x20value\x20===\x20\x27string\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Trim\x20whitespace\x0a\x20\x20\x20\x20\x20\x20value\x20=\x20value.trim();\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Escape\x20special\x20characters\x20untuk\x20mencegah\x20injection\x0a\x20\x20\x20\x20\x20\x20value\x20=\x20value.replace(/[<>]/g,\x20\x27\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Truncate\x20jika\x20terlalu\x20panjang\x0a\x20\x20\x20\x20\x20\x20if\x20(value.length\x20>\x20255)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20value\x20=\x20value.substring(0,\x20255);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20value;\x0a\x20\x20}\x0a'+_generateValidateFieldConstraints()+_0x1dd900(0x196)+_0x3223af['wAzTL'](generateCompositeMethods,_0x49d1ec)+generateDeleteMethod(_0x49d1ec)+'\x0a}\x0a\x0a//\x20Export\x20singleton\x20instance\x0amodule.exports\x20=\x20new\x20'+_0x59586a+'Model();';}function getEnabledActions(_0x567f82){const _0x5f15ad=a0_0x4955,_0x5616d3={'EzsqA':function(_0x205729,_0x346b47){return _0x205729!==_0x346b47;},'EqxZC':_0x5f15ad(0x211)};if(!_0x567f82['action']||_0x5616d3[_0x5f15ad(0x2a7)](typeof _0x567f82[_0x5f15ad(0x153)],_0x5616d3[_0x5f15ad(0x234)]))return[];return Object[_0x5f15ad(0x24d)](_0x567f82[_0x5f15ad(0x153)])[_0x5f15ad(0x296)](([,_0xef4f58])=>_0xef4f58)[_0x5f15ad(0x148)](([_0x20a459])=>_0x20a459);}function buildEndpointFunctions(_0x51b3bb,_0x19f52a,_0x258f2d,_0x45c22f,_0x5b7fe6,_0x235f8b=null,_0x3105b7=![]){const _0x157bd5=a0_0x4955,_0x2523de={'nIdzb':function(_0x15072f,_0x30270a){return _0x15072f(_0x30270a);},'Dgtez':function(_0x3ada9c,_0x2e0434,_0x4791b3,_0xda6f,_0x3a1389){return _0x3ada9c(_0x2e0434,_0x4791b3,_0xda6f,_0x3a1389);},'ivvZx':function(_0x2418a1,_0x5479be,_0x48b0c2,_0x3b3e66,_0x1ef620,_0x280e7e){return _0x2418a1(_0x5479be,_0x48b0c2,_0x3b3e66,_0x1ef620,_0x280e7e);},'EZFuQ':function(_0x3919c2,_0x45b26c,_0x263d64,_0x5adff0,_0x4ce449){return _0x3919c2(_0x45b26c,_0x263d64,_0x5adff0,_0x4ce449);},'oZStQ':function(_0xc5f04,_0x5fcc3e,_0xbb16e6,_0x455b7f,_0x36a383,_0x510549,_0x4221be){return _0xc5f04(_0x5fcc3e,_0xbb16e6,_0x455b7f,_0x36a383,_0x510549,_0x4221be);}},_0x959fe2=_0x258f2d[_0x157bd5(0x153)]||{},_0x5d5264=_0x2523de['nIdzb'](getEnabledActions,_0x258f2d);let _0x3cec98='';if(!_0x235f8b){const _0x1a132e=FileUtils['toCamelCase'](_0x19f52a);_0x235f8b=_0x1a132e+'Model';}return _0x959fe2[_0x157bd5(0x1df)]&&(_0x3cec98+=_0x2523de[_0x157bd5(0x232)](generateDatatablesFunction,_0x51b3bb,_0x19f52a,_0x258f2d,_0x235f8b)),_0x959fe2[_0x157bd5(0x284)]&&(_0x3cec98+=generateCreateFunction(_0x51b3bb,_0x19f52a,_0x258f2d,_0x235f8b,_0x3105b7)),_0x959fe2['update']&&(_0x3cec98+=_0x2523de['ivvZx'](generateUpdateFunction,_0x51b3bb,_0x19f52a,_0x258f2d,_0x235f8b,_0x3105b7)),_0x959fe2[_0x157bd5(0x226)]&&(_0x3cec98+=_0x2523de[_0x157bd5(0x193)](generateAdjustFunction,_0x51b3bb,_0x19f52a,_0x258f2d,_0x235f8b)),_0x959fe2[_0x157bd5(0x262)]&&(_0x3cec98+=generateAggregateFunction(_0x51b3bb,_0x19f52a,_0x258f2d,_0x235f8b)),_0x959fe2[_0x157bd5(0x252)]&&(_0x3cec98+=generateDeleteFunction(_0x51b3bb,_0x19f52a,_0x258f2d,_0x235f8b,_0x3105b7)),_0x959fe2['first']&&(_0x3cec98+=_0x2523de['oZStQ'](generateFirstFunction,_0x51b3bb,_0x19f52a,_0x258f2d,_0x45c22f,_0x5b7fe6,_0x235f8b)),_0x959fe2[_0x157bd5(0x136)]&&(_0x3cec98+=generateLookupFunction(_0x51b3bb,_0x19f52a,_0x258f2d,_0x45c22f,_0x5b7fe6,_0x235f8b)),_0x959fe2[_0x157bd5(0x292)]&&(_0x3cec98+=generateReadFunction(_0x51b3bb,_0x19f52a,_0x258f2d,_0x235f8b)),_0x959fe2['createComposite']&&(_0x3cec98+=generateCreateCompositeFunction(_0x51b3bb,_0x19f52a,_0x258f2d,_0x235f8b)),_0x959fe2[_0x157bd5(0x16c)]&&(_0x3cec98+=_0x2523de['Dgtez'](generateUpdateCompositeFunction,_0x51b3bb,_0x19f52a,_0x258f2d,_0x235f8b)),_0x959fe2[_0x157bd5(0x242)]&&(_0x3cec98+=_0x2523de['EZFuQ'](generateReadCompositeFunction,_0x51b3bb,_0x19f52a,_0x258f2d,_0x235f8b)),_0x959fe2['workflow']&&(_0x3cec98+=generateWorkflowFunction(_0x51b3bb,_0x19f52a,_0x258f2d,_0x235f8b)),_0x5d5264[_0x157bd5(0x218)]===0x0&&(_0x3cec98+=_0x157bd5(0x184)),_0x3cec98;}function generateDatatablesFunction(_0x4df95c,_0x568c74,_0x3b2366,_0x90ee51=null){const _0x17f202=a0_0x4955;if(!_0x90ee51){const _0x2b46e6=FileUtils['toCamelCase'](_0x568c74);_0x90ee51=_0x2b46e6+'Model';}return _0x17f202(0x25f)+_0x4df95c+'/'+_0x568c74+_0x17f202(0x12a)+_0x568c74+_0x17f202(0x214)+_0x90ee51+_0x17f202(0x11b)+_0x568c74+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20options:\x20options,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.json(result);\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x568c74+'\x20datatables:\x27,\x20error);\x0a\x20\x20\x20\x20const\x20statusCode\x20=\x20error.statusCode\x20||\x20500;\x0a\x20\x20\x20\x20return\x20res.status(statusCode).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20statusCode\x20===\x20400\x20?\x20\x27Bad\x20Request\x27\x20:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20statusCode\x20===\x20400\x20?\x20error.message\x20:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x568c74+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateCreateFunction(_0x159a21,_0x388aec,_0x1d9ab3,_0x2312aa=null,_0x20ac4d=![]){const _0xc322ca=a0_0x4955;if(!_0x2312aa){const _0x38efae=FileUtils[_0xc322ca(0x159)](_0x388aec);_0x2312aa=_0x38efae+_0xc322ca(0x1ad);}const _0x20d4df=_0x20ac4d?_0xc322ca(0x17d)+_0x159a21+_0xc322ca(0x15d)+_0x388aec+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20topic:\x20kafkaConfig.topic\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20keyField:\x20kafkaConfig.keyField\x20||\x20\x27'+(_0x1d9ab3[_0xc322ca(0x24e)]||'id')+_0xc322ca(0x1e6)+_0x1d9ab3[_0xc322ca(0x13f)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20correlationId:\x20correlationId\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20).catch(err\x20=>\x20console.error(\x27[Kafka]\x20Async\x20publish\x20error:\x27,\x20err.message));\x0a\x20\x20\x20\x20}\x0a':'',_0x1110e6=_0x20ac4d?'\x0a\x20\x20\x20\x20//\x20Validasi\x20x-correlation-id\x20header\x20(MANDATORY\x20jika\x20Kafka\x20enabled)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27];\x0a\x20\x20\x20\x20if\x20(!correlationId)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20header\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27x-correlation-id\x20header\x20is\x20required\x20when\x20Kafka\x20publishing\x20is\x20enabled\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':_0xc322ca(0x23d);return _0xc322ca(0x25f)+_0x159a21+'/'+_0x388aec+_0xc322ca(0x26d)+_0x388aec+_0xc322ca(0x1c0)+_0x388aec+'/create:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20payload\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x1110e6+'\x0a\x20\x20\x20\x20//\x20Validasi\x20data\x20dengan\x20model\x20jika\x20tersedia\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x2312aa+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x2312aa+_0xc322ca(0x1a3)+_0x1d9ab3[_0xc322ca(0x13f)]+_0xc322ca(0x208)+_0x2312aa+_0xc322ca(0x155)+_0x2312aa+_0xc322ca(0x1c2)+_0x388aec+_0xc322ca(0x140)+(_0x1d9ab3['primaryKey']||'id')+_0xc322ca(0x264)+_0x20d4df+_0xc322ca(0x121)+_0x388aec+_0xc322ca(0x1a5)+_0x388aec+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20specific\x20error\x20types\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723505\x27)\x20{\x20//\x20PostgreSQL\x20unique\x20violation\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Duplicate\x20entry\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27A\x20record\x20with\x20this\x20value\x20already\x20exists\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x2723503\x27)\x20{\x20//\x20PostgreSQL\x20foreign\x20key\x20violation\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Foreign\x20key\x20constraint\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Referenced\x20data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20adding\x20'+_0x388aec+_0xc322ca(0x173);}function generateUpdateFunction(_0x4a281e,_0x43535d,_0x4c382b,_0x2bab9d=null,_0x2df2d6=![]){const _0x96bab1=a0_0x4955;if(!_0x2bab9d){const _0x381519=FileUtils[_0x96bab1(0x159)](_0x43535d);_0x2bab9d=_0x381519+'Model';}const _0x3843b2=_0x4c382b[_0x96bab1(0x25d)]?',\x20'+JSON['stringify'](_0x4c382b[_0x96bab1(0x25d)]):'',_0x2a2180=_0x4c382b['requestScope']?_0x96bab1(0x1f6)+_0x2bab9d+_0x96bab1(0x194)+_0x43535d+'\x20data\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'',_0x2a1ca7=_0x2df2d6?_0x96bab1(0x15b)+_0x4a281e+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27'+_0x43535d+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20oldData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20topic:\x20kafkaConfig.topic\x20||\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20keyField:\x20kafkaConfig.keyField\x20||\x20\x27'+(_0x4c382b['primaryKey']||'id')+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x4c382b[_0x96bab1(0x13f)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20correlationId:\x20correlationId\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20).catch(err\x20=>\x20console.error(\x27[Kafka]\x20Async\x20publish\x20error:\x27,\x20err.message));\x0a\x20\x20\x20\x20}\x0a':'',_0x2d2f29=_0x2df2d6?_0x96bab1(0x1a9):'\x0a\x20\x20\x20\x20//\x20Get\x20correlation\x20ID\x20from\x20header\x20(optional)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27]\x20||\x20null;\x0a';return'\x0a//\x20POST\x20/api/'+_0x4a281e+'/'+_0x43535d+'/update\x20-\x20Mengupdate\x20data\x20'+_0x43535d+'\x0arouter.post(\x27/update\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x43535d+_0x96bab1(0x1a7)+_0x2d2f29+'\x0a\x20\x20\x20\x20//\x20Validasi\x20primary\x20key\x0a\x20\x20\x20\x20const\x20primaryKey\x20=\x20\x27'+(_0x4c382b['primaryKey']||'id')+_0x96bab1(0x154)+_0x2a2180+_0x96bab1(0x1ca)+_0x2bab9d+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x2bab9d+'.validateData(req.body,\x20\x27update\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20sanitized\x20data\x0a\x20\x20\x20\x20\x20\x20req.body\x20=\x20{\x20...req.body,\x20...validation.sanitizedData\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Event\x20lifecycle\x20variables\x0a\x20\x20\x20\x20let\x20oldData\x20=\x20null;\x0a\x20\x20\x20\x20let\x20newData\x20=\x20null;\x0a\x20\x20\x20\x20const\x20requestData\x20=\x20req.body;\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20===\x20Integrated\x20Transaction\x20dengan\x20Event\x20Lifecycle\x20===\x0a\x20\x20\x20\x20//\x20oldData\x20fetch\x20+\x20onBefore\x20+\x20main\x20operation\x20+\x20onAfter\x20dieksekusi\x20dalam\x20satu\x20transaction\x20scope\x0a\x20\x20\x20\x20//\x20di\x20dalam\x20model.executeTransactionWithEvents()\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20integrated\x20transaction\x20model\x20dengan\x20event\x20lifecycle\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x4c382b['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x2bab9d+'.updateData(req.body,\x20eventContext'+_0x3843b2+_0x96bab1(0x1d2)+_0x2bab9d+_0x96bab1(0x156)+_0x3843b2+_0x96bab1(0x223)+_0x43535d+'\x20data\x20updated\x20successfully:\x20${primaryKey}=${req.body[primaryKey]}`);\x0a'+_0x2a1ca7+'\x0a\x20\x20\x20\x20//\x20Kirim\x20response\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x43535d+'\x20data\x20successfully\x20updated\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengupdate\x20data\x20'+_0x43535d+_0x96bab1(0x181)+_0x43535d+_0x96bab1(0x267)+_0x43535d+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateAdjustFunction(_0x56f3fe,_0x3902e5,_0x32fe84,_0x27c695=null){const _0x30dc13=a0_0x4955;if(!_0x27c695){const _0x2ab162=FileUtils['toCamelCase'](_0x3902e5);_0x27c695=_0x2ab162+_0x30dc13(0x1ad);}const _0x265246=_0x32fe84['adjustConfig']?JSON['stringify'](_0x32fe84[_0x30dc13(0x207)]):'{}',_0x27b4bf=_0x32fe84[_0x30dc13(0x25d)]?',\x20'+JSON['stringify'](_0x32fe84['fieldPolicy']):'',_0x763be1=_0x32fe84[_0x30dc13(0x25d)]?',\x20null,\x20'+JSON[_0x30dc13(0x18f)](_0x32fe84['fieldPolicy']):'',_0x308166=_0x32fe84[_0x30dc13(0x20e)]?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x27c695+_0x30dc13(0x194)+_0x3902e5+_0x30dc13(0x1a6):'';return _0x30dc13(0x25f)+_0x56f3fe+'/'+_0x3902e5+_0x30dc13(0x23a)+_0x3902e5+_0x30dc13(0x17e)+(_0x32fe84[_0x30dc13(0x24e)]||'id')+'\x27;\x0a\x20\x20\x20\x20if\x20(!req.body[primaryKey])\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20is\x20required\x20for\x20adjust`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20adjustments\x20array\x0a\x20\x20\x20\x20if\x20(!req.body.adjustments\x20||\x20!Array.isArray(req.body.adjustments)\x20||\x20req.body.adjustments.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27adjustments\x20array\x20is\x20required\x20and\x20must\x20not\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x308166+'\x0a\x20\x20\x20\x20const\x20adjustConfig\x20=\x20'+_0x265246+';\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20===\x20Integrated\x20Transaction\x20dengan\x20Event\x20Lifecycle\x20===\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20componentEngine:\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder:\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x32fe84['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20additionalContext:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id:\x20req.headers[\x27user-id\x27]\x20||\x20req.headers[\x27x-user-id\x27]\x20||\x20\x27system\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20responseData\x20=\x20await\x20'+_0x27c695+_0x30dc13(0x1a8)+_0x27b4bf+_0x30dc13(0x279)+_0x27c695+_0x30dc13(0x1cd)+_0x763be1+');\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[FALLBACK]\x20ADJUST\x20completed\x20without\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[FALLBACK]\x20ADJUST\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Log\x20successful\x20operation\x0a\x20\x20\x20\x20console.log(`'+_0x3902e5+_0x30dc13(0x1a4)+_0x3902e5+'\x20data\x20successfully\x20adjusted\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20responseData,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengadjust\x20data\x20'+_0x3902e5+_0x30dc13(0x14c)+_0x3902e5+_0x30dc13(0x255)+_0x3902e5+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateAggregateFunction(_0x14b35f,_0x310b8d,_0x1ab2db,_0xd7a3dd=null){const _0x1b6887=a0_0x4955;if(!_0xd7a3dd){const _0x137ff8=FileUtils[_0x1b6887(0x159)](_0x310b8d);_0xd7a3dd=_0x137ff8+'Model';}const _0x5518bc=_0x1ab2db['aggregateConfig']?JSON['stringify'](_0x1ab2db[_0x1b6887(0x270)]):'{}';return'\x0a//\x20POST\x20/api/'+_0x14b35f+'/'+_0x310b8d+_0x1b6887(0x198)+_0x5518bc+_0x1b6887(0x1de)+_0xd7a3dd+'.aggregateData(req.body\x20||\x20{},\x20aggregateConfig);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mengagregasi\x20data\x20'+_0x310b8d+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20403)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Pro\x20Feature\x20Required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20upgrade:\x20\x27https://restforge.dev/pricing\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20400\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27not\x20a\x20valid\x20field\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27Invalid\x20aggregate\x20function\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27Invalid\x20alias\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27only\x20allowed\x20with\x20COUNT\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27not\x20defined\x20in\x20aggregate\x20config\x27)\x20||\x0a\x20\x20\x20\x20\x20\x20\x20\x20error.message.includes(\x27no\x20join\x20definitions\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20aggregating\x20'+_0x310b8d+_0x1b6887(0x173);}function generateDeleteFunction(_0x59d544,_0x4d7eb8,_0x2a7f84,_0x2e8aa3=null,_0x1ad546=![]){const _0x3d9d26=a0_0x4955;if(!_0x2e8aa3){const _0x425a01=FileUtils[_0x3d9d26(0x159)](_0x4d7eb8);_0x2e8aa3=_0x425a01+_0x3d9d26(0x1ad);}const _0x5705f2=_0x1ad546?_0x3d9d26(0x22a)+_0x59d544+_0x3d9d26(0x15d)+_0x4d7eb8+_0x3d9d26(0x1ae)+(_0x2a7f84[_0x3d9d26(0x24e)]||'id')+_0x3d9d26(0x1e6)+_0x2a7f84['tableName']+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20correlationId:\x20correlationId\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20).catch(err\x20=>\x20console.error(\x27[Kafka]\x20Async\x20publish\x20error:\x27,\x20err.message));\x0a\x20\x20\x20\x20}\x0a':'',_0x4cee66=_0x1ad546?'\x0a\x20\x20\x20\x20//\x20Validasi\x20x-correlation-id\x20header\x20(MANDATORY\x20jika\x20Kafka\x20enabled)\x0a\x20\x20\x20\x20const\x20correlationId\x20=\x20req.headers[\x27x-correlation-id\x27];\x0a\x20\x20\x20\x20if\x20(!correlationId)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20header\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27x-correlation-id\x20header\x20is\x20required\x20when\x20Kafka\x20publishing\x20is\x20enabled\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a':_0x3d9d26(0x23d);return _0x3d9d26(0x25f)+_0x59d544+'/'+_0x4d7eb8+_0x3d9d26(0x160)+_0x4d7eb8+'\x0arouter.post(\x27/delete\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x4d7eb8+_0x3d9d26(0x13d)+_0x4cee66+'\x0a\x20\x20\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20request\x20format:\x20where\x20parameter\x20is\x20required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x0a\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20===\x20EVENT\x20LIFECYCLE:\x20onBefore\x20DELETE\x20===\x0a\x20\x20\x20\x20let\x20oldData\x20=\x20null;\x0a\x20\x20\x20\x20let\x20newData\x20=\x20null;\x0a\x20\x20\x20\x20const\x20requestData\x20=\x20req.body;\x0a\x20\x20\x20\x20let\x20responseData\x20=\x20null;\x0a\x0a\x20\x20\x20\x20//\x20Cek\x20apakah\x20data\x20exist\x20sebelum\x20delete\x20dan\x20ambil\x20old\x20data\x20untuk\x20event\x20lifecycle\x0a\x20\x20\x20\x20//\x20Menggunakan\x20SELECT\x20*\x20dari\x20tabel\x20utama\x20(tanpa\x20explicit\x20select)\x20karena\x20fieldName\x0a\x20\x20\x20\x20//\x20bisa\x20mengandung\x20kolom\x20dari\x20JOIN\x20(mis.\x20city_name)\x20yang\x20tidak\x20ada\x20di\x20tabel\x20utama\x0a\x20\x20\x20\x20if\x20(req.body.where\x20&&\x20Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20firstCondition\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20existingData\x20=\x20await\x20'+_0x2e8aa3+_0x3d9d26(0x1be)+_0x4d7eb8+_0x3d9d26(0x145)+_0x2a7f84[_0x3d9d26(0x13f)]+_0x3d9d26(0x208)+_0x2e8aa3+_0x3d9d26(0x13b)+_0x2e8aa3+_0x3d9d26(0x1cf)+_0x4d7eb8+_0x3d9d26(0x204)+_0x5705f2+_0x3d9d26(0x165)+_0x4d7eb8+_0x3d9d26(0x251)+_0x4d7eb8+_0x3d9d26(0x173);}function generateFirstFunction(_0x102641,_0x140ef4,_0x273807,_0x144ebf,_0x31b72b,_0x98b63a=null){const _0x4c067c=a0_0x4955;if(!_0x98b63a){const _0x41e3f9=FileUtils['toCamelCase'](_0x140ef4);_0x98b63a=_0x41e3f9+'Model';}const _0x354fd4=_0x273807['requestScope']?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope\x20&&\x20result.data\x20&&\x20result.data.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20record\x20=\x20result.data[0];\x0a\x20\x20\x20\x20\x20\x20if\x20(record[req._requestScope.column]\x20!==\x20undefined\x20&&\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20String(record[req._requestScope.column])\x20!==\x20String(req._requestScope.value))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x140ef4+_0x4c067c(0x1e1):'';return _0x4c067c(0x25f)+_0x102641+'/'+_0x140ef4+_0x4c067c(0x15c)+_0x140ef4+_0x4c067c(0x161)+_0x140ef4+'/first:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Normalize:\x20array\x201\x20elemen\x20->\x20object\x20(backward\x20compatible)\x0a\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where\x20clause\x20-\x20harus\x20object\x20tunggal\x20{key,\x20value}\x0a\x20\x20\x20\x20if\x20(!req.body.where\x20||\x20typeof\x20req.body.where\x20!==\x20\x27object\x27\x20||\x20Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20where\x20is\x20required\x20as\x20{key,\x20value}\x20object\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22'+(_0x273807['primaryKey']||'id')+_0x4c067c(0x1dc)+(_0x273807[_0x4c067c(0x24e)]||'id')+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Tolak\x20format\x20advanced\x20(conditions/logic)\x0a\x20\x20\x20\x20if\x20(req.body.where.conditions\x20||\x20req.body.where.logic)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Advanced\x20where\x20format\x20is\x20not\x20supported\x20in\x20/first\x20endpoint.\x20Use\x20/read\x20endpoint\x20for\x20complex\x20queries\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where.key\x20ada\x20di\x20validFields\x0a\x20\x20\x20\x20const\x20validFields\x20=\x20'+JSON[_0x4c067c(0x18f)](_0x273807[_0x4c067c(0x126)]||[])+_0x4c067c(0x14b)+_0x98b63a+'.getData(getPayload);\x0a'+_0x354fd4+_0x4c067c(0x201)+_0x140ef4+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20query:\x20req.body,\x0a\x20\x20\x20\x20\x20\x20\x20\x20resultCount:\x20result.data\x20?\x20result.data.length\x20:\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20mendapatkan\x20data\x20'+_0x140ef4+_0x4c067c(0x1d4)+_0x140ef4+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateLookupFunction(_0x473188,_0x5000be,_0xf8729b,_0x1c25ef,_0x4bdfd7,_0x31d367=null){const _0x2eedee=a0_0x4955,_0x37fe76={'bwYGj':_0x2eedee(0x235),'mUSNk':'code'};if(!_0x31d367){const _0xed8d6f=FileUtils[_0x2eedee(0x159)](_0x5000be);_0x31d367=_0xed8d6f+'Model';}const _0x5ebc4c=_0xf8729b['_lookupConfig']||null;return _0x2eedee(0x246)+_0x473188+'/'+_0x5000be+_0x2eedee(0x24b)+_0x5000be+'\x20untuk\x20dropdown\x20(dynamic)\x0arouter.get(\x27/lookup\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20Validasi\x20X-Request-Mode\x20header\x0a\x20\x20\x20\x20const\x20requestMode\x20=\x20req.headers[\x27x-request-mode\x27];\x0a\x20\x20\x20\x20console.log(`X-Request-Mode\x20header:\x20${requestMode}`);\x0a\x0a\x20\x20\x20\x20if\x20(requestMode\x20!==\x20\x27dynamic\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20Request\x20Mode\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27X-Request-Mode\x20header\x20must\x20be\x20set\x20to\x20dynamic\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20details:\x20\x27Contoh\x20penggunaan:\x20Tambahkan\x20header\x20X-Request-Mode:\x20dynamic\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Ambil\x20parameter\x20search\x20(default\x20case-insensitive)\x0a\x20\x20\x20\x20let\x20search\x20=\x20req.query.search\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20if\x20(Array.isArray(search))\x20{\x0a\x20\x20\x20\x20\x20\x20search\x20=\x20search[0]\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Ambil\x20parameter\x20tambahan\x20untuk\x20filtering\x0a\x20\x20\x20\x20const\x20companyId\x20=\x20req.query.company_id\x20||\x20req.query.companyId;\x0a\x20\x20\x20\x20const\x20extraFilters\x20=\x20{};\x0a\x0a\x20\x20\x20\x20//\x20Collect\x20additional\x20filter\x20parameters\x0a\x20\x20\x20\x20if\x20(companyId)\x20{\x0a\x20\x20\x20\x20\x20\x20extraFilters.company_id\x20=\x20companyId;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20search\x20parameter\x0a\x20\x20\x20\x20if\x20(search.length\x20>\x20100)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20search\x20parameter\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Search\x20parameter\x20terlalu\x20panjang\x20(max\x20100\x20karakter)\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20console.log(`'+_0x5000be+'\x20lookup\x20request:\x20search=${search},\x20filters=`,\x20extraFilters);\x0a\x0a\x20\x20\x20\x20//\x20Gunakan\x20model\x20untuk\x20lookup\x20data\x20dengan\x20filters\x20tambahan\x0a\x20\x20\x20\x20const\x20list\x20=\x20await\x20'+_0x31d367+'.getLookupDataDynamic(search,\x20extraFilters);\x0a\x0a\x20\x20\x20\x20console.log(`Lookup\x20results:\x20${list.length}\x20records\x20found`);\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20search:\x20search,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x5000be+_0x2eedee(0x290)+_0x5000be+_0x2eedee(0x17b)+_0x473188+'/'+_0x5000be+_0x2eedee(0x11a)+_0x5000be+_0x2eedee(0x147)+JSON['stringify'](_0x5ebc4c)+';\x0a\x20\x20\x20\x20\x20\x20const\x20defaultSelect\x20=\x20lookupConfig\x20&&\x20lookupConfig.hasCustomText\x0a\x20\x20\x20\x20\x20\x20\x20\x20?\x20[\x22id\x22,\x20lookupConfig.textField]\x0a\x20\x20\x20\x20\x20\x20\x20\x20:\x20[\x22id\x22,\x20\x22'+_0x4bdfd7+_0x2eedee(0x212)+(_0x1c25ef['all']?_0x1c25ef[_0x2eedee(0x1f0)][_0x2eedee(0x1e2)](_0x159217=>_0x159217!=='id')||_0x2eedee(0x238):'code')+'\x22,\x20\x22value\x22:\x20\x22AP2506-01\x22\x20}],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20defaultSelect\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_sql_expression:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22company_id\x22,\x20\x22value\x22:\x20\x22your-company-id\x22\x20}],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22id\x22,\x20\x22'+_0x4bdfd7+'||\x27\x20-\x20\x27||code\x20as\x20display_text\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_custom_lookup:\x20lookupConfig\x20?\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22company_id\x22,\x20\x22value\x22:\x20\x22your-company-id\x22\x20}],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[lookupConfig.idField,\x20lookupConfig.textField],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22note\x22:\x20\x22Using\x20fieldNameLookup\x20configuration\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20:\x20null,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example_advanced:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22logic\x22:\x20\x22OR\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22conditions\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0x4bdfd7+_0x2eedee(0x27e)+_0x4bdfd7+_0x2eedee(0x183)+(_0x1c25ef[_0x2eedee(0x1f9)]?_0x1c25ef[_0x2eedee(0x1f9)]['slice'](0x0,0x4)['join']('\x22,\x20\x22'):_0xf8729b['fieldName'][_0x2eedee(0x283)](0x0,0x4)[_0x2eedee(0x266)](_0x37fe76['bwYGj']))+_0x2eedee(0x12c)+_0x4bdfd7+'\x22],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22sort_columns\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22column\x22:\x20\x22'+(_0xf8729b[_0x2eedee(0x126)][0x1]||_0x4bdfd7)+_0x2eedee(0x216)+_0x4bdfd7+'\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22direction\x22:\x20\x22ASC\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x5000be+'/lookup:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Cek\x20apakah\x20ada\x20where\x20clause\x20(format\x20baru)\x20atau\x20selected_tag\x20(format\x20lama)\x0a\x20\x20\x20\x20if\x20(req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Format\x20baru\x20dengan\x20where\x20clause\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Using\x20new\x20format\x20with\x20where\x20clause\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x0a\x20\x20\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+(_0x1c25ef[_0x2eedee(0x1f0)]?_0x1c25ef['all'][_0x2eedee(0x1e2)](_0x2f68b8=>_0x2f68b8!=='id')||'code':_0x37fe76[_0x2eedee(0x195)])+'\x22,\x20\x22value\x22:\x20\x22AP2506-01\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20],\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22id\x22,\x20\x22'+_0x4bdfd7+'\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example_advanced:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22logic\x22:\x20\x22OR\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22conditions\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+_0x4bdfd7+_0x2eedee(0x1bf)+_0x4bdfd7+_0x2eedee(0x203)+(_0x1c25ef['textFields']?_0x1c25ef[_0x2eedee(0x1f9)][_0x2eedee(0x283)](0x0,0x4)['join'](_0x37fe76['bwYGj']):_0xf8729b['fieldName']['slice'](0x0,0x4)[_0x2eedee(0x266)](_0x2eedee(0x235)))+'\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20select\x20fields\x20jika\x20ada\x20(support\x20SQL\x20expressions)\x0a\x20\x20\x20\x20\x20\x20if\x20(req.body.select\x20&&\x20Array.isArray(req.body.select))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20validFields\x20=\x20'+JSON[_0x2eedee(0x18f)](_0xf8729b['fieldName']||[])+';\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20invalidFields\x20=\x20[];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Check\x20setiap\x20field\x20dalam\x20select\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20field\x20of\x20req.body.select)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip\x20validasi\x20untuk\x20field\x20\x27id\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(field.toLowerCase()\x20===\x20\x27id\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip\x20validasi\x20jika\x20ada\x20SQL\x20expression\x20dengan\x20AS\x20(alias)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(/\x5cs+as\x5cs+\x5cw+$/i.test(field))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Skip\x20validasi\x20jika\x20ada\x20SQL\x20operators/functions\x20(||,\x20CONCAT,\x20dll)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(/\x5c|\x5c||CONCAT|COALESCE|CASE|WHEN/i.test(field))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Validasi\x20normal\x20field\x20name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!validFields.includes(field))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20invalidFields.push(field);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(invalidFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20select\x20fields\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Invalid\x20field(s):\x20${invalidFields.join(\x27,\x20\x27)}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20validFields:\x20validFields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20sqlExpressionNote:\x20\x27SQL\x20expressions\x20dengan\x20operator\x20||\x20atau\x20AS\x20alias\x20diperbolehkan\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Gunakan\x20method\x20getLookupDataWithFilter\x0a\x20\x20\x20\x20\x20\x20const\x20list\x20=\x20await\x20'+_0x31d367+'.getLookupDataWithFilter(req.body);\x0a\x0a\x20\x20\x20\x20\x20\x20console.log(`Lookup\x20with\x20filter\x20results:\x20${list.length}\x20records\x20found`);\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20\x20\x20query:\x20req.body,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Format\x20lama\x20atau\x20request\x20tanpa\x20WHERE\x20clause\x20tetapi\x20dengan\x20SELECT\x0a\x20\x20\x20\x20\x20\x20console.log(\x27Using\x20legacy\x20format\x20with\x20selected_tag\x20or\x20select-only\x20request\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20selectedTag\x20=\x20req.body.selected_tag\x20||\x20\x27\x27;\x0a\x20\x20\x20\x20\x20\x20console.log(`'+_0x5000be+_0x2eedee(0x18e)+_0x31d367+_0x2eedee(0x1ee)+_0x31d367+'.getStaticLookupData(selectedTag);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`Static\x20lookup\x20results:\x20${list.length}\x20records\x20found`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20count:\x20list.length,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data:\x20list,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20selectedTag:\x20selectedTag,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x5000be+_0x2eedee(0x129)+_0x5000be+'\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateReadFunction(_0x2f5fc3,_0x389cf8,_0x4cbc50,_0x5341b2=null){const _0x3dc2ca=a0_0x4955;if(!_0x5341b2){const _0x155512=FileUtils['toCamelCase'](_0x389cf8);_0x5341b2=_0x155512+'Model';}return _0x3dc2ca(0x25f)+_0x2f5fc3+'/'+_0x389cf8+'/read\x20-\x20Manual\x20pagination\x20endpoint\x0arouter.post(\x27/read\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20//\x20req.log.debug(\x27Request\x20body\x20'+_0x389cf8+_0x3dc2ca(0x1e7)+(_0x4cbc50[_0x3dc2ca(0x24e)]||_0x4cbc50[_0x3dc2ca(0x126)][0x0]||'id')+'\x27;\x0a\x0a\x20\x20\x20\x20//\x20Parse\x20sort_columns\x0a\x20\x20\x20\x20let\x20sort_columns\x20=\x20[];\x0a\x20\x20\x20\x20if\x20(req.body.sort_columns\x20&&\x20Array.isArray(req.body.sort_columns)\x20&&\x20req.body.sort_columns.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20sort_columns\x20=\x20req.body.sort_columns.map(item\x20=>\x20({\x0a\x20\x20\x20\x20\x20\x20\x20\x20column:\x20item.column,\x0a\x20\x20\x20\x20\x20\x20\x20\x20direction:\x20(item.direction\x20||\x20\x27ASC\x27).toUpperCase()\x0a\x20\x20\x20\x20\x20\x20}));\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20parameter\x20where\x20dengan\x20format\x20advanced\x20conditions\x0a\x20\x20\x20\x20let\x20where\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(req.body.where\x20&&\x20typeof\x20req.body.where\x20===\x20\x27object\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20||\x20(req.body.where.conditions\x20&&\x20Array.isArray(req.body.where.conditions)))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20where\x20=\x20req.body.where;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Proses\x20parameter\x20select\x20untuk\x20kolom\x20selektif\x0a\x20\x20\x20\x20const\x20validFields\x20=\x20'+JSON['stringify'](_0x4cbc50[_0x3dc2ca(0x126)]||[])+_0x3dc2ca(0x1b9)+_0x5341b2+'.getList(options);\x0a\x0a\x20\x20\x20\x20//\x20Format\x20response\x20berdasarkan\x20mode\x0a\x20\x20\x20\x20if\x20(paginate)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20totalPages\x20=\x20Math.ceil(result.totalRecords\x20/\x20perPage);\x0a\x20\x20\x20\x20\x20\x20const\x20hasNext\x20=\x20page\x20<\x20totalPages;\x0a\x20\x20\x20\x20\x20\x20const\x20hasPrevious\x20=\x20page\x20>\x201;\x0a\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20result.data\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20result.data\x20?\x20result.data.length\x20:\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20pagination:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20current_page:\x20page,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20per_page:\x20perPage,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20total_records:\x20result.totalRecords\x20||\x200,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20total_pages:\x20totalPages,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20has_next:\x20hasNext,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20has_previous:\x20hasPrevious\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20\x20\x20data:\x20result.data\x20||\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20count:\x20result.data\x20?\x20result.data.length\x20:\x200\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20in\x20'+_0x389cf8+'\x20list:\x27,\x20error);\x0a\x20\x20\x20\x20const\x20statusCode\x20=\x20error.statusCode\x20||\x20500;\x0a\x20\x20\x20\x20return\x20res.status(statusCode).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20statusCode\x20===\x20400\x20?\x20\x27Bad\x20Request\x27\x20:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20statusCode\x20===\x20400\x20?\x20error.message\x20:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20'+_0x389cf8+'\x20list\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateCreateCompositeFunction(_0x133549,_0x3ca132,_0x371806,_0x55e33d=null){const _0x3052d1=a0_0x4955,_0x2ae323={'vdnZN':_0x3052d1(0x26c),'ETwJn':'unit_price','VUFKZ':_0x3052d1(0x272)};if(!_0x55e33d){const _0x1b79b6=FileUtils[_0x3052d1(0x159)](_0x3ca132);_0x55e33d=_0x1b79b6+_0x3052d1(0x1ad);}const _0xc1415e=_0x371806['masterDetail']&&_0x371806[_0x3052d1(0x231)][_0x3052d1(0x1ba)],_0x3f9835=_0xc1415e?_0x371806['masterDetail']['detailTable']:null,_0x1cde0e=_0x3f9835?_0x3f9835[_0x3052d1(0x274)]('.')[_0x3052d1(0x206)]():_0x3052d1(0x168),_0x5d021d=_0x3ca132[_0x3052d1(0x228)](/-/g,'_'),_0x4b783a=_0x371806['masterDetail']?.[_0x3052d1(0x254)]?.[_0x3052d1(0x1f1)]?.[_0x3052d1(0x2a8)]?.[_0x3052d1(0x1e8)]||'',_0x216623=_0x4b783a['split']('*')['map'](_0x10f849=>_0x10f849[_0x3052d1(0x256)]()),_0x553b4f=_0x371806[_0x3052d1(0x231)]?.['headerCalculations']?.['total_qty']?.['source']?.['replace'](_0x2ae323[_0x3052d1(0x275)],'')||'',_0x525c9e=_0x216623[0x0]||_0x553b4f,_0x19a40b=_0x216623[0x1]||_0x2ae323['ETwJn'];return _0x3052d1(0x25f)+_0x133549+'/'+_0x3ca132+'/create-composite\x20-\x20Composite\x20create\x20'+(_0xc1415e?'(master-detail\x20transaction)':'')+_0x3052d1(0x25b)+_0x3ca132+_0x3052d1(0x21e)+_0x5d021d+_0x3052d1(0x128)+_0x5d021d+_0x3052d1(0x18c)+(_0xc1415e?_0x3052d1(0x23c)+_0x5d021d+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field1\x22:\x20\x22value1\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field2\x22:\x20\x22value2\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x1cde0e+'\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x201,\x20\x22field\x22:\x20\x22value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x202,\x20\x22field\x22:\x20\x22value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}':_0x3052d1(0x23c)+_0x5d021d+_0x3052d1(0x1dd))+_0x3052d1(0x1aa)+_0x5d021d+';\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20dan\x20sanitasi\x20header\x20data\x20dengan\x20constraint\x20(termasuk\x20hash)\x0a\x20\x20\x20\x20if\x20(typeof\x20'+_0x55e33d+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20header\x20data\x20saja\x20(exclude\x20detail\x20array)\x20untuk\x20validation\x0a\x20\x20\x20\x20\x20\x20const\x20headerDataForValidation\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20\x20\x20'+(_0xc1415e?'delete\x20headerDataForValidation.'+_0x1cde0e+';':'')+'\x0a\x0a\x20\x20\x20\x20\x20\x20const\x20validation\x20=\x20await\x20'+_0x55e33d+'.validateData(headerDataForValidation,\x20\x27insert\x27);\x0a\x20\x20\x20\x20\x20\x20if\x20(!validation.isValid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errors:\x20validation.errors,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Merge\x20sanitized\x20data\x20(termasuk\x20hash\x20result)\x20kembali\x20ke\x20data\x0a\x20\x20\x20\x20\x20\x20Object.assign(data,\x20validation.sanitizedData);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20'+(_0xc1415e?'\x0a\x20\x20\x20\x20//\x20Validasi\x20detail\x20items\x20untuk\x20master-detail\x0a\x20\x20\x20\x20if\x20(!data.'+_0x1cde0e+_0x3052d1(0x141)+_0x1cde0e+_0x3052d1(0x1f8)+_0x1cde0e+'.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x1cde0e+'\x22\x20must\x20be\x20a\x20non-empty\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Auto-calculate\x20totals\x20jika\x20ada\x20konfigurasi\x0a\x20\x20\x20\x20'+(_0x371806['masterDetail']['headerCalculations']?_0x3052d1(0x139)+JSON[_0x3052d1(0x18f)](_0x371806['masterDetail'][_0x3052d1(0x200)])+_0x3052d1(0x15f)+_0x1cde0e+_0x3052d1(0x142)+_0x1cde0e+_0x3052d1(0x12e)+(_0x525c9e?'if\x20(headerCalc.total_amount)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Calculate\x20total_amount\x20as\x20sum\x20of\x20('+_0x525c9e+_0x3052d1(0x185)+_0x19a40b+_0x3052d1(0x294)+_0x1cde0e+'.reduce((sum,\x20item)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20qty\x20=\x20Number(item.'+_0x525c9e+_0x3052d1(0x297)+_0x19a40b+')\x20||\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20sum\x20+\x20(qty\x20*\x20price);\x0a\x20\x20\x20\x20\x20\x20},\x200);\x0a\x20\x20\x20\x20}':_0x2ae323['VUFKZ'])+_0x3052d1(0x1ab):'')+'\x0a\x0a\x20\x20\x20\x20console.log(\x27Calculated\x20totals:\x27,\x20{\x0a\x20\x20\x20\x20\x20\x20total_items:\x20data.total_items,\x0a\x20\x20\x20\x20\x20\x20total_qty:\x20data.total_qty,\x0a\x20\x20\x20\x20\x20\x20total_amount:\x20data.total_amount\x0a\x20\x20\x20\x20});\x0a\x20\x20\x20\x20':'')+'\x0a\x0a\x20\x20\x20\x20//\x20Build\x20eventContext\x20untuk\x20composite\x20hooks\x20(jika\x20component\x20engine\x20tersedia)\x0a\x20\x20\x20\x20let\x20eventContext\x20=\x20null;\x0a\x20\x20\x20\x20if\x20(componentEngine\x20&&\x20ContextBuilder)\x20{\x0a\x20\x20\x20\x20\x20\x20eventContext\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20componentEngine,\x0a\x20\x20\x20\x20\x20\x20\x20\x20ContextBuilder,\x0a\x20\x20\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x371806[_0x3052d1(0x13f)]+_0x3052d1(0x18b)+_0x3f9835+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+(_0xc1415e?_0x371806[_0x3052d1(0x231)]['foreignKey']:'')+_0x3052d1(0x17a)+_0x55e33d+_0x3052d1(0x1b0)+_0x3ca132+'\x20composite\x20create\x20successful`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(201).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x3ca132+'\x20data\x20successfully\x20created'+(_0xc1415e?'\x20(with\x20detail\x20items)':'')+'\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20create\x20'+_0x3ca132+_0x3052d1(0x278)+_0x3ca132+_0x3052d1(0x173);}function generateUpdateCompositeFunction(_0x32129a,_0x405ce3,_0x565058,_0x999407=null){const _0x2890fc=a0_0x4955,_0x3816d9={'VUpne':_0x2890fc(0x168),'DThyi':'\x20(with\x20detail\x20items)'};if(!_0x999407){const _0x1bd7ae=FileUtils[_0x2890fc(0x159)](_0x405ce3);_0x999407=_0x1bd7ae+'Model';}const _0x2b0a34=_0x565058['masterDetail']&&_0x565058[_0x2890fc(0x231)][_0x2890fc(0x1ba)],_0x4c9742=_0x2b0a34?_0x565058['masterDetail']['detailTable']:null,_0x537839=_0x4c9742?_0x4c9742[_0x2890fc(0x274)]('.')['pop']():_0x3816d9['VUpne'],_0x43894a=_0x405ce3['replace'](/-/g,'_'),_0x2735d7=_0x565058['primaryKey']||'id',_0x294676=_0x565058['requestScope']?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x20—\x20master\x20record\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x999407+_0x2890fc(0x217)+_0x2735d7+'\x27,\x20value:\x20data.'+_0x2735d7+'\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20key:\x20req._requestScope.column,\x20value:\x20req._requestScope.value\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20if\x20(!scopeCheck.success\x20||\x20!scopeCheck.data\x20||\x20scopeCheck.data.length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Master\x20record\x20not\x20found\x20or\x20access\x20denied\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a':'';return'\x0a//\x20POST\x20/api/'+_0x32129a+'/'+_0x405ce3+'/update-composite\x20-\x20Composite\x20update\x20'+(_0x2b0a34?_0x2890fc(0x20f):'')+'\x0arouter.post(\x27/update-composite\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20console.log(\x27Request\x20body\x20'+_0x405ce3+_0x2890fc(0x1fb)+_0x43894a+_0x2890fc(0x128)+_0x43894a+_0x2890fc(0x18c)+(_0x2b0a34?'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x43894a+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x2735d7+'\x22:\x20\x22existing-id\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field1\x22:\x20\x22value1\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22field2\x22:\x20\x22value2\x22,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x537839+'\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x201,\x20\x22field\x22:\x20\x22value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22line_number\x22:\x202,\x20\x22field\x22:\x20\x22value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}':'{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x43894a+'\x22:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22'+_0x2735d7+_0x2890fc(0x28b))+',\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20const\x20data\x20=\x20req.body.'+_0x43894a+_0x2890fc(0x227)+_0x2735d7+')\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Primary\x20key\x20('+_0x2735d7+')\x20is\x20required\x20for\x20update\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x294676+_0x2890fc(0x2a6)+_0x999407+'.validateData\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Extract\x20header\x20data\x20saja\x20(exclude\x20detail)\x20untuk\x20validation\x0a\x20\x20\x20\x20\x20\x20const\x20headerDataForValidation\x20=\x20{\x20...data\x20};\x0a\x20\x20\x20\x20\x20\x20'+(_0x2b0a34?'delete\x20headerDataForValidation.'+_0x537839+';':'')+_0x2890fc(0x192)+_0x999407+_0x2890fc(0x189)+(_0x2b0a34?'\x0a\x20\x20\x20\x20//\x20Validasi\x20detail\x20items\x20untuk\x20master-detail\x20(opsional\x20untuk\x20update)\x0a\x20\x20\x20\x20//\x20Untuk\x20updateComposite,\x20detail\x20items\x20berupa\x20object\x20dengan\x20{insert:\x20[],\x20update:\x20[],\x20delete:\x20[]}\x0a\x20\x20\x20\x20if\x20(data.'+_0x537839+')\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(typeof\x20data.'+_0x537839+'\x20!==\x20\x27object\x27\x20||\x20Array.isArray(data.'+_0x537839+_0x2890fc(0x133)+_0x537839+_0x2890fc(0x29c)+_0x537839+';\x0a\x20\x20\x20\x20\x20\x20if\x20(operations.insert\x20&&\x20!Array.isArray(operations.insert))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x537839+_0x2890fc(0x1c3)+_0x537839+'.update\x22\x20must\x20be\x20an\x20array\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20if\x20(operations.delete\x20&&\x20!Array.isArray(operations.delete))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20\x22'+_0x537839+_0x2890fc(0x179):'')+_0x2890fc(0x1a0)+_0x565058[_0x2890fc(0x13f)]+_0x2890fc(0x18b)+_0x4c9742+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20foreignKey:\x20\x27'+(_0x2b0a34?_0x565058['masterDetail']['foreignKey']:'')+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20options:\x20req.bodyOptions\x20||\x20{},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20requestId:\x20req.id\x20||\x20null\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20};\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Panggil\x20model\x20composite\x20update\x20method\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x999407+_0x2890fc(0x166)+_0x405ce3+_0x2890fc(0x276)+_0x2735d7+'=${data.'+_0x2735d7+'}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x405ce3+_0x2890fc(0x152)+(_0x2b0a34?_0x3816d9[_0x2890fc(0x1cb)]:'')+'\x27,\x0a\x20\x20\x20\x20\x20\x20data:\x20result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20update\x20'+_0x405ce3+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Handle\x20\x22Data\x20tidak\x20ditemukan\x22\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Data\x20tidak\x20ditemukan\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x405ce3+_0x2890fc(0x199)+_0x405ce3+_0x2890fc(0x173);}function generateReadCompositeFunction(_0xa42e06,_0x3331d5,_0x41c3c9,_0x282a45=null){const _0x4b3b4c=a0_0x4955;if(!_0x282a45){const _0x1ce394=FileUtils['toCamelCase'](_0x3331d5);_0x282a45=_0x1ce394+_0x4b3b4c(0x1ad);}const _0x10488e=JSON['stringify'](_0x41c3c9['fieldName']||[]);return _0x4b3b4c(0x25f)+_0xa42e06+'/'+_0x3331d5+'/read-composite\x20-\x20Read\x20header\x20with\x20detail\x20items\x0arouter.post(\x27/read-composite\x27,\x20async\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20console.log(\x27Request\x20body\x20'+_0x3331d5+'/read-composite:\x27,\x20JSON.stringify(req.body,\x20null,\x202));\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20request\x20body\x0a\x20\x20\x20\x20if\x20(!req.body\x20||\x20Object.keys(req.body).length\x20===\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Payload\x20cannot\x20be\x20empty\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20where\x20clause\x0a\x20\x20\x20\x20if\x20(!req.body.where)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Property\x20where\x20is\x20required\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validasi\x20format\x20where\x0a\x20\x20\x20\x20if\x20(!Array.isArray(req.body.where)\x20&&\x20!req.body.where.conditions)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Invalid\x20where\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{\x20\x22key\x22:\x20\x22'+(_0x41c3c9['primaryKey']||'id')+'\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20]\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Panggil\x20model\x20readComposite\x20method\x0a\x20\x20\x20\x20const\x20result\x20=\x20await\x20'+_0x282a45+_0x4b3b4c(0x1bb)+_0x3331d5+'\x20composite\x20read\x20successful:\x20${result.count\x20||\x200}\x20record(s)`);\x0a\x0a\x20\x20\x20\x20return\x20res.json({\x0a\x20\x20\x20\x20\x20\x20...result,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20composite\x20read\x20'+_0x3331d5+':\x27,\x20error);\x0a\x20\x20\x20\x20return\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20reading\x20'+_0x3331d5+'\x20composite\x20data\x27,\x0a\x20\x20\x20\x20\x20\x20details:\x20process.env.NODE_ENV\x20===\x20\x27development\x27\x20?\x20error.message\x20:\x20undefined,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});\x0a\x0a';}function generateWorkflowFunction(_0x21cb4f,_0x16220d,_0x4a2b74,_0x3124cb=null){const _0xfb9be5=a0_0x4955;if(!_0x3124cb){const _0x4c7d64=FileUtils['toCamelCase'](_0x16220d);_0x3124cb=_0x4c7d64+_0xfb9be5(0x1ad);}const _0x12e50f=_0x4a2b74[_0xfb9be5(0x13a)]?JSON['stringify'](_0x4a2b74['workflow']):'{}',_0x6ccefe=_0x4a2b74[_0xfb9be5(0x20e)]?'\x0a\x20\x20\x20\x20//\x20Request\x20scope\x20ownership\x20verification\x20(Layer\x201\x20RLS)\x0a\x20\x20\x20\x20if\x20(req._requestScope)\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20scopeCheck\x20=\x20await\x20'+_0x3124cb+_0xfb9be5(0x293)+_0x16220d+_0xfb9be5(0x1a6):'';return _0xfb9be5(0x25f)+_0x21cb4f+'/'+_0x16220d+_0xfb9be5(0x119)+_0x16220d+_0xfb9be5(0x2a1)+(_0x4a2b74['primaryKey']||'id')+'\x27;\x0a\x20\x20\x20\x20const\x20recordId\x20=\x20req.body[primaryKey]\x20||\x20req.body.id;\x0a\x20\x20\x20\x20if\x20(!recordId)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Primary\x20key\x20(${primaryKey})\x20or\x20id\x20is\x20required\x20for\x20change-status`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!req.body.status)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20field\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27status\x20is\x20required\x20for\x20change-status\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a'+_0x6ccefe+_0xfb9be5(0x25c)+_0x12e50f+';\x0a\x20\x20\x20\x20workflowConfig._project\x20=\x20\x27'+_0x21cb4f+_0xfb9be5(0x27b)+_0x4a2b74['tableName']+_0xfb9be5(0x1e5)+_0x3124cb+'.changeStatusData(req.body,\x20workflowConfig,\x20eventContext);\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27[INTEGRATED\x20TRANSACTION]\x20CHANGE-STATUS\x20completed\x20successfully\x20with\x20events\x27);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27[INTEGRATED\x20TRANSACTION]\x20CHANGE-STATUS\x20failed:\x27,\x20error.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20error;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Fallback:\x20tanpa\x20component\x20engine\x20events\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20result\x20=\x20await\x20'+_0x3124cb+_0xfb9be5(0x138)+_0x16220d+'\x20status\x20changed:\x20${result.workflow.previousStatus}\x20→\x20${result.workflow.newStatus}`);\x0a\x0a\x20\x20\x20\x20return\x20res.status(200).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20true,\x0a\x20\x20\x20\x20\x20\x20message:\x20`Status\x20changed\x20from\x20${result.workflow.previousStatus}\x20to\x20${result.workflow.newStatus}`,\x0a\x20\x20\x20\x20\x20\x20data:\x20result.data,\x0a\x20\x20\x20\x20\x20\x20workflow:\x20result.workflow,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20console.error(\x27Error\x20saat\x20change-status\x20'+_0x16220d+':\x27,\x20error);\x0a\x0a\x20\x20\x20\x20//\x20Status\x20transition\x20not\x20allowed\x0a\x20\x20\x20\x20if\x20(error.statusCode\x20===\x20422\x20||\x20error.message.includes(\x27Cannot\x20change\x20status\x27)\x20||\x20error.message.includes(\x27No\x20transitions\x20defined\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(422).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Status\x20transition\x20not\x20allowed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Concurrent\x20modification\x20(optimistic\x20concurrency\x20check\x20via\x20status\x20guard\x20clause)\x0a\x20\x20\x20\x20if\x20(error.code\x20===\x20\x27WORKFLOW_CONCURRENT_MODIFICATION\x27\x20||\x20error.statusCode\x20===\x20409)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(409).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Concurrent\x20modification\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Validation\x20errors\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27is\x20required\x20for\x27)\x20||\x20error.message.includes(\x27is\x20not\x20a\x20valid\x20field\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Validation\x20error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Hook\x20execution\x20failed\x0a\x20\x20\x20\x20if\x20(error.message.includes(\x27hook\x20failed\x27)\x20||\x20error.message.includes(\x27onBefore\x27)\x20||\x20error.message.includes(\x27onAfter\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(502).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Workflow\x20hook\x20failed\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20error.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Record\x20not\x20found\x0a\x20\x20\x20\x20if\x20(error.message\x20===\x20\x27Record\x20not\x20found\x27\x20||\x20error.message.includes(\x27not\x20found\x27))\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20res.status(404).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Data\x20not\x20found\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27'+_0x16220d+_0xfb9be5(0x21a);}function createPostgresSubmoduleTemplate(_0x184200,_0x2e7b56,_0x2c7357){const _0xd3c8c5=a0_0x4955,_0x3902a4={'ySQva':function(_0x1b8f23,_0x451d71){return _0x1b8f23===_0x451d71;},'ZNrBV':function(_0x329f16,_0x4c9bd8,_0x46e762,_0x42ee0e,_0x172d11,_0x30d67b,_0x156fc4,_0x2e7306){return _0x329f16(_0x4c9bd8,_0x46e762,_0x42ee0e,_0x172d11,_0x30d67b,_0x156fc4,_0x2e7306);},'ZspTc':_0xd3c8c5(0x257),'acTpS':_0xd3c8c5(0x23f)},_0x5beb5d=FileUtils['toPascalCase'](_0x2e7b56),_0x8e811b=new Date()['toISOString']()[_0xd3c8c5(0x228)]('T','\x20')['replace'](/\.\d{3}Z$/,''),_0x1ed22f=_0x2c7357[_0xd3c8c5(0x18d)]||{'all':_0x2c7357['fieldName']||[]},_0x306410=FileUtils['detectTextColumn'](_0x2c7357['fieldName']||[]),_0x313e19=FileUtils['toCamelCase'](_0x2e7b56),_0x5492ee=_0x313e19+_0xd3c8c5(0x1ad),_0xeefa30=_0x2c7357['kafka']&&_0x3902a4[_0xd3c8c5(0x2a3)](_0x2c7357['kafka'][_0xd3c8c5(0x1ba)],!![]),_0x72eb4f=_0x3902a4[_0xd3c8c5(0x17f)](buildEndpointFunctions,_0x184200,_0x2e7b56,_0x2c7357,_0x1ed22f,_0x306410,_0x5492ee,_0xeefa30),_0x3bd0fa=_0xeefa30?_0xd3c8c5(0x123)+JSON[_0xd3c8c5(0x18f)](_0x2c7357['kafka']||{'enabled':![]})+';\x0a':'';return _0xd3c8c5(0x21c)+_0x5492ee+'\x20=\x20require(\x27../../models/'+_0x184200+'/'+_0x2e7b56+'\x27);\x0a'+_0x3bd0fa+_0xd3c8c5(0x125)+JSON[_0xd3c8c5(0x18f)](_0x2c7357[_0xd3c8c5(0x1ce)])+'\x20&&\x20Array.isArray('+JSON['stringify'](_0x2c7357[_0xd3c8c5(0x1ce)])+')\x20&&\x20'+JSON['stringify'](_0x2c7357['components'])+'.length\x20>\x200;\x0a\x0a\x20\x20if\x20(hasComponents)\x20{\x0a\x20\x20\x20\x20componentEngine\x20=\x20require(\x27@restforgejs/platform/src/utils/component-engine\x27).componentEngine;\x0a\x20\x20\x20\x20ContextBuilder\x20=\x20require(\x27@restforgejs/platform/src/utils/context-builder\x27);\x0a\x0a\x20\x20\x20\x20//\x20Load\x20component\x20configuration\x20dari\x20payload\x20yang\x20sedang\x20digunakan\x0a\x20\x20\x20\x20const\x20componentConfig\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20tableName:\x20\x27'+_0x2c7357[_0xd3c8c5(0x13f)]+'\x27,\x0a\x20\x20\x20\x20\x20\x20fieldName:\x20'+JSON[_0xd3c8c5(0x18f)](_0x2c7357['fieldName'])+_0xd3c8c5(0x1d9)+(_0x2c7357[_0xd3c8c5(0x23e)]?'\x27'+_0x2c7357['exportQuery']+'\x27':_0x3902a4['ZspTc'])+',\x0a\x20\x20\x20\x20\x20\x20columnFormats:\x20'+(_0x2c7357[_0xd3c8c5(0x1a2)]?JSON['stringify'](_0x2c7357[_0xd3c8c5(0x1a2)]):_0x3902a4['ZspTc'])+',\x0a\x20\x20\x20\x20\x20\x20fieldLabels:\x20'+(_0x2c7357['fieldLabels']?JSON[_0xd3c8c5(0x18f)](_0x2c7357['fieldLabels']):_0x3902a4[_0xd3c8c5(0x21d)])+_0xd3c8c5(0x299)+JSON['stringify'](_0x2c7357[_0xd3c8c5(0x1ce)])+_0xd3c8c5(0x171)+(_0x2c7357['importConfig']?JSON['stringify'](_0x2c7357['importConfig']):'null')+_0xd3c8c5(0x27c)+(_0x2c7357[_0xd3c8c5(0x207)]?JSON['stringify'](_0x2c7357[_0xd3c8c5(0x207)]):'null')+',\x0a\x20\x20\x20\x20\x20\x20workflowConfig:\x20'+(_0x2c7357['workflow']?JSON['stringify'](_0x2c7357['workflow']):_0xd3c8c5(0x257))+',\x0a\x20\x20\x20\x20\x20\x20uploadConfig:\x20'+(_0x2c7357[_0xd3c8c5(0x19a)]?JSON[_0xd3c8c5(0x18f)](_0x2c7357[_0xd3c8c5(0x19a)]):_0xd3c8c5(0x257))+',\x0a\x20\x20\x20\x20\x20\x20requestScope:\x20'+(_0x2c7357['requestScope']?JSON[_0xd3c8c5(0x18f)](_0x2c7357[_0xd3c8c5(0x20e)]):_0x3902a4[_0xd3c8c5(0x21d)])+_0xd3c8c5(0x150)+_0x184200+'/'+_0x2e7b56+_0xd3c8c5(0x29e)+_0x184200+'/'+_0x2e7b56+_0xd3c8c5(0x224)+_0x184200+'/'+_0x2e7b56+'\x20but\x20components\x20are\x20configured:`,\x20e.message);\x0a\x20\x20\x20\x20throw\x20e;\x0a\x20\x20}\x0a\x20\x20//\x20Jika\x20tidak\x20ada\x20components,\x20silent\x20skip\x20wajar\x0a\x20\x20console.log(`No\x20component\x20engine\x20required\x20for\x20'+_0x184200+'/'+_0x2e7b56+',\x20running\x20without\x20events`);\x0a}\x0a\x0a/**\x0a\x20*\x20'+_0x5beb5d+_0xd3c8c5(0x1e9)+_0x8e811b+'\x0a\x20*\x0a\x20*\x20Endpoints\x20untuk\x20'+_0x2e7b56+'\x20dengan\x20actions:\x20'+getEnabledActions(_0x2c7357)[_0xd3c8c5(0x266)](',\x20')+'\x0a\x20*\x20Table:\x20'+_0x2c7357['tableName']+'\x0a\x20*\x20Fields:\x20'+(_0x2c7357[_0xd3c8c5(0x126)]?_0x2c7357['fieldName']['length']:0x0)+_0xd3c8c5(0x191)+_0x184200+'/'+_0x2e7b56+'\x27\x20+\x20req.path\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Validasi\x20spesifik\x20untuk\x20endpoint\x20tertentu\x0a\x20\x20\x20\x20\x20\x20const\x20endpoint\x20=\x20req.path.substring(1);\x20//\x20menghapus\x20/\x20di\x20awal\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20get\x20membutuhkan\x20where\x20dalam\x20format\x20{key,\x20value}\x20atau\x20[{key,\x20value}]\x20(1\x20elemen)\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27first\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Normalize:\x20array\x201\x20elemen\x20->\x20object\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(Array.isArray(req.body.where)\x20&&\x20req.body.where.length\x20===\x201)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20req.body.where\x20=\x20req.body.where[0];\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!req.body.where\x20||\x20typeof\x20req.body.where\x20!==\x20\x27object\x27\x20||\x20Array.isArray(req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Where\x20must\x20be\x20a\x20single\x20condition\x20{key,\x20value}\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22select\x22:\x20[\x22field1\x22,\x20\x22field2\x22]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(req.body.where.conditions\x20||\x20req.body.where.logic)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Advanced\x20where\x20format\x20is\x20not\x20supported\x20in\x20/first\x20endpoint.\x20Use\x20/read\x20endpoint\x20for\x20complex\x20queries\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20{\x20\x22key\x22:\x20\x22field_name\x22,\x20\x22value\x22:\x20\x22field_value\x22\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20delete\x20membutuhkan\x20where\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27delete\x27\x20&&\x20(!req.body.where))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27DELETE\x20payload\x20must\x20include\x20a\x20where\x20property\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20example:\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22where\x22:\x20[{\x20\x22key\x22:\x20\x22id\x22,\x20\x22value\x22:\x20\x22your-id-value\x22\x20}]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20add\x20membutuhkan\x20data\x20yang\x20valid\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27add\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Filter\x20field\x20yang\x20memiliki\x20autoGenerate\x20dari\x20required\x20check\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20autoGenerateFields\x20=\x20'+(_0x2c7357['fieldValidation']?JSON[_0xd3c8c5(0x18f)](_0x2c7357[_0xd3c8c5(0x1d7)][_0xd3c8c5(0x296)](_0x5d3d0e=>_0x5d3d0e[_0xd3c8c5(0x167)]&&_0x5d3d0e[_0xd3c8c5(0x167)]['autoGenerate'])['map'](_0x2543d8=>_0x2543d8['name'])):'[]')+_0xd3c8c5(0x26a)+_0x2c7357[_0xd3c8c5(0x126)]['filter'](_0x242675=>_0x242675!=='id')[_0xd3c8c5(0x283)](0x0,0x1)[_0xd3c8c5(0x266)](_0xd3c8c5(0x1bd))+'\x27]\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20.filter(field\x20=>\x20!autoGenerateFields.includes(field));\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20missingFields\x20=\x20requiredFields.filter(field\x20=>\x20!req.body[field]\x20||\x20req.body[field]\x20===\x20\x27\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(missingFields.length\x20>\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Missing\x20required\x20fields\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20`Required\x20field(s):\x20${missingFields.join(\x27,\x20\x27)}`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Endpoint\x20update\x20membutuhkan\x20primary\x20key\x0a\x20\x20\x20\x20\x20\x20if\x20(endpoint\x20===\x20\x27update\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20primaryKey\x20=\x20\x27'+(_0x2c7357[_0xd3c8c5(0x24e)]||'id')+_0xd3c8c5(0x1b6)+buildRequestScopeMiddleware(_0x2c7357,_0x2e7b56)+'\x0a'+_0x72eb4f+'\x0a\x0a'+(_0x2c7357['action']?.['info']!==![]?_0xd3c8c5(0x239)+JSON[_0xd3c8c5(0x18f)]({'datatables':!!_0x2c7357[_0xd3c8c5(0x153)]?.['datatables'],'read':!!_0x2c7357[_0xd3c8c5(0x153)]?.['read'],'first':!!_0x2c7357['action']?.[_0xd3c8c5(0x222)],'create':!!_0x2c7357['action']?.['create'],'update':!!_0x2c7357['action']?.['update'],'delete':!!_0x2c7357['action']?.['delete'],'lookup':!!_0x2c7357['action']?.['lookup'],'export':!!_0x2c7357['action']?.['export'],'import':!!_0x2c7357['action']?.['import'],'workflow':!!_0x2c7357['action']?.['workflow'],'info':_0x2c7357['action']?.[_0xd3c8c5(0x149)]!==![]})+';\x0a\x0a\x20\x20\x20\x20const\x20modelInfo\x20=\x20await\x20'+_0x5492ee+_0xd3c8c5(0x11d)+_0x2e7b56+_0xd3c8c5(0x28a)+_0x184200+_0xd3c8c5(0x249)+_0x8e811b+_0xd3c8c5(0x1e4)+_0x2e7b56+'\x20info:\x27,\x20error);\x0a\x20\x20\x20\x20res.status(500).json({\x0a\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20error:\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20message:\x20\x27An\x20error\x20occurred\x20while\x20fetching\x20endpoint\x20information\x27,\x0a\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a});':_0x3902a4[_0xd3c8c5(0x1ac)])+'\x0a\x0a//\x20Health\x20check\x20endpoint\x0arouter.get(\x27/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20res.json({\x0a\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20endpoint:\x20\x27'+_0x2e7b56+_0xd3c8c5(0x170);}function a0_0x4955(_0x2c5200,_0x2071ad){_0x2c5200=_0x2c5200-0x119;const _0x29c4d1=a0_0x29c4();let _0x49559f=_0x29c4d1[_0x2c5200];if(a0_0x4955['mvmBGO']===undefined){var _0xad8bdb=function(_0x348b86){const _0x525032='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5ac59a='',_0x5905cc='';for(let _0x251d6e=0x0,_0x4dcf94,_0x4584d8,_0x48fd10=0x0;_0x4584d8=_0x348b86['charAt'](_0x48fd10++);~_0x4584d8&&(_0x4dcf94=_0x251d6e%0x4?_0x4dcf94*0x40+_0x4584d8:_0x4584d8,_0x251d6e++%0x4)?_0x5ac59a+=String['fromCharCode'](0xff&_0x4dcf94>>(-0x2*_0x251d6e&0x6)):0x0){_0x4584d8=_0x525032['indexOf'](_0x4584d8);}for(let _0x473dbe=0x0,_0x44e139=_0x5ac59a['length'];_0x473dbe<_0x44e139;_0x473dbe++){_0x5905cc+='%'+('00'+_0x5ac59a['charCodeAt'](_0x473dbe)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5905cc);};a0_0x4955['ublnHE']=_0xad8bdb,a0_0x4955['SnCBsI']={},a0_0x4955['mvmBGO']=!![];}const _0x285a0e=_0x29c4d1[0x0],_0x4fb893=_0x2c5200+_0x285a0e,_0xe436c5=a0_0x4955['SnCBsI'][_0x4fb893];return!_0xe436c5?(_0x49559f=a0_0x4955['ublnHE'](_0x49559f),a0_0x4955['SnCBsI'][_0x4fb893]=_0x49559f):_0x49559f=_0xe436c5,_0x49559f;}function createPostgresMainModuleTemplate(_0x386b93){const _0x3ef588=a0_0x4955,_0x26ac56=FileUtils['toPascalCase'](_0x386b93),_0x1e3607=FileUtils[_0x3ef588(0x159)](_0x386b93),_0x471878=new Date()['toISOString']()['replace']('T','\x20')['replace'](/\.\d{3}Z$/,'');return'const\x20express\x20=\x20require(\x27express\x27);\x0aconst\x20bodyParser\x20=\x20require(\x27body-parser\x27);\x0aconst\x20path\x20=\x20require(\x27path\x27);\x0aconst\x20fs\x20=\x20require(\x27fs\x27);\x0aconst\x20{\x20v7:\x20uuidv7\x20}\x20=\x20require(\x27uuid\x27);\x0aconst\x20{\x20logger,\x20logServerReady,\x20logEndpointRegistered,\x20createRequestLogger,\x20logRequest\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/logger\x27);\x0aconst\x20ExportHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/export_handler\x27);\x0aconst\x20ImportHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/import_handler\x27);\x0aconst\x20UploadHandler\x20=\x20require(\x27@restforgejs/platform/src/components/handlers/upload_handler\x27);\x0aconst\x20{\x20extractExportConfigFromEndpoint,\x20extractImportConfigFromEndpoint,\x20extractUploadConfigFromEndpoint\x20}\x20=\x20require(\x27@restforgejs/platform/src/utils/config-extractor\x27);\x0aconst\x20rateLimiter\x20=\x20require(\x27@restforgejs/platform/src/middleware/rate-limiter\x27);\x0aconst\x20idempotencyMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/idempotency\x27);\x0aconst\x20bodyOptionsMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/body-options\x27);\x0aconst\x20corsMiddleware\x20=\x20require(\x27@restforgejs/platform/src/middleware/cors\x27);\x0aconst\x20securityHeaders\x20=\x20require(\x27@restforgejs/platform/src/middleware/security-headers\x27);\x0a\x0a/**\x0a\x20*\x20'+_0x26ac56+'\x20Module\x20-\x20Auto-generated\x20on\x20'+_0x471878+_0x3ef588(0x243)+_0x386b93+'\x0a\x20*\x20@param\x20{Object}\x20config\x20-\x20Konfigurasi\x20untuk\x20menjalankan\x20modul\x0a\x20*\x20@param\x20{number}\x20config.port\x20-\x20Port\x20untuk\x20server\x0a\x20*\x20@param\x20{string}\x20config.key\x20-\x20API\x20Key\x20(opsional)\x0a\x20*\x20@param\x20{boolean}\x20config.cors\x20-\x20Enable\x20CORS\x20(default:\x20true)\x0a\x20*\x20@param\x20{boolean}\x20config.logging\x20-\x20Enable\x20request\x20logging\x20(default:\x20true)\x0a\x20*\x20@returns\x20{Promise<void>}\x20Promise\x20yang\x20tidak\x20pernah\x20resolve\x20agar\x20server\x20tetap\x20berjalan\x0a\x20*/\x0aasync\x20function\x20execute(config)\x20{\x0a\x20\x20return\x20new\x20Promise((resolve,\x20reject)\x20=>\x20{\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20app\x20=\x20express();\x0a\x20\x20\x20\x20\x20\x20const\x20port\x20=\x20config.port\x20||\x203000;\x0a\x20\x20\x20\x20\x20\x20const\x20serverAddress\x20=\x20config.serverAddress\x20||\x20\x270.0.0.0\x27;\x20//\x20Default\x200.0.0.0\x20untuk\x20backward\x20compatibility\x0a\x20\x20\x20\x20\x20\x20const\x20moduleNameCapitalized\x20=\x20\x27'+_0x26ac56+_0x3ef588(0x1f7)+_0x386b93+'\x27;\x0a\x20\x20\x20\x20\x20\x20const\x20pluginPath\x20=\x20path.join(__dirname,\x20\x27..\x27,\x20\x27plugins\x27,\x20`${moduleName}-plugin.js`);\x0a\x20\x20\x20\x20\x20\x20let\x20plugin\x20=\x20null;\x0a\x20\x20\x20\x20\x20\x20if\x20(fs.existsSync(pluginPath))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20plugin\x20=\x20require(pluginPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(plugin.onBeforeEndpointsLoad)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20plugin.onBeforeEndpointsLoad(app,\x20config);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x20event:\x20\x27plugin_loaded\x27,\x20plugin:\x20`${moduleName}-plugin`\x20},\x20`Plugin\x20loaded:\x20${moduleName}-plugin.js`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(pluginError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27plugin_load_error\x27,\x20error:\x20pluginError.message\x20},\x20`Failed\x20to\x20load\x20plugin:\x20${moduleName}-plugin.js`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Global\x20health\x20check\x20endpoint\x20(tanpa\x20prefix\x20module)\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20healthInfo\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString().replace(\x27T\x27,\x20\x27\x20\x27).replace(/\x5c.\x5cd{3}Z$/,\x20\x27\x27),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20service:\x20\x27'+_0x386b93+_0x3ef588(0x122)+_0x386b93+'/health\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20healthInfo\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20status:\x20\x27ok\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString().replace(\x27T\x27,\x20\x27\x20\x27).replace(/\x5c.\x5cd{3}Z$/,\x20\x27\x27),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20service:\x20\x27'+_0x386b93+_0x3ef588(0x287)+_0x386b93+_0x3ef588(0x14f)+_0x26ac56+'\x20API\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20description:\x20\x27Auto-generated\x20API\x20module\x20for\x20'+_0x386b93+'\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20documentation:\x20\x27See\x20individual\x20endpoint\x20documentation\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20generated:\x20\x27'+_0x471878+_0x3ef588(0x19e)+_0x386b93+_0x3ef588(0x175)+_0x386b93+_0x3ef588(0x1b8)+_0x386b93+'/${endpointName}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20app.use(endpointPrefix,\x20endpointRouter);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logEndpointRegistered(endpointName,\x20endpointPrefix);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Register\x20export\x20routes\x20untuk\x20endpoint\x20ini\x20(auto-detect\x20dari\x20embedded\x20config)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20exportConfig\x20=\x20extractExportConfigFromEndpoint(endpointPath);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(exportConfig)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ExportHandler.registerRoutes(app,\x20\x27'+_0x386b93+_0x3ef588(0x1f4)+_0x386b93+_0x3ef588(0x28c)+_0x386b93+'\x27,\x20endpointName,\x20uploadConfig);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.info({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27upload_routes_registered\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fields:\x20Object.keys(uploadConfig.fields\x20||\x20{})\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Upload\x20routes\x20registered\x20for\x20${endpointName}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(uploadError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20event:\x20\x27upload_registration_error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20endpoint:\x20endpointName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20uploadError.message\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20},\x20`Upload\x20registration\x20failed\x20for\x20${endpointName}:\x20${uploadError.message}`);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(endpointError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20loading\x20endpoint\x20${file}:`,\x20endpointError.message);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Continue\x20loading\x20other\x20endpoints\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(dirError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20reading\x20modules\x20directory\x20${modulesDir}:`,\x20dirError.message);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Register\x20cleanup\x20route\x20(optional\x20admin\x20endpoint)\x0a\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20ExportHandler.registerCleanupRoute(app);\x0a\x20\x20\x20\x20\x20\x20}\x20catch\x20(cleanupError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27cleanup_route_error\x27,\x20error:\x20cleanupError.message\x20},\x20\x27Export\x20cleanup\x20route\x20registration\x20failed\x27);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Default\x20root\x20endpoint\x0a\x20\x20\x20\x20\x20\x20app.get(\x27/\x27,\x20(req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Hook\x20untuk\x20mount\x20middleware\x20tambahan\x20sebelum\x20404\x20handler\x0a\x20\x20\x20\x20\x20\x20//\x20Digunakan\x20oleh\x20workbench\x20UI\x20dan\x20middleware\x20eksternal\x20lainnya\x0a\x20\x20\x20\x20\x20\x20if\x20(config.onAppReady\x20&&\x20typeof\x20config.onAppReady\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20config.onAppReady(app);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20404\x20handler\x20untuk\x20unknown\x20routes\x0a\x20\x20\x20\x20\x20\x20app.use((req,\x20res)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20res.status(403).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27Access\x20to\x20the\x20requested\x20resource\x20is\x20forbidden\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Global\x20error\x20handling\x20middleware\x0a\x20\x20\x20\x20\x20\x20app.use((err,\x20req,\x20res,\x20next)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Global\x20Error\x20Handler\x20-\x20${req.method}\x20${req.url}:`,\x20err);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20specific\x20error\x20types\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err\x20instanceof\x20SyntaxError\x20&&\x20err.status\x20===\x20400\x20&&\x20\x27body\x27\x20in\x20err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(400).json({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20\x27Invalid\x20JSON\x20payload\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20\x27The\x20payload\x20sent\x20is\x20not\x20a\x20valid\x20JSON\x20format\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20details:\x20err.message,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Handle\x20other\x20errors\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!res.headersSent)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20statusCode\x20=\x20err.statusCode\x20||\x20err.status\x20||\x20500;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20errorResponse\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20success:\x20false,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20error:\x20err.name\x20||\x20\x27Internal\x20Server\x20Error\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20message:\x20err.message\x20||\x20\x27An\x20error\x20occurred\x20on\x20the\x20server\x27,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20timestamp:\x20new\x20Date().toISOString()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Add\x20stack\x20trace\x20in\x20development\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(process.env.NODE_ENV\x20!==\x20\x27production\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20errorResponse.stack\x20=\x20err.stack;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20res.status(statusCode).json(errorResponse);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20next(err);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Start\x20server\x0a\x20\x20\x20\x20\x20\x20const\x20server\x20=\x20app.listen(port,\x20serverAddress,\x20(err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Failed\x20to\x20start\x20${moduleNameCapitalized}\x20server:`,\x20err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reject(err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Determine\x20display\x20URL\x20based\x20on\x20serverAddress\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20displayHost\x20=\x20(serverAddress\x20===\x20\x270.0.0.0\x27\x20||\x20!serverAddress)\x20?\x20\x27localhost\x27\x20:\x20serverAddress;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20logServerReady({\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20port,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module:\x20\x27'+_0x386b93+_0x3ef588(0x157)+_0x386b93+'/health`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20serviceInfo:\x20`http://${displayHost}:${port}/api/'+_0x386b93+'/info`,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20baseUrl:\x20`http://${displayHost}:${port}`\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27\x27);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Execute\x20plugin\x20onAfterServerStart\x20hook\x20(jika\x20ada)\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(plugin\x20&&\x20plugin.onAfterServerStart)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20plugin.onAfterServerStart(app,\x20config);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(pluginError)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20logger.error({\x20event:\x20\x27plugin_after_start_error\x27,\x20error:\x20pluginError.message\x20},\x20\x27Plugin\x20onAfterServerStart\x20failed\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Graceful\x20shutdown\x20handling\x0a\x20\x20\x20\x20\x20\x20const\x20gracefulShutdown\x20=\x20(signal)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.log(`\x5cnReceived\x20${signal},\x20starting\x20graceful\x20shutdown...`);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20server.close((err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Error\x20during\x20server\x20shutdown:\x27,\x20err);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(1);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Server\x20closed\x20successfully\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.log(\x27Goodbye!\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Force\x20shutdown\x20after\x2010\x20seconds\x0a\x20\x20\x20\x20\x20\x20\x20\x20setTimeout(()\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Forced\x20shutdown\x20after\x20timeout\x27);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20process.exit(1);\x0a\x20\x20\x20\x20\x20\x20\x20\x20},\x2010000);\x0a\x20\x20\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Handle\x20shutdown\x20signals\x0a\x20\x20\x20\x20\x20\x20process.on(\x27SIGINT\x27,\x20()\x20=>\x20gracefulShutdown(\x27SIGINT\x27));\x0a\x20\x20\x20\x20\x20\x20process.on(\x27SIGTERM\x27,\x20()\x20=>\x20gracefulShutdown(\x27SIGTERM\x27));\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Handle\x20uncaught\x20exceptions\x0a\x20\x20\x20\x20\x20\x20process.on(\x27uncaughtException\x27,\x20(error)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Uncaught\x20Exception:\x27,\x20error);\x0a\x20\x20\x20\x20\x20\x20\x20\x20gracefulShutdown(\x27uncaughtException\x27);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20process.on(\x27unhandledRejection\x27,\x20(reason,\x20promise)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x27Unhandled\x20Rejection\x20at:\x27,\x20promise,\x20\x27reason:\x27,\x20reason);\x0a\x20\x20\x20\x20\x20\x20\x20\x20gracefulShutdown(\x27unhandledRejection\x27);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x0a\x20\x20\x20\x20\x20\x20//\x20Store\x20server\x20reference\x20untuk\x20testing/management\x0a\x20\x20\x20\x20\x20\x20if\x20(config.onServerReady\x20&&\x20typeof\x20config.onServerReady\x20===\x20\x27function\x27)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20config.onServerReady(server,\x20app);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20}\x20catch\x20(error)\x20{\x0a\x20\x20\x20\x20\x20\x20console.error(`Fatal\x20error\x20in\x20${moduleNameCapitalized}\x20module:`,\x20error);\x0a\x20\x20\x20\x20\x20\x20reject(error);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20//\x20Promise\x20tidak\x20akan\x20pernah\x20resolve\x20untuk\x20menjaga\x20server\x20tetap\x20berjalan\x0a\x20\x20\x20\x20//\x20kecuali\x20ada\x20error\x20atau\x20shutdown\x20signal\x0a\x20\x20});\x0a}\x0a\x0a//\x20Export\x20execute\x20function\x0amodule.exports\x20=\x20{\x20execute\x20};\x0a\x0a//\x20Additional\x20exports\x20untuk\x20testing\x20dan\x20management\x0amodule.exports.'+_0x1e3607+'\x20=\x20{\x20execute\x20};\x0amodule.exports.moduleName\x20=\x20\x27'+_0x386b93+'\x27;\x0amodule.exports.generated\x20=\x20\x27'+_0x471878+'\x27;';}module[a0_0x575d5c(0x253)]={'createPostgresModelTemplate':createPostgresModelTemplate,'createPostgresSubmoduleTemplate':createPostgresSubmoduleTemplate,'createPostgresMainModuleTemplate':createPostgresMainModuleTemplate};
|