From 05ca576499bb3f2696e9ddb0332d935da16681db Mon Sep 17 00:00:00 2001 From: rzrbld Date: Tue, 1 Dec 2020 10:54:57 +0300 Subject: [PATCH] minor fixes --- dist/minio-ng/main-es2015.js | 2 +- dist/minio-ng/main-es2015.js.map | 2 +- dist/minio-ng/main-es5.js | 2 +- dist/minio-ng/main-es5.js.map | 2 +- dist/minio-ng/scripts.js | 27979 ++++++++++++----------- dist/minio-ng/scripts.js.map | 2 +- dist/minio-ng/styles.css | 7 +- dist/minio-ng/styles.css.map | 2 +- dist/minio-ng/vendor-es2015.js | 13882 ++++++----- dist/minio-ng/vendor-es2015.js.map | 2 +- dist/minio-ng/vendor-es5.js | 15566 +++++++------ dist/minio-ng/vendor-es5.js.map | 2 +- package-lock.json | 1549 +- package.json | 46 +- src/app/app.component.html | 2 +- src/app/buckets/buckets.component.html | 14 +- 16 files changed, 29615 insertions(+), 29446 deletions(-) diff --git a/dist/minio-ng/main-es2015.js b/dist/minio-ng/main-es2015.js index 21aa240..aa9232b 100644 --- a/dist/minio-ng/main-es2015.js +++ b/dist/minio-ng/main-es2015.js @@ -1542,7 +1542,7 @@ FilterPipe = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("
\n
\n
\n

Buckets

\n
\n
\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n\t\n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n \n\t \n\t \t \n\t \n\t \n \n \n \n \n \n\t
NameTagsCreation DateSizeQuotaEventOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">\n {{buckets[b].name}}\n   \n {{buckets[b].policy}}\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">\n 0\">\n
    \n
  • {{tag}}: {{buckets[b].tags[tag]}}
  • \n
\n
\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">{{buckets[b].info.creationDate | date : \"dd/MM/yy HH:mm:ss\" }}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\">\n \n {{(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)+'').length > 3 ? math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024/1024)+' Gb' : isNaN(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)) ? '–' : math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024) +' Mb'}}\n \n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\">\n \n {{buckets[b].quota?.quotatype}}\n {{buckets[b].quota?.quotatype}}\n \n 0\" mdbTooltip=\"{{buckets[b].quota?.quota}} bytes\" placement=\"top\">\n {{(math.round(buckets[b].quota?.quota/1024/1024)+'').length > 3 ? math.round(buckets[b].quota?.quota/1024/1024/1024)+' Gb' : isNaN(math.round(buckets[b].quota?.quota/1024/1024)) ? '–' : math.round(buckets[b].quota?.quota/1024/1024) +' Mb'}}\n \n \n ∞\n \n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && serviceInfo?.sqsARN\">\n \n Lambda:\n \n {{c.Lambda}}
\n
    \n
  • \n {{e}}\n
  • \n
\n
\n
\n \n Topic:\n \n {{c.Topic}}
\n
    \n
  • \n {{e}}\n
  • \n
\n
\n
\n \n Queue:\n \n {{c.Queue}}
\n
    \n
  • \n {{e}}\n
  • \n
\n
\n
\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">\n\t \t \t \n\t \t \t \n\t \t \t \n\t \t \t \n \n \n\t \t
\n \n
\n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Bucket Lifecycyle

\n
\n
\n
\n
\n
\n This bucket already have a lifecycyle policy, you can export it as JSON by clicking on \"dowload icon\" >\n \n
\n Or override it by upload a new lifecycle policy.\n
\n
\n Lifecycle policy is structrured xml file. You can use examples from Minio\n documentation. Or use an AWS S3 documentation\n Object Lifecycle Management\n
\n
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n
\n
\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Bucket

\n
\n
\n Are you shure?
After you click on \"Delete\" button bucket {{bucketToDelete}} will be removed.\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Bucket Notifications

\n
\n
\n Are you shure?
After you click on \"remove\" button bucket {{bucketToRemoveNotifications}} notifications will be removed.\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Bucket Quota Limits

\n
\n
\n Are you shure?
After you click on \"remove\" button quota for bucket {{bucketToRemoveQuota}} will be removed.\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Encryption

\n
\n
\n Are you shure?
After you click on \"remove\" button encryption for bucket {{bucketToRemoveEncryption}} will be removed.\n
\n \n
\n
\n
\n\n\n\n\n
\n
\n
\n
\n \n

Create Bucket

\n
\n
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n You can pass multiple names with \",\" delimiter\n
\n
Policy
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
Encryption
\n

\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
Tags
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \t\t\t\t
\n
\n {{tag}}: {{newBucketTagsList[tag]}}\n
\n
Quota
\n \n\n
\n \n \t\t\t\t\t\t\t
\n\n
\n \n In \"fifo\" mode - old data automatically will be removed when you reach quota limit.
\n In \"hard\" mode - you can't add new data to bucket if quota limit reached.\n
\n\n
\n \t\t\t\t\t\n
\n
Bytes
\n
\n
\n
\n
\n
Events section
\n

\n
\n \t\t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Update Bucket

\n
\n
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
Policy
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n
Encryption
\n

\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
Tags
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \t\t\t\t
\n
\n {{tag}}: {{newBucketTagsList[tag]}}\n
\n
\n
Quota section
\n \n
\n \n \t\t\t\t\t\t\t
\n\n
\n \n In \"fifo\" mode - old data automatically will be removed when you reach quota limit.
\n In \"hard\" mode - you can't add new data to bucket if quota limit reached.\n
\n\n
\n \t\t\t\t\t\n
\n
Bytes
\n
\n
\n
\n
\n
Events section
\n

\n
\n \t\t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
\n
\n \n
\n
\n
\n"); +/* harmony default export */ __webpack_exports__["default"] = ("
\n
\n
\n

Buckets

\n
\n
\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n\t\n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n \n\t \n\t \t \n\t \n\t \n \n \n \n \n \n\t
NameTagsCreation DateSizeQuotaEventOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">\n {{buckets[b].name}}\n   \n {{buckets[b].policy}}\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">\n 0\">\n
    \n
  • {{tag}}: {{buckets[b].tags[tag]}}
  • \n
\n
\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">{{buckets[b].info.creationDate | date : \"dd/MM/yy HH:mm:ss\" }}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\">\n \n {{(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)+'').length > 3 ? math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024/1024)+' Gb' : isNaN(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)) ? '–' : math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024) +' Mb'}}\n \n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\">\n \n {{buckets[b].quota?.quotatype}}\n {{buckets[b].quota?.quotatype}}\n \n 0\" mdbTooltip=\"{{buckets[b].quota?.quota}} bytes\" placement=\"top\">\n {{(math.round(buckets[b].quota?.quota/1024/1024)+'').length > 3 ? math.round(buckets[b].quota?.quota/1024/1024/1024)+' Gb' : isNaN(math.round(buckets[b].quota?.quota/1024/1024)) ? '–' : math.round(buckets[b].quota?.quota/1024/1024) +' Mb'}}\n \n \n ∞\n \n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && serviceInfo?.sqsARN\">\n \n Lambda:\n \n {{c.Lambda}}
\n
    \n
  • \n {{e}}\n
  • \n
\n
\n
\n \n Topic:\n \n {{c.Topic}}
\n
    \n
  • \n {{e}}\n
  • \n
\n
\n
\n \n Queue:\n \n {{c.Queue}}
\n
    \n
  • \n {{e}}\n
  • \n
\n
\n
\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">\n\t \t \t \n\t \t \t \n\t \t \t \n\t \t \t \n \n \n\t \t
\n \n
\n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Bucket Lifecycyle

\n
\n
\n
\n
\n
\n This bucket already have a lifecycyle policy, you can export it as JSON by clicking on \"dowload icon\" >\n \n
\n Or override it by upload a new lifecycle policy.\n
\n
\n Lifecycle policy is structrured xml file. You can use examples from Minio\n documentation. Or use an AWS S3 documentation\n Object Lifecycle Management\n
\n
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n
\n
\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Bucket

\n
\n
\n Are you shure?
After you click on \"Delete\" button bucket {{bucketToDelete}} will be removed.\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Bucket Notifications

\n
\n
\n Are you shure?
After you click on \"remove\" button bucket {{bucketToRemoveNotifications}} notifications will be removed.\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Bucket Quota Limits

\n
\n
\n Are you shure?
After you click on \"remove\" button quota for bucket {{bucketToRemoveQuota}} will be removed.\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Encryption

\n
\n
\n Are you shure?
After you click on \"remove\" button encryption for bucket {{bucketToRemoveEncryption}} will be removed.\n
\n \n
\n
\n
\n\n\n\n\n
\n
\n
\n
\n \n

Create Bucket

\n
\n
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n You can pass multiple names with \",\" delimiter\n
\n
Policy
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
Encryption
\n

\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
Tags
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \t\t\t\t
\n
\n {{tag}}: {{newBucketTagsList[tag]}}\n
\n
Quota
\n \n\n
\n \n \t\t\t\t\t\t\t
\n\n
\n \n In \"fifo\" mode - old data automatically will be removed when you reach quota limit.
\n In \"hard\" mode - you can't add new data to bucket if quota limit reached.\n
\n\n
\n \t\t\t\t\t\n
\n
Bytes
\n
\n
\n
\n
\n
Events section
\n

\n
\n \t\t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Update Bucket

\n
\n
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
Policy
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n
Encryption
\n

\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
Tags
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \t\t\t\t
\n
\n {{tag}}: {{newBucketTagsList[tag]}}\n
\n
\n
Quota section
\n \n
\n \n \t\t\t\t\t\t\t
\n\n
\n \n In \"fifo\" mode - old data automatically will be removed when you reach quota limit.
\n In \"hard\" mode - you can't add new data to bucket if quota limit reached.\n
\n\n
\n \t\t\t\t\t\n
\n
Bytes
\n
\n
\n
\n
\n
Events section
\n

\n
\n \t\t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
\n
\n \n
\n
\n
\n"); /***/ }), diff --git a/dist/minio-ng/main-es2015.js.map b/dist/minio-ng/main-es2015.js.map index 05735bb..68a1c51 100644 --- a/dist/minio-ng/main-es2015.js.map +++ b/dist/minio-ng/main-es2015.js.map @@ -1 +1 @@ -{"version":3,"sources":["./src/app/loader/loader.component.html","./src/app/loader.service.ts","./src/app/loader.interceptor.ts","./src/app/loader/loader.component.scss","./src/app/groups/groups.component.scss","./src/environments/environment.ts","./src/app/buckets/buckets.component.ts","./src/app/server/server.component.ts","./src/app/groups/groups.component.html","./src/app/app.component.ts","./src/app/server/server.component.scss","./src/app/app.component.html","./src/app/app.module.ts","./src/app/buckets/buckets.component.scss","./src/app/env.service.provider.ts","./src/app/users/users.component.scss","./src/app/groups/groups.component.ts","./src/app/filter.pipe.ts","./src/app/buckets/buckets.component.html","./src/app/loader/loader.component.ts","./src/app/policies/policies.component.html","./src/app/users/users.component.ts","./src/app/policies/policies.component.ts","./src/app/server/server.component.html","./src/app/policies/policies.component.scss","./src/app/env.service.ts","./src/app/users/users.component.html","./src/app/app-routing.module.ts","./src/app/api.service.ts","./src/app/app.component.scss","./src/main.ts","./$_lazy_route_resource lazy namespace object"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAe,ylBAA0hB,E;;;;;;;;;;;;;;;;;;ACAziB,mBAAmB;AACwB;AACJ;IAK1B,aAAa,SAAb,aAAa;IAGxB;QAFO,YAAO,GAAG,KAAK;QACf,cAAS,GAAG,IAAI,oDAAe,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;CAClB;;AAJY,aAAa;IAHzB,gEAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;GACW,aAAa,CAIzB;AAJyB;;;;;;;;;;;;;;;;;;;;;ACP1B,yBAAyB;AACkB;AAQb;AACI;AACe;IAGpC,iBAAiB,SAAjB,iBAAiB;IAG1B,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAFxC,aAAQ,GAAuB,EAAE,CAAC;IAEU,CAAC;IAErD,aAAa,CAAC,GAAqB;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,EAAE;YACR,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC9B;QACD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,SAAS,CAAC,GAAqB,EAAE,IAAiB;QAC9C,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;YACd,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;QACnC,OAAO,+CAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;YAChC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;iBAChC,SAAS,CACN,KAAK,CAAC,EAAE;gBACJ,IAAI,KAAK,YAAY,iEAAY,EAAE;oBAC/B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;oBACxB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACxB;YACL,CAAC,EACD,GAAG,CAAC,EAAE;gBACF,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;gBAClC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBACxB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC,EACD,GAAG,EAAE;gBACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBACxB,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC,CAAC,CAAC;YACX,2CAA2C;YAC3C,OAAO,GAAG,EAAE;gBACR,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBACxB,YAAY,CAAC,WAAW,EAAE,CAAC;YAC/B,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;;YAhDQ,6DAAa;;AAGT,iBAAiB;IAD7B,gEAAU,EAAE;GACA,iBAAiB,CA6C7B;AA7C6B;;;;;;;;;;;;;ACd9B;AAAe,wEAAS,iBAAiB,GAAG,8BAA8B,mCAAmC,GAAG,sBAAsB,mCAAmC,GAAG,6CAA6C,uZAAuZ,E;;;;;;;;;;;;ACAhnB;AAAe,6GAA8C,2HAA2H,E;;;;;;;;;;;;ACAxL;AAAA;AAAO,MAAM,WAAW,GAAG;IACzB,UAAU,EAAE,KAAK;CAClB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;ACF2G;AAC3B;AACtC;AAC0C;AAC3C;IAS9B,gBAAgB,SAAhB,gBAAgB;IA8D3B,YAAoB,UAAsB,EAAU,KAAwB,EAAU,MAAqB,EAAU,SAAuB;QAAxH,eAAU,GAAV,UAAU,CAAY;QAAU,UAAK,GAAL,KAAK,CAAmB;QAAU,WAAM,GAAN,MAAM,CAAe;QAAU,cAAS,GAAT,SAAS,CAAc;QA7D5I,SAAI,GAAG,IAAI,CAAC;QACZ,eAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,UAAK,GAAa,MAAM,CAAC,KAAK,CAAC;QAC/B,YAAO,GAAG,EAAE,CAAC;QAKb,gCAA2B,GAAG,KAAK,CAAC;QAEpC,kBAAa,GAAG,EAAE,CAAC;QACnB,gBAAW,GAAG,KAAK,CAAC;QACpB,uBAAkB,GAAG,EAAE,CAAC;QACxB,mBAAc,GAAG,EAAE,CAAC;QACpB,eAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAG9B,wBAAmB,GAAG,EAAE,CAAC;QACzB,oBAAe,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxC,yBAAoB,GAAG,EAAE,CAAC;QAC1B,sBAAiB,GAAG,EAAE,CAAC;QACvB,yBAAoB,GAAG,EAAE,CAAC;QAC1B,kCAA6B,GAAG,EAAE,CAAC;QACnC,kCAA6B,GAAG,EAAE,CAAC;QACnC,yBAAoB,GAAG,EAAE,CAAC;QAC1B,8BAAyB,GAAG,EAAE,CAAC;QAC/B,2BAAsB,GAAG,KAAK,CAAC;QAC/B,uBAAkB,GAAG,KAAK,CAAC;QAE3B,oBAAe,GAAG,MAAM,CAAC;QACzB,8BAA8B;QAC9B,gBAAW,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjE,4BAAuB,GAAG,KAAK,CAAC;QAKhC,2BAAsB,GAAG,EAAE,CAAC;QAC5B,uBAAkB,GAAG,EAAE,CAAC;QACxB,+BAA0B,GAAG,EAAE,CAAC;QAChC,+BAA0B,GAAG,EAAE,CAAC;QAChC,+BAA0B,GAAG,EAAE,CAAC;QAChC,qBAAgB,GAAG,EAAE,CAAC;QACtB,sBAAiB,GAAG,EAAE,CAAC;QACvB,sBAAiB,GAAG,EAAE,CAAC;QAEvB,mBAAc,GAAG,KAAK,CAAC;QAOvB,+BAA0B,GAAG,CAAC,CAAC;QAM/B,eAAU,GAAW,EAAE,CAAC;IAEwH,CAAC;IAE1H,OAAO;QAC5B,IAAG,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAC;YAC7G,IAAI,CAAC,WAAW,EAAE,CAAC;SACrB;IACH,CAAC;IAKD,QAAQ;QACP,IAAI,CAAC,UAAU,EAAE;QAChB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,WAAW,EAAE;QAElB,IAAI,CAAC,sBAAsB,GAAG;YAC7B,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,KAAK,EAAC;YACzB,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,KAAK,EAAC;YACzB,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,QAAQ,EAAC;SAC5B,CAAC;QAEF,IAAI,CAAC,0BAA0B,GAAG;YAClC,eAAe,EAAE,KAAK;YACtB,IAAI,EAAC,oBAAoB;YACzB,aAAa,EAAC,YAAY;YAC1B,eAAe,EAAC,cAAc;YAC9B,kBAAkB,EAAE,IAAI;YACtB,OAAO,EAAE,aAAa;SACxB,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,sBAAsB,CAAC,IAAQ;QAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACzC,CAAC;IACD,wBAAwB,CAAC,IAAQ;QAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACzC,CAAC;IACD,qBAAqB,CAAC,KAAU;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,uBAAuB,CAAC,KAAU;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAEQ,eAAe;QACrB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1E,CAAC;IAED,mCAAmC;IACnC,+FAA+F;IAC/F,IAAI;IAEI,aAAa;QACnB,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC7C,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW;QAClB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAE3C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;SAC9C;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACnC;IACH,CAAC;IAED,eAAe;QACX,IAAI,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAEvD,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,EAAE,CAAC;QAClD,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC/B,CAAC;IAEO,UAAU;QACjB,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YACpD,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAC,IAAI,CAAC,CAAC;YACnC,IAAG,IAAI,KAAG,IAAI,EAAC;gBACb,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;aACrB;iBAAI;gBACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;aACnB;YACD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB,CAAC,UAAU;QACrC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;IAClC,CAAC;IAEO,+BAA+B,CAAC,UAAU;QACjD,IAAI,CAAC,2BAA2B,GAAG,UAAU,CAAC;IAC/C,CAAC;IAEO,mBAAmB,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW;QAC7E,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QAEjC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YACzD,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAElB,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,IAAG,QAAQ,CAAC,CAAC,CAAC,IAAE,OAAO,EAAC;gBACtB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;aAC/B;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAChE,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAElB,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,IAAG,QAAQ,CAAC,CAAC,CAAC,IAAE,OAAO,EAAC;gBACtB,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;gBACtC,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC;gBACtE,IAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAC;oBACjD,IAAI,CAAC,yBAAyB,GAAG,QAAQ;iBAC1C;qBAAI;oBACH,IAAI,CAAC,yBAAyB,GAAG,SAAS;iBAC3C;aACF;iBAAI;gBACH,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC;aACrC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC3D,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAElB,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,IAAG,QAAQ,CAAC,CAAC,CAAC,IAAE,OAAO,EAAC;gBACtB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;aAClC;iBAAI;gBACH,IAAI,SAAS,GAAG;oBACd,SAAS,EAAE,EAAE;iBACd,CAAC;gBACF,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;aACvC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC5D,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,wBAAwB,CAAC,UAAU;QACzC,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC;IACxC,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;IACrC,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;IACtC,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;IAC1C,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACjC,CAAC;IAEO,6BAA6B,CAAC,UAAU;QAC9C,IAAI,CAAC,wBAAwB,GAAG,UAAU,CAAC;IAC7C,CAAC;IAEO,YAAY;QACnB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YACjE,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC;aAC3D;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,6BAA6B,CAAC,CAAC;aACxE;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,SAAS;QAChB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,2BAA2B,GAAG,KAAK,CAAC;QACzC,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,2BAA2B,GAAG,KAAK,CAAC;QACzC,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC;QACxC,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC;QACxC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACpC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACrC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,iBAAiB,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;QAC9C,IAAI,CAAC,gBAAgB,CAAC;QACtB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;IACjC,CAAC;IAEO,SAAS,CAAC,UAAU,EAAE,eAAe;QAC3C,IAAG,IAAI,CAAC,eAAe,IAAE,QAAQ,EAAC;YAChC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;gBAClF,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;oBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAC,IAAI,CAAC,eAAe,GAAC,sBAAsB,GAAC,UAAU,EAAE,SAAS,CAAC,CAAC;oBACjG,IAAG,eAAe,EAAC;wBACjB,IAAI,CAAC,UAAU,EAAE,CAAC;qBACnB;iBACF;qBAAI;oBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,6BAA6B,CAAC,CAAC;iBACxE;YACH,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;YAClC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE;gBACxB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAE5C,IAAI,gBAAgB,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC/F,OAAO,CAAC,GAAG,CAAC,aAAa,EAAC,gBAAgB,CAAC,CAAC;gBAC5C,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;oBAC9E,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;oBAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAClB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;wBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,mCAAmC,GAAC,UAAU,EAAE,SAAS,CAAC,CAAC;wBAC/E,IAAG,eAAe,EAAC;4BACjB,IAAI,CAAC,UAAU,EAAE,CAAC;yBACnB;qBACF;yBAAI;wBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,6BAA6B,CAAC,CAAC;qBACxE;gBACH,CAAC,CAAC,CAAC;YAEL,CAAC;YACD,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;SAC9C;IACH,CAAC;IAGO,YAAY;QACnB,IAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,GAAC,CAAC,CAAC,EAAC;YACrC,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAG,UAAU,CAAC,CAAC,CAAC,IAAE,EAAE,EAAC;oBACpB,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,iBAAiB,EAAC,IAAI,CAAC,kBAAkB,EAAC,IAAI,CAAC,cAAc,EAAC,IAAI,CAAC,eAAe,EAAC,IAAI,CAAC,mBAAmB,EAAC,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,CAAC;iBACxM;aACD;SACD;aAAI;YACJ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAC,IAAI,CAAC,iBAAiB,EAAC,IAAI,CAAC,kBAAkB,EAAC,IAAI,CAAC,cAAc,EAAC,IAAI,CAAC,eAAe,EAAC,IAAI,CAAC,mBAAmB,EAAC,IAAI,CAAC,oBAAoB,EAAC,CAAC,EAAC,CAAC,CAAC;SAC1L;IACF,CAAC;IAEO,eAAe,CAAC,MAAM;QAC5B,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC;IACpC,CAAC;IAEO,gBAAgB;QACtB,IAAG,IAAI,CAAC,gBAAgB,IAAI,EAAE,IAAI,IAAI,CAAC,iBAAiB,IAAI,EAAE,EAAC;YAC7D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACvE,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;SAC5B;IACH,CAAC;IAEO,mBAAmB,CAAC,OAAO;QACjC,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAEO,YAAY,CAAC,SAAS,EAAE,QAAQ;QACtC,IAAG,IAAI,CAAC,oBAAoB,IAAI,EAAE,EAAC;YACjC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC,6BAA6B,EAAE,IAAI,CAAC;SACxL;QAED,IAAG,IAAI,CAAC,cAAc,EAAC;YACrB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAC,IAAI,CAAC;SAChD;QAED,IAAG,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,kBAAkB,EAAC;YACxD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC;SACvE;QAED,IAAG,IAAI,CAAC,uBAAuB,EAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;SAC1C;QAED,IAAG,IAAI,CAAC,2BAA2B,EAAC;YAClC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC;SAC/G;IACH,CAAC;IAEO,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe;QACzG,IAAI,aAAa,GAAG,EAAE;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;SAC3C;QACD,IAAI,CAAC,UAAU,CAAC,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YACjI,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,GAAC,MAAM,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;gBACjF,IAAG,eAAe,EAAC;oBACjB,IAAI,CAAC,UAAU,EAAE,CAAC;iBACnB;aACF;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,wCAAwC,GAAC,MAAM,CAAE,CAAC;aAC3F;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB;QACrE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC5E,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,GAAC,MAAM,GAAC,eAAe,EAAE,SAAS,CAAC,CAAC;aAC5E;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kCAAkC,CAAC,CAAC;aAC7E;YACD,IAAG,gBAAgB,EAAC;gBAClB,IAAI,CAAC,UAAU,EAAE,CAAC;aACnB;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB;QACxB,IAAI,MAAM,GAAG,IAAI,CAAC,2BAA2B,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC3D,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,GAAC,MAAM,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;aACjF;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,oCAAoC,CAAC,CAAC;aAC/E;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB;QACrB,IAAI,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC1D,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,GAAC,MAAM,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;aAChF;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,mCAAmC,CAAC,CAAC;aAC9E;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,sBAAsB;QAC1B,IAAI,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC/D,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,wBAAwB,GAAC,MAAM,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;aACrF;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,wCAAwC,CAAC,CAAC;aACnF;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;IAGO,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB;QACxE,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAClF,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,wBAAwB,GAAC,MAAM,GAAC,eAAe,EAAE,SAAS,CAAC,CAAC;aACjF;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,uCAAuC,CAAC,CAAC;aAClF;YACD,IAAG,gBAAgB,EAAC;gBAClB,IAAI,CAAC,UAAU,EAAE,CAAC;aACnB;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAIO,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB;QACtI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YACpD,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,GAAC,MAAM,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;gBACtE,IAAG,QAAQ,IAAI,EAAE,EAAC;oBAChB,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;iBACtJ;gBACD,IAAG,SAAS,IAAI,EAAE,IAAI,QAAQ,IAAI,EAAE,IAAI,QAAQ,IAAI,CAAC,EAAC;oBACpD,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;iBAC5D;gBACD,IAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAC;oBAChD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC;iBACrC;gBACD,IAAG,IAAI,CAAC,uBAAuB,EAAC;oBAC9B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;iBAC9B;gBACD,IAAG,UAAU,IAAI,EAAE,EAAC;oBAClB,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC;iBACjE;aACF;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,6BAA6B,CAAC,CAAC;aACxE;YACD,IAAG,eAAe,IAAI,mBAAmB,EAAC;gBACxC,UAAU,CAAC,GAAE,EAAE;oBACX,IAAI,CAAC,UAAU,EAAE,CAAC;gBACtB,CAAC,EAAE,GAAG,CAAC,CAAC;aACT;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW,CAAC,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAE9B,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;QAC9C,IAAI,CAAC,mBAAmB,CAAC;QACzB,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC;IACtC,CAAC;IAEO,iBAAiB,CAAC,MAAM;QAC9B,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YACrD,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,6BAA6B;YAC7B,IAAG,IAAI,CAAC,OAAO,CAAC,EAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,+BAA+B,CAAC,CAAC;aAC1E;iBAAI;gBACH,IAAG,IAAI,IAAE,EAAE,EAAC;oBACV,iFAAiF;iBAClF;qBAAI;oBACH,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;oBAElD,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,+BAA+B,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC5H,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;iBAC7B;aACF;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe;QACrB,IAAI,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAClC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE;YACxB,IAAI,mBAAmB,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;YAClG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,EAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;gBAC3F,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;oBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,2CAA2C,GAAC,IAAI,CAAC,mBAAmB,GAAC,EAAE,EAAE,SAAS,CAAC,CAAC;iBACzG;qBAAI;oBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kCAAkC,CAAC,CAAC;iBAC7E;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAClD,CAAC;IAEO,gBAAgB,CAAC,MAAM,EAAC,gBAAgB;QAC9C,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACrC,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAC,GAAG,GAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;SACvB;QACD,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAChE,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,GAAC,MAAM,GAAC,eAAe,EAAE,SAAS,CAAC,CAAC;aAC3E;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,iCAAiC,CAAC,CAAC;aAC5E;YACD,IAAG,gBAAgB,EAAC;gBAClB,IAAI,CAAC,UAAU,EAAE,CAAC;aACnB;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,MAAM,EAAC,QAAQ;QACpC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YACxD,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAClD,IAAG,IAAI,CAAC,OAAO,CAAC,EAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,4BAA4B,CAAC,CAAC;aACvE;iBAAI;gBACH,IAAG,IAAI,IAAE,EAAE,EAAC;oBACV,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,4BAA4B,CAAC,CAAC;iBACzE;qBAAI;oBACH,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;oBACvC,IAAI,CAAC,IAAI,GAAG,+BAA+B,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC5F,IAAI,CAAC,QAAQ,GAAG,QAAQ;oBACxB,IAAI,CAAC,KAAK,EAAE,CAAC;iBACd;aACF;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CAIF;;YAxoBQ,uDAAU;YAFiD,+DAAiB;YAI5E,wDAAa;YAHb,sEAAY;;;iCAoElB,uDAAS,SAAC,gFAA2B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;uBACvD,uDAAS,SAAC,sEAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;sBAO7C,0DAAY,SAAC,OAAO;8BAMpB,uDAAS,SAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;AAtEvC,gBAAgB;IAL5B,+DAAS,CAAC;QACT,QAAQ,EAAE,aAAa;QACvB,oFAAuC;;KAExC,CAAC;GACW,gBAAgB,CA6nB5B;AA7nB4B;;;;;;;;;;;;;;;;;;;;;;;ACbqB;AACN;IAO/B,eAAe,SAAf,eAAe;IA6C1B,YAAoB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;QA3C1C,eAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,iBAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,SAAI,GAAG,IAAI,CAAC;QACZ,YAAO,GAAG,EAAE,CAAC;QAGb,gBAAW,GAAC,EAAE,CAAC;QACf,oBAAe,GAAC,CAAC,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAC,CAAC,CAAC;QACzD,kBAAa,GAAC,EAAE,CAAC;QACjB,gBAAW,GAAG,OAAO,CAAC;QACtB,kBAAa,GAAG;YACZ;gBACI,eAAe,EAAE,uBAAuB;gBACxC,WAAW,EAAE,qBAAqB;gBAClC,WAAW,EAAE,CAAC;gBACd,oBAAoB,EAAE,qBAAqB;gBAC3C,gBAAgB,EAAE,MAAM;gBACxB,yBAAyB,EAAE,MAAM;gBACjC,qBAAqB,EAAE,qBAAqB;aAC/C;SACJ,CAAC;QACF,mBAAc,GAAG;YACb,UAAU,EAAE,IAAI;SACnB,CAAC;QAEF,oBAAe,GAAC,CAAC,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAC,CAAC,CAAC;QAC/D,kBAAa,GAAC,EAAE,CAAC;QACjB,gBAAW,GAAG,KAAK,CAAC;QACpB,kBAAa,GAAG;YACZ;gBACI,eAAe,EAAE,uBAAuB;gBACxC,WAAW,EAAE,qBAAqB;gBAClC,WAAW,EAAE,CAAC;gBACd,oBAAoB,EAAE,qBAAqB;gBAC3C,gBAAgB,EAAE,MAAM;gBACxB,yBAAyB,EAAE,MAAM;gBACjC,qBAAqB,EAAE,qBAAqB;aAC/C;SACJ,CAAC;QACF,mBAAc,GAAG;YACb,UAAU,EAAE,IAAI;SACnB,CAAC;IAE4C,CAAC;IAE/C,QAAQ;QACP,IAAI,CAAC,UAAU,EAAE;QAChB,IAAI,CAAC,QAAQ,EAAE;IACjB,CAAC;IAEM,cAAc,CAAC,CAAM;IAC5B,CAAC;IAEM,cAAc,CAAC,CAAM;IAC5B,CAAC;IAEM,cAAc,CAAC,CAAM;IAC5B,CAAC;IAEM,cAAc,CAAC,CAAM;IAC5B,CAAC;IAEO,UAAU;QACjB,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC5C,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ;QACf,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAG,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,EAAC;gBAC9C,IAAI,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC;gBACrE,IAAI,mBAAmB,GAAG,EAAE,CAAC;gBAC7B,IAAI,mBAAmB,GAAG,EAAE,CAAC;gBAC7B,IAAG,qBAAqB,EAAC;oBACvB,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;oBACxD,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;iBAC3D;gBACD,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,mBAAmB,CAAC;gBAEnD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnD,IAAI,cAAc,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACjE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;iBACxC;aACF;YAED,IAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,IAAI,EAAE;gBAC1H,IAAI,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;gBACxD,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAC5D,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC;gBAC9D,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,qBAAqB,CAAC;gBACrD,IAAI,CAAC,aAAa,GAAE,qBAAqB,CAAC;aAC3C;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU,CAAC,GAAG;QACpB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACrB,CAAC;CAEF;;YAlHQ,uDAAU;;AAON,eAAe;IAL3B,+DAAS,CAAC;QACT,QAAQ,EAAE,YAAY;QACtB,mFAAsC;;KAEvC,CAAC;GACW,eAAe,CA2G3B;AA3G2B;;;;;;;;;;;;;ACR5B;AAAe,mHAAoD,+YAA+Y,YAAY,sxBAAsxB,oIAAoI,gBAAgB,4LAA4L,yEAAyE,kBAAkB,oHAAoH,kBAAkB,qOAAqO,QAAQ,+NAA+N,oCAAoC,2PAA2P,kCAAkC,u4BAAu4B,0CAA0C,8ZAA8Z,sBAAsB,wtCAAwtC,QAAQ,yaAAya,iBAAiB,8SAA8S,0BAA0B,2BAA2B,4RAA4R,0CAA0C,2lBAA2lB,eAAe,yaAAya,qTAAqT,0CAA0C,22BAA22B,E;;;;;;;;;;;;;;;;;;;;;;ACAr4Q;AACP;IAQ9B,YAAY,SAAZ,YAAY;IAGvB,YAAoB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;QAF1C,UAAK,GAAG,YAAY,CAAC;IAEyB,CAAC;IAE/C,QAAQ;QACP,IAAI,CAAC,eAAe,EAAE;IACvB,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAClD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;CACF;;YAvBQ,uDAAU;;AAQN,YAAY;IALxB,+DAAS,CAAC;QACT,QAAQ,EAAE,UAAU;QACpB,gFAAmC;;KAEpC,CAAC;GACW,YAAY,CAexB;AAfwB;;;;;;;;;;;;;ACTzB;AAAe,6GAA8C,2HAA2H,E;;;;;;;;;;;;ACAxL;AAAe,yJAA0F,gBAAgB,oBAAoB,wBAAwB,sBAAsB,uBAAuB,6BAA6B,0BAA0B,KAAK,eAAe,oBAAoB,KAAK,gBAAgB,+BAA+B,KAAK,gcAAgc,YAAY,yNAAyN,YAAY,6NAA6N,YAAY,mOAAmO,YAAY,+NAA+N,YAAY,wcAAwc,iBAAiB,6MAA6M,cAAc,IAAI,aAAa,kpBAAkpB,MAAM,iEAAiE,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAlkG;AACjB;AACe;AACT;AACW;AACD;AAC4C;AACzC;AACjB;AACuB;AACZ;AACmB;AACb;AACX;AACsC;AAC9B;AACM;AAChB;AACgC;AACrC;AACkB;AACA;IAmC/C,SAAS,SAAT,SAAS;CAAI;AAAb,SAAS;IA/BrB,8DAAQ,CAAC;QACR,YAAY,EAAE;YACZ,2DAAY;YACZ,qEAAc;YACd,wEAAe;YACf,uDAAU;YACV,+EAAiB;YACjB,yEAAe;YACf,4EAAgB;YAChB,yEAAe;SAChB;QACD,OAAO,EAAE;YACP,uEAAa;YACb,oEAAgB;YAChB,uEAAkB,CAAC,OAAO,EAAE;YAC5B,sEAAgB;YAChB,kEAAmB;YACnB,oEAAmB;YACnB,uFAAwB;YACxB,0DAAW;YACX,6DAAY;YACZ,6FAAuB;YACvB,wDAAY,CAAC,OAAO,EAAE;SACvB;QACD,SAAS,EAAE;YACT,yEAAkB;YAClB,8DAAa;YACb,EAAE,OAAO,EAAE,uEAAiB,EAAE,QAAQ,EAAE,sEAAiB,EAAE,KAAK,EAAE,IAAI,EAAE;SACzE;QACD,SAAS,EAAE,CAAC,2DAAY,CAAC;KAC1B,CAAC;GACW,SAAS,CAAI;AAAJ;;;;;;;;;;;;;ACxDtB;AAAe,6GAA8C,2HAA2H,E;;;;;;;;;;;;ACAxL;AAAA;AAAA;AAAA;AAA2C;AAEpC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACpC,aAAa;IACb,MAAM,GAAG,GAAG,IAAI,uDAAU,EAAE,CAAC;IAE7B,iDAAiD;IACjD,MAAM,aAAa,GAAG,MAAM,IAAI,EAAE,CAAC;IACnC,MAAM,gBAAgB,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAEtD,0DAA0D;IAC1D,gGAAgG;IAChG,iGAAiG;IACjG,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE;QAClC,IAAI,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YACxC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;SACjC;KACF;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,uDAAU;IACnB,UAAU,EAAE,iBAAiB;IAC7B,IAAI,EAAE,EAAE;CACT,CAAC;;;;;;;;;;;;;AC1BF;AAAe,6GAA8C,uHAAuH,E;;;;;;;;;;;;;;;;;;;;;;;;ACAvE;AACjE;AAC0C;AAC3C;IAS9B,eAAe,SAAf,eAAe;IAkCzB,YAAoB,UAAsB,EAAU,KAAwB,EAAU,MAAqB;QAAvF,eAAU,GAAV,UAAU,CAAY;QAAU,UAAK,GAAL,KAAK,CAAmB;QAAU,WAAM,GAAN,MAAM,CAAe;QAjC7G,eAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,QAAG,GAAG,IAAI,CAAC;QACX,WAAM,GAAG,EAAE,CAAC;QACZ,sBAAiB,GAAG,EAAE,CAAC;QACvB,UAAK,GAAG,EAAE,CAAC;QACX,gBAAW,GAAG,EAAE,CAAC;QACjB,kBAAa,GAAG,EAAE,CAAC;QACnB,iBAAY,GAAG,EAAE,CAAC;QAClB,mBAAc,GAAG,EAAE,CAAC;QACpB,mBAAc,GAAG,EAAE,CAAC;QAEpB,uBAAkB,GAAG,CAAC,SAAS,EAAC,UAAU,CAAC,CAAC;QAG5C,kBAAa,GAAG,KAAK,CAAC;QACtB,YAAO,GAAG,EAAE,CAAC;QACb,kBAAa,GAAG,EAAE,CAAC;QACnB,kBAAa,GAAG,EAAE,CAAC;QAInB,iBAAY,GAAG,EAAE,CAAC;QAClB,kBAAa,GAAG,EAAE,CAAC;QACnB,qBAAgB,GAAG,EAAE,CAAC;QAQtB,eAAU,GAAW,EAAE,CAAC;IAEyF,CAAC;IAEzF,OAAO;QAC/B,IAAG,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAC;YAC7G,IAAI,CAAC,WAAW,EAAE,CAAC;SACrB;QACD,IAAG,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,cAAc,EAAC;YACrH,IAAG,IAAI,CAAC,aAAa,EAAC;gBACpB,IAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAC;oBACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;oBAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;iBACtB;qBAAI;oBACH,IAAI,CAAC,aAAa,EAAE,CAAC;iBACtB;aACF;SACF;IACL,CAAC;IAED,QAAQ;QACP,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAEtB,IAAI,CAAC,YAAY,GAAG;YAChB,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,iCAAiC,EAAC;SACrD,CAAC;QAEF,IAAI,CAAC,gBAAgB,GAAG;YAC1B,eAAe,EAAE,KAAK;YACtB,IAAI,EAAC,gBAAgB;YACrB,aAAa,EAAC,YAAY;YAC1B,eAAe,EAAC,cAAc;YAC9B,kBAAkB,EAAE,IAAI;SACxB,CAAC;IACH,CAAC;IAED,YAAY,CAAC,IAAQ;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC;IACD,cAAc,CAAC,IAAQ;QACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC;IACD,WAAW,CAAC,KAAU;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,aAAa,CAAC,KAAU;QAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;SAC1D;QAEC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC5B,CAAC;IAEO,WAAW;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAE3C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;SAC7C;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACnC;IACF,CAAC;IAED,eAAe;QACb,IAAI,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAEvD,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,EAAE,CAAC;QAClD,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAEO,UAAU,CAAC,KAAK;QACvB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAG,KAAK,EAAC;YACP,IAAI,CAAC,oBAAoB,GAAG,YAAY;YACxC,IAAI,CAAC,yBAAyB,GAAG,QAAQ;SAC1C;aAAI;YACH,IAAI,CAAC,oBAAoB,GAAG,cAAc;YAC1C,IAAI,CAAC,yBAAyB,GAAG,QAAQ;SAC1C;IACF,CAAC;IAEO,aAAa;QACpB,IAAI,CAAC,oBAAoB,GAAG,YAAY;QACxC,IAAI,CAAC,yBAAyB,GAAG,MAAM;IACxC,CAAC;IAEO,SAAS,CAAC,GAAG;QACpB,mBAAmB;QAChB,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,SAAS,CAAC,GAAG;QACpB,qCAAqC;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;IAEO,UAAU,CAAC,GAAG;QACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IAGO,SAAS;QAChB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC7C,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAG,IAAI,KAAG,IAAI,EAAC;gBACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACxD,IAAI,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;wBACpE,IAAG,IAAI,KAAG,IAAI,EAAC;4BACd,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;4BACjC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;4BAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;yBAChD;oBACF,CAAC,CAAC,CAAC;iBACH;gBACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC;aACnC;QAGH,CAAC,CAAC,CAAC;IACJ,CAAC;IACO,cAAc;QACrB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC5C,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,IAAG,IAAI,KAAG,IAAI,EAAC;gBACd,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,CAAC,EAAC,UAAU,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC;aACvF;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,KAAK;QAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAClB,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC5D,IAAG,IAAI,KAAG,IAAI,EAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBACjB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;gBAChC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAChD,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAC,IAAI,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC;iBAChE;aACD;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,iBAAiB;QACxB,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC/C,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC3C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,SAAS;QAChB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC1B,CAAC;IAEO,iBAAiB,CAAC,KAAK;QAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAEtC,IAAI,CAAC,aAAa,GAAG,KAAK;IAC3B,CAAC;IAEO,WAAW;QAClB,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAC,EAAE,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAChF,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC1C,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAC,IAAI,CAAC,YAAY,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;gBAChF,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;gBAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;aACrB;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,4BAA4B,CAAC,CAAC;gBAC1E,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;aACrB;QACH,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,gBAAgB;QAEvB,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAC,IAAI,CAAC,aAAa,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC/F,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC1C,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAC,IAAI,CAAC,YAAY,GAAC,2BAA2B,EAAE,SAAS,CAAC,CAAC;gBACxF,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;aACzB;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,yCAAyC,CAAC,CAAC;aACpF;QACH,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,YAAY;QACnB,IAAG,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,EAAE,EAAC;YACzD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAC,IAAI,CAAC,YAAY,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;gBAC3F,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;gBACzC,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;oBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAC,IAAI,CAAC,YAAY,GAAC,0BAA0B,GAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;iBAC5G;qBAAI;oBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,qCAAqC,CAAC,CAAC;iBAChF;YACH,CAAC,CAAC,CAAC;SACH;IACL,CAAC;IAEO,YAAY;QACnB,IAAG,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,EAAE,EAAC;YACzD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;gBACzF,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;gBACzC,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;oBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAC,IAAI,CAAC,YAAY,GAAC,0BAA0B,GAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;iBAC5G;qBAAI;oBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,qCAAqC,CAAC,CAAC;iBAChF;YACH,CAAC,CAAC,CAAC;SACH;IACL,CAAC;IAEO,WAAW;QAClB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC;IAClB,CAAC;IAEO,WAAW;QAClB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QAClC,IAAI,UAAU,GAAG,EAAE;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;SAC/C;QAED,yBAAyB;QACzB,OAAO,CAAC,GAAG,CAAC,eAAe,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEhD,IAAG,IAAI,CAAC,aAAa,KAAG,IAAI,IAAI,IAAI,CAAC,aAAa,IAAE,EAAE,IAAI,IAAI,CAAC,aAAa,EAAC;YAC5E,IAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAC;gBAChC,IAAI,CAAC,gBAAgB,EAAE;aACvB;SACD;QAED,4BAA4B;QAC5B,IAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAC;YACxB,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAC,UAAU,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;gBACxF,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;gBAC1C,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;oBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAC,IAAI,CAAC,YAAY,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;iBACjF;qBAAI;oBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,4BAA4B,CAAC,CAAC;iBACvE;gBACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC,CAAC,CAAC;SACJ;aAAI;YACJ,IAAI,CAAC,WAAW,EAAE,CAAC;SACnB;QACC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC3B,CAAC;CAED;;YAzUQ,uDAAU;YADiD,+DAAiB;YAG5E,wDAAa;;;iCAqCpB,uDAAS,SAAC,gFAA2B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;uBACvD,uDAAS,SAAC,sEAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;sBAO3C,0DAAY,SAAC,OAAO;;AApCX,eAAe;IAN3B,+DAAS,CAAC;QACV,QAAQ,EAAE,YAAY;QACtB,mFAAsC;;KAEtC,CAAC;GAEW,eAAe,CA8T3B;AA9T2B;;;;;;;;;;;;;;;;;;ACZwB;IAKvC,UAAU,SAAV,UAAU;IAErB,SAAS,CAAC,KAAY,EAAE,YAAoB;QAE1C,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,EAAE,CAAC;SACX;QACD,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO,KAAK,CAAC;SACd;QACD,YAAY,GAAG,YAAY,CAAC,iBAAiB,EAAE,CAAC;QAEhD,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YACvB,OAAO,EAAE,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;CAEF;AAjBY,UAAU;IAHtB,0DAAI,CAAC;QACJ,IAAI,EAAE,QAAQ;KACf,CAAC;GACW,UAAU,CAiBtB;AAjBsB;;;;;;;;;;;;;ACLvB;AAAe,mHAAoD,2YAA2Y,qrBAAqrB,oPAAoP,gJAAgJ,iBAAiB,wGAAwG,MAAM,wVAAwV,mBAAmB,qUAAqU,KAAK,IAAI,sBAAsB,qKAAqK,8DAA8D,0JAA0J,kFAAkF,8CAA8C,2CAA2C,yPAAyP,+EAA+E,uLAAuL,uKAAuK,6BAA6B,6GAA6G,6BAA6B,iGAAiG,yBAAyB,2CAA2C,0LAA0L,0DAA0D,iJAAiJ,sVAAsV,UAAU,uHAAuH,GAAG,gQAAgQ,SAAS,wHAAwH,GAAG,mQAAmQ,SAAS,wHAAwH,GAAG,6XAA6X,iKAAiK,oHAAoH,iKAAiK,oHAAoH,oCAAoC,sBAAsB,8JAA8J,6QAA6Q,oTAAoT,iKAAiK,iTAAiT,irBAAirB,0CAA0C,g/BAAg/B,qBAAqB,2vCAA2vC,gGAAgG,gWAAgW,2TAA2T,0CAA0C,6lBAA6lB,gBAAgB,0aAA0a,kVAAkV,0CAA0C,unBAAunB,6BAA6B,0cAA0c,uVAAuV,0CAA0C,ynBAAynB,qBAAqB,obAAob,yVAAyV,0CAA0C,0nBAA0nB,0BAA0B,8bAA8b,+TAA+T,0CAA0C,44CAA44C,OAAO,0eAA0e,wFAAwF,8hBAA8hB,SAAS,4mDAA4mD,KAAK,IAAI,wBAAwB,stBAAstB,OAAO,q6CAAq6C,UAAU,onDAAonD,8SAA8S,0CAA0C,krCAAkrC,OAAO,0eAA0e,wFAAwF,qmBAAqmB,SAAS,kqDAAkqD,KAAK,IAAI,wBAAwB,+jBAA+jB,OAAO,08CAA08C,UAAU,yrDAAyrD,wBAAwB,mBAAmB,+EAA+E,E;;;;;;;;;;;;;;;;;;;;;;ACAvriC,uBAAuB;AAC2B;AACA;IAOrC,eAAe,SAAf,eAAe;IAI5B,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAC9C,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3C,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;IACD,QAAQ;IACR,CAAC;CAEA;;YApBQ,6DAAa;;AAOT,eAAe;IAL3B,+DAAS,CAAC;QACX,QAAQ,EAAE,aAAa;QACvB,mFAAsC;;KAErC,CAAC;GACW,eAAe,CAa3B;AAb2B;;;;;;;;;;;;;ACT5B;AAAe,mHAAoD,waAAwa,yJAAyJ,MAAM,MAAM,MAAM,MAAM,yNAAyN,uBAAuB,uBAAuB,m7BAAm7B,4EAA4E,oIAAoI,2BAA2B,6XAA6X,QAAQ,sQAAsQ,mCAAmC,qRAAqR,WAAW,kZAAkZ,UAAU,sfAAsf,WAAW,+GAA+G,KAAK,iJAAiJ,WAAW,4XAA4X,wMAAwM,8HAA8H,iKAAiK,4HAA4H,+CAA+C,+JAA+J,gHAAgH,2BAA2B,qsBAAqsB,0CAA0C,6lBAA6lB,gBAAgB,0aAA0a,uTAAuT,0CAA0C,8wCAA8wC,wFAAwF,2gBAA2gB,yTAAyT,0CAA0C,6kCAA6kC,0CAA0C,8aAA8a,sBAAsB,kHAAkH,wBAAwB,4PAA4P,6rJAA6rJ,yEAAyE,KAAK,o9FAAo9F,WAAW,wIAAwI,KAAK,2IAA2I,eAAe,iEAAiE,WAAW,MAAM,MAAM,klBAAklB,81BAA81B,mEAAmE,WAAW,kKAAkK,QAAQ,0NAA0N,UAAU,0RAA0R,WAAW,2HAA2H,KAAK,mKAAmK,WAAW,+cAA+c,MAAM,ikBAAikB,0BAA0B,2BAA2B,sEAAsE,E;;;;;;;;;;;;;;;;;;;;;;;;;ACA51uB;AACjE;AAC6C;AACH;AAC3C;IAQ9B,cAAc,SAAd,cAAc;IAmBzB,YAAoB,UAAsB,EAAU,KAAwB,EAAU,MAAqB;QAAvF,eAAU,GAAV,UAAU,CAAY;QAAU,UAAK,GAAL,KAAK,CAAmB;QAAU,WAAM,GAAN,MAAM,CAAe;QAhB3G,UAAK,GAAG,EAAE,CAAC;QACX,aAAQ,GAAG,EAAE,CAAC;QAGd,eAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,iBAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,QAAG,GAAG,IAAI,CAAC;QAEX,uBAAkB,GAAG,CAAC,SAAS,EAAC,UAAU,CAAC,CAAC;QAM5C,eAAU,GAAW,EAAE,CAAC;IAEuF,CAAC;IAEzF,OAAO;QAC5B,IAAG,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAC;YAC7G,IAAI,CAAC,WAAW,EAAE,CAAC;SACrB;IACH,CAAC;IAED,QAAQ;QACP,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,iBAAiB,EAAE;QACvB,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,cAAc,EAAE;IACvB,CAAC;IAED,WAAW;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAE3C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;SAC5C;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9D,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACnC;IACH,CAAC;IAED,eAAe;QACb,IAAI,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAEvD,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,EAAE,CAAC;QAClD,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,aAAa;QAClB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,aAAa;QAClB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,aAAa;QAClB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC;IAEO,gBAAgB,CAAC,MAAM;QAC7B,IAAI,OAAO,GAAG,gEAAgE,CAAC;QAC/E,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;YACjD,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;SAC3D;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,wDAAS,CAAC;YAC9B,eAAe,EAAE,IAAI,0DAAW,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAC,EAAE,yDAAU,CAAC,QAAQ,CAAC;YAClF,eAAe,EAAE,IAAI,0DAAW,CAAC,EAAE,CAAC;YACpC,YAAY,EAAE,IAAI,0DAAW,CAAC,EAAE,EAAE,yDAAU,CAAC,QAAQ,CAAC;YACtD,YAAY,EAAE,IAAI,0DAAW,CAAC,EAAE,EAAE,yDAAU,CAAC,QAAQ,CAAC;SACvD,CAAC,CAAC;IACL,CAAC;IAEO,SAAS;QAChB,IAAI,CAAC,cAAc,GAAG,IAAI,wDAAS,CAAC;YACjC,aAAa,EAAE,IAAI,0DAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,yDAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAClF,aAAa,EAAE,IAAI,0DAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,yDAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACnF,aAAa,EAAE,IAAI,0DAAW,CAAC,EAAE,EAAC,yDAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC3D,CAAC,CAAC;IACL,CAAC;IAEO,cAAc;QACrB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAGO,iBAAiB;QACxB,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC7C,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU;QACjB,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC1C,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC1C,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAE1C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAEvB,IAAG,UAAU,IAAE,EAAE,EAAC;YACjB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,EAAC,UAAU,EAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;gBAChF,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;oBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAC,UAAU,GAAC,eAAe,GAAC,UAAU,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;iBACpG;qBAAI;oBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,2BAA2B,CAAC,CAAC;iBACtE;YACJ,CAAC,CAAC,CAAC;SACJ;aAAI;YACJ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;gBAC7D,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;oBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAC,UAAU,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;iBACzE;qBAAI;oBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,2BAA2B,CAAC,CAAC;iBACtE;YACJ,CAAC,CAAC,CAAC;SACJ;IACF,CAAC;IAEO,aAAa,CAAC,SAAS,EAAC,MAAM;QACrC,IAAG,MAAM,IAAI,SAAS,EAAC;YACtB,MAAM,GAAG,UAAU;SACnB;aAAI;YACJ,MAAM,GAAG,SAAS;SAClB;QACD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC/D,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACf,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAC,SAAS,GAAC,yBAAyB,GAAC,MAAM,EAAE,SAAS,CAAC,CAAC;aACvF;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,qCAAqC,CAAC,CAAC;aAChF;YACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,SAAS;QAClC,IAAI,CAAC,YAAY,GAAG,SAAS;IAC9B,CAAC;IAEO,iBAAiB,CAAC,SAAS;QACjC,IAAI,CAAC,YAAY,GAAG,SAAS;QAC7B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAC,iBAAiB,EAAE,SAAS,EAAC,CAAC,CAAC;QAC3D,IAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,EAAC;YACxC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,EAAC,CAAC,CAAC;SACtF;QACD,IAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAC;YACpC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAC,CAAC,CAAC;SAClF;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,cAAc;QACpB,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC;QAC1D,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;QACvD,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;QAEvD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAC,aAAa,EAAC,aAAa,EAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YACtG,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAC,IAAI,CAAC,YAAY,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;aAChF;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,2BAA2B,CAAC,CAAC;aACtE;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAGO,UAAU;QACjB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC7D,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACf,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAC,IAAI,CAAC,YAAY,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;aAChF;YACH,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;CAEF;;YApPQ,uDAAU;YADiD,+DAAiB;YAI5E,wDAAa;;;iCAqBnB,uDAAS,SAAC,gFAA2B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;uBACvD,uDAAS,SAAC,sEAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;sBAO7C,0DAAY,SAAC,OAAO;;AArBV,cAAc;IAL1B,+DAAS,CAAC;QACT,QAAQ,EAAE,WAAW;QACrB,kFAAqC;;KAEtC,CAAC;GACW,cAAc,CAyO1B;AAzO0B;;;;;;;;;;;;;;;;;;;;;;;;;;ACZkF;AAC3B;AACtC;AAC0C;AAC3C;IAO9B,iBAAiB,SAAjB,iBAAiB;IAgE5B,YAAoB,UAAsB,EAAU,KAAwB,EAAU,MAAqB,EAAU,SAAuB;QAAxH,eAAU,GAAV,UAAU,CAAY;QAAU,UAAK,GAAL,KAAK,CAAmB;QAAU,WAAM,GAAN,MAAM,CAAe;QAAU,cAAS,GAAT,SAAS,CAAc;QA/D5I,eAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,iBAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,aAAQ,GAAG,EAAE,CAAC;QACd,gBAAW,GAAG,EAAE,CAAC;QAEjB,YAAO,GAAG,EAAE,CAAC;QAIb,QAAG,GAAG,IAAI,CAAC;QAQX,uBAAkB,GAAG,EAAE,CAAC;QACxB,sBAAiB,GAAG,EAAE,CAAC;QACvB,0BAAqB,GAAG,EAAE,CAAC;QAC3B,6BAAwB,GAAG,EAAE,CAAC;QAE9B,oBAAe,GAAG,EAAE,CAAC;QACrB,mBAAc,GAAG,EAAE,CAAC;QACpB,sBAAiB,GAAG,EAAE,CAAC;QACvB,yBAAoB,GAAG,EAAE,CAAC;QAE1B,2BAAsB,GAAG,EAAE,CAAC;QAC5B,0BAAqB,GAAG,EAAE,CAAC;QAC3B,8BAAyB,GAAG,EAAE,CAAC;QAC/B,iCAA4B,GAAG,EAAE,CAAC;QAElC,sBAAiB,GAAG,KAAK,CAAC;QAC1B,2BAAsB,GAAG,UAAU;QAEnC,cAAS,GAAG;YACX,IAAI,EAAC,EAAE;YACP,MAAM,EAAC,OAAO;YACd,MAAM,EAAC,EAAE;SACT,CAAC;QAEF,iBAAY,GAAG;YACd,OAAO,EAAC,EAAE;YACV,SAAS,EAAE,EAAE;SACb;QAED,iBAAY,GAAG;YACb,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE;SACd;QAED,sBAAiB,GAAG,EAAE;QAMtB,eAAU,GAAW,EAAE,CAAC;IAGwH,CAAC;IAE1H,OAAO;QAC5B,IAAG,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAC;YAC7G,IAAI,CAAC,WAAW,EAAE,CAAC;SACrB;QACD,IAAG,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,eAAe,EAAC;YACzH,IAAG,IAAI,CAAC,aAAa,EAAC;gBACpB,IAAG,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,EAAC;oBAC5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;iBACtB;qBAAI;oBACH,IAAI,CAAC,aAAa,EAAE,CAAC;iBACtB;aACF;SACF;IAEH,CAAC;IAKD,QAAQ;QACP,IAAI,CAAC,WAAW,EAAE;QAGlB,IAAI,CAAC,kBAAkB,GAAG;YACvB,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,yBAAyB,EAAC;YAC7C,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,iBAAiB,EAAC;YACrC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,iBAAiB,EAAC;YACrC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,sBAAsB,EAAC;YAC1C,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC3C,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,iBAAiB,EAAC;YACrC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,sBAAsB,EAAC;YAC1C,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,0BAA0B,EAAC;YAC9C,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACxC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,cAAc,EAAC;YACnC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,eAAe,EAAC;YACpC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qBAAqB,EAAC;YAC1C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,eAAe,EAAC;YACpC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,+BAA+B,EAAC;YACpD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,6BAA6B,EAAC;YAClD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,6BAA6B,EAAC;YAClD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,8BAA8B,EAAC;YACnD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,8BAA8B,EAAC;YACnD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,0BAA0B,EAAC;YAC/C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACzC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,cAAc,EAAC;YACnC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,wBAAwB,EAAC;YAC7C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,+BAA+B,EAAC;YACpD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qBAAqB,EAAC;YAC1C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,4BAA4B,EAAC;YACjD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,4BAA4B,EAAC;YACjD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,8BAA8B,EAAC;YACnD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qCAAqC,EAAC;YAC1D,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qCAAqC,EAAC;YAC1D,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qBAAqB,EAAC;YAC1C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qBAAqB,EAAC;YAC1C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qBAAqB,EAAC;YAC1C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qBAAqB,EAAC;YAC1C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,wBAAwB,EAAC;YAC7C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,+BAA+B,EAAC;YACpD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,+BAA+B,EAAC;YACpD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,wBAAwB,EAAC;YAC7C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,wBAAwB,EAAC;YAC7C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,gCAAgC,EAAC;YACrD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,gCAAgC,EAAC;YACrD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACzC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACzC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,kBAAkB,EAAC;YACvC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,mCAAmC,EAAC;SACzD,CAAC;QAEF,IAAI,CAAC,sBAAsB,GAAG;YAC9B,eAAe,EAAE,KAAK;YACtB,IAAI,EAAC,gBAAgB;YACrB,aAAa,EAAC,YAAY;YAC1B,eAAe,EAAC,cAAc;YAC9B,kBAAkB,EAAE,IAAI;SACxB,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG;YACvB,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACxC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,kBAAkB,EAAC;YACtC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,kBAAkB,EAAC;YACtC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,iBAAiB,EAAC;YACrC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,kBAAkB,EAAC;YACtC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,mBAAmB,EAAC;YACvC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,eAAe,EAAC;YACnC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,kBAAkB,EAAC;YACtC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACxC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,mBAAmB,EAAC;YACxC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qBAAqB,EAAC;YAC1C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,gBAAgB,EAAC;YACrC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,eAAe,EAAC;YACpC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,iBAAiB,EAAC;YACtC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,mBAAmB,EAAC;YACxC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,kBAAkB,EAAC;YACvC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACzC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,sBAAsB,EAAC;YAC3C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,2BAA2B,EAAC;YAChD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,gBAAgB,EAAC;YACrC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,kBAAkB,EAAC;YACvC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,mBAAmB,EAAC;YACxC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACzC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACzC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACzC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,iBAAiB,EAAC;YACtC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,+BAA+B,EAAC;YACpD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,wBAAwB,EAAC;SAC9C,CAAC;QAEF,IAAI,CAAC,qBAAqB,GAAG;YAC3B,eAAe,EAAE,KAAK;YACtB,IAAI,EAAC,oCAAoC;YACzC,aAAa,EAAC,YAAY;YAC1B,eAAe,EAAC,cAAc;YAC9B,kBAAkB,EAAE,IAAI;SACzB,CAAC;QAEH,IAAI,CAAC,qBAAqB,GAAG;YAC1B,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,WAAW,EAAC;YAC/B,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,mBAAmB,EAAC;YACvC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,SAAS,EAAC;YAC7B,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,iBAAiB,EAAC;YACrC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,cAAc,EAAC;YAClC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,sBAAsB,EAAC;YAC1C,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,YAAY,EAAC;YAChC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACxC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,cAAc,EAAC;YAClC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,sBAAsB,EAAC;YAC3C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,iBAAiB,EAAC;YACtC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,yBAAyB,EAAC;YAC9C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,MAAM,EAAC;YAC3B,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,cAAc,EAAC;YACnC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,YAAY,EAAC;YACjC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACzC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,iBAAiB,EAAC;YACtC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,+BAA+B,EAAC;YACpD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,yBAAyB,EAAC;YAC9C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,cAAc,EAAC;YACnC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACzC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,4BAA4B,EAAC;YACjD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,sBAAsB,EAAC;YAC3C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,eAAe,EAAC;YACpC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,WAAW,EAAC;YAChC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,mBAAmB,EAAC;YACxC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,cAAc,EAAC;YACnC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,sBAAsB,EAAC;YAC3C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,MAAM,EAAC;YAC3B,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,eAAe,EAAC;YACpC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACzC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,0BAA0B,EAAC;YAC/C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,kCAAkC,EAAC;YACvD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,4BAA4B,EAAC;YACjD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,iBAAiB,EAAC;YACtC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,+BAA+B,EAAC;YACpD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,yBAAyB,EAAC;YAC9C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,kBAAkB,EAAC;YACvC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,0BAA0B,EAAC;YAC/C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,cAAc,EAAC;YACnC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,sBAAsB,EAAC;YAC3C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,wBAAwB,EAAC;YAC7C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,gCAAgC,EAAC;YACrD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,YAAY,EAAC;YACjC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACzC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,iBAAiB,EAAC;YACtC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,yBAAyB,EAAC;YAC9C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,2BAA2B,EAAC;YAChD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,mCAAmC,EAAC;YACxD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,eAAe,EAAC;YACpC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;SAC7C,CAAC;QAEF,IAAI,CAAC,yBAAyB,GAAG;YACjC,eAAe,EAAE,IAAI;YACrB,IAAI,EAAC,kBAAkB;YACvB,aAAa,EAAC,YAAY;YAC1B,eAAe,EAAC,cAAc;YAC9B,kBAAkB,EAAE,IAAI;SACxB,CAAC;QAEF,IAAI,CAAC,wBAAwB,GAAG;YAC7B,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,iBAAiB,EAAC;YACrC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,eAAe,EAAC;YACnC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,wBAAwB,EAAC;YAC5C,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,4BAA4B,EAAC;YAChD,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,kBAAkB,EAAC;YACtC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACxC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,4BAA4B,EAAC;YAChD,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,mBAAmB,EAAC;YACvC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,aAAa,EAAC;YACjC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,0BAA0B,EAAC;YAC/C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qBAAqB,EAAC;YAC1C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qBAAqB,EAAC;YAC1C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,mBAAmB,EAAC;YACxC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,eAAe,EAAC;YACpC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,cAAc,EAAC;YACnC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,eAAe,EAAC;YACpC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,gBAAgB,EAAC;YACrC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,aAAa,EAAC;YAClC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,oBAAoB,EAAC;YACzC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,eAAe,EAAC;YACpC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,YAAY,EAAC;YACjC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,cAAc,EAAC;YACnC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,6BAA6B,EAAC;YAClD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,2BAA2B,EAAC;YAChD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,yBAAyB,EAAC;YAC9C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,wBAAwB,EAAC;YAC7C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,4BAA4B,EAAC;YACjD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,sBAAsB,EAAC;YAC3C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,wBAAwB,EAAC;YAC7C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,2BAA2B,EAAC;YAChD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,yBAAyB,EAAC;YAC9C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,cAAc,EAAC;YACnC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,aAAa,EAAC;YAClC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,cAAc,EAAC;YACnC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,uBAAuB,EAAC;YAC5C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,aAAa,EAAC;YAClC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,2BAA2B,EAAC;YAChD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qBAAqB,EAAC;YAC1C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,yCAAyC,EAAC;YAC9D,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,kCAAkC,EAAC;YACvD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,WAAW,EAAC;YAChC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,iBAAiB,EAAC;YACtC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qBAAqB,EAAC;YAC1C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,cAAc,EAAC;YACnC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,cAAc,EAAC;YACnC,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,yBAAyB,EAAC;YAC9C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,sBAAsB,EAAC;YAC3C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,6BAA6B,EAAC;YAClD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,qBAAqB,EAAC;YAC1C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,yBAAyB,EAAC;YAC9C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,sBAAsB,EAAC;YAC3C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,0BAA0B,EAAC;YAC/C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,6BAA6B,EAAC;YAClD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,iCAAiC,EAAC;YACtD,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,gDAAgD,EAAC;YACrE,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,wBAAwB,EAAC;YAC7C,EAAC,IAAI,EAAC,EAAE,EAAC,UAAU,EAAC,oCAAoC,EAAC;SAC1D,CAAC;QAEF,IAAI,CAAC,4BAA4B,GAAG;YACpC,eAAe,EAAE,IAAI;YACrB,IAAI,EAAC,sBAAsB;YAC3B,aAAa,EAAC,YAAY;YAC1B,eAAe,EAAC,cAAc;YAC9B,kBAAkB,EAAE,IAAI;SACxB,CAAC;IACH,CAAC;IAED,cAAc;QACZ,IAAG,IAAI,CAAC,iBAAiB,EAAC;YACxB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,sBAAsB,GAAG,UAAU;SACzC;aAAI;YACH,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,sBAAsB,GAAG,OAAO;SACtC;IACH,CAAC;IAEF,kBAAkB,CAAC,IAAQ;QACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACtC,CAAC;IACD,oBAAoB,CAAC,IAAQ;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACtC,CAAC;IACD,iBAAiB,CAAC,KAAU;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,mBAAmB,CAAC,KAAU;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,iBAAiB,CAAC,IAAQ;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC;IACD,mBAAmB,CAAC,IAAQ;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC;IACD,gBAAgB,CAAC,KAAU;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,kBAAkB,CAAC,KAAU;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAGA,0BAA0B;IAC1B,qBAAqB,CAAC,IAAQ;QAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxC,CAAC;IACD,uBAAuB,CAAC,IAAQ;QAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxC,CAAC;IACD,oBAAoB,CAAC,KAAU;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,sBAAsB,CAAC,KAAU;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAEA,8BAA8B;IAC9B,wBAAwB,CAAC,IAAQ;QAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC3C,CAAC;IACD,0BAA0B,CAAC,IAAQ;QAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC3C,CAAC;IACD,uBAAuB,CAAC,KAAU;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,yBAAyB,CAAC,KAAU;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAGD,WAAW;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAE3C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;SAC/C;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACjE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACnC;IACH,CAAC;IAED,eAAe;QACb,IAAI,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAEvD,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,EAAE,CAAC;QAClD,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAEO,eAAe,CAAC,UAAU;QACjC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE;QACxB,IAAG,CAAC,UAAU,EAAC;YACd,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,OAAO;YAC/B,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE;SAC1B;aAAI;YACJ,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE;gBACxB,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,OAAO;YAC/B,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE;SAC1B;QAEA,IAAI,CAAC,YAAY,GAAG;YAClB,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE;SACd;IAEH,CAAC;IAEO,WAAW;QAClB,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC7C,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC;YAC9E,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY;QACnB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YACjE,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAC,IAAI,CAAC,cAAc,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;aACnF;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,6BAA6B,CAAC,CAAC;aACxE;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,OAAO;QAC5B,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,+BAA+B,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/G,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;IAC9B,CAAC;IAEO,UAAU,CAAC,GAAG;QACrB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACpB,CAAC;IAEO,mBAAmB,CAAC,MAAM;QACjC,IAAI,CAAC,cAAc,GAAG,MAAM;IAC7B,CAAC;IAEO,mBAAmB;QAC1B,IAAI,CAAC,YAAY,GAAG;YACnB,OAAO,EAAC,YAAY;YACpB,SAAS,EAAE,EAAE;SACb;IACF,CAAC;IAEO,eAAe,CAAC,OAAO,EAAC,OAAO,EAAC,aAAa;QACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,EAAC,OAAO,EAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,EAAC,CAAC,CAAC;IACvE,CAAC;IAEO,YAAY;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACnC,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,EAAE;SACjC;QACD,IAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAC;YACjE,IAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAC;gBACxG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;aACpI;iBAAI;gBACH,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE;gBAC3G,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;aACpI;SACF;aAAI;YACH,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE;YACpE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC3G,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;SACpI;QAED,IAAI,CAAC,iBAAiB,GAAG,EAAE;QAC3B,IAAI,CAAC,oBAAoB,GAAG,EAAE;QAC9B,IAAI,CAAC,iBAAiB,GAAG,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;IAC1C,CAAC;IAGO,YAAY;QAClB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAEpC,IAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAC,CAAC,EAAC;YAChC,IAAG,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAC;gBAChE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;aACrC;iBAAI;gBACJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACrD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;iBAC/D;aACD;SACD;aAAI;YACH,IAAG,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAC;gBAC/D,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;aACxC;iBAAI;gBACJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACpD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;iBAC9D;aACD;SACD;QACF,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;QAE/C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;QAC9B,IAAG,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW,KAAK,MAAM,EAAC;YAC/I,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;YAC5C,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS;SACnC;aAAI;YACH,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,EAAE,EAAC;gBACnE,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC;gBAC3D,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,GAAG;aAClC;SACF;QAEF,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;QAE9B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEO,aAAa,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAErC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM;QAE7D,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACrD,KAAK,KAAK;gBACR,IAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAC;oBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACvD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAC,IAAI,EAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,UAAU,EAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAC,CAAC;qBAC/G;iBACJ;qBAAI;oBACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACxD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC;qBAC3E;iBACF;gBACD,MAAM;YACR,KAAK,KAAK;gBACR,IAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,EAAC;oBACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACtD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAC,IAAI,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,UAAU,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAC,CAAC;qBAC5G;iBACJ;qBAAI;oBACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACxD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,UAAU,EAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC;qBAC1E;iBACF;gBACD,MAAM;SACT;QAGD,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE;QAC7B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC;IACzC,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,GAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACtE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE;IAC5B,CAAC;IAEO,eAAe,CAAC,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC;IACxC,CAAC;IAEO,qBAAqB,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC;IACxC,CAAC;IAEO,WAAW,CAAC,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAE9B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IAEO,YAAY;QAClB,IAAI,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAClC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC/B,IAAI,gBAAgB,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;YAC/F,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;gBAClF,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;oBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAC,IAAI,CAAC,SAAS,CAAC,IAAI,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;iBACnF;qBAAI;oBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,6BAA6B,CAAC,CAAC;iBACxE;gBACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/C,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;QAC9C,IAAI,CAAC,gBAAgB,CAAC;QACtB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;IACjC,CAAC;IAEO,YAAY;QACnB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;QAE9C,IAAI,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAErD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAC,EAAE;YAC3E,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAG,IAAI,CAAC,SAAS,CAAC,EAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAC,IAAI,CAAC,SAAS,CAAC,IAAI,GAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;aACnF;iBAAI;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,6BAA6B,CAAC,CAAC;aACxE;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU,CAAC,KAAK;QACtB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAG,KAAK,EAAC;YACP,IAAI,CAAC,oBAAoB,GAAG,aAAa;YACzC,IAAI,CAAC,yBAAyB,GAAG,QAAQ;SAC1C;aAAI;YACH,IAAI,CAAC,oBAAoB,GAAG,qBAAqB;YACjD,IAAI,CAAC,yBAAyB,GAAG,QAAQ;SAC1C;IACH,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,oBAAoB,GAAG,aAAa;QACzC,IAAI,CAAC,yBAAyB,GAAG,MAAM;IACzC,CAAC;IAEO,mBAAmB,CAAC,MAAM;QAChC,IAAI,CAAC,cAAc,GAAG,MAAM;QAC5B,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;QAE7B,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IACpD,CAAC;CAEF;;YA7rBQ,uDAAU;YAFiD,+DAAiB;YAI5E,wDAAa;YAHb,sEAAY;;;iCAmElB,uDAAS,SAAC,gFAA2B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;uBACvD,uDAAS,SAAC,sEAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;sBAQ7C,0DAAY,SAAC,OAAO;8BAgBpB,uDAAS,SAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;AAlFpC,iBAAiB;IAL7B,+DAAS,CAAC;QACT,QAAQ,EAAE,cAAc;QACxB,qFAAwC;;KAEzC,CAAC;GACW,iBAAiB,CAorB7B;AAprB6B;;;;;;;;;;;;;ACX9B;AAAe,mHAAoD,6EAA6E,iBAAiB,yEAAyE,0GAA0G,iJAAiJ,oDAAoD,gBAAgB,uCAAuC,8BAA8B,6CAA6C,iCAAiC,mJAAmJ,gaAAga,sDAAsD,8BAA8B,qDAAqD,8BAA8B,YAAY,2BAA2B,WAAW,ySAAyS,+BAA+B,8DAA8D,wYAAwY,4BAA4B,2BAA2B,qEAAqE,8BAA8B,4BAA4B,+WAA+W,kHAAkH,gBAAgB,ygBAAygB,qUAAqU,iHAAiH,gBAAgB,0gBAA0gB,qSAAqS,0CAA0C,g3BAAg3B,E;;;;;;;;;;;;ACArhL;AAAe,6GAA8C,2HAA2H,E;;;;;;;;;;;;;;;;;ACA7I;IAM9B,UAAU,SAAV,UAAU;IAUrB;QARA,mEAAmE;QACnE,0BAA0B;QAE1B,UAAU;QACH,eAAU,GAAG,EAAE,CAAC;QAChB,oBAAe,GAAG,KAAK,CAAC;QACxB,gBAAW,GAAG,EAAE,CAAC;IAGxB,CAAC;CAEF;;AAbY,UAAU;IAJtB,gEAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;GAEW,UAAU,CAatB;AAbsB;;;;;;;;;;;;;ACNvB;AAAe,mHAAoD,6VAA6V,grBAAgrB,yEAAyE,qTAAqT,wBAAwB,gLAAgL,wCAAwC,sQAAsQ,wBAAwB,8SAA8S,wBAAwB,WAAW,oCAAoC,wRAAwR,iKAAiK,kHAAkH,0CAA0C,yoBAAyoB,0CAA0C,uhBAAuhB,cAAc,4YAA4Y,mTAAmT,0CAA0C,82DAA82D,QAAQ,2XAA2X,iBAAiB,saAAsa,8pBAA8pB,q8CAAq8C,QAAQ,ohBAAohB,E;;;;;;;;;;;;;;;;;;;;;;;ACArmU;AACc;AACE;AACG;AACM;AACH;AACH;AAE5D,MAAM,MAAM,GAAW;IACtB,EAAC,IAAI,EAAC,OAAO,EAAE,SAAS,EAAE,qEAAc,EAAC;IACzC,EAAC,IAAI,EAAC,QAAQ,EAAE,SAAS,EAAE,wEAAe,EAAC;IAC3C,EAAC,IAAI,EAAC,UAAU,EAAE,SAAS,EAAE,8EAAiB,EAAC;IAC/C,EAAC,IAAI,EAAC,QAAQ,EAAE,SAAS,EAAE,wEAAe,EAAC;IAC3C,EAAC,IAAI,EAAC,EAAE,EAAE,SAAS,EAAE,2EAAgB,EAAC;CACtC,CAAC;IAMW,gBAAgB,SAAhB,gBAAgB;CAAI;AAApB,gBAAgB;IAJ5B,8DAAQ,CAAC;QACR,OAAO,EAAE,CAAC,4DAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO,EAAE,CAAC,4DAAY,CAAC;KACxB,CAAC;GACW,gBAAgB,CAAI;AAAJ;;;;;;;;;;;;;;;;;;;;;ACpBc;AACO;AACT;AACE;IAK9B,UAAU,SAAV,UAAU;IAErB,YAAoB,UAAsB,EAAU,MAAc,EAAU,GAAe;QAAvE,eAAU,GAAV,UAAU,CAAY;QAAU,WAAM,GAAN,MAAM,CAAQ;QAAU,QAAG,GAAH,GAAG,CAAY;QAc3F,iBAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;QACxC,iBAAY,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;QACpC,YAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAfjC,IAAG,GAAG,CAAC,UAAU,EAAE;YACjB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;SAC3C;QACD,IAAG,GAAG,CAAC,eAAe,EAAE;YACtB,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;SACrD;QACD,IAAG,GAAG,CAAC,WAAW,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;SAC7C;IAEF,CAAC;IAOM,iBAAiB;QACvB,IAAI,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;QAC5C,IAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;YACjD,IAAI,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAE1D,IAAI,aAAa,GAAG,EAAE,CAAC;YAEvB,IAAG,YAAY,IAAI,YAAY,IAAI,EAAE,EAAC;gBACpC,aAAa,GAAG,YAAY,CAAC;aAC9B;iBAAI;gBACH,aAAa,GAAG,iBAAiB,CAAC;aACnC;YACD,OAAO,aAAa,CAAC;SACtB;aAAM;YACL,OAAO,iBAAiB,CAAC;SAC1B;IACH,CAAC;IAEM,eAAe,CAAC,UAAU;QAC/B,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,mBAAmB,GAAG,QAAQ,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,gBAAgB,GAAG;YAChD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,mBAAmB,GAAG,QAAQ,CAAC;IAC7C,CAAC;IAEM,qBAAqB;QAC1B,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEM,sBAAsB,CAAC,IAAI;QAChC,IAAG,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,IAAI,WAAW,IAAI,OAAO,IAAI,CAAC,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAC;YACjI,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAC,eAAe,GAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;SACjF;IACH,CAAC;IAEM,UAAU;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAC,4BAA4B,CAAC,CAAC;IACxE,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAC,0BAA0B,CAAC,CAAC;IACtE,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAC,oBAAoB,CAAC,CAAC;IAChE,CAAC;IAEM,OAAO,CAAC,MAAM,EAAC,MAAM;QAC1B,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEjC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,qBAAqB,EAAE,IAAI,CAAC;IACvE,CAAC;IAEM,eAAe,CAAC,MAAM,EAAC,MAAM,EAAC,MAAM;QACzC,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,8BAA8B,EAAE,IAAI,CAAC;IAChF,CAAC;IAEM,UAAU,CAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM;QAC3C,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,qBAAqB,EAAE,IAAI,CAAC;IACvE,CAAC;IAGM,aAAa,CAAC,MAAM,EAAC,MAAM;QAChC,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,yBAAyB,EAAE,IAAI,CAAC;IAC3E,CAAC;IAEM,UAAU,CAAC,MAAM;QACtB,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEjC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,qBAAqB,EAAE,IAAI,CAAC;IACvE,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAC,uBAAuB,CAAC,CAAC;IACnE,CAAC;IAEM,YAAY,CAAC,MAAM;QACxB,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,uBAAuB,EAAE,IAAI,CAAC;IACzE,CAAC;IAEM,SAAS,CAAC,UAAU,EAAE,YAAY;QACvC,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAE1C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,uBAAuB,EAAE,IAAI,CAAC;IACzE,CAAC;IAEM,UAAU;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAC,sBAAsB,CAAC,CAAC;IAClE,CAAC;IAEM,kBAAkB;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAC,+BAA+B,CAAC,CAAC;IAC3E,CAAC;IAEM,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY;QACvF,gBAAgB;QAChB,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAE1C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,2BAA2B,EAAE,IAAI,CAAC;IAC7E,CAAC;IAEM,eAAe,CAAC,MAAM;QAC3B,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,2BAA2B,EAAC,IAAI,CAAC;IAC5E,CAAC;IAEM,kBAAkB,CAAC,MAAM;QAC9B,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,8BAA8B,EAAC,IAAI,CAAC;IAC/E,CAAC;IAEM,YAAY,CAAC,MAAM;QACxB,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,uBAAuB,EAAE,IAAI,CAAC;IACzE,CAAC;IAEM,YAAY,CAAC,MAAM;QACxB,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEjC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,uBAAuB,EAAE,IAAI,CAAC;IACzE,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAC,qBAAqB,CAAC,CAAC;IACjE,CAAC;IAEM,kBAAkB,CAAC,KAAK,EAAC,OAAO,EAAC,QAAQ;QAC9C,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;IACjF,CAAC;IAEM,mBAAmB,CAAC,KAAK;QAC9B,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE5B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC;IAClF,CAAC;IAEM,cAAc,CAAC,KAAK,EAAC,MAAM;QAChC,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;IAC7E,CAAC;IAEM,SAAS,CAAC,UAAU,EAAC,UAAU,EAAC,OAAO;QAC5C,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;IAEM,YAAY,CAAC,UAAU,EAAC,SAAS;QACtC,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAEpC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;IACjF,CAAC;IAGM,YAAY,CAAC,UAAU;QAC5B,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;IACjF,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAC,aAAa,CAAC,CAAC;IACzD,CAAC;IAEM,cAAc,CAAC,UAAU;QAC9B,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;IAC7E,CAAC;IAEM,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU;QACrD,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;IAC7E,CAAC;IAEM,iBAAiB,CAAC,UAAU;QACjC,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;IAChF,CAAC;IAEM,YAAY,CAAC,UAAU,EAAC,UAAU;QACvC,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;IAC5E,CAAC;IAEM,YAAY,CAAC,UAAU;QAC5B,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;IAC5E,CAAC;IAEM,eAAe,CAAC,UAAU,EAAC,YAAY;QAC5C,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAE1C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IAEM,eAAe,CAAC,UAAU;QAC/B,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IAEM,mBAAmB,CAAC,UAAU;QACnC,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC;IAClF,CAAC;IAEM,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc;QAC5D,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAE5C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC;IAClF,CAAC;IAEM,sBAAsB,CAAC,UAAU;QACtC,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,kCAAkC,EAAE,IAAI,CAAC,CAAC;IACrF,CAAC;CAGF;;YAlWQ,+DAAU;YACV,sDAAM;YACN,uDAAU;;AAKN,UAAU;IAHtB,gEAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;GACW,UAAU,CA2VtB;AA3VsB;;;;;;;;;;;;;ACRvB;AAAe,6GAA8C,uHAAuH,E;;;;;;;;;;;;ACApL;AAAA;AAAA;AAAA;AAAA;AAA+C;AAC4B;AAE9B;AACY;AAEzD,IAAI,qEAAW,CAAC,UAAU,EAAE;IAC1B,oEAAc,EAAE,CAAC;CAClB;AAED,gGAAsB,EAAE,CAAC,eAAe,CAAC,yDAAS,CAAC;KAChD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;;;;;;;;;;;;ACXpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,4CAA4C,WAAW;AACvD;AACA;AACA,qC","file":"main-es2015.js","sourcesContent":["export default \"
\\n\\t
\\n\\t
\\n\\t
\\n\\n\\t
\\n\\t\\t
\\n\\t\\t Loading...\\n\\t\\t
\\n\\t
\\n
\\n\\n
\\n\\t
\\n\\t\\t\\n\\t\\t
\\n\\t\\t
\\n\\t\\tSeems backend unreachable\\n\\t
\\n
\\n\";","//loader.service.ts\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LoaderService {\n public isError = false\n public isLoading = new BehaviorSubject(false);\n constructor() { }\n}\n","// loader.interceptors.ts\nimport { Injectable } from '@angular/core';\nimport {\n HttpErrorResponse,\n HttpResponse,\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { LoaderService } from './loader.service';\n\n@Injectable()\nexport class LoaderInterceptor implements HttpInterceptor {\n private requests: HttpRequest[] = [];\n\n constructor(private loaderService: LoaderService) { }\n\n removeRequest(req: HttpRequest) {\n const i = this.requests.indexOf(req);\n if (i >= 0) {\n this.requests.splice(i, 1);\n }\n this.loaderService.isLoading.next(this.requests.length > 0);\n }\n\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\n req = req.clone({\n withCredentials: true\n });\n this.requests.push(req);\n this.loaderService.isLoading.next(true);\n this.loaderService.isError = false;\n return Observable.create(observer => {\n const subscription = next.handle(req)\n .subscribe(\n event => {\n if (event instanceof HttpResponse) {\n this.removeRequest(req);\n observer.next(event);\n }\n },\n err => {\n this.loaderService.isError = true;\n this.removeRequest(req);\n observer.error(err);\n },\n () => {\n this.removeRequest(req);\n observer.complete();\n });\n // remove request from queue when cancelled\n return () => {\n this.removeRequest(req);\n subscription.unsubscribe();\n };\n });\n }\n}\n","export default \"dialog {\\n width: 300px;\\n}\\n\\ndialog::-webkit-backdrop {\\n background: rgba(0, 0, 0, 0.7);\\n}\\n\\ndialog::backdrop {\\n background: rgba(0, 0, 0, 0.7);\\n}\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xvYWRlci5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNJLFlBQUE7QUFDSjs7QUFDRztFQUNDLDhCQUFBO0FBRUo7O0FBSEc7RUFDQyw4QkFBQTtBQUVKIiwiZmlsZSI6ImxvYWRlci5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbImRpYWxvZyB7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgfVxuICAgZGlhbG9nOjpiYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjcpO1xuICAgfSJdfQ== */\";","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJncm91cHMuY29tcG9uZW50LnNjc3MifQ== */\";","export const environment = {\n production: false\n};\n","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl} from '@angular/platform-browser';\nimport { ApiService } from '../api.service';\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n\n\n@Component({\n selector: 'app-buckets',\n templateUrl: './buckets.component.html',\n styleUrls: ['./buckets.component.scss']\n})\nexport class BucketsComponent implements OnInit, AfterViewInit {\n math = Math;\n objectKeys = Object.keys;\n isNaN: Function = Number.isNaN;\n buckets = {};\n bucketToDelete;\n bucketToRemoveNotifications;\n bucketToRemoveQuota;\n bucketToRemoveEncryption;\n updateEncryptionTypeChanged = false;\n editBucketName;\n newBucketName = \"\";\n uiShowQuota = false;\n newBucketQuotaType = \"\";\n newBucketQuota = \"\";\n quotaTypes = [\"fifo\", \"hard\"];\n serviceInfo;\n diskUsageInfo;\n newBucketEncryption = \"\";\n encryptionTypes = [\"sse-s3\", \"sse-kms\"];\n newBucketMasterKeyID = \"\";\n newBucketEventARN = \"\";\n updateBucketEventARN = \"\";\n updateBucketEventFilterPrefix = \"\";\n updateBucketEventFilterSuffix = \"\";\n updateBucketQuotaObj = {};\n updateBucketEncryptionObj = {};\n updateQuotaTypeChanged = false;\n updateQuotaChanged = false;\n\n newBucketPolicy = \"none\";\n // updateBucketPolicy = \"none\"\n policyTypes = [\"none\", \"upload\", \"download\", \"public\", \"custom\"];\n updatePolicyTypeChanged = false;\n uploadPolicyName;\n uploadPolicyFile;\n uploadPolicyFileName;\n\n dropdownEventTypesList = [];\n selectedEventTypes = [];\n dropdownEventTypesSettings = {};\n newBucketEventFilterPrefix = \"\";\n newBucketEventFilterSuffix = \"\";\n newBucketTagName = \"\";\n newBucketTagValue = \"\";\n newBucketTagsList = {};\n\n tagListChanged = false;\n\n uploadLifecycleName;\n uploadLifecycleFile;\n uploadLifecycleFileName;\n lifecycleBucketName;\n downloadJsonHref;\n downloadLifecycleAvailable = 0;\n\n @ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n @ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n previous: string;\n\n searchText: string = '';\n\n constructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService, private sanitizer: DomSanitizer) { }\n\n @HostListener('input') oninput() {\n if(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n this.searchItems();\n }\n }\n\n @ViewChild('uploadLifecycleFile', { static: true })\n uploadFileInput: any;\n\n ngOnInit() {\n \tthis.getBuckets()\n this.getServerInfo()\n this.getDiskInfo()\n\n this.dropdownEventTypesList = [\n\t {\"id\":1,\"itemName\":\"put\"},\n\t {\"id\":2,\"itemName\":\"get\"},\n\t {\"id\":3,\"itemName\":\"delete\"},\n ];\n\n this.dropdownEventTypesSettings = {\n \t\tsingleSelection: false,\n \t\ttext:\"Select Event Types\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true,\n classes: \"dropdownFix\"\n\t };\n }\n\n //condition select actions\n onEventTypesItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedEventTypes);\n\t}\n\tonEventTypesItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedEventTypes);\n\t}\n\tonEventTypesSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonEventTypesDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n private toggleShowQuota(){\n (this.uiShowQuota) ? this.uiShowQuota = false : this.uiShowQuota = true;\n }\n\n // private toggleUpdateShowQuota(){\n // (this.updateUiShowQuota) ? this.updateUiShowQuota = false : this.updateUiShowQuota = true;\n // }\n\n private getServerInfo(){\n this.apiService.serverInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.serviceInfo = data;\n });\n }\n\n private getDiskInfo(){\n \tthis.apiService.diskInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.diskUsageInfo = data;\n });\n }\n\n private searchItems() {\n const prev = this.mdbTable.getDataSource();\n\n if (!this.searchText) {\n this.mdbTable.setDataSource(this.previous);\n this.buckets = this.mdbTable.getDataSource();\n }\n\n if (this.searchText) {\n this.buckets = this.mdbTable.searchLocalDataBy(this.searchText);\n this.mdbTable.setDataSource(prev);\n }\n }\n\n ngAfterViewInit() {\n this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n this.mdbTablePagination.calculateFirstItemIndex();\n this.mdbTablePagination.calculateLastItemIndex();\n this.cdRef.detectChanges();\n }\n\n private getBuckets(){\n \tthis.apiService.getBucketsExtended().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(\"BUCKETS >>>>>>\",data);\n if(data!==null){\n this.buckets = data;\n }else{\n this.buckets = {};\n }\n this.mdbTable.setDataSource(this.buckets);\n this.previous = this.mdbTable.getDataSource();\n });\n }\n\n private deleteBucketPrepare(bucketName){\n \tthis.bucketToDelete = bucketName;\n }\n\n private removeBucketNotificationPrepare(bucketName){\n \tthis.bucketToRemoveNotifications = bucketName;\n }\n\n private updateBucketPrepare(bucketName, currentQuota, currentQtype, currentTags){\n this.editBucketName = bucketName;\n\n this.apiService.getBucketTag(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n\n var dataKeys = Object.keys(data);\n console.log(dataKeys[0]);\n if(dataKeys[0]!=\"error\"){\n this.newBucketTagsList = data;\n }\n });\n\n this.apiService.getBucketEncryption(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n\n var dataKeys = Object.keys(data);\n console.log(\"Bucket Encryption >>\",dataKeys[1]);\n if(dataKeys[1]==\"Rules\"){\n this.updateBucketEncryptionObj = data;\n var dataVals = Object.values(data);\n console.log(\"Enc datavals\", dataVals[1][0]['Apply']['KmsMasterKeyID'])\n if(dataVals[1][0]['Apply']['KmsMasterKeyID'] == \"\"){\n this.updateBucketEncryptionObj = \"sse-s3\"\n }else{\n this.updateBucketEncryptionObj = \"sse-kms\"\n }\n }else{\n this.updateBucketEncryptionObj = \"\";\n }\n });\n\n this.apiService.getBucketQuota(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n\n var dataKeys = Object.keys(data);\n console.log(dataKeys[0]);\n if(dataKeys[0]!=\"error\"){\n this.updateBucketQuotaObj = data;\n }else{\n var emptyData = {\n quotatype: \"\"\n };\n this.updateBucketQuotaObj = emptyData;\n }\n });\n\n this.apiService.getBucketPolicy(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n this.newBucketPolicy = data[\"name\"];\n });\n }\n\n private deleteBucketQuotaPrepare(bucketName){\n this.bucketToRemoveQuota = bucketName;\n }\n\n private updateQuotaType(){\n this.updateQuotaTypeChanged = true;\n }\n\n private updatePolicyType(){\n this.updatePolicyTypeChanged = true;\n }\n\n private updateEncryptionType(){\n this.updateEncryptionTypeChanged = true;\n }\n\n private updateQuota(){\n this.updateQuotaChanged = true;\n }\n\n private deleteBucketEncryptionPrepare(bucketName){\n this.bucketToRemoveEncryption = bucketName;\n }\n\n private deleteBucket(){\n \tthis.apiService.deleteBucket(this.bucketToDelete).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Bucket has been deleted', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while deleting bucket');\n }\n this.getBuckets();\n });\n }\n\n private resetForm(){\n \tthis.newBucketName = \"\";\n this.newBucketEventARN = \"\";\n this.newBucketEncryption = \"\";\n this.newBucketMasterKeyID = \"\";\n this.updateEncryptionTypeChanged = false;\n this.newBucketEventFilterPrefix = \"\";\n this.newBucketEventFilterSuffix = \"\";\n this.selectedEventTypes = [];\n this.newBucketQuotaType = \"\";\n this.newBucketPolicy = \"none\";\n this.newBucketQuota = \"\";\n this.newBucketTagName = \"\";\n this.newBucketTagValue = \"\";\n this.newBucketTagsList = {};\n this.updatePolicyTypeChanged = false;\n this.tagListChanged = false;\n this.resetUploadForm();\n }\n\n private resetUpdateForm() {\n this.updateBucketEventARN = \"\";\n this.newBucketEncryption = \"\";\n this.newBucketMasterKeyID = \"\";\n this.updateEncryptionTypeChanged = false;\n this.selectedEventTypes = [];\n this.updateBucketEventFilterPrefix = \"\";\n this.updateBucketEventFilterSuffix = \"\";\n this.updateBucketQuotaObj = {};\n this.updateBucketEncryptionObj = \"\";\n this.updateQuotaTypeChanged = false;\n this.updateQuotaChanged = false;\n this.tagListChanged = false;\n this.updatePolicyTypeChanged = false;\n this.resetUploadForm();\n }\n\n private filePolicyChanged(e) {\n console.log(\"file event\");\n\n this.uploadPolicyFile = e.target.files[0];\n this.uploadPolicyFileName = e.target.files[0].name;\n }\n\n private resetUploadForm(){\n this.uploadFileInput.nativeElement.value = \"\";\n this.uploadPolicyFile;\n this.uploadPolicyName = \"\";\n this.uploadPolicyFileName = \"\";\n }\n\n private setPolicy(bucketName, updateListAfter){\n if(this.newBucketPolicy!=\"custom\"){\n this.apiService.setBucketPolicy(bucketName, this.newBucketPolicy).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.newBucketPolicy+' has been append to '+bucketName, 'Success');\n if(updateListAfter){\n this.getBuckets();\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n });\n } else {\n let fileReader = new FileReader();\n fileReader.onload = (e) => {\n console.log(\"Policy>>>>\",fileReader.result);\n\n let policyFileString = ((fileReader.result).toString()).replace(/\\n/g, ' ').replace(/\\r/g, ' ')\n console.log(\"Policy2>>>>\",policyFileString);\n this.apiService.setBucketPolicy(bucketName, policyFileString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy custom has been append to '+bucketName, 'Success');\n if(updateListAfter){\n this.getBuckets();\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n });\n\n }\n fileReader.readAsText(this.uploadPolicyFile);\n }\n }\n\n\n private createBucket(){\n \tif(this.newBucketName.indexOf(',')>-1){\n \t\tvar bucketsArr = this.newBucketName.split(',')\n \t\tfor (var i = 0; i < bucketsArr.length; i++) {\n \t\t\tif(bucketsArr[i]!=''){\n \t\t\t\tthis.createBucketSimple(bucketsArr[i],this.newBucketEventARN,this.newBucketQuotaType,this.newBucketQuota,this.newBucketPolicy,this.newBucketEncryption,this.newBucketMasterKeyID, bucketsArr.length,i+1)\n \t\t\t}\n \t\t}\n \t}else{\n \t\tthis.createBucketSimple(this.newBucketName,this.newBucketEventARN,this.newBucketQuotaType,this.newBucketQuota,this.newBucketPolicy,this.newBucketEncryption,this.newBucketMasterKeyID,1,1)\n \t}\n }\n\n private bucketLifecycle(bucket){\n this.lifecycleBucketName = bucket;\n }\n\n private createFormAddTag() {\n if(this.newBucketTagName != \"\" && this.newBucketTagValue != \"\"){\n this.newBucketTagsList[this.newBucketTagName] = this.newBucketTagValue;\n this.newBucketTagName = \"\";\n this.newBucketTagValue = \"\";\n this.tagListChanged = true;\n }\n }\n\n private createFormRemoveTag(tagName) {\n delete this.newBucketTagsList[tagName];\n this.tagListChanged = true;\n }\n\n private updateBucket(quotaType, quotaVal) {\n if(this.updateBucketEventARN != \"\"){\n this.enableNotificationForBucket(this.editBucketName, this.updateBucketEventARN, this.selectedEventTypes, this.updateBucketEventFilterPrefix, this.updateBucketEventFilterSuffix, true)\n }\n\n if(this.tagListChanged){\n this.setTagsForBucket(this.editBucketName,true)\n }\n\n if(this.updateQuotaTypeChanged || this.updateQuotaChanged){\n this.setQuotaForBucket(this.editBucketName, quotaType, quotaVal, true)\n }\n\n if(this.updatePolicyTypeChanged){\n this.setPolicy(this.editBucketName, true)\n }\n\n if(this.updateEncryptionTypeChanged){\n this.setBucketEncryption(this.editBucketName, this.updateBucketEncryptionObj, this.newBucketMasterKeyID, true)\n }\n }\n\n private enableNotificationForBucket(bucket, stsARN, eventTypes, filterPrefix, filterSuffix, updateListAfter){\n var eventTypesArr = []\n for (var i = 0; i < eventTypes.length; i++) {\n eventTypesArr.push(eventTypes[i].itemName)\n }\n this.apiService.enableNotificationForBucket(bucket, stsARN, eventTypesArr.join(','), filterPrefix, filterSuffix).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Events for bucket: '+bucket+' has been enabled', 'Success');\n if(updateListAfter){\n this.getBuckets();\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while enabling events for bucket'+bucket );\n }\n });\n }\n\n private setQuotaForBucket(bucket, quotaType, quotaVal, reloadBucketList){\n this.apiService.setBucketQuota(bucket, quotaType, quotaVal).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Quota for bucket '+bucket+' has been set', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while set quota for bucket');\n }\n if(reloadBucketList){\n this.getBuckets();\n }\n });\n }\n\n private removeBucketEvents(){\n var bucket = this.bucketToRemoveNotifications;\n this.apiService.removeBucketEvents(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Events for bucket '+bucket+' has been removed', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while removing bucket events');\n }\n this.getBuckets();\n });\n }\n\n private removeBucketQuota(){\n var bucket = this.bucketToRemoveQuota;\n this.apiService.removeBucketQuota(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Quota for bucket '+bucket+' has been removed', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while removing bucket quota');\n }\n this.getBuckets();\n });\n }\n\n private removeBucketEncryption(){\n var bucket = this.bucketToRemoveEncryption;\n this.apiService.removeBucketEncryption(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Encryption for bucket '+bucket+' has been removed', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while removing bucket encryption');\n }\n this.getBuckets();\n });\n }\n\n\n private setBucketEncryption(bucket, encType, masterKeyID, reloadBucketList){\n this.apiService.setBucketEncryption(bucket, encType, masterKeyID).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Encryption for bucket '+bucket+' has been set', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while set encryption for bucket');\n }\n if(reloadBucketList){\n this.getBuckets();\n }\n });\n }\n\n\n\n private createBucketSimple(bucket, eventARN, quotaType, quotaVal, policy, encryption, masterKeyID, numberOfBuckets, currentBucketNumber){\n \tthis.apiService.createBucket(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Bucket: '+bucket+' has been created', 'Success');\n if(eventARN != \"\"){\n this.enableNotificationForBucket(bucket, eventARN, this.selectedEventTypes, this.newBucketEventFilterPrefix, this.newBucketEventFilterSuffix, false);\n }\n if(quotaType != \"\" && quotaVal != \"\" && quotaVal >= 0){\n this.setQuotaForBucket(bucket, quotaType, quotaVal, false);\n }\n if(Object.keys(this.newBucketTagsList).length > 0){\n this.setTagsForBucket(bucket, false)\n }\n if(this.updatePolicyTypeChanged){\n this.setPolicy(bucket, false)\n }\n if(encryption != \"\"){\n this.setBucketEncryption(bucket, encryption, masterKeyID, false)\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating bucket');\n }\n if(numberOfBuckets == currentBucketNumber){\n setTimeout(()=>{\n this.getBuckets();\n }, 500);\n }\n });\n }\n\n private fileChanged(e) {\n console.log(\"eventTriggered\");\n\n this.uploadLifecycleFile = e.target.files[0];\n this.uploadLifecycleFileName = e.target.files[0].name;\n }\n\n private resetLifecycleForm(){\n this.uploadFileInput.nativeElement.value = \"\";\n this.uploadLifecycleFile;\n this.uploadLifecycleName = \"\";\n this.uploadLifecycleFileName = \"\";\n this.downloadLifecycleAvailable = 0;\n }\n\n private downloadLifecycle(bucket) {\n this.apiService.getLifecycle(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n // console.log(bucket, data);\n if(data[\"error\"]){\n this.toastr.error(JSON.stringify(data), 'Error while getting lifecycle');\n }else{\n if(data==\"\"){\n // this.toastr.error(\"Bucket has no lifecycle\", 'Error while getting lifecycle');\n }else{\n this.downloadLifecycleAvailable = 1;\n console.log(\"Lifecycle>>>>\",JSON.stringify(data));\n\n var uri = this.sanitizer.bypassSecurityTrustUrl(\"data:text/json;charset=UTF-8,\" + encodeURIComponent(JSON.stringify(data)));\n this.downloadJsonHref = uri;\n }\n }\n });\n }\n\n private uploadLifecycle(){\n let fileReader = new FileReader();\n fileReader.onload = (e) => {\n let lifecycleFileString = ((fileReader.result).toString()).replace(/\\n/g, ' ').replace(/\\r/g, ' ')\n this.apiService.setLifecycle(this.lifecycleBucketName,lifecycleFileString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Lifecycyle has been uploaded for bucket: '+this.lifecycleBucketName+'', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while uploading lifecycyle');\n }\n });\n }\n fileReader.readAsText(this.uploadLifecycleFile);\n }\n\n private setTagsForBucket(bucket,reloadBucketList){\n var tagsObj = this.newBucketTagsList;\n var tagsKeys = this.objectKeys(tagsObj);\n var tagArr = [];\n for (let i = 0; i < tagsKeys.length; i++) {\n var tagString = tagsKeys[i]+\"=\"+tagsObj[tagsKeys[i]]\n tagArr.push(tagString)\n }\n var tagString = tagArr.join(\"&\");\n console.log(\"TAG STRING >>>>\", tagString)\n this.apiService.setBucketTag(bucket, tagString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Tags for bucket '+bucket+' has been set', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while set tags for bucket');\n }\n if(reloadBucketList){\n this.getBuckets();\n }\n });\n }\n\n private downloadPolicy(bucket,fileName) {\n this.apiService.getBucketPolicy(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(\"download policy >>> \", bucket, data);\n if(data[\"error\"]){\n this.toastr.error(JSON.stringify(data), 'Error while getting policy');\n }else{\n if(data==\"\"){\n this.toastr.error(\"Bucket has no policy\", 'Error while getting policy');\n }else{\n var link = document.createElement('a');\n link.href = \"data:text/json;charset=UTF-8,\" + encodeURIComponent(data[\"policy\"].toString());\n link.download = fileName\n link.click();\n }\n }\n });\n }\n\n\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ApiService } from '../api.service';\n\n@Component({\n selector: 'app-server',\n templateUrl: './server.component.html',\n styleUrls: ['./server.component.scss']\n})\nexport class ServerComponent implements OnInit {\n\n objectKeys = Object.keys;\n objectValues = Object.values;\n math = Math;\n rawView = '';\n serviceInfo;\n diskUsageInfo;\n bucketSizes=[];\n hgChartDatasets=[{data: [], label: 'Number of objects'}];\n hgChartLabels=[];\n hgChartType = 'radar';\n hgChartColors = [\n {\n backgroundColor: 'rgba(151,187,205,0.9)',\n borderColor: 'rgba(151,187,205,1)',\n borderWidth: 2,\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: '#fff',\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderColor: 'rgba(151,187,205,1)'\n }\n ];\n hgChartOptions = {\n responsive: true\n };\n\n szChartDatasets=[{data: [], label: 'Size of bucket in Bytes'}];\n szChartLabels=[];\n szChartType = 'bar';\n szChartColors = [\n {\n backgroundColor: 'rgba(151,187,205,0.9)',\n borderColor: 'rgba(151,187,205,1)',\n borderWidth: 2,\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: '#fff',\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderColor: 'rgba(151,187,205,1)'\n }\n ];\n szChartOptions = {\n responsive: true\n };\n\n constructor(private apiService: ApiService) { }\n\n ngOnInit() {\n \tthis.serverInfo()\n this.diskInfo()\n }\n\n public hgChartClicked(e: any): void {\n }\n\n public hgChartHovered(e: any): void {\n }\n\n public szChartClicked(e: any): void {\n }\n\n public szChartHovered(e: any): void {\n }\n\n private serverInfo(){\n \tthis.apiService.serverInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.serviceInfo = data;\n });\n }\n\n private diskInfo(){\n \tthis.apiService.diskInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(\"Disk Usage >>>>>>>>>>>>\",data);\n this.diskUsageInfo = data;\n if(data.hasOwnProperty('objectsSizesHistogram')){\n var objectsSizesHistogram = this.diskUsageInfo.objectsSizesHistogram;\n var histogramKeysRawArr = [];\n var histogramValsRawArr = [];\n if(objectsSizesHistogram){\n histogramKeysRawArr = Object.keys(objectsSizesHistogram)\n histogramValsRawArr = Object.values(objectsSizesHistogram)\n }\n this.hgChartDatasets[0].data = histogramValsRawArr;\n\n this.hgChartLabels = [];\n for (let i = 0; i < histogramKeysRawArr.length; i++) {\n var histogramLabel = histogramKeysRawArr[i].split('_').join(' ');\n this.hgChartLabels.push(histogramLabel)\n }\n }\n\n if(data.hasOwnProperty('bucketsSizes') && this.diskUsageInfo.bucketsSizes != {} && this.diskUsageInfo.bucketsSizes != null ){\n var objectBucketSizes = this.diskUsageInfo.bucketsSizes;\n const bucketSizesKeysRawArr = Object.keys(objectBucketSizes)\n const bucketSizesValsRawArr = Object.values(objectBucketSizes)\n this.szChartDatasets[0].data = bucketSizesValsRawArr;\n this.szChartLabels= bucketSizesKeysRawArr;\n }\n });\n }\n\n private rawPrepare(obj){\n this.rawView = obj;\n }\n\n}\n","export default \"
\\n
\\n
\\n

Groups

\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n\\t\\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\t \\n\\t \\n\\t \\n \\n \\n \\n \\n \\n\\t
NamePolicyStatusMembersOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{groups[i].name}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{groups[i].policy}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{groups[i].status}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n
    \\n
  • {{member}}
  • \\n
\\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t \\t \\t\\n\\t \\t \\t\\n\\t \\t \\t 0\\\" mdbTooltip=\\\"You can delete only groups whit no memebers\\\" placement=\\\"top\\\">\\n\\t \\t
\\n \\n
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

{{modalCreateEditTitle}}

\\n
\\n
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t \\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t \\n \\t\\t\\t\\t
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Group

\\n
\\n
\\n Are you shure?
After you click on \\\"Delete\\\" button group {{groupToDelete}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Raw Policy

\\n
\\n
\\n \\t\\n
\\n \\n
\\n
\\n
\\n\";","import { Component, OnInit } from '@angular/core';\nimport { ApiService } from './api.service';\nimport { environment } from './../environments/environment';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent implements OnInit {\n title = 'Adminio-UI';\n\n constructor(private apiService: ApiService) { }\n\n ngOnInit() {\n \tthis.checkAuthStatus()\n }\n\n private checkAuthStatus(){\n this.apiService.checkAuthStatus().subscribe((data)=>{\n console.log(\"DATA AUTH>>>\", data);\n this.apiService.validateAuthInResponse(data)\n });\n }\n}\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzZXJ2ZXIuY29tcG9uZW50LnNjc3MifQ== */\";","export default \"\\n\\n\\n\\n \\n Adminio UI \\n\\n \\n \\n\\n \\n \\n \\n \\n
\\n \\n \\n\\t\\t\\t\\t\\t\\n
\\n
\\n \\n\\n
\\n\\n\\n\\n\\n\\n\\n\\n\\n\";","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { MDBBootstrapModule } from 'angular-bootstrap-md';\nimport { UsersComponent } from './users/users.component';\nimport { FormsModule, FormControl, FormGroup, Validators, ReactiveFormsModule} from \"@angular/forms\";\nimport { ServerComponent } from './server/server.component';\nimport { FilterPipe } from './filter.pipe';\nimport { PoliciesComponent } from './policies/policies.component';\nimport { NgxJsonViewerModule } from 'ngx-json-viewer';\nimport { AngularMultiSelectModule } from 'angular2-multiselect-dropdown';\nimport { LoaderComponent } from './loader/loader.component';\nimport { LoaderService } from './loader.service';\nimport { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from '@angular/common/http';\nimport { LoaderInterceptor } from './loader.interceptor';\nimport { BucketsComponent } from './buckets/buckets.component';\nimport { CommonModule } from '@angular/common';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { ToastrModule } from 'ngx-toastr';\nimport { GroupsComponent } from './groups/groups.component';\nimport { EnvServiceProvider } from './env.service.provider';\n\n\n\n@NgModule({\n declarations: [\n AppComponent,\n UsersComponent,\n ServerComponent,\n FilterPipe,\n PoliciesComponent,\n LoaderComponent,\n BucketsComponent,\n GroupsComponent,\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n MDBBootstrapModule.forRoot(),\n HttpClientModule,\n ReactiveFormsModule,\n NgxJsonViewerModule,\n AngularMultiSelectModule,\n FormsModule,\n CommonModule,\n BrowserAnimationsModule,\n ToastrModule.forRoot()\n ],\n providers: [\n EnvServiceProvider,\n LoaderService,\n { provide: HTTP_INTERCEPTORS, useClass: LoaderInterceptor, multi: true }\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJidWNrZXRzLmNvbXBvbmVudC5zY3NzIn0= */\";","import { EnvService } from './env.service';\n\nexport const EnvServiceFactory = () => {\n // Create env\n const env = new EnvService();\n\n // Read environment variables from browser window\n const browserWindow = window || {};\n const browserWindowEnv = browserWindow['__env'] || {};\n\n // Assign environment variables from browser window to env\n // In the current implementation, properties from env.js overwrite defaults from the EnvService.\n // If needed, a deep merge can be performed here to merge properties instead of overwriting them.\n for (const key in browserWindowEnv) {\n if (browserWindowEnv.hasOwnProperty(key)) {\n env[key] = window['__env'][key];\n }\n }\n\n return env;\n};\n\nexport const EnvServiceProvider = {\n provide: EnvService,\n useFactory: EnvServiceFactory,\n deps: [],\n};\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJ1c2Vycy5jb21wb25lbnQuc2NzcyJ9 */\";","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { ApiService } from '../api.service';\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n\n@Component({\n\tselector: 'app-groups',\n\ttemplateUrl: './groups.component.html',\n\tstyleUrls: ['./groups.component.scss']\n})\n\nexport class GroupsComponent implements OnInit, AfterViewInit {\n\tobjectKeys = Object.keys;\n\tjsn = JSON;\n\tgroups = {};\n\tgroupsWithMembers = [];\n\tusers = {};\n\trawPolicies = {};\n\tgroupToUpdate = {};\n\tnewGroupName = \"\";\n\tnewGroupPolicy = \"\";\n\tnewGroupStatus = \"\";\n\tpolicies;\n\tupdateStatusValues = ['enabled','disabled'];\n\tmodalCreateEditTitle;\n\tmodalCreateEditButtonText;\n\tmodalEditMode = false;\n\trawView = \"\";\n\tusersToRemove = [];\n\tgroupToDelete = \"\";\n\n\n\n\tdropdownList = [];\n\tselectedItems = [];\n\tdropdownSettings = {};\n\n\n\n\t@ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n\t@ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n\n\tprevious: string;\n\tsearchText: string = '';\n\n \tconstructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService) { }\n\n \t@HostListener('input') oninput() {\n\t\tif(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n\t\t this.searchItems();\n\t\t}\n\t\tif(event && event['target'] !== undefined && event.target[\"name\"] !== undefined && event.target[\"name\"] == \"newGroupName\"){\n\t if(this.modalEditMode){\n\t if(this.newGroupName == this.groupToUpdate[\"name\"]){\n\t console.log('hit')\n\t this.isEditMode(true)\n\t }else{\n\t this.isNowCopyMode();\n\t }\n\t }\n\t }\n\t}\n\n\tngOnInit() {\n\t\tthis.getGroups()\n\t\tthis.getListOfUsers()\n\t\tthis.getListOfPolicies()\n\t\tthis.isEditMode(false)\n\n\t\tthis.dropdownList = [\n\t\t {\"id\":1,\"itemName\":\"wait! i'm getting policies ASAP\"}\n\t ];\n\n\t this.dropdownSettings = {\n\t\t\tsingleSelection: false,\n\t\t\ttext:\"Select Members\",\n\t\t\tselectAllText:'Select All',\n\t\t\tunSelectAllText:'UnSelect All',\n\t\t\tenableSearchFilter: true\n\t\t};\n\t}\n\n\tonItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedItems);\n\t}\n\tOnItemDeSelect(item:any){\n\t\tthis.usersToRemove.push(item[\"itemName\"])\n\t console.log(item);\n\t console.log(this.selectedItems);\n\t}\n\tonSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonDeSelectAll(items: any){\n\n\t\t\tfor (let i = 0; i < this.selectedItems.length; i++) {\n\t\t\t\tthis.usersToRemove.push(this.selectedItems[i][\"itemName\"])\n\t\t\t}\n\n\t this.selectedItems = [];\n\t}\n\n\tprivate searchItems() {\n\t\tconst prev = this.mdbTable.getDataSource();\n\n\t\tif (!this.searchText) {\n\t\t this.mdbTable.setDataSource(this.previous);\n\t\t this.groups = this.mdbTable.getDataSource();\n\t\t}\n\n\t\tif (this.searchText) {\n\t\t this.groups = this.mdbTable.searchLocalDataBy(this.searchText);\n\t\t this.mdbTable.setDataSource(prev);\n\t\t}\n\t}\n\n\tngAfterViewInit() {\n\t this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n\t this.mdbTablePagination.calculateFirstItemIndex();\n\t this.mdbTablePagination.calculateLastItemIndex();\n\t this.cdRef.detectChanges();\n\t}\n\n\tprivate isEditMode(state){\n\t\tthis.modalEditMode = state;\n\t\tif(state){\n\t\t this.modalCreateEditTitle = \"Edit group\"\n\t\t this.modalCreateEditButtonText = \"Update\"\n\t\t}else{\n\t\t this.modalCreateEditTitle = \"Create group\"\n\t\t this.modalCreateEditButtonText = \"Create\"\n\t\t}\n\t}\n\n\tprivate isNowCopyMode(){\n\t\tthis.modalCreateEditTitle = \"Copy group\"\n\t\tthis.modalCreateEditButtonText = \"Copy\"\n\t}\n\n\tprivate commaToBr(arr) {\n\t\t// console.log(arr)\n\t var str = arr.join('\\n\\r');\n\t return str;\n\t}\n\n\tpublic b64unpack(str){\n\t// console.log(JSON.parse(atob(str)))\n\t\treturn JSON.parse(atob(str));\n\t}\n\n\tprivate rawPrepare(str){\n\t\tconsole.log(this.rawPolicies[str])\n\t\tthis.rawView = this.b64unpack(this.rawPolicies[str]);\n\t}\n\n\n\tprivate getGroups(){\n\t\tthis.groups = {};\n\t\tthis.groupsWithMembers = [];\n\t\tthis.previous = \"\";\n\t\tthis.apiService.getGroups().subscribe((data)=>{\n\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t console.log(data);\n\t\t if(data!==null){\n\t\t this.groups = data;\n\t\t for (var i = 0; i < this.objectKeys(data).length; i++) {\n\t\t\t\t\tlet tempGroupName = data[i]\n\t\t\t\t\tthis.apiService.getGroupDescription(tempGroupName).subscribe((data)=>{\n\t\t\t\t\t\tif(data!==null){\n\t\t\t\t\t\t\tthis.groupsWithMembers.push(data)\n\t\t\t\t\t\t\tthis.mdbTable.setDataSource(this.groupsWithMembers);\n\t\t \t\t\t\t\tthis.previous = this.mdbTable.getDataSource();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\tconsole.log(this.groupsWithMembers)\n\t\t\tthis.groups = this.groupsWithMembers;\n\t\t }\n\n\n\t\t});\n\t}\n\tprivate getListOfUsers(){\n\t\tthis.apiService.getUsers().subscribe((data)=>{\n\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t\tif(data!==null){\n\t\t\t\tthis.dropdownList = Object.entries(data).map((e) => ( { \"id\":e[0],\"itemName\":e[0] } ));\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getGroupDescription(group){\n\t\tthis.isEditMode(true);\n\t\tconsole.log(group)\n\t\tthis.apiService.getGroupDescription(group).subscribe((data)=>{\n\t\t\tif(data!==null){\n\t\t\t\tconsole.log(data)\n\t\t\t\tthis.groupToUpdate = data;\n\t\t\t\tthis.newGroupName = data[\"name\"]\n\t\t\t\tthis.newGroupPolicy = data[\"policy\"]\n\t\t\t\tthis.newGroupStatus = data[\"status\"]\n\t\t\t\tfor (var i = 0; i < data[\"members\"].length; i++) {\n\t\t\t\t\tvar tempMember = data[\"members\"][i];\n\t\t\t\t\tthis.selectedItems.push({\"id\":tempMember,\"itemName\":tempMember})\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getListOfPolicies(){\n\t\tthis.apiService.getPolicies().subscribe((data)=>{\n\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t this.policies = Object.keys(data);\n\t\t this.rawPolicies = data;\n\t\t});\n\t}\n\n\tprivate resetForm(){\n\t\tthis.newGroupName = \"\";\n\t\tthis.selectedItems = [];\n\t\tthis.newGroupPolicy = \"\";\n\t\tthis.newGroupStatus = \"\";\n\t}\n\n\tprivate markGroupToDelete(group){\n\t\tconsole.log(\"GROUP TO DELETE\", group);\n\n\t\tthis.groupToDelete = group\n\t}\n\n\tprivate deleteGroup(){\n\t\tconsole.log(\"GROUP TO DELETE >>>\", this.groupToDelete);\n\n\t\tthis.apiService.updateMembersGroup(this.groupToDelete,[],\"true\").subscribe((data)=>{\n\t\t\t this.apiService.validateAuthInResponse(data)\n\t if(data[\"Success\"]){\n\t this.toastr.success('Group: '+this.newGroupName+' has been removed', 'Success');\n\t this.usersToRemove = [];\n\t\t\t\t\tthis.refreshList();\n\t\t\t\t\tthis.groupToDelete = \"\";\n\t }else{\n\t this.toastr.error(JSON.stringify(data), 'Error while removing group');\n\t\t\t\t\tthis.refreshList();\n\t\t\t\t\tthis.groupToDelete = \"\";\n\t }\n\t });\n\t}\n\n\tprivate wipeGroupMembers(){\n\n\t\tthis.apiService.updateMembersGroup(this.newGroupName,this.usersToRemove,\"true\").subscribe((data)=>{\n\t\t\t this.apiService.validateAuthInResponse(data)\n\t if(data[\"Success\"]){\n\t this.toastr.success('Group: '+this.newGroupName+' members has been removed', 'Success');\n\t this.usersToRemove = [];\n\t }else{\n\t this.toastr.error(JSON.stringify(data), 'Error while removing members from group');\n\t }\n\t });\n\t}\n\n\tprivate updatePolicy(){\n\t\tif(this.newGroupPolicy !== null && this.newGroupPolicy != \"\"){\n\t \tthis.apiService.setPolicy(this.newGroupPolicy,this.newGroupName,\"true\").subscribe((data)=>{\n\t\t\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t if(data[\"Success\"]){\n\t\t this.toastr.success('Group: '+this.newGroupName+' policy has been set to '+this.newGroupPolicy, 'Success');\n\t\t }else{\n\t\t this.toastr.error(JSON.stringify(data), 'Error while setting policy to group');\n\t\t }\n\t\t });\n\t }\n\t}\n\n\tprivate updateStatus(){\n\t\tif(this.newGroupStatus !== null && this.newGroupStatus != \"\"){\n\t \tthis.apiService.setStatusGroup(this.newGroupName,this.newGroupStatus).subscribe((data)=>{\n\t\t\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t if(data[\"Success\"]){\n\t\t this.toastr.success('Group: '+this.newGroupName+' status has been set to '+this.newGroupStatus, 'Success');\n\t\t }else{\n\t\t this.toastr.error(JSON.stringify(data), 'Error while setting status to group');\n\t\t }\n\t\t });\n\t }\n\t}\n\n\tprivate refreshList(){\n\t\tthis.updatePolicy();\n\t\tthis.updateStatus();\n\t\tthis.getGroups();\n\t}\n\n\tprivate createGroup(){\n\t\tconsole.log(\"CREATE GROUP CALLED\")\n\t\tlet newMembers = []\n\t\tfor (var i = 0; i < this.selectedItems.length; i++) {\n\t\t\tnewMembers.push(this.selectedItems[i].itemName)\n\t\t}\n\n\t\t//remove users from group\n\t\tconsole.log(\"grouptoUpdate\",this.groupToUpdate);\n\n\t\tif(this.groupToUpdate!==null && this.groupToUpdate!=\"\" && this.groupToUpdate){\n\t\t\tif(this.usersToRemove.length > 0){\n\t\t\t\tthis.wipeGroupMembers()\n\t\t\t}\n\t\t}\n\n\t\t//add all new users to group\n\t\tif(newMembers.length > 0){\n\t\t\tthis.apiService.updateMembersGroup(this.newGroupName,newMembers,\"false\").subscribe((data)=>{\n\t\t\t\t this.apiService.validateAuthInResponse(data)\n\t\t if(data[\"Success\"]){\n\t\t this.toastr.success('Group: '+this.newGroupName+' has been created', 'Success');\n\t\t }else{\n\t\t this.toastr.error(JSON.stringify(data), 'Error while creating group');\n\t\t }\n\t\t this.refreshList();\n\t\t });\n\t\t}else{\n\t\t\tthis.refreshList();\n\t\t}\n this.isEditMode(false);\n this.groupToUpdate = {};\n\t}\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'filter'\n})\nexport class FilterPipe implements PipeTransform {\n\n transform(items: any[], searchPolicy: string): any[] {\n\n if (!items) {\n return [];\n }\n if (!searchPolicy) {\n return items;\n }\n searchPolicy = searchPolicy.toLocaleLowerCase();\n\n return items.filter(it => {\n return it.toLocaleLowerCase().includes(searchPolicy);\n });\n }\n\n}\n","export default \"
\\n
\\n
\\n

Buckets

\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n\\t\\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n \\n\\t \\n\\t \\t \\n\\t \\n\\t \\n \\n \\n \\n \\n \\n\\t
NameTagsCreation DateSizeQuotaEventOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n {{buckets[b].name}}\\n   \\n {{buckets[b].policy}}\\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n 0\\\">\\n
    \\n
  • {{tag}}: {{buckets[b].tags[tag]}}
  • \\n
\\n
\\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{buckets[b].info.creationDate | date : \\\"dd/MM/yy HH:mm:ss\\\" }}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\\\">\\n \\n {{(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)+'').length > 3 ? math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024/1024)+' Gb' : isNaN(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)) ? '–' : math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024) +' Mb'}}\\n \\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\\\">\\n \\n {{buckets[b].quota?.quotatype}}\\n {{buckets[b].quota?.quotatype}}\\n \\n 0\\\" mdbTooltip=\\\"{{buckets[b].quota?.quota}} bytes\\\" placement=\\\"top\\\">\\n {{(math.round(buckets[b].quota?.quota/1024/1024)+'').length > 3 ? math.round(buckets[b].quota?.quota/1024/1024/1024)+' Gb' : isNaN(math.round(buckets[b].quota?.quota/1024/1024)) ? '–' : math.round(buckets[b].quota?.quota/1024/1024) +' Mb'}}\\n \\n \\n ∞\\n \\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && serviceInfo?.sqsARN\\\">\\n \\n Lambda:\\n \\n {{c.Lambda}}
\\n
    \\n
  • \\n {{e}}\\n
  • \\n
\\n
\\n
\\n \\n Topic:\\n \\n {{c.Topic}}
\\n
    \\n
  • \\n {{e}}\\n
  • \\n
\\n
\\n
\\n \\n Queue:\\n \\n {{c.Queue}}
\\n
    \\n
  • \\n {{e}}\\n
  • \\n
\\n
\\n
\\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t \\t \\t \\n\\t \\t \\t \\n\\t \\t \\t \\n\\t \\t \\t \\n \\n \\n\\t \\t
\\n \\n
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Bucket Lifecycyle

\\n
\\n
\\n
\\n
\\n
\\n This bucket already have a lifecycyle policy, you can export it as JSON by clicking on \\\"dowload icon\\\" >\\n \\n
\\n Or override it by upload a new lifecycle policy.\\n
\\n
\\n Lifecycle policy is structrured xml file. You can use examples from Minio\\n documentation. Or use an AWS S3 documentation\\n Object Lifecycle Management\\n
\\n
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Bucket

\\n
\\n
\\n Are you shure?
After you click on \\\"Delete\\\" button bucket {{bucketToDelete}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Bucket Notifications

\\n
\\n
\\n Are you shure?
After you click on \\\"remove\\\" button bucket {{bucketToRemoveNotifications}} notifications will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Bucket Quota Limits

\\n
\\n
\\n Are you shure?
After you click on \\\"remove\\\" button quota for bucket {{bucketToRemoveQuota}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Encryption

\\n
\\n
\\n Are you shure?
After you click on \\\"remove\\\" button encryption for bucket {{bucketToRemoveEncryption}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Create Bucket

\\n
\\n
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n You can pass multiple names with \\\",\\\" delimiter\\n
\\n
Policy
\\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
Encryption
\\n

\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
Tags
\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\t\\t\\t\\t
\\n
\\n {{tag}}: {{newBucketTagsList[tag]}}\\n
\\n
Quota
\\n \\n\\n
\\n \\n \\t\\t\\t\\t\\t\\t\\t
\\n\\n
\\n \\n In \\\"fifo\\\" mode - old data automatically will be removed when you reach quota limit.
\\n In \\\"hard\\\" mode - you can't add new data to bucket if quota limit reached.\\n
\\n\\n
\\n \\t\\t\\t\\t\\t\\n
\\n
Bytes
\\n
\\n
\\n
\\n
\\n
Events section
\\n

\\n
\\n \\t\\t\\t\\t\\t\\t\\t\\t\\t\\n \\t\\t\\t\\t\\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Update Bucket

\\n
\\n
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
Policy
\\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
Encryption
\\n

\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
Tags
\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\t\\t\\t\\t
\\n
\\n {{tag}}: {{newBucketTagsList[tag]}}\\n
\\n
\\n
Quota section
\\n \\n
\\n \\n \\t\\t\\t\\t\\t\\t\\t
\\n\\n
\\n \\n In \\\"fifo\\\" mode - old data automatically will be removed when you reach quota limit.
\\n In \\\"hard\\\" mode - you can't add new data to bucket if quota limit reached.\\n
\\n\\n
\\n \\t\\t\\t\\t\\t\\n
\\n
Bytes
\\n
\\n
\\n
\\n
\\n
Events section
\\n

\\n
\\n \\t\\t\\t\\t\\t\\t\\t\\t\\t\\n \\t\\t\\t\\t\\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n\";","//loader.interceptor.ts\nimport { Component, OnInit } from '@angular/core';\nimport { LoaderService } from '../loader.service';\n\n@Component({\nselector: 'app-loading',\ntemplateUrl: './loader.component.html',\nstyleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent implements OnInit {\n\nloading: boolean;\nerror: boolean;\nconstructor(private loaderService: LoaderService) {\n this.loaderService.isLoading.subscribe((v) => {\n this.loading = v;\n this.error = this.loaderService.isError;\n });\n}\nngOnInit() {\n}\n\n}\n","export default \"
\\n\\t
\\n\\t\\t
\\n\\t\\t

Policies

\\n\\t\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t     \\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t
NameActionPrincipalEffectResourceConditionsOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{objectKeys(policies[pol])}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • {{action}}
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t{{policies[pol].Statement.Principal}}\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • {{st.Effect}}
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t
    • {{resource}}
    • \\n\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{condition}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
        \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • {{con}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
          \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{conKeyVal}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t \\n\\t\\t \\t\\t \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Policy

\\n
\\n
\\n Are you shure?
After you click on \\\"Delete\\\" button policy {{policyToDelete}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Upload Policy

\\n
\\n
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Raw Policy

\\n
\\n
\\n \\t\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

{{modalCreateEditTitle}}

Switch to interface
\\n
\\n
\\n \\t\\n \\t\\t
\\n\\t\\t\\t\\t\\t
 
\\n\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t \\t
\\n In Edit mode you can make a copy of policy - Just rename it!\\n
\\n\\n\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
0\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
0\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t Principal\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
Buckets section
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t arn:aws:s3:::\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t /\\\" [(ngModel)]=\\\"newPolicy.bucket\\\" aria-label=\\\"Recipient's username\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-describedby=\\\"s3-prefix\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
BucketOptions
{{bst}}
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
Conditions section
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
Condition and options
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{condition}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • {{con}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{conKeyVal}}  \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
 
\\n\\t\\t\\t\\t\\t
\\n\\n\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t
EffectActionResourceConditionsOptions
{{st.Effect}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • {{action}}
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • {{resource}}
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{condition}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • {{con}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{conKeyVal}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\n \\n
\\n \\n
\\n
\\n
\\n\";","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { ApiService } from '../api.service';\nimport { FormControl, FormGroup, Validators, ReactiveFormsModule } from \"@angular/forms\";\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n\n@Component({\n selector: 'app-users',\n templateUrl: './users.component.html',\n styleUrls: ['./users.component.scss']\n})\nexport class UsersComponent implements OnInit, AfterViewInit {\n validatingForm: FormGroup;\n updateUser: FormGroup;\n users = {};\n usersRaw = {};\n userToDelete;\n userToUpdate;\n objectKeys = Object.keys;\n objectValues = Object.values;\n jsn = JSON;\n policies;\n updateStatusValues = ['enabled','disabled'];\n\n @ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n @ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n previous: string;\n\n searchText: string = '';\n\n constructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService) { }\n\n @HostListener('input') oninput() {\n if(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n this.searchItems();\n }\n }\n\n ngOnInit() {\n \tthis.getListOfUsers()\n \tthis.getListOfPolicies()\n this.resetForm()\n this.updateUserFrom()\n }\n\n searchItems() {\n console.log(this.searchText)\n const prev = this.mdbTable.getDataSource();\n\n if (!this.searchText) {\n this.mdbTable.setDataSource(this.previous);\n this.users = this.mdbTable.getDataSource();\n }\n\n if (this.searchText) {\n this.users = this.mdbTable.searchLocalDataBy(this.searchText);\n this.mdbTable.setDataSource(prev);\n }\n }\n\n ngAfterViewInit() {\n this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n this.mdbTablePagination.calculateFirstItemIndex();\n this.mdbTablePagination.calculateLastItemIndex();\n this.cdRef.detectChanges();\n }\n\n get newUserAccess() {\n\treturn this.validatingForm.get('newUserAccess');\n }\n\n get newUserSecret() {\n\treturn this.validatingForm.get('newUserSecret');\n }\n\n get newUserPolicy() {\n\treturn this.validatingForm.get('newUserPolicy');\n }\n\n private generatePassword(length) {\n var charset = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n var retVal = \"\";\n for (var i = 0, n = charset.length; i < length; ++i) {\n retVal += charset.charAt(Math.floor(Math.random() * n));\n }\n\n return retVal;\n }\n\n get accessKeyUpdate() {\n return this.updateUser.get('accessKeyUpdate');\n }\n\n get secretKeyUpdate() {\n return this.updateUser.get('secretKeyUpdate');\n }\n\n get policyUpdate() {\n return this.updateUser.get('policyUpdate');\n }\n\n get statusUpdate() {\n return this.updateUser.get('statusUpdate');\n }\n\n private updateUserFrom(){\n this.updateUser = new FormGroup({\n accessKeyUpdate: new FormControl({value: '', disabled: true}, Validators.required),\n secretKeyUpdate: new FormControl(''),\n policyUpdate: new FormControl('', Validators.required),\n statusUpdate: new FormControl('', Validators.required)\n });\n }\n\n private resetForm(){\n \tthis.validatingForm = new FormGroup({\n newUserAccess: new FormControl(this.generatePassword(16), Validators.minLength(5)),\n newUserSecret: new FormControl(this.generatePassword(24), Validators.minLength(10)),\n newUserPolicy: new FormControl('',Validators.minLength(0))\n });\n }\n\n private getListOfUsers(){\n \tthis.apiService.getUsers().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data)\n this.usersRaw = data;\n const arrayOfUsers = Object.entries(data).map((e) => ( { [e[0]]: e[1] } ));\n this.users = arrayOfUsers;\n this.mdbTable.setDataSource(arrayOfUsers);\n console.log(arrayOfUsers)\n this.previous = this.mdbTable.getDataSource();\n });\n }\n\n\n private getListOfPolicies(){\n \tthis.apiService.getPolicies().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.policies = Object.keys(data);\n });\n }\n\n private createUser(){\n \tvar userAccess = this.newUserAccess.value;\n \tvar userSecret = this.newUserSecret.value;\n \tvar userPolicy = this.newUserPolicy.value;\n\n \tconsole.log(userPolicy)\n\n \tif(userPolicy!=''){\n \t\tthis.apiService.addUserExtended(userAccess,userSecret,userPolicy).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n\t console.log(data);\n\t this.getListOfUsers();\n if(data[\"Success\"]){\n this.toastr.success('User: '+userAccess+' with policy '+userPolicy+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating user');\n }\n\t });\n \t}else{\n \t\tthis.apiService.addUser(userAccess,userSecret).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n\t console.log(data);\n\t this.getListOfUsers();\n if(data[\"Success\"]){\n this.toastr.success('User: '+userAccess+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating user');\n }\n\t });\n \t}\n }\n\n private setStatusUser(accessKey,status){\n \tif(status == 'enabled'){\n \t\tstatus = 'disabled'\n \t}else{\n \t\tstatus = 'enabled'\n \t}\n \tthis.apiService.setStatusUser(accessKey,status).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('User: '+accessKey+' status has changed to '+status, 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while changing state for user');\n }\n this.getListOfUsers();\n });\n }\n\n private deleteUserPrepare(accessKey){\n \tthis.userToDelete = accessKey\n }\n\n private updateUserPrepare(accessKey){\n this.userToUpdate = accessKey\n this.updateUser.patchValue({'accessKeyUpdate': accessKey});\n if(this.usersRaw[accessKey]['policyName']){\n this.updateUser.patchValue({'policyUpdate': this.usersRaw[accessKey]['policyName']});\n }\n if(this.usersRaw[accessKey]['status']){\n this.updateUser.patchValue({'statusUpdate': this.usersRaw[accessKey]['status']});\n }\n console.log(this.usersRaw[accessKey])\n }\n\n private updateGenNewPassword(){\n this.updateUser.patchValue({'secretKeyUpdate': this.generatePassword(24)});\n }\n\n private updateUserSave(){\n var updatedSecret = this.updateUser.value.secretKeyUpdate;\n var updatedPolicy = this.updateUser.value.policyUpdate;\n var updatedStatus = this.updateUser.value.statusUpdate;\n\n this.apiService.updateUser(this.userToUpdate,updatedSecret,updatedPolicy,updatedStatus).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n this.getListOfUsers();\n if(data[\"Success\"]){\n this.toastr.success('User: '+this.userToUpdate+' has been updated', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while updating user');\n }\n });\n }\n\n\n private deleteUser(){\n \tthis.apiService.deleteUser(this.userToDelete).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('User: '+this.userToDelete+' has been deleted', 'Success');\n }\n this.updateUserFrom();\n this.getListOfUsers();\n });\n }\n\n}\n","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl} from '@angular/platform-browser';\nimport { ApiService } from '../api.service';\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n@Component({\n selector: 'app-policies',\n templateUrl: './policies.component.html',\n styleUrls: ['./policies.component.scss']\n})\nexport class PoliciesComponent implements OnInit {\n objectKeys = Object.keys;\n objectValues = Object.values;\n policies = {};\n policiesRaw = {};\n b64decode;\n rawView = '';\n policyToDelete;\n policyToUpdate;\n modalEditMode;\n jsn = JSON;\n uploadPolicyName;\n uploadPolicyFile;\n uploadPolicyFileName;\n downloadJsonHref;\n modalCreateEditTitle;\n modalCreateEditButtonText;\n\n dropdownActionList = [];\n dropdownAdminList = [];\n dropdownConditionList = [];\n dropdownConditionKeyList = [];\n\n selectedActions = [];\n selectedAdmins = [];\n selectedCondition = [];\n selectedConditionKey = [];\n\n dropdownActionSettings = {};\n dropdownAdminSettings = {};\n dropdownConditionSettings = {};\n dropdownConditionKeySettings = {};\n\n advancedInterface = false;\n advancedInterfaceLabel = \"advanced\"\n\n newPolicy = {\n \tname:\"\",\n \teffect:\"allow\",\n \tbucket:\"\",\n };\n\n newPolicyRaw = {\n \tVersion:\"\",\n \tStatement: []\n }\n\n newStatement = {\n Action: [],\n Effect: \"\",\n Resource: [],\n Condition: {},\n Principal: \"\"\n }\n\n newConditionValue = \"\"\n\n @ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n @ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n previous: string;\n\n searchText: string = '';\n\n\n constructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService, private sanitizer: DomSanitizer) { }\n\n @HostListener('input') oninput() {\n if(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n this.searchItems();\n }\n if(event && event['target'] !== undefined && event.target[\"name\"] !== undefined && event.target[\"name\"] == \"newPolicyName\"){\n if(this.modalEditMode){\n if(this.newPolicy.name == this.policyToUpdate){\n this.isEditMode(true)\n }else{\n this.isNowCopyMode();\n }\n }\n }\n\n }\n\n @ViewChild('uploadPolicyFile', { static: true })\n uploadFileInput: any;\n\n ngOnInit() {\n \tthis.getPolicies()\n\n\n \tthis.dropdownActionList = [\n {\"id\":1,\"itemName\":\"s3:AbortMultipartUpload\"},\n {\"id\":2,\"itemName\":\"s3:CreateBucket\"},\n {\"id\":3,\"itemName\":\"s3:DeleteBucket\"},\n {\"id\":4,\"itemName\":\"s3:ForceDeleteBucket\"},\n {\"id\":5,\"itemName\":\"s3:DeleteBucketPolicy\"},\n {\"id\":6,\"itemName\":\"s3:DeleteObject\"},\n {\"id\":7,\"itemName\":\"s3:GetBucketLocation\"},\n {\"id\":8,\"itemName\":\"s3:GetBucketNotification\"},\n {\"id\":9,\"itemName\":\"s3:GetBucketPolicy\"},\n {\"id\":10,\"itemName\":\"s3:GetObject\"},\n {\"id\":11,\"itemName\":\"s3:HeadBucket\"},\n {\"id\":12,\"itemName\":\"s3:ListAllMyBuckets\"},\n {\"id\":13,\"itemName\":\"s3:ListBucket\"},\n {\"id\":14,\"itemName\":\"s3:ListBucketVersions\"},\n {\"id\":15,\"itemName\":\"s3:ListBucketMultipartUploads\"},\n {\"id\":16,\"itemName\":\"s3:ListenNotification\"},\n {\"id\":17,\"itemName\":\"s3:ListenBucketNotification\"},\n {\"id\":18,\"itemName\":\"s3:ListMultipartUploadParts\"},\n {\"id\":19,\"itemName\":\"s3:PutLifecycleConfiguration\"},\n {\"id\":20,\"itemName\":\"s3:GetLifecycleConfiguration\"},\n {\"id\":21,\"itemName\":\"s3:PutBucketNotification\"},\n {\"id\":22,\"itemName\":\"s3:PutBucketPolicy\"},\n {\"id\":23,\"itemName\":\"s3:PutObject\"},\n {\"id\":24,\"itemName\":\"s3:DeleteObjectVersion\"},\n {\"id\":25,\"itemName\":\"s3:DeleteObjectVersionTagging\"},\n {\"id\":26,\"itemName\":\"s3:GetObjectVersion\"},\n {\"id\":27,\"itemName\":\"s3:GetObjectVersionTagging\"},\n {\"id\":28,\"itemName\":\"s3:PutObjectVersionTagging\"},\n {\"id\":29,\"itemName\":\"s3:BypassGovernanceRetention\"},\n {\"id\":30,\"itemName\":\"s3:PutObjectRetention\"},\n {\"id\":31,\"itemName\":\"s3:GetObjectRetention\"},\n {\"id\":32,\"itemName\":\"s3:GetObjectLegalHold\"},\n {\"id\":33,\"itemName\":\"s3:PutObjectLegalHold\"},\n {\"id\":34,\"itemName\":\"s3:GetBucketObjectLockConfiguration\"},\n {\"id\":35,\"itemName\":\"s3:PutBucketObjectLockConfiguration\"},\n {\"id\":36,\"itemName\":\"s3:GetBucketTagging\"},\n {\"id\":37,\"itemName\":\"s3:PutBucketTagging\"},\n {\"id\":38,\"itemName\":\"s3:GetObjectTagging\"},\n {\"id\":39,\"itemName\":\"s3:PutObjectTagging\"},\n {\"id\":40,\"itemName\":\"s3:DeleteObjectTagging\"},\n {\"id\":41,\"itemName\":\"s3:PutEncryptionConfiguration\"},\n {\"id\":42,\"itemName\":\"s3:GetEncryptionConfiguration\"},\n {\"id\":43,\"itemName\":\"s3:PutBucketVersioning\"},\n {\"id\":44,\"itemName\":\"s3:GetBucketVersioning\"},\n {\"id\":45,\"itemName\":\"s3:GetReplicationConfiguration\"},\n {\"id\":46,\"itemName\":\"s3:PutReplicationConfiguration\"},\n {\"id\":47,\"itemName\":\"s3:ReplicateObject\"},\n {\"id\":48,\"itemName\":\"s3:ReplicateDelete\"},\n {\"id\":49,\"itemName\":\"s3:ReplicateTags\"},\n {\"id\":50,\"itemName\":\"s3:GetObjectVersionForReplication\"}\n ];\n\n this.dropdownActionSettings = {\n \t\tsingleSelection: false,\n \t\ttext:\"Select Actions\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true\n\t };\n\n this.dropdownAdminList = [\n {\"id\":1,\"itemName\":\"admin:ConfigUpdate\"},\n {\"id\":2,\"itemName\":\"admin:CreateUser\"},\n {\"id\":3,\"itemName\":\"admin:DeleteUser\"},\n {\"id\":4,\"itemName\":\"admin:ListUsers\"},\n {\"id\":5,\"itemName\":\"admin:EnableUser\"},\n {\"id\":6,\"itemName\":\"admin:DisableUser\"},\n {\"id\":7,\"itemName\":\"admin:GetUser\"},\n {\"id\":8,\"itemName\":\"admin:ServerInfo\"},\n {\"id\":9,\"itemName\":\"admin:ServerUpdate\"},\n {\"id\":10,\"itemName\":\"admin:StorageInfo\"},\n {\"id\":11,\"itemName\":\"admin:DataUsageInfo\"},\n {\"id\":12,\"itemName\":\"admin:TopLocks\"},\n {\"id\":13,\"itemName\":\"admin:OBDInfo\"},\n {\"id\":14,\"itemName\":\"admin:Profiling\"},\n {\"id\":15,\"itemName\":\"admin:ServerTrace\"},\n {\"id\":16,\"itemName\":\"admin:ConsoleLog\"},\n {\"id\":17,\"itemName\":\"admin:KMSKeyStatus\"},\n {\"id\":18,\"itemName\":\"admin:AddUserToGroup\"},\n {\"id\":19,\"itemName\":\"admin:RemoveUserFromGroup\"},\n {\"id\":20,\"itemName\":\"admin:GetGroup\"},\n {\"id\":21,\"itemName\":\"admin:ListGroups\"},\n {\"id\":22,\"itemName\":\"admin:EnableGroup\"},\n {\"id\":23,\"itemName\":\"admin:DisableGroup\"},\n {\"id\":24,\"itemName\":\"admin:CreatePolicy\"},\n {\"id\":25,\"itemName\":\"admin:DeletePolicy\"},\n {\"id\":26,\"itemName\":\"admin:GetPolicy\"},\n {\"id\":27,\"itemName\":\"admin:AttachUserOrGroupPolicy\"},\n {\"id\":28,\"itemName\":\"admin:ListUserPolicies\"}\n ];\n\n this.dropdownAdminSettings = {\n singleSelection: false,\n text:\"Select Admin actions for statement\",\n selectAllText:'Select All',\n unSelectAllText:'UnSelect All',\n enableSearchFilter: true\n };\n\n \tthis.dropdownConditionList = [\n {\"id\":1,\"itemName\":\"ArnEquals\"},\n {\"id\":2,\"itemName\":\"ArnEqualsIfExists\"},\n {\"id\":3,\"itemName\":\"ArnLike\"},\n {\"id\":4,\"itemName\":\"ArnLikeIfExists\"},\n {\"id\":5,\"itemName\":\"ArnNotEquals\"},\n {\"id\":6,\"itemName\":\"ArnNotEqualsIfExists\"},\n {\"id\":7,\"itemName\":\"ArnNotLike\"},\n {\"id\":8,\"itemName\":\"ArnNotLikeIfExists\"},\n {\"id\":9,\"itemName\":\"BinaryEquals\"},\n {\"id\":10,\"itemName\":\"BinaryEqualsIfExists\"},\n {\"id\":11,\"itemName\":\"BinaryNotEquals\"},\n {\"id\":12,\"itemName\":\"BinaryNotEqualsIfExists\"},\n {\"id\":13,\"itemName\":\"Bool\"},\n {\"id\":14,\"itemName\":\"BoolIfExists\"},\n {\"id\":15,\"itemName\":\"DateEquals\"},\n {\"id\":16,\"itemName\":\"DateEqualsIfExists\"},\n {\"id\":17,\"itemName\":\"DateGreaterThan\"},\n {\"id\":18,\"itemName\":\"DateGreaterThanEquals\"},\n {\"id\":19,\"itemName\":\"DateGreaterThanEqualsIfExists\"},\n {\"id\":20,\"itemName\":\"DateGreaterThanIfExists\"},\n {\"id\":21,\"itemName\":\"DateLessThan\"},\n {\"id\":22,\"itemName\":\"DateLessThanEquals\"},\n {\"id\":23,\"itemName\":\"DateLessThanEqualsIfExists\"},\n {\"id\":24,\"itemName\":\"DateLessThanIfExists\"},\n {\"id\":25,\"itemName\":\"DateNotEquals\"},\n {\"id\":26,\"itemName\":\"DateNotEqualsIfExists\"},\n {\"id\":27,\"itemName\":\"IpAddress\"},\n {\"id\":28,\"itemName\":\"IpAddressIfExists\"},\n {\"id\":29,\"itemName\":\"NotIpAddress\"},\n {\"id\":30,\"itemName\":\"NotIpAddressIfExists\"},\n {\"id\":31,\"itemName\":\"Null\"},\n {\"id\":32,\"itemName\":\"NumericEquals\"},\n {\"id\":33,\"itemName\":\"NumericEqualsIfExists\"},\n {\"id\":34,\"itemName\":\"NumericGreaterThan\"},\n {\"id\":35,\"itemName\":\"NumericGreaterThanEquals\"},\n {\"id\":36,\"itemName\":\"NumericGreaterThanEqualsIfExists\"},\n {\"id\":37,\"itemName\":\"NumericGreaterThanIfExists\"},\n {\"id\":38,\"itemName\":\"NumericLessThan\"},\n {\"id\":39,\"itemName\":\"NumericLessThanEquals\"},\n {\"id\":40,\"itemName\":\"NumericLessThanEqualsIfExists\"},\n {\"id\":41,\"itemName\":\"NumericLessThanIfExists\"},\n {\"id\":42,\"itemName\":\"NumericNotEquals\"},\n {\"id\":43,\"itemName\":\"NumericNotEqualsIfExists\"},\n {\"id\":44,\"itemName\":\"StringEquals\"},\n {\"id\":45,\"itemName\":\"StringEqualsIfExists\"},\n {\"id\":46,\"itemName\":\"StringEqualsIgnoreCase\"},\n {\"id\":47,\"itemName\":\"StringEqualsIgnoreCaseIfExists\"},\n {\"id\":48,\"itemName\":\"StringLike\"},\n {\"id\":49,\"itemName\":\"StringLikeIfExists\"},\n {\"id\":50,\"itemName\":\"StringNotEquals\"},\n {\"id\":51,\"itemName\":\"StringNotEqualsIfExists\"},\n {\"id\":52,\"itemName\":\"StringNotEqualsIgnoreCase\"},\n {\"id\":53,\"itemName\":\"StringNotEqualsIgnoreCaseIfExists\"},\n {\"id\":54,\"itemName\":\"StringNotLike\"},\n {\"id\":55,\"itemName\":\"StringNotLikeIfExists\"}\n ];\n\n this.dropdownConditionSettings = {\n \t\tsingleSelection: true,\n \t\ttext:\"Select Condition\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true\n\t };\n\n \tthis.dropdownConditionKeyList = [\n {\"id\":1,\"itemName\":\"aws:CurrentTime\"},\n {\"id\":2,\"itemName\":\"aws:EpochTime\"},\n {\"id\":3,\"itemName\":\"aws:MultiFactorAuthAge\"},\n {\"id\":4,\"itemName\":\"aws:MultiFactorAuthPresent\"},\n {\"id\":5,\"itemName\":\"aws:PrincipalArn\"},\n {\"id\":6,\"itemName\":\"aws:PrincipalOrgID\"},\n {\"id\":7,\"itemName\":\"aws:PrincipalTag/${TagKey}\"},\n {\"id\":8,\"itemName\":\"aws:PrincipalType\"},\n {\"id\":9,\"itemName\":\"aws:Referer\"},\n {\"id\":10,\"itemName\":\"aws:RequestTag/${TagKey}\"},\n {\"id\":11,\"itemName\":\"aws:RequestedRegion\"},\n {\"id\":12,\"itemName\":\"aws:SecureTransport\"},\n {\"id\":13,\"itemName\":\"aws:SourceAccount\"},\n {\"id\":14,\"itemName\":\"aws:SourceArn\"},\n {\"id\":15,\"itemName\":\"aws:SourceIp\"},\n {\"id\":16,\"itemName\":\"aws:SourceVpc\"},\n {\"id\":17,\"itemName\":\"aws:SourceVpce\"},\n {\"id\":18,\"itemName\":\"aws:TagKeys\"},\n {\"id\":19,\"itemName\":\"aws:TokenIssueTime\"},\n {\"id\":20,\"itemName\":\"aws:UserAgent\"},\n {\"id\":21,\"itemName\":\"aws:userid\"},\n {\"id\":22,\"itemName\":\"aws:username\"},\n {\"id\":23,\"itemName\":\"s3:AccessPointNetworkOrigin\"},\n {\"id\":24,\"itemName\":\"s3:DataAccessPointAccount\"},\n {\"id\":25,\"itemName\":\"s3:DataAccessPointArn\"},\n {\"id\":26,\"itemName\":\"s3:ExistingJobOperation\"},\n {\"id\":27,\"itemName\":\"s3:ExistingJobPriority\"},\n {\"id\":28,\"itemName\":\"s3:ExistingObjectTag/\"},\n {\"id\":29,\"itemName\":\"s3:JobSuspendedCause\"},\n {\"id\":30,\"itemName\":\"s3:LocationConstraint\"},\n {\"id\":31,\"itemName\":\"s3:RequestJobOperation\"},\n {\"id\":32,\"itemName\":\"s3:RequestJobPriority\"},\n {\"id\":33,\"itemName\":\"s3:RequestObjectTag/\"},\n {\"id\":34,\"itemName\":\"s3:RequestObjectTagKeys\"},\n {\"id\":35,\"itemName\":\"s3:VersionId\"},\n {\"id\":36,\"itemName\":\"s3:authtype\"},\n {\"id\":37,\"itemName\":\"s3:delimiter\"},\n {\"id\":38,\"itemName\":\"s3:locationconstraint\"},\n {\"id\":39,\"itemName\":\"s3:max-keys\"},\n {\"id\":40,\"itemName\":\"s3:object-lock-legal-hold\"},\n {\"id\":41,\"itemName\":\"s3:object-lock-mode\"},\n {\"id\":42,\"itemName\":\"s3:object-lock-remaining-retention-days\"},\n {\"id\":43,\"itemName\":\"s3:object-lock-retain-until-date\"},\n {\"id\":44,\"itemName\":\"s3:prefix\"},\n {\"id\":45,\"itemName\":\"s3:signatureage\"},\n {\"id\":46,\"itemName\":\"s3:signatureversion\"},\n {\"id\":47,\"itemName\":\"s3:versionid\"},\n {\"id\":48,\"itemName\":\"s3:x-amz-acl\"},\n {\"id\":49,\"itemName\":\"s3:x-amz-content-sha256\"},\n {\"id\":50,\"itemName\":\"s3:x-amz-copy-source\"},\n {\"id\":51,\"itemName\":\"s3:x-amz-grant-full-control\"},\n {\"id\":52,\"itemName\":\"s3:x-amz-grant-read\"},\n {\"id\":53,\"itemName\":\"s3:x-amz-grant-read-acp\"},\n {\"id\":54,\"itemName\":\"s3:x-amz-grant-write\"},\n {\"id\":55,\"itemName\":\"s3:x-amz-grant-write-acp\"},\n {\"id\":56,\"itemName\":\"s3:x-amz-metadata-directive\"},\n {\"id\":57,\"itemName\":\"s3:x-amz-server-side-encryption\"},\n {\"id\":58,\"itemName\":\"s3:x-amz-server-side-encryption-aws-kms-key-id\"},\n {\"id\":59,\"itemName\":\"s3:x-amz-storage-class\"},\n {\"id\":60,\"itemName\":\"s3:x-amz-website-redirect-location\"}\n ];\n\n this.dropdownConditionKeySettings = {\n \t\tsingleSelection: true,\n \t\ttext:\"Select Condition Key\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true\n\t };\n }\n\n switchAdvanced(){\n if(this.advancedInterface){\n this.advancedInterface = false;\n this.advancedInterfaceLabel = \"Advanced\"\n }else{\n this.advancedInterface = true;\n this.advancedInterfaceLabel = \"Basic\"\n }\n }\n\n\tonActionItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedActions);\n\t}\n\tonActionItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedActions);\n\t}\n\tonActionSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonActionDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n\tonAdminItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedAdmins);\n\t}\n\tonAdminItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedAdmins);\n\t}\n\tonAdminSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonAdminDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n\n //condition select actions\n onConditionItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedCondition);\n\t}\n\tonConditionItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedCondition);\n\t}\n\tonConditionSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonConditionDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n //condition key select actions\n onConditionKeyItemSelect(item:any){\n console.log(item);\n console.log(this.selectedConditionKey);\n }\n onConditionKeyItemDeSelect(item:any){\n console.log(item);\n console.log(this.selectedConditionKey);\n }\n onConditionKeySelectAll(items: any){\n console.log(items);\n }\n onConditionKeyDeSelectAll(items: any){\n console.log(items);\n }\n\n\n searchItems() {\n console.log(this.searchText)\n const prev = this.mdbTable.getDataSource();\n\n if (!this.searchText) {\n this.mdbTable.setDataSource(this.previous);\n this.policies = this.mdbTable.getDataSource();\n }\n\n if (this.searchText) {\n this.policies = this.mdbTable.searchLocalDataBy(this.searchText);\n this.mdbTable.setDataSource(prev);\n }\n }\n\n ngAfterViewInit() {\n this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n this.mdbTablePagination.calculateFirstItemIndex();\n this.mdbTablePagination.calculateLastItemIndex();\n this.cdRef.detectChanges();\n }\n\n private resetPloicyForm(removeName){\n \tconsole.log(removeName);\n \tthis.selectedActions = [];\n \tthis.selectedAdmins = []\n \tif(!removeName){\n \t\tthis.newPolicy.effect = \"Allow\"\n\t\t this.newPolicy.bucket = \"\"\n \t}else{\n \t\tthis.newPolicy.name = \"\",\n \t\tthis.newPolicy.effect = \"Allow\"\n \t\tthis.newPolicy.bucket = \"\"\n \t}\n\n this.newStatement = {\n Action: [],\n Effect: \"\",\n Resource: [],\n Condition: {},\n Principal: \"\"\n }\n\n }\n\n private getPolicies(){\n \tthis.apiService.getPolicies().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n this.policiesRaw = data;\n const arrayOfPolicies = Object.entries(data).map((e) => ( { [e[0]]: e[1] } ));\n this.policies = arrayOfPolicies;\n this.mdbTable.setDataSource(arrayOfPolicies);\n console.log(arrayOfPolicies)\n this.previous = this.mdbTable.getDataSource();\n });\n }\n\n private deletePolicy(){\n \tthis.apiService.deletePolicy(this.policyToDelete).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n this.getPolicies();\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.policyToDelete+' has been deleted', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while deleting policy');\n }\n });\n }\n\n private downloadPolicy(jsonObj) {\n var theJSON = JSON.stringify(jsonObj);\n console.log(\"theJSON>>>>>>>>>>>\",theJSON);\n var uri = this.sanitizer.bypassSecurityTrustUrl(\"data:text/json;charset=UTF-8,\" + encodeURIComponent(theJSON));\n this.downloadJsonHref = uri;\n }\n\n private rawPrepare(obj){\n \tthis.rawView = obj;\n }\n\n private deletePolicyPrepare(policy){\n \tthis.policyToDelete = policy\n }\n\n private prepareNewPolicyRaw(){\n \tthis.newPolicyRaw = {\n\t \tVersion:\"2012-10-17\",\n\t \tStatement: []\n \t}\n }\n\n private removeCondition(valueId,keyName,conditionName){\n console.log(this.newStatement)\n console.log(valueId,keyName,conditionName)\n this.newStatement.Condition[conditionName][keyName].splice(valueId,1)\n }\n\n private addCondition(){\n console.log(this.selectedCondition[0].itemName)\n console.log(this.selectedConditionKey[0].itemName)\n console.log(this.newConditionValue)\n if(!this.newStatement.Condition){\n this.newStatement.Condition = {}\n }\n if(this.newStatement.Condition[this.selectedCondition[0].itemName]){\n if(this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName]){\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName].push(this.newConditionValue)\n }else{\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName] = []\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName].push(this.newConditionValue)\n }\n }else{\n this.newStatement.Condition[this.selectedCondition[0].itemName] = {}\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName] = []\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName].push(this.newConditionValue)\n }\n\n this.selectedCondition = []\n this.selectedConditionKey = []\n this.newConditionValue = \"\"\n console.log(this.newStatement.Condition)\n }\n\n\n private addStatement(){\n console.log(\"called add statement\");\n\n if(this.selectedActions.length>0){\n \tif(this.selectedActions.length == this.dropdownActionList.length){\n \t\tthis.newStatement.Action.push(\"s3:*\")\n \t}else{\n \t \tfor (var i = 0; i < this.selectedActions.length; i++) {\n \t \t\tthis.newStatement.Action.push(this.selectedActions[i].itemName)\n \t \t}\n \t }\n }else{\n if(this.selectedAdmins.length == this.dropdownAdminList.length){\n \t\tthis.newStatement.Action.push(\"admin:*\")\n \t}else{\n \t \tfor (var i = 0; i < this.selectedAdmins.length; i++) {\n \t \t\tthis.newStatement.Action.push(this.selectedAdmins[i].itemName)\n \t \t}\n \t }\n }\n \tthis.newStatement.Effect = this.newPolicy.effect\n\n \tconsole.log(this.newStatement)\n if(this.newStatement.Condition && Object.entries(this.newStatement.Condition).length === 0 && this.newStatement.Condition.constructor === Object){\n console.log(\"Condition removed cause empty\")\n delete this.newStatement.Condition\n }else{\n if(!this.newStatement.Principal || this.newStatement.Principal == \"\"){\n console.log(\"Principal set to * cause condition not empty\")\n this.newStatement.Principal = \"*\"\n }\n }\n\n \tthis.newPolicyRaw.Statement.push(this.newStatement);\n \tconsole.log(this.newPolicyRaw)\n\n \tthis.resetPloicyForm(false);\n }\n\n private editStatement(i){\n console.log(\"called Edit Statement\");\n\n this.newStatement = this.newPolicyRaw.Statement[i]\n this.newPolicy.effect = this.newPolicyRaw.Statement[i].Effect\n\n switch ((this.newStatement.Action[0]).substring(0, 3)) {\n case \"s3:\":\n if(this.newStatement.Action[0] == \"s3:*\"){\n for (var g = 0; g < this.dropdownActionList.length; g++) {\n this.selectedActions.push({\"id\":this.dropdownActionList[g].id,\"itemName\":this.dropdownActionList[g].itemName})\n }\n }else{\n for (var g = 0; g < this.newStatement.Action.length; g++) {\n this.selectedActions.push({\"id\":g,\"itemName\":this.newStatement.Action[g]})\n }\n }\n break;\n case \"adm\":\n if(this.newStatement.Action[0] == \"admin:*\"){\n for (var g = 0; g < this.dropdownAdminList.length; g++) {\n this.selectedAdmins.push({\"id\":this.dropdownAdminList[g].id,\"itemName\":this.dropdownAdminList[g].itemName})\n }\n }else{\n for (var g = 0; g < this.newStatement.Action.length; g++) {\n this.selectedAdmins.push({\"id\":g,\"itemName\":this.newStatement.Action[g]})\n }\n }\n break;\n }\n\n\n this.newStatement.Action = []\n this.newPolicyRaw.Statement.splice(i,1)\n }\n\n private addBucketStatement(){\n this.newStatement.Resource.push(\"arn:aws:s3:::\"+this.newPolicy.bucket)\n this.newPolicy.bucket = ''\n }\n\n private removeStatement(i){\n \tthis.newPolicyRaw.Statement.splice(i,1)\n }\n\n private removeBucketStatement(i){\n this.newStatement.Resource.splice(i,1)\n }\n\n private fileChanged(e) {\n console.log(\"eventTriggered\");\n\n this.uploadPolicyFile = e.target.files[0];\n this.uploadPolicyFileName = e.target.files[0].name;\n }\n\n private uploadPolicy(){\n let fileReader = new FileReader();\n fileReader.onload = (e) => {\n console.log(fileReader.result);\n let policyFileString = ((fileReader.result).toString()).replace(/\\n/g, ' ').replace(/\\r/g, ' ')\n this.apiService.addPolicy(this.uploadPolicyName,policyFileString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.newPolicy.name+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n this.getPolicies();\n });\n }\n fileReader.readAsText(this.uploadPolicyFile);\n }\n\n private resetUploadForm(){\n this.uploadFileInput.nativeElement.value = \"\";\n this.uploadPolicyFile;\n this.uploadPolicyName = \"\";\n this.uploadPolicyFileName = \"\";\n }\n\n private createPolicy(){\n \tconsole.log(this.newPolicy, this.newPolicyRaw)\n\n \tlet policyString = JSON.stringify(this.newPolicyRaw);\n\n \tthis.apiService.addPolicy(this.newPolicy.name,policyString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.newPolicy.name+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n this.getPolicies();\n });\n }\n\n private isEditMode(state){\n this.modalEditMode = state;\n if(state){\n this.modalCreateEditTitle = \"Edit policy\"\n this.modalCreateEditButtonText = \"Update\"\n }else{\n this.modalCreateEditTitle = \"Build up new policy\"\n this.modalCreateEditButtonText = \"Create\"\n }\n }\n\n private isNowCopyMode(){\n this.modalCreateEditTitle = \"Copy policy\"\n this.modalCreateEditButtonText = \"Copy\"\n }\n\n private updatePolicyPrepare(policy){\n this.policyToUpdate = policy\n this.prepareNewPolicyRaw()\n this.resetPloicyForm(false)\n this.newPolicy.name = policy;\n\n var oldPolicy = this.policiesRaw[policy]\n this.newPolicyRaw.Statement = oldPolicy.Statement;\n }\n\n}\n","export default \"
\\n\\t

Server statistics {{server.endpoint}}

\\n\\t
\\n\\t\\tView Raw JSON 
\\n\\t\\tminio version: {{server.version}}
\\n\\t\\tuptime: {{math.round(server.uptime/60)}} min.
\\n\\t\\tnetwork: {{server.network[server.endpoint]}}\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t

Storage

\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
TotalUsedStatePath
{{math.round((disk.totalspace/1024/1024/1024)*100)/100}} Gb{{math.round((disk.usedspace/1024/1024/1024)*100)/100}} Gb{{disk.state}}{{disk.path}}
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t

Disk usage info

\\n\\t\\t\\t
\\n\\t\\t\\t\\t

Last update: {{diskUsageInfo?.lastUpdate.split('T').join(' ').split('.')[0]}}

\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
Objects countObjects total sizeBuckets count
{{diskUsageInfo.objectsCount}}{{math.round((diskUsageInfo.objectsTotalSize/1024/1024/1024)*100)/100}} Gb{{diskUsageInfo.bucketsCount}}
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t
0\\\">\\n\\t\\t
\\n\\t\\t\\t

Bucket sizes chart

\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t
0\\\">\\n\\t\\t
\\n\\t \\t

Object sizes histogram

\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Raw Server Info

\\n
\\n
\\n \\t\\n
\\n \\n
\\n
\\n
\\n\";","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJwb2xpY2llcy5jb21wb25lbnQuc2NzcyJ9 */\";","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class EnvService {\n\n // The values that are defined here are the default values that can\n // be overridden by env.js\n\n // API url\n public apiBaseUrl = '';\n public apiMultiBackend = false;\n public apiBackends = '';\n\n constructor() {\n }\n\n}\n","export default \"
\\n\\t
\\n\\t
\\n\\t\\t

List of users

\\n\\t
\\n\\t
\\n\\t\\t\\n\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t \\n\\t\\t \\n\\t\\t
\\n\\t
\\n
\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t \\n\\t\\n\\t
User namePolicyStatusAction
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{objectKeys(users[key])}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{objectValues(users[key])[0].policyName}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t \\n\\t\\t \\t\\t\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n
\\n
\\n
\\n\\n\\n
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t

Remove User

\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\tAre you shure?
After you click on \\\"Delete\\\" button user {{userToDelete}} will be removed.\\n\\t\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n
\\n\\n\\n\\n
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t

Edit User

\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tInput invalid\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tInput valid\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t

\\n\\t\\t\\t\\t\\t\\tGenerate new secret\\n\\t\\t\\t\\t\\t

\\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n
\\n\\n\\n\\n
\\n
\\n\\t
\\n\\t
\\n\\t\\t

Create new user

\\n\\t\\t\\n\\t\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput invalid\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput valid\\n\\t\\t\\t \\n\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput invalid\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput valid\\n\\t\\t\\t \\n\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t

\\n\\t\\t\\t\\t\\tGenerate new access\\\\secret pair\\n\\t\\t\\t

\\n\\t\\t\\t
\\n\\t
\\n\\t \\n\\t
\\n
\\n
\\n\";","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { UsersComponent } from './users/users.component';\nimport { ServerComponent } from './server/server.component';\nimport { PoliciesComponent } from './policies/policies.component';\nimport { BucketsComponent } from './buckets/buckets.component';\nimport { GroupsComponent } from './groups/groups.component';\n\nconst routes: Routes = [\n\t{path:'users', component: UsersComponent},\n\t{path:'server', component: ServerComponent},\n\t{path:'policies', component: PoliciesComponent},\n\t{path:'groups', component: GroupsComponent},\n\t{path:'', component: BucketsComponent}\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Router } from \"@angular/router\";\nimport { EnvService } from './env.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n\n constructor(private httpClient: HttpClient, private router: Router, private env: EnvService) {\n if(env.apiBaseUrl) {\n console.log('apiBaseUrl', env.apiBaseUrl);\n }\n if(env.apiMultiBackend) {\n console.log('apiMultiBackend', env.apiMultiBackend);\n }\n if(env.apiBackends) {\n console.log('apiBackends', env.apiBackends);\n }\n\n }\n\n\n multiBackend = this.env.apiMultiBackend;\n backendsUrls = this.env.apiBackends;\n baseUrl = this.getCurrentBackend();\n\n private getCurrentBackend(){\n let envDefaultBackend = this.env.apiBaseUrl;\n if(this.multiBackend && this.multiBackend == true) {\n let savedBackend = localStorage.getItem('currentBackend');\n\n let activeBackend = \"\";\n\n if(savedBackend && savedBackend != \"\"){\n activeBackend = savedBackend;\n }else{\n activeBackend = envDefaultBackend;\n }\n return activeBackend;\n } else {\n return envDefaultBackend;\n }\n }\n\n public overrideBackend(newBackend){\n localStorage.setItem('currentBackend', newBackend);\n this.baseUrl = newBackend;\n\n this.router.onSameUrlNavigation = 'reload';\n this.router.routeReuseStrategy.shouldReuseRoute = function () {\n return false;\n };\n\n this.router.navigate([this.router.url])\n this.router.onSameUrlNavigation = 'ignore';\n }\n\n public getMultiBackendStatus(){\n return this.multiBackend;\n }\n\n public getBackendsUrls(){\n return this.backendsUrls;\n }\n\n public validateAuthInResponse(data){\n if(data != null && typeof data.oauth != \"undefined\" && typeof data.auth != \"undefined\" && data.oauth != false && data.auth != true){\n window.location.href = this.env.apiBaseUrl+'/auth/?state='+window.location.href;\n }\n }\n\n public serverInfo(){\n return this.httpClient.get(this.baseUrl+'/api/v2/server/common-info');\n }\n\n public diskInfo(){\n return this.httpClient.get(this.baseUrl+'/api/v2/server/disk-info');\n }\n\n public getUsers(){\n return this.httpClient.get(this.baseUrl+'/api/v2/users/list');\n }\n\n public addUser(access,secret){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('secretKey', secret);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/create', form)\n }\n\n public addUserExtended(access,secret,policy){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('secretKey', secret);\n form.append('policyName', policy);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/create-extended', form)\n }\n\n public updateUser(access,secret,policy,status){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('secretKey', secret);\n form.append('policyName', policy);\n form.append('status', status);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/update', form)\n }\n\n\n public setStatusUser(access,status){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('status', status);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/set-status', form)\n }\n\n public deleteUser(access){\n let form = new FormData();\n\n form.append('accessKey', access);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/delete', form)\n }\n\n public getPolicies(){\n return this.httpClient.get(this.baseUrl+'/api/v2/policies/list');\n }\n\n public deletePolicy(policy){\n let form = new FormData();\n\n form.append('policyName', policy);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/policy/delete', form)\n }\n\n public addPolicy(policyName, policyString){\n let form = new FormData();\n\n form.append('policyName', policyName);\n form.append('policyString', policyString);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/policy/create', form)\n }\n\n public getBuckets(){\n return this.httpClient.get(this.baseUrl+'/api/v2/buckets/list');\n }\n\n public getBucketsExtended(){\n return this.httpClient.get(this.baseUrl+'/api/v2/buckets/list-extended');\n }\n\n public enableNotificationForBucket(bucket, stsARN, eventTypes, filterPrefix, filterSuffix){\n //put,get,delete\n let form = new FormData();\n\n form.append('bucket', bucket);\n form.append('stsARN', stsARN);\n form.append('eventTypes', eventTypes);\n form.append('filterPrefix', filterPrefix);\n form.append('filterSuffix', filterSuffix);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-events', form)\n }\n\n public getBucketEvents(bucket){\n let form = new FormData();\n\n form.append('bucket', bucket);\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-events',form)\n }\n\n public removeBucketEvents(bucket){\n let form = new FormData();\n\n form.append('bucket', bucket);\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/remove-events',form)\n }\n\n public deleteBucket(bucket){\n let form = new FormData();\n\n form.append('bucketName', bucket);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/delete', form)\n }\n\n public createBucket(bucket){\n let form = new FormData();\n\n form.append('newBucket', bucket);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/create', form)\n }\n\n public getGroups(){\n return this.httpClient.get(this.baseUrl+'/api/v2/groups/list');\n }\n\n public updateMembersGroup(group,members,IsRemove){\n let form = new FormData();\n\n form.append('group', group);\n form.append('members', members);\n form.append('IsRemove', IsRemove);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/group/update-members', form);\n }\n\n public getGroupDescription(group){\n let form = new FormData();\n\n form.append('group', group);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/group/get-description', form);\n }\n\n public setStatusGroup(group,status){\n let form = new FormData();\n\n form.append('group', group);\n form.append('status', status);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/group/set-status', form);\n }\n\n public setPolicy(policyName,entityName,isGroup){\n let form = new FormData();\n\n form.append('policyName', policyName);\n form.append('entityName', entityName);\n form.append('isGroup', isGroup);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/policy/update', form);\n }\n\n public setLifecycle(bucketName,lifecycle){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('lifecycle', lifecycle);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-lifecycle', form);\n }\n\n\n public getLifecycle(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-lifecycle', form);\n }\n\n public checkAuthStatus(){\n return this.httpClient.get(this.baseUrl+'/auth/check');\n }\n\n public getBucketQuota(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-quota', form);\n }\n\n public setBucketQuota(bucketName, quotaType, quotaValue){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('quotaType', quotaType);\n form.append('quotaValue', quotaValue);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-quota', form);\n }\n\n public removeBucketQuota(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/remove-quota', form);\n }\n\n public setBucketTag(bucketName,tagsString){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('bucketTags', tagsString);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-tags', form);\n }\n\n public getBucketTag(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-tags', form);\n }\n\n public setBucketPolicy(bucketName,policyString){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('bucketPolicy', policyString);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-policy', form);\n }\n\n public getBucketPolicy(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-policy', form);\n }\n\n public getBucketEncryption(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-encryption', form);\n }\n\n public setBucketEncryption(bucketName, encType, encMasterKeyID){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('bucketEncryptionType', encType);\n form.append('kmsMasterKey', encMasterKeyID);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-encryption', form);\n }\n\n public removeBucketEncryption(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/remove-encryption', form);\n }\n\n\n}\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJhcHAuY29tcG9uZW50LnNjc3MifQ== */\";","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"zn8P\";"],"sourceRoot":"webpack:///"} \ No newline at end of file +{"version":3,"sources":["./src/app/loader/loader.component.html","./src/app/loader.service.ts","./src/app/loader.interceptor.ts","./src/app/loader/loader.component.scss","./src/app/groups/groups.component.scss","./src/environments/environment.ts","./src/app/buckets/buckets.component.ts","./src/app/server/server.component.ts","./src/app/groups/groups.component.html","./src/app/app.component.ts","./src/app/server/server.component.scss","./src/app/app.component.html","./src/app/app.module.ts","./src/app/buckets/buckets.component.scss","./src/app/env.service.provider.ts","./src/app/users/users.component.scss","./src/app/groups/groups.component.ts","./src/app/filter.pipe.ts","./src/app/buckets/buckets.component.html","./src/app/loader/loader.component.ts","./src/app/policies/policies.component.html","./src/app/users/users.component.ts","./src/app/policies/policies.component.ts","./src/app/server/server.component.html","./src/app/policies/policies.component.scss","./src/app/env.service.ts","./src/app/users/users.component.html","./src/app/app-routing.module.ts","./src/app/api.service.ts","./src/app/app.component.scss","./src/main.ts","./$_lazy_route_resource lazy namespace object"],"names":[],"mappings":"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","file":"main-es2015.js","sourcesContent":["export default \"
\\n\\t
\\n\\t
\\n\\t
\\n\\n\\t
\\n\\t\\t
\\n\\t\\t Loading...\\n\\t\\t
\\n\\t
\\n
\\n\\n
\\n\\t
\\n\\t\\t\\n\\t\\t
\\n\\t\\t
\\n\\t\\tSeems backend unreachable\\n\\t
\\n
\\n\";","//loader.service.ts\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LoaderService {\n public isError = false\n public isLoading = new BehaviorSubject(false);\n constructor() { }\n}\n","// loader.interceptors.ts\nimport { Injectable } from '@angular/core';\nimport {\n HttpErrorResponse,\n HttpResponse,\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { LoaderService } from './loader.service';\n\n@Injectable()\nexport class LoaderInterceptor implements HttpInterceptor {\n private requests: HttpRequest[] = [];\n\n constructor(private loaderService: LoaderService) { }\n\n removeRequest(req: HttpRequest) {\n const i = this.requests.indexOf(req);\n if (i >= 0) {\n this.requests.splice(i, 1);\n }\n this.loaderService.isLoading.next(this.requests.length > 0);\n }\n\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\n req = req.clone({\n withCredentials: true\n });\n this.requests.push(req);\n this.loaderService.isLoading.next(true);\n this.loaderService.isError = false;\n return Observable.create(observer => {\n const subscription = next.handle(req)\n .subscribe(\n event => {\n if (event instanceof HttpResponse) {\n this.removeRequest(req);\n observer.next(event);\n }\n },\n err => {\n this.loaderService.isError = true;\n this.removeRequest(req);\n observer.error(err);\n },\n () => {\n this.removeRequest(req);\n observer.complete();\n });\n // remove request from queue when cancelled\n return () => {\n this.removeRequest(req);\n subscription.unsubscribe();\n };\n });\n }\n}\n","export default \"dialog {\\n width: 300px;\\n}\\n\\ndialog::-webkit-backdrop {\\n background: rgba(0, 0, 0, 0.7);\\n}\\n\\ndialog::backdrop {\\n background: rgba(0, 0, 0, 0.7);\\n}\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xvYWRlci5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNJLFlBQUE7QUFDSjs7QUFDRztFQUNDLDhCQUFBO0FBRUo7O0FBSEc7RUFDQyw4QkFBQTtBQUVKIiwiZmlsZSI6ImxvYWRlci5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbImRpYWxvZyB7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgfVxuICAgZGlhbG9nOjpiYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjcpO1xuICAgfSJdfQ== */\";","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJncm91cHMuY29tcG9uZW50LnNjc3MifQ== */\";","export const environment = {\n production: false\n};\n","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl} from '@angular/platform-browser';\nimport { ApiService } from '../api.service';\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n\n\n@Component({\n selector: 'app-buckets',\n templateUrl: './buckets.component.html',\n styleUrls: ['./buckets.component.scss']\n})\nexport class BucketsComponent implements OnInit, AfterViewInit {\n math = Math;\n objectKeys = Object.keys;\n isNaN: Function = Number.isNaN;\n buckets = {};\n bucketToDelete;\n bucketToRemoveNotifications;\n bucketToRemoveQuota;\n bucketToRemoveEncryption;\n updateEncryptionTypeChanged = false;\n editBucketName;\n newBucketName = \"\";\n uiShowQuota = false;\n newBucketQuotaType = \"\";\n newBucketQuota = \"\";\n quotaTypes = [\"fifo\", \"hard\"];\n serviceInfo;\n diskUsageInfo;\n newBucketEncryption = \"\";\n encryptionTypes = [\"sse-s3\", \"sse-kms\"];\n newBucketMasterKeyID = \"\";\n newBucketEventARN = \"\";\n updateBucketEventARN = \"\";\n updateBucketEventFilterPrefix = \"\";\n updateBucketEventFilterSuffix = \"\";\n updateBucketQuotaObj = {};\n updateBucketEncryptionObj = {};\n updateQuotaTypeChanged = false;\n updateQuotaChanged = false;\n\n newBucketPolicy = \"none\";\n // updateBucketPolicy = \"none\"\n policyTypes = [\"none\", \"upload\", \"download\", \"public\", \"custom\"];\n updatePolicyTypeChanged = false;\n uploadPolicyName;\n uploadPolicyFile;\n uploadPolicyFileName;\n\n dropdownEventTypesList = [];\n selectedEventTypes = [];\n dropdownEventTypesSettings = {};\n newBucketEventFilterPrefix = \"\";\n newBucketEventFilterSuffix = \"\";\n newBucketTagName = \"\";\n newBucketTagValue = \"\";\n newBucketTagsList = {};\n\n tagListChanged = false;\n\n uploadLifecycleName;\n uploadLifecycleFile;\n uploadLifecycleFileName;\n lifecycleBucketName;\n downloadJsonHref;\n downloadLifecycleAvailable = 0;\n\n @ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n @ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n previous: string;\n\n searchText: string = '';\n\n constructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService, private sanitizer: DomSanitizer) { }\n\n @HostListener('input') oninput() {\n if(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n this.searchItems();\n }\n }\n\n @ViewChild('uploadLifecycleFile', { static: true })\n uploadFileInput: any;\n\n ngOnInit() {\n \tthis.getBuckets()\n this.getServerInfo()\n this.getDiskInfo()\n\n this.dropdownEventTypesList = [\n\t {\"id\":1,\"itemName\":\"put\"},\n\t {\"id\":2,\"itemName\":\"get\"},\n\t {\"id\":3,\"itemName\":\"delete\"},\n ];\n\n this.dropdownEventTypesSettings = {\n \t\tsingleSelection: false,\n \t\ttext:\"Select Event Types\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true,\n classes: \"dropdownFix\"\n\t };\n }\n\n //condition select actions\n onEventTypesItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedEventTypes);\n\t}\n\tonEventTypesItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedEventTypes);\n\t}\n\tonEventTypesSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonEventTypesDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n private toggleShowQuota(){\n (this.uiShowQuota) ? this.uiShowQuota = false : this.uiShowQuota = true;\n }\n\n // private toggleUpdateShowQuota(){\n // (this.updateUiShowQuota) ? this.updateUiShowQuota = false : this.updateUiShowQuota = true;\n // }\n\n private getServerInfo(){\n this.apiService.serverInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.serviceInfo = data;\n });\n }\n\n private getDiskInfo(){\n \tthis.apiService.diskInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.diskUsageInfo = data;\n });\n }\n\n private searchItems() {\n const prev = this.mdbTable.getDataSource();\n\n if (!this.searchText) {\n this.mdbTable.setDataSource(this.previous);\n this.buckets = this.mdbTable.getDataSource();\n }\n\n if (this.searchText) {\n this.buckets = this.mdbTable.searchLocalDataBy(this.searchText);\n this.mdbTable.setDataSource(prev);\n }\n }\n\n ngAfterViewInit() {\n this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n this.mdbTablePagination.calculateFirstItemIndex();\n this.mdbTablePagination.calculateLastItemIndex();\n this.cdRef.detectChanges();\n }\n\n private getBuckets(){\n \tthis.apiService.getBucketsExtended().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(\"BUCKETS >>>>>>\",data);\n if(data!==null){\n this.buckets = data;\n }else{\n this.buckets = {};\n }\n this.mdbTable.setDataSource(this.buckets);\n this.previous = this.mdbTable.getDataSource();\n });\n }\n\n private deleteBucketPrepare(bucketName){\n \tthis.bucketToDelete = bucketName;\n }\n\n private removeBucketNotificationPrepare(bucketName){\n \tthis.bucketToRemoveNotifications = bucketName;\n }\n\n private updateBucketPrepare(bucketName, currentQuota, currentQtype, currentTags){\n this.editBucketName = bucketName;\n\n this.apiService.getBucketTag(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n\n var dataKeys = Object.keys(data);\n console.log(dataKeys[0]);\n if(dataKeys[0]!=\"error\"){\n this.newBucketTagsList = data;\n }\n });\n\n this.apiService.getBucketEncryption(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n\n var dataKeys = Object.keys(data);\n console.log(\"Bucket Encryption >>\",dataKeys[1]);\n if(dataKeys[1]==\"Rules\"){\n this.updateBucketEncryptionObj = data;\n var dataVals = Object.values(data);\n console.log(\"Enc datavals\", dataVals[1][0]['Apply']['KmsMasterKeyID'])\n if(dataVals[1][0]['Apply']['KmsMasterKeyID'] == \"\"){\n this.updateBucketEncryptionObj = \"sse-s3\"\n }else{\n this.updateBucketEncryptionObj = \"sse-kms\"\n }\n }else{\n this.updateBucketEncryptionObj = \"\";\n }\n });\n\n this.apiService.getBucketQuota(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n\n var dataKeys = Object.keys(data);\n console.log(dataKeys[0]);\n if(dataKeys[0]!=\"error\"){\n this.updateBucketQuotaObj = data;\n }else{\n var emptyData = {\n quotatype: \"\"\n };\n this.updateBucketQuotaObj = emptyData;\n }\n });\n\n this.apiService.getBucketPolicy(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n this.newBucketPolicy = data[\"name\"];\n });\n }\n\n private deleteBucketQuotaPrepare(bucketName){\n this.bucketToRemoveQuota = bucketName;\n }\n\n private updateQuotaType(){\n this.updateQuotaTypeChanged = true;\n }\n\n private updatePolicyType(){\n this.updatePolicyTypeChanged = true;\n }\n\n private updateEncryptionType(){\n this.updateEncryptionTypeChanged = true;\n }\n\n private updateQuota(){\n this.updateQuotaChanged = true;\n }\n\n private deleteBucketEncryptionPrepare(bucketName){\n this.bucketToRemoveEncryption = bucketName;\n }\n\n private deleteBucket(){\n \tthis.apiService.deleteBucket(this.bucketToDelete).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Bucket has been deleted', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while deleting bucket');\n }\n this.getBuckets();\n });\n }\n\n private resetForm(){\n \tthis.newBucketName = \"\";\n this.newBucketEventARN = \"\";\n this.newBucketEncryption = \"\";\n this.newBucketMasterKeyID = \"\";\n this.updateEncryptionTypeChanged = false;\n this.newBucketEventFilterPrefix = \"\";\n this.newBucketEventFilterSuffix = \"\";\n this.selectedEventTypes = [];\n this.newBucketQuotaType = \"\";\n this.newBucketPolicy = \"none\";\n this.newBucketQuota = \"\";\n this.newBucketTagName = \"\";\n this.newBucketTagValue = \"\";\n this.newBucketTagsList = {};\n this.updatePolicyTypeChanged = false;\n this.tagListChanged = false;\n this.resetUploadForm();\n }\n\n private resetUpdateForm() {\n this.updateBucketEventARN = \"\";\n this.newBucketEncryption = \"\";\n this.newBucketMasterKeyID = \"\";\n this.updateEncryptionTypeChanged = false;\n this.selectedEventTypes = [];\n this.updateBucketEventFilterPrefix = \"\";\n this.updateBucketEventFilterSuffix = \"\";\n this.updateBucketQuotaObj = {};\n this.updateBucketEncryptionObj = \"\";\n this.updateQuotaTypeChanged = false;\n this.updateQuotaChanged = false;\n this.tagListChanged = false;\n this.updatePolicyTypeChanged = false;\n this.resetUploadForm();\n }\n\n private filePolicyChanged(e) {\n console.log(\"file event\");\n\n this.uploadPolicyFile = e.target.files[0];\n this.uploadPolicyFileName = e.target.files[0].name;\n }\n\n private resetUploadForm(){\n this.uploadFileInput.nativeElement.value = \"\";\n this.uploadPolicyFile;\n this.uploadPolicyName = \"\";\n this.uploadPolicyFileName = \"\";\n }\n\n private setPolicy(bucketName, updateListAfter){\n if(this.newBucketPolicy!=\"custom\"){\n this.apiService.setBucketPolicy(bucketName, this.newBucketPolicy).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.newBucketPolicy+' has been append to '+bucketName, 'Success');\n if(updateListAfter){\n this.getBuckets();\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n });\n } else {\n let fileReader = new FileReader();\n fileReader.onload = (e) => {\n console.log(\"Policy>>>>\",fileReader.result);\n\n let policyFileString = ((fileReader.result).toString()).replace(/\\n/g, ' ').replace(/\\r/g, ' ')\n console.log(\"Policy2>>>>\",policyFileString);\n this.apiService.setBucketPolicy(bucketName, policyFileString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy custom has been append to '+bucketName, 'Success');\n if(updateListAfter){\n this.getBuckets();\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n });\n\n }\n fileReader.readAsText(this.uploadPolicyFile);\n }\n }\n\n\n private createBucket(){\n \tif(this.newBucketName.indexOf(',')>-1){\n \t\tvar bucketsArr = this.newBucketName.split(',')\n \t\tfor (var i = 0; i < bucketsArr.length; i++) {\n \t\t\tif(bucketsArr[i]!=''){\n \t\t\t\tthis.createBucketSimple(bucketsArr[i],this.newBucketEventARN,this.newBucketQuotaType,this.newBucketQuota,this.newBucketPolicy,this.newBucketEncryption,this.newBucketMasterKeyID, bucketsArr.length,i+1)\n \t\t\t}\n \t\t}\n \t}else{\n \t\tthis.createBucketSimple(this.newBucketName,this.newBucketEventARN,this.newBucketQuotaType,this.newBucketQuota,this.newBucketPolicy,this.newBucketEncryption,this.newBucketMasterKeyID,1,1)\n \t}\n }\n\n private bucketLifecycle(bucket){\n this.lifecycleBucketName = bucket;\n }\n\n private createFormAddTag() {\n if(this.newBucketTagName != \"\" && this.newBucketTagValue != \"\"){\n this.newBucketTagsList[this.newBucketTagName] = this.newBucketTagValue;\n this.newBucketTagName = \"\";\n this.newBucketTagValue = \"\";\n this.tagListChanged = true;\n }\n }\n\n private createFormRemoveTag(tagName) {\n delete this.newBucketTagsList[tagName];\n this.tagListChanged = true;\n }\n\n private updateBucket(quotaType, quotaVal) {\n if(this.updateBucketEventARN != \"\"){\n this.enableNotificationForBucket(this.editBucketName, this.updateBucketEventARN, this.selectedEventTypes, this.updateBucketEventFilterPrefix, this.updateBucketEventFilterSuffix, true)\n }\n\n if(this.tagListChanged){\n this.setTagsForBucket(this.editBucketName,true)\n }\n\n if(this.updateQuotaTypeChanged || this.updateQuotaChanged){\n this.setQuotaForBucket(this.editBucketName, quotaType, quotaVal, true)\n }\n\n if(this.updatePolicyTypeChanged){\n this.setPolicy(this.editBucketName, true)\n }\n\n if(this.updateEncryptionTypeChanged){\n this.setBucketEncryption(this.editBucketName, this.updateBucketEncryptionObj, this.newBucketMasterKeyID, true)\n }\n }\n\n private enableNotificationForBucket(bucket, stsARN, eventTypes, filterPrefix, filterSuffix, updateListAfter){\n var eventTypesArr = []\n for (var i = 0; i < eventTypes.length; i++) {\n eventTypesArr.push(eventTypes[i].itemName)\n }\n this.apiService.enableNotificationForBucket(bucket, stsARN, eventTypesArr.join(','), filterPrefix, filterSuffix).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Events for bucket: '+bucket+' has been enabled', 'Success');\n if(updateListAfter){\n this.getBuckets();\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while enabling events for bucket'+bucket );\n }\n });\n }\n\n private setQuotaForBucket(bucket, quotaType, quotaVal, reloadBucketList){\n this.apiService.setBucketQuota(bucket, quotaType, quotaVal).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Quota for bucket '+bucket+' has been set', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while set quota for bucket');\n }\n if(reloadBucketList){\n this.getBuckets();\n }\n });\n }\n\n private removeBucketEvents(){\n var bucket = this.bucketToRemoveNotifications;\n this.apiService.removeBucketEvents(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Events for bucket '+bucket+' has been removed', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while removing bucket events');\n }\n this.getBuckets();\n });\n }\n\n private removeBucketQuota(){\n var bucket = this.bucketToRemoveQuota;\n this.apiService.removeBucketQuota(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Quota for bucket '+bucket+' has been removed', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while removing bucket quota');\n }\n this.getBuckets();\n });\n }\n\n private removeBucketEncryption(){\n var bucket = this.bucketToRemoveEncryption;\n this.apiService.removeBucketEncryption(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Encryption for bucket '+bucket+' has been removed', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while removing bucket encryption');\n }\n this.getBuckets();\n });\n }\n\n\n private setBucketEncryption(bucket, encType, masterKeyID, reloadBucketList){\n this.apiService.setBucketEncryption(bucket, encType, masterKeyID).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Encryption for bucket '+bucket+' has been set', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while set encryption for bucket');\n }\n if(reloadBucketList){\n this.getBuckets();\n }\n });\n }\n\n\n\n private createBucketSimple(bucket, eventARN, quotaType, quotaVal, policy, encryption, masterKeyID, numberOfBuckets, currentBucketNumber){\n \tthis.apiService.createBucket(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Bucket: '+bucket+' has been created', 'Success');\n if(eventARN != \"\"){\n this.enableNotificationForBucket(bucket, eventARN, this.selectedEventTypes, this.newBucketEventFilterPrefix, this.newBucketEventFilterSuffix, false);\n }\n if(quotaType != \"\" && quotaVal != \"\" && quotaVal >= 0){\n this.setQuotaForBucket(bucket, quotaType, quotaVal, false);\n }\n if(Object.keys(this.newBucketTagsList).length > 0){\n this.setTagsForBucket(bucket, false)\n }\n if(this.updatePolicyTypeChanged){\n this.setPolicy(bucket, false)\n }\n if(encryption != \"\"){\n this.setBucketEncryption(bucket, encryption, masterKeyID, false)\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating bucket');\n }\n if(numberOfBuckets == currentBucketNumber){\n setTimeout(()=>{\n this.getBuckets();\n }, 500);\n }\n });\n }\n\n private fileChanged(e) {\n console.log(\"eventTriggered\");\n\n this.uploadLifecycleFile = e.target.files[0];\n this.uploadLifecycleFileName = e.target.files[0].name;\n }\n\n private resetLifecycleForm(){\n this.uploadFileInput.nativeElement.value = \"\";\n this.uploadLifecycleFile;\n this.uploadLifecycleName = \"\";\n this.uploadLifecycleFileName = \"\";\n this.downloadLifecycleAvailable = 0;\n }\n\n private downloadLifecycle(bucket) {\n this.apiService.getLifecycle(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n // console.log(bucket, data);\n if(data[\"error\"]){\n this.toastr.error(JSON.stringify(data), 'Error while getting lifecycle');\n }else{\n if(data==\"\"){\n // this.toastr.error(\"Bucket has no lifecycle\", 'Error while getting lifecycle');\n }else{\n this.downloadLifecycleAvailable = 1;\n console.log(\"Lifecycle>>>>\",JSON.stringify(data));\n\n var uri = this.sanitizer.bypassSecurityTrustUrl(\"data:text/json;charset=UTF-8,\" + encodeURIComponent(JSON.stringify(data)));\n this.downloadJsonHref = uri;\n }\n }\n });\n }\n\n private uploadLifecycle(){\n let fileReader = new FileReader();\n fileReader.onload = (e) => {\n let lifecycleFileString = ((fileReader.result).toString()).replace(/\\n/g, ' ').replace(/\\r/g, ' ')\n this.apiService.setLifecycle(this.lifecycleBucketName,lifecycleFileString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Lifecycyle has been uploaded for bucket: '+this.lifecycleBucketName+'', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while uploading lifecycyle');\n }\n });\n }\n fileReader.readAsText(this.uploadLifecycleFile);\n }\n\n private setTagsForBucket(bucket,reloadBucketList){\n var tagsObj = this.newBucketTagsList;\n var tagsKeys = this.objectKeys(tagsObj);\n var tagArr = [];\n for (let i = 0; i < tagsKeys.length; i++) {\n var tagString = tagsKeys[i]+\"=\"+tagsObj[tagsKeys[i]]\n tagArr.push(tagString)\n }\n var tagString = tagArr.join(\"&\");\n console.log(\"TAG STRING >>>>\", tagString)\n this.apiService.setBucketTag(bucket, tagString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Tags for bucket '+bucket+' has been set', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while set tags for bucket');\n }\n if(reloadBucketList){\n this.getBuckets();\n }\n });\n }\n\n private downloadPolicy(bucket,fileName) {\n this.apiService.getBucketPolicy(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(\"download policy >>> \", bucket, data);\n if(data[\"error\"]){\n this.toastr.error(JSON.stringify(data), 'Error while getting policy');\n }else{\n if(data==\"\"){\n this.toastr.error(\"Bucket has no policy\", 'Error while getting policy');\n }else{\n var link = document.createElement('a');\n link.href = \"data:text/json;charset=UTF-8,\" + encodeURIComponent(data[\"policy\"].toString());\n link.download = fileName\n link.click();\n }\n }\n });\n }\n\n\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ApiService } from '../api.service';\n\n@Component({\n selector: 'app-server',\n templateUrl: './server.component.html',\n styleUrls: ['./server.component.scss']\n})\nexport class ServerComponent implements OnInit {\n\n objectKeys = Object.keys;\n objectValues = Object.values;\n math = Math;\n rawView = '';\n serviceInfo;\n diskUsageInfo;\n bucketSizes=[];\n hgChartDatasets=[{data: [], label: 'Number of objects'}];\n hgChartLabels=[];\n hgChartType = 'radar';\n hgChartColors = [\n {\n backgroundColor: 'rgba(151,187,205,0.9)',\n borderColor: 'rgba(151,187,205,1)',\n borderWidth: 2,\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: '#fff',\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderColor: 'rgba(151,187,205,1)'\n }\n ];\n hgChartOptions = {\n responsive: true\n };\n\n szChartDatasets=[{data: [], label: 'Size of bucket in Bytes'}];\n szChartLabels=[];\n szChartType = 'bar';\n szChartColors = [\n {\n backgroundColor: 'rgba(151,187,205,0.9)',\n borderColor: 'rgba(151,187,205,1)',\n borderWidth: 2,\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: '#fff',\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderColor: 'rgba(151,187,205,1)'\n }\n ];\n szChartOptions = {\n responsive: true\n };\n\n constructor(private apiService: ApiService) { }\n\n ngOnInit() {\n \tthis.serverInfo()\n this.diskInfo()\n }\n\n public hgChartClicked(e: any): void {\n }\n\n public hgChartHovered(e: any): void {\n }\n\n public szChartClicked(e: any): void {\n }\n\n public szChartHovered(e: any): void {\n }\n\n private serverInfo(){\n \tthis.apiService.serverInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.serviceInfo = data;\n });\n }\n\n private diskInfo(){\n \tthis.apiService.diskInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(\"Disk Usage >>>>>>>>>>>>\",data);\n this.diskUsageInfo = data;\n if(data.hasOwnProperty('objectsSizesHistogram')){\n var objectsSizesHistogram = this.diskUsageInfo.objectsSizesHistogram;\n var histogramKeysRawArr = [];\n var histogramValsRawArr = [];\n if(objectsSizesHistogram){\n histogramKeysRawArr = Object.keys(objectsSizesHistogram)\n histogramValsRawArr = Object.values(objectsSizesHistogram)\n }\n this.hgChartDatasets[0].data = histogramValsRawArr;\n\n this.hgChartLabels = [];\n for (let i = 0; i < histogramKeysRawArr.length; i++) {\n var histogramLabel = histogramKeysRawArr[i].split('_').join(' ');\n this.hgChartLabels.push(histogramLabel)\n }\n }\n\n if(data.hasOwnProperty('bucketsSizes') && this.diskUsageInfo.bucketsSizes != {} && this.diskUsageInfo.bucketsSizes != null ){\n var objectBucketSizes = this.diskUsageInfo.bucketsSizes;\n const bucketSizesKeysRawArr = Object.keys(objectBucketSizes)\n const bucketSizesValsRawArr = Object.values(objectBucketSizes)\n this.szChartDatasets[0].data = bucketSizesValsRawArr;\n this.szChartLabels= bucketSizesKeysRawArr;\n }\n });\n }\n\n private rawPrepare(obj){\n this.rawView = obj;\n }\n\n}\n","export default \"
\\n
\\n
\\n

Groups

\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n\\t\\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\t \\n\\t \\n\\t \\n \\n \\n \\n \\n \\n\\t
NamePolicyStatusMembersOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{groups[i].name}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{groups[i].policy}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{groups[i].status}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n
    \\n
  • {{member}}
  • \\n
\\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t \\t \\t\\n\\t \\t \\t\\n\\t \\t \\t 0\\\" mdbTooltip=\\\"You can delete only groups whit no memebers\\\" placement=\\\"top\\\">\\n\\t \\t
\\n \\n
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

{{modalCreateEditTitle}}

\\n
\\n
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t \\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t \\n \\t\\t\\t\\t
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Group

\\n
\\n
\\n Are you shure?
After you click on \\\"Delete\\\" button group {{groupToDelete}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Raw Policy

\\n
\\n
\\n \\t\\n
\\n \\n
\\n
\\n
\\n\";","import { Component, OnInit } from '@angular/core';\nimport { ApiService } from './api.service';\nimport { environment } from './../environments/environment';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent implements OnInit {\n title = 'Adminio-UI';\n\n constructor(private apiService: ApiService) { }\n\n ngOnInit() {\n \tthis.checkAuthStatus()\n }\n\n private checkAuthStatus(){\n this.apiService.checkAuthStatus().subscribe((data)=>{\n console.log(\"DATA AUTH>>>\", data);\n this.apiService.validateAuthInResponse(data)\n });\n }\n}\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzZXJ2ZXIuY29tcG9uZW50LnNjc3MifQ== */\";","export default \"\\n\\n\\n\\n \\n Adminio UI \\n\\n \\n \\n\\n \\n \\n \\n \\n
\\n \\n \\n\\t\\t\\t\\t\\t\\n
\\n
\\n \\n\\n
\\n\\n\\n\\n\\n\\n\\n\\n\\n\";","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { MDBBootstrapModule } from 'angular-bootstrap-md';\nimport { UsersComponent } from './users/users.component';\nimport { FormsModule, FormControl, FormGroup, Validators, ReactiveFormsModule} from \"@angular/forms\";\nimport { ServerComponent } from './server/server.component';\nimport { FilterPipe } from './filter.pipe';\nimport { PoliciesComponent } from './policies/policies.component';\nimport { NgxJsonViewerModule } from 'ngx-json-viewer';\nimport { AngularMultiSelectModule } from 'angular2-multiselect-dropdown';\nimport { LoaderComponent } from './loader/loader.component';\nimport { LoaderService } from './loader.service';\nimport { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from '@angular/common/http';\nimport { LoaderInterceptor } from './loader.interceptor';\nimport { BucketsComponent } from './buckets/buckets.component';\nimport { CommonModule } from '@angular/common';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { ToastrModule } from 'ngx-toastr';\nimport { GroupsComponent } from './groups/groups.component';\nimport { EnvServiceProvider } from './env.service.provider';\n\n\n\n@NgModule({\n declarations: [\n AppComponent,\n UsersComponent,\n ServerComponent,\n FilterPipe,\n PoliciesComponent,\n LoaderComponent,\n BucketsComponent,\n GroupsComponent,\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n MDBBootstrapModule.forRoot(),\n HttpClientModule,\n ReactiveFormsModule,\n NgxJsonViewerModule,\n AngularMultiSelectModule,\n FormsModule,\n CommonModule,\n BrowserAnimationsModule,\n ToastrModule.forRoot()\n ],\n providers: [\n EnvServiceProvider,\n LoaderService,\n { provide: HTTP_INTERCEPTORS, useClass: LoaderInterceptor, multi: true }\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJidWNrZXRzLmNvbXBvbmVudC5zY3NzIn0= */\";","import { EnvService } from './env.service';\n\nexport const EnvServiceFactory = () => {\n // Create env\n const env = new EnvService();\n\n // Read environment variables from browser window\n const browserWindow = window || {};\n const browserWindowEnv = browserWindow['__env'] || {};\n\n // Assign environment variables from browser window to env\n // In the current implementation, properties from env.js overwrite defaults from the EnvService.\n // If needed, a deep merge can be performed here to merge properties instead of overwriting them.\n for (const key in browserWindowEnv) {\n if (browserWindowEnv.hasOwnProperty(key)) {\n env[key] = window['__env'][key];\n }\n }\n\n return env;\n};\n\nexport const EnvServiceProvider = {\n provide: EnvService,\n useFactory: EnvServiceFactory,\n deps: [],\n};\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJ1c2Vycy5jb21wb25lbnQuc2NzcyJ9 */\";","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { ApiService } from '../api.service';\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n\n@Component({\n\tselector: 'app-groups',\n\ttemplateUrl: './groups.component.html',\n\tstyleUrls: ['./groups.component.scss']\n})\n\nexport class GroupsComponent implements OnInit, AfterViewInit {\n\tobjectKeys = Object.keys;\n\tjsn = JSON;\n\tgroups = {};\n\tgroupsWithMembers = [];\n\tusers = {};\n\trawPolicies = {};\n\tgroupToUpdate = {};\n\tnewGroupName = \"\";\n\tnewGroupPolicy = \"\";\n\tnewGroupStatus = \"\";\n\tpolicies;\n\tupdateStatusValues = ['enabled','disabled'];\n\tmodalCreateEditTitle;\n\tmodalCreateEditButtonText;\n\tmodalEditMode = false;\n\trawView = \"\";\n\tusersToRemove = [];\n\tgroupToDelete = \"\";\n\n\n\n\tdropdownList = [];\n\tselectedItems = [];\n\tdropdownSettings = {};\n\n\n\n\t@ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n\t@ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n\n\tprevious: string;\n\tsearchText: string = '';\n\n \tconstructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService) { }\n\n \t@HostListener('input') oninput() {\n\t\tif(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n\t\t this.searchItems();\n\t\t}\n\t\tif(event && event['target'] !== undefined && event.target[\"name\"] !== undefined && event.target[\"name\"] == \"newGroupName\"){\n\t if(this.modalEditMode){\n\t if(this.newGroupName == this.groupToUpdate[\"name\"]){\n\t console.log('hit')\n\t this.isEditMode(true)\n\t }else{\n\t this.isNowCopyMode();\n\t }\n\t }\n\t }\n\t}\n\n\tngOnInit() {\n\t\tthis.getGroups()\n\t\tthis.getListOfUsers()\n\t\tthis.getListOfPolicies()\n\t\tthis.isEditMode(false)\n\n\t\tthis.dropdownList = [\n\t\t {\"id\":1,\"itemName\":\"wait! i'm getting policies ASAP\"}\n\t ];\n\n\t this.dropdownSettings = {\n\t\t\tsingleSelection: false,\n\t\t\ttext:\"Select Members\",\n\t\t\tselectAllText:'Select All',\n\t\t\tunSelectAllText:'UnSelect All',\n\t\t\tenableSearchFilter: true\n\t\t};\n\t}\n\n\tonItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedItems);\n\t}\n\tOnItemDeSelect(item:any){\n\t\tthis.usersToRemove.push(item[\"itemName\"])\n\t console.log(item);\n\t console.log(this.selectedItems);\n\t}\n\tonSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonDeSelectAll(items: any){\n\n\t\t\tfor (let i = 0; i < this.selectedItems.length; i++) {\n\t\t\t\tthis.usersToRemove.push(this.selectedItems[i][\"itemName\"])\n\t\t\t}\n\n\t this.selectedItems = [];\n\t}\n\n\tprivate searchItems() {\n\t\tconst prev = this.mdbTable.getDataSource();\n\n\t\tif (!this.searchText) {\n\t\t this.mdbTable.setDataSource(this.previous);\n\t\t this.groups = this.mdbTable.getDataSource();\n\t\t}\n\n\t\tif (this.searchText) {\n\t\t this.groups = this.mdbTable.searchLocalDataBy(this.searchText);\n\t\t this.mdbTable.setDataSource(prev);\n\t\t}\n\t}\n\n\tngAfterViewInit() {\n\t this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n\t this.mdbTablePagination.calculateFirstItemIndex();\n\t this.mdbTablePagination.calculateLastItemIndex();\n\t this.cdRef.detectChanges();\n\t}\n\n\tprivate isEditMode(state){\n\t\tthis.modalEditMode = state;\n\t\tif(state){\n\t\t this.modalCreateEditTitle = \"Edit group\"\n\t\t this.modalCreateEditButtonText = \"Update\"\n\t\t}else{\n\t\t this.modalCreateEditTitle = \"Create group\"\n\t\t this.modalCreateEditButtonText = \"Create\"\n\t\t}\n\t}\n\n\tprivate isNowCopyMode(){\n\t\tthis.modalCreateEditTitle = \"Copy group\"\n\t\tthis.modalCreateEditButtonText = \"Copy\"\n\t}\n\n\tprivate commaToBr(arr) {\n\t\t// console.log(arr)\n\t var str = arr.join('\\n\\r');\n\t return str;\n\t}\n\n\tpublic b64unpack(str){\n\t// console.log(JSON.parse(atob(str)))\n\t\treturn JSON.parse(atob(str));\n\t}\n\n\tprivate rawPrepare(str){\n\t\tconsole.log(this.rawPolicies[str])\n\t\tthis.rawView = this.b64unpack(this.rawPolicies[str]);\n\t}\n\n\n\tprivate getGroups(){\n\t\tthis.groups = {};\n\t\tthis.groupsWithMembers = [];\n\t\tthis.previous = \"\";\n\t\tthis.apiService.getGroups().subscribe((data)=>{\n\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t console.log(data);\n\t\t if(data!==null){\n\t\t this.groups = data;\n\t\t for (var i = 0; i < this.objectKeys(data).length; i++) {\n\t\t\t\t\tlet tempGroupName = data[i]\n\t\t\t\t\tthis.apiService.getGroupDescription(tempGroupName).subscribe((data)=>{\n\t\t\t\t\t\tif(data!==null){\n\t\t\t\t\t\t\tthis.groupsWithMembers.push(data)\n\t\t\t\t\t\t\tthis.mdbTable.setDataSource(this.groupsWithMembers);\n\t\t \t\t\t\t\tthis.previous = this.mdbTable.getDataSource();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\tconsole.log(this.groupsWithMembers)\n\t\t\tthis.groups = this.groupsWithMembers;\n\t\t }\n\n\n\t\t});\n\t}\n\tprivate getListOfUsers(){\n\t\tthis.apiService.getUsers().subscribe((data)=>{\n\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t\tif(data!==null){\n\t\t\t\tthis.dropdownList = Object.entries(data).map((e) => ( { \"id\":e[0],\"itemName\":e[0] } ));\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getGroupDescription(group){\n\t\tthis.isEditMode(true);\n\t\tconsole.log(group)\n\t\tthis.apiService.getGroupDescription(group).subscribe((data)=>{\n\t\t\tif(data!==null){\n\t\t\t\tconsole.log(data)\n\t\t\t\tthis.groupToUpdate = data;\n\t\t\t\tthis.newGroupName = data[\"name\"]\n\t\t\t\tthis.newGroupPolicy = data[\"policy\"]\n\t\t\t\tthis.newGroupStatus = data[\"status\"]\n\t\t\t\tfor (var i = 0; i < data[\"members\"].length; i++) {\n\t\t\t\t\tvar tempMember = data[\"members\"][i];\n\t\t\t\t\tthis.selectedItems.push({\"id\":tempMember,\"itemName\":tempMember})\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getListOfPolicies(){\n\t\tthis.apiService.getPolicies().subscribe((data)=>{\n\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t this.policies = Object.keys(data);\n\t\t this.rawPolicies = data;\n\t\t});\n\t}\n\n\tprivate resetForm(){\n\t\tthis.newGroupName = \"\";\n\t\tthis.selectedItems = [];\n\t\tthis.newGroupPolicy = \"\";\n\t\tthis.newGroupStatus = \"\";\n\t}\n\n\tprivate markGroupToDelete(group){\n\t\tconsole.log(\"GROUP TO DELETE\", group);\n\n\t\tthis.groupToDelete = group\n\t}\n\n\tprivate deleteGroup(){\n\t\tconsole.log(\"GROUP TO DELETE >>>\", this.groupToDelete);\n\n\t\tthis.apiService.updateMembersGroup(this.groupToDelete,[],\"true\").subscribe((data)=>{\n\t\t\t this.apiService.validateAuthInResponse(data)\n\t if(data[\"Success\"]){\n\t this.toastr.success('Group: '+this.newGroupName+' has been removed', 'Success');\n\t this.usersToRemove = [];\n\t\t\t\t\tthis.refreshList();\n\t\t\t\t\tthis.groupToDelete = \"\";\n\t }else{\n\t this.toastr.error(JSON.stringify(data), 'Error while removing group');\n\t\t\t\t\tthis.refreshList();\n\t\t\t\t\tthis.groupToDelete = \"\";\n\t }\n\t });\n\t}\n\n\tprivate wipeGroupMembers(){\n\n\t\tthis.apiService.updateMembersGroup(this.newGroupName,this.usersToRemove,\"true\").subscribe((data)=>{\n\t\t\t this.apiService.validateAuthInResponse(data)\n\t if(data[\"Success\"]){\n\t this.toastr.success('Group: '+this.newGroupName+' members has been removed', 'Success');\n\t this.usersToRemove = [];\n\t }else{\n\t this.toastr.error(JSON.stringify(data), 'Error while removing members from group');\n\t }\n\t });\n\t}\n\n\tprivate updatePolicy(){\n\t\tif(this.newGroupPolicy !== null && this.newGroupPolicy != \"\"){\n\t \tthis.apiService.setPolicy(this.newGroupPolicy,this.newGroupName,\"true\").subscribe((data)=>{\n\t\t\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t if(data[\"Success\"]){\n\t\t this.toastr.success('Group: '+this.newGroupName+' policy has been set to '+this.newGroupPolicy, 'Success');\n\t\t }else{\n\t\t this.toastr.error(JSON.stringify(data), 'Error while setting policy to group');\n\t\t }\n\t\t });\n\t }\n\t}\n\n\tprivate updateStatus(){\n\t\tif(this.newGroupStatus !== null && this.newGroupStatus != \"\"){\n\t \tthis.apiService.setStatusGroup(this.newGroupName,this.newGroupStatus).subscribe((data)=>{\n\t\t\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t if(data[\"Success\"]){\n\t\t this.toastr.success('Group: '+this.newGroupName+' status has been set to '+this.newGroupStatus, 'Success');\n\t\t }else{\n\t\t this.toastr.error(JSON.stringify(data), 'Error while setting status to group');\n\t\t }\n\t\t });\n\t }\n\t}\n\n\tprivate refreshList(){\n\t\tthis.updatePolicy();\n\t\tthis.updateStatus();\n\t\tthis.getGroups();\n\t}\n\n\tprivate createGroup(){\n\t\tconsole.log(\"CREATE GROUP CALLED\")\n\t\tlet newMembers = []\n\t\tfor (var i = 0; i < this.selectedItems.length; i++) {\n\t\t\tnewMembers.push(this.selectedItems[i].itemName)\n\t\t}\n\n\t\t//remove users from group\n\t\tconsole.log(\"grouptoUpdate\",this.groupToUpdate);\n\n\t\tif(this.groupToUpdate!==null && this.groupToUpdate!=\"\" && this.groupToUpdate){\n\t\t\tif(this.usersToRemove.length > 0){\n\t\t\t\tthis.wipeGroupMembers()\n\t\t\t}\n\t\t}\n\n\t\t//add all new users to group\n\t\tif(newMembers.length > 0){\n\t\t\tthis.apiService.updateMembersGroup(this.newGroupName,newMembers,\"false\").subscribe((data)=>{\n\t\t\t\t this.apiService.validateAuthInResponse(data)\n\t\t if(data[\"Success\"]){\n\t\t this.toastr.success('Group: '+this.newGroupName+' has been created', 'Success');\n\t\t }else{\n\t\t this.toastr.error(JSON.stringify(data), 'Error while creating group');\n\t\t }\n\t\t this.refreshList();\n\t\t });\n\t\t}else{\n\t\t\tthis.refreshList();\n\t\t}\n this.isEditMode(false);\n this.groupToUpdate = {};\n\t}\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'filter'\n})\nexport class FilterPipe implements PipeTransform {\n\n transform(items: any[], searchPolicy: string): any[] {\n\n if (!items) {\n return [];\n }\n if (!searchPolicy) {\n return items;\n }\n searchPolicy = searchPolicy.toLocaleLowerCase();\n\n return items.filter(it => {\n return it.toLocaleLowerCase().includes(searchPolicy);\n });\n }\n\n}\n","export default \"
\\n
\\n
\\n

Buckets

\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n\\t\\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n \\n\\t \\n\\t \\t \\n\\t \\n\\t \\n \\n \\n \\n \\n \\n\\t
NameTagsCreation DateSizeQuotaEventOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n {{buckets[b].name}}\\n   \\n {{buckets[b].policy}}\\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n 0\\\">\\n
    \\n
  • {{tag}}: {{buckets[b].tags[tag]}}
  • \\n
\\n
\\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{buckets[b].info.creationDate | date : \\\"dd/MM/yy HH:mm:ss\\\" }}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\\\">\\n \\n {{(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)+'').length > 3 ? math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024/1024)+' Gb' : isNaN(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)) ? '–' : math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024) +' Mb'}}\\n \\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\\\">\\n \\n {{buckets[b].quota?.quotatype}}\\n {{buckets[b].quota?.quotatype}}\\n \\n 0\\\" mdbTooltip=\\\"{{buckets[b].quota?.quota}} bytes\\\" placement=\\\"top\\\">\\n {{(math.round(buckets[b].quota?.quota/1024/1024)+'').length > 3 ? math.round(buckets[b].quota?.quota/1024/1024/1024)+' Gb' : isNaN(math.round(buckets[b].quota?.quota/1024/1024)) ? '–' : math.round(buckets[b].quota?.quota/1024/1024) +' Mb'}}\\n \\n \\n ∞\\n \\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && serviceInfo?.sqsARN\\\">\\n \\n Lambda:\\n \\n {{c.Lambda}}
\\n
    \\n
  • \\n {{e}}\\n
  • \\n
\\n
\\n
\\n \\n Topic:\\n \\n {{c.Topic}}
\\n
    \\n
  • \\n {{e}}\\n
  • \\n
\\n
\\n
\\n \\n Queue:\\n \\n {{c.Queue}}
\\n
    \\n
  • \\n {{e}}\\n
  • \\n
\\n
\\n
\\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t \\t \\t \\n\\t \\t \\t \\n\\t \\t \\t \\n\\t \\t \\t \\n \\n \\n\\t \\t
\\n \\n
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Bucket Lifecycyle

\\n
\\n
\\n
\\n
\\n
\\n This bucket already have a lifecycyle policy, you can export it as JSON by clicking on \\\"dowload icon\\\" >\\n \\n
\\n Or override it by upload a new lifecycle policy.\\n
\\n
\\n Lifecycle policy is structrured xml file. You can use examples from Minio\\n documentation. Or use an AWS S3 documentation\\n Object Lifecycle Management\\n
\\n
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Bucket

\\n
\\n
\\n Are you shure?
After you click on \\\"Delete\\\" button bucket {{bucketToDelete}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Bucket Notifications

\\n
\\n
\\n Are you shure?
After you click on \\\"remove\\\" button bucket {{bucketToRemoveNotifications}} notifications will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Bucket Quota Limits

\\n
\\n
\\n Are you shure?
After you click on \\\"remove\\\" button quota for bucket {{bucketToRemoveQuota}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Encryption

\\n
\\n
\\n Are you shure?
After you click on \\\"remove\\\" button encryption for bucket {{bucketToRemoveEncryption}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Create Bucket

\\n
\\n
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n You can pass multiple names with \\\",\\\" delimiter\\n
\\n
Policy
\\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
Encryption
\\n

\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
Tags
\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\t\\t\\t\\t
\\n
\\n {{tag}}: {{newBucketTagsList[tag]}}\\n
\\n
Quota
\\n \\n\\n
\\n \\n \\t\\t\\t\\t\\t\\t\\t
\\n\\n
\\n \\n In \\\"fifo\\\" mode - old data automatically will be removed when you reach quota limit.
\\n In \\\"hard\\\" mode - you can't add new data to bucket if quota limit reached.\\n
\\n\\n
\\n \\t\\t\\t\\t\\t\\n
\\n
Bytes
\\n
\\n
\\n
\\n
\\n
Events section
\\n

\\n
\\n \\t\\t\\t\\t\\t\\t\\t\\t\\t\\n \\t\\t\\t\\t\\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Update Bucket

\\n
\\n
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
Policy
\\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
Encryption
\\n

\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
Tags
\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\t\\t\\t\\t
\\n
\\n {{tag}}: {{newBucketTagsList[tag]}}\\n
\\n
\\n
Quota section
\\n \\n
\\n \\n \\t\\t\\t\\t\\t\\t\\t
\\n\\n
\\n \\n In \\\"fifo\\\" mode - old data automatically will be removed when you reach quota limit.
\\n In \\\"hard\\\" mode - you can't add new data to bucket if quota limit reached.\\n
\\n\\n
\\n \\t\\t\\t\\t\\t\\n
\\n
Bytes
\\n
\\n
\\n
\\n
\\n
Events section
\\n

\\n
\\n \\t\\t\\t\\t\\t\\t\\t\\t\\t\\n \\t\\t\\t\\t\\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n\";","//loader.interceptor.ts\nimport { Component, OnInit } from '@angular/core';\nimport { LoaderService } from '../loader.service';\n\n@Component({\nselector: 'app-loading',\ntemplateUrl: './loader.component.html',\nstyleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent implements OnInit {\n\nloading: boolean;\nerror: boolean;\nconstructor(private loaderService: LoaderService) {\n this.loaderService.isLoading.subscribe((v) => {\n this.loading = v;\n this.error = this.loaderService.isError;\n });\n}\nngOnInit() {\n}\n\n}\n","export default \"
\\n\\t
\\n\\t\\t
\\n\\t\\t

Policies

\\n\\t\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t     \\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t
NameActionPrincipalEffectResourceConditionsOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{objectKeys(policies[pol])}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • {{action}}
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t{{policies[pol].Statement.Principal}}\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • {{st.Effect}}
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t
    • {{resource}}
    • \\n\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{condition}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
        \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • {{con}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
          \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{conKeyVal}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t \\n\\t\\t \\t\\t \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Policy

\\n
\\n
\\n Are you shure?
After you click on \\\"Delete\\\" button policy {{policyToDelete}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Upload Policy

\\n
\\n
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Raw Policy

\\n
\\n
\\n \\t\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

{{modalCreateEditTitle}}

Switch to interface
\\n
\\n
\\n \\t\\n \\t\\t
\\n\\t\\t\\t\\t\\t
 
\\n\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t \\t
\\n In Edit mode you can make a copy of policy - Just rename it!\\n
\\n\\n\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
0\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
0\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t Principal\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
Buckets section
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t arn:aws:s3:::\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t /\\\" [(ngModel)]=\\\"newPolicy.bucket\\\" aria-label=\\\"Recipient's username\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-describedby=\\\"s3-prefix\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
BucketOptions
{{bst}}
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
Conditions section
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
Condition and options
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{condition}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • {{con}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{conKeyVal}}  \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
 
\\n\\t\\t\\t\\t\\t
\\n\\n\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t
EffectActionResourceConditionsOptions
{{st.Effect}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • {{action}}
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • {{resource}}
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{condition}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • {{con}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{conKeyVal}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\n \\n
\\n \\n
\\n
\\n
\\n\";","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { ApiService } from '../api.service';\nimport { FormControl, FormGroup, Validators, ReactiveFormsModule } from \"@angular/forms\";\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n\n@Component({\n selector: 'app-users',\n templateUrl: './users.component.html',\n styleUrls: ['./users.component.scss']\n})\nexport class UsersComponent implements OnInit, AfterViewInit {\n validatingForm: FormGroup;\n updateUser: FormGroup;\n users = {};\n usersRaw = {};\n userToDelete;\n userToUpdate;\n objectKeys = Object.keys;\n objectValues = Object.values;\n jsn = JSON;\n policies;\n updateStatusValues = ['enabled','disabled'];\n\n @ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n @ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n previous: string;\n\n searchText: string = '';\n\n constructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService) { }\n\n @HostListener('input') oninput() {\n if(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n this.searchItems();\n }\n }\n\n ngOnInit() {\n \tthis.getListOfUsers()\n \tthis.getListOfPolicies()\n this.resetForm()\n this.updateUserFrom()\n }\n\n searchItems() {\n console.log(this.searchText)\n const prev = this.mdbTable.getDataSource();\n\n if (!this.searchText) {\n this.mdbTable.setDataSource(this.previous);\n this.users = this.mdbTable.getDataSource();\n }\n\n if (this.searchText) {\n this.users = this.mdbTable.searchLocalDataBy(this.searchText);\n this.mdbTable.setDataSource(prev);\n }\n }\n\n ngAfterViewInit() {\n this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n this.mdbTablePagination.calculateFirstItemIndex();\n this.mdbTablePagination.calculateLastItemIndex();\n this.cdRef.detectChanges();\n }\n\n get newUserAccess() {\n\treturn this.validatingForm.get('newUserAccess');\n }\n\n get newUserSecret() {\n\treturn this.validatingForm.get('newUserSecret');\n }\n\n get newUserPolicy() {\n\treturn this.validatingForm.get('newUserPolicy');\n }\n\n private generatePassword(length) {\n var charset = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n var retVal = \"\";\n for (var i = 0, n = charset.length; i < length; ++i) {\n retVal += charset.charAt(Math.floor(Math.random() * n));\n }\n\n return retVal;\n }\n\n get accessKeyUpdate() {\n return this.updateUser.get('accessKeyUpdate');\n }\n\n get secretKeyUpdate() {\n return this.updateUser.get('secretKeyUpdate');\n }\n\n get policyUpdate() {\n return this.updateUser.get('policyUpdate');\n }\n\n get statusUpdate() {\n return this.updateUser.get('statusUpdate');\n }\n\n private updateUserFrom(){\n this.updateUser = new FormGroup({\n accessKeyUpdate: new FormControl({value: '', disabled: true}, Validators.required),\n secretKeyUpdate: new FormControl(''),\n policyUpdate: new FormControl('', Validators.required),\n statusUpdate: new FormControl('', Validators.required)\n });\n }\n\n private resetForm(){\n \tthis.validatingForm = new FormGroup({\n newUserAccess: new FormControl(this.generatePassword(16), Validators.minLength(5)),\n newUserSecret: new FormControl(this.generatePassword(24), Validators.minLength(10)),\n newUserPolicy: new FormControl('',Validators.minLength(0))\n });\n }\n\n private getListOfUsers(){\n \tthis.apiService.getUsers().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data)\n this.usersRaw = data;\n const arrayOfUsers = Object.entries(data).map((e) => ( { [e[0]]: e[1] } ));\n this.users = arrayOfUsers;\n this.mdbTable.setDataSource(arrayOfUsers);\n console.log(arrayOfUsers)\n this.previous = this.mdbTable.getDataSource();\n });\n }\n\n\n private getListOfPolicies(){\n \tthis.apiService.getPolicies().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.policies = Object.keys(data);\n });\n }\n\n private createUser(){\n \tvar userAccess = this.newUserAccess.value;\n \tvar userSecret = this.newUserSecret.value;\n \tvar userPolicy = this.newUserPolicy.value;\n\n \tconsole.log(userPolicy)\n\n \tif(userPolicy!=''){\n \t\tthis.apiService.addUserExtended(userAccess,userSecret,userPolicy).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n\t console.log(data);\n\t this.getListOfUsers();\n if(data[\"Success\"]){\n this.toastr.success('User: '+userAccess+' with policy '+userPolicy+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating user');\n }\n\t });\n \t}else{\n \t\tthis.apiService.addUser(userAccess,userSecret).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n\t console.log(data);\n\t this.getListOfUsers();\n if(data[\"Success\"]){\n this.toastr.success('User: '+userAccess+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating user');\n }\n\t });\n \t}\n }\n\n private setStatusUser(accessKey,status){\n \tif(status == 'enabled'){\n \t\tstatus = 'disabled'\n \t}else{\n \t\tstatus = 'enabled'\n \t}\n \tthis.apiService.setStatusUser(accessKey,status).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('User: '+accessKey+' status has changed to '+status, 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while changing state for user');\n }\n this.getListOfUsers();\n });\n }\n\n private deleteUserPrepare(accessKey){\n \tthis.userToDelete = accessKey\n }\n\n private updateUserPrepare(accessKey){\n this.userToUpdate = accessKey\n this.updateUser.patchValue({'accessKeyUpdate': accessKey});\n if(this.usersRaw[accessKey]['policyName']){\n this.updateUser.patchValue({'policyUpdate': this.usersRaw[accessKey]['policyName']});\n }\n if(this.usersRaw[accessKey]['status']){\n this.updateUser.patchValue({'statusUpdate': this.usersRaw[accessKey]['status']});\n }\n console.log(this.usersRaw[accessKey])\n }\n\n private updateGenNewPassword(){\n this.updateUser.patchValue({'secretKeyUpdate': this.generatePassword(24)});\n }\n\n private updateUserSave(){\n var updatedSecret = this.updateUser.value.secretKeyUpdate;\n var updatedPolicy = this.updateUser.value.policyUpdate;\n var updatedStatus = this.updateUser.value.statusUpdate;\n\n this.apiService.updateUser(this.userToUpdate,updatedSecret,updatedPolicy,updatedStatus).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n this.getListOfUsers();\n if(data[\"Success\"]){\n this.toastr.success('User: '+this.userToUpdate+' has been updated', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while updating user');\n }\n });\n }\n\n\n private deleteUser(){\n \tthis.apiService.deleteUser(this.userToDelete).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('User: '+this.userToDelete+' has been deleted', 'Success');\n }\n this.updateUserFrom();\n this.getListOfUsers();\n });\n }\n\n}\n","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl} from '@angular/platform-browser';\nimport { ApiService } from '../api.service';\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n@Component({\n selector: 'app-policies',\n templateUrl: './policies.component.html',\n styleUrls: ['./policies.component.scss']\n})\nexport class PoliciesComponent implements OnInit {\n objectKeys = Object.keys;\n objectValues = Object.values;\n policies = {};\n policiesRaw = {};\n b64decode;\n rawView = '';\n policyToDelete;\n policyToUpdate;\n modalEditMode;\n jsn = JSON;\n uploadPolicyName;\n uploadPolicyFile;\n uploadPolicyFileName;\n downloadJsonHref;\n modalCreateEditTitle;\n modalCreateEditButtonText;\n\n dropdownActionList = [];\n dropdownAdminList = [];\n dropdownConditionList = [];\n dropdownConditionKeyList = [];\n\n selectedActions = [];\n selectedAdmins = [];\n selectedCondition = [];\n selectedConditionKey = [];\n\n dropdownActionSettings = {};\n dropdownAdminSettings = {};\n dropdownConditionSettings = {};\n dropdownConditionKeySettings = {};\n\n advancedInterface = false;\n advancedInterfaceLabel = \"advanced\"\n\n newPolicy = {\n \tname:\"\",\n \teffect:\"allow\",\n \tbucket:\"\",\n };\n\n newPolicyRaw = {\n \tVersion:\"\",\n \tStatement: []\n }\n\n newStatement = {\n Action: [],\n Effect: \"\",\n Resource: [],\n Condition: {},\n Principal: \"\"\n }\n\n newConditionValue = \"\"\n\n @ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n @ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n previous: string;\n\n searchText: string = '';\n\n\n constructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService, private sanitizer: DomSanitizer) { }\n\n @HostListener('input') oninput() {\n if(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n this.searchItems();\n }\n if(event && event['target'] !== undefined && event.target[\"name\"] !== undefined && event.target[\"name\"] == \"newPolicyName\"){\n if(this.modalEditMode){\n if(this.newPolicy.name == this.policyToUpdate){\n this.isEditMode(true)\n }else{\n this.isNowCopyMode();\n }\n }\n }\n\n }\n\n @ViewChild('uploadPolicyFile', { static: true })\n uploadFileInput: any;\n\n ngOnInit() {\n \tthis.getPolicies()\n\n\n \tthis.dropdownActionList = [\n {\"id\":1,\"itemName\":\"s3:AbortMultipartUpload\"},\n {\"id\":2,\"itemName\":\"s3:CreateBucket\"},\n {\"id\":3,\"itemName\":\"s3:DeleteBucket\"},\n {\"id\":4,\"itemName\":\"s3:ForceDeleteBucket\"},\n {\"id\":5,\"itemName\":\"s3:DeleteBucketPolicy\"},\n {\"id\":6,\"itemName\":\"s3:DeleteObject\"},\n {\"id\":7,\"itemName\":\"s3:GetBucketLocation\"},\n {\"id\":8,\"itemName\":\"s3:GetBucketNotification\"},\n {\"id\":9,\"itemName\":\"s3:GetBucketPolicy\"},\n {\"id\":10,\"itemName\":\"s3:GetObject\"},\n {\"id\":11,\"itemName\":\"s3:HeadBucket\"},\n {\"id\":12,\"itemName\":\"s3:ListAllMyBuckets\"},\n {\"id\":13,\"itemName\":\"s3:ListBucket\"},\n {\"id\":14,\"itemName\":\"s3:ListBucketVersions\"},\n {\"id\":15,\"itemName\":\"s3:ListBucketMultipartUploads\"},\n {\"id\":16,\"itemName\":\"s3:ListenNotification\"},\n {\"id\":17,\"itemName\":\"s3:ListenBucketNotification\"},\n {\"id\":18,\"itemName\":\"s3:ListMultipartUploadParts\"},\n {\"id\":19,\"itemName\":\"s3:PutLifecycleConfiguration\"},\n {\"id\":20,\"itemName\":\"s3:GetLifecycleConfiguration\"},\n {\"id\":21,\"itemName\":\"s3:PutBucketNotification\"},\n {\"id\":22,\"itemName\":\"s3:PutBucketPolicy\"},\n {\"id\":23,\"itemName\":\"s3:PutObject\"},\n {\"id\":24,\"itemName\":\"s3:DeleteObjectVersion\"},\n {\"id\":25,\"itemName\":\"s3:DeleteObjectVersionTagging\"},\n {\"id\":26,\"itemName\":\"s3:GetObjectVersion\"},\n {\"id\":27,\"itemName\":\"s3:GetObjectVersionTagging\"},\n {\"id\":28,\"itemName\":\"s3:PutObjectVersionTagging\"},\n {\"id\":29,\"itemName\":\"s3:BypassGovernanceRetention\"},\n {\"id\":30,\"itemName\":\"s3:PutObjectRetention\"},\n {\"id\":31,\"itemName\":\"s3:GetObjectRetention\"},\n {\"id\":32,\"itemName\":\"s3:GetObjectLegalHold\"},\n {\"id\":33,\"itemName\":\"s3:PutObjectLegalHold\"},\n {\"id\":34,\"itemName\":\"s3:GetBucketObjectLockConfiguration\"},\n {\"id\":35,\"itemName\":\"s3:PutBucketObjectLockConfiguration\"},\n {\"id\":36,\"itemName\":\"s3:GetBucketTagging\"},\n {\"id\":37,\"itemName\":\"s3:PutBucketTagging\"},\n {\"id\":38,\"itemName\":\"s3:GetObjectTagging\"},\n {\"id\":39,\"itemName\":\"s3:PutObjectTagging\"},\n {\"id\":40,\"itemName\":\"s3:DeleteObjectTagging\"},\n {\"id\":41,\"itemName\":\"s3:PutEncryptionConfiguration\"},\n {\"id\":42,\"itemName\":\"s3:GetEncryptionConfiguration\"},\n {\"id\":43,\"itemName\":\"s3:PutBucketVersioning\"},\n {\"id\":44,\"itemName\":\"s3:GetBucketVersioning\"},\n {\"id\":45,\"itemName\":\"s3:GetReplicationConfiguration\"},\n {\"id\":46,\"itemName\":\"s3:PutReplicationConfiguration\"},\n {\"id\":47,\"itemName\":\"s3:ReplicateObject\"},\n {\"id\":48,\"itemName\":\"s3:ReplicateDelete\"},\n {\"id\":49,\"itemName\":\"s3:ReplicateTags\"},\n {\"id\":50,\"itemName\":\"s3:GetObjectVersionForReplication\"}\n ];\n\n this.dropdownActionSettings = {\n \t\tsingleSelection: false,\n \t\ttext:\"Select Actions\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true\n\t };\n\n this.dropdownAdminList = [\n {\"id\":1,\"itemName\":\"admin:ConfigUpdate\"},\n {\"id\":2,\"itemName\":\"admin:CreateUser\"},\n {\"id\":3,\"itemName\":\"admin:DeleteUser\"},\n {\"id\":4,\"itemName\":\"admin:ListUsers\"},\n {\"id\":5,\"itemName\":\"admin:EnableUser\"},\n {\"id\":6,\"itemName\":\"admin:DisableUser\"},\n {\"id\":7,\"itemName\":\"admin:GetUser\"},\n {\"id\":8,\"itemName\":\"admin:ServerInfo\"},\n {\"id\":9,\"itemName\":\"admin:ServerUpdate\"},\n {\"id\":10,\"itemName\":\"admin:StorageInfo\"},\n {\"id\":11,\"itemName\":\"admin:DataUsageInfo\"},\n {\"id\":12,\"itemName\":\"admin:TopLocks\"},\n {\"id\":13,\"itemName\":\"admin:OBDInfo\"},\n {\"id\":14,\"itemName\":\"admin:Profiling\"},\n {\"id\":15,\"itemName\":\"admin:ServerTrace\"},\n {\"id\":16,\"itemName\":\"admin:ConsoleLog\"},\n {\"id\":17,\"itemName\":\"admin:KMSKeyStatus\"},\n {\"id\":18,\"itemName\":\"admin:AddUserToGroup\"},\n {\"id\":19,\"itemName\":\"admin:RemoveUserFromGroup\"},\n {\"id\":20,\"itemName\":\"admin:GetGroup\"},\n {\"id\":21,\"itemName\":\"admin:ListGroups\"},\n {\"id\":22,\"itemName\":\"admin:EnableGroup\"},\n {\"id\":23,\"itemName\":\"admin:DisableGroup\"},\n {\"id\":24,\"itemName\":\"admin:CreatePolicy\"},\n {\"id\":25,\"itemName\":\"admin:DeletePolicy\"},\n {\"id\":26,\"itemName\":\"admin:GetPolicy\"},\n {\"id\":27,\"itemName\":\"admin:AttachUserOrGroupPolicy\"},\n {\"id\":28,\"itemName\":\"admin:ListUserPolicies\"}\n ];\n\n this.dropdownAdminSettings = {\n singleSelection: false,\n text:\"Select Admin actions for statement\",\n selectAllText:'Select All',\n unSelectAllText:'UnSelect All',\n enableSearchFilter: true\n };\n\n \tthis.dropdownConditionList = [\n {\"id\":1,\"itemName\":\"ArnEquals\"},\n {\"id\":2,\"itemName\":\"ArnEqualsIfExists\"},\n {\"id\":3,\"itemName\":\"ArnLike\"},\n {\"id\":4,\"itemName\":\"ArnLikeIfExists\"},\n {\"id\":5,\"itemName\":\"ArnNotEquals\"},\n {\"id\":6,\"itemName\":\"ArnNotEqualsIfExists\"},\n {\"id\":7,\"itemName\":\"ArnNotLike\"},\n {\"id\":8,\"itemName\":\"ArnNotLikeIfExists\"},\n {\"id\":9,\"itemName\":\"BinaryEquals\"},\n {\"id\":10,\"itemName\":\"BinaryEqualsIfExists\"},\n {\"id\":11,\"itemName\":\"BinaryNotEquals\"},\n {\"id\":12,\"itemName\":\"BinaryNotEqualsIfExists\"},\n {\"id\":13,\"itemName\":\"Bool\"},\n {\"id\":14,\"itemName\":\"BoolIfExists\"},\n {\"id\":15,\"itemName\":\"DateEquals\"},\n {\"id\":16,\"itemName\":\"DateEqualsIfExists\"},\n {\"id\":17,\"itemName\":\"DateGreaterThan\"},\n {\"id\":18,\"itemName\":\"DateGreaterThanEquals\"},\n {\"id\":19,\"itemName\":\"DateGreaterThanEqualsIfExists\"},\n {\"id\":20,\"itemName\":\"DateGreaterThanIfExists\"},\n {\"id\":21,\"itemName\":\"DateLessThan\"},\n {\"id\":22,\"itemName\":\"DateLessThanEquals\"},\n {\"id\":23,\"itemName\":\"DateLessThanEqualsIfExists\"},\n {\"id\":24,\"itemName\":\"DateLessThanIfExists\"},\n {\"id\":25,\"itemName\":\"DateNotEquals\"},\n {\"id\":26,\"itemName\":\"DateNotEqualsIfExists\"},\n {\"id\":27,\"itemName\":\"IpAddress\"},\n {\"id\":28,\"itemName\":\"IpAddressIfExists\"},\n {\"id\":29,\"itemName\":\"NotIpAddress\"},\n {\"id\":30,\"itemName\":\"NotIpAddressIfExists\"},\n {\"id\":31,\"itemName\":\"Null\"},\n {\"id\":32,\"itemName\":\"NumericEquals\"},\n {\"id\":33,\"itemName\":\"NumericEqualsIfExists\"},\n {\"id\":34,\"itemName\":\"NumericGreaterThan\"},\n {\"id\":35,\"itemName\":\"NumericGreaterThanEquals\"},\n {\"id\":36,\"itemName\":\"NumericGreaterThanEqualsIfExists\"},\n {\"id\":37,\"itemName\":\"NumericGreaterThanIfExists\"},\n {\"id\":38,\"itemName\":\"NumericLessThan\"},\n {\"id\":39,\"itemName\":\"NumericLessThanEquals\"},\n {\"id\":40,\"itemName\":\"NumericLessThanEqualsIfExists\"},\n {\"id\":41,\"itemName\":\"NumericLessThanIfExists\"},\n {\"id\":42,\"itemName\":\"NumericNotEquals\"},\n {\"id\":43,\"itemName\":\"NumericNotEqualsIfExists\"},\n {\"id\":44,\"itemName\":\"StringEquals\"},\n {\"id\":45,\"itemName\":\"StringEqualsIfExists\"},\n {\"id\":46,\"itemName\":\"StringEqualsIgnoreCase\"},\n {\"id\":47,\"itemName\":\"StringEqualsIgnoreCaseIfExists\"},\n {\"id\":48,\"itemName\":\"StringLike\"},\n {\"id\":49,\"itemName\":\"StringLikeIfExists\"},\n {\"id\":50,\"itemName\":\"StringNotEquals\"},\n {\"id\":51,\"itemName\":\"StringNotEqualsIfExists\"},\n {\"id\":52,\"itemName\":\"StringNotEqualsIgnoreCase\"},\n {\"id\":53,\"itemName\":\"StringNotEqualsIgnoreCaseIfExists\"},\n {\"id\":54,\"itemName\":\"StringNotLike\"},\n {\"id\":55,\"itemName\":\"StringNotLikeIfExists\"}\n ];\n\n this.dropdownConditionSettings = {\n \t\tsingleSelection: true,\n \t\ttext:\"Select Condition\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true\n\t };\n\n \tthis.dropdownConditionKeyList = [\n {\"id\":1,\"itemName\":\"aws:CurrentTime\"},\n {\"id\":2,\"itemName\":\"aws:EpochTime\"},\n {\"id\":3,\"itemName\":\"aws:MultiFactorAuthAge\"},\n {\"id\":4,\"itemName\":\"aws:MultiFactorAuthPresent\"},\n {\"id\":5,\"itemName\":\"aws:PrincipalArn\"},\n {\"id\":6,\"itemName\":\"aws:PrincipalOrgID\"},\n {\"id\":7,\"itemName\":\"aws:PrincipalTag/${TagKey}\"},\n {\"id\":8,\"itemName\":\"aws:PrincipalType\"},\n {\"id\":9,\"itemName\":\"aws:Referer\"},\n {\"id\":10,\"itemName\":\"aws:RequestTag/${TagKey}\"},\n {\"id\":11,\"itemName\":\"aws:RequestedRegion\"},\n {\"id\":12,\"itemName\":\"aws:SecureTransport\"},\n {\"id\":13,\"itemName\":\"aws:SourceAccount\"},\n {\"id\":14,\"itemName\":\"aws:SourceArn\"},\n {\"id\":15,\"itemName\":\"aws:SourceIp\"},\n {\"id\":16,\"itemName\":\"aws:SourceVpc\"},\n {\"id\":17,\"itemName\":\"aws:SourceVpce\"},\n {\"id\":18,\"itemName\":\"aws:TagKeys\"},\n {\"id\":19,\"itemName\":\"aws:TokenIssueTime\"},\n {\"id\":20,\"itemName\":\"aws:UserAgent\"},\n {\"id\":21,\"itemName\":\"aws:userid\"},\n {\"id\":22,\"itemName\":\"aws:username\"},\n {\"id\":23,\"itemName\":\"s3:AccessPointNetworkOrigin\"},\n {\"id\":24,\"itemName\":\"s3:DataAccessPointAccount\"},\n {\"id\":25,\"itemName\":\"s3:DataAccessPointArn\"},\n {\"id\":26,\"itemName\":\"s3:ExistingJobOperation\"},\n {\"id\":27,\"itemName\":\"s3:ExistingJobPriority\"},\n {\"id\":28,\"itemName\":\"s3:ExistingObjectTag/\"},\n {\"id\":29,\"itemName\":\"s3:JobSuspendedCause\"},\n {\"id\":30,\"itemName\":\"s3:LocationConstraint\"},\n {\"id\":31,\"itemName\":\"s3:RequestJobOperation\"},\n {\"id\":32,\"itemName\":\"s3:RequestJobPriority\"},\n {\"id\":33,\"itemName\":\"s3:RequestObjectTag/\"},\n {\"id\":34,\"itemName\":\"s3:RequestObjectTagKeys\"},\n {\"id\":35,\"itemName\":\"s3:VersionId\"},\n {\"id\":36,\"itemName\":\"s3:authtype\"},\n {\"id\":37,\"itemName\":\"s3:delimiter\"},\n {\"id\":38,\"itemName\":\"s3:locationconstraint\"},\n {\"id\":39,\"itemName\":\"s3:max-keys\"},\n {\"id\":40,\"itemName\":\"s3:object-lock-legal-hold\"},\n {\"id\":41,\"itemName\":\"s3:object-lock-mode\"},\n {\"id\":42,\"itemName\":\"s3:object-lock-remaining-retention-days\"},\n {\"id\":43,\"itemName\":\"s3:object-lock-retain-until-date\"},\n {\"id\":44,\"itemName\":\"s3:prefix\"},\n {\"id\":45,\"itemName\":\"s3:signatureage\"},\n {\"id\":46,\"itemName\":\"s3:signatureversion\"},\n {\"id\":47,\"itemName\":\"s3:versionid\"},\n {\"id\":48,\"itemName\":\"s3:x-amz-acl\"},\n {\"id\":49,\"itemName\":\"s3:x-amz-content-sha256\"},\n {\"id\":50,\"itemName\":\"s3:x-amz-copy-source\"},\n {\"id\":51,\"itemName\":\"s3:x-amz-grant-full-control\"},\n {\"id\":52,\"itemName\":\"s3:x-amz-grant-read\"},\n {\"id\":53,\"itemName\":\"s3:x-amz-grant-read-acp\"},\n {\"id\":54,\"itemName\":\"s3:x-amz-grant-write\"},\n {\"id\":55,\"itemName\":\"s3:x-amz-grant-write-acp\"},\n {\"id\":56,\"itemName\":\"s3:x-amz-metadata-directive\"},\n {\"id\":57,\"itemName\":\"s3:x-amz-server-side-encryption\"},\n {\"id\":58,\"itemName\":\"s3:x-amz-server-side-encryption-aws-kms-key-id\"},\n {\"id\":59,\"itemName\":\"s3:x-amz-storage-class\"},\n {\"id\":60,\"itemName\":\"s3:x-amz-website-redirect-location\"}\n ];\n\n this.dropdownConditionKeySettings = {\n \t\tsingleSelection: true,\n \t\ttext:\"Select Condition Key\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true\n\t };\n }\n\n switchAdvanced(){\n if(this.advancedInterface){\n this.advancedInterface = false;\n this.advancedInterfaceLabel = \"Advanced\"\n }else{\n this.advancedInterface = true;\n this.advancedInterfaceLabel = \"Basic\"\n }\n }\n\n\tonActionItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedActions);\n\t}\n\tonActionItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedActions);\n\t}\n\tonActionSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonActionDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n\tonAdminItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedAdmins);\n\t}\n\tonAdminItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedAdmins);\n\t}\n\tonAdminSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonAdminDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n\n //condition select actions\n onConditionItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedCondition);\n\t}\n\tonConditionItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedCondition);\n\t}\n\tonConditionSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonConditionDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n //condition key select actions\n onConditionKeyItemSelect(item:any){\n console.log(item);\n console.log(this.selectedConditionKey);\n }\n onConditionKeyItemDeSelect(item:any){\n console.log(item);\n console.log(this.selectedConditionKey);\n }\n onConditionKeySelectAll(items: any){\n console.log(items);\n }\n onConditionKeyDeSelectAll(items: any){\n console.log(items);\n }\n\n\n searchItems() {\n console.log(this.searchText)\n const prev = this.mdbTable.getDataSource();\n\n if (!this.searchText) {\n this.mdbTable.setDataSource(this.previous);\n this.policies = this.mdbTable.getDataSource();\n }\n\n if (this.searchText) {\n this.policies = this.mdbTable.searchLocalDataBy(this.searchText);\n this.mdbTable.setDataSource(prev);\n }\n }\n\n ngAfterViewInit() {\n this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n this.mdbTablePagination.calculateFirstItemIndex();\n this.mdbTablePagination.calculateLastItemIndex();\n this.cdRef.detectChanges();\n }\n\n private resetPloicyForm(removeName){\n \tconsole.log(removeName);\n \tthis.selectedActions = [];\n \tthis.selectedAdmins = []\n \tif(!removeName){\n \t\tthis.newPolicy.effect = \"Allow\"\n\t\t this.newPolicy.bucket = \"\"\n \t}else{\n \t\tthis.newPolicy.name = \"\",\n \t\tthis.newPolicy.effect = \"Allow\"\n \t\tthis.newPolicy.bucket = \"\"\n \t}\n\n this.newStatement = {\n Action: [],\n Effect: \"\",\n Resource: [],\n Condition: {},\n Principal: \"\"\n }\n\n }\n\n private getPolicies(){\n \tthis.apiService.getPolicies().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n this.policiesRaw = data;\n const arrayOfPolicies = Object.entries(data).map((e) => ( { [e[0]]: e[1] } ));\n this.policies = arrayOfPolicies;\n this.mdbTable.setDataSource(arrayOfPolicies);\n console.log(arrayOfPolicies)\n this.previous = this.mdbTable.getDataSource();\n });\n }\n\n private deletePolicy(){\n \tthis.apiService.deletePolicy(this.policyToDelete).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n this.getPolicies();\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.policyToDelete+' has been deleted', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while deleting policy');\n }\n });\n }\n\n private downloadPolicy(jsonObj) {\n var theJSON = JSON.stringify(jsonObj);\n console.log(\"theJSON>>>>>>>>>>>\",theJSON);\n var uri = this.sanitizer.bypassSecurityTrustUrl(\"data:text/json;charset=UTF-8,\" + encodeURIComponent(theJSON));\n this.downloadJsonHref = uri;\n }\n\n private rawPrepare(obj){\n \tthis.rawView = obj;\n }\n\n private deletePolicyPrepare(policy){\n \tthis.policyToDelete = policy\n }\n\n private prepareNewPolicyRaw(){\n \tthis.newPolicyRaw = {\n\t \tVersion:\"2012-10-17\",\n\t \tStatement: []\n \t}\n }\n\n private removeCondition(valueId,keyName,conditionName){\n console.log(this.newStatement)\n console.log(valueId,keyName,conditionName)\n this.newStatement.Condition[conditionName][keyName].splice(valueId,1)\n }\n\n private addCondition(){\n console.log(this.selectedCondition[0].itemName)\n console.log(this.selectedConditionKey[0].itemName)\n console.log(this.newConditionValue)\n if(!this.newStatement.Condition){\n this.newStatement.Condition = {}\n }\n if(this.newStatement.Condition[this.selectedCondition[0].itemName]){\n if(this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName]){\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName].push(this.newConditionValue)\n }else{\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName] = []\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName].push(this.newConditionValue)\n }\n }else{\n this.newStatement.Condition[this.selectedCondition[0].itemName] = {}\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName] = []\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName].push(this.newConditionValue)\n }\n\n this.selectedCondition = []\n this.selectedConditionKey = []\n this.newConditionValue = \"\"\n console.log(this.newStatement.Condition)\n }\n\n\n private addStatement(){\n console.log(\"called add statement\");\n\n if(this.selectedActions.length>0){\n \tif(this.selectedActions.length == this.dropdownActionList.length){\n \t\tthis.newStatement.Action.push(\"s3:*\")\n \t}else{\n \t \tfor (var i = 0; i < this.selectedActions.length; i++) {\n \t \t\tthis.newStatement.Action.push(this.selectedActions[i].itemName)\n \t \t}\n \t }\n }else{\n if(this.selectedAdmins.length == this.dropdownAdminList.length){\n \t\tthis.newStatement.Action.push(\"admin:*\")\n \t}else{\n \t \tfor (var i = 0; i < this.selectedAdmins.length; i++) {\n \t \t\tthis.newStatement.Action.push(this.selectedAdmins[i].itemName)\n \t \t}\n \t }\n }\n \tthis.newStatement.Effect = this.newPolicy.effect\n\n \tconsole.log(this.newStatement)\n if(this.newStatement.Condition && Object.entries(this.newStatement.Condition).length === 0 && this.newStatement.Condition.constructor === Object){\n console.log(\"Condition removed cause empty\")\n delete this.newStatement.Condition\n }else{\n if(!this.newStatement.Principal || this.newStatement.Principal == \"\"){\n console.log(\"Principal set to * cause condition not empty\")\n this.newStatement.Principal = \"*\"\n }\n }\n\n \tthis.newPolicyRaw.Statement.push(this.newStatement);\n \tconsole.log(this.newPolicyRaw)\n\n \tthis.resetPloicyForm(false);\n }\n\n private editStatement(i){\n console.log(\"called Edit Statement\");\n\n this.newStatement = this.newPolicyRaw.Statement[i]\n this.newPolicy.effect = this.newPolicyRaw.Statement[i].Effect\n\n switch ((this.newStatement.Action[0]).substring(0, 3)) {\n case \"s3:\":\n if(this.newStatement.Action[0] == \"s3:*\"){\n for (var g = 0; g < this.dropdownActionList.length; g++) {\n this.selectedActions.push({\"id\":this.dropdownActionList[g].id,\"itemName\":this.dropdownActionList[g].itemName})\n }\n }else{\n for (var g = 0; g < this.newStatement.Action.length; g++) {\n this.selectedActions.push({\"id\":g,\"itemName\":this.newStatement.Action[g]})\n }\n }\n break;\n case \"adm\":\n if(this.newStatement.Action[0] == \"admin:*\"){\n for (var g = 0; g < this.dropdownAdminList.length; g++) {\n this.selectedAdmins.push({\"id\":this.dropdownAdminList[g].id,\"itemName\":this.dropdownAdminList[g].itemName})\n }\n }else{\n for (var g = 0; g < this.newStatement.Action.length; g++) {\n this.selectedAdmins.push({\"id\":g,\"itemName\":this.newStatement.Action[g]})\n }\n }\n break;\n }\n\n\n this.newStatement.Action = []\n this.newPolicyRaw.Statement.splice(i,1)\n }\n\n private addBucketStatement(){\n this.newStatement.Resource.push(\"arn:aws:s3:::\"+this.newPolicy.bucket)\n this.newPolicy.bucket = ''\n }\n\n private removeStatement(i){\n \tthis.newPolicyRaw.Statement.splice(i,1)\n }\n\n private removeBucketStatement(i){\n this.newStatement.Resource.splice(i,1)\n }\n\n private fileChanged(e) {\n console.log(\"eventTriggered\");\n\n this.uploadPolicyFile = e.target.files[0];\n this.uploadPolicyFileName = e.target.files[0].name;\n }\n\n private uploadPolicy(){\n let fileReader = new FileReader();\n fileReader.onload = (e) => {\n console.log(fileReader.result);\n let policyFileString = ((fileReader.result).toString()).replace(/\\n/g, ' ').replace(/\\r/g, ' ')\n this.apiService.addPolicy(this.uploadPolicyName,policyFileString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.newPolicy.name+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n this.getPolicies();\n });\n }\n fileReader.readAsText(this.uploadPolicyFile);\n }\n\n private resetUploadForm(){\n this.uploadFileInput.nativeElement.value = \"\";\n this.uploadPolicyFile;\n this.uploadPolicyName = \"\";\n this.uploadPolicyFileName = \"\";\n }\n\n private createPolicy(){\n \tconsole.log(this.newPolicy, this.newPolicyRaw)\n\n \tlet policyString = JSON.stringify(this.newPolicyRaw);\n\n \tthis.apiService.addPolicy(this.newPolicy.name,policyString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.newPolicy.name+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n this.getPolicies();\n });\n }\n\n private isEditMode(state){\n this.modalEditMode = state;\n if(state){\n this.modalCreateEditTitle = \"Edit policy\"\n this.modalCreateEditButtonText = \"Update\"\n }else{\n this.modalCreateEditTitle = \"Build up new policy\"\n this.modalCreateEditButtonText = \"Create\"\n }\n }\n\n private isNowCopyMode(){\n this.modalCreateEditTitle = \"Copy policy\"\n this.modalCreateEditButtonText = \"Copy\"\n }\n\n private updatePolicyPrepare(policy){\n this.policyToUpdate = policy\n this.prepareNewPolicyRaw()\n this.resetPloicyForm(false)\n this.newPolicy.name = policy;\n\n var oldPolicy = this.policiesRaw[policy]\n this.newPolicyRaw.Statement = oldPolicy.Statement;\n }\n\n}\n","export default \"
\\n\\t

Server statistics {{server.endpoint}}

\\n\\t
\\n\\t\\tView Raw JSON 
\\n\\t\\tminio version: {{server.version}}
\\n\\t\\tuptime: {{math.round(server.uptime/60)}} min.
\\n\\t\\tnetwork: {{server.network[server.endpoint]}}\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t

Storage

\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
TotalUsedStatePath
{{math.round((disk.totalspace/1024/1024/1024)*100)/100}} Gb{{math.round((disk.usedspace/1024/1024/1024)*100)/100}} Gb{{disk.state}}{{disk.path}}
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t

Disk usage info

\\n\\t\\t\\t
\\n\\t\\t\\t\\t

Last update: {{diskUsageInfo?.lastUpdate.split('T').join(' ').split('.')[0]}}

\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
Objects countObjects total sizeBuckets count
{{diskUsageInfo.objectsCount}}{{math.round((diskUsageInfo.objectsTotalSize/1024/1024/1024)*100)/100}} Gb{{diskUsageInfo.bucketsCount}}
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t
0\\\">\\n\\t\\t
\\n\\t\\t\\t

Bucket sizes chart

\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t
0\\\">\\n\\t\\t
\\n\\t \\t

Object sizes histogram

\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Raw Server Info

\\n
\\n
\\n \\t\\n
\\n \\n
\\n
\\n
\\n\";","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJwb2xpY2llcy5jb21wb25lbnQuc2NzcyJ9 */\";","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class EnvService {\n\n // The values that are defined here are the default values that can\n // be overridden by env.js\n\n // API url\n public apiBaseUrl = '';\n public apiMultiBackend = false;\n public apiBackends = '';\n\n constructor() {\n }\n\n}\n","export default \"
\\n\\t
\\n\\t
\\n\\t\\t

List of users

\\n\\t
\\n\\t
\\n\\t\\t\\n\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t \\n\\t\\t \\n\\t\\t
\\n\\t
\\n
\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t \\n\\t\\n\\t
User namePolicyStatusAction
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{objectKeys(users[key])}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{objectValues(users[key])[0].policyName}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t \\n\\t\\t \\t\\t\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n
\\n
\\n
\\n\\n\\n
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t

Remove User

\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\tAre you shure?
After you click on \\\"Delete\\\" button user {{userToDelete}} will be removed.\\n\\t\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n
\\n\\n\\n\\n
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t

Edit User

\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tInput invalid\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tInput valid\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t

\\n\\t\\t\\t\\t\\t\\tGenerate new secret\\n\\t\\t\\t\\t\\t

\\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n
\\n\\n\\n\\n
\\n
\\n\\t
\\n\\t
\\n\\t\\t

Create new user

\\n\\t\\t\\n\\t\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput invalid\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput valid\\n\\t\\t\\t \\n\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput invalid\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput valid\\n\\t\\t\\t \\n\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t

\\n\\t\\t\\t\\t\\tGenerate new access\\\\secret pair\\n\\t\\t\\t

\\n\\t\\t\\t
\\n\\t
\\n\\t \\n\\t
\\n
\\n
\\n\";","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { UsersComponent } from './users/users.component';\nimport { ServerComponent } from './server/server.component';\nimport { PoliciesComponent } from './policies/policies.component';\nimport { BucketsComponent } from './buckets/buckets.component';\nimport { GroupsComponent } from './groups/groups.component';\n\nconst routes: Routes = [\n\t{path:'users', component: UsersComponent},\n\t{path:'server', component: ServerComponent},\n\t{path:'policies', component: PoliciesComponent},\n\t{path:'groups', component: GroupsComponent},\n\t{path:'', component: BucketsComponent}\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Router } from \"@angular/router\";\nimport { EnvService } from './env.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n\n constructor(private httpClient: HttpClient, private router: Router, private env: EnvService) {\n if(env.apiBaseUrl) {\n console.log('apiBaseUrl', env.apiBaseUrl);\n }\n if(env.apiMultiBackend) {\n console.log('apiMultiBackend', env.apiMultiBackend);\n }\n if(env.apiBackends) {\n console.log('apiBackends', env.apiBackends);\n }\n\n }\n\n\n multiBackend = this.env.apiMultiBackend;\n backendsUrls = this.env.apiBackends;\n baseUrl = this.getCurrentBackend();\n\n private getCurrentBackend(){\n let envDefaultBackend = this.env.apiBaseUrl;\n if(this.multiBackend && this.multiBackend == true) {\n let savedBackend = localStorage.getItem('currentBackend');\n\n let activeBackend = \"\";\n\n if(savedBackend && savedBackend != \"\"){\n activeBackend = savedBackend;\n }else{\n activeBackend = envDefaultBackend;\n }\n return activeBackend;\n } else {\n return envDefaultBackend;\n }\n }\n\n public overrideBackend(newBackend){\n localStorage.setItem('currentBackend', newBackend);\n this.baseUrl = newBackend;\n\n this.router.onSameUrlNavigation = 'reload';\n this.router.routeReuseStrategy.shouldReuseRoute = function () {\n return false;\n };\n\n this.router.navigate([this.router.url])\n this.router.onSameUrlNavigation = 'ignore';\n }\n\n public getMultiBackendStatus(){\n return this.multiBackend;\n }\n\n public getBackendsUrls(){\n return this.backendsUrls;\n }\n\n public validateAuthInResponse(data){\n if(data != null && typeof data.oauth != \"undefined\" && typeof data.auth != \"undefined\" && data.oauth != false && data.auth != true){\n window.location.href = this.env.apiBaseUrl+'/auth/?state='+window.location.href;\n }\n }\n\n public serverInfo(){\n return this.httpClient.get(this.baseUrl+'/api/v2/server/common-info');\n }\n\n public diskInfo(){\n return this.httpClient.get(this.baseUrl+'/api/v2/server/disk-info');\n }\n\n public getUsers(){\n return this.httpClient.get(this.baseUrl+'/api/v2/users/list');\n }\n\n public addUser(access,secret){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('secretKey', secret);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/create', form)\n }\n\n public addUserExtended(access,secret,policy){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('secretKey', secret);\n form.append('policyName', policy);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/create-extended', form)\n }\n\n public updateUser(access,secret,policy,status){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('secretKey', secret);\n form.append('policyName', policy);\n form.append('status', status);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/update', form)\n }\n\n\n public setStatusUser(access,status){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('status', status);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/set-status', form)\n }\n\n public deleteUser(access){\n let form = new FormData();\n\n form.append('accessKey', access);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/delete', form)\n }\n\n public getPolicies(){\n return this.httpClient.get(this.baseUrl+'/api/v2/policies/list');\n }\n\n public deletePolicy(policy){\n let form = new FormData();\n\n form.append('policyName', policy);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/policy/delete', form)\n }\n\n public addPolicy(policyName, policyString){\n let form = new FormData();\n\n form.append('policyName', policyName);\n form.append('policyString', policyString);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/policy/create', form)\n }\n\n public getBuckets(){\n return this.httpClient.get(this.baseUrl+'/api/v2/buckets/list');\n }\n\n public getBucketsExtended(){\n return this.httpClient.get(this.baseUrl+'/api/v2/buckets/list-extended');\n }\n\n public enableNotificationForBucket(bucket, stsARN, eventTypes, filterPrefix, filterSuffix){\n //put,get,delete\n let form = new FormData();\n\n form.append('bucket', bucket);\n form.append('stsARN', stsARN);\n form.append('eventTypes', eventTypes);\n form.append('filterPrefix', filterPrefix);\n form.append('filterSuffix', filterSuffix);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-events', form)\n }\n\n public getBucketEvents(bucket){\n let form = new FormData();\n\n form.append('bucket', bucket);\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-events',form)\n }\n\n public removeBucketEvents(bucket){\n let form = new FormData();\n\n form.append('bucket', bucket);\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/remove-events',form)\n }\n\n public deleteBucket(bucket){\n let form = new FormData();\n\n form.append('bucketName', bucket);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/delete', form)\n }\n\n public createBucket(bucket){\n let form = new FormData();\n\n form.append('newBucket', bucket);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/create', form)\n }\n\n public getGroups(){\n return this.httpClient.get(this.baseUrl+'/api/v2/groups/list');\n }\n\n public updateMembersGroup(group,members,IsRemove){\n let form = new FormData();\n\n form.append('group', group);\n form.append('members', members);\n form.append('IsRemove', IsRemove);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/group/update-members', form);\n }\n\n public getGroupDescription(group){\n let form = new FormData();\n\n form.append('group', group);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/group/get-description', form);\n }\n\n public setStatusGroup(group,status){\n let form = new FormData();\n\n form.append('group', group);\n form.append('status', status);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/group/set-status', form);\n }\n\n public setPolicy(policyName,entityName,isGroup){\n let form = new FormData();\n\n form.append('policyName', policyName);\n form.append('entityName', entityName);\n form.append('isGroup', isGroup);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/policy/update', form);\n }\n\n public setLifecycle(bucketName,lifecycle){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('lifecycle', lifecycle);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-lifecycle', form);\n }\n\n\n public getLifecycle(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-lifecycle', form);\n }\n\n public checkAuthStatus(){\n return this.httpClient.get(this.baseUrl+'/auth/check');\n }\n\n public getBucketQuota(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-quota', form);\n }\n\n public setBucketQuota(bucketName, quotaType, quotaValue){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('quotaType', quotaType);\n form.append('quotaValue', quotaValue);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-quota', form);\n }\n\n public removeBucketQuota(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/remove-quota', form);\n }\n\n public setBucketTag(bucketName,tagsString){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('bucketTags', tagsString);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-tags', form);\n }\n\n public getBucketTag(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-tags', form);\n }\n\n public setBucketPolicy(bucketName,policyString){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('bucketPolicy', policyString);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-policy', form);\n }\n\n public getBucketPolicy(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-policy', form);\n }\n\n public getBucketEncryption(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-encryption', form);\n }\n\n public setBucketEncryption(bucketName, encType, encMasterKeyID){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('bucketEncryptionType', encType);\n form.append('kmsMasterKey', encMasterKeyID);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-encryption', form);\n }\n\n public removeBucketEncryption(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/remove-encryption', form);\n }\n\n\n}\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJhcHAuY29tcG9uZW50LnNjc3MifQ== */\";","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"zn8P\";"],"sourceRoot":"webpack:///"} \ No newline at end of file diff --git a/dist/minio-ng/main-es5.js b/dist/minio-ng/main-es5.js index 5096d4f..dbefb03 100644 --- a/dist/minio-ng/main-es5.js +++ b/dist/minio-ng/main-es5.js @@ -2334,7 +2334,7 @@ /* harmony default export */ - __webpack_exports__["default"] = "
\n
\n
\n

Buckets

\n
\n
\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n\t\n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n \n\t \n\t \t \n\t \n\t \n \n \n \n \n \n\t
NameTagsCreation DateSizeQuotaEventOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">\n {{buckets[b].name}}\n   \n {{buckets[b].policy}}\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">\n 0\">\n
    \n
  • {{tag}}: {{buckets[b].tags[tag]}}
  • \n
\n
\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">{{buckets[b].info.creationDate | date : \"dd/MM/yy HH:mm:ss\" }}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\">\n \n {{(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)+'').length > 3 ? math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024/1024)+' Gb' : isNaN(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)) ? '–' : math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024) +' Mb'}}\n \n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\">\n \n {{buckets[b].quota?.quotatype}}\n {{buckets[b].quota?.quotatype}}\n \n 0\" mdbTooltip=\"{{buckets[b].quota?.quota}} bytes\" placement=\"top\">\n {{(math.round(buckets[b].quota?.quota/1024/1024)+'').length > 3 ? math.round(buckets[b].quota?.quota/1024/1024/1024)+' Gb' : isNaN(math.round(buckets[b].quota?.quota/1024/1024)) ? '–' : math.round(buckets[b].quota?.quota/1024/1024) +' Mb'}}\n \n \n ∞\n \n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && serviceInfo?.sqsARN\">\n \n Lambda:\n \n {{c.Lambda}}
\n
    \n
  • \n {{e}}\n
  • \n
\n
\n
\n \n Topic:\n \n {{c.Topic}}
\n
    \n
  • \n {{e}}\n
  • \n
\n
\n
\n \n Queue:\n \n {{c.Queue}}
\n
    \n
  • \n {{e}}\n
  • \n
\n
\n
\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">\n\t \t \t \n\t \t \t \n\t \t \t \n\t \t \t \n \n \n\t \t
\n \n
\n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Bucket Lifecycyle

\n
\n
\n
\n
\n
\n This bucket already have a lifecycyle policy, you can export it as JSON by clicking on \"dowload icon\" >\n \n
\n Or override it by upload a new lifecycle policy.\n
\n
\n Lifecycle policy is structrured xml file. You can use examples from Minio\n documentation. Or use an AWS S3 documentation\n Object Lifecycle Management\n
\n
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n
\n
\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Bucket

\n
\n
\n Are you shure?
After you click on \"Delete\" button bucket {{bucketToDelete}} will be removed.\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Bucket Notifications

\n
\n
\n Are you shure?
After you click on \"remove\" button bucket {{bucketToRemoveNotifications}} notifications will be removed.\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Bucket Quota Limits

\n
\n
\n Are you shure?
After you click on \"remove\" button quota for bucket {{bucketToRemoveQuota}} will be removed.\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Encryption

\n
\n
\n Are you shure?
After you click on \"remove\" button encryption for bucket {{bucketToRemoveEncryption}} will be removed.\n
\n \n
\n
\n
\n\n\n\n\n
\n
\n
\n
\n \n

Create Bucket

\n
\n
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n You can pass multiple names with \",\" delimiter\n
\n
Policy
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
Encryption
\n

\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
Tags
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \t\t\t\t
\n
\n {{tag}}: {{newBucketTagsList[tag]}}\n
\n
Quota
\n \n\n
\n \n \t\t\t\t\t\t\t
\n\n
\n \n In \"fifo\" mode - old data automatically will be removed when you reach quota limit.
\n In \"hard\" mode - you can't add new data to bucket if quota limit reached.\n
\n\n
\n \t\t\t\t\t\n
\n
Bytes
\n
\n
\n
\n
\n
Events section
\n

\n
\n \t\t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Update Bucket

\n
\n
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
Policy
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n
Encryption
\n

\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
Tags
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \t\t\t\t
\n
\n {{tag}}: {{newBucketTagsList[tag]}}\n
\n
\n
Quota section
\n \n
\n \n \t\t\t\t\t\t\t
\n\n
\n \n In \"fifo\" mode - old data automatically will be removed when you reach quota limit.
\n In \"hard\" mode - you can't add new data to bucket if quota limit reached.\n
\n\n
\n \t\t\t\t\t\n
\n
Bytes
\n
\n
\n
\n
\n
Events section
\n

\n
\n \t\t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
\n
\n \n
\n
\n
\n"; + __webpack_exports__["default"] = "
\n
\n
\n

Buckets

\n
\n
\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n\t\n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n \n\t \n\t \t \n\t \n\t \n \n \n \n \n \n\t
NameTagsCreation DateSizeQuotaEventOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">\n {{buckets[b].name}}\n   \n {{buckets[b].policy}}\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">\n 0\">\n
    \n
  • {{tag}}: {{buckets[b].tags[tag]}}
  • \n
\n
\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">{{buckets[b].info.creationDate | date : \"dd/MM/yy HH:mm:ss\" }}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\">\n \n {{(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)+'').length > 3 ? math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024/1024)+' Gb' : isNaN(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)) ? '–' : math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024) +' Mb'}}\n \n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\">\n \n {{buckets[b].quota?.quotatype}}\n {{buckets[b].quota?.quotatype}}\n \n 0\" mdbTooltip=\"{{buckets[b].quota?.quota}} bytes\" placement=\"top\">\n {{(math.round(buckets[b].quota?.quota/1024/1024)+'').length > 3 ? math.round(buckets[b].quota?.quota/1024/1024/1024)+' Gb' : isNaN(math.round(buckets[b].quota?.quota/1024/1024)) ? '–' : math.round(buckets[b].quota?.quota/1024/1024) +' Mb'}}\n \n \n ∞\n \n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && serviceInfo?.sqsARN\">\n \n Lambda:\n \n {{c.Lambda}}
\n
    \n
  • \n {{e}}\n
  • \n
\n
\n
\n \n Topic:\n \n {{c.Topic}}
\n
    \n
  • \n {{e}}\n
  • \n
\n
\n
\n \n Queue:\n \n {{c.Queue}}
\n
    \n
  • \n {{e}}\n
  • \n
\n
\n
\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\">\n\t \t \t \n\t \t \t \n\t \t \t \n\t \t \t \n \n \n\t \t
\n \n
\n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Bucket Lifecycyle

\n
\n
\n
\n
\n
\n This bucket already have a lifecycyle policy, you can export it as JSON by clicking on \"dowload icon\" >\n \n
\n Or override it by upload a new lifecycle policy.\n
\n
\n Lifecycle policy is structrured xml file. You can use examples from Minio\n documentation. Or use an AWS S3 documentation\n Object Lifecycle Management\n
\n
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n
\n
\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Bucket

\n
\n
\n Are you shure?
After you click on \"Delete\" button bucket {{bucketToDelete}} will be removed.\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Bucket Notifications

\n
\n
\n Are you shure?
After you click on \"remove\" button bucket {{bucketToRemoveNotifications}} notifications will be removed.\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Bucket Quota Limits

\n
\n
\n Are you shure?
After you click on \"remove\" button quota for bucket {{bucketToRemoveQuota}} will be removed.\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Remove Encryption

\n
\n
\n Are you shure?
After you click on \"remove\" button encryption for bucket {{bucketToRemoveEncryption}} will be removed.\n
\n \n
\n
\n
\n\n\n\n\n
\n
\n
\n
\n \n

Create Bucket

\n
\n
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n You can pass multiple names with \",\" delimiter\n
\n
Policy
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
Encryption
\n

\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
Tags
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \t\t\t\t
\n
\n {{tag}}: {{newBucketTagsList[tag]}}\n
\n
Quota
\n \n\n
\n \n \t\t\t\t\t\t\t
\n\n
\n \n In \"fifo\" mode - old data automatically will be removed when you reach quota limit.
\n In \"hard\" mode - you can't add new data to bucket if quota limit reached.\n
\n\n
\n \t\t\t\t\t\n
\n
Bytes
\n
\n
\n
\n
\n
Events section
\n

\n
\n \t\t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
\n
\n \n
\n
\n
\n\n\n\n
\n
\n
\n
\n \n

Update Bucket

\n
\n
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
Policy
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n
Encryption
\n

\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
Tags
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \t\t\t\t
\n
\n {{tag}}: {{newBucketTagsList[tag]}}\n
\n
\n
Quota section
\n \n
\n \n \t\t\t\t\t\t\t
\n\n
\n \n In \"fifo\" mode - old data automatically will be removed when you reach quota limit.
\n In \"hard\" mode - you can't add new data to bucket if quota limit reached.\n
\n\n
\n \t\t\t\t\t\n
\n
Bytes
\n
\n
\n
\n
\n
Events section
\n

\n
\n \t\t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n \t\t\t\t\t\n \t\t\t\t
\n
\n
\n
\n \n
\n
\n
\n"; /***/ }, diff --git a/dist/minio-ng/main-es5.js.map b/dist/minio-ng/main-es5.js.map index 3f484ce..3f56ef4 100644 --- a/dist/minio-ng/main-es5.js.map +++ b/dist/minio-ng/main-es5.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///src/app/loader/loader.component.html","webpack:///src/app/loader.service.ts","webpack:///src/app/loader.interceptor.ts","webpack:///src/app/loader/loader.component.scss","webpack:///src/app/groups/groups.component.scss","webpack:///src/environments/environment.ts","webpack:///src/app/buckets/buckets.component.ts","webpack:///src/app/server/server.component.ts","webpack:///src/app/groups/groups.component.html","webpack:///src/app/app.component.ts","webpack:///src/app/server/server.component.scss","webpack:///src/app/app.component.html","webpack:///src/app/app.module.ts","webpack:///src/app/buckets/buckets.component.scss","webpack:///src/app/env.service.provider.ts","webpack:///src/app/users/users.component.scss","webpack:///src/app/groups/groups.component.ts","webpack:///src/app/filter.pipe.ts","webpack:///src/app/buckets/buckets.component.html","webpack:///src/app/loader/loader.component.ts","webpack:///src/app/policies/policies.component.html","webpack:///src/app/users/users.component.ts","webpack:///src/app/policies/policies.component.ts","webpack:///src/app/server/server.component.html","webpack:///src/app/policies/policies.component.scss","webpack:///src/app/env.service.ts","webpack:///src/app/users/users.component.html","webpack:///src/app/app-routing.module.ts","webpack:///src/app/api.service.ts","webpack:///src/app/app.component.scss","webpack:///src/main.ts","webpack:///$_lazy_route_resource lazy namespace object"],"names":["LoaderService","isError","isLoading","providedIn","LoaderInterceptor","loaderService","requests","req","i","indexOf","splice","next","length","clone","withCredentials","push","create","observer","subscription","handle","subscribe","event","removeRequest","err","error","complete","unsubscribe","environment","production","BucketsComponent","apiService","cdRef","toastr","sanitizer","math","Math","objectKeys","Object","keys","isNaN","Number","buckets","updateEncryptionTypeChanged","newBucketName","uiShowQuota","newBucketQuotaType","newBucketQuota","quotaTypes","newBucketEncryption","encryptionTypes","newBucketMasterKeyID","newBucketEventARN","updateBucketEventARN","updateBucketEventFilterPrefix","updateBucketEventFilterSuffix","updateBucketQuotaObj","updateBucketEncryptionObj","updateQuotaTypeChanged","updateQuotaChanged","newBucketPolicy","policyTypes","updatePolicyTypeChanged","dropdownEventTypesList","selectedEventTypes","dropdownEventTypesSettings","newBucketEventFilterPrefix","newBucketEventFilterSuffix","newBucketTagName","newBucketTagValue","newBucketTagsList","tagListChanged","downloadLifecycleAvailable","searchText","undefined","target","searchItems","getBuckets","getServerInfo","getDiskInfo","singleSelection","text","selectAllText","unSelectAllText","enableSearchFilter","classes","item","console","log","items","serverInfo","data","validateAuthInResponse","serviceInfo","diskInfo","diskUsageInfo","prev","mdbTable","getDataSource","setDataSource","previous","searchLocalDataBy","mdbTablePagination","setMaxVisibleItemsNumberTo","calculateFirstItemIndex","calculateLastItemIndex","detectChanges","getBucketsExtended","bucketName","bucketToDelete","bucketToRemoveNotifications","currentQuota","currentQtype","currentTags","editBucketName","getBucketTag","dataKeys","getBucketEncryption","dataVals","values","getBucketQuota","emptyData","quotatype","getBucketPolicy","bucketToRemoveQuota","bucketToRemoveEncryption","deleteBucket","success","JSON","stringify","resetUploadForm","e","uploadPolicyFile","files","uploadPolicyFileName","name","uploadFileInput","nativeElement","value","uploadPolicyName","updateListAfter","setBucketPolicy","fileReader","FileReader","onload","result","policyFileString","toString","replace","readAsText","bucketsArr","split","createBucketSimple","bucket","lifecycleBucketName","tagName","quotaType","quotaVal","enableNotificationForBucket","setTagsForBucket","setQuotaForBucket","setPolicy","setBucketEncryption","stsARN","eventTypes","filterPrefix","filterSuffix","eventTypesArr","itemName","join","reloadBucketList","setBucketQuota","removeBucketEvents","removeBucketQuota","removeBucketEncryption","encType","masterKeyID","eventARN","policy","encryption","numberOfBuckets","currentBucketNumber","createBucket","setTimeout","uploadLifecycleFile","uploadLifecycleFileName","uploadLifecycleName","getLifecycle","uri","bypassSecurityTrustUrl","encodeURIComponent","downloadJsonHref","lifecycleFileString","setLifecycle","tagsObj","tagsKeys","tagArr","tagString","setBucketTag","fileName","link","document","createElement","href","download","click","selector","template","ServerComponent","objectValues","rawView","bucketSizes","hgChartDatasets","label","hgChartLabels","hgChartType","hgChartColors","backgroundColor","borderColor","borderWidth","pointBackgroundColor","pointBorderColor","pointHoverBackgroundColor","pointHoverBorderColor","hgChartOptions","responsive","szChartDatasets","szChartLabels","szChartType","szChartColors","szChartOptions","hasOwnProperty","objectsSizesHistogram","histogramKeysRawArr","histogramValsRawArr","histogramLabel","bucketsSizes","objectBucketSizes","bucketSizesKeysRawArr","bucketSizesValsRawArr","obj","AppComponent","title","checkAuthStatus","AppModule","declarations","imports","forRoot","providers","provide","useClass","multi","bootstrap","EnvServiceFactory","env","browserWindow","window","browserWindowEnv","key","EnvServiceProvider","useFactory","deps","GroupsComponent","jsn","groups","groupsWithMembers","users","rawPolicies","groupToUpdate","newGroupName","newGroupPolicy","newGroupStatus","updateStatusValues","modalEditMode","usersToRemove","groupToDelete","dropdownList","selectedItems","dropdownSettings","isEditMode","isNowCopyMode","getGroups","getListOfUsers","getListOfPolicies","state","modalCreateEditTitle","modalCreateEditButtonText","arr","str","parse","atob","b64unpack","tempGroupName","getGroupDescription","getUsers","entries","map","group","tempMember","getPolicies","policies","updateMembersGroup","refreshList","setStatusGroup","updatePolicy","updateStatus","newMembers","wipeGroupMembers","FilterPipe","searchPolicy","toLocaleLowerCase","filter","it","includes","LoaderComponent","v","loading","UsersComponent","usersRaw","resetForm","updateUserFrom","charset","retVal","n","charAt","floor","random","updateUser","accessKeyUpdate","disabled","required","secretKeyUpdate","policyUpdate","statusUpdate","validatingForm","newUserAccess","generatePassword","minLength","newUserSecret","newUserPolicy","arrayOfUsers","userAccess","userSecret","userPolicy","addUserExtended","addUser","accessKey","status","setStatusUser","userToDelete","userToUpdate","patchValue","updatedSecret","updatedPolicy","updatedStatus","deleteUser","get","PoliciesComponent","policiesRaw","dropdownActionList","dropdownAdminList","dropdownConditionList","dropdownConditionKeyList","selectedActions","selectedAdmins","selectedCondition","selectedConditionKey","dropdownActionSettings","dropdownAdminSettings","dropdownConditionSettings","dropdownConditionKeySettings","advancedInterface","advancedInterfaceLabel","newPolicy","effect","newPolicyRaw","Version","Statement","newStatement","Action","Effect","Resource","Condition","Principal","newConditionValue","policyToUpdate","removeName","arrayOfPolicies","deletePolicy","policyToDelete","jsonObj","theJSON","valueId","keyName","conditionName","constructor","resetPloicyForm","substring","g","id","addPolicy","policyString","prepareNewPolicyRaw","oldPolicy","EnvService","apiBaseUrl","apiMultiBackend","apiBackends","routes","path","component","AppRoutingModule","exports","ApiService","httpClient","router","multiBackend","backendsUrls","baseUrl","getCurrentBackend","envDefaultBackend","savedBackend","localStorage","getItem","activeBackend","newBackend","setItem","onSameUrlNavigation","routeReuseStrategy","shouldReuseRoute","navigate","url","oauth","auth","location","access","secret","form","FormData","append","post","policyName","members","IsRemove","entityName","isGroup","lifecycle","quotaValue","tagsString","encMasterKeyID","bootstrapModule","webpackEmptyAsyncContext","Promise","resolve","then","Error","code","module"],"mappings":"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","file":"main-es5.js","sourcesContent":["export default \"
\\n\\t
\\n\\t
\\n\\t
\\n\\n\\t
\\n\\t\\t
\\n\\t\\t Loading...\\n\\t\\t
\\n\\t
\\n
\\n\\n
\\n\\t
\\n\\t\\t\\n\\t\\t
\\n\\t\\t
\\n\\t\\tSeems backend unreachable\\n\\t
\\n
\\n\";","//loader.service.ts\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LoaderService {\n public isError = false\n public isLoading = new BehaviorSubject(false);\n constructor() { }\n}\n","// loader.interceptors.ts\nimport { Injectable } from '@angular/core';\nimport {\n HttpErrorResponse,\n HttpResponse,\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { LoaderService } from './loader.service';\n\n@Injectable()\nexport class LoaderInterceptor implements HttpInterceptor {\n private requests: HttpRequest[] = [];\n\n constructor(private loaderService: LoaderService) { }\n\n removeRequest(req: HttpRequest) {\n const i = this.requests.indexOf(req);\n if (i >= 0) {\n this.requests.splice(i, 1);\n }\n this.loaderService.isLoading.next(this.requests.length > 0);\n }\n\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\n req = req.clone({\n withCredentials: true\n });\n this.requests.push(req);\n this.loaderService.isLoading.next(true);\n this.loaderService.isError = false;\n return Observable.create(observer => {\n const subscription = next.handle(req)\n .subscribe(\n event => {\n if (event instanceof HttpResponse) {\n this.removeRequest(req);\n observer.next(event);\n }\n },\n err => {\n this.loaderService.isError = true;\n this.removeRequest(req);\n observer.error(err);\n },\n () => {\n this.removeRequest(req);\n observer.complete();\n });\n // remove request from queue when cancelled\n return () => {\n this.removeRequest(req);\n subscription.unsubscribe();\n };\n });\n }\n}\n","export default \"dialog {\\n width: 300px;\\n}\\n\\ndialog::-webkit-backdrop {\\n background: rgba(0, 0, 0, 0.7);\\n}\\n\\ndialog::backdrop {\\n background: rgba(0, 0, 0, 0.7);\\n}\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xvYWRlci5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNJLFlBQUE7QUFDSjs7QUFDRztFQUNDLDhCQUFBO0FBRUo7O0FBSEc7RUFDQyw4QkFBQTtBQUVKIiwiZmlsZSI6ImxvYWRlci5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbImRpYWxvZyB7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgfVxuICAgZGlhbG9nOjpiYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjcpO1xuICAgfSJdfQ== */\";","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJncm91cHMuY29tcG9uZW50LnNjc3MifQ== */\";","export const environment = {\n production: false\n};\n","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl} from '@angular/platform-browser';\nimport { ApiService } from '../api.service';\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n\n\n@Component({\n selector: 'app-buckets',\n templateUrl: './buckets.component.html',\n styleUrls: ['./buckets.component.scss']\n})\nexport class BucketsComponent implements OnInit, AfterViewInit {\n math = Math;\n objectKeys = Object.keys;\n isNaN: Function = Number.isNaN;\n buckets = {};\n bucketToDelete;\n bucketToRemoveNotifications;\n bucketToRemoveQuota;\n bucketToRemoveEncryption;\n updateEncryptionTypeChanged = false;\n editBucketName;\n newBucketName = \"\";\n uiShowQuota = false;\n newBucketQuotaType = \"\";\n newBucketQuota = \"\";\n quotaTypes = [\"fifo\", \"hard\"];\n serviceInfo;\n diskUsageInfo;\n newBucketEncryption = \"\";\n encryptionTypes = [\"sse-s3\", \"sse-kms\"];\n newBucketMasterKeyID = \"\";\n newBucketEventARN = \"\";\n updateBucketEventARN = \"\";\n updateBucketEventFilterPrefix = \"\";\n updateBucketEventFilterSuffix = \"\";\n updateBucketQuotaObj = {};\n updateBucketEncryptionObj = {};\n updateQuotaTypeChanged = false;\n updateQuotaChanged = false;\n\n newBucketPolicy = \"none\";\n // updateBucketPolicy = \"none\"\n policyTypes = [\"none\", \"upload\", \"download\", \"public\", \"custom\"];\n updatePolicyTypeChanged = false;\n uploadPolicyName;\n uploadPolicyFile;\n uploadPolicyFileName;\n\n dropdownEventTypesList = [];\n selectedEventTypes = [];\n dropdownEventTypesSettings = {};\n newBucketEventFilterPrefix = \"\";\n newBucketEventFilterSuffix = \"\";\n newBucketTagName = \"\";\n newBucketTagValue = \"\";\n newBucketTagsList = {};\n\n tagListChanged = false;\n\n uploadLifecycleName;\n uploadLifecycleFile;\n uploadLifecycleFileName;\n lifecycleBucketName;\n downloadJsonHref;\n downloadLifecycleAvailable = 0;\n\n @ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n @ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n previous: string;\n\n searchText: string = '';\n\n constructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService, private sanitizer: DomSanitizer) { }\n\n @HostListener('input') oninput() {\n if(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n this.searchItems();\n }\n }\n\n @ViewChild('uploadLifecycleFile', { static: true })\n uploadFileInput: any;\n\n ngOnInit() {\n \tthis.getBuckets()\n this.getServerInfo()\n this.getDiskInfo()\n\n this.dropdownEventTypesList = [\n\t {\"id\":1,\"itemName\":\"put\"},\n\t {\"id\":2,\"itemName\":\"get\"},\n\t {\"id\":3,\"itemName\":\"delete\"},\n ];\n\n this.dropdownEventTypesSettings = {\n \t\tsingleSelection: false,\n \t\ttext:\"Select Event Types\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true,\n classes: \"dropdownFix\"\n\t };\n }\n\n //condition select actions\n onEventTypesItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedEventTypes);\n\t}\n\tonEventTypesItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedEventTypes);\n\t}\n\tonEventTypesSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonEventTypesDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n private toggleShowQuota(){\n (this.uiShowQuota) ? this.uiShowQuota = false : this.uiShowQuota = true;\n }\n\n // private toggleUpdateShowQuota(){\n // (this.updateUiShowQuota) ? this.updateUiShowQuota = false : this.updateUiShowQuota = true;\n // }\n\n private getServerInfo(){\n this.apiService.serverInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.serviceInfo = data;\n });\n }\n\n private getDiskInfo(){\n \tthis.apiService.diskInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.diskUsageInfo = data;\n });\n }\n\n private searchItems() {\n const prev = this.mdbTable.getDataSource();\n\n if (!this.searchText) {\n this.mdbTable.setDataSource(this.previous);\n this.buckets = this.mdbTable.getDataSource();\n }\n\n if (this.searchText) {\n this.buckets = this.mdbTable.searchLocalDataBy(this.searchText);\n this.mdbTable.setDataSource(prev);\n }\n }\n\n ngAfterViewInit() {\n this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n this.mdbTablePagination.calculateFirstItemIndex();\n this.mdbTablePagination.calculateLastItemIndex();\n this.cdRef.detectChanges();\n }\n\n private getBuckets(){\n \tthis.apiService.getBucketsExtended().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(\"BUCKETS >>>>>>\",data);\n if(data!==null){\n this.buckets = data;\n }else{\n this.buckets = {};\n }\n this.mdbTable.setDataSource(this.buckets);\n this.previous = this.mdbTable.getDataSource();\n });\n }\n\n private deleteBucketPrepare(bucketName){\n \tthis.bucketToDelete = bucketName;\n }\n\n private removeBucketNotificationPrepare(bucketName){\n \tthis.bucketToRemoveNotifications = bucketName;\n }\n\n private updateBucketPrepare(bucketName, currentQuota, currentQtype, currentTags){\n this.editBucketName = bucketName;\n\n this.apiService.getBucketTag(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n\n var dataKeys = Object.keys(data);\n console.log(dataKeys[0]);\n if(dataKeys[0]!=\"error\"){\n this.newBucketTagsList = data;\n }\n });\n\n this.apiService.getBucketEncryption(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n\n var dataKeys = Object.keys(data);\n console.log(\"Bucket Encryption >>\",dataKeys[1]);\n if(dataKeys[1]==\"Rules\"){\n this.updateBucketEncryptionObj = data;\n var dataVals = Object.values(data);\n console.log(\"Enc datavals\", dataVals[1][0]['Apply']['KmsMasterKeyID'])\n if(dataVals[1][0]['Apply']['KmsMasterKeyID'] == \"\"){\n this.updateBucketEncryptionObj = \"sse-s3\"\n }else{\n this.updateBucketEncryptionObj = \"sse-kms\"\n }\n }else{\n this.updateBucketEncryptionObj = \"\";\n }\n });\n\n this.apiService.getBucketQuota(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n\n var dataKeys = Object.keys(data);\n console.log(dataKeys[0]);\n if(dataKeys[0]!=\"error\"){\n this.updateBucketQuotaObj = data;\n }else{\n var emptyData = {\n quotatype: \"\"\n };\n this.updateBucketQuotaObj = emptyData;\n }\n });\n\n this.apiService.getBucketPolicy(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n this.newBucketPolicy = data[\"name\"];\n });\n }\n\n private deleteBucketQuotaPrepare(bucketName){\n this.bucketToRemoveQuota = bucketName;\n }\n\n private updateQuotaType(){\n this.updateQuotaTypeChanged = true;\n }\n\n private updatePolicyType(){\n this.updatePolicyTypeChanged = true;\n }\n\n private updateEncryptionType(){\n this.updateEncryptionTypeChanged = true;\n }\n\n private updateQuota(){\n this.updateQuotaChanged = true;\n }\n\n private deleteBucketEncryptionPrepare(bucketName){\n this.bucketToRemoveEncryption = bucketName;\n }\n\n private deleteBucket(){\n \tthis.apiService.deleteBucket(this.bucketToDelete).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Bucket has been deleted', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while deleting bucket');\n }\n this.getBuckets();\n });\n }\n\n private resetForm(){\n \tthis.newBucketName = \"\";\n this.newBucketEventARN = \"\";\n this.newBucketEncryption = \"\";\n this.newBucketMasterKeyID = \"\";\n this.updateEncryptionTypeChanged = false;\n this.newBucketEventFilterPrefix = \"\";\n this.newBucketEventFilterSuffix = \"\";\n this.selectedEventTypes = [];\n this.newBucketQuotaType = \"\";\n this.newBucketPolicy = \"none\";\n this.newBucketQuota = \"\";\n this.newBucketTagName = \"\";\n this.newBucketTagValue = \"\";\n this.newBucketTagsList = {};\n this.updatePolicyTypeChanged = false;\n this.tagListChanged = false;\n this.resetUploadForm();\n }\n\n private resetUpdateForm() {\n this.updateBucketEventARN = \"\";\n this.newBucketEncryption = \"\";\n this.newBucketMasterKeyID = \"\";\n this.updateEncryptionTypeChanged = false;\n this.selectedEventTypes = [];\n this.updateBucketEventFilterPrefix = \"\";\n this.updateBucketEventFilterSuffix = \"\";\n this.updateBucketQuotaObj = {};\n this.updateBucketEncryptionObj = \"\";\n this.updateQuotaTypeChanged = false;\n this.updateQuotaChanged = false;\n this.tagListChanged = false;\n this.updatePolicyTypeChanged = false;\n this.resetUploadForm();\n }\n\n private filePolicyChanged(e) {\n console.log(\"file event\");\n\n this.uploadPolicyFile = e.target.files[0];\n this.uploadPolicyFileName = e.target.files[0].name;\n }\n\n private resetUploadForm(){\n this.uploadFileInput.nativeElement.value = \"\";\n this.uploadPolicyFile;\n this.uploadPolicyName = \"\";\n this.uploadPolicyFileName = \"\";\n }\n\n private setPolicy(bucketName, updateListAfter){\n if(this.newBucketPolicy!=\"custom\"){\n this.apiService.setBucketPolicy(bucketName, this.newBucketPolicy).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.newBucketPolicy+' has been append to '+bucketName, 'Success');\n if(updateListAfter){\n this.getBuckets();\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n });\n } else {\n let fileReader = new FileReader();\n fileReader.onload = (e) => {\n console.log(\"Policy>>>>\",fileReader.result);\n\n let policyFileString = ((fileReader.result).toString()).replace(/\\n/g, ' ').replace(/\\r/g, ' ')\n console.log(\"Policy2>>>>\",policyFileString);\n this.apiService.setBucketPolicy(bucketName, policyFileString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy custom has been append to '+bucketName, 'Success');\n if(updateListAfter){\n this.getBuckets();\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n });\n\n }\n fileReader.readAsText(this.uploadPolicyFile);\n }\n }\n\n\n private createBucket(){\n \tif(this.newBucketName.indexOf(',')>-1){\n \t\tvar bucketsArr = this.newBucketName.split(',')\n \t\tfor (var i = 0; i < bucketsArr.length; i++) {\n \t\t\tif(bucketsArr[i]!=''){\n \t\t\t\tthis.createBucketSimple(bucketsArr[i],this.newBucketEventARN,this.newBucketQuotaType,this.newBucketQuota,this.newBucketPolicy,this.newBucketEncryption,this.newBucketMasterKeyID, bucketsArr.length,i+1)\n \t\t\t}\n \t\t}\n \t}else{\n \t\tthis.createBucketSimple(this.newBucketName,this.newBucketEventARN,this.newBucketQuotaType,this.newBucketQuota,this.newBucketPolicy,this.newBucketEncryption,this.newBucketMasterKeyID,1,1)\n \t}\n }\n\n private bucketLifecycle(bucket){\n this.lifecycleBucketName = bucket;\n }\n\n private createFormAddTag() {\n if(this.newBucketTagName != \"\" && this.newBucketTagValue != \"\"){\n this.newBucketTagsList[this.newBucketTagName] = this.newBucketTagValue;\n this.newBucketTagName = \"\";\n this.newBucketTagValue = \"\";\n this.tagListChanged = true;\n }\n }\n\n private createFormRemoveTag(tagName) {\n delete this.newBucketTagsList[tagName];\n this.tagListChanged = true;\n }\n\n private updateBucket(quotaType, quotaVal) {\n if(this.updateBucketEventARN != \"\"){\n this.enableNotificationForBucket(this.editBucketName, this.updateBucketEventARN, this.selectedEventTypes, this.updateBucketEventFilterPrefix, this.updateBucketEventFilterSuffix, true)\n }\n\n if(this.tagListChanged){\n this.setTagsForBucket(this.editBucketName,true)\n }\n\n if(this.updateQuotaTypeChanged || this.updateQuotaChanged){\n this.setQuotaForBucket(this.editBucketName, quotaType, quotaVal, true)\n }\n\n if(this.updatePolicyTypeChanged){\n this.setPolicy(this.editBucketName, true)\n }\n\n if(this.updateEncryptionTypeChanged){\n this.setBucketEncryption(this.editBucketName, this.updateBucketEncryptionObj, this.newBucketMasterKeyID, true)\n }\n }\n\n private enableNotificationForBucket(bucket, stsARN, eventTypes, filterPrefix, filterSuffix, updateListAfter){\n var eventTypesArr = []\n for (var i = 0; i < eventTypes.length; i++) {\n eventTypesArr.push(eventTypes[i].itemName)\n }\n this.apiService.enableNotificationForBucket(bucket, stsARN, eventTypesArr.join(','), filterPrefix, filterSuffix).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Events for bucket: '+bucket+' has been enabled', 'Success');\n if(updateListAfter){\n this.getBuckets();\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while enabling events for bucket'+bucket );\n }\n });\n }\n\n private setQuotaForBucket(bucket, quotaType, quotaVal, reloadBucketList){\n this.apiService.setBucketQuota(bucket, quotaType, quotaVal).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Quota for bucket '+bucket+' has been set', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while set quota for bucket');\n }\n if(reloadBucketList){\n this.getBuckets();\n }\n });\n }\n\n private removeBucketEvents(){\n var bucket = this.bucketToRemoveNotifications;\n this.apiService.removeBucketEvents(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Events for bucket '+bucket+' has been removed', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while removing bucket events');\n }\n this.getBuckets();\n });\n }\n\n private removeBucketQuota(){\n var bucket = this.bucketToRemoveQuota;\n this.apiService.removeBucketQuota(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Quota for bucket '+bucket+' has been removed', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while removing bucket quota');\n }\n this.getBuckets();\n });\n }\n\n private removeBucketEncryption(){\n var bucket = this.bucketToRemoveEncryption;\n this.apiService.removeBucketEncryption(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Encryption for bucket '+bucket+' has been removed', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while removing bucket encryption');\n }\n this.getBuckets();\n });\n }\n\n\n private setBucketEncryption(bucket, encType, masterKeyID, reloadBucketList){\n this.apiService.setBucketEncryption(bucket, encType, masterKeyID).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Encryption for bucket '+bucket+' has been set', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while set encryption for bucket');\n }\n if(reloadBucketList){\n this.getBuckets();\n }\n });\n }\n\n\n\n private createBucketSimple(bucket, eventARN, quotaType, quotaVal, policy, encryption, masterKeyID, numberOfBuckets, currentBucketNumber){\n \tthis.apiService.createBucket(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Bucket: '+bucket+' has been created', 'Success');\n if(eventARN != \"\"){\n this.enableNotificationForBucket(bucket, eventARN, this.selectedEventTypes, this.newBucketEventFilterPrefix, this.newBucketEventFilterSuffix, false);\n }\n if(quotaType != \"\" && quotaVal != \"\" && quotaVal >= 0){\n this.setQuotaForBucket(bucket, quotaType, quotaVal, false);\n }\n if(Object.keys(this.newBucketTagsList).length > 0){\n this.setTagsForBucket(bucket, false)\n }\n if(this.updatePolicyTypeChanged){\n this.setPolicy(bucket, false)\n }\n if(encryption != \"\"){\n this.setBucketEncryption(bucket, encryption, masterKeyID, false)\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating bucket');\n }\n if(numberOfBuckets == currentBucketNumber){\n setTimeout(()=>{\n this.getBuckets();\n }, 500);\n }\n });\n }\n\n private fileChanged(e) {\n console.log(\"eventTriggered\");\n\n this.uploadLifecycleFile = e.target.files[0];\n this.uploadLifecycleFileName = e.target.files[0].name;\n }\n\n private resetLifecycleForm(){\n this.uploadFileInput.nativeElement.value = \"\";\n this.uploadLifecycleFile;\n this.uploadLifecycleName = \"\";\n this.uploadLifecycleFileName = \"\";\n this.downloadLifecycleAvailable = 0;\n }\n\n private downloadLifecycle(bucket) {\n this.apiService.getLifecycle(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n // console.log(bucket, data);\n if(data[\"error\"]){\n this.toastr.error(JSON.stringify(data), 'Error while getting lifecycle');\n }else{\n if(data==\"\"){\n // this.toastr.error(\"Bucket has no lifecycle\", 'Error while getting lifecycle');\n }else{\n this.downloadLifecycleAvailable = 1;\n console.log(\"Lifecycle>>>>\",JSON.stringify(data));\n\n var uri = this.sanitizer.bypassSecurityTrustUrl(\"data:text/json;charset=UTF-8,\" + encodeURIComponent(JSON.stringify(data)));\n this.downloadJsonHref = uri;\n }\n }\n });\n }\n\n private uploadLifecycle(){\n let fileReader = new FileReader();\n fileReader.onload = (e) => {\n let lifecycleFileString = ((fileReader.result).toString()).replace(/\\n/g, ' ').replace(/\\r/g, ' ')\n this.apiService.setLifecycle(this.lifecycleBucketName,lifecycleFileString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Lifecycyle has been uploaded for bucket: '+this.lifecycleBucketName+'', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while uploading lifecycyle');\n }\n });\n }\n fileReader.readAsText(this.uploadLifecycleFile);\n }\n\n private setTagsForBucket(bucket,reloadBucketList){\n var tagsObj = this.newBucketTagsList;\n var tagsKeys = this.objectKeys(tagsObj);\n var tagArr = [];\n for (let i = 0; i < tagsKeys.length; i++) {\n var tagString = tagsKeys[i]+\"=\"+tagsObj[tagsKeys[i]]\n tagArr.push(tagString)\n }\n var tagString = tagArr.join(\"&\");\n console.log(\"TAG STRING >>>>\", tagString)\n this.apiService.setBucketTag(bucket, tagString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Tags for bucket '+bucket+' has been set', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while set tags for bucket');\n }\n if(reloadBucketList){\n this.getBuckets();\n }\n });\n }\n\n private downloadPolicy(bucket,fileName) {\n this.apiService.getBucketPolicy(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(\"download policy >>> \", bucket, data);\n if(data[\"error\"]){\n this.toastr.error(JSON.stringify(data), 'Error while getting policy');\n }else{\n if(data==\"\"){\n this.toastr.error(\"Bucket has no policy\", 'Error while getting policy');\n }else{\n var link = document.createElement('a');\n link.href = \"data:text/json;charset=UTF-8,\" + encodeURIComponent(data[\"policy\"].toString());\n link.download = fileName\n link.click();\n }\n }\n });\n }\n\n\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ApiService } from '../api.service';\n\n@Component({\n selector: 'app-server',\n templateUrl: './server.component.html',\n styleUrls: ['./server.component.scss']\n})\nexport class ServerComponent implements OnInit {\n\n objectKeys = Object.keys;\n objectValues = Object.values;\n math = Math;\n rawView = '';\n serviceInfo;\n diskUsageInfo;\n bucketSizes=[];\n hgChartDatasets=[{data: [], label: 'Number of objects'}];\n hgChartLabels=[];\n hgChartType = 'radar';\n hgChartColors = [\n {\n backgroundColor: 'rgba(151,187,205,0.9)',\n borderColor: 'rgba(151,187,205,1)',\n borderWidth: 2,\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: '#fff',\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderColor: 'rgba(151,187,205,1)'\n }\n ];\n hgChartOptions = {\n responsive: true\n };\n\n szChartDatasets=[{data: [], label: 'Size of bucket in Bytes'}];\n szChartLabels=[];\n szChartType = 'bar';\n szChartColors = [\n {\n backgroundColor: 'rgba(151,187,205,0.9)',\n borderColor: 'rgba(151,187,205,1)',\n borderWidth: 2,\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: '#fff',\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderColor: 'rgba(151,187,205,1)'\n }\n ];\n szChartOptions = {\n responsive: true\n };\n\n constructor(private apiService: ApiService) { }\n\n ngOnInit() {\n \tthis.serverInfo()\n this.diskInfo()\n }\n\n public hgChartClicked(e: any): void {\n }\n\n public hgChartHovered(e: any): void {\n }\n\n public szChartClicked(e: any): void {\n }\n\n public szChartHovered(e: any): void {\n }\n\n private serverInfo(){\n \tthis.apiService.serverInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.serviceInfo = data;\n });\n }\n\n private diskInfo(){\n \tthis.apiService.diskInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(\"Disk Usage >>>>>>>>>>>>\",data);\n this.diskUsageInfo = data;\n if(data.hasOwnProperty('objectsSizesHistogram')){\n var objectsSizesHistogram = this.diskUsageInfo.objectsSizesHistogram;\n var histogramKeysRawArr = [];\n var histogramValsRawArr = [];\n if(objectsSizesHistogram){\n histogramKeysRawArr = Object.keys(objectsSizesHistogram)\n histogramValsRawArr = Object.values(objectsSizesHistogram)\n }\n this.hgChartDatasets[0].data = histogramValsRawArr;\n\n this.hgChartLabels = [];\n for (let i = 0; i < histogramKeysRawArr.length; i++) {\n var histogramLabel = histogramKeysRawArr[i].split('_').join(' ');\n this.hgChartLabels.push(histogramLabel)\n }\n }\n\n if(data.hasOwnProperty('bucketsSizes') && this.diskUsageInfo.bucketsSizes != {} && this.diskUsageInfo.bucketsSizes != null ){\n var objectBucketSizes = this.diskUsageInfo.bucketsSizes;\n const bucketSizesKeysRawArr = Object.keys(objectBucketSizes)\n const bucketSizesValsRawArr = Object.values(objectBucketSizes)\n this.szChartDatasets[0].data = bucketSizesValsRawArr;\n this.szChartLabels= bucketSizesKeysRawArr;\n }\n });\n }\n\n private rawPrepare(obj){\n this.rawView = obj;\n }\n\n}\n","export default \"
\\n
\\n
\\n

Groups

\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n\\t\\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\t \\n\\t \\n\\t \\n \\n \\n \\n \\n \\n\\t
NamePolicyStatusMembersOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{groups[i].name}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{groups[i].policy}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{groups[i].status}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n
    \\n
  • {{member}}
  • \\n
\\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t \\t \\t\\n\\t \\t \\t\\n\\t \\t \\t 0\\\" mdbTooltip=\\\"You can delete only groups whit no memebers\\\" placement=\\\"top\\\">\\n\\t \\t
\\n \\n
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

{{modalCreateEditTitle}}

\\n
\\n
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t \\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t \\n \\t\\t\\t\\t
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Group

\\n
\\n
\\n Are you shure?
After you click on \\\"Delete\\\" button group {{groupToDelete}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Raw Policy

\\n
\\n
\\n \\t\\n
\\n \\n
\\n
\\n
\\n\";","import { Component, OnInit } from '@angular/core';\nimport { ApiService } from './api.service';\nimport { environment } from './../environments/environment';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent implements OnInit {\n title = 'Adminio-UI';\n\n constructor(private apiService: ApiService) { }\n\n ngOnInit() {\n \tthis.checkAuthStatus()\n }\n\n private checkAuthStatus(){\n this.apiService.checkAuthStatus().subscribe((data)=>{\n console.log(\"DATA AUTH>>>\", data);\n this.apiService.validateAuthInResponse(data)\n });\n }\n}\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzZXJ2ZXIuY29tcG9uZW50LnNjc3MifQ== */\";","export default \"\\n\\n\\n\\n \\n Adminio UI \\n\\n \\n \\n\\n \\n \\n \\n \\n
\\n \\n \\n\\t\\t\\t\\t\\t\\n
\\n
\\n \\n\\n
\\n\\n\\n\\n\\n\\n\\n\\n\\n\";","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { MDBBootstrapModule } from 'angular-bootstrap-md';\nimport { UsersComponent } from './users/users.component';\nimport { FormsModule, FormControl, FormGroup, Validators, ReactiveFormsModule} from \"@angular/forms\";\nimport { ServerComponent } from './server/server.component';\nimport { FilterPipe } from './filter.pipe';\nimport { PoliciesComponent } from './policies/policies.component';\nimport { NgxJsonViewerModule } from 'ngx-json-viewer';\nimport { AngularMultiSelectModule } from 'angular2-multiselect-dropdown';\nimport { LoaderComponent } from './loader/loader.component';\nimport { LoaderService } from './loader.service';\nimport { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from '@angular/common/http';\nimport { LoaderInterceptor } from './loader.interceptor';\nimport { BucketsComponent } from './buckets/buckets.component';\nimport { CommonModule } from '@angular/common';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { ToastrModule } from 'ngx-toastr';\nimport { GroupsComponent } from './groups/groups.component';\nimport { EnvServiceProvider } from './env.service.provider';\n\n\n\n@NgModule({\n declarations: [\n AppComponent,\n UsersComponent,\n ServerComponent,\n FilterPipe,\n PoliciesComponent,\n LoaderComponent,\n BucketsComponent,\n GroupsComponent,\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n MDBBootstrapModule.forRoot(),\n HttpClientModule,\n ReactiveFormsModule,\n NgxJsonViewerModule,\n AngularMultiSelectModule,\n FormsModule,\n CommonModule,\n BrowserAnimationsModule,\n ToastrModule.forRoot()\n ],\n providers: [\n EnvServiceProvider,\n LoaderService,\n { provide: HTTP_INTERCEPTORS, useClass: LoaderInterceptor, multi: true }\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJidWNrZXRzLmNvbXBvbmVudC5zY3NzIn0= */\";","import { EnvService } from './env.service';\n\nexport const EnvServiceFactory = () => {\n // Create env\n const env = new EnvService();\n\n // Read environment variables from browser window\n const browserWindow = window || {};\n const browserWindowEnv = browserWindow['__env'] || {};\n\n // Assign environment variables from browser window to env\n // In the current implementation, properties from env.js overwrite defaults from the EnvService.\n // If needed, a deep merge can be performed here to merge properties instead of overwriting them.\n for (const key in browserWindowEnv) {\n if (browserWindowEnv.hasOwnProperty(key)) {\n env[key] = window['__env'][key];\n }\n }\n\n return env;\n};\n\nexport const EnvServiceProvider = {\n provide: EnvService,\n useFactory: EnvServiceFactory,\n deps: [],\n};\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJ1c2Vycy5jb21wb25lbnQuc2NzcyJ9 */\";","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { ApiService } from '../api.service';\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n\n@Component({\n\tselector: 'app-groups',\n\ttemplateUrl: './groups.component.html',\n\tstyleUrls: ['./groups.component.scss']\n})\n\nexport class GroupsComponent implements OnInit, AfterViewInit {\n\tobjectKeys = Object.keys;\n\tjsn = JSON;\n\tgroups = {};\n\tgroupsWithMembers = [];\n\tusers = {};\n\trawPolicies = {};\n\tgroupToUpdate = {};\n\tnewGroupName = \"\";\n\tnewGroupPolicy = \"\";\n\tnewGroupStatus = \"\";\n\tpolicies;\n\tupdateStatusValues = ['enabled','disabled'];\n\tmodalCreateEditTitle;\n\tmodalCreateEditButtonText;\n\tmodalEditMode = false;\n\trawView = \"\";\n\tusersToRemove = [];\n\tgroupToDelete = \"\";\n\n\n\n\tdropdownList = [];\n\tselectedItems = [];\n\tdropdownSettings = {};\n\n\n\n\t@ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n\t@ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n\n\tprevious: string;\n\tsearchText: string = '';\n\n \tconstructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService) { }\n\n \t@HostListener('input') oninput() {\n\t\tif(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n\t\t this.searchItems();\n\t\t}\n\t\tif(event && event['target'] !== undefined && event.target[\"name\"] !== undefined && event.target[\"name\"] == \"newGroupName\"){\n\t if(this.modalEditMode){\n\t if(this.newGroupName == this.groupToUpdate[\"name\"]){\n\t console.log('hit')\n\t this.isEditMode(true)\n\t }else{\n\t this.isNowCopyMode();\n\t }\n\t }\n\t }\n\t}\n\n\tngOnInit() {\n\t\tthis.getGroups()\n\t\tthis.getListOfUsers()\n\t\tthis.getListOfPolicies()\n\t\tthis.isEditMode(false)\n\n\t\tthis.dropdownList = [\n\t\t {\"id\":1,\"itemName\":\"wait! i'm getting policies ASAP\"}\n\t ];\n\n\t this.dropdownSettings = {\n\t\t\tsingleSelection: false,\n\t\t\ttext:\"Select Members\",\n\t\t\tselectAllText:'Select All',\n\t\t\tunSelectAllText:'UnSelect All',\n\t\t\tenableSearchFilter: true\n\t\t};\n\t}\n\n\tonItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedItems);\n\t}\n\tOnItemDeSelect(item:any){\n\t\tthis.usersToRemove.push(item[\"itemName\"])\n\t console.log(item);\n\t console.log(this.selectedItems);\n\t}\n\tonSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonDeSelectAll(items: any){\n\n\t\t\tfor (let i = 0; i < this.selectedItems.length; i++) {\n\t\t\t\tthis.usersToRemove.push(this.selectedItems[i][\"itemName\"])\n\t\t\t}\n\n\t this.selectedItems = [];\n\t}\n\n\tprivate searchItems() {\n\t\tconst prev = this.mdbTable.getDataSource();\n\n\t\tif (!this.searchText) {\n\t\t this.mdbTable.setDataSource(this.previous);\n\t\t this.groups = this.mdbTable.getDataSource();\n\t\t}\n\n\t\tif (this.searchText) {\n\t\t this.groups = this.mdbTable.searchLocalDataBy(this.searchText);\n\t\t this.mdbTable.setDataSource(prev);\n\t\t}\n\t}\n\n\tngAfterViewInit() {\n\t this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n\t this.mdbTablePagination.calculateFirstItemIndex();\n\t this.mdbTablePagination.calculateLastItemIndex();\n\t this.cdRef.detectChanges();\n\t}\n\n\tprivate isEditMode(state){\n\t\tthis.modalEditMode = state;\n\t\tif(state){\n\t\t this.modalCreateEditTitle = \"Edit group\"\n\t\t this.modalCreateEditButtonText = \"Update\"\n\t\t}else{\n\t\t this.modalCreateEditTitle = \"Create group\"\n\t\t this.modalCreateEditButtonText = \"Create\"\n\t\t}\n\t}\n\n\tprivate isNowCopyMode(){\n\t\tthis.modalCreateEditTitle = \"Copy group\"\n\t\tthis.modalCreateEditButtonText = \"Copy\"\n\t}\n\n\tprivate commaToBr(arr) {\n\t\t// console.log(arr)\n\t var str = arr.join('\\n\\r');\n\t return str;\n\t}\n\n\tpublic b64unpack(str){\n\t// console.log(JSON.parse(atob(str)))\n\t\treturn JSON.parse(atob(str));\n\t}\n\n\tprivate rawPrepare(str){\n\t\tconsole.log(this.rawPolicies[str])\n\t\tthis.rawView = this.b64unpack(this.rawPolicies[str]);\n\t}\n\n\n\tprivate getGroups(){\n\t\tthis.groups = {};\n\t\tthis.groupsWithMembers = [];\n\t\tthis.previous = \"\";\n\t\tthis.apiService.getGroups().subscribe((data)=>{\n\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t console.log(data);\n\t\t if(data!==null){\n\t\t this.groups = data;\n\t\t for (var i = 0; i < this.objectKeys(data).length; i++) {\n\t\t\t\t\tlet tempGroupName = data[i]\n\t\t\t\t\tthis.apiService.getGroupDescription(tempGroupName).subscribe((data)=>{\n\t\t\t\t\t\tif(data!==null){\n\t\t\t\t\t\t\tthis.groupsWithMembers.push(data)\n\t\t\t\t\t\t\tthis.mdbTable.setDataSource(this.groupsWithMembers);\n\t\t \t\t\t\t\tthis.previous = this.mdbTable.getDataSource();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\tconsole.log(this.groupsWithMembers)\n\t\t\tthis.groups = this.groupsWithMembers;\n\t\t }\n\n\n\t\t});\n\t}\n\tprivate getListOfUsers(){\n\t\tthis.apiService.getUsers().subscribe((data)=>{\n\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t\tif(data!==null){\n\t\t\t\tthis.dropdownList = Object.entries(data).map((e) => ( { \"id\":e[0],\"itemName\":e[0] } ));\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getGroupDescription(group){\n\t\tthis.isEditMode(true);\n\t\tconsole.log(group)\n\t\tthis.apiService.getGroupDescription(group).subscribe((data)=>{\n\t\t\tif(data!==null){\n\t\t\t\tconsole.log(data)\n\t\t\t\tthis.groupToUpdate = data;\n\t\t\t\tthis.newGroupName = data[\"name\"]\n\t\t\t\tthis.newGroupPolicy = data[\"policy\"]\n\t\t\t\tthis.newGroupStatus = data[\"status\"]\n\t\t\t\tfor (var i = 0; i < data[\"members\"].length; i++) {\n\t\t\t\t\tvar tempMember = data[\"members\"][i];\n\t\t\t\t\tthis.selectedItems.push({\"id\":tempMember,\"itemName\":tempMember})\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getListOfPolicies(){\n\t\tthis.apiService.getPolicies().subscribe((data)=>{\n\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t this.policies = Object.keys(data);\n\t\t this.rawPolicies = data;\n\t\t});\n\t}\n\n\tprivate resetForm(){\n\t\tthis.newGroupName = \"\";\n\t\tthis.selectedItems = [];\n\t\tthis.newGroupPolicy = \"\";\n\t\tthis.newGroupStatus = \"\";\n\t}\n\n\tprivate markGroupToDelete(group){\n\t\tconsole.log(\"GROUP TO DELETE\", group);\n\n\t\tthis.groupToDelete = group\n\t}\n\n\tprivate deleteGroup(){\n\t\tconsole.log(\"GROUP TO DELETE >>>\", this.groupToDelete);\n\n\t\tthis.apiService.updateMembersGroup(this.groupToDelete,[],\"true\").subscribe((data)=>{\n\t\t\t this.apiService.validateAuthInResponse(data)\n\t if(data[\"Success\"]){\n\t this.toastr.success('Group: '+this.newGroupName+' has been removed', 'Success');\n\t this.usersToRemove = [];\n\t\t\t\t\tthis.refreshList();\n\t\t\t\t\tthis.groupToDelete = \"\";\n\t }else{\n\t this.toastr.error(JSON.stringify(data), 'Error while removing group');\n\t\t\t\t\tthis.refreshList();\n\t\t\t\t\tthis.groupToDelete = \"\";\n\t }\n\t });\n\t}\n\n\tprivate wipeGroupMembers(){\n\n\t\tthis.apiService.updateMembersGroup(this.newGroupName,this.usersToRemove,\"true\").subscribe((data)=>{\n\t\t\t this.apiService.validateAuthInResponse(data)\n\t if(data[\"Success\"]){\n\t this.toastr.success('Group: '+this.newGroupName+' members has been removed', 'Success');\n\t this.usersToRemove = [];\n\t }else{\n\t this.toastr.error(JSON.stringify(data), 'Error while removing members from group');\n\t }\n\t });\n\t}\n\n\tprivate updatePolicy(){\n\t\tif(this.newGroupPolicy !== null && this.newGroupPolicy != \"\"){\n\t \tthis.apiService.setPolicy(this.newGroupPolicy,this.newGroupName,\"true\").subscribe((data)=>{\n\t\t\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t if(data[\"Success\"]){\n\t\t this.toastr.success('Group: '+this.newGroupName+' policy has been set to '+this.newGroupPolicy, 'Success');\n\t\t }else{\n\t\t this.toastr.error(JSON.stringify(data), 'Error while setting policy to group');\n\t\t }\n\t\t });\n\t }\n\t}\n\n\tprivate updateStatus(){\n\t\tif(this.newGroupStatus !== null && this.newGroupStatus != \"\"){\n\t \tthis.apiService.setStatusGroup(this.newGroupName,this.newGroupStatus).subscribe((data)=>{\n\t\t\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t if(data[\"Success\"]){\n\t\t this.toastr.success('Group: '+this.newGroupName+' status has been set to '+this.newGroupStatus, 'Success');\n\t\t }else{\n\t\t this.toastr.error(JSON.stringify(data), 'Error while setting status to group');\n\t\t }\n\t\t });\n\t }\n\t}\n\n\tprivate refreshList(){\n\t\tthis.updatePolicy();\n\t\tthis.updateStatus();\n\t\tthis.getGroups();\n\t}\n\n\tprivate createGroup(){\n\t\tconsole.log(\"CREATE GROUP CALLED\")\n\t\tlet newMembers = []\n\t\tfor (var i = 0; i < this.selectedItems.length; i++) {\n\t\t\tnewMembers.push(this.selectedItems[i].itemName)\n\t\t}\n\n\t\t//remove users from group\n\t\tconsole.log(\"grouptoUpdate\",this.groupToUpdate);\n\n\t\tif(this.groupToUpdate!==null && this.groupToUpdate!=\"\" && this.groupToUpdate){\n\t\t\tif(this.usersToRemove.length > 0){\n\t\t\t\tthis.wipeGroupMembers()\n\t\t\t}\n\t\t}\n\n\t\t//add all new users to group\n\t\tif(newMembers.length > 0){\n\t\t\tthis.apiService.updateMembersGroup(this.newGroupName,newMembers,\"false\").subscribe((data)=>{\n\t\t\t\t this.apiService.validateAuthInResponse(data)\n\t\t if(data[\"Success\"]){\n\t\t this.toastr.success('Group: '+this.newGroupName+' has been created', 'Success');\n\t\t }else{\n\t\t this.toastr.error(JSON.stringify(data), 'Error while creating group');\n\t\t }\n\t\t this.refreshList();\n\t\t });\n\t\t}else{\n\t\t\tthis.refreshList();\n\t\t}\n this.isEditMode(false);\n this.groupToUpdate = {};\n\t}\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'filter'\n})\nexport class FilterPipe implements PipeTransform {\n\n transform(items: any[], searchPolicy: string): any[] {\n\n if (!items) {\n return [];\n }\n if (!searchPolicy) {\n return items;\n }\n searchPolicy = searchPolicy.toLocaleLowerCase();\n\n return items.filter(it => {\n return it.toLocaleLowerCase().includes(searchPolicy);\n });\n }\n\n}\n","export default \"
\\n
\\n
\\n

Buckets

\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n\\t\\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n \\n\\t \\n\\t \\t \\n\\t \\n\\t \\n \\n \\n \\n \\n \\n\\t
NameTagsCreation DateSizeQuotaEventOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n {{buckets[b].name}}\\n   \\n {{buckets[b].policy}}\\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n 0\\\">\\n
    \\n
  • {{tag}}: {{buckets[b].tags[tag]}}
  • \\n
\\n
\\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{buckets[b].info.creationDate | date : \\\"dd/MM/yy HH:mm:ss\\\" }}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\\\">\\n \\n {{(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)+'').length > 3 ? math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024/1024)+' Gb' : isNaN(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)) ? '–' : math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024) +' Mb'}}\\n \\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\\\">\\n \\n {{buckets[b].quota?.quotatype}}\\n {{buckets[b].quota?.quotatype}}\\n \\n 0\\\" mdbTooltip=\\\"{{buckets[b].quota?.quota}} bytes\\\" placement=\\\"top\\\">\\n {{(math.round(buckets[b].quota?.quota/1024/1024)+'').length > 3 ? math.round(buckets[b].quota?.quota/1024/1024/1024)+' Gb' : isNaN(math.round(buckets[b].quota?.quota/1024/1024)) ? '–' : math.round(buckets[b].quota?.quota/1024/1024) +' Mb'}}\\n \\n \\n ∞\\n \\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && serviceInfo?.sqsARN\\\">\\n \\n Lambda:\\n \\n {{c.Lambda}}
\\n
    \\n
  • \\n {{e}}\\n
  • \\n
\\n
\\n
\\n \\n Topic:\\n \\n {{c.Topic}}
\\n
    \\n
  • \\n {{e}}\\n
  • \\n
\\n
\\n
\\n \\n Queue:\\n \\n {{c.Queue}}
\\n
    \\n
  • \\n {{e}}\\n
  • \\n
\\n
\\n
\\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t \\t \\t \\n\\t \\t \\t \\n\\t \\t \\t \\n\\t \\t \\t \\n \\n \\n\\t \\t
\\n \\n
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Bucket Lifecycyle

\\n
\\n
\\n
\\n
\\n
\\n This bucket already have a lifecycyle policy, you can export it as JSON by clicking on \\\"dowload icon\\\" >\\n \\n
\\n Or override it by upload a new lifecycle policy.\\n
\\n
\\n Lifecycle policy is structrured xml file. You can use examples from Minio\\n documentation. Or use an AWS S3 documentation\\n Object Lifecycle Management\\n
\\n
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Bucket

\\n
\\n
\\n Are you shure?
After you click on \\\"Delete\\\" button bucket {{bucketToDelete}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Bucket Notifications

\\n
\\n
\\n Are you shure?
After you click on \\\"remove\\\" button bucket {{bucketToRemoveNotifications}} notifications will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Bucket Quota Limits

\\n
\\n
\\n Are you shure?
After you click on \\\"remove\\\" button quota for bucket {{bucketToRemoveQuota}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Encryption

\\n
\\n
\\n Are you shure?
After you click on \\\"remove\\\" button encryption for bucket {{bucketToRemoveEncryption}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Create Bucket

\\n
\\n
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n You can pass multiple names with \\\",\\\" delimiter\\n
\\n
Policy
\\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
Encryption
\\n

\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
Tags
\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\t\\t\\t\\t
\\n
\\n {{tag}}: {{newBucketTagsList[tag]}}\\n
\\n
Quota
\\n \\n\\n
\\n \\n \\t\\t\\t\\t\\t\\t\\t
\\n\\n
\\n \\n In \\\"fifo\\\" mode - old data automatically will be removed when you reach quota limit.
\\n In \\\"hard\\\" mode - you can't add new data to bucket if quota limit reached.\\n
\\n\\n
\\n \\t\\t\\t\\t\\t\\n
\\n
Bytes
\\n
\\n
\\n
\\n
\\n
Events section
\\n

\\n
\\n \\t\\t\\t\\t\\t\\t\\t\\t\\t\\n \\t\\t\\t\\t\\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Update Bucket

\\n
\\n
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
Policy
\\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
Encryption
\\n

\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
Tags
\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\t\\t\\t\\t
\\n
\\n {{tag}}: {{newBucketTagsList[tag]}}\\n
\\n
\\n
Quota section
\\n \\n
\\n \\n \\t\\t\\t\\t\\t\\t\\t
\\n\\n
\\n \\n In \\\"fifo\\\" mode - old data automatically will be removed when you reach quota limit.
\\n In \\\"hard\\\" mode - you can't add new data to bucket if quota limit reached.\\n
\\n\\n
\\n \\t\\t\\t\\t\\t\\n
\\n
Bytes
\\n
\\n
\\n
\\n
\\n
Events section
\\n

\\n
\\n \\t\\t\\t\\t\\t\\t\\t\\t\\t\\n \\t\\t\\t\\t\\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n\";","//loader.interceptor.ts\nimport { Component, OnInit } from '@angular/core';\nimport { LoaderService } from '../loader.service';\n\n@Component({\nselector: 'app-loading',\ntemplateUrl: './loader.component.html',\nstyleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent implements OnInit {\n\nloading: boolean;\nerror: boolean;\nconstructor(private loaderService: LoaderService) {\n this.loaderService.isLoading.subscribe((v) => {\n this.loading = v;\n this.error = this.loaderService.isError;\n });\n}\nngOnInit() {\n}\n\n}\n","export default \"
\\n\\t
\\n\\t\\t
\\n\\t\\t

Policies

\\n\\t\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t     \\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t
NameActionPrincipalEffectResourceConditionsOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{objectKeys(policies[pol])}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • {{action}}
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t{{policies[pol].Statement.Principal}}\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • {{st.Effect}}
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t
    • {{resource}}
    • \\n\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{condition}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
        \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • {{con}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
          \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{conKeyVal}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t \\n\\t\\t \\t\\t \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Policy

\\n
\\n
\\n Are you shure?
After you click on \\\"Delete\\\" button policy {{policyToDelete}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Upload Policy

\\n
\\n
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Raw Policy

\\n
\\n
\\n \\t\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

{{modalCreateEditTitle}}

Switch to interface
\\n
\\n
\\n \\t\\n \\t\\t
\\n\\t\\t\\t\\t\\t
 
\\n\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t \\t
\\n In Edit mode you can make a copy of policy - Just rename it!\\n
\\n\\n\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
0\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
0\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t Principal\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
Buckets section
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t arn:aws:s3:::\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t /\\\" [(ngModel)]=\\\"newPolicy.bucket\\\" aria-label=\\\"Recipient's username\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-describedby=\\\"s3-prefix\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
BucketOptions
{{bst}}
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
Conditions section
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
Condition and options
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{condition}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • {{con}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{conKeyVal}}  \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
 
\\n\\t\\t\\t\\t\\t
\\n\\n\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t
EffectActionResourceConditionsOptions
{{st.Effect}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • {{action}}
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • {{resource}}
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{condition}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • {{con}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{conKeyVal}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\n \\n
\\n \\n
\\n
\\n
\\n\";","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { ApiService } from '../api.service';\nimport { FormControl, FormGroup, Validators, ReactiveFormsModule } from \"@angular/forms\";\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n\n@Component({\n selector: 'app-users',\n templateUrl: './users.component.html',\n styleUrls: ['./users.component.scss']\n})\nexport class UsersComponent implements OnInit, AfterViewInit {\n validatingForm: FormGroup;\n updateUser: FormGroup;\n users = {};\n usersRaw = {};\n userToDelete;\n userToUpdate;\n objectKeys = Object.keys;\n objectValues = Object.values;\n jsn = JSON;\n policies;\n updateStatusValues = ['enabled','disabled'];\n\n @ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n @ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n previous: string;\n\n searchText: string = '';\n\n constructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService) { }\n\n @HostListener('input') oninput() {\n if(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n this.searchItems();\n }\n }\n\n ngOnInit() {\n \tthis.getListOfUsers()\n \tthis.getListOfPolicies()\n this.resetForm()\n this.updateUserFrom()\n }\n\n searchItems() {\n console.log(this.searchText)\n const prev = this.mdbTable.getDataSource();\n\n if (!this.searchText) {\n this.mdbTable.setDataSource(this.previous);\n this.users = this.mdbTable.getDataSource();\n }\n\n if (this.searchText) {\n this.users = this.mdbTable.searchLocalDataBy(this.searchText);\n this.mdbTable.setDataSource(prev);\n }\n }\n\n ngAfterViewInit() {\n this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n this.mdbTablePagination.calculateFirstItemIndex();\n this.mdbTablePagination.calculateLastItemIndex();\n this.cdRef.detectChanges();\n }\n\n get newUserAccess() {\n\treturn this.validatingForm.get('newUserAccess');\n }\n\n get newUserSecret() {\n\treturn this.validatingForm.get('newUserSecret');\n }\n\n get newUserPolicy() {\n\treturn this.validatingForm.get('newUserPolicy');\n }\n\n private generatePassword(length) {\n var charset = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n var retVal = \"\";\n for (var i = 0, n = charset.length; i < length; ++i) {\n retVal += charset.charAt(Math.floor(Math.random() * n));\n }\n\n return retVal;\n }\n\n get accessKeyUpdate() {\n return this.updateUser.get('accessKeyUpdate');\n }\n\n get secretKeyUpdate() {\n return this.updateUser.get('secretKeyUpdate');\n }\n\n get policyUpdate() {\n return this.updateUser.get('policyUpdate');\n }\n\n get statusUpdate() {\n return this.updateUser.get('statusUpdate');\n }\n\n private updateUserFrom(){\n this.updateUser = new FormGroup({\n accessKeyUpdate: new FormControl({value: '', disabled: true}, Validators.required),\n secretKeyUpdate: new FormControl(''),\n policyUpdate: new FormControl('', Validators.required),\n statusUpdate: new FormControl('', Validators.required)\n });\n }\n\n private resetForm(){\n \tthis.validatingForm = new FormGroup({\n newUserAccess: new FormControl(this.generatePassword(16), Validators.minLength(5)),\n newUserSecret: new FormControl(this.generatePassword(24), Validators.minLength(10)),\n newUserPolicy: new FormControl('',Validators.minLength(0))\n });\n }\n\n private getListOfUsers(){\n \tthis.apiService.getUsers().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data)\n this.usersRaw = data;\n const arrayOfUsers = Object.entries(data).map((e) => ( { [e[0]]: e[1] } ));\n this.users = arrayOfUsers;\n this.mdbTable.setDataSource(arrayOfUsers);\n console.log(arrayOfUsers)\n this.previous = this.mdbTable.getDataSource();\n });\n }\n\n\n private getListOfPolicies(){\n \tthis.apiService.getPolicies().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.policies = Object.keys(data);\n });\n }\n\n private createUser(){\n \tvar userAccess = this.newUserAccess.value;\n \tvar userSecret = this.newUserSecret.value;\n \tvar userPolicy = this.newUserPolicy.value;\n\n \tconsole.log(userPolicy)\n\n \tif(userPolicy!=''){\n \t\tthis.apiService.addUserExtended(userAccess,userSecret,userPolicy).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n\t console.log(data);\n\t this.getListOfUsers();\n if(data[\"Success\"]){\n this.toastr.success('User: '+userAccess+' with policy '+userPolicy+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating user');\n }\n\t });\n \t}else{\n \t\tthis.apiService.addUser(userAccess,userSecret).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n\t console.log(data);\n\t this.getListOfUsers();\n if(data[\"Success\"]){\n this.toastr.success('User: '+userAccess+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating user');\n }\n\t });\n \t}\n }\n\n private setStatusUser(accessKey,status){\n \tif(status == 'enabled'){\n \t\tstatus = 'disabled'\n \t}else{\n \t\tstatus = 'enabled'\n \t}\n \tthis.apiService.setStatusUser(accessKey,status).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('User: '+accessKey+' status has changed to '+status, 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while changing state for user');\n }\n this.getListOfUsers();\n });\n }\n\n private deleteUserPrepare(accessKey){\n \tthis.userToDelete = accessKey\n }\n\n private updateUserPrepare(accessKey){\n this.userToUpdate = accessKey\n this.updateUser.patchValue({'accessKeyUpdate': accessKey});\n if(this.usersRaw[accessKey]['policyName']){\n this.updateUser.patchValue({'policyUpdate': this.usersRaw[accessKey]['policyName']});\n }\n if(this.usersRaw[accessKey]['status']){\n this.updateUser.patchValue({'statusUpdate': this.usersRaw[accessKey]['status']});\n }\n console.log(this.usersRaw[accessKey])\n }\n\n private updateGenNewPassword(){\n this.updateUser.patchValue({'secretKeyUpdate': this.generatePassword(24)});\n }\n\n private updateUserSave(){\n var updatedSecret = this.updateUser.value.secretKeyUpdate;\n var updatedPolicy = this.updateUser.value.policyUpdate;\n var updatedStatus = this.updateUser.value.statusUpdate;\n\n this.apiService.updateUser(this.userToUpdate,updatedSecret,updatedPolicy,updatedStatus).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n this.getListOfUsers();\n if(data[\"Success\"]){\n this.toastr.success('User: '+this.userToUpdate+' has been updated', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while updating user');\n }\n });\n }\n\n\n private deleteUser(){\n \tthis.apiService.deleteUser(this.userToDelete).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('User: '+this.userToDelete+' has been deleted', 'Success');\n }\n this.updateUserFrom();\n this.getListOfUsers();\n });\n }\n\n}\n","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl} from '@angular/platform-browser';\nimport { ApiService } from '../api.service';\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n@Component({\n selector: 'app-policies',\n templateUrl: './policies.component.html',\n styleUrls: ['./policies.component.scss']\n})\nexport class PoliciesComponent implements OnInit {\n objectKeys = Object.keys;\n objectValues = Object.values;\n policies = {};\n policiesRaw = {};\n b64decode;\n rawView = '';\n policyToDelete;\n policyToUpdate;\n modalEditMode;\n jsn = JSON;\n uploadPolicyName;\n uploadPolicyFile;\n uploadPolicyFileName;\n downloadJsonHref;\n modalCreateEditTitle;\n modalCreateEditButtonText;\n\n dropdownActionList = [];\n dropdownAdminList = [];\n dropdownConditionList = [];\n dropdownConditionKeyList = [];\n\n selectedActions = [];\n selectedAdmins = [];\n selectedCondition = [];\n selectedConditionKey = [];\n\n dropdownActionSettings = {};\n dropdownAdminSettings = {};\n dropdownConditionSettings = {};\n dropdownConditionKeySettings = {};\n\n advancedInterface = false;\n advancedInterfaceLabel = \"advanced\"\n\n newPolicy = {\n \tname:\"\",\n \teffect:\"allow\",\n \tbucket:\"\",\n };\n\n newPolicyRaw = {\n \tVersion:\"\",\n \tStatement: []\n }\n\n newStatement = {\n Action: [],\n Effect: \"\",\n Resource: [],\n Condition: {},\n Principal: \"\"\n }\n\n newConditionValue = \"\"\n\n @ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n @ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n previous: string;\n\n searchText: string = '';\n\n\n constructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService, private sanitizer: DomSanitizer) { }\n\n @HostListener('input') oninput() {\n if(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n this.searchItems();\n }\n if(event && event['target'] !== undefined && event.target[\"name\"] !== undefined && event.target[\"name\"] == \"newPolicyName\"){\n if(this.modalEditMode){\n if(this.newPolicy.name == this.policyToUpdate){\n this.isEditMode(true)\n }else{\n this.isNowCopyMode();\n }\n }\n }\n\n }\n\n @ViewChild('uploadPolicyFile', { static: true })\n uploadFileInput: any;\n\n ngOnInit() {\n \tthis.getPolicies()\n\n\n \tthis.dropdownActionList = [\n {\"id\":1,\"itemName\":\"s3:AbortMultipartUpload\"},\n {\"id\":2,\"itemName\":\"s3:CreateBucket\"},\n {\"id\":3,\"itemName\":\"s3:DeleteBucket\"},\n {\"id\":4,\"itemName\":\"s3:ForceDeleteBucket\"},\n {\"id\":5,\"itemName\":\"s3:DeleteBucketPolicy\"},\n {\"id\":6,\"itemName\":\"s3:DeleteObject\"},\n {\"id\":7,\"itemName\":\"s3:GetBucketLocation\"},\n {\"id\":8,\"itemName\":\"s3:GetBucketNotification\"},\n {\"id\":9,\"itemName\":\"s3:GetBucketPolicy\"},\n {\"id\":10,\"itemName\":\"s3:GetObject\"},\n {\"id\":11,\"itemName\":\"s3:HeadBucket\"},\n {\"id\":12,\"itemName\":\"s3:ListAllMyBuckets\"},\n {\"id\":13,\"itemName\":\"s3:ListBucket\"},\n {\"id\":14,\"itemName\":\"s3:ListBucketVersions\"},\n {\"id\":15,\"itemName\":\"s3:ListBucketMultipartUploads\"},\n {\"id\":16,\"itemName\":\"s3:ListenNotification\"},\n {\"id\":17,\"itemName\":\"s3:ListenBucketNotification\"},\n {\"id\":18,\"itemName\":\"s3:ListMultipartUploadParts\"},\n {\"id\":19,\"itemName\":\"s3:PutLifecycleConfiguration\"},\n {\"id\":20,\"itemName\":\"s3:GetLifecycleConfiguration\"},\n {\"id\":21,\"itemName\":\"s3:PutBucketNotification\"},\n {\"id\":22,\"itemName\":\"s3:PutBucketPolicy\"},\n {\"id\":23,\"itemName\":\"s3:PutObject\"},\n {\"id\":24,\"itemName\":\"s3:DeleteObjectVersion\"},\n {\"id\":25,\"itemName\":\"s3:DeleteObjectVersionTagging\"},\n {\"id\":26,\"itemName\":\"s3:GetObjectVersion\"},\n {\"id\":27,\"itemName\":\"s3:GetObjectVersionTagging\"},\n {\"id\":28,\"itemName\":\"s3:PutObjectVersionTagging\"},\n {\"id\":29,\"itemName\":\"s3:BypassGovernanceRetention\"},\n {\"id\":30,\"itemName\":\"s3:PutObjectRetention\"},\n {\"id\":31,\"itemName\":\"s3:GetObjectRetention\"},\n {\"id\":32,\"itemName\":\"s3:GetObjectLegalHold\"},\n {\"id\":33,\"itemName\":\"s3:PutObjectLegalHold\"},\n {\"id\":34,\"itemName\":\"s3:GetBucketObjectLockConfiguration\"},\n {\"id\":35,\"itemName\":\"s3:PutBucketObjectLockConfiguration\"},\n {\"id\":36,\"itemName\":\"s3:GetBucketTagging\"},\n {\"id\":37,\"itemName\":\"s3:PutBucketTagging\"},\n {\"id\":38,\"itemName\":\"s3:GetObjectTagging\"},\n {\"id\":39,\"itemName\":\"s3:PutObjectTagging\"},\n {\"id\":40,\"itemName\":\"s3:DeleteObjectTagging\"},\n {\"id\":41,\"itemName\":\"s3:PutEncryptionConfiguration\"},\n {\"id\":42,\"itemName\":\"s3:GetEncryptionConfiguration\"},\n {\"id\":43,\"itemName\":\"s3:PutBucketVersioning\"},\n {\"id\":44,\"itemName\":\"s3:GetBucketVersioning\"},\n {\"id\":45,\"itemName\":\"s3:GetReplicationConfiguration\"},\n {\"id\":46,\"itemName\":\"s3:PutReplicationConfiguration\"},\n {\"id\":47,\"itemName\":\"s3:ReplicateObject\"},\n {\"id\":48,\"itemName\":\"s3:ReplicateDelete\"},\n {\"id\":49,\"itemName\":\"s3:ReplicateTags\"},\n {\"id\":50,\"itemName\":\"s3:GetObjectVersionForReplication\"}\n ];\n\n this.dropdownActionSettings = {\n \t\tsingleSelection: false,\n \t\ttext:\"Select Actions\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true\n\t };\n\n this.dropdownAdminList = [\n {\"id\":1,\"itemName\":\"admin:ConfigUpdate\"},\n {\"id\":2,\"itemName\":\"admin:CreateUser\"},\n {\"id\":3,\"itemName\":\"admin:DeleteUser\"},\n {\"id\":4,\"itemName\":\"admin:ListUsers\"},\n {\"id\":5,\"itemName\":\"admin:EnableUser\"},\n {\"id\":6,\"itemName\":\"admin:DisableUser\"},\n {\"id\":7,\"itemName\":\"admin:GetUser\"},\n {\"id\":8,\"itemName\":\"admin:ServerInfo\"},\n {\"id\":9,\"itemName\":\"admin:ServerUpdate\"},\n {\"id\":10,\"itemName\":\"admin:StorageInfo\"},\n {\"id\":11,\"itemName\":\"admin:DataUsageInfo\"},\n {\"id\":12,\"itemName\":\"admin:TopLocks\"},\n {\"id\":13,\"itemName\":\"admin:OBDInfo\"},\n {\"id\":14,\"itemName\":\"admin:Profiling\"},\n {\"id\":15,\"itemName\":\"admin:ServerTrace\"},\n {\"id\":16,\"itemName\":\"admin:ConsoleLog\"},\n {\"id\":17,\"itemName\":\"admin:KMSKeyStatus\"},\n {\"id\":18,\"itemName\":\"admin:AddUserToGroup\"},\n {\"id\":19,\"itemName\":\"admin:RemoveUserFromGroup\"},\n {\"id\":20,\"itemName\":\"admin:GetGroup\"},\n {\"id\":21,\"itemName\":\"admin:ListGroups\"},\n {\"id\":22,\"itemName\":\"admin:EnableGroup\"},\n {\"id\":23,\"itemName\":\"admin:DisableGroup\"},\n {\"id\":24,\"itemName\":\"admin:CreatePolicy\"},\n {\"id\":25,\"itemName\":\"admin:DeletePolicy\"},\n {\"id\":26,\"itemName\":\"admin:GetPolicy\"},\n {\"id\":27,\"itemName\":\"admin:AttachUserOrGroupPolicy\"},\n {\"id\":28,\"itemName\":\"admin:ListUserPolicies\"}\n ];\n\n this.dropdownAdminSettings = {\n singleSelection: false,\n text:\"Select Admin actions for statement\",\n selectAllText:'Select All',\n unSelectAllText:'UnSelect All',\n enableSearchFilter: true\n };\n\n \tthis.dropdownConditionList = [\n {\"id\":1,\"itemName\":\"ArnEquals\"},\n {\"id\":2,\"itemName\":\"ArnEqualsIfExists\"},\n {\"id\":3,\"itemName\":\"ArnLike\"},\n {\"id\":4,\"itemName\":\"ArnLikeIfExists\"},\n {\"id\":5,\"itemName\":\"ArnNotEquals\"},\n {\"id\":6,\"itemName\":\"ArnNotEqualsIfExists\"},\n {\"id\":7,\"itemName\":\"ArnNotLike\"},\n {\"id\":8,\"itemName\":\"ArnNotLikeIfExists\"},\n {\"id\":9,\"itemName\":\"BinaryEquals\"},\n {\"id\":10,\"itemName\":\"BinaryEqualsIfExists\"},\n {\"id\":11,\"itemName\":\"BinaryNotEquals\"},\n {\"id\":12,\"itemName\":\"BinaryNotEqualsIfExists\"},\n {\"id\":13,\"itemName\":\"Bool\"},\n {\"id\":14,\"itemName\":\"BoolIfExists\"},\n {\"id\":15,\"itemName\":\"DateEquals\"},\n {\"id\":16,\"itemName\":\"DateEqualsIfExists\"},\n {\"id\":17,\"itemName\":\"DateGreaterThan\"},\n {\"id\":18,\"itemName\":\"DateGreaterThanEquals\"},\n {\"id\":19,\"itemName\":\"DateGreaterThanEqualsIfExists\"},\n {\"id\":20,\"itemName\":\"DateGreaterThanIfExists\"},\n {\"id\":21,\"itemName\":\"DateLessThan\"},\n {\"id\":22,\"itemName\":\"DateLessThanEquals\"},\n {\"id\":23,\"itemName\":\"DateLessThanEqualsIfExists\"},\n {\"id\":24,\"itemName\":\"DateLessThanIfExists\"},\n {\"id\":25,\"itemName\":\"DateNotEquals\"},\n {\"id\":26,\"itemName\":\"DateNotEqualsIfExists\"},\n {\"id\":27,\"itemName\":\"IpAddress\"},\n {\"id\":28,\"itemName\":\"IpAddressIfExists\"},\n {\"id\":29,\"itemName\":\"NotIpAddress\"},\n {\"id\":30,\"itemName\":\"NotIpAddressIfExists\"},\n {\"id\":31,\"itemName\":\"Null\"},\n {\"id\":32,\"itemName\":\"NumericEquals\"},\n {\"id\":33,\"itemName\":\"NumericEqualsIfExists\"},\n {\"id\":34,\"itemName\":\"NumericGreaterThan\"},\n {\"id\":35,\"itemName\":\"NumericGreaterThanEquals\"},\n {\"id\":36,\"itemName\":\"NumericGreaterThanEqualsIfExists\"},\n {\"id\":37,\"itemName\":\"NumericGreaterThanIfExists\"},\n {\"id\":38,\"itemName\":\"NumericLessThan\"},\n {\"id\":39,\"itemName\":\"NumericLessThanEquals\"},\n {\"id\":40,\"itemName\":\"NumericLessThanEqualsIfExists\"},\n {\"id\":41,\"itemName\":\"NumericLessThanIfExists\"},\n {\"id\":42,\"itemName\":\"NumericNotEquals\"},\n {\"id\":43,\"itemName\":\"NumericNotEqualsIfExists\"},\n {\"id\":44,\"itemName\":\"StringEquals\"},\n {\"id\":45,\"itemName\":\"StringEqualsIfExists\"},\n {\"id\":46,\"itemName\":\"StringEqualsIgnoreCase\"},\n {\"id\":47,\"itemName\":\"StringEqualsIgnoreCaseIfExists\"},\n {\"id\":48,\"itemName\":\"StringLike\"},\n {\"id\":49,\"itemName\":\"StringLikeIfExists\"},\n {\"id\":50,\"itemName\":\"StringNotEquals\"},\n {\"id\":51,\"itemName\":\"StringNotEqualsIfExists\"},\n {\"id\":52,\"itemName\":\"StringNotEqualsIgnoreCase\"},\n {\"id\":53,\"itemName\":\"StringNotEqualsIgnoreCaseIfExists\"},\n {\"id\":54,\"itemName\":\"StringNotLike\"},\n {\"id\":55,\"itemName\":\"StringNotLikeIfExists\"}\n ];\n\n this.dropdownConditionSettings = {\n \t\tsingleSelection: true,\n \t\ttext:\"Select Condition\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true\n\t };\n\n \tthis.dropdownConditionKeyList = [\n {\"id\":1,\"itemName\":\"aws:CurrentTime\"},\n {\"id\":2,\"itemName\":\"aws:EpochTime\"},\n {\"id\":3,\"itemName\":\"aws:MultiFactorAuthAge\"},\n {\"id\":4,\"itemName\":\"aws:MultiFactorAuthPresent\"},\n {\"id\":5,\"itemName\":\"aws:PrincipalArn\"},\n {\"id\":6,\"itemName\":\"aws:PrincipalOrgID\"},\n {\"id\":7,\"itemName\":\"aws:PrincipalTag/${TagKey}\"},\n {\"id\":8,\"itemName\":\"aws:PrincipalType\"},\n {\"id\":9,\"itemName\":\"aws:Referer\"},\n {\"id\":10,\"itemName\":\"aws:RequestTag/${TagKey}\"},\n {\"id\":11,\"itemName\":\"aws:RequestedRegion\"},\n {\"id\":12,\"itemName\":\"aws:SecureTransport\"},\n {\"id\":13,\"itemName\":\"aws:SourceAccount\"},\n {\"id\":14,\"itemName\":\"aws:SourceArn\"},\n {\"id\":15,\"itemName\":\"aws:SourceIp\"},\n {\"id\":16,\"itemName\":\"aws:SourceVpc\"},\n {\"id\":17,\"itemName\":\"aws:SourceVpce\"},\n {\"id\":18,\"itemName\":\"aws:TagKeys\"},\n {\"id\":19,\"itemName\":\"aws:TokenIssueTime\"},\n {\"id\":20,\"itemName\":\"aws:UserAgent\"},\n {\"id\":21,\"itemName\":\"aws:userid\"},\n {\"id\":22,\"itemName\":\"aws:username\"},\n {\"id\":23,\"itemName\":\"s3:AccessPointNetworkOrigin\"},\n {\"id\":24,\"itemName\":\"s3:DataAccessPointAccount\"},\n {\"id\":25,\"itemName\":\"s3:DataAccessPointArn\"},\n {\"id\":26,\"itemName\":\"s3:ExistingJobOperation\"},\n {\"id\":27,\"itemName\":\"s3:ExistingJobPriority\"},\n {\"id\":28,\"itemName\":\"s3:ExistingObjectTag/\"},\n {\"id\":29,\"itemName\":\"s3:JobSuspendedCause\"},\n {\"id\":30,\"itemName\":\"s3:LocationConstraint\"},\n {\"id\":31,\"itemName\":\"s3:RequestJobOperation\"},\n {\"id\":32,\"itemName\":\"s3:RequestJobPriority\"},\n {\"id\":33,\"itemName\":\"s3:RequestObjectTag/\"},\n {\"id\":34,\"itemName\":\"s3:RequestObjectTagKeys\"},\n {\"id\":35,\"itemName\":\"s3:VersionId\"},\n {\"id\":36,\"itemName\":\"s3:authtype\"},\n {\"id\":37,\"itemName\":\"s3:delimiter\"},\n {\"id\":38,\"itemName\":\"s3:locationconstraint\"},\n {\"id\":39,\"itemName\":\"s3:max-keys\"},\n {\"id\":40,\"itemName\":\"s3:object-lock-legal-hold\"},\n {\"id\":41,\"itemName\":\"s3:object-lock-mode\"},\n {\"id\":42,\"itemName\":\"s3:object-lock-remaining-retention-days\"},\n {\"id\":43,\"itemName\":\"s3:object-lock-retain-until-date\"},\n {\"id\":44,\"itemName\":\"s3:prefix\"},\n {\"id\":45,\"itemName\":\"s3:signatureage\"},\n {\"id\":46,\"itemName\":\"s3:signatureversion\"},\n {\"id\":47,\"itemName\":\"s3:versionid\"},\n {\"id\":48,\"itemName\":\"s3:x-amz-acl\"},\n {\"id\":49,\"itemName\":\"s3:x-amz-content-sha256\"},\n {\"id\":50,\"itemName\":\"s3:x-amz-copy-source\"},\n {\"id\":51,\"itemName\":\"s3:x-amz-grant-full-control\"},\n {\"id\":52,\"itemName\":\"s3:x-amz-grant-read\"},\n {\"id\":53,\"itemName\":\"s3:x-amz-grant-read-acp\"},\n {\"id\":54,\"itemName\":\"s3:x-amz-grant-write\"},\n {\"id\":55,\"itemName\":\"s3:x-amz-grant-write-acp\"},\n {\"id\":56,\"itemName\":\"s3:x-amz-metadata-directive\"},\n {\"id\":57,\"itemName\":\"s3:x-amz-server-side-encryption\"},\n {\"id\":58,\"itemName\":\"s3:x-amz-server-side-encryption-aws-kms-key-id\"},\n {\"id\":59,\"itemName\":\"s3:x-amz-storage-class\"},\n {\"id\":60,\"itemName\":\"s3:x-amz-website-redirect-location\"}\n ];\n\n this.dropdownConditionKeySettings = {\n \t\tsingleSelection: true,\n \t\ttext:\"Select Condition Key\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true\n\t };\n }\n\n switchAdvanced(){\n if(this.advancedInterface){\n this.advancedInterface = false;\n this.advancedInterfaceLabel = \"Advanced\"\n }else{\n this.advancedInterface = true;\n this.advancedInterfaceLabel = \"Basic\"\n }\n }\n\n\tonActionItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedActions);\n\t}\n\tonActionItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedActions);\n\t}\n\tonActionSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonActionDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n\tonAdminItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedAdmins);\n\t}\n\tonAdminItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedAdmins);\n\t}\n\tonAdminSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonAdminDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n\n //condition select actions\n onConditionItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedCondition);\n\t}\n\tonConditionItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedCondition);\n\t}\n\tonConditionSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonConditionDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n //condition key select actions\n onConditionKeyItemSelect(item:any){\n console.log(item);\n console.log(this.selectedConditionKey);\n }\n onConditionKeyItemDeSelect(item:any){\n console.log(item);\n console.log(this.selectedConditionKey);\n }\n onConditionKeySelectAll(items: any){\n console.log(items);\n }\n onConditionKeyDeSelectAll(items: any){\n console.log(items);\n }\n\n\n searchItems() {\n console.log(this.searchText)\n const prev = this.mdbTable.getDataSource();\n\n if (!this.searchText) {\n this.mdbTable.setDataSource(this.previous);\n this.policies = this.mdbTable.getDataSource();\n }\n\n if (this.searchText) {\n this.policies = this.mdbTable.searchLocalDataBy(this.searchText);\n this.mdbTable.setDataSource(prev);\n }\n }\n\n ngAfterViewInit() {\n this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n this.mdbTablePagination.calculateFirstItemIndex();\n this.mdbTablePagination.calculateLastItemIndex();\n this.cdRef.detectChanges();\n }\n\n private resetPloicyForm(removeName){\n \tconsole.log(removeName);\n \tthis.selectedActions = [];\n \tthis.selectedAdmins = []\n \tif(!removeName){\n \t\tthis.newPolicy.effect = \"Allow\"\n\t\t this.newPolicy.bucket = \"\"\n \t}else{\n \t\tthis.newPolicy.name = \"\",\n \t\tthis.newPolicy.effect = \"Allow\"\n \t\tthis.newPolicy.bucket = \"\"\n \t}\n\n this.newStatement = {\n Action: [],\n Effect: \"\",\n Resource: [],\n Condition: {},\n Principal: \"\"\n }\n\n }\n\n private getPolicies(){\n \tthis.apiService.getPolicies().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n this.policiesRaw = data;\n const arrayOfPolicies = Object.entries(data).map((e) => ( { [e[0]]: e[1] } ));\n this.policies = arrayOfPolicies;\n this.mdbTable.setDataSource(arrayOfPolicies);\n console.log(arrayOfPolicies)\n this.previous = this.mdbTable.getDataSource();\n });\n }\n\n private deletePolicy(){\n \tthis.apiService.deletePolicy(this.policyToDelete).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n this.getPolicies();\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.policyToDelete+' has been deleted', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while deleting policy');\n }\n });\n }\n\n private downloadPolicy(jsonObj) {\n var theJSON = JSON.stringify(jsonObj);\n console.log(\"theJSON>>>>>>>>>>>\",theJSON);\n var uri = this.sanitizer.bypassSecurityTrustUrl(\"data:text/json;charset=UTF-8,\" + encodeURIComponent(theJSON));\n this.downloadJsonHref = uri;\n }\n\n private rawPrepare(obj){\n \tthis.rawView = obj;\n }\n\n private deletePolicyPrepare(policy){\n \tthis.policyToDelete = policy\n }\n\n private prepareNewPolicyRaw(){\n \tthis.newPolicyRaw = {\n\t \tVersion:\"2012-10-17\",\n\t \tStatement: []\n \t}\n }\n\n private removeCondition(valueId,keyName,conditionName){\n console.log(this.newStatement)\n console.log(valueId,keyName,conditionName)\n this.newStatement.Condition[conditionName][keyName].splice(valueId,1)\n }\n\n private addCondition(){\n console.log(this.selectedCondition[0].itemName)\n console.log(this.selectedConditionKey[0].itemName)\n console.log(this.newConditionValue)\n if(!this.newStatement.Condition){\n this.newStatement.Condition = {}\n }\n if(this.newStatement.Condition[this.selectedCondition[0].itemName]){\n if(this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName]){\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName].push(this.newConditionValue)\n }else{\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName] = []\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName].push(this.newConditionValue)\n }\n }else{\n this.newStatement.Condition[this.selectedCondition[0].itemName] = {}\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName] = []\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName].push(this.newConditionValue)\n }\n\n this.selectedCondition = []\n this.selectedConditionKey = []\n this.newConditionValue = \"\"\n console.log(this.newStatement.Condition)\n }\n\n\n private addStatement(){\n console.log(\"called add statement\");\n\n if(this.selectedActions.length>0){\n \tif(this.selectedActions.length == this.dropdownActionList.length){\n \t\tthis.newStatement.Action.push(\"s3:*\")\n \t}else{\n \t \tfor (var i = 0; i < this.selectedActions.length; i++) {\n \t \t\tthis.newStatement.Action.push(this.selectedActions[i].itemName)\n \t \t}\n \t }\n }else{\n if(this.selectedAdmins.length == this.dropdownAdminList.length){\n \t\tthis.newStatement.Action.push(\"admin:*\")\n \t}else{\n \t \tfor (var i = 0; i < this.selectedAdmins.length; i++) {\n \t \t\tthis.newStatement.Action.push(this.selectedAdmins[i].itemName)\n \t \t}\n \t }\n }\n \tthis.newStatement.Effect = this.newPolicy.effect\n\n \tconsole.log(this.newStatement)\n if(this.newStatement.Condition && Object.entries(this.newStatement.Condition).length === 0 && this.newStatement.Condition.constructor === Object){\n console.log(\"Condition removed cause empty\")\n delete this.newStatement.Condition\n }else{\n if(!this.newStatement.Principal || this.newStatement.Principal == \"\"){\n console.log(\"Principal set to * cause condition not empty\")\n this.newStatement.Principal = \"*\"\n }\n }\n\n \tthis.newPolicyRaw.Statement.push(this.newStatement);\n \tconsole.log(this.newPolicyRaw)\n\n \tthis.resetPloicyForm(false);\n }\n\n private editStatement(i){\n console.log(\"called Edit Statement\");\n\n this.newStatement = this.newPolicyRaw.Statement[i]\n this.newPolicy.effect = this.newPolicyRaw.Statement[i].Effect\n\n switch ((this.newStatement.Action[0]).substring(0, 3)) {\n case \"s3:\":\n if(this.newStatement.Action[0] == \"s3:*\"){\n for (var g = 0; g < this.dropdownActionList.length; g++) {\n this.selectedActions.push({\"id\":this.dropdownActionList[g].id,\"itemName\":this.dropdownActionList[g].itemName})\n }\n }else{\n for (var g = 0; g < this.newStatement.Action.length; g++) {\n this.selectedActions.push({\"id\":g,\"itemName\":this.newStatement.Action[g]})\n }\n }\n break;\n case \"adm\":\n if(this.newStatement.Action[0] == \"admin:*\"){\n for (var g = 0; g < this.dropdownAdminList.length; g++) {\n this.selectedAdmins.push({\"id\":this.dropdownAdminList[g].id,\"itemName\":this.dropdownAdminList[g].itemName})\n }\n }else{\n for (var g = 0; g < this.newStatement.Action.length; g++) {\n this.selectedAdmins.push({\"id\":g,\"itemName\":this.newStatement.Action[g]})\n }\n }\n break;\n }\n\n\n this.newStatement.Action = []\n this.newPolicyRaw.Statement.splice(i,1)\n }\n\n private addBucketStatement(){\n this.newStatement.Resource.push(\"arn:aws:s3:::\"+this.newPolicy.bucket)\n this.newPolicy.bucket = ''\n }\n\n private removeStatement(i){\n \tthis.newPolicyRaw.Statement.splice(i,1)\n }\n\n private removeBucketStatement(i){\n this.newStatement.Resource.splice(i,1)\n }\n\n private fileChanged(e) {\n console.log(\"eventTriggered\");\n\n this.uploadPolicyFile = e.target.files[0];\n this.uploadPolicyFileName = e.target.files[0].name;\n }\n\n private uploadPolicy(){\n let fileReader = new FileReader();\n fileReader.onload = (e) => {\n console.log(fileReader.result);\n let policyFileString = ((fileReader.result).toString()).replace(/\\n/g, ' ').replace(/\\r/g, ' ')\n this.apiService.addPolicy(this.uploadPolicyName,policyFileString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.newPolicy.name+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n this.getPolicies();\n });\n }\n fileReader.readAsText(this.uploadPolicyFile);\n }\n\n private resetUploadForm(){\n this.uploadFileInput.nativeElement.value = \"\";\n this.uploadPolicyFile;\n this.uploadPolicyName = \"\";\n this.uploadPolicyFileName = \"\";\n }\n\n private createPolicy(){\n \tconsole.log(this.newPolicy, this.newPolicyRaw)\n\n \tlet policyString = JSON.stringify(this.newPolicyRaw);\n\n \tthis.apiService.addPolicy(this.newPolicy.name,policyString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.newPolicy.name+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n this.getPolicies();\n });\n }\n\n private isEditMode(state){\n this.modalEditMode = state;\n if(state){\n this.modalCreateEditTitle = \"Edit policy\"\n this.modalCreateEditButtonText = \"Update\"\n }else{\n this.modalCreateEditTitle = \"Build up new policy\"\n this.modalCreateEditButtonText = \"Create\"\n }\n }\n\n private isNowCopyMode(){\n this.modalCreateEditTitle = \"Copy policy\"\n this.modalCreateEditButtonText = \"Copy\"\n }\n\n private updatePolicyPrepare(policy){\n this.policyToUpdate = policy\n this.prepareNewPolicyRaw()\n this.resetPloicyForm(false)\n this.newPolicy.name = policy;\n\n var oldPolicy = this.policiesRaw[policy]\n this.newPolicyRaw.Statement = oldPolicy.Statement;\n }\n\n}\n","export default \"
\\n\\t

Server statistics {{server.endpoint}}

\\n\\t
\\n\\t\\tView Raw JSON 
\\n\\t\\tminio version: {{server.version}}
\\n\\t\\tuptime: {{math.round(server.uptime/60)}} min.
\\n\\t\\tnetwork: {{server.network[server.endpoint]}}\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t

Storage

\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
TotalUsedStatePath
{{math.round((disk.totalspace/1024/1024/1024)*100)/100}} Gb{{math.round((disk.usedspace/1024/1024/1024)*100)/100}} Gb{{disk.state}}{{disk.path}}
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t

Disk usage info

\\n\\t\\t\\t
\\n\\t\\t\\t\\t

Last update: {{diskUsageInfo?.lastUpdate.split('T').join(' ').split('.')[0]}}

\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
Objects countObjects total sizeBuckets count
{{diskUsageInfo.objectsCount}}{{math.round((diskUsageInfo.objectsTotalSize/1024/1024/1024)*100)/100}} Gb{{diskUsageInfo.bucketsCount}}
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t
0\\\">\\n\\t\\t
\\n\\t\\t\\t

Bucket sizes chart

\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t
0\\\">\\n\\t\\t
\\n\\t \\t

Object sizes histogram

\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Raw Server Info

\\n
\\n
\\n \\t\\n
\\n \\n
\\n
\\n
\\n\";","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJwb2xpY2llcy5jb21wb25lbnQuc2NzcyJ9 */\";","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class EnvService {\n\n // The values that are defined here are the default values that can\n // be overridden by env.js\n\n // API url\n public apiBaseUrl = '';\n public apiMultiBackend = false;\n public apiBackends = '';\n\n constructor() {\n }\n\n}\n","export default \"
\\n\\t
\\n\\t
\\n\\t\\t

List of users

\\n\\t
\\n\\t
\\n\\t\\t\\n\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t \\n\\t\\t \\n\\t\\t
\\n\\t
\\n
\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t \\n\\t\\n\\t
User namePolicyStatusAction
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{objectKeys(users[key])}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{objectValues(users[key])[0].policyName}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t \\n\\t\\t \\t\\t\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n
\\n
\\n
\\n\\n\\n
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t

Remove User

\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\tAre you shure?
After you click on \\\"Delete\\\" button user {{userToDelete}} will be removed.\\n\\t\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n
\\n\\n\\n\\n
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t

Edit User

\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tInput invalid\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tInput valid\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t

\\n\\t\\t\\t\\t\\t\\tGenerate new secret\\n\\t\\t\\t\\t\\t

\\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n
\\n\\n\\n\\n
\\n
\\n\\t
\\n\\t
\\n\\t\\t

Create new user

\\n\\t\\t\\n\\t\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput invalid\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput valid\\n\\t\\t\\t \\n\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput invalid\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput valid\\n\\t\\t\\t \\n\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t

\\n\\t\\t\\t\\t\\tGenerate new access\\\\secret pair\\n\\t\\t\\t

\\n\\t\\t\\t
\\n\\t
\\n\\t \\n\\t
\\n
\\n
\\n\";","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { UsersComponent } from './users/users.component';\nimport { ServerComponent } from './server/server.component';\nimport { PoliciesComponent } from './policies/policies.component';\nimport { BucketsComponent } from './buckets/buckets.component';\nimport { GroupsComponent } from './groups/groups.component';\n\nconst routes: Routes = [\n\t{path:'users', component: UsersComponent},\n\t{path:'server', component: ServerComponent},\n\t{path:'policies', component: PoliciesComponent},\n\t{path:'groups', component: GroupsComponent},\n\t{path:'', component: BucketsComponent}\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Router } from \"@angular/router\";\nimport { EnvService } from './env.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n\n constructor(private httpClient: HttpClient, private router: Router, private env: EnvService) {\n if(env.apiBaseUrl) {\n console.log('apiBaseUrl', env.apiBaseUrl);\n }\n if(env.apiMultiBackend) {\n console.log('apiMultiBackend', env.apiMultiBackend);\n }\n if(env.apiBackends) {\n console.log('apiBackends', env.apiBackends);\n }\n\n }\n\n\n multiBackend = this.env.apiMultiBackend;\n backendsUrls = this.env.apiBackends;\n baseUrl = this.getCurrentBackend();\n\n private getCurrentBackend(){\n let envDefaultBackend = this.env.apiBaseUrl;\n if(this.multiBackend && this.multiBackend == true) {\n let savedBackend = localStorage.getItem('currentBackend');\n\n let activeBackend = \"\";\n\n if(savedBackend && savedBackend != \"\"){\n activeBackend = savedBackend;\n }else{\n activeBackend = envDefaultBackend;\n }\n return activeBackend;\n } else {\n return envDefaultBackend;\n }\n }\n\n public overrideBackend(newBackend){\n localStorage.setItem('currentBackend', newBackend);\n this.baseUrl = newBackend;\n\n this.router.onSameUrlNavigation = 'reload';\n this.router.routeReuseStrategy.shouldReuseRoute = function () {\n return false;\n };\n\n this.router.navigate([this.router.url])\n this.router.onSameUrlNavigation = 'ignore';\n }\n\n public getMultiBackendStatus(){\n return this.multiBackend;\n }\n\n public getBackendsUrls(){\n return this.backendsUrls;\n }\n\n public validateAuthInResponse(data){\n if(data != null && typeof data.oauth != \"undefined\" && typeof data.auth != \"undefined\" && data.oauth != false && data.auth != true){\n window.location.href = this.env.apiBaseUrl+'/auth/?state='+window.location.href;\n }\n }\n\n public serverInfo(){\n return this.httpClient.get(this.baseUrl+'/api/v2/server/common-info');\n }\n\n public diskInfo(){\n return this.httpClient.get(this.baseUrl+'/api/v2/server/disk-info');\n }\n\n public getUsers(){\n return this.httpClient.get(this.baseUrl+'/api/v2/users/list');\n }\n\n public addUser(access,secret){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('secretKey', secret);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/create', form)\n }\n\n public addUserExtended(access,secret,policy){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('secretKey', secret);\n form.append('policyName', policy);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/create-extended', form)\n }\n\n public updateUser(access,secret,policy,status){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('secretKey', secret);\n form.append('policyName', policy);\n form.append('status', status);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/update', form)\n }\n\n\n public setStatusUser(access,status){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('status', status);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/set-status', form)\n }\n\n public deleteUser(access){\n let form = new FormData();\n\n form.append('accessKey', access);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/delete', form)\n }\n\n public getPolicies(){\n return this.httpClient.get(this.baseUrl+'/api/v2/policies/list');\n }\n\n public deletePolicy(policy){\n let form = new FormData();\n\n form.append('policyName', policy);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/policy/delete', form)\n }\n\n public addPolicy(policyName, policyString){\n let form = new FormData();\n\n form.append('policyName', policyName);\n form.append('policyString', policyString);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/policy/create', form)\n }\n\n public getBuckets(){\n return this.httpClient.get(this.baseUrl+'/api/v2/buckets/list');\n }\n\n public getBucketsExtended(){\n return this.httpClient.get(this.baseUrl+'/api/v2/buckets/list-extended');\n }\n\n public enableNotificationForBucket(bucket, stsARN, eventTypes, filterPrefix, filterSuffix){\n //put,get,delete\n let form = new FormData();\n\n form.append('bucket', bucket);\n form.append('stsARN', stsARN);\n form.append('eventTypes', eventTypes);\n form.append('filterPrefix', filterPrefix);\n form.append('filterSuffix', filterSuffix);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-events', form)\n }\n\n public getBucketEvents(bucket){\n let form = new FormData();\n\n form.append('bucket', bucket);\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-events',form)\n }\n\n public removeBucketEvents(bucket){\n let form = new FormData();\n\n form.append('bucket', bucket);\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/remove-events',form)\n }\n\n public deleteBucket(bucket){\n let form = new FormData();\n\n form.append('bucketName', bucket);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/delete', form)\n }\n\n public createBucket(bucket){\n let form = new FormData();\n\n form.append('newBucket', bucket);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/create', form)\n }\n\n public getGroups(){\n return this.httpClient.get(this.baseUrl+'/api/v2/groups/list');\n }\n\n public updateMembersGroup(group,members,IsRemove){\n let form = new FormData();\n\n form.append('group', group);\n form.append('members', members);\n form.append('IsRemove', IsRemove);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/group/update-members', form);\n }\n\n public getGroupDescription(group){\n let form = new FormData();\n\n form.append('group', group);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/group/get-description', form);\n }\n\n public setStatusGroup(group,status){\n let form = new FormData();\n\n form.append('group', group);\n form.append('status', status);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/group/set-status', form);\n }\n\n public setPolicy(policyName,entityName,isGroup){\n let form = new FormData();\n\n form.append('policyName', policyName);\n form.append('entityName', entityName);\n form.append('isGroup', isGroup);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/policy/update', form);\n }\n\n public setLifecycle(bucketName,lifecycle){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('lifecycle', lifecycle);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-lifecycle', form);\n }\n\n\n public getLifecycle(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-lifecycle', form);\n }\n\n public checkAuthStatus(){\n return this.httpClient.get(this.baseUrl+'/auth/check');\n }\n\n public getBucketQuota(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-quota', form);\n }\n\n public setBucketQuota(bucketName, quotaType, quotaValue){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('quotaType', quotaType);\n form.append('quotaValue', quotaValue);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-quota', form);\n }\n\n public removeBucketQuota(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/remove-quota', form);\n }\n\n public setBucketTag(bucketName,tagsString){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('bucketTags', tagsString);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-tags', form);\n }\n\n public getBucketTag(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-tags', form);\n }\n\n public setBucketPolicy(bucketName,policyString){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('bucketPolicy', policyString);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-policy', form);\n }\n\n public getBucketPolicy(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-policy', form);\n }\n\n public getBucketEncryption(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-encryption', form);\n }\n\n public setBucketEncryption(bucketName, encType, encMasterKeyID){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('bucketEncryptionType', encType);\n form.append('kmsMasterKey', encMasterKeyID);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-encryption', form);\n }\n\n public removeBucketEncryption(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/remove-encryption', form);\n }\n\n\n}\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJhcHAuY29tcG9uZW50LnNjc3MifQ== */\";","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"zn8P\";"]} \ No newline at end of file +{"version":3,"sources":["webpack:///src/app/loader/loader.component.html","webpack:///src/app/loader.service.ts","webpack:///src/app/loader.interceptor.ts","webpack:///src/app/loader/loader.component.scss","webpack:///src/app/groups/groups.component.scss","webpack:///src/environments/environment.ts","webpack:///src/app/buckets/buckets.component.ts","webpack:///src/app/server/server.component.ts","webpack:///src/app/groups/groups.component.html","webpack:///src/app/app.component.ts","webpack:///src/app/server/server.component.scss","webpack:///src/app/app.component.html","webpack:///src/app/app.module.ts","webpack:///src/app/buckets/buckets.component.scss","webpack:///src/app/env.service.provider.ts","webpack:///src/app/users/users.component.scss","webpack:///src/app/groups/groups.component.ts","webpack:///src/app/filter.pipe.ts","webpack:///src/app/buckets/buckets.component.html","webpack:///src/app/loader/loader.component.ts","webpack:///src/app/policies/policies.component.html","webpack:///src/app/users/users.component.ts","webpack:///src/app/policies/policies.component.ts","webpack:///src/app/server/server.component.html","webpack:///src/app/policies/policies.component.scss","webpack:///src/app/env.service.ts","webpack:///src/app/users/users.component.html","webpack:///src/app/app-routing.module.ts","webpack:///src/app/api.service.ts","webpack:///src/app/app.component.scss","webpack:///src/main.ts","webpack:///$_lazy_route_resource lazy namespace object"],"names":["LoaderService","isError","isLoading","providedIn","LoaderInterceptor","loaderService","requests","req","i","indexOf","splice","next","length","clone","withCredentials","push","create","observer","subscription","handle","subscribe","event","removeRequest","err","error","complete","unsubscribe","environment","production","BucketsComponent","apiService","cdRef","toastr","sanitizer","math","Math","objectKeys","Object","keys","isNaN","Number","buckets","updateEncryptionTypeChanged","newBucketName","uiShowQuota","newBucketQuotaType","newBucketQuota","quotaTypes","newBucketEncryption","encryptionTypes","newBucketMasterKeyID","newBucketEventARN","updateBucketEventARN","updateBucketEventFilterPrefix","updateBucketEventFilterSuffix","updateBucketQuotaObj","updateBucketEncryptionObj","updateQuotaTypeChanged","updateQuotaChanged","newBucketPolicy","policyTypes","updatePolicyTypeChanged","dropdownEventTypesList","selectedEventTypes","dropdownEventTypesSettings","newBucketEventFilterPrefix","newBucketEventFilterSuffix","newBucketTagName","newBucketTagValue","newBucketTagsList","tagListChanged","downloadLifecycleAvailable","searchText","undefined","target","searchItems","getBuckets","getServerInfo","getDiskInfo","singleSelection","text","selectAllText","unSelectAllText","enableSearchFilter","classes","item","console","log","items","serverInfo","data","validateAuthInResponse","serviceInfo","diskInfo","diskUsageInfo","prev","mdbTable","getDataSource","setDataSource","previous","searchLocalDataBy","mdbTablePagination","setMaxVisibleItemsNumberTo","calculateFirstItemIndex","calculateLastItemIndex","detectChanges","getBucketsExtended","bucketName","bucketToDelete","bucketToRemoveNotifications","currentQuota","currentQtype","currentTags","editBucketName","getBucketTag","dataKeys","getBucketEncryption","dataVals","values","getBucketQuota","emptyData","quotatype","getBucketPolicy","bucketToRemoveQuota","bucketToRemoveEncryption","deleteBucket","success","JSON","stringify","resetUploadForm","e","uploadPolicyFile","files","uploadPolicyFileName","name","uploadFileInput","nativeElement","value","uploadPolicyName","updateListAfter","setBucketPolicy","fileReader","FileReader","onload","result","policyFileString","toString","replace","readAsText","bucketsArr","split","createBucketSimple","bucket","lifecycleBucketName","tagName","quotaType","quotaVal","enableNotificationForBucket","setTagsForBucket","setQuotaForBucket","setPolicy","setBucketEncryption","stsARN","eventTypes","filterPrefix","filterSuffix","eventTypesArr","itemName","join","reloadBucketList","setBucketQuota","removeBucketEvents","removeBucketQuota","removeBucketEncryption","encType","masterKeyID","eventARN","policy","encryption","numberOfBuckets","currentBucketNumber","createBucket","setTimeout","uploadLifecycleFile","uploadLifecycleFileName","uploadLifecycleName","getLifecycle","uri","bypassSecurityTrustUrl","encodeURIComponent","downloadJsonHref","lifecycleFileString","setLifecycle","tagsObj","tagsKeys","tagArr","tagString","setBucketTag","fileName","link","document","createElement","href","download","click","selector","template","ServerComponent","objectValues","rawView","bucketSizes","hgChartDatasets","label","hgChartLabels","hgChartType","hgChartColors","backgroundColor","borderColor","borderWidth","pointBackgroundColor","pointBorderColor","pointHoverBackgroundColor","pointHoverBorderColor","hgChartOptions","responsive","szChartDatasets","szChartLabels","szChartType","szChartColors","szChartOptions","hasOwnProperty","objectsSizesHistogram","histogramKeysRawArr","histogramValsRawArr","histogramLabel","bucketsSizes","objectBucketSizes","bucketSizesKeysRawArr","bucketSizesValsRawArr","obj","AppComponent","title","checkAuthStatus","AppModule","declarations","imports","forRoot","providers","provide","useClass","multi","bootstrap","EnvServiceFactory","env","browserWindow","window","browserWindowEnv","key","EnvServiceProvider","useFactory","deps","GroupsComponent","jsn","groups","groupsWithMembers","users","rawPolicies","groupToUpdate","newGroupName","newGroupPolicy","newGroupStatus","updateStatusValues","modalEditMode","usersToRemove","groupToDelete","dropdownList","selectedItems","dropdownSettings","isEditMode","isNowCopyMode","getGroups","getListOfUsers","getListOfPolicies","state","modalCreateEditTitle","modalCreateEditButtonText","arr","str","parse","atob","b64unpack","tempGroupName","getGroupDescription","getUsers","entries","map","group","tempMember","getPolicies","policies","updateMembersGroup","refreshList","setStatusGroup","updatePolicy","updateStatus","newMembers","wipeGroupMembers","FilterPipe","searchPolicy","toLocaleLowerCase","filter","it","includes","LoaderComponent","v","loading","UsersComponent","usersRaw","resetForm","updateUserFrom","charset","retVal","n","charAt","floor","random","updateUser","accessKeyUpdate","disabled","required","secretKeyUpdate","policyUpdate","statusUpdate","validatingForm","newUserAccess","generatePassword","minLength","newUserSecret","newUserPolicy","arrayOfUsers","userAccess","userSecret","userPolicy","addUserExtended","addUser","accessKey","status","setStatusUser","userToDelete","userToUpdate","patchValue","updatedSecret","updatedPolicy","updatedStatus","deleteUser","get","PoliciesComponent","policiesRaw","dropdownActionList","dropdownAdminList","dropdownConditionList","dropdownConditionKeyList","selectedActions","selectedAdmins","selectedCondition","selectedConditionKey","dropdownActionSettings","dropdownAdminSettings","dropdownConditionSettings","dropdownConditionKeySettings","advancedInterface","advancedInterfaceLabel","newPolicy","effect","newPolicyRaw","Version","Statement","newStatement","Action","Effect","Resource","Condition","Principal","newConditionValue","policyToUpdate","removeName","arrayOfPolicies","deletePolicy","policyToDelete","jsonObj","theJSON","valueId","keyName","conditionName","constructor","resetPloicyForm","substring","g","id","addPolicy","policyString","prepareNewPolicyRaw","oldPolicy","EnvService","apiBaseUrl","apiMultiBackend","apiBackends","routes","path","component","AppRoutingModule","exports","ApiService","httpClient","router","multiBackend","backendsUrls","baseUrl","getCurrentBackend","envDefaultBackend","savedBackend","localStorage","getItem","activeBackend","newBackend","setItem","onSameUrlNavigation","routeReuseStrategy","shouldReuseRoute","navigate","url","oauth","auth","location","access","secret","form","FormData","append","post","policyName","members","IsRemove","entityName","isGroup","lifecycle","quotaValue","tagsString","encMasterKeyID","bootstrapModule","webpackEmptyAsyncContext","Promise","resolve","then","Error","code","module"],"mappings":"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","file":"main-es5.js","sourcesContent":["export default \"
\\n\\t
\\n\\t
\\n\\t
\\n\\n\\t
\\n\\t\\t
\\n\\t\\t Loading...\\n\\t\\t
\\n\\t
\\n
\\n\\n
\\n\\t
\\n\\t\\t\\n\\t\\t
\\n\\t\\t
\\n\\t\\tSeems backend unreachable\\n\\t
\\n
\\n\";","//loader.service.ts\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LoaderService {\n public isError = false\n public isLoading = new BehaviorSubject(false);\n constructor() { }\n}\n","// loader.interceptors.ts\nimport { Injectable } from '@angular/core';\nimport {\n HttpErrorResponse,\n HttpResponse,\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpInterceptor\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { LoaderService } from './loader.service';\n\n@Injectable()\nexport class LoaderInterceptor implements HttpInterceptor {\n private requests: HttpRequest[] = [];\n\n constructor(private loaderService: LoaderService) { }\n\n removeRequest(req: HttpRequest) {\n const i = this.requests.indexOf(req);\n if (i >= 0) {\n this.requests.splice(i, 1);\n }\n this.loaderService.isLoading.next(this.requests.length > 0);\n }\n\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\n req = req.clone({\n withCredentials: true\n });\n this.requests.push(req);\n this.loaderService.isLoading.next(true);\n this.loaderService.isError = false;\n return Observable.create(observer => {\n const subscription = next.handle(req)\n .subscribe(\n event => {\n if (event instanceof HttpResponse) {\n this.removeRequest(req);\n observer.next(event);\n }\n },\n err => {\n this.loaderService.isError = true;\n this.removeRequest(req);\n observer.error(err);\n },\n () => {\n this.removeRequest(req);\n observer.complete();\n });\n // remove request from queue when cancelled\n return () => {\n this.removeRequest(req);\n subscription.unsubscribe();\n };\n });\n }\n}\n","export default \"dialog {\\n width: 300px;\\n}\\n\\ndialog::-webkit-backdrop {\\n background: rgba(0, 0, 0, 0.7);\\n}\\n\\ndialog::backdrop {\\n background: rgba(0, 0, 0, 0.7);\\n}\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xvYWRlci5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNJLFlBQUE7QUFDSjs7QUFDRztFQUNDLDhCQUFBO0FBRUo7O0FBSEc7RUFDQyw4QkFBQTtBQUVKIiwiZmlsZSI6ImxvYWRlci5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbImRpYWxvZyB7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgfVxuICAgZGlhbG9nOjpiYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjcpO1xuICAgfSJdfQ== */\";","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJncm91cHMuY29tcG9uZW50LnNjc3MifQ== */\";","export const environment = {\n production: false\n};\n","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl} from '@angular/platform-browser';\nimport { ApiService } from '../api.service';\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n\n\n@Component({\n selector: 'app-buckets',\n templateUrl: './buckets.component.html',\n styleUrls: ['./buckets.component.scss']\n})\nexport class BucketsComponent implements OnInit, AfterViewInit {\n math = Math;\n objectKeys = Object.keys;\n isNaN: Function = Number.isNaN;\n buckets = {};\n bucketToDelete;\n bucketToRemoveNotifications;\n bucketToRemoveQuota;\n bucketToRemoveEncryption;\n updateEncryptionTypeChanged = false;\n editBucketName;\n newBucketName = \"\";\n uiShowQuota = false;\n newBucketQuotaType = \"\";\n newBucketQuota = \"\";\n quotaTypes = [\"fifo\", \"hard\"];\n serviceInfo;\n diskUsageInfo;\n newBucketEncryption = \"\";\n encryptionTypes = [\"sse-s3\", \"sse-kms\"];\n newBucketMasterKeyID = \"\";\n newBucketEventARN = \"\";\n updateBucketEventARN = \"\";\n updateBucketEventFilterPrefix = \"\";\n updateBucketEventFilterSuffix = \"\";\n updateBucketQuotaObj = {};\n updateBucketEncryptionObj = {};\n updateQuotaTypeChanged = false;\n updateQuotaChanged = false;\n\n newBucketPolicy = \"none\";\n // updateBucketPolicy = \"none\"\n policyTypes = [\"none\", \"upload\", \"download\", \"public\", \"custom\"];\n updatePolicyTypeChanged = false;\n uploadPolicyName;\n uploadPolicyFile;\n uploadPolicyFileName;\n\n dropdownEventTypesList = [];\n selectedEventTypes = [];\n dropdownEventTypesSettings = {};\n newBucketEventFilterPrefix = \"\";\n newBucketEventFilterSuffix = \"\";\n newBucketTagName = \"\";\n newBucketTagValue = \"\";\n newBucketTagsList = {};\n\n tagListChanged = false;\n\n uploadLifecycleName;\n uploadLifecycleFile;\n uploadLifecycleFileName;\n lifecycleBucketName;\n downloadJsonHref;\n downloadLifecycleAvailable = 0;\n\n @ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n @ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n previous: string;\n\n searchText: string = '';\n\n constructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService, private sanitizer: DomSanitizer) { }\n\n @HostListener('input') oninput() {\n if(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n this.searchItems();\n }\n }\n\n @ViewChild('uploadLifecycleFile', { static: true })\n uploadFileInput: any;\n\n ngOnInit() {\n \tthis.getBuckets()\n this.getServerInfo()\n this.getDiskInfo()\n\n this.dropdownEventTypesList = [\n\t {\"id\":1,\"itemName\":\"put\"},\n\t {\"id\":2,\"itemName\":\"get\"},\n\t {\"id\":3,\"itemName\":\"delete\"},\n ];\n\n this.dropdownEventTypesSettings = {\n \t\tsingleSelection: false,\n \t\ttext:\"Select Event Types\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true,\n classes: \"dropdownFix\"\n\t };\n }\n\n //condition select actions\n onEventTypesItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedEventTypes);\n\t}\n\tonEventTypesItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedEventTypes);\n\t}\n\tonEventTypesSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonEventTypesDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n private toggleShowQuota(){\n (this.uiShowQuota) ? this.uiShowQuota = false : this.uiShowQuota = true;\n }\n\n // private toggleUpdateShowQuota(){\n // (this.updateUiShowQuota) ? this.updateUiShowQuota = false : this.updateUiShowQuota = true;\n // }\n\n private getServerInfo(){\n this.apiService.serverInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.serviceInfo = data;\n });\n }\n\n private getDiskInfo(){\n \tthis.apiService.diskInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.diskUsageInfo = data;\n });\n }\n\n private searchItems() {\n const prev = this.mdbTable.getDataSource();\n\n if (!this.searchText) {\n this.mdbTable.setDataSource(this.previous);\n this.buckets = this.mdbTable.getDataSource();\n }\n\n if (this.searchText) {\n this.buckets = this.mdbTable.searchLocalDataBy(this.searchText);\n this.mdbTable.setDataSource(prev);\n }\n }\n\n ngAfterViewInit() {\n this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n this.mdbTablePagination.calculateFirstItemIndex();\n this.mdbTablePagination.calculateLastItemIndex();\n this.cdRef.detectChanges();\n }\n\n private getBuckets(){\n \tthis.apiService.getBucketsExtended().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(\"BUCKETS >>>>>>\",data);\n if(data!==null){\n this.buckets = data;\n }else{\n this.buckets = {};\n }\n this.mdbTable.setDataSource(this.buckets);\n this.previous = this.mdbTable.getDataSource();\n });\n }\n\n private deleteBucketPrepare(bucketName){\n \tthis.bucketToDelete = bucketName;\n }\n\n private removeBucketNotificationPrepare(bucketName){\n \tthis.bucketToRemoveNotifications = bucketName;\n }\n\n private updateBucketPrepare(bucketName, currentQuota, currentQtype, currentTags){\n this.editBucketName = bucketName;\n\n this.apiService.getBucketTag(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n\n var dataKeys = Object.keys(data);\n console.log(dataKeys[0]);\n if(dataKeys[0]!=\"error\"){\n this.newBucketTagsList = data;\n }\n });\n\n this.apiService.getBucketEncryption(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n\n var dataKeys = Object.keys(data);\n console.log(\"Bucket Encryption >>\",dataKeys[1]);\n if(dataKeys[1]==\"Rules\"){\n this.updateBucketEncryptionObj = data;\n var dataVals = Object.values(data);\n console.log(\"Enc datavals\", dataVals[1][0]['Apply']['KmsMasterKeyID'])\n if(dataVals[1][0]['Apply']['KmsMasterKeyID'] == \"\"){\n this.updateBucketEncryptionObj = \"sse-s3\"\n }else{\n this.updateBucketEncryptionObj = \"sse-kms\"\n }\n }else{\n this.updateBucketEncryptionObj = \"\";\n }\n });\n\n this.apiService.getBucketQuota(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n\n var dataKeys = Object.keys(data);\n console.log(dataKeys[0]);\n if(dataKeys[0]!=\"error\"){\n this.updateBucketQuotaObj = data;\n }else{\n var emptyData = {\n quotatype: \"\"\n };\n this.updateBucketQuotaObj = emptyData;\n }\n });\n\n this.apiService.getBucketPolicy(bucketName).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(Object.keys(data));\n console.log(data);\n this.newBucketPolicy = data[\"name\"];\n });\n }\n\n private deleteBucketQuotaPrepare(bucketName){\n this.bucketToRemoveQuota = bucketName;\n }\n\n private updateQuotaType(){\n this.updateQuotaTypeChanged = true;\n }\n\n private updatePolicyType(){\n this.updatePolicyTypeChanged = true;\n }\n\n private updateEncryptionType(){\n this.updateEncryptionTypeChanged = true;\n }\n\n private updateQuota(){\n this.updateQuotaChanged = true;\n }\n\n private deleteBucketEncryptionPrepare(bucketName){\n this.bucketToRemoveEncryption = bucketName;\n }\n\n private deleteBucket(){\n \tthis.apiService.deleteBucket(this.bucketToDelete).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Bucket has been deleted', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while deleting bucket');\n }\n this.getBuckets();\n });\n }\n\n private resetForm(){\n \tthis.newBucketName = \"\";\n this.newBucketEventARN = \"\";\n this.newBucketEncryption = \"\";\n this.newBucketMasterKeyID = \"\";\n this.updateEncryptionTypeChanged = false;\n this.newBucketEventFilterPrefix = \"\";\n this.newBucketEventFilterSuffix = \"\";\n this.selectedEventTypes = [];\n this.newBucketQuotaType = \"\";\n this.newBucketPolicy = \"none\";\n this.newBucketQuota = \"\";\n this.newBucketTagName = \"\";\n this.newBucketTagValue = \"\";\n this.newBucketTagsList = {};\n this.updatePolicyTypeChanged = false;\n this.tagListChanged = false;\n this.resetUploadForm();\n }\n\n private resetUpdateForm() {\n this.updateBucketEventARN = \"\";\n this.newBucketEncryption = \"\";\n this.newBucketMasterKeyID = \"\";\n this.updateEncryptionTypeChanged = false;\n this.selectedEventTypes = [];\n this.updateBucketEventFilterPrefix = \"\";\n this.updateBucketEventFilterSuffix = \"\";\n this.updateBucketQuotaObj = {};\n this.updateBucketEncryptionObj = \"\";\n this.updateQuotaTypeChanged = false;\n this.updateQuotaChanged = false;\n this.tagListChanged = false;\n this.updatePolicyTypeChanged = false;\n this.resetUploadForm();\n }\n\n private filePolicyChanged(e) {\n console.log(\"file event\");\n\n this.uploadPolicyFile = e.target.files[0];\n this.uploadPolicyFileName = e.target.files[0].name;\n }\n\n private resetUploadForm(){\n this.uploadFileInput.nativeElement.value = \"\";\n this.uploadPolicyFile;\n this.uploadPolicyName = \"\";\n this.uploadPolicyFileName = \"\";\n }\n\n private setPolicy(bucketName, updateListAfter){\n if(this.newBucketPolicy!=\"custom\"){\n this.apiService.setBucketPolicy(bucketName, this.newBucketPolicy).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.newBucketPolicy+' has been append to '+bucketName, 'Success');\n if(updateListAfter){\n this.getBuckets();\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n });\n } else {\n let fileReader = new FileReader();\n fileReader.onload = (e) => {\n console.log(\"Policy>>>>\",fileReader.result);\n\n let policyFileString = ((fileReader.result).toString()).replace(/\\n/g, ' ').replace(/\\r/g, ' ')\n console.log(\"Policy2>>>>\",policyFileString);\n this.apiService.setBucketPolicy(bucketName, policyFileString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy custom has been append to '+bucketName, 'Success');\n if(updateListAfter){\n this.getBuckets();\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n });\n\n }\n fileReader.readAsText(this.uploadPolicyFile);\n }\n }\n\n\n private createBucket(){\n \tif(this.newBucketName.indexOf(',')>-1){\n \t\tvar bucketsArr = this.newBucketName.split(',')\n \t\tfor (var i = 0; i < bucketsArr.length; i++) {\n \t\t\tif(bucketsArr[i]!=''){\n \t\t\t\tthis.createBucketSimple(bucketsArr[i],this.newBucketEventARN,this.newBucketQuotaType,this.newBucketQuota,this.newBucketPolicy,this.newBucketEncryption,this.newBucketMasterKeyID, bucketsArr.length,i+1)\n \t\t\t}\n \t\t}\n \t}else{\n \t\tthis.createBucketSimple(this.newBucketName,this.newBucketEventARN,this.newBucketQuotaType,this.newBucketQuota,this.newBucketPolicy,this.newBucketEncryption,this.newBucketMasterKeyID,1,1)\n \t}\n }\n\n private bucketLifecycle(bucket){\n this.lifecycleBucketName = bucket;\n }\n\n private createFormAddTag() {\n if(this.newBucketTagName != \"\" && this.newBucketTagValue != \"\"){\n this.newBucketTagsList[this.newBucketTagName] = this.newBucketTagValue;\n this.newBucketTagName = \"\";\n this.newBucketTagValue = \"\";\n this.tagListChanged = true;\n }\n }\n\n private createFormRemoveTag(tagName) {\n delete this.newBucketTagsList[tagName];\n this.tagListChanged = true;\n }\n\n private updateBucket(quotaType, quotaVal) {\n if(this.updateBucketEventARN != \"\"){\n this.enableNotificationForBucket(this.editBucketName, this.updateBucketEventARN, this.selectedEventTypes, this.updateBucketEventFilterPrefix, this.updateBucketEventFilterSuffix, true)\n }\n\n if(this.tagListChanged){\n this.setTagsForBucket(this.editBucketName,true)\n }\n\n if(this.updateQuotaTypeChanged || this.updateQuotaChanged){\n this.setQuotaForBucket(this.editBucketName, quotaType, quotaVal, true)\n }\n\n if(this.updatePolicyTypeChanged){\n this.setPolicy(this.editBucketName, true)\n }\n\n if(this.updateEncryptionTypeChanged){\n this.setBucketEncryption(this.editBucketName, this.updateBucketEncryptionObj, this.newBucketMasterKeyID, true)\n }\n }\n\n private enableNotificationForBucket(bucket, stsARN, eventTypes, filterPrefix, filterSuffix, updateListAfter){\n var eventTypesArr = []\n for (var i = 0; i < eventTypes.length; i++) {\n eventTypesArr.push(eventTypes[i].itemName)\n }\n this.apiService.enableNotificationForBucket(bucket, stsARN, eventTypesArr.join(','), filterPrefix, filterSuffix).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Events for bucket: '+bucket+' has been enabled', 'Success');\n if(updateListAfter){\n this.getBuckets();\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while enabling events for bucket'+bucket );\n }\n });\n }\n\n private setQuotaForBucket(bucket, quotaType, quotaVal, reloadBucketList){\n this.apiService.setBucketQuota(bucket, quotaType, quotaVal).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Quota for bucket '+bucket+' has been set', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while set quota for bucket');\n }\n if(reloadBucketList){\n this.getBuckets();\n }\n });\n }\n\n private removeBucketEvents(){\n var bucket = this.bucketToRemoveNotifications;\n this.apiService.removeBucketEvents(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Events for bucket '+bucket+' has been removed', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while removing bucket events');\n }\n this.getBuckets();\n });\n }\n\n private removeBucketQuota(){\n var bucket = this.bucketToRemoveQuota;\n this.apiService.removeBucketQuota(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Quota for bucket '+bucket+' has been removed', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while removing bucket quota');\n }\n this.getBuckets();\n });\n }\n\n private removeBucketEncryption(){\n var bucket = this.bucketToRemoveEncryption;\n this.apiService.removeBucketEncryption(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Encryption for bucket '+bucket+' has been removed', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while removing bucket encryption');\n }\n this.getBuckets();\n });\n }\n\n\n private setBucketEncryption(bucket, encType, masterKeyID, reloadBucketList){\n this.apiService.setBucketEncryption(bucket, encType, masterKeyID).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Encryption for bucket '+bucket+' has been set', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while set encryption for bucket');\n }\n if(reloadBucketList){\n this.getBuckets();\n }\n });\n }\n\n\n\n private createBucketSimple(bucket, eventARN, quotaType, quotaVal, policy, encryption, masterKeyID, numberOfBuckets, currentBucketNumber){\n \tthis.apiService.createBucket(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Bucket: '+bucket+' has been created', 'Success');\n if(eventARN != \"\"){\n this.enableNotificationForBucket(bucket, eventARN, this.selectedEventTypes, this.newBucketEventFilterPrefix, this.newBucketEventFilterSuffix, false);\n }\n if(quotaType != \"\" && quotaVal != \"\" && quotaVal >= 0){\n this.setQuotaForBucket(bucket, quotaType, quotaVal, false);\n }\n if(Object.keys(this.newBucketTagsList).length > 0){\n this.setTagsForBucket(bucket, false)\n }\n if(this.updatePolicyTypeChanged){\n this.setPolicy(bucket, false)\n }\n if(encryption != \"\"){\n this.setBucketEncryption(bucket, encryption, masterKeyID, false)\n }\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating bucket');\n }\n if(numberOfBuckets == currentBucketNumber){\n setTimeout(()=>{\n this.getBuckets();\n }, 500);\n }\n });\n }\n\n private fileChanged(e) {\n console.log(\"eventTriggered\");\n\n this.uploadLifecycleFile = e.target.files[0];\n this.uploadLifecycleFileName = e.target.files[0].name;\n }\n\n private resetLifecycleForm(){\n this.uploadFileInput.nativeElement.value = \"\";\n this.uploadLifecycleFile;\n this.uploadLifecycleName = \"\";\n this.uploadLifecycleFileName = \"\";\n this.downloadLifecycleAvailable = 0;\n }\n\n private downloadLifecycle(bucket) {\n this.apiService.getLifecycle(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n // console.log(bucket, data);\n if(data[\"error\"]){\n this.toastr.error(JSON.stringify(data), 'Error while getting lifecycle');\n }else{\n if(data==\"\"){\n // this.toastr.error(\"Bucket has no lifecycle\", 'Error while getting lifecycle');\n }else{\n this.downloadLifecycleAvailable = 1;\n console.log(\"Lifecycle>>>>\",JSON.stringify(data));\n\n var uri = this.sanitizer.bypassSecurityTrustUrl(\"data:text/json;charset=UTF-8,\" + encodeURIComponent(JSON.stringify(data)));\n this.downloadJsonHref = uri;\n }\n }\n });\n }\n\n private uploadLifecycle(){\n let fileReader = new FileReader();\n fileReader.onload = (e) => {\n let lifecycleFileString = ((fileReader.result).toString()).replace(/\\n/g, ' ').replace(/\\r/g, ' ')\n this.apiService.setLifecycle(this.lifecycleBucketName,lifecycleFileString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Lifecycyle has been uploaded for bucket: '+this.lifecycleBucketName+'', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while uploading lifecycyle');\n }\n });\n }\n fileReader.readAsText(this.uploadLifecycleFile);\n }\n\n private setTagsForBucket(bucket,reloadBucketList){\n var tagsObj = this.newBucketTagsList;\n var tagsKeys = this.objectKeys(tagsObj);\n var tagArr = [];\n for (let i = 0; i < tagsKeys.length; i++) {\n var tagString = tagsKeys[i]+\"=\"+tagsObj[tagsKeys[i]]\n tagArr.push(tagString)\n }\n var tagString = tagArr.join(\"&\");\n console.log(\"TAG STRING >>>>\", tagString)\n this.apiService.setBucketTag(bucket, tagString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n if(data[\"Success\"]){\n this.toastr.success('Tags for bucket '+bucket+' has been set', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while set tags for bucket');\n }\n if(reloadBucketList){\n this.getBuckets();\n }\n });\n }\n\n private downloadPolicy(bucket,fileName) {\n this.apiService.getBucketPolicy(bucket).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(\"download policy >>> \", bucket, data);\n if(data[\"error\"]){\n this.toastr.error(JSON.stringify(data), 'Error while getting policy');\n }else{\n if(data==\"\"){\n this.toastr.error(\"Bucket has no policy\", 'Error while getting policy');\n }else{\n var link = document.createElement('a');\n link.href = \"data:text/json;charset=UTF-8,\" + encodeURIComponent(data[\"policy\"].toString());\n link.download = fileName\n link.click();\n }\n }\n });\n }\n\n\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ApiService } from '../api.service';\n\n@Component({\n selector: 'app-server',\n templateUrl: './server.component.html',\n styleUrls: ['./server.component.scss']\n})\nexport class ServerComponent implements OnInit {\n\n objectKeys = Object.keys;\n objectValues = Object.values;\n math = Math;\n rawView = '';\n serviceInfo;\n diskUsageInfo;\n bucketSizes=[];\n hgChartDatasets=[{data: [], label: 'Number of objects'}];\n hgChartLabels=[];\n hgChartType = 'radar';\n hgChartColors = [\n {\n backgroundColor: 'rgba(151,187,205,0.9)',\n borderColor: 'rgba(151,187,205,1)',\n borderWidth: 2,\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: '#fff',\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderColor: 'rgba(151,187,205,1)'\n }\n ];\n hgChartOptions = {\n responsive: true\n };\n\n szChartDatasets=[{data: [], label: 'Size of bucket in Bytes'}];\n szChartLabels=[];\n szChartType = 'bar';\n szChartColors = [\n {\n backgroundColor: 'rgba(151,187,205,0.9)',\n borderColor: 'rgba(151,187,205,1)',\n borderWidth: 2,\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: '#fff',\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderColor: 'rgba(151,187,205,1)'\n }\n ];\n szChartOptions = {\n responsive: true\n };\n\n constructor(private apiService: ApiService) { }\n\n ngOnInit() {\n \tthis.serverInfo()\n this.diskInfo()\n }\n\n public hgChartClicked(e: any): void {\n }\n\n public hgChartHovered(e: any): void {\n }\n\n public szChartClicked(e: any): void {\n }\n\n public szChartHovered(e: any): void {\n }\n\n private serverInfo(){\n \tthis.apiService.serverInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.serviceInfo = data;\n });\n }\n\n private diskInfo(){\n \tthis.apiService.diskInfo().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(\"Disk Usage >>>>>>>>>>>>\",data);\n this.diskUsageInfo = data;\n if(data.hasOwnProperty('objectsSizesHistogram')){\n var objectsSizesHistogram = this.diskUsageInfo.objectsSizesHistogram;\n var histogramKeysRawArr = [];\n var histogramValsRawArr = [];\n if(objectsSizesHistogram){\n histogramKeysRawArr = Object.keys(objectsSizesHistogram)\n histogramValsRawArr = Object.values(objectsSizesHistogram)\n }\n this.hgChartDatasets[0].data = histogramValsRawArr;\n\n this.hgChartLabels = [];\n for (let i = 0; i < histogramKeysRawArr.length; i++) {\n var histogramLabel = histogramKeysRawArr[i].split('_').join(' ');\n this.hgChartLabels.push(histogramLabel)\n }\n }\n\n if(data.hasOwnProperty('bucketsSizes') && this.diskUsageInfo.bucketsSizes != {} && this.diskUsageInfo.bucketsSizes != null ){\n var objectBucketSizes = this.diskUsageInfo.bucketsSizes;\n const bucketSizesKeysRawArr = Object.keys(objectBucketSizes)\n const bucketSizesValsRawArr = Object.values(objectBucketSizes)\n this.szChartDatasets[0].data = bucketSizesValsRawArr;\n this.szChartLabels= bucketSizesKeysRawArr;\n }\n });\n }\n\n private rawPrepare(obj){\n this.rawView = obj;\n }\n\n}\n","export default \"
\\n
\\n
\\n

Groups

\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n\\t\\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\t \\n\\t \\n\\t \\n \\n \\n \\n \\n \\n\\t
NamePolicyStatusMembersOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{groups[i].name}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{groups[i].policy}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{groups[i].status}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n
    \\n
  • {{member}}
  • \\n
\\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t \\t \\t\\n\\t \\t \\t\\n\\t \\t \\t 0\\\" mdbTooltip=\\\"You can delete only groups whit no memebers\\\" placement=\\\"top\\\">\\n\\t \\t
\\n \\n
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

{{modalCreateEditTitle}}

\\n
\\n
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t \\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t
\\n \\t\\t\\t\\t \\n \\t\\t\\t\\t
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Group

\\n
\\n
\\n Are you shure?
After you click on \\\"Delete\\\" button group {{groupToDelete}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Raw Policy

\\n
\\n
\\n \\t\\n
\\n \\n
\\n
\\n
\\n\";","import { Component, OnInit } from '@angular/core';\nimport { ApiService } from './api.service';\nimport { environment } from './../environments/environment';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent implements OnInit {\n title = 'Adminio-UI';\n\n constructor(private apiService: ApiService) { }\n\n ngOnInit() {\n \tthis.checkAuthStatus()\n }\n\n private checkAuthStatus(){\n this.apiService.checkAuthStatus().subscribe((data)=>{\n console.log(\"DATA AUTH>>>\", data);\n this.apiService.validateAuthInResponse(data)\n });\n }\n}\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzZXJ2ZXIuY29tcG9uZW50LnNjc3MifQ== */\";","export default \"\\n\\n\\n\\n \\n Adminio UI \\n\\n \\n \\n\\n \\n \\n \\n \\n
\\n \\n \\n\\t\\t\\t\\t\\t\\n
\\n
\\n \\n\\n
\\n\\n\\n\\n\\n\\n\\n\\n\\n\";","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { MDBBootstrapModule } from 'angular-bootstrap-md';\nimport { UsersComponent } from './users/users.component';\nimport { FormsModule, FormControl, FormGroup, Validators, ReactiveFormsModule} from \"@angular/forms\";\nimport { ServerComponent } from './server/server.component';\nimport { FilterPipe } from './filter.pipe';\nimport { PoliciesComponent } from './policies/policies.component';\nimport { NgxJsonViewerModule } from 'ngx-json-viewer';\nimport { AngularMultiSelectModule } from 'angular2-multiselect-dropdown';\nimport { LoaderComponent } from './loader/loader.component';\nimport { LoaderService } from './loader.service';\nimport { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from '@angular/common/http';\nimport { LoaderInterceptor } from './loader.interceptor';\nimport { BucketsComponent } from './buckets/buckets.component';\nimport { CommonModule } from '@angular/common';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { ToastrModule } from 'ngx-toastr';\nimport { GroupsComponent } from './groups/groups.component';\nimport { EnvServiceProvider } from './env.service.provider';\n\n\n\n@NgModule({\n declarations: [\n AppComponent,\n UsersComponent,\n ServerComponent,\n FilterPipe,\n PoliciesComponent,\n LoaderComponent,\n BucketsComponent,\n GroupsComponent,\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n MDBBootstrapModule.forRoot(),\n HttpClientModule,\n ReactiveFormsModule,\n NgxJsonViewerModule,\n AngularMultiSelectModule,\n FormsModule,\n CommonModule,\n BrowserAnimationsModule,\n ToastrModule.forRoot()\n ],\n providers: [\n EnvServiceProvider,\n LoaderService,\n { provide: HTTP_INTERCEPTORS, useClass: LoaderInterceptor, multi: true }\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJidWNrZXRzLmNvbXBvbmVudC5zY3NzIn0= */\";","import { EnvService } from './env.service';\n\nexport const EnvServiceFactory = () => {\n // Create env\n const env = new EnvService();\n\n // Read environment variables from browser window\n const browserWindow = window || {};\n const browserWindowEnv = browserWindow['__env'] || {};\n\n // Assign environment variables from browser window to env\n // In the current implementation, properties from env.js overwrite defaults from the EnvService.\n // If needed, a deep merge can be performed here to merge properties instead of overwriting them.\n for (const key in browserWindowEnv) {\n if (browserWindowEnv.hasOwnProperty(key)) {\n env[key] = window['__env'][key];\n }\n }\n\n return env;\n};\n\nexport const EnvServiceProvider = {\n provide: EnvService,\n useFactory: EnvServiceFactory,\n deps: [],\n};\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJ1c2Vycy5jb21wb25lbnQuc2NzcyJ9 */\";","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { ApiService } from '../api.service';\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n\n@Component({\n\tselector: 'app-groups',\n\ttemplateUrl: './groups.component.html',\n\tstyleUrls: ['./groups.component.scss']\n})\n\nexport class GroupsComponent implements OnInit, AfterViewInit {\n\tobjectKeys = Object.keys;\n\tjsn = JSON;\n\tgroups = {};\n\tgroupsWithMembers = [];\n\tusers = {};\n\trawPolicies = {};\n\tgroupToUpdate = {};\n\tnewGroupName = \"\";\n\tnewGroupPolicy = \"\";\n\tnewGroupStatus = \"\";\n\tpolicies;\n\tupdateStatusValues = ['enabled','disabled'];\n\tmodalCreateEditTitle;\n\tmodalCreateEditButtonText;\n\tmodalEditMode = false;\n\trawView = \"\";\n\tusersToRemove = [];\n\tgroupToDelete = \"\";\n\n\n\n\tdropdownList = [];\n\tselectedItems = [];\n\tdropdownSettings = {};\n\n\n\n\t@ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n\t@ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n\n\tprevious: string;\n\tsearchText: string = '';\n\n \tconstructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService) { }\n\n \t@HostListener('input') oninput() {\n\t\tif(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n\t\t this.searchItems();\n\t\t}\n\t\tif(event && event['target'] !== undefined && event.target[\"name\"] !== undefined && event.target[\"name\"] == \"newGroupName\"){\n\t if(this.modalEditMode){\n\t if(this.newGroupName == this.groupToUpdate[\"name\"]){\n\t console.log('hit')\n\t this.isEditMode(true)\n\t }else{\n\t this.isNowCopyMode();\n\t }\n\t }\n\t }\n\t}\n\n\tngOnInit() {\n\t\tthis.getGroups()\n\t\tthis.getListOfUsers()\n\t\tthis.getListOfPolicies()\n\t\tthis.isEditMode(false)\n\n\t\tthis.dropdownList = [\n\t\t {\"id\":1,\"itemName\":\"wait! i'm getting policies ASAP\"}\n\t ];\n\n\t this.dropdownSettings = {\n\t\t\tsingleSelection: false,\n\t\t\ttext:\"Select Members\",\n\t\t\tselectAllText:'Select All',\n\t\t\tunSelectAllText:'UnSelect All',\n\t\t\tenableSearchFilter: true\n\t\t};\n\t}\n\n\tonItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedItems);\n\t}\n\tOnItemDeSelect(item:any){\n\t\tthis.usersToRemove.push(item[\"itemName\"])\n\t console.log(item);\n\t console.log(this.selectedItems);\n\t}\n\tonSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonDeSelectAll(items: any){\n\n\t\t\tfor (let i = 0; i < this.selectedItems.length; i++) {\n\t\t\t\tthis.usersToRemove.push(this.selectedItems[i][\"itemName\"])\n\t\t\t}\n\n\t this.selectedItems = [];\n\t}\n\n\tprivate searchItems() {\n\t\tconst prev = this.mdbTable.getDataSource();\n\n\t\tif (!this.searchText) {\n\t\t this.mdbTable.setDataSource(this.previous);\n\t\t this.groups = this.mdbTable.getDataSource();\n\t\t}\n\n\t\tif (this.searchText) {\n\t\t this.groups = this.mdbTable.searchLocalDataBy(this.searchText);\n\t\t this.mdbTable.setDataSource(prev);\n\t\t}\n\t}\n\n\tngAfterViewInit() {\n\t this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n\t this.mdbTablePagination.calculateFirstItemIndex();\n\t this.mdbTablePagination.calculateLastItemIndex();\n\t this.cdRef.detectChanges();\n\t}\n\n\tprivate isEditMode(state){\n\t\tthis.modalEditMode = state;\n\t\tif(state){\n\t\t this.modalCreateEditTitle = \"Edit group\"\n\t\t this.modalCreateEditButtonText = \"Update\"\n\t\t}else{\n\t\t this.modalCreateEditTitle = \"Create group\"\n\t\t this.modalCreateEditButtonText = \"Create\"\n\t\t}\n\t}\n\n\tprivate isNowCopyMode(){\n\t\tthis.modalCreateEditTitle = \"Copy group\"\n\t\tthis.modalCreateEditButtonText = \"Copy\"\n\t}\n\n\tprivate commaToBr(arr) {\n\t\t// console.log(arr)\n\t var str = arr.join('\\n\\r');\n\t return str;\n\t}\n\n\tpublic b64unpack(str){\n\t// console.log(JSON.parse(atob(str)))\n\t\treturn JSON.parse(atob(str));\n\t}\n\n\tprivate rawPrepare(str){\n\t\tconsole.log(this.rawPolicies[str])\n\t\tthis.rawView = this.b64unpack(this.rawPolicies[str]);\n\t}\n\n\n\tprivate getGroups(){\n\t\tthis.groups = {};\n\t\tthis.groupsWithMembers = [];\n\t\tthis.previous = \"\";\n\t\tthis.apiService.getGroups().subscribe((data)=>{\n\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t console.log(data);\n\t\t if(data!==null){\n\t\t this.groups = data;\n\t\t for (var i = 0; i < this.objectKeys(data).length; i++) {\n\t\t\t\t\tlet tempGroupName = data[i]\n\t\t\t\t\tthis.apiService.getGroupDescription(tempGroupName).subscribe((data)=>{\n\t\t\t\t\t\tif(data!==null){\n\t\t\t\t\t\t\tthis.groupsWithMembers.push(data)\n\t\t\t\t\t\t\tthis.mdbTable.setDataSource(this.groupsWithMembers);\n\t\t \t\t\t\t\tthis.previous = this.mdbTable.getDataSource();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\tconsole.log(this.groupsWithMembers)\n\t\t\tthis.groups = this.groupsWithMembers;\n\t\t }\n\n\n\t\t});\n\t}\n\tprivate getListOfUsers(){\n\t\tthis.apiService.getUsers().subscribe((data)=>{\n\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t\tif(data!==null){\n\t\t\t\tthis.dropdownList = Object.entries(data).map((e) => ( { \"id\":e[0],\"itemName\":e[0] } ));\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getGroupDescription(group){\n\t\tthis.isEditMode(true);\n\t\tconsole.log(group)\n\t\tthis.apiService.getGroupDescription(group).subscribe((data)=>{\n\t\t\tif(data!==null){\n\t\t\t\tconsole.log(data)\n\t\t\t\tthis.groupToUpdate = data;\n\t\t\t\tthis.newGroupName = data[\"name\"]\n\t\t\t\tthis.newGroupPolicy = data[\"policy\"]\n\t\t\t\tthis.newGroupStatus = data[\"status\"]\n\t\t\t\tfor (var i = 0; i < data[\"members\"].length; i++) {\n\t\t\t\t\tvar tempMember = data[\"members\"][i];\n\t\t\t\t\tthis.selectedItems.push({\"id\":tempMember,\"itemName\":tempMember})\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getListOfPolicies(){\n\t\tthis.apiService.getPolicies().subscribe((data)=>{\n\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t this.policies = Object.keys(data);\n\t\t this.rawPolicies = data;\n\t\t});\n\t}\n\n\tprivate resetForm(){\n\t\tthis.newGroupName = \"\";\n\t\tthis.selectedItems = [];\n\t\tthis.newGroupPolicy = \"\";\n\t\tthis.newGroupStatus = \"\";\n\t}\n\n\tprivate markGroupToDelete(group){\n\t\tconsole.log(\"GROUP TO DELETE\", group);\n\n\t\tthis.groupToDelete = group\n\t}\n\n\tprivate deleteGroup(){\n\t\tconsole.log(\"GROUP TO DELETE >>>\", this.groupToDelete);\n\n\t\tthis.apiService.updateMembersGroup(this.groupToDelete,[],\"true\").subscribe((data)=>{\n\t\t\t this.apiService.validateAuthInResponse(data)\n\t if(data[\"Success\"]){\n\t this.toastr.success('Group: '+this.newGroupName+' has been removed', 'Success');\n\t this.usersToRemove = [];\n\t\t\t\t\tthis.refreshList();\n\t\t\t\t\tthis.groupToDelete = \"\";\n\t }else{\n\t this.toastr.error(JSON.stringify(data), 'Error while removing group');\n\t\t\t\t\tthis.refreshList();\n\t\t\t\t\tthis.groupToDelete = \"\";\n\t }\n\t });\n\t}\n\n\tprivate wipeGroupMembers(){\n\n\t\tthis.apiService.updateMembersGroup(this.newGroupName,this.usersToRemove,\"true\").subscribe((data)=>{\n\t\t\t this.apiService.validateAuthInResponse(data)\n\t if(data[\"Success\"]){\n\t this.toastr.success('Group: '+this.newGroupName+' members has been removed', 'Success');\n\t this.usersToRemove = [];\n\t }else{\n\t this.toastr.error(JSON.stringify(data), 'Error while removing members from group');\n\t }\n\t });\n\t}\n\n\tprivate updatePolicy(){\n\t\tif(this.newGroupPolicy !== null && this.newGroupPolicy != \"\"){\n\t \tthis.apiService.setPolicy(this.newGroupPolicy,this.newGroupName,\"true\").subscribe((data)=>{\n\t\t\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t if(data[\"Success\"]){\n\t\t this.toastr.success('Group: '+this.newGroupName+' policy has been set to '+this.newGroupPolicy, 'Success');\n\t\t }else{\n\t\t this.toastr.error(JSON.stringify(data), 'Error while setting policy to group');\n\t\t }\n\t\t });\n\t }\n\t}\n\n\tprivate updateStatus(){\n\t\tif(this.newGroupStatus !== null && this.newGroupStatus != \"\"){\n\t \tthis.apiService.setStatusGroup(this.newGroupName,this.newGroupStatus).subscribe((data)=>{\n\t\t\t\t\tthis.apiService.validateAuthInResponse(data)\n\t\t if(data[\"Success\"]){\n\t\t this.toastr.success('Group: '+this.newGroupName+' status has been set to '+this.newGroupStatus, 'Success');\n\t\t }else{\n\t\t this.toastr.error(JSON.stringify(data), 'Error while setting status to group');\n\t\t }\n\t\t });\n\t }\n\t}\n\n\tprivate refreshList(){\n\t\tthis.updatePolicy();\n\t\tthis.updateStatus();\n\t\tthis.getGroups();\n\t}\n\n\tprivate createGroup(){\n\t\tconsole.log(\"CREATE GROUP CALLED\")\n\t\tlet newMembers = []\n\t\tfor (var i = 0; i < this.selectedItems.length; i++) {\n\t\t\tnewMembers.push(this.selectedItems[i].itemName)\n\t\t}\n\n\t\t//remove users from group\n\t\tconsole.log(\"grouptoUpdate\",this.groupToUpdate);\n\n\t\tif(this.groupToUpdate!==null && this.groupToUpdate!=\"\" && this.groupToUpdate){\n\t\t\tif(this.usersToRemove.length > 0){\n\t\t\t\tthis.wipeGroupMembers()\n\t\t\t}\n\t\t}\n\n\t\t//add all new users to group\n\t\tif(newMembers.length > 0){\n\t\t\tthis.apiService.updateMembersGroup(this.newGroupName,newMembers,\"false\").subscribe((data)=>{\n\t\t\t\t this.apiService.validateAuthInResponse(data)\n\t\t if(data[\"Success\"]){\n\t\t this.toastr.success('Group: '+this.newGroupName+' has been created', 'Success');\n\t\t }else{\n\t\t this.toastr.error(JSON.stringify(data), 'Error while creating group');\n\t\t }\n\t\t this.refreshList();\n\t\t });\n\t\t}else{\n\t\t\tthis.refreshList();\n\t\t}\n this.isEditMode(false);\n this.groupToUpdate = {};\n\t}\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'filter'\n})\nexport class FilterPipe implements PipeTransform {\n\n transform(items: any[], searchPolicy: string): any[] {\n\n if (!items) {\n return [];\n }\n if (!searchPolicy) {\n return items;\n }\n searchPolicy = searchPolicy.toLocaleLowerCase();\n\n return items.filter(it => {\n return it.toLocaleLowerCase().includes(searchPolicy);\n });\n }\n\n}\n","export default \"
\\n
\\n
\\n

Buckets

\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n\\t\\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n\\t \\n \\n\\t \\n\\t \\t \\n\\t \\n\\t \\n \\n \\n \\n \\n \\n\\t
NameTagsCreation DateSizeQuotaEventOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n {{buckets[b].name}}\\n   \\n {{buckets[b].policy}}\\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n 0\\\">\\n
    \\n
  • {{tag}}: {{buckets[b].tags[tag]}}
  • \\n
\\n
\\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{buckets[b].info.creationDate | date : \\\"dd/MM/yy HH:mm:ss\\\" }}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\\\">\\n \\n {{(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)+'').length > 3 ? math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024/1024)+' Gb' : isNaN(math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024)) ? '–' : math.round(diskUsageInfo?.bucketsSizes[buckets[b].name]/1024/1024) +' Mb'}}\\n \\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && (diskUsageInfo?.bucketsSizes | json) != ({} | json)\\\">\\n \\n {{buckets[b].quota?.quotatype}}\\n {{buckets[b].quota?.quotatype}}\\n \\n 0\\\" mdbTooltip=\\\"{{buckets[b].quota?.quota}} bytes\\\" placement=\\\"top\\\">\\n {{(math.round(buckets[b].quota?.quota/1024/1024)+'').length > 3 ? math.round(buckets[b].quota?.quota/1024/1024/1024)+' Gb' : isNaN(math.round(buckets[b].quota?.quota/1024/1024)) ? '–' : math.round(buckets[b].quota?.quota/1024/1024) +' Mb'}}\\n \\n \\n ∞\\n \\n = mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex && serviceInfo?.sqsARN\\\">\\n \\n Lambda:\\n \\n {{c.Lambda}}
\\n
    \\n
  • \\n {{e}}\\n
  • \\n
\\n
\\n
\\n \\n Topic:\\n \\n {{c.Topic}}
\\n
    \\n
  • \\n {{e}}\\n
  • \\n
\\n
\\n
\\n \\n Queue:\\n \\n {{c.Queue}}
\\n
    \\n
  • \\n {{e}}\\n
  • \\n
\\n
\\n
\\n
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t \\t \\t \\n\\t \\t \\t \\n\\t \\t \\t \\n\\t \\t \\t \\n \\n \\n\\t \\t
\\n \\n
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Bucket Lifecycyle

\\n
\\n
\\n
\\n
\\n
\\n This bucket already have a lifecycyle policy, you can export it as JSON by clicking on \\\"dowload icon\\\" >\\n \\n
\\n Or override it by upload a new lifecycle policy.\\n
\\n
\\n Lifecycle policy is structrured xml file. You can use examples from Minio\\n documentation. Or use an AWS S3 documentation\\n Object Lifecycle Management\\n
\\n
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Bucket

\\n
\\n
\\n Are you shure?
After you click on \\\"Delete\\\" button bucket {{bucketToDelete}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Bucket Notifications

\\n
\\n
\\n Are you shure?
After you click on \\\"remove\\\" button bucket {{bucketToRemoveNotifications}} notifications will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Bucket Quota Limits

\\n
\\n
\\n Are you shure?
After you click on \\\"remove\\\" button quota for bucket {{bucketToRemoveQuota}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Encryption

\\n
\\n
\\n Are you shure?
After you click on \\\"remove\\\" button encryption for bucket {{bucketToRemoveEncryption}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Create Bucket

\\n
\\n
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n You can pass multiple names with \\\",\\\" delimiter\\n
\\n
Policy
\\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
Encryption
\\n

\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
Tags
\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\t\\t\\t\\t
\\n
\\n {{tag}}: {{newBucketTagsList[tag]}}\\n
\\n
Quota
\\n \\n\\n
\\n \\n \\t\\t\\t\\t\\t\\t\\t
\\n\\n
\\n \\n In \\\"fifo\\\" mode - old data automatically will be removed when you reach quota limit.
\\n In \\\"hard\\\" mode - you can't add new data to bucket if quota limit reached.\\n
\\n\\n
\\n \\t\\t\\t\\t\\t\\n
\\n
Bytes
\\n
\\n
\\n
\\n
\\n
Events section
\\n

\\n
\\n \\t\\t\\t\\t\\t\\t\\t\\t\\t\\n \\t\\t\\t\\t\\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Update Bucket

\\n
\\n
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
Policy
\\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
Encryption
\\n

\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
Tags
\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\t\\t\\t\\t
\\n
\\n {{tag}}: {{newBucketTagsList[tag]}}\\n
\\n
\\n
Quota section
\\n \\n
\\n \\n \\t\\t\\t\\t\\t\\t\\t
\\n\\n
\\n \\n In \\\"fifo\\\" mode - old data automatically will be removed when you reach quota limit.
\\n In \\\"hard\\\" mode - you can't add new data to bucket if quota limit reached.\\n
\\n\\n
\\n \\t\\t\\t\\t\\t\\n
\\n
Bytes
\\n
\\n
\\n
\\n
\\n
Events section
\\n

\\n
\\n \\t\\t\\t\\t\\t\\t\\t\\t\\t\\n \\t\\t\\t\\t\\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n\";","//loader.interceptor.ts\nimport { Component, OnInit } from '@angular/core';\nimport { LoaderService } from '../loader.service';\n\n@Component({\nselector: 'app-loading',\ntemplateUrl: './loader.component.html',\nstyleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent implements OnInit {\n\nloading: boolean;\nerror: boolean;\nconstructor(private loaderService: LoaderService) {\n this.loaderService.isLoading.subscribe((v) => {\n this.loading = v;\n this.error = this.loaderService.isError;\n });\n}\nngOnInit() {\n}\n\n}\n","export default \"
\\n\\t
\\n\\t\\t
\\n\\t\\t

Policies

\\n\\t\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t     \\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t
NameActionPrincipalEffectResourceConditionsOptions
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{objectKeys(policies[pol])}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • {{action}}
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t{{policies[pol].Statement.Principal}}\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • {{st.Effect}}
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t
    • {{resource}}
    • \\n\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{condition}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
        \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • {{con}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
          \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{conKeyVal}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t \\n\\t\\t \\t\\t \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Remove Policy

\\n
\\n
\\n Are you shure?
After you click on \\\"Delete\\\" button policy {{policyToDelete}} will be removed.\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Upload Policy

\\n
\\n
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Raw Policy

\\n
\\n
\\n \\t\\n
\\n \\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

{{modalCreateEditTitle}}

Switch to interface
\\n
\\n
\\n \\t\\n \\t\\t
\\n\\t\\t\\t\\t\\t
 
\\n\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t \\t
\\n In Edit mode you can make a copy of policy - Just rename it!\\n
\\n\\n\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
0\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
0\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t Principal\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
Buckets section
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t arn:aws:s3:::\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t /\\\" [(ngModel)]=\\\"newPolicy.bucket\\\" aria-label=\\\"Recipient's username\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-describedby=\\\"s3-prefix\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
BucketOptions
{{bst}}
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
Conditions section
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
Condition and options
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{condition}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • {{con}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{conKeyVal}}  \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
 
\\n\\t\\t\\t\\t\\t
\\n\\n\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t
EffectActionResourceConditionsOptions
{{st.Effect}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • {{action}}
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • {{resource}}
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{condition}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • {{con}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
        \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{conKeyVal}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
  • \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t  \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\n \\n
\\n \\n
\\n
\\n
\\n\";","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { ApiService } from '../api.service';\nimport { FormControl, FormGroup, Validators, ReactiveFormsModule } from \"@angular/forms\";\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n\n@Component({\n selector: 'app-users',\n templateUrl: './users.component.html',\n styleUrls: ['./users.component.scss']\n})\nexport class UsersComponent implements OnInit, AfterViewInit {\n validatingForm: FormGroup;\n updateUser: FormGroup;\n users = {};\n usersRaw = {};\n userToDelete;\n userToUpdate;\n objectKeys = Object.keys;\n objectValues = Object.values;\n jsn = JSON;\n policies;\n updateStatusValues = ['enabled','disabled'];\n\n @ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n @ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n previous: string;\n\n searchText: string = '';\n\n constructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService) { }\n\n @HostListener('input') oninput() {\n if(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n this.searchItems();\n }\n }\n\n ngOnInit() {\n \tthis.getListOfUsers()\n \tthis.getListOfPolicies()\n this.resetForm()\n this.updateUserFrom()\n }\n\n searchItems() {\n console.log(this.searchText)\n const prev = this.mdbTable.getDataSource();\n\n if (!this.searchText) {\n this.mdbTable.setDataSource(this.previous);\n this.users = this.mdbTable.getDataSource();\n }\n\n if (this.searchText) {\n this.users = this.mdbTable.searchLocalDataBy(this.searchText);\n this.mdbTable.setDataSource(prev);\n }\n }\n\n ngAfterViewInit() {\n this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n this.mdbTablePagination.calculateFirstItemIndex();\n this.mdbTablePagination.calculateLastItemIndex();\n this.cdRef.detectChanges();\n }\n\n get newUserAccess() {\n\treturn this.validatingForm.get('newUserAccess');\n }\n\n get newUserSecret() {\n\treturn this.validatingForm.get('newUserSecret');\n }\n\n get newUserPolicy() {\n\treturn this.validatingForm.get('newUserPolicy');\n }\n\n private generatePassword(length) {\n var charset = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n var retVal = \"\";\n for (var i = 0, n = charset.length; i < length; ++i) {\n retVal += charset.charAt(Math.floor(Math.random() * n));\n }\n\n return retVal;\n }\n\n get accessKeyUpdate() {\n return this.updateUser.get('accessKeyUpdate');\n }\n\n get secretKeyUpdate() {\n return this.updateUser.get('secretKeyUpdate');\n }\n\n get policyUpdate() {\n return this.updateUser.get('policyUpdate');\n }\n\n get statusUpdate() {\n return this.updateUser.get('statusUpdate');\n }\n\n private updateUserFrom(){\n this.updateUser = new FormGroup({\n accessKeyUpdate: new FormControl({value: '', disabled: true}, Validators.required),\n secretKeyUpdate: new FormControl(''),\n policyUpdate: new FormControl('', Validators.required),\n statusUpdate: new FormControl('', Validators.required)\n });\n }\n\n private resetForm(){\n \tthis.validatingForm = new FormGroup({\n newUserAccess: new FormControl(this.generatePassword(16), Validators.minLength(5)),\n newUserSecret: new FormControl(this.generatePassword(24), Validators.minLength(10)),\n newUserPolicy: new FormControl('',Validators.minLength(0))\n });\n }\n\n private getListOfUsers(){\n \tthis.apiService.getUsers().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data)\n this.usersRaw = data;\n const arrayOfUsers = Object.entries(data).map((e) => ( { [e[0]]: e[1] } ));\n this.users = arrayOfUsers;\n this.mdbTable.setDataSource(arrayOfUsers);\n console.log(arrayOfUsers)\n this.previous = this.mdbTable.getDataSource();\n });\n }\n\n\n private getListOfPolicies(){\n \tthis.apiService.getPolicies().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n this.policies = Object.keys(data);\n });\n }\n\n private createUser(){\n \tvar userAccess = this.newUserAccess.value;\n \tvar userSecret = this.newUserSecret.value;\n \tvar userPolicy = this.newUserPolicy.value;\n\n \tconsole.log(userPolicy)\n\n \tif(userPolicy!=''){\n \t\tthis.apiService.addUserExtended(userAccess,userSecret,userPolicy).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n\t console.log(data);\n\t this.getListOfUsers();\n if(data[\"Success\"]){\n this.toastr.success('User: '+userAccess+' with policy '+userPolicy+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating user');\n }\n\t });\n \t}else{\n \t\tthis.apiService.addUser(userAccess,userSecret).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n\t console.log(data);\n\t this.getListOfUsers();\n if(data[\"Success\"]){\n this.toastr.success('User: '+userAccess+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating user');\n }\n\t });\n \t}\n }\n\n private setStatusUser(accessKey,status){\n \tif(status == 'enabled'){\n \t\tstatus = 'disabled'\n \t}else{\n \t\tstatus = 'enabled'\n \t}\n \tthis.apiService.setStatusUser(accessKey,status).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('User: '+accessKey+' status has changed to '+status, 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while changing state for user');\n }\n this.getListOfUsers();\n });\n }\n\n private deleteUserPrepare(accessKey){\n \tthis.userToDelete = accessKey\n }\n\n private updateUserPrepare(accessKey){\n this.userToUpdate = accessKey\n this.updateUser.patchValue({'accessKeyUpdate': accessKey});\n if(this.usersRaw[accessKey]['policyName']){\n this.updateUser.patchValue({'policyUpdate': this.usersRaw[accessKey]['policyName']});\n }\n if(this.usersRaw[accessKey]['status']){\n this.updateUser.patchValue({'statusUpdate': this.usersRaw[accessKey]['status']});\n }\n console.log(this.usersRaw[accessKey])\n }\n\n private updateGenNewPassword(){\n this.updateUser.patchValue({'secretKeyUpdate': this.generatePassword(24)});\n }\n\n private updateUserSave(){\n var updatedSecret = this.updateUser.value.secretKeyUpdate;\n var updatedPolicy = this.updateUser.value.policyUpdate;\n var updatedStatus = this.updateUser.value.statusUpdate;\n\n this.apiService.updateUser(this.userToUpdate,updatedSecret,updatedPolicy,updatedStatus).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n this.getListOfUsers();\n if(data[\"Success\"]){\n this.toastr.success('User: '+this.userToUpdate+' has been updated', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while updating user');\n }\n });\n }\n\n\n private deleteUser(){\n \tthis.apiService.deleteUser(this.userToDelete).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('User: '+this.userToDelete+' has been deleted', 'Success');\n }\n this.updateUserFrom();\n this.getListOfUsers();\n });\n }\n\n}\n","import { Component, OnInit, ViewChild, HostListener, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl} from '@angular/platform-browser';\nimport { ApiService } from '../api.service';\nimport { MdbTablePaginationComponent, MdbTableDirective } from 'angular-bootstrap-md';\nimport { ToastrService } from 'ngx-toastr';\n\n@Component({\n selector: 'app-policies',\n templateUrl: './policies.component.html',\n styleUrls: ['./policies.component.scss']\n})\nexport class PoliciesComponent implements OnInit {\n objectKeys = Object.keys;\n objectValues = Object.values;\n policies = {};\n policiesRaw = {};\n b64decode;\n rawView = '';\n policyToDelete;\n policyToUpdate;\n modalEditMode;\n jsn = JSON;\n uploadPolicyName;\n uploadPolicyFile;\n uploadPolicyFileName;\n downloadJsonHref;\n modalCreateEditTitle;\n modalCreateEditButtonText;\n\n dropdownActionList = [];\n dropdownAdminList = [];\n dropdownConditionList = [];\n dropdownConditionKeyList = [];\n\n selectedActions = [];\n selectedAdmins = [];\n selectedCondition = [];\n selectedConditionKey = [];\n\n dropdownActionSettings = {};\n dropdownAdminSettings = {};\n dropdownConditionSettings = {};\n dropdownConditionKeySettings = {};\n\n advancedInterface = false;\n advancedInterfaceLabel = \"advanced\"\n\n newPolicy = {\n \tname:\"\",\n \teffect:\"allow\",\n \tbucket:\"\",\n };\n\n newPolicyRaw = {\n \tVersion:\"\",\n \tStatement: []\n }\n\n newStatement = {\n Action: [],\n Effect: \"\",\n Resource: [],\n Condition: {},\n Principal: \"\"\n }\n\n newConditionValue = \"\"\n\n @ViewChild(MdbTablePaginationComponent, { static: true }) mdbTablePagination: MdbTablePaginationComponent;\n @ViewChild(MdbTableDirective, { static: true }) mdbTable: MdbTableDirective;\n previous: string;\n\n searchText: string = '';\n\n\n constructor(private apiService: ApiService, private cdRef: ChangeDetectorRef, private toastr: ToastrService, private sanitizer: DomSanitizer) { }\n\n @HostListener('input') oninput() {\n if(event && event['target'] !== undefined && event.target[\"id\"] !== undefined && event.target[\"id\"] == \"search\"){\n this.searchItems();\n }\n if(event && event['target'] !== undefined && event.target[\"name\"] !== undefined && event.target[\"name\"] == \"newPolicyName\"){\n if(this.modalEditMode){\n if(this.newPolicy.name == this.policyToUpdate){\n this.isEditMode(true)\n }else{\n this.isNowCopyMode();\n }\n }\n }\n\n }\n\n @ViewChild('uploadPolicyFile', { static: true })\n uploadFileInput: any;\n\n ngOnInit() {\n \tthis.getPolicies()\n\n\n \tthis.dropdownActionList = [\n {\"id\":1,\"itemName\":\"s3:AbortMultipartUpload\"},\n {\"id\":2,\"itemName\":\"s3:CreateBucket\"},\n {\"id\":3,\"itemName\":\"s3:DeleteBucket\"},\n {\"id\":4,\"itemName\":\"s3:ForceDeleteBucket\"},\n {\"id\":5,\"itemName\":\"s3:DeleteBucketPolicy\"},\n {\"id\":6,\"itemName\":\"s3:DeleteObject\"},\n {\"id\":7,\"itemName\":\"s3:GetBucketLocation\"},\n {\"id\":8,\"itemName\":\"s3:GetBucketNotification\"},\n {\"id\":9,\"itemName\":\"s3:GetBucketPolicy\"},\n {\"id\":10,\"itemName\":\"s3:GetObject\"},\n {\"id\":11,\"itemName\":\"s3:HeadBucket\"},\n {\"id\":12,\"itemName\":\"s3:ListAllMyBuckets\"},\n {\"id\":13,\"itemName\":\"s3:ListBucket\"},\n {\"id\":14,\"itemName\":\"s3:ListBucketVersions\"},\n {\"id\":15,\"itemName\":\"s3:ListBucketMultipartUploads\"},\n {\"id\":16,\"itemName\":\"s3:ListenNotification\"},\n {\"id\":17,\"itemName\":\"s3:ListenBucketNotification\"},\n {\"id\":18,\"itemName\":\"s3:ListMultipartUploadParts\"},\n {\"id\":19,\"itemName\":\"s3:PutLifecycleConfiguration\"},\n {\"id\":20,\"itemName\":\"s3:GetLifecycleConfiguration\"},\n {\"id\":21,\"itemName\":\"s3:PutBucketNotification\"},\n {\"id\":22,\"itemName\":\"s3:PutBucketPolicy\"},\n {\"id\":23,\"itemName\":\"s3:PutObject\"},\n {\"id\":24,\"itemName\":\"s3:DeleteObjectVersion\"},\n {\"id\":25,\"itemName\":\"s3:DeleteObjectVersionTagging\"},\n {\"id\":26,\"itemName\":\"s3:GetObjectVersion\"},\n {\"id\":27,\"itemName\":\"s3:GetObjectVersionTagging\"},\n {\"id\":28,\"itemName\":\"s3:PutObjectVersionTagging\"},\n {\"id\":29,\"itemName\":\"s3:BypassGovernanceRetention\"},\n {\"id\":30,\"itemName\":\"s3:PutObjectRetention\"},\n {\"id\":31,\"itemName\":\"s3:GetObjectRetention\"},\n {\"id\":32,\"itemName\":\"s3:GetObjectLegalHold\"},\n {\"id\":33,\"itemName\":\"s3:PutObjectLegalHold\"},\n {\"id\":34,\"itemName\":\"s3:GetBucketObjectLockConfiguration\"},\n {\"id\":35,\"itemName\":\"s3:PutBucketObjectLockConfiguration\"},\n {\"id\":36,\"itemName\":\"s3:GetBucketTagging\"},\n {\"id\":37,\"itemName\":\"s3:PutBucketTagging\"},\n {\"id\":38,\"itemName\":\"s3:GetObjectTagging\"},\n {\"id\":39,\"itemName\":\"s3:PutObjectTagging\"},\n {\"id\":40,\"itemName\":\"s3:DeleteObjectTagging\"},\n {\"id\":41,\"itemName\":\"s3:PutEncryptionConfiguration\"},\n {\"id\":42,\"itemName\":\"s3:GetEncryptionConfiguration\"},\n {\"id\":43,\"itemName\":\"s3:PutBucketVersioning\"},\n {\"id\":44,\"itemName\":\"s3:GetBucketVersioning\"},\n {\"id\":45,\"itemName\":\"s3:GetReplicationConfiguration\"},\n {\"id\":46,\"itemName\":\"s3:PutReplicationConfiguration\"},\n {\"id\":47,\"itemName\":\"s3:ReplicateObject\"},\n {\"id\":48,\"itemName\":\"s3:ReplicateDelete\"},\n {\"id\":49,\"itemName\":\"s3:ReplicateTags\"},\n {\"id\":50,\"itemName\":\"s3:GetObjectVersionForReplication\"}\n ];\n\n this.dropdownActionSettings = {\n \t\tsingleSelection: false,\n \t\ttext:\"Select Actions\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true\n\t };\n\n this.dropdownAdminList = [\n {\"id\":1,\"itemName\":\"admin:ConfigUpdate\"},\n {\"id\":2,\"itemName\":\"admin:CreateUser\"},\n {\"id\":3,\"itemName\":\"admin:DeleteUser\"},\n {\"id\":4,\"itemName\":\"admin:ListUsers\"},\n {\"id\":5,\"itemName\":\"admin:EnableUser\"},\n {\"id\":6,\"itemName\":\"admin:DisableUser\"},\n {\"id\":7,\"itemName\":\"admin:GetUser\"},\n {\"id\":8,\"itemName\":\"admin:ServerInfo\"},\n {\"id\":9,\"itemName\":\"admin:ServerUpdate\"},\n {\"id\":10,\"itemName\":\"admin:StorageInfo\"},\n {\"id\":11,\"itemName\":\"admin:DataUsageInfo\"},\n {\"id\":12,\"itemName\":\"admin:TopLocks\"},\n {\"id\":13,\"itemName\":\"admin:OBDInfo\"},\n {\"id\":14,\"itemName\":\"admin:Profiling\"},\n {\"id\":15,\"itemName\":\"admin:ServerTrace\"},\n {\"id\":16,\"itemName\":\"admin:ConsoleLog\"},\n {\"id\":17,\"itemName\":\"admin:KMSKeyStatus\"},\n {\"id\":18,\"itemName\":\"admin:AddUserToGroup\"},\n {\"id\":19,\"itemName\":\"admin:RemoveUserFromGroup\"},\n {\"id\":20,\"itemName\":\"admin:GetGroup\"},\n {\"id\":21,\"itemName\":\"admin:ListGroups\"},\n {\"id\":22,\"itemName\":\"admin:EnableGroup\"},\n {\"id\":23,\"itemName\":\"admin:DisableGroup\"},\n {\"id\":24,\"itemName\":\"admin:CreatePolicy\"},\n {\"id\":25,\"itemName\":\"admin:DeletePolicy\"},\n {\"id\":26,\"itemName\":\"admin:GetPolicy\"},\n {\"id\":27,\"itemName\":\"admin:AttachUserOrGroupPolicy\"},\n {\"id\":28,\"itemName\":\"admin:ListUserPolicies\"}\n ];\n\n this.dropdownAdminSettings = {\n singleSelection: false,\n text:\"Select Admin actions for statement\",\n selectAllText:'Select All',\n unSelectAllText:'UnSelect All',\n enableSearchFilter: true\n };\n\n \tthis.dropdownConditionList = [\n {\"id\":1,\"itemName\":\"ArnEquals\"},\n {\"id\":2,\"itemName\":\"ArnEqualsIfExists\"},\n {\"id\":3,\"itemName\":\"ArnLike\"},\n {\"id\":4,\"itemName\":\"ArnLikeIfExists\"},\n {\"id\":5,\"itemName\":\"ArnNotEquals\"},\n {\"id\":6,\"itemName\":\"ArnNotEqualsIfExists\"},\n {\"id\":7,\"itemName\":\"ArnNotLike\"},\n {\"id\":8,\"itemName\":\"ArnNotLikeIfExists\"},\n {\"id\":9,\"itemName\":\"BinaryEquals\"},\n {\"id\":10,\"itemName\":\"BinaryEqualsIfExists\"},\n {\"id\":11,\"itemName\":\"BinaryNotEquals\"},\n {\"id\":12,\"itemName\":\"BinaryNotEqualsIfExists\"},\n {\"id\":13,\"itemName\":\"Bool\"},\n {\"id\":14,\"itemName\":\"BoolIfExists\"},\n {\"id\":15,\"itemName\":\"DateEquals\"},\n {\"id\":16,\"itemName\":\"DateEqualsIfExists\"},\n {\"id\":17,\"itemName\":\"DateGreaterThan\"},\n {\"id\":18,\"itemName\":\"DateGreaterThanEquals\"},\n {\"id\":19,\"itemName\":\"DateGreaterThanEqualsIfExists\"},\n {\"id\":20,\"itemName\":\"DateGreaterThanIfExists\"},\n {\"id\":21,\"itemName\":\"DateLessThan\"},\n {\"id\":22,\"itemName\":\"DateLessThanEquals\"},\n {\"id\":23,\"itemName\":\"DateLessThanEqualsIfExists\"},\n {\"id\":24,\"itemName\":\"DateLessThanIfExists\"},\n {\"id\":25,\"itemName\":\"DateNotEquals\"},\n {\"id\":26,\"itemName\":\"DateNotEqualsIfExists\"},\n {\"id\":27,\"itemName\":\"IpAddress\"},\n {\"id\":28,\"itemName\":\"IpAddressIfExists\"},\n {\"id\":29,\"itemName\":\"NotIpAddress\"},\n {\"id\":30,\"itemName\":\"NotIpAddressIfExists\"},\n {\"id\":31,\"itemName\":\"Null\"},\n {\"id\":32,\"itemName\":\"NumericEquals\"},\n {\"id\":33,\"itemName\":\"NumericEqualsIfExists\"},\n {\"id\":34,\"itemName\":\"NumericGreaterThan\"},\n {\"id\":35,\"itemName\":\"NumericGreaterThanEquals\"},\n {\"id\":36,\"itemName\":\"NumericGreaterThanEqualsIfExists\"},\n {\"id\":37,\"itemName\":\"NumericGreaterThanIfExists\"},\n {\"id\":38,\"itemName\":\"NumericLessThan\"},\n {\"id\":39,\"itemName\":\"NumericLessThanEquals\"},\n {\"id\":40,\"itemName\":\"NumericLessThanEqualsIfExists\"},\n {\"id\":41,\"itemName\":\"NumericLessThanIfExists\"},\n {\"id\":42,\"itemName\":\"NumericNotEquals\"},\n {\"id\":43,\"itemName\":\"NumericNotEqualsIfExists\"},\n {\"id\":44,\"itemName\":\"StringEquals\"},\n {\"id\":45,\"itemName\":\"StringEqualsIfExists\"},\n {\"id\":46,\"itemName\":\"StringEqualsIgnoreCase\"},\n {\"id\":47,\"itemName\":\"StringEqualsIgnoreCaseIfExists\"},\n {\"id\":48,\"itemName\":\"StringLike\"},\n {\"id\":49,\"itemName\":\"StringLikeIfExists\"},\n {\"id\":50,\"itemName\":\"StringNotEquals\"},\n {\"id\":51,\"itemName\":\"StringNotEqualsIfExists\"},\n {\"id\":52,\"itemName\":\"StringNotEqualsIgnoreCase\"},\n {\"id\":53,\"itemName\":\"StringNotEqualsIgnoreCaseIfExists\"},\n {\"id\":54,\"itemName\":\"StringNotLike\"},\n {\"id\":55,\"itemName\":\"StringNotLikeIfExists\"}\n ];\n\n this.dropdownConditionSettings = {\n \t\tsingleSelection: true,\n \t\ttext:\"Select Condition\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true\n\t };\n\n \tthis.dropdownConditionKeyList = [\n {\"id\":1,\"itemName\":\"aws:CurrentTime\"},\n {\"id\":2,\"itemName\":\"aws:EpochTime\"},\n {\"id\":3,\"itemName\":\"aws:MultiFactorAuthAge\"},\n {\"id\":4,\"itemName\":\"aws:MultiFactorAuthPresent\"},\n {\"id\":5,\"itemName\":\"aws:PrincipalArn\"},\n {\"id\":6,\"itemName\":\"aws:PrincipalOrgID\"},\n {\"id\":7,\"itemName\":\"aws:PrincipalTag/${TagKey}\"},\n {\"id\":8,\"itemName\":\"aws:PrincipalType\"},\n {\"id\":9,\"itemName\":\"aws:Referer\"},\n {\"id\":10,\"itemName\":\"aws:RequestTag/${TagKey}\"},\n {\"id\":11,\"itemName\":\"aws:RequestedRegion\"},\n {\"id\":12,\"itemName\":\"aws:SecureTransport\"},\n {\"id\":13,\"itemName\":\"aws:SourceAccount\"},\n {\"id\":14,\"itemName\":\"aws:SourceArn\"},\n {\"id\":15,\"itemName\":\"aws:SourceIp\"},\n {\"id\":16,\"itemName\":\"aws:SourceVpc\"},\n {\"id\":17,\"itemName\":\"aws:SourceVpce\"},\n {\"id\":18,\"itemName\":\"aws:TagKeys\"},\n {\"id\":19,\"itemName\":\"aws:TokenIssueTime\"},\n {\"id\":20,\"itemName\":\"aws:UserAgent\"},\n {\"id\":21,\"itemName\":\"aws:userid\"},\n {\"id\":22,\"itemName\":\"aws:username\"},\n {\"id\":23,\"itemName\":\"s3:AccessPointNetworkOrigin\"},\n {\"id\":24,\"itemName\":\"s3:DataAccessPointAccount\"},\n {\"id\":25,\"itemName\":\"s3:DataAccessPointArn\"},\n {\"id\":26,\"itemName\":\"s3:ExistingJobOperation\"},\n {\"id\":27,\"itemName\":\"s3:ExistingJobPriority\"},\n {\"id\":28,\"itemName\":\"s3:ExistingObjectTag/\"},\n {\"id\":29,\"itemName\":\"s3:JobSuspendedCause\"},\n {\"id\":30,\"itemName\":\"s3:LocationConstraint\"},\n {\"id\":31,\"itemName\":\"s3:RequestJobOperation\"},\n {\"id\":32,\"itemName\":\"s3:RequestJobPriority\"},\n {\"id\":33,\"itemName\":\"s3:RequestObjectTag/\"},\n {\"id\":34,\"itemName\":\"s3:RequestObjectTagKeys\"},\n {\"id\":35,\"itemName\":\"s3:VersionId\"},\n {\"id\":36,\"itemName\":\"s3:authtype\"},\n {\"id\":37,\"itemName\":\"s3:delimiter\"},\n {\"id\":38,\"itemName\":\"s3:locationconstraint\"},\n {\"id\":39,\"itemName\":\"s3:max-keys\"},\n {\"id\":40,\"itemName\":\"s3:object-lock-legal-hold\"},\n {\"id\":41,\"itemName\":\"s3:object-lock-mode\"},\n {\"id\":42,\"itemName\":\"s3:object-lock-remaining-retention-days\"},\n {\"id\":43,\"itemName\":\"s3:object-lock-retain-until-date\"},\n {\"id\":44,\"itemName\":\"s3:prefix\"},\n {\"id\":45,\"itemName\":\"s3:signatureage\"},\n {\"id\":46,\"itemName\":\"s3:signatureversion\"},\n {\"id\":47,\"itemName\":\"s3:versionid\"},\n {\"id\":48,\"itemName\":\"s3:x-amz-acl\"},\n {\"id\":49,\"itemName\":\"s3:x-amz-content-sha256\"},\n {\"id\":50,\"itemName\":\"s3:x-amz-copy-source\"},\n {\"id\":51,\"itemName\":\"s3:x-amz-grant-full-control\"},\n {\"id\":52,\"itemName\":\"s3:x-amz-grant-read\"},\n {\"id\":53,\"itemName\":\"s3:x-amz-grant-read-acp\"},\n {\"id\":54,\"itemName\":\"s3:x-amz-grant-write\"},\n {\"id\":55,\"itemName\":\"s3:x-amz-grant-write-acp\"},\n {\"id\":56,\"itemName\":\"s3:x-amz-metadata-directive\"},\n {\"id\":57,\"itemName\":\"s3:x-amz-server-side-encryption\"},\n {\"id\":58,\"itemName\":\"s3:x-amz-server-side-encryption-aws-kms-key-id\"},\n {\"id\":59,\"itemName\":\"s3:x-amz-storage-class\"},\n {\"id\":60,\"itemName\":\"s3:x-amz-website-redirect-location\"}\n ];\n\n this.dropdownConditionKeySettings = {\n \t\tsingleSelection: true,\n \t\ttext:\"Select Condition Key\",\n \t\tselectAllText:'Select All',\n \t\tunSelectAllText:'UnSelect All',\n \t\tenableSearchFilter: true\n\t };\n }\n\n switchAdvanced(){\n if(this.advancedInterface){\n this.advancedInterface = false;\n this.advancedInterfaceLabel = \"Advanced\"\n }else{\n this.advancedInterface = true;\n this.advancedInterfaceLabel = \"Basic\"\n }\n }\n\n\tonActionItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedActions);\n\t}\n\tonActionItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedActions);\n\t}\n\tonActionSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonActionDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n\tonAdminItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedAdmins);\n\t}\n\tonAdminItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedAdmins);\n\t}\n\tonAdminSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonAdminDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n\n //condition select actions\n onConditionItemSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedCondition);\n\t}\n\tonConditionItemDeSelect(item:any){\n\t console.log(item);\n\t console.log(this.selectedCondition);\n\t}\n\tonConditionSelectAll(items: any){\n\t console.log(items);\n\t}\n\tonConditionDeSelectAll(items: any){\n\t console.log(items);\n\t}\n\n //condition key select actions\n onConditionKeyItemSelect(item:any){\n console.log(item);\n console.log(this.selectedConditionKey);\n }\n onConditionKeyItemDeSelect(item:any){\n console.log(item);\n console.log(this.selectedConditionKey);\n }\n onConditionKeySelectAll(items: any){\n console.log(items);\n }\n onConditionKeyDeSelectAll(items: any){\n console.log(items);\n }\n\n\n searchItems() {\n console.log(this.searchText)\n const prev = this.mdbTable.getDataSource();\n\n if (!this.searchText) {\n this.mdbTable.setDataSource(this.previous);\n this.policies = this.mdbTable.getDataSource();\n }\n\n if (this.searchText) {\n this.policies = this.mdbTable.searchLocalDataBy(this.searchText);\n this.mdbTable.setDataSource(prev);\n }\n }\n\n ngAfterViewInit() {\n this.mdbTablePagination.setMaxVisibleItemsNumberTo(10);\n\n this.mdbTablePagination.calculateFirstItemIndex();\n this.mdbTablePagination.calculateLastItemIndex();\n this.cdRef.detectChanges();\n }\n\n private resetPloicyForm(removeName){\n \tconsole.log(removeName);\n \tthis.selectedActions = [];\n \tthis.selectedAdmins = []\n \tif(!removeName){\n \t\tthis.newPolicy.effect = \"Allow\"\n\t\t this.newPolicy.bucket = \"\"\n \t}else{\n \t\tthis.newPolicy.name = \"\",\n \t\tthis.newPolicy.effect = \"Allow\"\n \t\tthis.newPolicy.bucket = \"\"\n \t}\n\n this.newStatement = {\n Action: [],\n Effect: \"\",\n Resource: [],\n Condition: {},\n Principal: \"\"\n }\n\n }\n\n private getPolicies(){\n \tthis.apiService.getPolicies().subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n this.policiesRaw = data;\n const arrayOfPolicies = Object.entries(data).map((e) => ( { [e[0]]: e[1] } ));\n this.policies = arrayOfPolicies;\n this.mdbTable.setDataSource(arrayOfPolicies);\n console.log(arrayOfPolicies)\n this.previous = this.mdbTable.getDataSource();\n });\n }\n\n private deletePolicy(){\n \tthis.apiService.deletePolicy(this.policyToDelete).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n this.getPolicies();\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.policyToDelete+' has been deleted', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while deleting policy');\n }\n });\n }\n\n private downloadPolicy(jsonObj) {\n var theJSON = JSON.stringify(jsonObj);\n console.log(\"theJSON>>>>>>>>>>>\",theJSON);\n var uri = this.sanitizer.bypassSecurityTrustUrl(\"data:text/json;charset=UTF-8,\" + encodeURIComponent(theJSON));\n this.downloadJsonHref = uri;\n }\n\n private rawPrepare(obj){\n \tthis.rawView = obj;\n }\n\n private deletePolicyPrepare(policy){\n \tthis.policyToDelete = policy\n }\n\n private prepareNewPolicyRaw(){\n \tthis.newPolicyRaw = {\n\t \tVersion:\"2012-10-17\",\n\t \tStatement: []\n \t}\n }\n\n private removeCondition(valueId,keyName,conditionName){\n console.log(this.newStatement)\n console.log(valueId,keyName,conditionName)\n this.newStatement.Condition[conditionName][keyName].splice(valueId,1)\n }\n\n private addCondition(){\n console.log(this.selectedCondition[0].itemName)\n console.log(this.selectedConditionKey[0].itemName)\n console.log(this.newConditionValue)\n if(!this.newStatement.Condition){\n this.newStatement.Condition = {}\n }\n if(this.newStatement.Condition[this.selectedCondition[0].itemName]){\n if(this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName]){\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName].push(this.newConditionValue)\n }else{\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName] = []\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName].push(this.newConditionValue)\n }\n }else{\n this.newStatement.Condition[this.selectedCondition[0].itemName] = {}\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName] = []\n this.newStatement.Condition[this.selectedCondition[0].itemName][this.selectedConditionKey[0].itemName].push(this.newConditionValue)\n }\n\n this.selectedCondition = []\n this.selectedConditionKey = []\n this.newConditionValue = \"\"\n console.log(this.newStatement.Condition)\n }\n\n\n private addStatement(){\n console.log(\"called add statement\");\n\n if(this.selectedActions.length>0){\n \tif(this.selectedActions.length == this.dropdownActionList.length){\n \t\tthis.newStatement.Action.push(\"s3:*\")\n \t}else{\n \t \tfor (var i = 0; i < this.selectedActions.length; i++) {\n \t \t\tthis.newStatement.Action.push(this.selectedActions[i].itemName)\n \t \t}\n \t }\n }else{\n if(this.selectedAdmins.length == this.dropdownAdminList.length){\n \t\tthis.newStatement.Action.push(\"admin:*\")\n \t}else{\n \t \tfor (var i = 0; i < this.selectedAdmins.length; i++) {\n \t \t\tthis.newStatement.Action.push(this.selectedAdmins[i].itemName)\n \t \t}\n \t }\n }\n \tthis.newStatement.Effect = this.newPolicy.effect\n\n \tconsole.log(this.newStatement)\n if(this.newStatement.Condition && Object.entries(this.newStatement.Condition).length === 0 && this.newStatement.Condition.constructor === Object){\n console.log(\"Condition removed cause empty\")\n delete this.newStatement.Condition\n }else{\n if(!this.newStatement.Principal || this.newStatement.Principal == \"\"){\n console.log(\"Principal set to * cause condition not empty\")\n this.newStatement.Principal = \"*\"\n }\n }\n\n \tthis.newPolicyRaw.Statement.push(this.newStatement);\n \tconsole.log(this.newPolicyRaw)\n\n \tthis.resetPloicyForm(false);\n }\n\n private editStatement(i){\n console.log(\"called Edit Statement\");\n\n this.newStatement = this.newPolicyRaw.Statement[i]\n this.newPolicy.effect = this.newPolicyRaw.Statement[i].Effect\n\n switch ((this.newStatement.Action[0]).substring(0, 3)) {\n case \"s3:\":\n if(this.newStatement.Action[0] == \"s3:*\"){\n for (var g = 0; g < this.dropdownActionList.length; g++) {\n this.selectedActions.push({\"id\":this.dropdownActionList[g].id,\"itemName\":this.dropdownActionList[g].itemName})\n }\n }else{\n for (var g = 0; g < this.newStatement.Action.length; g++) {\n this.selectedActions.push({\"id\":g,\"itemName\":this.newStatement.Action[g]})\n }\n }\n break;\n case \"adm\":\n if(this.newStatement.Action[0] == \"admin:*\"){\n for (var g = 0; g < this.dropdownAdminList.length; g++) {\n this.selectedAdmins.push({\"id\":this.dropdownAdminList[g].id,\"itemName\":this.dropdownAdminList[g].itemName})\n }\n }else{\n for (var g = 0; g < this.newStatement.Action.length; g++) {\n this.selectedAdmins.push({\"id\":g,\"itemName\":this.newStatement.Action[g]})\n }\n }\n break;\n }\n\n\n this.newStatement.Action = []\n this.newPolicyRaw.Statement.splice(i,1)\n }\n\n private addBucketStatement(){\n this.newStatement.Resource.push(\"arn:aws:s3:::\"+this.newPolicy.bucket)\n this.newPolicy.bucket = ''\n }\n\n private removeStatement(i){\n \tthis.newPolicyRaw.Statement.splice(i,1)\n }\n\n private removeBucketStatement(i){\n this.newStatement.Resource.splice(i,1)\n }\n\n private fileChanged(e) {\n console.log(\"eventTriggered\");\n\n this.uploadPolicyFile = e.target.files[0];\n this.uploadPolicyFileName = e.target.files[0].name;\n }\n\n private uploadPolicy(){\n let fileReader = new FileReader();\n fileReader.onload = (e) => {\n console.log(fileReader.result);\n let policyFileString = ((fileReader.result).toString()).replace(/\\n/g, ' ').replace(/\\r/g, ' ')\n this.apiService.addPolicy(this.uploadPolicyName,policyFileString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.newPolicy.name+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n this.getPolicies();\n });\n }\n fileReader.readAsText(this.uploadPolicyFile);\n }\n\n private resetUploadForm(){\n this.uploadFileInput.nativeElement.value = \"\";\n this.uploadPolicyFile;\n this.uploadPolicyName = \"\";\n this.uploadPolicyFileName = \"\";\n }\n\n private createPolicy(){\n \tconsole.log(this.newPolicy, this.newPolicyRaw)\n\n \tlet policyString = JSON.stringify(this.newPolicyRaw);\n\n \tthis.apiService.addPolicy(this.newPolicy.name,policyString).subscribe((data)=>{\n this.apiService.validateAuthInResponse(data)\n console.log(data);\n if(data[\"Success\"]){\n this.toastr.success('Policy '+this.newPolicy.name+' has been created', 'Success');\n }else{\n this.toastr.error(JSON.stringify(data), 'Error while creating policy');\n }\n this.getPolicies();\n });\n }\n\n private isEditMode(state){\n this.modalEditMode = state;\n if(state){\n this.modalCreateEditTitle = \"Edit policy\"\n this.modalCreateEditButtonText = \"Update\"\n }else{\n this.modalCreateEditTitle = \"Build up new policy\"\n this.modalCreateEditButtonText = \"Create\"\n }\n }\n\n private isNowCopyMode(){\n this.modalCreateEditTitle = \"Copy policy\"\n this.modalCreateEditButtonText = \"Copy\"\n }\n\n private updatePolicyPrepare(policy){\n this.policyToUpdate = policy\n this.prepareNewPolicyRaw()\n this.resetPloicyForm(false)\n this.newPolicy.name = policy;\n\n var oldPolicy = this.policiesRaw[policy]\n this.newPolicyRaw.Statement = oldPolicy.Statement;\n }\n\n}\n","export default \"
\\n\\t

Server statistics {{server.endpoint}}

\\n\\t
\\n\\t\\tView Raw JSON 
\\n\\t\\tminio version: {{server.version}}
\\n\\t\\tuptime: {{math.round(server.uptime/60)}} min.
\\n\\t\\tnetwork: {{server.network[server.endpoint]}}\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t

Storage

\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
TotalUsedStatePath
{{math.round((disk.totalspace/1024/1024/1024)*100)/100}} Gb{{math.round((disk.usedspace/1024/1024/1024)*100)/100}} Gb{{disk.state}}{{disk.path}}
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t

Disk usage info

\\n\\t\\t\\t
\\n\\t\\t\\t\\t

Last update: {{diskUsageInfo?.lastUpdate.split('T').join(' ').split('.')[0]}}

\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
Objects countObjects total sizeBuckets count
{{diskUsageInfo.objectsCount}}{{math.round((diskUsageInfo.objectsTotalSize/1024/1024/1024)*100)/100}} Gb{{diskUsageInfo.bucketsCount}}
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t
0\\\">\\n\\t\\t
\\n\\t\\t\\t

Bucket sizes chart

\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t
0\\\">\\n\\t\\t
\\n\\t \\t

Object sizes histogram

\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n
\\n
\\n
\\n\\n\\n\\n
\\n
\\n
\\n
\\n \\n

Raw Server Info

\\n
\\n
\\n \\t\\n
\\n \\n
\\n
\\n
\\n\";","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJwb2xpY2llcy5jb21wb25lbnQuc2NzcyJ9 */\";","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class EnvService {\n\n // The values that are defined here are the default values that can\n // be overridden by env.js\n\n // API url\n public apiBaseUrl = '';\n public apiMultiBackend = false;\n public apiBackends = '';\n\n constructor() {\n }\n\n}\n","export default \"
\\n\\t
\\n\\t
\\n\\t\\t

List of users

\\n\\t
\\n\\t
\\n\\t\\t\\n\\t
\\n\\t
\\n\\t
\\n\\t
\\n\\t\\t
\\n\\t\\t \\n\\t\\t \\n\\t\\t
\\n\\t
\\n
\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t \\n\\t\\n\\t
User namePolicyStatusAction
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{objectKeys(users[key])}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">{{objectValues(users[key])[0].policyName}}= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
= mdbTablePagination.firstItemIndex && i < mdbTablePagination.lastItemIndex\\\">\\n\\t\\t\\t\\t\\t \\n\\t\\t \\t\\t\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n
\\n
\\n
\\n\\n\\n
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t

Remove User

\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\tAre you shure?
After you click on \\\"Delete\\\" button user {{userToDelete}} will be removed.\\n\\t\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n
\\n\\n\\n\\n
\\n\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t

Edit User

\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tInput invalid\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tInput valid\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t

\\n\\t\\t\\t\\t\\t\\tGenerate new secret\\n\\t\\t\\t\\t\\t

\\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n
\\n\\n\\n\\n
\\n
\\n\\t
\\n\\t
\\n\\t\\t

Create new user

\\n\\t\\t\\n\\t\\t
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput invalid\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput valid\\n\\t\\t\\t \\n\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput invalid\\n\\t\\t\\t \\n\\t\\t\\t \\n\\t\\t\\t\\tInput valid\\n\\t\\t\\t \\n\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t \\n\\t\\t\\t
\\n\\n\\t\\t\\t
\\n\\t\\t\\t

\\n\\t\\t\\t\\t\\tGenerate new access\\\\secret pair\\n\\t\\t\\t

\\n\\t\\t\\t
\\n\\t
\\n\\t \\n\\t
\\n
\\n
\\n\";","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { UsersComponent } from './users/users.component';\nimport { ServerComponent } from './server/server.component';\nimport { PoliciesComponent } from './policies/policies.component';\nimport { BucketsComponent } from './buckets/buckets.component';\nimport { GroupsComponent } from './groups/groups.component';\n\nconst routes: Routes = [\n\t{path:'users', component: UsersComponent},\n\t{path:'server', component: ServerComponent},\n\t{path:'policies', component: PoliciesComponent},\n\t{path:'groups', component: GroupsComponent},\n\t{path:'', component: BucketsComponent}\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Router } from \"@angular/router\";\nimport { EnvService } from './env.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n\n constructor(private httpClient: HttpClient, private router: Router, private env: EnvService) {\n if(env.apiBaseUrl) {\n console.log('apiBaseUrl', env.apiBaseUrl);\n }\n if(env.apiMultiBackend) {\n console.log('apiMultiBackend', env.apiMultiBackend);\n }\n if(env.apiBackends) {\n console.log('apiBackends', env.apiBackends);\n }\n\n }\n\n\n multiBackend = this.env.apiMultiBackend;\n backendsUrls = this.env.apiBackends;\n baseUrl = this.getCurrentBackend();\n\n private getCurrentBackend(){\n let envDefaultBackend = this.env.apiBaseUrl;\n if(this.multiBackend && this.multiBackend == true) {\n let savedBackend = localStorage.getItem('currentBackend');\n\n let activeBackend = \"\";\n\n if(savedBackend && savedBackend != \"\"){\n activeBackend = savedBackend;\n }else{\n activeBackend = envDefaultBackend;\n }\n return activeBackend;\n } else {\n return envDefaultBackend;\n }\n }\n\n public overrideBackend(newBackend){\n localStorage.setItem('currentBackend', newBackend);\n this.baseUrl = newBackend;\n\n this.router.onSameUrlNavigation = 'reload';\n this.router.routeReuseStrategy.shouldReuseRoute = function () {\n return false;\n };\n\n this.router.navigate([this.router.url])\n this.router.onSameUrlNavigation = 'ignore';\n }\n\n public getMultiBackendStatus(){\n return this.multiBackend;\n }\n\n public getBackendsUrls(){\n return this.backendsUrls;\n }\n\n public validateAuthInResponse(data){\n if(data != null && typeof data.oauth != \"undefined\" && typeof data.auth != \"undefined\" && data.oauth != false && data.auth != true){\n window.location.href = this.env.apiBaseUrl+'/auth/?state='+window.location.href;\n }\n }\n\n public serverInfo(){\n return this.httpClient.get(this.baseUrl+'/api/v2/server/common-info');\n }\n\n public diskInfo(){\n return this.httpClient.get(this.baseUrl+'/api/v2/server/disk-info');\n }\n\n public getUsers(){\n return this.httpClient.get(this.baseUrl+'/api/v2/users/list');\n }\n\n public addUser(access,secret){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('secretKey', secret);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/create', form)\n }\n\n public addUserExtended(access,secret,policy){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('secretKey', secret);\n form.append('policyName', policy);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/create-extended', form)\n }\n\n public updateUser(access,secret,policy,status){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('secretKey', secret);\n form.append('policyName', policy);\n form.append('status', status);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/update', form)\n }\n\n\n public setStatusUser(access,status){\n let form = new FormData();\n\n form.append('accessKey', access);\n form.append('status', status);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/set-status', form)\n }\n\n public deleteUser(access){\n let form = new FormData();\n\n form.append('accessKey', access);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/user/delete', form)\n }\n\n public getPolicies(){\n return this.httpClient.get(this.baseUrl+'/api/v2/policies/list');\n }\n\n public deletePolicy(policy){\n let form = new FormData();\n\n form.append('policyName', policy);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/policy/delete', form)\n }\n\n public addPolicy(policyName, policyString){\n let form = new FormData();\n\n form.append('policyName', policyName);\n form.append('policyString', policyString);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/policy/create', form)\n }\n\n public getBuckets(){\n return this.httpClient.get(this.baseUrl+'/api/v2/buckets/list');\n }\n\n public getBucketsExtended(){\n return this.httpClient.get(this.baseUrl+'/api/v2/buckets/list-extended');\n }\n\n public enableNotificationForBucket(bucket, stsARN, eventTypes, filterPrefix, filterSuffix){\n //put,get,delete\n let form = new FormData();\n\n form.append('bucket', bucket);\n form.append('stsARN', stsARN);\n form.append('eventTypes', eventTypes);\n form.append('filterPrefix', filterPrefix);\n form.append('filterSuffix', filterSuffix);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-events', form)\n }\n\n public getBucketEvents(bucket){\n let form = new FormData();\n\n form.append('bucket', bucket);\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-events',form)\n }\n\n public removeBucketEvents(bucket){\n let form = new FormData();\n\n form.append('bucket', bucket);\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/remove-events',form)\n }\n\n public deleteBucket(bucket){\n let form = new FormData();\n\n form.append('bucketName', bucket);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/delete', form)\n }\n\n public createBucket(bucket){\n let form = new FormData();\n\n form.append('newBucket', bucket);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/create', form)\n }\n\n public getGroups(){\n return this.httpClient.get(this.baseUrl+'/api/v2/groups/list');\n }\n\n public updateMembersGroup(group,members,IsRemove){\n let form = new FormData();\n\n form.append('group', group);\n form.append('members', members);\n form.append('IsRemove', IsRemove);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/group/update-members', form);\n }\n\n public getGroupDescription(group){\n let form = new FormData();\n\n form.append('group', group);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/group/get-description', form);\n }\n\n public setStatusGroup(group,status){\n let form = new FormData();\n\n form.append('group', group);\n form.append('status', status);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/group/set-status', form);\n }\n\n public setPolicy(policyName,entityName,isGroup){\n let form = new FormData();\n\n form.append('policyName', policyName);\n form.append('entityName', entityName);\n form.append('isGroup', isGroup);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/policy/update', form);\n }\n\n public setLifecycle(bucketName,lifecycle){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('lifecycle', lifecycle);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-lifecycle', form);\n }\n\n\n public getLifecycle(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-lifecycle', form);\n }\n\n public checkAuthStatus(){\n return this.httpClient.get(this.baseUrl+'/auth/check');\n }\n\n public getBucketQuota(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-quota', form);\n }\n\n public setBucketQuota(bucketName, quotaType, quotaValue){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('quotaType', quotaType);\n form.append('quotaValue', quotaValue);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-quota', form);\n }\n\n public removeBucketQuota(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/remove-quota', form);\n }\n\n public setBucketTag(bucketName,tagsString){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('bucketTags', tagsString);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-tags', form);\n }\n\n public getBucketTag(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-tags', form);\n }\n\n public setBucketPolicy(bucketName,policyString){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('bucketPolicy', policyString);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-policy', form);\n }\n\n public getBucketPolicy(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-policy', form);\n }\n\n public getBucketEncryption(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/get-encryption', form);\n }\n\n public setBucketEncryption(bucketName, encType, encMasterKeyID){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n form.append('bucketEncryptionType', encType);\n form.append('kmsMasterKey', encMasterKeyID);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/set-encryption', form);\n }\n\n public removeBucketEncryption(bucketName){\n let form = new FormData();\n\n form.append('bucketName', bucketName);\n\n return this.httpClient.post(this.baseUrl+'/api/v2/bucket/remove-encryption', form);\n }\n\n\n}\n","export default \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJhcHAuY29tcG9uZW50LnNjc3MifQ== */\";","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"zn8P\";"]} \ No newline at end of file diff --git a/dist/minio-ng/scripts.js b/dist/minio-ng/scripts.js index fd8871a..af14b17 100644 --- a/dist/minio-ng/scripts.js +++ b/dist/minio-ng/scripts.js @@ -1,7 +1,7 @@ /*! - * Chart.js v2.9.3 + * Chart.js v2.9.4 * https://www.chartjs.org - * (c) 2019 Chart.js Contributors + * (c) 2020 Chart.js Contributors * Released under the MIT License */ (function (global, factory) { @@ -2103,14047 +2103,14068 @@ if (typeof window !== 'undefined') { var chartjsColor = Color; -/** - * @namespace Chart.helpers - */ -var helpers = { - /** - * An empty function that can be used, for example, for optional callback. - */ - noop: function() {}, - - /** - * Returns a unique id, sequentially generated from a global variable. - * @returns {number} - * @function - */ - uid: (function() { - var id = 0; - return function() { - return id++; - }; - }()), - - /** - * Returns true if `value` is neither null nor undefined, else returns false. - * @param {*} value - The value to test. - * @returns {boolean} - * @since 2.7.0 - */ - isNullOrUndef: function(value) { - return value === null || typeof value === 'undefined'; - }, - - /** - * Returns true if `value` is an array (including typed arrays), else returns false. - * @param {*} value - The value to test. - * @returns {boolean} - * @function - */ - isArray: function(value) { - if (Array.isArray && Array.isArray(value)) { - return true; - } - var type = Object.prototype.toString.call(value); - if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') { - return true; - } - return false; - }, - - /** - * Returns true if `value` is an object (excluding null), else returns false. - * @param {*} value - The value to test. - * @returns {boolean} - * @since 2.7.0 - */ - isObject: function(value) { - return value !== null && Object.prototype.toString.call(value) === '[object Object]'; - }, - - /** - * Returns true if `value` is a finite number, else returns false - * @param {*} value - The value to test. - * @returns {boolean} - */ - isFinite: function(value) { - return (typeof value === 'number' || value instanceof Number) && isFinite(value); - }, - - /** - * Returns `value` if defined, else returns `defaultValue`. - * @param {*} value - The value to return if defined. - * @param {*} defaultValue - The value to return if `value` is undefined. - * @returns {*} - */ - valueOrDefault: function(value, defaultValue) { - return typeof value === 'undefined' ? defaultValue : value; - }, - - /** - * Returns value at the given `index` in array if defined, else returns `defaultValue`. - * @param {Array} value - The array to lookup for value at `index`. - * @param {number} index - The index in `value` to lookup for value. - * @param {*} defaultValue - The value to return if `value[index]` is undefined. - * @returns {*} - */ - valueAtIndexOrDefault: function(value, index, defaultValue) { - return helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue); - }, - - /** - * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the - * value returned by `fn`. If `fn` is not a function, this method returns undefined. - * @param {function} fn - The function to call. - * @param {Array|undefined|null} args - The arguments with which `fn` should be called. - * @param {object} [thisArg] - The value of `this` provided for the call to `fn`. - * @returns {*} - */ - callback: function(fn, args, thisArg) { - if (fn && typeof fn.call === 'function') { - return fn.apply(thisArg, args); - } - }, - - /** - * Note(SB) for performance sake, this method should only be used when loopable type - * is unknown or in none intensive code (not called often and small loopable). Else - * it's preferable to use a regular for() loop and save extra function calls. - * @param {object|Array} loopable - The object or array to be iterated. - * @param {function} fn - The function to call for each item. - * @param {object} [thisArg] - The value of `this` provided for the call to `fn`. - * @param {boolean} [reverse] - If true, iterates backward on the loopable. - */ - each: function(loopable, fn, thisArg, reverse) { - var i, len, keys; - if (helpers.isArray(loopable)) { - len = loopable.length; - if (reverse) { - for (i = len - 1; i >= 0; i--) { - fn.call(thisArg, loopable[i], i); - } - } else { - for (i = 0; i < len; i++) { - fn.call(thisArg, loopable[i], i); - } - } - } else if (helpers.isObject(loopable)) { - keys = Object.keys(loopable); - len = keys.length; - for (i = 0; i < len; i++) { - fn.call(thisArg, loopable[keys[i]], keys[i]); - } - } - }, - - /** - * Returns true if the `a0` and `a1` arrays have the same content, else returns false. - * @see https://stackoverflow.com/a/14853974 - * @param {Array} a0 - The array to compare - * @param {Array} a1 - The array to compare - * @returns {boolean} - */ - arrayEquals: function(a0, a1) { - var i, ilen, v0, v1; - - if (!a0 || !a1 || a0.length !== a1.length) { - return false; - } - - for (i = 0, ilen = a0.length; i < ilen; ++i) { - v0 = a0[i]; - v1 = a1[i]; - - if (v0 instanceof Array && v1 instanceof Array) { - if (!helpers.arrayEquals(v0, v1)) { - return false; - } - } else if (v0 !== v1) { - // NOTE: two different object instances will never be equal: {x:20} != {x:20} - return false; - } - } - - return true; - }, - - /** - * Returns a deep copy of `source` without keeping references on objects and arrays. - * @param {*} source - The value to clone. - * @returns {*} - */ - clone: function(source) { - if (helpers.isArray(source)) { - return source.map(helpers.clone); - } - - if (helpers.isObject(source)) { - var target = {}; - var keys = Object.keys(source); - var klen = keys.length; - var k = 0; - - for (; k < klen; ++k) { - target[keys[k]] = helpers.clone(source[keys[k]]); - } - - return target; - } - - return source; - }, - - /** - * The default merger when Chart.helpers.merge is called without merger option. - * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback. - * @private - */ - _merger: function(key, target, source, options) { - var tval = target[key]; - var sval = source[key]; - - if (helpers.isObject(tval) && helpers.isObject(sval)) { - helpers.merge(tval, sval, options); - } else { - target[key] = helpers.clone(sval); - } - }, - - /** - * Merges source[key] in target[key] only if target[key] is undefined. - * @private - */ - _mergerIf: function(key, target, source) { - var tval = target[key]; - var sval = source[key]; - - if (helpers.isObject(tval) && helpers.isObject(sval)) { - helpers.mergeIf(tval, sval); - } else if (!target.hasOwnProperty(key)) { - target[key] = helpers.clone(sval); - } - }, - - /** - * Recursively deep copies `source` properties into `target` with the given `options`. - * IMPORTANT: `target` is not cloned and will be updated with `source` properties. - * @param {object} target - The target object in which all sources are merged into. - * @param {object|object[]} source - Object(s) to merge into `target`. - * @param {object} [options] - Merging options: - * @param {function} [options.merger] - The merge method (key, target, source, options) - * @returns {object} The `target` object. - */ - merge: function(target, source, options) { - var sources = helpers.isArray(source) ? source : [source]; - var ilen = sources.length; - var merge, i, keys, klen, k; - - if (!helpers.isObject(target)) { - return target; - } - - options = options || {}; - merge = options.merger || helpers._merger; - - for (i = 0; i < ilen; ++i) { - source = sources[i]; - if (!helpers.isObject(source)) { - continue; - } - - keys = Object.keys(source); - for (k = 0, klen = keys.length; k < klen; ++k) { - merge(keys[k], target, source, options); - } - } - - return target; - }, - - /** - * Recursively deep copies `source` properties into `target` *only* if not defined in target. - * IMPORTANT: `target` is not cloned and will be updated with `source` properties. - * @param {object} target - The target object in which all sources are merged into. - * @param {object|object[]} source - Object(s) to merge into `target`. - * @returns {object} The `target` object. - */ - mergeIf: function(target, source) { - return helpers.merge(target, source, {merger: helpers._mergerIf}); - }, - - /** - * Applies the contents of two or more objects together into the first object. - * @param {object} target - The target object in which all objects are merged into. - * @param {object} arg1 - Object containing additional properties to merge in target. - * @param {object} argN - Additional objects containing properties to merge in target. - * @returns {object} The `target` object. - */ - extend: Object.assign || function(target) { - return helpers.merge(target, [].slice.call(arguments, 1), { - merger: function(key, dst, src) { - dst[key] = src[key]; - } - }); - }, - - /** - * Basic javascript inheritance based on the model created in Backbone.js - */ - inherits: function(extensions) { - var me = this; - var ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() { - return me.apply(this, arguments); - }; - - var Surrogate = function() { - this.constructor = ChartElement; - }; - - Surrogate.prototype = me.prototype; - ChartElement.prototype = new Surrogate(); - ChartElement.extend = helpers.inherits; - - if (extensions) { - helpers.extend(ChartElement.prototype, extensions); - } - - ChartElement.__super__ = me.prototype; - return ChartElement; - }, - - _deprecated: function(scope, value, previous, current) { - if (value !== undefined) { - console.warn(scope + ': "' + previous + - '" is deprecated. Please use "' + current + '" instead'); - } - } -}; - -var helpers_core = helpers; - -// DEPRECATIONS - -/** - * Provided for backward compatibility, use Chart.helpers.callback instead. - * @function Chart.helpers.callCallback - * @deprecated since version 2.6.0 - * @todo remove at version 3 - * @private - */ -helpers.callCallback = helpers.callback; - -/** - * Provided for backward compatibility, use Array.prototype.indexOf instead. - * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+ - * @function Chart.helpers.indexOf - * @deprecated since version 2.7.0 - * @todo remove at version 3 - * @private - */ -helpers.indexOf = function(array, item, fromIndex) { - return Array.prototype.indexOf.call(array, item, fromIndex); -}; - -/** - * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead. - * @function Chart.helpers.getValueOrDefault - * @deprecated since version 2.7.0 - * @todo remove at version 3 - * @private - */ -helpers.getValueOrDefault = helpers.valueOrDefault; - -/** - * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead. - * @function Chart.helpers.getValueAtIndexOrDefault - * @deprecated since version 2.7.0 - * @todo remove at version 3 - * @private - */ -helpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault; - -/** - * Easing functions adapted from Robert Penner's easing equations. - * @namespace Chart.helpers.easingEffects - * @see http://www.robertpenner.com/easing/ - */ -var effects = { - linear: function(t) { - return t; - }, - - easeInQuad: function(t) { - return t * t; - }, - - easeOutQuad: function(t) { - return -t * (t - 2); - }, - - easeInOutQuad: function(t) { - if ((t /= 0.5) < 1) { - return 0.5 * t * t; - } - return -0.5 * ((--t) * (t - 2) - 1); - }, - - easeInCubic: function(t) { - return t * t * t; - }, - - easeOutCubic: function(t) { - return (t = t - 1) * t * t + 1; - }, - - easeInOutCubic: function(t) { - if ((t /= 0.5) < 1) { - return 0.5 * t * t * t; - } - return 0.5 * ((t -= 2) * t * t + 2); - }, - - easeInQuart: function(t) { - return t * t * t * t; - }, - - easeOutQuart: function(t) { - return -((t = t - 1) * t * t * t - 1); - }, - - easeInOutQuart: function(t) { - if ((t /= 0.5) < 1) { - return 0.5 * t * t * t * t; - } - return -0.5 * ((t -= 2) * t * t * t - 2); - }, - - easeInQuint: function(t) { - return t * t * t * t * t; - }, - - easeOutQuint: function(t) { - return (t = t - 1) * t * t * t * t + 1; - }, - - easeInOutQuint: function(t) { - if ((t /= 0.5) < 1) { - return 0.5 * t * t * t * t * t; - } - return 0.5 * ((t -= 2) * t * t * t * t + 2); - }, - - easeInSine: function(t) { - return -Math.cos(t * (Math.PI / 2)) + 1; - }, - - easeOutSine: function(t) { - return Math.sin(t * (Math.PI / 2)); - }, - - easeInOutSine: function(t) { - return -0.5 * (Math.cos(Math.PI * t) - 1); - }, - - easeInExpo: function(t) { - return (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)); - }, - - easeOutExpo: function(t) { - return (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1; - }, - - easeInOutExpo: function(t) { - if (t === 0) { - return 0; - } - if (t === 1) { - return 1; - } - if ((t /= 0.5) < 1) { - return 0.5 * Math.pow(2, 10 * (t - 1)); - } - return 0.5 * (-Math.pow(2, -10 * --t) + 2); - }, - - easeInCirc: function(t) { - if (t >= 1) { - return t; - } - return -(Math.sqrt(1 - t * t) - 1); - }, - - easeOutCirc: function(t) { - return Math.sqrt(1 - (t = t - 1) * t); - }, - - easeInOutCirc: function(t) { - if ((t /= 0.5) < 1) { - return -0.5 * (Math.sqrt(1 - t * t) - 1); - } - return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1); - }, - - easeInElastic: function(t) { - var s = 1.70158; - var p = 0; - var a = 1; - if (t === 0) { - return 0; - } - if (t === 1) { - return 1; - } - if (!p) { - p = 0.3; - } - if (a < 1) { - a = 1; - s = p / 4; - } else { - s = p / (2 * Math.PI) * Math.asin(1 / a); - } - return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p)); - }, - - easeOutElastic: function(t) { - var s = 1.70158; - var p = 0; - var a = 1; - if (t === 0) { - return 0; - } - if (t === 1) { - return 1; - } - if (!p) { - p = 0.3; - } - if (a < 1) { - a = 1; - s = p / 4; - } else { - s = p / (2 * Math.PI) * Math.asin(1 / a); - } - return a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1; - }, - - easeInOutElastic: function(t) { - var s = 1.70158; - var p = 0; - var a = 1; - if (t === 0) { - return 0; - } - if ((t /= 0.5) === 2) { - return 1; - } - if (!p) { - p = 0.45; - } - if (a < 1) { - a = 1; - s = p / 4; - } else { - s = p / (2 * Math.PI) * Math.asin(1 / a); - } - if (t < 1) { - return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p)); - } - return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1; - }, - easeInBack: function(t) { - var s = 1.70158; - return t * t * ((s + 1) * t - s); - }, - - easeOutBack: function(t) { - var s = 1.70158; - return (t = t - 1) * t * ((s + 1) * t + s) + 1; - }, - - easeInOutBack: function(t) { - var s = 1.70158; - if ((t /= 0.5) < 1) { - return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s)); - } - return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2); - }, - - easeInBounce: function(t) { - return 1 - effects.easeOutBounce(1 - t); - }, - - easeOutBounce: function(t) { - if (t < (1 / 2.75)) { - return 7.5625 * t * t; - } - if (t < (2 / 2.75)) { - return 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75; - } - if (t < (2.5 / 2.75)) { - return 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375; - } - return 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375; - }, - - easeInOutBounce: function(t) { - if (t < 0.5) { - return effects.easeInBounce(t * 2) * 0.5; - } - return effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5; - } -}; - -var helpers_easing = { - effects: effects -}; - -// DEPRECATIONS - -/** - * Provided for backward compatibility, use Chart.helpers.easing.effects instead. - * @function Chart.helpers.easingEffects - * @deprecated since version 2.7.0 - * @todo remove at version 3 - * @private - */ -helpers_core.easingEffects = effects; - -var PI = Math.PI; -var RAD_PER_DEG = PI / 180; -var DOUBLE_PI = PI * 2; -var HALF_PI = PI / 2; -var QUARTER_PI = PI / 4; -var TWO_THIRDS_PI = PI * 2 / 3; - -/** - * @namespace Chart.helpers.canvas - */ -var exports$1 = { - /** - * Clears the entire canvas associated to the given `chart`. - * @param {Chart} chart - The chart for which to clear the canvas. - */ - clear: function(chart) { - chart.ctx.clearRect(0, 0, chart.width, chart.height); - }, - - /** - * Creates a "path" for a rectangle with rounded corners at position (x, y) with a - * given size (width, height) and the same `radius` for all corners. - * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context. - * @param {number} x - The x axis of the coordinate for the rectangle starting point. - * @param {number} y - The y axis of the coordinate for the rectangle starting point. - * @param {number} width - The rectangle's width. - * @param {number} height - The rectangle's height. - * @param {number} radius - The rounded amount (in pixels) for the four corners. - * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object? - */ - roundedRect: function(ctx, x, y, width, height, radius) { - if (radius) { - var r = Math.min(radius, height / 2, width / 2); - var left = x + r; - var top = y + r; - var right = x + width - r; - var bottom = y + height - r; - - ctx.moveTo(x, top); - if (left < right && top < bottom) { - ctx.arc(left, top, r, -PI, -HALF_PI); - ctx.arc(right, top, r, -HALF_PI, 0); - ctx.arc(right, bottom, r, 0, HALF_PI); - ctx.arc(left, bottom, r, HALF_PI, PI); - } else if (left < right) { - ctx.moveTo(left, y); - ctx.arc(right, top, r, -HALF_PI, HALF_PI); - ctx.arc(left, top, r, HALF_PI, PI + HALF_PI); - } else if (top < bottom) { - ctx.arc(left, top, r, -PI, 0); - ctx.arc(left, bottom, r, 0, PI); - } else { - ctx.arc(left, top, r, -PI, PI); - } - ctx.closePath(); - ctx.moveTo(x, y); - } else { - ctx.rect(x, y, width, height); - } - }, - - drawPoint: function(ctx, style, radius, x, y, rotation) { - var type, xOffset, yOffset, size, cornerRadius; - var rad = (rotation || 0) * RAD_PER_DEG; - - if (style && typeof style === 'object') { - type = style.toString(); - if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') { - ctx.save(); - ctx.translate(x, y); - ctx.rotate(rad); - ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height); - ctx.restore(); - return; - } - } - - if (isNaN(radius) || radius <= 0) { - return; - } - - ctx.beginPath(); - - switch (style) { - // Default includes circle - default: - ctx.arc(x, y, radius, 0, DOUBLE_PI); - ctx.closePath(); - break; - case 'triangle': - ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); - rad += TWO_THIRDS_PI; - ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); - rad += TWO_THIRDS_PI; - ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); - ctx.closePath(); - break; - case 'rectRounded': - // NOTE: the rounded rect implementation changed to use `arc` instead of - // `quadraticCurveTo` since it generates better results when rect is - // almost a circle. 0.516 (instead of 0.5) produces results with visually - // closer proportion to the previous impl and it is inscribed in the - // circle with `radius`. For more details, see the following PRs: - // https://github.com/chartjs/Chart.js/issues/5597 - // https://github.com/chartjs/Chart.js/issues/5858 - cornerRadius = radius * 0.516; - size = radius - cornerRadius; - xOffset = Math.cos(rad + QUARTER_PI) * size; - yOffset = Math.sin(rad + QUARTER_PI) * size; - ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI); - ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad); - ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI); - ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI); - ctx.closePath(); - break; - case 'rect': - if (!rotation) { - size = Math.SQRT1_2 * radius; - ctx.rect(x - size, y - size, 2 * size, 2 * size); - break; - } - rad += QUARTER_PI; - /* falls through */ - case 'rectRot': - xOffset = Math.cos(rad) * radius; - yOffset = Math.sin(rad) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + yOffset, y - xOffset); - ctx.lineTo(x + xOffset, y + yOffset); - ctx.lineTo(x - yOffset, y + xOffset); - ctx.closePath(); - break; - case 'crossRot': - rad += QUARTER_PI; - /* falls through */ - case 'cross': - xOffset = Math.cos(rad) * radius; - yOffset = Math.sin(rad) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + xOffset, y + yOffset); - ctx.moveTo(x + yOffset, y - xOffset); - ctx.lineTo(x - yOffset, y + xOffset); - break; - case 'star': - xOffset = Math.cos(rad) * radius; - yOffset = Math.sin(rad) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + xOffset, y + yOffset); - ctx.moveTo(x + yOffset, y - xOffset); - ctx.lineTo(x - yOffset, y + xOffset); - rad += QUARTER_PI; - xOffset = Math.cos(rad) * radius; - yOffset = Math.sin(rad) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + xOffset, y + yOffset); - ctx.moveTo(x + yOffset, y - xOffset); - ctx.lineTo(x - yOffset, y + xOffset); - break; - case 'line': - xOffset = Math.cos(rad) * radius; - yOffset = Math.sin(rad) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + xOffset, y + yOffset); - break; - case 'dash': - ctx.moveTo(x, y); - ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius); - break; - } - - ctx.fill(); - ctx.stroke(); - }, - - /** - * Returns true if the point is inside the rectangle - * @param {object} point - The point to test - * @param {object} area - The rectangle - * @returns {boolean} - * @private - */ - _isPointInArea: function(point, area) { - var epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error. - - return point.x > area.left - epsilon && point.x < area.right + epsilon && - point.y > area.top - epsilon && point.y < area.bottom + epsilon; - }, - - clipArea: function(ctx, area) { - ctx.save(); - ctx.beginPath(); - ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top); - ctx.clip(); - }, - - unclipArea: function(ctx) { - ctx.restore(); - }, - - lineTo: function(ctx, previous, target, flip) { - var stepped = target.steppedLine; - if (stepped) { - if (stepped === 'middle') { - var midpoint = (previous.x + target.x) / 2.0; - ctx.lineTo(midpoint, flip ? target.y : previous.y); - ctx.lineTo(midpoint, flip ? previous.y : target.y); - } else if ((stepped === 'after' && !flip) || (stepped !== 'after' && flip)) { - ctx.lineTo(previous.x, target.y); - } else { - ctx.lineTo(target.x, previous.y); - } - ctx.lineTo(target.x, target.y); - return; - } - - if (!target.tension) { - ctx.lineTo(target.x, target.y); - return; - } - - ctx.bezierCurveTo( - flip ? previous.controlPointPreviousX : previous.controlPointNextX, - flip ? previous.controlPointPreviousY : previous.controlPointNextY, - flip ? target.controlPointNextX : target.controlPointPreviousX, - flip ? target.controlPointNextY : target.controlPointPreviousY, - target.x, - target.y); - } -}; - -var helpers_canvas = exports$1; - -// DEPRECATIONS - -/** - * Provided for backward compatibility, use Chart.helpers.canvas.clear instead. - * @namespace Chart.helpers.clear - * @deprecated since version 2.7.0 - * @todo remove at version 3 - * @private - */ -helpers_core.clear = exports$1.clear; - -/** - * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead. - * @namespace Chart.helpers.drawRoundedRectangle - * @deprecated since version 2.7.0 - * @todo remove at version 3 - * @private - */ -helpers_core.drawRoundedRectangle = function(ctx) { - ctx.beginPath(); - exports$1.roundedRect.apply(exports$1, arguments); -}; - -var defaults = { - /** - * @private - */ - _set: function(scope, values) { - return helpers_core.merge(this[scope] || (this[scope] = {}), values); - } -}; - -// TODO(v3): remove 'global' from namespace. all default are global and -// there's inconsistency around which options are under 'global' -defaults._set('global', { - defaultColor: 'rgba(0,0,0,0.1)', - defaultFontColor: '#666', - defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", - defaultFontSize: 12, - defaultFontStyle: 'normal', - defaultLineHeight: 1.2, - showLines: true -}); - -var core_defaults = defaults; - -var valueOrDefault = helpers_core.valueOrDefault; - -/** - * Converts the given font object into a CSS font string. - * @param {object} font - A font object. - * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font - * @private - */ -function toFontString(font) { - if (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) { - return null; - } - - return (font.style ? font.style + ' ' : '') - + (font.weight ? font.weight + ' ' : '') - + font.size + 'px ' - + font.family; -} - -/** - * @alias Chart.helpers.options - * @namespace - */ -var helpers_options = { - /** - * Converts the given line height `value` in pixels for a specific font `size`. - * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em'). - * @param {number} size - The font size (in pixels) used to resolve relative `value`. - * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid). - * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height - * @since 2.7.0 - */ - toLineHeight: function(value, size) { - var matches = ('' + value).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/); - if (!matches || matches[1] === 'normal') { - return size * 1.2; - } - - value = +matches[2]; - - switch (matches[3]) { - case 'px': - return value; - case '%': - value /= 100; - break; - } - - return size * value; - }, - - /** - * Converts the given value into a padding object with pre-computed width/height. - * @param {number|object} value - If a number, set the value to all TRBL component, - * else, if and object, use defined properties and sets undefined ones to 0. - * @returns {object} The padding values (top, right, bottom, left, width, height) - * @since 2.7.0 - */ - toPadding: function(value) { - var t, r, b, l; - - if (helpers_core.isObject(value)) { - t = +value.top || 0; - r = +value.right || 0; - b = +value.bottom || 0; - l = +value.left || 0; - } else { - t = r = b = l = +value || 0; - } - - return { - top: t, - right: r, - bottom: b, - left: l, - height: t + b, - width: l + r - }; - }, - - /** - * Parses font options and returns the font object. - * @param {object} options - A object that contains font options to be parsed. - * @return {object} The font object. - * @todo Support font.* options and renamed to toFont(). - * @private - */ - _parseFont: function(options) { - var globalDefaults = core_defaults.global; - var size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize); - var font = { - family: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily), - lineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size), - size: size, - style: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle), - weight: null, - string: '' - }; - - font.string = toFontString(font); - return font; - }, - - /** - * Evaluates the given `inputs` sequentially and returns the first defined value. - * @param {Array} inputs - An array of values, falling back to the last value. - * @param {object} [context] - If defined and the current value is a function, the value - * is called with `context` as first argument and the result becomes the new input. - * @param {number} [index] - If defined and the current value is an array, the value - * at `index` become the new input. - * @param {object} [info] - object to return information about resolution in - * @param {boolean} [info.cacheable] - Will be set to `false` if option is not cacheable. - * @since 2.7.0 - */ - resolve: function(inputs, context, index, info) { - var cacheable = true; - var i, ilen, value; - - for (i = 0, ilen = inputs.length; i < ilen; ++i) { - value = inputs[i]; - if (value === undefined) { - continue; - } - if (context !== undefined && typeof value === 'function') { - value = value(context); - cacheable = false; - } - if (index !== undefined && helpers_core.isArray(value)) { - value = value[index]; - cacheable = false; - } - if (value !== undefined) { - if (info && !cacheable) { - info.cacheable = false; - } - return value; - } - } - } -}; - -/** - * @alias Chart.helpers.math - * @namespace - */ -var exports$2 = { - /** - * Returns an array of factors sorted from 1 to sqrt(value) - * @private - */ - _factorize: function(value) { - var result = []; - var sqrt = Math.sqrt(value); - var i; - - for (i = 1; i < sqrt; i++) { - if (value % i === 0) { - result.push(i); - result.push(value / i); - } - } - if (sqrt === (sqrt | 0)) { // if value is a square number - result.push(sqrt); - } - - result.sort(function(a, b) { - return a - b; - }).pop(); - return result; - }, - - log10: Math.log10 || function(x) { - var exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10. - // Check for whole powers of 10, - // which due to floating point rounding error should be corrected. - var powerOf10 = Math.round(exponent); - var isPowerOf10 = x === Math.pow(10, powerOf10); - - return isPowerOf10 ? powerOf10 : exponent; - } -}; - -var helpers_math = exports$2; - -// DEPRECATIONS - -/** - * Provided for backward compatibility, use Chart.helpers.math.log10 instead. - * @namespace Chart.helpers.log10 - * @deprecated since version 2.9.0 - * @todo remove at version 3 - * @private - */ -helpers_core.log10 = exports$2.log10; - -var getRtlAdapter = function(rectX, width) { - return { - x: function(x) { - return rectX + rectX + width - x; - }, - setWidth: function(w) { - width = w; - }, - textAlign: function(align) { - if (align === 'center') { - return align; - } - return align === 'right' ? 'left' : 'right'; - }, - xPlus: function(x, value) { - return x - value; - }, - leftForLtr: function(x, itemWidth) { - return x - itemWidth; - }, - }; -}; - -var getLtrAdapter = function() { - return { - x: function(x) { - return x; - }, - setWidth: function(w) { // eslint-disable-line no-unused-vars - }, - textAlign: function(align) { - return align; - }, - xPlus: function(x, value) { - return x + value; - }, - leftForLtr: function(x, _itemWidth) { // eslint-disable-line no-unused-vars - return x; - }, - }; -}; - -var getAdapter = function(rtl, rectX, width) { - return rtl ? getRtlAdapter(rectX, width) : getLtrAdapter(); -}; - -var overrideTextDirection = function(ctx, direction) { - var style, original; - if (direction === 'ltr' || direction === 'rtl') { - style = ctx.canvas.style; - original = [ - style.getPropertyValue('direction'), - style.getPropertyPriority('direction'), - ]; - - style.setProperty('direction', direction, 'important'); - ctx.prevTextDirection = original; - } -}; - -var restoreTextDirection = function(ctx) { - var original = ctx.prevTextDirection; - if (original !== undefined) { - delete ctx.prevTextDirection; - ctx.canvas.style.setProperty('direction', original[0], original[1]); - } -}; - -var helpers_rtl = { - getRtlAdapter: getAdapter, - overrideTextDirection: overrideTextDirection, - restoreTextDirection: restoreTextDirection, -}; - -var helpers$1 = helpers_core; -var easing = helpers_easing; -var canvas = helpers_canvas; -var options = helpers_options; -var math = helpers_math; -var rtl = helpers_rtl; -helpers$1.easing = easing; -helpers$1.canvas = canvas; -helpers$1.options = options; -helpers$1.math = math; -helpers$1.rtl = rtl; - -function interpolate(start, view, model, ease) { - var keys = Object.keys(model); - var i, ilen, key, actual, origin, target, type, c0, c1; - - for (i = 0, ilen = keys.length; i < ilen; ++i) { - key = keys[i]; - - target = model[key]; - - // if a value is added to the model after pivot() has been called, the view - // doesn't contain it, so let's initialize the view to the target value. - if (!view.hasOwnProperty(key)) { - view[key] = target; - } - - actual = view[key]; - - if (actual === target || key[0] === '_') { - continue; - } - - if (!start.hasOwnProperty(key)) { - start[key] = actual; - } - - origin = start[key]; - - type = typeof target; - - if (type === typeof origin) { - if (type === 'string') { - c0 = chartjsColor(origin); - if (c0.valid) { - c1 = chartjsColor(target); - if (c1.valid) { - view[key] = c1.mix(c0, ease).rgbString(); - continue; - } - } - } else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) { - view[key] = origin + (target - origin) * ease; - continue; - } - } - - view[key] = target; - } -} - -var Element = function(configuration) { - helpers$1.extend(this, configuration); - this.initialize.apply(this, arguments); -}; - -helpers$1.extend(Element.prototype, { - _type: undefined, - - initialize: function() { - this.hidden = false; - }, - - pivot: function() { - var me = this; - if (!me._view) { - me._view = helpers$1.extend({}, me._model); - } - me._start = {}; - return me; - }, - - transition: function(ease) { - var me = this; - var model = me._model; - var start = me._start; - var view = me._view; - - // No animation -> No Transition - if (!model || ease === 1) { - me._view = helpers$1.extend({}, model); - me._start = null; - return me; - } - - if (!view) { - view = me._view = {}; - } - - if (!start) { - start = me._start = {}; - } - - interpolate(start, view, model, ease); - - return me; - }, - - tooltipPosition: function() { - return { - x: this._model.x, - y: this._model.y - }; - }, - - hasValue: function() { - return helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y); - } -}); - -Element.extend = helpers$1.inherits; - -var core_element = Element; - -var exports$3 = core_element.extend({ - chart: null, // the animation associated chart instance - currentStep: 0, // the current animation step - numSteps: 60, // default number of steps - easing: '', // the easing to use for this animation - render: null, // render function used by the animation service - - onAnimationProgress: null, // user specified callback to fire on each step of the animation - onAnimationComplete: null, // user specified callback to fire when the animation finishes -}); - -var core_animation = exports$3; - -// DEPRECATIONS - -/** - * Provided for backward compatibility, use Chart.Animation instead - * @prop Chart.Animation#animationObject - * @deprecated since version 2.6.0 - * @todo remove at version 3 - */ -Object.defineProperty(exports$3.prototype, 'animationObject', { - get: function() { - return this; - } -}); - -/** - * Provided for backward compatibility, use Chart.Animation#chart instead - * @prop Chart.Animation#chartInstance - * @deprecated since version 2.6.0 - * @todo remove at version 3 - */ -Object.defineProperty(exports$3.prototype, 'chartInstance', { - get: function() { - return this.chart; - }, - set: function(value) { - this.chart = value; - } -}); - -core_defaults._set('global', { - animation: { - duration: 1000, - easing: 'easeOutQuart', - onProgress: helpers$1.noop, - onComplete: helpers$1.noop - } -}); - -var core_animations = { - animations: [], - request: null, - - /** - * @param {Chart} chart - The chart to animate. - * @param {Chart.Animation} animation - The animation that we will animate. - * @param {number} duration - The animation duration in ms. - * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions - */ - addAnimation: function(chart, animation, duration, lazy) { - var animations = this.animations; - var i, ilen; - - animation.chart = chart; - animation.startTime = Date.now(); - animation.duration = duration; - - if (!lazy) { - chart.animating = true; - } - - for (i = 0, ilen = animations.length; i < ilen; ++i) { - if (animations[i].chart === chart) { - animations[i] = animation; - return; - } - } - - animations.push(animation); - - // If there are no animations queued, manually kickstart a digest, for lack of a better word - if (animations.length === 1) { - this.requestAnimationFrame(); - } - }, - - cancelAnimation: function(chart) { - var index = helpers$1.findIndex(this.animations, function(animation) { - return animation.chart === chart; - }); - - if (index !== -1) { - this.animations.splice(index, 1); - chart.animating = false; - } - }, - - requestAnimationFrame: function() { - var me = this; - if (me.request === null) { - // Skip animation frame requests until the active one is executed. - // This can happen when processing mouse events, e.g. 'mousemove' - // and 'mouseout' events will trigger multiple renders. - me.request = helpers$1.requestAnimFrame.call(window, function() { - me.request = null; - me.startDigest(); - }); - } - }, - - /** - * @private - */ - startDigest: function() { - var me = this; - - me.advance(); - - // Do we have more stuff to animate? - if (me.animations.length > 0) { - me.requestAnimationFrame(); - } - }, - - /** - * @private - */ - advance: function() { - var animations = this.animations; - var animation, chart, numSteps, nextStep; - var i = 0; - - // 1 animation per chart, so we are looping charts here - while (i < animations.length) { - animation = animations[i]; - chart = animation.chart; - numSteps = animation.numSteps; - - // Make sure that currentStep starts at 1 - // https://github.com/chartjs/Chart.js/issues/6104 - nextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1; - animation.currentStep = Math.min(nextStep, numSteps); - - helpers$1.callback(animation.render, [chart, animation], chart); - helpers$1.callback(animation.onAnimationProgress, [animation], chart); - - if (animation.currentStep >= numSteps) { - helpers$1.callback(animation.onAnimationComplete, [animation], chart); - chart.animating = false; - animations.splice(i, 1); - } else { - ++i; - } - } - } -}; - -var resolve = helpers$1.options.resolve; - -var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift']; - -/** - * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice', - * 'unshift') and notify the listener AFTER the array has been altered. Listeners are - * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments. - */ -function listenArrayEvents(array, listener) { - if (array._chartjs) { - array._chartjs.listeners.push(listener); - return; - } - - Object.defineProperty(array, '_chartjs', { - configurable: true, - enumerable: false, - value: { - listeners: [listener] - } - }); - - arrayEvents.forEach(function(key) { - var method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1); - var base = array[key]; - - Object.defineProperty(array, key, { - configurable: true, - enumerable: false, - value: function() { - var args = Array.prototype.slice.call(arguments); - var res = base.apply(this, args); - - helpers$1.each(array._chartjs.listeners, function(object) { - if (typeof object[method] === 'function') { - object[method].apply(object, args); - } - }); - - return res; - } - }); - }); -} - -/** - * Removes the given array event listener and cleanup extra attached properties (such as - * the _chartjs stub and overridden methods) if array doesn't have any more listeners. - */ -function unlistenArrayEvents(array, listener) { - var stub = array._chartjs; - if (!stub) { - return; - } - - var listeners = stub.listeners; - var index = listeners.indexOf(listener); - if (index !== -1) { - listeners.splice(index, 1); - } - - if (listeners.length > 0) { - return; - } - - arrayEvents.forEach(function(key) { - delete array[key]; - }); - - delete array._chartjs; -} - -// Base class for all dataset controllers (line, bar, etc) -var DatasetController = function(chart, datasetIndex) { - this.initialize(chart, datasetIndex); -}; - -helpers$1.extend(DatasetController.prototype, { - - /** - * Element type used to generate a meta dataset (e.g. Chart.element.Line). - * @type {Chart.core.element} - */ - datasetElementType: null, - - /** - * Element type used to generate a meta data (e.g. Chart.element.Point). - * @type {Chart.core.element} - */ - dataElementType: null, - - /** - * Dataset element option keys to be resolved in _resolveDatasetElementOptions. - * A derived controller may override this to resolve controller-specific options. - * The keys defined here are for backward compatibility for legend styles. - * @private - */ - _datasetElementOptions: [ - 'backgroundColor', - 'borderCapStyle', - 'borderColor', - 'borderDash', - 'borderDashOffset', - 'borderJoinStyle', - 'borderWidth' - ], - - /** - * Data element option keys to be resolved in _resolveDataElementOptions. - * A derived controller may override this to resolve controller-specific options. - * The keys defined here are for backward compatibility for legend styles. - * @private - */ - _dataElementOptions: [ - 'backgroundColor', - 'borderColor', - 'borderWidth', - 'pointStyle' - ], - - initialize: function(chart, datasetIndex) { - var me = this; - me.chart = chart; - me.index = datasetIndex; - me.linkScales(); - me.addElements(); - me._type = me.getMeta().type; - }, - - updateIndex: function(datasetIndex) { - this.index = datasetIndex; - }, - - linkScales: function() { - var me = this; - var meta = me.getMeta(); - var chart = me.chart; - var scales = chart.scales; - var dataset = me.getDataset(); - var scalesOpts = chart.options.scales; - - if (meta.xAxisID === null || !(meta.xAxisID in scales) || dataset.xAxisID) { - meta.xAxisID = dataset.xAxisID || scalesOpts.xAxes[0].id; - } - if (meta.yAxisID === null || !(meta.yAxisID in scales) || dataset.yAxisID) { - meta.yAxisID = dataset.yAxisID || scalesOpts.yAxes[0].id; - } - }, - - getDataset: function() { - return this.chart.data.datasets[this.index]; - }, - - getMeta: function() { - return this.chart.getDatasetMeta(this.index); - }, - - getScaleForId: function(scaleID) { - return this.chart.scales[scaleID]; - }, - - /** - * @private - */ - _getValueScaleId: function() { - return this.getMeta().yAxisID; - }, - - /** - * @private - */ - _getIndexScaleId: function() { - return this.getMeta().xAxisID; - }, - - /** - * @private - */ - _getValueScale: function() { - return this.getScaleForId(this._getValueScaleId()); - }, - - /** - * @private - */ - _getIndexScale: function() { - return this.getScaleForId(this._getIndexScaleId()); - }, - - reset: function() { - this._update(true); - }, - - /** - * @private - */ - destroy: function() { - if (this._data) { - unlistenArrayEvents(this._data, this); - } - }, - - createMetaDataset: function() { - var me = this; - var type = me.datasetElementType; - return type && new type({ - _chart: me.chart, - _datasetIndex: me.index - }); - }, - - createMetaData: function(index) { - var me = this; - var type = me.dataElementType; - return type && new type({ - _chart: me.chart, - _datasetIndex: me.index, - _index: index - }); - }, - - addElements: function() { - var me = this; - var meta = me.getMeta(); - var data = me.getDataset().data || []; - var metaData = meta.data; - var i, ilen; - - for (i = 0, ilen = data.length; i < ilen; ++i) { - metaData[i] = metaData[i] || me.createMetaData(i); - } - - meta.dataset = meta.dataset || me.createMetaDataset(); - }, - - addElementAndReset: function(index) { - var element = this.createMetaData(index); - this.getMeta().data.splice(index, 0, element); - this.updateElement(element, index, true); - }, - - buildOrUpdateElements: function() { - var me = this; - var dataset = me.getDataset(); - var data = dataset.data || (dataset.data = []); - - // In order to correctly handle data addition/deletion animation (an thus simulate - // real-time charts), we need to monitor these data modifications and synchronize - // the internal meta data accordingly. - if (me._data !== data) { - if (me._data) { - // This case happens when the user replaced the data array instance. - unlistenArrayEvents(me._data, me); - } - - if (data && Object.isExtensible(data)) { - listenArrayEvents(data, me); - } - me._data = data; - } - - // Re-sync meta data in case the user replaced the data array or if we missed - // any updates and so make sure that we handle number of datapoints changing. - me.resyncElements(); - }, - - /** - * Returns the merged user-supplied and default dataset-level options - * @private - */ - _configure: function() { - var me = this; - me._config = helpers$1.merge({}, [ - me.chart.options.datasets[me._type], - me.getDataset(), - ], { - merger: function(key, target, source) { - if (key !== '_meta' && key !== 'data') { - helpers$1._merger(key, target, source); - } - } - }); - }, - - _update: function(reset) { - var me = this; - me._configure(); - me._cachedDataOpts = null; - me.update(reset); - }, - - update: helpers$1.noop, - - transition: function(easingValue) { - var meta = this.getMeta(); - var elements = meta.data || []; - var ilen = elements.length; - var i = 0; - - for (; i < ilen; ++i) { - elements[i].transition(easingValue); - } - - if (meta.dataset) { - meta.dataset.transition(easingValue); - } - }, - - draw: function() { - var meta = this.getMeta(); - var elements = meta.data || []; - var ilen = elements.length; - var i = 0; - - if (meta.dataset) { - meta.dataset.draw(); - } - - for (; i < ilen; ++i) { - elements[i].draw(); - } - }, - - /** - * Returns a set of predefined style properties that should be used to represent the dataset - * or the data if the index is specified - * @param {number} index - data index - * @return {IStyleInterface} style object - */ - getStyle: function(index) { - var me = this; - var meta = me.getMeta(); - var dataset = meta.dataset; - var style; - - me._configure(); - if (dataset && index === undefined) { - style = me._resolveDatasetElementOptions(dataset || {}); - } else { - index = index || 0; - style = me._resolveDataElementOptions(meta.data[index] || {}, index); - } - - if (style.fill === false || style.fill === null) { - style.backgroundColor = style.borderColor; - } - - return style; - }, - - /** - * @private - */ - _resolveDatasetElementOptions: function(element, hover) { - var me = this; - var chart = me.chart; - var datasetOpts = me._config; - var custom = element.custom || {}; - var options = chart.options.elements[me.datasetElementType.prototype._type] || {}; - var elementOptions = me._datasetElementOptions; - var values = {}; - var i, ilen, key, readKey; - - // Scriptable options - var context = { - chart: chart, - dataset: me.getDataset(), - datasetIndex: me.index, - hover: hover - }; - - for (i = 0, ilen = elementOptions.length; i < ilen; ++i) { - key = elementOptions[i]; - readKey = hover ? 'hover' + key.charAt(0).toUpperCase() + key.slice(1) : key; - values[key] = resolve([ - custom[readKey], - datasetOpts[readKey], - options[readKey] - ], context); - } - - return values; - }, - - /** - * @private - */ - _resolveDataElementOptions: function(element, index) { - var me = this; - var custom = element && element.custom; - var cached = me._cachedDataOpts; - if (cached && !custom) { - return cached; - } - var chart = me.chart; - var datasetOpts = me._config; - var options = chart.options.elements[me.dataElementType.prototype._type] || {}; - var elementOptions = me._dataElementOptions; - var values = {}; - - // Scriptable options - var context = { - chart: chart, - dataIndex: index, - dataset: me.getDataset(), - datasetIndex: me.index - }; - - // `resolve` sets cacheable to `false` if any option is indexed or scripted - var info = {cacheable: !custom}; - - var keys, i, ilen, key; - - custom = custom || {}; - - if (helpers$1.isArray(elementOptions)) { - for (i = 0, ilen = elementOptions.length; i < ilen; ++i) { - key = elementOptions[i]; - values[key] = resolve([ - custom[key], - datasetOpts[key], - options[key] - ], context, index, info); - } - } else { - keys = Object.keys(elementOptions); - for (i = 0, ilen = keys.length; i < ilen; ++i) { - key = keys[i]; - values[key] = resolve([ - custom[key], - datasetOpts[elementOptions[key]], - datasetOpts[key], - options[key] - ], context, index, info); - } - } - - if (info.cacheable) { - me._cachedDataOpts = Object.freeze(values); - } - - return values; - }, - - removeHoverStyle: function(element) { - helpers$1.merge(element._model, element.$previousStyle || {}); - delete element.$previousStyle; - }, - - setHoverStyle: function(element) { - var dataset = this.chart.data.datasets[element._datasetIndex]; - var index = element._index; - var custom = element.custom || {}; - var model = element._model; - var getHoverColor = helpers$1.getHoverColor; - - element.$previousStyle = { - backgroundColor: model.backgroundColor, - borderColor: model.borderColor, - borderWidth: model.borderWidth - }; - - model.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index); - model.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index); - model.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index); - }, - - /** - * @private - */ - _removeDatasetHoverStyle: function() { - var element = this.getMeta().dataset; - - if (element) { - this.removeHoverStyle(element); - } - }, - - /** - * @private - */ - _setDatasetHoverStyle: function() { - var element = this.getMeta().dataset; - var prev = {}; - var i, ilen, key, keys, hoverOptions, model; - - if (!element) { - return; - } - - model = element._model; - hoverOptions = this._resolveDatasetElementOptions(element, true); - - keys = Object.keys(hoverOptions); - for (i = 0, ilen = keys.length; i < ilen; ++i) { - key = keys[i]; - prev[key] = model[key]; - model[key] = hoverOptions[key]; - } - - element.$previousStyle = prev; - }, - - /** - * @private - */ - resyncElements: function() { - var me = this; - var meta = me.getMeta(); - var data = me.getDataset().data; - var numMeta = meta.data.length; - var numData = data.length; - - if (numData < numMeta) { - meta.data.splice(numData, numMeta - numData); - } else if (numData > numMeta) { - me.insertElements(numMeta, numData - numMeta); - } - }, - - /** - * @private - */ - insertElements: function(start, count) { - for (var i = 0; i < count; ++i) { - this.addElementAndReset(start + i); - } - }, - - /** - * @private - */ - onDataPush: function() { - var count = arguments.length; - this.insertElements(this.getDataset().data.length - count, count); - }, - - /** - * @private - */ - onDataPop: function() { - this.getMeta().data.pop(); - }, - - /** - * @private - */ - onDataShift: function() { - this.getMeta().data.shift(); - }, - - /** - * @private - */ - onDataSplice: function(start, count) { - this.getMeta().data.splice(start, count); - this.insertElements(start, arguments.length - 2); - }, - - /** - * @private - */ - onDataUnshift: function() { - this.insertElements(0, arguments.length); - } -}); - -DatasetController.extend = helpers$1.inherits; - -var core_datasetController = DatasetController; - -var TAU = Math.PI * 2; - -core_defaults._set('global', { - elements: { - arc: { - backgroundColor: core_defaults.global.defaultColor, - borderColor: '#fff', - borderWidth: 2, - borderAlign: 'center' - } - } -}); - -function clipArc(ctx, arc) { - var startAngle = arc.startAngle; - var endAngle = arc.endAngle; - var pixelMargin = arc.pixelMargin; - var angleMargin = pixelMargin / arc.outerRadius; - var x = arc.x; - var y = arc.y; - - // Draw an inner border by cliping the arc and drawing a double-width border - // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders - ctx.beginPath(); - ctx.arc(x, y, arc.outerRadius, startAngle - angleMargin, endAngle + angleMargin); - if (arc.innerRadius > pixelMargin) { - angleMargin = pixelMargin / arc.innerRadius; - ctx.arc(x, y, arc.innerRadius - pixelMargin, endAngle + angleMargin, startAngle - angleMargin, true); - } else { - ctx.arc(x, y, pixelMargin, endAngle + Math.PI / 2, startAngle - Math.PI / 2); - } - ctx.closePath(); - ctx.clip(); -} - -function drawFullCircleBorders(ctx, vm, arc, inner) { - var endAngle = arc.endAngle; - var i; - - if (inner) { - arc.endAngle = arc.startAngle + TAU; - clipArc(ctx, arc); - arc.endAngle = endAngle; - if (arc.endAngle === arc.startAngle && arc.fullCircles) { - arc.endAngle += TAU; - arc.fullCircles--; - } - } - - ctx.beginPath(); - ctx.arc(arc.x, arc.y, arc.innerRadius, arc.startAngle + TAU, arc.startAngle, true); - for (i = 0; i < arc.fullCircles; ++i) { - ctx.stroke(); - } - - ctx.beginPath(); - ctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.startAngle + TAU); - for (i = 0; i < arc.fullCircles; ++i) { - ctx.stroke(); - } -} - -function drawBorder(ctx, vm, arc) { - var inner = vm.borderAlign === 'inner'; - - if (inner) { - ctx.lineWidth = vm.borderWidth * 2; - ctx.lineJoin = 'round'; - } else { - ctx.lineWidth = vm.borderWidth; - ctx.lineJoin = 'bevel'; - } - - if (arc.fullCircles) { - drawFullCircleBorders(ctx, vm, arc, inner); - } - - if (inner) { - clipArc(ctx, arc); - } - - ctx.beginPath(); - ctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.endAngle); - ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true); - ctx.closePath(); - ctx.stroke(); -} - -var element_arc = core_element.extend({ - _type: 'arc', - - inLabelRange: function(mouseX) { - var vm = this._view; - - if (vm) { - return (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2)); - } - return false; - }, - - inRange: function(chartX, chartY) { - var vm = this._view; - - if (vm) { - var pointRelativePosition = helpers$1.getAngleFromPoint(vm, {x: chartX, y: chartY}); - var angle = pointRelativePosition.angle; - var distance = pointRelativePosition.distance; - - // Sanitise angle range - var startAngle = vm.startAngle; - var endAngle = vm.endAngle; - while (endAngle < startAngle) { - endAngle += TAU; - } - while (angle > endAngle) { - angle -= TAU; - } - while (angle < startAngle) { - angle += TAU; - } - - // Check if within the range of the open/close angle - var betweenAngles = (angle >= startAngle && angle <= endAngle); - var withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius); - - return (betweenAngles && withinRadius); - } - return false; - }, - - getCenterPoint: function() { - var vm = this._view; - var halfAngle = (vm.startAngle + vm.endAngle) / 2; - var halfRadius = (vm.innerRadius + vm.outerRadius) / 2; - return { - x: vm.x + Math.cos(halfAngle) * halfRadius, - y: vm.y + Math.sin(halfAngle) * halfRadius - }; - }, - - getArea: function() { - var vm = this._view; - return Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2)); - }, - - tooltipPosition: function() { - var vm = this._view; - var centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2); - var rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius; - - return { - x: vm.x + (Math.cos(centreAngle) * rangeFromCentre), - y: vm.y + (Math.sin(centreAngle) * rangeFromCentre) - }; - }, - - draw: function() { - var ctx = this._chart.ctx; - var vm = this._view; - var pixelMargin = (vm.borderAlign === 'inner') ? 0.33 : 0; - var arc = { - x: vm.x, - y: vm.y, - innerRadius: vm.innerRadius, - outerRadius: Math.max(vm.outerRadius - pixelMargin, 0), - pixelMargin: pixelMargin, - startAngle: vm.startAngle, - endAngle: vm.endAngle, - fullCircles: Math.floor(vm.circumference / TAU) - }; - var i; - - ctx.save(); - - ctx.fillStyle = vm.backgroundColor; - ctx.strokeStyle = vm.borderColor; - - if (arc.fullCircles) { - arc.endAngle = arc.startAngle + TAU; - ctx.beginPath(); - ctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle); - ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true); - ctx.closePath(); - for (i = 0; i < arc.fullCircles; ++i) { - ctx.fill(); - } - arc.endAngle = arc.startAngle + vm.circumference % TAU; - } - - ctx.beginPath(); - ctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle); - ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true); - ctx.closePath(); - ctx.fill(); - - if (vm.borderWidth) { - drawBorder(ctx, vm, arc); - } - - ctx.restore(); - } -}); - -var valueOrDefault$1 = helpers$1.valueOrDefault; - -var defaultColor = core_defaults.global.defaultColor; - -core_defaults._set('global', { - elements: { - line: { - tension: 0.4, - backgroundColor: defaultColor, - borderWidth: 3, - borderColor: defaultColor, - borderCapStyle: 'butt', - borderDash: [], - borderDashOffset: 0.0, - borderJoinStyle: 'miter', - capBezierPoints: true, - fill: true, // do we fill in the area between the line and its base axis - } - } -}); - -var element_line = core_element.extend({ - _type: 'line', - - draw: function() { - var me = this; - var vm = me._view; - var ctx = me._chart.ctx; - var spanGaps = vm.spanGaps; - var points = me._children.slice(); // clone array - var globalDefaults = core_defaults.global; - var globalOptionLineElements = globalDefaults.elements.line; - var lastDrawnIndex = -1; - var closePath = me._loop; - var index, previous, currentVM; - - if (!points.length) { - return; - } - - if (me._loop) { - for (index = 0; index < points.length; ++index) { - previous = helpers$1.previousItem(points, index); - // If the line has an open path, shift the point array - if (!points[index]._view.skip && previous._view.skip) { - points = points.slice(index).concat(points.slice(0, index)); - closePath = spanGaps; - break; - } - } - // If the line has a close path, add the first point again - if (closePath) { - points.push(points[0]); - } - } - - ctx.save(); - - // Stroke Line Options - ctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle; - - // IE 9 and 10 do not support line dash - if (ctx.setLineDash) { - ctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash); - } - - ctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset); - ctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle; - ctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth); - ctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor; - - // Stroke Line - ctx.beginPath(); - - // First point moves to it's starting position no matter what - currentVM = points[0]._view; - if (!currentVM.skip) { - ctx.moveTo(currentVM.x, currentVM.y); - lastDrawnIndex = 0; - } - - for (index = 1; index < points.length; ++index) { - currentVM = points[index]._view; - previous = lastDrawnIndex === -1 ? helpers$1.previousItem(points, index) : points[lastDrawnIndex]; - - if (!currentVM.skip) { - if ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) { - // There was a gap and this is the first point after the gap - ctx.moveTo(currentVM.x, currentVM.y); - } else { - // Line to next point - helpers$1.canvas.lineTo(ctx, previous._view, currentVM); - } - lastDrawnIndex = index; - } - } - - if (closePath) { - ctx.closePath(); - } - - ctx.stroke(); - ctx.restore(); - } -}); - -var valueOrDefault$2 = helpers$1.valueOrDefault; - -var defaultColor$1 = core_defaults.global.defaultColor; - -core_defaults._set('global', { - elements: { - point: { - radius: 3, - pointStyle: 'circle', - backgroundColor: defaultColor$1, - borderColor: defaultColor$1, - borderWidth: 1, - // Hover - hitRadius: 1, - hoverRadius: 4, - hoverBorderWidth: 1 - } - } -}); - -function xRange(mouseX) { - var vm = this._view; - return vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false; -} - -function yRange(mouseY) { - var vm = this._view; - return vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false; -} - -var element_point = core_element.extend({ - _type: 'point', - - inRange: function(mouseX, mouseY) { - var vm = this._view; - return vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false; - }, - - inLabelRange: xRange, - inXRange: xRange, - inYRange: yRange, - - getCenterPoint: function() { - var vm = this._view; - return { - x: vm.x, - y: vm.y - }; - }, - - getArea: function() { - return Math.PI * Math.pow(this._view.radius, 2); - }, - - tooltipPosition: function() { - var vm = this._view; - return { - x: vm.x, - y: vm.y, - padding: vm.radius + vm.borderWidth - }; - }, - - draw: function(chartArea) { - var vm = this._view; - var ctx = this._chart.ctx; - var pointStyle = vm.pointStyle; - var rotation = vm.rotation; - var radius = vm.radius; - var x = vm.x; - var y = vm.y; - var globalDefaults = core_defaults.global; - var defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow - - if (vm.skip) { - return; - } - - // Clipping for Points. - if (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) { - ctx.strokeStyle = vm.borderColor || defaultColor; - ctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth); - ctx.fillStyle = vm.backgroundColor || defaultColor; - helpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation); - } - } -}); - -var defaultColor$2 = core_defaults.global.defaultColor; - -core_defaults._set('global', { - elements: { - rectangle: { - backgroundColor: defaultColor$2, - borderColor: defaultColor$2, - borderSkipped: 'bottom', - borderWidth: 0 - } - } -}); - -function isVertical(vm) { - return vm && vm.width !== undefined; -} - -/** - * Helper function to get the bounds of the bar regardless of the orientation - * @param bar {Chart.Element.Rectangle} the bar - * @return {Bounds} bounds of the bar - * @private - */ -function getBarBounds(vm) { - var x1, x2, y1, y2, half; - - if (isVertical(vm)) { - half = vm.width / 2; - x1 = vm.x - half; - x2 = vm.x + half; - y1 = Math.min(vm.y, vm.base); - y2 = Math.max(vm.y, vm.base); - } else { - half = vm.height / 2; - x1 = Math.min(vm.x, vm.base); - x2 = Math.max(vm.x, vm.base); - y1 = vm.y - half; - y2 = vm.y + half; - } - - return { - left: x1, - top: y1, - right: x2, - bottom: y2 - }; -} - -function swap(orig, v1, v2) { - return orig === v1 ? v2 : orig === v2 ? v1 : orig; -} - -function parseBorderSkipped(vm) { - var edge = vm.borderSkipped; - var res = {}; - - if (!edge) { - return res; - } - - if (vm.horizontal) { - if (vm.base > vm.x) { - edge = swap(edge, 'left', 'right'); - } - } else if (vm.base < vm.y) { - edge = swap(edge, 'bottom', 'top'); - } - - res[edge] = true; - return res; -} - -function parseBorderWidth(vm, maxW, maxH) { - var value = vm.borderWidth; - var skip = parseBorderSkipped(vm); - var t, r, b, l; - - if (helpers$1.isObject(value)) { - t = +value.top || 0; - r = +value.right || 0; - b = +value.bottom || 0; - l = +value.left || 0; - } else { - t = r = b = l = +value || 0; - } - - return { - t: skip.top || (t < 0) ? 0 : t > maxH ? maxH : t, - r: skip.right || (r < 0) ? 0 : r > maxW ? maxW : r, - b: skip.bottom || (b < 0) ? 0 : b > maxH ? maxH : b, - l: skip.left || (l < 0) ? 0 : l > maxW ? maxW : l - }; -} - -function boundingRects(vm) { - var bounds = getBarBounds(vm); - var width = bounds.right - bounds.left; - var height = bounds.bottom - bounds.top; - var border = parseBorderWidth(vm, width / 2, height / 2); - - return { - outer: { - x: bounds.left, - y: bounds.top, - w: width, - h: height - }, - inner: { - x: bounds.left + border.l, - y: bounds.top + border.t, - w: width - border.l - border.r, - h: height - border.t - border.b - } - }; -} - -function inRange(vm, x, y) { - var skipX = x === null; - var skipY = y === null; - var bounds = !vm || (skipX && skipY) ? false : getBarBounds(vm); - - return bounds - && (skipX || x >= bounds.left && x <= bounds.right) - && (skipY || y >= bounds.top && y <= bounds.bottom); -} - -var element_rectangle = core_element.extend({ - _type: 'rectangle', - - draw: function() { - var ctx = this._chart.ctx; - var vm = this._view; - var rects = boundingRects(vm); - var outer = rects.outer; - var inner = rects.inner; - - ctx.fillStyle = vm.backgroundColor; - ctx.fillRect(outer.x, outer.y, outer.w, outer.h); - - if (outer.w === inner.w && outer.h === inner.h) { - return; - } - - ctx.save(); - ctx.beginPath(); - ctx.rect(outer.x, outer.y, outer.w, outer.h); - ctx.clip(); - ctx.fillStyle = vm.borderColor; - ctx.rect(inner.x, inner.y, inner.w, inner.h); - ctx.fill('evenodd'); - ctx.restore(); - }, - - height: function() { - var vm = this._view; - return vm.base - vm.y; - }, - - inRange: function(mouseX, mouseY) { - return inRange(this._view, mouseX, mouseY); - }, - - inLabelRange: function(mouseX, mouseY) { - var vm = this._view; - return isVertical(vm) - ? inRange(vm, mouseX, null) - : inRange(vm, null, mouseY); - }, - - inXRange: function(mouseX) { - return inRange(this._view, mouseX, null); - }, - - inYRange: function(mouseY) { - return inRange(this._view, null, mouseY); - }, - - getCenterPoint: function() { - var vm = this._view; - var x, y; - if (isVertical(vm)) { - x = vm.x; - y = (vm.y + vm.base) / 2; - } else { - x = (vm.x + vm.base) / 2; - y = vm.y; - } - - return {x: x, y: y}; - }, - - getArea: function() { - var vm = this._view; - - return isVertical(vm) - ? vm.width * Math.abs(vm.y - vm.base) - : vm.height * Math.abs(vm.x - vm.base); - }, - - tooltipPosition: function() { - var vm = this._view; - return { - x: vm.x, - y: vm.y - }; - } -}); - -var elements = {}; -var Arc = element_arc; -var Line = element_line; -var Point = element_point; -var Rectangle = element_rectangle; -elements.Arc = Arc; -elements.Line = Line; -elements.Point = Point; -elements.Rectangle = Rectangle; - -var deprecated = helpers$1._deprecated; -var valueOrDefault$3 = helpers$1.valueOrDefault; - -core_defaults._set('bar', { - hover: { - mode: 'label' - }, - - scales: { - xAxes: [{ - type: 'category', - offset: true, - gridLines: { - offsetGridLines: true - } - }], - - yAxes: [{ - type: 'linear' - }] - } -}); - -core_defaults._set('global', { - datasets: { - bar: { - categoryPercentage: 0.8, - barPercentage: 0.9 - } - } -}); - -/** - * Computes the "optimal" sample size to maintain bars equally sized while preventing overlap. - * @private - */ -function computeMinSampleSize(scale, pixels) { - var min = scale._length; - var prev, curr, i, ilen; - - for (i = 1, ilen = pixels.length; i < ilen; ++i) { - min = Math.min(min, Math.abs(pixels[i] - pixels[i - 1])); - } - - for (i = 0, ilen = scale.getTicks().length; i < ilen; ++i) { - curr = scale.getPixelForTick(i); - min = i > 0 ? Math.min(min, Math.abs(curr - prev)) : min; - prev = curr; - } - - return min; -} - -/** - * Computes an "ideal" category based on the absolute bar thickness or, if undefined or null, - * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This - * mode currently always generates bars equally sized (until we introduce scriptable options?). - * @private - */ -function computeFitCategoryTraits(index, ruler, options) { - var thickness = options.barThickness; - var count = ruler.stackCount; - var curr = ruler.pixels[index]; - var min = helpers$1.isNullOrUndef(thickness) - ? computeMinSampleSize(ruler.scale, ruler.pixels) - : -1; - var size, ratio; - - if (helpers$1.isNullOrUndef(thickness)) { - size = min * options.categoryPercentage; - ratio = options.barPercentage; - } else { - // When bar thickness is enforced, category and bar percentages are ignored. - // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%') - // and deprecate barPercentage since this value is ignored when thickness is absolute. - size = thickness * count; - ratio = 1; - } - - return { - chunk: size / count, - ratio: ratio, - start: curr - (size / 2) - }; -} - -/** - * Computes an "optimal" category that globally arranges bars side by side (no gap when - * percentage options are 1), based on the previous and following categories. This mode - * generates bars with different widths when data are not evenly spaced. - * @private - */ -function computeFlexCategoryTraits(index, ruler, options) { - var pixels = ruler.pixels; - var curr = pixels[index]; - var prev = index > 0 ? pixels[index - 1] : null; - var next = index < pixels.length - 1 ? pixels[index + 1] : null; - var percent = options.categoryPercentage; - var start, size; - - if (prev === null) { - // first data: its size is double based on the next point or, - // if it's also the last data, we use the scale size. - prev = curr - (next === null ? ruler.end - ruler.start : next - curr); - } - - if (next === null) { - // last data: its size is also double based on the previous point. - next = curr + curr - prev; - } - - start = curr - (curr - Math.min(prev, next)) / 2 * percent; - size = Math.abs(next - prev) / 2 * percent; - - return { - chunk: size / ruler.stackCount, - ratio: options.barPercentage, - start: start - }; -} - -var controller_bar = core_datasetController.extend({ - - dataElementType: elements.Rectangle, - - /** - * @private - */ - _dataElementOptions: [ - 'backgroundColor', - 'borderColor', - 'borderSkipped', - 'borderWidth', - 'barPercentage', - 'barThickness', - 'categoryPercentage', - 'maxBarThickness', - 'minBarLength' - ], - - initialize: function() { - var me = this; - var meta, scaleOpts; - - core_datasetController.prototype.initialize.apply(me, arguments); - - meta = me.getMeta(); - meta.stack = me.getDataset().stack; - meta.bar = true; - - scaleOpts = me._getIndexScale().options; - deprecated('bar chart', scaleOpts.barPercentage, 'scales.[x/y]Axes.barPercentage', 'dataset.barPercentage'); - deprecated('bar chart', scaleOpts.barThickness, 'scales.[x/y]Axes.barThickness', 'dataset.barThickness'); - deprecated('bar chart', scaleOpts.categoryPercentage, 'scales.[x/y]Axes.categoryPercentage', 'dataset.categoryPercentage'); - deprecated('bar chart', me._getValueScale().options.minBarLength, 'scales.[x/y]Axes.minBarLength', 'dataset.minBarLength'); - deprecated('bar chart', scaleOpts.maxBarThickness, 'scales.[x/y]Axes.maxBarThickness', 'dataset.maxBarThickness'); - }, - - update: function(reset) { - var me = this; - var rects = me.getMeta().data; - var i, ilen; - - me._ruler = me.getRuler(); - - for (i = 0, ilen = rects.length; i < ilen; ++i) { - me.updateElement(rects[i], i, reset); - } - }, - - updateElement: function(rectangle, index, reset) { - var me = this; - var meta = me.getMeta(); - var dataset = me.getDataset(); - var options = me._resolveDataElementOptions(rectangle, index); - - rectangle._xScale = me.getScaleForId(meta.xAxisID); - rectangle._yScale = me.getScaleForId(meta.yAxisID); - rectangle._datasetIndex = me.index; - rectangle._index = index; - rectangle._model = { - backgroundColor: options.backgroundColor, - borderColor: options.borderColor, - borderSkipped: options.borderSkipped, - borderWidth: options.borderWidth, - datasetLabel: dataset.label, - label: me.chart.data.labels[index] - }; - - if (helpers$1.isArray(dataset.data[index])) { - rectangle._model.borderSkipped = null; - } - - me._updateElementGeometry(rectangle, index, reset, options); - - rectangle.pivot(); - }, - - /** - * @private - */ - _updateElementGeometry: function(rectangle, index, reset, options) { - var me = this; - var model = rectangle._model; - var vscale = me._getValueScale(); - var base = vscale.getBasePixel(); - var horizontal = vscale.isHorizontal(); - var ruler = me._ruler || me.getRuler(); - var vpixels = me.calculateBarValuePixels(me.index, index, options); - var ipixels = me.calculateBarIndexPixels(me.index, index, ruler, options); - - model.horizontal = horizontal; - model.base = reset ? base : vpixels.base; - model.x = horizontal ? reset ? base : vpixels.head : ipixels.center; - model.y = horizontal ? ipixels.center : reset ? base : vpixels.head; - model.height = horizontal ? ipixels.size : undefined; - model.width = horizontal ? undefined : ipixels.size; - }, - - /** - * Returns the stacks based on groups and bar visibility. - * @param {number} [last] - The dataset index - * @returns {string[]} The list of stack IDs - * @private - */ - _getStacks: function(last) { - var me = this; - var scale = me._getIndexScale(); - var metasets = scale._getMatchingVisibleMetas(me._type); - var stacked = scale.options.stacked; - var ilen = metasets.length; - var stacks = []; - var i, meta; - - for (i = 0; i < ilen; ++i) { - meta = metasets[i]; - // stacked | meta.stack - // | found | not found | undefined - // false | x | x | x - // true | | x | - // undefined | | x | x - if (stacked === false || stacks.indexOf(meta.stack) === -1 || - (stacked === undefined && meta.stack === undefined)) { - stacks.push(meta.stack); - } - if (meta.index === last) { - break; - } - } - - return stacks; - }, - - /** - * Returns the effective number of stacks based on groups and bar visibility. - * @private - */ - getStackCount: function() { - return this._getStacks().length; - }, - - /** - * Returns the stack index for the given dataset based on groups and bar visibility. - * @param {number} [datasetIndex] - The dataset index - * @param {string} [name] - The stack name to find - * @returns {number} The stack index - * @private - */ - getStackIndex: function(datasetIndex, name) { - var stacks = this._getStacks(datasetIndex); - var index = (name !== undefined) - ? stacks.indexOf(name) - : -1; // indexOf returns -1 if element is not present - - return (index === -1) - ? stacks.length - 1 - : index; - }, - - /** - * @private - */ - getRuler: function() { - var me = this; - var scale = me._getIndexScale(); - var pixels = []; - var i, ilen; - - for (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) { - pixels.push(scale.getPixelForValue(null, i, me.index)); - } - - return { - pixels: pixels, - start: scale._startPixel, - end: scale._endPixel, - stackCount: me.getStackCount(), - scale: scale - }; - }, - - /** - * Note: pixel values are not clamped to the scale area. - * @private - */ - calculateBarValuePixels: function(datasetIndex, index, options) { - var me = this; - var chart = me.chart; - var scale = me._getValueScale(); - var isHorizontal = scale.isHorizontal(); - var datasets = chart.data.datasets; - var metasets = scale._getMatchingVisibleMetas(me._type); - var value = scale._parseValue(datasets[datasetIndex].data[index]); - var minBarLength = options.minBarLength; - var stacked = scale.options.stacked; - var stack = me.getMeta().stack; - var start = value.start === undefined ? 0 : value.max >= 0 && value.min >= 0 ? value.min : value.max; - var length = value.start === undefined ? value.end : value.max >= 0 && value.min >= 0 ? value.max - value.min : value.min - value.max; - var ilen = metasets.length; - var i, imeta, ivalue, base, head, size, stackLength; - - if (stacked || (stacked === undefined && stack !== undefined)) { - for (i = 0; i < ilen; ++i) { - imeta = metasets[i]; - - if (imeta.index === datasetIndex) { - break; - } - - if (imeta.stack === stack) { - stackLength = scale._parseValue(datasets[imeta.index].data[index]); - ivalue = stackLength.start === undefined ? stackLength.end : stackLength.min >= 0 && stackLength.max >= 0 ? stackLength.max : stackLength.min; - - if ((value.min < 0 && ivalue < 0) || (value.max >= 0 && ivalue > 0)) { - start += ivalue; - } - } - } - } - - base = scale.getPixelForValue(start); - head = scale.getPixelForValue(start + length); - size = head - base; - - if (minBarLength !== undefined && Math.abs(size) < minBarLength) { - size = minBarLength; - if (length >= 0 && !isHorizontal || length < 0 && isHorizontal) { - head = base - minBarLength; - } else { - head = base + minBarLength; - } - } - - return { - size: size, - base: base, - head: head, - center: head + size / 2 - }; - }, - - /** - * @private - */ - calculateBarIndexPixels: function(datasetIndex, index, ruler, options) { - var me = this; - var range = options.barThickness === 'flex' - ? computeFlexCategoryTraits(index, ruler, options) - : computeFitCategoryTraits(index, ruler, options); - - var stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack); - var center = range.start + (range.chunk * stackIndex) + (range.chunk / 2); - var size = Math.min( - valueOrDefault$3(options.maxBarThickness, Infinity), - range.chunk * range.ratio); - - return { - base: center - size / 2, - head: center + size / 2, - center: center, - size: size - }; - }, - - draw: function() { - var me = this; - var chart = me.chart; - var scale = me._getValueScale(); - var rects = me.getMeta().data; - var dataset = me.getDataset(); - var ilen = rects.length; - var i = 0; - - helpers$1.canvas.clipArea(chart.ctx, chart.chartArea); - - for (; i < ilen; ++i) { - var val = scale._parseValue(dataset.data[i]); - if (!isNaN(val.min) && !isNaN(val.max)) { - rects[i].draw(); - } - } - - helpers$1.canvas.unclipArea(chart.ctx); - }, - - /** - * @private - */ - _resolveDataElementOptions: function() { - var me = this; - var values = helpers$1.extend({}, core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments)); - var indexOpts = me._getIndexScale().options; - var valueOpts = me._getValueScale().options; - - values.barPercentage = valueOrDefault$3(indexOpts.barPercentage, values.barPercentage); - values.barThickness = valueOrDefault$3(indexOpts.barThickness, values.barThickness); - values.categoryPercentage = valueOrDefault$3(indexOpts.categoryPercentage, values.categoryPercentage); - values.maxBarThickness = valueOrDefault$3(indexOpts.maxBarThickness, values.maxBarThickness); - values.minBarLength = valueOrDefault$3(valueOpts.minBarLength, values.minBarLength); - - return values; - } - -}); - -var valueOrDefault$4 = helpers$1.valueOrDefault; -var resolve$1 = helpers$1.options.resolve; - -core_defaults._set('bubble', { - hover: { - mode: 'single' - }, - - scales: { - xAxes: [{ - type: 'linear', // bubble should probably use a linear scale by default - position: 'bottom', - id: 'x-axis-0' // need an ID so datasets can reference the scale - }], - yAxes: [{ - type: 'linear', - position: 'left', - id: 'y-axis-0' - }] - }, - - tooltips: { - callbacks: { - title: function() { - // Title doesn't make sense for scatter since we format the data as a point - return ''; - }, - label: function(item, data) { - var datasetLabel = data.datasets[item.datasetIndex].label || ''; - var dataPoint = data.datasets[item.datasetIndex].data[item.index]; - return datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')'; - } - } - } -}); - -var controller_bubble = core_datasetController.extend({ - /** - * @protected - */ - dataElementType: elements.Point, - - /** - * @private - */ - _dataElementOptions: [ - 'backgroundColor', - 'borderColor', - 'borderWidth', - 'hoverBackgroundColor', - 'hoverBorderColor', - 'hoverBorderWidth', - 'hoverRadius', - 'hitRadius', - 'pointStyle', - 'rotation' - ], - - /** - * @protected - */ - update: function(reset) { - var me = this; - var meta = me.getMeta(); - var points = meta.data; - - // Update Points - helpers$1.each(points, function(point, index) { - me.updateElement(point, index, reset); - }); - }, - - /** - * @protected - */ - updateElement: function(point, index, reset) { - var me = this; - var meta = me.getMeta(); - var custom = point.custom || {}; - var xScale = me.getScaleForId(meta.xAxisID); - var yScale = me.getScaleForId(meta.yAxisID); - var options = me._resolveDataElementOptions(point, index); - var data = me.getDataset().data[index]; - var dsIndex = me.index; - - var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex); - var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex); - - point._xScale = xScale; - point._yScale = yScale; - point._options = options; - point._datasetIndex = dsIndex; - point._index = index; - point._model = { - backgroundColor: options.backgroundColor, - borderColor: options.borderColor, - borderWidth: options.borderWidth, - hitRadius: options.hitRadius, - pointStyle: options.pointStyle, - rotation: options.rotation, - radius: reset ? 0 : options.radius, - skip: custom.skip || isNaN(x) || isNaN(y), - x: x, - y: y, - }; - - point.pivot(); - }, - - /** - * @protected - */ - setHoverStyle: function(point) { - var model = point._model; - var options = point._options; - var getHoverColor = helpers$1.getHoverColor; - - point.$previousStyle = { - backgroundColor: model.backgroundColor, - borderColor: model.borderColor, - borderWidth: model.borderWidth, - radius: model.radius - }; - - model.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor)); - model.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor)); - model.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth); - model.radius = options.radius + options.hoverRadius; - }, - - /** - * @private - */ - _resolveDataElementOptions: function(point, index) { - var me = this; - var chart = me.chart; - var dataset = me.getDataset(); - var custom = point.custom || {}; - var data = dataset.data[index] || {}; - var values = core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments); - - // Scriptable options - var context = { - chart: chart, - dataIndex: index, - dataset: dataset, - datasetIndex: me.index - }; - - // In case values were cached (and thus frozen), we need to clone the values - if (me._cachedDataOpts === values) { - values = helpers$1.extend({}, values); - } - - // Custom radius resolution - values.radius = resolve$1([ - custom.radius, - data.r, - me._config.radius, - chart.options.elements.point.radius - ], context, index); - - return values; - } -}); - -var valueOrDefault$5 = helpers$1.valueOrDefault; - -var PI$1 = Math.PI; -var DOUBLE_PI$1 = PI$1 * 2; -var HALF_PI$1 = PI$1 / 2; - -core_defaults._set('doughnut', { - animation: { - // Boolean - Whether we animate the rotation of the Doughnut - animateRotate: true, - // Boolean - Whether we animate scaling the Doughnut from the centre - animateScale: false - }, - hover: { - mode: 'single' - }, - legendCallback: function(chart) { - var list = document.createElement('ul'); - var data = chart.data; - var datasets = data.datasets; - var labels = data.labels; - var i, ilen, listItem, listItemSpan; - - list.setAttribute('class', chart.id + '-legend'); - if (datasets.length) { - for (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) { - listItem = list.appendChild(document.createElement('li')); - listItemSpan = listItem.appendChild(document.createElement('span')); - listItemSpan.style.backgroundColor = datasets[0].backgroundColor[i]; - if (labels[i]) { - listItem.appendChild(document.createTextNode(labels[i])); - } - } - } - - return list.outerHTML; - }, - legend: { - labels: { - generateLabels: function(chart) { - var data = chart.data; - if (data.labels.length && data.datasets.length) { - return data.labels.map(function(label, i) { - var meta = chart.getDatasetMeta(0); - var style = meta.controller.getStyle(i); - - return { - text: label, - fillStyle: style.backgroundColor, - strokeStyle: style.borderColor, - lineWidth: style.borderWidth, - hidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden, - - // Extra data used for toggling the correct item - index: i - }; - }); - } - return []; - } - }, - - onClick: function(e, legendItem) { - var index = legendItem.index; - var chart = this.chart; - var i, ilen, meta; - - for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) { - meta = chart.getDatasetMeta(i); - // toggle visibility of index if exists - if (meta.data[index]) { - meta.data[index].hidden = !meta.data[index].hidden; - } - } - - chart.update(); - } - }, - - // The percentage of the chart that we cut out of the middle. - cutoutPercentage: 50, - - // The rotation of the chart, where the first data arc begins. - rotation: -HALF_PI$1, - - // The total circumference of the chart. - circumference: DOUBLE_PI$1, - - // Need to override these to give a nice default - tooltips: { - callbacks: { - title: function() { - return ''; - }, - label: function(tooltipItem, data) { - var dataLabel = data.labels[tooltipItem.index]; - var value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index]; - - if (helpers$1.isArray(dataLabel)) { - // show value on first line of multiline label - // need to clone because we are changing the value - dataLabel = dataLabel.slice(); - dataLabel[0] += value; - } else { - dataLabel += value; - } - - return dataLabel; - } - } - } -}); - -var controller_doughnut = core_datasetController.extend({ - - dataElementType: elements.Arc, - - linkScales: helpers$1.noop, - - /** - * @private - */ - _dataElementOptions: [ - 'backgroundColor', - 'borderColor', - 'borderWidth', - 'borderAlign', - 'hoverBackgroundColor', - 'hoverBorderColor', - 'hoverBorderWidth', - ], - - // Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly - getRingIndex: function(datasetIndex) { - var ringIndex = 0; - - for (var j = 0; j < datasetIndex; ++j) { - if (this.chart.isDatasetVisible(j)) { - ++ringIndex; - } - } - - return ringIndex; - }, - - update: function(reset) { - var me = this; - var chart = me.chart; - var chartArea = chart.chartArea; - var opts = chart.options; - var ratioX = 1; - var ratioY = 1; - var offsetX = 0; - var offsetY = 0; - var meta = me.getMeta(); - var arcs = meta.data; - var cutout = opts.cutoutPercentage / 100 || 0; - var circumference = opts.circumference; - var chartWeight = me._getRingWeight(me.index); - var maxWidth, maxHeight, i, ilen; - - // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc - if (circumference < DOUBLE_PI$1) { - var startAngle = opts.rotation % DOUBLE_PI$1; - startAngle += startAngle >= PI$1 ? -DOUBLE_PI$1 : startAngle < -PI$1 ? DOUBLE_PI$1 : 0; - var endAngle = startAngle + circumference; - var startX = Math.cos(startAngle); - var startY = Math.sin(startAngle); - var endX = Math.cos(endAngle); - var endY = Math.sin(endAngle); - var contains0 = (startAngle <= 0 && endAngle >= 0) || endAngle >= DOUBLE_PI$1; - var contains90 = (startAngle <= HALF_PI$1 && endAngle >= HALF_PI$1) || endAngle >= DOUBLE_PI$1 + HALF_PI$1; - var contains180 = startAngle === -PI$1 || endAngle >= PI$1; - var contains270 = (startAngle <= -HALF_PI$1 && endAngle >= -HALF_PI$1) || endAngle >= PI$1 + HALF_PI$1; - var minX = contains180 ? -1 : Math.min(startX, startX * cutout, endX, endX * cutout); - var minY = contains270 ? -1 : Math.min(startY, startY * cutout, endY, endY * cutout); - var maxX = contains0 ? 1 : Math.max(startX, startX * cutout, endX, endX * cutout); - var maxY = contains90 ? 1 : Math.max(startY, startY * cutout, endY, endY * cutout); - ratioX = (maxX - minX) / 2; - ratioY = (maxY - minY) / 2; - offsetX = -(maxX + minX) / 2; - offsetY = -(maxY + minY) / 2; - } - - for (i = 0, ilen = arcs.length; i < ilen; ++i) { - arcs[i]._options = me._resolveDataElementOptions(arcs[i], i); - } - - chart.borderWidth = me.getMaxBorderWidth(); - maxWidth = (chartArea.right - chartArea.left - chart.borderWidth) / ratioX; - maxHeight = (chartArea.bottom - chartArea.top - chart.borderWidth) / ratioY; - chart.outerRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0); - chart.innerRadius = Math.max(chart.outerRadius * cutout, 0); - chart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1); - chart.offsetX = offsetX * chart.outerRadius; - chart.offsetY = offsetY * chart.outerRadius; - - meta.total = me.calculateTotal(); - - me.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index); - me.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0); - - for (i = 0, ilen = arcs.length; i < ilen; ++i) { - me.updateElement(arcs[i], i, reset); - } - }, - - updateElement: function(arc, index, reset) { - var me = this; - var chart = me.chart; - var chartArea = chart.chartArea; - var opts = chart.options; - var animationOpts = opts.animation; - var centerX = (chartArea.left + chartArea.right) / 2; - var centerY = (chartArea.top + chartArea.bottom) / 2; - var startAngle = opts.rotation; // non reset case handled later - var endAngle = opts.rotation; // non reset case handled later - var dataset = me.getDataset(); - var circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / DOUBLE_PI$1); - var innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius; - var outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius; - var options = arc._options || {}; - - helpers$1.extend(arc, { - // Utility - _datasetIndex: me.index, - _index: index, - - // Desired view properties - _model: { - backgroundColor: options.backgroundColor, - borderColor: options.borderColor, - borderWidth: options.borderWidth, - borderAlign: options.borderAlign, - x: centerX + chart.offsetX, - y: centerY + chart.offsetY, - startAngle: startAngle, - endAngle: endAngle, - circumference: circumference, - outerRadius: outerRadius, - innerRadius: innerRadius, - label: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index]) - } - }); - - var model = arc._model; - - // Set correct angles if not resetting - if (!reset || !animationOpts.animateRotate) { - if (index === 0) { - model.startAngle = opts.rotation; - } else { - model.startAngle = me.getMeta().data[index - 1]._model.endAngle; - } - - model.endAngle = model.startAngle + model.circumference; - } - - arc.pivot(); - }, - - calculateTotal: function() { - var dataset = this.getDataset(); - var meta = this.getMeta(); - var total = 0; - var value; - - helpers$1.each(meta.data, function(element, index) { - value = dataset.data[index]; - if (!isNaN(value) && !element.hidden) { - total += Math.abs(value); - } - }); - - /* if (total === 0) { - total = NaN; - }*/ - - return total; - }, - - calculateCircumference: function(value) { - var total = this.getMeta().total; - if (total > 0 && !isNaN(value)) { - return DOUBLE_PI$1 * (Math.abs(value) / total); - } - return 0; - }, - - // gets the max border or hover width to properly scale pie charts - getMaxBorderWidth: function(arcs) { - var me = this; - var max = 0; - var chart = me.chart; - var i, ilen, meta, arc, controller, options, borderWidth, hoverWidth; - - if (!arcs) { - // Find the outmost visible dataset - for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) { - if (chart.isDatasetVisible(i)) { - meta = chart.getDatasetMeta(i); - arcs = meta.data; - if (i !== me.index) { - controller = meta.controller; - } - break; - } - } - } - - if (!arcs) { - return 0; - } - - for (i = 0, ilen = arcs.length; i < ilen; ++i) { - arc = arcs[i]; - if (controller) { - controller._configure(); - options = controller._resolveDataElementOptions(arc, i); - } else { - options = arc._options; - } - if (options.borderAlign !== 'inner') { - borderWidth = options.borderWidth; - hoverWidth = options.hoverBorderWidth; - - max = borderWidth > max ? borderWidth : max; - max = hoverWidth > max ? hoverWidth : max; - } - } - return max; - }, - - /** - * @protected - */ - setHoverStyle: function(arc) { - var model = arc._model; - var options = arc._options; - var getHoverColor = helpers$1.getHoverColor; - - arc.$previousStyle = { - backgroundColor: model.backgroundColor, - borderColor: model.borderColor, - borderWidth: model.borderWidth, - }; - - model.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor)); - model.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor)); - model.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth); - }, - - /** - * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly - * @private - */ - _getRingWeightOffset: function(datasetIndex) { - var ringWeightOffset = 0; - - for (var i = 0; i < datasetIndex; ++i) { - if (this.chart.isDatasetVisible(i)) { - ringWeightOffset += this._getRingWeight(i); - } - } - - return ringWeightOffset; - }, - - /** - * @private - */ - _getRingWeight: function(dataSetIndex) { - return Math.max(valueOrDefault$5(this.chart.data.datasets[dataSetIndex].weight, 1), 0); - }, - - /** - * Returns the sum of all visibile data set weights. This value can be 0. - * @private - */ - _getVisibleDatasetWeightTotal: function() { - return this._getRingWeightOffset(this.chart.data.datasets.length); - } -}); - -core_defaults._set('horizontalBar', { - hover: { - mode: 'index', - axis: 'y' - }, - - scales: { - xAxes: [{ - type: 'linear', - position: 'bottom' - }], - - yAxes: [{ - type: 'category', - position: 'left', - offset: true, - gridLines: { - offsetGridLines: true - } - }] - }, - - elements: { - rectangle: { - borderSkipped: 'left' - } - }, - - tooltips: { - mode: 'index', - axis: 'y' - } -}); - -core_defaults._set('global', { - datasets: { - horizontalBar: { - categoryPercentage: 0.8, - barPercentage: 0.9 - } - } -}); - -var controller_horizontalBar = controller_bar.extend({ - /** - * @private - */ - _getValueScaleId: function() { - return this.getMeta().xAxisID; - }, - - /** - * @private - */ - _getIndexScaleId: function() { - return this.getMeta().yAxisID; - } -}); - -var valueOrDefault$6 = helpers$1.valueOrDefault; -var resolve$2 = helpers$1.options.resolve; -var isPointInArea = helpers$1.canvas._isPointInArea; - -core_defaults._set('line', { - showLines: true, - spanGaps: false, - - hover: { - mode: 'label' - }, - - scales: { - xAxes: [{ - type: 'category', - id: 'x-axis-0' - }], - yAxes: [{ - type: 'linear', - id: 'y-axis-0' - }] - } -}); - -function scaleClip(scale, halfBorderWidth) { - var tickOpts = scale && scale.options.ticks || {}; - var reverse = tickOpts.reverse; - var min = tickOpts.min === undefined ? halfBorderWidth : 0; - var max = tickOpts.max === undefined ? halfBorderWidth : 0; - return { - start: reverse ? max : min, - end: reverse ? min : max - }; -} - -function defaultClip(xScale, yScale, borderWidth) { - var halfBorderWidth = borderWidth / 2; - var x = scaleClip(xScale, halfBorderWidth); - var y = scaleClip(yScale, halfBorderWidth); - - return { - top: y.end, - right: x.end, - bottom: y.start, - left: x.start - }; -} - -function toClip(value) { - var t, r, b, l; - - if (helpers$1.isObject(value)) { - t = value.top; - r = value.right; - b = value.bottom; - l = value.left; - } else { - t = r = b = l = value; - } - - return { - top: t, - right: r, - bottom: b, - left: l - }; -} - - -var controller_line = core_datasetController.extend({ - - datasetElementType: elements.Line, - - dataElementType: elements.Point, - - /** - * @private - */ - _datasetElementOptions: [ - 'backgroundColor', - 'borderCapStyle', - 'borderColor', - 'borderDash', - 'borderDashOffset', - 'borderJoinStyle', - 'borderWidth', - 'cubicInterpolationMode', - 'fill' - ], - - /** - * @private - */ - _dataElementOptions: { - backgroundColor: 'pointBackgroundColor', - borderColor: 'pointBorderColor', - borderWidth: 'pointBorderWidth', - hitRadius: 'pointHitRadius', - hoverBackgroundColor: 'pointHoverBackgroundColor', - hoverBorderColor: 'pointHoverBorderColor', - hoverBorderWidth: 'pointHoverBorderWidth', - hoverRadius: 'pointHoverRadius', - pointStyle: 'pointStyle', - radius: 'pointRadius', - rotation: 'pointRotation' - }, - - update: function(reset) { - var me = this; - var meta = me.getMeta(); - var line = meta.dataset; - var points = meta.data || []; - var options = me.chart.options; - var config = me._config; - var showLine = me._showLine = valueOrDefault$6(config.showLine, options.showLines); - var i, ilen; - - me._xScale = me.getScaleForId(meta.xAxisID); - me._yScale = me.getScaleForId(meta.yAxisID); - - // Update Line - if (showLine) { - // Compatibility: If the properties are defined with only the old name, use those values - if (config.tension !== undefined && config.lineTension === undefined) { - config.lineTension = config.tension; - } - - // Utility - line._scale = me._yScale; - line._datasetIndex = me.index; - // Data - line._children = points; - // Model - line._model = me._resolveDatasetElementOptions(line); - - line.pivot(); - } - - // Update Points - for (i = 0, ilen = points.length; i < ilen; ++i) { - me.updateElement(points[i], i, reset); - } - - if (showLine && line._model.tension !== 0) { - me.updateBezierControlPoints(); - } - - // Now pivot the point for animation - for (i = 0, ilen = points.length; i < ilen; ++i) { - points[i].pivot(); - } - }, - - updateElement: function(point, index, reset) { - var me = this; - var meta = me.getMeta(); - var custom = point.custom || {}; - var dataset = me.getDataset(); - var datasetIndex = me.index; - var value = dataset.data[index]; - var xScale = me._xScale; - var yScale = me._yScale; - var lineModel = meta.dataset._model; - var x, y; - - var options = me._resolveDataElementOptions(point, index); - - x = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex); - y = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex); - - // Utility - point._xScale = xScale; - point._yScale = yScale; - point._options = options; - point._datasetIndex = datasetIndex; - point._index = index; - - // Desired view properties - point._model = { - x: x, - y: y, - skip: custom.skip || isNaN(x) || isNaN(y), - // Appearance - radius: options.radius, - pointStyle: options.pointStyle, - rotation: options.rotation, - backgroundColor: options.backgroundColor, - borderColor: options.borderColor, - borderWidth: options.borderWidth, - tension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0), - steppedLine: lineModel ? lineModel.steppedLine : false, - // Tooltip - hitRadius: options.hitRadius - }; - }, - - /** - * @private - */ - _resolveDatasetElementOptions: function(element) { - var me = this; - var config = me._config; - var custom = element.custom || {}; - var options = me.chart.options; - var lineOptions = options.elements.line; - var values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments); - - // The default behavior of lines is to break at null values, according - // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158 - // This option gives lines the ability to span gaps - values.spanGaps = valueOrDefault$6(config.spanGaps, options.spanGaps); - values.tension = valueOrDefault$6(config.lineTension, lineOptions.tension); - values.steppedLine = resolve$2([custom.steppedLine, config.steppedLine, lineOptions.stepped]); - values.clip = toClip(valueOrDefault$6(config.clip, defaultClip(me._xScale, me._yScale, values.borderWidth))); - - return values; - }, - - calculatePointY: function(value, index, datasetIndex) { - var me = this; - var chart = me.chart; - var yScale = me._yScale; - var sumPos = 0; - var sumNeg = 0; - var i, ds, dsMeta, stackedRightValue, rightValue, metasets, ilen; - - if (yScale.options.stacked) { - rightValue = +yScale.getRightValue(value); - metasets = chart._getSortedVisibleDatasetMetas(); - ilen = metasets.length; - - for (i = 0; i < ilen; ++i) { - dsMeta = metasets[i]; - if (dsMeta.index === datasetIndex) { - break; - } - - ds = chart.data.datasets[dsMeta.index]; - if (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id) { - stackedRightValue = +yScale.getRightValue(ds.data[index]); - if (stackedRightValue < 0) { - sumNeg += stackedRightValue || 0; - } else { - sumPos += stackedRightValue || 0; - } - } - } - - if (rightValue < 0) { - return yScale.getPixelForValue(sumNeg + rightValue); - } - return yScale.getPixelForValue(sumPos + rightValue); - } - return yScale.getPixelForValue(value); - }, - - updateBezierControlPoints: function() { - var me = this; - var chart = me.chart; - var meta = me.getMeta(); - var lineModel = meta.dataset._model; - var area = chart.chartArea; - var points = meta.data || []; - var i, ilen, model, controlPoints; - - // Only consider points that are drawn in case the spanGaps option is used - if (lineModel.spanGaps) { - points = points.filter(function(pt) { - return !pt._model.skip; - }); - } - - function capControlPoint(pt, min, max) { - return Math.max(Math.min(pt, max), min); - } - - if (lineModel.cubicInterpolationMode === 'monotone') { - helpers$1.splineCurveMonotone(points); - } else { - for (i = 0, ilen = points.length; i < ilen; ++i) { - model = points[i]._model; - controlPoints = helpers$1.splineCurve( - helpers$1.previousItem(points, i)._model, - model, - helpers$1.nextItem(points, i)._model, - lineModel.tension - ); - model.controlPointPreviousX = controlPoints.previous.x; - model.controlPointPreviousY = controlPoints.previous.y; - model.controlPointNextX = controlPoints.next.x; - model.controlPointNextY = controlPoints.next.y; - } - } - - if (chart.options.elements.line.capBezierPoints) { - for (i = 0, ilen = points.length; i < ilen; ++i) { - model = points[i]._model; - if (isPointInArea(model, area)) { - if (i > 0 && isPointInArea(points[i - 1]._model, area)) { - model.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right); - model.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom); - } - if (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) { - model.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right); - model.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom); - } - } - } - } - }, - - draw: function() { - var me = this; - var chart = me.chart; - var meta = me.getMeta(); - var points = meta.data || []; - var area = chart.chartArea; - var canvas = chart.canvas; - var i = 0; - var ilen = points.length; - var clip; - - if (me._showLine) { - clip = meta.dataset._model.clip; - - helpers$1.canvas.clipArea(chart.ctx, { - left: clip.left === false ? 0 : area.left - clip.left, - right: clip.right === false ? canvas.width : area.right + clip.right, - top: clip.top === false ? 0 : area.top - clip.top, - bottom: clip.bottom === false ? canvas.height : area.bottom + clip.bottom - }); - - meta.dataset.draw(); - - helpers$1.canvas.unclipArea(chart.ctx); - } - - // Draw the points - for (; i < ilen; ++i) { - points[i].draw(area); - } - }, - - /** - * @protected - */ - setHoverStyle: function(point) { - var model = point._model; - var options = point._options; - var getHoverColor = helpers$1.getHoverColor; - - point.$previousStyle = { - backgroundColor: model.backgroundColor, - borderColor: model.borderColor, - borderWidth: model.borderWidth, - radius: model.radius - }; - - model.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor)); - model.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor)); - model.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth); - model.radius = valueOrDefault$6(options.hoverRadius, options.radius); - }, -}); - -var resolve$3 = helpers$1.options.resolve; - -core_defaults._set('polarArea', { - scale: { - type: 'radialLinear', - angleLines: { - display: false - }, - gridLines: { - circular: true - }, - pointLabels: { - display: false - }, - ticks: { - beginAtZero: true - } - }, - - // Boolean - Whether to animate the rotation of the chart - animation: { - animateRotate: true, - animateScale: true - }, - - startAngle: -0.5 * Math.PI, - legendCallback: function(chart) { - var list = document.createElement('ul'); - var data = chart.data; - var datasets = data.datasets; - var labels = data.labels; - var i, ilen, listItem, listItemSpan; - - list.setAttribute('class', chart.id + '-legend'); - if (datasets.length) { - for (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) { - listItem = list.appendChild(document.createElement('li')); - listItemSpan = listItem.appendChild(document.createElement('span')); - listItemSpan.style.backgroundColor = datasets[0].backgroundColor[i]; - if (labels[i]) { - listItem.appendChild(document.createTextNode(labels[i])); - } - } - } - - return list.outerHTML; - }, - legend: { - labels: { - generateLabels: function(chart) { - var data = chart.data; - if (data.labels.length && data.datasets.length) { - return data.labels.map(function(label, i) { - var meta = chart.getDatasetMeta(0); - var style = meta.controller.getStyle(i); - - return { - text: label, - fillStyle: style.backgroundColor, - strokeStyle: style.borderColor, - lineWidth: style.borderWidth, - hidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden, - - // Extra data used for toggling the correct item - index: i - }; - }); - } - return []; - } - }, - - onClick: function(e, legendItem) { - var index = legendItem.index; - var chart = this.chart; - var i, ilen, meta; - - for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) { - meta = chart.getDatasetMeta(i); - meta.data[index].hidden = !meta.data[index].hidden; - } - - chart.update(); - } - }, - - // Need to override these to give a nice default - tooltips: { - callbacks: { - title: function() { - return ''; - }, - label: function(item, data) { - return data.labels[item.index] + ': ' + item.yLabel; - } - } - } -}); - -var controller_polarArea = core_datasetController.extend({ - - dataElementType: elements.Arc, - - linkScales: helpers$1.noop, - - /** - * @private - */ - _dataElementOptions: [ - 'backgroundColor', - 'borderColor', - 'borderWidth', - 'borderAlign', - 'hoverBackgroundColor', - 'hoverBorderColor', - 'hoverBorderWidth', - ], - - /** - * @private - */ - _getIndexScaleId: function() { - return this.chart.scale.id; - }, - - /** - * @private - */ - _getValueScaleId: function() { - return this.chart.scale.id; - }, - - update: function(reset) { - var me = this; - var dataset = me.getDataset(); - var meta = me.getMeta(); - var start = me.chart.options.startAngle || 0; - var starts = me._starts = []; - var angles = me._angles = []; - var arcs = meta.data; - var i, ilen, angle; - - me._updateRadius(); - - meta.count = me.countVisibleElements(); - - for (i = 0, ilen = dataset.data.length; i < ilen; i++) { - starts[i] = start; - angle = me._computeAngle(i); - angles[i] = angle; - start += angle; - } - - for (i = 0, ilen = arcs.length; i < ilen; ++i) { - arcs[i]._options = me._resolveDataElementOptions(arcs[i], i); - me.updateElement(arcs[i], i, reset); - } - }, - - /** - * @private - */ - _updateRadius: function() { - var me = this; - var chart = me.chart; - var chartArea = chart.chartArea; - var opts = chart.options; - var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top); - - chart.outerRadius = Math.max(minSize / 2, 0); - chart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0); - chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount(); - - me.outerRadius = chart.outerRadius - (chart.radiusLength * me.index); - me.innerRadius = me.outerRadius - chart.radiusLength; - }, - - updateElement: function(arc, index, reset) { - var me = this; - var chart = me.chart; - var dataset = me.getDataset(); - var opts = chart.options; - var animationOpts = opts.animation; - var scale = chart.scale; - var labels = chart.data.labels; - - var centerX = scale.xCenter; - var centerY = scale.yCenter; - - // var negHalfPI = -0.5 * Math.PI; - var datasetStartAngle = opts.startAngle; - var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); - var startAngle = me._starts[index]; - var endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]); - - var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); - var options = arc._options || {}; - - helpers$1.extend(arc, { - // Utility - _datasetIndex: me.index, - _index: index, - _scale: scale, - - // Desired view properties - _model: { - backgroundColor: options.backgroundColor, - borderColor: options.borderColor, - borderWidth: options.borderWidth, - borderAlign: options.borderAlign, - x: centerX, - y: centerY, - innerRadius: 0, - outerRadius: reset ? resetRadius : distance, - startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle, - endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle, - label: helpers$1.valueAtIndexOrDefault(labels, index, labels[index]) - } - }); - - arc.pivot(); - }, - - countVisibleElements: function() { - var dataset = this.getDataset(); - var meta = this.getMeta(); - var count = 0; - - helpers$1.each(meta.data, function(element, index) { - if (!isNaN(dataset.data[index]) && !element.hidden) { - count++; - } - }); - - return count; - }, - - /** - * @protected - */ - setHoverStyle: function(arc) { - var model = arc._model; - var options = arc._options; - var getHoverColor = helpers$1.getHoverColor; - var valueOrDefault = helpers$1.valueOrDefault; - - arc.$previousStyle = { - backgroundColor: model.backgroundColor, - borderColor: model.borderColor, - borderWidth: model.borderWidth, - }; - - model.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor)); - model.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor)); - model.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth); - }, - - /** - * @private - */ - _computeAngle: function(index) { - var me = this; - var count = this.getMeta().count; - var dataset = me.getDataset(); - var meta = me.getMeta(); - - if (isNaN(dataset.data[index]) || meta.data[index].hidden) { - return 0; - } - - // Scriptable options - var context = { - chart: me.chart, - dataIndex: index, - dataset: dataset, - datasetIndex: me.index - }; - - return resolve$3([ - me.chart.options.elements.arc.angle, - (2 * Math.PI) / count - ], context, index); - } -}); - -core_defaults._set('pie', helpers$1.clone(core_defaults.doughnut)); -core_defaults._set('pie', { - cutoutPercentage: 0 -}); - -// Pie charts are Doughnut chart with different defaults -var controller_pie = controller_doughnut; - -var valueOrDefault$7 = helpers$1.valueOrDefault; - -core_defaults._set('radar', { - spanGaps: false, - scale: { - type: 'radialLinear' - }, - elements: { - line: { - fill: 'start', - tension: 0 // no bezier in radar - } - } -}); - -var controller_radar = core_datasetController.extend({ - datasetElementType: elements.Line, - - dataElementType: elements.Point, - - linkScales: helpers$1.noop, - - /** - * @private - */ - _datasetElementOptions: [ - 'backgroundColor', - 'borderWidth', - 'borderColor', - 'borderCapStyle', - 'borderDash', - 'borderDashOffset', - 'borderJoinStyle', - 'fill' - ], - - /** - * @private - */ - _dataElementOptions: { - backgroundColor: 'pointBackgroundColor', - borderColor: 'pointBorderColor', - borderWidth: 'pointBorderWidth', - hitRadius: 'pointHitRadius', - hoverBackgroundColor: 'pointHoverBackgroundColor', - hoverBorderColor: 'pointHoverBorderColor', - hoverBorderWidth: 'pointHoverBorderWidth', - hoverRadius: 'pointHoverRadius', - pointStyle: 'pointStyle', - radius: 'pointRadius', - rotation: 'pointRotation' - }, - - /** - * @private - */ - _getIndexScaleId: function() { - return this.chart.scale.id; - }, - - /** - * @private - */ - _getValueScaleId: function() { - return this.chart.scale.id; - }, - - update: function(reset) { - var me = this; - var meta = me.getMeta(); - var line = meta.dataset; - var points = meta.data || []; - var scale = me.chart.scale; - var config = me._config; - var i, ilen; - - // Compatibility: If the properties are defined with only the old name, use those values - if (config.tension !== undefined && config.lineTension === undefined) { - config.lineTension = config.tension; - } - - // Utility - line._scale = scale; - line._datasetIndex = me.index; - // Data - line._children = points; - line._loop = true; - // Model - line._model = me._resolveDatasetElementOptions(line); - - line.pivot(); - - // Update Points - for (i = 0, ilen = points.length; i < ilen; ++i) { - me.updateElement(points[i], i, reset); - } - - // Update bezier control points - me.updateBezierControlPoints(); - - // Now pivot the point for animation - for (i = 0, ilen = points.length; i < ilen; ++i) { - points[i].pivot(); - } - }, - - updateElement: function(point, index, reset) { - var me = this; - var custom = point.custom || {}; - var dataset = me.getDataset(); - var scale = me.chart.scale; - var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]); - var options = me._resolveDataElementOptions(point, index); - var lineModel = me.getMeta().dataset._model; - var x = reset ? scale.xCenter : pointPosition.x; - var y = reset ? scale.yCenter : pointPosition.y; - - // Utility - point._scale = scale; - point._options = options; - point._datasetIndex = me.index; - point._index = index; - - // Desired view properties - point._model = { - x: x, // value not used in dataset scale, but we want a consistent API between scales - y: y, - skip: custom.skip || isNaN(x) || isNaN(y), - // Appearance - radius: options.radius, - pointStyle: options.pointStyle, - rotation: options.rotation, - backgroundColor: options.backgroundColor, - borderColor: options.borderColor, - borderWidth: options.borderWidth, - tension: valueOrDefault$7(custom.tension, lineModel ? lineModel.tension : 0), - - // Tooltip - hitRadius: options.hitRadius - }; - }, - - /** - * @private - */ - _resolveDatasetElementOptions: function() { - var me = this; - var config = me._config; - var options = me.chart.options; - var values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments); - - values.spanGaps = valueOrDefault$7(config.spanGaps, options.spanGaps); - values.tension = valueOrDefault$7(config.lineTension, options.elements.line.tension); - - return values; - }, - - updateBezierControlPoints: function() { - var me = this; - var meta = me.getMeta(); - var area = me.chart.chartArea; - var points = meta.data || []; - var i, ilen, model, controlPoints; - - // Only consider points that are drawn in case the spanGaps option is used - if (meta.dataset._model.spanGaps) { - points = points.filter(function(pt) { - return !pt._model.skip; - }); - } - - function capControlPoint(pt, min, max) { - return Math.max(Math.min(pt, max), min); - } - - for (i = 0, ilen = points.length; i < ilen; ++i) { - model = points[i]._model; - controlPoints = helpers$1.splineCurve( - helpers$1.previousItem(points, i, true)._model, - model, - helpers$1.nextItem(points, i, true)._model, - model.tension - ); - - // Prevent the bezier going outside of the bounds of the graph - model.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right); - model.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom); - model.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right); - model.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom); - } - }, - - setHoverStyle: function(point) { - var model = point._model; - var options = point._options; - var getHoverColor = helpers$1.getHoverColor; - - point.$previousStyle = { - backgroundColor: model.backgroundColor, - borderColor: model.borderColor, - borderWidth: model.borderWidth, - radius: model.radius - }; - - model.backgroundColor = valueOrDefault$7(options.hoverBackgroundColor, getHoverColor(options.backgroundColor)); - model.borderColor = valueOrDefault$7(options.hoverBorderColor, getHoverColor(options.borderColor)); - model.borderWidth = valueOrDefault$7(options.hoverBorderWidth, options.borderWidth); - model.radius = valueOrDefault$7(options.hoverRadius, options.radius); - } -}); - -core_defaults._set('scatter', { - hover: { - mode: 'single' - }, - - scales: { - xAxes: [{ - id: 'x-axis-1', // need an ID so datasets can reference the scale - type: 'linear', // scatter should not use a category axis - position: 'bottom' - }], - yAxes: [{ - id: 'y-axis-1', - type: 'linear', - position: 'left' - }] - }, - - tooltips: { - callbacks: { - title: function() { - return ''; // doesn't make sense for scatter since data are formatted as a point - }, - label: function(item) { - return '(' + item.xLabel + ', ' + item.yLabel + ')'; - } - } - } -}); - -core_defaults._set('global', { - datasets: { - scatter: { - showLine: false - } - } -}); - -// Scatter charts use line controllers -var controller_scatter = controller_line; - -// NOTE export a map in which the key represents the controller type, not -// the class, and so must be CamelCase in order to be correctly retrieved -// by the controller in core.controller.js (`controllers[meta.type]`). - -var controllers = { - bar: controller_bar, - bubble: controller_bubble, - doughnut: controller_doughnut, - horizontalBar: controller_horizontalBar, - line: controller_line, - polarArea: controller_polarArea, - pie: controller_pie, - radar: controller_radar, - scatter: controller_scatter -}; - -/** - * Helper function to get relative position for an event - * @param {Event|IEvent} event - The event to get the position for - * @param {Chart} chart - The chart - * @returns {object} the event position - */ -function getRelativePosition(e, chart) { - if (e.native) { - return { - x: e.x, - y: e.y - }; - } - - return helpers$1.getRelativePosition(e, chart); -} - -/** - * Helper function to traverse all of the visible elements in the chart - * @param {Chart} chart - the chart - * @param {function} handler - the callback to execute for each visible item - */ -function parseVisibleItems(chart, handler) { - var metasets = chart._getSortedVisibleDatasetMetas(); - var metadata, i, j, ilen, jlen, element; - - for (i = 0, ilen = metasets.length; i < ilen; ++i) { - metadata = metasets[i].data; - for (j = 0, jlen = metadata.length; j < jlen; ++j) { - element = metadata[j]; - if (!element._view.skip) { - handler(element); - } - } - } -} - -/** - * Helper function to get the items that intersect the event position - * @param {ChartElement[]} items - elements to filter - * @param {object} position - the point to be nearest to - * @return {ChartElement[]} the nearest items - */ -function getIntersectItems(chart, position) { - var elements = []; - - parseVisibleItems(chart, function(element) { - if (element.inRange(position.x, position.y)) { - elements.push(element); - } - }); - - return elements; -} - -/** - * Helper function to get the items nearest to the event position considering all visible items in teh chart - * @param {Chart} chart - the chart to look at elements from - * @param {object} position - the point to be nearest to - * @param {boolean} intersect - if true, only consider items that intersect the position - * @param {function} distanceMetric - function to provide the distance between points - * @return {ChartElement[]} the nearest items - */ -function getNearestItems(chart, position, intersect, distanceMetric) { - var minDistance = Number.POSITIVE_INFINITY; - var nearestItems = []; - - parseVisibleItems(chart, function(element) { - if (intersect && !element.inRange(position.x, position.y)) { - return; - } - - var center = element.getCenterPoint(); - var distance = distanceMetric(position, center); - if (distance < minDistance) { - nearestItems = [element]; - minDistance = distance; - } else if (distance === minDistance) { - // Can have multiple items at the same distance in which case we sort by size - nearestItems.push(element); - } - }); - - return nearestItems; -} - -/** - * Get a distance metric function for two points based on the - * axis mode setting - * @param {string} axis - the axis mode. x|y|xy - */ -function getDistanceMetricForAxis(axis) { - var useX = axis.indexOf('x') !== -1; - var useY = axis.indexOf('y') !== -1; - - return function(pt1, pt2) { - var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0; - var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0; - return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2)); - }; -} - -function indexMode(chart, e, options) { - var position = getRelativePosition(e, chart); - // Default axis for index mode is 'x' to match old behaviour - options.axis = options.axis || 'x'; - var distanceMetric = getDistanceMetricForAxis(options.axis); - var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric); - var elements = []; - - if (!items.length) { - return []; - } - - chart._getSortedVisibleDatasetMetas().forEach(function(meta) { - var element = meta.data[items[0]._index]; - - // don't count items that are skipped (null data) - if (element && !element._view.skip) { - elements.push(element); - } - }); - - return elements; -} - -/** - * @interface IInteractionOptions - */ -/** - * If true, only consider items that intersect the point - * @name IInterfaceOptions#boolean - * @type Boolean - */ - -/** - * Contains interaction related functions - * @namespace Chart.Interaction - */ -var core_interaction = { - // Helper function for different modes - modes: { - single: function(chart, e) { - var position = getRelativePosition(e, chart); - var elements = []; - - parseVisibleItems(chart, function(element) { - if (element.inRange(position.x, position.y)) { - elements.push(element); - return elements; - } - }); - - return elements.slice(0, 1); - }, - - /** - * @function Chart.Interaction.modes.label - * @deprecated since version 2.4.0 - * @todo remove at version 3 - * @private - */ - label: indexMode, - - /** - * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something - * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item - * @function Chart.Interaction.modes.index - * @since v2.4.0 - * @param {Chart} chart - the chart we are returning items from - * @param {Event} e - the event we are find things at - * @param {IInteractionOptions} options - options to use during interaction - * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned - */ - index: indexMode, - - /** - * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something - * If the options.intersect is false, we find the nearest item and return the items in that dataset - * @function Chart.Interaction.modes.dataset - * @param {Chart} chart - the chart we are returning items from - * @param {Event} e - the event we are find things at - * @param {IInteractionOptions} options - options to use during interaction - * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned - */ - dataset: function(chart, e, options) { - var position = getRelativePosition(e, chart); - options.axis = options.axis || 'xy'; - var distanceMetric = getDistanceMetricForAxis(options.axis); - var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric); - - if (items.length > 0) { - items = chart.getDatasetMeta(items[0]._datasetIndex).data; - } - - return items; - }, - - /** - * @function Chart.Interaction.modes.x-axis - * @deprecated since version 2.4.0. Use index mode and intersect == true - * @todo remove at version 3 - * @private - */ - 'x-axis': function(chart, e) { - return indexMode(chart, e, {intersect: false}); - }, - - /** - * Point mode returns all elements that hit test based on the event position - * of the event - * @function Chart.Interaction.modes.intersect - * @param {Chart} chart - the chart we are returning items from - * @param {Event} e - the event we are find things at - * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned - */ - point: function(chart, e) { - var position = getRelativePosition(e, chart); - return getIntersectItems(chart, position); - }, - - /** - * nearest mode returns the element closest to the point - * @function Chart.Interaction.modes.intersect - * @param {Chart} chart - the chart we are returning items from - * @param {Event} e - the event we are find things at - * @param {IInteractionOptions} options - options to use - * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned - */ - nearest: function(chart, e, options) { - var position = getRelativePosition(e, chart); - options.axis = options.axis || 'xy'; - var distanceMetric = getDistanceMetricForAxis(options.axis); - return getNearestItems(chart, position, options.intersect, distanceMetric); - }, - - /** - * x mode returns the elements that hit-test at the current x coordinate - * @function Chart.Interaction.modes.x - * @param {Chart} chart - the chart we are returning items from - * @param {Event} e - the event we are find things at - * @param {IInteractionOptions} options - options to use - * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned - */ - x: function(chart, e, options) { - var position = getRelativePosition(e, chart); - var items = []; - var intersectsItem = false; - - parseVisibleItems(chart, function(element) { - if (element.inXRange(position.x)) { - items.push(element); - } - - if (element.inRange(position.x, position.y)) { - intersectsItem = true; - } - }); - - // If we want to trigger on an intersect and we don't have any items - // that intersect the position, return nothing - if (options.intersect && !intersectsItem) { - items = []; - } - return items; - }, - - /** - * y mode returns the elements that hit-test at the current y coordinate - * @function Chart.Interaction.modes.y - * @param {Chart} chart - the chart we are returning items from - * @param {Event} e - the event we are find things at - * @param {IInteractionOptions} options - options to use - * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned - */ - y: function(chart, e, options) { - var position = getRelativePosition(e, chart); - var items = []; - var intersectsItem = false; - - parseVisibleItems(chart, function(element) { - if (element.inYRange(position.y)) { - items.push(element); - } - - if (element.inRange(position.x, position.y)) { - intersectsItem = true; - } - }); - - // If we want to trigger on an intersect and we don't have any items - // that intersect the position, return nothing - if (options.intersect && !intersectsItem) { - items = []; - } - return items; - } - } -}; - -var extend = helpers$1.extend; - -function filterByPosition(array, position) { - return helpers$1.where(array, function(v) { - return v.pos === position; - }); -} - -function sortByWeight(array, reverse) { - return array.sort(function(a, b) { - var v0 = reverse ? b : a; - var v1 = reverse ? a : b; - return v0.weight === v1.weight ? - v0.index - v1.index : - v0.weight - v1.weight; - }); -} - -function wrapBoxes(boxes) { - var layoutBoxes = []; - var i, ilen, box; - - for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) { - box = boxes[i]; - layoutBoxes.push({ - index: i, - box: box, - pos: box.position, - horizontal: box.isHorizontal(), - weight: box.weight - }); - } - return layoutBoxes; -} - -function setLayoutDims(layouts, params) { - var i, ilen, layout; - for (i = 0, ilen = layouts.length; i < ilen; ++i) { - layout = layouts[i]; - // store width used instead of chartArea.w in fitBoxes - layout.width = layout.horizontal - ? layout.box.fullWidth && params.availableWidth - : params.vBoxMaxWidth; - // store height used instead of chartArea.h in fitBoxes - layout.height = layout.horizontal && params.hBoxMaxHeight; - } -} - -function buildLayoutBoxes(boxes) { - var layoutBoxes = wrapBoxes(boxes); - var left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true); - var right = sortByWeight(filterByPosition(layoutBoxes, 'right')); - var top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true); - var bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom')); - - return { - leftAndTop: left.concat(top), - rightAndBottom: right.concat(bottom), - chartArea: filterByPosition(layoutBoxes, 'chartArea'), - vertical: left.concat(right), - horizontal: top.concat(bottom) - }; -} - -function getCombinedMax(maxPadding, chartArea, a, b) { - return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]); -} - -function updateDims(chartArea, params, layout) { - var box = layout.box; - var maxPadding = chartArea.maxPadding; - var newWidth, newHeight; - - if (layout.size) { - // this layout was already counted for, lets first reduce old size - chartArea[layout.pos] -= layout.size; - } - layout.size = layout.horizontal ? box.height : box.width; - chartArea[layout.pos] += layout.size; - - if (box.getPadding) { - var boxPadding = box.getPadding(); - maxPadding.top = Math.max(maxPadding.top, boxPadding.top); - maxPadding.left = Math.max(maxPadding.left, boxPadding.left); - maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom); - maxPadding.right = Math.max(maxPadding.right, boxPadding.right); - } - - newWidth = params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'); - newHeight = params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'); - - if (newWidth !== chartArea.w || newHeight !== chartArea.h) { - chartArea.w = newWidth; - chartArea.h = newHeight; - - // return true if chart area changed in layout's direction - return layout.horizontal ? newWidth !== chartArea.w : newHeight !== chartArea.h; - } -} - -function handleMaxPadding(chartArea) { - var maxPadding = chartArea.maxPadding; - - function updatePos(pos) { - var change = Math.max(maxPadding[pos] - chartArea[pos], 0); - chartArea[pos] += change; - return change; - } - chartArea.y += updatePos('top'); - chartArea.x += updatePos('left'); - updatePos('right'); - updatePos('bottom'); -} - -function getMargins(horizontal, chartArea) { - var maxPadding = chartArea.maxPadding; - - function marginForPositions(positions) { - var margin = {left: 0, top: 0, right: 0, bottom: 0}; - positions.forEach(function(pos) { - margin[pos] = Math.max(chartArea[pos], maxPadding[pos]); - }); - return margin; - } - - return horizontal - ? marginForPositions(['left', 'right']) - : marginForPositions(['top', 'bottom']); -} - -function fitBoxes(boxes, chartArea, params) { - var refitBoxes = []; - var i, ilen, layout, box, refit, changed; - - for (i = 0, ilen = boxes.length; i < ilen; ++i) { - layout = boxes[i]; - box = layout.box; - - box.update( - layout.width || chartArea.w, - layout.height || chartArea.h, - getMargins(layout.horizontal, chartArea) - ); - if (updateDims(chartArea, params, layout)) { - changed = true; - if (refitBoxes.length) { - // Dimensions changed and there were non full width boxes before this - // -> we have to refit those - refit = true; - } - } - if (!box.fullWidth) { // fullWidth boxes don't need to be re-fitted in any case - refitBoxes.push(layout); - } - } - - return refit ? fitBoxes(refitBoxes, chartArea, params) || changed : changed; -} - -function placeBoxes(boxes, chartArea, params) { - var userPadding = params.padding; - var x = chartArea.x; - var y = chartArea.y; - var i, ilen, layout, box; - - for (i = 0, ilen = boxes.length; i < ilen; ++i) { - layout = boxes[i]; - box = layout.box; - if (layout.horizontal) { - box.left = box.fullWidth ? userPadding.left : chartArea.left; - box.right = box.fullWidth ? params.outerWidth - userPadding.right : chartArea.left + chartArea.w; - box.top = y; - box.bottom = y + box.height; - box.width = box.right - box.left; - y = box.bottom; - } else { - box.left = x; - box.right = x + box.width; - box.top = chartArea.top; - box.bottom = chartArea.top + chartArea.h; - box.height = box.bottom - box.top; - x = box.right; - } - } - - chartArea.x = x; - chartArea.y = y; -} - -core_defaults._set('global', { - layout: { - padding: { - top: 0, - right: 0, - bottom: 0, - left: 0 - } - } -}); - -/** - * @interface ILayoutItem - * @prop {string} position - The position of the item in the chart layout. Possible values are - * 'left', 'top', 'right', 'bottom', and 'chartArea' - * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area - * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down - * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom) - * @prop {function} update - Takes two parameters: width and height. Returns size of item - * @prop {function} getPadding - Returns an object with padding on the edges - * @prop {number} width - Width of item. Must be valid after update() - * @prop {number} height - Height of item. Must be valid after update() - * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update - * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update - * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update - * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update - */ - -// The layout service is very self explanatory. It's responsible for the layout within a chart. -// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need -// It is this service's responsibility of carrying out that layout. -var core_layouts = { - defaults: {}, - - /** - * Register a box to a chart. - * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title. - * @param {Chart} chart - the chart to use - * @param {ILayoutItem} item - the item to add to be layed out - */ - addBox: function(chart, item) { - if (!chart.boxes) { - chart.boxes = []; - } - - // initialize item with default values - item.fullWidth = item.fullWidth || false; - item.position = item.position || 'top'; - item.weight = item.weight || 0; - item._layers = item._layers || function() { - return [{ - z: 0, - draw: function() { - item.draw.apply(item, arguments); - } - }]; - }; - - chart.boxes.push(item); - }, - - /** - * Remove a layoutItem from a chart - * @param {Chart} chart - the chart to remove the box from - * @param {ILayoutItem} layoutItem - the item to remove from the layout - */ - removeBox: function(chart, layoutItem) { - var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1; - if (index !== -1) { - chart.boxes.splice(index, 1); - } - }, - - /** - * Sets (or updates) options on the given `item`. - * @param {Chart} chart - the chart in which the item lives (or will be added to) - * @param {ILayoutItem} item - the item to configure with the given options - * @param {object} options - the new item options. - */ - configure: function(chart, item, options) { - var props = ['fullWidth', 'position', 'weight']; - var ilen = props.length; - var i = 0; - var prop; - - for (; i < ilen; ++i) { - prop = props[i]; - if (options.hasOwnProperty(prop)) { - item[prop] = options[prop]; - } - } - }, - - /** - * Fits boxes of the given chart into the given size by having each box measure itself - * then running a fitting algorithm - * @param {Chart} chart - the chart - * @param {number} width - the width to fit into - * @param {number} height - the height to fit into - */ - update: function(chart, width, height) { - if (!chart) { - return; - } - - var layoutOptions = chart.options.layout || {}; - var padding = helpers$1.options.toPadding(layoutOptions.padding); - - var availableWidth = width - padding.width; - var availableHeight = height - padding.height; - var boxes = buildLayoutBoxes(chart.boxes); - var verticalBoxes = boxes.vertical; - var horizontalBoxes = boxes.horizontal; - - // Essentially we now have any number of boxes on each of the 4 sides. - // Our canvas looks like the following. - // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and - // B1 is the bottom axis - // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays - // These locations are single-box locations only, when trying to register a chartArea location that is already taken, - // an error will be thrown. - // - // |----------------------------------------------------| - // | T1 (Full Width) | - // |----------------------------------------------------| - // | | | T2 | | - // | |----|-------------------------------------|----| - // | | | C1 | | C2 | | - // | | |----| |----| | - // | | | | | - // | L1 | L2 | ChartArea (C0) | R1 | - // | | | | | - // | | |----| |----| | - // | | | C3 | | C4 | | - // | |----|-------------------------------------|----| - // | | | B1 | | - // |----------------------------------------------------| - // | B2 (Full Width) | - // |----------------------------------------------------| - // - - var params = Object.freeze({ - outerWidth: width, - outerHeight: height, - padding: padding, - availableWidth: availableWidth, - vBoxMaxWidth: availableWidth / 2 / verticalBoxes.length, - hBoxMaxHeight: availableHeight / 2 - }); - var chartArea = extend({ - maxPadding: extend({}, padding), - w: availableWidth, - h: availableHeight, - x: padding.left, - y: padding.top - }, padding); - - setLayoutDims(verticalBoxes.concat(horizontalBoxes), params); - - // First fit vertical boxes - fitBoxes(verticalBoxes, chartArea, params); - - // Then fit horizontal boxes - if (fitBoxes(horizontalBoxes, chartArea, params)) { - // if the area changed, re-fit vertical boxes - fitBoxes(verticalBoxes, chartArea, params); - } - - handleMaxPadding(chartArea); - - // Finally place the boxes to correct coordinates - placeBoxes(boxes.leftAndTop, chartArea, params); - - // Move to opposite side of chart - chartArea.x += chartArea.w; - chartArea.y += chartArea.h; - - placeBoxes(boxes.rightAndBottom, chartArea, params); - - chart.chartArea = { - left: chartArea.left, - top: chartArea.top, - right: chartArea.left + chartArea.w, - bottom: chartArea.top + chartArea.h - }; - - // Finally update boxes in chartArea (radial scale for example) - helpers$1.each(boxes.chartArea, function(layout) { - var box = layout.box; - extend(box, chart.chartArea); - box.update(chartArea.w, chartArea.h); - }); - } -}; - -/** - * Platform fallback implementation (minimal). - * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939 - */ - -var platform_basic = { - acquireContext: function(item) { - if (item && item.canvas) { - // Support for any object associated to a canvas (including a context2d) - item = item.canvas; - } - - return item && item.getContext('2d') || null; - } -}; - -var platform_dom = "/*\n * DOM element rendering detection\n * https://davidwalsh.name/detect-node-insertion\n */\n@keyframes chartjs-render-animation {\n\tfrom { opacity: 0.99; }\n\tto { opacity: 1; }\n}\n\n.chartjs-render-monitor {\n\tanimation: chartjs-render-animation 0.001s;\n}\n\n/*\n * DOM element resizing detection\n * https://github.com/marcj/css-element-queries\n */\n.chartjs-size-monitor,\n.chartjs-size-monitor-expand,\n.chartjs-size-monitor-shrink {\n\tposition: absolute;\n\tdirection: ltr;\n\tleft: 0;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n\tvisibility: hidden;\n\tz-index: -1;\n}\n\n.chartjs-size-monitor-expand > div {\n\tposition: absolute;\n\twidth: 1000000px;\n\theight: 1000000px;\n\tleft: 0;\n\ttop: 0;\n}\n\n.chartjs-size-monitor-shrink > div {\n\tposition: absolute;\n\twidth: 200%;\n\theight: 200%;\n\tleft: 0;\n\ttop: 0;\n}\n"; - -var platform_dom$1 = /*#__PURE__*/Object.freeze({ -__proto__: null, -'default': platform_dom -}); - -var stylesheet = getCjsExportFromNamespace(platform_dom$1); - -var EXPANDO_KEY = '$chartjs'; -var CSS_PREFIX = 'chartjs-'; -var CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor'; -var CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor'; -var CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation'; -var ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart']; - -/** - * DOM event types -> Chart.js event types. - * Note: only events with different types are mapped. - * @see https://developer.mozilla.org/en-US/docs/Web/Events - */ -var EVENT_TYPES = { - touchstart: 'mousedown', - touchmove: 'mousemove', - touchend: 'mouseup', - pointerenter: 'mouseenter', - pointerdown: 'mousedown', - pointermove: 'mousemove', - pointerup: 'mouseup', - pointerleave: 'mouseout', - pointerout: 'mouseout' -}; - -/** - * The "used" size is the final value of a dimension property after all calculations have - * been performed. This method uses the computed style of `element` but returns undefined - * if the computed style is not expressed in pixels. That can happen in some cases where - * `element` has a size relative to its parent and this last one is not yet displayed, - * for example because of `display: none` on a parent node. - * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value - * @returns {number} Size in pixels or undefined if unknown. - */ -function readUsedSize(element, property) { - var value = helpers$1.getStyle(element, property); - var matches = value && value.match(/^(\d+)(\.\d+)?px$/); - return matches ? Number(matches[1]) : undefined; -} - -/** - * Initializes the canvas style and render size without modifying the canvas display size, - * since responsiveness is handled by the controller.resize() method. The config is used - * to determine the aspect ratio to apply in case no explicit height has been specified. - */ -function initCanvas(canvas, config) { - var style = canvas.style; - - // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it - // returns null or '' if no explicit value has been set to the canvas attribute. - var renderHeight = canvas.getAttribute('height'); - var renderWidth = canvas.getAttribute('width'); - - // Chart.js modifies some canvas values that we want to restore on destroy - canvas[EXPANDO_KEY] = { - initial: { - height: renderHeight, - width: renderWidth, - style: { - display: style.display, - height: style.height, - width: style.width - } - } - }; - - // Force canvas to display as block to avoid extra space caused by inline - // elements, which would interfere with the responsive resize process. - // https://github.com/chartjs/Chart.js/issues/2538 - style.display = style.display || 'block'; - - if (renderWidth === null || renderWidth === '') { - var displayWidth = readUsedSize(canvas, 'width'); - if (displayWidth !== undefined) { - canvas.width = displayWidth; - } - } - - if (renderHeight === null || renderHeight === '') { - if (canvas.style.height === '') { - // If no explicit render height and style height, let's apply the aspect ratio, - // which one can be specified by the user but also by charts as default option - // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2. - canvas.height = canvas.width / (config.options.aspectRatio || 2); - } else { - var displayHeight = readUsedSize(canvas, 'height'); - if (displayWidth !== undefined) { - canvas.height = displayHeight; - } - } - } - - return canvas; -} - -/** - * Detects support for options object argument in addEventListener. - * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support - * @private - */ -var supportsEventListenerOptions = (function() { - var supports = false; - try { - var options = Object.defineProperty({}, 'passive', { - // eslint-disable-next-line getter-return - get: function() { - supports = true; - } - }); - window.addEventListener('e', null, options); - } catch (e) { - // continue regardless of error - } - return supports; -}()); - -// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events. -// https://github.com/chartjs/Chart.js/issues/4287 -var eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false; - -function addListener(node, type, listener) { - node.addEventListener(type, listener, eventListenerOptions); -} - -function removeListener(node, type, listener) { - node.removeEventListener(type, listener, eventListenerOptions); -} - -function createEvent(type, chart, x, y, nativeEvent) { - return { - type: type, - chart: chart, - native: nativeEvent || null, - x: x !== undefined ? x : null, - y: y !== undefined ? y : null, - }; -} - -function fromNativeEvent(event, chart) { - var type = EVENT_TYPES[event.type] || event.type; - var pos = helpers$1.getRelativePosition(event, chart); - return createEvent(type, chart, pos.x, pos.y, event); -} - -function throttled(fn, thisArg) { - var ticking = false; - var args = []; - - return function() { - args = Array.prototype.slice.call(arguments); - thisArg = thisArg || this; - - if (!ticking) { - ticking = true; - helpers$1.requestAnimFrame.call(window, function() { - ticking = false; - fn.apply(thisArg, args); - }); - } - }; -} - -function createDiv(cls) { - var el = document.createElement('div'); - el.className = cls || ''; - return el; -} - -// Implementation based on https://github.com/marcj/css-element-queries -function createResizer(handler) { - var maxSize = 1000000; - - // NOTE(SB) Don't use innerHTML because it could be considered unsafe. - // https://github.com/chartjs/Chart.js/issues/5902 - var resizer = createDiv(CSS_SIZE_MONITOR); - var expand = createDiv(CSS_SIZE_MONITOR + '-expand'); - var shrink = createDiv(CSS_SIZE_MONITOR + '-shrink'); - - expand.appendChild(createDiv()); - shrink.appendChild(createDiv()); - - resizer.appendChild(expand); - resizer.appendChild(shrink); - resizer._reset = function() { - expand.scrollLeft = maxSize; - expand.scrollTop = maxSize; - shrink.scrollLeft = maxSize; - shrink.scrollTop = maxSize; - }; - - var onScroll = function() { - resizer._reset(); - handler(); - }; - - addListener(expand, 'scroll', onScroll.bind(expand, 'expand')); - addListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink')); - - return resizer; -} - -// https://davidwalsh.name/detect-node-insertion -function watchForRender(node, handler) { - var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {}); - var proxy = expando.renderProxy = function(e) { - if (e.animationName === CSS_RENDER_ANIMATION) { - handler(); - } - }; - - helpers$1.each(ANIMATION_START_EVENTS, function(type) { - addListener(node, type, proxy); - }); - - // #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class - // is removed then added back immediately (same animation frame?). Accessing the - // `offsetParent` property will force a reflow and re-evaluate the CSS animation. - // https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics - // https://github.com/chartjs/Chart.js/issues/4737 - expando.reflow = !!node.offsetParent; - - node.classList.add(CSS_RENDER_MONITOR); -} - -function unwatchForRender(node) { - var expando = node[EXPANDO_KEY] || {}; - var proxy = expando.renderProxy; - - if (proxy) { - helpers$1.each(ANIMATION_START_EVENTS, function(type) { - removeListener(node, type, proxy); - }); - - delete expando.renderProxy; - } - - node.classList.remove(CSS_RENDER_MONITOR); -} - -function addResizeListener(node, listener, chart) { - var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {}); - - // Let's keep track of this added resizer and thus avoid DOM query when removing it. - var resizer = expando.resizer = createResizer(throttled(function() { - if (expando.resizer) { - var container = chart.options.maintainAspectRatio && node.parentNode; - var w = container ? container.clientWidth : 0; - listener(createEvent('resize', chart)); - if (container && container.clientWidth < w && chart.canvas) { - // If the container size shrank during chart resize, let's assume - // scrollbar appeared. So we resize again with the scrollbar visible - - // effectively making chart smaller and the scrollbar hidden again. - // Because we are inside `throttled`, and currently `ticking`, scroll - // events are ignored during this whole 2 resize process. - // If we assumed wrong and something else happened, we are resizing - // twice in a frame (potential performance issue) - listener(createEvent('resize', chart)); - } - } - })); - - // The resizer needs to be attached to the node parent, so we first need to be - // sure that `node` is attached to the DOM before injecting the resizer element. - watchForRender(node, function() { - if (expando.resizer) { - var container = node.parentNode; - if (container && container !== resizer.parentNode) { - container.insertBefore(resizer, container.firstChild); - } - - // The container size might have changed, let's reset the resizer state. - resizer._reset(); - } - }); -} - -function removeResizeListener(node) { - var expando = node[EXPANDO_KEY] || {}; - var resizer = expando.resizer; - - delete expando.resizer; - unwatchForRender(node); - - if (resizer && resizer.parentNode) { - resizer.parentNode.removeChild(resizer); - } -} - -/** - * Injects CSS styles inline if the styles are not already present. - * @param {HTMLDocument|ShadowRoot} rootNode - the node to contain the \n \n\n could become:\n\n \n
\n \n
\n\n Note the use of @polyfill in the comment above a ShadowDOM specific style\n declaration. This is a directive to the styling shim to use the selector\n in comments in lieu of the next selector when running under polyfill.\n*/\nclass ShadowCss {\n constructor() {\n this.strictStyling = true;\n }\n /*\n * Shim some cssText with the given selector. Returns cssText that can\n * be included in the document via WebComponents.ShadowCSS.addCssToDocument(css).\n *\n * When strictStyling is true:\n * - selector is the attribute added to all elements inside the host,\n * - hostSelector is the attribute added to the host itself.\n */\n shimCssText(cssText, selector, hostSelector = '') {\n const commentsWithHash = extractCommentsWithHash(cssText);\n cssText = stripComments(cssText);\n cssText = this._insertDirectives(cssText);\n const scopedCssText = this._scopeCssText(cssText, selector, hostSelector);\n return [scopedCssText, ...commentsWithHash].join('\\n');\n }\n _insertDirectives(cssText) {\n cssText = this._insertPolyfillDirectivesInCssText(cssText);\n return this._insertPolyfillRulesInCssText(cssText);\n }\n /*\n * Process styles to convert native ShadowDOM rules that will trip\n * up the css parser; we rely on decorating the stylesheet with inert rules.\n *\n * For example, we convert this rule:\n *\n * polyfill-next-selector { content: ':host menu-item'; }\n * ::content menu-item {\n *\n * to this:\n *\n * scopeName menu-item {\n *\n **/\n _insertPolyfillDirectivesInCssText(cssText) {\n // Difference with webcomponents.js: does not handle comments\n return cssText.replace(_cssContentNextSelectorRe, function (...m) {\n return m[2] + '{';\n });\n }\n /*\n * Process styles to add rules which will only apply under the polyfill\n *\n * For example, we convert this rule:\n *\n * polyfill-rule {\n * content: ':host menu-item';\n * ...\n * }\n *\n * to this:\n *\n * scopeName menu-item {...}\n *\n **/\n _insertPolyfillRulesInCssText(cssText) {\n // Difference with webcomponents.js: does not handle comments\n return cssText.replace(_cssContentRuleRe, (...m) => {\n const rule = m[0].replace(m[1], '').replace(m[2], '');\n return m[4] + rule;\n });\n }\n /* Ensure styles are scoped. Pseudo-scoping takes a rule like:\n *\n * .foo {... }\n *\n * and converts this to\n *\n * scopeName .foo { ... }\n */\n _scopeCssText(cssText, scopeSelector, hostSelector) {\n const unscopedRules = this._extractUnscopedRulesFromCssText(cssText);\n // replace :host and :host-context -shadowcsshost and -shadowcsshost respectively\n cssText = this._insertPolyfillHostInCssText(cssText);\n cssText = this._convertColonHost(cssText);\n cssText = this._convertColonHostContext(cssText);\n cssText = this._convertShadowDOMSelectors(cssText);\n if (scopeSelector) {\n cssText = this._scopeSelectors(cssText, scopeSelector, hostSelector);\n }\n cssText = cssText + '\\n' + unscopedRules;\n return cssText.trim();\n }\n /*\n * Process styles to add rules which will only apply under the polyfill\n * and do not process via CSSOM. (CSSOM is destructive to rules on rare\n * occasions, e.g. -webkit-calc on Safari.)\n * For example, we convert this rule:\n *\n * @polyfill-unscoped-rule {\n * content: 'menu-item';\n * ... }\n *\n * to this:\n *\n * menu-item {...}\n *\n **/\n _extractUnscopedRulesFromCssText(cssText) {\n // Difference with webcomponents.js: does not handle comments\n let r = '';\n let m;\n _cssContentUnscopedRuleRe.lastIndex = 0;\n while ((m = _cssContentUnscopedRuleRe.exec(cssText)) !== null) {\n const rule = m[0].replace(m[2], '').replace(m[1], m[4]);\n r += rule + '\\n\\n';\n }\n return r;\n }\n /*\n * convert a rule like :host(.foo) > .bar { }\n *\n * to\n *\n * .foo > .bar\n */\n _convertColonHost(cssText) {\n return this._convertColonRule(cssText, _cssColonHostRe, this._colonHostPartReplacer);\n }\n /*\n * convert a rule like :host-context(.foo) > .bar { }\n *\n * to\n *\n * .foo > .bar, .foo scopeName > .bar { }\n *\n * and\n *\n * :host-context(.foo:host) .bar { ... }\n *\n * to\n *\n * .foo .bar { ... }\n */\n _convertColonHostContext(cssText) {\n return this._convertColonRule(cssText, _cssColonHostContextRe, this._colonHostContextPartReplacer);\n }\n _convertColonRule(cssText, regExp, partReplacer) {\n // m[1] = :host(-context), m[2] = contents of (), m[3] rest of rule\n return cssText.replace(regExp, function (...m) {\n if (m[2]) {\n const parts = m[2].split(',');\n const r = [];\n for (let i = 0; i < parts.length; i++) {\n const p = parts[i].trim();\n if (!p)\n break;\n r.push(partReplacer(_polyfillHostNoCombinator, p, m[3]));\n }\n return r.join(',');\n }\n else {\n return _polyfillHostNoCombinator + m[3];\n }\n });\n }\n _colonHostContextPartReplacer(host, part, suffix) {\n if (part.indexOf(_polyfillHost) > -1) {\n return this._colonHostPartReplacer(host, part, suffix);\n }\n else {\n return host + part + suffix + ', ' + part + ' ' + host + suffix;\n }\n }\n _colonHostPartReplacer(host, part, suffix) {\n return host + part.replace(_polyfillHost, '') + suffix;\n }\n /*\n * Convert combinators like ::shadow and pseudo-elements like ::content\n * by replacing with space.\n */\n _convertShadowDOMSelectors(cssText) {\n return _shadowDOMSelectorsRe.reduce((result, pattern) => result.replace(pattern, ' '), cssText);\n }\n // change a selector like 'div' to 'name div'\n _scopeSelectors(cssText, scopeSelector, hostSelector) {\n return processRules(cssText, (rule) => {\n let selector = rule.selector;\n let content = rule.content;\n if (rule.selector[0] != '@') {\n selector =\n this._scopeSelector(rule.selector, scopeSelector, hostSelector, this.strictStyling);\n }\n else if (rule.selector.startsWith('@media') || rule.selector.startsWith('@supports') ||\n rule.selector.startsWith('@page') || rule.selector.startsWith('@document')) {\n content = this._scopeSelectors(rule.content, scopeSelector, hostSelector);\n }\n return new CssRule(selector, content);\n });\n }\n _scopeSelector(selector, scopeSelector, hostSelector, strict) {\n return selector.split(',')\n .map(part => part.trim().split(_shadowDeepSelectors))\n .map((deepParts) => {\n const [shallowPart, ...otherParts] = deepParts;\n const applyScope = (shallowPart) => {\n if (this._selectorNeedsScoping(shallowPart, scopeSelector)) {\n return strict ?\n this._applyStrictSelectorScope(shallowPart, scopeSelector, hostSelector) :\n this._applySelectorScope(shallowPart, scopeSelector, hostSelector);\n }\n else {\n return shallowPart;\n }\n };\n return [applyScope(shallowPart), ...otherParts].join(' ');\n })\n .join(', ');\n }\n _selectorNeedsScoping(selector, scopeSelector) {\n const re = this._makeScopeMatcher(scopeSelector);\n return !re.test(selector);\n }\n _makeScopeMatcher(scopeSelector) {\n const lre = /\\[/g;\n const rre = /\\]/g;\n scopeSelector = scopeSelector.replace(lre, '\\\\[').replace(rre, '\\\\]');\n return new RegExp('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');\n }\n _applySelectorScope(selector, scopeSelector, hostSelector) {\n // Difference from webcomponents.js: scopeSelector could not be an array\n return this._applySimpleSelectorScope(selector, scopeSelector, hostSelector);\n }\n // scope via name and [is=name]\n _applySimpleSelectorScope(selector, scopeSelector, hostSelector) {\n // In Android browser, the lastIndex is not reset when the regex is used in String.replace()\n _polyfillHostRe.lastIndex = 0;\n if (_polyfillHostRe.test(selector)) {\n const replaceBy = this.strictStyling ? `[${hostSelector}]` : scopeSelector;\n return selector\n .replace(_polyfillHostNoCombinatorRe, (hnc, selector) => {\n return selector.replace(/([^:]*)(:*)(.*)/, (_, before, colon, after) => {\n return before + replaceBy + colon + after;\n });\n })\n .replace(_polyfillHostRe, replaceBy + ' ');\n }\n return scopeSelector + ' ' + selector;\n }\n // return a selector with [name] suffix on each simple selector\n // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name] /** @internal */\n _applyStrictSelectorScope(selector, scopeSelector, hostSelector) {\n const isRe = /\\[is=([^\\]]*)\\]/g;\n scopeSelector = scopeSelector.replace(isRe, (_, ...parts) => parts[0]);\n const attrName = '[' + scopeSelector + ']';\n const _scopeSelectorPart = (p) => {\n let scopedP = p.trim();\n if (!scopedP) {\n return '';\n }\n if (p.indexOf(_polyfillHostNoCombinator) > -1) {\n scopedP = this._applySimpleSelectorScope(p, scopeSelector, hostSelector);\n }\n else {\n // remove :host since it should be unnecessary\n const t = p.replace(_polyfillHostRe, '');\n if (t.length > 0) {\n const matches = t.match(/([^:]*)(:*)(.*)/);\n if (matches) {\n scopedP = matches[1] + attrName + matches[2] + matches[3];\n }\n }\n }\n return scopedP;\n };\n const safeContent = new SafeSelector(selector);\n selector = safeContent.content();\n let scopedSelector = '';\n let startIndex = 0;\n let res;\n const sep = /( |>|\\+|~(?!=))\\s*/g;\n // If a selector appears before :host it should not be shimmed as it\n // matches on ancestor elements and not on elements in the host's shadow\n // `:host-context(div)` is transformed to\n // `-shadowcsshost-no-combinatordiv, div -shadowcsshost-no-combinator`\n // the `div` is not part of the component in the 2nd selectors and should not be scoped.\n // Historically `component-tag:host` was matching the component so we also want to preserve\n // this behavior to avoid breaking legacy apps (it should not match).\n // The behavior should be:\n // - `tag:host` -> `tag[h]` (this is to avoid breaking legacy apps, should not match anything)\n // - `tag :host` -> `tag [h]` (`tag` is not scoped because it's considered part of a\n // `:host-context(tag)`)\n const hasHost = selector.indexOf(_polyfillHostNoCombinator) > -1;\n // Only scope parts after the first `-shadowcsshost-no-combinator` when it is present\n let shouldScope = !hasHost;\n while ((res = sep.exec(selector)) !== null) {\n const separator = res[1];\n const part = selector.slice(startIndex, res.index).trim();\n shouldScope = shouldScope || part.indexOf(_polyfillHostNoCombinator) > -1;\n const scopedPart = shouldScope ? _scopeSelectorPart(part) : part;\n scopedSelector += `${scopedPart} ${separator} `;\n startIndex = sep.lastIndex;\n }\n const part = selector.substring(startIndex);\n shouldScope = shouldScope || part.indexOf(_polyfillHostNoCombinator) > -1;\n scopedSelector += shouldScope ? _scopeSelectorPart(part) : part;\n // replace the placeholders with their original values\n return safeContent.restore(scopedSelector);\n }\n _insertPolyfillHostInCssText(selector) {\n return selector.replace(_colonHostContextRe, _polyfillHostContext)\n .replace(_colonHostRe, _polyfillHost);\n }\n}\nclass SafeSelector {\n constructor(selector) {\n this.placeholders = [];\n this.index = 0;\n // Replaces attribute selectors with placeholders.\n // The WS in [attr=\"va lue\"] would otherwise be interpreted as a selector separator.\n selector = selector.replace(/(\\[[^\\]]*\\])/g, (_, keep) => {\n const replaceBy = `__ph-${this.index}__`;\n this.placeholders.push(keep);\n this.index++;\n return replaceBy;\n });\n // Replaces the expression in `:nth-child(2n + 1)` with a placeholder.\n // WS and \"+\" would otherwise be interpreted as selector separators.\n this._content = selector.replace(/(:nth-[-\\w]+)(\\([^)]+\\))/g, (_, pseudo, exp) => {\n const replaceBy = `__ph-${this.index}__`;\n this.placeholders.push(exp);\n this.index++;\n return pseudo + replaceBy;\n });\n }\n restore(content) {\n return content.replace(/__ph-(\\d+)__/g, (ph, index) => this.placeholders[+index]);\n }\n content() {\n return this._content;\n }\n}\nconst _cssContentNextSelectorRe = /polyfill-next-selector[^}]*content:[\\s]*?(['\"])(.*?)\\1[;\\s]*}([^{]*?){/gim;\nconst _cssContentRuleRe = /(polyfill-rule)[^}]*(content:[\\s]*(['\"])(.*?)\\3)[;\\s]*[^}]*}/gim;\nconst _cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content:[\\s]*(['\"])(.*?)\\3)[;\\s]*[^}]*}/gim;\nconst _polyfillHost = '-shadowcsshost';\n// note: :host-context pre-processed to -shadowcsshostcontext.\nconst _polyfillHostContext = '-shadowcsscontext';\nconst _parenSuffix = ')(?:\\\\((' +\n '(?:\\\\([^)(]*\\\\)|[^)(]*)+?' +\n ')\\\\))?([^,{]*)';\nconst _cssColonHostRe = new RegExp('(' + _polyfillHost + _parenSuffix, 'gim');\nconst _cssColonHostContextRe = new RegExp('(' + _polyfillHostContext + _parenSuffix, 'gim');\nconst _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';\nconst _polyfillHostNoCombinatorRe = /-shadowcsshost-no-combinator([^\\s]*)/;\nconst _shadowDOMSelectorsRe = [\n /::shadow/g,\n /::content/g,\n // Deprecated selectors\n /\\/shadow-deep\\//g,\n /\\/shadow\\//g,\n];\n// The deep combinator is deprecated in the CSS spec\n// Support for `>>>`, `deep`, `::ng-deep` is then also deprecated and will be removed in the future.\n// see https://github.com/angular/angular/pull/17677\nconst _shadowDeepSelectors = /(?:>>>)|(?:\\/deep\\/)|(?:::ng-deep)/g;\nconst _selectorReSuffix = '([>\\\\s~+\\[.,{:][\\\\s\\\\S]*)?$';\nconst _polyfillHostRe = /-shadowcsshost/gim;\nconst _colonHostRe = /:host/gim;\nconst _colonHostContextRe = /:host-context/gim;\nconst _commentRe = /\\/\\*\\s*[\\s\\S]*?\\*\\//g;\nfunction stripComments(input) {\n return input.replace(_commentRe, '');\n}\nconst _commentWithHashRe = /\\/\\*\\s*#\\s*source(Mapping)?URL=[\\s\\S]+?\\*\\//g;\nfunction extractCommentsWithHash(input) {\n return input.match(_commentWithHashRe) || [];\n}\nconst _ruleRe = /(\\s*)([^;\\{\\}]+?)(\\s*)((?:{%BLOCK%}?\\s*;?)|(?:\\s*;))/g;\nconst _curlyRe = /([{}])/g;\nconst OPEN_CURLY = '{';\nconst CLOSE_CURLY = '}';\nconst BLOCK_PLACEHOLDER = '%BLOCK%';\nclass CssRule {\n constructor(selector, content) {\n this.selector = selector;\n this.content = content;\n }\n}\nfunction processRules(input, ruleCallback) {\n const inputWithEscapedBlocks = escapeBlocks(input);\n let nextBlockIndex = 0;\n return inputWithEscapedBlocks.escapedString.replace(_ruleRe, function (...m) {\n const selector = m[2];\n let content = '';\n let suffix = m[4];\n let contentPrefix = '';\n if (suffix && suffix.startsWith('{' + BLOCK_PLACEHOLDER)) {\n content = inputWithEscapedBlocks.blocks[nextBlockIndex++];\n suffix = suffix.substring(BLOCK_PLACEHOLDER.length + 1);\n contentPrefix = '{';\n }\n const rule = ruleCallback(new CssRule(selector, content));\n return `${m[1]}${rule.selector}${m[3]}${contentPrefix}${rule.content}${suffix}`;\n });\n}\nclass StringWithEscapedBlocks {\n constructor(escapedString, blocks) {\n this.escapedString = escapedString;\n this.blocks = blocks;\n }\n}\nfunction escapeBlocks(input) {\n const inputParts = input.split(_curlyRe);\n const resultParts = [];\n const escapedBlocks = [];\n let bracketCount = 0;\n let currentBlockParts = [];\n for (let partIndex = 0; partIndex < inputParts.length; partIndex++) {\n const part = inputParts[partIndex];\n if (part == CLOSE_CURLY) {\n bracketCount--;\n }\n if (bracketCount > 0) {\n currentBlockParts.push(part);\n }\n else {\n if (currentBlockParts.length > 0) {\n escapedBlocks.push(currentBlockParts.join(''));\n resultParts.push(BLOCK_PLACEHOLDER);\n currentBlockParts = [];\n }\n resultParts.push(part);\n }\n if (part == OPEN_CURLY) {\n bracketCount++;\n }\n }\n if (currentBlockParts.length > 0) {\n escapedBlocks.push(currentBlockParts.join(''));\n resultParts.push(BLOCK_PLACEHOLDER);\n }\n return new StringWithEscapedBlocks(resultParts.join(''), escapedBlocks);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst COMPONENT_VARIABLE = '%COMP%';\nconst HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`;\nconst CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`;\nclass StylesCompileDependency {\n constructor(name, moduleUrl, setValue) {\n this.name = name;\n this.moduleUrl = moduleUrl;\n this.setValue = setValue;\n }\n}\nclass CompiledStylesheet {\n constructor(outputCtx, stylesVar, dependencies, isShimmed, meta) {\n this.outputCtx = outputCtx;\n this.stylesVar = stylesVar;\n this.dependencies = dependencies;\n this.isShimmed = isShimmed;\n this.meta = meta;\n }\n}\nclass StyleCompiler {\n constructor(_urlResolver) {\n this._urlResolver = _urlResolver;\n this._shadowCss = new ShadowCss();\n }\n compileComponent(outputCtx, comp) {\n const template = comp.template;\n return this._compileStyles(outputCtx, comp, new CompileStylesheetMetadata({\n styles: template.styles,\n styleUrls: template.styleUrls,\n moduleUrl: identifierModuleUrl(comp.type)\n }), this.needsStyleShim(comp), true);\n }\n compileStyles(outputCtx, comp, stylesheet, shim = this.needsStyleShim(comp)) {\n return this._compileStyles(outputCtx, comp, stylesheet, shim, false);\n }\n needsStyleShim(comp) {\n return comp.template.encapsulation === ViewEncapsulation.Emulated;\n }\n _compileStyles(outputCtx, comp, stylesheet, shim, isComponentStylesheet) {\n const styleExpressions = stylesheet.styles.map(plainStyle => literal(this._shimIfNeeded(plainStyle, shim)));\n const dependencies = [];\n stylesheet.styleUrls.forEach((styleUrl) => {\n const exprIndex = styleExpressions.length;\n // Note: This placeholder will be filled later.\n styleExpressions.push(null);\n dependencies.push(new StylesCompileDependency(getStylesVarName(null), styleUrl, (value) => styleExpressions[exprIndex] = outputCtx.importExpr(value)));\n });\n // styles variable contains plain strings and arrays of other styles arrays (recursive),\n // so we set its type to dynamic.\n const stylesVar = getStylesVarName(isComponentStylesheet ? comp : null);\n const stmt = variable(stylesVar)\n .set(literalArr(styleExpressions, new ArrayType(DYNAMIC_TYPE, [TypeModifier.Const])))\n .toDeclStmt(null, isComponentStylesheet ? [StmtModifier.Final] : [\n StmtModifier.Final, StmtModifier.Exported\n ]);\n outputCtx.statements.push(stmt);\n return new CompiledStylesheet(outputCtx, stylesVar, dependencies, shim, stylesheet);\n }\n _shimIfNeeded(style, shim) {\n return shim ? this._shadowCss.shimCssText(style, CONTENT_ATTR, HOST_ATTR) : style;\n }\n}\nfunction getStylesVarName(component) {\n let result = `styles`;\n if (component) {\n result += `_${identifierName(component.type)}`;\n }\n return result;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A path is an ordered set of elements. Typically a path is to a\n * particular offset in a source file. The head of the list is the top\n * most node. The tail is the node that contains the offset directly.\n *\n * For example, the expression `a + b + c` might have an ast that looks\n * like:\n * +\n * / \\\n * a +\n * / \\\n * b c\n *\n * The path to the node at offset 9 would be `['+' at 1-10, '+' at 7-10,\n * 'c' at 9-10]` and the path the node at offset 1 would be\n * `['+' at 1-10, 'a' at 1-2]`.\n */\nclass AstPath {\n constructor(path, position = -1) {\n this.path = path;\n this.position = position;\n }\n get empty() {\n return !this.path || !this.path.length;\n }\n get head() {\n return this.path[0];\n }\n get tail() {\n return this.path[this.path.length - 1];\n }\n parentOf(node) {\n return node && this.path[this.path.indexOf(node) - 1];\n }\n childOf(node) {\n return this.path[this.path.indexOf(node) + 1];\n }\n first(ctor) {\n for (let i = this.path.length - 1; i >= 0; i--) {\n let item = this.path[i];\n if (item instanceof ctor)\n return item;\n }\n }\n push(node) {\n this.path.push(node);\n }\n pop() {\n return this.path.pop();\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass NodeWithI18n {\n constructor(sourceSpan, i18n) {\n this.sourceSpan = sourceSpan;\n this.i18n = i18n;\n }\n}\nclass Text$3 extends NodeWithI18n {\n constructor(value, sourceSpan, i18n) {\n super(sourceSpan, i18n);\n this.value = value;\n }\n visit(visitor, context) {\n return visitor.visitText(this, context);\n }\n}\nclass Expansion extends NodeWithI18n {\n constructor(switchValue, type, cases, sourceSpan, switchValueSourceSpan, i18n) {\n super(sourceSpan, i18n);\n this.switchValue = switchValue;\n this.type = type;\n this.cases = cases;\n this.switchValueSourceSpan = switchValueSourceSpan;\n }\n visit(visitor, context) {\n return visitor.visitExpansion(this, context);\n }\n}\nclass ExpansionCase {\n constructor(value, expression, sourceSpan, valueSourceSpan, expSourceSpan) {\n this.value = value;\n this.expression = expression;\n this.sourceSpan = sourceSpan;\n this.valueSourceSpan = valueSourceSpan;\n this.expSourceSpan = expSourceSpan;\n }\n visit(visitor, context) {\n return visitor.visitExpansionCase(this, context);\n }\n}\nclass Attribute extends NodeWithI18n {\n constructor(name, value, sourceSpan, valueSpan, i18n) {\n super(sourceSpan, i18n);\n this.name = name;\n this.value = value;\n this.valueSpan = valueSpan;\n }\n visit(visitor, context) {\n return visitor.visitAttribute(this, context);\n }\n}\nclass Element$1 extends NodeWithI18n {\n constructor(name, attrs, children, sourceSpan, startSourceSpan = null, endSourceSpan = null, i18n) {\n super(sourceSpan, i18n);\n this.name = name;\n this.attrs = attrs;\n this.children = children;\n this.startSourceSpan = startSourceSpan;\n this.endSourceSpan = endSourceSpan;\n }\n visit(visitor, context) {\n return visitor.visitElement(this, context);\n }\n}\nclass Comment {\n constructor(value, sourceSpan) {\n this.value = value;\n this.sourceSpan = sourceSpan;\n }\n visit(visitor, context) {\n return visitor.visitComment(this, context);\n }\n}\nfunction visitAll$1(visitor, nodes, context = null) {\n const result = [];\n const visit = visitor.visit ?\n (ast) => visitor.visit(ast, context) || ast.visit(visitor, context) :\n (ast) => ast.visit(visitor, context);\n nodes.forEach(ast => {\n const astResult = visit(ast);\n if (astResult) {\n result.push(astResult);\n }\n });\n return result;\n}\nclass RecursiveVisitor$1 {\n constructor() { }\n visitElement(ast, context) {\n this.visitChildren(context, visit => {\n visit(ast.attrs);\n visit(ast.children);\n });\n }\n visitAttribute(ast, context) { }\n visitText(ast, context) { }\n visitComment(ast, context) { }\n visitExpansion(ast, context) {\n return this.visitChildren(context, visit => {\n visit(ast.cases);\n });\n }\n visitExpansionCase(ast, context) { }\n visitChildren(context, cb) {\n let results = [];\n let t = this;\n function visit(children) {\n if (children)\n results.push(visitAll$1(t, children, context));\n }\n cb(visit);\n return Array.prototype.concat.apply([], results);\n }\n}\nfunction spanOf(ast) {\n const start = ast.sourceSpan.start.offset;\n let end = ast.sourceSpan.end.offset;\n if (ast instanceof Element$1) {\n if (ast.endSourceSpan) {\n end = ast.endSourceSpan.end.offset;\n }\n else if (ast.children && ast.children.length) {\n end = spanOf(ast.children[ast.children.length - 1]).end;\n }\n }\n return { start, end };\n}\nfunction findNode(nodes, position) {\n const path = [];\n const visitor = new class extends RecursiveVisitor$1 {\n visit(ast, context) {\n const span = spanOf(ast);\n if (span.start <= position && position < span.end) {\n path.push(ast);\n }\n else {\n // Returning a value here will result in the children being skipped.\n return true;\n }\n }\n };\n visitAll$1(visitor, nodes);\n return new AstPath(path, position);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar TokenType;\n(function (TokenType) {\n TokenType[TokenType[\"TAG_OPEN_START\"] = 0] = \"TAG_OPEN_START\";\n TokenType[TokenType[\"TAG_OPEN_END\"] = 1] = \"TAG_OPEN_END\";\n TokenType[TokenType[\"TAG_OPEN_END_VOID\"] = 2] = \"TAG_OPEN_END_VOID\";\n TokenType[TokenType[\"TAG_CLOSE\"] = 3] = \"TAG_CLOSE\";\n TokenType[TokenType[\"TEXT\"] = 4] = \"TEXT\";\n TokenType[TokenType[\"ESCAPABLE_RAW_TEXT\"] = 5] = \"ESCAPABLE_RAW_TEXT\";\n TokenType[TokenType[\"RAW_TEXT\"] = 6] = \"RAW_TEXT\";\n TokenType[TokenType[\"COMMENT_START\"] = 7] = \"COMMENT_START\";\n TokenType[TokenType[\"COMMENT_END\"] = 8] = \"COMMENT_END\";\n TokenType[TokenType[\"CDATA_START\"] = 9] = \"CDATA_START\";\n TokenType[TokenType[\"CDATA_END\"] = 10] = \"CDATA_END\";\n TokenType[TokenType[\"ATTR_NAME\"] = 11] = \"ATTR_NAME\";\n TokenType[TokenType[\"ATTR_QUOTE\"] = 12] = \"ATTR_QUOTE\";\n TokenType[TokenType[\"ATTR_VALUE\"] = 13] = \"ATTR_VALUE\";\n TokenType[TokenType[\"DOC_TYPE\"] = 14] = \"DOC_TYPE\";\n TokenType[TokenType[\"EXPANSION_FORM_START\"] = 15] = \"EXPANSION_FORM_START\";\n TokenType[TokenType[\"EXPANSION_CASE_VALUE\"] = 16] = \"EXPANSION_CASE_VALUE\";\n TokenType[TokenType[\"EXPANSION_CASE_EXP_START\"] = 17] = \"EXPANSION_CASE_EXP_START\";\n TokenType[TokenType[\"EXPANSION_CASE_EXP_END\"] = 18] = \"EXPANSION_CASE_EXP_END\";\n TokenType[TokenType[\"EXPANSION_FORM_END\"] = 19] = \"EXPANSION_FORM_END\";\n TokenType[TokenType[\"EOF\"] = 20] = \"EOF\";\n})(TokenType || (TokenType = {}));\nclass Token {\n constructor(type, parts, sourceSpan) {\n this.type = type;\n this.parts = parts;\n this.sourceSpan = sourceSpan;\n }\n}\nclass TokenError extends ParseError {\n constructor(errorMsg, tokenType, span) {\n super(span, errorMsg);\n this.tokenType = tokenType;\n }\n}\nclass TokenizeResult {\n constructor(tokens, errors, nonNormalizedIcuExpressions) {\n this.tokens = tokens;\n this.errors = errors;\n this.nonNormalizedIcuExpressions = nonNormalizedIcuExpressions;\n }\n}\nfunction tokenize(source, url, getTagDefinition, options = {}) {\n const tokenizer = new _Tokenizer(new ParseSourceFile(source, url), getTagDefinition, options);\n tokenizer.tokenize();\n return new TokenizeResult(mergeTextTokens(tokenizer.tokens), tokenizer.errors, tokenizer.nonNormalizedIcuExpressions);\n}\nconst _CR_OR_CRLF_REGEXP = /\\r\\n?/g;\nfunction _unexpectedCharacterErrorMsg(charCode) {\n const char = charCode === $EOF ? 'EOF' : String.fromCharCode(charCode);\n return `Unexpected character \"${char}\"`;\n}\nfunction _unknownEntityErrorMsg(entitySrc) {\n return `Unknown entity \"${entitySrc}\" - use the \"&#;\" or \"&#x;\" syntax`;\n}\nfunction _unparsableEntityErrorMsg(type, entityStr) {\n return `Unable to parse entity \"${entityStr}\" - ${type} character reference entities must end with \";\"`;\n}\nvar CharacterReferenceType;\n(function (CharacterReferenceType) {\n CharacterReferenceType[\"HEX\"] = \"hexadecimal\";\n CharacterReferenceType[\"DEC\"] = \"decimal\";\n})(CharacterReferenceType || (CharacterReferenceType = {}));\nclass _ControlFlowError {\n constructor(error) {\n this.error = error;\n }\n}\n// See http://www.w3.org/TR/html51/syntax.html#writing\nclass _Tokenizer {\n /**\n * @param _file The html source file being tokenized.\n * @param _getTagDefinition A function that will retrieve a tag definition for a given tag name.\n * @param options Configuration of the tokenization.\n */\n constructor(_file, _getTagDefinition, options) {\n this._getTagDefinition = _getTagDefinition;\n this._currentTokenStart = null;\n this._currentTokenType = null;\n this._expansionCaseStack = [];\n this._inInterpolation = false;\n this.tokens = [];\n this.errors = [];\n this.nonNormalizedIcuExpressions = [];\n this._tokenizeIcu = options.tokenizeExpansionForms || false;\n this._interpolationConfig = options.interpolationConfig || DEFAULT_INTERPOLATION_CONFIG;\n this._leadingTriviaCodePoints =\n options.leadingTriviaChars && options.leadingTriviaChars.map(c => c.codePointAt(0) || 0);\n const range = options.range || { endPos: _file.content.length, startPos: 0, startLine: 0, startCol: 0 };\n this._cursor = options.escapedString ? new EscapedCharacterCursor(_file, range) :\n new PlainCharacterCursor(_file, range);\n this._preserveLineEndings = options.preserveLineEndings || false;\n this._escapedString = options.escapedString || false;\n this._i18nNormalizeLineEndingsInICUs = options.i18nNormalizeLineEndingsInICUs || false;\n try {\n this._cursor.init();\n }\n catch (e) {\n this.handleError(e);\n }\n }\n _processCarriageReturns(content) {\n if (this._preserveLineEndings) {\n return content;\n }\n // http://www.w3.org/TR/html5/syntax.html#preprocessing-the-input-stream\n // In order to keep the original position in the source, we can not\n // pre-process it.\n // Instead CRs are processed right before instantiating the tokens.\n return content.replace(_CR_OR_CRLF_REGEXP, '\\n');\n }\n tokenize() {\n while (this._cursor.peek() !== $EOF) {\n const start = this._cursor.clone();\n try {\n if (this._attemptCharCode($LT)) {\n if (this._attemptCharCode($BANG)) {\n if (this._attemptCharCode($LBRACKET)) {\n this._consumeCdata(start);\n }\n else if (this._attemptCharCode($MINUS)) {\n this._consumeComment(start);\n }\n else {\n this._consumeDocType(start);\n }\n }\n else if (this._attemptCharCode($SLASH)) {\n this._consumeTagClose(start);\n }\n else {\n this._consumeTagOpen(start);\n }\n }\n else if (!(this._tokenizeIcu && this._tokenizeExpansionForm())) {\n this._consumeText();\n }\n }\n catch (e) {\n this.handleError(e);\n }\n }\n this._beginToken(TokenType.EOF);\n this._endToken([]);\n }\n /**\n * @returns whether an ICU token has been created\n * @internal\n */\n _tokenizeExpansionForm() {\n if (this.isExpansionFormStart()) {\n this._consumeExpansionFormStart();\n return true;\n }\n if (isExpansionCaseStart(this._cursor.peek()) && this._isInExpansionForm()) {\n this._consumeExpansionCaseStart();\n return true;\n }\n if (this._cursor.peek() === $RBRACE) {\n if (this._isInExpansionCase()) {\n this._consumeExpansionCaseEnd();\n return true;\n }\n if (this._isInExpansionForm()) {\n this._consumeExpansionFormEnd();\n return true;\n }\n }\n return false;\n }\n _beginToken(type, start = this._cursor.clone()) {\n this._currentTokenStart = start;\n this._currentTokenType = type;\n }\n _endToken(parts, end) {\n if (this._currentTokenStart === null) {\n throw new TokenError('Programming error - attempted to end a token when there was no start to the token', this._currentTokenType, this._cursor.getSpan(end));\n }\n if (this._currentTokenType === null) {\n throw new TokenError('Programming error - attempted to end a token which has no token type', null, this._cursor.getSpan(this._currentTokenStart));\n }\n const token = new Token(this._currentTokenType, parts, this._cursor.getSpan(this._currentTokenStart, this._leadingTriviaCodePoints));\n this.tokens.push(token);\n this._currentTokenStart = null;\n this._currentTokenType = null;\n return token;\n }\n _createError(msg, span) {\n if (this._isInExpansionForm()) {\n msg += ` (Do you have an unescaped \"{\" in your template? Use \"{{ '{' }}\") to escape it.)`;\n }\n const error = new TokenError(msg, this._currentTokenType, span);\n this._currentTokenStart = null;\n this._currentTokenType = null;\n return new _ControlFlowError(error);\n }\n handleError(e) {\n if (e instanceof CursorError) {\n e = this._createError(e.msg, this._cursor.getSpan(e.cursor));\n }\n if (e instanceof _ControlFlowError) {\n this.errors.push(e.error);\n }\n else {\n throw e;\n }\n }\n _attemptCharCode(charCode) {\n if (this._cursor.peek() === charCode) {\n this._cursor.advance();\n return true;\n }\n return false;\n }\n _attemptCharCodeCaseInsensitive(charCode) {\n if (compareCharCodeCaseInsensitive(this._cursor.peek(), charCode)) {\n this._cursor.advance();\n return true;\n }\n return false;\n }\n _requireCharCode(charCode) {\n const location = this._cursor.clone();\n if (!this._attemptCharCode(charCode)) {\n throw this._createError(_unexpectedCharacterErrorMsg(this._cursor.peek()), this._cursor.getSpan(location));\n }\n }\n _attemptStr(chars) {\n const len = chars.length;\n if (this._cursor.charsLeft() < len) {\n return false;\n }\n const initialPosition = this._cursor.clone();\n for (let i = 0; i < len; i++) {\n if (!this._attemptCharCode(chars.charCodeAt(i))) {\n // If attempting to parse the string fails, we want to reset the parser\n // to where it was before the attempt\n this._cursor = initialPosition;\n return false;\n }\n }\n return true;\n }\n _attemptStrCaseInsensitive(chars) {\n for (let i = 0; i < chars.length; i++) {\n if (!this._attemptCharCodeCaseInsensitive(chars.charCodeAt(i))) {\n return false;\n }\n }\n return true;\n }\n _requireStr(chars) {\n const location = this._cursor.clone();\n if (!this._attemptStr(chars)) {\n throw this._createError(_unexpectedCharacterErrorMsg(this._cursor.peek()), this._cursor.getSpan(location));\n }\n }\n _attemptCharCodeUntilFn(predicate) {\n while (!predicate(this._cursor.peek())) {\n this._cursor.advance();\n }\n }\n _requireCharCodeUntilFn(predicate, len) {\n const start = this._cursor.clone();\n this._attemptCharCodeUntilFn(predicate);\n if (this._cursor.diff(start) < len) {\n throw this._createError(_unexpectedCharacterErrorMsg(this._cursor.peek()), this._cursor.getSpan(start));\n }\n }\n _attemptUntilChar(char) {\n while (this._cursor.peek() !== char) {\n this._cursor.advance();\n }\n }\n _readChar(decodeEntities) {\n if (decodeEntities && this._cursor.peek() === $AMPERSAND) {\n return this._decodeEntity();\n }\n else {\n // Don't rely upon reading directly from `_input` as the actual char value\n // may have been generated from an escape sequence.\n const char = String.fromCodePoint(this._cursor.peek());\n this._cursor.advance();\n return char;\n }\n }\n _decodeEntity() {\n const start = this._cursor.clone();\n this._cursor.advance();\n if (this._attemptCharCode($HASH)) {\n const isHex = this._attemptCharCode($x) || this._attemptCharCode($X);\n const codeStart = this._cursor.clone();\n this._attemptCharCodeUntilFn(isDigitEntityEnd);\n if (this._cursor.peek() != $SEMICOLON) {\n // Advance cursor to include the peeked character in the string provided to the error\n // message.\n this._cursor.advance();\n const entityType = isHex ? CharacterReferenceType.HEX : CharacterReferenceType.DEC;\n throw this._createError(_unparsableEntityErrorMsg(entityType, this._cursor.getChars(start)), this._cursor.getSpan());\n }\n const strNum = this._cursor.getChars(codeStart);\n this._cursor.advance();\n try {\n const charCode = parseInt(strNum, isHex ? 16 : 10);\n return String.fromCharCode(charCode);\n }\n catch (_a) {\n throw this._createError(_unknownEntityErrorMsg(this._cursor.getChars(start)), this._cursor.getSpan());\n }\n }\n else {\n const nameStart = this._cursor.clone();\n this._attemptCharCodeUntilFn(isNamedEntityEnd);\n if (this._cursor.peek() != $SEMICOLON) {\n this._cursor = nameStart;\n return '&';\n }\n const name = this._cursor.getChars(nameStart);\n this._cursor.advance();\n const char = NAMED_ENTITIES[name];\n if (!char) {\n throw this._createError(_unknownEntityErrorMsg(name), this._cursor.getSpan(start));\n }\n return char;\n }\n }\n _consumeRawText(decodeEntities, endMarkerPredicate) {\n this._beginToken(decodeEntities ? TokenType.ESCAPABLE_RAW_TEXT : TokenType.RAW_TEXT);\n const parts = [];\n while (true) {\n const tagCloseStart = this._cursor.clone();\n const foundEndMarker = endMarkerPredicate();\n this._cursor = tagCloseStart;\n if (foundEndMarker) {\n break;\n }\n parts.push(this._readChar(decodeEntities));\n }\n return this._endToken([this._processCarriageReturns(parts.join(''))]);\n }\n _consumeComment(start) {\n this._beginToken(TokenType.COMMENT_START, start);\n this._requireCharCode($MINUS);\n this._endToken([]);\n this._consumeRawText(false, () => this._attemptStr('-->'));\n this._beginToken(TokenType.COMMENT_END);\n this._requireStr('-->');\n this._endToken([]);\n }\n _consumeCdata(start) {\n this._beginToken(TokenType.CDATA_START, start);\n this._requireStr('CDATA[');\n this._endToken([]);\n this._consumeRawText(false, () => this._attemptStr(']]>'));\n this._beginToken(TokenType.CDATA_END);\n this._requireStr(']]>');\n this._endToken([]);\n }\n _consumeDocType(start) {\n this._beginToken(TokenType.DOC_TYPE, start);\n const contentStart = this._cursor.clone();\n this._attemptUntilChar($GT);\n const content = this._cursor.getChars(contentStart);\n this._cursor.advance();\n this._endToken([content]);\n }\n _consumePrefixAndName() {\n const nameOrPrefixStart = this._cursor.clone();\n let prefix = '';\n while (this._cursor.peek() !== $COLON && !isPrefixEnd(this._cursor.peek())) {\n this._cursor.advance();\n }\n let nameStart;\n if (this._cursor.peek() === $COLON) {\n prefix = this._cursor.getChars(nameOrPrefixStart);\n this._cursor.advance();\n nameStart = this._cursor.clone();\n }\n else {\n nameStart = nameOrPrefixStart;\n }\n this._requireCharCodeUntilFn(isNameEnd, prefix === '' ? 0 : 1);\n const name = this._cursor.getChars(nameStart);\n return [prefix, name];\n }\n _consumeTagOpen(start) {\n let tagName;\n let prefix;\n let openTagToken;\n let tokensBeforeTagOpen = this.tokens.length;\n const innerStart = this._cursor.clone();\n try {\n if (!isAsciiLetter(this._cursor.peek())) {\n throw this._createError(_unexpectedCharacterErrorMsg(this._cursor.peek()), this._cursor.getSpan(start));\n }\n openTagToken = this._consumeTagOpenStart(start);\n prefix = openTagToken.parts[0];\n tagName = openTagToken.parts[1];\n this._attemptCharCodeUntilFn(isNotWhitespace);\n while (this._cursor.peek() !== $SLASH && this._cursor.peek() !== $GT) {\n this._consumeAttributeName();\n this._attemptCharCodeUntilFn(isNotWhitespace);\n if (this._attemptCharCode($EQ)) {\n this._attemptCharCodeUntilFn(isNotWhitespace);\n this._consumeAttributeValue();\n }\n this._attemptCharCodeUntilFn(isNotWhitespace);\n }\n this._consumeTagOpenEnd();\n }\n catch (e) {\n if (e instanceof _ControlFlowError) {\n // When the start tag is invalid (including invalid \"attributes\"), assume we want a \"<\"\n this._cursor = innerStart;\n if (openTagToken) {\n this.tokens.length = tokensBeforeTagOpen;\n }\n // Back to back text tokens are merged at the end\n this._beginToken(TokenType.TEXT, start);\n this._endToken(['<']);\n return;\n }\n throw e;\n }\n const contentTokenType = this._getTagDefinition(tagName).contentType;\n if (contentTokenType === TagContentType.RAW_TEXT) {\n this._consumeRawTextWithTagClose(prefix, tagName, false);\n }\n else if (contentTokenType === TagContentType.ESCAPABLE_RAW_TEXT) {\n this._consumeRawTextWithTagClose(prefix, tagName, true);\n }\n }\n _consumeRawTextWithTagClose(prefix, tagName, decodeEntities) {\n const textToken = this._consumeRawText(decodeEntities, () => {\n if (!this._attemptCharCode($LT))\n return false;\n if (!this._attemptCharCode($SLASH))\n return false;\n this._attemptCharCodeUntilFn(isNotWhitespace);\n if (!this._attemptStrCaseInsensitive(tagName))\n return false;\n this._attemptCharCodeUntilFn(isNotWhitespace);\n return this._attemptCharCode($GT);\n });\n this._beginToken(TokenType.TAG_CLOSE);\n this._requireCharCodeUntilFn(code => code === $GT, 3);\n this._cursor.advance(); // Consume the `>`\n this._endToken([prefix, tagName]);\n }\n _consumeTagOpenStart(start) {\n this._beginToken(TokenType.TAG_OPEN_START, start);\n const parts = this._consumePrefixAndName();\n return this._endToken(parts);\n }\n _consumeAttributeName() {\n const attrNameStart = this._cursor.peek();\n if (attrNameStart === $SQ || attrNameStart === $DQ) {\n throw this._createError(_unexpectedCharacterErrorMsg(attrNameStart), this._cursor.getSpan());\n }\n this._beginToken(TokenType.ATTR_NAME);\n const prefixAndName = this._consumePrefixAndName();\n this._endToken(prefixAndName);\n }\n _consumeAttributeValue() {\n let value;\n if (this._cursor.peek() === $SQ || this._cursor.peek() === $DQ) {\n this._beginToken(TokenType.ATTR_QUOTE);\n const quoteChar = this._cursor.peek();\n this._cursor.advance();\n this._endToken([String.fromCodePoint(quoteChar)]);\n this._beginToken(TokenType.ATTR_VALUE);\n const parts = [];\n while (this._cursor.peek() !== quoteChar) {\n parts.push(this._readChar(true));\n }\n value = parts.join('');\n this._endToken([this._processCarriageReturns(value)]);\n this._beginToken(TokenType.ATTR_QUOTE);\n this._cursor.advance();\n this._endToken([String.fromCodePoint(quoteChar)]);\n }\n else {\n this._beginToken(TokenType.ATTR_VALUE);\n const valueStart = this._cursor.clone();\n this._requireCharCodeUntilFn(isNameEnd, 1);\n value = this._cursor.getChars(valueStart);\n this._endToken([this._processCarriageReturns(value)]);\n }\n }\n _consumeTagOpenEnd() {\n const tokenType = this._attemptCharCode($SLASH) ? TokenType.TAG_OPEN_END_VOID : TokenType.TAG_OPEN_END;\n this._beginToken(tokenType);\n this._requireCharCode($GT);\n this._endToken([]);\n }\n _consumeTagClose(start) {\n this._beginToken(TokenType.TAG_CLOSE, start);\n this._attemptCharCodeUntilFn(isNotWhitespace);\n const prefixAndName = this._consumePrefixAndName();\n this._attemptCharCodeUntilFn(isNotWhitespace);\n this._requireCharCode($GT);\n this._endToken(prefixAndName);\n }\n _consumeExpansionFormStart() {\n this._beginToken(TokenType.EXPANSION_FORM_START);\n this._requireCharCode($LBRACE);\n this._endToken([]);\n this._expansionCaseStack.push(TokenType.EXPANSION_FORM_START);\n this._beginToken(TokenType.RAW_TEXT);\n const condition = this._readUntil($COMMA);\n const normalizedCondition = this._processCarriageReturns(condition);\n if (this._escapedString || this._i18nNormalizeLineEndingsInICUs) {\n // Either the template is inline or,\n // we explicitly want to normalize line endings for this text.\n this._endToken([normalizedCondition]);\n }\n else {\n // The expression is in an external template and, for backward compatibility,\n // we are not normalizing line endings.\n const conditionToken = this._endToken([condition]);\n if (normalizedCondition !== condition) {\n this.nonNormalizedIcuExpressions.push(conditionToken);\n }\n }\n this._requireCharCode($COMMA);\n this._attemptCharCodeUntilFn(isNotWhitespace);\n this._beginToken(TokenType.RAW_TEXT);\n const type = this._readUntil($COMMA);\n this._endToken([type]);\n this._requireCharCode($COMMA);\n this._attemptCharCodeUntilFn(isNotWhitespace);\n }\n _consumeExpansionCaseStart() {\n this._beginToken(TokenType.EXPANSION_CASE_VALUE);\n const value = this._readUntil($LBRACE).trim();\n this._endToken([value]);\n this._attemptCharCodeUntilFn(isNotWhitespace);\n this._beginToken(TokenType.EXPANSION_CASE_EXP_START);\n this._requireCharCode($LBRACE);\n this._endToken([]);\n this._attemptCharCodeUntilFn(isNotWhitespace);\n this._expansionCaseStack.push(TokenType.EXPANSION_CASE_EXP_START);\n }\n _consumeExpansionCaseEnd() {\n this._beginToken(TokenType.EXPANSION_CASE_EXP_END);\n this._requireCharCode($RBRACE);\n this._endToken([]);\n this._attemptCharCodeUntilFn(isNotWhitespace);\n this._expansionCaseStack.pop();\n }\n _consumeExpansionFormEnd() {\n this._beginToken(TokenType.EXPANSION_FORM_END);\n this._requireCharCode($RBRACE);\n this._endToken([]);\n this._expansionCaseStack.pop();\n }\n _consumeText() {\n const start = this._cursor.clone();\n this._beginToken(TokenType.TEXT, start);\n const parts = [];\n do {\n if (this._interpolationConfig && this._attemptStr(this._interpolationConfig.start)) {\n parts.push(this._interpolationConfig.start);\n this._inInterpolation = true;\n }\n else if (this._interpolationConfig && this._inInterpolation &&\n this._attemptStr(this._interpolationConfig.end)) {\n parts.push(this._interpolationConfig.end);\n this._inInterpolation = false;\n }\n else {\n parts.push(this._readChar(true));\n }\n } while (!this._isTextEnd());\n this._endToken([this._processCarriageReturns(parts.join(''))]);\n }\n _isTextEnd() {\n if (this._cursor.peek() === $LT || this._cursor.peek() === $EOF) {\n return true;\n }\n if (this._tokenizeIcu && !this._inInterpolation) {\n if (this.isExpansionFormStart()) {\n // start of an expansion form\n return true;\n }\n if (this._cursor.peek() === $RBRACE && this._isInExpansionCase()) {\n // end of and expansion case\n return true;\n }\n }\n return false;\n }\n _readUntil(char) {\n const start = this._cursor.clone();\n this._attemptUntilChar(char);\n return this._cursor.getChars(start);\n }\n _isInExpansionCase() {\n return this._expansionCaseStack.length > 0 &&\n this._expansionCaseStack[this._expansionCaseStack.length - 1] ===\n TokenType.EXPANSION_CASE_EXP_START;\n }\n _isInExpansionForm() {\n return this._expansionCaseStack.length > 0 &&\n this._expansionCaseStack[this._expansionCaseStack.length - 1] ===\n TokenType.EXPANSION_FORM_START;\n }\n isExpansionFormStart() {\n if (this._cursor.peek() !== $LBRACE) {\n return false;\n }\n if (this._interpolationConfig) {\n const start = this._cursor.clone();\n const isInterpolation = this._attemptStr(this._interpolationConfig.start);\n this._cursor = start;\n return !isInterpolation;\n }\n return true;\n }\n}\nfunction isNotWhitespace(code) {\n return !isWhitespace(code) || code === $EOF;\n}\nfunction isNameEnd(code) {\n return isWhitespace(code) || code === $GT || code === $SLASH ||\n code === $SQ || code === $DQ || code === $EQ;\n}\nfunction isPrefixEnd(code) {\n return (code < $a || $z < code) && (code < $A || $Z < code) &&\n (code < $0 || code > $9);\n}\nfunction isDigitEntityEnd(code) {\n return code == $SEMICOLON || code == $EOF || !isAsciiHexDigit(code);\n}\nfunction isNamedEntityEnd(code) {\n return code == $SEMICOLON || code == $EOF || !isAsciiLetter(code);\n}\nfunction isExpansionCaseStart(peek) {\n return peek !== $RBRACE;\n}\nfunction compareCharCodeCaseInsensitive(code1, code2) {\n return toUpperCaseCharCode(code1) == toUpperCaseCharCode(code2);\n}\nfunction toUpperCaseCharCode(code) {\n return code >= $a && code <= $z ? code - $a + $A : code;\n}\nfunction mergeTextTokens(srcTokens) {\n const dstTokens = [];\n let lastDstToken = undefined;\n for (let i = 0; i < srcTokens.length; i++) {\n const token = srcTokens[i];\n if (lastDstToken && lastDstToken.type == TokenType.TEXT && token.type == TokenType.TEXT) {\n lastDstToken.parts[0] += token.parts[0];\n lastDstToken.sourceSpan.end = token.sourceSpan.end;\n }\n else {\n lastDstToken = token;\n dstTokens.push(lastDstToken);\n }\n }\n return dstTokens;\n}\nclass PlainCharacterCursor {\n constructor(fileOrCursor, range) {\n if (fileOrCursor instanceof PlainCharacterCursor) {\n this.file = fileOrCursor.file;\n this.input = fileOrCursor.input;\n this.end = fileOrCursor.end;\n const state = fileOrCursor.state;\n // Note: avoid using `{...fileOrCursor.state}` here as that has a severe performance penalty.\n // In ES5 bundles the object spread operator is translated into the `__assign` helper, which\n // is not optimized by VMs as efficiently as a raw object literal. Since this constructor is\n // called in tight loops, this difference matters.\n this.state = {\n peek: state.peek,\n offset: state.offset,\n line: state.line,\n column: state.column,\n };\n }\n else {\n if (!range) {\n throw new Error('Programming error: the range argument must be provided with a file argument.');\n }\n this.file = fileOrCursor;\n this.input = fileOrCursor.content;\n this.end = range.endPos;\n this.state = {\n peek: -1,\n offset: range.startPos,\n line: range.startLine,\n column: range.startCol,\n };\n }\n }\n clone() {\n return new PlainCharacterCursor(this);\n }\n peek() {\n return this.state.peek;\n }\n charsLeft() {\n return this.end - this.state.offset;\n }\n diff(other) {\n return this.state.offset - other.state.offset;\n }\n advance() {\n this.advanceState(this.state);\n }\n init() {\n this.updatePeek(this.state);\n }\n getSpan(start, leadingTriviaCodePoints) {\n start = start || this;\n let cloned = false;\n if (leadingTriviaCodePoints) {\n while (this.diff(start) > 0 && leadingTriviaCodePoints.indexOf(start.peek()) !== -1) {\n if (!cloned) {\n start = start.clone();\n cloned = true;\n }\n start.advance();\n }\n }\n return new ParseSourceSpan(new ParseLocation(start.file, start.state.offset, start.state.line, start.state.column), new ParseLocation(this.file, this.state.offset, this.state.line, this.state.column));\n }\n getChars(start) {\n return this.input.substring(start.state.offset, this.state.offset);\n }\n charAt(pos) {\n return this.input.charCodeAt(pos);\n }\n advanceState(state) {\n if (state.offset >= this.end) {\n this.state = state;\n throw new CursorError('Unexpected character \"EOF\"', this);\n }\n const currentChar = this.charAt(state.offset);\n if (currentChar === $LF) {\n state.line++;\n state.column = 0;\n }\n else if (!isNewLine(currentChar)) {\n state.column++;\n }\n state.offset++;\n this.updatePeek(state);\n }\n updatePeek(state) {\n state.peek = state.offset >= this.end ? $EOF : this.charAt(state.offset);\n }\n}\nclass EscapedCharacterCursor extends PlainCharacterCursor {\n constructor(fileOrCursor, range) {\n if (fileOrCursor instanceof EscapedCharacterCursor) {\n super(fileOrCursor);\n this.internalState = Object.assign({}, fileOrCursor.internalState);\n }\n else {\n super(fileOrCursor, range);\n this.internalState = this.state;\n }\n }\n advance() {\n this.state = this.internalState;\n super.advance();\n this.processEscapeSequence();\n }\n init() {\n super.init();\n this.processEscapeSequence();\n }\n clone() {\n return new EscapedCharacterCursor(this);\n }\n getChars(start) {\n const cursor = start.clone();\n let chars = '';\n while (cursor.internalState.offset < this.internalState.offset) {\n chars += String.fromCodePoint(cursor.peek());\n cursor.advance();\n }\n return chars;\n }\n /**\n * Process the escape sequence that starts at the current position in the text.\n *\n * This method is called to ensure that `peek` has the unescaped value of escape sequences.\n */\n processEscapeSequence() {\n const peek = () => this.internalState.peek;\n if (peek() === $BACKSLASH) {\n // We have hit an escape sequence so we need the internal state to become independent\n // of the external state.\n this.internalState = Object.assign({}, this.state);\n // Move past the backslash\n this.advanceState(this.internalState);\n // First check for standard control char sequences\n if (peek() === $n) {\n this.state.peek = $LF;\n }\n else if (peek() === $r) {\n this.state.peek = $CR;\n }\n else if (peek() === $v) {\n this.state.peek = $VTAB;\n }\n else if (peek() === $t) {\n this.state.peek = $TAB;\n }\n else if (peek() === $b) {\n this.state.peek = $BSPACE;\n }\n else if (peek() === $f) {\n this.state.peek = $FF;\n }\n // Now consider more complex sequences\n else if (peek() === $u) {\n // Unicode code-point sequence\n this.advanceState(this.internalState); // advance past the `u` char\n if (peek() === $LBRACE) {\n // Variable length Unicode, e.g. `\\x{123}`\n this.advanceState(this.internalState); // advance past the `{` char\n // Advance past the variable number of hex digits until we hit a `}` char\n const digitStart = this.clone();\n let length = 0;\n while (peek() !== $RBRACE) {\n this.advanceState(this.internalState);\n length++;\n }\n this.state.peek = this.decodeHexDigits(digitStart, length);\n }\n else {\n // Fixed length Unicode, e.g. `\\u1234`\n const digitStart = this.clone();\n this.advanceState(this.internalState);\n this.advanceState(this.internalState);\n this.advanceState(this.internalState);\n this.state.peek = this.decodeHexDigits(digitStart, 4);\n }\n }\n else if (peek() === $x) {\n // Hex char code, e.g. `\\x2F`\n this.advanceState(this.internalState); // advance past the `x` char\n const digitStart = this.clone();\n this.advanceState(this.internalState);\n this.state.peek = this.decodeHexDigits(digitStart, 2);\n }\n else if (isOctalDigit(peek())) {\n // Octal char code, e.g. `\\012`,\n let octal = '';\n let length = 0;\n let previous = this.clone();\n while (isOctalDigit(peek()) && length < 3) {\n previous = this.clone();\n octal += String.fromCodePoint(peek());\n this.advanceState(this.internalState);\n length++;\n }\n this.state.peek = parseInt(octal, 8);\n // Backup one char\n this.internalState = previous.internalState;\n }\n else if (isNewLine(this.internalState.peek)) {\n // Line continuation `\\` followed by a new line\n this.advanceState(this.internalState); // advance over the newline\n this.state = this.internalState;\n }\n else {\n // If none of the `if` blocks were executed then we just have an escaped normal character.\n // In that case we just, effectively, skip the backslash from the character.\n this.state.peek = this.internalState.peek;\n }\n }\n }\n decodeHexDigits(start, length) {\n const hex = this.input.substr(start.internalState.offset, length);\n const charCode = parseInt(hex, 16);\n if (!isNaN(charCode)) {\n return charCode;\n }\n else {\n start.state = start.internalState;\n throw new CursorError('Invalid hexadecimal escape sequence', start);\n }\n }\n}\nclass CursorError {\n constructor(msg, cursor) {\n this.msg = msg;\n this.cursor = cursor;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass TreeError extends ParseError {\n constructor(elementName, span, msg) {\n super(span, msg);\n this.elementName = elementName;\n }\n static create(elementName, span, msg) {\n return new TreeError(elementName, span, msg);\n }\n}\nclass ParseTreeResult {\n constructor(rootNodes, errors) {\n this.rootNodes = rootNodes;\n this.errors = errors;\n }\n}\nclass Parser {\n constructor(getTagDefinition) {\n this.getTagDefinition = getTagDefinition;\n }\n parse(source, url, options) {\n const tokenizeResult = tokenize(source, url, this.getTagDefinition, options);\n const parser = new _TreeBuilder(tokenizeResult.tokens, this.getTagDefinition);\n parser.build();\n return new ParseTreeResult(parser.rootNodes, tokenizeResult.errors.concat(parser.errors));\n }\n}\nclass _TreeBuilder {\n constructor(tokens, getTagDefinition) {\n this.tokens = tokens;\n this.getTagDefinition = getTagDefinition;\n this._index = -1;\n this._elementStack = [];\n this.rootNodes = [];\n this.errors = [];\n this._advance();\n }\n build() {\n while (this._peek.type !== TokenType.EOF) {\n if (this._peek.type === TokenType.TAG_OPEN_START) {\n this._consumeStartTag(this._advance());\n }\n else if (this._peek.type === TokenType.TAG_CLOSE) {\n this._consumeEndTag(this._advance());\n }\n else if (this._peek.type === TokenType.CDATA_START) {\n this._closeVoidElement();\n this._consumeCdata(this._advance());\n }\n else if (this._peek.type === TokenType.COMMENT_START) {\n this._closeVoidElement();\n this._consumeComment(this._advance());\n }\n else if (this._peek.type === TokenType.TEXT || this._peek.type === TokenType.RAW_TEXT ||\n this._peek.type === TokenType.ESCAPABLE_RAW_TEXT) {\n this._closeVoidElement();\n this._consumeText(this._advance());\n }\n else if (this._peek.type === TokenType.EXPANSION_FORM_START) {\n this._consumeExpansion(this._advance());\n }\n else {\n // Skip all other tokens...\n this._advance();\n }\n }\n }\n _advance() {\n const prev = this._peek;\n if (this._index < this.tokens.length - 1) {\n // Note: there is always an EOF token at the end\n this._index++;\n }\n this._peek = this.tokens[this._index];\n return prev;\n }\n _advanceIf(type) {\n if (this._peek.type === type) {\n return this._advance();\n }\n return null;\n }\n _consumeCdata(_startToken) {\n this._consumeText(this._advance());\n this._advanceIf(TokenType.CDATA_END);\n }\n _consumeComment(token) {\n const text = this._advanceIf(TokenType.RAW_TEXT);\n this._advanceIf(TokenType.COMMENT_END);\n const value = text != null ? text.parts[0].trim() : null;\n this._addToParent(new Comment(value, token.sourceSpan));\n }\n _consumeExpansion(token) {\n const switchValue = this._advance();\n const type = this._advance();\n const cases = [];\n // read =\n while (this._peek.type === TokenType.EXPANSION_CASE_VALUE) {\n const expCase = this._parseExpansionCase();\n if (!expCase)\n return; // error\n cases.push(expCase);\n }\n // read the final }\n if (this._peek.type !== TokenType.EXPANSION_FORM_END) {\n this.errors.push(TreeError.create(null, this._peek.sourceSpan, `Invalid ICU message. Missing '}'.`));\n return;\n }\n const sourceSpan = new ParseSourceSpan(token.sourceSpan.start, this._peek.sourceSpan.end);\n this._addToParent(new Expansion(switchValue.parts[0], type.parts[0], cases, sourceSpan, switchValue.sourceSpan));\n this._advance();\n }\n _parseExpansionCase() {\n const value = this._advance();\n // read {\n if (this._peek.type !== TokenType.EXPANSION_CASE_EXP_START) {\n this.errors.push(TreeError.create(null, this._peek.sourceSpan, `Invalid ICU message. Missing '{'.`));\n return null;\n }\n // read until }\n const start = this._advance();\n const exp = this._collectExpansionExpTokens(start);\n if (!exp)\n return null;\n const end = this._advance();\n exp.push(new Token(TokenType.EOF, [], end.sourceSpan));\n // parse everything in between { and }\n const expansionCaseParser = new _TreeBuilder(exp, this.getTagDefinition);\n expansionCaseParser.build();\n if (expansionCaseParser.errors.length > 0) {\n this.errors = this.errors.concat(expansionCaseParser.errors);\n return null;\n }\n const sourceSpan = new ParseSourceSpan(value.sourceSpan.start, end.sourceSpan.end);\n const expSourceSpan = new ParseSourceSpan(start.sourceSpan.start, end.sourceSpan.end);\n return new ExpansionCase(value.parts[0], expansionCaseParser.rootNodes, sourceSpan, value.sourceSpan, expSourceSpan);\n }\n _collectExpansionExpTokens(start) {\n const exp = [];\n const expansionFormStack = [TokenType.EXPANSION_CASE_EXP_START];\n while (true) {\n if (this._peek.type === TokenType.EXPANSION_FORM_START ||\n this._peek.type === TokenType.EXPANSION_CASE_EXP_START) {\n expansionFormStack.push(this._peek.type);\n }\n if (this._peek.type === TokenType.EXPANSION_CASE_EXP_END) {\n if (lastOnStack(expansionFormStack, TokenType.EXPANSION_CASE_EXP_START)) {\n expansionFormStack.pop();\n if (expansionFormStack.length == 0)\n return exp;\n }\n else {\n this.errors.push(TreeError.create(null, start.sourceSpan, `Invalid ICU message. Missing '}'.`));\n return null;\n }\n }\n if (this._peek.type === TokenType.EXPANSION_FORM_END) {\n if (lastOnStack(expansionFormStack, TokenType.EXPANSION_FORM_START)) {\n expansionFormStack.pop();\n }\n else {\n this.errors.push(TreeError.create(null, start.sourceSpan, `Invalid ICU message. Missing '}'.`));\n return null;\n }\n }\n if (this._peek.type === TokenType.EOF) {\n this.errors.push(TreeError.create(null, start.sourceSpan, `Invalid ICU message. Missing '}'.`));\n return null;\n }\n exp.push(this._advance());\n }\n }\n _consumeText(token) {\n let text = token.parts[0];\n if (text.length > 0 && text[0] == '\\n') {\n const parent = this._getParentElement();\n if (parent != null && parent.children.length == 0 &&\n this.getTagDefinition(parent.name).ignoreFirstLf) {\n text = text.substring(1);\n }\n }\n if (text.length > 0) {\n this._addToParent(new Text$3(text, token.sourceSpan));\n }\n }\n _closeVoidElement() {\n const el = this._getParentElement();\n if (el && this.getTagDefinition(el.name).isVoid) {\n this._elementStack.pop();\n }\n }\n _consumeStartTag(startTagToken) {\n const prefix = startTagToken.parts[0];\n const name = startTagToken.parts[1];\n const attrs = [];\n while (this._peek.type === TokenType.ATTR_NAME) {\n attrs.push(this._consumeAttr(this._advance()));\n }\n const fullName = this._getElementFullName(prefix, name, this._getParentElement());\n let selfClosing = false;\n // Note: There could have been a tokenizer error\n // so that we don't get a token for the end tag...\n if (this._peek.type === TokenType.TAG_OPEN_END_VOID) {\n this._advance();\n selfClosing = true;\n const tagDef = this.getTagDefinition(fullName);\n if (!(tagDef.canSelfClose || getNsPrefix(fullName) !== null || tagDef.isVoid)) {\n this.errors.push(TreeError.create(fullName, startTagToken.sourceSpan, `Only void and foreign elements can be self closed \"${startTagToken.parts[1]}\"`));\n }\n }\n else if (this._peek.type === TokenType.TAG_OPEN_END) {\n this._advance();\n selfClosing = false;\n }\n const end = this._peek.sourceSpan.start;\n const span = new ParseSourceSpan(startTagToken.sourceSpan.start, end);\n const el = new Element$1(fullName, attrs, [], span, span, undefined);\n this._pushElement(el);\n if (selfClosing) {\n // Elements that are self-closed have their `endSourceSpan` set to the full span, as the\n // element start tag also represents the end tag.\n this._popElement(fullName, span);\n }\n }\n _pushElement(el) {\n const parentEl = this._getParentElement();\n if (parentEl && this.getTagDefinition(parentEl.name).isClosedByChild(el.name)) {\n this._elementStack.pop();\n }\n this._addToParent(el);\n this._elementStack.push(el);\n }\n _consumeEndTag(endTagToken) {\n const fullName = this._getElementFullName(endTagToken.parts[0], endTagToken.parts[1], this._getParentElement());\n if (this.getTagDefinition(fullName).isVoid) {\n this.errors.push(TreeError.create(fullName, endTagToken.sourceSpan, `Void elements do not have end tags \"${endTagToken.parts[1]}\"`));\n }\n else if (!this._popElement(fullName, endTagToken.sourceSpan)) {\n const errMsg = `Unexpected closing tag \"${fullName}\". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags`;\n this.errors.push(TreeError.create(fullName, endTagToken.sourceSpan, errMsg));\n }\n }\n _popElement(fullName, endSourceSpan) {\n for (let stackIndex = this._elementStack.length - 1; stackIndex >= 0; stackIndex--) {\n const el = this._elementStack[stackIndex];\n if (el.name == fullName) {\n // Record the parse span with the element that is being closed. Any elements that are\n // removed from the element stack at this point are closed implicitly, so they won't get\n // an end source span (as there is no explicit closing element).\n el.endSourceSpan = endSourceSpan;\n this._elementStack.splice(stackIndex, this._elementStack.length - stackIndex);\n return true;\n }\n if (!this.getTagDefinition(el.name).closedByParent) {\n return false;\n }\n }\n return false;\n }\n _consumeAttr(attrName) {\n const fullName = mergeNsAndName(attrName.parts[0], attrName.parts[1]);\n let end = attrName.sourceSpan.end;\n let value = '';\n let valueSpan = undefined;\n if (this._peek.type === TokenType.ATTR_QUOTE) {\n this._advance();\n }\n if (this._peek.type === TokenType.ATTR_VALUE) {\n const valueToken = this._advance();\n value = valueToken.parts[0];\n end = valueToken.sourceSpan.end;\n valueSpan = valueToken.sourceSpan;\n }\n if (this._peek.type === TokenType.ATTR_QUOTE) {\n const quoteToken = this._advance();\n end = quoteToken.sourceSpan.end;\n }\n return new Attribute(fullName, value, new ParseSourceSpan(attrName.sourceSpan.start, end), valueSpan);\n }\n _getParentElement() {\n return this._elementStack.length > 0 ? this._elementStack[this._elementStack.length - 1] : null;\n }\n _addToParent(node) {\n const parent = this._getParentElement();\n if (parent != null) {\n parent.children.push(node);\n }\n else {\n this.rootNodes.push(node);\n }\n }\n _getElementFullName(prefix, localName, parentElement) {\n if (prefix === '') {\n prefix = this.getTagDefinition(localName).implicitNamespacePrefix || '';\n if (prefix === '' && parentElement != null) {\n const parentTagName = splitNsName(parentElement.name)[1];\n const parentTagDefinition = this.getTagDefinition(parentTagName);\n if (!parentTagDefinition.preventNamespaceInheritance) {\n prefix = getNsPrefix(parentElement.name);\n }\n }\n }\n return mergeNsAndName(prefix, localName);\n }\n}\nfunction lastOnStack(stack, element) {\n return stack.length > 0 && stack[stack.length - 1] === element;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass HtmlParser extends Parser {\n constructor() {\n super(getHtmlTagDefinition);\n }\n parse(source, url, options) {\n return super.parse(source, url, options);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst PRESERVE_WS_ATTR_NAME = 'ngPreserveWhitespaces';\nconst SKIP_WS_TRIM_TAGS = new Set(['pre', 'template', 'textarea', 'script', 'style']);\n// Equivalent to \\s with \\u00a0 (non-breaking space) excluded.\n// Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\nconst WS_CHARS = ' \\f\\n\\r\\t\\v\\u1680\\u180e\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff';\nconst NO_WS_REGEXP = new RegExp(`[^${WS_CHARS}]`);\nconst WS_REPLACE_REGEXP = new RegExp(`[${WS_CHARS}]{2,}`, 'g');\nfunction hasPreserveWhitespacesAttr(attrs) {\n return attrs.some((attr) => attr.name === PRESERVE_WS_ATTR_NAME);\n}\n/**\n * Angular Dart introduced &ngsp; as a placeholder for non-removable space, see:\n * https://github.com/dart-lang/angular/blob/0bb611387d29d65b5af7f9d2515ab571fd3fbee4/_tests/test/compiler/preserve_whitespace_test.dart#L25-L32\n * In Angular Dart &ngsp; is converted to the 0xE500 PUA (Private Use Areas) unicode character\n * and later on replaced by a space. We are re-implementing the same idea here.\n */\nfunction replaceNgsp(value) {\n // lexer is replacing the &ngsp; pseudo-entity with NGSP_UNICODE\n return value.replace(new RegExp(NGSP_UNICODE, 'g'), ' ');\n}\n/**\n * This visitor can walk HTML parse tree and remove / trim text nodes using the following rules:\n * - consider spaces, tabs and new lines as whitespace characters;\n * - drop text nodes consisting of whitespace characters only;\n * - for all other text nodes replace consecutive whitespace characters with one space;\n * - convert &ngsp; pseudo-entity to a single space;\n *\n * Removal and trimming of whitespaces have positive performance impact (less code to generate\n * while compiling templates, faster view creation). At the same time it can be \"destructive\"\n * in some cases (whitespaces can influence layout). Because of the potential of breaking layout\n * this visitor is not activated by default in Angular 5 and people need to explicitly opt-in for\n * whitespace removal. The default option for whitespace removal will be revisited in Angular 6\n * and might be changed to \"on\" by default.\n */\nclass WhitespaceVisitor {\n visitElement(element, context) {\n if (SKIP_WS_TRIM_TAGS.has(element.name) || hasPreserveWhitespacesAttr(element.attrs)) {\n // don't descent into elements where we need to preserve whitespaces\n // but still visit all attributes to eliminate one used as a market to preserve WS\n return new Element$1(element.name, visitAll$1(this, element.attrs), element.children, element.sourceSpan, element.startSourceSpan, element.endSourceSpan, element.i18n);\n }\n return new Element$1(element.name, element.attrs, visitAllWithSiblings(this, element.children), element.sourceSpan, element.startSourceSpan, element.endSourceSpan, element.i18n);\n }\n visitAttribute(attribute, context) {\n return attribute.name !== PRESERVE_WS_ATTR_NAME ? attribute : null;\n }\n visitText(text, context) {\n const isNotBlank = text.value.match(NO_WS_REGEXP);\n const hasExpansionSibling = context &&\n (context.prev instanceof Expansion || context.next instanceof Expansion);\n if (isNotBlank || hasExpansionSibling) {\n return new Text$3(replaceNgsp(text.value).replace(WS_REPLACE_REGEXP, ' '), text.sourceSpan, text.i18n);\n }\n return null;\n }\n visitComment(comment, context) {\n return comment;\n }\n visitExpansion(expansion, context) {\n return expansion;\n }\n visitExpansionCase(expansionCase, context) {\n return expansionCase;\n }\n}\nfunction removeWhitespaces(htmlAstWithErrors) {\n return new ParseTreeResult(visitAll$1(new WhitespaceVisitor(), htmlAstWithErrors.rootNodes), htmlAstWithErrors.errors);\n}\nfunction visitAllWithSiblings(visitor, nodes) {\n const result = [];\n nodes.forEach((ast, i) => {\n const context = { prev: nodes[i - 1], next: nodes[i + 1] };\n const astResult = ast.visit(visitor, context);\n if (astResult) {\n result.push(astResult);\n }\n });\n return result;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// http://cldr.unicode.org/index/cldr-spec/plural-rules\nconst PLURAL_CASES = ['zero', 'one', 'two', 'few', 'many', 'other'];\n/**\n * Expands special forms into elements.\n *\n * For example,\n *\n * ```\n * { messages.length, plural,\n * =0 {zero}\n * =1 {one}\n * other {more than one}\n * }\n * ```\n *\n * will be expanded into\n *\n * ```\n * \n * zero\n * one\n * more than one\n * \n * ```\n */\nfunction expandNodes(nodes) {\n const expander = new _Expander();\n return new ExpansionResult(visitAll$1(expander, nodes), expander.isExpanded, expander.errors);\n}\nclass ExpansionResult {\n constructor(nodes, expanded, errors) {\n this.nodes = nodes;\n this.expanded = expanded;\n this.errors = errors;\n }\n}\nclass ExpansionError extends ParseError {\n constructor(span, errorMsg) {\n super(span, errorMsg);\n }\n}\n/**\n * Expand expansion forms (plural, select) to directives\n *\n * @internal\n */\nclass _Expander {\n constructor() {\n this.isExpanded = false;\n this.errors = [];\n }\n visitElement(element, context) {\n return new Element$1(element.name, element.attrs, visitAll$1(this, element.children), element.sourceSpan, element.startSourceSpan, element.endSourceSpan);\n }\n visitAttribute(attribute, context) {\n return attribute;\n }\n visitText(text, context) {\n return text;\n }\n visitComment(comment, context) {\n return comment;\n }\n visitExpansion(icu, context) {\n this.isExpanded = true;\n return icu.type == 'plural' ? _expandPluralForm(icu, this.errors) :\n _expandDefaultForm(icu, this.errors);\n }\n visitExpansionCase(icuCase, context) {\n throw new Error('Should not be reached');\n }\n}\n// Plural forms are expanded to `NgPlural` and `NgPluralCase`s\nfunction _expandPluralForm(ast, errors) {\n const children = ast.cases.map(c => {\n if (PLURAL_CASES.indexOf(c.value) == -1 && !c.value.match(/^=\\d+$/)) {\n errors.push(new ExpansionError(c.valueSourceSpan, `Plural cases should be \"=\" or one of ${PLURAL_CASES.join(', ')}`));\n }\n const expansionResult = expandNodes(c.expression);\n errors.push(...expansionResult.errors);\n return new Element$1(`ng-template`, [new Attribute('ngPluralCase', `${c.value}`, c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);\n });\n const switchAttr = new Attribute('[ngPlural]', ast.switchValue, ast.switchValueSourceSpan);\n return new Element$1('ng-container', [switchAttr], children, ast.sourceSpan, ast.sourceSpan, ast.sourceSpan);\n}\n// ICU messages (excluding plural form) are expanded to `NgSwitch` and `NgSwitchCase`s\nfunction _expandDefaultForm(ast, errors) {\n const children = ast.cases.map(c => {\n const expansionResult = expandNodes(c.expression);\n errors.push(...expansionResult.errors);\n if (c.value === 'other') {\n // other is the default case when no values match\n return new Element$1(`ng-template`, [new Attribute('ngSwitchDefault', '', c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);\n }\n return new Element$1(`ng-template`, [new Attribute('ngSwitchCase', `${c.value}`, c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);\n });\n const switchAttr = new Attribute('[ngSwitch]', ast.switchValue, ast.switchValueSourceSpan);\n return new Element$1('ng-container', [switchAttr], children, ast.sourceSpan, ast.sourceSpan, ast.sourceSpan);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A segment of text within the template.\n */\nclass TextAst {\n constructor(value, ngContentIndex, sourceSpan) {\n this.value = value;\n this.ngContentIndex = ngContentIndex;\n this.sourceSpan = sourceSpan;\n }\n visit(visitor, context) {\n return visitor.visitText(this, context);\n }\n}\n/**\n * A bound expression within the text of a template.\n */\nclass BoundTextAst {\n constructor(value, ngContentIndex, sourceSpan) {\n this.value = value;\n this.ngContentIndex = ngContentIndex;\n this.sourceSpan = sourceSpan;\n }\n visit(visitor, context) {\n return visitor.visitBoundText(this, context);\n }\n}\n/**\n * A plain attribute on an element.\n */\nclass AttrAst {\n constructor(name, value, sourceSpan) {\n this.name = name;\n this.value = value;\n this.sourceSpan = sourceSpan;\n }\n visit(visitor, context) {\n return visitor.visitAttr(this, context);\n }\n}\nconst BoundPropertyMapping = {\n [4 /* Animation */]: 4 /* Animation */,\n [1 /* Attribute */]: 1 /* Attribute */,\n [2 /* Class */]: 2 /* Class */,\n [0 /* Property */]: 0 /* Property */,\n [3 /* Style */]: 3 /* Style */,\n};\n/**\n * A binding for an element property (e.g. `[property]=\"expression\"`) or an animation trigger (e.g.\n * `[@trigger]=\"stateExp\"`)\n */\nclass BoundElementPropertyAst {\n constructor(name, type, securityContext, value, unit, sourceSpan) {\n this.name = name;\n this.type = type;\n this.securityContext = securityContext;\n this.value = value;\n this.unit = unit;\n this.sourceSpan = sourceSpan;\n this.isAnimation = this.type === 4 /* Animation */;\n }\n static fromBoundProperty(prop) {\n const type = BoundPropertyMapping[prop.type];\n return new BoundElementPropertyAst(prop.name, type, prop.securityContext, prop.value, prop.unit, prop.sourceSpan);\n }\n visit(visitor, context) {\n return visitor.visitElementProperty(this, context);\n }\n}\n/**\n * A binding for an element event (e.g. `(event)=\"handler()\"`) or an animation trigger event (e.g.\n * `(@trigger.phase)=\"callback($event)\"`).\n */\nclass BoundEventAst {\n constructor(name, target, phase, handler, sourceSpan, handlerSpan) {\n this.name = name;\n this.target = target;\n this.phase = phase;\n this.handler = handler;\n this.sourceSpan = sourceSpan;\n this.handlerSpan = handlerSpan;\n this.fullName = BoundEventAst.calcFullName(this.name, this.target, this.phase);\n this.isAnimation = !!this.phase;\n }\n static calcFullName(name, target, phase) {\n if (target) {\n return `${target}:${name}`;\n }\n if (phase) {\n return `@${name}.${phase}`;\n }\n return name;\n }\n static fromParsedEvent(event) {\n const target = event.type === 0 /* Regular */ ? event.targetOrPhase : null;\n const phase = event.type === 1 /* Animation */ ? event.targetOrPhase : null;\n return new BoundEventAst(event.name, target, phase, event.handler, event.sourceSpan, event.handlerSpan);\n }\n visit(visitor, context) {\n return visitor.visitEvent(this, context);\n }\n}\n/**\n * A reference declaration on an element (e.g. `let someName=\"expression\"`).\n */\nclass ReferenceAst {\n constructor(name, value, originalValue, sourceSpan) {\n this.name = name;\n this.value = value;\n this.originalValue = originalValue;\n this.sourceSpan = sourceSpan;\n }\n visit(visitor, context) {\n return visitor.visitReference(this, context);\n }\n}\n/**\n * A variable declaration on a (e.g. `var-someName=\"someLocalName\"`).\n */\nclass VariableAst {\n constructor(name, value, sourceSpan, valueSpan) {\n this.name = name;\n this.value = value;\n this.sourceSpan = sourceSpan;\n this.valueSpan = valueSpan;\n }\n static fromParsedVariable(v) {\n return new VariableAst(v.name, v.value, v.sourceSpan, v.valueSpan);\n }\n visit(visitor, context) {\n return visitor.visitVariable(this, context);\n }\n}\n/**\n * An element declaration in a template.\n */\nclass ElementAst {\n constructor(name, attrs, inputs, outputs, references, directives, providers, hasViewContainer, queryMatches, children, ngContentIndex, sourceSpan, endSourceSpan) {\n this.name = name;\n this.attrs = attrs;\n this.inputs = inputs;\n this.outputs = outputs;\n this.references = references;\n this.directives = directives;\n this.providers = providers;\n this.hasViewContainer = hasViewContainer;\n this.queryMatches = queryMatches;\n this.children = children;\n this.ngContentIndex = ngContentIndex;\n this.sourceSpan = sourceSpan;\n this.endSourceSpan = endSourceSpan;\n }\n visit(visitor, context) {\n return visitor.visitElement(this, context);\n }\n}\n/**\n * A `` element included in an Angular template.\n */\nclass EmbeddedTemplateAst {\n constructor(attrs, outputs, references, variables, directives, providers, hasViewContainer, queryMatches, children, ngContentIndex, sourceSpan) {\n this.attrs = attrs;\n this.outputs = outputs;\n this.references = references;\n this.variables = variables;\n this.directives = directives;\n this.providers = providers;\n this.hasViewContainer = hasViewContainer;\n this.queryMatches = queryMatches;\n this.children = children;\n this.ngContentIndex = ngContentIndex;\n this.sourceSpan = sourceSpan;\n }\n visit(visitor, context) {\n return visitor.visitEmbeddedTemplate(this, context);\n }\n}\n/**\n * A directive property with a bound value (e.g. `*ngIf=\"condition\").\n */\nclass BoundDirectivePropertyAst {\n constructor(directiveName, templateName, value, sourceSpan) {\n this.directiveName = directiveName;\n this.templateName = templateName;\n this.value = value;\n this.sourceSpan = sourceSpan;\n }\n visit(visitor, context) {\n return visitor.visitDirectiveProperty(this, context);\n }\n}\n/**\n * A directive declared on an element.\n */\nclass DirectiveAst {\n constructor(directive, inputs, hostProperties, hostEvents, contentQueryStartId, sourceSpan) {\n this.directive = directive;\n this.inputs = inputs;\n this.hostProperties = hostProperties;\n this.hostEvents = hostEvents;\n this.contentQueryStartId = contentQueryStartId;\n this.sourceSpan = sourceSpan;\n }\n visit(visitor, context) {\n return visitor.visitDirective(this, context);\n }\n}\n/**\n * A provider declared on an element\n */\nclass ProviderAst {\n constructor(token, multiProvider, eager, providers, providerType, lifecycleHooks, sourceSpan, isModule) {\n this.token = token;\n this.multiProvider = multiProvider;\n this.eager = eager;\n this.providers = providers;\n this.providerType = providerType;\n this.lifecycleHooks = lifecycleHooks;\n this.sourceSpan = sourceSpan;\n this.isModule = isModule;\n }\n visit(visitor, context) {\n // No visit method in the visitor for now...\n return null;\n }\n}\nvar ProviderAstType;\n(function (ProviderAstType) {\n ProviderAstType[ProviderAstType[\"PublicService\"] = 0] = \"PublicService\";\n ProviderAstType[ProviderAstType[\"PrivateService\"] = 1] = \"PrivateService\";\n ProviderAstType[ProviderAstType[\"Component\"] = 2] = \"Component\";\n ProviderAstType[ProviderAstType[\"Directive\"] = 3] = \"Directive\";\n ProviderAstType[ProviderAstType[\"Builtin\"] = 4] = \"Builtin\";\n})(ProviderAstType || (ProviderAstType = {}));\n/**\n * Position where content is to be projected (instance of `` in a template).\n */\nclass NgContentAst {\n constructor(index, ngContentIndex, sourceSpan) {\n this.index = index;\n this.ngContentIndex = ngContentIndex;\n this.sourceSpan = sourceSpan;\n }\n visit(visitor, context) {\n return visitor.visitNgContent(this, context);\n }\n}\n/**\n * A visitor that accepts each node but doesn't do anything. It is intended to be used\n * as the base class for a visitor that is only interested in a subset of the node types.\n */\nclass NullTemplateVisitor {\n visitNgContent(ast, context) { }\n visitEmbeddedTemplate(ast, context) { }\n visitElement(ast, context) { }\n visitReference(ast, context) { }\n visitVariable(ast, context) { }\n visitEvent(ast, context) { }\n visitElementProperty(ast, context) { }\n visitAttr(ast, context) { }\n visitBoundText(ast, context) { }\n visitText(ast, context) { }\n visitDirective(ast, context) { }\n visitDirectiveProperty(ast, context) { }\n}\n/**\n * Base class that can be used to build a visitor that visits each node\n * in an template ast recursively.\n */\nclass RecursiveTemplateAstVisitor extends NullTemplateVisitor {\n constructor() {\n super();\n }\n // Nodes with children\n visitEmbeddedTemplate(ast, context) {\n return this.visitChildren(context, visit => {\n visit(ast.attrs);\n visit(ast.references);\n visit(ast.variables);\n visit(ast.directives);\n visit(ast.providers);\n visit(ast.children);\n });\n }\n visitElement(ast, context) {\n return this.visitChildren(context, visit => {\n visit(ast.attrs);\n visit(ast.inputs);\n visit(ast.outputs);\n visit(ast.references);\n visit(ast.directives);\n visit(ast.providers);\n visit(ast.children);\n });\n }\n visitDirective(ast, context) {\n return this.visitChildren(context, visit => {\n visit(ast.inputs);\n visit(ast.hostProperties);\n visit(ast.hostEvents);\n });\n }\n visitChildren(context, cb) {\n let results = [];\n let t = this;\n function visit(children) {\n if (children && children.length)\n results.push(templateVisitAll(t, children, context));\n }\n cb(visit);\n return Array.prototype.concat.apply([], results);\n }\n}\n/**\n * Visit every node in a list of {@link TemplateAst}s with the given {@link TemplateAstVisitor}.\n */\nfunction templateVisitAll(visitor, asts, context = null) {\n const result = [];\n const visit = visitor.visit ?\n (ast) => visitor.visit(ast, context) || ast.visit(visitor, context) :\n (ast) => ast.visit(visitor, context);\n asts.forEach(ast => {\n const astResult = visit(ast);\n if (astResult) {\n result.push(astResult);\n }\n });\n return result;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass ProviderError extends ParseError {\n constructor(message, span) {\n super(span, message);\n }\n}\nclass ProviderViewContext {\n constructor(reflector, component) {\n this.reflector = reflector;\n this.component = component;\n this.errors = [];\n this.viewQueries = _getViewQueries(component);\n this.viewProviders = new Map();\n component.viewProviders.forEach((provider) => {\n if (this.viewProviders.get(tokenReference(provider.token)) == null) {\n this.viewProviders.set(tokenReference(provider.token), true);\n }\n });\n }\n}\nclass ProviderElementContext {\n constructor(viewContext, _parent, _isViewRoot, _directiveAsts, attrs, refs, isTemplate, contentQueryStartId, _sourceSpan) {\n this.viewContext = viewContext;\n this._parent = _parent;\n this._isViewRoot = _isViewRoot;\n this._directiveAsts = _directiveAsts;\n this._sourceSpan = _sourceSpan;\n this._transformedProviders = new Map();\n this._seenProviders = new Map();\n this._queriedTokens = new Map();\n this.transformedHasViewContainer = false;\n this._attrs = {};\n attrs.forEach((attrAst) => this._attrs[attrAst.name] = attrAst.value);\n const directivesMeta = _directiveAsts.map(directiveAst => directiveAst.directive);\n this._allProviders =\n _resolveProvidersFromDirectives(directivesMeta, _sourceSpan, viewContext.errors);\n this._contentQueries = _getContentQueries(contentQueryStartId, directivesMeta);\n Array.from(this._allProviders.values()).forEach((provider) => {\n this._addQueryReadsTo(provider.token, provider.token, this._queriedTokens);\n });\n if (isTemplate) {\n const templateRefId = createTokenForExternalReference(this.viewContext.reflector, Identifiers.TemplateRef);\n this._addQueryReadsTo(templateRefId, templateRefId, this._queriedTokens);\n }\n refs.forEach((refAst) => {\n let defaultQueryValue = refAst.value ||\n createTokenForExternalReference(this.viewContext.reflector, Identifiers.ElementRef);\n this._addQueryReadsTo({ value: refAst.name }, defaultQueryValue, this._queriedTokens);\n });\n if (this._queriedTokens.get(this.viewContext.reflector.resolveExternalReference(Identifiers.ViewContainerRef))) {\n this.transformedHasViewContainer = true;\n }\n // create the providers that we know are eager first\n Array.from(this._allProviders.values()).forEach((provider) => {\n const eager = provider.eager || this._queriedTokens.get(tokenReference(provider.token));\n if (eager) {\n this._getOrCreateLocalProvider(provider.providerType, provider.token, true);\n }\n });\n }\n afterElement() {\n // collect lazy providers\n Array.from(this._allProviders.values()).forEach((provider) => {\n this._getOrCreateLocalProvider(provider.providerType, provider.token, false);\n });\n }\n get transformProviders() {\n // Note: Maps keep their insertion order.\n const lazyProviders = [];\n const eagerProviders = [];\n this._transformedProviders.forEach(provider => {\n if (provider.eager) {\n eagerProviders.push(provider);\n }\n else {\n lazyProviders.push(provider);\n }\n });\n return lazyProviders.concat(eagerProviders);\n }\n get transformedDirectiveAsts() {\n const sortedProviderTypes = this.transformProviders.map(provider => provider.token.identifier);\n const sortedDirectives = this._directiveAsts.slice();\n sortedDirectives.sort((dir1, dir2) => sortedProviderTypes.indexOf(dir1.directive.type) -\n sortedProviderTypes.indexOf(dir2.directive.type));\n return sortedDirectives;\n }\n get queryMatches() {\n const allMatches = [];\n this._queriedTokens.forEach((matches) => {\n allMatches.push(...matches);\n });\n return allMatches;\n }\n _addQueryReadsTo(token, defaultValue, queryReadTokens) {\n this._getQueriesFor(token).forEach((query) => {\n const queryValue = query.meta.read || defaultValue;\n const tokenRef = tokenReference(queryValue);\n let queryMatches = queryReadTokens.get(tokenRef);\n if (!queryMatches) {\n queryMatches = [];\n queryReadTokens.set(tokenRef, queryMatches);\n }\n queryMatches.push({ queryId: query.queryId, value: queryValue });\n });\n }\n _getQueriesFor(token) {\n const result = [];\n let currentEl = this;\n let distance = 0;\n let queries;\n while (currentEl !== null) {\n queries = currentEl._contentQueries.get(tokenReference(token));\n if (queries) {\n result.push(...queries.filter((query) => query.meta.descendants || distance <= 1));\n }\n if (currentEl._directiveAsts.length > 0) {\n distance++;\n }\n currentEl = currentEl._parent;\n }\n queries = this.viewContext.viewQueries.get(tokenReference(token));\n if (queries) {\n result.push(...queries);\n }\n return result;\n }\n _getOrCreateLocalProvider(requestingProviderType, token, eager) {\n const resolvedProvider = this._allProviders.get(tokenReference(token));\n if (!resolvedProvider ||\n ((requestingProviderType === ProviderAstType.Directive ||\n requestingProviderType === ProviderAstType.PublicService) &&\n resolvedProvider.providerType === ProviderAstType.PrivateService) ||\n ((requestingProviderType === ProviderAstType.PrivateService ||\n requestingProviderType === ProviderAstType.PublicService) &&\n resolvedProvider.providerType === ProviderAstType.Builtin)) {\n return null;\n }\n let transformedProviderAst = this._transformedProviders.get(tokenReference(token));\n if (transformedProviderAst) {\n return transformedProviderAst;\n }\n if (this._seenProviders.get(tokenReference(token)) != null) {\n this.viewContext.errors.push(new ProviderError(`Cannot instantiate cyclic dependency! ${tokenName(token)}`, this._sourceSpan));\n return null;\n }\n this._seenProviders.set(tokenReference(token), true);\n const transformedProviders = resolvedProvider.providers.map((provider) => {\n let transformedUseValue = provider.useValue;\n let transformedUseExisting = provider.useExisting;\n let transformedDeps = undefined;\n if (provider.useExisting != null) {\n const existingDiDep = this._getDependency(resolvedProvider.providerType, { token: provider.useExisting }, eager);\n if (existingDiDep.token != null) {\n transformedUseExisting = existingDiDep.token;\n }\n else {\n transformedUseExisting = null;\n transformedUseValue = existingDiDep.value;\n }\n }\n else if (provider.useFactory) {\n const deps = provider.deps || provider.useFactory.diDeps;\n transformedDeps =\n deps.map((dep) => this._getDependency(resolvedProvider.providerType, dep, eager));\n }\n else if (provider.useClass) {\n const deps = provider.deps || provider.useClass.diDeps;\n transformedDeps =\n deps.map((dep) => this._getDependency(resolvedProvider.providerType, dep, eager));\n }\n return _transformProvider(provider, {\n useExisting: transformedUseExisting,\n useValue: transformedUseValue,\n deps: transformedDeps\n });\n });\n transformedProviderAst =\n _transformProviderAst(resolvedProvider, { eager: eager, providers: transformedProviders });\n this._transformedProviders.set(tokenReference(token), transformedProviderAst);\n return transformedProviderAst;\n }\n _getLocalDependency(requestingProviderType, dep, eager = false) {\n if (dep.isAttribute) {\n const attrValue = this._attrs[dep.token.value];\n return { isValue: true, value: attrValue == null ? null : attrValue };\n }\n if (dep.token != null) {\n // access builtints\n if ((requestingProviderType === ProviderAstType.Directive ||\n requestingProviderType === ProviderAstType.Component)) {\n if (tokenReference(dep.token) ===\n this.viewContext.reflector.resolveExternalReference(Identifiers.Renderer) ||\n tokenReference(dep.token) ===\n this.viewContext.reflector.resolveExternalReference(Identifiers.ElementRef) ||\n tokenReference(dep.token) ===\n this.viewContext.reflector.resolveExternalReference(Identifiers.ChangeDetectorRef) ||\n tokenReference(dep.token) ===\n this.viewContext.reflector.resolveExternalReference(Identifiers.TemplateRef)) {\n return dep;\n }\n if (tokenReference(dep.token) ===\n this.viewContext.reflector.resolveExternalReference(Identifiers.ViewContainerRef)) {\n this.transformedHasViewContainer = true;\n }\n }\n // access the injector\n if (tokenReference(dep.token) ===\n this.viewContext.reflector.resolveExternalReference(Identifiers.Injector)) {\n return dep;\n }\n // access providers\n if (this._getOrCreateLocalProvider(requestingProviderType, dep.token, eager) != null) {\n return dep;\n }\n }\n return null;\n }\n _getDependency(requestingProviderType, dep, eager = false) {\n let currElement = this;\n let currEager = eager;\n let result = null;\n if (!dep.isSkipSelf) {\n result = this._getLocalDependency(requestingProviderType, dep, eager);\n }\n if (dep.isSelf) {\n if (!result && dep.isOptional) {\n result = { isValue: true, value: null };\n }\n }\n else {\n // check parent elements\n while (!result && currElement._parent) {\n const prevElement = currElement;\n currElement = currElement._parent;\n if (prevElement._isViewRoot) {\n currEager = false;\n }\n result = currElement._getLocalDependency(ProviderAstType.PublicService, dep, currEager);\n }\n // check @Host restriction\n if (!result) {\n if (!dep.isHost || this.viewContext.component.isHost ||\n this.viewContext.component.type.reference === tokenReference(dep.token) ||\n this.viewContext.viewProviders.get(tokenReference(dep.token)) != null) {\n result = dep;\n }\n else {\n result = dep.isOptional ? { isValue: true, value: null } : null;\n }\n }\n }\n if (!result) {\n this.viewContext.errors.push(new ProviderError(`No provider for ${tokenName(dep.token)}`, this._sourceSpan));\n }\n return result;\n }\n}\nclass NgModuleProviderAnalyzer {\n constructor(reflector, ngModule, extraProviders, sourceSpan) {\n this.reflector = reflector;\n this._transformedProviders = new Map();\n this._seenProviders = new Map();\n this._errors = [];\n this._allProviders = new Map();\n ngModule.transitiveModule.modules.forEach((ngModuleType) => {\n const ngModuleProvider = { token: { identifier: ngModuleType }, useClass: ngModuleType };\n _resolveProviders([ngModuleProvider], ProviderAstType.PublicService, true, sourceSpan, this._errors, this._allProviders, /* isModule */ true);\n });\n _resolveProviders(ngModule.transitiveModule.providers.map(entry => entry.provider).concat(extraProviders), ProviderAstType.PublicService, false, sourceSpan, this._errors, this._allProviders, \n /* isModule */ false);\n }\n parse() {\n Array.from(this._allProviders.values()).forEach((provider) => {\n this._getOrCreateLocalProvider(provider.token, provider.eager);\n });\n if (this._errors.length > 0) {\n const errorString = this._errors.join('\\n');\n throw new Error(`Provider parse errors:\\n${errorString}`);\n }\n // Note: Maps keep their insertion order.\n const lazyProviders = [];\n const eagerProviders = [];\n this._transformedProviders.forEach(provider => {\n if (provider.eager) {\n eagerProviders.push(provider);\n }\n else {\n lazyProviders.push(provider);\n }\n });\n return lazyProviders.concat(eagerProviders);\n }\n _getOrCreateLocalProvider(token, eager) {\n const resolvedProvider = this._allProviders.get(tokenReference(token));\n if (!resolvedProvider) {\n return null;\n }\n let transformedProviderAst = this._transformedProviders.get(tokenReference(token));\n if (transformedProviderAst) {\n return transformedProviderAst;\n }\n if (this._seenProviders.get(tokenReference(token)) != null) {\n this._errors.push(new ProviderError(`Cannot instantiate cyclic dependency! ${tokenName(token)}`, resolvedProvider.sourceSpan));\n return null;\n }\n this._seenProviders.set(tokenReference(token), true);\n const transformedProviders = resolvedProvider.providers.map((provider) => {\n let transformedUseValue = provider.useValue;\n let transformedUseExisting = provider.useExisting;\n let transformedDeps = undefined;\n if (provider.useExisting != null) {\n const existingDiDep = this._getDependency({ token: provider.useExisting }, eager, resolvedProvider.sourceSpan);\n if (existingDiDep.token != null) {\n transformedUseExisting = existingDiDep.token;\n }\n else {\n transformedUseExisting = null;\n transformedUseValue = existingDiDep.value;\n }\n }\n else if (provider.useFactory) {\n const deps = provider.deps || provider.useFactory.diDeps;\n transformedDeps =\n deps.map((dep) => this._getDependency(dep, eager, resolvedProvider.sourceSpan));\n }\n else if (provider.useClass) {\n const deps = provider.deps || provider.useClass.diDeps;\n transformedDeps =\n deps.map((dep) => this._getDependency(dep, eager, resolvedProvider.sourceSpan));\n }\n return _transformProvider(provider, {\n useExisting: transformedUseExisting,\n useValue: transformedUseValue,\n deps: transformedDeps\n });\n });\n transformedProviderAst =\n _transformProviderAst(resolvedProvider, { eager: eager, providers: transformedProviders });\n this._transformedProviders.set(tokenReference(token), transformedProviderAst);\n return transformedProviderAst;\n }\n _getDependency(dep, eager = false, requestorSourceSpan) {\n let foundLocal = false;\n if (!dep.isSkipSelf && dep.token != null) {\n // access the injector\n if (tokenReference(dep.token) ===\n this.reflector.resolveExternalReference(Identifiers.Injector) ||\n tokenReference(dep.token) ===\n this.reflector.resolveExternalReference(Identifiers.ComponentFactoryResolver)) {\n foundLocal = true;\n // access providers\n }\n else if (this._getOrCreateLocalProvider(dep.token, eager) != null) {\n foundLocal = true;\n }\n }\n return dep;\n }\n}\nfunction _transformProvider(provider, { useExisting, useValue, deps }) {\n return {\n token: provider.token,\n useClass: provider.useClass,\n useExisting: useExisting,\n useFactory: provider.useFactory,\n useValue: useValue,\n deps: deps,\n multi: provider.multi\n };\n}\nfunction _transformProviderAst(provider, { eager, providers }) {\n return new ProviderAst(provider.token, provider.multiProvider, provider.eager || eager, providers, provider.providerType, provider.lifecycleHooks, provider.sourceSpan, provider.isModule);\n}\nfunction _resolveProvidersFromDirectives(directives, sourceSpan, targetErrors) {\n const providersByToken = new Map();\n directives.forEach((directive) => {\n const dirProvider = { token: { identifier: directive.type }, useClass: directive.type };\n _resolveProviders([dirProvider], directive.isComponent ? ProviderAstType.Component : ProviderAstType.Directive, true, sourceSpan, targetErrors, providersByToken, /* isModule */ false);\n });\n // Note: directives need to be able to overwrite providers of a component!\n const directivesWithComponentFirst = directives.filter(dir => dir.isComponent).concat(directives.filter(dir => !dir.isComponent));\n directivesWithComponentFirst.forEach((directive) => {\n _resolveProviders(directive.providers, ProviderAstType.PublicService, false, sourceSpan, targetErrors, providersByToken, /* isModule */ false);\n _resolveProviders(directive.viewProviders, ProviderAstType.PrivateService, false, sourceSpan, targetErrors, providersByToken, /* isModule */ false);\n });\n return providersByToken;\n}\nfunction _resolveProviders(providers, providerType, eager, sourceSpan, targetErrors, targetProvidersByToken, isModule) {\n providers.forEach((provider) => {\n let resolvedProvider = targetProvidersByToken.get(tokenReference(provider.token));\n if (resolvedProvider != null && !!resolvedProvider.multiProvider !== !!provider.multi) {\n targetErrors.push(new ProviderError(`Mixing multi and non multi provider is not possible for token ${tokenName(resolvedProvider.token)}`, sourceSpan));\n }\n if (!resolvedProvider) {\n const lifecycleHooks = provider.token.identifier &&\n provider.token.identifier.lifecycleHooks ?\n provider.token.identifier.lifecycleHooks :\n [];\n const isUseValue = !(provider.useClass || provider.useExisting || provider.useFactory);\n resolvedProvider = new ProviderAst(provider.token, !!provider.multi, eager || isUseValue, [provider], providerType, lifecycleHooks, sourceSpan, isModule);\n targetProvidersByToken.set(tokenReference(provider.token), resolvedProvider);\n }\n else {\n if (!provider.multi) {\n resolvedProvider.providers.length = 0;\n }\n resolvedProvider.providers.push(provider);\n }\n });\n}\nfunction _getViewQueries(component) {\n // Note: queries start with id 1 so we can use the number in a Bloom filter!\n let viewQueryId = 1;\n const viewQueries = new Map();\n if (component.viewQueries) {\n component.viewQueries.forEach((query) => _addQueryToTokenMap(viewQueries, { meta: query, queryId: viewQueryId++ }));\n }\n return viewQueries;\n}\nfunction _getContentQueries(contentQueryStartId, directives) {\n let contentQueryId = contentQueryStartId;\n const contentQueries = new Map();\n directives.forEach((directive, directiveIndex) => {\n if (directive.queries) {\n directive.queries.forEach((query) => _addQueryToTokenMap(contentQueries, { meta: query, queryId: contentQueryId++ }));\n }\n });\n return contentQueries;\n}\nfunction _addQueryToTokenMap(map, query) {\n query.meta.selectors.forEach((token) => {\n let entry = map.get(tokenReference(token));\n if (!entry) {\n entry = [];\n map.set(tokenReference(token), entry);\n }\n entry.push(query);\n });\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass StyleWithImports {\n constructor(style, styleUrls) {\n this.style = style;\n this.styleUrls = styleUrls;\n }\n}\nfunction isStyleUrlResolvable(url) {\n if (url == null || url.length === 0 || url[0] == '/')\n return false;\n const schemeMatch = url.match(URL_WITH_SCHEMA_REGEXP);\n return schemeMatch === null || schemeMatch[1] == 'package' || schemeMatch[1] == 'asset';\n}\n/**\n * Rewrites stylesheets by resolving and removing the @import urls that\n * are either relative or don't have a `package:` scheme\n */\nfunction extractStyleUrls(resolver, baseUrl, cssText) {\n const foundUrls = [];\n const modifiedCssText = cssText.replace(CSS_STRIPPABLE_COMMENT_REGEXP, '')\n .replace(CSS_IMPORT_REGEXP, (...m) => {\n const url = m[1] || m[2];\n if (!isStyleUrlResolvable(url)) {\n // Do not attempt to resolve non-package absolute URLs with URI\n // scheme\n return m[0];\n }\n foundUrls.push(resolver.resolve(baseUrl, url));\n return '';\n });\n return new StyleWithImports(modifiedCssText, foundUrls);\n}\nconst CSS_IMPORT_REGEXP = /@import\\s+(?:url\\()?\\s*(?:(?:['\"]([^'\"]*))|([^;\\)\\s]*))[^;]*;?/g;\nconst CSS_STRIPPABLE_COMMENT_REGEXP = /\\/\\*(?!#\\s*(?:sourceURL|sourceMappingURL)=)[\\s\\S]+?\\*\\//g;\nconst URL_WITH_SCHEMA_REGEXP = /^([^:/?#]+):/;\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst PROPERTY_PARTS_SEPARATOR = '.';\nconst ATTRIBUTE_PREFIX = 'attr';\nconst CLASS_PREFIX = 'class';\nconst STYLE_PREFIX = 'style';\nconst TEMPLATE_ATTR_PREFIX = '*';\nconst ANIMATE_PROP_PREFIX = 'animate-';\n/**\n * Parses bindings in templates and in the directive host area.\n */\nclass BindingParser {\n constructor(_exprParser, _interpolationConfig, _schemaRegistry, pipes, errors) {\n this._exprParser = _exprParser;\n this._interpolationConfig = _interpolationConfig;\n this._schemaRegistry = _schemaRegistry;\n this.errors = errors;\n this.pipesByName = null;\n this._usedPipes = new Map();\n // When the `pipes` parameter is `null`, do not check for used pipes\n // This is used in IVY when we might not know the available pipes at compile time\n if (pipes) {\n const pipesByName = new Map();\n pipes.forEach(pipe => pipesByName.set(pipe.name, pipe));\n this.pipesByName = pipesByName;\n }\n }\n get interpolationConfig() {\n return this._interpolationConfig;\n }\n getUsedPipes() {\n return Array.from(this._usedPipes.values());\n }\n createBoundHostProperties(dirMeta, sourceSpan) {\n if (dirMeta.hostProperties) {\n const boundProps = [];\n Object.keys(dirMeta.hostProperties).forEach(propName => {\n const expression = dirMeta.hostProperties[propName];\n if (typeof expression === 'string') {\n this.parsePropertyBinding(propName, expression, true, sourceSpan, sourceSpan.start.offset, undefined, [], boundProps);\n }\n else {\n this._reportError(`Value of the host property binding \"${propName}\" needs to be a string representing an expression but got \"${expression}\" (${typeof expression})`, sourceSpan);\n }\n });\n return boundProps;\n }\n return null;\n }\n createDirectiveHostPropertyAsts(dirMeta, elementSelector, sourceSpan) {\n const boundProps = this.createBoundHostProperties(dirMeta, sourceSpan);\n return boundProps &&\n boundProps.map((prop) => this.createBoundElementProperty(elementSelector, prop));\n }\n createDirectiveHostEventAsts(dirMeta, sourceSpan) {\n if (dirMeta.hostListeners) {\n const targetEvents = [];\n Object.keys(dirMeta.hostListeners).forEach(propName => {\n const expression = dirMeta.hostListeners[propName];\n if (typeof expression === 'string') {\n // TODO: pass a more accurate handlerSpan for this event.\n this.parseEvent(propName, expression, sourceSpan, sourceSpan, [], targetEvents);\n }\n else {\n this._reportError(`Value of the host listener \"${propName}\" needs to be a string representing an expression but got \"${expression}\" (${typeof expression})`, sourceSpan);\n }\n });\n return targetEvents;\n }\n return null;\n }\n parseInterpolation(value, sourceSpan) {\n const sourceInfo = sourceSpan.start.toString();\n try {\n const ast = this._exprParser.parseInterpolation(value, sourceInfo, sourceSpan.start.offset, this._interpolationConfig);\n if (ast)\n this._reportExpressionParserErrors(ast.errors, sourceSpan);\n this._checkPipes(ast, sourceSpan);\n return ast;\n }\n catch (e) {\n this._reportError(`${e}`, sourceSpan);\n return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, sourceSpan.start.offset);\n }\n }\n /**\n * Parses the bindings in a microsyntax expression, and converts them to\n * `ParsedProperty` or `ParsedVariable`.\n *\n * @param tplKey template binding name\n * @param tplValue template binding value\n * @param sourceSpan span of template binding relative to entire the template\n * @param absoluteValueOffset start of the tplValue relative to the entire template\n * @param targetMatchableAttrs potential attributes to match in the template\n * @param targetProps target property bindings in the template\n * @param targetVars target variables in the template\n */\n parseInlineTemplateBinding(tplKey, tplValue, sourceSpan, absoluteValueOffset, targetMatchableAttrs, targetProps, targetVars) {\n const absoluteKeyOffset = sourceSpan.start.offset + TEMPLATE_ATTR_PREFIX.length;\n const bindings = this._parseTemplateBindings(tplKey, tplValue, sourceSpan, absoluteKeyOffset, absoluteValueOffset);\n for (const binding of bindings) {\n // sourceSpan is for the entire HTML attribute. bindingSpan is for a particular\n // binding within the microsyntax expression so it's more narrow than sourceSpan.\n const bindingSpan = moveParseSourceSpan(sourceSpan, binding.sourceSpan);\n const key = binding.key.source;\n const keySpan = moveParseSourceSpan(sourceSpan, binding.key.span);\n if (binding instanceof VariableBinding) {\n const value = binding.value ? binding.value.source : '$implicit';\n const valueSpan = binding.value ? moveParseSourceSpan(sourceSpan, binding.value.span) : undefined;\n targetVars.push(new ParsedVariable(key, value, bindingSpan, keySpan, valueSpan));\n }\n else if (binding.value) {\n const valueSpan = moveParseSourceSpan(sourceSpan, binding.value.ast.sourceSpan);\n this._parsePropertyAst(key, binding.value, sourceSpan, valueSpan, targetMatchableAttrs, targetProps);\n }\n else {\n targetMatchableAttrs.push([key, '']);\n this.parseLiteralAttr(key, null, sourceSpan, absoluteValueOffset, undefined, targetMatchableAttrs, targetProps);\n }\n }\n }\n /**\n * Parses the bindings in a microsyntax expression, e.g.\n * ```\n * \n * ```\n *\n * @param tplKey template binding name\n * @param tplValue template binding value\n * @param sourceSpan span of template binding relative to entire the template\n * @param absoluteKeyOffset start of the `tplKey`\n * @param absoluteValueOffset start of the `tplValue`\n */\n _parseTemplateBindings(tplKey, tplValue, sourceSpan, absoluteKeyOffset, absoluteValueOffset) {\n const sourceInfo = sourceSpan.start.toString();\n try {\n const bindingsResult = this._exprParser.parseTemplateBindings(tplKey, tplValue, sourceInfo, absoluteKeyOffset, absoluteValueOffset);\n this._reportExpressionParserErrors(bindingsResult.errors, sourceSpan);\n bindingsResult.templateBindings.forEach((binding) => {\n if (binding.value instanceof ASTWithSource) {\n this._checkPipes(binding.value, sourceSpan);\n }\n });\n bindingsResult.warnings.forEach((warning) => {\n this._reportError(warning, sourceSpan, ParseErrorLevel.WARNING);\n });\n return bindingsResult.templateBindings;\n }\n catch (e) {\n this._reportError(`${e}`, sourceSpan);\n return [];\n }\n }\n parseLiteralAttr(name, value, sourceSpan, absoluteOffset, valueSpan, targetMatchableAttrs, targetProps) {\n if (isAnimationLabel(name)) {\n name = name.substring(1);\n if (value) {\n this._reportError(`Assigning animation triggers via @prop=\"exp\" attributes with an expression is invalid.` +\n ` Use property bindings (e.g. [@prop]=\"exp\") or use an attribute without a value (e.g. @prop) instead.`, sourceSpan, ParseErrorLevel.ERROR);\n }\n this._parseAnimation(name, value, sourceSpan, absoluteOffset, valueSpan, targetMatchableAttrs, targetProps);\n }\n else {\n targetProps.push(new ParsedProperty(name, this._exprParser.wrapLiteralPrimitive(value, '', absoluteOffset), ParsedPropertyType.LITERAL_ATTR, sourceSpan, valueSpan));\n }\n }\n parsePropertyBinding(name, expression, isHost, sourceSpan, absoluteOffset, valueSpan, targetMatchableAttrs, targetProps) {\n if (name.length === 0) {\n this._reportError(`Property name is missing in binding`, sourceSpan);\n }\n let isAnimationProp = false;\n if (name.startsWith(ANIMATE_PROP_PREFIX)) {\n isAnimationProp = true;\n name = name.substring(ANIMATE_PROP_PREFIX.length);\n }\n else if (isAnimationLabel(name)) {\n isAnimationProp = true;\n name = name.substring(1);\n }\n if (isAnimationProp) {\n this._parseAnimation(name, expression, sourceSpan, absoluteOffset, valueSpan, targetMatchableAttrs, targetProps);\n }\n else {\n this._parsePropertyAst(name, this._parseBinding(expression, isHost, valueSpan || sourceSpan, absoluteOffset), sourceSpan, valueSpan, targetMatchableAttrs, targetProps);\n }\n }\n parsePropertyInterpolation(name, value, sourceSpan, valueSpan, targetMatchableAttrs, targetProps) {\n const expr = this.parseInterpolation(value, valueSpan || sourceSpan);\n if (expr) {\n this._parsePropertyAst(name, expr, sourceSpan, valueSpan, targetMatchableAttrs, targetProps);\n return true;\n }\n return false;\n }\n _parsePropertyAst(name, ast, sourceSpan, valueSpan, targetMatchableAttrs, targetProps) {\n targetMatchableAttrs.push([name, ast.source]);\n targetProps.push(new ParsedProperty(name, ast, ParsedPropertyType.DEFAULT, sourceSpan, valueSpan));\n }\n _parseAnimation(name, expression, sourceSpan, absoluteOffset, valueSpan, targetMatchableAttrs, targetProps) {\n if (name.length === 0) {\n this._reportError('Animation trigger is missing', sourceSpan);\n }\n // This will occur when a @trigger is not paired with an expression.\n // For animations it is valid to not have an expression since */void\n // states will be applied by angular when the element is attached/detached\n const ast = this._parseBinding(expression || 'undefined', false, valueSpan || sourceSpan, absoluteOffset);\n targetMatchableAttrs.push([name, ast.source]);\n targetProps.push(new ParsedProperty(name, ast, ParsedPropertyType.ANIMATION, sourceSpan, valueSpan));\n }\n _parseBinding(value, isHostBinding, sourceSpan, absoluteOffset) {\n const sourceInfo = (sourceSpan && sourceSpan.start || '(unknown)').toString();\n try {\n const ast = isHostBinding ?\n this._exprParser.parseSimpleBinding(value, sourceInfo, absoluteOffset, this._interpolationConfig) :\n this._exprParser.parseBinding(value, sourceInfo, absoluteOffset, this._interpolationConfig);\n if (ast)\n this._reportExpressionParserErrors(ast.errors, sourceSpan);\n this._checkPipes(ast, sourceSpan);\n return ast;\n }\n catch (e) {\n this._reportError(`${e}`, sourceSpan);\n return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);\n }\n }\n createBoundElementProperty(elementSelector, boundProp, skipValidation = false, mapPropertyName = true) {\n if (boundProp.isAnimation) {\n return new BoundElementProperty(boundProp.name, 4 /* Animation */, SecurityContext.NONE, boundProp.expression, null, boundProp.sourceSpan, boundProp.valueSpan);\n }\n let unit = null;\n let bindingType = undefined;\n let boundPropertyName = null;\n const parts = boundProp.name.split(PROPERTY_PARTS_SEPARATOR);\n let securityContexts = undefined;\n // Check for special cases (prefix style, attr, class)\n if (parts.length > 1) {\n if (parts[0] == ATTRIBUTE_PREFIX) {\n boundPropertyName = parts.slice(1).join(PROPERTY_PARTS_SEPARATOR);\n if (!skipValidation) {\n this._validatePropertyOrAttributeName(boundPropertyName, boundProp.sourceSpan, true);\n }\n securityContexts = calcPossibleSecurityContexts(this._schemaRegistry, elementSelector, boundPropertyName, true);\n const nsSeparatorIdx = boundPropertyName.indexOf(':');\n if (nsSeparatorIdx > -1) {\n const ns = boundPropertyName.substring(0, nsSeparatorIdx);\n const name = boundPropertyName.substring(nsSeparatorIdx + 1);\n boundPropertyName = mergeNsAndName(ns, name);\n }\n bindingType = 1 /* Attribute */;\n }\n else if (parts[0] == CLASS_PREFIX) {\n boundPropertyName = parts[1];\n bindingType = 2 /* Class */;\n securityContexts = [SecurityContext.NONE];\n }\n else if (parts[0] == STYLE_PREFIX) {\n unit = parts.length > 2 ? parts[2] : null;\n boundPropertyName = parts[1];\n bindingType = 3 /* Style */;\n securityContexts = [SecurityContext.STYLE];\n }\n }\n // If not a special case, use the full property name\n if (boundPropertyName === null) {\n const mappedPropName = this._schemaRegistry.getMappedPropName(boundProp.name);\n boundPropertyName = mapPropertyName ? mappedPropName : boundProp.name;\n securityContexts = calcPossibleSecurityContexts(this._schemaRegistry, elementSelector, mappedPropName, false);\n bindingType = 0 /* Property */;\n if (!skipValidation) {\n this._validatePropertyOrAttributeName(mappedPropName, boundProp.sourceSpan, false);\n }\n }\n return new BoundElementProperty(boundPropertyName, bindingType, securityContexts[0], boundProp.expression, unit, boundProp.sourceSpan, boundProp.valueSpan);\n }\n parseEvent(name, expression, sourceSpan, handlerSpan, targetMatchableAttrs, targetEvents) {\n if (name.length === 0) {\n this._reportError(`Event name is missing in binding`, sourceSpan);\n }\n if (isAnimationLabel(name)) {\n name = name.substr(1);\n this._parseAnimationEvent(name, expression, sourceSpan, handlerSpan, targetEvents);\n }\n else {\n this._parseRegularEvent(name, expression, sourceSpan, handlerSpan, targetMatchableAttrs, targetEvents);\n }\n }\n calcPossibleSecurityContexts(selector, propName, isAttribute) {\n const prop = this._schemaRegistry.getMappedPropName(propName);\n return calcPossibleSecurityContexts(this._schemaRegistry, selector, prop, isAttribute);\n }\n _parseAnimationEvent(name, expression, sourceSpan, handlerSpan, targetEvents) {\n const matches = splitAtPeriod(name, [name, '']);\n const eventName = matches[0];\n const phase = matches[1].toLowerCase();\n if (phase) {\n switch (phase) {\n case 'start':\n case 'done':\n const ast = this._parseAction(expression, handlerSpan);\n targetEvents.push(new ParsedEvent(eventName, phase, 1 /* Animation */, ast, sourceSpan, handlerSpan));\n break;\n default:\n this._reportError(`The provided animation output phase value \"${phase}\" for \"@${eventName}\" is not supported (use start or done)`, sourceSpan);\n break;\n }\n }\n else {\n this._reportError(`The animation trigger output event (@${eventName}) is missing its phase value name (start or done are currently supported)`, sourceSpan);\n }\n }\n _parseRegularEvent(name, expression, sourceSpan, handlerSpan, targetMatchableAttrs, targetEvents) {\n // long format: 'target: eventName'\n const [target, eventName] = splitAtColon(name, [null, name]);\n const ast = this._parseAction(expression, handlerSpan);\n targetMatchableAttrs.push([name, ast.source]);\n targetEvents.push(new ParsedEvent(eventName, target, 0 /* Regular */, ast, sourceSpan, handlerSpan));\n // Don't detect directives for event names for now,\n // so don't add the event name to the matchableAttrs\n }\n _parseAction(value, sourceSpan) {\n const sourceInfo = (sourceSpan && sourceSpan.start || '(unknown').toString();\n const absoluteOffset = (sourceSpan && sourceSpan.start) ? sourceSpan.start.offset : 0;\n try {\n const ast = this._exprParser.parseAction(value, sourceInfo, absoluteOffset, this._interpolationConfig);\n if (ast) {\n this._reportExpressionParserErrors(ast.errors, sourceSpan);\n }\n if (!ast || ast.ast instanceof EmptyExpr) {\n this._reportError(`Empty expressions are not allowed`, sourceSpan);\n return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);\n }\n this._checkPipes(ast, sourceSpan);\n return ast;\n }\n catch (e) {\n this._reportError(`${e}`, sourceSpan);\n return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);\n }\n }\n _reportError(message, sourceSpan, level = ParseErrorLevel.ERROR) {\n this.errors.push(new ParseError(sourceSpan, message, level));\n }\n _reportExpressionParserErrors(errors, sourceSpan) {\n for (const error of errors) {\n this._reportError(error.message, sourceSpan);\n }\n }\n // Make sure all the used pipes are known in `this.pipesByName`\n _checkPipes(ast, sourceSpan) {\n if (ast && this.pipesByName) {\n const collector = new PipeCollector();\n ast.visit(collector);\n collector.pipes.forEach((ast, pipeName) => {\n const pipeMeta = this.pipesByName.get(pipeName);\n if (!pipeMeta) {\n this._reportError(`The pipe '${pipeName}' could not be found`, new ParseSourceSpan(sourceSpan.start.moveBy(ast.span.start), sourceSpan.start.moveBy(ast.span.end)));\n }\n else {\n this._usedPipes.set(pipeName, pipeMeta);\n }\n });\n }\n }\n /**\n * @param propName the name of the property / attribute\n * @param sourceSpan\n * @param isAttr true when binding to an attribute\n */\n _validatePropertyOrAttributeName(propName, sourceSpan, isAttr) {\n const report = isAttr ? this._schemaRegistry.validateAttribute(propName) :\n this._schemaRegistry.validateProperty(propName);\n if (report.error) {\n this._reportError(report.msg, sourceSpan, ParseErrorLevel.ERROR);\n }\n }\n}\nclass PipeCollector extends RecursiveAstVisitor$1 {\n constructor() {\n super(...arguments);\n this.pipes = new Map();\n }\n visitPipe(ast, context) {\n this.pipes.set(ast.name, ast);\n ast.exp.visit(this);\n this.visitAll(ast.args, context);\n return null;\n }\n}\nfunction isAnimationLabel(name) {\n return name[0] == '@';\n}\nfunction calcPossibleSecurityContexts(registry, selector, propName, isAttribute) {\n const ctxs = [];\n CssSelector.parse(selector).forEach((selector) => {\n const elementNames = selector.element ? [selector.element] : registry.allKnownElementNames();\n const notElementNames = new Set(selector.notSelectors.filter(selector => selector.isElementSelector())\n .map((selector) => selector.element));\n const possibleElementNames = elementNames.filter(elementName => !notElementNames.has(elementName));\n ctxs.push(...possibleElementNames.map(elementName => registry.securityContext(elementName, propName, isAttribute)));\n });\n return ctxs.length === 0 ? [SecurityContext.NONE] : Array.from(new Set(ctxs)).sort();\n}\n/**\n * Compute a new ParseSourceSpan based off an original `sourceSpan` by using\n * absolute offsets from the specified `absoluteSpan`.\n *\n * @param sourceSpan original source span\n * @param absoluteSpan absolute source span to move to\n */\nfunction moveParseSourceSpan(sourceSpan, absoluteSpan) {\n // The difference of two absolute offsets provide the relative offset\n const startDiff = absoluteSpan.start - sourceSpan.start.offset;\n const endDiff = absoluteSpan.end - sourceSpan.end.offset;\n return new ParseSourceSpan(sourceSpan.start.moveBy(startDiff), sourceSpan.end.moveBy(endDiff));\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst NG_CONTENT_SELECT_ATTR = 'select';\nconst LINK_ELEMENT = 'link';\nconst LINK_STYLE_REL_ATTR = 'rel';\nconst LINK_STYLE_HREF_ATTR = 'href';\nconst LINK_STYLE_REL_VALUE = 'stylesheet';\nconst STYLE_ELEMENT = 'style';\nconst SCRIPT_ELEMENT = 'script';\nconst NG_NON_BINDABLE_ATTR = 'ngNonBindable';\nconst NG_PROJECT_AS = 'ngProjectAs';\nfunction preparseElement(ast) {\n let selectAttr = null;\n let hrefAttr = null;\n let relAttr = null;\n let nonBindable = false;\n let projectAs = '';\n ast.attrs.forEach(attr => {\n const lcAttrName = attr.name.toLowerCase();\n if (lcAttrName == NG_CONTENT_SELECT_ATTR) {\n selectAttr = attr.value;\n }\n else if (lcAttrName == LINK_STYLE_HREF_ATTR) {\n hrefAttr = attr.value;\n }\n else if (lcAttrName == LINK_STYLE_REL_ATTR) {\n relAttr = attr.value;\n }\n else if (attr.name == NG_NON_BINDABLE_ATTR) {\n nonBindable = true;\n }\n else if (attr.name == NG_PROJECT_AS) {\n if (attr.value.length > 0) {\n projectAs = attr.value;\n }\n }\n });\n selectAttr = normalizeNgContentSelect(selectAttr);\n const nodeName = ast.name.toLowerCase();\n let type = PreparsedElementType.OTHER;\n if (isNgContent(nodeName)) {\n type = PreparsedElementType.NG_CONTENT;\n }\n else if (nodeName == STYLE_ELEMENT) {\n type = PreparsedElementType.STYLE;\n }\n else if (nodeName == SCRIPT_ELEMENT) {\n type = PreparsedElementType.SCRIPT;\n }\n else if (nodeName == LINK_ELEMENT && relAttr == LINK_STYLE_REL_VALUE) {\n type = PreparsedElementType.STYLESHEET;\n }\n return new PreparsedElement(type, selectAttr, hrefAttr, nonBindable, projectAs);\n}\nvar PreparsedElementType;\n(function (PreparsedElementType) {\n PreparsedElementType[PreparsedElementType[\"NG_CONTENT\"] = 0] = \"NG_CONTENT\";\n PreparsedElementType[PreparsedElementType[\"STYLE\"] = 1] = \"STYLE\";\n PreparsedElementType[PreparsedElementType[\"STYLESHEET\"] = 2] = \"STYLESHEET\";\n PreparsedElementType[PreparsedElementType[\"SCRIPT\"] = 3] = \"SCRIPT\";\n PreparsedElementType[PreparsedElementType[\"OTHER\"] = 4] = \"OTHER\";\n})(PreparsedElementType || (PreparsedElementType = {}));\nclass PreparsedElement {\n constructor(type, selectAttr, hrefAttr, nonBindable, projectAs) {\n this.type = type;\n this.selectAttr = selectAttr;\n this.hrefAttr = hrefAttr;\n this.nonBindable = nonBindable;\n this.projectAs = projectAs;\n }\n}\nfunction normalizeNgContentSelect(selectAttr) {\n if (selectAttr === null || selectAttr.length === 0) {\n return '*';\n }\n return selectAttr;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst BIND_NAME_REGEXP = /^(?:(?:(?:(bind-)|(let-)|(ref-|#)|(on-)|(bindon-)|(@))(.*))|\\[\\(([^\\)]+)\\)\\]|\\[([^\\]]+)\\]|\\(([^\\)]+)\\))$/;\n// Group 1 = \"bind-\"\nconst KW_BIND_IDX = 1;\n// Group 2 = \"let-\"\nconst KW_LET_IDX = 2;\n// Group 3 = \"ref-/#\"\nconst KW_REF_IDX = 3;\n// Group 4 = \"on-\"\nconst KW_ON_IDX = 4;\n// Group 5 = \"bindon-\"\nconst KW_BINDON_IDX = 5;\n// Group 6 = \"@\"\nconst KW_AT_IDX = 6;\n// Group 7 = the identifier after \"bind-\", \"let-\", \"ref-/#\", \"on-\", \"bindon-\" or \"@\"\nconst IDENT_KW_IDX = 7;\n// Group 8 = identifier inside [()]\nconst IDENT_BANANA_BOX_IDX = 8;\n// Group 9 = identifier inside []\nconst IDENT_PROPERTY_IDX = 9;\n// Group 10 = identifier inside ()\nconst IDENT_EVENT_IDX = 10;\nconst TEMPLATE_ATTR_PREFIX$1 = '*';\nconst CLASS_ATTR = 'class';\nlet _TEXT_CSS_SELECTOR;\nfunction TEXT_CSS_SELECTOR() {\n if (!_TEXT_CSS_SELECTOR) {\n _TEXT_CSS_SELECTOR = CssSelector.parse('*')[0];\n }\n return _TEXT_CSS_SELECTOR;\n}\nclass TemplateParseError extends ParseError {\n constructor(message, span, level) {\n super(span, message, level);\n }\n}\nclass TemplateParseResult {\n constructor(templateAst, usedPipes, errors) {\n this.templateAst = templateAst;\n this.usedPipes = usedPipes;\n this.errors = errors;\n }\n}\nclass TemplateParser {\n constructor(_config, _reflector, _exprParser, _schemaRegistry, _htmlParser, _console, transforms) {\n this._config = _config;\n this._reflector = _reflector;\n this._exprParser = _exprParser;\n this._schemaRegistry = _schemaRegistry;\n this._htmlParser = _htmlParser;\n this._console = _console;\n this.transforms = transforms;\n }\n get expressionParser() {\n return this._exprParser;\n }\n parse(component, template, directives, pipes, schemas, templateUrl, preserveWhitespaces) {\n var _a;\n const result = this.tryParse(component, template, directives, pipes, schemas, templateUrl, preserveWhitespaces);\n const warnings = result.errors.filter(error => error.level === ParseErrorLevel.WARNING);\n const errors = result.errors.filter(error => error.level === ParseErrorLevel.ERROR);\n if (warnings.length > 0) {\n (_a = this._console) === null || _a === void 0 ? void 0 : _a.warn(`Template parse warnings:\\n${warnings.join('\\n')}`);\n }\n if (errors.length > 0) {\n const errorString = errors.join('\\n');\n throw syntaxError(`Template parse errors:\\n${errorString}`, errors);\n }\n return { template: result.templateAst, pipes: result.usedPipes };\n }\n tryParse(component, template, directives, pipes, schemas, templateUrl, preserveWhitespaces) {\n let htmlParseResult = typeof template === 'string' ?\n this._htmlParser.parse(template, templateUrl, {\n tokenizeExpansionForms: true,\n interpolationConfig: this.getInterpolationConfig(component)\n }) :\n template;\n if (!preserveWhitespaces) {\n htmlParseResult = removeWhitespaces(htmlParseResult);\n }\n return this.tryParseHtml(this.expandHtml(htmlParseResult), component, directives, pipes, schemas);\n }\n tryParseHtml(htmlAstWithErrors, component, directives, pipes, schemas) {\n let result;\n const errors = htmlAstWithErrors.errors;\n const usedPipes = [];\n if (htmlAstWithErrors.rootNodes.length > 0) {\n const uniqDirectives = removeSummaryDuplicates(directives);\n const uniqPipes = removeSummaryDuplicates(pipes);\n const providerViewContext = new ProviderViewContext(this._reflector, component);\n let interpolationConfig = undefined;\n if (component.template && component.template.interpolation) {\n interpolationConfig = {\n start: component.template.interpolation[0],\n end: component.template.interpolation[1]\n };\n }\n const bindingParser = new BindingParser(this._exprParser, interpolationConfig, this._schemaRegistry, uniqPipes, errors);\n const parseVisitor = new TemplateParseVisitor(this._reflector, this._config, providerViewContext, uniqDirectives, bindingParser, this._schemaRegistry, schemas, errors);\n result = visitAll$1(parseVisitor, htmlAstWithErrors.rootNodes, EMPTY_ELEMENT_CONTEXT);\n errors.push(...providerViewContext.errors);\n usedPipes.push(...bindingParser.getUsedPipes());\n }\n else {\n result = [];\n }\n this._assertNoReferenceDuplicationOnTemplate(result, errors);\n if (errors.length > 0) {\n return new TemplateParseResult(result, usedPipes, errors);\n }\n if (this.transforms) {\n this.transforms.forEach((transform) => {\n result = templateVisitAll(transform, result);\n });\n }\n return new TemplateParseResult(result, usedPipes, errors);\n }\n expandHtml(htmlAstWithErrors, forced = false) {\n const errors = htmlAstWithErrors.errors;\n if (errors.length == 0 || forced) {\n // Transform ICU messages to angular directives\n const expandedHtmlAst = expandNodes(htmlAstWithErrors.rootNodes);\n errors.push(...expandedHtmlAst.errors);\n htmlAstWithErrors = new ParseTreeResult(expandedHtmlAst.nodes, errors);\n }\n return htmlAstWithErrors;\n }\n getInterpolationConfig(component) {\n if (component.template) {\n return InterpolationConfig.fromArray(component.template.interpolation);\n }\n return undefined;\n }\n /** @internal */\n _assertNoReferenceDuplicationOnTemplate(result, errors) {\n const existingReferences = [];\n result.filter(element => !!element.references)\n .forEach(element => element.references.forEach((reference) => {\n const name = reference.name;\n if (existingReferences.indexOf(name) < 0) {\n existingReferences.push(name);\n }\n else {\n const error = new TemplateParseError(`Reference \"#${name}\" is defined several times`, reference.sourceSpan, ParseErrorLevel.ERROR);\n errors.push(error);\n }\n }));\n }\n}\nclass TemplateParseVisitor {\n constructor(reflector, config, providerViewContext, directives, _bindingParser, _schemaRegistry, _schemas, _targetErrors) {\n this.reflector = reflector;\n this.config = config;\n this.providerViewContext = providerViewContext;\n this._bindingParser = _bindingParser;\n this._schemaRegistry = _schemaRegistry;\n this._schemas = _schemas;\n this._targetErrors = _targetErrors;\n this.selectorMatcher = new SelectorMatcher();\n this.directivesIndex = new Map();\n this.ngContentCount = 0;\n // Note: queries start with id 1 so we can use the number in a Bloom filter!\n this.contentQueryStartId = providerViewContext.component.viewQueries.length + 1;\n directives.forEach((directive, index) => {\n const selector = CssSelector.parse(directive.selector);\n this.selectorMatcher.addSelectables(selector, directive);\n this.directivesIndex.set(directive, index);\n });\n }\n visitExpansion(expansion, context) {\n return null;\n }\n visitExpansionCase(expansionCase, context) {\n return null;\n }\n visitText(text, parent) {\n const ngContentIndex = parent.findNgContentIndex(TEXT_CSS_SELECTOR());\n const valueNoNgsp = replaceNgsp(text.value);\n const expr = this._bindingParser.parseInterpolation(valueNoNgsp, text.sourceSpan);\n return expr ? new BoundTextAst(expr, ngContentIndex, text.sourceSpan) :\n new TextAst(valueNoNgsp, ngContentIndex, text.sourceSpan);\n }\n visitAttribute(attribute, context) {\n return new AttrAst(attribute.name, attribute.value, attribute.sourceSpan);\n }\n visitComment(comment, context) {\n return null;\n }\n visitElement(element, parent) {\n const queryStartIndex = this.contentQueryStartId;\n const elName = element.name;\n const preparsedElement = preparseElement(element);\n if (preparsedElement.type === PreparsedElementType.SCRIPT ||\n preparsedElement.type === PreparsedElementType.STYLE) {\n // Skipping