@datagrok-libraries/bio 5.25.0 → 5.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/aminoacids.js +1 -1
- package/src/aminoacids.js.map +1 -0
- package/src/consts/index.js +1 -1
- package/src/consts/index.js.map +1 -0
- package/src/monomer-works/monomer-utils.js +1 -1
- package/src/monomer-works/monomer-utils.js.map +1 -0
- package/src/monomer-works/monomer-works.js +1 -1
- package/src/monomer-works/monomer-works.js.map +1 -0
- package/src/monomer-works/to-atomic-level.js +1 -1
- package/src/monomer-works/to-atomic-level.js.map +1 -0
- package/src/nucleotides.js +1 -1
- package/src/nucleotides.js.map +1 -0
- package/src/package.js +1 -1
- package/src/package.js.map +1 -0
- package/src/pdb/index.js +1 -1
- package/src/pdb/index.js.map +1 -0
- package/src/pdb/pdb-helper.js +1 -1
- package/src/pdb/pdb-helper.js.map +1 -0
- package/src/seq-palettes.js +1 -1
- package/src/seq-palettes.js.map +1 -0
- package/src/sequence-encoder.js +1 -1
- package/src/sequence-encoder.js.map +1 -0
- package/src/tests/palettes-tests.js +1 -1
- package/src/tests/palettes-tests.js.map +1 -0
- package/src/trees/dendrogram.js +1 -1
- package/src/trees/dendrogram.js.map +1 -0
- package/src/trees/distance-matrix.js +1 -1
- package/src/trees/distance-matrix.js.map +1 -0
- package/src/trees/index.d.ts +10 -0
- package/src/trees/index.d.ts.map +1 -1
- package/src/trees/index.js +17 -1
- package/src/trees/index.js.map +1 -0
- package/src/trees/phylocanvas.js +1 -1
- package/src/trees/phylocanvas.js.map +1 -0
- package/src/trees/tree-helper.js +1 -1
- package/src/trees/tree-helper.js.map +1 -0
- package/src/types/index.js +1 -1
- package/src/types/index.js.map +1 -0
- package/src/unknown.js +1 -1
- package/src/unknown.js.map +1 -0
- package/src/utils/cell-renderer.js +1 -1
- package/src/utils/cell-renderer.js.map +1 -0
- package/src/utils/const.js +1 -1
- package/src/utils/const.js.map +1 -0
- package/src/utils/fasta-handler.js +1 -1
- package/src/utils/fasta-handler.js.map +1 -0
- package/src/utils/macromolecule.js +1 -1
- package/src/utils/macromolecule.js.map +1 -0
- package/src/utils/notation-converter.js +1 -1
- package/src/utils/notation-converter.js.map +1 -0
- package/src/utils/splitter.js +1 -1
- package/src/utils/splitter.js.map +1 -0
- package/src/utils/units-handler.js +1 -1
- package/src/utils/units-handler.js.map +1 -0
- package/src/utils.js +1 -1
- package/src/utils.js.map +1 -0
- package/src/viewers/molstar-viewer.js +1 -1
- package/src/viewers/molstar-viewer.js.map +1 -0
- package/src/viewers/ngl-gl-viewer.js +1 -1
- package/src/viewers/ngl-gl-viewer.js.map +1 -0
- package/src/viewers/phylocanvas-gl-viewer.js +1 -1
- package/src/viewers/phylocanvas-gl-viewer.js.map +1 -0
- package/src/viewers/vd-regions.d.ts +39 -0
- package/src/viewers/vd-regions.d.ts.map +1 -0
- package/src/viewers/vd-regions.js +19 -0
- package/src/viewers/vd-regions.js.map +1 -0
- package/src/viewers/viewer.js +1 -1
- package/src/viewers/viewer.js.map +1 -0
- package/src/viewers/web-logo.d.ts +17 -0
- package/src/viewers/web-logo.d.ts.map +1 -1
- package/src/viewers/web-logo.js +18 -1
- package/src/viewers/web-logo.js.map +1 -0
- package/tsconfig.json +8 -8
- package/src/vd-regions.d.ts +0 -34
- package/src/vd-regions.d.ts.map +0 -1
- package/src/vd-regions.js +0 -30
package/package.json
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"friendlyName": "Datagrok bio library",
|
|
7
|
-
"version": "5.
|
|
7
|
+
"version": "5.27.0",
|
|
8
8
|
"description": "",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@datagrok-libraries/gridext": "^1.3.22",
|
|
11
|
-
"@datagrok-libraries/utils": "^2.
|
|
11
|
+
"@datagrok-libraries/utils": "^2.5.0",
|
|
12
12
|
"cash-dom": "latest",
|
|
13
13
|
"datagrok-api": "^1.10.2",
|
|
14
14
|
"dayjs": "latest",
|
package/src/aminoacids.js
CHANGED
|
@@ -235,4 +235,4 @@ Aminoacids.AAFullNames = {
|
|
|
235
235
|
'Tyr': 'Y',
|
|
236
236
|
'Val': 'V',
|
|
237
237
|
};
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1pbm9hY2lkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFtaW5vYWNpZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFhLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxjQUFjO0lBRzdDLE1BQU0sS0FBSyxJQUFJO1FBQ3BCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQztnQkFDNUQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDO2dCQUM1QixDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUM7YUFDekIsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztTQUMvQjtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBSU0sTUFBTSxLQUFLLFVBQVU7UUFDMUIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUM7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QUFFLEdBQUc7SUFDVixLQUFLLEVBQUUsR0FBRztJQUNWLEtBQUssRUFBRSxHQUFHO0lBQ1YsS0FBSyxFQUFFLEdBQUc7SUFDVixLQUFLLEVBQUUsR0FBRztDQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQge1N0cmluZ0RpY3Rpb25hcnl9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zJztcbmltcG9ydCB7U2VxUGFsZXR0ZSwgU2VxUGFsZXR0ZUJhc2V9IGZyb20gJy4vc2VxLXBhbGV0dGVzJztcblxuZXhwb3J0IGNsYXNzIEFtaW5vYWNpZHNQYWxldHRlcyBleHRlbmRzIFNlcVBhbGV0dGVCYXNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgbGVzazogU2VxUGFsZXR0ZTtcblxuICBwdWJsaWMgc3RhdGljIGdldCBMZXNrKCk6IFNlcVBhbGV0dGUge1xuICAgIGlmICh0aGlzLmxlc2sgPT09IHZvaWQgMCkge1xuICAgICAgdGhpcy5sZXNrID0gdGhpcy5tYWtlUGFsZXR0ZShbXG4gICAgICAgIFtbJ0cnLCAnQScsICdTJywgJ1QnXSwgJ29yYW5nZSddLFxuICAgICAgICBbWydDJywgJ1YnLCAnSScsICdMJywgJ1AnLCAnRicsICdZJywgJ00nLCAnVyddLCAnYWxsX2dyZWVuJ10sXG4gICAgICAgIFtbJ04nLCAnUScsICdIJ10sICdtYWdlbnRhJ10sXG4gICAgICAgIFtbJ0QnLCAnRSddLCAncmVkJ10sXG4gICAgICAgIFtbJ0snLCAnUiddLCAnYWxsX2JsdWUnXSxcbiAgICAgIF0sIGZhbHNlLCBBbWlub2FjaWRzUGFsZXR0ZXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sZXNrO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ3Jva0dyb3VwczogU2VxUGFsZXR0ZTtcblxuICBwdWJsaWMgc3RhdGljIGdldCBHcm9rR3JvdXBzKCk6IFNlcVBhbGV0dGUge1xuICAgIGlmICh0aGlzLmdyb2tHcm91cHMgPT09IHZvaWQgMCkge1xuICAgICAgdGhpcy5ncm9rR3JvdXBzID0gdGhpcy5tYWtlUGFsZXR0ZShbXG4gICAgICAgIFtbJ0MnLCAnVSddLCAneWVsbG93J10sXG4gICAgICAgIFtbJ0cnLCAnUCddLCAncmVkJ10sXG4gICAgICAgIFtbJ0EnLCAnVicsICdJJywgJ0wnLCAnTScsICdGJywgJ1knLCAnVyddLCAnYWxsX2dyZWVuJ10sXG4gICAgICAgIFtbJ1InLCAnSCcsICdLJ10sICdsaWdodF9ibHVlJ10sXG4gICAgICAgIFtbJ0QnLCAnRSddLCAnZGFya19ibHVlJ10sXG4gICAgICAgIFtbJ1MnLCAnVCcsICdOJywgJ1EnXSwgJ29yYW5nZSddLFxuICAgICAgXSwgZmFsc2UsIEFtaW5vYWNpZHNQYWxldHRlcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdyb2tHcm91cHM7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByYXNNb2w6IFNlcVBhbGV0dGU7XG5cbiAgcHVibGljIHN0YXRpYyBnZXQgUmFzTW9sKCk6IFNlcVBhbGV0dGUge1xuICAgIGlmICh0aGlzLnJhc01vbCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aGlzLnJhc01vbCA9IG5ldyBBbWlub2FjaWRzUGFsZXR0ZXMoe1xuICAgICAgICAvLyBodHRwOi8vYWNjZXMuZW5zLWx5b24uZnIvYmlvdGljL3Jhc3RvcC9oZWxwL2NvbG91ci5odG1cbiAgICAgICAgJ0QnOiAnI0U2MEEwQScsIC8vIGFzcCwgYXNwYXJ0aWMgYWNpZCwgYXNwXG4gICAgICAgICdFJzogJyNFNjBBMEEnLCAvLyBnbHUsIGdsdXRhbWljIGFjaWRcbiAgICAgICAgJ0MnOiAnI0U2RTYwMCcsIC8vIGN5cywgY3lzdGVpbmVcbiAgICAgICAgJ00nOiAnI0U2RTYwMCcsIC8vIG1ldCwgbWV0aGlvbmluZVxuICAgICAgICAnSyc6ICcjMTQ1QUZGJywgLy8gbHlzLCBseXNpbmVcbiAgICAgICAgJ1InOiAnIzE0NUFGRicsIC8vIGFyZywgYXJnaW5pbmVcbiAgICAgICAgJ1MnOiAnI0ZBOTYwMCcsIC8vIHNlciwgc2VyaW5lXG4gICAgICAgICdUJzogJyNGQTk2MDAnLCAvLyB0aHIsIHRocmVvbmluZVxuICAgICAgICAnRic6ICcjMzIzMkFBJywgLy8gcGhlLCBwaGVueWxhbGFuaW5lXG4gICAgICAgICdZJzogJyMzMjMyQUEnLCAvLyB0eXIsIHR5cm9zaW5lXG4gICAgICAgICdOJzogJyMwMERDREMnLCAvLyBhc24sIGFzcGFyYWdpbmVcbiAgICAgICAgJ1EnOiAnIzAwRENEQycsIC8vIGdsbiwgZ2x1dGFtaW5lXG4gICAgICAgICdHJzogJyNFQkVCRUInLCAvLyBnbHksIGdseWNpbmVcbiAgICAgICAgJ0wnOiAnIzBGODIwRicsIC8vIGxldSwgbGV1Y2luZVxuICAgICAgICAnVic6ICcjMEY4MjBGJywgLy8gdmFsLCB2YWxpbmVcbiAgICAgICAgJ0knOiAnIzBGODIwRicsIC8vIGlsZSwgaXNvbGV1Y2luZVxuICAgICAgICAnQSc6ICcjQzhDOEM4JywgLy8gYWxhLCBhbGFuaW5lXG4gICAgICAgICdXJzogJyNCNDVBQjQnLCAvLyB0cnAsIHRyeXB0b3BoYW5cbiAgICAgICAgJ0gnOiAnIzgyODJEMicsIC8vIGhpcywgaGlzdGlkaW5lXG4gICAgICAgICdQJzogJyNEQzk2ODInLCAvLyBwcm8sIHByb2xpbmVcbiAgICAgICAgJ290aGVycyc6ICcjQkVBMDZFJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yYXNNb2w7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0KG06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVzTSA9IG0gaW4gQW1pbm9hY2lkc1BhbGV0dGVzLmFhU3lub255bXMgPyBBbWlub2FjaWRzUGFsZXR0ZXMuYWFTeW5vbnltc1ttXSA6IG07XG4gICAgY29uc3QgcmVzID0gc3VwZXIuZ2V0KHJlc00pO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKiogT25seSBzb21lIG9mIHRoZSBzeW5vbnltcy4gVGhlc2Ugd2VyZSBvYnRhaW5lZCBmcm9tIHRoZSBjbHVzdGVyZWQgb2xpZ29wZXB0aWRlIGRhdGFzZXQuICovXG4gIHByaXZhdGUgc3RhdGljIGFhU3lub255bXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICdNZU5sZSc6ICdMJywgLy8gTmxlIC0gbm9ybGV1Y2luZVxuICAgICdNZUEnOiAnQScsXG4gICAgJ01lRyc6ICdHJyxcbiAgICAnTWVGJzogJ0YnLFxuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgQW1pbm9hY2lkcyB7XG4gIHN0YXRpYyByZWFkb25seSBTZW1UeXBlOiBzdHJpbmcgPSAnQW1pbm9hY2lkcyc7XG5cbiAgc3RhdGljIHJlYWRvbmx5IFNlbVR5cGVNdWx0aXBsZUFsaWdubWVudDogc3RyaW5nID0gJ0FtaW5vYWNpZHNNdWx0aXBsZUFsaWdubWVudCc7XG5cbiAgc3RhdGljIHVuZGVmaW5lZENvbG9yID0gJ3JnYigxMDAsMTAwLDEwMCknO1xuXG4gIHB1YmxpYyBzdGF0aWMgTmFtZXM6IFN0cmluZ0RpY3Rpb25hcnkgPSB7XG4gICAgJ0cnOiAnR2x5Y2luZScsXG4gICAgJ0wnOiAnTGV1Y2luZScsXG4gICAgJ1knOiAnVHlyb3NpbmUnLFxuICAgICdTJzogJ1NlcmluZScsXG4gICAgJ0UnOiAnR2x1dGFtaWMgYWNpZCcsXG4gICAgJ1EnOiAnR2x1dGFtaW5lJyxcbiAgICAnRCc6ICdBc3BhcnRpYyBhY2lkJyxcbiAgICAnTic6ICdBc3BhcmFnaW5lJyxcbiAgICAnRic6ICdQaGVueWxhbGFuaW5lJyxcbiAgICAnQSc6ICdBbGFuaW5lJyxcbiAgICAnSyc6ICdMeXNpbmUnLFxuICAgICdSJzogJ0FyZ2luaW5lJyxcbiAgICAnSCc6ICdIaXN0aWRpbmUnLFxuICAgICdDJzogJ0N5c3RlaW5lJyxcbiAgICAnVic6ICdWYWxpbmUnLFxuICAgICdQJzogJ1Byb2xpbmUnLFxuICAgICdXJzogJ1RyeXB0b3BoYW4nLFxuICAgICdJJzogJ0lzb2xldWNpbmUnLFxuICAgICdNJzogJ01ldGhpb25pbmUnLFxuICAgICdUJzogJ1RocmVvbmluZScsXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBBQVNtaWxlczogU3RyaW5nRGljdGlvbmFyeSA9IHtcbiAgICAnRyc6ICdOQ0MoPU8pTycsXG4gICAgJ0wnOiAnTltDQEhdKENDKEMpQylDKD1PKU8nLFxuICAgICdZJzogJ05DKENDMT1DQz1DKE8pQz1DMSlDKD1PKU8nLFxuICAgICdTJzogJ05DKENPKUMoPU8pTycsXG4gICAgJ0UnOiAnTltDQEBIXShDQ0MoTyk9TylDKD1PKU8nLFxuICAgICdRJzogJ05bQ0BASF0oQ0NDKE4pPU8pQyg9TylPJyxcbiAgICAnRCc6ICdOW0NAQEhdKENDKE8pPU8pQyg9TylPJyxcbiAgICAnTic6ICdOW0NAQEhdKENDKE4pPU8pQyg9TylPJyxcbiAgICAnRic6ICdOQyhDQzE9Q0M9Q0M9QzEpQyg9TylPJyxcbiAgICAnQSc6ICdOW0NASF0oQylDKD1PKU8nLFxuICAgICdLJzogJ05DKENDQ0NOKUMoPU8pTycsXG4gICAgJ1InOiAnTltDQEhdKENDQ05DKD1OKUMpQyg9TylPJyxcbiAgICAnSCc6ICdOQyhDQzE9Q049Q1tOXTEpQyg9TylPJyxcbiAgICAnQyc6ICdOW0NAQEhdKENTKUMoPU8pTycsXG4gICAgJ1YnOiAnTkMoQyhDKUMpQyg9TylPJyxcbiAgICAnUCc6ICdOKENDQzEpQzFDKD1PKU8nLFxuICAgICdXJzogJ05bQ0BASF0oQ2MxYzJjY2NjYzJuKFtIXSljMSlDKD1PKU8nLFxuICAgICdJJzogJ05bQ0BIXShbQ0BIXShDKUNDKUMoPU8pTycsXG4gICAgJ00nOiAnTkMoQ0NTQylDKD1PKU8nLFxuICAgICdUJzogJ05DKEMoTylDKUMoPU8pTycsXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBBQVNtaWxlc1RydW5jYXRlZDogU3RyaW5nRGljdGlvbmFyeSA9IHtcbiAgICAnRyc6ICcqQyonLFxuICAgICdMJzogJ0NDKEMpQ1tDQEhdKCopKicsXG4gICAgJ1knOiAnQzE9Q0MoPUNDPUMxQ0MoKikqKU8nLFxuICAgICdTJzogJ09DQygqKUMqJyxcbiAgICAnRSc6ICcqW0NAQEhdKENDQyhPKT1PKSonLFxuICAgICdRJzogJypOW0NAQEhdKENDQyhOKT1PKSonLFxuICAgICdEJzogJypbQ0BASF0oQ0MoTyk9TykqJyxcbiAgICAnTic6ICcqW0NAQEhdKENDKE4pPU8pKicsXG4gICAgJ0YnOiAnQzE9Q0M9QyhDPUMxKUNDKCopKicsXG4gICAgJ0EnOiAnQ1tDQEhdKCopKicsXG4gICAgJ0snOiAnQyhDQ04pQ0MoKikqJyxcbiAgICAnUic6ICcqW0NASF0oQ0NDTkMoPU4pQykqJyxcbiAgICAnSCc6ICdDMT1DKE5DPU4xKUNDKCopKicsXG4gICAgJ0MnOiAnQyhbQ0BASF0oKikqKVMnLFxuICAgICdWJzogJ0NDKEMpQygqKSonLFxuICAgICdQJzogJ0MxQ0NOKCopQzEqJyxcbiAgICAnVyc6ICcqW0NAQEhdKENjMWMyY2NjY2MybihbSF0pYzEpKicsXG4gICAgJ0knOiAnQ0NbQ0BIXShDKVtDQEhdKCopKicsXG4gICAgJ00nOiAnQ1NDQ0MoKikqJyxcbiAgICAnVCc6ICdDQyhPKUMoKikqJyxcbiAgfTtcblxuICAvKiogVE9ETzogRnVsbD9cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgQUFGdWxsTmFtZXM6IFN0cmluZ0RpY3Rpb25hcnkgPSB7XG4gICAgJ0FsYSc6ICdBJyxcbiAgICAnQXJnJzogJ1InLFxuICAgICdBc24nOiAnTicsXG4gICAgJ0FzcCc6ICdEJyxcbiAgICAnQ3lzJzogJ0MnLFxuICAgICdHbG4nOiAnUScsXG4gICAgJ0dsdSc6ICdFJyxcbiAgICAnR2x5JzogJ0cnLFxuICAgICdIaXMnOiAnSCcsXG4gICAgJ0lsZSc6ICdJJyxcbiAgICAnTGV1JzogJ0wnLFxuICAgICdMeXMnOiAnSycsXG4gICAgJ01ldCc6ICdNJyxcbiAgICAnUGhlJzogJ0YnLFxuICAgICdQcm8nOiAnUCcsXG4gICAgJ1Nlcic6ICdTJyxcbiAgICAnVGhyJzogJ1QnLFxuICAgICdUcnAnOiAnVycsXG4gICAgJ1R5cic6ICdZJyxcbiAgICAnVmFsJzogJ1YnLFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0UGFsZXR0ZShzY2hlbWU6IHN0cmluZyA9ICdncm9rJyk6IFNlcVBhbGV0dGUge1xuICAgIHN3aXRjaCAoc2NoZW1lKSB7XG4gICAgY2FzZSAnZ3Jvayc6XG4gICAgICByZXR1cm4gQW1pbm9hY2lkc1BhbGV0dGVzLkdyb2tHcm91cHM7XG4gICAgY2FzZSAnbGVzayc6XG4gICAgICByZXR1cm4gQW1pbm9hY2lkc1BhbGV0dGVzLkxlc2s7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2hlbVBhbGV0dGU6IHNjaGVtZSBcXGAke3NjaGVtZX1cXGAgZG9lcyBub3QgZXhpc3RgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBkaXZpZGVkIGFtaW5vIGFjaWQgd2l0aCBpdHMgY29udGVudCBpbiB0aGUgYnJhY2tldCwgaWYgdGhlIGNvbnRlbnQgaXMgbnVtYmVyLCB0aGVuIGl0cyBvbWl0dGVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjIHJhdyBhbWlub1xuICAgKiBAcmV0dXJuIHtbc3RyaW5nLCBzdHJpbmddfSBvdXRlciBhbmQgaW5uZXIgY29udGVudFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRJbm5lck91dGVyKGM6IHN0cmluZyk6IFtzdHJpbmcsIHN0cmluZ10ge1xuICAgIGxldCBpc0lubmVyID0gMDtcbiAgICBsZXQgaW5uZXIgPSAnJztcbiAgICBsZXQgb3V0ZXIgPSAnJztcblxuICAgIGZvciAoY29uc3QgY2hhciBvZiBjKSB7XG4gICAgICBpZiAoY2hhciA9PSAnKCcpXG4gICAgICAgIGlzSW5uZXIrKztcbiAgICAgIGVsc2UgaWYgKGNoYXIgPT0gJyknKVxuICAgICAgICBpc0lubmVyLS07XG4gICAgICBlbHNlIGlmIChpc0lubmVyKVxuICAgICAgICBpbm5lciArPSBjaGFyO1xuICAgICAgZWxzZVxuICAgICAgICBvdXRlciArPSBjaGFyO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOYU4ocGFyc2VJbnQoaW5uZXIpKSA/IFtvdXRlciwgJyddIDogW291dGVyLCBpbm5lcl07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldENvbG9yQUFQaXZvdChtb25vbWVyOiBzdHJpbmcgPSAnJywgc2NoZW1lOiAnZ3JvaycgPSAnZ3JvaycpOiBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZywgbnVtYmVyXSB7XG4gICAgLy9jb25zdCBjaGVtUGFsZXR0ZUluc3RhbmNlID0gQUFQYWxldHRlcy5Hcm9rR3JvdXBzKCk7XG4gICAgY29uc3QgY2hlbVBhbGV0dGVJbnN0YW5jZSA9IHRoaXMuZ2V0UGFsZXR0ZShzY2hlbWUpO1xuICAgIGxldCBbb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXJdID0gdGhpcy5nZXRJbm5lck91dGVyKG1vbm9tZXIpO1xuICAgIG91dGVyTW9ub21lciA9IChvdXRlck1vbm9tZXIubGVuZ3RoID4gNiA/IGAke291dGVyTW9ub21lci5zbGljZSgwLCAzKX0uLi5gIDogb3V0ZXJNb25vbWVyKTtcbiAgICBpbm5lck1vbm9tZXIgPSAoaW5uZXJNb25vbWVyLmxlbmd0aCA+IDYgPyBgJHtpbm5lck1vbm9tZXIuc2xpY2UoMCwgMyl9Li4uYCA6IGlubmVyTW9ub21lcik7XG5cbiAgICBpZiAobW9ub21lci5sZW5ndGggPT0gMSB8fCBtb25vbWVyWzFdID09ICcoJykge1xuICAgICAgY29uc3QgYW1pbm8gPSBtb25vbWVyWzBdPy50b1VwcGVyQ2FzZSgpITtcbiAgICAgIHJldHVybiBhbWlubyBpbiBjaGVtUGFsZXR0ZUluc3RhbmNlID9cbiAgICAgICAgW2NoZW1QYWxldHRlSW5zdGFuY2UuZ2V0KGFtaW5vKSwgYW1pbm8sIGlubmVyTW9ub21lciwgMV0gOlxuICAgICAgICBbdGhpcy51bmRlZmluZWRDb2xvciwgb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXIsIDFdO1xuICAgIH1cblxuICAgIGlmIChtb25vbWVyWzBdID09ICdkJyAmJiBtb25vbWVyWzFdISBpbiBjaGVtUGFsZXR0ZUluc3RhbmNlKSB7XG4gICAgICBpZiAobW9ub21lci5sZW5ndGggPT0gMiB8fCBtb25vbWVyWzJdID09ICcoJykge1xuICAgICAgICBjb25zdCBhbWlubyA9IG1vbm9tZXJbMV0/LnRvVXBwZXJDYXNlKCkhO1xuICAgICAgICByZXR1cm4gYW1pbm8gaW4gY2hlbVBhbGV0dGVJbnN0YW5jZSA/XG4gICAgICAgICAgW2NoZW1QYWxldHRlSW5zdGFuY2UuZ2V0KGFtaW5vKSwgYW1pbm8sIGlubmVyTW9ub21lciwgMl0gOlxuICAgICAgICAgIFt0aGlzLnVuZGVmaW5lZENvbG9yLCBvdXRlck1vbm9tZXIsIGlubmVyTW9ub21lciwgMl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vbm9tZXIuc3Vic3RyaW5nKDAsIDMpIGluIHRoaXMuQUFGdWxsTmFtZXMpIHtcbiAgICAgIGlmIChtb25vbWVyLmxlbmd0aCA9PSAzIHx8IG1vbm9tZXJbM10gPT0gJygnKSB7XG4gICAgICAgIGNvbnN0IGFtaW5vID0gdGhpcy5BQUZ1bGxOYW1lc1ttb25vbWVyLnN1YnN0cmluZygwLCAzKV07XG4gICAgICAgIHJldHVybiBhbWlubyBpbiBjaGVtUGFsZXR0ZUluc3RhbmNlID9cbiAgICAgICAgICBbY2hlbVBhbGV0dGVJbnN0YW5jZS5nZXQoYW1pbm8pLCBhbWlubywgaW5uZXJNb25vbWVyLCAzXSA6XG4gICAgICAgICAgW3RoaXMudW5kZWZpbmVkQ29sb3IsIG91dGVyTW9ub21lciwgaW5uZXJNb25vbWVyLCAzXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9ub21lclswXT8udG9Mb3dlckNhc2UoKSA9PSBtb25vbWVyWzBdKSB7XG4gICAgICBpZiAobW9ub21lci5zdWJzdHJpbmcoMSwgMykgaW4gdGhpcy5BQUZ1bGxOYW1lcykge1xuICAgICAgICBpZiAobW9ub21lci5sZW5ndGggPT0gNCB8fCBtb25vbWVyWzRdID09ICcoJykge1xuICAgICAgICAgIGNvbnN0IGFtaW5vID0gdGhpcy5BQUZ1bGxOYW1lc1ttb25vbWVyLnN1YnN0cmluZygxLCAzKV07XG4gICAgICAgICAgcmV0dXJuIGFtaW5vIGluIGNoZW1QYWxldHRlSW5zdGFuY2UgP1xuICAgICAgICAgICAgW2NoZW1QYWxldHRlSW5zdGFuY2UuZ2V0KGFtaW5vKSwgYW1pbm8sIGlubmVyTW9ub21lciwgNF0gOlxuICAgICAgICAgICAgW3RoaXMudW5kZWZpbmVkQ29sb3IsIG91dGVyTW9ub21lciwgaW5uZXJNb25vbWVyLCA0XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbdGhpcy51bmRlZmluZWRDb2xvciwgb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXIsIDBdO1xuICB9XG59XG4iXX0=
|
|
238
|
+
//# sourceMappingURL=aminoacids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aminoacids.js","sourceRoot":"","sources":["aminoacids.ts"],"names":[],"mappings":"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"}
|
package/src/consts/index.js
CHANGED
|
@@ -8,4 +8,4 @@
|
|
|
8
8
|
// const TreeTypes = pcgl.TreeTypes;
|
|
9
9
|
//
|
|
10
10
|
// export {Shapes, TreeTypes};
|
|
11
|
-
//# sourceMappingURL=
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAAA,uDAAuD;AACvD,EAAE;AACF,eAAe;AACf,8BAA8B;AAC9B,EAAE;AACF,eAAe;AACf,oCAAoC;AACpC,EAAE;AACF,8BAA8B"}
|
|
@@ -138,4 +138,4 @@ export function getMonomerLibHelper() {
|
|
|
138
138
|
return res;
|
|
139
139
|
});
|
|
140
140
|
}
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub21lci11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1vbm9tZXItdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEseUNBQXlDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUUxQyxPQUFPLEVBQ1EsZ0JBQWdCLEVBQWlCLHFCQUFxQixFQUNuRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFDekQsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsV0FBVyxFQUFxQixNQUFNLHdCQUF3QixDQUFDO0FBSXZFLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUUxRyxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQWM7SUFDM0MsSUFBSSxZQUFZLEdBQUcsa0JBQWtCLENBQUM7SUFDdEMsTUFBTSxpQkFBaUIsR0FBOEIsRUFBRSxDQUFDO0lBQ3hELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxrQ0FBZ0IsQ0FBQztJQUN2QyxNQUFNLFlBQVksR0FBaUIsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzRCxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNuQyxJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUMzQixNQUFNLFFBQVEsR0FBRyxZQUFZ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Q0FBQztBQUNuQixDQUFDO0FBZUQsTUFBTSxVQUFnQixtQkFBbUI7O1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUMsQ0FBQyxDQUFDO1FBQzdFLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUUvRSxNQUFNLEdBQUcsR0FBc0IsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixFQUF1QixDQUFDO1FBQy9HLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcblxuaW1wb3J0IHtcbiAgSEVMTV9GSUVMRFMsIEhFTE1fQ09SRV9GSUVMRFMsIFJHUk9VUF9GSUVMRFMsIGpzb25TZGZNb25vbWVyTGliRGljdCxcbiAgTU9OT01FUl9FTkNPREVfTUFYLCBNT05PTUVSX0VOQ09ERV9NSU4sIFNERl9NT05PTUVSX05BTUVcbn0gZnJvbSAnLi4vdXRpbHMvY29uc3QnO1xuaW1wb3J0IHtnZXRTcGxpdHRlciwgU3BsaXR0ZXJGdW5jLCBUQUdTfSBmcm9tICcuLi91dGlscy9tYWNyb21vbGVjdWxlJztcbmltcG9ydCB7SU1vbm9tZXJMaWIsIE1vbm9tZXJ9IGZyb20gJy4uL3R5cGVzL2luZGV4JztcblxuXG5leHBvcnQgY29uc3QgZXhwZWN0ZWRNb25vbWVyRGF0YSA9IFsnc3ltYm9sJywgJ25hbWUnLCAnbW9sZmlsZScsICdyZ3JvdXBzJywgJ3BvbHltZXJUeXBlJywgJ21vbm9tZXJUeXBlJ107XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVNb25vbWVycyhjb2w6IERHLkNvbHVtbik6IERHLkNvbHVtbiB8IG51bGwge1xuICBsZXQgZW5jb2RlU3ltYm9sID0gTU9OT01FUl9FTkNPREVfTUlOO1xuICBjb25zdCBtb25vbWVyU3ltYm9sRGljdDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICBjb25zdCB1bml0cyA9IGNvbC50YWdzW0RHLlRBR1MuVU5JVFNdO1xuICBjb25zdCBzZXAgPSBjb2wuZ2V0VGFnKFRBR1Muc2VwYXJhdG9yKTtcbiAgY29uc3Qgc3BsaXR0ZXJGdW5jOiBTcGxpdHRlckZ1bmMgPSBnZXRTcGxpdHRlcih1bml0cywgc2VwKTtcbiAgY29uc3QgZW5jb2RlZFN0cmluZ0FycmF5ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sLmxlbmd0aDsgKytpKSB7XG4gICAgbGV0IGVuY29kZWRNb25vbWVyU3RyID0gJyc7XG4gICAgY29uc3QgbW9ub21lcnMgPSBzcGxpdHRlckZ1bmMoY29sLmdldChpKSk7XG4gICAgbW9ub21lcnMuZm9yRWFjaCgobSkgPT4ge1xuICAgICAgaWYgKCFtb25vbWVyU3ltYm9sRGljdFttXSkge1xuICAgICAgICBpZiAoZW5jb2RlU3ltYm9sID4gTU9OT01FUl9FTkNPREVfTUFYKSB7XG4gICAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcihgTm90IGVub3VnaCBzeW1ib2xzIHRvIGVuY29kZSBtb25vbWVyc2ApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIG1vbm9tZXJTeW1ib2xEaWN0W21dID0gZW5jb2RlU3ltYm9sO1xuICAgICAgICBlbmNvZGVTeW1ib2wrKztcbiAgICAgIH1cbiAgICAgIGVuY29kZWRNb25vbWVyU3RyICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KG1vbm9tZXJTeW1ib2xEaWN0W21dKTtcbiAgICB9KTtcbiAgICBlbmNvZGVkU3RyaW5nQXJyYXkucHVzaChlbmNvZGVkTW9ub21lclN0cik7XG4gIH1cbiAgcmV0dXJuIERHLkNvbHVtbi5mcm9tU3RyaW5ncygnZW5jb2RlZE1vbGVjdWxlcycsIGVuY29kZWRTdHJpbmdBcnJheSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2xmaWxlc0Zyb21TZXEoY29sOiBERy5Db2x1bW4sIG1vbm9tZXJzTGliT2JqZWN0OiBhbnlbXSk6IGFueVtdW10gfCBudWxsIHtcbiAgY29uc3QgdW5pdHMgPSBjb2wudGFnc1tERy5UQUdTLlVOSVRTXTtcbiAgY29uc3Qgc2VwID0gY29sLmdldFRhZygnc2VwYXJhdG9yJyk7XG4gIGNvbnN0IHNwbGl0dGVyRnVuYzogU3BsaXR0ZXJGdW5jID0gZ2V0U3BsaXR0ZXIodW5pdHMsIHNlcCk7XG4gIGNvbnN0IG1vbm9tZXJzRGljdCA9IGNyZWF0ZU1vbW9tZXJzTW9sRGljdChtb25vbWVyc0xpYk9iamVjdCk7XG4gIGNvbnN0IG1vbEZpbGVzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWFjcm9Nb2xlY3VsZSA9IGNvbC5nZXQoaSk7XG4gICAgY29uc3QgbW9ub21lcnMgPSBzcGxpdHRlckZ1bmMobWFjcm9Nb2xlY3VsZSk7XG4gICAgY29uc3QgbW9sRmlsZXNGb3JTZXEgPSBbXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vbm9tZXJzLmxlbmd0aDsgKytqKSB7XG4gICAgICBpZiAobW9ub21lcnNbal0pIHtcbiAgICAgICAgaWYgKCFtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSB7XG4gICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKGBNb25vbWVyICR7bW9ub21lcnNbal19IGlzIG1pc3NpbmcgaW4gSEVMTSBsaWJyYXJ5LiBTdHJ1Y3R1cmUgY2Fubm90IGJlIGNyZWF0ZWRgKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyB3aGF0IGlzIHRoZSByZWFzb24gb2YgZG91YmxlIGNvbnZlcnNpb24/XG4gICAgICAgIG1vbEZpbGVzRm9yU2VxLnB1c2goSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBtb2xGaWxlcy5wdXNoKG1vbEZpbGVzRm9yU2VxKTtcbiAgfVxuICByZXR1cm4gbW9sRmlsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2xmaWxlc0Zyb21TaW5nbGVTZXEoY2VsbDogREcuQ2VsbCwgbW9ub21lcnNMaWJPYmplY3Q6IGFueVtdKTogYW55W11bXSB8IG51bGwge1xuICBjb25zdCB1bml0cyA9IGNlbGwuY29sdW1uLnRhZ3NbREcuVEFHUy5VTklUU107XG4gIGNvbnN0IHNlcCA9IGNlbGwuY29sdW1uIS5nZXRUYWcoJ3NlcGFyYXRvcicpO1xuICBjb25zdCBzcGxpdHRlckZ1bmM6IFNwbGl0dGVyRnVuYyA9IGdldFNwbGl0dGVyKHVuaXRzLCBzZXApO1xuICBjb25zdCBtb25vbWVyc0RpY3QgPSBjcmVhdGVNb21vbWVyc01vbERpY3QobW9ub21lcnNMaWJPYmplY3QpO1xuICBjb25zdCBtb2xGaWxlcyA9IFtdO1xuICBjb25zdCBtYWNyb01vbGVjdWxlID0gY2VsbC52YWx1ZTtcbiAgY29uc3QgbW9ub21lcnMgPSBzcGxpdHRlckZ1bmMobWFjcm9Nb2xlY3VsZSk7XG4gIGNvbnN0IG1vbEZpbGVzRm9yU2VxID0gW107XG4gIGZvciAobGV0IGogPSAwOyBqIDwgbW9ub21lcnMubGVuZ3RoOyArK2opIHtcbiAgICBpZiAobW9ub21lcnNbal0pIHtcbiAgICAgIGlmICghbW9ub21lcnNEaWN0W21vbm9tZXJzW2pdXSkge1xuICAgICAgICBncm9rLnNoZWxsLndhcm5pbmcoYE1vbm9tZXIgJHttb25vbWVyc1tqXX0gaXMgbWlzc2luZyBpbiBIRUxNIGxpYnJhcnkuIFN0cnVjdHVyZSBjYW5ub3QgYmUgY3JlYXRlZGApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIG1vbEZpbGVzRm9yU2VxLnB1c2goSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSkpO1xuICAgIH1cbiAgfVxuICBtb2xGaWxlcy5wdXNoKG1vbEZpbGVzRm9yU2VxKTtcbiAgcmV0dXJuIG1vbEZpbGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9tb21lcnNNb2xEaWN0KGxpYjogYW55W10pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9IHtcbiAgY29uc3QgZGljdDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBhbnkgfSA9IHt9O1xuICBsaWIuZm9yRWFjaCgoaXQpID0+IHtcbiAgICBpZiAoaXRbJ3BvbHltZXJUeXBlJ10gPT09ICdQRVBUSURFJykge1xuICAgICAgY29uc3QgbW9ub21lck9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgSEVMTV9DT1JFX0ZJRUxEUy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBtb25vbWVyT2JqZWN0W2ZpZWxkXSA9IGl0W2ZpZWxkXTtcbiAgICAgIH0pO1xuICAgICAgZGljdFtpdFtIRUxNX0ZJRUxEUy5TWU1CT0xdXSA9IG1vbm9tZXJPYmplY3Q7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRpY3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKc29uTW9ub21lckxpYkZyb21TZGYodGFibGU6IERHLkRhdGFGcmFtZSk6IGFueSB7XG4gIGNvbnN0IHJlc3VsdExpYiA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlLnJvd0NvdW50OyBpKyspIHtcbiAgICBjb25zdCBtb25vbWVyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9ID0ge307XG4gICAgT2JqZWN0LmtleXMoanNvblNkZk1vbm9tZXJMaWJEaWN0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChrZXkgPT09IEhFTE1fRklFTERTLlNZTUJPTCkge1xuICAgICAgICBjb25zdCBtb25vbWVyU3ltYm9sID0gdGFibGUuZ2V0KGpzb25TZGZNb25vbWVyTGliRGljdFtrZXldLCBpKTtcbiAgICAgICAgbW9ub21lcltrZXldID0gbW9ub21lclN5bWJvbCA9PT0gJy4nID8gdGFibGUuZ2V0KFNERl9NT05PTUVSX05BTUUsIGkpIDogbW9ub21lclN5bWJvbDtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBIRUxNX0ZJRUxEUy5SR1JPVVBTKSB7XG4gICAgICAgIGNvbnN0IHJncm91cHMgPSB0YWJsZS5nZXQoanNvblNkZk1vbm9tZXJMaWJEaWN0W2tleV0sIGkpLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgY29uc3QganNvblJncm91cHM6IGFueVtdID0gW107XG4gICAgICAgIHJncm91cHMuZm9yRWFjaCgoZzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgcmdyb3VwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9ID0ge307XG4gICAgICAgICAgY29uc3QgYWx0QXRvbSA9IGcuc3Vic3RyaW5nKGcubGFzdEluZGV4T2YoJ10nKSArIDEpO1xuICAgICAgICAgIGNvbnN0IHJhZGljYWxOdW0gPSBnLm1hdGNoKC9cXFtSKFxcZCspXFxdLykhWzFdO1xuICAgICAgICAgIHJncm91cFtSR1JPVVBfRklFTERTLkNBUF9HUk9VUF9TTUlMRVNdID0gYWx0QXRvbSA9PT0gJ0gnID8gYFsqOiR7cmFkaWNhbE51bX1dW0hdYCA6IGBPWyo6JHtyYWRpY2FsTnVtfV1gO1xuICAgICAgICAgIHJncm91cFtSR1JPVVBfRklFTERTLkFMVEVSX0lEXSA9IGFsdEF0b20gPT09ICdIJyA/IGBSJHtyYWRpY2FsTnVtfS1IYCA6IGBSJHtyYWRpY2FsTnVtfS1PSGA7XG4gICAgICAgICAgcmdyb3VwW1JHUk9VUF9GSUVMRFMuQ0FQX0dST1VQX05BTUVdID0gYWx0QXRvbSA9PT0gJ0gnID8gYEhgIDogYE9IYDtcbiAgICAgICAgICByZ3JvdXBbUkdST1VQX0ZJRUxEUy5MQUJFTF0gPSBgUiR7cmFkaWNhbE51bX1gO1xuICAgICAgICAgIGpzb25SZ3JvdXBzLnB1c2gocmdyb3VwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vbm9tZXJba2V5XSA9IGpzb25SZ3JvdXBzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKChqc29uU2RmTW9ub21lckxpYkRpY3QgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBhbnkgfSlba2V5XSlcbiAgICAgICAgICBtb25vbWVyW2tleV0gPSB0YWJsZS5nZXQoKGpzb25TZGZNb25vbWVyTGliRGljdCBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9KVtrZXldLCBpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHRMaWIucHVzaChtb25vbWVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0TGliO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb25vbWVyTGliSGVscGVyIHtcbiAgLyoqIFNpbmdsZXRvbiBtb25vbWVyIGxpYnJhcnkgKi9cbiAgZ2V0QmlvTGliKCk6IElNb25vbWVyTGliO1xuXG4gIC8qKiAoUmUpTG9hZHMgbGlicmFyaWVzIGJhc2VkIG9uIHNldHRpbmdzIGluIHVzZXIgc3RvcmFnZSB7QGxpbmsgTElCX1NUT1JBR0VfTkFNRX0gdG8gc2luZ2xldG9uLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlbG9hZCBDbGVhbiB7QGxpbmsgbW9ub21lckxpYn0gYmVmb3JlIGxvYWQgbGlicmFyaWVzIFtmYWxzZV1cbiAgICovXG4gIGxvYWRMaWJyYXJpZXMocmVsb2FkPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqIFJlYWRzIGxpYnJhcnkgZnJvbSBmaWxlIHNoYXJlcywgaGFuZGxlcyAuanNvbiBhbmQgLnNkZiAqL1xuICByZWFkTGlicmFyeShwYXRoOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPElNb25vbWVyTGliPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE1vbm9tZXJMaWJIZWxwZXIoKTogUHJvbWlzZTxJTW9ub21lckxpYkhlbHBlcj4ge1xuICBjb25zdCBmdW5jTGlzdCA9IERHLkZ1bmMuZmluZCh7cGFja2FnZTogJ0JpbycsIG5hbWU6ICdnZXRNb25vbWVyTGliSGVscGVyJ30pO1xuICBpZiAoZnVuY0xpc3QubGVuZ3RoID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcignUGFja2FnZSBcIkJpb1wiIG11c3QgYmUgaW5zdGFsbGVyIGZvciBNb25vbWVyTGlicmFyeUhlbHBlci4nKTtcblxuICBjb25zdCByZXM6IElNb25vbWVyTGliSGVscGVyID0gKGF3YWl0IGZ1bmNMaXN0WzBdLnByZXBhcmUoKS5jYWxsKCkpLmdldE91dHB1dFBhcmFtVmFsdWUoKSBhcyBJTW9ub21lckxpYkhlbHBlcjtcbiAgcmV0dXJuIHJlcztcbn1cbiJdfQ==
|
|
141
|
+
//# sourceMappingURL=monomer-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monomer-utils.js","sourceRoot":"","sources":["monomer-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,4 +17,4 @@ export class MonomerWorks {
|
|
|
17
17
|
return sequenceToMolFileST(monomers, this.monomerLib.getMonomerMolsByType(polymerType));
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
//# sourceMappingURL=
|
|
20
|
+
//# sourceMappingURL=monomer-works.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monomer-works.js","sourceRoot":"","sources":["monomer-works.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,mBAAmB,EAAC,MAAM,mBAAmB,CAAC;AAetD,MAAM,OAAO,YAAY;IAGvB,8CAA8C;IAE9C,YAAY,UAAuB,CAAA,yCAAyC;QAC1E,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,2CAA2C;IAC7C,CAAC;IAED,qCAAqC;IAC9B,uBAAuB,CAAC,WAAmB,EAAE,WAAmB;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACrE,IAAI,OAAO;YACT,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,UAAU;QAEpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iGAAiG;IAC1F,cAAc,CAAC,QAAkB,EAAE,WAAmB;QAC3D,OAAO,mBAAmB,CACxB,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,WAAW,CAAE,CAC7D,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1279,4 +1279,4 @@ function getResultingAtomBondCountsST(monomerSeq, monomersDict, alphabet, polyme
|
|
|
1279
1279
|
}
|
|
1280
1280
|
return { atomCount, bondCount };
|
|
1281
1281
|
}
|
|
1282
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tYXRvbWljLWxldmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidG8tYXRvbWljLWxldmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLHlGQUF5RjtBQUN6RixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFjLGdCQUFnQixFQUE0RCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hILE9BQU8sRUFBVyxXQUFXLEVBQStCLE1BQU0sd0JBQXdCLENBQUM7QUFDM0YsdURBQXVEO0FBQ3ZELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRTlELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQVF4RSxzQ0FBc0M7QUFDdEMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQztBQUM5QixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFFekIsd0RBQXdEO0FBQ3hELE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNLHFCQUFxQixHQUFHLHNDQUFzQyxDQUFDO0FBQ3JFLE1BQU0sc0JBQXNCLEdBQUcsMkNBQTJDLENBQUM7QUFDM0UsTUFBTSxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztBQUNuRCxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDO0FBQy9DLE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7QUFDL0MsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUM7QUFDMUMsTUFBTSxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztBQUNuRCxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDO0FBQy9DLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUM7QUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUMvQyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFDaEMsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUM7QUFDdEMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDO0FBRTNCLE1BQU0sZ0JBQWdCLEdBQUcsS0FBTSxDQUFDLENBQUMsbUZBQW1GO0FBRXBILHlEQUF5RDtBQUN6RCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUV0QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBNkVyQixvREFBb0Q7QUFFcEQsa0hBQWtIO0FBQ2xILE1BQU0sVUFBZ0IsY0FBYyxDQUNsQyxFQUFnQixFQUFFLFdBQThCLEVBQUUsZUFBc0I7O1FBRXhFLHFDQUFxQztRQUNyQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsbUVBQW1FLENBQUMsQ0FBQztZQUN4RixPQUFPO1NBQ1I7UUFFRCxJQUFJLFdBQVcsQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ2hCLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhOzZDQUNHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FDN0QsQ0FBQztZQUNGLE9BQU87U0FDUjtRQUVELHNDQUFzQztRQUN0QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsK0JBQWtCLEVBQUU7WUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNyRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFDdEIsV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLHVDQUFxQixTQUFTLENBQUMsQ0FBQztTQUNoRTtRQUVELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLGdDQUFlLENBQUM7UUFFbkQsOERBQThEO1FBQzlELElBQUksV0FBVyxDQUFDO1FBQ2hCLDZFQUE2RTtRQUM3RSxJQUFJLFFBQVEsMkJBQWdCLElBQUksUUFBUSwyQkFBZ0IsRUFBRTtZQUN4RCxXQUFXLDRDQUE0QixDQUFDO1NBQ3pDO2FBQU0sSUFBSSxRQUFRLDZCQUFpQixJQUFJLFFBQVEsNkJBQWlCLEVBQUU7WUFDakUsV0FBVyxvQ0FBd0IsQ0FBQztTQUNyQzthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ2hCLHdCQUF3QixXQUFXLENBQUMsSUFBSSxlQUFlLFFBQVEsSUFBSSxDQUNwRSxDQUFDO1lBQ0YsT0FBTztTQUNSO1FBRUQsdURBQXVEO1FBQ3ZELHFFQUFxRTtRQUNyRSw4RUFBOEU7UUFDOUUsa0RBQWtEO1FBQ2xELE1BQU0sSUFBSSx3QkFBZ0IsQ0FBQztRQUUzQixNQUFNLHFCQUFxQixHQUFlLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sWUFBWSxHQUFHLE1BQU0sc0JBQXNCLENBQUMscUJBQXFCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqSCxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3hDLE1BQU0sYUFBYSxHQUFhLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hELEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUU7WUFDM0MsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRyxtQ0FBbUM7U0FDcEM7UUFFRCwwQkFBMEI7UUFDMUIsTUFBTSxJQUFJLEdBQUcsVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2pELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVoRSxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekQsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQUE7QUFFRDs7R0FFRztBQUNILFNBQVMsc0JBQXNCLENBQzdCLGVBQXNCLEVBQUUsV0FBOEIsRUFBRSxRQUFrQjtJQUUxRSxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0lBQ25DLGVBQWUsQ0FBQyxPQUFPLENBQ3JCLENBQUMsRUFBRSxFQUFFLEVBQUU7UUFDTCxJQUFJLEVBQUUsOENBQTBCLEtBQUssV0FBVyxFQUFFO1lBQ2hELElBQ0UsV0FBVyxzQ0FBMEI7Z0JBQ3JDLENBQUMsRUFBRSw4Q0FBMEIsNENBQTZCO29CQUN4RCxRQUFRLDZCQUFpQixJQUFJLEVBQUUsbUNBQW9CLEtBQUssV0FBVztvQkFDbkUsUUFBUSw2QkFBaUIsSUFBSSxFQUFFLG1DQUFvQixLQUFLLE1BQU07b0JBQzlELEVBQUUsbUNBQW9CLEtBQUssU0FBUyxDQUFDO2dCQUN2QyxXQUFXLDhDQUE4QjtvQkFDekMsRUFBRSw4Q0FBMEIsNENBQTZCLEVBQ3pEO2dCQUNBLE1BQU0sYUFBYSxHQUEyQixFQUFFLENBQUM7Z0JBQ2pELGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNqQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQztnQkFDSCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsbUNBQW9CLEVBQUUsYUFBYSxDQUFDLENBQUM7YUFDaEQ7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsNkRBQTZEO0FBQzdELFNBQVMsd0JBQXdCLENBQUMsV0FBOEI7SUFDOUQsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBZSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVuRCxpQ0FBaUM7SUFDakMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxNQUFNLGtDQUFnQixDQUFDO0lBQ3JELE1BQU0sWUFBWSxHQUFpQixXQUFXLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXBFLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUU7UUFDM0MsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyw2REFBNkQ7UUFDN0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDaEU7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7O21FQUVtRTtBQUNuRSxTQUFlLHNCQUFzQixDQUNuQyxxQkFBaUMsRUFBRSxlQUFzQixFQUFFLFdBQThCLEVBQUUsUUFBa0I7O1FBRTdHLHNEQUFzRDtRQUN0RCxNQUFNLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFFakQsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sb0JBQW9CLEdBQWtCO1lBQzFDLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQztRQUVGLDhEQUE4RDtRQUM5RCxzRUFBc0U7UUFDdEUsSUFBSSxXQUFXLHNDQUEwQixFQUFFO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBUSw2QkFBaUIsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU87Z0JBQ3ZCLGdCQUFnQixDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1NBQzVHO1FBRUQsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRTtZQUMzRCxNQUFNLFVBQVUsR0FBYSxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4RCxLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRTtnQkFDNUIsSUFBSSxHQUFHLEtBQUssRUFBRTtvQkFBRSxTQUFTLENBQUMsaUNBQWlDO2dCQUMzRCxJQUFJO29CQUNGLGdCQUFnQixDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQ3JELFdBQVcsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztpQkFDbkQ7Z0JBQUMsT0FBTyxHQUFRLEVBQUU7b0JBQ2pCLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsR0FBRyxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUM7b0JBQ25GLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixHQUFHLG1CQUFtQixNQUFNLEVBQUUsQ0FBQyxDQUFDLGlDQUFpQztvQkFDdEcsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDekI7YUFDRjtTQUNGO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUFBO0FBRUQsU0FBUywrQkFBK0IsQ0FBQyxRQUFrQjtJQUN6RCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzQixNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXhELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUUxQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs0Q0FDNEM7QUFDNUMsU0FBUyxzQkFBc0IsQ0FBQyxxQkFBMEM7SUFDeEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7SUFDakQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTVELEtBQUssTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFO1FBQzVCLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQyxDQUFDLGtCQUFrQjtRQUV0RSxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzRCwrQ0FBK0M7UUFDL0MsNEVBQTRFO1FBQzVFLHVCQUF1QjtRQUN2QixNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFOUMsTUFBTSxZQUFZLEdBQWEsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDO1FBRXhFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLDJCQUEyQjtRQUMzQiwwQkFBMEIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXBFLGFBQWE7UUFDYixxQ0FBcUM7UUFDckMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsb0JBQW9CLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVoRyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztLQUNyQztJQUNELDZCQUE2QjtJQUU3QixPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsMEVBQTBFO0FBQzFFLFNBQVMsZ0JBQWdCLENBQ3ZCLFlBQW1DLEVBQUUsR0FBVyxFQUNoRCxtQkFBcUMsRUFBRSxXQUFnQixFQUN2RCxXQUE4QixFQUFFLG9CQUFtQztJQUVuRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMxQixNQUFNLFdBQVcsR0FDZixXQUFXLENBQUMsR0FBRyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUN4RixJQUFJLFdBQVc7WUFDYixZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQzs7WUFFbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsR0FBRyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ2hGLHlCQUF5QjtLQUMxQjtBQUNILENBQUM7QUFFRDtvRUFDb0U7QUFDcEUsU0FBUyxXQUFXLENBQ2xCLGFBQXFCLEVBQUUsbUJBQXFDLEVBQzVELFdBQWdCLEVBQUUsV0FBOEIsRUFDaEQsb0JBQW1DO0lBRW5DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDM0MsT0FBTyxJQUFJLENBQUM7S0FDYjtTQUFNO1FBQ0wsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxTQUFTLHFDQUFxQixDQUFDLENBQUM7UUFDakUsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxxQ0FBcUIsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLFNBQVMscUNBQXFCLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2RyxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVsRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUV6RSxNQUFNLFlBQVksR0FBYSxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFFeEUsSUFBSSxXQUFXLDhDQUE4QixFQUFFO1lBQzdDLHlCQUF5QixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3pDO2FBQU0sRUFBRSxjQUFjO1lBQ3JCLElBQUksYUFBYSxLQUFLLE1BQU0sSUFBSSxhQUFhLEtBQUssV0FBVztnQkFDM0QsdUJBQXVCLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLENBQUM7aUJBQ3pELElBQUksYUFBYSxLQUFLLFNBQVM7Z0JBQ2xDLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDOztnQkFFMUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLENBQUM7U0FDOUQ7UUFFRCx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLGdDQUFnQztRQUNoQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFN0IsT0FBTyxZQUFZLENBQUM7S0FDckI7QUFDSCxDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FDaEMsV0FBOEIsRUFBRSxZQUFzQixFQUFFLGFBQXFCO0lBRTdFLHNFQUFzRTtJQUN0RSxJQUFJLFdBQVcsOENBQThCLEVBQUU7UUFDN0MsU0FBUyxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNyQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMvRDtTQUFNLEVBQUUsY0FBYztRQUNyQixJQUFJLGFBQWEsS0FBSyxNQUFNLElBQUksYUFBYSxLQUFLLFdBQVcsRUFBRTtZQUM3RCxZQUFZO1lBQ1osa0JBQWtCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQsdUNBQXVDO1lBQ3ZDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsMEJBQTBCO1lBQ25GLFNBQVMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDckMsMkJBQTJCO1lBQzNCLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELFlBQVk7WUFDWixrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RCwrQkFBK0I7WUFDL0Isa0JBQWtCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0Q7YUFBTSxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDdEMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakUsZ0JBQWdCLENBQ2QsWUFBWSxFQUNaLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQzdELENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzlELENBQUM7WUFDRixTQUFTLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3JDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9EO2FBQU0sRUFBRSxjQUFjO1lBQ3JCLGlFQUFpRTtTQUNsRTtLQUNGO0FBQ0gsQ0FBQztBQUVELGFBQWE7QUFDYixTQUFTLGtCQUFrQixDQUFDLEtBQVksRUFBRSxLQUFZLEVBQUUsU0FBb0IsRUFBRSxjQUFvQztJQUVoSCxNQUFNLElBQUksR0FBb0I7UUFDNUIsYUFBYSxFQUFFLElBQUk7UUFDbkIsV0FBVyxFQUFFLElBQUk7UUFDakIsYUFBYSxFQUFFLEVBQUU7UUFDakIsTUFBTSxFQUFFLEVBQUU7S0FDWCxDQUFDO0lBRUYsK0JBQStCO0lBQy9CLE1BQU0sWUFBWSxHQUFHLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxPQUFPLGNBQWMsS0FBSyxXQUFXLENBQUM7SUFFL0YsSUFBSSxZQUFZLEVBQUU7UUFDaEIsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVUsRUFBRSxjQUFlLENBQUMsQ0FBQztRQUN4RCxTQUFTLENBQUMsY0FBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ2xDO1NBQU0sRUFBRSxzQ0FBc0M7UUFDN0MsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNuQztJQUVELGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QixPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDtZQUNZO0FBQ1osTUFBTSxVQUFVLGNBQWMsQ0FBQyxhQUFvQjtJQUNqRCxtQ0FBbUM7SUFDbkMscUNBQXFDO0lBQ3JDLDZFQUE2RTtJQUM3RSxNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUM7SUFDcEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUU7UUFDL0IsSUFBSSxRQUFRLEdBQVcsR0FBRyx1REFBZ0MsQ0FBQztRQUUzRCwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLFFBQVE7WUFDWCxRQUFRLEdBQUcsR0FBRyxpRUFBMEMsQ0FBQztRQUMzRCxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRCxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVELHNEQUFzRDtBQUN0RCxTQUFTLG1CQUFtQixDQUMxQixLQUFZLEVBQUUsU0FBbUIsRUFBRSxjQUFtQztJQUV0RSxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksY0FBYztRQUN6QyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsNENBQTRDO0FBQ25HLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxjQUFtQyxFQUFFLElBQXFCO0lBQzNFLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDM0MsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLHlEQUF5RDtZQUNqRix1RUFBdUU7WUFDdkUsNEJBQTRCO1lBQzVCLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDdEI7U0FDRjtLQUNGO0FBQ0gsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBWSxFQUFFLElBQXFCO0lBQzNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDekMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixPQUFPLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRTtRQUN6RCxtRUFBbUU7UUFDbkUsMkVBQTJFO1FBQzNFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQzFCLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDakMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtxQkFDdEI7b0JBQ0QsRUFBRSxDQUFDLENBQUM7aUJBQ0w7YUFDRjtTQUNGO1FBQ0QsRUFBRSxDQUFDLENBQUM7S0FDTDtBQUNILENBQUM7QUFFRCxtREFBbUQ7QUFDbkQsU0FBUyxTQUFTLENBQUMsUUFBa0IsRUFBRSxXQUE4QjtJQUNuRSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDbkMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsb0JBQW9CLENBQ2hELFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDbkMsQ0FBQztLQUNIO0lBRUQsSUFBSSxXQUFXLHNDQUEwQixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDNUUsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQzlDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDbkMsQ0FBQztLQUNIO0FBQ0gsQ0FBQztBQUVELG1FQUFtRTtBQUNuRSxTQUFTLG9CQUFvQixDQUMzQixRQUFrQixFQUFFLFlBQW9CLEVBQUUsV0FBbUI7SUFFN0QsT0FBTztRQUNMLGFBQWEsQ0FDWCxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDOUIsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQzlCO1FBQ0QsYUFBYSxDQUNYLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUM5QixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FDOUI7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEO3VCQUN1QjtBQUN2QixTQUFTLGlCQUFpQixDQUFDLFVBQWtCO0lBQzNDLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztRQUNkLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9DLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsZ0NBQWdDO0FBQ2hDLFNBQVMsbUJBQW1CLENBQUMsVUFBa0IsRUFBRSxXQUFnQjtJQUMvRCw4R0FBOEc7SUFDOUcsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDNUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxjQUFjLENBQUMsVUFBa0IsRUFBRSxTQUFpQjtJQUMzRCxNQUFNLFNBQVMsR0FBZ0IsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsTUFBTSxTQUFTLEdBQWUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUV6QyxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDckQsS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztJQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2xDLGdDQUFnQztRQUNoQyxNQUFNLFlBQVksR0FBYSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUM7UUFDckUsR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDMUIsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDaEIsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoRixZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJDLDBCQUEwQjtRQUMxQixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyRCxJQUFJLFFBQVEsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RELElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ25CLFFBQVEsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEQsSUFBSSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbEQsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDO2dCQUNmLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ2hDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ25FLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pFLGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzdEO1FBQ0QsSUFBSSxDQUFDLGFBQWE7WUFDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7S0FDaEM7SUFFRCxPQUFPO1FBQ0wsU0FBUyxFQUFFLFNBQVM7UUFDcEIsU0FBUyxFQUFFLFNBQVM7UUFDcEIsaUJBQWlCLEVBQUUsaUJBQWlCO1FBQ3BDLE1BQU0sRUFBRSxNQUFNO0tBQ2YsQ0FBQztBQUNKLENBQUM7QUFFRDs7aURBRWlEO0FBQ2pELFNBQVMsbUJBQW1CLENBQUMsVUFBa0I7SUFDN0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFakQsc0JBQXNCO0lBQ3RCLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztJQUNoQixPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNuQixxREFBcUQ7UUFDckQsR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFOUUsMkJBQTJCO1FBQzNCLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQyxHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RSxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVwQyxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDN0M7SUFFRCx5REFBeUQ7SUFDekQsS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVDLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNuQixLQUFLLElBQUksYUFBYSxDQUFDO1FBQ3ZCLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7YUFDckQsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7YUFDdkIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzlELEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHdFQUF3RTtRQUNyRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xELDhHQUE4RztZQUM5RyxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0csTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsZUFBZSxDQUFDLENBQUMsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDOztnQkFFckcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQy9DO0lBQ0QsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsVUFBa0I7SUFDaEQsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsc0NBQXNDO0lBRXBGLG1CQUFtQjtJQUNuQixJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsZ0JBQWdCLENBQUM7SUFDekUsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTlELG1CQUFtQjtJQUNuQixLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNoQixHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTlELE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQ7NEVBQzRFO0FBQzVFLFNBQVMsY0FBYyxDQUFDLFVBQWtCLEVBQUUsU0FBaUI7SUFDM0QsTUFBTSxTQUFTLEdBQWEsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakQsTUFBTSxDQUFDLEdBQWlCLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sQ0FBQyxHQUFpQixJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBYSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU5QyxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxvQkFBb0I7SUFDMUUsS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztJQUVoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2xDLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxHQUFHLGFBQWEsQ0FBQztRQUN2RSxHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFFekQsa0JBQWtCO1FBQ2xCLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFaEQsd0NBQXdDO1FBQ3hDLE1BQU0sVUFBVSxHQUFhLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDMUIsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDaEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyQixpREFBaUQ7UUFDakQsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNaLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXpDLEtBQUssR0FBRyxHQUFHLENBQUM7S0FDYjtJQUVELE9BQU87UUFDTCxTQUFTLEVBQUUsU0FBUztRQUNwQixDQUFDLEVBQUUsQ0FBQztRQUNKLENBQUMsRUFBRSxDQUFDO1FBQ0osTUFBTSxFQUFFLE1BQU07S0FDZixDQUFDO0FBQ0osQ0FBQztBQUVELDRCQUE0QjtBQUM1QixTQUFTLGNBQWMsQ0FBQyxZQUFzQjtJQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixPQUFPLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7UUFDOUMsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDaEQsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9EQUFvRDtZQUM3RixFQUFFLENBQUMsQ0FBQztZQUNKLDBDQUEwQztTQUMzQztRQUNELEVBQUUsQ0FBQyxDQUFDO0tBQ0w7QUFDSCxDQUFDO0FBRUQ7NENBQzRDO0FBQzVDLFNBQVMsa0JBQWtCLENBQUMsWUFBc0IsRUFBRSxXQUFvQjtJQUN0RSxJQUFJLE9BQU8sV0FBVyxLQUFLLFdBQVcsRUFBRTtRQUN0QyxNQUFNLGNBQWMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDakMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUNqQyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBRS9CLDZCQUE2QjtRQUM3QixLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUMsS0FBSyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBZSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkYsS0FBSyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBZSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkYsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZDLCtEQUErRDtRQUMvRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDbEQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVc7Z0JBQ3JDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDckIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLFdBQVc7Z0JBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyx3Q0FBd0M7U0FDdkU7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDM0MsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVc7Z0JBQzlCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDZCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVztnQkFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztTQUNoRTtRQUVELG1DQUFtQztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNqQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsSUFBSSxTQUFTLEtBQUssV0FBVyxJQUFJLFVBQVUsS0FBSyxXQUFXLEVBQUU7Z0JBQzNELEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDN0IsS0FBSyxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBYyxXQUFXLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNyQixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsRUFBRSxDQUFDLENBQUM7YUFDTDtpQkFBTTtnQkFDTCxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzlFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQzthQUNsRjtZQUNELEVBQUUsQ0FBQyxDQUFDO1NBQ0w7UUFFRCwyQ0FBMkM7UUFDM0MsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxjQUFjLEVBQUU7Z0JBQzVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUM7Z0JBQ2hELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM3QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNuQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxjQUFjLEVBQUU7Z0JBQ2pELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDO2dCQUNyQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNsQztRQUNILENBQUMsQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDO0FBRUQsNkRBQTZEO0FBQzdELFNBQVMsZ0JBQWdCLENBQ3ZCLFlBQXlDLEVBQUUsVUFBYSxFQUFFLEtBQWEsRUFBRSxLQUFhO0lBRXRGLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDM0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsT0FBTyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRTtRQUM1QixJQUFJLENBQUMsS0FBSyxLQUFLO1lBQ2IsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUNiLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsRUFBRSxDQUFDLENBQUM7UUFDSixFQUFFLENBQUMsQ0FBQztLQUNMO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELG9FQUFvRTtBQUNwRSxTQUFTLHlCQUF5QixDQUFDLE9BQWlCO0lBQ2xELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDBDQUEwQztJQUNsRyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFMUIsMEJBQTBCO0lBQzFCLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBRTlELG9EQUFvRDtJQUNwRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBRTlELGlGQUFpRjtJQUNqRixtQkFBbUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFM0MsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNuQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUvQixNQUFNLGtCQUFrQixHQUFHLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRW5FLG1DQUFtQztJQUNuQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUVwRCw2RUFBNkU7SUFDN0UsaUJBQWlCLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQVMsMkJBQTJCLENBQUMsT0FBaUI7SUFDcEQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYTtJQUNyRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTO0lBQ3pELGlEQUFpRDtJQUNqRCxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUUxQiwwQkFBMEI7SUFDMUIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFFOUQsb0RBQW9EO0lBQ3BELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFFOUQsaURBQWlEO0lBQ2pELG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVEO3FEQUNxRDtBQUNyRCxTQUFTLDBCQUEwQixDQUNqQyxPQUFpQixFQUFFLFVBQWtCLEVBQUUsVUFBa0I7SUFFekQsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFMUIsMEJBQTBCO0lBQzFCLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBRTFELG9EQUFvRDtJQUNwRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBRTVELGlGQUFpRjtJQUNqRixtQkFBbUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsT0FBaUIsRUFBRSxvQkFBbUM7SUFDckYsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFMUIsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUvQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUU5RCxvREFBb0Q7SUFDcEQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUU5RCw4REFBOEQ7SUFDOUQsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFFMUQsb0JBQW9CLENBQUMsS0FBSyxHQUFHLCtCQUErQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXRFLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsT0FBaUIsRUFBRSxvQkFBbUM7SUFDcEYsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFMUIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsMENBQTBDO0lBQ2xHLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUvQywrQkFBK0I7SUFDL0IsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFFOUQsK0RBQStEO0lBQy9ELE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQztJQUN4RCxJQUFJLG9CQUFvQixFQUFFO1FBQ3hCLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQy9CLElBQUksQ0FBQyxFQUFFLEdBQUcsbUJBQW1CLEdBQUcsb0JBQW9CLENBQUMsQ0FBQztLQUN6RDtTQUFNO1FBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0tBQzlEO0lBRUQsNkVBQTZFO0lBQzdFLGtEQUFrRDtJQUNsRCxNQUFNLEVBQUUsR0FBRztRQUNULENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2pDLENBQUM7SUFDRixNQUFNLEVBQUUsR0FBRztRQUNULENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3hDLENBQUM7SUFDRixNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEQsSUFBSSxVQUFVLElBQUksQ0FBQyxFQUFFO1FBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZDO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxFQUFTLEVBQUUsRUFBUztJQUNoRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUM1QixTQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBLEdBQUcsU0FBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUNwQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7K0NBQytDO0FBQy9DLFNBQVMsc0JBQXNCLENBQUMsT0FBaUIsRUFBRSxrQkFBMEI7SUFDM0UsNERBQTREO0lBQzVELElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNqRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDN0MsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0IsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEtBQUssRUFDL0IsQ0FBQyxlQUFlLENBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ2xELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNuRCxDQUNGLENBQUM7S0FDSDtBQUNILENBQUM7QUFFRCxvRUFBb0U7QUFDcEUsU0FBUyxlQUFlLENBQUMsQ0FBUyxFQUFFLENBQVM7SUFDM0MsSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDWCxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0tBQzdCO1NBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUM1QztTQUFNO1FBQ0wsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUM1RDtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELG9FQUFvRTtBQUNwRSxTQUFTLGVBQWUsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUMzQyxPQUFPLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxTQUFTLG1CQUFtQixDQUFDLEtBQVksRUFBRSxLQUFhO0lBQ3RELElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtRQUNmLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVsQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDakMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztTQUM5QztLQUNGO0FBQ0gsQ0FBQztBQUVELCtEQUErRDtBQUMvRCxTQUFTLG1CQUFtQixDQUFDLE9BQWlCO0lBQzVDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELCtEQUErRDtBQUMvRCxTQUFTLG1CQUFtQixDQUFDLE9BQWlCO0lBQzVDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixTQUFTLFlBQVksQ0FBQyxRQUFrQixFQUFFLElBQWE7SUFDckQsSUFBSSxJQUFJLEVBQUUsRUFBRSxxQkFBcUI7UUFDL0IsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQy9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoQjtTQUFNLEVBQUUscUJBQXFCO1FBQzVCLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUMvQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDaEI7SUFFRCwyQkFBMkI7SUFDM0IsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztJQUNyRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksV0FBVyxFQUFFO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ2hDO0FBQ0gsQ0FBQztBQUVEOzttSEFFbUg7QUFDbkgsU0FBUyxpQkFBaUIsQ0FBQyxPQUFpQixFQUFFLGtCQUEwQjtJQUN0RSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQiw4RUFBOEU7SUFDOUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztRQUMzRCxTQUFTLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVEO2lEQUNpRDtBQUNqRCxTQUFTLDhCQUE4QixDQUFDLE9BQWlCO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLHNFQUFzRTtJQUN0RSxPQUFPLGtCQUFrQixLQUFLLENBQUMsRUFBRTtRQUMvQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDakYsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUMsRUFBRSxDQUFDO0tBQ0w7SUFDRCxPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUM7QUFFRCw2RUFBNkU7QUFDN0UsU0FBUyxTQUFTLENBQUMsT0FBaUIsRUFBRSxPQUFlLEVBQUUsT0FBZTtJQUNwRSxNQUFNLFVBQVUsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sVUFBVSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDL0IsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxtREFBbUQ7QUFDbkQsU0FBUyxpQkFBaUIsQ0FBQyxPQUFpQjs7SUFDMUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7SUFDN0MsS0FBSyxNQUFNLFNBQVMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtRQUMvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztnQkFDZCxNQUFBLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLDBDQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs7Z0JBRTFCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2xEO0tBQ0Y7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCx1Q0FBdUM7QUFDdkMsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFrQixFQUFFLE1BQWMsRUFBRSxNQUFlO0lBQzNFLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztZQUMvQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztLQUN2QztBQUNILENBQUM7QUFFRCxpRUFBaUU7QUFDakUsU0FBUyxtQkFBbUIsQ0FDMUIsVUFBb0IsRUFBRSxZQUFtQyxFQUN6RCxRQUFrQixFQUFFLFdBQThCLEVBQUUsSUFBVTtJQUU5RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUN6QixPQUFPLEVBQUUsQ0FBQztJQUNWLDBDQUEwQztJQUU1QyxpRUFBaUU7SUFDakUsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLElBQUksMEJBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ3JELDBCQUEwQixDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQztJQUM1RCxNQUFNLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxHQUFHLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUUzRyx3REFBd0Q7SUFDeEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEtBQUssQ0FBUyxTQUFTLENBQUMsQ0FBQztJQUN0RCxNQUFNLGdCQUFnQixHQUFHLElBQUksS0FBSyxDQUFTLFNBQVMsQ0FBQyxDQUFDO0lBRXRELElBQUksb0JBQW9CLENBQUMsQ0FBQyxlQUFlO0lBRXpDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztJQUNqQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFFckIsSUFBSSxJQUFJLDBCQUFrQixFQUFFO1FBQzFCLElBQUksV0FBVyw4Q0FBOEIsRUFBRTtZQUM3QyxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztTQUMvQzthQUFNLEVBQUUsY0FBYztZQUNyQixvQkFBb0IsR0FBRyx1QkFBdUIsQ0FBQztZQUMvQyxLQUFLLEdBQUcsQ0FBQyxRQUFRLDZCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0YsU0FBUyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDekM7S0FDRjtTQUFNO1FBQ0wsb0JBQW9CLEdBQUcsc0JBQXNCLENBQUM7S0FDL0M7SUFFRCxNQUFNLENBQUMsR0FBa0I7UUFDdkIsQ0FBQyxFQUFFLENBQUM7UUFDSixTQUFTLEVBQUUsQ0FBQztRQUNaLFNBQVMsRUFBRSxDQUFDO1FBQ1oscUJBQXFCLEVBQUUsSUFBSSxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuRCxtQkFBbUIsRUFBRSxJQUFJLEtBQUssQ0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pELGtCQUFrQixFQUFFLENBQUM7UUFDckIsZ0JBQWdCLEVBQUUsQ0FBQztRQUNuQixVQUFVLEVBQUUsQ0FBQztLQUNkLENBQUM7SUFFRixNQUFNLENBQUMsR0FBa0I7UUFDdkIsS0FBSyxFQUFFLEtBQU07UUFDYixTQUFTLEVBQUUsU0FBVTtRQUNyQixTQUFTLEVBQUUsVUFBVSxDQUFDLE1BQU07UUFDNUIsU0FBUyxFQUFFLFNBQVM7UUFDcEIsU0FBUyxFQUFFLFNBQVM7S0FDckIsQ0FBQztJQUVGLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN0QyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQztRQUNuRCxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3pFO0lBRUQsb0JBQW9CLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUVyRSxNQUFNLGlCQUFpQixHQUFHLHFCQUFxQixHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsU0FBUyxHQUFHLHNCQUFzQixDQUFDO0lBRXZHLDZFQUE2RTtJQUM3RSw0RUFBNEU7SUFDNUUsZ0NBQWdDO0lBRWhDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixNQUFNLElBQUkscUJBQXFCLENBQUM7SUFDaEMsTUFBTSxJQUFJLHNCQUFzQixDQUFDO0lBQ2pDLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQztJQUMvQixNQUFNLElBQUksaUJBQWlCLENBQUM7SUFDNUIsTUFBTSxJQUFJLG9CQUFvQixDQUFDO0lBQy9CLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEMsTUFBTSxJQUFJLGtCQUFrQixDQUFDO0lBQzdCLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQztJQUMvQixNQUFNLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQztJQUM3QixNQUFNLElBQUksa0JBQWtCLENBQUM7SUFDN0IsTUFBTSxJQUFJLE9BQU8sQ0FBQztJQUVsQixnQ0FBZ0M7SUFDaEMsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELDRFQUE0RTtBQUM1RSxTQUFTLG9CQUFvQixDQUMzQixnQkFBMEIsRUFBRSxnQkFBMEIsRUFDdEQsQ0FBZ0IsRUFBRSxDQUFnQixFQUFFLElBQVU7SUFFOUMsSUFBSSxJQUFJLDBCQUFrQixFQUFFO1FBQzFCLHNCQUFzQjtRQUN0QixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNoQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsbUJBQW1CLEdBQUcsT0FBTyxHQUFHLEdBQUc7WUFDakUsTUFBTSxHQUFHLEdBQUcsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztZQUM5RCxDQUFDLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQztRQUV2RixvQkFBb0I7UUFDcEIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBQ3ZDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQztRQUMzQixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHO1lBQ3JFLENBQUMsR0FBRyxHQUFHLEdBQUcsU0FBUyxHQUFHLEdBQUcsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO0tBQ2pEO0FBQ0gsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsT0FBaUIsRUFBRSxnQkFBMEIsRUFDM0UsZ0JBQTBCLEVBQUUsQ0FBZ0I7SUFFNUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxTQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDLHFDQUFxQztJQUN2RSw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsT0FBaUIsRUFBRSxnQkFBMEIsRUFDM0UsZ0JBQTBCLEVBQUUsQ0FBZ0I7SUFDNUMsMEJBQTBCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFFRCxTQUFTLDRCQUE0QixDQUNuQyxPQUFpQixFQUFFLGdCQUEwQixFQUFFLGdCQUEwQixFQUFFLENBQWdCO0lBRTNGLHVFQUF1RTtJQUN2RSxpREFBaUQ7SUFDakQsYUFBYSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU1QyxnREFBZ0Q7SUFDaEQsYUFBYSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU1QyxlQUFlO0lBQ2Ysc0JBQXNCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXJELHVDQUF1QztJQUN2QyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUM1RSxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFcEMsd0JBQXdCO0lBQ3hCLDZCQUE2QixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7cURBQ3FEO0FBQ3JELFNBQVMsdUJBQXVCLENBQzlCLFVBQW9CLEVBQUUsZ0JBQTBCLEVBQUUsZ0JBQTBCLEVBQUUsQ0FBZ0IsRUFBRSxDQUFnQjtJQUVoSCw0RUFBNEU7SUFDNUUsWUFBWTtJQUNaLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDYiw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsS0FBTSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQy9FO1NBQU07UUFDTCxLQUFLLE1BQU0sT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzFDLDRCQUE0QixDQUFDLE9BQVEsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNqRjtJQUVELDBCQUEwQixDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FDakMsT0FBaUIsRUFBRSxnQkFBMEIsRUFBRSxnQkFBMEIsRUFBRSxDQUFnQjtJQUUzRixtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEQsYUFBYSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1Qyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdkQsV0FBVztJQUNYLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDNUIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0lBQ3JDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDL0QsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLG1CQUFtQixHQUFHLE9BQU8sR0FBRyxHQUFHO1FBQ2pFLENBQUMsR0FBRyxHQUFHLEdBQUcsU0FBUyxHQUFHLEdBQUcsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBRWhELHdCQUF3QjtJQUN4QixDQUFDLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQVMsNkJBQTZCLENBQUMsT0FBaUIsRUFBRSxDQUFnQjtJQUN4RSxDQUFDLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFbEQsQ0FBQyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDOUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCO0lBQ3JGLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLE9BQWlCLEVBQUUsQ0FBZ0I7SUFDaEUsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsT0FBaUIsRUFBRSxnQkFBMEIsRUFBRSxDQUFnQjtJQUNwRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLG1CQUFtQixHQUFHLE9BQU8sR0FBRyxHQUFHO1lBQ3JFLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7WUFDaEMsYUFBYSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7WUFDcEUsYUFBYSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQztBQUNILENBQUM7QUFFRCwyQkFBMkI7QUFDM0IsU0FBUyxtQkFBbUIsQ0FBQyxPQUFpQixFQUFFLGdCQUEwQixFQUFFLENBQWdCO0lBQzFGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsbUJBQW1CLEdBQUcsT0FBTyxHQUFHLEdBQUc7WUFDckUsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztZQUNoQyxhQUFhLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztZQUNsRSxhQUFhLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0UsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLE9BQWlCLEVBQUUsZ0JBQTBCLEVBQUUsQ0FBZ0I7SUFDcEYsZ0RBQWdEO0lBQ2hELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDOUQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMvRCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMxQyxrQ0FBa0M7WUFDbEMsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUM7Z0JBQ2xCLFdBQVcsR0FBRyxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsT0FBTyxHQUFHLE9BQU8sR0FBRyxXQUFXLENBQUM7U0FDakM7UUFDRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsR0FBRyxPQUFPLEdBQUcsR0FBRztZQUNyRSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHO1lBQ2hDLFNBQVMsR0FBRyxHQUFHLEdBQUcsVUFBVSxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO0tBQzFEO0FBQ0gsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsT0FBaUIsRUFBRSxnQkFBMEIsRUFBRSxDQUFnQjtJQUM3RixJQUFJLENBQUMsQ0FBQyxrQkFBa0IsS0FBSyxDQUFDLEVBQUU7UUFDOUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM1QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsa0JBQWtCLENBQUM7UUFDdkMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMvRCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLG1CQUFtQixHQUFHLE9BQU8sR0FBRyxHQUFHO1lBQ3JFLENBQUMsR0FBRyxHQUFHLEdBQUcsU0FBUyxHQUFHLEdBQUcsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO0tBQ2pEO0FBQ0gsQ0FBQztBQUVELGVBQWU7QUFDZixTQUFTLHdCQUF3QixDQUFDLGFBQXVCLEVBQUUsZ0JBQTBCLEVBQUUsQ0FBZ0I7SUFDckcsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM1QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7SUFDckMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNyRSxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsbUJBQW1CLEdBQUcsT0FBTyxHQUFHLEdBQUc7UUFDakUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDbEQsQ0FBQztBQUVEOzBDQUMwQztBQUMxQyxTQUFTLDBCQUEwQixDQUNqQyxVQUFvQixFQUFFLFlBQW1DLEVBQ3pELFFBQWtCLEVBQUUsV0FBOEIsRUFDbEQsSUFBVTtJQUVWLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFbEIsc0RBQXNEO0lBQ3RELEtBQUssTUFBTSxhQUFhLElBQUksVUFBVSxFQUFFO1FBQ3RDLElBQUksYUFBYSxLQUFLLEVBQUU7WUFBRSxTQUFTLENBQUMsb0NBQW9DO1FBQ3hFLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFFLENBQUM7UUFDakQsU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNwQyxTQUFTLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0tBQzdDO0lBRUQsaURBQWlEO0lBQ2pELElBQUksSUFBSSwwQkFBa0IsRUFBRTtRQUMxQixJQUFJLFdBQVcsOENBQThCLEVBQUU7WUFDN0MsMERBQTBEO1lBQzFELFNBQVMsSUFBSSxDQUFDLENBQUM7WUFDZiwyRUFBMkU7WUFDM0UsU0FBUyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7U0FDaEM7YUFBTSxFQUFFLGNBQWM7WUFDckIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxRQUFRLDZCQUFpQixDQUFDLENBQUMsQ0FBQztnQkFDekMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUUsQ0FBQztZQUM3RCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBRSxDQUFDO1lBRS9DLG9EQUFvRDtZQUNwRCxTQUFTLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUVoRSx1Q0FBdUM7WUFDdkMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBRXRELDZDQUE2QztZQUM3QyxTQUFTLElBQUksQ0FBQyxDQUFDO1lBRWYsb0NBQW9DO1lBQ3BDLFNBQVMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBRXhFLGdDQUFnQztZQUNoQyxTQUFTLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFFOUQsK0VBQStFO1lBQy9FLFNBQVMsSUFBSSxDQUFDLENBQUM7WUFFZiw4RUFBOEU7WUFDOUUsU0FBUyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ3BDO0tBQ0Y7U0FBTTtRQUNMLG9DQUFvQztLQUNyQztJQUVELE9BQU8sRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVELDBFQUEwRTtBQUMxRSxTQUFTLGFBQWEsQ0FBQyxDQUFTO0lBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUM3RCxDQUFDO0FBRUQsU0FBUywyQkFBMkIsQ0FBQyxRQUFrQjtJQUNyRCxjQUFjO0lBQ2QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDMUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0IsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0IsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDekMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDMUMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDMUMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDekMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztJQUNwRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ2xDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztJQUVsRCwrQkFBK0I7SUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxxQkFBcUIsR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQztJQUV2RyxhQUFhO0lBQ2IsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNsQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXRELG9FQUFvRTtRQUNwRSxnQ0FBZ0M7UUFDaEMsMkRBQTJEO1FBQzNELGdDQUFnQztRQUNoQywyQkFBMkI7UUFDM0IsNEVBQTRFO1FBQzVFLHlDQUF5QztRQUN6QyxJQUFJO1FBRUosTUFBTSxRQUFRLEdBQUcsbUJBQW1CLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztZQUN0RSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELGdCQUFnQixJQUFJLFFBQVEsQ0FBQztLQUM5QjtJQUVELGFBQWE7SUFDYixJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckUsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztZQUN0RSxTQUFTLEdBQUcsR0FBRyxHQUFHLFVBQVUsR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztRQUN6RCxnQkFBZ0IsSUFBSSxRQUFRLENBQUM7S0FDOUI7SUFFRCxNQUFNLFlBQVksR0FBRztRQUNuQixxQkFBcUI7UUFDckIsc0JBQXNCO1FBQ3RCLG9CQUFvQjtRQUNwQixpQkFBaUI7UUFDakIsb0JBQW9CO1FBQ3BCLGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDbEIsb0JBQW9CO1FBQ3BCLGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDbEIsa0JBQWtCO1FBQ2xCLE9BQU87S0FDUixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLGlDQUFpQztJQUVqQyxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUM7QUFFRCxNQUFNLFVBQWdCLDJCQUEyQixDQUFDLGVBQXNCOztRQUN0RSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsbUVBQW1FLENBQUMsQ0FBQztZQUN4RixPQUFPO1NBQ1I7UUFFRCxNQUFNLHdCQUF3QixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQzNELE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUVyRSxLQUFLLE1BQU0sZ0JBQWdCLElBQUksZUFBZSxFQUFFO1lBQzlDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixtQ0FBb0IsQ0FBQztZQUMzRCxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsZ0JBQWdCLHFDQUFxQixDQUFDLENBQUM7WUFDeEUsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLHFDQUFxQixDQUFDLENBQUM7WUFFbEYsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLHFDQUFxQixDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDOUcsTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFbEQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0QsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0QsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFFekUsTUFBTSxZQUFZLEdBQWEsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDO1lBRXhFLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUU3QixNQUFNLE9BQU8sR0FBRywyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMxRCx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsT0FBTyx3QkFBd0IsQ0FBQztJQUNsQyxDQUFDO0NBQUE7QUFFRCxvRkFBb0Y7QUFDcEYsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE9BQWdCO0lBQ2hELE1BQU0sUUFBUSxHQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUV4QyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsT0FBTyxxQ0FBcUIsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDLE9BQU8scUNBQXFCLENBQUMsQ0FBQztJQUN6RSxNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLHFDQUFxQixDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckcsTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFbEQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0QsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0QsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFekUsTUFBTSxZQUFZLEdBQWEsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDO0lBRXhFLHlCQUF5QixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXhDLE1BQU0sT0FBTyxHQUFHLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxzREFBc0Q7QUFFdEQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLFVBQW9CLEVBQUUsb0RBQW9EO0FBQzFFLHFCQUFtRCxDQUFDLHFDQUFxQzs7SUFFekYsZ0NBQWdDO0lBQ2hDLGlFQUFpRTtJQUNqRSxrREFBa0Q7SUFDbEQsTUFBTSxJQUFJLHdCQUFnQixDQUFDO0lBQzNCLE1BQU0sUUFBUSx5QkFBYyxDQUFDLENBQUMsZ0RBQWdEO0lBQzlFLE1BQU0sV0FBVyxvQ0FBd0IsQ0FBQyxDQUFDLGdEQUFnRDtJQUUzRiw4REFBOEQ7SUFDOUQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUN4RCxLQUFLLE1BQU0sR0FBRyxJQUFJLHFCQUFxQjtRQUNyQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFN0QsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNuRSxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUYsbUNBQW1DO0lBRW5DLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDswQ0FDMEM7QUFDMUMsU0FBUyw0QkFBNEIsQ0FDbkMsVUFBb0IsRUFBRSxZQUFtQyxFQUN6RCxRQUFrQixFQUFFLFdBQThCO0lBRWxELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFbEIsc0RBQXNEO0lBQ3RELEtBQUssTUFBTSxhQUFhLElBQUksVUFBVSxFQUFFO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFFLENBQUM7UUFDakQsU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNwQyxTQUFTLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0tBQzdDO0lBRUQsaURBQWlEO0lBQ2pELElBQUksV0FBVyw4Q0FBOEIsRUFBRTtRQUM3QywwREFBMEQ7UUFDMUQsU0FBUyxJQUFJLENBQUMsQ0FBQztRQUNmLDJFQUEyRTtRQUMzRSxTQUFTLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQztLQUNoQztTQUFNLEVBQUUsY0FBYztRQUNyQixNQUFNLEtBQUssR0FBRyxDQUFDLFFBQVEsNkJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFFLENBQUM7UUFDN0QsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUUsQ0FBQztRQUUvQyxxREFBcUQ7UUFDckQsU0FBUyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkYsb0VBQW9FO1FBQ3BFLFNBQVMsSUFBSSxDQUFDLENBQUM7UUFFZixxQ0FBcUM7UUFDckMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbkcsOEVBQThFO1FBQzlFLFNBQVMsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUNwQztJQUVELE9BQU8sRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFDLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIERvIG5vdCBjaGFuZ2UgdGhlc2UgaW1wb3J0IGxpbmVzIHRvIG1hdGNoIGV4dGVybmFsIG1vZHVsZXMgaW4gd2VicGFjayBjb25maWd1cmF0aW9uICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge0hFTE1fRklFTERTLCBIRUxNX0NPUkVfRklFTERTLCBIRUxNX1BPTFlNRVJfVFlQRSwgSEVMTV9NT05PTUVSX1RZUEUsIFJHUk9VUF9GSUVMRFMsIE1PREV9IGZyb20gJy4uL3V0aWxzL2NvbnN0JztcbmltcG9ydCB7QUxQSEFCRVQsIGdldFNwbGl0dGVyLCBOT1RBVElPTiwgU3BsaXR0ZXJGdW5jLCBUQUdTfSBmcm9tICcuLi91dGlscy9tYWNyb21vbGVjdWxlJztcbi8vIGltcG9ydCB7VW5pdHNIYW5kbGVyfSBmcm9tICcuLi91dGlscy91bml0cy1oYW5kbGVyJztcbmltcG9ydCB7Tm90YXRpb25Db252ZXJ0ZXJ9IGZyb20gJy4uL3V0aWxzL25vdGF0aW9uLWNvbnZlcnRlcic7XG5pbXBvcnQge01vbm9tZXJ9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7ZXJyb3JUb0NvbnNvbGV9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3RvLWNvbnNvbGUnO1xuXG4vLyBpbnRlcmZhY2UgZm9yIHR5cGVkIGFycmF5cywgbGlrZSBGbG9hdDMyQXJyYXkgYW5kIFVpbnQzMkFycmF5XG5pbnRlcmZhY2UgSVR5cGVkQXJyYXkge1xuICBsZW5ndGg6IG51bWJlcjtcbiAgW2tleTogbnVtYmVyXTogYW55O1xufVxuXG4vLyBjb25zdGFudHMgZm9yIHBhcnNpbmcgbW9sZmlsZSBWMjAwMFxuY29uc3QgVjJLX1JHUF9TSElGVCA9IDg7XG5jb25zdCBWMktfUkdQX0xJTkUgPSAnTSAgUkdQJztcbmNvbnN0IFYyS19BX0xJTkUgPSAnQSAgJztcblxuLy8gY29uc3RhbnRzIGZvciBwYXJzaW5nL3JlY29uc3RydWN0aW9uIG9mIG1vbGZpbGUgVjMwMDBcbmNvbnN0IFYzS19DT1VOVFNfU0hJRlQgPSAxNDtcbmNvbnN0IFYzS19JRFhfU0hJRlQgPSA3O1xuY29uc3QgVjNLX0hFQURFUl9GSVJTVF9MSU5FID0gJ1xcbkRhdGFncm9rIG1hY3JvbW9sZWN1bGUgaGFuZGxlclxcblxcbic7XG5jb25zdCBWM0tfSEVBREVSX1NFQ09ORF9MSU5FID0gJyAgMCAgMCAgMCAgMCAgMCAgMCAgICAgICAgICAgIDk5OSBWMzAwMFxcbic7XG5jb25zdCBWM0tfQkVHSU5fQ1RBQl9CTE9DSyA9ICdNICBWMzAgQkVHSU4gQ1RBQlxcbic7XG5jb25zdCBWM0tfRU5EX0NUQUJfQkxPQ0sgPSAnTSAgVjMwIEVORCBDVEFCXFxuJztcbmNvbnN0IFYzS19CRUdJTl9DT1VOVFNfTElORSA9ICdNICBWMzAgQ09VTlRTICc7XG5jb25zdCBWM0tfQ09VTlRTX0xJTkVfRU5ESU5HID0gJyAwIDAgMFxcbic7XG5jb25zdCBWM0tfQkVHSU5fQVRPTV9CTE9DSyA9ICdNICBWMzAgQkVHSU4gQVRPTVxcbic7XG5jb25zdCBWM0tfRU5EX0FUT01fQkxPQ0sgPSAnTSAgVjMwIEVORCBBVE9NXFxuJztcbmNvbnN0IFYzS19CRUdJTl9CT05EX0JMT0NLID0gJ00gIFYzMCBCRUdJTiBCT05EXFxuJztcbmNvbnN0IFYzS19FTkRfQk9ORF9CTE9DSyA9ICdNICBWMzAgRU5EIEJPTkRcXG4nO1xuY29uc3QgVjNLX0JPTkRfQ09ORklHID0gJyBDRkc9JztcbmNvbnN0IFYzS19CRUdJTl9EQVRBX0xJTkUgPSAnTSAgVjMwICc7XG5jb25zdCBWM0tfRU5EID0gJ00gIEVORFxcbic7XG5cbmNvbnN0IFBSRUNJU0lPTl9GQUNUT1IgPSAxMF8wMDA7IC8vIEhFTE1Db3JlTGlicmFyeSBoYXMgNCBzaWduaWZpY2FudCBkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludCBpbiBhdG9tIGNvb3JkaW5hdGVzXG5cbi8vIHN5bWJvbHMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIG1vbm9tZXJzIGluIEhFTE0gbGlicmFyeVxuY29uc3QgREVPWFlSSUJPU0UgPSAnZCc7XG5jb25zdCBSSUJPU0UgPSAncic7XG5jb25zdCBQSE9TUEhBVEUgPSAncCc7XG5cbmNvbnN0IE9YWUdFTiA9ICdPJztcbmNvbnN0IEhZRFJPR0VOID0gJ0gnO1xuXG4vKiogU3RvcmVzIG5lY2Vzc2FyeSBkYXRhIGFib3V0IGF0b21zIG9mIGEgbW9ub21lciBwYXJzZWQgZnJvbSBNb2xmaWxlICovXG50eXBlIEF0b21zID0ge1xuICAvKiogRWxlbWVudCBzeW1ib2xzIGZvciBtb25vbWVyJ3MgYXRvbXMgKi9cbiAgYXRvbVR5cGVzOiBzdHJpbmdbXSxcbiAgLyoqIENhcnRlc2lhbiBjb29yZGlhbnRlcyBvZiBtb25vbWVyJ3MgYXRvbXMgKi9cbiAgeDogRmxvYXQzMkFycmF5LFxuICB5OiBGbG9hdDMyQXJyYXksXG4gIC8qKiBWM0sgYXRvbSBsaW5lIG1heSBjb250YWluIGtleXdvcmQgYXJncyAqL1xuICBrd2FyZ3M6IHN0cmluZ1tdLFxufVxuXG4vKiogU3RvcmVzIG5lY2Vzc2FyeSBkYXRhIGFib3V0IGJvbmRzIG9mIGEgbW9ub21lciBwYXJzZWQgZnJvbSBNb2xmaWxlICovXG50eXBlIEJvbmRzID0ge1xuICAvKiogYm9uZCB0eXBlcyBmb3IgYWxsIGxpbmVzIG9mIE1vbGZpbGUgYm9uZCBibG9jayAqL1xuICBib25kVHlwZXM6IFVpbnQzMkFycmF5LFxuICAvKiogSW5kaWNlcyBvZiBhbGwgYXRvbSBwYWlycywgaW5kZXhpbmcgc3RhcnRpbmcgZnJvbSAxICAqL1xuICBhdG9tUGFpcnM6IG51bWJlcltdW10sXG4gIC8qKiBJZiBhIGJvbmQgaGFzIENGRz0uLi4ga2V5d29yZCBhcmd1bWVudCwgaXQgaXMgcGFyc2VkIGFuZCBzb3RyZWQgYXMgYVxuICAgKiB2YWx1ZSBvZiB0aGUgbWFwLCB3aXRoIHRoZSBrZXkgYmVpbmcgdGhlIGJvbmQncyBpbmRleCAgKi9cbiAgYm9uZENvbmZpZ3VyYXRpb246IE1hcDxudW1iZXIsIG51bWJlcj4sXG4gIC8qKiBWM0sgYm9uZCBsaW5lIG1heSBjb250YWluIGtleXdvcmQgYXJncyAqL1xuICBrd2FyZ3M6IE1hcDxudW1iZXIsIHN0cmluZz4sXG59XG5cbi8qKiBNZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIG1vbm9tZXIgbmVjZXNzYXJ5IHRvIHJlc3RvcmUgdGhlIHJlc3VsdGluZyBtb2xmaWxlICovXG50eXBlIE1vbm9tZXJNZXRhZGF0YSA9IHtcbiAgLyoqIHRlcm1pbmFsIG5vZGVzOiAwLXRoIGNvcnJlc3BvbmRzIHRvIHRoZSBcImxlZnRtb3N0XCIgb25lLCAxc3QsIHRvIHRoZSBcInJpZ2h0bW9zdFwiLFxuICAgKiBlLmcuIE4tdGVybWludXMgYW5kIEMtdGVybWludXMgaW4gcGVwdGlkZXMgKi9cbiAgdGVybWluYWxOb2RlczogbnVtYmVyW10sXG4gIC8qKiByLWdyb3VwIG5vZGVzOiAwLXRoIGNvcnJlc3BvbmRzIHRvIHRoZSBcImxlZnRtb3N0XCIgb25lLCAxc3QsIHRvIHRoZSBcInJpZ2h0bW9zdFwiICovXG4gIHJOb2RlczogbnVtYmVyW10sXG4gIC8qKiBzaGlmdCBmcm9tIHRoZSBvcmlnaW4gdG8gdGhlIG5leHQgYmFja2JvbmUsIG51bGwgZm9yIGJyYW5jaCBtb25vbWVycyAqL1xuICBiYWNrYm9uZVNoaWZ0OiBudW1iZXJbXSB8IG51bGwsXG4gIC8qKiBzaGlmdCBmcm9tIHRoZSBvcmlnaW4gdG8gdGhlIG5leHQgYnJhbmNoLCBudWxsIGZvciBicmFuY2ggbW9ub21lcnMgKi9cbiAgYnJhbmNoU2hpZnQ6IG51bWJlcltdIHwgbnVsbFxufVxuXG50eXBlIE1vbEdyYXBoID0ge1xuICBhdG9tczogQXRvbXMsXG4gIGJvbmRzOiBCb25kcyxcbiAgbWV0YTogTW9ub21lck1ldGFkYXRhLFxufVxuXG50eXBlIFBvaW50ID0ge1xuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlclxufVxuXG4vKiogSGVscGVyIHN0cnVjdHVyZSB3cmFwcGluZyBjb21tb24gYXJndW1lbnRzIHRvIHNldmVyYWwgZnVuY3Rpb25zICovXG50eXBlIExvb3BWYXJpYWJsZXMgPSB7XG4gIGk6IG51bWJlcixcbiAgbm9kZVNoaWZ0OiBudW1iZXIsXG4gIGJvbmRTaGlmdDogbnVtYmVyLFxuICBiYWNrYm9uZVBvc2l0aW9uU2hpZnQ6IG51bWJlcltdLFxuICBiYWNrYm9uZUF0dGFjaE5vZGU6IG51bWJlcjsgLy8gbm9kZSB0byB3aGljaCB0aGUgbmV4dCBiYWNrYm9uZSBpcyBhdHRhY2hlZFxuICBicmFuY2hQb3NpdGlvblNoaWZ0OiBudW1iZXJbXSxcbiAgYnJhbmNoQXR0YWNoTm9kZTogbnVtYmVyLFxuICBmbGlwRmFjdG9yOiBudW1iZXIsXG4gIC8vIHRvZG86IHNob3VsZCB3ZSBjb25zaWRlciByZXByZXNlbnRhdGlvbnMgb3RoZXIgdGhhbiBwbGFuYXI/XG59XG5cbi8qKiBIZWxwZXIgc3RydWN0dXJlIHdyYXBwaW5nIGNvbW1vbiBhcmd1bWVudHMgdG8gc2V2ZXJhbCBmdW5jdGlvbnMgKi9cbnR5cGUgTG9vcENvbnN0YW50cyA9IHtcbiAgc3VnYXI6IE1vbEdyYXBoIHwgbnVsbCxcbiAgcGhvc3BoYXRlOiBNb2xHcmFwaCB8IG51bGwsXG4gIHNlcUxlbmd0aDogbnVtYmVyLFxuICBhdG9tQ291bnQ6IG51bWJlcixcbiAgYm9uZENvdW50OiBudW1iZXIsXG59XG5cbi8qKiBIZWxwZXIgc3RydWN0dXJlIHRvIHNpbXVsYXRlIHBvaW50ZXIgdG8gbnVtYmVyICAqL1xudHlwZSBOdW1iZXJXcmFwcGVyID0ge1xuICB2YWx1ZTogbnVtYmVyIHwgbnVsbCAvLyBudWxsIGlmIHRoZXJlIGlzIG5vIGJyYW5jaCBhdHRhY2ggbm9kZVxufVxuXG4vLyB0b2RvOiB2ZXJpZnkgdGhhdCBhbGwgZnVuY3Rpb25zIGhhdmUgcmV0dXJuIHR5cGVzXG5cbi8qKiBDb252ZXJ0IE1hY3JvbW9sZWN1bGUgY29sdW1uIGludG8gTW9sZWN1bGUgY29sdW1uIHN0b3JpbmcgbW9sZmlsZSBWMzAwMCB3aXRoIHRoZSBoZWxwIG9mIGEgbW9ub21lciBsaWJyYXJ5ICAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF90b0F0b21pY0xldmVsKFxuICBkZjogREcuRGF0YUZyYW1lLCBtYWNyb01vbENvbDogREcuQ29sdW1uPHN0cmluZz4sIG1vbm9tZXJzTGliTGlzdDogYW55W11cbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyB0b2RvOiByZW1vdmUgdGhpcyBmcm9tIHRoZSBsaWJyYXJ5XG4gIGlmIChERy5GdW5jLmZpbmQoe3BhY2thZ2U6ICdDaGVtJywgbmFtZTogJ2dldFJkS2l0TW9kdWxlJ30pLmxlbmd0aCA9PT0gMCkge1xuICAgIGdyb2suc2hlbGwud2FybmluZygnVHJhbnNmb3JtYXRpb24gdG8gYXRvbWljIGxldmVsIHJlcXVpcmVzIHBhY2thZ2UgXCJDaGVtXCIgaW5zdGFsbGVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChtYWNyb01vbENvbC5zZW1UeXBlICE9PSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUpIHtcbiAgICBncm9rLnNoZWxsLndhcm5pbmcoXG4gICAgICBgT25seSB0aGUgJHtERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEV9IGNvbHVtbnMgY2FuIGJlIGNvbnZlcnRlZCB0byBhdG9taWNcbiAgICAgIGxldmVsLCB0aGUgY2hvc2VuIGNvbHVtbiBoYXMgc2VtVHlwZSAke21hY3JvTW9sQ29sLnNlbVR5cGV9YFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gY29udmVydCAnaGVsbScgdG8gJ3NlcGFyYXRvcicgdW5pdHNcbiAgaWYgKG1hY3JvTW9sQ29sLmdldFRhZyhERy5UQUdTLlVOSVRTKSA9PT0gTk9UQVRJT04uSEVMTSkge1xuICAgIGNvbnN0IGNvbnZlcnRlciA9IG5ldyBOb3RhdGlvbkNvbnZlcnRlcihtYWNyb01vbENvbCk7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gJy8nO1xuICAgIG1hY3JvTW9sQ29sID0gY29udmVydGVyLmNvbnZlcnQoTk9UQVRJT04uU0VQQVJBVE9SLCBzZXBhcmF0b3IpO1xuICB9XG5cbiAgY29uc3QgYWxwaGFiZXQgPSBtYWNyb01vbENvbC5nZXRUYWcoVEFHUy5hbHBoYWJldCk7XG5cbiAgLy8gZGV0ZXJtaW5lIHRoZSBwb2x5bWVyIHR5cGUgYWNjb3JkaW5nIHRvIEhFTE0gc3BlY2lmaWNhdGlvbnNcbiAgbGV0IHBvbHltZXJUeXBlO1xuICAvLyB0b2RvOiBhbiBleGNlcHRpb24gZnJvbSBkYXJ0IGNvbWVzIGJlZm9yZSB0aGlzIGNoZWNrIGlmIHRoZSBhbHBoYWJldCBpcyBVTlxuICBpZiAoYWxwaGFiZXQgPT09IEFMUEhBQkVULlBUIHx8IGFscGhhYmV0ID09PSBBTFBIQUJFVC5VTikge1xuICAgIHBvbHltZXJUeXBlID0gSEVMTV9QT0xZTUVSX1RZUEUuUEVQVElERTtcbiAgfSBlbHNlIGlmIChhbHBoYWJldCA9PT0gQUxQSEFCRVQuUk5BIHx8IGFscGhhYmV0ID09PSBBTFBIQUJFVC5ETkEpIHtcbiAgICBwb2x5bWVyVHlwZSA9IEhFTE1fUE9MWU1FUl9UWVBFLlJOQTtcbiAgfSBlbHNlIHtcbiAgICBncm9rLnNoZWxsLndhcm5pbmcoXG4gICAgICBgVW5leHBlY3RlZCBjb2x1bW4ncyAnJHttYWNyb01vbENvbC5uYW1lfScgYWxwaGFiZXQgJyR7YWxwaGFiZXR9Jy5gXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyB3b3JrIGluIHN0YW5kYXJkIG1vZGUsIHdoZXJlLCBhcyBpbiBIRUxNQ29yZUxpYnJhcnk6XG4gIC8vIC0gbW9ub21lcnMgd2l0aCBwb2x5bWVyVHlwZSAnUEVQVElERScgaGF2ZSBtb25vbWVyIHR5cGUgJ2JhY2tib25lJ1xuICAvLyAtIG1vbm9tZXJzIHdpdGggcG9seW1lclR5cGUgJ1JOQScgaGF2ZSBtb25vbWVyIHR5cGUgJ2JyYW5jaCcgYW5kICdiYWNrYm9uZSdcbiAgLy8gLSB0aGUgbGlicmFyeSBwcm92aWRlcyBtb2xmaWxlcyBpbiBmb3JtYXQgVjIwMDBcbiAgY29uc3QgbW9kZSA9IE1PREUuU1RBTkRBUkQ7XG5cbiAgY29uc3QgbW9ub21lclNlcXVlbmNlc0FycmF5OiBzdHJpbmdbXVtdID0gZ2V0TW9ub21lclNlcXVlbmNlc0FycmF5KG1hY3JvTW9sQ29sKTtcbiAgY29uc3QgbW9ub21lcnNEaWN0ID0gYXdhaXQgZ2V0TW9ub21lcnNEaWN0RnJvbUxpYihtb25vbWVyU2VxdWVuY2VzQXJyYXksIG1vbm9tZXJzTGliTGlzdCwgcG9seW1lclR5cGUsIGFscGhhYmV0KTtcbiAgY29uc3QgY29sdW1uTGVuZ3RoID0gbWFjcm9Nb2xDb2wubGVuZ3RoO1xuICBjb25zdCByZWNvbnN0cnVjdGVkOiBzdHJpbmdbXSA9IG5ldyBBcnJheShjb2x1bW5MZW5ndGgpO1xuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBjb2x1bW5MZW5ndGg7ICsrcm93KSB7XG4gICAgY29uc3QgbW9ub21lclNlcSA9IG1vbm9tZXJTZXF1ZW5jZXNBcnJheVtyb3ddO1xuICAgIHJlY29uc3RydWN0ZWRbcm93XSA9IG1vbm9tZXJTZXFUb01vbGZpbGUobW9ub21lclNlcSwgbW9ub21lcnNEaWN0LCBhbHBoYWJldCwgcG9seW1lclR5cGUsIG1vZGUpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlY29uc3RydWN0ZWRbcm93XSk7XG4gIH1cblxuICAvLyBleGNsdWRlIG5hbWUgY29sbGlzaW9uc1xuICBjb25zdCBuYW1lID0gJ21vbGZpbGUoJyArIG1hY3JvTW9sQ29sLm5hbWUgKyAnKSc7XG4gIGNvbnN0IG5ld0NvbE5hbWUgPSBkZi5jb2x1bW5zLmdldFVudXNlZE5hbWUobmFtZSk7XG4gIGNvbnN0IG5ld0NvbCA9IERHLkNvbHVtbi5mcm9tU3RyaW5ncyhuZXdDb2xOYW1lLCByZWNvbnN0cnVjdGVkKTtcblxuICBuZXdDb2wuc2VtVHlwZSA9IERHLlNFTVRZUEUuTU9MRUNVTEU7XG4gIG5ld0NvbC5zZXRUYWcoREcuVEFHUy5VTklUUywgREcuVU5JVFMuTW9sZWN1bGUuTU9MQkxPQ0spO1xuICBkZi5jb2x1bW5zLmFkZChuZXdDb2wsIHRydWUpO1xuICBhd2FpdCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG59XG5cbi8qKiBHZXQgYSBtYXBwaW5nIG9mIHBlcHRpZGUgc3ltYm9scyB0byBIRUxNIG1vbm9tZXIgbGlicmFyeVxuICogb2JqZWN0cyB3aXRoIHNlbGVjdGVkIGZpZWxkcy5cbiAqL1xuZnVuY3Rpb24gZ2V0Rm9ybWF0dGVkTW9ub21lckxpYihcbiAgbW9ub21lcnNMaWJMaXN0OiBhbnlbXSwgcG9seW1lclR5cGU6IEhFTE1fUE9MWU1FUl9UWVBFLCBhbHBoYWJldDogQUxQSEFCRVRcbik6IE1hcDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBtb25vbWVyc0xpYkxpc3QuZm9yRWFjaChcbiAgICAoaXQpID0+IHtcbiAgICAgIGlmIChpdFtIRUxNX0ZJRUxEUy5QT0xZTUVSX1RZUEVdID09PSBwb2x5bWVyVHlwZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcG9seW1lclR5cGUgPT09IEhFTE1fUE9MWU1FUl9UWVBFLlJOQSAmJlxuICAgICAgICAgIChpdFtIRUxNX0ZJRUxEUy5NT05PTUVSX1RZUEVdID09PSBIRUxNX01PTk9NRVJfVFlQRS5CUkFOQ0ggfHxcbiAgICAgICAgICAgIGFscGhhYmV0ID09PSBBTFBIQUJFVC5ETkEgJiYgaXRbSEVMTV9GSUVMRFMuU1lNQk9MXSA9PT0gREVPWFlSSUJPU0UgfHxcbiAgICAgICAgICAgIGFscGhhYmV0ID09PSBBTFBIQUJFVC5STkEgJiYgaXRbSEVMTV9GSUVMRFMuU1lNQk9MXSA9PT0gUklCT1NFIHx8XG4gICAgICAgICAgICBpdFtIRUxNX0ZJRUxEUy5TWU1CT0xdID09PSBQSE9TUEhBVEUpIHx8XG4gICAgICAgICAgcG9seW1lclR5cGUgPT09IEhFTE1fUE9MWU1FUl9UWVBFLlBFUFRJREUgJiZcbiAgICAgICAgICBpdFtIRUxNX0ZJRUxEUy5NT05PTUVSX1RZUEVdICE9PSBIRUxNX01PTk9NRVJfVFlQRS5CUkFOQ0hcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbW9ub21lck9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICAgIEhFTE1fQ09SRV9GSUVMRFMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIG1vbm9tZXJPYmplY3RbZmllbGRdID0gaXRbZmllbGRdO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIG1hcC5zZXQoaXRbSEVMTV9GSUVMRFMuU1lNQk9MXSwgbW9ub21lck9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgcmV0dXJuIG1hcDtcbn1cblxuLyoqIEdldCBqYWdnZWQgYXJyYXkgb2YgbW9ub21lciBzeW1ib2xzIGZvciB0aGUgZGF0YWZyYW1lICAqL1xuZnVuY3Rpb24gZ2V0TW9ub21lclNlcXVlbmNlc0FycmF5KG1hY3JvTW9sQ29sOiBERy5Db2x1bW48c3RyaW5nPik6IHN0cmluZ1tdW10ge1xuICBjb25zdCBjb2x1bW5MZW5ndGggPSBtYWNyb01vbENvbC5sZW5ndGg7XG4gIGNvbnN0IHJlc3VsdDogc3RyaW5nW11bXSA9IG5ldyBBcnJheShjb2x1bW5MZW5ndGgpO1xuXG4gIC8vIHNwbGl0IHRoZSBzdHJpbmcgaW50byBtb25vbWVyc1xuICBjb25zdCBjb2xVbml0cyA9IG1hY3JvTW9sQ29sLmdldFRhZyhERy5UQUdTLlVOSVRTKTtcbiAgY29uc3Qgc2VwYXJhdG9yID0gbWFjcm9Nb2xDb2wuZ2V0VGFnKFRBR1Muc2VwYXJhdG9yKTtcbiAgY29uc3Qgc3BsaXR0ZXJGdW5jOiBTcGxpdHRlckZ1bmMgPSBnZXRTcGxpdHRlcihjb2xVbml0cywgc2VwYXJhdG9yKTtcblxuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBjb2x1bW5MZW5ndGg7ICsrcm93KSB7XG4gICAgY29uc3QgbWFjcm9Nb2xlY3VsZSA9IG1hY3JvTW9sQ29sLmdldChyb3cpO1xuICAgIC8vIHRvZG86IGhhbmRsZSB0aGUgZXhjZXB0aW9uIGNhc2Ugd2hlbiBtYWNyb01vbGVjdWxlIGlzIG51bGxcbiAgICByZXN1bHRbcm93XSA9IG1hY3JvTW9sZWN1bGUgPyBzcGxpdHRlckZ1bmMobWFjcm9Nb2xlY3VsZSkgOiBbXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogR2V0IGEgbWFwcGluZyBvZiBtb25vbWVyIHN5bWJvbHMgdG8gTW9sR3JhcGggb2JqZWN0cy4gTm90aWNlLCB0aGVcbiAqIHRyYW5zZm9ybWF0aW9uIGZyb20gbW9sZmlsZSBWMjAwMCB0byBWMzAwMCB0YWtlcyBwbGFjZSxcbiAqIHdpdGggdGhlIGhlbHAgb2YgYXN5bmMgZnVuY3Rpb24gY2FsbCBmcm9tIENoZW0gKFJkS2l0IG1vZHVsZSkgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE1vbm9tZXJzRGljdEZyb21MaWIoXG4gIG1vbm9tZXJTZXF1ZW5jZXNBcnJheTogc3RyaW5nW11bXSwgbW9ub21lcnNMaWJMaXN0OiBhbnlbXSwgcG9seW1lclR5cGU6IEhFTE1fUE9MWU1FUl9UWVBFLCBhbHBoYWJldDogQUxQSEFCRVRcbik6IFByb21pc2U8TWFwPHN0cmluZywgTW9sR3JhcGg+PiB7XG4gIC8vIHRvZG86IGV4Y2VwdGlvbiAtIG5vIGdhcHMsIG5vIGVtcHR5IHN0cmluZyBtb25vbWVyc1xuICBjb25zdCBmb3JtYXR0ZWRNb25vbWVyTGliID0gZ2V0Rm9ybWF0dGVkTW9ub21lckxpYihtb25vbWVyc0xpYkxpc3QsIHBvbHltZXJUeXBlLCBhbHBoYWJldCk7XG4gIGNvbnN0IG1vbm9tZXJzRGljdCA9IG5ldyBNYXA8c3RyaW5nLCBNb2xHcmFwaD4oKTtcblxuICBjb25zdCBtb2R1bGVSZGtpdCA9IGF3YWl0IGdyb2suZnVuY3Rpb25zLmNhbGwoJ0NoZW06Z2V0UmRLaXRNb2R1bGUnKTtcblxuICBjb25zdCBwb2ludGVyVG9CcmFuY2hBbmdsZTogTnVtYmVyV3JhcHBlciA9IHtcbiAgICB2YWx1ZTogbnVsbFxuICB9O1xuXG4gIC8vIHRoaXMgbXVzdCBOT1QgYmUgcGxhY2VkIGFmdGVyIHRyYW5zbGF0aW5nIG1vbm9tZXIgc2VxdWVuY2VzXG4gIC8vIGJlY2F1c2UgYWRkaW5nIGJyYW5jaCBtb25vbWVycyBmb3IgbnVjbGVvYmFzZXMgcmVsaWVzIG9uIHRoZXNlIGRhdGFcbiAgaWYgKHBvbHltZXJUeXBlID09PSBIRUxNX1BPTFlNRVJfVFlQRS5STkEpIHtcbiAgICBjb25zdCBzeW1ib2xzID0gKGFscGhhYmV0ID09PSBBTFBIQUJFVC5STkEpID9cbiAgICAgIFtSSUJPU0UsIFBIT1NQSEFURV0gOiBbREVPWFlSSUJPU0UsIFBIT1NQSEFURV07XG4gICAgZm9yIChjb25zdCBzeW0gb2Ygc3ltYm9scylcbiAgICAgIGFkZE1vbm9tZXJUb0RpY3QobW9ub21lcnNEaWN0LCBzeW0sIGZvcm1hdHRlZE1vbm9tZXJMaWIsIG1vZHVsZVJka2l0LCBwb2x5bWVyVHlwZSwgcG9pbnRlclRvQnJhbmNoQW5nbGUpO1xuICB9XG5cbiAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgbW9ub21lclNlcXVlbmNlc0FycmF5Lmxlbmd0aDsgKytyb3cpIHtcbiAgICBjb25zdCBtb25vbWVyU2VxOiBzdHJpbmdbXSA9IG1vbm9tZXJTZXF1ZW5jZXNBcnJheVtyb3ddO1xuICAgIGZvciAoY29uc3Qgc3ltIG9mIG1vbm9tZXJTZXEpIHtcbiAgICAgIGlmIChzeW0gPT09ICcnKSBjb250aW51ZTsgLy8gU2tpcCBnYXAvZW1wdHkgbW9ub21lciBmb3IgTVNBXG4gICAgICB0cnkge1xuICAgICAgICBhZGRNb25vbWVyVG9EaWN0KG1vbm9tZXJzRGljdCwgc3ltLCBmb3JtYXR0ZWRNb25vbWVyTGliLFxuICAgICAgICAgIG1vZHVsZVJka2l0LCBwb2x5bWVyVHlwZSwgcG9pbnRlclRvQnJhbmNoQW5nbGUpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZXJyVHh0ID0gZXJyb3JUb0NvbnNvbGUoZXJyKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgYmlvIGxpYjogZ2V0TW9ub21lcnNEaWN0RnJvbUxpYigpIHN5bT0nJHtzeW19JywgZXJyb3I6XFxuYCArIGVyclR4dCk7XG4gICAgICAgIGNvbnN0IGVyck1zZyA9IGBjYW4ndCBnZXQgbW9ub21lciAnJHtzeW19JyBmcm9tIGxpYnJhcnk6ICR7ZXJyVHh0fWA7IC8vIFRleHQgZm9yIERhdGFncm9rIGVycm9yIGJhbG9vblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW9ub21lcnNEaWN0O1xufVxuXG5mdW5jdGlvbiBnZXRBbmdsZUJldHdlZW5TdWdhckJyYW5jaEFuZE9ZKG1vbEdyYXBoOiBNb2xHcmFwaCk6IG51bWJlciB7XG4gIGNvbnN0IHggPSBtb2xHcmFwaC5hdG9tcy54O1xuICBjb25zdCB5ID0gbW9sR3JhcGguYXRvbXMueTtcbiAgY29uc3Qgck5vZGUgPSBtb2xHcmFwaC5tZXRhLnJOb2Rlc1syXSAtIDE7XG4gIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG1vbEdyYXBoLm1ldGEudGVybWluYWxOb2Rlc1syXSAtIDE7XG5cbiAgY29uc3QgeFNoaWZ0ID0geFtyTm9kZV0gLSB4W3Rlcm1pbmFsTm9kZV07XG4gIGNvbnN0IHlTaGlmdCA9IHlbck5vZGVdIC0geVt0ZXJtaW5hbE5vZGVdO1xuXG4gIHJldHVybiBNYXRoLmF0YW4oeVNoaWZ0L3hTaGlmdCkgKyBNYXRoLlBJLzI7XG59XG5cbi8qKiBHZXQgYSBtYXBwaW5nIG9mIG1vbm9tZXIgc3ltYm9scyB0byBNb2xHcmFwaCBvYmplY3RzIGZyb20gYSBtYXAgd2hvc2Uga2V5c1xuICogYXJlIHN5bWJvbHMgYW5kIHZhbHVlcywgVjMwMDAgbW9sZmlsZXMgKi9cbmZ1bmN0aW9uIGdldE1vbm9tZXJzRGljdEZyb21NYXAoc3ltYm9sVG9Nb2xmaWxlVjNLTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogTWFwPHN0cmluZywgTW9sR3JhcGg+IHtcbiAgY29uc3QgbW9ub21lcnNEaWN0ID0gbmV3IE1hcDxzdHJpbmcsIE1vbEdyYXBoPigpO1xuICBjb25zdCBtYXBLZXlMaXN0ID0gQXJyYXkuZnJvbShzeW1ib2xUb01vbGZpbGVWM0tNYXAua2V5cygpKTtcblxuICBmb3IgKGNvbnN0IHN5bSBvZiBtYXBLZXlMaXN0KSB7XG4gICAgY29uc3QgbW9sZmlsZVYzSyA9IHN5bWJvbFRvTW9sZmlsZVYzS01hcC5nZXQoc3ltKSE7IC8vICEgaXMgZ3VhcmFudGVlZFxuXG4gICAgY29uc3QgY291bnRzID0gcGFyc2VBdG9tQW5kQm9uZENvdW50cyhtb2xmaWxlVjNLKTtcbiAgICBjb25zdCBhdG9tcyA9IHBhcnNlQXRvbUJsb2NrKG1vbGZpbGVWM0ssIGNvdW50cy5hdG9tQ291bnQpO1xuICAgIGNvbnN0IGJvbmRzID0gcGFyc2VCb25kQmxvY2sobW9sZmlsZVYzSywgY291bnRzLmJvbmRDb3VudCk7XG5cbiAgICAvLyB0aGUgck5vZGVzIGFyZSBzZXQgdG8gMHRoIGFuZCB0aGUgbGFzdCBhdG9tIVxuICAgIC8vIHRoaXMgaXMgdXNlZCBiZWNhdXNlIGFzIGZvciBub3cgaXQgaXMgdW5jbGVhciBob3cgdG8gaW5jbHVkZSB0aGUgUi1ncm91cHNcbiAgICAvLyBpbnRvIHRoZSBWM0sgbW9sZmlsZVxuICAgIGNvbnN0IG1ldGEgPSBnZXRNb25vbWVyTWV0YWRhdGEoYXRvbXMsIGJvbmRzKTtcblxuICAgIGNvbnN0IG1vbm9tZXJHcmFwaDogTW9sR3JhcGggPSB7YXRvbXM6IGF0b21zLCBib25kczogYm9uZHMsIG1ldGE6IG1ldGF9O1xuXG4gICAgY29uc3QgbGVmdE5vZGVJZHggPSBtZXRhLnJOb2Rlc1swXSAtIDE7XG4gICAgY29uc3QgcmlnaHROb2RlSWR4ID0gbWV0YS50ZXJtaW5hbE5vZGVzWzFdIC0gMTtcbiAgICAvLyB0b2RvOiBjb25zaWRlciByb3RhdGlvbj9cbiAgICBhZGp1c3RCYWNrYm9uZU1vbm9tZXJHcmFwaChtb25vbWVyR3JhcGgsIGxlZnROb2RlSWR4LCByaWdodE5vZGVJZHgpO1xuXG4gICAgLy8gc2V0IHNoaWZ0c1xuICAgIC8vIHRvZG86IHdyYXAgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbj9cbiAgICBtb25vbWVyR3JhcGgubWV0YS5iYWNrYm9uZVNoaWZ0ID0gZ2V0U2hpZnRCZXR3ZWVuTm9kZXMobW9ub21lckdyYXBoLCByaWdodE5vZGVJZHgsIGxlZnROb2RlSWR4KTtcblxuICAgIHJlbW92ZU5vZGVBbmRCb25kcyhtb25vbWVyR3JhcGgsIG1vbm9tZXJHcmFwaC5tZXRhLnJOb2Rlc1sxXSk7XG5cbiAgICBtb25vbWVyc0RpY3Quc2V0KHN5bSwgbW9ub21lckdyYXBoKTtcbiAgfVxuICAvLyBjb25zb2xlLmxvZyhtb25vbWVyc0RpY3QpO1xuXG4gIHJldHVybiBtb25vbWVyc0RpY3Q7XG59XG5cbi8qKiBBZGRzIE1vbEdyYXBoIG9iamVjdCBmb3IgJ3N5bScgdG8gdGhlIG1vbm9tZXJzIGRpY3Qgd2hlbiBuZWNlc3NhcnkgICovXG5mdW5jdGlvbiBhZGRNb25vbWVyVG9EaWN0KFxuICBtb25vbWVyc0RpY3Q6IE1hcDxzdHJpbmcsIE1vbEdyYXBoPiwgc3ltOiBzdHJpbmcsXG4gIGZvcm1hdHRlZE1vbm9tZXJMaWI6IE1hcDxzdHJpbmcsIGFueT4sIG1vZHVsZVJka2l0OiBhbnksXG4gIHBvbHltZXJUeXBlOiBIRUxNX1BPTFlNRVJfVFlQRSwgcG9pbnRlclRvQnJhbmNoQW5nbGU6IE51bWJlcldyYXBwZXJcbik6IHZvaWQge1xuICBpZiAoIW1vbm9tZXJzRGljdC5oYXMoc3ltKSkge1xuICAgIGNvbnN0IG1vbm9tZXJEYXRhOiBNb2xHcmFwaCB8IG51bGwgPVxuICAgICAgZ2V0TW9sR3JhcGgoc3ltLCBmb3JtYXR0ZWRNb25vbWVyTGliLCBtb2R1bGVSZGtpdCwgcG9seW1lclR5cGUsIHBvaW50ZXJUb0JyYW5jaEFuZ2xlKTtcbiAgICBpZiAobW9ub21lckRhdGEpXG4gICAgICBtb25vbWVyc0RpY3Quc2V0KHN5bSwgbW9ub21lckRhdGEpO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9ub21lciB3aXRoIHN5bWJvbCAnJHtzeW19JyBpcyBhYnNlbnQgdGhlIG1vbm9tZXIgbGlicmFyeWApO1xuICAgIC8vIHRvZG86IGhhbmRsZSBleGNlcHRpb25cbiAgfVxufVxuXG4vKiogQ29uc3RydWN0IHRoZSBNb2xHcmFwaCBvYmplY3QgZm9yIHNwZWNpZmllZCBtb25vbWVyU3ltYm9sOiB0aGUgYXNzb2NpYXRlZFxuICogZ3JhcGggaXMgYWRqdXN0ZWQgaW4gWFkgcGxhbmUgYW5kIGZpbGxlZCB3aXRoIGRlZmF1bHQgUi1ncm91cHMgKi9cbmZ1bmN0aW9uIGdldE1vbEdyYXBoKFxuICBtb25vbWVyU3ltYm9sOiBzdHJpbmcsIGZvcm1hdHRlZE1vbm9tZXJMaWI6IE1hcDxzdHJpbmcsIGFueT4sXG4gIG1vZHVsZVJka2l0OiBhbnksIHBvbHltZXJUeXBlOiBIRUxNX1BPTFlNRVJfVFlQRSxcbiAgcG9pbnRlclRvQnJhbmNoQW5nbGU6IE51bWJlcldyYXBwZXJcbik6IE1vbEdyYXBoIHwgbnVsbCB7XG4gIGlmICghZm9ybWF0dGVkTW9ub21lckxpYi5oYXMobW9ub21lclN5bWJvbCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBsaWJPYmplY3QgPSBmb3JtYXR0ZWRNb25vbWVyTGliLmdldChtb25vbWVyU3ltYm9sKTtcbiAgICBjb25zdCBjYXBHcm91cHMgPSBwYXJzZUNhcEdyb3VwcyhsaWJPYmplY3RbSEVMTV9GSUVMRFMuUkdST1VQU10pO1xuICAgIGNvbnN0IGNhcEdyb3VwSWR4TWFwID0gcGFyc2VDYXBHcm91cElkeE1hcChsaWJPYmplY3RbSEVMTV9GSUVMRFMuTU9MRklMRV0pO1xuICAgIGNvbnN0IG1vbGZpbGVWM0sgPSBjb252ZXJ0TW9sZmlsZVRvVjNLKHJlbW92ZVJHcm91cExpbmVzKGxpYk9iamVjdFtIRUxNX0ZJRUxEUy5NT0xGSUxFXSksIG1vZHVsZVJka2l0KTtcbiAgICBjb25zdCBjb3VudHMgPSBwYXJzZUF0b21BbmRCb25kQ291bnRzKG1vbGZpbGVWM0spO1xuXG4gICAgY29uc3QgYXRvbXMgPSBwYXJzZUF0b21CbG9jayhtb2xmaWxlVjNLLCBjb3VudHMuYXRvbUNvdW50KTtcbiAgICBjb25zdCBib25kcyA9IHBhcnNlQm9uZEJsb2NrKG1vbGZpbGVWM0ssIGNvdW50cy5ib25kQ291bnQpO1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNb25vbWVyTWV0YWRhdGEoYXRvbXMsIGJvbmRzLCBjYXBHcm91cHMsIGNhcEdyb3VwSWR4TWFwKTtcblxuICAgIGNvbnN0IG1vbm9tZXJHcmFwaDogTW9sR3JhcGggPSB7YXRvbXM6IGF0b21zLCBib25kczogYm9uZHMsIG1ldGE6IG1ldGF9O1xuXG4gICAgaWYgKHBvbHltZXJUeXBlID09PSBIRUxNX1BPTFlNRVJfVFlQRS5QRVBUSURFKSB7XG4gICAgICBhZGp1c3RQZXB0aWRlTW9ub21lckdyYXBoKG1vbm9tZXJHcmFwaCk7XG4gICAgfSBlbHNlIHsgLy8gbnVjbGVvdGlkZXNcbiAgICAgIGlmIChtb25vbWVyU3ltYm9sID09PSBSSUJPU0UgfHwgbW9ub21lclN5bWJvbCA9PT0gREVPWFlSSUJPU0UpXG4gICAgICAgIGFkanVzdFN1Z2FyTW9ub21lckdyYXBoKG1vbm9tZXJHcmFwaCwgcG9pbnRlclRvQnJhbmNoQW5nbGUpO1xuICAgICAgZWxzZSBpZiAobW9ub21lclN5bWJvbCA9PT0gUEhPU1BIQVRFKVxuICAgICAgICBhZGp1c3RQaG9zcGhhdGVNb25vbWVyR3JhcGgobW9ub21lckdyYXBoKTtcbiAgICAgIGVsc2VcbiAgICAgICAgYWRqdXN0QmFzZU1vbm9tZXJHcmFwaChtb25vbWVyR3JhcGgsIHBvaW50ZXJUb0JyYW5jaEFuZ2xlKTtcbiAgICB9XG5cbiAgICBzZXRTaGlmdHNBbmRUZXJtaW5hbE5vZGVzKHBvbHltZXJUeXBlLCBtb25vbWVyR3JhcGgsIG1vbm9tZXJTeW1ib2wpO1xuICAgIC8vIHRvZG86IHJlc3RvcmUgYWZ0ZXIgZGVidWdnaW5nXG4gICAgcmVtb3ZlSHlkcm9nZW4obW9ub21lckdyYXBoKTtcblxuICAgIHJldHVybiBtb25vbWVyR3JhcGg7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0U2hpZnRzQW5kVGVybWluYWxOb2RlcyhcbiAgcG9seW1lclR5cGU6IEhFTE1fUE9MWU1FUl9UWVBFLCBtb25vbWVyR3JhcGg6IE1vbEdyYXBoLCBtb25vbWVyU3ltYm9sOiBzdHJpbmdcbik6IHZvaWQge1xuICAvLyByZW1vdmUgdGhlICdyaWdodG1vc3QnIGNoYWluLWV4dGVuZGluZyByLWdyb3VwIG5vZGUgaW4gdGhlIGJhY2tib25lXG4gIGlmIChwb2x5bWVyVHlwZSA9PT0gSEVMTV9QT0xZTUVSX1RZUEUuUEVQVElERSkge1xuICAgIHNldFNoaWZ0cyhtb25vbWVyR3JhcGgsIHBvbHltZXJUeXBlKTtcbiAgICByZW1vdmVOb2RlQW5kQm9uZHMobW9ub21lckdyYXBoLCBtb25vbWVyR3JhcGgubWV0YS5yTm9kZXNbMV0pO1xuICB9IGVsc2UgeyAvLyBudWNsZW90aWRlc1xuICAgIGlmIChtb25vbWVyU3ltYm9sID09PSBSSUJPU0UgfHwgbW9ub21lclN5bWJvbCA9PT0gREVPWFlSSUJPU0UpIHtcbiAgICAgIC8vIHJlbW92ZSBSMlxuICAgICAgcmVtb3ZlTm9kZUFuZEJvbmRzKG1vbm9tZXJHcmFwaCwgbW9ub21lckdyYXBoLm1ldGEuck5vZGVzWzFdKTtcbiAgICAgIC8vIHNldCB0ZXJtaW5hbE5vZGUyIChveHlnZW4pIGFzIG5ldyBSMlxuICAgICAgbW9ub21lckdyYXBoLm1ldGEuck5vZGVzWzFdID0gbW9ub21lckdyYXBoLm1ldGEudGVybWluYWxOb2Rlc1sxXTtcbiAgICAgIHNldFRlcm1pbmFsTm9kZXMobW9ub21lckdyYXBoLmJvbmRzLCBtb25vbWVyR3JhcGgubWV0YSk7IC8vIHNldCB0ZXJtaW5hbCBub2RlcyBhbmV3XG4gICAgICBzZXRTaGlmdHMobW9ub21lckdyYXBoLCBwb2x5bWVyVHlwZSk7XG4gICAgICAvLyByZW1vdmUgJ25ldycgUjIgKG94eWdlbilcbiAgICAgIHJlbW92ZU5vZGVBbmRCb25kcyhtb25vbWVyR3JhcGgsIG1vbm9tZXJHcmFwaC5tZXRhLnJOb2Rlc1sxXSk7XG4gICAgICAvLyByZW1vdmUgUjFcbiAgICAgIHJlbW92ZU5vZGVBbmRCb25kcyhtb25vbWVyR3JhcGgsIG1vbm9tZXJHcmFwaC5tZXRhLnJOb2Rlc1swXSk7XG4gICAgICAvLyByZW1vdmUgdGhlIGJyYW5jaGluZyByLWdyb3VwXG4gICAgICByZW1vdmVOb2RlQW5kQm9uZHMobW9ub21lckdyYXBoLCBtb25vbWVyR3JhcGgubWV0YS5yTm9kZXNbMl0pO1xuICAgIH0gZWxzZSBpZiAobW9ub21lclN5bWJvbCA9PT0gUEhPU1BIQVRFKSB7XG4gICAgICBtb25vbWVyR3JhcGgubWV0YS50ZXJtaW5hbE5vZGVzWzBdID0gbW9ub21lckdyYXBoLm1ldGEuck5vZGVzWzBdO1xuICAgICAgc2hpZnRDb29yZGluYXRlcyhcbiAgICAgICAgbW9ub21lckdyYXBoLFxuICAgICAgICAtbW9ub21lckdyYXBoLmF0b21zLnhbbW9ub21lckdyYXBoLm1ldGEudGVybWluYWxOb2Rlc1swXSAtIDFdLFxuICAgICAgICAtbW9ub21lckdyYXBoLmF0b21zLnlbbW9ub21lckdyYXBoLm1ldGEudGVybWluYWxOb2Rlc1swXSAtIDFdXG4gICAgICApO1xuICAgICAgc2V0U2hpZnRzKG1vbm9tZXJHcmFwaCwgcG9seW1lclR5cGUpO1xuICAgICAgcmVtb3ZlTm9kZUFuZEJvbmRzKG1vbm9tZXJHcmFwaCwgbW9ub21lckdyYXBoLm1ldGEuck5vZGVzWzFdKTtcbiAgICB9IGVsc2UgeyAvLyBudWNsZW9iYXNlc1xuICAgICAgLy8gcmVtb3ZlTm9kZUFuZEJvbmRzKG1vbm9tZXJHcmFwaCwgbW9ub21lckdyYXBoLm1ldGEuck5vZGVzWzBdKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gdG9kbzogc2RvY1xuZnVuY3Rpb24gZ2V0TW9ub21lck1ldGFkYXRhKGF0b21zOiBBdG9tcywgYm9uZHM6IEJvbmRzLCBjYXBHcm91cHM/OiBzdHJpbmdbXSwgY2FwR3JvdXBJZHhNYXA/OiBNYXA8bnVtYmVyLCBudW1iZXI+XG4pOiBNb25vbWVyTWV0YWRhdGEge1xuICBjb25zdCBtZXRhOiBNb25vbWVyTWV0YWRhdGEgPSB7XG4gICAgYmFja2JvbmVTaGlmdDogbnVsbCxcbiAgICBicmFuY2hTaGlmdDogbnVsbCxcbiAgICB0ZXJtaW5hbE5vZGVzOiBbXSxcbiAgICByTm9kZXM6IFtdLFxuICB9O1xuXG4gIC8vIGNvcnJlc3BvbmRzIHRvIE1PREUuU1RBTkRBUkRcbiAgY29uc3Qgc3RhbmRhcmRNb2RlID0gdHlwZW9mIGNhcEdyb3VwcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNhcEdyb3VwSWR4TWFwICE9PSAndW5kZWZpbmVkJztcblxuICBpZiAoc3RhbmRhcmRNb2RlKSB7XG4gICAgc3Vic3RpdHV0ZUNhcEdyb3VwcyhhdG9tcywgY2FwR3JvdXBzISwgY2FwR3JvdXBJZHhNYXAhKTtcbiAgICBzZXRSTm9kZXMoY2FwR3JvdXBJZHhNYXAhLCBtZXRhKTtcbiAgfSBlbHNlIHsgLy8gdGhlIGNhc2UgdXNlZCBpbiBTZXF1ZW5jZVRyYW5zbGF0b3JcbiAgICAvLyB0b2RvOiB2ZXJpZnkgdGhhdCB0aGUgbW9ub21lcnMgYXJlIHByZXBhcmVkIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGlzIHdvcmtzXG4gICAgbWV0YS5yTm9kZXMgPSBbMCwgYXRvbXMueC5sZW5ndGhdO1xuICB9XG5cbiAgc2V0VGVybWluYWxOb2Rlcyhib25kcywgbWV0YSk7XG4gIHJldHVybiBtZXRhO1xufVxuXG4vKiogUGFyc2UgZWxlbWVudCBzeW1ib2xzIGZvciBSLWdyb3VwcyBmcm9tIHRoZSBIRUxNIG1vbm9tZXIgbGlicmFyeSBSLWdyb3Vwc1xuICogZmllbGQgICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDYXBHcm91cHMockdyb3VwT2JqTGlzdDogYW55W10pOiBzdHJpbmdbXSB7XG4gIC8vIHNwZWNpZmljYWxseSBmb3IgSEVMTUNvcmVMaWJyYXJ5XG4gIC8vIGNvbnNpZGVyZWQgb25seSBtb25vYXRvbWljIHJncm91cHNcbiAgLy8gc3VwcG9zaW5nIHRoYXQgZWxlbWVudHMgaW4gckdyb3VwT2JqTGlzdCBhcmUgc29ydGVkIHcuci50LiB0aGUgcmdyb3VwcyBpZHhcbiAgY29uc3QgY2FwR3JvdXBzQXJyYXk6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3Qgb2JqIG9mIHJHcm91cE9iakxpc3QpIHtcbiAgICBsZXQgY2FwR3JvdXA6IHN0cmluZyA9IG9ialtSR1JPVVBfRklFTERTLkNBUF9HUk9VUF9TTUlMRVNdO1xuXG4gICAgLy8gaW4gc29tZSBjYXNlcyB0aGUgc21pbGVzIGZpZWxkIGlzIHdyaXR0ZW4gd2l0aCB1cHBlcmNhc2VcbiAgICBpZiAoIWNhcEdyb3VwKVxuICAgICAgY2FwR3JvdXAgPSBvYmpbUkdST1VQX0ZJRUxEUy5DQVBfR1JPVVBfU01JTEVTX1VQUEVSQ0FTRV07XG4gICAgY2FwR3JvdXAgPSBjYXBHcm91cC5yZXBsYWNlKC8oXFxbfFxcXXxcXCp8OnxcXGQpL2csICcnKTtcbiAgICBjYXBHcm91cHNBcnJheS5wdXNoKGNhcEdyb3VwKTtcbiAgfVxuICByZXR1cm4gY2FwR3JvdXBzQXJyYXk7XG59XG5cbi8qKiBTdWJzdGl0dXRlIHRoZSBjYXAgZ3JvdXAgZWxlbWVudHMgaW5zdGVhZCBvZiBSIyAqL1xuZnVuY3Rpb24gc3Vic3RpdHV0ZUNhcEdyb3VwcyhcbiAgYXRvbXM6IEF0b21zLCBjYXBHcm91cHM6IHN0cmluZ1tdLCBjYXBHcm91cElkeE1hcDogTWFwPG51bWJlciwgbnVtYmVyPlxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgW25vZGUsIGNhcElkeF0gb2YgY2FwR3JvdXBJZHhNYXApXG4gICAgYXRvbXMuYXRvbVR5cGVzW25vZGUgLSAxXSA9IGNhcEdyb3Vwc1tjYXBJZHggLSAxXTsgLy8gLTEgYmVjYXVzZSBtb2xmaWxlIGluZGV4aW5nIHN0YXJ0cyBmcm9tIDFcbn1cblxuZnVuY3Rpb24gc2V0Uk5vZGVzKGNhcEdyb3VwSWR4TWFwOiBNYXA8bnVtYmVyLCBudW1iZXI+LCBtZXRhOiBNb25vbWVyTWV0YWRhdGEpOiB2b2lkIHtcbiAgbWV0YS5yTm9kZXMgPSBBcnJheS5mcm9tKGNhcEdyb3VwSWR4TWFwLmtleXMoKSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0YS5yTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGNvbnN0IGogb2YgWzEsIDJdKSB7IC8vIDEgYW5kIDIgYnkgZGVmLiBjb3JyZXNwb25kIHRvICdsZWZ0L3JpZ2h0bW9zdCcgci1ub2Rlc1xuICAgICAgLy8gc3dhcCB0aGUgdmFsdWVzIGlmIG5lY2Vzc2FyeSwgc28gdGhhdCB0aGUgXCJsZWZ0bW9zdFwiIHItbm9kZSBpcyBhdCAwLFxuICAgICAgLy8gYW5kIHRoZSAncmlnaHRtb3N0JywgYXQgMVxuICAgICAgaWYgKGNhcEdyb3VwSWR4TWFwLmdldChtZXRhLnJOb2Rlc1tpXSkgPT09IGopIHtcbiAgICAgICAgY29uc3QgdG1wID0gbWV0YS5yTm9kZXNbaiAtIDFdO1xuICAgICAgICBtZXRhLnJOb2Rlc1tqIC0gMV0gPSBtZXRhLnJOb2Rlc1tpXTtcbiAgICAgICAgbWV0YS5yTm9kZXNbaV0gPSB0bXA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldFRlcm1pbmFsTm9kZXMoYm9uZHM6IEJvbmRzLCBtZXRhOiBNb25vbWVyTWV0YWRhdGEpOiB2b2lkIHtcbiAgY29uc3Qgck5vZGVzID0gbWV0YS5yTm9kZXM7XG4gIG1ldGEudGVybWluYWxOb2RlcyA9IG5ldyBBcnJheTxudW1iZXI+KHJOb2Rlcy5sZW5ndGgpLmZpbGwoMCk7XG4gIGNvbnN0IHRlcm1pbmFsTm9kZXMgPSBtZXRhLnRlcm1pbmFsTm9kZXM7XG4gIGNvbnN0IGF0b21QYWlycyA9IGJvbmRzLmF0b21QYWlycztcbiAgbGV0IGkgPSAwO1xuICBsZXQgaiA9IDA7XG4gIHdoaWxlICgoaSA8IGF0b21QYWlycy5sZW5ndGgpICYmIGogPCB0ZXJtaW5hbE5vZGVzLmxlbmd0aCkge1xuICAgIC8vIHJOb2RlcyBhcnJheSBpcyBzb3J0ZWQgc28gdGhhdCBpdHMgMHRoIGFuZCAxc3QgZWxlbWVudHMgKGlmIGJvdGhcbiAgICAvLyBwcmVzZW50KSBjb3JyZXNwb25kIHRvIHRoZSBjaGFpbiBleHRlbmRpbmcgKGkuZS4gbm90IGJyYW5jaGluZykgci1ncm91cHNcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRlcm1pbmFsTm9kZXMubGVuZ3RoOyArK2spIHtcbiAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgMjsgKytsKSB7XG4gICAgICAgIGlmIChhdG9tUGFpcnNbaV1bbF0gPT09IHJOb2Rlc1trXSkge1xuICAgICAgICAgIHRlcm1pbmFsTm9kZXNba10gPSBhdG9tUGFpcnNbaV1bKGwgKyAxKSAlIDJdO1xuICAgICAgICAgIGlmIChyTm9kZXMubGVuZ3RoID4gMikge1xuICAgICAgICAgIH1cbiAgICAgICAgICArK2o7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgKytpO1xuICB9XG59XG5cbi8qKiBTZXRzIHNoaWZ0cyBpbiAnbWV0YScgYXR0cmlidXRlIG9mIE1vbEdyYXBoICAqL1xuZnVuY3Rpb24gc2V0U2hpZnRzKG1vbEdyYXBoOiBNb2xHcmFwaCwgcG9seW1lclR5cGU6IEhFTE1fUE9MWU1FUl9UWVBFKTogdm9pZCB7XG4gIGlmIChtb2xHcmFwaC5tZXRhLnJOb2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgbW9sR3JhcGgubWV0YS5iYWNrYm9uZVNoaWZ0ID0gZ2V0U2hpZnRCZXR3ZWVuTm9kZXMoXG4gICAgICBtb2xHcmFwaCwgbW9sR3JhcGgubWV0YS5yTm9kZXNbMV0gLSAxLFxuICAgICAgbW9sR3JhcGgubWV0YS50ZXJtaW5hbE5vZGVzWzBdIC0gMVxuICAgICk7XG4gIH1cblxuICBpZiAocG9seW1lclR5cGUgPT09IEhFTE1fUE9MWU1FUl9UWVBFLlJOQSAmJiBtb2xHcmFwaC5tZXRhLnJOb2Rlcy5sZW5ndGggPiAyKSB7XG4gICAgbW9sR3JhcGgubWV0YS5icmFuY2hTaGlmdCA9IGdldFNoaWZ0QmV0d2Vlbk5vZGVzKFxuICAgICAgbW9sR3JhcGgsIG1vbEdyYXBoLm1ldGEuck5vZGVzWzJdIC0gMSxcbiAgICAgIG1vbEdyYXBoLm1ldGEudGVybWluYWxOb2Rlc1swXSAtIDFcbiAgICApO1xuICB9XG59XG5cbi8qKiBSZXR1cm5zIHRoZSBwYWlyIFt4U2hpZnQsIHlTaGlmdF0gZm9yIHNwZWNpZmllZCBub2RlIGluZGljZXMgKi9cbmZ1bmN0aW9uIGdldFNoaWZ0QmV0d2Vlbk5vZGVzKFxuICBtb2xHcmFwaDogTW9sR3JhcGgsIHJpZ2h0Tm9kZUlkeDogbnVtYmVyLCBsZWZ0Tm9kZUlkeDogbnVtYmVyXG4pOiBudW1iZXJbXSB7XG4gIHJldHVybiBbXG4gICAga2VlcFByZWNpc2lvbihcbiAgICAgIG1vbEdyYXBoLmF0b21zLnhbcmlnaHROb2RlSWR4XSAtXG4gICAgICBtb2xHcmFwaC5hdG9tcy54W2xlZnROb2RlSWR4XVxuICAgICksXG4gICAga2VlcFByZWNpc2lvbihcbiAgICAgIG1vbEdyYXBoLmF0b21zLnlbcmlnaHROb2RlSWR4XSAtXG4gICAgICBtb2xHcmFwaC5hdG9tcy55W2xlZnROb2RlSWR4XVxuICAgICksXG4gIF07XG59XG5cbi8qKiBIZWxwZXIgZnVuY3Rpb24gbmVjZXNzYXJ5IHRvIGJ1aWxkIGEgY29ycmVjdCBWMzAwMCBtb2xmaWxlIG91dCBvZiBWMjAwMCB3aXRoXG4gKiBzcGVjaWZpZWQgci1ncm91cHMqL1xuZnVuY3Rpb24gcmVtb3ZlUkdyb3VwTGluZXMobW9sZmlsZVYySzogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGJlZ2luID0gbW9sZmlsZVYySy5pbmRleE9mKFYyS19BX0xJTkUsIDApO1xuICBpZiAoYmVnaW4gPT09IC0xKVxuICAgIGJlZ2luID0gbW9sZmlsZVYySy5pbmRleE9mKFYyS19SR1BfTElORSk7XG4gIGNvbnN0IGVuZCA9IG1vbGZpbGVWMksuaW5kZXhPZihWM0tfRU5ELCBiZWdpbik7XG4gIHJldHVybiBtb2xmaWxlVjJLLnN1YnN0cmluZygwLCBiZWdpbikgKyBtb2xmaWxlVjJLLnN1YnN0cmluZyhlbmQpO1xufVxuXG4vKiogVjIwMDAgdG8gVjMwMDAgY29udmVydGVyICAqL1xuZnVuY3Rpb24gY29udmVydE1vbGZpbGVUb1YzSyhtb2xmaWxlVjJLOiBzdHJpbmcsIG1vZHVsZVJka2l0OiBhbnkpOiBzdHJpbmcge1xuICAvLyBUaGUgc3RhbmRhcmQgQ2hlbSBjb252ZXJ0ZXIgaXMgbm90IHVzZWQgaGVyZSBiZWNhdXNlIGl0IHJlbGllcyBvbiBjcmVhdGlvbiBvZiBtb2R1bGVSZGtpdCBvbiBlYWNoIGl0ZXJhdGlvblxuICBjb25zdCBtb2xPYmogPSBtb2R1bGVSZGtpdC5nZXRfbW9sKG1vbGZpbGVWMkspO1xuICBjb25zdCBtb2xmaWxlVjNLID0gbW9sT2JqLmdldF92M0ttb2xibG9jaygpO1xuICBtb2xPYmouZGVsZXRlKCk7XG4gIHJldHVybiBtb2xmaWxlVjNLO1xufVxuXG4vKiogUGFyc2UgVjMwMDAgYm9uZCBibG9jayBhbmQgY29uc3RydWN0IHRoZSBCb25kcyBvYmplY3QgKi9cbmZ1bmN0aW9uIHBhcnNlQm9uZEJsb2NrKG1vbGZpbGVWM0s6IHN0cmluZywgYm9uZENvdW50OiBudW1iZXIpOiBCb25kcyB7XG4gIGNvbnN0IGJvbmRUeXBlczogVWludDMyQXJyYXkgPSBuZXcgVWludDMyQXJyYXkoYm9uZENvdW50KTtcbiAgY29uc3QgYXRvbVBhaXJzOiBudW1iZXJbXVtdID0gbmV3IEFycmF5KGJvbmRDb3VudCk7XG4gIGNvbnN0IGJvbmRDb25maWd1cmF0aW9uID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgY29uc3Qga3dhcmdzID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcblxuICBsZXQgYmVnaW4gPSBtb2xmaWxlVjNLLmluZGV4T2YoVjNLX0JFR0lOX0JPTkRfQkxPQ0spO1xuICBiZWdpbiA9IG1vbGZpbGVWM0suaW5kZXhPZignXFxuJywgYmVnaW4pO1xuICBsZXQgZW5kID0gYmVnaW47XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYm9uZENvdW50OyArK2kpIHtcbiAgICAvLyBwYXJzZSBib25kIHR5cGUgYW5kIGF0b20gcGFpclxuICAgIGNvbnN0IHBhcnNlZFZhbHVlczogbnVtYmVyW10gPSBuZXcgQXJyYXkoMyk7XG4gICAgYmVnaW4gPSBtb2xmaWxlVjNLLmluZGV4T2YoVjNLX0JFR0lOX0RBVEFfTElORSwgZW5kKSArIFYzS19JRFhfU0hJRlQ7XG4gICAgZW5kID0gbW9sZmlsZVYzSy5pbmRleE9mKCcgJywgYmVnaW4pO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgMzsgKytrKSB7XG4gICAgICBiZWdpbiA9IGVuZCArIDE7XG4gICAgICBlbmQgPSBNYXRoLm1pbihtb2xmaWxlVjNLLmluZGV4T2YoJ1xcbicsIGJlZ2luKSwgbW9sZmlsZVYzSy5pbmRleE9mKCcgJywgYmVnaW4pKTtcbiAgICAgIHBhcnNlZFZhbHVlc1trXSA9IHBhcnNlSW50KG1vbGZpbGVWM0suc2xpY2UoYmVnaW4sIGVuZCkpO1xuICAgIH1cbiAgICBib25kVHlwZXNbaV0gPSBwYXJzZWRWYWx1ZXNbMF07XG4gICAgYXRvbVBhaXJzW2ldID0gcGFyc2VkVmFsdWVzLnNsaWNlKDEpO1xuXG4gICAgLy8gcGFyc2Uga2V5d29yZCBhcmd1bWVudHNcbiAgICBjb25zdCBlbmRPZkxpbmUgPSBtb2xmaWxlVjNLLmluZGV4T2YoJ1xcbicsIGJlZ2luKTtcbiAgICBsZXQgbGluZVJlbWFpbmRlciA9IG1vbGZpbGVWM0suc2xpY2UoZW5kLCBlbmRPZkxpbmUpO1xuICAgIGxldCBiZWdpbkNmZyA9IGxpbmVSZW1haW5kZXIuaW5kZXhPZihWM0tfQk9ORF9DT05GSUcpO1xuICAgIGlmIChiZWdpbkNmZyAhPT0gLTEpIHtcbiAgICAgIGJlZ2luQ2ZnID0gbGluZVJlbWFpbmRlci5pbmRleE9mKCc9JywgYmVnaW5DZmcpICsgMTtcbiAgICAgIGxldCBlbmRDZmcgPSBsaW5lUmVtYWluZGVyLmluZGV4T2YoJyAnLCBiZWdpbkNmZyk7XG4gICAgICBpZiAoZW5kQ2ZnID09PSAtMSlcbiAgICAgICAgZW5kQ2ZnID0gbGluZVJlbWFpbmRlci5sZW5ndGg7XG4gICAgICBjb25zdCBib25kQ29uZmlnID0gcGFyc2VJbnQobGluZVJlbWFpbmRlci5zbGljZShiZWdpbkNmZywgZW5kQ2ZnKSk7XG4gICAgICBib25kQ29uZmlndXJhdGlvbi5zZXQoaSwgYm9uZENvbmZpZyk7XG4gICAgICBjb25zdCByZW1vdmVkU3Vic3RyaW5nID0gVjNLX0JPTkRfQ09ORklHICsgYm9uZENvbmZpZy50b1N0cmluZygpO1xuICAgICAgbGluZVJlbWFpbmRlciA9IGxpbmVSZW1haW5kZXIucmVwbGFjZShyZW1vdmVkU3Vic3RyaW5nLCAnJyk7XG4gICAgfVxuICAgIGlmICghbGluZVJlbWFpbmRlcilcbiAgICAgIGt3YXJncy5zZXQoaSwgbGluZVJlbWFpbmRlcik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJvbmRUeXBlczogYm9uZFR5cGVzLFxuICAgIGF0b21QYWlyczogYXRvbVBhaXJzLFxuICAgIGJvbmRDb25maWd1cmF0aW9uOiBib25kQ29uZmlndXJhdGlvbixcbiAgICBrd2FyZ3M6IGt3YXJncyxcbiAgfTtcbn1cblxuLyoqIENvbnN0cnVjdHMgbWFwcGluZyBvZiByLWdyb3VwIG5vZGVzIHRvIGRlZmF1bHQgY2FwR3JvdXBzLCBhbGwgbnVtZXJhdGlvbiBzdGFydGluZyBmcm9tIDEuXG4gKiBBY2NvcmRpbmcgdG8gaHR0cHM6Ly9wdWJzLmFjcy5vcmcvZG9pLzEwLjEwMjEvY2kzMDAxOTI1LCBSMSBhbmQgUjIgYXJlIHRoZSBjaGFpbiBleHRlbmRpbmcgYXR0YWNobWVudCBwb2ludHMsXG4gKiB3aGlsZSBSMyBpcyB0aGUgYnJhbmNoaW5nIGF0dGFjaG1lbnQgcG9pbnQuICovXG5mdW5jdGlvbiBwYXJzZUNhcEdyb3VwSWR4TWFwKG1vbGZpbGVWMks6IHN0cmluZyk6IE1hcDxudW1iZXIsIG51bWJlcj4ge1xuICBjb25zdCBjYXBHcm91cElkeE1hcCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG5cbiAgLy8gcGFyc2UgQS1saW5lcyAoUk5BKVxuICBsZXQgYmVnaW4gPSBtb2xmaWxlVjJLLmluZGV4T2YoVjJLX0FfTElORSwgMCk7XG4gIGxldCBlbmQgPSBiZWdpbjtcbiAgd2hpbGUgKGJlZ2luICE9PSAtMSkge1xuICAgIC8vIHBhcnNlIHRoZSByTm9kZSB0byB3aGljaCB0aGUgY2FwIGdyb3VwIGlzIGF0dGFjaGVkXG4gICAgZW5kID0gbW9sZmlsZVYySy5pbmRleE9mKCdcXG4nLCBiZWdpbik7XG4gICAgY29uc3Qgck5vZGUgPSBwYXJzZUludChtb2xmaWxlVjJLLnN1YnN0cmluZyhiZWdpbiwgZW5kKS5yZXBsYWNlKC9eQVxccysvLCAnJykpO1xuXG4gICAgLy8gcGFyc2UgdGhlIGNhcEdyb3VwIGluZGV4XG4gICAgYmVnaW4gPSBtb2xmaWxlVjJLLmluZGV4T2YoJ1InLCBlbmQpO1xuICAgIGVuZCA9IG1vbGZpbGVWMksuaW5kZXhPZignXFxuJywgYmVnaW4pO1xuICAgIGNvbnN0IGNhcEdyb3VwID0gcGFyc2VJbnQobW9sZmlsZVYySy5zdWJzdHJpbmcoYmVnaW4sIGVuZCkucmVwbGFjZSgvXlIvLCAnJykpO1xuICAgIGNhcEdyb3VwSWR4TWFwLnNldChyTm9kZSwgY2FwR3JvdXApO1xuXG4gICAgYmVnaW4gPSBtb2xmaWxlVjJLLmluZGV4T2YoVjJLX0FfTElORSwgZW5kKTtcbiAgfVxuXG4gIC8vIHBhcnNlIFJHUCBsaW5lcyAobWF5IGJlIG1vcmUgdGhhbiBvbmUgaW4gUk5BIG1vbm9tZXJzKVxuICBiZWdpbiA9IG1vbGZpbGVWMksuaW5kZXhPZihWMktfUkdQX0xJTkUsIDApO1xuICBlbmQgPSBtb2xmaWxlVjJLLmluZGV4T2YoJ1xcbicsIGJlZ2luKTtcbiAgd2hpbGUgKGJlZ2luICE9PSAtMSkge1xuICAgIGJlZ2luICs9IFYyS19SR1BfU0hJRlQ7XG4gICAgZW5kID0gbW9sZmlsZVYySy5pbmRleE9mKCdcXG4nLCBiZWdpbik7XG4gICAgY29uc3QgcmdwU3RyaW5nUGFyc2VkID0gbW9sZmlsZVYySy5zdWJzdHJpbmcoYmVnaW4sIGVuZClcbiAgICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJylcbiAgICAgIC5zcGxpdCgnICcpO1xuICAgIGNvbnN0IHJncEluZGljZXNBcnJheSA9IHJncFN0cmluZ1BhcnNlZC5tYXAoKGVsKSA9PiBwYXJzZUludChlbCkpXG4gICAgICAuc2xpY2UoMSk7IC8vIHNsaWNlIGZyb20gMSBiZWNhdXNlIHRoZSAxc3QgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBwYWlycyBpbiB0aGUgbGluZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmdwSW5kaWNlc0FycmF5Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAvLyB0aGVyZSBtYXkgYmUgY29uZmxpY3RpbmcgY2FwIGdyb3VwIGRlZmluaXRpb25zLCBsaWtlIDMtTy1NZXRoeWxyaWJvc2UgKDIsNSBjb25uZWN0aXZpdHkpIGluIEhFTE1Db3JlTGlicmFyeVxuICAgICAgaWYgKGNhcEdyb3VwSWR4TWFwLmhhcyhyZ3BJbmRpY2VzQXJyYXlbaV0pICYmIGNhcEdyb3VwSWR4TWFwLmdldChyZ3BJbmRpY2VzQXJyYXlbaV0pICE9PSByZ3BJbmRpY2VzQXJyYXlbaSArIDFdKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHItZ3JvdXAgaW5kZXggJHtyZ3BJbmRpY2VzQXJyYXlbaV19IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgd2l0aCBhIGRpZmZlcmVudCB2YWx1ZWApO1xuICAgICAgZWxzZVxuICAgICAgICBjYXBHcm91cElkeE1hcC5zZXQocmdwSW5kaWNlc0FycmF5W2ldLCByZ3BJbmRpY2VzQXJyYXlbaSArIDFdKTtcbiAgICB9XG4gICAgYmVnaW4gPSBtb2xmaWxlVjJLLmluZGV4T2YoVjJLX1JHUF9MSU5FLCBlbmQpO1xuICB9XG4gIHJldHVybiBjYXBHcm91cElkeE1hcDtcbn1cblxuZnVuY3Rpb24gcGFyc2VBdG9tQW5kQm9uZENvdW50cyhtb2xmaWxlVjNLOiBzdHJpbmcpOiB7IGF0b21Db3VudDogbnVtYmVyLCBib25kQ291bnQ6IG51bWJlciB9IHtcbiAgbW9sZmlsZVYzSyA9IG1vbGZpbGVWM0sucmVwbGFjZUFsbCgnXFxyJywgJycpOyAvLyB0byBoYW5kbGUgb2xkIGFuZCBuZXcgc2RmIHN0YW5kYXJkc1xuXG4gIC8vIHBhcnNlIGF0b20gY291bnRcbiAgbGV0IGJlZ2luID0gbW9sZmlsZVYzSy5pbmRleE9mKFYzS19CRUdJTl9DT1VOVFNfTElORSkgKyBWM0tfQ09VTlRTX1NISUZUO1xuICBsZXQgZW5kID0gbW9sZmlsZVYzSy5pbmRleE9mKCcgJywgYmVnaW4gKyAxKTtcbiAgY29uc3QgbnVtT2ZBdG9tcyA9IHBhcnNlSW50KG1vbGZpbGVWM0suc3Vic3RyaW5nKGJlZ2luLCBlbmQpKTtcblxuICAvLyBwYXJzZSBib25kIGNvdW50XG4gIGJlZ2luID0gZW5kICsgMTtcbiAgZW5kID0gbW9sZmlsZVYzSy5pbmRleE9mKCcgJywgYmVnaW4gKyAxKTtcbiAgY29uc3QgbnVtT2ZCb25kcyA9IHBhcnNlSW50KG1vbGZpbGVWM0suc3Vic3RyaW5nKGJlZ2luLCBlbmQpKTtcblxuICByZXR1cm4ge2F0b21Db3VudDogbnVtT2ZBdG9tcywgYm9uZENvdW50OiBudW1PZkJvbmRzfTtcbn1cblxuLyoqIFBhcnNlIFYzMDAwIGF0b20gYmxvY2sgYW5kIHJldHVybiBBdG9tcyBvYmplY3QuIE5PVElDRTogb25seSBhdG9tVHlwZXMsIHgsIHlcbiAqIGFuZCBrd2FyZ3MgZmllbGRzIGFyZSBzZXQgaW4gdGhlIHJldHVybiB2YWx1ZSwgd2l0aCBvdGhlciBmaWVsZHMgZHVtbXkgKi9cbmZ1bmN0aW9uIHBhcnNlQXRvbUJsb2NrKG1vbGZpbGVWM0s6IHN0cmluZywgYXRvbUNvdW50OiBudW1iZXIpOiBBdG9tcyB7XG4gIGNvbnN0IGF0b21UeXBlczogc3RyaW5nW10gPSBuZXcgQXJyYXkoYXRvbUNvdW50KTtcbiAgY29uc3QgeDogRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShhdG9tQ291bnQpO1xuICBjb25zdCB5OiBGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGF0b21Db3VudCk7XG4gIGNvbnN0IGt3YXJnczogc3RyaW5nW10gPSBuZXcgQXJyYXkoYXRvbUNvdW50KTtcblxuICBsZXQgYmVnaW4gPSBtb2xmaWxlVjNLLmluZGV4T2YoVjNLX0JFR0lOX0FUT01fQkxPQ0spOyAvLyBWMzAwMCBhdG9tcyBibG9ja1xuICBiZWdpbiA9IG1vbGZpbGVWM0suaW5kZXhPZignXFxuJywgYmVnaW4pO1xuICBsZXQgZW5kID0gYmVnaW47XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdG9tQ291bnQ7IGkrKykge1xuICAgIGJlZ2luID0gbW9sZmlsZVYzSy5pbmRleE9mKFYzS19CRUdJTl9EQVRBX0xJTkUsIGJlZ2luKSArIFYzS19JRFhfU0hJRlQ7XG4gICAgZW5kID0gbW9sZmlsZVYzSy5pbmRleE9mKCcgJywgYmVnaW4pOyAvLyBza2lwIHRoZSBpZHggcm93XG5cbiAgICAvLyBwYXJzZSBhdG9tIHR5cGVcbiAgICBiZWdpbiA9IGVuZCArIDE7XG4gICAgZW5kID0gbW9sZmlsZVYzSy5pbmRleE9mKCcgJywgYmVnaW4pO1xuICAgIGF0b21UeXBlc1tpXSA9IG1vbGZpbGVWM0suc3Vic3RyaW5nKGJlZ2luLCBlbmQpO1xuXG4gICAgLy8gcGFyc2UgWCBhbmQgWSBjb29yZGluYXRlcyBvZiB0aGUgYXRvbVxuICAgIGNvbnN0IGNvb3JkaW5hdGU6IG51bWJlcltdID0gbmV3IEFycmF5KDIpO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgMjsgKytrKSB7XG4gICAgICBiZWdpbiA9IGVuZCArIDE7XG4gICAgICBlbmQgPSBtb2xmaWxlVjNLLmluZGV4T2YoJyAnLCBiZWdpbik7XG4gICAgICBjb29yZGluYXRlW2tdID0gcGFyc2VGbG9hdChtb2xmaWxlVjNLLnN1YnN0cmluZyhiZWdpbiwgZW5kKSk7XG4gICAgfVxuICAgIHhbaV0gPSBjb29yZGluYXRlWzBdO1xuICAgIHlbaV0gPSBjb29yZGluYXRlWzFdO1xuXG4gICAgLy8gcGFyc2UgdGhlIHJlbWFpbmluZyBwb3NzaWJsZSBrZXl3b3JkIGFyZ3VtZW50c1xuICAgIGJlZ2luID0gZW5kO1xuICAgIGVuZCA9IG1vbGZpbGVWM0suaW5kZXhPZignXFxuJywgYmVnaW4pICsgMTtcbiAgICBrd2FyZ3NbaV0gPSBtb2xmaWxlVjNLLnNsaWNlKGJlZ2luLCBlbmQpO1xuXG4gICAgYmVnaW4gPSBlbmQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGF0b21UeXBlczogYXRvbVR5cGVzLFxuICAgIHg6IHgsXG4gICAgeTogeSxcbiAgICBrd2FyZ3M6IGt3YXJncyxcbiAgfTtcbn1cblxuLyoqIFJlbW92ZSBoeWRyb2dlbiBub2RlcyAqL1xuZnVuY3Rpb24gcmVtb3ZlSHlkcm9nZW4obW9ub21lckdyYXBoOiBNb2xHcmFwaCk6IHZvaWQge1xuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChpIDwgbW9ub21lckdyYXBoLmF0b21zLmF0b21UeXBlcy5sZW5ndGgpIHtcbiAgICBpZiAobW9ub21lckdyYXBoLmF0b21zLmF0b21UeXBlc1tpXSA9PT0gSFlEUk9HRU4pIHtcbiAgICAgIHJlbW92ZU5vZGVBbmRCb25kcyhtb25vbWVyR3JhcGgsIGkgKyAxKTsgLy8gaSArIDEgYmVjYXVzZSBtb2xmaWxlIG5vZGUgaW5kZXhpbmcgc3RhcnRzIGZyb20gMVxuICAgICAgLS1pO1xuICAgICAgLy8gbW9ub21lckdyYXBoLmF0b21zLmF0b21UeXBlc1tpXSA9ICdMaSc7XG4gICAgfVxuICAgICsraTtcbiAgfVxufVxuXG4vKiogUmVtb3ZlIG5vZGUgJ3JlbW92ZWROb2RlJyBhbmQgdGhlIGFzc29jaWF0ZWQgYm9uZHMuIE5vdGljZSwgbnVtZXJhdGlvbiBvZlxuICogbm9kZXMgaW4gbW9sZmlsZXMgc3RhcnRzIGZyb20gMSwgbm90IDAgKi9cbmZ1bmN0aW9uIHJlbW92ZU5vZGVBbmRCb25kcyhtb25vbWVyR3JhcGg6IE1vbEdyYXBoLCByZW1vdmVkTm9kZT86IG51bWJlcik6IHZvaWQge1xuICBpZiAodHlwZW9mIHJlbW92ZWROb2RlICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHJlbW92ZWROb2RlSWR4ID0gcmVtb3ZlZE5vZGUgLSAxO1xuICAgIGNvbnN0IGF0b21zID0gbW9ub21lckdyYXBoLmF0b21zO1xuICAgIGNvbnN0IGJvbmRzID0gbW9ub21lckdyYXBoLmJvbmRzO1xuICAgIGNvbnN0IG1ldGEgPSBtb25vbWVyR3JhcGgubWV0YTtcblxuICAgIC8vIHJlbW92ZSB0aGUgbm9kZSBmcm9tIGF0b21zXG4gICAgYXRvbXMuYXRvbVR5cGVzLnNwbGljZShyZW1vdmVkTm9kZUlkeCwgMSk7XG4gICAgYXRvbXMueCA9IHNwbGljZVR5cGVkQXJyYXk8RmxvYXQzMkFycmF5PihGbG9hdDMyQXJyYXksIGF0b21zLngsIHJlbW92ZWROb2RlSWR4LCAxKTtcbiAgICBhdG9tcy55ID0gc3BsaWNlVHlwZWRBcnJheTxGbG9hdDMyQXJyYXk+KEZsb2F0MzJBcnJheSwgYXRvbXMueSwgcmVtb3ZlZE5vZGVJZHgsIDEpO1xuICAgIGF0b21zLmt3YXJncy5zcGxpY2UocmVtb3ZlZE5vZGVJZHgsIDEpO1xuXG4gICAgLy8gdXBkYXRlIHRoZSB2YWx1ZXMgb2YgdGVybWluYWwgYW5kIHItZ3JvdXAgbm9kZXMgaWYgbmVjZXNzYXJ5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRhLnRlcm1pbmFsTm9kZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChtZXRhLnRlcm1pbmFsTm9kZXNbaV0gPiByZW1vdmVkTm9kZSlcbiAgICAgICAgLS1tZXRhLnRlcm1pbmFsTm9kZXNbaV07XG4gICAgICBlbHNlIGlmIChtZXRhLnRlcm1pbmFsTm9kZXNbaV0gPT09IHJlbW92ZWROb2RlKVxuICAgICAgICBtZXRhLnRlcm1pbmFsTm9kZXNbaV0gPSAtMTsgLy8gc2VudGluZWwgdG8gbWFyayB0aGUgdmFsdWUgYXMgcmVtb3ZlZFxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGEuck5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAobWV0YS5yTm9kZXNbaV0gPiByZW1vdmVkTm9kZSlcbiAgICAgICAgLS1tZXRhLnJOb2Rlc1tpXTtcbiAgICAgIGVsc2UgaWYgKG1ldGEuck5vZGVzW2ldID09PSByZW1vdmVkTm9kZSlcbiAgICAgICAgbWV0YS5yTm9kZXNbaV0gPSAtMTsgLy8gc2VudGluZWwgdG8gbWFyayB0aGUgdmFsdWUgYXMgcmVtb3ZlZFxuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBpbmRpY2VzIG9mIGF0b21zIGluIGJvbmRzXG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYm9uZHMuYXRvbVBhaXJzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZmlyc3RBdG9tID0gYm9uZHMuYXRvbVBhaXJzW2ldWzBdO1xuICAgICAgY29uc3Qgc2Vjb25kQXRvbSA9IGJvbmRzLmF0b21QYWlyc1tpXVsxXTtcbiAgICAgIGlmIChmaXJzdEF0b20gPT09IHJlbW92ZWROb2RlIHx8IHNlY29uZEF0b20gPT09IHJlbW92ZWROb2RlKSB7XG4gICAgICAgIGJvbmRzLmF0b21QYWlycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJvbmRzLmJvbmRUeXBlcyA9IHNwbGljZVR5cGVkQXJyYXk8VWludDMyQXJyYXk+KFVpbnQzMkFycmF5LCBib25kcy5ib25kVHlwZXMsIGksIDEpO1xuICAgICAgICBpZiAoYm9uZHMuYm9uZENvbmZpZ3VyYXRpb24uaGFzKGkpKVxuICAgICAgICAgIGJvbmRzLmJvbmRDb25maWd1cmF0aW9uLmRlbGV0ZShpKTtcbiAgICAgICAgaWYgKGJvbmRzLmt3YXJncy5oYXMoaSkpXG4gICAgICAgICAgYm9uZHMua3dhcmdzLmRlbGV0ZShpKTtcbiAgICAgICAgLS1pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYm9uZHMuYXRvbVBhaXJzW2ldWzBdID0gKGZpcnN0QXRvbSA+IHJlbW92ZWROb2RlKSA/IGZpcnN0QXRvbSAtIDEgOiBmaXJzdEF0b207XG4gICAgICAgIGJvbmRzLmF0b21QYWlyc1tpXVsxXSA9IChzZWNvbmRBdG9tID4gcmVtb3ZlZE5vZGUpID8gc2Vjb25kQXRvbSAtIDEgOiBzZWNvbmRBdG9tO1xuICAgICAgfVxuICAgICAgKytpO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBib25kQ29uZmlndXJhdGlvbiBhbmQga3dhcmdzIGtleXNcbiAgICBsZXQga2V5cyA9IEFycmF5LmZyb20oYm9uZHMuYm9uZENvbmZpZ3VyYXRpb24ua2V5cygpKTtcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGJvbmRzLmJvbmRDb25maWd1cmF0aW9uLmhhcyhrZXkpICYmIGtleSA+IHJlbW92ZWROb2RlSWR4KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYm9uZHMuYm9uZENvbmZpZ3VyYXRpb24uZ2V0KGtleSkhO1xuICAgICAgICBib25kcy5ib25kQ29uZmlndXJhdGlvbi5kZWxldGUoa2V5KTtcbiAgICAgICAgYm9uZHMuYm9uZENvbmZpZ3VyYXRpb24uc2V0KGtleSAtIDEsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBrZXlzID0gQXJyYXkuZnJvbShib25kcy5rd2FyZ3Mua2V5cygpKTtcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGJvbmRzLmt3YXJncy5oYXMoa2V5KSAmJiBrZXkgPiByZW1vdmVkTm9kZUlkeCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGJvbmRzLmt3YXJncy5nZXQoa2V5KSE7XG4gICAgICAgIGJvbmRzLmt3YXJncy5kZWxldGUoa2V5KTtcbiAgICAgICAgYm9uZHMua3dhcmdzLnNldChrZXkgLSAxLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gdG9kbzogcmV3cml0ZSB0aGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgdXNpbmcgdGVtcGxhdGVzLFxuZnVuY3Rpb24gc3BsaWNlVHlwZWRBcnJheTxUIGV4dGVuZHMgSVR5cGVkQXJyYXk+KFxuICBUQ29uc3RydWN0b3I6IHsgbmV3KGxlbmd0aDogbnVtYmVyKTogVDsgfSwgdHlwZWRBcnJheTogVCwgc3RhcnQ6IG51bWJlciwgY291bnQ6IG51bWJlclxuKSB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBUQ29uc3RydWN0b3IodHlwZWRBcnJheS5sZW5ndGggLSBjb3VudCk7XG4gIGxldCBpID0gMDtcbiAgbGV0IGsgPSAwO1xuICB3aGlsZSAoaSA8IHR5cGVkQXJyYXkubGVuZ3RoKSB7XG4gICAgaWYgKGkgPT09IHN0YXJ0KVxuICAgICAgaSArPSBjb3VudDtcbiAgICByZXN1bHRba10gPSB0eXBlZEFycmF5W2ldO1xuICAgICsraztcbiAgICArK2k7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIEFkanVzdCB0aGUgcGVwdGlkZSBNb2xHcmFwaCB0byBkZWZhdWx0L3N0YW5kYXJkaXplZCBwb3NpdGlvbiAgKi9cbmZ1bmN0aW9uIGFkanVzdFBlcHRpZGVNb25vbWVyR3JhcGgobW9ub21lcjogTW9sR3JhcGgpOiB2b2lkIHtcbiAgY29uc3QgY2VudGVyZWROb2RlID0gbW9ub21lci5tZXRhLnRlcm1pbmFsTm9kZXNbMF0gLSAxOyAvLyBub2RlIGluZGV4aW5nIGluIG1vbGZpbGVzIHN0YXJ0cyBmcm9tIDFcbiAgY29uc3Qgcm90YXRlZE5vZGUgPSBtb25vbWVyLm1ldGEuck5vZGVzWzBdIC0gMTtcbiAgY29uc3QgeCA9IG1vbm9tZXIuYXRvbXMueDtcbiAgY29uc3QgeSA9IG1vbm9tZXIuYXRvbXMueTtcblxuICAvLyBwbGFjZSBub2RlT25lIGF0IG9yaWdpblxuICBzaGlmdENvb3JkaW5hdGVzKG1vbm9tZXIsIC14W2NlbnRlcmVkTm9kZV0sIC15W2NlbnRlcmVkTm9kZV0pO1xuXG4gIC8vIGFuZ2xlIGlzIG1lYXN1cmVkIGJldHdlZW4gT1kgYW5kIHRoZSByb3RhdGVkIG5vZGVcbiAgY29uc3QgYW5nbGUgPSBmaW5kQW5nbGVXaXRoT1koeFtyb3RhdGVkTm9kZV0sIHlbcm90YXRlZE5vZGVdKTtcblxuICAvLyByb3RhdGUgdGhlIGNlbnRlcmVkIGdyYXBoLCBzbyB0aGF0ICdub2RlVHdvJyBlbmRzIHVwIG9uIHRoZSBwb3NpdGl2ZSByYXkgb2YgT1lcbiAgcm90YXRlQ2VudGVyZWRHcmFwaChtb25vbWVyLmF0b21zLCAtYW5nbGUpO1xuXG4gIGlmICh4W21vbm9tZXIubWV0YS5yTm9kZXNbMV0gLSAxXSA8IDApXG4gICAgZmxpcE1vbm9tZXJBcm91bmRPWShtb25vbWVyKTtcblxuICBjb25zdCBkb3VibGVCb25kZWRPeHlnZW4gPSBmaW5kRG91YmxlQm9uZGVkQ2FyYm9ueWxPeHlnZW4obW9ub21lcik7XG5cbiAgLy8gZmxpcCBjYXJib3h5bCBhbmQgUiBpZiBuZWNlc3NhcnlcbiAgZmxpcENhcmJveHlsQW5kUmFkaWNhbChtb25vbWVyLCBkb3VibGVCb25kZWRPeHlnZW4pO1xuXG4gIC8vIGZsaXAgaHlkcm94eWwgZ3JvdXAgd2l0aCBkb3VibGUtYm91bmQgTyBpbnNpZGUgY2FyYm94eWwgZ3JvdXAgaWYgbmVjZXNzYXJ5XG4gIGZsaXBIeWRyb3hpbEdyb3VwKG1vbm9tZXIsIGRvdWJsZUJvbmRlZE94eWdlbik7XG59XG5cbmZ1bmN0aW9uIGFkanVzdFBob3NwaGF0ZU1vbm9tZXJHcmFwaChtb25vbWVyOiBNb2xHcmFwaCk6IHZvaWQge1xuICBjb25zdCBjZW50ZXJlZE5vZGUgPSBtb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1swXSAtIDE7IC8vIFBob3NwaG9ydXNcbiAgY29uc3Qgcm90YXRlZE5vZGUgPSBtb25vbWVyLm1ldGEuck5vZGVzWzBdIC0gMTsgLy8gT3h5Z2VuXG4gIC8vIGNvbnN0IG5vZGVUd29JZHggPSBtb25vbWVyLm1ldGEuck5vZGVzWzBdIC0gMTtcbiAgY29uc3QgeCA9IG1vbm9tZXIuYXRvbXMueDtcbiAgY29uc3QgeSA9IG1vbm9tZXIuYXRvbXMueTtcblxuICAvLyBwbGFjZSBub2RlT25lIGF0IG9yaWdpblxuICBzaGlmdENvb3JkaW5hdGVzKG1vbm9tZXIsIC14W2NlbnRlcmVkTm9kZV0sIC15W2NlbnRlcmVkTm9kZV0pO1xuXG4gIC8vIGFuZ2xlIGlzIG1lYXN1cmVkIGJldHdlZW4gT1kgYW5kIHRoZSByb3RhdGVkIG5vZGVcbiAgY29uc3QgYW5nbGUgPSBmaW5kQW5nbGVXaXRoT1koeFtyb3RhdGVkTm9kZV0sIHlbcm90YXRlZE5vZGVdKTtcblxuICAvLyByb3RhdGUgdGhlIGNlbnRlcmVkIGdyYXBoIHNvIHRoYXQgUC1PIGlzIG9uIE9YXG4gIHJvdGF0ZUNlbnRlcmVkR3JhcGgobW9ub21lci5hdG9tcywgTWF0aC5QSS8yIC0gYW5nbGUpO1xufVxuXG4vKiogQWRqdXN0IGEgYmFja2JvbmUgZ3JhcGggc28gdGhhdCBub2RlT25lIGlzIGF0IG9yaWdpbiBhbmQgbm9kZVR3byBpcyBhdCBPWC5cbiAqIE5vdGljZTogbm9kZSBpbmRleGluZyBpbiBtb2xmaWxlcyBzdGFydHMgZnJvbSAxICovXG5mdW5jdGlvbiBhZGp1c3RCYWNrYm9uZU1vbm9tZXJHcmFwaChcbiAgbW9ub21lcjogTW9sR3JhcGgsIG5vZGVPbmVJZHg6IG51bWJlciwgbm9kZVR3b0lkeDogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY29uc3QgeCA9IG1vbm9tZXIuYXRvbXMueDtcbiAgY29uc3QgeSA9IG1vbm9tZXIuYXRvbXMueTtcblxuICAvLyBwbGFjZSBub2RlT25lIGF0IG9yaWdpblxuICBzaGlmdENvb3JkaW5hdGVzKG1vbm9tZXIsIC14W25vZGVPbmVJZHhdLCAteVtub2RlT25lSWR4XSk7XG5cbiAgLy8gYW5nbGUgaXMgbWVhc3VyZWQgYmV0d2VlbiBPWCBhbmQgdGhlIHJvdGF0ZWQgbm9kZVxuICBjb25zdCBhbmdsZSA9IGZpbmRBbmdsZVdpdGhPWCh4W25vZGVUd29JZHhdLCB5W25vZGVUd29JZHhdKTtcblxuICAvLyByb3RhdGUgdGhlIGNlbnRlcmVkIGdyYXBoLCBzbyB0aGF0ICdub2RlVHdvJyBlbmRzIHVwIG9uIHRoZSBwb3NpdGl2ZSByYXkgb2YgT1hcbiAgcm90YXRlQ2VudGVyZWRHcmFwaChtb25vbWVyLmF0b21zLCAtYW5nbGUpO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RTdWdhck1vbm9tZXJHcmFwaChtb25vbWVyOiBNb2xHcmFwaCwgcG9pbnRlclRvQnJhbmNoQW5nbGU6IE51bWJlcldyYXBwZXIpOiB2b2lkIHtcbiAgY29uc3QgeCA9IG1vbm9tZXIuYXRvbXMueDtcbiAgY29uc3QgeSA9IG1vbm9tZXIuYXRvbXMueTtcblxuICBsZXQgY2VudGVyZWROb2RlID0gbW9ub21lci5tZXRhLnRlcm1pbmFsTm9kZXNbMF0gLSAxO1xuICBjb25zdCByb3RhdGVkTm9kZSA9IG1vbm9tZXIubWV0YS5yTm9kZXNbMV0gLSAxO1xuXG4gIHNoaWZ0Q29vcmRpbmF0ZXMobW9ub21lciwgLXhbY2VudGVyZWROb2RlXSwgLXlbY2VudGVyZWROb2RlXSk7XG5cbiAgLy8gYW5nbGUgaXMgbWVhc3VyZWQgYmV0d2VlbiBPWCBhbmQgdGhlIHJvdGF0ZWQgbm9kZVxuICBjb25zdCBhbmdsZSA9IGZpbmRBbmdsZVdpdGhPWSh4W3JvdGF0ZWROb2RlXSwgeVtyb3RhdGVkTm9kZV0pO1xuXG4gIC8vIHJvdGF0ZSB0aGUgY2VudGVyZWQgZ3JhcGggc28gdGhhdCB0aGUgcm90YXRlZCBub2RlIGluIG9uIE9YXG4gIHJvdGF0ZUNlbnRlcmVkR3JhcGgobW9ub21lci5hdG9tcywgMyAqIE1hdGguUEkvMiAtIGFuZ2xlKTtcblxuICBwb2ludGVyVG9CcmFuY2hBbmdsZS52YWx1ZSA9IGdldEFuZ2xlQmV0d2VlblN1Z2FyQnJhbmNoQW5kT1kobW9ub21lcik7XG5cbiAgY2VudGVyZWROb2RlID0gbW9ub21lci5tZXRhLnRlcm1pbmFsTm9kZXNbMF0gLSAxO1xuICBzaGlmdENvb3JkaW5hdGVzKG1vbm9tZXIsIC14W2NlbnRlcmVkTm9kZV0sIC15W2NlbnRlcmVkTm9kZV0pO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RCYXNlTW9ub21lckdyYXBoKG1vbm9tZXI6IE1vbEdyYXBoLCBwb2ludGVyVG9CcmFuY2hBbmdsZTogTnVtYmVyV3JhcHBlcik6IHZvaWQge1xuICBjb25zdCB4ID0gbW9ub21lci5hdG9tcy54O1xuICBjb25zdCB5ID0gbW9ub21lci5hdG9tcy55O1xuXG4gIGNvbnN0IGNlbnRlcmVkTm9kZSA9IG1vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzBdIC0gMTsgLy8gbm9kZSBpbmRleGluZyBpbiBtb2xmaWxlcyBzdGFydHMgZnJvbSAxXG4gIGNvbnN0IHJvdGF0ZWROb2RlID0gbW9ub21lci5tZXRhLnJOb2Rlc1swXSAtIDE7XG5cbiAgLy8gY2VudGVyIGdyYXBoIGF0IGNlbnRlcmVkTm9kZVxuICBzaGlmdENvb3JkaW5hdGVzKG1vbm9tZXIsIC14W2NlbnRlcmVkTm9kZV0sIC15W2NlbnRlcmVkTm9kZV0pO1xuXG4gIC8vIHJvdGF0ZSBzbyB0aGF0IHRoZSBicmFuY2ggYm9uZCBpcyBhbGlnbmVkIHdpdGggdGhhdCBpbiBzdWdhclxuICBjb25zdCBiYXNlQnJhbmNoVG9PWUFuZ2xlID0gZmluZEFuZ2xlV2l0aE9ZKHhbcm90YXRlZE5vZGVdLCB5W3JvdGF0ZWROb2RlXSk7XG4gIGNvbnN0IHN1Z2FyQnJhbmNoVG9PWUFuZ2xlID0gcG9pbnRlclRvQnJhbmNoQW5nbGUudmFsdWU7XG4gIGlmIChzdWdhckJyYW5jaFRvT1lBbmdsZSkge1xuICAgIHJvdGF0ZUNlbnRlcmVkR3JhcGgobW9ub21lci5hdG9tcyxcbiAgICAgIE1hdGguUEkgLSBiYXNlQnJhbmNoVG9PWUFuZ2xlICsgc3VnYXJCcmFuY2hUb09ZQW5nbGUpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIHZhbHVlIG9mIHN1Z2FyQnJhbmNoVG9PWUFuZ2xlIGlzIG51bGwnKTtcbiAgfVxuXG4gIC8vIHNjYWxlIGdyYXBoIGluIGNhc2UgaXRzIHNpemUgZG9lcyBub3QgZml0IHRoZSBzY2FsZSBvZiBwaG9zcGhhdGUgYW5kIHN1Z2FyXG4gIC8vIHRvZG86IGNvbnNpZGVyIGV4dGVuZGluZyB0byBvdGhlciBtb25vbWVyIHR5cGVzXG4gIGNvbnN0IHAxID0ge1xuICAgIHg6IHhbbW9ub21lci5tZXRhLnJOb2Rlc1swXSAtIDFdLFxuICAgIHk6IHlbbW9ub21lci5tZXRhLnJOb2Rlc1swXSAtIDFdLFxuICB9O1xuICBjb25zdCBwMiA9IHtcbiAgICB4OiB4W21vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzBdIC0gMV0sXG4gICAgeTogeVttb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1swXSAtIDFdLFxuICB9O1xuICBjb25zdCBib25kTGVuZ3RoID0gZ2V0RXVjbGlkZWFuRGlzdGFuY2UocDEsIHAyKTtcbiAgaWYgKGJvbmRMZW5ndGggIT0gMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7ICsraSkge1xuICAgICAgeFtpXSA9IGtlZXBQcmVjaXNpb24oeFtpXS9ib25kTGVuZ3RoKTtcbiAgICAgIHlbaV0gPSBrZWVwUHJlY2lzaW9uKHlbaV0vYm9uZExlbmd0aCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEV1Y2xpZGVhbkRpc3RhbmNlKHAxOiBQb2ludCwgcDI6IFBvaW50KTogbnVtYmVyIHtcbiAgcmV0dXJuIGtlZXBQcmVjaXNpb24oTWF0aC5zcXJ0KFxuICAgIChwMS54IC0gcDIueCkqKjIgKyAocDEueSAtIHAyLnkpKioyXG4gICkpO1xufVxuXG4vKiogRmxpcCBjYXJib3h5bCBncm91cCB3aXRoIHRoZSByYWRpY2FsIGluIGEgcGVwdGlkZSBtb25vbWVyIGluIGNhc2UgdGhlXG4gKiBjYXJib3h5bCBncm91cCBpcyBpbiB0aGUgbG93ZXIgaGFsZi1wbGFuZSAqL1xuZnVuY3Rpb24gZmxpcENhcmJveHlsQW5kUmFkaWNhbChtb25vbWVyOiBNb2xHcmFwaCwgZG91YmxlQm9uZGVkT3h5Z2VuOiBudW1iZXIpOiB2b2lkIHtcbiAgLy8gdmVyaWZ5IHRoYXQgdGhlIGNhcmJveHlsIGdyb3VwIGlzIGluIHRoZSBsb3dlciBoYWxmLXBsYW5lXG4gIGlmIChtb25vbWVyLmF0b21zLnlbbW9ub21lci5tZXRhLnJOb2Rlc1sxXSAtIDFdIDwgMCAmJlxuICAgIG1vbm9tZXIuYXRvbXMueVtkb3VibGVCb25kZWRPeHlnZW4gLSAxXSA8IDApIHtcbiAgICBmbGlwTW9ub21lckFyb3VuZE9YKG1vbm9tZXIpO1xuXG4gICAgcm90YXRlQ2VudGVyZWRHcmFwaChtb25vbWVyLmF0b21zLFxuICAgICAgLWZpbmRBbmdsZVdpdGhPWChcbiAgICAgICAgbW9ub21lci5hdG9tcy54W21vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzFdIC0gMV0sXG4gICAgICAgIG1vbm9tZXIuYXRvbXMueVttb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1sxXSAtIDFdXG4gICAgICApXG4gICAgKTtcbiAgfVxufVxuXG4vKiogRmluZHMgYW5nbGUgYmV0d2VlbiBPWSBhbmQgdGhlIHJheSBqb2luaW5nIG9yaWdpbiB3aXRoICh4LCB5KSAqL1xuZnVuY3Rpb24gZmluZEFuZ2xlV2l0aE9ZKHg6IG51bWJlciwgeTogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGFuZ2xlO1xuICBpZiAoeCA9PT0gMCkge1xuICAgIGFuZ2xlID0geSA+IDAgPyAwIDogTWF0aC5QSTtcbiAgfSBlbHNlIGlmICh5ID09PSAwKSB7XG4gICAgYW5nbGUgPSB4ID4gMCA/IC1NYXRoLlBJIC8gMiA6IE1hdGguUEkgLyAyO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHRhbiA9IHkgLyB4O1xuICAgIGNvbnN0IGF0YW4gPSBNYXRoLmF0YW4odGFuKTtcbiAgICBhbmdsZSA9ICh4IDwgMCkgPyBNYXRoLlBJIC8gMiArIGF0YW4gOiAtTWF0aC5QSSAvIDIgKyBhdGFuO1xuICB9XG4gIHJldHVybiBhbmdsZTtcbn1cblxuLyoqIEZpbmRzIGFuZ2xlIGJldHdlZW4gT1ggYW5kIHRoZSByYXkgam9pbmluZyBvcmlnaW4gd2l0aCAoeCwgeSkgKi9cbmZ1bmN0aW9uIGZpbmRBbmdsZVdpdGhPWCh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBmaW5kQW5nbGVXaXRoT1koeCwgeSkgKyBNYXRoLlBJIC8gMjtcbn1cblxuLyoqICBSb3RhdGUgdGhlIGdyYXBoIGFyb3VuZCB0aGUgb3JpZ2luIGJ5ICdhbmdsZScgKi9cbmZ1bmN0aW9uIHJvdGF0ZUNlbnRlcmVkR3JhcGgoYXRvbXM6IEF0b21zLCBhbmdsZTogbnVtYmVyKTogdm9pZCB7XG4gIGlmIChhbmdsZSAhPT0gMCkge1xuICAgIGNvbnN0IHggPSBhdG9tcy54O1xuICAgIGNvbnN0IHkgPSBhdG9tcy55O1xuXG4gICAgY29uc3QgY29zID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgdG1wID0geFtpXTtcbiAgICAgIHhbaV0gPSBrZWVwUHJlY2lzaW9uKHRtcCAqIGNvcyAtIHlbaV0gKiBzaW4pO1xuICAgICAgeVtpXSA9IGtlZXBQcmVjaXNpb24odG1wICogc2luICsgeVtpXSAqIGNvcyk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBGbGlwIG1vbm9tZXIgZ3JhcGggYXJvdW5kIE9YIGF4aXMgcHJlc2VydmluZyBzdGVyZW9tZXRyeSAqL1xuZnVuY3Rpb24gZmxpcE1vbm9tZXJBcm91bmRPWChtb25vbWVyOiBNb2xHcmFwaCk6IHZvaWQge1xuICBmbGlwTW9sR3JhcGgobW9ub21lciwgdHJ1ZSk7XG59XG5cbi8qKiBGbGlwIG1vbm9tZXIgZ3JhcGggYXJvdW5kIE9ZIGF4aXMgcHJlc2VydmluZyBzdGVyZW9tZXRyeSAqL1xuZnVuY3Rpb24gZmxpcE1vbm9tZXJBcm91bmRPWShtb25vbWVyOiBNb2xHcmFwaCk6IHZvaWQge1xuICBmbGlwTW9sR3JhcGgobW9ub21lciwgZmFsc2UpO1xufVxuXG4vKiogRmxpcCBncmFwaCBhcm91bmQgYSBzcGVjaWZpZWQgYXhpczogJ3RydWUnIGNvcnJlc3BvbmRzIHRvIE9YLCAnZmFsc2UnIHRvIE9ZICovXG5mdW5jdGlvbiBmbGlwTW9sR3JhcGgobW9sR3JhcGg6IE1vbEdyYXBoLCBheGlzOiBib29sZWFuKTogdm9pZCB7XG4gIGlmIChheGlzKSB7IC8vIGZsaXBwaW5nIGFyb3VuZCBPWFxuICAgIGNvbnN0IHkgPSBtb2xHcmFwaC5hdG9tcy55O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeS5sZW5ndGg7IGkrKylcbiAgICAgIHlbaV0gPSAteVtpXTtcbiAgfSBlbHNlIHsgLy8gZmxpcHBpbmcgYXJvdW5kIE9ZXG4gICAgY29uc3QgeCA9IG1vbEdyYXBoLmF0b21zLng7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKVxuICAgICAgeFtpXSA9IC14W2ldO1xuICB9XG5cbiAgLy8gcHJlc2VydmUgdGhlIHN0ZXJlb21ldHJ5XG4gIGNvbnN0IG9yaWVudGF0aW9uID0gbW9sR3JhcGguYm9uZHMuYm9uZENvbmZpZ3VyYXRpb247XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIG9yaWVudGF0aW9uKSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZSA9PT0gMSA/IDMgOiAxO1xuICAgIG9yaWVudGF0aW9uLnNldChrZXksIG5ld1ZhbHVlKTtcbiAgfVxufVxuXG4vKiogRmxpcHMgZG91YmxlLWJvbmRlZCAnTycgaW4gY2FyYm9ueWwgZ3JvdXAgd2l0aCAnT0gnIGluIG9yZGVyIGZvciB0aGUgbW9ub21lcnNcbiAqIHRvIGhhdmUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb24gc2ltcGxpZnlpbmcgdGhlaXIgY29uY2F0ZW5hdGlvbi4gVGhlXG4gKiBtb25vbWVyIG11c3QgYWxyZWFkeSBiZSBhZGp1c3RlZCB3aXRoIGFkanVzdFBlcHRpZGVNb25vbWVyR3JhcGggaW4gb3JkZXIgZm9yIHRoaXMgZnVuY3Rpb24gdG8gYmUgaW1wbGVtZW50ZWQgICovXG5mdW5jdGlvbiBmbGlwSHlkcm94aWxHcm91cChtb25vbWVyOiBNb2xHcmFwaCwgZG91YmxlQm9uZGVkT3h5Z2VuOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgeCA9IG1vbm9tZXIuYXRvbXMueDtcbiAgLy8gLTEgYmVsb3cgYmVjYXVzZSBpbmRleGluZyBvZiBub2RlcyBpbiBtb2xmaWxlcyBzdGFydHMgZnJvbSAxLCB1bmxpa2UgYXJyYXlzXG4gIGlmICh4W21vbm9tZXIubWV0YS5yTm9kZXNbMV0gLSAxXSA+IHhbZG91YmxlQm9uZGVkT3h5Z2VuIC0gMV0pXG4gICAgc3dhcE5vZGVzKG1vbm9tZXIsIGRvdWJsZUJvbmRlZE94eWdlbiwgbW9ub21lci5tZXRhLnJOb2Rlc1sxXSk7XG59XG5cbi8qKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBub2RlIChzdGFydGluZyBmcm9tIDEpIGNvcnJlc3BvbmRpbmcgdG8gdGhlXG4gKiBkb3VibGUtYm9uZGVkIG94eWdlbiBvZiB0aGUgY2FyYm9ueWwgZ3JvdXAgICovXG5mdW5jdGlvbiBmaW5kRG91YmxlQm9uZGVkQ2FyYm9ueWxPeHlnZW4obW9ub21lcjogTW9sR3JhcGgpOiBudW1iZXIge1xuICBjb25zdCBib25kc01hcCA9IGNvbnN0cnVjdEJvbmRzTWFwKG1vbm9tZXIpO1xuICBsZXQgZG91YmxlQm9uZGVkT3h5Z2VuID0gMDtcbiAgbGV0IGkgPSAwO1xuICAvLyBpdGVyYXRlIG92ZXIgdGhlIG5vZGVzIGJvbmRlZCB0byB0aGUgY2FyYm9uIGFuZCBmaW5kIHRoZSBkb3VibGUgb25lXG4gIHdoaWxlIChkb3VibGVCb25kZWRPeHlnZW4gPT09IDApIHtcbiAgICBjb25zdCBub2RlID0gYm9uZHNNYXAuZ2V0KG1vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzFdKSFbaV07XG4gICAgaWYgKG1vbm9tZXIuYXRvbXMuYXRvbVR5cGVzW25vZGUgLSAxXSA9PT0gT1hZR0VOICYmIG5vZGUgIT09IG1vbm9tZXIubWV0YS5yTm9kZXNbMV0pXG4gICAgICBkb3VibGVCb25kZWRPeHlnZW4gPSBub2RlO1xuICAgIGkrKztcbiAgfVxuICByZXR1cm4gZG91YmxlQm9uZGVkT3h5Z2VuO1xufVxuXG4vKiogU3dhcCB0aGUgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSB0d28gc3BlY2lmaWVkIG5vZGVzIGluIE1vbEdyYXBoICAqL1xuZnVuY3Rpb24gc3dhcE5vZGVzKG1vbm9tZXI6IE1vbEdyYXBoLCBub2RlT25lOiBudW1iZXIsIG5vZGVUd286IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBub2RlT25lSWR4ID0gbm9kZU9uZSAtIDE7XG4gIGNvbnN0IG5vZGVUd29JZHggPSBub2RlVHdvIC0gMTtcbiAgY29uc3QgeCA9IG1vbm9tZXIuYXRvbXMueDtcbiAgY29uc3QgeSA9IG1vbm9tZXIuYXRvbXMueTtcbiAgY29uc3QgdG1wWCA9IHhbbm9kZU9uZUlkeF07XG4gIGNvbnN0IHRtcFkgPSB5W25vZGVPbmVJZHhdO1xuICB4W25vZGVPbmVJZHhdID0geFtub2RlVHdvSWR4XTtcbiAgeVtub2RlT25lSWR4XSA9IHlbbm9kZVR3b0lkeF07XG4gIHhbbm9kZVR3b0lkeF0gPSB0bXBYO1xuICB5W25vZGVUd29JZHhdID0gdG1wWTtcbn1cblxuLyoqIE1hcHMgYSBub2RlIHRvIHRoZSBsaXN0IG9mIG5vZGVzIGJvdW5kIHRvIGl0ICovXG5mdW5jdGlvbiBjb25zdHJ1Y3RCb25kc01hcChtb25vbWVyOiBNb2xHcmFwaCk6IE1hcDxudW1iZXIsIEFycmF5PG51bWJlcj4+IHtcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxudW1iZXIsIEFycmF5PG51bWJlcj4+KCk7XG4gIGZvciAoY29uc3QgYXRvbVBhaXJzIG9mIG1vbm9tZXIuYm9uZHMuYXRvbVBhaXJzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGF0b21QYWlyc1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gYXRvbVBhaXJzWyhpICsgMSkgJSAyXTtcbiAgICAgIGlmIChtYXAuaGFzKGtleSkpXG4gICAgICAgIG1hcC5nZXQoa2V5KT8ucHVzaCh2YWx1ZSk7XG4gICAgICBlbHNlXG4gICAgICAgIG1hcC5zZXQoa2V5LCBuZXcgQXJyYXk8bnVtYmVyPigxKS5maWxsKHZhbHVlKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXA7XG59XG5cbi8qKiBTaGlmdCBtb2xHcmFwaCBpbiB0aGUgWE9ZIHBsYW5lICAqL1xuZnVuY3Rpb24gc2hpZnRDb29yZGluYXRlcyhtb2xHcmFwaDogTW9sR3JhcGgsIHhTaGlmdDogbnVtYmVyLCB5U2hpZnQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgeCA9IG1vbEdyYXBoLmF0b21zLng7XG4gIGNvbnN0IHkgPSBtb2xHcmFwaC5hdG9tcy55O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyArK2kpIHtcbiAgICB4W2ldID0ga2VlcFByZWNpc2lvbih4W2ldICsgeFNoaWZ0KTtcbiAgICBpZiAodHlwZW9mIHlTaGlmdCAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICB5W2ldID0ga2VlcFByZWNpc2lvbih5W2ldICsgeVNoaWZ0KTtcbiAgfVxufVxuXG4vKiogVHJhbnNsYXRlIGEgc2VxdWVuY2Ugb2YgbW9ub21lciBzeW1ib2xzIGludG8gTW9sZmlsZSBWMzAwMCAqL1xuZnVuY3Rpb24gbW9ub21lclNlcVRvTW9sZmlsZShcbiAgbW9ub21lclNlcTogc3RyaW5nW10sIG1vbm9tZXJzRGljdDogTWFwPHN0cmluZywgTW9sR3JhcGg+LFxuICBhbHBoYWJldDogQUxQSEFCRVQsIHBvbHltZXJUeXBlOiBIRUxNX1BPTFlNRVJfVFlQRSwgbW9kZTogTU9ERVxuKTogc3RyaW5nIHtcbiAgaWYgKG1vbm9tZXJTZXEubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiAnJztcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ21vbm9tZXJTZXEgaXMgZW1wdHknKTtcblxuICAvLyBkZWZpbmUgYXRvbSBhbmQgYm9uZCBjb3VudHMsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGJvbmQgdHlwZVxuICBjb25zdCBnZXRBdG9tQW5kQm9uZENvdW50cyA9IChtb2RlID09PSBNT0RFLlNUQU5EQVJEKSA/XG4gICAgZ2V0UmVzdWx0aW5nQXRvbUJvbmRDb3VudHMgOiBnZXRSZXN1bHRpbmdBdG9tQm9uZENvdW50c1NUO1xuICBjb25zdCB7YXRvbUNvdW50LCBib25kQ291bnR9ID0gZ2V0QXRvbUFuZEJvbmRDb3VudHMobW9ub21lclNlcSwgbW9ub21lcnNEaWN0LCBhbHBoYWJldCwgcG9seW1lclR5cGUsIG1vZGUpO1xuXG4gIC8vIGNyZWF0ZSBhcnJheXMgdG8gc3RvcmUgbGluZXMgb2YgdGhlIHJlc3VsdGluZyBtb2xmaWxlXG4gIGNvbnN0IG1vbGZpbGVBdG9tQmxvY2sgPSBuZXcgQXJyYXk8c3RyaW5nPihhdG9tQ291bnQpO1xuICBjb25zdCBtb2xmaWxlQm9uZEJsb2NrID0gbmV3IEFycmF5PHN0cmluZz4oYm9uZENvdW50KTtcblxuICBsZXQgYWRkTW9ub21lclRvTW9sYmxvY2s7IC8vIHRvZG86IHR5cGVzP1xuXG4gIGxldCBzdWdhciA9IG51bGw7XG4gIGxldCBwaG9zcGhhdGUgPSBudWxsO1xuXG4gIGlmIChtb2RlID09PSBNT0RFLlNUQU5EQVJEKSB7XG4gICAgaWYgKHBvbHltZXJUeXBlID09PSBIRUxNX1BPTFlNRVJfVFlQRS5QRVBUSURFKSB7XG4gICAgICBhZGRNb25vbWVyVG9Nb2xibG9jayA9IGFkZEFtaW5vQWNpZFRvTW9sYmxvY2s7XG4gICAgfSBlbHNlIHsgLy8gbnVjbGVvdGlkZXNcbiAgICAgIGFkZE1vbm9tZXJUb01vbGJsb2NrID0gYWRkTnVjbGVvdGlkZVRvTW9sYmxvY2s7XG4gICAgICBzdWdhciA9IChhbHBoYWJldCA9PT0gQUxQSEFCRVQuRE5BKSA/IG1vbm9tZXJzRGljdC5nZXQoREVPWFlSSUJPU0UpIDogbW9ub21lcnNEaWN0LmdldChSSUJPU0UpO1xuICAgICAgcGhvc3BoYXRlID0gbW9ub21lcnNEaWN0LmdldChQSE9TUEhBVEUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhZGRNb25vbWVyVG9Nb2xibG9jayA9IGFkZE1vbm9tZXJUb01vbGJsb2NrU1Q7XG4gIH1cblxuICBjb25zdCB2OiBMb29wVmFyaWFibGVzID0ge1xuICAgIGk6IDAsXG4gICAgbm9kZVNoaWZ0OiAwLFxuICAgIGJvbmRTaGlmdDogMCxcbiAgICBiYWNrYm9uZVBvc2l0aW9uU2hpZnQ6IG5ldyBBcnJheTxudW1iZXI+KDIpLmZpbGwoMCksXG4gICAgYnJhbmNoUG9zaXRpb25TaGlmdDogbmV3IEFycmF5PG51bWJlcj4oMikuZmlsbCgwKSxcbiAgICBiYWNrYm9uZUF0dGFjaE5vZGU6IDAsXG4gICAgYnJhbmNoQXR0YWNoTm9kZTogMCxcbiAgICBmbGlwRmFjdG9yOiAxLFxuICB9O1xuXG4gIGNvbnN0IEM6IExvb3BDb25zdGFudHMgPSB7XG4gICAgc3VnYXI6IHN1Z2FyISxcbiAgICBwaG9zcGhhdGU6IHBob3NwaGF0ZSEsXG4gICAgc2VxTGVuZ3RoOiBtb25vbWVyU2VxLmxlbmd0aCxcbiAgICBhdG9tQ291bnQ6IGF0b21Db3VudCxcbiAgICBib25kQ291bnQ6IGJvbmRDb3VudCxcbiAgfTtcblxuICBmb3IgKHYuaSA9IDA7IHYuaSA8IEMuc2VxTGVuZ3RoOyArK3YuaSkge1xuICAgIGNvbnN0IG1vbm9tZXIgPSBtb25vbWVyc0RpY3QuZ2V0KG1vbm9tZXJTZXFbdi5pXSkhO1xuICAgIGFkZE1vbm9tZXJUb01vbGJsb2NrKG1vbm9tZXIsIG1vbGZpbGVBdG9tQmxvY2ssIG1vbGZpbGVCb25kQmxvY2ssIHYsIEMpO1xuICB9XG5cbiAgY2FwUmVzdWx0aW5nTW9sYmxvY2sobW9sZmlsZUF0b21CbG9jaywgbW9sZmlsZUJvbmRCbG9jaywgdiwgQywgbW9kZSk7XG5cbiAgY29uc3QgbW9sZmlsZUNvdW50c0xpbmUgPSBWM0tfQkVHSU5fQ09VTlRTX0xJTkUgKyBhdG9tQ291bnQgKyAnICcgKyBib25kQ291bnQgKyBWM0tfQ09VTlRTX0xJTkVfRU5ESU5HO1xuXG4gIC8vIHRvZG86IHBvc3NpYmxlIG9wdGltaXphdGlvbiBtYXkgYmUgYWNoaWV2ZWQgYnkgcmVwbGFjaW5nIC5qb2luKCcnKSB3aXRoICs9XG4gIC8vIHNpbmNlIGNvdW50ZXJpbnR1aXRpdmVseSBqb2luaW5nIGFuIGFycmF5IGludG8gYSBuZXcgc3RyaW5nIGlzIHJlcG9ydGVkbHlcbiAgLy8gc2xvd2VyIHRoYW4gdXNpbmcgKz0gYXMgYmVsb3dcblxuICBsZXQgcmVzdWx0ID0gJyc7XG4gIHJlc3VsdCArPSBWM0tfSEVBREVSX0ZJUlNUX0xJTkU7XG4gIHJlc3VsdCArPSBWM0tfSEVBREVSX1NFQ09ORF9MSU5FO1xuICByZXN1bHQgKz0gVjNLX0JFR0lOX0NUQUJfQkxPQ0s7XG4gIHJlc3VsdCArPSBtb2xmaWxlQ291bnRzTGluZTtcbiAgcmVzdWx0ICs9IFYzS19CRUdJTl9BVE9NX0JMT0NLO1xuICByZXN1bHQgKz0gbW9sZmlsZUF0b21CbG9jay5qb2luKCcnKTtcbiAgcmVzdWx0ICs9IFYzS19FTkRfQVRPTV9CTE9DSztcbiAgcmVzdWx0ICs9IFYzS19CRUdJTl9CT05EX0JMT0NLO1xuICByZXN1bHQgKz0gbW9sZmlsZUJvbmRCbG9jay5qb2luKCcnKTtcbiAgcmVzdWx0ICs9IFYzS19FTkRfQk9ORF9CTE9DSztcbiAgcmVzdWx0ICs9IFYzS19FTkRfQ1RBQl9CTE9DSztcbiAgcmVzdWx0ICs9IFYzS19FTkQ7XG5cbiAgLy8gcmV0dXJuIG1vbGZpbGVQYXJ0cy5qb2luKCcnKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIENhcCB0aGUgcmVzdWx0aW5nIChhZnRlciBzZXdpbmcgdXAgYWxsIHRoZSBtb25vbWVycykgbW9sZmlsZSB3aXRoICdPJyAqL1xuZnVuY3Rpb24gY2FwUmVzdWx0aW5nTW9sYmxvY2soXG4gIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLCBtb2xmaWxlQm9uZEJsb2NrOiBzdHJpbmdbXSxcbiAgdjogTG9vcFZhcmlhYmxlcywgQzogTG9vcENvbnN0YW50cywgbW9kZTogTU9ERVxuKTogdm9pZCB7XG4gIGlmIChtb2RlID09PSBNT0RFLlNUQU5EQVJEKSB7XG4gICAgLy8gYWRkIHRlcm1pbmFsIG94eWdlblxuICAgIGNvbnN0IGF0b21JZHggPSB2Lm5vZGVTaGlmdCArIDE7XG4gICAgbW9sZmlsZUF0b21CbG9ja1tDLmF0b21Db3VudF0gPSBWM0tfQkVHSU5fREFUQV9MSU5FICsgYXRvbUlkeCArICcgJyArXG4gICAgICBPWFlHRU4gKyAnICcgKyBrZWVwUHJlY2lzaW9uKHYuYmFja2JvbmVQb3NpdGlvblNoaWZ0WzBdKSArICcgJyArXG4gICAgICB2LmZsaXBGYWN0b3IgKiBrZWVwUHJlY2lzaW9uKHYuYmFja2JvbmVQb3NpdGlvblNoaWZ0WzFdKSArICcgJyArICcwLjAwMDAwMCAwJyArICdcXG4nO1xuXG4gICAgLy8gYWRkIHRlcm1pbmFsIGJvbmRcbiAgICBjb25zdCBmaXJzdEF0b20gPSB2LmJhY2tib25lQXR0YWNoTm9kZTtcbiAgICBjb25zdCBzZWNvbmRBdG9tID0gYXRvbUlkeDtcbiAgICBtb2xmaWxlQm9uZEJsb2NrW0MuYm9uZENvdW50XSA9IFYzS19CRUdJTl9EQVRBX0xJTkUgKyB2LmJvbmRTaGlmdCArICcgJyArXG4gICAgICAxICsgJyAnICsgZmlyc3RBdG9tICsgJyAnICsgc2Vjb25kQXRvbSArICdcXG4nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZEFtaW5vQWNpZFRvTW9sYmxvY2sobW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLFxuICBtb2xmaWxlQm9uZEJsb2NrOiBzdHJpbmdbXSwgdjogTG9vcFZhcmlhYmxlc1xuKTogdm9pZCB7XG4gIHYuZmxpcEZhY3RvciA9ICgtMSkgKiogKHYuaSAlIDIpOyAvLyB0byBmbGlwIGV2ZXJ5IGV2ZW4gbW9ub21lciBvdmVyIE9YXG4gIGFkZEJhY2tib25lTW9ub21lclRvTW9sYmxvY2sobW9ub21lciwgbW9sZmlsZUF0b21CbG9jaywgbW9sZmlsZUJvbmRCbG9jaywgdik7XG59XG5cbmZ1bmN0aW9uIGFkZE1vbm9tZXJUb01vbGJsb2NrU1QobW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLFxuICBtb2xmaWxlQm9uZEJsb2NrOiBzdHJpbmdbXSwgdjogTG9vcFZhcmlhYmxlcyk6IHZvaWQge1xuICBhZGRCcmFuY2hNb25vbWVyVG9Nb2xibG9jayhtb25vbWVyLCBtb2xmaWxlQXRvbUJsb2NrLCBtb2xmaWxlQm9uZEJsb2NrLCB2KTtcbn1cblxuZnVuY3Rpb24gYWRkQmFja2JvbmVNb25vbWVyVG9Nb2xibG9jayhcbiAgbW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLCBtb2xmaWxlQm9uZEJsb2NrOiBzdHJpbmdbXSwgdjogTG9vcFZhcmlhYmxlc1xuKTogdm9pZCB7XG4gIC8vIHRvZG86IHJlbW92ZSB0aGVzZSBjb21tZW50cyB0byB0aGUgZG9jc3RyaW5ncyBvZiB0aGUgY29yci4gZnVuY3Rpb25zXG4gIC8vIGNvbnN0cnVuY3QgdGhlIGxpbmVzIG9mIFYzSyBtb2xmaWxlIGF0b20gYmxvY2tcbiAgZmlsbEF0b21MaW5lcyhtb25vbWVyLCBtb2xmaWxlQXRvbUJsb2NrLCB2KTtcblxuICAvLyBjb25zdHJ1Y3QgdGhlIGxpbmVzIG9mIFYzSyBtb2xmaWxlIGJvbmQgYmxvY2tcbiAgZmlsbEJvbmRMaW5lcyhtb25vbWVyLCBtb2xmaWxlQm9uZEJsb2NrLCB2KTtcblxuICAvLyBwZXB0aWRlIGJvbmRcbiAgZmlsbENoYWluRXh0ZW5kaW5nQm9uZChtb25vbWVyLCBtb2xmaWxlQm9uZEJsb2NrLCB2KTtcblxuICAvLyB1cGRhdGUgYnJhbmNoIHZhcmlhYmxlcyBpZiBuZWNlc3NhcnlcbiAgaWYgKG1vbm9tZXIubWV0YS5icmFuY2hTaGlmdCAhPT0gbnVsbCAmJiBtb25vbWVyLm1ldGEudGVybWluYWxOb2Rlcy5sZW5ndGggPiAyKVxuICAgIHVwZGF0ZUJyYW5jaFZhcmlhYmxlcyhtb25vbWVyLCB2KTtcblxuICAvLyB1cGRhdGUgbG9vcCB2YXJpYWJsZXNcbiAgdXBkYXRlQ2hhaW5FeHRlbmRpbmdWYXJpYWJsZXMobW9ub21lciwgdik7XG59XG5cbi8qKiBEZWZpbmVkIGZvciAnc3RhbmRhcmQgbW9kZScgUk5BIG1vbm9tZXJzLCBpLmUuIG9mICdicmFuY2gnIHR5cGUsIGFzIGluXG4gKiBIRUxNQ29yZUxpYnJhcnkuIFdpbGwgbm90IHdvcmsgaW4gU0VRX1RSQU4gbW9kZSAqL1xuZnVuY3Rpb24gYWRkTnVjbGVvdGlkZVRvTW9sYmxvY2soXG4gIG51Y2xlb2Jhc2U6IE1vbEdyYXBoLCBtb2xmaWxlQXRvbUJsb2NrOiBzdHJpbmdbXSwgbW9sZmlsZUJvbmRCbG9jazogc3RyaW5nW10sIHY6IExvb3BWYXJpYWJsZXMsIEM6IExvb3BDb25zdGFudHNcbik6IHZvaWQge1xuICAvLyBjb25zdHJ1bmN0IHRoZSBsaW5lcyBvZiBWM0sgbW9sZmlsZSBhdG9tIGJsb2NrIGNvcnJlc3BvbmRpbmcgdG8gcGhvc3BoYXRlXG4gIC8vIGFuZCBzdWdhclxuICBpZiAodi5pID09PSAwKSB7XG4gICAgYWRkQmFja2JvbmVNb25vbWVyVG9Nb2xibG9jayhDLnN1Z2FyISwgbW9sZmlsZUF0b21CbG9jaywgbW9sZmlsZUJvbmRCbG9jaywgdik7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBtb25vbWVyIG9mIFtDLnBob3NwaGF0ZSwgQy5zdWdhcl0pXG4gICAgICBhZGRCYWNrYm9uZU1vbm9tZXJUb01vbGJsb2NrKG1vbm9tZXIhLCBtb2xmaWxlQXRvbUJsb2NrLCBtb2xmaWxlQm9uZEJsb2NrLCB2KTtcbiAgfVxuXG4gIGFkZEJyYW5jaE1vbm9tZXJUb01vbGJsb2NrKG51Y2xlb2Jhc2UsIG1vbGZpbGVBdG9tQmxvY2ssIG1vbGZpbGVCb25kQmxvY2ssIHYpO1xufVxuXG5mdW5jdGlvbiBhZGRCcmFuY2hNb25vbWVyVG9Nb2xibG9jayhcbiAgbW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLCBtb2xmaWxlQm9uZEJsb2NrOiBzdHJpbmdbXSwgdjogTG9vcFZhcmlhYmxlc1xuKTogdm9pZCB7XG4gIGZpbGxCcmFuY2hBdG9tTGluZXMobW9ub21lciwgbW9sZmlsZUF0b21CbG9jaywgdik7XG4gIGZpbGxCb25kTGluZXMobW9ub21lciwgbW9sZmlsZUJvbmRCbG9jaywgdik7XG4gIGZpbGxCYWNrYm9uZVRvQnJhbmNoQm9uZChtb25vbWVyLCBtb2xmaWxlQm9uZEJsb2NrLCB2KTtcblxuICAvLyBDLU4gYm9uZFxuICBjb25zdCBib25kSWR4ID0gdi5ib25kU2hpZnQ7XG4gIGNvbnN0IGZpcnN0QXRvbSA9IHYuYnJhbmNoQXR0YWNoTm9kZTtcbiAgY29uc3Qgc2Vjb25kQXRvbSA9IG1vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzBdICsgdi5ub2RlU2hpZnQ7XG4gIG1vbGZpbGVCb25kQmxvY2tbYm9uZElkeCAtIDFdID0gVjNLX0JFR0lOX0RBVEFfTElORSArIGJvbmRJZHggKyAnICcgK1xuICAgIDEgKyAnICcgKyBmaXJzdEF0b20gKyAnICcgKyBzZWNvbmRBdG9tICsgJ1xcbic7XG5cbiAgLy8gdXBkYXRlIGxvb3AgdmFyaWFibGVzXG4gIHYuYm9uZFNoaWZ0ICs9IG1vbm9tZXIuYm9uZHMuYXRvbVBhaXJzLmxlbmd0aCArIDE7XG4gIHYubm9kZVNoaWZ0ICs9IG1vbm9tZXIuYXRvbXMuYXRvbVR5cGVzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2hhaW5FeHRlbmRpbmdWYXJpYWJsZXMobW9ub21lcjogTW9sR3JhcGgsIHY6IExvb3BWYXJpYWJsZXMpOiB2b2lkIHtcbiAgdi5iYWNrYm9uZUF0dGFjaE5vZGUgPSB2Lm5vZGVTaGlmdCArIG1vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzFdO1xuICB2LmJvbmRTaGlmdCArPSBtb25vbWVyLmJvbmRzLmF0b21QYWlycy5sZW5ndGggKyAxO1xuXG4gIHYubm9kZVNoaWZ0ICs9IG1vbm9tZXIuYXRvbXMuYXRvbVR5cGVzLmxlbmd0aDtcbiAgdi5iYWNrYm9uZVBvc2l0aW9uU2hpZnRbMF0gKz0gbW9ub21lci5tZXRhLmJhY2tib25lU2hpZnQhWzBdOyAvLyB0b2RvOiBub24tbnVsbCBjaGVja1xuICB2LmJhY2tib25lUG9zaXRpb25TaGlmdFsxXSArPSB2LmZsaXBGYWN0b3IgKiBtb25vbWVyLm1ldGEuYmFja2JvbmVTaGlmdCFbMV07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUJyYW5jaFZhcmlhYmxlcyhtb25vbWVyOiBNb2xHcmFwaCwgdjogTG9vcFZhcmlhYmxlcyk6IHZvaWQge1xuICB2LmJyYW5jaEF0dGFjaE5vZGUgPSB2Lm5vZGVTaGlmdCArIG1vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzJdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDI7ICsraSlcbiAgICB2LmJyYW5jaFBvc2l0aW9uU2hpZnRbaV0gPSB2LmJhY2tib25lUG9zaXRpb25TaGlmdFtpXSArIG1vbm9tZXIubWV0YS5icmFuY2hTaGlmdCFbaV07XG59XG5cbmZ1bmN0aW9uIGZpbGxBdG9tTGluZXMobW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLCB2OiBMb29wVmFyaWFibGVzKTogdm9pZCB7XG4gIGZvciAobGV0IGogPSAwOyBqIDwgbW9ub21lci5hdG9tcy5hdG9tVHlwZXMubGVuZ3RoOyArK2opIHtcbiAgICBjb25zdCBhdG9tSWR4ID0gdi5ub2RlU2hpZnQgKyBqICsgMTtcbiAgICBtb2xmaWxlQXRvbUJsb2NrW3Yubm9kZVNoaWZ0ICsgal0gPSBWM0tfQkVHSU5fREFUQV9MSU5FICsgYXRvbUlkeCArICcgJyArXG4gICAgICBtb25vbWVyLmF0b21zLmF0b21UeXBlc1tqXSArICcgJyArXG4gICAgICBrZWVwUHJlY2lzaW9uKHYuYmFja2JvbmVQb3NpdGlvblNoaWZ0WzBdICsgbW9ub21lci5hdG9tcy54W2pdKSArICcgJyArXG4gICAgICBrZWVwUHJlY2lzaW9uKHYuYmFja2JvbmVQb3NpdGlvblNoaWZ0WzFdICsgdi5mbGlwRmFjdG9yICogbW9ub21lci5hdG9tcy55W2pdKSArXG4gICAgICAnICcgKyBtb25vbWVyLmF0b21zLmt3YXJnc1tqXTtcbiAgfVxufVxuXG4vLyB0b2RvOiByZW1vdmUgYXMgcXVpY2tmaXhcbmZ1bmN0aW9uIGZpbGxCcmFuY2hBdG9tTGluZXMobW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLCB2OiBMb29wVmFyaWFibGVzKTogdm9pZCB7XG4gIGZvciAobGV0IGogPSAwOyBqIDwgbW9ub21lci5hdG9tcy5hdG9tVHlwZXMubGVuZ3RoOyArK2opIHtcbiAgICBjb25zdCBhdG9tSWR4ID0gdi5ub2RlU2hpZnQgKyBqICsgMTtcbiAgICBtb2xmaWxlQXRvbUJsb2NrW3Yubm9kZVNoaWZ0ICsgal0gPSBWM0tfQkVHSU5fREFUQV9MSU5FICsgYXRvbUlkeCArICcgJyArXG4gICAgICBtb25vbWVyLmF0b21zLmF0b21UeXBlc1tqXSArICcgJyArXG4gICAgICBrZWVwUHJlY2lzaW9uKHYuYnJhbmNoUG9zaXRpb25TaGlmdFswXSArIG1vbm9tZXIuYXRvbXMueFtqXSkgKyAnICcgK1xuICAgICAga2VlcFByZWNpc2lvbih2LmJyYW5jaFBvc2l0aW9uU2hpZnRbMV0gKyB2LmZsaXBGYWN0b3IgKiBtb25vbWVyLmF0b21zLnlbal0pICtcbiAgICAgICcgJyArIG1vbm9tZXIuYXRvbXMua3dhcmdzW2pdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbGxCb25kTGluZXMobW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVCb25kQmxvY2s6IHN0cmluZ1tdLCB2OiBMb29wVmFyaWFibGVzKTogdm9pZCB7XG4gIC8vIGNvbnN0cnVjdCB0aGUgbGluZXMgb2YgVjNLIG1vbGZpbGUgYm9uZCBibG9ja1xuICBmb3IgKGxldCBqID0gMDsgaiA8IG1vbm9tZXIuYm9uZHMuYXRvbVBhaXJzLmxlbmd0aDsgKytqKSB7XG4gICAgY29uc3QgYm9uZElkeCA9IHYuYm9uZFNoaWZ0ICsgaiArIDE7XG4gICAgY29uc3QgZmlyc3RBdG9tID0gbW9ub21lci5ib25kcy5hdG9tUGFpcnNbal1bMF0gKyB2Lm5vZGVTaGlmdDtcbiAgICBjb25zdCBzZWNvbmRBdG9tID0gbW9ub21lci5ib25kcy5hdG9tUGFpcnNbal1bMV0gKyB2Lm5vZGVTaGlmdDtcbiAgICBsZXQgYm9uZENmZyA9ICcnO1xuICAgIGlmIChtb25vbWVyLmJvbmRzLmJvbmRDb25maWd1cmF0aW9uLmhhcyhqKSkge1xuICAgICAgLy8gZmxpcCBvcmllbnRhdGlvbiB3aGVuIG5lY2Vzc2FyeVxuICAgICAgbGV0IG9yaWVudGF0aW9uID0gbW9ub21lci5ib25kcy5ib25kQ29uZmlndXJhdGlvbi5nZXQoaik7XG4gICAgICBpZiAodi5mbGlwRmFjdG9yIDwgMClcbiAgICAgICAgb3JpZW50YXRpb24gPSAob3JpZW50YXRpb24gPT09IDEpID8gMyA6IDE7XG4gICAgICBib25kQ2ZnID0gJyBDRkc9JyArIG9yaWVudGF0aW9uO1xuICAgIH1cbiAgICBjb25zdCBrd2FyZ3MgPSBtb25vbWVyLmJvbmRzLmt3YXJncy5oYXMoaikgP1xuICAgICAgJyAnICsgbW9ub21lci5ib25kcy5rd2FyZ3MuZ2V0KGopIDogJyc7XG4gICAgbW9sZmlsZUJvbmRCbG9ja1t2LmJvbmRTaGlmdCArIGpdID0gVjNLX0JFR0lOX0RBVEFfTElORSArIGJvbmRJZHggKyAnICcgK1xuICAgICAgbW9ub21lci5ib25kcy5ib25kVHlwZXNbal0gKyAnICcgK1xuICAgICAgZmlyc3RBdG9tICsgJyAnICsgc2Vjb25kQXRvbSArIGJvbmRDZmcgKyBrd2FyZ3MgKyAnXFxuJztcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWxsQ2hhaW5FeHRlbmRpbmdCb25kKG1vbm9tZXI6IE1vbEdyYXBoLCBtb2xmaWxlQm9uZEJsb2NrOiBzdHJpbmdbXSwgdjogTG9vcFZhcmlhYmxlcyk6IHZvaWQge1xuICBpZiAodi5iYWNrYm9uZUF0dGFjaE5vZGUgIT09IDApIHtcbiAgICBjb25zdCBib25kSWR4ID0gdi5ib25kU2hpZnQ7XG4gICAgY29uc3QgZmlyc3RBdG9tID0gdi5iYWNrYm9uZUF0dGFjaE5vZGU7XG4gICAgY29uc3Qgc2Vjb25kQXRvbSA9IG1vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzBdICsgdi5ub2RlU2hpZnQ7XG4gICAgbW9sZmlsZUJvbmRCbG9ja1t2LmJvbmRTaGlmdCAtIDFdID0gVjNLX0JFR0lOX0RBVEFfTElORSArIGJvbmRJZHggKyAnICcgK1xuICAgICAgMSArICcgJyArIGZpcnN0QXRvbSArICcgJyArIHNlY29uZEF0b20gKyAnXFxuJztcbiAgfVxufVxuXG4vLyB0b2RvOiByZW1vdmVcbmZ1bmN0aW9uIGZpbGxCYWNrYm9uZVRvQnJhbmNoQm9uZChicmFuY2hNb25vbWVyOiBNb2xHcmFwaCwgbW9sZmlsZUJvbmRCbG9jazogc3RyaW5nW10sIHY6IExvb3BWYXJpYWJsZXMpOiB2b2lkIHtcbiAgY29uc3QgYm9uZElkeCA9IHYuYm9uZFNoaWZ0O1xuICBjb25zdCBmaXJzdEF0b20gPSB2LmJyYW5jaEF0dGFjaE5vZGU7XG4gIGNvbnN0IHNlY29uZEF0b20gPSBicmFuY2hNb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1swXSArIHYubm9kZVNoaWZ0O1xuICBtb2xmaWxlQm9uZEJsb2NrW2JvbmRJZHggLSAxXSA9IFYzS19CRUdJTl9EQVRBX0xJTkUgKyBib25kSWR4ICsgJyAnICtcbiAgICAxICsgJyAnICsgZmlyc3RBdG9tICsgJyAnICsgc2Vjb25kQXRvbSArICdcXG4nO1xufVxuXG4vKiogQ29tcHV0ZSB0aGUgYXRvbS9ib25kIGNvdW50cyBmb3IgdGhlIHJlc3VsdGluZyBtb2xmaWxlLCBkZXBlbmRpbmcgb24gdGhlXG4gKiB0eXBlIG9mIHBvbHltZXIgKHBlcHRpZGUvbnVjbGVvdGlkZSkgKi9cbmZ1bmN0aW9uIGdldFJlc3VsdGluZ0F0b21Cb25kQ291bnRzKFxuICBtb25vbWVyU2VxOiBzdHJpbmdbXSwgbW9ub21lcnNEaWN0OiBNYXA8c3RyaW5nLCBNb2xHcmFwaD4sXG4gIGFscGhhYmV0OiBBTFBIQUJFVCwgcG9seW1lclR5cGU6IEhFTE1fUE9MWU1FUl9UWVBFLFxuICBtb2RlOiBNT0RFXG4pOiB7IGF0b21Db3VudDogbnVtYmVyLCBib25kQ291bnQ6IG51bWJlciB9IHtcbiAgbGV0IGF0b21Db3VudCA9IDA7XG4gIGxldCBib25kQ291bnQgPSAwO1xuXG4gIC8vIHN1bSB1cCBhbGwgdGhlIGF0b21zL25vZGVzIHByb3ZpZGVkIGJ5IHRoZSBzZXF1ZW5jZVxuICBmb3IgKGNvbnN0IG1vbm9tZXJTeW1ib2wgb2YgbW9ub21lclNlcSkge1xuICAgIGlmIChtb25vbWVyU3ltYm9sID09PSAnJykgY29udGludWU7IC8vIFNraXAgZm9yIGdhcC9lbXB0eSBtb25vbWVyIGluIE1TQVxuICAgIGNvbnN0IG1vbm9tZXIgPSBtb25vbWVyc0RpY3QuZ2V0KG1vbm9tZXJTeW1ib2wpITtcbiAgICBhdG9tQ291bnQgKz0gbW9ub21lci5hdG9tcy54Lmxlbmd0aDtcbiAgICBib25kQ291bnQgKz0gbW9ub21lci5ib25kcy5ib25kVHlwZXMubGVuZ3RoO1xuICB9XG5cbiAgLy8gYWRkIGV4dHJhIHZhbHVlcyBkZXBlbmRpbmcgb24gdGhlIHBvbHltZXIgdHlwZVxuICBpZiAobW9kZSA9PT0gTU9ERS5TVEFOREFSRCkge1xuICAgIGlmIChwb2x5bWVyVHlwZSA9PT0gSEVMTV9QT0xZTUVSX1RZUEUuUEVQVElERSkge1xuICAgICAgLy8gYWRkIHRoZSByaWdodG1vc3QvdGVybWluYXRpbmcgY2FwIGdyb3VwICdPSCcgKGkuZS4gJ08nKVxuICAgICAgYXRvbUNvdW50ICs9IDE7XG4gICAgICAvLyBhZGQgY2hhaW4tZXh0ZW5kaW5nIGJvbmRzIChDLU5IIHBlciBlYWNoIG1vbm9tZXIgcGFpciBhbmQgdGVybWluYWwgQy1PSClcbiAgICAgIGJvbmRDb3VudCArPSBtb25vbWVyU2VxLmxlbmd0aDtcbiAgICB9IGVsc2UgeyAvLyBudWNsZW90aWRlc1xuICAgICAgY29uc3Qgc3VnYXIgPSAoYWxwaGFiZXQgPT09IEFMUEhBQkVULkROQSkgP1xuICAgICAgICBtb25vbWVyc0RpY3QuZ2V0KERFT1hZUklCT1NFKSEgOiBtb25vbWVyc0RpY3QuZ2V0KFJJQk9TRSkhO1xuICAgICAgY29uc3QgcGhvc3BoYXRlID0gbW9ub21lcnNEaWN0LmdldChQSE9TUEhBVEUpITtcblxuICAgICAgLy8gYWRkIHBob3NwaGF0ZSBwZXIgZWFjaCBwYWlyIG9mIG51Y2xlb2Jhc2Ugc3ltYm9sc1xuICAgICAgYXRvbUNvdW50ICs9IChtb25vbWVyU2VxLmxlbmd0aCAtIDEpICogcGhvc3BoYXRlLmF0b21zLngubGVuZ3RoO1xuXG4gICAgICAvLyBhZGQgc3VnYXIgcGVyIGVhY2ggbnVjbGVvYmFzZSBzeW1ib2xcbiAgICAgIGF0b21Db3VudCArPSBtb25vbWVyU2VxLmxlbmd0aCAqIHN1Z2FyLmF0b21zLngubGVuZ3RoO1xuXG4gICAgICAvLyBhZGQgdGhlIGxlZnRtb3N0IGNhcCBncm91cCAnT0gnIChpLmUuICdPJylcbiAgICAgIGF0b21Db3VudCArPSAxO1xuXG4gICAgICAvLyBhZGQgYm9uZHMgZnJvbSBwaG9zcGhhdGUgbW9ub21lcnNcbiAgICAgIGJvbmRDb3VudCArPSAobW9ub21lclNlcS5sZW5ndGggLSAxKSAqIHBob3NwaGF0ZS5ib25kcy5ib25kVHlwZXMubGVuZ3RoO1xuXG4gICAgICAvLyBhZGQgYm9uZHMgZnJvbSBzdWdhciBtb25vbWVyc1xuICAgICAgYm9uZENvdW50ICs9IG1vbm9tZXJTZXEubGVuZ3RoICogc3VnYXIuYm9uZHMuYm9uZFR5cGVzLmxlbmd0aDtcblxuICAgICAgLy8gZXhjbHVkZSB0aGUgZmlyc3QgY2hhaW4tZXh0ZW5kaW5nIGJvbmQgTy1QIChhYnNlbnQsIG5vICdsZWZ0bW9zdCcgcGhvc3BoYXRlKVxuICAgICAgYm9uZENvdW50IC09IDE7XG5cbiAgICAgIC8vIGFkZCBjaGFpbi1leHRlbmRpbmcgYW5kIGJyYW5jaCBib25kcyAoTy1QLCBDLU8gYW5kIEMtTiBwZXIgZWFjaCBudWNsZW90aWRlKVxuICAgICAgYm9uZENvdW50ICs9IG1vbm9tZXJTZXEubGVuZ3RoICogMztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gdG9kbzogZmlsbCBmb3IgU2VxdWVuY2VUcmFuc2xhdG9yXG4gIH1cblxuICByZXR1cm4ge2F0b21Db3VudCwgYm9uZENvdW50fTtcbn1cblxuLyoqIEtlZXAgcHJlY2lzaW9uIHVwb24gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyBvdmVyIGF0b20gY29vcmRpbmF0ZXMgKi9cbmZ1bmN0aW9uIGtlZXBQcmVjaXNpb24oeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucm91bmQoUFJFQ0lTSU9OX0ZBQ1RPUiAqIHgpIC8gUFJFQ0lTSU9OX0ZBQ1RPUjtcbn1cblxuZnVuY3Rpb24gY29udmVydE1vbEdyYXBoVG9Nb2xmaWxlVjNLKG1vbEdyYXBoOiBNb2xHcmFwaCk6IHN0cmluZyB7XG4gIC8vIGNvdW50cyBsaW5lXG4gIGNvbnN0IGF0b21UeXBlID0gbW9sR3JhcGguYXRvbXMuYXRvbVR5cGVzO1xuICBjb25zdCB4ID0gbW9sR3JhcGguYXRvbXMueDtcbiAgY29uc3QgeSA9IG1vbEdyYXBoLmF0b21zLnk7XG4gIGNvbnN0IGF0b21Ld2FyZ3MgPSBtb2xHcmFwaC5hdG9tcy5rd2FyZ3M7XG4gIGNvbnN0IGJvbmRUeXBlID0gbW9sR3JhcGguYm9uZHMuYm9uZFR5cGVzO1xuICBjb25zdCBhdG9tUGFpciA9IG1vbEdyYXBoLmJvbmRzLmF0b21QYWlycztcbiAgY29uc3QgYm9uZEt3YXJncyA9IG1vbEdyYXBoLmJvbmRzLmt3YXJncztcbiAgY29uc3QgYm9uZENvbmZpZyA9IG1vbEdyYXBoLmJvbmRzLmJvbmRDb25maWd1cmF0aW9uO1xuICBjb25zdCBhdG9tQ291bnQgPSBhdG9tVHlwZS5sZW5ndGg7XG4gIGNvbnN0IGJvbmRDb3VudCA9IG1vbEdyYXBoLmJvbmRzLmJvbmRUeXBlcy5sZW5ndGg7XG5cbiAgLy8gdG9kbyByZXdyaXRlIHVzaW5nIGNvbnN0YW50c1xuICBjb25zdCBtb2xmaWxlQ291bnRzTGluZSA9IFYzS19CRUdJTl9DT1VOVFNfTElORSArIGF0b21Db3VudCArICcgJyArIGJvbmRDb3VudCArIFYzS19DT1VOVFNfTElORV9FTkRJTkc7XG5cbiAgLy8gYXRvbSBibG9ja1xuICBsZXQgbW9sZmlsZUF0b21CbG9jayA9ICcnO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGF0b21Db3VudDsgKytpKSB7XG4gICAgY29uc3QgYXRvbUlkeCA9IGkgKyAxO1xuICAgIGNvbnN0IGNvb3JkaW5hdGUgPSBbeFtpXS50b1N0cmluZygpLCB5W2ldLnRvU3RyaW5nKCldO1xuXG4gICAgLy8gZm9ybWF0IGNvb3JkaW5hdGVzIHNvIHRoYXQgdGhleSBoYXZlIDYgZGlnaXRzIGFmdGVyIGRlY2ltYWwgcG9pbnRcbiAgICAvLyBmb3IgKGxldCBrID0gMDsgayA8IDI7ICsraykge1xuICAgIC8vICAgY29uc3QgZm9ybWF0dGVkID0gY29vcmRpbmF0ZVtrXS50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgLy8gICBpZiAoZm9ybWF0dGVkLmxlbmd0aCA9PT0gMSlcbiAgICAvLyAgICAgZm9ybWF0dGVkLnB1c2goJzAnKTtcbiAgICAvLyAgIGZvcm1hdHRlZFsxXSA9IGZvcm1hdHRlZFsxXS5wYWRFbmQoVjNLX0FUT01fQ09PUkRJTkFURV9QUkVDSVNJT04sICcwJyk7XG4gICAgLy8gICBjb29yZGluYXRlW2tdID0gZm9ybWF0dGVkLmpvaW4oJy4nKTtcbiAgICAvLyB9XG5cbiAgICBjb25zdCBhdG9tTGluZSA9IFYzS19CRUdJTl9EQVRBX0xJTkUgKyBhdG9tSWR4ICsgJyAnICsgYXRvbVR5cGVbaV0gKyAnICcgK1xuICAgICAgY29vcmRpbmF0ZVswXSArICcgJyArIGNvb3JkaW5hdGVbMV0gKyAnICcgKyBhdG9tS3dhcmdzW2ldO1xuICAgIG1vbGZpbGVBdG9tQmxvY2sgKz0gYXRvbUxpbmU7XG4gIH1cblxuICAvLyBib25kIGJsb2NrXG4gIGxldCBtb2xmaWxlQm9uZEJsb2NrID0gJyc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYm9uZENvdW50OyArK2kpIHtcbiAgICBjb25zdCBib25kSWR4ID0gaSArIDE7XG4gICAgY29uc3QgZmlyc3RBdG9tID0gYXRvbVBhaXJbaV1bMF07XG4gICAgY29uc3Qgc2Vjb25kQXRvbSA9IGF0b21QYWlyW2ldWzFdO1xuICAgIGNvbnN0IGt3YXJncyA9IGJvbmRLd2FyZ3MuaGFzKGkpID8gJyAnICsgYm9uZEt3YXJncy5nZXQoaSkgOiAnJztcbiAgICBjb25zdCBib25kQ2ZnID0gYm9uZENvbmZpZy5oYXMoaSkgPyAnIENGRz0nICsgYm9uZENvbmZpZy5nZXQoaSkgOiAnJztcbiAgICBjb25zdCBib25kTGluZSA9IFYzS19CRUdJTl9EQVRBX0xJTkUgKyBib25kSWR4ICsgJyAnICsgYm9uZFR5cGVbaV0gKyAnICcgK1xuICAgICAgZmlyc3RBdG9tICsgJyAnICsgc2Vjb25kQXRvbSArIGJvbmRDZmcgKyBrd2FyZ3MgKyAnXFxuJztcbiAgICBtb2xmaWxlQm9uZEJsb2NrICs9IGJvbmRMaW5lO1xuICB9XG5cbiAgY29uc3QgbW9sZmlsZVBhcnRzID0gW1xuICAgIFYzS19IRUFERVJfRklSU1RfTElORSxcbiAgICBWM0tfSEVBREVSX1NFQ09ORF9MSU5FLFxuICAgIFYzS19CRUdJTl9DVEFCX0JMT0NLLFxuICAgIG1vbGZpbGVDb3VudHNMaW5lLFxuICAgIFYzS19CRUdJTl9BVE9NX0JMT0NLLFxuICAgIG1vbGZpbGVBdG9tQmxvY2ssXG4gICAgVjNLX0VORF9BVE9NX0JMT0NLLFxuICAgIFYzS19CRUdJTl9CT05EX0JMT0NLLFxuICAgIG1vbGZpbGVCb25kQmxvY2ssXG4gICAgVjNLX0VORF9CT05EX0JMT0NLLFxuICAgIFYzS19FTkRfQ1RBQl9CTE9DSyxcbiAgICBWM0tfRU5ELFxuICBdO1xuICBjb25zdCByZXN1bHRpbmdNb2xmaWxlID0gbW9sZmlsZVBhcnRzLmpvaW4oJycpO1xuICAvLyBjb25zb2xlLmxvZyhyZXN1bHRpbmdNb2xmaWxlKTtcblxuICByZXR1cm4gcmVzdWx0aW5nTW9sZmlsZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFN5bWJvbFRvQ2FwcGVkTW9sZmlsZU1hcChtb25vbWVyc0xpYkxpc3Q6IGFueVtdKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkPiB7XG4gIGlmIChERy5GdW5jLmZpbmQoe3BhY2thZ2U6ICdDaGVtJywgbmFtZTogJ2dldFJkS2l0TW9kdWxlJ30pLmxlbmd0aCA9PT0gMCkge1xuICAgIGdyb2suc2hlbGwud2FybmluZygnVHJhbnNmb3JtYXRpb24gdG8gYXRvbWljIGxldmVsIHJlcXVpcmVzIHBhY2thZ2UgXCJDaGVtXCIgaW5zdGFsbGVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHN5bWJvbFRvQ2FwcGVkTW9sZmlsZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNvbnN0IG1vZHVsZVJka2l0ID0gYXdhaXQgZ3Jvay5mdW5jdGlvbnMuY2FsbCgnQ2hlbTpnZXRSZEtpdE1vZHVsZScpO1xuXG4gIGZvciAoY29uc3QgbW9ub21lckxpYk9iamVjdCBvZiBtb25vbWVyc0xpYkxpc3QpIHtcbiAgICBjb25zdCBtb25vbWVyU3ltYm9sID0gbW9ub21lckxpYk9iamVjdFtIRUxNX0ZJRUxEUy5TWU1CT0xdO1xuICAgIGNvbnN0IGNhcEdyb3VwcyA9IHBhcnNlQ2FwR3JvdXBzKG1vbm9tZXJMaWJPYmplY3RbSEVMTV9GSUVMRFMuUkdST1VQU10pO1xuICAgIGNvbnN0IGNhcEdyb3VwSWR4TWFwID0gcGFyc2VDYXBHcm91cElkeE1hcChtb25vbWVyTGliT2JqZWN0W0hFTE1fRklFTERTLk1PTEZJTEVdKTtcblxuICAgIGNvbnN0IG1vbGZpbGVWM0sgPSBjb252ZXJ0TW9sZmlsZVRvVjNLKHJlbW92ZVJHcm91cExpbmVzKG1vbm9tZXJMaWJPYmplY3RbSEVMTV9GSUVMRFMuTU9MRklMRV0pLCBtb2R1bGVSZGtpdCk7XG4gICAgY29uc3QgY291bnRzID0gcGFyc2VBdG9tQW5kQm9uZENvdW50cyhtb2xmaWxlVjNLKTtcblxuICAgIGNvbnN0IGF0b21zID0gcGFyc2VBdG9tQmxvY2sobW9sZmlsZVYzSywgY291bnRzLmF0b21Db3VudCk7XG4gICAgY29uc3QgYm9uZHMgPSBwYXJzZUJvbmRCbG9jayhtb2xmaWxlVjNLLCBjb3VudHMuYm9uZENvdW50KTtcbiAgICBjb25zdCBtZXRhID0gZ2V0TW9ub21lck1ldGFkYXRhKGF0b21zLCBib25kcywgY2FwR3JvdXBzLCBjYXBHcm91cElkeE1hcCk7XG5cbiAgICBjb25zdCBtb25vbWVyR3JhcGg6IE1vbEdyYXBoID0ge2F0b21zOiBhdG9tcywgYm9uZHM6IGJvbmRzLCBtZXRhOiBtZXRhfTtcblxuICAgIHJlbW92ZUh5ZHJvZ2VuKG1vbm9tZXJHcmFwaCk7XG5cbiAgICBjb25zdCBtb2xmaWxlID0gY29udmVydE1vbEdyYXBoVG9Nb2xmaWxlVjNLKG1vbm9tZXJHcmFwaCk7XG4gICAgc3ltYm9sVG9DYXBwZWRNb2xmaWxlTWFwLnNldChtb25vbWVyU3ltYm9sLCBtb2xmaWxlKTtcbiAgfVxuICByZXR1cm4gc3ltYm9sVG9DYXBwZWRNb2xmaWxlTWFwO1xufVxuXG4vKiogR2V0IHRoZSBWM0sgbW9sZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjYXBwZWQgTW9ub21lciAoZGVmYXVsdCBjYXAgZ3JvdXBzKSAgKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXBQZXB0aWRlTW9ub21lcihtb25vbWVyOiBNb25vbWVyKTogc3RyaW5nIHtcbiAgY29uc3QgZnVuY0xpc3Q6IERHLkZ1bmNbXSA9IERHLkZ1bmMuZmluZCh7cGFja2FnZTogJ0NoZW0nLCBuYW1lOiAnZ2V0UmRLaXRNb2R1bGUnfSk7XG4gIGNvbnN0IG1vZHVsZVJka2l0ID0gZnVuY0xpc3RbMF0uYXBwbHkoKTtcblxuICBjb25zdCBjYXBHcm91cHMgPSBwYXJzZUNhcEdyb3Vwcyhtb25vbWVyW0hFTE1fRklFTERTLlJHUk9VUFNdKTtcbiAgY29uc3QgY2FwR3JvdXBJZHhNYXAgPSBwYXJzZUNhcEdyb3VwSWR4TWFwKG1vbm9tZXJbSEVMTV9GSUVMRFMuTU9MRklMRV0pO1xuICBjb25zdCBtb2xmaWxlVjNLID0gY29udmVydE1vbGZpbGVUb1YzSyhyZW1vdmVSR3JvdXBMaW5lcyhtb25vbWVyW0hFTE1fRklFTERTLk1PTEZJTEVdKSwgbW9kdWxlUmRraXQpO1xuICBjb25zdCBjb3VudHMgPSBwYXJzZUF0b21BbmRCb25kQ291bnRzKG1vbGZpbGVWM0spO1xuXG4gIGNvbnN0IGF0b21zID0gcGFyc2VBdG9tQmxvY2sobW9sZmlsZVYzSywgY291bnRzLmF0b21Db3VudCk7XG4gIGNvbnN0IGJvbmRzID0gcGFyc2VCb25kQmxvY2sobW9sZmlsZVYzSywgY291bnRzLmJvbmRDb3VudCk7XG4gIGNvbnN0IG1ldGEgPSBnZXRNb25vbWVyTWV0YWRhdGEoYXRvbXMsIGJvbmRzLCBjYXBHcm91cHMsIGNhcEdyb3VwSWR4TWFwKTtcblxuICBjb25zdCBtb25vbWVyR3JhcGg6IE1vbEdyYXBoID0ge2F0b21zOiBhdG9tcywgYm9uZHM6IGJvbmRzLCBtZXRhOiBtZXRhfTtcblxuICBhZGp1c3RQZXB0aWRlTW9ub21lckdyYXBoKG1vbm9tZXJHcmFwaCk7XG5cbiAgY29uc3QgbW9sZmlsZSA9IGNvbnZlcnRNb2xHcmFwaFRvTW9sZmlsZVYzSyhtb25vbWVyR3JhcGgpO1xuICByZXR1cm4gbW9sZmlsZTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vICBTZXF1ZW5jZSB0cmFuc2xhdG9yIC8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKiBDdXJyZW50bHkgdGhlIFNUIGhhcyBwZWN1bGlhciB0eXBlcyBvZiBtb25vbWVycywgd2hpY2ggZG8gbm90IGZpdCB0aGUgSEVMTVxuICogQ29yZSBsaWJyYXJ5IHR5cGVzIChpbiBwYXJ0aWN1bGFyLCB0aGUgUk5BIG1vbm9tZXJzIGFyZSBiYWNrYm9uZXMgb25seSxcbiAqIGFuZCBwcmVzZW50ZWQgaW4gTW9sZmlsZSBWM0sgZm9ybWF0KS5cbiAqIFRPRE86IGludGVncmF0ZSB0aGlzIHBhcnQgd2l0aCB0aGUgYWJvdmUgZnVuY3Rpb25hbGl0eVxuICogQ3VzdG9tIF90b0F0b21pY0xldmVsIHZlcnNpb24gZm9yIFNlcXVlbmNlVHJhbnNsYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VxdWVuY2VUb01vbEZpbGVTVChcbiAgbW9ub21lclNlcTogc3RyaW5nW10sIC8vIHNlcXVlbmNlIG9mIHZhbHVlcyBvZiAnc3ltYm9sJyBmaWVsZCBmb3IgbW9ub21lcnNcbiAgc3ltYm9sVG9Nb2xmaWxlVjNLT2JqOiB7IFtzeW1ib2w6IHN0cmluZ106IHN0cmluZyB9IC8vIG1hcHBpbmcgb2Ygc3ltYm9sIHRvIG1vbGZpbGUgVjMwMDBcbik6IHN0cmluZyB8IG51bGwge1xuICAvLyB3b3JrIGluIFNFUV9UUkFOIG1vZGUsIHdoZXJlOlxuICAvLyAtIG1vbm9tZXJzIHdpdGggcG9seW1lclR5cGUgJ1JOQScgaGF2ZSBtb25vbWVyIHR5cGUgJ2JhY2tib25lJ1xuICAvLyAtIHRoZSBsaWJyYXJ5IHByb3ZpZGVzIG1vbGZpbGVzIGluIGZvcm1hdCBWMzAwMFxuICBjb25zdCBtb2RlID0gTU9ERS5TRVFfVFJBTjtcbiAgY29uc3QgYWxwaGFiZXQgPSBBTFBIQUJFVC5QVDsgLy8gZHVtbXkgdmFsdWUhIHRvZG86IG1ha2UgdGhlIGFyZ3VtZW50IG9wdGlvbmFsXG4gIGNvbnN0IHBvbHltZXJUeXBlID0gSEVMTV9QT0xZTUVSX1RZUEUuUk5BOyAvLyBkdW1teSB2YWx1ZSEgdG9kbzogbWFrZSB0aGUgYXJndW1lbnQgb3B0aW9uYWxcblxuICAvLyB0b2RvOiBjb25zaWRlciByZWZhY3RvcmluZyBmcm9tIG9iaiB0byBtYXAgaW4gbW9ub21lci13b3Jsc1xuICBjb25zdCBzeW1ib2xUb01vbGZpbGVWM0tNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHN5bSBpbiBzeW1ib2xUb01vbGZpbGVWM0tPYmopXG4gICAgc3ltYm9sVG9Nb2xmaWxlVjNLTWFwLnNldChzeW0sIHN5bWJvbFRvTW9sZmlsZVYzS09ialtzeW1dKTtcblxuICBjb25zdCBtb25vbWVyc0RpY3QgPSBnZXRNb25vbWVyc0RpY3RGcm9tTWFwKHN5bWJvbFRvTW9sZmlsZVYzS01hcCk7XG4gIGNvbnN0IHJlc3VsdCA9IG1vbm9tZXJTZXFUb01vbGZpbGUobW9ub21lclNlcSwgbW9ub21lcnNEaWN0LCBhbHBoYWJldCwgcG9seW1lclR5cGUsIG1vZGUpO1xuICAvLyBjb25zb2xlLmxvZyhyZWNvbnN0cnVjdGVkW3Jvd10pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBDb21wdXRlIHRoZSBhdG9tL2JvbmQgY291bnRzIGZvciB0aGUgcmVzdWx0aW5nIG1vbGZpbGUsIGRlcGVuZGluZyBvbiB0aGVcbiAqIHR5cGUgb2YgcG9seW1lciAocGVwdGlkZS9udWNsZW90aWRlKSAqL1xuZnVuY3Rpb24gZ2V0UmVzdWx0aW5nQXRvbUJvbmRDb3VudHNTVChcbiAgbW9ub21lclNlcTogc3RyaW5nW10sIG1vbm9tZXJzRGljdDogTWFwPHN0cmluZywgTW9sR3JhcGg+LFxuICBhbHBoYWJldDogQUxQSEFCRVQsIHBvbHltZXJUeXBlOiBIRUxNX1BPTFlNRVJfVFlQRVxuKTogeyBhdG9tQ291bnQ6IG51bWJlciwgYm9uZENvdW50OiBudW1iZXIgfSB7XG4gIGxldCBhdG9tQ291bnQgPSAwO1xuICBsZXQgYm9uZENvdW50ID0gMDtcblxuICAvLyBzdW0gdXAgYWxsIHRoZSBhdG9tcy9ub2RlcyBwcm92aWRlZCBieSB0aGUgc2VxdWVuY2VcbiAgZm9yIChjb25zdCBtb25vbWVyU3ltYm9sIG9mIG1vbm9tZXJTZXEpIHtcbiAgICBjb25zdCBtb25vbWVyID0gbW9ub21lcnNEaWN0LmdldChtb25vbWVyU3ltYm9sKSE7XG4gICAgYXRvbUNvdW50ICs9IG1vbm9tZXIuYXRvbXMueC5sZW5ndGg7XG4gICAgYm9uZENvdW50ICs9IG1vbm9tZXIuYm9uZHMuYm9uZFR5cGVzLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGFkZCBleHRyYSB2YWx1ZXMgZGVwZW5kaW5nIG9uIHRoZSBwb2x5bWVyIHR5cGVcbiAgaWYgKHBvbHltZXJUeXBlID09PSBIRUxNX1BPTFlNRVJfVFlQRS5QRVBUSURFKSB7XG4gICAgLy8gYWRkIHRoZSByaWdodG1vc3QvdGVybWluYXRpbmcgY2FwIGdyb3VwICdPSCcgKGkuZS4gJ08nKVxuICAgIGF0b21Db3VudCArPSAxO1xuICAgIC8vIGFkZCBjaGFpbi1leHRlbmRpbmcgYm9uZHMgKEMtTkggcGVyIGVhY2ggbW9ub21lciBwYWlyIGFuZCB0ZXJtaW5hbCBDLU9IKVxuICAgIGJvbmRDb3VudCArPSBtb25vbWVyU2VxLmxlbmd0aDtcbiAgfSBlbHNlIHsgLy8gbnVjbGVvdGlkZXNcbiAgICBjb25zdCBzdWdhciA9IChhbHBoYWJldCA9PT0gQUxQSEFCRVQuRE5BKSA/XG4gICAgICBtb25vbWVyc0RpY3QuZ2V0KERFT1hZUklCT1NFKSEgOiBtb25vbWVyc0RpY3QuZ2V0KFJJQk9TRSkhO1xuICAgIGNvbnN0IHBob3NwaGF0ZSA9IG1vbm9tZXJzRGljdC5nZXQoUEhPU1BIQVRFKSE7XG5cbiAgICAvLyBhZGQgcGhvc3BoYXRlIGFuZCBzdWdhciBwZXIgZWFjaCBudWNsZW9iYXNlIHN5bWJvbFxuICAgIGF0b21Db3VudCArPSBtb25vbWVyU2VxLmxlbmd0aCAqIChwaG9zcGhhdGUuYXRvbXMueC5sZW5ndGggKyBzdWdhci5hdG9tcy54Lmxlbmd0aCk7XG4gICAgLy8gYWRkIHRoZSBsZWZ0bW9zdCBjYXAgZ3JvdXAgJ09IJyAoaS5lLiAnTycpIHRvIHRoZSBmaXJzdCBwaG9zcGhhdGVcbiAgICBhdG9tQ291bnQgKz0gMTtcblxuICAgIC8vIGFkZCBib25kcyBmcm9tIHBob3NwaGF0ZSBhbmQgc3VnYXJcbiAgICBib25kQ291bnQgKz0gbW9ub21lclNlcS5sZW5ndGggKiAocGhvc3BoYXRlLmJvbmRzLmJvbmRUeXBlcy5sZW5ndGggKyBzdWdhci5ib25kcy5ib25kVHlwZXMubGVuZ3RoKTtcblxuICAgIC8vIGFkZCBjaGFpbi1leHRlbmRpbmcgYW5kIGJyYW5jaCBib25kcyAoTy1QLCBDLU8gYW5kIEMtTiBwZXIgZWFjaCBudWNsZW90aWRlKVxuICAgIGJvbmRDb3VudCArPSBtb25vbWVyU2VxLmxlbmd0aCAqIDM7XG4gIH1cblxuICByZXR1cm4ge2F0b21Db3VudCwgYm9uZENvdW50fTtcbn1cbiJdfQ==
|
|
1282
|
+
//# sourceMappingURL=to-atomic-level.js.map
|